larvitar.js

(function webpackUniversalModuleDefinition(root, factory) {
	if(typeof exports === 'object' && typeof module === 'object')
		module.exports = factory();
	else if(typeof define === 'function' && define.amd)
		define([], factory);
	else if(typeof exports === 'object')
		exports["larvitar"] = factory();
	else
		root["larvitar"] = factory();
})(self, () => {
return /******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ 4973:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  addContoursTool: () => (/* binding */ addContoursTool),
  addDefaultTools: () => (/* binding */ addDefaultTools),
  addDiameterTool: () => (/* binding */ addDiameterTool),
  addMaskEditingTool: () => (/* binding */ addMaskEditingTool),
  addSeedsTool: () => (/* binding */ addSeedsTool),
  addStackStateToElement: () => (/* binding */ addStackStateToElement),
  addToolStateSingleSlice: () => (/* binding */ addToolStateSingleSlice),
  clearCornerstoneElements: () => (/* binding */ clearCornerstoneElements),
  clearMeasurements: () => (/* binding */ clearMeasurements),
  clearToolStateByName: () => (/* binding */ clearToolStateByName),
  getCurrentMaskData: () => (/* binding */ getCurrentMaskData),
  getToolState: () => (/* binding */ imageTools_getToolState),
  setSegmentationConfig: () => (/* binding */ setSegmentationConfig),
  setToolActive: () => (/* binding */ setToolActive),
  setToolDisabled: () => (/* binding */ setToolDisabled),
  setToolEnabled: () => (/* binding */ setToolEnabled),
  setToolPassive: () => (/* binding */ setToolPassive),
  syncToolStack: () => (/* binding */ syncToolStack),
  updateDiameterTool: () => (/* binding */ updateDiameterTool),
  updateStackToolState: () => (/* binding */ updateStackToolState)
});

// EXTERNAL MODULE: ./node_modules/cornerstone-core/dist/cornerstone.js
var cornerstone = __webpack_require__(7371);
var cornerstone_default = /*#__PURE__*/__webpack_require__.n(cornerstone);
// EXTERNAL MODULE: ./node_modules/cornerstone-tools/dist/cornerstoneTools.js
var cornerstoneTools = __webpack_require__(4030);
var cornerstoneTools_default = /*#__PURE__*/__webpack_require__.n(cornerstoneTools);
// EXTERNAL MODULE: ./node_modules/lodash/lodash.js
var lodash = __webpack_require__(6486);
// EXTERNAL MODULE: ./imaging/tools/default.ts
var tools_default = __webpack_require__(6694);
;// CONCATENATED MODULE: ./imaging/tools/custom/contourTool.js
/** @module imaging/tools/custom/contourTool
 *  @desc  This file provides functionalities for
 *         rendering segmentation contours with a
 *         custom cornestone tool
 */

// external libraries




// internal libraries


// cornerstone tools imports
const external = (cornerstoneTools_default()).external;
const EVENTS = (cornerstoneTools_default()).EVENTS;
const BaseAnnotationTool = cornerstoneTools_default().importInternal("base/BaseAnnotationTool");
const getToolState = (cornerstoneTools_default()).getToolState;
const addToolState = (cornerstoneTools_default()).addToolState;
const removeToolState = (cornerstoneTools_default()).removeToolState;
const toolStyle = (cornerstoneTools_default()).toolStyle;
const toolColors = (cornerstoneTools_default()).toolColors;
const triggerEvent = cornerstoneTools_default().importInternal("util/triggerEvent");
const pointInsideBoundingBox = cornerstoneTools_default().importInternal("util/pointInsideBoundingBox");
const calculateSUV = cornerstoneTools_default().importInternal("util/calculateSUV");
const numbersWithCommas = cornerstoneTools_default().importInternal("util/numbersWithCommas");
const getNewContext = cornerstoneTools_default().importInternal("drawing/getNewContext");
const draw = cornerstoneTools_default().importInternal("drawing/draw");
const drawJoinedLines = cornerstoneTools_default().importInternal("drawing/drawJoinedLines");
const drawHandles = cornerstoneTools_default().importInternal("drawing/drawHandles");
const drawLinkedTextBox = cornerstoneTools_default().importInternal("drawing/drawLinkedTextBox");
const clipToBox = cornerstoneTools_default().importInternal("util/clip");
const freehandRoiCursor = cornerstoneTools_default().importInternal("cursors/freehandRoiCursor");
const getLogger = cornerstoneTools_default().importInternal("util/getLogger");
const throttle = cornerstoneTools_default().importInternal("util/throttle");
const logger = getLogger("tools:annotation:FreehandRoiTool");
const freehandUtils = cornerstoneTools_default().importInternal("util/freehandUtils");

// TODO check how to import these
// const toolCursor = csTools.importInternal("store/setToolCursor");
// const hideToolCursor = toolCursor.hideToolCursor;
// const setToolCursor = toolCursor.setToolCursor;
// const findAndMoveHelpers = csTools.importInternal("util/findAndMoveHelpers");
// const moveHandleNearImagePoint = findAndMoveHelpers.moveHandleNearImagePoint;

const {
  insertOrDelete,
  freehandArea,
  calculateFreehandStatistics,
  freehandIntersect,
  FreehandHandleData
} = freehandUtils;
const state = {
  // Global
  globalTools: {},
  globalToolChangeHistory: [],
  // Tracking
  enabledElements: [],
  tools: [],
  isToolLocked: false,
  activeMultiPartTool: null,
  mousePositionImage: {},
  // Settings
  clickProximity: 6,
  touchProximity: 10,
  handleRadius: 6,
  deleteIfHandleOutsideImage: true,
  preventHandleOutsideImage: false,
  // Cursor
  svgCursorUrl: null
};

/**
 * @public
 * @class ContoursTool
 * @memberof Tools.Annotation
 * @classdesc Tool for drawing a set of contours
 * @extends Tools.Base.BaseAnnotationTool
 */
class ContoursTool extends BaseAnnotationTool {
  constructor(props = {}) {
    const defaultProps = {
      name: "ContoursTool",
      supportedInteractionTypes: ["Mouse", "Touch"],
      configuration: defaultFreehandConfiguration(),
      svgCursor: freehandRoiCursor
    };
    super(props, defaultProps);
    this.initializeContours(props.contoursParsedData, props.segmentationName);
    this.isMultiPartTool = true;
    this._drawing = false;
    this._dragging = false;
    this._modifying = false;

    // Create bound callback functions for private event loops
    this._drawingMouseDownCallback = this._drawingMouseDownCallback.bind(this);
    this._drawingMouseMoveCallback = this._drawingMouseMoveCallback.bind(this);
    this._drawingMouseDragCallback = this._drawingMouseDragCallback.bind(this);
    this._drawingMouseUpCallback = this._drawingMouseUpCallback.bind(this);
    this._drawingMouseDoubleClickCallback = this._drawingMouseDoubleClickCallback.bind(this);
    this._editMouseUpCallback = this._editMouseUpCallback.bind(this);
    this._editMouseDragCallback = this._editMouseDragCallback.bind(this);
    this._drawingTouchStartCallback = this._drawingTouchStartCallback.bind(this);
    this._drawingTouchDragCallback = this._drawingTouchDragCallback.bind(this);
    this._drawingDoubleTapClickCallback = this._drawingDoubleTapClickCallback.bind(this);
    this._editTouchDragCallback = this._editTouchDragCallback.bind(this);
    this.throttledUpdateCachedStats = throttle(this.updateCachedStats, 110);
  }
  initializeContours(contourData, segmentationName) {
    var elements = cornerstone_default().getEnabledElements();
    (0,lodash.each)(elements, el => {
      var slices = contourData[el.element.id][segmentationName];
      for (var slice in slices) {
        var linesPerSlice = contourData[el.element.id][segmentationName][slice].lines;
        var lines = (0,lodash.map)(linesPerSlice, line => {
          let dataToInject = {
            visible: true,
            active: false,
            invalidated: false,
            color: "#FF0000",
            handles: {
              points: line
            }
          };
          return dataToInject;
        });
        addToolStateSingleSlice(el.element, "ContoursTool", lines, slice);
      }
    });
  }
  createNewMeasurement(eventData) {
    const goodEventData = eventData && eventData.currentPoints && eventData.currentPoints.image;
    if (!goodEventData) {
      logger.error(`required eventData not supplied to tool ${this.name}'s createNewMeasurement`);
      return;
    }
    const measurementData = {
      visible: true,
      active: true,
      invalidated: true,
      color: undefined,
      handles: {
        points: []
      }
    };
    measurementData.handles.textBox = {
      active: false,
      hasMoved: false,
      movesIndependently: false,
      drawnIndependently: true,
      allowedOutsideImage: true,
      hasBoundingBox: true
    };
    return measurementData;
  }

  /**
   *
   *
   * @param {*} element element
   * @param {*} data data
   * @param {*} coords coords
   * @returns {Boolean}
   */
  pointNearTool(element, data, coords) {
    const validParameters = data && data.handles && data.handles.points;
    if (!validParameters) {
      throw new Error(`invalid parameters supplied to tool ${this.name}'s pointNearTool`);
    }
    if (!validParameters || data.visible === false) {
      return false;
    }
    const isPointNearTool = this._pointNearHandle(element, data, coords);
    if (isPointNearTool !== undefined) {
      return true;
    }
    return false;
  }

  /**
   * @param {*} element
   * @param {*} data
   * @param {*} coords
   * @returns {number} the distance in px from the provided coordinates to the
   * closest rendered portion of the annotation. -1 if the distance cannot be
   * calculated.
   */
  distanceFromPoint(element, data, coords) {
    let distance = Infinity;
    for (let i = 0; i < data.handles.points.length; i++) {
      const distanceI = external.cornerstoneMath.point.distance(data.handles.points[i], coords);
      distance = Math.min(distance, distanceI);
    }

    // If an error caused distance not to be calculated, return -1.
    if (distance === Infinity) {
      return -1;
    }
    return distance;
  }

  /**
   * @param {*} element
   * @param {*} data
   * @param {*} coords
   * @returns {number} the distance in canvas units from the provided coordinates to the
   * closest rendered portion of the annotation. -1 if the distance cannot be
   * calculated.
   */
  distanceFromPointCanvas(element, data, coords) {
    let distance = Infinity;
    if (!data) {
      return -1;
    }
    const canvasCoords = external.cornerstone.pixelToCanvas(element, coords);
    const points = data.handles.points;
    for (let i = 0; i < points.length; i++) {
      const handleCanvas = external.cornerstone.pixelToCanvas(element, points[i]);
      const distanceI = external.cornerstoneMath.point.distance(handleCanvas, canvasCoords);
      distance = Math.min(distance, distanceI);
    }

    // If an error caused distance not to be calculated, return -1.
    if (distance === Infinity) {
      return -1;
    }
    return distance;
  }

  /**
   *
   *
   *
   * @param {Object} image image
   * @param {Object} element element
   * @param {Object} data data
   *
   * @returns {void}  void
   */
  updateCachedStats(image, element, data) {
    // Define variables for the area and mean/standard deviation
    let meanStdDev, meanStdDevSUV;
    const seriesModule = external.cornerstone.metaData.get("generalSeriesModule", image.imageId);
    const modality = seriesModule ? seriesModule.modality : null;
    const points = data.handles.points;
    // If the data has been invalidated, and the tool is not currently active,
    // We need to calculate it again.

    // Retrieve the bounds of the ROI in image coordinates
    const bounds = {
      left: points[0].x,
      right: points[0].x,
      bottom: points[0].y,
      top: points[0].x
    };
    for (let i = 0; i < points.length; i++) {
      bounds.left = Math.min(bounds.left, points[i].x);
      bounds.right = Math.max(bounds.right, points[i].x);
      bounds.bottom = Math.min(bounds.bottom, points[i].y);
      bounds.top = Math.max(bounds.top, points[i].y);
    }
    const polyBoundingBox = {
      left: bounds.left,
      top: bounds.bottom,
      width: Math.abs(bounds.right - bounds.left),
      height: Math.abs(bounds.top - bounds.bottom)
    };

    // Store the bounding box information for the text box
    data.polyBoundingBox = polyBoundingBox;

    // First, make sure this is not a color image, since no mean / standard
    // Deviation will be calculated for color images.
    if (!image.color) {
      // Retrieve the array of pixels that the ROI bounds cover
      const pixels = external.cornerstone.getPixels(element, polyBoundingBox.left, polyBoundingBox.top, polyBoundingBox.width, polyBoundingBox.height);

      // Calculate the mean & standard deviation from the pixels and the object shape
      meanStdDev = calculateFreehandStatistics.call(this, pixels, polyBoundingBox, data.handles.points);
      if (modality === "PT") {
        // If the image is from a PET scan, use the DICOM tags to
        // Calculate the SUV from the mean and standard deviation.

        // Note that because we are using modality pixel values from getPixels, and
        // The calculateSUV routine also rescales to modality pixel values, we are first
        // Returning the values to storedPixel values before calcuating SUV with them.
        // TODO: Clean this up? Should we add an option to not scale in calculateSUV?
        meanStdDevSUV = {
          mean: calculateSUV(image, (meanStdDev.mean - image.intercept) / image.slope),
          stdDev: calculateSUV(image, (meanStdDev.stdDev - image.intercept) / image.slope)
        };
      }

      // If the mean and standard deviation values are sane, store them for later retrieval
      if (meanStdDev && !isNaN(meanStdDev.mean)) {
        data.meanStdDev = meanStdDev;
        data.meanStdDevSUV = meanStdDevSUV;
      }
    }

    // Retrieve the pixel spacing values, and if they are not
    // Real non-zero values, set them to 1
    const columnPixelSpacing = image.columnPixelSpacing || 1;
    const rowPixelSpacing = image.rowPixelSpacing || 1;
    const scaling = columnPixelSpacing * rowPixelSpacing;
    const area = freehandArea(data.handles.points, scaling);

    // If the area value is sane, store it for later retrieval
    if (!isNaN(area)) {
      data.area = area;
    }

    // Set the invalidated flag to false so that this data won't automatically be recalculated
    data.invalidated = false;
  }

  /**
   *
   *
   * @param {*} evt
   * @returns {undefined}
   */
  renderToolData(evt) {
    const eventData = evt.detail;

    // If we have no toolState for this element, return immediately as there is nothing to do
    const toolState = getToolState(evt.currentTarget, this.name);
    if (!toolState) {
      return;
    }
    const {
      image,
      element
    } = eventData;
    const config = this.configuration;
    const seriesModule = external.cornerstone.metaData.get("generalSeriesModule", image.imageId);
    const modality = seriesModule ? seriesModule.modality : null;

    // We have tool data for this element - iterate over each one and draw it
    const context = getNewContext(eventData.canvasContext.canvas);
    const lineWidth = toolStyle.getToolWidth();
    for (let i = 0; i < toolState.data.length; i++) {
      const data = toolState.data[i];
      if (data.visible === false) {
        continue;
      }
      draw(context, context => {
        let color = toolColors.getColorIfActive(data);
        let fillColor;
        if (data.active) {
          if (data.handles.invalidHandlePlacement) {
            color = config.invalidColor;
            fillColor = config.invalidColor;
          } else {
            color = toolColors.getColorIfActive(data);
            fillColor = toolColors.getFillColor();
          }
        } else {
          fillColor = toolColors.getToolColor();
        }
        if (data.handles.points.length) {
          for (let j = 0; j < data.handles.points.length; j++) {
            const lines = [...data.handles.points[j].lines];
            const points = data.handles.points;
            if (j === points.length - 1 && !data.polyBoundingBox) {
              // If it's still being actively drawn, keep the last line to
              // The mouse location
              lines.push(config.mouseLocation.handles.start);
            }
            drawJoinedLines(context, element, data.handles.points[j], lines, {
              color
            });
          }
        }

        // Draw handles

        const options = {
          color,
          fill: fillColor
        };
        if (config.alwaysShowHandles || data.active && data.polyBoundingBox) {
          // Render all handles
          options.handleRadius = config.activeHandleRadius;
          drawHandles(context, eventData, data.handles.points, options);
        }
        if (data.canComplete) {
          // Draw large handle at the origin if can complete drawing
          options.handleRadius = config.completeHandleRadius;
          const handle = data.handles.points[0];
          drawHandles(context, eventData, [handle], options);
        }
        if (data.active && !data.polyBoundingBox) {
          // Draw handle at origin and at mouse if actively drawing
          options.handleRadius = config.activeHandleRadius;
          drawHandles(context, eventData, config.mouseLocation.handles, options);
          const firstHandle = data.handles.points[0];
          drawHandles(context, eventData, [firstHandle], options);
        }

        // Update textbox stats
        if (data.invalidated === true && !data.active) {
          if (data.meanStdDev && data.meanStdDevSUV && data.area) {
            this.throttledUpdateCachedStats(image, element, data);
          } else {
            this.updateCachedStats(image, element, data);
          }
        }

        // Only render text if polygon ROI has been completed and freehand 'shiftKey' mode was not used:
        if (data.polyBoundingBox && !data.handles.textBox.freehand) {
          // If the textbox has not been moved by the user, it should be displayed on the right-most
          // Side of the tool.
          if (!data.handles.textBox.hasMoved) {
            // Find the rightmost side of the polyBoundingBox at its vertical center, and place the textbox here
            // Note that this calculates it in image coordinates
            data.handles.textBox.x = data.polyBoundingBox.left + data.polyBoundingBox.width;
            data.handles.textBox.y = data.polyBoundingBox.top + data.polyBoundingBox.height / 2;
          }
          const text = textBoxText.call(this, data);
          drawLinkedTextBox(context, element, data.handles.textBox, text, data.handles.points, textBoxAnchorPoints, color, lineWidth, 0, true);
        }
      });
    }
    function textBoxText(data) {
      const {
        meanStdDev,
        meanStdDevSUV,
        area
      } = data;
      // Define an array to store the rows of text for the textbox
      const textLines = [];

      // If the mean and standard deviation values are present, display them
      if (meanStdDev && meanStdDev.mean !== undefined) {
        // If the modality is CT, add HU to denote Hounsfield Units
        let moSuffix = "";
        if (modality === "CT") {
          moSuffix = "HU";
        }
        data.unit = moSuffix;

        // Create a line of text to display the mean and any units that were specified (i.e. HU)
        let meanText = `Mean: ${numbersWithCommas(meanStdDev.mean.toFixed(2))} ${moSuffix}`;
        // Create a line of text to display the standard deviation and any units that were specified (i.e. HU)
        let stdDevText = `StdDev: ${numbersWithCommas(meanStdDev.stdDev.toFixed(2))} ${moSuffix}`;

        // If this image has SUV values to display, concatenate them to the text line
        if (meanStdDevSUV && meanStdDevSUV.mean !== undefined) {
          const SUVtext = " SUV: ";
          meanText += SUVtext + numbersWithCommas(meanStdDevSUV.mean.toFixed(2));
          stdDevText += SUVtext + numbersWithCommas(meanStdDevSUV.stdDev.toFixed(2));
        }

        // Add these text lines to the array to be displayed in the textbox
        textLines.push(meanText);
        textLines.push(stdDevText);
      }

      // If the area is a sane value, display it
      if (area) {
        // Determine the area suffix based on the pixel spacing in the image.
        // If pixel spacing is present, use millimeters. Otherwise, use pixels.
        // This uses Char code 178 for a superscript 2
        let suffix = ` mm${String.fromCharCode(178)}`;
        if (!image.rowPixelSpacing || !image.columnPixelSpacing) {
          suffix = ` pixels${String.fromCharCode(178)}`;
        }

        // Create a line of text to display the area and its units
        const areaText = `Area: ${numbersWithCommas(area.toFixed(2))}${suffix}`;

        // Add this text line to the array to be displayed in the textbox
        textLines.push(areaText);
      }
      return textLines;
    }
    function textBoxAnchorPoints(handles) {
      return handles;
    }
  }
  addNewMeasurement(evt) {
    const eventData = evt.detail;
    this._startDrawing(evt);
    this._addPoint(eventData);
    preventPropagation(evt);
  }
  preMouseDownCallback(evt) {
    const eventData = evt.detail;
    const nearby = this._pointNearHandleAllTools(eventData);
    if (eventData.event.ctrlKey) {
      if (nearby !== undefined && nearby.handleNearby.hasBoundingBox) {
        // Ctrl + clicked textBox, do nothing but still consume event.
      } else {
        insertOrDelete.call(this, evt, nearby);
      }
      preventPropagation(evt);
      return true;
    }
    return false;
  }
  handleSelectedCallback(evt, toolData, handle, interactionType = "mouse") {
    const {
      element
    } = evt.detail;
    const toolState = getToolState(element, this.name);
    console.info(interactionType);
    // if (handle.hasBoundingBox) {
    //   // Use default move handler.
    //   moveHandleNearImagePoint(evt, this, toolData, handle, interactionType);

    //   return;
    // }

    const config = this.configuration;
    config.dragOrigin = {
      x: handle.x,
      y: handle.y
    };

    // Iterating over handles of all toolData instances to find the indices of the selected handle
    for (let toolIndex = 0; toolIndex < toolState.data.length; toolIndex++) {
      const points = toolState.data[toolIndex].handles.points;
      for (let p = 0; p < points.length; p++) {
        if (points[p] === handle) {
          config.currentHandle = p;
          config.currentTool = toolIndex;
        }
      }
    }
    this._modifying = true;
    this._activateModify(element);

    // Interupt eventDispatchers
    preventPropagation(evt);
  }

  /**
   * Event handler for MOUSE_MOVE during drawing event loop.
   *
   * @event
   * @param {Object} evt - The event.
   * @returns {undefined}
   */
  _drawingMouseMoveCallback(evt) {
    const eventData = evt.detail;
    const {
      currentPoints,
      element
    } = eventData;
    const toolState = getToolState(element, this.name);
    const config = this.configuration;
    const currentTool = config.currentTool;
    const data = toolState.data[currentTool];
    const coords = currentPoints.canvas;

    // Set the mouseLocation handle
    this._getMouseLocation(eventData);
    this._checkInvalidHandleLocation(data, eventData);

    // Mouse move -> Polygon Mode
    const handleNearby = this._pointNearHandle(element, data, coords);
    const points = data.handles.points;
    // If there is a handle nearby to snap to
    // (and it's not the actual mouse handle)

    if (handleNearby !== undefined && !handleNearby.hasBoundingBox && handleNearby < points.length - 1) {
      config.mouseLocation.handles.start.x = points[handleNearby].x;
      config.mouseLocation.handles.start.y = points[handleNearby].y;
    }

    // Force onImageRendered
    external.cornerstone.updateImage(element);
  }

  /**
   * Event handler for MOUSE_DRAG during drawing event loop.
   *
   * @event
   * @param {Object} evt - The event.
   * @returns {undefined}
   */
  _drawingMouseDragCallback(evt) {
    if (!this.options.mouseButtonMask.includes(evt.detail.buttons)) {
      return;
    }
    this._drawingDrag(evt);
  }

  /**
   * Event handler for TOUCH_DRAG during drawing event loop.
   *
   * @event
   * @param {Object} evt - The event.
   * @returns {undefined}
   */
  _drawingTouchDragCallback(evt) {
    this._drawingDrag(evt);
  }
  _drawingDrag(evt) {
    const eventData = evt.detail;
    const {
      element
    } = eventData;
    const toolState = getToolState(element, this.name);
    const config = this.configuration;
    const currentTool = config.currentTool;
    const data = toolState.data[currentTool];

    // Set the mouseLocation handle
    this._getMouseLocation(eventData);
    this._checkInvalidHandleLocation(data, eventData);
    this._addPointPencilMode(eventData, data.handles.points);
    this._dragging = true;

    // Force onImageRendered
    external.cornerstone.updateImage(element);
  }

  /**
   * Event handler for MOUSE_UP during drawing event loop.
   *
   * @event
   * @param {Object} evt - The event.
   * @returns {undefined}
   */
  _drawingMouseUpCallback(evt) {
    const {
      element
    } = evt.detail;
    if (!this._dragging) {
      return;
    }
    this._dragging = false;
    const config = this.configuration;
    const currentTool = config.currentTool;
    const toolState = getToolState(element, this.name);
    const data = toolState.data[currentTool];
    if (!freehandIntersect.end(data.handles.points) && data.canComplete) {
      const lastHandlePlaced = config.currentHandle;
      this._endDrawing(element, lastHandlePlaced);
    }
    preventPropagation(evt);
    return;
  }

  /**
   * Event handler for MOUSE_DOWN during drawing event loop.
   *
   * @event
   * @param {Object} evt - The event.
   * @returns {undefined}
   */
  _drawingMouseDownCallback(evt) {
    const eventData = evt.detail;
    const {
      buttons,
      currentPoints,
      element
    } = eventData;
    if (!this.options.mouseButtonMask.includes(buttons)) {
      return;
    }
    const coords = currentPoints.canvas;
    const config = this.configuration;
    const currentTool = config.currentTool;
    const toolState = getToolState(element, this.name);
    const data = toolState.data[currentTool];
    const handleNearby = this._pointNearHandle(element, data, coords);
    if (!freehandIntersect.end(data.handles.points) && data.canComplete) {
      const lastHandlePlaced = config.currentHandle;
      this._endDrawing(element, lastHandlePlaced);
    } else if (handleNearby === undefined) {
      this._addPoint(eventData);
    }
    preventPropagation(evt);
    return;
  }

  /**
   * Event handler for TOUCH_START during drawing event loop.
   *
   * @event
   * @param {Object} evt - The event.
   * @returns {undefined}
   */
  _drawingTouchStartCallback(evt) {
    const eventData = evt.detail;
    const {
      currentPoints,
      element
    } = eventData;
    const coords = currentPoints.canvas;
    const config = this.configuration;
    const currentTool = config.currentTool;
    const toolState = getToolState(element, this.name);
    const data = toolState.data[currentTool];
    const handleNearby = this._pointNearHandle(element, data, coords);
    if (!freehandIntersect.end(data.handles.points) && data.canComplete) {
      const lastHandlePlaced = config.currentHandle;
      this._endDrawing(element, lastHandlePlaced);
    } else if (handleNearby === undefined) {
      this._addPoint(eventData);
    }
    preventPropagation(evt);
    return;
  }

  /** Ends the active drawing loop and completes the polygon.
   *
   * @public
   * @param {Object} element - The element on which the roi is being drawn.
   * @returns {null}
   */
  completeDrawing(element) {
    if (!this._drawing) {
      return;
    }
    const toolState = getToolState(element, this.name);
    const config = this.configuration;
    const data = toolState.data[config.currentTool];
    if (!freehandIntersect.end(data.handles.points) && data.handles.points.length >= 2) {
      const lastHandlePlaced = config.currentHandle;
      data.polyBoundingBox = {};
      this._endDrawing(element, lastHandlePlaced);
    }
  }

  /**
   * Event handler for MOUSE_DOUBLE_CLICK during drawing event loop.
   *
   * @event
   * @param {Object} evt - The event.
   * @returns {undefined}
   */
  _drawingMouseDoubleClickCallback(evt) {
    const {
      element
    } = evt.detail;
    this.completeDrawing(element);
    preventPropagation(evt);
  }

  /**
   * Event handler for DOUBLE_TAP during drawing event loop.
   *
   * @event
   * @param {Object} evt - The event.
   * @returns {undefined}
   */
  _drawingDoubleTapClickCallback(evt) {
    const {
      element
    } = evt.detail;
    this.completeDrawing(element);
    preventPropagation(evt);
  }

  /**
   * Event handler for MOUSE_DRAG during handle drag event loop.
   *
   * @event
   * @param {Object} evt - The event.
   * @returns {undefined}
   */
  _editMouseDragCallback(evt) {
    const eventData = evt.detail;
    const {
      element,
      buttons
    } = eventData;
    if (!this.options.mouseButtonMask.includes(buttons)) {
      return;
    }
    const toolState = getToolState(element, this.name);
    const config = this.configuration;
    const data = toolState.data[config.currentTool];
    const currentHandle = config.currentHandle;
    const points = data.handles.points;
    let handleIndex = -1;

    // Set the mouseLocation handle
    this._getMouseLocation(eventData);
    data.handles.invalidHandlePlacement = freehandIntersect.modify(points, currentHandle);
    data.active = true;
    data.highlight = true;
    points[currentHandle].x = config.mouseLocation.handles.start.x;
    points[currentHandle].y = config.mouseLocation.handles.start.y;
    handleIndex = this._getPrevHandleIndex(currentHandle, points);
    if (currentHandle >= 0) {
      const lastLineIndex = points[handleIndex].lines.length - 1;
      const lastLine = points[handleIndex].lines[lastLineIndex];
      lastLine.x = config.mouseLocation.handles.start.x;
      lastLine.y = config.mouseLocation.handles.start.y;
    }

    // Update the image
    external.cornerstone.updateImage(element);
  }

  /**
   * Event handler for TOUCH_DRAG during handle drag event loop.
   *
   * @event
   * @param {Object} evt - The event.
   * @returns {void}
   */
  _editTouchDragCallback(evt) {
    const eventData = evt.detail;
    const {
      element
    } = eventData;
    const toolState = getToolState(element, this.name);
    const config = this.configuration;
    const data = toolState.data[config.currentTool];
    const currentHandle = config.currentHandle;
    const points = data.handles.points;
    let handleIndex = -1;

    // Set the mouseLocation handle
    this._getMouseLocation(eventData);
    data.handles.invalidHandlePlacement = freehandIntersect.modify(points, currentHandle);
    data.active = true;
    data.highlight = true;
    points[currentHandle].x = config.mouseLocation.handles.start.x;
    points[currentHandle].y = config.mouseLocation.handles.start.y;
    handleIndex = this._getPrevHandleIndex(currentHandle, points);
    if (currentHandle >= 0) {
      const lastLineIndex = points[handleIndex].lines.length - 1;
      const lastLine = points[handleIndex].lines[lastLineIndex];
      lastLine.x = config.mouseLocation.handles.start.x;
      lastLine.y = config.mouseLocation.handles.start.y;
    }

    // Update the image
    external.cornerstone.updateImage(element);
  }

  /**
   * Returns the previous handle to the current one.
   * @param {Number} currentHandle - the current handle index
   * @param {Array} points - the handles Array of the freehand data
   * @returns {Number} - The index of the previos handle
   */
  _getPrevHandleIndex(currentHandle, points) {
    if (currentHandle === 0) {
      return points.length - 1;
    }
    return currentHandle - 1;
  }

  /**
   * Event handler for MOUSE_UP during handle drag event loop.
   *
   * @private
   * @param {Object} evt - The event.
   * @returns {undefined}
   */
  _editMouseUpCallback(evt) {
    const eventData = evt.detail;
    const {
      element
    } = eventData;
    const toolState = getToolState(element, this.name);
    this._deactivateModify(element);
    this._dropHandle(eventData, toolState);
    this._endDrawing(element);
    external.cornerstone.updateImage(element);
  }

  /**
   * Places a handle of the freehand tool if the new location is valid.
   * If the new location is invalid the handle snaps back to its previous position.
   *
   * @private
   * @param {Object} eventData - Data object associated with the event.
   * @param {Object} toolState - The data associated with the freehand tool.
   * @modifies {toolState}
   * @returns {undefined}
   */
  _dropHandle(eventData, toolState) {
    const config = this.configuration;
    const currentTool = config.currentTool;
    const handles = toolState.data[currentTool].handles;
    const points = handles.points;

    // Don't allow the line being modified to intersect other lines
    if (handles.invalidHandlePlacement) {
      const currentHandle = config.currentHandle;
      const currentHandleData = points[currentHandle];
      let previousHandleData;
      if (currentHandle === 0) {
        const lastHandleID = points.length - 1;
        previousHandleData = points[lastHandleID];
      } else {
        previousHandleData = points[currentHandle - 1];
      }

      // Snap back to previous position
      currentHandleData.x = config.dragOrigin.x;
      currentHandleData.y = config.dragOrigin.y;
      previousHandleData.lines[0] = currentHandleData;
      handles.invalidHandlePlacement = false;
    }
  }

  /**
   * Begining of drawing loop when tool is active and a click event happens far
   * from existing handles.
   *
   * @private
   * @param {Object} evt - The event.
   * @returns {undefined}
   */
  _startDrawing(evt) {
    const eventData = evt.detail;
    const measurementData = this.createNewMeasurement(eventData);
    const {
      element
    } = eventData;
    const config = this.configuration;
    let interactionType;
    if (evt.type === EVENTS.MOUSE_DOWN_ACTIVATE) {
      interactionType = "Mouse";
    } else if (evt.type === EVENTS.TOUCH_START_ACTIVE) {
      interactionType = "Touch";
    }
    this._activateDraw(element, interactionType);
    this._getMouseLocation(eventData);
    addToolState(element, this.name, measurementData);
    const toolState = getToolState(element, this.name);
    config.currentTool = toolState.data.length - 1;
    this._activeDrawingToolReference = toolState.data[config.currentTool];
  }

  /**
   * Adds a point on mouse click in polygon mode.
   *
   * @private
   * @param {Object} eventData - data object associated with an event.
   * @returns {undefined}
   */
  _addPoint(eventData) {
    const {
      currentPoints,
      element
    } = eventData;
    const toolState = getToolState(element, this.name);

    // Get the toolState from the last-drawn polygon
    const config = this.configuration;
    const data = toolState.data[config.currentTool];
    if (data.handles.invalidHandlePlacement) {
      return;
    }
    const newHandleData = new FreehandHandleData(currentPoints.image);

    // If this is not the first handle
    if (data.handles.points.length) {
      // Add the line from the current handle to the new handle
      data.handles.points[config.currentHandle - 1].lines.push(currentPoints.image);
    }

    // Add the new handle
    data.handles.points.push(newHandleData);

    // Increment the current handle value
    config.currentHandle += 1;

    // Force onImageRendered to fire
    external.cornerstone.updateImage(element);
    this.fireModifiedEvent(element, data);
  }

  /**
   * If in pencilMode, check the mouse position is farther than the minimum
   * distance between points, then add a point.
   *
   * @private
   * @param {Object} eventData - Data object associated with an event.
   * @param {Object} points - Data object associated with the tool.
   * @returns {undefined}
   */
  _addPointPencilMode(eventData, points) {
    const config = this.configuration;
    const {
      element
    } = eventData;
    const mousePoint = config.mouseLocation.handles.start;
    const handleFurtherThanMinimumSpacing = handle => this._isDistanceLargerThanSpacing(element, handle, mousePoint);
    if (points.every(handleFurtherThanMinimumSpacing)) {
      this._addPoint(eventData);
    }
  }

  /**
   * Ends the active drawing loop and completes the polygon.
   *
   * @private
   * @param {Object} element - The element on which the roi is being drawn.
   * @param {Object} handleNearby - the handle nearest to the mouse cursor.
   * @returns {undefined}
   */
  _endDrawing(element, handleNearby) {
    const toolState = getToolState(element, this.name);
    const config = this.configuration;
    const data = toolState.data[config.currentTool];
    data.active = false;
    data.highlight = false;
    data.handles.invalidHandlePlacement = false;

    // Connect the end handle to the origin handle
    if (handleNearby !== undefined) {
      const points = data.handles.points;
      points[config.currentHandle - 1].lines.push(points[0]);
    }
    if (this._modifying) {
      this._modifying = false;
      data.invalidated = true;
    }

    // Reset the current handle
    config.currentHandle = 0;
    config.currentTool = -1;
    data.canComplete = false;
    if (this._drawing) {
      this._deactivateDraw(element);
    }
    external.cornerstone.updateImage(element);
    this.fireModifiedEvent(element, data);
    this.fireCompletedEvent(element, data);
  }

  /**
   * Returns a handle of a particular tool if it is close to the mouse cursor
   *
   * @private
   * @param {Object} element - The element on which the roi is being drawn.
   * @param {Object} data      Data object associated with the tool.
   * @param {*} coords
   * @returns {Number|Object|Boolean}
   */
  _pointNearHandle(element, data, coords) {
    if (data.handles === undefined || data.handles.points === undefined) {
      return;
    }
    if (data.visible === false) {
      return;
    }
    for (let i = 0; i < data.handles.points.length; i++) {
      const handleCanvas = external.cornerstone.pixelToCanvas(element, data.handles.points[i]);
      if (external.cornerstoneMath.point.distance(handleCanvas, coords) < 6) {
        return i;
      }
    }

    // Check to see if mouse in bounding box of textbox
    if (data.handles.textBox) {
      if (pointInsideBoundingBox(data.handles.textBox, coords)) {
        return data.handles.textBox;
      }
    }
  }

  /**
   * Returns a handle if it is close to the mouse cursor (all tools)
   *
   * @private
   * @param {Object} eventData - data object associated with an event.
   * @returns {Object}
   */
  _pointNearHandleAllTools(eventData) {
    const {
      currentPoints,
      element
    } = eventData;
    const coords = currentPoints.canvas;
    const toolState = getToolState(element, this.name);
    if (!toolState) {
      return;
    }
    let handleNearby;
    for (let toolIndex = 0; toolIndex < toolState.data.length; toolIndex++) {
      handleNearby = this._pointNearHandle(element, toolState.data[toolIndex], coords);
      if (handleNearby !== undefined) {
        return {
          handleNearby,
          toolIndex
        };
      }
    }
  }

  /**
   * Gets the current mouse location and stores it in the configuration object.
   *
   * @private
   * @param {Object} eventData The data assoicated with the event.
   * @returns {undefined}
   */
  _getMouseLocation(eventData) {
    const {
      currentPoints,
      image
    } = eventData;
    // Set the mouseLocation handle
    const config = this.configuration;
    config.mouseLocation.handles.start.x = currentPoints.image.x;
    config.mouseLocation.handles.start.y = currentPoints.image.y;
    clipToBox(config.mouseLocation.handles.start, image);
  }

  /**
   * Returns true if the proposed location of a new handle is invalid.
   *
   * @private
   * @param {Object} data      Data object associated with the tool.
   * @param {Object} eventData The data assoicated with the event.
   * @returns {Boolean}
   */
  _checkInvalidHandleLocation(data, eventData) {
    if (data.handles.points.length < 2) {
      return true;
    }
    let invalidHandlePlacement;
    if (this._dragging) {
      invalidHandlePlacement = this._checkHandlesPencilMode(data, eventData);
    } else {
      invalidHandlePlacement = this._checkHandlesPolygonMode(data, eventData);
    }
    data.handles.invalidHandlePlacement = invalidHandlePlacement;
  }

  /**
   * Returns true if the proposed location of a new handle is invalid (in polygon mode).
   *
   * @private
   *
   * @param {Object} data - data object associated with the tool.
   * @param {Object} eventData The data assoicated with the event.
   * @returns {Boolean}
   */
  _checkHandlesPolygonMode(data, eventData) {
    const config = this.configuration;
    const {
      element
    } = eventData;
    const mousePoint = config.mouseLocation.handles.start;
    const points = data.handles.points;
    let invalidHandlePlacement = false;
    data.canComplete = false;
    const mouseAtOriginHandle = this._isDistanceSmallerThanCompleteSpacingCanvas(element, points[0], mousePoint);
    if (mouseAtOriginHandle && !freehandIntersect.end(points) && points.length > 2) {
      data.canComplete = true;
      invalidHandlePlacement = false;
    } else {
      invalidHandlePlacement = freehandIntersect.newHandle(mousePoint, points);
    }
    return invalidHandlePlacement;
  }

  /**
   * Returns true if the proposed location of a new handle is invalid (in pencilMode).
   *
   * @private
   * @param {Object} data - data object associated with the tool.
   * @param {Object} eventData The data associated with the event.
   * @returns {Boolean}
   */
  _checkHandlesPencilMode(data, eventData) {
    const config = this.configuration;
    const mousePoint = config.mouseLocation.handles.start;
    const points = data.handles.points;
    let invalidHandlePlacement = freehandIntersect.newHandle(mousePoint, points);
    if (invalidHandlePlacement === false) {
      invalidHandlePlacement = this._invalidHandlePencilMode(data, eventData);
    }
    return invalidHandlePlacement;
  }

  /**
   * Returns true if the mouse position is far enough from previous points (in pencilMode).
   *
   * @private
   * @param {Object} data - data object associated with the tool.
   * @param {Object} eventData The data associated with the event.
   * @returns {Boolean}
   */
  _invalidHandlePencilMode(data, eventData) {
    const config = this.configuration;
    const {
      element
    } = eventData;
    const mousePoint = config.mouseLocation.handles.start;
    const points = data.handles.points;
    const mouseAtOriginHandle = this._isDistanceSmallerThanCompleteSpacingCanvas(element, points[0], mousePoint);
    if (mouseAtOriginHandle) {
      data.canComplete = true;
      return false;
    }
    data.canComplete = false;

    // Compare with all other handles appart from the last one
    for (let i = 1; i < points.length - 1; i++) {
      if (this._isDistanceSmallerThanSpacing(element, points[i], mousePoint)) {
        return true;
      }
    }
    return false;
  }

  /**
   * Returns true if two points are closer than this.configuration.spacing.
   *
   * @private
   * @param  {Object} element     The element on which the roi is being drawn.
   * @param  {Object} p1          The first point, in pixel space.
   * @param  {Object} p2          The second point, in pixel space.
   * @returns {boolean}            True if the distance is smaller than the
   *                              allowed canvas spacing.
   */
  _isDistanceSmallerThanCompleteSpacingCanvas(element, p1, p2) {
    const p1Canvas = external.cornerstone.pixelToCanvas(element, p1);
    const p2Canvas = external.cornerstone.pixelToCanvas(element, p2);
    let completeHandleRadius;
    if (this._drawingInteractionType === "Mouse") {
      completeHandleRadius = this.configuration.completeHandleRadius;
    } else if (this._drawingInteractionType === "Touch") {
      completeHandleRadius = this.configuration.completeHandleRadiusTouch;
    }
    return this._compareDistanceToSpacing(element, p1Canvas, p2Canvas, "<", completeHandleRadius);
  }

  /**
   * Returns true if two points are closer than this.configuration.spacing.
   *
   * @private
   * @param  {Object} element     The element on which the roi is being drawn.
   * @param  {Object} p1          The first point, in pixel space.
   * @param  {Object} p2          The second point, in pixel space.
   * @returns {boolean}            True if the distance is smaller than the
   *                              allowed canvas spacing.
   */
  _isDistanceSmallerThanSpacing(element, p1, p2) {
    return this._compareDistanceToSpacing(element, p1, p2, "<");
  }

  /**
   * Returns true if two points are farther than this.configuration.spacing.
   *
   * @private
   * @param  {Object} element     The element on which the roi is being drawn.
   * @param  {Object} p1          The first point, in pixel space.
   * @param  {Object} p2          The second point, in pixel space.
   * @returns {boolean}            True if the distance is smaller than the
   *                              allowed canvas spacing.
   */
  _isDistanceLargerThanSpacing(element, p1, p2) {
    return this._compareDistanceToSpacing(element, p1, p2, ">");
  }

  /**
   * Compares the distance between two points to this.configuration.spacing.
   *
   * @private
   * @param  {Object} element     The element on which the roi is being drawn.
   * @param  {Object} p1          The first point, in pixel space.
   * @param  {Object} p2          The second point, in pixel space.
   * @param  {string} comparison  The comparison to make.
   * @param  {number} spacing     The allowed canvas spacing
   * @returns {boolean}           True if the distance is smaller than the
   *                              allowed canvas spacing.
   */
  _compareDistanceToSpacing(element, p1, p2, comparison = ">", spacing = this.configuration.spacing) {
    if (comparison === ">") {
      return external.cornerstoneMath.point.distance(p1, p2) > spacing;
    }
    return external.cornerstoneMath.point.distance(p1, p2) < spacing;
  }

  /**
   * Adds drawing loop event listeners.
   *
   * @private
   * @param {Object} element - The viewport element to add event listeners to.
   * @param {string} interactionType - The interactionType used for the loop.
   * @modifies {element}
   * @returns {undefined}
   */
  _activateDraw(element, interactionType = "Mouse") {
    this._drawing = true;
    this._drawingInteractionType = interactionType;
    state.isMultiPartToolActive = true;
    // hideToolCursor(this.element);

    // Polygonal Mode
    element.addEventListener(EVENTS.MOUSE_DOWN, this._drawingMouseDownCallback);
    element.addEventListener(EVENTS.MOUSE_MOVE, this._drawingMouseMoveCallback);
    element.addEventListener(EVENTS.MOUSE_DOUBLE_CLICK, this._drawingMouseDoubleClickCallback);

    // Drag/Pencil Mode
    element.addEventListener(EVENTS.MOUSE_DRAG, this._drawingMouseDragCallback);
    element.addEventListener(EVENTS.MOUSE_UP, this._drawingMouseUpCallback);

    // Touch
    element.addEventListener(EVENTS.TOUCH_START, this._drawingMouseMoveCallback);
    element.addEventListener(EVENTS.TOUCH_START, this._drawingTouchStartCallback);
    element.addEventListener(EVENTS.TOUCH_DRAG, this._drawingTouchDragCallback);
    element.addEventListener(EVENTS.TOUCH_END, this._drawingMouseUpCallback);
    element.addEventListener(EVENTS.DOUBLE_TAP, this._drawingDoubleTapClickCallback);
    external.cornerstone.updateImage(element);
  }

  /**
   * Removes drawing loop event listeners.
   *
   * @private
   * @param {Object} element - The viewport element to add event listeners to.
   * @modifies {element}
   * @returns {undefined}
   */
  _deactivateDraw(element) {
    this._drawing = false;
    state.isMultiPartToolActive = false;
    this._activeDrawingToolReference = null;
    this._drawingInteractionType = null;
    // setToolCursor(this.element, this.svgCursor);

    element.removeEventListener(EVENTS.MOUSE_DOWN, this._drawingMouseDownCallback);
    element.removeEventListener(EVENTS.MOUSE_MOVE, this._drawingMouseMoveCallback);
    element.removeEventListener(EVENTS.MOUSE_DOUBLE_CLICK, this._drawingMouseDoubleClickCallback);
    element.removeEventListener(EVENTS.MOUSE_DRAG, this._drawingMouseDragCallback);
    element.removeEventListener(EVENTS.MOUSE_UP, this._drawingMouseUpCallback);

    // Touch
    element.removeEventListener(EVENTS.TOUCH_START, this._drawingTouchStartCallback);
    element.removeEventListener(EVENTS.TOUCH_DRAG, this._drawingTouchDragCallback);
    element.removeEventListener(EVENTS.TOUCH_START, this._drawingMouseMoveCallback);
    element.removeEventListener(EVENTS.TOUCH_END, this._drawingMouseUpCallback);
    external.cornerstone.updateImage(element);
  }

  /**
   * Adds modify loop event listeners.
   *
   * @private
   * @param {Object} element - The viewport element to add event listeners to.
   * @modifies {element}
   * @returns {undefined}
   */
  _activateModify(element) {
    state.isToolLocked = true;
    element.addEventListener(EVENTS.MOUSE_UP, this._editMouseUpCallback);
    element.addEventListener(EVENTS.MOUSE_DRAG, this._editMouseDragCallback);
    element.addEventListener(EVENTS.MOUSE_CLICK, this._editMouseUpCallback);
    element.addEventListener(EVENTS.TOUCH_END, this._editMouseUpCallback);
    element.addEventListener(EVENTS.TOUCH_DRAG, this._editTouchDragCallback);
    external.cornerstone.updateImage(element);
  }

  /**
   * Removes modify loop event listeners.
   *
   * @private
   * @param {Object} element - The viewport element to add event listeners to.
   * @modifies {element}
   * @returns {undefined}
   */
  _deactivateModify(element) {
    state.isToolLocked = false;
    element.removeEventListener(EVENTS.MOUSE_UP, this._editMouseUpCallback);
    element.removeEventListener(EVENTS.MOUSE_DRAG, this._editMouseDragCallback);
    element.removeEventListener(EVENTS.MOUSE_CLICK, this._editMouseUpCallback);
    element.removeEventListener(EVENTS.TOUCH_END, this._editMouseUpCallback);
    element.removeEventListener(EVENTS.TOUCH_DRAG, this._editTouchDragCallback);
    external.cornerstone.updateImage(element);
  }
  passiveCallback(element) {
    this._closeToolIfDrawing(element);
  }
  enabledCallback(element) {
    this._closeToolIfDrawing(element);
  }
  disabledCallback(element) {
    this._closeToolIfDrawing(element);
  }
  _closeToolIfDrawing(element) {
    if (this._drawing) {
      // Actively drawing but changed mode.
      const config = this.configuration;
      const lastHandlePlaced = config.currentHandle;
      this._endDrawing(element, lastHandlePlaced);
      external.cornerstone.updateImage(element);
    }
  }

  /**
   * Fire MEASUREMENT_MODIFIED event on provided element
   * @param {any} element which freehand data has been modified
   * @param {any} measurementData the measurment data
   * @returns {void}
   */
  fireModifiedEvent(element, measurementData) {
    const eventType = EVENTS.MEASUREMENT_MODIFIED;
    const eventData = {
      toolName: this.name,
      element,
      measurementData
    };
    triggerEvent(element, eventType, eventData);
  }
  fireCompletedEvent(element, measurementData) {
    const eventType = EVENTS.MEASUREMENT_COMPLETED;
    const eventData = {
      toolName: this.name,
      element,
      measurementData
    };
    triggerEvent(element, eventType, eventData);
  }

  // ===================================================================
  // Public Configuration API. .
  // ===================================================================

  get spacing() {
    return this.configuration.spacing;
  }
  set spacing(value) {
    if (typeof value !== "number") {
      throw new Error("Attempting to set freehand spacing to a value other than a number.");
    }
    this.configuration.spacing = value;
    external.cornerstone.updateImage(this.element);
  }
  get activeHandleRadius() {
    return this.configuration.activeHandleRadius;
  }
  set activeHandleRadius(value) {
    if (typeof value !== "number") {
      throw new Error("Attempting to set freehand activeHandleRadius to a value other than a number.");
    }
    this.configuration.activeHandleRadius = value;
    external.cornerstone.updateImage(this.element);
  }
  get completeHandleRadius() {
    return this.configuration.completeHandleRadius;
  }
  set completeHandleRadius(value) {
    if (typeof value !== "number") {
      throw new Error("Attempting to set freehand completeHandleRadius to a value other than a number.");
    }
    this.configuration.completeHandleRadius = value;
    external.cornerstone.updateImage(this.element);
  }
  get alwaysShowHandles() {
    return this.configuration.alwaysShowHandles;
  }
  set alwaysShowHandles(value) {
    if (typeof value !== "boolean") {
      throw new Error("Attempting to set freehand alwaysShowHandles to a value other than a boolean.");
    }
    this.configuration.alwaysShowHandles = value;
    external.cornerstone.updateImage(this.element);
  }
  get invalidColor() {
    return this.configuration.invalidColor;
  }
  set invalidColor(value) {
    /*
      It'd be easy to check if the color was e.g. a valid rgba color. However
      it'd be difficult to check if the color was a named CSS color without
      bloating the library, so we don't. If the canvas can't intepret the color
      it'll show up grey.
    */

    this.configuration.invalidColor = value;
    external.cornerstone.updateImage(this.element);
  }

  /**
   * Ends the active drawing loop and removes the polygon.
   *
   * @public
   * @param {Object} element - The element on which the roi is being drawn.
   * @returns {null}
   */
  cancelDrawing(element) {
    if (!this._drawing) {
      return;
    }
    const toolState = getToolState(element, this.name);
    const config = this.configuration;
    const data = toolState.data[config.currentTool];
    data.active = false;
    data.highlight = false;
    data.handles.invalidHandlePlacement = false;

    // Reset the current handle
    config.currentHandle = 0;
    config.currentTool = -1;
    data.canComplete = false;
    removeToolState(element, this.name, data);
    this._deactivateDraw(element);
    external.cornerstone.updateImage(element);
  }

  /**
   * New image event handler.
   *
   * @public
   * @param  {Object} evt The event.
   * @returns {null}
   */
  newImageCallback(evt) {
    const config = this.configuration;
    if (!(this._drawing && this._activeDrawingToolReference)) {
      return;
    }

    // Actively drawing but scrolled to different image.

    const element = evt.detail.element;
    const data = this._activeDrawingToolReference;
    data.active = false;
    data.highlight = false;
    data.handles.invalidHandlePlacement = false;

    // Connect the end handle to the origin handle
    const points = data.handles.points;
    points[config.currentHandle - 1].lines.push(points[0]);

    // Reset the current handle
    config.currentHandle = 0;
    config.currentTool = -1;
    data.canComplete = false;
    this._deactivateDraw(element);
    external.cornerstone.updateImage(element);
  }
}
function defaultFreehandConfiguration() {
  return {
    mouseLocation: {
      handles: {
        start: {
          highlight: false,
          active: false
        }
      }
    },
    spacing: 1,
    activeHandleRadius: 3,
    completeHandleRadius: 6,
    completeHandleRadiusTouch: 28,
    alwaysShowHandles: false,
    invalidColor: "#FFFF00",
    currentHandle: 0,
    currentTool: -1
  };
}
function preventPropagation(evt) {
  evt.stopImmediatePropagation();
  evt.stopPropagation();
  evt.preventDefault();
}
;// CONCATENATED MODULE: ./imaging/tools/custom/editMaskTool.js
/** @module imaging/tools/custom/editMaskTool
 *  @desc  This file provides functionalities for
 *         a custom mask cornestone tool
 */

// external libraries

const editMaskTool_external = (cornerstoneTools_default()).external;
const BaseBrushTool = cornerstoneTools_default().importInternal("base/BaseBrushTool");
const segmentationUtils = cornerstoneTools_default().importInternal("util/segmentationUtils");
const getCircle = segmentationUtils.getCircle;
const drawBrushPixels = segmentationUtils.drawBrushPixels;
const getModule = (cornerstoneTools_default()).getModule;
const {
  configuration,
  setters
} = getModule("segmentation");

/**
 * @public
 * @class BrushTool
 * @memberof Tools.Brush
 * @classdesc Tool for drawing segmentations on an image.
 * @extends Tools.Base.BaseBrushTool
 */
class EditMaskTool extends BaseBrushTool {
  constructor(props = {}) {
    const defaultProps = {
      name: "EditMask",
      supportedInteractionTypes: ["Mouse"],
      configuration: {},
      mixins: ["renderBrushMixin"]
    };
    super(props, defaultProps);
    this.touchDragCallback = this._paint.bind(this);
    this._initializeTool(props.mask, props.initCallback);
  }
  _initializeTool(mask, callback) {
    let enabledElement = cornerstoneTools_default().external.cornerstone.getEnabledElements().filter(e => e.element.id == "axial").pop();

    // TODO improve performances!

    console.time("...typedToNormal");
    let pixelsNormalArray = Array.prototype.slice.call(mask.data);
    console.timeEnd("...typedToNormal");
    console.time("...normalToTyped");
    let pixelData = Uint16Array.from(pixelsNormalArray);
    console.timeEnd("...normalToTyped");
    let labelmapIndex = 1;
    let segmentsOnLabelmapArray = new Array(mask.sizes[2]).fill([labelmapIndex]);
    setters.labelmap3DForElement(enabledElement.element, pixelData.buffer, labelmapIndex, [], segmentsOnLabelmapArray, 0);
    cornerstoneTools_default().external.cornerstone.updateImage(enabledElement.element);
    if (callback) {
      callback();
    }
    // SIMPLE WAY --- AS FALLBACK :

    // labelmap3D.labelmaps2D = [];

    // for (let f = 0; f < 110; f++) {
    //   let pixels = mask.data.slice(f * 512 * 512, (f + 1) * 512 * 512);
    //   let pixelsNormalArray = Array.prototype.slice.call(pixels);
    //   // let pixelData = new Uint16Array();
    //   let pixelData = Uint16Array.from(pixelsNormalArray);
    //   labelmap3D.labelmaps2D.push({
    //     pixelData: pixelData,
    //     segmentsOnLabelmap: [labelmapIndex]
    //   });
    // }
  }
  activeCallback(element, options) {
    switch (options.force) {
      case "delete":
        this.configuration.alwaysEraseOnClick = true;
        break;
      case "add":
        this.preventCtrl();
        break;
      default:
        this.configuration.alwaysEraseOnClick = false;
    }
  }
  preventCtrl() {
    this.__proto__.__proto__._isCtrlDown = function () {
      return false;
    };
  }

  /**
   * Paints the data to the labelmap.
   *
   * @protected
   * @param  {Object} evt The data object associated with the event.
   * @returns {void}
   */
  _paint(evt) {
    const eventData = evt.detail;
    const {
      rows,
      columns
    } = eventData.image;
    const {
      x,
      y
    } = eventData.currentPoints.image;
    if (x < 0 || x > columns || y < 0 || y > rows) {
      return;
    }
    const radius = configuration.radius;
    const pointerArray = getCircle(radius, rows, columns, x, y);
    const {
      labelmap2D,
      labelmap3D,
      shouldErase
    } = this.paintEventData;

    // Draw / Erase the active color.
    drawBrushPixels(pointerArray, labelmap2D.pixelData, labelmap3D.activeSegmentIndex, columns, shouldErase);
    editMaskTool_external.cornerstone.updateImage(evt.detail.element);
  }
}
;// CONCATENATED MODULE: ./imaging/tools/custom/diameterTool.js
/** @module imaging/tools/custom/diameterTool
 *  @desc  This file provides functionalities for
 *         a custom diameter cornestone tool
 */

// external libraries

const BidirectionalTool = (cornerstoneTools_default()).BidirectionalTool;


// internal libraries


/**
 * @public
 * @class DiameterTool
 * @memberof Tools.Annotation
 * @classdesc Create and position an annotation that measures the
 * length and width of a region.
 * @extends Tools.Base.BaseAnnotationTool
 */

class DiameterTool extends BidirectionalTool {
  constructor(props) {
    const defaultProps = {
      name: "Diameter",
      isBeenModified: false,
      lastData: null
    };
    super(props, defaultProps);
    this.name = "Diameter";
    this.initializeTool(props.dataArray, "cmprAxial", props.seriesId);
  }
  initializeTool(dataArray, elementId, seriesId) {
    let element = document.getElementById(elementId);
    (0,lodash.each)(dataArray, singleData => {
      let data = {
        toolType: "Diameter",
        name: singleData.id.toString(),
        isCreating: true,
        visible: true,
        active: false,
        invalidated: false,
        handles: {
          start: {
            x: singleData.x1,
            y: singleData.y1,
            index: 0,
            drawnIndependently: false,
            allowedOutsideImage: false,
            highlight: true,
            active: false
          },
          end: {
            x: singleData.x2,
            y: singleData.y2,
            index: 1,
            drawnIndependently: false,
            allowedOutsideImage: false,
            highlight: true,
            active: false
          },
          perpendicularStart: {
            x: singleData.x3,
            y: singleData.y3,
            index: 2,
            drawnIndependently: false,
            allowedOutsideImage: false,
            highlight: true,
            active: false,
            locked: false
          },
          perpendicularEnd: {
            x: singleData.x4,
            y: singleData.y4,
            index: 3,
            drawnIndependently: false,
            allowedOutsideImage: false,
            highlight: true,
            active: false
          },
          textBox: {
            x: singleData.value_max,
            y: singleData.value_min,
            index: null,
            drawnIndependently: true,
            allowedOutsideImage: true,
            highlight: false,
            active: false,
            hasMoved: true,
            movesIndependently: false,
            hasBoundingBox: true,
            boundingBox: {
              width: 59.6484375,
              height: 47,
              left: 165.02487562189057,
              top: 240.53482587064684
            }
          }
        },
        longestDiameter: singleData.value_max.toString(),
        shortestDiameter: singleData.value_min.toString()
      };
      let sliceNumber = singleData.slice;

      // add to master viewport
      addToolStateSingleSlice(element, this.name, data, sliceNumber, seriesId);
    });
    cornerstoneTools_default().external.cornerstone.updateImage(element);
  }
  passiveCallback(element) {
    element.addEventListener("cornerstonetoolsmeasurementmodified", this.measureOnGoingCallback);
  }
  measureOnGoingCallback(event) {
    if (!this.isBeenModified) {
      event.target.addEventListener("mouseup", function (evt) {
        this.__proto__.measureEndCallback(evt);
      });
    }
    this.isBeenModified = true;
    this.lastData = event.detail.measurementData;
  }
  measureEndCallback(event) {
    event.element.removeEventListener("mouseup", this.measureEndCallback);
    this.isBeenModified = false;
    this.lastData = null;
  }
}
// EXTERNAL MODULE: ./imaging/loaders/nrrdLoader.ts
var nrrdLoader = __webpack_require__(6934);
// EXTERNAL MODULE: ./imaging/loaders/commonLoader.ts
var commonLoader = __webpack_require__(326);
// EXTERNAL MODULE: ./imaging/imageContours.ts
var imageContours = __webpack_require__(4918);
// EXTERNAL MODULE: ./imaging/imageUtils.ts
var imageUtils = __webpack_require__(8345);
;// CONCATENATED MODULE: ./imaging/imageTools.js
/** @module imaging/imageTools
 *  @desc This file provides functionalities for
 *        interacting with cornerstone tools
 *        DEPRECATION WARNING: these are legacy functions
 *        that will be removed soon. Use the corresponding
 *        functions in /tools/main.js instead.
 *        For this reason, this file will not be translated to TypeScript.
 */

// external libraries




// internal libraries

// import { SeedsTool } from "./tools/custom/seedTool";








/*
 * This module provides the following functions to be exported:
 * csToolsCreateStack(element)
 * addDefaultTools(toolToActivate)
 * clearMeasurements()
 * addContoursTool(rawContours, maskName)
 * addMaskEditingTool(seriesId,mask,setConfig,callback, targetViewport)
 * getCurrentMaskData(viewportId)
 * addStackStateToElement(seriesId, element)
 * addSeedsTool(preLoadSeeds, initViewport)
 * addDiameterTool(targetElementId, diameters, seriesId)
 * setToolActive(toolName, options, activeViewport, viewports)
 * setToolDisabled(toolName, options, activeViewport, viewports)
 * setToolEnabled(toolName, options, activeViewport, viewports)
 * setToolPassive(toolName, options, activeViewport, viewports)
 * getToolState(toolName)
 * updateDiameterTool(diameterId, value, seriesId)
 * addToolStateSingleSlice(element, toolType, data, slice, seriesId)
 * clearToolStateByName(toolName, options)
 * clearCornerstoneElements()
 * syncToolStack(srcSliceNumber, toolName, viewport, seriesId)
 * updateStackToolState(element, imageIndex)
 */

/**
 * Add all default tools, as listed in tools/default.js
 * @function addDefaultTools
 * @deprecated (OBSOLETE)
 */
const addDefaultTools = function (toolToActivate) {
  // for each default tool
  (0,lodash.each)(tools_default.DEFAULT_TOOLS, tool => {
    // check if already added
    if (!isToolMissing(tool.name)) {
      return;
    }
    let configuration = tool.configuration;
    let toolClass = (cornerstoneTools_default())[tool.class];

    // check target viewports and call add tool with options
    if (tool.viewports == "all") {
      cornerstoneTools_default().addTool(toolClass, {
        configuration
      });
    } else {
      // call add tool for element for each element
      (0,lodash.each)(tool.viewports, targetElement => {
        cornerstoneTools_default().addToolForElement(targetElement, toolClass, configuration);
      });
    }
    let elements = cornerstone_default().getEnabledElements();

    // if sync tool, enable
    if (tool.sync) {
      const synchronizer = new (cornerstoneTools_default()).Synchronizer("cornerstoneimagerendered", (cornerstoneTools_default())[tool.sync]);
      elements.forEach(element => {
        synchronizer.add(element.element);
      });
      synchronizer.enabled = true;
    }
    if (tool.defaultActive || tool.name == toolToActivate) {
      setToolActive(tool.name, tool.options);
    }
  });

  // set wheel scroll active
  setToolActive("CustomMouseWheelScroll", {
    loop: false,
    // default false
    allowSkipping: false,
    // default true
    invert: false
  });
};

/**
 * Add Diameter tool
 * @function addDiameterTool
 * @param {String} elementId - The target hmtl element id or its DOM HTMLElement
 * @param {Array} diameters - The array of diameter objects.
 * @param {String} seriesId - The id of the target serie.
 */
const addDiameterTool = function (elementId, diameters, seriesId) {
  if (isToolMissing("Diameter")) {
    let element = (0,imageUtils.isElement)(elementId) ? elementId : document.getElementById(elementId);
    cornerstoneTools_default().addToolForElement(element, DiameterTool, {
      dataArray: diameters,
      seriesId: seriesId
    });
    setToolPassive("Diameter");
  }
};

/**
 * Add Contour tool
 * @function addContoursTool
 * @param {Object} rawContours - The contours object (generated from a segmentation mask).
 * @param {String} maskName - The name tag that identify the mask
 */
const addContoursTool = function (rawContours, maskName) {
  var pointBatchSize = 2;
  console.time("...parsing contours");
  var contoursParsedData = (0,imageContours.parseContours)(rawContours, pointBatchSize, maskName);
  console.timeEnd("...parsing contours");
  cornerstoneTools_default().addTool(ContoursTool, {
    contoursParsedData,
    maskName
  });
};

/**
 * Add mask editing tool
 * @function addMaskEditingTool
 * @param {Array} mask - The mask data.
 * @param {Function} callback - The tool initialization callback
 * @param {String} targetViewport - The target hmtl element id.
 */
const addMaskEditingTool = function (mask, callback, targetViewport) {
  let enabledElements = cornerstone_default().getEnabledElements();
  (0,lodash.each)(enabledElements, el => {
    if (el.element.id == targetViewport) {
      cornerstoneTools_default().addToolForElement(el.element, EditMaskTool, {
        mask: mask,
        initCallback: callback,
        configuration: {
          alwaysEraseOnClick: false
        }
      });
      cornerstoneTools_default().setToolEnabledForElement(el.element, "EditMask", {
        mouseButtonMask: 1
      });
    }
  });
  let defaultConfig = {
    radius: 5,
    fillAlpha: 0.5
  };
  setSegmentationConfig(defaultConfig);
};

/**
 * Modify configuration for cornerstone tools segmentation module
 * @function setSegmentationConfig
 * @param {Object} config - The custom configuration.
 * @example 
 * Example of custom configuration
 * config = {
      renderOutline: true,
      renderFill: true,
      shouldRenderInactiveLabelmaps: true,
      radius: 10,
      minRadius: 1,
      maxRadius: 50,
      segmentsPerLabelmap: 65535,
      fillAlpha: 0.7,
      fillAlphaInactive: 0.1,
      outlineAlpha: 0.7,
      outlineAlphaInactive: 0.35,
      outlineWidth: 3,
      storeHistory: true
    };
 */
const setSegmentationConfig = function (config) {
  let {
    configuration
  } = cornerstoneTools_default().getModule("segmentation");
  (0,lodash.extend)(configuration, config);
  let enabledElements = cornerstone_default().getEnabledElements();
  (0,lodash.each)(enabledElements, el => {
    cornerstone_default().updateImage(el.element);
  });
};

/**
 * Get mask editing tool current data from state
 * @function getCurrentMaskData
 * @param {String} viewportId - The target hmtl element id.
 * @return {Array} labelmap3D - The mask array
 */
const getCurrentMaskData = function (viewportId) {
  const {
    getters
  } = cornerstoneTools_default().getModule("segmentation");
  let enabledElement = cornerstone_default().getEnabledElements().filter(e => e.element.id == viewportId).pop();
  const {
    labelmap3D
  } = getters.labelmap2D(enabledElement.element);
  return labelmap3D;
};

/**
 * Add Stack State to a single hmtl element
 * @function addStackStateToElement
 * @param {String} seriesId - The id of the target serie.
 * @param {HTMLElement} element - The target hmtl element.
 */
const addStackStateToElement = function (seriesId, element) {
  // Define the Stack object
  const stack = (0,commonLoader.getSeriesDataFromLarvitarManager)(seriesId)[element.id];
  // Add the stack tool state to the enabled element
  cornerstoneTools_default().addStackStateManager(element, ["stack"]);
  cornerstoneTools_default().addToolState(element, "stack", stack);
};

/**
 * Add seeds tool
 * @function addSeedsTool
 * @param {Array} preLoadSeeds - The array of seeds to load as initialization.
 * @param {String} initViewport - The hmtl element id to be used for tool initialization.
 */
const addSeedsTool = function (preLoadSeeds, initViewport) {
  if (isToolMissing("Seeds")) {
    let enabledElements = cornerstone_default().getEnabledElements();
    (0,lodash.each)(enabledElements, el => {
      let initialize = el.element.id == initViewport;
      cornerstoneTools_default().addToolForElement(el.element, SeedsTool, {
        preLoadSeeds,
        initialize,
        initViewport
      });
    });
    setToolEnabled("Seeds");
  }
};

/**
 * Delete all measurements from tools state, for tools that have the "cleaneable" prop set to true in tools/default.js
 * @function clearMeasurements
 */
const clearMeasurements = function () {
  let enabledElements = cornerstone_default().getEnabledElements();
  let clenableTools = (0,lodash.filter)(tools_default.DEFAULT_TOOLS, "cleanable");
  (0,lodash.each)(enabledElements, el => {
    (0,lodash.each)(clenableTools, function (tool) {
      cornerstoneTools_default().clearToolState(el.element, tool.name);
    });
  });
  (0,lodash.each)(enabledElements, el => {
    cornerstone_default().updateImage(el.element);
  });
};

/**
 * Set Tool "active" on all elements (ie, rendered and manipulable) & refresh cornerstone elements
 * @function setToolActive
 * @param {String} toolName - The tool name.
 * @param {Object} options - The custom options. @default from tools/default.js
 * @param {String} activeViewport - The active viewport (if "all", viewports array will be used)
 * @param {Array} viewports - The hmtl element id to be used for tool initialization.
 * @deprecated (OBSOLETE)
 */
const setToolActive = function (toolName, options, activeViewport, viewports) {
  let defaultOpt = tools_default.DEFAULT_TOOLS[toolName]?.options || {};
  (0,lodash.extend)(defaultOpt, options);
  cornerstoneTools_default().setToolActive(toolName, defaultOpt);
  if (activeViewport == "all") {
    (0,lodash.each)(viewports, function (elementId) {
      let el = document.getElementById(elementId);
      if (el) {
        cornerstone_default().updateImage(el);
      }
    });
  } else {
    let el = document.getElementById(activeViewport);
    if (el) {
      cornerstone_default().updateImage(el);
    }
  }
};

/**
 * Set Tool "disabled" on all elements (ie, not rendered) & refresh cornerstone elements
 * @function setToolDisabled
 * @param {String} toolName - The tool name.
 * @param {String} activeViewport - The active viewport (if "all", viewports array will be used)
 * @param {Array} viewports - The hmtl element id to be used for tool initialization.
 * @deprecated (OBSOLETE)
 */
const setToolDisabled = function (toolName, activeViewport, viewports) {
  cornerstoneTools_default().setToolDisabled(toolName);
  if (activeViewport == "all") {
    (0,lodash.each)(viewports, function (elementId) {
      let el = document.getElementById(elementId);
      if (el) {
        cornerstone_default().updateImage(el);
      }
    });
  } else {
    let el = document.getElementById(activeViewport);
    if (el) {
      cornerstone_default().updateImage(el);
    }
  }
};

/**
 * Set Tool "enabled" on all elements (ie, rendered but not manipulable) & refresh cornerstone elements
 * @function setToolEnabled
 * @param {String} toolName - The tool name.
 * @param {String} activeViewport - The active viewport (if "all", viewports array will be used)
 * @param {Array} viewports - The hmtl element id to be used for tool initialization.
 * @deprecated (OBSOLETE)
 */
const setToolEnabled = function (toolName, activeViewport, viewports) {
  cornerstoneTools_default().setToolEnabled(toolName);
  if (activeViewport == "all") {
    (0,lodash.each)(viewports, function (elementId) {
      let el = document.getElementById(elementId);
      if (el) {
        cornerstone_default().updateImage(el);
      }
    });
  } else {
    let el = document.getElementById(activeViewport);
    if (el) {
      cornerstone_default().updateImage(el);
    }
  }
};

/**
 * Set Tool "enabled" on all elements (ie, rendered and manipulable passively) & refresh cornerstone elements
 * @function setToolPassive
 * @param {String} toolName - The tool name.
 * @param {String} activeViewport - The active viewport (if "all", viewports array will be used)
 * @param {Array} viewports - The hmtl element id to be used for tool initialization.
 * @deprecated (OBSOLETE)
 */
const setToolPassive = function (toolName, activeViewport, viewports) {
  cornerstoneTools_default().setToolPassive(toolName);
  if (activeViewport == "all") {
    (0,lodash.each)(viewports, function (elementId) {
      let el = document.getElementById(elementId);
      if (el) {
        cornerstone_default().updateImage(el);
      }
    });
  } else {
    let el = document.getElementById(activeViewport);
    if (el) {
      cornerstone_default().updateImage(el);
    }
  }
};

/**
 * Get tool data for all enabled elements
 * @function getToolState
 * @param {String} toolName - The tool name.
 * @return {Object} - Tool data grouped by element id
 */
const imageTools_getToolState = function (toolName) {
  let enabledElements = cornerstone_default().getEnabledElements();
  let toolData = {};
  (0,lodash.each)(enabledElements, el => {
    toolData[el.element.id] = cornerstoneTools_default().getToolState(el.element, toolName);
  });
  return toolData;
};

/**
 * Clear tool data for a subset of seeds
 * @function clearToolStateByName
 * @param {String} toolName - The tool name.
 * @param {Object} options - Props used to select the data to delete (at the moment only {name : "targetName"} is implemented)
 */
const clearToolStateByName = function (toolName, options) {
  let enabledElements = cornerstone_default().getEnabledElements();
  (0,lodash.each)(enabledElements, el => {
    const toolStateManager = el.toolStateManager;
    let imageIds = Object.keys(toolStateManager.toolState);
    (0,lodash.each)(imageIds, imageId => {
      let toolData = toolStateManager.toolState[imageId];
      if (toolData[toolName]) {
        (0,lodash.remove)(toolData[toolName].data, singleData => {
          return singleData.name == options.name;
        });
      }
    });
  });
  (0,lodash.each)(enabledElements, el => {
    cornerstone_default().updateImage(el.element);
  });
};

/**
 * Update diameter tool with new value (removing old one)
 * @function updateDiameterTool
 * @param {String | Number} diameterId - The id that identify the diameter data.
 * @param {Object} value - The object representing the new diameter data.
 * @param {String} seriesId - The target serie id.
 * @param {String} viewportId - The viewport id.
 */
const updateDiameterTool = function (diameterId, value, seriesId, viewportId) {
  // clear target diameter
  if (!diameterId) {
    console.warn("no diameterId, return");
    return;
  }
  clearToolStateByName("Diameter", {
    name: diameterId
  });
  // insert new one
  let data = {
    toolType: "Diameter",
    name: diameterId,
    isCreating: true,
    visible: true,
    active: false,
    invalidated: false,
    handles: {
      start: {
        x: value.tool.x1,
        y: value.tool.y1,
        index: 0,
        drawnIndependently: false,
        allowedOutsideImage: false,
        highlight: true,
        active: false
      },
      end: {
        x: value.tool.x2,
        y: value.tool.y2,
        index: 1,
        drawnIndependently: false,
        allowedOutsideImage: false,
        highlight: true,
        active: false
      },
      perpendicularStart: {
        x: value.tool.x3,
        y: value.tool.y3,
        index: 2,
        drawnIndependently: false,
        allowedOutsideImage: false,
        highlight: true,
        active: false,
        locked: false
      },
      perpendicularEnd: {
        x: value.tool.x4,
        y: value.tool.y4,
        index: 3,
        drawnIndependently: false,
        allowedOutsideImage: false,
        highlight: true,
        active: false
      },
      textBox: {
        x: value.tool.value_max,
        y: value.tool.value_min,
        index: null,
        drawnIndependently: true,
        allowedOutsideImage: true,
        highlight: false,
        active: false,
        hasMoved: true,
        movesIndependently: false,
        hasBoundingBox: true,
        boundingBox: {
          width: 59.6484375,
          height: 47,
          left: 165.02487562189057,
          top: 240.53482587064684
        }
      }
    },
    longestDiameter: value.tool.value_max.toString(),
    shortestDiameter: value.tool.value_min.toString()
  };
  let sliceNumber = value.tool.slice;
  let enabledElement = cornerstone_default().getEnabledElements().filter(el => el.element.id == viewportId).pop();

  // add to master viewport
  addToolStateSingleSlice(enabledElement.element, "Diameter", data, sliceNumber, seriesId);
};

/**
 * Add tool data for a single target slice
 * @function addToolStateSingleSlice
 * @param {HTMLElement} element - The target hmtl element.
 * @param {String} toolName - The tool name.
 * @param {Object | Array} data - The tool data to add (tool-specific)
 * @param {Number} slice - The target slice to put the data in.
 * @param {String} seriesId - The target serie id.
 */
const addToolStateSingleSlice = function (element, toolName, data, slice, seriesId) {
  const enabledElement = cornerstone_default().getEnabledElement(element);
  if (!enabledElement.image) {
    console.warn("no image");
    return;
  }
  let targetImageId = (0,nrrdLoader.getImageIdFromSlice)(slice, element.id, seriesId);
  if (enabledElement.toolStateManager === undefined) {
    console.warn("State Manager undefined");
    return;
  }
  let toolState = enabledElement.toolStateManager.toolState;
  if (toolState.hasOwnProperty(targetImageId) === false) {
    toolState[targetImageId] = {};
  }
  const imageIdToolState = toolState[targetImageId];

  // If we don't have tool state for this type of tool, add an empty object
  if (imageIdToolState.hasOwnProperty(toolName) === false) {
    imageIdToolState[toolName] = {
      data: []
    };
  }
  const toolData = imageIdToolState[toolName];

  // if an array is provided, override data
  // if (Array.isArray(data)) {
  //   toolData.data = data;
  // } else {
  //   toolData.data.push(data);
  // }

  // This implementation works better
  let singledata = typeof data.pop == "function" ? data.pop() : data;
  // remove old data for this id (avoid doubling contours) // TODO generalize
  if (toolName == "ContoursTool") {
    (0,lodash.remove)(toolData.data, entry => entry && entry.id == singledata.id);
  }
  toolData.data.push(singledata);
};

/**
 * Clear tool state and disable all cornerstone elements
 * @function clearCornerstoneElements
 */
const clearCornerstoneElements = function () {
  var enabledElements = cornerstone_default().getEnabledElements();
  var inMemElements = (0,lodash.cloneDeep)(enabledElements); // copy before modifying
  (0,lodash.each)(inMemElements, el => {
    (0,lodash.each)(tools_default.DEFAULT_TOOLS, function (tool) {
      if (tool.cleanable) {
        cornerstoneTools_default().clearToolState(el.element, tool.name);
      }
    });
    cornerstone_default().disable(el.element);
  });
};

/**
 * Sync the cornerstone tools stack given a slice as data source
 * @function syncToolStack
 * @param {Number} srcSliceNumber - The slice to be used as data source.
 * @param {String} toolName - The name of the tool to sync.
 * @param {String} viewport - The target viewport id.
 * @param {String} seriesId - The target serie id.
 */
const syncToolStack = function (srcSliceNumber, toolName, viewport, seriesId) {
  // get the imageIds array
  let seriesData = (0,commonLoader.getSeriesDataFromLarvitarManager)(seriesId);
  let imageIds = seriesData[viewport].imageIds;

  // get the tool state of source imageId
  let element = document.getElementById(viewport);
  let enabledElement = cornerstone_default().getEnabledElement(element);
  let srcImageId = (0,nrrdLoader.getImageIdFromSlice)(srcSliceNumber, viewport, seriesId);
  let srcImageToolState = enabledElement.toolStateManager.toolState[srcImageId][toolName];
  (0,lodash.each)(Object.keys(imageIds), sliceNumber => {
    if (sliceNumber == srcSliceNumber) {
      return;
    }
    (0,lodash.each)(srcImageToolState, data => {
      addToolStateSingleSlice(element, toolName, data, sliceNumber, seriesId);
    });
  });
};

/**
 * Update slice index in cornerstone tools stack state
 * @function updateStackToolState
 * @param {String} elementId - The html div id used for rendering or its DOM HTMLElement
 * @param {Number} imageIndex - The new imageIndex value.
 */
const updateStackToolState = function (elementId, imageIndex) {
  let element = (0,imageUtils.isElement)(elementId) ? elementId : document.getElementById(elementId);
  if (!element) {
    console.error("invalid html element: " + elementId);
    return;
  }
  let enabledElement = cornerstone_default().getEnabledElement(element);
  if (!enabledElement.toolStateManager) {
    return;
  }
  let stackState = enabledElement.toolStateManager.toolState["stack"];
  if (!stackState) {
    return;
  }
  // READY for different segmentations data (data[segmentation_label_id])
  stackState.data[0].currentImageIdIndex = imageIndex;
};

/** @inner Internal module functions */

/**
 * Check if a tool has already been added
 * @function isToolMissing
 * @param {String} toolName - The tool name.
 * @param {Array} _viewports - The viewports to check.
 */
const isToolMissing = function (toolName, _viewports) {
  let isToolMissing = false;
  if (_viewports) {
    (0,lodash.each)(_viewports, function (viewport) {
      let element = cornerstone_default().getEnabledElement(document.getElementById(viewport));
      let added = cornerstoneTools_default().getToolForElement(element, toolName);
      if (added === undefined) {
        isToolMissing = true;
      }
    });
  } else {
    let elements = cornerstone_default().getEnabledElements();
    (0,lodash.each)(elements, function (element) {
      let added = cornerstoneTools_default().getToolForElement(element, toolName);
      if (added === undefined) {
        isToolMissing = true;
      }
    });
  }
  return isToolMissing;
};

/***/ }),

/***/ 5791:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   parse: () => (/* binding */ parse)
/* harmony export */ });
/* harmony import */ var pako__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9591);
/* harmony import */ var pako__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(pako__WEBPACK_IMPORTED_MODULE_0__);


/**
 * This is the mapping from the NRRD datatype as written in the NRRD header
 * to the JS typed array equivalent.
 */
const NRRD_TYPES_TO_TYPEDARRAY = {
  "signed char": Int8Array,
  int8: Int8Array,
  int8_t: Int8Array,
  uchar: Uint8Array,
  "unsigned char": Uint8Array,
  uint8: Uint8Array,
  uint8_t: Uint8Array,
  short: Int16Array,
  "short int": Int16Array,
  "signed short": Int16Array,
  "signed short int": Int16Array,
  int16: Int16Array,
  int16_t: Int16Array,
  ushort: Uint16Array,
  "unsigned short": Uint16Array,
  "unsigned short int": Uint16Array,
  uint16: Uint16Array,
  uint16_t: Uint16Array,
  int: Int32Array,
  "signed int": Int32Array,
  int32: Int32Array,
  int32_t: Int32Array,
  uint: Uint32Array,
  "unsigned int": Uint32Array,
  uint32: Uint32Array,
  uint32_t: Uint32Array,
  // OK for Node/V8/Chrome but not Firefox
  // longlong: BigInt64Array,
  // "long long": BigInt64Array,
  // "long long int": BigInt64Array,
  // "signed long long": BigInt64Array,
  // "signed long long int": BigInt64Array,
  // int64: BigInt64Array,
  // int64_t: BigInt64Array,
  // ulonglong: BigUint64Array,
  // "unsigned long long": BigUint64Array,
  // "unsigned long long int": BigUint64Array,
  // uint64: BigUint64Array,
  // uint64_t: BigUint64Array,
  float: Float32Array,
  double: Float64Array
};
const NRRD_TYPES_TO_VIEW_GET = {
  "signed char": "getInt8",
  int8: "getInt8",
  int8_t: "getInt8",
  uchar: "getUint8",
  "unsigned char": "getUint8",
  uint8: "getUint8",
  uint8_t: "getUint8",
  short: "getInt16",
  "short int": "getInt16",
  "signed short": "getInt16",
  "signed short int": "getInt16",
  int16: "getInt16",
  int16_t: "getInt16",
  ushort: "getUint16",
  "unsigned short": "getUint16",
  "unsigned short int": "getUint16",
  uint16: "getUint16",
  uint16_t: "getUint16",
  int: "getInt32",
  "signed int": "getInt32",
  int32: "getInt32",
  int32_t: "getInt32",
  uint: "getUint32",
  "unsigned int": "getUint32",
  uint32: "getUint32",
  uint32_t: "getUint32",
  // OK for Node/V8/Chrome but not Firefox
  // longlong: null,
  // "long long": null,
  // "long long int": null,
  // "signed long long": null,
  // "signed long long int": null,
  // int64: null,
  // int64_t: null,
  // ulonglong: null,
  // "unsigned long long": null,
  // "unsigned long long int": null,
  // uint64: null,
  // uint64_t: null,
  float: "getFloat32",
  double: "getFloat64"
};
const SPACE_TO_SPACEDIMENSIONS = {
  "right-anterior-superior": 3,
  ras: 3,
  "left-anterior-superior": 3,
  las: 3,
  "left-posterior-superior": 3,
  lps: 3,
  "right-anterior-superior-time": 4,
  rast: 4,
  "left-anterior-superior-time": 4,
  last: 4,
  "left-posterior-superior-time": 4,
  lpst: 4,
  "scanner-xyz": 3,
  "scanner-xyz-time": 4,
  "3d-right-handed": 3,
  "3d-left-handed": 3,
  "3d-right-handed-time": 4,
  "3d-left-handed-time": 4
};

// in NRRD, some "kinds" have to respect a certain size. For example, the kind
// "quaternion" has to be of size 4 (xyzw).
// When the value is 'null', then no enforcement is made.
// Note: the fields have been turned to lowercase here
const KIND_TO_SIZE = {
  domain: null,
  space: null,
  time: null,
  list: null,
  point: null,
  vector: null,
  "covariant-vector": null,
  normal: null,
  stub: 1,
  scalar: 1,
  complex: 2,
  "2-vector": 2,
  "3-color": 3,
  "rgb-color": 3,
  "hsv-color": 3,
  "xyz-color": 3,
  "4-color": 4,
  "rgba-color": 4,
  "3-vector": 3,
  "3-gradient": 3,
  "3-normal": 3,
  "4-vector": 4,
  quaternion: 4,
  "2d-symmetric-matrix": 3,
  "2d-masked-symmetric-matrix": 4,
  "2d-matrix": 4,
  "2d-masked-matrix": 4,
  "3d-symmetric-matrix": 6,
  "3d-masked-symmetric-matrix": 7,
  "3d-matrix": 9,
  "3d-masked-matrix": 10,
  "???": null
};

/**
 * Parse a buffer of a NRRD file.
 * Throws an exception if the file is not a proper NRRD file.
 * @instance
 * @function parse
 * @param {ArrayBuffer} nrrdBuffer - the NRRD file buffer
 * @param {Object} options - the option object
 * @param {boolean} options.headerOnly - Parses only the header if true, parses header and data if false (default: false)
 * @return {Object} NRRD header and data such as {header: Object, data: TypedArray }
 */
const parse = function (nrrdBuffer, options) {
  let magicControl = "NRRD000";
  let magicTest = String.fromCharCode.apply(null, new Uint8Array(nrrdBuffer, 0, magicControl.length));
  if (magicControl !== magicTest) {
    throw new Error("This file is not a NRRD file");
  }
  let {
    header,
    dataByteOffset
  } = parseHeader(nrrdBuffer);
  if ("headerOnly" in options && options.headerOnly) {
    return {
      header: header,
      data: null
    };
  }
  let data = parseData(nrrdBuffer, header, dataByteOffset);
  return {
    header: header,
    data: data
  };
};

/**
 * @private
 * Parses the header
 */
function parseHeader(nrrdBuffer) {
  let byteArrayHeader = [];
  let dataStartPosition = null;
  let view = new DataView(nrrdBuffer);
  for (let i = 0; i < nrrdBuffer.byteLength; i++) {
    byteArrayHeader.push(String.fromCharCode(view.getUint8(i)));
    if (i > 0 && byteArrayHeader[i - 1] === "\n" && byteArrayHeader[i] === "\n") {
      dataStartPosition = i + 1;
      break;
    }
  }
  if (dataStartPosition === null) {
    throw new Error("The NRRD header is corrupted.");
  }
  let comments = [];
  let headerLines = byteArrayHeader.join("").trim().split(/\r\n|\n/).map(l => l.trim());
  let preMap = headerLines.slice(1).filter(s => {
    // removing empty lines
    return s.length > 0;
  }).filter(s => {
    // removing comments
    if (s[0] === "#") {
      comments.push(s.slice(1).trim());
    }
    return s[0] !== "#";
  }).map(s => {
    let keyVal = s.split(":");
    return {
      key: keyVal[0].trim(),
      val: keyVal[1].trim()
    };
  });
  let nrrdHeader = {};
  preMap.forEach(field => {
    nrrdHeader[field.key] = field.val;
  });

  // parsing each fields of the header
  if (nrrdHeader["sizes"]) {
    nrrdHeader["sizes"] = nrrdHeader.sizes.split(/\s+/).map(n => parseInt(n));
  }
  if (nrrdHeader["space dimension"]) {
    nrrdHeader["space dimension"] = parseInt(nrrdHeader["space dimension"]);
  }
  if (nrrdHeader["space"]) {
    nrrdHeader["space dimension"] = SPACE_TO_SPACEDIMENSIONS[nrrdHeader["space"].toLowerCase()];
  }
  if (nrrdHeader["dimension"]) {
    nrrdHeader["dimension"] = parseInt(nrrdHeader["dimension"]);
  }
  if (nrrdHeader["space directions"]) {
    nrrdHeader["space directions"] = nrrdHeader["space directions"].split(/\s+/).map(triple => {
      if (triple.trim() === "none") {
        return null;
      }
      return triple.slice(1, triple.length - 1).split(",").map(n => parseFloat(n));
    });
    if (nrrdHeader["space directions"].length !== nrrdHeader["dimension"]) {
      throw new Error('"space direction" property has to contain as many elements as dimensions. Non-spatial dimesnsions must be refered as "none". See http://teem.sourceforge.net/nrrd/format.html#spacedirections for more info.');
    }
  }
  if (nrrdHeader["space units"]) {
    nrrdHeader["space units"] = nrrdHeader["space units"].split(/\s+/);
  }
  if (nrrdHeader["space origin"]) {
    nrrdHeader["space origin"] = nrrdHeader["space origin"].slice(1, nrrdHeader["space origin"].length - 1).split(",").map(n => parseFloat(n));
  }
  if (nrrdHeader["measurement frame"]) {
    nrrdHeader["measurement frame"] = nrrdHeader["measurement frame"].split(/\s+/).map(triple => {
      if (triple.trim() === "none") {
        return null;
      }
      return triple.slice(1, triple.length - 1).split(",").map(n => parseFloat(n));
    });
  }
  if (nrrdHeader["kinds"]) {
    nrrdHeader["kinds"] = nrrdHeader["kinds"].split(/\s+/);
    if (nrrdHeader["kinds"].length !== nrrdHeader["sizes"].length) {
      throw new Error(`The "kinds" property is expected to have has many elements as the "size" property.`);
    }
    nrrdHeader["kinds"].forEach((k, i) => {
      let expectedLength = KIND_TO_SIZE[k.toLowerCase()];
      let foundLength = nrrdHeader["sizes"][i];
      if (expectedLength !== null && expectedLength !== foundLength) {
        throw new Error(`The kind "${k}" expect a size of ${expectedLength} but ${foundLength} found`);
      }
    });
  }
  if (nrrdHeader["min"]) {
    nrrdHeader["min"] = parseFloat(nrrdHeader["min"]);
  }
  if (nrrdHeader["max"]) {
    nrrdHeader["max"] = parseFloat(nrrdHeader["max"]);
  }
  if (nrrdHeader["old min"]) {
    nrrdHeader["old min"] = parseFloat(nrrdHeader["old min"]);
  }
  if (nrrdHeader["old max"]) {
    nrrdHeader["old max"] = parseFloat(nrrdHeader["old max"]);
  }
  if (nrrdHeader["spacings"]) {
    nrrdHeader["spacings"] = nrrdHeader["spacings"].split(/\s+/).map(n => parseFloat(n));
  }
  if (nrrdHeader["thicknesses"]) {
    nrrdHeader["thicknesses"] = nrrdHeader["thicknesses"].split(/\s+/).map(n => parseFloat(n));
  }
  if (nrrdHeader["axis mins"]) {
    nrrdHeader["axis mins"] = nrrdHeader["axis mins"].split(/\s+/).map(n => parseFloat(n));
  }
  if (nrrdHeader["axismins"]) {
    nrrdHeader["axismins"] = nrrdHeader["axismins"].split(/\s+/).map(n => parseFloat(n));
  }
  if (nrrdHeader["axis maxs"]) {
    nrrdHeader["axis maxs"] = nrrdHeader["axis maxs"].split(/\s+/).map(n => parseFloat(n));
  }
  if (nrrdHeader["axismaxs"]) {
    nrrdHeader["axismaxs"] = nrrdHeader["axismaxs"].split(/\s+/).map(n => parseFloat(n));
  }
  if (nrrdHeader["centers"]) {
    nrrdHeader["centers"] = nrrdHeader["centers"].split(/\s+/).map(mode => {
      if (mode === "cell" || mode === "node") {
        return mode;
      } else {
        return null;
      }
    });
  }
  if (nrrdHeader["labels"]) {
    nrrdHeader["labels"] = nrrdHeader["labels"].split(/\s+/);
  }

  // some additional metadata that are not part of the header will be added here
  nrrdHeader.extra = {};

  // adding the comments from lines starting with #
  nrrdHeader.extra.comments = comments;

  // having the stride can be handy.
  nrrdHeader.extra.stride = [1];
  for (let i = 1; i < nrrdHeader.sizes.length; i++) {
    nrrdHeader.extra.stride.push(nrrdHeader.extra.stride[i - 1] * nrrdHeader.sizes[i - 1]);
  }
  return {
    header: nrrdHeader,
    dataByteOffset: dataStartPosition
  };
}

/**
 * @private
 * Parses the data
 */
function parseData(nrrdBuffer, header, dataByteOffset) {
  let dataBuffer = null;
  let arrayType = NRRD_TYPES_TO_TYPEDARRAY[header.type];
  let nbElementsFromHeader = header.sizes.reduce((prev, curr) => prev * curr);
  let min = +Infinity;
  let max = -Infinity;
  let data = null;
  let isTextEncoded = header.encoding === "ascii" || header.encoding === "txt" || header.encoding === "text";
  if (header.encoding === "raw") {
    dataBuffer = new Uint8Array(nrrdBuffer).slice(dataByteOffset).buffer;
  } else if (isTextEncoded) {
    let numbers = String.fromCharCode.apply(null, new Uint8Array(nrrdBuffer, dataByteOffset)).split(/\r\n|\n|\s/).map(s => s.trim()).filter(s => s !== "").map(s => {
      let numValue = parseFloat(s);
      min = Math.min(min, numValue);
      max = Math.max(max, numValue);
      return numValue;
    });
    data = new arrayType(numbers);
  } else if (header.encoding === "gzip" || header.encoding === "gz") {
    dataBuffer = pako__WEBPACK_IMPORTED_MODULE_0___default().inflate(new Uint8Array(nrrdBuffer).slice(dataByteOffset)).buffer;
  } else {
    throw new Error('Only "raw", "ascii" and "gzip" encoding are supported.');
  }
  if (isTextEncoded) {
    if (nbElementsFromHeader !== data.length) {
      throw new Error("Unconsistency in data buffer length");
    }
  } else {
    let nbElementsFromBufferAndType = dataBuffer.byteLength / arrayType.BYTES_PER_ELEMENT;
    if (nbElementsFromHeader !== nbElementsFromBufferAndType) {
      throw new Error("Unconsistency in data buffer length");
    }
    data = new arrayType(nbElementsFromHeader);
    let dataView = new DataView(dataBuffer);
    let viewMethod = NRRD_TYPES_TO_VIEW_GET[header.type];
    let littleEndian = header.endian === "little" ? true : false;
    for (let i = 0; i < nbElementsFromHeader; i++) {
      data[i] = dataView[viewMethod](i * arrayType.BYTES_PER_ELEMENT, littleEndian);
      min = Math.min(min, data[i]);
      max = Math.max(max, data[i]);
    }
  }
  header.extra.min = min;
  header.extra.max = max;
  return data;
}

/***/ }),

/***/ 7819:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ BorderMagnifyTool)
/* harmony export */ });
/* harmony import */ var cornerstone_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7371);
/* harmony import */ var cornerstone_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(cornerstone_core__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var cornerstone_tools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4030);
/* harmony import */ var cornerstone_tools__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(cornerstone_tools__WEBPACK_IMPORTED_MODULE_1__);


const MagnifyTool = (cornerstone_tools__WEBPACK_IMPORTED_MODULE_1___default().MagnifyTool);
const drawTextBox = cornerstone_tools__WEBPACK_IMPORTED_MODULE_1___default().importInternal("drawing/drawTextBox");
const textStyle = (cornerstone_tools__WEBPACK_IMPORTED_MODULE_1___default().textStyle);
const toolColors = (cornerstone_tools__WEBPACK_IMPORTED_MODULE_1___default().toolColors);
class BorderMagnifyTool extends MagnifyTool {
  constructor(props = {}) {
    super(props);

    // Additional configuration options
    this.configuration.showBorders = props.showBorders || true; // Default to true
    this.configuration.showInfo = props.showInfo || true; // Default to true
    this.configuration.borderColor = props.borderColor; // Default border color is green

    // Add global keydown event listener
    window.addEventListener('keydown', this.handleKeyDown.bind(this));
  }

  /**
   * Event handler for the "keydown" event to toggle the visibility of borders and info on "B" key press.
   * @param {KeyboardEvent} event
   * @returns {void}
   */
  handleKeyDown(event) {
    if (event.key === 'M' || event.key === 'm') {
      // Toggle the visibility of borders
      this.configuration.showBorders = !this.configuration.showBorders;

      // Toggle the visibility of zoom/ROI info
      this.configuration.showInfo = !this.configuration.showInfo;

      // Redraw the magnification tool
      this._drawMagnificationTool();
    }
  }

  /**
   * Overrides the _drawMagnificationTool method to add configurable borders and display zoom/ROI dimensions.
   * @param {*} evt
   * @returns {void}
   */
  _drawMagnificationTool(evt) {
    // Call the parent method to draw the magnification tool
    super._drawMagnificationTool(evt);
    // Query for the magnify canvas using the correct class name
    const magnifyCanvas = evt ? evt.detail.element.querySelector('.magnifyTool') : null;
    if (magnifyCanvas) {
      const context = magnifyCanvas.getContext('2d');

      // Check if the user wants to show borders
      if (this.configuration.showBorders) {
        // Add configurable borders
        context.strokeStyle = this.configuration.borderColor || toolColors.getColorIfActive({
          active: true
        });
        context.lineWidth = 4;
        context.strokeRect(0, 0, magnifyCanvas.width, magnifyCanvas.height);
      }

      // Check if the user wants to show info
      if (this.configuration.showInfo) {
        // Get the zoom level
        const viewport = cornerstone_core__WEBPACK_IMPORTED_MODULE_0___default().getViewport(evt.detail.element);
        const zoomLevel = viewport.scale.toFixed(2); // Adjust the precision as needed

        // Get ROI dimensions
        const roiWidth = magnifyCanvas.width;
        const roiHeight = magnifyCanvas.height;
        const roiArea = (roiWidth * roiHeight).toFixed(2); // Area of the ROI

        // Display the zoom level and ROI dimensions
        //context.fillStyle = this.configuration.borderColor; // Adjust text color as needed
        //context.font = 'bold 14px Arial';
        //context.fillText(`Zoom: x${zoomLevel}`, 10, 20);
        //context.fillText(`ROI Area: ${roiWidth} x ${roiHeight} square pixels`, 10, 40);
        const text = `Zoom: x${zoomLevel}`;
        const str = `ROI: ${roiWidth}px x ${roiHeight}px`;
        const fontHeight = textStyle.getFontSize();
        const color = this.configuration.borderColor || toolColors.getColorIfActive({
          active: true
        });
        // Draw text 5px away from cursor
        const textCoords = {
          x: 5,
          y: 2
        };
        drawTextBox(context, str, textCoords.x, textCoords.y + fontHeight + 5, color);
        drawTextBox(context, text, textCoords.x, textCoords.y, color);
      }
    }
  }
}

/***/ }),

/***/ 3211:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ EllipticalRoiTool)
/* harmony export */ });
/* harmony import */ var cornerstone_tools__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4030);
/* harmony import */ var cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(cornerstone_tools__WEBPACK_IMPORTED_MODULE_0__);

const external = (cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().external);
const BaseAnnotationTool = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("base/BaseAnnotationTool");

// State
const getToolState = (cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().getToolState);
const toolStyle = (cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().toolStyle);
const toolColors = (cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().toolColors);
const getHandleNearImagePoint = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("manipulators/getHandleNearImagePoint");

// Drawing
const getNewContext = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("drawing/getNewContext");
const draw = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("drawing/draw");
const drawEllipse = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("drawing/drawEllipse");
const drawHandles = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("drawing/drawHandles");
const drawLinkedTextBox = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("drawing/drawLinkedTextBox");
const setShadow = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("drawing/setShadow");

// Util
const calculateSUV = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("util/calculateSUV");
const numbersWithCommas = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("util/numbersWithCommas");
const {
  pointInEllipse,
  calculateEllipseStatistics
} = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("util/ellipseUtils");
const getROITextBoxCoords = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("util/getROITextBoxCoords");
const throttle = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("util/throttle");
const {
  ellipticalRoiCursor
} = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("tools/cursors");
const getLogger = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("util/getLogger");
const getPixelSpacing = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("util/getPixelSpacing");
const getModule = (cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().getModule);
const logger = getLogger("tools:annotation:RectangleRoiTool");

/**
 * @public
 * @class EllipticalRoiTool
 * @memberof Tools.Annotation
 * @classdesc Tool for drawing elliptical regions of interest, and measuring
 * the statistics of the enclosed pixels.
 * @extends Tools.Base.BaseAnnotationTool
 */
class EllipticalRoiTool extends BaseAnnotationTool {
  constructor(props = {}) {
    const defaultProps = {
      name: "EllipticalRoi",
      supportedInteractionTypes: ["Mouse", "Touch"],
      configuration: {
        // showMinMax: false,
        // showHounsfieldUnits: true,
        drawHandlesOnHover: false,
        hideHandlesIfMoving: false,
        renderDashed: false
      },
      svgCursor: ellipticalRoiCursor
    };
    super(props, defaultProps);
    this.throttledUpdateCachedStats = throttle(this.updateCachedStats, 110);
  }
  createNewMeasurement(eventData) {
    const goodEventData = eventData && eventData.currentPoints && eventData.currentPoints.image;
    if (!goodEventData) {
      logger.error(`required eventData not supplied to tool ${this.name}'s createNewMeasurement`);
      return;
    }
    return {
      computeMeasurements: this.options.computeMeasurements,
      visible: true,
      active: true,
      color: undefined,
      invalidated: true,
      handles: {
        start: {
          x: eventData.currentPoints.image.x,
          y: eventData.currentPoints.image.y,
          highlight: true,
          active: false
        },
        end: {
          x: eventData.currentPoints.image.x,
          y: eventData.currentPoints.image.y,
          highlight: true,
          active: true
        },
        initialRotation: eventData.viewport.rotation,
        textBox: {
          active: false,
          hasMoved: false,
          movesIndependently: false,
          drawnIndependently: true,
          allowedOutsideImage: true,
          hasBoundingBox: true
        }
      }
    };
  }
  pointNearTool(element, data, coords, interactionType) {
    const hasStartAndEndHandles = data && data.handles && data.handles.start && data.handles.end;
    const validParameters = hasStartAndEndHandles;
    if (!validParameters) {
      logger.warn(`invalid parameters supplied to tool ${this.name}'s pointNearTool`);
    }
    if (!validParameters || data.visible === false) {
      return false;
    }
    const handleNearImagePoint = getHandleNearImagePoint(element, data.handles, coords, 6);
    if (handleNearImagePoint) {
      return true;
    }
    const distance = interactionType === "mouse" ? 15 : 25;
    const startCanvas = external.cornerstone.pixelToCanvas(element, data.handles.start);
    const endCanvas = external.cornerstone.pixelToCanvas(element, data.handles.end);
    const minorEllipse = {
      left: Math.min(startCanvas.x, endCanvas.x) + distance / 2,
      top: Math.min(startCanvas.y, endCanvas.y) + distance / 2,
      width: Math.abs(startCanvas.x - endCanvas.x) - distance,
      height: Math.abs(startCanvas.y - endCanvas.y) - distance
    };
    const majorEllipse = {
      left: Math.min(startCanvas.x, endCanvas.x) - distance / 2,
      top: Math.min(startCanvas.y, endCanvas.y) - distance / 2,
      width: Math.abs(startCanvas.x - endCanvas.x) + distance,
      height: Math.abs(startCanvas.y - endCanvas.y) + distance
    };
    const pointInMinorEllipse = pointInEllipse(minorEllipse, coords);
    const pointInMajorEllipse = pointInEllipse(majorEllipse, coords);
    if (pointInMajorEllipse && !pointInMinorEllipse) {
      return true;
    }
    return false;
  }
  updateCachedStats(image, element, data) {
    if (data.computeMeasurements) {
      const seriesModule = external.cornerstone.metaData.get("generalSeriesModule", image.imageId) || {};
      const modality = seriesModule.modality;
      const pixelSpacing = getPixelSpacing(image);
      const stats = _calculateStats(image, element, data.handles, modality, pixelSpacing);
      data.cachedStats = stats;
    }
    data.invalidated = false;
  }
  renderToolData(evt) {
    const toolData = getToolState(evt.currentTarget, this.name);
    if (!toolData) {
      return;
    }
    const eventData = evt.detail;
    const {
      image,
      element
    } = eventData;
    const lineWidth = toolStyle.getToolWidth();
    const lineDash = getModule("globalConfiguration").configuration.lineDash;
    const {
      handleRadius,
      drawHandlesOnHover,
      hideHandlesIfMoving,
      renderDashed
    } = this.configuration;
    const context = getNewContext(eventData.canvasContext.canvas);
    const {
      rowPixelSpacing,
      colPixelSpacing
    } = getPixelSpacing(image);

    // Meta
    const seriesModule = external.cornerstone.metaData.get("generalSeriesModule", image.imageId) || {};

    // Pixel Spacing
    const modality = seriesModule.modality;
    const hasPixelSpacing = rowPixelSpacing && colPixelSpacing;
    draw(context, context => {
      // If we have tool data for this element - iterate over each set and draw it
      for (let i = 0; i < toolData.data.length; i++) {
        const data = toolData.data[i];
        if (data.visible === false) {
          continue;
        }

        // Configure
        const color = toolColors.getColorIfActive(data);
        const handleOptions = {
          color,
          handleRadius,
          drawHandlesIfActive: drawHandlesOnHover,
          hideHandlesIfMoving
        };
        setShadow(context, this.configuration);
        const ellipseOptions = {
          color
        };
        if (renderDashed) {
          ellipseOptions.lineDash = lineDash;
        }

        // Draw
        drawEllipse(context, element, data.handles.start, data.handles.end, ellipseOptions, "pixel", data.handles.initialRotation);
        drawHandles(context, eventData, data.handles, handleOptions);
        if (data.computeMeasurements) {
          // Update textbox stats
          if (data.invalidated === true) {
            if (data.cachedStats) {
              this.throttledUpdateCachedStats(image, element, data);
            } else {
              this.updateCachedStats(image, element, data);
            }
          }

          // Default to textbox on right side of ROI
          if (!data.handles.textBox.hasMoved) {
            const defaultCoords = getROITextBoxCoords(eventData.viewport, data.handles);
            Object.assign(data.handles.textBox, defaultCoords);
          }
          const textBoxAnchorPoints = handles => _findTextBoxAnchorPoints(handles.start, handles.end);
          const textBoxContent = _createTextBoxContent(context, image.color, data.cachedStats, modality, hasPixelSpacing, this.configuration);
          data.unit = _getUnit(modality, this.configuration.showHounsfieldUnits);
          drawLinkedTextBox(context, element, data.handles.textBox, textBoxContent, data.handles, textBoxAnchorPoints, color, lineWidth, 10, true);
        }
      }
    });
  }
}

/**
 *
 *
 * @param {*} startHandle
 * @param {*} endHandle
 * @returns {Array.<{x: number, y: number}>}
 */
function _findTextBoxAnchorPoints(startHandle, endHandle) {
  const {
    left,
    top,
    width,
    height
  } = _getEllipseImageCoordinates(startHandle, endHandle);
  return [{
    // Top middle point of ellipse
    x: left + width / 2,
    y: top
  }, {
    // Left middle point of ellipse
    x: left,
    y: top + height / 2
  }, {
    // Bottom middle point of ellipse
    x: left + width / 2,
    y: top + height
  }, {
    // Right middle point of ellipse
    x: left + width,
    y: top + height / 2
  }];
}
function _getUnit(modality, showHounsfieldUnits) {
  return modality === "CT" && showHounsfieldUnits !== false ? "HU" : "";
}

/**
 *
 *
 * @param {*} context
 * @param {*} isColorImage
 * @param {*} { area, mean, stdDev, min, max, meanStdDevSUV }
 * @param {*} modality
 * @param {*} hasPixelSpacing
 * @param {*} [options={}] - { showMinMax, showHounsfieldUnits }
 * @returns {string[]}
 */
function _createTextBoxContent(context, isColorImage, {
  area = 0,
  mean = 0,
  stdDev = 0,
  min = 0,
  max = 0,
  meanStdDevSUV = 0
} = {}, modality, hasPixelSpacing, options = {}) {
  const showMinMax = options.showMinMax || false;
  const textLines = [];

  // Don't display mean/standardDev for color images
  const otherLines = [];
  if (!isColorImage) {
    const hasStandardUptakeValues = meanStdDevSUV && meanStdDevSUV.mean !== 0;
    const unit = _getUnit(modality, options.showHounsfieldUnits);
    let meanString = `Mean: ${numbersWithCommas(mean.toFixed(2))} ${unit}`;
    const stdDevString = `Std Dev: ${numbersWithCommas(stdDev.toFixed(2))} ${unit}`;

    // If this image has SUV values to display, concatenate them to the text line
    if (hasStandardUptakeValues) {
      const SUVtext = " SUV: ";
      const meanSuvString = `${SUVtext}${numbersWithCommas(meanStdDevSUV.mean.toFixed(2))}`;
      const stdDevSuvString = `${SUVtext}${numbersWithCommas(meanStdDevSUV.stdDev.toFixed(2))}`;
      const targetStringLength = Math.floor(context.measureText(`${stdDevString}     `).width);
      while (context.measureText(meanString).width < targetStringLength) {
        meanString += " ";
      }
      otherLines.push(`${meanString}${meanSuvString}`);
      otherLines.push(`${stdDevString}     ${stdDevSuvString}`);
    } else {
      otherLines.push(`${meanString}`);
      otherLines.push(`${stdDevString}`);
    }
    if (showMinMax) {
      let minString = `Min: ${min} ${unit}`;
      const maxString = `Max: ${max} ${unit}`;
      const targetStringLength = hasStandardUptakeValues ? Math.floor(context.measureText(`${stdDevString}     `).width) : Math.floor(context.measureText(`${meanString}     `).width);
      while (context.measureText(minString).width < targetStringLength) {
        minString += " ";
      }
      otherLines.push(`${minString}${maxString}`);
    }
  }
  textLines.push(_formatArea(area, hasPixelSpacing));
  otherLines.forEach(x => textLines.push(x));
  return textLines;
}

/**
 *
 *
 * @param {*} area
 * @param {*} hasPixelSpacing
 * @returns {string} The formatted label for showing area
 */
function _formatArea(area, hasPixelSpacing) {
  // This uses Char code 178 for a superscript 2
  const suffix = hasPixelSpacing ? ` mm${String.fromCharCode(178)}` : ` px${String.fromCharCode(178)}`;
  return `Area: ${numbersWithCommas(area.toFixed(2))}${suffix}`;
}

/**
 *
 *
 * @param {*} image
 * @param {*} element
 * @param {*} handles
 * @param {*} modality
 * @param {*} pixelSpacing
 * @returns {Object} The Stats object
 */
function _calculateStats(image, element, handles, modality, pixelSpacing) {
  // Retrieve the bounds of the ellipse in image coordinates
  const ellipseCoordinates = _getEllipseImageCoordinates(handles.start, handles.end);

  // Retrieve the array of pixels that the ellipse bounds cover
  const pixels = external.cornerstone.getPixels(element, ellipseCoordinates.left, ellipseCoordinates.top, ellipseCoordinates.width, ellipseCoordinates.height);

  // Calculate the mean & standard deviation from the pixels and the ellipse details.
  const ellipseMeanStdDev = calculateEllipseStatistics(pixels, ellipseCoordinates);
  let meanStdDevSUV;
  if (modality === "PT") {
    meanStdDevSUV = {
      mean: calculateSUV(image, ellipseMeanStdDev.mean, true) || 0,
      stdDev: calculateSUV(image, ellipseMeanStdDev.stdDev, true) || 0
    };
  }

  // Calculate the image area from the ellipse dimensions and pixel spacing
  const area = Math.PI * (ellipseCoordinates.width * (pixelSpacing.colPixelSpacing || 1) / 2) * (ellipseCoordinates.height * (pixelSpacing.rowPixelSpacing || 1) / 2);
  return {
    area: area || 0,
    count: ellipseMeanStdDev.count || 0,
    mean: ellipseMeanStdDev.mean || 0,
    variance: ellipseMeanStdDev.variance || 0,
    stdDev: ellipseMeanStdDev.stdDev || 0,
    min: ellipseMeanStdDev.min || 0,
    max: ellipseMeanStdDev.max || 0,
    meanStdDevSUV
  };
}

/**
 * Retrieve the bounds of the ellipse in image coordinates
 *
 * @param {*} startHandle
 * @param {*} endHandle
 * @returns {{ left: number, top: number, width: number, height: number }}
 */
function _getEllipseImageCoordinates(startHandle, endHandle) {
  return {
    left: Math.round(Math.min(startHandle.x, endHandle.x)),
    top: Math.round(Math.min(startHandle.y, endHandle.y)),
    width: Math.round(Math.abs(startHandle.x - endHandle.x)),
    height: Math.round(Math.abs(startHandle.y - endHandle.y))
  };
}

/***/ }),

/***/ 8990:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "default": () => (/* binding */ PolylineScissorsTool)
});

// EXTERNAL MODULE: ./node_modules/cornerstone-tools/dist/cornerstoneTools.js
var cornerstoneTools = __webpack_require__(4030);
var cornerstoneTools_default = /*#__PURE__*/__webpack_require__.n(cornerstoneTools);
;// CONCATENATED MODULE: ./imaging/tools/strategies/eraseFreehand.js
/** @module imaging/strategies/eraseFreehand
 *  @desc  This file provides functionalities for
 *         erasing pixels
 */

// external libraries

const {
  getBoundingBoxAroundPolygon,
  eraseInsideShape,
  eraseOutsideShape
} = cornerstoneTools_default().importInternal("util/segmentationUtils");
const isPointInPolygon = cornerstoneTools_default().importInternal("util/isPointInPolygon");
const getLogger = cornerstoneTools_default().importInternal("util/getLogger");
const logger = getLogger("util:segmentation:operations:eraseInsideFreehand");

/**
 * Erase all pixels labeled with the activeSegmentIndex,
 * in the region defined by evt.operationData.points.
 * @param  {} evt The Cornerstone event.
 * @param  {} operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */
function eraseFreehand(evt, operationData, inside = true) {
  const {
    points,
    segmentationMixinType
  } = operationData;
  if (segmentationMixinType !== `freehandSegmentationMixin`) {
    logger.error(`eraseInsideFreehand operation requires freehandSegmentationMixin operationData, recieved ${segmentationMixinType}`);
    return;
  }
  const {
    image
  } = evt.detail;
  const vertices = points.map(a => [a.x, a.y]);
  const [topLeft, bottomRight] = getBoundingBoxAroundPolygon(vertices, image);
  inside ? eraseInsideShape(evt, operationData, point => isPointInPolygon([point.x, point.y], vertices), topLeft, bottomRight) : eraseOutsideShape(evt, operationData, point => isPointInPolygon([point.x, point.y], vertices), topLeft, bottomRight);
}

/**
 * Erase all pixels inside/outside the region defined by `operationData.points`.
 * @param  {} evt The Cornerstone event.
 * @param {}  operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */
function eraseInsideFreehand(evt, operationData) {
  eraseFreehand(evt, operationData, true);
}

/**
 * Erase all pixels outside the region defined by `operationData.points`.
 * @param  {} evt The Cornerstone event.
 * @param  {} operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */
function eraseOutsideFreehand(evt, operationData) {
  eraseFreehand(evt, operationData, false);
}
;// CONCATENATED MODULE: ./imaging/tools/strategies/fillFreehand.js
/** @module imaging/strategies/fillFreehand
 *  @desc  This file provides functionalities for
 *         filling pixels
 */

// external libraries

const {
  getBoundingBoxAroundPolygon: fillFreehand_getBoundingBoxAroundPolygon,
  fillInsideShape,
  fillOutsideShape
} = cornerstoneTools_default().importInternal("util/segmentationUtils");
const fillFreehand_isPointInPolygon = cornerstoneTools_default().importInternal("util/isPointInPolygon");
const fillFreehand_getLogger = cornerstoneTools_default().importInternal("util/getLogger");
const fillFreehand_logger = fillFreehand_getLogger("util:segmentation:operations:fillInsideFreehand");

/**
 * Fill all pixels inside/outside the region defined by
 * `operationData.points` with the `activeSegmentIndex` value.
 * @param  {} evt The Cornerstone event.
 * @param  {} operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */
function fillFreehand(evt, operationData, inside = true) {
  const {
    points,
    segmentationMixinType
  } = operationData;
  if (segmentationMixinType !== `freehandSegmentationMixin`) {
    fillFreehand_logger.error(`eraseInsideFreehand operation requires freehandSegmentationMixin operationData, recieved ${segmentationMixinType}`);
    return;
  }

  // Obtain the bounding box of the entire drawing so that
  // we can subset our search. Outside of the bounding box,
  // everything is outside of the polygon.
  const {
    image
  } = evt.detail;
  const vertices = points.map(a => [a.x, a.y]);
  const [topLeft, bottomRight] = fillFreehand_getBoundingBoxAroundPolygon(vertices, image);
  inside ? fillInsideShape(evt, operationData, point => fillFreehand_isPointInPolygon([point.x, point.y], vertices), topLeft, bottomRight) : fillOutsideShape(evt, operationData, point => fillFreehand_isPointInPolygon([point.x, point.y], vertices), topLeft, bottomRight);
}

/**
 * Fill all pixels inside/outside the region defined by `operationData.points`.
 * @param  {} evt The Cornerstone event.
 * @param {}  operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */
function fillInsideFreehand(evt, operationData) {
  fillFreehand(evt, operationData, true);
}

/**
 * Fill all pixels outside the region defined by `operationData.points`.
 * @param  {} evt The Cornerstone event.
 * @param  {} operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */
function fillOutsideFreehand(evt, operationData) {
  fillFreehand(evt, operationData, false);
}
;// CONCATENATED MODULE: ./imaging/tools/strategies/index.js


;// CONCATENATED MODULE: ./imaging/tools/custom/polygonSegmentationMixin.js
/** @module imaging/tools/polygonSegmentationMixin
 *  @desc  This file ovverides `freehandSegmentationMixin`'s
 *         `renderToolData` method
 */

// external libraries

const external = (cornerstoneTools_default()).external;
const draw = cornerstoneTools_default().importInternal("drawing/draw");
const drawJoinedLines = cornerstoneTools_default().importInternal("drawing/drawJoinedLines");
const getNewContext = cornerstoneTools_default().importInternal("drawing/getNewContext");
const {
  getDiffBetweenPixelData
} = cornerstoneTools_default().importInternal("util/segmentationUtils");
const {
  getters,
  setters
} = cornerstoneTools_default().getModule("segmentation");

/**
 * Global var, identify when first point has already been placed
 */
let isDrawing = false;

/**
 * Override for `freehandSegmentationMixin`'s `renderToolData` method to render a polyline instead
 * of a freehand region with the first and last point connected. Apply after the `freehandSegmentationMixin`.
 *
 * @override
 * @param {Object} evt The cornerstone render event.
 * @returns {null}
 */
function renderToolData(evt) {
  const eventData = evt.detail;
  const {
    element
  } = eventData;
  const color = getters.brushColor(element, true);
  const context = getNewContext(eventData.canvasContext.canvas);
  const handles = this.handles;
  draw(context, context => {
    const isNotTheFirstHandle = handles.points.length > 1;
    if (isNotTheFirstHandle) {
      for (let j = 0; j < handles.points.length; j++) {
        const lines = [...handles.points[j].lines];
        drawJoinedLines(context, element, this.handles.points[j], lines, {
          color
        });
      }
    }
  });
}

/**
 * Returns a handle of a particular tool if it is close to the mouse cursor
 *
 * @private
 * @param {Object} element - The element on which the roi is being drawn.
 * @param {Object} data      Data object associated with the tool.
 * @param {*} coords
 * @returns {Number|Object|Boolean}
 */
function _pointNearHandle(element, data, coords) {
  if (data.handles === undefined || data.handles.points === undefined) {
    return;
  }
  if (data.visible === false) {
    return;
  }
  for (let i = 0; i < data.handles.points.length; i++) {
    const handleCanvas = external.cornerstone.pixelToCanvas(element, data.handles.points[i]);
    if (external.cornerstoneMath.point.distance(handleCanvas, coords) < 6) {
      return true;
    }
  }
}

/**
 * Entry point, manage workflow starting / ending
 * @param {Object} evt
 */

function _checkIfDrawing(evt) {
  const {
    currentPoints,
    element
  } = evt.detail;
  const coords = currentPoints.canvas;
  let data = this;
  if (isDrawing && _pointNearHandle(element, data, coords)) {
    _applyStrategy.call(this, evt);
  } else if (isDrawing) {
    _setHandlesAndUpdate.call(this, evt);
  } else {
    isDrawing = true;
    _startOutliningRegion.call(this, evt);
  }
}

/**
 * Sets the start handle point and claims the eventDispatcher event
 *
 * @private
 * @param {*} evt // mousedown, touchstart, click
 * @returns {void|null}
 */
function _startOutliningRegion(evt) {
  const element = evt.detail.element;
  const image = evt.detail.currentPoints.image;
  const points = this.handles.points;
  points.push({
    x: image.x,
    y: image.y,
    lines: []
  });
  this.currentHandle += 1;
  external.cornerstone.updateImage(element);
}

/**
 * This function will update the handles and updateImage to force re-draw
 *
 * @private
 * @method _setHandlesAndUpdate
 * @param {(CornerstoneTools.event#TOUCH_DRAG|CornerstoneTools.event#MOUSE_DRAG|CornerstoneTools.event#MOUSE_MOVE)} evt  Interaction event emitted by an enabledElement
 * @returns {void}
 */
function _setHandlesAndUpdate(evt) {
  const eventData = evt.detail;
  const element = evt.detail.element;
  this._addPoint(eventData);
  external.cornerstone.updateImage(element);
}

/**
 * Event handler for MOUSE_UP/TOUCH_END during handle drag event loop.
 *
 * @private
 * @method _applyStrategy
 * @param {(CornerstoneTools.event#MOUSE_UP|CornerstoneTools.event#TOUCH_END)} evt Interaction event emitted by an enabledElement
 * @returns {void}
 */
function _applyStrategy(evt) {
  const points = this.handles.points;
  const {
    element
  } = evt.detail;
  const {
    labelmap2D,
    labelmap3D,
    currentImageIdIndex
  } = getters.labelmap2D(element);
  const pixelData = labelmap2D.pixelData;
  const previousPixeldata = pixelData.slice();
  const operationData = {
    points,
    pixelData,
    segmentIndex: labelmap3D.activeSegmentIndex,
    segmentationMixinType: `freehandSegmentationMixin`
  };
  this.applyActiveStrategy(evt, operationData);
  const operation = {
    imageIdIndex: currentImageIdIndex,
    diff: getDiffBetweenPixelData(previousPixeldata, pixelData)
  };
  setters.pushState(this.element, [operation]);

  // Invalidate the brush tool data so it is redrawn
  setters.updateSegmentsOnLabelmap2D(labelmap2D);
  external.cornerstone.updateImage(element);
  this._resetHandles();
}

/**
 * Sets the start and end handle points to empty objects
 *
 * @private
 * @method _resetHandles
 * @returns {undefined}
 */
function _resetHandles() {
  this.handles = {
    points: []
  };
  isDrawing = false;
  this.currentHandle = 0;
}

/**
 * Adds a point on mouse click in polygon mode.
 *
 * @private
 * @param {Object} evt - data object associated with an event.
 * @returns {void}
 */
function _addPoint(evt) {
  const points = this.handles.points;
  if (points.length) {
    // Add the line from the current handle to the new handle
    points[this.currentHandle - 1].lines.push({
      x: evt.currentPoints.image.x,
      y: evt.currentPoints.image.y,
      lines: []
    });
  }

  // Add the new handle
  points.push({
    x: evt.currentPoints.image.x,
    y: evt.currentPoints.image.y,
    lines: []
  });

  // Increment the current handle value
  this.currentHandle += 1;

  // Force onImageRendered to fire
  external.cornerstone.updateImage(evt.element);
}

/**
 * @mixin polygonSegmentationMixin - segmentation operations for polyline
 * @memberof Mixins
 */
/* harmony default export */ const polygonSegmentationMixin = ({
  mouseClickCallback: _checkIfDrawing,
  initializeMixin: _resetHandles,
  renderToolData,
  _resetHandles,
  _addPoint,
  _applyStrategy
});
;// CONCATENATED MODULE: ./imaging/tools/custom/polylineScissorsTool.js
/** @module imaging/tools/custom/polygonScissorsTool
 *  @desc  This file provides functionalities for
 *         a custom polyline scissors cornestone tool
 */

// external libraries

const BaseTool = cornerstoneTools_default().importInternal("base/BaseTool");
const {
  rectangleRoiCursor
} = cornerstoneTools_default().importInternal("tools/cursors");

// internal libraries
 // cannot import strategies in other way 🤷


// Register custom mixin
cornerstoneTools_default().register("mixin", "polygonSegmentationMixin", polygonSegmentationMixin);

/**
 * @public
 * @class PolylineScissorsTool
 * @memberof Tools
 * @classdesc Tool for manipulating labelmap data by drawing a polyline polygon.
 * @extends Tools.Base.BaseTool
 */
class PolylineScissorsTool extends BaseTool {
  /** @inheritdoc */
  constructor(props = {}) {
    const defaultProps = {
      name: "PolylineScissors",
      strategies: {
        FILL_INSIDE: fillInsideFreehand,
        FILL_OUTSIDE: fillOutsideFreehand,
        ERASE_OUTSIDE: eraseOutsideFreehand,
        ERASE_INSIDE: eraseInsideFreehand
      },
      cursors: {
        FILL_INSIDE: rectangleRoiCursor,
        FILL_OUTSIDE: rectangleRoiCursor,
        ERASE_OUTSIDE: rectangleRoiCursor,
        ERASE_INSIDE: rectangleRoiCursor
      },
      defaultStrategy: "FILL_INSIDE",
      supportedInteractionTypes: ["Mouse", "Touch"],
      svgCursor: rectangleRoiCursor,
      mixins: ["polygonSegmentationMixin"]
    };
    super(props, defaultProps);
  }
}

/***/ }),

/***/ 1828:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ RectangleRoiOverlayTool)
/* harmony export */ });
/* harmony import */ var cornerstone_tools__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4030);
/* harmony import */ var cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(cornerstone_tools__WEBPACK_IMPORTED_MODULE_0__);

const external = (cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().external);
const BaseAnnotationTool = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("base/BaseAnnotationTool");

// State
const getToolState = (cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().getToolState);
const toolStyle = (cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().toolStyle);
const toolColors = (cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().toolColors);

// Drawing
const getNewContext = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("drawing/getNewContext");
const draw = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("drawing/draw");
const drawHandles = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("drawing/drawHandles");
const drawRect = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("drawing/drawRect");
const drawLinkedTextBox = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("drawing/drawLinkedTextBox");
const setShadow = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("drawing/setShadow");

// Util
const calculateSUV = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("util/calculateSUV");
const getROITextBoxCoords = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("util/getROITextBoxCoords");
const numbersWithCommas = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("util/numbersWithCommas");
const throttle = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("util/throttle");
const {
  rectangleRoiCursor
} = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("tools/cursors");
const getLogger = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("util/getLogger");
const getPixelSpacing = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("util/getPixelSpacing");
const getModule = (cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().getModule);
const logger = getLogger("tools:annotation:RectangleRoiTool");

/**
 * @public
 * @class RectangleRoiTool
 * @memberof Tools.Annotation
 * @classdesc Tool for drawing rectangular regions of interest, and measuring
 * the statistics of the enclosed pixels.
 * @extends Tools.Base.BaseAnnotationTool
 */
class RectangleRoiOverlayTool extends BaseAnnotationTool {
  constructor(props = {}) {
    const defaultProps = {
      name: "RectangleRoiOverlay",
      supportedInteractionTypes: ["Mouse", "Touch"],
      configuration: {
        drawHandles: true,
        drawHandlesOnHover: false,
        hideHandlesIfMoving: false,
        renderDashed: false
        // showMinMax: false,
        // showHounsfieldUnits: true,
      },
      svgCursor: rectangleRoiCursor
    };
    super(props, defaultProps);
    this.throttledUpdateCachedStats = throttle(this.updateCachedStats, 110);
  }
  createNewMeasurement(eventData) {
    const goodEventData = eventData && eventData.currentPoints && eventData.currentPoints.image;
    if (!goodEventData) {
      logger.error(`required eventData not supplied to tool ${this.name}'s createNewMeasurement`);
      return;
    }
    return {
      computeMeasurements: this.options.computeMeasurements,
      visible: true,
      active: true,
      color: undefined,
      invalidated: true,
      handles: {
        start: {
          x: eventData.currentPoints.image.x,
          y: eventData.currentPoints.image.y,
          highlight: true,
          active: false
        },
        end: {
          x: eventData.currentPoints.image.x,
          y: eventData.currentPoints.image.y,
          highlight: true,
          active: true
        },
        initialRotation: eventData.viewport.rotation,
        textBox: {
          active: false,
          hasMoved: false,
          movesIndependently: false,
          drawnIndependently: true,
          allowedOutsideImage: true,
          hasBoundingBox: true
        }
      }
    };
  }
  pointNearTool(element, data, coords, interactionType) {
    const hasStartAndEndHandles = data && data.handles && data.handles.start && data.handles.end;
    const validParameters = hasStartAndEndHandles;
    if (!validParameters) {
      logger.warn(`invalid parameters supplied to tool ${this.name}'s pointNearTool`);
    }
    if (!validParameters || data.visible === false) {
      return false;
    }
    const distance = interactionType === "mouse" ? 15 : 25;
    const startCanvas = external.cornerstone.pixelToCanvas(element, data.handles.start);
    const endCanvas = external.cornerstone.pixelToCanvas(element, data.handles.end);
    const rect = {
      left: Math.min(startCanvas.x, endCanvas.x),
      top: Math.min(startCanvas.y, endCanvas.y),
      width: Math.abs(startCanvas.x - endCanvas.x),
      height: Math.abs(startCanvas.y - endCanvas.y)
    };
    const distanceToPoint = external.cornerstoneMath.rect.distanceToPoint(rect, coords);
    return distanceToPoint < distance;
  }
  updateCachedStats(image, element, data) {
    if (data.computeMeasurements) {
      const seriesModule = external.cornerstone.metaData.get("generalSeriesModule", image.imageId) || {};
      const modality = seriesModule.modality;
      const pixelSpacing = getPixelSpacing(image);
      const stats = _calculateStats(image, element, data.handles, modality, pixelSpacing);
      data.cachedStats = stats;
    }
    data.invalidated = false;
  }
  renderToolData(evt) {
    const toolData = getToolState(evt.currentTarget, this.name);
    if (!toolData) {
      return;
    }
    const eventData = evt.detail;
    const {
      image,
      element
    } = eventData;
    const lineWidth = toolStyle.getToolWidth();
    const lineDash = getModule("globalConfiguration").configuration.lineDash;
    const {
      handleRadius,
      drawHandlesOnHover,
      hideHandlesIfMoving,
      renderDashed
    } = this.configuration;
    const context = getNewContext(eventData.canvasContext.canvas);
    const {
      rowPixelSpacing,
      colPixelSpacing
    } = getPixelSpacing(image);

    // Meta
    const seriesModule = external.cornerstone.metaData.get("generalSeriesModule", image.imageId) || {};

    // Pixel Spacing
    const modality = seriesModule.modality;
    const hasPixelSpacing = rowPixelSpacing && colPixelSpacing;
    draw(context, context => {
      // If we have tool data for this element - iterate over each set and draw it
      for (let i = 0; i < toolData.data.length; i++) {
        const data = toolData.data[i];
        if (data.visible === false) {
          continue;
        }

        // Configure
        const color = toolColors.getColorIfActive(data);
        const handleOptions = {
          color,
          handleRadius,
          drawHandlesIfActive: drawHandlesOnHover,
          hideHandlesIfMoving
        };
        setShadow(context, this.configuration);
        const rectOptions = {
          color
        };
        if (renderDashed) {
          rectOptions.lineDash = lineDash;
        }

        // Draw
        drawRect(context, element, data.handles.start, data.handles.end, rectOptions, "pixel", data.handles.initialRotation);
        if (this.configuration.drawHandles) {
          drawHandles(context, eventData, data.handles, handleOptions);
        }
        if (data.computeMeasurements) {
          // Update textbox stats
          if (data.invalidated === true) {
            if (data.cachedStats) {
              this.throttledUpdateCachedStats(image, element, data);
            } else {
              this.updateCachedStats(image, element, data);
            }
          }

          // Default to textbox on right side of ROI
          if (!data.handles.textBox.hasMoved) {
            const defaultCoords = getROITextBoxCoords(eventData.viewport, data.handles);
            Object.assign(data.handles.textBox, defaultCoords);
          }
          const textBoxAnchorPoints = handles => _findTextBoxAnchorPoints(handles.start, handles.end);
          const textBoxContent = _createTextBoxContent(context, image.color, data.cachedStats, modality, hasPixelSpacing, this.configuration);
          data.unit = _getUnit(modality, this.configuration.showHounsfieldUnits);
          drawLinkedTextBox(context, element, data.handles.textBox, textBoxContent, data.handles, textBoxAnchorPoints, color, lineWidth, 10, true);
        }
      }
    });
  }
}

/**
 * TODO: This is the same method (+ GetPixels) for the other ROIs
 * TODO: The pixel filtering is the unique bit
 *
 * @param {*} startHandle
 * @param {*} endHandle
 * @returns {{ left: number, top: number, width: number, height: number}}
 */
function _getRectangleImageCoordinates(startHandle, endHandle) {
  return {
    left: Math.min(startHandle.x, endHandle.x),
    top: Math.min(startHandle.y, endHandle.y),
    width: Math.abs(startHandle.x - endHandle.x),
    height: Math.abs(startHandle.y - endHandle.y)
  };
}

/**
 *
 *
 * @param {*} image
 * @param {*} element
 * @param {*} handles
 * @param {*} modality
 * @param {*} pixelSpacing
 * @returns {Object} The Stats object
 */
function _calculateStats(image, element, handles, modality, pixelSpacing) {
  // Retrieve the bounds of the rectangle in image coordinates
  const roiCoordinates = _getRectangleImageCoordinates(handles.start, handles.end);

  // Retrieve the array of pixels that the rectangle bounds cover
  const pixels = external.cornerstone.getPixels(element, roiCoordinates.left, roiCoordinates.top, roiCoordinates.width, roiCoordinates.height);

  // Calculate the mean & standard deviation from the pixels and the rectangle details
  const roiMeanStdDev = _calculateRectangleStats(pixels, roiCoordinates);
  let meanStdDevSUV;
  if (modality === "PT") {
    meanStdDevSUV = {
      mean: calculateSUV(image, roiMeanStdDev.mean, true) || 0,
      stdDev: calculateSUV(image, roiMeanStdDev.stdDev, true) || 0
    };
  }

  // Calculate the image area from the rectangle dimensions and pixel spacing
  const area = roiCoordinates.width * (pixelSpacing.colPixelSpacing || 1) * (roiCoordinates.height * (pixelSpacing.rowPixelSpacing || 1));
  const perimeter = roiCoordinates.width * 2 * (pixelSpacing.colPixelSpacing || 1) + roiCoordinates.height * 2 * (pixelSpacing.rowPixelSpacing || 1);
  return {
    area: area || 0,
    perimeter,
    count: roiMeanStdDev.count || 0,
    mean: roiMeanStdDev.mean || 0,
    variance: roiMeanStdDev.variance || 0,
    stdDev: roiMeanStdDev.stdDev || 0,
    min: roiMeanStdDev.min || 0,
    max: roiMeanStdDev.max || 0,
    meanStdDevSUV
  };
}

/**
 *
 *
 * @param {*} sp
 * @param {*} rectangle
 * @returns {{ count, number, mean: number,  variance: number,  stdDev: number,  min: number,  max: number }}
 */
function _calculateRectangleStats(sp, rectangle) {
  let sum = 0;
  let sumSquared = 0;
  let count = 0;
  let index = 0;
  let min = sp ? sp[0] : null;
  let max = sp ? sp[0] : null;
  for (let y = rectangle.top; y < rectangle.top + rectangle.height; y++) {
    for (let x = rectangle.left; x < rectangle.left + rectangle.width; x++) {
      sum += sp[index];
      sumSquared += sp[index] * sp[index];
      min = Math.min(min, sp[index]);
      max = Math.max(max, sp[index]);
      count++; // TODO: Wouldn't this just be sp.length?
      index++;
    }
  }
  if (count === 0) {
    return {
      count,
      mean: 0.0,
      variance: 0.0,
      stdDev: 0.0,
      min: 0.0,
      max: 0.0
    };
  }
  const mean = sum / count;
  const variance = sumSquared / count - mean * mean;
  return {
    count,
    mean,
    variance,
    stdDev: Math.sqrt(variance),
    min,
    max
  };
}

/**
 *
 *
 * @param {*} startHandle
 * @param {*} endHandle
 * @returns {Array.<{x: number, y: number}>}
 */
function _findTextBoxAnchorPoints(startHandle, endHandle) {
  const {
    left,
    top,
    width,
    height
  } = _getRectangleImageCoordinates(startHandle, endHandle);
  return [{
    // Top middle point of rectangle
    x: left + width / 2,
    y: top
  }, {
    // Left middle point of rectangle
    x: left,
    y: top + height / 2
  }, {
    // Bottom middle point of rectangle
    x: left + width / 2,
    y: top + height
  }, {
    // Right middle point of rectangle
    x: left + width,
    y: top + height / 2
  }];
}

/**
 *
 *
 * @param {*} area
 * @param {*} hasPixelSpacing
 * @returns {string} The formatted label for showing area
 */
function _formatArea(area, hasPixelSpacing) {
  // This uses Char code 178 for a superscript 2
  const suffix = hasPixelSpacing ? ` mm${String.fromCharCode(178)}` : ` px${String.fromCharCode(178)}`;
  return `Area: ${numbersWithCommas(area.toFixed(2))}${suffix}`;
}
function _getUnit(modality, showHounsfieldUnits) {
  return modality === "CT" && showHounsfieldUnits !== false ? "HU" : "";
}

/**
 * TODO: This is identical to EllipticalROI's same fn
 * TODO: We may want to make this a utility for ROIs with these values?
 *
 * @param {*} context
 * @param {*} isColorImage
 * @param {*} { area, mean, stdDev, min, max, meanStdDevSUV }
 * @param {*} modality
 * @param {*} hasPixelSpacing
 * @param {*} [options={}]
 * @returns {string[]}
 */
function _createTextBoxContent(context, isColorImage, {
  area = 0,
  mean = 0,
  stdDev = 0,
  min = 0,
  max = 0,
  meanStdDevSUV = 0
} = {}, modality, hasPixelSpacing, options = {}) {
  const showMinMax = options.showMinMax || false;
  const textLines = [];
  const otherLines = [];
  if (!isColorImage) {
    const hasStandardUptakeValues = meanStdDevSUV && meanStdDevSUV.mean !== 0;
    const unit = _getUnit(modality, options.showHounsfieldUnits);
    let meanString = `Mean: ${numbersWithCommas(mean.toFixed(2))} ${unit}`;
    const stdDevString = `Std Dev: ${numbersWithCommas(stdDev.toFixed(2))} ${unit}`;

    // If this image has SUV values to display, concatenate them to the text line
    if (hasStandardUptakeValues) {
      const SUVtext = " SUV: ";
      const meanSuvString = `${SUVtext}${numbersWithCommas(meanStdDevSUV.mean.toFixed(2))}`;
      const stdDevSuvString = `${SUVtext}${numbersWithCommas(meanStdDevSUV.stdDev.toFixed(2))}`;
      const targetStringLength = Math.floor(context.measureText(`${stdDevString}     `).width);
      while (context.measureText(meanString).width < targetStringLength) {
        meanString += " ";
      }
      otherLines.push(`${meanString}${meanSuvString}`);
      otherLines.push(`${stdDevString}     ${stdDevSuvString}`);
    } else {
      otherLines.push(`${meanString}`);
      otherLines.push(`${stdDevString}`);
    }
    if (showMinMax) {
      let minString = `Min: ${min} ${unit}`;
      const maxString = `Max: ${max} ${unit}`;
      const targetStringLength = hasStandardUptakeValues ? Math.floor(context.measureText(`${stdDevString}     `).width) : Math.floor(context.measureText(`${meanString}     `).width);
      while (context.measureText(minString).width < targetStringLength) {
        minString += " ";
      }
      otherLines.push(`${minString}${maxString}`);
    }
  }
  textLines.push(_formatArea(area, hasPixelSpacing));
  otherLines.forEach(x => textLines.push(x));
  return textLines;
}

/***/ }),

/***/ 7073:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ ThresholdsBrushTool)
/* harmony export */ });
/* harmony import */ var cornerstone_tools__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4030);
/* harmony import */ var cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(cornerstone_tools__WEBPACK_IMPORTED_MODULE_0__);
/** @module imaging/tools/custom/thresholdBrushTool
 *  @desc  This file provides functionalities for
 *         a brush tool with thresholds using a
 *         custom cornestone tool
 */

// external libraries

const external = (cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().external);
const BaseBrushTool = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("base/BaseBrushTool");
const segmentationUtils = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().importInternal("util/segmentationUtils");
const drawBrushPixels = segmentationUtils.drawBrushPixels;
const getCircle = segmentationUtils.getCircle;
const segmentationModule = cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().getModule("segmentation");

/**
 * @public
 * @class ThresholdsBrushTool
 * @memberof Tools.Brush
 * @classdesc Tool for drawing segmentations on an image (only pixels inside thresholds)
 * @extends Tools.Base.BaseBrushTool
 */
class ThresholdsBrushTool extends BaseBrushTool {
  constructor(props = {}) {
    const defaultProps = {
      name: "ThresholdsBrush",
      supportedInteractionTypes: ["Mouse", "Touch"],
      configuration: {},
      mixins: ["renderBrushMixin"]
    };
    super(props, defaultProps);
    this.touchDragCallback = this._paint.bind(this);
  }

  /**
   * Paints the data to the labelmap.
   *
   * @protected
   * @param  {Object} evt The data object associated with the event.
   * @returns {void}
   */
  _paint(evt) {
    const {
      configuration
    } = segmentationModule;
    const eventData = evt.detail;
    const {
      rows,
      columns
    } = eventData.image;
    const {
      x,
      y
    } = eventData.currentPoints.image;
    if (x < 0 || x > columns || y < 0 || y > rows) {
      return;
    }
    const radius = configuration.radius;
    const thresholds = configuration.thresholds;
    const {
      labelmap2D,
      labelmap3D,
      shouldErase
    } = this.paintEventData;
    let pointerArray = [];

    // threshold should be applied only if painting, not erasing
    if (shouldErase) {
      pointerArray = getCircle(radius, rows, columns, x, y);
    } else {
      pointerArray = getCircleWithThreshold(eventData.image, radius, thresholds, x, y);
    }

    // Draw / Erase the active color.
    drawBrushPixels(pointerArray, labelmap2D.pixelData, labelmap3D.activeSegmentIndex, columns, shouldErase);
    external.cornerstone.updateImage(evt.detail.element);
  }
}

/**
 * Gets the pixels within the circle if inside thresholds (included)
 * NOTE: thresholds values must consider slope and intercept (MO value)
 * @method
 * @name getCircleWithThreshold
 *
 * @param  {Object} image         The target image.
 * @param  {number} radius        The radius of the circle.
 * @param  {Array} thresholds     The thresholds array [min, max].
 * @param  {number} [xCoord = 0]  The x-location of the center of the circle.
 * @param  {number} [yCoord = 0]  The y-location of the center of the circle.
 * @returns {Array.number[]}      Array of pixels contained within the circle.
 */
function getCircleWithThreshold(image, radius, thresholds, xCoord = 0, yCoord = 0) {
  const pixelData = image.getPixelData();
  const {
    rows,
    columns
  } = image;
  const x0 = Math.floor(xCoord);
  const y0 = Math.floor(yCoord);
  let circleArray = [];

  // if no thresholds, set all pixels range
  if (!thresholds) {
    thresholds = [image.minPixelValue, image.maxPixelValue];
  }
  function isInsideThresholds(v, t) {
    return v >= t[0] && v <= t[1];
  }
  if (radius === 1) {
    let value = pixelData[y0 * rows + x0];
    let moValue = value * image.slope + image.intercept;
    if (isInsideThresholds(moValue, thresholds)) {
      circleArray = [[x0, y0]];
    }
    return circleArray;
  }
  let index = 0;
  for (let y = -radius; y <= radius; y++) {
    const yCoord = y0 + y;
    if (yCoord > rows || yCoord < 0) {
      continue;
    }
    for (let x = -radius; x <= radius; x++) {
      const xCoord = x0 + x;
      if (xCoord >= columns || xCoord < 0) {
        continue;
      }
      let value = pixelData[yCoord * rows + xCoord];
      let moValue = value * image.slope + image.intercept;
      if (x * x + y * y < radius * radius && isInsideThresholds(moValue, thresholds)) {
        circleArray[index++] = [x0 + x, y0 + y];
      }
    }
  }
  return circleArray;
}

/***/ }),

/***/ 9003:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var cornerstone_tools__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4030);
/* harmony import */ var cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(cornerstone_tools__WEBPACK_IMPORTED_MODULE_0__);
// external libraries


// global variables
const external = (cornerstone_tools__WEBPACK_IMPORTED_MODULE_0___default().external);
const _DEFAULT_LOAD_HANDLER = "DEFAULT";
const defaultStartLoadHandler = {};
const defaultEndLoadHandler = {};
const defaultErrorLoadingHandler = {};
function _getUUIDFromElement(element) {
  if (!element) {
    return _DEFAULT_LOAD_HANDLER;
  }
  const uuid = external.cornerstone.getEnabledElement(element).uuid;
  if (!uuid) {
    throw new Error("Something went wrong when getting uuid from element");
  }
  return uuid;
}
function setStartLoadHandler(handler, element = undefined) {
  if (!handler) {
    throw new Error("The Handler function must be defined");
  }
  const uuid = _getUUIDFromElement(element);
  defaultStartLoadHandler[uuid] = handler;
}
function getStartLoadHandler(element) {
  const uuid = _getUUIDFromElement(element);
  return defaultStartLoadHandler[uuid] || defaultStartLoadHandler[_DEFAULT_LOAD_HANDLER];
}
function setEndLoadHandler(handler, element = undefined) {
  if (!handler) {
    throw new Error("The Handler function must be defined");
  }
  const uuid = _getUUIDFromElement(element);
  defaultEndLoadHandler[uuid] = handler;
}
function getEndLoadHandler(element) {
  const uuid = _getUUIDFromElement(element);
  return defaultEndLoadHandler[uuid] || defaultEndLoadHandler[_DEFAULT_LOAD_HANDLER];
}
function setErrorLoadingHandler(handler, element = undefined) {
  if (!handler) {
    throw new Error("The Handler function must be defined");
  }
  const uuid = _getUUIDFromElement(element);
  defaultErrorLoadingHandler[uuid] = handler;
}
function getErrorLoadingHandler(element) {
  const uuid = _getUUIDFromElement(element);
  return defaultErrorLoadingHandler[uuid] || defaultErrorLoadingHandler[_DEFAULT_LOAD_HANDLER];
}
function removeHandlers(element) {
  const uuid = _getUUIDFromElement(element);
  delete defaultStartLoadHandler[uuid];
  delete defaultEndLoadHandler[uuid];
  delete defaultErrorLoadingHandler[uuid];
}
const loadHandlerManager = {
  setStartLoadHandler,
  getStartLoadHandler,
  setEndLoadHandler,
  getEndLoadHandler,
  setErrorLoadingHandler,
  getErrorLoadingHandler,
  removeHandlers
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (loadHandlerManager);

/***/ }),

/***/ 7371:
/***/ ((module) => {

/*! cornerstone-core - 2.6.1 - 2021-11-19 | (c) 2016 Chris Hafey | https://github.com/cornerstonejs/cornerstone */
(function webpackUniversalModuleDefinition(root, factory) {
	if(true)
		module.exports = factory();
	else {}
})(window, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	function hotDisposeChunk(chunkId) {
/******/ 		delete installedChunks[chunkId];
/******/ 	}
/******/ 	var parentHotUpdateCallback = window["webpackHotUpdate"];
/******/ 	window["webpackHotUpdate"] = // eslint-disable-next-line no-unused-vars
/******/ 	function webpackHotUpdateCallback(chunkId, moreModules) {
/******/ 		hotAddUpdateChunk(chunkId, moreModules);
/******/ 		if (parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules);
/******/ 	} ;
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotDownloadUpdateChunk(chunkId) {
/******/ 		var head = document.getElementsByTagName("head")[0];
/******/ 		var script = document.createElement("script");
/******/ 		script.charset = "utf-8";
/******/ 		script.src = __nested_webpack_require_25879__.p + "" + chunkId + "." + hotCurrentHash + ".hot-update.js";
/******/ 		;
/******/ 		head.appendChild(script);
/******/ 	}
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotDownloadManifest(requestTimeout) {
/******/ 		requestTimeout = requestTimeout || 10000;
/******/ 		return new Promise(function(resolve, reject) {
/******/ 			if (typeof XMLHttpRequest === "undefined") {
/******/ 				return reject(new Error("No browser support"));
/******/ 			}
/******/ 			try {
/******/ 				var request = new XMLHttpRequest();
/******/ 				var requestPath = __nested_webpack_require_25879__.p + "" + hotCurrentHash + ".hot-update.json";
/******/ 				request.open("GET", requestPath, true);
/******/ 				request.timeout = requestTimeout;
/******/ 				request.send(null);
/******/ 			} catch (err) {
/******/ 				return reject(err);
/******/ 			}
/******/ 			request.onreadystatechange = function() {
/******/ 				if (request.readyState !== 4) return;
/******/ 				if (request.status === 0) {
/******/ 					// timeout
/******/ 					reject(
/******/ 						new Error("Manifest request to " + requestPath + " timed out.")
/******/ 					);
/******/ 				} else if (request.status === 404) {
/******/ 					// no update available
/******/ 					resolve();
/******/ 				} else if (request.status !== 200 && request.status !== 304) {
/******/ 					// other failure
/******/ 					reject(new Error("Manifest request to " + requestPath + " failed."));
/******/ 				} else {
/******/ 					// success
/******/ 					try {
/******/ 						var update = JSON.parse(request.responseText);
/******/ 					} catch (e) {
/******/ 						reject(e);
/******/ 						return;
/******/ 					}
/******/ 					resolve(update);
/******/ 				}
/******/ 			};
/******/ 		});
/******/ 	}
/******/
/******/ 	var hotApplyOnUpdate = true;
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	var hotCurrentHash = "4d8d88ba53621f59b9a9";
/******/ 	var hotRequestTimeout = 10000;
/******/ 	var hotCurrentModuleData = {};
/******/ 	var hotCurrentChildModule;
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	var hotCurrentParents = [];
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	var hotCurrentParentsTemp = [];
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotCreateRequire(moduleId) {
/******/ 		var me = installedModules[moduleId];
/******/ 		if (!me) return __nested_webpack_require_25879__;
/******/ 		var fn = function(request) {
/******/ 			if (me.hot.active) {
/******/ 				if (installedModules[request]) {
/******/ 					if (installedModules[request].parents.indexOf(moduleId) === -1) {
/******/ 						installedModules[request].parents.push(moduleId);
/******/ 					}
/******/ 				} else {
/******/ 					hotCurrentParents = [moduleId];
/******/ 					hotCurrentChildModule = request;
/******/ 				}
/******/ 				if (me.children.indexOf(request) === -1) {
/******/ 					me.children.push(request);
/******/ 				}
/******/ 			} else {
/******/ 				console.warn(
/******/ 					"[HMR] unexpected require(" +
/******/ 						request +
/******/ 						") from disposed module " +
/******/ 						moduleId
/******/ 				);
/******/ 				hotCurrentParents = [];
/******/ 			}
/******/ 			return __nested_webpack_require_25879__(request);
/******/ 		};
/******/ 		var ObjectFactory = function ObjectFactory(name) {
/******/ 			return {
/******/ 				configurable: true,
/******/ 				enumerable: true,
/******/ 				get: function() {
/******/ 					return __nested_webpack_require_25879__[name];
/******/ 				},
/******/ 				set: function(value) {
/******/ 					__nested_webpack_require_25879__[name] = value;
/******/ 				}
/******/ 			};
/******/ 		};
/******/ 		for (var name in __nested_webpack_require_25879__) {
/******/ 			if (
/******/ 				Object.prototype.hasOwnProperty.call(__nested_webpack_require_25879__, name) &&
/******/ 				name !== "e" &&
/******/ 				name !== "t"
/******/ 			) {
/******/ 				Object.defineProperty(fn, name, ObjectFactory(name));
/******/ 			}
/******/ 		}
/******/ 		fn.e = function(chunkId) {
/******/ 			if (hotStatus === "ready") hotSetStatus("prepare");
/******/ 			hotChunksLoading++;
/******/ 			return __nested_webpack_require_25879__.e(chunkId).then(finishChunkLoading, function(err) {
/******/ 				finishChunkLoading();
/******/ 				throw err;
/******/ 			});
/******/
/******/ 			function finishChunkLoading() {
/******/ 				hotChunksLoading--;
/******/ 				if (hotStatus === "prepare") {
/******/ 					if (!hotWaitingFilesMap[chunkId]) {
/******/ 						hotEnsureUpdateChunk(chunkId);
/******/ 					}
/******/ 					if (hotChunksLoading === 0 && hotWaitingFiles === 0) {
/******/ 						hotUpdateDownloaded();
/******/ 					}
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 		fn.t = function(value, mode) {
/******/ 			if (mode & 1) value = fn(value);
/******/ 			return __nested_webpack_require_25879__.t(value, mode & ~1);
/******/ 		};
/******/ 		return fn;
/******/ 	}
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotCreateModule(moduleId) {
/******/ 		var hot = {
/******/ 			// private stuff
/******/ 			_acceptedDependencies: {},
/******/ 			_declinedDependencies: {},
/******/ 			_selfAccepted: false,
/******/ 			_selfDeclined: false,
/******/ 			_disposeHandlers: [],
/******/ 			_main: hotCurrentChildModule !== moduleId,
/******/
/******/ 			// Module API
/******/ 			active: true,
/******/ 			accept: function(dep, callback) {
/******/ 				if (dep === undefined) hot._selfAccepted = true;
/******/ 				else if (typeof dep === "function") hot._selfAccepted = dep;
/******/ 				else if (typeof dep === "object")
/******/ 					for (var i = 0; i < dep.length; i++)
/******/ 						hot._acceptedDependencies[dep[i]] = callback || function() {};
/******/ 				else hot._acceptedDependencies[dep] = callback || function() {};
/******/ 			},
/******/ 			decline: function(dep) {
/******/ 				if (dep === undefined) hot._selfDeclined = true;
/******/ 				else if (typeof dep === "object")
/******/ 					for (var i = 0; i < dep.length; i++)
/******/ 						hot._declinedDependencies[dep[i]] = true;
/******/ 				else hot._declinedDependencies[dep] = true;
/******/ 			},
/******/ 			dispose: function(callback) {
/******/ 				hot._disposeHandlers.push(callback);
/******/ 			},
/******/ 			addDisposeHandler: function(callback) {
/******/ 				hot._disposeHandlers.push(callback);
/******/ 			},
/******/ 			removeDisposeHandler: function(callback) {
/******/ 				var idx = hot._disposeHandlers.indexOf(callback);
/******/ 				if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
/******/ 			},
/******/
/******/ 			// Management API
/******/ 			check: hotCheck,
/******/ 			apply: hotApply,
/******/ 			status: function(l) {
/******/ 				if (!l) return hotStatus;
/******/ 				hotStatusHandlers.push(l);
/******/ 			},
/******/ 			addStatusHandler: function(l) {
/******/ 				hotStatusHandlers.push(l);
/******/ 			},
/******/ 			removeStatusHandler: function(l) {
/******/ 				var idx = hotStatusHandlers.indexOf(l);
/******/ 				if (idx >= 0) hotStatusHandlers.splice(idx, 1);
/******/ 			},
/******/
/******/ 			//inherit from previous dispose call
/******/ 			data: hotCurrentModuleData[moduleId]
/******/ 		};
/******/ 		hotCurrentChildModule = undefined;
/******/ 		return hot;
/******/ 	}
/******/
/******/ 	var hotStatusHandlers = [];
/******/ 	var hotStatus = "idle";
/******/
/******/ 	function hotSetStatus(newStatus) {
/******/ 		hotStatus = newStatus;
/******/ 		for (var i = 0; i < hotStatusHandlers.length; i++)
/******/ 			hotStatusHandlers[i].call(null, newStatus);
/******/ 	}
/******/
/******/ 	// while downloading
/******/ 	var hotWaitingFiles = 0;
/******/ 	var hotChunksLoading = 0;
/******/ 	var hotWaitingFilesMap = {};
/******/ 	var hotRequestedFilesMap = {};
/******/ 	var hotAvailableFilesMap = {};
/******/ 	var hotDeferred;
/******/
/******/ 	// The update info
/******/ 	var hotUpdate, hotUpdateNewHash;
/******/
/******/ 	function toModuleId(id) {
/******/ 		var isNumber = +id + "" === id;
/******/ 		return isNumber ? +id : id;
/******/ 	}
/******/
/******/ 	function hotCheck(apply) {
/******/ 		if (hotStatus !== "idle") {
/******/ 			throw new Error("check() is only allowed in idle status");
/******/ 		}
/******/ 		hotApplyOnUpdate = apply;
/******/ 		hotSetStatus("check");
/******/ 		return hotDownloadManifest(hotRequestTimeout).then(function(update) {
/******/ 			if (!update) {
/******/ 				hotSetStatus("idle");
/******/ 				return null;
/******/ 			}
/******/ 			hotRequestedFilesMap = {};
/******/ 			hotWaitingFilesMap = {};
/******/ 			hotAvailableFilesMap = update.c;
/******/ 			hotUpdateNewHash = update.h;
/******/
/******/ 			hotSetStatus("prepare");
/******/ 			var promise = new Promise(function(resolve, reject) {
/******/ 				hotDeferred = {
/******/ 					resolve: resolve,
/******/ 					reject: reject
/******/ 				};
/******/ 			});
/******/ 			hotUpdate = {};
/******/ 			var chunkId = "cornerstone";
/******/ 			// eslint-disable-next-line no-lone-blocks
/******/ 			{
/******/ 				/*globals chunkId */
/******/ 				hotEnsureUpdateChunk(chunkId);
/******/ 			}
/******/ 			if (
/******/ 				hotStatus === "prepare" &&
/******/ 				hotChunksLoading === 0 &&
/******/ 				hotWaitingFiles === 0
/******/ 			) {
/******/ 				hotUpdateDownloaded();
/******/ 			}
/******/ 			return promise;
/******/ 		});
/******/ 	}
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotAddUpdateChunk(chunkId, moreModules) {
/******/ 		if (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])
/******/ 			return;
/******/ 		hotRequestedFilesMap[chunkId] = false;
/******/ 		for (var moduleId in moreModules) {
/******/ 			if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
/******/ 				hotUpdate[moduleId] = moreModules[moduleId];
/******/ 			}
/******/ 		}
/******/ 		if (--hotWaitingFiles === 0 && hotChunksLoading === 0) {
/******/ 			hotUpdateDownloaded();
/******/ 		}
/******/ 	}
/******/
/******/ 	function hotEnsureUpdateChunk(chunkId) {
/******/ 		if (!hotAvailableFilesMap[chunkId]) {
/******/ 			hotWaitingFilesMap[chunkId] = true;
/******/ 		} else {
/******/ 			hotRequestedFilesMap[chunkId] = true;
/******/ 			hotWaitingFiles++;
/******/ 			hotDownloadUpdateChunk(chunkId);
/******/ 		}
/******/ 	}
/******/
/******/ 	function hotUpdateDownloaded() {
/******/ 		hotSetStatus("ready");
/******/ 		var deferred = hotDeferred;
/******/ 		hotDeferred = null;
/******/ 		if (!deferred) return;
/******/ 		if (hotApplyOnUpdate) {
/******/ 			// Wrap deferred object in Promise to mark it as a well-handled Promise to
/******/ 			// avoid triggering uncaught exception warning in Chrome.
/******/ 			// See https://bugs.chromium.org/p/chromium/issues/detail?id=465666
/******/ 			Promise.resolve()
/******/ 				.then(function() {
/******/ 					return hotApply(hotApplyOnUpdate);
/******/ 				})
/******/ 				.then(
/******/ 					function(result) {
/******/ 						deferred.resolve(result);
/******/ 					},
/******/ 					function(err) {
/******/ 						deferred.reject(err);
/******/ 					}
/******/ 				);
/******/ 		} else {
/******/ 			var outdatedModules = [];
/******/ 			for (var id in hotUpdate) {
/******/ 				if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
/******/ 					outdatedModules.push(toModuleId(id));
/******/ 				}
/******/ 			}
/******/ 			deferred.resolve(outdatedModules);
/******/ 		}
/******/ 	}
/******/
/******/ 	function hotApply(options) {
/******/ 		if (hotStatus !== "ready")
/******/ 			throw new Error("apply() is only allowed in ready status");
/******/ 		options = options || {};
/******/
/******/ 		var cb;
/******/ 		var i;
/******/ 		var j;
/******/ 		var module;
/******/ 		var moduleId;
/******/
/******/ 		function getAffectedStuff(updateModuleId) {
/******/ 			var outdatedModules = [updateModuleId];
/******/ 			var outdatedDependencies = {};
/******/
/******/ 			var queue = outdatedModules.slice().map(function(id) {
/******/ 				return {
/******/ 					chain: [id],
/******/ 					id: id
/******/ 				};
/******/ 			});
/******/ 			while (queue.length > 0) {
/******/ 				var queueItem = queue.pop();
/******/ 				var moduleId = queueItem.id;
/******/ 				var chain = queueItem.chain;
/******/ 				module = installedModules[moduleId];
/******/ 				if (!module || module.hot._selfAccepted) continue;
/******/ 				if (module.hot._selfDeclined) {
/******/ 					return {
/******/ 						type: "self-declined",
/******/ 						chain: chain,
/******/ 						moduleId: moduleId
/******/ 					};
/******/ 				}
/******/ 				if (module.hot._main) {
/******/ 					return {
/******/ 						type: "unaccepted",
/******/ 						chain: chain,
/******/ 						moduleId: moduleId
/******/ 					};
/******/ 				}
/******/ 				for (var i = 0; i < module.parents.length; i++) {
/******/ 					var parentId = module.parents[i];
/******/ 					var parent = installedModules[parentId];
/******/ 					if (!parent) continue;
/******/ 					if (parent.hot._declinedDependencies[moduleId]) {
/******/ 						return {
/******/ 							type: "declined",
/******/ 							chain: chain.concat([parentId]),
/******/ 							moduleId: moduleId,
/******/ 							parentId: parentId
/******/ 						};
/******/ 					}
/******/ 					if (outdatedModules.indexOf(parentId) !== -1) continue;
/******/ 					if (parent.hot._acceptedDependencies[moduleId]) {
/******/ 						if (!outdatedDependencies[parentId])
/******/ 							outdatedDependencies[parentId] = [];
/******/ 						addAllToSet(outdatedDependencies[parentId], [moduleId]);
/******/ 						continue;
/******/ 					}
/******/ 					delete outdatedDependencies[parentId];
/******/ 					outdatedModules.push(parentId);
/******/ 					queue.push({
/******/ 						chain: chain.concat([parentId]),
/******/ 						id: parentId
/******/ 					});
/******/ 				}
/******/ 			}
/******/
/******/ 			return {
/******/ 				type: "accepted",
/******/ 				moduleId: updateModuleId,
/******/ 				outdatedModules: outdatedModules,
/******/ 				outdatedDependencies: outdatedDependencies
/******/ 			};
/******/ 		}
/******/
/******/ 		function addAllToSet(a, b) {
/******/ 			for (var i = 0; i < b.length; i++) {
/******/ 				var item = b[i];
/******/ 				if (a.indexOf(item) === -1) a.push(item);
/******/ 			}
/******/ 		}
/******/
/******/ 		// at begin all updates modules are outdated
/******/ 		// the "outdated" status can propagate to parents if they don't accept the children
/******/ 		var outdatedDependencies = {};
/******/ 		var outdatedModules = [];
/******/ 		var appliedUpdate = {};
/******/
/******/ 		var warnUnexpectedRequire = function warnUnexpectedRequire() {
/******/ 			console.warn(
/******/ 				"[HMR] unexpected require(" + result.moduleId + ") to disposed module"
/******/ 			);
/******/ 		};
/******/
/******/ 		for (var id in hotUpdate) {
/******/ 			if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
/******/ 				moduleId = toModuleId(id);
/******/ 				/** @type {TODO} */
/******/ 				var result;
/******/ 				if (hotUpdate[id]) {
/******/ 					result = getAffectedStuff(moduleId);
/******/ 				} else {
/******/ 					result = {
/******/ 						type: "disposed",
/******/ 						moduleId: id
/******/ 					};
/******/ 				}
/******/ 				/** @type {Error|false} */
/******/ 				var abortError = false;
/******/ 				var doApply = false;
/******/ 				var doDispose = false;
/******/ 				var chainInfo = "";
/******/ 				if (result.chain) {
/******/ 					chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
/******/ 				}
/******/ 				switch (result.type) {
/******/ 					case "self-declined":
/******/ 						if (options.onDeclined) options.onDeclined(result);
/******/ 						if (!options.ignoreDeclined)
/******/ 							abortError = new Error(
/******/ 								"Aborted because of self decline: " +
/******/ 									result.moduleId +
/******/ 									chainInfo
/******/ 							);
/******/ 						break;
/******/ 					case "declined":
/******/ 						if (options.onDeclined) options.onDeclined(result);
/******/ 						if (!options.ignoreDeclined)
/******/ 							abortError = new Error(
/******/ 								"Aborted because of declined dependency: " +
/******/ 									result.moduleId +
/******/ 									" in " +
/******/ 									result.parentId +
/******/ 									chainInfo
/******/ 							);
/******/ 						break;
/******/ 					case "unaccepted":
/******/ 						if (options.onUnaccepted) options.onUnaccepted(result);
/******/ 						if (!options.ignoreUnaccepted)
/******/ 							abortError = new Error(
/******/ 								"Aborted because " + moduleId + " is not accepted" + chainInfo
/******/ 							);
/******/ 						break;
/******/ 					case "accepted":
/******/ 						if (options.onAccepted) options.onAccepted(result);
/******/ 						doApply = true;
/******/ 						break;
/******/ 					case "disposed":
/******/ 						if (options.onDisposed) options.onDisposed(result);
/******/ 						doDispose = true;
/******/ 						break;
/******/ 					default:
/******/ 						throw new Error("Unexception type " + result.type);
/******/ 				}
/******/ 				if (abortError) {
/******/ 					hotSetStatus("abort");
/******/ 					return Promise.reject(abortError);
/******/ 				}
/******/ 				if (doApply) {
/******/ 					appliedUpdate[moduleId] = hotUpdate[moduleId];
/******/ 					addAllToSet(outdatedModules, result.outdatedModules);
/******/ 					for (moduleId in result.outdatedDependencies) {
/******/ 						if (
/******/ 							Object.prototype.hasOwnProperty.call(
/******/ 								result.outdatedDependencies,
/******/ 								moduleId
/******/ 							)
/******/ 						) {
/******/ 							if (!outdatedDependencies[moduleId])
/******/ 								outdatedDependencies[moduleId] = [];
/******/ 							addAllToSet(
/******/ 								outdatedDependencies[moduleId],
/******/ 								result.outdatedDependencies[moduleId]
/******/ 							);
/******/ 						}
/******/ 					}
/******/ 				}
/******/ 				if (doDispose) {
/******/ 					addAllToSet(outdatedModules, [result.moduleId]);
/******/ 					appliedUpdate[moduleId] = warnUnexpectedRequire;
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// Store self accepted outdated modules to require them later by the module system
/******/ 		var outdatedSelfAcceptedModules = [];
/******/ 		for (i = 0; i < outdatedModules.length; i++) {
/******/ 			moduleId = outdatedModules[i];
/******/ 			if (
/******/ 				installedModules[moduleId] &&
/******/ 				installedModules[moduleId].hot._selfAccepted
/******/ 			)
/******/ 				outdatedSelfAcceptedModules.push({
/******/ 					module: moduleId,
/******/ 					errorHandler: installedModules[moduleId].hot._selfAccepted
/******/ 				});
/******/ 		}
/******/
/******/ 		// Now in "dispose" phase
/******/ 		hotSetStatus("dispose");
/******/ 		Object.keys(hotAvailableFilesMap).forEach(function(chunkId) {
/******/ 			if (hotAvailableFilesMap[chunkId] === false) {
/******/ 				hotDisposeChunk(chunkId);
/******/ 			}
/******/ 		});
/******/
/******/ 		var idx;
/******/ 		var queue = outdatedModules.slice();
/******/ 		while (queue.length > 0) {
/******/ 			moduleId = queue.pop();
/******/ 			module = installedModules[moduleId];
/******/ 			if (!module) continue;
/******/
/******/ 			var data = {};
/******/
/******/ 			// Call dispose handlers
/******/ 			var disposeHandlers = module.hot._disposeHandlers;
/******/ 			for (j = 0; j < disposeHandlers.length; j++) {
/******/ 				cb = disposeHandlers[j];
/******/ 				cb(data);
/******/ 			}
/******/ 			hotCurrentModuleData[moduleId] = data;
/******/
/******/ 			// disable module (this disables requires from this module)
/******/ 			module.hot.active = false;
/******/
/******/ 			// remove module from cache
/******/ 			delete installedModules[moduleId];
/******/
/******/ 			// when disposing there is no need to call dispose handler
/******/ 			delete outdatedDependencies[moduleId];
/******/
/******/ 			// remove "parents" references from all children
/******/ 			for (j = 0; j < module.children.length; j++) {
/******/ 				var child = installedModules[module.children[j]];
/******/ 				if (!child) continue;
/******/ 				idx = child.parents.indexOf(moduleId);
/******/ 				if (idx >= 0) {
/******/ 					child.parents.splice(idx, 1);
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// remove outdated dependency from module children
/******/ 		var dependency;
/******/ 		var moduleOutdatedDependencies;
/******/ 		for (moduleId in outdatedDependencies) {
/******/ 			if (
/******/ 				Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
/******/ 			) {
/******/ 				module = installedModules[moduleId];
/******/ 				if (module) {
/******/ 					moduleOutdatedDependencies = outdatedDependencies[moduleId];
/******/ 					for (j = 0; j < moduleOutdatedDependencies.length; j++) {
/******/ 						dependency = moduleOutdatedDependencies[j];
/******/ 						idx = module.children.indexOf(dependency);
/******/ 						if (idx >= 0) module.children.splice(idx, 1);
/******/ 					}
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// Not in "apply" phase
/******/ 		hotSetStatus("apply");
/******/
/******/ 		hotCurrentHash = hotUpdateNewHash;
/******/
/******/ 		// insert new code
/******/ 		for (moduleId in appliedUpdate) {
/******/ 			if (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {
/******/ 				modules[moduleId] = appliedUpdate[moduleId];
/******/ 			}
/******/ 		}
/******/
/******/ 		// call accept handlers
/******/ 		var error = null;
/******/ 		for (moduleId in outdatedDependencies) {
/******/ 			if (
/******/ 				Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
/******/ 			) {
/******/ 				module = installedModules[moduleId];
/******/ 				if (module) {
/******/ 					moduleOutdatedDependencies = outdatedDependencies[moduleId];
/******/ 					var callbacks = [];
/******/ 					for (i = 0; i < moduleOutdatedDependencies.length; i++) {
/******/ 						dependency = moduleOutdatedDependencies[i];
/******/ 						cb = module.hot._acceptedDependencies[dependency];
/******/ 						if (cb) {
/******/ 							if (callbacks.indexOf(cb) !== -1) continue;
/******/ 							callbacks.push(cb);
/******/ 						}
/******/ 					}
/******/ 					for (i = 0; i < callbacks.length; i++) {
/******/ 						cb = callbacks[i];
/******/ 						try {
/******/ 							cb(moduleOutdatedDependencies);
/******/ 						} catch (err) {
/******/ 							if (options.onErrored) {
/******/ 								options.onErrored({
/******/ 									type: "accept-errored",
/******/ 									moduleId: moduleId,
/******/ 									dependencyId: moduleOutdatedDependencies[i],
/******/ 									error: err
/******/ 								});
/******/ 							}
/******/ 							if (!options.ignoreErrored) {
/******/ 								if (!error) error = err;
/******/ 							}
/******/ 						}
/******/ 					}
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// Load self accepted modules
/******/ 		for (i = 0; i < outdatedSelfAcceptedModules.length; i++) {
/******/ 			var item = outdatedSelfAcceptedModules[i];
/******/ 			moduleId = item.module;
/******/ 			hotCurrentParents = [moduleId];
/******/ 			try {
/******/ 				__nested_webpack_require_25879__(moduleId);
/******/ 			} catch (err) {
/******/ 				if (typeof item.errorHandler === "function") {
/******/ 					try {
/******/ 						item.errorHandler(err);
/******/ 					} catch (err2) {
/******/ 						if (options.onErrored) {
/******/ 							options.onErrored({
/******/ 								type: "self-accept-error-handler-errored",
/******/ 								moduleId: moduleId,
/******/ 								error: err2,
/******/ 								originalError: err
/******/ 							});
/******/ 						}
/******/ 						if (!options.ignoreErrored) {
/******/ 							if (!error) error = err2;
/******/ 						}
/******/ 						if (!error) error = err;
/******/ 					}
/******/ 				} else {
/******/ 					if (options.onErrored) {
/******/ 						options.onErrored({
/******/ 							type: "self-accept-errored",
/******/ 							moduleId: moduleId,
/******/ 							error: err
/******/ 						});
/******/ 					}
/******/ 					if (!options.ignoreErrored) {
/******/ 						if (!error) error = err;
/******/ 					}
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// handle errors in accept handlers and self accepted module load
/******/ 		if (error) {
/******/ 			hotSetStatus("fail");
/******/ 			return Promise.reject(error);
/******/ 		}
/******/
/******/ 		hotSetStatus("idle");
/******/ 		return new Promise(function(resolve) {
/******/ 			resolve(outdatedModules);
/******/ 		});
/******/ 	}
/******/
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __nested_webpack_require_25879__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {},
/******/ 			hot: hotCreateModule(moduleId),
/******/ 			parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),
/******/ 			children: []
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__nested_webpack_require_25879__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__nested_webpack_require_25879__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__nested_webpack_require_25879__.d = function(exports, name, getter) {
/******/ 		if(!__nested_webpack_require_25879__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__nested_webpack_require_25879__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__nested_webpack_require_25879__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __nested_webpack_require_25879__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__nested_webpack_require_25879__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_25879__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__nested_webpack_require_25879__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__nested_webpack_require_25879__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__nested_webpack_require_25879__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__nested_webpack_require_25879__.p = "";
/******/
/******/ 	// __webpack_hash__
/******/ 	__nested_webpack_require_25879__.h = function() { return hotCurrentHash; };
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return hotCreateRequire("./index.js")(__nested_webpack_require_25879__.s = "./index.js");
/******/ })
/************************************************************************/
/******/ ({

/***/ "./canvasToPixel.js":
/*!**************************!*\
  !*** ./canvasToPixel.js ***!
  \**************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_29828__) {

"use strict";
__nested_webpack_require_29828__.r(__nested_webpack_exports__);
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_29828__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _internal_getTransform_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_29828__(/*! ./internal/getTransform.js */ "./internal/getTransform.js");


/**
 * Converts a point in the canvas coordinate system to the pixel coordinate system
 * system.  This can be used to reset tools' image coordinates after modifications
 * have been made in canvas space (e.g. moving a tool by a few cm, independent of
 * image resolution).
 *
 * @param {HTMLElement} element The Cornerstone element within which the input point lies
 * @param {{x: Number, y: Number}} pt The input point in the canvas coordinate system
 *
 * @returns {{x: Number, y: Number}} The transformed point in the pixel coordinate system
 * @memberof PixelCoordinateSystem
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, pt) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
  var transform = Object(_internal_getTransform_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement);
  transform.invert();
  return transform.transformPoint(pt.x, pt.y);
});

/***/ }),

/***/ "./colors/colormap.js":
/*!****************************!*\
  !*** ./colors/colormap.js ***!
  \****************************/
/*! exports provided: getColormapsList, getColormap */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_31438__) {

"use strict";
__nested_webpack_require_31438__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_31438__.d(__nested_webpack_exports__, "getColormapsList", function() { return getColormapsList; });
/* harmony export (binding) */ __nested_webpack_require_31438__.d(__nested_webpack_exports__, "getColormap", function() { return getColormap; });
/* harmony import */ var _lookupTable_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_31438__(/*! ./lookupTable.js */ "./colors/lookupTable.js");

var COLOR_TRANSPARENT = [0, 0, 0, 0]; // Colormaps
//
// Hot Iron, PET, Hot Metal Blue and PET 20 Step are color palettes
// Defined by the DICOM standard
// http://dicom.nema.org/dicom/2013/output/chtml/part06/chapter_B.html
//
// All Linear Segmented Colormaps were copied from matplotlib
// https://github.com/stefanv/matplotlib/blob/master/lib/matplotlib/_cm.py

var colormapsData = {
  hotIron: {
    name: 'Hot Iron',
    numOfColors: 256,
    colors: [[0, 0, 0, 255], [2, 0, 0, 255], [4, 0, 0, 255], [6, 0, 0, 255], [8, 0, 0, 255], [10, 0, 0, 255], [12, 0, 0, 255], [14, 0, 0, 255], [16, 0, 0, 255], [18, 0, 0, 255], [20, 0, 0, 255], [22, 0, 0, 255], [24, 0, 0, 255], [26, 0, 0, 255], [28, 0, 0, 255], [30, 0, 0, 255], [32, 0, 0, 255], [34, 0, 0, 255], [36, 0, 0, 255], [38, 0, 0, 255], [40, 0, 0, 255], [42, 0, 0, 255], [44, 0, 0, 255], [46, 0, 0, 255], [48, 0, 0, 255], [50, 0, 0, 255], [52, 0, 0, 255], [54, 0, 0, 255], [56, 0, 0, 255], [58, 0, 0, 255], [60, 0, 0, 255], [62, 0, 0, 255], [64, 0, 0, 255], [66, 0, 0, 255], [68, 0, 0, 255], [70, 0, 0, 255], [72, 0, 0, 255], [74, 0, 0, 255], [76, 0, 0, 255], [78, 0, 0, 255], [80, 0, 0, 255], [82, 0, 0, 255], [84, 0, 0, 255], [86, 0, 0, 255], [88, 0, 0, 255], [90, 0, 0, 255], [92, 0, 0, 255], [94, 0, 0, 255], [96, 0, 0, 255], [98, 0, 0, 255], [100, 0, 0, 255], [102, 0, 0, 255], [104, 0, 0, 255], [106, 0, 0, 255], [108, 0, 0, 255], [110, 0, 0, 255], [112, 0, 0, 255], [114, 0, 0, 255], [116, 0, 0, 255], [118, 0, 0, 255], [120, 0, 0, 255], [122, 0, 0, 255], [124, 0, 0, 255], [126, 0, 0, 255], [128, 0, 0, 255], [130, 0, 0, 255], [132, 0, 0, 255], [134, 0, 0, 255], [136, 0, 0, 255], [138, 0, 0, 255], [140, 0, 0, 255], [142, 0, 0, 255], [144, 0, 0, 255], [146, 0, 0, 255], [148, 0, 0, 255], [150, 0, 0, 255], [152, 0, 0, 255], [154, 0, 0, 255], [156, 0, 0, 255], [158, 0, 0, 255], [160, 0, 0, 255], [162, 0, 0, 255], [164, 0, 0, 255], [166, 0, 0, 255], [168, 0, 0, 255], [170, 0, 0, 255], [172, 0, 0, 255], [174, 0, 0, 255], [176, 0, 0, 255], [178, 0, 0, 255], [180, 0, 0, 255], [182, 0, 0, 255], [184, 0, 0, 255], [186, 0, 0, 255], [188, 0, 0, 255], [190, 0, 0, 255], [192, 0, 0, 255], [194, 0, 0, 255], [196, 0, 0, 255], [198, 0, 0, 255], [200, 0, 0, 255], [202, 0, 0, 255], [204, 0, 0, 255], [206, 0, 0, 255], [208, 0, 0, 255], [210, 0, 0, 255], [212, 0, 0, 255], [214, 0, 0, 255], [216, 0, 0, 255], [218, 0, 0, 255], [220, 0, 0, 255], [222, 0, 0, 255], [224, 0, 0, 255], [226, 0, 0, 255], [228, 0, 0, 255], [230, 0, 0, 255], [232, 0, 0, 255], [234, 0, 0, 255], [236, 0, 0, 255], [238, 0, 0, 255], [240, 0, 0, 255], [242, 0, 0, 255], [244, 0, 0, 255], [246, 0, 0, 255], [248, 0, 0, 255], [250, 0, 0, 255], [252, 0, 0, 255], [254, 0, 0, 255], [255, 0, 0, 255], [255, 2, 0, 255], [255, 4, 0, 255], [255, 6, 0, 255], [255, 8, 0, 255], [255, 10, 0, 255], [255, 12, 0, 255], [255, 14, 0, 255], [255, 16, 0, 255], [255, 18, 0, 255], [255, 20, 0, 255], [255, 22, 0, 255], [255, 24, 0, 255], [255, 26, 0, 255], [255, 28, 0, 255], [255, 30, 0, 255], [255, 32, 0, 255], [255, 34, 0, 255], [255, 36, 0, 255], [255, 38, 0, 255], [255, 40, 0, 255], [255, 42, 0, 255], [255, 44, 0, 255], [255, 46, 0, 255], [255, 48, 0, 255], [255, 50, 0, 255], [255, 52, 0, 255], [255, 54, 0, 255], [255, 56, 0, 255], [255, 58, 0, 255], [255, 60, 0, 255], [255, 62, 0, 255], [255, 64, 0, 255], [255, 66, 0, 255], [255, 68, 0, 255], [255, 70, 0, 255], [255, 72, 0, 255], [255, 74, 0, 255], [255, 76, 0, 255], [255, 78, 0, 255], [255, 80, 0, 255], [255, 82, 0, 255], [255, 84, 0, 255], [255, 86, 0, 255], [255, 88, 0, 255], [255, 90, 0, 255], [255, 92, 0, 255], [255, 94, 0, 255], [255, 96, 0, 255], [255, 98, 0, 255], [255, 100, 0, 255], [255, 102, 0, 255], [255, 104, 0, 255], [255, 106, 0, 255], [255, 108, 0, 255], [255, 110, 0, 255], [255, 112, 0, 255], [255, 114, 0, 255], [255, 116, 0, 255], [255, 118, 0, 255], [255, 120, 0, 255], [255, 122, 0, 255], [255, 124, 0, 255], [255, 126, 0, 255], [255, 128, 4, 255], [255, 130, 8, 255], [255, 132, 12, 255], [255, 134, 16, 255], [255, 136, 20, 255], [255, 138, 24, 255], [255, 140, 28, 255], [255, 142, 32, 255], [255, 144, 36, 255], [255, 146, 40, 255], [255, 148, 44, 255], [255, 150, 48, 255], [255, 152, 52, 255], [255, 154, 56, 255], [255, 156, 60, 255], [255, 158, 64, 255], [255, 160, 68, 255], [255, 162, 72, 255], [255, 164, 76, 255], [255, 166, 80, 255], [255, 168, 84, 255], [255, 170, 88, 255], [255, 172, 92, 255], [255, 174, 96, 255], [255, 176, 100, 255], [255, 178, 104, 255], [255, 180, 108, 255], [255, 182, 112, 255], [255, 184, 116, 255], [255, 186, 120, 255], [255, 188, 124, 255], [255, 190, 128, 255], [255, 192, 132, 255], [255, 194, 136, 255], [255, 196, 140, 255], [255, 198, 144, 255], [255, 200, 148, 255], [255, 202, 152, 255], [255, 204, 156, 255], [255, 206, 160, 255], [255, 208, 164, 255], [255, 210, 168, 255], [255, 212, 172, 255], [255, 214, 176, 255], [255, 216, 180, 255], [255, 218, 184, 255], [255, 220, 188, 255], [255, 222, 192, 255], [255, 224, 196, 255], [255, 226, 200, 255], [255, 228, 204, 255], [255, 230, 208, 255], [255, 232, 212, 255], [255, 234, 216, 255], [255, 236, 220, 255], [255, 238, 224, 255], [255, 240, 228, 255], [255, 242, 232, 255], [255, 244, 236, 255], [255, 246, 240, 255], [255, 248, 244, 255], [255, 250, 248, 255], [255, 252, 252, 255], [255, 255, 255, 255]]
  },
  pet: {
    name: 'PET',
    numColors: 256,
    colors: [[0, 0, 0, 255], [0, 2, 1, 255], [0, 4, 3, 255], [0, 6, 5, 255], [0, 8, 7, 255], [0, 10, 9, 255], [0, 12, 11, 255], [0, 14, 13, 255], [0, 16, 15, 255], [0, 18, 17, 255], [0, 20, 19, 255], [0, 22, 21, 255], [0, 24, 23, 255], [0, 26, 25, 255], [0, 28, 27, 255], [0, 30, 29, 255], [0, 32, 31, 255], [0, 34, 33, 255], [0, 36, 35, 255], [0, 38, 37, 255], [0, 40, 39, 255], [0, 42, 41, 255], [0, 44, 43, 255], [0, 46, 45, 255], [0, 48, 47, 255], [0, 50, 49, 255], [0, 52, 51, 255], [0, 54, 53, 255], [0, 56, 55, 255], [0, 58, 57, 255], [0, 60, 59, 255], [0, 62, 61, 255], [0, 65, 63, 255], [0, 67, 65, 255], [0, 69, 67, 255], [0, 71, 69, 255], [0, 73, 71, 255], [0, 75, 73, 255], [0, 77, 75, 255], [0, 79, 77, 255], [0, 81, 79, 255], [0, 83, 81, 255], [0, 85, 83, 255], [0, 87, 85, 255], [0, 89, 87, 255], [0, 91, 89, 255], [0, 93, 91, 255], [0, 95, 93, 255], [0, 97, 95, 255], [0, 99, 97, 255], [0, 101, 99, 255], [0, 103, 101, 255], [0, 105, 103, 255], [0, 107, 105, 255], [0, 109, 107, 255], [0, 111, 109, 255], [0, 113, 111, 255], [0, 115, 113, 255], [0, 117, 115, 255], [0, 119, 117, 255], [0, 121, 119, 255], [0, 123, 121, 255], [0, 125, 123, 255], [0, 128, 125, 255], [1, 126, 127, 255], [3, 124, 129, 255], [5, 122, 131, 255], [7, 120, 133, 255], [9, 118, 135, 255], [11, 116, 137, 255], [13, 114, 139, 255], [15, 112, 141, 255], [17, 110, 143, 255], [19, 108, 145, 255], [21, 106, 147, 255], [23, 104, 149, 255], [25, 102, 151, 255], [27, 100, 153, 255], [29, 98, 155, 255], [31, 96, 157, 255], [33, 94, 159, 255], [35, 92, 161, 255], [37, 90, 163, 255], [39, 88, 165, 255], [41, 86, 167, 255], [43, 84, 169, 255], [45, 82, 171, 255], [47, 80, 173, 255], [49, 78, 175, 255], [51, 76, 177, 255], [53, 74, 179, 255], [55, 72, 181, 255], [57, 70, 183, 255], [59, 68, 185, 255], [61, 66, 187, 255], [63, 64, 189, 255], [65, 63, 191, 255], [67, 61, 193, 255], [69, 59, 195, 255], [71, 57, 197, 255], [73, 55, 199, 255], [75, 53, 201, 255], [77, 51, 203, 255], [79, 49, 205, 255], [81, 47, 207, 255], [83, 45, 209, 255], [85, 43, 211, 255], [86, 41, 213, 255], [88, 39, 215, 255], [90, 37, 217, 255], [92, 35, 219, 255], [94, 33, 221, 255], [96, 31, 223, 255], [98, 29, 225, 255], [100, 27, 227, 255], [102, 25, 229, 255], [104, 23, 231, 255], [106, 21, 233, 255], [108, 19, 235, 255], [110, 17, 237, 255], [112, 15, 239, 255], [114, 13, 241, 255], [116, 11, 243, 255], [118, 9, 245, 255], [120, 7, 247, 255], [122, 5, 249, 255], [124, 3, 251, 255], [126, 1, 253, 255], [128, 0, 255, 255], [130, 2, 252, 255], [132, 4, 248, 255], [134, 6, 244, 255], [136, 8, 240, 255], [138, 10, 236, 255], [140, 12, 232, 255], [142, 14, 228, 255], [144, 16, 224, 255], [146, 18, 220, 255], [148, 20, 216, 255], [150, 22, 212, 255], [152, 24, 208, 255], [154, 26, 204, 255], [156, 28, 200, 255], [158, 30, 196, 255], [160, 32, 192, 255], [162, 34, 188, 255], [164, 36, 184, 255], [166, 38, 180, 255], [168, 40, 176, 255], [170, 42, 172, 255], [171, 44, 168, 255], [173, 46, 164, 255], [175, 48, 160, 255], [177, 50, 156, 255], [179, 52, 152, 255], [181, 54, 148, 255], [183, 56, 144, 255], [185, 58, 140, 255], [187, 60, 136, 255], [189, 62, 132, 255], [191, 64, 128, 255], [193, 66, 124, 255], [195, 68, 120, 255], [197, 70, 116, 255], [199, 72, 112, 255], [201, 74, 108, 255], [203, 76, 104, 255], [205, 78, 100, 255], [207, 80, 96, 255], [209, 82, 92, 255], [211, 84, 88, 255], [213, 86, 84, 255], [215, 88, 80, 255], [217, 90, 76, 255], [219, 92, 72, 255], [221, 94, 68, 255], [223, 96, 64, 255], [225, 98, 60, 255], [227, 100, 56, 255], [229, 102, 52, 255], [231, 104, 48, 255], [233, 106, 44, 255], [235, 108, 40, 255], [237, 110, 36, 255], [239, 112, 32, 255], [241, 114, 28, 255], [243, 116, 24, 255], [245, 118, 20, 255], [247, 120, 16, 255], [249, 122, 12, 255], [251, 124, 8, 255], [253, 126, 4, 255], [255, 128, 0, 255], [255, 130, 4, 255], [255, 132, 8, 255], [255, 134, 12, 255], [255, 136, 16, 255], [255, 138, 20, 255], [255, 140, 24, 255], [255, 142, 28, 255], [255, 144, 32, 255], [255, 146, 36, 255], [255, 148, 40, 255], [255, 150, 44, 255], [255, 152, 48, 255], [255, 154, 52, 255], [255, 156, 56, 255], [255, 158, 60, 255], [255, 160, 64, 255], [255, 162, 68, 255], [255, 164, 72, 255], [255, 166, 76, 255], [255, 168, 80, 255], [255, 170, 85, 255], [255, 172, 89, 255], [255, 174, 93, 255], [255, 176, 97, 255], [255, 178, 101, 255], [255, 180, 105, 255], [255, 182, 109, 255], [255, 184, 113, 255], [255, 186, 117, 255], [255, 188, 121, 255], [255, 190, 125, 255], [255, 192, 129, 255], [255, 194, 133, 255], [255, 196, 137, 255], [255, 198, 141, 255], [255, 200, 145, 255], [255, 202, 149, 255], [255, 204, 153, 255], [255, 206, 157, 255], [255, 208, 161, 255], [255, 210, 165, 255], [255, 212, 170, 255], [255, 214, 174, 255], [255, 216, 178, 255], [255, 218, 182, 255], [255, 220, 186, 255], [255, 222, 190, 255], [255, 224, 194, 255], [255, 226, 198, 255], [255, 228, 202, 255], [255, 230, 206, 255], [255, 232, 210, 255], [255, 234, 214, 255], [255, 236, 218, 255], [255, 238, 222, 255], [255, 240, 226, 255], [255, 242, 230, 255], [255, 244, 234, 255], [255, 246, 238, 255], [255, 248, 242, 255], [255, 250, 246, 255], [255, 252, 250, 255], [255, 255, 255, 255]]
  },
  hotMetalBlue: {
    name: 'Hot Metal Blue',
    numColors: 256,
    colors: [[0, 0, 0, 255], [0, 0, 2, 255], [0, 0, 4, 255], [0, 0, 6, 255], [0, 0, 8, 255], [0, 0, 10, 255], [0, 0, 12, 255], [0, 0, 14, 255], [0, 0, 16, 255], [0, 0, 17, 255], [0, 0, 19, 255], [0, 0, 21, 255], [0, 0, 23, 255], [0, 0, 25, 255], [0, 0, 27, 255], [0, 0, 29, 255], [0, 0, 31, 255], [0, 0, 33, 255], [0, 0, 35, 255], [0, 0, 37, 255], [0, 0, 39, 255], [0, 0, 41, 255], [0, 0, 43, 255], [0, 0, 45, 255], [0, 0, 47, 255], [0, 0, 49, 255], [0, 0, 51, 255], [0, 0, 53, 255], [0, 0, 55, 255], [0, 0, 57, 255], [0, 0, 59, 255], [0, 0, 61, 255], [0, 0, 63, 255], [0, 0, 65, 255], [0, 0, 67, 255], [0, 0, 69, 255], [0, 0, 71, 255], [0, 0, 73, 255], [0, 0, 75, 255], [0, 0, 77, 255], [0, 0, 79, 255], [0, 0, 81, 255], [0, 0, 83, 255], [0, 0, 84, 255], [0, 0, 86, 255], [0, 0, 88, 255], [0, 0, 90, 255], [0, 0, 92, 255], [0, 0, 94, 255], [0, 0, 96, 255], [0, 0, 98, 255], [0, 0, 100, 255], [0, 0, 102, 255], [0, 0, 104, 255], [0, 0, 106, 255], [0, 0, 108, 255], [0, 0, 110, 255], [0, 0, 112, 255], [0, 0, 114, 255], [0, 0, 116, 255], [0, 0, 117, 255], [0, 0, 119, 255], [0, 0, 121, 255], [0, 0, 123, 255], [0, 0, 125, 255], [0, 0, 127, 255], [0, 0, 129, 255], [0, 0, 131, 255], [0, 0, 133, 255], [0, 0, 135, 255], [0, 0, 137, 255], [0, 0, 139, 255], [0, 0, 141, 255], [0, 0, 143, 255], [0, 0, 145, 255], [0, 0, 147, 255], [0, 0, 149, 255], [0, 0, 151, 255], [0, 0, 153, 255], [0, 0, 155, 255], [0, 0, 157, 255], [0, 0, 159, 255], [0, 0, 161, 255], [0, 0, 163, 255], [0, 0, 165, 255], [0, 0, 167, 255], [3, 0, 169, 255], [6, 0, 171, 255], [9, 0, 173, 255], [12, 0, 175, 255], [15, 0, 177, 255], [18, 0, 179, 255], [21, 0, 181, 255], [24, 0, 183, 255], [26, 0, 184, 255], [29, 0, 186, 255], [32, 0, 188, 255], [35, 0, 190, 255], [38, 0, 192, 255], [41, 0, 194, 255], [44, 0, 196, 255], [47, 0, 198, 255], [50, 0, 200, 255], [52, 0, 197, 255], [55, 0, 194, 255], [57, 0, 191, 255], [59, 0, 188, 255], [62, 0, 185, 255], [64, 0, 182, 255], [66, 0, 179, 255], [69, 0, 176, 255], [71, 0, 174, 255], [74, 0, 171, 255], [76, 0, 168, 255], [78, 0, 165, 255], [81, 0, 162, 255], [83, 0, 159, 255], [85, 0, 156, 255], [88, 0, 153, 255], [90, 0, 150, 255], [93, 2, 144, 255], [96, 4, 138, 255], [99, 6, 132, 255], [102, 8, 126, 255], [105, 9, 121, 255], [108, 11, 115, 255], [111, 13, 109, 255], [114, 15, 103, 255], [116, 17, 97, 255], [119, 19, 91, 255], [122, 21, 85, 255], [125, 23, 79, 255], [128, 24, 74, 255], [131, 26, 68, 255], [134, 28, 62, 255], [137, 30, 56, 255], [140, 32, 50, 255], [143, 34, 47, 255], [146, 36, 44, 255], [149, 38, 41, 255], [152, 40, 38, 255], [155, 41, 35, 255], [158, 43, 32, 255], [161, 45, 29, 255], [164, 47, 26, 255], [166, 49, 24, 255], [169, 51, 21, 255], [172, 53, 18, 255], [175, 55, 15, 255], [178, 56, 12, 255], [181, 58, 9, 255], [184, 60, 6, 255], [187, 62, 3, 255], [190, 64, 0, 255], [194, 66, 0, 255], [198, 68, 0, 255], [201, 70, 0, 255], [205, 72, 0, 255], [209, 73, 0, 255], [213, 75, 0, 255], [217, 77, 0, 255], [221, 79, 0, 255], [224, 81, 0, 255], [228, 83, 0, 255], [232, 85, 0, 255], [236, 87, 0, 255], [240, 88, 0, 255], [244, 90, 0, 255], [247, 92, 0, 255], [251, 94, 0, 255], [255, 96, 0, 255], [255, 98, 3, 255], [255, 100, 6, 255], [255, 102, 9, 255], [255, 104, 12, 255], [255, 105, 15, 255], [255, 107, 18, 255], [255, 109, 21, 255], [255, 111, 24, 255], [255, 113, 26, 255], [255, 115, 29, 255], [255, 117, 32, 255], [255, 119, 35, 255], [255, 120, 38, 255], [255, 122, 41, 255], [255, 124, 44, 255], [255, 126, 47, 255], [255, 128, 50, 255], [255, 130, 53, 255], [255, 132, 56, 255], [255, 134, 59, 255], [255, 136, 62, 255], [255, 137, 65, 255], [255, 139, 68, 255], [255, 141, 71, 255], [255, 143, 74, 255], [255, 145, 76, 255], [255, 147, 79, 255], [255, 149, 82, 255], [255, 151, 85, 255], [255, 152, 88, 255], [255, 154, 91, 255], [255, 156, 94, 255], [255, 158, 97, 255], [255, 160, 100, 255], [255, 162, 103, 255], [255, 164, 106, 255], [255, 166, 109, 255], [255, 168, 112, 255], [255, 169, 115, 255], [255, 171, 118, 255], [255, 173, 121, 255], [255, 175, 124, 255], [255, 177, 126, 255], [255, 179, 129, 255], [255, 181, 132, 255], [255, 183, 135, 255], [255, 184, 138, 255], [255, 186, 141, 255], [255, 188, 144, 255], [255, 190, 147, 255], [255, 192, 150, 255], [255, 194, 153, 255], [255, 196, 156, 255], [255, 198, 159, 255], [255, 200, 162, 255], [255, 201, 165, 255], [255, 203, 168, 255], [255, 205, 171, 255], [255, 207, 174, 255], [255, 209, 176, 255], [255, 211, 179, 255], [255, 213, 182, 255], [255, 215, 185, 255], [255, 216, 188, 255], [255, 218, 191, 255], [255, 220, 194, 255], [255, 222, 197, 255], [255, 224, 200, 255], [255, 226, 203, 255], [255, 228, 206, 255], [255, 229, 210, 255], [255, 231, 213, 255], [255, 233, 216, 255], [255, 235, 219, 255], [255, 237, 223, 255], [255, 239, 226, 255], [255, 240, 229, 255], [255, 242, 232, 255], [255, 244, 236, 255], [255, 246, 239, 255], [255, 248, 242, 255], [255, 250, 245, 255], [255, 251, 249, 255], [255, 253, 252, 255], [255, 255, 255, 255]]
  },
  pet20Step: {
    name: 'PET 20 Step',
    numColors: 256,
    colors: [[0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]
  },
  gray: {
    name: 'Gray',
    numColors: 256,
    gamma: 1,
    segmentedData: {
      red: [[0, 0, 0], [1, 1, 1]],
      green: [[0, 0, 0], [1, 1, 1]],
      blue: [[0, 0, 0], [1, 1, 1]]
    }
  },
  jet: {
    name: 'Jet',
    numColors: 256,
    gamma: 1,
    segmentedData: {
      red: [[0, 0, 0], [0.35, 0, 0], [0.66, 1, 1], [0.89, 1, 1], [1, 0.5, 0.5]],
      green: [[0, 0, 0], [0.125, 0, 0], [0.375, 1, 1], [0.64, 1, 1], [0.91, 0, 0], [1, 0, 0]],
      blue: [[0, 0.5, 0.5], [0.11, 1, 1], [0.34, 1, 1], [0.65, 0, 0], [1, 0, 0]]
    }
  },
  hsv: {
    name: 'HSV',
    numColors: 256,
    gamma: 1,
    segmentedData: {
      red: [[0, 1, 1], [0.158730, 1, 1], [0.174603, 0.968750, 0.968750], [0.333333, 0.031250, 0.031250], [0.349206, 0, 0], [0.666667, 0, 0], [0.682540, 0.031250, 0.031250], [0.841270, 0.968750, 0.968750], [0.857143, 1, 1], [1, 1, 1]],
      green: [[0, 0, 0], [0.158730, 0.937500, 0.937500], [0.174603, 1, 1], [0.507937, 1, 1], [0.666667, 0.062500, 0.062500], [0.682540, 0, 0], [1, 0, 0]],
      blue: [[0, 0, 0], [0.333333, 0, 0], [0.349206, 0.062500, 0.062500], [0.507937, 1, 1], [0.841270, 1, 1], [0.857143, 0.937500, 0.937500], [1, 0.09375, 0.09375]]
    }
  },
  hot: {
    name: 'Hot',
    numColors: 256,
    gamma: 1,
    segmentedData: {
      red: [[0, 0.0416, 0.0416], [0.365079, 1, 1], [1, 1, 1]],
      green: [[0, 0, 0], [0.365079, 0, 0], [0.746032, 1, 1], [1, 1, 1]],
      blue: [[0, 0, 0], [0.746032, 0, 0], [1, 1, 1]]
    }
  },
  cool: {
    name: 'Cool',
    numColors: 256,
    gamma: 1,
    segmentedData: {
      red: [[0, 0, 0], [1, 1, 1]],
      green: [[0, 1, 1], [1, 0, 0]],
      blue: [[0, 1, 1], [1, 1, 1]]
    }
  },
  spring: {
    name: 'Spring',
    numColors: 256,
    gamma: 1,
    segmentedData: {
      red: [[0, 1, 1], [1, 1, 1]],
      green: [[0, 0, 0], [1, 1, 1]],
      blue: [[0, 1, 1], [1, 0, 0]]
    }
  },
  summer: {
    name: 'Summer',
    numColors: 256,
    gamma: 1,
    segmentedData: {
      red: [[0, 0, 0], [1, 1, 1]],
      green: [[0, 0.5, 0.5], [1, 1, 1]],
      blue: [[0, 0.4, 0.4], [1, 0.4, 0.4]]
    }
  },
  autumn: {
    name: 'Autumn',
    numColors: 256,
    gamma: 1,
    segmentedData: {
      red: [[0, 1, 1], [1, 1, 1]],
      green: [[0, 0, 0], [1, 1, 1]],
      blue: [[0, 0, 0], [1, 0, 0]]
    }
  },
  winter: {
    name: 'Winter',
    numColors: 256,
    gamma: 1,
    segmentedData: {
      red: [[0, 0, 0], [1, 0, 0]],
      green: [[0, 0, 0], [1, 1, 1]],
      blue: [[0, 1, 1], [1, 0.5, 0.5]]
    }
  },
  bone: {
    name: 'Bone',
    numColors: 256,
    gamma: 1,
    segmentedData: {
      red: [[0, 0, 0], [0.746032, 0.652778, 0.652778], [1, 1, 1]],
      green: [[0, 0, 0], [0.365079, 0.319444, 0.319444], [0.746032, 0.777778, 0.777778], [1, 1, 1]],
      blue: [[0, 0, 0], [0.365079, 0.444444, 0.444444], [1, 1, 1]]
    }
  },
  copper: {
    name: 'Copper',
    numColors: 256,
    gamma: 1,
    segmentedData: {
      red: [[0, 0, 0], [0.809524, 1, 1], [1, 1, 1]],
      green: [[0, 0, 0], [1, 0.7812, 0.7812]],
      blue: [[0, 0, 0], [1, 0.4975, 0.4975]]
    }
  },
  spectral: {
    name: 'Spectral',
    numColors: 256,
    gamma: 1,
    segmentedData: {
      red: [[0, 0, 0], [0.05, 0.4667, 0.4667], [0.10, 0.5333, 0.5333], [0.15, 0, 0], [0.20, 0, 0], [0.25, 0, 0], [0.30, 0, 0], [0.35, 0, 0], [0.40, 0, 0], [0.45, 0, 0], [0.50, 0, 0], [0.55, 0, 0], [0.60, 0, 0], [0.65, 0.7333, 0.7333], [0.70, 0.9333, 0.9333], [0.75, 1, 1], [0.80, 1, 1], [0.85, 1, 1], [0.90, 0.8667, 0.8667], [0.95, 0.80, 0.80], [1, 0.80, 0.80]],
      green: [[0, 0, 0], [0.05, 0, 0], [0.10, 0, 0], [0.15, 0, 0], [0.20, 0, 0], [0.25, 0.4667, 0.4667], [0.30, 0.6000, 0.6000], [0.35, 0.6667, 0.6667], [0.40, 0.6667, 0.6667], [0.45, 0.6000, 0.6000], [0.50, 0.7333, 0.7333], [0.55, 0.8667, 0.8667], [0.60, 1, 1], [0.65, 1, 1], [0.70, 0.9333, 0.9333], [0.75, 0.8000, 0.8000], [0.80, 0.6000, 0.6000], [0.85, 0, 0], [0.90, 0, 0], [0.95, 0, 0], [1, 0.80, 0.80]],
      blue: [[0, 0, 0], [0.05, 0.5333, 0.5333], [0.10, 0.6000, 0.6000], [0.15, 0.6667, 0.6667], [0.20, 0.8667, 0.8667], [0.25, 0.8667, 0.8667], [0.30, 0.8667, 0.8667], [0.35, 0.6667, 0.6667], [0.40, 0.5333, 0.5333], [0.45, 0, 0], [0.5, 0, 0], [0.55, 0, 0], [0.60, 0, 0], [0.65, 0, 0], [0.70, 0, 0], [0.75, 0, 0], [0.80, 0, 0], [0.85, 0, 0], [0.90, 0, 0], [0.95, 0, 0], [1, 0.80, 0.80]]
    }
  },
  coolwarm: {
    name: 'CoolWarm',
    numColors: 256,
    gamma: 1,
    segmentedData: {
      red: [[0, 0.2298057, 0.2298057], [0.03125, 0.26623388, 0.26623388], [0.0625, 0.30386891, 0.30386891], [0.09375, 0.342804478, 0.342804478], [0.125, 0.38301334, 0.38301334], [0.15625, 0.424369608, 0.424369608], [0.1875, 0.46666708, 0.46666708], [0.21875, 0.509635204, 0.509635204], [0.25, 0.552953156, 0.552953156], [0.28125, 0.596262162, 0.596262162], [0.3125, 0.639176211, 0.639176211], [0.34375, 0.681291281, 0.681291281], [0.375, 0.722193294, 0.722193294], [0.40625, 0.761464949, 0.761464949], [0.4375, 0.798691636, 0.798691636], [0.46875, 0.833466556, 0.833466556], [0.5, 0.865395197, 0.865395197], [0.53125, 0.897787179, 0.897787179], [0.5625, 0.924127593, 0.924127593], [0.59375, 0.944468518, 0.944468518], [0.625, 0.958852946, 0.958852946], [0.65625, 0.96732803, 0.96732803], [0.6875, 0.969954137, 0.969954137], [0.71875, 0.966811177, 0.966811177], [0.75, 0.958003065, 0.958003065], [0.78125, 0.943660866, 0.943660866], [0.8125, 0.923944917, 0.923944917], [0.84375, 0.89904617, 0.89904617], [0.875, 0.869186849, 0.869186849], [0.90625, 0.834620542, 0.834620542], [0.9375, 0.795631745, 0.795631745], [0.96875, 0.752534934, 0.752534934], [1, 0.705673158, 0.705673158]],
      green: [[0, 0.298717966, 0.298717966], [0.03125, 0.353094838, 0.353094838], [0.0625, 0.406535296, 0.406535296], [0.09375, 0.458757618, 0.458757618], [0.125, 0.50941904, 0.50941904], [0.15625, 0.558148092, 0.558148092], [0.1875, 0.604562568, 0.604562568], [0.21875, 0.648280772, 0.648280772], [0.25, 0.688929332, 0.688929332], [0.28125, 0.726149107, 0.726149107], [0.3125, 0.759599947, 0.759599947], [0.34375, 0.788964712, 0.788964712], [0.375, 0.813952739, 0.813952739], [0.40625, 0.834302879, 0.834302879], [0.4375, 0.849786142, 0.849786142], [0.46875, 0.860207984, 0.860207984], [0.5, 0.86541021, 0.86541021], [0.53125, 0.848937047, 0.848937047], [0.5625, 0.827384882, 0.827384882], [0.59375, 0.800927443, 0.800927443], [0.625, 0.769767752, 0.769767752], [0.65625, 0.734132809, 0.734132809], [0.6875, 0.694266682, 0.694266682], [0.71875, 0.650421156, 0.650421156], [0.75, 0.602842431, 0.602842431], [0.78125, 0.551750968, 0.551750968], [0.8125, 0.49730856, 0.49730856], [0.84375, 0.439559467, 0.439559467], [0.875, 0.378313092, 0.378313092], [0.90625, 0.312874446, 0.312874446], [0.9375, 0.24128379, 0.24128379], [0.96875, 0.157246067, 0.157246067], [1, 0.01555616, 0.01555616]],
      blue: [[0, 0.753683153, 0.753683153], [0.03125, 0.801466763, 0.801466763], [0.0625, 0.84495867, 0.84495867], [0.09375, 0.883725899, 0.883725899], [0.125, 0.917387822, 0.917387822], [0.15625, 0.945619588, 0.945619588], [0.1875, 0.968154911, 0.968154911], [0.21875, 0.98478814, 0.98478814], [0.25, 0.995375608, 0.995375608], [0.28125, 0.999836203, 0.999836203], [0.3125, 0.998151185, 0.998151185], [0.34375, 0.990363227, 0.990363227], [0.375, 0.976574709, 0.976574709], [0.40625, 0.956945269, 0.956945269], [0.4375, 0.931688648, 0.931688648], [0.46875, 0.901068838, 0.901068838], [0.5, 0.865395561, 0.865395561], [0.53125, 0.820880546, 0.820880546], [0.5625, 0.774508472, 0.774508472], [0.59375, 0.726736146, 0.726736146], [0.625, 0.678007945, 0.678007945], [0.65625, 0.628751763, 0.628751763], [0.6875, 0.579375448, 0.579375448], [0.71875, 0.530263762, 0.530263762], [0.75, 0.481775914, 0.481775914], [0.78125, 0.434243684, 0.434243684], [0.8125, 0.387970225, 0.387970225], [0.84375, 0.343229596, 0.343229596], [0.875, 0.300267182, 0.300267182], [0.90625, 0.259301199, 0.259301199], [0.9375, 0.220525627, 0.220525627], [0.96875, 0.184115123, 0.184115123], [1, 0.150232812, 0.150232812]]
    }
  },
  blues: {
    name: 'Blues',
    numColors: 256,
    gamma: 1,
    segmentedData: {
      red: [[0, 0.9686274528503418, 0.9686274528503418], [0.125, 0.87058824300765991, 0.87058824300765991], [0.25, 0.7764706015586853, 0.7764706015586853], [0.375, 0.61960786581039429, 0.61960786581039429], [0.5, 0.41960784792900085, 0.41960784792900085], [0.625, 0.25882354378700256, 0.25882354378700256], [0.75, 0.12941177189350128, 0.12941177189350128], [0.875, 0.031372550874948502, 0.031372550874948502], [1, 0.031372550874948502, 0.031372550874948502]],
      green: [[0, 0.9843137264251709, 0.9843137264251709], [0.125, 0.92156863212585449, 0.92156863212585449], [0.25, 0.85882353782653809, 0.85882353782653809], [0.375, 0.7921568751335144, 0.7921568751335144], [0.5, 0.68235296010971069, 0.68235296010971069], [0.625, 0.57254904508590698, 0.57254904508590698], [0.75, 0.44313725829124451, 0.44313725829124451], [0.875, 0.31764706969261169, 0.31764706969261169], [1, 0.18823529779911041, 0.18823529779911041]],
      blue: [[0, 1, 1], [0.125, 0.9686274528503418, 0.9686274528503418], [0.25, 0.93725490570068359, 0.93725490570068359], [0.375, 0.88235294818878174, 0.88235294818878174], [0.5, 0.83921569585800171, 0.83921569585800171], [0.625, 0.7764706015586853, 0.7764706015586853], [0.75, 0.70980393886566162, 0.70980393886566162], [0.875, 0.61176472902297974, 0.61176472902297974], [1, 0.41960784792900085, 0.41960784792900085]]
    }
  }
};
/**
 *  Generate linearly spaced vectors
*  http://cens.ioc.ee/local/man/matlab/techdoc/ref/linspace.html
 * @param {Number} a A number representing the first vector
 * @param {Number} b A number representing the second vector
 * @param {Number} n The number of linear spaced vectors to generate
 * @returns {Array} An array of points representing linear spaced vectors.
 * @memberof Colors
 */

function linspace(a, b, n) {
  n = n === null ? 100 : n;
  var increment = (b - a) / (n - 1);
  var vector = [];

  while (n-- > 0) {
    vector.push(a);
    a += increment;
  } // Make sure the last item will always be "b" because most of the
  // Time we'll get numbers like 1.0000000000000002 instead of 1.


  vector[vector.length - 1] = b;
  return vector;
}
/**
 * Returns the "rank/index" of the element in a sorted array if found or the highest index if not. Uses (binary search)
 * @param {Array} array A sorted array to search in
 * @param {any} elem the element in the array to search for
 * @returns {number} The rank/index of the element in the given array
 * @memberof Colors
 */


function getRank(array, elem) {
  var left = 0;
  var right = array.length - 1;

  while (left <= right) {
    var mid = left + Math.floor((right - left) / 2);
    var midElem = array[mid];

    if (midElem === elem) {
      return mid;
    } else if (elem < midElem) {
      right = mid - 1;
    } else {
      left = mid + 1;
    }
  }

  return left;
}
/**
 * Find the indices into a sorted array a such that, if the corresponding elements
 * In v were inserted before the indices, the order of a would be preserved.
 *  http://lagrange.univ-lyon1.fr/docs/numpy/1.11.0/reference/generated/numpy.searchsorted.html
 * @param {Array} inputArray The array where the values will be inserted
 * @param {Array} values An array of the values to be inserted into the inputArray
 * @returns {Array} The indices where elements should be inserted to maintain order.
 * @memberof Colors
 */


function searchSorted(inputArray, values) {
  var i;
  var indexes = [];
  var len = values.length;
  inputArray.sort(function (a, b) {
    return a - b;
  });

  for (i = 0; i < len; i++) {
    indexes[i] = getRank(inputArray, values[i]);
  }

  return indexes;
}
/**
 * Creates an *N* -element 1-d lookup table
 * @param {Number} N The number of elements in the result lookup table
 * @param {Array} data represented by a list of x,y0,y1 mapping correspondences. Each element in this
 * List represents how a value between 0 and 1 (inclusive) represented by x is mapped to
 * A corresponding value between 0 and 1 (inclusive). The two values of y are to allow for
 * Discontinuous mapping functions (say as might be found in a sawtooth) where y0 represents
 * The value of y for values of x <= to that given, and y1 is the value to be used for x >
 * Than that given). The list must start with x=0, end with x=1, and all values of x must be
 * In increasing order. Values between the given mapping points are determined by simple linear
 * Interpolation.
 * @param {any} gamma value denotes a "gamma curve" value which adjusts the brightness
 * at the bottom and top of the map.
 * @returns {any[]} an array "result" where result[x*(N-1)] gives the closest value for
 * Values of x between 0 and 1.
 * @memberof Colors
 */


function makeMappingArray(N, data, gamma) {
  var i;
  var x = [];
  var y0 = [];
  var y1 = [];
  var lut = [];
  gamma = gamma === null ? 1 : gamma;

  for (i = 0; i < data.length; i++) {
    var element = data[i];
    x.push((N - 1) * element[0]);
    y0.push(element[1]);
    y1.push(element[1]);
  }

  var xLinSpace = linspace(0, 1, N);

  for (i = 0; i < N; i++) {
    xLinSpace[i] = (N - 1) * Math.pow(xLinSpace[i], gamma);
  }

  var xLinSpaceIndexes = searchSorted(x, xLinSpace);

  for (i = 1; i < N - 1; i++) {
    var index = xLinSpaceIndexes[i];
    var colorPercent = (xLinSpace[i] - x[index - 1]) / (x[index] - x[index - 1]);
    var colorDelta = y0[index] - y1[index - 1];
    lut[i] = colorPercent * colorDelta + y1[index - 1];
  }

  lut[0] = y1[0];
  lut[N - 1] = y0[data.length - 1];
  return lut;
}
/**
 * Creates a Colormap based on lookup tables using linear segments.
 * @param {{red:Array, green:Array, blue:Array}} segmentedData An object with a red, green and blue entries.
 * Each entry should be a list of x, y0, y1 tuples, forming rows in a table.
 * @param {Number} N The number of elements in the result Colormap
 * @param {any} gamma value denotes a "gamma curve" value which adjusts the brightness
 * at the bottom and top of the Colormap.
 * @returns {Array} The created Colormap object
 * @description The lookup table is generated using linear interpolation for each
 *  Primary color, with the 0-1 domain divided into any number of
 * Segments.
 * https://github.com/stefanv/matplotlib/blob/3f1a23755e86fef97d51e30e106195f34425c9e3/lib/matplotlib/colors.py#L663
 * @memberof Colors
 */


function createLinearSegmentedColormap(segmentedData, N, gamma) {
  var i;
  var lut = [];
  N = N === null ? 256 : N;
  gamma = gamma === null ? 1 : gamma;
  var redLut = makeMappingArray(N, segmentedData.red, gamma);
  var greenLut = makeMappingArray(N, segmentedData.green, gamma);
  var blueLut = makeMappingArray(N, segmentedData.blue, gamma);

  for (i = 0; i < N; i++) {
    var red = Math.round(redLut[i] * 255);
    var green = Math.round(greenLut[i] * 255);
    var blue = Math.round(blueLut[i] * 255);
    var rgba = [red, green, blue, 255];
    lut.push(rgba);
  }

  return lut;
}
/**
 * Return all available colormaps (id and name)
 * @returns {Array<{id,key}>} An array of colormaps with an object containing the "id" and display "name"
 * @memberof Colors
 */


function getColormapsList() {
  var colormaps = [];
  var keys = Object.keys(colormapsData);
  keys.forEach(function (key) {
    if (colormapsData.hasOwnProperty(key)) {
      var colormap = colormapsData[key];
      colormaps.push({
        id: key,
        name: colormap.name
      });
    }
  });
  colormaps.sort(function (a, b) {
    var aName = a.name.toLowerCase();
    var bName = b.name.toLowerCase();

    if (aName === bName) {
      return 0;
    }

    return aName < bName ? -1 : 1;
  });
  return colormaps;
}
/**
 * Return a colorMap object with the provided id and colormapData
 * if the Id matches existent colorMap objects (check colormapsData) the colormapData is ignored.
 * if the colormapData is not empty, the colorMap will be added to the colormapsData list. Otherwise, an empty colorMap object is returned.
 * @param {string} id The ID of the colormap
 * @param {Object} colormapData - An object that can contain a name, numColors, gama, segmentedData and/or colors
 * @returns {*} The Colormap Object
 * @memberof Colors
*/

function getColormap(id, colormapData) {
  var colormap = colormapsData[id];

  if (!colormap) {
    colormap = colormapsData[id] = colormapData || {
      name: '',
      colors: []
    };
  }

  if (!colormap.colors && colormap.segmentedData) {
    colormap.colors = createLinearSegmentedColormap(colormap.segmentedData, colormap.numColors, colormap.gamma);
  }

  return {
    getId: function getId() {
      return id;
    },
    getColorSchemeName: function getColorSchemeName() {
      return colormap.name;
    },
    setColorSchemeName: function setColorSchemeName(name) {
      colormap.name = name;
    },
    getNumberOfColors: function getNumberOfColors() {
      return colormap.colors.length;
    },
    setNumberOfColors: function setNumberOfColors(numColors) {
      while (colormap.colors.length < numColors) {
        colormap.colors.push(COLOR_TRANSPARENT);
      }

      colormap.colors.length = numColors;
    },
    getColor: function getColor(index) {
      if (this.isValidIndex(index)) {
        return colormap.colors[index];
      }

      return COLOR_TRANSPARENT;
    },
    getColorRepeating: function getColorRepeating(index) {
      var numColors = colormap.colors.length;
      index = numColors ? index % numColors : 0;
      return this.getColor(index);
    },
    setColor: function setColor(index, rgba) {
      if (this.isValidIndex(index)) {
        colormap.colors[index] = rgba;
      }
    },
    addColor: function addColor(rgba) {
      colormap.colors.push(rgba);
    },
    insertColor: function insertColor(index, rgba) {
      if (this.isValidIndex(index)) {
        colormap.colors.splice(index, 1, rgba);
      }
    },
    removeColor: function removeColor(index) {
      if (this.isValidIndex(index)) {
        colormap.colors.splice(index, 1);
      }
    },
    clearColors: function clearColors() {
      colormap.colors = [];
    },
    buildLookupTable: function buildLookupTable(lut) {
      if (!lut) {
        return;
      }

      var numColors = colormap.colors.length;
      lut.setNumberOfTableValues(numColors);

      for (var i = 0; i < numColors; i++) {
        lut.setTableValue(i, colormap.colors[i]);
      }
    },
    createLookupTable: function createLookupTable() {
      var lut = new _lookupTable_js__WEBPACK_IMPORTED_MODULE_0__["default"]();
      this.buildLookupTable(lut);
      return lut;
    },
    isValidIndex: function isValidIndex(index) {
      return index >= 0 && index < colormap.colors.length;
    }
  };
}

/***/ }),

/***/ "./colors/index.js":
/*!*************************!*\
  !*** ./colors/index.js ***!
  \*************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_71608__) {

"use strict";
__nested_webpack_require_71608__.r(__nested_webpack_exports__);
/* harmony import */ var _colormap_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_71608__(/*! ./colormap.js */ "./colors/colormap.js");
/* harmony import */ var _lookupTable_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_71608__(/*! ./lookupTable.js */ "./colors/lookupTable.js");


/* harmony default export */ __nested_webpack_exports__["default"] = ({
  getColormap: _colormap_js__WEBPACK_IMPORTED_MODULE_0__["getColormap"],
  getColormapsList: _colormap_js__WEBPACK_IMPORTED_MODULE_0__["getColormapsList"],
  LookupTable: _lookupTable_js__WEBPACK_IMPORTED_MODULE_1__["default"]
});

/***/ }),

/***/ "./colors/lookupTable.js":
/*!*******************************!*\
  !*** ./colors/lookupTable.js ***!
  \*******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_72500__) {

"use strict";
__nested_webpack_require_72500__.r(__nested_webpack_exports__);
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

// This code was created based on vtkLookupTable
// http://www.vtk.org/doc/release/5.0/html/a01697.html
// https://github.com/Kitware/VTK/blob/master/Common/Core/vtkLookupTable.cxx
var BELOW_RANGE_COLOR_INDEX = 0;
var ABOVE_RANGE_COLOR_INDEX = 1;
var NAN_COLOR_INDEX = 2;
/**
 * Converts an HSV  (Hue, Saturation, Value) color to RGB (Red, Green, Blue) color value
 * @param {Number} hue A number representing the hue color value
 * @param {any} sat A number representing the saturation color value
 * @param {any} val A number representing the value color value
 * @returns {Numberp[]} An RGB color array
 */

function HSVToRGB(hue, sat, val) {
  if (hue > 1) {
    throw new Error('HSVToRGB expects hue < 1');
  }

  var rgb = [];

  if (sat === 0) {
    rgb[0] = val;
    rgb[1] = val;
    rgb[2] = val;
    return rgb;
  }

  var hueCase = Math.floor(hue * 6);
  var frac = 6 * hue - hueCase;
  var lx = val * (1 - sat);
  var ly = val * (1 - sat * frac);
  var lz = val * (1 - sat * (1 - frac));

  switch (hueCase) {
    /* 0<hue<1/6 */
    case 0:
    case 6:
      rgb[0] = val;
      rgb[1] = lz;
      rgb[2] = lx;
      break;

    /* 1/6<hue<2/6 */

    case 1:
      rgb[0] = ly;
      rgb[1] = val;
      rgb[2] = lx;
      break;

    /* 2/6<hue<3/6 */

    case 2:
      rgb[0] = lx;
      rgb[1] = val;
      rgb[2] = lz;
      break;

    /* 3/6<hue/4/6 */

    case 3:
      rgb[0] = lx;
      rgb[1] = ly;
      rgb[2] = val;
      break;

    /* 4/6<hue<5/6 */

    case 4:
      rgb[0] = lz;
      rgb[1] = lx;
      rgb[2] = val;
      break;

    /* 5/6<hue<1 */

    case 5:
      rgb[0] = val;
      rgb[1] = lx;
      rgb[2] = ly;
      break;
  }

  return rgb;
}
/**
 * Maps a value to an index in the table
 * @param {Number} v A double value which table index will be returned.
 * @param {any} p An object that contains the Table "Range", the table "MaxIndex",
 * A "Shift" from first value in the table and the table "Scale" value
 * @returns {Number} The mapped index in the table
 * @memberof Colors
 */


function linearIndexLookupMain(v, p) {
  var dIndex; // NOTE: Added Math.floor since values were not integers? Check VTK source

  if (v < p.Range[0]) {
    dIndex = p.MaxIndex + BELOW_RANGE_COLOR_INDEX + 1.5;
  } else if (v > p.Range[1]) {
    dIndex = p.MaxIndex + ABOVE_RANGE_COLOR_INDEX + 1.5;
  } else {
    dIndex = (v + p.Shift) * p.Scale;
  }

  return Math.floor(dIndex);
}
/**
 * Maps scalar values into colors via a lookup table
 * LookupTable is an object that is used by mapper objects to map scalar values into rgba (red-green-blue-alpha transparency) color specification,
 * or rgba into scalar values. The color table can be created by direct insertion of color values, or by specifying hue, saturation, value, and alpha range and generating a table
 */


var LookupTable = /*#__PURE__*/function () {
  /**
   * Creates a default linear LookupTable object with 256 colors.
   */
  function LookupTable() {
    _classCallCheck(this, LookupTable);

    this.NumberOfColors = 256;
    this.Ramp = 'linear';
    this.TableRange = [0, 255];
    this.HueRange = [0, 0.66667];
    this.SaturationRange = [1, 1];
    this.ValueRange = [1, 1];
    this.AlphaRange = [1, 1];
    this.NaNColor = [128, 0, 0, 255];
    this.BelowRangeColor = [0, 0, 0, 255];
    this.UseBelowRangeColor = true;
    this.AboveRangeColor = [255, 255, 255, 255];
    this.UseAboveRangeColor = true;
    this.InputRange = [0, 255];
    this.Table = [];
  }
  /**
   * Specify the number of values (i.e., colors) in the lookup table.
   * @param {Number} number The number of colors in he LookupTable
   * @returns {void}
   * @memberof Colors
   */


  _createClass(LookupTable, [{
    key: "setNumberOfTableValues",
    value: function setNumberOfTableValues(number) {
      this.NumberOfColors = number;
    }
    /**
     * Set the shape of the table ramp to either 'linear', 'scurve' or 'sqrt'
     * @param {String} ramp A string value representing the shape of the table. Allowed values are 'linear', 'scurve' or 'sqrt'
     * @returns {void}
     * @memberof Colors
     */

  }, {
    key: "setRamp",
    value: function setRamp(ramp) {
      this.Ramp = ramp;
    }
    /**
     * Sets the minimum/maximum scalar values for scalar mapping.
     * Scalar values less than minimum range value are clamped to minimum range value.
     * Scalar values greater than maximum range value are clamped to maximum range value.
     * @param {Number} start A double representing the minimum scaler value of the LookupTable
     * @param {any} end A double representing the maximum scaler value of the LookupTable
     * @returns {void}
     * @memberof Colors
     */

  }, {
    key: "setTableRange",
    value: function setTableRange(start, end) {
      this.TableRange[0] = start;
      this.TableRange[1] = end;
    }
    /**
     * Set the range in hue (using automatic generation). Hue ranges between [0,1].
     * @param {Number} start A double representing the minimum hue value in a range. Min. is 0
     * @param {Number} end A double representing the maximum hue value in a range. Max. is 1
     * @returns {void}
     * @memberof Colors
     */

  }, {
    key: "setHueRange",
    value: function setHueRange(start, end) {
      this.HueRange[0] = start;
      this.HueRange[1] = end;
    }
    /**
     * Set the range in saturation (using automatic generation). Saturation ranges between [0,1].
     * @param {Number} start A double representing the minimum Saturation value in a range. Min. is 0
     * @param {Number} end A double representing the maximum Saturation value in a range. Max. is 1
     * @returns {void}
     * @memberof Colors
     */

  }, {
    key: "setSaturationRange",
    value: function setSaturationRange(start, end) {
      this.SaturationRange[0] = start;
      this.SaturationRange[1] = end;
    }
    /**
     * Set the range in value (using automatic generation). Value ranges between [0,1].
     * @param {Numeber } start A double representing the minimum value in a range. Min. is 0
     * @param {Numeber} end A double representing the maximum value in a range. Max. is 1
     * @returns {void}
     * @memberof Colors
     */

  }, {
    key: "setValueRange",
    value: function setValueRange(start, end) {
      // Set the range in value (using automatic generation). Value ranges between [0,1].
      this.ValueRange[0] = start;
      this.ValueRange[1] = end;
    }
    /**
     * (Not Used) Sets the range of scalars which will be mapped.
     * @param {Number} start the minimum scalar value in the range
     * @param {Number} end the maximum scalar value in the range
     * @returns {void}
     * @memberof Colors
     */

  }, {
    key: "setRange",
    value: function setRange(start, end) {
      this.InputRange[0] = start;
      this.InputRange[1] = end;
    }
    /**
     * Set the range in alpha (using automatic generation). Alpha ranges from [0,1].
     * @param {Number} start A double representing the minimum alpha value
     * @param {Number} end A double representing the maximum alpha value
     * @returns {void}
     * @memberof Colors
     */

  }, {
    key: "setAlphaRange",
    value: function setAlphaRange(start, end) {
      // Set the range in alpha (using automatic generation). Alpha ranges from [0,1].
      this.AlphaRange[0] = start;
      this.AlphaRange[1] = end;
    }
    /**
     * Map one value through the lookup table and return the color as an
     * RGBA array of doubles between 0 and 1.
     * @param {Number} scalar A double scalar value which will be mapped to a color in the LookupTable
     * @returns {Number[]} An RGBA array of doubles between 0 and 1
     * @memberof Colors
     */

  }, {
    key: "getColor",
    value: function getColor(scalar) {
      return this.mapValue(scalar);
    }
    /**
     * Generate lookup table from hue, saturation, value, alpha min/max values. Table is built from linear ramp of each value.
     * @param {Boolean} force true to force the build of the LookupTable. Otherwie, false. This is useful if a lookup table has been defined manually
     * (using SetTableValue) and then an application decides to rebuild the lookup table using the implicit process.
     * @returns {void}
     * @memberof Colors
     */

  }, {
    key: "build",
    value: function build(force) {
      if (this.Table.length > 1 && !force) {
        return;
      } // Clear the table


      this.Table = [];
      var maxIndex = this.NumberOfColors - 1;
      var hinc, sinc, vinc, ainc;

      if (maxIndex) {
        hinc = (this.HueRange[1] - this.HueRange[0]) / maxIndex;
        sinc = (this.SaturationRange[1] - this.SaturationRange[0]) / maxIndex;
        vinc = (this.ValueRange[1] - this.ValueRange[0]) / maxIndex;
        ainc = (this.AlphaRange[1] - this.AlphaRange[0]) / maxIndex;
      } else {
        hinc = sinc = vinc = ainc = 0.0;
      }

      for (var i = 0; i <= maxIndex; i++) {
        var hue = this.HueRange[0] + i * hinc;
        var sat = this.SaturationRange[0] + i * sinc;
        var val = this.ValueRange[0] + i * vinc;
        var alpha = this.AlphaRange[0] + i * ainc;
        var rgb = HSVToRGB(hue, sat, val);
        var c_rgba = [];

        switch (this.Ramp) {
          case 'scurve':
            c_rgba[0] = Math.floor(127.5 * (1.0 + Math.cos((1.0 - rgb[0]) * Math.PI)));
            c_rgba[1] = Math.floor(127.5 * (1.0 + Math.cos((1.0 - rgb[1]) * Math.PI)));
            c_rgba[2] = Math.floor(127.5 * (1.0 + Math.cos((1.0 - rgb[2]) * Math.PI)));
            c_rgba[3] = Math.floor(alpha * 255);
            break;

          case 'linear':
            c_rgba[0] = Math.floor(rgb[0] * 255 + 0.5);
            c_rgba[1] = Math.floor(rgb[1] * 255 + 0.5);
            c_rgba[2] = Math.floor(rgb[2] * 255 + 0.5);
            c_rgba[3] = Math.floor(alpha * 255 + 0.5);
            break;

          case 'sqrt':
            c_rgba[0] = Math.floor(Math.sqrt(rgb[0]) * 255 + 0.5);
            c_rgba[1] = Math.floor(Math.sqrt(rgb[1]) * 255 + 0.5);
            c_rgba[2] = Math.floor(Math.sqrt(rgb[2]) * 255 + 0.5);
            c_rgba[3] = Math.floor(Math.sqrt(alpha) * 255 + 0.5);
            break;

          default:
            throw new Error("Invalid Ramp value (".concat(this.Ramp, ")"));
        }

        this.Table.push(c_rgba);
      }

      this.buildSpecialColors();
    }
    /**
     * Ensures the out-of-range colors (Below range and Above range) are set correctly.
     * @returns {void}
     * @memberof Colors
     */

  }, {
    key: "buildSpecialColors",
    value: function buildSpecialColors() {
      var numberOfColors = this.NumberOfColors;
      var belowRangeColorIndex = numberOfColors + BELOW_RANGE_COLOR_INDEX;
      var aboveRangeColorIndex = numberOfColors + ABOVE_RANGE_COLOR_INDEX;
      var nanColorIndex = numberOfColors + NAN_COLOR_INDEX; // Below range color

      if (this.UseBelowRangeColor || numberOfColors === 0) {
        this.Table[belowRangeColorIndex] = this.BelowRangeColor;
      } else {
        // Duplicate the first color in the table.
        this.Table[belowRangeColorIndex] = this.Table[0];
      } // Above range color


      if (this.UseAboveRangeColor || numberOfColors === 0) {
        this.Table[aboveRangeColorIndex] = this.AboveRangeColor;
      } else {
        // Duplicate the last color in the table.
        this.Table[aboveRangeColorIndex] = this.Table[numberOfColors - 1];
      } // Always use NanColor


      this.Table[nanColorIndex] = this.NaNColor;
    }
    /**
     * Similar to GetColor - Map one value through the lookup table and return the color as an
     * RGBA array of doubles between 0 and 1.
     * @param {Numeber} v A double scalar value which will be mapped to a color in the LookupTable
     * @returns {Number[]} An RGBA array of doubles between 0 and 1
     * @memberof Colors
     */

  }, {
    key: "mapValue",
    value: function mapValue(v) {
      var index = this.getIndex(v);

      if (index < 0) {
        return this.NaNColor;
      } else if (index === 0) {
        if (this.UseBelowRangeColor && v < this.TableRange[0]) {
          return this.BelowRangeColor;
        }
      } else if (index === this.NumberOfColors - 1) {
        if (this.UseAboveRangeColor && v > this.TableRange[1]) {
          return this.AboveRangeColor;
        }
      }

      return this.Table[index];
    }
    /**
     * Return the table index associated with a particular value.
     * @param {Number} v A double value which table index will be returned.
     * @returns {Number} The index in the LookupTable
     * @memberof Colors
     */

  }, {
    key: "getIndex",
    value: function getIndex(v) {
      var p = {};
      p.Range = [];
      p.MaxIndex = this.NumberOfColors - 1; // This was LookupShiftAndScale

      p.Shift = -this.TableRange[0];

      if (this.TableRange[1] <= this.TableRange[0]) {
        p.Scale = Number.MAX_VALUE;
      } else {
        p.Scale = p.MaxIndex / (this.TableRange[1] - this.TableRange[0]);
      }

      p.Range[0] = this.TableRange[0];
      p.Range[1] = this.TableRange[1]; // First, check whether we have a number...

      if (isNaN(v)) {
        // For backwards compatibility
        return -1;
      } // Map to an index:


      var index = linearIndexLookupMain(v, p); // For backwards compatibility, if the index indicates an
      // Out-of-range value, truncate to index range for in-range colors.

      if (index === this.NumberOfColors + BELOW_RANGE_COLOR_INDEX) {
        index = 0;
      } else if (index === this.NumberOfColors + ABOVE_RANGE_COLOR_INDEX) {
        index = this.NumberOfColors - 1;
      }

      return index;
    }
    /**
     * Directly load color into lookup table. Use [0,1] double values for color component specification.
     * Make sure that you've either used the Build() method or used SetNumberOfTableValues() prior to using this method.
     * @param {Number} index The index in the LookupTable of where to insert the color value
     * @param {Number[]} rgba An array of [0,1] double values for an RGBA color component
     * @returns {void}
     * @memberof Colors
     */

  }, {
    key: "setTableValue",
    value: function setTableValue(index, rgba) {
      // Check if it index, red, green, blue and alpha were passed as parameter
      if (arguments.length === 5) {
        rgba = Array.prototype.slice.call(arguments, 1);
      } // Check the index to make sure it is valid


      if (index < 0) {
        throw new Error("Can't set the table value for negative index (".concat(index, ")"));
      }

      if (index >= this.NumberOfColors) {
        new Error("Index ".concat(index, " is greater than the number of colors ").concat(this.NumberOfColors));
      }

      this.Table[index] = rgba;

      if (index === 0 || index === this.NumberOfColors - 1) {
        // This is needed due to the way the special colors are stored in
        // The internal table. If Above/BelowRangeColors are not used and
        // The min/max colors are changed in the table with this member
        // Function, then the colors used for values outside the range may
        // Be incorrect. Calling this here ensures the out-of-range colors
        // Are set correctly.
        this.buildSpecialColors();
      }
    }
  }]);

  return LookupTable;
}();

/* harmony default export */ __nested_webpack_exports__["default"] = (LookupTable);

/***/ }),

/***/ "./disable.js":
/*!********************!*\
  !*** ./disable.js ***!
  \********************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_88862__) {

"use strict";
__nested_webpack_require_88862__.r(__nested_webpack_exports__);
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_88862__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_88862__(/*! ./triggerEvent.js */ "./triggerEvent.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_88862__(/*! ./events.js */ "./events.js");



/**
 *  Disable an HTML element for further use in Cornerstone
 *
 * @param {HTMLElement} element An HTML Element enabled for Cornerstone
 * @returns {void}
 * @memberof Enable
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element) {
  if (element === undefined) {
    throw new Error('disable: element must not be undefined');
  } // Search for this element in this list of enabled elements


  var enabledElements = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElements"])();

  for (var i = 0; i < enabledElements.length; i++) {
    if (enabledElements[i].element === element) {
      // We found it!
      // Fire an event so dependencies can cleanup
      var eventData = {
        element: element
      };
      Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].ELEMENT_DISABLED, eventData);
      Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_2__["events"], _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].ELEMENT_DISABLED, eventData); // Remove the child DOM elements that we created (e.g.canvas)

      enabledElements[i].element.removeChild(enabledElements[i].canvas);
      enabledElements[i].canvas = undefined; // Remove this element from the list of enabled elements

      enabledElements.splice(i, 1);
      break;
    }
  }
});

/***/ }),

/***/ "./displayImage.js":
/*!*************************!*\
  !*** ./displayImage.js ***!
  \*************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_91006__) {

"use strict";
__nested_webpack_require_91006__.r(__nested_webpack_exports__);
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_91006__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_91006__(/*! ./internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js");
/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_91006__(/*! ./updateImage.js */ "./updateImage.js");
/* harmony import */ var _internal_now_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_91006__(/*! ./internal/now.js */ "./internal/now.js");
/* harmony import */ var _layers_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_91006__(/*! ./layers.js */ "./layers.js");
/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_91006__(/*! ./triggerEvent.js */ "./triggerEvent.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_91006__(/*! ./events.js */ "./events.js");







/**
 * Sets a new image object for a given element.
 *
 * Will also apply an optional viewport setting.
 *
 * @param {HTMLElement} element An HTML Element enabled for Cornerstone
 * @param {Object} image An Image loaded by a Cornerstone Image Loader
 * @param {Object} [viewport] A set of Cornerstone viewport parameters
 * @returns {void}
 * @memberof Drawing
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, image, viewport) {
  if (element === undefined) {
    throw new Error('displayImage: parameter element must not be undefined');
  }

  if (image === undefined) {
    throw new Error('displayImage: parameter image must not be undefined');
  }

  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
  var oldImage = enabledElement.image;
  enabledElement.image = image;

  if (enabledElement.layers && enabledElement.layers.length) {
    Object(_layers_js__WEBPACK_IMPORTED_MODULE_4__["setLayerImage"])(element, image);
  }

  if (enabledElement.viewport === undefined) {
    enabledElement.viewport = Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement.canvas, image);
  } // Merge viewport


  if (viewport) {
    for (var attrname in viewport) {
      if (viewport[attrname] !== null) {
        enabledElement.viewport[attrname] = viewport[attrname];
      }
    }
  }

  var frameRate;

  if (enabledElement.lastImageTimeStamp !== undefined) {
    var timeSinceLastImage = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_3__["default"])() - enabledElement.lastImageTimeStamp;
    frameRate = (1000 / timeSinceLastImage).toFixed();
  }

  enabledElement.lastImageTimeStamp = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_3__["default"])();
  var newImageEventData = {
    viewport: enabledElement.viewport,
    element: enabledElement.element,
    image: enabledElement.image,
    oldImage: oldImage,
    enabledElement: enabledElement,
    frameRate: frameRate
  };
  Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(enabledElement.element, _events_js__WEBPACK_IMPORTED_MODULE_6__["default"].NEW_IMAGE, newImageEventData);
  Object(_updateImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element);
});

/***/ }),

/***/ "./draw.js":
/*!*****************!*\
  !*** ./draw.js ***!
  \*****************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_94540__) {

"use strict";
__nested_webpack_require_94540__.r(__nested_webpack_exports__);
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_94540__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_94540__(/*! ./internal/drawImage.js */ "./internal/drawImage.js");


/**
 * Immediately draws the enabled element
 *
 * @param {HTMLElement} element An HTML Element enabled for Cornerstone
 * @returns {void}
 * @memberof Drawing
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
  Object(_internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement);
});

/***/ }),

/***/ "./drawInvalidated.js":
/*!****************************!*\
  !*** ./drawInvalidated.js ***!
  \****************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_95606__) {

"use strict";
__nested_webpack_require_95606__.r(__nested_webpack_exports__);
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_95606__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_95606__(/*! ./internal/drawImage.js */ "./internal/drawImage.js");
/**
 * This module is responsible for drawing invalidated enabled elements
 */


/**
 * Draws all invalidated enabled elements and clears the invalid flag after drawing it
 *
 * @returns {void}
 * @memberof Drawing
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function () {
  var enabledElements = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElements"])();

  for (var i = 0; i < enabledElements.length; i++) {
    var ee = enabledElements[i];

    if (ee.invalid === true) {
      Object(_internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__["default"])(ee, true);
    }
  }
});

/***/ }),

/***/ "./enable.js":
/*!*******************!*\
  !*** ./enable.js ***!
  \*******************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_96804__) {

"use strict";
__nested_webpack_require_96804__.r(__nested_webpack_exports__);
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_96804__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _resize_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_96804__(/*! ./resize.js */ "./resize.js");
/* harmony import */ var _internal_drawImageSync_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_96804__(/*! ./internal/drawImageSync.js */ "./internal/drawImageSync.js");
/* harmony import */ var _internal_requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_96804__(/*! ./internal/requestAnimationFrame.js */ "./internal/requestAnimationFrame.js");
/* harmony import */ var _internal_tryEnableWebgl_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_96804__(/*! ./internal/tryEnableWebgl.js */ "./internal/tryEnableWebgl.js");
/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_96804__(/*! ./triggerEvent.js */ "./triggerEvent.js");
/* harmony import */ var _generateUUID_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_96804__(/*! ./generateUUID.js */ "./generateUUID.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_96804__(/*! ./events.js */ "./events.js");
/* harmony import */ var _internal_getCanvas_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_96804__(/*! ./internal/getCanvas.js */ "./internal/getCanvas.js");









/**
 * @module Enable
 * This module is responsible for enabling an element to display images with cornerstone
 */

/**
 * Returns whether or not an Enabled Element has either a currently active image or
 * a non-empty Array of Enabled Element Layers.
 *
 * @param {EnabledElement} enabledElement An Enabled Element
 * @return {Boolean} Whether or not the Enabled Element has an active image or valid set of layers
 * @memberof Enable
 */

function hasImageOrLayers(enabledElement) {
  return enabledElement.image !== undefined || enabledElement.layers.length > 0;
}
/**
 * Enable an HTML Element for use in Cornerstone
 *
 * - If there is a Canvas already present within the HTMLElement, and it has the class
 * 'cornerstone-canvas', this function will use this existing Canvas instead of creating
 * a new one. This may be helpful when using libraries (e.g. React, Vue) which don't
 * want third parties to change the DOM.
 *
 * @param {HTMLElement} element An HTML Element enabled for Cornerstone
 * @param {Object} options Options for the enabledElement
 *
 * @return {void}
 * @memberof Enable
 */


/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, options) {
  if (element === undefined) {
    throw new Error('enable: parameter element cannot be undefined');
  } // If this enabled element has the option set for WebGL, we should
  // Check if this device actually supports it


  if (options && options.renderer && options.renderer.toLowerCase() === 'webgl') {
    Object(_internal_tryEnableWebgl_js__WEBPACK_IMPORTED_MODULE_4__["default"])(options);
  }

  var canvas = Object(_internal_getCanvas_js__WEBPACK_IMPORTED_MODULE_8__["default"])(element);
  var enabledElement = {
    element: element,
    canvas: canvas,
    image: undefined,
    // Will be set once image is loaded
    invalid: false,
    // True if image needs to be drawn, false if not
    needsRedraw: true,
    options: Object.assign({}, options),
    layers: [],
    data: {},
    renderingTools: {},
    uuid: Object(_generateUUID_js__WEBPACK_IMPORTED_MODULE_6__["default"])()
  };
  Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["addEnabledElement"])(enabledElement);
  Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_7__["events"], _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].ELEMENT_ENABLED, enabledElement);
  Object(_resize_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, true);
  /**
   * Draw the image immediately
   *
   * @param {DOMHighResTimeStamp} timestamp The current time for when requestAnimationFrame starts to fire callbacks
   * @returns {void}
   * @memberof Drawing
   */

  function draw(timestamp) {
    if (enabledElement.canvas === undefined) {
      return;
    }

    var eventDetails = {
      enabledElement: enabledElement,
      timestamp: timestamp
    };
    Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(enabledElement.element, _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].PRE_RENDER, eventDetails);

    if (enabledElement.needsRedraw && hasImageOrLayers(enabledElement)) {
      Object(_internal_drawImageSync_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement, enabledElement.invalid);
    }

    Object(_internal_requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_3__["default"])(draw);
  }

  draw();
});

/***/ }),

/***/ "./enabledElementData.js":
/*!*******************************!*\
  !*** ./enabledElementData.js ***!
  \*******************************/
/*! exports provided: getElementData, removeElementData */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_101916__) {

"use strict";
__nested_webpack_require_101916__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_101916__.d(__nested_webpack_exports__, "getElementData", function() { return getElementData; });
/* harmony export (binding) */ __nested_webpack_require_101916__.d(__nested_webpack_exports__, "removeElementData", function() { return removeElementData; });
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_101916__(/*! ./enabledElements.js */ "./enabledElements.js");

/**
 * Retrieves any data for a Cornerstone enabledElement for a specific string
 * dataType
 *
 * @param {HTMLElement} element An HTML Element enabled for Cornerstone
 * @param {string} dataType A string name for an arbitrary set of data
 * @returns {*} Whatever data is stored for this enabled element
 */

function getElementData(element, dataType) {
  var ee = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);

  if (ee.data.hasOwnProperty(dataType) === false) {
    ee.data[dataType] = {};
  }

  return ee.data[dataType];
}
/**
 * Clears any data for a Cornerstone enabledElement for a specific string
 * dataType
 *
 * @param {HTMLElement} element An HTML Element enabled for Cornerstone
 * @param {string} dataType A string name for an arbitrary set of data
 *
 * @returns {void}
 */

function removeElementData(element, dataType) {
  var ee = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
  delete ee.data[dataType];
}

/***/ }),

/***/ "./enabledElements.js":
/*!****************************!*\
  !*** ./enabledElements.js ***!
  \****************************/
/*! exports provided: getEnabledElement, addEnabledElement, getEnabledElementsByImageId, getEnabledElements */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_103726__) {

"use strict";
__nested_webpack_require_103726__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_103726__.d(__nested_webpack_exports__, "getEnabledElement", function() { return getEnabledElement; });
/* harmony export (binding) */ __nested_webpack_require_103726__.d(__nested_webpack_exports__, "addEnabledElement", function() { return addEnabledElement; });
/* harmony export (binding) */ __nested_webpack_require_103726__.d(__nested_webpack_exports__, "getEnabledElementsByImageId", function() { return getEnabledElementsByImageId; });
/* harmony export (binding) */ __nested_webpack_require_103726__.d(__nested_webpack_exports__, "getEnabledElements", function() { return getEnabledElements; });
var enabledElements = [];
/**
 * @module EnabledElements
 */

/**
 * @module Objects
 */

/**
 * A two-dimensional vector
 *
 * @typedef {Object} vec2
 * @memberof Objects
 * @param {Number} x - The x distance
 * @param {Number} y - The y distance
 */

/**
 * VOI
 *
 * @typedef {Object} VOI
 * @memberof Objects
 * @param {Number} windowWidth - Window Width for display
 * @param {Number} windowCenter - Window Center for display
 */

/**
 * Lookup Table Array
 *
 * @typedef {Object} LUT
 * @memberof Objects
 * @property {Number} firstValueMapped
 * @property {Number} numBitsPerEntry
 * @property {Array} lut
 */

/**
 * Image Statistics Object
 *
 * @typedef {Object} ImageStats
 * @memberof Objects
 * @property {Number} [lastGetPixelDataTime] The time in ms taken to retrieve stored pixels required to draw the image
 * @property {Number} [lastStoredPixelDataToCanvasImageDataTime] The time in ms taken to map from stored pixel array to canvas pixel array
 * @property {Number} [lastPutImageDataTime] The time in ms taken for putImageData to put the canvas pixel data into the canvas context
 * @property {Number} [lastRenderTime] The total time in ms taken for the entire rendering function to run
 * @property {Number} [lastLutGenerateTime] The time in ms taken to generate the lookup table for the image
 */

/**
 * An Image Object in Cornerstone
 *
 * @typedef {Object} Image
 * @memberof Objects
 * @property {string} imageId - The imageId associated with this image object
 * @property {Number} minPixelValue - the minimum stored pixel value in the image
 * @property {Number} maxPixelValue - the maximum stored pixel value in the image
 * @property {Number} slope - the rescale slope to convert stored pixel values to modality pixel values or 1 if not specified
 * @property {Number} intercept - the rescale intercept used to convert stored pixel values to modality values or 0 if not specified
 * @property {Number} windowCenter - the default windowCenter to apply to the image
 * @property {Number} windowWidth - the default windowWidth to apply to the image
 * @property {function} getPixelData - a function that returns the underlying pixel data. An array of integers for grayscale and an array of RGBA for color
 * @property {function} getImageData - a function that returns a canvas imageData object for the image. This is only needed for color images
 * @property {function} getCanvas - a function that returns a canvas element with the image loaded into it. This is only needed for color images.
 * @property {function} getImage - a function that returns a JavaScript Image object with the image data. This is optional and typically used for images encoded in standard web JPEG and PNG formats
 * @property {Number} rows - number of rows in the image. This is the same as height but duplicated for convenience
 * @property {Number} columns - number of columns in the image. This is the same as width but duplicated for convenience
 * @property {Number} height - the height of the image. This is the same as rows but duplicated for convenience
 * @property {Number} width - the width of the image. This is the same as columns but duplicated for convenience
 * @property {Boolean} color - true if pixel data is RGB, false if grayscale
 * @property {Object} lut - The Lookup Table
 * @property {Boolean} rgba - Is the color pixel data stored in RGBA?
 * @property {Number} columnPixelSpacing - horizontal distance between the middle of each pixel (or width of each pixel) in mm or undefined if not known
 * @property {Number} rowPixelSpacing - vertical distance between the middle of each pixel (or height of each pixel) in mm or undefined if not known
 * @property {Boolean} invert - true if the the image should initially be displayed be inverted, false if not. This is here mainly to support DICOM images with a photometric interpretation of MONOCHROME1
 * @property {Number} sizeInBytes - the number of bytes used to store the pixels for this image.
 * @property {Boolean} [falseColor=false] - Whether or not the image has undergone false color mapping
 * @property {Array} [origPixelData] - Original pixel data for an image after it has undergone false color mapping
 * @property {ImageStats} [stats] - Statistics for the last redraw of the image
 * @property {Object} cachedLut - Cached Lookup Table for this image.
 * @property {String|Colormap} [colormap] - Depreacted. Use viewport.colormap instead. an optional colormap ID or colormap object (from colors/colormap.js). This will be applied during rendering to convert the image to pseudocolor
 * @property {Boolean} [labelmap=false] - whether or not to render this image as a label map (i.e. skip modality and VOI LUT pipelines and use only a color lookup table)
 */

/**
 * A Viewport Settings Object Cornerstone
 *
 * @typedef {Object} Viewport
 * @memberof Objects
 * @property {Number} [scale=1.0] - The scale applied to the image. A scale of 1.0 will display no zoom (one image pixel takes up one screen pixel). A scale of 2.0 will be double zoom and a scale of .5 will be zoomed out by 2x
 * @property {vec2} [translation] - An object with properties x and y which describe the translation to apply in the pixel coordinate system. Note that the image is initially displayed centered in the enabled element with a x and y translation of 0 and 0 respectively.
 * @property {VOI} [voi] - an object with properties windowWidth and windowCenter.
 * @property {boolean} [invert=false] - Whether or not the image is inverted.
 * @property {boolean} [pixelReplication=false] - true if the image smooth / interpolation should be used when zoomed in on the image or false if pixel replication should be used.
 * @property {boolean} [hflip=false] - true if the image is flipped horizontally. Default is false
 * @property {boolean} [vflip=false] - true if the image is flipped vertically. Default is false
 * @property {Number} [rotation=0] - the rotation of the image (90 degree increments). Default is 0
 * @property {LUT} [modalityLUT] - the modality LUT to apply or undefined if none
 * @property {LUT} [voiLUT] - the modality LUT to apply or undefined if none
 * @property {String|Colormap} [colormap] - an optional colormap ID or colormap object (from colors/colormap.js). This will be applied during rendering to convert the image to pseudocolor
 * @property {Boolean} [labelmap=false] - whether or not to render this image as a label map (i.e. skip modality and VOI LUT pipelines and use only a color lookup table)
 */

/**
 * An Enabled Element in Cornerstone
 *
 * @typedef {Object} EnabledElement
 * @memberof Objects
 * @property {HTMLElement} element - The DOM element which has been enabled for use by Cornerstone
 * @property {Image} [image] - The image currently displayed in the enabledElement
 * @property {Viewport} [viewport] - The current viewport settings of the enabledElement
 * @property {HTMLCanvasElement} [canvas] - The current canvas for this enabledElement
 * @property {Boolean} invalid - Whether or not the image pixel data underlying the enabledElement has been changed, necessitating a redraw
 * @property {Boolean} needsRedraw - A flag for triggering a redraw of the canvas without re-retrieving the pixel data, since it remains valid
 * @property {EnabledElementLayer[]} [layers] - The layers that have been added to the enabledElement
 * @property {Boolean} [syncViewports] - Whether or not to synchronize the viewport parameters
 * for each of the enabled element's layers
 * @property {Boolean} [lastSyncViewportsState] - The previous state for the sync viewport boolean
 */

/**
 * An Enabled Element Layer in Cornerstone
 *
 * @typedef {Object} EnabledElementLayer
 * @memberof Objects
 * @property {HTMLElement} element - The DOM element which has been enabled for use by Cornerstone
 * @property {Image} [image] - The image currently displayed in the enabledElement
 * @property {Viewport} [viewport] - The current viewport settings of the enabledElement
 * @property {HTMLCanvasElement} [canvas] - The current canvas for this enabledElement
 * @property {Object} [options] - Layer drawing options
 * @property {Boolean} invalid - Whether or not the image pixel data underlying the enabledElement has been changed, necessitating a redraw
 * @property {Boolean} needsRedraw - A flag for triggering a redraw of the canvas without re-retrieving the pixel data, since it remains valid
 */

/**
 * An Image Load Object
 *
 * @typedef {Object} ImageLoadObject
 * @memberof Objects
 * @property {Promise} promise - The Promise tracking the loading of this image
 * @property {Function|undefined} cancelFn - A function to cancel the image load request
 */

/**
 * Retrieves a Cornerstone Enabled Element object
 *
 * @param {HTMLElement} element An HTML Element enabled for Cornerstone
 *
 * @returns {EnabledElement} A Cornerstone Enabled Element
 * @memberof EnabledElements
 */

function getEnabledElement(element) {
  if (element === undefined) {
    throw new Error('getEnabledElement: parameter element must not be undefined');
  }

  for (var i = 0; i < enabledElements.length; i++) {
    if (enabledElements[i].element === element) {
      return enabledElements[i];
    }
  }

  throw new Error('element not enabled');
}
/**
 * Adds a Cornerstone Enabled Element object to the central store of enabledElements
 *
 * @param {EnabledElement} enabledElement A Cornerstone enabledElement Object
 * @returns {void}
 * @memberof EnabledElements
 */

function addEnabledElement(enabledElement) {
  if (enabledElement === undefined) {
    throw new Error('getEnabledElement: enabledElement element must not be undefined');
  }

  enabledElements.push(enabledElement);
}
/**
 * Adds a Cornerstone Enabled Element object to the central store of enabledElements
 *
 * @param {string} imageId A Cornerstone Image ID
 * @returns {EnabledElement[]} An Array of Cornerstone enabledElement Objects
 * @memberof EnabledElements
 */

function getEnabledElementsByImageId(imageId) {
  var ees = [];
  enabledElements.forEach(function (enabledElement) {
    if (enabledElement.image && enabledElement.image.imageId === imageId) {
      ees.push(enabledElement);
    }
  });
  return ees;
}
/**
 * Retrieve all of the currently enabled Cornerstone elements
 *
 * @return {EnabledElement[]} An Array of Cornerstone enabledElement Objects
 * @memberof EnabledElements
 */

function getEnabledElements() {
  return enabledElements;
}

/***/ }),

/***/ "./events.js":
/*!*******************!*\
  !*** ./events.js ***!
  \*******************/
/*! exports provided: default, events */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_115003__) {

"use strict";
__nested_webpack_require_115003__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_115003__.d(__nested_webpack_exports__, "events", function() { return events; });
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

var EVENTS = {
  NEW_IMAGE: 'cornerstonenewimage',
  INVALIDATED: 'cornerstoneinvalidated',
  PRE_RENDER: 'cornerstoneprerender',
  IMAGE_CACHE_MAXIMUM_SIZE_CHANGED: 'cornerstoneimagecachemaximumsizechanged',
  IMAGE_CACHE_PROMISE_REMOVED: 'cornerstoneimagecachepromiseremoved',
  IMAGE_CACHE_FULL: 'cornerstoneimagecachefull',
  IMAGE_CACHE_CHANGED: 'cornerstoneimagecachechanged',
  WEBGL_TEXTURE_REMOVED: 'cornerstonewebgltextureremoved',
  WEBGL_TEXTURE_CACHE_FULL: 'cornerstonewebgltexturecachefull',
  IMAGE_LOADED: 'cornerstoneimageloaded',
  IMAGE_LOAD_PROGRESS: 'cornerstoneimageloadprogress',
  IMAGE_LOAD_FAILED: 'cornerstoneimageloadfailed',
  ELEMENT_RESIZED: 'cornerstoneelementresized',
  IMAGE_RENDERED: 'cornerstoneimagerendered',
  LAYER_ADDED: 'cornerstonelayeradded',
  LAYER_REMOVED: 'cornerstonelayerremoved',
  ACTIVE_LAYER_CHANGED: 'cornerstoneactivelayerchanged',
  ELEMENT_DISABLED: 'cornerstoneelementdisabled',
  ELEMENT_ENABLED: 'cornerstoneelementenabled'
};
/* harmony default export */ __nested_webpack_exports__["default"] = (EVENTS);
/**
 * EventTarget - Provides the [EventTarget](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget) interface
 *
 * @class
 * @memberof Polyfills
 */

var EventTarget = /*#__PURE__*/function () {
  function EventTarget() {
    _classCallCheck(this, EventTarget);

    this.listeners = {};
    this.namespaces = {};
  }

  _createClass(EventTarget, [{
    key: "addEventNamespaceListener",
    value: function addEventNamespaceListener(type, callback) {
      if (type.indexOf('.') <= 0) {
        return;
      }

      this.namespaces[type] = callback;
      this.addEventListener(type.split('.')[0], callback);
    }
  }, {
    key: "removeEventNamespaceListener",
    value: function removeEventNamespaceListener(type) {
      if (type.indexOf('.') <= 0 || !this.namespaces[type]) {
        return;
      }

      this.removeEventListener(type.split('.')[0], this.namespaces[type]);
      delete this.namespaces[type];
    }
  }, {
    key: "addEventListener",
    value: function addEventListener(type, callback) {
      // Check if it is an event namespace
      if (type.indexOf('.') > 0) {
        this.addEventNamespaceListener(type, callback);
        return;
      }

      if (!(type in this.listeners)) {
        this.listeners[type] = [];
      }

      this.listeners[type].push(callback);
    }
  }, {
    key: "removeEventListener",
    value: function removeEventListener(type, callback) {
      // Check if it is an event namespace
      if (type.indexOf('.') > 0) {
        this.removeEventNamespaceListener(type);
        return;
      }

      if (!(type in this.listeners)) {
        return;
      }

      var stack = this.listeners[type];

      for (var i = 0, l = stack.length; i < l; i++) {
        if (stack[i] === callback) {
          stack.splice(i, 1);
          return;
        }
      }
    }
  }, {
    key: "dispatchEvent",
    value: function dispatchEvent(event) {
      if (!(event.type in this.listeners)) {
        return true;
      }

      var stack = this.listeners[event.type].slice();

      for (var i = 0, l = stack.length; i < l; i++) {
        stack[i].call(this, event);
      }

      return !event.defaultPrevented;
    }
  }]);

  return EventTarget;
}();

var events = new EventTarget();

/***/ }),

/***/ "./falseColorMapping.js":
/*!******************************!*\
  !*** ./falseColorMapping.js ***!
  \******************************/
/*! exports provided: convertImageToFalseColorImage, convertToFalseColorImage, restoreImage */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_119498__) {

"use strict";
__nested_webpack_require_119498__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_119498__.d(__nested_webpack_exports__, "convertImageToFalseColorImage", function() { return convertImageToFalseColorImage; });
/* harmony export (binding) */ __nested_webpack_require_119498__.d(__nested_webpack_exports__, "convertToFalseColorImage", function() { return convertToFalseColorImage; });
/* harmony export (binding) */ __nested_webpack_require_119498__.d(__nested_webpack_exports__, "restoreImage", function() { return restoreImage; });
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_119498__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _pixelDataToFalseColorData_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_119498__(/*! ./pixelDataToFalseColorData.js */ "./pixelDataToFalseColorData.js");
/* harmony import */ var _colors_colormap_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_119498__(/*! ./colors/colormap.js */ "./colors/colormap.js");



/**
 * Retrieves the minimum and maximum pixel values from an Array of pixel data
 *
 * @param {Array} pixelData The input pixel data array
 *
 * @returns {{minPixelValue: Number, maxPixelValue: Number}} The minimum and maximum pixel values in the input Array
 */

function getPixelValues(pixelData) {
  var minPixelValue = Number.MAX_VALUE;
  var maxPixelValue = Number.MIN_VALUE;
  var len = pixelData.length;
  var pixel;

  for (var i = 0; i < len; i++) {
    pixel = pixelData[i];
    minPixelValue = minPixelValue < pixel ? minPixelValue : pixel;
    maxPixelValue = maxPixelValue > pixel ? maxPixelValue : pixel;
  }

  return {
    minPixelValue: minPixelValue,
    maxPixelValue: maxPixelValue
  };
}
/**
 * Retrieve a function that will allow an image object to be reset to its original form
 * after a false color mapping transformation
 *
 * @param {Image} image A Cornerstone Image Object
 *
 * @return {Function} A function for resetting an Image Object to its original form
 */


function getRestoreImageMethod(image) {
  if (image.restore) {
    return image.restore;
  }

  var color = image.color;
  var rgba = image.rgba;
  var cachedLut = image.cachedLut;
  var slope = image.slope;
  var windowWidth = image.windowWidth;
  var windowCenter = image.windowCenter;
  var minPixelValue = image.minPixelValue;
  var maxPixelValue = image.maxPixelValue;
  return function () {
    image.color = color;
    image.rgba = rgba;
    image.cachedLut = cachedLut;
    image.slope = slope;
    image.windowWidth = windowWidth;
    image.windowCenter = windowCenter;
    image.minPixelValue = minPixelValue;
    image.maxPixelValue = maxPixelValue;

    if (image.origPixelData) {
      var pixelData = image.origPixelData;

      image.getPixelData = function () {
        return pixelData;
      };
    } // Remove some attributes added by false color mapping


    image.origPixelData = undefined;
    image.colormapId = undefined;
    image.falseColor = undefined;
  };
} //
// Then we need to make sure it will be converted into a colormap object if it's as string.

/**
 * User can pass a colormap or its id as string to some of these public functions.
 * Then we need to make sure it will be converted into a colormap object if it's a string.
 *
 * @param {*} colormap A colormap ID or Object
 * @return {*} The colormap
 */


function ensuresColormap(colormap) {
  if (colormap && typeof colormap === 'string') {
    colormap = Object(_colors_colormap_js__WEBPACK_IMPORTED_MODULE_2__["getColormap"])(colormap);
  }

  return colormap;
}
/**
 * Restores a false color image to its original version
 *
 * @param {Image} image A Cornerstone Image Object
 * @returns {Boolean} True if the image object had a valid restore function, which was run. Otherwise, false.
 */


function restoreImage(image) {
  if (image.restore && typeof image.restore === 'function') {
    image.restore();
    return true;
  }

  return false;
}
/**
 * Convert an image to a false color image
 *
 * @param {Image} image A Cornerstone Image Object
 * @param {String|Object} colormap - it can be a colormap object or a colormap id (string)
 *
 * @returns {Boolean} - Whether or not the image has been converted to a false color image
 */


function convertImageToFalseColorImage(image, colormap) {
  if (image.color && !image.falseColor) {
    throw new Error('Color transforms are not implemented yet');
  } // User can pass a colormap id or a colormap object


  colormap = ensuresColormap(colormap);
  var colormapId = colormap.getId(); // Doesn't do anything if colormapId hasn't changed

  if (image.colormapId === colormapId) {
    // It has already being converted into a false color image
    // Using the colormapId passed as parameter
    return false;
  } // Restore the image attributes updated when converting to a false color image


  restoreImage(image); // Convert the image to a false color image

  if (colormapId) {
    var minPixelValue = image.minPixelValue || 0;
    var maxPixelValue = image.maxPixelValue || 255;
    image.restore = getRestoreImageMethod(image);
    var lookupTable = colormap.createLookupTable();
    lookupTable.setTableRange(minPixelValue, maxPixelValue); // Update the pixel data and render the new image

    Object(_pixelDataToFalseColorData_js__WEBPACK_IMPORTED_MODULE_1__["default"])(image, lookupTable); // Update min and max pixel values

    var pixelValues = getPixelValues(image.getPixelData());
    image.minPixelValue = pixelValues.minPixelValue;
    image.maxPixelValue = pixelValues.maxPixelValue;
    image.windowWidth = 255;
    image.windowCenter = 128; // Cache the last colormapId used for performance
    // Then it doesn't need to be re-rendered on next
    // Time if the user hasn't updated it

    image.colormapId = colormapId;
  } // Return `true` to tell the caller that the image has got updated


  return true;
}
/**
 * Convert the image of a element to a false color image
 *
 * @param {HTMLElement} element The Cornerstone element
 * @param {*} colormap - it can be a colormap object or a colormap id (string)
 *
 * @returns {void}
 */


function convertToFalseColorImage(element, colormap) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
  return convertImageToFalseColorImage(enabledElement.image, colormap);
}



/***/ }),

/***/ "./fitToWindow.js":
/*!************************!*\
  !*** ./fitToWindow.js ***!
  \************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_126052__) {

"use strict";
__nested_webpack_require_126052__.r(__nested_webpack_exports__);
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_126052__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_126052__(/*! ./updateImage.js */ "./updateImage.js");
/* harmony import */ var _internal_getImageFitScale_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_126052__(/*! ./internal/getImageFitScale.js */ "./internal/getImageFitScale.js");



/**
 * Adjusts an image's scale and translation so the image is centered and all pixels
 * in the image are viewable.
 *
 * @param {HTMLElement} element The Cornerstone element to update
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
  var image = enabledElement.image; // The new scale is the minimum of the horizontal and vertical scale values

  enabledElement.viewport.scale = Object(_internal_getImageFitScale_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement.canvas, image, enabledElement.viewport.rotation).scaleFactor;
  enabledElement.viewport.translation.x = 0;
  enabledElement.viewport.translation.y = 0;
  Object(_updateImage_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element);
});

/***/ }),

/***/ "./generateUUID.js":
/*!*************************!*\
  !*** ./generateUUID.js ***!
  \*************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_127689__) {

"use strict";
__nested_webpack_require_127689__.r(__nested_webpack_exports__);
/**
* Generates a UUID for the enabledElement.
*
* @return {String} the UUID.
*/
/* harmony default export */ __nested_webpack_exports__["default"] = (function () {
  // https://stackoverflow.com/a/8809472/9208320 Public Domain/MIT

  /* eslint no-bitwise: ["error", { "allow": ["&","|"] }] */
  var d = new Date().getTime();

  if (typeof performance !== 'undefined' && typeof performance.now === 'function') {
    d += performance.now(); // Use high-precision timer if available
  }

  return 'x.x.x.x.x.x.xxxx.xxx.x.x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
    var r = (d + Math.random() * 16) % 16 | 0;
    d = Math.floor(d / 16);
    return (c === 'x' ? r : r & 0x3 | 0x8).toString(16);
  });
});

/***/ }),

/***/ "./getDefaultViewportForImage.js":
/*!***************************************!*\
  !*** ./getDefaultViewportForImage.js ***!
  \***************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_128765__) {

"use strict";
__nested_webpack_require_128765__.r(__nested_webpack_exports__);
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_128765__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_128765__(/*! ./internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js");


/**
 * Returns a default viewport for display the specified image on the specified
 * enabled element.  The default viewport is fit to window
 *
 * @param {HTMLElement} element The DOM element enabled for Cornerstone
 * @param {Image} image A Cornerstone Image Object
 *
 * @returns {Viewport} The default viewport for the image
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, image) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
  return Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement.canvas, image);
});

/***/ }),

/***/ "./getImage.js":
/*!*********************!*\
  !*** ./getImage.js ***!
  \*********************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_130036__) {

"use strict";
__nested_webpack_require_130036__.r(__nested_webpack_exports__);
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_130036__(/*! ./enabledElements.js */ "./enabledElements.js");

/**
 * Returns the currently displayed image for an element or undefined if no image has
 * been displayed yet
 *
 * @param {HTMLElement} element The DOM element enabled for Cornerstone
 * @returns {Image} The Cornerstone Image Object displayed in this element
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
  return enabledElement.image;
});

/***/ }),

/***/ "./getPixels.js":
/*!**********************!*\
  !*** ./getPixels.js ***!
  \**********************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_130961__) {

"use strict";
__nested_webpack_require_130961__.r(__nested_webpack_exports__);
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_130961__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _getStoredPixels_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_130961__(/*! ./getStoredPixels.js */ "./getStoredPixels.js");
/* harmony import */ var _internal_getModalityLUT_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_130961__(/*! ./internal/getModalityLUT.js */ "./internal/getModalityLUT.js");



/**
 * Retrieves an array of pixels from a rectangular region with modality LUT transformation applied
 *
 * @param {HTMLElement} element The DOM element enabled for Cornerstone
 * @param {Number} x The x coordinate of the top left corner of the sampling rectangle in image coordinates
 * @param {Number} y The y coordinate of the top left corner of the sampling rectangle in image coordinates
 * @param {Number} width The width of the of the sampling rectangle in image coordinates
 * @param {Number} height The height of the of the sampling rectangle in image coordinates
 * @returns {Array} The modality pixel value of the pixels in the sampling rectangle
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, x, y, width, height) {
  var storedPixels = Object(_getStoredPixels_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, x, y, width, height);
  var ee = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
  var mlutfn = Object(_internal_getModalityLUT_js__WEBPACK_IMPORTED_MODULE_2__["default"])(ee.image.slope, ee.image.intercept, ee.viewport.modalityLUT);
  return storedPixels.map(mlutfn);
});

/***/ }),

/***/ "./getStoredPixels.js":
/*!****************************!*\
  !*** ./getStoredPixels.js ***!
  \****************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_132918__) {

"use strict";
__nested_webpack_require_132918__.r(__nested_webpack_exports__);
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_132918__(/*! ./enabledElements.js */ "./enabledElements.js");

/**
 * Retrieves an array of stored pixel values from a rectangular region of an image
 *
 * @param {HTMLElement} element The DOM element enabled for Cornerstone
 * @param {Number} x The x coordinate of the top left corner of the sampling rectangle in image coordinates
 * @param {Number} y The y coordinate of the top left corner of the sampling rectangle in image coordinates
 * @param {Number} width The width of the of the sampling rectangle in image coordinates
 * @param {Number} height The height of the of the sampling rectangle in image coordinates
 * @returns {Array} The stored pixel value of the pixels in the sampling rectangle
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, x, y, width, height) {
  if (element === undefined) {
    throw new Error('getStoredPixels: parameter element must not be undefined');
  }

  x = Math.round(x);
  y = Math.round(y);
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
  var storedPixels = [];
  var index = 0;
  var pixelData = enabledElement.image.getPixelData();

  for (var row = 0; row < height; row++) {
    for (var column = 0; column < width; column++) {
      var spIndex = (row + y) * enabledElement.image.columns + (column + x);
      storedPixels[index++] = pixelData[spIndex];
    }
  }

  return storedPixels;
});

/***/ }),

/***/ "./getViewport.js":
/*!************************!*\
  !*** ./getViewport.js ***!
  \************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_134735__) {

"use strict";
__nested_webpack_require_134735__.r(__nested_webpack_exports__);
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_134735__(/*! ./enabledElements.js */ "./enabledElements.js");

/**
 * Retrieves the viewport for the specified enabled element
 *
 * @param {HTMLElement} element The DOM element enabled for Cornerstone
 * @returns {Viewport|undefined} The Cornerstone Viewport settings for this element, if they exist. Otherwise, undefined
 * @memberof ViewportSettings
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
  var viewport = enabledElement.viewport;

  if (viewport === undefined) {
    return;
  } // Return a copy of the viewport


  return Object.assign({}, viewport);
});

/***/ }),

/***/ "./imageCache.js":
/*!***********************!*\
  !*** ./imageCache.js ***!
  \***********************/
/*! exports provided: cachedImages, setMaximumSizeBytes, putImageLoadObject, getImageLoadObject, removeImageLoadObject, getCacheInfo, purgeCache, changeImageIdCacheSize, default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_135974__) {

"use strict";
__nested_webpack_require_135974__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_135974__.d(__nested_webpack_exports__, "cachedImages", function() { return cachedImages; });
/* harmony export (binding) */ __nested_webpack_require_135974__.d(__nested_webpack_exports__, "setMaximumSizeBytes", function() { return setMaximumSizeBytes; });
/* harmony export (binding) */ __nested_webpack_require_135974__.d(__nested_webpack_exports__, "putImageLoadObject", function() { return putImageLoadObject; });
/* harmony export (binding) */ __nested_webpack_require_135974__.d(__nested_webpack_exports__, "getImageLoadObject", function() { return getImageLoadObject; });
/* harmony export (binding) */ __nested_webpack_require_135974__.d(__nested_webpack_exports__, "removeImageLoadObject", function() { return removeImageLoadObject; });
/* harmony export (binding) */ __nested_webpack_require_135974__.d(__nested_webpack_exports__, "getCacheInfo", function() { return getCacheInfo; });
/* harmony export (binding) */ __nested_webpack_require_135974__.d(__nested_webpack_exports__, "purgeCache", function() { return purgeCache; });
/* harmony export (binding) */ __nested_webpack_require_135974__.d(__nested_webpack_exports__, "changeImageIdCacheSize", function() { return changeImageIdCacheSize; });
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_135974__(/*! ./events.js */ "./events.js");
/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_135974__(/*! ./triggerEvent.js */ "./triggerEvent.js");


/**
 * This module deals with caching images
 * @module ImageCache
 */

var maximumSizeInBytes = 1024 * 1024 * 1024; // 1 GB

var cacheSizeInBytes = 0; // Dictionary of imageId to cachedImage objects

var imageCacheDict = {}; // Array of cachedImage objects

var cachedImages = [];
/** Sets the maximum size of cache and purges cache contents if necessary.
 *
 * @param {number} numBytes The maximun size that the cache should occupy.
 * @returns {void}
 */

function setMaximumSizeBytes(numBytes) {
  if (numBytes === undefined) {
    throw new Error('setMaximumSizeBytes: parameter numBytes must not be undefined');
  }

  if (numBytes.toFixed === undefined) {
    throw new Error('setMaximumSizeBytes: parameter numBytes must be a number');
  }

  maximumSizeInBytes = numBytes;
  Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].IMAGE_CACHE_MAXIMUM_SIZE_CHANGED);
  purgeCacheIfNecessary();
}
/**
 * Purges the cache if size exceeds maximum
 * @returns {void}
 */

function purgeCacheIfNecessary() {
  // If max cache size has not been exceeded, do nothing
  if (cacheSizeInBytes <= maximumSizeInBytes) {
    return;
  } // Cache size has been exceeded, create list of images sorted by timeStamp
  // So we can purge the least recently used image


  function compare(a, b) {
    if (a.timeStamp > b.timeStamp) {
      return -1;
    }

    if (a.timeStamp < b.timeStamp) {
      return 1;
    }

    return 0;
  }

  cachedImages.sort(compare); // Remove images as necessary)

  while (cacheSizeInBytes > maximumSizeInBytes) {
    var lastCachedImage = cachedImages[cachedImages.length - 1];
    var imageId = lastCachedImage.imageId;
    removeImageLoadObject(imageId);
    Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].IMAGE_CACHE_PROMISE_REMOVED, {
      imageId: imageId
    });
  }

  var cacheInfo = getCacheInfo();
  Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].IMAGE_CACHE_FULL, cacheInfo);
}
/**
 * Puts a new image loader into the cache
 *
 * @param {string} imageId ImageId of the image loader
 * @param {Object} imageLoadObject The object that is loading or loaded the image
 * @returns {void}
 */


function putImageLoadObject(imageId, imageLoadObject) {
  if (imageId === undefined) {
    throw new Error('putImageLoadObject: imageId must not be undefined');
  }

  if (imageLoadObject.promise === undefined) {
    throw new Error('putImageLoadObject: imageLoadObject.promise must not be undefined');
  }

  if (imageCacheDict.hasOwnProperty(imageId) === true) {
    throw new Error('putImageLoadObject: imageId already in cache');
  }

  if (imageLoadObject.cancelFn && typeof imageLoadObject.cancelFn !== 'function') {
    throw new Error('putImageLoadObject: imageLoadObject.cancelFn must be a function');
  }

  var cachedImage = {
    loaded: false,
    imageId: imageId,
    sharedCacheKey: undefined,
    // The sharedCacheKey for this imageId.  undefined by default
    imageLoadObject: imageLoadObject,
    timeStamp: Date.now(),
    sizeInBytes: 0
  };
  imageCacheDict[imageId] = cachedImage;
  cachedImages.push(cachedImage);
  imageLoadObject.promise.then(function (image) {
    if (cachedImages.indexOf(cachedImage) === -1) {
      // If the image has been purged before being loaded, we stop here.
      return;
    }

    cachedImage.loaded = true;
    cachedImage.image = image;

    if (image.sizeInBytes === undefined) {
      throw new Error('putImageLoadObject: image.sizeInBytes must not be undefined');
    }

    if (image.sizeInBytes.toFixed === undefined) {
      throw new Error('putImageLoadObject: image.sizeInBytes is not a number');
    }

    cachedImage.sizeInBytes = image.sizeInBytes;
    cacheSizeInBytes += cachedImage.sizeInBytes;
    var eventDetails = {
      action: 'addImage',
      image: cachedImage
    };
    Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].IMAGE_CACHE_CHANGED, eventDetails);
    cachedImage.sharedCacheKey = image.sharedCacheKey;
    purgeCacheIfNecessary();
  }, function () {
    var cachedImage = imageCacheDict[imageId];
    cachedImages.splice(cachedImages.indexOf(cachedImage), 1);
    delete imageCacheDict[imageId];
  });
}
/**
 * Retuns the object that is loading a given imageId
 *
 * @param {string} imageId Image ID
 * @returns {void}
 */

function getImageLoadObject(imageId) {
  if (imageId === undefined) {
    throw new Error('getImageLoadObject: imageId must not be undefined');
  }

  var cachedImage = imageCacheDict[imageId];

  if (cachedImage === undefined) {
    return;
  } // Bump time stamp for cached image


  cachedImage.timeStamp = Date.now();
  return cachedImage.imageLoadObject;
}
/**
 * Removes the image loader associated with a given Id from the cache
 *
 * @param {string} imageId Image ID
 * @returns {void}
 */

function removeImageLoadObject(imageId) {
  if (imageId === undefined) {
    throw new Error('removeImageLoadObject: imageId must not be undefined');
  }

  var cachedImage = imageCacheDict[imageId];

  if (cachedImage === undefined) {
    throw new Error('removeImageLoadObject: imageId was not present in imageCache');
  }

  cachedImages.splice(cachedImages.indexOf(cachedImage), 1);
  cacheSizeInBytes -= cachedImage.sizeInBytes;
  var eventDetails = {
    action: 'deleteImage',
    image: cachedImage
  };
  Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].IMAGE_CACHE_CHANGED, eventDetails);
  decache(cachedImage.imageLoadObject);
  delete imageCacheDict[imageId];
}
/**
 * @typedef {Object} CacheInformation
 * @property {number} maximumSizeInBytes  The maximum size of the cache in bytes
 * @property {number} cacheSizeInBytes Currently occupied space in the cache in bytes
 * @property {number} numberOfImagesCached Number of ImageLoaders in the cache
 * @returns {void}
 */

/**
 * Gets the current state of the cache
 * @returns {void}
 */

function getCacheInfo() {
  return {
    maximumSizeInBytes: maximumSizeInBytes,
    cacheSizeInBytes: cacheSizeInBytes,
    numberOfImagesCached: cachedImages.length
  };
} // This method should only be called by `removeImageLoadObject` because it's
// The one that knows how to deal with shared cache keys and cache size.

/**
 * INTERNAL: Removes and ImageLoader from the cache
 *
 * @param {Object} imageLoadObject Image Loader Object to remove
 * @returns {void}
 */

function decache(imageLoadObject) {
  imageLoadObject.promise.then(function () {
    if (imageLoadObject.decache) {
      imageLoadObject.decache();
    }
  }, function () {
    if (imageLoadObject.decache) {
      imageLoadObject.decache();
    }
  });
}
/**
 * Removes all images from cache
 * @returns {void}
 */


function purgeCache() {
  while (cachedImages.length > 0) {
    var removedCachedImage = cachedImages[0];
    removeImageLoadObject(removedCachedImage.imageId);
  }
}
/**
 * Updates the space than an image is using in the cache
 *
 * @param {string} imageId Image ID
 * @param {number} newCacheSize New image size
 * @returns {void}
 */

function changeImageIdCacheSize(imageId, newCacheSize) {
  var cacheEntry = imageCacheDict[imageId];

  if (cacheEntry) {
    cacheEntry.imageLoadObject.promise.then(function (image) {
      var cacheSizeDifference = newCacheSize - image.sizeInBytes;
      image.sizeInBytes = newCacheSize;
      cacheEntry.sizeInBytes = newCacheSize;
      cacheSizeInBytes += cacheSizeDifference;
      var eventDetails = {
        action: 'changeImageSize',
        image: image
      };
      Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].IMAGE_CACHE_CHANGED, eventDetails);
    });
  }
}
/* harmony default export */ __nested_webpack_exports__["default"] = ({
  imageCache: imageCacheDict,
  cachedImages: cachedImages,
  setMaximumSizeBytes: setMaximumSizeBytes,
  putImageLoadObject: putImageLoadObject,
  getImageLoadObject: getImageLoadObject,
  removeImageLoadObject: removeImageLoadObject,
  getCacheInfo: getCacheInfo,
  purgeCache: purgeCache,
  changeImageIdCacheSize: changeImageIdCacheSize
});

/***/ }),

/***/ "./imageLoader.js":
/*!************************!*\
  !*** ./imageLoader.js ***!
  \************************/
/*! exports provided: loadImage, loadAndCacheImage, registerImageLoader, registerUnknownImageLoader */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_146315__) {

"use strict";
__nested_webpack_require_146315__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_146315__.d(__nested_webpack_exports__, "loadImage", function() { return loadImage; });
/* harmony export (binding) */ __nested_webpack_require_146315__.d(__nested_webpack_exports__, "loadAndCacheImage", function() { return loadAndCacheImage; });
/* harmony export (binding) */ __nested_webpack_require_146315__.d(__nested_webpack_exports__, "registerImageLoader", function() { return registerImageLoader; });
/* harmony export (binding) */ __nested_webpack_require_146315__.d(__nested_webpack_exports__, "registerUnknownImageLoader", function() { return registerUnknownImageLoader; });
/* harmony import */ var _imageCache_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_146315__(/*! ./imageCache.js */ "./imageCache.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_146315__(/*! ./events.js */ "./events.js");
/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_146315__(/*! ./triggerEvent.js */ "./triggerEvent.js");



/**
 * This module deals with ImageLoaders, loading images and caching images
 * @module ImageLoader
 */

var imageLoaders = {};
var unknownImageLoader;
/**
 * Load an image using a registered Cornerstone Image Loader.
 *
 * The image loader that is used will be
 * determined by the image loader scheme matching against the imageId.
 *
 * @param {String} imageId A Cornerstone Image Object's imageId
 * @param {Object} [options] Options to be passed to the Image Loader
 *
 * @returns {ImageLoadObject} An Object which can be used to act after an image is loaded or loading fails
 * @memberof ImageLoader
 */

function loadImageFromImageLoader(imageId, options) {
  var colonIndex = imageId.indexOf(':');
  var scheme = imageId.substring(0, colonIndex);
  var loader = imageLoaders[scheme];

  if (loader === undefined || loader === null) {
    if (unknownImageLoader !== undefined) {
      return unknownImageLoader(imageId);
    }

    throw new Error('loadImageFromImageLoader: no image loader for imageId');
  }

  var imageLoadObject = loader(imageId, options); // Broadcast an image loaded event once the image is loaded

  imageLoadObject.promise.then(function (image) {
    Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_1__["events"], _events_js__WEBPACK_IMPORTED_MODULE_1__["default"].IMAGE_LOADED, {
      image: image
    });
  }, function (error) {
    var errorObject = {
      imageId: imageId,
      error: error
    };
    Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_1__["events"], _events_js__WEBPACK_IMPORTED_MODULE_1__["default"].IMAGE_LOAD_FAILED, errorObject);
  });
  return imageLoadObject;
}
/**
 * Loads an image given an imageId and optional priority and returns a promise which will resolve to
 * the loaded image object or fail if an error occurred.  The loaded image is not stored in the cache.
 *
 * @param {String} imageId A Cornerstone Image Object's imageId
 * @param {Object} [options] Options to be passed to the Image Loader
 *
 * @returns {ImageLoadObject} An Object which can be used to act after an image is loaded or loading fails
 * @memberof ImageLoader
 */


function loadImage(imageId, options) {
  if (imageId === undefined) {
    throw new Error('loadImage: parameter imageId must not be undefined');
  }

  var imageLoadObject = Object(_imageCache_js__WEBPACK_IMPORTED_MODULE_0__["getImageLoadObject"])(imageId);

  if (imageLoadObject !== undefined) {
    return imageLoadObject.promise;
  }

  return loadImageFromImageLoader(imageId, options).promise;
} //

/**
 * Loads an image given an imageId and optional priority and returns a promise which will resolve to
 * the loaded image object or fail if an error occurred. The image is stored in the cache.
 *
 * @param {String} imageId A Cornerstone Image Object's imageId
 * @param {Object} [options] Options to be passed to the Image Loader
 *
 * @returns {ImageLoadObject} Image Loader Object
 * @memberof ImageLoader
 */

function loadAndCacheImage(imageId, options) {
  if (imageId === undefined) {
    throw new Error('loadAndCacheImage: parameter imageId must not be undefined');
  }

  var imageLoadObject = Object(_imageCache_js__WEBPACK_IMPORTED_MODULE_0__["getImageLoadObject"])(imageId);

  if (imageLoadObject !== undefined) {
    return imageLoadObject.promise;
  }

  imageLoadObject = loadImageFromImageLoader(imageId, options);
  Object(_imageCache_js__WEBPACK_IMPORTED_MODULE_0__["putImageLoadObject"])(imageId, imageLoadObject);
  return imageLoadObject.promise;
}
/**
 * Registers an imageLoader plugin with cornerstone for the specified scheme
 *
 * @param {String} scheme The scheme to use for this image loader (e.g. 'dicomweb', 'wadouri', 'http')
 * @param {Function} imageLoader A Cornerstone Image Loader function
 * @returns {void}
 * @memberof ImageLoader
 */

function registerImageLoader(scheme, imageLoader) {
  imageLoaders[scheme] = imageLoader;
}
/**
 * Registers a new unknownImageLoader and returns the previous one
 *
 * @param {Function} imageLoader A Cornerstone Image Loader
 *
 * @returns {Function|Undefined} The previous Unknown Image Loader
 * @memberof ImageLoader
 */

function registerUnknownImageLoader(imageLoader) {
  var oldImageLoader = unknownImageLoader;
  unknownImageLoader = imageLoader;
  return oldImageLoader;
}

/***/ }),

/***/ "./index.js":
/*!******************!*\
  !*** ./index.js ***!
  \******************/
/*! exports provided: drawImage, generateLut, getDefaultViewport, setDefaultViewport, requestAnimationFrame, storedPixelDataToCanvasImageData, storedColorPixelDataToCanvasImageData, storedPixelDataToCanvasImageDataColorLUT, storedPixelDataToCanvasImageDataPseudocolorLUT, internal, renderLabelMapImage, renderPseudoColorImage, renderColorImage, renderGrayscaleImage, renderWebImage, renderToCanvas, canvasToPixel, disable, displayImage, draw, drawInvalidated, enable, getElementData, removeElementData, getEnabledElement, addEnabledElement, getEnabledElementsByImageId, getEnabledElements, addLayer, removeLayer, getLayer, getLayers, getVisibleLayers, setActiveLayer, getActiveLayer, purgeLayers, setLayerImage, fitToWindow, getDefaultViewportForImage, getDisplayedArea, getImage, getPixels, getStoredPixels, getViewport, loadImage, loadAndCacheImage, registerImageLoader, registerUnknownImageLoader, invalidate, invalidateImageId, pageToPixel, pixelToCanvas, reset, resize, setToPixelCoordinateSystem, setViewport, updateImage, pixelDataToFalseColorData, rendering, imageCache, metaData, webGL, colors, convertImageToFalseColorImage, convertToFalseColorImage, restoreImage, EVENTS, events, triggerEvent, imageLoadPoolManager, imageRetrievalPoolManager, RequestPoolManager, default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_153216__) {

"use strict";
__nested_webpack_require_153216__.r(__nested_webpack_exports__);
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_153216__(/*! ./events.js */ "./events.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "EVENTS", function() { return _events_js__WEBPACK_IMPORTED_MODULE_0__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "events", function() { return _events_js__WEBPACK_IMPORTED_MODULE_0__["events"]; });

/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_153216__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "getEnabledElement", function() { return _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"]; });

/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "addEnabledElement", function() { return _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["addEnabledElement"]; });

/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "getEnabledElementsByImageId", function() { return _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElementsByImageId"]; });

/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "getEnabledElements", function() { return _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElements"]; });

/* harmony import */ var _layers_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_153216__(/*! ./layers.js */ "./layers.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "addLayer", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_2__["addLayer"]; });

/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "removeLayer", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_2__["removeLayer"]; });

/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "getLayer", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_2__["getLayer"]; });

/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "getLayers", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_2__["getLayers"]; });

/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "getVisibleLayers", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_2__["getVisibleLayers"]; });

/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "setActiveLayer", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_2__["setActiveLayer"]; });

/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "getActiveLayer", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_2__["getActiveLayer"]; });

/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "purgeLayers", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_2__["purgeLayers"]; });

/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "setLayerImage", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_2__["setLayerImage"]; });

/* harmony import */ var _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_153216__(/*! ./falseColorMapping.js */ "./falseColorMapping.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "convertImageToFalseColorImage", function() { return _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_3__["convertImageToFalseColorImage"]; });

/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "convertToFalseColorImage", function() { return _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_3__["convertToFalseColorImage"]; });

/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "restoreImage", function() { return _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_3__["restoreImage"]; });

/* harmony import */ var _enabledElementData_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_153216__(/*! ./enabledElementData.js */ "./enabledElementData.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "getElementData", function() { return _enabledElementData_js__WEBPACK_IMPORTED_MODULE_4__["getElementData"]; });

/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "removeElementData", function() { return _enabledElementData_js__WEBPACK_IMPORTED_MODULE_4__["removeElementData"]; });

/* harmony import */ var _imageLoader_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_153216__(/*! ./imageLoader.js */ "./imageLoader.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "loadImage", function() { return _imageLoader_js__WEBPACK_IMPORTED_MODULE_5__["loadImage"]; });

/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "loadAndCacheImage", function() { return _imageLoader_js__WEBPACK_IMPORTED_MODULE_5__["loadAndCacheImage"]; });

/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "registerImageLoader", function() { return _imageLoader_js__WEBPACK_IMPORTED_MODULE_5__["registerImageLoader"]; });

/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "registerUnknownImageLoader", function() { return _imageLoader_js__WEBPACK_IMPORTED_MODULE_5__["registerUnknownImageLoader"]; });

/* harmony import */ var _requestPool_imageLoadPoolManager_ts__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_153216__(/*! ./requestPool/imageLoadPoolManager.ts */ "./requestPool/imageLoadPoolManager.ts");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "imageLoadPoolManager", function() { return _requestPool_imageLoadPoolManager_ts__WEBPACK_IMPORTED_MODULE_6__["default"]; });

/* harmony import */ var _requestPool_imageRetrievalPoolManager_ts__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_153216__(/*! ./requestPool/imageRetrievalPoolManager.ts */ "./requestPool/imageRetrievalPoolManager.ts");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "imageRetrievalPoolManager", function() { return _requestPool_imageRetrievalPoolManager_ts__WEBPACK_IMPORTED_MODULE_7__["default"]; });

/* harmony import */ var _requestPool_RequestPoolManager_ts__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_153216__(/*! ./requestPool/RequestPoolManager.ts */ "./requestPool/RequestPoolManager.ts");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "RequestPoolManager", function() { return _requestPool_RequestPoolManager_ts__WEBPACK_IMPORTED_MODULE_8__["RequestPoolManager"]; });

/* harmony import */ var _canvasToPixel_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_153216__(/*! ./canvasToPixel.js */ "./canvasToPixel.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "canvasToPixel", function() { return _canvasToPixel_js__WEBPACK_IMPORTED_MODULE_9__["default"]; });

/* harmony import */ var _colors_index_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_153216__(/*! ./colors/index.js */ "./colors/index.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "colors", function() { return _colors_index_js__WEBPACK_IMPORTED_MODULE_10__["default"]; });

/* harmony import */ var _disable_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_153216__(/*! ./disable.js */ "./disable.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "disable", function() { return _disable_js__WEBPACK_IMPORTED_MODULE_11__["default"]; });

/* harmony import */ var _displayImage_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_153216__(/*! ./displayImage.js */ "./displayImage.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "displayImage", function() { return _displayImage_js__WEBPACK_IMPORTED_MODULE_12__["default"]; });

/* harmony import */ var _draw_js__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_153216__(/*! ./draw.js */ "./draw.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "draw", function() { return _draw_js__WEBPACK_IMPORTED_MODULE_13__["default"]; });

/* harmony import */ var _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_153216__(/*! ./internal/drawImage.js */ "./internal/drawImage.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "drawImage", function() { return _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_14__["default"]; });

/* harmony import */ var _drawInvalidated_js__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_153216__(/*! ./drawInvalidated.js */ "./drawInvalidated.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "drawInvalidated", function() { return _drawInvalidated_js__WEBPACK_IMPORTED_MODULE_15__["default"]; });

/* harmony import */ var _enable_js__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_153216__(/*! ./enable.js */ "./enable.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "enable", function() { return _enable_js__WEBPACK_IMPORTED_MODULE_16__["default"]; });

/* harmony import */ var _fitToWindow_js__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_153216__(/*! ./fitToWindow.js */ "./fitToWindow.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "fitToWindow", function() { return _fitToWindow_js__WEBPACK_IMPORTED_MODULE_17__["default"]; });

/* harmony import */ var _internal_generateLut_js__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_153216__(/*! ./internal/generateLut.js */ "./internal/generateLut.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "generateLut", function() { return _internal_generateLut_js__WEBPACK_IMPORTED_MODULE_18__["default"]; });

/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_153216__(/*! ./internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "getDefaultViewport", function() { return _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_19__["default"]; });

/* harmony import */ var _getDefaultViewportForImage_js__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_153216__(/*! ./getDefaultViewportForImage.js */ "./getDefaultViewportForImage.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "getDefaultViewportForImage", function() { return _getDefaultViewportForImage_js__WEBPACK_IMPORTED_MODULE_20__["default"]; });

/* harmony import */ var _internal_getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_21__ = __nested_webpack_require_153216__(/*! ./internal/getDisplayedArea.js */ "./internal/getDisplayedArea.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "getDisplayedArea", function() { return _internal_getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_21__["default"]; });

/* harmony import */ var _getImage_js__WEBPACK_IMPORTED_MODULE_22__ = __nested_webpack_require_153216__(/*! ./getImage.js */ "./getImage.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "getImage", function() { return _getImage_js__WEBPACK_IMPORTED_MODULE_22__["default"]; });

/* harmony import */ var _getPixels_js__WEBPACK_IMPORTED_MODULE_23__ = __nested_webpack_require_153216__(/*! ./getPixels.js */ "./getPixels.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "getPixels", function() { return _getPixels_js__WEBPACK_IMPORTED_MODULE_23__["default"]; });

/* harmony import */ var _getStoredPixels_js__WEBPACK_IMPORTED_MODULE_24__ = __nested_webpack_require_153216__(/*! ./getStoredPixels.js */ "./getStoredPixels.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "getStoredPixels", function() { return _getStoredPixels_js__WEBPACK_IMPORTED_MODULE_24__["default"]; });

/* harmony import */ var _getViewport_js__WEBPACK_IMPORTED_MODULE_25__ = __nested_webpack_require_153216__(/*! ./getViewport.js */ "./getViewport.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "getViewport", function() { return _getViewport_js__WEBPACK_IMPORTED_MODULE_25__["default"]; });

/* harmony import */ var _imageCache_js__WEBPACK_IMPORTED_MODULE_26__ = __nested_webpack_require_153216__(/*! ./imageCache.js */ "./imageCache.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "imageCache", function() { return _imageCache_js__WEBPACK_IMPORTED_MODULE_26__["default"]; });

/* harmony import */ var _internal_index_js__WEBPACK_IMPORTED_MODULE_27__ = __nested_webpack_require_153216__(/*! ./internal/index.js */ "./internal/index.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "internal", function() { return _internal_index_js__WEBPACK_IMPORTED_MODULE_27__["default"]; });

/* harmony import */ var _invalidate_js__WEBPACK_IMPORTED_MODULE_28__ = __nested_webpack_require_153216__(/*! ./invalidate.js */ "./invalidate.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "invalidate", function() { return _invalidate_js__WEBPACK_IMPORTED_MODULE_28__["default"]; });

/* harmony import */ var _invalidateImageId_js__WEBPACK_IMPORTED_MODULE_29__ = __nested_webpack_require_153216__(/*! ./invalidateImageId.js */ "./invalidateImageId.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "invalidateImageId", function() { return _invalidateImageId_js__WEBPACK_IMPORTED_MODULE_29__["default"]; });

/* harmony import */ var _metaData_js__WEBPACK_IMPORTED_MODULE_30__ = __nested_webpack_require_153216__(/*! ./metaData.js */ "./metaData.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "metaData", function() { return _metaData_js__WEBPACK_IMPORTED_MODULE_30__["default"]; });

/* harmony import */ var _pageToPixel_js__WEBPACK_IMPORTED_MODULE_31__ = __nested_webpack_require_153216__(/*! ./pageToPixel.js */ "./pageToPixel.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "pageToPixel", function() { return _pageToPixel_js__WEBPACK_IMPORTED_MODULE_31__["default"]; });

/* harmony import */ var _pixelDataToFalseColorData_js__WEBPACK_IMPORTED_MODULE_32__ = __nested_webpack_require_153216__(/*! ./pixelDataToFalseColorData.js */ "./pixelDataToFalseColorData.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "pixelDataToFalseColorData", function() { return _pixelDataToFalseColorData_js__WEBPACK_IMPORTED_MODULE_32__["default"]; });

/* harmony import */ var _pixelToCanvas_js__WEBPACK_IMPORTED_MODULE_33__ = __nested_webpack_require_153216__(/*! ./pixelToCanvas.js */ "./pixelToCanvas.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "pixelToCanvas", function() { return _pixelToCanvas_js__WEBPACK_IMPORTED_MODULE_33__["default"]; });

/* harmony import */ var _rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_34__ = __nested_webpack_require_153216__(/*! ./rendering/renderColorImage.js */ "./rendering/renderColorImage.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "renderColorImage", function() { return _rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_34__["renderColorImage"]; });

/* harmony import */ var _rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_35__ = __nested_webpack_require_153216__(/*! ./rendering/renderGrayscaleImage.js */ "./rendering/renderGrayscaleImage.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "renderGrayscaleImage", function() { return _rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_35__["renderGrayscaleImage"]; });

/* harmony import */ var _rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_36__ = __nested_webpack_require_153216__(/*! ./rendering/renderLabelMapImage.js */ "./rendering/renderLabelMapImage.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "renderLabelMapImage", function() { return _rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_36__["renderLabelMapImage"]; });

/* harmony import */ var _rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_37__ = __nested_webpack_require_153216__(/*! ./rendering/renderPseudoColorImage.js */ "./rendering/renderPseudoColorImage.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "renderPseudoColorImage", function() { return _rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_37__["renderPseudoColorImage"]; });

/* harmony import */ var _rendering_renderToCanvas_js__WEBPACK_IMPORTED_MODULE_38__ = __nested_webpack_require_153216__(/*! ./rendering/renderToCanvas.js */ "./rendering/renderToCanvas.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "renderToCanvas", function() { return _rendering_renderToCanvas_js__WEBPACK_IMPORTED_MODULE_38__["default"]; });

/* harmony import */ var _rendering_renderWebImage_js__WEBPACK_IMPORTED_MODULE_39__ = __nested_webpack_require_153216__(/*! ./rendering/renderWebImage.js */ "./rendering/renderWebImage.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "renderWebImage", function() { return _rendering_renderWebImage_js__WEBPACK_IMPORTED_MODULE_39__["renderWebImage"]; });

/* harmony import */ var _rendering_index_js__WEBPACK_IMPORTED_MODULE_40__ = __nested_webpack_require_153216__(/*! ./rendering/index.js */ "./rendering/index.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "rendering", function() { return _rendering_index_js__WEBPACK_IMPORTED_MODULE_40__["default"]; });

/* harmony import */ var _internal_requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_41__ = __nested_webpack_require_153216__(/*! ./internal/requestAnimationFrame.js */ "./internal/requestAnimationFrame.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "requestAnimationFrame", function() { return _internal_requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_41__["default"]; });

/* harmony import */ var _reset_js__WEBPACK_IMPORTED_MODULE_42__ = __nested_webpack_require_153216__(/*! ./reset.js */ "./reset.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "reset", function() { return _reset_js__WEBPACK_IMPORTED_MODULE_42__["default"]; });

/* harmony import */ var _resize_js__WEBPACK_IMPORTED_MODULE_43__ = __nested_webpack_require_153216__(/*! ./resize.js */ "./resize.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "resize", function() { return _resize_js__WEBPACK_IMPORTED_MODULE_43__["default"]; });

/* harmony import */ var _internal_setDefaultViewport_js__WEBPACK_IMPORTED_MODULE_44__ = __nested_webpack_require_153216__(/*! ./internal/setDefaultViewport.js */ "./internal/setDefaultViewport.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "setDefaultViewport", function() { return _internal_setDefaultViewport_js__WEBPACK_IMPORTED_MODULE_44__["default"]; });

/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_45__ = __nested_webpack_require_153216__(/*! ./setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "setToPixelCoordinateSystem", function() { return _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_45__["default"]; });

/* harmony import */ var _setViewport_js__WEBPACK_IMPORTED_MODULE_46__ = __nested_webpack_require_153216__(/*! ./setViewport.js */ "./setViewport.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "setViewport", function() { return _setViewport_js__WEBPACK_IMPORTED_MODULE_46__["default"]; });

/* harmony import */ var _internal_storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_47__ = __nested_webpack_require_153216__(/*! ./internal/storedColorPixelDataToCanvasImageData.js */ "./internal/storedColorPixelDataToCanvasImageData.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "storedColorPixelDataToCanvasImageData", function() { return _internal_storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_47__["default"]; });

/* harmony import */ var _internal_storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_48__ = __nested_webpack_require_153216__(/*! ./internal/storedPixelDataToCanvasImageData.js */ "./internal/storedPixelDataToCanvasImageData.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "storedPixelDataToCanvasImageData", function() { return _internal_storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_48__["default"]; });

/* harmony import */ var _internal_storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_49__ = __nested_webpack_require_153216__(/*! ./internal/storedPixelDataToCanvasImageDataColorLUT.js */ "./internal/storedPixelDataToCanvasImageDataColorLUT.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "storedPixelDataToCanvasImageDataColorLUT", function() { return _internal_storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_49__["default"]; });

/* harmony import */ var _internal_storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_50__ = __nested_webpack_require_153216__(/*! ./internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js */ "./internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "storedPixelDataToCanvasImageDataPseudocolorLUT", function() { return _internal_storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_50__["default"]; });

/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_51__ = __nested_webpack_require_153216__(/*! ./triggerEvent.js */ "./triggerEvent.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "triggerEvent", function() { return _triggerEvent_js__WEBPACK_IMPORTED_MODULE_51__["default"]; });

/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_52__ = __nested_webpack_require_153216__(/*! ./updateImage.js */ "./updateImage.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "updateImage", function() { return _updateImage_js__WEBPACK_IMPORTED_MODULE_52__["default"]; });

/* harmony import */ var _webgl_index_js__WEBPACK_IMPORTED_MODULE_53__ = __nested_webpack_require_153216__(/*! ./webgl/index.js */ "./webgl/index.js");
/* harmony reexport (safe) */ __nested_webpack_require_153216__.d(__nested_webpack_exports__, "webGL", function() { return _webgl_index_js__WEBPACK_IMPORTED_MODULE_53__["default"]; });

// Internal (some of these are from old internal/legacy expose)





















































 // Rendering

/**
 * @module PixelCoordinateSystem
 */

/**
 * @module ViewportSettings
 */

var cornerstone = {
  drawImage: _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_14__["default"],
  generateLut: _internal_generateLut_js__WEBPACK_IMPORTED_MODULE_18__["default"],
  getDefaultViewport: _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_19__["default"],
  requestAnimationFrame: _internal_requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_41__["default"],
  storedPixelDataToCanvasImageData: _internal_storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_48__["default"],
  storedColorPixelDataToCanvasImageData: _internal_storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_47__["default"],
  storedPixelDataToCanvasImageDataColorLUT: _internal_storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_49__["default"],
  storedPixelDataToCanvasImageDataPseudocolorLUT: _internal_storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_50__["default"],
  internal: _internal_index_js__WEBPACK_IMPORTED_MODULE_27__["default"],
  renderLabelMapImage: _rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_36__["renderLabelMapImage"],
  renderPseudoColorImage: _rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_37__["renderPseudoColorImage"],
  renderColorImage: _rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_34__["renderColorImage"],
  renderGrayscaleImage: _rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_35__["renderGrayscaleImage"],
  renderWebImage: _rendering_renderWebImage_js__WEBPACK_IMPORTED_MODULE_39__["renderWebImage"],
  renderToCanvas: _rendering_renderToCanvas_js__WEBPACK_IMPORTED_MODULE_38__["default"],
  canvasToPixel: _canvasToPixel_js__WEBPACK_IMPORTED_MODULE_9__["default"],
  disable: _disable_js__WEBPACK_IMPORTED_MODULE_11__["default"],
  displayImage: _displayImage_js__WEBPACK_IMPORTED_MODULE_12__["default"],
  draw: _draw_js__WEBPACK_IMPORTED_MODULE_13__["default"],
  drawInvalidated: _drawInvalidated_js__WEBPACK_IMPORTED_MODULE_15__["default"],
  enable: _enable_js__WEBPACK_IMPORTED_MODULE_16__["default"],
  getElementData: _enabledElementData_js__WEBPACK_IMPORTED_MODULE_4__["getElementData"],
  removeElementData: _enabledElementData_js__WEBPACK_IMPORTED_MODULE_4__["removeElementData"],
  getEnabledElement: _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"],
  addEnabledElement: _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["addEnabledElement"],
  getEnabledElementsByImageId: _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElementsByImageId"],
  getEnabledElements: _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElements"],
  addLayer: _layers_js__WEBPACK_IMPORTED_MODULE_2__["addLayer"],
  removeLayer: _layers_js__WEBPACK_IMPORTED_MODULE_2__["removeLayer"],
  getLayer: _layers_js__WEBPACK_IMPORTED_MODULE_2__["getLayer"],
  getLayers: _layers_js__WEBPACK_IMPORTED_MODULE_2__["getLayers"],
  getVisibleLayers: _layers_js__WEBPACK_IMPORTED_MODULE_2__["getVisibleLayers"],
  setActiveLayer: _layers_js__WEBPACK_IMPORTED_MODULE_2__["setActiveLayer"],
  getActiveLayer: _layers_js__WEBPACK_IMPORTED_MODULE_2__["getActiveLayer"],
  purgeLayers: _layers_js__WEBPACK_IMPORTED_MODULE_2__["purgeLayers"],
  setLayerImage: _layers_js__WEBPACK_IMPORTED_MODULE_2__["setLayerImage"],
  fitToWindow: _fitToWindow_js__WEBPACK_IMPORTED_MODULE_17__["default"],
  getDefaultViewportForImage: _getDefaultViewportForImage_js__WEBPACK_IMPORTED_MODULE_20__["default"],
  getDisplayedArea: _internal_getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_21__["default"],
  setDefaultViewport: _internal_setDefaultViewport_js__WEBPACK_IMPORTED_MODULE_44__["default"],
  getImage: _getImage_js__WEBPACK_IMPORTED_MODULE_22__["default"],
  getPixels: _getPixels_js__WEBPACK_IMPORTED_MODULE_23__["default"],
  getStoredPixels: _getStoredPixels_js__WEBPACK_IMPORTED_MODULE_24__["default"],
  getViewport: _getViewport_js__WEBPACK_IMPORTED_MODULE_25__["default"],
  loadImage: _imageLoader_js__WEBPACK_IMPORTED_MODULE_5__["loadImage"],
  loadAndCacheImage: _imageLoader_js__WEBPACK_IMPORTED_MODULE_5__["loadAndCacheImage"],
  registerImageLoader: _imageLoader_js__WEBPACK_IMPORTED_MODULE_5__["registerImageLoader"],
  registerUnknownImageLoader: _imageLoader_js__WEBPACK_IMPORTED_MODULE_5__["registerUnknownImageLoader"],
  invalidate: _invalidate_js__WEBPACK_IMPORTED_MODULE_28__["default"],
  invalidateImageId: _invalidateImageId_js__WEBPACK_IMPORTED_MODULE_29__["default"],
  pageToPixel: _pageToPixel_js__WEBPACK_IMPORTED_MODULE_31__["default"],
  pixelToCanvas: _pixelToCanvas_js__WEBPACK_IMPORTED_MODULE_33__["default"],
  reset: _reset_js__WEBPACK_IMPORTED_MODULE_42__["default"],
  resize: _resize_js__WEBPACK_IMPORTED_MODULE_43__["default"],
  setToPixelCoordinateSystem: _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_45__["default"],
  setViewport: _setViewport_js__WEBPACK_IMPORTED_MODULE_46__["default"],
  updateImage: _updateImage_js__WEBPACK_IMPORTED_MODULE_52__["default"],
  pixelDataToFalseColorData: _pixelDataToFalseColorData_js__WEBPACK_IMPORTED_MODULE_32__["default"],
  rendering: _rendering_index_js__WEBPACK_IMPORTED_MODULE_40__["default"],
  imageCache: _imageCache_js__WEBPACK_IMPORTED_MODULE_26__["default"],
  metaData: _metaData_js__WEBPACK_IMPORTED_MODULE_30__["default"],
  webGL: _webgl_index_js__WEBPACK_IMPORTED_MODULE_53__["default"],
  colors: _colors_index_js__WEBPACK_IMPORTED_MODULE_10__["default"],
  convertImageToFalseColorImage: _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_3__["convertImageToFalseColorImage"],
  convertToFalseColorImage: _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_3__["convertToFalseColorImage"],
  restoreImage: _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_3__["restoreImage"],
  EVENTS: _events_js__WEBPACK_IMPORTED_MODULE_0__["default"],
  events: _events_js__WEBPACK_IMPORTED_MODULE_0__["events"],
  triggerEvent: _triggerEvent_js__WEBPACK_IMPORTED_MODULE_51__["default"],
  imageLoadPoolManager: _requestPool_imageLoadPoolManager_ts__WEBPACK_IMPORTED_MODULE_6__["default"],
  imageRetrievalPoolManager: _requestPool_imageRetrievalPoolManager_ts__WEBPACK_IMPORTED_MODULE_7__["default"],
  RequestPoolManager: _requestPool_RequestPoolManager_ts__WEBPACK_IMPORTED_MODULE_8__["RequestPoolManager"]
};

/* harmony default export */ __nested_webpack_exports__["default"] = (cornerstone);

/***/ }),

/***/ "./internal/calculateTransform.js":
/*!****************************************!*\
  !*** ./internal/calculateTransform.js ***!
  \****************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_182135__) {

"use strict";
__nested_webpack_require_182135__.r(__nested_webpack_exports__);
/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_182135__(/*! ./transform.js */ "./internal/transform.js");
/* harmony import */ var _getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_182135__(/*! ./getDisplayedArea.js */ "./internal/getDisplayedArea.js");


/**
 * Calculate the transform for a Cornerstone enabled element
 *
 * @param {EnabledElement} enabledElement The Cornerstone Enabled Element
 * @param {Number} [scale] The viewport scale
 * @return {Transform} The current transform
 * @memberof Internal
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (enabledElement, scale) {
  var transform = new _transform_js__WEBPACK_IMPORTED_MODULE_0__["Transform"](); // Move to center of canvas

  transform.translate(enabledElement.canvas.width / 2, enabledElement.canvas.height / 2); // Apply the rotation before scaling for non square pixels

  var angle = enabledElement.viewport.rotation;

  if (angle !== 0) {
    transform.rotate(angle * Math.PI / 180);
  } // Apply the scale


  var widthScale = enabledElement.viewport.scale;
  var heightScale = enabledElement.viewport.scale;
  var imageDisplayedArea = Object(_getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement.image, enabledElement.viewport);
  var offsetX = imageDisplayedArea.tlhc.x - 1;
  var offsetY = imageDisplayedArea.tlhc.y - 1;
  var width = imageDisplayedArea.brhc.x - offsetX;
  var height = imageDisplayedArea.brhc.y - offsetY;

  if (imageDisplayedArea.presentationSizeMode === 'NONE') {
    if (enabledElement.image.rowPixelSpacing < enabledElement.image.columnPixelSpacing) {
      widthScale *= enabledElement.image.columnPixelSpacing / enabledElement.image.rowPixelSpacing;
    } else if (enabledElement.image.columnPixelSpacing < enabledElement.image.rowPixelSpacing) {
      heightScale *= enabledElement.image.rowPixelSpacing / enabledElement.image.columnPixelSpacing;
    }
  } else {
    // These should be good for "TRUE SIZE" and "MAGNIFY"
    widthScale = imageDisplayedArea.columnPixelSpacing;
    heightScale = imageDisplayedArea.rowPixelSpacing;

    if (imageDisplayedArea.presentationSizeMode === 'SCALE TO FIT') {
      // Fit TRUE IMAGE image (width/height) to window
      var verticalScale = enabledElement.canvas.height / (height * heightScale);
      var horizontalScale = enabledElement.canvas.width / (width * widthScale); // Apply new scale

      widthScale = heightScale = Math.min(horizontalScale, verticalScale);

      if (imageDisplayedArea.rowPixelSpacing < imageDisplayedArea.columnPixelSpacing) {
        widthScale *= imageDisplayedArea.columnPixelSpacing / imageDisplayedArea.rowPixelSpacing;
      } else if (imageDisplayedArea.columnPixelSpacing < imageDisplayedArea.rowPixelSpacing) {
        heightScale *= imageDisplayedArea.rowPixelSpacing / imageDisplayedArea.columnPixelSpacing;
      }
    }
  }

  transform.scale(widthScale, heightScale); // Unrotate to so we can translate unrotated

  if (angle !== 0) {
    transform.rotate(-angle * Math.PI / 180);
  } // Apply the pan offset


  transform.translate(enabledElement.viewport.translation.x, enabledElement.viewport.translation.y); // Rotate again so we can apply general scale

  if (angle !== 0) {
    transform.rotate(angle * Math.PI / 180);
  }

  if (scale !== undefined) {
    // Apply the font scale
    transform.scale(scale, scale);
  } // Apply Flip if required


  if (enabledElement.viewport.hflip) {
    transform.scale(-1, 1);
  }

  if (enabledElement.viewport.vflip) {
    transform.scale(1, -1);
  } // Move back from center of image


  transform.translate(-width / 2, -height / 2); // Move to displayedArea

  transform.translate(-offsetX, -offsetY);
  return transform;
});

/***/ }),

/***/ "./internal/computeAutoVoi.js":
/*!************************************!*\
  !*** ./internal/computeAutoVoi.js ***!
  \************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_186239__) {

"use strict";
__nested_webpack_require_186239__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_186239__.d(__nested_webpack_exports__, "default", function() { return computeAutoVoi; });
/**
 * Computes the VOI to display all the pixels if no VOI LUT data (Window Width/Window Center or voiLUT) exists on the viewport object.
 *
 * @param {Viewport} viewport - Object containing the viewport properties
 * @param {Object} image An Image loaded by a Cornerstone Image Loader
 * @returns {void}
 * @memberof Internal
 */
function computeAutoVoi(viewport, image) {
  if (hasVoi(viewport)) {
    return;
  }

  var maxVoi = image.maxPixelValue * image.slope + image.intercept;
  var minVoi = image.minPixelValue * image.slope + image.intercept;
  var ww = maxVoi - minVoi;
  var wc = (maxVoi + minVoi) / 2;

  if (viewport.voi === undefined) {
    viewport.voi = {
      windowWidth: ww,
      windowCenter: wc
    };
  } else {
    viewport.voi.windowWidth = ww;
    viewport.voi.windowCenter = wc;
  }
}
/**
 * Check if viewport has voi LUT data
 * @param {any} viewport The viewport to check for voi LUT data
 * @returns {Boolean} true viewport has LUT data (Window Width/Window Center or voiLUT). Otherwise, false.
 * @memberof Internal
 */

function hasVoi(viewport) {
  var hasLut = viewport.voiLUT && viewport.voiLUT.lut && viewport.voiLUT.lut.length > 0;
  return hasLut || viewport.voi.windowWidth !== undefined && viewport.voi.windowCenter !== undefined;
}

/***/ }),

/***/ "./internal/createViewport.js":
/*!************************************!*\
  !*** ./internal/createViewport.js ***!
  \************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_187975__) {

"use strict";
__nested_webpack_require_187975__.r(__nested_webpack_exports__);
/* harmony import */ var _setDefaultViewport_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_187975__(/*! ./setDefaultViewport.js */ "./internal/setDefaultViewport.js");

/**
 * Creates a new viewport object containing default values
 *
 * @returns {Viewport} viewport object
 * @memberof Internal
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function () {
  var initialDefaultViewport = {
    scale: 1,
    translation: {
      x: 0,
      y: 0
    },
    voi: {
      windowWidth: undefined,
      windowCenter: undefined
    },
    invert: false,
    pixelReplication: false,
    rotation: 0,
    hflip: false,
    vflip: false,
    modalityLUT: undefined,
    voiLUT: undefined,
    colormap: undefined,
    labelmap: false,
    displayedArea: undefined
  };
  return Object.assign({}, initialDefaultViewport, _setDefaultViewport_js__WEBPACK_IMPORTED_MODULE_0__["state"].viewport);
});

/***/ }),

/***/ "./internal/drawCompositeImage.js":
/*!****************************************!*\
  !*** ./internal/drawCompositeImage.js ***!
  \****************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_189236__) {

"use strict";
__nested_webpack_require_189236__.r(__nested_webpack_exports__);
/* harmony import */ var _layers_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_189236__(/*! ../layers.js */ "./layers.js");
/* harmony import */ var _rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_189236__(/*! ../rendering/renderGrayscaleImage.js */ "./rendering/renderGrayscaleImage.js");
/* harmony import */ var _rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_189236__(/*! ../rendering/renderColorImage.js */ "./rendering/renderColorImage.js");
/* harmony import */ var _rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_189236__(/*! ../rendering/renderPseudoColorImage.js */ "./rendering/renderPseudoColorImage.js");
/* harmony import */ var _rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_189236__(/*! ../rendering/renderLabelMapImage.js */ "./rendering/renderLabelMapImage.js");
/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_189236__(/*! ../setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js");
/* harmony import */ var _getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_189236__(/*! ./getDisplayedArea.js */ "./internal/getDisplayedArea.js");








function getViewportRatio(baseLayer, targetLayer) {
  if (!baseLayer.syncProps) {
    updateLayerSyncProps(baseLayer);
  }

  if (!targetLayer.syncProps) {
    updateLayerSyncProps(targetLayer);
  }

  return targetLayer.syncProps.originalScale / baseLayer.syncProps.originalScale;
}

function updateLayerSyncProps(layer) {
  var syncProps = layer.syncProps || {}; // This is used to keep each of the layers' viewports in sync with the active layer

  syncProps.originalScale = layer.viewport.scale;
  layer.syncProps = syncProps;
} // Sync all viewports based on active layer's viewport


function syncViewports(layers, activeLayer) {
  // If we intend to keep the viewport's scale, translation and rotation in sync,
  // loop through the layers
  layers.forEach(function (layer) {
    // Don't do anything to the active layer
    // Don't do anything if this layer has no viewport
    if (layer === activeLayer || !layer.viewport || !activeLayer.viewport) {
      return;
    }

    if (!layer.syncProps) {
      updateLayerSyncProps(layer);
    }

    var viewportRatio = getViewportRatio(activeLayer, layer); // Update the layer's translation and scale to keep them in sync with the first image
    // based on the ratios between the images

    layer.viewport.scale = activeLayer.viewport.scale * viewportRatio;
    layer.viewport.rotation = activeLayer.viewport.rotation;
    layer.viewport.translation = {
      x: activeLayer.viewport.translation.x / viewportRatio,
      y: activeLayer.viewport.translation.y / viewportRatio
    };
    layer.viewport.hflip = activeLayer.viewport.hflip;
    layer.viewport.vflip = activeLayer.viewport.vflip;
  });
}
/**
 * Internal function to render all layers for a Cornerstone enabled element
 *
 * @param {CanvasRenderingContext2D} context Canvas context to draw upon
 * @param {EnabledElementLayer[]} layers The array of all layers for this enabled element
 * @param {Boolean} invalidated A boolean whether or not this image has been invalidated and must be redrawn
 * @returns {void}
 * @memberof Internal
 */


function renderLayers(context, layers, invalidated) {
  // Loop through each layer and draw it to the canvas
  layers.forEach(function (layer, index) {
    if (!layer.image) {
      return;
    }

    context.save(); // Set the layer's canvas to the pixel coordinate system

    layer.canvas = context.canvas;
    Object(_setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_5__["default"])(layer, context); // Render into the layer's canvas

    var colormap = layer.viewport.colormap || layer.options.colormap;
    var labelmap = layer.viewport.labelmap;
    var isInvalid = layer.invalid || invalidated;

    if (colormap && colormap !== '' && labelmap === true) {
      Object(_rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_4__["addLabelMapLayer"])(layer, isInvalid);
    } else if (colormap && colormap !== '') {
      Object(_rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_3__["addPseudoColorLayer"])(layer, isInvalid);
    } else if (layer.image.color === true) {
      Object(_rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_2__["addColorLayer"])(layer, isInvalid);
    } else {
      // If this is the base layer, use the alpha channel for rendering of the grayscale image
      var useAlphaChannel = index === 0;
      Object(_rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_1__["addGrayscaleLayer"])(layer, isInvalid, useAlphaChannel);
    } // Apply any global opacity settings that have been defined for this layer


    if (layer.options && layer.options.opacity) {
      context.globalAlpha = layer.options.opacity;
    } else {
      context.globalAlpha = 1;
    }

    if (layer.options && layer.options.fillStyle) {
      context.fillStyle = layer.options.fillStyle;
    } // Set the pixelReplication property before drawing from the layer into the
    // composite canvas


    context.imageSmoothingEnabled = !layer.viewport.pixelReplication;
    context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; // Draw from the current layer's canvas onto the enabled element's canvas

    var layerDisplayedArea = Object(_getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_6__["default"])(layer.image, layer.viewport);
    var sx = layerDisplayedArea.tlhc.x - 1;
    var sy = layerDisplayedArea.tlhc.y - 1;
    var width = layerDisplayedArea.brhc.x - sx;
    var height = layerDisplayedArea.brhc.y - sy;
    context.drawImage(layer.canvas, sx, sy, width, height, sx, sy, width, height);
    context.restore();
    layer.invalid = false;
  });
}
/**
 * Internal API function to draw a composite image to a given enabled element
 *
 * @param {EnabledElement} enabledElement An enabled element to draw into
 * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
 * @returns {void}
 */


/* harmony default export */ __nested_webpack_exports__["default"] = (function (enabledElement, invalidated) {
  var element = enabledElement.element;
  var allLayers = Object(_layers_js__WEBPACK_IMPORTED_MODULE_0__["getLayers"])(element);
  var activeLayer = Object(_layers_js__WEBPACK_IMPORTED_MODULE_0__["getActiveLayer"])(element);
  var visibleLayers = Object(_layers_js__WEBPACK_IMPORTED_MODULE_0__["getVisibleLayers"])(element);
  var resynced = !enabledElement.lastSyncViewportsState && enabledElement.syncViewports; // This state will help us to determine if the user has re-synced the
  // layers allowing us to make a new copy of the viewports

  enabledElement.lastSyncViewportsState = enabledElement.syncViewports; // Stores a copy of all viewports if the user has just synced them then we can use the
  // copies to calculate anything later (ratio, translation offset, rotation offset, etc)

  if (resynced) {
    allLayers.forEach(function (layer) {
      if (layer.viewport) {
        updateLayerSyncProps(layer);
      }
    });
  } // Sync all viewports in case it's activated


  if (enabledElement.syncViewports === true) {
    syncViewports(visibleLayers, activeLayer);
  } // Get the enabled element's canvas so we can draw to it


  var context = enabledElement.canvas.getContext('2d', {
    desynchronized: true
  });
  context.setTransform(1, 0, 0, 1, 0, 0); // Clear the canvas

  context.fillStyle = 'black';
  context.fillRect(0, 0, enabledElement.canvas.width, enabledElement.canvas.height); // Render all visible layers

  renderLayers(context, visibleLayers, invalidated);
});

/***/ }),

/***/ "./internal/drawImage.js":
/*!*******************************!*\
  !*** ./internal/drawImage.js ***!
  \*******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_197265__) {

"use strict";
__nested_webpack_require_197265__.r(__nested_webpack_exports__);
/**
 * Internal API function to draw an image to a given enabled element
 *
 * @param {EnabledElement} enabledElement The Cornerstone Enabled Element to redraw
 * @param {Boolean} [invalidated = false] - true if pixel data has been invalidated and cached rendering should not be used
 * @returns {void}
 * @memberof Internal
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (enabledElement) {
  var invalidated = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
  enabledElement.needsRedraw = true;

  if (invalidated) {
    enabledElement.invalid = true;
  }
});

/***/ }),

/***/ "./internal/drawImageSync.js":
/*!***********************************!*\
  !*** ./internal/drawImageSync.js ***!
  \***********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_198213__) {

"use strict";
__nested_webpack_require_198213__.r(__nested_webpack_exports__);
/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_198213__(/*! ./now.js */ "./internal/now.js");
/* harmony import */ var _drawCompositeImage_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_198213__(/*! ./drawCompositeImage.js */ "./internal/drawCompositeImage.js");
/* harmony import */ var _rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_198213__(/*! ../rendering/renderColorImage.js */ "./rendering/renderColorImage.js");
/* harmony import */ var _rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_198213__(/*! ../rendering/renderGrayscaleImage.js */ "./rendering/renderGrayscaleImage.js");
/* harmony import */ var _rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_198213__(/*! ../rendering/renderPseudoColorImage.js */ "./rendering/renderPseudoColorImage.js");
/* harmony import */ var _rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_198213__(/*! ../rendering/renderLabelMapImage.js */ "./rendering/renderLabelMapImage.js");
/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_198213__(/*! ../triggerEvent.js */ "./triggerEvent.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_198213__(/*! ../events.js */ "./events.js");








/**
 * Draw an image to a given enabled element synchronously
 *
 * @param {EnabledElement} enabledElement An enabled element to draw into
 * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
 * @returns {void}
 * @memberof Internal
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (enabledElement, invalidated) {
  var image = enabledElement.image;
  var element = enabledElement.element;
  var layers = enabledElement.layers || []; // Check if enabledElement can be redrawn

  if (!enabledElement.canvas || !enabledElement.image) {
    return;
  } // Start measuring the time needed to draw the image/layers


  var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
  image.stats = {
    lastGetPixelDataTime: -1.0,
    lastStoredPixelDataToCanvasImageDataTime: -1.0,
    lastPutImageDataTime: -1.0,
    lastRenderTime: -1.0,
    lastLutGenerateTime: -1.0
  };

  if (layers && layers.length) {
    Object(_drawCompositeImage_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement, invalidated);
  } else if (image) {
    var render = image.render;

    if (!render) {
      if (enabledElement.viewport.colormap && enabledElement.viewport.colormap !== '' && enabledElement.image.labelmap === true) {
        render = _rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_5__["renderLabelMapImage"];
      } else if (enabledElement.viewport.colormap && enabledElement.viewport.colormap !== '') {
        render = _rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_4__["renderPseudoColorImage"];
      } else if (image.color) {
        render = _rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_2__["renderColorImage"];
      } else {
        render = _rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_3__["renderGrayscaleImage"];
      }
    }

    render(enabledElement, invalidated);
  } // Calculate how long it took to draw the image/layers


  var renderTimeInMs = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
  var eventData = {
    viewport: enabledElement.viewport,
    element: element,
    image: image,
    enabledElement: enabledElement,
    canvasContext: enabledElement.canvas.getContext('2d', {
      desynchronized: true
    }),
    renderTimeInMs: renderTimeInMs
  };
  image.stats.lastRenderTime = renderTimeInMs;
  enabledElement.invalid = false;
  enabledElement.needsRedraw = false;
  Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].IMAGE_RENDERED, eventData);
});

/***/ }),

/***/ "./internal/generateColorLut.js":
/*!**************************************!*\
  !*** ./internal/generateColorLut.js ***!
  \**************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_202523__) {

"use strict";
__nested_webpack_require_202523__.r(__nested_webpack_exports__);
/* harmony import */ var _getVOILut_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_202523__(/*! ./getVOILut.js */ "./internal/getVOILut.js");

/**
 * Creates a LUT used while rendering to convert stored pixel values to
 * display pixels
 *
 * @param {Image} image A Cornerstone Image Object
 * @param {Number} windowWidth The Window Width
 * @param {Number} windowCenter The Window Center
 * @param {Boolean} invert A boolean describing whether or not the image has been inverted
 * @param {Array} [voiLUT] A Volume of Interest Lookup Table
 *
 * @returns {Uint8ClampedArray} A lookup table to apply to the image
 * @memberof Internal
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (image, windowWidth, windowCenter, invert, voiLUT) {
  var maxPixelValue = image.maxPixelValue;
  var minPixelValue = image.minPixelValue;
  var offset = Math.min(minPixelValue, 0);

  if (image.cachedLut === undefined) {
    var length = maxPixelValue - offset + 1;
    image.cachedLut = {};
    image.cachedLut.lutArray = new Uint8ClampedArray(length);
  }

  var lut = image.cachedLut.lutArray;
  var vlutfn = Object(_getVOILut_js__WEBPACK_IMPORTED_MODULE_0__["default"])(windowWidth, windowCenter, voiLUT);

  if (invert === true) {
    for (var storedValue = minPixelValue; storedValue <= maxPixelValue; storedValue++) {
      lut[storedValue + -offset] = 255 - vlutfn(storedValue);
    }
  } else {
    for (var _storedValue = minPixelValue; _storedValue <= maxPixelValue; _storedValue++) {
      lut[_storedValue + -offset] = vlutfn(_storedValue);
    }
  }

  return lut;
});

/***/ }),

/***/ "./internal/generateLut.js":
/*!*********************************!*\
  !*** ./internal/generateLut.js ***!
  \*********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_204440__) {

"use strict";
__nested_webpack_require_204440__.r(__nested_webpack_exports__);
/* harmony import */ var _getModalityLUT_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_204440__(/*! ./getModalityLUT.js */ "./internal/getModalityLUT.js");
/* harmony import */ var _getVOILut_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_204440__(/*! ./getVOILut.js */ "./internal/getVOILut.js");


/**
 * Creates a LUT used while rendering to convert stored pixel values to
 * display pixels
 *
 * @param {Image} image A Cornerstone Image Object
 * @param {Number} windowWidth The Window Width
 * @param {Number} windowCenter The Window Center
 * @param {Boolean} invert A boolean describing whether or not the image has been inverted
 * @param {Array} [modalityLUT] A modality Lookup Table
 * @param {Array} [voiLUT] A Volume of Interest Lookup Table
 *
 * @returns {Uint8ClampedArray} A lookup table to apply to the image
 * @memberof Internal
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (image, windowWidth, windowCenter, invert, modalityLUT, voiLUT) {
  var maxPixelValue = image.maxPixelValue;
  var minPixelValue = image.minPixelValue;
  var offset = Math.min(minPixelValue, 0);

  if (image.cachedLut === undefined) {
    var length = maxPixelValue - offset + 1;
    image.cachedLut = {};
    image.cachedLut.lutArray = new Uint8ClampedArray(length);
  }

  var lut = image.cachedLut.lutArray;
  var slopeOrInterceptAreFloat = Boolean(image.slope % 1) || Boolean(image.intercept % 1);
  var mlutfn = Object(_getModalityLUT_js__WEBPACK_IMPORTED_MODULE_0__["default"])(image.slope, image.intercept, modalityLUT);
  var vlutfn = Object(_getVOILut_js__WEBPACK_IMPORTED_MODULE_1__["default"])(windowWidth, windowCenter, voiLUT, slopeOrInterceptAreFloat);

  if (invert === true) {
    for (var storedValue = minPixelValue; storedValue <= maxPixelValue; storedValue++) {
      lut[storedValue + -offset] = 255 - vlutfn(mlutfn(storedValue));
    }
  } else {
    for (var _storedValue = minPixelValue; _storedValue <= maxPixelValue; _storedValue++) {
      lut[_storedValue + -offset] = vlutfn(mlutfn(_storedValue));
    }
  }

  return lut;
});

/***/ }),

/***/ "./internal/getCanvas.js":
/*!*******************************!*\
  !*** ./internal/getCanvas.js ***!
  \*******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_206846__) {

"use strict";
__nested_webpack_require_206846__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_206846__.d(__nested_webpack_exports__, "default", function() { return getCanvas; });
var CANVAS_CSS_CLASS = 'cornerstone-canvas';
/**
 * Create a canvas and append it to the element
 *
 * @param {HTMLElement} element An HTML Element
 * @return {HTMLElement} canvas A Canvas DOM element
 */

function createCanvas(element) {
  var canvas = document.createElement('canvas');
  canvas.style.display = 'block';
  canvas.classList.add(CANVAS_CSS_CLASS);
  element.appendChild(canvas);
  return canvas;
}
/**
 * Create a canvas or returns the one that already exists for a given element
 *
 * @param {HTMLElement} element An HTML Element
 * @return {HTMLElement} canvas A Canvas DOM element
 */


function getCanvas(element) {
  var selector = "canvas.".concat(CANVAS_CSS_CLASS);
  return element.querySelector(selector) || createCanvas(element);
}

/***/ }),

/***/ "./internal/getDefaultViewport.js":
/*!****************************************!*\
  !*** ./internal/getDefaultViewport.js ***!
  \****************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_208075__) {

"use strict";
__nested_webpack_require_208075__.r(__nested_webpack_exports__);
/* harmony import */ var _createViewport_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_208075__(/*! ./createViewport.js */ "./internal/createViewport.js");
/* harmony import */ var _getImageFitScale_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_208075__(/*! ./getImageFitScale.js */ "./internal/getImageFitScale.js");


/**
 * Creates a new viewport object containing default values for the image and canvas
 *
 * @param {HTMLElement} canvas A Canvas DOM element
 * @param {Image} image A Cornerstone Image Object
 * @returns {Viewport} viewport object
 * @memberof Internal
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (canvas, image) {
  if (canvas === undefined) {
    throw new Error('getDefaultViewport: parameter canvas must not be undefined');
  }

  if (image === undefined) {
    return Object(_createViewport_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
  } // Fit image to window


  var scale = Object(_getImageFitScale_js__WEBPACK_IMPORTED_MODULE_1__["default"])(canvas, image, 0).scaleFactor;
  return {
    scale: scale,
    translation: {
      x: 0,
      y: 0
    },
    voi: {
      windowWidth: image.windowWidth,
      windowCenter: image.windowCenter
    },
    invert: image.invert,
    pixelReplication: false,
    rotation: 0,
    hflip: false,
    vflip: false,
    modalityLUT: image.modalityLUT,
    voiLUT: image.voiLUT,
    colormap: image.colormap,
    labelmap: Boolean(image.labelmap),
    displayedArea: undefined
  };
});

/***/ }),

/***/ "./internal/getDisplayedArea.js":
/*!**************************************!*\
  !*** ./internal/getDisplayedArea.js ***!
  \**************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_209907__) {

"use strict";
__nested_webpack_require_209907__.r(__nested_webpack_exports__);
/**
 * Returns the displayedArea from the viewport if exists or
 * creates a new displayedArea object containing default values for the image
 *
 * @param {Image} image A Cornerstone Image Object
 * @param {Viewport} viewport An optional viewport Object
 * @returns {DisplayedArea} displayedArea object
 * @memberof Internal
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (image) {
  var viewport = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;

  if (viewport && viewport.displayedArea) {
    return viewport.displayedArea;
  }

  if (image === undefined) {
    throw new Error('getDisplayedArea: parameter image must not be undefined');
  }

  return {
    tlhc: {
      x: 1,
      y: 1
    },
    brhc: {
      x: image.columns,
      y: image.rows
    },
    rowPixelSpacing: image.rowPixelSpacing === undefined ? 1 : image.rowPixelSpacing,
    columnPixelSpacing: image.columnPixelSpacing === undefined ? 1 : image.columnPixelSpacing,
    presentationSizeMode: 'NONE'
  };
});

/***/ }),

/***/ "./internal/getFillStyle.js":
/*!**********************************!*\
  !*** ./internal/getFillStyle.js ***!
  \**********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_211274__) {

"use strict";
__nested_webpack_require_211274__.r(__nested_webpack_exports__);
/**
 * Get current fillStyle for enabled element
 *
 * @param {Object} enabledElement Enabled element
 * @returns {String} Current fillStyle of enabled element
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (enabledElement) {
  var _ref = enabledElement.viewport || {},
      invert = _ref.invert;

  var _ref2 = enabledElement.options || {},
      fillStyle = _ref2.fillStyle;

  if (['black', 'white'].indexOf(fillStyle) !== -1) {
    return invert ? 'white' : 'black';
  }

  return 'black';
});

/***/ }),

/***/ "./internal/getImageFitScale.js":
/*!**************************************!*\
  !*** ./internal/getImageFitScale.js ***!
  \**************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_212145__) {

"use strict";
__nested_webpack_require_212145__.r(__nested_webpack_exports__);
/* harmony import */ var _validator_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_212145__(/*! ./validator.js */ "./internal/validator.js");
/* harmony import */ var _getImageSize_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_212145__(/*! ./getImageSize.js */ "./internal/getImageSize.js");


/**
 * Calculates the horizontal, vertical and minimum scale factor for an image
   @param {{width, height}} windowSize The window size where the image is displayed. This can be any HTML element or structure with a width, height fields (e.g. canvas).
 * @param {any} image The cornerstone image object
 * @param {Number} rotation Optional. The rotation angle of the image.
 * @return {{horizontalScale, verticalScale, scaleFactor}} The calculated horizontal, vertical and minimum scale factor
 * @memberof Internal
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (windowSize, image) {
  var rotation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
  Object(_validator_js__WEBPACK_IMPORTED_MODULE_0__["validateParameterUndefinedOrNull"])(windowSize, 'getImageScale: parameter windowSize must not be undefined');
  Object(_validator_js__WEBPACK_IMPORTED_MODULE_0__["validateParameterUndefinedOrNull"])(image, 'getImageScale: parameter image must not be undefined');
  var imageSize = Object(_getImageSize_js__WEBPACK_IMPORTED_MODULE_1__["default"])(image, rotation);
  var rowPixelSpacing = image.rowPixelSpacing || 1;
  var columnPixelSpacing = image.columnPixelSpacing || 1;
  var verticalRatio = 1;
  var horizontalRatio = 1;

  if (rowPixelSpacing < columnPixelSpacing) {
    horizontalRatio = columnPixelSpacing / rowPixelSpacing;
  } else {
    // even if they are equal we want to calculate this ratio (the ration might be 0.5)
    verticalRatio = rowPixelSpacing / columnPixelSpacing;
  }

  var verticalScale = windowSize.height / imageSize.height / verticalRatio;
  var horizontalScale = windowSize.width / imageSize.width / horizontalRatio; // Fit image to window

  return {
    verticalScale: verticalScale,
    horizontalScale: horizontalScale,
    scaleFactor: Math.min(horizontalScale, verticalScale)
  };
});

/***/ }),

/***/ "./internal/getImageSize.js":
/*!**********************************!*\
  !*** ./internal/getImageSize.js ***!
  \**********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_214644__) {

"use strict";
__nested_webpack_require_214644__.r(__nested_webpack_exports__);
/* harmony import */ var _validator_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_214644__(/*! ./validator.js */ "./internal/validator.js");

/**
 * Check if the angle is rotated
 * @param {Number} rotation the rotation angle
 * @returns {Boolean} true if the angle is rotated; Otherwise, false.
 * @memberof Internal
 */

function isRotated(rotation) {
  return !(rotation === null || rotation === undefined || rotation === 0 || rotation === 180);
}
/**
 * Retrieves the current image dimensions given an enabled element
 *
 * @param {any} image The Cornerstone image.
 * @param {Number} rotation Optional. The rotation angle of the image.
 * @return {{width:Number, height:Number}} The Image dimensions
 * @memberof Internal
 */


/* harmony default export */ __nested_webpack_exports__["default"] = (function (image) {
  var rotation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
  Object(_validator_js__WEBPACK_IMPORTED_MODULE_0__["validateParameterUndefinedOrNull"])(image, 'getImageSize: parameter image must not be undefined');
  Object(_validator_js__WEBPACK_IMPORTED_MODULE_0__["validateParameterUndefinedOrNull"])(image.width, 'getImageSize: parameter image must have width');
  Object(_validator_js__WEBPACK_IMPORTED_MODULE_0__["validateParameterUndefinedOrNull"])(image.height, 'getImageSize: parameter image must have height');

  if (isRotated(rotation)) {
    return {
      height: image.width,
      width: image.height
    };
  }

  return {
    width: image.width,
    height: image.height
  };
});

/***/ }),

/***/ "./internal/getModalityLUT.js":
/*!************************************!*\
  !*** ./internal/getModalityLUT.js ***!
  \************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_216519__) {

"use strict";
__nested_webpack_require_216519__.r(__nested_webpack_exports__);
/**
 * Generates a linear modality transformation function
 *
 * See DICOM PS3.3 C.11.1 Modality LUT Module
 *
 * http://dicom.nema.org/medical/Dicom/current/output/chtml/part03/sect_C.11.html
 *
 * @param {Number} slope m in the equation specified by Rescale Intercept (0028,1052).
 * @param {Number} intercept The value b in relationship between stored values (SV) and the output units specified in Rescale Type (0028,1054).

 Output units = m*SV + b.
 * @return {function(*): *} A linear modality LUT function. Given a stored pixel it returns the modality pixel value
 * @memberof Internal
 */
function generateLinearModalityLUT(slope, intercept) {
  return function (storedPixelValue) {
    return storedPixelValue * slope + intercept;
  };
}

function generateNonLinearModalityLUT(modalityLUT) {
  var minValue = modalityLUT.lut[0];
  var maxValue = modalityLUT.lut[modalityLUT.lut.length - 1];
  var maxValueMapped = modalityLUT.firstValueMapped + modalityLUT.lut.length;
  return function (storedPixelValue) {
    if (storedPixelValue < modalityLUT.firstValueMapped) {
      return minValue;
    } else if (storedPixelValue >= maxValueMapped) {
      return maxValue;
    }

    return modalityLUT.lut[storedPixelValue];
  };
}
/**
 * Get the appropriate Modality LUT for the current situation.
 *
 * @param {Number} [slope] m in the equation specified by Rescale Intercept (0028,1052).
 * @param {Number} [intercept] The value b in relationship between stored values (SV) and the output units specified in Rescale Type (0028,1054).
 * @param {Function} [modalityLUT] A modality LUT function. Given a stored pixel it returns the modality pixel value.
 *
 * @return {function(*): *} A modality LUT function. Given a stored pixel it returns the modality pixel value.
 * @memberof Internal
 */


/* harmony default export */ __nested_webpack_exports__["default"] = (function (slope, intercept, modalityLUT) {
  if (modalityLUT) {
    return generateNonLinearModalityLUT(modalityLUT);
  }

  return generateLinearModalityLUT(slope, intercept);
});

/***/ }),

/***/ "./internal/getTransform.js":
/*!**********************************!*\
  !*** ./internal/getTransform.js ***!
  \**********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_218890__) {

"use strict";
__nested_webpack_require_218890__.r(__nested_webpack_exports__);
/* harmony import */ var _calculateTransform_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_218890__(/*! ./calculateTransform.js */ "./internal/calculateTransform.js");

/* harmony default export */ __nested_webpack_exports__["default"] = (function (enabledElement) {
  // For now we will calculate it every time it is requested.
  // In the future, we may want to cache it in the enabled element to speed things up.
  return Object(_calculateTransform_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement);
});

/***/ }),

/***/ "./internal/getVOILut.js":
/*!*******************************!*\
  !*** ./internal/getVOILut.js ***!
  \*******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_219714__) {

"use strict";
__nested_webpack_require_219714__.r(__nested_webpack_exports__);
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }

function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }

function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }

function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }

function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }

function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }

/* eslint no-bitwise: 0 */

/**
 * Volume of Interest Lookup Table Function
 *
 * @typedef {Function} VOILUTFunction
 *
 * @param {Number} modalityLutValue
 * @returns {Number} transformed value
 * @memberof Objects
 */

/**
 * @module: VOILUT
 */

/**
 *
 * @param {Number} windowWidth Window Width
 * @param {Number} windowCenter Window Center
 * @returns {VOILUTFunction} VOI LUT mapping function
 * @memberof VOILUT
 */
function generateLinearVOILUT(windowWidth, windowCenter) {
  return function (modalityLutValue) {
    return ((modalityLutValue - windowCenter) / windowWidth + 0.5) * 255.0;
  };
}
/**
 * Generate a non-linear volume of interest lookup table
 *
 * @param {LUT} voiLUT Volume of Interest Lookup Table Object
 * @param {Boolean} roundModalityLUTValues Do a Math.round of modality lut to compute non linear voilut

 *
 * @returns {VOILUTFunction} VOI LUT mapping function
 * @memberof VOILUT
 */


function generateNonLinearVOILUT(voiLUT, roundModalityLUTValues) {
  // We don't trust the voiLUT.numBitsPerEntry, mainly thanks to Agfa!
  var bitsPerEntry = Math.max.apply(Math, _toConsumableArray(voiLUT.lut)).toString(2).length;
  var shift = bitsPerEntry - 8;
  var minValue = voiLUT.lut[0] >> shift;
  var maxValue = voiLUT.lut[voiLUT.lut.length - 1] >> shift;
  var maxValueMapped = voiLUT.firstValueMapped + voiLUT.lut.length - 1;
  return function (modalityLutValue) {
    if (modalityLutValue < voiLUT.firstValueMapped) {
      return minValue;
    } else if (modalityLutValue >= maxValueMapped) {
      return maxValue;
    }

    if (roundModalityLUTValues) {
      return voiLUT.lut[Math.round(modalityLutValue) - voiLUT.firstValueMapped] >> shift;
    }

    return voiLUT.lut[modalityLutValue - voiLUT.firstValueMapped] >> shift;
  };
}
/**
 * Retrieve a VOI LUT mapping function given the current windowing settings
 * and the VOI LUT for the image
 *
 * @param {Number} windowWidth Window Width
 * @param {Number} windowCenter Window Center
 * @param {LUT} [voiLUT] Volume of Interest Lookup Table Object
 * @param {Boolean} roundModalityLUTValues Do a Math.round of modality lut to compute non linear voilut
 *
 * @return {VOILUTFunction} VOI LUT mapping function
 * @memberof VOILUT
 */


/* harmony default export */ __nested_webpack_exports__["default"] = (function (windowWidth, windowCenter, voiLUT, roundModalityLUTValues) {
  if (voiLUT) {
    return generateNonLinearVOILUT(voiLUT, roundModalityLUTValues);
  }

  return generateLinearVOILUT(windowWidth, windowCenter);
});

/***/ }),

/***/ "./internal/guid.js":
/*!**************************!*\
  !*** ./internal/guid.js ***!
  \**************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_223723__) {

"use strict";
__nested_webpack_require_223723__.r(__nested_webpack_exports__);
function s4() {
  return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
}
/**
 * Generate a unique identifier
 *
 * @return {string} A unique identifier
 * @memberof Internal
 */


/* harmony default export */ __nested_webpack_exports__["default"] = (function () {
  return "".concat(s4() + s4(), "-").concat(s4(), "-").concat(s4(), "-").concat(s4(), "-").concat(s4()).concat(s4()).concat(s4());
});

/***/ }),

/***/ "./internal/index.js":
/*!***************************!*\
  !*** ./internal/index.js ***!
  \***************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_224437__) {

"use strict";
__nested_webpack_require_224437__.r(__nested_webpack_exports__);
/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_224437__(/*! ./transform.js */ "./internal/transform.js");
/* harmony import */ var _calculateTransform_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_224437__(/*! ./calculateTransform.js */ "./internal/calculateTransform.js");
/* harmony import */ var _drawImage_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_224437__(/*! ./drawImage.js */ "./internal/drawImage.js");
/* harmony import */ var _generateLut_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_224437__(/*! ./generateLut.js */ "./internal/generateLut.js");
/* harmony import */ var _getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_224437__(/*! ./getDefaultViewport.js */ "./internal/getDefaultViewport.js");
/* harmony import */ var _getTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_224437__(/*! ./getTransform.js */ "./internal/getTransform.js");
/* harmony import */ var _requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_224437__(/*! ./requestAnimationFrame.js */ "./internal/requestAnimationFrame.js");
/* harmony import */ var _setDefaultViewport_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_224437__(/*! ./setDefaultViewport.js */ "./internal/setDefaultViewport.js");
/* harmony import */ var _storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_224437__(/*! ./storedColorPixelDataToCanvasImageData.js */ "./internal/storedColorPixelDataToCanvasImageData.js");
/* harmony import */ var _storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_224437__(/*! ./storedPixelDataToCanvasImageData.js */ "./internal/storedPixelDataToCanvasImageData.js");
/* harmony import */ var _storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_224437__(/*! ./storedPixelDataToCanvasImageDataColorLUT.js */ "./internal/storedPixelDataToCanvasImageDataColorLUT.js");
/* harmony import */ var _storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_224437__(/*! ./storedPixelDataToCanvasImageDataPseudocolorLUT.js */ "./internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js");
/* harmony import */ var _storedPixelDataToCanvasImageDataRGBA_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_224437__(/*! ./storedPixelDataToCanvasImageDataRGBA.js */ "./internal/storedPixelDataToCanvasImageDataRGBA.js");













/**
 * @module Internal
 */

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  drawImage: _drawImage_js__WEBPACK_IMPORTED_MODULE_2__["default"],
  generateLut: _generateLut_js__WEBPACK_IMPORTED_MODULE_3__["default"],
  getDefaultViewport: _getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_4__["default"],
  requestAnimationFrame: _requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_6__["default"],
  setDefaultViewport: _setDefaultViewport_js__WEBPACK_IMPORTED_MODULE_7__["default"],
  storedPixelDataToCanvasImageData: _storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_9__["default"],
  storedPixelDataToCanvasImageDataRGBA: _storedPixelDataToCanvasImageDataRGBA_js__WEBPACK_IMPORTED_MODULE_12__["default"],
  storedPixelDataToCanvasImageDataColorLUT: _storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_10__["default"],
  storedPixelDataToCanvasImageDataPseudocolorLUT: _storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_11__["default"],
  storedColorPixelDataToCanvasImageData: _storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_8__["default"],
  getTransform: _getTransform_js__WEBPACK_IMPORTED_MODULE_5__["default"],
  calculateTransform: _calculateTransform_js__WEBPACK_IMPORTED_MODULE_1__["default"],
  Transform: _transform_js__WEBPACK_IMPORTED_MODULE_0__["Transform"]
});

/***/ }),

/***/ "./internal/now.js":
/*!*************************!*\
  !*** ./internal/now.js ***!
  \*************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_228502__) {

"use strict";
__nested_webpack_require_228502__.r(__nested_webpack_exports__);
/**
 * @module Polyfills
 */

/**
 * Use the performance.now() method if possible, and if not, use Date.now()
 *
 * @return {number} Time elapsed since the time origin
 * @memberof Polyfills
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function () {
  if (window.performance) {
    return performance.now();
  }

  return Date.now();
});

/***/ }),

/***/ "./internal/requestAnimationFrame.js":
/*!*******************************************!*\
  !*** ./internal/requestAnimationFrame.js ***!
  \*******************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_229225__) {

"use strict";
__nested_webpack_require_229225__.r(__nested_webpack_exports__);
function requestFrame(callback) {
  window.setTimeout(callback, 1000 / 60);
}
/**
 * Polyfills requestAnimationFrame for older browsers.
 *
 * @param {Function} callback A parameter specifying a function to call when it's time to update your animation for the next repaint. The callback has one single argument, a DOMHighResTimeStamp, which indicates the current time (the time returned from performance.now() ) for when requestAnimationFrame starts to fire callbacks.
 *
 * @return {Number} A long integer value, the request id, that uniquely identifies the entry in the callback list. This is a non-zero value, but you may not make any other assumptions about its value. You can pass this value to window.cancelAnimationFrame() to cancel the refresh callback request.
 * @memberof Polyfills
 */


/* harmony default export */ __nested_webpack_exports__["default"] = (function (callback) {
  return window.requestAnimationFrame(callback) || window.webkitRequestAnimationFrame(callback) || window.mozRequestAnimationFrame(callback) || window.oRequestAnimationFrame(callback) || window.msRequestAnimationFrame(callback) || requestFrame(callback);
});

/***/ }),

/***/ "./internal/setDefaultViewport.js":
/*!****************************************!*\
  !*** ./internal/setDefaultViewport.js ***!
  \****************************************/
/*! exports provided: default, state */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_230726__) {

"use strict";
__nested_webpack_require_230726__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_230726__.d(__nested_webpack_exports__, "state", function() { return state; });
var state = {
  viewport: {}
};
/**
 * Sets new default values for `getDefaultViewport`
 *
 * @param {Object} viewport - Object that sets new default values for getDefaultViewport
 * @returns {undefined}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (viewport) {
  state.viewport = viewport || {};
});


/***/ }),

/***/ "./internal/storedColorPixelDataToCanvasImageData.js":
/*!***********************************************************!*\
  !*** ./internal/storedColorPixelDataToCanvasImageData.js ***!
  \***********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_231601__) {

"use strict";
__nested_webpack_require_231601__.r(__nested_webpack_exports__);
/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_231601__(/*! ./now.js */ "./internal/now.js");

/**
 * Converts stored color pixel values to display pixel values using a LUT.
 *
 * Note: Skips alpha value for any input image pixel data.
 *
 * @param {Image} image A Cornerstone Image Object
 * @param {Array} lut Lookup table array
 * @param {Uint8ClampedArray} canvasImageDataData canvasImageData.data buffer filled with white pixels
 *
 * @returns {void}
 * @memberof Internal
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (image, lut, canvasImageDataData) {
  var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
  var pixelData = image.getPixelData();
  image.stats.lastGetPixelDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
  var minPixelValue = image.minPixelValue;
  var canvasImageDataIndex = 0;
  var storedPixelDataIndex = 0;
  var numPixels = pixelData.length; // NOTE: As of Nov 2014, most javascript engines have lower performance when indexing negative indexes.
  // We have a special code path for this case that improves performance.  Thanks to @jpambrun for this enhancement

  start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();

  if (minPixelValue < 0) {
    while (storedPixelDataIndex < numPixels) {
      canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Red

      canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Green

      canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex] + -minPixelValue]; // Blue

      storedPixelDataIndex += 2;
      canvasImageDataIndex += 2;
    }
  } else {
    while (storedPixelDataIndex < numPixels) {
      canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++]]; // Red

      canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++]]; // Green

      canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex]]; // Blue

      storedPixelDataIndex += 2;
      canvasImageDataIndex += 2;
    }
  }

  image.stats.lastStoredPixelDataToCanvasImageDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
});

/***/ }),

/***/ "./internal/storedPixelDataToCanvasImageData.js":
/*!******************************************************!*\
  !*** ./internal/storedPixelDataToCanvasImageData.js ***!
  \******************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_234336__) {

"use strict";
__nested_webpack_require_234336__.r(__nested_webpack_exports__);
/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_234336__(/*! ./now.js */ "./internal/now.js");

/**
 * This function transforms stored pixel values into a canvas image data buffer
 * by using a LUT.  This is the most performance sensitive code in cornerstone and
 * we use a special trick to make this go as fast as possible.  Specifically we
 * use the alpha channel only to control the luminance rather than the red, green and
 * blue channels which makes it over 3x faster. The canvasImageDataData buffer needs
 * to be previously filled with white pixels.
 *
 * NOTE: Attribution would be appreciated if you use this technique!
 *
 * @param {Image} image A Cornerstone Image Object
 * @param {Array} lut Lookup table array
 * @param {Uint8ClampedArray} canvasImageDataData canvasImageData.data buffer filled with white pixels
 *
 * @returns {void}
 * @memberof Internal
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (image, lut, canvasImageDataData) {
  var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
  var pixelData = image.getPixelData();
  image.stats.lastGetPixelDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
  var numPixels = pixelData.length;
  var minPixelValue = image.minPixelValue;
  var canvasImageDataIndex = 3;
  var storedPixelDataIndex = 0; // NOTE: As of Nov 2014, most javascript engines have lower performance when indexing negative indexes.
  // We have a special code path for this case that improves performance.  Thanks to @jpambrun for this enhancement
  // Added two paths (Int16Array, Uint16Array) to avoid polymorphic deoptimization in chrome.

  start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();

  if (pixelData instanceof Int16Array) {
    if (minPixelValue < 0) {
      while (storedPixelDataIndex < numPixels) {
        canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Alpha

        canvasImageDataIndex += 4;
      }
    } else {
      while (storedPixelDataIndex < numPixels) {
        canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex++]]; // Alpha

        canvasImageDataIndex += 4;
      }
    }
  } else if (pixelData instanceof Uint16Array) {
    while (storedPixelDataIndex < numPixels) {
      canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex++]]; // Alpha

      canvasImageDataIndex += 4;
    }
  } else if (minPixelValue < 0) {
    while (storedPixelDataIndex < numPixels) {
      canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Alpha

      canvasImageDataIndex += 4;
    }
  } else {
    while (storedPixelDataIndex < numPixels) {
      canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex++]]; // Alpha

      canvasImageDataIndex += 4;
    }
  }

  image.stats.lastStoredPixelDataToCanvasImageDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
});

/***/ }),

/***/ "./internal/storedPixelDataToCanvasImageDataColorLUT.js":
/*!**************************************************************!*\
  !*** ./internal/storedPixelDataToCanvasImageDataColorLUT.js ***!
  \**************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_237830__) {

"use strict";
__nested_webpack_require_237830__.r(__nested_webpack_exports__);
/* harmony import */ var _colors_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_237830__(/*! ../colors/index.js */ "./colors/index.js");
/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_237830__(/*! ./now.js */ "./internal/now.js");


/**
 *
 * @param {Image} image A Cornerstone Image Object
 * @param {LookupTable|Array} colorLut Lookup table array
 * @param {Uint8ClampedArray} canvasImageDataData canvasImageData.data buffer filled with white pixels
 *
 * @returns {void}
 * @memberof Internal
 */

function storedPixelDataToCanvasImageDataColorLUT(image, colorLut, canvasImageDataData) {
  var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
  var pixelData = image.getPixelData();
  image.stats.lastGetPixelDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start;
  var numPixels = pixelData.length;
  var minPixelValue = image.minPixelValue;
  var canvasImageDataIndex = 0;
  var storedPixelDataIndex = 0;
  var rgba;
  var clut;
  start = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])();

  if (colorLut instanceof _colors_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].LookupTable) {
    clut = colorLut.Table;
  } else {
    clut = colorLut;
  }

  if (minPixelValue < 0) {
    while (storedPixelDataIndex < numPixels) {
      rgba = clut[pixelData[storedPixelDataIndex++] + -minPixelValue];
      canvasImageDataData[canvasImageDataIndex++] = rgba[0];
      canvasImageDataData[canvasImageDataIndex++] = rgba[1];
      canvasImageDataData[canvasImageDataIndex++] = rgba[2];
      canvasImageDataData[canvasImageDataIndex++] = rgba[3];
    }
  } else {
    while (storedPixelDataIndex < numPixels) {
      rgba = clut[pixelData[storedPixelDataIndex++]];
      canvasImageDataData[canvasImageDataIndex++] = rgba[0];
      canvasImageDataData[canvasImageDataIndex++] = rgba[1];
      canvasImageDataData[canvasImageDataIndex++] = rgba[2];
      canvasImageDataData[canvasImageDataIndex++] = rgba[3];
    }
  }

  image.stats.lastStoredPixelDataToCanvasImageDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start;
}

/* harmony default export */ __nested_webpack_exports__["default"] = (storedPixelDataToCanvasImageDataColorLUT);

/***/ }),

/***/ "./internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js":
/*!********************************************************************!*\
  !*** ./internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js ***!
  \********************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_240527__) {

"use strict";
__nested_webpack_require_240527__.r(__nested_webpack_exports__);
/* harmony import */ var _colors_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_240527__(/*! ../colors/index.js */ "./colors/index.js");
/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_240527__(/*! ./now.js */ "./internal/now.js");


/**
 *
 * @param {Image} image A Cornerstone Image Object
 * @param {Array} grayscaleLut Lookup table array
 * @param {LookupTable|Array} colorLut Lookup table array
 * @param {Uint8ClampedArray} canvasImageDataData canvasImageData.data buffer filled with white pixels
 *
 * @returns {void}
 * @memberof Internal
 */

function storedPixelDataToCanvasImageDataPseudocolorLUT(image, grayscaleLut, colorLut, canvasImageDataData) {
  var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
  var pixelData = image.getPixelData();
  image.stats.lastGetPixelDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start;
  var numPixels = pixelData.length;
  var minPixelValue = image.minPixelValue;
  var canvasImageDataIndex = 0;
  var storedPixelDataIndex = 0;
  var grayscale;
  var rgba;
  var clut;
  start = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])();

  if (colorLut instanceof _colors_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].LookupTable) {
    clut = colorLut.Table;
  } else {
    clut = colorLut;
  }

  if (minPixelValue < 0) {
    while (storedPixelDataIndex < numPixels) {
      grayscale = grayscaleLut[pixelData[storedPixelDataIndex++] + -minPixelValue];
      rgba = clut[grayscale];
      canvasImageDataData[canvasImageDataIndex++] = rgba[0];
      canvasImageDataData[canvasImageDataIndex++] = rgba[1];
      canvasImageDataData[canvasImageDataIndex++] = rgba[2];
      canvasImageDataData[canvasImageDataIndex++] = rgba[3];
    }
  } else {
    while (storedPixelDataIndex < numPixels) {
      grayscale = grayscaleLut[pixelData[storedPixelDataIndex++]];
      rgba = clut[grayscale];
      canvasImageDataData[canvasImageDataIndex++] = rgba[0];
      canvasImageDataData[canvasImageDataIndex++] = rgba[1];
      canvasImageDataData[canvasImageDataIndex++] = rgba[2];
      canvasImageDataData[canvasImageDataIndex++] = rgba[3];
    }
  }

  image.stats.lastStoredPixelDataToCanvasImageDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start;
}

/* harmony default export */ __nested_webpack_exports__["default"] = (storedPixelDataToCanvasImageDataPseudocolorLUT);

/***/ }),

/***/ "./internal/storedPixelDataToCanvasImageDataRGBA.js":
/*!**********************************************************!*\
  !*** ./internal/storedPixelDataToCanvasImageDataRGBA.js ***!
  \**********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_243363__) {

"use strict";
__nested_webpack_require_243363__.r(__nested_webpack_exports__);
/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_243363__(/*! ./now.js */ "./internal/now.js");

/**
 * This function transforms stored pixel values into a canvas image data buffer
 * by using a LUT.
 *
 * @param {Image} image A Cornerstone Image Object
 * @param {Array} lut Lookup table array
 * @param {Uint8ClampedArray} canvasImageDataData canvasImageData.data buffer filled with white pixels
 *
 * @returns {void}
 * @memberof Internal
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (image, lut, canvasImageDataData) {
  var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
  var pixelData = image.getPixelData();
  image.stats.lastGetPixelDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
  var numPixels = pixelData.length;
  var minPixelValue = image.minPixelValue;
  var canvasImageDataIndex = 0;
  var storedPixelDataIndex = 0;
  var pixelValue; // NOTE: As of Nov 2014, most javascript engines have lower performance when indexing negative indexes.
  // We have a special code path for this case that improves performance.  Thanks to @jpambrun for this enhancement
  // Added two paths (Int16Array, Uint16Array) to avoid polymorphic deoptimization in chrome.

  start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();

  if (pixelData instanceof Int16Array) {
    if (minPixelValue < 0) {
      while (storedPixelDataIndex < numPixels) {
        pixelValue = lut[pixelData[storedPixelDataIndex++] + -minPixelValue];
        canvasImageDataData[canvasImageDataIndex++] = pixelValue;
        canvasImageDataData[canvasImageDataIndex++] = pixelValue;
        canvasImageDataData[canvasImageDataIndex++] = pixelValue;
        canvasImageDataData[canvasImageDataIndex++] = 255; // Alpha
      }
    } else {
      while (storedPixelDataIndex < numPixels) {
        pixelValue = lut[pixelData[storedPixelDataIndex++]];
        canvasImageDataData[canvasImageDataIndex++] = pixelValue;
        canvasImageDataData[canvasImageDataIndex++] = pixelValue;
        canvasImageDataData[canvasImageDataIndex++] = pixelValue;
        canvasImageDataData[canvasImageDataIndex++] = 255; // Alpha
      }
    }
  } else if (pixelData instanceof Uint16Array) {
    while (storedPixelDataIndex < numPixels) {
      pixelValue = lut[pixelData[storedPixelDataIndex++]];
      canvasImageDataData[canvasImageDataIndex++] = pixelValue;
      canvasImageDataData[canvasImageDataIndex++] = pixelValue;
      canvasImageDataData[canvasImageDataIndex++] = pixelValue;
      canvasImageDataData[canvasImageDataIndex++] = 255; // Alpha
    }
  } else if (minPixelValue < 0) {
    while (storedPixelDataIndex < numPixels) {
      pixelValue = lut[pixelData[storedPixelDataIndex++] + -minPixelValue];
      canvasImageDataData[canvasImageDataIndex++] = pixelValue;
      canvasImageDataData[canvasImageDataIndex++] = pixelValue;
      canvasImageDataData[canvasImageDataIndex++] = pixelValue;
      canvasImageDataData[canvasImageDataIndex++] = 255; // Alpha
    }
  } else {
    while (storedPixelDataIndex < numPixels) {
      pixelValue = lut[pixelData[storedPixelDataIndex++]];
      canvasImageDataData[canvasImageDataIndex++] = pixelValue;
      canvasImageDataData[canvasImageDataIndex++] = pixelValue;
      canvasImageDataData[canvasImageDataIndex++] = pixelValue;
      canvasImageDataData[canvasImageDataIndex++] = 255; // Alpha
    }
  }

  image.stats.lastStoredPixelDataToCanvasImageDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
});

/***/ }),

/***/ "./internal/storedRGBAPixelDataToCanvasImageData.js":
/*!**********************************************************!*\
  !*** ./internal/storedRGBAPixelDataToCanvasImageData.js ***!
  \**********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_247358__) {

"use strict";
__nested_webpack_require_247358__.r(__nested_webpack_exports__);
/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_247358__(/*! ./now.js */ "./internal/now.js");

/**
 * Converts stored RGBA color pixel values to display pixel values using a LUT.
 *
 * @param {Image} image A Cornerstone Image Object
 * @param {Array} lut Lookup table array
 * @param {Uint8ClampedArray} canvasImageDataData canvasImageData.data buffer filled with white pixels
 *
 * @returns {void}
 * @memberof Internal
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (image, lut, canvasImageDataData) {
  var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
  var pixelData = image.getPixelData();
  image.stats.lastGetPixelDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
  var minPixelValue = image.minPixelValue;
  var canvasImageDataIndex = 0;
  var storedPixelDataIndex = 0;
  var numPixels = pixelData.length; // NOTE: As of Nov 2014, most javascript engines have lower performance when indexing negative indexes.
  // We have a special code path for this case that improves performance.  Thanks to @jpambrun for this enhancement

  start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();

  if (minPixelValue < 0) {
    while (storedPixelDataIndex < numPixels) {
      canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Red

      canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Green

      canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Blue

      canvasImageDataData[canvasImageDataIndex++] = pixelData[storedPixelDataIndex++];
    }
  } else {
    while (storedPixelDataIndex < numPixels) {
      canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++]]; // Red

      canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++]]; // Green

      canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++]]; // Blue

      canvasImageDataData[canvasImageDataIndex++] = pixelData[storedPixelDataIndex++];
    }
  }

  image.stats.lastStoredPixelDataToCanvasImageDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
});

/***/ }),

/***/ "./internal/transform.js":
/*!*******************************!*\
  !*** ./internal/transform.js ***!
  \*******************************/
/*! exports provided: Transform */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_249996__) {

"use strict";
__nested_webpack_require_249996__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_249996__.d(__nested_webpack_exports__, "Transform", function() { return Transform; });
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

// By Simon Sarris
// Www.simonsarris.com
// Sarris@acm.org
//
// Free to use and distribute at will
// So long as you are nice to people, etc
// Simple class for keeping track of the current transformation matrix
// For instance:
//    Var t = new Transform();
//    T.rotate(5);
//    Var m = t.m;
//    Ctx.setTransform(m[0], m[1], m[2], m[3], m[4], m[5]);
// Is equivalent to:
//    Ctx.rotate(5);
// But now you can retrieve it :)
// Remember that this does not account for any CSS transforms applied to the canvas
var Transform = /*#__PURE__*/function () {
  function Transform() {
    _classCallCheck(this, Transform);

    this.reset();
  }

  _createClass(Transform, [{
    key: "reset",
    value: function reset() {
      this.m = [1, 0, 0, 1, 0, 0];
    }
  }, {
    key: "clone",
    value: function clone() {
      var transform = new Transform();
      transform.m[0] = this.m[0];
      transform.m[1] = this.m[1];
      transform.m[2] = this.m[2];
      transform.m[3] = this.m[3];
      transform.m[4] = this.m[4];
      transform.m[5] = this.m[5];
      return transform;
    }
  }, {
    key: "multiply",
    value: function multiply(matrix) {
      var m11 = this.m[0] * matrix.m[0] + this.m[2] * matrix.m[1];
      var m12 = this.m[1] * matrix.m[0] + this.m[3] * matrix.m[1];
      var m21 = this.m[0] * matrix.m[2] + this.m[2] * matrix.m[3];
      var m22 = this.m[1] * matrix.m[2] + this.m[3] * matrix.m[3];
      var dx = this.m[0] * matrix.m[4] + this.m[2] * matrix.m[5] + this.m[4];
      var dy = this.m[1] * matrix.m[4] + this.m[3] * matrix.m[5] + this.m[5];
      this.m[0] = m11;
      this.m[1] = m12;
      this.m[2] = m21;
      this.m[3] = m22;
      this.m[4] = dx;
      this.m[5] = dy;
    }
  }, {
    key: "invert",
    value: function invert() {
      var d = 1 / (this.m[0] * this.m[3] - this.m[1] * this.m[2]);
      var m0 = this.m[3] * d;
      var m1 = -this.m[1] * d;
      var m2 = -this.m[2] * d;
      var m3 = this.m[0] * d;
      var m4 = d * (this.m[2] * this.m[5] - this.m[3] * this.m[4]);
      var m5 = d * (this.m[1] * this.m[4] - this.m[0] * this.m[5]);
      this.m[0] = m0;
      this.m[1] = m1;
      this.m[2] = m2;
      this.m[3] = m3;
      this.m[4] = m4;
      this.m[5] = m5;
    }
  }, {
    key: "rotate",
    value: function rotate(rad) {
      var c = Math.cos(rad);
      var s = Math.sin(rad);
      var m11 = this.m[0] * c + this.m[2] * s;
      var m12 = this.m[1] * c + this.m[3] * s;
      var m21 = this.m[0] * -s + this.m[2] * c;
      var m22 = this.m[1] * -s + this.m[3] * c;
      this.m[0] = m11;
      this.m[1] = m12;
      this.m[2] = m21;
      this.m[3] = m22;
    }
  }, {
    key: "translate",
    value: function translate(x, y) {
      this.m[4] += this.m[0] * x + this.m[2] * y;
      this.m[5] += this.m[1] * x + this.m[3] * y;
    }
  }, {
    key: "scale",
    value: function scale(sx, sy) {
      this.m[0] *= sx;
      this.m[1] *= sx;
      this.m[2] *= sy;
      this.m[3] *= sy;
    }
  }, {
    key: "transformPoint",
    value: function transformPoint(px, py) {
      var x = px;
      var y = py;
      px = x * this.m[0] + y * this.m[2] + this.m[4];
      py = x * this.m[1] + y * this.m[3] + this.m[5];
      return {
        x: px,
        y: py
      };
    }
  }]);

  return Transform;
}();

/***/ }),

/***/ "./internal/tryEnableWebgl.js":
/*!************************************!*\
  !*** ./internal/tryEnableWebgl.js ***!
  \************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_254446__) {

"use strict";
__nested_webpack_require_254446__.r(__nested_webpack_exports__);
/* harmony import */ var _webgl_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_254446__(/*! ../webgl/index.js */ "./webgl/index.js");

/**
 * Checks if webGL is supported and initializes the rendering engine.
 * @param {any} options Options to check if webgl rendering is requested (e.g. enable webgl by passing {renderer: 'webgl'})
 * @returns {Boolean} true if webgl rendering has been successfully initialized. Otherwise, false.
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (options) {
  if (_webgl_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].renderer.isWebGLAvailable()) {
    // If WebGL is available on the device, initialize the renderer
    // And return the renderCanvas from the WebGL rendering path
    _webgl_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].renderer.initRenderer();
    options.renderer = 'webgl';
    options.desynchronized = true;
    options.preserveDrawingBuffer = true;
    return true;
  } // If WebGL is not available on this device, we will fall back
  // To using the Canvas renderer


  console.error('WebGL not available, falling back to Canvas renderer');
  delete options.renderer;
  delete options.preserveDrawingBuffer;
  return false;
});

/***/ }),

/***/ "./internal/validator.js":
/*!*******************************!*\
  !*** ./internal/validator.js ***!
  \*******************************/
/*! exports provided: validateParameterUndefined, validateParameterUndefinedOrNull */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_256039__) {

"use strict";
__nested_webpack_require_256039__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_256039__.d(__nested_webpack_exports__, "validateParameterUndefined", function() { return validateParameterUndefined; });
/* harmony export (binding) */ __nested_webpack_require_256039__.d(__nested_webpack_exports__, "validateParameterUndefinedOrNull", function() { return validateParameterUndefinedOrNull; });
/**
 * Check if the supplied parameter is undefined and throws and error
 * @param {any} checkParam the parameter to validate for undefined
 * @param {any} errorMsg the error message to be thrown
 * @returns {void}
 * @memberof internal
 */
function validateParameterUndefined(checkParam, errorMsg) {
  if (checkParam === undefined) {
    throw new Error(errorMsg);
  }
}
/**
 * Check if the supplied parameter is undefined or null and throws and error
 * @param {any} checkParam the parameter to validate for undefined
 * @param {any} errorMsg the error message to be thrown
 * @returns {void}
 * @memberof internal
 */

function validateParameterUndefinedOrNull(checkParam, errorMsg) {
  if (checkParam === undefined || checkParam === null) {
    throw new Error(errorMsg);
  }
}

/***/ }),

/***/ "./invalidate.js":
/*!***********************!*\
  !*** ./invalidate.js ***!
  \***********************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_257428__) {

"use strict";
__nested_webpack_require_257428__.r(__nested_webpack_exports__);
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_257428__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_257428__(/*! ./triggerEvent.js */ "./triggerEvent.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_257428__(/*! ./events.js */ "./events.js");



/**
 * Sets the invalid flag on the enabled element and fires an event
 * @param {HTMLElement} element The DOM element enabled for Cornerstone
 * @returns {void}
 * @memberof Drawing
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
  enabledElement.invalid = true;
  enabledElement.needsRedraw = true;
  var eventData = {
    element: element
  };
  Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].INVALIDATED, eventData);
});

/***/ }),

/***/ "./invalidateImageId.js":
/*!******************************!*\
  !*** ./invalidateImageId.js ***!
  \******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_258813__) {

"use strict";
__nested_webpack_require_258813__.r(__nested_webpack_exports__);
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_258813__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_258813__(/*! ./internal/drawImage.js */ "./internal/drawImage.js");


/**
 * Forces the image to be updated/redrawn for all enabled elements
 * displaying the specified imageId
 *
 * @param {string} imageId The imageId of the Cornerstone Image Object to redraw
 * @returns {void}
 * @memberof Drawing
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (imageId) {
  var enabledElements = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElementsByImageId"])(imageId);
  enabledElements.forEach(function (enabledElement) {
    Object(_internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement, true);
  });
});

/***/ }),

/***/ "./layers.js":
/*!*******************!*\
  !*** ./layers.js ***!
  \*******************/
/*! exports provided: rescaleImage, addLayer, removeLayer, getLayer, getLayers, getVisibleLayers, setActiveLayer, setLayerImage, getActiveLayer, purgeLayers */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_260120__) {

"use strict";
__nested_webpack_require_260120__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_260120__.d(__nested_webpack_exports__, "rescaleImage", function() { return rescaleImage; });
/* harmony export (binding) */ __nested_webpack_require_260120__.d(__nested_webpack_exports__, "addLayer", function() { return addLayer; });
/* harmony export (binding) */ __nested_webpack_require_260120__.d(__nested_webpack_exports__, "removeLayer", function() { return removeLayer; });
/* harmony export (binding) */ __nested_webpack_require_260120__.d(__nested_webpack_exports__, "getLayer", function() { return getLayer; });
/* harmony export (binding) */ __nested_webpack_require_260120__.d(__nested_webpack_exports__, "getLayers", function() { return getLayers; });
/* harmony export (binding) */ __nested_webpack_require_260120__.d(__nested_webpack_exports__, "getVisibleLayers", function() { return getVisibleLayers; });
/* harmony export (binding) */ __nested_webpack_require_260120__.d(__nested_webpack_exports__, "setActiveLayer", function() { return setActiveLayer; });
/* harmony export (binding) */ __nested_webpack_require_260120__.d(__nested_webpack_exports__, "setLayerImage", function() { return setLayerImage; });
/* harmony export (binding) */ __nested_webpack_require_260120__.d(__nested_webpack_exports__, "getActiveLayer", function() { return getActiveLayer; });
/* harmony export (binding) */ __nested_webpack_require_260120__.d(__nested_webpack_exports__, "purgeLayers", function() { return purgeLayers; });
/* harmony import */ var _internal_guid_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_260120__(/*! ./internal/guid.js */ "./internal/guid.js");
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_260120__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_260120__(/*! ./internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js");
/* harmony import */ var _internal_getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_260120__(/*! ./internal/getDisplayedArea.js */ "./internal/getDisplayedArea.js");
/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_260120__(/*! ./updateImage.js */ "./updateImage.js");
/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_260120__(/*! ./triggerEvent.js */ "./triggerEvent.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_260120__(/*! ./events.js */ "./events.js");







/**
 * @module EnabledElementLayers
 */

/**
 * Helper function to trigger an event on a Cornerstone element with
 * a specific layerId
 *
 * @param {String} eventName The event name (e.g. CornerstoneLayerAdded)
 * @param {EnabledElement} enabledElement The Cornerstone enabled element
 * @param {String} layerId The layer's unique identifier
 * @returns {void}
 * @memberof EnabledElementLayers
 */

function triggerEventForLayer(eventName, enabledElement, layerId) {
  var element = enabledElement.element;
  var eventData = {
    viewport: enabledElement.viewport,
    element: enabledElement.element,
    image: enabledElement.image,
    enabledElement: enabledElement,
    layerId: layerId
  };
  Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element, eventName, eventData);
}
/**
 * Rescale the target layer to the base layer based on the
 * relative size of each image and their pixel dimensions.
 *
 * This function will update the Viewport parameters of the
 * target layer to a new scale.
 *
 * @param {EnabledElementLayer} baseLayer The base layer
 * @param {EnabledElementLayer} targetLayer The target layer to rescale
 * @returns {void}
 * @memberof EnabledElementLayers
 */


function rescaleImage(baseLayer, targetLayer) {
  if (baseLayer.layerId === targetLayer.layerId) {
    throw new Error('rescaleImage: both arguments represent the same layer');
  }

  var baseImage = baseLayer.image;
  var targetImage = targetLayer.image; // Return if these images don't have an imageId (e.g. for dynamic images)

  if (!baseImage.imageId || !targetImage.imageId) {
    return;
  } // Column pixel spacing need to be considered when calculating the
  // ratio between the layer added and base layer images


  var targetDisplayedArea = Object(_internal_getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_3__["default"])(targetImage, targetLayer.viewport);
  var baseDisplayedArea = Object(_internal_getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_3__["default"])(baseImage, baseLayer.viewport);
  var colRelative = targetDisplayedArea.columnPixelSpacing * targetImage.width / (baseDisplayedArea.columnPixelSpacing * baseImage.width);
  var viewportRatio = targetLayer.viewport.scale / baseLayer.viewport.scale * colRelative;
  targetLayer.viewport.scale = baseLayer.viewport.scale * viewportRatio;
}
/**
 * Add a layer to a Cornerstone element
 *
 * @param {HTMLElement} element The DOM element enabled for Cornerstone
 * @param {Image} image A Cornerstone Image object to add as a new layer
 * @param {Object} options Options for the layer
 *
 * @returns {String} layerId The new layer's unique identifier
 * @memberof EnabledElementLayers
 */

function addLayer(element, image, options) {
  var layerId = Object(_internal_guid_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element);
  var layers = enabledElement.layers;
  var viewport;

  if (image) {
    viewport = Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement.canvas, image); // Override the defaults if any optional viewport settings
    // have been specified

    if (options && options.viewport) {
      viewport = Object.assign(viewport, options.viewport);
    }
  } // Set syncViewports to true by default when a new layer is added


  if (enabledElement.syncViewports !== false) {
    enabledElement.syncViewports = true;
  }

  var newLayer = {
    image: image,
    layerId: layerId,
    viewport: viewport,
    options: options || {},
    renderingTools: {}
  }; // Rescale the new layer based on the base layer to make sure
  // they will have a proportional size (pixel spacing)

  if (layers.length && image) {
    rescaleImage(layers[0], newLayer);
  }

  layers.push(newLayer);
  triggerEventForLayer(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].LAYER_ADDED, enabledElement, layerId); // Set the layer as active if it's the first layer added

  if (layers.length === 1 && image) {
    setActiveLayer(element, layerId);
  }

  return layerId;
}
/**
 * Remove a layer from a Cornerstone element given a layer ID
 *
 * @param {HTMLElement} element The DOM element enabled for Cornerstone
 * @param {String} layerId The unique identifier for the layer
 * @returns {void}
 * @memberof EnabledElementLayers
 */

function removeLayer(element, layerId) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element);
  var layers = enabledElement.layers;
  var index = enabledElement.layers.findIndex(function (layer) {
    return layer.layerId === layerId;
  });

  if (index !== -1) {
    layers.splice(index, 1); // If the current layer is active, and we have other layers,
    // switch to the first layer that remains in the array

    if (layerId === enabledElement.activeLayerId && layers.length) {
      setActiveLayer(element, layers[0].layerId);
    }

    triggerEventForLayer(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].LAYER_REMOVED, enabledElement, layerId);
  }
}
/**
 * Retrieve a layer from a Cornerstone element given a layer ID
 *
 * @param {HTMLElement} element The DOM element enabled for Cornerstone
 * @param {String} layerId The unique identifier for the layer
 * @return {EnabledElementLayer} The layer
 * @memberof EnabledElementLayers
 */

function getLayer(element, layerId) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element);
  return enabledElement.layers.find(function (layer) {
    return layer.layerId === layerId;
  });
}
/**
 * Retrieve all layers for a Cornerstone element
 *
 * @param {HTMLElement} element The DOM element enabled for Cornerstone
 *
 * @return {EnabledElementLayer[]} An array of layers
 * @memberof EnabledElementLayers
 */

function getLayers(element) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element);
  return enabledElement.layers;
}
/**
 * Retrieve all visible layers for a Cornerstone element
 *
 * @param {HTMLElement} element The DOM element enabled for Cornerstone
 *
 * @return {EnabledElementLayer[]} An array of layers
 * @memberof EnabledElementLayers
 */

function getVisibleLayers(element) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element);
  return enabledElement.layers.filter(function (layer) {
    return layer.options && layer.options.visible !== false && layer.options.opacity !== 0;
  });
}
/**
 * Set the active layer for a Cornerstone element
 *
 * @param {HTMLElement} element The DOM element enabled for Cornerstone
 * @param {String} layerId The unique identifier for the layer
 * @returns {void}
 * @memberof EnabledElementLayers
 */

function setActiveLayer(element, layerId) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element); // Stop here if this layer is already active

  if (enabledElement.activeLayerId === layerId) {
    return;
  }

  var index = enabledElement.layers.findIndex(function (layer) {
    return layer.layerId === layerId;
  });

  if (index === -1) {
    throw new Error('setActiveLayer: layer not found in layers array');
  }

  var layer = enabledElement.layers[index];

  if (!layer.image) {
    throw new Error('setActiveLayer: layer with undefined image cannot be set as active.');
  }

  enabledElement.activeLayerId = layerId;
  enabledElement.image = layer.image;
  enabledElement.viewport = layer.viewport;
  Object(_updateImage_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element);
  triggerEventForLayer(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].ACTIVE_LAYER_CHANGED, enabledElement, layerId);
}
/**
 * Set a new image for a specific layerId
 *
 * @param {HTMLElement} element The DOM element enabled for Cornerstone
 * @param {Image} image The image to be displayed in this layer
 * @param {String} [layerId] The unique identifier for the layer
 * @returns {void}
 * @memberof EnabledElementLayers
 */

function setLayerImage(element, image, layerId) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element);
  var baseLayer = enabledElement.layers[0];
  var layer;

  if (layerId) {
    layer = getLayer(element, layerId);
  } else {
    layer = getActiveLayer(element);
  }

  if (!layer) {
    throw new Error('setLayerImage: Layer not found');
  }

  layer.image = image;

  if (!image) {
    layer.viewport = undefined;
    return;
  }

  if (!layer.viewport) {
    var defaultViewport = Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement.canvas, image); // Override the defaults if any optional viewport settings
    // have been specified

    if (layer.options && layer.options.viewport) {
      layer.viewport = Object.assign(defaultViewport, layer.options.viewport);
    }

    if (baseLayer.layerId !== layerId) {
      rescaleImage(baseLayer, layer);
    }
  }
}
/**
 * Retrieve the currently active layer for a Cornerstone element
 *
 * @param {HTMLElement} element The DOM element enabled for Cornerstone
 * @return {EnabledElementLayer} The currently active layer
 * @memberof EnabledElementLayers
 */

function getActiveLayer(element) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element);
  return enabledElement.layers.find(function (layer) {
    return layer.layerId === enabledElement.activeLayerId;
  });
}
/**
 * Purge the layers
 *
 * @param {HTMLElement} element The DOM element enabled for Cornerstone
 *
 * @returns {void}
 */

function purgeLayers(element) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element);
  enabledElement.layers = [];
  delete enabledElement.activeLayerId;
  delete enabledElement.lastSyncViewportsState;
}

/***/ }),

/***/ "./metaData.js":
/*!*********************!*\
  !*** ./metaData.js ***!
  \*********************/
/*! exports provided: addProvider, removeProvider, default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_272697__) {

"use strict";
__nested_webpack_require_272697__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_272697__.d(__nested_webpack_exports__, "addProvider", function() { return addProvider; });
/* harmony export (binding) */ __nested_webpack_require_272697__.d(__nested_webpack_exports__, "removeProvider", function() { return removeProvider; });
// This module defines a way to access various metadata about an imageId.  This layer of abstraction exists
// So metadata can be provided in different ways (e.g. by parsing DICOM P10 or by a WADO-RS document)
var providers = [];
/**
 * @module Metadata
 */

/**
 * Adds a metadata provider with the specified priority
 * @param {Function} provider Metadata provider function
 * @param {Number} [priority=0] - 0 is default/normal, > 0 is high, < 0 is low
 *
 * @returns {void}
 * @memberof Metadata
 */

function addProvider(provider) {
  var priority = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
  var i; // Find the right spot to insert this provider based on priority

  for (i = 0; i < providers.length; i++) {
    if (providers[i].priority <= priority) {
      break;
    }
  } // Insert the decode task at position i


  providers.splice(i, 0, {
    priority: priority,
    provider: provider
  });
}
/**
 * Removes the specified provider
 *
 * @param {Function} provider Metadata provider function
 *
 * @returns {void}
 * @memberof Metadata
 */

function removeProvider(provider) {
  for (var i = 0; i < providers.length; i++) {
    if (providers[i].provider === provider) {
      providers.splice(i, 1);
      break;
    }
  }
}
/**
 * Gets metadata from the registered metadata providers.  Will call each one from highest priority to lowest
 * until one responds
 *
 * @param {String} type The type of metadata requested from the metadata store
 * @param {String} imageId The Cornerstone Image Object's imageId
 *
 * @returns {*} The metadata retrieved from the metadata store
 * @memberof Metadata
 */

function getMetaData(type, imageId) {
  // Invoke each provider in priority order until one returns something
  for (var i = 0; i < providers.length; i++) {
    var result = providers[i].provider(type, imageId);

    if (result !== undefined) {
      return result;
    }
  }
}

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  addProvider: addProvider,
  removeProvider: removeProvider,
  get: getMetaData
});

/***/ }),

/***/ "./pageToPixel.js":
/*!************************!*\
  !*** ./pageToPixel.js ***!
  \************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_275313__) {

"use strict";
__nested_webpack_require_275313__.r(__nested_webpack_exports__);
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_275313__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _internal_getTransform_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_275313__(/*! ./internal/getTransform.js */ "./internal/getTransform.js");


/**
 * Converts a point in the page coordinate system to the pixel coordinate
 * system
 *
 * @param {HTMLElement} element The Cornerstone element within which the input point lies
 * @param {Number} pageX The x value in the page coordinate system
 * @param {Number} pageY The y value in the page coordinate system
 *
 * @returns {{x: Number, y: Number}} The transformed point in the pixel coordinate system
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, pageX, pageY) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);

  if (enabledElement.image === undefined) {
    throw new Error('image has not been loaded yet');
  } // Convert the pageX and pageY to the canvas client coordinates


  var rect = element.getBoundingClientRect();
  var clientX = pageX - rect.left - window.pageXOffset;
  var clientY = pageY - rect.top - window.pageYOffset;
  var pt = {
    x: clientX,
    y: clientY
  };
  var transform = Object(_internal_getTransform_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement);
  transform.invert();
  return transform.transformPoint(pt.x, pt.y);
});

/***/ }),

/***/ "./pixelDataToFalseColorData.js":
/*!**************************************!*\
  !*** ./pixelDataToFalseColorData.js ***!
  \**************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_277153__) {

"use strict";
__nested_webpack_require_277153__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_277153__.d(__nested_webpack_exports__, "default", function() { return pixelDataToFalseColorData; });
/* harmony import */ var _colors_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_277153__(/*! ./colors/index.js */ "./colors/index.js");

/**
 * Converts the image pixel data into a false color data
 *
 * @param {Image} image A Cornerstone Image Object
 * @param {Object} lookupTable A lookup table Object
 *
 * @returns {void}
 * @deprecated This function is superseded by the ability to set the Viewport parameters
 * to include colormaps.
 */

function pixelDataToFalseColorData(image, lookupTable) {
  if (image.color && !image.falseColor) {
    throw new Error('Color transforms are not implemented yet');
  }

  var minPixelValue = image.minPixelValue;
  var canvasImageDataIndex = 0;
  var storedPixelDataIndex = 0;
  var numPixels = image.width * image.height;
  var origPixelData = image.origPixelData || image.getPixelData();
  var storedColorPixelData = new Uint8Array(numPixels * 4);
  var sp;
  var mapped;
  image.color = true;
  image.falseColor = true;
  image.origPixelData = origPixelData;

  if (lookupTable instanceof _colors_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].LookupTable) {
    lookupTable.build();

    while (storedPixelDataIndex < numPixels) {
      sp = origPixelData[storedPixelDataIndex++];
      mapped = lookupTable.mapValue(sp);
      storedColorPixelData[canvasImageDataIndex++] = mapped[0];
      storedColorPixelData[canvasImageDataIndex++] = mapped[1];
      storedColorPixelData[canvasImageDataIndex++] = mapped[2];
      storedColorPixelData[canvasImageDataIndex++] = mapped[3];
    }
  } else if (minPixelValue < 0) {
    while (storedPixelDataIndex < numPixels) {
      sp = origPixelData[storedPixelDataIndex++];
      storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp + -minPixelValue][0]; // Red

      storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp + -minPixelValue][1]; // Green

      storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp + -minPixelValue][2]; // Blue

      storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp + -minPixelValue][3]; // Alpha
    }
  } else {
    while (storedPixelDataIndex < numPixels) {
      sp = origPixelData[storedPixelDataIndex++];
      storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp][0]; // Red

      storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp][1]; // Green

      storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp][2]; // Blue

      storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp][3]; // Alpha
    }
  }

  image.rgba = true;
  image.cachedLut = undefined;
  image.render = undefined;
  image.slope = 1;
  image.intercept = 0;
  image.minPixelValue = 0;
  image.maxPixelValue = 255;
  image.windowWidth = 255;
  image.windowCenter = 128;

  image.getPixelData = function () {
    return storedColorPixelData;
  };
}

/***/ }),

/***/ "./pixelToCanvas.js":
/*!**************************!*\
  !*** ./pixelToCanvas.js ***!
  \**************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_280414__) {

"use strict";
__nested_webpack_require_280414__.r(__nested_webpack_exports__);
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_280414__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _internal_getTransform_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_280414__(/*! ./internal/getTransform.js */ "./internal/getTransform.js");


/**
 * Converts a point in the pixel coordinate system to the canvas coordinate system
 * system.  This can be used to render using canvas context without having the weird
 * side effects that come from scaling and non square pixels
 *
 * @param {HTMLElement} element An HTML Element enabled for Cornerstone
 * @param {{x: Number, y: Number}} pt The transformed point in the pixel coordinate system
 *
 * @returns {{x: Number, y: Number}} The input point in the canvas coordinate system
 * @memberof PixelCoordinateSystem
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, pt) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
  var transform = Object(_internal_getTransform_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement);
  return transform.transformPoint(pt.x, pt.y);
});

/***/ }),

/***/ "./rendering/doesImageNeedToBeRendered.js":
/*!************************************************!*\
  !*** ./rendering/doesImageNeedToBeRendered.js ***!
  \************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_282001__) {

"use strict";
__nested_webpack_require_282001__.r(__nested_webpack_exports__);
/**
 * Determine whether or not an Enabled Element needs to be re-rendered.
 *
 * If the imageId has changed, or if any of the last rendered viewport
 * parameters have changed, this function will return true.
 *
 * @param {EnabledElement} enabledElement An Enabled Element
 * @param {Image} image An Image
 * @return {boolean} Whether or not the Enabled Element needs to re-render its image
 * @memberof rendering
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (enabledElement, image) {
  var lastRenderedImageId = enabledElement.renderingTools.lastRenderedImageId;
  var lastRenderedViewport = enabledElement.renderingTools.lastRenderedViewport;
  return image.imageId !== lastRenderedImageId || !lastRenderedViewport || lastRenderedViewport.windowCenter !== enabledElement.viewport.voi.windowCenter || lastRenderedViewport.windowWidth !== enabledElement.viewport.voi.windowWidth || lastRenderedViewport.invert !== enabledElement.viewport.invert || lastRenderedViewport.rotation !== enabledElement.viewport.rotation || lastRenderedViewport.hflip !== enabledElement.viewport.hflip || lastRenderedViewport.vflip !== enabledElement.viewport.vflip || lastRenderedViewport.modalityLUT !== enabledElement.viewport.modalityLUT || lastRenderedViewport.voiLUT !== enabledElement.viewport.voiLUT || lastRenderedViewport.colormap !== enabledElement.viewport.colormap;
});

/***/ }),

/***/ "./rendering/getLut.js":
/*!*****************************!*\
  !*** ./rendering/getLut.js ***!
  \*****************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_283700__) {

"use strict";
__nested_webpack_require_283700__.r(__nested_webpack_exports__);
/* harmony import */ var _internal_computeAutoVoi_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_283700__(/*! ../internal/computeAutoVoi.js */ "./internal/computeAutoVoi.js");
/* harmony import */ var _lutMatches_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_283700__(/*! ./lutMatches.js */ "./rendering/lutMatches.js");
/* harmony import */ var _internal_generateLut_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_283700__(/*! ../internal/generateLut.js */ "./internal/generateLut.js");



/**
 * Retrieve or generate a LUT Array for an Image and Viewport
 *
 * @param {Image} image An Image Object
 * @param {Viewport} viewport An Viewport Object
 * @param {Boolean} invalidated Whether or not the LUT data has been invalidated
 * (e.g. by a change to the windowWidth, windowCenter, or invert viewport parameters).
 * @return {Uint8ClampedArray} LUT Array
 * @memberof rendering
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (image, viewport, invalidated) {
  // If we have a cached lut and it has the right values, return it immediately
  if (image.cachedLut !== undefined && image.cachedLut.windowCenter === viewport.voi.windowCenter && image.cachedLut.windowWidth === viewport.voi.windowWidth && Object(_lutMatches_js__WEBPACK_IMPORTED_MODULE_1__["default"])(image.cachedLut.modalityLUT, viewport.modalityLUT) && Object(_lutMatches_js__WEBPACK_IMPORTED_MODULE_1__["default"])(image.cachedLut.voiLUT, viewport.voiLUT) && image.cachedLut.invert === viewport.invert && invalidated !== true) {
    return image.cachedLut.lutArray;
  }

  Object(_internal_computeAutoVoi_js__WEBPACK_IMPORTED_MODULE_0__["default"])(viewport, image); // Lut is invalid or not present, regenerate it and cache it

  Object(_internal_generateLut_js__WEBPACK_IMPORTED_MODULE_2__["default"])(image, viewport.voi.windowWidth, viewport.voi.windowCenter, viewport.invert, viewport.modalityLUT, viewport.voiLUT);
  image.cachedLut.windowWidth = viewport.voi.windowWidth;
  image.cachedLut.windowCenter = viewport.voi.windowCenter;
  image.cachedLut.invert = viewport.invert;
  image.cachedLut.voiLUT = viewport.voiLUT;
  image.cachedLut.modalityLUT = viewport.modalityLUT;
  return image.cachedLut.lutArray;
});

/***/ }),

/***/ "./rendering/index.js":
/*!****************************!*\
  !*** ./rendering/index.js ***!
  \****************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_286215__) {

"use strict";
__nested_webpack_require_286215__.r(__nested_webpack_exports__);
/* harmony import */ var _renderColorImage_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_286215__(/*! ./renderColorImage.js */ "./rendering/renderColorImage.js");
/* harmony import */ var _renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_286215__(/*! ./renderGrayscaleImage.js */ "./rendering/renderGrayscaleImage.js");
/* harmony import */ var _renderWebImage_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_286215__(/*! ./renderWebImage.js */ "./rendering/renderWebImage.js");
/* harmony import */ var _renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_286215__(/*! ./renderPseudoColorImage.js */ "./rendering/renderPseudoColorImage.js");
/* harmony import */ var _renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_286215__(/*! ./renderLabelMapImage.js */ "./rendering/renderLabelMapImage.js");
/* harmony import */ var _renderToCanvas_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_286215__(/*! ./renderToCanvas.js */ "./rendering/renderToCanvas.js");






/**
 * @module rendering
 */

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  colorImage: _renderColorImage_js__WEBPACK_IMPORTED_MODULE_0__["renderColorImage"],
  grayscaleImage: _renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_1__["renderGrayscaleImage"],
  webImage: _renderWebImage_js__WEBPACK_IMPORTED_MODULE_2__["renderWebImage"],
  pseudoColorImage: _renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_3__["renderPseudoColorImage"],
  labelMapImage: _renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_4__["renderLabelMapImage"],
  toCanvas: _renderToCanvas_js__WEBPACK_IMPORTED_MODULE_5__["default"]
});

/***/ }),

/***/ "./rendering/initializeRenderCanvas.js":
/*!*********************************************!*\
  !*** ./rendering/initializeRenderCanvas.js ***!
  \*********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_288219__) {

"use strict";
__nested_webpack_require_288219__.r(__nested_webpack_exports__);
/**
 * Sets size and clears canvas
 *
 * @param {Object} enabledElement Cornerstone Enabled Element
 * @param {Object} image Image to be rendered
 * @returns {void}
 * @memberof rendering
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (enabledElement, image) {
  var renderCanvas = enabledElement.renderingTools.renderCanvas; // Resize the canvas

  renderCanvas.width = image.width;
  renderCanvas.height = image.height;
  var canvasContext = renderCanvas.getContext('2d', {
    desynchronized: true
  }); // NOTE - we need to fill the render canvas with white pixels since we
  // control the luminance using the alpha channel to improve rendering performance.

  canvasContext.fillStyle = 'white';
  canvasContext.fillRect(0, 0, renderCanvas.width, renderCanvas.height);
  var renderCanvasData = canvasContext.getImageData(0, 0, image.width, image.height);
  enabledElement.renderingTools.renderCanvasContext = canvasContext;
  enabledElement.renderingTools.renderCanvasData = renderCanvasData;
});

/***/ }),

/***/ "./rendering/lutMatches.js":
/*!*********************************!*\
  !*** ./rendering/lutMatches.js ***!
  \*********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_289573__) {

"use strict";
__nested_webpack_require_289573__.r(__nested_webpack_exports__);
/**
 * Check if two lookup tables match
 *
 * @param {LUT} a A lookup table function
 * @param {LUT} b Another lookup table function
 * @return {boolean} Whether or not they match
 * @memberof rendering
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (a, b) {
  // If undefined, they are equal
  if (!a && !b) {
    return true;
  } // If one is undefined, not equal


  if (!a || !b) {
    return false;
  } // Check the unique ids


  return a.id === b.id;
});

/***/ }),

/***/ "./rendering/renderColorImage.js":
/*!***************************************!*\
  !*** ./rendering/renderColorImage.js ***!
  \***************************************/
/*! exports provided: renderColorImage, addColorLayer */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_290435__) {

"use strict";
__nested_webpack_require_290435__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_290435__.d(__nested_webpack_exports__, "renderColorImage", function() { return renderColorImage; });
/* harmony export (binding) */ __nested_webpack_require_290435__.d(__nested_webpack_exports__, "addColorLayer", function() { return addColorLayer; });
/* harmony import */ var _internal_now_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_290435__(/*! ../internal/now.js */ "./internal/now.js");
/* harmony import */ var _internal_getFillStyle_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_290435__(/*! ../internal/getFillStyle.js */ "./internal/getFillStyle.js");
/* harmony import */ var _internal_generateColorLut_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_290435__(/*! ../internal/generateColorLut.js */ "./internal/generateColorLut.js");
/* harmony import */ var _internal_storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_290435__(/*! ../internal/storedColorPixelDataToCanvasImageData.js */ "./internal/storedColorPixelDataToCanvasImageData.js");
/* harmony import */ var _internal_storedRGBAPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_290435__(/*! ../internal/storedRGBAPixelDataToCanvasImageData.js */ "./internal/storedRGBAPixelDataToCanvasImageData.js");
/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_290435__(/*! ../setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js");
/* harmony import */ var _webgl_index_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_290435__(/*! ../webgl/index.js */ "./webgl/index.js");
/* harmony import */ var _doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_290435__(/*! ./doesImageNeedToBeRendered.js */ "./rendering/doesImageNeedToBeRendered.js");
/* harmony import */ var _initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_290435__(/*! ./initializeRenderCanvas.js */ "./rendering/initializeRenderCanvas.js");
/* harmony import */ var _saveLastRendered_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_290435__(/*! ./saveLastRendered.js */ "./rendering/saveLastRendered.js");
/* harmony import */ var _internal_getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_290435__(/*! ../internal/getDisplayedArea.js */ "./internal/getDisplayedArea.js");











/**
 * Generates an appropriate Look Up Table to render the given image with the given window width and level (specified in the viewport)
 * Uses an internal cache for performance
 *
 * @param {Object} image  The image to be rendered
 * @param {Object} viewport The viewport values used for rendering
 * @returns {Uint8ClampedArray} Look Up Table array.
 * @memberof rendering
 */

function getLut(image, viewport) {
  // If we have a cached lut and it has the right values, return it immediately
  if (image.cachedLut !== undefined && image.cachedLut.windowCenter === viewport.voi.windowCenter && image.cachedLut.windowWidth === viewport.voi.windowWidth && image.cachedLut.invert === viewport.invert) {
    return image.cachedLut.lutArray;
  } // Lut is invalid or not present, regenerate it and cache it


  Object(_internal_generateColorLut_js__WEBPACK_IMPORTED_MODULE_2__["default"])(image, viewport.voi.windowWidth, viewport.voi.windowCenter, viewport.invert);
  image.cachedLut.windowWidth = viewport.voi.windowWidth;
  image.cachedLut.windowCenter = viewport.voi.windowCenter;
  image.cachedLut.invert = viewport.invert;
  return image.cachedLut.lutArray;
}
/**
 * Returns an appropriate canvas to render the Image. If the canvas available in the cache is appropriate
 * it is returned, otherwise adjustments are made. It also sets the color transfer functions.
 *
 * @param {Object} enabledElement The cornerstone enabled element
 * @param {Object} image The image to be rendered
 * @param {Boolean} invalidated Is pixel data valid
 * @returns {HTMLCanvasElement} An appropriate canvas for rendering the image
 * @memberof rendering
 */


function getRenderCanvas(enabledElement, image, invalidated) {
  var canvasWasColor = enabledElement.renderingTools.lastRenderedIsColor === true;

  if (!enabledElement.renderingTools.renderCanvas || !canvasWasColor) {
    enabledElement.renderingTools.renderCanvas = document.createElement('canvas');
  }

  var renderCanvas = enabledElement.renderingTools.renderCanvas; // The ww/wc is identity and not inverted - get a canvas with the image rendered into it for
  // Fast drawing

  if (enabledElement.viewport.voi.windowWidth === 255 && enabledElement.viewport.voi.windowCenter === 128 && enabledElement.viewport.invert === false && image.getCanvas && image.getCanvas()) {
    return image.getCanvas();
  } // Apply the lut to the stored pixel data onto the render canvas


  if (Object(_doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_7__["default"])(enabledElement, image) === false && invalidated !== true) {
    return renderCanvas;
  } // If our render canvas does not match the size of this image reset it
  // NOTE: This might be inefficient if we are updating multiple images of different
  // Sizes frequently.


  if (renderCanvas.width !== image.width || renderCanvas.height !== image.height) {
    Object(_initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_8__["default"])(enabledElement, image);
  } // Get the lut to use


  var start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
  var colorLut = getLut(image, enabledElement.viewport);
  image.stats = image.stats || {};
  image.stats.lastLutGenerateTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
  var renderCanvasData = enabledElement.renderingTools.renderCanvasData;
  var renderCanvasContext = enabledElement.renderingTools.renderCanvasContext; // The color image voi/invert has been modified - apply the lut to the underlying
  // Pixel data and put it into the renderCanvas

  if (image.rgba) {
    Object(_internal_storedRGBAPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_4__["default"])(image, colorLut, renderCanvasData.data);
  } else {
    Object(_internal_storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_3__["default"])(image, colorLut, renderCanvasData.data);
  }

  start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
  renderCanvasContext.putImageData(renderCanvasData, 0, 0);
  image.stats.lastPutImageDataTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
  return renderCanvas;
}
/**
 * API function to render a color image to an enabled element
 *
 * @param {EnabledElement} enabledElement The Cornerstone Enabled Element to redraw
 * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
 * @returns {void}
 * @memberof rendering
 */


function renderColorImage(enabledElement, invalidated) {
  if (enabledElement === undefined) {
    throw new Error('renderColorImage: enabledElement parameter must not be undefined');
  }

  var image = enabledElement.image;

  if (image === undefined) {
    throw new Error('renderColorImage: image must be loaded before it can be drawn');
  } // Get the canvas context and reset the transform


  var context = enabledElement.canvas.getContext('2d', {
    desynchronized: true
  });
  context.setTransform(1, 0, 0, 1, 0, 0); // Clear the canvas

  context.fillStyle = Object(_internal_getFillStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement);
  context.fillRect(0, 0, enabledElement.canvas.width, enabledElement.canvas.height); // Turn off image smooth/interpolation if pixelReplication is set in the viewport

  context.imageSmoothingEnabled = !enabledElement.viewport.pixelReplication;
  context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; // Save the canvas context state and apply the viewport properties

  Object(_setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_5__["default"])(enabledElement, context);
  var renderCanvas;

  if (enabledElement.options && enabledElement.options.renderer && enabledElement.options.renderer.toLowerCase() === 'webgl') {
    // If this enabled element has the option set for WebGL, we should
    // User it as our renderer.
    renderCanvas = _webgl_index_js__WEBPACK_IMPORTED_MODULE_6__["default"].renderer.render(enabledElement);
  } else {
    // If no options are set we will retrieve the renderCanvas through the
    // Normal Canvas rendering path
    renderCanvas = getRenderCanvas(enabledElement, image, invalidated);
  }

  var imageDisplayedArea = Object(_internal_getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_10__["default"])(enabledElement.image, enabledElement.viewport);
  var sx = imageDisplayedArea.tlhc.x - 1;
  var sy = imageDisplayedArea.tlhc.y - 1;
  var width = imageDisplayedArea.brhc.x - sx;
  var height = imageDisplayedArea.brhc.y - sy;
  context.drawImage(renderCanvas, sx, sy, width, height, sx, sy, width, height);
  enabledElement.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_9__["default"])(enabledElement);
}
function addColorLayer(layer, invalidated) {
  if (layer === undefined) {
    throw new Error('addColorLayer: layer parameter must not be undefined');
  }

  var image = layer.image;

  if (image === undefined) {
    throw new Error('addColorLayer: image must be loaded before it can be drawn');
  } // All multi-layer images should include the alpha value


  image.rgba = true;
  layer.canvas = getRenderCanvas(layer, image, invalidated);
  var context = layer.canvas.getContext('2d', {
    desynchronized: true
  }); // Turn off image smooth/interpolation if pixelReplication is set in the viewport

  context.imageSmoothingEnabled = !layer.viewport.pixelReplication;
  context.mozImageSmoothingEnabled = context.imageSmoothingEnabled;
  layer.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_9__["default"])(layer);
}

/***/ }),

/***/ "./rendering/renderGrayscaleImage.js":
/*!*******************************************!*\
  !*** ./rendering/renderGrayscaleImage.js ***!
  \*******************************************/
/*! exports provided: renderGrayscaleImage, addGrayscaleLayer */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_300675__) {

"use strict";
__nested_webpack_require_300675__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_300675__.d(__nested_webpack_exports__, "renderGrayscaleImage", function() { return renderGrayscaleImage; });
/* harmony export (binding) */ __nested_webpack_require_300675__.d(__nested_webpack_exports__, "addGrayscaleLayer", function() { return addGrayscaleLayer; });
/* harmony import */ var _internal_getFillStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_300675__(/*! ../internal/getFillStyle.js */ "./internal/getFillStyle.js");
/* harmony import */ var _internal_storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_300675__(/*! ../internal/storedPixelDataToCanvasImageData.js */ "./internal/storedPixelDataToCanvasImageData.js");
/* harmony import */ var _internal_storedPixelDataToCanvasImageDataRGBA_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_300675__(/*! ../internal/storedPixelDataToCanvasImageDataRGBA.js */ "./internal/storedPixelDataToCanvasImageDataRGBA.js");
/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_300675__(/*! ../setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js");
/* harmony import */ var _internal_now_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_300675__(/*! ../internal/now.js */ "./internal/now.js");
/* harmony import */ var _webgl_index_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_300675__(/*! ../webgl/index.js */ "./webgl/index.js");
/* harmony import */ var _getLut_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_300675__(/*! ./getLut.js */ "./rendering/getLut.js");
/* harmony import */ var _doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_300675__(/*! ./doesImageNeedToBeRendered.js */ "./rendering/doesImageNeedToBeRendered.js");
/* harmony import */ var _initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_300675__(/*! ./initializeRenderCanvas.js */ "./rendering/initializeRenderCanvas.js");
/* harmony import */ var _saveLastRendered_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_300675__(/*! ./saveLastRendered.js */ "./rendering/saveLastRendered.js");
/* harmony import */ var _internal_getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_300675__(/*! ../internal/getDisplayedArea.js */ "./internal/getDisplayedArea.js");











/**
 * Returns an appropriate canvas to render the Image. If the canvas available in the cache is appropriate
 * it is returned, otherwise adjustments are made. It also sets the color transfer functions.
 *
 * @param {Object} enabledElement The cornerstone enabled element
 * @param {Object} image The image to be rendered
 * @param {Boolean} invalidated Is pixel data valid
 * @param {Boolean} [useAlphaChannel = true] Will an alpha channel be used
 * @returns {HTMLCanvasElement} An appropriate canvas for rendering the image
 * @memberof rendering
 */

function getRenderCanvas(enabledElement, image, invalidated) {
  var useAlphaChannel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
  var canvasWasColor = enabledElement.renderingTools.lastRenderedIsColor === true;

  if (!enabledElement.renderingTools.renderCanvas || canvasWasColor) {
    enabledElement.renderingTools.renderCanvas = document.createElement('canvas');
    Object(_initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_8__["default"])(enabledElement, image);
  }

  var renderCanvas = enabledElement.renderingTools.renderCanvas;

  if (Object(_doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_7__["default"])(enabledElement, image) === false && invalidated !== true) {
    return renderCanvas;
  } // If our render canvas does not match the size of this image reset it
  // NOTE: This might be inefficient if we are updating multiple images of different
  // Sizes frequently.


  if (renderCanvas.width !== image.width || renderCanvas.height !== image.height) {
    Object(_initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_8__["default"])(enabledElement, image);
  } // Get the lut to use


  var start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_4__["default"])();
  var lut = Object(_getLut_js__WEBPACK_IMPORTED_MODULE_6__["default"])(image, enabledElement.viewport, invalidated);
  image.stats = image.stats || {};
  image.stats.lastLutGenerateTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_4__["default"])() - start;
  var renderCanvasData = enabledElement.renderingTools.renderCanvasData;
  var renderCanvasContext = enabledElement.renderingTools.renderCanvasContext; // Gray scale image - apply the lut and put the resulting image onto the render canvas

  if (useAlphaChannel) {
    Object(_internal_storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_1__["default"])(image, lut, renderCanvasData.data);
  } else {
    Object(_internal_storedPixelDataToCanvasImageDataRGBA_js__WEBPACK_IMPORTED_MODULE_2__["default"])(image, lut, renderCanvasData.data);
  }

  start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_4__["default"])();
  renderCanvasContext.putImageData(renderCanvasData, 0, 0);
  image.stats.lastPutImageDataTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_4__["default"])() - start;
  return renderCanvas;
}
/**
 * API function to draw a grayscale image to a given enabledElement
 *
 * @param {EnabledElement} enabledElement The Cornerstone Enabled Element to redraw
 * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
 * @returns {void}
 * @memberof rendering
 */


function renderGrayscaleImage(enabledElement, invalidated) {
  if (enabledElement === undefined) {
    throw new Error('drawImage: enabledElement parameter must not be undefined');
  }

  var image = enabledElement.image;

  if (image === undefined) {
    throw new Error('drawImage: image must be loaded before it can be drawn');
  } // Get the canvas context and reset the transform


  var context = enabledElement.canvas.getContext('2d', {
    desynchronized: true
  });
  context.setTransform(1, 0, 0, 1, 0, 0); // Clear the canvas

  context.fillStyle = Object(_internal_getFillStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement);
  context.fillRect(0, 0, enabledElement.canvas.width, enabledElement.canvas.height); // Turn off image smooth/interpolation if pixelReplication is set in the viewport

  context.imageSmoothingEnabled = !enabledElement.viewport.pixelReplication;
  context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; // Save the canvas context state and apply the viewport properties

  Object(_setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_3__["default"])(enabledElement, context);
  var renderCanvas;

  if (enabledElement.options && enabledElement.options.renderer && enabledElement.options.renderer.toLowerCase() === 'webgl') {
    // If this enabled element has the option set for WebGL, we should
    // User it as our renderer.
    renderCanvas = _webgl_index_js__WEBPACK_IMPORTED_MODULE_5__["default"].renderer.render(enabledElement);
  } else {
    // If no options are set we will retrieve the renderCanvas through the
    // Normal Canvas rendering path
    renderCanvas = getRenderCanvas(enabledElement, image, invalidated);
  }

  var imageDisplayedArea = Object(_internal_getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_10__["default"])(enabledElement.image, enabledElement.viewport);
  var sx = imageDisplayedArea.tlhc.x - 1;
  var sy = imageDisplayedArea.tlhc.y - 1;
  var width = imageDisplayedArea.brhc.x - sx;
  var height = imageDisplayedArea.brhc.y - sy;
  context.drawImage(renderCanvas, sx, sy, width, height, sx, sy, width, height);
  enabledElement.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_9__["default"])(enabledElement);
}
/**
 * API function to draw a grayscale image to a given layer
 *
 * @param {EnabledElementLayer} layer The layer that the image will be added to
 * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
 * @param {Boolean} [useAlphaChannel] - Whether or not to render the grayscale image using only the alpha channel.
                                        This does not work if this layer is not the first layer in the enabledElement.
 * @returns {void}
 */

function addGrayscaleLayer(layer, invalidated) {
  var useAlphaChannel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;

  if (layer === undefined) {
    throw new Error('addGrayscaleLayer: layer parameter must not be undefined');
  }

  var image = layer.image;

  if (image === undefined) {
    throw new Error('addGrayscaleLayer: image must be loaded before it can be drawn');
  }

  layer.canvas = getRenderCanvas(layer, image, invalidated, useAlphaChannel);
  var context = layer.canvas.getContext('2d', {
    desynchronized: true
  }); // Turn off image smooth/interpolation if pixelReplication is set in the viewport

  context.imageSmoothingEnabled = !layer.viewport.pixelReplication;
  context.mozImageSmoothingEnabled = context.imageSmoothingEnabled;
  layer.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_9__["default"])(layer);
}

/***/ }),

/***/ "./rendering/renderLabelMapImage.js":
/*!******************************************!*\
  !*** ./rendering/renderLabelMapImage.js ***!
  \******************************************/
/*! exports provided: renderLabelMapImage, addLabelMapLayer */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_310136__) {

"use strict";
__nested_webpack_require_310136__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_310136__.d(__nested_webpack_exports__, "renderLabelMapImage", function() { return renderLabelMapImage; });
/* harmony export (binding) */ __nested_webpack_require_310136__.d(__nested_webpack_exports__, "addLabelMapLayer", function() { return addLabelMapLayer; });
/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_310136__(/*! ../setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js");
/* harmony import */ var _internal_now_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_310136__(/*! ../internal/now.js */ "./internal/now.js");
/* harmony import */ var _internal_getFillStyle_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_310136__(/*! ../internal/getFillStyle.js */ "./internal/getFillStyle.js");
/* harmony import */ var _initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_310136__(/*! ./initializeRenderCanvas.js */ "./rendering/initializeRenderCanvas.js");
/* harmony import */ var _saveLastRendered_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_310136__(/*! ./saveLastRendered.js */ "./rendering/saveLastRendered.js");
/* harmony import */ var _doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_310136__(/*! ./doesImageNeedToBeRendered.js */ "./rendering/doesImageNeedToBeRendered.js");
/* harmony import */ var _internal_storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_310136__(/*! ../internal/storedPixelDataToCanvasImageDataColorLUT.js */ "./internal/storedPixelDataToCanvasImageDataColorLUT.js");
/* harmony import */ var _colors_index_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_310136__(/*! ../colors/index.js */ "./colors/index.js");
/* harmony import */ var _internal_getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_310136__(/*! ../internal/getDisplayedArea.js */ "./internal/getDisplayedArea.js");









/**
 * Returns an appropriate canvas to render the Image. If the canvas available in the cache is appropriate
 * it is returned, otherwise adjustments are made. It also sets the color transfer functions.
 *
 * @param {Object} enabledElement The cornerstone enabled element
 * @param {Object} image The image to be rendered
 * @param {Boolean} invalidated Is pixel data valid
 * @returns {HTMLCanvasElement} An appropriate canvas for rendering the image
 * @memberof rendering
 */

function getRenderCanvas(enabledElement, image, invalidated) {
  if (!enabledElement.renderingTools.renderCanvas) {
    enabledElement.renderingTools.renderCanvas = document.createElement('canvas');
  }

  var renderCanvas = enabledElement.renderingTools.renderCanvas;
  var colormap = enabledElement.viewport.colormap || enabledElement.options.colormap;

  if (enabledElement.options.colormap) {
    console.warn('enabledElement.options.colormap is deprecated. Use enabledElement.viewport.colormap instead');
  }

  if (colormap && typeof colormap === 'string') {
    colormap = _colors_index_js__WEBPACK_IMPORTED_MODULE_7__["default"].getColormap(colormap);
  }

  if (!colormap) {
    throw new Error('renderLabelMapImage: colormap not found.');
  }

  var colormapId = colormap.getId();

  if (Object(_doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_5__["default"])(enabledElement, image) === false && invalidated !== true && enabledElement.renderingTools.colormapId === colormapId) {
    return renderCanvas;
  } // If our render canvas does not match the size of this image reset it
  // NOTE: This might be inefficient if we are updating multiple images of different
  // Sizes frequently.


  if (renderCanvas.width !== image.width || renderCanvas.height !== image.height) {
    Object(_initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_3__["default"])(enabledElement, image);
  } // Get the lut to use


  var start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])();

  if (!enabledElement.renderingTools.colorLut || invalidated || enabledElement.renderingTools.colormapId !== colormapId) {
    enabledElement.renderingTools.colorLut = colormap.createLookupTable();
    enabledElement.renderingTools.colormapId = colormapId;
  }

  image.stats = image.stats || {};
  image.stats.lastLutGenerateTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start;
  var colorLut = enabledElement.renderingTools.colorLut;
  var renderCanvasData = enabledElement.renderingTools.renderCanvasData;
  var renderCanvasContext = enabledElement.renderingTools.renderCanvasContext;
  Object(_internal_storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_6__["default"])(image, colorLut, renderCanvasData.data);
  start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
  renderCanvasContext.putImageData(renderCanvasData, 0, 0);
  image.stats.lastPutImageDataTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start;
  return renderCanvas;
}
/**
 * API function to draw a label map image to a given enabledElement
 *
 * @param {EnabledElement} enabledElement The Cornerstone Enabled Element to redraw
 * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
 * @returns {void}
 * @memberof rendering
 */


function renderLabelMapImage(enabledElement, invalidated) {
  if (enabledElement === undefined) {
    throw new Error('renderLabelMapImage: enabledElement parameter must not be undefined');
  }

  var image = enabledElement.image;

  if (image === undefined) {
    throw new Error('renderLabelMapImage: image must be loaded before it can be drawn');
  } // Get the canvas context and reset the transform


  var context = enabledElement.canvas.getContext('2d', {
    desynchronized: true
  });
  context.setTransform(1, 0, 0, 1, 0, 0); // Clear the canvas

  context.fillStyle = Object(_internal_getFillStyle_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement);
  context.fillRect(0, 0, enabledElement.canvas.width, enabledElement.canvas.height); // Turn off image smooth/interpolation if pixelReplication is set in the viewport

  context.imageSmoothingEnabled = !enabledElement.viewport.pixelReplication;
  context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; // Save the canvas context state and apply the viewport properties

  Object(_setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement, context); // If no options are set we will retrieve the renderCanvas through the
  // Normal Canvas rendering path
  // TODO: Add WebGL support for label map pipeline

  var renderCanvas = getRenderCanvas(enabledElement, image, invalidated);
  var imageDisplayedArea = Object(_internal_getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_8__["default"])(enabledElement.image, enabledElement.viewport);
  var sx = imageDisplayedArea.tlhc.x - 1;
  var sy = imageDisplayedArea.tlhc.y - 1;
  var width = imageDisplayedArea.brhc.x - sx;
  var height = imageDisplayedArea.brhc.y - sy;
  context.drawImage(renderCanvas, sx, sy, width, height, sx, sy, width, height);
  enabledElement.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_4__["default"])(enabledElement);
}
/**
 * API function to draw a pseudo-color image to a given layer
 *
 * @param {EnabledElementLayer} layer The layer that the image will be added to
 * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
 * @returns {void}
 */

function addLabelMapLayer(layer, invalidated) {
  if (layer === undefined) {
    throw new Error('addLabelMapLayer: layer parameter must not be undefined');
  }

  var image = layer.image;

  if (image === undefined) {
    throw new Error('addLabelMapLayer: image must be loaded before it can be drawn');
  }

  layer.canvas = getRenderCanvas(layer, image, invalidated);
  var context = layer.canvas.getContext('2d', {
    desynchronized: true
  }); // Turn off image smooth/interpolation if pixelReplication is set in the viewport

  context.imageSmoothingEnabled = !layer.viewport.pixelReplication;
  context.mozImageSmoothingEnabled = context.imageSmoothingEnabled;
  layer.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_4__["default"])(layer);
}

/***/ }),

/***/ "./rendering/renderPseudoColorImage.js":
/*!*********************************************!*\
  !*** ./rendering/renderPseudoColorImage.js ***!
  \*********************************************/
/*! exports provided: renderPseudoColorImage, addPseudoColorLayer */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_318753__) {

"use strict";
__nested_webpack_require_318753__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_318753__.d(__nested_webpack_exports__, "renderPseudoColorImage", function() { return renderPseudoColorImage; });
/* harmony export (binding) */ __nested_webpack_require_318753__.d(__nested_webpack_exports__, "addPseudoColorLayer", function() { return addPseudoColorLayer; });
/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_318753__(/*! ../setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js");
/* harmony import */ var _internal_now_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_318753__(/*! ../internal/now.js */ "./internal/now.js");
/* harmony import */ var _internal_getFillStyle_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_318753__(/*! ../internal/getFillStyle.js */ "./internal/getFillStyle.js");
/* harmony import */ var _initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_318753__(/*! ./initializeRenderCanvas.js */ "./rendering/initializeRenderCanvas.js");
/* harmony import */ var _getLut_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_318753__(/*! ./getLut.js */ "./rendering/getLut.js");
/* harmony import */ var _saveLastRendered_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_318753__(/*! ./saveLastRendered.js */ "./rendering/saveLastRendered.js");
/* harmony import */ var _doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_318753__(/*! ./doesImageNeedToBeRendered.js */ "./rendering/doesImageNeedToBeRendered.js");
/* harmony import */ var _internal_storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_318753__(/*! ../internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js */ "./internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js");
/* harmony import */ var _colors_index_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_318753__(/*! ../colors/index.js */ "./colors/index.js");
/* harmony import */ var _internal_getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_318753__(/*! ../internal/getDisplayedArea.js */ "./internal/getDisplayedArea.js");










/**
 * Returns an appropriate canvas to render the Image. If the canvas available in the cache is appropriate
 * it is returned, otherwise adjustments are made. It also sets the color transfer functions.
 *
 * @param {Object} enabledElement The cornerstone enabled element
 * @param {Object} image The image to be rendered
 * @param {Boolean} invalidated Is pixel data valid
 * @returns {HTMLCanvasElement} An appropriate canvas for rendering the image
 * @memberof rendering
 */

function getRenderCanvas(enabledElement, image, invalidated) {
  if (!enabledElement.renderingTools.renderCanvas) {
    enabledElement.renderingTools.renderCanvas = document.createElement('canvas');
  }

  var renderCanvas = enabledElement.renderingTools.renderCanvas;
  var colormap = enabledElement.viewport.colormap || enabledElement.options.colormap;

  if (enabledElement.options && enabledElement.options.colormap) {
    console.warn('enabledElement.options.colormap is deprecated. Use enabledElement.viewport.colormap instead');
  }

  if (colormap && typeof colormap === 'string') {
    colormap = _colors_index_js__WEBPACK_IMPORTED_MODULE_8__["default"].getColormap(colormap);
  }

  if (!colormap) {
    throw new Error('renderPseudoColorImage: colormap not found.');
  }

  var colormapId = colormap.getId();

  if (Object(_doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_6__["default"])(enabledElement, image) === false && invalidated !== true && enabledElement.renderingTools.colormapId === colormapId) {
    return renderCanvas;
  } // If our render canvas does not match the size of this image reset it
  // NOTE: This might be inefficient if we are updating multiple images of different
  // Sizes frequently.


  if (renderCanvas.width !== image.width || renderCanvas.height !== image.height) {
    Object(_initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_3__["default"])(enabledElement, image);
  } // Get the lut to use


  var start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])();

  if (!enabledElement.renderingTools.colorLut || invalidated || enabledElement.renderingTools.colormapId !== colormapId) {
    colormap.setNumberOfColors(256);
    enabledElement.renderingTools.colorLut = colormap.createLookupTable();
    enabledElement.renderingTools.colormapId = colormapId;
  }

  var lut = Object(_getLut_js__WEBPACK_IMPORTED_MODULE_4__["default"])(image, enabledElement.viewport, invalidated);
  image.stats = image.stats || {};
  image.stats.lastLutGenerateTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start;
  var colorLut = enabledElement.renderingTools.colorLut;
  var renderCanvasData = enabledElement.renderingTools.renderCanvasData;
  var renderCanvasContext = enabledElement.renderingTools.renderCanvasContext;
  Object(_internal_storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_7__["default"])(image, lut, colorLut, renderCanvasData.data);
  start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
  renderCanvasContext.putImageData(renderCanvasData, 0, 0);
  image.stats.lastPutImageDataTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start;
  return renderCanvas;
}
/**
 * API function to draw a pseudo-color image to a given enabledElement
 *
 * @param {EnabledElement} enabledElement The Cornerstone Enabled Element to redraw
 * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
 * @returns {void}
 * @memberof rendering
 */


function renderPseudoColorImage(enabledElement, invalidated) {
  if (enabledElement === undefined) {
    throw new Error('drawImage: enabledElement parameter must not be undefined');
  }

  var image = enabledElement.image;

  if (image === undefined) {
    throw new Error('drawImage: image must be loaded before it can be drawn');
  } // Get the canvas context and reset the transform


  var context = enabledElement.canvas.getContext('2d', {
    desynchronized: true
  });
  context.setTransform(1, 0, 0, 1, 0, 0); // Clear the canvas

  context.fillStyle = Object(_internal_getFillStyle_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement);
  context.fillRect(0, 0, enabledElement.canvas.width, enabledElement.canvas.height); // Turn off image smooth/interpolation if pixelReplication is set in the viewport

  context.imageSmoothingEnabled = !enabledElement.viewport.pixelReplication;
  context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; // Save the canvas context state and apply the viewport properties

  Object(_setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement, context); // If no options are set we will retrieve the renderCanvas through the
  // Normal Canvas rendering path
  // TODO: Add WebGL support for pseudocolor pipeline

  var renderCanvas = getRenderCanvas(enabledElement, image, invalidated);
  var imageDisplayedArea = Object(_internal_getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_9__["default"])(enabledElement.image, enabledElement.viewport);
  var sx = imageDisplayedArea.tlhc.x - 1;
  var sy = imageDisplayedArea.tlhc.y - 1;
  var width = imageDisplayedArea.brhc.x - sx;
  var height = imageDisplayedArea.brhc.y - sy;
  context.drawImage(renderCanvas, sx, sy, width, height, sx, sy, width, height);
  enabledElement.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_5__["default"])(enabledElement);
}
/**
 * API function to draw a pseudo-color image to a given layer
 *
 * @param {EnabledElementLayer} layer The layer that the image will be added to
 * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
 * @returns {void}
 */

function addPseudoColorLayer(layer, invalidated) {
  if (layer === undefined) {
    throw new Error('addPseudoColorLayer: layer parameter must not be undefined');
  }

  var image = layer.image;

  if (image === undefined) {
    throw new Error('addPseudoColorLayer: image must be loaded before it can be drawn');
  }

  layer.canvas = getRenderCanvas(layer, image, invalidated);
  var context = layer.canvas.getContext('2d', {
    desynchronized: true
  }); // Turn off image smooth/interpolation if pixelReplication is set in the viewport

  context.imageSmoothingEnabled = !layer.viewport.pixelReplication;
  context.mozImageSmoothingEnabled = context.imageSmoothingEnabled;
  layer.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_5__["default"])(layer);
}

/***/ }),

/***/ "./rendering/renderToCanvas.js":
/*!*************************************!*\
  !*** ./rendering/renderToCanvas.js ***!
  \*************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_327656__) {

"use strict";
__nested_webpack_require_327656__.r(__nested_webpack_exports__);
/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_327656__(/*! ../triggerEvent.js */ "./triggerEvent.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_327656__(/*! ../events.js */ "./events.js");
/* harmony import */ var _internal_drawImageSync_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_327656__(/*! ../internal/drawImageSync.js */ "./internal/drawImageSync.js");
/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_327656__(/*! ../internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js");
/* harmony import */ var _internal_tryEnableWebgl_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_327656__(/*! ../internal/tryEnableWebgl.js */ "./internal/tryEnableWebgl.js");





/**
 * @typedef {Object} EnabledElementStub
 * @property {HTMLElement} element  The enabled element
 * @property {HTMLCanvasElement} canvas The current canvas
 * @property {Object} image Currently displayed image
 * @property {Boolean} invalid Whether or not the image pixel data has been changed
 * @property {Boolean} needsRedraw  A flag for triggering a redraw of the canvas without re-retrieving the pixel data, since it remains valid
 * @property {Object} options Layer drawing options
 * @property {Object[]} layers Layers added to the EnabledElement
 * @property {Object} data
 * @property {Object} renderingTools
 * @property {Object} viewport The current viewport
 * @memberof rendering
 */

/**
 * creates a dummy enabled element
 *
 * @param {HTMLCanvasElement} canvas the canvas that will be assigned to the enabled element.
 * @param {any} image An Image loaded by a Cornerstone Image Loader
 * @param { any } options Options for rendering the image (e.g.enable webgl by {renderer: 'webgl' })
 * @param { any } viewport A set of Cornerstone viewport parameters
 * @returns {EnabledElementStub} a dummy enabled element
 * @memberof rendering
 */

function createEnabledElementStub(canvas, image, options, viewport) {
  return {
    element: canvas,
    canvas: canvas,
    image: image,
    invalid: true,
    // True if image needs to be drawn, false if not
    needsRedraw: true,
    options: options,
    layers: [],
    data: {},
    renderingTools: {},
    viewport: viewport
  };
}
/**
 * Render the image to the provided canvas immediately.
 * @param {any} canvas The HTML canvas where the image will be rendered.
 * @param {any} image An Image loaded by a Cornerstone Image Loader
 * @param {any} [viewport = null] A set of Cornerstone viewport parameters
 * @param {any} [options = null] Options for rendering the image (e.g. enable webgl by {renderer: 'webgl'})
 * @returns {void}
 * @memberof rendering
 */


/* harmony default export */ __nested_webpack_exports__["default"] = (function (canvas, image) {
  var viewport = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;

  if (canvas === undefined) {
    throw new Error('renderToCanvas: parameter canvas cannot be undefined');
  } // If this enabled element has the option set for WebGL, we should
  // Check if this device actually supports it


  if (options && options.renderer && options.renderer.toLowerCase() === 'webgl') {
    Object(_internal_tryEnableWebgl_js__WEBPACK_IMPORTED_MODULE_4__["default"])(options);
  }

  var defaultViewport = Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_3__["default"])(canvas, image);

  if (viewport) {
    Object.assign(defaultViewport, viewport);
  }

  var enabledElementStub = createEnabledElementStub(canvas, image, options, defaultViewport);
  var eventDetails = {
    enabledElement: enabledElementStub,
    timestamp: Date.now()
  };
  Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElementStub.element, _events_js__WEBPACK_IMPORTED_MODULE_1__["default"].PRE_RENDER, eventDetails);
  Object(_internal_drawImageSync_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElementStub, enabledElementStub.invalid);
});

/***/ }),

/***/ "./rendering/renderWebImage.js":
/*!*************************************!*\
  !*** ./rendering/renderWebImage.js ***!
  \*************************************/
/*! exports provided: renderWebImage */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_332122__) {

"use strict";
__nested_webpack_require_332122__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_332122__.d(__nested_webpack_exports__, "renderWebImage", function() { return renderWebImage; });
/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_332122__(/*! ../setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js");
/* harmony import */ var _renderColorImage_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_332122__(/*! ./renderColorImage.js */ "./rendering/renderColorImage.js");
/* harmony import */ var _internal_getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_332122__(/*! ../internal/getDisplayedArea.js */ "./internal/getDisplayedArea.js");



/**
 * API function to draw a standard web image (PNG, JPG) to an enabledImage
 *
 * @param {EnabledElement} enabledElement The Cornerstone Enabled Element to redraw
 * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
 * @returns {void}
 * @memberof rendering
 */

function renderWebImage(enabledElement, invalidated) {
  if (enabledElement === undefined) {
    throw new Error('renderWebImage: enabledElement parameter must not be undefined');
  }

  var image = enabledElement.image;

  if (image === undefined) {
    throw new Error('renderWebImage: image must be loaded before it can be drawn');
  } // If the viewport ww/wc and invert all match the initial state of the image, we can draw the image
  // Directly. If any of those are changed, we call renderColorImage() to apply the lut


  if (enabledElement.viewport.voi.windowWidth === enabledElement.image.windowWidth && enabledElement.viewport.voi.windowCenter === enabledElement.image.windowCenter && enabledElement.viewport.invert === false) {
    // Get the canvas context and reset the transform
    var context = enabledElement.canvas.getContext('2d', {
      desynchronized: true
    });
    context.setTransform(1, 0, 0, 1, 0, 0); // Clear the canvas

    context.fillStyle = 'black';
    context.fillRect(0, 0, enabledElement.canvas.width, enabledElement.canvas.height); // Turn off image smooth/interpolation if pixelReplication is set in the viewport

    context.imageSmoothingEnabled = !enabledElement.viewport.pixelReplication;
    context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; // Save the canvas context state and apply the viewport properties

    Object(_setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement, context);
    var imageDisplayedArea = Object(_internal_getDisplayedArea_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement.image, enabledElement.viewport);
    var sx = imageDisplayedArea.tlhc.x - 1;
    var sy = imageDisplayedArea.tlhc.y - 1;
    var width = imageDisplayedArea.brhc.x - sx;
    var height = imageDisplayedArea.brhc.y - sy;
    context.drawImage(image.getImage(), sx, sy, width, height, sx, sy, width, height);
  } else {
    Object(_renderColorImage_js__WEBPACK_IMPORTED_MODULE_1__["renderColorImage"])(enabledElement, invalidated);
  }
}

/***/ }),

/***/ "./rendering/saveLastRendered.js":
/*!***************************************!*\
  !*** ./rendering/saveLastRendered.js ***!
  \***************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_335495__) {

"use strict";
__nested_webpack_require_335495__.r(__nested_webpack_exports__);
/**
 * Saves the parameters of the last render into renderingTools, used later to decide if data can be reused.
 *
 * @param {Object} enabledElement Cornerstone EnabledElement
 * @returns {Object} enabledElement.renderingTools
 * @memberof rendering
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (enabledElement) {
  var imageId = enabledElement.image.imageId;
  var viewport = enabledElement.viewport;
  var isColor = enabledElement.image.color;
  enabledElement.renderingTools.lastRenderedImageId = imageId;
  enabledElement.renderingTools.lastRenderedIsColor = isColor;
  enabledElement.renderingTools.lastRenderedViewport = {
    windowCenter: viewport.voi.windowCenter,
    windowWidth: viewport.voi.windowWidth,
    invert: viewport.invert,
    rotation: viewport.rotation,
    hflip: viewport.hflip,
    vflip: viewport.vflip,
    modalityLUT: viewport.modalityLUT,
    voiLUT: viewport.voiLUT,
    colormap: viewport.colormap
  };
  return enabledElement.renderingTools;
});

/***/ }),

/***/ "./requestPool/RequestPoolManager.ts":
/*!*******************************************!*\
  !*** ./requestPool/RequestPoolManager.ts ***!
  \*******************************************/
/*! exports provided: RequestPoolManager */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_336882__) {

"use strict";
__nested_webpack_require_336882__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_336882__.d(__nested_webpack_exports__, "RequestPoolManager", function() { return RequestPoolManager; });
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }

function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }

function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

var RequestPoolManager = /*#__PURE__*/function () {
  // priority is fixed for interaction and thumbnail to be 0, however,
  // the priority of prefetch can be configured and it can have priorities other
  // than 0 (highest priority)
  // TODO: Some of this stuff shouldn't be public but it's easier right now
  function RequestPoolManager() {
    _classCallCheck(this, RequestPoolManager);

    _defineProperty(this, "requestPool", void 0);

    _defineProperty(this, "awake", void 0);

    _defineProperty(this, "numRequests", void 0);

    _defineProperty(this, "maxNumRequests", void 0);

    _defineProperty(this, "grabDelay", void 0);

    _defineProperty(this, "timeoutHandle", void 0);

    this.requestPool = {
      interaction: {
        0: []
      },
      thumbnail: {
        0: []
      },
      prefetch: {
        0: []
      }
    };
    this.awake = false;
    this.grabDelay = 5;
    this.numRequests = {
      interaction: 0,
      thumbnail: 0,
      prefetch: 0
    };
    this.maxNumRequests = {
      interaction: 6,
      thumbnail: 6,
      prefetch: 5
    };
  }

  _createClass(RequestPoolManager, [{
    key: "destroy",
    value: function destroy() {
      if (this.timeoutHandle) {
        window.clearTimeout(this.timeoutHandle);
      }
    }
    /**
     * Adds the requests to the pool of requests.
     *
     * @param requestFn - A function that returns a promise which resolves in the image
     * @param type - Priority category, it can be either of interaction, prefetch,
     * or thumbnail.
     * @param additionalDetails - Additional details that requests can contain.
     * For instance the volumeUID for the volume requests
     * @param priority - Priority number for each category of requests. Its default
     * value is priority 0. The lower the priority number, the higher the priority number
     *
     * @returns void
     *
     */

  }, {
    key: "addRequest",
    value: function addRequest(requestFn, type, additionalDetails) {
      var priority = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
      var addToBeginning = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
      // Describe the request
      var requestDetails = {
        requestFn: requestFn,
        type: type,
        additionalDetails: additionalDetails
      }; // Check if the priority group exists on the request type

      if (this.requestPool[type][priority] === undefined) {
        this.requestPool[type][priority] = [];
      } // Adding the request to the correct priority group of the request type


      if (addToBeginning) {
        // Add it to the beginning of the stack
        this.requestPool[type][priority].unshift(requestDetails);
      } else {
        // Add it to the end of the stack
        this.requestPool[type][priority].push(requestDetails);
      } // Wake up


      if (!this.awake) {
        this.awake = true;
        this.startGrabbing();
      }
    }
    /**
     * Filter the requestPoolManager's pool of request based on the result of
     * provided filter function. The provided filter function needs to return false or true
     *
     * @param filterFunction The filter function for filtering of the requests to keep
     * @category requestPool
     */

  }, {
    key: "filterRequests",
    value: function filterRequests(filterFunction) {
      var _this = this;

      Object.keys(this.requestPool).forEach(function (type) {
        var requestType = _this.requestPool[type];
        Object.keys(requestType).forEach(function (priority) {
          requestType[priority] = requestType[priority].filter(function (requestDetails) {
            return filterFunction(requestDetails);
          });
        });
      });
    }
    /**
     * Clears the requests specific to the provided type. For instance, the
     * pool of requests of type 'interaction' can be cleared via this function.
     *
     *
     * @param type category of the request (either interaction, prefetch or thumbnail)
     * @category requestPool
     */

  }, {
    key: "clearRequestStack",
    value: function clearRequestStack(type) {
      if (!this.requestPool[type]) {
        throw new Error("No category for the type ".concat(type, " found"));
      }

      this.requestPool[type] = {
        0: []
      };
    }
  }, {
    key: "sendRequest",
    value: function sendRequest(_ref) {
      var _this2 = this;

      var requestFn = _ref.requestFn,
          type = _ref.type;
      // Increment the number of current requests of this type
      this.numRequests[type]++;
      this.awake = true;
      requestFn()["finally"](function () {
        _this2.numRequests[type]--;

        _this2.startAgain();
      });
    }
  }, {
    key: "startGrabbing",
    value: function startGrabbing() {
      // Begin by grabbing X images
      // TODO: This is the reason things aren't going as fast as expected
      // const maxSimultaneousRequests = getMaxSimultaneousRequests()
      // this.maxNumRequests = {
      //   interaction: Math.max(maxSimultaneousRequests, 1),
      //   thumbnail: Math.max(maxSimultaneousRequests - 2, 1),
      //   prefetch: Math.max(maxSimultaneousRequests - 1, 1),
      // }
      var maxRequests = this.maxNumRequests.interaction + this.maxNumRequests.thumbnail + this.maxNumRequests.prefetch;
      var currentRequests = this.numRequests.interaction + this.numRequests.thumbnail + this.numRequests.prefetch;
      var requestsToSend = maxRequests - currentRequests;

      for (var i = 0; i < requestsToSend; i++) {
        var _requestDetails = this.getNextRequest();

        if (_requestDetails === false) {
          break;
        } else if (_requestDetails) {
          this.sendRequest(_requestDetails);
        }
      }
    }
  }, {
    key: "startAgain",
    value: function startAgain() {
      var _this3 = this;

      if (!this.awake) {
        return;
      }

      if (this.grabDelay) {
        this.timeoutHandle = window.setTimeout(function () {
          _this3.startGrabbing();
        }, this.grabDelay);
      } else {
        this.startGrabbing();
      }
    }
  }, {
    key: "getSortedPriorityGroups",
    value: function getSortedPriorityGroups(type) {
      var _this4 = this;

      var priorities = Object.keys(this.requestPool[type]).map(Number).filter(function (priority) {
        return _this4.requestPool[type][priority].length;
      }).sort();
      return priorities;
    }
  }, {
    key: "getNextRequest",
    value: function getNextRequest() {
      var interactionPriorities = this.getSortedPriorityGroups('interaction');

      var _iterator = _createForOfIteratorHelper(interactionPriorities),
          _step;

      try {
        for (_iterator.s(); !(_step = _iterator.n()).done;) {
          var priority = _step.value;

          if (this.requestPool.interaction[priority].length && this.numRequests.interaction < this.maxNumRequests.interaction) {
            return this.requestPool.interaction[priority].shift();
          }
        }
      } catch (err) {
        _iterator.e(err);
      } finally {
        _iterator.f();
      }

      var thumbnailPriorities = this.getSortedPriorityGroups('thumbnail');

      var _iterator2 = _createForOfIteratorHelper(thumbnailPriorities),
          _step2;

      try {
        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
          var _priority = _step2.value;

          if (this.requestPool.thumbnail[_priority].length && this.numRequests.thumbnail < this.maxNumRequests.thumbnail) {
            return this.requestPool.thumbnail[_priority].shift();
          }
        }
      } catch (err) {
        _iterator2.e(err);
      } finally {
        _iterator2.f();
      }

      var prefetchPriorities = this.getSortedPriorityGroups('prefetch');

      var _iterator3 = _createForOfIteratorHelper(prefetchPriorities),
          _step3;

      try {
        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
          var _priority2 = _step3.value;

          if (this.requestPool.prefetch[_priority2].length && this.numRequests.prefetch < this.maxNumRequests.prefetch) {
            return this.requestPool.prefetch[_priority2].shift();
          }
        }
      } catch (err) {
        _iterator3.e(err);
      } finally {
        _iterator3.f();
      }

      if (!interactionPriorities.length && !thumbnailPriorities.length && !prefetchPriorities.length) {
        this.awake = false;
      }

      return false;
    }
    /**
     * Returns the request pool containing different categories, their priority and
     * the added request details.
     *
     * @returns
     * @category requestPool
     */

  }, {
    key: "getRequestPool",
    value: function getRequestPool() {
      return this.requestPool;
    }
  }]);

  return RequestPoolManager;
}();



/***/ }),

/***/ "./requestPool/imageLoadPoolManager.ts":
/*!*********************************************!*\
  !*** ./requestPool/imageLoadPoolManager.ts ***!
  \*********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_348735__) {

"use strict";
__nested_webpack_require_348735__.r(__nested_webpack_exports__);
/* harmony import */ var _RequestPoolManager_ts__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_348735__(/*! ./RequestPoolManager.ts */ "./requestPool/RequestPoolManager.ts");
 // Loading = Retrieval + Decoding

var imageLoadPoolManager = new _RequestPoolManager_ts__WEBPACK_IMPORTED_MODULE_0__["RequestPoolManager"]();
imageLoadPoolManager.maxNumRequests = {
  interaction: 1000,
  thumbnail: 1000,
  prefetch: 1000
};
imageLoadPoolManager.grabDelay = 0;
/* harmony default export */ __nested_webpack_exports__["default"] = (imageLoadPoolManager);

/***/ }),

/***/ "./requestPool/imageRetrievalPoolManager.ts":
/*!**************************************************!*\
  !*** ./requestPool/imageRetrievalPoolManager.ts ***!
  \**************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_349662__) {

"use strict";
__nested_webpack_require_349662__.r(__nested_webpack_exports__);
/* harmony import */ var _RequestPoolManager_ts__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_349662__(/*! ./RequestPoolManager.ts */ "./requestPool/RequestPoolManager.ts");
 // Retrieval (usually) === XHR requests

var imageRetrievalPoolManager = new _RequestPoolManager_ts__WEBPACK_IMPORTED_MODULE_0__["RequestPoolManager"]();
imageRetrievalPoolManager.maxNumRequests = {
  interaction: 20,
  thumbnail: 20,
  prefetch: 20
};
imageRetrievalPoolManager.grabDelay = 0;
/* harmony default export */ __nested_webpack_exports__["default"] = (imageRetrievalPoolManager);

/***/ }),

/***/ "./reset.js":
/*!******************!*\
  !*** ./reset.js ***!
  \******************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_350481__) {

"use strict";
__nested_webpack_require_350481__.r(__nested_webpack_exports__);
/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_350481__(/*! ./internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js");
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_350481__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_350481__(/*! ./updateImage.js */ "./updateImage.js");



/**
 * Resets the viewport to the default settings
 *
 * @param {HTMLElement} element An HTML Element enabled for Cornerstone
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element);
  enabledElement.viewport = Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement.canvas, enabledElement.image);
  Object(_updateImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element);
});

/***/ }),

/***/ "./resize.js":
/*!*******************!*\
  !*** ./resize.js ***!
  \*******************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_351801__) {

"use strict";
__nested_webpack_require_351801__.r(__nested_webpack_exports__);
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_351801__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _fitToWindow_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_351801__(/*! ./fitToWindow.js */ "./fitToWindow.js");
/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_351801__(/*! ./updateImage.js */ "./updateImage.js");
/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_351801__(/*! ./triggerEvent.js */ "./triggerEvent.js");
/* harmony import */ var _internal_getImageSize_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_351801__(/*! ./internal/getImageSize.js */ "./internal/getImageSize.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_351801__(/*! ./events.js */ "./events.js");






/**
 * This module is responsible for enabling an element to display images with cornerstone
 *
 * @param {HTMLElement} element The DOM element enabled for Cornerstone
 * @param {HTMLElement} canvas The Canvas DOM element within the DOM element enabled for Cornerstone
 * @returns {void}
 */

function setCanvasSize(element, canvas) {
  // The device pixel ratio is 1.0 for normal displays and > 1.0
  // For high DPI displays like Retina

  /*
      This functionality is disabled due to buggy behavior on systems with mixed DPI's.  If the canvas
    is created on a display with high DPI (e.g. 2.0) and then the browser window is dragged to
    a different display with a different DPI (e.g. 1.0), the canvas is not recreated so the pageToPixel
    produces incorrect results.  I couldn't find any way to determine when the DPI changed other than
    by polling which is not very clean.  If anyone has any ideas here, please let me know, but for now
    we will disable this functionality.  We may want
    to add a mechanism to optionally enable this functionality if we can determine it is safe to do
    so (e.g. iPad or iPhone or perhaps enumerate the displays on the system.  I am choosing
    to be cautious here since I would rather not have bug reports or safety issues related to this
    scenario.
      var devicePixelRatio = window.devicePixelRatio;
    if(devicePixelRatio === undefined) {
        devicePixelRatio = 1.0;
    }
    */
  // Avoid setting the same value because it flashes the canvas with IE and Edge
  if (canvas.width !== element.clientWidth) {
    canvas.width = element.clientWidth;
    canvas.style.width = "".concat(element.clientWidth, "px");
  } // Avoid setting the same value because it flashes the canvas with IE and Edge


  if (canvas.height !== element.clientHeight) {
    canvas.height = element.clientHeight;
    canvas.style.height = "".concat(element.clientHeight, "px");
  }
}
/**
 * Checks if the image of a given enabled element fitted the window
 * before the resize
 *
 * @param {EnabledElement} enabledElement The Cornerstone Enabled Element
 * @param {number} oldCanvasWidth The width of the canvas before the resize
 * @param {number} oldCanvasHeight The height of the canvas before the resize
 * @return {Boolean} true if it fitted the windows, false otherwise
 */


function wasFitToWindow(enabledElement, oldCanvasWidth, oldCanvasHeight) {
  var scale = enabledElement.viewport.scale;
  var imageSize = Object(_internal_getImageSize_js__WEBPACK_IMPORTED_MODULE_4__["default"])(enabledElement.image, enabledElement.viewport.rotation);
  var imageWidth = Math.round(imageSize.width * scale);
  var imageHeight = Math.round(imageSize.height * scale);
  var x = enabledElement.viewport.translation.x;
  var y = enabledElement.viewport.translation.y;
  return imageWidth === oldCanvasWidth && imageHeight <= oldCanvasHeight || imageWidth <= oldCanvasWidth && imageHeight === oldCanvasHeight && x === 0 && y === 0;
}
/**
 * Rescale the image relative to the changed size of the canvas
 *
 * @param {EnabledElement} enabledElement The Cornerstone Enabled Element
 * @param {number} oldCanvasWidth The width of the canvas before the resize
 * @param {number} oldCanvasHeight The height of the canvas before the resize
 * @return {void}
 */


function relativeRescale(enabledElement, oldCanvasWidth, oldCanvasHeight) {
  var scale = enabledElement.viewport.scale;
  var canvasWidth = enabledElement.canvas.width;
  var canvasHeight = enabledElement.canvas.height;
  var relWidthChange = canvasWidth / oldCanvasWidth;
  var relHeightChange = canvasHeight / oldCanvasHeight;
  var relChange = Math.sqrt(relWidthChange * relHeightChange);
  enabledElement.viewport.scale = relChange * scale;
}
/**
 * Resizes an enabled element and optionally fits the image to window
 *
 * @param {HTMLElement} element The DOM element enabled for Cornerstone
 * @param {Boolean} forceFitToWindow true to to force a refit, false to rescale accordingly
 * @returns {void}
 */


/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, forceFitToWindow) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
  var oldCanvasWidth = enabledElement.canvas.width;
  var oldCanvasHeight = enabledElement.canvas.height;
  setCanvasSize(element, enabledElement.canvas);
  var eventData = {
    element: element
  };
  Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_5__["default"].ELEMENT_RESIZED, eventData);

  if (enabledElement.image === undefined) {
    return;
  }

  if (forceFitToWindow || wasFitToWindow(enabledElement, oldCanvasWidth, oldCanvasHeight)) {
    // Fit the image to the window again if it fitted before the resize
    Object(_fitToWindow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element);
  } else {
    // Adapt the scale of a zoomed or panned image relative to the size change
    relativeRescale(enabledElement, oldCanvasWidth, oldCanvasHeight);
    Object(_updateImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element);
  }
});

/***/ }),

/***/ "./setToPixelCoordinateSystem.js":
/*!***************************************!*\
  !*** ./setToPixelCoordinateSystem.js ***!
  \***************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_358176__) {

"use strict";
__nested_webpack_require_358176__.r(__nested_webpack_exports__);
/* harmony import */ var _internal_calculateTransform_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_358176__(/*! ./internal/calculateTransform.js */ "./internal/calculateTransform.js");

/**
 * Sets the canvas context transformation matrix to the pixel coordinate system.  This allows
 * geometry to be driven using the canvas context using coordinates in the pixel coordinate system
 * @param {EnabledElement} enabledElement The
 * @param {CanvasRenderingContext2D} context The CanvasRenderingContext2D for the enabledElement's Canvas
 * @param {Number} [scale] Optional scale to apply
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (enabledElement, context, scale) {
  if (enabledElement === undefined) {
    throw new Error('setToPixelCoordinateSystem: parameter enabledElement must not be undefined');
  }

  if (context === undefined) {
    throw new Error('setToPixelCoordinateSystem: parameter context must not be undefined');
  }

  var transform = Object(_internal_calculateTransform_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement, scale);
  context.setTransform(transform.m[0], transform.m[1], transform.m[2], transform.m[3], transform.m[4], transform.m[5]);
});

/***/ }),

/***/ "./setViewport.js":
/*!************************!*\
  !*** ./setViewport.js ***!
  \************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_359696__) {

"use strict";
__nested_webpack_require_359696__.r(__nested_webpack_exports__);
/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_359696__(/*! ./internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js");
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_359696__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_359696__(/*! ./updateImage.js */ "./updateImage.js");



var MIN_WINDOW_WIDTH = 0.000001;
var MIN_VIEWPORT_SCALE = 0.0001;
/**
 * Sets/updates viewport of a given enabled element
 *
 * @param {HTMLElement} element - DOM element of the enabled element
 * @param {Viewport} [viewport] - Object containing the viewport properties
 * @returns {void}
 * @memberof ViewportSettings
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, viewport) {
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element); // If viewport is not already set, start with default and merge new
  // viewport options later

  if (enabledElement.viewport === undefined) {
    enabledElement.viewport = Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement.canvas);
  } // Merge viewport


  if (viewport) {
    for (var attrname in viewport) {
      if (viewport[attrname] !== null) {
        enabledElement.viewport[attrname] = viewport[attrname];
      }
    }
  } // Prevent window width from being too small (note that values close to zero are valid and can occur with
  // PET images in particular)


  if (enabledElement.viewport.voi.windowWidth) {
    enabledElement.viewport.voi.windowWidth = Math.max(enabledElement.viewport.voi.windowWidth, MIN_WINDOW_WIDTH);
  } // Prevent scale from getting too small


  if (enabledElement.viewport.scale) {
    enabledElement.viewport.scale = Math.max(enabledElement.viewport.scale, MIN_VIEWPORT_SCALE);
  } // Normalize the rotation value to a positive rotation in degrees


  enabledElement.viewport.rotation %= 360;

  if (enabledElement.viewport.rotation < 0) {
    enabledElement.viewport.rotation += 360;
  }

  if (enabledElement.image) {
    // Force the image to be updated since the viewport has been modified
    Object(_updateImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element);
  }
});

/***/ }),

/***/ "./triggerEvent.js":
/*!*************************!*\
  !*** ./triggerEvent.js ***!
  \*************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_362357__) {

"use strict";
__nested_webpack_require_362357__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_362357__.d(__nested_webpack_exports__, "default", function() { return triggerEvent; });
/**
 * Trigger a CustomEvent
 *
 * @param {EventTarget} el The element or EventTarget to trigger the event upon
 * @param {String} type The event type name
 * @param {Object|null} detail=null The event data to be sent
 * @returns {Boolean} The return value is false if at least one event listener called preventDefault(). Otherwise it returns true.
 */
function triggerEvent(el, type) {
  var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
  var event; // This check is needed to polyfill CustomEvent on IE11-

  if (typeof window.CustomEvent === 'function') {
    event = new CustomEvent(type, {
      detail: detail,
      cancelable: true
    });
  } else {
    event = document.createEvent('CustomEvent');
    event.initCustomEvent(type, true, true, detail);
  }

  return el.dispatchEvent(event);
}

/***/ }),

/***/ "./updateImage.js":
/*!************************!*\
  !*** ./updateImage.js ***!
  \************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_363607__) {

"use strict";
__nested_webpack_require_363607__.r(__nested_webpack_exports__);
/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_363607__(/*! ./enabledElements.js */ "./enabledElements.js");
/* harmony import */ var _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_363607__(/*! ./internal/drawImage.js */ "./internal/drawImage.js");


/**
 * Forces the image to be updated/redrawn for the specified enabled element
 * @param {HTMLElement} element An HTML Element enabled for Cornerstone
 * @param {Boolean} [invalidated=false] Whether or not the image pixel data has been changed, necessitating a redraw
 *
 * @returns {void}
 * @memberof Drawing
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element) {
  var invalidated = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
  var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
  Object(_internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement, invalidated);
});

/***/ }),

/***/ "./webgl/createProgramFromString.js":
/*!******************************************!*\
  !*** ./webgl/createProgramFromString.js ***!
  \******************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_364989__) {

"use strict";
__nested_webpack_require_364989__.r(__nested_webpack_exports__);
/**
 * Creates and compiles a shader.
 *
 * @param {!WebGLRenderingContext} gl The WebGL Context.
 * @param {string} shaderSource The GLSL source code for the shader.
 * @param {number} shaderType The type of shader, VERTEX_SHADER or FRAGMENT_SHADER.
 *
 * @return {!WebGLShader} The shader.
 * @memberof WebGLRendering
 */
function compileShader(gl, shaderSource, shaderType) {
  // Create the shader object
  var shader = gl.createShader(shaderType); // Set the shader source code.

  gl.shaderSource(shader, shaderSource); // Compile the shader

  gl.compileShader(shader); // Check if it compiled

  var success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);

  if (!success && !gl.isContextLost()) {
    // Something went wrong during compilation; get the error
    var infoLog = gl.getShaderInfoLog(shader);
    console.error("Could not compile shader:\n".concat(infoLog));
  }

  return shader;
}
/**
 * Creates a program from 2 shaders.
 *
 * @param {!WebGLRenderingContext} gl The WebGL context.
 * @param {!WebGLShader} vertexShader A vertex shader.
 * @param {!WebGLShader} fragmentShader A fragment shader.
 * @return {!WebGLProgram} A program.
 * @memberof WebGLRendering
 */


function createProgram(gl, vertexShader, fragmentShader) {
  // Create a program.
  var program = gl.createProgram(); // Attach the shaders.

  gl.attachShader(program, vertexShader);
  gl.attachShader(program, fragmentShader); // Link the program.

  gl.linkProgram(program); // Check if it linked.

  var success = gl.getProgramParameter(program, gl.LINK_STATUS);

  if (!success && !gl.isContextLost()) {
    // Something went wrong with the link
    var infoLog = gl.getProgramInfoLog(program);
    console.error("WebGL program filed to link:\n".concat(infoLog));
  }

  return program;
}
/**
 * Creates a program from 2 shaders source (Strings)
 * @param  {!WebGLRenderingContext} gl              The WebGL context.
 * @param  {!WebGLShader} vertexShaderSrc   Vertex shader string
 * @param  {!WebGLShader} fragShaderSrc Fragment shader string
 * @return {!WebGLProgram}                 A program
 * @memberof WebGLRendering
 */


/* harmony default export */ __nested_webpack_exports__["default"] = (function (gl, vertexShaderSrc, fragShaderSrc) {
  var vertexShader = compileShader(gl, vertexShaderSrc, gl.VERTEX_SHADER);
  var fragShader = compileShader(gl, fragShaderSrc, gl.FRAGMENT_SHADER);
  return createProgram(gl, vertexShader, fragShader);
});

/***/ }),

/***/ "./webgl/index.js":
/*!************************!*\
  !*** ./webgl/index.js ***!
  \************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_367725__) {

"use strict";
__nested_webpack_require_367725__.r(__nested_webpack_exports__);
/* harmony import */ var _renderer_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_367725__(/*! ./renderer.js */ "./webgl/renderer.js");
/* harmony import */ var _createProgramFromString_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_367725__(/*! ./createProgramFromString.js */ "./webgl/createProgramFromString.js");
/* harmony import */ var _textureCache_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_367725__(/*! ./textureCache.js */ "./webgl/textureCache.js");



/**
 * @module WebGLRendering
 */

var mod = {
  createProgramFromString: _createProgramFromString_js__WEBPACK_IMPORTED_MODULE_1__["default"],
  renderer: {
    render: _renderer_js__WEBPACK_IMPORTED_MODULE_0__["render"],
    initRenderer: _renderer_js__WEBPACK_IMPORTED_MODULE_0__["initRenderer"],
    getRenderCanvas: _renderer_js__WEBPACK_IMPORTED_MODULE_0__["getRenderCanvas"],
    isWebGLAvailable: _renderer_js__WEBPACK_IMPORTED_MODULE_0__["isWebGLAvailable"]
  },
  textureCache: _textureCache_js__WEBPACK_IMPORTED_MODULE_2__["default"]
};
Object.defineProperty(mod, 'isWebGLInitialized', {
  enumerable: true,
  configurable: false,
  get: function get() {
    return _renderer_js__WEBPACK_IMPORTED_MODULE_0__["isWebGLInitialized"];
  }
});
/* harmony default export */ __nested_webpack_exports__["default"] = (mod);

/***/ }),

/***/ "./webgl/renderer.js":
/*!***************************!*\
  !*** ./webgl/renderer.js ***!
  \***************************/
/*! exports provided: isWebGLInitialized, getRenderCanvas, initRenderer, render, isWebGLAvailable */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_369372__) {

"use strict";
__nested_webpack_require_369372__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_369372__.d(__nested_webpack_exports__, "isWebGLInitialized", function() { return isWebGLInitialized; });
/* harmony export (binding) */ __nested_webpack_require_369372__.d(__nested_webpack_exports__, "getRenderCanvas", function() { return getRenderCanvas; });
/* harmony export (binding) */ __nested_webpack_require_369372__.d(__nested_webpack_exports__, "initRenderer", function() { return initRenderer; });
/* harmony export (binding) */ __nested_webpack_require_369372__.d(__nested_webpack_exports__, "render", function() { return render; });
/* harmony export (binding) */ __nested_webpack_require_369372__.d(__nested_webpack_exports__, "isWebGLAvailable", function() { return isWebGLAvailable; });
/* harmony import */ var _shaders_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_369372__(/*! ./shaders/index.js */ "./webgl/shaders/index.js");
/* harmony import */ var _vertexShader_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_369372__(/*! ./vertexShader.js */ "./webgl/vertexShader.js");
/* harmony import */ var _textureCache_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_369372__(/*! ./textureCache.js */ "./webgl/textureCache.js");
/* harmony import */ var _createProgramFromString_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_369372__(/*! ./createProgramFromString.js */ "./webgl/createProgramFromString.js");
/* eslint no-bitwise: 0 */




var renderCanvas = document.createElement('canvas');
var gl;
var texCoordBuffer;
var positionBuffer;
var isWebGLInitialized = false;

function getRenderCanvas() {
  return renderCanvas;
}

function initShaders() {
  for (var id in _shaders_index_js__WEBPACK_IMPORTED_MODULE_0__["shaders"]) {
    // Console.log("WEBGL: Loading shader", id);
    var shader = _shaders_index_js__WEBPACK_IMPORTED_MODULE_0__["shaders"][id];
    shader.attributes = {};
    shader.uniforms = {};
    shader.vert = _vertexShader_js__WEBPACK_IMPORTED_MODULE_1__["vertexShader"];
    shader.program = Object(_createProgramFromString_js__WEBPACK_IMPORTED_MODULE_3__["default"])(gl, shader.vert, shader.frag);
    shader.attributes.texCoordLocation = gl.getAttribLocation(shader.program, 'a_texCoord');
    gl.enableVertexAttribArray(shader.attributes.texCoordLocation);
    shader.attributes.positionLocation = gl.getAttribLocation(shader.program, 'a_position');
    gl.enableVertexAttribArray(shader.attributes.positionLocation);
    shader.uniforms.resolutionLocation = gl.getUniformLocation(shader.program, 'u_resolution');
  }
}

function initRenderer() {
  if (isWebGLInitialized === true) {
    // Console.log("WEBGL Renderer already initialized");
    return;
  }

  if (initWebGL(renderCanvas)) {
    initBuffers();
    initShaders(); // Console.log("WEBGL Renderer initialized!");

    isWebGLInitialized = true;
  }
}

function updateRectangle(gl, width, height) {
  gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([width, height, 0, height, width, 0, 0, 0]), gl.STATIC_DRAW);
}

function handleLostContext(event) {
  event.preventDefault();
  console.warn('WebGL Context Lost!');
}

function handleRestoredContext(event) {
  event.preventDefault();
  isWebGLInitialized = false;
  _textureCache_js__WEBPACK_IMPORTED_MODULE_2__["default"].purgeCache();
  initRenderer(); // Console.log('WebGL Context Restored.');
}

function initWebGL(canvas) {
  gl = null;

  try {
    // Try to grab the standard context. If it fails, fallback to experimental.
    var options = {
      desynchronized: true,
      preserveDrawingBuffer: true // Preserve buffer so we can copy to display canvas element

    }; // ---------------- Testing purposes -------------
    // If (debug === true && WebGLDebugUtils) {
    //    RenderCanvas = WebGLDebugUtils.makeLostContextSimulatingCanvas(renderCanvas);
    // }
    // ---------------- Testing purposes -------------

    gl = canvas.getContext('webgl', options) || canvas.getContext('experimental-webgl', options); // Set up event listeners for context lost / context restored

    canvas.removeEventListener('webglcontextlost', handleLostContext, false);
    canvas.addEventListener('webglcontextlost', handleLostContext, false);
    canvas.removeEventListener('webglcontextrestored', handleRestoredContext, false);
    canvas.addEventListener('webglcontextrestored', handleRestoredContext, false);
  } catch (error) {
    throw new Error('Error creating WebGL context');
  } // If we don't have a GL context, give up now


  if (!gl) {
    console.error('Unable to initialize WebGL. Your browser may not support it.');
    gl = null;
  }

  return gl;
}
/**
 * Returns the image data type as a string representation.
 * @param {any} image The cornerstone image object
 * @returns {string} image data type (rgb, iint16, uint16, int8 and uint8)
 * @memberof WebGLRendering
 */


function getImageDataType(image) {
  if (image.color) {
    return 'rgb';
  }

  var pixelData = image.getPixelData();

  if (pixelData instanceof Int16Array) {
    return 'int16';
  }

  if (pixelData instanceof Uint16Array) {
    return 'uint16';
  }

  if (pixelData instanceof Int8Array) {
    return 'int8';
  }

  return 'uint8';
}

function getShaderProgram(image) {
  var datatype = getImageDataType(image); // We need a mechanism for
  // Choosing the shader based on the image datatype
  // Console.log("Datatype: " + datatype);

  if (_shaders_index_js__WEBPACK_IMPORTED_MODULE_0__["shaders"].hasOwnProperty(datatype)) {
    return _shaders_index_js__WEBPACK_IMPORTED_MODULE_0__["shaders"][datatype];
  }

  return _shaders_index_js__WEBPACK_IMPORTED_MODULE_0__["shaders"].rgb;
}

function generateTexture(image) {
  var TEXTURE_FORMAT = {
    uint8: gl.LUMINANCE,
    int8: gl.LUMINANCE_ALPHA,
    uint16: gl.LUMINANCE_ALPHA,
    int16: gl.RGB,
    rgb: gl.RGB
  };
  var TEXTURE_BYTES = {
    int8: 1,
    // Luminance
    uint16: 2,
    // Luminance + Alpha
    int16: 3,
    // RGB
    rgb: 3 // RGB

  };
  var imageDataType = getImageDataType(image);
  var format = TEXTURE_FORMAT[imageDataType]; // GL texture configuration

  var texture = gl.createTexture();
  gl.bindTexture(gl.TEXTURE_2D, texture);
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
  gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);
  var imageData = _shaders_index_js__WEBPACK_IMPORTED_MODULE_0__["dataUtilities"][imageDataType].storedPixelDataToImageData(image, image.width, image.height);
  gl.texImage2D(gl.TEXTURE_2D, 0, format, image.width, image.height, 0, format, gl.UNSIGNED_BYTE, imageData); // Calculate the size in bytes of this image in memory

  var sizeInBytes = image.width * image.height * TEXTURE_BYTES[imageDataType];
  return {
    texture: texture,
    sizeInBytes: sizeInBytes
  };
}

function getImageTexture(image) {
  var imageTexture = _textureCache_js__WEBPACK_IMPORTED_MODULE_2__["default"].getImageTexture(image.imageId);

  if (!imageTexture) {
    // Console.log("Generating texture for imageid: ", image.imageId);
    imageTexture = generateTexture(image);
    _textureCache_js__WEBPACK_IMPORTED_MODULE_2__["default"].putImageTexture(image, imageTexture);
  }

  return imageTexture.texture;
}

function initBuffers() {
  positionBuffer = gl.createBuffer();
  gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
  gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1, 1, 0, 1, 1, 0, 0, 0]), gl.STATIC_DRAW);
  texCoordBuffer = gl.createBuffer();
  gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);
  gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0]), gl.STATIC_DRAW);
}

function renderQuad(shader, parameters, texture, width, height) {
  gl.clearColor(1.0, 0.0, 0.0, 1.0);
  gl.viewport(0, 0, width, height);
  gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
  gl.useProgram(shader.program);
  gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);
  gl.vertexAttribPointer(shader.attributes.texCoordLocation, 2, gl.FLOAT, false, 0, 0);
  gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
  gl.vertexAttribPointer(shader.attributes.positionLocation, 2, gl.FLOAT, false, 0, 0);

  for (var key in parameters) {
    var uniformLocation = gl.getUniformLocation(shader.program, key);

    if (!uniformLocation) {
      continue; // Disabling this error for now since RGB requires minPixelValue
      // but the other shaders do not.
      // throw `Could not access location for uniform: ${key}`;
    }

    var uniform = parameters[key];
    var type = uniform.type;
    var value = uniform.value;

    if (type === 'i') {
      gl.uniform1i(uniformLocation, value);
    } else if (type === 'f') {
      gl.uniform1f(uniformLocation, value);
    } else if (type === '2f') {
      gl.uniform2f(uniformLocation, value[0], value[1]);
    }
  }

  updateRectangle(gl, width, height);
  gl.activeTexture(gl.TEXTURE0);
  gl.bindTexture(gl.TEXTURE_2D, texture);
  gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
}

function render(enabledElement) {
  // Resize the canvas
  var image = enabledElement.image;
  renderCanvas.width = image.width;
  renderCanvas.height = image.height;
  var viewport = enabledElement.viewport; // Render the current image

  var shader = getShaderProgram(image);
  var texture = getImageTexture(image);
  var parameters = {
    u_resolution: {
      type: '2f',
      value: [image.width, image.height]
    },
    wc: {
      type: 'f',
      value: viewport.voi.windowCenter
    },
    ww: {
      type: 'f',
      value: viewport.voi.windowWidth
    },
    slope: {
      type: 'f',
      value: image.slope
    },
    intercept: {
      type: 'f',
      value: image.intercept
    },
    minPixelValue: {
      type: 'f',
      value: image.minPixelValue
    },
    invert: {
      type: 'i',
      value: viewport.invert ? 1 : 0
    }
  };
  renderQuad(shader, parameters, texture, image.width, image.height);
  return renderCanvas;
}
function isWebGLAvailable() {
  // Adapted from
  // http://stackoverflow.com/questions/9899807/three-js-detect-webgl-support-and-fallback-to-regular-canvas
  var options = {
    failIfMajorPerformanceCaveat: true
  };

  try {
    var canvas = document.createElement('canvas');
    return Boolean(window.WebGLRenderingContext) && (canvas.getContext('webgl', options) || canvas.getContext('experimental-webgl', options));
  } catch (e) {
    return false;
  }
}

/***/ }),

/***/ "./webgl/shaders/index.js":
/*!********************************!*\
  !*** ./webgl/shaders/index.js ***!
  \********************************/
/*! exports provided: shaders, dataUtilities */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_380096__) {

"use strict";
__nested_webpack_require_380096__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_380096__.d(__nested_webpack_exports__, "shaders", function() { return shaders; });
/* harmony export (binding) */ __nested_webpack_require_380096__.d(__nested_webpack_exports__, "dataUtilities", function() { return dataUtilities; });
/* harmony import */ var _int16_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_380096__(/*! ./int16.js */ "./webgl/shaders/int16.js");
/* harmony import */ var _int8_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_380096__(/*! ./int8.js */ "./webgl/shaders/int8.js");
/* harmony import */ var _rgb_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_380096__(/*! ./rgb.js */ "./webgl/shaders/rgb.js");
/* harmony import */ var _uint16_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_380096__(/*! ./uint16.js */ "./webgl/shaders/uint16.js");
/* harmony import */ var _uint8_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_380096__(/*! ./uint8.js */ "./webgl/shaders/uint8.js");





var shaders = {
  int16: _int16_js__WEBPACK_IMPORTED_MODULE_0__["int16Shader"],
  int8: _int8_js__WEBPACK_IMPORTED_MODULE_1__["int8Shader"],
  rgb: _rgb_js__WEBPACK_IMPORTED_MODULE_2__["rgbShader"],
  uint16: _uint16_js__WEBPACK_IMPORTED_MODULE_3__["uint16Shader"],
  uint8: _uint8_js__WEBPACK_IMPORTED_MODULE_4__["uint8Shader"]
};
var dataUtilities = {
  int16: _int16_js__WEBPACK_IMPORTED_MODULE_0__["int16DataUtilities"],
  int8: _int8_js__WEBPACK_IMPORTED_MODULE_1__["int8DataUtilities"],
  rgb: _rgb_js__WEBPACK_IMPORTED_MODULE_2__["rgbDataUtilities"],
  uint16: _uint16_js__WEBPACK_IMPORTED_MODULE_3__["uint16DataUtilities"],
  uint8: _uint8_js__WEBPACK_IMPORTED_MODULE_4__["uint8DataUtilities"]
};


/***/ }),

/***/ "./webgl/shaders/int16.js":
/*!********************************!*\
  !*** ./webgl/shaders/int16.js ***!
  \********************************/
/*! exports provided: int16DataUtilities, int16Shader */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_382057__) {

"use strict";
__nested_webpack_require_382057__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_382057__.d(__nested_webpack_exports__, "int16DataUtilities", function() { return int16DataUtilities; });
/* harmony export (binding) */ __nested_webpack_require_382057__.d(__nested_webpack_exports__, "int16Shader", function() { return int16Shader; });
/* eslint no-bitwise: 0 */
var int16Shader = {};
/**
 * Convert stored pixel data to image data.
 *
 * Pack int16 into three uint8 channels (r, g, b)
 *
 * @param {Image} image A Cornerstone Image Object
 * @returns {Uint8Array} The image data for use by the WebGL shader
 * @memberof WebGLRendering
 */

function storedPixelDataToImageData(image) {
  // Transfer image data to alpha and luminance channels of WebGL texture
  // Credit to @jpambrun and @fernandojsg
  // Pack int16 into three uint8 channels (r, g, b)
  var pixelData = image.getPixelData();
  var numberOfChannels = 3;
  var data = new Uint8Array(image.width * image.height * numberOfChannels);
  var offset = 0;

  for (var i = 0; i < pixelData.length; i++) {
    var val = Math.abs(pixelData[i]);
    data[offset++] = val & 0xFF;
    data[offset++] = val >> 8;
    data[offset++] = pixelData[i] < 0 ? 0 : 1; // 0 For negative, 1 for positive
  }

  return data;
}

var int16DataUtilities = {
  storedPixelDataToImageData: storedPixelDataToImageData
};
int16Shader.frag = 'precision mediump float;' + 'uniform sampler2D u_image;' + 'uniform float ww;' + 'uniform float wc;' + 'uniform float slope;' + 'uniform float intercept;' + 'uniform int invert;' + 'varying vec2 v_texCoord;' + 'void main() {' + // Get texture
'vec4 color = texture2D(u_image, v_texCoord);' + // Calculate luminance from packed texture
'float intensity = color.r*256.0 + color.g*65536.0;' + 'if (color.b == 0.0)' + 'intensity = -intensity;' + // Rescale based on slope and window settings
'intensity = intensity * slope + intercept;' + 'float center0 = wc - 0.5;' + 'float width0 = max(ww, 1.0);' + 'intensity = (intensity - center0) / width0 + 0.5;' + // Clamp intensity
'intensity = clamp(intensity, 0.0, 1.0);' + // RGBA output
'gl_FragColor = vec4(intensity, intensity, intensity, 1.0);' + // Apply any inversion necessary
'if (invert == 1)' + 'gl_FragColor.rgb = 1.0 - gl_FragColor.rgb;' + '}';


/***/ }),

/***/ "./webgl/shaders/int8.js":
/*!*******************************!*\
  !*** ./webgl/shaders/int8.js ***!
  \*******************************/
/*! exports provided: int8DataUtilities, int8Shader */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_384601__) {

"use strict";
__nested_webpack_require_384601__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_384601__.d(__nested_webpack_exports__, "int8DataUtilities", function() { return int8DataUtilities; });
/* harmony export (binding) */ __nested_webpack_require_384601__.d(__nested_webpack_exports__, "int8Shader", function() { return int8Shader; });
var int8Shader = {};
/**
 * Convert stored pixel data to image data.
 *
 * Store data in Uint8Array
 *
 * @param {Image} image A Cornerstone Image Object
 * @returns {Uint8Array} The image data for use by the WebGL shader
 * @memberof WebGLRendering
 */

function storedPixelDataToImageData(image) {
  // Transfer image data to alpha channel of WebGL texture
  // Store data in Uint8Array
  var pixelData = image.getPixelData();
  var numberOfChannels = 2;
  var data = new Uint8Array(image.width * image.height * numberOfChannels);
  var offset = 0;

  for (var i = 0; i < pixelData.length; i++) {
    data[offset++] = pixelData[i];
    data[offset++] = pixelData[i] < 0 ? 0 : 1; // 0 For negative, 1 for positive
  }

  return data;
}

var int8DataUtilities = {
  storedPixelDataToImageData: storedPixelDataToImageData
};
int8Shader.frag = 'precision mediump float;' + 'uniform sampler2D u_image;' + 'uniform float ww;' + 'uniform float wc;' + 'uniform float slope;' + 'uniform float intercept;' + 'uniform int invert;' + 'varying vec2 v_texCoord;' + 'void main() {' + // Get texture
'vec4 color = texture2D(u_image, v_texCoord);' + // Calculate luminance from packed texture
'float intensity = color.r*256.;' + 'if (color.a == 0.0)' + 'intensity = -intensity;' + // Rescale based on slope and window settings
'intensity = intensity * slope + intercept;' + 'float center0 = wc - 0.5;' + 'float width0 = max(ww, 1.0);' + 'intensity = (intensity - center0) / width0 + 0.5;' + // Clamp intensity
'intensity = clamp(intensity, 0.0, 1.0);' + // RGBA output
'gl_FragColor = vec4(intensity, intensity, intensity, 1.0);' + // Apply any inversion necessary
'if (invert == 1)' + 'gl_FragColor.rgb = 1.0 - gl_FragColor.rgb;' + '}';


/***/ }),

/***/ "./webgl/shaders/rgb.js":
/*!******************************!*\
  !*** ./webgl/shaders/rgb.js ***!
  \******************************/
/*! exports provided: rgbDataUtilities, rgbShader */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_386918__) {

"use strict";
__nested_webpack_require_386918__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_386918__.d(__nested_webpack_exports__, "rgbDataUtilities", function() { return rgbDataUtilities; });
/* harmony export (binding) */ __nested_webpack_require_386918__.d(__nested_webpack_exports__, "rgbShader", function() { return rgbShader; });
var rgbShader = {};
/**
 * Convert stored pixel data to image data.
 *
 * Pack RGB images into a 3-channel RGB texture
 *
 * @param {Image} image A Cornerstone Image Object
 * @returns {Uint8Array} The image data for use by the WebGL shader
 * @memberof WebGLRendering
 */

function storedPixelDataToImageData(image) {
  var minPixelValue = image.minPixelValue;
  var canvasImageDataIndex = 0;
  var storedPixelDataIndex = 0; // Only 3 channels, since we use WebGL's RGB texture format

  var numStoredPixels = image.width * image.height * 4;
  var numOutputPixels = image.width * image.height * 3;
  var storedPixelData = image.getPixelData();
  var data = new Uint8Array(numOutputPixels); // NOTE: As of Nov 2014, most javascript engines have lower performance when indexing negative indexes.
  // We have a special code path for this case that improves performance.  Thanks to @jpambrun for this enhancement

  if (minPixelValue < 0) {
    while (storedPixelDataIndex < numStoredPixels) {
      data[canvasImageDataIndex++] = storedPixelData[storedPixelDataIndex++] + -minPixelValue; // Red

      data[canvasImageDataIndex++] = storedPixelData[storedPixelDataIndex++] + -minPixelValue; // Green

      data[canvasImageDataIndex++] = storedPixelData[storedPixelDataIndex++] + -minPixelValue; // Blue

      storedPixelDataIndex += 1; // The stored pixel data has 4 channels
    }
  } else {
    while (storedPixelDataIndex < numStoredPixels) {
      data[canvasImageDataIndex++] = storedPixelData[storedPixelDataIndex++]; // Red

      data[canvasImageDataIndex++] = storedPixelData[storedPixelDataIndex++]; // Green

      data[canvasImageDataIndex++] = storedPixelData[storedPixelDataIndex++]; // Blue

      storedPixelDataIndex += 1; // The stored pixel data has 4 channels
    }
  }

  return data;
}

var rgbDataUtilities = {
  storedPixelDataToImageData: storedPixelDataToImageData
};
rgbShader.frag = 'precision mediump float;' + 'uniform sampler2D u_image;' + 'uniform float ww;' + 'uniform float wc;' + 'uniform float slope;' + 'uniform float intercept;' + 'uniform float minPixelValue;' + 'uniform int invert;' + 'varying vec2 v_texCoord;' + 'void main() {' + // Get texture
'vec3 color = texture2D(u_image, v_texCoord).xyz;' + // Rescale based on slope and intercept
'color = color * 256.0 * slope + intercept;' + // Apply window settings
'float center0 = wc - 0.5 - minPixelValue;' + 'float width0 = max(ww, 1.0);' + 'color = (color - center0) / width0 + 0.5;' + // RGBA output
'gl_FragColor = vec4(color, 1);' + // Apply any inversion necessary
'if (invert == 1)' + 'gl_FragColor.rgb = 1. - gl_FragColor.rgb;' + '}';


/***/ }),

/***/ "./webgl/shaders/uint16.js":
/*!*********************************!*\
  !*** ./webgl/shaders/uint16.js ***!
  \*********************************/
/*! exports provided: uint16DataUtilities, uint16Shader */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_390160__) {

"use strict";
__nested_webpack_require_390160__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_390160__.d(__nested_webpack_exports__, "uint16DataUtilities", function() { return uint16DataUtilities; });
/* harmony export (binding) */ __nested_webpack_require_390160__.d(__nested_webpack_exports__, "uint16Shader", function() { return uint16Shader; });
/* eslint no-bitwise: 0 */
var uint16Shader = {};
/**
 * Convert stored pixel data to image data.
 *
 * For uint16 pack uint16 into two uint8 channels (r and a).
 *
 * @param {Image} image A Cornerstone Image Object
 * @returns {Uint8Array} The image data for use by the WebGL shader
 * @memberof WebGLRendering
 */

function storedPixelDataToImageData(image) {
  // Transfer image data to alpha and luminance channels of WebGL texture
  // Credit to @jpambrun and @fernandojsg
  // Pack uint16 into two uint8 channels (r and a)
  var pixelData = image.getPixelData();
  var numberOfChannels = 2;
  var data = new Uint8Array(image.width * image.height * numberOfChannels);
  var offset = 0;

  for (var i = 0; i < pixelData.length; i++) {
    var val = pixelData[i];
    data[offset++] = val & 0xFF;
    data[offset++] = val >> 8;
  }

  return data;
}

var uint16DataUtilities = {
  storedPixelDataToImageData: storedPixelDataToImageData
};
uint16Shader.frag = 'precision mediump float;' + 'uniform sampler2D u_image;' + 'uniform float ww;' + 'uniform float wc;' + 'uniform float slope;' + 'uniform float intercept;' + 'uniform int invert;' + 'varying vec2 v_texCoord;' + 'void main() {' + // Get texture
'vec4 color = texture2D(u_image, v_texCoord);' + // Calculate luminance from packed texture
'float intensity = color.r*256.0 + color.a*65536.0;' + // Rescale based on slope and window settings
'intensity = intensity * slope + intercept;' + 'float center0 = wc - 0.5;' + 'float width0 = max(ww, 1.0);' + 'intensity = (intensity - center0) / width0 + 0.5;' + // Clamp intensity
'intensity = clamp(intensity, 0.0, 1.0);' + // RGBA output
'gl_FragColor = vec4(intensity, intensity, intensity, 1.0);' + // Apply any inversion necessary
'if (invert == 1)' + 'gl_FragColor.rgb = 1.0 - gl_FragColor.rgb;' + '}';


/***/ }),

/***/ "./webgl/shaders/uint8.js":
/*!********************************!*\
  !*** ./webgl/shaders/uint8.js ***!
  \********************************/
/*! exports provided: uint8DataUtilities, uint8Shader */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_392584__) {

"use strict";
__nested_webpack_require_392584__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_392584__.d(__nested_webpack_exports__, "uint8DataUtilities", function() { return uint8DataUtilities; });
/* harmony export (binding) */ __nested_webpack_require_392584__.d(__nested_webpack_exports__, "uint8Shader", function() { return uint8Shader; });
var uint8Shader = {};
/**
 * Convert stored pixel data to image data. Here we will store
 * all data in the alpha channel.
 *
 * @param {Image} image A Cornerstone Image Object
 * @returns {Uint8Array} The image data for use by the WebGL shader
 * @memberof WebGLRendering
 */

function storedPixelDataToImageData(image) {
  // Transfer image data to alpha channel of WebGL texture
  return image.getPixelData();
}

var uint8DataUtilities = {
  storedPixelDataToImageData: storedPixelDataToImageData
};
uint8Shader.frag = 'precision mediump float;' + 'uniform sampler2D u_image;' + 'uniform float ww;' + 'uniform float wc;' + 'uniform float slope;' + 'uniform float intercept;' + 'uniform int invert;' + 'varying vec2 v_texCoord;' + 'void main() {' + // Get texture
'vec4 color = texture2D(u_image, v_texCoord);' + // Calculate luminance from packed texture
'float intensity = color.r*256.0;' + // Rescale based on slope and window settings
'intensity = intensity * slope + intercept;' + 'float center0 = wc - 0.5;' + 'float width0 = max(ww, 1.0);' + 'intensity = (intensity - center0) / width0 + 0.5;' + // Clamp intensity
'intensity = clamp(intensity, 0.0, 1.0);' + // RGBA output
'gl_FragColor = vec4(intensity, intensity, intensity, 1.0);' + // Apply any inversion necessary
'if (invert == 1)' + 'gl_FragColor.rgb = 1.0 - gl_FragColor.rgb;' + '}';


/***/ }),

/***/ "./webgl/textureCache.js":
/*!*******************************!*\
  !*** ./webgl/textureCache.js ***!
  \*******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_394518__) {

"use strict";
__nested_webpack_require_394518__.r(__nested_webpack_exports__);
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_394518__(/*! ../events.js */ "./events.js");
/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_394518__(/*! ../triggerEvent.js */ "./triggerEvent.js");


/**
 * This module deals with caching image textures in VRAM for WebGL
 * @module WebGLTextureCache
 */

var imageCache = {};
var cachedImages = [];
var maximumSizeInBytes = 1024 * 1024 * 256; // 256 MB

var cacheSizeInBytes = 0;

function getCacheInfo() {
  return {
    maximumSizeInBytes: maximumSizeInBytes,
    cacheSizeInBytes: cacheSizeInBytes,
    numberOfImagesCached: cachedImages.length
  };
}

function purgeCacheIfNecessary() {
  // If max cache size has not been exceeded, do nothing
  if (cacheSizeInBytes <= maximumSizeInBytes) {
    return;
  } // Cache size has been exceeded, create list of images sorted by timeStamp
  // So we can purge the least recently used image


  function compare(a, b) {
    if (a.timeStamp > b.timeStamp) {
      return -1;
    }

    if (a.timeStamp < b.timeStamp) {
      return 1;
    }

    return 0;
  }

  cachedImages.sort(compare); // Remove images as necessary

  while (cacheSizeInBytes > maximumSizeInBytes) {
    var lastCachedImage = cachedImages[cachedImages.length - 1];
    cacheSizeInBytes -= lastCachedImage.sizeInBytes;
    delete imageCache[lastCachedImage.imageId];
    cachedImages.pop();
    Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].WEBGL_TEXTURE_REMOVED, {
      imageId: lastCachedImage.imageId
    });
  }

  var cacheInfo = getCacheInfo();
  Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].WEBGL_TEXTURE_CACHE_FULL, cacheInfo);
}

function setMaximumSizeBytes(numBytes) {
  if (numBytes === undefined) {
    throw new Error('setMaximumSizeBytes: parameter numBytes must not be undefined');
  }

  if (numBytes.toFixed === undefined) {
    throw new Error('setMaximumSizeBytes: parameter numBytes must be a number');
  }

  maximumSizeInBytes = numBytes;
  purgeCacheIfNecessary();
}

function putImageTexture(image, imageTexture) {
  var imageId = image.imageId;

  if (image === undefined) {
    throw new Error('putImageTexture: image must not be undefined');
  }

  if (imageId === undefined) {
    throw new Error('putImageTexture: imageId must not be undefined');
  }

  if (imageTexture === undefined) {
    throw new Error('putImageTexture: imageTexture must not be undefined');
  }

  if (Object.prototype.hasOwnProperty.call(imageCache, imageId) === true) {
    throw new Error('putImageTexture: imageId already in cache');
  }

  var cachedImage = {
    imageId: imageId,
    imageTexture: imageTexture,
    timeStamp: new Date(),
    sizeInBytes: imageTexture.sizeInBytes
  };
  imageCache[imageId] = cachedImage;
  cachedImages.push(cachedImage);

  if (imageTexture.sizeInBytes === undefined) {
    throw new Error('putImageTexture: imageTexture.sizeInBytes must not be undefined');
  }

  if (imageTexture.sizeInBytes.toFixed === undefined) {
    throw new Error('putImageTexture: imageTexture.sizeInBytes is not a number');
  }

  cacheSizeInBytes += cachedImage.sizeInBytes;
  purgeCacheIfNecessary();
}

function getImageTexture(imageId) {
  if (imageId === undefined) {
    throw new Error('getImageTexture: imageId must not be undefined');
  }

  var cachedImage = imageCache[imageId];

  if (cachedImage === undefined) {
    return;
  } // Bump time stamp for cached image


  cachedImage.timeStamp = new Date();
  return cachedImage.imageTexture;
}

function removeImageTexture(imageId) {
  if (imageId === undefined) {
    throw new Error('removeImageTexture: imageId must not be undefined');
  }

  var cachedImage = imageCache[imageId];

  if (cachedImage === undefined) {
    throw new Error('removeImageTexture: imageId must not be undefined');
  }

  cachedImages.splice(cachedImages.indexOf(cachedImage), 1);
  cacheSizeInBytes -= cachedImage.sizeInBytes;
  delete imageCache[imageId];
  return cachedImage.imageTexture;
}

function purgeCache() {
  while (cachedImages.length > 0) {
    var removedCachedImage = cachedImages.pop();
    delete imageCache[removedCachedImage.imageId];
  }

  cacheSizeInBytes = 0;
}

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  purgeCache: purgeCache,
  getImageTexture: getImageTexture,
  putImageTexture: putImageTexture,
  removeImageTexture: removeImageTexture,
  setMaximumSizeBytes: setMaximumSizeBytes
});

/***/ }),

/***/ "./webgl/vertexShader.js":
/*!*******************************!*\
  !*** ./webgl/vertexShader.js ***!
  \*******************************/
/*! exports provided: vertexShader */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_399522__) {

"use strict";
__nested_webpack_require_399522__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_399522__.d(__nested_webpack_exports__, "vertexShader", function() { return vertexShader; });
var vertexShader = 'attribute vec2 a_position;' + 'attribute vec2 a_texCoord;' + 'uniform vec2 u_resolution;' + 'varying vec2 v_texCoord;' + 'void main() {' + 'vec2 zeroToOne = a_position / u_resolution;' + 'vec2 zeroToTwo = zeroToOne * 2.0;' + 'vec2 clipSpace = zeroToTwo - 1.0;' + 'gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);' + 'v_texCoord = a_texCoord;' + '}';

/***/ })

/******/ });
});
//# sourceMappingURL=cornerstone.js.map

/***/ }),

/***/ 2869:
/***/ ((module) => {

/*! cornerstone-file-image-loader - 0.3.0 - 2020-04-16 | (c) 2016 Chris Hafey | https://github.com/webnamics/cornerstoneFileImageLoader#readme */
!function(e,t){ true?module.exports=t():0}(window,function(){return r={},a.m=n=[function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.external=void 0;var r,a=n(6),i=(r=a)&&r.__esModule?r:{default:r};var o=void 0,u={set cornerstone(e){o=e,(0,i.default)(o)},get cornerstone(){return o}};t.external=u},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(u){return new Promise(function(e,t){var n=new Image,r=new Uint8Array(u),a=new Blob([r]),i=window.URL||window.webkitURL,o=i.createObjectURL(a);n.src=o,n.onload=function(){e(n),i.revokeObjectURL(o)},n.onerror=function(e){i.revokeObjectURL(o),t(e)}})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(t,n){var e=t.naturalHeight,r=t.naturalWidth;return{imageId:n,minPixelValue:0,maxPixelValue:255,slope:1,intercept:0,windowCenter:128,windowWidth:255,render:a.external.cornerstone.renderWebImage,getPixelData:function(){return function(){var e=void 0;o===n?e=i.getContext("2d"):(i.height=t.naturalHeight,i.width=t.naturalWidth,(e=i.getContext("2d")).drawImage(t,0,0),o=n);return e.getImageData(0,0,t.naturalWidth,t.naturalHeight)}().data},getCanvas:function(){return o===n||(i.height=t.naturalHeight,i.width=t.naturalWidth,i.getContext("2d").drawImage(t,0,0),o=n),i},getImage:function(){return t},rows:e,columns:r,height:e,width:r,color:!0,rgba:!1,columnPixelSpacing:void 0,rowPixelSpacing:void 0,invert:!1,sizeInBytes:e*r*4}};var a=n(0),i=document.createElement("canvas"),o=void 0},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.loadImage=function(a){var e=(0,c.default)(a),t=parseInt(e.url,10),i=s.default.get(t);{if("imagefile"===e.scheme)return{promise:new Promise(function(n,r){var e=new FileReader;e.onload=function(e){var t=e.target.result;(0,u.default)(t).then(function(e){var t=(0,f.default)(e,a);n(t)},r)},e.onerror=r,e.readAsArrayBuffer(i)})};if("imagebuffer"===e.scheme)return{promise:new Promise(function(n,e){if(null!=i){var t=i;(0,u.default)(t).then(function(e){var t=(0,f.default)(e,a);n(t)},e)}else e("buffer is null or undefined")})};if("imageimage"===e.scheme)return{promise:new Promise(function(n,e){null!=i?(0,r.default)(i).then(function(e){var t=(0,f.default)(e,a);n(t)},e):e("image is null or undefined")})};if("imagecanvas"===e.scheme)return{promise:new Promise(function(n,e){null!=i?(0,l.default)(i).then(function(e){var t=(0,f.default)(e,a);n(t)},e):e("canvas is null or undefined")})};if("imagecustom"===e.scheme){var o=(new Date).getTime();return{promise:new Promise(function(n,e){var r=(new Date).getTime();null!=i?(0,d.default)(a,i).then(function(e){var t=(new Date).getTime();e.loadTimeInMS=r-o,e.totalTimeInMS=t-o,n(e)},e):e("custom object is null or undefined")})}}}},t.configure=function(e){e};n(0);var u=a(n(1)),r=a(n(7)),l=a(n(8)),f=(a(n(9)),a(n(2))),d=a(n(10)),c=a(n(11)),s=a(n(4));function a(e){return e&&e.__esModule?e:{default:e}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=[];t.default={add:function(e){return"imagefile:"+(r.push(e)-1)},addBuffer:function(e){return"imagebuffer:"+(r.push(e)-1)},addImage:function(e){return"imageimage:"+(r.push(e)-1)},addCanvas:function(e){return"imagecanvas:"+(r.push(e)-1)},addCustom:function(e){return"imagecustom:"+(r.push(e)-1)},get:function(e){return r[e]},remove:function(e){r[e]=void 0},purge:function(){r=[]}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.fileManager=t.external=t.configure=t.loadImage=t.createImage=t.arrayBufferToImage=void 0;var r=l(n(1)),a=l(n(2)),i=l(n(4)),o=n(3),u=n(0);function l(e){return e&&e.__esModule?e:{default:e}}var f={arrayBufferToImage:r.default,createImage:a.default,loadImage:o.loadImage,configure:o.configure,external:u.external,fileManager:i.default};t.arrayBufferToImage=r.default,t.createImage=a.default,t.loadImage=o.loadImage,t.configure=o.configure,t.external=u.external,t.fileManager=i.default,t.default=f},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){e.registerImageLoader("imagefile",r.loadImage),e.registerImageLoader("imagebuffer",r.loadImage),e.registerImageLoader("imageimage",r.loadImage),e.registerImageLoader("imagecanvas",r.loadImage),e.registerImageLoader("imagecustom",r.loadImage)};var r=n(3)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(n){return new Promise(function(e,t){n.onload=function(){e(n)},n.onerror=function(e){t(e)}})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(r){return new Promise(function(e,t){var n=new Image;n.src=r.toDataURL("image/jpeg"),n.onload=function(){e(n)},n.onerror=function(e){t(e)}})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return new Promise(function(e,t){var n=new Image;n.src=canvas.toDataURL("image/jpeg"),n.onload=function(){e(n)},n.onerror=function(e){t(e)}})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=t.rows,r=t.columns,a=void 0;return(a={imageId:e,minPixelValue:t.image.minPixelValue,maxPixelValue:t.image.maxPixelValue,slope:t.image.slope,intercept:t.image.intercept,windowCenter:t.image.windowCenter,windowWidth:t.image.windowWidth,rows:n,columns:r,height:n,width:r,color:t.image.color,rgba:t.image.rgba,columnPixelSpacing:t.image.columnPixelSpacing,rowPixelSpacing:t.image.rowPixelSpacing,invert:t.image.invert,sizeInBytes:n*r*4,getPixelData:function(){return t.pixelData}}).modalityLUT=t.image.modalityLUT,a.voiLUT=t.image.voiLUT,a.data=t.image.data,new Promise(function(e,t){e(a)})};n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=e.indexOf(":"),n=e.substring(t+1),r=n.indexOf("frame="),a=void 0;if(-1!==r){var i=n.substr(r+6);a=parseInt(i,10),n=n.substr(0,r-1)}return{scheme:e.substr(0,t),url:n,frame:a}}}],a.c=r,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)a.d(n,r,function(e){return t[e]}.bind(null,r));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=5);function a(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,a),t.l=!0,t.exports}var n,r});
//# sourceMappingURL=cornerstoneFileImageLoader.min.js.map

/***/ }),

/***/ 352:
/***/ ((module) => {

/*! cornerstone-math - 0.1.10 - 2022-06-09 | (c) 2017 Chris Hafey | https://github.com/cornerstonejs/cornerstoneMath */
!function(t,e){ true?module.exports=e():0}(window,function(){return function(t){var e={};function n(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)n.d(i,r,function(e){return t[e]}.bind(null,r));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=4)}([function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),r=function(t){return t&&t.__esModule?t:{default:t}}(n(2)),o=n(1);var s=function(){function t(e,n,i){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.x=e||0,this.y=n||0,this.z=i||0}return i(t,[{key:"set",value:function(t,e,n){return this.x=t,this.y=e,this.z=n,this}},{key:"setX",value:function(t){return this.x=t,this}},{key:"setY",value:function(t){return this.y=t,this}},{key:"setZ",value:function(t){return this.z=t,this}},{key:"setComponent",value:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}}},{key:"getComponent",value:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}},{key:"copy",value:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}},{key:"add",value:function(t,e){return void 0!==e?(console.warn("DEPRECATED: Vector3's .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}},{key:"addScalar",value:function(t){return this.x+=t,this.y+=t,this.z+=t,this}},{key:"addVectors",value:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}},{key:"sub",value:function(t,e){return void 0!==e?(console.warn("DEPRECATED: Vector3's .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}},{key:"subVectors",value:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}},{key:"multiply",value:function(t,e){return void 0!==e?(console.warn("DEPRECATED: Vector3's .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}},{key:"multiplyScalar",value:function(t){return this.x*=t,this.y*=t,this.z*=t,this}},{key:"multiplyVectors",value:function(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}},{key:"applyMatrix3",value:function(t){var e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}},{key:"applyMatrix4",value:function(t){var e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i+r[12],this.y=r[1]*e+r[5]*n+r[9]*i+r[13],this.z=r[2]*e+r[6]*n+r[10]*i+r[14],this}},{key:"applyProjection",value:function(t){var e=this.x,n=this.y,i=this.z,r=t.elements,o=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*o,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*o,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*o,this}},{key:"applyQuaternion",value:function(t){var e=this.x,n=this.y,i=this.z,r=t.x,o=t.y,s=t.z,a=t.w,u=a*e+o*i-s*n,h=a*n+s*e-r*i,l=a*i+r*n-o*e,c=-r*e-o*n-s*i;return this.x=u*a+c*-r+h*-s-l*-o,this.y=h*a+c*-o+l*-r-u*-s,this.z=l*a+c*-s+u*-o-h*-r,this}},{key:"transformDirection",value:function(t){var e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize(),this}},{key:"divide",value:function(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}},{key:"divideScalar",value:function(t){if(0!==t){var e=1/t;this.x*=e,this.y*=e,this.z*=e}else this.x=0,this.y=0,this.z=0;return this}},{key:"min",value:function(t){return this.x>t.x&&(this.x=t.x),this.y>t.y&&(this.y=t.y),this.z>t.z&&(this.z=t.z),this}},{key:"max",value:function(t){return this.x<t.x&&(this.x=t.x),this.y<t.y&&(this.y=t.y),this.z<t.z&&(this.z=t.z),this}},{key:"clamp",value:function(t,e){return this.x<t.x?this.x=t.x:this.x>e.x&&(this.x=e.x),this.y<t.y?this.y=t.y:this.y>e.y&&(this.y=e.y),this.z<t.z?this.z=t.z:this.z>e.z&&(this.z=e.z),this}},{key:"floor",value:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}},{key:"ceil",value:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}},{key:"round",value:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}},{key:"roundToZero",value:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}},{key:"negate",value:function(){return this.multiplyScalar(-1)}},{key:"dot",value:function(t){return this.x*t.x+this.y*t.y+this.z*t.z}},{key:"lengthSq",value:function(){return this.x*this.x+this.y*this.y+this.z*this.z}},{key:"length",value:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}},{key:"lengthManhattan",value:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}},{key:"normalize",value:function(){return this.divideScalar(this.length())}},{key:"setLength",value:function(t){var e=this.length();return 0!==e&&t!==e&&this.multiplyScalar(t/e),this}},{key:"lerp",value:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}},{key:"cross",value:function(t,e){if(void 0!==e)return console.warn("DEPRECATED: Vector3's .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e);var n=this.x,i=this.y,r=this.z;return this.x=i*t.z-r*t.y,this.y=r*t.x-n*t.z,this.z=n*t.y-i*t.x,this}},{key:"crossVectors",value:function(t,e){var n=t.x,i=t.y,r=t.z,o=e.x,s=e.y,a=e.z;return this.x=i*a-r*s,this.y=r*o-n*a,this.z=n*s-i*o,this}},{key:"angleTo",value:function(t){var e=this.dot(t)/(this.length()*t.length());return Math.acos((0,o.clamp)(e,-1,1))}},{key:"distanceTo",value:function(t){return Math.sqrt(this.distanceToSquared(t))}},{key:"distanceToSquared",value:function(t){var e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}},{key:"setFromMatrixPosition",value:function(t){return this.x=t.elements[12],this.y=t.elements[13],this.z=t.elements[14],this}},{key:"setFromMatrixScale",value:function(t){var e=this.set(t.elements[0],t.elements[1],t.elements[2]).length(),n=this.set(t.elements[4],t.elements[5],t.elements[6]).length(),i=this.set(t.elements[8],t.elements[9],t.elements[10]).length();return this.x=e,this.y=n,this.z=i,this}},{key:"setFromMatrixColumn",value:function(t,e){var n=4*t,i=e.elements;return this.x=i[n],this.y=i[n+1],this.z=i[n+2],this}},{key:"equals",value:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}},{key:"fromArray",value:function(t){return this.x=t[0],this.y=t[1],this.z=t[2],this}},{key:"toArray",value:function(){return[this.x,this.y,this.z]}},{key:"clone",value:function(){return new t(this.x,this.y,this.z)}}]),t}();s.prototype.projectOnVector=function(){var t=void 0,e=void 0;return function(n){return void 0===t&&(t=new s),t.copy(n).normalize(),e=this.dot(t),this.copy(t).multiplyScalar(e)}}(),s.prototype.projectOnPlane=function(){var t=void 0;return function(e){return void 0===t&&(t=new s),t.copy(this).projectOnVector(e),this.sub(t)}}(),s.prototype.reflect=function(){var t=void 0;return function(e){return void 0===t&&(t=new s),this.sub(t.copy(e).multiplyScalar(2*this.dot(e)))}}(),s.prototype.clampScalar=function(){var t=void 0,e=void 0;return function(n,i){return void 0===t&&(t=new s,e=new s),t.set(n,n,n),e.set(i,i,i),this.clamp(t,e)}}(),s.prototype.applyAxisAngle=function(){var t=void 0;return function(e,n){return void 0===t&&(t=new r.default),this.applyQuaternion(t.setFromAxisAngle(e.normalize(),n)),this}}(),e.default=s},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=1e-4;e.clamp=function(t,e,n){return t<e?e:t>n?n:t},e.degToRad=function(t){return t*(Math.PI/180)},e.approximatelyEquals=function(t,e,n){var r=n||i;return Math.abs(t-e)<=r*Math.max(1,Math.abs(t),Math.abs(e))},e.radToDeg=function(t){return t*(180/Math.PI)},e.sign=function(t){return"number"==typeof t?t?t<0?-1:1:t==t?0:NaN:NaN}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}();var r=function(){function t(e,n,i,r){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.x=e||0,this.y=n||0,this.z=i||0,this.w=void 0!==r?r:1}return i(t,[{key:"setFromAxisAngle",value:function(t,e){var n=e/2,i=Math.sin(n);return this.x=t.x*i,this.y=t.y*i,this.z=t.z*i,this.w=Math.cos(n),this}},{key:"multiplyQuaternions",value:function(t,e){var n=t.x,i=t.y,r=t.z,o=t.w,s=e.x,a=e.y,u=e.z,h=e.w;return this.x=n*h+o*s+i*u-r*a,this.y=i*h+o*a+r*s-n*u,this.z=r*h+o*u+n*a-i*s,this.w=o*h-n*s-i*a-r*u,this}},{key:"setFromRotationMatrix",value:function(t){var e=t.elements,n=e[0],i=e[4],r=e[8],o=e[1],s=e[5],a=e[9],u=e[2],h=e[6],l=e[10],c=n+s+l,y=void 0;return c>0?(y=.5/Math.sqrt(c+1),this.w=.25/y,this.x=(h-a)*y,this.y=(r-u)*y,this.z=(o-i)*y):n>s&&n>l?(y=2*Math.sqrt(1+n-s-l),this.w=(h-a)/y,this.x=.25*y,this.y=(i+o)/y,this.z=(r+u)/y):s>l?(y=2*Math.sqrt(1+s-n-l),this.w=(r-u)/y,this.x=(i+o)/y,this.y=.25*y,this.z=(a+h)/y):(y=2*Math.sqrt(1+l-n-s),this.w=(o-i)/y,this.x=(r+u)/y,this.y=(a+h)/y,this.z=.25*y),this}}]),t}();e.default=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(1);function r(t){return t*t}function o(t,e){return r(t.x-e.x)+r(t.y-e.y)}var s={distanceToPoint:function(t,e){return Math.sqrt(function(t,e){var n=o(t.start,t.end);if(0===n)return o(e,t.start);var i=((e.x-t.start.x)*(t.end.x-t.start.x)+(e.y-t.start.y)*(t.end.y-t.start.y))/n;return o(e,i<0?t.start:i>1?t.end:{x:t.start.x+i*(t.end.x-t.start.x),y:t.start.y+i*(t.end.y-t.start.y)})}(t,e))},intersectLine:function(t,e){var n,r,o,s,a,u,h,l,c,y,f,d={},v=t.start.x,p=t.start.y,x=t.end.x,m=t.end.y,g=e.start.x,b=e.start.y,z=e.end.x,k=e.end.y,M=void 0;if(y=(n=m-p)*z+(o=v-x)*k+(a=x*p-v*m),(0===(c=n*g+o*b+a)||0===y||(0,i.sign)(c)!==(0,i.sign)(y))&&(l=(r=k-b)*x+(s=g-z)*m+(u=z*b-g*k),0===(h=r*v+s*p+u)||0===l||(0,i.sign)(h)!==(0,i.sign)(l))){f=n*s-r*o,M=o*u-s*a;var w=parseFloat(M/f);M=r*a-n*u;var P=parseFloat(M/f);return d.x=w,d.y=P,d}}};e.default=s},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Vector3=e.rect=e.quaternion=e.point=e.Plane=e.Matrix4=e.sign=e.radToDeg=e.degToRad=e.clamp=e.lineSegment=e.Line3=void 0;var i=y(n(5)),r=y(n(3)),o=n(1),s=y(n(6)),a=y(n(7)),u=y(n(8)),h=y(n(2)),l=y(n(9)),c=y(n(0));function y(t){return t&&t.__esModule?t:{default:t}}var f={Line3:i.default,lineSegment:r.default,clamp:o.clamp,degToRad:o.degToRad,radToDeg:o.radToDeg,sign:o.sign,Matrix4:s.default,Plane:a.default,point:u.default,quaternion:h.default,rect:l.default,Vector3:c.default};e.Line3=i.default,e.lineSegment=r.default,e.clamp=o.clamp,e.degToRad=o.degToRad,e.radToDeg=o.radToDeg,e.sign=o.sign,e.Matrix4=s.default,e.Plane=a.default,e.point=u.default,e.quaternion=h.default,e.rect=l.default,e.Vector3=c.default,e.default=f},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),r=function(t){return t&&t.__esModule?t:{default:t}}(n(0)),o=n(1);var s=function(){function t(e,n){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.start=void 0!==e?e:new r.default,this.end=void 0!==n?n:new r.default}return i(t,[{key:"set",value:function(t,e){return this.start.copy(t),this.end.copy(e),this}},{key:"copy",value:function(t){return this.start.copy(t.start),this.end.copy(t.end),this}},{key:"center",value:function(t){return(t||new r.default).addVectors(this.start,this.end).multiplyScalar(.5)}},{key:"delta",value:function(t){return(t||new r.default).subVectors(this.end,this.start)}},{key:"distanceSq",value:function(){return this.start.distanceToSquared(this.end)}},{key:"distance",value:function(){return this.start.distanceTo(this.end)}},{key:"at",value:function(t,e){var n=e||new r.default;return this.delta(n).multiplyScalar(t).add(this.start)}},{key:"closestPointToPointParameter",value:function(t,e){var n=new r.default,i=new r.default;n.subVectors(t,this.start),i.subVectors(this.end,this.start);var s=i.dot(i),a=i.dot(n)/s;return e&&(a=(0,o.clamp)(a,0,1)),a}},{key:"closestPointToPoint",value:function(t,e,n){var i=this.closestPointToPointParameter(t,e),o=n||new r.default;return this.delta(o).multiplyScalar(i).add(this.start)}},{key:"applyMatrix4",value:function(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}},{key:"equals",value:function(t){return t.start.equals(this.start)&&t.end.equals(this.end)}},{key:"clone",value:function(){return(new t).copy(this)}},{key:"intersectLine",value:function(t){var e=this.end.clone().sub(this.start),n=t.end.clone().sub(t.start),i=t.start.clone().sub(this.start),r=e.clone().cross(n),s=i.clone().cross(n),a=i.dot(r)/(i.lengthSq()*r.lengthSq());if((0,o.approximatelyEquals)(a,0)){var u=s.dot(r)/r.lengthSq();if(!(u>1||isNaN(u))){var h=this.start.clone().add(e.clone().multiplyScalar(u));return h.clone().sub(t.start).lengthSq()+h.clone().sub(t.end).lengthSq()<=t.distanceSq()?h:void 0}}}}]),t}();e.default=s},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),r=function(t){return t&&t.__esModule?t:{default:t}}(n(0));var o=function(){function t(e,n,i,r,o,s,a,u,h,l,c,y,f,d,v,p){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.elements=new Float32Array(16);var x=this.elements;x[0]=void 0!==e?e:1,x[4]=n||0,x[8]=i||0,x[12]=r||0,x[1]=o||0,x[5]=void 0!==s?s:1,x[9]=a||0,x[13]=u||0,x[2]=h||0,x[6]=l||0,x[10]=void 0!==c?c:1,x[14]=y||0,x[3]=f||0,x[7]=d||0,x[11]=v||0,x[15]=void 0!==p?p:1}return i(t,[{key:"makeRotationFromQuaternion",value:function(t){var e=this.elements,n=t.x,i=t.y,r=t.z,o=t.w,s=n+n,a=i+i,u=r+r,h=n*s,l=n*a,c=n*u,y=i*a,f=i*u,d=r*u,v=o*s,p=o*a,x=o*u;return e[0]=1-(y+d),e[4]=l-x,e[8]=c+p,e[1]=l+x,e[5]=1-(h+d),e[9]=f-v,e[2]=c-p,e[6]=f+v,e[10]=1-(h+y),e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}},{key:"multiplyMatrices",value:function(t,e){var n=t.elements,i=e.elements,r=this.elements,o=n[0],s=n[4],a=n[8],u=n[12],h=n[1],l=n[5],c=n[9],y=n[13],f=n[2],d=n[6],v=n[10],p=n[14],x=n[3],m=n[7],g=n[11],b=n[15],z=i[0],k=i[4],M=i[8],w=i[12],P=i[1],R=i[5],L=i[9],T=i[13],S=i[2],_=i[6],q=i[10],j=i[14],V=i[3],E=i[7],O=i[11],C=i[15];return r[0]=o*z+s*P+a*S+u*V,r[4]=o*k+s*R+a*_+u*E,r[8]=o*M+s*L+a*q+u*O,r[12]=o*w+s*T+a*j+u*C,r[1]=h*z+l*P+c*S+y*V,r[5]=h*k+l*R+c*_+y*E,r[9]=h*M+l*L+c*q+y*O,r[13]=h*w+l*T+c*j+y*C,r[2]=f*z+d*P+v*S+p*V,r[6]=f*k+d*R+v*_+p*E,r[10]=f*M+d*L+v*q+p*O,r[14]=f*w+d*T+v*j+p*C,r[3]=x*z+m*P+g*S+b*V,r[7]=x*k+m*R+g*_+b*E,r[11]=x*M+m*L+g*q+b*O,r[15]=x*w+m*T+g*j+b*C,this}},{key:"multiply",value:function(t,e){return void 0!==e?(console.warn("DEPRECATED: Matrix4's .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}},{key:"getInverse",value:function(t,e){var n=this.elements,i=t.elements,r=i[0],o=i[4],s=i[8],a=i[12],u=i[1],h=i[5],l=i[9],c=i[13],y=i[2],f=i[6],d=i[10],v=i[14],p=i[3],x=i[7],m=i[11],g=i[15];n[0]=l*v*x-c*d*x+c*f*m-h*v*m-l*f*g+h*d*g,n[4]=a*d*x-s*v*x-a*f*m+o*v*m+s*f*g-o*d*g,n[8]=s*c*x-a*l*x+a*h*m-o*c*m-s*h*g+o*l*g,n[12]=a*l*f-s*c*f-a*h*d+o*c*d+s*h*v-o*l*v,n[1]=c*d*p-l*v*p-c*y*m+u*v*m+l*y*g-u*d*g,n[5]=s*v*p-a*d*p+a*y*m-r*v*m-s*y*g+r*d*g,n[9]=a*l*p-s*c*p-a*u*m+r*c*m+s*u*g-r*l*g,n[13]=s*c*y-a*l*y+a*u*d-r*c*d-s*u*v+r*l*v,n[2]=h*v*p-c*f*p+c*y*x-u*v*x-h*y*g+u*f*g,n[6]=a*f*p-o*v*p-a*y*x+r*v*x+o*y*g-r*f*g,n[10]=o*c*p-a*h*p+a*u*x-r*c*x-o*u*g+r*h*g,n[14]=a*h*y-o*c*y-a*u*f+r*c*f+o*u*v-r*h*v,n[3]=l*f*p-h*d*p-l*y*x+u*d*x+h*y*m-u*f*m,n[7]=o*d*p-s*f*p+s*y*x-r*d*x-o*y*m+r*f*m,n[11]=s*h*p-o*l*p-s*u*x+r*l*x+o*u*m-r*h*m,n[15]=o*l*y-s*h*y+s*u*f-r*l*f-o*u*d+r*h*d;var b=r*n[0]+u*n[4]+y*n[8]+p*n[12];if(0===b){var z="Matrix4.getInverse(): can't invert matrix, determinant is 0";if(e)throw new Error(z);return console.warn(z),this.identity(),this}return this.multiplyScalar(1/b),this}},{key:"applyToVector3Array",value:function(){var t=new r.default;return function(e,n,i){void 0===n&&(n=0),void 0===i&&(i=e.length);for(var r=0,o=n;r<i;r+=3,o+=3)t.x=e[o],t.y=e[o+1],t.z=e[o+2],t.applyMatrix4(this),e[o]=t.x,e[o+1]=t.y,e[o+2]=t.z;return e}}},{key:"makeTranslation",value:function(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}},{key:"multiplyScalar",value:function(t){var e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}},{key:"set",value:function(t,e,n,i,r,o,s,a,u,h,l,c,y,f,d,v){var p=this.elements;return p[0]=t,p[4]=e,p[8]=n,p[12]=i,p[1]=r,p[5]=o,p[9]=s,p[13]=a,p[2]=u,p[6]=h,p[10]=l,p[14]=c,p[3]=y,p[7]=f,p[11]=d,p[15]=v,this}},{key:"makeScale",value:function(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}}]),t}();e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),r=function(t){return t&&t.__esModule?t:{default:t}}(n(0));var o=function(){function t(e,n){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.normal=void 0!==e?e:new r.default(1,0,0),this.constant=void 0!==n?n:0}return i(t,[{key:"set",value:function(t,e){return this.normal.copy(t),this.constant=e,this}},{key:"setComponents",value:function(t,e,n,i){return this.normal.set(t,e,n),this.constant=i,this}},{key:"setFromNormalAndCoplanarPoint",value:function(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}},{key:"copy",value:function(t){return this.normal.copy(t.normal),this.constant=t.constant,this}},{key:"normalize",value:function(){var t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}},{key:"negate",value:function(){return this.constant*=-1,this.normal.negate(),this}},{key:"distanceToPoint",value:function(t){return this.normal.dot(t)+this.constant}},{key:"distanceToSphere",value:function(t){return this.distanceToPoint(t.center)-t.radius}},{key:"projectPoint",value:function(t,e){return this.orthoPoint(t,e).sub(t).negate()}},{key:"orthoPoint",value:function(t,e){var n=this.distanceToPoint(t);return(e||new r.default).copy(this.normal).multiplyScalar(n)}},{key:"isIntersectionLine",value:function(t){var e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}},{key:"intersectPlane",value:function(t){var e=this.normal.clone().cross(t.normal),n={origin:new r.default,direction:e};if(this.normal.clone().cross(t.normal).length<1e-10)return n.direction=new r.default,n;var i=this.constant,o=t.constant,s=this.normal.clone().dot(t.normal),a=-(i-o*s)/(1-s*s),u=-(o-i*s)/(1-s*s);return n.origin=this.normal.clone().multiplyScalar(a).add(t.normal.clone().multiplyScalar(u)),n}},{key:"coplanarPoint",value:function(t){return(t||new r.default).copy(this.normal).multiplyScalar(-this.constant)}},{key:"translate",value:function(t){return this.constant=this.constant-t.dot(this.normal),this}},{key:"equals",value:function(t){return t.normal.equals(this.normal)&&t.constant===this.constant}},{key:"clone",value:function(){return(new t).copy(this)}}]),t}();o.prototype.setFromCoplanarPoints=function(){var t=new r.default,e=new r.default;return function(n,i,r){var o=t.subVectors(r,i).cross(e.subVectors(n,i)).normalize();return this.setFromNormalAndCoplanarPoint(o,n),this}}(),o.prototype.intersectLine=function(){var t=new r.default;return function(e,n){var i=n||new r.default,o=e.delta(t),s=this.normal.dot(o);if(0===s)return 0===this.distanceToPoint(e.start)?i.copy(e.start):void 0;var a=-(e.start.dot(this.normal)+this.constant)/s;return a<0||a>1?void 0:i.copy(o).multiplyScalar(a).add(e.start)}}(),e.default=o},function(t,e,n){"use strict";function i(t,e){return{x:t.x-e.x,y:t.y-e.y}}function r(t,e){return Math.sqrt(o(t,e))}function o(t,e){var n=i(t,e);return n.x*n.x+n.y*n.y}Object.defineProperty(e,"__esModule",{value:!0});var s={subtract:i,copy:function(t){return{x:t.x,y:t.y}},pageToPoint:function(t){return{x:t.pageX,y:t.pageY}},distance:r,distanceSquared:o,insideRect:function(t,e){return!(t.x<e.left||t.x>e.left+e.width||t.y<e.top||t.y>e.top+e.height)},findClosestPoint:function(t,e){var n=[],i=void 0;return t.forEach(function(t,o){var s=r(t,e);n.push(s),i=0===o?s:Math.min(s,i)}),t[n.indexOf(i)]}};e.default=s},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(t){return t&&t.__esModule?t:{default:t}}(n(3));function r(t){return{topLeft:{x:t.left,y:t.top},bottomRight:{x:t.left+t.width,y:t.top+t.height}}}var o={distanceToPoint:function(t,e){var n=655535;return function(t){return[{start:{x:t.left,y:t.top},end:{x:t.left+t.width,y:t.top}},{start:{x:t.left+t.width,y:t.top},end:{x:t.left+t.width,y:t.top+t.height}},{start:{x:t.left+t.width,y:t.top+t.height},end:{x:t.left,y:t.top+t.height}},{start:{x:t.left,y:t.top+t.height},end:{x:t.left,y:t.top}}]}(t).forEach(function(t){var r=i.default.distanceToPoint(t,e);r<n&&(n=r)}),n},getIntersectionRect:function(t,e){var n={topLeft:{},bottomRight:{}};if(function(t,e){var n=void 0,i=void 0,o=r(t),s=r(e);return n=t.width>=0?e.width>=0?!(o.bottomRight.x<=s.topLeft.x||s.bottomRight.x<=o.topLeft.x):!(o.bottomRight.x<=s.bottomRight.x||s.topLeft.x<=o.topLeft.x):e.width>=0?!(o.topLeft.x<=s.topLeft.x||s.bottomRight.x<=o.bottomRight.x):!(o.topLeft.x<=s.bottomRight.x||s.topLeft.x<=o.bottomRight.x),i=t.height>=0?e.height>=0?!(o.bottomRight.y<=s.topLeft.y||s.bottomRight.y<=o.topLeft.y):!(o.bottomRight.y<=s.bottomRight.y||s.topLeft.y<=o.topLeft.y):e.height>=0?!(o.topLeft.y<=s.topLeft.y||s.bottomRight.y<=o.bottomRight.y):!(o.topLeft.y<=s.bottomRight.y||s.top<=o.bottomRight.y),n&&i}(t,e)){var i=r(t),o=r(e);return t.width>=0?e.width>=0?(n.topLeft.x=Math.max(i.topLeft.x,o.topLeft.x),n.bottomRight.x=Math.min(i.bottomRight.x,o.bottomRight.x)):(n.topLeft.x=Math.max(i.topLeft.x,o.bottomRight.x),n.bottomRight.x=Math.min(i.bottomRight.x,o.topLeft.x)):e.width>=0?(n.topLeft.x=Math.min(i.topLeft.x,o.bottomRight.x),n.bottomRight.x=Math.max(i.bottomRight.x,o.topLeft.x)):(n.topLeft.x=Math.min(i.topLeft.x,o.topLeft.x),n.bottomRight.x=Math.max(i.bottomRight.x,o.bottomRight.x)),t.height>=0?e.height>=0?(n.topLeft.y=Math.max(i.topLeft.y,o.topLeft.y),n.bottomRight.y=Math.min(i.bottomRight.y,o.bottomRight.y)):(n.topLeft.y=Math.max(i.topLeft.y,o.bottomRight.y),n.bottomRight.y=Math.min(i.bottomRight.y,o.topLeft.y)):e.height>=0?(n.topLeft.y=Math.min(i.topLeft.y,o.bottomRight.y),n.bottomRight.y=Math.max(i.bottomRight.y,o.topLeft.y)):(n.topLeft.y=Math.min(i.topLeft.y,o.topLeft.y),n.bottomRight.y=Math.max(i.bottomRight.y,o.bottomRight.y)),n}}};e.default=o}])});
//# sourceMappingURL=cornerstoneMath.min.js.map

/***/ }),

/***/ 4030:
/***/ ((module) => {

/*! cornerstone-tools - 6.0.10 - 2023-07-21 | (c) 2017 Chris Hafey | https://github.com/cornerstonejs/cornerstoneTools */
(function webpackUniversalModuleDefinition(root, factory) {
	if(true)
		module.exports = factory();
	else {}
})(window, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	function hotDisposeChunk(chunkId) {
/******/ 		delete installedChunks[chunkId];
/******/ 	}
/******/ 	var parentHotUpdateCallback = window["webpackHotUpdate"];
/******/ 	window["webpackHotUpdate"] = // eslint-disable-next-line no-unused-vars
/******/ 	function webpackHotUpdateCallback(chunkId, moreModules) {
/******/ 		hotAddUpdateChunk(chunkId, moreModules);
/******/ 		if (parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules);
/******/ 	} ;
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotDownloadUpdateChunk(chunkId) {
/******/ 		var script = document.createElement("script");
/******/ 		script.charset = "utf-8";
/******/ 		script.src = __nested_webpack_require_26021__.p + "" + chunkId + "." + hotCurrentHash + ".hot-update.js";
/******/ 		if (false) {}
/******/ 		document.head.appendChild(script);
/******/ 	}
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotDownloadManifest(requestTimeout) {
/******/ 		requestTimeout = requestTimeout || 10000;
/******/ 		return new Promise(function(resolve, reject) {
/******/ 			if (typeof XMLHttpRequest === "undefined") {
/******/ 				return reject(new Error("No browser support"));
/******/ 			}
/******/ 			try {
/******/ 				var request = new XMLHttpRequest();
/******/ 				var requestPath = __nested_webpack_require_26021__.p + "" + hotCurrentHash + ".hot-update.json";
/******/ 				request.open("GET", requestPath, true);
/******/ 				request.timeout = requestTimeout;
/******/ 				request.send(null);
/******/ 			} catch (err) {
/******/ 				return reject(err);
/******/ 			}
/******/ 			request.onreadystatechange = function() {
/******/ 				if (request.readyState !== 4) return;
/******/ 				if (request.status === 0) {
/******/ 					// timeout
/******/ 					reject(
/******/ 						new Error("Manifest request to " + requestPath + " timed out.")
/******/ 					);
/******/ 				} else if (request.status === 404) {
/******/ 					// no update available
/******/ 					resolve();
/******/ 				} else if (request.status !== 200 && request.status !== 304) {
/******/ 					// other failure
/******/ 					reject(new Error("Manifest request to " + requestPath + " failed."));
/******/ 				} else {
/******/ 					// success
/******/ 					try {
/******/ 						var update = JSON.parse(request.responseText);
/******/ 					} catch (e) {
/******/ 						reject(e);
/******/ 						return;
/******/ 					}
/******/ 					resolve(update);
/******/ 				}
/******/ 			};
/******/ 		});
/******/ 	}
/******/
/******/ 	var hotApplyOnUpdate = true;
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	var hotCurrentHash = "286e7d820af3fc74f409";
/******/ 	var hotRequestTimeout = 10000;
/******/ 	var hotCurrentModuleData = {};
/******/ 	var hotCurrentChildModule;
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	var hotCurrentParents = [];
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	var hotCurrentParentsTemp = [];
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotCreateRequire(moduleId) {
/******/ 		var me = installedModules[moduleId];
/******/ 		if (!me) return __nested_webpack_require_26021__;
/******/ 		var fn = function(request) {
/******/ 			if (me.hot.active) {
/******/ 				if (installedModules[request]) {
/******/ 					if (installedModules[request].parents.indexOf(moduleId) === -1) {
/******/ 						installedModules[request].parents.push(moduleId);
/******/ 					}
/******/ 				} else {
/******/ 					hotCurrentParents = [moduleId];
/******/ 					hotCurrentChildModule = request;
/******/ 				}
/******/ 				if (me.children.indexOf(request) === -1) {
/******/ 					me.children.push(request);
/******/ 				}
/******/ 			} else {
/******/ 				console.warn(
/******/ 					"[HMR] unexpected require(" +
/******/ 						request +
/******/ 						") from disposed module " +
/******/ 						moduleId
/******/ 				);
/******/ 				hotCurrentParents = [];
/******/ 			}
/******/ 			return __nested_webpack_require_26021__(request);
/******/ 		};
/******/ 		var ObjectFactory = function ObjectFactory(name) {
/******/ 			return {
/******/ 				configurable: true,
/******/ 				enumerable: true,
/******/ 				get: function() {
/******/ 					return __nested_webpack_require_26021__[name];
/******/ 				},
/******/ 				set: function(value) {
/******/ 					__nested_webpack_require_26021__[name] = value;
/******/ 				}
/******/ 			};
/******/ 		};
/******/ 		for (var name in __nested_webpack_require_26021__) {
/******/ 			if (
/******/ 				Object.prototype.hasOwnProperty.call(__nested_webpack_require_26021__, name) &&
/******/ 				name !== "e" &&
/******/ 				name !== "t"
/******/ 			) {
/******/ 				Object.defineProperty(fn, name, ObjectFactory(name));
/******/ 			}
/******/ 		}
/******/ 		fn.e = function(chunkId) {
/******/ 			if (hotStatus === "ready") hotSetStatus("prepare");
/******/ 			hotChunksLoading++;
/******/ 			return __nested_webpack_require_26021__.e(chunkId).then(finishChunkLoading, function(err) {
/******/ 				finishChunkLoading();
/******/ 				throw err;
/******/ 			});
/******/
/******/ 			function finishChunkLoading() {
/******/ 				hotChunksLoading--;
/******/ 				if (hotStatus === "prepare") {
/******/ 					if (!hotWaitingFilesMap[chunkId]) {
/******/ 						hotEnsureUpdateChunk(chunkId);
/******/ 					}
/******/ 					if (hotChunksLoading === 0 && hotWaitingFiles === 0) {
/******/ 						hotUpdateDownloaded();
/******/ 					}
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 		fn.t = function(value, mode) {
/******/ 			if (mode & 1) value = fn(value);
/******/ 			return __nested_webpack_require_26021__.t(value, mode & ~1);
/******/ 		};
/******/ 		return fn;
/******/ 	}
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotCreateModule(moduleId) {
/******/ 		var hot = {
/******/ 			// private stuff
/******/ 			_acceptedDependencies: {},
/******/ 			_declinedDependencies: {},
/******/ 			_selfAccepted: false,
/******/ 			_selfDeclined: false,
/******/ 			_disposeHandlers: [],
/******/ 			_main: hotCurrentChildModule !== moduleId,
/******/
/******/ 			// Module API
/******/ 			active: true,
/******/ 			accept: function(dep, callback) {
/******/ 				if (dep === undefined) hot._selfAccepted = true;
/******/ 				else if (typeof dep === "function") hot._selfAccepted = dep;
/******/ 				else if (typeof dep === "object")
/******/ 					for (var i = 0; i < dep.length; i++)
/******/ 						hot._acceptedDependencies[dep[i]] = callback || function() {};
/******/ 				else hot._acceptedDependencies[dep] = callback || function() {};
/******/ 			},
/******/ 			decline: function(dep) {
/******/ 				if (dep === undefined) hot._selfDeclined = true;
/******/ 				else if (typeof dep === "object")
/******/ 					for (var i = 0; i < dep.length; i++)
/******/ 						hot._declinedDependencies[dep[i]] = true;
/******/ 				else hot._declinedDependencies[dep] = true;
/******/ 			},
/******/ 			dispose: function(callback) {
/******/ 				hot._disposeHandlers.push(callback);
/******/ 			},
/******/ 			addDisposeHandler: function(callback) {
/******/ 				hot._disposeHandlers.push(callback);
/******/ 			},
/******/ 			removeDisposeHandler: function(callback) {
/******/ 				var idx = hot._disposeHandlers.indexOf(callback);
/******/ 				if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
/******/ 			},
/******/
/******/ 			// Management API
/******/ 			check: hotCheck,
/******/ 			apply: hotApply,
/******/ 			status: function(l) {
/******/ 				if (!l) return hotStatus;
/******/ 				hotStatusHandlers.push(l);
/******/ 			},
/******/ 			addStatusHandler: function(l) {
/******/ 				hotStatusHandlers.push(l);
/******/ 			},
/******/ 			removeStatusHandler: function(l) {
/******/ 				var idx = hotStatusHandlers.indexOf(l);
/******/ 				if (idx >= 0) hotStatusHandlers.splice(idx, 1);
/******/ 			},
/******/
/******/ 			//inherit from previous dispose call
/******/ 			data: hotCurrentModuleData[moduleId]
/******/ 		};
/******/ 		hotCurrentChildModule = undefined;
/******/ 		return hot;
/******/ 	}
/******/
/******/ 	var hotStatusHandlers = [];
/******/ 	var hotStatus = "idle";
/******/
/******/ 	function hotSetStatus(newStatus) {
/******/ 		hotStatus = newStatus;
/******/ 		for (var i = 0; i < hotStatusHandlers.length; i++)
/******/ 			hotStatusHandlers[i].call(null, newStatus);
/******/ 	}
/******/
/******/ 	// while downloading
/******/ 	var hotWaitingFiles = 0;
/******/ 	var hotChunksLoading = 0;
/******/ 	var hotWaitingFilesMap = {};
/******/ 	var hotRequestedFilesMap = {};
/******/ 	var hotAvailableFilesMap = {};
/******/ 	var hotDeferred;
/******/
/******/ 	// The update info
/******/ 	var hotUpdate, hotUpdateNewHash;
/******/
/******/ 	function toModuleId(id) {
/******/ 		var isNumber = +id + "" === id;
/******/ 		return isNumber ? +id : id;
/******/ 	}
/******/
/******/ 	function hotCheck(apply) {
/******/ 		if (hotStatus !== "idle") {
/******/ 			throw new Error("check() is only allowed in idle status");
/******/ 		}
/******/ 		hotApplyOnUpdate = apply;
/******/ 		hotSetStatus("check");
/******/ 		return hotDownloadManifest(hotRequestTimeout).then(function(update) {
/******/ 			if (!update) {
/******/ 				hotSetStatus("idle");
/******/ 				return null;
/******/ 			}
/******/ 			hotRequestedFilesMap = {};
/******/ 			hotWaitingFilesMap = {};
/******/ 			hotAvailableFilesMap = update.c;
/******/ 			hotUpdateNewHash = update.h;
/******/
/******/ 			hotSetStatus("prepare");
/******/ 			var promise = new Promise(function(resolve, reject) {
/******/ 				hotDeferred = {
/******/ 					resolve: resolve,
/******/ 					reject: reject
/******/ 				};
/******/ 			});
/******/ 			hotUpdate = {};
/******/ 			var chunkId = "cornerstoneTools";
/******/ 			// eslint-disable-next-line no-lone-blocks
/******/ 			{
/******/ 				/*globals chunkId */
/******/ 				hotEnsureUpdateChunk(chunkId);
/******/ 			}
/******/ 			if (
/******/ 				hotStatus === "prepare" &&
/******/ 				hotChunksLoading === 0 &&
/******/ 				hotWaitingFiles === 0
/******/ 			) {
/******/ 				hotUpdateDownloaded();
/******/ 			}
/******/ 			return promise;
/******/ 		});
/******/ 	}
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotAddUpdateChunk(chunkId, moreModules) {
/******/ 		if (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])
/******/ 			return;
/******/ 		hotRequestedFilesMap[chunkId] = false;
/******/ 		for (var moduleId in moreModules) {
/******/ 			if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
/******/ 				hotUpdate[moduleId] = moreModules[moduleId];
/******/ 			}
/******/ 		}
/******/ 		if (--hotWaitingFiles === 0 && hotChunksLoading === 0) {
/******/ 			hotUpdateDownloaded();
/******/ 		}
/******/ 	}
/******/
/******/ 	function hotEnsureUpdateChunk(chunkId) {
/******/ 		if (!hotAvailableFilesMap[chunkId]) {
/******/ 			hotWaitingFilesMap[chunkId] = true;
/******/ 		} else {
/******/ 			hotRequestedFilesMap[chunkId] = true;
/******/ 			hotWaitingFiles++;
/******/ 			hotDownloadUpdateChunk(chunkId);
/******/ 		}
/******/ 	}
/******/
/******/ 	function hotUpdateDownloaded() {
/******/ 		hotSetStatus("ready");
/******/ 		var deferred = hotDeferred;
/******/ 		hotDeferred = null;
/******/ 		if (!deferred) return;
/******/ 		if (hotApplyOnUpdate) {
/******/ 			// Wrap deferred object in Promise to mark it as a well-handled Promise to
/******/ 			// avoid triggering uncaught exception warning in Chrome.
/******/ 			// See https://bugs.chromium.org/p/chromium/issues/detail?id=465666
/******/ 			Promise.resolve()
/******/ 				.then(function() {
/******/ 					return hotApply(hotApplyOnUpdate);
/******/ 				})
/******/ 				.then(
/******/ 					function(result) {
/******/ 						deferred.resolve(result);
/******/ 					},
/******/ 					function(err) {
/******/ 						deferred.reject(err);
/******/ 					}
/******/ 				);
/******/ 		} else {
/******/ 			var outdatedModules = [];
/******/ 			for (var id in hotUpdate) {
/******/ 				if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
/******/ 					outdatedModules.push(toModuleId(id));
/******/ 				}
/******/ 			}
/******/ 			deferred.resolve(outdatedModules);
/******/ 		}
/******/ 	}
/******/
/******/ 	function hotApply(options) {
/******/ 		if (hotStatus !== "ready")
/******/ 			throw new Error("apply() is only allowed in ready status");
/******/ 		options = options || {};
/******/
/******/ 		var cb;
/******/ 		var i;
/******/ 		var j;
/******/ 		var module;
/******/ 		var moduleId;
/******/
/******/ 		function getAffectedStuff(updateModuleId) {
/******/ 			var outdatedModules = [updateModuleId];
/******/ 			var outdatedDependencies = {};
/******/
/******/ 			var queue = outdatedModules.map(function(id) {
/******/ 				return {
/******/ 					chain: [id],
/******/ 					id: id
/******/ 				};
/******/ 			});
/******/ 			while (queue.length > 0) {
/******/ 				var queueItem = queue.pop();
/******/ 				var moduleId = queueItem.id;
/******/ 				var chain = queueItem.chain;
/******/ 				module = installedModules[moduleId];
/******/ 				if (!module || module.hot._selfAccepted) continue;
/******/ 				if (module.hot._selfDeclined) {
/******/ 					return {
/******/ 						type: "self-declined",
/******/ 						chain: chain,
/******/ 						moduleId: moduleId
/******/ 					};
/******/ 				}
/******/ 				if (module.hot._main) {
/******/ 					return {
/******/ 						type: "unaccepted",
/******/ 						chain: chain,
/******/ 						moduleId: moduleId
/******/ 					};
/******/ 				}
/******/ 				for (var i = 0; i < module.parents.length; i++) {
/******/ 					var parentId = module.parents[i];
/******/ 					var parent = installedModules[parentId];
/******/ 					if (!parent) continue;
/******/ 					if (parent.hot._declinedDependencies[moduleId]) {
/******/ 						return {
/******/ 							type: "declined",
/******/ 							chain: chain.concat([parentId]),
/******/ 							moduleId: moduleId,
/******/ 							parentId: parentId
/******/ 						};
/******/ 					}
/******/ 					if (outdatedModules.indexOf(parentId) !== -1) continue;
/******/ 					if (parent.hot._acceptedDependencies[moduleId]) {
/******/ 						if (!outdatedDependencies[parentId])
/******/ 							outdatedDependencies[parentId] = [];
/******/ 						addAllToSet(outdatedDependencies[parentId], [moduleId]);
/******/ 						continue;
/******/ 					}
/******/ 					delete outdatedDependencies[parentId];
/******/ 					outdatedModules.push(parentId);
/******/ 					queue.push({
/******/ 						chain: chain.concat([parentId]),
/******/ 						id: parentId
/******/ 					});
/******/ 				}
/******/ 			}
/******/
/******/ 			return {
/******/ 				type: "accepted",
/******/ 				moduleId: updateModuleId,
/******/ 				outdatedModules: outdatedModules,
/******/ 				outdatedDependencies: outdatedDependencies
/******/ 			};
/******/ 		}
/******/
/******/ 		function addAllToSet(a, b) {
/******/ 			for (var i = 0; i < b.length; i++) {
/******/ 				var item = b[i];
/******/ 				if (a.indexOf(item) === -1) a.push(item);
/******/ 			}
/******/ 		}
/******/
/******/ 		// at begin all updates modules are outdated
/******/ 		// the "outdated" status can propagate to parents if they don't accept the children
/******/ 		var outdatedDependencies = {};
/******/ 		var outdatedModules = [];
/******/ 		var appliedUpdate = {};
/******/
/******/ 		var warnUnexpectedRequire = function warnUnexpectedRequire() {
/******/ 			console.warn(
/******/ 				"[HMR] unexpected require(" + result.moduleId + ") to disposed module"
/******/ 			);
/******/ 		};
/******/
/******/ 		for (var id in hotUpdate) {
/******/ 			if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
/******/ 				moduleId = toModuleId(id);
/******/ 				/** @type {TODO} */
/******/ 				var result;
/******/ 				if (hotUpdate[id]) {
/******/ 					result = getAffectedStuff(moduleId);
/******/ 				} else {
/******/ 					result = {
/******/ 						type: "disposed",
/******/ 						moduleId: id
/******/ 					};
/******/ 				}
/******/ 				/** @type {Error|false} */
/******/ 				var abortError = false;
/******/ 				var doApply = false;
/******/ 				var doDispose = false;
/******/ 				var chainInfo = "";
/******/ 				if (result.chain) {
/******/ 					chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
/******/ 				}
/******/ 				switch (result.type) {
/******/ 					case "self-declined":
/******/ 						if (options.onDeclined) options.onDeclined(result);
/******/ 						if (!options.ignoreDeclined)
/******/ 							abortError = new Error(
/******/ 								"Aborted because of self decline: " +
/******/ 									result.moduleId +
/******/ 									chainInfo
/******/ 							);
/******/ 						break;
/******/ 					case "declined":
/******/ 						if (options.onDeclined) options.onDeclined(result);
/******/ 						if (!options.ignoreDeclined)
/******/ 							abortError = new Error(
/******/ 								"Aborted because of declined dependency: " +
/******/ 									result.moduleId +
/******/ 									" in " +
/******/ 									result.parentId +
/******/ 									chainInfo
/******/ 							);
/******/ 						break;
/******/ 					case "unaccepted":
/******/ 						if (options.onUnaccepted) options.onUnaccepted(result);
/******/ 						if (!options.ignoreUnaccepted)
/******/ 							abortError = new Error(
/******/ 								"Aborted because " + moduleId + " is not accepted" + chainInfo
/******/ 							);
/******/ 						break;
/******/ 					case "accepted":
/******/ 						if (options.onAccepted) options.onAccepted(result);
/******/ 						doApply = true;
/******/ 						break;
/******/ 					case "disposed":
/******/ 						if (options.onDisposed) options.onDisposed(result);
/******/ 						doDispose = true;
/******/ 						break;
/******/ 					default:
/******/ 						throw new Error("Unexception type " + result.type);
/******/ 				}
/******/ 				if (abortError) {
/******/ 					hotSetStatus("abort");
/******/ 					return Promise.reject(abortError);
/******/ 				}
/******/ 				if (doApply) {
/******/ 					appliedUpdate[moduleId] = hotUpdate[moduleId];
/******/ 					addAllToSet(outdatedModules, result.outdatedModules);
/******/ 					for (moduleId in result.outdatedDependencies) {
/******/ 						if (
/******/ 							Object.prototype.hasOwnProperty.call(
/******/ 								result.outdatedDependencies,
/******/ 								moduleId
/******/ 							)
/******/ 						) {
/******/ 							if (!outdatedDependencies[moduleId])
/******/ 								outdatedDependencies[moduleId] = [];
/******/ 							addAllToSet(
/******/ 								outdatedDependencies[moduleId],
/******/ 								result.outdatedDependencies[moduleId]
/******/ 							);
/******/ 						}
/******/ 					}
/******/ 				}
/******/ 				if (doDispose) {
/******/ 					addAllToSet(outdatedModules, [result.moduleId]);
/******/ 					appliedUpdate[moduleId] = warnUnexpectedRequire;
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// Store self accepted outdated modules to require them later by the module system
/******/ 		var outdatedSelfAcceptedModules = [];
/******/ 		for (i = 0; i < outdatedModules.length; i++) {
/******/ 			moduleId = outdatedModules[i];
/******/ 			if (
/******/ 				installedModules[moduleId] &&
/******/ 				installedModules[moduleId].hot._selfAccepted &&
/******/ 				// removed self-accepted modules should not be required
/******/ 				appliedUpdate[moduleId] !== warnUnexpectedRequire
/******/ 			) {
/******/ 				outdatedSelfAcceptedModules.push({
/******/ 					module: moduleId,
/******/ 					errorHandler: installedModules[moduleId].hot._selfAccepted
/******/ 				});
/******/ 			}
/******/ 		}
/******/
/******/ 		// Now in "dispose" phase
/******/ 		hotSetStatus("dispose");
/******/ 		Object.keys(hotAvailableFilesMap).forEach(function(chunkId) {
/******/ 			if (hotAvailableFilesMap[chunkId] === false) {
/******/ 				hotDisposeChunk(chunkId);
/******/ 			}
/******/ 		});
/******/
/******/ 		var idx;
/******/ 		var queue = outdatedModules.slice();
/******/ 		while (queue.length > 0) {
/******/ 			moduleId = queue.pop();
/******/ 			module = installedModules[moduleId];
/******/ 			if (!module) continue;
/******/
/******/ 			var data = {};
/******/
/******/ 			// Call dispose handlers
/******/ 			var disposeHandlers = module.hot._disposeHandlers;
/******/ 			for (j = 0; j < disposeHandlers.length; j++) {
/******/ 				cb = disposeHandlers[j];
/******/ 				cb(data);
/******/ 			}
/******/ 			hotCurrentModuleData[moduleId] = data;
/******/
/******/ 			// disable module (this disables requires from this module)
/******/ 			module.hot.active = false;
/******/
/******/ 			// remove module from cache
/******/ 			delete installedModules[moduleId];
/******/
/******/ 			// when disposing there is no need to call dispose handler
/******/ 			delete outdatedDependencies[moduleId];
/******/
/******/ 			// remove "parents" references from all children
/******/ 			for (j = 0; j < module.children.length; j++) {
/******/ 				var child = installedModules[module.children[j]];
/******/ 				if (!child) continue;
/******/ 				idx = child.parents.indexOf(moduleId);
/******/ 				if (idx >= 0) {
/******/ 					child.parents.splice(idx, 1);
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// remove outdated dependency from module children
/******/ 		var dependency;
/******/ 		var moduleOutdatedDependencies;
/******/ 		for (moduleId in outdatedDependencies) {
/******/ 			if (
/******/ 				Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
/******/ 			) {
/******/ 				module = installedModules[moduleId];
/******/ 				if (module) {
/******/ 					moduleOutdatedDependencies = outdatedDependencies[moduleId];
/******/ 					for (j = 0; j < moduleOutdatedDependencies.length; j++) {
/******/ 						dependency = moduleOutdatedDependencies[j];
/******/ 						idx = module.children.indexOf(dependency);
/******/ 						if (idx >= 0) module.children.splice(idx, 1);
/******/ 					}
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// Now in "apply" phase
/******/ 		hotSetStatus("apply");
/******/
/******/ 		hotCurrentHash = hotUpdateNewHash;
/******/
/******/ 		// insert new code
/******/ 		for (moduleId in appliedUpdate) {
/******/ 			if (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {
/******/ 				modules[moduleId] = appliedUpdate[moduleId];
/******/ 			}
/******/ 		}
/******/
/******/ 		// call accept handlers
/******/ 		var error = null;
/******/ 		for (moduleId in outdatedDependencies) {
/******/ 			if (
/******/ 				Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
/******/ 			) {
/******/ 				module = installedModules[moduleId];
/******/ 				if (module) {
/******/ 					moduleOutdatedDependencies = outdatedDependencies[moduleId];
/******/ 					var callbacks = [];
/******/ 					for (i = 0; i < moduleOutdatedDependencies.length; i++) {
/******/ 						dependency = moduleOutdatedDependencies[i];
/******/ 						cb = module.hot._acceptedDependencies[dependency];
/******/ 						if (cb) {
/******/ 							if (callbacks.indexOf(cb) !== -1) continue;
/******/ 							callbacks.push(cb);
/******/ 						}
/******/ 					}
/******/ 					for (i = 0; i < callbacks.length; i++) {
/******/ 						cb = callbacks[i];
/******/ 						try {
/******/ 							cb(moduleOutdatedDependencies);
/******/ 						} catch (err) {
/******/ 							if (options.onErrored) {
/******/ 								options.onErrored({
/******/ 									type: "accept-errored",
/******/ 									moduleId: moduleId,
/******/ 									dependencyId: moduleOutdatedDependencies[i],
/******/ 									error: err
/******/ 								});
/******/ 							}
/******/ 							if (!options.ignoreErrored) {
/******/ 								if (!error) error = err;
/******/ 							}
/******/ 						}
/******/ 					}
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// Load self accepted modules
/******/ 		for (i = 0; i < outdatedSelfAcceptedModules.length; i++) {
/******/ 			var item = outdatedSelfAcceptedModules[i];
/******/ 			moduleId = item.module;
/******/ 			hotCurrentParents = [moduleId];
/******/ 			try {
/******/ 				__nested_webpack_require_26021__(moduleId);
/******/ 			} catch (err) {
/******/ 				if (typeof item.errorHandler === "function") {
/******/ 					try {
/******/ 						item.errorHandler(err);
/******/ 					} catch (err2) {
/******/ 						if (options.onErrored) {
/******/ 							options.onErrored({
/******/ 								type: "self-accept-error-handler-errored",
/******/ 								moduleId: moduleId,
/******/ 								error: err2,
/******/ 								originalError: err
/******/ 							});
/******/ 						}
/******/ 						if (!options.ignoreErrored) {
/******/ 							if (!error) error = err2;
/******/ 						}
/******/ 						if (!error) error = err;
/******/ 					}
/******/ 				} else {
/******/ 					if (options.onErrored) {
/******/ 						options.onErrored({
/******/ 							type: "self-accept-errored",
/******/ 							moduleId: moduleId,
/******/ 							error: err
/******/ 						});
/******/ 					}
/******/ 					if (!options.ignoreErrored) {
/******/ 						if (!error) error = err;
/******/ 					}
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// handle errors in accept handlers and self accepted module load
/******/ 		if (error) {
/******/ 			hotSetStatus("fail");
/******/ 			return Promise.reject(error);
/******/ 		}
/******/
/******/ 		hotSetStatus("idle");
/******/ 		return new Promise(function(resolve) {
/******/ 			resolve(outdatedModules);
/******/ 		});
/******/ 	}
/******/
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __nested_webpack_require_26021__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {},
/******/ 			hot: hotCreateModule(moduleId),
/******/ 			parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),
/******/ 			children: []
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__nested_webpack_require_26021__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__nested_webpack_require_26021__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__nested_webpack_require_26021__.d = function(exports, name, getter) {
/******/ 		if(!__nested_webpack_require_26021__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__nested_webpack_require_26021__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__nested_webpack_require_26021__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __nested_webpack_require_26021__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__nested_webpack_require_26021__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_26021__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__nested_webpack_require_26021__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__nested_webpack_require_26021__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__nested_webpack_require_26021__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__nested_webpack_require_26021__.p = "";
/******/
/******/ 	// __webpack_hash__
/******/ 	__nested_webpack_require_26021__.h = function() { return hotCurrentHash; };
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return hotCreateRequire("./index.js")(__nested_webpack_require_26021__.s = "./index.js");
/******/ })
/************************************************************************/
/******/ ({

/***/ "../node_modules/@babel/runtime/helpers/arrayWithHoles.js":
/*!****************************************************************!*\
  !*** ../node_modules/@babel/runtime/helpers/arrayWithHoles.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

function _arrayWithHoles(arr) {
  if (Array.isArray(arr)) return arr;
}

module.exports = _arrayWithHoles;

/***/ }),

/***/ "../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js":
/*!*******************************************************************!*\
  !*** ../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

function _arrayWithoutHoles(arr) {
  if (Array.isArray(arr)) {
    for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {
      arr2[i] = arr[i];
    }

    return arr2;
  }
}

module.exports = _arrayWithoutHoles;

/***/ }),

/***/ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js":
/*!***********************************************************************!*\
  !*** ../node_modules/@babel/runtime/helpers/assertThisInitialized.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

function _assertThisInitialized(self) {
  if (self === void 0) {
    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  }

  return self;
}

module.exports = _assertThisInitialized;

/***/ }),

/***/ "../node_modules/@babel/runtime/helpers/asyncToGenerator.js":
/*!******************************************************************!*\
  !*** ../node_modules/@babel/runtime/helpers/asyncToGenerator.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
  try {
    var info = gen[key](arg);
    var value = info.value;
  } catch (error) {
    reject(error);
    return;
  }

  if (info.done) {
    resolve(value);
  } else {
    Promise.resolve(value).then(_next, _throw);
  }
}

function _asyncToGenerator(fn) {
  return function () {
    var self = this,
        args = arguments;
    return new Promise(function (resolve, reject) {
      var gen = fn.apply(self, args);

      function _next(value) {
        asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
      }

      function _throw(err) {
        asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
      }

      _next(undefined);
    });
  };
}

module.exports = _asyncToGenerator;

/***/ }),

/***/ "../node_modules/@babel/runtime/helpers/classCallCheck.js":
/*!****************************************************************!*\
  !*** ../node_modules/@babel/runtime/helpers/classCallCheck.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

function _classCallCheck(instance, Constructor) {
  if (!(instance instanceof Constructor)) {
    throw new TypeError("Cannot call a class as a function");
  }
}

module.exports = _classCallCheck;

/***/ }),

/***/ "../node_modules/@babel/runtime/helpers/createClass.js":
/*!*************************************************************!*\
  !*** ../node_modules/@babel/runtime/helpers/createClass.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

function _defineProperties(target, props) {
  for (var i = 0; i < props.length; i++) {
    var descriptor = props[i];
    descriptor.enumerable = descriptor.enumerable || false;
    descriptor.configurable = true;
    if ("value" in descriptor) descriptor.writable = true;
    Object.defineProperty(target, descriptor.key, descriptor);
  }
}

function _createClass(Constructor, protoProps, staticProps) {
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
  if (staticProps) _defineProperties(Constructor, staticProps);
  return Constructor;
}

module.exports = _createClass;

/***/ }),

/***/ "../node_modules/@babel/runtime/helpers/defineProperty.js":
/*!****************************************************************!*\
  !*** ../node_modules/@babel/runtime/helpers/defineProperty.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

function _defineProperty(obj, key, value) {
  if (key in obj) {
    Object.defineProperty(obj, key, {
      value: value,
      enumerable: true,
      configurable: true,
      writable: true
    });
  } else {
    obj[key] = value;
  }

  return obj;
}

module.exports = _defineProperty;

/***/ }),

/***/ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js":
/*!****************************************************************!*\
  !*** ../node_modules/@babel/runtime/helpers/getPrototypeOf.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

function _getPrototypeOf(o) {
  module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
    return o.__proto__ || Object.getPrototypeOf(o);
  };
  return _getPrototypeOf(o);
}

module.exports = _getPrototypeOf;

/***/ }),

/***/ "../node_modules/@babel/runtime/helpers/inherits.js":
/*!**********************************************************!*\
  !*** ../node_modules/@babel/runtime/helpers/inherits.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __nested_webpack_require_35669__) {

var setPrototypeOf = __nested_webpack_require_35669__(/*! ./setPrototypeOf */ "../node_modules/@babel/runtime/helpers/setPrototypeOf.js");

function _inherits(subClass, superClass) {
  if (typeof superClass !== "function" && superClass !== null) {
    throw new TypeError("Super expression must either be null or a function");
  }

  subClass.prototype = Object.create(superClass && superClass.prototype, {
    constructor: {
      value: subClass,
      writable: true,
      configurable: true
    }
  });
  if (superClass) setPrototypeOf(subClass, superClass);
}

module.exports = _inherits;

/***/ }),

/***/ "../node_modules/@babel/runtime/helpers/iterableToArray.js":
/*!*****************************************************************!*\
  !*** ../node_modules/@babel/runtime/helpers/iterableToArray.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

function _iterableToArray(iter) {
  if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
}

module.exports = _iterableToArray;

/***/ }),

/***/ "../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js":
/*!**********************************************************************!*\
  !*** ../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

function _iterableToArrayLimit(arr, i) {
  var _arr = [];
  var _n = true;
  var _d = false;
  var _e = undefined;

  try {
    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
      _arr.push(_s.value);

      if (i && _arr.length === i) break;
    }
  } catch (err) {
    _d = true;
    _e = err;
  } finally {
    try {
      if (!_n && _i["return"] != null) _i["return"]();
    } finally {
      if (_d) throw _e;
    }
  }

  return _arr;
}

module.exports = _iterableToArrayLimit;

/***/ }),

/***/ "../node_modules/@babel/runtime/helpers/nonIterableRest.js":
/*!*****************************************************************!*\
  !*** ../node_modules/@babel/runtime/helpers/nonIterableRest.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

function _nonIterableRest() {
  throw new TypeError("Invalid attempt to destructure non-iterable instance");
}

module.exports = _nonIterableRest;

/***/ }),

/***/ "../node_modules/@babel/runtime/helpers/nonIterableSpread.js":
/*!*******************************************************************!*\
  !*** ../node_modules/@babel/runtime/helpers/nonIterableSpread.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

function _nonIterableSpread() {
  throw new TypeError("Invalid attempt to spread non-iterable instance");
}

module.exports = _nonIterableSpread;

/***/ }),

/***/ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js":
/*!***************************************************************************!*\
  !*** ../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __nested_webpack_require_39148__) {

var _typeof = __nested_webpack_require_39148__(/*! ../helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js");

var assertThisInitialized = __nested_webpack_require_39148__(/*! ./assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");

function _possibleConstructorReturn(self, call) {
  if (call && (_typeof(call) === "object" || typeof call === "function")) {
    return call;
  }

  return assertThisInitialized(self);
}

module.exports = _possibleConstructorReturn;

/***/ }),

/***/ "../node_modules/@babel/runtime/helpers/setPrototypeOf.js":
/*!****************************************************************!*\
  !*** ../node_modules/@babel/runtime/helpers/setPrototypeOf.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

function _setPrototypeOf(o, p) {
  module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
    o.__proto__ = p;
    return o;
  };

  return _setPrototypeOf(o, p);
}

module.exports = _setPrototypeOf;

/***/ }),

/***/ "../node_modules/@babel/runtime/helpers/slicedToArray.js":
/*!***************************************************************!*\
  !*** ../node_modules/@babel/runtime/helpers/slicedToArray.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __nested_webpack_require_40606__) {

var arrayWithHoles = __nested_webpack_require_40606__(/*! ./arrayWithHoles */ "../node_modules/@babel/runtime/helpers/arrayWithHoles.js");

var iterableToArrayLimit = __nested_webpack_require_40606__(/*! ./iterableToArrayLimit */ "../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js");

var nonIterableRest = __nested_webpack_require_40606__(/*! ./nonIterableRest */ "../node_modules/@babel/runtime/helpers/nonIterableRest.js");

function _slicedToArray(arr, i) {
  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();
}

module.exports = _slicedToArray;

/***/ }),

/***/ "../node_modules/@babel/runtime/helpers/toConsumableArray.js":
/*!*******************************************************************!*\
  !*** ../node_modules/@babel/runtime/helpers/toConsumableArray.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __nested_webpack_require_41548__) {

var arrayWithoutHoles = __nested_webpack_require_41548__(/*! ./arrayWithoutHoles */ "../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js");

var iterableToArray = __nested_webpack_require_41548__(/*! ./iterableToArray */ "../node_modules/@babel/runtime/helpers/iterableToArray.js");

var nonIterableSpread = __nested_webpack_require_41548__(/*! ./nonIterableSpread */ "../node_modules/@babel/runtime/helpers/nonIterableSpread.js");

function _toConsumableArray(arr) {
  return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();
}

module.exports = _toConsumableArray;

/***/ }),

/***/ "../node_modules/@babel/runtime/helpers/typeof.js":
/*!********************************************************!*\
  !*** ../node_modules/@babel/runtime/helpers/typeof.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

function _typeof2(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); }

function _typeof(obj) {
  if (typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol") {
    module.exports = _typeof = function _typeof(obj) {
      return _typeof2(obj);
    };
  } else {
    module.exports = _typeof = function _typeof(obj) {
      return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : _typeof2(obj);
    };
  }

  return _typeof(obj);
}

module.exports = _typeof;

/***/ }),

/***/ "../node_modules/@babel/runtime/regenerator/index.js":
/*!***********************************************************!*\
  !*** ../node_modules/@babel/runtime/regenerator/index.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __nested_webpack_require_43600__) {

module.exports = __nested_webpack_require_43600__(/*! regenerator-runtime */ "../node_modules/regenerator-runtime/runtime-module.js");


/***/ }),

/***/ "../node_modules/ms/index.js":
/*!***********************************!*\
  !*** ../node_modules/ms/index.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports) {

/**
 * Helpers.
 */

var s = 1000;
var m = s * 60;
var h = m * 60;
var d = h * 24;
var w = d * 7;
var y = d * 365.25;

/**
 * Parse or format the given `val`.
 *
 * Options:
 *
 *  - `long` verbose formatting [false]
 *
 * @param {String|Number} val
 * @param {Object} [options]
 * @throws {Error} throw an error if val is not a non-empty string or a number
 * @return {String|Number}
 * @api public
 */

module.exports = function(val, options) {
  options = options || {};
  var type = typeof val;
  if (type === 'string' && val.length > 0) {
    return parse(val);
  } else if (type === 'number' && isFinite(val)) {
    return options.long ? fmtLong(val) : fmtShort(val);
  }
  throw new Error(
    'val is not a non-empty string or a valid number. val=' +
      JSON.stringify(val)
  );
};

/**
 * Parse the given `str` and return milliseconds.
 *
 * @param {String} str
 * @return {Number}
 * @api private
 */

function parse(str) {
  str = String(str);
  if (str.length > 100) {
    return;
  }
  var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
    str
  );
  if (!match) {
    return;
  }
  var n = parseFloat(match[1]);
  var type = (match[2] || 'ms').toLowerCase();
  switch (type) {
    case 'years':
    case 'year':
    case 'yrs':
    case 'yr':
    case 'y':
      return n * y;
    case 'weeks':
    case 'week':
    case 'w':
      return n * w;
    case 'days':
    case 'day':
    case 'd':
      return n * d;
    case 'hours':
    case 'hour':
    case 'hrs':
    case 'hr':
    case 'h':
      return n * h;
    case 'minutes':
    case 'minute':
    case 'mins':
    case 'min':
    case 'm':
      return n * m;
    case 'seconds':
    case 'second':
    case 'secs':
    case 'sec':
    case 's':
      return n * s;
    case 'milliseconds':
    case 'millisecond':
    case 'msecs':
    case 'msec':
    case 'ms':
      return n;
    default:
      return undefined;
  }
}

/**
 * Short format for `ms`.
 *
 * @param {Number} ms
 * @return {String}
 * @api private
 */

function fmtShort(ms) {
  var msAbs = Math.abs(ms);
  if (msAbs >= d) {
    return Math.round(ms / d) + 'd';
  }
  if (msAbs >= h) {
    return Math.round(ms / h) + 'h';
  }
  if (msAbs >= m) {
    return Math.round(ms / m) + 'm';
  }
  if (msAbs >= s) {
    return Math.round(ms / s) + 's';
  }
  return ms + 'ms';
}

/**
 * Long format for `ms`.
 *
 * @param {Number} ms
 * @return {String}
 * @api private
 */

function fmtLong(ms) {
  var msAbs = Math.abs(ms);
  if (msAbs >= d) {
    return plural(ms, msAbs, d, 'day');
  }
  if (msAbs >= h) {
    return plural(ms, msAbs, h, 'hour');
  }
  if (msAbs >= m) {
    return plural(ms, msAbs, m, 'minute');
  }
  if (msAbs >= s) {
    return plural(ms, msAbs, s, 'second');
  }
  return ms + ' ms';
}

/**
 * Pluralization helper.
 */

function plural(ms, msAbs, n, name) {
  var isPlural = msAbs >= n * 1.5;
  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');
}


/***/ }),

/***/ "../node_modules/process/browser.js":
/*!******************************************!*\
  !*** ../node_modules/process/browser.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports) {

// shim for using process in browser
var process = module.exports = {};

// cached from whatever global is present so that test runners that stub it
// don't break things.  But we need to wrap it in a try catch in case it is
// wrapped in strict mode code which doesn't define any globals.  It's inside a
// function because try/catches deoptimize in certain engines.

var cachedSetTimeout;
var cachedClearTimeout;

function defaultSetTimout() {
    throw new Error('setTimeout has not been defined');
}
function defaultClearTimeout () {
    throw new Error('clearTimeout has not been defined');
}
(function () {
    try {
        if (typeof setTimeout === 'function') {
            cachedSetTimeout = setTimeout;
        } else {
            cachedSetTimeout = defaultSetTimout;
        }
    } catch (e) {
        cachedSetTimeout = defaultSetTimout;
    }
    try {
        if (typeof clearTimeout === 'function') {
            cachedClearTimeout = clearTimeout;
        } else {
            cachedClearTimeout = defaultClearTimeout;
        }
    } catch (e) {
        cachedClearTimeout = defaultClearTimeout;
    }
} ())
function runTimeout(fun) {
    if (cachedSetTimeout === setTimeout) {
        //normal enviroments in sane situations
        return setTimeout(fun, 0);
    }
    // if setTimeout wasn't available but was latter defined
    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
        cachedSetTimeout = setTimeout;
        return setTimeout(fun, 0);
    }
    try {
        // when when somebody has screwed with setTimeout but no I.E. maddness
        return cachedSetTimeout(fun, 0);
    } catch(e){
        try {
            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
            return cachedSetTimeout.call(null, fun, 0);
        } catch(e){
            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
            return cachedSetTimeout.call(this, fun, 0);
        }
    }


}
function runClearTimeout(marker) {
    if (cachedClearTimeout === clearTimeout) {
        //normal enviroments in sane situations
        return clearTimeout(marker);
    }
    // if clearTimeout wasn't available but was latter defined
    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
        cachedClearTimeout = clearTimeout;
        return clearTimeout(marker);
    }
    try {
        // when when somebody has screwed with setTimeout but no I.E. maddness
        return cachedClearTimeout(marker);
    } catch (e){
        try {
            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
            return cachedClearTimeout.call(null, marker);
        } catch (e){
            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
            return cachedClearTimeout.call(this, marker);
        }
    }



}
var queue = [];
var draining = false;
var currentQueue;
var queueIndex = -1;

function cleanUpNextTick() {
    if (!draining || !currentQueue) {
        return;
    }
    draining = false;
    if (currentQueue.length) {
        queue = currentQueue.concat(queue);
    } else {
        queueIndex = -1;
    }
    if (queue.length) {
        drainQueue();
    }
}

function drainQueue() {
    if (draining) {
        return;
    }
    var timeout = runTimeout(cleanUpNextTick);
    draining = true;

    var len = queue.length;
    while(len) {
        currentQueue = queue;
        queue = [];
        while (++queueIndex < len) {
            if (currentQueue) {
                currentQueue[queueIndex].run();
            }
        }
        queueIndex = -1;
        len = queue.length;
    }
    currentQueue = null;
    draining = false;
    runClearTimeout(timeout);
}

process.nextTick = function (fun) {
    var args = new Array(arguments.length - 1);
    if (arguments.length > 1) {
        for (var i = 1; i < arguments.length; i++) {
            args[i - 1] = arguments[i];
        }
    }
    queue.push(new Item(fun, args));
    if (queue.length === 1 && !draining) {
        runTimeout(drainQueue);
    }
};

// v8 likes predictible objects
function Item(fun, array) {
    this.fun = fun;
    this.array = array;
}
Item.prototype.run = function () {
    this.fun.apply(null, this.array);
};
process.title = 'browser';
process.browser = true;
process.env = {};
process.argv = [];
process.version = ''; // empty string to avoid regexp issues
process.versions = {};

function noop() {}

process.on = noop;
process.addListener = noop;
process.once = noop;
process.off = noop;
process.removeListener = noop;
process.removeAllListeners = noop;
process.emit = noop;
process.prependListener = noop;
process.prependOnceListener = noop;

process.listeners = function (name) { return [] }

process.binding = function (name) {
    throw new Error('process.binding is not supported');
};

process.cwd = function () { return '/' };
process.chdir = function (dir) {
    throw new Error('process.chdir is not supported');
};
process.umask = function() { return 0; };


/***/ }),

/***/ "../node_modules/regenerator-runtime/runtime-module.js":
/*!*************************************************************!*\
  !*** ../node_modules/regenerator-runtime/runtime-module.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __nested_webpack_require_53033__) {

/**
 * Copyright (c) 2014-present, Facebook, Inc.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

// This method of obtaining a reference to the global object needs to be
// kept identical to the way it is obtained in runtime.js
var g = (function() {
  return this || (typeof self === "object" && self);
})() || Function("return this")();

// Use `getOwnPropertyNames` because not all browsers support calling
// `hasOwnProperty` on the global `self` object in a worker. See #183.
var hadRuntime = g.regeneratorRuntime &&
  Object.getOwnPropertyNames(g).indexOf("regeneratorRuntime") >= 0;

// Save the old regeneratorRuntime in case it needs to be restored later.
var oldRuntime = hadRuntime && g.regeneratorRuntime;

// Force reevalutation of runtime.js.
g.regeneratorRuntime = undefined;

module.exports = __nested_webpack_require_53033__(/*! ./runtime */ "../node_modules/regenerator-runtime/runtime.js");

if (hadRuntime) {
  // Restore the original runtime.
  g.regeneratorRuntime = oldRuntime;
} else {
  // Remove the global property added by runtime.js.
  try {
    delete g.regeneratorRuntime;
  } catch(e) {
    g.regeneratorRuntime = undefined;
  }
}


/***/ }),

/***/ "../node_modules/regenerator-runtime/runtime.js":
/*!******************************************************!*\
  !*** ../node_modules/regenerator-runtime/runtime.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

/**
 * Copyright (c) 2014-present, Facebook, Inc.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

!(function(global) {
  "use strict";

  var Op = Object.prototype;
  var hasOwn = Op.hasOwnProperty;
  var undefined; // More compressible than void 0.
  var $Symbol = typeof Symbol === "function" ? Symbol : {};
  var iteratorSymbol = $Symbol.iterator || "@@iterator";
  var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
  var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";

  var inModule = typeof module === "object";
  var runtime = global.regeneratorRuntime;
  if (runtime) {
    if (inModule) {
      // If regeneratorRuntime is defined globally and we're in a module,
      // make the exports object identical to regeneratorRuntime.
      module.exports = runtime;
    }
    // Don't bother evaluating the rest of this file if the runtime was
    // already defined globally.
    return;
  }

  // Define the runtime globally (as expected by generated code) as either
  // module.exports (if we're in a module) or a new, empty object.
  runtime = global.regeneratorRuntime = inModule ? module.exports : {};

  function wrap(innerFn, outerFn, self, tryLocsList) {
    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
    var generator = Object.create(protoGenerator.prototype);
    var context = new Context(tryLocsList || []);

    // The ._invoke method unifies the implementations of the .next,
    // .throw, and .return methods.
    generator._invoke = makeInvokeMethod(innerFn, self, context);

    return generator;
  }
  runtime.wrap = wrap;

  // Try/catch helper to minimize deoptimizations. Returns a completion
  // record like context.tryEntries[i].completion. This interface could
  // have been (and was previously) designed to take a closure to be
  // invoked without arguments, but in all the cases we care about we
  // already have an existing method we want to call, so there's no need
  // to create a new function object. We can even get away with assuming
  // the method takes exactly one argument, since that happens to be true
  // in every case, so we don't have to touch the arguments object. The
  // only additional allocation required is the completion record, which
  // has a stable shape and so hopefully should be cheap to allocate.
  function tryCatch(fn, obj, arg) {
    try {
      return { type: "normal", arg: fn.call(obj, arg) };
    } catch (err) {
      return { type: "throw", arg: err };
    }
  }

  var GenStateSuspendedStart = "suspendedStart";
  var GenStateSuspendedYield = "suspendedYield";
  var GenStateExecuting = "executing";
  var GenStateCompleted = "completed";

  // Returning this object from the innerFn has the same effect as
  // breaking out of the dispatch switch statement.
  var ContinueSentinel = {};

  // Dummy constructor functions that we use as the .constructor and
  // .constructor.prototype properties for functions that return Generator
  // objects. For full spec compliance, you may wish to configure your
  // minifier not to mangle the names of these two functions.
  function Generator() {}
  function GeneratorFunction() {}
  function GeneratorFunctionPrototype() {}

  // This is a polyfill for %IteratorPrototype% for environments that
  // don't natively support it.
  var IteratorPrototype = {};
  IteratorPrototype[iteratorSymbol] = function () {
    return this;
  };

  var getProto = Object.getPrototypeOf;
  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
  if (NativeIteratorPrototype &&
      NativeIteratorPrototype !== Op &&
      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
    // This environment has a native %IteratorPrototype%; use it instead
    // of the polyfill.
    IteratorPrototype = NativeIteratorPrototype;
  }

  var Gp = GeneratorFunctionPrototype.prototype =
    Generator.prototype = Object.create(IteratorPrototype);
  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
  GeneratorFunctionPrototype.constructor = GeneratorFunction;
  GeneratorFunctionPrototype[toStringTagSymbol] =
    GeneratorFunction.displayName = "GeneratorFunction";

  // Helper for defining the .next, .throw, and .return methods of the
  // Iterator interface in terms of a single ._invoke method.
  function defineIteratorMethods(prototype) {
    ["next", "throw", "return"].forEach(function(method) {
      prototype[method] = function(arg) {
        return this._invoke(method, arg);
      };
    });
  }

  runtime.isGeneratorFunction = function(genFun) {
    var ctor = typeof genFun === "function" && genFun.constructor;
    return ctor
      ? ctor === GeneratorFunction ||
        // For the native GeneratorFunction constructor, the best we can
        // do is to check its .name property.
        (ctor.displayName || ctor.name) === "GeneratorFunction"
      : false;
  };

  runtime.mark = function(genFun) {
    if (Object.setPrototypeOf) {
      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
    } else {
      genFun.__proto__ = GeneratorFunctionPrototype;
      if (!(toStringTagSymbol in genFun)) {
        genFun[toStringTagSymbol] = "GeneratorFunction";
      }
    }
    genFun.prototype = Object.create(Gp);
    return genFun;
  };

  // Within the body of any async function, `await x` is transformed to
  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
  // `hasOwn.call(value, "__await")` to determine if the yielded value is
  // meant to be awaited.
  runtime.awrap = function(arg) {
    return { __await: arg };
  };

  function AsyncIterator(generator) {
    function invoke(method, arg, resolve, reject) {
      var record = tryCatch(generator[method], generator, arg);
      if (record.type === "throw") {
        reject(record.arg);
      } else {
        var result = record.arg;
        var value = result.value;
        if (value &&
            typeof value === "object" &&
            hasOwn.call(value, "__await")) {
          return Promise.resolve(value.__await).then(function(value) {
            invoke("next", value, resolve, reject);
          }, function(err) {
            invoke("throw", err, resolve, reject);
          });
        }

        return Promise.resolve(value).then(function(unwrapped) {
          // When a yielded Promise is resolved, its final value becomes
          // the .value of the Promise<{value,done}> result for the
          // current iteration.
          result.value = unwrapped;
          resolve(result);
        }, function(error) {
          // If a rejected Promise was yielded, throw the rejection back
          // into the async generator function so it can be handled there.
          return invoke("throw", error, resolve, reject);
        });
      }
    }

    var previousPromise;

    function enqueue(method, arg) {
      function callInvokeWithMethodAndArg() {
        return new Promise(function(resolve, reject) {
          invoke(method, arg, resolve, reject);
        });
      }

      return previousPromise =
        // If enqueue has been called before, then we want to wait until
        // all previous Promises have been resolved before calling invoke,
        // so that results are always delivered in the correct order. If
        // enqueue has not been called before, then it is important to
        // call invoke immediately, without waiting on a callback to fire,
        // so that the async generator function has the opportunity to do
        // any necessary setup in a predictable way. This predictability
        // is why the Promise constructor synchronously invokes its
        // executor callback, and why async functions synchronously
        // execute code before the first await. Since we implement simple
        // async functions in terms of async generators, it is especially
        // important to get this right, even though it requires care.
        previousPromise ? previousPromise.then(
          callInvokeWithMethodAndArg,
          // Avoid propagating failures to Promises returned by later
          // invocations of the iterator.
          callInvokeWithMethodAndArg
        ) : callInvokeWithMethodAndArg();
    }

    // Define the unified helper method that is used to implement .next,
    // .throw, and .return (see defineIteratorMethods).
    this._invoke = enqueue;
  }

  defineIteratorMethods(AsyncIterator.prototype);
  AsyncIterator.prototype[asyncIteratorSymbol] = function () {
    return this;
  };
  runtime.AsyncIterator = AsyncIterator;

  // Note that simple async functions are implemented on top of
  // AsyncIterator objects; they just return a Promise for the value of
  // the final result produced by the iterator.
  runtime.async = function(innerFn, outerFn, self, tryLocsList) {
    var iter = new AsyncIterator(
      wrap(innerFn, outerFn, self, tryLocsList)
    );

    return runtime.isGeneratorFunction(outerFn)
      ? iter // If outerFn is a generator, return the full iterator.
      : iter.next().then(function(result) {
          return result.done ? result.value : iter.next();
        });
  };

  function makeInvokeMethod(innerFn, self, context) {
    var state = GenStateSuspendedStart;

    return function invoke(method, arg) {
      if (state === GenStateExecuting) {
        throw new Error("Generator is already running");
      }

      if (state === GenStateCompleted) {
        if (method === "throw") {
          throw arg;
        }

        // Be forgiving, per 25.3.3.3.3 of the spec:
        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
        return doneResult();
      }

      context.method = method;
      context.arg = arg;

      while (true) {
        var delegate = context.delegate;
        if (delegate) {
          var delegateResult = maybeInvokeDelegate(delegate, context);
          if (delegateResult) {
            if (delegateResult === ContinueSentinel) continue;
            return delegateResult;
          }
        }

        if (context.method === "next") {
          // Setting context._sent for legacy support of Babel's
          // function.sent implementation.
          context.sent = context._sent = context.arg;

        } else if (context.method === "throw") {
          if (state === GenStateSuspendedStart) {
            state = GenStateCompleted;
            throw context.arg;
          }

          context.dispatchException(context.arg);

        } else if (context.method === "return") {
          context.abrupt("return", context.arg);
        }

        state = GenStateExecuting;

        var record = tryCatch(innerFn, self, context);
        if (record.type === "normal") {
          // If an exception is thrown from innerFn, we leave state ===
          // GenStateExecuting and loop back for another invocation.
          state = context.done
            ? GenStateCompleted
            : GenStateSuspendedYield;

          if (record.arg === ContinueSentinel) {
            continue;
          }

          return {
            value: record.arg,
            done: context.done
          };

        } else if (record.type === "throw") {
          state = GenStateCompleted;
          // Dispatch the exception by looping back around to the
          // context.dispatchException(context.arg) call above.
          context.method = "throw";
          context.arg = record.arg;
        }
      }
    };
  }

  // Call delegate.iterator[context.method](context.arg) and handle the
  // result, either by returning a { value, done } result from the
  // delegate iterator, or by modifying context.method and context.arg,
  // setting context.delegate to null, and returning the ContinueSentinel.
  function maybeInvokeDelegate(delegate, context) {
    var method = delegate.iterator[context.method];
    if (method === undefined) {
      // A .throw or .return when the delegate iterator has no .throw
      // method always terminates the yield* loop.
      context.delegate = null;

      if (context.method === "throw") {
        if (delegate.iterator.return) {
          // If the delegate iterator has a return method, give it a
          // chance to clean up.
          context.method = "return";
          context.arg = undefined;
          maybeInvokeDelegate(delegate, context);

          if (context.method === "throw") {
            // If maybeInvokeDelegate(context) changed context.method from
            // "return" to "throw", let that override the TypeError below.
            return ContinueSentinel;
          }
        }

        context.method = "throw";
        context.arg = new TypeError(
          "The iterator does not provide a 'throw' method");
      }

      return ContinueSentinel;
    }

    var record = tryCatch(method, delegate.iterator, context.arg);

    if (record.type === "throw") {
      context.method = "throw";
      context.arg = record.arg;
      context.delegate = null;
      return ContinueSentinel;
    }

    var info = record.arg;

    if (! info) {
      context.method = "throw";
      context.arg = new TypeError("iterator result is not an object");
      context.delegate = null;
      return ContinueSentinel;
    }

    if (info.done) {
      // Assign the result of the finished delegate to the temporary
      // variable specified by delegate.resultName (see delegateYield).
      context[delegate.resultName] = info.value;

      // Resume execution at the desired location (see delegateYield).
      context.next = delegate.nextLoc;

      // If context.method was "throw" but the delegate handled the
      // exception, let the outer generator proceed normally. If
      // context.method was "next", forget context.arg since it has been
      // "consumed" by the delegate iterator. If context.method was
      // "return", allow the original .return call to continue in the
      // outer generator.
      if (context.method !== "return") {
        context.method = "next";
        context.arg = undefined;
      }

    } else {
      // Re-yield the result returned by the delegate method.
      return info;
    }

    // The delegate iterator is finished, so forget it and continue with
    // the outer generator.
    context.delegate = null;
    return ContinueSentinel;
  }

  // Define Generator.prototype.{next,throw,return} in terms of the
  // unified ._invoke helper method.
  defineIteratorMethods(Gp);

  Gp[toStringTagSymbol] = "Generator";

  // A Generator should always return itself as the iterator object when the
  // @@iterator function is called on it. Some browsers' implementations of the
  // iterator prototype chain incorrectly implement this, causing the Generator
  // object to not be returned from this call. This ensures that doesn't happen.
  // See https://github.com/facebook/regenerator/issues/274 for more details.
  Gp[iteratorSymbol] = function() {
    return this;
  };

  Gp.toString = function() {
    return "[object Generator]";
  };

  function pushTryEntry(locs) {
    var entry = { tryLoc: locs[0] };

    if (1 in locs) {
      entry.catchLoc = locs[1];
    }

    if (2 in locs) {
      entry.finallyLoc = locs[2];
      entry.afterLoc = locs[3];
    }

    this.tryEntries.push(entry);
  }

  function resetTryEntry(entry) {
    var record = entry.completion || {};
    record.type = "normal";
    delete record.arg;
    entry.completion = record;
  }

  function Context(tryLocsList) {
    // The root entry object (effectively a try statement without a catch
    // or a finally block) gives us a place to store values thrown from
    // locations where there is no enclosing try statement.
    this.tryEntries = [{ tryLoc: "root" }];
    tryLocsList.forEach(pushTryEntry, this);
    this.reset(true);
  }

  runtime.keys = function(object) {
    var keys = [];
    for (var key in object) {
      keys.push(key);
    }
    keys.reverse();

    // Rather than returning an object with a next method, we keep
    // things simple and return the next function itself.
    return function next() {
      while (keys.length) {
        var key = keys.pop();
        if (key in object) {
          next.value = key;
          next.done = false;
          return next;
        }
      }

      // To avoid creating an additional object, we just hang the .value
      // and .done properties off the next function object itself. This
      // also ensures that the minifier will not anonymize the function.
      next.done = true;
      return next;
    };
  };

  function values(iterable) {
    if (iterable) {
      var iteratorMethod = iterable[iteratorSymbol];
      if (iteratorMethod) {
        return iteratorMethod.call(iterable);
      }

      if (typeof iterable.next === "function") {
        return iterable;
      }

      if (!isNaN(iterable.length)) {
        var i = -1, next = function next() {
          while (++i < iterable.length) {
            if (hasOwn.call(iterable, i)) {
              next.value = iterable[i];
              next.done = false;
              return next;
            }
          }

          next.value = undefined;
          next.done = true;

          return next;
        };

        return next.next = next;
      }
    }

    // Return an iterator with no values.
    return { next: doneResult };
  }
  runtime.values = values;

  function doneResult() {
    return { value: undefined, done: true };
  }

  Context.prototype = {
    constructor: Context,

    reset: function(skipTempReset) {
      this.prev = 0;
      this.next = 0;
      // Resetting context._sent for legacy support of Babel's
      // function.sent implementation.
      this.sent = this._sent = undefined;
      this.done = false;
      this.delegate = null;

      this.method = "next";
      this.arg = undefined;

      this.tryEntries.forEach(resetTryEntry);

      if (!skipTempReset) {
        for (var name in this) {
          // Not sure about the optimal order of these conditions:
          if (name.charAt(0) === "t" &&
              hasOwn.call(this, name) &&
              !isNaN(+name.slice(1))) {
            this[name] = undefined;
          }
        }
      }
    },

    stop: function() {
      this.done = true;

      var rootEntry = this.tryEntries[0];
      var rootRecord = rootEntry.completion;
      if (rootRecord.type === "throw") {
        throw rootRecord.arg;
      }

      return this.rval;
    },

    dispatchException: function(exception) {
      if (this.done) {
        throw exception;
      }

      var context = this;
      function handle(loc, caught) {
        record.type = "throw";
        record.arg = exception;
        context.next = loc;

        if (caught) {
          // If the dispatched exception was caught by a catch block,
          // then let that catch block handle the exception normally.
          context.method = "next";
          context.arg = undefined;
        }

        return !! caught;
      }

      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
        var entry = this.tryEntries[i];
        var record = entry.completion;

        if (entry.tryLoc === "root") {
          // Exception thrown outside of any try block that could handle
          // it, so set the completion value of the entire function to
          // throw the exception.
          return handle("end");
        }

        if (entry.tryLoc <= this.prev) {
          var hasCatch = hasOwn.call(entry, "catchLoc");
          var hasFinally = hasOwn.call(entry, "finallyLoc");

          if (hasCatch && hasFinally) {
            if (this.prev < entry.catchLoc) {
              return handle(entry.catchLoc, true);
            } else if (this.prev < entry.finallyLoc) {
              return handle(entry.finallyLoc);
            }

          } else if (hasCatch) {
            if (this.prev < entry.catchLoc) {
              return handle(entry.catchLoc, true);
            }

          } else if (hasFinally) {
            if (this.prev < entry.finallyLoc) {
              return handle(entry.finallyLoc);
            }

          } else {
            throw new Error("try statement without catch or finally");
          }
        }
      }
    },

    abrupt: function(type, arg) {
      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
        var entry = this.tryEntries[i];
        if (entry.tryLoc <= this.prev &&
            hasOwn.call(entry, "finallyLoc") &&
            this.prev < entry.finallyLoc) {
          var finallyEntry = entry;
          break;
        }
      }

      if (finallyEntry &&
          (type === "break" ||
           type === "continue") &&
          finallyEntry.tryLoc <= arg &&
          arg <= finallyEntry.finallyLoc) {
        // Ignore the finally entry if control is not jumping to a
        // location outside the try/catch block.
        finallyEntry = null;
      }

      var record = finallyEntry ? finallyEntry.completion : {};
      record.type = type;
      record.arg = arg;

      if (finallyEntry) {
        this.method = "next";
        this.next = finallyEntry.finallyLoc;
        return ContinueSentinel;
      }

      return this.complete(record);
    },

    complete: function(record, afterLoc) {
      if (record.type === "throw") {
        throw record.arg;
      }

      if (record.type === "break" ||
          record.type === "continue") {
        this.next = record.arg;
      } else if (record.type === "return") {
        this.rval = this.arg = record.arg;
        this.method = "return";
        this.next = "end";
      } else if (record.type === "normal" && afterLoc) {
        this.next = afterLoc;
      }

      return ContinueSentinel;
    },

    finish: function(finallyLoc) {
      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
        var entry = this.tryEntries[i];
        if (entry.finallyLoc === finallyLoc) {
          this.complete(entry.completion, entry.afterLoc);
          resetTryEntry(entry);
          return ContinueSentinel;
        }
      }
    },

    "catch": function(tryLoc) {
      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
        var entry = this.tryEntries[i];
        if (entry.tryLoc === tryLoc) {
          var record = entry.completion;
          if (record.type === "throw") {
            var thrown = record.arg;
            resetTryEntry(entry);
          }
          return thrown;
        }
      }

      // The context.catch method must only be called with a location
      // argument that corresponds to a known catch block.
      throw new Error("illegal catch attempt");
    },

    delegateYield: function(iterable, resultName, nextLoc) {
      this.delegate = {
        iterator: values(iterable),
        resultName: resultName,
        nextLoc: nextLoc
      };

      if (this.method === "next") {
        // Deliberately forget the last sent value so that we don't
        // accidentally pass it on to the delegate.
        this.arg = undefined;
      }

      return ContinueSentinel;
    }
  };
})(
  // In sloppy mode, unbound `this` refers to the global object, fallback to
  // Function constructor if we're in global strict mode. That is sadly a form
  // of indirect eval which violates Content Security Policy.
  (function() {
    return this || (typeof self === "object" && self);
  })() || Function("return this")()
);


/***/ }),

/***/ "./drawing/draw.js":
/*!*************************!*\
  !*** ./drawing/draw.js ***!
  \*************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_78338__) {

"use strict";
__nested_webpack_require_78338__.r(__nested_webpack_exports__);
/**
 * This function manages the {@link https://www.w3.org/TR/2dcontext/#the-canvas-state|save/restore}
 * pattern for working in a new context state stack. The parameter `fn` is passed the `context` and can
 * execute any API calls in a clean stack.
 * @public
 * @method draw
 * @memberof Drawing
 *
 * @param {CanvasRenderingContext2D} context - Target Canvas
 * @param {ContextFn} fn - A function which performs drawing operations within the given context.
 * @returns {undefined}
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (context, fn) {
  context.save();
  fn(context);
  context.restore();
});

/***/ }),

/***/ "./drawing/drawArrow.js":
/*!******************************!*\
  !*** ./drawing/drawArrow.js ***!
  \******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_79284__) {

"use strict";
__nested_webpack_require_79284__.r(__nested_webpack_exports__);
/* harmony import */ var _drawLine_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_79284__(/*! ./drawLine.js */ "./drawing/drawLine.js");
/* harmony import */ var _drawJoinedLines_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_79284__(/*! ./drawJoinedLines.js */ "./drawing/drawJoinedLines.js");


/**
 * Draw an arrow using the drawing API.
 * @public
 * @method drawArrow
 * @memberof Drawing
 *
 * @param  {Object} context   The canvas context.
 * @param  {Object} start     The start position.
 * @param  {Object} end       The end position.
 * @param  {string} color     The color of the arrow.
 * @param  {number} lineWidth The width of the arrow line.
 * @param  {number[] | undefined} [lineDash] The optional lineDash style.
 * @returns {undefined}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (context, start, end, color, lineWidth, lineDash) {
  // Variables to be used when creating the arrow
  var headLength = 10;
  var angle = Math.atan2(end.y - start.y, end.x - start.x); // Starting path of the arrow from the start square to the end square and drawing the stroke

  var options = {
    color: color,
    lineWidth: lineWidth
  };

  if (lineDash) {
    options.lineDash = lineDash;
  }

  Object(_drawLine_js__WEBPACK_IMPORTED_MODULE_0__["default"])(context, undefined, start, end, options, 'canvas');
  options = {
    color: color,
    lineWidth: lineWidth,
    fillStyle: color
  };
  var points = [{
    x: end.x - headLength * Math.cos(angle - Math.PI / 7),
    y: end.y - headLength * Math.sin(angle - Math.PI / 7)
  }, {
    x: end.x - headLength * Math.cos(angle + Math.PI / 7),
    y: end.y - headLength * Math.sin(angle + Math.PI / 7)
  }, end];
  Object(_drawJoinedLines_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, undefined, end, points, options, 'canvas');
});

/***/ }),

/***/ "./drawing/drawCircle.js":
/*!*******************************!*\
  !*** ./drawing/drawCircle.js ***!
  \*******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_81428__) {

"use strict";
__nested_webpack_require_81428__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_81428__(/*! ./../externalModules.js */ "./externalModules.js");
/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_81428__(/*! ./path.js */ "./drawing/path.js");


/**
 * Draw a circle with given `center` and `radius`.
 * @public
 * @method drawCircle
 * @memberof Drawing
 *
 * @param {CanvasRenderingContext2D} context - Target context
 * @param {HTMLElement} element - The DOM Element to draw on
 * @param {Object} center - `{ x, y }` in either pixel or canvas coordinates.
 * @param {number} radius - The circle's radius in canvas units.
 * @param {Object} options - See {@link path}
 * @param {String} [coordSystem='pixel'] - Can be "pixel" (default) or "canvas". The coordinate
 *     system of the points passed in to the function. If "pixel" then cornerstone.pixelToCanvas
 *     is used to transform the points from pixel to canvas coordinates.
 * @returns {undefined}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (context, element, center, radius, options) {
  var coordSystem = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'pixel';

  if (coordSystem === 'pixel') {
    center = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.pixelToCanvas(element, center);
  }

  Object(_path_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, options, function (context) {
    context.arc(center.x, center.y, radius, 0, 2 * Math.PI);
  });
});

/***/ }),

/***/ "./drawing/drawEllipse.js":
/*!********************************!*\
  !*** ./drawing/drawEllipse.js ***!
  \********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_83284__) {

"use strict";
__nested_webpack_require_83284__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_83284__(/*! ./../externalModules.js */ "./externalModules.js");
/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_83284__(/*! ./path.js */ "./drawing/path.js");
/* harmony import */ var _util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_83284__(/*! ../util/pointProjector.js */ "./util/pointProjector.js");



/**
 * Draw an ellipse within the bounding box defined by `corner1` and `corner2`.
 * @public
 * @method drawEllipse
 * @memberof Drawing
 *
 * @param {CanvasRenderingContext2D} context - Target context
 * @param {HTMLElement} element - The DOM Element to draw on
 * @param {Object} corner1 - `{ x, y }` in either pixel or canvas coordinates.
 * @param {Object} corner2 - `{ x, y }` in either pixel or canvas coordinates.
 * @param {Object} options - See {@link path}
 * @param {String} [coordSystem='pixel'] - Can be "pixel" (default) or "canvas". The coordinate
 *     system of the points passed in to the function. If "pixel" then cornerstone.pixelToCanvas
 *     is used to transform the points from pixel to canvas coordinates.
 * @param {Number} initialRotation - Ellipse initial rotation
 * @returns {undefined}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (context, element, corner1, corner2, options) {
  var coordSystem = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'pixel';
  var initialRotation = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0.0;

  if (coordSystem === 'pixel') {
    corner1 = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.pixelToCanvas(element, corner1);
    corner2 = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.pixelToCanvas(element, corner2);
  }

  var viewport = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getViewport(element); // Calculate the center of the image

  var width = element.clientWidth,
      height = element.clientHeight;
  var scale = viewport.scale,
      translation = viewport.translation;
  var rotation = viewport.rotation - initialRotation;
  var centerPoint = {
    x: width / 2 + translation.x * scale,
    y: height / 2 + translation.y * scale
  };

  if (Math.abs(rotation) > 0.05) {
    corner1 = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__["rotatePoint"])(corner1, centerPoint, -rotation);
    corner2 = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__["rotatePoint"])(corner2, centerPoint, -rotation);
  }

  var w = Math.abs(corner1.x - corner2.x);
  var h = Math.abs(corner1.y - corner2.y);
  var xMin = Math.min(corner1.x, corner2.x);
  var yMin = Math.min(corner1.y, corner2.y);
  var center = {
    x: xMin + w / 2,
    y: yMin + h / 2
  };

  if (Math.abs(rotation) > 0.05) {
    center = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__["rotatePoint"])(center, centerPoint, rotation);
  }

  var angle = rotation * Math.PI / 180;
  Object(_path_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, options, function (context) {
    context.ellipse(center.x, center.y, w / 2, h / 2, angle, 0, 2 * Math.PI);
    context.closePath();
  });
});

/***/ }),

/***/ "./drawing/drawHandles.js":
/*!********************************!*\
  !*** ./drawing/drawHandles.js ***!
  \********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_86859__) {

"use strict";
__nested_webpack_require_86859__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_86859__(/*! ./../externalModules.js */ "./externalModules.js");
/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_86859__(/*! ./../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js");
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_86859__(/*! ./../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_86859__(/*! ./path.js */ "./drawing/path.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_86859__(/*! ./../store/index.js */ "./store/index.js");





/**
 * Draws proivded handles to the provided context
 * @public
 * @method drawHandles
 * @memberof Drawing
 *
 * @param {CanvasRenderingContext2D} context - Target context
 * @param {*} evtDetail - Cornerstone's 'cornerstoneimagerendered' event's `detail`
 * @param {Object[]|Object} handles - An array of handle objects, or an object w/ named handle objects
 * @param {Object} [options={}] - Options object
 * @param {string} [options.color]
 * @param {Boolean} [options.drawHandlesIfActive=false] - Whether the handles should only be drawn if Active (hovered/selected)
 * @param {string} [options.fill]
 * @param {Number} [options.handleRadius=6]
 * @returns {undefined}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (context, evtDetail, handles) {
  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
  var element = evtDetail.element;
  var defaultColor = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_2__["default"].getToolColor();
  context.strokeStyle = options.color || defaultColor;
  var handleKeys = Object.keys(handles);

  var _loop = function _loop(i) {
    var handleKey = handleKeys[i];
    var handle = handles[handleKey];

    if (handle.drawnIndependently === true) {
      return "continue";
    }

    if (options.drawHandlesIfActive === true && !handle.active) {
      return "continue";
    }

    if (options.hideHandlesIfMoving && handle.moving) {
      return "continue";
    }

    var lineWidth = handle.active ? _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"].getActiveWidth() : _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"].getToolWidth();
    var fillStyle = options.fill;
    var pathOptions = {
      lineWidth: lineWidth,
      fillStyle: fillStyle
    };

    if (options.lineDash) {
      pathOptions.lineDash = options.lineDash;
    }

    Object(_path_js__WEBPACK_IMPORTED_MODULE_3__["default"])(context, pathOptions, function (context) {
      var handleCanvasCoords = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.pixelToCanvas(element, handle); // Handle's radisu, then tool's radius, then default radius

      var handleRadius = handle.radius || options.handleRadius || _store_index_js__WEBPACK_IMPORTED_MODULE_4__["state"].handleRadius;
      context.arc(handleCanvasCoords.x, handleCanvasCoords.y, handleRadius, 0, 2 * Math.PI);
    });
  };

  for (var i = 0; i < handleKeys.length; i++) {
    var _ret = _loop(i);

    if (_ret === "continue") continue;
  }
});

/***/ }),

/***/ "./drawing/drawJoinedLines.js":
/*!************************************!*\
  !*** ./drawing/drawJoinedLines.js ***!
  \************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_90541__) {

"use strict";
__nested_webpack_require_90541__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_90541__(/*! ./../externalModules.js */ "./externalModules.js");
/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_90541__(/*! ./path.js */ "./drawing/path.js");


/**
 * Draw a series of joined lines, starting at `start` and then going to each point in `points`.
 * @public
 * @method drawJoinedLines
 * @memberof Drawing
 *
 * @param {CanvasRenderingContext2D} context - Target context
 * @param {HTMLElement} element - The DOM Element to draw on
 * @param {Object} start - `{ x, y }` in either pixel or canvas coordinates.
 * @param {Object[]} points - `[{ x, y }]` An array of points in either pixel or canvas coordinates.
 * @param {Object} options - See {@link path}
 * @param {String} [coordSystem='pixel'] - Can be "pixel" (default) or "canvas". The coordinate
 *     system of the points passed in to the function. If "pixel" then cornerstone.pixelToCanvas
 *     is used to transform the points from pixel to canvas coordinates.
 * @returns {undefined}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (context, element, start, points, options) {
  var coordSystem = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'pixel';
  Object(_path_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, options, function (context) {
    if (coordSystem === 'pixel') {
      start = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.pixelToCanvas(element, start);
      points = points.map(function (p) {
        return _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.pixelToCanvas(element, p);
      });
    }

    context.moveTo(start.x, start.y);
    points.forEach(function (_ref) {
      var x = _ref.x,
          y = _ref.y;
      context.lineTo(x, y);
    });
  });
});

/***/ }),

/***/ "./drawing/drawLine.js":
/*!*****************************!*\
  !*** ./drawing/drawLine.js ***!
  \*****************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_92731__) {

"use strict";
__nested_webpack_require_92731__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_92731__.d(__nested_webpack_exports__, "default", function() { return drawLine; });
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_92731__(/*! ./../externalModules.js */ "./externalModules.js");
/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_92731__(/*! ./path.js */ "./drawing/path.js");


/**
 * Draw a line between `start` and `end`.
 *
 * @public
 * @method drawLine
 * @memberof Drawing
 *
 * @param {CanvasRenderingContext2D} context
 * @param {HTMLElement} element - The DOM Element to draw on
 * @param {Object} start - `{ x, y } in either pixel or canvas coordinates.
 * @param {Object} end - `{ x, y }` in either pixel or canvas coordinates.
 * @param {Object} options - See {@link path}
 * @param {String} [coordSystem='pixel'] - Can be "pixel" (default) or "canvas". The coordinate
 *     system of the points passed in to the function. If "pixel" then cornerstone.pixelToCanvas
 *     is used to transform the points from pixel to canvas coordinates.
 * @returns {undefined}
 */

function drawLine(context, element, start, end, options) {
  var coordSystem = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'pixel';
  Object(_path_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, options, function (context) {
    if (coordSystem === 'pixel') {
      start = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.pixelToCanvas(element, start);
      end = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.pixelToCanvas(element, end);
    }

    context.moveTo(start.x, start.y);
    context.lineTo(end.x, end.y);
  });
}

/***/ }),

/***/ "./drawing/drawLines.js":
/*!******************************!*\
  !*** ./drawing/drawLines.js ***!
  \******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_94747__) {

"use strict";
__nested_webpack_require_94747__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_94747__(/*! ./../externalModules.js */ "./externalModules.js");
/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_94747__(/*! ./path.js */ "./drawing/path.js");


/**
 * Draw multiple lines.
 * @public
 * @method drawJoinedLines
 * @memberof Drawing
 *
 * @param {CanvasRenderingContext2D} context - Target context
 * @param {HTMLElement} element - The DOM Element to draw on
 * @param {Object[]} lines - `[{ start: {x, y}, end: { x, y }]` An array of `start`, `end` pairs.
 *     Each point is `{ x, y }` in either pixel or canvas coordinates.
 * @param {Object} options - See {@link path}
 * @param {String} [coordSystem='pixel'] - Can be "pixel" (default) or "canvas". The coordinate
 *     system of the points passed in to the function. If "pixel" then cornerstone.pixelToCanvas
 *     is used to transform the points from pixel to canvas coordinates.
 * @returns {undefined}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (context, element, lines, options) {
  var coordSystem = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'pixel';
  Object(_path_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, options, function (context) {
    lines.forEach(function (line) {
      var start = line.start;
      var end = line.end;

      if (coordSystem === 'pixel') {
        var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone;
        start = cornerstone.pixelToCanvas(element, start);
        end = cornerstone.pixelToCanvas(element, end);
      }

      context.moveTo(start.x, start.y);
      context.lineTo(end.x, end.y);
    });
  });
});

/***/ }),

/***/ "./drawing/drawLink.js":
/*!*****************************!*\
  !*** ./drawing/drawLink.js ***!
  \*****************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_96805__) {

"use strict";
__nested_webpack_require_96805__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_96805__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _drawLine_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_96805__(/*! ./drawLine.js */ "./drawing/drawLine.js");


/**
 * Draw a link between an annotation to a box.
 * @public
 * @method drawLink
 * @memberof Drawing
 *
 * @param  {Object[]} linkAnchorPoints An array of possible anchor points.
 * @param  {Object} refPoint         A reference point to select the anchor point.
 * @param  {Object} boundingBox    The bounding box to link.
 * @param  {Object} context          The canvas context.
 * @param  {string} color            The link color.
 * @param  {number} lineWidth        The line width of the link.
 * @returns {undefined}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (linkAnchorPoints, refPoint, boundingBox, context, color, lineWidth) {
  // Draw a link from "the closest anchor point to refPoint" to "the nearest midpoint on the bounding box".
  // Find the closest anchor point to RefPoint
  var start = linkAnchorPoints.length > 0 ? _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.findClosestPoint(linkAnchorPoints, refPoint) : refPoint; // Calculate the midpoints of the bounding box

  var boundingBoxPoints = [{
    x: boundingBox.left + boundingBox.width / 2,
    y: boundingBox.top
  }, {
    x: boundingBox.left,
    y: boundingBox.top + boundingBox.height / 2
  }, {
    x: boundingBox.left + boundingBox.width / 2,
    y: boundingBox.top + boundingBox.height
  }, {
    x: boundingBox.left + boundingBox.width,
    y: boundingBox.top + boundingBox.height / 2
  }]; // Calculate the link endpoint by identifying which midpoint of the bounding box
  // Is closest to the start point.

  var end = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.findClosestPoint(boundingBoxPoints, start); // Finally we draw the dashed linking line

  var options = {
    color: color,
    lineWidth: lineWidth,
    lineDash: [2, 3]
  };
  Object(_drawLine_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, undefined, start, end, options, 'canvas');
});

/***/ }),

/***/ "./drawing/drawLinkedTextBox.js":
/*!**************************************!*\
  !*** ./drawing/drawLinkedTextBox.js ***!
  \**************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_99388__) {

"use strict";
__nested_webpack_require_99388__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_99388__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _drawTextBox_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_99388__(/*! ./drawTextBox.js */ "./drawing/drawTextBox.js");
/* harmony import */ var _drawLink_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_99388__(/*! ./drawLink.js */ "./drawing/drawLink.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_99388__(/*! ./../store/index.js */ "./store/index.js");
/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_99388__(/*! ../util/clip.js */ "./util/clip.js");





/**
 * Draw a link between an annotation to a textBox.
 * @public
 * @method drawLinkedTextBox
 * @memberof Drawing
 *
 * @param {Object} context - The canvas context.
 * @param {HTMLElement} element - The element on which to draw the link.
 * @param {Object} textBox - The textBox to link.
 * @param {Object} text - The text to display in the textbox.
 * @param {Object[]} handles - The handles of the annotation.
 * @param {Object[]} textBoxAnchorPoints - An array of possible anchor points on the textBox.
 * @param {string} color - The link color.
 * @param {number} lineWidth - The line width of the link.
 * @param {number} xOffset - The x offset of the textbox.
 * @param {boolean} yCenter - Vertically centers the text if true.
 * @returns {undefined}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (context, element, textBox, text, handles, textBoxAnchorPoints, color, lineWidth, xOffset, yCenter) {
  var pixelToCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.pixelToCanvas; // Convert the textbox Image coordinates into Canvas coordinates

  var textCoords = pixelToCanvas(element, textBox);

  if (xOffset) {
    textCoords.x += xOffset;
  }

  var options = {
    centering: {
      x: false,
      y: yCenter
    }
  }; // Clip the bounding box to the displayed area of the image

  if (_store_index_js__WEBPACK_IMPORTED_MODULE_3__["state"].preventTextBoxOutsideDisplayedArea) {
    options.displacer = function (box) {
      return Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_4__["clipBoxToDisplayedArea"])(element, box);
    };
  } // Draw the text box


  textBox.boundingBox = Object(_drawTextBox_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, text, textCoords.x, textCoords.y, color, options);

  if (textBox.hasMoved) {
    // Identify the possible anchor points for the tool -> text line
    var linkAnchorPoints = textBoxAnchorPoints(handles).map(function (h) {
      return pixelToCanvas(element, h);
    }); // Draw dashed link line between tool and text

    Object(_drawLink_js__WEBPACK_IMPORTED_MODULE_2__["default"])(linkAnchorPoints, textCoords, textBox.boundingBox, context, color, lineWidth);
  }
});

/***/ }),

/***/ "./drawing/drawRect.js":
/*!*****************************!*\
  !*** ./drawing/drawRect.js ***!
  \*****************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_102606__) {

"use strict";
__nested_webpack_require_102606__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_102606__(/*! ./../externalModules.js */ "./externalModules.js");
/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_102606__(/*! ./path.js */ "./drawing/path.js");
/* harmony import */ var _util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_102606__(/*! ../util/pointProjector.js */ "./util/pointProjector.js");



/**
 * Draw a rectangle defined by `corner1` and `corner2`.
 * @public
 * @method drawRect
 * @memberof Drawing
 *
 * @param {CanvasRenderingContext2D} context - Target context
 * @param {HTMLElement} element - The DOM Element to draw on
 * @param {Object} corner1 - `{ x, y }` in either pixel or canvas coordinates.
 * @param {Object} corner2 - `{ x, y }` in either pixel or canvas coordinates.
 * @param {Object} options - See {@link path}
 * @param {String} [coordSystem='pixel'] - Can be "pixel" (default) or "canvas". The coordinate
 *     system of the points passed in to the function. If "pixel" then cornerstone.pixelToCanvas
 *     is used to transform the points from pixel to canvas coordinates.
 * @param {Number} initialRotation - Rectangle initial rotation
 * @returns {undefined}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (context, element, corner1, corner2, options) {
  var coordSystem = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'pixel';
  var initialRotation = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0.0;

  if (coordSystem === 'pixel') {
    var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone;
    corner1 = cornerstone.pixelToCanvas(element, corner1);
    corner2 = cornerstone.pixelToCanvas(element, corner2);
  }

  var viewport = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getViewport(element); // Calculate the center of the image

  var width = element.clientWidth,
      height = element.clientHeight;
  var scale = viewport.scale,
      translation = viewport.translation;
  var rotation = viewport.rotation - initialRotation;
  var centerPoint = {
    x: width / 2 + translation.x * scale,
    y: height / 2 + translation.y * scale
  };

  if (Math.abs(rotation) > 0.05) {
    corner1 = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__["rotatePoint"])(corner1, centerPoint, -rotation);
    corner2 = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__["rotatePoint"])(corner2, centerPoint, -rotation);
  }

  var w = Math.abs(corner1.x - corner2.x);
  var h = Math.abs(corner1.y - corner2.y);
  corner1 = {
    x: Math.min(corner1.x, corner2.x),
    y: Math.min(corner1.y, corner2.y)
  };
  corner2 = {
    x: corner1.x + w,
    y: corner1.y + h
  };
  var corner3 = {
    x: corner1.x + w,
    y: corner1.y
  };
  var corner4 = {
    x: corner1.x,
    y: corner1.y + h
  };

  if (Math.abs(rotation) > 0.05) {
    corner1 = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__["rotatePoint"])(corner1, centerPoint, rotation);
    corner2 = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__["rotatePoint"])(corner2, centerPoint, rotation);
    corner3 = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__["rotatePoint"])(corner3, centerPoint, rotation);
    corner4 = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__["rotatePoint"])(corner4, centerPoint, rotation);
  }

  Object(_path_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, options, function (context) {
    context.moveTo(corner1.x, corner1.y);
    context.lineTo(corner3.x, corner3.y);
    context.lineTo(corner2.x, corner2.y);
    context.lineTo(corner4.x, corner4.y);
    context.lineTo(corner1.x, corner1.y);
  });
});

/***/ }),

/***/ "./drawing/drawTextBox.js":
/*!********************************!*\
  !*** ./drawing/drawTextBox.js ***!
  \********************************/
/*! exports provided: textBoxWidth, default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_106713__) {

"use strict";
__nested_webpack_require_106713__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_106713__.d(__nested_webpack_exports__, "textBoxWidth", function() { return textBoxWidth; });
/* harmony import */ var _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_106713__(/*! ../stateManagement/textStyle.js */ "./stateManagement/textStyle.js");
/* harmony import */ var _draw_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_106713__(/*! ./draw.js */ "./drawing/draw.js");
/* harmony import */ var _fillTextLines_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_106713__(/*! ./fillTextLines.js */ "./drawing/fillTextLines.js");
/* harmony import */ var _fillBox_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_106713__(/*! ./fillBox.js */ "./drawing/fillBox.js");




/**
 * Compute the width of the box required to display the given `text` with a given `padding`.
 * @public
 * @function textBoxWidth
 * @memberof Drawing
 *
 * @param {CanvasRenderingContext2D} context - Target context
 * @param {String} text - The text to find the width of.
 * @param {Number} padding - The padding to apply on either end of the text.
 * @returns {Number} computed text box width
 */

function textBoxWidth(context, text, padding) {
  var font = _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"].getFont();
  var origFont = context.font;

  if (font && font !== origFont) {
    context.font = font;
  }

  var width = context.measureText(text).width;

  if (font && font !== origFont) {
    context.font = origFont;
  }

  return width + 2 * padding;
}
/**
 * Draws a textBox.
 * @public
 * @function drawTextBox
 * @memberof Drawing
 *
 * @param  {CanvasRenderingContext2D} context The canvas context.
 * @param  {string} textLines   The text to display.
 * @param  {number} x           The x position of the textBox.
 * @param  {number} y           The y position of the textBox.
 * @param  {string} color       The color of the textBox.
 * @param  {Object} options     Options for the textBox.
 * @param  {boolean} options.centering Option to center the textbox.
 * @param  {function} options.displacer displacer function.
 * @returns {Object} {top, left, width, height} - Bounding box; can be used for pointNearTool
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (context, textLines, x, y, color) {
  var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};

  if (Object.prototype.toString.call(textLines) !== '[object Array]') {
    textLines = [textLines];
  }

  var padding = 5;
  var fontSize = _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"].getFontSize();
  var backgroundColor = _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"].getBackgroundColor(); // Find the longest text width in the array of text data

  var maxWidth = 0;
  textLines.forEach(function (text) {
    // Get the text width in the current font
    var width = textBoxWidth(context, text, padding); // Find the maximum with for all the text rows;

    maxWidth = Math.max(maxWidth, width);
  }); // Calculate the bounding box for this text box

  var boundingBox = {
    width: maxWidth,
    height: padding + textLines.length * (fontSize + padding)
  };
  Object(_draw_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, function (context) {
    context.strokeStyle = color; // Draw the background box with padding

    if (options.centering) {
      if (options.centering.x === true) {
        x -= boundingBox.width / 2;
      }

      if (options.centering.y === true) {
        y -= boundingBox.height / 2;
      }
    }

    boundingBox.left = x;
    boundingBox.top = y; // Check if a displacer function was provided

    if (typeof options.displacer === 'function') {
      options.displacer(boundingBox);
    }

    Object(_fillBox_js__WEBPACK_IMPORTED_MODULE_3__["default"])(context, boundingBox, backgroundColor); // Draw each of the text lines on top of the background box

    Object(_fillTextLines_js__WEBPACK_IMPORTED_MODULE_2__["default"])(context, boundingBox, textLines, color, padding);
  }); // Return the bounding box so it can be used for pointNearHandle

  return boundingBox;
});

/***/ }),

/***/ "./drawing/fillBox.js":
/*!****************************!*\
  !*** ./drawing/fillBox.js ***!
  \****************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_111162__) {

"use strict";
__nested_webpack_require_111162__.r(__nested_webpack_exports__);
/**
 * Draw a filled rectangle defined by `boundingBox` using the style defined by `fillStyle`.
 * @public
 * @method fillBox
 * @memberof Drawing
 *
 * @param {CanvasRenderingContext2D} context - Target context
 * @param {Object} boundingBox - `{ left, top, width, height }` in canvas coordinates.
 * @param {FillStyle} fillStyle - The fillStyle to apply to the region.
 * @returns {undefined}
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (context, boundingBox, fillStyle) {
  context.fillStyle = fillStyle;
  context.fillRect(boundingBox.left, boundingBox.top, boundingBox.width, boundingBox.height);
});

/***/ }),

/***/ "./drawing/fillOutsideRect.js":
/*!************************************!*\
  !*** ./drawing/fillOutsideRect.js ***!
  \************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_112135__) {

"use strict";
__nested_webpack_require_112135__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_112135__(/*! ./../externalModules.js */ "./externalModules.js");
/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_112135__(/*! ./path.js */ "./drawing/path.js");


/**
 * Fill the region outside a rectangle defined by `corner1` and `corner2`.
 * @public
 * @method fillOutsideRect
 * @memberof Drawing
 *
 * @param {CanvasRenderingContext2D} context - Target context
 * @param {HTMLElement} element - The DOM Element to draw on
 * @param {Object} corner1 - `{ x, y }` in either pixel or canvas coordinates.
 * @param {Object} corner2 - `{ x, y }` in either pixel or canvas coordinates.
 * @param {Object} options - See {@link path}
 * @param {String} [coordSystem='pixel'] - Can be "pixel" (default) or "canvas". The coordinate
 *     system of the points passed in to the function. If "pixel" then cornerstone.pixelToCanvas
 *     is used to transform the points from pixel to canvas coordinates.
 * @returns {undefined}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (context, element, corner1, corner2, options) {
  var coordSystem = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'pixel';

  if (coordSystem === 'pixel') {
    var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone;
    corner1 = cornerstone.pixelToCanvas(element, corner1);
    corner2 = cornerstone.pixelToCanvas(element, corner2);
  }

  var left = Math.min(corner1.x, corner2.x);
  var top = Math.min(corner1.y, corner2.y);
  var width = Math.abs(corner1.x - corner2.x);
  var height = Math.abs(corner1.y - corner2.y);
  Object(_path_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, options, function (context) {
    context.rect(0, 0, context.canvas.clientWidth, context.canvas.clientHeight);
    context.rect(left + width, top, -width, height);
  });
});

/***/ }),

/***/ "./drawing/fillTextLines.js":
/*!**********************************!*\
  !*** ./drawing/fillTextLines.js ***!
  \**********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_114398__) {

"use strict";
__nested_webpack_require_114398__.r(__nested_webpack_exports__);
/* harmony import */ var _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_114398__(/*! ./../stateManagement/textStyle.js */ "./stateManagement/textStyle.js");

/**
 * Draw multiple lines of text within a bounding box.
 * @public
 * @method fillTextLines
 * @memberof Drawing
 *
 * @param {CanvasRenderingContext2D} context - Target context
 * @param {Object} boundingBox - `{ left, top }` in canvas coordinates. Only the top-left corner is specified, as the text will take up as much space as it needs.
 * @param {String[]} textLines - The text to be displayed.
 * @param {FillStyle} fillStyle - The fillStyle to apply to the text.
 * @param {Number} padding - The amount of padding above/below each line in canvas units. Note this gives an inter-line spacing of `2*padding`.
 * @returns {undefined}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (context, boundingBox, textLines, fillStyle, padding) {
  var fontSize = _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"].getFontSize();
  context.font = _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"].getFont();
  context.textBaseline = 'top';
  context.fillStyle = fillStyle;
  textLines.forEach(function (text, index) {
    context.fillText(text, boundingBox.left + padding, boundingBox.top + padding + index * (fontSize + padding));
  });
});

/***/ }),

/***/ "./drawing/getNewContext.js":
/*!**********************************!*\
  !*** ./drawing/getNewContext.js ***!
  \**********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_116115__) {

"use strict";
__nested_webpack_require_116115__.r(__nested_webpack_exports__);
/**
 * Create a new {@link CanvasRenderingContext2D|context} object for the given {@link HTMLCanvasElement|canvas}
 * and set the transform to the {@link https://www.w3.org/TR/2dcontext/#transformations|identity transform}.
 *
 * @public
 * @function getNewContext
 * @memberof Drawing
 *
 * @param {HTMLCanvasElement} canvas - Canvas you would like the context for
 * @returns {CanvasRenderingContext2D} - The provided canvas's 2d context
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (canvas) {
  var context = canvas.getContext('2d');
  context.setTransform(1, 0, 0, 1, 0, 0);
  return context;
});

/***/ }),

/***/ "./drawing/index.js":
/*!**************************!*\
  !*** ./drawing/index.js ***!
  \**************************/
/*! exports provided: draw, drawArrow, drawCircle, drawEllipse, drawHandles, drawJoinedLines, drawLine, drawLines, drawLink, drawLinkedTextBox, drawRect, drawTextBox, fillBox, fillOutsideRect, fillTextLines, getNewContext, path, setShadow, transformCanvasContext, resetCanvasContextTransform */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_117304__) {

"use strict";
__nested_webpack_require_117304__.r(__nested_webpack_exports__);
/* harmony import */ var _draw_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_117304__(/*! ./draw.js */ "./drawing/draw.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "draw", function() { return _draw_js__WEBPACK_IMPORTED_MODULE_0__["default"]; });

/* harmony import */ var _drawArrow_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_117304__(/*! ./drawArrow.js */ "./drawing/drawArrow.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "drawArrow", function() { return _drawArrow_js__WEBPACK_IMPORTED_MODULE_1__["default"]; });

/* harmony import */ var _drawCircle_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_117304__(/*! ./drawCircle.js */ "./drawing/drawCircle.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "drawCircle", function() { return _drawCircle_js__WEBPACK_IMPORTED_MODULE_2__["default"]; });

/* harmony import */ var _drawEllipse_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_117304__(/*! ./drawEllipse.js */ "./drawing/drawEllipse.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "drawEllipse", function() { return _drawEllipse_js__WEBPACK_IMPORTED_MODULE_3__["default"]; });

/* harmony import */ var _drawHandles_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_117304__(/*! ./drawHandles.js */ "./drawing/drawHandles.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "drawHandles", function() { return _drawHandles_js__WEBPACK_IMPORTED_MODULE_4__["default"]; });

/* harmony import */ var _drawJoinedLines_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_117304__(/*! ./drawJoinedLines.js */ "./drawing/drawJoinedLines.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "drawJoinedLines", function() { return _drawJoinedLines_js__WEBPACK_IMPORTED_MODULE_5__["default"]; });

/* harmony import */ var _drawLine_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_117304__(/*! ./drawLine.js */ "./drawing/drawLine.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "drawLine", function() { return _drawLine_js__WEBPACK_IMPORTED_MODULE_6__["default"]; });

/* harmony import */ var _drawLines_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_117304__(/*! ./drawLines.js */ "./drawing/drawLines.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "drawLines", function() { return _drawLines_js__WEBPACK_IMPORTED_MODULE_7__["default"]; });

/* harmony import */ var _drawLink_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_117304__(/*! ./drawLink.js */ "./drawing/drawLink.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "drawLink", function() { return _drawLink_js__WEBPACK_IMPORTED_MODULE_8__["default"]; });

/* harmony import */ var _drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_117304__(/*! ./drawLinkedTextBox.js */ "./drawing/drawLinkedTextBox.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "drawLinkedTextBox", function() { return _drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_9__["default"]; });

/* harmony import */ var _drawRect_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_117304__(/*! ./drawRect.js */ "./drawing/drawRect.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "drawRect", function() { return _drawRect_js__WEBPACK_IMPORTED_MODULE_10__["default"]; });

/* harmony import */ var _drawTextBox_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_117304__(/*! ./drawTextBox.js */ "./drawing/drawTextBox.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "drawTextBox", function() { return _drawTextBox_js__WEBPACK_IMPORTED_MODULE_11__["default"]; });

/* harmony import */ var _fillBox_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_117304__(/*! ./fillBox.js */ "./drawing/fillBox.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "fillBox", function() { return _fillBox_js__WEBPACK_IMPORTED_MODULE_12__["default"]; });

/* harmony import */ var _fillOutsideRect_js__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_117304__(/*! ./fillOutsideRect.js */ "./drawing/fillOutsideRect.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "fillOutsideRect", function() { return _fillOutsideRect_js__WEBPACK_IMPORTED_MODULE_13__["default"]; });

/* harmony import */ var _fillTextLines_js__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_117304__(/*! ./fillTextLines.js */ "./drawing/fillTextLines.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "fillTextLines", function() { return _fillTextLines_js__WEBPACK_IMPORTED_MODULE_14__["default"]; });

/* harmony import */ var _getNewContext_js__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_117304__(/*! ./getNewContext.js */ "./drawing/getNewContext.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "getNewContext", function() { return _getNewContext_js__WEBPACK_IMPORTED_MODULE_15__["default"]; });

/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_117304__(/*! ./path.js */ "./drawing/path.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "path", function() { return _path_js__WEBPACK_IMPORTED_MODULE_16__["default"]; });

/* harmony import */ var _setShadow_js__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_117304__(/*! ./setShadow.js */ "./drawing/setShadow.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "setShadow", function() { return _setShadow_js__WEBPACK_IMPORTED_MODULE_17__["default"]; });

/* harmony import */ var _transformCanvasContext_js__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_117304__(/*! ./transformCanvasContext.js */ "./drawing/transformCanvasContext.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "transformCanvasContext", function() { return _transformCanvasContext_js__WEBPACK_IMPORTED_MODULE_18__["default"]; });

/* harmony import */ var _resetCanvasContextTransform_js__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_117304__(/*! ./resetCanvasContextTransform.js */ "./drawing/resetCanvasContextTransform.js");
/* harmony reexport (safe) */ __nested_webpack_require_117304__.d(__nested_webpack_exports__, "resetCanvasContextTransform", function() { return _resetCanvasContextTransform_js__WEBPACK_IMPORTED_MODULE_19__["default"]; });

/**
 * A {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/fillStyle|color, gradient or pattern} to use inside shapes.
 * @typedef {(String|CanvasGradient|CanvasPattern)} FillStyle
 */

/**
 * A {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/strokeStyle|color, gradient or pattern} to use for the lines around shapes.
 * @typedef {(String|CanvasGradient|CanvasPattern)} StrokeStyle
 */

/**
 * @callback ContextFn
 * @param {CanvasRenderingContext2D} context
 */



















 // Named exports



/***/ }),

/***/ "./drawing/path.js":
/*!*************************!*\
  !*** ./drawing/path.js ***!
  \*************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_124537__) {

"use strict";
__nested_webpack_require_124537__.r(__nested_webpack_exports__);
/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_124537__(/*! ./../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js");

/**
 * This function manages the beginPath/stroke pattern for working with
 * {@link https://www.w3.org/TR/2dcontext/#drawing-paths-to-the-canvas|path objects}.
 *
 * @public
 * @function path
 * @memberof Drawing
 *
 * @param {CanvasRenderingContext2D} context - Context to add path to
 * @param {Object} [options={}] - Drawing Options
 * @param {StrokeStyle} [options.color] - The stroke style of the path.
 * @param {number} [options.lineWidth] - The width of lines in the path. If null, no line width is set.
 *     If undefined then toolStyle.getToolWidth() is set.
 * @param {FillStyle} [options.fillStyle] - The style to fill the path with. If undefined then no filling is done.
 * @param {Number[]} [options.lineDash] - The {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash|dash pattern}
 *     to use on the lines.
 * @param {boolean} [options.shouldDrawLines = true] Whether context.stroke should be evoked.
 * @param {ContextFn} fn - A drawing function to execute with the provided stroke pattern.
 * @returns {undefined}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (context) {
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  var fn = arguments.length > 2 ? arguments[2] : undefined;
  var color = options.color,
      lineWidth = options.lineWidth,
      fillStyle = options.fillStyle,
      lineDash = options.lineDash,
      _options$shouldDrawLi = options.shouldDrawLines,
      shouldDrawLines = _options$shouldDrawLi === void 0 ? true : _options$shouldDrawLi;
  context.beginPath();
  context.strokeStyle = color || context.strokeStyle;
  context.lineWidth = lineWidth || lineWidth === undefined && _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"].getToolWidth() || context.lineWidth;

  if (lineDash) {
    context.setLineDash(lineDash);
  }

  fn(context);

  if (fillStyle) {
    context.fillStyle = fillStyle;
    context.fill();
  }

  if (shouldDrawLines) {
    context.stroke();
  }

  if (lineDash) {
    context.setLineDash([]);
  }
});

/***/ }),

/***/ "./drawing/resetCanvasContextTransform.js":
/*!************************************************!*\
  !*** ./drawing/resetCanvasContextTransform.js ***!
  \************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_127205__) {

"use strict";
__nested_webpack_require_127205__.r(__nested_webpack_exports__);
/**
 * Resets the canvas {@link CanvasRenderingContext2D|context} transform to the
 * {@link https://www.w3.org/TR/2dcontext/#transformations|identity transform}.
 *
 * @public
 * @function resetCanvasContextTransform
 * @memberof Drawing
 *
 * @param {CanvasRenderingContext2D} context - context you wish to transform
 * @returns {void}
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (context) {
  context.setTransform(1, 0, 0, 1, 0, 0);
});

/***/ }),

/***/ "./drawing/setShadow.js":
/*!******************************!*\
  !*** ./drawing/setShadow.js ***!
  \******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_127988__) {

"use strict";
__nested_webpack_require_127988__.r(__nested_webpack_exports__);
/* harmony import */ var _util_getDefault_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_127988__(/*! ./../util/getDefault.js */ "./util/getDefault.js");

/**
 * Set the {@link https://www.w3.org/TR/2dcontext/#shadows|shadow} properties of the context.
 * Each property is set on the context object if defined, otherwise a default value is set.
 *
 * @public
 * @method setShadow
 * @memberof Drawing
 *
 * @param {CanvasRenderingContext2D} context - Context to apply shadow options on
 * @param {Object}  [options={}] - Options object
 * @param {Boolean} [options.shadow=undefined] - Whether to set any shadow options
 * @param {String}  [options.shadowColor=#000000] - Default value: #000000
 * @param {Number}  [options.shadowBlur=0] - Default Value: 0
 * @param {Number}  [options.shadowOffsetX=1] - Default value: 1
 * @param {Number}  [options.shadowOffsetY=1] - Default value: 1
 * @returns {undefined}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (context) {
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};

  if (options.shadow) {
    context.shadowColor = Object(_util_getDefault_js__WEBPACK_IMPORTED_MODULE_0__["default"])(options.shadowColor, '#000000');
    context.shadowBlur = Object(_util_getDefault_js__WEBPACK_IMPORTED_MODULE_0__["default"])(options.shadowBlur, 0);
    context.shadowOffsetX = Object(_util_getDefault_js__WEBPACK_IMPORTED_MODULE_0__["default"])(options.shadowOffsetX, 1);
    context.shadowOffsetY = Object(_util_getDefault_js__WEBPACK_IMPORTED_MODULE_0__["default"])(options.shadowOffsetY, 1);
  }
});

/***/ }),

/***/ "./drawing/transformCanvasContext.js":
/*!*******************************************!*\
  !*** ./drawing/transformCanvasContext.js ***!
  \*******************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_129959__) {

"use strict";
__nested_webpack_require_129959__.r(__nested_webpack_exports__);
/**
 * Transform the canvas {@link CanvasRenderingContext2D|context} such that it
 * coincides with the orientation of the viewport.
 *
 * @public
 * @function transformCanvasContext
 * @memberof Drawing
 *
 * @param {CanvasRenderingContext2D} context - Context you wish to transform.
 * @param {HTMLCanvasElement} canvas - Canvas the context relates to.
 * @param {*} viewport - The viewport you wish to map on to.
 * @returns {void}
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (context, canvas, viewport) {
  if (!(viewport.hflip || viewport.vflip || viewport.rotation)) {
    return;
  }

  var translation = {
    x: canvas.width / 2 + viewport.translation.x * viewport.scale,
    y: canvas.height / 2 + viewport.translation.y * viewport.scale
  };
  context.translate(translation.x, translation.y);

  if (viewport.rotation) {
    context.rotate(viewport.rotation * Math.PI / 180);
  }

  if (viewport.vflip) {
    context.scale(1, -1);
  }

  if (viewport.hflip) {
    context.scale(-1, 1);
  }

  context.translate(-translation.x, -translation.y);
});

/***/ }),

/***/ "./eventDispatchers/imageRenderedEventDispatcher.js":
/*!**********************************************************!*\
  !*** ./eventDispatchers/imageRenderedEventDispatcher.js ***!
  \**********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_131473__) {

"use strict";
__nested_webpack_require_131473__.r(__nested_webpack_exports__);
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_131473__(/*! ./../store/index.js */ "./store/index.js");
/* harmony import */ var _stateManagement_toolState__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_131473__(/*! ../stateManagement/toolState */ "./stateManagement/toolState.js");
/* harmony import */ var _eventListeners_onImageRenderedBrushEventHandler_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_131473__(/*! ../eventListeners/onImageRenderedBrushEventHandler.js */ "./eventListeners/onImageRenderedBrushEventHandler.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_131473__(/*! ./../externalModules.js */ "./externalModules.js");




var segmentationModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_0__["getModule"])('segmentation');

var onImageRendered = function onImageRendered(evt) {
  var eventData = evt.detail;
  var element = eventData.element; // Render Annotation Tools

  var toolsToRender = _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].tools.filter(function (tool) {
    return tool.element === element && (tool.mode === 'active' || tool.mode === 'passive' || tool.mode === 'enabled');
  }); // Must be using stacks in order to use segmentation tools.

  var stackToolState = Object(_stateManagement_toolState__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack');
  var segmentationConfiguration = segmentationModule.configuration;

  if (stackToolState && (segmentationConfiguration.renderFill || segmentationConfiguration.renderOutline)) {
    Object(_eventListeners_onImageRenderedBrushEventHandler_js__WEBPACK_IMPORTED_MODULE_2__["default"])(evt);
  }

  var context = eventData.canvasContext.canvas.getContext('2d');
  toolsToRender.forEach(function (tool) {
    if (tool.renderToolData) {
      context.save();
      tool.renderToolData(evt);
      context.restore();
    }
  });
};

var enable = function enable(element) {
  element.addEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.EVENTS.IMAGE_RENDERED, onImageRendered);
};

var disable = function disable(element) {
  element.removeEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.EVENTS.IMAGE_RENDERED, onImageRendered);
};

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  enable: enable,
  disable: disable
});

/***/ }),

/***/ "./eventDispatchers/index.js":
/*!***********************************!*\
  !*** ./eventDispatchers/index.js ***!
  \***********************************/
/*! exports provided: imageRenderedEventDispatcher, mouseToolEventDispatcher, newImageEventDispatcher, touchToolEventDispatcher */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_134294__) {

"use strict";
__nested_webpack_require_134294__.r(__nested_webpack_exports__);
/* harmony import */ var _imageRenderedEventDispatcher_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_134294__(/*! ./imageRenderedEventDispatcher.js */ "./eventDispatchers/imageRenderedEventDispatcher.js");
/* harmony reexport (safe) */ __nested_webpack_require_134294__.d(__nested_webpack_exports__, "imageRenderedEventDispatcher", function() { return _imageRenderedEventDispatcher_js__WEBPACK_IMPORTED_MODULE_0__["default"]; });

/* harmony import */ var _mouseToolEventDispatcher_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_134294__(/*! ./mouseToolEventDispatcher.js */ "./eventDispatchers/mouseToolEventDispatcher.js");
/* harmony reexport (safe) */ __nested_webpack_require_134294__.d(__nested_webpack_exports__, "mouseToolEventDispatcher", function() { return _mouseToolEventDispatcher_js__WEBPACK_IMPORTED_MODULE_1__["default"]; });

/* harmony import */ var _newImageEventDispatcher_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_134294__(/*! ./newImageEventDispatcher.js */ "./eventDispatchers/newImageEventDispatcher.js");
/* harmony reexport (safe) */ __nested_webpack_require_134294__.d(__nested_webpack_exports__, "newImageEventDispatcher", function() { return _newImageEventDispatcher_js__WEBPACK_IMPORTED_MODULE_2__["default"]; });

/* harmony import */ var _touchToolEventDispatcher_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_134294__(/*! ./touchToolEventDispatcher.js */ "./eventDispatchers/touchToolEventDispatcher.js");
/* harmony reexport (safe) */ __nested_webpack_require_134294__.d(__nested_webpack_exports__, "touchToolEventDispatcher", function() { return _touchToolEventDispatcher_js__WEBPACK_IMPORTED_MODULE_3__["default"]; });







/***/ }),

/***/ "./eventDispatchers/mouseEventHandlers/addNewMeasurement.js":
/*!******************************************************************!*\
  !*** ./eventDispatchers/mouseEventHandlers/addNewMeasurement.js ***!
  \******************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_136325__) {

"use strict";
__nested_webpack_require_136325__.r(__nested_webpack_exports__);
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_136325__(/*! ../../events.js */ "./events.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_136325__(/*! ../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_136325__(/*! ../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_136325__(/*! ../../manipulators/index.js */ "./manipulators/index.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_136325__(/*! ../../util/logger.js */ "./util/logger.js");
/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_136325__(/*! ../../util/triggerEvent.js */ "./util/triggerEvent.js");






var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_4__["getLogger"])('eventDispatchers:mouseEventHandlers');
/* harmony default export */ __nested_webpack_exports__["default"] = (function (evt, tool) {
  logger.log('addNewMeasurement');
  evt.preventDefault();
  evt.stopPropagation();
  var eventData = evt.detail;
  var element = eventData.element;
  var measurementData = tool.createNewMeasurement(eventData);

  if (!measurementData) {
    return;
  }

  Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["addToolState"])(element, tool.name, measurementData);
  _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);
  var handleMover = Object.keys(measurementData.handles).length === 1 ? _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["moveHandle"] : _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["moveNewHandle"];
  var timestamp = new Date().getTime();
  handleMover(eventData, tool.name, measurementData, measurementData.handles.end, tool.options, 'mouse', function (success) {
    if (measurementData.cancelled) {
      return;
    }

    var hasThreshold = tool.configuration && Object(tool.configuration).hasOwnProperty('measurementCreationThreshold');
    var isTooFast = hasThreshold ? new Date().getTime() - timestamp < tool.configuration.measurementCreationThreshold : false;

    if (success && isTooFast === false) {
      var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MEASUREMENT_COMPLETED;
      var _eventData = {
        toolName: tool.name,
        toolType: tool.name,
        // Deprecation notice: toolType will be replaced by toolName
        element: element,
        measurementData: measurementData
      };
      Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element, eventType, _eventData);
    } else {
      Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["removeToolState"])(element, tool.name, measurementData);
    }
  });
});

/***/ }),

/***/ "./eventDispatchers/mouseEventHandlers/index.js":
/*!******************************************************!*\
  !*** ./eventDispatchers/mouseEventHandlers/index.js ***!
  \******************************************************/
/*! exports provided: mouseClick, mouseDown, mouseDownActivate, mouseDoubleClick, mouseDrag, mouseMove, mouseUp, mouseWheel */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_139751__) {

"use strict";
__nested_webpack_require_139751__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_139751__.d(__nested_webpack_exports__, "mouseClick", function() { return mouseClick; });
/* harmony export (binding) */ __nested_webpack_require_139751__.d(__nested_webpack_exports__, "mouseDoubleClick", function() { return mouseDoubleClick; });
/* harmony export (binding) */ __nested_webpack_require_139751__.d(__nested_webpack_exports__, "mouseUp", function() { return mouseUp; });
/* harmony export (binding) */ __nested_webpack_require_139751__.d(__nested_webpack_exports__, "mouseWheel", function() { return mouseWheel; });
/* harmony import */ var _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_139751__(/*! ./../shared/customCallbackHandler.js */ "./eventDispatchers/shared/customCallbackHandler.js");
/* harmony import */ var _mouseDown_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_139751__(/*! ./mouseDown.js */ "./eventDispatchers/mouseEventHandlers/mouseDown.js");
/* harmony reexport (safe) */ __nested_webpack_require_139751__.d(__nested_webpack_exports__, "mouseDown", function() { return _mouseDown_js__WEBPACK_IMPORTED_MODULE_1__["default"]; });

/* harmony import */ var _mouseDownActivate_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_139751__(/*! ./mouseDownActivate.js */ "./eventDispatchers/mouseEventHandlers/mouseDownActivate.js");
/* harmony reexport (safe) */ __nested_webpack_require_139751__.d(__nested_webpack_exports__, "mouseDownActivate", function() { return _mouseDownActivate_js__WEBPACK_IMPORTED_MODULE_2__["default"]; });

/* harmony import */ var _mouseDrag_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_139751__(/*! ./mouseDrag.js */ "./eventDispatchers/mouseEventHandlers/mouseDrag.js");
/* harmony reexport (safe) */ __nested_webpack_require_139751__.d(__nested_webpack_exports__, "mouseDrag", function() { return _mouseDrag_js__WEBPACK_IMPORTED_MODULE_3__["default"]; });

/* harmony import */ var _mouseMove_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_139751__(/*! ./mouseMove.js */ "./eventDispatchers/mouseEventHandlers/mouseMove.js");
/* harmony reexport (safe) */ __nested_webpack_require_139751__.d(__nested_webpack_exports__, "mouseMove", function() { return _mouseMove_js__WEBPACK_IMPORTED_MODULE_4__["default"]; });






var mouseClick = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'Mouse', 'mouseClickCallback');
var mouseDoubleClick = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'Mouse', 'doubleClickCallback');
var mouseUp = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'Mouse', 'mouseUpCallback');
var mouseWheel = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'MouseWheel', 'mouseWheelCallback');


/***/ }),

/***/ "./eventDispatchers/mouseEventHandlers/mouseDown.js":
/*!**********************************************************!*\
  !*** ./eventDispatchers/mouseEventHandlers/mouseDown.js ***!
  \**********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_142800__) {

"use strict";
__nested_webpack_require_142800__.r(__nested_webpack_exports__);
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_142800__(/*! ./../../store/index.js */ "./store/index.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_142800__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _store_getToolsWithMoveableHandles_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_142800__(/*! ../../store/getToolsWithMoveableHandles.js */ "./store/getToolsWithMoveableHandles.js");
/* harmony import */ var _util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_142800__(/*! ../../util/findAndMoveHelpers.js */ "./util/findAndMoveHelpers.js");
/* harmony import */ var _store_getInteractiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_142800__(/*! ./../../store/getInteractiveToolsForElement.js */ "./store/getInteractiveToolsForElement.js");
/* harmony import */ var _store_getToolsWithDataForElement_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_142800__(/*! ./../../store/getToolsWithDataForElement.js */ "./store/getToolsWithDataForElement.js");
/* harmony import */ var _store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_142800__(/*! ./../../store/filterToolsUsableWithMultiPartTools.js */ "./store/filterToolsUsableWithMultiPartTools.js");
// State

 // Util






/**
 * MouseDown is called before MouseDownActivate. If MouseDown
 * finds an existing tool to interact with, it can prevent the
 * event from bubbling to MouseDownActivate.
 *
 * @private
 * @param {mousedown} evt
 * @listens {CornerstoneTools.event:cornerstonetoolsmousedown}
 * @returns {undefined}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (evt) {
  if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isToolLocked) {
    return;
  }

  var eventData = evt.detail;
  var element = evt.detail.element;
  var coords = evt.detail.currentPoints.canvas; // High level filtering

  var activeAndPassiveTools = Object(_store_getInteractiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, _store_index_js__WEBPACK_IMPORTED_MODULE_0__["getters"].mouseTools()); // ACTIVE TOOL W/ PRE CALLBACK?
  // Note: In theory, this should only ever be a single tool.

  var activeTools = activeAndPassiveTools.filter(function (tool) {
    return tool.mode === 'active' && Array.isArray(tool.options.mouseButtonMask) && tool.options.mouseButtonMask.includes(eventData.buttons) && tool.options.isMouseActive;
  });

  if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isMultiPartToolActive) {
    activeTools = Object(_store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_6__["default"])(activeTools);
  } // If any tools are active, check if they have a special reason for dealing with the event.


  if (activeTools.length > 0) {
    // TODO: If length > 1, you could assess fitness and select the ideal tool
    // TODO: But because we're locking this to 'active' tools, that should rarely be an issue
    // Super-Meta-TODO: ^ I think we should just take the approach of one active tool per mouse button?
    var firstActiveToolWithCallback = activeTools.find(function (tool) {
      return typeof tool.preMouseDownCallback === 'function';
    });

    if (firstActiveToolWithCallback) {
      var consumedEvent = firstActiveToolWithCallback.preMouseDownCallback(evt);

      if (consumedEvent) {
        return;
      }
    }
  }

  if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isMultiPartToolActive) {
    // Don't fire events to Annotation Tools during a multi part loop.
    return;
  } // Annotation tool specific


  var annotationTools = Object(_store_getToolsWithDataForElement_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element, activeAndPassiveTools); // NEAR HANDLES?

  var annotationToolsWithMoveableHandles = Object(_store_getToolsWithMoveableHandles_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element, annotationTools, coords, 'mouse');

  if (annotationToolsWithMoveableHandles.length > 0) {
    var firstToolWithMoveableHandles = annotationToolsWithMoveableHandles[0];
    var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, firstToolWithMoveableHandles.name);

    var _findHandleDataNearIm = Object(_util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_3__["findHandleDataNearImagePoint"])(element, toolState, firstToolWithMoveableHandles.name, coords),
        handle = _findHandleDataNearIm.handle,
        data = _findHandleDataNearIm.data;

    firstToolWithMoveableHandles.handleSelectedCallback(evt, data, handle, 'mouse');
    return;
  } // NEAR TOOL?


  var annotationToolsWithPointNearClick = activeAndPassiveTools.filter(function (tool) {
    var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, tool.name);
    var isNearPoint = toolState && toolState.data && tool.pointNearTool && toolState.data.some(function (data) {
      return tool.pointNearTool(element, data, coords, 'mouse');
    });
    return isNearPoint;
  });

  if (annotationToolsWithPointNearClick.length > 0) {
    var firstToolNearPoint = annotationToolsWithPointNearClick[0];

    var _toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, firstToolNearPoint.name);

    var firstAnnotationNearPoint = _toolState.data.find(function (data) {
      return firstToolNearPoint.pointNearTool(element, data, coords);
    });

    firstToolNearPoint.toolSelectedCallback(evt, firstAnnotationNearPoint, 'mouse');
    return;
  } // ACTIVE TOOL W/ POST CALLBACK?
  // If any tools are active, check if they have a special reason for dealing with the event.


  if (activeTools.length > 0) {
    // TODO: If length > 1, you could assess fitness and select the ideal tool
    // TODO: But because we're locking this to 'active' tools, that should rarely be an issue
    // Super-Meta-TODO: ^ I think we should just take the approach of one active tool per mouse button?
    var _firstActiveToolWithCallback = activeTools.find(function (tool) {
      return typeof tool.postMouseDownCallback === 'function';
    });

    if (_firstActiveToolWithCallback) {
      var _consumedEvent = _firstActiveToolWithCallback.postMouseDownCallback(evt);

      if (_consumedEvent) {
        return;
      }
    }
  }
});

/***/ }),

/***/ "./eventDispatchers/mouseEventHandlers/mouseDownActivate.js":
/*!******************************************************************!*\
  !*** ./eventDispatchers/mouseEventHandlers/mouseDownActivate.js ***!
  \******************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_149689__) {

"use strict";
__nested_webpack_require_149689__.r(__nested_webpack_exports__);
/* harmony import */ var _addNewMeasurement_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_149689__(/*! ./addNewMeasurement.js */ "./eventDispatchers/mouseEventHandlers/addNewMeasurement.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_149689__(/*! ./../../store/index.js */ "./store/index.js");
/* harmony import */ var _tools_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_149689__(/*! ./../../tools/base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _util_getActiveTool__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_149689__(/*! ../../util/getActiveTool */ "./util/getActiveTool.js");




/* harmony default export */ __nested_webpack_exports__["default"] = (function (evt) {
  if (_store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isToolLocked) {
    return;
  }

  var _evt$detail = evt.detail,
      element = _evt$detail.element,
      buttons = _evt$detail.buttons;
  var activeTool = Object(_util_getActiveTool__WEBPACK_IMPORTED_MODULE_3__["default"])(element, buttons, 'mouse');

  if (!activeTool) {
    return;
  }

  if (typeof activeTool.preMouseDownActivateCallback === 'function') {
    var consumedEvent = activeTool.preMouseDownActivateCallback(evt);

    if (consumedEvent) {
      return;
    }
  }

  if (_store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isMultiPartToolActive) {
    return;
  } // Note: custom `addNewMeasurement` will need to prevent event bubbling


  if (activeTool.addNewMeasurement) {
    activeTool.addNewMeasurement(evt, 'mouse');
  } else if (activeTool instanceof _tools_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_2__["default"]) {
    Object(_addNewMeasurement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(evt, activeTool);
  }
});

/***/ }),

/***/ "./eventDispatchers/mouseEventHandlers/mouseDrag.js":
/*!**********************************************************!*\
  !*** ./eventDispatchers/mouseEventHandlers/mouseDrag.js ***!
  \**********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_151901__) {

"use strict";
__nested_webpack_require_151901__.r(__nested_webpack_exports__);
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_151901__(/*! ./../../store/index.js */ "./store/index.js");
/* harmony import */ var _store_getActiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_151901__(/*! ./../../store/getActiveToolsForElement.js */ "./store/getActiveToolsForElement.js");
/* harmony import */ var _store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_151901__(/*! ./../../store/filterToolsUsableWithMultiPartTools.js */ "./store/filterToolsUsableWithMultiPartTools.js");


 // Tools like wwwc. Non-annotation tools w/ specific
// Down + mouse behavior
// TODO: I don't like filtering in drag because it's such
// A high frequency event. Anything we can do to reduce
// Repeat math here would be a big help

/* harmony default export */ __nested_webpack_exports__["default"] = (function (evt) {
  if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isToolLocked) {
    return;
  }

  var tools;
  var eventData = evt.detail;
  var element = eventData.element; // Filter out disabled, enabled, and passive

  tools = Object(_store_getActiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, _store_index_js__WEBPACK_IMPORTED_MODULE_0__["getters"].mouseTools());
  tools = tools.filter(function (tool) {
    return Array.isArray(tool.options.mouseButtonMask) && tool.options.mouseButtonMask.includes(eventData.buttons) && tool.options.isMouseActive;
  });
  tools = tools.filter(function (tool) {
    return typeof tool.mouseDragCallback === 'function';
  });

  if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isMultiPartToolActive) {
    tools = Object(_store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_2__["default"])(tools);
  }

  if (tools.length === 0) {
    return;
  }

  var activeTool = tools[0];
  activeTool.mouseDragCallback(evt);
});

/***/ }),

/***/ "./eventDispatchers/mouseEventHandlers/mouseMove.js":
/*!**********************************************************!*\
  !*** ./eventDispatchers/mouseEventHandlers/mouseMove.js ***!
  \**********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_154223__) {

"use strict";
__nested_webpack_require_154223__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_154223__(/*! ./../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_154223__(/*! ./../../store/index.js */ "./store/index.js");
/* harmony import */ var _store_getInteractiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_154223__(/*! ./../../store/getInteractiveToolsForElement.js */ "./store/getInteractiveToolsForElement.js");
/* harmony import */ var _store_getToolsWithDataForElement_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_154223__(/*! ./../../store/getToolsWithDataForElement.js */ "./store/getToolsWithDataForElement.js");
 // State




/**
 * This is mostly used to update the [un]hover state
 * of a tool.
 *
 * @private
 * @param {*} evt
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (evt) {
  if (_store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isToolLocked || _store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isMultiPartToolActive) {
    return;
  }

  var tools;
  var _evt$detail = evt.detail,
      element = _evt$detail.element,
      currentPoints = _evt$detail.currentPoints; // Set the mouse position incase any tool needs it.

  _store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].mousePositionImage = currentPoints.image; // TODO: instead of filtering these for every interaction, we can change our
  // TODO: State's structure to always know these values.
  // Filter out disabled and enabled

  tools = Object(_store_getInteractiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element, _store_index_js__WEBPACK_IMPORTED_MODULE_1__["getters"].mouseTools());
  var activeTools = tools.filter(function (tool) {
    return tool.mode === 'active' && tool.options.isMouseActive;
  });
  var imageNeedsUpdate = false; // If any tools are active, check if they have a canvas cursor, and if so update image.

  if (activeTools.length > 0) {
    imageNeedsUpdate = activeTools.some(function (tool) {
      return tool.updateOnMouseMove;
    });
  }

  tools = Object(_store_getToolsWithDataForElement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, tools); // Iterate over each tool, and each tool's data
  // Activate any handles we're hovering over, or whole tools if we're near the tool
  // If we've changed the state of anything, redrawn the image

  for (var t = 0; t < tools.length; t++) {
    var tool = tools[t];

    if (typeof tool.mouseMoveCallback === 'function') {
      imageNeedsUpdate = tool.mouseMoveCallback(evt) || imageNeedsUpdate;
    }
  } // Tool data activation status changed, redraw the image


  if (imageNeedsUpdate === true) {
    _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element);
  }
});

/***/ }),

/***/ "./eventDispatchers/mouseToolEventDispatcher.js":
/*!******************************************************!*\
  !*** ./eventDispatchers/mouseToolEventDispatcher.js ***!
  \******************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_157477__) {

"use strict";
__nested_webpack_require_157477__.r(__nested_webpack_exports__);
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_157477__(/*! ./../events.js */ "./events.js");
/* harmony import */ var _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_157477__(/*! ./mouseEventHandlers/index.js */ "./eventDispatchers/mouseEventHandlers/index.js");


/**
 * These listeners are emitted in order, and can be cancelled/prevented from bubbling
 * by any previous event.
 * - mouseMove: used to update the [un]hover state of a tool (highlighting)
 * - mouseDown: check to see if we are close to an existing annotation, grab it
 * - mouseDownActivate: createNewMeasurement (usually)
 * - mouseDrag: update measurement or apply strategy (wwwc)
 * - mouseDoubleClick: usually a one-time apply specialty action
 * - onImageRendered: redraw visible tool data
 * @private
 * @param {*} element
 * @returns {undefined}
 */

var enable = function enable(element) {
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_CLICK, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseClick"]);
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOWN, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseDown"]);
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOWN_ACTIVATE, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseDownActivate"]);
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOUBLE_CLICK, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseDoubleClick"]);
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DRAG, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseDrag"]);
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_MOVE, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseMove"]);
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_UP, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseUp"]);
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_WHEEL, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseWheel"]);
};

var disable = function disable(element) {
  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_CLICK, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseClick"]);
  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOWN, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseDown"]);
  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOWN_ACTIVATE, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseDownActivate"]);
  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOUBLE_CLICK, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseDoubleClick"]);
  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DRAG, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseDrag"]);
  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_MOVE, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseMove"]);
  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_UP, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseUp"]);
  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_WHEEL, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseWheel"]);
};

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  enable: enable,
  disable: disable
});

/***/ }),

/***/ "./eventDispatchers/newImageEventDispatcher.js":
/*!*****************************************************!*\
  !*** ./eventDispatchers/newImageEventDispatcher.js ***!
  \*****************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_161654__) {

"use strict";
__nested_webpack_require_161654__.r(__nested_webpack_exports__);
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_161654__(/*! ./../store/index.js */ "./store/index.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_161654__(/*! ./../externalModules.js */ "./externalModules.js");



var onNewImage = function onNewImage(evt) {
  if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isToolLocked) {
    return false;
  }

  var element = evt.detail.element;
  var tools = _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].tools.filter(function (tool) {
    return tool.element === element && (tool.mode === 'active' || tool.mode === 'passive' || tool.mode === 'enabled');
  });

  if (tools.length === 0) {
    return false;
  }

  tools.forEach(function (tool) {
    if (tool.newImageCallback) {
      tool.newImageCallback(evt);
    }
  });
};

var enable = function enable(element) {
  element.addEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.EVENTS.NEW_IMAGE, onNewImage);
};

var disable = function disable(element) {
  element.removeEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.EVENTS.NEW_IMAGE, onNewImage);
};

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  enable: enable,
  disable: disable
});

/***/ }),

/***/ "./eventDispatchers/shared/customCallbackHandler.js":
/*!**********************************************************!*\
  !*** ./eventDispatchers/shared/customCallbackHandler.js ***!
  \**********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_163403__) {

"use strict";
__nested_webpack_require_163403__.r(__nested_webpack_exports__);
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_163403__(/*! ./../../store/index.js */ "./store/index.js");
/* harmony import */ var _store_getActiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_163403__(/*! ./../../store/getActiveToolsForElement.js */ "./store/getActiveToolsForElement.js");
/* harmony import */ var _store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_163403__(/*! ./../../store/filterToolsUsableWithMultiPartTools.js */ "./store/filterToolsUsableWithMultiPartTools.js");



/* harmony default export */ __nested_webpack_exports__["default"] = (function (handlerType, customFunction, evt) {
  if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isToolLocked) {
    return false;
  } // TODO: We sometimes see a null detail for TOUCH_PRESS


  var element = evt.detail.element;
  var tools = _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].tools.filter(function (tool) {
    return tool.supportedInteractionTypes.includes(handlerType);
  }); // Tool is active, and specific callback is active

  tools = Object(_store_getActiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, tools, handlerType); // Tool has expected callback custom function

  tools = tools.filter(function (tool) {
    return typeof tool[customFunction] === 'function';
  });

  if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isMultiPartToolActive) {
    tools = Object(_store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_2__["default"])(tools);
  }

  if (tools.length === 0) {
    return false;
  }

  tools[0][customFunction](evt);
});

/***/ }),

/***/ "./eventDispatchers/touchEventHandlers/addNewMeasurement.js":
/*!******************************************************************!*\
  !*** ./eventDispatchers/touchEventHandlers/addNewMeasurement.js ***!
  \******************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_165525__) {

"use strict";
__nested_webpack_require_165525__.r(__nested_webpack_exports__);
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_165525__(/*! ../../events.js */ "./events.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_165525__(/*! ../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_165525__(/*! ../../store/index.js */ "./store/index.js");
/* harmony import */ var _manipulators_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_165525__(/*! ./../../manipulators/anyHandlesOutsideImage.js */ "./manipulators/anyHandlesOutsideImage.js");
/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_165525__(/*! ../../manipulators/index.js */ "./manipulators/index.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_165525__(/*! ../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_165525__(/*! ../../util/triggerEvent.js */ "./util/triggerEvent.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_165525__(/*! ../../util/logger.js */ "./util/logger.js");








var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_7__["getLogger"])('eventDispatchers:touchEventHandlers');
/* harmony default export */ __nested_webpack_exports__["default"] = (function (evt, tool) {
  logger.log('addNewMeasurement');
  evt.preventDefault();
  evt.stopPropagation();
  var touchEventData = evt.detail;
  var element = touchEventData.element;
  var measurementData = tool.createNewMeasurement(touchEventData);

  if (!measurementData) {
    return;
  }

  Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_5__["addToolState"])(element, tool.name, measurementData); // Todo: Looks like we're handling the "up" of the tap?

  if (Object.keys(measurementData.handles).length === 1 && touchEventData.type === _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TAP) {
    // Todo: bold assumptions about measurement data for all tools?
    measurementData.active = false;
    measurementData.handles.end.active = false;
    measurementData.handles.end.highlight = false;
    measurementData.invalidated = true;
    var deleteIfHandleOutsideImage = _store_index_js__WEBPACK_IMPORTED_MODULE_2__["state"].deleteIfHandleOutsideImage || tool.options.deleteIfHandleOutsideImage;

    if (deleteIfHandleOutsideImage && Object(_manipulators_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_3__["default"])(touchEventData, measurementData.handles)) {
      // Delete the measurement
      Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_5__["removeToolState"])(element, tool.name, measurementData);
    }

    _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);
    return;
  }

  _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);
  Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_4__["moveNewHandle"])(touchEventData, tool.name, measurementData, measurementData.handles.end, tool.options, 'touch', function () {
    var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MEASUREMENT_COMPLETED;
    var eventData = {
      toolName: tool.name,
      toolType: tool.name,
      // Deprecation notice: toolType will be replaced by toolName
      element: element,
      measurementData: measurementData
    };
    Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element, eventType, eventData);
  });
});

/***/ }),

/***/ "./eventDispatchers/touchEventHandlers/index.js":
/*!******************************************************!*\
  !*** ./eventDispatchers/touchEventHandlers/index.js ***!
  \******************************************************/
/*! exports provided: doubleTap, multiTouchDrag, tap, touchDrag, touchEnd, touchPinch, touchPress, touchRotate, touchStart, touchStartActive */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_169695__) {

"use strict";
__nested_webpack_require_169695__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_169695__.d(__nested_webpack_exports__, "doubleTap", function() { return doubleTap; });
/* harmony export (binding) */ __nested_webpack_require_169695__.d(__nested_webpack_exports__, "touchDrag", function() { return touchDrag; });
/* harmony export (binding) */ __nested_webpack_require_169695__.d(__nested_webpack_exports__, "touchEnd", function() { return touchEnd; });
/* harmony export (binding) */ __nested_webpack_require_169695__.d(__nested_webpack_exports__, "touchPinch", function() { return touchPinch; });
/* harmony export (binding) */ __nested_webpack_require_169695__.d(__nested_webpack_exports__, "touchPress", function() { return touchPress; });
/* harmony export (binding) */ __nested_webpack_require_169695__.d(__nested_webpack_exports__, "touchRotate", function() { return touchRotate; });
/* harmony import */ var _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_169695__(/*! ./../shared/customCallbackHandler.js */ "./eventDispatchers/shared/customCallbackHandler.js");
/* harmony import */ var _multiTouchDrag_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_169695__(/*! ./multiTouchDrag.js */ "./eventDispatchers/touchEventHandlers/multiTouchDrag.js");
/* harmony reexport (safe) */ __nested_webpack_require_169695__.d(__nested_webpack_exports__, "multiTouchDrag", function() { return _multiTouchDrag_js__WEBPACK_IMPORTED_MODULE_1__["default"]; });

/* harmony import */ var _tap_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_169695__(/*! ./tap.js */ "./eventDispatchers/touchEventHandlers/tap.js");
/* harmony reexport (safe) */ __nested_webpack_require_169695__.d(__nested_webpack_exports__, "tap", function() { return _tap_js__WEBPACK_IMPORTED_MODULE_2__["default"]; });

/* harmony import */ var _touchStart_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_169695__(/*! ./touchStart.js */ "./eventDispatchers/touchEventHandlers/touchStart.js");
/* harmony reexport (safe) */ __nested_webpack_require_169695__.d(__nested_webpack_exports__, "touchStart", function() { return _touchStart_js__WEBPACK_IMPORTED_MODULE_3__["default"]; });

/* harmony import */ var _touchStartActive_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_169695__(/*! ./touchStartActive.js */ "./eventDispatchers/touchEventHandlers/touchStartActive.js");
/* harmony reexport (safe) */ __nested_webpack_require_169695__.d(__nested_webpack_exports__, "touchStartActive", function() { return _touchStartActive_js__WEBPACK_IMPORTED_MODULE_4__["default"]; });






var doubleTap = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'DoubleTap', 'doubleTapCallback'); // TODO: some touchDrag tools don't want to fire on touchStart
// TODO: Drag tools have an option `fireOnTouchStart` used to filter
// TODO: Them out of TOUCH_START handler

var touchDrag = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'Touch', 'touchDragCallback');
var touchEnd = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'Touch', 'touchEndCallback');
var touchPinch = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'TouchPinch', 'touchPinchCallback');
var touchPress = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'Touch', 'touchPressCallback');
var touchRotate = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'TouchRotate', 'touchRotateCallback');


/***/ }),

/***/ "./eventDispatchers/touchEventHandlers/multiTouchDrag.js":
/*!***************************************************************!*\
  !*** ./eventDispatchers/touchEventHandlers/multiTouchDrag.js ***!
  \***************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_173438__) {

"use strict";
__nested_webpack_require_173438__.r(__nested_webpack_exports__);
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_173438__(/*! ../../store/index.js */ "./store/index.js");
/* harmony import */ var _store_getActiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_173438__(/*! ../../store/getActiveToolsForElement.js */ "./store/getActiveToolsForElement.js");
/* harmony import */ var _store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_173438__(/*! ./../../store/filterToolsUsableWithMultiPartTools.js */ "./store/filterToolsUsableWithMultiPartTools.js");



/* harmony default export */ __nested_webpack_exports__["default"] = (function (evt) {
  if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isToolLocked) {
    return false;
  } // TODO: We sometimes see a null detail for TOUCH_PRESS


  var _evt$detail = evt.detail,
      element = _evt$detail.element,
      numPointers = _evt$detail.numPointers;
  var tools = _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].tools.filter(function (tool) {
    return tool.supportedInteractionTypes.includes('MultiTouch');
  }); // Tool is active, and specific callback is active

  tools = Object(_store_getActiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, tools, 'MultiTouch'); // Tool has expected callback custom function

  tools = tools.filter(function (tool) {
    return typeof tool.multiTouchDragCallback === 'function' && numPointers === tool.configuration.touchPointers;
  });

  if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isMultiPartToolActive) {
    tools = Object(_store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_2__["default"])(tools);
  }

  if (tools.length === 0) {
    return false;
  }

  var activeTool = tools[0];
  activeTool.multiTouchDragCallback(evt);
});

/***/ }),

/***/ "./eventDispatchers/touchEventHandlers/shared/deactivateAllToolInstances.js":
/*!**********************************************************************************!*\
  !*** ./eventDispatchers/touchEventHandlers/shared/deactivateAllToolInstances.js ***!
  \**********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_175768__) {

"use strict";
__nested_webpack_require_175768__.r(__nested_webpack_exports__);
/* harmony default export */ __nested_webpack_exports__["default"] = (function (toolData) {
  if (!toolData) {
    return;
  }

  for (var i = 0; i < toolData.data.length; i++) {
    var data = toolData.data[i];
    data.active = false;

    if (!data.handles) {
      continue;
    }

    deactivateAllHandles(data.handles);
  }
});

function deactivateAllHandles(handles) {
  Object.keys(handles).forEach(function (name) {
    var handle = handles[name];
    handle.active = false;
  });
}

/***/ }),

/***/ "./eventDispatchers/touchEventHandlers/tap.js":
/*!****************************************************!*\
  !*** ./eventDispatchers/touchEventHandlers/tap.js ***!
  \****************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_176652__) {

"use strict";
__nested_webpack_require_176652__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_176652__(/*! ../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _touchStartActive_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_176652__(/*! ./touchStartActive.js */ "./eventDispatchers/touchEventHandlers/touchStartActive.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_176652__(/*! ../../store/index.js */ "./store/index.js");
/* harmony import */ var _store_getActiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_176652__(/*! ../../store/getActiveToolsForElement.js */ "./store/getActiveToolsForElement.js");
/* harmony import */ var _store_getToolsWithDataForElement_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_176652__(/*! ../../store/getToolsWithDataForElement.js */ "./store/getToolsWithDataForElement.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_176652__(/*! ../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_176652__(/*! ../../manipulators/getHandleNearImagePoint.js */ "./manipulators/getHandleNearImagePoint.js");
/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_176652__(/*! ../../manipulators/index.js */ "./manipulators/index.js");
/* harmony import */ var _shared_deactivateAllToolInstances_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_176652__(/*! ./shared/deactivateAllToolInstances.js */ "./eventDispatchers/touchEventHandlers/shared/deactivateAllToolInstances.js");

 // State




 //


 //


/* harmony default export */ __nested_webpack_exports__["default"] = (function (evt) {
  if (_store_index_js__WEBPACK_IMPORTED_MODULE_2__["state"].isToolLocked || _store_index_js__WEBPACK_IMPORTED_MODULE_2__["state"].isMultiPartToolActive) {
    return;
  }

  var tools;
  var distanceFromHandle = 28;
  var element = evt.detail.element;
  var coords = evt.detail.currentPoints.canvas;
  tools = Object(_store_getActiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, _store_index_js__WEBPACK_IMPORTED_MODULE_2__["getters"].touchTools());
  tools = Object(_store_getToolsWithDataForElement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, tools); // Deactivate everything
  // DeactivateAllToolInstances(toolData);
  // Find all tools w/ handles that we are near

  var toolsWithMoveableHandles = tools.filter(function (tool) {
    var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_5__["getToolState"])(element, tool.name);

    for (var i = 0; i < toolState.data.length; i++) {
      if (Object(_manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element, toolState.data[i].handles, coords, distanceFromHandle) !== undefined) {
        return true;
      }
    }

    return false;
  }); // TODO: More than one? Which one was moved most recently?
  // We'll just grab the first one we encounter for now

  if (toolsWithMoveableHandles.length > 0) {
    // Todo: ignore: touch_start, tap
    var firstToolWithMoveableHandles = toolsWithMoveableHandles[0];
    var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_5__["getToolState"])(element, firstToolWithMoveableHandles.name);
    var moveableHandle = toolState.data.find(function (d) {
      return Object(_manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element, d.handles, coords, distanceFromHandle) !== undefined;
    });
    toolState.data.active = true;
    moveableHandle.active = true; // Why here, but not touchStart?

    _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element);
    Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_7__["moveHandle"])(evt.detail, firstToolWithMoveableHandles.name, toolState.data, moveableHandle, firstToolWithMoveableHandles.options, 'touch', function () {
      return Object(_shared_deactivateAllToolInstances_js__WEBPACK_IMPORTED_MODULE_8__["default"])(toolState);
    });
    evt.stopImmediatePropagation();
    evt.preventDefault(); // Why no stopPropagation?

    return;
  } // Find all tools near our point


  var toolsNearPoint = tools.filter(function (tool) {
    var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_5__["getToolState"])(element, tool.name);
    var isNearPoint = toolState && toolState.data && tool.pointNearTool && toolState.data.some(function (data) {
      return tool.pointNearTool(element, data, coords);
    });
    return isNearPoint;
  }); // TODO: More than one? Which one was moved most recently?
  // We'll just grab the first one we encounter for now

  if (toolsNearPoint.length > 0) {
    // Todo: Ignore: TAP, START, PRESS
    var firstToolNearPoint = toolsNearPoint[0];

    var _toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_5__["getToolState"])(element, firstToolNearPoint.name);

    var firstAnnotationNearPoint = _toolState.data.find(function (data) {
      return firstToolNearPoint.pointNearTool(element, data, coords);
    }); // Todo: ignore: touch_start, tap


    firstAnnotationNearPoint.active = true;
    _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element);
    Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_7__["moveAllHandles"])(evt.detail, firstToolNearPoint.name, firstAnnotationNearPoint, null, firstToolNearPoint.options, 'touch', function () {
      return Object(_shared_deactivateAllToolInstances_js__WEBPACK_IMPORTED_MODULE_8__["default"])(_toolState);
    });
    evt.stopImmediatePropagation();
    evt.preventDefault(); // TODO: Why no stop propagation?

    return;
  } // If there is nothing to move, add a new instance of the tool
  // Need to check here to see if activation is allowed!
  // TODO: What would this be? First active tool?
  // Or should _always_ pass through to our larger event handler that checks
  // All tools anyway?


  var allActiveTools = Object(_store_getActiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, _store_index_js__WEBPACK_IMPORTED_MODULE_2__["getters"].touchTools());

  if (allActiveTools.length > 0 && allActiveTools[0].touchStartActiveCallback) {
    allActiveTools[0].touchStartActiveCallback(evt);
  } else {
    Object(_touchStartActive_js__WEBPACK_IMPORTED_MODULE_1__["default"])(evt);
  }

  return false;
});

/***/ }),

/***/ "./eventDispatchers/touchEventHandlers/touchStart.js":
/*!***********************************************************!*\
  !*** ./eventDispatchers/touchEventHandlers/touchStart.js ***!
  \***********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_183618__) {

"use strict";
__nested_webpack_require_183618__.r(__nested_webpack_exports__);
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_183618__(/*! ../../store/index.js */ "./store/index.js");
/* harmony import */ var _util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_183618__(/*! ../../util/findAndMoveHelpers.js */ "./util/findAndMoveHelpers.js");
/* harmony import */ var _store_getToolsWithMoveableHandles_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_183618__(/*! ../../store/getToolsWithMoveableHandles.js */ "./store/getToolsWithMoveableHandles.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_183618__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _store_getInteractiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_183618__(/*! ./../../store/getInteractiveToolsForElement.js */ "./store/getInteractiveToolsForElement.js");
/* harmony import */ var _store_getToolsWithDataForElement_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_183618__(/*! ./../../store/getToolsWithDataForElement.js */ "./store/getToolsWithDataForElement.js");
/* harmony import */ var _store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_183618__(/*! ./../../store/filterToolsUsableWithMultiPartTools.js */ "./store/filterToolsUsableWithMultiPartTools.js");
// State







/* harmony default export */ __nested_webpack_exports__["default"] = (function (evt) {
  if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isToolLocked) {
    return;
  }

  var eventData = evt.detail;
  var element = eventData.element;
  var coords = eventData.startPoints.canvas;
  var activeAndPassiveTools = Object(_store_getInteractiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, _store_index_js__WEBPACK_IMPORTED_MODULE_0__["getters"].touchTools());
  var activeTools = activeAndPassiveTools.filter(function (tool) {
    return tool.mode === 'active' && tool.options.isTouchActive;
  });

  if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isMultiPartToolActive) {
    activeTools = Object(_store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_6__["default"])(activeTools);
  } // If any tools are active, check if they have a special reason for dealing with the event.


  if (activeTools.length > 0) {
    // TODO: If length > 1, you could assess fitness and select the ideal tool
    // TODO: But because we're locking this to 'active' tools, that should rarely be an issue
    // Super-Meta-TODO: ^ I think we should just take the approach of one active tool per mouse button?
    var firstActiveToolWithCallback = activeTools.find(function (tool) {
      return typeof tool.preTouchStartCallback === 'function';
    });

    if (firstActiveToolWithCallback) {
      var consumedEvent = firstActiveToolWithCallback.preTouchStartCallback(evt);

      if (consumedEvent) {
        return;
      }
    }
  }

  if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isMultiPartToolActive) {
    return;
  }

  var annotationTools = Object(_store_getToolsWithDataForElement_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element, activeAndPassiveTools); // NEAR HANDLES?

  var annotationToolsWithMoveableHandles = Object(_store_getToolsWithMoveableHandles_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element, annotationTools, coords, 'touch'); // TODO: More than one? Which one was moved most recently?
  // We'll just grab the first one we encounter for now

  if (annotationToolsWithMoveableHandles.length > 0) {
    // Todo: Ignore TAP, START, PRESS
    var firstToolWithMoveableHandles = annotationToolsWithMoveableHandles[0];
    var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, firstToolWithMoveableHandles.name);

    var _findHandleDataNearIm = Object(_util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_1__["findHandleDataNearImagePoint"])(element, toolState, firstToolWithMoveableHandles.name, coords, 'touch'),
        handle = _findHandleDataNearIm.handle,
        data = _findHandleDataNearIm.data;

    firstToolWithMoveableHandles.handleSelectedCallback(evt, data, handle, 'touch');
    return;
  } // NEAR POINT?


  var annotationToolsWithPointNearTouch = annotationTools.filter(function (tool) {
    var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, tool.name);
    var isNearPoint = toolState && toolState.data && tool.pointNearTool && toolState.data.some(function (data) {
      return tool.pointNearTool(element, data, coords, 'touch');
    });
    return isNearPoint;
  }); // TODO: More than one? Which one was moved most recently?
  // We'll just grab the first one we encounter for now

  if (annotationToolsWithPointNearTouch.length > 0) {
    // Todo: Ignore: TAP, START, PRESS
    var firstToolNearPoint = annotationToolsWithPointNearTouch[0];

    var _toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, firstToolNearPoint.name);

    var firstAnnotationNearPoint = _toolState.data.find(function (data) {
      return firstToolNearPoint.pointNearTool(element, data, coords);
    });

    firstToolNearPoint.toolSelectedCallback(evt, firstAnnotationNearPoint, 'touch');
    return;
  } // If any tools are active, check if they have a special reason for dealing with the event.


  if (activeTools.length > 0) {
    // TODO: If length > 1, you could assess fitness and select the ideal tool
    // TODO: But because we're locking this to 'active' tools, that should rarely be an issue
    // Super-Meta-TODO: ^ I think we should just take the approach of one active tool per mouse button?
    var _firstActiveToolWithCallback = activeTools.find(function (tool) {
      return typeof tool.postTouchStartCallback === 'function';
    });

    if (_firstActiveToolWithCallback) {
      var _consumedEvent = _firstActiveToolWithCallback.postTouchStartCallback(evt);

      if (_consumedEvent) {
        return;
      }
    }
  }
});

/***/ }),

/***/ "./eventDispatchers/touchEventHandlers/touchStartActive.js":
/*!*****************************************************************!*\
  !*** ./eventDispatchers/touchEventHandlers/touchStartActive.js ***!
  \*****************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_190134__) {

"use strict";
__nested_webpack_require_190134__.r(__nested_webpack_exports__);
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_190134__(/*! ./../../store/index.js */ "./store/index.js");
/* harmony import */ var _addNewMeasurement_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_190134__(/*! ./addNewMeasurement.js */ "./eventDispatchers/touchEventHandlers/addNewMeasurement.js");
/* harmony import */ var _tools_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_190134__(/*! ./../../tools/base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _util_getActiveTool__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_190134__(/*! ../../util/getActiveTool */ "./util/getActiveTool.js");
// State




/* harmony default export */ __nested_webpack_exports__["default"] = (function (evt) {
  if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isToolLocked || _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isMultiPartToolActive) {
    return;
  }

  var element = evt.detail.element;
  var activeTool = Object(_util_getActiveTool__WEBPACK_IMPORTED_MODULE_3__["default"])(element, null, 'touch'); // Note: custom `addNewMeasurement` will need to prevent event bubbling

  if (activeTool && activeTool.addNewMeasurement) {
    activeTool.addNewMeasurement(evt, 'touch');
  } else if (activeTool instanceof _tools_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_2__["default"]) {
    Object(_addNewMeasurement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(evt, activeTool);
  }
});

/***/ }),

/***/ "./eventDispatchers/touchToolEventDispatcher.js":
/*!******************************************************!*\
  !*** ./eventDispatchers/touchToolEventDispatcher.js ***!
  \******************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_192026__) {

"use strict";
__nested_webpack_require_192026__.r(__nested_webpack_exports__);
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_192026__(/*! ../events.js */ "./events.js");
/* harmony import */ var _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_192026__(/*! ./touchEventHandlers/index.js */ "./eventDispatchers/touchEventHandlers/index.js");


/**
 * These listeners are emitted in order, and can be cancelled/prevented from bubbling
 * by any previous event.
 * - tap:
 * - touchStart: check to see if we are close to an existing annotation, grab it
 * - touchDrag:
 * - touchStartActive: createNewMeasurement (usually)
 * - touchPress:
 * - touchRotate:
 * - doubleTap: usually a one-time apply specialty action
 * - touchPinch:
 * - onImageRendered: redraw visible tool data
 * @private
 * @param {*} element
 * @returns {void}
 */

var enable = function enable(element) {
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TAP, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["tap"]);
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_START, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchStart"], {
    passive: false
  });
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_DRAG, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchDrag"], {
    passive: false
  });
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_END, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchEnd"]); // Mouse equivelant is `mouse_down_activate`
  // Should the naming pattern here match?

  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_START_ACTIVE, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchStartActive"]);
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PRESS, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchPress"]);
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].DOUBLE_TAP, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["doubleTap"]);
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PINCH, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchPinch"]);
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_ROTATE, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchRotate"]);
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MULTI_TOUCH_DRAG, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["multiTouchDrag"]);
};

var disable = function disable(element) {
  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TAP, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["tap"]);
  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_START, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchStart"]);
  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_DRAG, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchDrag"]);
  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_END, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchEnd"]); // Mouse equivelant is `mouse_down_activate`
  // Should the naming pattern here match?

  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_START_ACTIVE, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchStartActive"]);
  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PRESS, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchPress"]);
  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].DOUBLE_TAP, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["doubleTap"]);
  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PINCH, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchPinch"]);
  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_ROTATE, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchRotate"]);
  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MULTI_TOUCH_DRAG, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["multiTouchDrag"]);
};

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  enable: enable,
  disable: disable
});

/***/ }),

/***/ "./eventListeners/index.js":
/*!*********************************!*\
  !*** ./eventListeners/index.js ***!
  \*********************************/
/*! exports provided: mouseEventListeners, wheelEventListener, touchEventListeners */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_196970__) {

"use strict";
__nested_webpack_require_196970__.r(__nested_webpack_exports__);
/* harmony import */ var _mouseEventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_196970__(/*! ./mouseEventListeners.js */ "./eventListeners/mouseEventListeners.js");
/* harmony reexport (safe) */ __nested_webpack_require_196970__.d(__nested_webpack_exports__, "mouseEventListeners", function() { return _mouseEventListeners_js__WEBPACK_IMPORTED_MODULE_0__["default"]; });

/* harmony import */ var _wheelEventListener_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_196970__(/*! ./wheelEventListener.js */ "./eventListeners/wheelEventListener.js");
/* harmony reexport (safe) */ __nested_webpack_require_196970__.d(__nested_webpack_exports__, "wheelEventListener", function() { return _wheelEventListener_js__WEBPACK_IMPORTED_MODULE_1__["default"]; });

/* harmony import */ var _touchEventListeners_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_196970__(/*! ./touchEventListeners.js */ "./eventListeners/touchEventListeners.js");
/* harmony reexport (safe) */ __nested_webpack_require_196970__.d(__nested_webpack_exports__, "touchEventListeners", function() { return _touchEventListeners_js__WEBPACK_IMPORTED_MODULE_2__["default"]; });






/***/ }),

/***/ "./eventListeners/internals/normalizeWheel.js":
/*!****************************************************!*\
  !*** ./eventListeners/internals/normalizeWheel.js ***!
  \****************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_198454__) {

"use strict";
__nested_webpack_require_198454__.r(__nested_webpack_exports__);
// Reasonable defaults
var PIXEL_STEP = 10;
var LINE_HEIGHT = 40;
var PAGE_HEIGHT = 800;
/**
 * Normalizes wheel events and provides properties that are more
 * consistent and helpful across different browsers
 *
 * @private
 * @function normalizeWheel
 * @param {WheelEvent} event
 * @returns {Object} { spinX, spinY, pixlX, pixelY }
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (event) {
  var spinX = 0,
      spinY = 0,
      pixelX = 0,
      pixelY = 0; // Legacy

  if ('detail' in event) {
    spinY = event.detail;
  }

  if ('wheelDelta' in event) {
    spinY = -event.wheelDelta / 120;
  }

  if ('wheelDeltaY' in event) {
    spinY = -event.wheelDeltaY / 120;
  }

  if ('wheelDeltaX' in event) {
    spinX = -event.wheelDeltaX / 120;
  }

  pixelX = spinX * PIXEL_STEP;
  pixelY = spinY * PIXEL_STEP;

  if ('deltaY' in event) {
    pixelY = event.deltaY;
  }

  if ('deltaX' in event) {
    pixelX = event.deltaX;
  }

  if ((pixelX || pixelY) && event.deltaMode) {
    if (event.deltaMode === 1) {
      // Delta in LINE units
      pixelX *= LINE_HEIGHT;
      pixelY *= LINE_HEIGHT;
    } else {
      // Delta in PAGE units
      pixelX *= PAGE_HEIGHT;
      pixelY *= PAGE_HEIGHT;
    }
  } // Fall-back if spin cannot be determined


  if (pixelX && !spinX) {
    spinX = pixelX < 1 ? -1 : 1;
  }

  if (pixelY && !spinY) {
    spinY = pixelY < 1 ? -1 : 1;
  }

  return {
    spinX: spinX,
    spinY: spinY,
    pixelX: pixelX,
    pixelY: pixelY
  };
});

/***/ }),

/***/ "./eventListeners/internals/renderSegmentation.js":
/*!********************************************************!*\
  !*** ./eventListeners/internals/renderSegmentation.js ***!
  \********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_200378__) {

"use strict";
__nested_webpack_require_200378__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_200378__.d(__nested_webpack_exports__, "default", function() { return renderSegmentation; });
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_200378__(/*! ../../store/index.js */ "./store/index.js");
/* harmony import */ var _renderSegmentationFill__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_200378__(/*! ./renderSegmentationFill */ "./eventListeners/internals/renderSegmentationFill.js");
/* harmony import */ var _renderSegmentationOutline__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_200378__(/*! ./renderSegmentationOutline */ "./eventListeners/internals/renderSegmentationOutline.js");



var segmentationModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_0__["getModule"])('segmentation');
/**
 * Renders the segmentation based on the brush configuration and
 * the active status of the labelmap.
 * @param  {Object} evt                 The cornerstone event.
 * @param  {Labelmap3D} labelmap3D  The `Labelmap3D` object.
 * @param  {number} labelmapIndex The index of the active label map.
 * @param  {Labelmap2D} labelmap2D The `Labelmap2D` object to render.
 * @param  {boolean} isActiveLabelMap Whether or not the labelmap is active.
 * @returns {null}
 */

function renderSegmentation(evt, labelmap3D, labelmapIndex, labelmap2D, isActiveLabelMap) {
  if (shouldRenderFill(isActiveLabelMap)) {
    Object(_renderSegmentationFill__WEBPACK_IMPORTED_MODULE_1__["default"])(evt, labelmap3D, labelmap2D, labelmapIndex, isActiveLabelMap);
  }

  if (shouldRenderOutline(isActiveLabelMap)) {
    Object(_renderSegmentationOutline__WEBPACK_IMPORTED_MODULE_2__["default"])(evt, labelmap3D, labelmap2D, labelmapIndex, isActiveLabelMap);
  }
}
/**
 * ShouldRenderFill - Returns true if `configuration.renderFill`
 * is true , and if the global alpha is not zero.
 *
 * @param  {boolean} isActiveLabelMap
 * @returns  {boolean} True if the segmentation should be filled.
 */

function shouldRenderFill(isActiveLabelMap) {
  var configuration = segmentationModule.configuration;
  return configuration.renderFill && (isActiveLabelMap && configuration.fillAlpha !== 0 || !isActiveLabelMap && configuration.fillAlphaInactive !== 0);
}
/**
 * ShouldRenderOutline - Returns true if `configuration.renderOutline`
 * is true , and if the global alpha is not zero.
 *
 * @param  {boolean} isActiveLabelMap
 * @returns  {boolean} True if the segmentation should be outlined.
 */


function shouldRenderOutline(isActiveLabelMap) {
  var configuration = segmentationModule.configuration;
  return configuration.renderOutline && (isActiveLabelMap && configuration.outlineAlpha !== 0 || !isActiveLabelMap && configuration.outlineAlphaInactive !== 0);
}

/***/ }),

/***/ "./eventListeners/internals/renderSegmentationFill.js":
/*!************************************************************!*\
  !*** ./eventListeners/internals/renderSegmentationFill.js ***!
  \************************************************************/
/*! exports provided: default, getLabelmapCanvas, renderFill */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_203549__) {

"use strict";
__nested_webpack_require_203549__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_203549__.d(__nested_webpack_exports__, "default", function() { return renderSegmentationFill; });
/* harmony export (binding) */ __nested_webpack_require_203549__.d(__nested_webpack_exports__, "getLabelmapCanvas", function() { return getLabelmapCanvas; });
/* harmony export (binding) */ __nested_webpack_require_203549__.d(__nested_webpack_exports__, "renderFill", function() { return renderFill; });
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_203549__(/*! ../../store/index.js */ "./store/index.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_203549__(/*! ../../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_203549__(/*! ../../externalModules */ "./externalModules.js");



var segmentationModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_0__["getModule"])('segmentation');
function renderSegmentationFill(evt, labelmap3D, labelmap2D, labelmapIndex, isActiveLabelMap) {
  var labelmapCanvas = getLabelmapCanvas(evt, labelmap3D, labelmap2D);
  renderFill(evt, labelmapCanvas, isActiveLabelMap);
}
/**
 * Generates a canvas of the `Labelmap2D` data with transparent background, to draw onto the
 * cornerstone canvas. Reduces the number of `putImageData` calls that need to be made by
 * scanning across the labelmap and painting to the canvas in chunks.
 *
 * @param {Object} evt The cornerstone event.
 * @param {Labelmap3D} labelmap3D The `Labelmap3D` object.
 * @param {Labelmap2D} labelmap2D The `Labelmap2D` object containing the pixelData to render.
 * @returns {HTMLCanvasElement}
 */

function getLabelmapCanvas(evt, labelmap3D, labelmap2D) {
  var state = segmentationModule.state;
  var eventData = evt.detail;
  var image = eventData.image;
  var cols = image.width;
  var rows = image.height;
  var segmentsHidden = labelmap3D.segmentsHidden;
  var pixelData = labelmap2D.pixelData;
  var colorLutTable = state.colorLutTables[labelmap3D.colorLUTIndex];
  var canvasElement = document.createElement('canvas');
  canvasElement.width = cols;
  canvasElement.height = rows;
  var ctx = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_1__["getNewContext"])(canvasElement); // Image data initialized with all transparent black.

  var imageData = new ImageData(cols, rows);
  var data = imageData.data;

  for (var i = 0; i < pixelData.length; i++) {
    var segmentIndex = pixelData[i];

    if (segmentIndex !== 0 && !segmentsHidden[segmentIndex]) {
      var color = colorLutTable[pixelData[i]]; // Modify ImageData.

      data[4 * i] = color[0]; // R value

      data[4 * i + 1] = color[1]; // G value

      data[4 * i + 2] = color[2]; // B value

      data[4 * i + 3] = color[3]; // A value
    }
  } // Put this image data onto the labelmapCanvas.


  ctx.putImageData(imageData, 0, 0);
  return canvasElement;
}
/**
 * Renders the filled region of each segment in the segmentation.
 * @param  {Object} evt   The cornerstone event.
 * @param  {HTMLCanvasElement} labelmapCanvas The canvas generated for the labelmap.
 * @param  {boolean} isActiveLabelMap Whether or not the labelmap is active.
 * @returns {null}
 */

function renderFill(evt, labelmapCanvas, isActiveLabelMap) {
  var configuration = segmentationModule.configuration;
  var eventData = evt.detail;
  var canvasContext = eventData.canvasContext,
      element = eventData.element,
      image = eventData.image,
      viewport = eventData.viewport;
  var previousTransform = canvasContext.getTransform();
  var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_1__["getNewContext"])(canvasContext.canvas);
  var canvasTopLeft = _externalModules__WEBPACK_IMPORTED_MODULE_2__["default"].cornerstone.pixelToCanvas(element, {
    x: 0,
    y: 0
  });
  var canvasTopRight = _externalModules__WEBPACK_IMPORTED_MODULE_2__["default"].cornerstone.pixelToCanvas(element, {
    x: image.width,
    y: 0
  });
  var canvasBottomRight = _externalModules__WEBPACK_IMPORTED_MODULE_2__["default"].cornerstone.pixelToCanvas(element, {
    x: image.width,
    y: image.height
  });
  var cornerstoneCanvasWidth = _externalModules__WEBPACK_IMPORTED_MODULE_2__["default"].cornerstoneMath.point.distance(canvasTopLeft, canvasTopRight);
  var cornerstoneCanvasHeight = _externalModules__WEBPACK_IMPORTED_MODULE_2__["default"].cornerstoneMath.point.distance(canvasTopRight, canvasBottomRight);
  var canvas = canvasContext.canvas;
  var previousImageSmoothingEnabled = context.imageSmoothingEnabled;
  var previousGlobalAlpha = context.globalAlpha;
  context.imageSmoothingEnabled = false;
  context.globalAlpha = isActiveLabelMap ? configuration.fillAlpha : configuration.fillAlphaInactive;
  Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_1__["transformCanvasContext"])(context, canvas, viewport);
  var canvasViewportTranslation = getCanvasViewportTranslation(eventData);
  context.drawImage(labelmapCanvas, canvas.width / 2 - cornerstoneCanvasWidth / 2 + canvasViewportTranslation.x, canvas.height / 2 - cornerstoneCanvasHeight / 2 + canvasViewportTranslation.y, cornerstoneCanvasWidth, cornerstoneCanvasHeight);
  context.globalAlpha = previousGlobalAlpha;
  context.imageSmoothingEnabled = previousImageSmoothingEnabled;
  context.setTransform(previousTransform);
}
/**
 * GetCanvasViewportTranslation - Returns translation coordinations for
 * canvas viewport with calculation of image row/column pixel spacing.
 *
 * @param  {Object} eventData The data associated with the event.
 * @returns  {Object} The coordinates of the translation.
 */

function getCanvasViewportTranslation(eventData) {
  var viewport = eventData.viewport,
      image = eventData.image;
  var widthScale = viewport.scale;
  var heightScale = viewport.scale;

  if (image.rowPixelSpacing < image.columnPixelSpacing) {
    widthScale *= image.columnPixelSpacing / image.rowPixelSpacing;
  } else if (image.columnPixelSpacing < image.rowPixelSpacing) {
    heightScale *= image.rowPixelSpacing / image.columnPixelSpacing;
  }

  return {
    x: viewport.translation.x * widthScale,
    y: viewport.translation.y * heightScale
  };
}

/***/ }),

/***/ "./eventListeners/internals/renderSegmentationOutline.js":
/*!***************************************************************!*\
  !*** ./eventListeners/internals/renderSegmentationOutline.js ***!
  \***************************************************************/
/*! exports provided: default, renderOutline, getOutline, _addTopRightCorner */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_210193__) {

"use strict";
__nested_webpack_require_210193__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_210193__.d(__nested_webpack_exports__, "default", function() { return renderSegmentationOutline; });
/* harmony export (binding) */ __nested_webpack_require_210193__.d(__nested_webpack_exports__, "renderOutline", function() { return renderOutline; });
/* harmony export (binding) */ __nested_webpack_require_210193__.d(__nested_webpack_exports__, "getOutline", function() { return getOutline; });
/* harmony export (binding) */ __nested_webpack_require_210193__.d(__nested_webpack_exports__, "_addTopRightCorner", function() { return _addTopRightCorner; });
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_210193__(/*! ../../store/index.js */ "./store/index.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_210193__(/*! ../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_210193__(/*! ../../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_210193__(/*! ../../index.js */ "./index.js");




var segmentationModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_0__["getModule"])('segmentation');
function renderSegmentationOutline(evt, labelmap3D, labelmap2D, labelmapIndex, isActiveLabelMap) {
  var configuration = segmentationModule.configuration;
  var outline = getOutline(evt, labelmap3D, labelmap2D, configuration.outlineWidth);
  renderOutline(evt, outline, labelmap3D.colorLUTIndex, isActiveLabelMap);
}
/**
 * RenderOutline - Renders the outlines of segments to the canvas.
 *
 * @param  {Object} evt             The cornerstone event.
 * @param  {Object} outline         The outline to render.
 * @param  {number} colorLUTIndex   The index of the colorLUT.
 * @param  {number} isActiveLabelMap   Whether the labelmap is active.
 * @returns {null}
 */

function renderOutline(evt, outline, colorLUTIndex) {
  var isActiveLabelMap = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
  var configuration = segmentationModule.configuration,
      state = segmentationModule.state;
  var eventData = evt.detail;
  var element = eventData.element,
      canvasContext = eventData.canvasContext;
  var lineWidth = configuration.outlineWidth || 1;
  var previousTransform = canvasContext.getTransform();
  var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_2__["getNewContext"])(canvasContext.canvas);
  var colorLutTable = state.colorLutTables[colorLUTIndex];
  var previousAlpha = context.globalAlpha;
  context.globalAlpha = isActiveLabelMap ? configuration.outlineAlpha : configuration.outlineAlphaInactive; // Draw outlines.

  Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_2__["draw"])(context, function (context) {
    for (var i = 1; i < outline.length; i++) {
      if (outline[i]) {
        var color = colorLutTable[i];
        Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_2__["drawLines"])(context, element, outline[i], {
          color: "rgba(".concat(color[0], ", ").concat(color[1], ", ").concat(color[2], ", 1.0 )"),
          lineWidth: lineWidth
        }, 'canvas');
      }
    }
  });
  context.globalAlpha = previousAlpha;
  context.setTransform(previousTransform);
}
/**
 * GetOutline - Returns an object containing all the line segments to be
 * drawn the canvas.
 *
 * @param  {Object} evt The cornerstone event.
 * @param  {Labelmap3D} labelmap3D The 3D labelmap.
 * @param  {Labelmap2D} labelmap2D The 2D labelmap for this current image.
 * @param  {number} lineWidth The width of the outline in canvas pixels.
 *
 * @returns {Object[][]} An array of arrays of lines for each segment.
 */

function getOutline(evt, labelmap3D, labelmap2D, lineWidth) {
  var eventData = evt.detail;
  var element = eventData.element,
      image = eventData.image,
      viewport = eventData.viewport;
  var cols = image.width;
  var rows = image.height;
  lineWidth = lineWidth || 1;
  var segmentsHidden = labelmap3D.segmentsHidden;
  var pixelData = labelmap2D.pixelData;
  var activeSegmentIndex = labelmap3D.activeSegmentIndex;
  var lineSegments = [];
  labelmap2D.segmentsOnLabelmap.forEach(function (segmentIndex) {
    var visible = !segmentsHidden[segmentIndex];

    if (visible) {
      lineSegments[segmentIndex] = [];
    }
  });

  if (!lineSegments[activeSegmentIndex]) {
    lineSegments[activeSegmentIndex] = [];
  }

  var _getPixelCoordinateFromPixelIndex = function _getPixelCoordinateFromPixelIndex(pixelIndex) {
    return {
      x: pixelIndex % cols,
      y: Math.floor(pixelIndex / cols)
    };
  };

  var offset = getOutlineOffset(viewport, lineWidth);

  for (var i = 0; i < pixelData.length; i++) {
    var segmentIndex = pixelData[i];

    if (segmentIndex === 0) {
      continue;
    }

    var visible = !segmentsHidden[segmentIndex];

    if (!visible) {
      continue;
    }

    var coord = _getPixelCoordinateFromPixelIndex(i);

    var pixels = _getPixelIndiciesAroundPixel(coord, rows, cols); // Check pixel above


    if (pixels.top === undefined || pixelData[pixels.top] !== segmentIndex) {
      _addTopOutline(lineSegments[segmentIndex], element, coord, offset);
    } // Check pixel below


    if (pixels.bottom === undefined || pixelData[pixels.bottom] !== segmentIndex) {
      _addBottomOutline(lineSegments[segmentIndex], element, coord, offset);
    } // Check pixel to the left


    if (pixels.left === undefined || pixelData[pixels.left] !== segmentIndex) {
      _addLeftOutline(lineSegments[segmentIndex], element, coord, offset);
    } // Check pixel to the right


    if (pixels.right === undefined || pixelData[pixels.right] !== segmentIndex) {
      _addRightOutline(lineSegments[segmentIndex], element, coord, offset);
    } // Top left corner


    if (pixels.topLeft !== undefined && pixelData[pixels.topLeft] !== segmentIndex && pixelData[pixels.top] === segmentIndex && pixelData[pixels.left] === segmentIndex) {
      _addTopLeftCorner(lineSegments[segmentIndex], element, coord, offset);
    } // Top right corner


    if (pixels.topRight !== undefined && pixelData[pixels.topRight] !== segmentIndex && pixelData[pixels.top] === segmentIndex && pixelData[pixels.right] === segmentIndex) {
      _addTopRightCorner(lineSegments[segmentIndex], element, coord, offset);
    } // Bottom left corner


    if (pixels.bottomLeft !== undefined && pixelData[pixels.bottomLeft] !== segmentIndex && pixelData[pixels.bottom] === segmentIndex && pixelData[pixels.left] === segmentIndex) {
      _addBottomLeftCorner(lineSegments[segmentIndex], element, coord, offset);
    } // Bottom right corner


    if (pixels.bottomRight !== undefined && pixelData[pixels.bottomRight] !== segmentIndex && pixelData[pixels.bottom] === segmentIndex && pixelData[pixels.right] === segmentIndex) {
      _addBottomRightCorner(lineSegments[segmentIndex], element, coord, offset);
    }
  }

  return lineSegments;
}
/**
 * GetOutlineOffset - Returns the outline offset (half line width) in the
 * i (column) and j (row) pixel directions in the viewport's rotated frame.
 * @param  {Object} viewport The cornerstone viewport.
 * @param  {number} lineWidth The width of the outline.
 * @returns {Object} Two vectors in the i and j pixel directions, with magnitude
 *                   lineWidth / 2
 */

function getOutlineOffset(viewport, lineWidth) {
  var halfLineWidth = lineWidth / 2;
  var theta = viewport.rotation;
  theta *= Math.PI / 180;
  var cosTheta = Math.cos(theta);
  var sinTheta = Math.sin(theta);
  var unitVectorI = [cosTheta, sinTheta];
  var unitVectorJ = [-sinTheta, cosTheta];
  var i = {
    x: halfLineWidth * unitVectorI[0],
    y: halfLineWidth * unitVectorI[1]
  };
  var j = {
    x: halfLineWidth * unitVectorJ[0],
    y: halfLineWidth * unitVectorJ[1]
  };

  if (viewport.hflip) {
    i.x *= -1;
    i.y *= -1;
  }

  if (viewport.vflip) {
    j.x *= -1;
    j.y *= -1;
  }

  return {
    i: i,
    j: j
  };
}
/**
 * _getPixelIndiciesAroundPixel - Returnns the coordinates for up to 8 surrounding
 * pixels, if they within the bounds of the image.
 *
 * @param  {Object} coord The coordinate to check.
 * @param  {number} rows The number of rows in the image.
 * @param  {number} cols The number of cols in the image.
 *
 * @returns {Object} Object containing the position of adjacent pixels.
 */


function _getPixelIndiciesAroundPixel(coord, rows, cols) {
  var pixelIndex = coord.y * cols + coord.x;
  var pixel = {};
  var hasPixelToTop = coord.y - 1 >= 0;
  var hasPixelToBotoom = coord.y + 1 < rows;
  var hasPixelToLeft = coord.x - 1 >= 0;
  var hasPixelToRight = coord.x + 1 < cols;

  if (hasPixelToTop) {
    pixel.top = pixelIndex - cols;

    if (hasPixelToRight) {
      pixel.topRight = pixel.top + 1;
    }

    if (hasPixelToLeft) {
      pixel.topLeft = pixel.top - 1;
    }
  }

  if (hasPixelToBotoom) {
    pixel.bottom = pixelIndex + cols;

    if (hasPixelToRight) {
      pixel.bottomRight = pixel.bottom + 1;
    }

    if (hasPixelToLeft) {
      pixel.bottomLeft = pixel.bottom - 1;
    }
  }

  if (hasPixelToLeft) {
    pixel.left = pixelIndex - 1;
  }

  if (hasPixelToRight) {
    pixel.right = pixelIndex + 1;
  }

  return pixel;
}
/**
 * _addTopLeftCorner - Adds an outline to the top left corner of the pixel.
 *
 * @param  {Object[]} lineSegmentsForSegment - The list to append.
 * @param  {Object} element - The Cornerstone enabled element.
 * @param  {Object} coord - The pixel to add a line to.
 * @param  {Object} offset - The x and y offset in the rotated frame.
 *
 * @returns {null}
 */


function _addTopLeftCorner(lineSegmentsForSegment, element, coord, offset) {
  var pixelToCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas;
  var start = pixelToCanvas(element, coord);
  start.x += offset.j.x;
  start.y += offset.j.y;
  var end = {
    x: start.x,
    y: start.y
  };
  end.x += offset.i.x * 2;
  end.y += offset.i.y * 2;
  lineSegmentsForSegment.push({
    start: start,
    end: end
  });
}
/**
 * _addTopRightCorner - Adds an outline to the top right corner of the pixel.
 *
 * @param  {Object[]} lineSegmentsForSegment - The list to append.
 * @param  {Object} element - The Cornerstone enabled element.
 * @param  {Object} coord - The pixel to add a line to.
 * @param  {Object} offset - The x and y offset in the rotated frame.
 *
 * @returns {null}
 */


function _addTopRightCorner(lineSegmentsForSegment, element, coord, offset) {
  var pixelToCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas;
  var start = pixelToCanvas(element, {
    x: coord.x + 1,
    y: coord.y
  });
  start.x += offset.j.x;
  start.y += offset.j.y;
  var end = {
    x: start.x,
    y: start.y
  };
  end.x -= offset.i.x * 2;
  end.y -= offset.i.y * 2;
  lineSegmentsForSegment.push({
    start: start,
    end: end
  });
}
/**
 * _addBottomLeftCorner - Adds an outline to the bottom left corner of the pixel.
 *
 * @param  {Object[]} lineSegmentsForSegment - The list to append.
 * @param  {Object} element - The Cornerstone enabled element.
 * @param  {Object} coord - The pixel to add a line to.
 * @param  {Object} offset - The x and y offset in the rotated frame.
 *
 * @returns {null}
 */

function _addBottomLeftCorner(lineSegmentsForSegment, element, coord, offset) {
  var pixelToCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas;
  var start = pixelToCanvas(element, {
    x: coord.x,
    y: coord.y + 1
  });
  start.x -= offset.j.x;
  start.y -= offset.j.y;
  var end = {
    x: start.x,
    y: start.y
  };
  end.x += offset.i.x * 2;
  end.y += offset.i.y * 2;
  lineSegmentsForSegment.push({
    start: start,
    end: end
  });
}
/**
 * _addBottomRightCorner - Adds an outline to the bottom right corner of the pixel.
 *
 * @param  {Object[]} lineSegmentsForSegment - The list to append.
 * @param  {Object} element - The Cornerstone enabled element.
 * @param  {Object} coord - The pixel to add a line to.
 * @param  {Object} offset - The x and y offset in the rotated frame.
 *
 * @returns {null}
 */


function _addBottomRightCorner(lineSegmentsForSegment, element, coord, offset) {
  var pixelToCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas;
  var start = pixelToCanvas(element, {
    x: coord.x + 1,
    y: coord.y + 1
  });
  start.x -= offset.j.x;
  start.y -= offset.j.y;
  var end = {
    x: start.x,
    y: start.y
  };
  end.x -= offset.i.x * 2;
  end.y -= offset.i.y * 2;
  lineSegmentsForSegment.push({
    start: start,
    end: end
  });
}
/**
 * _addTopOutline - adds an outline at the top of the pixel.
 *
 * @param  {Object[]} lineSegmentsForSegment - The list to append.
 * @param  {Object} element - The Cornerstone enabled element.
 * @param  {Object} coord - The pixel to add a line to.
 * @param  {number} halfLineWidth - Half the line width, to place line within the pixel.
 * @param  {Object} offset - The x and y offset in the rotated frame.
 *
 * @returns {null}
 */


function _addTopOutline(lineSegmentsForSegment, element, coord, offset) {
  var pixelToCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas;
  var start = pixelToCanvas(element, coord);
  var end = pixelToCanvas(element, {
    x: coord.x + 1,
    y: coord.y
  }); // Move the line in the y-direction.

  start.x += offset.j.x;
  start.y += offset.j.y;
  end.x += offset.j.x;
  end.y += offset.j.y;
  lineSegmentsForSegment.push({
    start: start,
    end: end
  });
}
/**
 * _addBottomOutline - adds an outline at the bottom of the pixel.
 *
 * @param  {Object[]} lineSegmentsForSegment - The list to append.
 * @param  {Object} element - The Cornerstone enabled element.
 * @param  {Object} coord - The pixel to add a line to.
 * @param  {Object} offset - The x and y offset in the rotated frame.
 *
 * @returns {null}
 */


function _addBottomOutline(lineSegmentsForSegment, element, coord, offset) {
  var pixelToCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas;
  var start = pixelToCanvas(element, {
    x: coord.x,
    y: coord.y + 1
  });
  var end = pixelToCanvas(element, {
    x: coord.x + 1,
    y: coord.y + 1
  }); // Move the line in the negative y-direction.

  start.x -= offset.j.x;
  start.y -= offset.j.y;
  end.x -= offset.j.x;
  end.y -= offset.j.y;
  lineSegmentsForSegment.push({
    start: start,
    end: end
  });
}
/**
 * _addLeftOutline - adds an outline at the left side of the pixel.
 *
 * @param  {Object[]} lineSegmentsForSegment - The list to append.
 * @param  {Object} element - The Cornerstone enabled element.
 * @param  {Object} coord - The pixel to add a line to.
 * @param  {Object} offset - The x and y offset in the rotated frame.
 *
 * @returns {null}
 */


function _addLeftOutline(lineSegmentsForSegment, element, coord, offset) {
  var pixelToCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas;
  var start = pixelToCanvas(element, coord);
  var end = pixelToCanvas(element, {
    x: coord.x,
    y: coord.y + 1
  }); // Move the line in the x-direction.

  start.x += offset.i.x;
  start.y += offset.i.y;
  end.x += offset.i.x;
  end.y += offset.i.y;
  lineSegmentsForSegment.push({
    start: start,
    end: end
  });
}
/**
 * _addRightOutline - adds an outline at the right side of the pixel.
 *
 * @param  {Object[]} lineSegmentsForSegment - The list to append.
 * @param  {Object} element - The Cornerstone enabled element.
 * @param  {Object} coord - The pixel to add a line to.
 * @param  {Object} offset - The x and y offset in the rotated frame.
 *
 * @returns {null}
 */


function _addRightOutline(lineSegmentsForSegment, element, coord, offset) {
  var pixelToCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas;
  var start = pixelToCanvas(element, {
    x: coord.x + 1,
    y: coord.y
  });
  var end = pixelToCanvas(element, {
    x: coord.x + 1,
    y: coord.y + 1
  }); // Move the line in the negative x-direction.

  start.x -= offset.i.x;
  start.y -= offset.i.y;
  end.x -= offset.i.x;
  end.y -= offset.i.y;
  lineSegmentsForSegment.push({
    start: start,
    end: end
  });
}

/***/ }),

/***/ "./eventListeners/mouseEventListeners.js":
/*!***********************************************!*\
  !*** ./eventListeners/mouseEventListeners.js ***!
  \***********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_226873__) {

"use strict";
__nested_webpack_require_226873__.r(__nested_webpack_exports__);
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_226873__(/*! ../events.js */ "./events.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_226873__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_226873__(/*! ../util/copyPoints.js */ "./util/copyPoints.js");
/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_226873__(/*! ../util/triggerEvent.js */ "./util/triggerEvent.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_226873__(/*! ../util/logger.js */ "./util/logger.js");





var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_4__["getLogger"])('eventListeners:mouseEventListeners');
var isClickEvent = true;
var preventClickTimeout;
var clickDelay = 200;
var addedListeners = new Map();

function getEventButtons(event) {
  if (typeof event.buttons === 'number') {
    return event.buttons;
  }

  switch (event.which) {
    // No button
    case 0:
      return 0;
    // Left

    case 1:
      return 1;
    // Middle

    case 2:
      return 4;
    // Right

    case 3:
      return 2;
  }

  return 0;
}

function preventClickHandler() {
  isClickEvent = false;
}

function mouseDoubleClick(e) {
  var element = e.currentTarget;
  var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getEnabledElement(element);

  if (!enabledElement.image) {
    return;
  }

  var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOUBLE_CLICK;
  var startPoints = {
    page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e),
    image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pageX, e.pageY),
    client: {
      x: e.clientX,
      y: e.clientY
    }
  };
  startPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, startPoints.image);
  var lastPoints = Object(_util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__["default"])(startPoints);
  logger.log('double-click: %o', getEventButtons(e));
  var eventData = {
    event: e,
    buttons: getEventButtons(e),
    viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element),
    image: enabledElement.image,
    element: element,
    startPoints: startPoints,
    lastPoints: lastPoints,
    currentPoints: startPoints,
    deltaPoints: {
      x: 0,
      y: 0
    },
    type: eventType
  };
  Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, eventType, eventData);
}

function mouseDown(e) {
  var element = e.currentTarget;
  var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getEnabledElement(element);

  if (!enabledElement.image) {
    return;
  }

  preventClickTimeout = setTimeout(preventClickHandler, clickDelay); // Prevent CornerstoneToolsMouseMove while mouse is down

  element.removeEventListener('mousemove', mouseMove);
  var startPoints = {
    page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e),
    image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pageX, e.pageY),
    client: {
      x: e.clientX,
      y: e.clientY
    }
  };
  startPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, startPoints.image);
  var lastPoints = Object(_util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__["default"])(startPoints);
  var eventData = {
    event: e,
    buttons: getEventButtons(e),
    viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element),
    image: enabledElement.image,
    element: element,
    startPoints: startPoints,
    lastPoints: lastPoints,
    currentPoints: startPoints,
    deltaPoints: {
      x: 0,
      y: 0
    },
    type: _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOWN
  };
  var eventPropagated = Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(eventData.element, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOWN, eventData);

  if (eventPropagated) {
    // No tools responded to this event, create a new tool
    eventData.type = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOWN_ACTIVATE;
    Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(eventData.element, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOWN_ACTIVATE, eventData);
  }

  function onMouseMove(e) {
    // Calculate our current points in page and image coordinates
    var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DRAG;
    var currentPoints = {
      page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e),
      image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pageX, e.pageY),
      client: {
        x: e.clientX,
        y: e.clientY
      }
    };
    currentPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, currentPoints.image); // Calculate delta values in page and image coordinates

    var deltaPoints = {
      page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.page, lastPoints.page),
      image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.image, lastPoints.image),
      client: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.client, lastPoints.client),
      canvas: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.canvas, lastPoints.canvas)
    };
    logger.log('mousemove: %o', getEventButtons(e));
    var eventData = {
      buttons: getEventButtons(e),
      viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element),
      image: enabledElement.image,
      element: element,
      startPoints: startPoints,
      lastPoints: lastPoints,
      currentPoints: currentPoints,
      deltaPoints: deltaPoints,
      type: eventType,
      ctrlKey: e.ctrlKey,
      metaKey: e.metaKey,
      shiftKey: e.shiftKey
    };
    Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(eventData.element, eventType, eventData); // Update the last points

    lastPoints = Object(_util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__["default"])(currentPoints);
  } // Hook mouseup so we can unbind our event listeners
  // When they stop dragging


  function onMouseUp(e) {
    // Cancel the timeout preventing the click event from triggering
    clearTimeout(preventClickTimeout);
    var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_UP;

    if (isClickEvent) {
      eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_CLICK;
    } // Calculate our current points in page and image coordinates


    var currentPoints = {
      page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e),
      image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pageX, e.pageY),
      client: {
        x: e.clientX,
        y: e.clientY
      }
    };
    currentPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, currentPoints.image); // Calculate delta values in page and image coordinates

    var deltaPoints = {
      page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.page, lastPoints.page),
      image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.image, lastPoints.image),
      client: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.client, lastPoints.client),
      canvas: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.canvas, lastPoints.canvas)
    };
    logger.log('mouseup: %o', getEventButtons(e));
    var eventData = {
      event: e,
      buttons: getEventButtons(e),
      viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element),
      image: enabledElement.image,
      element: element,
      startPoints: startPoints,
      lastPoints: lastPoints,
      currentPoints: currentPoints,
      deltaPoints: deltaPoints,
      type: eventType
    };
    Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(eventData.element, eventType, eventData);
    document.removeEventListener('mousemove', onMouseMove);
    document.removeEventListener('mouseup', onMouseUp);
    addedListeners.delete(onMouseMove);
    addedListeners.delete(onMouseUp);
    element.addEventListener('mousemove', mouseMove);
    isClickEvent = true;
  }

  document.addEventListener('mousemove', onMouseMove);
  document.addEventListener('mouseup', onMouseUp);
  addedListeners.set(onMouseMove, 'mousemove');
  addedListeners.set(onMouseUp, 'mouseup');
}

function mouseMove(e) {
  var element = e.currentTarget;
  var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getEnabledElement(element);

  if (!enabledElement.image) {
    return;
  }

  var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_MOVE;
  var startPoints = {
    page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e),
    image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pageX, e.pageY),
    client: {
      x: e.clientX,
      y: e.clientY
    }
  };
  startPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, startPoints.image);
  var lastPoints = Object(_util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__["default"])(startPoints); // Calculate our current points in page and image coordinates

  var currentPoints = {
    page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e),
    image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pageX, e.pageY),
    client: {
      x: e.clientX,
      y: e.clientY
    }
  };
  currentPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, currentPoints.image); // Calculate delta values in page and image coordinates

  var deltaPoints = {
    page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.page, lastPoints.page),
    image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.image, lastPoints.image),
    client: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.client, lastPoints.client),
    canvas: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.canvas, lastPoints.canvas)
  };
  var eventData = {
    viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element),
    image: enabledElement.image,
    element: element,
    startPoints: startPoints,
    lastPoints: lastPoints,
    currentPoints: currentPoints,
    deltaPoints: deltaPoints,
    type: eventType
  };
  Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, eventType, eventData); // Update the last points

  lastPoints = Object(_util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__["default"])(currentPoints);
}

function disable(element) {
  element.removeEventListener('mousedown', mouseDown);
  element.removeEventListener('mousemove', mouseMove);
  element.removeEventListener('dblclick', mouseDoubleClick); // Make sure we have removed any listeners that were added within the above listeners (#1337)

  addedListeners.forEach(function (event, listener) {
    document.removeEventListener(event, listener);
  });
  addedListeners.clear();
}

function enable(element) {
  // Prevent handlers from being attached multiple times
  disable(element);
  element.addEventListener('mousedown', mouseDown);
  element.addEventListener('mousemove', mouseMove);
  element.addEventListener('dblclick', mouseDoubleClick);
}

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  enable: enable,
  disable: disable
});

/***/ }),

/***/ "./eventListeners/onImageRenderedBrushEventHandler.js":
/*!************************************************************!*\
  !*** ./eventListeners/onImageRenderedBrushEventHandler.js ***!
  \************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_240202__) {

"use strict";
__nested_webpack_require_240202__.r(__nested_webpack_exports__);
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_240202__(/*! ../store/index.js */ "./store/index.js");
/* harmony import */ var _internals_renderSegmentation_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_240202__(/*! ./internals/renderSegmentation.js */ "./eventListeners/internals/renderSegmentation.js");


var segmentationModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_0__["getModule"])('segmentation');
/**
 * Finds which segmentations need to be rendered based on the configuration and
 * presence of `Labelmap2D` data on these frames.
 *
 * @param {Object} evt - The cornerstone event.
 * @returns {null}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (evt) {
  var eventData = evt.detail;
  var element = eventData.element;
  var configuration = segmentationModule.configuration,
      getters = segmentationModule.getters;

  var _getters$labelmaps3D = getters.labelmaps3D(element),
      activeLabelmapIndex = _getters$labelmaps3D.activeLabelmapIndex,
      labelmaps3D = _getters$labelmaps3D.labelmaps3D,
      currentImageIdIndex = _getters$labelmaps3D.currentImageIdIndex;

  if (!labelmaps3D) {
    return;
  }

  if (configuration.shouldRenderInactiveLabelmaps) {
    renderInactiveLabelMaps(evt, labelmaps3D, activeLabelmapIndex, currentImageIdIndex);
  }

  renderActiveLabelMap(evt, labelmaps3D, activeLabelmapIndex, currentImageIdIndex);
});
/**
 * RenderActiveLabelMap - Renders the `Labelmap3D` for this element if a `Labelmap2D`
 *                        view of the `currentImageIdIndex` exists.
 *
 * @param  {Object} evt                 The cornerstone event.
 * @param  {Labelmap3D[]} labelmaps3D       An array of `Labelmap3D` objects.
 * @param  {number} activeLabelmapIndex The index of the active label map.
 * @param  {number} currentImageIdIndex The in-stack image position.
 * @returns {null}
 */

function renderActiveLabelMap(evt, labelmaps3D, activeLabelmapIndex, currentImageIdIndex) {
  var labelmap3D = labelmaps3D[activeLabelmapIndex];

  if (!labelmap3D) {
    return;
  }

  var labelmap2D = labelmap3D.labelmaps2D[currentImageIdIndex];

  if (labelmap2D) {
    Object(_internals_renderSegmentation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(evt, labelmap3D, activeLabelmapIndex, labelmap2D, true);
  }
}
/**
 * RenderInactiveLabelMaps - Renders all the inactive `Labelmap3D`s for this element.
 *
 * @param  {Object} evt                 The cornerstone event.
 * @param  {Labelmap3D[]} labelmaps3D       An array of labelmaps.
 * @param  {number} activeLabelmapIndex The index of the active label map.
 * @param  {number} currentImageIdIndex The in-stack image position.
 * @returns {null}
 */


function renderInactiveLabelMaps(evt, labelmaps3D, activeLabelmapIndex, currentImageIdIndex) {
  for (var i = 0; i < labelmaps3D.length; i++) {
    var labelmap3D = labelmaps3D[i];

    if (i === activeLabelmapIndex || !labelmap3D) {
      continue;
    }

    var labelmap2D = labelmap3D.labelmaps2D[currentImageIdIndex];

    if (labelmap2D) {
      Object(_internals_renderSegmentation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(evt, labelmap3D, i, labelmap2D, false);
    }
  }
}

/***/ }),

/***/ "./eventListeners/preventGhostClick.js":
/*!*********************************************!*\
  !*** ./eventListeners/preventGhostClick.js ***!
  \*********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_243771__) {

"use strict";
__nested_webpack_require_243771__.r(__nested_webpack_exports__);
// Functions to prevent ghost clicks following a touch
// All credit to @kosich
// https://gist.github.com/kosich/23188dd86633b6c2efb7
var antiGhostDelay = 2000,
    pointerType = {
  mouse: 0,
  touch: 1
};
var lastInteractionType, lastInteractionTime;

function handleTap(type, e) {
  var now = Date.now();

  if (type !== lastInteractionType) {
    if (now - lastInteractionTime <= antiGhostDelay) {
      e.preventDefault();
      e.stopPropagation();
      e.stopImmediatePropagation();
      return false;
    }

    lastInteractionType = type;
  }

  lastInteractionTime = now;
} // Cacheing the function references
// Necessary because a new function reference is created after .bind() is called
// http://stackoverflow.com/questions/11565471/removing-event-listener-which-was-added-with-bind


var handleTapMouse = handleTap.bind(null, pointerType.mouse);
var handleTapTouch = handleTap.bind(null, pointerType.touch);

function attachEvents(element, eventList, interactionType) {
  var tapHandler = interactionType ? handleTapMouse : handleTapTouch;
  eventList.forEach(function (eventName) {
    element.addEventListener(eventName, tapHandler, {
      passive: false
    });
  });
}

function removeEvents(element, eventList, interactionType) {
  var tapHandler = interactionType ? handleTapMouse : handleTapTouch;
  eventList.forEach(function (eventName) {
    element.removeEventListener(eventName, tapHandler);
  });
}

var mouseEvents = ['mousedown', 'mouseup'];
var touchEvents = ['touchstart', 'touchend'];

function disable(element) {
  removeEvents(element, mouseEvents, pointerType.mouse);
  removeEvents(element, touchEvents, pointerType.touch);
}

function enable(element) {
  disable(element);
  attachEvents(element, mouseEvents, pointerType.mouse);
  attachEvents(element, touchEvents, pointerType.touch);
}

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  enable: enable,
  disable: disable
});

/***/ }),

/***/ "./eventListeners/touchEventListeners.js":
/*!***********************************************!*\
  !*** ./eventListeners/touchEventListeners.js ***!
  \***********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_246089__) {

"use strict";
__nested_webpack_require_246089__.r(__nested_webpack_exports__);
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_246089__(/*! ../events.js */ "./events.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_246089__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_246089__(/*! ../util/copyPoints.js */ "./util/copyPoints.js");
/* harmony import */ var _preventGhostClick_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_246089__(/*! ./preventGhostClick.js */ "./eventListeners/preventGhostClick.js");
/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_246089__(/*! ../util/triggerEvent.js */ "./util/triggerEvent.js");
/* harmony import */ var _toolOptions_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_246089__(/*! ../toolOptions.js */ "./toolOptions.js");






var startPoints, currentPoints, lastPoints, deltaPoints, eventData, touchStartDelay, pressTimeout, pageDistanceMoved;
var lastScale = 1.0,
    lastRotation = 0.0,
    preventNextPinch = false,
    isPress = false,
    lastDelta;
var pressDelay = 700,
    pressMaxDistance = 5;
var inputName = 'touchInput';

function onTouch(e) {
  var element = e.currentTarget || e.srcEvent.currentTarget;
  var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getEnabledElement(element);

  if (!enabledElement.image) {
    return;
  }

  var eventType, scaleChange, delta, remainingPointers, rotation; // Prevent mouse events from occurring alongside touch events

  e.preventDefault(); // If more than one finger is placed on the element, stop the press timeout

  if (e.pointers && e.pointers.length > 1 || e.touches && e.touches.length > 1) {
    isPress = false;
    clearTimeout(pressTimeout);
  }

  switch (e.type) {
    case 'tap':
      isPress = false;
      clearTimeout(pressTimeout); // Calculate our current points in page and image coordinates

      currentPoints = {
        page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e.pointers[0]),
        image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pointers[0].pageX, e.pointers[0].pageY),
        client: {
          x: e.pointers[0].clientX,
          y: e.pointers[0].clientY
        }
      };
      currentPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, currentPoints.image);
      eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TAP;
      eventData = {
        event: e,
        viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element),
        image: enabledElement.image,
        element: element,
        currentPoints: currentPoints,
        type: eventType,
        isTouchEvent: true
      };
      Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData);
      break;

    case 'doubletap':
      isPress = false;
      clearTimeout(pressTimeout); // Calculate our current points in page and image coordinates

      currentPoints = {
        page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e.pointers[0]),
        image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pointers[0].pageX, e.pointers[0].pageY),
        client: {
          x: e.pointers[0].clientX,
          y: e.pointers[0].clientY
        }
      };
      currentPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, currentPoints.image);
      eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].DOUBLE_TAP;
      eventData = {
        event: e,
        viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element),
        image: enabledElement.image,
        element: element,
        currentPoints: currentPoints,
        type: eventType,
        isTouchEvent: true
      };
      Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData);
      break;

    case 'pinchstart':
      isPress = false;
      clearTimeout(pressTimeout);
      lastScale = 1.0;
      break;

    case 'pinchmove':
      isPress = false;
      clearTimeout(pressTimeout);

      if (preventNextPinch === true) {
        lastScale = e.scale;
        preventNextPinch = false;
        break;
      }

      scaleChange = (e.scale - lastScale) / lastScale;
      startPoints = {
        page: e.center,
        image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.center.x, e.center.y)
      };
      startPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, startPoints.image);
      eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PINCH;
      eventData = {
        event: e,
        startPoints: startPoints,
        viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element),
        image: enabledElement.image,
        element: element,
        direction: e.scale < 1 ? 1 : -1,
        scaleChange: scaleChange,
        type: eventType,
        isTouchEvent: true
      };
      Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData);
      lastScale = e.scale;
      break;

    case 'touchstart':
      lastScale = 1.0;
      clearTimeout(pressTimeout);
      clearTimeout(touchStartDelay);
      touchStartDelay = setTimeout(function () {
        startPoints = {
          page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e.touches[0]),
          image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.touches[0].pageX, e.touches[0].pageY),
          client: {
            x: e.touches[0].clientX,
            y: e.touches[0].clientY
          }
        };
        startPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, startPoints.image);
        eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_START;

        if (e.touches.length > 1) {
          eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MULTI_TOUCH_START;
        }

        eventData = {
          event: e,
          viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element),
          image: enabledElement.image,
          element: element,
          startPoints: startPoints,
          currentPoints: startPoints,
          type: eventType,
          isTouchEvent: true
        };
        var eventPropagated = Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData);

        if (eventPropagated === true) {
          // IsPress = false;
          // ClearTimeout(pressTimeout);
          // No current tools responded to the drag action.
          // Create new tool measurement
          eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_START_ACTIVE;

          if (e.touches.length > 1) {
            eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MULTI_TOUCH_START_ACTIVE;
          }

          eventData.type = eventType;
          Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData);
        } // Console.log(eventType);


        lastPoints = Object(_util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__["default"])(startPoints);
      }, 50);
      isPress = true;
      pageDistanceMoved = 0;
      pressTimeout = setTimeout(function () {
        if (!isPress) {
          return;
        }

        currentPoints = {
          page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e.touches[0]),
          image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.touches[0].pageX, e.touches[0].pageY),
          client: {
            x: e.touches[0].clientX,
            y: e.touches[0].clientY
          }
        };
        currentPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, startPoints.image);
        eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PRESS;
        eventData = {
          event: e,
          viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element),
          image: enabledElement.image,
          element: element,
          currentPoints: currentPoints,
          type: eventType,
          isTouchEvent: true
        };
        Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData); // Console.log(eventType);
      }, pressDelay);
      break;

    case 'touchend':
      lastScale = 1.0;
      isPress = false;
      clearTimeout(pressTimeout);
      setTimeout(function () {
        startPoints = {
          page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e.changedTouches[0]),
          image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.changedTouches[0].pageX, e.changedTouches[0].pageY),
          client: {
            x: e.changedTouches[0].clientX,
            y: e.changedTouches[0].clientY
          }
        };
        startPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, startPoints.image);
        eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_END;
        eventData = {
          event: e,
          viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element),
          image: enabledElement.image,
          element: element,
          startPoints: startPoints,
          currentPoints: startPoints,
          type: eventType,
          isTouchEvent: true
        };
        Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData);
      }, 50);
      break;

    case 'panmove':
      // Using the delta-value of HammerJS, because it takes all pointers into account
      // This is very important when using panning in combination with pinch-zooming
      // But HammerJS' delta is relative to the start of the pan event
      // So it needs to be converted to a per-event-delta for CornerstoneTools
      delta = {
        x: e.deltaX - lastDelta.x,
        y: e.deltaY - lastDelta.y
      };
      lastDelta = {
        x: e.deltaX,
        y: e.deltaY
      }; // Calculate our current points in page and image coordinates

      currentPoints = {
        page: {
          x: lastPoints.page.x + delta.x,
          y: lastPoints.page.y + delta.y
        },
        image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, lastPoints.page.x + delta.x, lastPoints.page.y + delta.y),
        client: {
          x: lastPoints.client.x + delta.x,
          y: lastPoints.client.y + delta.y
        }
      };
      currentPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, currentPoints.image); // Calculate delta values in page and image coordinates

      deltaPoints = {
        page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.page, lastPoints.page),
        image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.image, lastPoints.image),
        client: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.client, lastPoints.client),
        canvas: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.canvas, lastPoints.canvas)
      };
      pageDistanceMoved += Math.sqrt(deltaPoints.page.x * deltaPoints.page.x + deltaPoints.page.y * deltaPoints.page.y); // Console.log("pageDistanceMoved: " + pageDistanceMoved);

      if (pageDistanceMoved > pressMaxDistance) {
        // Console.log('Press event aborted due to movement');
        isPress = false;
        clearTimeout(pressTimeout);
      }

      eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_DRAG;

      if (e.pointers.length > 1) {
        eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MULTI_TOUCH_DRAG;
      }

      eventData = {
        viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element),
        image: enabledElement.image,
        element: element,
        startPoints: startPoints,
        lastPoints: lastPoints,
        currentPoints: currentPoints,
        deltaPoints: deltaPoints,
        numPointers: e.pointers.length,
        type: eventType,
        isTouchEvent: true
      };
      Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData);
      lastPoints = Object(_util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__["default"])(currentPoints);
      break;

    case 'panstart':
      lastDelta = {
        x: e.deltaX,
        y: e.deltaY
      };
      currentPoints = {
        page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e.pointers[0]),
        image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pointers[0].pageX, e.pointers[0].pageY),
        client: {
          x: e.pointers[0].clientX,
          y: e.pointers[0].clientY
        }
      };
      currentPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, currentPoints.image);
      lastPoints = Object(_util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__["default"])(currentPoints);
      break;

    case 'panend':
      isPress = false;
      clearTimeout(pressTimeout); // If lastPoints is not yet set, it means panend fired without panstart or pan,
      // So we can ignore this event

      if (!lastPoints) {
        return false;
      }

      currentPoints = {
        page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e.pointers[0]),
        image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pointers[0].pageX, e.pointers[0].pageY),
        client: {
          x: e.pointers[0].clientX,
          y: e.pointers[0].clientY
        }
      };
      currentPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, currentPoints.image); // Calculate delta values in page and image coordinates

      deltaPoints = {
        page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.page, lastPoints.page),
        image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.image, lastPoints.image),
        client: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.client, lastPoints.client),
        canvas: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.canvas, lastPoints.canvas)
      };
      eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_DRAG_END;
      eventData = {
        event: e.srcEvent,
        viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element),
        image: enabledElement.image,
        element: element,
        startPoints: startPoints,
        lastPoints: lastPoints,
        currentPoints: currentPoints,
        deltaPoints: deltaPoints,
        type: eventType,
        isTouchEvent: true
      };
      Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData);
      remainingPointers = e.pointers.length - e.changedPointers.length;

      if (remainingPointers === 2) {
        preventNextPinch = true;
      }

      break;

    case 'rotatemove':
      isPress = false;
      clearTimeout(pressTimeout);
      rotation = e.rotation - lastRotation;
      lastRotation = e.rotation;
      eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_ROTATE;
      eventData = {
        event: e.srcEvent,
        viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element),
        image: enabledElement.image,
        element: element,
        rotation: rotation,
        type: eventType
      };
      Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData);
      break;
  }

  return false;
}

function enable(element) {
  disable(element);
  var Hammer = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].Hammer;
  var hammerOptions = {
    inputClass: Hammer.SUPPORT_POINTER_EVENTS ? Hammer.PointerEventInput : Hammer.TouchInput
  };
  var mc = new Hammer.Manager(element, hammerOptions);
  var panOptions = {
    pointers: 0,
    direction: Hammer.DIRECTION_ALL,
    threshold: 0
  };
  var pan = new Hammer.Pan(panOptions);
  var pinch = new Hammer.Pinch({
    threshold: 0
  });
  var rotate = new Hammer.Rotate({
    threshold: 0
  });
  pinch.recognizeWith(pan);
  pinch.recognizeWith(rotate);
  rotate.recognizeWith(pan);
  var doubleTap = new Hammer.Tap({
    event: 'doubletap',
    taps: 2,
    interval: 1500,
    threshold: 50,
    posThreshold: 50
  });
  doubleTap.recognizeWith(pan); // Add to the Manager

  mc.add([doubleTap, pan, rotate, pinch]);
  mc.on('tap doubletap panstart panmove panend pinchstart pinchmove rotatemove', onTouch);
  _preventGhostClick_js__WEBPACK_IMPORTED_MODULE_3__["default"].enable(element);
  var touchEvents = ['touchstart', 'touchend'];
  touchEvents.forEach(function (eventType) {
    element.addEventListener(eventType, onTouch, {
      passive: false
    });
  }); // TODO: Check why we are using tool options if it's not a tool

  var options = Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_5__["getToolOptions"])(inputName, element);
  options.hammer = mc; // TODO: Check why we are using tool options if it's not a tool

  Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_5__["setToolOptions"])(inputName, element, options);
}

function disable(element) {
  _preventGhostClick_js__WEBPACK_IMPORTED_MODULE_3__["default"].disable(element);
  var touchEvents = ['touchstart', 'touchend'];
  touchEvents.forEach(function (eventType) {
    element.removeEventListener(eventType, onTouch);
  }); // TODO: Check why we are using tool options if it's not a tool

  var options = Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_5__["getToolOptions"])(inputName, element);
  var mc = options.hammer;

  if (mc) {
    mc.off('tap doubletap panstart panmove panend pinchstart pinchmove rotatemove', onTouch);
    mc.input.destroy();
  }

  options.hammer = null;
  Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_5__["clearToolOptions"])(inputName, element);
} // Module exports


var touchInput = {
  enable: enable,
  disable: disable
};
/* harmony default export */ __nested_webpack_exports__["default"] = (touchInput);

/***/ }),

/***/ "./eventListeners/wheelEventListener.js":
/*!**********************************************!*\
  !*** ./eventListeners/wheelEventListener.js ***!
  \**********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_266073__) {

"use strict";
__nested_webpack_require_266073__.r(__nested_webpack_exports__);
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_266073__(/*! ../events.js */ "./events.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_266073__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_266073__(/*! ../util/triggerEvent.js */ "./util/triggerEvent.js");
/* harmony import */ var _internals_normalizeWheel_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_266073__(/*! ./internals/normalizeWheel.js */ "./eventListeners/internals/normalizeWheel.js");
/**
 * Internal module used to turn on listening, handling, and normalizing of the
 * native `wheel` event
 */




/**
 *
 * @private
 * @function wheelEventHandler
 * @param {WheelEvent} evt
 * @returns {undefined}
 */

function wheelEventHandler(evt) {
  var element = evt.currentTarget;
  var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getEnabledElement(element);

  if (!enabledElement.image) {
    return;
  } // Prevent triggering MouseWheel events that are not real scroll events:
  // E.g. when clicking the MiddleMouseWheelButton, a deltaY of 0 is emitted.
  // See https://github.com/cornerstonejs/cornerstoneTools/issues/935


  if (evt.deltaY > -1 && evt.deltaY < 1) {
    return;
  }

  evt.preventDefault();
  var pageX = evt.pageX,
      pageY = evt.pageY;
  var startingCoords = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, pageX, pageY);

  var _normalizeWheel = Object(_internals_normalizeWheel_js__WEBPACK_IMPORTED_MODULE_3__["default"])(evt),
      spinX = _normalizeWheel.spinX,
      spinY = _normalizeWheel.spinY,
      pixelX = _normalizeWheel.pixelX,
      pixelY = _normalizeWheel.pixelY;

  var direction = spinY < 0 ? -1 : 1;
  var mouseWheelData = {
    element: element,
    viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element),
    detail: evt,
    image: enabledElement.image,
    direction: direction,
    spinX: spinX,
    spinY: spinY,
    pixelX: pixelX,
    pixelY: pixelY,
    pageX: pageX,
    pageY: pageY,
    imageX: startingCoords.x,
    imageY: startingCoords.y
  };
  Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_WHEEL, mouseWheelData);
}
/**
 * Listens for the wheel event, and handles it. Handled event
 * will be "normalized" and re-emitted as `EVENTS.MOUSE_WHEEL`
 *
 * @private
 * @param {HTMLElement} element
 * @returns {undefined}
 */


function enable(element) {
  disable(element);
  element.addEventListener('wheel', wheelEventHandler, {
    passive: false
  });
}
/**
 * Removes listener and handler for wheel event. `EVENTS.MOUSE_WHEEL`
 * will no longer be emitted.
 *
 * @private
 * @param {HTMLElement} element
 * @returns {undefined}
 */


function disable(element) {
  element.removeEventListener('wheel', wheelEventHandler, {
    passive: false
  });
}

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  enable: enable,
  disable: disable
});

/***/ }),

/***/ "./eventListeners/windowResizeHandler.js":
/*!***********************************************!*\
  !*** ./eventListeners/windowResizeHandler.js ***!
  \***********************************************/
/*! exports provided: forceEnabledElementResize, default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_269658__) {

"use strict";
__nested_webpack_require_269658__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_269658__.d(__nested_webpack_exports__, "forceEnabledElementResize", function() { return forceEnabledElementResize; });
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_269658__(/*! ./../store/index.js */ "./store/index.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_269658__(/*! ./../externalModules.js */ "./externalModules.js");



var enable = function enable() {
  disable(); // Clean up any lingering listeners

  window.addEventListener('resize', resizeThrottler, false);
};

var disable = function disable() {
  window.removeEventListener('resize', resizeThrottler, false);
};

var resizeTimeout;

function resizeThrottler() {
  // Ignore resize events as long as an actualResizeHandler execution is in the queue
  if (!resizeTimeout) {
    resizeTimeout = setTimeout(function () {
      resizeTimeout = null;
      forceEnabledElementResize(); // The actualResizeHandler will execute at a rate of 15fps
    }, 66);
  }
}

var forceEnabledElementResize = function forceEnabledElementResize() {
  _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].enabledElements.forEach(function (element) {
    _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.resize(element);
  });
};
/* harmony default export */ __nested_webpack_exports__["default"] = ({
  enable: enable,
  disable: disable
});

/***/ }),

/***/ "./events.js":
/*!*******************!*\
  !*** ./events.js ***!
  \*******************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_271350__) {

"use strict";
__nested_webpack_require_271350__.r(__nested_webpack_exports__);
/**
 *  Enumerates the events for CornestoneTools. Native events are captured,
 *  normalized, and re-triggered with a `cornerstonetools` prefix. This allows
 *  us to handle events consistently across different browsers.
 *
 *  @enum {String}
 *  @memberof CornerstoneTools
 *  @readonly
 */
var EVENTS = {
  //
  // MOUSE
  //

  /**
   * https://developer.mozilla.org/en-US/docs/Web/Events/mousedown
   *  @type {String}
   */
  MOUSE_DOWN: 'cornerstonetoolsmousedown',

  /**
   * https://developer.mozilla.org/en-US/docs/Web/Events/mouseup
   *  @type {String}
   */
  MOUSE_UP: 'cornerstonetoolsmouseup',

  /**
   * Is fired if a handled `MOUSE_DOWN` event does not `stopPropagation`. The hook
   * we use to create new measurement data for mouse events.
   *  @type {String}
   */
  MOUSE_DOWN_ACTIVATE: 'cornerstonetoolsmousedownactivate',

  /**
   * https://developer.mozilla.org/en-US/docs/Web/Events/drag
   *  @type {String}
   */
  MOUSE_DRAG: 'cornerstonetoolsmousedrag',

  /**
   * https://developer.mozilla.org/en-US/docs/Web/Events/mousemove
   *  @type {String}
   */
  MOUSE_MOVE: 'cornerstonetoolsmousemove',

  /**
   * https://developer.mozilla.org/en-US/docs/Web/Events/click
   *  @type {String}
   */
  MOUSE_CLICK: 'cornerstonetoolsmouseclick',

  /**
   * https://developer.mozilla.org/en-US/docs/Web/Events/dblclick
   *  @type {String}
   */
  MOUSE_DOUBLE_CLICK: 'cornerstonetoolsmousedoubleclick',

  /**
   * https://developer.mozilla.org/en-US/docs/Web/Events/wheel
   *  @type {String}
   */
  MOUSE_WHEEL: 'cornerstonetoolsmousewheel',
  //
  // TOUCH
  //

  /**
   * https://developer.mozilla.org/en-US/docs/Web/Events/touchstart
   *  @type {String}
   */
  TOUCH_START: 'cornerstonetoolstouchstart',

  /**
   * Is fired if a handled `TOUCH_START` event does not `stopPropagation`. The hook
   * we use to create new measurement data for touch events.
   *  @type {String}
   */
  TOUCH_START_ACTIVE: 'cornerstonetoolstouchstartactive',

  /**
   *  @type {String}
   */
  TOUCH_END: 'cornerstonetoolstouchend',

  /**
   *  @type {String}
   */
  TOUCH_DRAG: 'cornerstonetoolstouchdrag',

  /**
   *  @type {String}
   */
  TOUCH_DRAG_END: 'cornerstonetoolstouchdragend',

  /**
   * http://hammerjs.github.io/recognizer-pinch/
   *  @type {String}
   */
  TOUCH_PINCH: 'cornerstonetoolstouchpinch',

  /**
   * http://hammerjs.github.io/recognizer-rotate/
   *  @type {String}
   */
  TOUCH_ROTATE: 'cornerstonetoolstouchrotate',

  /**
   * http://hammerjs.github.io/recognizer-press/
   *  @type {String}
   */
  TOUCH_PRESS: 'cornerstonetoolstouchpress',

  /**
   * http://hammerjs.github.io/recognizer-tap/
   *  @type {String}
   */
  TAP: 'cornerstonetoolstap',

  /**
   *  @type {String}
   */
  DOUBLE_TAP: 'cornerstonetoolsdoubletap',

  /**
   *  @type {String}
   */
  MULTI_TOUCH_START: 'cornerstonetoolsmultitouchstart',

  /**
   *  @type {String}
   */
  MULTI_TOUCH_START_ACTIVE: 'cornerstonetoolsmultitouchstartactive',

  /**
   *  @type {String}
   */
  MULTI_TOUCH_DRAG: 'cornerstonetoolsmultitouchdrag',
  //
  // KEYBOARD
  //

  /**
   * https://developer.mozilla.org/en-US/docs/Web/Events/keydown
   *  @type {String}
   */
  KEY_DOWN: 'cornerstonetoolskeydown',

  /**
   * https://developer.mozilla.org/en-US/docs/Web/Events/keyup
   *  @type {String}
   */
  KEY_UP: 'cornerstonetoolskeyup',

  /**
   * https://developer.mozilla.org/en-US/docs/Web/Events/keypress
   *  @type {String}
   */
  KEY_PRESS: 'cornerstonetoolskeypress',
  //
  // CUSTOM
  //

  /**
   *  @type {String}
   */
  MEASUREMENT_ADDED: 'cornerstonetoolsmeasurementadded',

  /**
   *  @type {String}
   */
  MEASUREMENT_MODIFIED: 'cornerstonetoolsmeasurementmodified',

  /**
   *  @type {String}
   */
  MEASUREMENT_COMPLETED: 'cornerstonetoolsmeasurementcompleted',

  /**
   *  @type {String}
   */
  MEASUREMENT_REMOVED: 'cornerstonetoolsmeasurementremoved',

  /**
   *  @type {String}
   */
  TOOL_DEACTIVATED: 'cornerstonetoolstooldeactivated',

  /**
   *  @type {String}
   */
  CLIP_STOPPED: 'cornerstonetoolsclipstopped',

  /**
   *  @type {String}
   */
  STACK_SCROLL: 'cornerstonetoolsstackscroll',

  /**
   *  @type {String}
   */
  STACK_PREFETCH_IMAGE_LOADED: 'cornerstonetoolsstackprefetchimageloaded',

  /**
   *  @type {String}
   */
  STACK_PREFETCH_DONE: 'cornerstonetoolsstackprefetchdone',

  /**
   *  @type {String}
   */
  LABELMAP_MODIFIED: 'cornersontetoolslabelmapmodified'
};
/* harmony default export */ __nested_webpack_exports__["default"] = (EVENTS);

/***/ }),

/***/ "./externalModules.js":
/*!****************************!*\
  !*** ./externalModules.js ***!
  \****************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_276182__) {

"use strict";
__nested_webpack_require_276182__.r(__nested_webpack_exports__);
var cornerstone = window.cornerstone;
var cornerstoneMath = window.cornerstoneMath;
var Hammer = window.Hammer;
/* harmony default export */ __nested_webpack_exports__["default"] = ({
  set cornerstone(cs) {
    cornerstone = cs;
  },

  get cornerstone() {
    return cornerstone;
  },

  set cornerstoneMath(cm) {
    cornerstoneMath = cm;
  },

  get cornerstoneMath() {
    return cornerstoneMath;
  },

  set Hammer(module) {
    Hammer = module;
  },

  get Hammer() {
    return Hammer;
  }

});

/***/ }),

/***/ "./importInternal.js":
/*!***************************!*\
  !*** ./importInternal.js ***!
  \***************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_276977__) {

"use strict";
__nested_webpack_require_276977__.r(__nested_webpack_exports__);
/* harmony import */ var _lib_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_276977__(/*! ./lib.js */ "./lib.js");

/**
 * Imports functionality from cornerstoneTools for use in external packages/plugins.
 * @param  {string} uri the import path for the entity to import.
 * @returns {Class|Object|Function} The entity requested.
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (uri) {
  return _lib_js__WEBPACK_IMPORTED_MODULE_0__["lib"][uri];
});

/***/ }),

/***/ "./index.js":
/*!******************!*\
  !*** ./index.js ***!
  \******************/
/*! exports provided: AngleTool, ArrowAnnotateTool, BidirectionalTool, CircleRoiTool, CobbAngleTool, EllipticalRoiTool, FreehandRoiTool, LengthTool, ProbeTool, RectangleRoiTool, TextMarkerTool, BrushTool, SphericalBrushTool, RectangleScissorsTool, FreehandScissorsTool, CircleScissorsTool, CorrectionScissorsTool, CrosshairsTool, DoubleTapFitToWindowTool, DragProbeTool, EraserTool, FreehandRoiSculptorTool, MagnifyTool, OverlayTool, OrientationMarkersTool, PanMultiTouchTool, PanTool, ReferenceLinesTool, RotateTool, RotateTouchTool, ScaleOverlayTool, StackScrollMouseWheelTool, StackScrollMultiTouchTool, StackScrollTool, WwwcRegionTool, WwwcTool, ZoomMouseWheelTool, ZoomTool, ZoomTouchPinchTool, init, stackPrefetch, stackRenderers, playClip, stopClip, store, getModule, getToolForElement, addTool, addToolForElement, removeTool, removeToolForElement, setToolOptions, setToolOptionsForElement, isToolActiveForElement, setToolActive, setToolActiveForElement, setToolEnabled, setToolEnabledForElement, setToolDisabled, setToolDisabledForElement, setToolPassive, setToolPassiveForElement, addToolState, getToolState, removeToolState, clearToolState, setElementToolStateManager, getElementToolStateManager, textStyle, toolStyle, toolColors, toolCoordinates, stackSpecificStateManager, newStackSpecificToolStateManager, addStackStateManager, loadHandlerManager, newImageIdSpecificToolStateManager, globalImageIdSpecificToolStateManager, newFrameOfReferenceSpecificToolStateManager, globalFrameOfReferenceSpecificToolStateManager, forceEnabledElementResize, orientation, SaveAs, enableLogger, disableLogger, register, registerSome, wwwcSynchronizer, updateImageSynchronizer, Synchronizer, stackScrollSynchronizer, stackImagePositionSynchronizer, stackImagePositionOffsetSynchronizer, stackImageIndexSynchronizer, panZoomSynchronizer, importInternal, external, EVENTS, version, import, default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_279576__) {

"use strict";
__nested_webpack_require_279576__.r(__nested_webpack_exports__);
/* harmony import */ var _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_279576__(/*! ./tools/annotation/index.js */ "./tools/annotation/index.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "AngleTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["AngleTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "ArrowAnnotateTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["ArrowAnnotateTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "BidirectionalTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["BidirectionalTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "CircleRoiTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["CircleRoiTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "CobbAngleTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["CobbAngleTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "EllipticalRoiTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["EllipticalRoiTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "FreehandRoiTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["FreehandRoiTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "LengthTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["LengthTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "ProbeTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["ProbeTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "RectangleRoiTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["RectangleRoiTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "TextMarkerTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["TextMarkerTool"]; });

/* harmony import */ var _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_279576__(/*! ./tools/segmentation/index.js */ "./tools/segmentation/index.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "BrushTool", function() { return _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["BrushTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "SphericalBrushTool", function() { return _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["SphericalBrushTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "RectangleScissorsTool", function() { return _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["RectangleScissorsTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "FreehandScissorsTool", function() { return _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["FreehandScissorsTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "CircleScissorsTool", function() { return _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["CircleScissorsTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "CorrectionScissorsTool", function() { return _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["CorrectionScissorsTool"]; });

/* harmony import */ var _tools_index_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_279576__(/*! ./tools/index.js */ "./tools/index.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "CrosshairsTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["CrosshairsTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "DoubleTapFitToWindowTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["DoubleTapFitToWindowTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "DragProbeTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["DragProbeTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "EraserTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["EraserTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "FreehandRoiSculptorTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["FreehandRoiSculptorTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "MagnifyTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["MagnifyTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "OverlayTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["OverlayTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "OrientationMarkersTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["OrientationMarkersTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "PanMultiTouchTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["PanMultiTouchTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "PanTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["PanTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "ReferenceLinesTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ReferenceLinesTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "RotateTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["RotateTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "RotateTouchTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["RotateTouchTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "ScaleOverlayTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ScaleOverlayTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "StackScrollMouseWheelTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["StackScrollMouseWheelTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "StackScrollMultiTouchTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["StackScrollMultiTouchTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "StackScrollTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["StackScrollTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "WwwcRegionTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["WwwcRegionTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "WwwcTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["WwwcTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "ZoomMouseWheelTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ZoomMouseWheelTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "ZoomTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ZoomTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "ZoomTouchPinchTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ZoomTouchPinchTool"]; });

/* harmony import */ var _init_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_279576__(/*! ./init.js */ "./init.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "init", function() { return _init_js__WEBPACK_IMPORTED_MODULE_3__["default"]; });

/* harmony import */ var _stackTools_stackPrefetch_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_279576__(/*! ./stackTools/stackPrefetch.js */ "./stackTools/stackPrefetch.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "stackPrefetch", function() { return _stackTools_stackPrefetch_js__WEBPACK_IMPORTED_MODULE_4__["default"]; });

/* harmony import */ var _stackTools_stackRenderers_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_279576__(/*! ./stackTools/stackRenderers.js */ "./stackTools/stackRenderers.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "stackRenderers", function() { return _stackTools_stackRenderers_js__WEBPACK_IMPORTED_MODULE_5__["default"]; });

/* harmony import */ var _stackTools_playClip_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_279576__(/*! ./stackTools/playClip.js */ "./stackTools/playClip.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "playClip", function() { return _stackTools_playClip_js__WEBPACK_IMPORTED_MODULE_6__["playClip"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "stopClip", function() { return _stackTools_playClip_js__WEBPACK_IMPORTED_MODULE_6__["stopClip"]; });

/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_279576__(/*! ./store/index.js */ "./store/index.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "store", function() { return _store_index_js__WEBPACK_IMPORTED_MODULE_7__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "getModule", function() { return _store_index_js__WEBPACK_IMPORTED_MODULE_7__["getModule"]; });

/* harmony import */ var _store_getToolForElement_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_279576__(/*! ./store/getToolForElement.js */ "./store/getToolForElement.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "getToolForElement", function() { return _store_getToolForElement_js__WEBPACK_IMPORTED_MODULE_8__["default"]; });

/* harmony import */ var _store_addTool_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_279576__(/*! ./store/addTool.js */ "./store/addTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "addTool", function() { return _store_addTool_js__WEBPACK_IMPORTED_MODULE_9__["addTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "addToolForElement", function() { return _store_addTool_js__WEBPACK_IMPORTED_MODULE_9__["addToolForElement"]; });

/* harmony import */ var _store_removeTool_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_279576__(/*! ./store/removeTool.js */ "./store/removeTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "removeTool", function() { return _store_removeTool_js__WEBPACK_IMPORTED_MODULE_10__["removeTool"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "removeToolForElement", function() { return _store_removeTool_js__WEBPACK_IMPORTED_MODULE_10__["removeToolForElement"]; });

/* harmony import */ var _store_setToolOptions_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_279576__(/*! ./store/setToolOptions.js */ "./store/setToolOptions.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "setToolOptions", function() { return _store_setToolOptions_js__WEBPACK_IMPORTED_MODULE_11__["setToolOptions"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "setToolOptionsForElement", function() { return _store_setToolOptions_js__WEBPACK_IMPORTED_MODULE_11__["setToolOptionsForElement"]; });

/* harmony import */ var _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_279576__(/*! ./store/setToolMode.js */ "./store/setToolMode.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "setToolActive", function() { return _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolActive"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "setToolActiveForElement", function() { return _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolActiveForElement"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "setToolEnabled", function() { return _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolEnabled"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "setToolEnabledForElement", function() { return _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolEnabledForElement"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "setToolDisabled", function() { return _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolDisabled"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "setToolDisabledForElement", function() { return _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolDisabledForElement"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "setToolPassive", function() { return _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolPassive"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "setToolPassiveForElement", function() { return _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolPassiveForElement"]; });

/* harmony import */ var _store_isToolActiveForElement__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_279576__(/*! ./store/isToolActiveForElement */ "./store/isToolActiveForElement.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "isToolActiveForElement", function() { return _store_isToolActiveForElement__WEBPACK_IMPORTED_MODULE_13__["default"]; });

/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_279576__(/*! ./stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "addToolState", function() { return _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["addToolState"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "getToolState", function() { return _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["getToolState"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "removeToolState", function() { return _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["removeToolState"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "clearToolState", function() { return _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["clearToolState"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "setElementToolStateManager", function() { return _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["setElementToolStateManager"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "getElementToolStateManager", function() { return _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["getElementToolStateManager"]; });

/* harmony import */ var _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_279576__(/*! ./stateManagement/textStyle.js */ "./stateManagement/textStyle.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "textStyle", function() { return _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_15__["default"]; });

/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_279576__(/*! ./stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "toolStyle", function() { return _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_16__["default"]; });

/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_279576__(/*! ./stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "toolColors", function() { return _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_17__["default"]; });

/* harmony import */ var _stateManagement_toolCoordinates_js__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_279576__(/*! ./stateManagement/toolCoordinates.js */ "./stateManagement/toolCoordinates.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "toolCoordinates", function() { return _stateManagement_toolCoordinates_js__WEBPACK_IMPORTED_MODULE_18__["default"]; });

/* harmony import */ var _stateManagement_stackSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_279576__(/*! ./stateManagement/stackSpecificStateManager.js */ "./stateManagement/stackSpecificStateManager.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "stackSpecificStateManager", function() { return _stateManagement_stackSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_19__["stackSpecificStateManager"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "newStackSpecificToolStateManager", function() { return _stateManagement_stackSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_19__["newStackSpecificToolStateManager"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "addStackStateManager", function() { return _stateManagement_stackSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_19__["addStackStateManager"]; });

/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_279576__(/*! ./stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "loadHandlerManager", function() { return _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_20__["default"]; });

/* harmony import */ var _stateManagement_imageIdSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_21__ = __nested_webpack_require_279576__(/*! ./stateManagement/imageIdSpecificStateManager.js */ "./stateManagement/imageIdSpecificStateManager.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "newImageIdSpecificToolStateManager", function() { return _stateManagement_imageIdSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_21__["newImageIdSpecificToolStateManager"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "globalImageIdSpecificToolStateManager", function() { return _stateManagement_imageIdSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_21__["globalImageIdSpecificToolStateManager"]; });

/* harmony import */ var _stateManagement_frameOfReferenceStateManager_js__WEBPACK_IMPORTED_MODULE_22__ = __nested_webpack_require_279576__(/*! ./stateManagement/frameOfReferenceStateManager.js */ "./stateManagement/frameOfReferenceStateManager.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "newFrameOfReferenceSpecificToolStateManager", function() { return _stateManagement_frameOfReferenceStateManager_js__WEBPACK_IMPORTED_MODULE_22__["newFrameOfReferenceSpecificToolStateManager"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "globalFrameOfReferenceSpecificToolStateManager", function() { return _stateManagement_frameOfReferenceStateManager_js__WEBPACK_IMPORTED_MODULE_22__["globalFrameOfReferenceSpecificToolStateManager"]; });

/* harmony import */ var _eventListeners_windowResizeHandler_js__WEBPACK_IMPORTED_MODULE_23__ = __nested_webpack_require_279576__(/*! ./eventListeners/windowResizeHandler.js */ "./eventListeners/windowResizeHandler.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "forceEnabledElementResize", function() { return _eventListeners_windowResizeHandler_js__WEBPACK_IMPORTED_MODULE_23__["forceEnabledElementResize"]; });

/* harmony import */ var _orientation_index_js__WEBPACK_IMPORTED_MODULE_24__ = __nested_webpack_require_279576__(/*! ./orientation/index.js */ "./orientation/index.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "orientation", function() { return _orientation_index_js__WEBPACK_IMPORTED_MODULE_24__["default"]; });

/* harmony import */ var _util_SaveAs_js__WEBPACK_IMPORTED_MODULE_25__ = __nested_webpack_require_279576__(/*! ./util/SaveAs.js */ "./util/SaveAs.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "SaveAs", function() { return _util_SaveAs_js__WEBPACK_IMPORTED_MODULE_25__["default"]; });

/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_26__ = __nested_webpack_require_279576__(/*! ./util/logger.js */ "./util/logger.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "enableLogger", function() { return _util_logger_js__WEBPACK_IMPORTED_MODULE_26__["enable"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "disableLogger", function() { return _util_logger_js__WEBPACK_IMPORTED_MODULE_26__["disable"]; });

/* harmony import */ var _thirdParty_register_js__WEBPACK_IMPORTED_MODULE_27__ = __nested_webpack_require_279576__(/*! ./thirdParty/register.js */ "./thirdParty/register.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "register", function() { return _thirdParty_register_js__WEBPACK_IMPORTED_MODULE_27__["default"]; });

/* harmony import */ var _thirdParty_registerSome_js__WEBPACK_IMPORTED_MODULE_28__ = __nested_webpack_require_279576__(/*! ./thirdParty/registerSome.js */ "./thirdParty/registerSome.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "registerSome", function() { return _thirdParty_registerSome_js__WEBPACK_IMPORTED_MODULE_28__["default"]; });

/* harmony import */ var _synchronization_wwwcSynchronizer_js__WEBPACK_IMPORTED_MODULE_29__ = __nested_webpack_require_279576__(/*! ./synchronization/wwwcSynchronizer.js */ "./synchronization/wwwcSynchronizer.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "wwwcSynchronizer", function() { return _synchronization_wwwcSynchronizer_js__WEBPACK_IMPORTED_MODULE_29__["default"]; });

/* harmony import */ var _synchronization_updateImageSynchronizer_js__WEBPACK_IMPORTED_MODULE_30__ = __nested_webpack_require_279576__(/*! ./synchronization/updateImageSynchronizer.js */ "./synchronization/updateImageSynchronizer.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "updateImageSynchronizer", function() { return _synchronization_updateImageSynchronizer_js__WEBPACK_IMPORTED_MODULE_30__["default"]; });

/* harmony import */ var _synchronization_Synchronizer_js__WEBPACK_IMPORTED_MODULE_31__ = __nested_webpack_require_279576__(/*! ./synchronization/Synchronizer.js */ "./synchronization/Synchronizer.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "Synchronizer", function() { return _synchronization_Synchronizer_js__WEBPACK_IMPORTED_MODULE_31__["default"]; });

/* harmony import */ var _synchronization_stackScrollSynchronizer_js__WEBPACK_IMPORTED_MODULE_32__ = __nested_webpack_require_279576__(/*! ./synchronization/stackScrollSynchronizer.js */ "./synchronization/stackScrollSynchronizer.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "stackScrollSynchronizer", function() { return _synchronization_stackScrollSynchronizer_js__WEBPACK_IMPORTED_MODULE_32__["default"]; });

/* harmony import */ var _synchronization_stackImagePositionSynchronizer_js__WEBPACK_IMPORTED_MODULE_33__ = __nested_webpack_require_279576__(/*! ./synchronization/stackImagePositionSynchronizer.js */ "./synchronization/stackImagePositionSynchronizer.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "stackImagePositionSynchronizer", function() { return _synchronization_stackImagePositionSynchronizer_js__WEBPACK_IMPORTED_MODULE_33__["default"]; });

/* harmony import */ var _synchronization_stackImagePositionOffsetSynchronizer_js__WEBPACK_IMPORTED_MODULE_34__ = __nested_webpack_require_279576__(/*! ./synchronization/stackImagePositionOffsetSynchronizer.js */ "./synchronization/stackImagePositionOffsetSynchronizer.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "stackImagePositionOffsetSynchronizer", function() { return _synchronization_stackImagePositionOffsetSynchronizer_js__WEBPACK_IMPORTED_MODULE_34__["default"]; });

/* harmony import */ var _synchronization_stackImageIndexSynchronizer_js__WEBPACK_IMPORTED_MODULE_35__ = __nested_webpack_require_279576__(/*! ./synchronization/stackImageIndexSynchronizer.js */ "./synchronization/stackImageIndexSynchronizer.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "stackImageIndexSynchronizer", function() { return _synchronization_stackImageIndexSynchronizer_js__WEBPACK_IMPORTED_MODULE_35__["default"]; });

/* harmony import */ var _synchronization_panZoomSynchronizer_js__WEBPACK_IMPORTED_MODULE_36__ = __nested_webpack_require_279576__(/*! ./synchronization/panZoomSynchronizer.js */ "./synchronization/panZoomSynchronizer.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "panZoomSynchronizer", function() { return _synchronization_panZoomSynchronizer_js__WEBPACK_IMPORTED_MODULE_36__["default"]; });

/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_37__ = __nested_webpack_require_279576__(/*! ./externalModules.js */ "./externalModules.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "external", function() { return _externalModules_js__WEBPACK_IMPORTED_MODULE_37__["default"]; });

/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_38__ = __nested_webpack_require_279576__(/*! ./events.js */ "./events.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "EVENTS", function() { return _events_js__WEBPACK_IMPORTED_MODULE_38__["default"]; });

/* harmony import */ var _version_js__WEBPACK_IMPORTED_MODULE_39__ = __nested_webpack_require_279576__(/*! ./version.js */ "./version.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "version", function() { return _version_js__WEBPACK_IMPORTED_MODULE_39__["default"]; });

/* harmony import */ var _importInternal_js__WEBPACK_IMPORTED_MODULE_40__ = __nested_webpack_require_279576__(/*! ./importInternal.js */ "./importInternal.js");
/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "importInternal", function() { return _importInternal_js__WEBPACK_IMPORTED_MODULE_40__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_279576__.d(__nested_webpack_exports__, "import", function() { return _importInternal_js__WEBPACK_IMPORTED_MODULE_40__["default"]; });

/**
 * Root
 * @namespace CornerstoneTools
 */

/**
 * Drawing API to assist in consistent annotation creation
 * @namespace Drawing
 */

/**
 * Event dispatchers listen for events from `cornerstone` and `enabledElements`. Dispatchers
 * choose which tool(s) get to handle the event by looking at callbacks, priority, and other factors.
 * @private
 * @namespace EventDispatchers
 */

/**
 * Event listeners normalize events emitted by `cornerstone` and `enabledElements`. The listeners
 * then re-emit events prefixed with `cornerstonetools`. For example, `mousemove` becomes `cornerstonetoolsmousemove`.
 * Most of these events are caught by an `eventDispatcher`, and used to shape tool behavior.
 * @private
 * @namespace EventListeners
 */

/**
 * Manipulators describe a tool's `handle` behavior. Leveraging a small set of manipulators
 * allows us to create a consistent experience when interacting with tools via their handles.
 * @namespace Manipulators
 */

/**
 * Mixins are "tool beahviors" that can be added to a tool via its mixin
 * array configuration property
 * @namespace Mixins
 */

/**
 * StateManagement
 * @namespace StateManagement
 */

/**
 * Sync
 * @namespace Synchronization
 */

/**
 * Third party
 * @namespace ThirdParty
 */

/**
 * Tools
 * @namespace Tools
 */

/**
 * Tools that extend the {@link #Tools.Base.BaseAnnotationTool|`BaseAnnotationTool`}
 * @namespace Tools.Annotation
 */

/**
 * The parent (abstract) classes that all tools derive from.
 * @namespace Tools.Base
 */

/**
 * Tools that extend the {@link #Tools.Base.BaseBrushTool|`BaseBrushTool`}
 * @namespace Tools.Brush
 */

/**
 * Util
 * @namespace Util
 */



 // ~~~~~~ STACK TOOLS ~~~~~ //



 // ~~~~~~ STATE MANAGEMENT ~~~~~ //


















 // ~~~~~~ ORIENTATION  ~~~~~ //

 // ~~~~~~ CANVAS EXPORT  ~~~~~ //


 // ~~~~~~ THIRD PARTY SUPPORT  ~~~~~ //


 // ~~~~~~ SYNCHRONIZERS ~~~~~ //








 // ~~~~~~ REQUEST POOL MANAGER  ~~~~~ //





var cornerstoneTools = {
  // ~~~ TOOLS
  // ~ Annotation Tools
  AngleTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["AngleTool"],
  ArrowAnnotateTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["ArrowAnnotateTool"],
  BidirectionalTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["BidirectionalTool"],
  CircleRoiTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["CircleRoiTool"],
  CobbAngleTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["CobbAngleTool"],
  EllipticalRoiTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["EllipticalRoiTool"],
  FreehandRoiTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["FreehandRoiTool"],
  LengthTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["LengthTool"],
  ProbeTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["ProbeTool"],
  RectangleRoiTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["RectangleRoiTool"],
  TextMarkerTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["TextMarkerTool"],
  // ~ Segmentation Tools
  BrushTool: _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["BrushTool"],
  SphericalBrushTool: _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["SphericalBrushTool"],
  RectangleScissorsTool: _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["RectangleScissorsTool"],
  FreehandScissorsTool: _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["FreehandScissorsTool"],
  CircleScissorsTool: _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["CircleScissorsTool"],
  CorrectionScissorsTool: _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["CorrectionScissorsTool"],
  // ~ Tools
  CrosshairsTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["CrosshairsTool"],
  DoubleTapFitToWindowTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["DoubleTapFitToWindowTool"],
  DragProbeTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["DragProbeTool"],
  EraserTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["EraserTool"],
  FreehandRoiSculptorTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["FreehandRoiSculptorTool"],
  MagnifyTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["MagnifyTool"],
  OverlayTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["OverlayTool"],
  OrientationMarkersTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["OrientationMarkersTool"],
  PanMultiTouchTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["PanMultiTouchTool"],
  PanTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["PanTool"],
  ReferenceLinesTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ReferenceLinesTool"],
  RotateTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["RotateTool"],
  RotateTouchTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["RotateTouchTool"],
  ScaleOverlayTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ScaleOverlayTool"],
  StackScrollMouseWheelTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["StackScrollMouseWheelTool"],
  StackScrollMultiTouchTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["StackScrollMultiTouchTool"],
  StackScrollTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["StackScrollTool"],
  WwwcRegionTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["WwwcRegionTool"],
  WwwcTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["WwwcTool"],
  ZoomMouseWheelTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ZoomMouseWheelTool"],
  ZoomTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ZoomTool"],
  ZoomTouchPinchTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ZoomTouchPinchTool"],
  init: _init_js__WEBPACK_IMPORTED_MODULE_3__["default"],
  stackPrefetch: _stackTools_stackPrefetch_js__WEBPACK_IMPORTED_MODULE_4__["default"],
  stackRenderers: _stackTools_stackRenderers_js__WEBPACK_IMPORTED_MODULE_5__["default"],
  playClip: _stackTools_playClip_js__WEBPACK_IMPORTED_MODULE_6__["playClip"],
  stopClip: _stackTools_playClip_js__WEBPACK_IMPORTED_MODULE_6__["stopClip"],
  store: _store_index_js__WEBPACK_IMPORTED_MODULE_7__["default"],
  getModule: _store_index_js__WEBPACK_IMPORTED_MODULE_7__["getModule"],
  getToolForElement: _store_getToolForElement_js__WEBPACK_IMPORTED_MODULE_8__["default"],
  addTool: _store_addTool_js__WEBPACK_IMPORTED_MODULE_9__["addTool"],
  addToolForElement: _store_addTool_js__WEBPACK_IMPORTED_MODULE_9__["addToolForElement"],
  removeTool: _store_removeTool_js__WEBPACK_IMPORTED_MODULE_10__["removeTool"],
  removeToolForElement: _store_removeTool_js__WEBPACK_IMPORTED_MODULE_10__["removeToolForElement"],
  setToolOptions: _store_setToolOptions_js__WEBPACK_IMPORTED_MODULE_11__["setToolOptions"],
  setToolOptionsForElement: _store_setToolOptions_js__WEBPACK_IMPORTED_MODULE_11__["setToolOptionsForElement"],
  isToolActiveForElement: _store_isToolActiveForElement__WEBPACK_IMPORTED_MODULE_13__["default"],
  setToolActive: _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolActive"],
  setToolActiveForElement: _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolActiveForElement"],
  setToolEnabled: _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolEnabled"],
  setToolEnabledForElement: _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolEnabledForElement"],
  setToolDisabled: _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolDisabled"],
  setToolDisabledForElement: _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolDisabledForElement"],
  setToolPassive: _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolPassive"],
  setToolPassiveForElement: _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolPassiveForElement"],
  addToolState: _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["addToolState"],
  getToolState: _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["getToolState"],
  removeToolState: _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["removeToolState"],
  clearToolState: _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["clearToolState"],
  setElementToolStateManager: _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["setElementToolStateManager"],
  getElementToolStateManager: _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["getElementToolStateManager"],
  textStyle: _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_15__["default"],
  toolStyle: _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_16__["default"],
  toolColors: _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_17__["default"],
  toolCoordinates: _stateManagement_toolCoordinates_js__WEBPACK_IMPORTED_MODULE_18__["default"],
  stackSpecificStateManager: _stateManagement_stackSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_19__["stackSpecificStateManager"],
  newStackSpecificToolStateManager: _stateManagement_stackSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_19__["newStackSpecificToolStateManager"],
  addStackStateManager: _stateManagement_stackSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_19__["addStackStateManager"],
  loadHandlerManager: _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_20__["default"],
  newImageIdSpecificToolStateManager: _stateManagement_imageIdSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_21__["newImageIdSpecificToolStateManager"],
  globalImageIdSpecificToolStateManager: _stateManagement_imageIdSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_21__["globalImageIdSpecificToolStateManager"],
  newFrameOfReferenceSpecificToolStateManager: _stateManagement_frameOfReferenceStateManager_js__WEBPACK_IMPORTED_MODULE_22__["newFrameOfReferenceSpecificToolStateManager"],
  globalFrameOfReferenceSpecificToolStateManager: _stateManagement_frameOfReferenceStateManager_js__WEBPACK_IMPORTED_MODULE_22__["globalFrameOfReferenceSpecificToolStateManager"],
  forceEnabledElementResize: _eventListeners_windowResizeHandler_js__WEBPACK_IMPORTED_MODULE_23__["forceEnabledElementResize"],
  orientation: _orientation_index_js__WEBPACK_IMPORTED_MODULE_24__["default"],
  SaveAs: _util_SaveAs_js__WEBPACK_IMPORTED_MODULE_25__["default"],
  enableLogger: _util_logger_js__WEBPACK_IMPORTED_MODULE_26__["enable"],
  disableLogger: _util_logger_js__WEBPACK_IMPORTED_MODULE_26__["disable"],
  importInternal: _importInternal_js__WEBPACK_IMPORTED_MODULE_40__["default"],
  import: _importInternal_js__WEBPACK_IMPORTED_MODULE_40__["default"],
  register: _thirdParty_register_js__WEBPACK_IMPORTED_MODULE_27__["default"],
  registerSome: _thirdParty_registerSome_js__WEBPACK_IMPORTED_MODULE_28__["default"],
  wwwcSynchronizer: _synchronization_wwwcSynchronizer_js__WEBPACK_IMPORTED_MODULE_29__["default"],
  updateImageSynchronizer: _synchronization_updateImageSynchronizer_js__WEBPACK_IMPORTED_MODULE_30__["default"],
  Synchronizer: _synchronization_Synchronizer_js__WEBPACK_IMPORTED_MODULE_31__["default"],
  stackScrollSynchronizer: _synchronization_stackScrollSynchronizer_js__WEBPACK_IMPORTED_MODULE_32__["default"],
  stackImagePositionSynchronizer: _synchronization_stackImagePositionSynchronizer_js__WEBPACK_IMPORTED_MODULE_33__["default"],
  stackImagePositionOffsetSynchronizer: _synchronization_stackImagePositionOffsetSynchronizer_js__WEBPACK_IMPORTED_MODULE_34__["default"],
  stackImageIndexSynchronizer: _synchronization_stackImageIndexSynchronizer_js__WEBPACK_IMPORTED_MODULE_35__["default"],
  panZoomSynchronizer: _synchronization_panZoomSynchronizer_js__WEBPACK_IMPORTED_MODULE_36__["default"],
  external: _externalModules_js__WEBPACK_IMPORTED_MODULE_37__["default"],
  EVENTS: _events_js__WEBPACK_IMPORTED_MODULE_38__["default"],
  version: _version_js__WEBPACK_IMPORTED_MODULE_39__["default"]
}; // Named Exports



/* harmony default export */ __nested_webpack_exports__["default"] = (cornerstoneTools);

/***/ }),

/***/ "./init.js":
/*!*****************!*\
  !*** ./init.js ***!
  \*****************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_318280__) {

"use strict";
__nested_webpack_require_318280__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_318280__(/*! ./externalModules.js */ "./externalModules.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_318280__(/*! ./store/index.js */ "./store/index.js");
/* harmony import */ var _store_internals_addEnabledElement_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_318280__(/*! ./store/internals/addEnabledElement.js */ "./store/internals/addEnabledElement.js");
/* harmony import */ var _store_internals_removeEnabledElement_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_318280__(/*! ./store/internals/removeEnabledElement.js */ "./store/internals/removeEnabledElement.js");
/* harmony import */ var _eventListeners_windowResizeHandler_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_318280__(/*! ./eventListeners/windowResizeHandler.js */ "./eventListeners/windowResizeHandler.js");





/**
 * Merges the provided configuration with default values and returns a
 * configured CornerstoneTools instance.
 * @export
 * @public
 * @method
 * @name init
 *
 * @param {Object|Object[]} [defaultConfiguration = {}] The configuration to apply. Assumed globalConfiguration
 * only one value, otherwise moduleName, configuration entires in an array.
 * @returns {Object} A configured CornerstoneTools instance with top level API members.
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function () {
  var defaultConfiguration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

  _addCornerstoneEventListeners();

  _initModules();

  var globalConfigurationModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_1__["getModule"])('globalConfiguration');

  if (Array.isArray(defaultConfiguration)) {
    defaultConfiguration.forEach(function (configurationEntry) {
      var moduleName = configurationEntry.moduleName,
          configuration = configurationEntry.configuration;
      var module = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_1__["getModule"])(moduleName);

      if (module) {
        module.configuration = Object.assign({}, module.configuration, configuration);
      }
    });
  } else {
    // DefaultConfiguration is an object, default to assigning it to globalConfiguration.
    globalConfigurationModule.configuration = Object.assign({}, globalConfigurationModule.configuration, defaultConfiguration);
  }

  if (globalConfigurationModule.configuration.autoResizeViewports) {
    _eventListeners_windowResizeHandler_js__WEBPACK_IMPORTED_MODULE_4__["default"].enable();
  }
});
/**
 * Wires up event listeners for the Cornerstone#ElementDisabled and
 * Cornerstone#ElementEnabled events.
 * @private
 * @method
 * @returns {void}
 */

function _addCornerstoneEventListeners() {
  // Clear any listeners that may already be set
  _removeCornerstoneEventListeners();

  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone;
  var elementEnabledEvent = cornerstone.EVENTS.ELEMENT_ENABLED;
  var elementDisabledEvent = cornerstone.EVENTS.ELEMENT_DISABLED;
  cornerstone.events.addEventListener(elementEnabledEvent, _store_internals_addEnabledElement_js__WEBPACK_IMPORTED_MODULE_2__["default"]);
  cornerstone.events.addEventListener(elementDisabledEvent, _store_internals_removeEnabledElement_js__WEBPACK_IMPORTED_MODULE_3__["default"]);
}
/**
 * Removes event listeners for the Cornerstone#ElementDisabled and
 * Cornerstone#ElementEnabled events.
 * @private
 * @method
 * @returns {void}
 */


function _removeCornerstoneEventListeners() {
  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone;
  var elementEnabledEvent = cornerstone.EVENTS.ELEMENT_ENABLED;
  var elementDisabledEvent = cornerstone.EVENTS.ELEMENT_DISABLED;
  cornerstone.events.removeEventListener(elementEnabledEvent, _store_internals_addEnabledElement_js__WEBPACK_IMPORTED_MODULE_2__["default"]);
  cornerstone.events.removeEventListener(elementDisabledEvent, _store_internals_removeEnabledElement_js__WEBPACK_IMPORTED_MODULE_3__["default"]);
}
/*
 * TODO: This could cause issues if the module was already initialized for
 * the store. As there's nothing stopping implementers from calling `init`
 * multiple times. Modules should self-check if they have already been
 * registered to prevent issues.
 */

/**
 * Iterate over our store's modules. If the module has an `onRegisterCallback`
 * call it. This hook can be used to setup any global store requirements per
 * module.
 * @private
 * @method
 * @returns {void}
 */


function _initModules() {
  var modules = _store_index_js__WEBPACK_IMPORTED_MODULE_1__["default"].modules;
  Object.keys(modules).forEach(function (key) {
    if (typeof modules[key].onRegisterCallback === 'function') {
      modules[key].onRegisterCallback();
    }
  });
}

/***/ }),

/***/ "./lib.js":
/*!****************!*\
  !*** ./lib.js ***!
  \****************/
/*! exports provided: lib */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_323366__) {

"use strict";
__nested_webpack_require_323366__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_323366__.d(__nested_webpack_exports__, "lib", function() { return lib; });
/* harmony import */ var _tools_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_323366__(/*! ./tools/base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _tools_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_323366__(/*! ./tools/base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _tools_base_BaseBrushTool_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_323366__(/*! ./tools/base/BaseBrushTool.js */ "./tools/base/BaseBrushTool.js");
/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_323366__(/*! ./manipulators/index.js */ "./manipulators/index.js");
/* harmony import */ var _util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_323366__(/*! ./util/findAndMoveHelpers.js */ "./util/findAndMoveHelpers.js");
/* harmony import */ var _mixins_index_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_323366__(/*! ./mixins/index.js */ "./mixins/index.js");
/* harmony import */ var _tools_cursors_index_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_323366__(/*! ./tools/cursors/index.js */ "./tools/cursors/index.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_323366__(/*! ./drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_323366__(/*! ./util/clip.js */ "./util/clip.js");
/* harmony import */ var _util_debounce__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_323366__(/*! ./util/debounce */ "./util/debounce.js");
/* harmony import */ var _util_deepmerge__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_323366__(/*! ./util/deepmerge */ "./util/deepmerge.js");
/* harmony import */ var _util_getDefault__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_323366__(/*! ./util/getDefault */ "./util/getDefault.js");
/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_323366__(/*! ./util/getPixelSpacing */ "./util/getPixelSpacing.js");
/* harmony import */ var _util_isEmptyObject__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_323366__(/*! ./util/isEmptyObject */ "./util/isEmptyObject.js");
/* harmony import */ var _util_isObject__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_323366__(/*! ./util/isObject */ "./util/isObject.js");
/* harmony import */ var _util_isPointInImage__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_323366__(/*! ./util/isPointInImage */ "./util/isPointInImage.js");
/* harmony import */ var _util_isPointInPolygon__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_323366__(/*! ./util/isPointInPolygon */ "./util/isPointInPolygon.js");
/* harmony import */ var _util_throttle__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_323366__(/*! ./util/throttle */ "./util/throttle.js");
/* harmony import */ var _util_wait__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_323366__(/*! ./util/wait */ "./util/wait.js");
/* harmony import */ var _util_getKeyPressData__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_323366__(/*! ./util/getKeyPressData */ "./util/getKeyPressData.js");
/* harmony import */ var _util_getProximityThreshold_js__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_323366__(/*! ./util/getProximityThreshold.js */ "./util/getProximityThreshold.js");
/* harmony import */ var _drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_21__ = __nested_webpack_require_323366__(/*! ./drawing/drawTextBox.js */ "./drawing/drawTextBox.js");
/* harmony import */ var _drawing_drawArrow_js__WEBPACK_IMPORTED_MODULE_22__ = __nested_webpack_require_323366__(/*! ./drawing/drawArrow.js */ "./drawing/drawArrow.js");
/* harmony import */ var _drawing_drawLink_js__WEBPACK_IMPORTED_MODULE_23__ = __nested_webpack_require_323366__(/*! ./drawing/drawLink.js */ "./drawing/drawLink.js");
/* harmony import */ var _drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_24__ = __nested_webpack_require_323366__(/*! ./drawing/drawLinkedTextBox.js */ "./drawing/drawLinkedTextBox.js");
/* harmony import */ var _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_25__ = __nested_webpack_require_323366__(/*! ./drawing/drawHandles.js */ "./drawing/drawHandles.js");
/* harmony import */ var _util_getActiveTool__WEBPACK_IMPORTED_MODULE_26__ = __nested_webpack_require_323366__(/*! ./util/getActiveTool */ "./util/getActiveTool.js");
/* harmony import */ var _util_getLuminance_js__WEBPACK_IMPORTED_MODULE_27__ = __nested_webpack_require_323366__(/*! ./util/getLuminance.js */ "./util/getLuminance.js");
/* harmony import */ var _util_getROITextBoxCoords__WEBPACK_IMPORTED_MODULE_28__ = __nested_webpack_require_323366__(/*! ./util/getROITextBoxCoords */ "./util/getROITextBoxCoords.js");
/* harmony import */ var _util_copyPoints_js__WEBPACK_IMPORTED_MODULE_29__ = __nested_webpack_require_323366__(/*! ./util/copyPoints.js */ "./util/copyPoints.js");
/* harmony import */ var _util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_30__ = __nested_webpack_require_323366__(/*! ./util/calculateSUV.js */ "./util/calculateSUV.js");
/* harmony import */ var _util_setContextToDisplayFontSize_js__WEBPACK_IMPORTED_MODULE_31__ = __nested_webpack_require_323366__(/*! ./util/setContextToDisplayFontSize.js */ "./util/setContextToDisplayFontSize.js");
/* harmony import */ var _util_scrollToIndex_js__WEBPACK_IMPORTED_MODULE_32__ = __nested_webpack_require_323366__(/*! ./util/scrollToIndex.js */ "./util/scrollToIndex.js");
/* harmony import */ var _util_scroll_js__WEBPACK_IMPORTED_MODULE_33__ = __nested_webpack_require_323366__(/*! ./util/scroll.js */ "./util/scroll.js");
/* harmony import */ var _util_roundToDecimal_js__WEBPACK_IMPORTED_MODULE_34__ = __nested_webpack_require_323366__(/*! ./util/roundToDecimal.js */ "./util/roundToDecimal.js");
/* harmony import */ var _util_pointProjector_js__WEBPACK_IMPORTED_MODULE_35__ = __nested_webpack_require_323366__(/*! ./util/pointProjector.js */ "./util/pointProjector.js");
/* harmony import */ var _util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_36__ = __nested_webpack_require_323366__(/*! ./util/lineSegDistance.js */ "./util/lineSegDistance.js");
/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_37__ = __nested_webpack_require_323366__(/*! ./util/logger */ "./util/logger.js");
/* harmony import */ var _util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_38__ = __nested_webpack_require_323366__(/*! ./util/pointInsideBoundingBox.js */ "./util/pointInsideBoundingBox.js");
/* harmony import */ var _util_makeUnselectable_js__WEBPACK_IMPORTED_MODULE_39__ = __nested_webpack_require_323366__(/*! ./util/makeUnselectable.js */ "./util/makeUnselectable.js");
/* harmony import */ var _util_getRGBPixels_js__WEBPACK_IMPORTED_MODULE_40__ = __nested_webpack_require_323366__(/*! ./util/getRGBPixels.js */ "./util/getRGBPixels.js");
/* harmony import */ var _util_getMaxSimultaneousRequests_js__WEBPACK_IMPORTED_MODULE_41__ = __nested_webpack_require_323366__(/*! ./util/getMaxSimultaneousRequests.js */ "./util/getMaxSimultaneousRequests.js");
/* harmony import */ var _util_angleBetweenPoints_js__WEBPACK_IMPORTED_MODULE_42__ = __nested_webpack_require_323366__(/*! ./util/angleBetweenPoints.js */ "./util/angleBetweenPoints.js");
/* harmony import */ var _util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_43__ = __nested_webpack_require_323366__(/*! ./util/numbersWithCommas.js */ "./util/numbersWithCommas.js");
/* harmony import */ var _tools_cursors_MouseCursor_js__WEBPACK_IMPORTED_MODULE_44__ = __nested_webpack_require_323366__(/*! ./tools/cursors/MouseCursor.js */ "./tools/cursors/MouseCursor.js");
/* harmony import */ var _util_ellipse_index_js__WEBPACK_IMPORTED_MODULE_45__ = __nested_webpack_require_323366__(/*! ./util/ellipse/index.js */ "./util/ellipse/index.js");
/* harmony import */ var _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_46__ = __nested_webpack_require_323366__(/*! ./util/freehand/index.js */ "./util/freehand/index.js");
/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_47__ = __nested_webpack_require_323366__(/*! ./util/segmentation */ "./util/segmentation/index.js");
/* harmony import */ var _util_zoom_index_js__WEBPACK_IMPORTED_MODULE_48__ = __nested_webpack_require_323366__(/*! ./util/zoom/index.js */ "./util/zoom/index.js");
/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_49__ = __nested_webpack_require_323366__(/*! ./util/triggerEvent.js */ "./util/triggerEvent.js");
/* harmony import */ var _util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_50__ = __nested_webpack_require_323366__(/*! ./util/convertToVector3.js */ "./util/convertToVector3.js");



















































var lib = {
  'base/BaseTool': _tools_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_0__["default"],
  'base/BaseAnnotationTool': _tools_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_1__["default"],
  'base/BaseBrushTool': _tools_base_BaseBrushTool_js__WEBPACK_IMPORTED_MODULE_2__["default"],
  'tools/cursors/MouseCursor': _tools_cursors_MouseCursor_js__WEBPACK_IMPORTED_MODULE_44__["default"],
  'tools/cursors': _tools_cursors_index_js__WEBPACK_IMPORTED_MODULE_6__,
  'manipulators/anyHandlesOutsideImage': _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["anyHandlesOutsideImage"],
  'manipulators/getHandleNearImagePoint': _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["getHandleNearImagePoint"],
  'manipulators/getHandlePixelPosition': _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["getHandlePixelPosition"],
  'manipulators/handleActivator': _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["handleActivator"],
  'manipulators/moveAllHandles': _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["moveAllHandles"],
  'manipulators/moveHandle': _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["moveHandle"],
  'manipulators/moveNewHandle': _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["moveNewHandle"],
  'manipulators/moveHandleNearImagePoint': _util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_4__["moveHandleNearImagePoint"],
  'manipulators/findHandleDataNearImagePoint': _util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_4__["findHandleDataNearImagePoint"],
  'manipulators/moveAnnotation': _util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_4__["moveAnnotation"],
  'mixins/activeOrDisabledBinaryTool': _mixins_index_js__WEBPACK_IMPORTED_MODULE_5__["default"].activeOrDisabledBinaryTool,
  'mixins/enabledOrDisabledBinaryTool': _mixins_index_js__WEBPACK_IMPORTED_MODULE_5__["default"].enabledOrDisabledBinaryTool,
  'drawing/getNewContext': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["getNewContext"],
  'drawing/draw': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["draw"],
  'drawing/path': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["path"],
  'drawing/setShadow': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["setShadow"],
  'drawing/drawLine': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawLine"],
  'drawing/drawLines': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawLines"],
  'drawing/drawJoinedLines': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawJoinedLines"],
  'drawing/drawCircle': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawCircle"],
  'drawing/drawEllipse': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawEllipse"],
  'drawing/drawRect': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawRect"],
  'drawing/fillOutsideRect': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["fillOutsideRect"],
  'drawing/drawTextBox': _drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_21__["default"],
  'drawing/drawArrow': _drawing_drawArrow_js__WEBPACK_IMPORTED_MODULE_22__["default"],
  'drawing/fillBox': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["fillBox"],
  'drawing/fillTextLines': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["fillTextLines"],
  'drawing/drawLink': _drawing_drawLink_js__WEBPACK_IMPORTED_MODULE_23__["default"],
  'drawing/drawLinkedTextBox': _drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_24__["default"],
  'drawing/drawHandles': _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_25__["default"],
  'drawing/textBoxWidth': _drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_21__["textBoxWidth"],
  'util/getActiveTool': _util_getActiveTool__WEBPACK_IMPORTED_MODULE_26__["default"],
  'util/getLuminance': _util_getLuminance_js__WEBPACK_IMPORTED_MODULE_27__["default"],
  'util/getROITextBoxCoords': _util_getROITextBoxCoords__WEBPACK_IMPORTED_MODULE_28__["default"],
  'util/copyPoints': _util_copyPoints_js__WEBPACK_IMPORTED_MODULE_29__["default"],
  'util/calculateSUV': _util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_30__["default"],
  'util/setContextToDisplayFontSize': _util_setContextToDisplayFontSize_js__WEBPACK_IMPORTED_MODULE_31__["default"],
  'util/scrollToIndex': _util_scrollToIndex_js__WEBPACK_IMPORTED_MODULE_32__["default"],
  'util/scroll': _util_scroll_js__WEBPACK_IMPORTED_MODULE_33__["default"],
  'util/roundToDecimal': _util_roundToDecimal_js__WEBPACK_IMPORTED_MODULE_34__["default"],
  'util/projectPatientPointToImagePlane': _util_pointProjector_js__WEBPACK_IMPORTED_MODULE_35__["projectPatientPointToImagePlane"],
  'util/imagePointToPatientPoint': _util_pointProjector_js__WEBPACK_IMPORTED_MODULE_35__["imagePointToPatientPoint"],
  'util/planePlaneIntersection': _util_pointProjector_js__WEBPACK_IMPORTED_MODULE_35__["planePlaneIntersection"],
  'util/pointInsideBoundingBox': _util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_38__["default"],
  'util/makeUnselectable': _util_makeUnselectable_js__WEBPACK_IMPORTED_MODULE_39__["default"],
  'util/getRGBPixels': _util_getRGBPixels_js__WEBPACK_IMPORTED_MODULE_40__["default"],
  'util/getBrowserInfo': _util_getMaxSimultaneousRequests_js__WEBPACK_IMPORTED_MODULE_41__["getBrowserInfo"],
  'util/isMobileDevice': _util_getMaxSimultaneousRequests_js__WEBPACK_IMPORTED_MODULE_41__["isMobileDevice"],
  'util/angleBetweenPoints': _util_angleBetweenPoints_js__WEBPACK_IMPORTED_MODULE_42__["default"],
  'util/numbersWithCommas': _util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_43__["default"],
  'util/lineSegDistance': _util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_36__["default"],
  'util/triggerEvent': _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_49__["default"],
  'util/convertToVector3': _util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_50__["default"],
  'util/clip': _util_clip_js__WEBPACK_IMPORTED_MODULE_8__["clip"],
  'util/clipToBox': _util_clip_js__WEBPACK_IMPORTED_MODULE_8__["clipToBox"],
  'util/clipBoxToDisplayedArea': _util_clip_js__WEBPACK_IMPORTED_MODULE_8__["clipBoxToDisplayedArea"],
  'util/debounce': _util_debounce__WEBPACK_IMPORTED_MODULE_9__["default"],
  'util/deepmerge': _util_deepmerge__WEBPACK_IMPORTED_MODULE_10__["default"],
  'util/getDefault': _util_getDefault__WEBPACK_IMPORTED_MODULE_11__["default"],
  'util/getProximityThreshold': _util_getProximityThreshold_js__WEBPACK_IMPORTED_MODULE_20__["default"],
  'util/getPixelSpacing': _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_12__["default"],
  'util/isEmptyObject': _util_isEmptyObject__WEBPACK_IMPORTED_MODULE_13__["default"],
  'util/isObject': _util_isObject__WEBPACK_IMPORTED_MODULE_14__["default"],
  'util/isPointInImage': _util_isPointInImage__WEBPACK_IMPORTED_MODULE_15__["default"],
  'util/isPointInPolygon': _util_isPointInPolygon__WEBPACK_IMPORTED_MODULE_16__["default"],
  'util/getLogger': _util_logger__WEBPACK_IMPORTED_MODULE_37__["getLogger"],
  'util/throttle': _util_throttle__WEBPACK_IMPORTED_MODULE_17__["default"],
  'util/wait': _util_wait__WEBPACK_IMPORTED_MODULE_18__["wait"],
  'util/waitForEnabledElementImageToLoad': _util_wait__WEBPACK_IMPORTED_MODULE_18__["waitForEnabledElementImageToLoad"],
  'util/getKeyPressData': _util_getKeyPressData__WEBPACK_IMPORTED_MODULE_19__["default"],
  // Whole tool specific util packages
  'util/ellipseUtils': _util_ellipse_index_js__WEBPACK_IMPORTED_MODULE_45__["default"],
  'util/freehandUtils': _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_46__["default"],
  'util/segmentationUtils': _util_segmentation__WEBPACK_IMPORTED_MODULE_47__,
  'util/zoomUtils': _util_zoom_index_js__WEBPACK_IMPORTED_MODULE_48__["default"]
};

/***/ }),

/***/ "./manipulators/anyHandlesOutsideImage.js":
/*!************************************************!*\
  !*** ./manipulators/anyHandlesOutsideImage.js ***!
  \************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_339553__) {

"use strict";
__nested_webpack_require_339553__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_339553__(/*! ../externalModules.js */ "./externalModules.js");

/**
 * Determine if a handle is outside the bounds of the rendered image.
 * @public
 * @function anyHandlesOutsideImage
 * @memberof Manipulators
 *
 * @param {*} renderData - Cornerstone Tool's event detail
 * @param {Object} handles - An object containing named handles
 * @returns {Boolean} - True if the handle was placed outside the image
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (renderData, handles) {
  var image = renderData.image;
  var imageRect = {
    left: 0,
    top: 0,
    width: image.width,
    height: image.height
  };
  var handleOutsideImage = false;
  Object.keys(handles).forEach(function (name) {
    var handle = handles[name];

    if (handle.allowedOutsideImage === true) {
      return;
    }

    if (_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.insideRect(handle, imageRect) === false) {
      handleOutsideImage = true;
    }
  });
  return handleOutsideImage;
});

/***/ }),

/***/ "./manipulators/getHandleNearImagePoint.js":
/*!*************************************************!*\
  !*** ./manipulators/getHandleNearImagePoint.js ***!
  \*************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_341063__) {

"use strict";
__nested_webpack_require_341063__.r(__nested_webpack_exports__);
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_341063__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js");
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_341063__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_341063__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_341063__(/*! ../util/pointInsideBoundingBox.js */ "./util/pointInsideBoundingBox.js");



/**
 * Returns the first handle found to be near the provided point. Handles to search can be an array of handles, an
 * object of named handles, or an object of named handles AND named arrays of handles.
 *
 * @public
 * @function getHandleNearImagePoint
 * @memberof Manipulators
 *
 * @param {*} element - Target enabledElement
 * @param {(Array|Object)} handles - An arry of handles, object with named handles, or object with named handles AND named arrays of handles
 * @param {Object} coords - The coordinates to measure from when determining distance from handles
 * @param {number} distanceThreshold - minimum distance handle needs to be from provided coords
 * @returns {Object} Handle
 */

var getHandleNearImagePoint = function getHandleNearImagePoint(element, handles, coords, distanceThreshold) {
  var nearbyHandle;

  if (!handles) {
    return;
  }

  if (Array.isArray(handles)) {
    var handleKeys = Object.keys(handles);

    for (var i = 0; i < handleKeys.length; i++) {
      var key = handleKeys[i];
      var handle = handles[key];

      if ( // Not a true handle
      !handle.hasOwnProperty('x') || !handle.hasOwnProperty('y')) {
        continue;
      }

      if (_isHandleNearImagePoint(handle, element, coords, distanceThreshold)) {
        nearbyHandle = handle;
        break;
      }
    }
  } else if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(handles) === 'object') {
    var _handleKeys = Object.keys(handles);

    for (var _i = 0; _i < _handleKeys.length; _i++) {
      var handleName = _handleKeys[_i];

      if (Array.isArray(handles[handleName])) {
        nearbyHandle = getHandleNearImagePoint(element, handles[handleName], coords, distanceThreshold);

        if (nearbyHandle) {
          break;
        }
      } else {
        var _handle = handles[handleName];

        if (_isHandleNearImagePoint(_handle, element, coords, distanceThreshold)) {
          nearbyHandle = _handle;
          break;
        }
      }
    }
  }

  return nearbyHandle;
};
/**
 * Determines if the handle is less than the provided distance from the  provided coordinates
 * @private
 * @function _isHandleNearImagePoint
 *
 * @param {*} handle
 * @param {*} element
 * @param {*} coords
 * @param {*} distanceThreshold
 * @returns {boolean} true if handles is near image point
 */


var _isHandleNearImagePoint = function _isHandleNearImagePoint(handle, element, coords, distanceThreshold) {
  if (handle.hasOwnProperty('pointNearHandle')) {
    if (handle.pointNearHandle(element, handle, coords)) {
      return true;
    }
  } else if (handle.hasBoundingBox === true) {
    if (Object(_util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_2__["default"])(handle, coords)) {
      return true;
    }
  } else {
    var handleCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, handle);
    var distance = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.distance(handleCanvas, coords);

    if (distance <= distanceThreshold) {
      return true;
    }
  }

  return false;
};

/* harmony default export */ __nested_webpack_exports__["default"] = (getHandleNearImagePoint);

/***/ }),

/***/ "./manipulators/getHandlePixelPosition.js":
/*!************************************************!*\
  !*** ./manipulators/getHandlePixelPosition.js ***!
  \************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_345385__) {

"use strict";
__nested_webpack_require_345385__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_345385__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_345385__(/*! ./../store/index.js */ "./store/index.js");


/**
 * Return the handle position considering offset for touch interaction.
 * @public
 * @function getHandlePixelPosition
 * @memberof Manipulators
 *
 * @param {Object} eventData - Data object associated with the event
 * @param {string} interactionType - Type of user's input
 * @returns {Object} - The translated point object
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (eventData, interactionType) {
  var currentPoints = eventData.currentPoints,
      element = eventData.element;
  var page = currentPoints.page;
  var handleTouchOffset = _store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].handleTouchOffset;
  var offsetX = 0;
  var offsetY = 0;

  if (interactionType === 'touch') {
    offsetX = handleTouchOffset.x;
    offsetY = handleTouchOffset.y;
  }

  return _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.pageToPixel(element, page.x + offsetX, page.y + offsetY);
});

/***/ }),

/***/ "./manipulators/handleActivator.js":
/*!*****************************************!*\
  !*** ./manipulators/handleActivator.js ***!
  \*****************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_346978__) {

"use strict";
__nested_webpack_require_346978__.r(__nested_webpack_exports__);
/* harmony import */ var _getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_346978__(/*! ./getHandleNearImagePoint.js */ "./manipulators/getHandleNearImagePoint.js");

/**
 * Update the active handle
 * @public
 * @function handleActivator
 * @memberof Manipulators
 *
 * @param {*} element
 * @param {*} handles
 * @param {*} canvasPoint
 * @param {*} distanceThreshold
 * @returns {Boolean} - True if a handle was activated
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, handles, canvasPoint, distanceThreshold) {
  if (!distanceThreshold) {
    distanceThreshold = 6;
  }

  var activeHandle = _getActiveHandle(handles);

  var nearbyHandle = Object(_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, handles, canvasPoint, distanceThreshold);

  if (activeHandle !== nearbyHandle) {
    if (nearbyHandle !== undefined) {
      nearbyHandle.active = true;
    }

    if (activeHandle !== undefined) {
      activeHandle.active = false;
    }

    return true;
  }

  return false;
});
/**
 *
 * @private
 *
 * @param {*} handles
 * @returns {Object} - Activated Handle
 */

function _getActiveHandle(handles) {
  var activeHandle;
  Object.keys(handles).forEach(function (name) {
    var handle = handles[name];

    if (handle.active === true) {
      activeHandle = handle;
      return;
    }
  });
  return activeHandle;
}

/***/ }),

/***/ "./manipulators/index.js":
/*!*******************************!*\
  !*** ./manipulators/index.js ***!
  \*******************************/
/*! exports provided: anyHandlesOutsideImage, getHandleNearImagePoint, getHandlePixelPosition, handleActivator, moveAllHandles, moveHandle, moveNewHandle */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_348832__) {

"use strict";
__nested_webpack_require_348832__.r(__nested_webpack_exports__);
/* harmony import */ var _anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_348832__(/*! ./anyHandlesOutsideImage.js */ "./manipulators/anyHandlesOutsideImage.js");
/* harmony reexport (safe) */ __nested_webpack_require_348832__.d(__nested_webpack_exports__, "anyHandlesOutsideImage", function() { return _anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_0__["default"]; });

/* harmony import */ var _getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_348832__(/*! ./getHandleNearImagePoint.js */ "./manipulators/getHandleNearImagePoint.js");
/* harmony reexport (safe) */ __nested_webpack_require_348832__.d(__nested_webpack_exports__, "getHandleNearImagePoint", function() { return _getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_1__["default"]; });

/* harmony import */ var _getHandlePixelPosition_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_348832__(/*! ./getHandlePixelPosition.js */ "./manipulators/getHandlePixelPosition.js");
/* harmony reexport (safe) */ __nested_webpack_require_348832__.d(__nested_webpack_exports__, "getHandlePixelPosition", function() { return _getHandlePixelPosition_js__WEBPACK_IMPORTED_MODULE_2__["default"]; });

/* harmony import */ var _handleActivator_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_348832__(/*! ./handleActivator.js */ "./manipulators/handleActivator.js");
/* harmony reexport (safe) */ __nested_webpack_require_348832__.d(__nested_webpack_exports__, "handleActivator", function() { return _handleActivator_js__WEBPACK_IMPORTED_MODULE_3__["default"]; });

/* harmony import */ var _moveAllHandles_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_348832__(/*! ./moveAllHandles.js */ "./manipulators/moveAllHandles.js");
/* harmony reexport (safe) */ __nested_webpack_require_348832__.d(__nested_webpack_exports__, "moveAllHandles", function() { return _moveAllHandles_js__WEBPACK_IMPORTED_MODULE_4__["default"]; });

/* harmony import */ var _moveHandle_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_348832__(/*! ./moveHandle.js */ "./manipulators/moveHandle.js");
/* harmony reexport (safe) */ __nested_webpack_require_348832__.d(__nested_webpack_exports__, "moveHandle", function() { return _moveHandle_js__WEBPACK_IMPORTED_MODULE_5__["default"]; });

/* harmony import */ var _moveNewHandle_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_348832__(/*! ./moveNewHandle.js */ "./manipulators/moveNewHandle.js");
/* harmony reexport (safe) */ __nested_webpack_require_348832__.d(__nested_webpack_exports__, "moveNewHandle", function() { return _moveNewHandle_js__WEBPACK_IMPORTED_MODULE_6__["default"]; });










/***/ }),

/***/ "./manipulators/moveAllHandles.js":
/*!****************************************!*\
  !*** ./manipulators/moveAllHandles.js ***!
  \****************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_351641__) {

"use strict";
__nested_webpack_require_351641__.r(__nested_webpack_exports__);
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_351641__(/*! ../events.js */ "./events.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_351641__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_351641__(/*! ./anyHandlesOutsideImage.js */ "./manipulators/anyHandlesOutsideImage.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_351641__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_351641__(/*! ../util/triggerEvent.js */ "./util/triggerEvent.js");
/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_351641__(/*! ../util/clip.js */ "./util/clip.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_351641__(/*! ./../store/index.js */ "./store/index.js");
/* harmony import */ var _util_getActiveTool__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_351641__(/*! ../util/getActiveTool */ "./util/getActiveTool.js");
/* harmony import */ var _tools_base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_351641__(/*! ../tools/base/BaseAnnotationTool */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_351641__(/*! ../util/logger.js */ "./util/logger.js");











var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_9__["getLogger"])('manipulators:moveAllHandles');
var manipulatorStateModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_6__["getModule"])('manipulatorState');
var _dragEvents = {
  mouse: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DRAG],
  touch: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_DRAG]
};
var _upOrEndEvents = {
  mouse: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_UP, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_CLICK],
  touch: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_END, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_DRAG_END, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PINCH, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PRESS, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TAP]
};
/**
 * Manipulator to move all provided handles at the same time
 * @public
 * @function moveAllHandles
 * @memberof Manipulators
 *
 * @param {*}        evtDetail
 * @param {*}        evtDetail.element
 * @param {String}   toolName
 * @param {*}        annotation
 * @param {*}        [handle=null] - not needed by moveAllHandles, but keeps call signature the same as `moveHandle`
 * @param {Object}   [options={}]
 * @param {Boolean}  [options.deleteIfHandleOutsideImage]
 * @param {Boolean}  [options.preventHandleOutsideImage]
 * @param {string}   [interactionType=mouse]
 * @param {function} [doneMovingCallback]
 * @returns {undefined}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (_ref, toolName, annotation, handle) {
  var element = _ref.element;
  var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
  var interactionType = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'mouse';
  var doneMovingCallback = arguments.length > 6 ? arguments[6] : undefined;
  // Use global defaults, unless overidden by provided options
  options = Object.assign({
    deleteIfHandleOutsideImage: _store_index_js__WEBPACK_IMPORTED_MODULE_6__["state"].deleteIfHandleOutsideImage,
    preventHandleOutsideImage: _store_index_js__WEBPACK_IMPORTED_MODULE_6__["state"].preventHandleOutsideImage
  }, options);

  var dragHandler = _dragHandler.bind(this, toolName, annotation, options, interactionType); // So we don't need to inline the entire `upOrEndHandler` function


  var upOrEndHandler = function upOrEndHandler(evt) {
    _upOrEndHandler(toolName, annotation, options, interactionType, {
      dragHandler: dragHandler,
      upOrEndHandler: upOrEndHandler
    }, evt, doneMovingCallback);
  };

  manipulatorStateModule.setters.addActiveManipulatorForElement(element, _cancelEventHandler.bind(null, annotation, options, interactionType, {
    dragHandler: dragHandler,
    upOrEndHandler: upOrEndHandler
  }, element, doneMovingCallback));
  annotation.active = true;
  _store_index_js__WEBPACK_IMPORTED_MODULE_6__["state"].isToolLocked = true; // Add Event Listeners

  _dragEvents[interactionType].forEach(function (eventType) {
    element.addEventListener(eventType, dragHandler);
  });

  _upOrEndEvents[interactionType].forEach(function (eventType) {
    element.addEventListener(eventType, upOrEndHandler);
  });
});

function _dragHandler(toolName, annotation) {
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  var interactionType = arguments.length > 3 ? arguments[3] : undefined;
  var evt = arguments.length > 4 ? arguments[4] : undefined;
  var _evt$detail = evt.detail,
      element = _evt$detail.element,
      image = _evt$detail.image,
      buttons = _evt$detail.buttons;
  var _evt$detail$deltaPoin = evt.detail.deltaPoints.image,
      x = _evt$detail$deltaPoin.x,
      y = _evt$detail$deltaPoin.y;
  annotation.active = true;
  annotation.invalidated = true;
  var handleKeys = Object.keys(annotation.handles);

  for (var i = 0; i < handleKeys.length; i++) {
    var key = handleKeys[i];
    var handle = annotation.handles[key];

    if ( // Don't move this part of the annotation
    handle.movesIndependently === true || // Not a true handle
    !handle.hasOwnProperty('x') || !handle.hasOwnProperty('y')) {
      continue;
    }

    handle.x += x;
    handle.y += y;

    if (options.preventHandleOutsideImage) {
      Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_5__["clipToBox"])(handle, image);
    }
  }

  _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);
  var activeTool = Object(_util_getActiveTool__WEBPACK_IMPORTED_MODULE_7__["default"])(element, buttons, interactionType);

  if (activeTool instanceof _tools_base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_8__["default"]) {
    activeTool.updateCachedStats(image, element, annotation);
  }

  var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MEASUREMENT_MODIFIED;
  var modifiedEventData = {
    toolName: toolName,
    toolType: toolName,
    // Deprecation notice: toolType will be replaced by toolName
    element: element,
    measurementData: annotation
  };
  Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, modifiedEventData);
  evt.preventDefault();
  evt.stopPropagation();
}

function _cancelEventHandler(annotation) {
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  var interactionType = arguments.length > 2 ? arguments[2] : undefined;

  var _ref2 = arguments.length > 3 ? arguments[3] : undefined,
      dragHandler = _ref2.dragHandler,
      upOrEndHandler = _ref2.upOrEndHandler;

  var element = arguments.length > 4 ? arguments[4] : undefined;
  var doneMovingCallback = arguments.length > 5 ? arguments[5] : undefined;

  _endHandler(annotation, options, interactionType, {
    dragHandler: dragHandler,
    upOrEndHandler: upOrEndHandler
  }, element, doneMovingCallback, false);
}

function _upOrEndHandler(toolName, annotation) {
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  var interactionType = arguments.length > 3 ? arguments[3] : undefined;

  var _ref3 = arguments.length > 4 ? arguments[4] : undefined,
      dragHandler = _ref3.dragHandler,
      upOrEndHandler = _ref3.upOrEndHandler;

  var evt = arguments.length > 5 ? arguments[5] : undefined;
  var doneMovingCallback = arguments.length > 6 ? arguments[6] : undefined;
  var eventData = evt.detail;
  var element = eventData.element;
  manipulatorStateModule.setters.removeActiveManipulatorForElement(element); // If any handle is outside the image, delete the tool data

  if (options.deleteIfHandleOutsideImage && Object(_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(eventData, annotation.handles)) {
    Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["removeToolState"])(element, toolName, annotation);
  }

  _endHandler(annotation, options, interactionType, {
    dragHandler: dragHandler,
    upOrEndHandler: upOrEndHandler
  }, element, doneMovingCallback, true);
}

function _endHandler(annotation) {
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  var interactionType = arguments.length > 2 ? arguments[2] : undefined;

  var _ref4 = arguments.length > 3 ? arguments[3] : undefined,
      dragHandler = _ref4.dragHandler,
      upOrEndHandler = _ref4.upOrEndHandler;

  var element = arguments.length > 4 ? arguments[4] : undefined;
  var doneMovingCallback = arguments.length > 5 ? arguments[5] : undefined;
  var success = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true;
  annotation.active = false;
  annotation.invalidated = true;
  _store_index_js__WEBPACK_IMPORTED_MODULE_6__["state"].isToolLocked = false; // Remove Event Listeners

  _dragEvents[interactionType].forEach(function (eventType) {
    element.removeEventListener(eventType, dragHandler);
  });

  _upOrEndEvents[interactionType].forEach(function (eventType) {
    element.removeEventListener(eventType, upOrEndHandler);
  });

  if (typeof options.doneMovingCallback === 'function') {
    logger.warn('`options.doneMovingCallback` has been depricated. See https://github.com/cornerstonejs/cornerstoneTools/pull/915 for details.');
    options.doneMovingCallback(success);
  }

  if (typeof doneMovingCallback === 'function') {
    doneMovingCallback(success);
  }

  _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);
}

/***/ }),

/***/ "./manipulators/moveHandle.js":
/*!************************************!*\
  !*** ./manipulators/moveHandle.js ***!
  \************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_362056__) {

"use strict";
__nested_webpack_require_362056__.r(__nested_webpack_exports__);
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_362056__(/*! ../events.js */ "./events.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_362056__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_362056__(/*! ./anyHandlesOutsideImage.js */ "./manipulators/anyHandlesOutsideImage.js");
/* harmony import */ var _getHandlePixelPosition_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_362056__(/*! ./getHandlePixelPosition.js */ "./manipulators/getHandlePixelPosition.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_362056__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_362056__(/*! ../util/triggerEvent.js */ "./util/triggerEvent.js");
/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_362056__(/*! ../util/clip.js */ "./util/clip.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_362056__(/*! ./../store/index.js */ "./store/index.js");
/* harmony import */ var _util_getActiveTool__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_362056__(/*! ../util/getActiveTool */ "./util/getActiveTool.js");
/* harmony import */ var _tools_base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_362056__(/*! ../tools/base/BaseAnnotationTool */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_362056__(/*! ../util/logger.js */ "./util/logger.js");












var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_10__["getLogger"])('manipulators:moveHandle');
var manipulatorStateModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_7__["getModule"])('manipulatorState');
var runAnimation = {
  value: false
};
var _dragEvents = {
  mouse: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DRAG],
  touch: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_DRAG]
};
var _upOrEndEvents = {
  mouse: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_UP, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_CLICK],
  touch: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_END, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_DRAG_END, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PINCH, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PRESS, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TAP]
};
/**
 * Move the provided handle
 *
 * @public
 * @method moveHandle
 * @memberof Manipulators
 *
 * @param {*} evtDetail
 * @param {*} toolName
 * @param {*} annotation
 * @param {*} handle
 * @param {*} [options={}]
 * @param {Boolean}  [options.deleteIfHandleOutsideImage]
 * @param {Boolean}  [options.preventHandleOutsideImage]
 * @param {*} [interactionType=mouse]
 * @param {function} doneMovingCallback
 * @returns {undefined}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (evtDetail, toolName, annotation, handle) {
  var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
  var interactionType = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'mouse';
  var doneMovingCallback = arguments.length > 6 ? arguments[6] : undefined;
  // Use global defaults, unless overidden by provided options
  options = Object.assign({
    deleteIfHandleOutsideImage: _store_index_js__WEBPACK_IMPORTED_MODULE_7__["state"].deleteIfHandleOutsideImage,
    preventHandleOutsideImage: _store_index_js__WEBPACK_IMPORTED_MODULE_7__["state"].preventHandleOutsideImage
  }, options);
  var element = evtDetail.element;

  var dragHandler = _dragHandler.bind(this, toolName, annotation, handle, options, interactionType); // So we don't need to inline the entire `upOrEndHandler` function


  var upOrEndHandler = function upOrEndHandler() {
    _upOrEndHandler(toolName, evtDetail, annotation, handle, options, interactionType, {
      dragHandler: dragHandler,
      upOrEndHandler: upOrEndHandler
    }, doneMovingCallback);
  };

  manipulatorStateModule.setters.addActiveManipulatorForElement(element, _cancelEventHandler.bind(null, toolName, evtDetail, annotation, handle, options, interactionType, {
    dragHandler: dragHandler,
    upOrEndHandler: upOrEndHandler
  }, doneMovingCallback));
  handle.active = true;
  handle.moving = true;
  annotation.active = true;
  _store_index_js__WEBPACK_IMPORTED_MODULE_7__["state"].isToolLocked = true; // Add Event Listeners

  _dragEvents[interactionType].forEach(function (eventType) {
    element.addEventListener(eventType, dragHandler);
  });

  _upOrEndEvents[interactionType].forEach(function (eventType) {
    element.addEventListener(eventType, upOrEndHandler);
  }); // ==========================
  // ========  TOUCH ==========
  // ==========================


  if (interactionType === 'touch') {
    runAnimation.value = true;
    var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getEnabledElement(element);
    var targetLocation = Object(_getHandlePixelPosition_js__WEBPACK_IMPORTED_MODULE_3__["default"])(evtDetail, interactionType);

    _animate(handle, runAnimation, enabledElement, targetLocation);
  }
});

function _dragHandler(toolName, annotation, handle, options, interactionType, evt) {
  var _evt$detail = evt.detail,
      image = _evt$detail.image,
      element = _evt$detail.element,
      buttons = _evt$detail.buttons;
  var targetLocation = Object(_getHandlePixelPosition_js__WEBPACK_IMPORTED_MODULE_3__["default"])(evt.detail, interactionType);
  runAnimation.value = false;
  handle.active = true;
  handle.hasMoved = true;
  handle.x = targetLocation.x;
  handle.y = targetLocation.y; // TODO: A way to not flip this for textboxes on annotations

  annotation.invalidated = true;

  if (options.preventHandleOutsideImage) {
    Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_6__["clipToBox"])(handle, image);
  }

  _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);
  var activeTool = Object(_util_getActiveTool__WEBPACK_IMPORTED_MODULE_8__["default"])(element, buttons, interactionType);

  if (activeTool instanceof _tools_base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_9__["default"]) {
    activeTool.updateCachedStats(image, element, annotation);
  }

  var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MEASUREMENT_MODIFIED;
  var modifiedEventData = {
    toolName: toolName,
    toolType: toolName,
    // Deprecation notice: toolType will be replaced by toolName
    element: element,
    measurementData: annotation
  };
  Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element, eventType, modifiedEventData);
}

function _cancelEventHandler(toolName, evtDetail, annotation, handle) {
  var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
  var interactionType = arguments.length > 5 ? arguments[5] : undefined;

  var _ref = arguments.length > 6 ? arguments[6] : undefined,
      dragHandler = _ref.dragHandler,
      upOrEndHandler = _ref.upOrEndHandler;

  var doneMovingCallback = arguments.length > 7 ? arguments[7] : undefined;

  _endHandler(toolName, evtDetail, annotation, handle, options, interactionType, {
    dragHandler: dragHandler,
    upOrEndHandler: upOrEndHandler
  }, doneMovingCallback, false);
}

function _upOrEndHandler(toolName, evtDetail, annotation, handle) {
  var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
  var interactionType = arguments.length > 5 ? arguments[5] : undefined;

  var _ref2 = arguments.length > 6 ? arguments[6] : undefined,
      dragHandler = _ref2.dragHandler,
      upOrEndHandler = _ref2.upOrEndHandler;

  var doneMovingCallback = arguments.length > 7 ? arguments[7] : undefined;
  var element = evtDetail.element;
  manipulatorStateModule.setters.removeActiveManipulatorForElement(element);

  _endHandler(toolName, evtDetail, annotation, handle, options, interactionType, {
    dragHandler: dragHandler,
    upOrEndHandler: upOrEndHandler
  }, doneMovingCallback, true);
}

function _endHandler(toolName, evtDetail, annotation, handle) {
  var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
  var interactionType = arguments.length > 5 ? arguments[5] : undefined;

  var _ref3 = arguments.length > 6 ? arguments[6] : undefined,
      dragHandler = _ref3.dragHandler,
      upOrEndHandler = _ref3.upOrEndHandler;

  var doneMovingCallback = arguments.length > 7 ? arguments[7] : undefined;
  var success = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : true;
  var element = evtDetail.element;
  handle.active = false;
  handle.moving = false;
  annotation.active = false;
  annotation.invalidated = true;
  runAnimation.value = false;
  _store_index_js__WEBPACK_IMPORTED_MODULE_7__["state"].isToolLocked = false; // Remove Event Listeners

  _dragEvents[interactionType].forEach(function (eventType) {
    element.removeEventListener(eventType, dragHandler);
  });

  _upOrEndEvents[interactionType].forEach(function (eventType) {
    element.removeEventListener(eventType, upOrEndHandler);
  }); // If any handle is outside the image, delete the tool data


  if (options.deleteIfHandleOutsideImage && Object(_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(evtDetail, annotation.handles)) {
    Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__["removeToolState"])(element, toolName, annotation);
  } // // TODO: What dark magic makes us want to handle TOUCH_PRESS differently?
  // if (evt.type === EVENTS.TOUCH_PRESS) {
  //   evt.detail.handlePressed = annotation;
  //   handle.x = image.x; // Original Event
  //   handle.y = image.y;
  // }


  if (typeof options.doneMovingCallback === 'function') {
    logger.warn('`options.doneMovingCallback` has been depricated. See https://github.com/cornerstonejs/cornerstoneTools/pull/915 for details.');
    options.doneMovingCallback(success);
  }

  if (typeof doneMovingCallback === 'function') {
    doneMovingCallback(success);
  }

  _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);
}
/**
 * Animates the provided handle using `requestAnimationFrame`
 * @private
 * @method _animate
 *
 * @param {*} handle
 * @param {*} runAnimation
 * @param {*} enabledElement
 * @param {*} targetLocation
 * @returns {undefined}
 */


function _animate(handle, runAnimation, enabledElement, targetLocation) {
  if (!runAnimation.value) {
    return;
  } // Pixels / second


  var distanceRemaining = Math.abs(handle.y - targetLocation.y);
  var linearDistEachFrame = distanceRemaining / 10;

  if (distanceRemaining < 1) {
    handle.y = targetLocation.y;
    runAnimation.value = false;
    return;
  }

  if (handle.y > targetLocation.y) {
    handle.y -= linearDistEachFrame;
  } else if (handle.y < targetLocation.y) {
    handle.y += linearDistEachFrame;
  } // Update the image


  _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(enabledElement.element); // Request a new frame

  _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.requestAnimationFrame(function () {
    _animate(handle, runAnimation, enabledElement, targetLocation);
  });
}

/***/ }),

/***/ "./manipulators/moveNewHandle.js":
/*!***************************************!*\
  !*** ./manipulators/moveNewHandle.js ***!
  \***************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_373968__) {

"use strict";
__nested_webpack_require_373968__.r(__nested_webpack_exports__);
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_373968__(/*! ../events.js */ "./events.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_373968__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_373968__(/*! ./anyHandlesOutsideImage.js */ "./manipulators/anyHandlesOutsideImage.js");
/* harmony import */ var _getHandlePixelPosition_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_373968__(/*! ./getHandlePixelPosition.js */ "./manipulators/getHandlePixelPosition.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_373968__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_373968__(/*! ../util/triggerEvent.js */ "./util/triggerEvent.js");
/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_373968__(/*! ../util/clip.js */ "./util/clip.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_373968__(/*! ./../store/index.js */ "./store/index.js");
/* harmony import */ var _util_getActiveTool__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_373968__(/*! ../util/getActiveTool */ "./util/getActiveTool.js");
/* harmony import */ var _tools_base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_373968__(/*! ../tools/base/BaseAnnotationTool */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_373968__(/*! ../util/logger.js */ "./util/logger.js");












var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_10__["getLogger"])('manipulators:moveNewHandle');
var manipulatorStateModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_7__["getModule"])('manipulatorState');
var _moveEvents = {
  mouse: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_MOVE, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DRAG],
  touch: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_DRAG]
};
var _moveEndEvents = {
  mouse: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_UP, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_CLICK],
  touch: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_END, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PINCH, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TAP]
};
/**
 * Move a new handle
 *
 * @public
 * @method moveNewHandle
 * @memberof Manipulators
 *
 * @param {*} eventData
 * @param {*} toolName
 * @param {*} annotation
 * @param {*} handle
 * @param {*} [options={}]
 * @param {Boolean}  [options.deleteIfHandleOutsideImage]
 * @param {Boolean}  [options.preventHandleOutsideImage]
 * @param {string} [interactionType=mouse]
 * @param {function} [doneMovingCallback]
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (eventData, toolName, annotation, handle, options) {
  var interactionType = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'mouse';
  var doneMovingCallback = arguments.length > 6 ? arguments[6] : undefined;
  // Use global defaults, unless overidden by provided options
  options = Object.assign({
    deleteIfHandleOutsideImage: _store_index_js__WEBPACK_IMPORTED_MODULE_7__["state"].deleteIfHandleOutsideImage,
    preventHandleOutsideImage: _store_index_js__WEBPACK_IMPORTED_MODULE_7__["state"].preventHandleOutsideImage
  }, options);
  options.hasMoved = false;
  var element = eventData.element;
  annotation.active = true;
  handle.moving = true;
  handle.active = true;
  _store_index_js__WEBPACK_IMPORTED_MODULE_7__["state"].isToolLocked = true;

  function moveHandler(evt) {
    _moveHandler(toolName, annotation, handle, options, interactionType, evt);
  } // So we don't need to inline the entire `moveEndEventHandler` function


  function moveEndHandler(evt) {
    _moveEndHandler(toolName, annotation, handle, options, interactionType, {
      moveHandler: moveHandler,
      moveEndHandler: moveEndHandler
    }, evt, doneMovingCallback);
  } // Factory function
  // begin, end, cancel
  // Or... Handle "CANCEL"
  // TODO: SETUP IN all other manipulators
  // Add event listeners


  _moveEvents[interactionType].forEach(function (eventType) {
    element.addEventListener(eventType, moveHandler);
  });

  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_START, _stopImmediatePropagation);

  _moveEndEvents[interactionType].forEach(function (eventType) {
    element.addEventListener(eventType, moveEndHandler);
  }); // When cancelling... What is our active tool?
  // `isToolLocked` ... Track which (annotation) tool is being manipulated
  // If not "completed", removeToolState (maybe an `isComplete` flag)
  // 5 locations: MEASUREMENT_COMPLETED
  // Firing event... Sets `isCompleted` flag for annotation uuid


  manipulatorStateModule.setters.addActiveManipulatorForElement(element, _cancelEventHandler.bind(null, annotation, handle, options, interactionType, {
    moveHandler: moveHandler,
    moveEndHandler: moveEndHandler
  }, element, doneMovingCallback));
});
/**
 * Updates annotation as the "pointer" is moved/dragged
 * Emits `cornerstonetoolsmeasurementmodified` events
 *
 * @param {string} toolName
 * @param {*} annotation
 * @param {*} handle
 * @param {*} options
 * @param {string} interactionType
 * @param {*} evt
 *
 * @returns {void}
 */

function _moveHandler(toolName, annotation, handle, options, interactionType, evt) {
  var _evt$detail = evt.detail,
      image = _evt$detail.image,
      element = _evt$detail.element,
      buttons = _evt$detail.buttons;
  var targetLocation = Object(_getHandlePixelPosition_js__WEBPACK_IMPORTED_MODULE_3__["default"])(evt.detail, interactionType);
  options.hasMoved = true;
  annotation.invalidated = true;
  handle.active = true;
  handle.x = targetLocation.x;
  handle.y = targetLocation.y;

  if (options && options.preventHandleOutsideImage) {
    Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_6__["clipToBox"])(handle, image);
  }

  _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);
  var activeTool = Object(_util_getActiveTool__WEBPACK_IMPORTED_MODULE_8__["default"])(element, buttons, interactionType);

  if (activeTool instanceof _tools_base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_9__["default"]) {
    activeTool.updateCachedStats(image, element, annotation);
  }

  var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MEASUREMENT_MODIFIED;
  var modifiedEventData = {
    toolName: toolName,
    toolType: toolName,
    // Deprecation notice: toolType will be replaced by toolName
    element: element,
    measurementData: annotation
  };
  Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element, eventType, modifiedEventData);
}

function _endHandler(interactionType, options, element, _ref, doneMovingCallback) {
  var moveHandler = _ref.moveHandler,
      moveEndHandler = _ref.moveEndHandler;
  var success = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;

  // Remove event listeners
  _moveEvents[interactionType].forEach(function (eventType) {
    element.removeEventListener(eventType, moveHandler);
  });

  _moveEndEvents[interactionType].forEach(function (eventType) {
    element.removeEventListener(eventType, moveEndHandler);
  });

  element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_START, _stopImmediatePropagation);
  _store_index_js__WEBPACK_IMPORTED_MODULE_7__["state"].isToolLocked = false;

  if (typeof doneMovingCallback === 'function') {
    doneMovingCallback(success);
  }

  if (typeof options.doneMovingCallback === 'function') {
    logger.warn('`options.doneMovingCallback` has been depricated. See https://github.com/cornerstonejs/cornerstoneTools/pull/915 for details.');
    options.doneMovingCallback(success);
  } // Update Image


  _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);
}

function _moveEndHandler(toolName, annotation, handle, options, interactionType, _ref2, evt, doneMovingCallback) {
  var moveHandler = _ref2.moveHandler,
      moveEndHandler = _ref2.moveEndHandler;
  var eventData = evt.detail;
  var element = eventData.element;
  var moveNewHandleSuccessful = true;

  if (options.hasMoved === false) {
    return;
  }

  var targetLocation = Object(_getHandlePixelPosition_js__WEBPACK_IMPORTED_MODULE_3__["default"])(eventData, interactionType); // "Release" the handle

  annotation.active = false;
  annotation.invalidated = true;
  handle.active = false;
  handle.moving = false;
  handle.x = targetLocation.x;
  handle.y = targetLocation.y;
  manipulatorStateModule.setters.removeActiveManipulatorForElement(element); // TODO: WHY?
  // Why would a Touch_Pinch or Touch_Press be associated with a new handle?
  // if (evt.type === EVENTS.TOUCH_PINCH || evt.type === EVENTS.TOUCH_PRESS) {
  //   handle.active = false;
  //   external.cornerstone.updateImage(element);
  //   if (typeof options.doneMovingCallback === 'function') {
  //     logger.warn(
  //       '`options.doneMovingCallback` has been depricated. See https://github.com/cornerstonejs/cornerstoneTools/pull/915 for details.'
  //     );
  //     options.doneMovingCallback(success);
  //   }
  //   if (typeof doneMovingCallback === 'function') {
  //     doneMovingCallback(success);
  //   }
  //   return;
  // }

  if (options.preventHandleOutsideImage) {
    Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_6__["clipToBox"])(handle, evt.detail.image);
  } // If any handle is outside the image, delete the tool data


  if (options.deleteIfHandleOutsideImage && Object(_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(evt.detail, annotation.handles)) {
    annotation.cancelled = true;
    moveNewHandleSuccessful = false;
    Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__["removeToolState"])(element, toolName, annotation);
  }

  _endHandler(interactionType, options, element, {
    moveHandler: moveHandler,
    moveEndHandler: moveEndHandler
  }, doneMovingCallback, moveNewHandleSuccessful);
}

function _cancelEventHandler(annotation, handle, options, interactionType, _ref3, element, doneMovingCallback) {
  var moveHandler = _ref3.moveHandler,
      moveEndHandler = _ref3.moveEndHandler;
  // "Release" the handle
  annotation.active = false;
  annotation.invalidated = true;
  handle.active = false;

  _endHandler(interactionType, options, element, {
    moveHandler: moveHandler,
    moveEndHandler: moveEndHandler
  }, doneMovingCallback, false);
}
/**
 * Stop the CornerstoneToolsTouchStart event from
 * Becoming a CornerstoneToolsTouchStartActive event when
 * MoveNewHandle ends
 *
 * @private
 * @function _stopImmediatePropagation
 *
 * @param {*} evt
 * @returns {Boolean} false
 */


function _stopImmediatePropagation(evt) {
  evt.stopImmediatePropagation();
  return false;
}

/***/ }),

/***/ "./mixins/activeOrDisabledBinaryTool.js":
/*!**********************************************!*\
  !*** ./mixins/activeOrDisabledBinaryTool.js ***!
  \**********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_385530__) {

"use strict";
__nested_webpack_require_385530__.r(__nested_webpack_exports__);
/* harmony import */ var _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_385530__(/*! ../store/setToolMode.js */ "./store/setToolMode.js");

/**
 * If one attempts to change mode to 'passive', redirect the tool to 'disabled'.
 *
 * @param {HTMLElement} element The element on which the tool resides.
 * @returns {undefined}
 */

function passiveCallback(element) {
  Object(_store_setToolMode_js__WEBPACK_IMPORTED_MODULE_0__["setToolDisabledForElement"])(element, this.name);
}
/**
 * If one attempts to turn the tool 'enabled', redirect the tool to 'active'.
 *
 * @param {HTMLElement} element The element on which the tool resides.
 * @returns {undefined}
 */


function enabledCallback(element) {
  Object(_store_setToolMode_js__WEBPACK_IMPORTED_MODULE_0__["setToolActiveForElement"])(element, this.name);
}
/**
 * @mixin activeOrDisabledBinaryTool - Redirect enabled/passive mode changes to active/disabled.
 * @memberof Mixins
 */


/* harmony default export */ __nested_webpack_exports__["default"] = ({
  passiveCallback: passiveCallback,
  enabledCallback: enabledCallback
});

/***/ }),

/***/ "./mixins/enabledOrDisabledBinaryTool.js":
/*!***********************************************!*\
  !*** ./mixins/enabledOrDisabledBinaryTool.js ***!
  \***********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_387003__) {

"use strict";
__nested_webpack_require_387003__.r(__nested_webpack_exports__);
/* harmony import */ var _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_387003__(/*! ../store/setToolMode.js */ "./store/setToolMode.js");

/**
 * If one attempts to change mode to 'passive', redirect the tool to 'disabled'.
 *
 * @param {HTMLElement} element The element on which the tool resides.
 * @returns {undefined}
 */

function passiveCallback(element) {
  Object(_store_setToolMode_js__WEBPACK_IMPORTED_MODULE_0__["setToolDisabledForElement"])(element, this.name);
}
/**
 * If one attempts to change mode to 'active', redirect the tool to 'enabled'.
 *
 * @param {HTMLElement} element The element on which the tool resides.
 * @returns {undefined}
 */


function activeCallback(element) {
  Object(_store_setToolMode_js__WEBPACK_IMPORTED_MODULE_0__["setToolEnabledForElement"])(element, this.name);
}
/**
 *
 * @mixin enabledOrDisabledBinaryTool - Redirect active/passive mode changes to enabled/disabled.
 * @memberof Mixins
 */


/* harmony default export */ __nested_webpack_exports__["default"] = ({
  passiveCallback: passiveCallback,
  activeCallback: activeCallback
});

/***/ }),

/***/ "./mixins/index.js":
/*!*************************!*\
  !*** ./mixins/index.js ***!
  \*************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_388391__) {

"use strict";
__nested_webpack_require_388391__.r(__nested_webpack_exports__);
/* harmony import */ var _activeOrDisabledBinaryTool_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_388391__(/*! ./activeOrDisabledBinaryTool.js */ "./mixins/activeOrDisabledBinaryTool.js");
/* harmony import */ var _enabledOrDisabledBinaryTool_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_388391__(/*! ./enabledOrDisabledBinaryTool.js */ "./mixins/enabledOrDisabledBinaryTool.js");
/* harmony import */ var _segmentation_circleSegmentationMixin_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_388391__(/*! ./segmentation/circleSegmentationMixin.js */ "./mixins/segmentation/circleSegmentationMixin.js");
/* harmony import */ var _segmentation_polylineSegmentationMixin_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_388391__(/*! ./segmentation/polylineSegmentationMixin.js */ "./mixins/segmentation/polylineSegmentationMixin.js");
/* harmony import */ var _segmentation_freehandSegmentationMixin_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_388391__(/*! ./segmentation/freehandSegmentationMixin.js */ "./mixins/segmentation/freehandSegmentationMixin.js");
/* harmony import */ var _segmentation_rectangleSegmentationMixin_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_388391__(/*! ./segmentation/rectangleSegmentationMixin.js */ "./mixins/segmentation/rectangleSegmentationMixin.js");
/* harmony import */ var _segmentation_renderBrushMixin_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_388391__(/*! ./segmentation/renderBrushMixin.js */ "./mixins/segmentation/renderBrushMixin.js");







/* harmony default export */ __nested_webpack_exports__["default"] = ({
  activeOrDisabledBinaryTool: _activeOrDisabledBinaryTool_js__WEBPACK_IMPORTED_MODULE_0__["default"],
  enabledOrDisabledBinaryTool: _enabledOrDisabledBinaryTool_js__WEBPACK_IMPORTED_MODULE_1__["default"],
  circleSegmentationMixin: _segmentation_circleSegmentationMixin_js__WEBPACK_IMPORTED_MODULE_2__["default"],
  polylineSegmentationMixin: _segmentation_polylineSegmentationMixin_js__WEBPACK_IMPORTED_MODULE_3__["default"],
  freehandSegmentationMixin: _segmentation_freehandSegmentationMixin_js__WEBPACK_IMPORTED_MODULE_4__["default"],
  rectangleSegmentationMixin: _segmentation_rectangleSegmentationMixin_js__WEBPACK_IMPORTED_MODULE_5__["default"],
  renderBrushMixin: _segmentation_renderBrushMixin_js__WEBPACK_IMPORTED_MODULE_6__["default"]
});

/***/ }),

/***/ "./mixins/segmentation/circleSegmentationMixin.js":
/*!********************************************************!*\
  !*** ./mixins/segmentation/circleSegmentationMixin.js ***!
  \********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_391108__) {

"use strict";
__nested_webpack_require_391108__.r(__nested_webpack_exports__);
/* harmony import */ var _drawing__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_391108__(/*! ../../drawing */ "./drawing/index.js");
/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_391108__(/*! ../../externalModules */ "./externalModules.js");
/* harmony import */ var _util_isEmptyObject__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_391108__(/*! ../../util/isEmptyObject */ "./util/isEmptyObject.js");
/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_391108__(/*! ../../store */ "./store/index.js");
/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_391108__(/*! ../../util/segmentation */ "./util/segmentation/index.js");






var _getModule = Object(_store__WEBPACK_IMPORTED_MODULE_3__["getModule"])('segmentation'),
    getters = _getModule.getters,
    setters = _getModule.setters;
/**
 * Sets the start and end handle points to empty objects
 *
 * @private
 * @method _resetHandles
 * @returns {undefined}
 */


function _resetHandles() {
  this.handles = {
    start: {},
    end: {}
  };
}
/**
 * Render hook: draws the Scissors's outline, box, or circle
 *
 * @param {Object} evt Cornerstone.event#cornerstoneimagerendered > cornerstoneimagerendered event
 * @memberof Tools.ScissorsTool
 * @returns {void}
 */


function renderToolData(evt) {
  var _this = this;

  var eventData = evt.detail;
  var element = eventData.element;
  var color = getters.brushColor(element, true);
  var context = Object(_drawing__WEBPACK_IMPORTED_MODULE_0__["getNewContext"])(eventData.canvasContext.canvas);
  var distance = _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.distance;
  Object(_drawing__WEBPACK_IMPORTED_MODULE_0__["draw"])(context, function (context) {
    if (!_this.handles) {
      return null;
    }

    var startCanvas = _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, _this.handles.start);
    var endCanvas = _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, _this.handles.end); // Calculating the radius where startCanvas is the center of the circle to be drawn

    var radius = distance(startCanvas, endCanvas); // Draw Circle

    Object(_drawing__WEBPACK_IMPORTED_MODULE_0__["drawCircle"])(context, element, _this.handles.start, radius, {
      color: color
    });
  });
}
/**
 * Sets the start handle point and claims the eventDispatcher event
 *
 * @private
 * @param {*} evt // mousedown, touchstart, click
 * @returns {Boolean} True
 */


function _startOutliningRegion(evt) {
  var consumeEvent = true;
  var element = evt.detail.element;
  var image = evt.detail.currentPoints.image;

  if (Object(_util_isEmptyObject__WEBPACK_IMPORTED_MODULE_2__["default"])(this.handles.start)) {
    this.handles.start = image;
  } else {
    this.handles.end = image;

    this._applyStrategy(evt);
  }

  _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);
  return consumeEvent;
}
/**
 * This function will update the handles and updateImage to force re-draw
 *
 * @private
 * @method _setHandlesAndUpdate
 * @param {(CornerstoneTools.event#TOUCH_DRAG|CornerstoneTools.event#MOUSE_DRAG|CornerstoneTools.event#MOUSE_MOVE)} evt  Interaction event emitted by an enabledElement
 * @returns {void}
 */


function _setHandlesAndUpdate(evt) {
  var _evt$detail = evt.detail,
      element = _evt$detail.element,
      currentPoints = _evt$detail.currentPoints;
  var image = currentPoints.image;
  this.handles.end = image;
  _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);
}
/**
 * Event handler for MOUSE_UP/TOUCH_END during handle drag event loop.
 *
 * @private
 * @method _applyStrategy
 * @param {(CornerstoneTools.event#MOUSE_UP|CornerstoneTools.event#TOUCH_END)} evt Interaction event emitted by an enabledElement
 * @returns {void}
 */


function _applyStrategy(evt) {
  evt.detail.handles = this.handles;
  var element = evt.detail.element;

  var _getters$labelmap2D = getters.labelmap2D(element),
      labelmap2D = _getters$labelmap2D.labelmap2D,
      labelmap3D = _getters$labelmap2D.labelmap3D,
      currentImageIdIndex = _getters$labelmap2D.currentImageIdIndex;

  var pixelData = labelmap2D.pixelData;
  var previousPixeldata = pixelData.slice();
  var points = {
    start: {
      x: this.handles.start.x,
      y: this.handles.start.y
    },
    end: {
      x: this.handles.end.x,
      y: this.handles.end.y
    }
  };
  var operationData = {
    points: points,
    pixelData: pixelData,
    segmentIndex: labelmap3D.activeSegmentIndex,
    segmentationMixinType: "circleSegmentationMixin"
  };
  this.applyActiveStrategy(evt, operationData);
  var operation = {
    imageIdIndex: currentImageIdIndex,
    diff: Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_4__["getDiffBetweenPixelData"])(previousPixeldata, pixelData)
  };
  setters.pushState(this.element, [operation]); // Invalidate the brush tool data so it is redrawn

  setters.updateSegmentsOnLabelmap2D(labelmap2D);
  _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);

  this._resetHandles();
}
/**
 * @mixin circleSegmentationMixin - Segmentation operations for circles.
 * @memberof Mixins
 */


/* harmony default export */ __nested_webpack_exports__["default"] = ({
  postTouchStartCallback: _startOutliningRegion,
  postMouseDownCallback: _startOutliningRegion,
  mouseClickCallback: _startOutliningRegion,
  touchDragCallback: _setHandlesAndUpdate,
  mouseDragCallback: _setHandlesAndUpdate,
  mouseMoveCallback: _setHandlesAndUpdate,
  touchEndCallback: _applyStrategy,
  mouseUpCallback: _applyStrategy,
  initializeMixin: _resetHandles,
  renderToolData: renderToolData,
  _resetHandles: _resetHandles,
  _applyStrategy: _applyStrategy
});

/***/ }),

/***/ "./mixins/segmentation/freehandSegmentationMixin.js":
/*!**********************************************************!*\
  !*** ./mixins/segmentation/freehandSegmentationMixin.js ***!
  \**********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_397404__) {

"use strict";
__nested_webpack_require_397404__.r(__nested_webpack_exports__);
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_397404__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_397404__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_397404__(/*! ../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_397404__(/*! ../../store */ "./store/index.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_397404__(/*! ../../util/logger.js */ "./util/logger.js");
/* harmony import */ var _drawing__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_397404__(/*! ../../drawing */ "./drawing/index.js");
/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_397404__(/*! ../../util/segmentation */ "./util/segmentation/index.js");






var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('tools:ScissorsTool');

var _getModule = Object(_store__WEBPACK_IMPORTED_MODULE_2__["getModule"])('segmentation'),
    getters = _getModule.getters,
    setters = _getModule.setters;
/**
 * Render hook: draws the FreehandScissors's outline
 *
 * @param {Object} evt Cornerstone.event#cornerstoneimagerendered > cornerstoneimagerendered event
 * @memberof Tools.ScissorsTool
 * @returns {void}
 */


function renderToolData(evt) {
  var eventData = evt.detail;
  var element = eventData.element;
  var color = getters.brushColor(element, true);
  var context = Object(_drawing__WEBPACK_IMPORTED_MODULE_4__["getNewContext"])(eventData.canvasContext.canvas);
  var points = this.handles.points;

  if (points.length < 2) {
    return;
  }

  Object(_drawing__WEBPACK_IMPORTED_MODULE_4__["draw"])(context, function (context) {
    for (var j = 0; j < points.length; j++) {
      var lines = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(points[j].lines);

      if (j === points.length - 1) {
        // If it's still being actively drawn, keep the last line to
        // The mouse location
        lines.push(points[0]);
      }

      Object(_drawing__WEBPACK_IMPORTED_MODULE_4__["drawJoinedLines"])(context, element, points[j], lines, {
        color: color
      });
    }
  });
}
/**
 * Sets the start handle point and claims the eventDispatcher event
 *
 * @private
 * @param {*} evt // mousedown, touchstart, click
 * @returns {void|null}
 */


function _startOutliningRegion(evt) {
  var element = evt.detail.element;
  var image = evt.detail.currentPoints.image;
  var points = this.handles.points;

  if (!points.length) {
    logger.warn('Something went wrong, empty handles detected.');
    return null;
  }

  points.push({
    x: image.x,
    y: image.y,
    lines: []
  });
  this.currentHandle += 1;
  _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);
}
/**
 * This function will update the handles and updateImage to force re-draw
 *
 * @private
 * @method _setHandlesAndUpdate
 * @param {(CornerstoneTools.event#TOUCH_DRAG|CornerstoneTools.event#MOUSE_DRAG|CornerstoneTools.event#MOUSE_MOVE)} evt  Interaction event emitted by an enabledElement
 * @returns {void}
 */


function _setHandlesAndUpdate(evt) {
  var eventData = evt.detail;
  var element = evt.detail.element;

  this._addPoint(eventData);

  _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);
}
/**
 * Event handler for MOUSE_UP/TOUCH_END during handle drag event loop.
 *
 * @private
 * @method _applyStrategy
 * @param {(CornerstoneTools.event#MOUSE_UP|CornerstoneTools.event#TOUCH_END)} evt Interaction event emitted by an enabledElement
 * @returns {void}
 */


function _applyStrategy(evt) {
  var points = this.handles.points;
  var element = evt.detail.element;

  var _getters$labelmap2D = getters.labelmap2D(element),
      labelmap2D = _getters$labelmap2D.labelmap2D,
      labelmap3D = _getters$labelmap2D.labelmap3D,
      currentImageIdIndex = _getters$labelmap2D.currentImageIdIndex;

  var pixelData = labelmap2D.pixelData;
  var previousPixeldata = pixelData.slice();
  var operationData = {
    points: points,
    pixelData: pixelData,
    segmentIndex: labelmap3D.activeSegmentIndex,
    segmentationMixinType: "freehandSegmentationMixin"
  };
  this.applyActiveStrategy(evt, operationData);
  var operation = {
    imageIdIndex: currentImageIdIndex,
    diff: Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_5__["getDiffBetweenPixelData"])(previousPixeldata, pixelData)
  };
  setters.pushState(this.element, [operation]); // Invalidate the brush tool data so it is redrawn

  setters.updateSegmentsOnLabelmap2D(labelmap2D);
  _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);

  this._resetHandles();
}
/**
 * Sets the start and end handle points to empty objects
 *
 * @private
 * @method _resetHandles
 * @returns {undefined}
 */


function _resetHandles() {
  this.handles = {
    points: []
  };
  this.currentHandle = 0;
}
/**
 * Adds a point on mouse click in polygon mode.
 *
 * @private
 * @param {Object} evt - data object associated with an event.
 * @returns {void}
 */


function _addPoint(evt) {
  var points = this.handles.points;

  if (points.length) {
    // Add the line from the current handle to the new handle
    points[this.currentHandle - 1].lines.push({
      x: evt.currentPoints.image.x,
      y: evt.currentPoints.image.y,
      lines: []
    });
  } // Add the new handle


  points.push({
    x: evt.currentPoints.image.x,
    y: evt.currentPoints.image.y,
    lines: []
  }); // Increment the current handle value

  this.currentHandle += 1; // Force onImageRendered to fire

  _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(evt.element);
}
/**
 * @mixin freehandSegmentationMixin - segmentation operations for freehand
 * @memberof Mixins
 */


/* harmony default export */ __nested_webpack_exports__["default"] = ({
  postTouchStartCallback: _startOutliningRegion,
  postMouseDownCallback: _startOutliningRegion,
  mouseClickCallback: _startOutliningRegion,
  touchDragCallback: _setHandlesAndUpdate,
  mouseDragCallback: _setHandlesAndUpdate,
  mouseMoveCallback: _setHandlesAndUpdate,
  touchEndCallback: _applyStrategy,
  mouseUpCallback: _applyStrategy,
  initializeMixin: _resetHandles,
  renderToolData: renderToolData,
  _resetHandles: _resetHandles,
  _addPoint: _addPoint,
  _applyStrategy: _applyStrategy
});

/***/ }),

/***/ "./mixins/segmentation/polylineSegmentationMixin.js":
/*!**********************************************************!*\
  !*** ./mixins/segmentation/polylineSegmentationMixin.js ***!
  \**********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_404608__) {

"use strict";
__nested_webpack_require_404608__.r(__nested_webpack_exports__);
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_404608__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_404608__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _drawing__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_404608__(/*! ../../drawing */ "./drawing/index.js");
/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_404608__(/*! ../../store */ "./store/index.js");
/* harmony import */ var _freehandSegmentationMixin__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_404608__(/*! ./freehandSegmentationMixin */ "./mixins/segmentation/freehandSegmentationMixin.js");





var _getModule = Object(_store__WEBPACK_IMPORTED_MODULE_2__["getModule"])('segmentation'),
    getters = _getModule.getters;
/**
 * Override for `freehandSegmentationMixin`'s `renderToolData` method to render a polyline instead
 * of a freehand region with the first and last point connected. Apply after the `freehandSegmentationMixin`.
 *
 * @override
 * @param {Object} evt The cornerstone render event.
 * @returns {null}
 */


function renderToolData(evt) {
  var _this = this;

  var eventData = evt.detail;
  var element = eventData.element;
  var color = getters.brushColor(element, true);
  var context = Object(_drawing__WEBPACK_IMPORTED_MODULE_1__["getNewContext"])(eventData.canvasContext.canvas);
  var handles = this.handles;
  Object(_drawing__WEBPACK_IMPORTED_MODULE_1__["draw"])(context, function (context) {
    var isNotTheFirstHandle = handles.points.length > 1;

    if (isNotTheFirstHandle) {
      for (var j = 0; j < handles.points.length; j++) {
        var lines = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(handles.points[j].lines);

        Object(_drawing__WEBPACK_IMPORTED_MODULE_1__["drawJoinedLines"])(context, element, _this.handles.points[j], lines, {
          color: color
        });
      }
    }
  });
}

var polylineSegmentationMixin = Object.assign({}, _freehandSegmentationMixin__WEBPACK_IMPORTED_MODULE_3__["default"], {
  renderToolData: renderToolData
});
/**
 * @mixin freehandPolylineRenderOverride - segmentation operations for corrections Polyline
 * @memberof Mixins
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (polylineSegmentationMixin);

/***/ }),

/***/ "./mixins/segmentation/rectangleSegmentationMixin.js":
/*!***********************************************************!*\
  !*** ./mixins/segmentation/rectangleSegmentationMixin.js ***!
  \***********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_407576__) {

"use strict";
__nested_webpack_require_407576__.r(__nested_webpack_exports__);
/* harmony import */ var _drawing__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_407576__(/*! ../../drawing */ "./drawing/index.js");
/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_407576__(/*! ../../externalModules */ "./externalModules.js");
/* harmony import */ var _util_isEmptyObject__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_407576__(/*! ../../util/isEmptyObject */ "./util/isEmptyObject.js");
/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_407576__(/*! ../../store */ "./store/index.js");
/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_407576__(/*! ../../util/segmentation */ "./util/segmentation/index.js");






var _getModule = Object(_store__WEBPACK_IMPORTED_MODULE_3__["getModule"])('segmentation'),
    getters = _getModule.getters,
    setters = _getModule.setters;
/**
 * Render hook: draws the Scissors's outline, box, or circle
 *
 * @param {Object} evt Cornerstone.event#cornerstoneimagerendered > cornerstoneimagerendered event
 * @memberof Tools.ScissorsTool
 * @returns {void}
 */


function renderToolData(evt) {
  var _this = this;

  var eventData = evt.detail;
  var element = eventData.element;
  var color = getters.brushColor(element, true);
  var context = Object(_drawing__WEBPACK_IMPORTED_MODULE_0__["getNewContext"])(eventData.canvasContext.canvas);
  Object(_drawing__WEBPACK_IMPORTED_MODULE_0__["draw"])(context, function (context) {
    Object(_drawing__WEBPACK_IMPORTED_MODULE_0__["drawRect"])(context, element, _this.handles.start, _this.handles.end, {
      color: color
    });
  });
}
/**
 * Sets the start handle point and claims the eventDispatcher event
 *
 * @private
 * @param {*} evt // mousedown, touchstart, click
 * @returns {Boolean} True
 */


function _startOutliningRegion(evt) {
  var consumeEvent = true;
  var element = evt.detail.element;
  var image = evt.detail.currentPoints.image;

  if (Object(_util_isEmptyObject__WEBPACK_IMPORTED_MODULE_2__["default"])(this.handles.start)) {
    this.handles.start = image;
  } else {
    this.handles.end = image;

    this._applyStrategy(evt);
  }

  _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);
  return consumeEvent;
}
/**
 * This function will update the handles and updateImage to force re-draw
 *
 * @private
 * @method _setHandlesAndUpdate
 * @param {(CornerstoneTools.event#TOUCH_DRAG|CornerstoneTools.event#MOUSE_DRAG|CornerstoneTools.event#MOUSE_MOVE)} evt  Interaction event emitted by an enabledElement
 * @returns {void}
 */


function _setHandlesAndUpdate(evt) {
  var _evt$detail = evt.detail,
      element = _evt$detail.element,
      image = _evt$detail.currentPoints.image;
  this.handles.end = image;
  _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);
}
/**
 * Event handler for MOUSE_UP/TOUCH_END during handle drag event loop.
 *
 * @private
 * @method _applyStrategy
 * @param {(CornerstoneTools.event#MOUSE_UP|CornerstoneTools.event#TOUCH_END)} evt Interaction event emitted by an enabledElement
 * @returns {void}
 */


function _applyStrategy(evt) {
  evt.detail.handles = this.handles;
  var element = evt.detail.element;

  var _getters$labelmap2D = getters.labelmap2D(element),
      labelmap2D = _getters$labelmap2D.labelmap2D,
      labelmap3D = _getters$labelmap2D.labelmap3D,
      currentImageIdIndex = _getters$labelmap2D.currentImageIdIndex;

  var pixelData = labelmap2D.pixelData;
  var previousPixeldata = pixelData.slice();
  var points = [{
    x: this.handles.start.x,
    y: this.handles.start.y
  }, {
    x: this.handles.end.x,
    y: this.handles.end.y
  }];
  var operationData = {
    points: points,
    pixelData: pixelData,
    segmentIndex: labelmap3D.activeSegmentIndex,
    segmentationMixinType: "rectangleSegmentationMixin"
  };
  this.applyActiveStrategy(evt, operationData);
  var operation = {
    imageIdIndex: currentImageIdIndex,
    diff: Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_4__["getDiffBetweenPixelData"])(previousPixeldata, pixelData)
  };
  setters.pushState(this.element, [operation]); // Invalidate the brush tool data so it is redrawn

  setters.updateSegmentsOnLabelmap2D(labelmap2D);
  _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);

  this._resetHandles();
}
/**
 * Sets the start and end handle points to empty objects
 *
 * @private
 * @method _resetHandles
 * @returns {void}
 */


function _resetHandles() {
  this.handles = {
    start: {},
    end: {}
  };
}
/**
 * @mixin rectangleSegmentationMixin - segmentation operations for rectangles
 * @memberof Mixins
 */


/* harmony default export */ __nested_webpack_exports__["default"] = ({
  postTouchStartCallback: _startOutliningRegion,
  postMouseDownCallback: _startOutliningRegion,
  mouseClickCallback: _startOutliningRegion,
  touchDragCallback: _setHandlesAndUpdate,
  mouseDragCallback: _setHandlesAndUpdate,
  mouseMoveCallback: _setHandlesAndUpdate,
  touchEndCallback: _applyStrategy,
  mouseUpCallback: _applyStrategy,
  initializeMixin: _resetHandles,
  renderToolData: renderToolData,
  _resetHandles: _resetHandles,
  _applyStrategy: _applyStrategy
});

/***/ }),

/***/ "./mixins/segmentation/renderBrushMixin.js":
/*!*************************************************!*\
  !*** ./mixins/segmentation/renderBrushMixin.js ***!
  \*************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_413197__) {

"use strict";
__nested_webpack_require_413197__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_413197__(/*! ./../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_413197__(/*! ./../../store/index.js */ "./store/index.js");


/**
 * Called by the event dispatcher to render the image.
 *
 * @param {Object} evt - The event.
 * @returns {void}
 */

function renderBrush(evt) {
  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone;

  var _getModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_1__["getModule"])('segmentation'),
      getters = _getModule.getters,
      configuration = _getModule.configuration;

  var eventData = evt.detail;
  var viewport = eventData.viewport;
  var mousePosition;

  if (this._drawing) {
    mousePosition = this._lastImageCoords;
  } else if (this._mouseUpRender) {
    mousePosition = this._lastImageCoords;
    this._mouseUpRender = false;
  } else {
    mousePosition = _store_index_js__WEBPACK_IMPORTED_MODULE_1__["default"].state.mousePositionImage;
  }

  if (!mousePosition) {
    return;
  }

  var _eventData$image = eventData.image,
      rows = _eventData$image.rows,
      columns = _eventData$image.columns;
  var _mousePosition = mousePosition,
      x = _mousePosition.x,
      y = _mousePosition.y;

  if (x < 0 || x > columns || y < 0 || y > rows) {
    return;
  } // Draw the hover overlay on top of the pixel data


  var radius = configuration.radius;
  var context = eventData.canvasContext;
  var element = eventData.element;
  var color = getters.brushColor(element, this._drawing);
  context.setTransform(1, 0, 0, 1, 0, 0);
  var circleRadius = radius * viewport.scale;
  var mouseCoordsCanvas = cornerstone.pixelToCanvas(element, mousePosition);
  context.beginPath();
  context.strokeStyle = color;
  context.ellipse(mouseCoordsCanvas.x, mouseCoordsCanvas.y, circleRadius, circleRadius, 0, 0, 2 * Math.PI);
  context.stroke();
}

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  renderBrush: renderBrush
});

/***/ }),

/***/ "./orientation/getOrientationString.js":
/*!*********************************************!*\
  !*** ./orientation/getOrientationString.js ***!
  \*********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_415677__) {

"use strict";
__nested_webpack_require_415677__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_415677__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_415677__(/*! ../util/convertToVector3.js */ "./util/convertToVector3.js");


/**
 * Returns the orientation of the vector in the patient coordinate system.
 * @public
 * @function getOrientationString
 *
 * @param  {Array|cornerstoneMath.Vector3} vector Input array or Vector3
 * @returns {string} The orientation in the patient coordinate system.
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (vector) {
  var vec3 = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(vector); // Thanks to David Clunie
  // https://sites.google.com/site/dicomnotes/

  var orientation = '';
  var orientationX = vec3.x < 0 ? 'R' : 'L';
  var orientationY = vec3.y < 0 ? 'A' : 'P';
  var orientationZ = vec3.z < 0 ? 'F' : 'H'; // Should probably make this a function vector3.abs

  var abs = new _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.Vector3(Math.abs(vec3.x), Math.abs(vec3.y), Math.abs(vec3.z));
  var MIN = 0.0001;

  for (var i = 0; i < 3; i++) {
    if (abs.x > MIN && abs.x > abs.y && abs.x > abs.z) {
      orientation += orientationX;
      abs.x = 0;
    } else if (abs.y > MIN && abs.y > abs.x && abs.y > abs.z) {
      orientation += orientationY;
      abs.y = 0;
    } else if (abs.z > MIN && abs.z > abs.x && abs.z > abs.y) {
      orientation += orientationZ;
      abs.z = 0;
    } else if (abs.x > MIN && abs.y > MIN && abs.x === abs.y) {
      orientation += orientationX + orientationY;
      abs.x = 0;
      abs.y = 0;
    } else if (abs.x > MIN && abs.z > MIN && abs.x === abs.z) {
      orientation += orientationX + orientationZ;
      abs.x = 0;
      abs.z = 0;
    } else if (abs.y > MIN && abs.z > MIN && abs.y === abs.z) {
      orientation += orientationY + orientationZ;
      abs.y = 0;
      abs.z = 0;
    } else {
      break;
    }
  }

  return orientation;
});

/***/ }),

/***/ "./orientation/index.js":
/*!******************************!*\
  !*** ./orientation/index.js ***!
  \******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_418105__) {

"use strict";
__nested_webpack_require_418105__.r(__nested_webpack_exports__);
/* harmony import */ var _getOrientationString_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_418105__(/*! ./getOrientationString.js */ "./orientation/getOrientationString.js");
/* harmony import */ var _invertOrientationString_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_418105__(/*! ./invertOrientationString.js */ "./orientation/invertOrientationString.js");


var orientation = {
  getOrientationString: _getOrientationString_js__WEBPACK_IMPORTED_MODULE_0__["default"],
  invertOrientationString: _invertOrientationString_js__WEBPACK_IMPORTED_MODULE_1__["default"]
};
/* harmony default export */ __nested_webpack_exports__["default"] = (orientation);

/***/ }),

/***/ "./orientation/invertOrientationString.js":
/*!************************************************!*\
  !*** ./orientation/invertOrientationString.js ***!
  \************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_419136__) {

"use strict";
__nested_webpack_require_419136__.r(__nested_webpack_exports__);
/**
 * Inverts an orientation string.
 * @public
 * @function invertOrientationString
 *
 * @param  {string} orientationString The orientation.
 * @returns {string}  The inverted orientationString.
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (orientationString) {
  var inverted = orientationString.replace('H', 'f');
  inverted = inverted.replace('F', 'h');
  inverted = inverted.replace('R', 'l');
  inverted = inverted.replace('L', 'r');
  inverted = inverted.replace('A', 'p');
  inverted = inverted.replace('P', 'a');
  inverted = inverted.toUpperCase();
  return inverted;
});

/***/ }),

/***/ "./stackTools/fusionRenderer.js":
/*!**************************************!*\
  !*** ./stackTools/fusionRenderer.js ***!
  \**************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_420094__) {

"use strict";
__nested_webpack_require_420094__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_420094__.d(__nested_webpack_exports__, "default", function() { return FusionRenderer; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_420094__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_420094__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_420094__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_420094__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_420094__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_420094__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js");





var FusionRenderer =
/*#__PURE__*/
function () {
  function FusionRenderer() {
    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, FusionRenderer);

    this.currentImageIdIndex = 0;
    this.layerIds = [];
    this.findImageFn = undefined;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(FusionRenderer, [{
    key: "render",
    value: function render(element, imageStacks) {
      var _this = this;

      // Move this to base Renderer class
      if (!Number.isInteger(this.currentImageIdIndex)) {
        throw new Error('FusionRenderer: render - Image ID Index is not an integer');
      }

      if (!this.findImageFn) {
        throw new Error('No findImage function has been defined');
      }

      if (!imageStacks) {
        var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, 'stack');
        imageStacks = toolData.data;
      } // TODO: Figure out what to do with LoadHandlers in this scenario...


      var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_2__["default"].cornerstone; // For the base layer, go to the currentImageIdIndex

      var baseImageObject = imageStacks[0];
      var currentImageId = baseImageObject.imageIds[this.currentImageIdIndex];
      var overlayImageStacks = imageStacks.slice(1, imageStacks.length);
      cornerstone.loadAndCacheImage(currentImageId).then(function (baseImage) {
        var baseLayerId = _this.layerIds[0]; // Get the base layer if one exists

        if (baseLayerId) {
          cornerstone.setLayerImage(element, baseImage, baseLayerId);
        } else {
          // Otherwise, create a new layer with the base layer's image
          baseLayerId = cornerstone.addLayer(element, baseImage, baseImageObject.options);

          _this.layerIds.push(baseLayerId);
        } // Display the image immediately while the overlay images are identified


        cornerstone.displayImage(element, baseImage); // Loop through the remaining 'overlay' image stacks

        overlayImageStacks.forEach(function (imgObj, overlayLayerIndex) {
          var imageId = _this.findImageFn(imgObj.imageIds, currentImageId);

          var layerIndex = overlayLayerIndex + 1;
          var currentLayerId = _this.layerIds[layerIndex]; // If no layer exists yet for this overlaid stack, create
          // One and add it to the layerIds property for this instance
          // Of the fusion renderer.

          if (!currentLayerId) {
            currentLayerId = cornerstone.addLayer(element, undefined, imgObj.options);

            _this.layerIds.push(currentLayerId);
          }

          if (imageId) {
            // If an imageId was returned from the findImage function,
            // Load it, make sure it's visible and update the layer
            // With the new image object.
            cornerstone.loadAndCacheImage(imageId).then(function (image) {
              cornerstone.setLayerImage(element, image, currentLayerId);
              cornerstone.updateImage(element);
            });
          } else {
            // If no imageId was returned from the findImage function.
            // This means that there is no relevant image to display.
            cornerstone.setLayerImage(element, undefined, currentLayerId);
            cornerstone.setActiveLayer(element, baseLayerId);
            cornerstone.updateImage(element);
          }
        });
      });
    }
  }]);

  return FusionRenderer;
}();



/***/ }),

/***/ "./stackTools/playClip.js":
/*!********************************!*\
  !*** ./stackTools/playClip.js ***!
  \********************************/
/*! exports provided: playClip, stopClip */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_425234__) {

"use strict";
__nested_webpack_require_425234__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_425234__.d(__nested_webpack_exports__, "playClip", function() { return playClip; });
/* harmony export (binding) */ __nested_webpack_require_425234__.d(__nested_webpack_exports__, "stopClip", function() { return stopClip; });
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_425234__(/*! ../events.js */ "./events.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_425234__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_425234__(/*! ../stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_425234__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_425234__(/*! ../util/triggerEvent.js */ "./util/triggerEvent.js");





var toolName = 'playClip';
/**
 * [private] Turns a Frame Time Vector (0018,1065) array into a normalized array of timeouts. Each element
 * ... of the resulting array represents the amount of time each frame will remain on the screen.
 * @param {Array} vector A Frame Time Vector (0018,1065) as specified in section C.7.6.5.1.2 of DICOM standard.
 * @param {Number} speed A speed factor which will be applied to each element of the resulting array.
 * @returns {Array} An array with timeouts for each animation frame.
 */

function getPlayClipTimeouts(vector, speed) {
  var i;
  var sample;
  var delay;
  var sum = 0;
  var limit = vector.length;
  var timeouts = []; // Initialize time varying to false

  timeouts.isTimeVarying = false;

  if (typeof speed !== 'number' || speed <= 0) {
    speed = 1;
  } // First element of a frame time vector must be discarded


  for (i = 1; i < limit; i++) {
    // eslint-disable-next-line no-bitwise
    delay = Number(vector[i]) / speed | 0; // Integral part only

    timeouts.push(delay);

    if (i === 1) {
      // Use first item as a sample for comparison
      sample = delay;
    } else if (delay !== sample) {
      timeouts.isTimeVarying = true;
    }

    sum += delay;
  }

  if (timeouts.length > 0) {
    if (timeouts.isTimeVarying) {
      // If it's a time varying vector, make the last item an average...
      // eslint-disable-next-line no-bitwise
      delay = sum / timeouts.length | 0;
    } else {
      delay = timeouts[0];
    }

    timeouts.push(delay);
  }

  return timeouts;
}
/**
 * [private] Performs the heavy lifting of stopping an ongoing animation.
 * @param {Object} playClipData The data from playClip that needs to be stopped.
 * @returns {void}
 */


function stopClipWithData(playClipData) {
  var id = playClipData.intervalId;

  if (typeof id !== 'undefined') {
    playClipData.intervalId = undefined;

    if (playClipData.usingFrameTimeVector) {
      clearTimeout(id);
    } else {
      clearInterval(id);
    }
  }
}
/**
 * [private] Trigger playClip tool stop event.
 * @param {HTMLElement} element
 * @returns {void}
 */


function triggerStopEvent(element) {
  var eventDetail = {
    element: element
  };
  Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].CLIP_STOPPED, eventDetail);
}
/**
 * Starts playing a clip or adjusts the frame rate of an already playing clip.  framesPerSecond is
 * optional and defaults to 30 if not specified.  A negative framesPerSecond will play the clip in reverse.
 * The element must be a stack of images
 * @param {HTMLElement} element
 * @param {number} framesPerSecond
 * @returns {void}
 */


function playClip(element, framesPerSecond) {
  var playClipData;
  var playClipTimeouts;

  if (element === undefined) {
    throw new Error('playClip: element must not be undefined');
  }

  var stackToolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, 'stack');

  if (!stackToolData || !stackToolData.data || !stackToolData.data.length) {
    return;
  }

  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone; // If we have more than one stack, check if we have a stack renderer defined

  var stackRenderer;

  if (stackToolData.data.length > 1) {
    var stackRendererData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, 'stackRenderer');

    if (stackRendererData && stackRendererData.data && stackRendererData.data.length) {
      stackRenderer = stackRendererData.data[0];
    }
  }

  var stackData = stackToolData.data[0];
  var playClipToolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, toolName);

  if (!playClipToolData || !playClipToolData.data || !playClipToolData.data.length) {
    playClipData = {
      intervalId: undefined,
      framesPerSecond: 30,
      lastFrameTimeStamp: undefined,
      frameRate: 0,
      frameTimeVector: undefined,
      ignoreFrameTimeVector: false,
      usingFrameTimeVector: false,
      speed: 1,
      reverse: false,
      loop: true
    };
    Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["addToolState"])(element, toolName, playClipData);
  } else {
    playClipData = playClipToolData.data[0]; // Make sure the specified clip is not running before any property update

    stopClipWithData(playClipData);
  } // If a framesPerSecond is specified and is valid, update the playClipData now


  if (framesPerSecond < 0 || framesPerSecond > 0) {
    playClipData.framesPerSecond = Number(framesPerSecond);
    playClipData.reverse = playClipData.framesPerSecond < 0; // If framesPerSecond is given, frameTimeVector will be ignored...

    playClipData.ignoreFrameTimeVector = true;
  } // Determine if frame time vector should be used instead of a fixed frame rate...


  if (playClipData.ignoreFrameTimeVector !== true && playClipData.frameTimeVector && playClipData.frameTimeVector.length === stackData.imageIds.length) {
    playClipTimeouts = getPlayClipTimeouts(playClipData.frameTimeVector, playClipData.speed);
  } // This function encapsulates the frame rendering logic...


  var playClipAction = function playClipAction() {
    // Hoisting of context variables
    var loader,
        startLoadingHandler,
        endLoadingHandler,
        errorLoadingHandler,
        newImageIdIndex = stackData.currentImageIdIndex;
    var imageCount = stackData.imageIds.length;

    if (playClipData.reverse) {
      newImageIdIndex--;
    } else {
      newImageIdIndex++;
    }

    if (!playClipData.loop && (newImageIdIndex < 0 || newImageIdIndex >= imageCount)) {
      stopClipWithData(playClipData);
      triggerStopEvent(element);
      return;
    } // Loop around if we go outside the stack


    if (newImageIdIndex >= imageCount) {
      newImageIdIndex = 0;
    }

    if (newImageIdIndex < 0) {
      newImageIdIndex = imageCount - 1;
    }

    if (newImageIdIndex !== stackData.currentImageIdIndex) {
      startLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getStartLoadHandler(element);
      endLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getEndLoadHandler(element);
      errorLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getErrorLoadingHandler(element);

      if (startLoadingHandler) {
        startLoadingHandler(element);
      }

      if (stackData.preventCache === true) {
        loader = cornerstone.loadImage(stackData.imageIds[newImageIdIndex]);
      } else {
        loader = cornerstone.loadAndCacheImage(stackData.imageIds[newImageIdIndex]);
      }

      loader.then(function (image) {
        try {
          stackData.currentImageIdIndex = newImageIdIndex;

          if (stackRenderer) {
            stackRenderer.currentImageIdIndex = newImageIdIndex;
            stackRenderer.render(element, stackToolData.data);
          } else {
            cornerstone.displayImage(element, image);
          }

          if (endLoadingHandler) {
            endLoadingHandler(element, image);
          }
        } catch (error) {
          return;
        }
      }, function (error) {
        var imageId = stackData.imageIds[newImageIdIndex];

        if (errorLoadingHandler) {
          errorLoadingHandler(element, imageId, error);
        }
      });
    }
  }; // If playClipTimeouts array is available, not empty and its elements are NOT uniform ...
  // ... (at least one timeout is different from the others), use alternate setTimeout implementation


  if (playClipTimeouts && playClipTimeouts.length > 0 && playClipTimeouts.isTimeVarying) {
    playClipData.usingFrameTimeVector = true;
    playClipData.intervalId = setTimeout(function playClipTimeoutHandler() {
      playClipData.intervalId = setTimeout(playClipTimeoutHandler, playClipTimeouts[stackData.currentImageIdIndex]);
      playClipAction();
    }, 0);
  } else {
    // ... otherwise user setInterval implementation which is much more efficient.
    playClipData.usingFrameTimeVector = false;
    playClipData.intervalId = setInterval(playClipAction, 1000 / Math.abs(playClipData.framesPerSecond));
  }
}
/**
 * Stops an already playing clip.
 * @param {HTMLElement} element
 * @returns {void}
 */


function stopClip(element) {
  var playClipToolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, toolName);

  if (!playClipToolData || !playClipToolData.data || !playClipToolData.data.length) {
    return;
  }

  stopClipWithData(playClipToolData.data[0]);
}



/***/ }),

/***/ "./stackTools/stackPrefetch.js":
/*!*************************************!*\
  !*** ./stackTools/stackPrefetch.js ***!
  \*************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_435383__) {

"use strict";
__nested_webpack_require_435383__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_435383__(/*! ./../externalModules.js */ "./externalModules.js");
/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_435383__(/*! ../stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_435383__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_435383__(/*! ../util/logger.js */ "./util/logger.js");
/* harmony import */ var _util_triggerEvent__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_435383__(/*! ../util/triggerEvent */ "./util/triggerEvent.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_435383__(/*! ../events.js */ "./events.js");






var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('stackTools:stackPrefetch');
var toolName = 'stackPrefetch';
var requestType = 'prefetch';
var priority = 0;
var addToBeginning = true;
var configuration = {
  maxImagesToPrefetch: Infinity,
  preserveExistingPool: false
};
var resetPrefetchTimeout;
var resetPrefetchDelay = 10;

function range(lowEnd, highEnd) {
  // Javascript version of Python's range function
  // http://stackoverflow.com/questions/3895478/does-javascript-have-a-method-like-range-to-generate-an-array-based-on-suppl
  lowEnd = Math.round(lowEnd) || 0;
  highEnd = Math.round(highEnd) || 0;
  var arr = [];
  var c = highEnd - lowEnd + 1;

  if (c <= 0) {
    return arr;
  }

  while (c--) {
    arr[c] = highEnd--;
  }

  return arr;
}

function nearestIndex(arr, x) {
  // Return index of nearest values in array
  // http://stackoverflow.com/questions/25854212/return-index-of-nearest-values-in-an-array
  var low = 0;
  var high = arr.length - 1;
  arr.forEach(function (v, idx) {
    if (v < x) {
      low = Math.max(idx, low);
    } else if (v > x) {
      high = Math.min(idx, high);
    }
  });
  return {
    low: low,
    high: high
  };
}

function prefetch(element) {
  // Check to make sure stack data exists
  var stackData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(element, 'stack');

  if (!stackData || !stackData.data || !stackData.data.length) {
    return;
  }

  var stack = stackData.data[0]; // Get the stackPrefetch tool data

  var stackPrefetchData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(element, toolName);

  if (!stackPrefetchData) {
    return;
  }

  var stackPrefetch = stackPrefetchData.data[0] || {}; // If all the requests are complete, disable the stackPrefetch tool

  if (!stackPrefetch.indicesToRequest || !stackPrefetch.indicesToRequest.length) {
    stackPrefetch.enabled = false;
  } // Make sure the tool is still enabled


  if (stackPrefetch.enabled === false) {
    return;
  } // Remove an imageIdIndex from the list of indices to request
  // This fires when the individual image loading deferred is resolved


  function removeFromList(imageIdIndex) {
    var index = stackPrefetch.indicesToRequest.indexOf(imageIdIndex);

    if (index > -1) {
      // Don't remove last element if imageIdIndex not found
      stackPrefetch.indicesToRequest.splice(index, 1);
    }
  } // Remove all already cached images from the
  // IndicesToRequest array


  stackPrefetchData.data[0].indicesToRequest.sort(function (a, b) {
    return a - b;
  });
  var indicesToRequestCopy = stackPrefetch.indicesToRequest.slice();
  indicesToRequestCopy.forEach(function (imageIdIndex) {
    var imageId = stack.imageIds[imageIdIndex];

    if (!imageId) {
      return;
    }

    var imageLoadObject = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.imageCache.getImageLoadObject(imageId);

    if (imageLoadObject) {
      removeFromList(imageIdIndex);
    }
  }); // Stop here if there are no images left to request
  // After those in the cache have been removed

  if (!stackPrefetch.indicesToRequest.length) {
    return;
  } // Clear the requestPool of prefetch requests, if needed.


  if (!configuration.preserveExistingPool) {
    _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.imageLoadPoolManager.clearRequestStack(requestType);
  } // Identify the nearest imageIdIndex to the currentImageIdIndex


  var nearest = nearestIndex(stackPrefetch.indicesToRequest, stack.currentImageIdIndex);
  var imageId;
  var nextImageIdIndex;
  var preventCache = false;

  function doneCallback(image) {
    logger.log('prefetch done: %s', image.imageId);
    var imageIdIndex = stack.imageIds.indexOf(image.imageId);
    removeFromList(imageIdIndex);
    Object(_util_triggerEvent__WEBPACK_IMPORTED_MODULE_4__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_5__["default"].STACK_PREFETCH_IMAGE_LOADED, {
      element: element,
      imageId: image.imageId,
      imageIndex: imageIdIndex,
      stackPrefetch: stackPrefetch,
      stack: stack
    }); // If there are no more images to fetch

    if (!(stackPrefetch.indicesToRequest && stackPrefetch.indicesToRequest.length > 0)) {
      Object(_util_triggerEvent__WEBPACK_IMPORTED_MODULE_4__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_5__["default"].STACK_PREFETCH_DONE, {
        element: element,
        stackPrefetch: stackPrefetch,
        stack: stack
      });
    }
  } // Retrieve the errorLoadingHandler if one exists


  var errorLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_1__["default"].getErrorLoadingHandler(element);

  function failCallback(error) {
    logger.log('prefetch errored: %o', error);

    if (errorLoadingHandler) {
      errorLoadingHandler(element, imageId, error, 'stackPrefetch');
    }
  } // Prefetch images around the current image (before and after)


  var lowerIndex = nearest.low;
  var higherIndex = nearest.high;
  var imageIdsToPrefetch = [];

  while (lowerIndex >= 0 || higherIndex < stackPrefetch.indicesToRequest.length) {
    var currentIndex = stack.currentImageIdIndex;
    var shouldSkipLower = currentIndex - stackPrefetch.indicesToRequest[lowerIndex] > configuration.maxImagesToPrefetch;
    var shouldSkipHigher = stackPrefetch.indicesToRequest[higherIndex] - currentIndex > configuration.maxImagesToPrefetch;
    var shouldLoadLower = !shouldSkipLower && lowerIndex >= 0;
    var shouldLoadHigher = !shouldSkipHigher && higherIndex < stackPrefetch.indicesToRequest.length;

    if (!shouldLoadHigher && !shouldLoadLower) {
      break;
    }

    if (shouldLoadLower) {
      nextImageIdIndex = stackPrefetch.indicesToRequest[lowerIndex--];
      imageId = stack.imageIds[nextImageIdIndex];
      imageIdsToPrefetch.push(imageId);
    }

    if (shouldLoadHigher) {
      nextImageIdIndex = stackPrefetch.indicesToRequest[higherIndex++];
      imageId = stack.imageIds[nextImageIdIndex];
      imageIdsToPrefetch.push(imageId);
    }
  }

  var requestFn;
  var options = {
    addToBeginning: addToBeginning,
    priority: priority,
    requestType: requestType
  };

  if (preventCache) {
    requestFn = function requestFn(id) {
      return _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.loadImage(id, options);
    };
  } else {
    requestFn = function requestFn(id) {
      return _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.loadAndCacheImage(id, options);
    };
  }

  imageIdsToPrefetch.reverse().forEach(function (imageId) {
    _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.imageLoadPoolManager.addRequest(requestFn.bind(null, imageId), requestType, // Additional details
    {
      imageId: imageId
    }, priority, addToBeginning);
  });
}

function getPromiseRemovedHandler(element) {
  return function (e) {
    var eventData = e.detail; // When an imagePromise has been pushed out of the cache, re-add its index
    // It to the indicesToRequest list so that it will be retrieved later if the
    // CurrentImageIdIndex is changed to an image nearby

    var stackData;

    try {
      // It will throw an exception in some cases (eg: thumbnails)
      stackData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(element, 'stack');
    } catch (error) {
      return;
    }

    if (!stackData || !stackData.data || !stackData.data.length) {
      return;
    }

    var stack = stackData.data[0];
    var imageIdIndex = stack.imageIds.indexOf(eventData.imageId); // Make sure the image that was removed is actually in this stack
    // Before adding it to the indicesToRequest array

    if (imageIdIndex < 0) {
      return;
    }

    var stackPrefetchData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(element, toolName);

    if (!stackPrefetchData || !stackPrefetchData.data || !stackPrefetchData.data.length) {
      return;
    }

    stackPrefetchData.data[0].indicesToRequest.push(imageIdIndex);
  };
}

function onImageUpdated(e) {
  // Start prefetching again (after a delay)
  // When the user has scrolled to a new image
  clearTimeout(resetPrefetchTimeout);
  resetPrefetchTimeout = setTimeout(function () {
    var element = e.target; // If playClip is enabled and the user loads a different series in the viewport
    // An exception will be thrown because the element will not be enabled anymore

    try {
      prefetch(element);
    } catch (error) {
      return;
    }
  }, resetPrefetchDelay);
}

function enable(element) {
  // Clear old prefetch data. Skipping this can cause problems when changing the series inside an element
  var stackPrefetchDataArray = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(element, toolName);
  stackPrefetchDataArray.data = []; // First check that there is stack data available

  var stackData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(element, 'stack');

  if (!stackData || !stackData.data || !stackData.data.length) {
    return;
  }

  var stack = stackData.data[0]; // Check if we are allowed to cache images in this stack

  if (stack.preventCache === true) {
    logger.warn('A stack that should not be cached was given the stackPrefetch');
    return;
  } // Use the currentImageIdIndex from the stack as the initalImageIdIndex


  var stackPrefetchData = {
    indicesToRequest: range(0, stack.imageIds.length - 1),
    enabled: true,
    direction: 1
  }; // Remove the currentImageIdIndex from the list to request

  var indexOfCurrentImage = stackPrefetchData.indicesToRequest.indexOf(stack.currentImageIdIndex);
  stackPrefetchData.indicesToRequest.splice(indexOfCurrentImage, 1);
  Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["addToolState"])(element, toolName, stackPrefetchData);
  prefetch(element);
  element.removeEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.NEW_IMAGE, onImageUpdated);
  element.addEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.NEW_IMAGE, onImageUpdated);
  var promiseRemovedHandler = getPromiseRemovedHandler(element);
  _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.events.removeEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.IMAGE_CACHE_PROMISE_REMOVED, promiseRemovedHandler);
  _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.events.addEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.IMAGE_CACHE_PROMISE_REMOVED, promiseRemovedHandler);
}

function disable(element) {
  clearTimeout(resetPrefetchTimeout);
  element.removeEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.NEW_IMAGE, onImageUpdated);
  var promiseRemovedHandler = getPromiseRemovedHandler(element);
  _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.events.removeEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.IMAGE_CACHE_PROMISE_REMOVED, promiseRemovedHandler);
  var stackPrefetchData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(element, toolName); // If there is actually something to disable, disable it

  if (stackPrefetchData && stackPrefetchData.data.length) {
    stackPrefetchData.data[0].enabled = false; // Clear current prefetch requests from the requestPool

    _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.imageLoadPoolManager.clearRequestStack(requestType);
  }
}

function getConfiguration() {
  return configuration;
}

function setConfiguration(config) {
  configuration = config;
} // Module/private exports


var stackPrefetch = {
  enable: enable,
  disable: disable,
  getConfiguration: getConfiguration,
  setConfiguration: setConfiguration
};
/* harmony default export */ __nested_webpack_exports__["default"] = (stackPrefetch);

/***/ }),

/***/ "./stackTools/stackRenderers.js":
/*!**************************************!*\
  !*** ./stackTools/stackRenderers.js ***!
  \**************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_448874__) {

"use strict";
__nested_webpack_require_448874__.r(__nested_webpack_exports__);
/* harmony import */ var _fusionRenderer_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_448874__(/*! ./fusionRenderer.js */ "./stackTools/fusionRenderer.js");

var stackRenderers = {};
stackRenderers.FusionRenderer = _fusionRenderer_js__WEBPACK_IMPORTED_MODULE_0__["default"];
/* harmony default export */ __nested_webpack_exports__["default"] = (stackRenderers);

/***/ }),

/***/ "./stateManagement/frameOfReferenceStateManager.js":
/*!*********************************************************!*\
  !*** ./stateManagement/frameOfReferenceStateManager.js ***!
  \*********************************************************/
/*! exports provided: newFrameOfReferenceSpecificToolStateManager, globalFrameOfReferenceSpecificToolStateManager */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_449732__) {

"use strict";
__nested_webpack_require_449732__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_449732__.d(__nested_webpack_exports__, "newFrameOfReferenceSpecificToolStateManager", function() { return newFrameOfReferenceSpecificToolStateManager; });
/* harmony export (binding) */ __nested_webpack_require_449732__.d(__nested_webpack_exports__, "globalFrameOfReferenceSpecificToolStateManager", function() { return globalFrameOfReferenceSpecificToolStateManager; });
/**
 * Implements a frame-of-reference specific tool state management strategy.  This means that
 * Measurement data are tied to a specific frame of reference UID and only visible to objects using
 * That frame-of-reference UID.
 * @public
 * @constructor newFrameOfReferenceSpecificToolStateManager
 * @memberof StateManagement
 *
 * @returns {Object} A frameOfReferenceSpecificToolStateManager instance.
 */
function newFrameOfReferenceSpecificToolStateManager() {
  var toolState = {}; // Here we add tool state, this is done by tools as well
  // As modules that restore saved state

  function addFrameOfReferenceSpecificToolState(frameOfReference, toolName, data) {
    // If we don't have any tool state for this frameOfReference, add an empty object
    if (toolState.hasOwnProperty(frameOfReference) === false) {
      toolState[frameOfReference] = {};
    }

    var frameOfReferenceToolState = toolState[frameOfReference]; // If we don't have tool state for this type of tool, add an empty object

    if (frameOfReferenceToolState.hasOwnProperty(toolName) === false) {
      frameOfReferenceToolState[toolName] = {
        data: []
      };
    }

    var toolData = frameOfReferenceToolState[toolName]; // Finally, add this new tool to the state

    toolData.data.push(data);
  } // Here you can get state - used by tools as well as modules
  // That save state persistently


  function getFrameOfReferenceSpecificToolState(frameOfReference, toolName) {
    // If we don't have any tool state for this frame of reference, return undefined
    if (toolState.hasOwnProperty(frameOfReference) === false) {
      return;
    }

    var frameOfReferenceToolState = toolState[frameOfReference]; // If we don't have tool state for this type of tool, return undefined

    if (frameOfReferenceToolState.hasOwnProperty(toolName) === false) {
      return;
    }

    var toolData = frameOfReferenceToolState[toolName];
    return toolData;
  }

  function removeFrameOfReferenceSpecificToolState(frameOfReference, toolName, data) {
    // If we don't have any tool state for this frame of reference, return undefined
    if (toolState.hasOwnProperty(frameOfReference) === false) {
      return;
    }

    var frameOfReferenceToolState = toolState[frameOfReference]; // If we don't have tool state for this type of tool, return undefined

    if (frameOfReferenceToolState.hasOwnProperty(toolName) === false) {
      return;
    }

    var toolData = frameOfReferenceToolState[toolName]; // Find this tool data

    var indexOfData = -1;

    for (var i = 0; i < toolData.data.length; i++) {
      if (toolData.data[i] === data) {
        indexOfData = i;
      }
    }

    if (indexOfData !== -1) {
      toolData.data.splice(indexOfData, 1);
    }
  }

  return {
    get: getFrameOfReferenceSpecificToolState,
    add: addFrameOfReferenceSpecificToolState,
    remove: removeFrameOfReferenceSpecificToolState
  };
} // A global frameOfReferenceSpecificToolStateManager - the most common case is to share 3d information
// Between stacks of images


var globalFrameOfReferenceSpecificToolStateManager = newFrameOfReferenceSpecificToolStateManager();


/***/ }),

/***/ "./stateManagement/imageIdSpecificStateManager.js":
/*!********************************************************!*\
  !*** ./stateManagement/imageIdSpecificStateManager.js ***!
  \********************************************************/
/*! exports provided: newImageIdSpecificToolStateManager, globalImageIdSpecificToolStateManager */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_453759__) {

"use strict";
__nested_webpack_require_453759__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_453759__.d(__nested_webpack_exports__, "newImageIdSpecificToolStateManager", function() { return newImageIdSpecificToolStateManager; });
/* harmony export (binding) */ __nested_webpack_require_453759__.d(__nested_webpack_exports__, "globalImageIdSpecificToolStateManager", function() { return globalImageIdSpecificToolStateManager; });
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_453759__(/*! ../externalModules.js */ "./externalModules.js");

/**
 * Implements an imageId specific tool state management strategy.  This means that
 * Measurements data is tied to a specific imageId and only visible for enabled elements
 * That are displaying that imageId.
 * @public
 * @constructor newImageIdSpecificToolStateManager
 * @memberof StateManagement
 *
 * @returns {Object} An imageIdSpecificToolStateManager instance.
 */

function newImageIdSpecificToolStateManager() {
  var toolState = {}; // Here we add tool state, this is done by tools as well
  // As modules that restore saved state

  function saveImageIdToolState(imageId) {
    return toolState[imageId];
  }

  function restoreImageIdToolState(imageId, imageIdToolState) {
    toolState[imageId] = imageIdToolState;
  }

  function saveToolState() {
    return toolState;
  }

  function restoreToolState(savedToolState) {
    toolState = savedToolState;
  } // Here we add tool state, this is done by tools as well
  // As modules that restore saved state


  function addElementToolState(element, toolName, data) {
    var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getEnabledElement(element); // If we don't have an image for this element exit early

    if (!enabledElement.image) {
      return;
    }

    addImageIdToolState(enabledElement.image.imageId, toolName, data);
  }

  function addImageIdToolState(imageId, toolName, data) {
    // If we don't have any tool state for this imageId, add an empty object
    if (toolState.hasOwnProperty(imageId) === false) {
      toolState[imageId] = {};
    }

    var imageIdToolState = toolState[imageId]; // If we don't have tool state for this tool name, add an empty object

    if (imageIdToolState.hasOwnProperty(toolName) === false) {
      imageIdToolState[toolName] = {
        data: []
      };
    }

    var toolData = imageIdToolState[toolName]; // Finally, add this new tool to the state

    toolData.data.push(data);
  }

  function getElementToolState(element, toolName) {
    var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getEnabledElement(element); // If the element does not have an image return undefined.

    if (!enabledElement.image) {
      return;
    }

    return getImageIdToolState(enabledElement.image.imageId, toolName);
  } // Here you can get state - used by tools as well as modules
  // That save state persistently


  function getImageIdToolState(imageId, toolName) {
    // If we don't have any tool state for this imageId, return undefined
    if (toolState.hasOwnProperty(imageId) === false) {
      return;
    }

    var imageIdToolState = toolState[imageId]; // If we don't have tool state for this tool name, return undefined

    if (imageIdToolState.hasOwnProperty(toolName) === false) {
      return;
    }

    return imageIdToolState[toolName];
  } // Replaces the given tool's state using the provided element's imageId


  function setElementToolState(element, toolName, data) {
    var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getEnabledElement(element);

    if (!enabledElement.image) {
      return;
    }

    setImageIdToolState(enabledElement.image.imageId, toolName, data);
  } // Replaces the imageId's tool state for a given tool


  function setImageIdToolState(imageId, toolName, data) {
    var imageIdToolState = toolState[imageId]; // Set the toolState

    imageIdToolState[toolName] = data;
  } // Clears all tool data from this toolStateManager.


  function clearElementToolState(element) {
    var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getEnabledElement(element);

    if (!enabledElement.image) {
      return;
    }

    clearImageIdToolState(enabledElement.image.imageId);
  }

  function clearImageIdToolState(imageId) {
    if (toolState.hasOwnProperty(imageId) === false) {
      return;
    }

    delete toolState[imageId];
  }

  return {
    get: getElementToolState,
    add: addElementToolState,
    set: setElementToolState,
    clear: clearElementToolState,
    getImageIdToolState: getImageIdToolState,
    addImageIdToolState: addImageIdToolState,
    setImageIdToolState: setImageIdToolState,
    clearImageIdToolState: clearImageIdToolState,
    saveImageIdToolState: saveImageIdToolState,
    restoreImageIdToolState: restoreImageIdToolState,
    saveToolState: saveToolState,
    restoreToolState: restoreToolState,
    toolState: toolState
  };
} // A global imageIdSpecificToolStateManager - the most common case is to share state between all
// Visible enabled images


var globalImageIdSpecificToolStateManager = newImageIdSpecificToolStateManager();


/***/ }),

/***/ "./stateManagement/loadHandlerManager.js":
/*!***********************************************!*\
  !*** ./stateManagement/loadHandlerManager.js ***!
  \***********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_459349__) {

"use strict";
__nested_webpack_require_459349__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_459349__(/*! ../externalModules.js */ "./externalModules.js");

var _DEFAULT_LOAD_HANDLER = 'DEFAULT';
var defaultStartLoadHandler = {};
var defaultEndLoadHandler = {};
var defaultErrorLoadingHandler = {};

function _getUUIDFromElement(element) {
  if (!element) {
    return _DEFAULT_LOAD_HANDLER;
  }

  var uuid = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getEnabledElement(element).uuid;

  if (!uuid) {
    throw new Error('Something went wrong when getting uuid from element');
  }

  return uuid;
}

function setStartLoadHandler(handler) {
  var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;

  if (!handler) {
    throw new Error('The Handler function must be defined');
  }

  var uuid = _getUUIDFromElement(element);

  defaultStartLoadHandler[uuid] = handler;
}

function getStartLoadHandler(element) {
  var uuid = _getUUIDFromElement(element);

  return defaultStartLoadHandler[uuid] || defaultStartLoadHandler[_DEFAULT_LOAD_HANDLER];
}

function setEndLoadHandler(handler) {
  var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;

  if (!handler) {
    throw new Error('The Handler function must be defined');
  }

  var uuid = _getUUIDFromElement(element);

  defaultEndLoadHandler[uuid] = handler;
}

function getEndLoadHandler(element) {
  var uuid = _getUUIDFromElement(element);

  return defaultEndLoadHandler[uuid] || defaultEndLoadHandler[_DEFAULT_LOAD_HANDLER];
}

function setErrorLoadingHandler(handler) {
  var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;

  if (!handler) {
    throw new Error('The Handler function must be defined');
  }

  var uuid = _getUUIDFromElement(element);

  defaultErrorLoadingHandler[uuid] = handler;
}

function getErrorLoadingHandler(element) {
  var uuid = _getUUIDFromElement(element);

  return defaultErrorLoadingHandler[uuid] || defaultErrorLoadingHandler[_DEFAULT_LOAD_HANDLER];
}

function removeHandlers(element) {
  var uuid = _getUUIDFromElement(element);

  delete defaultStartLoadHandler[uuid];
  delete defaultEndLoadHandler[uuid];
  delete defaultErrorLoadingHandler[uuid];
}

var loadHandlerManager = {
  setStartLoadHandler: setStartLoadHandler,
  getStartLoadHandler: getStartLoadHandler,
  setEndLoadHandler: setEndLoadHandler,
  getEndLoadHandler: getEndLoadHandler,
  setErrorLoadingHandler: setErrorLoadingHandler,
  getErrorLoadingHandler: getErrorLoadingHandler,
  removeHandlers: removeHandlers
};
/* harmony default export */ __nested_webpack_exports__["default"] = (loadHandlerManager);

/***/ }),

/***/ "./stateManagement/stackSpecificStateManager.js":
/*!******************************************************!*\
  !*** ./stateManagement/stackSpecificStateManager.js ***!
  \******************************************************/
/*! exports provided: stackSpecificStateManager, newStackSpecificToolStateManager, addStackStateManager */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_462538__) {

"use strict";
__nested_webpack_require_462538__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_462538__.d(__nested_webpack_exports__, "stackSpecificStateManager", function() { return stackSpecificStateManager; });
/* harmony export (binding) */ __nested_webpack_require_462538__.d(__nested_webpack_exports__, "newStackSpecificToolStateManager", function() { return newStackSpecificToolStateManager; });
/* harmony export (binding) */ __nested_webpack_require_462538__.d(__nested_webpack_exports__, "addStackStateManager", function() { return addStackStateManager; });
/* harmony import */ var _imageIdSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_462538__(/*! ./imageIdSpecificStateManager.js */ "./stateManagement/imageIdSpecificStateManager.js");
/* harmony import */ var _toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_462538__(/*! ./toolState.js */ "./stateManagement/toolState.js");


/**
 * Implements an Stack specific tool state management strategy. This means
 * That tool data is shared between all imageIds in a given stack.
 * @public
 * @constructor newStackSpecificToolStateManager
 * @memberof StateManagement
 *
 * @param {string[]} toolNames     List of tools that should have state shared across a stack (a display set) of images
 * @param {Object} oldStateManager The imageIdSpecificStateManager.
 * @returns {Object} A stackSpecificToolStateManager instance.
 */

function newStackSpecificToolStateManager(toolNames, oldStateManager) {
  var toolState = {};

  function saveToolState() {
    return toolState;
  }

  function restoreToolState(stackToolState) {
    toolState = stackToolState;
  } // Here we add tool state, this is done by tools as well
  // As modules that restore saved state


  function addStackSpecificToolState(element, toolName, data) {
    // If this is a tool type to apply to the stack, do so
    if (toolNames.indexOf(toolName) >= 0) {
      // If we don't have tool state for this tool name, add an empty object
      if (toolState.hasOwnProperty(toolName) === false) {
        toolState[toolName] = {
          data: []
        };
      }

      var toolData = toolState[toolName]; // Finally, add this new tool to the state

      toolData.data.push(data);
    } else {
      // Call the imageId specific tool state manager
      return oldStateManager.add(element, toolName, data);
    }
  } // Here you can get state - used by tools as well as modules
  // That save state persistently


  function getStackSpecificToolState(element, toolName) {
    // If this is a tool type to apply to the stack, do so
    if (toolNames.indexOf(toolName) >= 0) {
      // If we don't have tool state for this tool name, add an empty object
      if (toolState.hasOwnProperty(toolName) === false) {
        toolState[toolName] = {
          data: []
        };
      }

      return toolState[toolName];
    } // Call the imageId specific tool state manager


    return oldStateManager.get(element, toolName);
  }

  var stackSpecificToolStateManager = {
    get: getStackSpecificToolState,
    add: addStackSpecificToolState,
    saveToolState: saveToolState,
    restoreToolState: restoreToolState,
    toolState: toolState
  };
  return stackSpecificToolStateManager;
}

var stackStateManagers = [];

function addStackStateManager(element, otherTools) {
  var oldStateManager = Object(_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getElementToolStateManager"])(element);

  if (!oldStateManager) {
    oldStateManager = _imageIdSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_0__["globalImageIdSpecificToolStateManager"];
  }

  var stackTools = ['stack', 'stackPrefetch', 'playClip', 'volume', 'slab', 'referenceLines', 'crosshairs', 'stackRenderer'];

  if (otherTools) {
    stackTools = stackTools.concat(otherTools);
  }

  var stackSpecificStateManager = newStackSpecificToolStateManager(stackTools, oldStateManager);
  stackStateManagers.push(stackSpecificStateManager);
  Object(_toolState_js__WEBPACK_IMPORTED_MODULE_1__["setElementToolStateManager"])(element, stackSpecificStateManager);
}

var stackSpecificStateManager = {
  newStackSpecificToolStateManager: newStackSpecificToolStateManager,
  addStackStateManager: addStackStateManager
};


/***/ }),

/***/ "./stateManagement/textStyle.js":
/*!**************************************!*\
  !*** ./stateManagement/textStyle.js ***!
  \**************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_467002__) {

"use strict";
__nested_webpack_require_467002__.r(__nested_webpack_exports__);
var textStyle = {
  fontSize: 15,
  fontFamily: 'Arial',
  backgroundColor: 'transparent'
};
/**
 * @deprecated
 * This function will be deprecated and users must use `setFontSize` and
 * `setFontFamily` to set the font configuration independently.
 *
 * @param {string} font Font string with font size and font family
 * @returns {void}
 */

function setFont(font) {
  var split = font.split('px ');

  if (split.length === 2) {
    setFontSize(parseFloat(split[0]));
    setFontFamily(split[1]);
  }
}
/**
 * Returns all the font styling properties combined into a single string
 * following the CSS font property pattern.
 * @see {@link https://www.w3.org/TR/css-fonts-3/#font-prop|3.7. Shorthand font property: the font property}
 *
 * @returns {string} CSS font property
 */


function getFont() {
  return "".concat(textStyle.fontSize, "px ").concat(textStyle.fontFamily);
}
/**
 * Sets the font family that will be used for general font rendering.
 * @see {@link https://www.w3.org/TR/css-fonts-3/#font-family-prop|3.1. Font family: the font-family property}
 *
 * @param {string} fontFamily Name of the font to be used
 * @returns {void}
 */


function setFontFamily(fontFamily) {
  if (typeof fontFamily !== 'string') {
    throw new Error('Font family must be a valid string');
  }

  textStyle.fontFamily = fontFamily;
}
/**
 * Returns the defined font family for rendering text boxes.
 *
 * @returns {string} The font family used for rendering text boxes
 */


function getFontFamily() {
  return textStyle.fontFamily;
}
/**
 * Sets the font size in pixels that will be used for general font rendering.
 *
 * @param {number} fontSize Font size in pixels
 * @returns {void}
 */


function setFontSize(fontSize) {
  if (typeof fontSize !== 'number' || isNaN(fontSize) || !isFinite(fontSize)) {
    throw new Error('Font size must be a valid number');
  }

  textStyle.fontSize = parseFloat(fontSize);
}
/**
 * Returns the font size in pixels that will be used for general font rendering.
 *
 * @returns {number} Font size in pixels
 */


function getFontSize() {
  return textStyle.fontSize;
}
/**
 * Changes the background color of the text's bounding box.
 * The default background color is transparent, that's why it doesn't display
 * any background for the text box.
 *
 * @param {string} backgroundColor Background color for the text
 * @returns {void}
 */


function setBackgroundColor(backgroundColor) {
  textStyle.backgroundColor = backgroundColor;
}
/**
 * Returns the background color that is being used for rendering text boxes.
 *
 * @returns {string} The background color for the text's bounding box
 */


function getBackgroundColor() {
  return textStyle.backgroundColor;
}

var textStyleApi = {
  setFont: setFont,
  getFont: getFont,
  setFontSize: setFontSize,
  getFontSize: getFontSize,
  setFontFamily: setFontFamily,
  getFontFamily: getFontFamily,
  setBackgroundColor: setBackgroundColor,
  getBackgroundColor: getBackgroundColor
};
/* harmony default export */ __nested_webpack_exports__["default"] = (textStyleApi);

/***/ }),

/***/ "./stateManagement/toolColors.js":
/*!***************************************!*\
  !*** ./stateManagement/toolColors.js ***!
  \***************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_470396__) {

"use strict";
__nested_webpack_require_470396__.r(__nested_webpack_exports__);
var defaultColor = 'white',
    activeColor = 'greenyellow',
    fillColor = 'transparent';

function setFillColor(color) {
  fillColor = color;
}

function getFillColor() {
  return fillColor;
}

function setToolColor(color) {
  defaultColor = color;
}

function getToolColor() {
  return defaultColor;
}

function setActiveColor(color) {
  activeColor = color;
}

function getActiveColor() {
  return activeColor;
}

function getColorIfActive(data) {
  if (data.color) {
    return data.color;
  }

  return data.active ? activeColor : defaultColor;
}

var toolColors = {
  setFillColor: setFillColor,
  getFillColor: getFillColor,
  setToolColor: setToolColor,
  getToolColor: getToolColor,
  setActiveColor: setActiveColor,
  getActiveColor: getActiveColor,
  getColorIfActive: getColorIfActive
};
/* harmony default export */ __nested_webpack_exports__["default"] = (toolColors);

/***/ }),

/***/ "./stateManagement/toolCoordinates.js":
/*!********************************************!*\
  !*** ./stateManagement/toolCoordinates.js ***!
  \********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_471641__) {

"use strict";
__nested_webpack_require_471641__.r(__nested_webpack_exports__);
var coordsData;

function setCoords(eventData) {
  coordsData = eventData.currentPoints.canvas;
}

function getCoords() {
  return coordsData;
}

var toolCoordinates = {
  setCoords: setCoords,
  getCoords: getCoords
};
/* harmony default export */ __nested_webpack_exports__["default"] = (toolCoordinates);

/***/ }),

/***/ "./stateManagement/toolState.js":
/*!**************************************!*\
  !*** ./stateManagement/toolState.js ***!
  \**************************************/
/*! exports provided: addToolState, getToolState, removeToolState, clearToolState, setElementToolStateManager, getElementToolStateManager */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_472393__) {

"use strict";
__nested_webpack_require_472393__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_472393__.d(__nested_webpack_exports__, "addToolState", function() { return addToolState; });
/* harmony export (binding) */ __nested_webpack_require_472393__.d(__nested_webpack_exports__, "getToolState", function() { return getToolState; });
/* harmony export (binding) */ __nested_webpack_require_472393__.d(__nested_webpack_exports__, "removeToolState", function() { return removeToolState; });
/* harmony export (binding) */ __nested_webpack_require_472393__.d(__nested_webpack_exports__, "clearToolState", function() { return clearToolState; });
/* harmony export (binding) */ __nested_webpack_require_472393__.d(__nested_webpack_exports__, "setElementToolStateManager", function() { return setElementToolStateManager; });
/* harmony export (binding) */ __nested_webpack_require_472393__.d(__nested_webpack_exports__, "getElementToolStateManager", function() { return getElementToolStateManager; });
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_472393__(/*! ../events.js */ "./events.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_472393__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _imageIdSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_472393__(/*! ./imageIdSpecificStateManager.js */ "./stateManagement/imageIdSpecificStateManager.js");
/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_472393__(/*! ../util/triggerEvent.js */ "./util/triggerEvent.js");
/* harmony import */ var _util_uuidv4_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_472393__(/*! ../util/uuidv4.js */ "./util/uuidv4.js");





/**
 * Returns the toolstate for a specific element.
 * @public
 * @function getElementToolStateManager
 *
 * @param  {HTMLElement} element The element.
 * @returns {Object} The toolState.
 */

function getElementToolStateManager(element) {
  var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getEnabledElement(element); // If the enabledElement has no toolStateManager, create a default one for it
  // NOTE: This makes state management element specific

  if (enabledElement.toolStateManager === undefined) {
    enabledElement.toolStateManager = _imageIdSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_2__["globalImageIdSpecificToolStateManager"];
  }

  return enabledElement.toolStateManager;
}
/**
 * Adds tool state to the toolStateManager, this is done by tools as well
 * as modules that restore saved state.
 * @public
 * @method addToolState
 *
 * @param  {HTMLElement} element  The element.
 * @param  {string} toolName      The name of the tool the state belongs to.
 * @param  {Object} measurementData The data to store in the state.
 * @returns {undefined}
 */


function addToolState(element, toolName, measurementData) {
  var toolStateManager = getElementToolStateManager(element);
  measurementData.uuid = measurementData.uuid || Object(_util_uuidv4_js__WEBPACK_IMPORTED_MODULE_4__["default"])();
  toolStateManager.add(element, toolName, measurementData);
  var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MEASUREMENT_ADDED;
  var eventData = {
    toolName: toolName,
    toolType: toolName,
    // Deprecation notice: toolType will be replaced by toolName
    element: element,
    measurementData: measurementData
  };
  Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, eventType, eventData);
}
/**
 * Returns tool specific state of an element. Used by tools as well as modules
 * that save state persistently
 * @export
 * @public
 * @method
 * @name getToolState
 *
 * @param  {HTMLElement} element The element.
 * @param  {string} toolName The name of the tool the state belongs to.
 * @returns {Object}          The element's state for the given toolName.
 */


function getToolState(element, toolName) {
  var toolStateManager = getElementToolStateManager(element);
  return toolStateManager.get(element, toolName);
}
/**
 * Removes specific tool state from the toolStateManager.
 * @public
 * @method removeToolState
 *
 * @param  {HTMLElement} element  The element.
 * @param  {string} toolName      The name of the tool the state belongs to.
 * @param  {Object} data          The data to remove from the toolStateManager.
 * @returns {undefined}
 */


function removeToolState(element, toolName, data) {
  var toolStateManager = getElementToolStateManager(element);
  var toolData = toolStateManager.get(element, toolName);

  if (!toolData || !toolData.data || !toolData.data.length) {
    return;
  } // Find this tool data


  var indexOfData = -1;

  for (var i = 0; i < toolData.data.length; i++) {
    if (toolData.data[i] === data) {
      indexOfData = i;
    }
  }

  if (indexOfData !== -1) {
    toolData.data.splice(indexOfData, 1);
    var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MEASUREMENT_REMOVED;
    var eventData = {
      toolName: toolName,
      toolType: toolName,
      // Deprecation notice: toolType will be replaced by toolName
      element: element,
      measurementData: data
    };
    Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, eventType, eventData);
  }
}
/**
 * Removes all toolState from the toolStateManager corresponding to
 * the toolName and element.
 * @public
 * @method clearToolState
 *
 * @param  {HTMLElement} element  The element.
 * @param  {string} toolName      The name of the tool the state belongs to.
 * @returns {undefined}
 */


function clearToolState(element, toolName) {
  var toolStateManager = getElementToolStateManager(element);
  var toolData = toolStateManager.get(element, toolName); // If any toolData actually exists, clear it

  if (toolData !== undefined) {
    toolData.data = [];
  }
}
/**
 * Sets the tool state manager for an element
 * @public
 * @method setElementToolStateManager
 *
 * @param  {HTMLElement} element The element.
 * @param {Object} toolStateManager The toolStateManager.
 * @returns {undefined}
 */


function setElementToolStateManager(element, toolStateManager) {
  var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getEnabledElement(element);
  enabledElement.toolStateManager = toolStateManager;
}



/***/ }),

/***/ "./stateManagement/toolStyle.js":
/*!**************************************!*\
  !*** ./stateManagement/toolStyle.js ***!
  \**************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_478966__) {

"use strict";
__nested_webpack_require_478966__.r(__nested_webpack_exports__);
var defaultWidth = 1,
    activeWidth = 2;

function setToolWidth(width) {
  defaultWidth = width;
}

function getToolWidth() {
  return defaultWidth;
}

function setActiveWidth(width) {
  activeWidth = width;
}

function getActiveWidth() {
  return activeWidth;
}

var toolStyle = {
  setToolWidth: setToolWidth,
  getToolWidth: getToolWidth,
  setActiveWidth: setActiveWidth,
  getActiveWidth: getActiveWidth
};
/* harmony default export */ __nested_webpack_exports__["default"] = (toolStyle);

/***/ }),

/***/ "./store/addTool.js":
/*!**************************!*\
  !*** ./store/addTool.js ***!
  \**************************/
/*! exports provided: addTool, addToolForElement */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_479769__) {

"use strict";
__nested_webpack_require_479769__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_479769__.d(__nested_webpack_exports__, "addTool", function() { return addTool; });
/* harmony export (binding) */ __nested_webpack_require_479769__.d(__nested_webpack_exports__, "addToolForElement", function() { return addToolForElement; });
/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_479769__(/*! ./index.js */ "./store/index.js");
/* harmony import */ var _getToolForElement_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_479769__(/*! ./getToolForElement.js */ "./store/getToolForElement.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_479769__(/*! ../util/logger.js */ "./util/logger.js");



var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_2__["getLogger"])('addTool');
/**
 * Adds a tool to an enabled element.
 *
 * @public
 * @function addToolForElement
 * @memberof CornerstoneTools
 *
 * @param {HTMLElement} element The element to add the tool to.
 * @param {BaseTool} ApiTool The tool to add to the element.
 * @param {Object} [props] Override the default tool props
 * @returns {undefined}
 */

var addToolForElement = function addToolForElement(element, ApiTool, props) {
  // Instantiating the tool here makes it harder to accidentally add
  // The same tool (by reference) for multiple elements (which would reassign the tool
  // To a new element).
  var tool = new ApiTool(props);
  var toolAlreadyAddedToElement = Object(_getToolForElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, tool.name);

  if (toolAlreadyAddedToElement) {
    logger.warn('%s has already been added to the target element', tool.name);
    return;
  }

  tool.element = element;
  _index_js__WEBPACK_IMPORTED_MODULE_0__["default"].state.tools.push(tool);
};
/**
 * Adds a tool to all enabled element.
 *
 * @public
 * @function addTool
 * @memberof CornerstoneTools
 *
 * @param {BaseTool} ApiTool The tool to add to each element.
 * @param {Object} [props] Override the default tool configuration
 * @returns {undefined}
 */


var addTool = function addTool(ApiTool, props) {
  _addToolGlobally(ApiTool, props);

  _index_js__WEBPACK_IMPORTED_MODULE_0__["default"].state.enabledElements.forEach(function (element) {
    addToolForElement(element, ApiTool, props);
  });
};
/**
 * Adds tool with matching name from globally registered tools.
 * Requires `globalToolSyncEnabled` to be set to true
 *
 * @private
 * @function addToolGlobally
 *
 * @param {BaseTool} ApiTool
 * @param {Object} [props] Override the default tool configuration
 * @returns {undefined}
 */


var _addToolGlobally = function _addToolGlobally(ApiTool, props) {
  var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_0__["getModule"])('globalConfiguration'),
      configuration = _getModule.configuration;

  if (!configuration.globalToolSyncEnabled) {
    return;
  }

  var tool = new ApiTool(props);
  var toolAlreadyAddedGlobally = _index_js__WEBPACK_IMPORTED_MODULE_0__["default"].state.globalTools[tool.name] !== undefined;

  if (toolAlreadyAddedGlobally) {
    logger.warn('%s has already been added globally', tool.name);
    return;
  }

  _index_js__WEBPACK_IMPORTED_MODULE_0__["default"].state.globalTools[tool.name] = {
    tool: ApiTool,
    props: props,
    activeBindings: []
  };
};



/***/ }),

/***/ "./store/filterToolsUsableWithMultiPartTools.js":
/*!******************************************************!*\
  !*** ./store/filterToolsUsableWithMultiPartTools.js ***!
  \******************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_483462__) {

"use strict";
__nested_webpack_require_483462__.r(__nested_webpack_exports__);
/* harmony import */ var _tools_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_483462__(/*! ../tools/base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _tools_base_BaseBrushTool_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_483462__(/*! ../tools/base/BaseBrushTool.js */ "./tools/base/BaseBrushTool.js");


/**
 * Filters an array of tools, returning only tools which are active or passive.
 * @export
 * @public
 * @method
 * @name filterToolsUseableWithMultiPartTools
 *
 * @param  {Object[]} tools      The input tool array.
 * @returns {Object[]}            The filtered array.
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (tools) {
  return tools.filter(function (tool) {
    return !tool.isMultiPartTool && !(tool instanceof _tools_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_0__["default"]) && !(tool instanceof _tools_base_BaseBrushTool_js__WEBPACK_IMPORTED_MODULE_1__["default"]);
  });
});

/***/ }),

/***/ "./store/getActiveToolsForElement.js":
/*!*******************************************!*\
  !*** ./store/getActiveToolsForElement.js ***!
  \*******************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_484829__) {

"use strict";
__nested_webpack_require_484829__.r(__nested_webpack_exports__);
/**
 * Filters an array of tools, returning only tools which are active.
 * @export
 * @public
 * @method
 * @name getActiveToolsForElement
 *
 * @param  {HTMLElement} element The element.
 * @param  {Object[]} tools      The input tool array.
 * @param  {string} handlerType  The input type being queried.
 * @returns {Object[]}            The filtered array.
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, tools, handlerType) {
  return tools.filter(function (tool) {
    return tool.element === element && tool.mode === 'active' && (handlerType === undefined || tool.options["is".concat(handlerType, "Active")]);
  });
});

/***/ }),

/***/ "./store/getInteractiveToolsForElement.js":
/*!************************************************!*\
  !*** ./store/getInteractiveToolsForElement.js ***!
  \************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_485877__) {

"use strict";
__nested_webpack_require_485877__.r(__nested_webpack_exports__);
/**
 * Filters an array of tools, returning only tools which are active or passive.
 * @export
 * @public
 * @method
 * @name getInteractiveToolsForElement
 *
 * @param  {HTMLElement} element The element.
 * @param  {Object[]} tools      The input tool array.
 * @returns {Object[]}            The filtered array.
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, tools) {
  return tools.filter(function (tool) {
    return tool.element === element && (tool.mode === 'active' || tool.mode === 'passive');
  });
});

/***/ }),

/***/ "./store/getToolForElement.js":
/*!************************************!*\
  !*** ./store/getToolForElement.js ***!
  \************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_486763__) {

"use strict";
__nested_webpack_require_486763__.r(__nested_webpack_exports__);
/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_486763__(/*! ./index.js */ "./store/index.js");

/**
 * Returns the tool instance attached to the element.
 * @export
 * @public
 * @method
 * @name getToolForElement
 *
 * @param  {HTMLElement} element The element.
 * @param  {string}      name The tool's name.
 * @returns {Object}      The tool instance.
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, name) {
  return _index_js__WEBPACK_IMPORTED_MODULE_0__["state"].tools.find(function (tool) {
    return tool.element === element && tool.name === name;
  });
});

/***/ }),

/***/ "./store/getToolsWithDataForElement.js":
/*!*********************************************!*\
  !*** ./store/getToolsWithDataForElement.js ***!
  \*********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_487769__) {

"use strict";
__nested_webpack_require_487769__.r(__nested_webpack_exports__);
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_487769__(/*! ./../stateManagement/toolState.js */ "./stateManagement/toolState.js");

/**
 * Filters an array of tools, returning only tools which have annotation data.
 * @export
 * @public
 * @method
 * @name getToolsWithDataForElement
 *
 * @param  {HTMLElement} element The element.
 * @param  {Object[]} tools      The input tool array.
 * @returns {Object[]}            The filtered array.
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, tools) {
  return tools.filter(function (tool) {
    var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_0__["getToolState"])(element, tool.name);
    return toolState && toolState.data.length > 0;
  });
});

/***/ }),

/***/ "./store/getToolsWithMoveableHandles.js":
/*!**********************************************!*\
  !*** ./store/getToolsWithMoveableHandles.js ***!
  \**********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_488958__) {

"use strict";
__nested_webpack_require_488958__.r(__nested_webpack_exports__);
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_488958__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_488958__(/*! ../manipulators/getHandleNearImagePoint.js */ "./manipulators/getHandleNearImagePoint.js");
/* harmony import */ var _util_getProximityThreshold_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_488958__(/*! ../util/getProximityThreshold.js */ "./util/getProximityThreshold.js");



/**
 * Filters an array of tools, returning only tools with moveable handles at the
 * mouse location.
 *
 * @public
 * @function getToolsWithMoveableHandles
 *
 * @param  {HTMLElement} element The element
 * @param  {Object[]}    tools   The input tool array.
 * @param  {Object}      coords  The coordinates of the mouse position.
 * @param  {string}      [interactionType=mouse]
 * @returns {Object[]}            The filtered array.
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, tools, coords) {
  var interactionType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'mouse';
  return tools.filter(function (tool) {
    var distanceThreshold = Object(_util_getProximityThreshold_js__WEBPACK_IMPORTED_MODULE_2__["default"])(interactionType, tool.name);
    var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_0__["getToolState"])(element, tool.name);

    for (var i = 0; i < toolState.data.length; i++) {
      if (Object(_manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, toolState.data[i].handles, coords, distanceThreshold) !== undefined) {
        return true;
      }
    }

    return false;
  });
});

/***/ }),

/***/ "./store/index.js":
/*!************************!*\
  !*** ./store/index.js ***!
  \************************/
/*! exports provided: state, getters, modules, getModule, default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_491099__) {

"use strict";
__nested_webpack_require_491099__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_491099__.d(__nested_webpack_exports__, "state", function() { return state; });
/* harmony export (binding) */ __nested_webpack_require_491099__.d(__nested_webpack_exports__, "getters", function() { return getters; });
/* harmony export (binding) */ __nested_webpack_require_491099__.d(__nested_webpack_exports__, "modules", function() { return modules; });
/* harmony export (binding) */ __nested_webpack_require_491099__.d(__nested_webpack_exports__, "getModule", function() { return getModule; });
/* harmony import */ var _modules_segmentationModule__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_491099__(/*! ./modules/segmentationModule */ "./store/modules/segmentationModule/index.js");
/* harmony import */ var _modules_manipulatorStateModule__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_491099__(/*! ./modules/manipulatorStateModule */ "./store/modules/manipulatorStateModule.js");
/* harmony import */ var _modules_cursorModule_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_491099__(/*! ./modules/cursorModule.js */ "./store/modules/cursorModule.js");
/* harmony import */ var _modules_globalConfigurationModule_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_491099__(/*! ./modules/globalConfigurationModule.js */ "./store/modules/globalConfigurationModule.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_491099__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_491099__(/*! ../util/logger.js */ "./util/logger.js");
// Modules






var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_5__["getLogger"])('store:modules:storeLogger');
var state = {
  // Global
  globalTools: {},
  globalToolChangeHistory: [],
  // Tracking
  enabledElements: [],
  tools: [],
  isToolLocked: false,
  activeMultiPartTool: null,
  mousePositionImage: {},
  // Settings
  clickProximity: 6,
  touchProximity: 10,
  handleRadius: 6,
  deleteIfHandleOutsideImage: true,
  preventHandleOutsideImage: false,
  preventTextBoxOutsideDisplayedArea: false,
  // Average pixel width of index finger is 45-57 pixels
  // https://www.smashingmagazine.com/2012/02/finger-friendly-design-ideal-mobile-touchscreen-target-sizes/
  handleTouchOffset: {
    x: 0,
    y: -57
  },
  // Cursor
  svgCursorUrl: null
};
var getters = {
  mouseTools: function mouseTools() {
    return state.tools.filter(function (tool) {
      return tool.supportedInteractionTypes.includes('Mouse');
    });
  },
  touchTools: function touchTools() {
    return state.tools.filter(function (tool) {
      return tool.supportedInteractionTypes.includes('Touch');
    });
  },
  enabledElementByUID: function enabledElementByUID(enabledElementUID) {
    return state.enabledElements.find(function (element) {
      return _externalModules_js__WEBPACK_IMPORTED_MODULE_4__["default"].cornerstone.getEnabledElement(element).uuid === enabledElementUID;
    });
  }
};
var modules = {
  segmentation: _modules_segmentationModule__WEBPACK_IMPORTED_MODULE_0__["default"],
  cursor: _modules_cursorModule_js__WEBPACK_IMPORTED_MODULE_2__["default"],
  globalConfiguration: _modules_globalConfigurationModule_js__WEBPACK_IMPORTED_MODULE_3__["default"],
  manipulatorState: _modules_manipulatorStateModule__WEBPACK_IMPORTED_MODULE_1__["default"]
};
function getModule(moduleName) {
  return modules[moduleName];
}
/* harmony default export */ __nested_webpack_exports__["default"] = ({
  modules: modules,
  state: state,
  getters: getters
});

/***/ }),

/***/ "./store/internals/addEnabledElement.js":
/*!**********************************************!*\
  !*** ./store/internals/addEnabledElement.js ***!
  \**********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_494958__) {

"use strict";
__nested_webpack_require_494958__.r(__nested_webpack_exports__);
/* harmony import */ var _eventListeners_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_494958__(/*! ../../eventListeners/index.js */ "./eventListeners/index.js");
/* harmony import */ var _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_494958__(/*! ../../eventDispatchers/index.js */ "./eventDispatchers/index.js");
/* harmony import */ var _addTool_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_494958__(/*! ./../addTool.js */ "./store/addTool.js");
/* harmony import */ var _setToolMode_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_494958__(/*! ./../setToolMode.js */ "./store/setToolMode.js");
/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_494958__(/*! ../index.js */ "./store/index.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_494958__(/*! ../../util/logger.js */ "./util/logger.js");






var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_5__["getLogger"])('internals:addEnabledElement');
/**
 * Element Enabled event.
 *
 * @event Cornerstone#ElementEnabled
 * @type {Object}
 * @property {string} type
 * @property {Object} detail
 * @property {HTMLElement} detail.element - The element being enabled.
 */

/* TODO: It would be nice if this automatically added "all tools"
 * To the enabledElement that already exist on all other tools.
 * A half-measure might be a new method to "duplicate" the tool
 * Configuration for an existing enabled element
 * We may need to also save/store the original class/constructor per tool
 * To accomplish this
 */

/**
 * Adds an enabledElement to our store.
 * @export
 * @private
 * @method
 * @name addEnabledElement
 * @param {Cornerstone#ElementEnabled} elementEnabledEvt
 * @listens Cornerstone#ElementEnabled
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (elementEnabledEvt) {
  logger.log('EVENT:ELEMENT_ENABLED');
  var enabledElement = elementEnabledEvt.detail.element; // Dispatchers

  _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__["imageRenderedEventDispatcher"].enable(enabledElement);
  _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__["newImageEventDispatcher"].enable(enabledElement);

  var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_4__["getModule"])('globalConfiguration'),
      configuration = _getModule.configuration; // Mouse


  if (configuration.mouseEnabled) {
    _eventListeners_index_js__WEBPACK_IMPORTED_MODULE_0__["mouseEventListeners"].enable(enabledElement);
    _eventListeners_index_js__WEBPACK_IMPORTED_MODULE_0__["wheelEventListener"].enable(enabledElement);
    _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseToolEventDispatcher"].enable(enabledElement);
  } // Touch


  if (configuration.touchEnabled) {
    _eventListeners_index_js__WEBPACK_IMPORTED_MODULE_0__["touchEventListeners"].enable(enabledElement);
    _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchToolEventDispatcher"].enable(enabledElement);
  } // State


  _addEnabledElement(enabledElement);
});
/**
 * Adds the enabled element to the store.
 * @private
 * @method
 * @param {HTMLElement} enabledElement
 * @returns {void}
 */

var _addEnabledElement = function _addEnabledElement(enabledElement) {
  _index_js__WEBPACK_IMPORTED_MODULE_4__["default"].state.enabledElements.push(enabledElement);

  if (_index_js__WEBPACK_IMPORTED_MODULE_4__["default"].modules) {
    _initModulesOnElement(enabledElement);
  }

  _addGlobalToolsToElement(enabledElement);

  _repeatGlobalToolHistory(enabledElement);
};
/**
 * Iterate over our store's modules. If the module has an `enabledElementCallback`
 * call it and pass it a reference to our enabled element.
 * @private
 * @method
 * @param  {Object} enabledElement
 * @returns {void}
 */


function _initModulesOnElement(enabledElement) {
  var modules = _index_js__WEBPACK_IMPORTED_MODULE_4__["default"].modules;
  Object.keys(modules).forEach(function (key) {
    if (typeof modules[key].enabledElementCallback === 'function') {
      modules[key].enabledElementCallback(enabledElement);
    }
  });
}
/**
 * Iterate over our stores globalTools adding each one to `enabledElement`
 * @private
 * @method
 * @param {HTMLElement} enabledElement
 * @returns {void}
 */


function _addGlobalToolsToElement(enabledElement) {
  var _getModule2 = Object(_index_js__WEBPACK_IMPORTED_MODULE_4__["getModule"])('globalConfiguration'),
      configuration = _getModule2.configuration;

  if (!configuration.globalToolSyncEnabled) {
    return;
  }

  Object.keys(_index_js__WEBPACK_IMPORTED_MODULE_4__["default"].state.globalTools).forEach(function (key) {
    var _store$state$globalTo = _index_js__WEBPACK_IMPORTED_MODULE_4__["default"].state.globalTools[key],
        tool = _store$state$globalTo.tool,
        props = _store$state$globalTo.props;
    Object(_addTool_js__WEBPACK_IMPORTED_MODULE_2__["addToolForElement"])(enabledElement, tool, props);
  });
}
/**
 * Iterate over the globalToolChangeHistory and apply each `historyEvent`
 * to the supplied `enabledElement`.
 * @private
 * @method
 * @param {HTMLElement} enabledElement
 * @returns {void}
 */


function _repeatGlobalToolHistory(enabledElement) {
  var _getModule3 = Object(_index_js__WEBPACK_IMPORTED_MODULE_4__["getModule"])('globalConfiguration'),
      configuration = _getModule3.configuration;

  if (!configuration.globalToolSyncEnabled) {
    return;
  }

  var setToolModeFns = {
    active: _setToolMode_js__WEBPACK_IMPORTED_MODULE_3__["setToolActiveForElement"],
    passive: _setToolMode_js__WEBPACK_IMPORTED_MODULE_3__["setToolPassiveForElement"],
    enabled: _setToolMode_js__WEBPACK_IMPORTED_MODULE_3__["setToolEnabledForElement"],
    disabled: _setToolMode_js__WEBPACK_IMPORTED_MODULE_3__["setToolDisabledForElement"]
  };
  _index_js__WEBPACK_IMPORTED_MODULE_4__["default"].state.globalToolChangeHistory.forEach(function (historyEvent) {
    var args = historyEvent.args.slice(0);
    args.unshift(enabledElement);
    setToolModeFns[historyEvent.mode].apply(null, args);
  });
}

/***/ }),

/***/ "./store/internals/removeEnabledElement.js":
/*!*************************************************!*\
  !*** ./store/internals/removeEnabledElement.js ***!
  \*************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_501419__) {

"use strict";
__nested_webpack_require_501419__.r(__nested_webpack_exports__);
/* harmony import */ var _eventListeners_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_501419__(/*! ../../eventListeners/index.js */ "./eventListeners/index.js");
/* harmony import */ var _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_501419__(/*! ../../eventDispatchers/index.js */ "./eventDispatchers/index.js");
/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_501419__(/*! ../index.js */ "./store/index.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_501419__(/*! ../../util/logger.js */ "./util/logger.js");
/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_501419__(/*! ../../stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js");
/* harmony import */ var _setToolMode__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_501419__(/*! ../setToolMode */ "./store/setToolMode.js");






var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('internals:removeEnabledElement');
/**
 * Element Disabled event.
 *
 * @event Cornerstone#ElementDisabled
 * @type {Object}
 * @property {string} type
 * @property {Object} detail
 * @property {HTMLElement} detail.element - The element being disabled.
 */

/**
 * Removes an enabledElement from our store, and all associated tools that were added to it.
 * @export
 * @private
 * @method
 * @name removeEnabledElement
 * @param {Cornerstone#ElementDisabled} elementDisabledEvt
 * @listens Cornerstone#ElementDisabled
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (elementDisabledEvt) {
  logger.log('EVENT:ELEMENT_DISABLED');
  var enabledElement = elementDisabledEvt.detail.element;

  var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_2__["getModule"])('globalConfiguration'),
      configuration = _getModule.configuration; // Dispatchers


  _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__["imageRenderedEventDispatcher"].disable(enabledElement);
  _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__["newImageEventDispatcher"].disable(enabledElement); // Mouse

  if (configuration.mouseEnabled) {
    _eventListeners_index_js__WEBPACK_IMPORTED_MODULE_0__["mouseEventListeners"].disable(enabledElement);
    _eventListeners_index_js__WEBPACK_IMPORTED_MODULE_0__["wheelEventListener"].disable(enabledElement);
    _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseToolEventDispatcher"].disable(enabledElement);
  } // Touch


  if (configuration.touchEnabled) {
    _eventListeners_index_js__WEBPACK_IMPORTED_MODULE_0__["touchEventListeners"].disable(enabledElement);
    _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchToolEventDispatcher"].disable(enabledElement);
  } // State


  _removeAllToolsForElement(enabledElement);

  _removeEnabledElement(enabledElement);

  _removeLoadHandlers(enabledElement);
});
/**
 * Remove all tools associated with enabled element.
 * @private
 * @method
 * @param {HTMLElement} enabledElement
 * @returns  {void}
 */

var _removeAllToolsForElement = function _removeAllToolsForElement(enabledElement) {
  _index_js__WEBPACK_IMPORTED_MODULE_2__["default"].state.tools.forEach(function (tool) {
    if (tool.element === enabledElement) {
      Object(_setToolMode__WEBPACK_IMPORTED_MODULE_5__["setToolDisabledForElement"])(tool.element, tool.name);
    }
  });
  _index_js__WEBPACK_IMPORTED_MODULE_2__["default"].state.tools = _index_js__WEBPACK_IMPORTED_MODULE_2__["default"].state.tools.filter(function (tool) {
    return tool.element !== enabledElement;
  });
};
/**
 * Remove the enabled element from the store if it exists.
 * @private
 * @method
 * @param {HTMLElement} enabledElement
 * @returns {void}
 */


var _removeEnabledElement = function _removeEnabledElement(enabledElement) {
  if (_index_js__WEBPACK_IMPORTED_MODULE_2__["default"].modules) {
    _cleanModulesOnElement(enabledElement);
  }

  var foundElementIndex = _index_js__WEBPACK_IMPORTED_MODULE_2__["default"].state.enabledElements.findIndex(function (element) {
    return element === enabledElement;
  });

  if (foundElementIndex > -1) {
    _index_js__WEBPACK_IMPORTED_MODULE_2__["default"].state.enabledElements.splice(foundElementIndex, 1);
  } else {
    logger.warn('unable to remove element');
  }
};
/**
 * Remove load handler for the element
 * @private
 * @method
 * @param {HTMLElement} element
 * @returns {void}
 */


var _removeLoadHandlers = function _removeLoadHandlers(element) {
  _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_4__["default"].removeHandlers(element);
};
/**
 * Iterate over our store's modules. If the module has a
 * `removeEnabledElementCallback` call it and clean up unneeded metadata.
 * @private
 * @method
 * @param  {Object} enabledElement
 * @returns {void}
 */


function _cleanModulesOnElement(enabledElement) {
  var modules = _index_js__WEBPACK_IMPORTED_MODULE_2__["default"].modules;
  Object.keys(modules).forEach(function (key) {
    if (typeof modules[key].removeEnabledElementCallback === 'function') {
      modules[key].removeEnabledElementCallback(enabledElement);
    }
  });
}

/***/ }),

/***/ "./store/isToolActiveForElement.js":
/*!*****************************************!*\
  !*** ./store/isToolActiveForElement.js ***!
  \*****************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_506984__) {

"use strict";
__nested_webpack_require_506984__.r(__nested_webpack_exports__);
/* harmony import */ var _getToolForElement_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_506984__(/*! ./getToolForElement.js */ "./store/getToolForElement.js");

/**
 * Queries if a tool is active on the specified element.
 * @export
 * @public
 * @method
 * @name isToolActiveForElement
 *
 * @param  {HTMLElement} element The element being queried.
 * @param  {string} name    The name of the tool.
 * @returns {boolean}         True if the tool is active.
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, name) {
  var tool = Object(_getToolForElement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, name);
  return tool.mode === 'active';
});

/***/ }),

/***/ "./store/modules/cursorModule.js":
/*!***************************************!*\
  !*** ./store/modules/cursorModule.js ***!
  \***************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_508021__) {

"use strict";
__nested_webpack_require_508021__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_508021__(/*! ../../externalModules */ "./externalModules.js");

var configuration = {
  iconSize: 16,
  viewBox: {
    x: 16,
    y: 16
  },
  mousePoint: {
    x: 8,
    y: 8
  },
  mousePointerGroupString: "\n    <path stroke=\"ACTIVE_COLOR\" d=\"M8 16L8 0\"></path>\n    <path stroke=\"ACTIVE_COLOR\" d=\"M16 8L0 8\"></path>\n  "
};
var setters = {
  defaultOptions: function defaultOptions(newOptions) {
    Object.assign(configuration, newOptions);
  }
};
var getters = {
  defaultOptions: function defaultOptions() {
    return configuration;
  }
};
/* harmony default export */ __nested_webpack_exports__["default"] = ({
  configuration: configuration,
  getters: getters,
  setters: setters
});

/***/ }),

/***/ "./store/modules/globalConfigurationModule.js":
/*!****************************************************!*\
  !*** ./store/modules/globalConfigurationModule.js ***!
  \****************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_509200__) {

"use strict";
__nested_webpack_require_509200__.r(__nested_webpack_exports__);
var configuration = {
  mouseEnabled: true,
  touchEnabled: true,
  globalToolSyncEnabled: false,
  showSVGCursors: false,
  autoResizeViewports: true,
  lineDash: [4, 4]
};
/* harmony default export */ __nested_webpack_exports__["default"] = ({
  configuration: configuration
});

/***/ }),

/***/ "./store/modules/manipulatorStateModule.js":
/*!*************************************************!*\
  !*** ./store/modules/manipulatorStateModule.js ***!
  \*************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_509861__) {

"use strict";
__nested_webpack_require_509861__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_509861__(/*! ../../externalModules */ "./externalModules.js");

var state = {
  activeManipulators: {}
};

function addActiveManipulatorForElement(element, cancelFn) {
  var enabledElement = _externalModules__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getEnabledElement(element);
  var enabledElementUUID = enabledElement.uuid;
  state.activeManipulators[enabledElementUUID] = cancelFn;
}

function removeActiveManipulatorForElement(element) {
  var enabledElement = _externalModules__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getEnabledElement(element);
  var enabledElementUUID = enabledElement.uuid;
  var activeManipulators = state.activeManipulators;
  delete activeManipulators[enabledElementUUID];
}

function cancelActiveManipulatorsForElement(element) {
  var enabledElement = _externalModules__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getEnabledElement(element);
  var enabledElementUUID = enabledElement.uuid;

  _cancelActiveManipulatorsForElementUUID(enabledElementUUID);
}

function _cancelActiveManipulatorsForElementUUID(enabledElementUUID) {
  var activeManipulators = state.activeManipulators;
  var cancelFn = activeManipulators[enabledElementUUID];

  if (typeof cancelFn === 'function') {
    cancelFn();
  }

  delete activeManipulators[enabledElementUUID];
}

function cancelActiveManipulators() {
  var activeManipulators = state.activeManipulators;
  Object.keys(activeManipulators).forEach(function (enabledElementUUID) {
    return _cancelActiveManipulatorsForElementUUID(enabledElementUUID);
  });
}

function _cornerstoneNewImageHandler(evt) {
  var eventData = evt.detail;
  var element = eventData.element;
  removeActiveManipulatorForElement(element);
}

function removeEnabledElementCallback(element) {
  var NEW_IMAGE = _externalModules__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.NEW_IMAGE;
  element.removeEventListener(NEW_IMAGE, _cornerstoneNewImageHandler);
  removeActiveManipulatorForElement(element);
}

function enabledElementCallback(element) {
  var NEW_IMAGE = _externalModules__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.NEW_IMAGE;
  element.removeEventListener(NEW_IMAGE, _cornerstoneNewImageHandler);
  element.addEventListener(NEW_IMAGE, _cornerstoneNewImageHandler);
}

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  setters: {
    // Add/remove
    addActiveManipulatorForElement: addActiveManipulatorForElement,
    removeActiveManipulatorForElement: removeActiveManipulatorForElement,
    // Cancel
    cancelActiveManipulatorsForElement: cancelActiveManipulatorsForElement,
    cancelActiveManipulators: cancelActiveManipulators
  },
  state: state,
  enabledElementCallback: enabledElementCallback,
  removeEnabledElementCallback: removeEnabledElementCallback
});

/***/ }),

/***/ "./store/modules/segmentationModule/activeLabelmapIndex.js":
/*!*****************************************************************!*\
  !*** ./store/modules/segmentationModule/activeLabelmapIndex.js ***!
  \*****************************************************************/
/*! exports provided: getActiveLabelmapIndex, setActiveLabelmapIndex */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_513232__) {

"use strict";
__nested_webpack_require_513232__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_513232__.d(__nested_webpack_exports__, "getActiveLabelmapIndex", function() { return getActiveLabelmapIndex; });
/* harmony export (binding) */ __nested_webpack_require_513232__.d(__nested_webpack_exports__, "setActiveLabelmapIndex", function() { return setActiveLabelmapIndex; });
/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_513232__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_513232__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _addLabelmap3D__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_513232__(/*! ./addLabelmap3D */ "./store/modules/segmentationModule/addLabelmap3D.js");
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_513232__(/*! ./state */ "./store/modules/segmentationModule/state.js");
/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_513232__(/*! ../../../externalModules */ "./externalModules.js");





/**
 * Returns the index of the active `Labelmap3D`.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID The cornerstone
 *                                            enabled element or its UUID.
 * @returns {number} The index of the active `Labelmap3D`.
 */

function getActiveLabelmapIndex(elementOrEnabledElementUID) {
  var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID);

  if (!element) {
    return;
  }

  var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack');
  var stackData = stackState.data[0];
  var firstImageId = stackData.imageIds[0];
  var brushStackState = _state__WEBPACK_IMPORTED_MODULE_3__["default"].series[firstImageId];

  if (!brushStackState) {
    return;
  }

  return brushStackState.activeLabelmapIndex;
}
/**
 * Sets the active `labelmapIndex` for the `BrushStackState` displayed on this
 * element. Creates the corresponding `Labelmap3D` if it doesn't exist.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID   The cornerstone enabled
 *                                                    element or its UUID.
 * @param  {number} labelmapIndex = 0 The index of the labelmap.
 * @returns {null}
 */


function setActiveLabelmapIndex(elementOrEnabledElementUID) {
  var labelmapIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
  var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID);

  if (!element) {
    return;
  }

  var cornerstone = _externalModules__WEBPACK_IMPORTED_MODULE_4__["default"].cornerstone;
  var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack');
  var stackData = stackState.data[0];
  var enabledElement = cornerstone.getEnabledElement(element);
  var _enabledElement$image = enabledElement.image,
      rows = _enabledElement$image.rows,
      columns = _enabledElement$image.columns;
  var numberOfFrames = stackData.imageIds.length;
  var size = rows * columns * numberOfFrames;
  var firstImageId = stackData.imageIds[0];
  var brushStackState = _state__WEBPACK_IMPORTED_MODULE_3__["default"].series[firstImageId];

  if (brushStackState) {
    brushStackState.activeLabelmapIndex = labelmapIndex;

    if (!brushStackState.labelmaps3D[labelmapIndex]) {
      Object(_addLabelmap3D__WEBPACK_IMPORTED_MODULE_2__["default"])(brushStackState, labelmapIndex, size);
    }
  } else {
    _state__WEBPACK_IMPORTED_MODULE_3__["default"].series[firstImageId] = {
      activeLabelmapIndex: labelmapIndex,
      labelmaps3D: []
    };
    brushStackState = _state__WEBPACK_IMPORTED_MODULE_3__["default"].series[firstImageId];
    Object(_addLabelmap3D__WEBPACK_IMPORTED_MODULE_2__["default"])(brushStackState, labelmapIndex, size);
  }

  cornerstone.updateImage(element);
}



/***/ }),

/***/ "./store/modules/segmentationModule/activeSegmentIndex.js":
/*!****************************************************************!*\
  !*** ./store/modules/segmentationModule/activeSegmentIndex.js ***!
  \****************************************************************/
/*! exports provided: getActiveSegmentIndex, setActiveSegmentIndex, incrementActiveSegmentIndex, decrementActiveSegmentIndex */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_517791__) {

"use strict";
__nested_webpack_require_517791__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_517791__.d(__nested_webpack_exports__, "getActiveSegmentIndex", function() { return getActiveSegmentIndex; });
/* harmony export (binding) */ __nested_webpack_require_517791__.d(__nested_webpack_exports__, "setActiveSegmentIndex", function() { return setActiveSegmentIndex; });
/* harmony export (binding) */ __nested_webpack_require_517791__.d(__nested_webpack_exports__, "incrementActiveSegmentIndex", function() { return incrementActiveSegmentIndex; });
/* harmony export (binding) */ __nested_webpack_require_517791__.d(__nested_webpack_exports__, "decrementActiveSegmentIndex", function() { return decrementActiveSegmentIndex; });
/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_517791__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_517791__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_517791__(/*! ./state */ "./store/modules/segmentationModule/state.js");
/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_517791__(/*! ../../index.js */ "./store/index.js");




/**
 * Returns the `activeSegmentIndex` for the active `Labelmap3D` for the `BrushStackState` displayed on the element.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID   The cornerstone enabled
 *                                                    element or its UUID.
 * @param  {number} [labelmapIndex] The labelmap index, defaults to the active labelmap index.
 * @returns {number}                                  The active segment index.
 */

function getActiveSegmentIndex(elementOrEnabledElementUID, labelmapIndex) {
  var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID);

  if (!element) {
    return;
  }

  var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack');
  var stackData = stackState.data[0];
  var firstImageId = stackData.imageIds[0];
  var brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId];

  if (brushStackState) {
    labelmapIndex = labelmapIndex === undefined ? brushStackState.activeLabelmapIndex : labelmapIndex;
    var labelmap3D = brushStackState.labelmaps3D[labelmapIndex];

    if (labelmap3D) {
      return labelmap3D.activeSegmentIndex;
    }
  }

  return 1;
}
/**
 * Sets the `activeSegmentIndex` for the active `Labelmap3D` on the element.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID   The cornerstone enabled
 *                                                    element or its UUID.
 * @param {number}  segmentIndex The segmentIndex to set active.
 * @returns {null}
 */


function setActiveSegmentIndex(elementOrEnabledElementUID, segmentIndex) {
  var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID);

  if (!element) {
    return;
  }

  var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack');
  var stackData = stackState.data[0];
  var firstImageId = stackData.imageIds[0];
  var brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId];

  if (!brushStackState) {
    return;
  }

  var activeLabelmapIndex = brushStackState.activeLabelmapIndex;
  var labelmap3D = brushStackState.labelmaps3D[activeLabelmapIndex];

  var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_3__["getModule"])('segmentation'),
      configuration = _getModule.configuration;

  if (segmentIndex <= 0) {
    segmentIndex = 1;
  } else if (segmentIndex > configuration.segmentsPerLabelmap) {
    segmentIndex = configuration.segmentsPerLabelmap;
  }

  labelmap3D.activeSegmentIndex = segmentIndex;
}
/**
 * Increment the `activeSegmentIndex` for the active `Labelmap3D` on the element.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID   The cornerstone enabled
 *                                                    element or its UUID.
 * @returns {null}
 */


function incrementActiveSegmentIndex(elementOrEnabledElementUID) {
  var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID);

  if (!element) {
    return;
  }

  _changeActiveSegmentIndex(element, 'increase');
}
/**
 * Decrement the `activeSegmentIndex` for the active `Labelmap3D` on the element.
 *
 * @param  {HTMLElement} elementOrEnabledElementUID   The cornerstone enabled
 *                                                    element or its UUID.
 * @returns {null}
 */


function decrementActiveSegmentIndex(elementOrEnabledElementUID) {
  var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID);

  if (!element) {
    return;
  }

  _changeActiveSegmentIndex(element, 'decrease');
}
/**
 * Changes the `activeSegmentIndex` for the active `Labelmap3D` on the element.
 *
 * @param  {HTMLElement} element  The cornerstone enabled element.
 * @param  {string} increaseOrDecrease = Whether to increase/decrease the activeLabelmapIndex.
 * @returns {null}
 */


function _changeActiveSegmentIndex(element) {
  var increaseOrDecrease = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'increase';

  var _getModule2 = Object(_index_js__WEBPACK_IMPORTED_MODULE_3__["getModule"])('segmentation'),
      configuration = _getModule2.configuration;

  var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack');
  var stackData = stackState.data[0];
  var firstImageId = stackData.imageIds[0];
  var brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId];

  if (!brushStackState) {
    return;
  }

  var activeLabelmapIndex = brushStackState.activeLabelmapIndex;
  var labelmap3D = brushStackState.labelmaps3D[activeLabelmapIndex];

  switch (increaseOrDecrease) {
    case 'increase':
      labelmap3D.activeSegmentIndex++;

      if (labelmap3D.activeSegmentIndex > configuration.segmentsPerLabelmap) {
        labelmap3D.activeSegmentIndex = 1;
      }

      break;

    case 'decrease':
      labelmap3D.activeSegmentIndex--;

      if (labelmap3D.activeSegmentIndex <= 0) {
        labelmap3D.activeSegmentIndex = configuration.segmentsPerLabelmap;
      }

      break;
  }
}



/***/ }),

/***/ "./store/modules/segmentationModule/addLabelmap2D.js":
/*!***********************************************************!*\
  !*** ./store/modules/segmentationModule/addLabelmap2D.js ***!
  \***********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_524670__) {

"use strict";
__nested_webpack_require_524670__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_524670__.d(__nested_webpack_exports__, "default", function() { return addLabelmap2D; });
/* harmony import */ var _arrayTypes__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_524670__(/*! ./arrayTypes */ "./store/modules/segmentationModule/arrayTypes.js");
/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_524670__(/*! ../../index.js */ "./store/index.js");


var UINT_16_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_0__["default"].UINT_16_ARRAY,
    FLOAT_32_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_0__["default"].FLOAT_32_ARRAY;
/**
 * Adds a `Labelmap2D` view of one frame of a `Labelmap3D`.
 *
 * @param  {BrushStackState} brushStackState     The `BrushStackState` for a particular `Series`.
 * @param  {number} labelmapIndex       The labelmap index.
 * @param  {number} imageIdIndex        The stack position of the image.
 * @param  {number} rows                The number of rows in the image.
 * @param  {number} columns             The number of columns in the image.
 * @returns {null}
 */

function addLabelmap2D(brushStackState, labelmapIndex, imageIdIndex, rows, columns) {
  var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_1__["getModule"])('segmentation'),
      configuration = _getModule.configuration;

  var sliceLength = rows * columns;
  var elementOffset = sliceLength * imageIdIndex;
  var pixelData;

  switch (configuration.arrayType) {
    case UINT_16_ARRAY:
      pixelData = new Uint16Array(brushStackState.labelmaps3D[labelmapIndex].buffer, elementOffset * 2, // 2 bytes/voxel
      sliceLength);
      break;

    case FLOAT_32_ARRAY:
      pixelData = new Float32Array(brushStackState.labelmaps3D[labelmapIndex].buffer, elementOffset * 4, // 4 bytes/voxel
      sliceLength);
      break;

    default:
      throw new Error("Unsupported Array Type ".concat(configuration.arrayType));
  }

  brushStackState.labelmaps3D[labelmapIndex].labelmaps2D[imageIdIndex] = {
    pixelData: pixelData,
    segmentsOnLabelmap: []
  };
}

/***/ }),

/***/ "./store/modules/segmentationModule/addLabelmap3D.js":
/*!***********************************************************!*\
  !*** ./store/modules/segmentationModule/addLabelmap3D.js ***!
  \***********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_527127__) {

"use strict";
__nested_webpack_require_527127__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_527127__.d(__nested_webpack_exports__, "default", function() { return addLabelmap3D; });
/* harmony import */ var _arrayTypes__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_527127__(/*! ./arrayTypes */ "./store/modules/segmentationModule/arrayTypes.js");
/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_527127__(/*! ../../index.js */ "./store/index.js");


var UINT_16_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_0__["default"].UINT_16_ARRAY,
    FLOAT_32_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_0__["default"].FLOAT_32_ARRAY;
/**
 * AddLabelmap3D - Adds a `Labelmap3D` object to the `BrushStackState` object.
 *
 * @param  {BrushStackState} brushStackState The labelmap state for a particular stack.
 * @param  {number} labelmapIndex   The labelmapIndex to set.
 * @param  {number} size            The size of the ArrayBuffer in bytes/ 2.
 * @returns {null}
 */

function addLabelmap3D(brushStackState, labelmapIndex, size) {
  var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_1__["getModule"])('segmentation'),
      configuration = _getModule.configuration;

  var bytesPerVoxel;

  switch (configuration.arrayType) {
    case UINT_16_ARRAY:
      bytesPerVoxel = 2;
      break;

    case FLOAT_32_ARRAY:
      bytesPerVoxel = 4;
      break;

    default:
      throw new Error("Unsupported Array Type ".concat(configuration.arrayType));
  } // Buffer size is multiplied by bytesPerVoxel to allocate enough space.


  brushStackState.labelmaps3D[labelmapIndex] = {
    buffer: new ArrayBuffer(size * bytesPerVoxel),
    labelmaps2D: [],
    metadata: [],
    activeSegmentIndex: 1,
    colorLUTIndex: 0,
    segmentsHidden: [],
    undo: [],
    redo: []
  };
}

/***/ }),

/***/ "./store/modules/segmentationModule/arrayTypes.js":
/*!********************************************************!*\
  !*** ./store/modules/segmentationModule/arrayTypes.js ***!
  \********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_529284__) {

"use strict";
__nested_webpack_require_529284__.r(__nested_webpack_exports__);
var ARRAY_TYPES = {
  UINT_16_ARRAY: 0,
  FLOAT_32_ARRAY: 1
};
/* harmony default export */ __nested_webpack_exports__["default"] = (ARRAY_TYPES);

/***/ }),

/***/ "./store/modules/segmentationModule/colorLUT.js":
/*!******************************************************!*\
  !*** ./store/modules/segmentationModule/colorLUT.js ***!
  \******************************************************/
/*! exports provided: default, setColorLUTIndexForLabelmap3D, getColorForSegmentIndexColorLUT, setColorForSegmentIndexOfColorLUT, getColorLUT */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_529943__) {

"use strict";
__nested_webpack_require_529943__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_529943__.d(__nested_webpack_exports__, "default", function() { return setColorLUT; });
/* harmony export (binding) */ __nested_webpack_require_529943__.d(__nested_webpack_exports__, "setColorLUTIndexForLabelmap3D", function() { return setColorLUTIndexForLabelmap3D; });
/* harmony export (binding) */ __nested_webpack_require_529943__.d(__nested_webpack_exports__, "getColorForSegmentIndexColorLUT", function() { return getColorForSegmentIndexColorLUT; });
/* harmony export (binding) */ __nested_webpack_require_529943__.d(__nested_webpack_exports__, "setColorForSegmentIndexOfColorLUT", function() { return setColorForSegmentIndexOfColorLUT; });
/* harmony export (binding) */ __nested_webpack_require_529943__.d(__nested_webpack_exports__, "getColorLUT", function() { return getColorLUT; });
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_529943__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_529943__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_529943__(/*! ../../../util/logger */ "./util/logger.js");
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_529943__(/*! ./state */ "./store/modules/segmentationModule/state.js");
/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_529943__(/*! ../../index.js */ "./store/index.js");




var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_1__["getLogger"])('store:modules:segmentationModule:setColorLUT');
/**
 * SetColorLUT - Sets the labelmap to a specfic LUT, or generates a new LUT.
 *
 * @param  {number} labelmapIndex The labelmap index to apply the color LUT to.
 * @param  {number[][]} [colorLUT]    An array of The colorLUT to set.
 * @returns {null}
 */

function setColorLUT(colorLUTIndex) {
  var colorLUT = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];

  var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_3__["getModule"])('segmentation'),
      configuration = _getModule.configuration;

  var segmentsPerLabelmap = configuration.segmentsPerLabelmap;

  if (colorLUT) {
    _checkColorLUTLength(colorLUT, segmentsPerLabelmap);

    if (colorLUT.length < segmentsPerLabelmap) {
      colorLUT = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(colorLUT), _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(_generateNewColorLUT(segmentsPerLabelmap - colorLUT.length)));
    }
  } else {
    // Autogenerate colorLUT.
    colorLUT = colorLUT || _generateNewColorLUT(segmentsPerLabelmap);
  } // Apppend the "zero" (no label) color to the front of the LUT.


  colorLUT.unshift([0, 0, 0, 0]);
  _state__WEBPACK_IMPORTED_MODULE_2__["default"].colorLutTables[colorLUTIndex] = colorLUT;
}
function setColorLUTIndexForLabelmap3D(labelmap3D, colorLUTIndex) {
  labelmap3D.colorLUTIndex = colorLUTIndex;
}
function getColorForSegmentIndexColorLUT(labelmap3DOrColorLUTIndex, segmentIndex) {
  var colorLUT = getColorLUT(labelmap3DOrColorLUTIndex);
  return colorLUT[segmentIndex];
}
/**
 * Sets a single color of a colorLUT.
 *
 * @param {Object|number} labelmap3DOrColorLUTIndex Either a `Labelmap3D` object (who's referenced colorLUT will be changed), or a colorLUTIndex.
 * @param {number} segmentIndex The segmentIndex color to change.
 * @param {number[]} colorArray The color values in RGBA array format (required length 4).
 */

function setColorForSegmentIndexOfColorLUT(labelmap3DOrColorLUTIndex, segmentIndex, colorArray) {
  var colorLUT = getColorLUT(labelmap3DOrColorLUTIndex);
  colorLUT[segmentIndex] = colorArray;
}
function getColorLUT(labelmap3DOrColorLUTIndex) {
  if (typeof labelmap3DOrColorLUTIndex === 'number') {
    return _state__WEBPACK_IMPORTED_MODULE_2__["default"].colorLutTables[labelmap3DOrColorLUTIndex];
  }

  return _state__WEBPACK_IMPORTED_MODULE_2__["default"].colorLutTables[labelmap3DOrColorLUTIndex.colorLUTIndex];
}
/**
 * Checks the length of `colorLUT` compared to `segmnetsPerLabelmap` and flags up any warnings.
 * @param  {number[][]} colorLUT
 * @param  {number} segmentsPerLabelmap
 * @returns {boolean} Whether the length is valid.
 */

function _checkColorLUTLength(colorLUT, segmentsPerLabelmap) {
  if (colorLUT.length < segmentsPerLabelmap) {
    logger.warn("The provided colorLUT only provides ".concat(colorLUT.length, " labels, whereas segmentsPerLabelmap is set to ").concat(segmentsPerLabelmap, ". Autogenerating the rest."));
  } else if (colorLUT.length > segmentsPerLabelmap) {
    logger.warn("segmentsPerLabelmap is set to ".concat(segmentsPerLabelmap, ", and the provided colorLUT provides ").concat(colorLUT.length, ". Using the first ").concat(segmentsPerLabelmap, " colors from the LUT."));
  }
}
/**
 * Generates a new color LUT (Look Up Table) of length `numberOfColors`,
 * which returns an RGBA color for each segment index.
 *
 * @param  {Number} numberOfColors = 255 The number of colors to generate
 * @returns {Number[][]}           The array of RGB values.
 */


function _generateNewColorLUT() {
  var numberOfColors = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 255;
  var rgbArr = [];

  for (var i = 0; i < numberOfColors; i++) {
    rgbArr.push(getRGBAfromHSLA(getNextHue(), getNextL()));
  }

  return rgbArr;
}

var goldenAngle = 137.5;
var hueValue = 222.5;

function getNextHue() {
  hueValue += goldenAngle;

  if (hueValue >= 360) {
    hueValue -= 360;
  }

  return hueValue;
}

var l = 0.6;
var maxL = 0.82;
var minL = 0.3;
var incL = 0.07;

function getNextL() {
  l += incL;

  if (l > maxL) {
    var diff = l - maxL;
    l = minL + diff;
  }

  return l;
}
/**
 * GetRGBAfromHSL - Returns an RGBA color given H, S, L and A.
 *
 * @param  {Number} hue         The hue.
 * @param  {Number} s = 1       The saturation.
 * @param  {Number} l = 0.6     The lightness.
 * @param  {Number} alpha = 255 The alpha.
 * @returns {Number[]}            The RGBA formatted color.
 */


function getRGBAfromHSLA(hue) {
  var s = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
  var l = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.6;
  var alpha = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 255;
  var c = (1 - Math.abs(2 * l - 1)) * s;
  var x = c * (1 - Math.abs(hue / 60 % 2 - 1));
  var m = l - c / 2;
  var r, g, b;

  if (hue < 60) {
    r = c;
    g = x;
    b = 0;
  } else if (hue < 120) {
    r = x;
    g = c;
    b = 0;
  } else if (hue < 180) {
    r = 0;
    g = c;
    b = x;
  } else if (hue < 240) {
    r = 0;
    g = x;
    b = c;
  } else if (hue < 300) {
    r = x;
    g = 0;
    b = c;
  } else if (hue < 360) {
    r = c;
    g = 0;
    b = x;
  }

  return [(r + m) * 255, (g + m) * 255, (b + m) * 255, alpha];
}

/***/ }),

/***/ "./store/modules/segmentationModule/defaultConfiguration.js":
/*!******************************************************************!*\
  !*** ./store/modules/segmentationModule/defaultConfiguration.js ***!
  \******************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_537447__) {

"use strict";
__nested_webpack_require_537447__.r(__nested_webpack_exports__);
/* harmony import */ var _arrayTypes__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_537447__(/*! ./arrayTypes */ "./store/modules/segmentationModule/arrayTypes.js");

var UINT_16_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_0__["default"].UINT_16_ARRAY; // Segmentation module configuration.

var defaultConfiguration = {
  renderOutline: true,
  renderFill: true,
  shouldRenderInactiveLabelmaps: true,
  radius: 10,
  minRadius: 1,
  maxRadius: 50,
  fillAlpha: 0.2,
  fillAlphaInactive: 0.1,
  outlineAlpha: 0.7,
  outlineAlphaInactive: 0.35,
  outlineWidth: 3,
  storeHistory: true,
  segmentsPerLabelmap: 65535,
  // Max is 65535 due to using 16-bit Unsigned ints.
  arrayType: UINT_16_ARRAY
};
/* harmony default export */ __nested_webpack_exports__["default"] = (defaultConfiguration);

/***/ }),

/***/ "./store/modules/segmentationModule/deleteSegment.js":
/*!***********************************************************!*\
  !*** ./store/modules/segmentationModule/deleteSegment.js ***!
  \***********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_538655__) {

"use strict";
__nested_webpack_require_538655__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_538655__.d(__nested_webpack_exports__, "default", function() { return deleteSegment; });
/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_538655__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_538655__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_538655__(/*! ./state */ "./store/modules/segmentationModule/state.js");
/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_538655__(/*! ../../../externalModules */ "./externalModules.js");




/**
 * Deletes the segment and any associated metadata from the `Labelmap3D`.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID The cornerstone enabled element or its UUID.
 * @param  {number} segmentIndex     The segment Index
 * @param  {number} [labelmapIndex]  The labelmap index. Defaults to the active labelmap index.
 *
 * @returns {null}
 */

function deleteSegment(elementOrEnabledElementUID, segmentIndex, labelmapIndex) {
  if (!segmentIndex) {
    return;
  }

  var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID);

  if (!element) {
    return;
  }

  var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack');
  var stackData = stackState.data[0];
  var firstImageId = stackData.imageIds[0];
  var brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId];

  if (!brushStackState) {
    return;
  }

  labelmapIndex = labelmapIndex === undefined ? brushStackState.activeLabelmapIndex : labelmapIndex;
  var labelmap3D = brushStackState.labelmaps3D[labelmapIndex];

  if (!labelmap3D) {
    return;
  } // Delete metadata if present.


  delete labelmap3D.metadata[segmentIndex];
  var labelmaps2D = labelmap3D.labelmaps2D; // Clear segment's voxels.

  for (var i = 0; i < labelmaps2D.length; i++) {
    var labelmap2D = labelmaps2D[i]; // If the labelmap2D has data, and it contains the segment, delete it.

    if (labelmap2D && labelmap2D.segmentsOnLabelmap.includes(segmentIndex)) {
      var pixelData = labelmap2D.pixelData; // Remove this segment from the list.

      var indexOfSegment = labelmap2D.segmentsOnLabelmap.indexOf(segmentIndex);
      labelmap2D.segmentsOnLabelmap.splice(indexOfSegment, 1); // Delete the label for this segment.

      for (var p = 0; p < pixelData.length; p++) {
        if (pixelData[p] === segmentIndex) {
          pixelData[p] = 0;
        }
      }
    }
  }

  _externalModules__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.updateImage(element);
}

/***/ }),

/***/ "./store/modules/segmentationModule/getBrushColor.js":
/*!***********************************************************!*\
  !*** ./store/modules/segmentationModule/getBrushColor.js ***!
  \***********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_541919__) {

"use strict";
__nested_webpack_require_541919__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_541919__.d(__nested_webpack_exports__, "default", function() { return getBrushColor; });
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_541919__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_541919__(/*! ./state */ "./store/modules/segmentationModule/state.js");
/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_541919__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js");
/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_541919__(/*! ../../../util/logger */ "./util/logger.js");




var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('store:modules:segmentationModule:getBrushColor');
/**
 * Returns the brush color as a rgba CSS color for the active segment of the active
 * `Labelmap3D` for the `BrushStackState` displayed on the element.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID   The cornerstone enabled
 *                                                    element or its UUID.
 * @param  {boolean} drawing = false    Whether the user is drawing or not.
 * @returns {string}                    An rgba value as a string.
 */

function getBrushColor(elementOrEnabledElementUID) {
  var drawing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
  var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_2__["default"])(elementOrEnabledElementUID);

  if (!element) {
    return;
  }

  var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_0__["getToolState"])(element, 'stack');

  if (!stackState) {
    logger.error('Consumers must define stacks in their application if using segmentations in cornerstoneTools.');
    return;
  }

  var stackData = stackState.data[0];
  var firstImageId = stackData.imageIds[0];
  var brushStackState = _state__WEBPACK_IMPORTED_MODULE_1__["default"].series[firstImageId];
  var color;

  if (brushStackState) {
    var activeLabelmapIndex = brushStackState.activeLabelmapIndex;
    var labelmap3D = brushStackState.labelmaps3D[activeLabelmapIndex];
    var activeSegmentIndex = labelmap3D.activeSegmentIndex;
    color = _state__WEBPACK_IMPORTED_MODULE_1__["default"].colorLutTables[labelmap3D.colorLUTIndex][activeSegmentIndex];
  } else {
    // No data yet, make brush the default color of colormap 0.
    color = _state__WEBPACK_IMPORTED_MODULE_1__["default"].colorLutTables[0][1];
  }

  return drawing ? "rgba(".concat(color[0], ", ").concat(color[1], ", ").concat(color[2], ", 1.0 )") : "rgba(".concat(color[0], ", ").concat(color[1], ", ").concat(color[2], ", 0.8 )");
}

/***/ }),

/***/ "./store/modules/segmentationModule/getElement.js":
/*!********************************************************!*\
  !*** ./store/modules/segmentationModule/getElement.js ***!
  \********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_545129__) {

"use strict";
__nested_webpack_require_545129__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_545129__.d(__nested_webpack_exports__, "default", function() { return _getElement; });
/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_545129__(/*! ../../index.js */ "./store/index.js");

/**
 * Returns the cornerstone enabled element given either the element or its enabledElement UUID.
 *
 * @param  {string|HTMLElement} elementOrEnabledElementUID  The enabledElement
 *                                                          or its UUID.
 * @returns {HTMLElement}
 */

function _getElement(elementOrEnabledElementUID) {
  if (elementOrEnabledElementUID instanceof HTMLElement) {
    return elementOrEnabledElementUID;
  }

  return _index_js__WEBPACK_IMPORTED_MODULE_0__["getters"].enabledElementByUID(elementOrEnabledElementUID);
}

/***/ }),

/***/ "./store/modules/segmentationModule/getLabelmap2D.js":
/*!***********************************************************!*\
  !*** ./store/modules/segmentationModule/getLabelmap2D.js ***!
  \***********************************************************/
/*! exports provided: default, getLabelmap2DByImageIdIndex */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_546387__) {

"use strict";
__nested_webpack_require_546387__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_546387__.d(__nested_webpack_exports__, "default", function() { return getLabelmap2D; });
/* harmony export (binding) */ __nested_webpack_require_546387__.d(__nested_webpack_exports__, "getLabelmap2DByImageIdIndex", function() { return getLabelmap2DByImageIdIndex; });
/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_546387__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_546387__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _getSegmentsOnPixeldata__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_546387__(/*! ./getSegmentsOnPixeldata */ "./store/modules/segmentationModule/getSegmentsOnPixeldata.js");
/* harmony import */ var _addLabelmap3D__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_546387__(/*! ./addLabelmap3D */ "./store/modules/segmentationModule/addLabelmap3D.js");
/* harmony import */ var _addLabelmap2D__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_546387__(/*! ./addLabelmap2D */ "./store/modules/segmentationModule/addLabelmap2D.js");
/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_546387__(/*! ../../../externalModules */ "./externalModules.js");
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_546387__(/*! ./state */ "./store/modules/segmentationModule/state.js");
/* harmony import */ var _arrayTypes__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_546387__(/*! ./arrayTypes */ "./store/modules/segmentationModule/arrayTypes.js");
/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_546387__(/*! ../../index.js */ "./store/index.js");
/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_546387__(/*! ../../../util/logger */ "./util/logger.js");










var UINT_16_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_7__["default"].UINT_16_ARRAY,
    FLOAT_32_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_7__["default"].FLOAT_32_ARRAY;
var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_9__["getLogger"])('store:modules:segmentationModule:getLabelmap2D');
/**
 * Returns the active `labelmap3D` and the `currentImageIdIndex`. If a labelmap does
 * not get exist, creates a new one. Generates a `labelmap2D` for the `currentImageIndex`
 * if it does not yet exist.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID   The cornerstone enabled
 *                                                    element or its UUID.
 * @returns {Object} The `Labelmap2D`, `Labelmap3D`, `activeLabelmapIndex` and `currentImageIdIndex`.
 */

function getLabelmap2D(elementOrEnabledElementUID) {
  var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID);

  if (!element) {
    return;
  }

  var cornerstone = _externalModules__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone;
  var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack');

  if (!stackState) {
    logger.error('Consumers must define stacks in their application if using segmentations in cornerstoneTools.');
    return;
  }

  var stackData = stackState.data[0];
  var enabledElement = cornerstone.getEnabledElement(element);
  var currentImageIdIndex = stackData.currentImageIdIndex;
  var _enabledElement$image = enabledElement.image,
      rows = _enabledElement$image.rows,
      columns = _enabledElement$image.columns;
  var numberOfFrames = stackData.imageIds.length;
  var firstImageId = stackData.imageIds[0];
  var brushStackState = _state__WEBPACK_IMPORTED_MODULE_6__["default"].series[firstImageId];
  var activeLabelmapIndex;

  if (brushStackState) {
    activeLabelmapIndex = brushStackState.activeLabelmapIndex;

    if (!brushStackState.labelmaps3D[activeLabelmapIndex]) {
      var size = rows * columns * numberOfFrames;
      Object(_addLabelmap3D__WEBPACK_IMPORTED_MODULE_3__["default"])(brushStackState, activeLabelmapIndex, size);
    }

    if (!brushStackState.labelmaps3D[activeLabelmapIndex].labelmaps2D[currentImageIdIndex]) {
      Object(_addLabelmap2D__WEBPACK_IMPORTED_MODULE_4__["default"])(brushStackState, activeLabelmapIndex, currentImageIdIndex, rows, columns);
    }
  } else {
    activeLabelmapIndex = 0;
    _state__WEBPACK_IMPORTED_MODULE_6__["default"].series[firstImageId] = {
      activeLabelmapIndex: activeLabelmapIndex,
      labelmaps3D: []
    };
    brushStackState = _state__WEBPACK_IMPORTED_MODULE_6__["default"].series[firstImageId];

    var _size = rows * columns * numberOfFrames;

    Object(_addLabelmap3D__WEBPACK_IMPORTED_MODULE_3__["default"])(brushStackState, activeLabelmapIndex, _size);
    Object(_addLabelmap2D__WEBPACK_IMPORTED_MODULE_4__["default"])(brushStackState, activeLabelmapIndex, currentImageIdIndex, rows, columns);
  }

  var labelmap3D = brushStackState.labelmaps3D[activeLabelmapIndex];
  return {
    labelmap2D: labelmap3D.labelmaps2D[currentImageIdIndex],
    labelmap3D: labelmap3D,
    currentImageIdIndex: currentImageIdIndex,
    activeLabelmapIndex: activeLabelmapIndex
  };
}
/**
 * Returns a `Labelmap2D` view of a `Labelmap3D` for the given `imageIdIndex`.
 * Creates and caches it if it doesn't yet exist.
 *
 * @param  {Labelmap3D} labelmap3D   The `Labelmap3D` object.
 * @param  {number} imageIdIndex The imageId Index.
 * @param  {number} rows         The number of rows.
 * @param  {number} columns      The number of columns.
 * @returns {null}
 */

function getLabelmap2DByImageIdIndex(labelmap3D, imageIdIndex, rows, columns) {
  if (!labelmap3D.labelmaps2D[imageIdIndex]) {
    var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_8__["getModule"])('segmentation'),
        configuration = _getModule.configuration;

    var sliceLength = rows * columns;
    var elementOffset = sliceLength * imageIdIndex;
    var pixelData;

    switch (configuration.arrayType) {
      case UINT_16_ARRAY:
        pixelData = new Uint16Array(labelmap3D.buffer, elementOffset * 2, // 2 bytes/voxel
        sliceLength);
        break;

      case FLOAT_32_ARRAY:
        pixelData = new Float32Array(labelmap3D.buffer, elementOffset * 4, // 4 bytes/voxel
        sliceLength);
        break;

      default:
        throw new Error("Unsupported Array Type ".concat(configuration.arrayType));
    }

    labelmap3D.labelmaps2D[imageIdIndex] = {
      pixelData: pixelData,
      segmentsOnLabelmap: Object(_getSegmentsOnPixeldata__WEBPACK_IMPORTED_MODULE_2__["default"])(pixelData)
    };
  }

  return labelmap3D.labelmaps2D[imageIdIndex];
}

/***/ }),

/***/ "./store/modules/segmentationModule/getLabelmapBuffers.js":
/*!****************************************************************!*\
  !*** ./store/modules/segmentationModule/getLabelmapBuffers.js ***!
  \****************************************************************/
/*! exports provided: getLabelmapBuffers, getActiveLabelmapBuffer */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_553521__) {

"use strict";
__nested_webpack_require_553521__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_553521__.d(__nested_webpack_exports__, "getLabelmapBuffers", function() { return getLabelmapBuffers; });
/* harmony export (binding) */ __nested_webpack_require_553521__.d(__nested_webpack_exports__, "getActiveLabelmapBuffer", function() { return getActiveLabelmapBuffer; });
/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_553521__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_553521__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _getLabelmaps3D__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_553521__(/*! ./getLabelmaps3D */ "./store/modules/segmentationModule/getLabelmaps3D.js");
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_553521__(/*! ./state */ "./store/modules/segmentationModule/state.js");
/* harmony import */ var _arrayTypes__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_553521__(/*! ./arrayTypes */ "./store/modules/segmentationModule/arrayTypes.js");
/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_553521__(/*! ../../index.js */ "./store/index.js");






var UINT_16_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_4__["default"].UINT_16_ARRAY,
    FLOAT_32_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_4__["default"].FLOAT_32_ARRAY;
/**
 * GetLabelmapBuffers - Returns the `buffer` of each `Labelmap3D` associated
 *                      with the `BrushStackState` displayed on the element, or a specific
 *                      one if `labelmapIndex` is defined.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID   The cornerstone enabled
 *                                                    element or its UUID.
 * @param {type} [labelmapIndex] Optional filtering to only return one labelmap.
 * @returns {Object|Object[]} An array of objects containing the `labelmapIndex`, and the corresponding buffer and `colorLUT`.
 * Only one object if `labelmapIndex` was specified.
 *
 */

function getLabelmapBuffers(elementOrEnabledElementUID, labelmapIndex) {
  var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID);

  if (!element) {
    return;
  }

  var _getLabelmaps3D = Object(_getLabelmaps3D__WEBPACK_IMPORTED_MODULE_2__["default"])(element),
      labelmaps3D = _getLabelmaps3D.labelmaps3D;

  if (!labelmaps3D) {
    return [];
  }

  var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_5__["getModule"])('segmentation'),
      configuration = _getModule.configuration;

  var type;
  var bytesPerVoxel;

  switch (configuration.arrayType) {
    case UINT_16_ARRAY:
      type = 'Uint16Array';
      bytesPerVoxel = '2';
      break;

    case FLOAT_32_ARRAY:
      type = 'Float32Array';
      bytesPerVoxel = '4';
      break;

    default:
      throw new Error("Unsupported Array Type ".concat(configuration.arrayType));
  }

  var colorLutTables = _state__WEBPACK_IMPORTED_MODULE_3__["default"].colorLutTables;

  if (labelmapIndex !== undefined) {
    var labelmap3D = labelmaps3D[labelmapIndex];

    if (labelmap3D) {
      return {
        labelmapIndex: labelmapIndex,
        bytesPerVoxel: bytesPerVoxel,
        type: type,
        buffer: labelmap3D.buffer,
        colorLUT: colorLutTables[labelmap3D.colorLUTIndex]
      };
    }

    return;
  }

  var labelmapBuffers = [];

  for (var i = 0; i < labelmaps3D.length; i++) {
    var _labelmap3D = labelmaps3D[i];

    if (_labelmap3D) {
      labelmapBuffers.push({
        labelmapIndex: i,
        bytesPerVoxel: 2,
        buffer: _labelmap3D.buffer,
        colorLUT: colorLutTables[_labelmap3D.colorLUTIndex]
      });
    }
  }

  return labelmapBuffers;
}
/**
 * Returns the `buffer` corresponding to the active `Labelmap3D` associated with the
 * `BrushStackState` displayed onv the element.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID   The cornerstone enabled
 *                                                    element or its UUID.
 * @returns {Object}      An object containing the `labelmapIndex` and
 *                        corresponding `buffer`.
 */


function getActiveLabelmapBuffer(elementOrEnabledElementUID) {
  var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID);

  if (!element) {
    return;
  }

  var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack');
  var imageIds = stackState.data[0].imageIds;
  var firstImageId = imageIds[0];
  var brushStackState = _state__WEBPACK_IMPORTED_MODULE_3__["default"].series[firstImageId];

  if (!brushStackState) {
    return;
  }

  var activeLabelmapIndex = brushStackState.activeLabelmapIndex;
  return getLabelmapBuffers(element, activeLabelmapIndex);
}



/***/ }),

/***/ "./store/modules/segmentationModule/getLabelmapStats.js":
/*!**************************************************************!*\
  !*** ./store/modules/segmentationModule/getLabelmapStats.js ***!
  \**************************************************************/
/*! exports provided: default, _calculateLabelmapStats */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_558881__) {

"use strict";
__nested_webpack_require_558881__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_558881__.d(__nested_webpack_exports__, "default", function() { return getLabelmapStats; });
/* harmony export (binding) */ __nested_webpack_require_558881__.d(__nested_webpack_exports__, "_calculateLabelmapStats", function() { return _calculateLabelmapStats; });
/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_558881__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_558881__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_558881__(/*! ./state */ "./store/modules/segmentationModule/state.js");
/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_558881__(/*! ../../../externalModules */ "./externalModules.js");
/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_558881__(/*! ../../../util/logger */ "./util/logger.js");





var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_4__["getLogger"])('store:modules:segmentationModule:getLabelmapStats');
/**
 * Returns the maximum pixel value, mean and standard deviation of the segment
 * given by the `segmentIndex` and `labelmapIndex`.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID   The cornerstone enabled
 *                                                    element or its UUID.
 * @param  {number} segmentIndex  The segment index to query.
 * @param  {number} labelmapIndex The `labelmapIndex` of the `Labelmap3D` to query.
 *                                Defaults to the activeLabelmapIndex if not given.
 * @returns {Promise|null} A promise that resolves to an object containing
 *                    the maximum pixel value, the mean and the standard deviation.
 *                    Returns null if no cornerstone element is found.
 */

function getLabelmapStats(elementOrEnabledElementUID, segmentIndex, labelmapIndex) {
  var cornerstone = _externalModules__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone;
  var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID);

  if (!element) {
    return null;
  }

  var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack');
  var imageIds = stackState.data[0].imageIds;
  var firstImageId = imageIds[0];
  return new Promise(function (resolve) {
    var brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId];

    if (!brushStackState) {
      resolve(null);
    }

    var _getImagePlanes2 = _getImagePlanes(imageIds),
        sufficientMetadata = _getImagePlanes2.sufficientMetadata,
        imagePlanes = _getImagePlanes2.imagePlanes;

    if (!sufficientMetadata) {
      logger.warn('Insufficient imagePlaneModule information to calculate volume statistics.');
      resolve(null);
    }

    labelmapIndex = labelmapIndex === undefined ? brushStackState.activeLabelmapIndex : labelmapIndex;
    var labelmap3D = brushStackState.labelmaps3D[labelmapIndex];
    var imagePromises = [];

    for (var i = 0; i < imageIds.length; i++) {
      imagePromises.push(cornerstone.loadAndCacheImage(imageIds[i]));
    }

    Promise.all(imagePromises).then(function (images) {
      var stats = _calculateLabelmapStats(labelmap3D, images, imagePlanes, segmentIndex);

      resolve(stats);
    });
  });
}
/**
 *
 * @param {string[]} imageIds An array of cornerstone imageIds.
 * @returns {Object} An object containing an array of per-frame imagePlane metadata,
 * and a flag indicating if the metadata was present.
 */

function _getImagePlanes(imageIds) {
  var imagePlanes = [];
  var cornerstone = _externalModules__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone;
  var metadataProvider = cornerstone.metaData;
  var sufficientMetadata = true;

  for (var i = 0; i < imageIds.length; i++) {
    var imagePlaneModule = metadataProvider.get('imagePlaneModule', imageIds[i]);

    if (!imagePlaneModule) {
      sufficientMetadata = false;
      break;
    }

    imagePlanes.push(imagePlaneModule);
  }

  return {
    sufficientMetadata: sufficientMetadata,
    imagePlanes: imagePlanes
  };
}
/**
 *
 * @param {Labelmap3D} labelmap3D The labelmap3D object.
 * @param {Object[]} images An array of cornerstone images.
 * @param {Object[]} imagePlanes An array of the per-frame imagePlane metadata.
 * @param {number} segmentIndex
 *
 * @returns {Object} Statistics object containing the volume in mm^3; and the
 *                   min, max, mean and stdev of the segmented voxels.
 */


function _calculateLabelmapStats(labelmap3D, images, imagePlanes, segmentIndex) {
  var voxelsPerFrame = _getVoxelsPerFrameForSegment(labelmap3D, images, imagePlanes, segmentIndex);

  var volumeWeightedMean = 0;
  var max = voxelsPerFrame[0].values[0];
  var min = max;
  var volume = 0; // Calculate Min, Max, volume and mean.

  for (var i = 0; i < voxelsPerFrame.length; i++) {
    var _voxelsPerFrame$i = voxelsPerFrame[i],
        values = _voxelsPerFrame$i.values,
        voxelInMM3 = _voxelsPerFrame$i.voxelInMM3;
    volume += voxelInMM3 * values.length;
    var sum = 0;
    values.forEach(function (value) {
      if (value > max) {
        max = value;
      } else if (value < min) {
        min = value;
      }

      sum += value;
    });
    volumeWeightedMean += sum * voxelInMM3;
  }

  volumeWeightedMean /= volume;
  var volumeWeightedStDev = 0; // Calculate the volume weigthed standard deviation.

  for (var _i = 0; _i < voxelsPerFrame.length; _i++) {
    var _voxelsPerFrame$_i = voxelsPerFrame[_i],
        values = _voxelsPerFrame$_i.values,
        voxelInMM3 = _voxelsPerFrame$_i.voxelInMM3;
    var stdDevSum = 0;
    values.forEach(function (value) {
      stdDevSum += Math.pow(value - volumeWeightedMean, 2);
    });
    volumeWeightedStDev += stdDevSum * voxelInMM3;
  }

  volumeWeightedStDev /= volume;
  volumeWeightedStDev = Math.sqrt(volumeWeightedStDev);
  return {
    volume: volume,
    mean: volumeWeightedMean,
    stdDev: volumeWeightedStDev,
    max: max,
    min: min
  };
}
/**
 * Returns an array of voxel values masked by the segment for each frame,
 * as well as the real world volume of a voxel on that frame.
 *
 * @param {Labelmap3D} labelmap3D The `Labelmap3D` object.
 * @param {Object[]} images An array of cornerstone images.
 * @param {Object[]} imagePlanes An array of the per-frame imagePlane metadata.
 * @param {number} segmentIndex The index of the segment to check.
 *
 * @returns {Object[]} An array of voxel values and voxel volumes per frame.
 */

function _getVoxelsPerFrameForSegment(labelmap3D, images, imagePlanes, segmentIndex) {
  var _images$ = images[0],
      rowPixelSpacing = _images$.rowPixelSpacing,
      columnPixelSpacing = _images$.columnPixelSpacing;
  var labelmaps2D = labelmap3D.labelmaps2D;
  var voxelsPerFrame = [];

  for (var i = 0; i < labelmaps2D.length; i++) {
    var labelmap2D = labelmaps2D[i];

    if (labelmap2D && labelmap2D.segmentsOnLabelmap.includes(segmentIndex)) {
      var sliceThickness = _getSliceThickness(images, imagePlanes, i);

      var voxelInMM3 = sliceThickness * rowPixelSpacing * columnPixelSpacing;
      var segmentationPixelData = labelmap2D.pixelData;
      var imagePixelData = images[i].getPixelData();
      var values = []; // Iterate over segmentationPixelData and count voxels.

      for (var p = 0; p < segmentationPixelData.length; p++) {
        if (segmentationPixelData[p] === segmentIndex) {
          values.push(imagePixelData[p]);
        }
      }

      voxelsPerFrame.push({
        voxelInMM3: voxelInMM3,
        values: values
      });
    }
  }

  return voxelsPerFrame;
}
/**
 * Estimates the slice thickness given the image position patient of adjacent frames.
 * For the edges the slice thickness is assumed to be the perpendicular distance to the closest frame.
 * For all other frames the slice thickness is taken to be the sum of half of the distance to the frame above and below.
 *
 * Voxels on the first or last frame are assumed to be full occupied.
 *
 * @param {Object[]} images An array of cornerstone images.
 * @param {Object[]} imagePlanes An array of the per-frame imagePlane metadata.
 * @param {number} frameIndex The index of the frame to get the slice thickness for.
 *
 * @returns {number}
 */


function _getSliceThickness(images, imagePlanes, frameIndex) {
  var numberOfSlices = images.length;
  var ipp = imagePlanes[frameIndex].imagePositionPatient; // Special cases: Edge of volume - Assume thickness is the distance
  // between the current slice and the closest slice as this is all the information we have.

  if (frameIndex === 0) {
    var _ippAbove = imagePlanes[frameIndex + 1].imagePositionPatient;
    return distanceBetweenSlices(ipp, _ippAbove);
  } else if (frameIndex === numberOfSlices - 1) {
    var _ippBelow = imagePlanes[frameIndex - 1].imagePositionPatient;
    return distanceBetweenSlices(ipp, _ippBelow);
  } // Estimate slice thickness from the two adjacent slices.


  var ippBelow = imagePlanes[frameIndex - 1].imagePositionPatient;
  var ippAbove = imagePlanes[frameIndex + 1].imagePositionPatient;
  return (distanceBetweenSlices(ipp, ippBelow) + distanceBetweenSlices(ipp, ippAbove)) / 2;
}
/**
 * Returns the ditance between two imagePostionPatient coordinates.
 *
 * @param {number[]} ipp1 The first image position patient array.
 * @param {number[]} ipp2 The second image position patient array.
 */


function distanceBetweenSlices(ipp1, ipp2) {
  return Math.sqrt(Math.pow(ipp1[0] - ipp2[0], 2) + Math.pow(ipp1[1] - ipp2[1], 2) + Math.pow(ipp1[2] - ipp2[2], 2));
}

/***/ }),

/***/ "./store/modules/segmentationModule/getLabelmaps3D.js":
/*!************************************************************!*\
  !*** ./store/modules/segmentationModule/getLabelmaps3D.js ***!
  \************************************************************/
/*! exports provided: default, getLabelmap3D */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_569103__) {

"use strict";
__nested_webpack_require_569103__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_569103__.d(__nested_webpack_exports__, "default", function() { return getLabelmaps3D; });
/* harmony export (binding) */ __nested_webpack_require_569103__.d(__nested_webpack_exports__, "getLabelmap3D", function() { return getLabelmap3D; });
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_569103__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_569103__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js");
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_569103__(/*! ./state */ "./store/modules/segmentationModule/state.js");
/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_569103__(/*! ../../../util/logger */ "./util/logger.js");




var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('store:modules:segmentationModule:getLabelmaps3D');
/**
 * Returns the `Labelmap3D` objects associated with the series displayed
 * in the element, the `activeLabelmapIndex` and the `currentImageIdIndex`.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID   The cornerstone enabled
 *                                                    element or its UUID.
 * @returns {Object}              An object containing `Labelmap3D` objects,
 *                                the `activeLabelmapIndex` amd the `currentImageIdIndex`.
 */

function getLabelmaps3D(elementOrEnabledElementUID) {
  var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_1__["default"])(elementOrEnabledElementUID);

  if (!element) {
    return;
  }

  var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_0__["getToolState"])(element, 'stack');

  if (!stackState) {
    logger.error('Consumers must define stacks in their application if using segmentations in cornerstoneTools.');
    return;
  }

  var stackData = stackState.data[0];
  var firstImageId = stackData.imageIds[0];
  var brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId];
  var labelmaps3D;
  var activeLabelmapIndex;

  if (brushStackState) {
    labelmaps3D = brushStackState.labelmaps3D;
    activeLabelmapIndex = brushStackState.activeLabelmapIndex;
  }

  return {
    labelmaps3D: labelmaps3D,
    activeLabelmapIndex: activeLabelmapIndex,
    currentImageIdIndex: stackData.currentImageIdIndex
  };
}
/**
 * Returns a single `Labelmap3D` object associated with the series displayed
 * in the element.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID   The cornerstone enabled
 *                                                    element or its UUID.
 * @param  {number} [labelmapIndex] The index of the `Labelmap3D` to retrieve. Defaults to
 *                                  the `activeLabelmapIndex`.
 * @returns {Object}              A `Labelmap3D` object.
 */

function getLabelmap3D(elementOrEnabledElementUID, labelmapIndex) {
  var _getLabelmaps3D = getLabelmaps3D(elementOrEnabledElementUID),
      labelmaps3D = _getLabelmaps3D.labelmaps3D,
      activeLabelmapIndex = _getLabelmaps3D.activeLabelmapIndex;

  labelmapIndex = labelmapIndex !== undefined ? labelmapIndex : activeLabelmapIndex;
  return labelmaps3D[labelmapIndex];
}

/***/ }),

/***/ "./store/modules/segmentationModule/getSegmentOfActiveLabelmapAtEvent.js":
/*!*******************************************************************************!*\
  !*** ./store/modules/segmentationModule/getSegmentOfActiveLabelmapAtEvent.js ***!
  \*******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_572952__) {

"use strict";
__nested_webpack_require_572952__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_572952__.d(__nested_webpack_exports__, "default", function() { return getSegmentOfActiveLabelmapAtEvent; });
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_572952__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_572952__(/*! ./state */ "./store/modules/segmentationModule/state.js");
/* harmony import */ var _util_isPointInImage__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_572952__(/*! ../../../util/isPointInImage */ "./util/isPointInImage.js");
/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_572952__(/*! ../../../util/logger */ "./util/logger.js");




var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('store:modules:segmentationModule:getSegmentOfActiveLabelmapAtEvent');
/**
 * Returns the segmentIndex at the event position and its corresponding metadata.
 * @param  {Object} evt A cornerstone event with a currentPoints property.
 *
 * @returns {Object} An `Object` with the `segmentIndex` and its `metadata`.
 */

function getSegmentOfActiveLabelmapAtEvent(evt) {
  var eventData = evt.detail;
  var element = eventData.element,
      image = eventData.image,
      currentPoints = eventData.currentPoints;

  if (!currentPoints) {
    logger.warn('Not a cornerstone input event.');
    return;
  }

  var cols = image.width;
  var rows = image.height;

  if (!element) {
    return;
  }

  var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_0__["getToolState"])(element, 'stack');
  var stackData = stackState.data[0];
  var currentImageIdIndex = stackData.currentImageIdIndex;
  var firstImageId = stackData.imageIds[0];
  var brushStackState = _state__WEBPACK_IMPORTED_MODULE_1__["default"].series[firstImageId];
  var activeLabelmapIndex = brushStackState.activeLabelmapIndex;
  var labelmap3D = brushStackState.labelmaps3D[activeLabelmapIndex];

  if (!labelmap3D) {
    // No labelmap3D === no segment here.
    return;
  }

  var labelmap2D = labelmap3D.labelmaps2D[currentImageIdIndex];

  if (!labelmap2D) {
    // No labelmap on this imageId === no segment here.
    return;
  }

  var pixelData = labelmap2D.pixelData;
  var _currentPoints$image = currentPoints.image,
      x = _currentPoints$image.x,
      y = _currentPoints$image.y;
  x = Math.floor(x);
  y = Math.floor(y);

  if (Object(_util_isPointInImage__WEBPACK_IMPORTED_MODULE_2__["default"])({
    x: x,
    y: y
  }, rows, cols)) {
    var segmentIndex = pixelData[y * cols + x];

    if (segmentIndex === 0) {
      return;
    }

    return {
      segmentIndex: segmentIndex,
      metadata: labelmap3D.metadata[segmentIndex]
    };
  } // Outside image === no segment here.


  return;
}

/***/ }),

/***/ "./store/modules/segmentationModule/getSegmentsOnPixeldata.js":
/*!********************************************************************!*\
  !*** ./store/modules/segmentationModule/getSegmentsOnPixeldata.js ***!
  \********************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_576269__) {

"use strict";
__nested_webpack_require_576269__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_576269__.d(__nested_webpack_exports__, "default", function() { return getSegmentsOnPixelData; });
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_576269__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_576269__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);


/**
 * Returns an array of the segment indicies present on the `pixelData`.
 * @param  {UInt16Array|Float32Array} pixelData The pixel data array.
 */
function getSegmentsOnPixelData(pixelData) {
  return _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(new Set(pixelData));
}

/***/ }),

/***/ "./store/modules/segmentationModule/history.js":
/*!*****************************************************!*\
  !*** ./store/modules/segmentationModule/history.js ***!
  \*****************************************************/
/*! exports provided: pushState, undo, redo */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_577569__) {

"use strict";
__nested_webpack_require_577569__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_577569__.d(__nested_webpack_exports__, "pushState", function() { return pushState; });
/* harmony export (binding) */ __nested_webpack_require_577569__.d(__nested_webpack_exports__, "undo", function() { return undo; });
/* harmony export (binding) */ __nested_webpack_require_577569__.d(__nested_webpack_exports__, "redo", function() { return redo; });
/* harmony import */ var _getLabelmaps3D__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_577569__(/*! ./getLabelmaps3D */ "./store/modules/segmentationModule/getLabelmaps3D.js");
/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_577569__(/*! ../../../util/logger */ "./util/logger.js");
/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_577569__(/*! ../../../externalModules */ "./externalModules.js");



var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_1__["getLogger"])('util:segmentation:labelmap3DHistory');

function pushState(element, operations, labelmapIndex) {
  var labelmap3D = Object(_getLabelmaps3D__WEBPACK_IMPORTED_MODULE_0__["getLabelmap3D"])(element, labelmapIndex);
  labelmap3D.undo.push(operations);
  labelmap3D.redo = [];
}

function undo(element, labelmapIndex) {
  var labelmap3D = Object(_getLabelmaps3D__WEBPACK_IMPORTED_MODULE_0__["getLabelmap3D"])(element, labelmapIndex);
  var undo = labelmap3D.undo,
      redo = labelmap3D.redo;

  if (!undo.length) {
    logger.warn('No undos left.');
    return;
  } // Pop last set of operations from undo.


  var operations = undo.pop(); // Undo operations.

  applyState(labelmap3D, operations, 1); // Push set of operations to redo.

  redo.push(operations);
  _externalModules__WEBPACK_IMPORTED_MODULE_2__["default"].cornerstone.updateImage(element);
}

function redo(element, labelmapIndex) {
  var labelmap3D = Object(_getLabelmaps3D__WEBPACK_IMPORTED_MODULE_0__["getLabelmap3D"])(element, labelmapIndex);
  var undo = labelmap3D.undo,
      redo = labelmap3D.redo;

  if (!redo.length) {
    logger.warn('No redos left.');
    return;
  } // Pop last set of operations from redo.


  var operations = redo.pop(); // Redo operations.

  applyState(labelmap3D, operations, 2); // Push set of operations to undo.

  undo.push(operations);
  _externalModules__WEBPACK_IMPORTED_MODULE_2__["default"].cornerstone.updateImage(element);
}



function applyState(labelmap3D, operations, replaceIndex) {
  var labelmaps2D = labelmap3D.labelmaps2D;
  operations.forEach(function (operation) {
    var imageIdIndex = operation.imageIdIndex,
        diff = operation.diff;
    var labelmap2D = labelmaps2D[imageIdIndex];
    var pixelData = labelmap2D.pixelData;

    for (var i = 0; i < diff.length; i++) {
      var diffI = diff[i];
      pixelData[diffI[0]] = diffI[replaceIndex];
    }
  });
}

/***/ }),

/***/ "./store/modules/segmentationModule/index.js":
/*!***************************************************!*\
  !*** ./store/modules/segmentationModule/index.js ***!
  \***************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_580740__) {

"use strict";
__nested_webpack_require_580740__.r(__nested_webpack_exports__);
/* harmony import */ var _metadata__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_580740__(/*! ./metadata */ "./store/modules/segmentationModule/metadata.js");
/* harmony import */ var _activeLabelmapIndex__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_580740__(/*! ./activeLabelmapIndex */ "./store/modules/segmentationModule/activeLabelmapIndex.js");
/* harmony import */ var _activeSegmentIndex__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_580740__(/*! ./activeSegmentIndex */ "./store/modules/segmentationModule/activeSegmentIndex.js");
/* harmony import */ var _segmentVisibility_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_580740__(/*! ./segmentVisibility.js */ "./store/modules/segmentationModule/segmentVisibility.js");
/* harmony import */ var _getLabelmapBuffers__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_580740__(/*! ./getLabelmapBuffers */ "./store/modules/segmentationModule/getLabelmapBuffers.js");
/* harmony import */ var _setLabelmap3D_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_580740__(/*! ./setLabelmap3D.js */ "./store/modules/segmentationModule/setLabelmap3D.js");
/* harmony import */ var _getLabelmapStats__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_580740__(/*! ./getLabelmapStats */ "./store/modules/segmentationModule/getLabelmapStats.js");
/* harmony import */ var _getLabelmaps3D__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_580740__(/*! ./getLabelmaps3D */ "./store/modules/segmentationModule/getLabelmaps3D.js");
/* harmony import */ var _getLabelmap2D__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_580740__(/*! ./getLabelmap2D */ "./store/modules/segmentationModule/getLabelmap2D.js");
/* harmony import */ var _getSegmentOfActiveLabelmapAtEvent__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_580740__(/*! ./getSegmentOfActiveLabelmapAtEvent */ "./store/modules/segmentationModule/getSegmentOfActiveLabelmapAtEvent.js");
/* harmony import */ var _colorLUT__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_580740__(/*! ./colorLUT */ "./store/modules/segmentationModule/colorLUT.js");
/* harmony import */ var _getBrushColor__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_580740__(/*! ./getBrushColor */ "./store/modules/segmentationModule/getBrushColor.js");
/* harmony import */ var _getSegmentsOnPixeldata__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_580740__(/*! ./getSegmentsOnPixeldata */ "./store/modules/segmentationModule/getSegmentsOnPixeldata.js");
/* harmony import */ var _deleteSegment__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_580740__(/*! ./deleteSegment */ "./store/modules/segmentationModule/deleteSegment.js");
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_580740__(/*! ./state */ "./store/modules/segmentationModule/state.js");
/* harmony import */ var _defaultConfiguration__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_580740__(/*! ./defaultConfiguration */ "./store/modules/segmentationModule/defaultConfiguration.js");
/* harmony import */ var _history__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_580740__(/*! ./history */ "./store/modules/segmentationModule/history.js");
/* harmony import */ var _setRadius__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_580740__(/*! ./setRadius */ "./store/modules/segmentationModule/setRadius.js");


















/**
 * A map of `firstImageId` to associated `BrushStackState`, where
 * `firstImageId` is the `imageId` of the first image in a stack.
 *
 * @typedef {Object} Series
 */

/**
 * @typedef {Object} BrushStackState An object defining a set of 3D labelmaps
 *    associated with a specific cornerstone stack.
 * @property {number} activeLabelmapIndex The index of the active `Labelmap3D`.
 * @property {Labelmap3D[]} labelmaps3D An array of `Labelmap3D` objects.
 */

/**
 * A 3D labelmap object which stores the labelmap data for an entire stack of cornerstone images.
 *
 * @typedef {Object} Labelmap3D An object defining a 3D labelmap.
 * @property {ArrayBuffer}  buffer An array buffer to store the pixel data of the `Labelmap3D` (2 bytes/voxel for Uint16 and 4 bytes/voxel for Float32).
 * @property {Labelmap2D[]} labelmaps2D array of `labelmap2D` views on the `buffer`, indexed by in-stack
 *                          image positions.
 * @property {Object[]} metadata An array of metadata per segment. Metadata is optional and its form is
 *                               application specific.
 * @property {number} activeSegmentIndex The index of the active segment for this `Labelmap3D`.
 * @property {number} colorLUTIndex The index of the color LUT to use when displaying this `Labelmap3D`.
 * @property {boolean[]} segmentsHidden The visibility of segments on this labelmap.
 * If an element is `true`, the element is hidden. If it `false|undefined`, the segment is visible.
 * @property {Object[]} undo A history of operations that can be reversed.
 * @property {Object[]} redo A history of reverted operations, so that an undo can be reversed.
 *                           Is cleared when changes are made to the labelmap.
 */

/**
 * A 2D labelmap object which accesses only one frame's worth of data from its parent `Labelmap3D`.
 *
 * @typedef {Object} Labelmap2D An object defining a 2D view on a section of a `Labelmap3D`'s `buffer`.
 * @property {Uint16Array|Float32Array} pixelData A 2D view on a section of the parent `Labelmap3D`'s `buffer`.
 * @property {number[]} segmentsOnLabelmap An array of segments present in the `pixelData`.
 */

/**
 * OnRegisterCallback - Initialise a single default colorLUT when cornerstoneTools is initialised.
 *
 * @returns {null}
 */

function onRegisterCallback() {
  Object(_colorLUT__WEBPACK_IMPORTED_MODULE_10__["default"])(0);
}

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  state: _state__WEBPACK_IMPORTED_MODULE_14__["default"],
  configuration: _defaultConfiguration__WEBPACK_IMPORTED_MODULE_15__["default"],
  onRegisterCallback: onRegisterCallback,
  getters: {
    metadata: _metadata__WEBPACK_IMPORTED_MODULE_0__["getMetadata"],
    labelmap3D: _getLabelmaps3D__WEBPACK_IMPORTED_MODULE_7__["getLabelmap3D"],
    labelmaps3D: _getLabelmaps3D__WEBPACK_IMPORTED_MODULE_7__["default"],
    activeLabelmapIndex: _activeLabelmapIndex__WEBPACK_IMPORTED_MODULE_1__["getActiveLabelmapIndex"],
    activeSegmentIndex: _activeSegmentIndex__WEBPACK_IMPORTED_MODULE_2__["getActiveSegmentIndex"],
    isSegmentVisible: _segmentVisibility_js__WEBPACK_IMPORTED_MODULE_3__["isSegmentVisible"],
    labelmap2D: _getLabelmap2D__WEBPACK_IMPORTED_MODULE_8__["default"],
    labelmap2DByImageIdIndex: _getLabelmap2D__WEBPACK_IMPORTED_MODULE_8__["getLabelmap2DByImageIdIndex"],
    labelmapStats: _getLabelmapStats__WEBPACK_IMPORTED_MODULE_6__["default"],
    segmentOfActiveLabelmapAtEvent: _getSegmentOfActiveLabelmapAtEvent__WEBPACK_IMPORTED_MODULE_9__["default"],
    brushColor: _getBrushColor__WEBPACK_IMPORTED_MODULE_11__["default"],
    labelmapBuffers: _getLabelmapBuffers__WEBPACK_IMPORTED_MODULE_4__["getLabelmapBuffers"],
    activeLabelmapBuffer: _getLabelmapBuffers__WEBPACK_IMPORTED_MODULE_4__["getActiveLabelmapBuffer"],
    colorLUT: _colorLUT__WEBPACK_IMPORTED_MODULE_10__["getColorLUT"],
    colorForSegmentIndexColorLUT: _colorLUT__WEBPACK_IMPORTED_MODULE_10__["getColorForSegmentIndexColorLUT"]
  },
  setters: {
    metadata: _metadata__WEBPACK_IMPORTED_MODULE_0__["setMetadata"],
    labelmap3DForElement: _setLabelmap3D_js__WEBPACK_IMPORTED_MODULE_5__["setLabelmap3DForElement"],
    labelmap3DByFirstImageId: _setLabelmap3D_js__WEBPACK_IMPORTED_MODULE_5__["setLabelmap3DByFirstImageId"],
    incrementActiveSegmentIndex: _activeSegmentIndex__WEBPACK_IMPORTED_MODULE_2__["incrementActiveSegmentIndex"],
    decrementActiveSegmentIndex: _activeSegmentIndex__WEBPACK_IMPORTED_MODULE_2__["decrementActiveSegmentIndex"],
    activeSegmentIndex: _activeSegmentIndex__WEBPACK_IMPORTED_MODULE_2__["setActiveSegmentIndex"],
    toggleSegmentVisibility: _segmentVisibility_js__WEBPACK_IMPORTED_MODULE_3__["toggleSegmentVisibility"],
    updateSegmentsOnLabelmap2D: function updateSegmentsOnLabelmap2D(labelmap2D) {
      labelmap2D.segmentsOnLabelmap = Object(_getSegmentsOnPixeldata__WEBPACK_IMPORTED_MODULE_12__["default"])(labelmap2D.pixelData);
    },
    deleteSegment: _deleteSegment__WEBPACK_IMPORTED_MODULE_13__["default"],
    colorLUT: _colorLUT__WEBPACK_IMPORTED_MODULE_10__["default"],
    colorLUTIndexForLabelmap3D: _colorLUT__WEBPACK_IMPORTED_MODULE_10__["setColorLUTIndexForLabelmap3D"],
    colorForSegmentIndexOfColorLUT: _colorLUT__WEBPACK_IMPORTED_MODULE_10__["setColorForSegmentIndexOfColorLUT"],
    activeLabelmapIndex: _activeLabelmapIndex__WEBPACK_IMPORTED_MODULE_1__["setActiveLabelmapIndex"],
    radius: _setRadius__WEBPACK_IMPORTED_MODULE_17__["default"],
    pushState: _history__WEBPACK_IMPORTED_MODULE_16__["pushState"],
    undo: _history__WEBPACK_IMPORTED_MODULE_16__["undo"],
    redo: _history__WEBPACK_IMPORTED_MODULE_16__["redo"]
  }
});

/***/ }),

/***/ "./store/modules/segmentationModule/metadata.js":
/*!******************************************************!*\
  !*** ./store/modules/segmentationModule/metadata.js ***!
  \******************************************************/
/*! exports provided: getMetadata, setMetadata */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_590014__) {

"use strict";
__nested_webpack_require_590014__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_590014__.d(__nested_webpack_exports__, "getMetadata", function() { return getMetadata; });
/* harmony export (binding) */ __nested_webpack_require_590014__.d(__nested_webpack_exports__, "setMetadata", function() { return setMetadata; });
/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_590014__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js");
/* harmony import */ var _addLabelmap3D__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_590014__(/*! ./addLabelmap3D */ "./store/modules/segmentationModule/addLabelmap3D.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_590014__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_590014__(/*! ../../../externalModules */ "./externalModules.js");
/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_590014__(/*! ../../../util/logger */ "./util/logger.js");
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_590014__(/*! ./state */ "./store/modules/segmentationModule/state.js");






var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_4__["getLogger"])('store:modules:segmentationModule:metadata');
/**
 * GetMetadata - Returns the metadata object for a particular segment if
 * segmentIndex is specified, otherwise returns an array of all segment metadata
 * for the labelmap.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID   The cornerstone enabled
 *                                                    element or its UUID.
 * @param  {number} [labelmapIndex]    If undefined, defaults to the active
 *                                     labelmap index.
 * @param  {number} [segmentIndex]     The segment index.
 * @returns {Object|Object[]}          A metadata object or an array of
 *                                     metadata objects.
 */

function getMetadata(elementOrEnabledElementUID, labelmapIndex, segmentIndex) {
  var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID);

  if (!element) {
    return;
  }

  var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(element, 'stack');
  var stackData = stackState.data[0];
  var firstImageId = stackData.imageIds[0];
  var brushStackState = _state__WEBPACK_IMPORTED_MODULE_5__["default"].series[firstImageId];

  if (!brushStackState) {
    logger.warn("brushStackState is undefined");
    return;
  }

  labelmapIndex = labelmapIndex === undefined ? brushStackState.activeLabelmapIndex : labelmapIndex;

  if (!brushStackState.labelmaps3D[labelmapIndex]) {
    logger.warn("No labelmap3D of labelmap index ".concat(labelmapIndex, " on stack."));
    return;
  }

  var labelmap3D = brushStackState.labelmaps3D[labelmapIndex];

  if (segmentIndex === undefined) {
    return labelmap3D.metadata;
  }

  return labelmap3D.metadata[segmentIndex];
}
/**
 * SetMetadata - Sets the metadata object for a particular segment of a
 * `Labelmap3D`.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID   The cornerstone enabled
 *                                                    element or its UUID.
 * @param  {number} labelmapIndex = 0 The labelmap index.
 * @param  {number} segmentIndex      The segment index.
 * @param  {Object} metadata          The metadata object to set.
 * @returns {null}
 */


function setMetadata(elementOrEnabledElementUID) {
  var labelmapIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
  var segmentIndex = arguments.length > 2 ? arguments[2] : undefined;
  var metadata = arguments.length > 3 ? arguments[3] : undefined;
  var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID);

  if (!element) {
    return;
  }

  var cornerstone = _externalModules__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone;
  var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(element, 'stack');
  var stackData = stackState.data[0];
  var firstImageId = stackData.imageIds[0];
  var brushStackState = _state__WEBPACK_IMPORTED_MODULE_5__["default"].series[firstImageId];

  if (!brushStackState) {
    _state__WEBPACK_IMPORTED_MODULE_5__["default"].series[firstImageId] = {
      labelmapIndex: labelmapIndex,
      labelmaps3D: []
    };
    brushStackState = _state__WEBPACK_IMPORTED_MODULE_5__["default"].series[firstImageId];
  }

  if (!brushStackState.labelmaps3D[labelmapIndex]) {
    var enabledElement = cornerstone.getEnabledElement(element);
    var _enabledElement$image = enabledElement.image,
        rows = _enabledElement$image.rows,
        columns = _enabledElement$image.columns;
    var numberOfFrames = stackData.imageIds.length;
    var size = rows * columns * numberOfFrames;
    Object(_addLabelmap3D__WEBPACK_IMPORTED_MODULE_1__["default"])(brushStackState, labelmapIndex, size);
  }

  var labelmap3D = brushStackState.labelmaps3D[labelmapIndex];
  labelmap3D.metadata[segmentIndex] = metadata;
}



/***/ }),

/***/ "./store/modules/segmentationModule/segmentVisibility.js":
/*!***************************************************************!*\
  !*** ./store/modules/segmentationModule/segmentVisibility.js ***!
  \***************************************************************/
/*! exports provided: isSegmentVisible, toggleSegmentVisibility */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_595664__) {

"use strict";
__nested_webpack_require_595664__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_595664__.d(__nested_webpack_exports__, "isSegmentVisible", function() { return isSegmentVisible; });
/* harmony export (binding) */ __nested_webpack_require_595664__.d(__nested_webpack_exports__, "toggleSegmentVisibility", function() { return toggleSegmentVisibility; });
/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_595664__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_595664__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_595664__(/*! ./state */ "./store/modules/segmentationModule/state.js");
/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_595664__(/*! ../../../util/logger */ "./util/logger.js");




var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('store:modules:segmentationModule:segmentVisibility');
/**
 * Returns if a segment is visible.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID   The cornerstone enabled
 *                                                    element or its UUID.
 * @param  {number} segmentIndex     The segment index.
 * @param  {number} [labelmapIndex]    If undefined, defaults to the active
 *                                     labelmap index.
 * @returns {boolean} True if the segment is visible.
 */

function isSegmentVisible(elementOrEnabledElementUID, segmentIndex, labelmapIndex) {
  if (!segmentIndex) {
    return;
  }

  var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID);

  if (!element) {
    return;
  }

  var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack');
  var stackData = stackState.data[0];
  var firstImageId = stackData.imageIds[0];
  var brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId];

  if (!brushStackState) {
    logger.warn("brushStackState is undefined");
    return;
  }

  labelmapIndex = labelmapIndex === undefined ? brushStackState.activeLabelmapIndex : labelmapIndex;

  if (!brushStackState.labelmaps3D[labelmapIndex]) {
    logger.warn("No labelmap3D of labelmap index ".concat(labelmapIndex, " on stack."));
    return;
  }

  var labelmap3D = brushStackState.labelmaps3D[labelmapIndex];
  var visible = !labelmap3D.segmentsHidden[segmentIndex];
  return visible;
}
/**
 * Toggles the visability of a segment.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID   The cornerstone enabled
 *                                                    element or its UUID.
 * @param  {number} segmentIndex     The segment index.
 * @param  {number} [labelmapIndex]    If undefined, defaults to the active
 *                                     labelmap index.
 * @returns {boolean} True if the segment is now visible.
 */


function toggleSegmentVisibility(elementOrEnabledElementUID, segmentIndex, labelmapIndex) {
  if (!segmentIndex) {
    return;
  }

  var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID);

  if (!element) {
    return;
  }

  var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack');
  var stackData = stackState.data[0];
  var firstImageId = stackData.imageIds[0];
  var brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId];

  if (!brushStackState) {
    logger.warn("brushStackState is undefined");
    return;
  }

  labelmapIndex = labelmapIndex === undefined ? brushStackState.activeLabelmapIndex : labelmapIndex;

  if (!brushStackState.labelmaps3D[labelmapIndex]) {
    logger.warn("No labelmap3D of labelmap index ".concat(labelmapIndex, " on stack."));
    return;
  }

  var labelmap3D = brushStackState.labelmaps3D[labelmapIndex];
  var segmentsHidden = labelmap3D.segmentsHidden;
  segmentsHidden[segmentIndex] = !segmentsHidden[segmentIndex];
  return !segmentsHidden[segmentIndex];
}



/***/ }),

/***/ "./store/modules/segmentationModule/setLabelmap3D.js":
/*!***********************************************************!*\
  !*** ./store/modules/segmentationModule/setLabelmap3D.js ***!
  \***********************************************************/
/*! exports provided: setLabelmap3DByFirstImageId, setLabelmap3DForElement */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_600296__) {

"use strict";
__nested_webpack_require_600296__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_600296__.d(__nested_webpack_exports__, "setLabelmap3DByFirstImageId", function() { return setLabelmap3DByFirstImageId; });
/* harmony export (binding) */ __nested_webpack_require_600296__.d(__nested_webpack_exports__, "setLabelmap3DForElement", function() { return setLabelmap3DForElement; });
/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_600296__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_600296__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_600296__(/*! ./state */ "./store/modules/segmentationModule/state.js");
/* harmony import */ var _getSegmentsOnPixeldata__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_600296__(/*! ./getSegmentsOnPixeldata */ "./store/modules/segmentationModule/getSegmentsOnPixeldata.js");
/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_600296__(/*! ../../../util/segmentation */ "./util/segmentation/index.js");
/* harmony import */ var _arrayTypes__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_600296__(/*! ./arrayTypes */ "./store/modules/segmentationModule/arrayTypes.js");
/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_600296__(/*! ../../index.js */ "./store/index.js");







var UINT_16_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_5__["default"].UINT_16_ARRAY,
    FLOAT_32_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_5__["default"].FLOAT_32_ARRAY;
/**
 * Takes a 16-bit encoded `ArrayBuffer` and stores it as a `Labelmap3D` for the
 * `BrushStackState` associated with the element.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID The cornerstone
 *                                                  enabled element or its UUID.
 * @param  {ArrayBuffer} buffer
 * @param  {number} labelmapIndex The index to store the labelmap under.
 * @param  {Object[]} metadata = [] Any metadata about the segments.
 * @param  {number[][]} [segmentsOnLabelmapArray] An array of array of segments on each imageIdIndex.
 *                       If not present, is calculated.
 * @param  {colorLUTIndex} [colorLUTIndex = 0] The index of the colorLUT to use to render the segmentation.
 * @returns {null}
 */

function setLabelmap3DForElement(elementOrEnabledElementUID, buffer, labelmapIndex) {
  var metadata = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
  var segmentsOnLabelmapArray = arguments.length > 4 ? arguments[4] : undefined;
  var colorLUTIndex = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
  var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID);

  if (!element) {
    return;
  }

  var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack');
  var numberOfFrames = stackState.data[0].imageIds.length;
  var firstImageId = stackState.data[0].imageIds[0];
  setLabelmap3DByFirstImageId(firstImageId, buffer, labelmapIndex, metadata, numberOfFrames, segmentsOnLabelmapArray, colorLUTIndex);
  Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_4__["triggerLabelmapModifiedEvent"])(element, labelmapIndex);
}
/**
 * Takes an 16-bit encoded `ArrayBuffer` and stores it as a `Labelmap3D` for
 * the `BrushStackState` associated with the firstImageId.
 *
 * @param  {HTMLElement|string} firstImageId  The firstImageId of the series to
 *                                            store the segmentation on.
 * @param  {ArrayBuffer} buffer
 * @param  {number} labelmapIndex The index to store the labelmap under.
 * @param  {Object[]} metadata = [] Any metadata about the segments.
 * @param  {number} numberOfFrames The number of frames, required to set up the
 *                                 relevant labelmap2D views.
 * @param  {number[][]} [segmentsOnLabelmapArray] An array of array of segments on each imageIdIndex.
 *                       If not present, is calculated.
 * @param  {colorLUTIndex} [colorLUTIndex = 0] The index of the colorLUT to use to render the segmentation.
 * @returns {null}
 */


function setLabelmap3DByFirstImageId(firstImageId, buffer, labelmapIndex) {
  var metadata = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
  var numberOfFrames = arguments.length > 4 ? arguments[4] : undefined;
  var segmentsOnLabelmapArray = arguments.length > 5 ? arguments[5] : undefined;
  var colorLUTIndex = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;

  var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_6__["getModule"])('segmentation'),
      configuration = _getModule.configuration;

  var brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId];

  if (!brushStackState) {
    _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId] = {
      activeLabelmapIndex: labelmapIndex,
      labelmaps3D: []
    };
    brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId];
  }

  brushStackState.labelmaps3D[labelmapIndex] = {
    buffer: buffer,
    labelmaps2D: [],
    metadata: metadata,
    activeSegmentIndex: 1,
    colorLUTIndex: colorLUTIndex,
    segmentsHidden: [],
    undo: [],
    redo: []
  };
  var labelmaps2D = brushStackState.labelmaps3D[labelmapIndex].labelmaps2D;
  var slicelengthInBytes = buffer.byteLength / numberOfFrames;

  for (var i = 0; i < numberOfFrames; i++) {
    var pixelData = void 0;

    switch (configuration.arrayType) {
      case UINT_16_ARRAY:
        pixelData = new Uint16Array(buffer, slicelengthInBytes * i, // 2 bytes/voxel
        slicelengthInBytes / 2);
        break;

      case FLOAT_32_ARRAY:
        pixelData = new Float32Array(buffer, slicelengthInBytes * i, slicelengthInBytes / 4);
        break;

      default:
        throw new Error("Unsupported Array Type ".concat(configuration.arrayType));
    }

    var segmentsOnLabelmap = segmentsOnLabelmapArray ? segmentsOnLabelmapArray[i] : Object(_getSegmentsOnPixeldata__WEBPACK_IMPORTED_MODULE_3__["default"])(pixelData);

    if (segmentsOnLabelmap && segmentsOnLabelmap.some(function (segment) {
      return segment;
    })) {
      labelmaps2D[i] = {
        pixelData: pixelData,
        segmentsOnLabelmap: segmentsOnLabelmap
      };
    }
  }
}



/***/ }),

/***/ "./store/modules/segmentationModule/setRadius.js":
/*!*******************************************************!*\
  !*** ./store/modules/segmentationModule/setRadius.js ***!
  \*******************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_607182__) {

"use strict";
__nested_webpack_require_607182__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_607182__.d(__nested_webpack_exports__, "default", function() { return setRadius; });
/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_607182__(/*! ../../index */ "./store/index.js");

function setRadius(newRadius) {
  var _getModule = Object(_index__WEBPACK_IMPORTED_MODULE_0__["getModule"])('segmentation'),
      configuration = _getModule.configuration;

  configuration.radius = Math.min(Math.max(newRadius, configuration.minRadius), configuration.maxRadius);
}

/***/ }),

/***/ "./store/modules/segmentationModule/state.js":
/*!***************************************************!*\
  !*** ./store/modules/segmentationModule/state.js ***!
  \***************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_608103__) {

"use strict";
__nested_webpack_require_608103__.r(__nested_webpack_exports__);
// Internal state of the brush module.
var state = {
  series: {},
  colorLutTables: []
};
/* harmony default export */ __nested_webpack_exports__["default"] = (state);

/***/ }),

/***/ "./store/removeTool.js":
/*!*****************************!*\
  !*** ./store/removeTool.js ***!
  \*****************************/
/*! exports provided: removeTool, removeToolForElement */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_608597__) {

"use strict";
__nested_webpack_require_608597__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_608597__.d(__nested_webpack_exports__, "removeTool", function() { return removeTool; });
/* harmony export (binding) */ __nested_webpack_require_608597__.d(__nested_webpack_exports__, "removeToolForElement", function() { return removeToolForElement; });
/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_608597__(/*! ./index.js */ "./store/index.js");

/**
 * Deactivates and removes the tool from the target element with the provided name
 *
 * @export
 * @public
 * @method
 * @name removeToolForElement
 * @param {HTMLElement} element The element.
 * @param {string} toolName The name of the tool.
 * @returns {void}
 */

var removeToolForElement = function removeToolForElement(element, toolName) {
  var toolIndex = _index_js__WEBPACK_IMPORTED_MODULE_0__["default"].state.tools.findIndex(function (tool) {
    return tool.element === element && tool.name === toolName;
  });

  if (toolIndex >= 0) {
    _index_js__WEBPACK_IMPORTED_MODULE_0__["default"].state.tools.splice(toolIndex, 1);
  }
};
/**
 * Removes all tools from all enabled elements with the provided name.
 *
 * @export
 * @public
 * @method
 * @name removeTool
 * @param {string} toolName The name of the tool.
 * @returns {void}
 */


var removeTool = function removeTool(toolName) {
  _removeToolGlobally(toolName);

  _index_js__WEBPACK_IMPORTED_MODULE_0__["default"].state.enabledElements.forEach(function (element) {
    removeToolForElement(element, toolName);
  });
};
/**
 * Removes tool with matching name from globally registered tools.
 * Requires `globalToolSyncEnabled` to be set to true
 *
 * @private
 * @method
 * @name removeToolGlobally
 * @param {string} toolName The name of the tool to remove.
 * @returns {void}
 */


var _removeToolGlobally = function _removeToolGlobally(toolName) {
  var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_0__["getModule"])('globalConfiguration'),
      configuration = _getModule.configuration;

  if (!configuration.globalToolSyncEnabled) {
    return;
  }

  if (_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].state.globalTools[toolName]) {
    delete _index_js__WEBPACK_IMPORTED_MODULE_0__["default"].state.globalTools[toolName];
  }
};



/***/ }),

/***/ "./store/setToolCursor.js":
/*!********************************!*\
  !*** ./store/setToolCursor.js ***!
  \********************************/
/*! exports provided: setToolCursor, resetToolCursor, hideToolCursor */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_611174__) {

"use strict";
__nested_webpack_require_611174__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_611174__.d(__nested_webpack_exports__, "setToolCursor", function() { return setToolCursor; });
/* harmony export (binding) */ __nested_webpack_require_611174__.d(__nested_webpack_exports__, "resetToolCursor", function() { return resetToolCursor; });
/* harmony export (binding) */ __nested_webpack_require_611174__.d(__nested_webpack_exports__, "hideToolCursor", function() { return hideToolCursor; });
/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_611174__(/*! ./index.js */ "./store/index.js");


var globalConfiguration = _index_js__WEBPACK_IMPORTED_MODULE_0__["modules"].globalConfiguration;
/**
 * Creates an SVG Cursor for the target element
 *
 * @param {HTMLElement} element - The DOM Element to draw on
 * @param {MouseCursor} svgCursor - The cursor.
 * @returns {void}
 */

function setToolCursor(element, svgCursor) {
  if (!globalConfiguration.configuration.showSVGCursors) {
    return;
  } // TODO: (state vs options) Exit if cursor wasn't updated
  // TODO: Exit if invalid options to create cursor
  // Note: Max size of an SVG cursor is 128x128, default is 32x32.


  var cursorBlob = svgCursor.getIconWithPointerSVG();
  var mousePoint = svgCursor.mousePoint;
  var svgCursorUrl = window.URL.createObjectURL(cursorBlob);
  element.style.cursor = "url('".concat(svgCursorUrl, "') ").concat(mousePoint, ", auto");
  _index_js__WEBPACK_IMPORTED_MODULE_0__["state"].svgCursorUrl = svgCursorUrl;
}

function resetToolCursor(element) {
  _clearStateAndSetCursor(element, 'initial');
}

function hideToolCursor(element) {
  if (!globalConfiguration.configuration.showSVGCursors) {
    return;
  }

  _clearStateAndSetCursor(element, 'none');
}

function _clearStateAndSetCursor(element, cursorSeting) {
  if (_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].svgCursorUrl) {
    window.URL.revokeObjectURL(_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].svgCursorUrl);
  }

  _index_js__WEBPACK_IMPORTED_MODULE_0__["state"].svgCursorUrl = null;
  element.style.cursor = cursorSeting;
}

/***/ }),

/***/ "./store/setToolMode.js":
/*!******************************!*\
  !*** ./store/setToolMode.js ***!
  \******************************/
/*! exports provided: setToolActive, setToolActiveForElement, setToolDisabled, setToolDisabledForElement, setToolEnabled, setToolEnabledForElement, setToolPassive, setToolPassiveForElement, setToolMode, setToolModeForElement, _getNormalizedOptions, _mergeMouseButtonMask */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_613745__) {

"use strict";
__nested_webpack_require_613745__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_613745__.d(__nested_webpack_exports__, "setToolActive", function() { return setToolActive; });
/* harmony export (binding) */ __nested_webpack_require_613745__.d(__nested_webpack_exports__, "setToolActiveForElement", function() { return setToolActiveForElement; });
/* harmony export (binding) */ __nested_webpack_require_613745__.d(__nested_webpack_exports__, "setToolDisabled", function() { return setToolDisabled; });
/* harmony export (binding) */ __nested_webpack_require_613745__.d(__nested_webpack_exports__, "setToolDisabledForElement", function() { return setToolDisabledForElement; });
/* harmony export (binding) */ __nested_webpack_require_613745__.d(__nested_webpack_exports__, "setToolEnabled", function() { return setToolEnabled; });
/* harmony export (binding) */ __nested_webpack_require_613745__.d(__nested_webpack_exports__, "setToolEnabledForElement", function() { return setToolEnabledForElement; });
/* harmony export (binding) */ __nested_webpack_require_613745__.d(__nested_webpack_exports__, "setToolPassive", function() { return setToolPassive; });
/* harmony export (binding) */ __nested_webpack_require_613745__.d(__nested_webpack_exports__, "setToolPassiveForElement", function() { return setToolPassiveForElement; });
/* harmony export (binding) */ __nested_webpack_require_613745__.d(__nested_webpack_exports__, "setToolMode", function() { return setToolMode; });
/* harmony export (binding) */ __nested_webpack_require_613745__.d(__nested_webpack_exports__, "setToolModeForElement", function() { return setToolModeForElement; });
/* harmony export (binding) */ __nested_webpack_require_613745__.d(__nested_webpack_exports__, "_getNormalizedOptions", function() { return _getNormalizedOptions; });
/* harmony export (binding) */ __nested_webpack_require_613745__.d(__nested_webpack_exports__, "_mergeMouseButtonMask", function() { return _mergeMouseButtonMask; });
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_613745__(/*! ./../events.js */ "./events.js");
/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_613745__(/*! ./../util/triggerEvent.js */ "./util/triggerEvent.js");
/* harmony import */ var _getToolForElement_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_613745__(/*! ./getToolForElement.js */ "./store/getToolForElement.js");
/* harmony import */ var _setToolCursor_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_613745__(/*! ./setToolCursor.js */ "./store/setToolCursor.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_613745__(/*! ../util/logger.js */ "./util/logger.js");
/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_613745__(/*! ./index.js */ "./store/index.js");






var globalConfiguration = Object(_index_js__WEBPACK_IMPORTED_MODULE_5__["getModule"])('globalConfiguration');
var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_4__["getLogger"])('store:setToolMode');
/**
 * Sets a tool's state, with the provided toolName and element, to 'active'. Active tools are rendered,
 * respond to user input, and can create new data.
 *
 * @public
 * @function setToolActiveForElement
 * @memberof CornerstoneTools
 *
 * @example <caption>Setting a tool 'active' for a specific interaction type.</caption>
 * // Sets length tool to Active
 * setToolActiveForElement(element, 'Length', {
 *   mouseButtonMask: 1
 * }, ['Mouse'])
 * @example <caption>Setting a tool 'active' for all interaction types.</caption>
 * // Sets length tool to Active
 * setToolActiveForElement(element, 'Length', {
 *   mouseButtonMask: 1
 * })
 * @param {HTMLElement} element
 * @param {string} toolName
 * @param {(Object|string[]|number)} options
 * @param {(string[])} interactionTypes
 * @returns {undefined}
 */

var setToolActiveForElement = function setToolActiveForElement(element, toolName, options, interactionTypes) {
  // If interactionTypes was passed in via options
  if (interactionTypes === undefined && Array.isArray(options)) {
    interactionTypes = options;
    options = null;
  }

  var tool = Object(_getToolForElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element, toolName);

  if (tool) {
    _resolveInputConflicts(element, tool, options, interactionTypes); // Iterate over specific interaction types and set active
    // This is used as a secondary check on active tools to find the active "parts" of the tool


    tool.supportedInteractionTypes.forEach(function (interactionType) {
      if (interactionTypes === undefined || interactionTypes.includes(interactionType)) {
        options["is".concat(interactionType, "Active")] = true;
      } else {
        options["is".concat(interactionType, "Active")] = false;
      }
    });

    if (globalConfiguration.configuration.showSVGCursors && tool.supportedInteractionTypes.includes('Mouse')) {
      _setToolCursorIfPrimary(element, options, tool);
    }
  } // Resume normal behavior


  setToolModeForElement('active', null, element, toolName, options);
};

function _setToolCursorIfPrimary(element, options, tool) {
  var mouseButtonMask;

  if (typeof options === 'number') {
    mouseButtonMask = [options];
  } else {
    mouseButtonMask = options.mouseButtonMask;
  }

  if (mouseButtonMask.includes(1)) {
    if (tool.svgCursor) {
      Object(_setToolCursor_js__WEBPACK_IMPORTED_MODULE_3__["setToolCursor"])(tool.element, tool.svgCursor);
    } else if (tool.hideDefaultCursor) {
      Object(_setToolCursor_js__WEBPACK_IMPORTED_MODULE_3__["hideToolCursor"])(element);
    } else {
      Object(_setToolCursor_js__WEBPACK_IMPORTED_MODULE_3__["resetToolCursor"])(element);
    }
  }
}
/**
 * Sets all tool's state, with the provided toolName, to 'active'. Active tools are rendered,
 * respond to user input, and can create new data.
 * @public
 * @function setToolActive
 * @memberof CornerstoneTools
 *
 * @param {string} toolName
 * @param {(Object|string[]|number)} options
 * @param {(string[])} interactionTypes
 * @returns {undefined}
 */


var setToolActive = function setToolActive(toolName, options, interactionTypes) {
  _trackGlobalToolModeChange('active', toolName, options, interactionTypes);

  _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.enabledElements.forEach(function (element) {
    setToolActiveForElement(element, toolName, options, interactionTypes);
  });
};
/**
 * Sets a tool's state, with the provided toolName and element, to 'disabled'. Disabled tools are not rendered,
 * and do not respond to user input
 * @public
 * @function setToolDisabledForElement
 * @memberof CornerstoneTools
 *
 * @param {HTMLElement} element
 * @param {string} toolName
 * @param {(Object|number)} options
 * @returns {undefined}
 */


var setToolDisabledForElement = setToolModeForElement.bind(null, 'disabled', null);
/**
 * Sets all tool's state, with the provided toolName, to 'disabled'. Disabled tools are not rendered,
 * and do not respond to user input
 * @public
 * @function setToolDisabled
 * @memberof CornerstoneTools
 *
 * @param {string} toolName
 * @param {(Object|number)} options
 * @returns {undefined}
 */

var setToolDisabled = setToolMode.bind(null, 'disabled', null);
/**
 * Sets a tool's state, with the provided toolName and element, to 'enabled'. Enabled tools are rendered,
 * but do not respond to user input
 * @public
 * @function setToolEnabledForElement
 * @memberof CornerstoneTools
 *
 * @param {HTMLElement} element
 * @param {string} toolName
 * @param {(Object|number)} options
 * @returns {undefined}
 */

var setToolEnabledForElement = setToolModeForElement.bind(null, 'enabled', null);
/**
 * Sets all tool's state, with the provided toolName, to 'enabled'. Enabled tools are rendered,
 * but do not respond to user input
 * @public
 * @function setToolEnabled
 * @memberof CornerstoneTools
 *
 * @param {string} toolName
 * @param {(Object|number)} options
 * @returns {undefined}
 */

var setToolEnabled = setToolMode.bind(null, 'enabled', null);
/**
 * Sets a tool's state, with the provided toolName and element, to 'passive'. Passive tools are rendered and respond to user input,
 * but do not create new measurements or annotations.
 * @public
 * @function setToolPassiveForElement
 * @memberof CornerstoneTools
 *
 * @param {HTMLElement} element
 * @param {string} toolName
 * @param {(Object|number)} options
 * @returns {undefined}
 */

var setToolPassiveForElement = setToolModeForElement.bind(null, 'passive', _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOOL_DEACTIVATED);
/**
 * Sets all tool's state, with the provided toolName, to 'passive'. Passive tools are rendered and respond to user input,
 * but do not create new measurements or annotations.
 * @public
 * @function setToolPassive
 * @memberof CornerstoneTools
 *
 * @param {string} toolName
 * @param {(Object|number)} options
 * @returns {undefined}
 */

var setToolPassive = setToolMode.bind(null, 'passive', _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOOL_DEACTIVATED);
/**
 * An internal method that helps make sure we change tool mode in a consistent
 * way
 * @private
 * @function setToolModeForElement
 *
 * @param {string} mode
 * @param {string} changeEvent
 * @param {HTMLElement} element
 * @param {string} toolName
 * @param {(Object|number[]|number)} options
 * @returns {undefined}
 */

function setToolModeForElement(mode, changeEvent, element, toolName, options) {
  var tool = Object(_getToolForElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element, toolName);

  if (!tool) {
    logger.warn('Unable to find tool "%s" for enabledElement', toolName);
    return;
  }

  options = _getNormalizedOptions(options); // Keep the same if not an array (undefined)
  // Reset if empty array
  // Merge if array contains any bindings

  if (Array.isArray(options.mouseButtonMask) && options.mouseButtonMask.length !== 0 && Array.isArray(tool.options.mouseButtonMask)) {
    options.mouseButtonMask = _mergeMouseButtonMask(options.mouseButtonMask, tool.options.mouseButtonMask);
  } // Set mode & options


  tool.mode = mode;
  tool.mergeOptions(options); // Call tool's hook for this event, if one exists

  if (tool["".concat(mode, "Callback")]) {
    tool["".concat(mode, "Callback")](element, options);
  } // Emit event indicating tool state change


  if (changeEvent) {
    var statusChangeEventData = {
      options: options,
      toolName: toolName,
      toolType: toolName,
      // Deprecation notice: toolType will be replaced by toolName
      type: changeEvent
    };
    Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, changeEvent, statusChangeEventData);
  } // Trigger Update
  // Todo: don't error out if image hasn't been loaded...
  // Cornerstone.updateImage(element);

}
/**
 * A helper/quick way to set a tool's mode for all canvases
 *
 * @private
 * @function setToolMode
 *
 * @param {string} mode
 * @param {string} changeEvent
 * @param {string} toolName
 * @param {(Object|number)} options
 * @returns {undefined}
 */


function setToolMode(mode, changeEvent, toolName, options) {
  _trackGlobalToolModeChange(mode, toolName, options);

  _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.enabledElements.forEach(function (element) {
    setToolModeForElement(mode, changeEvent, element, toolName, options);
  });
}
/**
 * Find tool's that conflict with the incoming tool's mouse/touch bindings and
 * resolve those conflicts.
 *
 * @private
 * @function _resolveInputConflicts
 *
 * @param {HTMLElement} element
 * @param {Object} tool
 * @param {(Object|number)} options
 * @param {(Array)} interactionTypes
 * @returns {undefined}
 */


function _resolveInputConflicts(element, tool, options, interactionTypes) {
  // Iterate over the interaction types our tool supports.
  // For each one we intend to activate, check for potential conflicts
  // And resolve them
  tool.supportedInteractionTypes.forEach(function (interactionType) {
    if (interactionTypes === undefined || interactionTypes.includes(interactionType)) {
      var inputResolver = _inputResolvers[interactionType];

      if (inputResolver) {
        inputResolver(tool, element, options);
      } else {
        logger.warn('Unable to resolve input conflicts for type %s', interactionType);
      }
    }
  });
  var activeToolsForElement = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.tools.filter(function (t) {
    return t.element === element && t.mode === 'active' && t.supportedInteractionTypes.length > 0;
  });
  activeToolsForElement.forEach(function (t) {
    var toolHasAnyActiveInteractionType = false;
    t.supportedInteractionTypes.forEach(function (interactionType) {
      if (t.options["is".concat(interactionType, "Active")]) {
        toolHasAnyActiveInteractionType = true;
      }
    });

    if (!toolHasAnyActiveInteractionType) {
      logger.log("Setting tool %s's to PASSIVE", t.name);
      setToolPassiveForElement(element, t.name);
    }
  });
}
/**
 * Resolves conflicting active tools when activating a tool for mouse interaction
 * @private
 * @function _resolveMouseInputConflicts
 *
 * @param {Object} tool
 * @param {HTMLElement} element
 * @param {(Object|number)} options
 * @returns {undefined}
 */


function _resolveMouseInputConflicts(tool, element, options) {
  var mouseButtonMask = _getNormalizedOptions(options).mouseButtonMask;

  var hasMouseButtonMask = Array.isArray(mouseButtonMask) && mouseButtonMask.length > 0;

  if (!hasMouseButtonMask) {
    return;
  }

  var activeToolWithMatchingMouseButtonMask = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.tools.find(function (t) {
    return t.element === element && t.mode === 'active' && t.options.isMouseActive === true && Array.isArray(t.options.mouseButtonMask) && t.options.mouseButtonMask.some(function (v) {
      return mouseButtonMask.includes(v);
    });
  });

  if (activeToolWithMatchingMouseButtonMask) {
    // Remove collissions
    activeToolWithMatchingMouseButtonMask.options.mouseButtonMask = activeToolWithMatchingMouseButtonMask.options.mouseButtonMask.filter(function (mask) {
      return !mouseButtonMask.includes(mask);
    }); // If no remaining bindings, set inactive

    if (activeToolWithMatchingMouseButtonMask.options.mouseButtonMask.length === 0) {
      activeToolWithMatchingMouseButtonMask.options.isMouseActive = false;
    }
  }
}
/**
 * Resolves conflicting active tools when activating a tool for touch interaction
 * @private
 * @function _resolveTouchInputConflicts
 *
 * @param {Object} tool
 * @param {HTMLElement} element
 * @returns {undefined}
 */


function _resolveTouchInputConflicts(tool, element) {
  var activeTouchTool = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.tools.find(function (t) {
    return t.element === element && t.mode === 'active' && t.options.isTouchActive === true;
  });
  var activeMultiTouchToolWithOneTouchPointer = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.tools.find(function (t) {
    return t.element === element && t.mode === 'active' && t.options.isMultiTouchActive === true && t.configuration.touchPointers === 1;
  });

  if (activeTouchTool) {
    logger.log("Setting tool %s's isTouchActive to false", activeTouchTool.name);
    activeTouchTool.options.isTouchActive = false;
  }

  if (activeMultiTouchToolWithOneTouchPointer) {
    logger.log("Setting tool %s's isTouchActive to false", activeMultiTouchToolWithOneTouchPointer.name);
    activeMultiTouchToolWithOneTouchPointer.options.isMultiTouchActive = false;
  }
}
/**
 * Resolves conflicting active tools when activating a tool for MultiTouch interaction
 * @private
 * @function _resolveMultiTouchInputConflicts
 *
 * @param {Object} tool
 * @param {HTMLElement} element
 * @returns {undefined}
 */


function _resolveMultiTouchInputConflicts(tool, element) {
  var activeMultiTouchTool = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.tools.find(function (t) {
    return t.element === element && t.mode === 'active' && t.options.isMultiTouchActive === true && t.configuration.touchPointers === tool.configuration.touchPointers;
  });
  var activeTouchTool;

  if (tool.configuration.touchPointers === 1) {
    activeTouchTool = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.tools.find(function (t) {
      return t.element === element && t.mode === 'active' && t.options.isTouchActive === true;
    });
  }

  if (activeMultiTouchTool) {
    logger.log("Setting tool %s's isMultiTouchActive to false", activeMultiTouchTool.name);
    activeMultiTouchTool.options.isMultiTouchActive = false;
  }

  if (activeTouchTool) {
    logger.log("Setting tool %s's isTouchActive to false", activeTouchTool.name);
    activeTouchTool.options.isTouchActive = false;
  }
}
/**
 * If the incoming tool isTouchActive, find any conflicting tools
 * and set their isTouchActive to false to avoid conflicts.
 *
 * @private
 * @function _resolveGenericInputConflicts
 *
 * @param {string} interactionType
 * @param {Object} tool
 * @param {HTMLElement} element
 * @param {(Object|number)} options
 * @returns {undefined}
 */


function _resolveGenericInputConflicts(interactionType, tool, element) {
  var interactionTypeFlag = "is".concat(interactionType, "Active");
  var activeToolWithActiveInteractionType = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.tools.find(function (t) {
    return t.element === element && t.mode === 'active' && t.options[interactionTypeFlag] === true;
  });

  if (activeToolWithActiveInteractionType) {
    logger.log("Setting tool %s's %s to false", activeToolWithActiveInteractionType.name, interactionTypeFlag);
    activeToolWithActiveInteractionType.options[interactionTypeFlag] = false;
  }
}

function _trackGlobalToolModeChange(mode, toolName, options, interactionTypes) {
  if (!globalConfiguration.configuration.globalToolSyncEnabled) {
    return;
  } // Update Tool History


  var historyEvent = {
    mode: mode,
    args: [toolName, options]
  };

  if (interactionTypes) {
    historyEvent.push(interactionTypes);
  }

  _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.globalToolChangeHistory.push(historyEvent);
  var arbitraryChangeHistoryLimit = 50;

  if (_index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.globalToolChangeHistory.length > arbitraryChangeHistoryLimit) {
    _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.globalToolChangeHistory.shift();
  } // Update ActiveBindings Array


  var globalTool = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.globalTools[toolName];

  if (!globalTool) {
    logger.warn("setToolMode call for tool not available globally: ".concat(toolName));
    return;
  }

  if (mode === 'active') {
    var stringBindings = _determineStringBindings(toolName, options, interactionTypes); // Remove the incoming bindings from all global tools


    Object.keys(_index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.globalTools).forEach(function (key) {
      var tool = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.globalTools[key];
      tool.activeBindings = tool.activeBindings.filter(function (binding) {
        return !stringBindings.includes(binding);
      });
    }); // @HACK: Clear mouse bindings

    if (stringBindings.some(function (binding) {
      return binding.includes('Mouse-DELETE');
    })) {
      globalTool.activeBindings = globalTool.activeBindings.filter(function (binding) {
        return !binding.includes('Mouse');
      });
      stringBindings = stringBindings.filter(function (binding) {
        return !binding.includes('Mouse');
      });
    }

    globalTool.activeBindings = globalTool.activeBindings.concat(stringBindings);
  } else {
    globalTool.activeBindings = [];
  }
}

function _determineStringBindings(toolName, options, interactionTypes) {
  if (interactionTypes === undefined && Array.isArray(options)) {
    interactionTypes = options;
    options = null;
  }

  var stringBindings = [];
  var globalTool = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.globalTools[toolName];

  if (globalTool) {
    // eslint-disable-next-line new-cap
    var tool = new globalTool.tool(globalTool.props);
    tool.supportedInteractionTypes.forEach(function (interactionType) {
      if (interactionTypes === undefined || interactionTypes.includes(interactionType)) {
        if (interactionType === 'Mouse') {
          var mouseButtonMasks = _getNormalizedOptions(options).mouseButtonMask; // Add or delete


          if (Array.isArray(mouseButtonMasks) && mouseButtonMasks.length > 0) {
            mouseButtonMasks.forEach(function (mask) {
              return stringBindings.push("".concat(interactionType, "-").concat(mask));
            });
          } else if (Array.isArray(mouseButtonMasks) && mouseButtonMasks.length === 0) {
            stringBindings.push("".concat(interactionType, "-DELETE"));
          }
        } else if (interactionType === 'MultiTouch') {
          stringBindings.push("".concat(interactionType, "-").concat(tool.configuration.touchPointers));
        } else {
          stringBindings.push(interactionType);
        }
      }
    });
  }

  return stringBindings;
}

var _inputResolvers = {
  Mouse: _resolveMouseInputConflicts,
  MouseWheel: _resolveGenericInputConflicts.bind(undefined, 'MouseWheel'),
  Touch: _resolveTouchInputConflicts,
  TouchPinch: _resolveGenericInputConflicts.bind(undefined, 'TouchPinch'),
  TouchRotate: _resolveGenericInputConflicts.bind(undefined, 'TouchRotate'),
  DoubleTap: _resolveGenericInputConflicts.bind(undefined, 'DoubleTap'),
  MultiTouch: _resolveMultiTouchInputConflicts
};

function _getNormalizedOptions(options) {
  if (Array.isArray(options)) {
    // If options is an array assume the array is the mouseButtonMask array
    options = {
      mouseButtonMask: options
    };
  } else if (options !== Object(options)) {
    // And if it's something other than an object, assume options is
    // a single mouseButtonMask
    options = {
      mouseButtonMask: [options]
    };
  } // If there is still no 'mouseButtonMask' default it to an empty array


  if (!options.hasOwnProperty('mouseButtonMask')) {
    options.mouseButtonMask = [];
  }

  if (!Array.isArray(options.mouseButtonMask)) {
    options.mouseButtonMask = [options.mouseButtonMask];
  } // Now filter out anything that is not an number or is the number 0


  options.mouseButtonMask = options.mouseButtonMask.filter(function (o) {
    return typeof o === 'number' && o !== 0;
  });
  return options;
}

function _mergeMouseButtonMask(newMask, oldMask) {
  // Merges and removes duplicates
  return newMask.concat(oldMask).reduce(function (acc, m) {
    if (acc.indexOf(m) === -1) {
      acc.push(m);
    }

    return acc;
  }, []);
}



/***/ }),

/***/ "./store/setToolOptions.js":
/*!*********************************!*\
  !*** ./store/setToolOptions.js ***!
  \*********************************/
/*! exports provided: setToolOptions, setToolOptionsForElement */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_636654__) {

"use strict";
__nested_webpack_require_636654__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_636654__.d(__nested_webpack_exports__, "setToolOptions", function() { return setToolOptions; });
/* harmony export (binding) */ __nested_webpack_require_636654__.d(__nested_webpack_exports__, "setToolOptionsForElement", function() { return setToolOptionsForElement; });
/* harmony import */ var _getToolForElement_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_636654__(/*! ./getToolForElement.js */ "./store/getToolForElement.js");
/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_636654__(/*! ./index.js */ "./store/index.js");


/**
 * Sets the options of a tool on a specific element.
 * @export
 * @public
 * @method
 * @name setToolOptionsForElement
 *
 * @param {HTMLElement} element The element.
 * @param {string} toolName The name of the tool.
 * @param {Object} options The options to set.
 * @returns {void}
 */

var setToolOptionsForElement = function setToolOptionsForElement(element, toolName, options) {
  var tool = Object(_getToolForElement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, toolName);

  if (tool) {
    tool.mergeOptions(options);
  }
};
/**
 * Sets the options of a tool for all elements.
 * @export
 * @public
 * @method
 * @name setToolOptions
 *
 * @param {string} toolName
 * @param {Object} options
 * @returns {void}
 */


var setToolOptions = function setToolOptions(toolName, options) {
  _index_js__WEBPACK_IMPORTED_MODULE_1__["state"].enabledElements.forEach(function (element) {
    setToolOptionsForElement(element, toolName, options);
  });
};



/***/ }),

/***/ "./synchronization/Synchronizer.js":
/*!*****************************************!*\
  !*** ./synchronization/Synchronizer.js ***!
  \*****************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_638548__) {

"use strict";
__nested_webpack_require_638548__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_638548__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_638548__(/*! ../util/convertToVector3.js */ "./util/convertToVector3.js");
/* harmony import */ var _toolOptions_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_638548__(/*! ../toolOptions.js */ "./toolOptions.js");



/**
 * Return an array filtered to only its unique members
 *
 * @private
 * @param {Array} array - The array to filter
 * @returns {Array}
 */

function unique(array) {
  return array.filter(function (value, index, self) {
    return self.indexOf(value) === index;
  });
}
/**
 * Synchronize target and source elements when an event fires on the source element
 * @export @public constructor
 * @name Synchronizer
 *
 * @param {String} event - The event(s) that will trigger synchronization. Separate multiple events by a space
 * @param {Function} handler - The function that will make the necessary changes to the target element in order to synchronize it with the source element
 * @returns {void}
 */


function Synchronizer(event, handler) {
  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone;
  var that = this;
  var sourceElements = []; // Source elements fire the events we want to synchronize to

  var targetElements = []; // Target elements we want to synchronize to source elements

  var ignoreFiredEvents = false;
  var initialData = {};
  var eventHandler = handler;
  this.enabled = true;
  /**
   * Update the event handler to perform synchronization
   * @param {Function} handler - The event handler function
   * @returns {void}
   */

  this.setHandler = function (handler) {
    eventHandler = handler;
  };
  /**
   * Return a reference to the event handler function
   * @returns {Function}
   */


  this.getHandler = function () {
    return eventHandler;
  };
  /**
   * Calculate the initial distances between the source image and each
   * of the target images
   * @returns {void}
   */


  this.getDistances = function () {
    if (!sourceElements.length || !targetElements.length) {
      return;
    }

    var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone;
    initialData.distances = {};
    initialData.imageIds = {
      sourceElements: [],
      targetElements: []
    };
    sourceElements.forEach(function (sourceElement) {
      var sourceEnabledElement = cornerstone.getEnabledElement(sourceElement);

      if (!sourceEnabledElement || !sourceEnabledElement.image) {
        return;
      }

      var sourceImageId = sourceEnabledElement.image.imageId;
      var sourceImagePlane = cornerstone.metaData.get('imagePlaneModule', sourceImageId);

      if (!sourceImagePlane || !sourceImagePlane.imagePositionPatient) {
        return;
      }

      var sourceImagePosition = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(sourceImagePlane.imagePositionPatient);

      if (initialData.hasOwnProperty(sourceEnabledElement)) {
        return;
      }

      initialData.distances[sourceImageId] = {};
      initialData.imageIds.sourceElements.push(sourceImageId);
      targetElements.forEach(function (targetElement) {
        var targetEnabledElement = cornerstone.getEnabledElement(targetElement);

        if (!targetEnabledElement || !targetEnabledElement.image) {
          return;
        }

        var targetImageId = targetEnabledElement.image.imageId;
        initialData.imageIds.targetElements.push(targetImageId);

        if (sourceElement === targetElement) {
          return;
        }

        if (sourceImageId === targetImageId) {
          return;
        }

        if (initialData.distances[sourceImageId].hasOwnProperty(targetImageId)) {
          return;
        }

        var targetImagePlane = cornerstone.metaData.get('imagePlaneModule', targetImageId);

        if (!targetImagePlane || !targetImagePlane.imagePositionPatient) {
          return;
        }

        var targetImagePosition = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(targetImagePlane.imagePositionPatient);
        initialData.distances[sourceImageId][targetImageId] = targetImagePosition.clone().sub(sourceImagePosition);
      });

      if (!Object.keys(initialData.distances[sourceImageId]).length) {
        delete initialData.distances[sourceImageId];
      }
    });
  };
  /**
   * Gather necessary event data and call synchronization handler
   *
   * @private
   * @param {HTMLElement} sourceElement - The source element for the event
   * @param {Object} eventData - The data object for the source event
   * @returns {void}
   */


  this.fireEvent = function (sourceElement, eventData) {
    var isDisabled = !that.enabled;
    var noElements = !sourceElements.length || !targetElements.length;

    if (isDisabled || noElements) {
      return;
    }

    ignoreFiredEvents = true;
    targetElements.forEach(function (targetElement) {
      var targetIndex = targetElements.indexOf(targetElement);

      if (targetIndex === -1) {
        return;
      }

      var targetImageId = initialData.imageIds.targetElements[targetIndex];
      var sourceIndex = sourceElements.indexOf(sourceElement);

      if (sourceIndex === -1) {
        return;
      }

      var sourceImageId = initialData.imageIds.sourceElements[sourceIndex];
      var positionDifference;

      if (sourceImageId === targetImageId) {
        positionDifference = 0;
      } else if (initialData.distances[sourceImageId] !== undefined) {
        positionDifference = initialData.distances[sourceImageId][targetImageId];
      }

      eventHandler(that, sourceElement, targetElement, eventData, positionDifference);
    });
    ignoreFiredEvents = false;
  };
  /**
   * Call fireEvent if not ignoring events, and pass along event data
   *
   * @private
   * @param {Event} e - The source event object
   * @returns {void}
   */


  this.onEvent = function (e) {
    var eventData = e.detail;

    if (ignoreFiredEvents === true) {
      return;
    }

    that.fireEvent(e.currentTarget, eventData);
  };
  /**
   * Add a source element to this synchronizer
   *
   * @param {HTMLElement} element - The new source element
   * @returns {void}
   */


  this.addSource = function (element) {
    // Return if this element was previously added
    var index = sourceElements.indexOf(element);

    if (index !== -1) {
      return;
    } // Add to our list of enabled elements


    sourceElements.push(element); // Subscribe to the event

    event.split(' ').forEach(function (oneEvent) {
      element.addEventListener(oneEvent, that.onEvent);
    }); // Update the initial distances between elements

    that.getDistances();
    that.updateDisableHandlers();
  };
  /**
   * Add a target element to this synchronizer
   *
   * @param {HTMLElement} element - The new target element to be synchronized
   * @returns {void}
   */


  this.addTarget = function (element) {
    // Return if this element was previously added
    var index = targetElements.indexOf(element);

    if (index !== -1) {
      return;
    } // Add to our list of enabled elements


    targetElements.push(element); // Update the initial distances between elements

    that.getDistances(); // Invoke the handler for this new target element

    eventHandler(that, element, element, 0);
    that.updateDisableHandlers();
  };
  /**
   * Add an element to this synchronizer as both a source and a target
   *
   * @param {HTMLElement} element - The new element
   * @returns {void}
   */


  this.add = function (element) {
    that.addSource(element);
    that.addTarget(element);
  };
  /**
   * Remove a source element from this synchronizer
   *
   * @param {HTMLElement} element - The element to be removed
   * @returns {void}
   */


  this.removeSource = function (element) {
    // Find the index of this element
    var index = sourceElements.indexOf(element);

    if (index === -1) {
      return;
    } // Remove this element from the array


    sourceElements.splice(index, 1); // Stop listening for the event

    event.split(' ').forEach(function (oneEvent) {
      element.removeEventListener(oneEvent, that.onEvent);
    }); // Update the initial distances between elements

    that.getDistances(); // Update everyone listening for events

    that.fireEvent(element);
    that.updateDisableHandlers();
  };
  /**
   * Remove a target element from this synchronizer
   *
   * @param {HTMLElement} element - The element to be removed
   * @returns {void}
   */


  this.removeTarget = function (element) {
    // Find the index of this element
    var index = targetElements.indexOf(element);

    if (index === -1) {
      return;
    } // Remove this element from the array


    targetElements.splice(index, 1); // Update the initial distances between elements

    that.getDistances(); // Invoke the handler for the removed target

    eventHandler(that, element, element, 0);
    that.updateDisableHandlers();
  };
  /**
   * Remove an element from this synchronizer as both a target and source
   *
   * @param {HTMLElement} element - The element to be removed
   * @returns {void}
   */


  this.remove = function (element) {
    that.removeTarget(element);
    that.removeSource(element);
  };
  /**
   * Get the array of source elements
   *
   * @returns {HTMLElement[]}
   */


  this.getSourceElements = function () {
    return sourceElements;
  };
  /**
   * Get the array of target elements
   *
   * @returns {HTMLElement[]}
   */


  this.getTargetElements = function () {
    return targetElements;
  };
  /**
   * Display an image while halting synchronization
   *
   * @param {HTMLElement} element - The element containing the image
   * @param {Object} image - The cornerstone image object
   * @param {Object} viewport - The cornerstone viewport object
   * @returns {void}
   */


  this.displayImage = function (element, image, viewport) {
    ignoreFiredEvents = true;
    _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.displayImage(element, image, viewport);
    ignoreFiredEvents = false;
  };
  /**
   * Update a viewport while halting synchronization
   *
   * @param {HTMLElement} element - The target element
   * @param {Object} viewport - The new cornerstone viewport object
   * @returns {void}
   */


  this.setViewport = function (element, viewport) {
    ignoreFiredEvents = true;
    _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.setViewport(element, viewport);
    ignoreFiredEvents = false;
  };
  /**
   * Remove an element from the synchronizer based on an event from that element
   *
   * @private
   * @param {Event} e - The event whose element will be removed
   * @returns {void}
   */


  function disableHandler(e) {
    var element = e.detail.element;
    that.remove(element);
    Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_2__["clearToolOptionsByElement"])(element);
  }
  /**
   * Add an event listener to each element that can remove it from the synchronizer
   * @returns {void}
   */


  this.updateDisableHandlers = function () {
    var elements = unique(sourceElements.concat(targetElements));
    elements.forEach(function (element) {
      element.removeEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.ELEMENT_DISABLED, disableHandler);
      element.addEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.ELEMENT_DISABLED, disableHandler);
    });
  };
  /**
   * Remove all elements from this synchronizer
   *  @returns {void}
   */


  this.destroy = function () {
    var elements = unique(sourceElements.concat(targetElements));
    elements.forEach(function (element) {
      that.remove(element);
    });
  };
}

/* harmony default export */ __nested_webpack_exports__["default"] = (Synchronizer);

/***/ }),

/***/ "./synchronization/panZoomSynchronizer.js":
/*!************************************************!*\
  !*** ./synchronization/panZoomSynchronizer.js ***!
  \************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_650956__) {

"use strict";
__nested_webpack_require_650956__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_650956__(/*! ../externalModules.js */ "./externalModules.js");

/**
 * Synchronize the target zoom and pan to match the source
 * @export
 * @public
 * @method
 * @name panZoomSynchronizer
 *
 * @param {Object} synchronizer - The Synchronizer instance that attaches this
 * handler to an event
 * @param {HTMLElement} sourceElement - The source element for the zoom and pan values
 * @param {HTMLElement} targetElement - The target element
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (synchronizer, sourceElement, targetElement) {
  // Ignore the case where the source and target are the same enabled element
  if (targetElement === sourceElement) {
    return;
  }

  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; // Get the source and target viewports

  var sourceViewport = cornerstone.getViewport(sourceElement);
  var targetViewport = cornerstone.getViewport(targetElement); // Do nothing if the scale and translation are the same

  if (targetViewport.scale === sourceViewport.scale && targetViewport.translation.x === sourceViewport.translation.x && targetViewport.translation.y === sourceViewport.translation.y) {
    return;
  } // Scale and/or translation are different, sync them


  targetViewport.scale = sourceViewport.scale;
  targetViewport.translation.x = sourceViewport.translation.x;
  targetViewport.translation.y = sourceViewport.translation.y;
  synchronizer.setViewport(targetElement, targetViewport);
});

/***/ }),

/***/ "./synchronization/stackImageIndexSynchronizer.js":
/*!********************************************************!*\
  !*** ./synchronization/stackImageIndexSynchronizer.js ***!
  \********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_652985__) {

"use strict";
__nested_webpack_require_652985__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_652985__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_652985__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_652985__(/*! ../stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js");
/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_652985__(/*! ../util/clip.js */ "./util/clip.js");




/**
 * Synchronize the target stack to the index closest to the source stack's index
 * @export
 * @public
 * @method
 * @name stackImageIndexSynchronizer
 *
 * @param {Object} synchronizer - The Synchronizer instance that attaches this
 * handler to an event
 * @param {HTMLElement} sourceElement - The source element for the index value
 * @param {HTMLElement} targetElement - The target element
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (synchronizer, sourceElement, targetElement) {
  // Ignore the case where the source and target are the same enabled element
  if (targetElement === sourceElement) {
    return;
  }

  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone;
  var sourceStackToolDataSource = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(sourceElement, 'stack');
  var sourceStackData = sourceStackToolDataSource.data[0];
  var targetStackToolDataSource = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(targetElement, 'stack');
  var targetStackData = targetStackToolDataSource.data[0];
  var newImageIdIndex = sourceStackData.currentImageIdIndex; // Clamp the index

  newImageIdIndex = Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_3__["default"])(newImageIdIndex, 0, targetStackData.imageIds.length - 1); // Do nothing if the index has not changed

  if (newImageIdIndex === targetStackData.currentImageIdIndex) {
    return;
  }

  var startLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getStartLoadHandler(targetElement);
  var endLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getEndLoadHandler(targetElement);
  var errorLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getErrorLoadingHandler(targetElement);

  if (startLoadingHandler) {
    startLoadingHandler(targetElement);
  }

  var loader;

  if (targetStackData.preventCache === true) {
    loader = cornerstone.loadImage(targetStackData.imageIds[newImageIdIndex]);
  } else {
    loader = cornerstone.loadAndCacheImage(targetStackData.imageIds[newImageIdIndex]);
  }

  loader.then(function (image) {
    var viewport = cornerstone.getViewport(targetElement);
    targetStackData.currentImageIdIndex = newImageIdIndex;
    synchronizer.displayImage(targetElement, image, viewport);

    if (endLoadingHandler) {
      endLoadingHandler(targetElement, image);
    }
  }, function (error) {
    var imageId = targetStackData.imageIds[newImageIdIndex];

    if (errorLoadingHandler) {
      errorLoadingHandler(targetElement, imageId, error);
    }
  });
});

/***/ }),

/***/ "./synchronization/stackImagePositionOffsetSynchronizer.js":
/*!*****************************************************************!*\
  !*** ./synchronization/stackImagePositionOffsetSynchronizer.js ***!
  \*****************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_656863__) {

"use strict";
__nested_webpack_require_656863__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_656863__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_656863__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_656863__(/*! ../stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js");
/* harmony import */ var _util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_656863__(/*! ../util/convertToVector3.js */ "./util/convertToVector3.js");



 // In the future we will want to have a way to manually register links sets of the same orientation (e.g. an axial link set from a prior with an axial link set of a current).  The user could do this by scrolling the two stacks to a similar location and then doing a user action (e.g. right click link) at which point the system will capture the delta between the image position (patient) of both stacks and use that to sync them.  This offset will need to be adjustable.

/**
 * Calculate a position in space that is offset from the source image's position,
 * and synchronize the target stack to the image that is closest to that position.
 * @export
 * @public
 * @method
 * @name stackImagePositionOffsetSynchronizer
 *
 * @param {Object} synchronizer - The Synchronizer instance that attaches this
 * handler to an event
 * @param {HTMLElement} sourceElement - The source element
 * @param {HTMLElement} targetElement - The target element
 * @param {Object} eventData - The data object from the triggering event
 * @param {Object} positionDifference - An object with { x, y, z } values that will be
 * added to the source image's coordinates
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (synchronizer, sourceElement, targetElement, eventData, positionDifference) {
  // Ignore the case where the source and target are the same enabled element
  if (targetElement === sourceElement) {
    return;
  }

  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone;
  var sourceStackData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(sourceElement, 'stack').data[0];
  var sourceImageId = sourceStackData.imageIds[sourceStackData.currentImageIdIndex];
  var sourceImagePlane = cornerstone.metaData.get('imagePlaneModule', sourceImageId);

  if (sourceImagePlane === undefined || sourceImagePlane.imagePositionPatient === undefined) {
    return;
  }

  var sourceImagePosition = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(sourceImagePlane.imagePositionPatient);
  var stackToolDataSource = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(targetElement, 'stack');
  var stackData = stackToolDataSource.data[0];
  var minDistance = Number.MAX_VALUE;
  var newImageIdIndex = -1;

  if (!positionDifference) {
    return;
  }

  var finalPosition = sourceImagePosition.clone().add(positionDifference);
  stackData.imageIds.forEach(function (imageId, index) {
    var imagePlane = cornerstone.metaData.get('imagePlaneModule', imageId);

    if (imagePlane === undefined || imagePlane.imagePositionPatient === undefined) {
      return;
    }

    var imagePosition = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(imagePlane.imagePositionPatient);
    var distance = finalPosition.distanceToSquared(imagePosition);

    if (distance < minDistance) {
      minDistance = distance;
      newImageIdIndex = index;
    }
  });

  if (newImageIdIndex === stackData.currentImageIdIndex || newImageIdIndex === -1) {
    return;
  }

  var startLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getStartLoadHandler(targetElement);
  var endLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getEndLoadHandler(targetElement);
  var errorLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getErrorLoadingHandler(targetElement);
  stackData.currentImageIdIndex = newImageIdIndex;
  var newImageId = stackData.imageIds[newImageIdIndex];

  if (startLoadingHandler) {
    startLoadingHandler(targetElement);
  }

  var loader;

  if (stackData.preventCache === true) {
    loader = cornerstone.loadImage(newImageId);
  } else {
    loader = cornerstone.loadAndCacheImage(newImageId);
  }

  loader.then(function (image) {
    var viewport = cornerstone.getViewport(targetElement);

    if (stackData.currentImageIdIndex !== newImageIdIndex) {
      return;
    }

    synchronizer.displayImage(targetElement, image, viewport);

    if (endLoadingHandler) {
      endLoadingHandler(targetElement, image);
    }
  }, function (error) {
    var imageId = stackData.imageIds[newImageIdIndex];

    if (errorLoadingHandler) {
      errorLoadingHandler(targetElement, imageId, error);
    }
  });
});

/***/ }),

/***/ "./synchronization/stackImagePositionSynchronizer.js":
/*!***********************************************************!*\
  !*** ./synchronization/stackImagePositionSynchronizer.js ***!
  \***********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_662427__) {

"use strict";
__nested_webpack_require_662427__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_662427__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_662427__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_662427__(/*! ../stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js");
/* harmony import */ var _util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_662427__(/*! ../util/convertToVector3.js */ "./util/convertToVector3.js");




/**
 * Synchronize the target stack to the image closest to the source image's position
 * @export
 * @public
 * @method
 * @name stackImagePositionSynchronizer
 *
 * @param {Object} synchronizer - The Synchronizer instance that attaches this
 * handler to an event
 * @param {HTMLElement} sourceElement - The source element for the image position
 * @param {HTMLElement} targetElement - The target element
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (synchronizer, sourceElement, targetElement) {
  // Ignore the case where the source and target are the same enabled element
  if (targetElement === sourceElement) {
    return;
  }

  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone;
  var sourceStackData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(sourceElement, 'stack').data[0];
  var sourceImageId = sourceStackData.imageIds[sourceStackData.currentImageIdIndex];
  var sourceImagePlane = cornerstone.metaData.get('imagePlaneModule', sourceImageId);

  if (sourceImagePlane === undefined || sourceImagePlane.imagePositionPatient === undefined) {
    // Console.log('No position found for image ' + sourceImage.imageId);
    return;
  }

  var sourceImagePosition = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(sourceImagePlane.imagePositionPatient);
  var stackToolDataSource = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(targetElement, 'stack');
  var stackData = stackToolDataSource.data[0];
  var minDistance = Number.MAX_VALUE;
  var newImageIdIndex = -1;
  stackData.imageIds.forEach(function (imageId, index) {
    var imagePlane = cornerstone.metaData.get('imagePlaneModule', imageId);

    if (imagePlane === undefined || imagePlane.imagePositionPatient === undefined) {
      // Console.log('No position found for image ' + imageId);
      return;
    }

    var imagePosition = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(imagePlane.imagePositionPatient);
    var distance = imagePosition.distanceToSquared(sourceImagePosition); // Console.log(index + '=' + distance);

    if (distance < minDistance) {
      minDistance = distance;
      newImageIdIndex = index;
    }
  });

  if (newImageIdIndex === stackData.currentImageIdIndex) {
    return;
  }

  var startLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getStartLoadHandler(targetElement);
  var endLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getEndLoadHandler(targetElement);
  var errorLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getErrorLoadingHandler(targetElement);
  stackData.currentImageIdIndex = newImageIdIndex;
  var newImageId = stackData.imageIds[newImageIdIndex];

  if (startLoadingHandler) {
    startLoadingHandler(targetElement);
  }

  if (newImageIdIndex !== -1) {
    var loader;

    if (stackData.preventCache === true) {
      loader = cornerstone.loadImage(newImageId);
    } else {
      loader = cornerstone.loadAndCacheImage(newImageId);
    }

    loader.then(function (image) {
      var viewport = cornerstone.getViewport(targetElement);

      if (stackData.currentImageIdIndex !== newImageIdIndex) {
        return;
      }

      synchronizer.displayImage(targetElement, image, viewport);

      if (endLoadingHandler) {
        endLoadingHandler(targetElement, image);
      }
    }, function (error) {
      var imageId = stackData.imageIds[newImageIdIndex];

      if (errorLoadingHandler) {
        errorLoadingHandler(targetElement, imageId, error);
      }
    });
  }
});

/***/ }),

/***/ "./synchronization/stackScrollSynchronizer.js":
/*!****************************************************!*\
  !*** ./synchronization/stackScrollSynchronizer.js ***!
  \****************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_667307__) {

"use strict";
__nested_webpack_require_667307__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_667307__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_667307__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_667307__(/*! ../stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js");
/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_667307__(/*! ../util/clip.js */ "./util/clip.js");




/**
 * Propogate scrolling actions from the source element to the target element.
 * @export
 * @public
 * @method
 * @name stackScrollSynchronizer
 *
 * @param {Object} synchronizer - The Synchronizer instance that attaches this
 * handler to an event
 * @param {HTMLElement} sourceElement - The source element for the scroll event
 * @param {HTMLElement} targetElement - The target element
 * @param {Object} eventData - The data object from the triggering event
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (synchronizer, sourceElement, targetElement, eventData) {
  // If the target and source are the same, stop
  if (sourceElement === targetElement) {
    return;
  } // If there is no event, or direction is 0, stop


  if (!eventData || !eventData.direction) {
    return;
  }

  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; // Get the stack of the target viewport

  var stackToolDataSource = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(targetElement, 'stack');
  var stackData = stackToolDataSource.data[0]; // Get the new index for the stack

  var newImageIdIndex = stackData.currentImageIdIndex + eventData.direction; // Ensure the index does not exceed the bounds of the stack

  newImageIdIndex = Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_3__["default"])(newImageIdIndex, 0, stackData.imageIds.length - 1); // If the index has not changed, stop here

  if (stackData.currentImageIdIndex === newImageIdIndex) {
    return;
  }

  var startLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getStartLoadHandler(targetElement);
  var endLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getEndLoadHandler(targetElement);
  var errorLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getErrorLoadingHandler(targetElement);
  stackData.currentImageIdIndex = newImageIdIndex;
  var newImageId = stackData.imageIds[newImageIdIndex];

  if (startLoadingHandler) {
    startLoadingHandler(targetElement);
  }

  var loader;

  if (stackData.preventCache === true) {
    loader = cornerstone.loadImage(newImageId);
  } else {
    loader = cornerstone.loadAndCacheImage(newImageId);
  }

  loader.then(function (image) {
    var viewport = cornerstone.getViewport(targetElement);

    if (stackData.currentImageIdIndex !== newImageIdIndex) {
      return;
    }

    synchronizer.displayImage(targetElement, image, viewport);

    if (endLoadingHandler) {
      endLoadingHandler(targetElement, image);
    }
  }, function (error) {
    var imageId = stackData.imageIds[newImageIdIndex];

    if (errorLoadingHandler) {
      errorLoadingHandler(targetElement, imageId, error);
    }
  });
});

/***/ }),

/***/ "./synchronization/updateImageSynchronizer.js":
/*!****************************************************!*\
  !*** ./synchronization/updateImageSynchronizer.js ***!
  \****************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_671253__) {

"use strict";
__nested_webpack_require_671253__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_671253__(/*! ../externalModules.js */ "./externalModules.js");

/**
 * Redraw target image immediately any time handler is called from source element.
 * @export
 * @public
 * @method
 * @name updateImageSynchronizer
 *
 * @param {Object} synchronizer - The Synchronizer instance that attaches this
 * handler to an event
 * @param {HTMLElement} sourceElement - The source element
 * @param {HTMLElement} targetElement - The target element
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (synchronizer, sourceElement, targetElement) {
  // Ignore the case where the source and target are the same enabled element
  if (targetElement === sourceElement) {
    return;
  }

  _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(targetElement);
});

/***/ }),

/***/ "./synchronization/wwwcSynchronizer.js":
/*!*********************************************!*\
  !*** ./synchronization/wwwcSynchronizer.js ***!
  \*********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_672536__) {

"use strict";
__nested_webpack_require_672536__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_672536__(/*! ../externalModules.js */ "./externalModules.js");

/**
 * Synchronize the target viewport ww/wc to match the source element.
 * @export
 * @public
 * @method
 * @name wwwcSynchronizer
 *
 * @param {Object} synchronizer - The Synchronizer instance that attaches this
 * handler to an event
 * @param {HTMLElement} sourceElement - The source element for the ww/wc values
 * @param {HTMLElement} targetElement - The target element
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (synchronizer, sourceElement, targetElement) {
  // Ignore the case where the source and target are the same enabled element
  if (targetElement === sourceElement) {
    return;
  }

  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; // Get the source and target viewports

  var sourceViewport = cornerstone.getViewport(sourceElement);
  var targetViewport = cornerstone.getViewport(targetElement); // Do nothing if the ww/wc already match

  if (targetViewport.voi.windowWidth === sourceViewport.voi.windowWidth && targetViewport.voi.windowCenter === sourceViewport.voi.windowCenter && targetViewport.invert === sourceViewport.invert) {
    return;
  } // Www/wc are different, sync them


  targetViewport.voi.windowWidth = sourceViewport.voi.windowWidth;
  targetViewport.voi.windowCenter = sourceViewport.voi.windowCenter;
  targetViewport.invert = sourceViewport.invert;
  synchronizer.setViewport(targetElement, targetViewport);
});

/***/ }),

/***/ "./thirdParty/register.js":
/*!********************************!*\
  !*** ./thirdParty/register.js ***!
  \********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_674461__) {

"use strict";
__nested_webpack_require_674461__.r(__nested_webpack_exports__);
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_674461__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js");
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_674461__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _registerModule_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_674461__(/*! ./registerModule.js */ "./thirdParty/registerModule.js");
/* harmony import */ var _registerMixin_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_674461__(/*! ./registerMixin.js */ "./thirdParty/registerMixin.js");
/* harmony import */ var _registerItem_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_674461__(/*! ./registerItem.js */ "./thirdParty/registerItem.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_674461__(/*! ../util/logger.js */ "./util/logger.js");





var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_4__["getLogger"])('thirdParty:register');
/**
 * Register an item or module to cornerstoneTools.
 * @export
 * @public
 * @method
 * @name register
 *
 * @param {string} type The type of the item/module.
 * @param {string} name The name of the item/module.
 * @param {Object|function} item The item/module itself.
 * @param {boolean} [overwrite=false] Whether an item/module should be
 *                                    overwritten, should it have the same name.
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (type, name, item) {
  var overwrite = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;

  if (!isValidInput(type, name, item)) {
    return;
  }

  switch (type) {
    case 'module':
      Object(_registerModule_js__WEBPACK_IMPORTED_MODULE_1__["default"])(name, item, overwrite);
      break;

    case 'mixin':
      Object(_registerMixin_js__WEBPACK_IMPORTED_MODULE_2__["default"])(name, item, overwrite);
      break;

    default:
      Object(_registerItem_js__WEBPACK_IMPORTED_MODULE_3__["default"])(type, name, item, overwrite);
  }
});
/**
 * Returns true if the item is valid, this avoids
 * clogging up the library with invalid data.
 * @private
 * @method
 * @name isValidInput
 *
 * @param {string} type The type of the item/module.
 * @param {string} name The name of the item/module.
 * @param {Object|function} item The item/module itself.
 * @returns {boolean}    Whether the input is valid.
 */

function isValidInput(type, name, item) {
  if (!type) {
    logger.warn('The type must be given in order to register.');
    return false;
  }

  if (!name) {
    logger.warn("The %s must have a name in order to register.", type);
    return false;
  }

  if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(item) !== 'object' && typeof item !== 'function') {
    logger.warn("The %s is a %s, it should be an Object or a function.", item, _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(item));
    return false;
  }

  return true;
}

/***/ }),

/***/ "./thirdParty/registerItem.js":
/*!************************************!*\
  !*** ./thirdParty/registerItem.js ***!
  \************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_677928__) {

"use strict";
__nested_webpack_require_677928__.r(__nested_webpack_exports__);
/* harmony import */ var _lib_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_677928__(/*! ../lib.js */ "./lib.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_677928__(/*! ../util/logger.js */ "./util/logger.js");


var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_1__["getLogger"])('thirdParty:registerType');
/**
 * Register an item to cornerstoneTools.
 * @export
 * @private
 * @method
 * @name registerItem
 *
 * @param {string} type The type of the item.
 * @param {string} name The name of the item.
 * @param {Object|function} item The item itself.
 * @param {boolean} [overwrite=false] Whether an item should be overwritten,
 *                                    should it have the same name.
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (type, name, item) {
  var overwrite = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
  var itemKey = "".concat(type, "/").concat(name);
  var alreadyRegistered = isItemNameRegistered(itemKey);

  if (alreadyRegistered && !overwrite) {
    logger.warn('%s is already registered', itemKey);
    return;
  }

  if (alreadyRegistered) {
    logger.warn('Overwriting %s', itemKey);
  }

  _lib_js__WEBPACK_IMPORTED_MODULE_0__["lib"][itemKey] = item;
});

function isItemNameRegistered(itemKey) {
  return _lib_js__WEBPACK_IMPORTED_MODULE_0__["lib"][itemKey] !== undefined;
}

/***/ }),

/***/ "./thirdParty/registerMixin.js":
/*!*************************************!*\
  !*** ./thirdParty/registerMixin.js ***!
  \*************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_679714__) {

"use strict";
__nested_webpack_require_679714__.r(__nested_webpack_exports__);
/* harmony import */ var _lib_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_679714__(/*! ../lib.js */ "./lib.js");
/* harmony import */ var _mixins_index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_679714__(/*! ../mixins/index.js */ "./mixins/index.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_679714__(/*! ../util/logger.js */ "./util/logger.js");



var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_2__["getLogger"])('thirdParty:registerMixin');
/**
 * Register an mixin to cornerstoneTools.
 * @export
 * @private
 * @method
 * @name registerMixin
 *
 * @param {string} name The name of the mixin.
 * @param {Object} mixin The mixin itself.
 * @param {boolean} [overwrite=false] Whether an mixin should be overwritten,
 *                                    should it have the same name.
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (name, mixin) {
  var overwrite = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
  var alreadyRegistered = isMixinRegistered(name);

  if (alreadyRegistered && !overwrite) {
    logger.warn('mixins/%s is already registered', name);
    return;
  }

  if (alreadyRegistered) {
    logger.warn('Overwriting mixins/%s', name);
  } // Register to the mixins object


  _mixins_index_js__WEBPACK_IMPORTED_MODULE_1__["default"][name] = mixin; // Reference the mixin from the library so it can be exported externally.

  _lib_js__WEBPACK_IMPORTED_MODULE_0__["lib"]["mixins/".concat(name)] = _mixins_index_js__WEBPACK_IMPORTED_MODULE_1__["default"][name];
});

function isMixinRegistered(name) {
  return _mixins_index_js__WEBPACK_IMPORTED_MODULE_1__["default"][name] !== undefined;
}

/***/ }),

/***/ "./thirdParty/registerModule.js":
/*!**************************************!*\
  !*** ./thirdParty/registerModule.js ***!
  \**************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_681804__) {

"use strict";
__nested_webpack_require_681804__.r(__nested_webpack_exports__);
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_681804__(/*! ../store/index.js */ "./store/index.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_681804__(/*! ../util/logger.js */ "./util/logger.js");


var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_1__["getLogger"])('thirdParty:registerModule');
/**
 * Register a module.
 * @export
 * @private
 * @method
 * @name registerModule
 *
 * @param {string} name The name of the module.
 * @param {Object} newModule The module to register.
 * @param {boolean} [overwrite] Whether a module should be overwritten,
 *                              should it have the same name.
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (name, newModule) {
  var overwrite = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
  var alreadyRegistered = isModuleNameRegistered(name);

  if (alreadyRegistered && !overwrite) {
    logger.warn('A module with the name %s is already registered', name);
    return;
  }

  if (alreadyRegistered) {
    logger.warn('Overwriting module %s', name);
  }

  _store_index_js__WEBPACK_IMPORTED_MODULE_0__["modules"][name] = newModule;

  if (typeof _store_index_js__WEBPACK_IMPORTED_MODULE_0__["modules"][name].onRegisterCallback === 'function') {
    _store_index_js__WEBPACK_IMPORTED_MODULE_0__["modules"][name].onRegisterCallback();
  }
});

function isModuleNameRegistered(name) {
  return _store_index_js__WEBPACK_IMPORTED_MODULE_0__["modules"][name] !== undefined;
}

/***/ }),

/***/ "./thirdParty/registerSome.js":
/*!************************************!*\
  !*** ./thirdParty/registerSome.js ***!
  \************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_683741__) {

"use strict";
__nested_webpack_require_683741__.r(__nested_webpack_exports__);
/* harmony import */ var _register_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_683741__(/*! ./register.js */ "./thirdParty/register.js");

/**
 * Register an array of items and/or modules to cornerstoneTools.
 * @export
 * @public
 * @method
 * @name registerSome
 *
 * @param {Object[]} items An array of items/modules to register.
 * @param {boolean} [overwrite=false] Whether an item/module should be
 *                                    overwritten, should it have the same name.
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (items) {
  var overwrite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
  items.forEach(function (_ref) {
    var type = _ref.type,
        name = _ref.name,
        item = _ref.item;
    Object(_register_js__WEBPACK_IMPORTED_MODULE_0__["default"])(type, name, item, overwrite);
  });
});

/***/ }),

/***/ "./toolOptions.js":
/*!************************!*\
  !*** ./toolOptions.js ***!
  \************************/
/*! exports provided: getToolOptions, setToolOptions, clearToolOptions, clearToolOptionsByToolType, clearToolOptionsByToolName, clearToolOptionsByElement */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_685054__) {

"use strict";
__nested_webpack_require_685054__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_685054__.d(__nested_webpack_exports__, "getToolOptions", function() { return getToolOptions; });
/* harmony export (binding) */ __nested_webpack_require_685054__.d(__nested_webpack_exports__, "setToolOptions", function() { return setToolOptions; });
/* harmony export (binding) */ __nested_webpack_require_685054__.d(__nested_webpack_exports__, "clearToolOptions", function() { return clearToolOptions; });
/* harmony export (binding) */ __nested_webpack_require_685054__.d(__nested_webpack_exports__, "clearToolOptionsByToolType", function() { return clearToolOptionsByToolType; });
/* harmony export (binding) */ __nested_webpack_require_685054__.d(__nested_webpack_exports__, "clearToolOptionsByToolName", function() { return clearToolOptionsByToolName; });
/* harmony export (binding) */ __nested_webpack_require_685054__.d(__nested_webpack_exports__, "clearToolOptionsByElement", function() { return clearToolOptionsByElement; });
var elementToolOptions = {};
/**
 * Retrieve the options object associated with a particular toolName and element
 * @export
 * @public
 * @method
 * @name getToolOptions
 *
 * @param {string} toolName Tool name identifier of the target options object
 * @param {HTMLElement} element Element of the target options object
 *
 * @returns {Object} Target options object (empty if not yet set)
 */

function getToolOptions(toolName, element) {
  if (!elementToolOptions[toolName]) {
    return {};
  }

  var toolOptions = elementToolOptions[toolName];
  var optionsObject = toolOptions.find(function (toolOptionObject) {
    return toolOptionObject.element === element;
  });

  if (!optionsObject) {
    return {};
  }

  return optionsObject.options;
}
/**
 * Set the options object associated with a particular toolName and element.
 * @export
 * @public
 * @method
 * @name setToolOptions
 *
 * @param {string} toolName Tool name identifier of the target options object.
 * @param {HTMLElement} element Element of the target options object.
 * @param {Object} options Options object to store at target.
 * @returns {void}
 */


function setToolOptions(toolName, element, options) {
  if (!elementToolOptions[toolName]) {
    elementToolOptions[toolName] = [{
      element: element,
      options: options
    }];
    return;
  }

  var toolOptions = elementToolOptions[toolName];
  var index = toolOptions.findIndex(function (toolOptionObject) {
    return toolOptionObject.element === element;
  });

  if (index === -1) {
    elementToolOptions[toolName].push({
      element: element,
      options: options
    });
  } else {
    var elementOptions = elementToolOptions[toolName][index].options || {};
    elementToolOptions[toolName][index].options = Object.assign(elementOptions, options);
  }
}
/**
 * Clear the options object associated with a particular toolName and element.
 * @export
 * @public
 * @method
 * @name clearToolOptions
 *
 * @param {string} toolName Tool name identifier of the target options object.
 * @param {HTMLElement} element Element of the target options object.
 * @returns {void}
 */


function clearToolOptions(toolName, element) {
  var toolOptions = elementToolOptions[toolName];

  if (toolOptions) {
    elementToolOptions[toolName] = toolOptions.filter(function (toolOptionObject) {
      return toolOptionObject.element !== element;
    });
  }
}
/**
 * Clear the options objects associated with a particular toolType.
 *
 * Deprecation notice: use clearToolOptionsByToolName instead
 * @deprecated
 *
 * @export
 * @public
 * @method
 * @name clearToolOptionsByToolType
 *
 * @param {string} toolType Tool type identifier of the target options objects.
 * @returns {void}
 */


function clearToolOptionsByToolType(toolType) {
  return clearToolOptionsByToolName(toolType);
}
/**
 * Clear the options objects associated with a particular toolName.
 * @export
 * @public
 * @method
 * @name clearToolOptionsByToolName
 *
 * @param {string} toolName Tool name identifier of the target options objects.
 * @returns {void}
 */


function clearToolOptionsByToolName(toolName) {
  delete elementToolOptions[toolName];
}
/**
 * Clear the options objects associated with a particular element.
 * @export
 * @public
 * @method
 * @name clearToolOptionsByElement
 *
 * @param {HTMLElement} element Element of the target options objects.
 * @returns {void}
 */


function clearToolOptionsByElement(element) {
  for (var toolName in elementToolOptions) {
    elementToolOptions[toolName] = elementToolOptions[toolName].filter(function (toolOptionObject) {
      return toolOptionObject.element !== element;
    });
  }
}



/***/ }),

/***/ "./tools/CrosshairsTool.js":
/*!*********************************!*\
  !*** ./tools/CrosshairsTool.js ***!
  \*********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_689898__) {

"use strict";
__nested_webpack_require_689898__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_689898__.d(__nested_webpack_exports__, "default", function() { return CrosshairsTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_689898__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_689898__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_689898__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_689898__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_689898__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_689898__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_689898__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_689898__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_689898__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_689898__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_689898__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__nested_webpack_require_689898__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_689898__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_689898__(/*! ./../externalModules.js */ "./externalModules.js");
/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_689898__(/*! ../stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_689898__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _util_pointProjector_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_689898__(/*! ../util/pointProjector.js */ "./util/pointProjector.js");
/* harmony import */ var _util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_689898__(/*! ../util/convertToVector3.js */ "./util/convertToVector3.js");
/* harmony import */ var _toolOptions_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_689898__(/*! ../toolOptions.js */ "./toolOptions.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_689898__(/*! ./cursors/index.js */ "./tools/cursors/index.js");














/**
 * @public
 * @class CrosshairsTool
 * @memberof Tools
 *
 * @classdesc Tool for finding the slice in another element corresponding to the
 * image position in a synchronized image series.
 * @extends Tools.Base.BaseTool
 */

var CrosshairsTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(CrosshairsTool, _BaseTool);

  function CrosshairsTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, CrosshairsTool);

    var defaultProps = {
      name: 'Crosshairs',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_13__["crosshairsCursor"]
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(CrosshairsTool).call(this, props, defaultProps));
    _this.preMouseDownCallback = _this._chooseLocation.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.mouseDragCallback = _this._chooseLocation.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.touchDragCallback = _this._chooseLocation.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(CrosshairsTool, [{
    key: "_chooseLocation",
    value: function _chooseLocation(evt) {
      var eventData = evt.detail;
      var element = eventData.element; // Prevent CornerstoneToolsTouchStartActive from killing any press events

      evt.stopImmediatePropagation(); // If we have no toolData for this element, return immediately as there is nothing to do

      var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(element, this.name);

      if (!toolData) {
        return;
      } // Get current element target information


      var sourceElement = element;
      var sourceEnabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.getEnabledElement(sourceElement);
      var sourceImageId = sourceEnabledElement.image.imageId;
      var sourceImagePlane = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.metaData.get('imagePlaneModule', sourceImageId);

      if (!sourceImagePlane) {
        return;
      } // Get currentPoints from mouse cursor on selected element


      var sourceImagePoint = eventData.currentPoints.image; // Transfer this to a patientPoint given imagePlane metadata

      var patientPoint = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_10__["imagePointToPatientPoint"])(sourceImagePoint, sourceImagePlane); // Get the enabled elements associated with this synchronization context

      var syncContext = toolData.data[0].synchronizationContext;
      var enabledElements = syncContext.getSourceElements(); // Iterate over each synchronized element

      enabledElements.forEach(function (targetElement) {
        // Don't do anything if the target is the same as the source
        if (targetElement === sourceElement) {
          return;
        }

        var minDistance = Number.MAX_VALUE;
        var newImageIdIndex = -1;
        var stackToolDataSource = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(targetElement, 'stack');

        if (stackToolDataSource === undefined) {
          return;
        }

        var stackData = stackToolDataSource.data[0]; // Find within the element's stack the closest image plane to selected location

        stackData.imageIds.forEach(function (imageId, index) {
          var imagePlane = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.metaData.get('imagePlaneModule', imageId); // Skip if the image plane is not ready

          if (!imagePlane || !imagePlane.imagePositionPatient || !imagePlane.rowCosines || !imagePlane.columnCosines) {
            return;
          }

          var imagePosition = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_11__["default"])(imagePlane.imagePositionPatient);
          var row = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_11__["default"])(imagePlane.rowCosines);
          var column = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_11__["default"])(imagePlane.columnCosines);
          var normal = column.clone().cross(row.clone());
          var distance = Math.abs(normal.clone().dot(imagePosition) - normal.clone().dot(patientPoint));

          if (distance < minDistance) {
            minDistance = distance;
            newImageIdIndex = index;
          }
        });

        if (newImageIdIndex === stackData.currentImageIdIndex) {
          return;
        } // Switch the loaded image to the required image


        if (newImageIdIndex !== -1 && stackData.imageIds[newImageIdIndex] !== undefined) {
          var startLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_8__["default"].getStartLoadHandler(targetElement);
          var endLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_8__["default"].getEndLoadHandler(targetElement);
          var errorLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_8__["default"].getErrorLoadingHandler(targetElement);

          if (startLoadingHandler) {
            startLoadingHandler(targetElement);
          }

          var loader;

          if (stackData.preventCache === true) {
            loader = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.loadImage(stackData.imageIds[newImageIdIndex]);
          } else {
            loader = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.loadAndCacheImage(stackData.imageIds[newImageIdIndex]);
          }

          loader.then(function (image) {
            var viewport = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.getViewport(targetElement);
            stackData.currentImageIdIndex = newImageIdIndex;
            _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.displayImage(targetElement, image, viewport);

            if (endLoadingHandler) {
              endLoadingHandler(targetElement, image);
            }
          }, function (error) {
            var imageId = stackData.imageIds[newImageIdIndex];

            if (errorLoadingHandler) {
              errorLoadingHandler(targetElement, imageId, error);
            }
          });
        }
      });
    }
  }, {
    key: "activeCallback",
    value: function activeCallback(element, _ref) {
      var mouseButtonMask = _ref.mouseButtonMask,
          synchronizationContext = _ref.synchronizationContext;
      Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_12__["setToolOptions"])(this.name, element, {
        mouseButtonMask: mouseButtonMask
      }); // Clear any currently existing toolData

      Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["clearToolState"])(element, this.name);
      Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["addToolState"])(element, this.name, {
        synchronizationContext: synchronizationContext
      });
    }
  }]);

  return CrosshairsTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);



/***/ }),

/***/ "./tools/DoubleTapFitToWindowTool.js":
/*!*******************************************!*\
  !*** ./tools/DoubleTapFitToWindowTool.js ***!
  \*******************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_701928__) {

"use strict";
__nested_webpack_require_701928__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_701928__.d(__nested_webpack_exports__, "default", function() { return DoubleTapFitToWindowTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_701928__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_701928__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_701928__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_701928__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_701928__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_701928__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_701928__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_701928__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_701928__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_701928__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_701928__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_701928__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");







/**
 * @public
 * @class DoubleTapFitToWindowTool
 * @memberof Tools
 *
 * @classdesc Tool which calls the external cornerstone.fitToWindow() function
 * on double tap.
 * @extends Tools.Base.BaseTool
 */

var DoubleTapFitToWindowTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(DoubleTapFitToWindowTool, _BaseTool);

  function DoubleTapFitToWindowTool() {
    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, DoubleTapFitToWindowTool);

    var defaultProps = {
      name: 'DoubleTapFitToWindow',
      supportedInteractionTypes: ['DoubleTap']
    };
    return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(DoubleTapFitToWindowTool).call(this, props, defaultProps));
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(DoubleTapFitToWindowTool, [{
    key: "doubleTapCallback",
    value: function doubleTapCallback(evt) {
      var eventData = evt.detail;
      _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.fitToWindow(eventData.element);
    }
  }]);

  return DoubleTapFitToWindowTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);



/***/ }),

/***/ "./tools/DragProbeTool.js":
/*!********************************!*\
  !*** ./tools/DragProbeTool.js ***!
  \********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_706257__) {

"use strict";
__nested_webpack_require_706257__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_706257__.d(__nested_webpack_exports__, "default", function() { return DragProbeTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_706257__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_706257__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_706257__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_706257__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_706257__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_706257__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_706257__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_706257__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_706257__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_706257__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_706257__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__nested_webpack_require_706257__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_706257__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_706257__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_706257__(/*! ../stateManagement/textStyle.js */ "./stateManagement/textStyle.js");
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_706257__(/*! ../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _util_getRGBPixels_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_706257__(/*! ../util/getRGBPixels.js */ "./util/getRGBPixels.js");
/* harmony import */ var _util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_706257__(/*! ../util/calculateSUV.js */ "./util/calculateSUV.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_706257__(/*! ../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_706257__(/*! ../drawing/drawTextBox.js */ "./drawing/drawTextBox.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_706257__(/*! ./cursors/index.js */ "./tools/cursors/index.js");















/**
 * @public
 * @class DragProbeTool
 * @memberof Tools
 *
 * @classdesc Tool which provides a probe of the image data at the
 * input position on drag.
 * @extends Tools.Base.BaseTool
 */

var DragProbeTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(DragProbeTool, _BaseTool);

  function DragProbeTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, DragProbeTool);

    var defaultProps = {
      name: 'DragProbe',
      strategies: {
        default: defaultStrategy,
        minimal: minimalStrategy
      },
      defaultStrategy: 'default',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_14__["probeCursor"]
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(DragProbeTool).call(this, props, defaultProps));
    _this.touchDragCallback = _this._movingEventCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.touchEndCallback = _this._endMovingEventCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.mouseDragCallback = _this._movingEventCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.mouseUpCallback = _this._endMovingEventCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.dragEventData = {};
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(DragProbeTool, [{
    key: "_movingEventCallback",
    value: function _movingEventCallback(evt) {
      var eventData = evt.detail;
      var element = eventData.element;
      this.dragEventData = eventData;
      _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.updateImage(element);
    }
  }, {
    key: "_endMovingEventCallback",
    value: function _endMovingEventCallback(evt) {
      var eventData = evt.detail;
      var element = eventData.element;
      this.dragEventData = {};
      _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.updateImage(element);
    }
  }, {
    key: "renderToolData",
    value: function renderToolData(evt) {
      if (!this.dragEventData.currentPoints) {
        return;
      }

      if (evt && evt.detail && Boolean(Object.keys(this.dragEventData.currentPoints).length)) {
        evt.detail.currentPoints = this.dragEventData.currentPoints;
        this.applyActiveStrategy(evt);
      }
    }
  }]);

  return DragProbeTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__["default"]);
/**
 * Default strategy will pick the exactly point of mouse/touch interact and display the probe data.
 *
 * @param  {Object} evt Image rendered event
 * @returns {void}
 */




function defaultStrategy(evt) {
  var config = this.configuration;
  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone;
  var eventData = evt.detail;
  var element = eventData.element,
      image = eventData.image,
      currentPoints = eventData.currentPoints,
      canvasContext = eventData.canvasContext;
  var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["getNewContext"])(canvasContext.canvas);
  var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getActiveColor();
  var fontHeight = _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getFontSize();
  var x = Math.round(currentPoints.image.x);
  var y = Math.round(currentPoints.image.y);

  if (x < 0 || y < 0 || x >= image.columns || y >= image.rows) {
    return;
  }

  Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["draw"])(context, function (context) {
    Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["setShadow"])(context, config);
    var text = "".concat(x, ", ").concat(y);
    var storedPixels;
    var str;

    if (image.color) {
      storedPixels = Object(_util_getRGBPixels_js__WEBPACK_IMPORTED_MODULE_10__["default"])(element, x, y, 1, 1);
      str = "R: ".concat(storedPixels[0], " G: ").concat(storedPixels[1], " B: ").concat(storedPixels[2], " A: ").concat(storedPixels[3]);
    } else {
      storedPixels = cornerstone.getStoredPixels(element, x, y, 1, 1);
      var sp = storedPixels[0];
      var mo = sp * image.slope + image.intercept;
      var suv = Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_11__["default"])(image, sp); // Draw text

      str = "SP: ".concat(sp, " MO: ").concat(parseFloat(mo.toFixed(3)));

      if (suv) {
        str += " SUV: ".concat(parseFloat(suv.toFixed(3)));
      }
    } // Draw text 5px away from cursor


    var textCoords = {
      x: currentPoints.canvas.x + 5,
      y: currentPoints.canvas.y - 5
    };
    Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_13__["default"])(context, str, textCoords.x, textCoords.y + fontHeight + 5, color);
    Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_13__["default"])(context, text, textCoords.x, textCoords.y, color);
  });
}
/**
 * Minimal strategy will position a circle and use the center of the circle to calculate and display probe data.
 *
 * @param  {Object} evt Image rendered event
 * @returns {void}
 */


function minimalStrategy(evt) {
  var config = this.configuration;
  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone;
  var eventData = evt.detail;
  var element = eventData.element,
      image = eventData.image,
      currentPoints = eventData.currentPoints,
      canvasContext = eventData.canvasContext,
      isTouchEvent = eventData.isTouchEvent;
  var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["getNewContext"])(canvasContext.canvas);
  var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getActiveColor();
  var pageCoordY = currentPoints.page.y - _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getFontSize() / 2;

  if (isTouchEvent) {
    pageCoordY = currentPoints.page.y - _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getFontSize() * 4;
  }

  var toolCoords = cornerstone.pageToPixel(element, currentPoints.page.x, pageCoordY);

  if (toolCoords.x < 0 || toolCoords.y < 0 || toolCoords.x >= image.columns || toolCoords.y >= image.rows) {
    return;
  }

  Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["draw"])(context, function (context) {
    Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["setShadow"])(context, config);
    var seriesModule = cornerstone.metaData.get('generalSeriesModule', image.imageId);
    var modality = seriesModule && seriesModule.modality;
    var storedPixels;
    var text = '';

    if (image.color) {
      storedPixels = Object(_util_getRGBPixels_js__WEBPACK_IMPORTED_MODULE_10__["default"])(element, toolCoords.x, toolCoords.y, 1, 1);
      text = "R: ".concat(storedPixels[0], " G: ").concat(storedPixels[1], " B: ").concat(storedPixels[2]);
    } else {
      storedPixels = cornerstone.getStoredPixels(element, toolCoords.x, toolCoords.y, 1, 1);
      var sp = storedPixels[0];
      var mo = sp * image.slope + image.intercept;
      var modalityPixelValueText = parseFloat(mo.toFixed(2));

      if (modality === 'CT') {
        text += "HU: ".concat(modalityPixelValueText);
      } else if (modality === 'PT') {
        text += modalityPixelValueText;
        var suv = Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_11__["default"])(image, sp);

        if (suv) {
          text += " SUV: ".concat(parseFloat(suv.toFixed(2)));
        }
      } else {
        text += modalityPixelValueText;
      }
    } // Prepare text


    var textCoords = cornerstone.pixelToCanvas(element, toolCoords); // Translate the x/y away from the cursor

    var translation = {
      x: 12,
      y: -(_stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getFontSize() + 10) / 2
    };
    var handleRadius = 6;
    var padding = 5;
    var width = Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_13__["textBoxWidth"])(context, text, padding);

    if (isTouchEvent) {
      translation = {
        x: -width / 2,
        y: -_stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getFontSize() - 10 - 2 * handleRadius
      };
    }

    Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["drawCircle"])(context, element, textCoords, handleRadius, {
      color: color
    }, 'canvas');
    Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_13__["default"])(context, text, textCoords.x + translation.x, textCoords.y + translation.y, color);
  });
}

/***/ }),

/***/ "./tools/EraserTool.js":
/*!*****************************!*\
  !*** ./tools/EraserTool.js ***!
  \*****************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_719738__) {

"use strict";
__nested_webpack_require_719738__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_719738__.d(__nested_webpack_exports__, "default", function() { return EraserTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_719738__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_719738__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_719738__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_719738__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_719738__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_719738__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_719738__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_719738__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_719738__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_719738__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_719738__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__nested_webpack_require_719738__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_719738__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_719738__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_719738__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_719738__(/*! ../store/index.js */ "./store/index.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_719738__(/*! ./cursors/index.js */ "./tools/cursors/index.js");











/**
 * @public
 * @class EraserTool
 * @memberof Tools
 *
 * @classdesc Tool for deleting the data of other Annotation Tools.
 * @extends Tools.Base.BaseTool
 */

var EraserTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(EraserTool, _BaseTool);

  function EraserTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, EraserTool);

    var defaultProps = {
      name: 'Eraser',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_10__["eraserCursor"]
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(EraserTool).call(this, props, defaultProps));
    _this.preMouseDownCallback = _this._deleteAllNearbyTools.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.preTouchStartCallback = _this._deleteAllNearbyTools.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(EraserTool, [{
    key: "_deleteAllNearbyTools",
    value: function _deleteAllNearbyTools(evt) {
      var coords = evt.detail.currentPoints.canvas;
      var element = evt.detail.element;
      _store_index_js__WEBPACK_IMPORTED_MODULE_9__["state"].tools.forEach(function (tool) {
        var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__["getToolState"])(element, tool.name);

        if (toolState) {
          // Modifying in a foreach? Probably not ideal
          toolState.data.forEach(function (data) {
            if (typeof tool.pointNearTool === 'function' && tool.pointNearTool(element, data, coords)) {
              Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__["removeToolState"])(element, tool.name, data);
              _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.updateImage(element);
            }
          });
        }
      });
      var consumeEvent = true;
      return consumeEvent;
    }
  }]);

  return EraserTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__["default"]);



/***/ }),

/***/ "./tools/FreehandRoiSculptorTool.js":
/*!******************************************!*\
  !*** ./tools/FreehandRoiSculptorTool.js ***!
  \******************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_726067__) {

"use strict";
__nested_webpack_require_726067__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_726067__.d(__nested_webpack_exports__, "default", function() { return FreehandRoiSculptorTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_726067__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_726067__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_726067__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_726067__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_726067__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_726067__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_726067__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_726067__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_726067__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_726067__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_726067__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__nested_webpack_require_726067__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_726067__(/*! ../events.js */ "./events.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_726067__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_726067__(/*! ../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_726067__(/*! ../drawing/drawHandles.js */ "./drawing/drawHandles.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_726067__(/*! ../store/index.js */ "./store/index.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_726067__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_726067__(/*! ../util/clip.js */ "./util/clip.js");
/* harmony import */ var _store_getToolForElement_js__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_726067__(/*! ../store/getToolForElement.js */ "./store/getToolForElement.js");
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_726067__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_726067__(/*! ../store/setToolCursor.js */ "./store/setToolCursor.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_726067__(/*! ./cursors/index.js */ "./tools/cursors/index.js");
/* harmony import */ var _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_726067__(/*! ../util/freehand/index.js */ "./util/freehand/index.js");


















var FreehandHandleData = _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_17__["default"].FreehandHandleData;
/**
 * @public
 * @class FreehandRoiSculptorTool
 * @memberof Tools
 *
 * @classdesc Tool for easily sculpting annotations drawn with
 * the FreehandRoiTool.
 * @extends Tools.Base.BaseTool
 */

var FreehandRoiSculptorTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(FreehandRoiSculptorTool, _BaseTool);

  function FreehandRoiSculptorTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, FreehandRoiSculptorTool);

    var defaultProps = {
      name: 'FreehandRoiSculptor',
      referencedToolName: 'FreehandRoi',
      supportedInteractionTypes: ['Mouse', 'Touch', 'DoubleTap'],
      mixins: ['activeOrDisabledBinaryTool'],
      configuration: getDefaultFreehandRoiSculptorToolConfiguration(),
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_16__["freehandRoiSculptorCursor"]
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(FreehandRoiSculptorTool).call(this, props, defaultProps));
    _this.updateOnMouseMove = true;
    _this.isMultiPartTool = true;
    _this.referencedToolName = _this.initialConfiguration.referencedToolName;
    _this._active = false; // Create bound functions for private event loop.

    _this.activeMouseUpCallback = _this.activeMouseUpCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.activeTouchEndCallback = _this.activeTouchEndCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.activeMouseDragCallback = _this.activeMouseDragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(FreehandRoiSculptorTool, [{
    key: "renderToolData",
    value: function renderToolData(evt) {
      var eventData = evt.detail;

      if (this.configuration.currentTool === null) {
        return false;
      }

      var element = eventData.element;
      var config = this.configuration;
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__["getToolState"])(element, this.referencedToolName);
      var data = toolState.data[config.currentTool];

      if (!data) {
        return false;
      }

      if (this._active) {
        var context = eventData.canvasContext.canvas.getContext('2d');
        var options = {
          color: this.configuration.dragColor,
          fill: null,
          handleRadius: this._toolSizeCanvas
        };
        Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_9__["default"])(context, eventData, this.configuration.mouseLocation.handles, options);
      } else if (this.configuration.showCursorOnHover && !this._recentTouchEnd) {
        this._renderHoverCursor(evt);
      }
    }
  }, {
    key: "doubleClickCallback",
    value: function doubleClickCallback(evt) {
      var eventData = evt.detail;

      this._selectFreehandTool(eventData);

      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(eventData.element);
    }
  }, {
    key: "doubleTapCallback",
    value: function doubleTapCallback(evt) {
      var eventData = evt.detail;

      this._selectFreehandTool(eventData);

      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(eventData.element);
    }
  }, {
    key: "preTouchStartCallback",
    value: function preTouchStartCallback(evt) {
      this._initialiseSculpting(evt);

      return true;
    }
    /**
     * Event handler for MOUSE_DOWN.
     *
     * @param {Object} evt - The event.
     * @returns {boolean}
     */

  }, {
    key: "preMouseDownCallback",
    value: function preMouseDownCallback(evt) {
      if (!this.options.mouseButtonMask.includes(evt.detail.buttons)) {
        return;
      }

      this._initialiseSculpting(evt);

      return true;
    }
    /**
     * Event handler for MOUSE_DRAG during the active loop.
     *
     * @event
     * @param {Object} evt - The event.
     * @returns {void}
     */

  }, {
    key: "activeMouseDragCallback",
    value: function activeMouseDragCallback(evt) {
      var config = this.configuration;

      if (!this._active) {
        return;
      }

      var eventData = evt.detail;
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__["getToolState"])(eventData.element, this.referencedToolName);

      if (!toolState) {
        return;
      }

      var points = toolState.data[config.currentTool].handles.points; // Set the mouseLocation handle

      this._getMouseLocation(eventData);

      this._sculpt(eventData, points); // Update the image


      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(eventData.element);
    }
    /**
     * Event handler for MOUSE_UP during the active loop.
     *
     * @param {Object} evt - The event.
     * @returns {void}
     */

  }, {
    key: "activeMouseUpCallback",
    value: function activeMouseUpCallback(evt) {
      this._activeEnd(evt);
    }
    /**
     * Event handler for TOUCH_END during the active loop.
     *
     * @param {Object} evt - The event.
     * @returns {void}
     */

  }, {
    key: "activeTouchEndCallback",
    value: function activeTouchEndCallback(evt) {
      this._activeEnd(evt);

      this._deselectAllTools(evt);

      this._recentTouchEnd = true;
    }
  }, {
    key: "_activeEnd",
    value: function _activeEnd(evt) {
      var eventData = evt.detail;
      var element = eventData.element;
      var config = this.configuration;
      this._active = false;
      _store_index_js__WEBPACK_IMPORTED_MODULE_10__["state"].isMultiPartToolActive = false;

      this._getMouseLocation(eventData);

      this._invalidateToolData(eventData);

      config.mouseUpRender = true;

      this._deactivateSculpt(element); // Update the image


      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(eventData.element);
      preventPropagation(evt);
    }
    /**
     * Renders the cursor
     *
     * @private
     * @param  {type} evt description
     * @returns {void}
     */

  }, {
    key: "_renderHoverCursor",
    value: function _renderHoverCursor(evt) {
      var eventData = evt.detail;
      var element = eventData.element;
      var context = eventData.canvasContext.canvas.getContext('2d');
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__["getToolState"])(element, this.referencedToolName);
      var data = toolState.data[this.configuration.currentTool];
      this._recentTouchEnd = false;
      var coords;

      if (this.configuration.mouseUpRender) {
        coords = this.configuration.mouseLocation.handles.start;
        this.configuration.mouseUpRender = false;
      } else {
        coords = _store_index_js__WEBPACK_IMPORTED_MODULE_10__["state"].mousePositionImage;
      }

      var freehandRoiTool = Object(_store_getToolForElement_js__WEBPACK_IMPORTED_MODULE_13__["default"])(element, this.referencedToolName);
      var radiusCanvas = freehandRoiTool.distanceFromPointCanvas(element, data, coords);
      this.configuration.mouseLocation.handles.start.x = coords.x;
      this.configuration.mouseLocation.handles.start.y = coords.y;

      if (this.configuration.limitRadiusOutsideRegion) {
        var unlimitedRadius = radiusCanvas;
        radiusCanvas = this._limitCursorRadiusCanvas(eventData, radiusCanvas); // Fade if distant

        if (unlimitedRadius > this.configuration.hoverCursorFadeDistance * radiusCanvas) {
          context.globalAlpha = this.configuration.hoverCursorFadeAlpha;
        }
      }

      var options = {
        fill: null,
        color: this.configuration.hoverColor,
        handleRadius: radiusCanvas
      };
      Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_9__["default"])(context, eventData, this.configuration.mouseLocation.handles, options);

      if (this.configuration.limitRadiusOutsideRegion) {
        context.globalAlpha = 1.0; // Reset drawing alpha for other draw calls.
      }
    }
    /**
     * Event handler for NEW_IMAGE event.
     *
     * @public
     * @param {Object} evt - The event.
     * @returns {void}
     */

  }, {
    key: "newImageCallback",
    value: function newImageCallback(evt) {
      this._deselectAllTools(evt);
    }
    /**
     * Event handler for switching mode to enabled.
     *
     * @public
     * @param {Object} evt - The event.
     * @returns {void}
     */

  }, {
    key: "enabledCallback",
    value: function enabledCallback(evt) {
      this._deselectAllTools(evt);
    }
    /**
     * Event handler for switching mode to passive.
     *
     * @public
     * @param {Object} evt - The event.
     * @returns {void}
     */

  }, {
    key: "passiveCallback",
    value: function passiveCallback(evt) {
      this._deselectAllTools(evt);
    }
    /**
     * Event handler for switching mode to disabled.
     *
     * @public
     * @param {Object} evt - The event.
     * @returns {void}
     */

  }, {
    key: "disabledCallback",
    value: function disabledCallback(evt) {
      this._deselectAllTools(evt);
    }
    /**
     * Select the freehand tool to be edited.
     *
     * @private
     * @param {Object} eventData - Data object associated with the event.
     * @returns {void}
     */

  }, {
    key: "_selectFreehandTool",
    value: function _selectFreehandTool(eventData) {
      var config = this.configuration;
      var element = eventData.element;

      var closestToolIndex = this._getClosestFreehandToolOnElement(element, eventData);

      if (closestToolIndex === undefined) {
        return;
      }

      config.currentTool = closestToolIndex;
      Object(_store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_15__["hideToolCursor"])(element);
    }
    /**
     * Activate the selected freehand tool and deactivate others.
     *
     * @private
     * @param {Object} element - The parent element of the freehand tool.
     * @param {Number} toolIndex - The ID of the freehand tool.
     * @returns {void}
     */

  }, {
    key: "_activateFreehandTool",
    value: function _activateFreehandTool(element, toolIndex) {
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__["getToolState"])(element, this.referencedToolName);
      var data = toolState.data;
      var config = this.configuration;
      config.currentTool = toolIndex;

      for (var i = 0; i < data.length; i++) {
        if (i === toolIndex) {
          data[i].active = true;
        } else {
          data[i].active = false;
        }
      }
    }
    /**
     * Choose the tool radius from the mouse position relative to the active freehand
     * tool, and begin sculpting.
     *
     * @private
     * @param {Object} evt - The event.
     * @returns {void}
     */

  }, {
    key: "_initialiseSculpting",
    value: function _initialiseSculpting(evt) {
      var eventData = evt.detail;
      var config = this.configuration;
      var element = eventData.element;

      if (config.currentTool === null) {
        this._selectFreehandTool(eventData);

        if (config.currentTool === null) {
          return;
        }
      }

      this._active = true; // Interupt event dispatcher

      _store_index_js__WEBPACK_IMPORTED_MODULE_10__["state"].isMultiPartToolActive = true;

      this._configureToolSize(eventData);

      this._getMouseLocation(eventData);

      this._activateFreehandTool(element, config.currentTool);

      this._activateSculpt(element);

      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(eventData.element);
    }
    /**
     * Sculpts the freehand ROI with the circular freehandSculpter tool, moving,
     * adding and removing handles as necessary.
     *
     * @private
     * @param {Object} eventData - Data object associated with the event.
     * @param {Object} points - Array of points.
     * @returns {void}
     */

  }, {
    key: "_sculpt",
    value: function _sculpt(eventData, points) {
      var config = this.configuration;
      this._sculptData = {
        element: eventData.element,
        image: eventData.image,
        mousePoint: eventData.currentPoints.image,
        points: points,
        toolSize: this._toolSizeImage,
        minSpacing: config.minSpacing,
        maxSpacing: Math.max(this._toolSizeImage, config.minSpacing * 2)
      }; // Push existing handles radially away from tool.

      var pushedHandles = this._pushHandles(); // Insert new handles in sparsely populated areas of the
      // Pushed part of the contour.


      if (pushedHandles.first !== undefined) {
        this._insertNewHandles(pushedHandles); // If any handles have been pushed very close together or even overlap,
        // Combine these into a single handle.


        this._consolidateHandles();
      }
    }
    /**
     * _pushHandles -Pushes the points radially away from the mouse if they are
     * contained within the circle defined by the freehandSculpter's toolSize and
     * the mouse position.
     *
     * @returns {Object}  The first and last pushedHandles.
     */

  }, {
    key: "_pushHandles",
    value: function _pushHandles() {
      var _this$_sculptData = this._sculptData,
          points = _this$_sculptData.points,
          mousePoint = _this$_sculptData.mousePoint,
          toolSize = _this$_sculptData.toolSize;
      var pushedHandles = {};

      for (var i = 0; i < points.length; i++) {
        var distanceToHandle = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstoneMath.point.distance(points[i], mousePoint);

        if (distanceToHandle > toolSize) {
          continue;
        } // Push point if inside circle, to edge of circle.


        this._pushOneHandle(i, distanceToHandle);

        if (pushedHandles.first === undefined) {
          pushedHandles.first = i;
          pushedHandles.last = i;
        } else {
          pushedHandles.last = i;
        }
      }

      return pushedHandles;
    }
    /**
     * Pushes one handle.
     *
     * @private
     * @param {number} i - The index of the handle to push.
     * @param {number} distanceToHandle - The distance between the mouse cursor and the handle.
     * @returns {void}
     */

  }, {
    key: "_pushOneHandle",
    value: function _pushOneHandle(i, distanceToHandle) {
      var _this$_sculptData2 = this._sculptData,
          points = _this$_sculptData2.points,
          mousePoint = _this$_sculptData2.mousePoint,
          toolSize = _this$_sculptData2.toolSize,
          image = _this$_sculptData2.image;
      var handle = points[i];
      var directionUnitVector = {
        x: (handle.x - mousePoint.x) / distanceToHandle,
        y: (handle.y - mousePoint.y) / distanceToHandle
      };
      var position = {
        x: mousePoint.x + toolSize * directionUnitVector.x,
        y: mousePoint.y + toolSize * directionUnitVector.y
      };
      Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_12__["clipToBox"])(position, image);
      handle.x = position.x;
      handle.y = position.y; // Push lines

      var lastHandleIndex = this.constructor._getPreviousHandleIndex(i, points.length);

      points[lastHandleIndex].lines.pop();
      points[lastHandleIndex].lines.push(handle);
    }
    /**
     * Inserts additional handles in sparsely sampled regions of the contour. The
     * new handles are placed on the circle defined by the the freehandSculpter's
     * toolSize and the mouse position.
     * @private
     * @param {Array} pushedHandles
     * @returns {void}
     */

  }, {
    key: "_insertNewHandles",
    value: function _insertNewHandles(pushedHandles) {
      var indiciesToInsertAfter = this._findNewHandleIndicies(pushedHandles);

      var newIndexModifier = 0;

      for (var i = 0; i < indiciesToInsertAfter.length; i++) {
        var insertIndex = indiciesToInsertAfter[i] + 1 + newIndexModifier;

        this._insertHandleRadially(insertIndex);

        newIndexModifier++;
      }
    }
    /**
     * Returns an array of indicies that describe where new handles should be
     * inserted (where the distance between subsequent handles is >
     * config.maxSpacing).
     *
     * @private
     * @param {Object} pushedHandles - The first and last handles that were pushed.
     * @returns {Object} An array of indicies that describe where new handles should be inserted.
     */

  }, {
    key: "_findNewHandleIndicies",
    value: function _findNewHandleIndicies(pushedHandles) {
      var _this$_sculptData3 = this._sculptData,
          points = _this$_sculptData3.points,
          maxSpacing = _this$_sculptData3.maxSpacing;
      var indiciesToInsertAfter = [];

      for (var i = pushedHandles.first; i <= pushedHandles.last; i++) {
        this._checkSpacing(i, points, indiciesToInsertAfter, maxSpacing);
      }

      var pointAfterLast = this.constructor._getNextHandleIndex(pushedHandles.last, points.length); // Check points before and after those pushed.


      if (pointAfterLast !== pushedHandles.first) {
        this._checkSpacing(pointAfterLast, points, indiciesToInsertAfter, maxSpacing);

        var pointBeforeFirst = this.constructor._getPreviousHandleIndex(pushedHandles.first, points.length);

        if (pointBeforeFirst !== pointAfterLast) {
          this._checkSpacing(pointBeforeFirst, points, indiciesToInsertAfter, maxSpacing);
        }
      }

      return indiciesToInsertAfter;
    }
    /**
     * _checkSpacing - description
     *@modifies indiciesToInsertAfter
     *
     * @param {number} i - The index to check.
     * @param {Object} points - The points.
     * @param {Array} indiciesToInsertAfter - The working list of indicies to insert new points after.
     * @param {number} maxSpacing
     * @returns {void}
     */

  }, {
    key: "_checkSpacing",
    value: function _checkSpacing(i, points, indiciesToInsertAfter, maxSpacing) {
      var nextHandleIndex = this.constructor._getNextHandleIndex(i, points.length);

      var distanceToNextHandle = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstoneMath.point.distance(points[i], points[nextHandleIndex]);

      if (distanceToNextHandle > maxSpacing) {
        indiciesToInsertAfter.push(i);
      }
    }
    /**
     * Inserts a handle on the surface of the circle defined by toolSize and the
     * mousePoint.
     *
     * @private
     * @param {number} insertIndex - The index to insert the new handle.
     * @returns {void}
     */

  }, {
    key: "_insertHandleRadially",
    value: function _insertHandleRadially(insertIndex) {
      var points = this._sculptData.points;
      var previousIndex = insertIndex - 1;

      var nextIndex = this.constructor._getNextHandleIndexBeforeInsert(insertIndex, points.length);

      var insertPosition = this._getInsertPosition(insertIndex, previousIndex, nextIndex);

      var handleData = new FreehandHandleData(insertPosition);
      points.splice(insertIndex, 0, handleData); // Add the line from the previous handle to the inserted handle (note the tool is now one increment longer)

      points[previousIndex].lines.pop();
      points[previousIndex].lines.push(points[insertIndex]);
      _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_17__["default"].addLine(points, insertIndex);
    }
    /**
     * Checks for any close points and consolidates these to a
     * single point.
     *
     * @private
     * @returns {void}
     */

  }, {
    key: "_consolidateHandles",
    value: function _consolidateHandles() {
      var points = this._sculptData.points; // Don't merge handles if it would destroy the polygon.

      if (points.length <= 3) {
        return;
      }

      var closePairs = this._findCloseHandlePairs();

      this._mergeCloseHandles(closePairs);
    }
    /**
     * Finds pairs of close handles with seperations < config.minSpacing. No handle
     * is included in more than one pair, to avoid spurious deletion of densely
     * populated regions of the contour (see mergeCloseHandles).
     *
     * @private
     * @returns {Array} An array of close pairs in points.
     */

  }, {
    key: "_findCloseHandlePairs",
    value: function _findCloseHandlePairs() {
      var _this$_sculptData4 = this._sculptData,
          points = _this$_sculptData4.points,
          minSpacing = _this$_sculptData4.minSpacing;
      var closePairs = [];
      var length = points.length;

      for (var i = 0; i < length; i++) {
        var nextHandleIndex = this.constructor._getNextHandleIndex(i, points.length);

        var distanceToNextHandle = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstoneMath.point.distance(points[i], points[nextHandleIndex]);

        if (distanceToNextHandle < minSpacing) {
          var pair = [i, nextHandleIndex];
          closePairs.push(pair); // Don't check last node if first in pair to avoid double counting.

          if (i === 0) {
            length -= 1;
          } // Don't double count pairs in order to prevent your polygon collapsing to a singularity.


          i++;
        }
      }

      return closePairs;
    }
    /**
     * Merges points given a list of close pairs. The points are merged in an
     * iterative fashion to prevent generating a singularity in some edge cases.
     *
     * @private
     * @param {Array} closePairs - An array of pairs of handle indicies.
     * @returns {void}
     */

  }, {
    key: "_mergeCloseHandles",
    value: function _mergeCloseHandles(closePairs) {
      var removedIndexModifier = 0;

      for (var i = 0; i < closePairs.length; i++) {
        var pair = this.constructor._getCorrectedPair(closePairs[i], removedIndexModifier);

        this._combineHandles(pair);

        removedIndexModifier++;
      } // Recursively remove problem childs


      var newClosePairs = this._findCloseHandlePairs();

      if (newClosePairs.length) {
        this._mergeCloseHandles(newClosePairs);
      }
    }
    /**
     * Combines two handles defined by the indicies in handlePairs.
     *
     * @private
     * @param {Object} handlePair - A pair of handle indicies.
     * @returns {void}
     */

  }, {
    key: "_combineHandles",
    value: function _combineHandles(handlePair) {
      var _this$_sculptData5 = this._sculptData,
          points = _this$_sculptData5.points,
          image = _this$_sculptData5.image; // Calculate combine position: half way between the handles.

      var midPoint = {
        x: (points[handlePair[0]].x + points[handlePair[1]].x) / 2.0,
        y: (points[handlePair[0]].y + points[handlePair[1]].y) / 2.0
      };
      Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_12__["clipToBox"])(midPoint, image); // Move first point to midpoint

      points[handlePair[0]].x = midPoint.x;
      points[handlePair[0]].y = midPoint.y; // Link first point to handle that second point links to.

      var handleAfterPairIndex = this.constructor._getNextHandleIndex(handlePair[1], points.length);

      points[handlePair[0]].lines.pop();
      points[handlePair[0]].lines.push(points[handleAfterPairIndex]); // Remove the latter handle

      points.splice(handlePair[1], 1);
    }
    /**
     * Calculates the distance to the closest handle in the tool, and stores the
     * result in this._toolSizeImage and this._toolSizeCanvas.
     *
     * @private
     * @param {Object} eventData - Data object associated with the event.
     * @returns {void}
     */

  }, {
    key: "_configureToolSize",
    value: function _configureToolSize(eventData) {
      var element = eventData.element;
      var config = this.configuration;
      var toolIndex = config.currentTool;
      var coords = eventData.currentPoints.image;
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__["getToolState"])(element, this.referencedToolName);
      var data = toolState.data[toolIndex];
      var freehandRoiTool = Object(_store_getToolForElement_js__WEBPACK_IMPORTED_MODULE_13__["default"])(element, this.referencedToolName);
      var radiusImage = freehandRoiTool.distanceFromPoint(element, data, coords);
      var radiusCanvas = freehandRoiTool.distanceFromPointCanvas(element, data, coords); // Check if should limit maximum size.

      if (config.limitRadiusOutsideRegion) {
        radiusImage = this._limitCursorRadiusImage(eventData, radiusImage);
        radiusCanvas = this._limitCursorRadiusCanvas(eventData, radiusCanvas);
      }

      this._toolSizeImage = radiusImage;
      this._toolSizeCanvas = radiusCanvas;
    }
    /**
     * Gets the current mouse location and stores it in the configuration object.
     *
     * @private
     * @param {Object} eventData - The data assoicated with the event.
     * @returns {void}
     */

  }, {
    key: "_getMouseLocation",
    value: function _getMouseLocation(eventData) {
      var config = this.configuration;
      config.mouseLocation.handles.start.x = eventData.currentPoints.image.x;
      config.mouseLocation.handles.start.y = eventData.currentPoints.image.y;
      Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_12__["clipToBox"])(config.mouseLocation.handles.start, eventData.image);
    }
    /**
     * Attaches event listeners to the element such that is is visible, modifiable, and new data can be created.
     *
     * @private
     * @param {Object} element - The viewport element to attach event listeners to.
     * @modifies {element}
     * @returns {void}
     */

  }, {
    key: "_activateSculpt",
    value: function _activateSculpt(element) {
      this._deactivateSculpt(element); // Begin activeMouseDragCallback loop - call activeMouseUpCallback at end of drag or straight away if just a click.


      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_UP, this.activeMouseUpCallback);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_CLICK, this.activeMouseUpCallback);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_DRAG, this.activeMouseDragCallback);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_END, this.activeTouchEndCallback);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_TAP, this.activeTouchEndCallback);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_DRAG, this.activeMouseDragCallback);
      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element);
    }
    /**
     * Removes event listeners from the element.
     *
     * @private
     * @param {Object} element - The viewport element to remove event listeners from.
     * @modifies {element}
     * @returns {void}
     */

  }, {
    key: "_deactivateSculpt",
    value: function _deactivateSculpt(element) {
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_UP, this.activeMouseUpCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_CLICK, this.activeMouseUpCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_DRAG, this.activeMouseDragCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_END, this.activeTouchEndCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_TAP, this.activeTouchEndCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_DRAG, this.activeMouseDragCallback);
      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element);
    }
    /**
     * Invalidate the freehand tool data, tirggering re-calculation of statistics.
     *
     * @private
     * @param {Object} eventData - Data object associated with the event.
     * @returns {void}
     */

  }, {
    key: "_invalidateToolData",
    value: function _invalidateToolData(eventData) {
      var config = this.configuration;
      var element = eventData.element;
      var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__["getToolState"])(element, this.referencedToolName);
      var data = toolData.data[config.currentTool];
      data.invalidated = true;
    }
    /**
     * Deactivates all freehand ROIs and change currentTool to null
     *
     * @private
     * @param {Object} evt - The event.
     * @returns {void}
     */
    // eslint-disable-next-line no-unused-vars

  }, {
    key: "_deselectAllTools",
    value: function _deselectAllTools(evt) {
      var config = this.configuration;
      var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__["getToolState"])(this.element, this.referencedToolName);
      config.currentTool = null;

      if (toolData) {
        for (var i = 0; i < toolData.data.length; i++) {
          toolData.data[i].active = false;
        }
      }

      Object(_store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_15__["setToolCursor"])(this.element, this.svgCursor);
      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(this.element);
    }
    /**
     * Given a pair of indicies, and the number of points already removed,
     * convert to the correct live indicies.
     *
     * @private
     * @static
     * @param {Object} pair A pairs of handle indicies.
     * @param {Number} removedIndexModifier The number of handles already removed.
     * @returns {Object} The corrected pair of handle indicies.
     */

  }, {
    key: "_limitCursorRadiusCanvas",

    /**
     * Limits the cursor radius so that it its maximum area is the same as the
     * ROI being sculpted (in canvas coordinates).
     *
     * @private
     * @param  {Object}  eventData    Data object associated with the event.
     * @param  {Number}  radiusCanvas The distance from the mouse to the ROI
     *                                in canvas coordinates.
     * @returns {Number}              The limited radius in canvas coordinates.
     */
    value: function _limitCursorRadiusCanvas(eventData, radiusCanvas) {
      return this._limitCursorRadius(eventData, radiusCanvas, true);
    }
    /**
     * Limits the cursor radius so that it its maximum area is the same as the
     * ROI being sculpted (in image coordinates).
     *
     * @private
     * @param  {Object}  eventData    Data object associated with the event.
     * @param  {Number}  radiusImage  The distance from the mouse to the ROI
     *                                in image coordinates.
     * @returns {Number}              The limited radius in image coordinates.
     */

  }, {
    key: "_limitCursorRadiusImage",
    value: function _limitCursorRadiusImage(eventData, radiusImage) {
      return this._limitCursorRadius(eventData, radiusImage, false);
    }
    /**
     * Limits the cursor radius so that it its maximum area is the same as the
     * ROI being sculpted.
     *
     * @private
     * @param  {Object}  eventData    Data object associated with the event.
     * @param  {Number}  radius       The distance from the mouse to the ROI.
     * @param  {Boolean} canvasCoords Whether the calculation should be performed
     *                                In canvas coordinates.
     * @returns {Number}              The limited radius.
     */

  }, {
    key: "_limitCursorRadius",
    value: function _limitCursorRadius(eventData, radius) {
      var canvasCoords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
      var element = eventData.element;
      var image = eventData.image;
      var config = this.configuration;
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__["getToolState"])(element, this.referencedToolName);
      var data = toolState.data[config.currentTool];
      var areaModifier = 1.0;

      if (canvasCoords) {
        var topLeft = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.pixelToCanvas(element, {
          x: 0,
          y: 0
        });
        var bottomRight = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.pixelToCanvas(element, {
          x: image.width,
          y: image.height
        });
        var canvasArea = (bottomRight.x - topLeft.x) * (bottomRight.y - topLeft.y);
        areaModifier = canvasArea / (image.width * image.height);
      }

      var area = data.area * areaModifier;
      var maxRadius = Math.pow(area / Math.PI, 0.5);
      return Math.min(radius, maxRadius);
    }
    /**
     * Finds the nearest handle to the mouse cursor for all freehand
     * data on the element.
     *
     * @private
     * @param {Object} element - The element.
     * @param {Object} eventData - Data object associated with the event.
     * @returns {Number} The tool index of the closest freehand tool.
     */

  }, {
    key: "_getClosestFreehandToolOnElement",
    value: function _getClosestFreehandToolOnElement(element, eventData) {
      var freehand = Object(_store_getToolForElement_js__WEBPACK_IMPORTED_MODULE_13__["default"])(element, this.referencedToolName);
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__["getToolState"])(element, this.referencedToolName);

      if (!toolState) {
        return;
      }

      var data = toolState.data;
      var pixelCoords = eventData.currentPoints.image;
      var closest = {
        distance: Infinity,
        toolIndex: null
      };

      for (var i = 0; i < data.length; i++) {
        var distanceFromToolI = freehand.distanceFromPoint(element, data[i], pixelCoords);

        if (distanceFromToolI === -1) {
          continue;
        }

        if (distanceFromToolI < closest.distance) {
          closest.distance = distanceFromToolI;
          closest.toolIndex = i;
        }
      }

      return closest.toolIndex;
    }
    /**
     * Returns the next handle index.
     *
     * @private
     * @static
     * @param {Number} i - The handle index.
     * @param {Number} length - The length of the polygon.
     * @returns {Number} The next handle index.
     */

  }, {
    key: "_getInsertPosition",

    /**
     * Calculates the position that a new handle should be inserted.
     *
     * @private
     * @static
     * @param {Number} insertIndex - The index to insert the new handle.
     * @param {Number} previousIndex - The previous index.
     * @param {Number} nextIndex - The next index.
     * @returns {Object} The position the handle should be inserted.
     */
    value: function _getInsertPosition(insertIndex, previousIndex, nextIndex) {
      var _this$_sculptData6 = this._sculptData,
          points = _this$_sculptData6.points,
          toolSize = _this$_sculptData6.toolSize,
          mousePoint = _this$_sculptData6.mousePoint,
          image = _this$_sculptData6.image; // Calculate insert position: half way between the handles, then pushed out
      // Radially to the edge of the freehandSculpter.

      var midPoint = {
        x: (points[previousIndex].x + points[nextIndex].x) / 2.0,
        y: (points[previousIndex].y + points[nextIndex].y) / 2.0
      };
      var distanceToMidPoint = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstoneMath.point.distance(mousePoint, midPoint);
      var insertPosition;

      if (distanceToMidPoint < toolSize) {
        var directionUnitVector = {
          x: (midPoint.x - mousePoint.x) / distanceToMidPoint,
          y: (midPoint.y - mousePoint.y) / distanceToMidPoint
        };
        insertPosition = {
          x: mousePoint.x + toolSize * directionUnitVector.x,
          y: mousePoint.y + toolSize * directionUnitVector.y
        };
      } else {
        insertPosition = midPoint;
      }

      Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_12__["clipToBox"])(insertPosition, image);
      return insertPosition;
    } // ===================================================================
    // Public Configuration API. .
    // ===================================================================

  }, {
    key: "minSpacing",
    get: function get() {
      return this.configuration.minSpacing;
    },
    set: function set(value) {
      if (typeof value !== 'number') {
        throw new Error('Attempting to set freehandSculpter minSpacing to a value other than a number.');
      }

      this.configuration.minSpacing = value;
    }
  }, {
    key: "maxSpacing",
    get: function get() {
      return this.configuration.maxSpacing;
    },
    set: function set(value) {
      if (typeof value !== 'number') {
        throw new Error('Attempting to set freehandSculpter maxSpacing to a value other than a number.');
      }

      this.configuration.maxSpacing = value;
    }
  }, {
    key: "showCursorOnHover",
    get: function get() {
      return this.configuration.showCursorOnHover;
    },
    set: function set(value) {
      if (typeof value !== 'boolean') {
        throw new Error('Attempting to set freehandSculpter showCursorOnHover to a value other than a boolean.');
      }

      this.configuration.showCursorOnHover = value;
      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(this.element);
    }
  }, {
    key: "limitRadiusOutsideRegion",
    get: function get() {
      return this.configuration.limitRadiusOutsideRegion;
    },
    set: function set(value) {
      if (typeof value !== 'boolean') {
        throw new Error('Attempting to set freehandSculpter limitRadiusOutsideRegion to a value other than a boolean.');
      }

      this.configuration.limitRadiusOutsideRegion = value;
      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(this.element);
    }
  }, {
    key: "hoverCursorFadeAlpha",
    get: function get() {
      return this.configuration.hoverCursorFadeAlpha;
    },
    set: function set(value) {
      if (typeof value !== 'number') {
        throw new Error('Attempting to set freehandSculpter hoverCursorFadeAlpha to a value other than a number.');
      } // Clamp the value from 0 to 1.


      value = Math.max(Math.min(value, 1.0), 0.0);
      this.configuration.hoverCursorFadeAlpha = value;
      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(this.element);
    }
  }, {
    key: "hoverCursorFadeDistance",
    get: function get() {
      return this.configuration.hoverCursorFadeDistance;
    },
    set: function set(value) {
      if (typeof value !== 'number') {
        throw new Error('Attempting to set freehandSculpter hoverCursorFadeDistance to a value other than a number.');
      } // Don't allow to fade a distances smaller than the tool's radius.


      value = Math.max(value, 1.0);
      this.configuration.hoverCursorFadeDistance = value;
      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(this.element);
    }
  }], [{
    key: "_getCorrectedPair",
    value: function _getCorrectedPair(pair, removedIndexModifier) {
      var correctedPair = [pair[0] - removedIndexModifier, pair[1] - removedIndexModifier]; // Deal with edge case of last node + first node.

      if (correctedPair[1] < 0) {
        correctedPair[1] = 0;
      }

      return correctedPair;
    }
  }, {
    key: "_getNextHandleIndex",
    value: function _getNextHandleIndex(i, length) {
      if (i === length - 1) {
        return 0;
      }

      return i + 1;
    }
    /**
     * Returns the previous handle index.
     *
     * @private
     * @static
     * @param {Number} i - The handle index.
     * @param {Number} length - The length of the polygon.
     * @returns {Number} The previous handle index.
     */

  }, {
    key: "_getPreviousHandleIndex",
    value: function _getPreviousHandleIndex(i, length) {
      if (i === 0) {
        return length - 1;
      }

      return i - 1;
    }
    /**
     * Returns the next handle index, with a correction considering a handle is
     * about to be inserted.
     *
     * @private
     * @static
     * @param {Number} insertIndex - The index in which the handle is being inserted.
     * @param {Number} length - The length of the polygon.
     * @returns {Number} The next handle index.
     */

  }, {
    key: "_getNextHandleIndexBeforeInsert",
    value: function _getNextHandleIndexBeforeInsert(insertIndex, length) {
      if (insertIndex === length) {
        return 0;
      } // Index correction here: The line bellow is correct, as we haven't inserted our handle yet!


      return insertIndex;
    }
  }]);

  return FreehandRoiSculptorTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_14__["default"]);
/**
 * Returns the default freehandRoiSculptorTool configuration.
 *
 * @returns {Object} The default configuration object.
 */




function getDefaultFreehandRoiSculptorToolConfiguration() {
  return {
    mouseLocation: {
      handles: {
        start: {
          highlight: true,
          active: true
        }
      }
    },
    minSpacing: 1,
    currentTool: null,
    dragColor: _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_8__["default"].getActiveColor(),
    hoverColor: _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_8__["default"].getToolColor(),

    /* --- Hover options ---
    showCursorOnHover:        Shows a preview of the sculpting radius on hover.
    limitRadiusOutsideRegion: Limit max toolsize outside the subject ROI based
                              on subject ROI area.
    hoverCursorFadeAlpha:     Alpha to fade to when tool very distant from
                              subject ROI.
    hoverCursorFadeDistance:  Distance from ROI in which to fade the hoverCursor
                              (in units of radii).
    */
    showCursorOnHover: true,
    limitRadiusOutsideRegion: true,
    hoverCursorFadeAlpha: 0.5,
    hoverCursorFadeDistance: 1.2
  };
}

function preventPropagation(evt) {
  evt.stopImmediatePropagation();
  evt.stopPropagation();
  evt.preventDefault();
}

/***/ }),

/***/ "./tools/MagnifyTool.js":
/*!******************************!*\
  !*** ./tools/MagnifyTool.js ***!
  \******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_773634__) {

"use strict";
__nested_webpack_require_773634__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_773634__.d(__nested_webpack_exports__, "default", function() { return MagnifyTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_773634__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_773634__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_773634__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_773634__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_773634__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_773634__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_773634__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_773634__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_773634__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_773634__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_773634__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__nested_webpack_require_773634__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_773634__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_773634__(/*! ../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_773634__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_773634__(/*! ../store/setToolCursor.js */ "./store/setToolCursor.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_773634__(/*! ./cursors/index.js */ "./tools/cursors/index.js");











/**
 * @public
 * @class MagnifyTool
 * @memberof Tools
 *
 * @classdesc Tool for inspecting a region at increased magnification.
 * @extends Tools.Base.BaseTool
 */

var MagnifyTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(MagnifyTool, _BaseTool);

  function MagnifyTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, MagnifyTool);

    var defaultProps = {
      name: 'Magnify',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      configuration: {
        magnifySize: 300,
        magnificationLevel: 2
      },
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_10__["magnifyCursor"]
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(MagnifyTool).call(this, props, defaultProps));
    _this.zoomCanvas = undefined;
    _this.zoomElement = undefined; // Mode Callbacks: (element, options)

    _this.activeCallback = _this._createMagnificationCanvas.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.enabledCallback = _this._createMagnificationCanvas.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.disabledCallback = _this._destroyMagnificationCanvas.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); // Touch

    _this.postTouchStartCallback = _this._addMagnifyingGlass.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.touchDragCallback = _this._updateMagnifyingGlass.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.touchEndCallback = _this._removeMagnifyingGlass.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.touchDragEndCallback = _this._removeMagnifyingGlass.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); // Mouse

    _this.postMouseDownCallback = _this._addMagnifyingGlass.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.mouseDragCallback = _this._updateMagnifyingGlass.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.mouseUpCallback = _this._removeMagnifyingGlass.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); // On quick clicks, mouseUp does not fire, but this does

    _this.mouseClickCallback = _this._removeMagnifyingGlass.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); // Misc

    _this.newImageCallback = _this._drawMagnificationTool.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(MagnifyTool, [{
    key: "_addMagnifyingGlass",
    value: function _addMagnifyingGlass(evt) {
      var _this2 = this;

      // Ignore until next event
      this._removeZoomElement();

      this._drawZoomedElement(evt); // On next frame


      window.requestAnimationFrame(function () {
        return _this2._drawMagnificationTool(evt);
      });
      Object(_store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_9__["hideToolCursor"])(evt.detail.element);
      evt.preventDefault();
      evt.stopPropagation();
    }
  }, {
    key: "_updateMagnifyingGlass",
    value: function _updateMagnifyingGlass(evt) {
      this._drawMagnificationTool(evt);

      evt.preventDefault();
      evt.stopPropagation();
    }
  }, {
    key: "_removeMagnifyingGlass",
    value: function _removeMagnifyingGlass(evt) {
      var element = evt.detail.element; // Re-enable the mouse cursor

      Object(_store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_9__["setToolCursor"])(this.element, this.svgCursor);
      element.querySelector('.magnifyTool').style.display = 'none';

      this._removeZoomElement();
    }
  }, {
    key: "_drawMagnificationTool",
    value: function _drawMagnificationTool(evt) {
      var element = evt.detail.element;
      var magnifyCanvas = element.querySelector('.magnifyTool');

      if (!magnifyCanvas) {
        this._createMagnificationCanvas(element);
      }

      if (this.zoomCanvas === undefined) {
        return;
      } // The 'not' magnifyTool class here is necessary because cornerstone places
      // No classes of it's own on the canvas we want to select


      var canvas = element.querySelector('canvas:not(.magnifyTool)');
      var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["getNewContext"])(magnifyCanvas); // Calculate the on-canvas location of the mouse pointer / touch

      var canvasLocation = _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.pixelToCanvas(evt.detail.element, evt.detail.currentPoints.image); // Shrink magnifier to smallest canvas dimension if smaller than desired magnifier size

      var magnifySize = Math.min(this.configuration.magnifySize, canvas.width, canvas.height);
      var magnificationLevel = this.configuration.magnificationLevel;
      magnifyCanvas.width = magnifySize;
      magnifyCanvas.height = magnifySize; // Constrain drag movement to zoomed image boundaries

      canvasLocation.x = Math.max(canvasLocation.x, 0.5 * magnifySize / magnificationLevel);
      canvasLocation.x = Math.min(canvasLocation.x, canvas.width - 0.5 * magnifySize / magnificationLevel);
      canvasLocation.y = Math.max(canvasLocation.y, 0.5 * magnifySize / magnificationLevel);
      canvasLocation.y = Math.min(canvasLocation.y, canvas.height - 0.5 * magnifySize / magnificationLevel);
      var copyFrom = {
        x: canvasLocation.x * magnificationLevel - 0.5 * magnifySize,
        y: canvasLocation.y * magnificationLevel - 0.5 * magnifySize
      };
      copyFrom.x = Math.max(copyFrom.x, 0);
      copyFrom.y = Math.max(copyFrom.y, 0);
      context.drawImage(this.zoomCanvas, copyFrom.x, copyFrom.y, magnifySize, magnifySize, 0, 0, magnifySize, magnifySize); // Place the magnification tool at the same location as the pointer

      var touchOffset = evt.detail.isTouchEvent ? 120 : 0;
      var magnifyPosition = {
        top: Math.max(canvasLocation.y - 0.5 * magnifySize - touchOffset, 0),
        left: Math.max(canvasLocation.x - 0.5 * magnifySize, 0)
      }; // Get full magnifier dimensions with borders

      var magnifierBox = magnifyCanvas.getBoundingClientRect(); // Constrain magnifier to canvas boundaries

      magnifyPosition.top = Math.min(magnifyPosition.top, canvas.height - magnifierBox.height);
      magnifyPosition.left = Math.min(magnifyPosition.left, canvas.width - magnifierBox.width);
      magnifyCanvas.style.top = "".concat(magnifyPosition.top, "px");
      magnifyCanvas.style.left = "".concat(magnifyPosition.left, "px");
      magnifyCanvas.style.display = 'block';
    }
    /**
     * Creates a cornerstone enabled element, and renders the target image at the
     * desired magnification level using it.
     *
     * @private
     * @param {*} evt
     * @returns {void}
     */

  }, {
    key: "_drawZoomedElement",
    value: function _drawZoomedElement(evt) {
      var element = evt.detail.element;
      var enabledElement = evt.detail.enabledElement;

      if (enabledElement === undefined) {
        enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.getEnabledElement(element);
      }

      var magnificationLevel = this.configuration.magnificationLevel;
      var origCanvas = enabledElement.canvas;
      var image = enabledElement.image; // Create a new cornerstone enabledElement

      if (!this.zoomElement) {
        this.zoomElement = document.createElement('div');
        this.zoomElement.width = origCanvas.width * magnificationLevel;
        this.zoomElement.height = origCanvas.height * magnificationLevel;
        _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.enable(this.zoomElement, enabledElement.options);
      }

      var zoomEnabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.getEnabledElement(this.zoomElement);
      var viewport = _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.getViewport(enabledElement.element);
      this.zoomCanvas = zoomEnabledElement.canvas;
      this.zoomCanvas.width = origCanvas.width * magnificationLevel;
      this.zoomCanvas.height = origCanvas.height * magnificationLevel;
      zoomEnabledElement.viewport = Object.assign({}, viewport); // Update it's viewport to render at desired magnification level

      viewport.scale *= magnificationLevel;
      _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.displayImage(this.zoomElement, image);
      _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.setViewport(this.zoomElement, viewport); // To do enable annotation tools for zoomElement
    }
    /**
     * Removes the canvas and associated enabled element that's
     * used to render the zoomed image.
     * @returns {void}
     */

  }, {
    key: "_removeZoomElement",
    value: function _removeZoomElement() {
      if (this.zoomElement !== undefined) {
        _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.disable(this.zoomElement);
        this.zoomElement = undefined;
        this.zoomCanvas = undefined;
      }
    }
    /**
     * The canvas used to render the zoomed image.
     * It will be displayed and clipped inside the magnifying glass frame/element.
     *
     * @private
     *
     * @param {*} element
     * @returns {void}
     */

  }, {
    key: "_createMagnificationCanvas",
    value: function _createMagnificationCanvas(element) {
      // If the magnifying glass canvas doesn't already exist
      if (element.querySelector('.magnifyTool') === null) {
        // Create a canvas and append it as a child to the element
        var magnifyCanvas = document.createElement('canvas'); // The magnifyTool class is used to find the canvas later on
        // Make sure position is absolute so the canvas can follow the mouse / touch

        magnifyCanvas.classList.add('magnifyTool');
        magnifyCanvas.width = this.configuration.magnifySize;
        magnifyCanvas.height = this.configuration.magnifySize;
        magnifyCanvas.style.position = 'absolute';
        magnifyCanvas.style.display = 'none';
        element.appendChild(magnifyCanvas);
      }
    }
    /**
     *
     *
     * @param {*} element
     * @returns {void}
     */

  }, {
    key: "_destroyMagnificationCanvas",
    value: function _destroyMagnificationCanvas(element) {
      var magnifyCanvas = element.querySelector('.magnifyTool');

      if (magnifyCanvas) {
        element.removeChild(magnifyCanvas);
      }
    }
  }]);

  return MagnifyTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_8__["default"]);



/***/ }),

/***/ "./tools/OrientationMarkersTool.js":
/*!*****************************************!*\
  !*** ./tools/OrientationMarkersTool.js ***!
  \*****************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_788793__) {

"use strict";
__nested_webpack_require_788793__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_788793__.d(__nested_webpack_exports__, "default", function() { return OrientationMarkersTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_788793__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_788793__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_788793__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_788793__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_788793__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_788793__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_788793__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_788793__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_788793__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_788793__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_788793__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_788793__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _orientation_index_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_788793__(/*! ../orientation/index.js */ "./orientation/index.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_788793__(/*! ../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_788793__(/*! ../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_788793__(/*! ../drawing/drawTextBox.js */ "./drawing/drawTextBox.js");







 // Drawing




/**
 * @public
 * @class OrientationMarkersTool
 * @memberof Tools
 *
 * @classdesc Tool for displaying orientation markers on the image.
 * @extends Tools.Base.BaseTool
 */

var OrientationMarkersTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(OrientationMarkersTool, _BaseTool);

  function OrientationMarkersTool() {
    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, OrientationMarkersTool);

    var defaultProps = {
      name: 'OrientationMarkers',
      configuration: {
        drawAllMarkers: true
      },
      mixins: ['enabledOrDisabledBinaryTool']
    };
    return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(OrientationMarkersTool).call(this, props, defaultProps));
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(OrientationMarkersTool, [{
    key: "enabledCallback",
    value: function enabledCallback(element) {
      this.forceImageUpdate(element);
    }
  }, {
    key: "disabledCallback",
    value: function disabledCallback(element) {
      this.forceImageUpdate(element);
    }
  }, {
    key: "forceImageUpdate",
    value: function forceImageUpdate(element) {
      var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone;
      var enabledElement = cornerstone.getEnabledElement(element);

      if (enabledElement.image) {
        cornerstone.updateImage(element);
      }
    }
  }, {
    key: "renderToolData",
    value: function renderToolData(evt) {
      var eventData = evt.detail;
      var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_8__["getNewContext"])(eventData.canvasContext.canvas);
      var element = eventData.element;
      var markers = getOrientationMarkers(element);

      if (!markers) {
        return;
      }

      var coords = getOrientationMarkerPositions(element, markers);
      var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getToolColor();
      var textWidths = {
        top: Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__["textBoxWidth"])(context, markers.top, 0),
        left: Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__["textBoxWidth"])(context, markers.left, 0),
        right: Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__["textBoxWidth"])(context, markers.right, 0),
        bottom: Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__["textBoxWidth"])(context, markers.bottom, 0),
        height: Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__["textBoxWidth"])(context, 'M', 0) // Trick to get an approximation of the height of the text

      };
      drawTopLeftText(context, markers, coords, textWidths, color);

      if (this.configuration.drawAllMarkers) {
        drawBottomRightText(context, markers, coords, textWidths, color);
      }
    }
  }]);

  return OrientationMarkersTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);



var drawTopLeftText = function drawTopLeftText(context, markers, coords, textWidths, color) {
  Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__["default"])(context, markers.top, coords.top.x - textWidths.top / 2, coords.top.y, color);
  Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__["default"])(context, markers.left, coords.left.x - textWidths.left / 2, coords.left.y, color);
};

var drawBottomRightText = function drawBottomRightText(context, markers, coords, textWidths, color) {
  Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__["default"])(context, markers.right, coords.right.x - textWidths.right, coords.right.y, color);
  Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__["default"])(context, markers.bottom, coords.bottom.x - textWidths.bottom / 2, coords.bottom.y - textWidths.height, color);
};

var getOrientationMarkers = function getOrientationMarkers(element) {
  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone;
  var enabledElement = cornerstone.getEnabledElement(element);
  var imagePlane = cornerstone.metaData.get('imagePlaneModule', enabledElement.image.imageId);

  if (!imagePlane || !imagePlane.rowCosines || !imagePlane.columnCosines) {
    return;
  }

  var row = _orientation_index_js__WEBPACK_IMPORTED_MODULE_7__["default"].getOrientationString(imagePlane.rowCosines);
  var column = _orientation_index_js__WEBPACK_IMPORTED_MODULE_7__["default"].getOrientationString(imagePlane.columnCosines);
  var oppositeRow = _orientation_index_js__WEBPACK_IMPORTED_MODULE_7__["default"].invertOrientationString(row);
  var oppositeColumn = _orientation_index_js__WEBPACK_IMPORTED_MODULE_7__["default"].invertOrientationString(column);
  return {
    top: oppositeColumn,
    bottom: column,
    left: oppositeRow,
    right: row
  };
};

var getOrientationMarkerPositions = function getOrientationMarkerPositions(element) {
  var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.getEnabledElement(element);
  var top = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, {
    x: enabledElement.image.width / 2,
    y: 5
  });
  var bottom = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, {
    x: enabledElement.image.width / 2,
    y: enabledElement.image.height - 15
  });
  var left = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, {
    x: 5,
    y: enabledElement.image.height / 2
  });
  var right = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, {
    x: enabledElement.image.width - 10,
    y: enabledElement.image.height / 2
  });
  return {
    top: top,
    bottom: bottom,
    left: left,
    right: right
  };
};

/***/ }),

/***/ "./tools/OverlayTool.js":
/*!******************************!*\
  !*** ./tools/OverlayTool.js ***!
  \******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_798453__) {

"use strict";
__nested_webpack_require_798453__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_798453__.d(__nested_webpack_exports__, "default", function() { return OverlayTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_798453__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_798453__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_798453__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_798453__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_798453__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_798453__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_798453__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_798453__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_798453__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_798453__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _store_index__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_798453__(/*! ../store/index */ "./store/index.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_798453__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_798453__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");








var globalConfiguration = _store_index__WEBPACK_IMPORTED_MODULE_5__["modules"].globalConfiguration;
/**
 *
 * http://dicom.nema.org/dicom/2013/output/chtml/part03/sect_C.9.html
 *
 * @public
 * @class Overlay
 * @memberof Tools
 *
 * @classdesc Tool for displaying a scale overlay on the image.  Uses viewport.overlayColor to set the default colour.
 * @extends Tools.Base.BaseTool
 */

var OverlayTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(OverlayTool, _BaseTool);

  function OverlayTool() {
    var _this;

    var configuration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, OverlayTool);

    var defaultConfig = {
      name: 'Overlay',
      configuration: {},
      mixins: ['enabledOrDisabledBinaryTool']
    };
    var initialConfiguration = Object.assign(defaultConfig, configuration);
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(OverlayTool).call(this, initialConfiguration));
    _this.initialConfiguration = initialConfiguration;
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(OverlayTool, [{
    key: "enabledCallback",
    value: function enabledCallback(element) {
      this.forceImageUpdate(element);
    }
  }, {
    key: "disabledCallback",
    value: function disabledCallback(element) {
      this.forceImageUpdate(element);
    }
  }, {
    key: "forceImageUpdate",
    value: function forceImageUpdate(element) {
      var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.getEnabledElement(element);

      if (enabledElement.image) {
        _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.updateImage(element);
      }
    }
  }, {
    key: "setupRender",
    value: function setupRender(image) {
      if (!image) {
        return;
      }

      var overlayPlaneMetadata = _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.metaData.get('overlayPlaneModule', image.imageId);

      if (!overlayPlaneMetadata || !overlayPlaneMetadata.overlays || !overlayPlaneMetadata.overlays.length) {
        return;
      }

      return overlayPlaneMetadata;
    }
  }, {
    key: "setupViewport",
    value: function setupViewport(viewport) {
      if (viewport.overlayColor === undefined) {
        viewport.overlayColor = globalConfiguration.configuration.overlayColor || 'white';
      } // Allow turning off overlays by setting overlayColor to false


      if (viewport.overlayColor === false) {
        return;
      }

      return true;
    }
  }, {
    key: "renderToolData",
    value: function renderToolData(evt) {
      var eventData = evt.detail;
      var enabledElement = eventData.enabledElement,
          image = eventData.image,
          viewport = eventData.viewport,
          canvasContext = eventData.canvasContext;
      var overlayPlaneMetadata = this.setupRender(image);

      if (!eventData || !enabledElement || !overlayPlaneMetadata) {
        return;
      }

      if (!this.setupViewport(viewport)) {
        return;
      }

      var imageWidth = image.columns;
      var imageHeight = image.rows;
      overlayPlaneMetadata.overlays.forEach(function (overlay) {
        if (overlay.visible === false) {
          return;
        }

        var layerCanvas = document.createElement('canvas');
        layerCanvas.width = imageWidth;
        layerCanvas.height = imageHeight;
        var layerContext = layerCanvas.getContext('2d');
        layerContext.fillStyle = overlay.fillStyle || viewport.overlayColor;

        if (overlay.type === 'R') {
          layerContext.fillRect(0, 0, layerCanvas.width, layerCanvas.height);
          layerContext.globalCompositeOperation = 'xor';
        }

        var i = 0;

        for (var y = 0; y < overlay.rows; y++) {
          for (var x = 0; x < overlay.columns; x++) {
            if (overlay.pixelData[i++] > 0) {
              layerContext.fillRect(x, y, 1, 1);
            }
          }
        } // Guard against non-number values


        var overlayX = !isNaN(parseFloat(overlay.x)) && isFinite(overlay.x) ? overlay.x : 0;
        var overlayY = !isNaN(parseFloat(overlay.y)) && isFinite(overlay.y) ? overlay.y : 0; // Draw the overlay layer onto the canvas

        canvasContext.drawImage(layerCanvas, overlayX, overlayY);
      });
    }
  }]);

  return OverlayTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__["default"]);



/***/ }),

/***/ "./tools/PanMultiTouchTool.js":
/*!************************************!*\
  !*** ./tools/PanMultiTouchTool.js ***!
  \************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_806196__) {

"use strict";
__nested_webpack_require_806196__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_806196__.d(__nested_webpack_exports__, "default", function() { return PanMultiTouchTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_806196__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_806196__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_806196__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_806196__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_806196__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_806196__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_806196__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_806196__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_806196__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_806196__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_806196__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__nested_webpack_require_806196__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_806196__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_806196__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");








/**
 * @public
 * @class PanMultiTouchTool
 * @memberof Tools
 *
 * @classdesc Tool for panning the image using multi-touch.
 * @extends Tools.Base.BaseTool
 */

var PanMultiTouchTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(PanMultiTouchTool, _BaseTool);

  function PanMultiTouchTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, PanMultiTouchTool);

    var defaultProps = {
      name: 'PanMultiTouch',
      supportedInteractionTypes: ['MultiTouch'],
      configuration: {
        touchPointers: 2
      }
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(PanMultiTouchTool).call(this, props, defaultProps)); // Touch

    _this.multiTouchDragCallback = _this._dragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(PanMultiTouchTool, [{
    key: "_dragCallback",
    value: function _dragCallback(evt) {
      var eventData = evt.detail;
      var element = eventData.element,
          viewport = eventData.viewport;

      if (eventData.numPointers === this.configuration.touchPointers) {
        var translation = this._getTranslation(eventData);

        this._applyTranslation(viewport, translation);

        _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.setViewport(element, viewport);
      }
    }
  }, {
    key: "_getTranslation",
    value: function _getTranslation(eventData) {
      var viewport = eventData.viewport,
          image = eventData.image,
          deltaPoints = eventData.deltaPoints;
      var widthScale = viewport.scale;
      var heightScale = viewport.scale;

      if (image.rowPixelSpacing < image.columnPixelSpacing) {
        widthScale *= image.columnPixelSpacing / image.rowPixelSpacing;
      } else if (image.columnPixelSpacing < image.rowPixelSpacing) {
        heightScale *= image.rowPixelSpacing / image.columnPixelSpacing;
      }

      return {
        x: deltaPoints.page.x / widthScale,
        y: deltaPoints.page.y / heightScale
      };
    }
  }, {
    key: "_applyTranslation",
    value: function _applyTranslation(viewport, translation) {
      viewport.translation.x += translation.x;
      viewport.translation.y += translation.y;
    }
  }]);

  return PanMultiTouchTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__["default"]);



/***/ }),

/***/ "./tools/PanTool.js":
/*!**************************!*\
  !*** ./tools/PanTool.js ***!
  \**************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_812273__) {

"use strict";
__nested_webpack_require_812273__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_812273__.d(__nested_webpack_exports__, "default", function() { return PanTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_812273__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_812273__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_812273__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_812273__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_812273__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_812273__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_812273__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_812273__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_812273__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_812273__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_812273__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__nested_webpack_require_812273__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_812273__(/*! ./../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_812273__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_812273__(/*! ./cursors/index.js */ "./tools/cursors/index.js");









/**
 * @public
 * @class PanTool
 * @memberof Tools
 *
 * @classdesc Tool for panning the image.
 * @extends Tools.Base.BaseTool
 */

var PanTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(PanTool, _BaseTool);

  function PanTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, PanTool);

    var defaultProps = {
      name: 'Pan',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_8__["panCursor"]
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(PanTool).call(this, props, defaultProps)); // Touch

    _this.touchDragCallback = _this._dragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); // Mouse

    _this.mouseDragCallback = _this._dragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(PanTool, [{
    key: "_dragCallback",
    value: function _dragCallback(evt) {
      var eventData = evt.detail;
      var element = eventData.element,
          viewport = eventData.viewport;

      var translation = this._getTranslation(eventData);

      this._applyTranslation(viewport, translation);

      _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.setViewport(element, viewport);
    }
  }, {
    key: "_getTranslation",
    value: function _getTranslation(eventData) {
      var viewport = eventData.viewport,
          image = eventData.image,
          deltaPoints = eventData.deltaPoints;
      var widthScale = viewport.scale;
      var heightScale = viewport.scale;

      if (image.rowPixelSpacing < image.columnPixelSpacing) {
        widthScale *= image.columnPixelSpacing / image.rowPixelSpacing;
      } else if (image.columnPixelSpacing < image.rowPixelSpacing) {
        heightScale *= image.rowPixelSpacing / image.columnPixelSpacing;
      }

      return {
        x: deltaPoints.page.x / widthScale,
        y: deltaPoints.page.y / heightScale
      };
    }
  }, {
    key: "_applyTranslation",
    value: function _applyTranslation(viewport, translation) {
      viewport.translation.x += translation.x;
      viewport.translation.y += translation.y;
    }
  }]);

  return PanTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__["default"]);



/***/ }),

/***/ "./tools/ReferenceLinesTool.js":
/*!*************************************!*\
  !*** ./tools/ReferenceLinesTool.js ***!
  \*************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_818520__) {

"use strict";
__nested_webpack_require_818520__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_818520__.d(__nested_webpack_exports__, "default", function() { return ReferenceLinesTool; });
/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_818520__(/*! @babel/runtime/regenerator */ "../node_modules/@babel/runtime/regenerator/index.js");
/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_818520__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_818520__(/*! @babel/runtime/helpers/asyncToGenerator */ "../node_modules/@babel/runtime/helpers/asyncToGenerator.js");
/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_818520__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_818520__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_818520__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_818520__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_818520__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_818520__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_818520__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_818520__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__nested_webpack_require_818520__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_818520__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__nested_webpack_require_818520__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_818520__(/*! ./../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_818520__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_818520__(/*! ../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _referenceLines_renderActiveReferenceLine_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_818520__(/*! ./referenceLines/renderActiveReferenceLine.js */ "./tools/referenceLines/renderActiveReferenceLine.js");
/* harmony import */ var _util_wait_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_818520__(/*! ../util/wait.js */ "./util/wait.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_818520__(/*! ../util/logger.js */ "./util/logger.js");













var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_12__["getLogger"])('tools:ReferenceLinesTool');
/**
 * When enabled, this tool will display references lines for each source
 * enabledElement in the provided synchronizer. This tool can also be configured
 * to use a custom renderer for alternative reference line rendering behavior
 *
 * TODO: Need to watch for configuration changes to update ToolState
 * TODO:
 *
 * @export @public @class
 * @name ReferenceLinesTool
 * @classdesc Tool for displaying reference lines of other enabledElements
 * @extends Tools.Base.BaseTool
 */

var ReferenceLinesTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(ReferenceLinesTool, _BaseTool);

  function ReferenceLinesTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, ReferenceLinesTool);

    var defaultProps = {
      name: 'ReferenceLines',
      mixins: ['enabledOrDisabledBinaryTool'],
      configuration: {
        renderer: _referenceLines_renderActiveReferenceLine_js__WEBPACK_IMPORTED_MODULE_10__["default"]
      }
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(ReferenceLinesTool).call(this, props, defaultProps));
    _this.renderer = null;
    _this.synchronizationContext = null;
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(ReferenceLinesTool, [{
    key: "enabledCallback",
    value: function () {
      var _enabledCallback = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(
      /*#__PURE__*/
      _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee(element) {
        var _ref,
            synchronizationContext,
            renderer,
            enabledElement,
            _args = arguments;

        return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee$(_context) {
          while (1) {
            switch (_context.prev = _context.next) {
              case 0:
                _ref = _args.length > 1 && _args[1] !== undefined ? _args[1] : {}, synchronizationContext = _ref.synchronizationContext;
                renderer = this.configuration.renderer;
                _context.next = 4;
                return Object(_util_wait_js__WEBPACK_IMPORTED_MODULE_11__["waitForEnabledElementImageToLoad"])(element);

              case 4:
                enabledElement = _context.sent;

                if (!(!enabledElement || !renderer || !synchronizationContext)) {
                  _context.next = 8;
                  break;
                }

                // TODO: Unable to add tool state, image never loaded.
                // Should we `setToolDisabledForElement` here?
                logger.warn("Unable to enable ".concat(this.name, ". Exiting enable callback. Tool will be enabled, but will not render."));
                return _context.abrupt("return");

              case 8:
                this.renderer = renderer;
                this.synchronizationContext = synchronizationContext;
                this.forceImageUpdate(element);

              case 11:
              case "end":
                return _context.stop();
            }
          }
        }, _callee, this);
      }));

      function enabledCallback(_x) {
        return _enabledCallback.apply(this, arguments);
      }

      return enabledCallback;
    }()
  }, {
    key: "disabledCallback",
    value: function disabledCallback(element) {
      this.forceImageUpdate(element);
    }
  }, {
    key: "forceImageUpdate",
    value: function forceImageUpdate(element) {
      var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.getEnabledElement(element);

      if (enabledElement.image) {
        _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element);
      }
    }
  }, {
    key: "renderToolData",
    value: function renderToolData(evt) {
      var _this2 = this;

      var eventData = evt.detail; // No renderer or synch context? Adios

      if (!this.renderer || !this.synchronizationContext) {
        return;
      } // Get the enabled elements associated with this synchronization context and draw them


      var enabledElements = this.synchronizationContext.getSourceElements();
      var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_9__["getNewContext"])(eventData.canvasContext.canvas);
      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.setToPixelCoordinateSystem(eventData.enabledElement, context);
      enabledElements.forEach(function (referenceEnabledElement) {
        // Don't draw ourselves
        if (referenceEnabledElement === evt.currentTarget) {
          return;
        } // Render it


        _this2.renderer(context, eventData, evt.currentTarget, referenceEnabledElement);
      });
    }
  }]);

  return ReferenceLinesTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_8__["default"]);



/***/ }),

/***/ "./tools/RotateTool.js":
/*!*****************************!*\
  !*** ./tools/RotateTool.js ***!
  \*****************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_828166__) {

"use strict";
__nested_webpack_require_828166__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_828166__.d(__nested_webpack_exports__, "default", function() { return RotateTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_828166__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_828166__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_828166__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_828166__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_828166__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_828166__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_828166__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_828166__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_828166__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_828166__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_828166__(/*! ./../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_828166__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _util_angleBetweenPoints_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_828166__(/*! ../util/angleBetweenPoints.js */ "./util/angleBetweenPoints.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_828166__(/*! ./cursors/index.js */ "./tools/cursors/index.js");









/**
 * @public
 * @class RotateTool
 * @memberof Tools
 *
 * @classdesc Tool for rotating the image.
 * @extends Tools.Base.BaseTool
 */

var RotateTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(RotateTool, _BaseTool);

  function RotateTool() {
    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, RotateTool);

    var defaultProps = {
      name: 'Rotate',
      strategies: {
        default: defaultStrategy,
        horizontal: horizontalStrategy,
        vertical: verticalStrategy
      },
      defaultStrategy: 'default',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      configuration: {
        roundAngles: false,
        flipHorizontal: false,
        flipVertical: false,
        rotateScale: 1
      },
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_8__["rotateCursor"]
    };
    return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(RotateTool).call(this, props, defaultProps));
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(RotateTool, [{
    key: "touchDragCallback",
    value: function touchDragCallback(evt) {
      this.dragCallback(evt);
    }
  }, {
    key: "mouseDragCallback",
    value: function mouseDragCallback(evt) {
      this.dragCallback(evt);
    }
  }, {
    key: "postMouseDownCallback",
    value: function postMouseDownCallback(evt) {
      this.initialRotation = evt.detail.viewport.rotation;
    }
  }, {
    key: "dragCallback",
    value: function dragCallback(evt) {
      evt.detail.viewport.initialRotation = this.initialRotation;
      this.applyActiveStrategy(evt);
      _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.setViewport(evt.detail.element, evt.detail.viewport);
    }
  }]);

  return RotateTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);



function defaultStrategy(evt) {
  var _this$configuration = this.configuration,
      roundAngles = _this$configuration.roundAngles,
      rotateScale = _this$configuration.rotateScale;
  var _evt$detail = evt.detail,
      element = _evt$detail.element,
      viewport = _evt$detail.viewport,
      startPoints = _evt$detail.startPoints,
      currentPoints = _evt$detail.currentPoints;
  var initialRotation = viewport.initialRotation ? viewport.initialRotation : viewport.rotation; // Calculate the center of the image

  var rect = element.getBoundingClientRect(element);
  var width = element.clientWidth,
      height = element.clientHeight;
  var scale = viewport.scale,
      translation = viewport.translation;
  var centerPoints = {
    x: rect.left + width / 2 + translation.x * scale,
    y: rect.top + height / 2 + translation.y * scale
  };
  var angleInfo = Object(_util_angleBetweenPoints_js__WEBPACK_IMPORTED_MODULE_7__["default"])(centerPoints, startPoints.client, currentPoints.client);
  angleInfo.angle *= rotateScale;

  if (roundAngles) {
    angleInfo.angle = Math.ceil(angleInfo.angle);
  }

  if (angleInfo.direction < 0) {
    angleInfo.angle = -angleInfo.angle;
  }

  viewport.rotation = initialRotation + angleInfo.angle;
}

function horizontalStrategy(evt) {
  var _this$configuration2 = this.configuration,
      roundAngles = _this$configuration2.roundAngles,
      flipHorizontal = _this$configuration2.flipHorizontal,
      rotateScale = _this$configuration2.rotateScale;
  var _evt$detail2 = evt.detail,
      viewport = _evt$detail2.viewport,
      startPoints = _evt$detail2.startPoints,
      currentPoints = _evt$detail2.currentPoints;
  var initialRotation = viewport.initialRotation;
  var initialPointX = startPoints.client.x;
  var currentPointX = currentPoints.client.x;
  var angle = (currentPointX - initialPointX) * rotateScale;

  if (roundAngles) {
    angle = Math.round(Math.abs(angle)) * (angle > 0 ? 1 : -1);
  }

  if (flipHorizontal) {
    angle = -angle;
  }

  viewport.rotation = initialRotation + angle;
}

function verticalStrategy(evt) {
  var _this$configuration3 = this.configuration,
      roundAngles = _this$configuration3.roundAngles,
      flipVertical = _this$configuration3.flipVertical,
      rotateScale = _this$configuration3.rotateScale;
  var _evt$detail3 = evt.detail,
      viewport = _evt$detail3.viewport,
      startPoints = _evt$detail3.startPoints,
      currentPoints = _evt$detail3.currentPoints;
  var initialRotation = viewport.initialRotation;
  var initialPointY = startPoints.client.y;
  var currentPointY = currentPoints.client.y;
  var angle = (currentPointY - initialPointY) * rotateScale;

  if (roundAngles) {
    angle = Math.round(Math.abs(angle)) * (angle > 0 ? 1 : -1);
  }

  if (flipVertical) {
    angle = -angle;
  }

  viewport.rotation = initialRotation + angle;
}

/***/ }),

/***/ "./tools/RotateTouchTool.js":
/*!**********************************!*\
  !*** ./tools/RotateTouchTool.js ***!
  \**********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_836380__) {

"use strict";
__nested_webpack_require_836380__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_836380__.d(__nested_webpack_exports__, "default", function() { return RotateTouchTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_836380__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_836380__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_836380__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_836380__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_836380__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_836380__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_836380__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_836380__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_836380__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_836380__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_836380__(/*! ./../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_836380__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");







/**
 * @public
 * @class RotateTouchTool
 * @memberof Tools
 *
 * @classdesc Tool for rotating the image using touch.
 * @extends Tools.Base.BaseTool
 */

var RotateTouchTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(RotateTouchTool, _BaseTool);

  function RotateTouchTool() {
    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, RotateTouchTool);

    var defaultProps = {
      name: 'RotateTouch',
      supportedInteractionTypes: ['TouchRotate']
    };
    return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(RotateTouchTool).call(this, props, defaultProps));
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(RotateTouchTool, [{
    key: "touchRotateCallback",
    value: function touchRotateCallback(evt) {
      var eventData = evt.detail;
      var element = eventData.element,
          viewport = eventData.viewport,
          rotation = eventData.rotation;
      viewport.rotation += rotation;
      _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.setViewport(element, viewport);
    }
  }]);

  return RotateTouchTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);



/***/ }),

/***/ "./tools/ScaleOverlayTool.js":
/*!***********************************!*\
  !*** ./tools/ScaleOverlayTool.js ***!
  \***********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_840755__) {

"use strict";
__nested_webpack_require_840755__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_840755__.d(__nested_webpack_exports__, "default", function() { return ScaleOverlayTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_840755__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_840755__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_840755__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_840755__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_840755__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_840755__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_840755__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_840755__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_840755__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_840755__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_840755__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_840755__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_840755__(/*! ../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_840755__(/*! ../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js");
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_840755__(/*! ../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_840755__(/*! ../util/logger.js */ "./util/logger.js");






 // Drawing





var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_10__["getLogger"])('tools:ScaleOverlayTool');
/**
 * @public
 * @class ScaleOverlayTool
 * @memberof Tools
 *
 * @classdesc Tool for displaying a scale overlay on the image.
 * @extends Tools.Base.BaseTool
 */

var ScaleOverlayTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(ScaleOverlayTool, _BaseTool);

  function ScaleOverlayTool() {
    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ScaleOverlayTool);

    var defaultProps = {
      name: 'ScaleOverlay',
      configuration: {
        minorTickLength: 12.5,
        majorTickLength: 25
      },
      mixins: ['enabledOrDisabledBinaryTool']
    };
    return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(ScaleOverlayTool).call(this, props, defaultProps));
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ScaleOverlayTool, [{
    key: "enabledCallback",
    value: function enabledCallback(element) {
      this.forceImageUpdate(element);
    }
  }, {
    key: "disabledCallback",
    value: function disabledCallback(element) {
      this.forceImageUpdate(element);
    }
  }, {
    key: "forceImageUpdate",
    value: function forceImageUpdate(element) {
      var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.getEnabledElement(element);

      if (enabledElement.image) {
        _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element);
      }
    }
  }, {
    key: "renderToolData",
    value: function renderToolData(evt) {
      var eventData = evt.detail;
      var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["getNewContext"])(eventData.canvasContext.canvas);
      var image = eventData.image,
          viewport = eventData.viewport,
          element = eventData.element;
      var rowPixelSpacing = image.rowPixelSpacing;
      var colPixelSpacing = image.columnPixelSpacing;
      var imagePlane = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.metaData.get('imagePlaneModule', image.imageId);

      if (imagePlane) {
        rowPixelSpacing = imagePlane.rowPixelSpacing || imagePlane.rowImagePixelSpacing;
        colPixelSpacing = imagePlane.columnPixelSpacing || imagePlane.colImagePixelSpacing;
      } // Check whether pixel spacing is defined


      if (!rowPixelSpacing || !colPixelSpacing) {
        logger.warn("unable to define rowPixelSpacing or colPixelSpacing from data on ".concat(this.name, "'s renderToolData"));
        return;
      }

      var canvasSize = {
        width: context.canvas.width,
        height: context.canvas.height
      }; // Distance between intervals is 10mm

      var verticalIntervalScale = 10.0 / rowPixelSpacing * viewport.scale;
      var horizontalIntervalScale = 10.0 / colPixelSpacing * viewport.scale; // 0.1 and 0.05 gives margin to horizontal and vertical lines

      var hscaleBounds = computeScaleBounds(canvasSize, 0.25, 0.05);
      var vscaleBounds = computeScaleBounds(canvasSize, 0.05, 0.15);

      if (!canvasSize.width || !canvasSize.height || !hscaleBounds || !vscaleBounds) {
        return;
      }

      var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getToolColor();
      var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getToolWidth();
      var imageAttributes = Object.assign({}, {
        hscaleBounds: hscaleBounds,
        vscaleBounds: vscaleBounds,
        verticalMinorTick: verticalIntervalScale,
        horizontalMinorTick: horizontalIntervalScale,
        verticalLine: {
          start: {
            x: vscaleBounds.bottomRight.x,
            y: vscaleBounds.topLeft.y
          },
          end: {
            x: vscaleBounds.bottomRight.x,
            y: vscaleBounds.bottomRight.y
          }
        },
        horizontalLine: {
          start: {
            x: hscaleBounds.topLeft.x,
            y: hscaleBounds.bottomRight.y
          },
          end: {
            x: hscaleBounds.bottomRight.x,
            y: hscaleBounds.bottomRight.y
          }
        },
        color: color,
        lineWidth: lineWidth
      }, this.configuration);
      Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["draw"])(context, function (context) {
        Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["setShadow"])(context, imageAttributes); // Draw vertical line

        Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawLine"])(context, element, imageAttributes.verticalLine.start, imageAttributes.verticalLine.end, {
          color: imageAttributes.color,
          lineWidth: imageAttributes.lineWidth
        }, 'canvas');
        drawVerticalScalebarIntervals(context, element, imageAttributes); // Draw horizontal line

        Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawLine"])(context, element, imageAttributes.horizontalLine.start, imageAttributes.horizontalLine.end, {
          color: imageAttributes.color,
          lineWidth: imageAttributes.lineWidth
        }, 'canvas');
        drawHorizontalScalebarIntervals(context, element, imageAttributes);
      });
    }
  }]);

  return ScaleOverlayTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);
/**
 * Computes the max bound for scales on the image
 * @param  {{width: number, height: number}} canvasSize
 * @param  {number} horizontalReduction
 * @param  {number} verticalReduction
 * @returns {Object.<string, { x:number, y:number }>}
 */




var computeScaleBounds = function computeScaleBounds(canvasSize, horizontalReduction, verticalReduction) {
  var hReduction = horizontalReduction * Math.min(1000, canvasSize.width);
  var vReduction = verticalReduction * Math.min(1000, canvasSize.height);
  var canvasBounds = {
    left: hReduction,
    top: vReduction,
    width: canvasSize.width - 2 * hReduction,
    height: canvasSize.height - 2 * vReduction
  };
  return {
    topLeft: {
      x: canvasBounds.left,
      y: canvasBounds.top
    },
    bottomRight: {
      x: canvasBounds.left + canvasBounds.width,
      y: canvasBounds.top + canvasBounds.height
    }
  };
};
/**
 * @param {CanvasRenderingContext2D} context
 * @param {HTMLElement} element
 * @param {Object} imageAttributes
 * @returns {void}
 */


var drawVerticalScalebarIntervals = function drawVerticalScalebarIntervals(context, element, imageAttributes) {
  var i = 0;

  while (imageAttributes.verticalLine.start.y + i * imageAttributes.verticalMinorTick <= imageAttributes.vscaleBounds.bottomRight.y) {
    var color = imageAttributes.color,
        lineWidth = imageAttributes.lineWidth;
    var startPoint = {
      x: imageAttributes.verticalLine.start.x,
      y: imageAttributes.verticalLine.start.y + i * imageAttributes.verticalMinorTick
    };
    var endPoint = {
      x: 0,
      y: imageAttributes.verticalLine.start.y + i * imageAttributes.verticalMinorTick
    };

    if (i % 5 === 0) {
      endPoint.x = imageAttributes.verticalLine.start.x - imageAttributes.majorTickLength;
    } else {
      endPoint.x = imageAttributes.verticalLine.start.x - imageAttributes.minorTickLength;
    }

    Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawLine"])(context, element, startPoint, endPoint, {
      color: color,
      lineWidth: lineWidth
    }, 'canvas');
    i++;
  }
};
/**
 * @param {CanvasRenderingContext2D} context
 * @param {HTMLElement} element
 * @param {Object} imageAttributes
 * @returns {void}
 */


var drawHorizontalScalebarIntervals = function drawHorizontalScalebarIntervals(context, element, imageAttributes) {
  var i = 0;

  while (imageAttributes.horizontalLine.start.x + i * imageAttributes.horizontalMinorTick <= imageAttributes.hscaleBounds.bottomRight.x) {
    var color = imageAttributes.color,
        lineWidth = imageAttributes.lineWidth;
    var startPoint = {
      x: imageAttributes.horizontalLine.start.x + i * imageAttributes.horizontalMinorTick,
      y: imageAttributes.horizontalLine.start.y
    };
    var endPoint = {
      x: imageAttributes.horizontalLine.start.x + i * imageAttributes.horizontalMinorTick,
      y: 0
    };

    if (i % 5 === 0) {
      endPoint.y = imageAttributes.horizontalLine.start.y - imageAttributes.majorTickLength;
    } else {
      endPoint.y = imageAttributes.horizontalLine.start.y - imageAttributes.minorTickLength;
    }

    Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawLine"])(context, element, startPoint, endPoint, {
      color: color,
      lineWidth: lineWidth
    }, 'canvas');
    i++;
  }
};

/***/ }),

/***/ "./tools/StackScrollMouseWheelTool.js":
/*!********************************************!*\
  !*** ./tools/StackScrollMouseWheelTool.js ***!
  \********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_853250__) {

"use strict";
__nested_webpack_require_853250__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_853250__.d(__nested_webpack_exports__, "default", function() { return StackScrollMouseWheelTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_853250__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_853250__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_853250__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_853250__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_853250__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_853250__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_853250__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_853250__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_853250__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_853250__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_853250__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _util_scroll_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_853250__(/*! ../util/scroll.js */ "./util/scroll.js");







/**
 * @public
 * @class StackScrollMouseWheelTool
 * @memberof Tools
 *
 * @classdesc Tool for scrolling through a series using the mouse wheel.
 * @extends Tools.Base.BaseTool
 */

var StackScrollMouseWheelTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(StackScrollMouseWheelTool, _BaseTool);

  function StackScrollMouseWheelTool() {
    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, StackScrollMouseWheelTool);

    var defaultProps = {
      name: 'StackScrollMouseWheel',
      supportedInteractionTypes: ['MouseWheel'],
      configuration: {
        loop: false,
        allowSkipping: true,
        invert: false
      }
    };
    return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(StackScrollMouseWheelTool).call(this, props, defaultProps));
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(StackScrollMouseWheelTool, [{
    key: "mouseWheelCallback",
    value: function mouseWheelCallback(evt) {
      var _evt$detail = evt.detail,
          images = _evt$detail.direction,
          element = _evt$detail.element;
      var _this$configuration = this.configuration,
          loop = _this$configuration.loop,
          allowSkipping = _this$configuration.allowSkipping,
          invert = _this$configuration.invert;
      var direction = invert ? -images : images;
      Object(_util_scroll_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element, direction, loop, allowSkipping);
    }
  }]);

  return StackScrollMouseWheelTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_5__["default"]);



/***/ }),

/***/ "./tools/StackScrollMultiTouchTool.js":
/*!********************************************!*\
  !*** ./tools/StackScrollMultiTouchTool.js ***!
  \********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_858047__) {

"use strict";
__nested_webpack_require_858047__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_858047__.d(__nested_webpack_exports__, "default", function() { return StackScrollMultiTouchTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_858047__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_858047__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_858047__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_858047__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_858047__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_858047__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_858047__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_858047__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_858047__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_858047__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_858047__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__nested_webpack_require_858047__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_858047__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _util_scroll_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_858047__(/*! ../util/scroll.js */ "./util/scroll.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_858047__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _toolOptions_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_858047__(/*! ../toolOptions.js */ "./toolOptions.js");










/**
 * @public
 * @class StackScrollMultiTouchTool
 * @memberof Tools
 *
 * @classdesc Tool for scrolling through a series using multi-touch.
 * @extends Tools.Base.BaseTool
 */

var StackScrollMultiTouchTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(StackScrollMultiTouchTool, _BaseTool);

  function StackScrollMultiTouchTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, StackScrollMultiTouchTool);

    var defaultProps = {
      name: 'StackScrollMultiTouch',
      supportedInteractionTypes: ['MultiTouch'],
      configuration: {
        loop: false,
        allowSkipping: true,
        touchPointers: 3
      }
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(StackScrollMultiTouchTool).call(this, props, defaultProps));
    _this.multiTouchDragCallback = _this._dragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(StackScrollMultiTouchTool, [{
    key: "_dragCallback",
    value: function _dragCallback(evt) {
      var eventData = evt.detail;

      if (eventData.numPointers === this.configuration.touchPointers) {
        var element = eventData.element,
            deltaPoints = eventData.deltaPoints;
        var _this$configuration = this.configuration,
            loop = _this$configuration.loop,
            allowSkipping = _this$configuration.allowSkipping;
        var options = Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_9__["getToolOptions"])(this.name, element);

        var pixelsPerImage = this._getPixelPerImage(element);

        var deltaY = this._getDeltaY(element, deltaPoints.page.y);

        if (!pixelsPerImage) {
          return;
        }

        if (Math.abs(deltaY) >= pixelsPerImage) {
          var imageIdIndexOffset = Math.round(deltaY / pixelsPerImage);
          Object(_util_scroll_js__WEBPACK_IMPORTED_MODULE_7__["default"])(element, imageIdIndexOffset, loop, allowSkipping);
          options.deltaY = deltaY % pixelsPerImage;
        } else {
          options.deltaY = deltaY;
        }

        Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_9__["setToolOptions"])(this.name, element, options);
      }
    }
  }, {
    key: "_getDeltaY",
    value: function _getDeltaY(element, deltaPointsY) {
      var options = Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_9__["getToolOptions"])(this.name, element);
      var deltaY = options.deltaY || 0;
      return deltaY + deltaPointsY;
    }
  }, {
    key: "_getPixelPerImage",
    value: function _getPixelPerImage(element) {
      var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__["getToolState"])(element, 'stack');

      if (!toolData || !toolData.data || !toolData.data.length) {
        return;
      }

      var stackData = toolData.data[0];
      var stackScrollSpeed = this.configuration.stackScrollSpeed; // The Math.max here makes it easier to mouseDrag-scroll small or really large image stacks

      return stackScrollSpeed || Math.max(2, element.offsetHeight / Math.max(stackData.imageIds.length, 8));
    }
  }]);

  return StackScrollMultiTouchTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);



/***/ }),

/***/ "./tools/StackScrollTool.js":
/*!**********************************!*\
  !*** ./tools/StackScrollTool.js ***!
  \**********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_865319__) {

"use strict";
__nested_webpack_require_865319__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_865319__.d(__nested_webpack_exports__, "default", function() { return StackScrollTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_865319__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_865319__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_865319__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_865319__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_865319__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_865319__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_865319__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_865319__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_865319__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_865319__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_865319__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__nested_webpack_require_865319__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_865319__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _util_scroll_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_865319__(/*! ../util/scroll.js */ "./util/scroll.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_865319__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _toolOptions_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_865319__(/*! ../toolOptions.js */ "./toolOptions.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_865319__(/*! ./cursors/index.js */ "./tools/cursors/index.js");











/**
 * @public
 * @class StackScrollTool
 * @memberof Tools
 *
 * @classdesc Tool for scrolling through a series.
 * @extends Tools.Base.BaseTool
 */

var StackScrollTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(StackScrollTool, _BaseTool);

  function StackScrollTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, StackScrollTool);

    var defaultProps = {
      name: 'StackScroll',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      configuration: {
        loop: false,
        allowSkipping: true
      },
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_10__["stackScrollCursor"]
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(StackScrollTool).call(this, props, defaultProps));
    _this.mouseDragCallback = _this._dragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.touchDragCallback = _this._dragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(StackScrollTool, [{
    key: "_dragCallback",
    value: function _dragCallback(evt) {
      var eventData = evt.detail;
      var element = eventData.element,
          deltaPoints = eventData.deltaPoints;
      var _this$configuration = this.configuration,
          loop = _this$configuration.loop,
          allowSkipping = _this$configuration.allowSkipping;
      var options = Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_9__["getToolOptions"])(this.name, element);

      var pixelsPerImage = this._getPixelPerImage(element);

      var deltaY = this._getDeltaY(element, deltaPoints.page.y);

      if (!pixelsPerImage) {
        return;
      }

      if (Math.abs(deltaY) >= pixelsPerImage) {
        var imageIdIndexOffset = Math.round(deltaY / pixelsPerImage);
        Object(_util_scroll_js__WEBPACK_IMPORTED_MODULE_7__["default"])(element, imageIdIndexOffset, loop, allowSkipping);
        options.deltaY = deltaY % pixelsPerImage;
      } else {
        options.deltaY = deltaY;
      }

      Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_9__["setToolOptions"])(this.name, element, options);
    }
  }, {
    key: "_getDeltaY",
    value: function _getDeltaY(element, deltaPointsY) {
      var options = Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_9__["getToolOptions"])(this.name, element);
      var deltaY = options.deltaY || 0;
      return deltaY + deltaPointsY;
    }
  }, {
    key: "_getPixelPerImage",
    value: function _getPixelPerImage(element) {
      var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__["getToolState"])(element, 'stack');

      if (!toolData || !toolData.data || !toolData.data.length) {
        return;
      }

      var stackData = toolData.data[0];
      var stackScrollSpeed = this.configuration.stackScrollSpeed; // The Math.max here makes it easier to mouseDrag-scroll small or really large image stacks

      return stackScrollSpeed || Math.max(2, element.offsetHeight / Math.max(stackData.imageIds.length, 8));
    }
  }]);

  return StackScrollTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);



/***/ }),

/***/ "./tools/WwwcRegionTool.js":
/*!*********************************!*\
  !*** ./tools/WwwcRegionTool.js ***!
  \*********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_872709__) {

"use strict";
__nested_webpack_require_872709__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_872709__.d(__nested_webpack_exports__, "default", function() { return WwwcRegionTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_872709__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_872709__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_872709__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_872709__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_872709__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_872709__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_872709__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_872709__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_872709__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_872709__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_872709__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__nested_webpack_require_872709__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_872709__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_872709__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_872709__(/*! ../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_872709__(/*! ../util/clip.js */ "./util/clip.js");
/* harmony import */ var _util_getLuminance_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_872709__(/*! ../util/getLuminance.js */ "./util/getLuminance.js");
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_872709__(/*! ../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_872709__(/*! ./cursors/index.js */ "./tools/cursors/index.js");







 // Drawing






/**
 * @public
 * @class WwwcRegionTool
 * @memberof Tools
 *
 * @classdesc Tool for setting wwwc based on a rectangular region.
 * @extends Tools.Base.BaseTool
 */

var WwwcRegionTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(WwwcRegionTool, _BaseTool);

  /** @inheritdoc */
  function WwwcRegionTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, WwwcRegionTool);

    var defaultProps = {
      name: 'WwwcRegion',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      configuration: {
        minWindowWidth: 10
      },
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_12__["wwwcRegionCursor"]
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(WwwcRegionTool).call(this, props, defaultProps));

    _this._resetHandles(); //
    // Touch
    //

    /** @inheritdoc */


    _this.postTouchStartCallback = _this._startOutliningRegion.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    /** @inheritdoc */

    _this.touchDragCallback = _this._setHandlesAndUpdate.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    /** @inheritdoc */

    _this.touchEndCallback = _this._applyStrategy.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); //
    // MOUSE
    //

    /** @inheritdoc */

    _this.postMouseDownCallback = _this._startOutliningRegion.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    /** @inheritdoc */

    _this.mouseClickCallback = _this._startOutliningRegion.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    /** @inheritdoc */

    _this.mouseDragCallback = _this._setHandlesAndUpdate.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    /** @inheritdoc */

    _this.mouseMoveCallback = _this._setHandlesAndUpdate.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    /** @inheritdoc */

    _this.mouseUpCallback = _this._applyStrategy.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    return _this;
  }
  /**
   * Render hook: draws the WWWCRegion's "box" when selecting
   *
   * @param {Cornerstone.event#cornerstoneimagerendered} evt cornerstoneimagerendered event
   * @memberof Tools.WwwcRegionTool
   * @returns {void}
   */


  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(WwwcRegionTool, [{
    key: "renderToolData",
    value: function renderToolData(evt) {
      var _this2 = this;

      var eventData = evt.detail;
      var element = eventData.element;
      var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_11__["default"].getColorIfActive({
        active: true
      });
      var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_8__["getNewContext"])(eventData.canvasContext.canvas);
      Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_8__["draw"])(context, function (context) {
        Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_8__["drawRect"])(context, element, _this2.handles.start, _this2.handles.end, {
          color: color
        });
      });
    }
    /**
     * Sets the start handle point and claims the eventDispatcher event
     *
     * @private
     * @param {*} evt // mousedown, touchstart, click
     * @returns {Boolean} True
     */

  }, {
    key: "_startOutliningRegion",
    value: function _startOutliningRegion(evt) {
      var consumeEvent = true;
      var element = evt.detail.element;
      var image = evt.detail.currentPoints.image;

      if (_isEmptyObject(this.handles.start)) {
        this.handles.start = image;
      } else {
        this.handles.end = image;

        this._applyStrategy(evt);
      }

      _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.updateImage(element);
      return consumeEvent;
    }
    /**
     * This function will update the handles and updateImage to force re-draw
     *
     * @private
     * @method _setHandlesAndUpdate
     * @param {(CornerstoneTools.event#TOUCH_DRAG|CornerstoneTools.event#MOUSE_DRAG|CornerstoneTools.event#MOUSE_MOVE)} evt  Interaction event emitted by an enabledElement
     * @returns {void}
     */

  }, {
    key: "_setHandlesAndUpdate",
    value: function _setHandlesAndUpdate(evt) {
      var element = evt.detail.element;
      var image = evt.detail.currentPoints.image;
      this.handles.end = image;
      _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.updateImage(element);
    }
    /**
     * Event handler for MOUSE_UP/TOUCH_END during handle drag event loop.
     *
     * @private
     * @method _applyStrategy
     * @param {(CornerstoneTools.event#MOUSE_UP|CornerstoneTools.event#TOUCH_END)} evt Interaction event emitted by an enabledElement
     * @returns {void}
     */

  }, {
    key: "_applyStrategy",
    value: function _applyStrategy(evt) {
      if (_isEmptyObject(this.handles.start) || _isEmptyObject(this.handles.end)) {
        return;
      }

      evt.detail.handles = this.handles;

      _applyWWWCRegion(evt, this.configuration);

      this._resetHandles();
    }
    /**
     * Sets the start and end handle points to empty objects
     *
     * @private
     * @method _resetHandles
     * @returns {undefined}
     */

  }, {
    key: "_resetHandles",
    value: function _resetHandles() {
      this.handles = {
        start: {},
        end: {}
      };
    }
  }]);

  return WwwcRegionTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__["default"]);
/**
 * Helper to determine if an object has no keys and is the correct type (is empty)
 *
 * @private
 * @function _isEmptyObject
 * @param {Object} obj The object to check
 * @returns {Boolean} true if the object is empty
 */




var _isEmptyObject = function _isEmptyObject(obj) {
  return Object.keys(obj).length === 0 && obj.constructor === Object;
};
/**
 * Calculates the minimum and maximum value in the given pixel array
 * and updates the viewport of the element in the event.
 *
 * @private
 * @method _applyWWWCRegion
 * @param {(CornerstoneTools.event#MOUSE_UP|CornerstoneTools.event#TOUCH_END)} evt Interaction event emitted by an enabledElement
 * @param {Object} config The tool's configuration object
 * @returns {void}
 */


var _applyWWWCRegion = function _applyWWWCRegion(evt, config) {
  var eventData = evt.detail;
  var image = eventData.image,
      element = eventData.element;
  var _evt$detail$handles = evt.detail.handles,
      startPoint = _evt$detail$handles.start,
      endPoint = _evt$detail$handles.end; // Get the rectangular region defined by the handles

  var left = Math.min(startPoint.x, endPoint.x);
  var top = Math.min(startPoint.y, endPoint.y);
  var width = Math.abs(startPoint.x - endPoint.x);
  var height = Math.abs(startPoint.y - endPoint.y); // Bound the rectangle so we don't get undefined pixels

  left = Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_9__["default"])(left, 0, image.width);
  top = Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_9__["default"])(top, 0, image.height);
  width = Math.floor(Math.min(width, Math.abs(image.width - left)));
  height = Math.floor(Math.min(height, Math.abs(image.height - top))); // Get the pixel data in the rectangular region

  var pixelLuminanceData = Object(_util_getLuminance_js__WEBPACK_IMPORTED_MODULE_10__["default"])(element, left, top, width, height); // Calculate the minimum and maximum pixel values

  var minMaxMean = _calculateMinMaxMean(pixelLuminanceData, image.minPixelValue, image.maxPixelValue); // Adjust the viewport window width and center based on the calculated values


  var viewport = eventData.viewport;

  if (config.minWindowWidth === undefined) {
    config.minWindowWidth = 10;
  }

  viewport.voi.windowWidth = Math.max(Math.abs(minMaxMean.max - minMaxMean.min), config.minWindowWidth);
  viewport.voi.windowCenter = minMaxMean.mean; // Unset any existing VOI LUT

  viewport.voiLUT = undefined;
  _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.setViewport(element, viewport);
  _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.updateImage(element);
};
/**
 * Calculates the minimum, maximum, and mean value in the given pixel array
 *
 * @private
 * @method _calculateMinMaxMean
 * @param {number[]} pixelLuminance array of pixel luminance values
 * @param {number} globalMin starting "min" valie
 * @param {bumber} globalMax starting "max" value
 * @returns {Object} {min: number, max: number, mean: number }
 */


var _calculateMinMaxMean = function _calculateMinMaxMean(pixelLuminance, globalMin, globalMax) {
  var numPixels = pixelLuminance.length;
  var min = globalMax;
  var max = globalMin;
  var sum = 0;

  if (numPixels < 2) {
    return {
      min: min,
      max: max,
      mean: (globalMin + globalMax) / 2
    };
  }

  for (var index = 0; index < numPixels; index++) {
    var spv = pixelLuminance[index];
    min = Math.min(min, spv);
    max = Math.max(max, spv);
    sum += spv;
  }

  return {
    min: min,
    max: max,
    mean: sum / numPixels
  };
};

/***/ }),

/***/ "./tools/WwwcTool.js":
/*!***************************!*\
  !*** ./tools/WwwcTool.js ***!
  \***************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_886427__) {

"use strict";
__nested_webpack_require_886427__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_886427__.d(__nested_webpack_exports__, "default", function() { return WwwcTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_886427__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_886427__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_886427__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_886427__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_886427__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_886427__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_886427__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_886427__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_886427__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_886427__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_886427__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_886427__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_886427__(/*! ./cursors/index.js */ "./tools/cursors/index.js");








/**
 * @public
 * @class WwwcTool
 * @memberof Tools
 *
 * @classdesc Tool for setting wwwc by dragging with mouse/touch.
 * @extends Tools.Base.BaseTool
 */

var WwwcTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(WwwcTool, _BaseTool);

  function WwwcTool() {
    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, WwwcTool);

    var defaultProps = {
      name: 'Wwwc',
      strategies: {
        basicLevelingStrategy: basicLevelingStrategy
      },
      supportedInteractionTypes: ['Mouse', 'Touch'],
      configuration: {
        orientation: 0
      },
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_7__["wwwcCursor"]
    };
    return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(WwwcTool).call(this, props, defaultProps));
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(WwwcTool, [{
    key: "mouseDragCallback",
    value: function mouseDragCallback(evt) {
      this.applyActiveStrategy(evt);
      _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.setViewport(evt.detail.element, evt.detail.viewport);
    }
  }, {
    key: "touchDragCallback",
    value: function touchDragCallback(evt) {
      // Prevent CornerstoneToolsTouchStartActive from killing any press events
      evt.stopImmediatePropagation();
      this.applyActiveStrategy(evt);
      _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.setViewport(evt.detail.element, evt.detail.viewport);
    }
  }]);

  return WwwcTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);
/**
 * Here we normalize the ww/wc adjustments so the same number of on screen pixels
 * adjusts the same percentage of the dynamic range of the image.  This is needed to
 * provide consistency for the ww/wc tool regardless of the dynamic range (e.g. an 8 bit
 * image will feel the same as a 16 bit image would)
 *
 * @param {Object} evt
 * @param {Object} { orienttion }
 * @returns {void}
 */




function basicLevelingStrategy(evt) {
  var orientation = this.configuration.orientation;
  var eventData = evt.detail;
  var maxVOI = eventData.image.maxPixelValue * eventData.image.slope + eventData.image.intercept;
  var minVOI = eventData.image.minPixelValue * eventData.image.slope + eventData.image.intercept;
  var imageDynamicRange = maxVOI - minVOI;
  var multiplier = imageDynamicRange / 1024;
  var deltaX = eventData.deltaPoints.page.x * multiplier;
  var deltaY = eventData.deltaPoints.page.y * multiplier;

  if (orientation === 0) {
    eventData.viewport.voi.windowWidth += deltaX;
    eventData.viewport.voi.windowCenter += deltaY;
  } else {
    eventData.viewport.voi.windowWidth += deltaY;
    eventData.viewport.voi.windowCenter += deltaX;
  } // Unset any existing VOI LUT


  eventData.viewport.voiLUT = undefined;
}

/***/ }),

/***/ "./tools/ZoomMouseWheelTool.js":
/*!*************************************!*\
  !*** ./tools/ZoomMouseWheelTool.js ***!
  \*************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_892594__) {

"use strict";
__nested_webpack_require_892594__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_892594__.d(__nested_webpack_exports__, "default", function() { return ZoomMouseWheelTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_892594__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_892594__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_892594__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_892594__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_892594__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_892594__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_892594__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_892594__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_892594__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_892594__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_892594__(/*! ./../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_892594__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _util_zoom_index_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_892594__(/*! ../util/zoom/index.js */ "./util/zoom/index.js");








/**
 * @public
 * @class ZoomMouseWheelTool
 * @memberof Tools
 *
 * @classdesc Tool for changing magnification with the mouse wheel.
 * @extends Tools.Base.BaseTool
 */

var ZoomMouseWheelTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(ZoomMouseWheelTool, _BaseTool);

  function ZoomMouseWheelTool() {
    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ZoomMouseWheelTool);

    var defaultProps = {
      name: 'ZoomMouseWheel',
      supportedInteractionTypes: ['MouseWheel'],
      configuration: {
        minScale: 0.25,
        maxScale: 20.0,
        invert: false
      }
    };
    return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(ZoomMouseWheelTool).call(this, props, defaultProps));
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ZoomMouseWheelTool, [{
    key: "mouseWheelCallback",
    value: function mouseWheelCallback(evt) {
      var _evt$detail = evt.detail,
          element = _evt$detail.element,
          viewport = _evt$detail.viewport,
          spinY = _evt$detail.spinY;
      var _this$configuration = this.configuration,
          invert = _this$configuration.invert,
          maxScale = _this$configuration.maxScale,
          minScale = _this$configuration.minScale;
      var ticks = invert ? spinY / 4 : -spinY / 4;
      var updatedViewport = Object(_util_zoom_index_js__WEBPACK_IMPORTED_MODULE_7__["changeViewportScale"])(viewport, ticks, {
        maxScale: maxScale,
        minScale: minScale
      });
      _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.setViewport(element, updatedViewport);
    }
  }]);

  return ZoomMouseWheelTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);



/***/ }),

/***/ "./tools/ZoomTool.js":
/*!***************************!*\
  !*** ./tools/ZoomTool.js ***!
  \***************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_897646__) {

"use strict";
__nested_webpack_require_897646__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_897646__.d(__nested_webpack_exports__, "default", function() { return ZoomTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_897646__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_897646__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_897646__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_897646__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_897646__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_897646__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_897646__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_897646__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_897646__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_897646__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_897646__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_897646__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_897646__(/*! ../util/clip.js */ "./util/clip.js");
/* harmony import */ var _util_zoom_index_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_897646__(/*! ../util/zoom/index.js */ "./util/zoom/index.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_897646__(/*! ./cursors/index.js */ "./tools/cursors/index.js");










var correctShift = _util_zoom_index_js__WEBPACK_IMPORTED_MODULE_8__["default"].correctShift,
    changeViewportScale = _util_zoom_index_js__WEBPACK_IMPORTED_MODULE_8__["default"].changeViewportScale;
/**
 * @public
 * @class ZoomTool
 * @memberof Tools
 *
 * @classdesc Tool for changing magnification.
 * @extends Tools.Base.BaseTool
 */

var ZoomTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(ZoomTool, _BaseTool);

  function ZoomTool() {
    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ZoomTool);

    var defaultProps = {
      name: 'Zoom',
      strategies: {
        default: defaultStrategy,
        translate: translateStrategy,
        zoomToCenter: zoomToCenterStrategy
      },
      defaultStrategy: 'default',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      configuration: {
        invert: false,
        preventZoomOutsideImage: false,
        minScale: 0.25,
        maxScale: 20.0
      },
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_9__["zoomCursor"]
    };
    return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(ZoomTool).call(this, props, defaultProps));
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ZoomTool, [{
    key: "touchDragCallback",
    value: function touchDragCallback(evt) {
      dragCallback.call(this, evt);
    }
  }, {
    key: "mouseDragCallback",
    value: function mouseDragCallback(evt) {
      dragCallback.call(this, evt);
    }
  }]);

  return ZoomTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);



var dragCallback = function dragCallback(evt) {
  var deltaY = evt.detail.deltaPoints.page.y;

  if (!deltaY) {
    return false;
  }

  this.applyActiveStrategy(evt, this.configuration);
  _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.setViewport(evt.detail.element, evt.detail.viewport);
};
/**
 * The default strategy keeps the target location fixed on the page
 * as we zoom in/out.
 *
 * @param {*} evt
 * @param {*} { invert, maxScale, minScale }
 * @returns {void}
 */


function defaultStrategy(evt) {
  var _this$configuration = this.configuration,
      invert = _this$configuration.invert,
      maxScale = _this$configuration.maxScale,
      minScale = _this$configuration.minScale;
  var deltaY = evt.detail.deltaPoints.page.y;
  var ticks = invert ? -deltaY / 100 : deltaY / 100;
  var _evt$detail = evt.detail,
      element = _evt$detail.element,
      viewport = _evt$detail.viewport;
  var _ref = [evt.detail.startPoints.page.x, evt.detail.startPoints.page.y, evt.detail.startPoints.image.x, evt.detail.startPoints.image.y],
      startX = _ref[0],
      startY = _ref[1],
      imageX = _ref[2],
      imageY = _ref[3]; // Calculate the new scale factor based on how far the mouse has changed

  var updatedViewport = changeViewportScale(viewport, ticks, {
    maxScale: maxScale,
    minScale: minScale
  });
  _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.setViewport(element, updatedViewport); // Now that the scale has been updated, determine the offset we need to apply to the center so we can
  // Keep the original start location in the same position

  var newCoords = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pageToPixel(element, startX, startY); // The shift we will use is the difference between the original image coordinates of the point we've selected
  // And the image coordinates of the same point on the page after the viewport scaling above has been performed
  // This shift is in image coordinates, and is designed to keep the target location fixed on the page.

  var shift = {
    x: imageX - newCoords.x,
    y: imageY - newCoords.y
  }; // Correct the required shift using the viewport rotation and flip parameters

  shift = correctShift(shift, updatedViewport); // Apply the shift to the Viewport's translation setting

  viewport.translation.x -= shift.x;
  viewport.translation.y -= shift.y;
}

function translateStrategy(evt) {
  var _this$configuration2 = this.configuration,
      invert = _this$configuration2.invert,
      preventZoomOutsideImage = _this$configuration2.preventZoomOutsideImage,
      maxScale = _this$configuration2.maxScale,
      minScale = _this$configuration2.minScale;
  var deltaY = evt.detail.deltaPoints.page.y;
  var ticks = invert ? -deltaY / 100 : deltaY / 100;
  var image = evt.detail.image;
  var viewport = evt.detail.viewport;
  var _ref2 = [evt.detail.startPoints.image.x, evt.detail.startPoints.image.y],
      startX = _ref2[0],
      startY = _ref2[1]; // Calculate the new scale factor based on how far the mouse has changed
  // Note that in this case we don't need to update the viewport after the initial
  // Zoom step since we aren't don't intend to keep the target position static on
  // The page

  var updatedViewport = changeViewportScale(viewport, ticks, {
    maxScale: maxScale,
    minScale: minScale
  }); // Define the default shift to take place during this zoom step

  var shift = {
    x: 0,
    y: 0
  }; // Define the parameters for the translate strategy

  var translateSpeed = 8;
  var outwardsMinScaleToTranslate = 3;
  var minTranslation = 0.01;

  if (ticks < 0) {
    // Zoom outwards from the image center
    if (updatedViewport.scale < outwardsMinScaleToTranslate) {
      // If the current translation is smaller than the minimum desired translation,
      // Set the translation to zero
      if (Math.abs(updatedViewport.translation.x) < minTranslation) {
        updatedViewport.translation.x = 0;
      } else {
        shift.x = updatedViewport.translation.x / translateSpeed;
      } // If the current translation is smaller than the minimum desired translation,
      // Set the translation to zero


      if (Math.abs(updatedViewport.translation.y) < minTranslation) {
        updatedViewport.translation.y = 0;
      } else {
        shift.y = updatedViewport.translation.y / translateSpeed;
      }
    }
  } else {
    // Zoom inwards to the current image point
    // Identify the coordinates of the point the user is trying to zoom into
    // If we are not allowed to zoom outside the image, bound the user-selected position to
    // A point inside the image
    if (preventZoomOutsideImage) {
      Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_7__["clipToBox"])(evt.detail.startPoints.image, image);
    } // Calculate the translation value that would place the desired image point in the center
    // Of the viewport


    var desiredTranslation = {
      x: image.width / 2 - startX,
      y: image.height / 2 - startY
    }; // Correct the target location using the viewport rotation and flip parameters

    desiredTranslation = correctShift(desiredTranslation, updatedViewport); // Calculate the difference between the current viewport translation value and the
    // Final desired translation values

    var distanceToDesired = {
      x: updatedViewport.translation.x - desiredTranslation.x,
      y: updatedViewport.translation.y - desiredTranslation.y
    }; // If the current translation is smaller than the minimum desired translation,
    // Stop translating in the x-direction

    if (Math.abs(distanceToDesired.x) < minTranslation) {
      updatedViewport.translation.x = desiredTranslation.x;
    } else {
      // Otherwise, shift the viewport by one step
      shift.x = distanceToDesired.x / translateSpeed;
    } // If the current translation is smaller than the minimum desired translation,
    // Stop translating in the y-direction


    if (Math.abs(distanceToDesired.y) < minTranslation) {
      updatedViewport.translation.y = desiredTranslation.y;
    } else {
      // Otherwise, shift the viewport by one step
      shift.y = distanceToDesired.y / translateSpeed;
    }
  } // Apply the shift to the Viewport's translation setting


  updatedViewport.translation.x -= shift.x;
  updatedViewport.translation.y -= shift.y;
}

function zoomToCenterStrategy(evt) {
  var _this$configuration3 = this.configuration,
      invert = _this$configuration3.invert,
      maxScale = _this$configuration3.maxScale,
      minScale = _this$configuration3.minScale;
  var deltaY = evt.detail.deltaPoints.page.y;
  var ticks = invert ? -deltaY / 100 : deltaY / 100;
  var viewport = evt.detail.viewport; // Calculate the new scale factor based on how far the mouse has changed

  changeViewportScale(viewport, ticks, {
    maxScale: maxScale,
    minScale: minScale
  });
}

/***/ }),

/***/ "./tools/ZoomTouchPinchTool.js":
/*!*************************************!*\
  !*** ./tools/ZoomTouchPinchTool.js ***!
  \*************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_909754__) {

"use strict";
__nested_webpack_require_909754__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_909754__.d(__nested_webpack_exports__, "default", function() { return ZoomTouchPinchTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_909754__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_909754__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_909754__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_909754__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_909754__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_909754__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_909754__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_909754__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_909754__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_909754__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_909754__(/*! ./../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_909754__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _util_zoom_index_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_909754__(/*! ../util/zoom/index.js */ "./util/zoom/index.js");








var correctShift = _util_zoom_index_js__WEBPACK_IMPORTED_MODULE_7__["default"].correctShift;
/**
 *
 *
 * @public
 * @class ZoomTouchPinchTool
 * @memberof Tools
 *
 * @extends {BaseTool}
 */

var ZoomTouchPinchTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(ZoomTouchPinchTool, _BaseTool);

  function ZoomTouchPinchTool() {
    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ZoomTouchPinchTool);

    var defaultProps = {
      name: 'ZoomTouchPinch',
      // TODO: Do we need a better way to specify touchPinch?
      supportedInteractionTypes: ['TouchPinch'],
      configuration: {
        minScale: 0.25,
        maxScale: 20.0
      }
    };
    return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(ZoomTouchPinchTool).call(this, props, defaultProps));
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ZoomTouchPinchTool, [{
    key: "touchPinchCallback",
    value: function touchPinchCallback(evt) {
      var _evt$detail = evt.detail,
          element = _evt$detail.element,
          viewport = _evt$detail.viewport,
          scaleChange = _evt$detail.scaleChange;
      var _ref = [evt.detail.startPoints.page.x, evt.detail.startPoints.page.y, evt.detail.startPoints.image.x, evt.detail.startPoints.image.y],
          pageStartX = _ref[0],
          pageStartY = _ref[1],
          imageStartX = _ref[2],
          imageStartY = _ref[3];
      var _this$configuration = this.configuration,
          maxScale = _this$configuration.maxScale,
          minScale = _this$configuration.minScale; // Change the scale based on the pinch gesture's scale change

      viewport.scale += scaleChange * viewport.scale;

      if (maxScale && viewport.scale > maxScale) {
        viewport.scale = maxScale;
      } else if (minScale && viewport.scale < minScale) {
        viewport.scale = minScale;
      }

      _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.setViewport(element, viewport); // Now that the scale has been updated, determine the offset we need to apply to the center so we can
      // Keep the original start location in the same position

      var newCoords = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pageToPixel(element, pageStartX, pageStartY);
      var shift = {
        x: imageStartX - newCoords.x,
        y: imageStartY - newCoords.y
      };
      shift = correctShift(shift, viewport);
      viewport.translation.x -= shift.x;
      viewport.translation.y -= shift.y;
      _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.setViewport(element, viewport);
    }
  }]);

  return ZoomTouchPinchTool;
}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);



/***/ }),

/***/ "./tools/annotation/AngleTool.js":
/*!***************************************!*\
  !*** ./tools/annotation/AngleTool.js ***!
  \***************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_915858__) {

"use strict";
__nested_webpack_require_915858__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_915858__.d(__nested_webpack_exports__, "default", function() { return AngleTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_915858__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_915858__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_915858__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_915858__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_915858__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_915858__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_915858__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_915858__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_915858__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_915858__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_915858__(/*! ./../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_915858__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_915858__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_915858__(/*! ./../../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js");
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_915858__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_915858__(/*! ./../../manipulators/index.js */ "./manipulators/index.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_915858__(/*! ./../../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_915858__(/*! ./../../drawing/drawLinkedTextBox.js */ "./drawing/drawLinkedTextBox.js");
/* harmony import */ var _drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_915858__(/*! ./../../drawing/drawTextBox.js */ "./drawing/drawTextBox.js");
/* harmony import */ var _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_915858__(/*! ./../../drawing/drawHandles.js */ "./drawing/drawHandles.js");
/* harmony import */ var _util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_915858__(/*! ./../../util/lineSegDistance.js */ "./util/lineSegDistance.js");
/* harmony import */ var _util_roundToDecimal_js__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_915858__(/*! ./../../util/roundToDecimal.js */ "./util/roundToDecimal.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_915858__(/*! ../cursors/index.js */ "./tools/cursors/index.js");
/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_915858__(/*! ../../util/triggerEvent.js */ "./util/triggerEvent.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_915858__(/*! ../../events.js */ "./events.js");
/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_915858__(/*! ../../util/getPixelSpacing */ "./util/getPixelSpacing.js");
/* harmony import */ var _util_throttle__WEBPACK_IMPORTED_MODULE_21__ = __nested_webpack_require_915858__(/*! ../../util/throttle */ "./util/throttle.js");
/* harmony import */ var _store_index__WEBPACK_IMPORTED_MODULE_22__ = __nested_webpack_require_915858__(/*! ../../store/index */ "./store/index.js");






 // State



 // Manipulators

 // Drawing













/**
 * @public
 * @class AngleTool
 * @memberof Tools.Annotation
 * @classdesc Create and position an angle by placing three consecutive points.
 * @extends Tools.Base.BaseAnnotationTool
 * @hideconstructor
 *
 * @param {ToolConfiguration} [props={}]
 */

var AngleTool =
/*#__PURE__*/
function (_BaseAnnotationTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(AngleTool, _BaseAnnotationTool);

  function AngleTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, AngleTool);

    var defaultProps = {
      name: 'Angle',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_17__["angleCursor"],
      configuration: {
        drawHandles: true,
        drawHandlesOnHover: false,
        hideHandlesIfMoving: false,
        renderDashed: false
      }
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(AngleTool).call(this, props, defaultProps));
    _this.preventNewMeasurement = false;
    _this.throttledUpdateCachedStats = Object(_util_throttle__WEBPACK_IMPORTED_MODULE_21__["default"])(_this.updateCachedStats, 110);
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(AngleTool, [{
    key: "createNewMeasurement",
    value: function createNewMeasurement(eventData) {
      // Create the measurement data for this tool with the end handle activated
      return {
        visible: true,
        active: true,
        color: undefined,
        invalidated: true,
        handles: {
          start: {
            x: eventData.currentPoints.image.x,
            y: eventData.currentPoints.image.y,
            highlight: true,
            active: false
          },
          middle: {
            x: eventData.currentPoints.image.x,
            y: eventData.currentPoints.image.y,
            highlight: true,
            active: true
          },
          end: {
            x: eventData.currentPoints.image.x,
            y: eventData.currentPoints.image.y,
            highlight: true,
            active: false
          },
          textBox: {
            active: false,
            hasMoved: false,
            movesIndependently: false,
            drawnIndependently: true,
            allowedOutsideImage: true,
            hasBoundingBox: true
          }
        }
      };
    }
  }, {
    key: "pointNearTool",
    value: function pointNearTool(element, data, coords) {
      if (data.visible === false) {
        return false;
      }

      return Object(_util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_15__["default"])(element, data.handles.start, data.handles.middle, coords) < 25 || Object(_util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_15__["default"])(element, data.handles.middle, data.handles.end, coords) < 25;
    }
  }, {
    key: "updateCachedStats",
    value: function updateCachedStats(image, element, data) {
      var sideA = getSide(image, data.handles.middle, data.handles.start);
      var sideB = getSide(image, data.handles.end, data.handles.middle);
      var sideC = getSide(image, data.handles.end, data.handles.start);
      var sideALength = length(sideA);
      var sideBLength = length(sideB);
      var sideCLength = length(sideC); // Cosine law

      var angle = Math.acos((Math.pow(sideALength, 2) + Math.pow(sideBLength, 2) - Math.pow(sideCLength, 2)) / (2 * sideALength * sideBLength));
      angle *= 180 / Math.PI;
      data.rAngle = Object(_util_roundToDecimal_js__WEBPACK_IMPORTED_MODULE_16__["default"])(angle, 2);
      data.invalidated = false;
    }
  }, {
    key: "renderToolData",
    value: function renderToolData(evt) {
      var _this2 = this;

      var eventData = evt.detail;
      var enabledElement = eventData.enabledElement;
      var _this$configuration = this.configuration,
          handleRadius = _this$configuration.handleRadius,
          drawHandlesOnHover = _this$configuration.drawHandlesOnHover,
          hideHandlesIfMoving = _this$configuration.hideHandlesIfMoving,
          renderDashed = _this$configuration.renderDashed; // If we have no toolData for this element, return immediately as there is nothing to do

      var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__["getToolState"])(evt.currentTarget, this.name);
      var lineDash = Object(_store_index__WEBPACK_IMPORTED_MODULE_22__["getModule"])('globalConfiguration').configuration.lineDash;

      if (!toolData) {
        return;
      } // We have tool data for this element - iterate over each one and draw it


      var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["getNewContext"])(eventData.canvasContext.canvas);
      var image = eventData.image,
          element = eventData.element;

      var _getPixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_20__["default"])(image),
          rowPixelSpacing = _getPixelSpacing.rowPixelSpacing,
          colPixelSpacing = _getPixelSpacing.colPixelSpacing;

      var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getToolWidth();

      var _loop = function _loop(i) {
        var data = toolData.data[i];

        if (data.visible === false) {
          return "continue";
        }

        Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["draw"])(context, function (context) {
          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["setShadow"])(context, _this2.configuration); // Differentiate the color of activation tool

          var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getColorIfActive(data);
          var handleStartCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(eventData.element, data.handles.start);
          var handleMiddleCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(eventData.element, data.handles.middle);
          var lineOptions = {
            color: color
          };

          if (renderDashed) {
            lineOptions.lineDash = lineDash;
          }

          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["drawJoinedLines"])(context, eventData.element, data.handles.start, [data.handles.middle, data.handles.end], lineOptions); // Draw the handles

          var handleOptions = {
            color: color,
            handleRadius: handleRadius,
            drawHandlesIfActive: drawHandlesOnHover,
            hideHandlesIfMoving: hideHandlesIfMoving
          };

          if (_this2.configuration.drawHandles) {
            Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_14__["default"])(context, eventData, data.handles, handleOptions);
          } // Update textbox stats


          if (data.invalidated === true) {
            if (data.rAngle) {
              _this2.throttledUpdateCachedStats(image, element, data);
            } else {
              _this2.updateCachedStats(image, element, data);
            }
          }

          if (data.rAngle) {
            var text = textBoxText(data, rowPixelSpacing, colPixelSpacing);
            var distance = 15;
            var textCoords;

            if (!data.handles.textBox.hasMoved) {
              textCoords = {
                x: handleMiddleCanvas.x,
                y: handleMiddleCanvas.y
              };
              var padding = 5;
              var textWidth = Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_13__["textBoxWidth"])(context, text, padding);

              if (handleMiddleCanvas.x < handleStartCanvas.x) {
                textCoords.x -= distance + textWidth + 10;
              } else {
                textCoords.x += distance;
              }

              var transform = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.internal.getTransform(enabledElement);
              transform.invert();
              var coords = transform.transformPoint(textCoords.x, textCoords.y);
              data.handles.textBox.x = coords.x;
              data.handles.textBox.y = coords.y;
            }

            Object(_drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_12__["default"])(context, eventData.element, data.handles.textBox, text, data.handles, textBoxAnchorPoints, color, lineWidth, 0, true);
          }
        });
      };

      for (var i = 0; i < toolData.data.length; i++) {
        var _ret = _loop(i);

        if (_ret === "continue") continue;
      }

      function textBoxText(data, rowPixelSpacing, colPixelSpacing) {
        var suffix = !rowPixelSpacing || !colPixelSpacing ? ' (isotropic)' : '';
        var str = '00B0'; // Degrees symbol

        return data.rAngle.toString() + String.fromCharCode(parseInt(str, 16)) + suffix;
      }

      function textBoxAnchorPoints(handles) {
        return [handles.start, handles.middle, handles.end];
      }
    }
  }, {
    key: "addNewMeasurement",
    value: function addNewMeasurement(evt, interactionType) {
      var _this3 = this;

      if (this.preventNewMeasurement) {
        return;
      }

      this.preventNewMeasurement = true;
      evt.preventDefault();
      evt.stopPropagation();
      var eventData = evt.detail;
      var measurementData = this.createNewMeasurement(eventData);
      var element = evt.detail.element; // Associate this data with this imageId so we can render it and manipulate it

      Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__["addToolState"])(element, this.name, measurementData);
      _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element); // Step 1, create start and second middle.

      Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_10__["moveNewHandle"])(eventData, this.name, measurementData, measurementData.handles.middle, this.options, interactionType, function (success) {
        measurementData.active = false;

        if (!success) {
          Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__["removeToolState"])(element, _this3.name, measurementData);
          _this3.preventNewMeasurement = false;
          return;
        }

        measurementData.handles.end.active = true;
        _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element); // Step 2, create end.

        Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_10__["moveNewHandle"])(eventData, _this3.name, measurementData, measurementData.handles.end, _this3.options, interactionType, function (success) {
          if (success) {
            measurementData.active = false;
            _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element);
          } else {
            Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__["removeToolState"])(element, _this3.name, measurementData);
          }

          _this3.preventNewMeasurement = false;
          _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element);
          var modifiedEventData = {
            toolName: _this3.name,
            toolType: _this3.name,
            // Deprecation notice: toolType will be replaced by toolName
            element: element,
            measurementData: measurementData
          };
          Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_18__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_19__["default"].MEASUREMENT_COMPLETED, modifiedEventData);
        });
      });
    }
  }]);

  return AngleTool;
}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);



function length(vector) {
  return Math.sqrt(Math.pow(vector.x, 2) + Math.pow(vector.y, 2));
}

function getSide(image, handleEnd, handleStart) {
  var _getPixelSpacing2 = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_20__["default"])(image),
      rowPixelSpacing = _getPixelSpacing2.rowPixelSpacing,
      colPixelSpacing = _getPixelSpacing2.colPixelSpacing;

  return {
    x: (handleEnd.x - handleStart.x) * (colPixelSpacing || 1),
    y: (handleEnd.y - handleStart.y) * (rowPixelSpacing || 1)
  };
}

/***/ }),

/***/ "./tools/annotation/ArrowAnnotateTool.js":
/*!***********************************************!*\
  !*** ./tools/annotation/ArrowAnnotateTool.js ***!
  \***********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_933917__) {

"use strict";
__nested_webpack_require_933917__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_933917__.d(__nested_webpack_exports__, "default", function() { return ArrowAnnotateTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_933917__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_933917__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_933917__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_933917__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_933917__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_933917__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_933917__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_933917__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_933917__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_933917__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_933917__(/*! ./../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_933917__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_933917__(/*! ./../../events.js */ "./events.js");
/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_933917__(/*! ./../../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js");
/* harmony import */ var _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_933917__(/*! ./../../stateManagement/textStyle.js */ "./stateManagement/textStyle.js");
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_933917__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_933917__(/*! ./../../manipulators/index.js */ "./manipulators/index.js");
/* harmony import */ var _util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_933917__(/*! ./../../util/pointInsideBoundingBox.js */ "./util/pointInsideBoundingBox.js");
/* harmony import */ var _util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_933917__(/*! ./../../util/lineSegDistance.js */ "./util/lineSegDistance.js");
/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_933917__(/*! ./../../util/triggerEvent.js */ "./util/triggerEvent.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_933917__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_933917__(/*! ./../../drawing/drawLinkedTextBox.js */ "./drawing/drawLinkedTextBox.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_933917__(/*! ./../../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _drawing_drawArrow_js__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_933917__(/*! ./../../drawing/drawArrow.js */ "./drawing/drawArrow.js");
/* harmony import */ var _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_933917__(/*! ./../../drawing/drawHandles.js */ "./drawing/drawHandles.js");
/* harmony import */ var _drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_933917__(/*! ./../../drawing/drawTextBox.js */ "./drawing/drawTextBox.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_21__ = __nested_webpack_require_933917__(/*! ../cursors/index.js */ "./tools/cursors/index.js");
/* harmony import */ var _store_index__WEBPACK_IMPORTED_MODULE_22__ = __nested_webpack_require_933917__(/*! ../../store/index */ "./store/index.js");






/* eslint no-alert: 0 */


















/**
 * @public
 * @class ArrowAnnotateTool
 * @memberof Tools.Annotation
 * @classdesc Create and position an arrow and label
 * @extends Tools.Base.BaseAnnotationTool
 */

var ArrowAnnotateTool =
/*#__PURE__*/
function (_BaseAnnotationTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(ArrowAnnotateTool, _BaseAnnotationTool);

  function ArrowAnnotateTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ArrowAnnotateTool);

    var defaultProps = {
      name: 'ArrowAnnotate',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      configuration: {
        getTextCallback: getTextCallback,
        changeTextCallback: changeTextCallback,
        drawHandles: true,
        drawHandlesOnHover: false,
        hideHandlesIfMoving: false,
        arrowFirst: true,
        renderDashed: false,
        allowEmptyLabel: false
      },
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_21__["arrowAnnotateCursor"]
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(ArrowAnnotateTool).call(this, props, defaultProps));
    _this.preventNewMeasurement = false;
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ArrowAnnotateTool, [{
    key: "createNewMeasurement",
    value: function createNewMeasurement(evt) {
      // Create the measurement data for this tool with the end handle activated
      return {
        visible: true,
        active: true,
        color: undefined,
        handles: {
          start: {
            x: evt.detail.currentPoints.image.x,
            y: evt.detail.currentPoints.image.y,
            highlight: true,
            active: false
          },
          end: {
            x: evt.detail.currentPoints.image.x,
            y: evt.detail.currentPoints.image.y,
            highlight: true,
            active: false
          },
          textBox: {
            active: false,
            hasMoved: false,
            movesIndependently: false,
            drawnIndependently: true,
            allowedOutsideImage: true,
            hasBoundingBox: true
          }
        }
      };
    }
  }, {
    key: "pointNearTool",
    value: function pointNearTool(element, data, coords) {
      if (data.visible === false) {
        return false;
      }

      return Object(_util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_13__["default"])(element, data.handles.start, data.handles.end, coords) < 25;
    }
  }, {
    key: "updateCachedStats",
    value: function updateCachedStats() {// Implementing to satisfy BaseAnnotationTool
    }
  }, {
    key: "renderToolData",
    value: function renderToolData(evt) {
      var _this2 = this;

      var _evt$detail = evt.detail,
          element = _evt$detail.element,
          enabledElement = _evt$detail.enabledElement;
      var _this$configuration = this.configuration,
          handleRadius = _this$configuration.handleRadius,
          drawHandlesOnHover = _this$configuration.drawHandlesOnHover,
          hideHandlesIfMoving = _this$configuration.hideHandlesIfMoving,
          renderDashed = _this$configuration.renderDashed; // If we have no toolData for this element, return immediately as there is nothing to do

      var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_15__["getToolState"])(element, this.name);

      if (!toolData) {
        return;
      } // We have tool data for this element - iterate over each one and draw it


      var canvas = evt.detail.canvasContext.canvas;
      var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_17__["getNewContext"])(canvas);
      var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getToolWidth();
      var lineDash;

      if (renderDashed) {
        lineDash = Object(_store_index__WEBPACK_IMPORTED_MODULE_22__["getModule"])('globalConfiguration').configuration.lineDash;
      }

      var _loop = function _loop(i) {
        var data = toolData.data[i];

        if (data.visible === false) {
          return "continue";
        }

        Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_17__["draw"])(context, function (context) {
          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_17__["setShadow"])(context, _this2.configuration);
          var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_10__["default"].getColorIfActive(data); // Draw the arrow

          var handleStartCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.start);
          var handleEndCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.end); // Config.arrowFirst = false;

          if (_this2.configuration.arrowFirst) {
            Object(_drawing_drawArrow_js__WEBPACK_IMPORTED_MODULE_18__["default"])(context, handleEndCanvas, handleStartCanvas, color, lineWidth, lineDash);
          } else {
            Object(_drawing_drawArrow_js__WEBPACK_IMPORTED_MODULE_18__["default"])(context, handleStartCanvas, handleEndCanvas, color, lineWidth, lineDash);
          }

          var handleOptions = {
            color: color,
            handleRadius: handleRadius,
            drawHandlesIfActive: drawHandlesOnHover,
            hideHandlesIfMoving: hideHandlesIfMoving
          };

          if (_this2.configuration.drawHandles) {
            Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_19__["default"])(context, evt.detail, data.handles, handleOptions);
          }

          var text = textBoxText(data); // Draw the text

          if (text && text !== '') {
            // Calculate the text coordinates.
            var padding = 5;
            var textWidth = Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_20__["textBoxWidth"])(context, text, padding);
            var textHeight = _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_9__["default"].getFontSize() + 10;
            var distance = Math.max(textWidth, textHeight) / 2 + 5;

            if (handleEndCanvas.x < handleStartCanvas.x) {
              distance = -distance;
            }

            if (!data.handles.textBox.hasMoved) {
              var textCoords;

              if (_this2.configuration.arrowFirst) {
                textCoords = {
                  x: handleEndCanvas.x - textWidth / 2 + distance,
                  y: handleEndCanvas.y - textHeight / 2
                };
              } else {
                // If the arrow is at the End position, the text should
                // Be placed near the Start position
                textCoords = {
                  x: handleStartCanvas.x - textWidth / 2 - distance,
                  y: handleStartCanvas.y - textHeight / 2
                };
              }

              var transform = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.internal.getTransform(enabledElement);
              transform.invert();
              var coords = transform.transformPoint(textCoords.x, textCoords.y);
              data.handles.textBox.x = coords.x;
              data.handles.textBox.y = coords.y;
            }

            Object(_drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_16__["default"])(context, element, data.handles.textBox, text, data.handles, textBoxAnchorPoints, color, lineWidth, 0, false);
          }
        });
      };

      for (var i = 0; i < toolData.data.length; i++) {
        var _ret = _loop(i);

        if (_ret === "continue") continue;
      }

      function textBoxText(data) {
        return data.text;
      }

      function textBoxAnchorPoints(handles) {
        var midpoint = {
          x: (handles.start.x + handles.end.x) / 2,
          y: (handles.start.y + handles.end.y) / 2
        };
        return [handles.start, midpoint, handles.end];
      }
    }
  }, {
    key: "addNewMeasurement",
    value: function addNewMeasurement(evt, interactionType) {
      var _this3 = this;

      var element = evt.detail.element;
      var measurementData = this.createNewMeasurement(evt);
      var allowEmptyLabel = this.configuration.allowEmptyLabel; // Associate this data with this imageId so we can render it and manipulate it

      Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_15__["addToolState"])(element, this.name, measurementData);
      _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element);
      Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_11__["moveNewHandle"])(evt.detail, this.name, measurementData, measurementData.handles.end, this.options, interactionType, function (success) {
        if (success) {
          if (measurementData.text === undefined) {
            _this3.configuration.getTextCallback(function (text) {
              if (text || allowEmptyLabel) {
                measurementData.text = text;
                measurementData.active = false;
                var modifiedEventData = {
                  toolName: _this3.name,
                  toolType: _this3.name,
                  // Deprecation notice: toolType will be replaced by toolName
                  element: element,
                  measurementData: measurementData
                };
                _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element);
                Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_14__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MEASUREMENT_COMPLETED, modifiedEventData);
              } else {
                Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_15__["removeToolState"])(element, _this3.name, measurementData);
              }
            }, evt.detail);
          }
        } else {
          Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_15__["removeToolState"])(element, _this3.name, measurementData);
        }

        _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element);
      });
    }
  }, {
    key: "doubleClickCallback",
    value: function doubleClickCallback(evt) {
      return this._updateTextForNearbyAnnotation(evt);
    }
  }, {
    key: "touchPressCallback",
    value: function touchPressCallback(evt) {
      return this._updateTextForNearbyAnnotation(evt);
    }
  }, {
    key: "_updateTextForNearbyAnnotation",
    value: function _updateTextForNearbyAnnotation(evt) {
      var element = evt.detail.element;
      var coords = evt.detail.currentPoints.canvas;
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_15__["getToolState"])(element, this.name);

      if (!toolState) {
        return false;
      }

      for (var i = 0; i < toolState.data.length; i++) {
        var data = toolState.data[i];

        if (this.pointNearTool(element, data, coords) || Object(_util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_12__["default"])(data.handles.textBox, coords)) {
          data.active = true;
          _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element); // Allow relabelling via a callback

          this.configuration.changeTextCallback(data, evt.detail, this._doneChangingTextCallback.bind(this, element, data));
          evt.stopImmediatePropagation();
          evt.preventDefault();
          evt.stopPropagation();
          return true;
        }
      }
    }
  }, {
    key: "_doneChangingTextCallback",
    value: function _doneChangingTextCallback(element, measurementData, updatedText, deleteTool) {
      if (deleteTool === true) {
        Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_15__["removeToolState"])(element, this.name, measurementData);
      } else {
        measurementData.text = updatedText;
      }

      measurementData.active = false;
      _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element);
      Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_14__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MEASUREMENT_MODIFIED, {
        toolName: this.name,
        toolType: this.name,
        // Deprecation notice: toolType will be replaced by toolName
        element: element,
        measurementData: measurementData
      });
    }
  }]);

  return ArrowAnnotateTool;
}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);



function getTextCallback(doneChangingTextCallback) {
  doneChangingTextCallback(prompt('Enter your annotation:'));
}

function changeTextCallback(data, eventData, doneChangingTextCallback) {
  doneChangingTextCallback(prompt('Change your annotation:'));
}

/***/ }),

/***/ "./tools/annotation/BidirectionalTool.js":
/*!***********************************************!*\
  !*** ./tools/annotation/BidirectionalTool.js ***!
  \***********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_952618__) {

"use strict";
__nested_webpack_require_952618__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_952618__.d(__nested_webpack_exports__, "default", function() { return BidirectionalTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_952618__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_952618__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_952618__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_952618__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_952618__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_952618__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_952618__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_952618__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_952618__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_952618__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_952618__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__nested_webpack_require_952618__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_952618__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _bidirectionalTool_createNewMeasurement_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_952618__(/*! ./bidirectionalTool/createNewMeasurement.js */ "./tools/annotation/bidirectionalTool/createNewMeasurement.js");
/* harmony import */ var _bidirectionalTool_pointNearTool_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_952618__(/*! ./bidirectionalTool/pointNearTool.js */ "./tools/annotation/bidirectionalTool/pointNearTool.js");
/* harmony import */ var _bidirectionalTool_renderToolData_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_952618__(/*! ./bidirectionalTool/renderToolData.js */ "./tools/annotation/bidirectionalTool/renderToolData.js");
/* harmony import */ var _bidirectionalTool_addNewMeasurement_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_952618__(/*! ./bidirectionalTool/addNewMeasurement.js */ "./tools/annotation/bidirectionalTool/addNewMeasurement.js");
/* harmony import */ var _bidirectionalTool_mouseMoveCallback_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_952618__(/*! ./bidirectionalTool/mouseMoveCallback.js */ "./tools/annotation/bidirectionalTool/mouseMoveCallback.js");
/* harmony import */ var _bidirectionalTool_handleSelectedCallback_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_952618__(/*! ./bidirectionalTool/handleSelectedCallback.js */ "./tools/annotation/bidirectionalTool/handleSelectedCallback.js");
/* harmony import */ var _bidirectionalTool_handleSelectedMouseCallback_js__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_952618__(/*! ./bidirectionalTool/handleSelectedMouseCallback.js */ "./tools/annotation/bidirectionalTool/handleSelectedMouseCallback.js");
/* harmony import */ var _bidirectionalTool_handleSelectedTouchCallback_js__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_952618__(/*! ./bidirectionalTool/handleSelectedTouchCallback.js */ "./tools/annotation/bidirectionalTool/handleSelectedTouchCallback.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_952618__(/*! ../cursors/index.js */ "./tools/cursors/index.js");
/* harmony import */ var _util_throttle__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_952618__(/*! ../../util/throttle */ "./util/throttle.js");
/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_952618__(/*! ../../util/getPixelSpacing */ "./util/getPixelSpacing.js");
/* harmony import */ var _bidirectionalTool_utils_calculateLongestAndShortestDiameters__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_952618__(/*! ./bidirectionalTool/utils/calculateLongestAndShortestDiameters */ "./tools/annotation/bidirectionalTool/utils/calculateLongestAndShortestDiameters.js");




















var emptyLocationCallback = function emptyLocationCallback(measurementData, eventData, doneCallback) {
  return doneCallback();
};
/**
 * @public
 * @class BidirectionalTool
 * @memberof Tools.Annotation
 * @classdesc Create and position an annotation that measures the
 * length and width of a region.
 * @extends Tools.Base.BaseAnnotationTool
 */


var BidirectionalTool =
/*#__PURE__*/
function (_BaseAnnotationTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(BidirectionalTool, _BaseAnnotationTool);

  function BidirectionalTool(props) {
    var _this;

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, BidirectionalTool);

    var defaultProps = {
      name: 'Bidirectional',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      configuration: {
        changeMeasurementLocationCallback: emptyLocationCallback,
        getMeasurementLocationCallback: emptyLocationCallback,
        textBox: '',
        shadow: '',
        drawHandles: true,
        drawHandlesOnHover: true,
        hideHandlesIfMoving: false,
        renderDashed: false,
        additionalData: []
      },
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_15__["bidirectionalCursor"]
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(BidirectionalTool).call(this, props, defaultProps));
    _this.throttledUpdateCachedStats = Object(_util_throttle__WEBPACK_IMPORTED_MODULE_16__["default"])(_this.updateCachedStats, 110);
    _this.createNewMeasurement = _bidirectionalTool_createNewMeasurement_js__WEBPACK_IMPORTED_MODULE_7__["default"].bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.pointNearTool = _bidirectionalTool_pointNearTool_js__WEBPACK_IMPORTED_MODULE_8__["default"].bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.renderToolData = _bidirectionalTool_renderToolData_js__WEBPACK_IMPORTED_MODULE_9__["default"].bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.addNewMeasurement = _bidirectionalTool_addNewMeasurement_js__WEBPACK_IMPORTED_MODULE_10__["default"].bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this._moveCallback = _bidirectionalTool_mouseMoveCallback_js__WEBPACK_IMPORTED_MODULE_11__["default"].bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.handleSelectedCallback = _bidirectionalTool_handleSelectedCallback_js__WEBPACK_IMPORTED_MODULE_12__["default"].bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.handleSelectedMouseCallback = _bidirectionalTool_handleSelectedMouseCallback_js__WEBPACK_IMPORTED_MODULE_13__["default"].bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.handleSelectedTouchCallback = _bidirectionalTool_handleSelectedTouchCallback_js__WEBPACK_IMPORTED_MODULE_14__["default"].bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(BidirectionalTool, [{
    key: "updateCachedStats",
    value: function updateCachedStats(image, element, data) {
      // Prevent updating other tools' data
      if (data.toolName !== this.name) {
        return;
      }

      var pixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_17__["default"])(image);

      var _calculateLongestAndS = Object(_bidirectionalTool_utils_calculateLongestAndShortestDiameters__WEBPACK_IMPORTED_MODULE_18__["default"])(data, pixelSpacing),
          longestDiameter = _calculateLongestAndS.longestDiameter,
          shortestDiameter = _calculateLongestAndS.shortestDiameter; // Set measurement text to show lesion table


      data.longestDiameter = longestDiameter;
      data.shortestDiameter = shortestDiameter;
      data.invalidated = false;
    }
  }]);

  return BidirectionalTool;
}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);



/***/ }),

/***/ "./tools/annotation/CircleRoiTool.js":
/*!*******************************************!*\
  !*** ./tools/annotation/CircleRoiTool.js ***!
  \*******************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_962890__) {

"use strict";
__nested_webpack_require_962890__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_962890__.d(__nested_webpack_exports__, "default", function() { return CircleRoiTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_962890__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_962890__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_962890__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_962890__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_962890__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_962890__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_962890__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_962890__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_962890__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_962890__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_962890__(/*! ./../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_962890__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_962890__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_962890__(/*! ./../../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js");
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_962890__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _store_index__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_962890__(/*! ../../store/index */ "./store/index.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_962890__(/*! ./../../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_962890__(/*! ./../../util/calculateSUV.js */ "./util/calculateSUV.js");
/* harmony import */ var _util_ellipse_index_js__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_962890__(/*! ./../../util/ellipse/index.js */ "./util/ellipse/index.js");
/* harmony import */ var _util_getROITextBoxCoords_js__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_962890__(/*! ../../util/getROITextBoxCoords.js */ "./util/getROITextBoxCoords.js");
/* harmony import */ var _util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_962890__(/*! ./../../util/numbersWithCommas.js */ "./util/numbersWithCommas.js");
/* harmony import */ var _util_throttle_js__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_962890__(/*! ./../../util/throttle.js */ "./util/throttle.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_962890__(/*! ../../util/logger.js */ "./util/logger.js");
/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_962890__(/*! ../../util/getPixelSpacing */ "./util/getPixelSpacing.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_962890__(/*! ../cursors/index.js */ "./tools/cursors/index.js");
/* harmony import */ var _util_getCircleCoords__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_962890__(/*! ../../util/getCircleCoords */ "./util/getCircleCoords.js");






 // State




 // Drawing

 // Util










var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_17__["getLogger"])('tools:annotation:CircleRoiTool');
/**
 * @public
 * @class CircleRoiTool
 * @memberof Tools.Annotation
 * @classdesc Tool for drawing circular regions of interest, and measuring
 * the statistics of the enclosed pixels.
 * @extends Tools.Base.BaseAnnotationTool
 */

var CircleRoiTool =
/*#__PURE__*/
function (_BaseAnnotationTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(CircleRoiTool, _BaseAnnotationTool);

  function CircleRoiTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, CircleRoiTool);

    var defaultProps = {
      name: 'CircleRoi',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_19__["circleRoiCursor"],
      configuration: {
        centerPointRadius: 0,
        renderDashed: false,
        hideHandlesIfMoving: false
      }
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(CircleRoiTool).call(this, props, defaultProps));
    _this.throttledUpdateCachedStats = Object(_util_throttle_js__WEBPACK_IMPORTED_MODULE_16__["default"])(_this.updateCachedStats, 110);
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(CircleRoiTool, [{
    key: "createNewMeasurement",
    value: function createNewMeasurement(eventData) {
      var goodEventData = eventData && eventData.currentPoints && eventData.currentPoints.image;

      if (!goodEventData) {
        logger.error("required eventData not supplied to tool ".concat(this.name, "'s createNewMeasurement"));
        return;
      }

      return {
        visible: true,
        active: true,
        color: undefined,
        invalidated: true,
        handles: {
          start: {
            x: eventData.currentPoints.image.x,
            y: eventData.currentPoints.image.y,
            highlight: true,
            active: false
          },
          end: {
            x: eventData.currentPoints.image.x,
            y: eventData.currentPoints.image.y,
            highlight: true,
            active: true
          },
          initialRotation: eventData.viewport.rotation,
          textBox: {
            active: false,
            hasMoved: false,
            movesIndependently: false,
            drawnIndependently: true,
            allowedOutsideImage: true,
            hasBoundingBox: true
          }
        }
      };
    }
  }, {
    key: "pointNearTool",
    value: function pointNearTool(element, data, coords, interactionType) {
      var hasStartAndEndHandles = data && data.handles && data.handles.start && data.handles.end;
      var getDistance = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstoneMath.point.distance;

      if (!hasStartAndEndHandles) {
        logger.warn("invalid parameters supplied to tool ".concat(this.name, "'s pointNearTool"));
      }

      if (!hasStartAndEndHandles || data.visible === false) {
        return false;
      }

      var distance = interactionType === 'mouse' ? 15 : 25;
      var startCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.start);
      var endCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.end); // StartCanvas is the center of the circle

      var distanceFromCenter = getDistance(startCanvas, coords); // Getting radius of circle annotation in canvas

      var radius = getDistance(startCanvas, endCanvas); // Checking if point is near the tool by comparing its distance from the center of the circle

      return distanceFromCenter > radius - distance / 2 && distanceFromCenter < radius + distance / 2;
    }
  }, {
    key: "updateCachedStats",
    value: function updateCachedStats(image, element, data) {
      var seriesModule = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.metaData.get('generalSeriesModule', image.imageId) || {};
      var modality = seriesModule.modality;
      var pixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_18__["default"])(image);

      var stats = _calculateStats(image, element, data.handles, modality, pixelSpacing);

      data.cachedStats = stats;
      data.invalidated = false;
    }
  }, {
    key: "renderToolData",
    value: function renderToolData(evt) {
      var _this2 = this;

      var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__["getToolState"])(evt.currentTarget, this.name);

      if (!toolData) {
        return;
      }

      var getDistance = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstoneMath.point.distance;
      var eventData = evt.detail;
      var image = eventData.image,
          element = eventData.element,
          canvasContext = eventData.canvasContext;
      var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getToolWidth();
      var _this$configuration = this.configuration,
          handleRadius = _this$configuration.handleRadius,
          drawHandlesOnHover = _this$configuration.drawHandlesOnHover,
          hideHandlesIfMoving = _this$configuration.hideHandlesIfMoving,
          renderDashed = _this$configuration.renderDashed,
          centerPointRadius = _this$configuration.centerPointRadius;
      var newContext = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["getNewContext"])(canvasContext.canvas);

      var _getPixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_18__["default"])(image),
          rowPixelSpacing = _getPixelSpacing.rowPixelSpacing,
          colPixelSpacing = _getPixelSpacing.colPixelSpacing;

      var lineDash = Object(_store_index__WEBPACK_IMPORTED_MODULE_10__["getModule"])('globalConfiguration').configuration.lineDash; // Meta

      var seriesModule = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.metaData.get('generalSeriesModule', image.imageId) || {}; // Pixel Spacing

      var modality = seriesModule.modality;
      var hasPixelSpacing = rowPixelSpacing && colPixelSpacing;
      Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["draw"])(newContext, function (context) {
        // If we have tool data for this element, iterate over each set and draw it
        for (var i = 0; i < toolData.data.length; i++) {
          var data = toolData.data[i];

          if (data.visible === false) {
            continue;
          } // Configure


          var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getColorIfActive(data);
          var handleOptions = {
            color: color,
            handleRadius: handleRadius,
            drawHandlesIfActive: drawHandlesOnHover,
            hideHandlesIfMoving: hideHandlesIfMoving
          };
          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["setShadow"])(context, _this2.configuration);
          var startCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.start);
          var endCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.end); // Calculating the radius where startCanvas is the center of the circle to be drawn

          var radius = getDistance(startCanvas, endCanvas);
          var circleOptions = {
            color: color
          };

          if (renderDashed) {
            circleOptions.lineDash = lineDash;
          } // Draw Circle


          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["drawCircle"])(context, element, data.handles.start, radius, circleOptions, 'pixel');

          if (centerPointRadius && radius > 3 * centerPointRadius) {
            Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["drawCircle"])(context, element, data.handles.start, centerPointRadius, circleOptions, 'pixel');
          }

          if (data.handles) {
            data.handles.start.drawnIndependently = true;
            data.handles.end.drawnIndependently = true;
          }

          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["drawHandles"])(context, eventData, data.handles, handleOptions); // Update textbox stats

          if (data.invalidated === true) {
            if (data.cachedStats) {
              _this2.throttledUpdateCachedStats(image, element, data);
            } else {
              _this2.updateCachedStats(image, element, data);
            }
          } // Default to textbox on right side of ROI


          if (!data.handles.textBox.hasMoved) {
            var defaultCoords = Object(_util_getROITextBoxCoords_js__WEBPACK_IMPORTED_MODULE_14__["default"])(eventData.viewport, data.handles);
            Object.assign(data.handles.textBox, defaultCoords);
          }

          var textBoxAnchorPoints = function textBoxAnchorPoints(handles) {
            return _findTextBoxAnchorPoints(handles.start, handles.end);
          };

          var textBoxContent = _createTextBoxContent(context, image.color, data.cachedStats, modality, hasPixelSpacing, _this2.configuration);

          data.unit = _getUnit(modality, _this2.configuration.showHounsfieldUnits);
          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["drawLinkedTextBox"])(context, element, data.handles.textBox, textBoxContent, data.handles, textBoxAnchorPoints, color, lineWidth, 10, true);
        }
      });
    }
  }]);

  return CircleRoiTool;
}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);
/**
 *
 *
 * @param {*} startHandle
 * @param {*} endHandle
 * @returns {Array.<{x: number, y: number}>}
 */




function _findTextBoxAnchorPoints(startHandle, endHandle) {
  var _getCircleCoords = Object(_util_getCircleCoords__WEBPACK_IMPORTED_MODULE_20__["default"])(startHandle, endHandle),
      left = _getCircleCoords.left,
      top = _getCircleCoords.top,
      width = _getCircleCoords.width,
      height = _getCircleCoords.height;

  return [{
    // Top middle point of ellipse
    x: left + width / 2,
    y: top
  }, {
    // Left middle point of ellipse
    x: left,
    y: top + height / 2
  }, {
    // Bottom middle point of ellipse
    x: left + width / 2,
    y: top + height
  }, {
    // Right middle point of ellipse
    x: left + width,
    y: top + height / 2
  }];
}

function _getUnit(modality, showHounsfieldUnits) {
  return modality === 'CT' && showHounsfieldUnits !== false ? 'HU' : '';
}
/**
 *
 *
 * @param {*} context
 * @param {*} isColorImage
 * @param {*} { area, mean, stdDev, min, max, meanStdDevSUV }
 * @param {*} modality
 * @param {*} hasPixelSpacing
 * @param {*} [options={}] - { showMinMax, showHounsfieldUnits }
 * @returns {string[]}
 */


function _createTextBoxContent(context, isColorImage) {
  var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
      _ref$area = _ref.area,
      area = _ref$area === void 0 ? 0 : _ref$area,
      _ref$radius = _ref.radius,
      radius = _ref$radius === void 0 ? 0 : _ref$radius,
      _ref$perimeter = _ref.perimeter,
      perimeter = _ref$perimeter === void 0 ? 0 : _ref$perimeter,
      _ref$mean = _ref.mean,
      mean = _ref$mean === void 0 ? 0 : _ref$mean,
      _ref$stdDev = _ref.stdDev,
      stdDev = _ref$stdDev === void 0 ? 0 : _ref$stdDev,
      _ref$min = _ref.min,
      min = _ref$min === void 0 ? 0 : _ref$min,
      _ref$max = _ref.max,
      max = _ref$max === void 0 ? 0 : _ref$max,
      _ref$meanStdDevSUV = _ref.meanStdDevSUV,
      meanStdDevSUV = _ref$meanStdDevSUV === void 0 ? 0 : _ref$meanStdDevSUV;

  var modality = arguments.length > 3 ? arguments[3] : undefined;
  var hasPixelSpacing = arguments.length > 4 ? arguments[4] : undefined;
  var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
  var showMinMax = options.showMinMax || false;
  var textLines = []; // Don't display mean/standardDev for color images

  var otherLines = [];

  if (!isColorImage) {
    var hasStandardUptakeValues = meanStdDevSUV && meanStdDevSUV.mean !== 0;

    var unit = _getUnit(modality, options.showHounsfieldUnits);

    var meanString = "Mean: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_15__["default"])(mean.toFixed(2)), " ").concat(unit);
    var stdDevString = "Std Dev: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_15__["default"])(stdDev.toFixed(2)), " ").concat(unit); // If this image has SUV values to display, concatenate them to the text line

    if (hasStandardUptakeValues) {
      var SUVtext = ' SUV: ';
      var meanSuvString = "".concat(SUVtext).concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_15__["default"])(meanStdDevSUV.mean.toFixed(2)));
      var stdDevSuvString = "".concat(SUVtext).concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_15__["default"])(meanStdDevSUV.stdDev.toFixed(2)));
      var targetStringLength = Math.floor(context.measureText("".concat(stdDevString, "     ")).width);

      while (context.measureText(meanString).width < targetStringLength) {
        meanString += ' ';
      }

      otherLines.push("".concat(meanString).concat(meanSuvString));
      otherLines.push("".concat(stdDevString, "     ").concat(stdDevSuvString));
    } else {
      otherLines.push("".concat(meanString, "     ").concat(stdDevString));
    }

    if (showMinMax) {
      var minString = "Min: ".concat(min, " ").concat(unit);
      var maxString = "Max: ".concat(max, " ").concat(unit);

      var _targetStringLength = hasStandardUptakeValues ? Math.floor(context.measureText("".concat(stdDevString, "     ")).width) : Math.floor(context.measureText("".concat(meanString, "     ")).width);

      while (context.measureText(minString).width < _targetStringLength) {
        minString += ' ';
      }

      otherLines.push("".concat(minString).concat(maxString));
    }
  }

  textLines.push(_formatArea(area, hasPixelSpacing));

  if (radius) {
    textLines.push(_formatLength(radius, 'Radius', hasPixelSpacing));
  }

  if (perimeter) {
    textLines.push(_formatLength(perimeter, 'Perimeter', hasPixelSpacing));
  }

  otherLines.forEach(function (x) {
    return textLines.push(x);
  });
  return textLines;
}
/**
 *
 *
 * @param {*} area
 * @param {*} hasPixelSpacing
 * @returns {string} The formatted label for showing area
 */


function _formatArea(area, hasPixelSpacing) {
  // This uses Char code 178 for a superscript 2
  var suffix = hasPixelSpacing ? " mm".concat(String.fromCharCode(178)) : " px".concat(String.fromCharCode(178));
  return "Area: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_15__["default"])(area.toFixed(2))).concat(suffix);
}

function _formatLength(value, name, hasPixelSpacing) {
  if (!value) {
    return '';
  }

  var suffix = hasPixelSpacing ? ' mm' : ' px';
  return "".concat(name, ": ").concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_15__["default"])(value.toFixed(1))).concat(suffix);
}
/**
 *
 *
 * @param {*} image
 * @param {*} element
 * @param {*} handles
 * @param {*} modality
 * @param {*} pixelSpacing
 * @returns {Object} The Stats object
 */


function _calculateStats(image, element, handles, modality, pixelSpacing) {
  // Retrieve the bounds of the ellipse in image coordinates
  var circleCoordinates = Object(_util_getCircleCoords__WEBPACK_IMPORTED_MODULE_20__["default"])(handles.start, handles.end); // Retrieve the array of pixels that the ellipse bounds cover

  var pixels = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.getPixels(element, circleCoordinates.left, circleCoordinates.top, circleCoordinates.width, circleCoordinates.height); // Calculate the mean & standard deviation from the pixels and the ellipse details.

  var ellipseMeanStdDev = Object(_util_ellipse_index_js__WEBPACK_IMPORTED_MODULE_13__["calculateEllipseStatistics"])(pixels, circleCoordinates);
  var meanStdDevSUV;

  if (modality === 'PT') {
    meanStdDevSUV = {
      mean: Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_12__["default"])(image, ellipseMeanStdDev.mean, true) || 0,
      stdDev: Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_12__["default"])(image, ellipseMeanStdDev.stdDev, true) || 0
    };
  }

  var radius = circleCoordinates.width * (pixelSpacing && pixelSpacing.colPixelSpacing || 1) / 2;
  var perimeter = 2 * Math.PI * radius;
  var area = Math.PI * (circleCoordinates.width * (pixelSpacing && pixelSpacing.colPixelSpacing || 1) / 2) * (circleCoordinates.height * (pixelSpacing && pixelSpacing.rowPixelSpacing || 1) / 2);
  return {
    area: area || 0,
    radius: radius || 0,
    perimeter: perimeter || 0,
    count: ellipseMeanStdDev.count || 0,
    mean: ellipseMeanStdDev.mean || 0,
    variance: ellipseMeanStdDev.variance || 0,
    stdDev: ellipseMeanStdDev.stdDev || 0,
    min: ellipseMeanStdDev.min || 0,
    max: ellipseMeanStdDev.max || 0,
    meanStdDevSUV: meanStdDevSUV
  };
}

/***/ }),

/***/ "./tools/annotation/CobbAngleTool.js":
/*!*******************************************!*\
  !*** ./tools/annotation/CobbAngleTool.js ***!
  \*******************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_985510__) {

"use strict";
__nested_webpack_require_985510__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_985510__.d(__nested_webpack_exports__, "default", function() { return CobbAngleTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_985510__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_985510__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_985510__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_985510__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_985510__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_985510__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_985510__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_985510__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_985510__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_985510__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_985510__(/*! ./../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_985510__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_985510__(/*! ./../../stateManagement/textStyle.js */ "./stateManagement/textStyle.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_985510__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_985510__(/*! ./../../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js");
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_985510__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_985510__(/*! ./../../manipulators/index.js */ "./manipulators/index.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_985510__(/*! ./../../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_985510__(/*! ./../../drawing/drawHandles.js */ "./drawing/drawHandles.js");
/* harmony import */ var _drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_985510__(/*! ./../../drawing/drawLinkedTextBox.js */ "./drawing/drawLinkedTextBox.js");
/* harmony import */ var _util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_985510__(/*! ./../../util/lineSegDistance.js */ "./util/lineSegDistance.js");
/* harmony import */ var _util_roundToDecimal_js__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_985510__(/*! ./../../util/roundToDecimal.js */ "./util/roundToDecimal.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_985510__(/*! ./../../events.js */ "./events.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_985510__(/*! ../cursors/index.js */ "./tools/cursors/index.js");
/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_985510__(/*! ../../util/triggerEvent.js */ "./util/triggerEvent.js");
/* harmony import */ var _util_throttle__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_985510__(/*! ../../util/throttle */ "./util/throttle.js");
/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_21__ = __nested_webpack_require_985510__(/*! ../../util/getPixelSpacing */ "./util/getPixelSpacing.js");
/* harmony import */ var _store_index__WEBPACK_IMPORTED_MODULE_22__ = __nested_webpack_require_985510__(/*! ../../store/index */ "./store/index.js");






 // State




 // Manipulators

 // Drawing












/**
 * @public
 * @class CobbAngleTool
 * @memberof Tools.Annotation
 * @classdesc Tool for measuring the angle between two straight lines.
 * @extends Tools.Base.BaseAnnotationTool
 */

var CobbAngleTool =
/*#__PURE__*/
function (_BaseAnnotationTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(CobbAngleTool, _BaseAnnotationTool);

  function CobbAngleTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, CobbAngleTool);

    var defaultProps = {
      name: 'CobbAngle',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_18__["cobbAngleCursor"],
      configuration: {
        drawHandles: true,
        drawHandlesOnHover: false,
        hideHandlesIfMoving: false,
        renderDashed: false
      }
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(CobbAngleTool).call(this, props, defaultProps));
    _this.hasIncomplete = false;
    _this.throttledUpdateCachedStats = Object(_util_throttle__WEBPACK_IMPORTED_MODULE_20__["default"])(_this.updateCachedStats, 110);
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(CobbAngleTool, [{
    key: "createNewMeasurement",
    value: function createNewMeasurement(eventData) {
      // Create the measurement data for this tool with the end handle activated
      this.hasIncomplete = true;
      return {
        visible: true,
        active: true,
        color: undefined,
        invalidated: true,
        complete: false,
        value: '',
        handles: {
          start: {
            x: eventData.currentPoints.image.x,
            y: eventData.currentPoints.image.y,
            highlight: true,
            active: false
          },
          end: {
            x: eventData.currentPoints.image.x,
            y: eventData.currentPoints.image.y,
            highlight: true,
            active: true
          },
          start2: {
            x: eventData.currentPoints.image.x,
            y: eventData.currentPoints.image.y,
            highlight: true,
            active: false,
            drawnIndependently: true
          },
          end2: {
            x: eventData.currentPoints.image.x + 1,
            y: eventData.currentPoints.image.y,
            highlight: true,
            active: false,
            drawnIndependently: true
          },
          textBox: {
            active: false,
            hasMoved: false,
            movesIndependently: false,
            drawnIndependently: true,
            allowedOutsideImage: true,
            hasBoundingBox: true
          }
        }
      };
    }
    /**
     *
     *
     * @param {*} element
     * @param {*} data
     * @param {*} coords
     * @returns {Boolean}
     */

  }, {
    key: "pointNearTool",
    value: function pointNearTool(element, data, coords) {
      if (data.visible === false) {
        return false;
      }

      if (this.hasIncomplete) {
        return false;
      }

      var seg1Near = Object(_util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_15__["default"])(element, data.handles.start, data.handles.end, coords) < 25;
      var seg2Near = Object(_util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_15__["default"])(element, data.handles.start2, data.handles.end2, coords) < 25;
      return seg1Near || seg2Near;
    }
  }, {
    key: "updateCachedStats",
    value: function updateCachedStats(image, element, data) {
      var _getPixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_21__["default"])(image),
          rowPixelSpacing = _getPixelSpacing.rowPixelSpacing,
          colPixelSpacing = _getPixelSpacing.colPixelSpacing;

      var dx1 = (Math.ceil(data.handles.start.x) - Math.ceil(data.handles.end.x)) * (colPixelSpacing || 1);
      var dy1 = (Math.ceil(data.handles.start.y) - Math.ceil(data.handles.end.y)) * (rowPixelSpacing || 1);
      var dx2 = (Math.ceil(data.handles.start2.x) - Math.ceil(data.handles.end2.x)) * (colPixelSpacing || 1);
      var dy2 = (Math.ceil(data.handles.start2.y) - Math.ceil(data.handles.end2.y)) * (rowPixelSpacing || 1);
      var angle = Math.acos(Math.abs((dx1 * dx2 + dy1 * dy2) / (Math.sqrt(dx1 * dx1 + dy1 * dy1) * Math.sqrt(dx2 * dx2 + dy2 * dy2))));
      angle *= 180 / Math.PI;
      data.rAngle = Object(_util_roundToDecimal_js__WEBPACK_IMPORTED_MODULE_16__["default"])(angle, 2);
      data.invalidated = false;
    }
  }, {
    key: "renderToolData",
    value: function renderToolData(evt) {
      var _this2 = this;

      var eventData = evt.detail;
      var _this$configuration = this.configuration,
          handleRadius = _this$configuration.handleRadius,
          drawHandlesOnHover = _this$configuration.drawHandlesOnHover,
          hideHandlesIfMoving = _this$configuration.hideHandlesIfMoving,
          renderDashed = _this$configuration.renderDashed; // If we have no toolData for this element, return immediately as there is nothing to do

      var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__["getToolState"])(evt.currentTarget, this.name);

      if (!toolData) {
        return;
      } // We have tool data for this element - iterate over each one and draw it


      var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["getNewContext"])(eventData.canvasContext.canvas);
      var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_9__["default"].getToolWidth();
      var lineDash = Object(_store_index__WEBPACK_IMPORTED_MODULE_22__["getModule"])('globalConfiguration').configuration.lineDash;
      var font = _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_7__["default"].getFont();
      var element = evt.detail.element;
      var image = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.getEnabledElement(element).image;

      var _getPixelSpacing2 = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_21__["default"])(image),
          rowPixelSpacing = _getPixelSpacing2.rowPixelSpacing,
          colPixelSpacing = _getPixelSpacing2.colPixelSpacing;

      var _loop = function _loop(i) {
        var data = toolData.data[i];

        if (data.visible === false) {
          return "continue";
        }

        if (!data.value) {
          data.value = _this2.textBoxText(data, rowPixelSpacing, colPixelSpacing);
        }

        Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["draw"])(context, function (context) {
          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["setShadow"])(context, _this2.configuration); // Differentiate the color of activation tool

          var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_10__["default"].getColorIfActive(data);
          var lineOptions = {
            color: color
          };

          if (renderDashed) {
            lineOptions.lineDash = lineDash;
          }

          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["drawLine"])(context, eventData.element, data.handles.start, data.handles.end, lineOptions);

          if (data.complete) {
            Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["drawLine"])(context, eventData.element, data.handles.start2, data.handles.end2, lineOptions);
          } // Draw the handles


          var handleOptions = {
            color: color,
            handleRadius: handleRadius,
            drawHandlesIfActive: drawHandlesOnHover,
            hideHandlesIfMoving: hideHandlesIfMoving
          };

          if (_this2.configuration.drawHandles) {
            Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_13__["default"])(context, eventData, data.handles, handleOptions);
          } // Draw the text


          context.fillStyle = color;
          var text = data.value;

          if (!data.handles.textBox.hasMoved) {
            var textCoords = {
              x: (data.handles.start.x + data.handles.end.x) / 2,
              y: (data.handles.start.y + data.handles.end.y) / 2 - 10
            };
            context.font = font;
            data.handles.textBox.x = textCoords.x;
            data.handles.textBox.y = textCoords.y;
          }

          Object(_drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_14__["default"])(context, eventData.element, data.handles.textBox, text, data.handles, textBoxAnchorPoints, color, lineWidth, 0, true);
        });
      };

      for (var i = 0; i < toolData.data.length; i++) {
        var _ret = _loop(i);

        if (_ret === "continue") continue;
      }

      function textBoxAnchorPoints(handles) {
        return [handles.start, handles.start2, handles.end, handles.end2];
      }
    }
  }, {
    key: "getIncomplete",
    value: function getIncomplete(element) {
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__["getToolState"])(element, this.name);

      if (toolState && Array.isArray(toolState.data)) {
        return toolState.data.find(function (_ref) {
          var complete = _ref.complete;
          return complete === false;
        });
      }
    }
  }, {
    key: "addNewMeasurement",
    value: function addNewMeasurement(evt, interactionType) {
      var _this3 = this;

      evt.preventDefault();
      evt.stopPropagation();
      var eventData = evt.detail;
      var measurementData;
      var toMoveHandle;

      var doneMovingCallback = function doneMovingCallback(success) {
        // DoneMovingCallback for first measurement.
        if (!success) {
          Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__["removeToolState"])(element, _this3.name, measurementData);
          return;
        }

        var eventType = _events_js__WEBPACK_IMPORTED_MODULE_17__["default"].MEASUREMENT_COMPLETED;
        var eventData = {
          toolName: _this3.name,
          toolType: _this3.name,
          // Deprecation notice: toolType will be replaced by toolName
          element: element,
          measurementData: measurementData
        };
        Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_19__["default"])(element, eventType, eventData);
      }; // Search for incomplete measurements


      var element = evt.detail.element;
      var pendingMeasurement = this.getIncomplete(element);

      if (pendingMeasurement) {
        measurementData = pendingMeasurement;
        measurementData.complete = true;
        measurementData.handles.start2 = {
          x: eventData.currentPoints.image.x,
          y: eventData.currentPoints.image.y,
          drawnIndependently: false,
          highlight: true,
          active: false
        };
        measurementData.handles.end2 = {
          x: eventData.currentPoints.image.x,
          y: eventData.currentPoints.image.y,
          drawnIndependently: false,
          highlight: true,
          active: true
        };
        toMoveHandle = measurementData.handles.end2;
        this.hasIncomplete = false;

        doneMovingCallback = function doneMovingCallback(success) {
          // DoneMovingCallback for second measurement
          if (!success) {
            Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__["removeToolState"])(element, _this3.name, measurementData);
            return;
          }

          var eventType = _events_js__WEBPACK_IMPORTED_MODULE_17__["default"].MEASUREMENT_COMPLETED;
          var eventData = {
            toolName: _this3.name,
            toolType: _this3.name,
            // Deprecation notice: toolType will be replaced by toolName
            element: element,
            measurementData: measurementData
          };
          Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_19__["default"])(element, eventType, eventData);
        };
      } else {
        measurementData = this.createNewMeasurement(eventData);
        Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__["addToolState"])(element, this.name, measurementData);
        toMoveHandle = measurementData.handles.end;
      } // Associate this data with this imageId so we can render it and manipulate it


      _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element);
      Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_11__["moveNewHandle"])(eventData, this.name, measurementData, toMoveHandle, this.options, interactionType, doneMovingCallback);
    }
  }, {
    key: "onMeasureModified",
    value: function onMeasureModified(ev) {
      var element = ev.detail.element;
      var image = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.getEnabledElement(element).image;

      var _getPixelSpacing3 = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_21__["default"])(image),
          rowPixelSpacing = _getPixelSpacing3.rowPixelSpacing,
          colPixelSpacing = _getPixelSpacing3.colPixelSpacing;

      if (ev.detail.toolName !== this.name) {
        return;
      }

      var data = ev.detail.measurementData; // Update textbox stats

      if (data.invalidated === true) {
        if (data.rAngle) {
          this.throttledUpdateCachedStats(image, element, data);
        } else {
          this.updateCachedStats(image, element, data);
        }
      }

      data.value = this.textBoxText(data, rowPixelSpacing, colPixelSpacing);
    }
  }, {
    key: "textBoxText",
    value: function textBoxText(_ref2, rowPixelSpacing, colPixelSpacing) {
      var rAngle = _ref2.rAngle;

      if (rAngle === undefined) {
        return '';
      }

      if (Number.isNaN(rAngle)) {
        return '';
      }

      var suffix = !rowPixelSpacing || !colPixelSpacing ? ' (isotropic)' : '';
      return "".concat(rAngle, "\xB0").concat(suffix);
    }
  }, {
    key: "activeCallback",
    value: function activeCallback(element) {
      this.onMeasureModified = this.onMeasureModified.bind(this);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_17__["default"].MEASUREMENT_MODIFIED, this.onMeasureModified);
    }
  }, {
    key: "passiveCallback",
    value: function passiveCallback(element) {
      this.onMeasureModified = this.onMeasureModified.bind(this);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_17__["default"].MEASUREMENT_MODIFIED, this.onMeasureModified);
    }
  }, {
    key: "enabledCallback",
    value: function enabledCallback(element) {
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_17__["default"].MEASUREMENT_MODIFIED, this.onMeasureModified);
    }
  }, {
    key: "disabledCallback",
    value: function disabledCallback(element) {
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_17__["default"].MEASUREMENT_MODIFIED, this.onMeasureModified);
    }
  }]);

  return CobbAngleTool;
}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);



/***/ }),

/***/ "./tools/annotation/EllipticalRoiTool.js":
/*!***********************************************!*\
  !*** ./tools/annotation/EllipticalRoiTool.js ***!
  \***********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1006303__) {

"use strict";
__nested_webpack_require_1006303__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1006303__.d(__nested_webpack_exports__, "default", function() { return EllipticalRoiTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1006303__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1006303__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1006303__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_1006303__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1006303__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_1006303__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1006303__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_1006303__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1006303__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_1006303__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1006303__(/*! ./../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1006303__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1006303__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1006303__(/*! ./../../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js");
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1006303__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _manipulators_getHandleNearImagePoint__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1006303__(/*! ../../manipulators/getHandleNearImagePoint */ "./manipulators/getHandleNearImagePoint.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1006303__(/*! ./../../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_1006303__(/*! ./../../util/calculateSUV.js */ "./util/calculateSUV.js");
/* harmony import */ var _util_ellipse_index_js__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_1006303__(/*! ./../../util/ellipse/index.js */ "./util/ellipse/index.js");
/* harmony import */ var _util_getROITextBoxCoords_js__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_1006303__(/*! ../../util/getROITextBoxCoords.js */ "./util/getROITextBoxCoords.js");
/* harmony import */ var _util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_1006303__(/*! ./../../util/numbersWithCommas.js */ "./util/numbersWithCommas.js");
/* harmony import */ var _util_throttle_js__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_1006303__(/*! ./../../util/throttle.js */ "./util/throttle.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_1006303__(/*! ../cursors/index.js */ "./tools/cursors/index.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_1006303__(/*! ../../util/logger.js */ "./util/logger.js");
/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_1006303__(/*! ../../util/getPixelSpacing */ "./util/getPixelSpacing.js");
/* harmony import */ var _store_index__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_1006303__(/*! ../../store/index */ "./store/index.js");






 // State




 // Drawing

 // Util










var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_18__["getLogger"])('tools:annotation:EllipticalRoiTool');
/**
 * @public
 * @class EllipticalRoiTool
 * @memberof Tools.Annotation
 * @classdesc Tool for drawing elliptical regions of interest, and measuring
 * the statistics of the enclosed pixels.
 * @extends Tools.Base.BaseAnnotationTool
 */

var EllipticalRoiTool =
/*#__PURE__*/
function (_BaseAnnotationTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(EllipticalRoiTool, _BaseAnnotationTool);

  function EllipticalRoiTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, EllipticalRoiTool);

    var defaultProps = {
      name: 'EllipticalRoi',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      configuration: {
        // showMinMax: false,
        // showHounsfieldUnits: true,
        drawHandlesOnHover: false,
        hideHandlesIfMoving: false,
        renderDashed: false
      },
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_17__["ellipticalRoiCursor"]
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(EllipticalRoiTool).call(this, props, defaultProps));
    _this.throttledUpdateCachedStats = Object(_util_throttle_js__WEBPACK_IMPORTED_MODULE_16__["default"])(_this.updateCachedStats, 110);
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(EllipticalRoiTool, [{
    key: "createNewMeasurement",
    value: function createNewMeasurement(eventData) {
      var goodEventData = eventData && eventData.currentPoints && eventData.currentPoints.image;

      if (!goodEventData) {
        logger.error("required eventData not supplied to tool ".concat(this.name, "'s createNewMeasurement"));
        return;
      }

      return {
        visible: true,
        active: true,
        color: undefined,
        invalidated: true,
        handles: {
          start: {
            x: eventData.currentPoints.image.x,
            y: eventData.currentPoints.image.y,
            highlight: true,
            active: false
          },
          end: {
            x: eventData.currentPoints.image.x,
            y: eventData.currentPoints.image.y,
            highlight: true,
            active: true
          },
          initialRotation: eventData.viewport.rotation,
          textBox: {
            active: false,
            hasMoved: false,
            movesIndependently: false,
            drawnIndependently: true,
            allowedOutsideImage: true,
            hasBoundingBox: true
          }
        }
      };
    }
  }, {
    key: "pointNearTool",
    value: function pointNearTool(element, data, coords, interactionType) {
      var hasStartAndEndHandles = data && data.handles && data.handles.start && data.handles.end;
      var validParameters = hasStartAndEndHandles;

      if (!validParameters) {
        logger.warn("invalid parameters supplied to tool ".concat(this.name, "'s pointNearTool"));
      }

      if (!validParameters || data.visible === false) {
        return false;
      }

      var handleNearImagePoint = Object(_manipulators_getHandleNearImagePoint__WEBPACK_IMPORTED_MODULE_10__["default"])(element, data.handles, coords, 6);

      if (handleNearImagePoint) {
        return true;
      }

      var distance = interactionType === 'mouse' ? 15 : 25;
      var startCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.start);
      var endCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.end);
      var minorEllipse = {
        left: Math.min(startCanvas.x, endCanvas.x) + distance / 2,
        top: Math.min(startCanvas.y, endCanvas.y) + distance / 2,
        width: Math.abs(startCanvas.x - endCanvas.x) - distance,
        height: Math.abs(startCanvas.y - endCanvas.y) - distance
      };
      var majorEllipse = {
        left: Math.min(startCanvas.x, endCanvas.x) - distance / 2,
        top: Math.min(startCanvas.y, endCanvas.y) - distance / 2,
        width: Math.abs(startCanvas.x - endCanvas.x) + distance,
        height: Math.abs(startCanvas.y - endCanvas.y) + distance
      };
      var pointInMinorEllipse = Object(_util_ellipse_index_js__WEBPACK_IMPORTED_MODULE_13__["pointInEllipse"])(minorEllipse, coords);
      var pointInMajorEllipse = Object(_util_ellipse_index_js__WEBPACK_IMPORTED_MODULE_13__["pointInEllipse"])(majorEllipse, coords);

      if (pointInMajorEllipse && !pointInMinorEllipse) {
        return true;
      }

      return false;
    }
  }, {
    key: "updateCachedStats",
    value: function updateCachedStats(image, element, data) {
      var seriesModule = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.metaData.get('generalSeriesModule', image.imageId) || {};
      var modality = seriesModule.modality;
      var pixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_19__["default"])(image);

      var stats = _calculateStats(image, element, data.handles, modality, pixelSpacing);

      data.cachedStats = stats;
      data.invalidated = false;
    }
  }, {
    key: "renderToolData",
    value: function renderToolData(evt) {
      var _this2 = this;

      var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__["getToolState"])(evt.currentTarget, this.name);

      if (!toolData) {
        return;
      }

      var eventData = evt.detail;
      var image = eventData.image,
          element = eventData.element;
      var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getToolWidth();
      var lineDash = Object(_store_index__WEBPACK_IMPORTED_MODULE_20__["getModule"])('globalConfiguration').configuration.lineDash;
      var _this$configuration = this.configuration,
          handleRadius = _this$configuration.handleRadius,
          drawHandlesOnHover = _this$configuration.drawHandlesOnHover,
          hideHandlesIfMoving = _this$configuration.hideHandlesIfMoving,
          renderDashed = _this$configuration.renderDashed;
      var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["getNewContext"])(eventData.canvasContext.canvas);

      var _getPixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_19__["default"])(image),
          rowPixelSpacing = _getPixelSpacing.rowPixelSpacing,
          colPixelSpacing = _getPixelSpacing.colPixelSpacing; // Meta


      var seriesModule = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.metaData.get('generalSeriesModule', image.imageId) || {}; // Pixel Spacing

      var modality = seriesModule.modality;
      var hasPixelSpacing = rowPixelSpacing && colPixelSpacing;
      Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["draw"])(context, function (context) {
        // If we have tool data for this element - iterate over each set and draw it
        for (var i = 0; i < toolData.data.length; i++) {
          var data = toolData.data[i];

          if (data.visible === false) {
            continue;
          } // Configure


          var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getColorIfActive(data);
          var handleOptions = {
            color: color,
            handleRadius: handleRadius,
            drawHandlesIfActive: drawHandlesOnHover,
            hideHandlesIfMoving: hideHandlesIfMoving
          };
          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["setShadow"])(context, _this2.configuration);
          var ellipseOptions = {
            color: color
          };

          if (renderDashed) {
            ellipseOptions.lineDash = lineDash;
          } // Draw


          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["drawEllipse"])(context, element, data.handles.start, data.handles.end, ellipseOptions, 'pixel', data.handles.initialRotation);
          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["drawHandles"])(context, eventData, data.handles, handleOptions); // Update textbox stats

          if (data.invalidated === true) {
            if (data.cachedStats) {
              _this2.throttledUpdateCachedStats(image, element, data);
            } else {
              _this2.updateCachedStats(image, element, data);
            }
          } // Default to textbox on right side of ROI


          if (!data.handles.textBox.hasMoved) {
            var defaultCoords = Object(_util_getROITextBoxCoords_js__WEBPACK_IMPORTED_MODULE_14__["default"])(eventData.viewport, data.handles);
            Object.assign(data.handles.textBox, defaultCoords);
          }

          var textBoxAnchorPoints = function textBoxAnchorPoints(handles) {
            return _findTextBoxAnchorPoints(handles.start, handles.end);
          };

          var textBoxContent = _createTextBoxContent(context, image.color, data.cachedStats, modality, hasPixelSpacing, _this2.configuration);

          data.unit = _getUnit(modality, _this2.configuration.showHounsfieldUnits);
          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["drawLinkedTextBox"])(context, element, data.handles.textBox, textBoxContent, data.handles, textBoxAnchorPoints, color, lineWidth, 10, true);
        }
      });
    }
  }]);

  return EllipticalRoiTool;
}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);
/**
 *
 *
 * @param {*} startHandle
 * @param {*} endHandle
 * @returns {Array.<{x: number, y: number}>}
 */




function _findTextBoxAnchorPoints(startHandle, endHandle) {
  var _getEllipseImageCoord = _getEllipseImageCoordinates(startHandle, endHandle),
      left = _getEllipseImageCoord.left,
      top = _getEllipseImageCoord.top,
      width = _getEllipseImageCoord.width,
      height = _getEllipseImageCoord.height;

  return [{
    // Top middle point of ellipse
    x: left + width / 2,
    y: top
  }, {
    // Left middle point of ellipse
    x: left,
    y: top + height / 2
  }, {
    // Bottom middle point of ellipse
    x: left + width / 2,
    y: top + height
  }, {
    // Right middle point of ellipse
    x: left + width,
    y: top + height / 2
  }];
}

function _getUnit(modality, showHounsfieldUnits) {
  return modality === 'CT' && showHounsfieldUnits !== false ? 'HU' : '';
}
/**
 *
 *
 * @param {*} context
 * @param {*} isColorImage
 * @param {*} { area, mean, stdDev, min, max, meanStdDevSUV }
 * @param {*} modality
 * @param {*} hasPixelSpacing
 * @param {*} [options={}] - { showMinMax, showHounsfieldUnits }
 * @returns {string[]}
 */


function _createTextBoxContent(context, isColorImage) {
  var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
      _ref$area = _ref.area,
      area = _ref$area === void 0 ? 0 : _ref$area,
      _ref$mean = _ref.mean,
      mean = _ref$mean === void 0 ? 0 : _ref$mean,
      _ref$stdDev = _ref.stdDev,
      stdDev = _ref$stdDev === void 0 ? 0 : _ref$stdDev,
      _ref$min = _ref.min,
      min = _ref$min === void 0 ? 0 : _ref$min,
      _ref$max = _ref.max,
      max = _ref$max === void 0 ? 0 : _ref$max,
      _ref$meanStdDevSUV = _ref.meanStdDevSUV,
      meanStdDevSUV = _ref$meanStdDevSUV === void 0 ? 0 : _ref$meanStdDevSUV;

  var modality = arguments.length > 3 ? arguments[3] : undefined;
  var hasPixelSpacing = arguments.length > 4 ? arguments[4] : undefined;
  var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
  var showMinMax = options.showMinMax || false;
  var textLines = []; // Don't display mean/standardDev for color images

  var otherLines = [];

  if (!isColorImage) {
    var hasStandardUptakeValues = meanStdDevSUV && meanStdDevSUV.mean !== 0;

    var unit = _getUnit(modality, options.showHounsfieldUnits);

    var meanString = "Mean: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_15__["default"])(mean.toFixed(2)), " ").concat(unit);
    var stdDevString = "Std Dev: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_15__["default"])(stdDev.toFixed(2)), " ").concat(unit); // If this image has SUV values to display, concatenate them to the text line

    if (hasStandardUptakeValues) {
      var SUVtext = ' SUV: ';
      var meanSuvString = "".concat(SUVtext).concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_15__["default"])(meanStdDevSUV.mean.toFixed(2)));
      var stdDevSuvString = "".concat(SUVtext).concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_15__["default"])(meanStdDevSUV.stdDev.toFixed(2)));
      var targetStringLength = Math.floor(context.measureText("".concat(stdDevString, "     ")).width);

      while (context.measureText(meanString).width < targetStringLength) {
        meanString += ' ';
      }

      otherLines.push("".concat(meanString).concat(meanSuvString));
      otherLines.push("".concat(stdDevString, "     ").concat(stdDevSuvString));
    } else {
      otherLines.push("".concat(meanString));
      otherLines.push("".concat(stdDevString));
    }

    if (showMinMax) {
      var minString = "Min: ".concat(min, " ").concat(unit);
      var maxString = "Max: ".concat(max, " ").concat(unit);

      var _targetStringLength = hasStandardUptakeValues ? Math.floor(context.measureText("".concat(stdDevString, "     ")).width) : Math.floor(context.measureText("".concat(meanString, "     ")).width);

      while (context.measureText(minString).width < _targetStringLength) {
        minString += ' ';
      }

      otherLines.push("".concat(minString).concat(maxString));
    }
  }

  textLines.push(_formatArea(area, hasPixelSpacing));
  otherLines.forEach(function (x) {
    return textLines.push(x);
  });
  return textLines;
}
/**
 *
 *
 * @param {*} area
 * @param {*} hasPixelSpacing
 * @returns {string} The formatted label for showing area
 */


function _formatArea(area, hasPixelSpacing) {
  // This uses Char code 178 for a superscript 2
  var suffix = hasPixelSpacing ? " mm".concat(String.fromCharCode(178)) : " px".concat(String.fromCharCode(178));
  return "Area: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_15__["default"])(area.toFixed(2))).concat(suffix);
}
/**
 *
 *
 * @param {*} image
 * @param {*} element
 * @param {*} handles
 * @param {*} modality
 * @param {*} pixelSpacing
 * @returns {Object} The Stats object
 */


function _calculateStats(image, element, handles, modality, pixelSpacing) {
  // Retrieve the bounds of the ellipse in image coordinates
  var ellipseCoordinates = _getEllipseImageCoordinates(handles.start, handles.end); // Retrieve the array of pixels that the ellipse bounds cover


  var pixels = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.getPixels(element, ellipseCoordinates.left, ellipseCoordinates.top, ellipseCoordinates.width, ellipseCoordinates.height); // Calculate the mean & standard deviation from the pixels and the ellipse details.

  var ellipseMeanStdDev = Object(_util_ellipse_index_js__WEBPACK_IMPORTED_MODULE_13__["calculateEllipseStatistics"])(pixels, ellipseCoordinates);
  var meanStdDevSUV;

  if (modality === 'PT') {
    meanStdDevSUV = {
      mean: Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_12__["default"])(image, ellipseMeanStdDev.mean, true) || 0,
      stdDev: Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_12__["default"])(image, ellipseMeanStdDev.stdDev, true) || 0
    };
  } // Calculate the image area from the ellipse dimensions and pixel spacing


  var area = Math.PI * (ellipseCoordinates.width * (pixelSpacing.colPixelSpacing || 1) / 2) * (ellipseCoordinates.height * (pixelSpacing.rowPixelSpacing || 1) / 2);
  return {
    area: area || 0,
    count: ellipseMeanStdDev.count || 0,
    mean: ellipseMeanStdDev.mean || 0,
    variance: ellipseMeanStdDev.variance || 0,
    stdDev: ellipseMeanStdDev.stdDev || 0,
    min: ellipseMeanStdDev.min || 0,
    max: ellipseMeanStdDev.max || 0,
    meanStdDevSUV: meanStdDevSUV
  };
}
/**
 * Retrieve the bounds of the ellipse in image coordinates
 *
 * @param {*} startHandle
 * @param {*} endHandle
 * @returns {{ left: number, top: number, width: number, height: number }}
 */


function _getEllipseImageCoordinates(startHandle, endHandle) {
  return {
    left: Math.round(Math.min(startHandle.x, endHandle.x)),
    top: Math.round(Math.min(startHandle.y, endHandle.y)),
    width: Math.round(Math.abs(startHandle.x - endHandle.x)),
    height: Math.round(Math.abs(startHandle.y - endHandle.y))
  };
}

/***/ }),

/***/ "./tools/annotation/FreehandRoiTool.js":
/*!*********************************************!*\
  !*** ./tools/annotation/FreehandRoiTool.js ***!
  \*********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1028437__) {

"use strict";
__nested_webpack_require_1028437__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1028437__.d(__nested_webpack_exports__, "default", function() { return FreehandRoiTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1028437__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1028437__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1028437__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_1028437__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1028437__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_1028437__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1028437__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_1028437__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1028437__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_1028437__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1028437__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__nested_webpack_require_1028437__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1028437__(/*! ./../../events.js */ "./events.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1028437__(/*! ./../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1028437__(/*! ./../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1028437__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1028437__(/*! ./../../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js");
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1028437__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_1028437__(/*! ../../store/index.js */ "./store/index.js");
/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_1028437__(/*! ../../util/triggerEvent.js */ "./util/triggerEvent.js");
/* harmony import */ var _util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_1028437__(/*! ../../util/findAndMoveHelpers.js */ "./util/findAndMoveHelpers.js");
/* harmony import */ var _util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_1028437__(/*! ../../util/pointInsideBoundingBox.js */ "./util/pointInsideBoundingBox.js");
/* harmony import */ var _util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_1028437__(/*! ../../util/calculateSUV.js */ "./util/calculateSUV.js");
/* harmony import */ var _util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_1028437__(/*! ../../util/numbersWithCommas.js */ "./util/numbersWithCommas.js");
/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_1028437__(/*! ../../util/getPixelSpacing */ "./util/getPixelSpacing.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_1028437__(/*! ../../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_1028437__(/*! ../../drawing/drawLinkedTextBox.js */ "./drawing/drawLinkedTextBox.js");
/* harmony import */ var _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_21__ = __nested_webpack_require_1028437__(/*! ../../drawing/drawHandles.js */ "./drawing/drawHandles.js");
/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_22__ = __nested_webpack_require_1028437__(/*! ../../util/clip.js */ "./util/clip.js");
/* harmony import */ var _store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_23__ = __nested_webpack_require_1028437__(/*! ../../store/setToolCursor.js */ "./store/setToolCursor.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_24__ = __nested_webpack_require_1028437__(/*! ../cursors/index.js */ "./tools/cursors/index.js");
/* harmony import */ var _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_25__ = __nested_webpack_require_1028437__(/*! ../../util/freehand/index.js */ "./util/freehand/index.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_26__ = __nested_webpack_require_1028437__(/*! ../../util/logger.js */ "./util/logger.js");
/* harmony import */ var _util_throttle__WEBPACK_IMPORTED_MODULE_27__ = __nested_webpack_require_1028437__(/*! ../../util/throttle */ "./util/throttle.js");








 // State





 // Manipulators

 // Implementation Logic




 // Drawing











var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_26__["getLogger"])('tools:annotation:FreehandRoiTool');
var insertOrDelete = _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_25__["default"].insertOrDelete,
    freehandArea = _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_25__["default"].freehandArea,
    calculateFreehandStatistics = _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_25__["default"].calculateFreehandStatistics,
    freehandIntersect = _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_25__["default"].freehandIntersect,
    FreehandHandleData = _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_25__["default"].FreehandHandleData;
/**
 * @public
 * @class FreehandRoiTool
 * @memberof Tools.Annotation
 * @classdesc Tool for drawing arbitrary polygonal regions of interest, and
 * measuring the statistics of the enclosed pixels.
 * @extends Tools.Base.BaseAnnotationTool
 */

var FreehandRoiTool =
/*#__PURE__*/
function (_BaseAnnotationTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(FreehandRoiTool, _BaseAnnotationTool);

  function FreehandRoiTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, FreehandRoiTool);

    var defaultProps = {
      name: 'FreehandRoi',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      configuration: defaultFreehandConfiguration(),
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_24__["freehandRoiCursor"]
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(FreehandRoiTool).call(this, props, defaultProps));
    _this.isMultiPartTool = true;
    _this._drawing = false;
    _this._dragging = false;
    _this._modifying = false; // Create bound callback functions for private event loops

    _this._drawingMouseDownCallback = _this._drawingMouseDownCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this._drawingMouseMoveCallback = _this._drawingMouseMoveCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this._drawingMouseDragCallback = _this._drawingMouseDragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this._drawingMouseUpCallback = _this._drawingMouseUpCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this._drawingMouseDoubleClickCallback = _this._drawingMouseDoubleClickCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this._editMouseUpCallback = _this._editMouseUpCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this._editMouseDragCallback = _this._editMouseDragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this._drawingTouchStartCallback = _this._drawingTouchStartCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this._drawingTouchDragCallback = _this._drawingTouchDragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this._drawingDoubleTapClickCallback = _this._drawingDoubleTapClickCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this._editTouchDragCallback = _this._editTouchDragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.throttledUpdateCachedStats = Object(_util_throttle__WEBPACK_IMPORTED_MODULE_27__["default"])(_this.updateCachedStats, 110);
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(FreehandRoiTool, [{
    key: "createNewMeasurement",
    value: function createNewMeasurement(eventData) {
      var goodEventData = eventData && eventData.currentPoints && eventData.currentPoints.image;

      if (!goodEventData) {
        logger.error("required eventData not supplied to tool ".concat(this.name, "'s createNewMeasurement"));
        return;
      }

      var measurementData = {
        visible: true,
        active: true,
        invalidated: true,
        color: undefined,
        handles: {
          points: []
        }
      };
      measurementData.handles.textBox = {
        active: false,
        hasMoved: false,
        movesIndependently: false,
        drawnIndependently: true,
        allowedOutsideImage: true,
        hasBoundingBox: true
      };
      return measurementData;
    }
    /**
     *
     *
     * @param {*} element element
     * @param {*} data data
     * @param {*} coords coords
     * @returns {Boolean}
     */

  }, {
    key: "pointNearTool",
    value: function pointNearTool(element, data, coords) {
      var validParameters = data && data.handles && data.handles.points;

      if (!validParameters) {
        throw new Error("invalid parameters supplied to tool ".concat(this.name, "'s pointNearTool"));
      }

      if (!validParameters || data.visible === false) {
        return false;
      }

      var isPointNearTool = this._pointNearHandle(element, data, coords);

      if (isPointNearTool !== undefined) {
        return true;
      }

      return false;
    }
    /**
     * @param {*} element
     * @param {*} data
     * @param {*} coords
     * @returns {number} the distance in px from the provided coordinates to the
     * closest rendered portion of the annotation. -1 if the distance cannot be
     * calculated.
     */

  }, {
    key: "distanceFromPoint",
    value: function distanceFromPoint(element, data, coords) {
      var distance = Infinity;

      for (var i = 0; i < data.handles.points.length; i++) {
        var distanceI = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstoneMath.point.distance(data.handles.points[i], coords);
        distance = Math.min(distance, distanceI);
      } // If an error caused distance not to be calculated, return -1.


      if (distance === Infinity) {
        return -1;
      }

      return distance;
    }
    /**
     * @param {*} element
     * @param {*} data
     * @param {*} coords
     * @returns {number} the distance in canvas units from the provided coordinates to the
     * closest rendered portion of the annotation. -1 if the distance cannot be
     * calculated.
     */

  }, {
    key: "distanceFromPointCanvas",
    value: function distanceFromPointCanvas(element, data, coords) {
      var distance = Infinity;

      if (!data) {
        return -1;
      }

      var canvasCoords = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.pixelToCanvas(element, coords);
      var points = data.handles.points;

      for (var i = 0; i < points.length; i++) {
        var handleCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.pixelToCanvas(element, points[i]);
        var distanceI = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstoneMath.point.distance(handleCanvas, canvasCoords);
        distance = Math.min(distance, distanceI);
      } // If an error caused distance not to be calculated, return -1.


      if (distance === Infinity) {
        return -1;
      }

      return distance;
    }
    /**
     *
     *
     *
     * @param {Object} image image
     * @param {Object} element element
     * @param {Object} data data
     *
     * @returns {void}  void
     */

  }, {
    key: "updateCachedStats",
    value: function updateCachedStats(image, element, data) {
      // Define variables for the area and mean/standard deviation
      var meanStdDev, meanStdDevSUV;
      var seriesModule = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.metaData.get('generalSeriesModule', image.imageId);
      var modality = seriesModule ? seriesModule.modality : null;
      var points = data.handles.points; // If the data has been invalidated, and the tool is not currently active,
      // We need to calculate it again.
      // Retrieve the bounds of the ROI in image coordinates

      var bounds = {
        left: points[0].x,
        right: points[0].x,
        bottom: points[0].y,
        top: points[0].x
      };

      for (var i = 0; i < points.length; i++) {
        bounds.left = Math.min(bounds.left, points[i].x);
        bounds.right = Math.max(bounds.right, points[i].x);
        bounds.bottom = Math.min(bounds.bottom, points[i].y);
        bounds.top = Math.max(bounds.top, points[i].y);
      }

      var polyBoundingBox = {
        left: bounds.left,
        top: bounds.bottom,
        width: Math.abs(bounds.right - bounds.left),
        height: Math.abs(bounds.top - bounds.bottom)
      }; // Store the bounding box information for the text box

      data.polyBoundingBox = polyBoundingBox; // First, make sure this is not a color image, since no mean / standard
      // Deviation will be calculated for color images.

      if (!image.color) {
        // Retrieve the array of pixels that the ROI bounds cover
        var pixels = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.getPixels(element, polyBoundingBox.left, polyBoundingBox.top, polyBoundingBox.width, polyBoundingBox.height); // Calculate the mean & standard deviation from the pixels and the object shape

        meanStdDev = calculateFreehandStatistics.call(this, pixels, polyBoundingBox, data.handles.points);

        if (modality === 'PT') {
          // If the image is from a PET scan, use the DICOM tags to
          // Calculate the SUV from the mean and standard deviation.
          // Note that because we are using modality pixel values from getPixels, and
          // The calculateSUV routine also rescales to modality pixel values, we are first
          // Returning the values to storedPixel values before calcuating SUV with them.
          // TODO: Clean this up? Should we add an option to not scale in calculateSUV?
          meanStdDevSUV = {
            mean: Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_16__["default"])(image, (meanStdDev.mean - image.intercept) / image.slope),
            stdDev: Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_16__["default"])(image, (meanStdDev.stdDev - image.intercept) / image.slope)
          };
        } // If the mean and standard deviation values are sane, store them for later retrieval


        if (meanStdDev && !isNaN(meanStdDev.mean)) {
          data.meanStdDev = meanStdDev;
          data.meanStdDevSUV = meanStdDevSUV;
        }
      } // Retrieve the pixel spacing values, and if they are not
      // Real non-zero values, set them to 1


      var _getPixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_18__["default"])(image),
          colPixelSpacing = _getPixelSpacing.colPixelSpacing,
          rowPixelSpacing = _getPixelSpacing.rowPixelSpacing;

      var scaling = (colPixelSpacing || 1) * (rowPixelSpacing || 1);
      var area = freehandArea(data.handles.points, scaling); // If the area value is sane, store it for later retrieval

      if (!isNaN(area)) {
        data.area = area;
      } // Set the invalidated flag to false so that this data won't automatically be recalculated


      data.invalidated = false;
    }
    /**
     *
     *
     * @param {*} evt
     * @returns {undefined}
     */

  }, {
    key: "renderToolData",
    value: function renderToolData(evt) {
      var _this2 = this;

      var eventData = evt.detail; // If we have no toolState for this element, return immediately as there is nothing to do

      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(evt.currentTarget, this.name);

      if (!toolState) {
        return;
      }

      var image = eventData.image,
          element = eventData.element;
      var config = this.configuration;
      var seriesModule = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.metaData.get('generalSeriesModule', image.imageId);
      var modality = seriesModule ? seriesModule.modality : null; // We have tool data for this element - iterate over each one and draw it

      var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_19__["getNewContext"])(eventData.canvasContext.canvas);
      var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_10__["default"].getToolWidth();
      var renderDashed = config.renderDashed;
      var lineDash = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_12__["getModule"])('globalConfiguration').configuration.lineDash;

      var _loop = function _loop(i) {
        var data = toolState.data[i];

        if (data.visible === false) {
          return "continue";
        }

        Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_19__["draw"])(context, function (context) {
          var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_11__["default"].getColorIfActive(data);
          var fillColor;

          if (data.active) {
            if (data.handles.invalidHandlePlacement) {
              color = config.invalidColor;
              fillColor = config.invalidColor;
            } else {
              color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_11__["default"].getColorIfActive(data);
              fillColor = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_11__["default"].getFillColor();
            }
          } else {
            fillColor = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_11__["default"].getToolColor();
          }

          var options = {
            color: color
          };

          if (renderDashed) {
            options.lineDash = lineDash;
          }

          if (data.handles.points.length) {
            var points = data.handles.points;
            Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_19__["drawJoinedLines"])(context, element, points[0], points, options);

            if (data.polyBoundingBox) {
              Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_19__["drawJoinedLines"])(context, element, points[points.length - 1], [points[0]], options);
            } else {
              Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_19__["drawJoinedLines"])(context, element, points[points.length - 1], [config.mouseLocation.handles.start], options);
            }
          } // Draw handles


          options = {
            color: color,
            fill: fillColor
          };

          if (config.alwaysShowHandles || data.active && data.polyBoundingBox) {
            // Render all handles
            options.handleRadius = config.activeHandleRadius;

            if (_this2.configuration.drawHandles) {
              Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_21__["default"])(context, eventData, data.handles.points, options);
            }
          }

          if (data.canComplete) {
            // Draw large handle at the origin if can complete drawing
            options.handleRadius = config.completeHandleRadius;
            var handle = data.handles.points[0];

            if (_this2.configuration.drawHandles) {
              Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_21__["default"])(context, eventData, [handle], options);
            }
          }

          if (data.active && !data.polyBoundingBox) {
            // Draw handle at origin and at mouse if actively drawing
            options.handleRadius = config.activeHandleRadius;

            if (_this2.configuration.drawHandles) {
              Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_21__["default"])(context, eventData, config.mouseLocation.handles, options);
            }

            var firstHandle = data.handles.points[0];

            if (_this2.configuration.drawHandles) {
              Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_21__["default"])(context, eventData, [firstHandle], options);
            }
          } // Update textbox stats


          if (data.invalidated === true && !data.active) {
            if (data.meanStdDev && data.meanStdDevSUV && data.area) {
              _this2.throttledUpdateCachedStats(image, element, data);
            } else {
              _this2.updateCachedStats(image, element, data);
            }
          } // Only render text if polygon ROI has been completed and freehand 'shiftKey' mode was not used:


          if (data.polyBoundingBox && !data.handles.textBox.freehand) {
            // If the textbox has not been moved by the user, it should be displayed on the right-most
            // Side of the tool.
            if (!data.handles.textBox.hasMoved) {
              // Find the rightmost side of the polyBoundingBox at its vertical center, and place the textbox here
              // Note that this calculates it in image coordinates
              data.handles.textBox.x = data.polyBoundingBox.left + data.polyBoundingBox.width;
              data.handles.textBox.y = data.polyBoundingBox.top + data.polyBoundingBox.height / 2;
            }

            var text = textBoxText.call(_this2, data);
            Object(_drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_20__["default"])(context, element, data.handles.textBox, text, data.handles.points, textBoxAnchorPoints, color, lineWidth, 0, true);
          }
        });
      };

      for (var i = 0; i < toolState.data.length; i++) {
        var _ret = _loop(i);

        if (_ret === "continue") continue;
      }

      function textBoxText(data) {
        var meanStdDev = data.meanStdDev,
            meanStdDevSUV = data.meanStdDevSUV,
            area = data.area; // Define an array to store the rows of text for the textbox

        var textLines = []; // If the mean and standard deviation values are present, display them

        if (meanStdDev && meanStdDev.mean !== undefined) {
          // If the modality is CT, add HU to denote Hounsfield Units
          var moSuffix = '';

          if (modality === 'CT') {
            moSuffix = 'HU';
          }

          data.unit = moSuffix; // Create a line of text to display the mean and any units that were specified (i.e. HU)

          var meanText = "Mean: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_17__["default"])(meanStdDev.mean.toFixed(2)), " ").concat(moSuffix); // Create a line of text to display the standard deviation and any units that were specified (i.e. HU)

          var stdDevText = "StdDev: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_17__["default"])(meanStdDev.stdDev.toFixed(2)), " ").concat(moSuffix); // If this image has SUV values to display, concatenate them to the text line

          if (meanStdDevSUV && meanStdDevSUV.mean !== undefined) {
            var SUVtext = ' SUV: ';
            meanText += SUVtext + Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_17__["default"])(meanStdDevSUV.mean.toFixed(2));
            stdDevText += SUVtext + Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_17__["default"])(meanStdDevSUV.stdDev.toFixed(2));
          } // Add these text lines to the array to be displayed in the textbox


          textLines.push(meanText);
          textLines.push(stdDevText);
        } // If the area is a sane value, display it


        if (area) {
          // Determine the area suffix based on the pixel spacing in the image.
          // If pixel spacing is present, use millimeters. Otherwise, use pixels.
          // This uses Char code 178 for a superscript 2
          var suffix = " mm".concat(String.fromCharCode(178));

          var _getPixelSpacing2 = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_18__["default"])(image),
              rowPixelSpacing = _getPixelSpacing2.rowPixelSpacing,
              colPixelSpacing = _getPixelSpacing2.colPixelSpacing;

          if (!rowPixelSpacing || !colPixelSpacing) {
            suffix = " pixels".concat(String.fromCharCode(178));
          } // Create a line of text to display the area and its units


          var areaText = "Area: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_17__["default"])(area.toFixed(2))).concat(suffix); // Add this text line to the array to be displayed in the textbox

          textLines.push(areaText);
        }

        return textLines;
      }

      function textBoxAnchorPoints(handles) {
        return handles;
      }
    }
  }, {
    key: "addNewMeasurement",
    value: function addNewMeasurement(evt) {
      var eventData = evt.detail;

      this._startDrawing(evt);

      this._addPoint(eventData);

      preventPropagation(evt);
    }
  }, {
    key: "preMouseDownCallback",
    value: function preMouseDownCallback(evt) {
      var eventData = evt.detail;

      var nearby = this._pointNearHandleAllTools(eventData);

      if (eventData.event.ctrlKey) {
        if (nearby !== undefined && nearby.handleNearby.hasBoundingBox) {// Ctrl + clicked textBox, do nothing but still consume event.
        } else {
          insertOrDelete.call(this, evt, nearby);
        }

        preventPropagation(evt);
        return true;
      }

      return false;
    }
  }, {
    key: "handleSelectedCallback",
    value: function handleSelectedCallback(evt, toolData, handle) {
      var interactionType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'mouse';
      var element = evt.detail.element;
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(element, this.name);

      if (handle.hasBoundingBox) {
        // Use default move handler.
        Object(_util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_14__["moveHandleNearImagePoint"])(evt, this, toolData, handle, interactionType);
        return;
      }

      var config = this.configuration;
      config.dragOrigin = {
        x: handle.x,
        y: handle.y
      }; // Iterating over handles of all toolData instances to find the indices of the selected handle

      for (var toolIndex = 0; toolIndex < toolState.data.length; toolIndex++) {
        var points = toolState.data[toolIndex].handles.points;

        for (var p = 0; p < points.length; p++) {
          if (points[p] === handle) {
            config.currentHandle = p;
            config.currentTool = toolIndex;
          }
        }
      }

      this._modifying = true;

      this._activateModify(element); // Interupt eventDispatchers


      preventPropagation(evt);
    }
    /**
     * Event handler for MOUSE_MOVE during drawing event loop.
     *
     * @event
     * @param {Object} evt - The event.
     * @returns {undefined}
     */

  }, {
    key: "_drawingMouseMoveCallback",
    value: function _drawingMouseMoveCallback(evt) {
      var eventData = evt.detail;
      var currentPoints = eventData.currentPoints,
          element = eventData.element;
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(element, this.name);
      var config = this.configuration;
      var currentTool = config.currentTool;
      var data = toolState.data[currentTool];
      var coords = currentPoints.canvas; // Set the mouseLocation handle

      this._getMouseLocation(eventData);

      this._checkInvalidHandleLocation(data, eventData); // Mouse move -> Polygon Mode


      var handleNearby = this._pointNearHandle(element, data, coords);

      var points = data.handles.points; // If there is a handle nearby to snap to
      // (and it's not the actual mouse handle)

      if (handleNearby !== undefined && !handleNearby.hasBoundingBox && handleNearby < points.length - 1) {
        config.mouseLocation.handles.start.x = points[handleNearby].x;
        config.mouseLocation.handles.start.y = points[handleNearby].y;
      } // Force onImageRendered


      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element);
    }
    /**
     * Event handler for MOUSE_DRAG during drawing event loop.
     *
     * @event
     * @param {Object} evt - The event.
     * @returns {undefined}
     */

  }, {
    key: "_drawingMouseDragCallback",
    value: function _drawingMouseDragCallback(evt) {
      if (!this.options.mouseButtonMask.includes(evt.detail.buttons)) {
        return;
      }

      this._drawingDrag(evt);
    }
    /**
     * Event handler for TOUCH_DRAG during drawing event loop.
     *
     * @event
     * @param {Object} evt - The event.
     * @returns {undefined}
     */

  }, {
    key: "_drawingTouchDragCallback",
    value: function _drawingTouchDragCallback(evt) {
      this._drawingDrag(evt);
    }
  }, {
    key: "_drawingDrag",
    value: function _drawingDrag(evt) {
      var eventData = evt.detail;
      var element = eventData.element;
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(element, this.name);
      var config = this.configuration;
      var currentTool = config.currentTool;
      var data = toolState.data[currentTool]; // Set the mouseLocation handle

      this._getMouseLocation(eventData);

      this._checkInvalidHandleLocation(data, eventData);

      this._addPointPencilMode(eventData, data.handles.points);

      this._dragging = true; // Force onImageRendered

      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element);
    }
    /**
     * Event handler for MOUSE_UP during drawing event loop.
     *
     * @event
     * @param {Object} evt - The event.
     * @returns {undefined}
     */

  }, {
    key: "_drawingMouseUpCallback",
    value: function _drawingMouseUpCallback(evt) {
      var element = evt.detail.element;

      if (!this._dragging) {
        return;
      }

      this._dragging = false;
      var config = this.configuration;
      var currentTool = config.currentTool;
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(element, this.name);
      var data = toolState.data[currentTool];

      if (!freehandIntersect.end(data.handles.points) && data.canComplete) {
        var lastHandlePlaced = config.currentHandle;

        this._endDrawing(element, lastHandlePlaced);
      }

      preventPropagation(evt);
      return;
    }
    /**
     * Event handler for MOUSE_DOWN during drawing event loop.
     *
     * @event
     * @param {Object} evt - The event.
     * @returns {undefined}
     */

  }, {
    key: "_drawingMouseDownCallback",
    value: function _drawingMouseDownCallback(evt) {
      var eventData = evt.detail;
      var buttons = eventData.buttons,
          currentPoints = eventData.currentPoints,
          element = eventData.element;

      if (!this.options.mouseButtonMask.includes(buttons)) {
        return;
      }

      var coords = currentPoints.canvas;
      var config = this.configuration;
      var currentTool = config.currentTool;
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(element, this.name);
      var data = toolState.data[currentTool];

      var handleNearby = this._pointNearHandle(element, data, coords);

      if (!freehandIntersect.end(data.handles.points) && data.canComplete) {
        var lastHandlePlaced = config.currentHandle;

        this._endDrawing(element, lastHandlePlaced);
      } else if (handleNearby === undefined) {
        this._addPoint(eventData);
      }

      preventPropagation(evt);
      return;
    }
    /**
     * Event handler for TOUCH_START during drawing event loop.
     *
     * @event
     * @param {Object} evt - The event.
     * @returns {undefined}
     */

  }, {
    key: "_drawingTouchStartCallback",
    value: function _drawingTouchStartCallback(evt) {
      var eventData = evt.detail;
      var currentPoints = eventData.currentPoints,
          element = eventData.element;
      var coords = currentPoints.canvas;
      var config = this.configuration;
      var currentTool = config.currentTool;
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(element, this.name);
      var data = toolState.data[currentTool];

      var handleNearby = this._pointNearHandle(element, data, coords);

      if (!freehandIntersect.end(data.handles.points) && data.canComplete) {
        var lastHandlePlaced = config.currentHandle;

        this._endDrawing(element, lastHandlePlaced);
      } else if (handleNearby === undefined) {
        this._addPoint(eventData);
      }

      preventPropagation(evt);
      return;
    }
    /** Ends the active drawing loop and completes the polygon.
     *
     * @public
     * @param {Object} element - The element on which the roi is being drawn.
     * @returns {null}
     */

  }, {
    key: "completeDrawing",
    value: function completeDrawing(element) {
      if (!this._drawing) {
        return;
      }

      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(element, this.name);
      var config = this.configuration;
      var data = toolState.data[config.currentTool];

      if (!freehandIntersect.end(data.handles.points) && data.handles.points.length >= 2) {
        var lastHandlePlaced = config.currentHandle;
        data.polyBoundingBox = {};

        this._endDrawing(element, lastHandlePlaced);
      }
    }
    /**
     * Event handler for MOUSE_DOUBLE_CLICK during drawing event loop.
     *
     * @event
     * @param {Object} evt - The event.
     * @returns {undefined}
     */

  }, {
    key: "_drawingMouseDoubleClickCallback",
    value: function _drawingMouseDoubleClickCallback(evt) {
      var element = evt.detail.element;
      this.completeDrawing(element);
      preventPropagation(evt);
    }
    /**
     * Event handler for DOUBLE_TAP during drawing event loop.
     *
     * @event
     * @param {Object} evt - The event.
     * @returns {undefined}
     */

  }, {
    key: "_drawingDoubleTapClickCallback",
    value: function _drawingDoubleTapClickCallback(evt) {
      var element = evt.detail.element;
      this.completeDrawing(element);
      preventPropagation(evt);
    }
    /**
     * Event handler for MOUSE_DRAG during handle drag event loop.
     *
     * @event
     * @param {Object} evt - The event.
     * @returns {undefined}
     */

  }, {
    key: "_editMouseDragCallback",
    value: function _editMouseDragCallback(evt) {
      var eventData = evt.detail;
      var element = eventData.element,
          buttons = eventData.buttons;

      if (!this.options.mouseButtonMask.includes(buttons)) {
        return;
      }

      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(element, this.name);
      var config = this.configuration;
      var data = toolState.data[config.currentTool];
      var currentHandle = config.currentHandle;
      var points = data.handles.points;
      var handleIndex = -1; // Set the mouseLocation handle

      this._getMouseLocation(eventData);

      data.handles.invalidHandlePlacement = freehandIntersect.modify(points, currentHandle);
      data.active = true;
      data.highlight = true;
      points[currentHandle].x = config.mouseLocation.handles.start.x;
      points[currentHandle].y = config.mouseLocation.handles.start.y;
      handleIndex = this._getPrevHandleIndex(currentHandle, points);

      if (currentHandle >= 0) {
        var lastLineIndex = points[handleIndex].lines.length - 1;
        var lastLine = points[handleIndex].lines[lastLineIndex];
        lastLine.x = config.mouseLocation.handles.start.x;
        lastLine.y = config.mouseLocation.handles.start.y;
      } // Update the image


      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element);
    }
    /**
     * Event handler for TOUCH_DRAG during handle drag event loop.
     *
     * @event
     * @param {Object} evt - The event.
     * @returns {void}
     */

  }, {
    key: "_editTouchDragCallback",
    value: function _editTouchDragCallback(evt) {
      var eventData = evt.detail;
      var element = eventData.element;
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(element, this.name);
      var config = this.configuration;
      var data = toolState.data[config.currentTool];
      var currentHandle = config.currentHandle;
      var points = data.handles.points;
      var handleIndex = -1; // Set the mouseLocation handle

      this._getMouseLocation(eventData);

      data.handles.invalidHandlePlacement = freehandIntersect.modify(points, currentHandle);
      data.active = true;
      data.highlight = true;
      points[currentHandle].x = config.mouseLocation.handles.start.x;
      points[currentHandle].y = config.mouseLocation.handles.start.y;
      handleIndex = this._getPrevHandleIndex(currentHandle, points);

      if (currentHandle >= 0) {
        var lastLineIndex = points[handleIndex].lines.length - 1;
        var lastLine = points[handleIndex].lines[lastLineIndex];
        lastLine.x = config.mouseLocation.handles.start.x;
        lastLine.y = config.mouseLocation.handles.start.y;
      } // Update the image


      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element);
    }
    /**
     * Returns the previous handle to the current one.
     * @param {Number} currentHandle - the current handle index
     * @param {Array} points - the handles Array of the freehand data
     * @returns {Number} - The index of the previos handle
     */

  }, {
    key: "_getPrevHandleIndex",
    value: function _getPrevHandleIndex(currentHandle, points) {
      if (currentHandle === 0) {
        return points.length - 1;
      }

      return currentHandle - 1;
    }
    /**
     * Event handler for MOUSE_UP during handle drag event loop.
     *
     * @private
     * @param {Object} evt - The event.
     * @returns {undefined}
     */

  }, {
    key: "_editMouseUpCallback",
    value: function _editMouseUpCallback(evt) {
      var eventData = evt.detail;
      var element = eventData.element;
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(element, this.name);

      this._deactivateModify(element);

      this._dropHandle(eventData, toolState);

      this._endDrawing(element);

      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element);
    }
    /**
     * Places a handle of the freehand tool if the new location is valid.
     * If the new location is invalid the handle snaps back to its previous position.
     *
     * @private
     * @param {Object} eventData - Data object associated with the event.
     * @param {Object} toolState - The data associated with the freehand tool.
     * @modifies {toolState}
     * @returns {undefined}
     */

  }, {
    key: "_dropHandle",
    value: function _dropHandle(eventData, toolState) {
      var config = this.configuration;
      var currentTool = config.currentTool;
      var handles = toolState.data[currentTool].handles;
      var points = handles.points; // Don't allow the line being modified to intersect other lines

      if (handles.invalidHandlePlacement) {
        var currentHandle = config.currentHandle;
        var currentHandleData = points[currentHandle];
        var previousHandleData;

        if (currentHandle === 0) {
          var lastHandleID = points.length - 1;
          previousHandleData = points[lastHandleID];
        } else {
          previousHandleData = points[currentHandle - 1];
        } // Snap back to previous position


        currentHandleData.x = config.dragOrigin.x;
        currentHandleData.y = config.dragOrigin.y;
        previousHandleData.lines[0] = currentHandleData;
        handles.invalidHandlePlacement = false;
      }
    }
    /**
     * Begining of drawing loop when tool is active and a click event happens far
     * from existing handles.
     *
     * @private
     * @param {Object} evt - The event.
     * @returns {undefined}
     */

  }, {
    key: "_startDrawing",
    value: function _startDrawing(evt) {
      var eventData = evt.detail;
      var measurementData = this.createNewMeasurement(eventData);
      var element = eventData.element;
      var config = this.configuration;
      var interactionType;

      if (evt.type === _events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_DOWN_ACTIVATE) {
        interactionType = 'Mouse';
      } else if (evt.type === _events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_START_ACTIVE) {
        interactionType = 'Touch';
      }

      this._activateDraw(element, interactionType);

      this._getMouseLocation(eventData);

      Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["addToolState"])(element, this.name, measurementData);
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(element, this.name);
      config.currentTool = toolState.data.length - 1;
      this._activeDrawingToolReference = toolState.data[config.currentTool];
    }
    /**
     * Adds a point on mouse click in polygon mode.
     *
     * @private
     * @param {Object} eventData - data object associated with an event.
     * @returns {undefined}
     */

  }, {
    key: "_addPoint",
    value: function _addPoint(eventData) {
      var currentPoints = eventData.currentPoints,
          element = eventData.element;
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(element, this.name); // Get the toolState from the last-drawn polygon

      var config = this.configuration;
      var data = toolState.data[config.currentTool];

      if (data.handles.invalidHandlePlacement) {
        return;
      }

      var newHandleData = new FreehandHandleData(currentPoints.image); // If this is not the first handle

      if (data.handles.points.length) {
        // Add the line from the current handle to the new handle
        data.handles.points[config.currentHandle - 1].lines.push(currentPoints.image);
      } // Add the new handle


      data.handles.points.push(newHandleData); // Increment the current handle value

      config.currentHandle += 1; // Force onImageRendered to fire

      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element);
      this.fireModifiedEvent(element, data);
    }
    /**
     * If in pencilMode, check the mouse position is farther than the minimum
     * distance between points, then add a point.
     *
     * @private
     * @param {Object} eventData - Data object associated with an event.
     * @param {Object} points - Data object associated with the tool.
     * @returns {undefined}
     */

  }, {
    key: "_addPointPencilMode",
    value: function _addPointPencilMode(eventData, points) {
      var _this3 = this;

      var config = this.configuration;
      var element = eventData.element;
      var mousePoint = config.mouseLocation.handles.start;

      var handleFurtherThanMinimumSpacing = function handleFurtherThanMinimumSpacing(handle) {
        return _this3._isDistanceLargerThanSpacing(element, handle, mousePoint);
      };

      if (points.every(handleFurtherThanMinimumSpacing)) {
        this._addPoint(eventData);
      }
    }
    /**
     * Ends the active drawing loop and completes the polygon.
     *
     * @private
     * @param {Object} element - The element on which the roi is being drawn.
     * @param {Object} handleNearby - the handle nearest to the mouse cursor.
     * @returns {undefined}
     */

  }, {
    key: "_endDrawing",
    value: function _endDrawing(element, handleNearby) {
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(element, this.name);
      var config = this.configuration;
      var data = toolState.data[config.currentTool];
      data.active = false;
      data.highlight = false;
      data.handles.invalidHandlePlacement = false; // Connect the end handle to the origin handle

      if (handleNearby !== undefined) {
        var points = data.handles.points;
        points[config.currentHandle - 1].lines.push(points[0]);
      }

      if (this._modifying) {
        this._modifying = false;
        data.invalidated = true;
      } // Reset the current handle


      config.currentHandle = 0;
      config.currentTool = -1;
      data.canComplete = false;

      if (this._drawing) {
        this._deactivateDraw(element);
      }

      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element);
      this.fireModifiedEvent(element, data);
      this.fireCompletedEvent(element, data);
    }
    /**
     * Returns a handle of a particular tool if it is close to the mouse cursor
     *
     * @private
     * @param {Object} element - The element on which the roi is being drawn.
     * @param {Object} data      Data object associated with the tool.
     * @param {*} coords
     * @returns {Number|Object|Boolean}
     */

  }, {
    key: "_pointNearHandle",
    value: function _pointNearHandle(element, data, coords) {
      if (data.handles === undefined || data.handles.points === undefined) {
        return;
      }

      if (data.visible === false) {
        return;
      }

      for (var i = 0; i < data.handles.points.length; i++) {
        var handleCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.pixelToCanvas(element, data.handles.points[i]);

        if (_externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstoneMath.point.distance(handleCanvas, coords) < 6) {
          return i;
        }
      } // Check to see if mouse in bounding box of textbox


      if (data.handles.textBox) {
        if (Object(_util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_15__["default"])(data.handles.textBox, coords)) {
          return data.handles.textBox;
        }
      }
    }
    /**
     * Returns a handle if it is close to the mouse cursor (all tools)
     *
     * @private
     * @param {Object} eventData - data object associated with an event.
     * @returns {Object}
     */

  }, {
    key: "_pointNearHandleAllTools",
    value: function _pointNearHandleAllTools(eventData) {
      var currentPoints = eventData.currentPoints,
          element = eventData.element;
      var coords = currentPoints.canvas;
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(element, this.name);

      if (!toolState) {
        return;
      }

      var handleNearby;

      for (var toolIndex = 0; toolIndex < toolState.data.length; toolIndex++) {
        handleNearby = this._pointNearHandle(element, toolState.data[toolIndex], coords);

        if (handleNearby !== undefined) {
          return {
            handleNearby: handleNearby,
            toolIndex: toolIndex
          };
        }
      }
    }
    /**
     * Gets the current mouse location and stores it in the configuration object.
     *
     * @private
     * @param {Object} eventData The data assoicated with the event.
     * @returns {undefined}
     */

  }, {
    key: "_getMouseLocation",
    value: function _getMouseLocation(eventData) {
      var currentPoints = eventData.currentPoints,
          image = eventData.image; // Set the mouseLocation handle

      var config = this.configuration;
      config.mouseLocation.handles.start.x = currentPoints.image.x;
      config.mouseLocation.handles.start.y = currentPoints.image.y;
      Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_22__["clipToBox"])(config.mouseLocation.handles.start, image);
    }
    /**
     * Returns true if the proposed location of a new handle is invalid.
     *
     * @private
     * @param {Object} data      Data object associated with the tool.
     * @param {Object} eventData The data assoicated with the event.
     * @returns {Boolean}
     */

  }, {
    key: "_checkInvalidHandleLocation",
    value: function _checkInvalidHandleLocation(data, eventData) {
      if (data.handles.points.length < 2) {
        return true;
      }

      var invalidHandlePlacement;

      if (this._dragging) {
        invalidHandlePlacement = this._checkHandlesPencilMode(data, eventData);
      } else {
        invalidHandlePlacement = this._checkHandlesPolygonMode(data, eventData);
      }

      data.handles.invalidHandlePlacement = invalidHandlePlacement;
    }
    /**
     * Returns true if the proposed location of a new handle is invalid (in polygon mode).
     *
     * @private
     *
     * @param {Object} data - data object associated with the tool.
     * @param {Object} eventData The data assoicated with the event.
     * @returns {Boolean}
     */

  }, {
    key: "_checkHandlesPolygonMode",
    value: function _checkHandlesPolygonMode(data, eventData) {
      var config = this.configuration;
      var element = eventData.element;
      var mousePoint = config.mouseLocation.handles.start;
      var points = data.handles.points;
      var invalidHandlePlacement = false;
      data.canComplete = false;

      var mouseAtOriginHandle = this._isDistanceSmallerThanCompleteSpacingCanvas(element, points[0], mousePoint);

      if (mouseAtOriginHandle && !freehandIntersect.end(points) && points.length > 2) {
        data.canComplete = true;
        invalidHandlePlacement = false;
      } else {
        invalidHandlePlacement = freehandIntersect.newHandle(mousePoint, points);
      }

      return invalidHandlePlacement;
    }
    /**
     * Returns true if the proposed location of a new handle is invalid (in pencilMode).
     *
     * @private
     * @param {Object} data - data object associated with the tool.
     * @param {Object} eventData The data associated with the event.
     * @returns {Boolean}
     */

  }, {
    key: "_checkHandlesPencilMode",
    value: function _checkHandlesPencilMode(data, eventData) {
      var config = this.configuration;
      var mousePoint = config.mouseLocation.handles.start;
      var points = data.handles.points;
      var invalidHandlePlacement = freehandIntersect.newHandle(mousePoint, points);

      if (invalidHandlePlacement === false) {
        invalidHandlePlacement = this._invalidHandlePencilMode(data, eventData);
      }

      return invalidHandlePlacement;
    }
    /**
     * Returns true if the mouse position is far enough from previous points (in pencilMode).
     *
     * @private
     * @param {Object} data - data object associated with the tool.
     * @param {Object} eventData The data associated with the event.
     * @returns {Boolean}
     */

  }, {
    key: "_invalidHandlePencilMode",
    value: function _invalidHandlePencilMode(data, eventData) {
      var config = this.configuration;
      var element = eventData.element;
      var mousePoint = config.mouseLocation.handles.start;
      var points = data.handles.points;

      var mouseAtOriginHandle = this._isDistanceSmallerThanCompleteSpacingCanvas(element, points[0], mousePoint);

      if (mouseAtOriginHandle) {
        data.canComplete = true;
        return false;
      }

      data.canComplete = false; // Compare with all other handles appart from the last one

      for (var i = 1; i < points.length - 1; i++) {
        if (this._isDistanceSmallerThanSpacing(element, points[i], mousePoint)) {
          return true;
        }
      }

      return false;
    }
    /**
     * Returns true if two points are closer than this.configuration.spacing.
     *
     * @private
     * @param  {Object} element     The element on which the roi is being drawn.
     * @param  {Object} p1          The first point, in pixel space.
     * @param  {Object} p2          The second point, in pixel space.
     * @returns {boolean}            True if the distance is smaller than the
     *                              allowed canvas spacing.
     */

  }, {
    key: "_isDistanceSmallerThanCompleteSpacingCanvas",
    value: function _isDistanceSmallerThanCompleteSpacingCanvas(element, p1, p2) {
      var p1Canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.pixelToCanvas(element, p1);
      var p2Canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.pixelToCanvas(element, p2);
      var completeHandleRadius;

      if (this._drawingInteractionType === 'Mouse') {
        completeHandleRadius = this.configuration.completeHandleRadius;
      } else if (this._drawingInteractionType === 'Touch') {
        completeHandleRadius = this.configuration.completeHandleRadiusTouch;
      }

      return this._compareDistanceToSpacing(element, p1Canvas, p2Canvas, '<', completeHandleRadius);
    }
    /**
     * Returns true if two points are closer than this.configuration.spacing.
     *
     * @private
     * @param  {Object} element     The element on which the roi is being drawn.
     * @param  {Object} p1          The first point, in pixel space.
     * @param  {Object} p2          The second point, in pixel space.
     * @returns {boolean}            True if the distance is smaller than the
     *                              allowed canvas spacing.
     */

  }, {
    key: "_isDistanceSmallerThanSpacing",
    value: function _isDistanceSmallerThanSpacing(element, p1, p2) {
      return this._compareDistanceToSpacing(element, p1, p2, '<');
    }
    /**
     * Returns true if two points are farther than this.configuration.spacing.
     *
     * @private
     * @param  {Object} element     The element on which the roi is being drawn.
     * @param  {Object} p1          The first point, in pixel space.
     * @param  {Object} p2          The second point, in pixel space.
     * @returns {boolean}            True if the distance is smaller than the
     *                              allowed canvas spacing.
     */

  }, {
    key: "_isDistanceLargerThanSpacing",
    value: function _isDistanceLargerThanSpacing(element, p1, p2) {
      return this._compareDistanceToSpacing(element, p1, p2, '>');
    }
    /**
     * Compares the distance between two points to this.configuration.spacing.
     *
     * @private
     * @param  {Object} element     The element on which the roi is being drawn.
     * @param  {Object} p1          The first point, in pixel space.
     * @param  {Object} p2          The second point, in pixel space.
     * @param  {string} comparison  The comparison to make.
     * @param  {number} spacing     The allowed canvas spacing
     * @returns {boolean}           True if the distance is smaller than the
     *                              allowed canvas spacing.
     */

  }, {
    key: "_compareDistanceToSpacing",
    value: function _compareDistanceToSpacing(element, p1, p2) {
      var comparison = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '>';
      var spacing = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.configuration.spacing;

      if (comparison === '>') {
        return _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstoneMath.point.distance(p1, p2) > spacing;
      }

      return _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstoneMath.point.distance(p1, p2) < spacing;
    }
    /**
     * Adds drawing loop event listeners.
     *
     * @private
     * @param {Object} element - The viewport element to add event listeners to.
     * @param {string} interactionType - The interactionType used for the loop.
     * @modifies {element}
     * @returns {undefined}
     */

  }, {
    key: "_activateDraw",
    value: function _activateDraw(element) {
      var interactionType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Mouse';
      this._drawing = true;
      this._drawingInteractionType = interactionType;
      _store_index_js__WEBPACK_IMPORTED_MODULE_12__["state"].isMultiPartToolActive = true;
      Object(_store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_23__["hideToolCursor"])(this.element); // Polygonal Mode

      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_DOWN, this._drawingMouseDownCallback);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_MOVE, this._drawingMouseMoveCallback);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_DOUBLE_CLICK, this._drawingMouseDoubleClickCallback); // Drag/Pencil Mode

      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_DRAG, this._drawingMouseDragCallback);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_UP, this._drawingMouseUpCallback); // Touch

      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_START, this._drawingMouseMoveCallback);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_START, this._drawingTouchStartCallback);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_DRAG, this._drawingTouchDragCallback);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_END, this._drawingMouseUpCallback);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].DOUBLE_TAP, this._drawingDoubleTapClickCallback);
      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element);
    }
    /**
     * Removes drawing loop event listeners.
     *
     * @private
     * @param {Object} element - The viewport element to add event listeners to.
     * @modifies {element}
     * @returns {undefined}
     */

  }, {
    key: "_deactivateDraw",
    value: function _deactivateDraw(element) {
      this._drawing = false;
      _store_index_js__WEBPACK_IMPORTED_MODULE_12__["state"].isMultiPartToolActive = false;
      this._activeDrawingToolReference = null;
      this._drawingInteractionType = null;
      Object(_store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_23__["setToolCursor"])(this.element, this.svgCursor);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_DOWN, this._drawingMouseDownCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_MOVE, this._drawingMouseMoveCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_DOUBLE_CLICK, this._drawingMouseDoubleClickCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_DRAG, this._drawingMouseDragCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_UP, this._drawingMouseUpCallback); // Touch

      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_START, this._drawingTouchStartCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_DRAG, this._drawingTouchDragCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_START, this._drawingMouseMoveCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_END, this._drawingMouseUpCallback);
      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element);
    }
    /**
     * Adds modify loop event listeners.
     *
     * @private
     * @param {Object} element - The viewport element to add event listeners to.
     * @modifies {element}
     * @returns {undefined}
     */

  }, {
    key: "_activateModify",
    value: function _activateModify(element) {
      _store_index_js__WEBPACK_IMPORTED_MODULE_12__["state"].isToolLocked = true;
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_UP, this._editMouseUpCallback);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_DRAG, this._editMouseDragCallback);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_CLICK, this._editMouseUpCallback);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_END, this._editMouseUpCallback);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_DRAG, this._editTouchDragCallback);
      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element);
    }
    /**
     * Removes modify loop event listeners.
     *
     * @private
     * @param {Object} element - The viewport element to add event listeners to.
     * @modifies {element}
     * @returns {undefined}
     */

  }, {
    key: "_deactivateModify",
    value: function _deactivateModify(element) {
      _store_index_js__WEBPACK_IMPORTED_MODULE_12__["state"].isToolLocked = false;
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_UP, this._editMouseUpCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_DRAG, this._editMouseDragCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_CLICK, this._editMouseUpCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_END, this._editMouseUpCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_DRAG, this._editTouchDragCallback);
      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element);
    }
  }, {
    key: "passiveCallback",
    value: function passiveCallback(element) {
      this._closeToolIfDrawing(element);
    }
  }, {
    key: "enabledCallback",
    value: function enabledCallback(element) {
      this._closeToolIfDrawing(element);
    }
  }, {
    key: "disabledCallback",
    value: function disabledCallback(element) {
      this._closeToolIfDrawing(element);
    }
  }, {
    key: "_closeToolIfDrawing",
    value: function _closeToolIfDrawing(element) {
      if (this._drawing) {
        // Actively drawing but changed mode.
        var config = this.configuration;
        var lastHandlePlaced = config.currentHandle;

        this._endDrawing(element, lastHandlePlaced);

        _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element);
      }
    }
    /**
     * Fire MEASUREMENT_MODIFIED event on provided element
     * @param {any} element which freehand data has been modified
     * @param {any} measurementData the measurment data
     * @returns {void}
     */

  }, {
    key: "fireModifiedEvent",
    value: function fireModifiedEvent(element, measurementData) {
      var eventType = _events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MEASUREMENT_MODIFIED;
      var eventData = {
        toolName: this.name,
        toolType: this.name,
        // Deprecation notice: toolType will be replaced by toolName
        element: element,
        measurementData: measurementData
      };
      Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_13__["default"])(element, eventType, eventData);
    }
  }, {
    key: "fireCompletedEvent",
    value: function fireCompletedEvent(element, measurementData) {
      var eventType = _events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MEASUREMENT_COMPLETED;
      var eventData = {
        toolName: this.name,
        toolType: this.name,
        // Deprecation notice: toolType will be replaced by toolName
        element: element,
        measurementData: measurementData
      };
      Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_13__["default"])(element, eventType, eventData);
    } // ===================================================================
    // Public Configuration API. .
    // ===================================================================

  }, {
    key: "cancelDrawing",

    /**
     * Ends the active drawing loop and removes the polygon.
     *
     * @public
     * @param {Object} element - The element on which the roi is being drawn.
     * @returns {null}
     */
    value: function cancelDrawing(element) {
      if (!this._drawing) {
        return;
      }

      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(element, this.name);
      var config = this.configuration;
      var data = toolState.data[config.currentTool];
      data.active = false;
      data.highlight = false;
      data.handles.invalidHandlePlacement = false; // Reset the current handle

      config.currentHandle = 0;
      config.currentTool = -1;
      data.canComplete = false;
      Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["removeToolState"])(element, this.name, data);

      this._deactivateDraw(element);

      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element);
    }
    /**
     * New image event handler.
     *
     * @public
     * @param  {Object} evt The event.
     * @returns {null}
     */

  }, {
    key: "newImageCallback",
    value: function newImageCallback(evt) {
      var config = this.configuration;

      if (!(this._drawing && this._activeDrawingToolReference)) {
        return;
      } // Actively drawing but scrolled to different image.


      var element = evt.detail.element;
      var data = this._activeDrawingToolReference;
      data.active = false;
      data.highlight = false;
      data.handles.invalidHandlePlacement = false; // Connect the end handle to the origin handle

      var points = data.handles.points;
      points[config.currentHandle - 1].lines.push(points[0]); // Reset the current handle

      config.currentHandle = 0;
      config.currentTool = -1;
      data.canComplete = false;

      this._deactivateDraw(element);

      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element);
    }
  }, {
    key: "spacing",
    get: function get() {
      return this.configuration.spacing;
    },
    set: function set(value) {
      if (typeof value !== 'number') {
        throw new Error('Attempting to set freehand spacing to a value other than a number.');
      }

      this.configuration.spacing = value;
      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(this.element);
    }
  }, {
    key: "activeHandleRadius",
    get: function get() {
      return this.configuration.activeHandleRadius;
    },
    set: function set(value) {
      if (typeof value !== 'number') {
        throw new Error('Attempting to set freehand activeHandleRadius to a value other than a number.');
      }

      this.configuration.activeHandleRadius = value;
      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(this.element);
    }
  }, {
    key: "completeHandleRadius",
    get: function get() {
      return this.configuration.completeHandleRadius;
    },
    set: function set(value) {
      if (typeof value !== 'number') {
        throw new Error('Attempting to set freehand completeHandleRadius to a value other than a number.');
      }

      this.configuration.completeHandleRadius = value;
      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(this.element);
    }
  }, {
    key: "alwaysShowHandles",
    get: function get() {
      return this.configuration.alwaysShowHandles;
    },
    set: function set(value) {
      if (typeof value !== 'boolean') {
        throw new Error('Attempting to set freehand alwaysShowHandles to a value other than a boolean.');
      }

      this.configuration.alwaysShowHandles = value;
      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(this.element);
    }
  }, {
    key: "invalidColor",
    get: function get() {
      return this.configuration.invalidColor;
    },
    set: function set(value) {
      /*
        It'd be easy to check if the color was e.g. a valid rgba color. However
        it'd be difficult to check if the color was a named CSS color without
        bloating the library, so we don't. If the canvas can't intepret the color
        it'll show up grey.
      */
      this.configuration.invalidColor = value;
      _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(this.element);
    }
  }]);

  return FreehandRoiTool;
}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_8__["default"]);



function defaultFreehandConfiguration() {
  return {
    mouseLocation: {
      handles: {
        start: {
          highlight: true,
          active: true
        }
      }
    },
    spacing: 1,
    activeHandleRadius: 3,
    completeHandleRadius: 6,
    completeHandleRadiusTouch: 28,
    alwaysShowHandles: false,
    invalidColor: 'crimson',
    currentHandle: 0,
    currentTool: -1,
    drawHandles: true,
    renderDashed: false
  };
}

function preventPropagation(evt) {
  evt.stopImmediatePropagation();
  evt.stopPropagation();
  evt.preventDefault();
}

/***/ }),

/***/ "./tools/annotation/LengthTool.js":
/*!****************************************!*\
  !*** ./tools/annotation/LengthTool.js ***!
  \****************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1100739__) {

"use strict";
__nested_webpack_require_1100739__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1100739__.d(__nested_webpack_exports__, "default", function() { return LengthTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1100739__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1100739__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1100739__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_1100739__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1100739__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_1100739__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1100739__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_1100739__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1100739__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_1100739__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1100739__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1100739__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1100739__(/*! ./../../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js");
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1100739__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1100739__(/*! ./../../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1100739__(/*! ./../../drawing/drawLinkedTextBox.js */ "./drawing/drawLinkedTextBox.js");
/* harmony import */ var _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1100739__(/*! ./../../drawing/drawHandles.js */ "./drawing/drawHandles.js");
/* harmony import */ var _util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_1100739__(/*! ./../../util/lineSegDistance.js */ "./util/lineSegDistance.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_1100739__(/*! ../cursors/index.js */ "./tools/cursors/index.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_1100739__(/*! ../../util/logger.js */ "./util/logger.js");
/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_1100739__(/*! ../../util/getPixelSpacing */ "./util/getPixelSpacing.js");
/* harmony import */ var _util_throttle__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_1100739__(/*! ../../util/throttle */ "./util/throttle.js");
/* harmony import */ var _store_index__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_1100739__(/*! ../../store/index */ "./store/index.js");





 // State



 // Drawing










var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_14__["getLogger"])('tools:annotation:LengthTool');
/**
 * @public
 * @class LengthTool
 * @memberof Tools.Annotation
 * @classdesc Tool for measuring distances.
 * @extends Tools.Base.BaseAnnotationTool
 */

var LengthTool =
/*#__PURE__*/
function (_BaseAnnotationTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(LengthTool, _BaseAnnotationTool);

  function LengthTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, LengthTool);

    var defaultProps = {
      name: 'Length',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_13__["lengthCursor"],
      configuration: {
        drawHandles: true,
        drawHandlesOnHover: false,
        hideHandlesIfMoving: false,
        renderDashed: false,
        digits: 2
      }
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(LengthTool).call(this, props, defaultProps));
    _this.throttledUpdateCachedStats = Object(_util_throttle__WEBPACK_IMPORTED_MODULE_16__["default"])(_this.updateCachedStats, 110);
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(LengthTool, [{
    key: "createNewMeasurement",
    value: function createNewMeasurement(eventData) {
      var goodEventData = eventData && eventData.currentPoints && eventData.currentPoints.image;

      if (!goodEventData) {
        logger.error("required eventData not supplied to tool ".concat(this.name, "'s createNewMeasurement"));
        return;
      }

      var _eventData$currentPoi = eventData.currentPoints.image,
          x = _eventData$currentPoi.x,
          y = _eventData$currentPoi.y;
      return {
        visible: true,
        active: true,
        color: undefined,
        invalidated: true,
        handles: {
          start: {
            x: x,
            y: y,
            highlight: true,
            active: false
          },
          end: {
            x: x,
            y: y,
            highlight: true,
            active: true
          },
          textBox: {
            active: false,
            hasMoved: false,
            movesIndependently: false,
            drawnIndependently: true,
            allowedOutsideImage: true,
            hasBoundingBox: true
          }
        }
      };
    }
    /**
     *
     *
     * @param {*} element
     * @param {*} data
     * @param {*} coords
     * @returns {Boolean}
     */

  }, {
    key: "pointNearTool",
    value: function pointNearTool(element, data, coords) {
      var hasStartAndEndHandles = data && data.handles && data.handles.start && data.handles.end;
      var validParameters = hasStartAndEndHandles;

      if (!validParameters) {
        logger.warn("invalid parameters supplied to tool ".concat(this.name, "'s pointNearTool"));
        return false;
      }

      if (data.visible === false) {
        return false;
      }

      return Object(_util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_12__["default"])(element, data.handles.start, data.handles.end, coords) < 25;
    }
  }, {
    key: "updateCachedStats",
    value: function updateCachedStats(image, element, data) {
      var _getPixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_15__["default"])(image),
          rowPixelSpacing = _getPixelSpacing.rowPixelSpacing,
          colPixelSpacing = _getPixelSpacing.colPixelSpacing; // Set rowPixelSpacing and columnPixelSpacing to 1 if they are undefined (or zero)


      var dx = (data.handles.end.x - data.handles.start.x) * (colPixelSpacing || 1);
      var dy = (data.handles.end.y - data.handles.start.y) * (rowPixelSpacing || 1); // Calculate the length, and create the text variable with the millimeters or pixels suffix

      var length = Math.sqrt(dx * dx + dy * dy); // Store the length inside the tool for outside access

      data.length = length;
      data.invalidated = false;
    }
  }, {
    key: "renderToolData",
    value: function renderToolData(evt) {
      var _this2 = this;

      var eventData = evt.detail;
      var _this$configuration = this.configuration,
          handleRadius = _this$configuration.handleRadius,
          drawHandlesOnHover = _this$configuration.drawHandlesOnHover,
          hideHandlesIfMoving = _this$configuration.hideHandlesIfMoving,
          renderDashed = _this$configuration.renderDashed,
          digits = _this$configuration.digits;
      var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_6__["getToolState"])(evt.currentTarget, this.name);

      if (!toolData) {
        return;
      } // We have tool data for this element - iterate over each one and draw it


      var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_9__["getNewContext"])(eventData.canvasContext.canvas);
      var image = eventData.image,
          element = eventData.element;

      var _getPixelSpacing2 = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_15__["default"])(image),
          rowPixelSpacing = _getPixelSpacing2.rowPixelSpacing,
          colPixelSpacing = _getPixelSpacing2.colPixelSpacing;

      var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_7__["default"].getToolWidth();
      var lineDash = Object(_store_index__WEBPACK_IMPORTED_MODULE_17__["getModule"])('globalConfiguration').configuration.lineDash;

      var _loop = function _loop(i) {
        var data = toolData.data[i];

        if (data.visible === false) {
          return "continue";
        }

        Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_9__["draw"])(context, function (context) {
          // Configurable shadow
          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_9__["setShadow"])(context, _this2.configuration);
          var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_8__["default"].getColorIfActive(data);
          var lineOptions = {
            color: color
          };

          if (renderDashed) {
            lineOptions.lineDash = lineDash;
          } // Draw the measurement line


          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_9__["drawLine"])(context, element, data.handles.start, data.handles.end, lineOptions); // Draw the handles

          var handleOptions = {
            color: color,
            handleRadius: handleRadius,
            drawHandlesIfActive: drawHandlesOnHover,
            hideHandlesIfMoving: hideHandlesIfMoving
          };

          if (_this2.configuration.drawHandles) {
            Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_11__["default"])(context, eventData, data.handles, handleOptions);
          }

          if (!data.handles.textBox.hasMoved) {
            var coords = {
              x: Math.max(data.handles.start.x, data.handles.end.x)
            }; // Depending on which handle has the largest x-value,
            // Set the y-value for the text box

            if (coords.x === data.handles.start.x) {
              coords.y = data.handles.start.y;
            } else {
              coords.y = data.handles.end.y;
            }

            data.handles.textBox.x = coords.x;
            data.handles.textBox.y = coords.y;
          } // Move the textbox slightly to the right and upwards
          // So that it sits beside the length tool handle


          var xOffset = 10; // Update textbox stats

          if (data.invalidated === true) {
            if (data.length) {
              _this2.throttledUpdateCachedStats(image, element, data);
            } else {
              _this2.updateCachedStats(image, element, data);
            }
          }

          var text = textBoxText(data, rowPixelSpacing, colPixelSpacing);
          Object(_drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_10__["default"])(context, element, data.handles.textBox, text, data.handles, textBoxAnchorPoints, color, lineWidth, xOffset, true);
        });
      };

      for (var i = 0; i < toolData.data.length; i++) {
        var _ret = _loop(i);

        if (_ret === "continue") continue;
      } // - SideEffect: Updates annotation 'suffix'


      function textBoxText(annotation, rowPixelSpacing, colPixelSpacing) {
        var measuredValue = _sanitizeMeasuredValue(annotation.length); // Measured value is not defined, return empty string


        if (!measuredValue) {
          return '';
        } // Set the length text suffix depending on whether or not pixelSpacing is available


        var suffix = 'mm';

        if (!rowPixelSpacing || !colPixelSpacing) {
          suffix = 'pixels';
        }

        annotation.unit = suffix;
        return "".concat(measuredValue.toFixed(digits), " ").concat(suffix);
      }

      function textBoxAnchorPoints(handles) {
        var midpoint = {
          x: (handles.start.x + handles.end.x) / 2,
          y: (handles.start.y + handles.end.y) / 2
        };
        return [handles.start, midpoint, handles.end];
      }
    }
  }]);

  return LengthTool;
}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_5__["default"]);
/**
 * Attempts to sanitize a value by casting as a number; if unable to cast,
 * we return `undefined`
 *
 * @param {*} value
 * @returns a number or undefined
 */




function _sanitizeMeasuredValue(value) {
  var parsedValue = Number(value);
  var isNumber = !isNaN(parsedValue);
  return isNumber ? parsedValue : undefined;
}

/***/ }),

/***/ "./tools/annotation/ProbeTool.js":
/*!***************************************!*\
  !*** ./tools/annotation/ProbeTool.js ***!
  \***************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1115229__) {

"use strict";
__nested_webpack_require_1115229__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1115229__.d(__nested_webpack_exports__, "default", function() { return ProbeTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1115229__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1115229__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1115229__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_1115229__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1115229__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_1115229__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1115229__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_1115229__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1115229__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_1115229__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1115229__(/*! ../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1115229__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1115229__(/*! ../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1115229__(/*! ../../stateManagement/textStyle.js */ "./stateManagement/textStyle.js");
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1115229__(/*! ../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1115229__(/*! ../../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1115229__(/*! ../../drawing/drawTextBox.js */ "./drawing/drawTextBox.js");
/* harmony import */ var _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_1115229__(/*! ../../drawing/drawHandles.js */ "./drawing/drawHandles.js");
/* harmony import */ var _util_getRGBPixels_js__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_1115229__(/*! ../../util/getRGBPixels.js */ "./util/getRGBPixels.js");
/* harmony import */ var _util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_1115229__(/*! ../../util/calculateSUV.js */ "./util/calculateSUV.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_1115229__(/*! ../cursors/index.js */ "./tools/cursors/index.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_1115229__(/*! ../../util/logger.js */ "./util/logger.js");
/* harmony import */ var _util_throttle__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_1115229__(/*! ../../util/throttle */ "./util/throttle.js");
/* harmony import */ var _store_index__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_1115229__(/*! ../../store/index */ "./store/index.js");






 // State



 // Drawing



 // Utilities







var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_16__["getLogger"])('tools:annotation:ProbeTool');
/**
 * @public
 * @class ProbeTool
 * @memberof Tools.Annotation
 * @classdesc Tool which provides a probe of the image data at the
 * desired position.
 * @extends Tools.Base.BaseAnnotationTool
 */

var ProbeTool =
/*#__PURE__*/
function (_BaseAnnotationTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(ProbeTool, _BaseAnnotationTool);

  function ProbeTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ProbeTool);

    var defaultProps = {
      name: 'Probe',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_15__["probeCursor"],
      configuration: {
        drawHandles: true,
        renderDashed: false
      }
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(ProbeTool).call(this, props, defaultProps));
    _this.throttledUpdateCachedStats = Object(_util_throttle__WEBPACK_IMPORTED_MODULE_17__["default"])(_this.updateCachedStats, 110);
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ProbeTool, [{
    key: "createNewMeasurement",
    value: function createNewMeasurement(eventData) {
      var goodEventData = eventData && eventData.currentPoints && eventData.currentPoints.image;

      if (!goodEventData) {
        logger.error("required eventData not supplied to tool ".concat(this.name, "'s createNewMeasurement"));
        return;
      }

      return {
        visible: true,
        active: true,
        color: undefined,
        invalidated: true,
        handles: {
          end: {
            x: eventData.currentPoints.image.x,
            y: eventData.currentPoints.image.y,
            highlight: true,
            active: true
          }
        }
      };
    }
    /**
     *
     *
     * @param {*} element
     * @param {*} data
     * @param {*} coords
     * @returns {Boolean}
     */

  }, {
    key: "pointNearTool",
    value: function pointNearTool(element, data, coords) {
      var hasEndHandle = data && data.handles && data.handles.end;
      var validParameters = hasEndHandle;

      if (!validParameters) {
        logger.warn("invalid parameters supplied to tool ".concat(this.name, "'s pointNearTool"));
      }

      if (!validParameters || data.visible === false) {
        return false;
      }

      var probeCoords = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.end);
      return _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstoneMath.point.distance(probeCoords, coords) < 5;
    }
  }, {
    key: "updateCachedStats",
    value: function updateCachedStats(image, element, data) {
      var x = Math.round(data.handles.end.x);
      var y = Math.round(data.handles.end.y);
      var stats = {};

      if (x >= 0 && y >= 0 && x < image.columns && y < image.rows) {
        stats.x = x;
        stats.y = y;

        if (image.color) {
          stats.storedPixels = Object(_util_getRGBPixels_js__WEBPACK_IMPORTED_MODULE_13__["default"])(element, x, y, 1, 1);
        } else {
          stats.storedPixels = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.getStoredPixels(element, x, y, 1, 1);
          stats.sp = stats.storedPixels[0];
          stats.mo = stats.sp * image.slope + image.intercept;
          stats.suv = Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_14__["default"])(image, stats.sp);
        }
      }

      data.cachedStats = stats;
      data.invalidated = false;
    }
  }, {
    key: "renderToolData",
    value: function renderToolData(evt) {
      var _this2 = this;

      var eventData = evt.detail;
      var _this$configuration = this.configuration,
          handleRadius = _this$configuration.handleRadius,
          renderDashed = _this$configuration.renderDashed;
      var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__["getToolState"])(evt.currentTarget, this.name);

      if (!toolData) {
        return;
      } // We have tool data for this element - iterate over each one and draw it


      var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["getNewContext"])(eventData.canvasContext.canvas);
      var image = eventData.image,
          element = eventData.element;
      var fontHeight = _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getFontSize();
      var lineDash = Object(_store_index__WEBPACK_IMPORTED_MODULE_18__["getModule"])('globalConfiguration').configuration.lineDash;

      var _loop = function _loop(i) {
        var data = toolData.data[i];

        if (data.visible === false) {
          return "continue";
        }

        Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["draw"])(context, function (context) {
          var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getColorIfActive(data);

          if (_this2.configuration.drawHandles) {
            // Draw the handles
            var handleOptions = {
              handleRadius: handleRadius,
              color: color
            };

            if (renderDashed) {
              handleOptions.lineDash = lineDash;
            }

            Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_12__["default"])(context, eventData, data.handles, handleOptions);
          } // Update textbox stats


          if (data.invalidated === true) {
            if (data.cachedStats) {
              _this2.throttledUpdateCachedStats(image, element, data);
            } else {
              _this2.updateCachedStats(image, element, data);
            }
          }

          var text, str;
          var _data$cachedStats = data.cachedStats,
              x = _data$cachedStats.x,
              y = _data$cachedStats.y,
              storedPixels = _data$cachedStats.storedPixels,
              sp = _data$cachedStats.sp,
              mo = _data$cachedStats.mo,
              suv = _data$cachedStats.suv;

          if (x >= 0 && y >= 0 && x < image.columns && y < image.rows) {
            text = "".concat(x, ", ").concat(y);

            if (image.color) {
              str = "R: ".concat(storedPixels[0], " G: ").concat(storedPixels[1], " B: ").concat(storedPixels[2]);
            } else {
              // Draw text
              str = "SP: ".concat(sp, " MO: ").concat(parseFloat(mo.toFixed(3)));

              if (suv) {
                str += " SUV: ".concat(parseFloat(suv.toFixed(3)));
              }
            } // Coords for text


            var coords = {
              // Translate the x/y away from the cursor
              x: data.handles.end.x + 3,
              y: data.handles.end.y - 3
            };
            var textCoords = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(eventData.element, coords);
            Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_11__["default"])(context, str, textCoords.x, textCoords.y + fontHeight + 5, color);
            Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_11__["default"])(context, text, textCoords.x, textCoords.y, color);
          }
        });
      };

      for (var i = 0; i < toolData.data.length; i++) {
        var _ret = _loop(i);

        if (_ret === "continue") continue;
      }
    }
  }]);

  return ProbeTool;
}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);



/***/ }),

/***/ "./tools/annotation/RectangleRoiTool.js":
/*!**********************************************!*\
  !*** ./tools/annotation/RectangleRoiTool.js ***!
  \**********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1127977__) {

"use strict";
__nested_webpack_require_1127977__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1127977__.d(__nested_webpack_exports__, "default", function() { return RectangleRoiTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1127977__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1127977__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1127977__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_1127977__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1127977__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_1127977__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1127977__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_1127977__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1127977__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_1127977__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1127977__(/*! ./../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1127977__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1127977__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1127977__(/*! ./../../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js");
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1127977__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1127977__(/*! ./../../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1127977__(/*! ./../../util/calculateSUV.js */ "./util/calculateSUV.js");
/* harmony import */ var _util_getROITextBoxCoords_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_1127977__(/*! ../../util/getROITextBoxCoords.js */ "./util/getROITextBoxCoords.js");
/* harmony import */ var _util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_1127977__(/*! ./../../util/numbersWithCommas.js */ "./util/numbersWithCommas.js");
/* harmony import */ var _util_throttle_js__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_1127977__(/*! ./../../util/throttle.js */ "./util/throttle.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_1127977__(/*! ../cursors/index.js */ "./tools/cursors/index.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_1127977__(/*! ../../util/logger.js */ "./util/logger.js");
/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_1127977__(/*! ../../util/getPixelSpacing */ "./util/getPixelSpacing.js");
/* harmony import */ var _store_index__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_1127977__(/*! ../../store/index */ "./store/index.js");






 // State



 // Drawing

 // Util









var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_16__["getLogger"])('tools:annotation:RectangleRoiTool');
/**
 * @public
 * @class RectangleRoiTool
 * @memberof Tools.Annotation
 * @classdesc Tool for drawing rectangular regions of interest, and measuring
 * the statistics of the enclosed pixels.
 * @extends Tools.Base.BaseAnnotationTool
 */

var RectangleRoiTool =
/*#__PURE__*/
function (_BaseAnnotationTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(RectangleRoiTool, _BaseAnnotationTool);

  function RectangleRoiTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, RectangleRoiTool);

    var defaultProps = {
      name: 'RectangleRoi',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      configuration: {
        drawHandles: true,
        drawHandlesOnHover: false,
        hideHandlesIfMoving: false,
        renderDashed: false // showMinMax: false,
        // showHounsfieldUnits: true

      },
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_15__["rectangleRoiCursor"]
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(RectangleRoiTool).call(this, props, defaultProps));
    _this.throttledUpdateCachedStats = Object(_util_throttle_js__WEBPACK_IMPORTED_MODULE_14__["default"])(_this.updateCachedStats, 110);
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(RectangleRoiTool, [{
    key: "createNewMeasurement",
    value: function createNewMeasurement(eventData) {
      var goodEventData = eventData && eventData.currentPoints && eventData.currentPoints.image;

      if (!goodEventData) {
        logger.error("required eventData not supplied to tool ".concat(this.name, "'s createNewMeasurement"));
        return;
      }

      return {
        visible: true,
        active: true,
        color: undefined,
        invalidated: true,
        handles: {
          start: {
            x: eventData.currentPoints.image.x,
            y: eventData.currentPoints.image.y,
            highlight: true,
            active: false
          },
          end: {
            x: eventData.currentPoints.image.x,
            y: eventData.currentPoints.image.y,
            highlight: true,
            active: true
          },
          initialRotation: eventData.viewport.rotation,
          textBox: {
            active: false,
            hasMoved: false,
            movesIndependently: false,
            drawnIndependently: true,
            allowedOutsideImage: true,
            hasBoundingBox: true
          }
        }
      };
    }
  }, {
    key: "pointNearTool",
    value: function pointNearTool(element, data, coords, interactionType) {
      var hasStartAndEndHandles = data && data.handles && data.handles.start && data.handles.end;
      var validParameters = hasStartAndEndHandles;

      if (!validParameters) {
        logger.warn("invalid parameters supplied to tool ".concat(this.name, "'s pointNearTool"));
      }

      if (!validParameters || data.visible === false) {
        return false;
      }

      var distance = interactionType === 'mouse' ? 15 : 25;
      var startCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.start);
      var endCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.end);
      var rect = {
        left: Math.min(startCanvas.x, endCanvas.x),
        top: Math.min(startCanvas.y, endCanvas.y),
        width: Math.abs(startCanvas.x - endCanvas.x),
        height: Math.abs(startCanvas.y - endCanvas.y)
      };
      var distanceToPoint = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstoneMath.rect.distanceToPoint(rect, coords);
      return distanceToPoint < distance;
    }
  }, {
    key: "updateCachedStats",
    value: function updateCachedStats(image, element, data) {
      var seriesModule = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.metaData.get('generalSeriesModule', image.imageId) || {};
      var modality = seriesModule.modality;
      var pixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_17__["default"])(image);

      var stats = _calculateStats(image, element, data.handles, modality, pixelSpacing);

      data.cachedStats = stats;
      data.invalidated = false;
    }
  }, {
    key: "renderToolData",
    value: function renderToolData(evt) {
      var _this2 = this;

      var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__["getToolState"])(evt.currentTarget, this.name);

      if (!toolData) {
        return;
      }

      var eventData = evt.detail;
      var image = eventData.image,
          element = eventData.element;
      var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getToolWidth();
      var lineDash = Object(_store_index__WEBPACK_IMPORTED_MODULE_18__["getModule"])('globalConfiguration').configuration.lineDash;
      var _this$configuration = this.configuration,
          handleRadius = _this$configuration.handleRadius,
          drawHandlesOnHover = _this$configuration.drawHandlesOnHover,
          hideHandlesIfMoving = _this$configuration.hideHandlesIfMoving,
          renderDashed = _this$configuration.renderDashed;
      var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["getNewContext"])(eventData.canvasContext.canvas);

      var _getPixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_17__["default"])(image),
          rowPixelSpacing = _getPixelSpacing.rowPixelSpacing,
          colPixelSpacing = _getPixelSpacing.colPixelSpacing; // Meta


      var seriesModule = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.metaData.get('generalSeriesModule', image.imageId) || {}; // Pixel Spacing

      var modality = seriesModule.modality;
      var hasPixelSpacing = rowPixelSpacing && colPixelSpacing;
      Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["draw"])(context, function (context) {
        // If we have tool data for this element - iterate over each set and draw it
        for (var i = 0; i < toolData.data.length; i++) {
          var data = toolData.data[i];

          if (data.visible === false) {
            continue;
          } // Configure


          var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getColorIfActive(data);
          var handleOptions = {
            color: color,
            handleRadius: handleRadius,
            drawHandlesIfActive: drawHandlesOnHover,
            hideHandlesIfMoving: hideHandlesIfMoving
          };
          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["setShadow"])(context, _this2.configuration);
          var rectOptions = {
            color: color
          };

          if (renderDashed) {
            rectOptions.lineDash = lineDash;
          } // Draw


          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["drawRect"])(context, element, data.handles.start, data.handles.end, rectOptions, 'pixel', data.handles.initialRotation);

          if (_this2.configuration.drawHandles) {
            Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["drawHandles"])(context, eventData, data.handles, handleOptions);
          } // Update textbox stats


          if (data.invalidated === true) {
            if (data.cachedStats) {
              _this2.throttledUpdateCachedStats(image, element, data);
            } else {
              _this2.updateCachedStats(image, element, data);
            }
          } // Default to textbox on right side of ROI


          if (!data.handles.textBox.hasMoved) {
            var defaultCoords = Object(_util_getROITextBoxCoords_js__WEBPACK_IMPORTED_MODULE_12__["default"])(eventData.viewport, data.handles);
            Object.assign(data.handles.textBox, defaultCoords);
          }

          var textBoxAnchorPoints = function textBoxAnchorPoints(handles) {
            return _findTextBoxAnchorPoints(handles.start, handles.end);
          };

          var textBoxContent = _createTextBoxContent(context, image.color, data.cachedStats, modality, hasPixelSpacing, _this2.configuration);

          data.unit = _getUnit(modality, _this2.configuration.showHounsfieldUnits);
          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["drawLinkedTextBox"])(context, element, data.handles.textBox, textBoxContent, data.handles, textBoxAnchorPoints, color, lineWidth, 10, true);
        }
      });
    }
  }]);

  return RectangleRoiTool;
}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);
/**
 * TODO: This is the same method (+ GetPixels) for the other ROIs
 * TODO: The pixel filtering is the unique bit
 *
 * @param {*} startHandle
 * @param {*} endHandle
 * @returns {{ left: number, top: number, width: number, height: number}}
 */




function _getRectangleImageCoordinates(startHandle, endHandle) {
  return {
    left: Math.min(startHandle.x, endHandle.x),
    top: Math.min(startHandle.y, endHandle.y),
    width: Math.abs(startHandle.x - endHandle.x),
    height: Math.abs(startHandle.y - endHandle.y)
  };
}
/**
 *
 *
 * @param {*} image
 * @param {*} element
 * @param {*} handles
 * @param {*} modality
 * @param {*} pixelSpacing
 * @returns {Object} The Stats object
 */


function _calculateStats(image, element, handles, modality, pixelSpacing) {
  // Retrieve the bounds of the rectangle in image coordinates
  var roiCoordinates = _getRectangleImageCoordinates(handles.start, handles.end); // Retrieve the array of pixels that the rectangle bounds cover


  var pixels = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.getPixels(element, roiCoordinates.left, roiCoordinates.top, roiCoordinates.width, roiCoordinates.height); // Calculate the mean & standard deviation from the pixels and the rectangle details

  var roiMeanStdDev = _calculateRectangleStats(pixels, roiCoordinates);

  var meanStdDevSUV;

  if (modality === 'PT') {
    meanStdDevSUV = {
      mean: Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_11__["default"])(image, roiMeanStdDev.mean, true) || 0,
      stdDev: Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_11__["default"])(image, roiMeanStdDev.stdDev, true) || 0
    };
  } // Calculate the image area from the rectangle dimensions and pixel spacing


  var area = roiCoordinates.width * (pixelSpacing.colPixelSpacing || 1) * (roiCoordinates.height * (pixelSpacing.rowPixelSpacing || 1));
  var perimeter = roiCoordinates.width * 2 * (pixelSpacing.colPixelSpacing || 1) + roiCoordinates.height * 2 * (pixelSpacing.rowPixelSpacing || 1);
  return {
    area: area || 0,
    perimeter: perimeter,
    count: roiMeanStdDev.count || 0,
    mean: roiMeanStdDev.mean || 0,
    variance: roiMeanStdDev.variance || 0,
    stdDev: roiMeanStdDev.stdDev || 0,
    min: roiMeanStdDev.min || 0,
    max: roiMeanStdDev.max || 0,
    meanStdDevSUV: meanStdDevSUV
  };
}
/**
 *
 *
 * @param {*} sp
 * @param {*} rectangle
 * @returns {{ count, number, mean: number,  variance: number,  stdDev: number,  min: number,  max: number }}
 */


function _calculateRectangleStats(sp, rectangle) {
  var sum = 0;
  var sumSquared = 0;
  var count = 0;
  var index = 0;
  var min = sp ? sp[0] : null;
  var max = sp ? sp[0] : null;

  for (var y = rectangle.top; y < rectangle.top + rectangle.height; y++) {
    for (var x = rectangle.left; x < rectangle.left + rectangle.width; x++) {
      sum += sp[index];
      sumSquared += sp[index] * sp[index];
      min = Math.min(min, sp[index]);
      max = Math.max(max, sp[index]);
      count++; // TODO: Wouldn't this just be sp.length?

      index++;
    }
  }

  if (count === 0) {
    return {
      count: count,
      mean: 0.0,
      variance: 0.0,
      stdDev: 0.0,
      min: 0.0,
      max: 0.0
    };
  }

  var mean = sum / count;
  var variance = sumSquared / count - mean * mean;
  return {
    count: count,
    mean: mean,
    variance: variance,
    stdDev: Math.sqrt(variance),
    min: min,
    max: max
  };
}
/**
 *
 *
 * @param {*} startHandle
 * @param {*} endHandle
 * @returns {Array.<{x: number, y: number}>}
 */


function _findTextBoxAnchorPoints(startHandle, endHandle) {
  var _getRectangleImageCoo = _getRectangleImageCoordinates(startHandle, endHandle),
      left = _getRectangleImageCoo.left,
      top = _getRectangleImageCoo.top,
      width = _getRectangleImageCoo.width,
      height = _getRectangleImageCoo.height;

  return [{
    // Top middle point of rectangle
    x: left + width / 2,
    y: top
  }, {
    // Left middle point of rectangle
    x: left,
    y: top + height / 2
  }, {
    // Bottom middle point of rectangle
    x: left + width / 2,
    y: top + height
  }, {
    // Right middle point of rectangle
    x: left + width,
    y: top + height / 2
  }];
}
/**
 *
 *
 * @param {*} area
 * @param {*} hasPixelSpacing
 * @returns {string} The formatted label for showing area
 */


function _formatArea(area, hasPixelSpacing) {
  // This uses Char code 178 for a superscript 2
  var suffix = hasPixelSpacing ? " mm".concat(String.fromCharCode(178)) : " px".concat(String.fromCharCode(178));
  return "Area: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_13__["default"])(area.toFixed(2))).concat(suffix);
}

function _getUnit(modality, showHounsfieldUnits) {
  return modality === 'CT' && showHounsfieldUnits !== false ? 'HU' : '';
}
/**
 * TODO: This is identical to EllipticalROI's same fn
 * TODO: We may want to make this a utility for ROIs with these values?
 *
 * @param {*} context
 * @param {*} isColorImage
 * @param {*} { area, mean, stdDev, min, max, meanStdDevSUV }
 * @param {*} modality
 * @param {*} hasPixelSpacing
 * @param {*} [options={}]
 * @returns {string[]}
 */


function _createTextBoxContent(context, isColorImage) {
  var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
      _ref$area = _ref.area,
      area = _ref$area === void 0 ? 0 : _ref$area,
      _ref$mean = _ref.mean,
      mean = _ref$mean === void 0 ? 0 : _ref$mean,
      _ref$stdDev = _ref.stdDev,
      stdDev = _ref$stdDev === void 0 ? 0 : _ref$stdDev,
      _ref$min = _ref.min,
      min = _ref$min === void 0 ? 0 : _ref$min,
      _ref$max = _ref.max,
      max = _ref$max === void 0 ? 0 : _ref$max,
      _ref$meanStdDevSUV = _ref.meanStdDevSUV,
      meanStdDevSUV = _ref$meanStdDevSUV === void 0 ? 0 : _ref$meanStdDevSUV;

  var modality = arguments.length > 3 ? arguments[3] : undefined;
  var hasPixelSpacing = arguments.length > 4 ? arguments[4] : undefined;
  var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
  var showMinMax = options.showMinMax || false;
  var textLines = [];
  var otherLines = [];

  if (!isColorImage) {
    var hasStandardUptakeValues = meanStdDevSUV && meanStdDevSUV.mean !== 0;

    var unit = _getUnit(modality, options.showHounsfieldUnits);

    var meanString = "Mean: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_13__["default"])(mean.toFixed(2)), " ").concat(unit);
    var stdDevString = "Std Dev: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_13__["default"])(stdDev.toFixed(2)), " ").concat(unit); // If this image has SUV values to display, concatenate them to the text line

    if (hasStandardUptakeValues) {
      var SUVtext = ' SUV: ';
      var meanSuvString = "".concat(SUVtext).concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_13__["default"])(meanStdDevSUV.mean.toFixed(2)));
      var stdDevSuvString = "".concat(SUVtext).concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_13__["default"])(meanStdDevSUV.stdDev.toFixed(2)));
      var targetStringLength = Math.floor(context.measureText("".concat(stdDevString, "     ")).width);

      while (context.measureText(meanString).width < targetStringLength) {
        meanString += ' ';
      }

      otherLines.push("".concat(meanString).concat(meanSuvString));
      otherLines.push("".concat(stdDevString, "     ").concat(stdDevSuvString));
    } else {
      otherLines.push("".concat(meanString));
      otherLines.push("".concat(stdDevString));
    }

    if (showMinMax) {
      var minString = "Min: ".concat(min, " ").concat(unit);
      var maxString = "Max: ".concat(max, " ").concat(unit);

      var _targetStringLength = hasStandardUptakeValues ? Math.floor(context.measureText("".concat(stdDevString, "     ")).width) : Math.floor(context.measureText("".concat(meanString, "     ")).width);

      while (context.measureText(minString).width < _targetStringLength) {
        minString += ' ';
      }

      otherLines.push("".concat(minString).concat(maxString));
    }
  }

  textLines.push(_formatArea(area, hasPixelSpacing));
  otherLines.forEach(function (x) {
    return textLines.push(x);
  });
  return textLines;
}

/***/ }),

/***/ "./tools/annotation/TextMarkerTool.js":
/*!********************************************!*\
  !*** ./tools/annotation/TextMarkerTool.js ***!
  \********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1150196__) {

"use strict";
__nested_webpack_require_1150196__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1150196__.d(__nested_webpack_exports__, "default", function() { return TextMarkerTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1150196__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1150196__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1150196__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_1150196__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1150196__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_1150196__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1150196__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_1150196__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1150196__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_1150196__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1150196__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__nested_webpack_require_1150196__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1150196__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1150196__(/*! ./../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1150196__(/*! ./../../util/pointInsideBoundingBox.js */ "./util/pointInsideBoundingBox.js");
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1150196__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1150196__(/*! ./../../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1150196__(/*! ./../../drawing/drawTextBox.js */ "./drawing/drawTextBox.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_1150196__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_1150196__(/*! ../cursors/index.js */ "./tools/cursors/index.js");














/**
 * @public
 * @class TextMarkerTool
 * @memberof Tools.Annotation
 *
 * @classdesc Tool for annotating an image with text markers.
 * @extends Tools.Base.BaseAnnotationTool
 */

var TextMarkerTool =
/*#__PURE__*/
function (_BaseAnnotationTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(TextMarkerTool, _BaseAnnotationTool);

  function TextMarkerTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, TextMarkerTool);

    var defaultProps = {
      name: 'TextMarker',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      configuration: {
        markers: [],
        current: '',
        ascending: true,
        loop: false,
        changeTextCallback: changeTextCallback
      },
      svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_13__["textMarkerCursor"]
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(TextMarkerTool).call(this, props, defaultProps));
    _this.touchPressCallback = _this._changeText.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    _this.doubleClickCallback = _this._changeText.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    return _this;
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(TextMarkerTool, [{
    key: "createNewMeasurement",
    value: function createNewMeasurement(eventData) {
      var config = this.configuration;

      if (!config.current) {
        return;
      } // Create the measurement data for this tool with the end handle activated


      var measurementData = {
        visible: true,
        active: true,
        text: config.current,
        color: undefined,
        handles: {
          end: {
            x: eventData.currentPoints.image.x,
            y: eventData.currentPoints.image.y,
            highlight: true,
            active: true,
            hasBoundingBox: true
          }
        }
      }; // Create a rectangle representing the image

      var imageRect = {
        left: 0,
        top: 0,
        width: eventData.image.width,
        height: eventData.image.height
      }; // Check if the current handle is outside the image,
      // If it is, prevent the handle creation

      if (!_externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstoneMath.point.insideRect(measurementData.handles.end, imageRect)) {
        return;
      } // Update the current marker for the next marker


      var currentIndex = config.markers.indexOf(config.current);
      var increment = config.ascending ? 1 : -1;
      currentIndex += increment;

      if (currentIndex >= config.markers.length) {
        currentIndex = config.loop ? 0 : -1;
      } else if (currentIndex < 0) {
        currentIndex = config.loop ? config.markers.length : -1;
      }

      config.current = config.markers[currentIndex];
      return measurementData;
    }
  }, {
    key: "pointNearTool",
    value: function pointNearTool(element, data, coords) {
      if (data.visible === false) {
        return false;
      }

      if (!data.handles.end.boundingBox) {
        return;
      }

      var distanceToPoint = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstoneMath.rect.distanceToPoint(data.handles.end.boundingBox, coords);
      var insideBoundingBox = Object(_util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_8__["default"])(data.handles.end, coords);
      return distanceToPoint < 10 || insideBoundingBox;
    }
  }, {
    key: "updateCachedStats",
    value: function updateCachedStats() {// Implementing to satisfy BaseAnnotationTool
    }
  }, {
    key: "renderToolData",
    value: function renderToolData(evt) {
      var eventData = evt.detail;
      var config = this.configuration; // If we have no toolData for this element, return immediately as there is nothing to do

      var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_12__["getToolState"])(eventData.element, this.name);

      if (!toolData) {
        return;
      } // We have tool data for this element - iterate over each one and draw it


      var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["getNewContext"])(eventData.canvasContext.canvas);

      var _loop = function _loop(i) {
        var data = toolData.data[i];

        if (data.visible === false) {
          return "continue";
        }

        var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getColorIfActive(data);
        Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["draw"])(context, function (context) {
          Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["setShadow"])(context, config);
          var textCoords = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.pixelToCanvas(eventData.element, data.handles.end);
          var options = {
            centering: {
              x: true,
              y: true
            }
          };
          data.handles.end.boundingBox = Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_11__["default"])(context, data.text, textCoords.x, textCoords.y - 10, color, options);
        });
      };

      for (var i = 0; i < toolData.data.length; i++) {
        var _ret = _loop(i);

        if (_ret === "continue") continue;
      }
    }
  }, {
    key: "_changeText",
    value: function _changeText(evt) {
      var eventData = evt.detail;
      var element = eventData.element,
          currentPoints = eventData.currentPoints;
      var data;

      function doneChangingTextCallback(data, updatedText, deleteTool) {
        if (deleteTool === true) {
          Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_12__["removeToolState"])(element, this.name, data);
        } else {
          data.text = updatedText;
        }

        data.active = false;
        _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element);
      }

      var config = this.configuration;
      var coords = currentPoints.canvas;
      var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_12__["getToolState"])(element, this.name); // Now check to see if there is a handle we can move

      if (!toolData) {
        return;
      }

      for (var i = 0; i < toolData.data.length; i++) {
        data = toolData.data[i];

        if (this.pointNearTool(element, data, coords)) {
          data.active = true;
          _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element); // Allow relabelling via a callback

          config.changeTextCallback(data, eventData, doneChangingTextCallback);
          evt.stopImmediatePropagation();
          evt.preventDefault();
          evt.stopPropagation();
          return;
        }
      }
    }
  }]);

  return TextMarkerTool;
}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);
/**
 * This function is a callback to be overwriten in order to provide the wanted feature
 * modal, overlay, popup or any kind of interaction with the user to be able to update
 * the text marker label.
 *
 * @param  {Object} data
 * @param  {Object} eventData
 * @param  {doneChangingTextCallback} doneChangingTextCallback
 * @returns {void}
 */




var changeTextCallback = function changeTextCallback(data, eventData, doneChangingTextCallback) {
  // eslint-disable-next-line no-alert
  doneChangingTextCallback(data, prompt('Change your annotation:'));
};
/**
 * @callback doneChangingTextCallback
 * @param {Object} data
 * @param {string} text - The new text
 */

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/addNewMeasurement.js":
/*!*****************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/addNewMeasurement.js ***!
  \*****************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1162673__) {

"use strict";
__nested_webpack_require_1162673__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1162673__(/*! ./../../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1162673__(/*! ./../../../events.js */ "./events.js");
/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1162673__(/*! ./../../../manipulators/index.js */ "./manipulators/index.js");
/* harmony import */ var _manipulators_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1162673__(/*! ./../../../manipulators/anyHandlesOutsideImage.js */ "./manipulators/anyHandlesOutsideImage.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1162673__(/*! ./../../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1162673__(/*! ../../../util/triggerEvent.js */ "./util/triggerEvent.js");
/* harmony import */ var _util_getActiveTool__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1162673__(/*! ../../../util/getActiveTool */ "./util/getActiveTool.js");
/* harmony import */ var _BidirectionalTool__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1162673__(/*! ../BidirectionalTool */ "./tools/annotation/BidirectionalTool.js");
/* harmony import */ var _utils_updatePerpendicularLineHandles_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1162673__(/*! ./utils/updatePerpendicularLineHandles.js */ "./tools/annotation/bidirectionalTool/utils/updatePerpendicularLineHandles.js");









/* harmony default export */ __nested_webpack_exports__["default"] = (function (evt, interactionType) {
  var _this = this;

  var eventData = evt.detail;
  var element = eventData.element,
      image = eventData.image,
      buttons = eventData.buttons;
  var config = this.configuration;

  if (checkPixelSpacing(image)) {
    return;
  }

  var measurementData = this.createNewMeasurement(eventData);

  var doneCallback = function doneCallback() {
    measurementData.active = false;
    _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element);
  }; // Associate this data with this imageId so we can render it and manipulate it


  Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__["addToolState"])(element, this.name, measurementData);
  _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element);
  var timestamp = new Date().getTime();
  var _measurementData$hand = measurementData.handles,
      end = _measurementData$hand.end,
      perpendicularStart = _measurementData$hand.perpendicularStart;
  Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_2__["moveNewHandle"])(eventData, this.name, measurementData, end, {}, interactionType, function (success) {
    if (!success) {
      Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__["removeToolState"])(element, _this.name, measurementData);
      return;
    }

    var handles = measurementData.handles,
        longestDiameter = measurementData.longestDiameter,
        shortestDiameter = measurementData.shortestDiameter;
    var hasHandlesOutside = Object(_manipulators_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_3__["default"])(eventData, handles);
    var longestDiameterSize = parseFloat(longestDiameter) || 0;
    var shortestDiameterSize = parseFloat(shortestDiameter) || 0;
    var isTooSmal = longestDiameterSize < 1 || shortestDiameterSize < 1;
    var isTooFast = new Date().getTime() - timestamp < 150;

    if (hasHandlesOutside || isTooSmal || isTooFast) {
      // Delete the measurement
      measurementData.cancelled = true;
      Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__["removeToolState"])(element, _this.name, measurementData);
    } else {
      // Set lesionMeasurementData Session
      config.getMeasurementLocationCallback(measurementData, eventData, doneCallback);
    } // Update perpendicular line and disconnect it from the long-line


    Object(_utils_updatePerpendicularLineHandles_js__WEBPACK_IMPORTED_MODULE_8__["default"])(eventData, measurementData);
    perpendicularStart.locked = false;
    measurementData.invalidated = true;
    _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element);
    var activeTool = Object(_util_getActiveTool__WEBPACK_IMPORTED_MODULE_6__["default"])(element, buttons, interactionType);

    if (activeTool instanceof _BidirectionalTool__WEBPACK_IMPORTED_MODULE_7__["default"]) {
      activeTool.updateCachedStats(image, element, measurementData);
    }

    var modifiedEventData = {
      toolName: _this.name,
      toolType: _this.name,
      // Deprecation notice: toolType will be replaced by toolName
      element: element,
      measurementData: measurementData
    };
    Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_1__["default"].MEASUREMENT_MODIFIED, modifiedEventData);
    Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_1__["default"].MEASUREMENT_COMPLETED, modifiedEventData);
  });
});

var checkPixelSpacing = function checkPixelSpacing(image) {
  var imagePlane = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.metaData.get('imagePlaneModule', image.imageId);
  var rowPixelSpacing = image.rowPixelSpacing;
  var colPixelSpacing = image.columnPixelSpacing;

  if (imagePlane) {
    rowPixelSpacing = imagePlane.rowPixelSpacing || imagePlane.rowImagePixelSpacing;
    colPixelSpacing = imagePlane.columnPixelSpacing || imagePlane.colImagePixelSpacing;
  } // LT-29 Disable Target Measurements when pixel spacing is not available


  return !rowPixelSpacing || !colPixelSpacing;
};

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/createNewMeasurement.js":
/*!********************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/createNewMeasurement.js ***!
  \********************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1169006__) {

"use strict";
__nested_webpack_require_1169006__.r(__nested_webpack_exports__);
var getHandle = function getHandle(x, y, index) {
  var extraAttributes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
  return Object.assign({
    x: x,
    y: y,
    index: index,
    drawnIndependently: false,
    allowedOutsideImage: false,
    highlight: true,
    active: false
  }, extraAttributes);
};

/* harmony default export */ __nested_webpack_exports__["default"] = (function (mouseEventData) {
  var _mouseEventData$curre = mouseEventData.currentPoints.image,
      x = _mouseEventData$curre.x,
      y = _mouseEventData$curre.y; // Create the measurement data for this tool with the end handle activated

  var measurementData = {
    toolName: this.name,
    toolType: this.name,
    // Deprecation notice: toolType will be replaced by toolName
    isCreating: true,
    visible: true,
    active: true,
    invalidated: true,
    handles: {
      start: getHandle(x, y, 0),
      end: getHandle(x, y, 1, {
        active: true
      }),
      perpendicularStart: getHandle(x, y, 2, {
        locked: true
      }),
      perpendicularEnd: getHandle(x, y, 3),
      textBox: getHandle(x - 50, y - 70, null, {
        highlight: false,
        hasMoved: true,
        active: false,
        movesIndependently: false,
        drawnIndependently: true,
        allowedOutsideImage: true,
        hasBoundingBox: true
      })
    },
    longestDiameter: 0,
    shortestDiameter: 0
  };
  return measurementData;
});

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/handleSelectedCallback.js":
/*!**********************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/handleSelectedCallback.js ***!
  \**********************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1170928__) {

"use strict";
__nested_webpack_require_1170928__.r(__nested_webpack_exports__);
/* harmony default export */ __nested_webpack_exports__["default"] = (function (evt, toolData, handle) {
  var interactionType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'mouse';

  if (interactionType === 'touch') {
    this.handleSelectedTouchCallback(evt);
  } else {
    this.handleSelectedMouseCallback(evt);
  }
});

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/handleSelectedMouseCallback.js":
/*!***************************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/handleSelectedMouseCallback.js ***!
  \***************************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1171761__) {

"use strict";
__nested_webpack_require_1171761__.r(__nested_webpack_exports__);
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1171761__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js");
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1171761__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1171761__(/*! ./../../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1171761__(/*! ./../../../events.js */ "./events.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1171761__(/*! ./../../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _manipulators_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1171761__(/*! ./../../../manipulators/anyHandlesOutsideImage.js */ "./manipulators/anyHandlesOutsideImage.js");
/* harmony import */ var _manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1171761__(/*! ./../../../manipulators/getHandleNearImagePoint.js */ "./manipulators/getHandleNearImagePoint.js");
/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1171761__(/*! ./../../../manipulators/index.js */ "./manipulators/index.js");
/* harmony import */ var _moveHandle_moveHandle_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1171761__(/*! ./moveHandle/moveHandle.js */ "./tools/annotation/bidirectionalTool/moveHandle/moveHandle.js");
/* harmony import */ var _invertHandles_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1171761__(/*! ./invertHandles.js */ "./tools/annotation/bidirectionalTool/invertHandles.js");
/* harmony import */ var _store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1171761__(/*! ../../../store/setToolCursor.js */ "./store/setToolCursor.js");
/* harmony import */ var _util_getProximityThreshold_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1171761__(/*! ../../../util/getProximityThreshold.js */ "./util/getProximityThreshold.js");


/* jshint -W083 */










/* harmony default export */ __nested_webpack_exports__["default"] = (function (evt) {
  var _this = this;

  var eventData = evt.detail;
  var element = eventData.element;
  var data;
  var distanceThreshold = Object(_util_getProximityThreshold_js__WEBPACK_IMPORTED_MODULE_10__["default"])('mouse', this.name);

  var handleDoneMove = function handleDoneMove(handle) {
    data.invalidated = true;

    if (Object(_manipulators_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_4__["default"])(eventData, data.handles)) {
      // Delete the measurement
      Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["removeToolState"])(element, _this.name, data);
    } // Update the handles to keep selected state


    if (handle) {
      handle.moving = false;
      handle.selected = true;
    }

    Object(_store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_9__["setToolCursor"])(_this.element, _this.svgCursor);
    _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);
    element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MOUSE_MOVE, _this._moveCallback);
    element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_START, _this._moveCallback);
  };

  var coords = eventData.startPoints.canvas;
  var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(evt.currentTarget, this.name);

  if (!toolData) {
    return;
  } // Now check to see if there is a handle we can move


  var _loop = function _loop(i) {
    data = toolData.data[i];
    var handleParams = [element, data.handles, coords, distanceThreshold];
    var handle = _manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_5__["default"].apply(void 0, handleParams);

    if (handle) {
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MOUSE_MOVE, _this._moveCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_START, _this._moveCallback);
      data.active = true;
      unselectAllHandles(data.handles);
      handle.moving = true; // Invert handles if needed

      handle = Object(_invertHandles_js__WEBPACK_IMPORTED_MODULE_8__["default"])(eventData, data, handle);
      /* Hide the cursor to improve precision while resizing the line or set to move
         if dragging text box
      */

      if (!handle.hasBoundingBox) {
        Object(_store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_9__["hideToolCursor"])(_this.element);
      }

      Object(_moveHandle_moveHandle_js__WEBPACK_IMPORTED_MODULE_7__["default"])(eventData, _this.name, data, handle, function () {
        return handleDoneMove(handle);
      });
      preventPropagation(evt);
      return {
        v: true
      };
    }
  };

  for (var i = 0; i < toolData.data.length; i++) {
    var _ret = _loop(i);

    if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(_ret) === "object") return _ret.v;
  }

  var getDoneMovingCallback = function getDoneMovingCallback(handles) {
    return function () {
      setHandlesMovingState(handles, false);
      handleDoneMove();
    };
  };

  for (var i = 0; i < toolData.data.length; i++) {
    data = toolData.data[i];

    if (this.pointNearTool(element, data, coords, 'mouse')) {
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MOUSE_MOVE, this._moveCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_START, this._moveCallback);
      data.active = true;
      unselectAllHandles(data.handles);
      setHandlesMovingState(data.handles, true);
      var doneMovingCallback = getDoneMovingCallback(data.handles);
      Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_6__["moveAllHandles"])(eventData, this.name, data, null, {
        deleteIfHandleOutsideImage: true,
        preventHandleOutsideImage: false
      }, 'mouse', doneMovingCallback);
      preventPropagation(evt);
      return true;
    }
  }
}); // Clear the selected state for the given handles object

var unselectAllHandles = function unselectAllHandles(handles) {
  var imageNeedsUpdate = false;
  Object.keys(handles).forEach(function (handleKey) {
    if (handleKey === 'textBox') {
      return;
    }

    handles[handleKey].selected = false;
    imageNeedsUpdate = handles[handleKey].active || imageNeedsUpdate;
    handles[handleKey].active = false;
  });
  return imageNeedsUpdate;
};

var setHandlesMovingState = function setHandlesMovingState(handles, state) {
  Object.keys(handles).forEach(function (handleKey) {
    if (handleKey === 'textBox') {
      return;
    }

    handles[handleKey].moving = state;
  });
};

var preventPropagation = function preventPropagation(evt) {
  evt.stopImmediatePropagation();
  evt.stopPropagation();
  evt.preventDefault();
};

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/handleSelectedTouchCallback.js":
/*!***************************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/handleSelectedTouchCallback.js ***!
  \***************************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1179375__) {

"use strict";
__nested_webpack_require_1179375__.r(__nested_webpack_exports__);
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1179375__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js");
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1179375__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1179375__(/*! ./../../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1179375__(/*! ../../../store/index.js */ "./store/index.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1179375__(/*! ./../../../events.js */ "./events.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1179375__(/*! ./../../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _manipulators_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1179375__(/*! ./../../../manipulators/anyHandlesOutsideImage.js */ "./manipulators/anyHandlesOutsideImage.js");
/* harmony import */ var _manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1179375__(/*! ./../../../manipulators/getHandleNearImagePoint.js */ "./manipulators/getHandleNearImagePoint.js");
/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1179375__(/*! ./../../../manipulators/index.js */ "./manipulators/index.js");
/* harmony import */ var _moveHandle_touchMoveHandle_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1179375__(/*! ./moveHandle/touchMoveHandle.js */ "./tools/annotation/bidirectionalTool/moveHandle/touchMoveHandle.js");


/* jshint -W083 */








/* harmony default export */ __nested_webpack_exports__["default"] = (function (evt) {
  var _this = this;

  var eventData = evt.detail;
  var element = eventData.element;
  var data;
  var distanceThreshold = _store_index_js__WEBPACK_IMPORTED_MODULE_2__["state"].touchProximity;

  var handleDoneMove = function handleDoneMove(handle) {
    data.invalidated = true;

    if (Object(_manipulators_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_5__["default"])(eventData, data.handles)) {
      // Delete the measurement
      Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__["removeToolState"])(element, _this.name, data);
    } // Update the handles to keep selected state


    if (handle) {
      handle.moving = false;
      handle.selected = true;
    }

    _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element);
    element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_3__["default"].TOUCH_DRAG, _this._moveCallback);
  };

  var coords = eventData.startPoints.canvas;
  var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__["getToolState"])(evt.currentTarget, this.name);

  if (!toolData) {
    return;
  } // Now check to see if there is a handle we can move


  var _loop = function _loop(i) {
    data = toolData.data[i];
    var handleParams = [element, data.handles, coords, distanceThreshold];
    var handle = _manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_6__["default"].apply(void 0, handleParams);

    if (handle) {
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_3__["default"].TOUCH_DRAG, _this._moveCallback);
      data.active = true;
      unselectAllHandles(data.handles);
      handle.moving = true;
      Object(_moveHandle_touchMoveHandle_js__WEBPACK_IMPORTED_MODULE_8__["default"])(eventData, _this.name, data, handle, function () {
        return handleDoneMove(handle);
      });
      preventPropagation(evt);
      return {
        v: true
      };
    }
  };

  for (var i = 0; i < toolData.data.length; i++) {
    var _ret = _loop(i);

    if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(_ret) === "object") return _ret.v;
  }

  var getDoneMovingCallback = function getDoneMovingCallback(handles) {
    return function () {
      setHandlesMovingState(handles, false);
      handleDoneMove();
    };
  };

  for (var i = 0; i < toolData.data.length; i++) {
    data = toolData.data[i];

    if (this.pointNearTool(element, data, coords, 'touch')) {
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_3__["default"].TOUCH_DRAG, this._moveCallback);
      data.active = true;
      unselectAllHandles(data.handles);
      setHandlesMovingState(data.handles, true);
      var doneMovingCallback = getDoneMovingCallback(data.handles);
      Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_7__["moveAllHandles"])(eventData, this.name, data, null, {
        deleteIfHandleOutsideImage: true,
        preventHandleOutsideImage: false
      }, 'touch', doneMovingCallback);
      preventPropagation(evt);
      return true;
    }
  }
}); // Clear the selected state for the given handles object

var unselectAllHandles = function unselectAllHandles(handles) {
  var imageNeedsUpdate = false;
  Object.keys(handles).forEach(function (handleKey) {
    if (handleKey === 'textBox') {
      return;
    }

    handles[handleKey].selected = false;
    imageNeedsUpdate = handles[handleKey].active || imageNeedsUpdate;
    handles[handleKey].active = false;
  });
  return imageNeedsUpdate;
};

var setHandlesMovingState = function setHandlesMovingState(handles, state) {
  Object.keys(handles).forEach(function (handleKey) {
    if (handleKey === 'textBox') {
      return;
    }

    handles[handleKey].moving = state;
  });
};

var preventPropagation = function preventPropagation(evt) {
  evt.stopImmediatePropagation();
  evt.stopPropagation();
  evt.preventDefault();
};

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/invertHandles.js":
/*!*************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/invertHandles.js ***!
  \*************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1185650__) {

"use strict";
__nested_webpack_require_1185650__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1185650__.d(__nested_webpack_exports__, "default", function() { return invertHandles; });
var swapAttribute = function swapAttribute(a, b, attribute) {
  var originalA = a[attribute];
  var originalB = b[attribute];
  a[attribute] = originalB;
  b[attribute] = originalA;
};

var swapHandles = function swapHandles(a, b) {
  swapAttribute(a, b, 'x');
  swapAttribute(a, b, 'y');
  swapAttribute(a, b, 'moving');
  swapAttribute(a, b, 'hover');
  swapAttribute(a, b, 'active');
  swapAttribute(a, b, 'selected');
};

function invertHandles(eventData, measurementData, handle) {
  var _eventData$image = eventData.image,
      rowPixelSpacing = _eventData$image.rowPixelSpacing,
      columnPixelSpacing = _eventData$image.columnPixelSpacing;
  var handles = measurementData.handles;
  var start = handles.start,
      end = handles.end,
      perpendicularStart = handles.perpendicularStart,
      perpendicularEnd = handles.perpendicularEnd; // Calculate the long axis length

  var dx = (start.x - end.x) * (columnPixelSpacing || 1);
  var dy = (start.y - end.y) * (rowPixelSpacing || 1);
  var length = Math.sqrt(dx * dx + dy * dy); // Calculate the short axis length

  var wx = (perpendicularStart.x - perpendicularEnd.x) * (columnPixelSpacing || 1);
  var wy = (perpendicularStart.y - perpendicularEnd.y) * (rowPixelSpacing || 1);
  var width = Math.sqrt(wx * wx + wy * wy) || 0;

  if (width > length) {
    swapHandles(start, end);
    swapHandles(start, perpendicularStart);
    swapHandles(end, perpendicularEnd);
    return Object.values(handles).find(function (h) {
      return h.moving === true;
    });
  }

  return handle;
}

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/mouseMoveCallback.js":
/*!*****************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/mouseMoveCallback.js ***!
  \*****************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1187776__) {

"use strict";
__nested_webpack_require_1187776__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1187776__(/*! ./../../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _stateManagement_toolCoordinates_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1187776__(/*! ./../../../stateManagement/toolCoordinates.js */ "./stateManagement/toolCoordinates.js");
/* harmony import */ var _manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1187776__(/*! ./../../../manipulators/getHandleNearImagePoint.js */ "./manipulators/getHandleNearImagePoint.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1187776__(/*! ./../../../stateManagement/toolState.js */ "./stateManagement/toolState.js");



 // Replaces the cornerstoneTools.handleActivator function by skiping the active handle comparison

var handleActivator = function handleActivator(element, handles, canvasPoint) {
  var distanceThreshold = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 6;
  var nearbyHandle = Object(_manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element, handles, canvasPoint, distanceThreshold);
  var handleActivatorChanged = false;
  Object.keys(handles).forEach(function (handleKey) {
    if (handleKey === 'textBox') {
      return;
    }

    var handle = handles[handleKey];
    var newActiveState = handle === nearbyHandle;

    if (handle.active !== newActiveState) {
      handleActivatorChanged = true;
    }

    handle.active = newActiveState;
  });
  return handleActivatorChanged;
}; // MouseMoveCallback is used to hide handles when mouse is away


/* harmony default export */ __nested_webpack_exports__["default"] = (function (event) {
  var _this = this;

  var eventData = event.detail;
  var element = eventData.element;
  _stateManagement_toolCoordinates_js__WEBPACK_IMPORTED_MODULE_1__["default"].setCoords(eventData); // If we have no tool data for this element, do nothing

  var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, this.name);

  if (!toolData) {
    return;
  } // We have tool data, search through all data and see if we can activate a handle


  var imageNeedsUpdate = false;

  var _loop = function _loop(i) {
    // Get the cursor position in canvas coordinates
    var coords = eventData.currentPoints.canvas;
    var data = toolData.data[i];
    var handleActivatorChanged = handleActivator(element, data.handles, coords);
    Object.keys(data.handles).forEach(function (handleKey) {
      if (handleKey === 'textBox') {
        return;
      }

      var handle = data.handles[handleKey];
      handle.hover = handle.active;
    });

    if (handleActivatorChanged) {
      imageNeedsUpdate = true;
    }

    var nearTool = _this.pointNearTool(element, data, coords, 'mouse');

    var nearToolAndInactive = nearTool && !data.active;
    var notNearToolAndActive = !nearTool && data.active;

    if (nearToolAndInactive || notNearToolAndActive) {
      data.active = !data.active;
      imageNeedsUpdate = true;
    }
  };

  for (var i = 0; i < toolData.data.length; i++) {
    _loop(i);
  } // Handle activation status changed, redraw the image


  if (imageNeedsUpdate === true) {
    _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element);
  }
});

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/moveHandle/getBaseData.js":
/*!**********************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/moveHandle/getBaseData.js ***!
  \**********************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1191649__) {

"use strict";
__nested_webpack_require_1191649__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1191649__.d(__nested_webpack_exports__, "default", function() { return getBaseData; });
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1191649__(/*! ../../../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _utils_getDistanceWithPixelSpacing_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1191649__(/*! ../utils/getDistanceWithPixelSpacing.js */ "./tools/annotation/bidirectionalTool/utils/getDistanceWithPixelSpacing.js");



function createLine(startPoint, endPoint) {
  return {
    start: startPoint,
    end: endPoint
  };
}
/**
 * Extract and group the base data to be used on bidirectional tool lines
 * moving.
 *
 * @param {*} measurementData Data from current bidirectional tool measurement
 * @param {*} eventData Data object associated with the event
 * @param {*} fixedPoint Point that is not being moved in line
 *
 * @returns {*} Grouped that needed for lines moving
 */


function getBaseData(measurementData, eventData, fixedPoint) {
  var lineSegment = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.lineSegment;
  var _measurementData$hand = measurementData.handles,
      start = _measurementData$hand.start,
      end = _measurementData$hand.end,
      perpendicularStart = _measurementData$hand.perpendicularStart,
      perpendicularEnd = _measurementData$hand.perpendicularEnd;
  var _eventData$image = eventData.image,
      _eventData$image$colu = _eventData$image.columnPixelSpacing,
      columnPixelSpacing = _eventData$image$colu === void 0 ? 1 : _eventData$image$colu,
      _eventData$image$rowP = _eventData$image.rowPixelSpacing,
      rowPixelSpacing = _eventData$image$rowP === void 0 ? 1 : _eventData$image$rowP;
  var longLine = createLine(start, end);
  var perpendicularLine = createLine(perpendicularStart, perpendicularEnd);
  var intersection = lineSegment.intersectLine(longLine, perpendicularLine);
  var distanceToFixed = Object(_utils_getDistanceWithPixelSpacing_js__WEBPACK_IMPORTED_MODULE_1__["default"])(columnPixelSpacing, rowPixelSpacing, fixedPoint, intersection);
  return {
    columnPixelSpacing: columnPixelSpacing,
    // Width that a pixel represents in mm
    rowPixelSpacing: rowPixelSpacing,
    // Height that a pixel represents in mm
    start: start,
    // Start point of the long line
    end: end,
    // End point of the long line
    perpendicularStart: perpendicularStart,
    // Start point of the perpendicular line
    perpendicularEnd: perpendicularEnd,
    // End point of the perpendicular line
    longLine: longLine,
    // Long line object containing the start and end points
    intersection: intersection,
    // Intersection point between long and perpendicular lines
    distanceToFixed: distanceToFixed,
    // Distance from intersection to the fixed point
    fixedPoint: fixedPoint // Opposite point from the handle that is being moved

  };
}

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/moveHandle/moveHandle.js":
/*!*********************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/moveHandle/moveHandle.js ***!
  \*********************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1195072__) {

"use strict";
__nested_webpack_require_1195072__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1195072__(/*! ./../../../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1195072__(/*! ../../../../store/index.js */ "./store/index.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1195072__(/*! ./../../../../events.js */ "./events.js");
/* harmony import */ var _setHandlesPosition_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1195072__(/*! ./setHandlesPosition.js */ "./tools/annotation/bidirectionalTool/moveHandle/setHandlesPosition.js");
/* harmony import */ var _util_getActiveTool__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1195072__(/*! ../../../../util/getActiveTool */ "./util/getActiveTool.js");
/* harmony import */ var _base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1195072__(/*! ../../../base/BaseAnnotationTool */ "./tools/base/BaseAnnotationTool.js");






/* harmony default export */ __nested_webpack_exports__["default"] = (function (mouseEventData, toolName, data, handle, doneMovingCallback, preventHandleOutsideImage) {
  var element = mouseEventData.element,
      image = mouseEventData.image,
      buttons = mouseEventData.buttons;
  var distanceFromTool = {
    x: handle.x - mouseEventData.currentPoints.image.x,
    y: handle.y - mouseEventData.currentPoints.image.y
  };

  var _dragCallback = function _dragCallback(event) {
    var eventData = event.detail;
    handle.hasMoved = true;

    if (handle.index === undefined || handle.index === null) {
      handle.x = eventData.currentPoints.image.x + distanceFromTool.x;
      handle.y = eventData.currentPoints.image.y + distanceFromTool.y;
    } else {
      Object(_setHandlesPosition_js__WEBPACK_IMPORTED_MODULE_3__["default"])(handle, eventData, data, distanceFromTool);
    }

    if (preventHandleOutsideImage) {
      handle.x = Math.max(handle.x, 0);
      handle.x = Math.min(handle.x, eventData.image.width);
      handle.y = Math.max(handle.y, 0);
      handle.y = Math.min(handle.y, eventData.image.height);
    }

    data.invalidated = true;
    _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element);
    var activeTool = Object(_util_getActiveTool__WEBPACK_IMPORTED_MODULE_4__["default"])(element, buttons, 'mouse');

    if (activeTool instanceof _base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_5__["default"]) {
      activeTool.updateCachedStats(image, element, data);
    }

    var modifiedEventData = {
      toolName: toolName,
      toolType: toolName,
      // Deprecation notice: toolType will be replaced by toolName
      element: element,
      measurementData: data
    };
    _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.triggerEvent(element, _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MEASUREMENT_MODIFIED, modifiedEventData);
  };

  handle.active = true;
  handle.moving = true;
  _store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isToolLocked = true;
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MOUSE_DRAG, _dragCallback);
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_DRAG, _dragCallback);
  var currentImage = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getImage(element);

  var imageRenderedHandler = function imageRenderedHandler() {
    var newImage = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getImage(element); // Check if the rendered image changed during measurement modifying and stop it if so

    if (newImage.imageId !== currentImage.imageId) {
      interactionEndCallback();
    }
  }; // Bind the event listener for image rendering


  element.addEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.IMAGE_RENDERED, imageRenderedHandler);

  var interactionEndCallback = function interactionEndCallback() {
    handle.active = false;
    _store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isToolLocked = false;
    element.removeEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.IMAGE_RENDERED, imageRenderedHandler);
    element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MOUSE_DRAG, _dragCallback);
    element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MOUSE_UP, interactionEndCallback);
    element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MOUSE_CLICK, interactionEndCallback);
    element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_DRAG, _dragCallback);
    element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_DRAG_END, interactionEndCallback);
    element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TAP, interactionEndCallback);
    _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element);

    if (typeof doneMovingCallback === 'function') {
      doneMovingCallback();
    }
  };

  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MOUSE_UP, interactionEndCallback);
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MOUSE_CLICK, interactionEndCallback);
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_DRAG_END, interactionEndCallback);
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TAP, interactionEndCallback);
});

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/moveHandle/moveLongLine/moveLongLine.js":
/*!************************************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/moveHandle/moveLongLine/moveLongLine.js ***!
  \************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1201210__) {

"use strict";
__nested_webpack_require_1201210__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1201210__.d(__nested_webpack_exports__, "default", function() { return moveLongLine; });
/* harmony import */ var _utils_getDistanceWithPixelSpacing_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1201210__(/*! ../../utils/getDistanceWithPixelSpacing.js */ "./tools/annotation/bidirectionalTool/utils/getDistanceWithPixelSpacing.js");
/* harmony import */ var _getBaseData_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1201210__(/*! ../getBaseData.js */ "./tools/annotation/bidirectionalTool/moveHandle/getBaseData.js");
/* harmony import */ var _updatePerpendicularLine_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1201210__(/*! ./updatePerpendicularLine.js */ "./tools/annotation/bidirectionalTool/moveHandle/moveLongLine/updatePerpendicularLine.js");



/**
 * Move the long line updating the perpendicular line handles position.
 *
 * @param {*} proposedPoint Point that was moved in bidirectional tool
 * @param {*} measurementData Data from current bidirectional tool measurement
 * @param {*} eventData Data object associated with the event
 * @param {*} fixedPoint Point that is not being moved in long line
 *
 * @returns {boolean} True if perpendicular handles were updated, false if not
 */

function moveLongLine(proposedPoint, measurementData, eventData, fixedPoint) {
  var baseData = Object(_getBaseData_js__WEBPACK_IMPORTED_MODULE_1__["default"])(measurementData, eventData, fixedPoint);
  var columnPixelSpacing = baseData.columnPixelSpacing,
      rowPixelSpacing = baseData.rowPixelSpacing,
      distanceToFixed = baseData.distanceToFixed; // Calculate the length of the new line, considering the proposed point

  var newLineLength = Object(_utils_getDistanceWithPixelSpacing_js__WEBPACK_IMPORTED_MODULE_0__["default"])(columnPixelSpacing, rowPixelSpacing, fixedPoint, proposedPoint); // Stop here if the handle tries to move before the intersection point

  if (newLineLength <= distanceToFixed) {
    return false;
  } // Calculate the new intersection point


  var distanceRatio = distanceToFixed / newLineLength;
  var newIntersection = {
    x: fixedPoint.x + (proposedPoint.x - fixedPoint.x) * distanceRatio,
    y: fixedPoint.y + (proposedPoint.y - fixedPoint.y) * distanceRatio
  }; // Calculate and the new position of the perpendicular handles

  var newLine = Object(_updatePerpendicularLine_js__WEBPACK_IMPORTED_MODULE_2__["default"])(baseData, newIntersection); // Update the perpendicular line handles

  measurementData.handles.perpendicularStart.x = newLine.start.x;
  measurementData.handles.perpendicularStart.y = newLine.start.y;
  measurementData.handles.perpendicularEnd.x = newLine.end.x;
  measurementData.handles.perpendicularEnd.y = newLine.end.y;
  return true;
}

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/moveHandle/moveLongLine/updatePerpendicularLine.js":
/*!***********************************************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/moveHandle/moveLongLine/updatePerpendicularLine.js ***!
  \***********************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1204520__) {

"use strict";
__nested_webpack_require_1204520__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1204520__.d(__nested_webpack_exports__, "default", function() { return updatePerpendicularLine; });
/* harmony import */ var _utils_getLineVector__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1204520__(/*! ../../utils/getLineVector */ "./tools/annotation/bidirectionalTool/utils/getLineVector.js");
/* harmony import */ var _utils_getDistanceWithPixelSpacing__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1204520__(/*! ../../utils/getDistanceWithPixelSpacing */ "./tools/annotation/bidirectionalTool/utils/getDistanceWithPixelSpacing.js");


/**
 * Returns the updated line object that will be used to change the position of
 * the perpendicular line handles.
 *
 * @param {*} baseData Base data for bidirectional line moving
 * @param {*} mid Middle point considering the proposed point
 *
 * @returns {*} Returns a line object with the updated handles position
 */

function updatePerpendicularLine(baseData, mid) {
  var columnPixelSpacing = baseData.columnPixelSpacing,
      rowPixelSpacing = baseData.rowPixelSpacing,
      start = baseData.start,
      perpendicularStart = baseData.perpendicularStart,
      perpendicularEnd = baseData.perpendicularEnd,
      intersection = baseData.intersection,
      fixedPoint = baseData.fixedPoint; // Get the original distance from perpendicular start handle to intersection

  var distancePS = Object(_utils_getDistanceWithPixelSpacing__WEBPACK_IMPORTED_MODULE_1__["default"])(columnPixelSpacing, rowPixelSpacing, perpendicularStart, intersection); // Get the original distance from perpendicular end handle to intersection

  var distancePE = Object(_utils_getDistanceWithPixelSpacing__WEBPACK_IMPORTED_MODULE_1__["default"])(columnPixelSpacing, rowPixelSpacing, perpendicularEnd, intersection); // Inclination of the perpendicular line

  var vector = Object(_utils_getLineVector__WEBPACK_IMPORTED_MODULE_0__["default"])(columnPixelSpacing, rowPixelSpacing, fixedPoint, mid); // Define the multiplier

  var multiplier = fixedPoint === start ? 1 : -1;
  var rowMultiplier = multiplier * rowPixelSpacing;
  var columnMultiplier = multiplier * columnPixelSpacing; // Calculate and return the new position of the perpendicular handles

  return {
    start: {
      x: mid.x + vector.y * distancePS * rowMultiplier,
      y: mid.y + vector.x * distancePS * columnMultiplier * -1
    },
    end: {
      x: mid.x + vector.y * distancePE * rowMultiplier * -1,
      y: mid.y + vector.x * distancePE * columnMultiplier
    }
  };
}

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getDirectionMultiplier.js":
/*!*******************************************************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getDirectionMultiplier.js ***!
  \*******************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1207624__) {

"use strict";
__nested_webpack_require_1207624__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1207624__.d(__nested_webpack_exports__, "default", function() { return getDirectionMultiplier; });
/* harmony import */ var _isPerpendicularEndFixed_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1207624__(/*! ./isPerpendicularEndFixed.js */ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/isPerpendicularEndFixed.js");

/**
 * Return the direction multiplier based on the perpendicular fixed point and
 * the end point.
 *
 * @param {*} fixedPoint Point that is not being moved in perpendicular line
 * @param {*} perpendicularEnd The end point of the perpencular line
 *
 * @returns {number} Returns -1 if end point is not being moved or 1 if it is
 */

function getDirectionMultiplier(fixedPoint, perpendicularEnd) {
  return Object(_isPerpendicularEndFixed_js__WEBPACK_IMPORTED_MODULE_0__["default"])(fixedPoint, perpendicularEnd) ? -1 : 1;
}

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getHelperLine.js":
/*!**********************************************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getHelperLine.js ***!
  \**********************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1209092__) {

"use strict";
__nested_webpack_require_1209092__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1209092__.d(__nested_webpack_exports__, "default", function() { return getHelperLine; });
/* harmony import */ var _getDirectionMultiplier__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1209092__(/*! ./getDirectionMultiplier */ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getDirectionMultiplier.js");

/**
 * Creates a helper line with the same inclination as the perpendicular line
 * but having the start point as the proposed point.
 * This line will start in the proposed point and will grow in the long line
 * direction trying to cross it to enable finding the intersection point
 * between the long line and this new perpendicular line.
 *
 * @param {*} baseData Base data for bidirectional line moving
 * @param {*} proposedPoint Point that was moved in bidirectional tool
 * @param {*} vector Vector with the perpendicular line inclination
 *
 * @returns {*} Returns the helper line containing the start and end points
 */

function getHelperLine(baseData, proposedPoint, vector) {
  var columnPixelSpacing = baseData.columnPixelSpacing,
      rowPixelSpacing = baseData.rowPixelSpacing,
      perpendicularEnd = baseData.perpendicularEnd,
      fixedPoint = baseData.fixedPoint; // Create a helper line to find the intesection point in the long line

  var highNumber = Number.MAX_SAFE_INTEGER; // Get the multiplier

  var multiplier = Object(_getDirectionMultiplier__WEBPACK_IMPORTED_MODULE_0__["default"])(fixedPoint, perpendicularEnd) * highNumber;
  return {
    start: proposedPoint,
    end: {
      x: proposedPoint.x + vector.y * rowPixelSpacing * multiplier,
      y: proposedPoint.y + vector.x * columnPixelSpacing * multiplier * -1
    }
  };
}

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getMovingPoint.js":
/*!***********************************************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getMovingPoint.js ***!
  \***********************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1211385__) {

"use strict";
__nested_webpack_require_1211385__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1211385__.d(__nested_webpack_exports__, "default", function() { return getMovingPoint; });
/* harmony import */ var _isPerpendicularEndFixed_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1211385__(/*! ./isPerpendicularEndFixed.js */ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/isPerpendicularEndFixed.js");

/**
 * Utility function to return the point that is the opposite of the fixed
 * point (the point not being moved in the bidirectional tool's perpendicular
 * line).
 *
 * @param {*} fixedPoint Point that is not being moved in perpendicular line
 * @param {*} perpendicularStart The start point of the perpencular line
 * @param {*} perpendicularEnd The end point of the perpencular line
 *
 * @returns {*} Point that is being moved in perpendicular line
 */

function getMovingPoint(fixedPoint, perpendicularStart, perpendicularEnd) {
  if (Object(_isPerpendicularEndFixed_js__WEBPACK_IMPORTED_MODULE_0__["default"])(fixedPoint, perpendicularEnd)) {
    return perpendicularStart;
  }

  return perpendicularEnd;
}

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/isPerpendicularEndFixed.js":
/*!********************************************************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/isPerpendicularEndFixed.js ***!
  \********************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1213075__) {

"use strict";
__nested_webpack_require_1213075__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1213075__.d(__nested_webpack_exports__, "default", function() { return isPerpendicularEndFixed; });
/**
 * Returns true if the end point is the point that is not being moved in the
 * perpendicular line.
 *
 * @param {*} fixedPoint Point that is not being moved in perpendicular line
 * @param {*} perpendicularEnd The end point of the perpencular line
 *
 * @returns {boolean} Returns true if the fixed point is the end point
 */
function isPerpendicularEndFixed(fixedPoint, perpendicularEnd) {
  return fixedPoint === perpendicularEnd;
}

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/lineHasLength.js":
/*!**********************************************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/lineHasLength.js ***!
  \**********************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1214216__) {

"use strict";
__nested_webpack_require_1214216__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1214216__.d(__nested_webpack_exports__, "default", function() { return lineHasLength; });
/* harmony import */ var _utils_getDistanceWithPixelSpacing__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1214216__(/*! ../../utils/getDistanceWithPixelSpacing */ "./tools/annotation/bidirectionalTool/utils/getDistanceWithPixelSpacing.js");

/**
 * Returns true if the given line object has its length different from zero,
 * considering the column and row pixel spacings.
 *
 * @param {number} columnPixelSpacing Width that a pixel represents in mm
 * @param {number} rowPixelSpacing Height that a pixel represents in mm
 * @param {*} line Line object that will have its length calculated
 *
 * @returns {boolean} Returns true if line has any length
 */

function lineHasLength(columnPixelSpacing, rowPixelSpacing, line) {
  var lineLength = Object(_utils_getDistanceWithPixelSpacing__WEBPACK_IMPORTED_MODULE_0__["default"])(columnPixelSpacing, rowPixelSpacing, line.start, line.end);
  return lineLength !== 0;
}

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/movePerpendicularLine.js":
/*!******************************************************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/movePerpendicularLine.js ***!
  \******************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1215849__) {

"use strict";
__nested_webpack_require_1215849__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1215849__.d(__nested_webpack_exports__, "default", function() { return movePerpendicularLine; });
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1215849__(/*! ./../../../../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _utils_getLineVector_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1215849__(/*! ../../utils/getLineVector.js */ "./tools/annotation/bidirectionalTool/utils/getLineVector.js");
/* harmony import */ var _getBaseData_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1215849__(/*! ../getBaseData.js */ "./tools/annotation/bidirectionalTool/moveHandle/getBaseData.js");
/* harmony import */ var _lineHasLength_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1215849__(/*! ./lineHasLength.js */ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/lineHasLength.js");
/* harmony import */ var _getHelperLine_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1215849__(/*! ./getHelperLine.js */ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getHelperLine.js");
/* harmony import */ var _updatePerpendicularLine_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1215849__(/*! ./updatePerpendicularLine.js */ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/updatePerpendicularLine.js");






/**
 * Move the perpendicular line updating the opposite handle position.
 *
 * @param {*} proposedPoint Point that was moved in bidirectional tool
 * @param {*} measurementData Data from current bidirectional tool measurement
 * @param {*} eventData Data object associated with the event
 * @param {*} fixedPoint Point that is not being moved in long line
 *
 * @returns {boolean} True if perpendicular handles were updated, false if not
 */

function movePerpendicularLine(proposedPoint, measurementData, eventData, fixedPoint) {
  var lineSegment = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.lineSegment;
  var baseData = Object(_getBaseData_js__WEBPACK_IMPORTED_MODULE_2__["default"])(measurementData, eventData, fixedPoint);
  var columnPixelSpacing = baseData.columnPixelSpacing,
      rowPixelSpacing = baseData.rowPixelSpacing,
      start = baseData.start,
      longLine = baseData.longLine,
      intersection = baseData.intersection; // Stop here if the long line has no length

  if (!Object(_lineHasLength_js__WEBPACK_IMPORTED_MODULE_3__["default"])(columnPixelSpacing, rowPixelSpacing, longLine)) {
    return false;
  } // Inclination of the perpendicular line


  var vector = Object(_utils_getLineVector_js__WEBPACK_IMPORTED_MODULE_1__["default"])(columnPixelSpacing, rowPixelSpacing, start, intersection); // Get a helper line to calculate the intersection

  var helperLine = Object(_getHelperLine_js__WEBPACK_IMPORTED_MODULE_4__["default"])(baseData, proposedPoint, vector); // Find the new intersection in the long line

  var newIntersection = lineSegment.intersectLine(longLine, helperLine); // Stop the flow here if there's no intersection point between lines

  if (!newIntersection) {
    return false;
  } // Calculate and the new position of the perpendicular handles


  var newLine = Object(_updatePerpendicularLine_js__WEBPACK_IMPORTED_MODULE_5__["default"])(baseData, newIntersection, helperLine, vector); // Change the position of the perpendicular line handles

  measurementData.handles.perpendicularStart.x = newLine.start.x;
  measurementData.handles.perpendicularStart.y = newLine.start.y;
  measurementData.handles.perpendicularEnd.x = newLine.end.x;
  measurementData.handles.perpendicularEnd.y = newLine.end.y;
  return true;
}

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/updatePerpendicularLine.js":
/*!********************************************************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/updatePerpendicularLine.js ***!
  \********************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1220108__) {

"use strict";
__nested_webpack_require_1220108__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1220108__.d(__nested_webpack_exports__, "default", function() { return updatePerpendicularLine; });
/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1220108__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1220108__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _getDirectionMultiplier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1220108__(/*! ./getDirectionMultiplier */ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getDirectionMultiplier.js");
/* harmony import */ var _getMovingPoint__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1220108__(/*! ./getMovingPoint */ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getMovingPoint.js");



/**
 * Returns the updated line object that will be used to change the position of
 * the perpendicular line handles.
 *
 * @param {*} baseData Base data for bidirectional line moving
 * @param {*} mid Middle point considering the proposed point
 * @param {*} helperLine Line based on proposed point that crosses long line
 * @param {*} vector Vector with the perpendicular line inclination
 *
 * @returns {*} Returns a line object with the updated handles position
 */

function updatePerpendicularLine(baseData, mid, helperLine, vector) {
  var _ref;

  var columnPixelSpacing = baseData.columnPixelSpacing,
      rowPixelSpacing = baseData.rowPixelSpacing,
      fixedPoint = baseData.fixedPoint,
      perpendicularStart = baseData.perpendicularStart,
      perpendicularEnd = baseData.perpendicularEnd,
      distanceToFixed = baseData.distanceToFixed; // Get the multiplier

  var multiplier = Object(_getDirectionMultiplier__WEBPACK_IMPORTED_MODULE_1__["default"])(fixedPoint, perpendicularEnd) * distanceToFixed; // Define the moving point

  var movingPoint = Object(_getMovingPoint__WEBPACK_IMPORTED_MODULE_2__["default"])(fixedPoint, perpendicularStart, perpendicularEnd); // Get the object keys for moving and fixed points

  var isMovingStart = movingPoint === perpendicularStart;
  var movingKey = isMovingStart ? 'start' : 'end';
  var fixedKey = isMovingStart ? 'end' : 'start'; // Calculate and return the new position of the perpendicular handles

  return _ref = {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_ref, movingKey, {
    x: helperLine.start.x,
    y: helperLine.start.y
  }), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_ref, fixedKey, {
    x: mid.x + vector.y * rowPixelSpacing * multiplier,
    y: mid.y + vector.x * columnPixelSpacing * multiplier * -1
  }), _ref;
}

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/moveHandle/setHandlesPosition.js":
/*!*****************************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/moveHandle/setHandlesPosition.js ***!
  \*****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1223479__) {

"use strict";
__nested_webpack_require_1223479__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1223479__(/*! ./../../../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _moveLongLine_moveLongLine_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1223479__(/*! ./moveLongLine/moveLongLine.js */ "./tools/annotation/bidirectionalTool/moveHandle/moveLongLine/moveLongLine.js");
/* harmony import */ var _movePerpendicularLine_movePerpendicularLine_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1223479__(/*! ./movePerpendicularLine/movePerpendicularLine.js */ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/movePerpendicularLine.js");


 // Sets position of handles(start, end, perpendicularStart, perpendicularEnd)

/* harmony default export */ __nested_webpack_exports__["default"] = (function (handle, eventData, data, distanceFromTool) {
  var movedPoint;
  var outOfBounds;
  var result;
  var intersection;
  var d1;
  var d2;
  var longLine = {};
  var perpendicularLine = {};
  var proposedPoint = {
    x: eventData.currentPoints.image.x + distanceFromTool.x,
    y: eventData.currentPoints.image.y + distanceFromTool.y
  };

  if (handle.index === 0) {
    // If long-axis start point is moved
    result = Object(_moveLongLine_moveLongLine_js__WEBPACK_IMPORTED_MODULE_1__["default"])(proposedPoint, data, eventData, data.handles.end);

    if (result) {
      handle.x = proposedPoint.x;
      handle.y = proposedPoint.y;
    } else {
      eventData.currentPoints.image.x = handle.x;
      eventData.currentPoints.image.y = handle.y;
    }
  } else if (handle.index === 1) {
    // If long-axis end point is moved
    result = Object(_moveLongLine_moveLongLine_js__WEBPACK_IMPORTED_MODULE_1__["default"])(proposedPoint, data, eventData, data.handles.start);

    if (result) {
      handle.x = proposedPoint.x;
      handle.y = proposedPoint.y;
    } else {
      eventData.currentPoints.image.x = handle.x;
      eventData.currentPoints.image.y = handle.y;
    }
  } else if (handle.index === 2) {
    outOfBounds = false; // If perpendicular start point is moved

    longLine.start = {
      x: data.handles.start.x,
      y: data.handles.start.y
    };
    longLine.end = {
      x: data.handles.end.x,
      y: data.handles.end.y
    };
    perpendicularLine.start = {
      x: data.handles.perpendicularEnd.x,
      y: data.handles.perpendicularEnd.y
    };
    perpendicularLine.end = {
      x: proposedPoint.x,
      y: proposedPoint.y
    };
    intersection = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.lineSegment.intersectLine(longLine, perpendicularLine);

    if (!intersection) {
      perpendicularLine.end = {
        x: data.handles.perpendicularStart.x,
        y: data.handles.perpendicularStart.y
      };
      intersection = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.lineSegment.intersectLine(longLine, perpendicularLine);
      d1 = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.distance(intersection, data.handles.start);
      d2 = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.distance(intersection, data.handles.end);

      if (!intersection || d1 < 3 || d2 < 3) {
        outOfBounds = true;
      }
    }

    movedPoint = false;

    if (!outOfBounds) {
      movedPoint = Object(_movePerpendicularLine_movePerpendicularLine_js__WEBPACK_IMPORTED_MODULE_2__["default"])(proposedPoint, data, eventData, data.handles.perpendicularEnd);

      if (!movedPoint) {
        eventData.currentPoints.image.x = data.handles.perpendicularStart.x;
        eventData.currentPoints.image.y = data.handles.perpendicularStart.y;
      }
    }
  } else if (handle.index === 3) {
    outOfBounds = false; // If perpendicular end point is moved

    longLine.start = {
      x: data.handles.start.x,
      y: data.handles.start.y
    };
    longLine.end = {
      x: data.handles.end.x,
      y: data.handles.end.y
    };
    perpendicularLine.start = {
      x: data.handles.perpendicularStart.x,
      y: data.handles.perpendicularStart.y
    };
    perpendicularLine.end = {
      x: proposedPoint.x,
      y: proposedPoint.y
    };
    intersection = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.lineSegment.intersectLine(longLine, perpendicularLine);

    if (!intersection) {
      perpendicularLine.end = {
        x: data.handles.perpendicularEnd.x,
        y: data.handles.perpendicularEnd.y
      };
      intersection = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.lineSegment.intersectLine(longLine, perpendicularLine);
      d1 = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.distance(intersection, data.handles.start);
      d2 = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.distance(intersection, data.handles.end);

      if (!intersection || d1 < 3 || d2 < 3) {
        outOfBounds = true;
      }
    }

    movedPoint = false;

    if (!outOfBounds) {
      movedPoint = Object(_movePerpendicularLine_movePerpendicularLine_js__WEBPACK_IMPORTED_MODULE_2__["default"])(proposedPoint, data, eventData, data.handles.perpendicularStart);

      if (!movedPoint) {
        eventData.currentPoints.image.x = data.handles.perpendicularEnd.x;
        eventData.currentPoints.image.y = data.handles.perpendicularEnd.y;
      }
    }
  }
});

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/moveHandle/touchMoveHandle.js":
/*!**************************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/moveHandle/touchMoveHandle.js ***!
  \**************************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1229439__) {

"use strict";
__nested_webpack_require_1229439__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1229439__(/*! ./../../../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1229439__(/*! ../../../../store/index.js */ "./store/index.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1229439__(/*! ./../../../../events.js */ "./events.js");
/* harmony import */ var _setHandlesPosition_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1229439__(/*! ./setHandlesPosition.js */ "./tools/annotation/bidirectionalTool/moveHandle/setHandlesPosition.js");
/* harmony import */ var _util_getActiveTool__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1229439__(/*! ../../../../util/getActiveTool */ "./util/getActiveTool.js");
/* harmony import */ var _base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1229439__(/*! ../../../base/BaseAnnotationTool */ "./tools/base/BaseAnnotationTool.js");






var touchEndEvents = [_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_END, _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_DRAG_END, _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_PINCH, _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_PRESS, _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TAP];
/* harmony default export */ __nested_webpack_exports__["default"] = (function (mouseEventData, toolName, data, handle, doneMovingCallback, preventHandleOutsideImage) {
  var element = mouseEventData.element,
      image = mouseEventData.image,
      buttons = mouseEventData.buttons;
  var distanceFromTool = {
    x: handle.x - mouseEventData.currentPoints.image.x,
    y: handle.y - mouseEventData.currentPoints.image.y
  };

  var touchDragCallback = function touchDragCallback(event) {
    var eventData = event.detail;
    handle.hasMoved = true;

    if (handle.index === undefined || handle.index === null) {
      handle.x = eventData.currentPoints.image.x + distanceFromTool.x;
      handle.y = eventData.currentPoints.image.y + distanceFromTool.y;
    } else {
      Object(_setHandlesPosition_js__WEBPACK_IMPORTED_MODULE_3__["default"])(handle, eventData, data, distanceFromTool);
    }

    if (preventHandleOutsideImage) {
      handle.x = Math.max(handle.x, 0);
      handle.x = Math.min(handle.x, eventData.image.width);
      handle.y = Math.max(handle.y, 0);
      handle.y = Math.min(handle.y, eventData.image.height);
    }

    data.invalidated = true;
    _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element);
    var activeTool = Object(_util_getActiveTool__WEBPACK_IMPORTED_MODULE_4__["default"])(element, buttons, 'touch');

    if (activeTool instanceof _base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_5__["default"]) {
      activeTool.updateCachedStats(image, element, data);
    }

    var modifiedEventData = {
      toolName: toolName,
      toolType: toolName,
      // Deprecation notice: toolType will be replaced by toolName
      element: element,
      measurementData: data
    };
    _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.triggerEvent(element, _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MEASUREMENT_MODIFIED, modifiedEventData);
  };

  handle.active = true;
  _store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isToolLocked = true;
  element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_DRAG, touchDragCallback);

  var touchEndCallback = function touchEndCallback() {
    handle.active = false;
    _store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isToolLocked = false;
    element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_DRAG, touchDragCallback);
    touchEndEvents.forEach(function (eventType) {
      element.removeEventListener(eventType, touchEndCallback);
    });
    _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element);

    if (typeof doneMovingCallback === 'function') {
      doneMovingCallback();
    }
  };

  touchEndEvents.forEach(function (eventType) {
    element.addEventListener(eventType, touchEndCallback);
  });
});

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/pointNearTool.js":
/*!*************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/pointNearTool.js ***!
  \*************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1234074__) {

"use strict";
__nested_webpack_require_1234074__.r(__nested_webpack_exports__);
/* harmony import */ var _util_getProximityThreshold_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1234074__(/*! ../../../util/getProximityThreshold.js */ "./util/getProximityThreshold.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1234074__(/*! ./../../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1234074__(/*! ./../../../util/pointInsideBoundingBox.js */ "./util/pointInsideBoundingBox.js");




var pointNearPerpendicular = function pointNearPerpendicular(element, handles, coords, distanceThreshold) {
  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone;
  var cornerstoneMath = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath;
  var lineSegment = {
    start: cornerstone.pixelToCanvas(element, handles.perpendicularStart),
    end: cornerstone.pixelToCanvas(element, handles.perpendicularEnd)
  };
  var distanceToPoint = cornerstoneMath.lineSegment.distanceToPoint(lineSegment, coords);
  return distanceToPoint < distanceThreshold;
};

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, data, coords) {
  var interactionType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'mouse';
  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone;
  var cornerstoneMath = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath;
  var handles = data.handles;
  var lineSegment = {
    start: cornerstone.pixelToCanvas(element, handles.start),
    end: cornerstone.pixelToCanvas(element, handles.end)
  };
  var distanceToPoint = cornerstoneMath.lineSegment.distanceToPoint(lineSegment, coords);

  if (Object(_util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_2__["default"])(handles.textBox, coords)) {
    return true;
  }

  var distanceThreshold = Object(_util_getProximityThreshold_js__WEBPACK_IMPORTED_MODULE_0__["default"])(interactionType, 'Bidirectional');

  if (pointNearPerpendicular(element, handles, coords, distanceThreshold)) {
    return true;
  }

  return distanceToPoint < distanceThreshold;
});

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/renderToolData.js":
/*!**************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/renderToolData.js ***!
  \**************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1236758__) {

"use strict";
__nested_webpack_require_1236758__.r(__nested_webpack_exports__);
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1236758__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1236758__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1236758__(/*! ./../../../drawing/drawHandles.js */ "./drawing/drawHandles.js");
/* harmony import */ var _utils_updatePerpendicularLineHandles_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1236758__(/*! ./utils/updatePerpendicularLineHandles.js */ "./tools/annotation/bidirectionalTool/utils/updatePerpendicularLineHandles.js");
/* harmony import */ var _store_index__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1236758__(/*! ../../../store/index */ "./store/index.js");
/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1236758__(/*! ./../../../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js");
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1236758__(/*! ./../../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1236758__(/*! ./../../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1236758__(/*! ./../../../drawing/index.js */ "./drawing/index.js");
/* harmony import */ var _drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1236758__(/*! ./../../../drawing/drawLinkedTextBox.js */ "./drawing/drawLinkedTextBox.js");
/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1236758__(/*! ../../../util/getPixelSpacing */ "./util/getPixelSpacing.js");


/* eslint no-loop-func: 0 */
// --> OFF









/* harmony default export */ __nested_webpack_exports__["default"] = (function (evt) {
  var _this = this;

  var eventData = evt.detail;
  var element = eventData.element,
      canvasContext = eventData.canvasContext,
      image = eventData.image;
  var _this$configuration = this.configuration,
      handleRadius = _this$configuration.handleRadius,
      drawHandlesOnHover = _this$configuration.drawHandlesOnHover,
      hideHandlesIfMoving = _this$configuration.hideHandlesIfMoving,
      renderDashed = _this$configuration.renderDashed;
  var lineDash = Object(_store_index__WEBPACK_IMPORTED_MODULE_3__["getModule"])('globalConfiguration').configuration.lineDash; // If we have no toolData for this element, return immediately as there is nothing to do

  var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_6__["getToolState"])(element, this.name);

  if (!toolData) {
    return;
  }

  var _getPixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_9__["default"])(image),
      rowPixelSpacing = _getPixelSpacing.rowPixelSpacing,
      colPixelSpacing = _getPixelSpacing.colPixelSpacing; // LT-29 Disable Target Measurements when pixel spacing is not available


  if (!rowPixelSpacing || !colPixelSpacing) {
    return;
  } // We have tool data for this element - iterate over each one and draw it


  var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["getNewContext"])(canvasContext.canvas);
  var color;
  var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_4__["default"].getToolWidth();

  var _loop = function _loop(i) {
    var data = toolData.data[i];

    if (data.visible === false) {
      return "continue";
    }

    color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_5__["default"].getColorIfActive(data); // Calculate the data measurements

    if (data.invalidated === true) {
      if (data.longestDiameter && data.shortestDiameter) {
        _this.throttledUpdateCachedStats(image, element, data);
      } else {
        _this.updateCachedStats(image, element, data);
      }
    }

    Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["draw"])(context, function (context) {
      // Configurable shadow
      Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["setShadow"])(context, _this.configuration);
      var _data$handles = data.handles,
          start = _data$handles.start,
          end = _data$handles.end,
          perpendicularStart = _data$handles.perpendicularStart,
          perpendicularEnd = _data$handles.perpendicularEnd,
          textBox = _data$handles.textBox;
      var lineOptions = {
        color: color
      };
      var perpendicularLineOptions = {
        color: color,
        strokeWidth: strokeWidth
      };

      if (renderDashed) {
        lineOptions.lineDash = lineDash;
        perpendicularLineOptions.lineDash = lineDash;
      } // Draw the measurement line


      Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawLine"])(context, element, start, end, lineOptions); // Draw perpendicular line

      var strokeWidth = lineWidth;
      Object(_utils_updatePerpendicularLineHandles_js__WEBPACK_IMPORTED_MODULE_2__["default"])(eventData, data);
      Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawLine"])(context, element, perpendicularStart, perpendicularEnd, perpendicularLineOptions); // Draw the handles

      var handleOptions = {
        color: color,
        handleRadius: handleRadius,
        drawHandlesIfActive: drawHandlesOnHover,
        hideHandlesIfMoving: hideHandlesIfMoving
      }; // Draw the handles

      if (_this.configuration.drawHandles) {
        Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, eventData, data.handles, handleOptions);
      } // Draw the textbox
      // Move the textbox slightly to the right and upwards
      // So that it sits beside the length tool handle


      var xOffset = 10;

      var textBoxAnchorPoints = function textBoxAnchorPoints(handles) {
        return [handles.start, handles.end, handles.perpendicularStart, handles.perpendicularEnd];
      };

      var textLines = getTextBoxText(data, rowPixelSpacing, colPixelSpacing);
      Object(_drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_8__["default"])(context, element, textBox, textLines, data.handles, textBoxAnchorPoints, color, lineWidth, xOffset, true);
    });
  };

  for (var i = 0; i < toolData.data.length; i++) {
    var _ret = _loop(i);

    if (_ret === "continue") continue;
  }
});

var getTextBoxText = function getTextBoxText(data, rowPixelSpacing, colPixelSpacing) {
  var suffix = ' mm';

  if (!rowPixelSpacing || !colPixelSpacing) {
    suffix = ' pixels';
  }

  var lengthText = " L ".concat(data.longestDiameter).concat(suffix);
  var widthText = " W ".concat(data.shortestDiameter).concat(suffix);
  var labels = data.labels;

  if (labels && Array.isArray(labels)) {
    return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(labels), [lengthText, widthText]);
  }

  return [lengthText, widthText];
};

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/utils/calculateLongestAndShortestDiameters.js":
/*!******************************************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/utils/calculateLongestAndShortestDiameters.js ***!
  \******************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1244549__) {

"use strict";
__nested_webpack_require_1244549__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1244549__.d(__nested_webpack_exports__, "default", function() { return calculateLongestAndShortestDiameters; });
/**
 * Calculates longest and shortest diameters using measurement handles and pixelSpacing
 * @param  {Object} measurementData
 * @param {Object} pixelSpacing pixelSpacing
 *
 *@returns {Object} longestDiameter and shortestDiameter
 */
function calculateLongestAndShortestDiameters(measurementData, pixelSpacing) {
  var rowPixelSpacing = pixelSpacing.rowPixelSpacing,
      colPixelSpacing = pixelSpacing.colPixelSpacing;
  var _measurementData$hand = measurementData.handles,
      start = _measurementData$hand.start,
      end = _measurementData$hand.end,
      perpendicularStart = _measurementData$hand.perpendicularStart,
      perpendicularEnd = _measurementData$hand.perpendicularEnd; // Calculate the long axis length

  var dx = (start.x - end.x) * (colPixelSpacing || 1);
  var dy = (start.y - end.y) * (rowPixelSpacing || 1);
  var length = Math.sqrt(dx * dx + dy * dy); // Calculate the short axis length

  var wx = (perpendicularStart.x - perpendicularEnd.x) * (colPixelSpacing || 1);
  var wy = (perpendicularStart.y - perpendicularEnd.y) * (rowPixelSpacing || 1);
  var width = Math.sqrt(wx * wx + wy * wy);

  if (!width) {
    width = 0;
  } // Length is always longer than width


  if (width > length) {
    var tempW = width;
    var tempL = length;
    length = tempW;
    width = tempL;
  }

  return {
    longestDiameter: length.toFixed(1),
    shortestDiameter: width.toFixed(1)
  };
}

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/utils/getDistanceWithPixelSpacing.js":
/*!*********************************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/utils/getDistanceWithPixelSpacing.js ***!
  \*********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1246626__) {

"use strict";
__nested_webpack_require_1246626__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1246626__.d(__nested_webpack_exports__, "default", function() { return getDistanceWithPixelSpacing; });
/**
 * Return the distance between 2 points considering the pixel spacing
 *
 * @param {number} columnPixelSpacing Width that a pixel represents in mm
 * @param {number} rowPixelSpacing Height that a pixel represents in mm
 * @param {*} startPoint Start point of the line
 * @param {*} endPoint End point of the line
 *
 * @returns {number} Distance between the 2 given points considering the pixel spacing
 */
function getDistanceWithPixelSpacing(columnPixelSpacing, rowPixelSpacing, startPoint, endPoint) {
  var calcX = (startPoint.x - endPoint.x) / rowPixelSpacing;
  var calcY = (startPoint.y - endPoint.y) / columnPixelSpacing;
  return Math.sqrt(calcX * calcX + calcY * calcY);
}

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/utils/getLineVector.js":
/*!*******************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/utils/getLineVector.js ***!
  \*******************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1247910__) {

"use strict";
__nested_webpack_require_1247910__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1247910__.d(__nested_webpack_exports__, "default", function() { return getLineVector; });
/**
 * Return the Vector of a line which determines its inclination and length
 *
 * @param {number} columnPixelSpacing Width that a pixel represents in mm
 * @param {number} rowPixelSpacing Height that a pixel represents in mm
 * @param {*} startPoint Start point of the line
 * @param {*} endPoint End point of the line
 *
 * @returns {*} Resulting line inclination vector
 */
function getLineVector(columnPixelSpacing, rowPixelSpacing, startPoint, endPoint) {
  var dx = (startPoint.x - endPoint.x) * columnPixelSpacing;
  var dy = (startPoint.y - endPoint.y) * rowPixelSpacing;
  var length = Math.sqrt(dx * dx + dy * dy);
  var vectorX = dx / length;
  var vectorY = dy / length;
  return {
    x: vectorX,
    y: vectorY,
    length: length
  };
}

/***/ }),

/***/ "./tools/annotation/bidirectionalTool/utils/updatePerpendicularLineHandles.js":
/*!************************************************************************************!*\
  !*** ./tools/annotation/bidirectionalTool/utils/updatePerpendicularLineHandles.js ***!
  \************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1249315__) {

"use strict";
__nested_webpack_require_1249315__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1249315__.d(__nested_webpack_exports__, "default", function() { return updatePerpendicularLineHandles; });
/* harmony import */ var _getLineVector__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1249315__(/*! ./getLineVector */ "./tools/annotation/bidirectionalTool/utils/getLineVector.js");

/**
 * Update the perpendicular line handles when the measurement is being created.
 * This method will make the perpendicular line intersect in the middle of the
 * long line and assume half the size of the long line.
 *
 * @param {*} eventData Data object associated with the event
 * @param {*} measurementData Data from current bidirectional tool measurement
 *
 * @returns {boolean} False in case the handle is not locked or true when moved
 */

function updatePerpendicularLineHandles(eventData, measurementData) {
  if (!measurementData.handles.perpendicularStart.locked) {
    return false;
  }

  var startX, startY, endX, endY;
  var _measurementData$hand = measurementData.handles,
      start = _measurementData$hand.start,
      end = _measurementData$hand.end;
  var _eventData$image = eventData.image,
      _eventData$image$colu = _eventData$image.columnPixelSpacing,
      columnPixelSpacing = _eventData$image$colu === void 0 ? 1 : _eventData$image$colu,
      _eventData$image$rowP = _eventData$image.rowPixelSpacing,
      rowPixelSpacing = _eventData$image$rowP === void 0 ? 1 : _eventData$image$rowP;

  if (start.x === end.x && start.y === end.y) {
    startX = start.x;
    startY = start.y;
    endX = end.x;
    endY = end.y;
  } else {
    // Mid point of long-axis line
    var mid = {
      x: (start.x + end.x) / 2,
      y: (start.y + end.y) / 2
    }; // Inclination of the perpendicular line

    var vector = Object(_getLineVector__WEBPACK_IMPORTED_MODULE_0__["default"])(columnPixelSpacing, rowPixelSpacing, start, end);
    var perpendicularLineLength = vector.length / 2;
    var rowMultiplier = perpendicularLineLength / (2 * rowPixelSpacing);
    var columnMultiplier = perpendicularLineLength / (2 * columnPixelSpacing);
    startX = mid.x + columnMultiplier * vector.y;
    startY = mid.y - rowMultiplier * vector.x;
    endX = mid.x - columnMultiplier * vector.y;
    endY = mid.y + rowMultiplier * vector.x;
  }

  measurementData.handles.perpendicularStart.x = startX;
  measurementData.handles.perpendicularStart.y = startY;
  measurementData.handles.perpendicularEnd.x = endX;
  measurementData.handles.perpendicularEnd.y = endY;
  return true;
}

/***/ }),

/***/ "./tools/annotation/index.js":
/*!***********************************!*\
  !*** ./tools/annotation/index.js ***!
  \***********************************/
/*! exports provided: AngleTool, ArrowAnnotateTool, BidirectionalTool, CircleRoiTool, CobbAngleTool, EllipticalRoiTool, FreehandRoiTool, LengthTool, ProbeTool, RectangleRoiTool, TextMarkerTool, default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1252331__) {

"use strict";
__nested_webpack_require_1252331__.r(__nested_webpack_exports__);
/* harmony import */ var _AngleTool_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1252331__(/*! ./AngleTool.js */ "./tools/annotation/AngleTool.js");
/* harmony import */ var _ArrowAnnotateTool_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1252331__(/*! ./ArrowAnnotateTool.js */ "./tools/annotation/ArrowAnnotateTool.js");
/* harmony import */ var _BidirectionalTool_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1252331__(/*! ./BidirectionalTool.js */ "./tools/annotation/BidirectionalTool.js");
/* harmony import */ var _CircleRoiTool_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1252331__(/*! ./CircleRoiTool.js */ "./tools/annotation/CircleRoiTool.js");
/* harmony import */ var _CobbAngleTool_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1252331__(/*! ./CobbAngleTool.js */ "./tools/annotation/CobbAngleTool.js");
/* harmony import */ var _EllipticalRoiTool_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1252331__(/*! ./EllipticalRoiTool.js */ "./tools/annotation/EllipticalRoiTool.js");
/* harmony import */ var _FreehandRoiTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1252331__(/*! ./FreehandRoiTool.js */ "./tools/annotation/FreehandRoiTool.js");
/* harmony import */ var _LengthTool_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1252331__(/*! ./LengthTool.js */ "./tools/annotation/LengthTool.js");
/* harmony import */ var _ProbeTool_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1252331__(/*! ./ProbeTool.js */ "./tools/annotation/ProbeTool.js");
/* harmony import */ var _RectangleRoiTool_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1252331__(/*! ./RectangleRoiTool.js */ "./tools/annotation/RectangleRoiTool.js");
/* harmony import */ var _TextMarkerTool_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1252331__(/*! ./TextMarkerTool.js */ "./tools/annotation/TextMarkerTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1252331__.d(__nested_webpack_exports__, "AngleTool", function() { return _AngleTool_js__WEBPACK_IMPORTED_MODULE_0__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1252331__.d(__nested_webpack_exports__, "ArrowAnnotateTool", function() { return _ArrowAnnotateTool_js__WEBPACK_IMPORTED_MODULE_1__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1252331__.d(__nested_webpack_exports__, "BidirectionalTool", function() { return _BidirectionalTool_js__WEBPACK_IMPORTED_MODULE_2__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1252331__.d(__nested_webpack_exports__, "CircleRoiTool", function() { return _CircleRoiTool_js__WEBPACK_IMPORTED_MODULE_3__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1252331__.d(__nested_webpack_exports__, "CobbAngleTool", function() { return _CobbAngleTool_js__WEBPACK_IMPORTED_MODULE_4__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1252331__.d(__nested_webpack_exports__, "EllipticalRoiTool", function() { return _EllipticalRoiTool_js__WEBPACK_IMPORTED_MODULE_5__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1252331__.d(__nested_webpack_exports__, "FreehandRoiTool", function() { return _FreehandRoiTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1252331__.d(__nested_webpack_exports__, "LengthTool", function() { return _LengthTool_js__WEBPACK_IMPORTED_MODULE_7__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1252331__.d(__nested_webpack_exports__, "ProbeTool", function() { return _ProbeTool_js__WEBPACK_IMPORTED_MODULE_8__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1252331__.d(__nested_webpack_exports__, "RectangleRoiTool", function() { return _RectangleRoiTool_js__WEBPACK_IMPORTED_MODULE_9__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1252331__.d(__nested_webpack_exports__, "TextMarkerTool", function() { return _TextMarkerTool_js__WEBPACK_IMPORTED_MODULE_10__["default"]; });











 // Named Exports











 // Namespace, default export

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  AngleTool: _AngleTool_js__WEBPACK_IMPORTED_MODULE_0__["default"],
  ArrowAnnotateTool: _ArrowAnnotateTool_js__WEBPACK_IMPORTED_MODULE_1__["default"],
  BidirectionalTool: _BidirectionalTool_js__WEBPACK_IMPORTED_MODULE_2__["default"],
  CircleRoiTool: _CircleRoiTool_js__WEBPACK_IMPORTED_MODULE_3__["default"],
  CobbAngleTool: _CobbAngleTool_js__WEBPACK_IMPORTED_MODULE_4__["default"],
  EllipticalRoiTool: _EllipticalRoiTool_js__WEBPACK_IMPORTED_MODULE_5__["default"],
  FreehandRoiTool: _FreehandRoiTool_js__WEBPACK_IMPORTED_MODULE_6__["default"],
  LengthTool: _LengthTool_js__WEBPACK_IMPORTED_MODULE_7__["default"],
  ProbeTool: _ProbeTool_js__WEBPACK_IMPORTED_MODULE_8__["default"],
  RectangleRoiTool: _RectangleRoiTool_js__WEBPACK_IMPORTED_MODULE_9__["default"],
  TextMarkerTool: _TextMarkerTool_js__WEBPACK_IMPORTED_MODULE_10__["default"]
});

/***/ }),

/***/ "./tools/base/BaseAnnotationTool.js":
/*!******************************************!*\
  !*** ./tools/base/BaseAnnotationTool.js ***!
  \******************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1257390__) {

"use strict";
__nested_webpack_require_1257390__.r(__nested_webpack_exports__);
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1257390__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1257390__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1257390__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_1257390__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1257390__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_1257390__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1257390__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_1257390__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1257390__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_1257390__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _BaseTool_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1257390__(/*! ./BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1257390__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _manipulators_handleActivator_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1257390__(/*! ./../../manipulators/handleActivator.js */ "./manipulators/handleActivator.js");
/* harmony import */ var _util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1257390__(/*! ./../../util/findAndMoveHelpers.js */ "./util/findAndMoveHelpers.js");
/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1257390__(/*! ../../util/logger */ "./util/logger.js");










var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_9__["getLogger"])('baseAnnotationTool');
/**
 * @memberof Tools.Base
 * @classdesc Abstract class for tools which create and display annotations on the
 * cornerstone canvas.
 * @extends Tools.Base.BaseTool
 */

var BaseAnnotationTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(BaseAnnotationTool, _BaseTool);

  function BaseAnnotationTool() {
    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, BaseAnnotationTool);

    return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(BaseAnnotationTool).apply(this, arguments));
  }

  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(BaseAnnotationTool, [{
    key: "createNewMeasurement",
    // ===================================================================
    // Abstract Methods - Must be implemented.
    // ===================================================================

    /**
     * Creates a new annotation.
     *
     * @method createNewMeasurement
     * @memberof Tools.Base.BaseAnnotationTool
     *
     * @param  {type} evt description
     * @returns {type}     description
     */
    // eslint-disable-next-line no-unused-vars
    value: function createNewMeasurement(evt) {
      throw new Error("Method createNewMeasurement not implemented for ".concat(this.name, "."));
    }
    /**
     *
     * Returns true if the given coords are need the tool.
     *
     * @method pointNearTool
     * @memberof Tools.Base.BaseAnnotationTool
     *
     * @param {*} element
     * @param {*} data
     * @param {*} coords
     * @param {string} [interactionType=mouse]
     * @returns {boolean} If the point is near the tool
     */
    // eslint-disable-next-line no-unused-vars

  }, {
    key: "pointNearTool",
    value: function pointNearTool(element, data, coords) {
      var interactionType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'mouse';
      throw new Error("Method pointNearTool not implemented for ".concat(this.name, "."));
    }
    /**
     * Returns the distance in px from the given coords to the closest handle of the annotation.
     *
     * @method distanceFromPoint
     * @memberof Tools.Base.BaseAnnotationTool
     *
     * @param {*} element
     * @param {*} data
     * @param {*} coords
     * @returns {number} -  the distance in px from the provided coordinates to the
     * closest rendered portion of the annotation. -1 if the distance cannot be
     * calculated.
     */
    // eslint-disable-next-line no-unused-vars

  }, {
    key: "distanceFromPoint",
    value: function distanceFromPoint(element, data, coords) {
      throw new Error("Method distanceFromPoint not implemented for ".concat(this.name, "."));
    }
    /**
     * Used to redraw the tool's annotation data per render
     *
     * @abstract
     * @param {*} evt
     * @returns {void}
     */
    // eslint-disable-next-line no-unused-vars

  }, {
    key: "renderToolData",
    value: function renderToolData(evt) {
      throw new Error("renderToolData not implemented for ".concat(this.name, "."));
    } // ===================================================================
    // Virtual Methods - Have default behavior but may be overriden.
    // ===================================================================

    /**
     * Event handler for MOUSE_MOVE event.
     *
     * @abstract
     * @event
     * @param {Object} evt - The event.
     * @returns {boolean} - True if the image needs to be updated
     */

  }, {
    key: "mouseMoveCallback",
    value: function mouseMoveCallback(evt) {
      var _evt$detail = evt.detail,
          element = _evt$detail.element,
          currentPoints = _evt$detail.currentPoints;
      var coords = currentPoints.canvas;
      var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_6__["getToolState"])(element, this.name);
      var imageNeedsUpdate = false;

      for (var d = 0; d < toolState.data.length; d++) {
        var data = toolState.data[d]; // Hovering a handle?

        if (Object(_manipulators_handleActivator_js__WEBPACK_IMPORTED_MODULE_7__["default"])(element, data.handles, coords) === true) {
          imageNeedsUpdate = true;
        } // Tool data's 'active' does not match coordinates
        // TODO: can't we just do an if/else and save on a pointNearTool check?


        var nearToolAndNotMarkedActive = this.pointNearTool(element, data, coords, 'mouse') && !data.active;
        var notNearToolAndMarkedActive = !this.pointNearTool(element, data, coords, 'mouse') && data.active;

        if (nearToolAndNotMarkedActive || notNearToolAndMarkedActive) {
          data.active = !data.active;
          imageNeedsUpdate = true;
        }
      }

      return imageNeedsUpdate;
    }
    /**
     * Custom callback for when a handle is selected.
     * @method handleSelectedCallback
     * @memberof Tools.Base.BaseAnnotationTool
     *
     * @param  {*} evt    -
     * @param  {*} toolData   -
     * @param  {*} handle - The selected handle.
     * @param  {String} interactionType -
     * @returns {void}
     */

  }, {
    key: "handleSelectedCallback",
    value: function handleSelectedCallback(evt, toolData, handle) {
      var interactionType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'mouse';
      Object(_util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_8__["moveHandleNearImagePoint"])(evt, this, toolData, handle, interactionType);
    }
    /**
     * Custom callback for when a tool is selected.
     *
     * @method toolSelectedCallback
     * @memberof Tools.Base.BaseAnnotationTool
     *
     * @param  {*} evt
     * @param  {*} annotation
     * @param  {string} [interactionType=mouse]
     * @returns {void}
     */

  }, {
    key: "toolSelectedCallback",
    value: function toolSelectedCallback(evt, annotation) {
      var interactionType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'mouse';
      Object(_util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_8__["moveAnnotation"])(evt, this, annotation, interactionType);
    }
    /**
     * Updates cached statistics for the tool's annotation data on the element
     *
     * @param {*} image
     * @param {*} element
     * @param {*} data
     * @returns {void}
     */

  }, {
    key: "updateCachedStats",
    value: function updateCachedStats(image, element, data) {
      // eslint-disable-line
      logger.warn("updateCachedStats not implemented for ".concat(this.name, "."));
    }
  }]);

  return BaseAnnotationTool;
}(_BaseTool_js__WEBPACK_IMPORTED_MODULE_5__["default"]);

/* harmony default export */ __nested_webpack_exports__["default"] = (BaseAnnotationTool);

/***/ }),

/***/ "./tools/base/BaseBrushTool.js":
/*!*************************************!*\
  !*** ./tools/base/BaseBrushTool.js ***!
  \*************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1267658__) {

"use strict";
__nested_webpack_require_1267658__.r(__nested_webpack_exports__);
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1267658__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1267658__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1267658__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_1267658__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1267658__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_1267658__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1267658__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_1267658__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1267658__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_1267658__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1267658__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__nested_webpack_require_1267658__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1267658__(/*! ./BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1267658__(/*! ./../../events.js */ "./events.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1267658__(/*! ./../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _store_isToolActiveForElement_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1267658__(/*! ./../../store/isToolActiveForElement.js */ "./store/isToolActiveForElement.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1267658__(/*! ./../../store/index.js */ "./store/index.js");
/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1267658__(/*! ../../util/segmentation */ "./util/segmentation/index.js");












var segmentationModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_10__["getModule"])('segmentation');
/**
 * @abstract
 * @memberof Tools.Base
 * @classdesc Abstract class for tools which manipulate the mask data to be displayed on
 * the cornerstone canvas.
 * @extends Tools.Base.BaseTool
 */

var BaseBrushTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(BaseBrushTool, _BaseTool);

  function BaseBrushTool(props) {
    var _this;

    var defaultProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, BaseBrushTool);

    if (!defaultProps.configuration) {
      defaultProps.configuration = {
        alwaysEraseOnClick: false
      };
    }

    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(BaseBrushTool).call(this, props, defaultProps));
    _this.updateOnMouseMove = true;
    _this.hideDefaultCursor = true;
    _this._drawing = false;
    _this._drawingMouseUpCallback = _this._drawingMouseUpCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    return _this;
  } // ===================================================================
  // Abstract Methods - Must be implemented.
  // ===================================================================

  /**
   * Helper function for rendering the brush.
   *
   * @abstract
   * @param {Object} evt - The event.
   * @returns {void}
   */
  // eslint-disable-next-line no-unused-vars


  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(BaseBrushTool, [{
    key: "renderBrush",
    value: function renderBrush(evt) {
      throw new Error("Method renderBrush not implemented for ".concat(this.name, "."));
    }
    /**
     * Paints the data to the labelmap.
     *
     * @protected
     * @abstract
     * @param  {Object} evt The event.
     * @returns {void}
     */
    // eslint-disable-next-line no-unused-vars

  }, {
    key: "_paint",
    value: function _paint(evt) {
      throw new Error("Method _paint not implemented for ".concat(this.name, "."));
    } // ===================================================================
    // Virtual Methods - Have default behavior but may be overriden.
    // ===================================================================

    /**
     * Event handler for MOUSE_DRAG event.
     *
     * @override
     * @abstract
     * @event
     * @param {Object} evt - The event.
     */

  }, {
    key: "mouseDragCallback",
    value: function mouseDragCallback(evt) {
      var currentPoints = evt.detail.currentPoints;
      this._lastImageCoords = currentPoints.image; // Safety measure incase _startPainting is overridden and doesn't always
      // start a paint.

      if (this._drawing) {
        this._paint(evt);
      }
    }
    /**
     * Event handler for MOUSE_DOWN event.
     *
     * @override
     * @abstract
     * @event
     * @param {Object} evt - The event.
     */

  }, {
    key: "preMouseDownCallback",
    value: function preMouseDownCallback(evt) {
      var eventData = evt.detail;
      var element = eventData.element,
          currentPoints = eventData.currentPoints;

      this._startPainting(evt);

      this._lastImageCoords = currentPoints.image;
      this._drawing = true;

      this._startListeningForMouseUp(element);

      this._paint(evt);

      return true;
    }
    /**
     * Initialise painting with BaseBrushTool.
     *
     * @abstract
     * @event
     * @param {Object} evt - The event.
     * @returns {void}
     */

  }, {
    key: "_startPainting",
    value: function _startPainting(evt) {
      var eventData = evt.detail;
      var element = eventData.element;
      var configuration = segmentationModule.configuration,
          getters = segmentationModule.getters;

      var _getters$labelmap2D = getters.labelmap2D(element),
          labelmap2D = _getters$labelmap2D.labelmap2D,
          labelmap3D = _getters$labelmap2D.labelmap3D,
          currentImageIdIndex = _getters$labelmap2D.currentImageIdIndex,
          activeLabelmapIndex = _getters$labelmap2D.activeLabelmapIndex;

      var shouldErase = this._isCtrlDown(eventData) || this.configuration.alwaysEraseOnClick;
      this.paintEventData = {
        labelmap2D: labelmap2D,
        labelmap3D: labelmap3D,
        currentImageIdIndex: currentImageIdIndex,
        activeLabelmapIndex: activeLabelmapIndex,
        shouldErase: shouldErase
      };

      if (configuration.storeHistory) {
        var previousPixelData = labelmap2D.pixelData.slice();
        this.paintEventData.previousPixelData = previousPixelData;
      }
    }
    /**
     * End painting with BaseBrushTool.
     *
     * @abstract
     * @event
     * @param {Object} evt - The event.
     * @returns {void}
     */

  }, {
    key: "_endPainting",
    value: function _endPainting(evt) {
      var configuration = segmentationModule.configuration,
          setters = segmentationModule.setters;
      var _this$paintEventData = this.paintEventData,
          labelmap2D = _this$paintEventData.labelmap2D,
          currentImageIdIndex = _this$paintEventData.currentImageIdIndex; // Grab the labels on the slice.

      var segmentSet = new Set(labelmap2D.pixelData);
      var iterator = segmentSet.values();
      var segmentsOnLabelmap = [];
      var done = false;

      while (!done) {
        var next = iterator.next();
        done = next.done;

        if (!done) {
          segmentsOnLabelmap.push(next.value);
        }
      }

      labelmap2D.segmentsOnLabelmap = segmentsOnLabelmap;

      if (configuration.storeHistory) {
        var previousPixelData = this.paintEventData.previousPixelData;
        var newPixelData = labelmap2D.pixelData;
        var operation = {
          imageIdIndex: currentImageIdIndex,
          diff: Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_11__["getDiffBetweenPixelData"])(previousPixelData, newPixelData)
        };
        setters.pushState(this.element, [operation]);
      }

      Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_11__["triggerLabelmapModifiedEvent"])(this.element);
    } // ===================================================================
    // Implementation interface
    // ===================================================================

    /**
     * Event handler for MOUSE_MOVE event.
     *
     * @override
     * @abstract
     * @event
     * @param {Object} evt - The event.
     */

  }, {
    key: "mouseMoveCallback",
    value: function mouseMoveCallback(evt) {
      var currentPoints = evt.detail.currentPoints;
      this._lastImageCoords = currentPoints.image;
    }
    /**
     * Used to redraw the tool's cursor per render.
     *
     * @override
     * @param {Object} evt - The event.
     */

  }, {
    key: "renderToolData",
    value: function renderToolData(evt) {
      var eventData = evt.detail;
      var element = eventData.element; // Only brush needs to render.

      if (Object(_store_isToolActiveForElement_js__WEBPACK_IMPORTED_MODULE_9__["default"])(element, this.name)) {
        // Call the hover event for the brush
        this.renderBrush(evt);
      }
    }
    /**
     * Event handler for switching mode to passive.
     *
     * @override
     * @event
     * @param {Object} evt - The event.
     */
    // eslint-disable-next-line no-unused-vars

  }, {
    key: "passiveCallback",
    value: function passiveCallback(evt) {
      try {
        _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(this.element);
      } catch (error) {
        // It is possible that the image has not been loaded
        // when this is called.
        return;
      }
    }
    /**
     * Event handler for MOUSE_UP during the drawing event loop.
     *
     * @protected
     * @event
     * @param {Object} evt - The event.
     * @returns {void}
     */

  }, {
    key: "_drawingMouseUpCallback",
    value: function _drawingMouseUpCallback(evt) {
      var eventData = evt.detail;
      var element = eventData.element;

      this._endPainting(evt);

      this._drawing = false;
      this._mouseUpRender = true;

      this._stopListeningForMouseUp(element);
    }
  }, {
    key: "newImageCallback",
    value: function newImageCallback(evt) {
      if (this._drawing) {
        // End painting on one slice and start on another.
        this._endPainting(evt);

        this._startPainting(evt);
      }
    }
    /**
     * Adds modify loop event listeners.
     *
     * @protected
     * @param {Object} element - The viewport element to add event listeners to.
     * @modifies {element}
     * @returns {void}
     */

  }, {
    key: "_startListeningForMouseUp",
    value: function _startListeningForMouseUp(element) {
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_UP, this._drawingMouseUpCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_CLICK, this._drawingMouseUpCallback);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_UP, this._drawingMouseUpCallback);
      element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_CLICK, this._drawingMouseUpCallback);
      _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(element);
    }
    /**
     * Adds modify loop event listeners.
     *
     * @protected
     * @param {Object} element - The viewport element to add event listeners to.
     * @modifies {element}
     * @returns {void}
     */

  }, {
    key: "_stopListeningForMouseUp",
    value: function _stopListeningForMouseUp(element) {
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_UP, this._drawingMouseUpCallback);
      element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_CLICK, this._drawingMouseUpCallback);
      _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(element);
    } // ===================================================================
    // Brush API. This is effectively a wrapper around the store.
    // ===================================================================

    /**
     * Increases the brush size
     *
     * @public
     * @api
     * @returns {void}
     */

  }, {
    key: "increaseBrushSize",
    value: function increaseBrushSize() {
      var configuration = segmentationModule.configuration,
          setters = segmentationModule.setters;
      var oldRadius = configuration.radius;
      var newRadius = Math.floor(oldRadius * 1.2); // If e.g. only 2 pixels big. Math.floor(2*1.2) = 2.
      // Hence, have minimum increment of 1 pixel.

      if (newRadius === oldRadius) {
        newRadius += 1;
      }

      setters.radius(newRadius);
    }
    /**
     * Decreases the brush size
     *
     * @public
     * @api
     * @returns {void}
     */

  }, {
    key: "decreaseBrushSize",
    value: function decreaseBrushSize() {
      var configuration = segmentationModule.configuration,
          setters = segmentationModule.setters;
      var oldRadius = configuration.radius;
      var newRadius = Math.floor(oldRadius * 0.8);
      setters.radius(newRadius);
    }
  }, {
    key: "_isCtrlDown",
    value: function _isCtrlDown(eventData) {
      return eventData.event && eventData.event.ctrlKey || eventData.ctrlKey;
    }
  }]);

  return BaseBrushTool;
}(_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]);

/* harmony default export */ __nested_webpack_exports__["default"] = (BaseBrushTool);

/***/ }),

/***/ "./tools/base/BaseTool.js":
/*!********************************!*\
  !*** ./tools/base/BaseTool.js ***!
  \********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1283401__) {

"use strict";
__nested_webpack_require_1283401__.r(__nested_webpack_exports__);
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1283401__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js");
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1283401__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1283401__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_1283401__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1283401__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_1283401__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _mixins_index_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1283401__(/*! ./../../mixins/index.js */ "./mixins/index.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1283401__(/*! ../../util/logger.js */ "./util/logger.js");
/* harmony import */ var _util_deepmerge_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1283401__(/*! ./../../util/deepmerge.js */ "./util/deepmerge.js");
/* harmony import */ var _store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1283401__(/*! ../../store/setToolCursor.js */ "./store/setToolCursor.js");
/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1283401__(/*! ../../store */ "./store/index.js");








var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_4__["getLogger"])('tools:base:BaseTool');
var globalConfigurationModule = Object(_store__WEBPACK_IMPORTED_MODULE_7__["getModule"])('globalConfiguration');
/**
 * @typedef ToolConfiguration
 * @param {String} name
 * @param {object} strategies - Named strategy functions
 * @param {String} defaultStrategy - The name of the strategy to use by default
 * @param {Object} configuration
 * @param {String[]} mixins - A list of mixin names to apply to the tool
 */

/**
 * @memberof Tools.Base
 * @classdesc BaseTool Class description
 * @property {String[]} supportedInteractionTypes - A string list of ways the tool can interact with the user
 */

var BaseTool =
/*#__PURE__*/
function () {
  /**
   * Constructor description
   * @param {props} [props={}] Tool properties set on instantiation of a tool
   * @param {defaultProps} [defaultProps={}] Tools Default properties
   */
  function BaseTool(props, defaultProps) {
    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, BaseTool);

    /**
     * Merge default props with custom props
     */
    this.initialConfiguration = Object(_util_deepmerge_js__WEBPACK_IMPORTED_MODULE_5__["default"])(defaultProps, props);
    var _this$initialConfigur = this.initialConfiguration,
        name = _this$initialConfigur.name,
        strategies = _this$initialConfigur.strategies,
        defaultStrategy = _this$initialConfigur.defaultStrategy,
        configuration = _this$initialConfigur.configuration,
        supportedInteractionTypes = _this$initialConfigur.supportedInteractionTypes,
        mixins = _this$initialConfigur.mixins,
        svgCursor = _this$initialConfigur.svgCursor;
    /**
     * A unique, identifying tool name
     * @type {String}
     */

    this.name = name;
    /** @type {String} */

    this.mode = 'disabled';
    this.element = undefined;
    this.supportedInteractionTypes = supportedInteractionTypes || [];
    this.strategies = strategies || {};
    this.defaultStrategy = defaultStrategy || Object.keys(this.strategies)[0] || undefined;
    this.activeStrategy = this.defaultStrategy;

    if (svgCursor) {
      this.svgCursor = svgCursor;
    } // Options are set when a tool is added, during a "mode" change,
    // or via a tool's option's setter


    this._options = {}; // Configuration is set at tool initalization

    this._configuration = Object.assign({}, configuration); // `updateOnMouseMove` causes the frame to render on every mouse move when
    // the tool is active. This is useful for tools that render large/dynamic
    // items to the canvas which can't easily be respresented with an SVG Cursor.

    this.updateOnMouseMove = false;
    this.hideDefaultCursor = false; // Apply mixins if mixinsArray is not empty.

    if (mixins && mixins.length) {
      this._applyMixins(mixins);
    }

    this._cursors = Object.assign({}, this.initialConfiguration.cursors);
    var defaultCursor = this.defaultStrategy && this._cursors[this.activeStrategy];

    if (defaultCursor) {
      this.svgCursor = defaultCursor;
    }
  } //
  // CONFIGURATION
  //

  /**
   * Config...
   * @public
   * @type {Object}
   * @instance
   */


  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(BaseTool, [{
    key: "mergeOptions",

    /**
     * Merges provided options with existing options.
     *
     * @public
     * @instance
     * @param {Object} options - options object to merge with existing options.
     * @returns {undefined}
     */
    value: function mergeOptions(options) {
      this._options = Object.assign({}, this._options, options);
    }
    /**
     * Clears the tools options.
     *
     * @public
     * @instance
     * @memberof Tools.Base.BaseTool
     * @returns {undefined}
     */

  }, {
    key: "clearOptions",
    value: function clearOptions() {
      this._options = {};
    }
    /**
     * Apply the currently set/active strategy.
     *
     * @public
     * @instance
     * @method applyActiveStrategy
     * @memberof Tools.Base.BaseTool
     *
     * @param {Object} evt The event that triggered the strategies application
     * @param {Object} operationData - An object containing extra data not present in the `evt`,
     *                                 required to apply the strategy.
     * @returns {*} strategies vary widely; check each specific strategy to find expected return value
     */

  }, {
    key: "applyActiveStrategy",
    value: function applyActiveStrategy(evt, operationData) {
      return this.strategies[this.activeStrategy].call(this, evt, operationData);
    }
    /**
     * Iterates over registered mixins; any matching names in the provided `mixinsArray` will
     * be merged with this instance.
     *
     * @private
     * @method _applyMixins
     * @param {string[]} mixinsArray An array of mixin identifiers (strings).
     * @returns {undefined}
     */

  }, {
    key: "_applyMixins",
    value: function _applyMixins(mixinsArray) {
      for (var i = 0; i < mixinsArray.length; i++) {
        var mixin = _mixins_index_js__WEBPACK_IMPORTED_MODULE_3__["default"]["".concat(mixinsArray[i])];

        if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(mixin) === 'object') {
          Object.assign(this, mixin);

          if (typeof this.initializeMixin === 'function') {
            // Run the mixin's initialisation process.
            this.initializeMixin();
          }
        } else {
          logger.warn("".concat(this.name, ": mixin ").concat(_mixins_index_js__WEBPACK_IMPORTED_MODULE_3__["default"][i], " does not exist."));
        }
      } // Don't keep initialiseMixin from last mixin.


      if (this.initializeMixin === 'function') {
        delete this.initializeMixin;
      }
    }
    /**
     * Change the active strategy.
     *
     * @public
     * @method setActiveStrategy
     * @param  {string} strategy
     * @returns {null}
     */

  }, {
    key: "setActiveStrategy",
    value: function setActiveStrategy(strategy) {
      this.activeStrategy = strategy;

      if (globalConfigurationModule.configuration.showSVGCursors) {
        this.changeCursor(this.element, strategy);
      }
    }
    /**
     * Function responsible for changing the Cursor, according to the strategy.
     * @param {HTMLElement} element
     * @param {string} strategy The strategy to be used on Tool
     * @public
     * @returns {void}
     */

  }, {
    key: "changeCursor",
    value: function changeCursor(element, strategy) {
      // Necessary to avoid setToolCursor call without elements, which throws an error.
      if (!element) {
        return;
      } // If there are cursors set per strategy, change the cursor.


      var cursor = this._cursors[strategy];

      if (cursor) {
        this.svgCursor = cursor;

        if (this.mode === 'active') {
          Object(_store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_6__["setToolCursor"])(element, cursor); // External.cornerstone.updateImage(element);
        }
      }
    } // ===================================================================
    // Virtual Methods - Have default behavior but may be overridden.
    // ===================================================================
    //
    // MOUSE
    //

    /**
     * Callback that takes priority if the tool is active, before `MOUSE_DOWN`
     * events are processed. Does nothing by default.
     *
     * @callback BaseTool~preMouseDownCallback
     * @param  {CornerstoneTools.event:cornerstonetoolsmousedown} evt
     * @returns {boolean} consumedEvent - True if function consumed the event.
     */

    /**
     * Callback that takes priority if the tool is active, after `MOUSE_DOWN`
     * events are processed. Does nothing by default.
     *
     * @callback BaseTool~postMouseDownCallback
     * @param  {CornerstoneTools.event:cornerstonetoolsmousedown} evt
     * @returns {boolean} consumedEvent - True if function consumed the event.
     */

    /**
     * Callback that is called if the tool is active, after `MOUSE_DOWN`
     * events are processed. Does nothing by default.
     *
     * @virtual
     * @param  {type} evt
     * @returns {boolean} consumedEvent - True if function consumed the event.
     */

    /**
     * Example implementation:
     *
     * postMouseDownCallback(evt) {
     *    return false;
     * }
     */

    /**
     * Callback that takes priority if the tool is active, before `TOUCH_START`
     * events are processed. Does nothing by default.
     *
     * @virtual
     * @param  {type} evt
     * @returns {boolean} consumedEvent - True if function consumed the event.
     */

    /**
     * Example implementation:
     *
     * preTouchStartCallback(evt) {
     *    return false;
     * }
     */

    /**
     * Callback that is called if the tool is active, after `TOUCH_START`
     * events are processed. Does nothing by default.
     *
     * @virtual
     * @param  {type} evt
     * @returns {boolean} consumedEvent - True if function consumed the event.
     */

    /**
     * Example implementation:
     *
     * postTouchStartCallback(evt) {
     *    return false;
     * }
     */

  }, {
    key: "configuration",
    get: function get() {
      return this._configuration;
    },
    set: function set(configuration) {
      this._configuration = configuration;
    } //
    // OPTIONS
    //

    /**
     * Options...
     * @readonly
     * @instance
     */

  }, {
    key: "options",
    get: function get() {
      return this._options;
    }
  }], [{
    key: "configuration",
    get: function get() {}
  }]);

  return BaseTool;
}();

/* harmony default export */ __nested_webpack_exports__["default"] = (BaseTool);

/***/ }),

/***/ "./tools/base/index.js":
/*!*****************************!*\
  !*** ./tools/base/index.js ***!
  \*****************************/
/*! exports provided: BaseAnnotationTool, BaseBrushTool, BaseTool, default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1295483__) {

"use strict";
__nested_webpack_require_1295483__.r(__nested_webpack_exports__);
/* harmony import */ var _BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1295483__(/*! ./BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js");
/* harmony import */ var _BaseTool_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1295483__(/*! ./BaseTool.js */ "./tools/base/BaseTool.js");
/* harmony import */ var _BaseBrushTool_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1295483__(/*! ./BaseBrushTool.js */ "./tools/base/BaseBrushTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1295483__.d(__nested_webpack_exports__, "BaseAnnotationTool", function() { return _BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_0__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1295483__.d(__nested_webpack_exports__, "BaseBrushTool", function() { return _BaseBrushTool_js__WEBPACK_IMPORTED_MODULE_2__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1295483__.d(__nested_webpack_exports__, "BaseTool", function() { return _BaseTool_js__WEBPACK_IMPORTED_MODULE_1__["default"]; });



 // Named Exports



 // Namespace, default export

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  BaseAnnotationTool: _BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_0__["default"],
  BaseBrushTool: _BaseBrushTool_js__WEBPACK_IMPORTED_MODULE_2__["default"],
  BaseTool: _BaseTool_js__WEBPACK_IMPORTED_MODULE_1__["default"]
});

/***/ }),

/***/ "./tools/cursors/MouseCursor.js":
/*!**************************************!*\
  !*** ./tools/cursors/MouseCursor.js ***!
  \**************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1297160__) {

"use strict";
__nested_webpack_require_1297160__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1297160__.d(__nested_webpack_exports__, "default", function() { return MouseCursor; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1297160__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1297160__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1297160__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_1297160__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1297160__(/*! ../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1297160__(/*! ../../store/index.js */ "./store/index.js");




var cursorModule = _store_index_js__WEBPACK_IMPORTED_MODULE_3__["modules"].cursor;
/* eslint-disable valid-jsdoc */

/*
MACROS - The following keys will have the appropriate value injected when
an SVG is requested:

- ACTIVE_COLOR  => options.activeColor || toolColors.getActiveColor();
- TOOL_COLOR    => options.toolColor || toolColors.getToolColor();
- FILL_COLOR    => options.fillColor || toolColors.getFillColor();
*/

var MouseCursor =
/*#__PURE__*/
function () {
  function MouseCursor(iconGroupString, options) {
    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, MouseCursor);

    this.iconGroupString = iconGroupString;
    this.options = Object.assign({}, cursorModule.getters.defaultOptions(), options);
  }
  /**
   * Returns an SVG of the icon only.
   *
   * @param  {Object} options - An object which overrides default properties of the returned SVG.
   * @returns {Blob} The SVG of the icon.
   */


  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(MouseCursor, [{
    key: "getIconSVG",
    value: function getIconSVG() {
      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

      var svgString = this._generateIconSVGString(options);

      return new Blob([svgString], {
        type: 'image/svg+xml'
      });
    }
    /**
     *  Returns a string representation of the SVG of the icon only.
     *
     * @param  {Object} options - An object which overrides default properties of the returned SVG.
     * @returns {string} The stringified SVG of the icon.
     */

  }, {
    key: "getIconSVGString",
    value: function getIconSVGString() {
      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
      return this._generateIconSVGString(options);
    }
    /**
     * Returns an SVG of the icon + pointer.
     *
     * @param  {Object} options - An object which overrides default properties of the returned SVG.
     * @returns {Blob} The SVG of the icon + pointer..
     */

  }, {
    key: "getIconWithPointerSVG",
    value: function getIconWithPointerSVG() {
      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

      var svgString = this._generateIconWithPointerSVGString(options);

      return new Blob([svgString], {
        type: 'image/svg+xml'
      });
    }
    /**
     * Returns a string representation of the SVG of the icon + pointer.
     *
     * @param  {Object} options - An object which overrides default properties of the returned SVG.
     * @returns {string} The stringified SVG of the icon + pointer.
     */

  }, {
    key: "getIconWithPointerString",
    value: function getIconWithPointerString() {
      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
      return this._generateIconWithPointerSVGString(options);
    }
    /**
     * Returns the mousePoint as a space separated string.
     *
     * @returns {string} The mousePoint.
     */

  }, {
    key: "_generateIconWithPointerSVGString",

    /**
     * Generates a string representation of the icon + pointer.
     *
     * @param  {Object} options - An object which overrides default properties of the returned string.
     * @returns {string} The SVG as a string.
     */
    value: function _generateIconWithPointerSVGString() {
      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
      var svgOptions = Object.assign({}, this.options, options);
      var mousePointerGroupString = svgOptions.mousePointerGroupString,
          iconSize = svgOptions.iconSize,
          viewBox = svgOptions.viewBox;
      var scale = iconSize / Math.max(viewBox.x, viewBox.y);
      var svgSize = 16 + iconSize;
      var svgString = "\n        <svg\n        data-icon=\"cursor\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\"\n        width=\"".concat(svgSize, "\" height=\"").concat(svgSize, "\" viewBox=\"0 0 ").concat(svgSize, " ").concat(svgSize, "\"\n      >\n        <g>\n          ").concat(mousePointerGroupString, "\n        </g>\n        <g transform=\"translate(16, 16) scale(").concat(scale, ")\">\n          ").concat(this.iconGroupString, "\n        </g>\n      </svg>");
      return this._injectColors(svgString, svgOptions);
    }
    /**
     * Generates a string representation of the icon.
     *
     * @param  {Object} options - An object which overrides default properties of the returned string.
     * @returns {string} The SVG as a string.
     */

  }, {
    key: "_generateIconSVGString",
    value: function _generateIconSVGString() {
      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
      var svgOptions = Object.assign({}, this.options, options);
      var iconSize = svgOptions.iconSize,
          viewBox = svgOptions.viewBox;
      var svgString = "\n      <svg\n        data-icon=\"cursor\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\"\n        width=\"".concat(iconSize, "\" height=\"").concat(iconSize, "\" viewBox=\"0 0\n        ").concat(viewBox.x, " ").concat(viewBox.y, "\"\n      >\n        ").concat(this.iconGroupString, "\n      </svg>");
      return this._injectColors(svgString, svgOptions);
    }
    /**
     * Replaces ACTIVE_COLOR, TOOL_COLOR and FILL_COLOR in svgString with their appropriate values.
     *
     * @param  {string} svgString - The string to modify.
     * @param  {Object} options - Optional overrides for the colors.
     * @returns {string} The string with color values injected.
     */

  }, {
    key: "_injectColors",
    value: function _injectColors(svgString) {
      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
      var activeColor = options.activeColor || _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_2__["default"].getActiveColor();
      var toolColor = options.toolColor || _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_2__["default"].getToolColor();
      var fillColor = options.fillColor || _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_2__["default"].getFillColor();
      return svgString.replace(/ACTIVE_COLOR/g, "".concat(activeColor)).replace(/TOOL_COLOR/g, "".concat(toolColor)).replace(/FILL_COLOR/g, "".concat(fillColor));
    }
  }, {
    key: "mousePoint",
    get: function get() {
      var mousePoint = this.options.mousePoint;
      return "".concat(mousePoint.x, " ").concat(mousePoint.y);
    }
  }]);

  return MouseCursor;
}();



/***/ }),

/***/ "./tools/cursors/index.js":
/*!********************************!*\
  !*** ./tools/cursors/index.js ***!
  \********************************/
/*! exports provided: angleCursor, arrowAnnotateCursor, bidirectionalCursor, cobbAngleCursor, circleRoiCursor, ellipticalRoiCursor, freehandRoiCursor, freehandRoiSculptorCursor, lengthCursor, probeCursor, rectangleRoiCursor, textMarkerCursor, crosshairsCursor, eraserCursor, magnifyCursor, panCursor, rotateCursor, stackScrollCursor, wwwcRegionCursor, wwwcCursor, zoomCursor, freehandEraseInsideCursor, freehandFillInsideCursor, freehandEraseOutsideCursor, freehandFillOutsideCursor, segRectangleEraseInsideCursor, segRectangleFillInsideCursor, segRectangleEraseOutsideCursor, segRectangleFillOutsideCursor, segCircleEraseInsideCursor, segCircleFillInsideCursor, segCircleEraseOutsideCursor, segCircleFillOutsideCursor */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1305982__) {

"use strict";
__nested_webpack_require_1305982__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "angleCursor", function() { return angleCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "arrowAnnotateCursor", function() { return arrowAnnotateCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "bidirectionalCursor", function() { return bidirectionalCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "cobbAngleCursor", function() { return cobbAngleCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "circleRoiCursor", function() { return circleRoiCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "ellipticalRoiCursor", function() { return ellipticalRoiCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "freehandRoiCursor", function() { return freehandRoiCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "freehandRoiSculptorCursor", function() { return freehandRoiSculptorCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "lengthCursor", function() { return lengthCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "probeCursor", function() { return probeCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "rectangleRoiCursor", function() { return rectangleRoiCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "textMarkerCursor", function() { return textMarkerCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "crosshairsCursor", function() { return crosshairsCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "eraserCursor", function() { return eraserCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "magnifyCursor", function() { return magnifyCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "panCursor", function() { return panCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "rotateCursor", function() { return rotateCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "stackScrollCursor", function() { return stackScrollCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "wwwcRegionCursor", function() { return wwwcRegionCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "wwwcCursor", function() { return wwwcCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "zoomCursor", function() { return zoomCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "freehandEraseInsideCursor", function() { return freehandEraseInsideCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "freehandFillInsideCursor", function() { return freehandFillInsideCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "freehandEraseOutsideCursor", function() { return freehandEraseOutsideCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "freehandFillOutsideCursor", function() { return freehandFillOutsideCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "segRectangleEraseInsideCursor", function() { return segRectangleEraseInsideCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "segRectangleFillInsideCursor", function() { return segRectangleFillInsideCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "segRectangleEraseOutsideCursor", function() { return segRectangleEraseOutsideCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "segRectangleFillOutsideCursor", function() { return segRectangleFillOutsideCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "segCircleEraseInsideCursor", function() { return segCircleEraseInsideCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "segCircleFillInsideCursor", function() { return segCircleFillInsideCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "segCircleEraseOutsideCursor", function() { return segCircleEraseOutsideCursor; });
/* harmony export (binding) */ __nested_webpack_require_1305982__.d(__nested_webpack_exports__, "segCircleFillOutsideCursor", function() { return segCircleFillOutsideCursor; });
/* harmony import */ var _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1305982__(/*! ./MouseCursor.js */ "./tools/cursors/MouseCursor.js");

/*
MACROS:

The following keys will have the appropriate value injected by the MouseCursor
class when an SVG is requested:

- ACTIVE_COLOR  => options.activeColor || toolColors.getActiveColor();
- TOOL_COLOR    => options.toolColor || toolColors.getToolColor();
- FILL_COLOR    => options.fillColor || toolColors.getFillColor();
*/

var angleCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<path fill=\"ACTIVE_COLOR\" d=\"M1203 544q0 13-10 23l-393 393 393 393q10 10 10 23t-10 23l-50\n        50q-10 10-23 10t-23-10l-466-466q-10-10-10-23t10-23l466-466q10-10 23-10t23\n        10l50 50q10 10 10 23z\"\n      />", {
  viewBox: {
    x: 1792,
    y: 1792
  }
});
var arrowAnnotateCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<g id=\"arrowAnnotate-group\" fill=\"none\" stroke-width=\"1\" stroke=\"ACTIVE_COLOR\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n    <path id=\"arrowAnnotate-arrow\" d=\"M23,7 l-15,15 M7,17 l0,6 6,0\" stroke-width=\"2\" />\n  </g>", {
  viewBox: {
    x: 24,
    y: 24
  }
});
var bidirectionalCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<g fill=\"ACTIVE_COLOR\" stroke-width=\"3\" stroke=\"ACTIVE_COLOR\">\n    <path d=\"M27.63 3.21L3.12 28.81\"></path>\n    <path d=\"M27.63 15.75L15.27 4.43\"></path>\n    <path d=\"M16.5 4.28C16.5 4.96 15.95 5.51 15.27 5.51C14.59 5.51 14.03 4.96 14.03 4.28C14.03 3.59 14.59 3.04 15.27 3.04C15.95 3.04 16.5 3.59 16.5 4.28Z\" ></path>\n    <path d=\"M28.87 3.19C28.87 3.87 28.31 4.43 27.63 4.43C26.95 4.43 26.4 3.87 26.4 3.19C26.4 2.51 26.95 1.95 27.63 1.95C28.31 1.95 28.87 2.51 28.87 3.19Z\"></path>\n    <path d=\"M28.87 15.75C28.87 16.43 28.31 16.99 27.63 16.99C26.95 16.99 26.4 16.43 26.4 15.75C26.4 15.07 26.95 14.51 27.63 14.51C28.31 14.51 28.87 15.07 28.87 15.75Z\"></path>\n    <path d=\"M4.73 28.44C4.73 29.12 4.17 29.68 3.49 29.68C2.81 29.68 2.25 29.12 2.25 28.44C2.25 27.76 2.81 27.2 3.49 27.2C4.17 27.2 4.73 27.76 4.73 28.44Z\"></path>\n  </g>", {
  viewBox: {
    x: 48,
    y: 48
  }
});
var cobbAngleCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<g stroke=\"ACTIVE_COLOR\" stroke-width=\"3\">\n    <path d=\"M28.59 2.34L3.82 12.32\"></path>\n    <path d=\"M28.59 29.66L3.82 19.68\"></path>\n    <path stroke-dasharray=\"2\" fill-opacity=\"0\" d=\"M12.37\n      23.06C12.67 22.36 12.85 21.93 12.92 21.76C14.6 17.8 14.68 13.35 13.15\n      9.33C13.11 9.24 13.02 9 12.88 8.63\">\n    </path>\n  </g>", {
  viewBox: {
    x: 32,
    y: 32
  }
});
var circleRoiCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<circle stroke=\"ACTIVE_COLOR\" fill=\"none\" stroke-width=\"3\" cx=\"16\" cy=\"16\" r=\"14\" />", {
  viewBox: {
    x: 32,
    y: 32
  }
});
var ellipticalRoiCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<path stroke=\"ACTIVE_COLOR\" fill=\"none\" stroke-width=\"3\" d=\"M30.74 15.76C30.74 20.99 24.14 25.23 16\n    25.23C7.86 25.23 1.26 20.99 1.26 15.76C1.26 10.54 7.86 6.3 16 6.3C24.14\n    6.3 30.74 10.54 30.74 15.76Z\"\n    />", {
  viewBox: {
    x: 32,
    y: 32
  }
});
var freehandRoiCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("\n  <g fill=\"ACTIVE_COLOR\" stroke=\"ACTIVE_COLOR\" stroke-width=\"2\">\n    <ellipse ry=\"1\" rx=\"1\" id=\"svg_3\" cy=\"4.240343\" cx=\"14.306499\"/>\n    <line id=\"svg_4\" y2=\"3.58462\" x2=\"12.242186\" y1=\"3.997482\" x1=\"13.432202\"/>\n    <line id=\"svg_5\" y2=\"3.268901\" x2=\"10.857882\" y1=\"3.608906\" x1=\"12.387902\"/>\n    <line id=\"svg_6\" y2=\"3.147471\" x2=\"9.740724\" y1=\"3.293187\" x1=\"10.955026\"/>\n    <line id=\"svg_7\" y2=\"3.147471\" x2=\"8.089274\" y1=\"3.196043\" x1=\"9.983585\"/>\n    <line id=\"svg_8\" y2=\"3.268901\" x2=\"6.874972\" y1=\"3.123185\" x1=\"8.307848\"/>\n    <line id=\"svg_9\" y2=\"3.657478\" x2=\"5.587812\" y1=\"3.220329\" x1=\"7.020688\"/>\n    <line id=\"svg_10\" y2=\"4.046054\" x2=\"4.737801\" y1=\"3.560334\" x1=\"5.854959\"/>\n    <line id=\"svg_11\" y2=\"4.337487\" x2=\"4.300652\" y1=\"3.997482\" x1=\"4.834945\"/>\n    <line id=\"svg_12\" y2=\"4.726063\" x2=\"3.88779\" y1=\"4.191771\" x1=\"4.470655\"/>\n    <line id=\"svg_15\" y2=\"5.3575\" x2=\"3.377783\" y1=\"4.604633\" x1=\"3.960648\"/>\n    <line id=\"svg_16\" y2=\"6.183226\" x2=\"2.916348\" y1=\"5.138926\" x1=\"3.547785\"/>\n    <line id=\"svg_17\" y2=\"6.960379\" x2=\"2.770632\" y1=\"5.867507\" x1=\"3.037779\"/>\n    <line id=\"svg_18\" y2=\"7.713246\" x2=\"2.673488\" y1=\"6.741804\" x1=\"2.819204\"/>\n    <line id=\"svg_19\" y2=\"8.684687\" x2=\"2.697774\" y1=\"7.616102\" x1=\"2.673488\"/>\n    <line id=\"svg_20\" y2=\"9.753273\" x2=\"2.892062\" y1=\"8.611829\" x1=\"2.697774\"/>\n    <line id=\"svg_21\" y2=\"10.724714\" x2=\"3.134923\" y1=\"9.534698\" x1=\"2.84349\"/>\n    <line id=\"svg_23\" y2=\"11.647583\" x2=\"3.596357\" y1=\"10.578998\" x1=\"3.086351\"/>\n    <line id=\"svg_25\" y2=\"12.521881\" x2=\"4.276366\" y1=\"11.501867\" x1=\"3.499213\"/>\n    <line id=\"svg_26\" y2=\"13.930471\" x2=\"5.830673\" y1=\"12.376165\" x1=\"4.13065\"/>\n    <line id=\"svg_28\" y2=\"14.707624\" x2=\"7.263549\" y1=\"13.881899\" x1=\"5.733528\"/>\n    <line id=\"svg_29\" y2=\"15.339061\" x2=\"8.963571\" y1=\"14.61048\" x1=\"7.06926\"/>\n    <line id=\"svg_30\" y2=\"15.581921\" x2=\"10.882168\" y1=\"15.314775\" x1=\"8.817855\"/>\n    <line id=\"svg_31\" y2=\"15.460491\" x2=\"12.023612\" y1=\"15.581921\" x1=\"10.785024\"/>\n    <line id=\"svg_33\" y2=\"15.120487\" x2=\"13.092197\" y1=\"15.484777\" x1=\"11.877895\"/>\n    <line id=\"svg_34\" y2=\"14.586194\" x2=\"13.86935\" y1=\"15.217631\" x1=\"12.897909\"/>\n    <line id=\"svg_35\" y2=\"13.833327\" x2=\"14.597931\" y1=\"14.756196\" x1=\"13.699348\"/>\n    <line id=\"svg_37\" y2=\"12.716169\" x2=\"15.180796\" y1=\"13.881899\" x1=\"14.549359\"/>\n    <line id=\"svg_39\" y2=\"11.429009\" x2=\"15.520801\" y1=\"12.813313\" x1=\"15.15651\"/>\n    <ellipse ry=\"1\" rx=\"1\" id=\"svg_40\" cy=\"10.967574\" cx=\"15.520801\"/>\n  </g>", {
  viewBox: {
    x: 18,
    y: 18
  }
});
var freehandRoiSculptorCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<g id=\"icon-freehand-sculpt\" fill=\"none\" stroke-width=\"1.5\" stroke=\"ACTIVE_COLOR\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n      <line id=\"svg_1\" y2=\"2.559367\" x2=\"10.184807\" y1=\"4.467781\" x1=\"8.81711\"/>\n      <line id=\"svg_4\" y2=\"1.493836\" x2=\"11.727442\" y1=\"2.766112\" x1=\"10.089386\"/>\n      <line id=\"svg_7\" y2=\"1.080346\" x2=\"13.047428\" y1=\"1.748291\" x1=\"11.345759\"/>\n      <line id=\"svg_8\" y2=\"1.000829\" x2=\"14.351511\" y1=\"1.112153\" x1=\"12.77707\"/>\n      <line id=\"svg_9\" y2=\"1.350705\" x2=\"15.242104\" y1=\"0.905408\" x1=\"13.969828\"/>\n      <line id=\"svg_10\" y2=\"2.098167\" x2=\"15.862339\" y1=\"1.14396\" x1=\"14.955842\"/>\n      <line id=\"svg_11\" y2=\"3.195505\" x2=\"16.41896\" y1=\"1.939133\" x1=\"15.766918\"/>\n      <line id=\"svg_12\" y2=\"4.292843\" x2=\"16.530284\" y1=\"2.925147\" x1=\"16.387153\"/>\n      <line id=\"svg_16\" y2=\"5.644637\" x2=\"16.196311\" y1=\"3.831643\" x1=\"16.593898\"/>\n      <line id=\"svg_18\" y2=\"7.266789\" x2=\"15.623787\" y1=\"5.19934\" x1=\"16.275829\"/>\n      <line id=\"svg_19\" y2=\"10.813258\" x2=\"14.526449\" y1=\"6.726071\" x1=\"15.766918\"/>\n      <line id=\"svg_20\" y2=\"5.056209\" x2=\"8.085552\" y1=\"4.181519\" x1=\"8.976145\"/>\n      <line id=\"svg_23\" y2=\"5.326568\" x2=\"7.481221\" y1=\"4.78585\" x1=\"8.403621\"/>\n      <line id=\"svg_24\" y2=\"5.565119\" x2=\"6.749662\" y1=\"5.294761\" x1=\"7.624352\"/>\n      <line id=\"svg_25\" y2=\"5.994512\" x2=\"5.429675\" y1=\"5.533312\" x1=\"6.956407\"/>\n      <line id=\"svg_27\" y2=\"6.551133\" x2=\"4.284627\" y1=\"5.962706\" x1=\"5.572807\"/>\n      <line id=\"svg_28\" y2=\"7.584858\" x2=\"3.044158\" y1=\"6.392099\" x1=\"4.427758\"/>\n      <line id=\"svg_29\" y2=\"8.84123\" x2=\"2.185372\" y1=\"7.489437\" x1=\"3.219096\"/>\n      <line id=\"svg_31\" y2=\"10.606513\" x2=\"1.644654\" y1=\"8.602678\" x1=\"2.280792\"/>\n      <line id=\"svg_32\" y2=\"13.214679\" x2=\"1.48562\" y1=\"10.352058\" x1=\"1.724171\"/>\n      <line id=\"svg_33\" y2=\"14.375631\" x2=\"1.676461\" y1=\"12.992031\" x1=\"1.453813\"/>\n      <line id=\"svg_34\" y2=\"15.298031\" x2=\"2.264889\" y1=\"14.152983\" x1=\"1.517427\"/>\n      <line id=\"svg_35\" y2=\"16.172721\" x2=\"3.521261\" y1=\"14.948155\" x1=\"1.915013\"/>\n      <line id=\"svg_36\" y2=\"16.824762\" x2=\"5.207027\" y1=\"15.997783\" x1=\"3.28271\"/>\n      <line id=\"svg_38\" y2=\"17.063314\" x2=\"7.035924\" y1=\"16.745245\" x1=\"4.968475\"/>\n      <line id=\"svg_39\" y2=\"16.888376\" x2=\"9.278311\" y1=\"17.047411\" x1=\"6.733758\"/>\n      <line id=\"svg_40\" y2=\"16.284045\" x2=\"10.661911\" y1=\"16.983797\" x1=\"8.992048\"/>\n      <line id=\"svg_41\" y2=\"15.313934\" x2=\"11.647925\" y1=\"16.395369\" x1=\"10.455166\"/>\n      <line id=\"svg_44\" y2=\"13.898527\" x2=\"12.82478\" y1=\"15.425259\" x1=\"11.504794\"/>\n      <line id=\"svg_45\" y2=\"12.037824\" x2=\"14.144766\" y1=\"14.312017\" x1=\"12.522614\"/>\n      <line id=\"svg_47\" y2=\"10.59061\" x2=\"14.605966\" y1=\"12.228665\" x1=\"13.953925\"/>\n      <ellipse ry=\"1\" rx=\"1\" id=\"svg_48\" cy=\"3.982726\" cx=\"13.460918\"/>\n    </g>", {
  viewBox: {
    x: 18,
    y: 18
  }
});
var lengthCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<g id=\"length-group\" fill=\"none\" stroke-width=\"1\" stroke=\"ACTIVE_COLOR\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n    <path id=\"length-dashes\" d=\"m22.5,6 -16.5,16.5\" stroke-width=\"3\" stroke-dasharray=\"0.6666,5\" />\n  </g>", {
  viewBox: {
    x: 24,
    y: 24
  }
});
var probeCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<path fill=\"ACTIVE_COLOR\" d=\"M1152 896q0 106-75 181t-181 75-181-75-75-181 75-181 181-75 181 75\n    75 181zm-256-544q-148 0-273 73t-198 198-73 273 73 273 198 198 273 73 273-73\n    198-198 73-273-73-273-198-198-273-73zm768 544q0 209-103 385.5t-279.5\n    279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5\n    385.5-103 385.5 103 279.5 279.5 103 385.5z\"\n  />", {
  viewBox: {
    x: 1792,
    y: 1792
  }
});
var rectangleRoiCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<path fill=\"ACTIVE_COLOR\" d=\"M1312 256h-832q-66 0-113 47t-47 113v832q0 66 47\n    113t113 47h832q66 0 113-47t47-113v-832q0-66-47-113t-113-47zm288 160v832q0\n    119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119\n    84.5-203.5t203.5-84.5h832q119 0 203.5 84.5t84.5 203.5z\"\n  />", {
  viewBox: {
    x: 1792,
    y: 1792
  }
});
var textMarkerCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<path fill=\"ACTIVE_COLOR\" d=\"M789 559l-170 450q33 0 136.5 2t160.5 2q19 0\n    57-2-87-253-184-452zm-725 1105l2-79q23-7 56-12.5t57-10.5 49.5-14.5 44.5-29\n    31-50.5l237-616 280-724h128q8 14 11 21l205 480q33 78 106 257.5t114 274.5q15\n    34 58 144.5t72 168.5q20 45 35 57 19 15 88 29.5t84 20.5q6 38 6 57 0 5-.5\n    13.5t-.5 12.5q-63 0-190-8t-191-8q-76 0-215 7t-178 8q0-43 4-78l131-28q1 0\n    12.5-2.5t15.5-3.5 14.5-4.5 15-6.5 11-8 9-11\n    2.5-14q0-16-31-96.5t-72-177.5-42-100l-450-2q-26 58-76.5 195.5t-50.5 162.5q0\n    22 14 37.5t43.5 24.5 48.5 13.5 57 8.5 41 4q1 19 1 58 0 9-2 27-58\n    0-174.5-10t-174.5-10q-8 0-26.5 4t-21.5 4q-80 14-188 14z\"\n  />", {
  viewBox: {
    x: 1792,
    y: 1792
  }
});
var crosshairsCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<path fill=\"ACTIVE_COLOR\" d=\"M1325 1024h-109q-26 0-45-19t-19-45v-128q0-26\n    19-45t45-19h109q-32-108-112.5-188.5t-188.5-112.5v109q0 26-19 45t-45\n    19h-128q-26 0-45-19t-19-45v-109q-108 32-188.5 112.5t-112.5 188.5h109q26\n    0 45 19t19 45v128q0 26-19 45t-45 19h-109q32 108 112.5 188.5t188.5\n    112.5v-109q0-26 19-45t45-19h128q26 0 45 19t19 45v109q108-32\n    188.5-112.5t112.5-188.5zm339-192v128q0 26-19 45t-45 19h-143q-37 161-154.5\n    278.5t-278.5 154.5v143q0 26-19 45t-45 19h-128q-26\n    0-45-19t-19-45v-143q-161-37-278.5-154.5t-154.5-278.5h-143q-26\n    0-45-19t-19-45v-128q0-26 19-45t45-19h143q37-161\n    154.5-278.5t278.5-154.5v-143q0-26 19-45t45-19h128q26 0 45 19t19 45v143q161\n    37 278.5 154.5t154.5 278.5h143q26 0 45 19t19 45z\"\n  />", {
  viewBox: {
    x: 1792,
    y: 1792
  }
});
var eraserCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<path transform=\"translate(0,1792) scale(1,-1)\" fill=\"ACTIVE_COLOR\" d=\"M960 1408l336-384h-768l-336 384h768zm1013-1077q15\n      34 9.5 71.5t-30.5 65.5l-896 1024q-38 44-96 44h-768q-38\n      0-69.5-20.5t-47.5-54.5q-15-34-9.5-71.5t30.5-65.5l896-1024q38-44 96-44h768q38\n      0 69.5 20.5t47.5 54.5z\"\n    />", {
  viewBox: {
    x: 2048,
    y: 1792
  }
});
var magnifyCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<path fill=\"ACTIVE_COLOR\" d=\"M508.5 481.6l-129-129c-2.3-2.3-5.3-3.5-8.5-3.5h-10.3C395\n      312 416 262.5 416 208 416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c54.5\n      0 104-21 141.1-55.2V371c0 3.2 1.3 6.2 3.5 8.5l129 129c4.7 4.7 12.3 4.7 17\n      0l9.9-9.9c4.7-4.7 4.7-12.3 0-17zM208 384c-97.3 0-176-78.7-176-176S110.7 32 208\n      32s176 78.7 176 176-78.7 176-176 176z\"\n    />", {
  viewBox: {
    x: 512,
    y: 512
  }
});
var panCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<path fill=\"ACTIVE_COLOR\" d=\"M1411 541l-355 355 355 355 144-144q29-31 70-14 39 17\n      39 59v448q0 26-19 45t-45 19h-448q-42 0-59-40-17-39 14-69l144-144-355-355-355\n      355 144 144q31 30 14 69-17 40-59 40h-448q-26 0-45-19t-19-45v-448q0-42 40-59\n      39-17 69 14l144 144 355-355-355-355-144 144q-19 19-45 19-12\n      0-24-5-40-17-40-59v-448q0-26 19-45t45-19h448q42 0 59 40 17 39-14 69l-144\n      144 355 355 355-355-144-144q-31-30-14-69 17-40 59-40h448q26 0 45 19t19\n      45v448q0 42-39 59-13 5-25 5-26 0-45-19z\"\n    />", {
  viewBox: {
    x: 1792,
    y: 1792
  }
});
var rotateCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<path fill=\"ACTIVE_COLOR\" d=\"M1664 256v448q0 26-19 45t-45 19h-448q-42 0-59-40-17-39\n      14-69l138-138q-148-137-349-137-104 0-198.5 40.5t-163.5 109.5-109.5\n      163.5-40.5 198.5 40.5 198.5 109.5 163.5 163.5 109.5 198.5 40.5q119 0\n      225-52t179-147q7-10 23-12 15 0 25 9l137 138q9 8 9.5 20.5t-7.5 22.5q-109\n      132-264 204.5t-327 72.5q-156 0-298-61t-245-164-164-245-61-298 61-298\n      164-245 245-164 298-61q147 0 284.5 55.5t244.5 156.5l130-129q29-31 70-14\n      39 17 39 59z\"\n    />", {
  viewBox: {
    x: 1792,
    y: 1792
  }
});
var stackScrollCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<path fill=\"ACTIVE_COLOR\" d=\"M24 21v2c0 0.547-0.453 1-1 1h-22c-0.547\n      0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1zM24 13v2c0\n      0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547\n      0 1 0.453 1 1zM24 5v2c0 0.547-0.453 1-1 1h-22c-0.547\n      0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1z\"\n      />", {
  viewBox: {
    x: 24,
    y: 28
  }
});
var wwwcRegionCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<path fill=\"ACTIVE_COLOR\" d=\"M1664 416v960q0 119-84.5 203.5t-203.5 84.5h-960q-119\n    0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960q119 0 203.5\n    84.5t84.5 203.5z\"\n  />", {
  viewBox: {
    x: 1792,
    y: 1792
  }
});
var wwwcCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<path fill=\"ACTIVE_COLOR\" d=\"M14.5,3.5 a1 1 0 0 1 -11,11 Z\" stroke=\"none\" opacity=\"0.8\" />\n    <circle cx=\"9\" cy=\"9\" r=\"8\" fill=\"none\" stroke-width=\"2\" stroke=\"ACTIVE_COLOR\" />", {
  viewBox: {
    x: 18,
    y: 18
  }
});
var zoomCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("<path fill=\"ACTIVE_COLOR\" d=\"M508.5 481.6l-129-129c-2.3-2.3-5.3-3.5-8.5-3.5h-10.3C395\n      312 416 262.5 416 208 416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c54.5\n      0 104-21 141.1-55.2V371c0 3.2 1.3 6.2 3.5 8.5l129 129c4.7 4.7 12.3 4.7 17\n      0l9.9-9.9c4.7-4.7 4.7-12.3 0-17zM208 384c-97.3 0-176-78.7-176-176S110.7 32 208\n      32s176 78.7 176 176-78.7 176-176 176z\"\n    />\n    <path fill=\"ACTIVE_COLOR\" transform=\"scale(0.22,0.22) translate(1400,0)\" d=\"M1216\n      320q0 26-19 45t-45 19h-128v1024h128q26 0 45 19t19 45-19 45l-256 256q-19\n      19-45 19t-45-19l-256-256q-19-19-19-45t19-45 45-19h128v-1024h-128q-26\n      0-45-19t-19-45 19-45l256-256q19-19 45-19t45 19l256 256q19 19 19 45z\"\n    />", {
  viewBox: {
    x: 640,
    y: 512
  }
});
var segToolCursorBoundaries = {
  x: 127,
  y: 60
};

var minusRect = function minusRect() {
  var color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'ACTIVE_COLOR';
  return "<rect fill=\"".concat(color, "\" x=\"80.19\" y=\"25.03\" width=\"47.14\" height=\"15.85\"/>");
};

var plusRect = function plusRect() {
  var color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'ACTIVE_COLOR';
  return "<rect fill=\"".concat(color, "\" x=\"80.19\" y=\"25.03\" width=\"47.14\" height=\"15.85\"/>\n      <rect fill=\"").concat(color, "\" x=\"95.84\" y=\"9.38\" width=\"15.85\" height=\"47.14\"/>");
};

var scissorIcon = "<path fill=\"ACTIVE_COLOR\" d=\"M82.89,10a12.09,12.09,0,0,0-16.8-2.5l-27.5,20.4-8.5-6.3a2.93,2.93,0,0,1-1.1-3,14.66,14.66,0,0,0,.1-6.6,14.08,14.08,0,1,0-6.5,15.2,2.87,2.87,0,0,1,3.2.2l8.2,6.1-8.2,6.1a2.87,2.87,0,0,1-3.2.2,14.16,14.16,0,1,0,6.7,14.4,14,14,0,0,0-.3-5.8,2.93,2.93,0,0,1,1.1-3l8.5-6.3,27.5,20.4A11.91,11.91,0,0,0,82.89,57l-31.7-23.5ZM15.29,21a5.9,5.9,0,1,1,5.9-5.9A5.91,5.91,0,0,1,15.29,21Zm0,36.8a5.9,5.9,0,1,1,5.9-5.9A5.91,5.91,0,0,1,15.29,57.77Zm28.3-21.5a2.8,2.8,0,1,1,2.8-2.8A2.8,2.8,0,0,1,43.59,36.27Z\" transform=\"translate(-1.17 -0.96)\"/>";
var rectangleIcon = "<path fill=\"ACTIVE_COLOR\" d=\"M8.86,2.25V66.08H72.69V2.25H8.86ZM65.28,58.67h-49v-49h49v49Z\" transform=\"translate(-8.86 -2.25)\"/>";
var circleIcon = "<path fill=\"ACTIVE_COLOR\" d=\"M40.77,2.25A31.92,31.92,0,1,0,72.69,34.16,31.92,31.92,0,0,0,40.77,2.25Zm0,57.63A25.71,25.71,0,1,1,66.48,34.16,25.71,25.71,0,0,1,40.77,59.87Z\" transform=\"translate(-8.86 -2.25)\"/>";
var freehandEraseInsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(scissorIcon, " ").concat(minusRect()), {
  viewBox: segToolCursorBoundaries
});
var freehandFillInsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(scissorIcon, " ").concat(plusRect()), {
  viewBox: segToolCursorBoundaries
});
var freehandEraseOutsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(scissorIcon, " ").concat(minusRect()), {
  viewBox: segToolCursorBoundaries
});
var freehandFillOutsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(scissorIcon, " ").concat(plusRect()), {
  viewBox: segToolCursorBoundaries
});
var segRectangleEraseInsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(rectangleIcon, " ").concat(minusRect()), {
  viewBox: segToolCursorBoundaries
});
var segRectangleFillInsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(rectangleIcon, " ").concat(plusRect()), {
  viewBox: segToolCursorBoundaries
});
var segRectangleEraseOutsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(rectangleIcon, " ").concat(minusRect()), {
  viewBox: segToolCursorBoundaries
});
var segRectangleFillOutsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(rectangleIcon, " ").concat(plusRect()), {
  viewBox: segToolCursorBoundaries
});
var segCircleEraseInsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(circleIcon, " ").concat(minusRect()), {
  viewBox: segToolCursorBoundaries
});
var segCircleFillInsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(circleIcon, " ").concat(plusRect()), {
  viewBox: segToolCursorBoundaries
});
var segCircleEraseOutsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(circleIcon, " ").concat(minusRect()), {
  viewBox: segToolCursorBoundaries
});
var segCircleFillOutsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(circleIcon, " ").concat(plusRect()), {
  viewBox: segToolCursorBoundaries
});

/***/ }),

/***/ "./tools/index.js":
/*!************************!*\
  !*** ./tools/index.js ***!
  \************************/
/*! exports provided: CrosshairsTool, DoubleTapFitToWindowTool, DragProbeTool, EraserTool, FreehandRoiSculptorTool, MagnifyTool, OverlayTool, OrientationMarkersTool, PanMultiTouchTool, PanTool, ReferenceLinesTool, RotateTool, RotateTouchTool, ScaleOverlayTool, StackScrollMouseWheelTool, StackScrollMultiTouchTool, StackScrollTool, WwwcRegionTool, WwwcTool, ZoomMouseWheelTool, ZoomTool, ZoomTouchPinchTool, default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1331966__) {

"use strict";
__nested_webpack_require_1331966__.r(__nested_webpack_exports__);
/* harmony import */ var _CrosshairsTool_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1331966__(/*! ./CrosshairsTool.js */ "./tools/CrosshairsTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "CrosshairsTool", function() { return _CrosshairsTool_js__WEBPACK_IMPORTED_MODULE_0__["default"]; });

/* harmony import */ var _DoubleTapFitToWindowTool_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1331966__(/*! ./DoubleTapFitToWindowTool.js */ "./tools/DoubleTapFitToWindowTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "DoubleTapFitToWindowTool", function() { return _DoubleTapFitToWindowTool_js__WEBPACK_IMPORTED_MODULE_1__["default"]; });

/* harmony import */ var _DragProbeTool_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1331966__(/*! ./DragProbeTool.js */ "./tools/DragProbeTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "DragProbeTool", function() { return _DragProbeTool_js__WEBPACK_IMPORTED_MODULE_2__["default"]; });

/* harmony import */ var _EraserTool_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1331966__(/*! ./EraserTool.js */ "./tools/EraserTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "EraserTool", function() { return _EraserTool_js__WEBPACK_IMPORTED_MODULE_3__["default"]; });

/* harmony import */ var _FreehandRoiSculptorTool_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1331966__(/*! ./FreehandRoiSculptorTool.js */ "./tools/FreehandRoiSculptorTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "FreehandRoiSculptorTool", function() { return _FreehandRoiSculptorTool_js__WEBPACK_IMPORTED_MODULE_4__["default"]; });

/* harmony import */ var _MagnifyTool_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1331966__(/*! ./MagnifyTool.js */ "./tools/MagnifyTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "MagnifyTool", function() { return _MagnifyTool_js__WEBPACK_IMPORTED_MODULE_5__["default"]; });

/* harmony import */ var _OverlayTool_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1331966__(/*! ./OverlayTool.js */ "./tools/OverlayTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "OverlayTool", function() { return _OverlayTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]; });

/* harmony import */ var _OrientationMarkersTool_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1331966__(/*! ./OrientationMarkersTool.js */ "./tools/OrientationMarkersTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "OrientationMarkersTool", function() { return _OrientationMarkersTool_js__WEBPACK_IMPORTED_MODULE_7__["default"]; });

/* harmony import */ var _PanMultiTouchTool_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1331966__(/*! ./PanMultiTouchTool.js */ "./tools/PanMultiTouchTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "PanMultiTouchTool", function() { return _PanMultiTouchTool_js__WEBPACK_IMPORTED_MODULE_8__["default"]; });

/* harmony import */ var _PanTool_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1331966__(/*! ./PanTool.js */ "./tools/PanTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "PanTool", function() { return _PanTool_js__WEBPACK_IMPORTED_MODULE_9__["default"]; });

/* harmony import */ var _ReferenceLinesTool_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1331966__(/*! ./ReferenceLinesTool.js */ "./tools/ReferenceLinesTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "ReferenceLinesTool", function() { return _ReferenceLinesTool_js__WEBPACK_IMPORTED_MODULE_10__["default"]; });

/* harmony import */ var _RotateTool_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1331966__(/*! ./RotateTool.js */ "./tools/RotateTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "RotateTool", function() { return _RotateTool_js__WEBPACK_IMPORTED_MODULE_11__["default"]; });

/* harmony import */ var _RotateTouchTool_js__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_1331966__(/*! ./RotateTouchTool.js */ "./tools/RotateTouchTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "RotateTouchTool", function() { return _RotateTouchTool_js__WEBPACK_IMPORTED_MODULE_12__["default"]; });

/* harmony import */ var _ScaleOverlayTool_js__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_1331966__(/*! ./ScaleOverlayTool.js */ "./tools/ScaleOverlayTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "ScaleOverlayTool", function() { return _ScaleOverlayTool_js__WEBPACK_IMPORTED_MODULE_13__["default"]; });

/* harmony import */ var _StackScrollMouseWheelTool_js__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_1331966__(/*! ./StackScrollMouseWheelTool.js */ "./tools/StackScrollMouseWheelTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "StackScrollMouseWheelTool", function() { return _StackScrollMouseWheelTool_js__WEBPACK_IMPORTED_MODULE_14__["default"]; });

/* harmony import */ var _StackScrollMultiTouchTool_js__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_1331966__(/*! ./StackScrollMultiTouchTool.js */ "./tools/StackScrollMultiTouchTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "StackScrollMultiTouchTool", function() { return _StackScrollMultiTouchTool_js__WEBPACK_IMPORTED_MODULE_15__["default"]; });

/* harmony import */ var _StackScrollTool_js__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_1331966__(/*! ./StackScrollTool.js */ "./tools/StackScrollTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "StackScrollTool", function() { return _StackScrollTool_js__WEBPACK_IMPORTED_MODULE_16__["default"]; });

/* harmony import */ var _WwwcRegionTool_js__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_1331966__(/*! ./WwwcRegionTool.js */ "./tools/WwwcRegionTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "WwwcRegionTool", function() { return _WwwcRegionTool_js__WEBPACK_IMPORTED_MODULE_17__["default"]; });

/* harmony import */ var _WwwcTool_js__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_1331966__(/*! ./WwwcTool.js */ "./tools/WwwcTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "WwwcTool", function() { return _WwwcTool_js__WEBPACK_IMPORTED_MODULE_18__["default"]; });

/* harmony import */ var _ZoomMouseWheelTool_js__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_1331966__(/*! ./ZoomMouseWheelTool.js */ "./tools/ZoomMouseWheelTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "ZoomMouseWheelTool", function() { return _ZoomMouseWheelTool_js__WEBPACK_IMPORTED_MODULE_19__["default"]; });

/* harmony import */ var _ZoomTool_js__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_1331966__(/*! ./ZoomTool.js */ "./tools/ZoomTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "ZoomTool", function() { return _ZoomTool_js__WEBPACK_IMPORTED_MODULE_20__["default"]; });

/* harmony import */ var _ZoomTouchPinchTool_js__WEBPACK_IMPORTED_MODULE_21__ = __nested_webpack_require_1331966__(/*! ./ZoomTouchPinchTool.js */ "./tools/ZoomTouchPinchTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1331966__.d(__nested_webpack_exports__, "ZoomTouchPinchTool", function() { return _ZoomTouchPinchTool_js__WEBPACK_IMPORTED_MODULE_21__["default"]; });






















 // Named Exports

 // Namespace, default export

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  CrosshairsTool: _CrosshairsTool_js__WEBPACK_IMPORTED_MODULE_0__["default"],
  DoubleTapFitToWindowTool: _DoubleTapFitToWindowTool_js__WEBPACK_IMPORTED_MODULE_1__["default"],
  DragProbeTool: _DragProbeTool_js__WEBPACK_IMPORTED_MODULE_2__["default"],
  EraserTool: _EraserTool_js__WEBPACK_IMPORTED_MODULE_3__["default"],
  FreehandRoiSculptorTool: _FreehandRoiSculptorTool_js__WEBPACK_IMPORTED_MODULE_4__["default"],
  MagnifyTool: _MagnifyTool_js__WEBPACK_IMPORTED_MODULE_5__["default"],
  OverlayTool: _OverlayTool_js__WEBPACK_IMPORTED_MODULE_6__["default"],
  OrientationMarkersTool: _OrientationMarkersTool_js__WEBPACK_IMPORTED_MODULE_7__["default"],
  PanMultiTouchTool: _PanMultiTouchTool_js__WEBPACK_IMPORTED_MODULE_8__["default"],
  PanTool: _PanTool_js__WEBPACK_IMPORTED_MODULE_9__["default"],
  ReferenceLinesTool: _ReferenceLinesTool_js__WEBPACK_IMPORTED_MODULE_10__["default"],
  RotateTool: _RotateTool_js__WEBPACK_IMPORTED_MODULE_11__["default"],
  RotateTouchTool: _RotateTouchTool_js__WEBPACK_IMPORTED_MODULE_12__["default"],
  ScaleOverlayTool: _ScaleOverlayTool_js__WEBPACK_IMPORTED_MODULE_13__["default"],
  StackScrollMouseWheelTool: _StackScrollMouseWheelTool_js__WEBPACK_IMPORTED_MODULE_14__["default"],
  StackScrollMultiTouchTool: _StackScrollMultiTouchTool_js__WEBPACK_IMPORTED_MODULE_15__["default"],
  StackScrollTool: _StackScrollTool_js__WEBPACK_IMPORTED_MODULE_16__["default"],
  WwwcRegionTool: _WwwcRegionTool_js__WEBPACK_IMPORTED_MODULE_17__["default"],
  WwwcTool: _WwwcTool_js__WEBPACK_IMPORTED_MODULE_18__["default"],
  ZoomMouseWheelTool: _ZoomMouseWheelTool_js__WEBPACK_IMPORTED_MODULE_19__["default"],
  ZoomTool: _ZoomTool_js__WEBPACK_IMPORTED_MODULE_20__["default"],
  ZoomTouchPinchTool: _ZoomTouchPinchTool_js__WEBPACK_IMPORTED_MODULE_21__["default"]
});

/***/ }),

/***/ "./tools/referenceLines/calculateReferenceLine.js":
/*!********************************************************!*\
  !*** ./tools/referenceLines/calculateReferenceLine.js ***!
  \********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1341726__) {

"use strict";
__nested_webpack_require_1341726__.r(__nested_webpack_exports__);
/* harmony import */ var _util_pointProjector_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1341726__(/*! ./../../util/pointProjector.js */ "./util/pointProjector.js");

/**
 * Calculates a reference line between two planes by projecting the top left hand corner and bottom right hand corner
 * Of the reference image onto the target image.  Ideally we would calculate the intersection between the planes but
 * That requires a bit more math and this works fine for most cases.
 *
 * @export
 * @public
 * @method
 * @name calculateReferenceLine
 * @param  {Object} targetImagePlane    The imagePlane on which the reference line will be drawn.
 * @param  {Object} referenceImagePlane The imagePlane being referenced.
 * @returns {Object}  The start and end points of the line to be drawn.
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (targetImagePlane, referenceImagePlane) {
  var points = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_0__["planePlaneIntersection"])(targetImagePlane, referenceImagePlane);

  if (!points) {
    return;
  }

  return {
    start: Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_0__["projectPatientPointToImagePlane"])(points.start, targetImagePlane),
    end: Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_0__["projectPatientPointToImagePlane"])(points.end, targetImagePlane)
  };
});

/***/ }),

/***/ "./tools/referenceLines/renderActiveReferenceLine.js":
/*!***********************************************************!*\
  !*** ./tools/referenceLines/renderActiveReferenceLine.js ***!
  \***********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1343531__) {

"use strict";
__nested_webpack_require_1343531__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1343531__(/*! ./../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _calculateReferenceLine_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1343531__(/*! ./calculateReferenceLine.js */ "./tools/referenceLines/calculateReferenceLine.js");
/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1343531__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js");
/* harmony import */ var _util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1343531__(/*! ./../../util/convertToVector3.js */ "./util/convertToVector3.js");
/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1343531__(/*! ./../../drawing/index.js */ "./drawing/index.js");





/**
 * Renders the active reference line.
 *
 * @export @public @method
 * @name renderActiveReferenceLine
 * @param  {Object} context        The canvas context.
 * @param  {Object} eventData      The data associated with the event.
 * @param  {HTMLElement} targetElement    The element on which to render the reference line.
 * @param  {HTMLElement} referenceElement The element referenced by the line.
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (context, eventData, targetElement, referenceElement) {
  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone;
  var targetImage = cornerstone.getEnabledElement(targetElement).image;
  var referenceImage = cornerstone.getEnabledElement(referenceElement).image; // Make sure the images are actually loaded for the target and reference

  if (!targetImage || !referenceImage) {
    return;
  }

  var targetImagePlane = cornerstone.metaData.get('imagePlaneModule', targetImage.imageId);
  var referenceImagePlane = cornerstone.metaData.get('imagePlaneModule', referenceImage.imageId); // Make sure the target and reference actually have image plane metadata

  if (!targetImagePlane || !referenceImagePlane || !targetImagePlane.rowCosines || !targetImagePlane.columnCosines || !targetImagePlane.imagePositionPatient || !referenceImagePlane.rowCosines || !referenceImagePlane.columnCosines || !referenceImagePlane.imagePositionPatient) {
    return;
  } // The image planes must be in the same frame of reference


  if (targetImagePlane.frameOfReferenceUID !== referenceImagePlane.frameOfReferenceUID) {
    return;
  }

  targetImagePlane.rowCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(targetImagePlane.rowCosines);
  targetImagePlane.columnCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(targetImagePlane.columnCosines);
  targetImagePlane.imagePositionPatient = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(targetImagePlane.imagePositionPatient);
  referenceImagePlane.rowCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(referenceImagePlane.rowCosines);
  referenceImagePlane.columnCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(referenceImagePlane.columnCosines);
  referenceImagePlane.imagePositionPatient = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(referenceImagePlane.imagePositionPatient); // The image plane normals must be > 30 degrees apart

  var targetNormal = targetImagePlane.rowCosines.clone().cross(targetImagePlane.columnCosines);
  var referenceNormal = referenceImagePlane.rowCosines.clone().cross(referenceImagePlane.columnCosines);
  var angleInRadians = targetNormal.angleTo(referenceNormal);
  angleInRadians = Math.abs(angleInRadians);

  if (angleInRadians < 0.5) {
    // 0.5 radians = ~30 degrees
    return;
  }

  var referenceLine = Object(_calculateReferenceLine_js__WEBPACK_IMPORTED_MODULE_1__["default"])(targetImagePlane, referenceImagePlane);

  if (!referenceLine) {
    return;
  }

  var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_2__["default"].getActiveColor(); // Draw the referenceLines

  context.setTransform(1, 0, 0, 1, 0, 0);
  Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_4__["draw"])(context, function (context) {
    Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_4__["drawLine"])(context, eventData.element, referenceLine.start, referenceLine.end, {
      color: color
    });
  });
});

/***/ }),

/***/ "./tools/segmentation/BrushTool.js":
/*!*****************************************!*\
  !*** ./tools/segmentation/BrushTool.js ***!
  \*****************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1348359__) {

"use strict";
__nested_webpack_require_1348359__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1348359__.d(__nested_webpack_exports__, "default", function() { return BrushTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1348359__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1348359__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1348359__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_1348359__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1348359__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_1348359__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1348359__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_1348359__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1348359__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_1348359__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1348359__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__nested_webpack_require_1348359__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1348359__(/*! ./../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1348359__(/*! ../base */ "./tools/base/index.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1348359__(/*! ./../../store/index.js */ "./store/index.js");
/* harmony import */ var _util_segmentation_index_js__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1348359__(/*! ../../util/segmentation/index.js */ "./util/segmentation/index.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1348359__(/*! ../../util/logger.js */ "./util/logger.js");











var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_10__["getLogger"])('tools:BrushTool');
var segmentationModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_8__["getModule"])('segmentation');
/**
 * @public
 * @class BrushTool
 * @memberof Tools.Brush
 * @classdesc Tool for drawing segmentations on an image.
 * @extends Tools.Base.BaseBrushTool
 */

var BrushTool =
/*#__PURE__*/
function (_BaseBrushTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(BrushTool, _BaseBrushTool);

  function BrushTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, BrushTool);

    var defaultProps = {
      name: 'Brush',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      configuration: {},
      mixins: ['renderBrushMixin']
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(BrushTool).call(this, props, defaultProps));
    _this.touchDragCallback = _this._paint.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    return _this;
  }
  /**
   * Paints the data to the labelmap.
   *
   * @protected
   * @param  {Object} evt The data object associated with the event.
   * @returns {void}
   */


  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(BrushTool, [{
    key: "_paint",
    value: function _paint(evt) {
      var configuration = segmentationModule.configuration;
      var eventData = evt.detail;
      var element = eventData.element;
      var _eventData$image = eventData.image,
          rows = _eventData$image.rows,
          columns = _eventData$image.columns;
      var _eventData$currentPoi = eventData.currentPoints.image,
          x = _eventData$currentPoi.x,
          y = _eventData$currentPoi.y;

      if (x < 0 || x > columns || y < 0 || y > rows) {
        return;
      }

      var radius = configuration.radius;
      var pointerArray = Object(_util_segmentation_index_js__WEBPACK_IMPORTED_MODULE_9__["getCircle"])(radius, rows, columns, x, y);
      var _this$paintEventData = this.paintEventData,
          labelmap2D = _this$paintEventData.labelmap2D,
          labelmap3D = _this$paintEventData.labelmap3D,
          shouldErase = _this$paintEventData.shouldErase; // Draw / Erase the active color.

      Object(_util_segmentation_index_js__WEBPACK_IMPORTED_MODULE_9__["drawBrushPixels"])(pointerArray, labelmap2D.pixelData, labelmap3D.activeSegmentIndex, columns, shouldErase);
      _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.updateImage(evt.detail.element);
    }
  }]);

  return BrushTool;
}(_base__WEBPACK_IMPORTED_MODULE_7__["BaseBrushTool"]);



/***/ }),

/***/ "./tools/segmentation/CircleScissorsTool.js":
/*!**************************************************!*\
  !*** ./tools/segmentation/CircleScissorsTool.js ***!
  \**************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1355148__) {

"use strict";
__nested_webpack_require_1355148__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1355148__.d(__nested_webpack_exports__, "default", function() { return CircleScissorsTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1355148__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1355148__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1355148__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_1355148__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1355148__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_1355148__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1355148__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_1355148__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1355148__(/*! ../base */ "./tools/base/index.js");
/* harmony import */ var _strategies__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1355148__(/*! ./strategies */ "./tools/segmentation/strategies/index.js");
/* harmony import */ var _cursors__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1355148__(/*! ../cursors */ "./tools/cursors/index.js");







/**
 * @public
 * @class CircleScissorsTool
 * @memberof Tools
 * @classdesc Tool for manipulating labelmap data by drawing a circle.
 * @extends Tools.Base.BaseTool
 */

var CircleScissorsTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3___default()(CircleScissorsTool, _BaseTool);

  /** @inheritdoc */
  function CircleScissorsTool() {
    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, CircleScissorsTool);

    var defaultProps = {
      name: 'CircleScissors',
      strategies: {
        FILL_INSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["fillInsideCircle"],
        FILL_OUTSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["fillOutsideCircle"],
        ERASE_OUTSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["eraseOutsideCircle"],
        ERASE_INSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["eraseInsideCircle"]
      },
      cursors: {
        FILL_INSIDE: _cursors__WEBPACK_IMPORTED_MODULE_6__["segCircleFillInsideCursor"],
        FILL_OUTSIDE: _cursors__WEBPACK_IMPORTED_MODULE_6__["segCircleFillOutsideCursor"],
        ERASE_OUTSIDE: _cursors__WEBPACK_IMPORTED_MODULE_6__["segCircleEraseOutsideCursor"],
        ERASE_INSIDE: _cursors__WEBPACK_IMPORTED_MODULE_6__["segCircleEraseInsideCursor"]
      },
      defaultStrategy: 'FILL_INSIDE',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      svgCursor: _cursors__WEBPACK_IMPORTED_MODULE_6__["segCircleFillInsideCursor"],
      mixins: ['circleSegmentationMixin']
    };
    return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2___default()(CircleScissorsTool).call(this, props, defaultProps));
  }

  return CircleScissorsTool;
}(_base__WEBPACK_IMPORTED_MODULE_4__["BaseTool"]);



/***/ }),

/***/ "./tools/segmentation/CorrectionScissorsTool.js":
/*!******************************************************!*\
  !*** ./tools/segmentation/CorrectionScissorsTool.js ***!
  \******************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1359780__) {

"use strict";
__nested_webpack_require_1359780__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1359780__.d(__nested_webpack_exports__, "default", function() { return CorrectionScissorsTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1359780__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1359780__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1359780__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_1359780__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1359780__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_1359780__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1359780__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_1359780__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1359780__(/*! ../base */ "./tools/base/index.js");
/* harmony import */ var _cursors__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1359780__(/*! ../cursors */ "./tools/cursors/index.js");
/* harmony import */ var _strategies__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1359780__(/*! ./strategies */ "./tools/segmentation/strategies/index.js");







/**
 * @public
 * @class CorrectionScissorsTool
 * @memberof Tools
 * @classdesc Tool for correcting segments on a labelmap.
 * @extends Tools.Base.BaseTool
 */

var CorrectionScissorsTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3___default()(CorrectionScissorsTool, _BaseTool);

  /** @inheritdoc */
  function CorrectionScissorsTool() {
    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, CorrectionScissorsTool);

    var defaultProps = {
      name: 'CorrectionScissors',
      strategies: {
        CORRECTION: _strategies__WEBPACK_IMPORTED_MODULE_6__["correction"]
      },
      cursors: {
        CORRECTION: _cursors__WEBPACK_IMPORTED_MODULE_5__["freehandFillInsideCursor"]
      },
      defaultStrategy: 'CORRECTION',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      svgCursor: _cursors__WEBPACK_IMPORTED_MODULE_5__["freehandFillInsideCursor"],
      mixins: ['polylineSegmentationMixin']
    };
    return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2___default()(CorrectionScissorsTool).call(this, props, defaultProps));
  }

  return CorrectionScissorsTool;
}(_base__WEBPACK_IMPORTED_MODULE_4__["BaseTool"]);



/***/ }),

/***/ "./tools/segmentation/FreehandScissorsTool.js":
/*!****************************************************!*\
  !*** ./tools/segmentation/FreehandScissorsTool.js ***!
  \****************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1363886__) {

"use strict";
__nested_webpack_require_1363886__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1363886__.d(__nested_webpack_exports__, "default", function() { return FreehandScissorsTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1363886__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1363886__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1363886__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_1363886__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1363886__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_1363886__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1363886__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_1363886__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _cursors__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1363886__(/*! ../cursors */ "./tools/cursors/index.js");
/* harmony import */ var _strategies__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1363886__(/*! ./strategies */ "./tools/segmentation/strategies/index.js");
/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1363886__(/*! ../base */ "./tools/base/index.js");







/**
 * @public
 * @class FreehandScissorsTool
 * @memberof Tools
 * @classdesc Tool for manipulating labelmap data by drawing a freehand polygon.
 * @extends Tools.Base.BaseTool
 */

var FreehandScissorsTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3___default()(FreehandScissorsTool, _BaseTool);

  /** @inheritdoc */
  function FreehandScissorsTool() {
    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, FreehandScissorsTool);

    var defaultProps = {
      name: 'FreehandScissors',
      strategies: {
        FILL_INSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["fillInsideFreehand"],
        FILL_OUTSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["fillOutsideFreehand"],
        ERASE_OUTSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["eraseOutsideFreehand"],
        ERASE_INSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["eraseInsideFreehand"]
      },
      cursors: {
        FILL_INSIDE: _cursors__WEBPACK_IMPORTED_MODULE_4__["freehandFillInsideCursor"],
        FILL_OUTSIDE: _cursors__WEBPACK_IMPORTED_MODULE_4__["freehandFillOutsideCursor"],
        ERASE_OUTSIDE: _cursors__WEBPACK_IMPORTED_MODULE_4__["freehandEraseOutsideCursor"],
        ERASE_INSIDE: _cursors__WEBPACK_IMPORTED_MODULE_4__["freehandEraseInsideCursor"]
      },
      defaultStrategy: 'FILL_INSIDE',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      svgCursor: _cursors__WEBPACK_IMPORTED_MODULE_4__["freehandFillInsideCursor"],
      mixins: ['freehandSegmentationMixin']
    };
    return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2___default()(FreehandScissorsTool).call(this, props, defaultProps));
  }

  return FreehandScissorsTool;
}(_base__WEBPACK_IMPORTED_MODULE_6__["BaseTool"]);



/***/ }),

/***/ "./tools/segmentation/RectangleScissorsTool.js":
/*!*****************************************************!*\
  !*** ./tools/segmentation/RectangleScissorsTool.js ***!
  \*****************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1368547__) {

"use strict";
__nested_webpack_require_1368547__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1368547__.d(__nested_webpack_exports__, "default", function() { return RectangleScissorsTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1368547__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1368547__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1368547__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_1368547__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1368547__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_1368547__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1368547__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_1368547__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1368547__(/*! ../base */ "./tools/base/index.js");
/* harmony import */ var _strategies__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1368547__(/*! ./strategies */ "./tools/segmentation/strategies/index.js");
/* harmony import */ var _cursors__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1368547__(/*! ../cursors */ "./tools/cursors/index.js");







/**
 * @public
 * @class RectangleScissorsTool
 * @memberof Tools
 * @classdesc Tool for manipulating labelmap data by drawing a rectangle.
 * @extends Tools.Base.BaseTool
 */

var RectangleScissorsTool =
/*#__PURE__*/
function (_BaseTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3___default()(RectangleScissorsTool, _BaseTool);

  /** @inheritdoc */
  function RectangleScissorsTool() {
    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, RectangleScissorsTool);

    var defaultProps = {
      name: 'RectangleScissors',
      strategies: {
        FILL_INSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["fillInsideRectangle"],
        FILL_OUTSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["fillOutsideRectangle"],
        ERASE_OUTSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["eraseOutsideRectangle"],
        ERASE_INSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["eraseInsideRectangle"]
      },
      cursors: {
        FILL_INSIDE: _cursors__WEBPACK_IMPORTED_MODULE_6__["segRectangleFillInsideCursor"],
        FILL_OUTSIDE: _cursors__WEBPACK_IMPORTED_MODULE_6__["segRectangleFillOutsideCursor"],
        ERASE_OUTSIDE: _cursors__WEBPACK_IMPORTED_MODULE_6__["segRectangleEraseOutsideCursor"],
        ERASE_INSIDE: _cursors__WEBPACK_IMPORTED_MODULE_6__["segRectangleEraseInsideCursor"]
      },
      defaultStrategy: 'FILL_INSIDE',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      mixins: ['rectangleSegmentationMixin']
    };
    return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2___default()(RectangleScissorsTool).call(this, props, defaultProps));
  }

  return RectangleScissorsTool;
}(_base__WEBPACK_IMPORTED_MODULE_4__["BaseTool"]);



/***/ }),

/***/ "./tools/segmentation/SphericalBrushTool.js":
/*!**************************************************!*\
  !*** ./tools/segmentation/SphericalBrushTool.js ***!
  \**************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1373135__) {

"use strict";
__nested_webpack_require_1373135__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1373135__.d(__nested_webpack_exports__, "default", function() { return SphericalBrushTool; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1373135__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1373135__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1373135__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_1373135__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1373135__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_1373135__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1373135__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nested_webpack_require_1373135__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1373135__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nested_webpack_require_1373135__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1373135__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__nested_webpack_require_1373135__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1373135__(/*! ./../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _base_BaseBrushTool_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1373135__(/*! ./../base/BaseBrushTool.js */ "./tools/base/BaseBrushTool.js");
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1373135__(/*! ./../../store/index.js */ "./store/index.js");
/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1373135__(/*! ./../../util/segmentation */ "./util/segmentation/index.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1373135__(/*! ../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1373135__(/*! ../../util/logger.js */ "./util/logger.js");













var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_11__["getLogger"])('tools:SphericalBrushTool');
var segmentationModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_8__["getModule"])('segmentation');
/**
 * @public
 * @class BrushTool
 * @memberof Tools.Brush
 * @classdesc Tool for drawing segmentations on an image.
 * @extends Tools.Base.BaseBrushTool
 */

var SphericalBrushTool =
/*#__PURE__*/
function (_BaseBrushTool) {
  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(SphericalBrushTool, _BaseBrushTool);

  function SphericalBrushTool() {
    var _this;

    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, SphericalBrushTool);

    var defaultProps = {
      name: 'SphericalBrush',
      supportedInteractionTypes: ['Mouse', 'Touch'],
      configuration: {
        alwaysEraseOnClick: false
      },
      mixins: ['renderBrushMixin']
    };
    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(SphericalBrushTool).call(this, props, defaultProps));
    _this.touchDragCallback = _this._paint.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this));
    return _this;
  }
  /**
   * Initialise painting with BaseBrushTool.
   *
   * @abstract
   * @event
   * @param {Object} evt - The event.
   * @returns {void}
   */


  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(SphericalBrushTool, [{
    key: "_startPainting",
    value: function _startPainting(evt) {
      var configuration = segmentationModule.configuration,
          getters = segmentationModule.getters;
      var eventData = evt.detail;
      var element = eventData.element,
          image = eventData.image;
      var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone;
      var radius = configuration.radius;
      var rows = image.rows,
          columns = image.columns;
      var pixelSpacing = Math.max(image.rowPixelSpacing, image.columnPixelSpacing);
      var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["getToolState"])(element, 'stack');
      var stackData = stackState.data[0];
      var imageIds = stackData.imageIds;

      var _getters$labelmap2D = getters.labelmap2D(element),
          labelmap2D = _getters$labelmap2D.labelmap2D,
          labelmap3D = _getters$labelmap2D.labelmap3D,
          currentImageIdIndex = _getters$labelmap2D.currentImageIdIndex,
          activeLabelmapIndex = _getters$labelmap2D.activeLabelmapIndex;

      var shouldErase = this._isCtrlDown(eventData) || this.configuration.alwaysEraseOnClick;
      var imagePlaneOfCurrentImage = cornerstone.metaData.get('imagePlaneModule', image.imageId);
      var imagesInRange;

      if (imagePlaneOfCurrentImage) {
        var ippOfCurrentImage = imagePlaneOfCurrentImage.imagePositionPatient;
        imagesInRange = this._getImagesInRange(currentImageIdIndex, ippOfCurrentImage, imageIds, radius, pixelSpacing);
      } else {
        logger.warn("No imagePlane metadata found for image, defaulting to circle brush application.");
        imagesInRange = [// The current image.
        {
          imageIdIndex: currentImageIdIndex,
          radiusOnImage: radius
        }];
      }

      this.paintEventData = {
        labelmap2D: labelmap2D,
        labelmap3D: labelmap3D,
        currentImageIdIndex: currentImageIdIndex,
        activeLabelmapIndex: activeLabelmapIndex,
        shouldErase: shouldErase,
        imagesInRange: imagesInRange
      };

      if (configuration.storeHistory) {
        var previousPixeldataForImagesInRange = [];

        for (var i = 0; i < imagesInRange.length; i++) {
          var imageIdIndex = imagesInRange[i].imageIdIndex;
          var labelmap2DForImageIdIndex = getters.labelmap2DByImageIdIndex(labelmap3D, imageIdIndex, rows, columns);
          var previousPixeldata = labelmap2DForImageIdIndex.pixelData.slice();
          previousPixeldataForImagesInRange.push(previousPixeldata);
        }

        this.paintEventData.previousPixeldataForImagesInRange = previousPixeldataForImagesInRange;
      }
    }
    /**
     * Paints the data to the labelmap.
     *
     * @private
     * @param  {Object} evt The data object associated with the event.
     * @returns {void}
     */

  }, {
    key: "_paint",
    value: function _paint(evt) {
      var getters = segmentationModule.getters;
      var eventData = evt.detail;
      var element = eventData.element;
      var image = eventData.image;
      var rows = image.rows,
          columns = image.columns;
      var _eventData$currentPoi = eventData.currentPoints.image,
          x = _eventData$currentPoi.x,
          y = _eventData$currentPoi.y;

      if (x < 0 || x > columns || y < 0 || y > rows) {
        return;
      }

      var _this$paintEventData = this.paintEventData,
          labelmap3D = _this$paintEventData.labelmap3D,
          imagesInRange = _this$paintEventData.imagesInRange,
          shouldErase = _this$paintEventData.shouldErase;

      for (var i = 0; i < imagesInRange.length; i++) {
        var _imagesInRange$i = imagesInRange[i],
            imageIdIndex = _imagesInRange$i.imageIdIndex,
            radiusOnImage = _imagesInRange$i.radiusOnImage;
        var pointerArray = Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_9__["getCircle"])(radiusOnImage, rows, columns, x, y); // Cache the view on this image if its not present.

        var labelmap2DForImageIdIndex = getters.labelmap2DByImageIdIndex(labelmap3D, imageIdIndex, rows, columns); // Draw / Erase the active color.

        Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_9__["drawBrushPixels"])(pointerArray, labelmap2DForImageIdIndex.pixelData, labelmap3D.activeSegmentIndex, columns, shouldErase);
      }

      _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.updateImage(evt.detail.element);
    }
    /**
     * _getImagesInRange - Returns an array of image Ids within range of the
     * sphere, and the in-plane brush radii of those images.
     *
     * @param  {string} currentImageIdIndex The imageId of the image displayed on
     *                                   the cornerstone enabled element.
     * @param  {number[]} ippOfCurrentImage   The image position patient of the image.
     * @param  {string[]} imageIds           An array of images in the stack.
     * @param  {number} radius             The radius of the sphere.
     * @param  {number} pixelSpacing       The pixelSpacing.
     * @returns {Object[]}                   An array of imageIds in range and their
     *                                   in plane brush radii.
     */

  }, {
    key: "_getImagesInRange",
    value: function _getImagesInRange(currentImageIdIndex, ippOfCurrentImage, imageIds, radius, pixelSpacing) {
      var radiusInMM = radius * pixelSpacing;
      var imagesInRange = [// The current image.
      {
        imageIdIndex: currentImageIdIndex,
        radiusOnImage: radius
      }]; // Check images above

      for (var i = currentImageIdIndex + 1; i < imageIds.length; i++) {
        var radiusOnImage = this._getRadiusOnImage(imageIds[i], ippOfCurrentImage, radiusInMM, pixelSpacing);

        if (!radiusOnImage) {
          break;
        }

        imagesInRange.push({
          imageIdIndex: i,
          radiusOnImage: radiusOnImage
        });
      } // Check images below


      for (var _i = currentImageIdIndex - 1; _i >= 0; _i--) {
        var _radiusOnImage = this._getRadiusOnImage(imageIds[_i], ippOfCurrentImage, radiusInMM, pixelSpacing);

        if (!_radiusOnImage) {
          break;
        }

        imagesInRange.push({
          imageIdIndex: _i,
          radiusOnImage: _radiusOnImage
        });
      }

      return imagesInRange;
    }
    /**
     * _getRadiusOnImage - If the image is in range of the spherical brush, returns
     *                     the in-plane brush radius on that image.
     *
     * @param  {string} imageId           The cornerstone imageId of the image.
     * @param  {number[]} ippOfCurrentImage The image position patient of the current image.
     * @param  {number} radiusInMM        The radius of the sphere in millimeters.
     * @param  {string} pixelSpacing      The pixelspacing.
     * @returns {number|undefined}        The brush radius on the image, undefined if
     *                                    the image is out of range of the sphere.
     */

  }, {
    key: "_getRadiusOnImage",
    value: function _getRadiusOnImage(imageId, ippOfCurrentImage, radiusInMM, pixelSpacing) {
      var imagePlane = _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.metaData.get('imagePlaneModule', imageId);

      if (!imagePlane) {
        logger.warn("Can't find imagePlane metadata for image, cancelling spherical brushing on: ".concat(imageId, ","));
        return;
      }

      var ipp = imagePlane.imagePositionPatient;
      var distance = Math.sqrt(Math.pow(ipp[0] - ippOfCurrentImage[0], 2) + Math.pow(ipp[1] - ippOfCurrentImage[1], 2) + Math.pow(ipp[2] - ippOfCurrentImage[2], 2));

      if (distance > radiusInMM) {
        // Image too far away, break!
        return;
      }

      return Math.floor(Math.sqrt(Math.pow(radiusInMM, 2) - Math.pow(distance, 2)) / pixelSpacing);
    }
  }, {
    key: "_endPainting",
    value: function _endPainting(evt) {
      var _this$paintEventData2 = this.paintEventData,
          labelmap3D = _this$paintEventData2.labelmap3D,
          imagesInRange = _this$paintEventData2.imagesInRange;
      var operations = [];
      var configuration = segmentationModule.configuration,
          setters = segmentationModule.setters;

      for (var i = 0; i < imagesInRange.length; i++) {
        var imageIdIndex = imagesInRange[i].imageIdIndex;
        var labelmap2D = labelmap3D.labelmaps2D[imageIdIndex]; // Grab the labels on the slice.

        var segmentSet = new Set(labelmap2D.pixelData);
        var iterator = segmentSet.values();
        var segmentsOnLabelmap = [];
        var done = false;

        while (!done) {
          var next = iterator.next();
          done = next.done;

          if (!done) {
            segmentsOnLabelmap.push(next.value);
          }
        }

        labelmap2D.segmentsOnLabelmap = segmentsOnLabelmap;

        if (configuration.storeHistory) {
          var previousPixeldataForImagesInRange = this.paintEventData.previousPixeldataForImagesInRange;
          var previousPixeldata = previousPixeldataForImagesInRange[i];
          var _labelmap2D = labelmap3D.labelmaps2D[imageIdIndex];
          var newPixelData = _labelmap2D.pixelData;
          operations.push({
            imageIdIndex: imageIdIndex,
            diff: Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_9__["getDiffBetweenPixelData"])(previousPixeldata, newPixelData)
          });
        }
      }

      if (configuration.storeHistory) {
        setters.pushState(this.element, operations);
      }

      Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_9__["triggerLabelmapModifiedEvent"])(this.element);
    }
  }]);

  return SphericalBrushTool;
}(_base_BaseBrushTool_js__WEBPACK_IMPORTED_MODULE_7__["default"]);



/***/ }),

/***/ "./tools/segmentation/index.js":
/*!*************************************!*\
  !*** ./tools/segmentation/index.js ***!
  \*************************************/
/*! exports provided: BrushTool, SphericalBrushTool, FreehandScissorsTool, RectangleScissorsTool, CircleScissorsTool, CorrectionScissorsTool, default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1388747__) {

"use strict";
__nested_webpack_require_1388747__.r(__nested_webpack_exports__);
/* harmony import */ var _BrushTool__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1388747__(/*! ./BrushTool */ "./tools/segmentation/BrushTool.js");
/* harmony import */ var _SphericalBrushTool__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1388747__(/*! ./SphericalBrushTool */ "./tools/segmentation/SphericalBrushTool.js");
/* harmony import */ var _FreehandScissorsTool__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1388747__(/*! ./FreehandScissorsTool */ "./tools/segmentation/FreehandScissorsTool.js");
/* harmony import */ var _RectangleScissorsTool__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1388747__(/*! ./RectangleScissorsTool */ "./tools/segmentation/RectangleScissorsTool.js");
/* harmony import */ var _CircleScissorsTool__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1388747__(/*! ./CircleScissorsTool */ "./tools/segmentation/CircleScissorsTool.js");
/* harmony import */ var _CorrectionScissorsTool__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1388747__(/*! ./CorrectionScissorsTool */ "./tools/segmentation/CorrectionScissorsTool.js");
/* harmony reexport (safe) */ __nested_webpack_require_1388747__.d(__nested_webpack_exports__, "BrushTool", function() { return _BrushTool__WEBPACK_IMPORTED_MODULE_0__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1388747__.d(__nested_webpack_exports__, "SphericalBrushTool", function() { return _SphericalBrushTool__WEBPACK_IMPORTED_MODULE_1__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1388747__.d(__nested_webpack_exports__, "FreehandScissorsTool", function() { return _FreehandScissorsTool__WEBPACK_IMPORTED_MODULE_2__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1388747__.d(__nested_webpack_exports__, "RectangleScissorsTool", function() { return _RectangleScissorsTool__WEBPACK_IMPORTED_MODULE_3__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1388747__.d(__nested_webpack_exports__, "CircleScissorsTool", function() { return _CircleScissorsTool__WEBPACK_IMPORTED_MODULE_4__["default"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1388747__.d(__nested_webpack_exports__, "CorrectionScissorsTool", function() { return _CorrectionScissorsTool__WEBPACK_IMPORTED_MODULE_5__["default"]; });






 // Named Exports






 // Namespace, default export

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  BrushTool: _BrushTool__WEBPACK_IMPORTED_MODULE_0__["default"],
  SphericalBrushTool: _SphericalBrushTool__WEBPACK_IMPORTED_MODULE_1__["default"],
  CircleScissorsTool: _CircleScissorsTool__WEBPACK_IMPORTED_MODULE_4__["default"],
  CorrectionScissorsTool: _CorrectionScissorsTool__WEBPACK_IMPORTED_MODULE_5__["default"],
  FreehandScissorsTool: _FreehandScissorsTool__WEBPACK_IMPORTED_MODULE_2__["default"],
  RectangleScissorsTool: _RectangleScissorsTool__WEBPACK_IMPORTED_MODULE_3__["default"]
});

/***/ }),

/***/ "./tools/segmentation/strategies/correction.js":
/*!*****************************************************!*\
  !*** ./tools/segmentation/strategies/correction.js ***!
  \*****************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1391888__) {

"use strict";
__nested_webpack_require_1391888__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1391888__.d(__nested_webpack_exports__, "default", function() { return correction; });
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1391888__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1391888__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1391888__(/*! ./index.js */ "./tools/segmentation/strategies/index.js");
/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1391888__(/*! ../../../util/segmentation */ "./util/segmentation/index.js");
/* harmony import */ var _util_clip__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1391888__(/*! ../../../util/clip */ "./util/clip.js");
/* harmony import */ var _util_isPointInImage__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1391888__(/*! ../../../util/isPointInImage */ "./util/isPointInImage.js");
/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1391888__(/*! ../../../util/logger */ "./util/logger.js");






var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_5__["getLogger"])('util:segmentation:operations:correction');
/**
 * Using the stroke given, determine which action(s) to perfom:
 * - Stroke starts and ends inside a segmentation: Behaves as an subtractive freehand scissors.
 * - Stroke starts and ends outside a segmentation: Behaves as an additive freehand scissors.
 * - Stroke out-in-out: Section is subtracted.
 * - Stroke in-out-in: Section is added.
 *
 * @param  {Object} evt The cornerstone event.
 * @param  {Object} operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 *
 * @returns {null}
 */

function correction(evt, operationData) {
  var pixelData = operationData.pixelData,
      segmentIndex = operationData.segmentIndex,
      segmentationMixinType = operationData.segmentationMixinType;

  if (segmentationMixinType !== "freehandSegmentationMixin") {
    logger.error("correction operation requires freehandSegmentationMixin operationData, recieved ".concat(segmentationMixinType));
    return;
  }

  var nodes = snapPointsToGrid(evt, operationData);
  var scissorOperation = checkIfSimpleScissorOperation(nodes, segmentIndex);

  if (scissorOperation.isScissorOperation) {
    if (scissorOperation.operation === 'fillInsideFreehand') {
      logger.warn('The line never intersects a segment.');
      Object(_index_js__WEBPACK_IMPORTED_MODULE_1__["fillInsideFreehand"])(evt, operationData);
    } else if (scissorOperation.operation === 'eraseInsideFreehand') {
      logger.warn('The line is only ever inside the segment.');
      Object(_index_js__WEBPACK_IMPORTED_MODULE_1__["eraseInsideFreehand"])(evt, operationData);
    }

    return;
  } // Create binary labelmap with only this segment for calculations of each operation.


  var workingLabelMap = new Uint8Array(pixelData.length);
  var operations = splitLineIntoSeperateOperations(nodes, segmentIndex);
  operations.forEach(function (operation) {
    performOperation(operation, pixelData, workingLabelMap, segmentIndex, evt);
  });
}
/**
 * Snap the freehand points to the labelmap grid and attach a label for each node.
 *
 * @param  {Object[]} points An array of points drawn by the user.
 * @param  {UInt16Array|Float32Array} pixelData The 2D labelmap.
 * @param  {Object} evt The cornerstone event.
 * @returns {Object[]}
 */

function snapPointsToGrid(evt, operationData) {
  var pixelData = operationData.pixelData,
      points = operationData.points;
  var image = evt.detail.image;
  var cols = image.width;
  var rows = image.height;
  var nodes = [];

  for (var i = 0; i < points.length; i++) {
    var point = points[i];
    var x = Math.floor(point.x);
    var y = Math.floor(point.y); // Clamp within the confines of the image.

    x = Object(_util_clip__WEBPACK_IMPORTED_MODULE_3__["default"])(x, 0, cols - 1);
    y = Object(_util_clip__WEBPACK_IMPORTED_MODULE_3__["default"])(y, 0, rows - 1);
    var lastNode = nodes[nodes.length - 1]; // Skip double counting of closely drawn freehand points.

    if (lastNode && x === lastNode.x && y === lastNode.y) {
      continue;
    }

    nodes.push({
      x: x,
      y: y,
      segment: pixelData[y * cols + x]
    });
  }

  return nodes;
}
/**
 * Check if the operation is a simple scissors add/remove.
 * @param  {Object[]} nodes - The nodes snapped to the grid.
 * @param  {number} segmentIndex
 * @returns {Object} Information about the operation.
 *                   `isScissorOperation` is true if the operation is a simple scissor.
 *                   If `isScissorOperation` is true, `operation` says which operation.
 */


function checkIfSimpleScissorOperation(nodes, segmentIndex) {
  var allInside = true;
  var allOutside = true;

  for (var i = 0; i < nodes.length; i++) {
    var node = nodes[i];

    if (node.segment === segmentIndex) {
      allOutside = false;
    } else {
      allInside = false;
    }

    if (!allInside && !allOutside) {
      break;
    }
  }

  if (allOutside) {
    return {
      isScissorOperation: true,
      operation: 'fillInsideFreehand'
    };
  } else if (allInside) {
    return {
      isScissorOperation: true,
      operation: 'eraseInsideFreehand'
    };
  }

  return {
    isScissorOperation: false
  };
}
/**
 * Performs the given add/subtract operation using a modification of the Tobias Heimann Correction Algorithm:
 * The algorithm is described in full length in Tobias Heimann's diploma thesis (MBI Technical Report 145, p. 37 - 40).
 *
 * @param  {Object} operation The operation.
 * @param  {UInt16Array|Float32Array} pixelData The 2D labelmap.
 * @param  {UInt16Array|Float32Array} workingLabelMap A copy of the labelmap for processing purposes.
 * @param  {number} segmentIndex The label of the tool being used.
 * @param  {Object} evt The cornerstone event.
 */


function performOperation(operation, pixelData, workingLabelMap, segmentIndex, evt) {
  var _evt$detail$image = evt.detail.image,
      cols = _evt$detail$image.width,
      rows = _evt$detail$image.height;
  var nodes = operation.nodes,
      additive = operation.additive;
  var shouldFillOver = additive ? 0 : 1; // Local getters to swap from cornerstone vector notation and flattened array indicies.

  var getPixelIndex = function getPixelIndex(pixelCoord) {
    return pixelCoord.y * cols + pixelCoord.x;
  };

  var getPixelCoordinateFromPixelIndex = function getPixelCoordinateFromPixelIndex(pixelIndex) {
    return {
      x: pixelIndex % cols,
      y: Math.floor(pixelIndex / cols)
    };
  };

  if (additive) {
    logger.warn('additive operation...');
  } else {
    logger.warn('subtractive operation...');
  }

  var _getPixelPaths = getPixelPaths(nodes),
      pixelPath = _getPixelPaths.pixelPath,
      leftPath = _getPixelPaths.leftPath,
      rightPath = _getPixelPaths.rightPath; // Find extent of region for floodfill (This segment + the drawn loop).
  // This is to reduce the extent of the outwards floodfill, which constitutes 99% of the computation.


  var firstPixelOnPath = pixelPath[0];
  var boundingBox = {
    xMin: firstPixelOnPath.x,
    xMax: firstPixelOnPath.x,
    yMin: firstPixelOnPath.y,
    yMax: firstPixelOnPath.y
  }; // ...whilst also initializing the workingLabelmap

  for (var i = 0; i < workingLabelMap.length; i++) {
    if (pixelData[i] === segmentIndex) {
      var pixel = getPixelCoordinateFromPixelIndex(i);
      expandBoundingBox(boundingBox, pixel);
      workingLabelMap[i] = 1;
    } else {
      workingLabelMap[i] = 0;
    }
  } // Set workingLabelmap pixelPath to 2 to form a
  // Boundary in the working labelmap to contain the flood fills.


  for (var _i = 0; _i < pixelPath.length; _i++) {
    var _pixel = pixelPath[_i];
    workingLabelMap[getPixelIndex(_pixel)] = 2;
    expandBoundingBox(boundingBox, _pixel);
  }

  clipBoundingBox(boundingBox, rows, cols);
  var xMin = boundingBox.xMin,
      xMax = boundingBox.xMax,
      yMin = boundingBox.yMin,
      yMax = boundingBox.yMax; // Define a getter for the fill routine to access the working label map.

  function getter(x, y) {
    // Check if out of bounds, as the flood filler doesn't know about the dimensions of
    // The data structure. E.g. if cols is 10, (0,1) and (10, 0) would point to the same
    // position in this getter.
    if (x >= xMax || x < xMin || y >= yMax || y < yMin) {
      return;
    }

    return workingLabelMap[y * cols + x];
  }

  var leftArea = 0;
  var rightArea = 0; // Traverse the path whilst pouring paint off the left and right sides.

  for (var _i2 = 0; _i2 < leftPath.length; _i2++) {
    // Left fill
    var leftPixel = leftPath[_i2];
    var leftValue = workingLabelMap[getPixelIndex(leftPixel)];

    if (leftValue === shouldFillOver && Object(_util_isPointInImage__WEBPACK_IMPORTED_MODULE_4__["default"])(leftPixel, rows, cols)) {
      leftArea += fillFromPixel(leftPixel, 3, workingLabelMap, getter, cols);
    } // Right fill


    var rightPixel = rightPath[_i2];
    var rightValue = workingLabelMap[getPixelIndex(rightPixel)];

    if (rightValue === shouldFillOver && Object(_util_isPointInImage__WEBPACK_IMPORTED_MODULE_4__["default"])(rightPixel, rows, cols)) {
      rightArea += fillFromPixel(rightPixel, 4, workingLabelMap, getter, cols);
    }
  }

  if (leftArea === 0 || rightArea === 0) {
    // The areas are connected, therefore the start and end
    // Of the path go through unconnected regions, exit.
    return;
  }

  var replaceValue = additive ? segmentIndex : 0; // Fill in smallest area.

  var fillValue = leftArea < rightArea ? 3 : 4;

  for (var _i3 = 0; _i3 < workingLabelMap.length; _i3++) {
    if (workingLabelMap[_i3] === fillValue) {
      pixelData[_i3] = replaceValue;
    }
  }

  if (replaceValue === segmentIndex) {
    // Fill in the path.
    for (var _i4 = 0; _i4 < pixelPath.length; _i4++) {
      pixelData[getPixelIndex(pixelPath[_i4])] = segmentIndex;
    }
  } else {
    // Only erase this segment.
    for (var _i5 = 0; _i5 < pixelPath.length; _i5++) {
      var pixelIndex = getPixelIndex(pixelPath[_i5]);

      if (pixelData[pixelIndex] === segmentIndex) {
        pixelData[pixelIndex] = 0;
      }
    }
  }
}
/**
 * Expands the bounding box if the pixel falls outside it.
 *
 * @param  {Object} boundingBox The bounding box.
 * @param  {Object} pixel The pixel.
 * @returns {null}
 */


function expandBoundingBox(boundingBox, pixel) {
  var x = pixel.x,
      y = pixel.y;

  if (x < boundingBox.xMin) {
    boundingBox.xMin = x;
  }

  if (x > boundingBox.xMax) {
    boundingBox.xMax = x;
  }

  if (y < boundingBox.yMin) {
    boundingBox.yMin = y;
  }

  if (y > boundingBox.yMax) {
    boundingBox.yMax = y;
  }
}
/**
 * Expands the bounding box by 2 px and then clips it to the image size.
 * @param  {Object} boundingBox The bounding box.
 * @param  {number} rows The number of rows.
 * @param  {number} cols The number of columns.
 * @returns {null}
 */


function clipBoundingBox(boundingBox, rows, cols) {
  // Add a 2px border to stop the floodfill starting out of bounds and exploading.
  var border = 2;
  boundingBox.xMax = Math.min(boundingBox.xMax + border, cols);
  boundingBox.xMin = Math.max(boundingBox.xMin - border, 0);
  boundingBox.yMax = Math.min(boundingBox.yMax + border, rows);
  boundingBox.yMin = Math.max(boundingBox.yMin - border, 0);
}
/**
 * Performs a floodfill from the given pixel to the workingLabelMap.
 * @param  {Object} pixel The pixel.
 * @param  {number} fillValue The fill value.
 * @param  {UInt8Array} workingLabelMap The working labelmap.
 * @param  {function} getter The getter function for pixels in the labelmap.
 * @param  {number} cols The number of columns.
 * @returns {number} The number of pixels flooded.
 */


function fillFromPixel(pixel, fillValue, workingLabelMap, getter, cols) {
  var result = Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_2__["floodFill"])(getter, [pixel.x, pixel.y]);
  var flooded = result.flooded;

  for (var p = 0; p < flooded.length; p++) {
    var floodedI = flooded[p];
    workingLabelMap[floodedI[1] * cols + floodedI[0]] = fillValue;
  }

  return flooded.length;
}
/**
 * Interpolates the pixelPath using an obstacleless path finding algorithm.
 * @param  {Object[]} nodes The nodes to interpolate between.
 * @returns {Object} The pixelPath, and the path to the left and right of it.
 */


function getPixelPaths(nodes) {
  var pixelPath = [];

  for (var i = 0; i < nodes.length - 1; i++) {
    // Push the node.
    pixelPath.push(nodes[i]); // Path towards next node.

    pixelPath.push.apply(pixelPath, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_2__["getPixelPathBetweenPixels"])(nodes[i], nodes[i + 1])));
  } // Push final node.


  pixelPath.push[nodes[nodes.length - 1]]; // Get paths on either side.

  var leftPath = [];
  var rightPath = [];

  for (var _i6 = 0; _i6 < pixelPath.length - 1; _i6++) {
    var _getNodesPerpendicula = getNodesPerpendicularToPathPixel(pixelPath[_i6], pixelPath[_i6 + 1]),
        left = _getNodesPerpendicula.left,
        right = _getNodesPerpendicula.right;

    leftPath.push(left);
    rightPath.push(right);
  }

  return {
    pixelPath: pixelPath,
    leftPath: leftPath,
    rightPath: rightPath
  };
}
/**
 * Using the current and next pixel on the path, determine the adjacent pixels
 * which are perpendicular to the path direction. (i.e. to the left and to the right).
 *
 * @param  {Object} pathPixel The pixel being queried.
 * @param  {Object} nextPathPixel the pathPixel's successor.
 *
 * @returns {Object} The coordinates of the left and right perpendicular pixels.
 */


function getNodesPerpendicularToPathPixel(pathPixel, nextPathPixel) {
  var direction = {
    x: nextPathPixel.x - pathPixel.x,
    y: nextPathPixel.y - pathPixel.y
  }; // P = pathPixel, n = nextPathPixel, L = left, R = right
  //
  // |n| |R|  | |n| |  |L| |n|
  // | |p| |  |L|p|R|  | |p| |
  // |L| | |  | | | |  | | |R|
  //
  // | |R| |           | |L| |
  // |n|p| |           | |p|n|
  // | |L| |           | |R| |
  //
  // |R| | |  | | | |  | | |L|
  // | |p| |  |R|p|L|  | |p| |
  // |n| |L|  | |n| |  |R| |n|

  if (direction.x === -1 && direction.y === 1) {
    return {
      left: {
        x: pathPixel.x - 1,
        y: pathPixel.y - 1
      },
      right: {
        x: pathPixel.x + 1,
        y: pathPixel.y + 1
      }
    };
  } else if (direction.x === 0 && direction.y === 1) {
    return {
      left: {
        x: pathPixel.x - 1,
        y: pathPixel.y
      },
      right: {
        x: pathPixel.x + 1,
        y: pathPixel.y
      }
    };
  } else if (direction.x === 1 && direction.y === 1) {
    return {
      left: {
        x: pathPixel.x - 1,
        y: pathPixel.y + 1
      },
      right: {
        x: pathPixel.x + 1,
        y: pathPixel.y - 1
      }
    };
  } else if (direction.x === 1 && direction.y === 0) {
    return {
      left: {
        x: pathPixel.x,
        y: pathPixel.y + 1
      },
      right: {
        x: pathPixel.x,
        y: pathPixel.y - 1
      }
    };
  } else if (direction.x === 1 && direction.y === -1) {
    return {
      left: {
        x: pathPixel.x + 1,
        y: pathPixel.y + 1
      },
      right: {
        x: pathPixel.x - 1,
        y: pathPixel.y - 1
      }
    };
  } else if (direction.x === 0 && direction.y === -1) {
    return {
      left: {
        x: pathPixel.x + 1,
        y: pathPixel.y
      },
      right: {
        x: pathPixel.x - 1,
        y: pathPixel.y
      }
    };
  } else if (direction.x === -1 && direction.y === -1) {
    return {
      left: {
        x: pathPixel.x + 1,
        y: pathPixel.y - 1
      },
      right: {
        x: pathPixel.x - 1,
        y: pathPixel.y + 1
      }
    };
  } else if (direction.x === -1 && direction.y === 0) {
    return {
      left: {
        x: pathPixel.x,
        y: pathPixel.y - 1
      },
      right: {
        x: pathPixel.x,
        y: pathPixel.y + 1
      }
    };
  }

  logger.error("Unable to find left and right paths for flood fill ", pathPixel, nextPathPixel, direction);
}
/**
 * @typedef {Object} Node
 * @property {number} x - the X position
 * @property {number} y - the Y position
 * @property {number} segment - The segment index
 */

/**
 * @typedef {Object} SegmentationOperations
 * @property {boolean} additive - Whether the operation is additive or not
 * @property {Node[]} nodes - The array of nodes
 */

/**
 * Splits the path of nodes into separate add/remove operations.
 *
 * @param  {Object[]} nodes The array of nodes.
 * @param  {number} segmentIndex The label value to replace.
 * @returns {SegmentationOperations[]} An array of operations to perform,
 *                       whether they are `additive` and the
 *                       corresponding `nodes` of the operation.
 */


function splitLineIntoSeperateOperations(nodes, segmentIndex) {
  // Check whether the first node is inside a segment of the appropriate label or not.
  var isLabel = nodes[0].segment === segmentIndex;
  var operations = [];
  operations.push({
    additive: !isLabel,
    nodes: []
  });
  var operationIndex = 0;

  for (var i = 0; i < nodes.length; i++) {
    var node = nodes[i];

    if (isLabel) {
      operations[operationIndex].nodes.push(node);

      if (node.segment !== segmentIndex) {
        // Start a new operation and include the last two nodes.
        operationIndex++;
        isLabel = !isLabel;
        operations.push({
          additive: true,
          nodes: []
        });
        operations[operationIndex].nodes.push(nodes[i - 1]);
        operations[operationIndex].nodes.push(node);
      }
    } else {
      operations[operationIndex].nodes.push(node);

      if (node.segment === segmentIndex) {
        // Start a new operation and add include the last two nodes.
        operationIndex++;
        isLabel = !isLabel;
        operations.push({
          additive: false,
          nodes: []
        });
        operations[operationIndex].nodes.push(nodes[i - 1]);
        operations[operationIndex].nodes.push(node);
      }
    }
  } // Trim the first and last entries, as they don't form full operations.


  operations.pop();
  operations.shift();
  return operations;
}

/***/ }),

/***/ "./tools/segmentation/strategies/eraseCircle.js":
/*!******************************************************!*\
  !*** ./tools/segmentation/strategies/eraseCircle.js ***!
  \******************************************************/
/*! exports provided: eraseInsideCircle, eraseOutsideCircle */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1410965__) {

"use strict";
__nested_webpack_require_1410965__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1410965__.d(__nested_webpack_exports__, "eraseInsideCircle", function() { return eraseInsideCircle; });
/* harmony export (binding) */ __nested_webpack_require_1410965__.d(__nested_webpack_exports__, "eraseOutsideCircle", function() { return eraseOutsideCircle; });
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1410965__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1410965__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _util_ellipse__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1410965__(/*! ../../../util/ellipse */ "./util/ellipse/index.js");
/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1410965__(/*! ../../../util/logger */ "./util/logger.js");
/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1410965__(/*! ../../../util/segmentation */ "./util/segmentation/index.js");
/* harmony import */ var _util_getCircleCoords_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1410965__(/*! ../../../util/getCircleCoords.js */ "./util/getCircleCoords.js");





var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_2__["getLogger"])('util:segmentation:operations:eraseInsideCircle');
/**
 * EraseInsideCircle - Erase all pixels labeled with the activeSegmentIndex,
 * in the region defined by the circle.
 * @param  {Object} evt The Cornerstone event.
 * @param {Object}  operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */

function eraseCircle(evt, operationData) {
  var inside = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
  var segmentationMixinType = operationData.segmentationMixinType;

  if (segmentationMixinType !== "circleSegmentationMixin") {
    logger.error("eraseInsideCircle operation requires circleSegmentationMixin operationData, recieved ".concat(segmentationMixinType));
    return;
  }

  var eventData = evt.detail;

  var _getBoundingBoxAround = Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_3__["getBoundingBoxAroundCircle"])(evt),
      _getBoundingBoxAround2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_getBoundingBoxAround, 2),
      topLeft = _getBoundingBoxAround2[0],
      bottomRight = _getBoundingBoxAround2[1];

  var ellipse = Object(_util_getCircleCoords_js__WEBPACK_IMPORTED_MODULE_4__["default"])(eventData.handles.start, eventData.handles.end);
  inside ? Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_3__["eraseInsideShape"])(evt, operationData, function (point) {
    return Object(_util_ellipse__WEBPACK_IMPORTED_MODULE_1__["pointInEllipse"])(ellipse, point);
  }, topLeft, bottomRight) : Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_3__["eraseOutsideShape"])(evt, operationData, function (point) {
    return Object(_util_ellipse__WEBPACK_IMPORTED_MODULE_1__["pointInEllipse"])(ellipse, point);
  }, topLeft, bottomRight);
}
/**
 * Erase all pixels inside/outside the region defined by the circle.
 * @param  {} evt The Cornerstone event.
 * @param {}  operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */


function eraseInsideCircle(evt, operationData) {
  eraseCircle(evt, operationData, true);
}
/**
 * Erase all pixels outside the region defined by the circle.
 * @param  {} evt The Cornerstone event.
 * @param  {} operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */

function eraseOutsideCircle(evt, operationData) {
  eraseCircle(evt, operationData, false);
}

/***/ }),

/***/ "./tools/segmentation/strategies/eraseFreehand.js":
/*!********************************************************!*\
  !*** ./tools/segmentation/strategies/eraseFreehand.js ***!
  \********************************************************/
/*! exports provided: eraseInsideFreehand, eraseOutsideFreehand */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1415384__) {

"use strict";
__nested_webpack_require_1415384__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1415384__.d(__nested_webpack_exports__, "eraseInsideFreehand", function() { return eraseInsideFreehand; });
/* harmony export (binding) */ __nested_webpack_require_1415384__.d(__nested_webpack_exports__, "eraseOutsideFreehand", function() { return eraseOutsideFreehand; });
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1415384__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1415384__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1415384__(/*! ../../../util/segmentation */ "./util/segmentation/index.js");
/* harmony import */ var _util_isPointInPolygon__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1415384__(/*! ../../../util/isPointInPolygon */ "./util/isPointInPolygon.js");
/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1415384__(/*! ../../../util/logger */ "./util/logger.js");




var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('util:segmentation:operations:eraseInsideFreehand');
/**
 * Erase all pixels labeled with the activeSegmentIndex,
 * in the region defined by evt.operationData.points.
 * @param  {} evt The Cornerstone event.
 * @param  {} operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */

function eraseFreehand(evt, operationData) {
  var inside = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
  var points = operationData.points,
      segmentationMixinType = operationData.segmentationMixinType;

  if (segmentationMixinType !== "freehandSegmentationMixin") {
    logger.error("eraseInsideFreehand operation requires freehandSegmentationMixin operationData, recieved ".concat(segmentationMixinType));
    return;
  }

  var image = evt.detail.image;
  var vertices = points.map(function (a) {
    return [a.x, a.y];
  });

  var _getBoundingBoxAround = Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["getBoundingBoxAroundPolygon"])(vertices, image),
      _getBoundingBoxAround2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_getBoundingBoxAround, 2),
      topLeft = _getBoundingBoxAround2[0],
      bottomRight = _getBoundingBoxAround2[1];

  inside ? Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["eraseInsideShape"])(evt, operationData, function (point) {
    return Object(_util_isPointInPolygon__WEBPACK_IMPORTED_MODULE_2__["default"])([point.x, point.y], vertices);
  }, topLeft, bottomRight) : Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["eraseOutsideShape"])(evt, operationData, function (point) {
    return Object(_util_isPointInPolygon__WEBPACK_IMPORTED_MODULE_2__["default"])([point.x, point.y], vertices);
  }, topLeft, bottomRight);
}
/**
 * Erase all pixels inside/outside the region defined by `operationData.points`.
 * @param  {} evt The Cornerstone event.
 * @param {}  operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */


function eraseInsideFreehand(evt, operationData) {
  eraseFreehand(evt, operationData, true);
}
/**
 * Erase all pixels outside the region defined by `operationData.points`.
 * @param  {} evt The Cornerstone event.
 * @param  {} operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */

function eraseOutsideFreehand(evt, operationData) {
  eraseFreehand(evt, operationData, false);
}

/***/ }),

/***/ "./tools/segmentation/strategies/eraseRectangle.js":
/*!*********************************************************!*\
  !*** ./tools/segmentation/strategies/eraseRectangle.js ***!
  \*********************************************************/
/*! exports provided: eraseInsideRectangle, eraseOutsideRectangle */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1419708__) {

"use strict";
__nested_webpack_require_1419708__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1419708__.d(__nested_webpack_exports__, "eraseInsideRectangle", function() { return eraseInsideRectangle; });
/* harmony export (binding) */ __nested_webpack_require_1419708__.d(__nested_webpack_exports__, "eraseOutsideRectangle", function() { return eraseOutsideRectangle; });
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1419708__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1419708__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1419708__(/*! ../../../util/logger */ "./util/logger.js");
/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1419708__(/*! ../../../util/segmentation */ "./util/segmentation/index.js");



var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_1__["getLogger"])('util:segmentation:operations:eraseInsideRectangle');
/**
 * Erase all pixels inside the region defined by the rectangle.
 * @param  {Object} evt The Cornerstone event.
 * @param  {Object} operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */

function eraseRectangle(evt, operationData) {
  var inside = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
  var points = operationData.points,
      segmentationMixinType = operationData.segmentationMixinType;

  if (segmentationMixinType !== "rectangleSegmentationMixin") {
    logger.error("eraseInsideRectangle operation requires rectangleSegmentationMixin operationData, recieved ".concat(segmentationMixinType));
    return;
  }

  var eventData = evt.detail; // Loop through all pixels in the segmentation data mask
  // Obtain the bounding box of the entire drawing so that
  // we can subset our search.

  var image = eventData.image;
  var vertices = points.map(function (a) {
    return [a.x, a.y];
  });

  var _getBoundingBoxAround = Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_2__["getBoundingBoxAroundPolygon"])(vertices, image),
      _getBoundingBoxAround2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_getBoundingBoxAround, 2),
      topLeft = _getBoundingBoxAround2[0],
      bottomRight = _getBoundingBoxAround2[1];

  inside ? Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_2__["eraseInsideShape"])(evt, operationData, function () {
    return true;
  }, topLeft, bottomRight) : Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_2__["eraseOutsideBoundingBox"])(evt, operationData, topLeft, bottomRight);
}
/**
 * Erase all pixels inside/outside the region defined by the rectangle.
 * @param  {} evt The Cornerstone event.
 * @param {}  operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */


function eraseInsideRectangle(evt, operationData) {
  eraseRectangle(evt, operationData, true);
}
/**
 * Erase all pixels outside the region defined by the rectangle.
 * @param  {} evt The Cornerstone event.
 * @param  {} operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */

function eraseOutsideRectangle(evt, operationData) {
  eraseRectangle(evt, operationData, false);
}

/***/ }),

/***/ "./tools/segmentation/strategies/fillCircle.js":
/*!*****************************************************!*\
  !*** ./tools/segmentation/strategies/fillCircle.js ***!
  \*****************************************************/
/*! exports provided: fillInsideCircle, fillOutsideCircle */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1423744__) {

"use strict";
__nested_webpack_require_1423744__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1423744__.d(__nested_webpack_exports__, "fillInsideCircle", function() { return fillInsideCircle; });
/* harmony export (binding) */ __nested_webpack_require_1423744__.d(__nested_webpack_exports__, "fillOutsideCircle", function() { return fillOutsideCircle; });
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1423744__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1423744__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1423744__(/*! ../../../util/segmentation */ "./util/segmentation/index.js");
/* harmony import */ var _util_ellipse__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1423744__(/*! ../../../util/ellipse */ "./util/ellipse/index.js");
/* harmony import */ var _util_getCircleCoords__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1423744__(/*! ../../../util/getCircleCoords */ "./util/getCircleCoords.js");
/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1423744__(/*! ../../../util/logger */ "./util/logger.js");





var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_4__["getLogger"])('util:segmentation:operations:fillCircle');
/**
 * Fill all pixels inside/outside the region defined by the circle.
 * @param  {} evt The Cornerstone event.
 * @param {}  operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */

function fillCircle(evt, operationData) {
  var inside = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
  var segmentationMixinType = operationData.segmentationMixinType;

  if (segmentationMixinType !== "circleSegmentationMixin") {
    logger.error("fillInsideCircle operation requires circleSegmentationMixin operationData, recieved ".concat(segmentationMixinType));
    return;
  }

  var eventData = evt.detail;

  var _getBoundingBoxAround = Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["getBoundingBoxAroundCircle"])(evt),
      _getBoundingBoxAround2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_getBoundingBoxAround, 2),
      topLeft = _getBoundingBoxAround2[0],
      bottomRight = _getBoundingBoxAround2[1];

  var ellipse = Object(_util_getCircleCoords__WEBPACK_IMPORTED_MODULE_3__["default"])(eventData.handles.start, eventData.handles.end);
  inside ? Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["fillInsideShape"])(evt, operationData, function (point) {
    return Object(_util_ellipse__WEBPACK_IMPORTED_MODULE_2__["pointInEllipse"])(ellipse, point);
  }, topLeft, bottomRight) : Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["fillOutsideShape"])(evt, operationData, function (point) {
    return Object(_util_ellipse__WEBPACK_IMPORTED_MODULE_2__["pointInEllipse"])(ellipse, point);
  }, topLeft, bottomRight);
}
/**
 * Fill all pixels inside/outside the region defined by the circle.
 * @param  {} evt The Cornerstone event.
 * @param {}  operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */


function fillInsideCircle(evt, operationData) {
  fillCircle(evt, operationData, true);
}
/**
 * Fill all pixels outside the region defined by the circle.
 * @param  {} evt The Cornerstone event.
 * @param  {} operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */

function fillOutsideCircle(evt, operationData) {
  fillCircle(evt, operationData, false);
}

/***/ }),

/***/ "./tools/segmentation/strategies/fillFreehand.js":
/*!*******************************************************!*\
  !*** ./tools/segmentation/strategies/fillFreehand.js ***!
  \*******************************************************/
/*! exports provided: fillInsideFreehand, fillOutsideFreehand */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1428066__) {

"use strict";
__nested_webpack_require_1428066__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1428066__.d(__nested_webpack_exports__, "fillInsideFreehand", function() { return fillInsideFreehand; });
/* harmony export (binding) */ __nested_webpack_require_1428066__.d(__nested_webpack_exports__, "fillOutsideFreehand", function() { return fillOutsideFreehand; });
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1428066__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1428066__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1428066__(/*! ../../../util/segmentation */ "./util/segmentation/index.js");
/* harmony import */ var _util_isPointInPolygon__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1428066__(/*! ../../../util/isPointInPolygon */ "./util/isPointInPolygon.js");
/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1428066__(/*! ../../../util/logger */ "./util/logger.js");




var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('util:segmentation:operations:fillInsideFreehand');
/**
 * Fill all pixels inside/outside the region defined by
 * `operationData.points` with the `activeSegmentIndex` value.
 * @param  {} evt The Cornerstone event.
 * @param  {} operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */

function fillFreehand(evt, operationData) {
  var inside = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
  var points = operationData.points,
      segmentationMixinType = operationData.segmentationMixinType;

  if (segmentationMixinType !== "freehandSegmentationMixin") {
    logger.error("eraseInsideFreehand operation requires freehandSegmentationMixin operationData, recieved ".concat(segmentationMixinType));
    return;
  } // Obtain the bounding box of the entire drawing so that
  // we can subset our search. Outside of the bounding box,
  // everything is outside of the polygon.


  var image = evt.detail.image;
  var vertices = points.map(function (a) {
    return [a.x, a.y];
  });

  var _getBoundingBoxAround = Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["getBoundingBoxAroundPolygon"])(vertices, image),
      _getBoundingBoxAround2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_getBoundingBoxAround, 2),
      topLeft = _getBoundingBoxAround2[0],
      bottomRight = _getBoundingBoxAround2[1];

  inside ? Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["fillInsideShape"])(evt, operationData, function (point) {
    return Object(_util_isPointInPolygon__WEBPACK_IMPORTED_MODULE_2__["default"])([point.x, point.y], vertices);
  }, topLeft, bottomRight) : Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["fillOutsideShape"])(evt, operationData, function (point) {
    return Object(_util_isPointInPolygon__WEBPACK_IMPORTED_MODULE_2__["default"])([point.x, point.y], vertices);
  }, topLeft, bottomRight);
}
/**
 * Fill all pixels inside/outside the region defined by `operationData.points`.
 * @param  {} evt The Cornerstone event.
 * @param {}  operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */


function fillInsideFreehand(evt, operationData) {
  fillFreehand(evt, operationData, true);
}
/**
 * Fill all pixels outside the region defined by `operationData.points`.
 * @param  {} evt The Cornerstone event.
 * @param  {} operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */

function fillOutsideFreehand(evt, operationData) {
  fillFreehand(evt, operationData, false);
}

/***/ }),

/***/ "./tools/segmentation/strategies/fillRectangle.js":
/*!********************************************************!*\
  !*** ./tools/segmentation/strategies/fillRectangle.js ***!
  \********************************************************/
/*! exports provided: fillInsideRectangle, fillOutsideRectangle */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1432539__) {

"use strict";
__nested_webpack_require_1432539__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1432539__.d(__nested_webpack_exports__, "fillInsideRectangle", function() { return fillInsideRectangle; });
/* harmony export (binding) */ __nested_webpack_require_1432539__.d(__nested_webpack_exports__, "fillOutsideRectangle", function() { return fillOutsideRectangle; });
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1432539__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1432539__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1432539__(/*! ../../../util/segmentation */ "./util/segmentation/index.js");
/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1432539__(/*! ../../../util/logger */ "./util/logger.js");



var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_2__["getLogger"])('util:segmentation:operations:fillInsideRectangle');
/**
 * FillInsideRectangle - Fill all pixels inside/outside the region defined
 * by the rectangle.
 * @param  {} evt The Cornerstone event.
 * @param {}  operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */

function fillRectangle(evt, operationData) {
  var inside = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
  var points = operationData.points,
      segmentationMixinType = operationData.segmentationMixinType;

  if (segmentationMixinType !== "rectangleSegmentationMixin") {
    logger.error("eraseInsideRectangle operation requires rectangleSegmentationMixin operationData, recieved ".concat(segmentationMixinType));
    return;
  }

  var image = evt.detail.image;
  var vertices = points.map(function (a) {
    return [a.x, a.y];
  });

  var _getBoundingBoxAround = Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["getBoundingBoxAroundPolygon"])(vertices, image),
      _getBoundingBoxAround2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_getBoundingBoxAround, 2),
      topLeft = _getBoundingBoxAround2[0],
      bottomRight = _getBoundingBoxAround2[1];

  inside ? Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["fillInsideShape"])(evt, operationData, function () {
    return true;
  }, topLeft, bottomRight) : Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["fillOutsideBoundingBox"])(evt, operationData, topLeft, bottomRight);
}
/**
 * Fill all pixels inside/outside the region defined by the rectangle.
 * @param  {} evt The Cornerstone event.
 * @param {}  operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */


function fillInsideRectangle(evt, operationData) {
  fillRectangle(evt, operationData, true);
}
/**
 * Fill all pixels outside the region defined by the rectangle.
 * @param  {} evt The Cornerstone event.
 * @param  {} operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @returns {null}
 */

function fillOutsideRectangle(evt, operationData) {
  fillRectangle(evt, operationData, false);
}

/***/ }),

/***/ "./tools/segmentation/strategies/index.js":
/*!************************************************!*\
  !*** ./tools/segmentation/strategies/index.js ***!
  \************************************************/
/*! exports provided: correction, eraseInsideFreehand, eraseOutsideFreehand, eraseInsideRectangle, eraseOutsideRectangle, fillInsideFreehand, fillOutsideFreehand, fillInsideRectangle, fillOutsideRectangle, fillInsideCircle, fillOutsideCircle, eraseInsideCircle, eraseOutsideCircle */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1436607__) {

"use strict";
__nested_webpack_require_1436607__.r(__nested_webpack_exports__);
/* harmony import */ var _correction__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1436607__(/*! ./correction */ "./tools/segmentation/strategies/correction.js");
/* harmony reexport (safe) */ __nested_webpack_require_1436607__.d(__nested_webpack_exports__, "correction", function() { return _correction__WEBPACK_IMPORTED_MODULE_0__["default"]; });

/* harmony import */ var _eraseFreehand__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1436607__(/*! ./eraseFreehand */ "./tools/segmentation/strategies/eraseFreehand.js");
/* harmony reexport (safe) */ __nested_webpack_require_1436607__.d(__nested_webpack_exports__, "eraseInsideFreehand", function() { return _eraseFreehand__WEBPACK_IMPORTED_MODULE_1__["eraseInsideFreehand"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1436607__.d(__nested_webpack_exports__, "eraseOutsideFreehand", function() { return _eraseFreehand__WEBPACK_IMPORTED_MODULE_1__["eraseOutsideFreehand"]; });

/* harmony import */ var _eraseRectangle_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1436607__(/*! ./eraseRectangle.js */ "./tools/segmentation/strategies/eraseRectangle.js");
/* harmony reexport (safe) */ __nested_webpack_require_1436607__.d(__nested_webpack_exports__, "eraseInsideRectangle", function() { return _eraseRectangle_js__WEBPACK_IMPORTED_MODULE_2__["eraseInsideRectangle"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1436607__.d(__nested_webpack_exports__, "eraseOutsideRectangle", function() { return _eraseRectangle_js__WEBPACK_IMPORTED_MODULE_2__["eraseOutsideRectangle"]; });

/* harmony import */ var _fillFreehand__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1436607__(/*! ./fillFreehand */ "./tools/segmentation/strategies/fillFreehand.js");
/* harmony reexport (safe) */ __nested_webpack_require_1436607__.d(__nested_webpack_exports__, "fillInsideFreehand", function() { return _fillFreehand__WEBPACK_IMPORTED_MODULE_3__["fillInsideFreehand"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1436607__.d(__nested_webpack_exports__, "fillOutsideFreehand", function() { return _fillFreehand__WEBPACK_IMPORTED_MODULE_3__["fillOutsideFreehand"]; });

/* harmony import */ var _fillRectangle__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1436607__(/*! ./fillRectangle */ "./tools/segmentation/strategies/fillRectangle.js");
/* harmony reexport (safe) */ __nested_webpack_require_1436607__.d(__nested_webpack_exports__, "fillInsideRectangle", function() { return _fillRectangle__WEBPACK_IMPORTED_MODULE_4__["fillInsideRectangle"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1436607__.d(__nested_webpack_exports__, "fillOutsideRectangle", function() { return _fillRectangle__WEBPACK_IMPORTED_MODULE_4__["fillOutsideRectangle"]; });

/* harmony import */ var _fillCircle__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1436607__(/*! ./fillCircle */ "./tools/segmentation/strategies/fillCircle.js");
/* harmony reexport (safe) */ __nested_webpack_require_1436607__.d(__nested_webpack_exports__, "fillInsideCircle", function() { return _fillCircle__WEBPACK_IMPORTED_MODULE_5__["fillInsideCircle"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1436607__.d(__nested_webpack_exports__, "fillOutsideCircle", function() { return _fillCircle__WEBPACK_IMPORTED_MODULE_5__["fillOutsideCircle"]; });

/* harmony import */ var _eraseCircle__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1436607__(/*! ./eraseCircle */ "./tools/segmentation/strategies/eraseCircle.js");
/* harmony reexport (safe) */ __nested_webpack_require_1436607__.d(__nested_webpack_exports__, "eraseInsideCircle", function() { return _eraseCircle__WEBPACK_IMPORTED_MODULE_6__["eraseInsideCircle"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1436607__.d(__nested_webpack_exports__, "eraseOutsideCircle", function() { return _eraseCircle__WEBPACK_IMPORTED_MODULE_6__["eraseOutsideCircle"]; });









/***/ }),

/***/ "./util/SaveAs.js":
/*!************************!*\
  !*** ./util/SaveAs.js ***!
  \************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1440473__) {

"use strict";
__nested_webpack_require_1440473__.r(__nested_webpack_exports__);
/**
 * Exports an image of the canvas.
 * @export @public @method
 * @name saveAs
 *
 * @param {HTMLElement} element The element to export.
 * @param {string} filename The name of the exported image.
 * @param {string} [mimetype = 'image/png'] The mimetype of the exported image.
 * @returns {void}
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, filename) {
  var mimetype = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'image/png';
  var canvas = element.querySelector('canvas'); // If we are using IE, use canvas.msToBlob

  if (canvas.msToBlob) {
    var blob = canvas.msToBlob();
    return window.navigator.msSaveBlob(blob, filename);
  } // Thanks to Ken Fyrstenber
  // http://stackoverflow.com/questions/18480474/how-to-save-an-image-from-canvas


  var lnk = document.createElement('a'); // The key here is to set the download attribute of the a tag

  lnk.download = filename; // Convert canvas content to data-uri for link. When download
  // Attribute is set the content pointed to by link will be
  // Pushed as 'download' in HTML5 capable browsers

  lnk.href = canvas.toDataURL(mimetype, 1); // Create a 'fake' click-event to trigger the download

  if (document.createEvent) {
    var e = document.createEvent('MouseEvents');
    e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    lnk.dispatchEvent(e);
  } else if (lnk.fireEvent) {
    lnk.fireEvent('onclick');
  }
});

/***/ }),

/***/ "./util/angleBetweenPoints.js":
/*!************************************!*\
  !*** ./util/angleBetweenPoints.js ***!
  \************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1442309__) {

"use strict";
__nested_webpack_require_1442309__.r(__nested_webpack_exports__);
/**
 * Calculates the (interior) angle in degrees from the initial mouse location
 * to the current mouse location in relation to the center point.
 * @public
 * @function angleBetweenPoints
 *
 * @param  {Object} p0  The center point.
 * @param  {Object} p1  The initial point.
 * @param  {Object} p2  The final point.
 * @returns {Object} { angle, direction }
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (p0, p1, p2) {
  var p12 = Math.sqrt(Math.pow(p0.x - p1.x, 2) + Math.pow(p0.y - p1.y, 2));
  var p13 = Math.sqrt(Math.pow(p0.x - p2.x, 2) + Math.pow(p0.y - p2.y, 2));
  var p23 = Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));
  var angle = Math.acos((Math.pow(p12, 2) + Math.pow(p13, 2) - Math.pow(p23, 2)) / (2 * p12 * p13)) * 180 / Math.PI; // The direction of the angle (> 0 clockwise, < 0 anti-clockwise)

  var direction = (p1.x - p0.x) * (p2.y - p0.y) - (p1.y - p0.y) * (p2.x - p0.x);
  return {
    angle: angle,
    direction: direction
  };
});

/***/ }),

/***/ "./util/calculateSUV.js":
/*!******************************!*\
  !*** ./util/calculateSUV.js ***!
  \******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1443629__) {

"use strict";
__nested_webpack_require_1443629__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1443629__(/*! ../externalModules.js */ "./externalModules.js");

/**
 * Calculates a Standardized Uptake Value.
 * @export @public @method
 * @name calculateSUV
 *
 * @param  {Object} image            The image.
 * @param  {number} storedPixelValue The raw pixel value.
 * @param  {bool} [skipRescale=fale]
 * @returns {number}                  The SUV.
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (image, storedPixelValue) {
  var skipRescale = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone;
  var patientStudyModule = cornerstone.metaData.get('patientStudyModule', image.imageId);
  var seriesModule = cornerstone.metaData.get('generalSeriesModule', image.imageId);

  if (!patientStudyModule || !seriesModule) {
    return;
  }

  var modality = seriesModule.modality; // Image must be PET

  if (modality !== 'PT') {
    return;
  }

  var modalityPixelValue = skipRescale ? storedPixelValue : storedPixelValue * image.slope + image.intercept;
  var patientWeight = patientStudyModule.patientWeight; // In kg

  if (!patientWeight) {
    return;
  }

  var petSequenceModule = cornerstone.metaData.get('petIsotopeModule', image.imageId);

  if (!petSequenceModule) {
    return;
  }

  var radiopharmaceuticalInfo = petSequenceModule.radiopharmaceuticalInfo;
  var startTime = radiopharmaceuticalInfo.radiopharmaceuticalStartTime;
  var totalDose = radiopharmaceuticalInfo.radionuclideTotalDose;
  var halfLife = radiopharmaceuticalInfo.radionuclideHalfLife;
  var seriesAcquisitionTime = seriesModule.seriesTime;

  if (!startTime || !totalDose || !halfLife || !seriesAcquisitionTime) {
    return;
  }

  var acquisitionTimeInSeconds = fracToDec(seriesAcquisitionTime.fractionalSeconds || 0) + seriesAcquisitionTime.seconds + seriesAcquisitionTime.minutes * 60 + seriesAcquisitionTime.hours * 60 * 60;
  var injectionStartTimeInSeconds = fracToDec(startTime.fractionalSeconds || 0) + startTime.seconds + startTime.minutes * 60 + startTime.hours * 60 * 60;
  var durationInSeconds = acquisitionTimeInSeconds - injectionStartTimeInSeconds;
  var correctedDose = totalDose * Math.exp(-durationInSeconds * Math.log(2) / halfLife);
  var suv = modalityPixelValue * patientWeight / correctedDose * 1000;
  return suv;
});
/**
 * Returns a decimal value given a fractional value.
 * @private
 * @method
 * @name fracToDec
 *
 * @param  {number} fractionalValue The value to convert.
 * @returns {number}                 The value converted to decimal.
 */

function fracToDec(fractionalValue) {
  return parseFloat(".".concat(fractionalValue));
}

/***/ }),

/***/ "./util/clip.js":
/*!**********************!*\
  !*** ./util/clip.js ***!
  \**********************/
/*! exports provided: clip, clipToBox, clipBoxToDisplayedArea, default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1446735__) {

"use strict";
__nested_webpack_require_1446735__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1446735__.d(__nested_webpack_exports__, "clip", function() { return clip; });
/* harmony export (binding) */ __nested_webpack_require_1446735__.d(__nested_webpack_exports__, "clipToBox", function() { return clipToBox; });
/* harmony export (binding) */ __nested_webpack_require_1446735__.d(__nested_webpack_exports__, "clipBoxToDisplayedArea", function() { return clipBoxToDisplayedArea; });
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1446735__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1446735__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1446735__(/*! ../externalModules.js */ "./externalModules.js");


/**
 * Clips a value to an upper and lower bound.
 * @export @public @method
 * @name clip
 *
 * @param  {number} val  The value to clip.
 * @param  {number} low  The lower bound.
 * @param  {number} high The upper bound.
 * @returns {number}      The clipped value.
 */

function clip(val, low, high) {
  return Math.min(Math.max(low, val), high);
}
/**
 * Clips a value within a box.
 * @export @public @method
 * @name clipToBox
 *
 * @param  {Object} point The point to clip
 * @param  {Object} box   The bounding box to clip to.
 * @returns {void}
 */

function clipToBox(point, box) {
  // Clip an {x, y} point to a box {top, left, width, height}
  var left = box.left || 0;
  var top = box.top || 0;
  point.x = clip(point.x, left, left + box.width);
  point.y = clip(point.y, top, top + box.height);
}
/**
 * Returns a new bounding box of rotated text box, relative to the pixel
 * coordinate system. It will get the coordinate of the 4 points of the rotated
 * text box and calculate the AABB (axis-aligned bounding box - lower and upper
 * boundaries for `x` and `y` axes).
 *
 * @param {HTMLElement} element The element to manipulate pixel positioning
 * @param {Object} box - `{ left, top, width, height }` in canvas coordinates
 * @returns {Object} - `{ minX, minY, maxX, maxY }` boundaries of the box
 */

var getBoxPixelBoundaries = function getBoxPixelBoundaries(element, box) {
  var toPixel = function toPixel(point) {
    return _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.canvasToPixel(element, point);
  };

  var top = box.top,
      left = box.left,
      width = box.width,
      height = box.height;
  var topLeft = toPixel({
    x: left,
    y: top
  });
  var topRight = toPixel({
    x: left + width,
    y: top
  });
  var bottomLeft = toPixel({
    x: left,
    y: top + height
  });
  var bottomRight = toPixel({
    x: left + width,
    y: top + height
  });
  var points = [topLeft, topRight, bottomLeft, bottomRight];
  var xArray = points.map(function (p) {
    return p.x;
  });
  var yArray = points.map(function (p) {
    return p.y;
  });
  return {
    minX: Math.min.apply(Math, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(xArray)),
    minY: Math.min.apply(Math, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(yArray)),
    maxX: Math.max.apply(Math, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(xArray)),
    maxY: Math.max.apply(Math, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(yArray))
  };
};
/**
 * Reposition a box point coordinates in the given axis' upper/lower limits
 *
 * @param {Object} point `{ x, y }` The coordinate point of the box
 * @param {string} axis The axis to be manipulated: `x` or `y`
 * @param {number} boxMin The box position's lower value on axis
 * @param {number} boxMax The box position's upper value on axis
 * @param {number} lowerLimit The lower limit of allowed box position on axis
 * @param {number} upperLimit The upper limit of allowed box position on axis
 * @returns {void}
 */


var clipBoxOnAxis = function clipBoxOnAxis(point, axis, boxMin, boxMax, lowerLimit, upperLimit) {
  if (upperLimit - lowerLimit < boxMax - boxMin) {
    // Box is bigger than allowed range, leaking both lower/upper boundaries
    point[axis] += lowerLimit - boxMin; // Stick to the lower boundary

    point[axis] += (upperLimit - lowerLimit) / 2; // Centralize in range

    point[axis] -= (boxMax - boxMin) / 2; // Translate -1/2 of box's size
  } else if (boxMin < lowerLimit) {
    // Box leaked lower boundary
    point[axis] += lowerLimit - boxMin; // Stick to the lower boundary
  } else if (boxMax > upperLimit) {
    // Box leaked upper boundary
    point[axis] -= boxMax - upperLimit; // Stick to the upper boundary
  }
};
/**
 * Clips a box to the viewport's displayed area
 * @export @public @method
 * @name clipBoxToDisplayedArea
 *
 * @param {HTMLElement} element The element to manipulate pixel positioning
 * @param {Object} box - `{ left, top, width, height }` in canvas coordinates
 * @returns {void}
 */


function clipBoxToDisplayedArea(element, box) {
  var _external$cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone,
      pixelToCanvas = _external$cornerstone.pixelToCanvas,
      canvasToPixel = _external$cornerstone.canvasToPixel,
      getViewport = _external$cornerstone.getViewport,
      getEnabledElement = _external$cornerstone.getEnabledElement,
      getDisplayedArea = _external$cornerstone.getDisplayedArea; // Transform the position of given box from canvas to pixel coordinates

  var pixelPosition = canvasToPixel(element, {
    x: box.left,
    y: box.top
  }); // Get the rotated corners' position for the box in pixel coordinate system

  var _getBoxPixelBoundarie = getBoxPixelBoundaries(element, box),
      minX = _getBoxPixelBoundarie.minX,
      minY = _getBoxPixelBoundarie.minY,
      maxX = _getBoxPixelBoundarie.maxX,
      maxY = _getBoxPixelBoundarie.maxY; // Get the displayed area's top, left, bottom and right boundaries


  var viewport = getViewport(element);
  var enabledElement = getEnabledElement(element);
  var defaultDisplayedArea = getDisplayedArea(enabledElement.image, viewport);

  var _ref = viewport.displayedArea ? viewport.displayedArea : defaultDisplayedArea,
      tlhc = _ref.tlhc,
      brhc = _ref.brhc;

  var top = tlhc.y - 1;
  var left = tlhc.x - 1;
  var bottom = brhc.y;
  var right = brhc.x; // Clip the box on vertical axis

  clipBoxOnAxis(pixelPosition, 'y', minY, maxY, top, bottom); // Clip the box on horizontal axis

  clipBoxOnAxis(pixelPosition, 'x', minX, maxX, left, right); // Transform the box coordinate system back to canvas

  var newCanvasPosition = pixelToCanvas(element, pixelPosition); // Update the box with the new coordinates

  box.top = newCanvasPosition.y;
  box.left = newCanvasPosition.x;
}
/* harmony default export */ __nested_webpack_exports__["default"] = (clip);

/***/ }),

/***/ "./util/convertToVector3.js":
/*!**********************************!*\
  !*** ./util/convertToVector3.js ***!
  \**********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1454082__) {

"use strict";
__nested_webpack_require_1454082__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1454082__.d(__nested_webpack_exports__, "default", function() { return convertToVector3; });
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1454082__(/*! ../externalModules.js */ "./externalModules.js");

/**
 * Convert an Array to a cornerstoneMath.Vector3
 * @export @public @method
 * @name convertToVector3
 *
 * @param {Array|cornerstoneMath.Vector3} arrayOrVector3 Input array or Vector3
 * @returns {cornerstoneMath.Vector3}
 */

function convertToVector3(arrayOrVector3) {
  var cornerstoneMath = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath;

  if (arrayOrVector3 instanceof cornerstoneMath.Vector3) {
    return arrayOrVector3;
  }

  var keys = Object.keys(arrayOrVector3);

  if (keys.includes('x') && keys.includes('y') && keys.includes('z')) {
    return new cornerstoneMath.Vector3(arrayOrVector3.x, arrayOrVector3.y, arrayOrVector3.z);
  }

  return new cornerstoneMath.Vector3(arrayOrVector3[0], arrayOrVector3[1], arrayOrVector3[2]);
}

/***/ }),

/***/ "./util/copyPoints.js":
/*!****************************!*\
  !*** ./util/copyPoints.js ***!
  \****************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1455443__) {

"use strict";
__nested_webpack_require_1455443__.r(__nested_webpack_exports__);
/**
 * Returns a copy of the points object.
 * @public
 * @function copyPoints
 *
 * @param  {Object} points - The object to copy.
 * @returns {Object} - The copy.
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (points) {
  var page = _copy(points.page);

  var image = _copy(points.image);

  var client = _copy(points.client);

  var canvas = _copy(points.canvas);

  return {
    page: page,
    image: image,
    client: client,
    canvas: canvas
  };
});
/**
 *
 * @private
 * @function _copy
 *
 * @param {Object} point - { x, y }
 * @returns {Object} { x, y }
 */

function _copy() {
  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
      x = _ref.x,
      y = _ref.y;

  return {
    x: x,
    y: y
  };
}

/***/ }),

/***/ "./util/debounce.js":
/*!**************************!*\
  !*** ./util/debounce.js ***!
  \**************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1456518__) {

"use strict";
__nested_webpack_require_1456518__.r(__nested_webpack_exports__);
/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1456518__(/*! ./isObject.js */ "./util/isObject.js");

/**
 * Creates a debounced function that delays invoking `func` until after `wait`
 * milliseconds have elapsed since the last time the debounced function was
 * invoked, or until the next browser frame is drawn. The debounced function
 * comes with a `cancel` method to cancel delayed `func` invocations and a
 * `flush` method to immediately invoke them. Provide `options` to indicate
 * whether `func` should be invoked on the leading and/or trailing edge of the
 * `wait` timeout. The `func` is invoked with the last arguments provided to the
 * debounced function. Subsequent calls to the debounced function return the
 * result of the last `func` invocation.
 *
 * **Note:** If `leading` and `trailing` options are `true`, `func` is
 * invoked on the trailing edge of the timeout only if the debounced function
 * is invoked more than once during the `wait` timeout.
 *
 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
 * until the next tick, similar to `setTimeout` with a timeout of `0`.
 *
 * If `wait` is omitted in an environment with `requestAnimationFrame`, `func`
 * invocation will be deferred until the next frame is drawn (typically about
 * 16ms).
 *
 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
 * for details over the differences between `debounce` and `throttle`.
 *
 * @since 0.1.0
 * @category Function
 * @param {Function} func The function to debounce.
 * @param {number} [wait=0]
 *  The number of milliseconds to delay; if omitted, `requestAnimationFrame` is
 *  used (if available).
 * @param {Object} [options={}] The options object.
 * @param {boolean} [options.leading=false]
 *  Specify invoking on the leading edge of the timeout.
 * @param {number} [options.maxWait]
 *  The maximum time `func` is allowed to be delayed before it's invoked.
 * @param {boolean} [options.trailing=true]
 *  Specify invoking on the trailing edge of the timeout.
 * @returns {Function} Returns the new debounced function.
 * @example
 *
 * // Avoid costly calculations while the window size is in flux.
 * jQuery(window).on('resize', debounce(calculateLayout, 150))
 *
 * // Invoke `sendMail` when clicked, debouncing subsequent calls.
 * jQuery(element).on('click', debounce(sendMail, 300, {
 *   'leading': true,
 *   'trailing': false
 * }))
 *
 * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
 * const debounced = debounce(batchLog, 250, { 'maxWait': 1000 })
 * const source = new EventSource('/stream')
 * jQuery(source).on('message', debounced)
 *
 * // Cancel the trailing debounced invocation.
 * jQuery(window).on('popstate', debounced.cancel)
 *
 * // Check for pending invocations.
 * const status = debounced.pending() ? "Pending..." : "Ready"
 */

function debounce(func, wait, options) {
  var lastArgs, lastThis, maxWait, result, timerId, lastCallTime;
  var lastInvokeTime = 0;
  var leading = false;
  var maxing = false;
  var trailing = true; // Bypass `requestAnimationFrame` by explicitly setting `wait=0`.

  var useRAF = !wait && wait !== 0 && typeof window.requestAnimationFrame === 'function';

  if (typeof func !== 'function') {
    throw new TypeError('Expected a function');
  }

  wait = Number(wait) || 0;

  if (Object(_isObject_js__WEBPACK_IMPORTED_MODULE_0__["default"])(options)) {
    leading = Boolean(options.leading);
    maxing = 'maxWait' in options;
    maxWait = maxing ? Math.max(Number(options.maxWait) || 0, wait) : maxWait;
    trailing = 'trailing' in options ? Boolean(options.trailing) : trailing;
  }

  function invokeFunc(time) {
    var args = lastArgs;
    var thisArg = lastThis;
    lastArgs = lastThis = undefined;
    lastInvokeTime = time;
    result = func.apply(thisArg, args);
    return result;
  }

  function startTimer(pendingFunc, wait) {
    if (useRAF) {
      return window.requestAnimationFrame(pendingFunc);
    }

    return setTimeout(pendingFunc, wait);
  }

  function cancelTimer(id) {
    if (useRAF) {
      return window.cancelAnimationFrame(id);
    }

    clearTimeout(id);
  }

  function leadingEdge(time) {
    // Reset any `maxWait` timer.
    lastInvokeTime = time; // Start the timer for the trailing edge.

    timerId = startTimer(timerExpired, wait); // Invoke the leading edge.

    return leading ? invokeFunc(time) : result;
  }

  function remainingWait(time) {
    var timeSinceLastCall = time - lastCallTime;
    var timeSinceLastInvoke = time - lastInvokeTime;
    var timeWaiting = wait - timeSinceLastCall;
    return maxing ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
  }

  function shouldInvoke(time) {
    var timeSinceLastCall = time - lastCallTime;
    var timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the
    // trailing edge, the system time has gone backwards and we're treating
    // it as the trailing edge, or we've hit the `maxWait` limit.

    return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
  }

  function timerExpired() {
    var time = Date.now();

    if (shouldInvoke(time)) {
      return trailingEdge(time);
    } // Restart the timer.


    timerId = startTimer(timerExpired, remainingWait(time));
  }

  function trailingEdge(time) {
    timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been
    // debounced at least once.

    if (trailing && lastArgs) {
      return invokeFunc(time);
    }

    lastArgs = lastThis = undefined;
    return result;
  }

  function cancel() {
    if (timerId !== undefined) {
      cancelTimer(timerId);
    }

    lastInvokeTime = 0;
    lastArgs = lastCallTime = lastThis = timerId = undefined;
  }

  function flush() {
    return timerId === undefined ? result : trailingEdge(Date.now());
  }

  function pending() {
    return timerId !== undefined;
  }

  function debounced() {
    var time = Date.now();
    var isInvoking = shouldInvoke(time);

    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }

    lastArgs = args;
    lastThis = this; // eslint-disable-line consistent-this

    lastCallTime = time;

    if (isInvoking) {
      if (timerId === undefined) {
        return leadingEdge(lastCallTime);
      }

      if (maxing) {
        // Handle invocations in a tight loop.
        timerId = startTimer(timerExpired, wait);
        return invokeFunc(lastCallTime);
      }
    }

    if (timerId === undefined) {
      timerId = startTimer(timerExpired, wait);
    }

    return result;
  }

  debounced.cancel = cancel;
  debounced.flush = flush;
  debounced.pending = pending;
  return debounced;
}

/* harmony default export */ __nested_webpack_exports__["default"] = (debounce);

/***/ }),

/***/ "./util/debugLib/common.js":
/*!*********************************!*\
  !*** ./util/debugLib/common.js ***!
  \*********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1463846__) {

"use strict";
__nested_webpack_require_1463846__.r(__nested_webpack_exports__);
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1463846__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1463846__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);


/**
 * This is the common logic for both the Node.js and web browser
 * implementations of `debug()`.
 */
function setup(env) {
  createDebug.debug = createDebug;
  createDebug.default = createDebug;
  createDebug.coerce = coerce;
  createDebug.disable = disable;
  createDebug.enable = enable;
  createDebug.enabled = enabled;
  createDebug.humanize = __nested_webpack_require_1463846__(/*! ms */ "../node_modules/ms/index.js");
  Object.keys(env).forEach(function (key) {
    createDebug[key] = env[key];
  });
  /**
   * Active `debug` instances.
   */

  createDebug.instances = [];
  /**
   * The currently active debug mode names, and names to skip.
   */

  createDebug.names = [];
  createDebug.skips = [];
  /**
   * Map of special "%n" handling functions, for the debug "format" argument.
   *
   * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
   */

  createDebug.formatters = {};
  /**
   * Selects a color for a debug namespace
   * @param {String} namespace The namespace string for the for the debug instance to be colored
   * @returns {Number|String} An ANSI color code for the given namespace
   * @api private
   */

  function selectColor(namespace) {
    var hash = 0;

    for (var i = 0; i < namespace.length; i++) {
      hash = (hash << 5) - hash + namespace.charCodeAt(i);
      hash |= 0; // Convert to 32bit integer
    }

    return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
  }

  createDebug.selectColor = selectColor;
  /**
   * Create a debugger with the given `namespace`.
   *
   * @param {String} namespace
   * @returns {Function}
   * @api public
   */

  function createDebug(namespace) {
    var prevTime;

    function debug() {
      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
        args[_key] = arguments[_key];
      }

      // Disabled?
      if (!debug.enabled) {
        return;
      }

      var self = debug; // Set `diff` timestamp

      var curr = Number(new Date());
      var ms = curr - (prevTime || curr);
      self.diff = ms;
      self.prev = prevTime;
      self.curr = curr;
      prevTime = curr;
      args[0] = createDebug.coerce(args[0]);

      if (typeof args[0] !== 'string') {
        // Anything else let's inspect with %O
        args.unshift('%O');
      } // Apply any `formatters` transformations


      var index = 0;
      args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {
        // If we encounter an escaped % then don't increase the array index
        if (match === '%%') {
          return match;
        }

        index++;
        var formatter = createDebug.formatters[format];

        if (typeof formatter === 'function') {
          var val = args[index];
          match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format`

          args.splice(index, 1);
          index--;
        }

        return match;
      }); // Apply env-specific formatting (colors, etc.)

      createDebug.formatArgs.call(self, args);
      var logFn = self.log || createDebug.log;
      logFn.apply(self, args);
    }

    debug.namespace = namespace;
    debug.enabled = createDebug.enabled(namespace);
    debug.useColors = createDebug.useColors();
    debug.color = selectColor(namespace);
    debug.destroy = destroy;
    debug.extend = extend; // Debug.formatArgs = formatArgs;
    // debug.rawLog = rawLog;
    // env-specific initialization logic for debug instances

    if (typeof createDebug.init === 'function') {
      createDebug.init(debug);
    }

    createDebug.instances.push(debug);
    return debug;
  }

  function destroy() {
    var index = createDebug.instances.indexOf(this);

    if (index !== -1) {
      createDebug.instances.splice(index, 1);
      return true;
    }

    return false;
  }

  function extend(namespace, delimiter) {
    var newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);
    newDebug.log = this.log;
    return newDebug;
  }
  /**
   * Enables a debug mode by namespaces. This can include modes
   * separated by a colon and wildcards.
   *
   * @param {String} namespaces
   * @api public
   */


  function enable(namespaces) {
    createDebug.save(namespaces);
    createDebug.names = [];
    createDebug.skips = [];
    var i;
    var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
    var len = split.length;

    for (i = 0; i < len; i++) {
      if (!split[i]) {
        // Ignore empty strings
        continue;
      }

      namespaces = split[i].replace(/\*/g, '.*?');

      if (namespaces[0] === '-') {
        createDebug.skips.push(new RegExp("^".concat(namespaces.substr(1), "$")));
      } else {
        createDebug.names.push(new RegExp("^".concat(namespaces, "$")));
      }
    }

    for (i = 0; i < createDebug.instances.length; i++) {
      var instance = createDebug.instances[i];
      instance.enabled = createDebug.enabled(instance.namespace);
    }
  }
  /**
   * Disable debug output.
   *
   * @returns {String} namespaces
   * @api public
   */


  function disable() {
    var namespaces = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(createDebug.names.map(toNamespace)), _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(createDebug.skips.map(toNamespace).map(function (namespace) {
      return "-".concat(namespace);
    }))).join(',');
    createDebug.enable('');
    return namespaces;
  }
  /**
   * Returns true if the given mode name is enabled, false otherwise.
   *
   * @param {String} name
   * @returns {Boolean}
   * @api public
   */


  function enabled(name) {
    if (name[name.length - 1] === '*') {
      return true;
    }

    var i;
    var len;

    for (i = 0, len = createDebug.skips.length; i < len; i++) {
      if (createDebug.skips[i].test(name)) {
        return false;
      }
    }

    for (i = 0, len = createDebug.names.length; i < len; i++) {
      if (createDebug.names[i].test(name)) {
        return true;
      }
    }

    return false;
  }
  /**
   * Convert regexp to namespace
   *
   * @param {RegExp} regxep
   * @returns {String} namespace
   * @api private
   */


  function toNamespace(regexp) {
    return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, '*');
  }
  /**
   * Coerce `val`.
   *
   * @param {Mixed} val
   * @returns {Mixed}
   * @api private
   */


  function coerce(val) {
    if (val instanceof Error) {
      return val.stack || val.message;
    }

    return val;
  }

  createDebug.enable(createDebug.load());
  return createDebug;
}

/* harmony default export */ __nested_webpack_exports__["default"] = (setup);

/***/ }),

/***/ "./util/debugLib/index.js":
/*!********************************!*\
  !*** ./util/debugLib/index.js ***!
  \********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1471396__) {

"use strict";
__nested_webpack_require_1471396__.r(__nested_webpack_exports__);
/* WEBPACK VAR INJECTION */(function(process) {/* harmony import */ var _common_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1471396__(/*! ./common.js */ "./util/debugLib/common.js");
/* eslint-env browser */

/**
 * This is the web browser implementation of `debug()`.
 */

var storage = localstorage();
var debugLib = {
  formatArgs: formatArgs,
  save: save,
  load: load,
  useColors: useColors,
  storage: storage
};
/**
 * Colors.
 */

debugLib.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];
/**
 * Currently only WebKit-based Web Inspectors, Firefox >= v31,
 * and the Firebug extension (any Firefox version) are known
 * to support "%c" CSS customizations.
 *
 * TODO: add a `localStorage` variable to explicitly enable/disable colors
 */
// eslint-disable-next-line complexity

function useColors() {
  // NB: In an Electron preload script, document will be defined but not fully
  // initialized. Since we know we're in Chrome, we'll just detect this case
  // explicitly
  if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {
    return true;
  } // Internet Explorer and Edge do not support colors.


  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
    return false;
  } // Is webkit? http://stackoverflow.com/a/16459606/376773
  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632


  return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773
  typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?
  // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker
  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
}
/**
 * Colorize log arguments if enabled.
 *
 * @api public
 */


function formatArgs(args) {
  args[0] = "".concat((this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' '), "+").concat(setupDebug.humanize(this.diff));

  if (!this.useColors) {
    return;
  }

  var c = "color: ".concat(this.color);
  args.splice(1, 0, c, 'color: inherit'); // The final "%c" is somewhat tricky, because there could be other
  // arguments passed either before or after the %c, so we need to
  // figure out the correct index to insert the CSS into

  var index = 0;
  var lastC = 0;
  args[0].replace(/%[a-zA-Z%]/g, function (match) {
    if (match === '%%') {
      return;
    }

    index++;

    if (match === '%c') {
      // We only are interested in the *last* %c
      // (the user may have provided their own)
      lastC = index;
    }
  });
  args.splice(lastC, 0, c);
}
/**
 * Invokes `console.debug()` when available.
 * No-op when `console.debug` is not a "function".
 * If `console.debug` is not available, falls back
 * to `console.log`.
 *
 * @api public
 */


debugLib.log = console.debug || console.log || function () {};
/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */


function save(namespaces) {
  try {
    if (namespaces) {
      debugLib.storage.setItem('debug', namespaces);
    } else {
      debugLib.storage.removeItem('debug');
    }
  } catch (error) {// Swallow
    // XXX (@Qix-) should we be logging these?
  }
}
/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */


function load() {
  var r;

  try {
    r = debugLib.storage.getItem('debug');
  } catch (error) {
    console.warn(error);
  } // Swallow
  // XXX (@Qix-) should we be logging these?
  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG


  if (!r && typeof process !== 'undefined' && 'env' in process) {
    r = process.env.DEBUG;
  }

  return r;
}
/**
 * Localstorage attempts to return the localstorage.
 *
 * This is necessary because safari throws
 * when a user disables cookies/localstorage
 * and you attempt to access it.
 *
 * @return {LocalStorage}
 * @api private
 */


function localstorage() {
  try {
    // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context
    // The Browser also has localStorage in the global context.
    return localStorage;
  } catch (error) {// Swallow
    // XXX (@Qix-) should we be logging these?
  }
}

var setupDebug = Object(_common_js__WEBPACK_IMPORTED_MODULE_0__["default"])(debugLib);
var formatters = setupDebug.formatters;
/**
 * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
 */

formatters.j = function (v) {
  try {
    return JSON.stringify(v);
  } catch (error) {
    return "[UnexpectedJSONParseError]: ".concat(error.message);
  }
};

/* harmony default export */ __nested_webpack_exports__["default"] = (setupDebug);
/* WEBPACK VAR INJECTION */}.call(this, __nested_webpack_require_1471396__(/*! ./../../../node_modules/process/browser.js */ "../node_modules/process/browser.js")))

/***/ }),

/***/ "./util/deepmerge.js":
/*!***************************!*\
  !*** ./util/deepmerge.js ***!
  \***************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1477946__) {

"use strict";
__nested_webpack_require_1477946__.r(__nested_webpack_exports__);
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1477946__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js");
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1477946__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__);


var isMergeableObject = function isMergeableObject(val) {
  var nonNullObject = val && _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(val) === 'object';
  return nonNullObject && Object.prototype.toString.call(val) !== '[object RegExp]' && Object.prototype.toString.call(val) !== '[object Date]';
};

var emptyTarget = function emptyTarget(val) {
  var isEmpty = Array.isArray(val) ? [] : {};
  return isEmpty;
};

var cloneIfNecessary = function cloneIfNecessary(value, optionsArgument) {
  var clone = optionsArgument && optionsArgument.clone === true;
  return clone && isMergeableObject(value) ? deepmerge(emptyTarget(value), value, optionsArgument) : value;
};

var defaultArrayMerge = function defaultArrayMerge(target, source, optionsArgument) {
  var destination = target.slice();
  source.forEach(function (e, i) {
    if (typeof destination[i] === 'undefined') {
      destination[i] = cloneIfNecessary(e, optionsArgument);
    } else if (isMergeableObject(e)) {
      destination[i] = deepmerge(target[i], e, optionsArgument);
    } else if (target.indexOf(e) === -1) {
      destination.push(cloneIfNecessary(e, optionsArgument));
    }
  });
  return destination;
};

var mergeObject = function mergeObject(target, source, optionsArgument) {
  var destination = {};

  if (isMergeableObject(target)) {
    Object.keys(target).forEach(function (key) {
      destination[key] = cloneIfNecessary(target[key], optionsArgument);
    });
  }

  Object.keys(source).forEach(function (key) {
    if (!isMergeableObject(source[key]) || !target[key]) {
      destination[key] = cloneIfNecessary(source[key], optionsArgument);
    } else {
      destination[key] = deepmerge(target[key], source[key], optionsArgument);
    }
  });
  return destination;
};

var deepmerge = function deepmerge() {
  var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  var optionsArgument = arguments.length > 2 ? arguments[2] : undefined;
  var array = Array.isArray(source);
  var options = optionsArgument || {
    arrayMerge: defaultArrayMerge
  };
  var arrayMerge = options.arrayMerge || defaultArrayMerge;

  if (array) {
    return Array.isArray(target) ? arrayMerge(target, source, optionsArgument) : cloneIfNecessary(source, optionsArgument);
  }

  var mergedObject = mergeObject(target, source, optionsArgument);

  if (Object.getPrototypeOf(target) !== Object.prototype) {
    Object.setPrototypeOf(mergedObject, Object.getPrototypeOf(target));
  }

  return mergedObject;
};

/* harmony default export */ __nested_webpack_exports__["default"] = (deepmerge);

/***/ }),

/***/ "./util/ellipse/calculateEllipseStatistics.js":
/*!****************************************************!*\
  !*** ./util/ellipse/calculateEllipseStatistics.js ***!
  \****************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1481425__) {

"use strict";
__nested_webpack_require_1481425__.r(__nested_webpack_exports__);
/* harmony import */ var _pointInEllipse_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1481425__(/*! ./pointInEllipse.js */ "./util/ellipse/pointInEllipse.js");

/**
 * Calculates the statistics of an elliptical region of interest.
 *
 * @private
 * @function calculateEllipseStatistics
 *
 * @param {number[]} sp - Array of the image data's pixel values.
 * @param {Object} ellipse - { top, left, height, width } - An object describing the ellipse.
 * @returns {Object} { count, mean, variance, stdDev, min, max }
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (sp, ellipse) {
  var sum = 0;
  var sumSquared = 0;
  var count = 0;
  var index = 0;
  var min = null;
  var max = null;

  for (var y = ellipse.top; y < ellipse.top + ellipse.height; y++) {
    for (var x = ellipse.left; x < ellipse.left + ellipse.width; x++) {
      var point = {
        x: x,
        y: y
      };

      if (Object(_pointInEllipse_js__WEBPACK_IMPORTED_MODULE_0__["default"])(ellipse, point)) {
        if (min === null) {
          min = sp[index];
          max = sp[index];
        }

        sum += sp[index];
        sumSquared += sp[index] * sp[index];
        min = Math.min(min, sp[index]);
        max = Math.max(max, sp[index]);
        count++;
      }

      index++;
    }
  }

  if (count === 0) {
    return {
      count: count,
      mean: 0.0,
      variance: 0.0,
      stdDev: 0.0,
      min: 0.0,
      max: 0.0
    };
  }

  var mean = sum / count;
  var variance = sumSquared / count - mean * mean;
  return {
    count: count,
    mean: mean,
    variance: variance,
    stdDev: Math.sqrt(variance),
    min: min,
    max: max
  };
});

/***/ }),

/***/ "./util/ellipse/index.js":
/*!*******************************!*\
  !*** ./util/ellipse/index.js ***!
  \*******************************/
/*! exports provided: calculateEllipseStatistics, pointInEllipse, default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1483457__) {

"use strict";
__nested_webpack_require_1483457__.r(__nested_webpack_exports__);
/* harmony import */ var _calculateEllipseStatistics_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1483457__(/*! ./calculateEllipseStatistics.js */ "./util/ellipse/calculateEllipseStatistics.js");
/* harmony reexport (safe) */ __nested_webpack_require_1483457__.d(__nested_webpack_exports__, "calculateEllipseStatistics", function() { return _calculateEllipseStatistics_js__WEBPACK_IMPORTED_MODULE_0__["default"]; });

/* harmony import */ var _pointInEllipse_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1483457__(/*! ./pointInEllipse.js */ "./util/ellipse/pointInEllipse.js");
/* harmony reexport (safe) */ __nested_webpack_require_1483457__.d(__nested_webpack_exports__, "pointInEllipse", function() { return _pointInEllipse_js__WEBPACK_IMPORTED_MODULE_1__["default"]; });


 // Named

 // Default

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  calculateEllipseStatistics: _calculateEllipseStatistics_js__WEBPACK_IMPORTED_MODULE_0__["default"],
  pointInEllipse: _pointInEllipse_js__WEBPACK_IMPORTED_MODULE_1__["default"]
});

/***/ }),

/***/ "./util/ellipse/pointInEllipse.js":
/*!****************************************!*\
  !*** ./util/ellipse/pointInEllipse.js ***!
  \****************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1484811__) {

"use strict";
__nested_webpack_require_1484811__.r(__nested_webpack_exports__);
/**
 * Returns true if a point is within an ellipse
 * @export @public @method
 * @name pointInEllipse
 *
 * @param  {Object} ellipse  Object defining the ellipse.
 * @param  {Object} location The location of the point.
 * @returns {boolean} True if the point is within the ellipse.
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (ellipse, location) {
  var xRadius = ellipse.width / 2;
  var yRadius = ellipse.height / 2;

  if (xRadius <= 0.0 || yRadius <= 0.0) {
    return false;
  }

  var center = {
    x: ellipse.left + xRadius,
    y: ellipse.top + yRadius
  };
  /* This is a more general form of the circle equation
   *
   * X^2/a^2 + Y^2/b^2 <= 1
   */

  var normalized = {
    x: location.x - center.x,
    y: location.y - center.y
  };
  var inEllipse = normalized.x * normalized.x / (xRadius * xRadius) + normalized.y * normalized.y / (yRadius * yRadius) <= 1.0;
  return inEllipse;
});

/***/ }),

/***/ "./util/findAndMoveHelpers.js":
/*!************************************!*\
  !*** ./util/findAndMoveHelpers.js ***!
  \************************************/
/*! exports provided: moveHandleNearImagePoint, findHandleDataNearImagePoint, moveAnnotation */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1486142__) {

"use strict";
__nested_webpack_require_1486142__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1486142__.d(__nested_webpack_exports__, "moveHandleNearImagePoint", function() { return moveHandleNearImagePoint; });
/* harmony export (binding) */ __nested_webpack_require_1486142__.d(__nested_webpack_exports__, "findHandleDataNearImagePoint", function() { return findHandleDataNearImagePoint; });
/* harmony export (binding) */ __nested_webpack_require_1486142__.d(__nested_webpack_exports__, "moveAnnotation", function() { return moveAnnotation; });
/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1486142__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1486142__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1486142__(/*! ../store/index.js */ "./store/index.js");
/* harmony import */ var _manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1486142__(/*! ../manipulators/getHandleNearImagePoint.js */ "./manipulators/getHandleNearImagePoint.js");
/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1486142__(/*! ./../manipulators/index.js */ "./manipulators/index.js");
/* harmony import */ var _getProximityThreshold_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1486142__(/*! ./getProximityThreshold.js */ "./util/getProximityThreshold.js");
/* harmony import */ var _events__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1486142__(/*! ../events */ "./events.js");
/* harmony import */ var _triggerEvent__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1486142__(/*! ./triggerEvent */ "./util/triggerEvent.js");


function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }






 // TODO this should just be in manipulators? They are just manipulator wrappers anyway.

/**
 * Moves a handle near the image point.
 * @public
 * @function moveHandleNearImagePoint
 * @memberof Util
 *
 * @param  {Event} evt      The event.
 * @param  {*} tool The tool
 * @param  {Object} toolData     The toolData that corresponds to the handle.
 * @param  {Object} handle  The handle to be moved.
 * @param  {string} interactionType
 * @returns {undefined}
 */

var moveHandleNearImagePoint = function moveHandleNearImagePoint(evt, tool, toolData, handle, interactionType) {
  toolData.active = true;
  _store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isToolLocked = true;

  var doneHandler = function doneHandler(success) {
    var element = evt.detail.element;
    var toolName = toolData.toolType || toolData.toolName;
    var modifiedEventData = {
      toolName: toolName,
      toolType: toolName,
      // Deprecation notice: toolType will be replaced by toolName
      element: element,
      measurementData: _objectSpread({}, toolData, {
        active: false
      })
    };
    Object(_triggerEvent__WEBPACK_IMPORTED_MODULE_6__["default"])(element, _events__WEBPACK_IMPORTED_MODULE_5__["default"].MEASUREMENT_COMPLETED, modifiedEventData);
  };

  Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["moveHandle"])(evt.detail, tool.name, toolData, handle, tool.options, interactionType, doneHandler);
  evt.stopImmediatePropagation();
  evt.stopPropagation();
  evt.preventDefault();
  return;
};
/**
 * Finds the handle near the image point and its corresponding data.
 *
 * @public
 * @function findHandleDataNearImagePoint
 * @memberof Util
 *
 * @param  {HTMLElement} element  The elment.
 * @param  {Object} toolState     The state of the tool.
 * @param  {string} toolName The name of the tool the handle corrosponds to.
 * @param  {Object} coords The coordinates that need to be checked.
 * @param  {String} [interactionType=mouse]
 * @returns {*}
 */


var findHandleDataNearImagePoint = function findHandleDataNearImagePoint(element, toolState, toolName, coords) {
  var interactionType = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'mouse';

  for (var i = 0; i < toolState.data.length; i++) {
    var data = toolState.data[i];
    var handle = Object(_manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element, data.handles, coords, Object(_getProximityThreshold_js__WEBPACK_IMPORTED_MODULE_4__["default"])(interactionType, toolName));

    if (handle) {
      return {
        handle: handle,
        data: data
      };
    }
  }
};
/**
 * Moves an entire annotation near the click.
 *
 * @public
 * @function moveAnnotation
 * @memberof Util
 *
 * @param  {Event}   evt           The event.
 * @param  {Object}  tool The tool that the annotation belongs to.
 * @param  {string}  tool.name
 * @param  {Object}  [tool.options={}]
 * @param  {Boolean} [tool.options.preventHandleOutsideImage]
 * @param  {Boolean} [tool.options.deleteIfHandleOutsideImage]
 * @param  {Object}  annotation The toolData that corresponds to the annotation.
 * @param  {String}  [interactionType=mouse]
 * @returns {undefined}
 */


var moveAnnotation = function moveAnnotation(evt, tool, annotation) {
  var interactionType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'mouse';
  annotation.active = true;
  _store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isToolLocked = true;
  Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["moveAllHandles"])(evt.detail, tool.name, annotation, null, tool.options, interactionType, function () {
    annotation.active = false;
    _store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isToolLocked = false;
  });
  evt.stopImmediatePropagation();
  evt.stopPropagation();
  evt.preventDefault();
  return;
};



/***/ }),

/***/ "./util/freehand/ClickedLineData.js":
/*!******************************************!*\
  !*** ./util/freehand/ClickedLineData.js ***!
  \******************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1493107__) {

"use strict";
__nested_webpack_require_1493107__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1493107__.d(__nested_webpack_exports__, "default", function() { return ClickedLineData; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1493107__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1493107__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);


/**
 * @public
 * @name ClickedLineData
 * @classdesc Creates an object containing information about the clicked line.
 * @property {number} toolIndex ID of the tool that the line corresponds to.
 * @property {Object} handleIndexArray An array of the handle indicies that correspond to the line segment.
 */
var ClickedLineData =
/**
 * Constructs an object containing information about the clicked line.
 * @param {number} toolIndex - The ID of the tool the line corresponds to.
 * @param {Object} handleIndexArray - An array of the handle indicies that correspond to the line segment.
 */
function ClickedLineData(toolIndex, handleIndexArray) {
  _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ClickedLineData);

  this.toolIndex = toolIndex;
  this.handleIndexArray = handleIndexArray;
};



/***/ }),

/***/ "./util/freehand/FreehandHandleData.js":
/*!*********************************************!*\
  !*** ./util/freehand/FreehandHandleData.js ***!
  \*********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1494862__) {

"use strict";
__nested_webpack_require_1494862__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1494862__.d(__nested_webpack_exports__, "default", function() { return FreehandHandleData; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1494862__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1494862__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);


/**
 * @public
 * @name FreehandHandleData
 * @classdesc Creates a single handle for the freehand tool.
 *
 * @property {number} x The x position.
 * @property {number} y The y position.
 * @property {boolean} highlight Whether the handle should be rendered as the highlighted color.
 * @property {boolean} active Whether the handle is active.
 * @property {Object} lines An array of lines associated with the handle.
 */
var FreehandHandleData =
/**
 * Constructs a a single handle for the freehand tool
 *
 * @param {Object} position - The position of the handle.
 * @param {boolean} highlight - whether the handle should be rendered as the highlighted color.
 * @param {boolean} active - whether the handle is active.
 */
function FreehandHandleData(position) {
  var highlight = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
  var active = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;

  _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, FreehandHandleData);

  this.x = position.x;
  this.y = position.y;
  this.highlight = highlight;
  this.active = active;
  this.lines = [];
};



/***/ }),

/***/ "./util/freehand/FreehandLineFinder.js":
/*!*********************************************!*\
  !*** ./util/freehand/FreehandLineFinder.js ***!
  \*********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1496968__) {

"use strict";
__nested_webpack_require_1496968__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1496968__.d(__nested_webpack_exports__, "default", function() { return FreehandLineFinder; });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1496968__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1496968__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1496968__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_1496968__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1496968__(/*! ../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1496968__(/*! ../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _ClickedLineData_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1496968__(/*! ./ClickedLineData.js */ "./util/freehand/ClickedLineData.js");





var distanceThreshold = 10;
/**
 * @public
 * @class FreehandLineFinder
 * @classdesc Class that finds lines of freehand ROIs based on click proximity.
 */

var FreehandLineFinder =
/*#__PURE__*/
function () {
  /**
   * Creates an instance of FreehandLineFinder.
   * @param {*} eventData - Data object associated with the event.
   * @param {string} toolName - The tool name
   * @memberof FreehandLineFinder
   */
  function FreehandLineFinder(eventData, toolName) {
    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, FreehandLineFinder);

    this._eventData = eventData;
    this._toolName = toolName;
  }
  /**
   * Looks for lines near the mouse cursor.
   *
   * @public
   * @method
   * @returns {ClickedLineData} Data object corresponding to the clicked line.
   */


  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(FreehandLineFinder, [{
    key: "findLine",
    value: function findLine() {
      var closestToolIndex = this.findTool();

      if (closestToolIndex === null) {
        return null;
      }

      var closeLines = this._getCloseLinesInTool(closestToolIndex);

      if (closeLines) {
        var clickedLineData = this._findCorrectLine(closestToolIndex, closeLines); // Note: clickedLineData may be null if no valid projections are found.


        return clickedLineData;
      } // Return null if no valid close lines found.


      return null;
    }
    /**
     * Looks for tools near the mouse cursor.
     *
     * @public
     * @method
     *
     * @returns {ClickedLineData} Data object corresponding to the clicked line.
     */

  }, {
    key: "findTool",
    value: function findTool() {
      this._toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(this._eventData.element, this._toolName);
      this._mousePoint = this._eventData.currentPoints.canvas;

      if (!this._toolData) {
        return null;
      }

      var closestHandle = this._nearestHandleToPointAllTools();

      return closestHandle.toolIndex;
    }
    /**
     * Finds the nearest handle to the mouse cursor for all tools.
     * @private
     * @method
     * @returns {Object} The handle closest to the point.
     */

  }, {
    key: "_nearestHandleToPointAllTools",
    value: function _nearestHandleToPointAllTools() {
      var toolData = this._toolData;
      var closestHandle = {
        toolIndex: null,
        handleIndex: null,
        distance: Infinity // Some large number

      };

      for (var toolIndex = 0; toolIndex < toolData.data.length; toolIndex++) {
        var closestHandleForToolI = this._nearestHandleToPoint(toolIndex);

        if (closestHandleForToolI === null) {
          continue;
        }

        if (closestHandleForToolI.distance < closestHandle.distance) {
          closestHandle = closestHandleForToolI;
        }
      }

      return closestHandle;
    }
    /**
     * Finds the nearest handle to the mouse cursor for a specific tool.
     * @private
     * @method
     *
     * @param {number} toolIndex The index of the particular freehand tool.
     * @returns {Object} An object containing information about the closest handle.
     */

  }, {
    key: "_nearestHandleToPoint",
    value: function _nearestHandleToPoint(toolIndex) {
      var eventData = this._eventData;
      var toolData = this._toolData;
      var data = toolData.data[toolIndex];
      var points = data.handles.points;

      if (points === undefined) {
        return null;
      }

      if (data.visible === false) {
        return null;
      }

      var closest = {
        toolIndex: toolIndex,
        handleIndex: null,
        distance: Infinity // Some large number

      };

      for (var i = 0; i < points.length; i++) {
        var handleCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.pixelToCanvas(eventData.element, points[i]);
        var handleDistanceFromMousePoint = _externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstoneMath.point.distance(handleCanvas, this._mousePoint);

        if (handleDistanceFromMousePoint < closest.distance) {
          closest.handleIndex = i;
          closest.distance = handleDistanceFromMousePoint;
        }
      }

      return closest;
    }
    /**
     * Finds all the lines close to the mouse point for a particular tool.
     * @private
     * @method
     *
     * @param {number} toolIndex The index of the particular freehand tool.
     * @returns {Object} An array of lines close to the mouse point.
     */

  }, {
    key: "_getCloseLinesInTool",
    value: function _getCloseLinesInTool(toolIndex) {
      var toolData = this._toolData;
      var points = toolData.data[toolIndex].handles.points;
      var closeLines = [];

      for (var i = 0; i < points.length; i++) {
        var nextIndex = FreehandLineFinder.getNextHandleIndex(i, points.length);

        var d = this._distanceOfPointfromLine(points[i], points[nextIndex]);

        if (d < distanceThreshold) {
          closeLines.push([i, nextIndex]);
        }
      }

      return closeLines;
    }
    /**
     * Finds the line the user clicked on from an array of close lines.\
     * @private
     * @method
     *
     * @param {number} toolIndex The index of the particular freehand tool.
     * @param {Object} closeLines An array of lines close to the mouse point.
     * @returns {ClickedLineData|null} An instance of ClickedLineData containing information about the line, or null if no line is correct.
     */

  }, {
    key: "_findCorrectLine",
    value: function _findCorrectLine(toolIndex, closeLines) {
      // Test if any candidate lines can be projected onto by the mousePoint
      for (var i = 0; i < closeLines.length; i++) {
        if (this._pointProjectsToLineSegment(toolIndex, closeLines[i])) {
          return new _ClickedLineData_js__WEBPACK_IMPORTED_MODULE_4__["default"](toolIndex, closeLines[i]);
        }
      } // No valid line found


      return null;
    }
    /**
     * Returns true if the mouse point projects onto the line segment.
     * @private
     * @method
     *
     * @param {number} toolIndex The index of the particular freehand tool.
     * @param {Object} handleIndexArray An array of indicies corresponding to the line segment.
     * @returns {boolean} True if the mouse point projects onto the line segment
     */

  }, {
    key: "_pointProjectsToLineSegment",
    value: function _pointProjectsToLineSegment(toolIndex, handleIndexArray) {
      var eventData = this._eventData;
      var toolData = this._toolData;
      var data = toolData.data[toolIndex];
      var points = data.handles.points;

      if (data.handles.points === undefined) {
        return;
      }

      if (data.visible === false) {
        return false;
      }

      var handle1 = points[handleIndexArray[0]];
      var handle2 = points[handleIndexArray[1]];
      var p = FreehandLineFinder.getCanvasPointsFromHandles(handle1, handle2, eventData.element);
      var r = FreehandLineFinder.getLineAsVector(p);

      var m = this._getLineOriginToMouseAsVector(p); // Project vector m onto r to see if the point is within bounds of line segment


      var mProj = (m[0] * r[0] + m[1] * r[1]) / r.magnitude;

      if (mProj > 0 && mProj < r.magnitude) {
        return true;
      }

      return false;
    }
    /**
     * Returns the canvas positions from the handle's pixel positions.
     *
     * @static
     * @public
     * @method
     * @param {FreehandHandleData} handle1 The first handle.
     * @param {FreehandHandleData} handle2 The second handle.
     * @param {Object} element The element on which the handles reside.
     * @returns {Object} An array contsining the handle positions in canvas coordinates.
     */

  }, {
    key: "_getLineOriginToMouseAsVector",

    /**
     * Constructs a vector from the direction and magnitude of the line from the the line origin to the mouse cursor.
     * @private
     * @method
     *
     * @param {Object} p An array of two points respresenting the line segment.
     * @returns {Object} An array containing the x and y components of the vector.
     */
    value: function _getLineOriginToMouseAsVector(p) {
      var m = [this._mousePoint.x - p[0].x, this._mousePoint.y - p[0].y];
      return m;
    }
    /**
     * Calculates the perpendicular distance of the mouse cursor from a line segment.
     * @private
     * @method
     *
     * @param {FreehandHandleData} handle1 The first handle.
     * @param {FreehandHandleData} handle2 The first handle.
     * @returns {number} The perpendicular distance of the mouse cursor from the line segment.
     */

  }, {
    key: "_distanceOfPointfromLine",
    value: function _distanceOfPointfromLine(handle1, handle2) {
      var eventData = this._eventData;
      var p1 = _externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.pixelToCanvas(eventData.element, handle1);
      var p2 = _externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.pixelToCanvas(eventData.element, handle2);
      var pMouse = this._mousePoint; // Perpendicular distance of point from line:
      // = 2* area of triangle(p1,p2,pm) / length of triangle's base |p2 - p1|

      var twiceAreaOfTriangle = Math.abs((p2.y - p1.y) * pMouse.x - (p2.x - p1.x) * pMouse.y + p2.x * p1.y - p2.y * p1.x);
      var rMagnitude = _externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstoneMath.point.distance(p1, p2);
      var d = twiceAreaOfTriangle / rMagnitude;
      return d;
    }
    /**
     * Gets the next handl index from a cyclical array of points.
     *
     * @static
     * @public
     * @method
     *
     * @param {number} currentIndex The current index.
     * @param {number} length The number of handles in the polygon.
     * @returns {number} The index of the next handle.
     */

  }], [{
    key: "getCanvasPointsFromHandles",
    value: function getCanvasPointsFromHandles(handle1, handle2, element) {
      var p = []; // Point r from left to right so that we only have one orientation to test.

      if (handle1.x < handle2.x) {
        p.push(_externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.pixelToCanvas(element, handle1));
        p.push(_externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.pixelToCanvas(element, handle2));
      } else {
        p.push(_externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.pixelToCanvas(element, handle2));
        p.push(_externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.pixelToCanvas(element, handle1));
      }

      return p;
    }
    /**
     * Converts a line segment to a vector.
     *
     * @static
     * @public
     * @method
     * @param {Object} p An array of two points respresenting the line segment.
     * @returns {Object} An array containing the x and y components of the vector, as well as a magnitude property.
     */

  }, {
    key: "getLineAsVector",
    value: function getLineAsVector(p) {
      var r = [p[1].x - p[0].x, p[1].y - p[0].y];
      r.magnitude = _externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstoneMath.point.distance(p[0], p[1]);
      return r;
    }
  }, {
    key: "getNextHandleIndex",
    value: function getNextHandleIndex(currentIndex, length) {
      var nextIndex;

      if (currentIndex < length - 1) {
        nextIndex = currentIndex + 1;
      } else {
        nextIndex = 0;
      }

      return nextIndex;
    }
  }]);

  return FreehandLineFinder;
}();



/***/ }),

/***/ "./util/freehand/addLine.js":
/*!**********************************!*\
  !*** ./util/freehand/addLine.js ***!
  \**********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1510369__) {

"use strict";
__nested_webpack_require_1510369__.r(__nested_webpack_exports__);
/**
 * AddLine - Adds a line to a specifc index of a freehand tool points array.
 *
 * @param  {Object[]} points      The array of points.
 * @param  {Number} insertIndex The index to insert the line.
 * @returns {Null}             description
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (points, insertIndex) {
  // Add the line from the inserted handle to the handle after
  if (insertIndex === points.length - 1) {
    points[insertIndex].lines.push(points[0]);
  } else {
    points[insertIndex].lines.push(points[insertIndex + 1]);
  }
});

/***/ }),

/***/ "./util/freehand/calculateFreehandStatistics.js":
/*!******************************************************!*\
  !*** ./util/freehand/calculateFreehandStatistics.js ***!
  \******************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1511353__) {

"use strict";
__nested_webpack_require_1511353__.r(__nested_webpack_exports__);
/* harmony import */ var _pointInFreehand_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1511353__(/*! ./pointInFreehand.js */ "./util/freehand/pointInFreehand.js");

/**
 * Calculates the statistics of all the pixels within the freehand object.
 * @export @public @method
 * @name calculateFreehandStatistics
 *
 * @param {Object} sp An array of the pixel data.
 * @param {Object} boundingBox Rectangular box enclosing the polygon.
 * @param {Object} dataHandles Data object associated with the tool.
 * @returns {Object} Object containing the derived statistics.
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (sp, boundingBox, dataHandles) {
  var statisticsObj = {
    count: 0,
    mean: 0.0,
    variance: 0.0,
    stdDev: 0.0
  };
  var sum = getSum(sp, boundingBox, dataHandles);

  if (sum.count === 0) {
    return statisticsObj;
  }

  statisticsObj.count = sum.count;
  statisticsObj.mean = sum.value / sum.count;
  statisticsObj.variance = sum.squared / sum.count - statisticsObj.mean * statisticsObj.mean;
  statisticsObj.stdDev = Math.sqrt(statisticsObj.variance);
  return statisticsObj;
});
/**
 * Calculates the sum, squared sum and count of all pixels within the polygon.
 * @private
 * @method
 * @name getSum
 *
 * @param {Object} sp An array of the pixel data.
 * @param {Object} boundingBox Rectangular box enclosing the polygon.
 * @param {Object} dataHandles Data object associated with the tool.
 * @returns {Object} Object containing the sum, squared sum and pixel count.
 */

function getSum(sp, boundingBox, dataHandles) {
  var sum = {
    value: 0,
    squared: 0,
    count: 0
  };
  var index = 0;

  for (var y = boundingBox.top; y < boundingBox.top + boundingBox.height; y++) {
    for (var x = boundingBox.left; x < boundingBox.left + boundingBox.width; x++) {
      var point = {
        x: x,
        y: y
      };
      sumPointIfInFreehand(dataHandles, point, sum, sp[index]);
      index++;
    }
  }

  return sum;
}
/**
 * Adds the pixel to the workingSum if it is within the polygon.
 * @private
 * @method sumPointIfInFreehand
 *
 * @param {Object} dataHandles Data object associated with the tool.
 * @param {Object} point The pixel coordinates.
 * @param {Object} workingSum The working sum, squared sum and pixel count.
 * @param {Object} pixelValue The pixel value. // @modifies {workingSum}
 * @returns {undefined}
 */


function sumPointIfInFreehand(dataHandles, point, workingSum, pixelValue) {
  if (Object(_pointInFreehand_js__WEBPACK_IMPORTED_MODULE_0__["default"])(dataHandles, point)) {
    workingSum.value += pixelValue;
    workingSum.squared += pixelValue * pixelValue;
    workingSum.count++;
  }
}

/***/ }),

/***/ "./util/freehand/freehandArea.js":
/*!***************************************!*\
  !*** ./util/freehand/freehandArea.js ***!
  \***************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1514388__) {

"use strict";
__nested_webpack_require_1514388__.r(__nested_webpack_exports__);
/**
 * Calculates the area of a freehand tool polygon.
 * @export @public @method
 * @name freehandArea
 *
 * @param {Object} dataHandles Data object associated with the tool.
 * @param {Object} scaling Area scaling of image.
 * @returns {number} The area of the polygon.
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (dataHandles, scaling) {
  var freeHandArea = 0;
  var j = dataHandles.length - 1; // The last vertex is the previous one to the first

  scaling = scaling || 1; // If scaling is falsy, set scaling to 1

  for (var i = 0; i < dataHandles.length; i++) {
    freeHandArea += (dataHandles[j].x + dataHandles[i].x) * (dataHandles[j].y - dataHandles[i].y);
    j = i; // Here j is previous vertex to i
  }

  return Math.abs(freeHandArea * scaling / 2.0);
});

/***/ }),

/***/ "./util/freehand/freehandIntersect.js":
/*!********************************************!*\
  !*** ./util/freehand/freehandIntersect.js ***!
  \********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1515558__) {

"use strict";
__nested_webpack_require_1515558__.r(__nested_webpack_exports__);
/**
 * Orientation algoritm to determine if two lines cross.
 * Credit and details: geeksforgeeks.org/check-if-two-given-line-segments-intersect/
 */

/**
 * Determines whether a new handle causes an intersection of the lines of the polygon.
 * @public
 * @function newHandle
 *
 * @param {Object} candidateHandle The new handle to check.
 * @param {Object} dataHandles data object associated with the tool.
 * @returns {boolean} - Whether the new line intersects with any other lines of the polygon.
 */
function newHandle(candidateHandle, dataHandles) {
  // Check if the proposed line will intersect any existent line
  var lastHandleId = dataHandles.length - 1;
  var lastHandle = getCoords(dataHandles[lastHandleId]);
  var newHandle = getCoords(candidateHandle);
  return doesIntersectOtherLines(dataHandles, lastHandle, newHandle, [lastHandleId]);
}
/**
 * Checks if the last line of a polygon will intersect the other lines of the polgyon.
 * @public
 * @function end
 *
 * @param {Object} dataHandles data object associated with the tool.
 * @returns {boolean} Whether the last line intersects with any other lines of the polygon.
 */


function end(dataHandles) {
  var lastHandleId = dataHandles.length - 1;
  var lastHandle = getCoords(dataHandles[lastHandleId]);
  var firstHandle = getCoords(dataHandles[0]);
  return doesIntersectOtherLines(dataHandles, lastHandle, firstHandle, [lastHandleId, 0]);
}
/**
 * Checks whether the modification of a handle's position causes intersection of the lines of the polygon.
 * @public
 * @method modify
 *
 * @param {Object} dataHandles Data object associated with the tool.
 * @param {number} modifiedHandleId The id of the handle being modified.
 * @returns {boolean} Whether the modfication causes any intersections.
 */


function modify(dataHandles, modifiedHandleId) {
  // Check if the modifiedHandle's previous and next lines will intersect any other line in the polygon
  var modifiedHandle = getCoords(dataHandles[modifiedHandleId]); // Previous neightbor handle

  var neighborHandleId = modifiedHandleId - 1;

  if (modifiedHandleId === 0) {
    neighborHandleId = dataHandles.length - 1;
  }

  var neighborHandle = getCoords(dataHandles[neighborHandleId]);

  if (doesIntersectOtherLines(dataHandles, modifiedHandle, neighborHandle, [modifiedHandleId, neighborHandleId])) {
    return true;
  } // Next neightbor handle


  if (modifiedHandleId === dataHandles.length - 1) {
    neighborHandleId = 0;
  } else {
    neighborHandleId = modifiedHandleId + 1;
  }

  neighborHandle = getCoords(dataHandles[neighborHandleId]);
  return doesIntersectOtherLines(dataHandles, modifiedHandle, neighborHandle, [modifiedHandleId, neighborHandleId]);
}
/**
 * Checks whether the line (p1,q1) intersects any of the other lines in the polygon.
 * @private
 * @function doesIntersectOtherLines
 *
 * @param {Object} dataHandles Data object associated with the tool.
 * @param {Object} p1 Coordinates of the start of the line.
 * @param {Object} q1 Coordinates of the end of the line.
 * @param {Object} ignoredHandleIds Ids of handles to ignore (i.e. lines that share a vertex with the line being tested).
 * @returns {boolean} Whether the line intersects any of the other lines in the polygon.
 */


function doesIntersectOtherLines(dataHandles, p1, q1, ignoredHandleIds) {
  var j = dataHandles.length - 1;

  for (var i = 0; i < dataHandles.length; i++) {
    if (ignoredHandleIds.indexOf(i) !== -1 || ignoredHandleIds.indexOf(j) !== -1) {
      j = i;
      continue;
    }

    var p2 = getCoords(dataHandles[j]);
    var q2 = getCoords(dataHandles[i]);

    if (doesIntersect(p1, q1, p2, q2)) {
      return true;
    }

    j = i;
  }

  return false;
}
/**
 * Checks whether the line (p1,q1) intersects the line (p2,q2) via an orientation algorithm.
 * @private
 * @function doesIntersect
 *
 * @param {Object} p1 Coordinates of the start of the line 1.
 * @param {Object} q1 Coordinates of the end of the line 1.
 * @param {Object} p2 Coordinates of the start of the line 2.
 * @param {Object} q2 Coordinates of the end of the line 2.
 * @returns {boolean} Whether lines (p1,q1) and (p2,q2) intersect.
 */


function doesIntersect(p1, q1, p2, q2) {
  var result = false;
  var orient = [orientation(p1, q1, p2), orientation(p1, q1, q2), orientation(p2, q2, p1), orientation(p2, q2, q1)]; // General Case

  if (orient[0] !== orient[1] && orient[2] !== orient[3]) {
    return true;
  } // Special Cases


  if (orient[0] === 0 && onSegment(p1, p2, q1)) {
    // If p1, q1 and p2 are colinear and p2 lies on segment p1q1
    result = true;
  } else if (orient[1] === 0 && onSegment(p1, q2, q1)) {
    // If p1, q1 and p2 are colinear and q2 lies on segment p1q1
    result = true;
  } else if (orient[2] === 0 && onSegment(p2, p1, q2)) {
    // If p2, q2 and p1 are colinear and p1 lies on segment p2q2
    result = true;
  } else if (orient[3] === 0 && onSegment(p2, q1, q2)) {
    // If p2, q2 and q1 are colinear and q1 lies on segment p2q2
    result = true;
  }

  return result;
}
/**
 * Returns an object with two properties, x and y, from a heavier FreehandHandleData object.
 * @private
 * @function getCoords
 *
 * @param {Object} dataHandle Data object associated with a single handle in the freehand tool.
 * @returns {Object} An object containing position propeties x and y.
 */


function getCoords(dataHandle) {
  return {
    x: dataHandle.x,
    y: dataHandle.y
  };
}
/**
 * Checks the orientation of 3 points.
 * @private
 * @function orientation
 *
 * @param {Object} p First point.
 * @param {Object} q Second point.
 * @param {Object} r Third point.
 * @returns {number} - 0: Colinear, 1: Clockwise, 2: Anticlockwise
 */


function orientation(p, q, r) {
  var orientationValue = (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);

  if (orientationValue === 0) {
    return 0; // Colinear
  }

  return orientationValue > 0 ? 1 : 2;
}
/**
 * Checks if point q lines on the segment (p,r).
 * @private
 * @function onSegment
 *
 * @param {Object} p Point p.
 * @param {Object} q Point q.
 * @param {Object} r Point r.
 * @returns {boolean} - If q lies on line segment (p,r).
 */


function onSegment(p, q, r) {
  if (q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y)) {
    return true;
  }

  return false;
}

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  newHandle: newHandle,
  end: end,
  modify: modify
});

/***/ }),

/***/ "./util/freehand/index.js":
/*!********************************!*\
  !*** ./util/freehand/index.js ***!
  \********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1522359__) {

"use strict";
__nested_webpack_require_1522359__.r(__nested_webpack_exports__);
/* harmony import */ var _calculateFreehandStatistics_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1522359__(/*! ./calculateFreehandStatistics.js */ "./util/freehand/calculateFreehandStatistics.js");
/* harmony import */ var _ClickedLineData_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1522359__(/*! ./ClickedLineData.js */ "./util/freehand/ClickedLineData.js");
/* harmony import */ var _freehandArea_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1522359__(/*! ./freehandArea.js */ "./util/freehand/freehandArea.js");
/* harmony import */ var _FreehandHandleData_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1522359__(/*! ./FreehandHandleData.js */ "./util/freehand/FreehandHandleData.js");
/* harmony import */ var _freehandIntersect_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1522359__(/*! ./freehandIntersect.js */ "./util/freehand/freehandIntersect.js");
/* harmony import */ var _FreehandLineFinder_js__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1522359__(/*! ./FreehandLineFinder.js */ "./util/freehand/FreehandLineFinder.js");
/* harmony import */ var _insertOrDelete_js__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1522359__(/*! ./insertOrDelete.js */ "./util/freehand/insertOrDelete.js");
/* harmony import */ var _pointInFreehand_js__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1522359__(/*! ./pointInFreehand.js */ "./util/freehand/pointInFreehand.js");
/* harmony import */ var _addLine_js__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1522359__(/*! ./addLine.js */ "./util/freehand/addLine.js");









/* harmony default export */ __nested_webpack_exports__["default"] = ({
  calculateFreehandStatistics: _calculateFreehandStatistics_js__WEBPACK_IMPORTED_MODULE_0__["default"],
  ClickedLineData: _ClickedLineData_js__WEBPACK_IMPORTED_MODULE_1__["default"],
  freehandArea: _freehandArea_js__WEBPACK_IMPORTED_MODULE_2__["default"],
  FreehandHandleData: _FreehandHandleData_js__WEBPACK_IMPORTED_MODULE_3__["default"],
  freehandIntersect: _freehandIntersect_js__WEBPACK_IMPORTED_MODULE_4__["default"],
  FreehandLineFinder: _FreehandLineFinder_js__WEBPACK_IMPORTED_MODULE_5__["default"],
  insertOrDelete: _insertOrDelete_js__WEBPACK_IMPORTED_MODULE_6__["default"],
  pointInFreehand: _pointInFreehand_js__WEBPACK_IMPORTED_MODULE_7__["default"],
  addLine: _addLine_js__WEBPACK_IMPORTED_MODULE_8__["default"]
});

/***/ }),

/***/ "./util/freehand/insertOrDelete.js":
/*!*****************************************!*\
  !*** ./util/freehand/insertOrDelete.js ***!
  \*****************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1525018__) {

"use strict";
__nested_webpack_require_1525018__.r(__nested_webpack_exports__);
/* harmony import */ var _FreehandLineFinder_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1525018__(/*! ./FreehandLineFinder.js */ "./util/freehand/FreehandLineFinder.js");
/* harmony import */ var _FreehandHandleData_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1525018__(/*! ./FreehandHandleData.js */ "./util/freehand/FreehandHandleData.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1525018__(/*! ../../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1525018__(/*! ../../externalModules.js */ "./externalModules.js");
/* harmony import */ var _addLine_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1525018__(/*! ./addLine.js */ "./util/freehand/addLine.js");





/**
 * Inserts or deletes a point from a freehand tool.
 * @export @public @method
 * @name insertOrDelete
 *
 * @param {Object} evt The event.
 * @param {Object} nearby Object containing information about a nearby handle.
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (evt, nearby) {
  var eventData = evt.detail;

  if (nearby && nearby.handleNearby !== null) {
    var deleteInfo = {
      toolIndex: nearby.toolIndex,
      handleIndex: nearby.handleNearby
    };

    _deletePoint.call(this, eventData, deleteInfo);
  } else {
    var freehandLineFinder = new _FreehandLineFinder_js__WEBPACK_IMPORTED_MODULE_0__["default"](eventData, this.name);
    var insertInfo = freehandLineFinder.findLine();

    if (insertInfo) {
      _insertPoint.call(this, eventData, insertInfo);
    }
  }
});
/**
 * Deletes a point from a freehand tool.
 * @private
 * @method
 *
 * @param {Object} eventData The data object associated with the event.
 * @param {Object} deleteInfo Object containing information about which point to delete.
 * @returns {void}
 */

function _deletePoint(eventData, deleteInfo) {
  var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(eventData.element, this.name);

  if (toolData === undefined) {
    return;
  }

  var deleteHandle = deleteInfo.handleIndex;
  var toolIndex = deleteInfo.toolIndex; // Get the toolData from insertInfo

  var data = toolData.data[toolIndex];
  var points = data.handles.points; // Only allow delete if > 3 points

  if (points.length <= 3) {
    return;
  } // Link the line of the previous handle to the one after handles[deleteHandle];


  if (deleteHandle === points.length - 1) {
    points[deleteHandle - 1].lines.pop();
    points[deleteHandle - 1].lines.push(points[0]);
  } else if (deleteHandle === 0) {
    points[points.length - 1].lines.pop();
    points[points.length - 1].lines.push(points[deleteHandle + 1]);
  } else {
    points[deleteHandle - 1].lines.pop();
    points[deleteHandle - 1].lines.push(points[deleteHandle + 1]);
  } // Remove the handle


  points.splice(deleteHandle, 1);
  data.invalidated = true;
  data.active = true;
  data.highlight = true; // Force onImageRendered to fire

  _externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.updateImage(eventData.element);
}
/**
 * Inserts a new point into a freehand tool.
 * @private
 * @method
 *
 * @param {Object} eventData - The data object associated with the event.
 * @param {Object} insertInfo - Object containing information about where to insert the point.
 * @returns {void}
 */


function _insertPoint(eventData, insertInfo) {
  var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(eventData.element, this.name);

  if (toolData === undefined) {
    return;
  } // Get the toolData from insertInfo


  var data = toolData.data[insertInfo.toolIndex];

  var insertIndex = _getInsertionIndex(insertInfo);

  if (insertIndex === Infinity) {
    return;
  }

  var handleData = new _FreehandHandleData_js__WEBPACK_IMPORTED_MODULE_1__["default"](eventData.currentPoints.image);
  var points = data.handles.points; // Add the new handle

  points.splice(insertIndex, 0, handleData); // Add the line from the previous handle to the inserted handle (note the tool is now one increment longer)

  points[insertIndex - 1].lines.pop();
  points[insertIndex - 1].lines.push(eventData.currentPoints.image);
  Object(_addLine_js__WEBPACK_IMPORTED_MODULE_4__["default"])(points, insertIndex);
  data.active = true;
  data.highlight = true; // Force onImageRendered to fire

  data.invalidated = true;
  _externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.updateImage(eventData.element);
}
/**
 * Gets the handle index of a tool in which to insert the new point.
 * @private
 * @method
 *
 * @param {Object} insertInfo - Object containing information about where to insert the point.
 * @returns {void}
 */


function _getInsertionIndex(insertInfo) {
  // Get lowest index that isn't zero
  var handleIndexArray = insertInfo.handleIndexArray;
  var insertIndex = Infinity;
  var arrayContainsZero = handleIndexArray.includes(0);

  for (var i = 0; i < handleIndexArray.length; i++) {
    var index = handleIndexArray[i];

    if (index !== 0 && index < insertIndex) {
      insertIndex = index;
    }
  } // Treat the special case of handleIndexArray === [0,1] || [1,0]


  if (arrayContainsZero && insertIndex === 1) {
    insertIndex = 0;
  } // The insertion index shall be just after the lower index


  insertIndex++;
  return insertIndex;
}

/***/ }),

/***/ "./util/freehand/pointInFreehand.js":
/*!******************************************!*\
  !*** ./util/freehand/pointInFreehand.js ***!
  \******************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1530854__) {

"use strict";
__nested_webpack_require_1530854__.r(__nested_webpack_exports__);
/**
 * Calculates whether "location" is inside the polygon defined by dataHandles
 * by counting the number of times a ray originating from "point" crosses the
 * edges of the polygon. Odd === inside, Even === outside.
 * @export @public @method
 * @name pointInFreehand
 *
 * @param {Object} dataHandles Data object associated with the tool.
 * @param {Object} location The coordinates being queried.
 * @returns {boolean} True if the location is inside the polygon defined by dataHandles.
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (dataHandles, location) {
  var inROI = false; // Cycle round pairs of points

  var j = dataHandles.length - 1; // The last vertex is the previous one to the first

  for (var i = 0; i < dataHandles.length; i++) {
    if (rayFromPointCrosssesLine(location, dataHandles[i], dataHandles[j])) {
      inROI = !inROI;
    }

    j = i; // Here j is previous vertex to i
  }

  return inROI;
});
/**
 * Returns true if the y-position yp is enclosed within y-positions y1 and y2.
 * @private
 * @method
 * @name isEnclosedY
 *
 * @param {number} yp The y position of point p.
 * @param {number} y1 The y position of point 1.
 * @param {number} y2 The y position of point 2.
 * @returns {boolean} True if the y-position yp is enclosed within y-positions y1 and y2.
 */

function isEnclosedY(yp, y1, y2) {
  if (y1 < yp && yp < y2 || y2 < yp && yp < y1) {
    return true;
  }

  return false;
}
/**
 * Returns true if the line segment is to the right of the point.
 * @private
 * @method
 * @name isLineRightOfPoint
 *
 * @param {Object} point The point being queried.
 * @param {Object} lp1 The first point of the line segment.
 * @param {Object} lp2 The second point of the line segment.
 * @returns {boolean} True if the line is to the right of the point.
 */


function isLineRightOfPoint(point, lp1, lp2) {
  // If both right of point return true
  if (lp1.x > point.x && lp2.x > point.x) {
    return true;
  } // Catch when line is vertical.


  if (lp1.x === lp2.x) {
    return point.x < lp1.x;
  } // Put leftmost point in lp1


  if (lp1.x > lp2.x) {
    var lptemp = lp1;
    lp1 = lp2;
    lp2 = lptemp;
  }

  var lPointY = lineSegmentAtPoint(point, lp1, lp2); // If the lp1.x and lp2.x enclose point.x check gradient of line and see if
  // Point is above or below the line to calculate if it inside.

  if (Math.sign(lPointY.gradient) * point.y > Math.sign(lPointY.gradient) * lPointY.value) {
    return true;
  }

  return false;
}
/**
 * Returns the y value of the line segment at the x value of the point.
 * @private
 * @method
 * @name lineSegmentAtPoint
 *
 * @param {Object} point The point being queried.
 * @param {Object} lp1 The first point of the line segment.
 * @param {Object} lp2 The second point of the line segment.
 * @returns {Object} An object containing the y value as well as the gradient of the line segment.
 */


function lineSegmentAtPoint(point, lp1, lp2) {
  var dydx = (lp2.y - lp1.y) / (lp2.x - lp1.x);
  var fx = {
    value: lp1.y + dydx * (point.x - lp1.x),
    gradient: dydx
  };
  return fx;
}
/**
 * Returns true if a rightwards ray originating from the point crosses the line defined by handleI and handleJ.
 * @private
 * @method
 * @name rayFromPointCrosssesLine
 *
 * @param {Object} point The point being queried.
 * @param {Object} handleI The first handle of the line segment.
 * @param {Object} handleJ The second handle of the line segment.
 * @returns {boolean} True if a rightwards ray originating from the point crosses the line defined by handleI and handleJ.
 */


function rayFromPointCrosssesLine(point, handleI, handleJ) {
  if (isEnclosedY(point.y, handleI.y, handleJ.y) && isLineRightOfPoint(point, handleI, handleJ)) {
    return true;
  }

  return false;
}

/***/ }),

/***/ "./util/getActiveTool.js":
/*!*******************************!*\
  !*** ./util/getActiveTool.js ***!
  \*******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1534964__) {

"use strict";
__nested_webpack_require_1534964__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1534964__.d(__nested_webpack_exports__, "default", function() { return getActiveTool; });
/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1534964__(/*! ../store */ "./store/index.js");
/* harmony import */ var _store_getActiveToolsForElement__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1534964__(/*! ../store/getActiveToolsForElement */ "./store/getActiveToolsForElement.js");
/* harmony import */ var _store_filterToolsUsableWithMultiPartTools__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1534964__(/*! ../store/filterToolsUsableWithMultiPartTools */ "./store/filterToolsUsableWithMultiPartTools.js");


 // Todo: We could simplify this if we only allow one active
// Tool per mouse button mask?

function getActiveTool(element, buttons) {
  var interactionType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'mouse';
  var tools;

  if (interactionType === 'touch') {
    tools = Object(_store_getActiveToolsForElement__WEBPACK_IMPORTED_MODULE_1__["default"])(element, _store__WEBPACK_IMPORTED_MODULE_0__["getters"].touchTools());
    tools = tools.filter(function (tool) {
      return tool.options.isTouchActive;
    });
  } else {
    // Filter out disabled, enabled, and passive
    tools = Object(_store_getActiveToolsForElement__WEBPACK_IMPORTED_MODULE_1__["default"])(element, _store__WEBPACK_IMPORTED_MODULE_0__["getters"].mouseTools()); // Filter out tools that do not match mouseButtonMask

    tools = tools.filter(function (tool) {
      return Array.isArray(tool.options.mouseButtonMask) && buttons && tool.options.mouseButtonMask.includes(buttons) && tool.options.isMouseActive;
    });

    if (_store__WEBPACK_IMPORTED_MODULE_0__["state"].isMultiPartToolActive) {
      tools = Object(_store_filterToolsUsableWithMultiPartTools__WEBPACK_IMPORTED_MODULE_2__["default"])(tools);
    }
  }

  if (tools.length === 0) {
    return;
  }

  return tools[0];
}

/***/ }),

/***/ "./util/getCircleCoords.js":
/*!*********************************!*\
  !*** ./util/getCircleCoords.js ***!
  \*********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1537234__) {

"use strict";
__nested_webpack_require_1537234__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1537234__.d(__nested_webpack_exports__, "default", function() { return getCircleCoords; });
/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1537234__(/*! ../externalModules */ "./externalModules.js");

/**
 * Retrieve the bounds of the circle in image coordinates
 *
 * @param {*} startHandle
 * @param {*} endHandle
 * @returns {{ left: number, top: number, width: number, height: number }}
 */

function getCircleCoords(startHandle, endHandle) {
  var distance = _externalModules__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.distance;
  var radius = distance(startHandle, endHandle);
  return {
    left: Math.floor(Math.min(startHandle.x - radius, endHandle.x)),
    top: Math.floor(Math.min(startHandle.y - radius, endHandle.y)),
    width: radius * 2,
    height: radius * 2
  };
}

/***/ }),

/***/ "./util/getDefault.js":
/*!****************************!*\
  !*** ./util/getDefault.js ***!
  \****************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1538410__) {

"use strict";
__nested_webpack_require_1538410__.r(__nested_webpack_exports__);
/**
 * Returns the first argument if defined, otherwise returns the second
 *
 * @param {*} value
 * @param {*} defaultValue
 * @returns {*}
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (value, defaultValue) {
  return value === undefined ? defaultValue : value;
});

/***/ }),

/***/ "./util/getKeyPressData.js":
/*!*********************************!*\
  !*** ./util/getKeyPressData.js ***!
  \*********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1539031__) {

"use strict";
__nested_webpack_require_1539031__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1539031__.d(__nested_webpack_exports__, "default", function() { return getKeyPressData; });
/* harmony import */ var _store___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1539031__(/*! ../store/ */ "./store/index.js");
/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1539031__(/*! ../externalModules */ "./externalModules.js");


function getKeyPressData(e) {
  var cornerstone = _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone;
  var element = e.currentTarget;
  var enabledElement = cornerstone.getEnabledElement(element);

  if (!enabledElement || !enabledElement.image) {
    return;
  }

  var currentPointsImage = _store___WEBPACK_IMPORTED_MODULE_0__["default"].state.mousePositionImage;
  return {
    event: window.event || e,
    // Old IE support
    element: element,
    viewport: cornerstone.getViewport(element),
    image: enabledElement.image,
    currentPoints: {
      image: currentPointsImage,
      canvas: cornerstone.pixelToCanvas(element, currentPointsImage)
    },
    keyCode: e.keyCode,
    which: e.which
  };
}

/***/ }),

/***/ "./util/getLuminance.js":
/*!******************************!*\
  !*** ./util/getLuminance.js ***!
  \******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1540467__) {

"use strict";
__nested_webpack_require_1540467__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1540467__(/*! ../externalModules.js */ "./externalModules.js");

/**
 * Returns the luminance of a region.
 * @public
 * @function getLuminance
 *
 * @param  {HTMLElement} element The element.
 * @param  {number} x       The x position of the top-left corner of the region.
 * @param  {number} y       The y position of the top-left corner of the region.
 * @param  {number} width   The width of the region.
 * @param  {number} height  The height of the region
 * @returns {number[]}         The luminance.
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, x, y, width, height) {
  if (!element) {
    throw new Error('getLuminance: parameter element must not be undefined');
  }

  x = Math.round(x);
  y = Math.round(y);
  var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getEnabledElement(element);
  var image = enabledElement.image;
  var luminance = [];
  var index = 0;
  var pixelData = image.getPixelData();
  var spIndex, row, column;

  if (image.color) {
    for (row = 0; row < height; row++) {
      for (column = 0; column < width; column++) {
        spIndex = ((row + y) * image.columns + (column + x)) * 4;
        var red = pixelData[spIndex];
        var green = pixelData[spIndex + 1];
        var blue = pixelData[spIndex + 2];
        luminance[index++] = 0.2126 * red + 0.7152 * green + 0.0722 * blue;
      }
    }
  } else {
    for (row = 0; row < height; row++) {
      for (column = 0; column < width; column++) {
        spIndex = (row + y) * image.columns + (column + x);
        luminance[index++] = pixelData[spIndex] * image.slope + image.intercept;
      }
    }
  }

  return luminance;
});

/***/ }),

/***/ "./util/getMaxSimultaneousRequests.js":
/*!********************************************!*\
  !*** ./util/getMaxSimultaneousRequests.js ***!
  \********************************************/
/*! exports provided: getDefaultSimultaneousRequests, getMaxSimultaneousRequests, setMaxSimultaneousRequests, getBrowserInfo, isMobileDevice */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1542739__) {

"use strict";
__nested_webpack_require_1542739__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1542739__.d(__nested_webpack_exports__, "getDefaultSimultaneousRequests", function() { return getDefaultSimultaneousRequests; });
/* harmony export (binding) */ __nested_webpack_require_1542739__.d(__nested_webpack_exports__, "getMaxSimultaneousRequests", function() { return getMaxSimultaneousRequests; });
/* harmony export (binding) */ __nested_webpack_require_1542739__.d(__nested_webpack_exports__, "setMaxSimultaneousRequests", function() { return setMaxSimultaneousRequests; });
/* harmony export (binding) */ __nested_webpack_require_1542739__.d(__nested_webpack_exports__, "getBrowserInfo", function() { return getBrowserInfo; });
/* harmony export (binding) */ __nested_webpack_require_1542739__.d(__nested_webpack_exports__, "isMobileDevice", function() { return isMobileDevice; });
var configMaxSimultaneousRequests; // Maximum concurrent connections to the same server
// Information from http://sgdev-blog.blogspot.fr/2014/01/maximum-concurrent-connection-to-same.html

var maxSimultaneousRequests = {
  default: 6,
  IE: {
    9: 6,
    10: 8,
    default: 8
  },
  Firefox: {
    default: 6
  },
  Opera: {
    10: 8,
    11: 6,
    12: 6,
    default: 6
  },
  Chrome: {
    default: 6
  },
  Safari: {
    default: 6
  }
}; // Browser name / version detection
//
//

/**
 * Browser name / version detection
 * http://stackoverflow.com/questions/2400935/browser-detection-in-javascript
 * @export @public @method
 * @name getBrowserInfo
 *
 * @returns {string} The name and version of the browser.
 */

function getBrowserInfo() {
  var ua = navigator.userAgent;
  var M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
  var tem;

  if (/trident/i.test(M[1])) {
    tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
    return "IE ".concat(tem[1] || '');
  }

  if (M[1] === 'Chrome') {
    tem = ua.match(/\b(OPR|Edge)\/(\d+)/);

    if (tem !== null) {
      return tem.slice(1).join(' ').replace('OPR', 'Opera');
    }
  }

  M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];

  if ((tem = ua.match(/version\/(\d+)/i)) !== null) {
    M.splice(1, 1, tem[1]);
  }

  return M.join(' ');
}
/**
 * Sets the maximum number of simultaneous requests.
 * @export @public @method
 * @name setMaxSimultaneousRequests
 *
 * @param  {number} newMaxSimultaneousRequests The value.
 * @returns {void}
 */


function setMaxSimultaneousRequests(newMaxSimultaneousRequests) {
  configMaxSimultaneousRequests = newMaxSimultaneousRequests;
}
/**
 * Returns the maximum number of simultaneous requests.
 * @export @public @method
 * @name getMaxSimultaneousRequests
 *
 * @returns {number} The maximum number of simultaneous requests
 */


function getMaxSimultaneousRequests() {
  if (configMaxSimultaneousRequests) {
    return configMaxSimultaneousRequests;
  }

  return getDefaultSimultaneousRequests();
}
/**
 * Returns the default number of simultaneous requests.
 * @export @public @method
 * @name getDefaultSimultaneousRequests
 *
 * @returns {number} The default number of simultaneous requests.
 */


function getDefaultSimultaneousRequests() {
  var infoString = getBrowserInfo();
  var info = infoString.split(' ');
  var browserName = info[0];
  var browserVersion = info[1];
  var browserData = maxSimultaneousRequests[browserName];

  if (!browserData) {
    return maxSimultaneousRequests.default;
  }

  if (!browserData[browserVersion]) {
    return browserData.default;
  }

  return browserData[browserVersion];
}
/**
 * Checks if cornerstoneTools is operating on a mobile device.
 * @export @public @method
 * @name isMobileDevice
 *
 * @returns {boolean} True if running on a mobile device.
 */


function isMobileDevice() {
  var pattern = new RegExp('Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini');
  return pattern.test(navigator.userAgent);
}



/***/ }),

/***/ "./util/getPixelSpacing.js":
/*!*********************************!*\
  !*** ./util/getPixelSpacing.js ***!
  \*********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1546848__) {

"use strict";
__nested_webpack_require_1546848__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1546848__.d(__nested_webpack_exports__, "default", function() { return getPixelSpacing; });
/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1546848__(/*! ../externalModules */ "./externalModules.js");

function getPixelSpacing(image) {
  var imagePlane = _externalModules__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.metaData.get('imagePlaneModule', image.imageId);

  if (imagePlane) {
    return {
      rowPixelSpacing: imagePlane.rowPixelSpacing || imagePlane.rowImagePixelSpacing,
      colPixelSpacing: imagePlane.columnPixelSpacing || imagePlane.colImagePixelSpacing
    };
  }

  return {
    rowPixelSpacing: image.rowPixelSpacing,
    colPixelSpacing: image.columnPixelSpacing
  };
}

/***/ }),

/***/ "./util/getProximityThreshold.js":
/*!***************************************!*\
  !*** ./util/getProximityThreshold.js ***!
  \***************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1547965__) {

"use strict";
__nested_webpack_require_1547965__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1547965__.d(__nested_webpack_exports__, "default", function() { return getProximityThreshold; });
/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1547965__(/*! ../store */ "./store/index.js");

/**
 * Returns the proximity threshold for the given interaction type, looking first
 * at the tool configuration and then at global configuration.
 *
 * @public
 * @function getProximityThreshold
 *
 * @param {string} interactionType The interaction type (mouse or touch)
 * @param {string} toolName The name of the tool
 * @returns {Number} The proximity threshold based on the tool
 */

function getProximityThreshold(interactionType, toolName) {
  var clickProximity = _store__WEBPACK_IMPORTED_MODULE_0__["state"].clickProximity,
      touchProximity = _store__WEBPACK_IMPORTED_MODULE_0__["state"].touchProximity;
  var tool = _store__WEBPACK_IMPORTED_MODULE_0__["state"].tools.find(function (_ref) {
    var name = _ref.name;
    return name === toolName;
  });

  if (tool && tool.configuration) {
    clickProximity = tool.configuration.clickProximity || clickProximity;
    touchProximity = tool.configuration.touchProximity || touchProximity;
  }

  return interactionType === 'mouse' ? clickProximity : touchProximity;
}

/***/ }),

/***/ "./util/getRGBPixels.js":
/*!******************************!*\
  !*** ./util/getRGBPixels.js ***!
  \******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1549560__) {

"use strict";
__nested_webpack_require_1549560__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1549560__(/*! ../externalModules.js */ "./externalModules.js");

/**
 * Gets pixels of an RGB image.
 * @export @public @method
 * @name getRGBPixels
 *
 * @param  {HTMLElement} element The element.
 * @param  {number} x       The x position of the top-left corner of the region.
 * @param  {number} y       The y position of the top-left corner of the region.
 * @param  {number} width   The width of the region.
 * @param  {number} height  The height of the region
 * @returns {number[]}       The pixel data.
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, x, y, width, height) {
  if (!element) {
    throw new Error('getRGBPixels: parameter element must not be undefined');
  }

  x = Math.round(x);
  y = Math.round(y);
  var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getEnabledElement(element);
  var storedPixelData = [];
  var index = 0;
  var pixelData = enabledElement.image.getPixelData();
  var spIndex, row, column;

  if (enabledElement.image.color) {
    for (row = 0; row < height; row++) {
      for (column = 0; column < width; column++) {
        spIndex = ((row + y) * enabledElement.image.columns + (column + x)) * 4;
        var red = pixelData[spIndex];
        var green = pixelData[spIndex + 1];
        var blue = pixelData[spIndex + 2];
        var alpha = pixelData[spIndex + 3];
        storedPixelData[index++] = red;
        storedPixelData[index++] = green;
        storedPixelData[index++] = blue;
        storedPixelData[index++] = alpha;
      }
    }
  }

  return storedPixelData;
});

/***/ }),

/***/ "./util/getROITextBoxCoords.js":
/*!*************************************!*\
  !*** ./util/getROITextBoxCoords.js ***!
  \*************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1551594__) {

"use strict";
__nested_webpack_require_1551594__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1551594__.d(__nested_webpack_exports__, "default", function() { return getROITextBoxCoords; });
/**
 * Determine the coordinates that will place the textbox to the right of the
 * annotation, taking rotation, hflip, and vflip into account.
 *
 * @param {Object} viewport - The object that stores rotation, hflip, and vflip.
 * @param {Object} handles - The handles of the annotation.
 * @returns {Object} - The coordinates for default placement of the textbox
 */
function getROITextBoxCoords(viewport, handles) {
  var corners = _determineCorners(handles);

  var centerX = (corners.left.x + corners.right.x) / 2;
  var centerY = (corners.top.y + corners.bottom.y) / 2;
  var textBox = {};

  if (viewport.rotation >= 0 && viewport.rotation < 90) {
    textBox.x = viewport.hflip ? corners.left.x : corners.right.x;
    textBox.y = centerY;
  }

  if (viewport.rotation >= 90 && viewport.rotation < 180) {
    textBox.x = centerX;
    textBox.y = viewport.vflip ? corners.bottom.y : corners.top.y;
  }

  if (viewport.rotation >= 180 && viewport.rotation < 270) {
    textBox.x = viewport.hflip ? corners.right.x : corners.left.x;
    textBox.y = centerY;
  }

  if (viewport.rotation >= 270 && viewport.rotation < 360) {
    textBox.x = centerX;
    textBox.y = viewport.vflip ? corners.top.y : corners.bottom.y;
  }

  return textBox;
}
/**
 * Determine the handles that have the min/max x and y values.
 *
 * @param {Object} handles - The handles of the annotation.
 * @returns {Object} - The top, left, bottom, and right handles
 */

function _determineCorners(handles) {
  var handlesLeftToRight = [handles.start, handles.end].sort(_compareX);
  var handlesTopToBottom = [handles.start, handles.end].sort(_compareY);
  var left = handlesLeftToRight[0];
  var right = handlesLeftToRight[handlesLeftToRight.length - 1];
  var top = handlesTopToBottom[0];
  var bottom = handlesTopToBottom[handlesTopToBottom.length - 1];
  return {
    top: top,
    left: left,
    bottom: bottom,
    right: right
  };

  function _compareX(a, b) {
    return a.x < b.x ? -1 : 1;
  }

  function _compareY(a, b) {
    return a.y < b.y ? -1 : 1;
  }
}

/***/ }),

/***/ "./util/isEmptyObject.js":
/*!*******************************!*\
  !*** ./util/isEmptyObject.js ***!
  \*******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1554083__) {

"use strict";
__nested_webpack_require_1554083__.r(__nested_webpack_exports__);
/**
 * Helper to determine if an object has no keys and is the correct type (is empty)
 *
 * @private
 * @function isEmptyObject
 * @param {Object} obj The object to check
 * @returns {Boolean} true if the object is empty
 */
var isEmptyObject = function isEmptyObject(obj) {
  return Object.keys(obj).length === 0 && obj.constructor === Object;
};

/* harmony default export */ __nested_webpack_exports__["default"] = (isEmptyObject);

/***/ }),

/***/ "./util/isObject.js":
/*!**************************!*\
  !*** ./util/isObject.js ***!
  \**************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1554807__) {

"use strict";
__nested_webpack_require_1554807__.r(__nested_webpack_exports__);
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1554807__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js");
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1554807__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__);


/**
 * Checks if `value` is the
 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
 *
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an object, else `false`.
 * @example
 *
 * isObject({})
 * // => true
 *
 * isObject([1, 2, 3])
 * // => true
 *
 * isObject(Function)
 * // => true
 *
 * isObject(null)
 * // => false
 */
function isObject(value) {
  var type = _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(value);

  return value !== null && (type === 'object' || type === 'function');
}

/* harmony default export */ __nested_webpack_exports__["default"] = (isObject);

/***/ }),

/***/ "./util/isPointInImage.js":
/*!********************************!*\
  !*** ./util/isPointInImage.js ***!
  \********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1556325__) {

"use strict";
__nested_webpack_require_1556325__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1556325__.d(__nested_webpack_exports__, "default", function() { return isPointInImage; });
/**
 * Checks if the point is within the image boundaries.
 * @param  {Object} pixel The pixel.
 * @param  {number} rows The number of rows.
 * @param  {number} cols The number of columns.
 * @returns {boolean}
 */
function isPointInImage(_ref, rows, cols) {
  var x = _ref.x,
      y = _ref.y;
  return x < cols && x >= 0 && y < rows && y >= 0;
}

/***/ }),

/***/ "./util/isPointInPolygon.js":
/*!**********************************!*\
  !*** ./util/isPointInPolygon.js ***!
  \**********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1557125__) {

"use strict";
__nested_webpack_require_1557125__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1557125__.d(__nested_webpack_exports__, "default", function() { return isPointInPolygon; });
/**
 * Checks whether a point is inside a polygon
 *
 * {@link https://github.com/substack/point-in-polygon/blob/master/index.js}
 * ray-casting algorithm based on
 * {@link http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html}
 *
 * @param {Array} point The point [x1, y1]
 * @param {Array} vs The vertices [[x1, y1], [x2, y2], ...] of the Polygon
 * @returns {boolean}
 */
function isPointInPolygon(point, vs) {
  var x = point[0];
  var y = point[1];
  var inside = false;

  for (var i = 0, j = vs.length - 1; i < vs.length; j = i++) {
    var xi = vs[i][0];
    var yi = vs[i][1];
    var xj = vs[j][0];
    var yj = vs[j][1];
    var intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;

    if (intersect) {
      inside = !inside;
    }
  }

  return inside;
}

/***/ }),

/***/ "./util/lineSegDistance.js":
/*!*********************************!*\
  !*** ./util/lineSegDistance.js ***!
  \*********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1558385__) {

"use strict";
__nested_webpack_require_1558385__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1558385__(/*! ../externalModules.js */ "./externalModules.js");

/**
 * Calculates the distance of a line segment from a point.
 * @export @public @method
 * @name lineSegDistance
 *
 * @param  {HTMLElement} element The element.
 * @param  {Object} start   The starting position of the line.
 * @param  {Object} end     The end position of the line.
 * @param  {Object} coords  The coordinates of the point.
 * @returns {name}         The distance between the line and the point.
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, start, end, coords) {
  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone;
  var lineSegment = {
    start: cornerstone.pixelToCanvas(element, start),
    end: cornerstone.pixelToCanvas(element, end)
  };
  return _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.lineSegment.distanceToPoint(lineSegment, coords);
});

/***/ }),

/***/ "./util/logger.js":
/*!************************!*\
  !*** ./util/logger.js ***!
  \************************/
/*! exports provided: getLogger, enable, disable */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1559728__) {

"use strict";
__nested_webpack_require_1559728__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1559728__.d(__nested_webpack_exports__, "getLogger", function() { return getLogger; });
/* harmony export (binding) */ __nested_webpack_require_1559728__.d(__nested_webpack_exports__, "enable", function() { return enable; });
/* harmony export (binding) */ __nested_webpack_require_1559728__.d(__nested_webpack_exports__, "disable", function() { return disable; });
/* harmony import */ var _debugLib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1559728__(/*! ./debugLib/index.js */ "./util/debugLib/index.js");

var BASE_SCOPE = 'cornerstoneTools';
var baseLogger = Object(_debugLib_index_js__WEBPACK_IMPORTED_MODULE_0__["default"])(BASE_SCOPE); // eslint-disable-next-line no-process-env

var devMode = "development" === 'development'; // If we're in dev-mode, tell the user how to get logs

if (devMode && !baseLogger.enabled) {
  // eslint-disable-next-line no-console
  console.log('%cCornerstone Tools', 'background: #339955; padding: 4px; font-weight: bold; color: white'); // eslint-disable-next-line no-console

  console.info('run %clocalStorage.setItem("debug", "cornerstoneTools")%c to see console output', 'background: #eaeaea; color: #333; font-family: monospace', '');
}
/**
 * @method debug
 * Create's a scoped debuging logger
 */


var getLogger = function getLogger(scope) {
  var log = baseLogger.extend(scope);
  return {
    log: log,
    // eslint-disable-next-line no-console
    warn: devMode ? console.warn.bind(console) : log,
    // eslint-disable-next-line no-console
    error: console.error.bind(console)
  };
};
/**
 * @method enable
 * @param {string} scope The scope to enabled
 * @returns {void}
 */

var enable = function enable() {
  var scope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "".concat(BASE_SCOPE, ":*");
  return _debugLib_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].enable(scope);
};
/**
 * @method disable
 * @param {string} scope
 * @returns {string} The previously enabled scope
 */

var disable = function disable() {
  return _debugLib_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].disable();
};

/***/ }),

/***/ "./util/makeUnselectable.js":
/*!**********************************!*\
  !*** ./util/makeUnselectable.js ***!
  \**********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1562136__) {

"use strict";
__nested_webpack_require_1562136__.r(__nested_webpack_exports__);
/**
 * A helper function to make an element (and its content) being non selectable.
 * @export @public @method
 * @name makeUnselectable
 *
 * @param {HTMLElement} element The element to make unselectable
 * @param {Boolean} ignorePointerEvents  true to make this element also
 * ignore events (e.g. mouse click), false otherwise.
 * @returns {void}
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, ignorePointerEvents) {
  element.style.webkitUserSelect = 'none';
  element.style.webkitTouchCallout = 'none';
  element.style.mozUserSelect = 'none';
  element.style.msUserSelect = 'none';
  element.style.oUserSelect = 'none';
  element.style.khtmlUserSelect = 'none';
  element.style.userSelect = 'none';
  element.unselectable = 'on';

  element.oncontextmenu = function () {
    return false;
  };

  if (ignorePointerEvents === true) {
    element.style.pointerEvents = 'none';
  }
});

/***/ }),

/***/ "./util/numbersWithCommas.js":
/*!***********************************!*\
  !*** ./util/numbersWithCommas.js ***!
  \***********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1563394__) {

"use strict";
__nested_webpack_require_1563394__.r(__nested_webpack_exports__);
/**
 * Converts a number to a string with comma separators.
 * http://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript
 * @export @public @method
 * @name numbersWithCommas
 *
 * @param  {number} x The number to convert.
 * @returns {string}   The pretty-printed number as a string.
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (x) {
  var parts = x.toString().split('.');
  parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
  return parts.join('.');
});

/***/ }),

/***/ "./util/pointInsideBoundingBox.js":
/*!****************************************!*\
  !*** ./util/pointInsideBoundingBox.js ***!
  \****************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1564299__) {

"use strict";
__nested_webpack_require_1564299__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1564299__(/*! ../externalModules.js */ "./externalModules.js");

/**
 * Returns true if a point is enclosed within a bounding box.
 * @export @public @method
 * @name pointInsideBoundingBox
 *
 * @param  {Object} handle The handle containing the boundingBox.
 * @param  {Object} coords The coordinate to check.
 * @returns {boolean} True if the point is enclosed within the bounding box.
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (handle, coords) {
  if (!handle.boundingBox) {
    return;
  }

  return _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.insideRect(coords, handle.boundingBox);
});

/***/ }),

/***/ "./util/pointProjector.js":
/*!********************************!*\
  !*** ./util/pointProjector.js ***!
  \********************************/
/*! exports provided: projectPatientPointToImagePlane, imagePointToPatientPoint, planePlaneIntersection, rotatePoint */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1565456__) {

"use strict";
__nested_webpack_require_1565456__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1565456__.d(__nested_webpack_exports__, "projectPatientPointToImagePlane", function() { return projectPatientPointToImagePlane; });
/* harmony export (binding) */ __nested_webpack_require_1565456__.d(__nested_webpack_exports__, "imagePointToPatientPoint", function() { return imagePointToPatientPoint; });
/* harmony export (binding) */ __nested_webpack_require_1565456__.d(__nested_webpack_exports__, "planePlaneIntersection", function() { return planePlaneIntersection; });
/* harmony export (binding) */ __nested_webpack_require_1565456__.d(__nested_webpack_exports__, "rotatePoint", function() { return rotatePoint; });
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1565456__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1565456__(/*! ../util/convertToVector3.js */ "./util/convertToVector3.js");


/**
 * Projects a patient point to an image point
 * @export @public @method
 * @name projectPatientPointToImagePlane
 *
 * @param  {Object} patientPoint The patient point.
 * @param  {Object} imagePlane   The image plane used for projection.
 * @returns {Object}              The projected coordinates.
 */

function projectPatientPointToImagePlane(patientPoint, imagePlane) {
  var rowCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(imagePlane.rowCosines);
  var columnCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(imagePlane.columnCosines);
  var imagePositionPatient = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(imagePlane.imagePositionPatient);
  var point = patientPoint.clone().sub(imagePositionPatient);
  var x = rowCosines.dot(point) / imagePlane.columnPixelSpacing;
  var y = columnCosines.dot(point) / imagePlane.rowPixelSpacing;
  return {
    x: x,
    y: y
  };
} //

/**
 * Projects an image point to a patient point
 * @export @public @method
 * @name imagePointToPatientPoint
 *
 * @param  {Object} imagePoint   The image point.
 * @param  {Object} imagePlane   The image plane used for projection.
 * @returns {Object}              The projected coordinates.
 */

function imagePointToPatientPoint(imagePoint, imagePlane) {
  var rowCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(imagePlane.rowCosines);
  var columnCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(imagePlane.columnCosines);
  var imagePositionPatient = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(imagePlane.imagePositionPatient);
  var x = rowCosines.clone().multiplyScalar(imagePoint.x);
  x.multiplyScalar(imagePlane.columnPixelSpacing);
  var y = columnCosines.clone().multiplyScalar(imagePoint.y);
  y.multiplyScalar(imagePlane.rowPixelSpacing);
  var patientPoint = x.add(y);
  patientPoint.add(imagePositionPatient);
  return patientPoint;
}
/**
 * Returns a rectangle from the imagePlane.
 * @export @public @method
 * @name getRectangleFromImagePlane
 *
 * @param  {Object} imagePlane The imagePlane.
 * @returns {Object} The rect.
 */

function getRectangleFromImagePlane(imagePlane) {
  // Get the points
  var topLeft = imagePointToPatientPoint({
    x: 0,
    y: 0
  }, imagePlane);
  var topRight = imagePointToPatientPoint({
    x: imagePlane.columns,
    y: 0
  }, imagePlane);
  var bottomLeft = imagePointToPatientPoint({
    x: 0,
    y: imagePlane.rows
  }, imagePlane);
  var bottomRight = imagePointToPatientPoint({
    x: imagePlane.columns,
    y: imagePlane.rows
  }, imagePlane); // Get each side as a vector

  var rect = {
    top: new _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.Line3(topLeft, topRight),
    left: new _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.Line3(topLeft, bottomLeft),
    right: new _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.Line3(topRight, bottomRight),
    bottom: new _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.Line3(bottomLeft, bottomRight)
  };
  return rect;
}
/**
 * Gets all the intersections of a line with a rect.
 * @private
 * @method
 * @name lineRectangleIntersection
 *
 * @param  {Object} line The line to check.
 * @param  {Object} rect The rect being intersected.
 * @returns {Object[]} An array of the intersections.
 */


function lineRectangleIntersection(line, rect) {
  var intersections = [];
  Object.keys(rect).forEach(function (side) {
    var segment = rect[side];
    var intersection = line.intersectLine(segment);

    if (intersection) {
      intersections.push(intersection);
    }
  });
  return intersections;
}
/**
 * Gets the line of intersection between two planes in patient space.
 * @export @public @method
 * @name planePlaneIntersection
 *
 * @param  {Object} targetImagePlane    The target plane.
 * @param  {Object} referenceImagePlane The reference plane
 * @returns {Object}                   The intersections.
 */


function planePlaneIntersection(targetImagePlane, referenceImagePlane) {
  var targetRowCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(targetImagePlane.rowCosines);
  var targetColumnCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(targetImagePlane.columnCosines);
  var targetImagePositionPatient = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(targetImagePlane.imagePositionPatient);
  var referenceRowCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(referenceImagePlane.rowCosines);
  var referenceColumnCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(referenceImagePlane.columnCosines);
  var referenceImagePositionPatient = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(referenceImagePlane.imagePositionPatient); // First, get the normals of each image plane

  var targetNormal = targetRowCosines.clone().cross(targetColumnCosines);
  var targetPlane = new _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.Plane();
  targetPlane.setFromNormalAndCoplanarPoint(targetNormal, targetImagePositionPatient);
  var referenceNormal = referenceRowCosines.clone().cross(referenceColumnCosines);
  var referencePlane = new _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.Plane();
  referencePlane.setFromNormalAndCoplanarPoint(referenceNormal, referenceImagePositionPatient);
  var originDirection = referencePlane.clone().intersectPlane(targetPlane);
  var origin = originDirection.origin;
  var direction = originDirection.direction; // Calculate the longest possible length in the reference image plane (the length of the diagonal)

  var bottomRight = imagePointToPatientPoint({
    x: referenceImagePlane.columns,
    y: referenceImagePlane.rows
  }, referenceImagePlane);
  var distance = referenceImagePositionPatient.distanceTo(bottomRight); // Use this distance to bound the ray intersecting the two planes

  var line = new _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.Line3();
  line.start = origin;
  line.end = origin.clone().add(direction.multiplyScalar(distance)); // Find the intersections between this line and the reference image plane's four sides

  var rect = getRectangleFromImagePlane(referenceImagePlane);
  var intersections = lineRectangleIntersection(line, rect); // Return the intersections between this line and the reference image plane's sides
  // In order to draw the reference line from the target image.

  if (intersections.length !== 2) {
    return;
  }

  return {
    start: intersections[0],
    end: intersections[1]
  };
}
/**
 * Translate a point using a rotation angle.
 * @export @public @method
 * @name rotatePoint
 *
 * @param {Object} point - `{ x, y }` in either pixel or canvas coordinates.
 * @param {Object} center - `{ x, y }` in either pixel or canvas coordinates.
 * @param {Number} angle - angle in degrees
 * @returns {Object} - `{ x, y }` new point translated
 */

function rotatePoint(point, center, angle) {
  var angleRadians = angle * (Math.PI / 180); // Convert to radians

  var rotatedX = Math.cos(angleRadians) * (point.x - center.x) - Math.sin(angleRadians) * (point.y - center.y) + center.x;
  var rotatedY = Math.sin(angleRadians) * (point.x - center.x) + Math.cos(angleRadians) * (point.y - center.y) + center.y;
  return {
    x: rotatedX,
    y: rotatedY
  };
}

/***/ }),

/***/ "./util/roundToDecimal.js":
/*!********************************!*\
  !*** ./util/roundToDecimal.js ***!
  \********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1574346__) {

"use strict";
__nested_webpack_require_1574346__.r(__nested_webpack_exports__);
/**
 * Rounds a number to the specified precision.
 * @export @public @method
 * @name roundToDecimal
 *
 * @param  {number} value     The value to round.
 * @param  {number} precision The required precision.
 * @returns {number}           The rounded number.
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (value, precision) {
  var multiplier = Math.pow(10, precision);
  return Math.round(value * multiplier) / multiplier;
});

/***/ }),

/***/ "./util/scroll.js":
/*!************************!*\
  !*** ./util/scroll.js ***!
  \************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1575092__) {

"use strict";
__nested_webpack_require_1575092__.r(__nested_webpack_exports__);
/* harmony import */ var _scrollToIndex_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1575092__(/*! ./scrollToIndex.js */ "./util/scrollToIndex.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1575092__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _clip_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1575092__(/*! ./clip.js */ "./util/clip.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1575092__(/*! ./../externalModules.js */ "./externalModules.js");




/**
 * Scrolls through the stack.
 * @export @public @method
 * @name scroll
 *
 * @param  {HTMLElement} element          The element to scroll.
 * @param  {number} images                The number of images to scroll through.
 * @param  {type} [loop = false]          Whether to loop the scrolling.
 * @param  {type} [allowSkipping = true]  Whether frames can be skipped.
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, images) {
  var loop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
  var allowSkipping = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
  var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack');

  if (!toolData || !toolData.data || !toolData.data.length) {
    return;
  }

  var stackData = toolData.data[0];

  if (!stackData.pending) {
    stackData.pending = [];
  }

  var newImageIdIndex = stackData.currentImageIdIndex + images;

  if (loop) {
    var nbImages = stackData.imageIds.length;
    newImageIdIndex %= nbImages;
  } else {
    newImageIdIndex = Object(_clip_js__WEBPACK_IMPORTED_MODULE_2__["default"])(newImageIdIndex, 0, stackData.imageIds.length - 1);
  }

  if (allowSkipping) {
    Object(_scrollToIndex_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, newImageIdIndex);
  } else {
    var pendingEvent = {
      index: newImageIdIndex
    };
    stackData.pending.push(pendingEvent);
    scrollWithoutSkipping(stackData, pendingEvent, element);
  }
});
/**
 * Recursively scrolls the stack until the desired image is reached.
 * @private
 * @method
 * @name scrollWithoutSkipping
 *
 * @param  {type} stackData    Data object containing information about the stack.
 * @param  {Object} pendingEvent The event to process next.
 * @param  {HTMLElement} element      The element being scrolled through.
 * @returns {void}
 */

function scrollWithoutSkipping(stackData, pendingEvent, element) {
  if (stackData.pending[0] === pendingEvent) {
    if (stackData.currentImageIdIndex === pendingEvent.index) {
      stackData.pending.splice(stackData.pending.indexOf(pendingEvent), 1);

      if (stackData.pending.length > 0) {
        scrollWithoutSkipping(stackData, stackData.pending[0], element);
      }

      return;
    }

    var newImageHandler = function newImageHandler(event) {
      var index = stackData.imageIds.indexOf(event.detail.image.imageId);

      if (index === pendingEvent.index) {
        stackData.pending.splice(stackData.pending.indexOf(pendingEvent), 1);
        element.removeEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.EVENTS.NEW_IMAGE, newImageHandler);

        if (stackData.pending.length > 0) {
          scrollWithoutSkipping(stackData, stackData.pending[0], element);
        }
      }
    };

    element.addEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.EVENTS.NEW_IMAGE, newImageHandler);
    Object(_scrollToIndex_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, pendingEvent.index);
  }
}

/***/ }),

/***/ "./util/scrollToIndex.js":
/*!*******************************!*\
  !*** ./util/scrollToIndex.js ***!
  \*******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1579149__) {

"use strict";
__nested_webpack_require_1579149__.r(__nested_webpack_exports__);
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1579149__(/*! ../events.js */ "./events.js");
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1579149__(/*! ../externalModules.js */ "./externalModules.js");
/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1579149__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js");
/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1579149__(/*! ../stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js");
/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1579149__(/*! ../util/triggerEvent.js */ "./util/triggerEvent.js");





/**
 * Scrolls through the stack to the image index requested.
 * @export @public @method
 * @name scrollToIndex
 *
 * @param  {type} element         The element to scroll through.
 * @param  {type} newImageIdIndex The target image index.
 * @returns {void}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (element, newImageIdIndex) {
  var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(element, 'stack');

  if (!toolData || !toolData.data || !toolData.data.length) {
    return;
  }

  var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone; // If we have more than one stack, check if we have a stack renderer defined

  var stackRenderer;

  if (toolData.data.length > 1) {
    var stackRendererData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(element, 'stackRenderer');

    if (stackRendererData && stackRendererData.data && stackRendererData.data.length) {
      stackRenderer = stackRendererData.data[0];
    }
  }

  var stackData = toolData.data[0]; // Allow for negative indexing

  if (newImageIdIndex < 0) {
    newImageIdIndex += stackData.imageIds.length;
  }

  var startLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_3__["default"].getStartLoadHandler(element);
  var endLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_3__["default"].getEndLoadHandler(element);
  var errorLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_3__["default"].getErrorLoadingHandler(element);

  function doneCallback(image) {
    if (stackData.currentImageIdIndex !== newImageIdIndex) {
      return;
    } // Check if the element is still enabled in Cornerstone,
    // If an error is thrown, stop here.


    try {
      // TODO: Add 'isElementEnabled' to Cornerstone?
      cornerstone.getEnabledElement(element);
    } catch (error) {
      return;
    }

    if (stackRenderer) {
      stackRenderer.currentImageIdIndex = newImageIdIndex;
      stackRenderer.render(element, toolData.data);
    } else {
      cornerstone.displayImage(element, image);
    }

    if (endLoadingHandler) {
      endLoadingHandler(element, image);
    }
  }

  function failCallback(error) {
    var imageId = stackData.imageIds[newImageIdIndex];

    if (errorLoadingHandler) {
      errorLoadingHandler(element, imageId, error);
    }
  }

  if (newImageIdIndex === stackData.currentImageIdIndex) {
    return;
  }

  if (startLoadingHandler) {
    startLoadingHandler(element);
  }

  var eventData = {
    newImageIdIndex: newImageIdIndex,
    direction: newImageIdIndex - stackData.currentImageIdIndex
  };
  stackData.currentImageIdIndex = newImageIdIndex;
  var newImageId = stackData.imageIds[newImageIdIndex]; // Retry image loading in cases where previous image promise
  // Was rejected, if the option is set

  /*
     Const config = stackScroll.getConfiguration();
     TODO: Revisit this. It appears that Core's imageCache is not
    keeping rejected promises anywhere, so we have no way to know
    if something was previously rejected.
     if (config && config.retryLoadOnScroll === true) {
    }
  */
  // Convert the preventCache value in stack data to a boolean

  var preventCache = Boolean(stackData.preventCache);
  var imagePromise;

  if (preventCache) {
    imagePromise = cornerstone.loadImage(newImageId);
  } else {
    imagePromise = cornerstone.loadAndCacheImage(newImageId);
  }

  imagePromise.then(doneCallback, failCallback);
  Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].STACK_SCROLL, eventData);
});

/***/ }),

/***/ "./util/segmentation/drawBrush.js":
/*!****************************************!*\
  !*** ./util/segmentation/drawBrush.js ***!
  \****************************************/
/*! exports provided: drawBrushPixels */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1584085__) {

"use strict";
__nested_webpack_require_1584085__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1584085__.d(__nested_webpack_exports__, "drawBrushPixels", function() { return drawBrushPixels; });
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1584085__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1584085__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _eraseIfSegmentIndex_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1584085__(/*! ./eraseIfSegmentIndex.js */ "./util/segmentation/eraseIfSegmentIndex.js");


/**
 * DrawBrushPixels - Adds or removes labels to a labelmap.
 *
 * @param  {number[]} pointerArray      The array of pixels to paint.
 * @param  {Object} labelmap2D          The `pixelData` array to paint to.
 * @param  {number} segmentIndex        The segment being drawn.
 * @param  {number} columns             The number of columns in the image.
 * @param  {boolean} shouldErase = false Whether we should erase rather than color pixels.
 * @returns {null}
 */

function drawBrushPixels(pointerArray, pixelData, segmentIndex, columns) {
  var shouldErase = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;

  var getPixelIndex = function getPixelIndex(x, y) {
    return y * columns + x;
  };

  pointerArray.forEach(function (point) {
    var spIndex = getPixelIndex.apply(void 0, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(point));

    if (shouldErase) {
      Object(_eraseIfSegmentIndex_js__WEBPACK_IMPORTED_MODULE_1__["default"])(spIndex, pixelData, segmentIndex);
    } else {
      pixelData[spIndex] = segmentIndex;
    }
  });
}



/***/ }),

/***/ "./util/segmentation/eraseIfSegmentIndex.js":
/*!**************************************************!*\
  !*** ./util/segmentation/eraseIfSegmentIndex.js ***!
  \**************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1586341__) {

"use strict";
__nested_webpack_require_1586341__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1586341__.d(__nested_webpack_exports__, "default", function() { return eraseIfSegmentIndex; });
/**
 * If the pixelData for the given pixelIndex is equal to the segmentIndex
 * erase it (set it to 0).
 * @param  {number} pixelIndex The index of the pixel.
 * @param  {UInt16Array} pixelData The pixelData array.
 * @param  {number} segmentIndex The segment Index to erase.
 */
function eraseIfSegmentIndex(pixelIndex, pixelData, segmentIndex) {
  if (pixelData[pixelIndex] === segmentIndex) {
    pixelData[pixelIndex] = 0;
  }
}

/***/ }),

/***/ "./util/segmentation/eraseOutsideBoundingBox.js":
/*!******************************************************!*\
  !*** ./util/segmentation/eraseOutsideBoundingBox.js ***!
  \******************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1587312__) {

"use strict";
__nested_webpack_require_1587312__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1587312__.d(__nested_webpack_exports__, "default", function() { return eraseOutsideBoundingBox; });
/* harmony import */ var _eraseIfSegmentIndex__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1587312__(/*! ./eraseIfSegmentIndex */ "./util/segmentation/eraseIfSegmentIndex.js");

/**
 * EraseOutsideBoundingBox - Erase all pixels labeled with the activeSegmentIndex,
 * outside the bouding box defined by the `topLeft` and `topRight`.
 * @param  {} evt The Cornerstone event.
 * @param {} operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @param {number[]} topLeft The top left of the bounding box.
 * @param {number[]} bottomRight The bottom right of the bounding box.
 * @returns {null}
 */

function eraseOutsideBoundingBox(evt, operationData, topLeft, bottomRight) {
  var eventData = evt.detail;
  var pixelData = operationData.pixelData,
      segmentIndex = operationData.segmentIndex;
  var image = eventData.image;
  var width = image.width,
      height = image.height; // Loop until top of bounding box from top of image, color the entire row

  for (var i = 0; i < width; i++) {
    for (var j = 0; j < topLeft[1]; j++) {
      Object(_eraseIfSegmentIndex__WEBPACK_IMPORTED_MODULE_0__["default"])(j * width + i, pixelData, segmentIndex);
    }
  } // Loop within rows of bounding box, to the left of the box


  for (var _i = 0; _i < topLeft[0]; _i++) {
    for (var _j = topLeft[1]; _j < bottomRight[1]; _j++) {
      Object(_eraseIfSegmentIndex__WEBPACK_IMPORTED_MODULE_0__["default"])(_j * width + _i, pixelData, segmentIndex);
    }
  } // Loop within rows of bounding box, to the right of the box


  for (var _i2 = bottomRight[0]; _i2 < width; _i2++) {
    for (var _j2 = topLeft[1]; _j2 < bottomRight[1]; _j2++) {
      Object(_eraseIfSegmentIndex__WEBPACK_IMPORTED_MODULE_0__["default"])(_j2 * width + _i2, pixelData, segmentIndex);
    }
  } // Loop from bottom of bounding box until bottom of image, color entire row


  for (var _i3 = 0; _i3 < width; _i3++) {
    for (var _j3 = bottomRight[1]; _j3 < height; _j3++) {
      Object(_eraseIfSegmentIndex__WEBPACK_IMPORTED_MODULE_0__["default"])(_j3 * width + _i3, pixelData, segmentIndex);
    }
  }
}

/***/ }),

/***/ "./util/segmentation/eraseShape.js":
/*!*****************************************!*\
  !*** ./util/segmentation/eraseShape.js ***!
  \*****************************************/
/*! exports provided: eraseInsideShape, eraseOutsideShape */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1589982__) {

"use strict";
__nested_webpack_require_1589982__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1589982__.d(__nested_webpack_exports__, "eraseInsideShape", function() { return eraseInsideShape; });
/* harmony export (binding) */ __nested_webpack_require_1589982__.d(__nested_webpack_exports__, "eraseOutsideShape", function() { return eraseOutsideShape; });
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1589982__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1589982__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _eraseOutsideBoundingBox__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1589982__(/*! ./eraseOutsideBoundingBox */ "./util/segmentation/eraseOutsideBoundingBox.js");
/* harmony import */ var _isSameSegment_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1589982__(/*! ./isSameSegment.js */ "./util/segmentation/isSameSegment.js");
/* harmony import */ var _logger_js__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1589982__(/*! ../logger.js */ "./util/logger.js");




var logger = Object(_logger_js__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('util:segmentation:operations:eraseOutsideCircle');
/**
 * Erase all pixels labeled with the activeSegmentIndex,
 * inside/outside the region defined by the shape.
 * @param  {Object} evt The Cornerstone event.
 * @param {Object}  operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @param {Object} pointInShape - A function that checks if a point, x,y is within a shape.
 * @param {number[]} topLeft The top left of the bounding box.
 * @param {number[]} bottomRight The bottom right of the bounding box.
 * @returns {null}
 */

function eraseShape(evt, operationData, pointInShape, topLeft, bottomRight) {
  var insideOrOutside = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'inside';
  var width = evt.detail.image.width;
  var pixelData = operationData.pixelData,
      segmentIndex = operationData.segmentIndex;

  var _topLeft = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(topLeft, 2),
      xMin = _topLeft[0],
      yMin = _topLeft[1];

  var _bottomRight = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(bottomRight, 2),
      xMax = _bottomRight[0],
      yMax = _bottomRight[1];

  if (insideOrOutside === 'outside') {
    Object(_eraseOutsideBoundingBox__WEBPACK_IMPORTED_MODULE_1__["default"])(evt, operationData, topLeft, bottomRight);
  }

  for (var x = xMin; x < xMax; x++) {
    for (var y = yMin; y < yMax; y++) {
      var pixelIndex = y * width + x; // If the pixel is the same segmentIndex and is inside the
      // Region defined by the array of points, set their value to segmentIndex.

      if (Object(_isSameSegment_js__WEBPACK_IMPORTED_MODULE_2__["default"])(pixelIndex, pixelData, segmentIndex) && pointInShape({
        x: x,
        y: y
      })) {
        pixelData[pixelIndex] = 0;
      }
    }
  }
}
/**
 * Erase all pixels labeled with the activeSegmentIndex,
 * inside the region defined by the shape.
 * @param  {Object} evt The Cornerstone event.
 * @param {Object}  operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @param {Object} pointInShape - A function that checks if a point, x,y is within a shape.
 * @param {number[]} topLeft The top left of the bounding box.
 * @param {number[]} bottomRight The bottom right of the bounding box.
 * @returns {null}
 */


function eraseInsideShape(evt, operationData, pointInShape, topLeft, bottomRight) {
  eraseShape(evt, operationData, pointInShape, topLeft, bottomRight, 'inside');
}
/**
 * Erase all pixels labeled with the activeSegmentIndex,
 * outside the region defined by the shape.
 * @param  {Object} evt The Cornerstone event.
 * @param {Object}  operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @param {Object} pointInShape - A function that checks if a point, x,y is within a shape.
 * @param {number[]} topLeft The top left of the bounding box.
 * @param {number[]} bottomRight The bottom right of the bounding box.
 * @returns {null}
 */

function eraseOutsideShape(evt, operationData, pointInShape, topLeft, bottomRight) {
  eraseShape(evt, operationData, function (point) {
    return !pointInShape(point);
  }, topLeft, bottomRight, 'outside');
}

/***/ }),

/***/ "./util/segmentation/fillOutsideBoundingBox.js":
/*!*****************************************************!*\
  !*** ./util/segmentation/fillOutsideBoundingBox.js ***!
  \*****************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1595024__) {

"use strict";
__nested_webpack_require_1595024__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1595024__.d(__nested_webpack_exports__, "default", function() { return fillOutsideBoundingBox; });
/**
 * EraseInside - fill all pixels labeled with the activeSegmentIndex,
 * outside the bouding box defined by the `topLeft` and `topRight`.
 * @param  {} evt The Cornerstone event.
 * @param  {} operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @param {number[]} topLeft The top left of the bounding box.
 * @param {number[]} bottomRight The bottom right of the bounding box.
 * @returns {null}
 */
function fillOutsideBoundingBox(evt, operationData, topLeft, bottomRight) {
  var pixelData = operationData.pixelData,
      segmentIndex = operationData.segmentIndex;
  var _evt$detail$image = evt.detail.image,
      width = _evt$detail$image.width,
      height = _evt$detail$image.height; // Loop until top of bounding box from top of image, color the entire row

  for (var i = 0; i < width; i++) {
    for (var j = 0; j < topLeft[1]; j++) {
      pixelData[j * width + i] = segmentIndex;
    }
  } // Loop within rows of bounding box, to the left of the box


  for (var _i = 0; _i < topLeft[0]; _i++) {
    for (var _j = topLeft[1]; _j < bottomRight[1]; _j++) {
      pixelData[_j * width + _i] = segmentIndex;
    }
  } // Loop within rows of bounding box, to the right of the box


  for (var _i2 = bottomRight[0]; _i2 < width; _i2++) {
    for (var _j2 = topLeft[1]; _j2 < bottomRight[1]; _j2++) {
      pixelData[_j2 * width + _i2] = segmentIndex;
    }
  } // Loop from bottom of bounding box until bottom of image, color entire row


  for (var _i3 = 0; _i3 < width; _i3++) {
    for (var _j3 = bottomRight[1]; _j3 < height; _j3++) {
      pixelData[_j3 * width + _i3] = segmentIndex;
    }
  }
}

/***/ }),

/***/ "./util/segmentation/fillShape.js":
/*!****************************************!*\
  !*** ./util/segmentation/fillShape.js ***!
  \****************************************/
/*! exports provided: fillInsideShape, fillOutsideShape */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1597230__) {

"use strict";
__nested_webpack_require_1597230__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1597230__.d(__nested_webpack_exports__, "fillInsideShape", function() { return fillInsideShape; });
/* harmony export (binding) */ __nested_webpack_require_1597230__.d(__nested_webpack_exports__, "fillOutsideShape", function() { return fillOutsideShape; });
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1597230__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1597230__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _fillOutsideBoundingBox__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1597230__(/*! ./fillOutsideBoundingBox */ "./util/segmentation/fillOutsideBoundingBox.js");
/* harmony import */ var _logger_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1597230__(/*! ../logger.js */ "./util/logger.js");



var logger = Object(_logger_js__WEBPACK_IMPORTED_MODULE_2__["getLogger"])('util:segmentation:operations:helpers:fillShape');
/**
 * Fill all pixels labeled with the activeSegmentIndex,
 * inside/outside the region defined by the shape.
 * @param  {Object} evt The Cornerstone event.
 * @param {Object}  operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @param {Object} pointInShape - A function that checks if a point, x,y is within a shape.
 * @param {number[]} topLeft The top left of the bounding box.
 * @param {number[]} bottomRight The bottom right of the bounding box.
 * @returns {null}
 */

function fillShape(evt, operationData, pointInShape, topLeft, bottomRight) {
  var insideOrOutside = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'inside';
  var pixelData = operationData.pixelData,
      segmentIndex = operationData.segmentIndex;

  if (pixelData === undefined || segmentIndex === undefined) {
    logger.error("fillInsideShape requires operationData to contain pixelData and segmentIndex");
    return;
  }

  var width = evt.detail.image.width;

  var _topLeft = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(topLeft, 2),
      xMin = _topLeft[0],
      yMin = _topLeft[1];

  var _bottomRight = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(bottomRight, 2),
      xMax = _bottomRight[0],
      yMax = _bottomRight[1];

  if (insideOrOutside === 'outside') {
    Object(_fillOutsideBoundingBox__WEBPACK_IMPORTED_MODULE_1__["default"])(evt, operationData, topLeft, bottomRight);
  }

  for (var x = xMin; x < xMax; x++) {
    for (var y = yMin; y < yMax; y++) {
      var pixelIndex = y * width + x; // If the pixel is the same segmentIndex and is inside the
      // Region defined by the array of points, set their value to segmentIndex.

      if (pointInShape({
        x: x,
        y: y
      })) {
        pixelData[pixelIndex] = segmentIndex;
      }
    }
  }
}
/**
 * Fill all pixels labeled with the activeSegmentIndex,
 * inside the region defined by the shape.
 * @param  {Object} evt The Cornerstone event.
 * @param {Object}  operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @param {Object} pointInShape - A function that checks if a point, x,y is within a shape.
 * @param {number[]} topLeft The top left of the bounding box.
 * @param {number[]} bottomRight The bottom right of the bounding box.
 * @returns {null}
 */


function fillInsideShape(evt, operationData, pointInShape, topLeft, bottomRight) {
  fillShape(evt, operationData, pointInShape, topLeft, bottomRight, 'inside');
}
/**
 * Fill all pixels labeled with the activeSegmentIndex,
 * outside the region defined by the shape.
 * @param  {Object} evt The Cornerstone event.
 * @param {Object}  operationData An object containing the `pixelData` to
 *                          modify, the `segmentIndex` and the `points` array.
 * @param {Object} pointInShape - A function that checks if a point, x,y is within a shape.
 * @param {number[]} topLeft The top left of the bounding box.
 * @param {number[]} bottomRight The bottom right of the bounding box.
 * @returns {null}
 */

function fillOutsideShape(evt, operationData, pointInShape, topLeft, bottomRight) {
  fillShape(evt, operationData, function (point) {
    return !pointInShape(point);
  }, topLeft, bottomRight, 'outside');
}

/***/ }),

/***/ "./util/segmentation/floodFill.js":
/*!****************************************!*\
  !*** ./util/segmentation/floodFill.js ***!
  \****************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1602125__) {

"use strict";
__nested_webpack_require_1602125__.r(__nested_webpack_exports__);
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1602125__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_1602125__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);


/**
 * floodFill.js - Taken from MIT OSS lib - https://github.com/tuzz/n-dimensional-flood-fill
 * Refactored to ES6.
 *
 * @param {function} getter The getter to the elements of your data structure,
 *                          e.g. getter(x,y) for a 2D interprettation of your structure.
 * @param {number[]} seed The seed for your fill. The dimensionality is infered
 *                        by the number of dimensions of the seed.
 * @param {function} [options.onFlood] An optional callback to execute when each pixel is flooded.
 *                             e.g. onFlood(x,y).
 * @param {function} [options.onBoundary] An optional callback to execute whenever a boundary is reached.
 *                                a boundary could be another segmentIndex, or the edge of your
 *                                data structure (i.e. when your getter returns undefined).
 * @param {function} [options.equals] An optional equality method for your datastructure.
 *                            Default is simply value1 = value2.
 * @param {boolean} [options.diagonals] Whether you allow flooding through diagonals. Defaults to false.
 *
 * @returns {Object}
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (getter, seed) {
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};

  var onFlood = options.onFlood || function () {};

  var onBoundary = options.onBoundary || function () {};

  var equals = options.equals || defaultEquals;
  var diagonals = options.diagonals || false;
  var startNode = get(seed);
  var permutations = prunedPermutations();
  var stack = [];
  var flooded = [];
  var visits = {};
  var bounds = {};
  stack.push({
    currentArgs: seed
  });

  while (stack.length > 0) {
    flood(stack.pop());
  }

  return {
    flooded: flooded,
    boundaries: boundaries()
  };

  function flood(job) {
    var getArgs = job.currentArgs;
    var prevArgs = job.previousArgs;

    if (visited(getArgs)) {
      return;
    }

    markAsVisited(getArgs);

    if (member(getArgs)) {
      markAsFlooded(getArgs);
      pushAdjacent(getArgs);
    } else {
      markAsBoundary(prevArgs);
    }
  }

  function visited(key) {
    return visits[key] === true;
  }

  function markAsVisited(key) {
    visits[key] = true;
  }

  function member(getArgs) {
    var node = safely(get, [getArgs]);
    return safely(equals, [node, startNode]);
  }

  function markAsFlooded(getArgs) {
    flooded.push(getArgs);
    onFlood.apply(void 0, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(getArgs));
  }

  function markAsBoundary(prevArgs) {
    bounds[prevArgs] = prevArgs;
    onBoundary.apply(void 0, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(prevArgs));
  }

  function pushAdjacent(getArgs) {
    for (var i = 0; i < permutations.length; i += 1) {
      var perm = permutations[i];
      var nextArgs = getArgs.slice(0);

      for (var j = 0; j < getArgs.length; j += 1) {
        nextArgs[j] += perm[j];
      }

      stack.push({
        currentArgs: nextArgs,
        previousArgs: getArgs
      });
    }
  }

  function get(getArgs) {
    return getter.apply(void 0, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(getArgs));
  }

  function safely(f, args) {
    try {
      return f.apply(void 0, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(args));
    } catch (error) {
      return;
    }
  }

  function prunedPermutations() {
    var permutations = permute(seed.length);
    return permutations.filter(function (perm) {
      var count = countNonZeroes(perm);
      return count !== 0 && (count === 1 || diagonals);
    });
  }

  function permute(length) {
    var perms = [];

    var permutation = function permutation(string) {
      return string.split('').map(function (c) {
        return parseInt(c, 10) - 1;
      });
    };

    for (var i = 0; i < Math.pow(3, length); i += 1) {
      var string = lpad(i.toString(3), '0', length);
      perms.push(permutation(string));
    }

    return perms;
  }

  function boundaries() {
    var array = [];

    for (var key in bounds) {
      if (bounds.hasOwnProperty(key)) {
        array.unshift(bounds[key]);
      }
    }

    return array;
  }
});

function defaultEquals(a, b) {
  return a === b;
}

function countNonZeroes(array) {
  var count = 0;

  for (var i = 0; i < array.length; i += 1) {
    if (array[i] !== 0) {
      count += 1;
    }
  }

  return count;
}

function lpad(string, character, length) {
  var array = new Array(length + 1);
  var pad = array.join(character);
  return (pad + string).slice(-length);
}

/***/ }),

/***/ "./util/segmentation/getBoundingBoxAroundCircle.js":
/*!*********************************************************!*\
  !*** ./util/segmentation/getBoundingBoxAroundCircle.js ***!
  \*********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1607707__) {

"use strict";
__nested_webpack_require_1607707__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1607707__.d(__nested_webpack_exports__, "default", function() { return getBoundingBoxAroundCircle; });
/* harmony import */ var _getCircleCoords__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1607707__(/*! ../getCircleCoords */ "./util/getCircleCoords.js");

function getBoundingBoxAroundCircle(evt) {
  var handles = evt.detail.handles;
  var _evt$detail$image = evt.detail.image,
      imageWidth = _evt$detail$image.width,
      imageHeight = _evt$detail$image.height;
  var circleCoordinates = Object(_getCircleCoords__WEBPACK_IMPORTED_MODULE_0__["default"])(handles.start, handles.end);
  var xMax = circleCoordinates.width + circleCoordinates.left;
  var xMin = circleCoordinates.left;
  var yMax = circleCoordinates.top + circleCoordinates.height;
  var yMin = circleCoordinates.top;
  xMin = Math.floor(xMin);
  yMin = Math.floor(yMin);
  xMax = Math.floor(xMax);
  yMax = Math.floor(yMax);
  xMax = Math.min(imageWidth, xMax);
  xMin = Math.max(0, xMin);
  yMax = Math.min(imageHeight, yMax);
  yMin = Math.max(0, yMin);
  return [[xMin, yMin], [xMax, yMax]];
}

/***/ }),

/***/ "./util/segmentation/getBoundingBoxAroundPolygon.js":
/*!**********************************************************!*\
  !*** ./util/segmentation/getBoundingBoxAroundPolygon.js ***!
  \**********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1609229__) {

"use strict";
__nested_webpack_require_1609229__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1609229__.d(__nested_webpack_exports__, "default", function() { return getBoundingBoxAroundPolygon; });
function getBoundingBoxAroundPolygon(vertices, image) {
  var xMin = Infinity;
  var xMax = 0;
  var yMin = Infinity;
  var yMax = 0;
  var width = image.width,
      height = image.height;
  vertices.forEach(function (v) {
    xMin = Math.min(v[0], xMin);
    xMax = Math.max(v[0], xMax);
    yMin = Math.min(v[1], yMin);
    yMax = Math.max(v[1], yMax);
  });
  xMin = Math.floor(xMin);
  yMin = Math.floor(yMin);
  xMax = Math.floor(xMax);
  yMax = Math.floor(yMax);
  xMax = Math.min(width, xMax);
  xMin = Math.max(0, xMin);
  yMax = Math.min(height, yMax);
  yMin = Math.max(0, yMin);
  return [[xMin, yMin], [xMax, yMax]];
}

/***/ }),

/***/ "./util/segmentation/getCircle.js":
/*!****************************************!*\
  !*** ./util/segmentation/getCircle.js ***!
  \****************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1610350__) {

"use strict";
__nested_webpack_require_1610350__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1610350__.d(__nested_webpack_exports__, "default", function() { return getCircle; });
/**
 * Gets the pixels within the circle.
 * @export @public @method
 * @name getCircle
 *
 * @param  {number} radius     The radius of the circle.
 * @param  {number} rows       The number of rows.
 * @param  {number} columns    The number of columns.
 * @param  {number} [xCoord = 0] The x-location of the center of the circle.
 * @param  {number} [yCoord = 0] The y-location of the center of the circle.
 * @returns {Array.number[]}        Array of pixels contained within the circle.
 */
function getCircle(radius, rows, columns) {
  var xCoord = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
  var yCoord = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
  var x0 = Math.floor(xCoord);
  var y0 = Math.floor(yCoord);

  if (radius === 1) {
    return [[x0, y0]];
  }

  var circleArray = [];
  var index = 0;

  for (var y = -radius; y <= radius; y++) {
    var _yCoord = y0 + y;

    if (_yCoord > rows || _yCoord < 0) {
      continue;
    }

    for (var x = -radius; x <= radius; x++) {
      var _xCoord = x0 + x;

      if (_xCoord >= columns || _xCoord < 0) {
        continue;
      }

      if (x * x + y * y < radius * radius) {
        circleArray[index++] = [x0 + x, y0 + y];
      }
    }
  }

  return circleArray;
}

/***/ }),

/***/ "./util/segmentation/getDiffBetweenPixelData.js":
/*!******************************************************!*\
  !*** ./util/segmentation/getDiffBetweenPixelData.js ***!
  \******************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1612161__) {

"use strict";
__nested_webpack_require_1612161__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1612161__.d(__nested_webpack_exports__, "default", function() { return getDiffBetweenPixelData; });
function getDiffBetweenPixelData(previousPixelData, newPixelData) {
  var diff = [];

  for (var i = 0; i < previousPixelData.length; i++) {
    if (previousPixelData[i] !== newPixelData[i]) {
      diff.push([i, previousPixelData[i], newPixelData[i]]);
    }
  }

  return diff;
}

/***/ }),

/***/ "./util/segmentation/getPixelPathBetweenPixels.js":
/*!********************************************************!*\
  !*** ./util/segmentation/getPixelPathBetweenPixels.js ***!
  \********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1612992__) {

"use strict";
__nested_webpack_require_1612992__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1612992__(/*! ../../externalModules.js */ "./externalModules.js");

var oneOverRoot2 = 1 / Math.sqrt(2); // Cache this to avoid repeated computation.

var DIRECTIONS = {
  up: {
    x: 0,
    y: 1
  },
  upRight: {
    x: oneOverRoot2,
    y: oneOverRoot2
  },
  right: {
    x: 1,
    y: 0
  },
  downRight: {
    x: oneOverRoot2,
    y: -oneOverRoot2
  },
  down: {
    x: 0,
    y: 1
  },
  downLeft: {
    x: -oneOverRoot2,
    y: -oneOverRoot2
  },
  left: {
    x: -1,
    y: 0
  },
  upLeft: {
    x: -oneOverRoot2,
    y: oneOverRoot2
  }
};
/**
 * GetPixelPathBetweenPixels - Generates a 1-pixel wide path of pixels between two pixels.
 * This is essentially simplified A* pathfinding, as we know there are no "obstacles".
 *
 * @param  {Object} p1 The starting pixel
 * @param  {Object} p2 The end pixel.
 *
 * @returns {Object[]} All of the pixels on the shortest path between p1 and p2.
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (p1, p2) {
  var p = {
    x: p1.x,
    y: p1.y
  };
  var path = [];

  while (p2.x !== p.x || p2.y !== p.y) {
    if (p2.x === p.x) {
      // Goal is above or bellow us.
      if (p2.y > p.y) {
        p.y++;
      } else {
        p.y--;
      }
    } else if (p2.y === p.y) {
      // Goal is to the left or right of us.
      if (p2.x > p.x) {
        p.x++;
      } else {
        p.x--;
      }
    } else if (p2.y > p.y) {
      if (p2.x > p.x) {
        // Can go up, right or diagonally up-right towards goal.
        moveUpRight(p, p2);
      } else {
        // Can go up, left, or diagonally up-left towards goal.
        moveUpLeft(p, p2);
      }
    } else if (p2.x > p.x) {
      // Can go down, right, or diagonally down-right towards goal.
      moveDownRight(p, p2);
    } else {
      // Can go down, left, or diagonally down-left towards goal.
      moveDownLeft(p, p2);
    }

    path.push({
      x: p.x,
      y: p.y
    });
  }

  path.pop(); // Remove last node as is the same as the destination.

  return path;
});
/**
 * MoveUpRight - Moves p up, right or diagonally up right towards p2.
 * @param  {Object} p
 * @param  {Object} p2
 *
 * @returns {null}
 */

function moveUpRight(p, p2) {
  var unitVector = unitVectorFromPtoP2(p, p2); // Largest dot product is fastest way to travel.

  var dotProducts = [dotProduct2D(unitVector, DIRECTIONS.up), dotProduct2D(unitVector, DIRECTIONS.right), dotProduct2D(unitVector, DIRECTIONS.upRight)];
  var largestIndex = getIndexOfLargestInLengthThreeArray(dotProducts);

  switch (largestIndex) {
    case 0:
      p.y++;
      break;

    case 1:
      p.x++;
      break;

    case 2:
      p.y++;
      p.x++;
  }
}
/**
 * MoveUpLeft - Moves p up, left or diagonally up left towards p2.
 * @param  {Object} p
 * @param  {Object} p2
 *
 * @returns {null}
 */


function moveUpLeft(p, p2) {
  var unitVector = unitVectorFromPtoP2(p, p2); // Largest dot product is fastest way to travel.

  var dotProducts = [dotProduct2D(unitVector, DIRECTIONS.up), dotProduct2D(unitVector, DIRECTIONS.left), dotProduct2D(unitVector, DIRECTIONS.upLeft)];
  var largestIndex = getIndexOfLargestInLengthThreeArray(dotProducts);

  switch (largestIndex) {
    case 0:
      p.y++;
      break;

    case 1:
      p.x--;
      break;

    case 2:
      p.y++;
      p.x--;
  }
}
/**
 * MoveDownRight - Moves p down, right or diagonally down right towards p2.
 * @param  {Object} p
 * @param  {Object} p2
 *
 * @returns {null}
 */


function moveDownRight(p, p2) {
  var unitVector = unitVectorFromPtoP2(p, p2); // Largest dot product is fastest way to travel.

  var dotProducts = [dotProduct2D(unitVector, DIRECTIONS.down), dotProduct2D(unitVector, DIRECTIONS.right), dotProduct2D(unitVector, DIRECTIONS.downRight)];
  var largestIndex = getIndexOfLargestInLengthThreeArray(dotProducts);

  switch (largestIndex) {
    case 0:
      p.y--;
      break;

    case 1:
      p.x++;
      break;

    case 2:
      p.y--;
      p.x++;
  }
}
/**
 * MoveDownLeft - Moves p down, left or diagonally down left towards p2.
 * @param  {Object} p
 * @param  {Object} p2
 *
 * @returns {null}
 */


function moveDownLeft(p, p2) {
  var unitVector = unitVectorFromPtoP2(p, p2); // Largest dot product is fastest way to travel.

  var dotProducts = [dotProduct2D(unitVector, DIRECTIONS.down), dotProduct2D(unitVector, DIRECTIONS.left), dotProduct2D(unitVector, DIRECTIONS.downLeft)];
  var largestIndex = getIndexOfLargestInLengthThreeArray(dotProducts);

  switch (largestIndex) {
    case 0:
      p.y--;
      break;

    case 1:
      p.x--;
      break;

    case 2:
      p.y--;
      p.x--;
  }
}
/**
 * UnitVectorFromPtoP2 - Returns a unit vector pointing from p to p2.
 * @param  {Object} p
 * @param  {Object} p2
 *
 * @returns {Object} The unit vector.
 */


function unitVectorFromPtoP2(p, p2) {
  var distance = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.distance(p, p2);
  return {
    x: (p2.x - p.x) / distance,
    y: (p2.y - p.y) / distance
  };
}

function dotProduct2D(p, p2) {
  return p.x * p2.x + p.y * p2.y;
}
/**
 * GetIndexOfLargestInLengthThreeArray - Returns the index of the largest value
 * in the 3 element array.
 * @param  {number[]} array
 * @returns {number}
 */


function getIndexOfLargestInLengthThreeArray(array) {
  var largestIndex = array[0] > array[1] ? 0 : 1;

  if (array[2] > array[largestIndex]) {
    largestIndex = 2;
  }

  return largestIndex;
}

/***/ }),

/***/ "./util/segmentation/index.js":
/*!************************************!*\
  !*** ./util/segmentation/index.js ***!
  \************************************/
/*! exports provided: drawBrushPixels, eraseIfSegmentIndex, eraseOutsideBoundingBox, eraseInsideShape, eraseOutsideShape, fillOutsideBoundingBox, fillInsideShape, fillOutsideShape, floodFill, getBoundingBoxAroundCircle, getBoundingBoxAroundPolygon, getCircle, getPixelPathBetweenPixels, isSameSegment, triggerLabelmapModifiedEvent, getDiffBetweenPixelData */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1619192__) {

"use strict";
__nested_webpack_require_1619192__.r(__nested_webpack_exports__);
/* harmony import */ var _drawBrush__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1619192__(/*! ./drawBrush */ "./util/segmentation/drawBrush.js");
/* harmony reexport (safe) */ __nested_webpack_require_1619192__.d(__nested_webpack_exports__, "drawBrushPixels", function() { return _drawBrush__WEBPACK_IMPORTED_MODULE_0__["drawBrushPixels"]; });

/* harmony import */ var _eraseIfSegmentIndex__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1619192__(/*! ./eraseIfSegmentIndex */ "./util/segmentation/eraseIfSegmentIndex.js");
/* harmony reexport (safe) */ __nested_webpack_require_1619192__.d(__nested_webpack_exports__, "eraseIfSegmentIndex", function() { return _eraseIfSegmentIndex__WEBPACK_IMPORTED_MODULE_1__["default"]; });

/* harmony import */ var _eraseOutsideBoundingBox__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1619192__(/*! ./eraseOutsideBoundingBox */ "./util/segmentation/eraseOutsideBoundingBox.js");
/* harmony reexport (safe) */ __nested_webpack_require_1619192__.d(__nested_webpack_exports__, "eraseOutsideBoundingBox", function() { return _eraseOutsideBoundingBox__WEBPACK_IMPORTED_MODULE_2__["default"]; });

/* harmony import */ var _eraseShape__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1619192__(/*! ./eraseShape */ "./util/segmentation/eraseShape.js");
/* harmony reexport (safe) */ __nested_webpack_require_1619192__.d(__nested_webpack_exports__, "eraseInsideShape", function() { return _eraseShape__WEBPACK_IMPORTED_MODULE_3__["eraseInsideShape"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1619192__.d(__nested_webpack_exports__, "eraseOutsideShape", function() { return _eraseShape__WEBPACK_IMPORTED_MODULE_3__["eraseOutsideShape"]; });

/* harmony import */ var _fillOutsideBoundingBox__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1619192__(/*! ./fillOutsideBoundingBox */ "./util/segmentation/fillOutsideBoundingBox.js");
/* harmony reexport (safe) */ __nested_webpack_require_1619192__.d(__nested_webpack_exports__, "fillOutsideBoundingBox", function() { return _fillOutsideBoundingBox__WEBPACK_IMPORTED_MODULE_4__["default"]; });

/* harmony import */ var _fillShape__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1619192__(/*! ./fillShape */ "./util/segmentation/fillShape.js");
/* harmony reexport (safe) */ __nested_webpack_require_1619192__.d(__nested_webpack_exports__, "fillInsideShape", function() { return _fillShape__WEBPACK_IMPORTED_MODULE_5__["fillInsideShape"]; });

/* harmony reexport (safe) */ __nested_webpack_require_1619192__.d(__nested_webpack_exports__, "fillOutsideShape", function() { return _fillShape__WEBPACK_IMPORTED_MODULE_5__["fillOutsideShape"]; });

/* harmony import */ var _floodFill__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1619192__(/*! ./floodFill */ "./util/segmentation/floodFill.js");
/* harmony reexport (safe) */ __nested_webpack_require_1619192__.d(__nested_webpack_exports__, "floodFill", function() { return _floodFill__WEBPACK_IMPORTED_MODULE_6__["default"]; });

/* harmony import */ var _getBoundingBoxAroundCircle__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1619192__(/*! ./getBoundingBoxAroundCircle */ "./util/segmentation/getBoundingBoxAroundCircle.js");
/* harmony reexport (safe) */ __nested_webpack_require_1619192__.d(__nested_webpack_exports__, "getBoundingBoxAroundCircle", function() { return _getBoundingBoxAroundCircle__WEBPACK_IMPORTED_MODULE_7__["default"]; });

/* harmony import */ var _getBoundingBoxAroundPolygon__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1619192__(/*! ./getBoundingBoxAroundPolygon */ "./util/segmentation/getBoundingBoxAroundPolygon.js");
/* harmony reexport (safe) */ __nested_webpack_require_1619192__.d(__nested_webpack_exports__, "getBoundingBoxAroundPolygon", function() { return _getBoundingBoxAroundPolygon__WEBPACK_IMPORTED_MODULE_8__["default"]; });

/* harmony import */ var _getCircle__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1619192__(/*! ./getCircle */ "./util/segmentation/getCircle.js");
/* harmony reexport (safe) */ __nested_webpack_require_1619192__.d(__nested_webpack_exports__, "getCircle", function() { return _getCircle__WEBPACK_IMPORTED_MODULE_9__["default"]; });

/* harmony import */ var _getPixelPathBetweenPixels__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1619192__(/*! ./getPixelPathBetweenPixels */ "./util/segmentation/getPixelPathBetweenPixels.js");
/* harmony reexport (safe) */ __nested_webpack_require_1619192__.d(__nested_webpack_exports__, "getPixelPathBetweenPixels", function() { return _getPixelPathBetweenPixels__WEBPACK_IMPORTED_MODULE_10__["default"]; });

/* harmony import */ var _isSameSegment__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1619192__(/*! ./isSameSegment */ "./util/segmentation/isSameSegment.js");
/* harmony reexport (safe) */ __nested_webpack_require_1619192__.d(__nested_webpack_exports__, "isSameSegment", function() { return _isSameSegment__WEBPACK_IMPORTED_MODULE_11__["default"]; });

/* harmony import */ var _triggerLabelmapModifiedEvent__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_1619192__(/*! ./triggerLabelmapModifiedEvent */ "./util/segmentation/triggerLabelmapModifiedEvent.js");
/* harmony reexport (safe) */ __nested_webpack_require_1619192__.d(__nested_webpack_exports__, "triggerLabelmapModifiedEvent", function() { return _triggerLabelmapModifiedEvent__WEBPACK_IMPORTED_MODULE_12__["default"]; });

/* harmony import */ var _getDiffBetweenPixelData__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_1619192__(/*! ./getDiffBetweenPixelData */ "./util/segmentation/getDiffBetweenPixelData.js");
/* harmony reexport (safe) */ __nested_webpack_require_1619192__.d(__nested_webpack_exports__, "getDiffBetweenPixelData", function() { return _getDiffBetweenPixelData__WEBPACK_IMPORTED_MODULE_13__["default"]; });

















/***/ }),

/***/ "./util/segmentation/isSameSegment.js":
/*!********************************************!*\
  !*** ./util/segmentation/isSameSegment.js ***!
  \********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1624900__) {

"use strict";
__nested_webpack_require_1624900__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1624900__.d(__nested_webpack_exports__, "default", function() { return isSameSegment; });
/**
 * Returns true if the pixelIndex of pixelData is the same as the segmentIndex.
 *
 * @param  {number} pixelIndex The index of the pixel.
 * @param  {UInt16Array} pixelData The pixelData array.
 * @param  {number} segmentIndex The segment Index to erase.
 *
 * @returns {boolean}
 */
function isSameSegment(pixelIndex, pixelData, segmentIndex) {
  return pixelData[pixelIndex] === segmentIndex;
}

/***/ }),

/***/ "./util/segmentation/triggerLabelmapModifiedEvent.js":
/*!***********************************************************!*\
  !*** ./util/segmentation/triggerLabelmapModifiedEvent.js ***!
  \***********************************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1625852__) {

"use strict";
__nested_webpack_require_1625852__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1625852__.d(__nested_webpack_exports__, "default", function() { return triggerLabelmapModifiedEvent; });
/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1625852__(/*! ../../externalModules */ "./externalModules.js");
/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1625852__(/*! ../../events.js */ "./events.js");
/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1625852__(/*! ../../store */ "./store/index.js");



/**
 * Triggers the LABELMAP_MODIFIED event for the active element, providing the labelmapIndex that was modified.
 *
 * @param {HTMLElement} element
 * @param {number} labelmapIndex The labelmapIndex. Defaults to the active for that element if not set.
 */

function triggerLabelmapModifiedEvent(element, labelmapIndex) {
  var _getModule = Object(_store__WEBPACK_IMPORTED_MODULE_2__["getModule"])('segmentation'),
      getters = _getModule.getters;

  labelmapIndex = labelmapIndex === undefined ? getters.activeLabelmapIndex(element) : labelmapIndex;
  _externalModules__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.triggerEvent(element, _events_js__WEBPACK_IMPORTED_MODULE_1__["default"].LABELMAP_MODIFIED, {
    labelmapIndex: labelmapIndex
  });
}

/***/ }),

/***/ "./util/setContextToDisplayFontSize.js":
/*!*********************************************!*\
  !*** ./util/setContextToDisplayFontSize.js ***!
  \*********************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1627522__) {

"use strict";
__nested_webpack_require_1627522__.r(__nested_webpack_exports__);
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1627522__(/*! ../externalModules.js */ "./externalModules.js");

/**
 * Sets the canvas context transformation matrix so it is scaled to show text
 * more cleanly even if the image is scaled up.  See
 * https://github.com/cornerstonejs/cornerstoneTools/wiki/DrawingText
 * for more information
 * @export @public @function
 * @name setContextToDisplayFontSize
 *
 * @param {HTMLElement} enabledElement The cornerstone enabled element.
 * @param {CanvasRenderingContext2D} context The canvas context.
 * @param {number} fontSize The font size.
 * @returns {Object} {fontSize: number, lineHeight: number, fontScale: number}
 */

/* harmony default export */ __nested_webpack_exports__["default"] = (function (enabledElement, context, fontSize) {
  var fontScale = 0.1;
  _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.setToPixelCoordinateSystem(enabledElement, context, fontScale); // Return the font size to use

  var scaledFontSize = fontSize / enabledElement.viewport.scale / fontScale; // TODO: actually calculate this?

  var lineHeight = fontSize / enabledElement.viewport.scale / fontScale;
  return {
    fontSize: scaledFontSize,
    lineHeight: lineHeight,
    fontScale: fontScale
  };
});

/***/ }),

/***/ "./util/throttle.js":
/*!**************************!*\
  !*** ./util/throttle.js ***!
  \**************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1629121__) {

"use strict";
__nested_webpack_require_1629121__.r(__nested_webpack_exports__);
/* harmony import */ var _debounce_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1629121__(/*! ./debounce.js */ "./util/debounce.js");
/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1629121__(/*! ./isObject.js */ "./util/isObject.js");


/**
 * Creates a throttled function that only invokes `func` at most once per
 * every `wait` milliseconds (or once per browser frame). The throttled function
 * comes with a `cancel` method to cancel delayed `func` invocations and a
 * `flush` method to immediately invoke them. Provide `options` to indicate
 * whether `func` should be invoked on the leading and/or trailing edge of the
 * `wait` timeout. The `func` is invoked with the last arguments provided to the
 * throttled function. Subsequent calls to the throttled function return the
 * result of the last `func` invocation.
 *
 * **Note:** If `leading` and `trailing` options are `true`, `func` is
 * invoked on the trailing edge of the timeout only if the throttled function
 * is invoked more than once during the `wait` timeout.
 *
 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
 * until the next tick, similar to `setTimeout` with a timeout of `0`.
 *
 * If `wait` is omitted in an environment with `requestAnimationFrame`, `func`
 * invocation will be deferred until the next frame is drawn (typically about
 * 16ms).
 *
 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
 * for details over the differences between `throttle` and `debounce`.
 *
 * @since 0.1.0
 * @category Function
 * @param {Function} func The function to throttle.
 * @param {number} [wait=0]
 *  The number of milliseconds to throttle invocations to; if omitted,
 *  `requestAnimationFrame` is used (if available).
 * @param {Object} [options={}] The options object.
 * @param {boolean} [options.leading=true]
 *  Specify invoking on the leading edge of the timeout.
 * @param {boolean} [options.trailing=true]
 *  Specify invoking on the trailing edge of the timeout.
 * @returns {Function} Returns the new throttled function.
 * @example
 *
 * // Avoid excessively updating the position while scrolling.
 * jQuery(window).on('scroll', throttle(updatePosition, 100))
 *
 * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
 * const throttled = throttle(renewToken, 300000, { 'trailing': false })
 * jQuery(element).on('click', throttled)
 *
 * // Cancel the trailing throttled invocation.
 * jQuery(window).on('popstate', throttled.cancel)
 */

function throttle(func, wait, options) {
  var leading = true;
  var trailing = true;

  if (typeof func !== 'function') {
    throw new TypeError('Expected a function');
  }

  if (Object(_isObject_js__WEBPACK_IMPORTED_MODULE_1__["default"])(options)) {
    leading = 'leading' in options ? Boolean(options.leading) : leading;
    trailing = 'trailing' in options ? Boolean(options.trailing) : trailing;
  }

  return Object(_debounce_js__WEBPACK_IMPORTED_MODULE_0__["default"])(func, wait, {
    leading: leading,
    trailing: trailing,
    maxWait: wait
  });
}

/* harmony default export */ __nested_webpack_exports__["default"] = (throttle);

/***/ }),

/***/ "./util/triggerEvent.js":
/*!******************************!*\
  !*** ./util/triggerEvent.js ***!
  \******************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1632650__) {

"use strict";
__nested_webpack_require_1632650__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1632650__.d(__nested_webpack_exports__, "default", function() { return triggerEvent; });
/**
 * Triggers a CustomEvent.
 * @public
 * @method triggerEvent
 *
 * @param {EventTarget} el The element or EventTarget to trigger the event upon.
 * @param {String} type    The event type name.
 * @param {Object|null} [detail=null] The event data to be sent.
 * @returns {Boolean} The return value is false if at least one event listener called preventDefault(). Otherwise it returns true.
 */
function triggerEvent(el, type) {
  var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
  var event; // This check is needed to polyfill CustomEvent on IE11-

  if (typeof window.CustomEvent === 'function') {
    event = new CustomEvent(type, {
      detail: detail,
      cancelable: true
    });
  } else {
    event = document.createEvent('CustomEvent');
    event.initCustomEvent(type, true, true, detail);
  }

  return el.dispatchEvent(event);
}

/***/ }),

/***/ "./util/uuidv4.js":
/*!************************!*\
  !*** ./util/uuidv4.js ***!
  \************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1633945__) {

"use strict";
__nested_webpack_require_1633945__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1633945__.d(__nested_webpack_exports__, "default", function() { return uuidv4; });
function uuidv4() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
    var r = Math.random() * 16 | 0; // eslint-disable-line no-bitwise

    var v = c === 'x' ? r : r & 0x3 | 0x8; // eslint-disable-line no-bitwise

    return v.toString(16);
  });
}

/***/ }),

/***/ "./util/wait.js":
/*!**********************!*\
  !*** ./util/wait.js ***!
  \**********************/
/*! exports provided: wait, waitForEnabledElementImageToLoad, default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1634665__) {

"use strict";
__nested_webpack_require_1634665__.r(__nested_webpack_exports__);
/* harmony export (binding) */ __nested_webpack_require_1634665__.d(__nested_webpack_exports__, "wait", function() { return wait; });
/* harmony export (binding) */ __nested_webpack_require_1634665__.d(__nested_webpack_exports__, "waitForEnabledElementImageToLoad", function() { return waitForEnabledElementImageToLoad; });
/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1634665__(/*! ./../externalModules.js */ "./externalModules.js");

/**
 * Waits a set amount of time, then resolves. Can be chained off of to delay
 * next call in promise chain.
 * @public
 * @function wait
 * @param {number} ms - number in ms to wait
 * @returns {Promise} - A promise that resolves when setTimeout elapses
 */

var wait = function wait(ms) {
  return new Promise(function (resolve) {
    return setTimeout(resolve, ms);
  });
};
/**
 * A promise that returns an EnabledElement who's image has loaded, or
 * null if the provided element ceases being an enabledElement before an
 * image has been loaded.
 * @public
 * @function waitForEnabledElementImageToLoad
 *
 * @param {HTMLElement} element - An element that is an EnabledElement
 * @returns {EnabledElement} - The enabled element that has loaded an image
 */

function waitForEnabledElementImageToLoad(element) {
  try {
    var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getEnabledElement(element);

    if (!enabledElement.image) {
      return wait(250).then(function () {
        return waitForEnabledElementImageToLoad(element);
      });
    } // EnabledElement's image is loaded.


    return enabledElement;
  } catch (ex) {
    // Is no longer, or never was an enabled element, stop polling
    return null;
  }
}
/* harmony default export */ __nested_webpack_exports__["default"] = (wait);

/***/ }),

/***/ "./util/zoom/changeViewportScale.js":
/*!******************************************!*\
  !*** ./util/zoom/changeViewportScale.js ***!
  \******************************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1636803__) {

"use strict";
__nested_webpack_require_1636803__.r(__nested_webpack_exports__);
/**
 * Changes the scale of the viewport.
 *
 * @private
 * @function changeViewportScale
 *
 * @param {Object} viewport The viewport to scale.
 * @param {number} ticks The change in magnifcation factor.
 * @param {Object} scaleLimits The limits in scale.
 * @returns {Object} The scaled viewport.
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (viewport, ticks, scaleLimits) {
  var maxScale = scaleLimits.maxScale,
      minScale = scaleLimits.minScale;
  var pow = 1.7;
  var oldFactor = Math.log(viewport.scale) / Math.log(pow);
  var factor = oldFactor + ticks;
  var scale = Math.pow(pow, factor);

  if (maxScale && scale > maxScale) {
    viewport.scale = maxScale;
  } else if (minScale && scale < minScale) {
    viewport.scale = minScale;
  } else {
    viewport.scale = scale;
  }

  return viewport;
});

/***/ }),

/***/ "./util/zoom/correctShift.js":
/*!***********************************!*\
  !*** ./util/zoom/correctShift.js ***!
  \***********************************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1637980__) {

"use strict";
__nested_webpack_require_1637980__.r(__nested_webpack_exports__);
/**
 * Corrects the shift by accountoing for viewport rotation and flips.
 * @export @public @method
 * @name correctShift
 *
 * @param  {Object} shift      The shift to correct.
 * @param  {Object} viewportOrientation  Object containing information on the viewport orientation.
 * @returns {Object}            The corrected shift.
 */
/* harmony default export */ __nested_webpack_exports__["default"] = (function (shift, viewportOrientation) {
  var hflip = viewportOrientation.hflip,
      vflip = viewportOrientation.vflip,
      rotation = viewportOrientation.rotation; // Apply Flips

  shift.x *= hflip ? -1 : 1;
  shift.y *= vflip ? -1 : 1; // Apply rotations

  if (rotation !== 0) {
    var angle = rotation * Math.PI / 180;
    var cosA = Math.cos(angle);
    var sinA = Math.sin(angle);
    var newX = shift.x * cosA - shift.y * sinA;
    var newY = shift.x * sinA + shift.y * cosA;
    shift.x = newX;
    shift.y = newY;
  }

  return shift;
});

/***/ }),

/***/ "./util/zoom/index.js":
/*!****************************!*\
  !*** ./util/zoom/index.js ***!
  \****************************/
/*! exports provided: changeViewportScale, correctShift, default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1639271__) {

"use strict";
__nested_webpack_require_1639271__.r(__nested_webpack_exports__);
/* harmony import */ var _changeViewportScale_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1639271__(/*! ./changeViewportScale.js */ "./util/zoom/changeViewportScale.js");
/* harmony reexport (safe) */ __nested_webpack_require_1639271__.d(__nested_webpack_exports__, "changeViewportScale", function() { return _changeViewportScale_js__WEBPACK_IMPORTED_MODULE_0__["default"]; });

/* harmony import */ var _correctShift_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1639271__(/*! ./correctShift.js */ "./util/zoom/correctShift.js");
/* harmony reexport (safe) */ __nested_webpack_require_1639271__.d(__nested_webpack_exports__, "correctShift", function() { return _correctShift_js__WEBPACK_IMPORTED_MODULE_1__["default"]; });


 // Named

 // Default

/* harmony default export */ __nested_webpack_exports__["default"] = ({
  changeViewportScale: _changeViewportScale_js__WEBPACK_IMPORTED_MODULE_0__["default"],
  correctShift: _correctShift_js__WEBPACK_IMPORTED_MODULE_1__["default"]
});

/***/ }),

/***/ "./version.js":
/*!********************!*\
  !*** ./version.js ***!
  \********************/
/*! exports provided: default */
/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1640476__) {

"use strict";
__nested_webpack_require_1640476__.r(__nested_webpack_exports__);
/* harmony default export */ __nested_webpack_exports__["default"] = ('6.0.10');

/***/ })

/******/ });
});
//# sourceMappingURL=cornerstoneTools.js.map

/***/ }),

/***/ 2424:
/***/ (function(module) {

!function(A,I){ true?module.exports=I():0}(this,(function(){return(()=>{var A={6089:(A,I,g)=>{A.exports=g(7945)},4559:(A,I,g)=>{A.exports=g(9842)},6059:(A,I,g)=>{A.exports=g(3798)},9387:(A,I,g)=>{A.exports=g(2149)},7423:(A,I,g)=>{A.exports=g(6970)},2633:(A,I,g)=>{A.exports=g(2343)},6028:(A,I,g)=>{A.exports=g(671)},187:(A,I,g)=>{A.exports=g(7283)},1655:(A,I,g)=>{A.exports=g(2882)},1246:(A,I,g)=>{A.exports=g(8730)},2165:(A,I,g)=>{A.exports=g(569)},337:(A,I,g)=>{A.exports=g(3751)},2770:(A,I,g)=>{A.exports=g(1380)},1882:(A,I,g)=>{A.exports=g(6601)},7878:(A,I,g)=>{A.exports=g(8783)},1929:(A,I,g)=>{A.exports=g(3498)},2250:(A,I,g)=>{A.exports=g(4731)},1407:(A,I,g)=>{A.exports=g(3355)},6051:(A,I,g)=>{A.exports=g(4640)},6275:(A,I,g)=>{A.exports=g(846)},7830:(A,I,g)=>{A.exports=g(7686)},3091:(A,I,g)=>{A.exports=g(5681)},8355:(A,I,g)=>{A.exports=g(9863)},1082:(A,I,g)=>{A.exports=g(5723)},2475:(A,I,g)=>{A.exports=g(8887)},9719:(A,I,g)=>{A.exports=g(9009)},5534:(A,I,g)=>{A.exports=g(5213)},4215:(A,I,g)=>{A.exports=g(156)},6496:(A,I,g)=>{A.exports=g(7754)},7458:A=>{var I=function(A){"use strict";var I,g=Object.prototype,B=g.hasOwnProperty,Q="function"==typeof Symbol?Symbol:{},C=Q.iterator||"@@iterator",E=Q.asyncIterator||"@@asyncIterator",i=Q.toStringTag||"@@toStringTag";function o(A,I,g){return Object.defineProperty(A,I,{value:g,enumerable:!0,configurable:!0,writable:!0}),A[I]}try{o({},"")}catch(A){o=function(A,I,g){return A[I]=g}}function t(A,I,g,B){var Q=I&&I.prototype instanceof n?I:n,C=Object.create(Q.prototype),E=new M(B||[]);return C._invoke=function(A,I,g){var B=D;return function(Q,C){if(B===r)throw new Error("Generator is already running");if(B===e){if("throw"===Q)throw C;return L()}for(g.method=Q,g.arg=C;;){var E=g.delegate;if(E){var i=k(E,g);if(i){if(i===w)continue;return i}}if("next"===g.method)g.sent=g._sent=g.arg;else if("throw"===g.method){if(B===D)throw B=e,g.arg;g.dispatchException(g.arg)}else"return"===g.method&&g.abrupt("return",g.arg);B=r;var o=a(A,I,g);if("normal"===o.type){if(B=g.done?e:s,o.arg===w)continue;return{value:o.arg,done:g.done}}"throw"===o.type&&(B=e,g.method="throw",g.arg=o.arg)}}}(A,g,E),C}function a(A,I,g){try{return{type:"normal",arg:A.call(I,g)}}catch(A){return{type:"throw",arg:A}}}A.wrap=t;var D="suspendedStart",s="suspendedYield",r="executing",e="completed",w={};function n(){}function c(){}function h(){}var y={};o(y,C,(function(){return this}));var G=Object.getPrototypeOf,F=G&&G(G(H([])));F&&F!==g&&B.call(F,C)&&(y=F);var N=h.prototype=n.prototype=Object.create(y);function R(A){["next","throw","return"].forEach((function(I){o(A,I,(function(A){return this._invoke(I,A)}))}))}function S(A,I){function g(Q,C,E,i){var o=a(A[Q],A,C);if("throw"!==o.type){var t=o.arg,D=t.value;return D&&"object"==typeof D&&B.call(D,"__await")?I.resolve(D.__await).then((function(A){g("next",A,E,i)}),(function(A){g("throw",A,E,i)})):I.resolve(D).then((function(A){t.value=A,E(t)}),(function(A){return g("throw",A,E,i)}))}i(o.arg)}var Q;this._invoke=function(A,B){function C(){return new I((function(I,Q){g(A,B,I,Q)}))}return Q=Q?Q.then(C,C):C()}}function k(A,g){var B=A.iterator[g.method];if(B===I){if(g.delegate=null,"throw"===g.method){if(A.iterator.return&&(g.method="return",g.arg=I,k(A,g),"throw"===g.method))return w;g.method="throw",g.arg=new TypeError("The iterator does not provide a 'throw' method")}return w}var Q=a(B,A.iterator,g.arg);if("throw"===Q.type)return g.method="throw",g.arg=Q.arg,g.delegate=null,w;var C=Q.arg;return C?C.done?(g[A.resultName]=C.value,g.next=A.nextLoc,"return"!==g.method&&(g.method="next",g.arg=I),g.delegate=null,w):C:(g.method="throw",g.arg=new TypeError("iterator result is not an object"),g.delegate=null,w)}function U(A){var I={tryLoc:A[0]};1 in A&&(I.catchLoc=A[1]),2 in A&&(I.finallyLoc=A[2],I.afterLoc=A[3]),this.tryEntries.push(I)}function J(A){var I=A.completion||{};I.type="normal",delete I.arg,A.completion=I}function M(A){this.tryEntries=[{tryLoc:"root"}],A.forEach(U,this),this.reset(!0)}function H(A){if(A){var g=A[C];if(g)return g.call(A);if("function"==typeof A.next)return A;if(!isNaN(A.length)){var Q=-1,E=function g(){for(;++Q<A.length;)if(B.call(A,Q))return g.value=A[Q],g.done=!1,g;return g.value=I,g.done=!0,g};return E.next=E}}return{next:L}}function L(){return{value:I,done:!0}}return c.prototype=h,o(N,"constructor",h),o(h,"constructor",c),c.displayName=o(h,i,"GeneratorFunction"),A.isGeneratorFunction=function(A){var I="function"==typeof A&&A.constructor;return!!I&&(I===c||"GeneratorFunction"===(I.displayName||I.name))},A.mark=function(A){return Object.setPrototypeOf?Object.setPrototypeOf(A,h):(A.__proto__=h,o(A,i,"GeneratorFunction")),A.prototype=Object.create(N),A},A.awrap=function(A){return{__await:A}},R(S.prototype),o(S.prototype,E,(function(){return this})),A.AsyncIterator=S,A.async=function(I,g,B,Q,C){void 0===C&&(C=Promise);var E=new S(t(I,g,B,Q),C);return A.isGeneratorFunction(g)?E:E.next().then((function(A){return A.done?A.value:E.next()}))},R(N),o(N,i,"Generator"),o(N,C,(function(){return this})),o(N,"toString",(function(){return"[object Generator]"})),A.keys=function(A){var I=[];for(var g in A)I.push(g);return I.reverse(),function g(){for(;I.length;){var B=I.pop();if(B in A)return g.value=B,g.done=!1,g}return g.done=!0,g}},A.values=H,M.prototype={constructor:M,reset:function(A){if(this.prev=0,this.next=0,this.sent=this._sent=I,this.done=!1,this.delegate=null,this.method="next",this.arg=I,this.tryEntries.forEach(J),!A)for(var g in this)"t"===g.charAt(0)&&B.call(this,g)&&!isNaN(+g.slice(1))&&(this[g]=I)},stop:function(){this.done=!0;var A=this.tryEntries[0].completion;if("throw"===A.type)throw A.arg;return this.rval},dispatchException:function(A){if(this.done)throw A;var g=this;function Q(B,Q){return i.type="throw",i.arg=A,g.next=B,Q&&(g.method="next",g.arg=I),!!Q}for(var C=this.tryEntries.length-1;C>=0;--C){var E=this.tryEntries[C],i=E.completion;if("root"===E.tryLoc)return Q("end");if(E.tryLoc<=this.prev){var o=B.call(E,"catchLoc"),t=B.call(E,"finallyLoc");if(o&&t){if(this.prev<E.catchLoc)return Q(E.catchLoc,!0);if(this.prev<E.finallyLoc)return Q(E.finallyLoc)}else if(o){if(this.prev<E.catchLoc)return Q(E.catchLoc,!0)}else{if(!t)throw new Error("try statement without catch or finally");if(this.prev<E.finallyLoc)return Q(E.finallyLoc)}}}},abrupt:function(A,I){for(var g=this.tryEntries.length-1;g>=0;--g){var Q=this.tryEntries[g];if(Q.tryLoc<=this.prev&&B.call(Q,"finallyLoc")&&this.prev<Q.finallyLoc){var C=Q;break}}C&&("break"===A||"continue"===A)&&C.tryLoc<=I&&I<=C.finallyLoc&&(C=null);var E=C?C.completion:{};return E.type=A,E.arg=I,C?(this.method="next",this.next=C.finallyLoc,w):this.complete(E)},complete:function(A,I){if("throw"===A.type)throw A.arg;return"break"===A.type||"continue"===A.type?this.next=A.arg:"return"===A.type?(this.rval=this.arg=A.arg,this.method="return",this.next="end"):"normal"===A.type&&I&&(this.next=I),w},finish:function(A){for(var I=this.tryEntries.length-1;I>=0;--I){var g=this.tryEntries[I];if(g.finallyLoc===A)return this.complete(g.completion,g.afterLoc),J(g),w}},catch:function(A){for(var I=this.tryEntries.length-1;I>=0;--I){var g=this.tryEntries[I];if(g.tryLoc===A){var B=g.completion;if("throw"===B.type){var Q=B.arg;J(g)}return Q}}throw new Error("illegal catch attempt")},delegateYield:function(A,g,B){return this.delegate={iterator:H(A),resultName:g,nextLoc:B},"next"===this.method&&(this.arg=I),w}},A}(A.exports);try{regeneratorRuntime=I}catch(A){"object"==typeof globalThis?globalThis.regeneratorRuntime=I:Function("r","regeneratorRuntime = r")(I)}},2043:(A,I,g)=>{A.exports=g(7458)},5109:(A,I,g)=>{g(8109),g(2166);var B=g(9081);A.exports=B.Array.from},1316:(A,I,g)=>{g(9506);var B=g(9081);A.exports=B.Array.isArray},3641:(A,I,g)=>{g(3075);var B=g(2018);A.exports=B("Array").concat},646:(A,I,g)=>{g(8345);var B=g(2018);A.exports=B("Array").filter},3147:(A,I,g)=>{g(7670);var B=g(2018);A.exports=B("Array").includes},5197:(A,I,g)=>{g(194);var B=g(2018);A.exports=B("Array").indexOf},474:(A,I,g)=>{g(2478);var B=g(2018);A.exports=B("Array").map},1001:(A,I,g)=>{g(5313);var B=g(2018);A.exports=B("Array").slice},5587:(A,I,g)=>{g(4596);var B=g(2018);A.exports=B("Array").splice},3386:(A,I,g)=>{g(2228),g(8109);var B=g(5018);A.exports=B},7543:(A,I,g)=>{var B=g(3641),Q=Array.prototype;A.exports=function(A){var I=A.concat;return A===Q||A instanceof Array&&I===Q.concat?B:I}},3918:(A,I,g)=>{var B=g(646),Q=Array.prototype;A.exports=function(A){var I=A.filter;return A===Q||A instanceof Array&&I===Q.filter?B:I}},790:(A,I,g)=>{var B=g(6270),Q=RegExp.prototype;A.exports=function(A){return(A===Q||A instanceof RegExp)&&!("flags"in A)?B(A):A.flags}},9109:(A,I,g)=>{var B=g(3147),Q=g(5520),C=Array.prototype,E=String.prototype;A.exports=function(A){var I=A.includes;return A===C||A instanceof Array&&I===C.includes?B:"string"==typeof A||A===E||A instanceof String&&I===E.includes?Q:I}},4825:(A,I,g)=>{var B=g(5197),Q=Array.prototype;A.exports=function(A){var I=A.indexOf;return A===Q||A instanceof Array&&I===Q.indexOf?B:I}},238:(A,I,g)=>{var B=g(474),Q=Array.prototype;A.exports=function(A){var I=A.map;return A===Q||A instanceof Array&&I===Q.map?B:I}},1285:(A,I,g)=>{var B=g(1001),Q=Array.prototype;A.exports=function(A){var I=A.slice;return A===Q||A instanceof Array&&I===Q.slice?B:I}},7681:(A,I,g)=>{var B=g(5587),Q=Array.prototype;A.exports=function(A){var I=A.splice;return A===Q||A instanceof Array&&I===Q.splice?B:I}},8949:(A,I,g)=>{var B=g(9119),Q=String.prototype;A.exports=function(A){var I=A.trim;return"string"==typeof A||A===Q||A instanceof String&&I===Q.trim?B:I}},2529:(A,I,g)=>{g(8524);var B=g(9081);A.exports=B.Object.assign},6854:(A,I,g)=>{g(6764);var B=g(9081).Object,Q=A.exports=function(A,I,g){return B.defineProperty(A,I,g)};B.defineProperty.sham&&(Q.sham=!0)},1553:(A,I,g)=>{g(9398);var B=g(9081);A.exports=B.Object.entries},2744:(A,I,g)=>{g(554);var B=g(9081).Object,Q=A.exports=function(A,I){return B.getOwnPropertyDescriptor(A,I)};B.getOwnPropertyDescriptor.sham&&(Q.sham=!0)},6018:(A,I,g)=>{g(4267);var B=g(9081);A.exports=B.Object.getOwnPropertyDescriptors},5350:(A,I,g)=>{g(8318);var B=g(9081);A.exports=B.Object.getOwnPropertySymbols},8116:(A,I,g)=>{g(8390);var B=g(9081);A.exports=B.Object.keys},3140:(A,I,g)=>{g(1171);var B=g(9081);A.exports=B.Object.values},7281:(A,I,g)=>{g(6454),g(2228),g(2575),g(3658),g(4465),g(8359),g(5203),g(8109);var B=g(9081);A.exports=B.Promise},6270:(A,I,g)=>{g(8714);var B=g(4980);A.exports=function(A){return B.call(A)}},5520:(A,I,g)=>{g(688);var B=g(2018);A.exports=B("String").includes},9119:(A,I,g)=>{g(8217);var B=g(2018);A.exports=B("String").trim},1442:(A,I,g)=>{g(3075),g(2575),g(8318),g(5762),g(2181),g(8848),g(3719),g(2362),g(346),g(888),g(909),g(1992),g(8512),g(6165),g(6044),g(4676),g(263),g(3596),g(1227),g(6268);var B=g(9081);A.exports=B.Symbol},1190:(A,I,g)=>{g(2228),g(2575),g(8109),g(2362);var B=g(3379);A.exports=B.f("iterator")},4640:(A,I,g)=>{var B=g(7945);A.exports=B},846:(A,I,g)=>{var B=g(8010);A.exports=B},7686:(A,I,g)=>{var B=g(7922);A.exports=B},5681:(A,I,g)=>{var B=g(5838);A.exports=B},9863:(A,I,g)=>{var B=g(671);A.exports=B},5723:(A,I,g)=>{var B=g(8531);A.exports=B},8887:(A,I,g)=>{var B=g(6601);A.exports=B},9009:(A,I,g)=>{var B=g(8783);A.exports=B},5213:(A,I,g)=>{var B=g(4731);g(1152),g(8561),g(5543),g(8302),A.exports=B},156:(A,I,g)=>{var B=g(3355);g(8812),g(9085),g(7384),g(4719),g(2994),g(9431),g(4803),A.exports=B},7754:(A,I,g)=>{var B=g(6888);A.exports=B},9077:A=>{A.exports=function(A){if("function"!=typeof A)throw TypeError(String(A)+" is not a function");return A}},9154:(A,I,g)=>{var B=g(3359);A.exports=function(A){if(!B(A)&&null!==A)throw TypeError("Can't set "+String(A)+" as a prototype");return A}},7710:A=>{A.exports=function(){}},8792:A=>{A.exports=function(A,I,g){if(!(A instanceof I))throw TypeError("Incorrect "+(g?g+" ":"")+"invocation");return A}},1912:(A,I,g)=>{var B=g(3359);A.exports=function(A){if(!B(A))throw TypeError(String(A)+" is not an object");return A}},4746:(A,I,g)=>{"use strict";var B=g(7673),Q=g(2058),C=g(7647),E=g(6475),i=g(3746),o=g(409),t=g(5945),a=g(5018);A.exports=function(A){var I,g,D,s,r,e,w=Q(A),n="function"==typeof this?this:Array,c=arguments.length,h=c>1?arguments[1]:void 0,y=void 0!==h,G=a(w),F=0;if(y&&(h=B(h,c>2?arguments[2]:void 0,2)),null==G||n==Array&&E(G))for(g=new n(I=i(w.length));I>F;F++)e=y?h(w[F],F):w[F],o(g,F,e);else for(r=(s=t(w,G)).next,g=new n;!(D=r.call(s)).done;F++)e=y?C(s,h,[D.value,F],!0):D.value,o(g,F,e);return g.length=F,g}},7075:(A,I,g)=>{var B=g(3861),Q=g(3746),C=g(3055),E=function(A){return function(I,g,E){var i,o=B(I),t=Q(o.length),a=C(E,t);if(A&&g!=g){for(;t>a;)if((i=o[a++])!=i)return!0}else for(;t>a;a++)if((A||a in o)&&o[a]===g)return A||a||0;return!A&&-1}};A.exports={includes:E(!0),indexOf:E(!1)}},4206:(A,I,g)=>{var B=g(7673),Q=g(1251),C=g(2058),E=g(3746),i=g(8136),o=[].push,t=function(A){var I=1==A,g=2==A,t=3==A,a=4==A,D=6==A,s=7==A,r=5==A||D;return function(e,w,n,c){for(var h,y,G=C(e),F=Q(G),N=B(w,n,3),R=E(F.length),S=0,k=c||i,U=I?k(e,R):g||s?k(e,0):void 0;R>S;S++)if((r||S in F)&&(y=N(h=F[S],S,G),A))if(I)U[S]=y;else if(y)switch(A){case 3:return!0;case 5:return h;case 6:return S;case 2:o.call(U,h)}else switch(A){case 4:return!1;case 7:o.call(U,h)}return D?-1:t||a?a:U}};A.exports={forEach:t(0),map:t(1),filter:t(2),some:t(3),every:t(4),find:t(5),findIndex:t(6),filterReject:t(7)}},2143:(A,I,g)=>{var B=g(6530),Q=g(5712),C=g(8233),E=Q("species");A.exports=function(A){return C>=51||!B((function(){var I=[];return(I.constructor={})[E]=function(){return{foo:1}},1!==I[A](Boolean).foo}))}},6628:(A,I,g)=>{"use strict";var B=g(6530);A.exports=function(A,I){var g=[][A];return!!g&&B((function(){g.call(null,I||function(){throw 1},1)}))}},3400:(A,I,g)=>{var B=g(3359),Q=g(1054),C=g(5712)("species");A.exports=function(A){var I;return Q(A)&&("function"!=typeof(I=A.constructor)||I!==Array&&!Q(I.prototype)?B(I)&&null===(I=I[C])&&(I=void 0):I=void 0),void 0===I?Array:I}},8136:(A,I,g)=>{var B=g(3400);A.exports=function(A,I){return new(B(A))(0===I?0:I)}},7647:(A,I,g)=>{var B=g(1912),Q=g(309);A.exports=function(A,I,g,C){try{return C?I(B(g)[0],g[1]):I(g)}catch(I){Q(A,"throw",I)}}},8908:(A,I,g)=>{var B=g(5712)("iterator"),Q=!1;try{var C=0,E={next:function(){return{done:!!C++}},return:function(){Q=!0}};E[B]=function(){return this},Array.from(E,(function(){throw 2}))}catch(A){}A.exports=function(A,I){if(!I&&!Q)return!1;var g=!1;try{var C={};C[B]=function(){return{next:function(){return{done:g=!0}}}},A(C)}catch(A){}return g}},1570:A=>{var I={}.toString;A.exports=function(A){return I.call(A).slice(8,-1)}},7499:(A,I,g)=>{var B=g(8889),Q=g(1570),C=g(5712)("toStringTag"),E="Arguments"==Q(function(){return arguments}());A.exports=B?Q:function(A){var I,g,B;return void 0===A?"Undefined":null===A?"Null":"string"==typeof(g=function(A,I){try{return A[I]}catch(A){}}(I=Object(A),C))?g:E?Q(I):"Object"==(B=Q(I))&&"function"==typeof I.callee?"Arguments":B}},1722:(A,I,g)=>{var B=g(5712)("match");A.exports=function(A){var I=/./;try{"/./"[A](I)}catch(g){try{return I[B]=!1,"/./"[A](I)}catch(A){}}return!1}},872:(A,I,g)=>{var B=g(6530);A.exports=!B((function(){function A(){}return A.prototype.constructor=null,Object.getPrototypeOf(new A)!==A.prototype}))},8611:(A,I,g)=>{"use strict";var B=g(7300).IteratorPrototype,Q=g(2491),C=g(5595),E=g(6738),i=g(9418),o=function(){return this};A.exports=function(A,I,g){var t=I+" Iterator";return A.prototype=Q(B,{next:C(1,g)}),E(A,t,!1,!0),i[t]=o,A}},8518:(A,I,g)=>{var B=g(7001),Q=g(7550),C=g(5595);A.exports=B?function(A,I,g){return Q.f(A,I,C(1,g))}:function(A,I,g){return A[I]=g,A}},5595:A=>{A.exports=function(A,I){return{enumerable:!(1&A),configurable:!(2&A),writable:!(4&A),value:I}}},409:(A,I,g)=>{"use strict";var B=g(5623),Q=g(7550),C=g(5595);A.exports=function(A,I,g){var E=B(I);E in A?Q.f(A,E,C(0,g)):A[E]=g}},8277:(A,I,g)=>{"use strict";var B=g(390),Q=g(8611),C=g(2629),E=g(5255),i=g(6738),o=g(8518),t=g(9791),a=g(5712),D=g(8367),s=g(9418),r=g(7300),e=r.IteratorPrototype,w=r.BUGGY_SAFARI_ITERATORS,n=a("iterator"),c="keys",h="values",y="entries",G=function(){return this};A.exports=function(A,I,g,a,r,F,N){Q(g,I,a);var R,S,k,U=function(A){if(A===r&&Y)return Y;if(!w&&A in H)return H[A];switch(A){case c:case h:case y:return function(){return new g(this,A)}}return function(){return new g(this)}},J=I+" Iterator",M=!1,H=A.prototype,L=H[n]||H["@@iterator"]||r&&H[r],Y=!w&&L||U(r),l="Array"==I&&H.entries||L;if(l&&(R=C(l.call(new A)),e!==Object.prototype&&R.next&&(D||C(R)===e||(E?E(R,e):"function"!=typeof R[n]&&o(R,n,G)),i(R,J,!0,!0),D&&(s[J]=G))),r==h&&L&&L.name!==h&&(M=!0,Y=function(){return L.call(this)}),D&&!N||H[n]===Y||o(H,n,Y),s[I]=Y,r)if(S={values:U(h),keys:F?Y:U(c),entries:U(y)},N)for(k in S)(w||M||!(k in H))&&t(H,k,S[k]);else B({target:I,proto:!0,forced:w||M},S);return S}},1412:(A,I,g)=>{var B=g(9081),Q=g(6690),C=g(3379),E=g(7550).f;A.exports=function(A){var I=B.Symbol||(B.Symbol={});Q(I,A)||E(I,A,{value:C.f(A)})}},7001:(A,I,g)=>{var B=g(6530);A.exports=!B((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},231:(A,I,g)=>{var B=g(2868),Q=g(3359),C=B.document,E=Q(C)&&Q(C.createElement);A.exports=function(A){return E?C.createElement(A):{}}},315:A=>{A.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},6610:A=>{A.exports="object"==typeof window},6405:(A,I,g)=>{var B=g(6900),Q=g(2868);A.exports=/ipad|iphone|ipod/i.test(B)&&void 0!==Q.Pebble},6540:(A,I,g)=>{var B=g(6900);A.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(B)},6521:(A,I,g)=>{var B=g(1570),Q=g(2868);A.exports="process"==B(Q.process)},4010:(A,I,g)=>{var B=g(6900);A.exports=/web0s(?!.*chrome)/i.test(B)},6900:(A,I,g)=>{var B=g(8104);A.exports=B("navigator","userAgent")||""},8233:(A,I,g)=>{var B,Q,C=g(2868),E=g(6900),i=C.process,o=C.Deno,t=i&&i.versions||o&&o.version,a=t&&t.v8;a?Q=(B=a.split("."))[0]<4?1:B[0]+B[1]:E&&(!(B=E.match(/Edge\/(\d+)/))||B[1]>=74)&&(B=E.match(/Chrome\/(\d+)/))&&(Q=B[1]),A.exports=Q&&+Q},2018:(A,I,g)=>{var B=g(9081);A.exports=function(A){return B[A+"Prototype"]}},2712:A=>{A.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},390:(A,I,g)=>{"use strict";var B=g(2868),Q=g(5904).f,C=g(1011),E=g(9081),i=g(7673),o=g(8518),t=g(6690),a=function(A){var I=function(I,g,B){if(this instanceof A){switch(arguments.length){case 0:return new A;case 1:return new A(I);case 2:return new A(I,g)}return new A(I,g,B)}return A.apply(this,arguments)};return I.prototype=A.prototype,I};A.exports=function(A,I){var g,D,s,r,e,w,n,c,h=A.target,y=A.global,G=A.stat,F=A.proto,N=y?B:G?B[h]:(B[h]||{}).prototype,R=y?E:E[h]||o(E,h,{})[h],S=R.prototype;for(s in I)g=!C(y?s:h+(G?".":"#")+s,A.forced)&&N&&t(N,s),e=R[s],g&&(w=A.noTargetGet?(c=Q(N,s))&&c.value:N[s]),r=g&&w?w:I[s],g&&typeof e==typeof r||(n=A.bind&&g?i(r,B):A.wrap&&g?a(r):F&&"function"==typeof r?i(Function.call,r):r,(A.sham||r&&r.sham||e&&e.sham)&&o(n,"sham",!0),o(R,s,n),F&&(t(E,D=h+"Prototype")||o(E,D,{}),o(E[D],s,r),A.real&&S&&!S[s]&&o(S,s,r)))}},6530:A=>{A.exports=function(A){try{return!!A()}catch(A){return!0}}},7673:(A,I,g)=>{var B=g(9077);A.exports=function(A,I,g){if(B(A),void 0===I)return A;switch(g){case 0:return function(){return A.call(I)};case 1:return function(g){return A.call(I,g)};case 2:return function(g,B){return A.call(I,g,B)};case 3:return function(g,B,Q){return A.call(I,g,B,Q)}}return function(){return A.apply(I,arguments)}}},8104:(A,I,g)=>{var B=g(9081),Q=g(2868),C=function(A){return"function"==typeof A?A:void 0};A.exports=function(A,I){return arguments.length<2?C(B[A])||C(Q[A]):B[A]&&B[A][I]||Q[A]&&Q[A][I]}},5018:(A,I,g)=>{var B=g(7499),Q=g(9418),C=g(5712)("iterator");A.exports=function(A){if(null!=A)return A[C]||A["@@iterator"]||Q[B(A)]}},5945:(A,I,g)=>{var B=g(1912),Q=g(5018);A.exports=function(A,I){var g=arguments.length<2?Q(A):I;if("function"!=typeof g)throw TypeError(String(A)+" is not iterable");return B(g.call(A))}},2868:(A,I,g)=>{var B=function(A){return A&&A.Math==Math&&A};A.exports=B("object"==typeof globalThis&&globalThis)||B("object"==typeof window&&window)||B("object"==typeof self&&self)||B("object"==typeof g.g&&g.g)||function(){return this}()||Function("return this")()},6690:(A,I,g)=>{var B=g(2058),Q={}.hasOwnProperty;A.exports=Object.hasOwn||function(A,I){return Q.call(B(A),I)}},7048:A=>{A.exports={}},8471:(A,I,g)=>{var B=g(2868);A.exports=function(A,I){var g=B.console;g&&g.error&&(1===arguments.length?g.error(A):g.error(A,I))}},5644:(A,I,g)=>{var B=g(8104);A.exports=B("document","documentElement")},640:(A,I,g)=>{var B=g(7001),Q=g(6530),C=g(231);A.exports=!B&&!Q((function(){return 7!=Object.defineProperty(C("div"),"a",{get:function(){return 7}}).a}))},1251:(A,I,g)=>{var B=g(6530),Q=g(1570),C="".split;A.exports=B((function(){return!Object("z").propertyIsEnumerable(0)}))?function(A){return"String"==Q(A)?C.call(A,""):Object(A)}:Object},1494:(A,I,g)=>{var B=g(2656),Q=Function.toString;"function"!=typeof B.inspectSource&&(B.inspectSource=function(A){return Q.call(A)}),A.exports=B.inspectSource},5875:(A,I,g)=>{var B,Q,C,E=g(2297),i=g(2868),o=g(3359),t=g(8518),a=g(6690),D=g(2656),s=g(5039),r=g(7048),e="Object already initialized",w=i.WeakMap;if(E||D.state){var n=D.state||(D.state=new w),c=n.get,h=n.has,y=n.set;B=function(A,I){if(h.call(n,A))throw new TypeError(e);return I.facade=A,y.call(n,A,I),I},Q=function(A){return c.call(n,A)||{}},C=function(A){return h.call(n,A)}}else{var G=s("state");r[G]=!0,B=function(A,I){if(a(A,G))throw new TypeError(e);return I.facade=A,t(A,G,I),I},Q=function(A){return a(A,G)?A[G]:{}},C=function(A){return a(A,G)}}A.exports={set:B,get:Q,has:C,enforce:function(A){return C(A)?Q(A):B(A,{})},getterFor:function(A){return function(I){var g;if(!o(I)||(g=Q(I)).type!==A)throw TypeError("Incompatible receiver, "+A+" required");return g}}}},6475:(A,I,g)=>{var B=g(5712),Q=g(9418),C=B("iterator"),E=Array.prototype;A.exports=function(A){return void 0!==A&&(Q.Array===A||E[C]===A)}},1054:(A,I,g)=>{var B=g(1570);A.exports=Array.isArray||function(A){return"Array"==B(A)}},1011:(A,I,g)=>{var B=g(6530),Q=/#|\.prototype\./,C=function(A,I){var g=i[E(A)];return g==t||g!=o&&("function"==typeof I?B(I):!!I)},E=C.normalize=function(A){return String(A).replace(Q,".").toLowerCase()},i=C.data={},o=C.NATIVE="N",t=C.POLYFILL="P";A.exports=C},3359:A=>{A.exports=function(A){return"object"==typeof A?null!==A:"function"==typeof A}},8367:A=>{A.exports=!0},6858:(A,I,g)=>{var B=g(3359),Q=g(1570),C=g(5712)("match");A.exports=function(A){var I;return B(A)&&(void 0!==(I=A[C])?!!I:"RegExp"==Q(A))}},1149:(A,I,g)=>{var B=g(8104),Q=g(6046);A.exports=Q?function(A){return"symbol"==typeof A}:function(A){var I=B("Symbol");return"function"==typeof I&&Object(A)instanceof I}},3906:(A,I,g)=>{var B=g(1912),Q=g(6475),C=g(3746),E=g(7673),i=g(5945),o=g(5018),t=g(309),a=function(A,I){this.stopped=A,this.result=I};A.exports=function(A,I,g){var D,s,r,e,w,n,c,h=g&&g.that,y=!(!g||!g.AS_ENTRIES),G=!(!g||!g.IS_ITERATOR),F=!(!g||!g.INTERRUPTED),N=E(I,h,1+y+F),R=function(A){return D&&t(D,"normal",A),new a(!0,A)},S=function(A){return y?(B(A),F?N(A[0],A[1],R):N(A[0],A[1])):F?N(A,R):N(A)};if(G)D=A;else{if("function"!=typeof(s=o(A)))throw TypeError("Target is not iterable");if(Q(s)){for(r=0,e=C(A.length);e>r;r++)if((w=S(A[r]))&&w instanceof a)return w;return new a(!1)}D=i(A,s)}for(n=D.next;!(c=n.call(D)).done;){try{w=S(c.value)}catch(A){t(D,"throw",A)}if("object"==typeof w&&w&&w instanceof a)return w}return new a(!1)}},309:(A,I,g)=>{var B=g(1912);A.exports=function(A,I,g){var Q,C;B(A);try{if(void 0===(Q=A.return)){if("throw"===I)throw g;return g}Q=Q.call(A)}catch(A){C=!0,Q=A}if("throw"===I)throw g;if(C)throw Q;return B(Q),g}},7300:(A,I,g)=>{"use strict";var B,Q,C,E=g(6530),i=g(2629),o=g(8518),t=g(6690),a=g(5712),D=g(8367),s=a("iterator"),r=!1;[].keys&&("next"in(C=[].keys())?(Q=i(i(C)))!==Object.prototype&&(B=Q):r=!0);var e=null==B||E((function(){var A={};return B[s].call(A)!==A}));e&&(B={}),D&&!e||t(B,s)||o(B,s,(function(){return this})),A.exports={IteratorPrototype:B,BUGGY_SAFARI_ITERATORS:r}},9418:A=>{A.exports={}},8054:(A,I,g)=>{var B,Q,C,E,i,o,t,a,D=g(2868),s=g(5904).f,r=g(6569).set,e=g(6540),w=g(6405),n=g(4010),c=g(6521),h=D.MutationObserver||D.WebKitMutationObserver,y=D.document,G=D.process,F=D.Promise,N=s(D,"queueMicrotask"),R=N&&N.value;R||(B=function(){var A,I;for(c&&(A=G.domain)&&A.exit();Q;){I=Q.fn,Q=Q.next;try{I()}catch(A){throw Q?E():C=void 0,A}}C=void 0,A&&A.enter()},e||c||n||!h||!y?!w&&F&&F.resolve?((t=F.resolve(void 0)).constructor=F,a=t.then,E=function(){a.call(t,B)}):E=c?function(){G.nextTick(B)}:function(){r.call(D,B)}:(i=!0,o=y.createTextNode(""),new h(B).observe(o,{characterData:!0}),E=function(){o.data=i=!i})),A.exports=R||function(A){var I={fn:A,next:void 0};C&&(C.next=I),Q||(Q=I,E()),C=I}},3104:(A,I,g)=>{var B=g(2868);A.exports=B.Promise},3216:(A,I,g)=>{var B=g(8233),Q=g(6530);A.exports=!!Object.getOwnPropertySymbols&&!Q((function(){var A=Symbol();return!String(A)||!(Object(A)instanceof Symbol)||!Symbol.sham&&B&&B<41}))},2297:(A,I,g)=>{var B=g(2868),Q=g(1494),C=B.WeakMap;A.exports="function"==typeof C&&/native code/.test(Q(C))},4130:(A,I,g)=>{"use strict";var B=g(9077),Q=function(A){var I,g;this.promise=new A((function(A,B){if(void 0!==I||void 0!==g)throw TypeError("Bad Promise constructor");I=A,g=B})),this.resolve=B(I),this.reject=B(g)};A.exports.f=function(A){return new Q(A)}},9611:(A,I,g)=>{var B=g(6858);A.exports=function(A){if(B(A))throw TypeError("The method doesn't accept regular expressions");return A}},3210:(A,I,g)=>{"use strict";var B=g(7001),Q=g(6530),C=g(461),E=g(3764),i=g(1156),o=g(2058),t=g(1251),a=Object.assign,D=Object.defineProperty;A.exports=!a||Q((function(){if(B&&1!==a({b:1},a(D({},"a",{enumerable:!0,get:function(){D(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var A={},I={},g=Symbol(),Q="abcdefghijklmnopqrst";return A[g]=7,Q.split("").forEach((function(A){I[A]=A})),7!=a({},A)[g]||C(a({},I)).join("")!=Q}))?function(A,I){for(var g=o(A),Q=arguments.length,a=1,D=E.f,s=i.f;Q>a;)for(var r,e=t(arguments[a++]),w=D?C(e).concat(D(e)):C(e),n=w.length,c=0;n>c;)r=w[c++],B&&!s.call(e,r)||(g[r]=e[r]);return g}:a},2491:(A,I,g)=>{var B,Q=g(1912),C=g(4686),E=g(2712),i=g(7048),o=g(5644),t=g(231),a=g(5039),D=a("IE_PROTO"),s=function(){},r=function(A){return"<script>"+A+"</"+"script>"},e=function(A){A.write(r("")),A.close();var I=A.parentWindow.Object;return A=null,I},w=function(){try{B=new ActiveXObject("htmlfile")}catch(A){}var A,I;w="undefined"!=typeof document?document.domain&&B?e(B):((I=t("iframe")).style.display="none",o.appendChild(I),I.src=String("javascript:"),(A=I.contentWindow.document).open(),A.write(r("document.F=Object")),A.close(),A.F):e(B);for(var g=E.length;g--;)delete w.prototype[E[g]];return w()};i[D]=!0,A.exports=Object.create||function(A,I){var g;return null!==A?(s.prototype=Q(A),g=new s,s.prototype=null,g[D]=A):g=w(),void 0===I?g:C(g,I)}},4686:(A,I,g)=>{var B=g(7001),Q=g(7550),C=g(1912),E=g(461);A.exports=B?Object.defineProperties:function(A,I){C(A);for(var g,B=E(I),i=B.length,o=0;i>o;)Q.f(A,g=B[o++],I[g]);return A}},7550:(A,I,g)=>{var B=g(7001),Q=g(640),C=g(1912),E=g(5623),i=Object.defineProperty;I.f=B?i:function(A,I,g){if(C(A),I=E(I),C(g),Q)try{return i(A,I,g)}catch(A){}if("get"in g||"set"in g)throw TypeError("Accessors not supported");return"value"in g&&(A[I]=g.value),A}},5904:(A,I,g)=>{var B=g(7001),Q=g(1156),C=g(5595),E=g(3861),i=g(5623),o=g(6690),t=g(640),a=Object.getOwnPropertyDescriptor;I.f=B?a:function(A,I){if(A=E(A),I=i(I),t)try{return a(A,I)}catch(A){}if(o(A,I))return C(!Q.f.call(A,I),A[I])}},6159:(A,I,g)=>{var B=g(3861),Q=g(9035).f,C={}.toString,E="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];A.exports.f=function(A){return E&&"[object Window]"==C.call(A)?function(A){try{return Q(A)}catch(A){return E.slice()}}(A):Q(B(A))}},9035:(A,I,g)=>{var B=g(1247),Q=g(2712).concat("length","prototype");I.f=Object.getOwnPropertyNames||function(A){return B(A,Q)}},3764:(A,I)=>{I.f=Object.getOwnPropertySymbols},2629:(A,I,g)=>{var B=g(6690),Q=g(2058),C=g(5039),E=g(872),i=C("IE_PROTO"),o=Object.prototype;A.exports=E?Object.getPrototypeOf:function(A){return A=Q(A),B(A,i)?A[i]:"function"==typeof A.constructor&&A instanceof A.constructor?A.constructor.prototype:A instanceof Object?o:null}},1247:(A,I,g)=>{var B=g(6690),Q=g(3861),C=g(7075).indexOf,E=g(7048);A.exports=function(A,I){var g,i=Q(A),o=0,t=[];for(g in i)!B(E,g)&&B(i,g)&&t.push(g);for(;I.length>o;)B(i,g=I[o++])&&(~C(t,g)||t.push(g));return t}},461:(A,I,g)=>{var B=g(1247),Q=g(2712);A.exports=Object.keys||function(A){return B(A,Q)}},1156:(A,I)=>{"use strict";var g={}.propertyIsEnumerable,B=Object.getOwnPropertyDescriptor,Q=B&&!g.call({1:2},1);I.f=Q?function(A){var I=B(this,A);return!!I&&I.enumerable}:g},5255:(A,I,g)=>{var B=g(1912),Q=g(9154);A.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var A,I=!1,g={};try{(A=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(g,[]),I=g instanceof Array}catch(A){}return function(g,C){return B(g),Q(C),I?A.call(g,C):g.__proto__=C,g}}():void 0)},3895:(A,I,g)=>{var B=g(7001),Q=g(461),C=g(3861),E=g(1156).f,i=function(A){return function(I){for(var g,i=C(I),o=Q(i),t=o.length,a=0,D=[];t>a;)g=o[a++],B&&!E.call(i,g)||D.push(A?[g,i[g]]:i[g]);return D}};A.exports={entries:i(!0),values:i(!1)}},2204:(A,I,g)=>{"use strict";var B=g(8889),Q=g(7499);A.exports=B?{}.toString:function(){return"[object "+Q(this)+"]"}},9466:(A,I,g)=>{var B=g(3359);A.exports=function(A,I){var g,Q;if("string"===I&&"function"==typeof(g=A.toString)&&!B(Q=g.call(A)))return Q;if("function"==typeof(g=A.valueOf)&&!B(Q=g.call(A)))return Q;if("string"!==I&&"function"==typeof(g=A.toString)&&!B(Q=g.call(A)))return Q;throw TypeError("Can't convert object to primitive value")}},5340:(A,I,g)=>{var B=g(8104),Q=g(9035),C=g(3764),E=g(1912);A.exports=B("Reflect","ownKeys")||function(A){var I=Q.f(E(A)),g=C.f;return g?I.concat(g(A)):I}},9081:A=>{A.exports={}},4618:A=>{A.exports=function(A){try{return{error:!1,value:A()}}catch(A){return{error:!0,value:A}}}},4567:(A,I,g)=>{var B=g(1912),Q=g(3359),C=g(4130);A.exports=function(A,I){if(B(A),Q(I)&&I.constructor===A)return I;var g=C.f(A);return(0,g.resolve)(I),g.promise}},9248:(A,I,g)=>{var B=g(9791);A.exports=function(A,I,g){for(var Q in I)g&&g.unsafe&&A[Q]?A[Q]=I[Q]:B(A,Q,I[Q],g);return A}},9791:(A,I,g)=>{var B=g(8518);A.exports=function(A,I,g,Q){Q&&Q.enumerable?A[I]=g:B(A,I,g)}},4980:(A,I,g)=>{"use strict";var B=g(1912);A.exports=function(){var A=B(this),I="";return A.global&&(I+="g"),A.ignoreCase&&(I+="i"),A.multiline&&(I+="m"),A.dotAll&&(I+="s"),A.unicode&&(I+="u"),A.sticky&&(I+="y"),I}},3604:A=>{A.exports=function(A){if(null==A)throw TypeError("Can't call method on "+A);return A}},2643:(A,I,g)=>{var B=g(2868);A.exports=function(A,I){try{Object.defineProperty(B,A,{value:I,configurable:!0,writable:!0})}catch(g){B[A]=I}return I}},2655:(A,I,g)=>{"use strict";var B=g(8104),Q=g(7550),C=g(5712),E=g(7001),i=C("species");A.exports=function(A){var I=B(A),g=Q.f;E&&I&&!I[i]&&g(I,i,{configurable:!0,get:function(){return this}})}},6738:(A,I,g)=>{var B=g(8889),Q=g(7550).f,C=g(8518),E=g(6690),i=g(2204),o=g(5712)("toStringTag");A.exports=function(A,I,g,t){if(A){var a=g?A:A.prototype;E(a,o)||Q(a,o,{configurable:!0,value:I}),t&&!B&&C(a,"toString",i)}}},5039:(A,I,g)=>{var B=g(6315),Q=g(9),C=B("keys");A.exports=function(A){return C[A]||(C[A]=Q(A))}},2656:(A,I,g)=>{var B=g(2868),Q=g(2643),C="__core-js_shared__",E=B[C]||Q(C,{});A.exports=E},6315:(A,I,g)=>{var B=g(8367),Q=g(2656);(A.exports=function(A,I){return Q[A]||(Q[A]=void 0!==I?I:{})})("versions",[]).push({version:"3.17.2",mode:B?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},5462:(A,I,g)=>{var B=g(1912),Q=g(9077),C=g(5712)("species");A.exports=function(A,I){var g,E=B(A).constructor;return void 0===E||null==(g=B(E)[C])?I:Q(g)}},1420:(A,I,g)=>{var B=g(1470),Q=g(5264),C=g(3604),E=function(A){return function(I,g){var E,i,o=Q(C(I)),t=B(g),a=o.length;return t<0||t>=a?A?"":void 0:(E=o.charCodeAt(t))<55296||E>56319||t+1===a||(i=o.charCodeAt(t+1))<56320||i>57343?A?o.charAt(t):E:A?o.slice(t,t+2):i-56320+(E-55296<<10)+65536}};A.exports={codeAt:E(!1),charAt:E(!0)}},9787:(A,I,g)=>{var B=g(6530),Q=g(3781);A.exports=function(A){return B((function(){return!!Q[A]()||"​…᠎"!="​…᠎"[A]()||Q[A].name!==A}))}},774:(A,I,g)=>{var B=g(3604),Q=g(5264),C="["+g(3781)+"]",E=RegExp("^"+C+C+"*"),i=RegExp(C+C+"*$"),o=function(A){return function(I){var g=Q(B(I));return 1&A&&(g=g.replace(E,"")),2&A&&(g=g.replace(i,"")),g}};A.exports={start:o(1),end:o(2),trim:o(3)}},6569:(A,I,g)=>{var B,Q,C,E,i=g(2868),o=g(6530),t=g(7673),a=g(5644),D=g(231),s=g(6540),r=g(6521),e=i.setImmediate,w=i.clearImmediate,n=i.process,c=i.MessageChannel,h=i.Dispatch,y=0,G={},F="onreadystatechange";try{B=i.location}catch(A){}var N=function(A){if(G.hasOwnProperty(A)){var I=G[A];delete G[A],I()}},R=function(A){return function(){N(A)}},S=function(A){N(A.data)},k=function(A){i.postMessage(String(A),B.protocol+"//"+B.host)};e&&w||(e=function(A){for(var I=[],g=arguments.length,B=1;g>B;)I.push(arguments[B++]);return G[++y]=function(){("function"==typeof A?A:Function(A)).apply(void 0,I)},Q(y),y},w=function(A){delete G[A]},r?Q=function(A){n.nextTick(R(A))}:h&&h.now?Q=function(A){h.now(R(A))}:c&&!s?(E=(C=new c).port2,C.port1.onmessage=S,Q=t(E.postMessage,E,1)):i.addEventListener&&"function"==typeof postMessage&&!i.importScripts&&B&&"file:"!==B.protocol&&!o(k)?(Q=k,i.addEventListener("message",S,!1)):Q=F in D("script")?function(A){a.appendChild(D("script")).onreadystatechange=function(){a.removeChild(this),N(A)}}:function(A){setTimeout(R(A),0)}),A.exports={set:e,clear:w}},3055:(A,I,g)=>{var B=g(1470),Q=Math.max,C=Math.min;A.exports=function(A,I){var g=B(A);return g<0?Q(g+I,0):C(g,I)}},3861:(A,I,g)=>{var B=g(1251),Q=g(3604);A.exports=function(A){return B(Q(A))}},1470:A=>{var I=Math.ceil,g=Math.floor;A.exports=function(A){return isNaN(A=+A)?0:(A>0?g:I)(A)}},3746:(A,I,g)=>{var B=g(1470),Q=Math.min;A.exports=function(A){return A>0?Q(B(A),9007199254740991):0}},2058:(A,I,g)=>{var B=g(3604);A.exports=function(A){return Object(B(A))}},3957:(A,I,g)=>{var B=g(3359),Q=g(1149),C=g(9466),E=g(5712)("toPrimitive");A.exports=function(A,I){if(!B(A)||Q(A))return A;var g,i=A[E];if(void 0!==i){if(void 0===I&&(I="default"),g=i.call(A,I),!B(g)||Q(g))return g;throw TypeError("Can't convert object to primitive value")}return void 0===I&&(I="number"),C(A,I)}},5623:(A,I,g)=>{var B=g(3957),Q=g(1149);A.exports=function(A){var I=B(A,"string");return Q(I)?I:String(I)}},8889:(A,I,g)=>{var B={};B[g(5712)("toStringTag")]="z",A.exports="[object z]"===String(B)},5264:(A,I,g)=>{var B=g(1149);A.exports=function(A){if(B(A))throw TypeError("Cannot convert a Symbol value to a string");return String(A)}},9:A=>{var I=0,g=Math.random();A.exports=function(A){return"Symbol("+String(void 0===A?"":A)+")_"+(++I+g).toString(36)}},6046:(A,I,g)=>{var B=g(3216);A.exports=B&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},3379:(A,I,g)=>{var B=g(5712);I.f=B},5712:(A,I,g)=>{var B=g(2868),Q=g(6315),C=g(6690),E=g(9),i=g(3216),o=g(6046),t=Q("wks"),a=B.Symbol,D=o?a:a&&a.withoutSetter||E;A.exports=function(A){return C(t,A)&&(i||"string"==typeof t[A])||(i&&C(a,A)?t[A]=a[A]:t[A]=D("Symbol."+A)),t[A]}},3781:A=>{A.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},6454:(A,I,g)=>{"use strict";var B=g(390),Q=g(2629),C=g(5255),E=g(2491),i=g(8518),o=g(5595),t=g(3906),a=g(5264),D=function(A,I){var g=this;if(!(g instanceof D))return new D(A,I);C&&(g=C(new Error(void 0),Q(g))),void 0!==I&&i(g,"message",a(I));var B=[];return t(A,B.push,{that:B}),i(g,"errors",B),g};D.prototype=E(Error.prototype,{constructor:o(5,D),message:o(5,""),name:o(5,"AggregateError")}),B({global:!0},{AggregateError:D})},3075:(A,I,g)=>{"use strict";var B=g(390),Q=g(6530),C=g(1054),E=g(3359),i=g(2058),o=g(3746),t=g(409),a=g(8136),D=g(2143),s=g(5712),r=g(8233),e=s("isConcatSpreadable"),w=9007199254740991,n="Maximum allowed index exceeded",c=r>=51||!Q((function(){var A=[];return A[e]=!1,A.concat()[0]!==A})),h=D("concat"),y=function(A){if(!E(A))return!1;var I=A[e];return void 0!==I?!!I:C(A)};B({target:"Array",proto:!0,forced:!c||!h},{concat:function(A){var I,g,B,Q,C,E=i(this),D=a(E,0),s=0;for(I=-1,B=arguments.length;I<B;I++)if(y(C=-1===I?E:arguments[I])){if(s+(Q=o(C.length))>w)throw TypeError(n);for(g=0;g<Q;g++,s++)g in C&&t(D,s,C[g])}else{if(s>=w)throw TypeError(n);t(D,s++,C)}return D.length=s,D}})},8345:(A,I,g)=>{"use strict";var B=g(390),Q=g(4206).filter;B({target:"Array",proto:!0,forced:!g(2143)("filter")},{filter:function(A){return Q(this,A,arguments.length>1?arguments[1]:void 0)}})},2166:(A,I,g)=>{var B=g(390),Q=g(4746);B({target:"Array",stat:!0,forced:!g(8908)((function(A){Array.from(A)}))},{from:Q})},7670:(A,I,g)=>{"use strict";var B=g(390),Q=g(7075).includes,C=g(7710);B({target:"Array",proto:!0},{includes:function(A){return Q(this,A,arguments.length>1?arguments[1]:void 0)}}),C("includes")},194:(A,I,g)=>{"use strict";var B=g(390),Q=g(7075).indexOf,C=g(6628),E=[].indexOf,i=!!E&&1/[1].indexOf(1,-0)<0,o=C("indexOf");B({target:"Array",proto:!0,forced:i||!o},{indexOf:function(A){return i?E.apply(this,arguments)||0:Q(this,A,arguments.length>1?arguments[1]:void 0)}})},9506:(A,I,g)=>{g(390)({target:"Array",stat:!0},{isArray:g(1054)})},2228:(A,I,g)=>{"use strict";var B=g(3861),Q=g(7710),C=g(9418),E=g(5875),i=g(8277),o="Array Iterator",t=E.set,a=E.getterFor(o);A.exports=i(Array,"Array",(function(A,I){t(this,{type:o,target:B(A),index:0,kind:I})}),(function(){var A=a(this),I=A.target,g=A.kind,B=A.index++;return!I||B>=I.length?(A.target=void 0,{value:void 0,done:!0}):"keys"==g?{value:B,done:!1}:"values"==g?{value:I[B],done:!1}:{value:[B,I[B]],done:!1}}),"values"),C.Arguments=C.Array,Q("keys"),Q("values"),Q("entries")},2478:(A,I,g)=>{"use strict";var B=g(390),Q=g(4206).map;B({target:"Array",proto:!0,forced:!g(2143)("map")},{map:function(A){return Q(this,A,arguments.length>1?arguments[1]:void 0)}})},5313:(A,I,g)=>{"use strict";var B=g(390),Q=g(3359),C=g(1054),E=g(3055),i=g(3746),o=g(3861),t=g(409),a=g(5712),D=g(2143)("slice"),s=a("species"),r=[].slice,e=Math.max;B({target:"Array",proto:!0,forced:!D},{slice:function(A,I){var g,B,a,D=o(this),w=i(D.length),n=E(A,w),c=E(void 0===I?w:I,w);if(C(D)&&("function"!=typeof(g=D.constructor)||g!==Array&&!C(g.prototype)?Q(g)&&null===(g=g[s])&&(g=void 0):g=void 0,g===Array||void 0===g))return r.call(D,n,c);for(B=new(void 0===g?Array:g)(e(c-n,0)),a=0;n<c;n++,a++)n in D&&t(B,a,D[n]);return B.length=a,B}})},4596:(A,I,g)=>{"use strict";var B=g(390),Q=g(3055),C=g(1470),E=g(3746),i=g(2058),o=g(8136),t=g(409),a=g(2143)("splice"),D=Math.max,s=Math.min,r=9007199254740991,e="Maximum allowed length exceeded";B({target:"Array",proto:!0,forced:!a},{splice:function(A,I){var g,B,a,w,n,c,h=i(this),y=E(h.length),G=Q(A,y),F=arguments.length;if(0===F?g=B=0:1===F?(g=0,B=y-G):(g=F-2,B=s(D(C(I),0),y-G)),y+g-B>r)throw TypeError(e);for(a=o(h,B),w=0;w<B;w++)(n=G+w)in h&&t(a,w,h[n]);if(a.length=B,g<B){for(w=G;w<y-B;w++)c=w+g,(n=w+B)in h?h[c]=h[n]:delete h[c];for(w=y;w>y-B+g;w--)delete h[w-1]}else if(g>B)for(w=y-B;w>G;w--)c=w+g-1,(n=w+B-1)in h?h[c]=h[n]:delete h[c];for(w=0;w<g;w++)h[w+G]=arguments[w+2];return h.length=y-B+g,a}})},3596:(A,I,g)=>{var B=g(2868);g(6738)(B.JSON,"JSON",!0)},1227:()=>{},8524:(A,I,g)=>{var B=g(390),Q=g(3210);B({target:"Object",stat:!0,forced:Object.assign!==Q},{assign:Q})},6764:(A,I,g)=>{var B=g(390),Q=g(7001);B({target:"Object",stat:!0,forced:!Q,sham:!Q},{defineProperty:g(7550).f})},9398:(A,I,g)=>{var B=g(390),Q=g(3895).entries;B({target:"Object",stat:!0},{entries:function(A){return Q(A)}})},554:(A,I,g)=>{var B=g(390),Q=g(6530),C=g(3861),E=g(5904).f,i=g(7001),o=Q((function(){E(1)}));B({target:"Object",stat:!0,forced:!i||o,sham:!i},{getOwnPropertyDescriptor:function(A,I){return E(C(A),I)}})},4267:(A,I,g)=>{var B=g(390),Q=g(7001),C=g(5340),E=g(3861),i=g(5904),o=g(409);B({target:"Object",stat:!0,sham:!Q},{getOwnPropertyDescriptors:function(A){for(var I,g,B=E(A),Q=i.f,t=C(B),a={},D=0;t.length>D;)void 0!==(g=Q(B,I=t[D++]))&&o(a,I,g);return a}})},8390:(A,I,g)=>{var B=g(390),Q=g(2058),C=g(461);B({target:"Object",stat:!0,forced:g(6530)((function(){C(1)}))},{keys:function(A){return C(Q(A))}})},2575:()=>{},1171:(A,I,g)=>{var B=g(390),Q=g(3895).values;B({target:"Object",stat:!0},{values:function(A){return Q(A)}})},4465:(A,I,g)=>{"use strict";var B=g(390),Q=g(9077),C=g(4130),E=g(4618),i=g(3906);B({target:"Promise",stat:!0},{allSettled:function(A){var I=this,g=C.f(I),B=g.resolve,o=g.reject,t=E((function(){var g=Q(I.resolve),C=[],E=0,o=1;i(A,(function(A){var Q=E++,i=!1;C.push(void 0),o++,g.call(I,A).then((function(A){i||(i=!0,C[Q]={status:"fulfilled",value:A},--o||B(C))}),(function(A){i||(i=!0,C[Q]={status:"rejected",reason:A},--o||B(C))}))})),--o||B(C)}));return t.error&&o(t.value),g.promise}})},8359:(A,I,g)=>{"use strict";var B=g(390),Q=g(9077),C=g(8104),E=g(4130),i=g(4618),o=g(3906),t="No one promise resolved";B({target:"Promise",stat:!0},{any:function(A){var I=this,g=E.f(I),B=g.resolve,a=g.reject,D=i((function(){var g=Q(I.resolve),E=[],i=0,D=1,s=!1;o(A,(function(A){var Q=i++,o=!1;E.push(void 0),D++,g.call(I,A).then((function(A){o||s||(s=!0,B(A))}),(function(A){o||s||(o=!0,E[Q]=A,--D||a(new(C("AggregateError"))(E,t)))}))})),--D||a(new(C("AggregateError"))(E,t))}));return D.error&&a(D.value),g.promise}})},5203:(A,I,g)=>{"use strict";var B=g(390),Q=g(8367),C=g(3104),E=g(6530),i=g(8104),o=g(5462),t=g(4567),a=g(9791);if(B({target:"Promise",proto:!0,real:!0,forced:!!C&&E((function(){C.prototype.finally.call({then:function(){}},(function(){}))}))},{finally:function(A){var I=o(this,i("Promise")),g="function"==typeof A;return this.then(g?function(g){return t(I,A()).then((function(){return g}))}:A,g?function(g){return t(I,A()).then((function(){throw g}))}:A)}}),!Q&&"function"==typeof C){var D=i("Promise").prototype.finally;C.prototype.finally!==D&&a(C.prototype,"finally",D,{unsafe:!0})}},3658:(A,I,g)=>{"use strict";var B,Q,C,E,i=g(390),o=g(8367),t=g(2868),a=g(8104),D=g(3104),s=g(9791),r=g(9248),e=g(5255),w=g(6738),n=g(2655),c=g(3359),h=g(9077),y=g(8792),G=g(1494),F=g(3906),N=g(8908),R=g(5462),S=g(6569).set,k=g(8054),U=g(4567),J=g(8471),M=g(4130),H=g(4618),L=g(5875),Y=g(1011),l=g(5712),d=g(6610),K=g(6521),f=g(8233),u=l("species"),p="Promise",b=L.get,q=L.set,m=L.getterFor(p),x=D&&D.prototype,W=D,v=x,Z=t.TypeError,T=t.document,P=t.process,X=M.f,V=X,O=!!(T&&T.createEvent&&t.dispatchEvent),j="function"==typeof PromiseRejectionEvent,z="unhandledrejection",_=!1,$=Y(p,(function(){var A=G(W),I=A!==String(W);if(!I&&66===f)return!0;if(o&&!v.finally)return!0;if(f>=51&&/native code/.test(A))return!1;var g=new W((function(A){A(1)})),B=function(A){A((function(){}),(function(){}))};return(g.constructor={})[u]=B,!(_=g.then((function(){}))instanceof B)||!I&&d&&!j})),AA=$||!N((function(A){W.all(A).catch((function(){}))})),IA=function(A){var I;return!(!c(A)||"function"!=typeof(I=A.then))&&I},gA=function(A,I){if(!A.notified){A.notified=!0;var g=A.reactions;k((function(){for(var B=A.value,Q=1==A.state,C=0;g.length>C;){var E,i,o,t=g[C++],a=Q?t.ok:t.fail,D=t.resolve,s=t.reject,r=t.domain;try{a?(Q||(2===A.rejection&&EA(A),A.rejection=1),!0===a?E=B:(r&&r.enter(),E=a(B),r&&(r.exit(),o=!0)),E===t.promise?s(Z("Promise-chain cycle")):(i=IA(E))?i.call(E,D,s):D(E)):s(B)}catch(A){r&&!o&&r.exit(),s(A)}}A.reactions=[],A.notified=!1,I&&!A.rejection&&QA(A)}))}},BA=function(A,I,g){var B,Q;O?((B=T.createEvent("Event")).promise=I,B.reason=g,B.initEvent(A,!1,!0),t.dispatchEvent(B)):B={promise:I,reason:g},!j&&(Q=t["on"+A])?Q(B):A===z&&J("Unhandled promise rejection",g)},QA=function(A){S.call(t,(function(){var I,g=A.facade,B=A.value;if(CA(A)&&(I=H((function(){K?P.emit("unhandledRejection",B,g):BA(z,g,B)})),A.rejection=K||CA(A)?2:1,I.error))throw I.value}))},CA=function(A){return 1!==A.rejection&&!A.parent},EA=function(A){S.call(t,(function(){var I=A.facade;K?P.emit("rejectionHandled",I):BA("rejectionhandled",I,A.value)}))},iA=function(A,I,g){return function(B){A(I,B,g)}},oA=function(A,I,g){A.done||(A.done=!0,g&&(A=g),A.value=I,A.state=2,gA(A,!0))},tA=function(A,I,g){if(!A.done){A.done=!0,g&&(A=g);try{if(A.facade===I)throw Z("Promise can't be resolved itself");var B=IA(I);B?k((function(){var g={done:!1};try{B.call(I,iA(tA,g,A),iA(oA,g,A))}catch(I){oA(g,I,A)}})):(A.value=I,A.state=1,gA(A,!1))}catch(I){oA({done:!1},I,A)}}};if($&&(v=(W=function(A){y(this,W,p),h(A),B.call(this);var I=b(this);try{A(iA(tA,I),iA(oA,I))}catch(A){oA(I,A)}}).prototype,(B=function(A){q(this,{type:p,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=r(v,{then:function(A,I){var g=m(this),B=X(R(this,W));return B.ok="function"!=typeof A||A,B.fail="function"==typeof I&&I,B.domain=K?P.domain:void 0,g.parent=!0,g.reactions.push(B),0!=g.state&&gA(g,!1),B.promise},catch:function(A){return this.then(void 0,A)}}),Q=function(){var A=new B,I=b(A);this.promise=A,this.resolve=iA(tA,I),this.reject=iA(oA,I)},M.f=X=function(A){return A===W||A===C?new Q(A):V(A)},!o&&"function"==typeof D&&x!==Object.prototype)){E=x.then,_||(s(x,"then",(function(A,I){var g=this;return new W((function(A,I){E.call(g,A,I)})).then(A,I)}),{unsafe:!0}),s(x,"catch",v.catch,{unsafe:!0}));try{delete x.constructor}catch(A){}e&&e(x,v)}i({global:!0,wrap:!0,forced:$},{Promise:W}),w(W,p,!1,!0),n(p),C=a(p),i({target:p,stat:!0,forced:$},{reject:function(A){var I=X(this);return I.reject.call(void 0,A),I.promise}}),i({target:p,stat:!0,forced:o||$},{resolve:function(A){return U(o&&this===C?W:this,A)}}),i({target:p,stat:!0,forced:AA},{all:function(A){var I=this,g=X(I),B=g.resolve,Q=g.reject,C=H((function(){var g=h(I.resolve),C=[],E=0,i=1;F(A,(function(A){var o=E++,t=!1;C.push(void 0),i++,g.call(I,A).then((function(A){t||(t=!0,C[o]=A,--i||B(C))}),Q)})),--i||B(C)}));return C.error&&Q(C.value),g.promise},race:function(A){var I=this,g=X(I),B=g.reject,Q=H((function(){var Q=h(I.resolve);F(A,(function(A){Q.call(I,A).then(g.resolve,B)}))}));return Q.error&&B(Q.value),g.promise}})},6268:()=>{},8714:()=>{},688:(A,I,g)=>{"use strict";var B=g(390),Q=g(9611),C=g(3604),E=g(5264);B({target:"String",proto:!0,forced:!g(1722)("includes")},{includes:function(A){return!!~E(C(this)).indexOf(E(Q(A)),arguments.length>1?arguments[1]:void 0)}})},8109:(A,I,g)=>{"use strict";var B=g(1420).charAt,Q=g(5264),C=g(5875),E=g(8277),i="String Iterator",o=C.set,t=C.getterFor(i);E(String,"String",(function(A){o(this,{type:i,string:Q(A),index:0})}),(function(){var A,I=t(this),g=I.string,Q=I.index;return Q>=g.length?{value:void 0,done:!0}:(A=B(g,Q),I.index+=A.length,{value:A,done:!1})}))},8217:(A,I,g)=>{"use strict";var B=g(390),Q=g(774).trim;B({target:"String",proto:!0,forced:g(9787)("trim")},{trim:function(){return Q(this)}})},5762:(A,I,g)=>{g(1412)("asyncIterator")},2181:()=>{},8848:(A,I,g)=>{g(1412)("hasInstance")},3719:(A,I,g)=>{g(1412)("isConcatSpreadable")},2362:(A,I,g)=>{g(1412)("iterator")},8318:(A,I,g)=>{"use strict";var B=g(390),Q=g(2868),C=g(8104),E=g(8367),i=g(7001),o=g(3216),t=g(6530),a=g(6690),D=g(1054),s=g(3359),r=g(1149),e=g(1912),w=g(2058),n=g(3861),c=g(5623),h=g(5264),y=g(5595),G=g(2491),F=g(461),N=g(9035),R=g(6159),S=g(3764),k=g(5904),U=g(7550),J=g(1156),M=g(8518),H=g(9791),L=g(6315),Y=g(5039),l=g(7048),d=g(9),K=g(5712),f=g(3379),u=g(1412),p=g(6738),b=g(5875),q=g(4206).forEach,m=Y("hidden"),x="Symbol",W=K("toPrimitive"),v=b.set,Z=b.getterFor(x),T=Object.prototype,P=Q.Symbol,X=C("JSON","stringify"),V=k.f,O=U.f,j=R.f,z=J.f,_=L("symbols"),$=L("op-symbols"),AA=L("string-to-symbol-registry"),IA=L("symbol-to-string-registry"),gA=L("wks"),BA=Q.QObject,QA=!BA||!BA.prototype||!BA.prototype.findChild,CA=i&&t((function(){return 7!=G(O({},"a",{get:function(){return O(this,"a",{value:7}).a}})).a}))?function(A,I,g){var B=V(T,I);B&&delete T[I],O(A,I,g),B&&A!==T&&O(T,I,B)}:O,EA=function(A,I){var g=_[A]=G(P.prototype);return v(g,{type:x,tag:A,description:I}),i||(g.description=I),g},iA=function(A,I,g){A===T&&iA($,I,g),e(A);var B=c(I);return e(g),a(_,B)?(g.enumerable?(a(A,m)&&A[m][B]&&(A[m][B]=!1),g=G(g,{enumerable:y(0,!1)})):(a(A,m)||O(A,m,y(1,{})),A[m][B]=!0),CA(A,B,g)):O(A,B,g)},oA=function(A,I){e(A);var g=n(I),B=F(g).concat(sA(g));return q(B,(function(I){i&&!tA.call(g,I)||iA(A,I,g[I])})),A},tA=function(A){var I=c(A),g=z.call(this,I);return!(this===T&&a(_,I)&&!a($,I))&&(!(g||!a(this,I)||!a(_,I)||a(this,m)&&this[m][I])||g)},aA=function(A,I){var g=n(A),B=c(I);if(g!==T||!a(_,B)||a($,B)){var Q=V(g,B);return!Q||!a(_,B)||a(g,m)&&g[m][B]||(Q.enumerable=!0),Q}},DA=function(A){var I=j(n(A)),g=[];return q(I,(function(A){a(_,A)||a(l,A)||g.push(A)})),g},sA=function(A){var I=A===T,g=j(I?$:n(A)),B=[];return q(g,(function(A){!a(_,A)||I&&!a(T,A)||B.push(_[A])})),B};(o||(H((P=function(){if(this instanceof P)throw TypeError("Symbol is not a constructor");var A=arguments.length&&void 0!==arguments[0]?h(arguments[0]):void 0,I=d(A),g=function(A){this===T&&g.call($,A),a(this,m)&&a(this[m],I)&&(this[m][I]=!1),CA(this,I,y(1,A))};return i&&QA&&CA(T,I,{configurable:!0,set:g}),EA(I,A)}).prototype,"toString",(function(){return Z(this).tag})),H(P,"withoutSetter",(function(A){return EA(d(A),A)})),J.f=tA,U.f=iA,k.f=aA,N.f=R.f=DA,S.f=sA,f.f=function(A){return EA(K(A),A)},i&&(O(P.prototype,"description",{configurable:!0,get:function(){return Z(this).description}}),E||H(T,"propertyIsEnumerable",tA,{unsafe:!0}))),B({global:!0,wrap:!0,forced:!o,sham:!o},{Symbol:P}),q(F(gA),(function(A){u(A)})),B({target:x,stat:!0,forced:!o},{for:function(A){var I=h(A);if(a(AA,I))return AA[I];var g=P(I);return AA[I]=g,IA[g]=I,g},keyFor:function(A){if(!r(A))throw TypeError(A+" is not a symbol");if(a(IA,A))return IA[A]},useSetter:function(){QA=!0},useSimple:function(){QA=!1}}),B({target:"Object",stat:!0,forced:!o,sham:!i},{create:function(A,I){return void 0===I?G(A):oA(G(A),I)},defineProperty:iA,defineProperties:oA,getOwnPropertyDescriptor:aA}),B({target:"Object",stat:!0,forced:!o},{getOwnPropertyNames:DA,getOwnPropertySymbols:sA}),B({target:"Object",stat:!0,forced:t((function(){S.f(1)}))},{getOwnPropertySymbols:function(A){return S.f(w(A))}}),X)&&B({target:"JSON",stat:!0,forced:!o||t((function(){var A=P();return"[null]"!=X([A])||"{}"!=X({a:A})||"{}"!=X(Object(A))}))},{stringify:function(A,I,g){for(var B,Q=[A],C=1;arguments.length>C;)Q.push(arguments[C++]);if(B=I,(s(I)||void 0!==A)&&!r(A))return D(I)||(I=function(A,I){if("function"==typeof B&&(I=B.call(this,A,I)),!r(I))return I}),Q[1]=I,X.apply(null,Q)}});P.prototype[W]||M(P.prototype,W,P.prototype.valueOf),p(P,x),l[m]=!0},888:(A,I,g)=>{g(1412)("matchAll")},346:(A,I,g)=>{g(1412)("match")},909:(A,I,g)=>{g(1412)("replace")},1992:(A,I,g)=>{g(1412)("search")},8512:(A,I,g)=>{g(1412)("species")},6165:(A,I,g)=>{g(1412)("split")},6044:(A,I,g)=>{g(1412)("toPrimitive")},4676:(A,I,g)=>{g(1412)("toStringTag")},263:(A,I,g)=>{g(1412)("unscopables")},1152:(A,I,g)=>{g(6454)},8561:(A,I,g)=>{g(4465)},8302:(A,I,g)=>{g(8359)},5543:(A,I,g)=>{"use strict";var B=g(390),Q=g(4130),C=g(4618);B({target:"Promise",stat:!0},{try:function(A){var I=Q.f(this),g=C(A);return(g.error?I.reject:I.resolve)(g.value),I.promise}})},8812:(A,I,g)=>{g(1412)("asyncDispose")},9085:(A,I,g)=>{g(1412)("dispose")},7384:(A,I,g)=>{g(1412)("matcher")},4719:(A,I,g)=>{g(1412)("metadata")},2994:(A,I,g)=>{g(1412)("observable")},9431:(A,I,g)=>{g(1412)("patternMatch")},4803:(A,I,g)=>{g(1412)("replaceAll")},9702:(A,I,g)=>{g(2228);var B=g(315),Q=g(2868),C=g(7499),E=g(8518),i=g(9418),o=g(5712)("toStringTag");for(var t in B){var a=Q[t],D=a&&a.prototype;D&&C(D)!==o&&E(D,o,t),i[t]=i.Array}},7945:(A,I,g)=>{var B=g(5109);A.exports=B},8010:(A,I,g)=>{var B=g(1316);A.exports=B},7922:(A,I,g)=>{var B=g(3386);g(9702),A.exports=B},9842:(A,I,g)=>{var B=g(7543);A.exports=B},3798:(A,I,g)=>{var B=g(3918);A.exports=B},2149:(A,I,g)=>{var B=g(790);A.exports=B},6970:(A,I,g)=>{var B=g(9109);A.exports=B},5838:(A,I,g)=>{var B=g(4825);A.exports=B},2343:(A,I,g)=>{var B=g(238);A.exports=B},671:(A,I,g)=>{var B=g(1285);A.exports=B},7283:(A,I,g)=>{var B=g(7681);A.exports=B},2882:(A,I,g)=>{var B=g(8949);A.exports=B},8730:(A,I,g)=>{var B=g(2529);A.exports=B},8531:(A,I,g)=>{var B=g(6854);A.exports=B},569:(A,I,g)=>{var B=g(1553);A.exports=B},3751:(A,I,g)=>{var B=g(2744);A.exports=B},1380:(A,I,g)=>{var B=g(6018);A.exports=B},6601:(A,I,g)=>{var B=g(5350);A.exports=B},8783:(A,I,g)=>{var B=g(8116);A.exports=B},3498:(A,I,g)=>{var B=g(3140);A.exports=B},4731:(A,I,g)=>{var B=g(7281);g(9702),A.exports=B},3355:(A,I,g)=>{var B=g(1442);g(9702),A.exports=B},6888:(A,I,g)=>{var B=g(1190);g(9702),A.exports=B},5613:(A,I,g)=>{"use strict";const B=g(1863),Q=g(7609),C=g(9141),E=g(5710),i=g(8894),o=g(8235),t=Object.prototype.toString,{Z_NO_FLUSH:a,Z_FINISH:D,Z_OK:s,Z_STREAM_END:r,Z_NEED_DICT:e,Z_STREAM_ERROR:w,Z_DATA_ERROR:n,Z_MEM_ERROR:c}=g(2436);function h(A){this.options=Q.assign({chunkSize:65536,windowBits:15,to:""},A||{});const I=this.options;I.raw&&I.windowBits>=0&&I.windowBits<16&&(I.windowBits=-I.windowBits,0===I.windowBits&&(I.windowBits=-15)),!(I.windowBits>=0&&I.windowBits<16)||A&&A.windowBits||(I.windowBits+=32),I.windowBits>15&&I.windowBits<48&&0==(15&I.windowBits)&&(I.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new i,this.strm.avail_out=0;let g=B.inflateInit2(this.strm,I.windowBits);if(g!==s)throw new Error(E[g]);if(this.header=new o,B.inflateGetHeader(this.strm,this.header),I.dictionary&&("string"==typeof I.dictionary?I.dictionary=C.string2buf(I.dictionary):"[object ArrayBuffer]"===t.call(I.dictionary)&&(I.dictionary=new Uint8Array(I.dictionary)),I.raw&&(g=B.inflateSetDictionary(this.strm,I.dictionary),g!==s)))throw new Error(E[g])}function y(A,I){const g=new h(I);if(g.push(A),g.err)throw g.msg||E[g.err];return g.result}h.prototype.push=function(A,I){const g=this.strm,Q=this.options.chunkSize,E=this.options.dictionary;let i,o,h;if(this.ended)return!1;for(o=I===~~I?I:!0===I?D:a,"[object ArrayBuffer]"===t.call(A)?g.input=new Uint8Array(A):g.input=A,g.next_in=0,g.avail_in=g.input.length;;){for(0===g.avail_out&&(g.output=new Uint8Array(Q),g.next_out=0,g.avail_out=Q),i=B.inflate(g,o),i===e&&E&&(i=B.inflateSetDictionary(g,E),i===s?i=B.inflate(g,o):i===n&&(i=e));g.avail_in>0&&i===r&&g.state.wrap>0&&0!==A[g.next_in];)B.inflateReset(g),i=B.inflate(g,o);switch(i){case w:case n:case e:case c:return this.onEnd(i),this.ended=!0,!1}if(h=g.avail_out,g.next_out&&(0===g.avail_out||i===r))if("string"===this.options.to){let A=C.utf8border(g.output,g.next_out),I=g.next_out-A,B=C.buf2string(g.output,A);g.next_out=I,g.avail_out=Q-I,I&&g.output.set(g.output.subarray(A,A+I),0),this.onData(B)}else this.onData(g.output.length===g.next_out?g.output:g.output.subarray(0,g.next_out));if(i!==s||0!==h){if(i===r)return i=B.inflateEnd(this.strm),this.onEnd(i),this.ended=!0,!0;if(0===g.avail_in)break}}return!0},h.prototype.onData=function(A){this.chunks.push(A)},h.prototype.onEnd=function(A){A===s&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=Q.flattenChunks(this.chunks)),this.chunks=[],this.err=A,this.msg=this.strm.msg},A.exports.Hq=function(A,I){return(I=I||{}).raw=!0,y(A,I)},g(2436)},7609:A=>{"use strict";const I=(A,I)=>Object.prototype.hasOwnProperty.call(A,I);A.exports.assign=function(A){const g=Array.prototype.slice.call(arguments,1);for(;g.length;){const B=g.shift();if(B){if("object"!=typeof B)throw new TypeError(B+"must be non-object");for(const g in B)I(B,g)&&(A[g]=B[g])}}return A},A.exports.flattenChunks=A=>{let I=0;for(let g=0,B=A.length;g<B;g++)I+=A[g].length;const g=new Uint8Array(I);for(let I=0,B=0,Q=A.length;I<Q;I++){let Q=A[I];g.set(Q,B),B+=Q.length}return g}},9141:A=>{"use strict";let I=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(A){I=!1}const g=new Uint8Array(256);for(let A=0;A<256;A++)g[A]=A>=252?6:A>=248?5:A>=240?4:A>=224?3:A>=192?2:1;g[254]=g[254]=1,A.exports.string2buf=A=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(A);let I,g,B,Q,C,E=A.length,i=0;for(Q=0;Q<E;Q++)g=A.charCodeAt(Q),55296==(64512&g)&&Q+1<E&&(B=A.charCodeAt(Q+1),56320==(64512&B)&&(g=65536+(g-55296<<10)+(B-56320),Q++)),i+=g<128?1:g<2048?2:g<65536?3:4;for(I=new Uint8Array(i),C=0,Q=0;C<i;Q++)g=A.charCodeAt(Q),55296==(64512&g)&&Q+1<E&&(B=A.charCodeAt(Q+1),56320==(64512&B)&&(g=65536+(g-55296<<10)+(B-56320),Q++)),g<128?I[C++]=g:g<2048?(I[C++]=192|g>>>6,I[C++]=128|63&g):g<65536?(I[C++]=224|g>>>12,I[C++]=128|g>>>6&63,I[C++]=128|63&g):(I[C++]=240|g>>>18,I[C++]=128|g>>>12&63,I[C++]=128|g>>>6&63,I[C++]=128|63&g);return I};A.exports.buf2string=(A,B)=>{const Q=B||A.length;if("function"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(A.subarray(0,B));let C,E;const i=new Array(2*Q);for(E=0,C=0;C<Q;){let I=A[C++];if(I<128){i[E++]=I;continue}let B=g[I];if(B>4)i[E++]=65533,C+=B-1;else{for(I&=2===B?31:3===B?15:7;B>1&&C<Q;)I=I<<6|63&A[C++],B--;B>1?i[E++]=65533:I<65536?i[E++]=I:(I-=65536,i[E++]=55296|I>>10&1023,i[E++]=56320|1023&I)}}return((A,g)=>{if(g<65534&&A.subarray&&I)return String.fromCharCode.apply(null,A.length===g?A:A.subarray(0,g));let B="";for(let I=0;I<g;I++)B+=String.fromCharCode(A[I]);return B})(i,E)},A.exports.utf8border=(A,I)=>{(I=I||A.length)>A.length&&(I=A.length);let B=I-1;for(;B>=0&&128==(192&A[B]);)B--;return B<0||0===B?I:B+g[A[B]]>I?B:I}},5530:A=>{"use strict";A.exports=(A,I,g,B)=>{let Q=65535&A|0,C=A>>>16&65535|0,E=0;for(;0!==g;){E=g>2e3?2e3:g,g-=E;do{Q=Q+I[B++]|0,C=C+Q|0}while(--E);Q%=65521,C%=65521}return Q|C<<16|0}},2436:A=>{"use strict";A.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},1383:A=>{"use strict";const I=new Uint32Array((()=>{let A,I=[];for(var g=0;g<256;g++){A=g;for(var B=0;B<8;B++)A=1&A?3988292384^A>>>1:A>>>1;I[g]=A}return I})());A.exports=(A,g,B,Q)=>{const C=I,E=Q+B;A^=-1;for(let I=Q;I<E;I++)A=A>>>8^C[255&(A^g[I])];return-1^A}},8235:A=>{"use strict";A.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},8121:A=>{"use strict";A.exports=function(A,I){let g,B,Q,C,E,i,o,t,a,D,s,r,e,w,n,c,h,y,G,F,N,R,S,k;const U=A.state;g=A.next_in,S=A.input,B=g+(A.avail_in-5),Q=A.next_out,k=A.output,C=Q-(I-A.avail_out),E=Q+(A.avail_out-257),i=U.dmax,o=U.wsize,t=U.whave,a=U.wnext,D=U.window,s=U.hold,r=U.bits,e=U.lencode,w=U.distcode,n=(1<<U.lenbits)-1,c=(1<<U.distbits)-1;A:do{r<15&&(s+=S[g++]<<r,r+=8,s+=S[g++]<<r,r+=8),h=e[s&n];I:for(;;){if(y=h>>>24,s>>>=y,r-=y,y=h>>>16&255,0===y)k[Q++]=65535&h;else{if(!(16&y)){if(0==(64&y)){h=e[(65535&h)+(s&(1<<y)-1)];continue I}if(32&y){U.mode=12;break A}A.msg="invalid literal/length code",U.mode=30;break A}G=65535&h,y&=15,y&&(r<y&&(s+=S[g++]<<r,r+=8),G+=s&(1<<y)-1,s>>>=y,r-=y),r<15&&(s+=S[g++]<<r,r+=8,s+=S[g++]<<r,r+=8),h=w[s&c];g:for(;;){if(y=h>>>24,s>>>=y,r-=y,y=h>>>16&255,!(16&y)){if(0==(64&y)){h=w[(65535&h)+(s&(1<<y)-1)];continue g}A.msg="invalid distance code",U.mode=30;break A}if(F=65535&h,y&=15,r<y&&(s+=S[g++]<<r,r+=8,r<y&&(s+=S[g++]<<r,r+=8)),F+=s&(1<<y)-1,F>i){A.msg="invalid distance too far back",U.mode=30;break A}if(s>>>=y,r-=y,y=Q-C,F>y){if(y=F-y,y>t&&U.sane){A.msg="invalid distance too far back",U.mode=30;break A}if(N=0,R=D,0===a){if(N+=o-y,y<G){G-=y;do{k[Q++]=D[N++]}while(--y);N=Q-F,R=k}}else if(a<y){if(N+=o+a-y,y-=a,y<G){G-=y;do{k[Q++]=D[N++]}while(--y);if(N=0,a<G){y=a,G-=y;do{k[Q++]=D[N++]}while(--y);N=Q-F,R=k}}}else if(N+=a-y,y<G){G-=y;do{k[Q++]=D[N++]}while(--y);N=Q-F,R=k}for(;G>2;)k[Q++]=R[N++],k[Q++]=R[N++],k[Q++]=R[N++],G-=3;G&&(k[Q++]=R[N++],G>1&&(k[Q++]=R[N++]))}else{N=Q-F;do{k[Q++]=k[N++],k[Q++]=k[N++],k[Q++]=k[N++],G-=3}while(G>2);G&&(k[Q++]=k[N++],G>1&&(k[Q++]=k[N++]))}break}}break}}while(g<B&&Q<E);G=r>>3,g-=G,r-=G<<3,s&=(1<<r)-1,A.next_in=g,A.next_out=Q,A.avail_in=g<B?B-g+5:5-(g-B),A.avail_out=Q<E?E-Q+257:257-(Q-E),U.hold=s,U.bits=r}},1863:(A,I,g)=>{"use strict";const B=g(5530),Q=g(1383),C=g(8121),E=g(7371),{Z_FINISH:i,Z_BLOCK:o,Z_TREES:t,Z_OK:a,Z_STREAM_END:D,Z_NEED_DICT:s,Z_STREAM_ERROR:r,Z_DATA_ERROR:e,Z_MEM_ERROR:w,Z_BUF_ERROR:n,Z_DEFLATED:c}=g(2436),h=12,y=30,G=A=>(A>>>24&255)+(A>>>8&65280)+((65280&A)<<8)+((255&A)<<24);function F(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const N=A=>{if(!A||!A.state)return r;const I=A.state;return A.total_in=A.total_out=I.total=0,A.msg="",I.wrap&&(A.adler=1&I.wrap),I.mode=1,I.last=0,I.havedict=0,I.dmax=32768,I.head=null,I.hold=0,I.bits=0,I.lencode=I.lendyn=new Int32Array(852),I.distcode=I.distdyn=new Int32Array(592),I.sane=1,I.back=-1,a},R=A=>{if(!A||!A.state)return r;const I=A.state;return I.wsize=0,I.whave=0,I.wnext=0,N(A)},S=(A,I)=>{let g;if(!A||!A.state)return r;const B=A.state;return I<0?(g=0,I=-I):(g=1+(I>>4),I<48&&(I&=15)),I&&(I<8||I>15)?r:(null!==B.window&&B.wbits!==I&&(B.window=null),B.wrap=g,B.wbits=I,R(A))},k=(A,I)=>{if(!A)return r;const g=new F;A.state=g,g.window=null;const B=S(A,I);return B!==a&&(A.state=null),B};let U,J,M=!0;const H=A=>{if(M){U=new Int32Array(512),J=new Int32Array(32);let I=0;for(;I<144;)A.lens[I++]=8;for(;I<256;)A.lens[I++]=9;for(;I<280;)A.lens[I++]=7;for(;I<288;)A.lens[I++]=8;for(E(1,A.lens,0,288,U,0,A.work,{bits:9}),I=0;I<32;)A.lens[I++]=5;E(2,A.lens,0,32,J,0,A.work,{bits:5}),M=!1}A.lencode=U,A.lenbits=9,A.distcode=J,A.distbits=5},L=(A,I,g,B)=>{let Q;const C=A.state;return null===C.window&&(C.wsize=1<<C.wbits,C.wnext=0,C.whave=0,C.window=new Uint8Array(C.wsize)),B>=C.wsize?(C.window.set(I.subarray(g-C.wsize,g),0),C.wnext=0,C.whave=C.wsize):(Q=C.wsize-C.wnext,Q>B&&(Q=B),C.window.set(I.subarray(g-B,g-B+Q),C.wnext),(B-=Q)?(C.window.set(I.subarray(g-B,g),0),C.wnext=B,C.whave=C.wsize):(C.wnext+=Q,C.wnext===C.wsize&&(C.wnext=0),C.whave<C.wsize&&(C.whave+=Q))),0};A.exports.inflateReset=R,A.exports.inflateReset2=S,A.exports.inflateResetKeep=N,A.exports.inflateInit=A=>k(A,15),A.exports.inflateInit2=k,A.exports.inflate=(A,I)=>{let g,F,N,R,S,k,U,J,M,Y,l,d,K,f,u,p,b,q,m,x,W,v,Z=0;const T=new Uint8Array(4);let P,X;const V=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(!A||!A.state||!A.output||!A.input&&0!==A.avail_in)return r;g=A.state,g.mode===h&&(g.mode=13),S=A.next_out,N=A.output,U=A.avail_out,R=A.next_in,F=A.input,k=A.avail_in,J=g.hold,M=g.bits,Y=k,l=U,v=a;A:for(;;)switch(g.mode){case 1:if(0===g.wrap){g.mode=13;break}for(;M<16;){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}if(2&g.wrap&&35615===J){g.check=0,T[0]=255&J,T[1]=J>>>8&255,g.check=Q(g.check,T,2,0),J=0,M=0,g.mode=2;break}if(g.flags=0,g.head&&(g.head.done=!1),!(1&g.wrap)||(((255&J)<<8)+(J>>8))%31){A.msg="incorrect header check",g.mode=y;break}if((15&J)!==c){A.msg="unknown compression method",g.mode=y;break}if(J>>>=4,M-=4,W=8+(15&J),0===g.wbits)g.wbits=W;else if(W>g.wbits){A.msg="invalid window size",g.mode=y;break}g.dmax=1<<g.wbits,A.adler=g.check=1,g.mode=512&J?10:h,J=0,M=0;break;case 2:for(;M<16;){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}if(g.flags=J,(255&g.flags)!==c){A.msg="unknown compression method",g.mode=y;break}if(57344&g.flags){A.msg="unknown header flags set",g.mode=y;break}g.head&&(g.head.text=J>>8&1),512&g.flags&&(T[0]=255&J,T[1]=J>>>8&255,g.check=Q(g.check,T,2,0)),J=0,M=0,g.mode=3;case 3:for(;M<32;){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}g.head&&(g.head.time=J),512&g.flags&&(T[0]=255&J,T[1]=J>>>8&255,T[2]=J>>>16&255,T[3]=J>>>24&255,g.check=Q(g.check,T,4,0)),J=0,M=0,g.mode=4;case 4:for(;M<16;){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}g.head&&(g.head.xflags=255&J,g.head.os=J>>8),512&g.flags&&(T[0]=255&J,T[1]=J>>>8&255,g.check=Q(g.check,T,2,0)),J=0,M=0,g.mode=5;case 5:if(1024&g.flags){for(;M<16;){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}g.length=J,g.head&&(g.head.extra_len=J),512&g.flags&&(T[0]=255&J,T[1]=J>>>8&255,g.check=Q(g.check,T,2,0)),J=0,M=0}else g.head&&(g.head.extra=null);g.mode=6;case 6:if(1024&g.flags&&(d=g.length,d>k&&(d=k),d&&(g.head&&(W=g.head.extra_len-g.length,g.head.extra||(g.head.extra=new Uint8Array(g.head.extra_len)),g.head.extra.set(F.subarray(R,R+d),W)),512&g.flags&&(g.check=Q(g.check,F,d,R)),k-=d,R+=d,g.length-=d),g.length))break A;g.length=0,g.mode=7;case 7:if(2048&g.flags){if(0===k)break A;d=0;do{W=F[R+d++],g.head&&W&&g.length<65536&&(g.head.name+=String.fromCharCode(W))}while(W&&d<k);if(512&g.flags&&(g.check=Q(g.check,F,d,R)),k-=d,R+=d,W)break A}else g.head&&(g.head.name=null);g.length=0,g.mode=8;case 8:if(4096&g.flags){if(0===k)break A;d=0;do{W=F[R+d++],g.head&&W&&g.length<65536&&(g.head.comment+=String.fromCharCode(W))}while(W&&d<k);if(512&g.flags&&(g.check=Q(g.check,F,d,R)),k-=d,R+=d,W)break A}else g.head&&(g.head.comment=null);g.mode=9;case 9:if(512&g.flags){for(;M<16;){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}if(J!==(65535&g.check)){A.msg="header crc mismatch",g.mode=y;break}J=0,M=0}g.head&&(g.head.hcrc=g.flags>>9&1,g.head.done=!0),A.adler=g.check=0,g.mode=h;break;case 10:for(;M<32;){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}A.adler=g.check=G(J),J=0,M=0,g.mode=11;case 11:if(0===g.havedict)return A.next_out=S,A.avail_out=U,A.next_in=R,A.avail_in=k,g.hold=J,g.bits=M,s;A.adler=g.check=1,g.mode=h;case h:if(I===o||I===t)break A;case 13:if(g.last){J>>>=7&M,M-=7&M,g.mode=27;break}for(;M<3;){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}switch(g.last=1&J,J>>>=1,M-=1,3&J){case 0:g.mode=14;break;case 1:if(H(g),g.mode=20,I===t){J>>>=2,M-=2;break A}break;case 2:g.mode=17;break;case 3:A.msg="invalid block type",g.mode=y}J>>>=2,M-=2;break;case 14:for(J>>>=7&M,M-=7&M;M<32;){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}if((65535&J)!=(J>>>16^65535)){A.msg="invalid stored block lengths",g.mode=y;break}if(g.length=65535&J,J=0,M=0,g.mode=15,I===t)break A;case 15:g.mode=16;case 16:if(d=g.length,d){if(d>k&&(d=k),d>U&&(d=U),0===d)break A;N.set(F.subarray(R,R+d),S),k-=d,R+=d,U-=d,S+=d,g.length-=d;break}g.mode=h;break;case 17:for(;M<14;){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}if(g.nlen=257+(31&J),J>>>=5,M-=5,g.ndist=1+(31&J),J>>>=5,M-=5,g.ncode=4+(15&J),J>>>=4,M-=4,g.nlen>286||g.ndist>30){A.msg="too many length or distance symbols",g.mode=y;break}g.have=0,g.mode=18;case 18:for(;g.have<g.ncode;){for(;M<3;){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}g.lens[V[g.have++]]=7&J,J>>>=3,M-=3}for(;g.have<19;)g.lens[V[g.have++]]=0;if(g.lencode=g.lendyn,g.lenbits=7,P={bits:g.lenbits},v=E(0,g.lens,0,19,g.lencode,0,g.work,P),g.lenbits=P.bits,v){A.msg="invalid code lengths set",g.mode=y;break}g.have=0,g.mode=19;case 19:for(;g.have<g.nlen+g.ndist;){for(;Z=g.lencode[J&(1<<g.lenbits)-1],u=Z>>>24,p=Z>>>16&255,b=65535&Z,!(u<=M);){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}if(b<16)J>>>=u,M-=u,g.lens[g.have++]=b;else{if(16===b){for(X=u+2;M<X;){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}if(J>>>=u,M-=u,0===g.have){A.msg="invalid bit length repeat",g.mode=y;break}W=g.lens[g.have-1],d=3+(3&J),J>>>=2,M-=2}else if(17===b){for(X=u+3;M<X;){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}J>>>=u,M-=u,W=0,d=3+(7&J),J>>>=3,M-=3}else{for(X=u+7;M<X;){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}J>>>=u,M-=u,W=0,d=11+(127&J),J>>>=7,M-=7}if(g.have+d>g.nlen+g.ndist){A.msg="invalid bit length repeat",g.mode=y;break}for(;d--;)g.lens[g.have++]=W}}if(g.mode===y)break;if(0===g.lens[256]){A.msg="invalid code -- missing end-of-block",g.mode=y;break}if(g.lenbits=9,P={bits:g.lenbits},v=E(1,g.lens,0,g.nlen,g.lencode,0,g.work,P),g.lenbits=P.bits,v){A.msg="invalid literal/lengths set",g.mode=y;break}if(g.distbits=6,g.distcode=g.distdyn,P={bits:g.distbits},v=E(2,g.lens,g.nlen,g.ndist,g.distcode,0,g.work,P),g.distbits=P.bits,v){A.msg="invalid distances set",g.mode=y;break}if(g.mode=20,I===t)break A;case 20:g.mode=21;case 21:if(k>=6&&U>=258){A.next_out=S,A.avail_out=U,A.next_in=R,A.avail_in=k,g.hold=J,g.bits=M,C(A,l),S=A.next_out,N=A.output,U=A.avail_out,R=A.next_in,F=A.input,k=A.avail_in,J=g.hold,M=g.bits,g.mode===h&&(g.back=-1);break}for(g.back=0;Z=g.lencode[J&(1<<g.lenbits)-1],u=Z>>>24,p=Z>>>16&255,b=65535&Z,!(u<=M);){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}if(p&&0==(240&p)){for(q=u,m=p,x=b;Z=g.lencode[x+((J&(1<<q+m)-1)>>q)],u=Z>>>24,p=Z>>>16&255,b=65535&Z,!(q+u<=M);){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}J>>>=q,M-=q,g.back+=q}if(J>>>=u,M-=u,g.back+=u,g.length=b,0===p){g.mode=26;break}if(32&p){g.back=-1,g.mode=h;break}if(64&p){A.msg="invalid literal/length code",g.mode=y;break}g.extra=15&p,g.mode=22;case 22:if(g.extra){for(X=g.extra;M<X;){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}g.length+=J&(1<<g.extra)-1,J>>>=g.extra,M-=g.extra,g.back+=g.extra}g.was=g.length,g.mode=23;case 23:for(;Z=g.distcode[J&(1<<g.distbits)-1],u=Z>>>24,p=Z>>>16&255,b=65535&Z,!(u<=M);){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}if(0==(240&p)){for(q=u,m=p,x=b;Z=g.distcode[x+((J&(1<<q+m)-1)>>q)],u=Z>>>24,p=Z>>>16&255,b=65535&Z,!(q+u<=M);){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}J>>>=q,M-=q,g.back+=q}if(J>>>=u,M-=u,g.back+=u,64&p){A.msg="invalid distance code",g.mode=y;break}g.offset=b,g.extra=15&p,g.mode=24;case 24:if(g.extra){for(X=g.extra;M<X;){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}g.offset+=J&(1<<g.extra)-1,J>>>=g.extra,M-=g.extra,g.back+=g.extra}if(g.offset>g.dmax){A.msg="invalid distance too far back",g.mode=y;break}g.mode=25;case 25:if(0===U)break A;if(d=l-U,g.offset>d){if(d=g.offset-d,d>g.whave&&g.sane){A.msg="invalid distance too far back",g.mode=y;break}d>g.wnext?(d-=g.wnext,K=g.wsize-d):K=g.wnext-d,d>g.length&&(d=g.length),f=g.window}else f=N,K=S-g.offset,d=g.length;d>U&&(d=U),U-=d,g.length-=d;do{N[S++]=f[K++]}while(--d);0===g.length&&(g.mode=21);break;case 26:if(0===U)break A;N[S++]=g.length,U--,g.mode=21;break;case 27:if(g.wrap){for(;M<32;){if(0===k)break A;k--,J|=F[R++]<<M,M+=8}if(l-=U,A.total_out+=l,g.total+=l,l&&(A.adler=g.check=g.flags?Q(g.check,N,l,S-l):B(g.check,N,l,S-l)),l=U,(g.flags?J:G(J))!==g.check){A.msg="incorrect data check",g.mode=y;break}J=0,M=0}g.mode=28;case 28:if(g.wrap&&g.flags){for(;M<32;){if(0===k)break A;k--,J+=F[R++]<<M,M+=8}if(J!==(4294967295&g.total)){A.msg="incorrect length check",g.mode=y;break}J=0,M=0}g.mode=29;case 29:v=D;break A;case y:v=e;break A;case 31:return w;case 32:default:return r}return A.next_out=S,A.avail_out=U,A.next_in=R,A.avail_in=k,g.hold=J,g.bits=M,(g.wsize||l!==A.avail_out&&g.mode<y&&(g.mode<27||I!==i))&&L(A,A.output,A.next_out,l-A.avail_out)?(g.mode=31,w):(Y-=A.avail_in,l-=A.avail_out,A.total_in+=Y,A.total_out+=l,g.total+=l,g.wrap&&l&&(A.adler=g.check=g.flags?Q(g.check,N,l,A.next_out-l):B(g.check,N,l,A.next_out-l)),A.data_type=g.bits+(g.last?64:0)+(g.mode===h?128:0)+(20===g.mode||15===g.mode?256:0),(0===Y&&0===l||I===i)&&v===a&&(v=n),v)},A.exports.inflateEnd=A=>{if(!A||!A.state)return r;let I=A.state;return I.window&&(I.window=null),A.state=null,a},A.exports.inflateGetHeader=(A,I)=>{if(!A||!A.state)return r;const g=A.state;return 0==(2&g.wrap)?r:(g.head=I,I.done=!1,a)},A.exports.inflateSetDictionary=(A,I)=>{const g=I.length;let Q,C,E;return A&&A.state?(Q=A.state,0!==Q.wrap&&11!==Q.mode?r:11===Q.mode&&(C=1,C=B(C,I,g,0),C!==Q.check)?e:(E=L(A,I,g,g),E?(Q.mode=31,w):(Q.havedict=1,a))):r},A.exports.inflateInfo="pako inflate (from Nodeca project)"},7371:A=>{"use strict";const I=15,g=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),B=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),Q=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),C=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]);A.exports=(A,E,i,o,t,a,D,s)=>{const r=s.bits;let e,w,n,c,h,y,G=0,F=0,N=0,R=0,S=0,k=0,U=0,J=0,M=0,H=0,L=null,Y=0;const l=new Uint16Array(16),d=new Uint16Array(16);let K,f,u,p=null,b=0;for(G=0;G<=I;G++)l[G]=0;for(F=0;F<o;F++)l[E[i+F]]++;for(S=r,R=I;R>=1&&0===l[R];R--);if(S>R&&(S=R),0===R)return t[a++]=20971520,t[a++]=20971520,s.bits=1,0;for(N=1;N<R&&0===l[N];N++);for(S<N&&(S=N),J=1,G=1;G<=I;G++)if(J<<=1,J-=l[G],J<0)return-1;if(J>0&&(0===A||1!==R))return-1;for(d[1]=0,G=1;G<I;G++)d[G+1]=d[G]+l[G];for(F=0;F<o;F++)0!==E[i+F]&&(D[d[E[i+F]]++]=F);if(0===A?(L=p=D,y=19):1===A?(L=g,Y-=257,p=B,b-=257,y=256):(L=Q,p=C,y=-1),H=0,F=0,G=N,h=a,k=S,U=0,n=-1,M=1<<S,c=M-1,1===A&&M>852||2===A&&M>592)return 1;for(;;){K=G-U,D[F]<y?(f=0,u=D[F]):D[F]>y?(f=p[b+D[F]],u=L[Y+D[F]]):(f=96,u=0),e=1<<G-U,w=1<<k,N=w;do{w-=e,t[h+(H>>U)+w]=K<<24|f<<16|u|0}while(0!==w);for(e=1<<G-1;H&e;)e>>=1;if(0!==e?(H&=e-1,H+=e):H=0,F++,0==--l[G]){if(G===R)break;G=E[i+D[F]]}if(G>S&&(H&c)!==n){for(0===U&&(U=S),h+=N,k=G-U,J=1<<k;k+U<R&&(J-=l[k+U],!(J<=0));)k++,J<<=1;if(M+=1<<k,1===A&&M>852||2===A&&M>592)return 1;n=H&c,t[n]=S<<24|k<<16|h-a|0}}return 0!==H&&(t[h+H]=G-U<<24|64<<16|0),s.bits=S,0}},5710:A=>{"use strict";A.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},8894:A=>{"use strict";A.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},6614:A=>{"use strict";A.exports=function(A,I,g,B){var Q=self||window;try{try{var C;try{C=new Q.Blob([A])}catch(I){(C=new(Q.BlobBuilder||Q.WebKitBlobBuilder||Q.MozBlobBuilder||Q.MSBlobBuilder)).append(A),C=C.getBlob()}var E=Q.URL||Q.webkitURL,i=E.createObjectURL(C),o=new Q[I](i,g);return E.revokeObjectURL(i),o}catch(B){return new Q[I]("data:application/javascript,".concat(encodeURIComponent(A)),g)}}catch(A){if(!B)throw Error("Inline worker is not supported");return new Q[I](B,g)}}}},I={};function g(B){var Q=I[B];if(void 0!==Q)return Q.exports;var C=I[B]={exports:{}};return A[B](C,C.exports,g),C.exports}g.n=A=>{var I=A&&A.__esModule?()=>A.default:()=>A;return g.d(I,{a:I}),I},g.d=(A,I)=>{for(var B in I)g.o(I,B)&&!g.o(A,B)&&Object.defineProperty(A,B,{enumerable:!0,get:I[B]})},g.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(A){if("object"==typeof window)return window}}(),g.o=(A,I)=>Object.prototype.hasOwnProperty.call(A,I),g.r=A=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(A,"__esModule",{value:!0})},(()=>{var A;g.g.importScripts&&(A=g.g.location+"");var I=g.g.document;if(!A&&I&&(I.currentScript&&(A=I.currentScript.src),!A)){var B=I.getElementsByTagName("script");B.length&&(A=B[B.length-1].src)}if(!A)throw new Error("Automatic publicPath is not supported in this browser");A=A.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),g.p=A})();var B={};return(()=>{"use strict";function A(A,I,g){if(void 0===A)throw new Error("decodeRGB: rgbBuffer must not be undefined");if(A.length%3!=0)throw new Error("decodeRGB: rgbBuffer length must be divisible by 3");var B=A.length/3,Q=0,C=0;if(g)for(var E=0;E<B;E++)I[C++]=A[Q++],I[C++]=A[Q++],I[C++]=A[Q++],I[C++]=255;else I.set(A)}function I(A,I,g){if(void 0===A)throw new Error("decodeRGB: rgbBuffer must not be undefined");if(A.length%3!=0)throw new Error("decodeRGB: rgbBuffer length must be divisible by 3");var B=A.length/3,Q=0,C=0,E=B,i=2*B;if(g)for(var o=0;o<B;o++)I[Q++]=A[C++],I[Q++]=A[E++],I[Q++]=A[i++],I[Q++]=255;else I.set(A)}function Q(A,I,g){if(void 0===A)throw new Error("decodeRGB: ybrBuffer must not be undefined");if(A.length%3!=0)throw new Error("decodeRGB: ybrBuffer length must be divisble by 3");var B=A.length/3,Q=0,C=0;if(g)for(var E=0;E<B;E++){var i=A[Q++],o=A[Q++],t=A[Q++];I[C++]=i+1.402*(t-128),I[C++]=i-.34414*(o-128)-.71414*(t-128),I[C++]=i+1.772*(o-128),I[C++]=255}else for(var a=0;a<B;a++){var D=A[Q++],s=A[Q++],r=A[Q++];I[C++]=D+1.402*(r-128),I[C++]=D-.34414*(s-128)-.71414*(r-128),I[C++]=D+1.772*(s-128)}}function C(A,I,g){if(void 0===A)throw new Error("decodeRGB: ybrBuffer must not be undefined");if(A.length%3!=0)throw new Error("decodeRGB: ybrBuffer length must be divisble by 3");var B=A.length/3,Q=0,C=0,E=B,i=2*B;if(g)for(var o=0;o<B;o++){var t=A[C++],a=A[E++],D=A[i++];I[Q++]=t+1.402*(D-128),I[Q++]=t-.34414*(a-128)-.71414*(D-128),I[Q++]=t+1.772*(a-128),I[Q++]=255}else for(var s=0;s<B;s++){var r=A[C++],e=A[E++],w=A[i++];I[Q++]=r+1.402*(w-128),I[Q++]=r-.34414*(e-128)-.71414*(w-128),I[Q++]=r+1.772*(e-128)}}function E(A,I){for(var g=A.length,B=new Uint8ClampedArray(g),Q=0;Q<g;++Q)B[Q]=A[Q]>>I;return B}function i(A,I,g){var B=A.columns*A.rows,Q=A.pixelData,C=A.redPaletteColorLookupTableData,i=A.greenPaletteColorLookupTableData,o=A.bluePaletteColorLookupTableData,t=A.redPaletteColorLookupTableData.length,a=0,D=0,s=A.redPaletteColorLookupTableDescriptor[1],r=8===A.redPaletteColorLookupTableDescriptor[2]?0:8,e=E(C,r),w=E(i,r),n=E(o,r);if(g)for(var c=0;c<B;++c){var h=Q[a++];h<s?h=0:h>s+t-1?h=t-1:h-=s,I[D++]=e[h],I[D++]=w[h],I[D++]=n[h],I[D++]=255}else for(var y=0;y<B;++y){var G=Q[a++];G<s?G=0:G>s+t-1?G=t-1:G-=s,I[D++]=e[G],I[D++]=w[G],I[D++]=n[G]}}function o(A,I){if(A.elements[I]&&6===A.elements[I].length)return[A.uint16(I,0),A.uint16(I,1),A.uint16(I,2)]}function t(A,I,g){for(var B=[],Q=A.elements[I],C=0;C<g[0];C++)16===g[2]?B[C]=A.uint16(I,C):B[C]=A.byteArray[C+Q.dataOffset];return B}g.r(B),g.d(B,{configure:()=>Mg,convertColorSpace:()=>aI,convertPALETTECOLOR:()=>i,convertRGBColorByPixel:()=>A,convertRGBColorByPlane:()=>I,convertYBRFullByPixel:()=>Q,convertYBRFullByPlane:()=>C,createImage:()=>NI,decodeImageFrame:()=>iI,decodeJPEGBaseline8BitColor:()=>QI,default:()=>Lg,external:()=>LI,getImageFrame:()=>bA,getMinMax:()=>gI,getPixelData:()=>HA,internal:()=>kA,isColorImage:()=>oI,isJPEGBaseline8BitColor:()=>DI,version:()=>Hg,wadors:()=>UI,wadouri:()=>Jg,webWorkerManager:()=>II});const a=function(A){var I={samplesPerPixel:A.uint16("x00280002"),photometricInterpretation:A.string("x00280004"),rows:A.uint16("x00280010"),columns:A.uint16("x00280011"),bitsAllocated:A.uint16("x00280100"),bitsStored:A.uint16("x00280101"),highBit:A.uint16("x00280102"),pixelRepresentation:A.uint16("x00280103"),planarConfiguration:A.uint16("x00280006"),pixelAspectRatio:A.string("x00280034")};return function(A,I){0===A.uint16("x00280103")?(I.smallestPixelValue=A.uint16("x00280106"),I.largestPixelValue=A.uint16("x00280107")):(I.smallestPixelValue=A.int16("x00280106"),I.largestPixelValue=A.int16("x00280107"))}(A,I),"PALETTE COLOR"===I.photometricInterpretation&&A.elements.x00281101&&function(A,I){I.redPaletteColorLookupTableDescriptor=o(A,"x00281101"),I.greenPaletteColorLookupTableDescriptor=o(A,"x00281102"),I.bluePaletteColorLookupTableDescriptor=o(A,"x00281103"),0===I.redPaletteColorLookupTableDescriptor[0]&&(I.redPaletteColorLookupTableDescriptor[0]=65536,I.greenPaletteColorLookupTableDescriptor[0]=65536,I.bluePaletteColorLookupTableDescriptor[0]=65536);var g=I.redPaletteColorLookupTableDescriptor[0],B=A.elements.x00281201.length===g?8:16;I.redPaletteColorLookupTableDescriptor[2]!==B&&(I.redPaletteColorLookupTableDescriptor[2]=B,I.greenPaletteColorLookupTableDescriptor[2]=B,I.bluePaletteColorLookupTableDescriptor[2]=B),I.redPaletteColorLookupTableData=t(A,"x00281201",I.redPaletteColorLookupTableDescriptor),I.greenPaletteColorLookupTableData=t(A,"x00281202",I.greenPaletteColorLookupTableDescriptor),I.bluePaletteColorLookupTableData=t(A,"x00281203",I.bluePaletteColorLookupTableDescriptor)}(A,I),I};function D(A,I){var g=I.uint16("x00283002",0);0===g&&(g=65535);for(var B={id:"1",firstValueMapped:0===A?I.uint16("x00283002",1):I.int16("x00283002",1),numBitsPerEntry:I.uint16("x00283002",2),lut:[]},Q=0;Q<g;Q++)B.lut[Q]=0===A?I.uint16("x00283006",Q):I.int16("x00283006",Q);return B}const s=function(A,I){if(I&&I.items&&I.items.length){for(var g=[],B=0;B<I.items.length;B++){var Q=D(A,I.items[B].dataSet);Q&&g.push(Q)}return g}};const r=function(A){var I=A.string("x00080016");if("1.2.840.10008.5.1.4.1.1.2"===I||"1.2.840.10008.5.1.4.1.1.2.1"===I)return 1;var g=A.floatString("x00281052"),B=A.floatString("x00281053");return void 0!==g&&void 0!==B?function(A){var I=A.uint16("x00280103"),g=A.uint16("x00280101");return 0===I?0:-1<<g-1}(A)*B+g<0?1:0:A.elements.x00283000&&A.elements.x00283000.length>0?0:A.uint16("x00280103")};const e=function(A,I,g){var B=[],Q=A.string(I);if(Q){var C=Q.split("\\");if(!(g&&C.length<g)){for(var E=0;E<C.length;E++)B.push(parseFloat(C[E]));return B}}};var w=g(4559),n=g.n(w),c=g(7423),h=g.n(c);const y=function(A,I,g){return I=I||0,A&&A.Value?A.Value.length<=I?g:A.Value[I]:g};const G=function(A,I,g){var B=y(A,I,g);if(void 0!==B)return parseFloat(B)};const F=function(A,I){var g=y(A,I);if(void 0!==g)return parseFloat(g)};const N=function(A,I){if(A&&A.Value&&!(I&&A.Value.length<I)){for(var g=[],B=0;B<A.Value.length;B++)g.push(parseFloat(A.Value[B]));return g}};function R(A){var I=A.indexOf(":");return A.substring(I+1)}var S=g(6275);var k=g(4215),U=g(7830),J=g.n(U);var M=g(8355),H=g(6051);function L(A,I){(null==I||I>A.length)&&(I=A.length);for(var g=0,B=new Array(I);g<I;g++)B[g]=A[g];return B}function Y(A,I){var g;if(A){if("string"==typeof A)return L(A,I);var B=M(g=Object.prototype.toString.call(A)).call(g,8,-1);return"Object"===B&&A.constructor&&(B=A.constructor.name),"Map"===B||"Set"===B?H(A):"Arguments"===B||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(B)?L(A,I):void 0}}function l(A,I){return function(A){if(S(A))return A}(A)||function(A,I){var g=null==A?null:void 0!==k&&U(A)||A["@@iterator"];if(null!=g){var B,Q,C=[],E=!0,i=!1;try{for(g=g.call(A);!(E=(B=g.next()).done)&&(C.push(B.value),!I||C.length!==I);E=!0);}catch(A){i=!0,Q=A}finally{try{E||null==g.return||g.return()}finally{if(i)throw Q}}return C}}(A,I)||Y(A,I)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(A){return function(A){if(S(A))return L(A)}(A)||function(A){if(void 0!==k&&null!=U(A)||null!=A["@@iterator"])return H(A)}(A)||Y(A)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var K=g(2475),f=g(3091),u=g(9719);function p(A,I){if(null==A)return{};var g,B,Q=function(A,I){if(null==A)return{};var g,B,Q={},C=u(A);for(B=0;B<C.length;B++)g=C[B],f(I).call(I,g)>=0||(Q[g]=A[g]);return Q}(A,I);if(K){var C=K(A);for(B=0;B<C.length;B++)g=C[B],f(I).call(I,g)>=0||Object.prototype.propertyIsEnumerable.call(A,g)&&(Q[g]=A[g])}return Q}var b=g(6496);function q(A){return(q="function"==typeof k&&"symbol"==typeof b?function(A){return typeof A}:function(A){return A&&"function"==typeof k&&A.constructor===k&&A!==k.prototype?"symbol":typeof A})(A)}var m=g(6059),x=g.n(m),W=g(2633),v=g.n(W),Z=g(1929),T=g.n(Z),P=g(1246),X=g.n(P),V=g(2165),O=g.n(V);function j(A){var I=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return A&&A.Value?A.Value[0]&&I?A.Value[0]:A.Value:A}var z=["52009230","52009229","00280008"];function _(A,I,g){var B,Q,C,E;return{shared:x()(B=v()(Q=I?T()(I[0]):[]).call(Q,(function(A){return A[0]}))).call(B,(function(A){return void 0!==A&&"object"===q(A)})),perFrame:x()(C=v()(E=A?T()(A[g-1]):[]).call(E,(function(A){return A.Value[0]}))).call(C,(function(A){return void 0!==A&&"object"===q(A)}))}}function $(A){var I=A[52009230],g=A[52009229],B=A["00280008"],Q=p(A,z);return{PerFrameFunctionalGroupsSequence:I=j(I,!1),SharedFunctionalGroupsSequence:g=j(g,!1),NumberOfFrames:B=j(B),rest:Q}}var AA=g(6028),IA=g.n(AA);function gA(A){var I=A.indexOf("/frames/")+8,g=IA()(A).call(A,0,I),B=parseInt(IA()(A).call(A,I),10);return{metadata:QA["".concat(g,"1")],frame:B}}const BA={_retrieveMultiframeMetadata:gA,retrieveMultiframeMetadata:function(A){return gA(R(A))},isMultiframe:function(A){var I=y(A["00280008"]);return I&&I>1}};var QA=[],CA={};const EA={add:function(A,I){var g=R(A);I.isMultiframe=BA.isMultiframe(I),QA[g]=I},get:function(A){var I=R(A),g=QA[I];if(g&&(null==g||!g.isMultiframe))return g;var B=CA[I];if(B)return B;var Q=BA._retrieveMultiframeMetadata(I);if(Q&&Q.metadata){var C=Q.metadata,E=Q.frame;if(C){var i=function(A,I){var g=$(I),B=g.PerFrameFunctionalGroupsSequence,Q=g.SharedFunctionalGroupsSequence,C=g.NumberOfFrames,E=g.rest;if(B||C>1){var i,o=_(B,Q,A),t=o.shared,a=o.perFrame,D=X()(I,{frameNumber:A});return n()(i=[]).call(i,d(t),d(a)).forEach((function(A){O()(A).forEach((function(A){var I=l(A,2),g=I[0],B=I[1];D[g]=B}))})),X()(E,{"00280008":C},D)}return I}(E,C);return CA[I]=i,i}}},remove:function(A){var I=R(A);QA[I]=void 0,CA[I]=void 0},purge:function(){QA=[],CA={}}};function iA(A){return"RECON TOMO"===A||"RECON GATED TOMO"===A}function oA(A){var I=y(A["00080060"]);return h()(I).call(I,"NM")}function tA(A,I){var g=j(A["00080008"],!1);if(g)return g[I]}function aA(A){var I=N(A["00200037"],6);return!I&&oA(A)&&(I=function(A){var I,g=tA(A,2);if(g&&iA(g)){var B=j(A["00540022"]);B&&(I=N(B["00200037"],6))}return I}(A)),I}function DA(A){var I=N(A["00200032"],3);return!I&&oA(A)&&(I=function(A){var I,g=tA(A,2);if(g&&iA(g)){var B=j(A["00540022"]);B&&(I=N(B["00200032"],3))}return I}(A)),I}const sA=function(A,I){if("multiframeModule"===A){var g=BA.retrieveMultiframeMetadata(I),B=g.metadata,Q=g.frame;if(!B)return;var C=$(B),E=C.PerFrameFunctionalGroupsSequence,i=C.SharedFunctionalGroupsSequence,o=C.NumberOfFrames;if(E||o>1){var t=_(E,i,Q),a=t.shared;return{NumberOfFrames:o,PerFrameFunctionalInformation:t.perFrame,SharedFunctionalInformation:a}}return{NumberOfFrames:o}}var D=LI.dicomParser,s=EA.get(I);if(s){if("generalSeriesModule"===A)return{modality:y(s["00080060"]),seriesInstanceUID:y(s["0020000E"]),seriesNumber:F(s["00200011"]),studyInstanceUID:y(s["0020000D"]),seriesDate:D.parseDA(y(s["00080021"])),seriesTime:D.parseTM(y(s["00080031"],0,"")),acquisitionDate:D.parseDA(y(s["00080022"]),""),acquisitionTime:D.parseTM(y(s["00080032"],0,""))};if("patientStudyModule"===A)return{patientAge:F(s["00101010"]),patientSize:F(s["00101020"]),patientSex:y(s["00100040"]),patientWeight:F(s["00101030"])};if("nmMultiframeGeometryModule"===A){var r=y(s["00080060"]),e=tA(s,2);return{modality:r,imageType:y(s["00080008"]),imageSubType:e,imageOrientationPatient:aA(s),imagePositionPatient:DA(s),sliceThickness:F(s["00180050"]),pixelSpacing:N(s["00280030"],2),numberOfFrames:F(s["00280008"]),isNMReconstructable:iA(e)&&h()(r).call(r,"NM")}}if("imagePlaneModule"===A){var w=aA(s),n=DA(s),c=N(s["00280030"],2),G=null,R=null;c&&(R=c[0],G=c[1]);var S=null,k=null;return w&&(S=[parseFloat(w[0]),parseFloat(w[1]),parseFloat(w[2])],k=[parseFloat(w[3]),parseFloat(w[4]),parseFloat(w[5])]),{frameOfReferenceUID:y(s["00200052"]),rows:F(s["00280010"]),columns:F(s["00280011"]),imageOrientationPatient:w,rowCosines:S,columnCosines:k,imagePositionPatient:n,sliceThickness:F(s["00180050"]),sliceLocation:F(s["00201041"]),pixelSpacing:c,rowPixelSpacing:R,columnPixelSpacing:G}}if("imagePixelModule"===A)return{samplesPerPixel:F(s["00280002"]),photometricInterpretation:y(s["00280004"]),rows:F(s["00280010"]),columns:F(s["00280011"]),bitsAllocated:F(s["00280100"]),bitsStored:F(s["00280101"]),highBit:y(s["00280102"]),pixelRepresentation:F(s["00280103"]),planarConfiguration:F(s["00280006"]),pixelAspectRatio:y(s["00280034"]),smallestPixelValue:F(s["00280106"]),largestPixelValue:F(s["00280107"]),redPaletteColorLookupTableDescriptor:N(s["00281101"]),greenPaletteColorLookupTableDescriptor:N(s["00281102"]),bluePaletteColorLookupTableDescriptor:N(s["00281103"]),redPaletteColorLookupTableData:N(s["00281201"]),greenPaletteColorLookupTableData:N(s["00281202"]),bluePaletteColorLookupTableData:N(s["00281203"])};if("voiLutModule"===A)return{windowCenter:N(s["00281050"],1),windowWidth:N(s["00281051"],1)};if("modalityLutModule"===A)return{rescaleIntercept:F(s["00281052"]),rescaleSlope:F(s["00281053"]),rescaleType:y(s["00281054"])};if("sopCommonModule"===A)return{sopClassUID:y(s["00080016"]),sopInstanceUID:y(s["00080018"])};if("petIsotopeModule"===A){var U=y(s["00540016"]);if(void 0===U)return;return{radiopharmaceuticalInfo:{radiopharmaceuticalStartTime:D.parseTM(y(U["00181072"],0,"")),radiopharmaceuticalStartDateTime:y(U["00181078"],0,""),radionuclideTotalDose:F(U["00181074"]),radionuclideHalfLife:F(U["00181075"])}}}return"overlayPlaneModule"===A?function(A){for(var I=[],g=0;g<=30;g+=2){var B="x60".concat(g.toString(16));4===B.length&&(B="x600".concat(g.toString(16)));var Q=y(A["".concat(B,"3000")]);if(Q){for(var C=[],E=0;E<Q.length;E++)for(var i=0;i<8;i++){var o=A.Value[Q.dataOffset+E];C[8*E+i]=o>>i&1}I.push({rows:F(A["".concat(B,"0010")]),columns:F(A["".concat(B,"0011")]),type:y(A["".concat(B,"0040")]),x:F(A["".concat(B,"0050")],1)-1,y:F(A["".concat(B,"0050")],0)-1,pixelData:C,description:y(A["".concat(B,"0022")]),label:y(A["".concat(B,"1500")]),roiArea:y(A["".concat(B,"1301")]),roiMean:y(A["".concat(B,"1302")]),roiStandardDeviation:y(A["".concat(B,"1303")])})}}return{overlays:I}}(s):"transferSyntax"===A?{transferSyntaxUID:y(s["00020010"])}:"petSeriesModule"===A?{correctedImage:y(s["00280051"]),units:y(s["00541001"]),decayCorrection:y(s["00541102"])}:"petImageModule"===A?{frameReferenceTime:F(s["00541300"]),actualFrameDuration:F(s["00181242"])}:void 0}};function rA(A,I,g){if(g+A.length>I.length)return!1;for(var B=g,Q=0;Q<A.length;Q++)if(A[Q]!==I[B++])return!1;return!0}const eA=function(A,I,g){g=g||0;for(var B=function(A){for(var I=new Uint8Array(A.length),g=0,B=A.length;g<B;g++)I[g]=A.charCodeAt(g);return I}(I),Q=g;Q<A.length;Q++)if(B[0]===A[Q]&&rA(B,A,Q))return Q;return-1};var wA=g(1655),nA=g.n(wA),cA=g(2250),hA=g.n(cA),yA=g(7878),GA=g.n(yA),FA={open:function(A,I){A.open("get",I,!0)},beforeSend:function(){},beforeProcessing:function(A){return hA().resolve(A.response)},imageCreated:function(){},strict:!1,decodeConfig:{convertFloatPixelDataToInt:!0,use16BitDataType:!1}};function NA(A){FA=X()(FA,A)}function RA(){return FA}const SA=function(A,I){var g=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},B=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},Q=LI.cornerstone,C=RA(),E=function(A){if("function"==typeof C.errorInterceptor){var I=new Error("request failed");I.request=A,I.response=A.response,I.status=A.status,C.errorInterceptor(I)}},i=new XMLHttpRequest,o=new(hA())((function(o,t){C.open(i,A,g,B);var a=C.beforeSend(i,I,g,B);i.responseType="arraybuffer";var D=X()({},g,a);GA()(D).forEach((function(I){null!==D[I]&&("Accept"===I&&-1!==A.indexOf("accept=")||i.setRequestHeader(I,D[I]))})),B.deferred={resolve:o,reject:t},B.url=A,B.imageId=I,i.onloadstart=function(g){C.onloadstart&&C.onloadstart(g,B);var E={url:A,imageId:I};Q.triggerEvent(Q.events,"cornerstoneimageloadstart",E)},i.onloadend=function(g){C.onloadend&&C.onloadend(g,B);var E={url:A,imageId:I};Q.triggerEvent(Q.events,"cornerstoneimageloadend",E)},i.onreadystatechange=function(A){C.onreadystatechange?C.onreadystatechange(A,B):4===i.readyState&&(200===i.status?C.beforeProcessing(i).then(o).catch((function(){E(i),t(i)})):(E(i),t(i)))},i.onprogress=function(g){var E,i,o=g.loaded;g.lengthComputable&&(E=g.total,i=Math.round(o/E*100)),C.onprogress&&C.onprogress(g,B);var t={url:A,imageId:I,loaded:o,total:E,percentComplete:i};Q.triggerEvent(Q.events,Q.EVENTS.IMAGE_LOAD_PROGRESS,t)},i.onerror=function(){E(i),t(i)},i.onabort=function(){E(i),t(i)},i.send()}));return o.xhr=i,o};var kA={xhrRequest:SA,setOptions:NA,getOptions:RA};function UA(A){for(var I=0;I<A.length;I++)if("--"===A[I].substr(0,2))return A[I]}function JA(A){for(var I=0;I<A.length;I++){var g;if("Content-Type:"===A[I].substr(0,13))return nA()(g=A[I].substr(13)).call(g)}}function MA(A,I,g){I=I||0,g=g||A.length-I;for(var B="",Q=I;Q<I+g;Q++)B+=String.fromCharCode(A[Q]);return B}const HA=function(A,I){var g=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"application/octet-stream",B={Accept:g};return new(hA())((function(g,Q){var C=SA(A,I,B),E=C.xhr;C.then((function(A){var I=new Uint8Array(A),B=E.getResponseHeader("Content-Type")||"application/octet-stream";if(-1!==B.indexOf("multipart")){var C=eA(I,"\r\n\r\n");-1===C&&Q(new Error("invalid response - no multipart mime header"));var i=MA(I,0,C).split("\r\n"),o=UA(i);o||Q(new Error("invalid response - no boundary marker"));var t=C+4,a=eA(I,o,t);-1===a&&Q(new Error("invalid response - terminating boundary not found"));var D=a-t-2;g({contentType:JA(i),imageFrame:{pixelData:new Uint8Array(A,t,D)}})}else g({contentType:B,imageFrame:{pixelData:I}})}),Q)}))};var LA=g(1882),YA=g.n(LA),lA=g(337),dA=g.n(lA),KA=g(2770),fA=g.n(KA),uA=g(1082);function pA(A,I,g){return I in A?uA(A,I,{value:g,enumerable:!0,configurable:!0,writable:!0}):A[I]=g,A}const bA=function(A){var I=LI.cornerstone.metaData.get("imagePixelModule",A);return{samplesPerPixel:I.samplesPerPixel,photometricInterpretation:I.photometricInterpretation,planarConfiguration:I.planarConfiguration,rows:I.rows,columns:I.columns,bitsAllocated:I.bitsAllocated,bitsStored:I.bitsStored,pixelRepresentation:I.pixelRepresentation,smallestPixelValue:I.smallestPixelValue,largestPixelValue:I.largestPixelValue,redPaletteColorLookupTableDescriptor:I.redPaletteColorLookupTableDescriptor,greenPaletteColorLookupTableDescriptor:I.greenPaletteColorLookupTableDescriptor,bluePaletteColorLookupTableDescriptor:I.bluePaletteColorLookupTableDescriptor,redPaletteColorLookupTableData:I.redPaletteColorLookupTableData,greenPaletteColorLookupTableData:I.greenPaletteColorLookupTableData,bluePaletteColorLookupTableData:I.bluePaletteColorLookupTableData,pixelData:void 0}};var qA=g(187),mA=g.n(qA),xA=g(6614),WA=g.n(xA);function vA(){return WA()('(()=>{var A,I,g={8726:function(A,I){!function(g){if("object"==typeof I&&void 0!==A)A.exports=g();else if("function"==typeof define&&define.amd)define([],g);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).jpeg=g()}}((function(){return function A(I,g,B){function Q(E,i){if(!g[E]){if(!I[E]){var o="function"==typeof require&&require;if(!i&&o)return o(E,!0);if(C)return C(E,!0);var D=new Error("Cannot find module \'"+E+"\'");throw D.code="MODULE_NOT_FOUND",D}var a=g[E]={exports:{}};I[E][0].call(a.exports,(function(A){var g=I[E][1][A];return Q(g||A)}),a,a.exports,A,I,g,B)}return g[E].exports}for(var C="function"==typeof require&&require,E=0;E<B.length;E++)Q(B[E]);return Q}({1:[function(A,I,g){"use strict";var B=B||{};B.lossless=B.lossless||{},B.lossless.ComponentSpec=B.lossless.ComponentSpec||function(){this.hSamp=0,this.quantTableSel=0,this.vSamp=0},"undefined"!==typeof I&&I.exports&&(I.exports=B.lossless.ComponentSpec)},{}],2:[function(A,I,g){"use strict";var B=B||{};B.lossless=B.lossless||{},B.lossless.DataStream=B.lossless.DataStream||function(A,I,g){this.buffer=new Uint8Array(A,I,g),this.index=0},B.lossless.DataStream.prototype.get16=function(){var A=(this.buffer[this.index]<<8)+this.buffer[this.index+1];return this.index+=2,A},B.lossless.DataStream.prototype.get8=function(){var A=this.buffer[this.index];return this.index+=1,A},"undefined"!==typeof I&&I.exports&&(I.exports=B.lossless.DataStream)},{}],3:[function(A,I,g){"use strict";var B,Q=Q||{};Q.lossless=Q.lossless||{},Q.lossless.DataStream=Q.lossless.DataStream||(void 0!==A?A("./data-stream.js"):null),Q.lossless.HuffmanTable=Q.lossless.HuffmanTable||(void 0!==A?A("./huffman-table.js"):null),Q.lossless.QuantizationTable=Q.lossless.QuantizationTable||(void 0!==A?A("./quantization-table.js"):null),Q.lossless.ScanHeader=Q.lossless.ScanHeader||(void 0!==A?A("./scan-header.js"):null),Q.lossless.FrameHeader=Q.lossless.FrameHeader||(void 0!==A?A("./frame-header.js"):null),Q.lossless.Utils=Q.lossless.Utils||(void 0!==A?A("./utils.js"):null),Q.lossless.Decoder=Q.lossless.Decoder||function(A,I){this.buffer=A,this.frame=new Q.lossless.FrameHeader,this.huffTable=new Q.lossless.HuffmanTable,this.quantTable=new Q.lossless.QuantizationTable,this.scan=new Q.lossless.ScanHeader,this.DU=Q.lossless.Utils.createArray(10,4,64),this.HuffTab=Q.lossless.Utils.createArray(4,2,12800),this.IDCT_Source=[],this.nBlock=[],this.acTab=Q.lossless.Utils.createArray(10,1),this.dcTab=Q.lossless.Utils.createArray(10,1),this.qTab=Q.lossless.Utils.createArray(10,1),this.marker=0,this.markerIndex=0,this.numComp=0,this.restartInterval=0,this.selection=0,this.xDim=0,this.yDim=0,this.xLoc=0,this.yLoc=0,this.numBytes=0,this.outputData=null,this.restarting=!1,this.mask=0,void 0!==I&&(this.numBytes=I)},Q.lossless.Decoder.IDCT_P=[0,5,40,16,45,2,7,42,21,56,8,61,18,47,1,4,41,23,58,13,32,24,37,10,63,17,44,3,6,43,20,57,15,34,29,48,53,26,39,9,60,19,46,22,59,12,33,31,50,55,25,36,11,62,14,35,28,49,52,27,38,30,51,54],Q.lossless.Decoder.TABLE=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],Q.lossless.Decoder.MAX_HUFFMAN_SUBTREE=50,Q.lossless.Decoder.MSB=2147483648,Q.lossless.Decoder.RESTART_MARKER_BEGIN=65488,Q.lossless.Decoder.RESTART_MARKER_END=65495,Q.lossless.Decoder.prototype.decompress=function(A,I,g){return this.decode(A,I,g).buffer},Q.lossless.Decoder.prototype.decode=function(A,I,g,B){var C,E,i,o,D=0,a=[],s=[],w=[];if(void 0!==A&&(this.buffer=A),void 0!==B&&(this.numBytes=B),this.stream=new Q.lossless.DataStream(this.buffer,I,g),this.buffer=null,this.xLoc=0,this.yLoc=0,65496!==(C=this.stream.get16()))throw new Error("Not a JPEG file");for(C=this.stream.get16();C>>4!=4092||65476===C;){switch(C){case 65476:this.huffTable.read(this.stream,this.HuffTab);break;case 65484:throw new Error("Program doesn\'t support arithmetic coding. (format throw new IOException)");case 65499:this.quantTable.read(this.stream,Q.lossless.Decoder.TABLE);break;case 65501:this.restartInterval=this.readNumber();break;case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:this.readApp();break;case 65534:this.readComment();break;default:if(C>>8!=255)throw new Error("ERROR: format throw new IOException! (decode)")}C=this.stream.get16()}if(C<65472||C>65479)throw new Error("ERROR: could not handle arithmetic code!");this.frame.read(this.stream),C=this.stream.get16();do{for(;65498!==C;){switch(C){case 65476:this.huffTable.read(this.stream,this.HuffTab);break;case 65484:throw new Error("Program doesn\'t support arithmetic coding. (format throw new IOException)");case 65499:this.quantTable.read(this.stream,Q.lossless.Decoder.TABLE);break;case 65501:this.restartInterval=this.readNumber();break;case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:this.readApp();break;case 65534:this.readComment();break;default:if(C>>8!=255)throw new Error("ERROR: format throw new IOException! (Parser.decode)")}C=this.stream.get16()}switch(this.precision=this.frame.precision,this.components=this.frame.components,this.numBytes||(this.numBytes=parseInt(Math.ceil(this.precision/8))),1==this.numBytes?this.mask=255:this.mask=65535,this.scan.read(this.stream),this.numComp=this.scan.numComp,this.selection=this.scan.selection,1===this.numBytes?3===this.numComp?(this.getter=this.getValueRGB,this.setter=this.setValueRGB,this.output=this.outputRGB):(this.getter=this.getValue8,this.setter=this.setValue8,this.output=this.outputSingle):(this.getter=this.getValue16,this.setter=this.setValue16,this.output=this.outputSingle),this.selection){case 2:this.selector=this.select2;break;case 3:this.selector=this.select3;break;case 4:this.selector=this.select4;break;case 5:this.selector=this.select5;break;case 6:this.selector=this.select6;break;case 7:this.selector=this.select7;break;default:this.selector=this.select1}for(this.scanComps=this.scan.components,this.quantTables=this.quantTable.quantTables,E=0;E<this.numComp;E+=1)i=this.scanComps[E].scanCompSel,this.qTab[E]=this.quantTables[this.components[i].quantTableSel],this.nBlock[E]=this.components[i].vSamp*this.components[i].hSamp,this.dcTab[E]=this.HuffTab[this.scanComps[E].dcTabSel][0],this.acTab[E]=this.HuffTab[this.scanComps[E].acTabSel][1];for(this.xDim=this.frame.dimX,this.yDim=this.frame.dimY,1==this.numBytes?this.outputData=new Uint8Array(new ArrayBuffer(this.xDim*this.yDim*this.numBytes*this.numComp)):this.outputData=new Uint16Array(new ArrayBuffer(this.xDim*this.yDim*this.numBytes*this.numComp)),D+=1;;){for(s[0]=0,w[0]=0,E=0;E<10;E+=1)a[E]=1<<this.precision-1;if(0===this.restartInterval){for(C=this.decodeUnit(a,s,w);0===C&&this.xLoc<this.xDim&&this.yLoc<this.yDim;)this.output(a),C=this.decodeUnit(a,s,w);break}for(o=0;o<this.restartInterval&&(this.restarting=0==o,C=this.decodeUnit(a,s,w),this.output(a),0===C);o+=1);if(0===C&&(0!==this.markerIndex?(C=65280|this.marker,this.markerIndex=0):C=this.stream.get16()),!(C>=Q.lossless.Decoder.RESTART_MARKER_BEGIN&&C<=Q.lossless.Decoder.RESTART_MARKER_END))break}65500===C&&1===D&&(this.readNumber(),C=this.stream.get16())}while(65497!==C&&this.xLoc<this.xDim&&this.yLoc<this.yDim&&0===D);return this.outputData},Q.lossless.Decoder.prototype.decodeUnit=function(A,I,g){return 1==this.numComp?this.decodeSingle(A,I,g):3==this.numComp?this.decodeRGB(A,I,g):-1},Q.lossless.Decoder.prototype.select1=function(A){return this.getPreviousX(A)},Q.lossless.Decoder.prototype.select2=function(A){return this.getPreviousY(A)},Q.lossless.Decoder.prototype.select3=function(A){return this.getPreviousXY(A)},Q.lossless.Decoder.prototype.select4=function(A){return this.getPreviousX(A)+this.getPreviousY(A)-this.getPreviousXY(A)},Q.lossless.Decoder.prototype.select5=function(A){return this.getPreviousX(A)+(this.getPreviousY(A)-this.getPreviousXY(A)>>1)},Q.lossless.Decoder.prototype.select6=function(A){return this.getPreviousY(A)+(this.getPreviousX(A)-this.getPreviousXY(A)>>1)},Q.lossless.Decoder.prototype.select7=function(A){return(this.getPreviousX(A)+this.getPreviousY(A))/2},Q.lossless.Decoder.prototype.decodeRGB=function(A,I,g){var B,C,E,i,o,D,a,s;for(A[0]=this.selector(0),A[1]=this.selector(1),A[2]=this.selector(2),o=0;o<this.numComp;o+=1)for(i=this.qTab[o],C=this.acTab[o],E=this.dcTab[o],D=0;D<this.nBlock[o];D+=1){for(a=0;a<this.IDCT_Source.length;a+=1)this.IDCT_Source[a]=0;if((B=this.getHuffmanValue(E,I,g))>=65280)return B;for(A[o]=this.IDCT_Source[0]=A[o]+this.getn(g,B,I,g),this.IDCT_Source[0]*=i[0],s=1;s<64;s+=1){if((B=this.getHuffmanValue(C,I,g))>=65280)return B;if(s+=B>>4,0==(15&B)){if(B>>4==0)break}else this.IDCT_Source[Q.lossless.Decoder.IDCT_P[s]]=this.getn(g,15&B,I,g)*i[s]}}return 0},Q.lossless.Decoder.prototype.decodeSingle=function(A,I,g){var B,C,E,i;for(this.restarting?(this.restarting=!1,A[0]=1<<this.frame.precision-1):A[0]=this.selector(),C=0;C<this.nBlock[0];C+=1){if((B=this.getHuffmanValue(this.dcTab[0],I,g))>=65280)return B;if((i=(E=this.getn(A,B,I,g))>>8)>=Q.lossless.Decoder.RESTART_MARKER_BEGIN&&i<=Q.lossless.Decoder.RESTART_MARKER_END)return i;A[0]+=E}return 0},Q.lossless.Decoder.prototype.getHuffmanValue=function(A,I,g){var B,C;if(65535,g[0]<8?(I[0]<<=8,255===(C=this.stream.get8())&&(this.marker=this.stream.get8(),0!==this.marker&&(this.markerIndex=9)),I[0]|=C):g[0]-=8,0!=((B=A[I[0]>>g[0]])&Q.lossless.Decoder.MSB)){if(0!==this.markerIndex)return this.markerIndex=0,65280|this.marker;I[0]&=65535>>16-g[0],I[0]<<=8,255===(C=this.stream.get8())&&(this.marker=this.stream.get8(),0!==this.marker&&(this.markerIndex=9)),I[0]|=C,B=A[256*(255&B)+(I[0]>>g[0])],g[0]+=8}if(g[0]+=8-(B>>8),g[0]<0)throw new Error("index="+g[0]+" temp="+I[0]+" code="+B+" in HuffmanValue()");return g[0]<this.markerIndex?(this.markerIndex=0,65280|this.marker):(I[0]&=65535>>16-g[0],255&B)},Q.lossless.Decoder.prototype.getn=function(A,I,g,B){var Q,C;if(1,-1,65535,0===I)return 0;if(16===I)return A[0]>=0?-32768:32768;if(B[0]-=I,B[0]>=0){if(B[0]<this.markerIndex&&!this.isLastPixel())return this.markerIndex=0,(65280|this.marker)<<8;Q=g[0]>>B[0],g[0]&=65535>>16-B[0]}else{if(g[0]<<=8,255===(C=this.stream.get8())&&(this.marker=this.stream.get8(),0!==this.marker&&(this.markerIndex=9)),g[0]|=C,B[0]+=8,B[0]<0){if(0!==this.markerIndex)return this.markerIndex=0,(65280|this.marker)<<8;g[0]<<=8,255===(C=this.stream.get8())&&(this.marker=this.stream.get8(),0!==this.marker&&(this.markerIndex=9)),g[0]|=C,B[0]+=8}if(B[0]<0)throw new Error("index="+B[0]+" in getn()");if(B[0]<this.markerIndex)return this.markerIndex=0,(65280|this.marker)<<8;Q=g[0]>>B[0],g[0]&=65535>>16-B[0]}return Q<1<<I-1&&(Q+=1+(-1<<I)),Q},Q.lossless.Decoder.prototype.getPreviousX=function(A){return this.xLoc>0?this.getter(this.yLoc*this.xDim+this.xLoc-1,A):this.yLoc>0?this.getPreviousY(A):1<<this.frame.precision-1},Q.lossless.Decoder.prototype.getPreviousXY=function(A){return this.xLoc>0&&this.yLoc>0?this.getter((this.yLoc-1)*this.xDim+this.xLoc-1,A):this.getPreviousY(A)},Q.lossless.Decoder.prototype.getPreviousY=function(A){return this.yLoc>0?this.getter((this.yLoc-1)*this.xDim+this.xLoc,A):this.getPreviousX(A)},Q.lossless.Decoder.prototype.isLastPixel=function(){return this.xLoc===this.xDim-1&&this.yLoc===this.yDim-1},Q.lossless.Decoder.prototype.outputSingle=function(A){this.xLoc<this.xDim&&this.yLoc<this.yDim&&(this.setter(this.yLoc*this.xDim+this.xLoc,this.mask&A[0]),this.xLoc+=1,this.xLoc>=this.xDim&&(this.yLoc+=1,this.xLoc=0))},Q.lossless.Decoder.prototype.outputRGB=function(A){var I=this.yLoc*this.xDim+this.xLoc;this.xLoc<this.xDim&&this.yLoc<this.yDim&&(this.setter(I,A[0],0),this.setter(I,A[1],1),this.setter(I,A[2],2),this.xLoc+=1,this.xLoc>=this.xDim&&(this.yLoc+=1,this.xLoc=0))},Q.lossless.Decoder.prototype.setValue8=function(A,I){this.outputData[A]=I},Q.lossless.Decoder.prototype.getValue8=function(A){return this.outputData[A]},(B=new ArrayBuffer(2),new DataView(B).setInt16(0,256,!0),256===new Int16Array(B)[0])?(Q.lossless.Decoder.prototype.setValue16=Q.lossless.Decoder.prototype.setValue8,Q.lossless.Decoder.prototype.getValue16=Q.lossless.Decoder.prototype.getValue8):(Q.lossless.Decoder.prototype.setValue16=function(A,I){this.outputData[A]=(255&I)<<8|I>>8&255},Q.lossless.Decoder.prototype.getValue16=function(A){var I=this.outputData[A];return(255&I)<<8|I>>8&255}),Q.lossless.Decoder.prototype.setValueRGB=function(A,I,g){this.outputData[3*A+g]=I},Q.lossless.Decoder.prototype.getValueRGB=function(A,I){return this.outputData[3*A+I]},Q.lossless.Decoder.prototype.readApp=function(){var A=0,I=this.stream.get16();for(A+=2;A<I;)this.stream.get8(),A+=1;return I},Q.lossless.Decoder.prototype.readComment=function(){var A,I="",g=0;for(A=this.stream.get16(),g+=2;g<A;)I+=this.stream.get8(),g+=1;return I},Q.lossless.Decoder.prototype.readNumber=function(){if(4!==this.stream.get16())throw new Error("ERROR: Define number format throw new IOException [Ld!=4]");return this.stream.get16()},"undefined"!==typeof I&&I.exports&&(I.exports=Q.lossless.Decoder)},{"./data-stream.js":2,"./frame-header.js":4,"./huffman-table.js":5,"./quantization-table.js":7,"./scan-header.js":9,"./utils.js":10}],4:[function(A,I,g){"use strict";var B=B||{};B.lossless=B.lossless||{},B.lossless.ComponentSpec=B.lossless.ComponentSpec||(void 0!==A?A("./component-spec.js"):null),B.lossless.DataStream=B.lossless.DataStream||(void 0!==A?A("./data-stream.js"):null),B.lossless.FrameHeader=B.lossless.FrameHeader||function(){this.components=[],this.dimX=0,this.dimY=0,this.numComp=0,this.precision=0},B.lossless.FrameHeader.prototype.read=function(A){var I,g,Q,C,E=0;for(I=A.get16(),E+=2,this.precision=A.get8(),E+=1,this.dimY=A.get16(),E+=2,this.dimX=A.get16(),E+=2,this.numComp=A.get8(),E+=1,g=1;g<=this.numComp;g+=1){if(E>I)throw new Error("ERROR: frame format error");if(Q=A.get8(),(E+=1)>=I)throw new Error("ERROR: frame format error [c>=Lf]");C=A.get8(),E+=1,this.components[Q]||(this.components[Q]=new B.lossless.ComponentSpec),this.components[Q].hSamp=C>>4,this.components[Q].vSamp=15&C,this.components[Q].quantTableSel=A.get8(),E+=1}if(E!==I)throw new Error("ERROR: frame format error [Lf!=count]");return 1},"undefined"!==typeof I&&I.exports&&(I.exports=B.lossless.FrameHeader)},{"./component-spec.js":1,"./data-stream.js":2}],5:[function(A,I,g){"use strict";var B=B||{};B.lossless=B.lossless||{},B.lossless.DataStream=B.lossless.DataStream||(void 0!==A?A("./data-stream.js"):null),B.lossless.Utils=B.lossless.Utils||(void 0!==A?A("./utils.js"):null),B.lossless.HuffmanTable=B.lossless.HuffmanTable||function(){this.l=B.lossless.Utils.createArray(4,2,16),this.th=[],this.v=B.lossless.Utils.createArray(4,2,16,200),this.tc=B.lossless.Utils.createArray(4,2),this.tc[0][0]=0,this.tc[1][0]=0,this.tc[2][0]=0,this.tc[3][0]=0,this.tc[0][1]=0,this.tc[1][1]=0,this.tc[2][1]=0,this.tc[3][1]=0,this.th[0]=0,this.th[1]=0,this.th[2]=0,this.th[3]=0},B.lossless.HuffmanTable.MSB=2147483648,B.lossless.HuffmanTable.prototype.read=function(A,I){var g,B,Q,C,E,i,o=0;for(g=A.get16(),o+=2;o<g;){if(o+=1,(Q=15&(B=A.get8()))>3)throw new Error("ERROR: Huffman table ID > 3");if((C=B>>4)>2)throw new Error("ERROR: Huffman table [Table class > 2 ]");for(this.th[Q]=1,this.tc[Q][C]=1,E=0;E<16;E+=1)this.l[Q][C][E]=A.get8(),o+=1;for(E=0;E<16;E+=1)for(i=0;i<this.l[Q][C][E];i+=1){if(o>g)throw new Error("ERROR: Huffman table format error [count>Lh]");this.v[Q][C][E][i]=A.get8(),o+=1}}if(o!==g)throw new Error("ERROR: Huffman table format error [count!=Lf]");for(E=0;E<4;E+=1)for(i=0;i<2;i+=1)0!==this.tc[E][i]&&this.buildHuffTable(I[E][i],this.l[E][i],this.v[E][i]);return 1},B.lossless.HuffmanTable.prototype.buildHuffTable=function(A,I,g){var Q,C,E,i,o;for(256,C=0,E=0;E<8;E+=1)for(i=0;i<I[E];i+=1)for(o=0;o<256>>E+1;o+=1)A[C]=g[E][i]|E+1<<8,C+=1;for(E=1;C<256;E+=1,C+=1)A[C]=E|B.lossless.HuffmanTable.MSB;for(Q=1,C=0,E=8;E<16;E+=1)for(i=0;i<I[E];i+=1){for(o=0;o<256>>E-7;o+=1)A[256*Q+C]=g[E][i]|E+1<<8,C+=1;if(C>=256){if(C>256)throw new Error("ERROR: Huffman table error(1)!");C=0,Q+=1}}},"undefined"!==typeof I&&I.exports&&(I.exports=B.lossless.HuffmanTable)},{"./data-stream.js":2,"./utils.js":10}],6:[function(A,I,g){"use strict";var B=B||{};B.lossless=B.lossless||{},B.lossless.ComponentSpec=B.lossless.ComponentSpec||(void 0!==A?A("./component-spec.js"):null),B.lossless.DataStream=B.lossless.DataStream||(void 0!==A?A("./data-stream.js"):null),B.lossless.Decoder=B.lossless.Decoder||(void 0!==A?A("./decoder.js"):null),B.lossless.FrameHeader=B.lossless.FrameHeader||(void 0!==A?A("./frame-header.js"):null),B.lossless.HuffmanTable=B.lossless.HuffmanTable||(void 0!==A?A("./huffman-table.js"):null),B.lossless.QuantizationTable=B.lossless.QuantizationTable||(void 0!==A?A("./quantization-table.js"):null),B.lossless.ScanComponent=B.lossless.ScanComponent||(void 0!==A?A("./scan-component.js"):null),B.lossless.ScanHeader=B.lossless.ScanHeader||(void 0!==A?A("./scan-header.js"):null),B.lossless.Utils=B.lossless.Utils||(void 0!==A?A("./utils.js"):null),"undefined"!==typeof I&&I.exports&&(I.exports=B)},{"./component-spec.js":1,"./data-stream.js":2,"./decoder.js":3,"./frame-header.js":4,"./huffman-table.js":5,"./quantization-table.js":7,"./scan-component.js":8,"./scan-header.js":9,"./utils.js":10}],7:[function(A,I,g){"use strict";var B=B||{};B.lossless=B.lossless||{},B.lossless.DataStream=B.lossless.DataStream||(void 0!==A?A("./data-stream.js"):null),B.lossless.Utils=B.lossless.Utils||(void 0!==A?A("./utils.js"):null),B.lossless.QuantizationTable=B.lossless.QuantizationTable||function(){this.precision=[],this.tq=[],this.quantTables=B.lossless.Utils.createArray(4,64),this.tq[0]=0,this.tq[1]=0,this.tq[2]=0,this.tq[3]=0},B.lossless.QuantizationTable.enhanceQuantizationTable=function(A,I){var g;for(g=0;g<8;g+=1)A[I[0+g]]*=90,A[I[32+g]]*=90,A[I[16+g]]*=118,A[I[48+g]]*=49,A[I[40+g]]*=71,A[I[8+g]]*=126,A[I[56+g]]*=25,A[I[24+g]]*=106;for(g=0;g<8;g+=1)A[I[0+8*g]]*=90,A[I[4+8*g]]*=90,A[I[2+8*g]]*=118,A[I[6+8*g]]*=49,A[I[5+8*g]]*=71,A[I[1+8*g]]*=126,A[I[7+8*g]]*=25,A[I[3+8*g]]*=106;for(g=0;g<64;g+=1)A[g]>>=6},B.lossless.QuantizationTable.prototype.read=function(A,I){var g,Q,C,E,i=0;for(g=A.get16(),i+=2;i<g;){if(i+=1,(C=15&(Q=A.get8()))>3)throw new Error("ERROR: Quantization table ID > 3");if(this.precision[C]=Q>>4,0===this.precision[C])this.precision[C]=8;else{if(1!==this.precision[C])throw new Error("ERROR: Quantization table precision error");this.precision[C]=16}if(this.tq[C]=1,8===this.precision[C]){for(E=0;E<64;E+=1){if(i>g)throw new Error("ERROR: Quantization table format error");this.quantTables[C][E]=A.get8(),i+=1}B.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[C],I)}else{for(E=0;E<64;E+=1){if(i>g)throw new Error("ERROR: Quantization table format error");this.quantTables[C][E]=A.get16(),i+=2}B.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[C],I)}}if(i!==g)throw new Error("ERROR: Quantization table error [count!=Lq]");return 1},"undefined"!==typeof I&&I.exports&&(I.exports=B.lossless.QuantizationTable)},{"./data-stream.js":2,"./utils.js":10}],8:[function(A,I,g){"use strict";var B=B||{};B.lossless=B.lossless||{},B.lossless.ScanComponent=B.lossless.ScanComponent||function(){this.acTabSel=0,this.dcTabSel=0,this.scanCompSel=0},"undefined"!==typeof I&&I.exports&&(I.exports=B.lossless.ScanComponent)},{}],9:[function(A,I,g){"use strict";var B=B||{};B.lossless=B.lossless||{},B.lossless.DataStream=B.lossless.DataStream||(void 0!==A?A("./data-stream.js"):null),B.lossless.ScanComponent=B.lossless.ScanComponent||(void 0!==A?A("./scan-component.js"):null),B.lossless.ScanHeader=B.lossless.ScanHeader||function(){this.ah=0,this.al=0,this.numComp=0,this.selection=0,this.spectralEnd=0,this.components=[]},B.lossless.ScanHeader.prototype.read=function(A){var I,g,Q,C=0;for(I=A.get16(),C+=2,this.numComp=A.get8(),C+=1,g=0;g<this.numComp;g+=1){if(this.components[g]=new B.lossless.ScanComponent,C>I)throw new Error("ERROR: scan header format error");this.components[g].scanCompSel=A.get8(),C+=1,Q=A.get8(),C+=1,this.components[g].dcTabSel=Q>>4,this.components[g].acTabSel=15&Q}if(this.selection=A.get8(),C+=1,this.spectralEnd=A.get8(),C+=1,Q=A.get8(),this.ah=Q>>4,this.al=15&Q,(C+=1)!==I)throw new Error("ERROR: scan header format error [count!=Ns]");return 1},"undefined"!==typeof I&&I.exports&&(I.exports=B.lossless.ScanHeader)},{"./data-stream.js":2,"./scan-component.js":8}],10:[function(A,I,g){"use strict";var B=B||{};B.lossless=B.lossless||{},B.lossless.Utils=B.lossless.Utils||{},B.lossless.Utils.createArray=function(A){var I=new Array(A||0),g=A;if(arguments.length>1)for(var Q=Array.prototype.slice.call(arguments,1);g--;)I[A-1-g]=B.lossless.Utils.createArray.apply(this,Q);return I},B.lossless.Utils.makeCRCTable=function(){for(var A,I=[],g=0;g<256;g++){A=g;for(var B=0;B<8;B++)A=1&A?3988292384^A>>>1:A>>>1;I[g]=A}return I},B.lossless.Utils.crc32=function(A){for(var I=new Uint8Array(A.buffer),g=B.lossless.Utils.crcTable||(B.lossless.Utils.crcTable=B.lossless.Utils.makeCRCTable()),Q=-1,C=0;C<I.length;C++)Q=Q>>>8^g[255&(Q^I[C])];return(-1^Q)>>>0},"undefined"!==typeof I&&I.exports&&(I.exports=B.lossless.Utils)},{}]},{},[6])(6)}))},4559:(A,I,g)=>{A.exports=g(9842)},7552:(A,I,g)=>{A.exports=g(5697)},7647:(A,I,g)=>{A.exports=g(3798)},6028:(A,I,g)=>{A.exports=g(671)},1246:(A,I,g)=>{A.exports=g(8730)},337:(A,I,g)=>{A.exports=g(3751)},2770:(A,I,g)=>{A.exports=g(1380)},1882:(A,I,g)=>{A.exports=g(6601)},7878:(A,I,g)=>{A.exports=g(8783)},2250:(A,I,g)=>{A.exports=g(4731)},1082:(A,I,g)=>{A.exports=g(5723)},5534:(A,I,g)=>{A.exports=g(5213)},7458:A=>{var I=function(A){"use strict";var I,g=Object.prototype,B=g.hasOwnProperty,Q="function"==typeof Symbol?Symbol:{},C=Q.iterator||"@@iterator",E=Q.asyncIterator||"@@asyncIterator",i=Q.toStringTag||"@@toStringTag";function o(A,I,g){return Object.defineProperty(A,I,{value:g,enumerable:!0,configurable:!0,writable:!0}),A[I]}try{o({},"")}catch(A){o=function(A,I,g){return A[I]=g}}function D(A,I,g,B){var Q=I&&I.prototype instanceof F?I:F,C=Object.create(Q.prototype),E=new H(B||[]);return C._invoke=function(A,I,g){var B=s;return function(Q,C){if(B===t)throw new Error("Generator is already running");if(B===G){if("throw"===Q)throw C;return L()}for(g.method=Q,g.arg=C;;){var E=g.delegate;if(E){var i=U(E,g);if(i){if(i===h)continue;return i}}if("next"===g.method)g.sent=g._sent=g.arg;else if("throw"===g.method){if(B===s)throw B=G,g.arg;g.dispatchException(g.arg)}else"return"===g.method&&g.abrupt("return",g.arg);B=t;var o=a(A,I,g);if("normal"===o.type){if(B=g.done?G:w,o.arg===h)continue;return{value:o.arg,done:g.done}}"throw"===o.type&&(B=G,g.method="throw",g.arg=o.arg)}}}(A,g,E),C}function a(A,I,g){try{return{type:"normal",arg:A.call(I,g)}}catch(A){return{type:"throw",arg:A}}}A.wrap=D;var s="suspendedStart",w="suspendedYield",t="executing",G="completed",h={};function F(){}function y(){}function c(){}var r={};o(r,C,(function(){return this}));var N=Object.getPrototypeOf,R=N&&N(N(M([])));R&&R!==g&&B.call(R,C)&&(r=R);var e=c.prototype=F.prototype=Object.create(r);function n(A){["next","throw","return"].forEach((function(I){o(A,I,(function(A){return this._invoke(I,A)}))}))}function S(A,I){function g(Q,C,E,i){var o=a(A[Q],A,C);if("throw"!==o.type){var D=o.arg,s=D.value;return s&&"object"==typeof s&&B.call(s,"__await")?I.resolve(s.__await).then((function(A){g("next",A,E,i)}),(function(A){g("throw",A,E,i)})):I.resolve(s).then((function(A){D.value=A,E(D)}),(function(A){return g("throw",A,E,i)}))}i(o.arg)}var Q;this._invoke=function(A,B){function C(){return new I((function(I,Q){g(A,B,I,Q)}))}return Q=Q?Q.then(C,C):C()}}function U(A,g){var B=A.iterator[g.method];if(B===I){if(g.delegate=null,"throw"===g.method){if(A.iterator.return&&(g.method="return",g.arg=I,U(A,g),"throw"===g.method))return h;g.method="throw",g.arg=new TypeError("The iterator does not provide a \'throw\' method")}return h}var Q=a(B,A.iterator,g.arg);if("throw"===Q.type)return g.method="throw",g.arg=Q.arg,g.delegate=null,h;var C=Q.arg;return C?C.done?(g[A.resultName]=C.value,g.next=A.nextLoc,"return"!==g.method&&(g.method="next",g.arg=I),g.delegate=null,h):C:(g.method="throw",g.arg=new TypeError("iterator result is not an object"),g.delegate=null,h)}function k(A){var I={tryLoc:A[0]};1 in A&&(I.catchLoc=A[1]),2 in A&&(I.finallyLoc=A[2],I.afterLoc=A[3]),this.tryEntries.push(I)}function J(A){var I=A.completion||{};I.type="normal",delete I.arg,A.completion=I}function H(A){this.tryEntries=[{tryLoc:"root"}],A.forEach(k,this),this.reset(!0)}function M(A){if(A){var g=A[C];if(g)return g.call(A);if("function"==typeof A.next)return A;if(!isNaN(A.length)){var Q=-1,E=function g(){for(;++Q<A.length;)if(B.call(A,Q))return g.value=A[Q],g.done=!1,g;return g.value=I,g.done=!0,g};return E.next=E}}return{next:L}}function L(){return{value:I,done:!0}}return y.prototype=c,o(e,"constructor",c),o(c,"constructor",y),y.displayName=o(c,i,"GeneratorFunction"),A.isGeneratorFunction=function(A){var I="function"==typeof A&&A.constructor;return!!I&&(I===y||"GeneratorFunction"===(I.displayName||I.name))},A.mark=function(A){return Object.setPrototypeOf?Object.setPrototypeOf(A,c):(A.__proto__=c,o(A,i,"GeneratorFunction")),A.prototype=Object.create(e),A},A.awrap=function(A){return{__await:A}},n(S.prototype),o(S.prototype,E,(function(){return this})),A.AsyncIterator=S,A.async=function(I,g,B,Q,C){void 0===C&&(C=Promise);var E=new S(D(I,g,B,Q),C);return A.isGeneratorFunction(g)?E:E.next().then((function(A){return A.done?A.value:E.next()}))},n(e),o(e,i,"Generator"),o(e,C,(function(){return this})),o(e,"toString",(function(){return"[object Generator]"})),A.keys=function(A){var I=[];for(var g in A)I.push(g);return I.reverse(),function g(){for(;I.length;){var B=I.pop();if(B in A)return g.value=B,g.done=!1,g}return g.done=!0,g}},A.values=M,H.prototype={constructor:H,reset:function(A){if(this.prev=0,this.next=0,this.sent=this._sent=I,this.done=!1,this.delegate=null,this.method="next",this.arg=I,this.tryEntries.forEach(J),!A)for(var g in this)"t"===g.charAt(0)&&B.call(this,g)&&!isNaN(+g.slice(1))&&(this[g]=I)},stop:function(){this.done=!0;var A=this.tryEntries[0].completion;if("throw"===A.type)throw A.arg;return this.rval},dispatchException:function(A){if(this.done)throw A;var g=this;function Q(B,Q){return i.type="throw",i.arg=A,g.next=B,Q&&(g.method="next",g.arg=I),!!Q}for(var C=this.tryEntries.length-1;C>=0;--C){var E=this.tryEntries[C],i=E.completion;if("root"===E.tryLoc)return Q("end");if(E.tryLoc<=this.prev){var o=B.call(E,"catchLoc"),D=B.call(E,"finallyLoc");if(o&&D){if(this.prev<E.catchLoc)return Q(E.catchLoc,!0);if(this.prev<E.finallyLoc)return Q(E.finallyLoc)}else if(o){if(this.prev<E.catchLoc)return Q(E.catchLoc,!0)}else{if(!D)throw new Error("try statement without catch or finally");if(this.prev<E.finallyLoc)return Q(E.finallyLoc)}}}},abrupt:function(A,I){for(var g=this.tryEntries.length-1;g>=0;--g){var Q=this.tryEntries[g];if(Q.tryLoc<=this.prev&&B.call(Q,"finallyLoc")&&this.prev<Q.finallyLoc){var C=Q;break}}C&&("break"===A||"continue"===A)&&C.tryLoc<=I&&I<=C.finallyLoc&&(C=null);var E=C?C.completion:{};return E.type=A,E.arg=I,C?(this.method="next",this.next=C.finallyLoc,h):this.complete(E)},complete:function(A,I){if("throw"===A.type)throw A.arg;return"break"===A.type||"continue"===A.type?this.next=A.arg:"return"===A.type?(this.rval=this.arg=A.arg,this.method="return",this.next="end"):"normal"===A.type&&I&&(this.next=I),h},finish:function(A){for(var I=this.tryEntries.length-1;I>=0;--I){var g=this.tryEntries[I];if(g.finallyLoc===A)return this.complete(g.completion,g.afterLoc),J(g),h}},catch:function(A){for(var I=this.tryEntries.length-1;I>=0;--I){var g=this.tryEntries[I];if(g.tryLoc===A){var B=g.completion;if("throw"===B.type){var Q=B.arg;J(g)}return Q}}throw new Error("illegal catch attempt")},delegateYield:function(A,g,B){return this.delegate={iterator:M(A),resultName:g,nextLoc:B},"next"===this.method&&(this.arg=I),h}},A}(A.exports);try{regeneratorRuntime=I}catch(A){"object"==typeof globalThis?globalThis.regeneratorRuntime=I:Function("r","regeneratorRuntime = r")(I)}},2043:(A,I,g)=>{A.exports=g(7458)},8327:(A,I,g)=>{var B,Q=(B=(B="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0)||"/index.js",function(A){var I,Q,C=void 0!==(A=A||{})?A:{};C.ready=new Promise((function(A,g){I=A,Q=g}));var E,i,o,D=Object.assign({},C),a=[],s="object"==typeof window,w="function"==typeof importScripts,t="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,G="";if(t){var h=g(981),F=g(1209);G=w?F.dirname(G)+"/":"//",E=(A,I)=>(A=v(A)?new URL(A):F.normalize(A),h.readFileSync(A,I?void 0:"utf8")),o=A=>{var I=E(A,!0);return I.buffer||(I=new Uint8Array(I)),I},i=(A,I,g)=>{A=v(A)?new URL(A):F.normalize(A),h.readFile(A,(function(A,B){A?g(A):I(B.buffer)}))},process.argv.length>1&&process.argv[1].replace(/\\\\/g,"/"),a=process.argv.slice(2),process.on("uncaughtException",(function(A){if(!(A instanceof P))throw A})),process.on("unhandledRejection",(function(A){throw A})),C.inspect=function(){return"[Emscripten Module object]"}}else(s||w)&&(w?G=self.location.href:"undefined"!=typeof document&&document.currentScript&&(G=document.currentScript.src),B&&(G=B),G=0!==G.indexOf("blob:")?G.substr(0,G.replace(/[?#].*/,"").lastIndexOf("/")+1):"",E=A=>{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.send(null),I.responseText},w&&(o=A=>{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.responseType="arraybuffer",I.send(null),new Uint8Array(I.response)}),i=(A,I,g)=>{var B=new XMLHttpRequest;B.open("GET",A,!0),B.responseType="arraybuffer",B.onload=()=>{200==B.status||0==B.status&&B.response?I(B.response):g()},B.onerror=g,B.send(null)});C.print||console.log.bind(console);var y,c=C.printErr||console.warn.bind(console);Object.assign(C,D),D=null,C.arguments&&(a=C.arguments),C.thisProgram&&C.thisProgram,C.quit&&C.quit,C.wasmBinary&&(y=C.wasmBinary);var r;C.noExitRuntime;"object"!=typeof WebAssembly&&x("no native wasm support detected");var N,R,e,n,S,U,k,J,H,M=!1,L="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function Y(A,I){return A?function(A,I,g){for(var B=I+g,Q=I;A[Q]&&!(Q>=B);)++Q;if(Q-I>16&&A.buffer&&L)return L.decode(A.subarray(I,Q));for(var C="";I<Q;){var E=A[I++];if(128&E){var i=63&A[I++];if(192!=(224&E)){var o=63&A[I++];if((E=224==(240&E)?(15&E)<<12|i<<6|o:(7&E)<<18|i<<12|o<<6|63&A[I++])<65536)C+=String.fromCharCode(E);else{var D=E-65536;C+=String.fromCharCode(55296|D>>10,56320|1023&D)}}else C+=String.fromCharCode((31&E)<<6|i)}else C+=String.fromCharCode(E)}return C}(e,A,I):""}function K(A,I,g){return function(A,I,g,B){if(!(B>0))return 0;for(var Q=g,C=g+B-1,E=0;E<A.length;++E){var i=A.charCodeAt(E);if(i>=55296&&i<=57343&&(i=65536+((1023&i)<<10)|1023&A.charCodeAt(++E)),i<=127){if(g>=C)break;I[g++]=i}else if(i<=2047){if(g+1>=C)break;I[g++]=192|i>>6,I[g++]=128|63&i}else if(i<=65535){if(g+2>=C)break;I[g++]=224|i>>12,I[g++]=128|i>>6&63,I[g++]=128|63&i}else{if(g+3>=C)break;I[g++]=240|i>>18,I[g++]=128|i>>12&63,I[g++]=128|i>>6&63,I[g++]=128|63&i}}return I[g]=0,g-Q}(A,e,I,g)}function d(A){N=A,C.HEAP8=R=new Int8Array(A),C.HEAP16=n=new Int16Array(A),C.HEAP32=U=new Int32Array(A),C.HEAPU8=e=new Uint8Array(A),C.HEAPU16=S=new Uint16Array(A),C.HEAPU32=k=new Uint32Array(A),C.HEAPF32=J=new Float32Array(A),C.HEAPF64=H=new Float64Array(A)}C.INITIAL_MEMORY;var l,f,u,q=[],p=[],b=[],W=0,Z=null,m=null;function x(A){C.onAbort&&C.onAbort(A),c(A="Aborted("+A+")"),M=!0,A+=". Build with -sASSERTIONS for more info.";var I=new WebAssembly.RuntimeError(A);throw Q(I),I}function T(A){return A.startsWith("data:application/octet-stream;base64,")}function v(A){return A.startsWith("file://")}function X(A){try{if(A==f&&y)return new Uint8Array(y);if(o)return o(A);throw"both async and sync fetching of the wasm failed"}catch(A){x(A)}}function P(A){this.name="ExitStatus",this.message="Program terminated with exit("+A+")",this.status=A}function V(A){for(;A.length>0;)A.shift()(C)}function O(A){this.excPtr=A,this.ptr=A-24,this.set_type=function(A){k[this.ptr+4>>2]=A},this.get_type=function(){return k[this.ptr+4>>2]},this.set_destructor=function(A){k[this.ptr+8>>2]=A},this.get_destructor=function(){return k[this.ptr+8>>2]},this.set_refcount=function(A){U[this.ptr>>2]=A},this.set_caught=function(A){A=A?1:0,R[this.ptr+12>>0]=A},this.get_caught=function(){return 0!=R[this.ptr+12>>0]},this.set_rethrown=function(A){A=A?1:0,R[this.ptr+13>>0]=A},this.get_rethrown=function(){return 0!=R[this.ptr+13>>0]},this.init=function(A,I){this.set_adjusted_ptr(0),this.set_type(A),this.set_destructor(I),this.set_refcount(0),this.set_caught(!1),this.set_rethrown(!1)},this.add_ref=function(){var A=U[this.ptr>>2];U[this.ptr>>2]=A+1},this.release_ref=function(){var A=U[this.ptr>>2];return U[this.ptr>>2]=A-1,1===A},this.set_adjusted_ptr=function(A){k[this.ptr+16>>2]=A},this.get_adjusted_ptr=function(){return k[this.ptr+16>>2]},this.get_exception_ptr=function(){if(dI(this.get_type()))return k[this.excPtr>>2];var A=this.get_adjusted_ptr();return 0!==A?A:this.excPtr}}T(f="charlswasm_decode.wasm")||(u=f,f=C.locateFile?C.locateFile(u,G):G+u);var j={};function z(A){for(;A.length;){var I=A.pop();A.pop()(I)}}function _(A){return this.fromWireType(U[A>>2])}var $={},AA={},IA={};function gA(A){if(void 0===A)return"_unknown";var I=(A=A.replace(/[^a-zA-Z0-9_]/g,"$")).charCodeAt(0);return I>=48&&I<=57?"_"+A:A}function BA(A,I){return A=gA(A),new Function("body","return function "+A+\'() {\\n    "use strict";    return body.apply(this, arguments);\\n};\\n\')(I)}function QA(A,I){var g=BA(I,(function(A){this.name=I,this.message=A;var g=new Error(A).stack;void 0!==g&&(this.stack=this.toString()+"\\n"+g.replace(/^Error(:[^\\n]*)?\\n/,""))}));return g.prototype=Object.create(A.prototype),g.prototype.constructor=g,g.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message},g}var CA=void 0;function EA(A){throw new CA(A)}function iA(A,I,g){function B(I){var B=g(I);B.length!==A.length&&EA("Mismatched type converter count");for(var Q=0;Q<A.length;++Q)tA(A[Q],B[Q])}A.forEach((function(A){IA[A]=I}));var Q=new Array(I.length),C=[],E=0;I.forEach(((A,I)=>{AA.hasOwnProperty(A)?Q[I]=AA[A]:(C.push(A),$.hasOwnProperty(A)||($[A]=[]),$[A].push((()=>{Q[I]=AA[A],++E===C.length&&B(Q)})))})),0===C.length&&B(Q)}function oA(A){switch(A){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+A)}}var DA=void 0;function aA(A){for(var I="",g=A;e[g];)I+=DA[e[g++]];return I}var sA=void 0;function wA(A){throw new sA(A)}function tA(A,I,g={}){if(!("argPackAdvance"in I))throw new TypeError("registerType registeredInstance requires argPackAdvance");var B=I.name;if(A||wA(\'type "\'+B+\'" must have a positive integer typeid pointer\'),AA.hasOwnProperty(A)){if(g.ignoreDuplicateRegistrations)return;wA("Cannot register type \'"+B+"\' twice")}if(AA[A]=I,delete IA[A],$.hasOwnProperty(A)){var Q=$[A];delete $[A],Q.forEach((A=>A()))}}function GA(A){if(!(this instanceof uA))return!1;if(!(A instanceof uA))return!1;for(var I=this.$$.ptrType.registeredClass,g=this.$$.ptr,B=A.$$.ptrType.registeredClass,Q=A.$$.ptr;I.baseClass;)g=I.upcast(g),I=I.baseClass;for(;B.baseClass;)Q=B.upcast(Q),B=B.baseClass;return I===B&&g===Q}function hA(A){wA(A.$$.ptrType.registeredClass.name+" instance already deleted")}var FA=!1;function yA(A){}function cA(A){A.count.value-=1,0===A.count.value&&function(A){A.smartPtr?A.smartPtrType.rawDestructor(A.smartPtr):A.ptrType.registeredClass.rawDestructor(A.ptr)}(A)}function rA(A,I,g){if(I===g)return A;if(void 0===g.baseClass)return null;var B=rA(A,I,g.baseClass);return null===B?null:g.downcast(B)}var NA={};function RA(){return Object.keys(JA).length}function eA(){var A=[];for(var I in JA)JA.hasOwnProperty(I)&&A.push(JA[I]);return A}var nA=[];function SA(){for(;nA.length;){var A=nA.pop();A.$$.deleteScheduled=!1,A.delete()}}var UA=void 0;function kA(A){UA=A,nA.length&&UA&&UA(SA)}var JA={};function HA(A,I){return I=function(A,I){for(void 0===I&&wA("ptr should not be undefined");A.baseClass;)I=A.upcast(I),A=A.baseClass;return I}(A,I),JA[I]}function MA(A,I){return I.ptrType&&I.ptr||EA("makeClassHandle requires ptr and ptrType"),!!I.smartPtrType!=!!I.smartPtr&&EA("Both smartPtrType and smartPtr must be specified"),I.count={value:1},YA(Object.create(A,{$$:{value:I}}))}function LA(A){var I=this.getPointee(A);if(!I)return this.destructor(A),null;var g=HA(this.registeredClass,I);if(void 0!==g){if(0===g.$$.count.value)return g.$$.ptr=I,g.$$.smartPtr=A,g.clone();var B=g.clone();return this.destructor(A),B}function Q(){return this.isSmartPointer?MA(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:I,smartPtrType:this,smartPtr:A}):MA(this.registeredClass.instancePrototype,{ptrType:this,ptr:A})}var C,E=this.registeredClass.getActualType(I),i=NA[E];if(!i)return Q.call(this);C=this.isConst?i.constPointerType:i.pointerType;var o=rA(I,this.registeredClass,C.registeredClass);return null===o?Q.call(this):this.isSmartPointer?MA(C.registeredClass.instancePrototype,{ptrType:C,ptr:o,smartPtrType:this,smartPtr:A}):MA(C.registeredClass.instancePrototype,{ptrType:C,ptr:o})}function YA(A){return"undefined"==typeof FinalizationRegistry?(YA=A=>A,A):(FA=new FinalizationRegistry((A=>{cA(A.$$)})),yA=A=>FA.unregister(A),(YA=A=>{var I=A.$$;if(I.smartPtr){var g={$$:I};FA.register(A,g,A)}return A})(A))}function KA(){if(this.$$.ptr||hA(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var A,I=YA(Object.create(Object.getPrototypeOf(this),{$$:{value:(A=this.$$,{count:A.count,deleteScheduled:A.deleteScheduled,preservePointerOnDelete:A.preservePointerOnDelete,ptr:A.ptr,ptrType:A.ptrType,smartPtr:A.smartPtr,smartPtrType:A.smartPtrType})}}));return I.$$.count.value+=1,I.$$.deleteScheduled=!1,I}function dA(){this.$$.ptr||hA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&wA("Object already scheduled for deletion"),yA(this),cA(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)}function lA(){return!this.$$.ptr}function fA(){return this.$$.ptr||hA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&wA("Object already scheduled for deletion"),nA.push(this),1===nA.length&&UA&&UA(SA),this.$$.deleteScheduled=!0,this}function uA(){}function qA(A,I,g){if(void 0===A[I].overloadTable){var B=A[I];A[I]=function(){return A[I].overloadTable.hasOwnProperty(arguments.length)||wA("Function \'"+g+"\' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+A[I].overloadTable+")!"),A[I].overloadTable[arguments.length].apply(this,arguments)},A[I].overloadTable=[],A[I].overloadTable[B.argCount]=B}}function pA(A,I,g){C.hasOwnProperty(A)?((void 0===g||void 0!==C[A].overloadTable&&void 0!==C[A].overloadTable[g])&&wA("Cannot register public name \'"+A+"\' twice"),qA(C,A,A),C.hasOwnProperty(g)&&wA("Cannot register multiple overloads of a function with the same number of arguments ("+g+")!"),C[A].overloadTable[g]=I):(C[A]=I,void 0!==g&&(C[A].numArguments=g))}function bA(A,I,g,B,Q,C,E,i){this.name=A,this.constructor=I,this.instancePrototype=g,this.rawDestructor=B,this.baseClass=Q,this.getActualType=C,this.upcast=E,this.downcast=i,this.pureVirtualFunctions=[]}function WA(A,I,g){for(;I!==g;)I.upcast||wA("Expected null or instance of "+g.name+", got an instance of "+I.name),A=I.upcast(A),I=I.baseClass;return A}function ZA(A,I){if(null===I)return this.isReference&&wA("null is not a valid "+this.name),0;I.$$||wA(\'Cannot pass "\'+aI(I)+\'" as a \'+this.name),I.$$.ptr||wA("Cannot pass deleted object as a pointer of type "+this.name);var g=I.$$.ptrType.registeredClass;return WA(I.$$.ptr,g,this.registeredClass)}function mA(A,I){var g;if(null===I)return this.isReference&&wA("null is not a valid "+this.name),this.isSmartPointer?(g=this.rawConstructor(),null!==A&&A.push(this.rawDestructor,g),g):0;I.$$||wA(\'Cannot pass "\'+aI(I)+\'" as a \'+this.name),I.$$.ptr||wA("Cannot pass deleted object as a pointer of type "+this.name),!this.isConst&&I.$$.ptrType.isConst&&wA("Cannot convert argument of type "+(I.$$.smartPtrType?I.$$.smartPtrType.name:I.$$.ptrType.name)+" to parameter type "+this.name);var B=I.$$.ptrType.registeredClass;if(g=WA(I.$$.ptr,B,this.registeredClass),this.isSmartPointer)switch(void 0===I.$$.smartPtr&&wA("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:I.$$.smartPtrType===this?g=I.$$.smartPtr:wA("Cannot convert argument of type "+(I.$$.smartPtrType?I.$$.smartPtrType.name:I.$$.ptrType.name)+" to parameter type "+this.name);break;case 1:g=I.$$.smartPtr;break;case 2:if(I.$$.smartPtrType===this)g=I.$$.smartPtr;else{var Q=I.clone();g=this.rawShare(g,DI.toHandle((function(){Q.delete()}))),null!==A&&A.push(this.rawDestructor,g)}break;default:wA("Unsupporting sharing policy")}return g}function xA(A,I){if(null===I)return this.isReference&&wA("null is not a valid "+this.name),0;I.$$||wA(\'Cannot pass "\'+aI(I)+\'" as a \'+this.name),I.$$.ptr||wA("Cannot pass deleted object as a pointer of type "+this.name),I.$$.ptrType.isConst&&wA("Cannot convert argument of type "+I.$$.ptrType.name+" to parameter type "+this.name);var g=I.$$.ptrType.registeredClass;return WA(I.$$.ptr,g,this.registeredClass)}function TA(A){return this.rawGetPointee&&(A=this.rawGetPointee(A)),A}function vA(A){this.rawDestructor&&this.rawDestructor(A)}function XA(A){null!==A&&A.delete()}function PA(A,I,g,B,Q,C,E,i,o,D,a){this.name=A,this.registeredClass=I,this.isReference=g,this.isConst=B,this.isSmartPointer=Q,this.pointeeType=C,this.sharingPolicy=E,this.rawGetPointee=i,this.rawConstructor=o,this.rawShare=D,this.rawDestructor=a,Q||void 0!==I.baseClass?this.toWireType=mA:B?(this.toWireType=ZA,this.destructorFunction=null):(this.toWireType=xA,this.destructorFunction=null)}function VA(A,I,g){C.hasOwnProperty(A)||EA("Replacing nonexistant public symbol"),void 0!==C[A].overloadTable&&void 0!==g?C[A].overloadTable[g]=I:(C[A]=I,C[A].argCount=g)}var OA=[];function jA(A){var I=OA[A];return I||(A>=OA.length&&(OA.length=A+1),OA[A]=I=l.get(A)),I}function zA(A,I,g){return A.includes("j")?function(A,I,g){var B=C["dynCall_"+A];return g&&g.length?B.apply(null,[I].concat(g)):B.call(null,I)}(A,I,g):jA(I).apply(null,g)}function _A(A,I){var g,B,Q,C=(A=aA(A)).includes("j")?(g=A,B=I,Q=[],function(){return Q.length=0,Object.assign(Q,arguments),zA(g,B,Q)}):jA(I);return"function"!=typeof C&&wA("unknown function pointer with signature "+A+": "+I),C}var $A=void 0;function AI(A){var I=HI(A),g=aA(I);return MI(I),g}function II(A,I){var g=[],B={};throw I.forEach((function A(I){B[I]||AA[I]||(IA[I]?IA[I].forEach(A):(g.push(I),B[I]=!0))})),new $A(A+": "+g.map(AI).join([", "]))}function gI(A,I){for(var g=[],B=0;B<A;B++)g.push(k[I+4*B>>2]);return g}function BI(A,I,g,B,Q){var C=I.length;C<2&&wA("argTypes array size mismatch! Must at least get return value and \'this\' types!");for(var E=null!==I[1]&&null!==g,i=!1,o=1;o<I.length;++o)if(null!==I[o]&&void 0===I[o].destructorFunction){i=!0;break}var D="void"!==I[0].name,a="",s="";for(o=0;o<C-2;++o)a+=(0!==o?", ":"")+"arg"+o,s+=(0!==o?", ":"")+"arg"+o+"Wired";var w="return function "+gA(A)+"("+a+") {\\nif (arguments.length !== "+(C-2)+") {\\nthrowBindingError(\'function "+A+" called with \' + arguments.length + \' arguments, expected "+(C-2)+" args!\');\\n}\\n";i&&(w+="var destructors = [];\\n");var t=i?"destructors":"null",G=["throwBindingError","invoker","fn","runDestructors","retType","classParam"],h=[wA,B,Q,z,I[0],I[1]];for(E&&(w+="var thisWired = classParam.toWireType("+t+", this);\\n"),o=0;o<C-2;++o)w+="var arg"+o+"Wired = argType"+o+".toWireType("+t+", arg"+o+"); // "+I[o+2].name+"\\n",G.push("argType"+o),h.push(I[o+2]);if(E&&(s="thisWired"+(s.length>0?", ":"")+s),w+=(D?"var rv = ":"")+"invoker(fn"+(s.length>0?", ":"")+s+");\\n",i)w+="runDestructors(destructors);\\n";else for(o=E?1:2;o<I.length;++o){var F=1===o?"thisWired":"arg"+(o-2)+"Wired";null!==I[o].destructorFunction&&(w+=F+"_dtor("+F+"); // "+I[o].name+"\\n",G.push(F+"_dtor"),h.push(I[o].destructorFunction))}return D&&(w+="var ret = retType.fromWireType(rv);\\nreturn ret;\\n"),w+="}\\n",G.push(w),function(A,I){if(!(A instanceof Function))throw new TypeError("new_ called with constructor type "+typeof A+" which is not a function");var g=BA(A.name||"unknownFunctionName",(function(){}));g.prototype=A.prototype;var B=new g,Q=A.apply(B,I);return Q instanceof Object?Q:B}(Function,G).apply(null,h)}var QI=[],CI=[{},{value:void 0},{value:null},{value:!0},{value:!1}];function EI(A){A>4&&0==--CI[A].refcount&&(CI[A]=void 0,QI.push(A))}function iI(){for(var A=0,I=5;I<CI.length;++I)void 0!==CI[I]&&++A;return A}function oI(){for(var A=5;A<CI.length;++A)if(void 0!==CI[A])return CI[A];return null}var DI={toValue:A=>(A||wA("Cannot use deleted val. handle = "+A),CI[A].value),toHandle:A=>{switch(A){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:var I=QI.length?QI.pop():CI.length;return CI[I]={refcount:1,value:A},I}}};function aI(A){if(null===A)return"null";var I=typeof A;return"object"===I||"array"===I||"function"===I?A.toString():""+A}function sI(A,I){switch(I){case 2:return function(A){return this.fromWireType(J[A>>2])};case 3:return function(A){return this.fromWireType(H[A>>3])};default:throw new TypeError("Unknown float type: "+A)}}function wI(A,I,g){switch(I){case 0:return g?function(A){return R[A]}:function(A){return e[A]};case 1:return g?function(A){return n[A>>1]}:function(A){return S[A>>1]};case 2:return g?function(A){return U[A>>2]}:function(A){return k[A>>2]};default:throw new TypeError("Unknown integer type: "+A)}}var tI="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0;function GI(A,I){for(var g=A,B=g>>1,Q=B+I/2;!(B>=Q)&&S[B];)++B;if((g=B<<1)-A>32&&tI)return tI.decode(e.subarray(A,g));for(var C="",E=0;!(E>=I/2);++E){var i=n[A+2*E>>1];if(0==i)break;C+=String.fromCharCode(i)}return C}function hI(A,I,g){if(void 0===g&&(g=2147483647),g<2)return 0;for(var B=I,Q=(g-=2)<2*A.length?g/2:A.length,C=0;C<Q;++C){var E=A.charCodeAt(C);n[I>>1]=E,I+=2}return n[I>>1]=0,I-B}function FI(A){return 2*A.length}function yI(A,I){for(var g=0,B="";!(g>=I/4);){var Q=U[A+4*g>>2];if(0==Q)break;if(++g,Q>=65536){var C=Q-65536;B+=String.fromCharCode(55296|C>>10,56320|1023&C)}else B+=String.fromCharCode(Q)}return B}function cI(A,I,g){if(void 0===g&&(g=2147483647),g<4)return 0;for(var B=I,Q=B+g-4,C=0;C<A.length;++C){var E=A.charCodeAt(C);if(E>=55296&&E<=57343&&(E=65536+((1023&E)<<10)|1023&A.charCodeAt(++C)),U[I>>2]=E,(I+=4)+4>Q)break}return U[I>>2]=0,I-B}function rI(A){for(var I=0,g=0;g<A.length;++g){var B=A.charCodeAt(g);B>=55296&&B<=57343&&++g,I+=4}return I}var NI={};function RI(){return"object"==typeof globalThis?globalThis:Function("return this")()}function eI(A,I){var g=AA[A];return void 0===g&&wA(I+" has unknown type "+AI(A)),g}var nI={};function SI(A){try{return r.grow(A-N.byteLength+65535>>>16),d(r.buffer),1}catch(A){}}CA=C.InternalError=QA(Error,"InternalError"),function(){for(var A=new Array(256),I=0;I<256;++I)A[I]=String.fromCharCode(I);DA=A}(),sA=C.BindingError=QA(Error,"BindingError"),uA.prototype.isAliasOf=GA,uA.prototype.clone=KA,uA.prototype.delete=dA,uA.prototype.isDeleted=lA,uA.prototype.deleteLater=fA,C.getInheritedInstanceCount=RA,C.getLiveInheritedInstances=eA,C.flushPendingDeletes=SA,C.setDelayFunction=kA,PA.prototype.getPointee=TA,PA.prototype.destructor=vA,PA.prototype.argPackAdvance=8,PA.prototype.readValueFromPointer=_,PA.prototype.deleteObject=XA,PA.prototype.fromWireType=LA,$A=C.UnboundTypeError=QA(Error,"UnboundTypeError"),C.count_emval_handles=iI,C.get_first_emval=oI;var UI,kI={h:function(A,I,g){throw new O(A).init(I,g),A},q:function(A){var I=j[A];delete j[A];var g=I.rawConstructor,B=I.rawDestructor,Q=I.fields;iA([A],Q.map((A=>A.getterReturnType)).concat(Q.map((A=>A.setterArgumentType))),(A=>{var C={};return Q.forEach(((I,g)=>{var B=I.fieldName,E=A[g],i=I.getter,o=I.getterContext,D=A[g+Q.length],a=I.setter,s=I.setterContext;C[B]={read:A=>E.fromWireType(i(o,A)),write:(A,I)=>{var g=[];a(s,A,D.toWireType(g,I)),z(g)}}})),[{name:I.name,fromWireType:function(A){var I={};for(var g in C)I[g]=C[g].read(A);return B(A),I},toWireType:function(A,I){for(var Q in C)if(!(Q in I))throw new TypeError(\'Missing field:  "\'+Q+\'"\');var E=g();for(Q in C)C[Q].write(E,I[Q]);return null!==A&&A.push(B,E),E},argPackAdvance:8,readValueFromPointer:_,destructorFunction:B}]}))},r:function(A,I,g,B,Q){},w:function(A,I,g,B,Q){var C=oA(g);tA(A,{name:I=aA(I),fromWireType:function(A){return!!A},toWireType:function(A,I){return I?B:Q},argPackAdvance:8,readValueFromPointer:function(A){var B;if(1===g)B=R;else if(2===g)B=n;else{if(4!==g)throw new TypeError("Unknown boolean type size: "+I);B=U}return this.fromWireType(B[A>>C])},destructorFunction:null})},p:function(A,I,g,B,Q,C,E,i,o,D,a,s,w){a=aA(a),C=_A(Q,C),i&&(i=_A(E,i)),D&&(D=_A(o,D)),w=_A(s,w);var t=gA(a);pA(t,(function(){II("Cannot construct "+a+" due to unbound types",[B])})),iA([A,I,g],B?[B]:[],(function(I){var g,Q;I=I[0],Q=B?(g=I.registeredClass).instancePrototype:uA.prototype;var E=BA(t,(function(){if(Object.getPrototypeOf(this)!==o)throw new sA("Use \'new\' to construct "+a);if(void 0===s.constructor_body)throw new sA(a+" has no accessible constructor");var A=s.constructor_body[arguments.length];if(void 0===A)throw new sA("Tried to invoke ctor of "+a+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(s.constructor_body).toString()+") parameters instead!");return A.apply(this,arguments)})),o=Object.create(Q,{constructor:{value:E}});E.prototype=o;var s=new bA(a,E,o,w,g,C,i,D),G=new PA(a,s,!0,!1,!1),h=new PA(a+"*",s,!1,!1,!1),F=new PA(a+" const*",s,!1,!0,!1);return NA[A]={pointerType:h,constPointerType:F},VA(t,E),[G,h,F]}))},o:function(A,I,g,B,Q,C){var E;I>0||x(E);var i=gI(I,g);Q=_A(B,Q),iA([],[A],(function(A){var g="constructor "+(A=A[0]).name;if(void 0===A.registeredClass.constructor_body&&(A.registeredClass.constructor_body=[]),void 0!==A.registeredClass.constructor_body[I-1])throw new sA("Cannot register multiple constructors with identical number of parameters ("+(I-1)+") for class \'"+A.name+"\'! Overload resolution is currently only performed using the parameter count, not actual type info!");return A.registeredClass.constructor_body[I-1]=()=>{II("Cannot construct "+A.name+" due to unbound types",i)},iA([],i,(function(B){return B.splice(1,0,null),A.registeredClass.constructor_body[I-1]=BI(g,B,null,Q,C),[]})),[]}))},c:function(A,I,g,B,Q,C,E,i){var o=gI(g,B);I=aA(I),C=_A(Q,C),iA([],[A],(function(A){var B=(A=A[0]).name+"."+I;function Q(){II("Cannot call "+B+" due to unbound types",o)}I.startsWith("@@")&&(I=Symbol[I.substring(2)]),i&&A.registeredClass.pureVirtualFunctions.push(I);var D=A.registeredClass.instancePrototype,a=D[I];return void 0===a||void 0===a.overloadTable&&a.className!==A.name&&a.argCount===g-2?(Q.argCount=g-2,Q.className=A.name,D[I]=Q):(qA(D,I,B),D[I].overloadTable[g-2]=Q),iA([],o,(function(Q){var i=BI(B,Q,A,C,E);return void 0===D[I].overloadTable?(i.argCount=g-2,D[I]=i):D[I].overloadTable[g-2]=i,[]})),[]}))},v:function(A,I){tA(A,{name:I=aA(I),fromWireType:function(A){var I=DI.toValue(A);return EI(A),I},toWireType:function(A,I){return DI.toHandle(I)},argPackAdvance:8,readValueFromPointer:_,destructorFunction:null})},k:function(A,I,g){var B=oA(g);tA(A,{name:I=aA(I),fromWireType:function(A){return A},toWireType:function(A,I){return I},argPackAdvance:8,readValueFromPointer:sI(I,B),destructorFunction:null})},e:function(A,I,g,B,Q,C){var E=gI(I,g);A=aA(A),Q=_A(B,Q),pA(A,(function(){II("Cannot call "+A+" due to unbound types",E)}),I-1),iA([],E,(function(g){var B=[g[0],null].concat(g.slice(1));return VA(A,BI(A,B,null,Q,C),I-1),[]}))},b:function(A,I,g,B,Q){I=aA(I),-1===Q&&(Q=4294967295);var C=oA(g),E=A=>A;if(0===B){var i=32-8*g;E=A=>A<<i>>>i}var o=I.includes("unsigned");tA(A,{name:I,fromWireType:E,toWireType:o?function(A,I){return this.name,I>>>0}:function(A,I){return this.name,I},argPackAdvance:8,readValueFromPointer:wI(I,C,0!==B),destructorFunction:null})},a:function(A,I,g){var B=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][I];function Q(A){var I=k,g=I[A>>=2],Q=I[A+1];return new B(N,Q,g)}tA(A,{name:g=aA(g),fromWireType:Q,argPackAdvance:8,readValueFromPointer:Q},{ignoreDuplicateRegistrations:!0})},j:function(A,I){var g="std::string"===(I=aA(I));tA(A,{name:I,fromWireType:function(A){var I,B=k[A>>2],Q=A+4;if(g)for(var C=Q,E=0;E<=B;++E){var i=Q+E;if(E==B||0==e[i]){var o=Y(C,i-C);void 0===I?I=o:(I+=String.fromCharCode(0),I+=o),C=i+1}}else{var D=new Array(B);for(E=0;E<B;++E)D[E]=String.fromCharCode(e[Q+E]);I=D.join("")}return MI(A),I},toWireType:function(A,I){var B;I instanceof ArrayBuffer&&(I=new Uint8Array(I));var Q="string"==typeof I;Q||I instanceof Uint8Array||I instanceof Uint8ClampedArray||I instanceof Int8Array||wA("Cannot pass non-string to std::string"),B=g&&Q?function(A){for(var I=0,g=0;g<A.length;++g){var B=A.charCodeAt(g);B<=127?I++:B<=2047?I+=2:B>=55296&&B<=57343?(I+=4,++g):I+=3}return I}(I):I.length;var C=JI(4+B+1),E=C+4;if(k[C>>2]=B,g&&Q)K(I,E,B+1);else if(Q)for(var i=0;i<B;++i){var o=I.charCodeAt(i);o>255&&(MI(E),wA("String has UTF-16 code units that do not fit in 8 bits")),e[E+i]=o}else for(i=0;i<B;++i)e[E+i]=I[i];return null!==A&&A.push(MI,C),C},argPackAdvance:8,readValueFromPointer:_,destructorFunction:function(A){MI(A)}})},g:function(A,I,g){var B,Q,C,E,i;g=aA(g),2===I?(B=GI,Q=hI,E=FI,C=()=>S,i=1):4===I&&(B=yI,Q=cI,E=rI,C=()=>k,i=2),tA(A,{name:g,fromWireType:function(A){for(var g,Q=k[A>>2],E=C(),o=A+4,D=0;D<=Q;++D){var a=A+4+D*I;if(D==Q||0==E[a>>i]){var s=B(o,a-o);void 0===g?g=s:(g+=String.fromCharCode(0),g+=s),o=a+I}}return MI(A),g},toWireType:function(A,B){"string"!=typeof B&&wA("Cannot pass non-string to C++ string type "+g);var C=E(B),o=JI(4+C+I);return k[o>>2]=C>>i,Q(B,o+4,C+I),null!==A&&A.push(MI,o),o},argPackAdvance:8,readValueFromPointer:_,destructorFunction:function(A){MI(A)}})},u:function(A,I,g,B,Q,C){j[A]={name:aA(I),rawConstructor:_A(g,B),rawDestructor:_A(Q,C),fields:[]}},d:function(A,I,g,B,Q,C,E,i,o,D){j[A].fields.push({fieldName:aA(I),getterReturnType:g,getter:_A(B,Q),getterContext:C,setterArgumentType:E,setter:_A(i,o),setterContext:D})},x:function(A,I){tA(A,{isVoid:!0,name:I=aA(I),argPackAdvance:0,fromWireType:function(){},toWireType:function(A,I){}})},i:EI,m:function(A){return 0===A?DI.toHandle(RI()):(A=void 0===(g=NI[I=A])?aA(I):g,DI.toHandle(RI()[A]));var I,g},l:function(A){A>4&&(CI[A].refcount+=1)},y:function(A,I,g,B){A=DI.toValue(A);var Q=nI[I];return Q||(Q=function(A){for(var I="",g=0;g<A;++g)I+=(0!==g?", ":"")+"arg"+g;var B="return function emval_allocator_"+A+"(constructor, argTypes, args) {\\n  var HEAPU32 = getMemory();\\n";for(g=0;g<A;++g)B+="var argType"+g+" = requireRegisteredType(HEAPU32[((argTypes)>>2)], \'parameter "+g+"\');\\nvar arg"+g+" = argType"+g+".readValueFromPointer(args);\\nargs += argType"+g+"[\'argPackAdvance\'];\\nargTypes += 4;\\n";return B+="var obj = new constructor("+I+");\\nreturn valueToHandle(obj);\\n}\\n",new Function("requireRegisteredType","Module","valueToHandle","getMemory",B)(eI,C,DI.toHandle,(()=>k))}(I),nI[I]=Q),Q(A,g,B)},n:function(A,I){var g=(A=eI(A,"_emval_take_value")).readValueFromPointer(I);return DI.toHandle(g)},f:function(){x("")},t:function(A,I,g){e.copyWithin(A,I,I+g)},s:function(A){var I,g,B=e.length,Q=2147483648;if((A>>>=0)>Q)return!1;for(var C=1;C<=4;C*=2){var E=B*(1+.2/C);if(E=Math.min(E,A+100663296),SI(Math.min(Q,(I=Math.max(A,E))+((g=65536)-I%g)%g)))return!0}return!1}},JI=(function(){var A={a:kI};function I(A,I){var g,B=A.exports;C.asm=B,d((r=C.asm.z).buffer),l=C.asm.C,g=C.asm.A,p.unshift(g),function(A){if(W--,C.monitorRunDependencies&&C.monitorRunDependencies(W),0==W&&(null!==Z&&(clearInterval(Z),Z=null),m)){var I=m;m=null,I()}}()}function g(A){I(A.instance)}function B(I){return function(){if(!y&&(s||w)){if("function"==typeof fetch&&!v(f))return fetch(f,{credentials:"same-origin"}).then((function(A){if(!A.ok)throw"failed to load wasm binary file at \'"+f+"\'";return A.arrayBuffer()})).catch((function(){return X(f)}));if(i)return new Promise((function(A,I){i(f,(function(I){A(new Uint8Array(I))}),I)}))}return Promise.resolve().then((function(){return X(f)}))}().then((function(I){return WebAssembly.instantiate(I,A)})).then((function(A){return A})).then(I,(function(A){c("failed to asynchronously prepare wasm: "+A),x(A)}))}if(W++,C.monitorRunDependencies&&C.monitorRunDependencies(W),C.instantiateWasm)try{return C.instantiateWasm(A,I)}catch(A){c("Module.instantiateWasm callback failed with error: "+A),Q(A)}(y||"function"!=typeof WebAssembly.instantiateStreaming||T(f)||v(f)||t||"function"!=typeof fetch?B(g):fetch(f,{credentials:"same-origin"}).then((function(I){return WebAssembly.instantiateStreaming(I,A).then(g,(function(A){return c("wasm streaming compile failed: "+A),c("falling back to ArrayBuffer instantiation"),B(g)}))}))).catch(Q)}(),C.___wasm_call_ctors=function(){return(C.___wasm_call_ctors=C.asm.A).apply(null,arguments)},C._malloc=function(){return(JI=C._malloc=C.asm.B).apply(null,arguments)}),HI=C.___getTypeName=function(){return(HI=C.___getTypeName=C.asm.D).apply(null,arguments)},MI=(C.__embind_initialize_bindings=function(){return(C.__embind_initialize_bindings=C.asm.E).apply(null,arguments)},C._free=function(){return(MI=C._free=C.asm.F).apply(null,arguments)}),LI=C.stackSave=function(){return(LI=C.stackSave=C.asm.G).apply(null,arguments)},YI=C.stackRestore=function(){return(YI=C.stackRestore=C.asm.H).apply(null,arguments)},KI=C.stackAlloc=function(){return(KI=C.stackAlloc=C.asm.I).apply(null,arguments)},dI=C.___cxa_is_pointer_type=function(){return(dI=C.___cxa_is_pointer_type=C.asm.J).apply(null,arguments)};function lI(A){function g(){UI||(UI=!0,C.calledRun=!0,M||(V(p),I(C),C.onRuntimeInitialized&&C.onRuntimeInitialized(),function(){if(C.postRun)for("function"==typeof C.postRun&&(C.postRun=[C.postRun]);C.postRun.length;)A=C.postRun.shift(),b.unshift(A);var A;V(b)}()))}A=A||a,W>0||(function(){if(C.preRun)for("function"==typeof C.preRun&&(C.preRun=[C.preRun]);C.preRun.length;)A=C.preRun.shift(),q.unshift(A);var A;V(q)}(),W>0||(C.setStatus?(C.setStatus("Running..."),setTimeout((function(){setTimeout((function(){C.setStatus("")}),1),g()}),1)):g()))}if(C.ccall=function(A,I,g,B,Q){var E={string:A=>{var I=0;if(null!=A&&0!==A){var g=1+(A.length<<2);K(A,I=KI(g),g)}return I},array:A=>{var I=KI(A.length);return function(A,I){R.set(A,I)}(A,I),I}},i=function(A){return C["_"+A]}(A),o=[],D=0;if(B)for(var a=0;a<B.length;a++){var s=E[g[a]];s?(0===D&&(D=LI()),o[a]=s(B[a])):o[a]=B[a]}var w=i.apply(null,o);return w=function(A){return 0!==D&&YI(D),function(A){return"string"===I?Y(A):"boolean"===I?Boolean(A):A}(A)}(w)},m=function A(){UI||lI(),UI||(m=A)},C.preInit)for("function"==typeof C.preInit&&(C.preInit=[C.preInit]);C.preInit.length>0;)C.preInit.pop()();return lI(),A.ready});A.exports=Q},9400:(A,I,g)=>{var B,Q=(B=(B="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0)||"/index.js",function(A){var I,Q,C=void 0!==(A=A||{})?A:{};C.ready=new Promise((function(A,g){I=A,Q=g}));var E,i,o,D=Object.assign({},C),a=[],s="./this.program",w=(A,I)=>{throw I},t="object"==typeof window,G="function"==typeof importScripts,h="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,F="";if(h){var y=g(1973),c=g(378);F=G?c.dirname(F)+"/":"//",E=(A,I)=>(A=z(A)?new URL(A):c.normalize(A),y.readFileSync(A,I?void 0:"utf8")),o=A=>{var I=E(A,!0);return I.buffer||(I=new Uint8Array(I)),I},i=(A,I,g)=>{A=z(A)?new URL(A):c.normalize(A),y.readFile(A,(function(A,B){A?g(A):I(B.buffer)}))},process.argv.length>1&&(s=process.argv[1].replace(/\\\\/g,"/")),a=process.argv.slice(2),process.on("uncaughtException",(function(A){if(!(A instanceof $))throw A})),process.on("unhandledRejection",(function(A){throw A})),w=(A,I)=>{if(x())throw process.exitCode=A,I;var g;(g=I)instanceof $||R("exiting due to exception: "+g),process.exit(A)},C.inspect=function(){return"[Emscripten Module object]"}}else(t||G)&&(G?F=self.location.href:"undefined"!=typeof document&&document.currentScript&&(F=document.currentScript.src),B&&(F=B),F=0!==F.indexOf("blob:")?F.substr(0,F.replace(/[?#].*/,"").lastIndexOf("/")+1):"",E=A=>{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.send(null),I.responseText},G&&(o=A=>{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.responseType="arraybuffer",I.send(null),new Uint8Array(I.response)}),i=(A,I,g)=>{var B=new XMLHttpRequest;B.open("GET",A,!0),B.responseType="arraybuffer",B.onload=()=>{200==B.status||0==B.status&&B.response?I(B.response):g()},B.onerror=g,B.send(null)});var r,N=C.print||console.log.bind(console),R=C.printErr||console.warn.bind(console);Object.assign(C,D),D=null,C.arguments&&(a=C.arguments),C.thisProgram&&(s=C.thisProgram),C.quit&&(w=C.quit),C.wasmBinary&&(r=C.wasmBinary);var e,n=C.noExitRuntime||!0;"object"!=typeof WebAssembly&&O("no native wasm support detected");var S,U,k,J,H,M,L,Y,K,d=!1,l="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function f(A,I,g){for(var B=I+g,Q=I;A[Q]&&!(Q>=B);)++Q;if(Q-I>16&&A.buffer&&l)return l.decode(A.subarray(I,Q));for(var C="";I<Q;){var E=A[I++];if(128&E){var i=63&A[I++];if(192!=(224&E)){var o=63&A[I++];if((E=224==(240&E)?(15&E)<<12|i<<6|o:(7&E)<<18|i<<12|o<<6|63&A[I++])<65536)C+=String.fromCharCode(E);else{var D=E-65536;C+=String.fromCharCode(55296|D>>10,56320|1023&D)}}else C+=String.fromCharCode((31&E)<<6|i)}else C+=String.fromCharCode(E)}return C}function u(A,I){return A?f(k,A,I):""}function q(A,I,g){return function(A,I,g,B){if(!(B>0))return 0;for(var Q=g,C=g+B-1,E=0;E<A.length;++E){var i=A.charCodeAt(E);if(i>=55296&&i<=57343&&(i=65536+((1023&i)<<10)|1023&A.charCodeAt(++E)),i<=127){if(g>=C)break;I[g++]=i}else if(i<=2047){if(g+1>=C)break;I[g++]=192|i>>6,I[g++]=128|63&i}else if(i<=65535){if(g+2>=C)break;I[g++]=224|i>>12,I[g++]=128|i>>6&63,I[g++]=128|63&i}else{if(g+3>=C)break;I[g++]=240|i>>18,I[g++]=128|i>>12&63,I[g++]=128|i>>6&63,I[g++]=128|63&i}}return I[g]=0,g-Q}(A,k,I,g)}function p(A){S=A,C.HEAP8=U=new Int8Array(A),C.HEAP16=J=new Int16Array(A),C.HEAP32=M=new Int32Array(A),C.HEAPU8=k=new Uint8Array(A),C.HEAPU16=H=new Uint16Array(A),C.HEAPU32=L=new Uint32Array(A),C.HEAPF32=Y=new Float32Array(A),C.HEAPF64=K=new Float64Array(A)}C.INITIAL_MEMORY;var b,W=[],Z=[],m=[];function x(){return n}var T,v,X=0,P=null,V=null;function O(A){C.onAbort&&C.onAbort(A),R(A="Aborted("+A+")"),d=!0,A+=". Build with -sASSERTIONS for more info.";var I=new WebAssembly.RuntimeError(A);throw Q(I),I}function j(A){return A.startsWith("data:application/octet-stream;base64,")}function z(A){return A.startsWith("file://")}function _(A){try{if(A==T&&r)return new Uint8Array(r);if(o)return o(A);throw"both async and sync fetching of the wasm failed"}catch(A){O(A)}}function $(A){this.name="ExitStatus",this.message="Program terminated with exit("+A+")",this.status=A}function AA(A){for(;A.length>0;)A.shift()(C)}function IA(A){this.excPtr=A,this.ptr=A-24,this.set_type=function(A){L[this.ptr+4>>2]=A},this.get_type=function(){return L[this.ptr+4>>2]},this.set_destructor=function(A){L[this.ptr+8>>2]=A},this.get_destructor=function(){return L[this.ptr+8>>2]},this.set_refcount=function(A){M[this.ptr>>2]=A},this.set_caught=function(A){A=A?1:0,U[this.ptr+12>>0]=A},this.get_caught=function(){return 0!=U[this.ptr+12>>0]},this.set_rethrown=function(A){A=A?1:0,U[this.ptr+13>>0]=A},this.get_rethrown=function(){return 0!=U[this.ptr+13>>0]},this.init=function(A,I){this.set_adjusted_ptr(0),this.set_type(A),this.set_destructor(I),this.set_refcount(0),this.set_caught(!1),this.set_rethrown(!1)},this.add_ref=function(){var A=M[this.ptr>>2];M[this.ptr>>2]=A+1},this.release_ref=function(){var A=M[this.ptr>>2];return M[this.ptr>>2]=A-1,1===A},this.set_adjusted_ptr=function(A){L[this.ptr+16>>2]=A},this.get_adjusted_ptr=function(){return L[this.ptr+16>>2]},this.get_exception_ptr=function(){if(xI(this.get_type()))return L[this.excPtr>>2];var A=this.get_adjusted_ptr();return 0!==A?A:this.excPtr}}j(T="libjpegturbowasm_decode.wasm")||(v=T,T=C.locateFile?C.locateFile(v,F):F+v);var gA={};function BA(A){for(;A.length;){var I=A.pop();A.pop()(I)}}function QA(A){return this.fromWireType(M[A>>2])}var CA={},EA={},iA={};function oA(A){if(void 0===A)return"_unknown";var I=(A=A.replace(/[^a-zA-Z0-9_]/g,"$")).charCodeAt(0);return I>=48&&I<=57?"_"+A:A}function DA(A,I){return A=oA(A),new Function("body","return function "+A+\'() {\\n    "use strict";    return body.apply(this, arguments);\\n};\\n\')(I)}function aA(A,I){var g=DA(I,(function(A){this.name=I,this.message=A;var g=new Error(A).stack;void 0!==g&&(this.stack=this.toString()+"\\n"+g.replace(/^Error(:[^\\n]*)?\\n/,""))}));return g.prototype=Object.create(A.prototype),g.prototype.constructor=g,g.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message},g}var sA=void 0;function wA(A){throw new sA(A)}function tA(A,I,g){function B(I){var B=g(I);B.length!==A.length&&wA("Mismatched type converter count");for(var Q=0;Q<A.length;++Q)rA(A[Q],B[Q])}A.forEach((function(A){iA[A]=I}));var Q=new Array(I.length),C=[],E=0;I.forEach(((A,I)=>{EA.hasOwnProperty(A)?Q[I]=EA[A]:(C.push(A),CA.hasOwnProperty(A)||(CA[A]=[]),CA[A].push((()=>{Q[I]=EA[A],++E===C.length&&B(Q)})))})),0===C.length&&B(Q)}function GA(A){switch(A){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+A)}}var hA=void 0;function FA(A){for(var I="",g=A;k[g];)I+=hA[k[g++]];return I}var yA=void 0;function cA(A){throw new yA(A)}function rA(A,I,g={}){if(!("argPackAdvance"in I))throw new TypeError("registerType registeredInstance requires argPackAdvance");var B=I.name;if(A||cA(\'type "\'+B+\'" must have a positive integer typeid pointer\'),EA.hasOwnProperty(A)){if(g.ignoreDuplicateRegistrations)return;cA("Cannot register type \'"+B+"\' twice")}if(EA[A]=I,delete iA[A],CA.hasOwnProperty(A)){var Q=CA[A];delete CA[A],Q.forEach((A=>A()))}}function NA(A){if(!(this instanceof mA))return!1;if(!(A instanceof mA))return!1;for(var I=this.$$.ptrType.registeredClass,g=this.$$.ptr,B=A.$$.ptrType.registeredClass,Q=A.$$.ptr;I.baseClass;)g=I.upcast(g),I=I.baseClass;for(;B.baseClass;)Q=B.upcast(Q),B=B.baseClass;return I===B&&g===Q}function RA(A){cA(A.$$.ptrType.registeredClass.name+" instance already deleted")}var eA=!1;function nA(A){}function SA(A){A.count.value-=1,0===A.count.value&&function(A){A.smartPtr?A.smartPtrType.rawDestructor(A.smartPtr):A.ptrType.registeredClass.rawDestructor(A.ptr)}(A)}function UA(A,I,g){if(I===g)return A;if(void 0===g.baseClass)return null;var B=UA(A,I,g.baseClass);return null===B?null:g.downcast(B)}var kA={};function JA(){return Object.keys(dA).length}function HA(){var A=[];for(var I in dA)dA.hasOwnProperty(I)&&A.push(dA[I]);return A}var MA=[];function LA(){for(;MA.length;){var A=MA.pop();A.$$.deleteScheduled=!1,A.delete()}}var YA=void 0;function KA(A){YA=A,MA.length&&YA&&YA(LA)}var dA={};function lA(A,I){return I=function(A,I){for(void 0===I&&cA("ptr should not be undefined");A.baseClass;)I=A.upcast(I),A=A.baseClass;return I}(A,I),dA[I]}function fA(A,I){return I.ptrType&&I.ptr||wA("makeClassHandle requires ptr and ptrType"),!!I.smartPtrType!=!!I.smartPtr&&wA("Both smartPtrType and smartPtr must be specified"),I.count={value:1},qA(Object.create(A,{$$:{value:I}}))}function uA(A){var I=this.getPointee(A);if(!I)return this.destructor(A),null;var g=lA(this.registeredClass,I);if(void 0!==g){if(0===g.$$.count.value)return g.$$.ptr=I,g.$$.smartPtr=A,g.clone();var B=g.clone();return this.destructor(A),B}function Q(){return this.isSmartPointer?fA(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:I,smartPtrType:this,smartPtr:A}):fA(this.registeredClass.instancePrototype,{ptrType:this,ptr:A})}var C,E=this.registeredClass.getActualType(I),i=kA[E];if(!i)return Q.call(this);C=this.isConst?i.constPointerType:i.pointerType;var o=UA(I,this.registeredClass,C.registeredClass);return null===o?Q.call(this):this.isSmartPointer?fA(C.registeredClass.instancePrototype,{ptrType:C,ptr:o,smartPtrType:this,smartPtr:A}):fA(C.registeredClass.instancePrototype,{ptrType:C,ptr:o})}function qA(A){return"undefined"==typeof FinalizationRegistry?(qA=A=>A,A):(eA=new FinalizationRegistry((A=>{SA(A.$$)})),nA=A=>eA.unregister(A),(qA=A=>{var I=A.$$;if(I.smartPtr){var g={$$:I};eA.register(A,g,A)}return A})(A))}function pA(){if(this.$$.ptr||RA(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var A,I=qA(Object.create(Object.getPrototypeOf(this),{$$:{value:(A=this.$$,{count:A.count,deleteScheduled:A.deleteScheduled,preservePointerOnDelete:A.preservePointerOnDelete,ptr:A.ptr,ptrType:A.ptrType,smartPtr:A.smartPtr,smartPtrType:A.smartPtrType})}}));return I.$$.count.value+=1,I.$$.deleteScheduled=!1,I}function bA(){this.$$.ptr||RA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&cA("Object already scheduled for deletion"),nA(this),SA(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)}function WA(){return!this.$$.ptr}function ZA(){return this.$$.ptr||RA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&cA("Object already scheduled for deletion"),MA.push(this),1===MA.length&&YA&&YA(LA),this.$$.deleteScheduled=!0,this}function mA(){}function xA(A,I,g){if(void 0===A[I].overloadTable){var B=A[I];A[I]=function(){return A[I].overloadTable.hasOwnProperty(arguments.length)||cA("Function \'"+g+"\' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+A[I].overloadTable+")!"),A[I].overloadTable[arguments.length].apply(this,arguments)},A[I].overloadTable=[],A[I].overloadTable[B.argCount]=B}}function TA(A,I,g,B,Q,C,E,i){this.name=A,this.constructor=I,this.instancePrototype=g,this.rawDestructor=B,this.baseClass=Q,this.getActualType=C,this.upcast=E,this.downcast=i,this.pureVirtualFunctions=[]}function vA(A,I,g){for(;I!==g;)I.upcast||cA("Expected null or instance of "+g.name+", got an instance of "+I.name),A=I.upcast(A),I=I.baseClass;return A}function XA(A,I){if(null===I)return this.isReference&&cA("null is not a valid "+this.name),0;I.$$||cA(\'Cannot pass "\'+GI(I)+\'" as a \'+this.name),I.$$.ptr||cA("Cannot pass deleted object as a pointer of type "+this.name);var g=I.$$.ptrType.registeredClass;return vA(I.$$.ptr,g,this.registeredClass)}function PA(A,I){var g;if(null===I)return this.isReference&&cA("null is not a valid "+this.name),this.isSmartPointer?(g=this.rawConstructor(),null!==A&&A.push(this.rawDestructor,g),g):0;I.$$||cA(\'Cannot pass "\'+GI(I)+\'" as a \'+this.name),I.$$.ptr||cA("Cannot pass deleted object as a pointer of type "+this.name),!this.isConst&&I.$$.ptrType.isConst&&cA("Cannot convert argument of type "+(I.$$.smartPtrType?I.$$.smartPtrType.name:I.$$.ptrType.name)+" to parameter type "+this.name);var B=I.$$.ptrType.registeredClass;if(g=vA(I.$$.ptr,B,this.registeredClass),this.isSmartPointer)switch(void 0===I.$$.smartPtr&&cA("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:I.$$.smartPtrType===this?g=I.$$.smartPtr:cA("Cannot convert argument of type "+(I.$$.smartPtrType?I.$$.smartPtrType.name:I.$$.ptrType.name)+" to parameter type "+this.name);break;case 1:g=I.$$.smartPtr;break;case 2:if(I.$$.smartPtrType===this)g=I.$$.smartPtr;else{var Q=I.clone();g=this.rawShare(g,tI.toHandle((function(){Q.delete()}))),null!==A&&A.push(this.rawDestructor,g)}break;default:cA("Unsupporting sharing policy")}return g}function VA(A,I){if(null===I)return this.isReference&&cA("null is not a valid "+this.name),0;I.$$||cA(\'Cannot pass "\'+GI(I)+\'" as a \'+this.name),I.$$.ptr||cA("Cannot pass deleted object as a pointer of type "+this.name),I.$$.ptrType.isConst&&cA("Cannot convert argument of type "+I.$$.ptrType.name+" to parameter type "+this.name);var g=I.$$.ptrType.registeredClass;return vA(I.$$.ptr,g,this.registeredClass)}function OA(A){return this.rawGetPointee&&(A=this.rawGetPointee(A)),A}function jA(A){this.rawDestructor&&this.rawDestructor(A)}function zA(A){null!==A&&A.delete()}function _A(A,I,g,B,Q,C,E,i,o,D,a){this.name=A,this.registeredClass=I,this.isReference=g,this.isConst=B,this.isSmartPointer=Q,this.pointeeType=C,this.sharingPolicy=E,this.rawGetPointee=i,this.rawConstructor=o,this.rawShare=D,this.rawDestructor=a,Q||void 0!==I.baseClass?this.toWireType=PA:B?(this.toWireType=XA,this.destructorFunction=null):(this.toWireType=VA,this.destructorFunction=null)}var $A=[];function AI(A){var I=$A[A];return I||(A>=$A.length&&($A.length=A+1),$A[A]=I=b.get(A)),I}function II(A,I,g){return A.includes("j")?function(A,I,g){var B=C["dynCall_"+A];return g&&g.length?B.apply(null,[I].concat(g)):B.call(null,I)}(A,I,g):AI(I).apply(null,g)}function gI(A,I){var g,B,Q,C=(A=FA(A)).includes("j")?(g=A,B=I,Q=[],function(){return Q.length=0,Object.assign(Q,arguments),II(g,B,Q)}):AI(I);return"function"!=typeof C&&cA("unknown function pointer with signature "+A+": "+I),C}var BI=void 0;function QI(A){var I=pI(A),g=FA(I);return qI(I),g}function CI(A,I){var g=[],B={};throw I.forEach((function A(I){B[I]||EA[I]||(iA[I]?iA[I].forEach(A):(g.push(I),B[I]=!0))})),new BI(A+": "+g.map(QI).join([", "]))}function EI(A,I){for(var g=[],B=0;B<A;B++)g.push(L[I+4*B>>2]);return g}function iI(A,I,g,B,Q){var C=I.length;C<2&&cA("argTypes array size mismatch! Must at least get return value and \'this\' types!");for(var E=null!==I[1]&&null!==g,i=!1,o=1;o<I.length;++o)if(null!==I[o]&&void 0===I[o].destructorFunction){i=!0;break}var D="void"!==I[0].name,a="",s="";for(o=0;o<C-2;++o)a+=(0!==o?", ":"")+"arg"+o,s+=(0!==o?", ":"")+"arg"+o+"Wired";var w="return function "+oA(A)+"("+a+") {\\nif (arguments.length !== "+(C-2)+") {\\nthrowBindingError(\'function "+A+" called with \' + arguments.length + \' arguments, expected "+(C-2)+" args!\');\\n}\\n";i&&(w+="var destructors = [];\\n");var t=i?"destructors":"null",G=["throwBindingError","invoker","fn","runDestructors","retType","classParam"],h=[cA,B,Q,BA,I[0],I[1]];for(E&&(w+="var thisWired = classParam.toWireType("+t+", this);\\n"),o=0;o<C-2;++o)w+="var arg"+o+"Wired = argType"+o+".toWireType("+t+", arg"+o+"); // "+I[o+2].name+"\\n",G.push("argType"+o),h.push(I[o+2]);if(E&&(s="thisWired"+(s.length>0?", ":"")+s),w+=(D?"var rv = ":"")+"invoker(fn"+(s.length>0?", ":"")+s+");\\n",i)w+="runDestructors(destructors);\\n";else for(o=E?1:2;o<I.length;++o){var F=1===o?"thisWired":"arg"+(o-2)+"Wired";null!==I[o].destructorFunction&&(w+=F+"_dtor("+F+"); // "+I[o].name+"\\n",G.push(F+"_dtor"),h.push(I[o].destructorFunction))}return D&&(w+="var ret = retType.fromWireType(rv);\\nreturn ret;\\n"),w+="}\\n",G.push(w),function(A,I){if(!(A instanceof Function))throw new TypeError("new_ called with constructor type "+typeof A+" which is not a function");var g=DA(A.name||"unknownFunctionName",(function(){}));g.prototype=A.prototype;var B=new g,Q=A.apply(B,I);return Q instanceof Object?Q:B}(Function,G).apply(null,h)}var oI=[],DI=[{},{value:void 0},{value:null},{value:!0},{value:!1}];function aI(A){A>4&&0==--DI[A].refcount&&(DI[A]=void 0,oI.push(A))}function sI(){for(var A=0,I=5;I<DI.length;++I)void 0!==DI[I]&&++A;return A}function wI(){for(var A=5;A<DI.length;++A)if(void 0!==DI[A])return DI[A];return null}var tI={toValue:A=>(A||cA("Cannot use deleted val. handle = "+A),DI[A].value),toHandle:A=>{switch(A){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:var I=oI.length?oI.pop():DI.length;return DI[I]={refcount:1,value:A},I}}};function GI(A){if(null===A)return"null";var I=typeof A;return"object"===I||"array"===I||"function"===I?A.toString():""+A}function hI(A,I){switch(I){case 2:return function(A){return this.fromWireType(Y[A>>2])};case 3:return function(A){return this.fromWireType(K[A>>3])};default:throw new TypeError("Unknown float type: "+A)}}function FI(A,I,g){switch(I){case 0:return g?function(A){return U[A]}:function(A){return k[A]};case 1:return g?function(A){return J[A>>1]}:function(A){return H[A>>1]};case 2:return g?function(A){return M[A>>2]}:function(A){return L[A>>2]};default:throw new TypeError("Unknown integer type: "+A)}}var yI="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0;function cI(A,I){for(var g=A,B=g>>1,Q=B+I/2;!(B>=Q)&&H[B];)++B;if((g=B<<1)-A>32&&yI)return yI.decode(k.subarray(A,g));for(var C="",E=0;!(E>=I/2);++E){var i=J[A+2*E>>1];if(0==i)break;C+=String.fromCharCode(i)}return C}function rI(A,I,g){if(void 0===g&&(g=2147483647),g<2)return 0;for(var B=I,Q=(g-=2)<2*A.length?g/2:A.length,C=0;C<Q;++C){var E=A.charCodeAt(C);J[I>>1]=E,I+=2}return J[I>>1]=0,I-B}function NI(A){return 2*A.length}function RI(A,I){for(var g=0,B="";!(g>=I/4);){var Q=M[A+4*g>>2];if(0==Q)break;if(++g,Q>=65536){var C=Q-65536;B+=String.fromCharCode(55296|C>>10,56320|1023&C)}else B+=String.fromCharCode(Q)}return B}function eI(A,I,g){if(void 0===g&&(g=2147483647),g<4)return 0;for(var B=I,Q=B+g-4,C=0;C<A.length;++C){var E=A.charCodeAt(C);if(E>=55296&&E<=57343&&(E=65536+((1023&E)<<10)|1023&A.charCodeAt(++C)),M[I>>2]=E,(I+=4)+4>Q)break}return M[I>>2]=0,I-B}function nI(A){for(var I=0,g=0;g<A.length;++g){var B=A.charCodeAt(g);B>=55296&&B<=57343&&++g,I+=4}return I}var SI={};function UI(){return"object"==typeof globalThis?globalThis:Function("return this")()}function kI(A,I){var g=EA[A];return void 0===g&&cA(I+" has unknown type "+QI(A)),g}var JI={};function HI(A){try{return e.grow(A-S.byteLength+65535>>>16),p(e.buffer),1}catch(A){}}var MI={};function LI(){if(!LI.strings){var A={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:s||"./this.program"};for(var I in MI)void 0===MI[I]?delete A[I]:A[I]=MI[I];var g=[];for(var I in A)g.push(I+"="+A[I]);LI.strings=g}return LI.strings}var YI=function(A,I){var g;g=A,x()||(C.onExit&&C.onExit(g),d=!0),w(g,new $(g))},KI=[null,[],[]];function dI(A,I){var g=KI[A];0===I||10===I?((1===A?N:R)(f(g,0)),g.length=0):g.push(I)}sA=C.InternalError=aA(Error,"InternalError"),function(){for(var A=new Array(256),I=0;I<256;++I)A[I]=String.fromCharCode(I);hA=A}(),yA=C.BindingError=aA(Error,"BindingError"),mA.prototype.isAliasOf=NA,mA.prototype.clone=pA,mA.prototype.delete=bA,mA.prototype.isDeleted=WA,mA.prototype.deleteLater=ZA,C.getInheritedInstanceCount=JA,C.getLiveInheritedInstances=HA,C.flushPendingDeletes=LA,C.setDelayFunction=KA,_A.prototype.getPointee=OA,_A.prototype.destructor=jA,_A.prototype.argPackAdvance=8,_A.prototype.readValueFromPointer=QA,_A.prototype.deleteObject=zA,_A.prototype.fromWireType=uA,BI=C.UnboundTypeError=aA(Error,"UnboundTypeError"),C.count_emval_handles=sI,C.get_first_emval=wI;var lI,fI={g:function(A,I,g){throw new IA(A).init(I,g),A},A:function(A){var I=gA[A];delete gA[A];var g=I.rawConstructor,B=I.rawDestructor,Q=I.fields;tA([A],Q.map((A=>A.getterReturnType)).concat(Q.map((A=>A.setterArgumentType))),(A=>{var C={};return Q.forEach(((I,g)=>{var B=I.fieldName,E=A[g],i=I.getter,o=I.getterContext,D=A[g+Q.length],a=I.setter,s=I.setterContext;C[B]={read:A=>E.fromWireType(i(o,A)),write:(A,I)=>{var g=[];a(s,A,D.toWireType(g,I)),BA(g)}}})),[{name:I.name,fromWireType:function(A){var I={};for(var g in C)I[g]=C[g].read(A);return B(A),I},toWireType:function(A,I){for(var Q in C)if(!(Q in I))throw new TypeError(\'Missing field:  "\'+Q+\'"\');var E=g();for(Q in C)C[Q].write(E,I[Q]);return null!==A&&A.push(B,E),E},argPackAdvance:8,readValueFromPointer:QA,destructorFunction:B}]}))},w:function(A,I,g,B,Q){},F:function(A,I,g,B,Q){var C=GA(g);rA(A,{name:I=FA(I),fromWireType:function(A){return!!A},toWireType:function(A,I){return I?B:Q},argPackAdvance:8,readValueFromPointer:function(A){var B;if(1===g)B=U;else if(2===g)B=J;else{if(4!==g)throw new TypeError("Unknown boolean type size: "+I);B=M}return this.fromWireType(B[A>>C])},destructorFunction:null})},u:function(A,I,g,B,Q,E,i,o,D,a,s,w,t){s=FA(s),E=gI(Q,E),o&&(o=gI(i,o)),a&&(a=gI(D,a)),t=gI(w,t);var G=oA(s);!function(A,I,g){C.hasOwnProperty(A)?((void 0===g||void 0!==C[A].overloadTable&&void 0!==C[A].overloadTable[g])&&cA("Cannot register public name \'"+A+"\' twice"),xA(C,A,A),C.hasOwnProperty(g)&&cA("Cannot register multiple overloads of a function with the same number of arguments ("+g+")!"),C[A].overloadTable[g]=I):(C[A]=I,void 0!==g&&(C[A].numArguments=g))}(G,(function(){CI("Cannot construct "+s+" due to unbound types",[B])})),tA([A,I,g],B?[B]:[],(function(I){var g,Q;I=I[0],Q=B?(g=I.registeredClass).instancePrototype:mA.prototype;var i=DA(G,(function(){if(Object.getPrototypeOf(this)!==D)throw new yA("Use \'new\' to construct "+s);if(void 0===w.constructor_body)throw new yA(s+" has no accessible constructor");var A=w.constructor_body[arguments.length];if(void 0===A)throw new yA("Tried to invoke ctor of "+s+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(w.constructor_body).toString()+") parameters instead!");return A.apply(this,arguments)})),D=Object.create(Q,{constructor:{value:i}});i.prototype=D;var w=new TA(s,i,D,t,g,E,o,a),h=new _A(s,w,!0,!1,!1),F=new _A(s+"*",w,!1,!1,!1),y=new _A(s+" const*",w,!1,!0,!1);return kA[A]={pointerType:F,constPointerType:y},function(A,I,g){C.hasOwnProperty(A)||wA("Replacing nonexistant public symbol"),void 0!==C[A].overloadTable&&void 0!==g?C[A].overloadTable[g]=I:(C[A]=I,C[A].argCount=g)}(G,i),[h,F,y]}))},t:function(A,I,g,B,Q,C){var E;I>0||O(E);var i=EI(I,g);Q=gI(B,Q),tA([],[A],(function(A){var g="constructor "+(A=A[0]).name;if(void 0===A.registeredClass.constructor_body&&(A.registeredClass.constructor_body=[]),void 0!==A.registeredClass.constructor_body[I-1])throw new yA("Cannot register multiple constructors with identical number of parameters ("+(I-1)+") for class \'"+A.name+"\'! Overload resolution is currently only performed using the parameter count, not actual type info!");return A.registeredClass.constructor_body[I-1]=()=>{CI("Cannot construct "+A.name+" due to unbound types",i)},tA([],i,(function(B){return B.splice(1,0,null),A.registeredClass.constructor_body[I-1]=iI(g,B,null,Q,C),[]})),[]}))},c:function(A,I,g,B,Q,C,E,i){var o=EI(g,B);I=FA(I),C=gI(Q,C),tA([],[A],(function(A){var B=(A=A[0]).name+"."+I;function Q(){CI("Cannot call "+B+" due to unbound types",o)}I.startsWith("@@")&&(I=Symbol[I.substring(2)]),i&&A.registeredClass.pureVirtualFunctions.push(I);var D=A.registeredClass.instancePrototype,a=D[I];return void 0===a||void 0===a.overloadTable&&a.className!==A.name&&a.argCount===g-2?(Q.argCount=g-2,Q.className=A.name,D[I]=Q):(xA(D,I,B),D[I].overloadTable[g-2]=Q),tA([],o,(function(Q){var i=iI(B,Q,A,C,E);return void 0===D[I].overloadTable?(i.argCount=g-2,D[I]=i):D[I].overloadTable[g-2]=i,[]})),[]}))},E:function(A,I){rA(A,{name:I=FA(I),fromWireType:function(A){var I=tI.toValue(A);return aI(A),I},toWireType:function(A,I){return tI.toHandle(I)},argPackAdvance:8,readValueFromPointer:QA,destructorFunction:null})},m:function(A,I,g){var B=GA(g);rA(A,{name:I=FA(I),fromWireType:function(A){return A},toWireType:function(A,I){return I},argPackAdvance:8,readValueFromPointer:hI(I,B),destructorFunction:null})},b:function(A,I,g,B,Q){I=FA(I),-1===Q&&(Q=4294967295);var C=GA(g),E=A=>A;if(0===B){var i=32-8*g;E=A=>A<<i>>>i}var o=I.includes("unsigned");rA(A,{name:I,fromWireType:E,toWireType:o?function(A,I){return this.name,I>>>0}:function(A,I){return this.name,I},argPackAdvance:8,readValueFromPointer:FI(I,C,0!==B),destructorFunction:null})},a:function(A,I,g){var B=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][I];function Q(A){var I=L,g=I[A>>=2],Q=I[A+1];return new B(S,Q,g)}rA(A,{name:g=FA(g),fromWireType:Q,argPackAdvance:8,readValueFromPointer:Q},{ignoreDuplicateRegistrations:!0})},l:function(A,I){var g="std::string"===(I=FA(I));rA(A,{name:I,fromWireType:function(A){var I,B=L[A>>2],Q=A+4;if(g)for(var C=Q,E=0;E<=B;++E){var i=Q+E;if(E==B||0==k[i]){var o=u(C,i-C);void 0===I?I=o:(I+=String.fromCharCode(0),I+=o),C=i+1}}else{var D=new Array(B);for(E=0;E<B;++E)D[E]=String.fromCharCode(k[Q+E]);I=D.join("")}return qI(A),I},toWireType:function(A,I){var B;I instanceof ArrayBuffer&&(I=new Uint8Array(I));var Q="string"==typeof I;Q||I instanceof Uint8Array||I instanceof Uint8ClampedArray||I instanceof Int8Array||cA("Cannot pass non-string to std::string"),B=g&&Q?function(A){for(var I=0,g=0;g<A.length;++g){var B=A.charCodeAt(g);B<=127?I++:B<=2047?I+=2:B>=55296&&B<=57343?(I+=4,++g):I+=3}return I}(I):I.length;var C=uI(4+B+1),E=C+4;if(L[C>>2]=B,g&&Q)q(I,E,B+1);else if(Q)for(var i=0;i<B;++i){var o=I.charCodeAt(i);o>255&&(qI(E),cA("String has UTF-16 code units that do not fit in 8 bits")),k[E+i]=o}else for(i=0;i<B;++i)k[E+i]=I[i];return null!==A&&A.push(qI,C),C},argPackAdvance:8,readValueFromPointer:QA,destructorFunction:function(A){qI(A)}})},h:function(A,I,g){var B,Q,C,E,i;g=FA(g),2===I?(B=cI,Q=rI,E=NI,C=()=>H,i=1):4===I&&(B=RI,Q=eI,E=nI,C=()=>L,i=2),rA(A,{name:g,fromWireType:function(A){for(var g,Q=L[A>>2],E=C(),o=A+4,D=0;D<=Q;++D){var a=A+4+D*I;if(D==Q||0==E[a>>i]){var s=B(o,a-o);void 0===g?g=s:(g+=String.fromCharCode(0),g+=s),o=a+I}}return qI(A),g},toWireType:function(A,B){"string"!=typeof B&&cA("Cannot pass non-string to C++ string type "+g);var C=E(B),o=uI(4+C+I);return L[o>>2]=C>>i,Q(B,o+4,C+I),null!==A&&A.push(qI,o),o},argPackAdvance:8,readValueFromPointer:QA,destructorFunction:function(A){qI(A)}})},J:function(A,I,g,B,Q,C){gA[A]={name:FA(I),rawConstructor:gI(g,B),rawDestructor:gI(Q,C),fields:[]}},d:function(A,I,g,B,Q,C,E,i,o,D){gA[A].fields.push({fieldName:FA(I),getterReturnType:g,getter:gI(B,Q),getterContext:C,setterArgumentType:E,setter:gI(i,o),setterContext:D})},G:function(A,I){rA(A,{isVoid:!0,name:I=FA(I),argPackAdvance:0,fromWireType:function(){},toWireType:function(A,I){}})},x:function(){throw 1/0},i:aI,r:function(A){return 0===A?tI.toHandle(UI()):(A=void 0===(g=SI[I=A])?FA(I):g,tI.toHandle(UI()[A]));var I,g},p:function(A){A>4&&(DI[A].refcount+=1)},q:function(A,I,g,B){A=tI.toValue(A);var Q=JI[I];return Q||(Q=function(A){for(var I="",g=0;g<A;++g)I+=(0!==g?", ":"")+"arg"+g;var B="return function emval_allocator_"+A+"(constructor, argTypes, args) {\\n  var HEAPU32 = getMemory();\\n";for(g=0;g<A;++g)B+="var argType"+g+" = requireRegisteredType(HEAPU32[((argTypes)>>2)], \'parameter "+g+"\');\\nvar arg"+g+" = argType"+g+".readValueFromPointer(args);\\nargs += argType"+g+"[\'argPackAdvance\'];\\nargTypes += 4;\\n";return B+="var obj = new constructor("+I+");\\nreturn valueToHandle(obj);\\n}\\n",new Function("requireRegisteredType","Module","valueToHandle","getMemory",B)(kI,C,tI.toHandle,(()=>L))}(I),JI[I]=Q),Q(A,g,B)},s:function(A,I){var g=(A=kI(A,"_emval_take_value")).readValueFromPointer(I);return tI.toHandle(g)},j:function(){O("")},D:function(A,I,g){k.copyWithin(A,I,I+g)},y:function(A){var I,g,B=k.length,Q=2147483648;if((A>>>=0)>Q)return!1;for(var C=1;C<=4;C*=2){var E=B*(1+.2/C);if(E=Math.min(E,A+100663296),HI(Math.min(Q,(I=Math.max(A,E))+((g=65536)-I%g)%g)))return!0}return!1},z:function(A,I){var g=0;return LI().forEach((function(B,Q){var C=I+g;L[A+4*Q>>2]=C,function(A,I,g){for(var B=0;B<A.length;++B)U[I++>>0]=A.charCodeAt(B);g||(U[I>>0]=0)}(B,C),g+=B.length+1})),0},B:function(A,I){var g=LI();L[A>>2]=g.length;var B=0;return g.forEach((function(A){B+=A.length+1})),L[I>>2]=B,0},I:YI,C:function(A){return 52},v:function(A,I,g,B,Q){return 70},k:function(A,I,g,B){for(var Q=0,C=0;C<g;C++){var E=L[I>>2],i=L[I+4>>2];I+=8;for(var o=0;o<i;o++)dI(A,k[E+o]);Q+=i}return L[B>>2]=Q,0},o:function(A,I){var g=WI();try{return AI(A)(I)}catch(A){if(ZI(g),A!==A+0)throw A;bI(1,0)}},n:function(A,I,g){var B=WI();try{return AI(A)(I,g)}catch(A){if(ZI(B),A!==A+0)throw A;bI(1,0)}},H:function(A,I,g,B){var Q=WI();try{return AI(A)(I,g,B)}catch(A){if(ZI(Q),A!==A+0)throw A;bI(1,0)}},f:function(A,I){var g=WI();try{AI(A)(I)}catch(A){if(ZI(g),A!==A+0)throw A;bI(1,0)}},e:function(A,I,g,B){var Q=WI();try{AI(A)(I,g,B)}catch(A){if(ZI(Q),A!==A+0)throw A;bI(1,0)}}},uI=(function(){var A={a:fI};function I(A,I){var g,B=A.exports;C.asm=B,p((e=C.asm.K).buffer),b=C.asm.M,g=C.asm.L,Z.unshift(g),function(A){if(X--,C.monitorRunDependencies&&C.monitorRunDependencies(X),0==X&&(null!==P&&(clearInterval(P),P=null),V)){var I=V;V=null,I()}}()}function g(A){I(A.instance)}function B(I){return function(){if(!r&&(t||G)){if("function"==typeof fetch&&!z(T))return fetch(T,{credentials:"same-origin"}).then((function(A){if(!A.ok)throw"failed to load wasm binary file at \'"+T+"\'";return A.arrayBuffer()})).catch((function(){return _(T)}));if(i)return new Promise((function(A,I){i(T,(function(I){A(new Uint8Array(I))}),I)}))}return Promise.resolve().then((function(){return _(T)}))}().then((function(I){return WebAssembly.instantiate(I,A)})).then((function(A){return A})).then(I,(function(A){R("failed to asynchronously prepare wasm: "+A),O(A)}))}if(X++,C.monitorRunDependencies&&C.monitorRunDependencies(X),C.instantiateWasm)try{return C.instantiateWasm(A,I)}catch(A){R("Module.instantiateWasm callback failed with error: "+A),Q(A)}(r||"function"!=typeof WebAssembly.instantiateStreaming||j(T)||z(T)||h||"function"!=typeof fetch?B(g):fetch(T,{credentials:"same-origin"}).then((function(I){return WebAssembly.instantiateStreaming(I,A).then(g,(function(A){return R("wasm streaming compile failed: "+A),R("falling back to ArrayBuffer instantiation"),B(g)}))}))).catch(Q)}(),C.___wasm_call_ctors=function(){return(C.___wasm_call_ctors=C.asm.L).apply(null,arguments)},C._malloc=function(){return(uI=C._malloc=C.asm.N).apply(null,arguments)}),qI=C._free=function(){return(qI=C._free=C.asm.O).apply(null,arguments)},pI=C.___getTypeName=function(){return(pI=C.___getTypeName=C.asm.P).apply(null,arguments)},bI=(C.__embind_initialize_bindings=function(){return(C.__embind_initialize_bindings=C.asm.Q).apply(null,arguments)},C._setThrew=function(){return(bI=C._setThrew=C.asm.R).apply(null,arguments)}),WI=C.stackSave=function(){return(WI=C.stackSave=C.asm.S).apply(null,arguments)},ZI=C.stackRestore=function(){return(ZI=C.stackRestore=C.asm.T).apply(null,arguments)},mI=C.stackAlloc=function(){return(mI=C.stackAlloc=C.asm.U).apply(null,arguments)},xI=C.___cxa_is_pointer_type=function(){return(xI=C.___cxa_is_pointer_type=C.asm.V).apply(null,arguments)};function TI(A){function g(){lI||(lI=!0,C.calledRun=!0,d||(AA(Z),I(C),C.onRuntimeInitialized&&C.onRuntimeInitialized(),function(){if(C.postRun)for("function"==typeof C.postRun&&(C.postRun=[C.postRun]);C.postRun.length;)A=C.postRun.shift(),m.unshift(A);var A;AA(m)}()))}A=A||a,X>0||(function(){if(C.preRun)for("function"==typeof C.preRun&&(C.preRun=[C.preRun]);C.preRun.length;)A=C.preRun.shift(),W.unshift(A);var A;AA(W)}(),X>0||(C.setStatus?(C.setStatus("Running..."),setTimeout((function(){setTimeout((function(){C.setStatus("")}),1),g()}),1)):g()))}if(C.dynCall_jiji=function(){return(C.dynCall_jiji=C.asm.W).apply(null,arguments)},C.ccall=function(A,I,g,B,Q){var E={string:A=>{var I=0;if(null!=A&&0!==A){var g=1+(A.length<<2);q(A,I=mI(g),g)}return I},array:A=>{var I=mI(A.length);return function(A,I){U.set(A,I)}(A,I),I}},i=function(A){return C["_"+A]}(A),o=[],D=0;if(B)for(var a=0;a<B.length;a++){var s=E[g[a]];s?(0===D&&(D=WI()),o[a]=s(B[a])):o[a]=B[a]}var w=i.apply(null,o);return w=function(A){return 0!==D&&ZI(D),function(A){return"string"===I?u(A):"boolean"===I?Boolean(A):A}(A)}(w)},V=function A(){lI||TI(),lI||(V=A)},C.preInit)for("function"==typeof C.preInit&&(C.preInit=[C.preInit]);C.preInit.length>0;)C.preInit.pop()();return TI(),A.ready});A.exports=Q},4044:(A,I,g)=>{var B,Q=(B=(B="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0)||"/index.js",function(A){var I,Q,C=void 0!==(A=A||{})?A:{};C.ready=new Promise((function(A,g){I=A,Q=g}));var E,i,o,D=Object.assign({},C),a=[],s="./this.program",w="object"==typeof window,t="function"==typeof importScripts,G="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,h="";if(G){var F=g(9652),y=g(6087);h=t?y.dirname(h)+"/":"//",E=(A,I)=>(A=V(A)?new URL(A):y.normalize(A),F.readFileSync(A,I?void 0:"utf8")),o=A=>{var I=E(A,!0);return I.buffer||(I=new Uint8Array(I)),I},i=(A,I,g)=>{A=V(A)?new URL(A):y.normalize(A),F.readFile(A,(function(A,B){A?g(A):I(B.buffer)}))},process.argv.length>1&&(s=process.argv[1].replace(/\\\\/g,"/")),a=process.argv.slice(2),process.on("uncaughtException",(function(A){if(!(A instanceof j))throw A})),process.on("unhandledRejection",(function(A){throw A})),C.inspect=function(){return"[Emscripten Module object]"}}else(w||t)&&(t?h=self.location.href:"undefined"!=typeof document&&document.currentScript&&(h=document.currentScript.src),B&&(h=B),h=0!==h.indexOf("blob:")?h.substr(0,h.replace(/[?#].*/,"").lastIndexOf("/")+1):"",E=A=>{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.send(null),I.responseText},t&&(o=A=>{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.responseType="arraybuffer",I.send(null),new Uint8Array(I.response)}),i=(A,I,g)=>{var B=new XMLHttpRequest;B.open("GET",A,!0),B.responseType="arraybuffer",B.onload=()=>{200==B.status||0==B.status&&B.response?I(B.response):g()},B.onerror=g,B.send(null)});var c,r=C.print||console.log.bind(console),N=C.printErr||console.warn.bind(console);Object.assign(C,D),D=null,C.arguments&&(a=C.arguments),C.thisProgram&&(s=C.thisProgram),C.quit&&C.quit,C.wasmBinary&&(c=C.wasmBinary);var R;C.noExitRuntime;"object"!=typeof WebAssembly&&X("no native wasm support detected");var e,n,S,U,k,J,H,M,L,Y=!1,K="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function d(A,I,g){for(var B=I+g,Q=I;A[Q]&&!(Q>=B);)++Q;if(Q-I>16&&A.buffer&&K)return K.decode(A.subarray(I,Q));for(var C="";I<Q;){var E=A[I++];if(128&E){var i=63&A[I++];if(192!=(224&E)){var o=63&A[I++];if((E=224==(240&E)?(15&E)<<12|i<<6|o:(7&E)<<18|i<<12|o<<6|63&A[I++])<65536)C+=String.fromCharCode(E);else{var D=E-65536;C+=String.fromCharCode(55296|D>>10,56320|1023&D)}}else C+=String.fromCharCode((31&E)<<6|i)}else C+=String.fromCharCode(E)}return C}function l(A,I){return A?d(S,A,I):""}function f(A,I,g){return function(A,I,g,B){if(!(B>0))return 0;for(var Q=g,C=g+B-1,E=0;E<A.length;++E){var i=A.charCodeAt(E);if(i>=55296&&i<=57343&&(i=65536+((1023&i)<<10)|1023&A.charCodeAt(++E)),i<=127){if(g>=C)break;I[g++]=i}else if(i<=2047){if(g+1>=C)break;I[g++]=192|i>>6,I[g++]=128|63&i}else if(i<=65535){if(g+2>=C)break;I[g++]=224|i>>12,I[g++]=128|i>>6&63,I[g++]=128|63&i}else{if(g+3>=C)break;I[g++]=240|i>>18,I[g++]=128|i>>12&63,I[g++]=128|i>>6&63,I[g++]=128|63&i}}return I[g]=0,g-Q}(A,S,I,g)}function u(A){e=A,C.HEAP8=n=new Int8Array(A),C.HEAP16=U=new Int16Array(A),C.HEAP32=J=new Int32Array(A),C.HEAPU8=S=new Uint8Array(A),C.HEAPU16=k=new Uint16Array(A),C.HEAPU32=H=new Uint32Array(A),C.HEAPF32=M=new Float32Array(A),C.HEAPF64=L=new Float64Array(A)}C.INITIAL_MEMORY;var q,p,b,W=[],Z=[],m=[],x=0,T=null,v=null;function X(A){C.onAbort&&C.onAbort(A),N(A="Aborted("+A+")"),Y=!0,A+=". Build with -sASSERTIONS for more info.";var I=new WebAssembly.RuntimeError(A);throw Q(I),I}function P(A){return A.startsWith("data:application/octet-stream;base64,")}function V(A){return A.startsWith("file://")}function O(A){try{if(A==p&&c)return new Uint8Array(c);if(o)return o(A);throw"both async and sync fetching of the wasm failed"}catch(A){X(A)}}function j(A){this.name="ExitStatus",this.message="Program terminated with exit("+A+")",this.status=A}function z(A){for(;A.length>0;)A.shift()(C)}function _(A){this.excPtr=A,this.ptr=A-24,this.set_type=function(A){H[this.ptr+4>>2]=A},this.get_type=function(){return H[this.ptr+4>>2]},this.set_destructor=function(A){H[this.ptr+8>>2]=A},this.get_destructor=function(){return H[this.ptr+8>>2]},this.set_refcount=function(A){J[this.ptr>>2]=A},this.set_caught=function(A){A=A?1:0,n[this.ptr+12>>0]=A},this.get_caught=function(){return 0!=n[this.ptr+12>>0]},this.set_rethrown=function(A){A=A?1:0,n[this.ptr+13>>0]=A},this.get_rethrown=function(){return 0!=n[this.ptr+13>>0]},this.init=function(A,I){this.set_adjusted_ptr(0),this.set_type(A),this.set_destructor(I),this.set_refcount(0),this.set_caught(!1),this.set_rethrown(!1)},this.add_ref=function(){var A=J[this.ptr>>2];J[this.ptr>>2]=A+1},this.release_ref=function(){var A=J[this.ptr>>2];return J[this.ptr>>2]=A-1,1===A},this.set_adjusted_ptr=function(A){H[this.ptr+16>>2]=A},this.get_adjusted_ptr=function(){return H[this.ptr+16>>2]},this.get_exception_ptr=function(){if(pI(this.get_type()))return H[this.excPtr>>2];var A=this.get_adjusted_ptr();return 0!==A?A:this.excPtr}}P(p="openjpegwasm_decode.wasm")||(b=p,p=C.locateFile?C.locateFile(b,h):h+b);var $={};function AA(A){for(;A.length;){var I=A.pop();A.pop()(I)}}function IA(A){return this.fromWireType(J[A>>2])}var gA={},BA={},QA={};function CA(A){if(void 0===A)return"_unknown";var I=(A=A.replace(/[^a-zA-Z0-9_]/g,"$")).charCodeAt(0);return I>=48&&I<=57?"_"+A:A}function EA(A,I){return A=CA(A),new Function("body","return function "+A+\'() {\\n    "use strict";    return body.apply(this, arguments);\\n};\\n\')(I)}function iA(A,I){var g=EA(I,(function(A){this.name=I,this.message=A;var g=new Error(A).stack;void 0!==g&&(this.stack=this.toString()+"\\n"+g.replace(/^Error(:[^\\n]*)?\\n/,""))}));return g.prototype=Object.create(A.prototype),g.prototype.constructor=g,g.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message},g}var oA=void 0;function DA(A){throw new oA(A)}function aA(A,I,g){function B(I){var B=g(I);B.length!==A.length&&DA("Mismatched type converter count");for(var Q=0;Q<A.length;++Q)FA(A[Q],B[Q])}A.forEach((function(A){QA[A]=I}));var Q=new Array(I.length),C=[],E=0;I.forEach(((A,I)=>{BA.hasOwnProperty(A)?Q[I]=BA[A]:(C.push(A),gA.hasOwnProperty(A)||(gA[A]=[]),gA[A].push((()=>{Q[I]=BA[A],++E===C.length&&B(Q)})))})),0===C.length&&B(Q)}function sA(A){switch(A){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+A)}}var wA=void 0;function tA(A){for(var I="",g=A;S[g];)I+=wA[S[g++]];return I}var GA=void 0;function hA(A){throw new GA(A)}function FA(A,I,g={}){if(!("argPackAdvance"in I))throw new TypeError("registerType registeredInstance requires argPackAdvance");var B=I.name;if(A||hA(\'type "\'+B+\'" must have a positive integer typeid pointer\'),BA.hasOwnProperty(A)){if(g.ignoreDuplicateRegistrations)return;hA("Cannot register type \'"+B+"\' twice")}if(BA[A]=I,delete QA[A],gA.hasOwnProperty(A)){var Q=gA[A];delete gA[A],Q.forEach((A=>A()))}}function yA(A){if(!(this instanceof bA))return!1;if(!(A instanceof bA))return!1;for(var I=this.$$.ptrType.registeredClass,g=this.$$.ptr,B=A.$$.ptrType.registeredClass,Q=A.$$.ptr;I.baseClass;)g=I.upcast(g),I=I.baseClass;for(;B.baseClass;)Q=B.upcast(Q),B=B.baseClass;return I===B&&g===Q}function cA(A){hA(A.$$.ptrType.registeredClass.name+" instance already deleted")}var rA=!1;function NA(A){}function RA(A){A.count.value-=1,0===A.count.value&&function(A){A.smartPtr?A.smartPtrType.rawDestructor(A.smartPtr):A.ptrType.registeredClass.rawDestructor(A.ptr)}(A)}function eA(A,I,g){if(I===g)return A;if(void 0===g.baseClass)return null;var B=eA(A,I,g.baseClass);return null===B?null:g.downcast(B)}var nA={};function SA(){return Object.keys(LA).length}function UA(){var A=[];for(var I in LA)LA.hasOwnProperty(I)&&A.push(LA[I]);return A}var kA=[];function JA(){for(;kA.length;){var A=kA.pop();A.$$.deleteScheduled=!1,A.delete()}}var HA=void 0;function MA(A){HA=A,kA.length&&HA&&HA(JA)}var LA={};function YA(A,I){return I=function(A,I){for(void 0===I&&hA("ptr should not be undefined");A.baseClass;)I=A.upcast(I),A=A.baseClass;return I}(A,I),LA[I]}function KA(A,I){return I.ptrType&&I.ptr||DA("makeClassHandle requires ptr and ptrType"),!!I.smartPtrType!=!!I.smartPtr&&DA("Both smartPtrType and smartPtr must be specified"),I.count={value:1},lA(Object.create(A,{$$:{value:I}}))}function dA(A){var I=this.getPointee(A);if(!I)return this.destructor(A),null;var g=YA(this.registeredClass,I);if(void 0!==g){if(0===g.$$.count.value)return g.$$.ptr=I,g.$$.smartPtr=A,g.clone();var B=g.clone();return this.destructor(A),B}function Q(){return this.isSmartPointer?KA(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:I,smartPtrType:this,smartPtr:A}):KA(this.registeredClass.instancePrototype,{ptrType:this,ptr:A})}var C,E=this.registeredClass.getActualType(I),i=nA[E];if(!i)return Q.call(this);C=this.isConst?i.constPointerType:i.pointerType;var o=eA(I,this.registeredClass,C.registeredClass);return null===o?Q.call(this):this.isSmartPointer?KA(C.registeredClass.instancePrototype,{ptrType:C,ptr:o,smartPtrType:this,smartPtr:A}):KA(C.registeredClass.instancePrototype,{ptrType:C,ptr:o})}function lA(A){return"undefined"==typeof FinalizationRegistry?(lA=A=>A,A):(rA=new FinalizationRegistry((A=>{RA(A.$$)})),NA=A=>rA.unregister(A),(lA=A=>{var I=A.$$;if(I.smartPtr){var g={$$:I};rA.register(A,g,A)}return A})(A))}function fA(){if(this.$$.ptr||cA(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var A,I=lA(Object.create(Object.getPrototypeOf(this),{$$:{value:(A=this.$$,{count:A.count,deleteScheduled:A.deleteScheduled,preservePointerOnDelete:A.preservePointerOnDelete,ptr:A.ptr,ptrType:A.ptrType,smartPtr:A.smartPtr,smartPtrType:A.smartPtrType})}}));return I.$$.count.value+=1,I.$$.deleteScheduled=!1,I}function uA(){this.$$.ptr||cA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&hA("Object already scheduled for deletion"),NA(this),RA(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)}function qA(){return!this.$$.ptr}function pA(){return this.$$.ptr||cA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&hA("Object already scheduled for deletion"),kA.push(this),1===kA.length&&HA&&HA(JA),this.$$.deleteScheduled=!0,this}function bA(){}function WA(A,I,g){if(void 0===A[I].overloadTable){var B=A[I];A[I]=function(){return A[I].overloadTable.hasOwnProperty(arguments.length)||hA("Function \'"+g+"\' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+A[I].overloadTable+")!"),A[I].overloadTable[arguments.length].apply(this,arguments)},A[I].overloadTable=[],A[I].overloadTable[B.argCount]=B}}function ZA(A,I,g,B,Q,C,E,i){this.name=A,this.constructor=I,this.instancePrototype=g,this.rawDestructor=B,this.baseClass=Q,this.getActualType=C,this.upcast=E,this.downcast=i,this.pureVirtualFunctions=[]}function mA(A,I,g){for(;I!==g;)I.upcast||hA("Expected null or instance of "+g.name+", got an instance of "+I.name),A=I.upcast(A),I=I.baseClass;return A}function xA(A,I){if(null===I)return this.isReference&&hA("null is not a valid "+this.name),0;I.$$||hA(\'Cannot pass "\'+sI(I)+\'" as a \'+this.name),I.$$.ptr||hA("Cannot pass deleted object as a pointer of type "+this.name);var g=I.$$.ptrType.registeredClass;return mA(I.$$.ptr,g,this.registeredClass)}function TA(A,I){var g;if(null===I)return this.isReference&&hA("null is not a valid "+this.name),this.isSmartPointer?(g=this.rawConstructor(),null!==A&&A.push(this.rawDestructor,g),g):0;I.$$||hA(\'Cannot pass "\'+sI(I)+\'" as a \'+this.name),I.$$.ptr||hA("Cannot pass deleted object as a pointer of type "+this.name),!this.isConst&&I.$$.ptrType.isConst&&hA("Cannot convert argument of type "+(I.$$.smartPtrType?I.$$.smartPtrType.name:I.$$.ptrType.name)+" to parameter type "+this.name);var B=I.$$.ptrType.registeredClass;if(g=mA(I.$$.ptr,B,this.registeredClass),this.isSmartPointer)switch(void 0===I.$$.smartPtr&&hA("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:I.$$.smartPtrType===this?g=I.$$.smartPtr:hA("Cannot convert argument of type "+(I.$$.smartPtrType?I.$$.smartPtrType.name:I.$$.ptrType.name)+" to parameter type "+this.name);break;case 1:g=I.$$.smartPtr;break;case 2:if(I.$$.smartPtrType===this)g=I.$$.smartPtr;else{var Q=I.clone();g=this.rawShare(g,aI.toHandle((function(){Q.delete()}))),null!==A&&A.push(this.rawDestructor,g)}break;default:hA("Unsupporting sharing policy")}return g}function vA(A,I){if(null===I)return this.isReference&&hA("null is not a valid "+this.name),0;I.$$||hA(\'Cannot pass "\'+sI(I)+\'" as a \'+this.name),I.$$.ptr||hA("Cannot pass deleted object as a pointer of type "+this.name),I.$$.ptrType.isConst&&hA("Cannot convert argument of type "+I.$$.ptrType.name+" to parameter type "+this.name);var g=I.$$.ptrType.registeredClass;return mA(I.$$.ptr,g,this.registeredClass)}function XA(A){return this.rawGetPointee&&(A=this.rawGetPointee(A)),A}function PA(A){this.rawDestructor&&this.rawDestructor(A)}function VA(A){null!==A&&A.delete()}function OA(A,I,g,B,Q,C,E,i,o,D,a){this.name=A,this.registeredClass=I,this.isReference=g,this.isConst=B,this.isSmartPointer=Q,this.pointeeType=C,this.sharingPolicy=E,this.rawGetPointee=i,this.rawConstructor=o,this.rawShare=D,this.rawDestructor=a,Q||void 0!==I.baseClass?this.toWireType=TA:B?(this.toWireType=xA,this.destructorFunction=null):(this.toWireType=vA,this.destructorFunction=null)}var jA=[];function zA(A){var I=jA[A];return I||(A>=jA.length&&(jA.length=A+1),jA[A]=I=q.get(A)),I}function _A(A,I,g){return A.includes("j")?function(A,I,g){var B=C["dynCall_"+A];return g&&g.length?B.apply(null,[I].concat(g)):B.call(null,I)}(A,I,g):zA(I).apply(null,g)}function $A(A,I){var g,B,Q,C=(A=tA(A)).includes("j")?(g=A,B=I,Q=[],function(){return Q.length=0,Object.assign(Q,arguments),_A(g,B,Q)}):zA(I);return"function"!=typeof C&&hA("unknown function pointer with signature "+A+": "+I),C}var AI=void 0;function II(A){var I=lI(A),g=tA(I);return dI(I),g}function gI(A,I){var g=[],B={};throw I.forEach((function A(I){B[I]||BA[I]||(QA[I]?QA[I].forEach(A):(g.push(I),B[I]=!0))})),new AI(A+": "+g.map(II).join([", "]))}function BI(A,I){for(var g=[],B=0;B<A;B++)g.push(H[I+4*B>>2]);return g}function QI(A,I,g,B,Q){var C=I.length;C<2&&hA("argTypes array size mismatch! Must at least get return value and \'this\' types!");for(var E=null!==I[1]&&null!==g,i=!1,o=1;o<I.length;++o)if(null!==I[o]&&void 0===I[o].destructorFunction){i=!0;break}var D="void"!==I[0].name,a="",s="";for(o=0;o<C-2;++o)a+=(0!==o?", ":"")+"arg"+o,s+=(0!==o?", ":"")+"arg"+o+"Wired";var w="return function "+CA(A)+"("+a+") {\\nif (arguments.length !== "+(C-2)+") {\\nthrowBindingError(\'function "+A+" called with \' + arguments.length + \' arguments, expected "+(C-2)+" args!\');\\n}\\n";i&&(w+="var destructors = [];\\n");var t=i?"destructors":"null",G=["throwBindingError","invoker","fn","runDestructors","retType","classParam"],h=[hA,B,Q,AA,I[0],I[1]];for(E&&(w+="var thisWired = classParam.toWireType("+t+", this);\\n"),o=0;o<C-2;++o)w+="var arg"+o+"Wired = argType"+o+".toWireType("+t+", arg"+o+"); // "+I[o+2].name+"\\n",G.push("argType"+o),h.push(I[o+2]);if(E&&(s="thisWired"+(s.length>0?", ":"")+s),w+=(D?"var rv = ":"")+"invoker(fn"+(s.length>0?", ":"")+s+");\\n",i)w+="runDestructors(destructors);\\n";else for(o=E?1:2;o<I.length;++o){var F=1===o?"thisWired":"arg"+(o-2)+"Wired";null!==I[o].destructorFunction&&(w+=F+"_dtor("+F+"); // "+I[o].name+"\\n",G.push(F+"_dtor"),h.push(I[o].destructorFunction))}return D&&(w+="var ret = retType.fromWireType(rv);\\nreturn ret;\\n"),w+="}\\n",G.push(w),function(A,I){if(!(A instanceof Function))throw new TypeError("new_ called with constructor type "+typeof A+" which is not a function");var g=EA(A.name||"unknownFunctionName",(function(){}));g.prototype=A.prototype;var B=new g,Q=A.apply(B,I);return Q instanceof Object?Q:B}(Function,G).apply(null,h)}var CI=[],EI=[{},{value:void 0},{value:null},{value:!0},{value:!1}];function iI(A){A>4&&0==--EI[A].refcount&&(EI[A]=void 0,CI.push(A))}function oI(){for(var A=0,I=5;I<EI.length;++I)void 0!==EI[I]&&++A;return A}function DI(){for(var A=5;A<EI.length;++A)if(void 0!==EI[A])return EI[A];return null}var aI={toValue:A=>(A||hA("Cannot use deleted val. handle = "+A),EI[A].value),toHandle:A=>{switch(A){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:var I=CI.length?CI.pop():EI.length;return EI[I]={refcount:1,value:A},I}}};function sI(A){if(null===A)return"null";var I=typeof A;return"object"===I||"array"===I||"function"===I?A.toString():""+A}function wI(A,I){switch(I){case 2:return function(A){return this.fromWireType(M[A>>2])};case 3:return function(A){return this.fromWireType(L[A>>3])};default:throw new TypeError("Unknown float type: "+A)}}function tI(A,I,g){switch(I){case 0:return g?function(A){return n[A]}:function(A){return S[A]};case 1:return g?function(A){return U[A>>1]}:function(A){return k[A>>1]};case 2:return g?function(A){return J[A>>2]}:function(A){return H[A>>2]};default:throw new TypeError("Unknown integer type: "+A)}}var GI="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0;function hI(A,I){for(var g=A,B=g>>1,Q=B+I/2;!(B>=Q)&&k[B];)++B;if((g=B<<1)-A>32&&GI)return GI.decode(S.subarray(A,g));for(var C="",E=0;!(E>=I/2);++E){var i=U[A+2*E>>1];if(0==i)break;C+=String.fromCharCode(i)}return C}function FI(A,I,g){if(void 0===g&&(g=2147483647),g<2)return 0;for(var B=I,Q=(g-=2)<2*A.length?g/2:A.length,C=0;C<Q;++C){var E=A.charCodeAt(C);U[I>>1]=E,I+=2}return U[I>>1]=0,I-B}function yI(A){return 2*A.length}function cI(A,I){for(var g=0,B="";!(g>=I/4);){var Q=J[A+4*g>>2];if(0==Q)break;if(++g,Q>=65536){var C=Q-65536;B+=String.fromCharCode(55296|C>>10,56320|1023&C)}else B+=String.fromCharCode(Q)}return B}function rI(A,I,g){if(void 0===g&&(g=2147483647),g<4)return 0;for(var B=I,Q=B+g-4,C=0;C<A.length;++C){var E=A.charCodeAt(C);if(E>=55296&&E<=57343&&(E=65536+((1023&E)<<10)|1023&A.charCodeAt(++C)),J[I>>2]=E,(I+=4)+4>Q)break}return J[I>>2]=0,I-B}function NI(A){for(var I=0,g=0;g<A.length;++g){var B=A.charCodeAt(g);B>=55296&&B<=57343&&++g,I+=4}return I}var RI={};function eI(){return"object"==typeof globalThis?globalThis:Function("return this")()}function nI(A,I){var g=BA[A];return void 0===g&&hA(I+" has unknown type "+II(A)),g}var SI={};function UI(A){try{return R.grow(A-e.byteLength+65535>>>16),u(R.buffer),1}catch(A){}}var kI={};function JI(){if(!JI.strings){var A={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:s||"./this.program"};for(var I in kI)void 0===kI[I]?delete A[I]:A[I]=kI[I];var g=[];for(var I in A)g.push(I+"="+A[I]);JI.strings=g}return JI.strings}var HI=[null,[],[]];function MI(A,I){var g=HI[A];0===I||10===I?((1===A?r:N)(d(g,0)),g.length=0):g.push(I)}oA=C.InternalError=iA(Error,"InternalError"),function(){for(var A=new Array(256),I=0;I<256;++I)A[I]=String.fromCharCode(I);wA=A}(),GA=C.BindingError=iA(Error,"BindingError"),bA.prototype.isAliasOf=yA,bA.prototype.clone=fA,bA.prototype.delete=uA,bA.prototype.isDeleted=qA,bA.prototype.deleteLater=pA,C.getInheritedInstanceCount=SA,C.getLiveInheritedInstances=UA,C.flushPendingDeletes=JA,C.setDelayFunction=MA,OA.prototype.getPointee=XA,OA.prototype.destructor=PA,OA.prototype.argPackAdvance=8,OA.prototype.readValueFromPointer=IA,OA.prototype.deleteObject=VA,OA.prototype.fromWireType=dA,AI=C.UnboundTypeError=iA(Error,"UnboundTypeError"),C.count_emval_handles=oI,C.get_first_emval=DI;var LI,YI={D:function(A,I,g){throw new _(A).init(I,g),A},e:function(A){var I=$[A];delete $[A];var g=I.rawConstructor,B=I.rawDestructor,Q=I.fields;aA([A],Q.map((A=>A.getterReturnType)).concat(Q.map((A=>A.setterArgumentType))),(A=>{var C={};return Q.forEach(((I,g)=>{var B=I.fieldName,E=A[g],i=I.getter,o=I.getterContext,D=A[g+Q.length],a=I.setter,s=I.setterContext;C[B]={read:A=>E.fromWireType(i(o,A)),write:(A,I)=>{var g=[];a(s,A,D.toWireType(g,I)),AA(g)}}})),[{name:I.name,fromWireType:function(A){var I={};for(var g in C)I[g]=C[g].read(A);return B(A),I},toWireType:function(A,I){for(var Q in C)if(!(Q in I))throw new TypeError(\'Missing field:  "\'+Q+\'"\');var E=g();for(Q in C)C[Q].write(E,I[Q]);return null!==A&&A.push(B,E),E},argPackAdvance:8,readValueFromPointer:IA,destructorFunction:B}]}))},t:function(A,I,g,B,Q){},B:function(A,I,g,B,Q){var C=sA(g);FA(A,{name:I=tA(I),fromWireType:function(A){return!!A},toWireType:function(A,I){return I?B:Q},argPackAdvance:8,readValueFromPointer:function(A){var B;if(1===g)B=n;else if(2===g)B=U;else{if(4!==g)throw new TypeError("Unknown boolean type size: "+I);B=J}return this.fromWireType(B[A>>C])},destructorFunction:null})},r:function(A,I,g,B,Q,E,i,o,D,a,s,w,t){s=tA(s),E=$A(Q,E),o&&(o=$A(i,o)),a&&(a=$A(D,a)),t=$A(w,t);var G=CA(s);!function(A,I,g){C.hasOwnProperty(A)?((void 0===g||void 0!==C[A].overloadTable&&void 0!==C[A].overloadTable[g])&&hA("Cannot register public name \'"+A+"\' twice"),WA(C,A,A),C.hasOwnProperty(g)&&hA("Cannot register multiple overloads of a function with the same number of arguments ("+g+")!"),C[A].overloadTable[g]=I):(C[A]=I,void 0!==g&&(C[A].numArguments=g))}(G,(function(){gI("Cannot construct "+s+" due to unbound types",[B])})),aA([A,I,g],B?[B]:[],(function(I){var g,Q;I=I[0],Q=B?(g=I.registeredClass).instancePrototype:bA.prototype;var i=EA(G,(function(){if(Object.getPrototypeOf(this)!==D)throw new GA("Use \'new\' to construct "+s);if(void 0===w.constructor_body)throw new GA(s+" has no accessible constructor");var A=w.constructor_body[arguments.length];if(void 0===A)throw new GA("Tried to invoke ctor of "+s+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(w.constructor_body).toString()+") parameters instead!");return A.apply(this,arguments)})),D=Object.create(Q,{constructor:{value:i}});i.prototype=D;var w=new ZA(s,i,D,t,g,E,o,a),h=new OA(s,w,!0,!1,!1),F=new OA(s+"*",w,!1,!1,!1),y=new OA(s+" const*",w,!1,!0,!1);return nA[A]={pointerType:F,constPointerType:y},function(A,I,g){C.hasOwnProperty(A)||DA("Replacing nonexistant public symbol"),void 0!==C[A].overloadTable&&void 0!==g?C[A].overloadTable[g]=I:(C[A]=I,C[A].argCount=g)}(G,i),[h,F,y]}))},q:function(A,I,g,B,Q,C){var E;I>0||X(E);var i=BI(I,g);Q=$A(B,Q),aA([],[A],(function(A){var g="constructor "+(A=A[0]).name;if(void 0===A.registeredClass.constructor_body&&(A.registeredClass.constructor_body=[]),void 0!==A.registeredClass.constructor_body[I-1])throw new GA("Cannot register multiple constructors with identical number of parameters ("+(I-1)+") for class \'"+A.name+"\'! Overload resolution is currently only performed using the parameter count, not actual type info!");return A.registeredClass.constructor_body[I-1]=()=>{gI("Cannot construct "+A.name+" due to unbound types",i)},aA([],i,(function(B){return B.splice(1,0,null),A.registeredClass.constructor_body[I-1]=QI(g,B,null,Q,C),[]})),[]}))},b:function(A,I,g,B,Q,C,E,i){var o=BI(g,B);I=tA(I),C=$A(Q,C),aA([],[A],(function(A){var B=(A=A[0]).name+"."+I;function Q(){gI("Cannot call "+B+" due to unbound types",o)}I.startsWith("@@")&&(I=Symbol[I.substring(2)]),i&&A.registeredClass.pureVirtualFunctions.push(I);var D=A.registeredClass.instancePrototype,a=D[I];return void 0===a||void 0===a.overloadTable&&a.className!==A.name&&a.argCount===g-2?(Q.argCount=g-2,Q.className=A.name,D[I]=Q):(WA(D,I,B),D[I].overloadTable[g-2]=Q),aA([],o,(function(Q){var i=QI(B,Q,A,C,E);return void 0===D[I].overloadTable?(i.argCount=g-2,D[I]=i):D[I].overloadTable[g-2]=i,[]})),[]}))},A:function(A,I){FA(A,{name:I=tA(I),fromWireType:function(A){var I=aI.toValue(A);return iI(A),I},toWireType:function(A,I){return aI.toHandle(I)},argPackAdvance:8,readValueFromPointer:IA,destructorFunction:null})},l:function(A,I,g){var B=sA(g);FA(A,{name:I=tA(I),fromWireType:function(A){return A},toWireType:function(A,I){return I},argPackAdvance:8,readValueFromPointer:wI(I,B),destructorFunction:null})},d:function(A,I,g,B,Q){I=tA(I),-1===Q&&(Q=4294967295);var C=sA(g),E=A=>A;if(0===B){var i=32-8*g;E=A=>A<<i>>>i}var o=I.includes("unsigned");FA(A,{name:I,fromWireType:E,toWireType:o?function(A,I){return this.name,I>>>0}:function(A,I){return this.name,I},argPackAdvance:8,readValueFromPointer:tI(I,C,0!==B),destructorFunction:null})},a:function(A,I,g){var B=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][I];function Q(A){var I=H,g=I[A>>=2],Q=I[A+1];return new B(e,Q,g)}FA(A,{name:g=tA(g),fromWireType:Q,argPackAdvance:8,readValueFromPointer:Q},{ignoreDuplicateRegistrations:!0})},k:function(A,I){var g="std::string"===(I=tA(I));FA(A,{name:I,fromWireType:function(A){var I,B=H[A>>2],Q=A+4;if(g)for(var C=Q,E=0;E<=B;++E){var i=Q+E;if(E==B||0==S[i]){var o=l(C,i-C);void 0===I?I=o:(I+=String.fromCharCode(0),I+=o),C=i+1}}else{var D=new Array(B);for(E=0;E<B;++E)D[E]=String.fromCharCode(S[Q+E]);I=D.join("")}return dI(A),I},toWireType:function(A,I){var B;I instanceof ArrayBuffer&&(I=new Uint8Array(I));var Q="string"==typeof I;Q||I instanceof Uint8Array||I instanceof Uint8ClampedArray||I instanceof Int8Array||hA("Cannot pass non-string to std::string"),B=g&&Q?function(A){for(var I=0,g=0;g<A.length;++g){var B=A.charCodeAt(g);B<=127?I++:B<=2047?I+=2:B>=55296&&B<=57343?(I+=4,++g):I+=3}return I}(I):I.length;var C=KI(4+B+1),E=C+4;if(H[C>>2]=B,g&&Q)f(I,E,B+1);else if(Q)for(var i=0;i<B;++i){var o=I.charCodeAt(i);o>255&&(dI(E),hA("String has UTF-16 code units that do not fit in 8 bits")),S[E+i]=o}else for(i=0;i<B;++i)S[E+i]=I[i];return null!==A&&A.push(dI,C),C},argPackAdvance:8,readValueFromPointer:IA,destructorFunction:function(A){dI(A)}})},f:function(A,I,g){var B,Q,C,E,i;g=tA(g),2===I?(B=hI,Q=FI,E=yI,C=()=>k,i=1):4===I&&(B=cI,Q=rI,E=NI,C=()=>H,i=2),FA(A,{name:g,fromWireType:function(A){for(var g,Q=H[A>>2],E=C(),o=A+4,D=0;D<=Q;++D){var a=A+4+D*I;if(D==Q||0==E[a>>i]){var s=B(o,a-o);void 0===g?g=s:(g+=String.fromCharCode(0),g+=s),o=a+I}}return dI(A),g},toWireType:function(A,B){"string"!=typeof B&&hA("Cannot pass non-string to C++ string type "+g);var C=E(B),o=KI(4+C+I);return H[o>>2]=C>>i,Q(B,o+4,C+I),null!==A&&A.push(dI,o),o},argPackAdvance:8,readValueFromPointer:IA,destructorFunction:function(A){dI(A)}})},g:function(A,I,g,B,Q,C){$[A]={name:tA(I),rawConstructor:$A(g,B),rawDestructor:$A(Q,C),fields:[]}},c:function(A,I,g,B,Q,C,E,i,o,D){$[A].fields.push({fieldName:tA(I),getterReturnType:g,getter:$A(B,Q),getterContext:C,setterArgumentType:E,setter:$A(i,o),setterContext:D})},C:function(A,I){FA(A,{isVoid:!0,name:I=tA(I),argPackAdvance:0,fromWireType:function(){},toWireType:function(A,I){}})},h:iI,o:function(A){return 0===A?aI.toHandle(eI()):(A=void 0===(g=RI[I=A])?tA(I):g,aI.toHandle(eI()[A]));var I,g},m:function(A){A>4&&(EI[A].refcount+=1)},n:function(A,I,g,B){A=aI.toValue(A);var Q=SI[I];return Q||(Q=function(A){for(var I="",g=0;g<A;++g)I+=(0!==g?", ":"")+"arg"+g;var B="return function emval_allocator_"+A+"(constructor, argTypes, args) {\\n  var HEAPU32 = getMemory();\\n";for(g=0;g<A;++g)B+="var argType"+g+" = requireRegisteredType(HEAPU32[((argTypes)>>2)], \'parameter "+g+"\');\\nvar arg"+g+" = argType"+g+".readValueFromPointer(args);\\nargs += argType"+g+"[\'argPackAdvance\'];\\nargTypes += 4;\\n";return B+="var obj = new constructor("+I+");\\nreturn valueToHandle(obj);\\n}\\n",new Function("requireRegisteredType","Module","valueToHandle","getMemory",B)(nI,C,aI.toHandle,(()=>H))}(I),SI[I]=Q),Q(A,g,B)},p:function(A,I){var g=(A=nI(A,"_emval_take_value")).readValueFromPointer(I);return aI.toHandle(g)},i:function(){X("")},v:function(){return 2147483648},z:function(A,I,g){S.copyWithin(A,I,I+g)},u:function(A){var I,g,B=S.length,Q=2147483648;if((A>>>=0)>Q)return!1;for(var C=1;C<=4;C*=2){var E=B*(1+.2/C);if(E=Math.min(E,A+100663296),UI(Math.min(Q,(I=Math.max(A,E))+((g=65536)-I%g)%g)))return!0}return!1},w:function(A,I){var g=0;return JI().forEach((function(B,Q){var C=I+g;H[A+4*Q>>2]=C,function(A,I,g){for(var B=0;B<A.length;++B)n[I++>>0]=A.charCodeAt(B);g||(n[I>>0]=0)}(B,C),g+=B.length+1})),0},x:function(A,I){var g=JI();H[A>>2]=g.length;var B=0;return g.forEach((function(A){B+=A.length+1})),H[I>>2]=B,0},y:function(A){return 52},s:function(A,I,g,B,Q){return 70},j:function(A,I,g,B){for(var Q=0,C=0;C<g;C++){var E=H[I>>2],i=H[I+4>>2];I+=8;for(var o=0;o<i;o++)MI(A,S[E+o]);Q+=i}return H[B>>2]=Q,0}},KI=(function(){var A={a:YI};function I(A,I){var g,B=A.exports;C.asm=B,u((R=C.asm.E).buffer),q=C.asm.G,g=C.asm.F,Z.unshift(g),function(A){if(x--,C.monitorRunDependencies&&C.monitorRunDependencies(x),0==x&&(null!==T&&(clearInterval(T),T=null),v)){var I=v;v=null,I()}}()}function g(A){I(A.instance)}function B(I){return function(){if(!c&&(w||t)){if("function"==typeof fetch&&!V(p))return fetch(p,{credentials:"same-origin"}).then((function(A){if(!A.ok)throw"failed to load wasm binary file at \'"+p+"\'";return A.arrayBuffer()})).catch((function(){return O(p)}));if(i)return new Promise((function(A,I){i(p,(function(I){A(new Uint8Array(I))}),I)}))}return Promise.resolve().then((function(){return O(p)}))}().then((function(I){return WebAssembly.instantiate(I,A)})).then((function(A){return A})).then(I,(function(A){N("failed to asynchronously prepare wasm: "+A),X(A)}))}if(x++,C.monitorRunDependencies&&C.monitorRunDependencies(x),C.instantiateWasm)try{return C.instantiateWasm(A,I)}catch(A){N("Module.instantiateWasm callback failed with error: "+A),Q(A)}(c||"function"!=typeof WebAssembly.instantiateStreaming||P(p)||V(p)||G||"function"!=typeof fetch?B(g):fetch(p,{credentials:"same-origin"}).then((function(I){return WebAssembly.instantiateStreaming(I,A).then(g,(function(A){return N("wasm streaming compile failed: "+A),N("falling back to ArrayBuffer instantiation"),B(g)}))}))).catch(Q)}(),C.___wasm_call_ctors=function(){return(C.___wasm_call_ctors=C.asm.F).apply(null,arguments)},C._malloc=function(){return(KI=C._malloc=C.asm.H).apply(null,arguments)}),dI=C._free=function(){return(dI=C._free=C.asm.I).apply(null,arguments)},lI=C.___getTypeName=function(){return(lI=C.___getTypeName=C.asm.J).apply(null,arguments)},fI=(C.__embind_initialize_bindings=function(){return(C.__embind_initialize_bindings=C.asm.K).apply(null,arguments)},C.stackSave=function(){return(fI=C.stackSave=C.asm.L).apply(null,arguments)}),uI=C.stackRestore=function(){return(uI=C.stackRestore=C.asm.M).apply(null,arguments)},qI=C.stackAlloc=function(){return(qI=C.stackAlloc=C.asm.N).apply(null,arguments)},pI=C.___cxa_is_pointer_type=function(){return(pI=C.___cxa_is_pointer_type=C.asm.O).apply(null,arguments)};function bI(A){function g(){LI||(LI=!0,C.calledRun=!0,Y||(z(Z),I(C),C.onRuntimeInitialized&&C.onRuntimeInitialized(),function(){if(C.postRun)for("function"==typeof C.postRun&&(C.postRun=[C.postRun]);C.postRun.length;)A=C.postRun.shift(),m.unshift(A);var A;z(m)}()))}A=A||a,x>0||(function(){if(C.preRun)for("function"==typeof C.preRun&&(C.preRun=[C.preRun]);C.preRun.length;)A=C.preRun.shift(),W.unshift(A);var A;z(W)}(),x>0||(C.setStatus?(C.setStatus("Running..."),setTimeout((function(){setTimeout((function(){C.setStatus("")}),1),g()}),1)):g()))}if(C.dynCall_iji=function(){return(C.dynCall_iji=C.asm.P).apply(null,arguments)},C.dynCall_jji=function(){return(C.dynCall_jji=C.asm.Q).apply(null,arguments)},C.dynCall_iiji=function(){return(C.dynCall_iiji=C.asm.R).apply(null,arguments)},C.dynCall_jiji=function(){return(C.dynCall_jiji=C.asm.S).apply(null,arguments)},C.ccall=function(A,I,g,B,Q){var E={string:A=>{var I=0;if(null!=A&&0!==A){var g=1+(A.length<<2);f(A,I=qI(g),g)}return I},array:A=>{var I=qI(A.length);return function(A,I){n.set(A,I)}(A,I),I}},i=function(A){return C["_"+A]}(A),o=[],D=0;if(B)for(var a=0;a<B.length;a++){var s=E[g[a]];s?(0===D&&(D=fI()),o[a]=s(B[a])):o[a]=B[a]}var w=i.apply(null,o);return w=function(A){return 0!==D&&uI(D),function(A){return"string"===I?l(A):"boolean"===I?Boolean(A):A}(A)}(w)},v=function A(){LI||bI(),LI||(v=A)},C.preInit)for("function"==typeof C.preInit&&(C.preInit=[C.preInit]);C.preInit.length>0;)C.preInit.pop()();return bI(),A.ready});A.exports=Q},6396:(A,I,g)=>{var B,Q=(B=(B="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0)||"/index.js",function(A){var I,Q;(A=void 0!==(A=A||{})?A:{}).ready=new Promise((function(A,g){I=A,Q=g}));var C,E,i,o=Object.assign({},A),D=[],a="object"==typeof window,s="function"==typeof importScripts,w="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,t="";if(w){var G=g(4555),h=g(1005);t=s?h.dirname(t)+"/":"//",C=(A,I)=>(A=X(A)?new URL(A):h.normalize(A),G.readFileSync(A,I?void 0:"utf8")),i=A=>{var I=C(A,!0);return I.buffer||(I=new Uint8Array(I)),I},E=(A,I,g)=>{A=X(A)?new URL(A):h.normalize(A),G.readFile(A,(function(A,B){A?g(A):I(B.buffer)}))},process.argv.length>1&&process.argv[1].replace(/\\\\/g,"/"),D=process.argv.slice(2),process.on("uncaughtException",(function(A){if(!(A instanceof V))throw A})),process.on("unhandledRejection",(function(A){throw A})),A.inspect=function(){return"[Emscripten Module object]"}}else(a||s)&&(s?t=self.location.href:"undefined"!=typeof document&&document.currentScript&&(t=document.currentScript.src),B&&(t=B),t=0!==t.indexOf("blob:")?t.substr(0,t.replace(/[?#].*/,"").lastIndexOf("/")+1):"",C=A=>{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.send(null),I.responseText},s&&(i=A=>{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.responseType="arraybuffer",I.send(null),new Uint8Array(I.response)}),E=(A,I,g)=>{var B=new XMLHttpRequest;B.open("GET",A,!0),B.responseType="arraybuffer",B.onload=()=>{200==B.status||0==B.status&&B.response?I(B.response):g()},B.onerror=g,B.send(null)});var F,y=A.print||console.log.bind(console),c=A.printErr||console.warn.bind(console);Object.assign(A,o),o=null,A.arguments&&(D=A.arguments),A.thisProgram&&A.thisProgram,A.quit&&A.quit,A.wasmBinary&&(F=A.wasmBinary);var r;A.noExitRuntime;"object"!=typeof WebAssembly&&T("no native wasm support detected");var N,R,e,n,S,U,k,J,H,M=!1,L="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function Y(A,I,g){for(var B=I+g,Q=I;A[Q]&&!(Q>=B);)++Q;if(Q-I>16&&A.buffer&&L)return L.decode(A.subarray(I,Q));for(var C="";I<Q;){var E=A[I++];if(128&E){var i=63&A[I++];if(192!=(224&E)){var o=63&A[I++];if((E=224==(240&E)?(15&E)<<12|i<<6|o:(7&E)<<18|i<<12|o<<6|63&A[I++])<65536)C+=String.fromCharCode(E);else{var D=E-65536;C+=String.fromCharCode(55296|D>>10,56320|1023&D)}}else C+=String.fromCharCode((31&E)<<6|i)}else C+=String.fromCharCode(E)}return C}function K(A,I){return A?Y(e,A,I):""}function d(A,I,g){return function(A,I,g,B){if(!(B>0))return 0;for(var Q=g,C=g+B-1,E=0;E<A.length;++E){var i=A.charCodeAt(E);if(i>=55296&&i<=57343&&(i=65536+((1023&i)<<10)|1023&A.charCodeAt(++E)),i<=127){if(g>=C)break;I[g++]=i}else if(i<=2047){if(g+1>=C)break;I[g++]=192|i>>6,I[g++]=128|63&i}else if(i<=65535){if(g+2>=C)break;I[g++]=224|i>>12,I[g++]=128|i>>6&63,I[g++]=128|63&i}else{if(g+3>=C)break;I[g++]=240|i>>18,I[g++]=128|i>>12&63,I[g++]=128|i>>6&63,I[g++]=128|63&i}}return I[g]=0,g-Q}(A,e,I,g)}function l(I){N=I,A.HEAP8=R=new Int8Array(I),A.HEAP16=n=new Int16Array(I),A.HEAP32=U=new Int32Array(I),A.HEAPU8=e=new Uint8Array(I),A.HEAPU16=S=new Uint16Array(I),A.HEAPU32=k=new Uint32Array(I),A.HEAPF32=J=new Float32Array(I),A.HEAPF64=H=new Float64Array(I)}A.INITIAL_MEMORY;var f,u,q,p=[],b=[],W=[],Z=0,m=null,x=null;function T(I){A.onAbort&&A.onAbort(I),c(I="Aborted("+I+")"),M=!0,I+=". Build with -sASSERTIONS for more info.";var g=new WebAssembly.RuntimeError(I);throw Q(g),g}function v(A){return A.startsWith("data:application/octet-stream;base64,")}function X(A){return A.startsWith("file://")}function P(A){try{if(A==u&&F)return new Uint8Array(F);if(i)return i(A);throw"both async and sync fetching of the wasm failed"}catch(A){T(A)}}function V(A){this.name="ExitStatus",this.message="Program terminated with exit("+A+")",this.status=A}function O(I){for(;I.length>0;)I.shift()(A)}v(u="openjphjs.wasm")||(q=u,u=A.locateFile?A.locateFile(q,t):t+q);var j=[],z=0,_=[];function $(A){var I=_[A];return I||(A>=_.length&&(_.length=A+1),_[A]=I=f.get(A)),I}function AA(A){this.excPtr=A,this.ptr=A-24,this.set_type=function(A){k[this.ptr+4>>2]=A},this.get_type=function(){return k[this.ptr+4>>2]},this.set_destructor=function(A){k[this.ptr+8>>2]=A},this.get_destructor=function(){return k[this.ptr+8>>2]},this.set_refcount=function(A){U[this.ptr>>2]=A},this.set_caught=function(A){A=A?1:0,R[this.ptr+12>>0]=A},this.get_caught=function(){return 0!=R[this.ptr+12>>0]},this.set_rethrown=function(A){A=A?1:0,R[this.ptr+13>>0]=A},this.get_rethrown=function(){return 0!=R[this.ptr+13>>0]},this.init=function(A,I){this.set_adjusted_ptr(0),this.set_type(A),this.set_destructor(I),this.set_refcount(0),this.set_caught(!1),this.set_rethrown(!1)},this.add_ref=function(){var A=U[this.ptr>>2];U[this.ptr>>2]=A+1},this.release_ref=function(){var A=U[this.ptr>>2];return U[this.ptr>>2]=A-1,1===A},this.set_adjusted_ptr=function(A){k[this.ptr+16>>2]=A},this.get_adjusted_ptr=function(){return k[this.ptr+16>>2]},this.get_exception_ptr=function(){if(qI(this.get_type()))return k[this.excPtr>>2];var A=this.get_adjusted_ptr();return 0!==A?A:this.excPtr}}var IA={};function gA(A){for(;A.length;){var I=A.pop();A.pop()(I)}}function BA(A){return this.fromWireType(U[A>>2])}var QA={},CA={},EA={};function iA(A){if(void 0===A)return"_unknown";var I=(A=A.replace(/[^a-zA-Z0-9_]/g,"$")).charCodeAt(0);return I>=48&&I<=57?"_"+A:A}function oA(A,I){return A=iA(A),new Function("body","return function "+A+\'() {\\n    "use strict";    return body.apply(this, arguments);\\n};\\n\')(I)}function DA(A,I){var g=oA(I,(function(A){this.name=I,this.message=A;var g=new Error(A).stack;void 0!==g&&(this.stack=this.toString()+"\\n"+g.replace(/^Error(:[^\\n]*)?\\n/,""))}));return g.prototype=Object.create(A.prototype),g.prototype.constructor=g,g.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message},g}var aA=void 0;function sA(A){throw new aA(A)}function wA(A,I,g){function B(I){var B=g(I);B.length!==A.length&&sA("Mismatched type converter count");for(var Q=0;Q<A.length;++Q)cA(A[Q],B[Q])}A.forEach((function(A){EA[A]=I}));var Q=new Array(I.length),C=[],E=0;I.forEach(((A,I)=>{CA.hasOwnProperty(A)?Q[I]=CA[A]:(C.push(A),QA.hasOwnProperty(A)||(QA[A]=[]),QA[A].push((()=>{Q[I]=CA[A],++E===C.length&&B(Q)})))})),0===C.length&&B(Q)}function tA(A){switch(A){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+A)}}var GA=void 0;function hA(A){for(var I="",g=A;e[g];)I+=GA[e[g++]];return I}var FA=void 0;function yA(A){throw new FA(A)}function cA(A,I,g={}){if(!("argPackAdvance"in I))throw new TypeError("registerType registeredInstance requires argPackAdvance");var B=I.name;if(A||yA(\'type "\'+B+\'" must have a positive integer typeid pointer\'),CA.hasOwnProperty(A)){if(g.ignoreDuplicateRegistrations)return;yA("Cannot register type \'"+B+"\' twice")}if(CA[A]=I,delete EA[A],QA.hasOwnProperty(A)){var Q=QA[A];delete QA[A],Q.forEach((A=>A()))}}function rA(A){if(!(this instanceof ZA))return!1;if(!(A instanceof ZA))return!1;for(var I=this.$$.ptrType.registeredClass,g=this.$$.ptr,B=A.$$.ptrType.registeredClass,Q=A.$$.ptr;I.baseClass;)g=I.upcast(g),I=I.baseClass;for(;B.baseClass;)Q=B.upcast(Q),B=B.baseClass;return I===B&&g===Q}function NA(A){yA(A.$$.ptrType.registeredClass.name+" instance already deleted")}var RA=!1;function eA(A){}function nA(A){A.count.value-=1,0===A.count.value&&function(A){A.smartPtr?A.smartPtrType.rawDestructor(A.smartPtr):A.ptrType.registeredClass.rawDestructor(A.ptr)}(A)}function SA(A,I,g){if(I===g)return A;if(void 0===g.baseClass)return null;var B=SA(A,I,g.baseClass);return null===B?null:g.downcast(B)}var UA={};function kA(){return Object.keys(KA).length}function JA(){var A=[];for(var I in KA)KA.hasOwnProperty(I)&&A.push(KA[I]);return A}var HA=[];function MA(){for(;HA.length;){var A=HA.pop();A.$$.deleteScheduled=!1,A.delete()}}var LA=void 0;function YA(A){LA=A,HA.length&&LA&&LA(MA)}var KA={};function dA(A,I){return I=function(A,I){for(void 0===I&&yA("ptr should not be undefined");A.baseClass;)I=A.upcast(I),A=A.baseClass;return I}(A,I),KA[I]}function lA(A,I){return I.ptrType&&I.ptr||sA("makeClassHandle requires ptr and ptrType"),!!I.smartPtrType!=!!I.smartPtr&&sA("Both smartPtrType and smartPtr must be specified"),I.count={value:1},uA(Object.create(A,{$$:{value:I}}))}function fA(A){var I=this.getPointee(A);if(!I)return this.destructor(A),null;var g=dA(this.registeredClass,I);if(void 0!==g){if(0===g.$$.count.value)return g.$$.ptr=I,g.$$.smartPtr=A,g.clone();var B=g.clone();return this.destructor(A),B}function Q(){return this.isSmartPointer?lA(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:I,smartPtrType:this,smartPtr:A}):lA(this.registeredClass.instancePrototype,{ptrType:this,ptr:A})}var C,E=this.registeredClass.getActualType(I),i=UA[E];if(!i)return Q.call(this);C=this.isConst?i.constPointerType:i.pointerType;var o=SA(I,this.registeredClass,C.registeredClass);return null===o?Q.call(this):this.isSmartPointer?lA(C.registeredClass.instancePrototype,{ptrType:C,ptr:o,smartPtrType:this,smartPtr:A}):lA(C.registeredClass.instancePrototype,{ptrType:C,ptr:o})}function uA(A){return"undefined"==typeof FinalizationRegistry?(uA=A=>A,A):(RA=new FinalizationRegistry((A=>{nA(A.$$)})),eA=A=>RA.unregister(A),(uA=A=>{var I=A.$$;if(I.smartPtr){var g={$$:I};RA.register(A,g,A)}return A})(A))}function qA(){if(this.$$.ptr||NA(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var A,I=uA(Object.create(Object.getPrototypeOf(this),{$$:{value:(A=this.$$,{count:A.count,deleteScheduled:A.deleteScheduled,preservePointerOnDelete:A.preservePointerOnDelete,ptr:A.ptr,ptrType:A.ptrType,smartPtr:A.smartPtr,smartPtrType:A.smartPtrType})}}));return I.$$.count.value+=1,I.$$.deleteScheduled=!1,I}function pA(){this.$$.ptr||NA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&yA("Object already scheduled for deletion"),eA(this),nA(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)}function bA(){return!this.$$.ptr}function WA(){return this.$$.ptr||NA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&yA("Object already scheduled for deletion"),HA.push(this),1===HA.length&&LA&&LA(MA),this.$$.deleteScheduled=!0,this}function ZA(){}function mA(A,I,g){if(void 0===A[I].overloadTable){var B=A[I];A[I]=function(){return A[I].overloadTable.hasOwnProperty(arguments.length)||yA("Function \'"+g+"\' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+A[I].overloadTable+")!"),A[I].overloadTable[arguments.length].apply(this,arguments)},A[I].overloadTable=[],A[I].overloadTable[B.argCount]=B}}function xA(I,g,B){A.hasOwnProperty(I)?((void 0===B||void 0!==A[I].overloadTable&&void 0!==A[I].overloadTable[B])&&yA("Cannot register public name \'"+I+"\' twice"),mA(A,I,I),A.hasOwnProperty(B)&&yA("Cannot register multiple overloads of a function with the same number of arguments ("+B+")!"),A[I].overloadTable[B]=g):(A[I]=g,void 0!==B&&(A[I].numArguments=B))}function TA(A,I,g,B,Q,C,E,i){this.name=A,this.constructor=I,this.instancePrototype=g,this.rawDestructor=B,this.baseClass=Q,this.getActualType=C,this.upcast=E,this.downcast=i,this.pureVirtualFunctions=[]}function vA(A,I,g){for(;I!==g;)I.upcast||yA("Expected null or instance of "+g.name+", got an instance of "+I.name),A=I.upcast(A),I=I.baseClass;return A}function XA(A,I){if(null===I)return this.isReference&&yA("null is not a valid "+this.name),0;I.$$||yA(\'Cannot pass "\'+tI(I)+\'" as a \'+this.name),I.$$.ptr||yA("Cannot pass deleted object as a pointer of type "+this.name);var g=I.$$.ptrType.registeredClass;return vA(I.$$.ptr,g,this.registeredClass)}function PA(A,I){var g;if(null===I)return this.isReference&&yA("null is not a valid "+this.name),this.isSmartPointer?(g=this.rawConstructor(),null!==A&&A.push(this.rawDestructor,g),g):0;I.$$||yA(\'Cannot pass "\'+tI(I)+\'" as a \'+this.name),I.$$.ptr||yA("Cannot pass deleted object as a pointer of type "+this.name),!this.isConst&&I.$$.ptrType.isConst&&yA("Cannot convert argument of type "+(I.$$.smartPtrType?I.$$.smartPtrType.name:I.$$.ptrType.name)+" to parameter type "+this.name);var B=I.$$.ptrType.registeredClass;if(g=vA(I.$$.ptr,B,this.registeredClass),this.isSmartPointer)switch(void 0===I.$$.smartPtr&&yA("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:I.$$.smartPtrType===this?g=I.$$.smartPtr:yA("Cannot convert argument of type "+(I.$$.smartPtrType?I.$$.smartPtrType.name:I.$$.ptrType.name)+" to parameter type "+this.name);break;case 1:g=I.$$.smartPtr;break;case 2:if(I.$$.smartPtrType===this)g=I.$$.smartPtr;else{var Q=I.clone();g=this.rawShare(g,wI.toHandle((function(){Q.delete()}))),null!==A&&A.push(this.rawDestructor,g)}break;default:yA("Unsupporting sharing policy")}return g}function VA(A,I){if(null===I)return this.isReference&&yA("null is not a valid "+this.name),0;I.$$||yA(\'Cannot pass "\'+tI(I)+\'" as a \'+this.name),I.$$.ptr||yA("Cannot pass deleted object as a pointer of type "+this.name),I.$$.ptrType.isConst&&yA("Cannot convert argument of type "+I.$$.ptrType.name+" to parameter type "+this.name);var g=I.$$.ptrType.registeredClass;return vA(I.$$.ptr,g,this.registeredClass)}function OA(A){return this.rawGetPointee&&(A=this.rawGetPointee(A)),A}function jA(A){this.rawDestructor&&this.rawDestructor(A)}function zA(A){null!==A&&A.delete()}function _A(A,I,g,B,Q,C,E,i,o,D,a){this.name=A,this.registeredClass=I,this.isReference=g,this.isConst=B,this.isSmartPointer=Q,this.pointeeType=C,this.sharingPolicy=E,this.rawGetPointee=i,this.rawConstructor=o,this.rawShare=D,this.rawDestructor=a,Q||void 0!==I.baseClass?this.toWireType=PA:B?(this.toWireType=XA,this.destructorFunction=null):(this.toWireType=VA,this.destructorFunction=null)}function $A(I,g,B){A.hasOwnProperty(I)||sA("Replacing nonexistant public symbol"),void 0!==A[I].overloadTable&&void 0!==B?A[I].overloadTable[B]=g:(A[I]=g,A[I].argCount=B)}function AI(I,g,B){return I.includes("j")?function(I,g,B){var Q=A["dynCall_"+I];return B&&B.length?Q.apply(null,[g].concat(B)):Q.call(null,g)}(I,g,B):$(g).apply(null,B)}function II(A,I){var g,B,Q,C=(A=hA(A)).includes("j")?(g=A,B=I,Q=[],function(){return Q.length=0,Object.assign(Q,arguments),AI(g,B,Q)}):$(I);return"function"!=typeof C&&yA("unknown function pointer with signature "+A+": "+I),C}var gI=void 0;function BI(A){var I=YI(A),g=hA(I);return LI(I),g}function QI(A,I){var g=[],B={};throw I.forEach((function A(I){B[I]||CA[I]||(EA[I]?EA[I].forEach(A):(g.push(I),B[I]=!0))})),new gI(A+": "+g.map(BI).join([", "]))}function CI(A,I){for(var g=[],B=0;B<A;B++)g.push(k[I+4*B>>2]);return g}function EI(A,I,g,B,Q){var C=I.length;C<2&&yA("argTypes array size mismatch! Must at least get return value and \'this\' types!");for(var E=null!==I[1]&&null!==g,i=!1,o=1;o<I.length;++o)if(null!==I[o]&&void 0===I[o].destructorFunction){i=!0;break}var D="void"!==I[0].name,a="",s="";for(o=0;o<C-2;++o)a+=(0!==o?", ":"")+"arg"+o,s+=(0!==o?", ":"")+"arg"+o+"Wired";var w="return function "+iA(A)+"("+a+") {\\nif (arguments.length !== "+(C-2)+") {\\nthrowBindingError(\'function "+A+" called with \' + arguments.length + \' arguments, expected "+(C-2)+" args!\');\\n}\\n";i&&(w+="var destructors = [];\\n");var t=i?"destructors":"null",G=["throwBindingError","invoker","fn","runDestructors","retType","classParam"],h=[yA,B,Q,gA,I[0],I[1]];for(E&&(w+="var thisWired = classParam.toWireType("+t+", this);\\n"),o=0;o<C-2;++o)w+="var arg"+o+"Wired = argType"+o+".toWireType("+t+", arg"+o+"); // "+I[o+2].name+"\\n",G.push("argType"+o),h.push(I[o+2]);if(E&&(s="thisWired"+(s.length>0?", ":"")+s),w+=(D?"var rv = ":"")+"invoker(fn"+(s.length>0?", ":"")+s+");\\n",i)w+="runDestructors(destructors);\\n";else for(o=E?1:2;o<I.length;++o){var F=1===o?"thisWired":"arg"+(o-2)+"Wired";null!==I[o].destructorFunction&&(w+=F+"_dtor("+F+"); // "+I[o].name+"\\n",G.push(F+"_dtor"),h.push(I[o].destructorFunction))}return D&&(w+="var ret = retType.fromWireType(rv);\\nreturn ret;\\n"),w+="}\\n",G.push(w),function(A,I){if(!(A instanceof Function))throw new TypeError("new_ called with constructor type "+typeof A+" which is not a function");var g=oA(A.name||"unknownFunctionName",(function(){}));g.prototype=A.prototype;var B=new g,Q=A.apply(B,I);return Q instanceof Object?Q:B}(Function,G).apply(null,h)}var iI=[],oI=[{},{value:void 0},{value:null},{value:!0},{value:!1}];function DI(A){A>4&&0==--oI[A].refcount&&(oI[A]=void 0,iI.push(A))}function aI(){for(var A=0,I=5;I<oI.length;++I)void 0!==oI[I]&&++A;return A}function sI(){for(var A=5;A<oI.length;++A)if(void 0!==oI[A])return oI[A];return null}var wI={toValue:A=>(A||yA("Cannot use deleted val. handle = "+A),oI[A].value),toHandle:A=>{switch(A){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:var I=iI.length?iI.pop():oI.length;return oI[I]={refcount:1,value:A},I}}};function tI(A){if(null===A)return"null";var I=typeof A;return"object"===I||"array"===I||"function"===I?A.toString():""+A}function GI(A,I){switch(I){case 2:return function(A){return this.fromWireType(J[A>>2])};case 3:return function(A){return this.fromWireType(H[A>>3])};default:throw new TypeError("Unknown float type: "+A)}}function hI(A,I,g){switch(I){case 0:return g?function(A){return R[A]}:function(A){return e[A]};case 1:return g?function(A){return n[A>>1]}:function(A){return S[A>>1]};case 2:return g?function(A){return U[A>>2]}:function(A){return k[A>>2]};default:throw new TypeError("Unknown integer type: "+A)}}var FI="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0;function yI(A,I){for(var g=A,B=g>>1,Q=B+I/2;!(B>=Q)&&S[B];)++B;if((g=B<<1)-A>32&&FI)return FI.decode(e.subarray(A,g));for(var C="",E=0;!(E>=I/2);++E){var i=n[A+2*E>>1];if(0==i)break;C+=String.fromCharCode(i)}return C}function cI(A,I,g){if(void 0===g&&(g=2147483647),g<2)return 0;for(var B=I,Q=(g-=2)<2*A.length?g/2:A.length,C=0;C<Q;++C){var E=A.charCodeAt(C);n[I>>1]=E,I+=2}return n[I>>1]=0,I-B}function rI(A){return 2*A.length}function NI(A,I){for(var g=0,B="";!(g>=I/4);){var Q=U[A+4*g>>2];if(0==Q)break;if(++g,Q>=65536){var C=Q-65536;B+=String.fromCharCode(55296|C>>10,56320|1023&C)}else B+=String.fromCharCode(Q)}return B}function RI(A,I,g){if(void 0===g&&(g=2147483647),g<4)return 0;for(var B=I,Q=B+g-4,C=0;C<A.length;++C){var E=A.charCodeAt(C);if(E>=55296&&E<=57343&&(E=65536+((1023&E)<<10)|1023&A.charCodeAt(++C)),U[I>>2]=E,(I+=4)+4>Q)break}return U[I>>2]=0,I-B}function eI(A){for(var I=0,g=0;g<A.length;++g){var B=A.charCodeAt(g);B>=55296&&B<=57343&&++g,I+=4}return I}function nI(A){try{return r.grow(A-N.byteLength+65535>>>16),l(r.buffer),1}catch(A){}}var SI=[null,[],[]];function UI(A,I){var g=SI[A];0===I||10===I?((1===A?y:c)(Y(g,0)),g.length=0):g.push(I)}aA=A.InternalError=DA(Error,"InternalError"),function(){for(var A=new Array(256),I=0;I<256;++I)A[I]=String.fromCharCode(I);GA=A}(),FA=A.BindingError=DA(Error,"BindingError"),ZA.prototype.isAliasOf=rA,ZA.prototype.clone=qA,ZA.prototype.delete=pA,ZA.prototype.isDeleted=bA,ZA.prototype.deleteLater=WA,A.getInheritedInstanceCount=kA,A.getLiveInheritedInstances=JA,A.flushPendingDeletes=MA,A.setDelayFunction=YA,_A.prototype.getPointee=OA,_A.prototype.destructor=jA,_A.prototype.argPackAdvance=8,_A.prototype.readValueFromPointer=BA,_A.prototype.deleteObject=zA,_A.prototype.fromWireType=fA,gI=A.UnboundTypeError=DA(Error,"UnboundTypeError"),A.count_emval_handles=aI,A.get_first_emval=sI;var kI,JI={M:function(A){var I=new AA(A);return I.get_caught()||I.set_caught(!0),I.set_rethrown(!1),j.push(I),function(A){A.add_ref()}(I),I.get_exception_ptr()},v:function(){_setThrew(0),function(A){if(A.release_ref()&&!A.get_rethrown()){var I=A.get_destructor();I&&$(I)(A.excPtr),MI(A.excPtr)}}(j.pop()),z=0},c:function(){var A=z;if(!A)return KI(0),0;var I=new AA(A);I.set_adjusted_ptr(A);var g=I.get_type();if(!g)return KI(0),A;for(var B=0;B<arguments.length;B++){var Q=arguments[B];if(0===Q||Q===g)break;var C=I.ptr+16;if(uI(Q,g,C))return KI(Q),A}return KI(g),A},j:function(){var A=z;if(!A)return KI(0),0;var I=new AA(A);I.set_adjusted_ptr(A);var g=I.get_type();if(!g)return KI(0),A;for(var B=0;B<arguments.length;B++){var Q=arguments[B];if(0===Q||Q===g)break;var C=I.ptr+16;if(uI(Q,g,C))return KI(Q),A}return KI(g),A},i:function(A,I,g){throw new AA(A).init(I,g),z=A,A},f:function(A){throw z||(z=A),A},B:function(A){var I=IA[A];delete IA[A];var g=I.rawConstructor,B=I.rawDestructor,Q=I.fields;wA([A],Q.map((A=>A.getterReturnType)).concat(Q.map((A=>A.setterArgumentType))),(A=>{var C={};return Q.forEach(((I,g)=>{var B=I.fieldName,E=A[g],i=I.getter,o=I.getterContext,D=A[g+Q.length],a=I.setter,s=I.setterContext;C[B]={read:A=>E.fromWireType(i(o,A)),write:(A,I)=>{var g=[];a(s,A,D.toWireType(g,I)),gA(g)}}})),[{name:I.name,fromWireType:function(A){var I={};for(var g in C)I[g]=C[g].read(A);return B(A),I},toWireType:function(A,I){for(var Q in C)if(!(Q in I))throw new TypeError(\'Missing field:  "\'+Q+\'"\');var E=g();for(Q in C)C[Q].write(E,I[Q]);return null!==A&&A.push(B,E),E},argPackAdvance:8,readValueFromPointer:BA,destructorFunction:B}]}))},E:function(A,I,g,B,Q){},J:function(A,I,g,B,Q){var C=tA(g);cA(A,{name:I=hA(I),fromWireType:function(A){return!!A},toWireType:function(A,I){return I?B:Q},argPackAdvance:8,readValueFromPointer:function(A){var B;if(1===g)B=R;else if(2===g)B=n;else{if(4!==g)throw new TypeError("Unknown boolean type size: "+I);B=U}return this.fromWireType(B[A>>C])},destructorFunction:null})},z:function(A,I,g,B,Q,C,E,i,o,D,a,s,w){a=hA(a),C=II(Q,C),i&&(i=II(E,i)),D&&(D=II(o,D)),w=II(s,w);var t=iA(a);xA(t,(function(){QI("Cannot construct "+a+" due to unbound types",[B])})),wA([A,I,g],B?[B]:[],(function(I){var g,Q;I=I[0],Q=B?(g=I.registeredClass).instancePrototype:ZA.prototype;var E=oA(t,(function(){if(Object.getPrototypeOf(this)!==o)throw new FA("Use \'new\' to construct "+a);if(void 0===s.constructor_body)throw new FA(a+" has no accessible constructor");var A=s.constructor_body[arguments.length];if(void 0===A)throw new FA("Tried to invoke ctor of "+a+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(s.constructor_body).toString()+") parameters instead!");return A.apply(this,arguments)})),o=Object.create(Q,{constructor:{value:E}});E.prototype=o;var s=new TA(a,E,o,w,g,C,i,D),G=new _A(a,s,!0,!1,!1),h=new _A(a+"*",s,!1,!1,!1),F=new _A(a+" const*",s,!1,!0,!1);return UA[A]={pointerType:h,constPointerType:F},$A(t,E),[G,h,F]}))},y:function(A,I,g,B,Q,C){var E;I>0||T(E);var i=CI(I,g);Q=II(B,Q),wA([],[A],(function(A){var g="constructor "+(A=A[0]).name;if(void 0===A.registeredClass.constructor_body&&(A.registeredClass.constructor_body=[]),void 0!==A.registeredClass.constructor_body[I-1])throw new FA("Cannot register multiple constructors with identical number of parameters ("+(I-1)+") for class \'"+A.name+"\'! Overload resolution is currently only performed using the parameter count, not actual type info!");return A.registeredClass.constructor_body[I-1]=()=>{QI("Cannot construct "+A.name+" due to unbound types",i)},wA([],i,(function(B){return B.splice(1,0,null),A.registeredClass.constructor_body[I-1]=EI(g,B,null,Q,C),[]})),[]}))},a:function(A,I,g,B,Q,C,E,i){var o=CI(g,B);I=hA(I),C=II(Q,C),wA([],[A],(function(A){var B=(A=A[0]).name+"."+I;function Q(){QI("Cannot call "+B+" due to unbound types",o)}I.startsWith("@@")&&(I=Symbol[I.substring(2)]),i&&A.registeredClass.pureVirtualFunctions.push(I);var D=A.registeredClass.instancePrototype,a=D[I];return void 0===a||void 0===a.overloadTable&&a.className!==A.name&&a.argCount===g-2?(Q.argCount=g-2,Q.className=A.name,D[I]=Q):(mA(D,I,B),D[I].overloadTable[g-2]=Q),wA([],o,(function(Q){var i=EI(B,Q,A,C,E);return void 0===D[I].overloadTable?(i.argCount=g-2,D[I]=i):D[I].overloadTable[g-2]=i,[]})),[]}))},I:function(A,I){cA(A,{name:I=hA(I),fromWireType:function(A){var I=wI.toValue(A);return DI(A),I},toWireType:function(A,I){return wI.toHandle(I)},argPackAdvance:8,readValueFromPointer:BA,destructorFunction:null})},u:function(A,I,g){var B=tA(g);cA(A,{name:I=hA(I),fromWireType:function(A){return A},toWireType:function(A,I){return I},argPackAdvance:8,readValueFromPointer:GI(I,B),destructorFunction:null})},o:function(A,I,g,B,Q,C){var E=CI(I,g);A=hA(A),Q=II(B,Q),xA(A,(function(){QI("Cannot call "+A+" due to unbound types",E)}),I-1),wA([],E,(function(g){var B=[g[0],null].concat(g.slice(1));return $A(A,EI(A,B,null,Q,C),I-1),[]}))},h:function(A,I,g,B,Q){I=hA(I),-1===Q&&(Q=4294967295);var C=tA(g),E=A=>A;if(0===B){var i=32-8*g;E=A=>A<<i>>>i}var o=I.includes("unsigned");cA(A,{name:I,fromWireType:E,toWireType:o?function(A,I){return this.name,I>>>0}:function(A,I){return this.name,I},argPackAdvance:8,readValueFromPointer:hI(I,C,0!==B),destructorFunction:null})},d:function(A,I,g){var B=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][I];function Q(A){var I=k,g=I[A>>=2],Q=I[A+1];return new B(N,Q,g)}cA(A,{name:g=hA(g),fromWireType:Q,argPackAdvance:8,readValueFromPointer:Q},{ignoreDuplicateRegistrations:!0})},t:function(A,I){var g="std::string"===(I=hA(I));cA(A,{name:I,fromWireType:function(A){var I,B=k[A>>2],Q=A+4;if(g)for(var C=Q,E=0;E<=B;++E){var i=Q+E;if(E==B||0==e[i]){var o=K(C,i-C);void 0===I?I=o:(I+=String.fromCharCode(0),I+=o),C=i+1}}else{var D=new Array(B);for(E=0;E<B;++E)D[E]=String.fromCharCode(e[Q+E]);I=D.join("")}return LI(A),I},toWireType:function(A,I){var B;I instanceof ArrayBuffer&&(I=new Uint8Array(I));var Q="string"==typeof I;Q||I instanceof Uint8Array||I instanceof Uint8ClampedArray||I instanceof Int8Array||yA("Cannot pass non-string to std::string"),B=g&&Q?function(A){for(var I=0,g=0;g<A.length;++g){var B=A.charCodeAt(g);B<=127?I++:B<=2047?I+=2:B>=55296&&B<=57343?(I+=4,++g):I+=3}return I}(I):I.length;var C=HI(4+B+1),E=C+4;if(k[C>>2]=B,g&&Q)d(I,E,B+1);else if(Q)for(var i=0;i<B;++i){var o=I.charCodeAt(i);o>255&&(LI(E),yA("String has UTF-16 code units that do not fit in 8 bits")),e[E+i]=o}else for(i=0;i<B;++i)e[E+i]=I[i];return null!==A&&A.push(LI,C),C},argPackAdvance:8,readValueFromPointer:BA,destructorFunction:function(A){LI(A)}})},q:function(A,I,g){var B,Q,C,E,i;g=hA(g),2===I?(B=yI,Q=cI,E=rI,C=()=>S,i=1):4===I&&(B=NI,Q=RI,E=eI,C=()=>k,i=2),cA(A,{name:g,fromWireType:function(A){for(var g,Q=k[A>>2],E=C(),o=A+4,D=0;D<=Q;++D){var a=A+4+D*I;if(D==Q||0==E[a>>i]){var s=B(o,a-o);void 0===g?g=s:(g+=String.fromCharCode(0),g+=s),o=a+I}}return LI(A),g},toWireType:function(A,B){"string"!=typeof B&&yA("Cannot pass non-string to C++ string type "+g);var C=E(B),o=HI(4+C+I);return k[o>>2]=C>>i,Q(B,o+4,C+I),null!==A&&A.push(LI,o),o},argPackAdvance:8,readValueFromPointer:BA,destructorFunction:function(A){LI(A)}})},p:function(A,I,g,B,Q,C){IA[A]={name:hA(I),rawConstructor:II(g,B),rawDestructor:II(Q,C),fields:[]}},C:function(A,I,g,B,Q,C,E,i,o,D){IA[A].fields.push({fieldName:hA(I),getterReturnType:g,getter:II(B,Q),getterContext:C,setterArgumentType:E,setter:II(i,o),setterContext:D})},K:function(A,I){cA(A,{isVoid:!0,name:I=hA(I),argPackAdvance:0,fromWireType:function(){},toWireType:function(A,I){}})},O:DI,P:function(A){A>4&&(oI[A].refcount+=1)},n:function(A,I){var g,B,Q;B="_emval_take_value",void 0===(Q=CA[g=A])&&yA(B+" has unknown type "+BI(g));var C=(A=Q).readValueFromPointer(I);return wI.toHandle(C)},r:function(){T("")},H:function(A,I,g){e.copyWithin(A,I,I+g)},F:function(A){var I,g,B=e.length,Q=2147483648;if((A>>>=0)>Q)return!1;for(var C=1;C<=4;C*=2){var E=B*(1+.2/C);if(E=Math.min(E,A+100663296),nI(Math.min(Q,(I=Math.max(A,E))+((g=65536)-I%g)%g)))return!0}return!1},G:function(A){return 52},D:function(A,I,g,B,Q){return 70},s:function(A,I,g,B){for(var Q=0,C=0;C<g;C++){var E=k[I>>2],i=k[I+4>>2];I+=8;for(var o=0;o<i;o++)UI(A,e[E+o]);Q+=i}return k[B>>2]=Q,0},b:function(A,I){var g=dI();try{return $(A)(I)}catch(A){if(lI(g),A!==A+0)throw A;_setThrew(1,0)}},A:function(A,I,g){var B=dI();try{return $(A)(I,g)}catch(A){if(lI(B),A!==A+0)throw A;_setThrew(1,0)}},w:function(A,I,g,B){var Q=dI();try{return $(A)(I,g,B)}catch(A){if(lI(Q),A!==A+0)throw A;_setThrew(1,0)}},e:function(A,I){var g=dI();try{$(A)(I)}catch(A){if(lI(g),A!==A+0)throw A;_setThrew(1,0)}},k:function(A,I,g){var B=dI();try{$(A)(I,g)}catch(A){if(lI(B),A!==A+0)throw A;_setThrew(1,0)}},l:function(A,I,g,B){var Q=dI();try{$(A)(I,g,B)}catch(A){if(lI(Q),A!==A+0)throw A;_setThrew(1,0)}},x:function(A,I,g,B,Q){var C=dI();try{$(A)(I,g,B,Q)}catch(A){if(lI(C),A!==A+0)throw A;_setThrew(1,0)}},L:function(A,I,g,B,Q,C,E){var i=dI();try{$(A)(I,g,B,Q,C,E)}catch(A){if(lI(i),A!==A+0)throw A;_setThrew(1,0)}},m:function(A,I,g,B,Q,C,E,i){var o=dI();try{$(A)(I,g,B,Q,C,E,i)}catch(A){if(lI(o),A!==A+0)throw A;_setThrew(1,0)}},g:function(A,I,g,B,Q,C,E,i,o,D,a){var s=dI();try{$(A)(I,g,B,Q,C,E,i,o,D,a)}catch(A){if(lI(s),A!==A+0)throw A;_setThrew(1,0)}},N:function(A){return A}},HI=(function(){var I={a:JI};function g(I,g){var B,Q=I.exports;A.asm=Q,l((r=A.asm.Q).buffer),f=A.asm.U,B=A.asm.R,b.unshift(B),function(I){if(Z--,A.monitorRunDependencies&&A.monitorRunDependencies(Z),0==Z&&(null!==m&&(clearInterval(m),m=null),x)){var g=x;x=null,g()}}()}function B(A){g(A.instance)}function C(A){return function(){if(!F&&(a||s)){if("function"==typeof fetch&&!X(u))return fetch(u,{credentials:"same-origin"}).then((function(A){if(!A.ok)throw"failed to load wasm binary file at \'"+u+"\'";return A.arrayBuffer()})).catch((function(){return P(u)}));if(E)return new Promise((function(A,I){E(u,(function(I){A(new Uint8Array(I))}),I)}))}return Promise.resolve().then((function(){return P(u)}))}().then((function(A){return WebAssembly.instantiate(A,I)})).then((function(A){return A})).then(A,(function(A){c("failed to asynchronously prepare wasm: "+A),T(A)}))}if(Z++,A.monitorRunDependencies&&A.monitorRunDependencies(Z),A.instantiateWasm)try{return A.instantiateWasm(I,g)}catch(A){c("Module.instantiateWasm callback failed with error: "+A),Q(A)}(F||"function"!=typeof WebAssembly.instantiateStreaming||v(u)||X(u)||w||"function"!=typeof fetch?C(B):fetch(u,{credentials:"same-origin"}).then((function(A){return WebAssembly.instantiateStreaming(A,I).then(B,(function(A){return c("wasm streaming compile failed: "+A),c("falling back to ArrayBuffer instantiation"),C(B)}))}))).catch(Q)}(),A.___wasm_call_ctors=function(){return(A.___wasm_call_ctors=A.asm.R).apply(null,arguments)},A._malloc=function(){return(HI=A._malloc=A.asm.S).apply(null,arguments)}),MI=A.___cxa_free_exception=function(){return(MI=A.___cxa_free_exception=A.asm.T).apply(null,arguments)},LI=A._free=function(){return(LI=A._free=A.asm.V).apply(null,arguments)},YI=A.___getTypeName=function(){return(YI=A.___getTypeName=A.asm.W).apply(null,arguments)},KI=(A.__embind_initialize_bindings=function(){return(A.__embind_initialize_bindings=A.asm.X).apply(null,arguments)},A.setTempRet0=function(){return(KI=A.setTempRet0=A.asm.Y).apply(null,arguments)}),dI=A.stackSave=function(){return(dI=A.stackSave=A.asm.Z).apply(null,arguments)},lI=A.stackRestore=function(){return(lI=A.stackRestore=A.asm._).apply(null,arguments)},fI=A.stackAlloc=function(){return(fI=A.stackAlloc=A.asm.$).apply(null,arguments)},uI=A.___cxa_can_catch=function(){return(uI=A.___cxa_can_catch=A.asm.aa).apply(null,arguments)},qI=A.___cxa_is_pointer_type=function(){return(qI=A.___cxa_is_pointer_type=A.asm.ba).apply(null,arguments)};function pI(g){function B(){kI||(kI=!0,A.calledRun=!0,M||(O(b),I(A),A.onRuntimeInitialized&&A.onRuntimeInitialized(),function(){if(A.postRun)for("function"==typeof A.postRun&&(A.postRun=[A.postRun]);A.postRun.length;)I=A.postRun.shift(),W.unshift(I);var I;O(W)}()))}g=g||D,Z>0||(function(){if(A.preRun)for("function"==typeof A.preRun&&(A.preRun=[A.preRun]);A.preRun.length;)I=A.preRun.shift(),p.unshift(I);var I;O(p)}(),Z>0||(A.setStatus?(A.setStatus("Running..."),setTimeout((function(){setTimeout((function(){A.setStatus("")}),1),B()}),1)):B()))}if(A.dynCall_ji=function(){return(A.dynCall_ji=A.asm.ca).apply(null,arguments)},A.dynCall_iiji=function(){return(A.dynCall_iiji=A.asm.da).apply(null,arguments)},A.dynCall_jiji=function(){return(A.dynCall_jiji=A.asm.ea).apply(null,arguments)},A.ccall=function(I,g,B,Q,C){var E={string:A=>{var I=0;if(null!=A&&0!==A){var g=1+(A.length<<2);d(A,I=fI(g),g)}return I},array:A=>{var I=fI(A.length);return function(A,I){R.set(A,I)}(A,I),I}},i=function(I){return A["_"+I]}(I),o=[],D=0;if(Q)for(var a=0;a<Q.length;a++){var s=E[B[a]];s?(0===D&&(D=dI()),o[a]=s(Q[a])):o[a]=Q[a]}var w=i.apply(null,o);return w=function(A){return 0!==D&&lI(D),function(A){return"string"===g?K(A):"boolean"===g?Boolean(A):A}(A)}(w)},x=function A(){kI||pI(),kI||(x=A)},A.preInit)for("function"==typeof A.preInit&&(A.preInit=[A.preInit]);A.preInit.length>0;)A.preInit.pop()();return pI(),A.ready});A.exports=Q},3641:(A,I,g)=>{g(3075);var B=g(2018);A.exports=B("Array").concat},646:(A,I,g)=>{g(8345);var B=g(2018);A.exports=B("Array").filter},1001:(A,I,g)=>{g(5313);var B=g(2018);A.exports=B("Array").slice},7543:(A,I,g)=>{var B=g(3641),Q=Array.prototype;A.exports=function(A){var I=A.concat;return A===Q||A instanceof Array&&I===Q.concat?B:I}},1065:(A,I,g)=>{var B=g(9291),Q=String.prototype;A.exports=function(A){var I=A.endsWith;return"string"==typeof A||A===Q||A instanceof String&&I===Q.endsWith?B:I}},4388:(A,I,g)=>{var B=g(646),Q=Array.prototype;A.exports=function(A){var I=A.filter;return A===Q||A instanceof Array&&I===Q.filter?B:I}},1285:(A,I,g)=>{var B=g(1001),Q=Array.prototype;A.exports=function(A){var I=A.slice;return A===Q||A instanceof Array&&I===Q.slice?B:I}},2529:(A,I,g)=>{g(8524);var B=g(9081);A.exports=B.Object.assign},6854:(A,I,g)=>{g(6764);var B=g(9081).Object,Q=A.exports=function(A,I,g){return B.defineProperty(A,I,g)};B.defineProperty.sham&&(Q.sham=!0)},2744:(A,I,g)=>{g(554);var B=g(9081).Object,Q=A.exports=function(A,I){return B.getOwnPropertyDescriptor(A,I)};B.getOwnPropertyDescriptor.sham&&(Q.sham=!0)},6018:(A,I,g)=>{g(4267);var B=g(9081);A.exports=B.Object.getOwnPropertyDescriptors},5350:(A,I,g)=>{g(8318);var B=g(9081);A.exports=B.Object.getOwnPropertySymbols},8116:(A,I,g)=>{g(8390);var B=g(9081);A.exports=B.Object.keys},7281:(A,I,g)=>{g(6454),g(2228),g(2575),g(3658),g(4465),g(8359),g(5203),g(8109);var B=g(9081);A.exports=B.Promise},9291:(A,I,g)=>{g(2329);var B=g(2018);A.exports=B("String").endsWith},5723:(A,I,g)=>{var B=g(8531);A.exports=B},5213:(A,I,g)=>{var B=g(4731);g(1152),g(8561),g(5543),g(8302),A.exports=B},9077:A=>{A.exports=function(A){if("function"!=typeof A)throw TypeError(String(A)+" is not a function");return A}},9154:(A,I,g)=>{var B=g(3359);A.exports=function(A){if(!B(A)&&null!==A)throw TypeError("Can\'t set "+String(A)+" as a prototype");return A}},7710:A=>{A.exports=function(){}},8792:A=>{A.exports=function(A,I,g){if(!(A instanceof I))throw TypeError("Incorrect "+(g?g+" ":"")+"invocation");return A}},1912:(A,I,g)=>{var B=g(3359);A.exports=function(A){if(!B(A))throw TypeError(String(A)+" is not an object");return A}},7075:(A,I,g)=>{var B=g(3861),Q=g(3746),C=g(3055),E=function(A){return function(I,g,E){var i,o=B(I),D=Q(o.length),a=C(E,D);if(A&&g!=g){for(;D>a;)if((i=o[a++])!=i)return!0}else for(;D>a;a++)if((A||a in o)&&o[a]===g)return A||a||0;return!A&&-1}};A.exports={includes:E(!0),indexOf:E(!1)}},4206:(A,I,g)=>{var B=g(7673),Q=g(1251),C=g(2058),E=g(3746),i=g(8136),o=[].push,D=function(A){var I=1==A,g=2==A,D=3==A,a=4==A,s=6==A,w=7==A,t=5==A||s;return function(G,h,F,y){for(var c,r,N=C(G),R=Q(N),e=B(h,F,3),n=E(R.length),S=0,U=y||i,k=I?U(G,n):g||w?U(G,0):void 0;n>S;S++)if((t||S in R)&&(r=e(c=R[S],S,N),A))if(I)k[S]=r;else if(r)switch(A){case 3:return!0;case 5:return c;case 6:return S;case 2:o.call(k,c)}else switch(A){case 4:return!1;case 7:o.call(k,c)}return s?-1:D||a?a:k}};A.exports={forEach:D(0),map:D(1),filter:D(2),some:D(3),every:D(4),find:D(5),findIndex:D(6),filterReject:D(7)}},2143:(A,I,g)=>{var B=g(6530),Q=g(5712),C=g(8233),E=Q("species");A.exports=function(A){return C>=51||!B((function(){var I=[];return(I.constructor={})[E]=function(){return{foo:1}},1!==I[A](Boolean).foo}))}},3400:(A,I,g)=>{var B=g(3359),Q=g(1054),C=g(5712)("species");A.exports=function(A){var I;return Q(A)&&("function"!=typeof(I=A.constructor)||I!==Array&&!Q(I.prototype)?B(I)&&null===(I=I[C])&&(I=void 0):I=void 0),void 0===I?Array:I}},8136:(A,I,g)=>{var B=g(3400);A.exports=function(A,I){return new(B(A))(0===I?0:I)}},8908:(A,I,g)=>{var B=g(5712)("iterator"),Q=!1;try{var C=0,E={next:function(){return{done:!!C++}},return:function(){Q=!0}};E[B]=function(){return this},Array.from(E,(function(){throw 2}))}catch(A){}A.exports=function(A,I){if(!I&&!Q)return!1;var g=!1;try{var C={};C[B]=function(){return{next:function(){return{done:g=!0}}}},A(C)}catch(A){}return g}},1570:A=>{var I={}.toString;A.exports=function(A){return I.call(A).slice(8,-1)}},7499:(A,I,g)=>{var B=g(8889),Q=g(1570),C=g(5712)("toStringTag"),E="Arguments"==Q(function(){return arguments}());A.exports=B?Q:function(A){var I,g,B;return void 0===A?"Undefined":null===A?"Null":"string"==typeof(g=function(A,I){try{return A[I]}catch(A){}}(I=Object(A),C))?g:E?Q(I):"Object"==(B=Q(I))&&"function"==typeof I.callee?"Arguments":B}},1722:(A,I,g)=>{var B=g(5712)("match");A.exports=function(A){var I=/./;try{"/./"[A](I)}catch(g){try{return I[B]=!1,"/./"[A](I)}catch(A){}}return!1}},872:(A,I,g)=>{var B=g(6530);A.exports=!B((function(){function A(){}return A.prototype.constructor=null,Object.getPrototypeOf(new A)!==A.prototype}))},8611:(A,I,g)=>{"use strict";var B=g(7300).IteratorPrototype,Q=g(2491),C=g(5595),E=g(6738),i=g(9418),o=function(){return this};A.exports=function(A,I,g){var D=I+" Iterator";return A.prototype=Q(B,{next:C(1,g)}),E(A,D,!1,!0),i[D]=o,A}},8518:(A,I,g)=>{var B=g(7001),Q=g(7550),C=g(5595);A.exports=B?function(A,I,g){return Q.f(A,I,C(1,g))}:function(A,I,g){return A[I]=g,A}},5595:A=>{A.exports=function(A,I){return{enumerable:!(1&A),configurable:!(2&A),writable:!(4&A),value:I}}},409:(A,I,g)=>{"use strict";var B=g(5623),Q=g(7550),C=g(5595);A.exports=function(A,I,g){var E=B(I);E in A?Q.f(A,E,C(0,g)):A[E]=g}},8277:(A,I,g)=>{"use strict";var B=g(390),Q=g(8611),C=g(2629),E=g(5255),i=g(6738),o=g(8518),D=g(9791),a=g(5712),s=g(8367),w=g(9418),t=g(7300),G=t.IteratorPrototype,h=t.BUGGY_SAFARI_ITERATORS,F=a("iterator"),y="keys",c="values",r="entries",N=function(){return this};A.exports=function(A,I,g,a,t,R,e){Q(g,I,a);var n,S,U,k=function(A){if(A===t&&Y)return Y;if(!h&&A in M)return M[A];switch(A){case y:case c:case r:return function(){return new g(this,A)}}return function(){return new g(this)}},J=I+" Iterator",H=!1,M=A.prototype,L=M[F]||M["@@iterator"]||t&&M[t],Y=!h&&L||k(t),K="Array"==I&&M.entries||L;if(K&&(n=C(K.call(new A)),G!==Object.prototype&&n.next&&(s||C(n)===G||(E?E(n,G):"function"!=typeof n[F]&&o(n,F,N)),i(n,J,!0,!0),s&&(w[J]=N))),t==c&&L&&L.name!==c&&(H=!0,Y=function(){return L.call(this)}),s&&!e||M[F]===Y||o(M,F,Y),w[I]=Y,t)if(S={values:k(c),keys:R?Y:k(y),entries:k(r)},e)for(U in S)(h||H||!(U in M))&&D(M,U,S[U]);else B({target:I,proto:!0,forced:h||H},S);return S}},1412:(A,I,g)=>{var B=g(9081),Q=g(6690),C=g(3379),E=g(7550).f;A.exports=function(A){var I=B.Symbol||(B.Symbol={});Q(I,A)||E(I,A,{value:C.f(A)})}},7001:(A,I,g)=>{var B=g(6530);A.exports=!B((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},231:(A,I,g)=>{var B=g(2868),Q=g(3359),C=B.document,E=Q(C)&&Q(C.createElement);A.exports=function(A){return E?C.createElement(A):{}}},315:A=>{A.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},6610:A=>{A.exports="object"==typeof window},6405:(A,I,g)=>{var B=g(6900),Q=g(2868);A.exports=/ipad|iphone|ipod/i.test(B)&&void 0!==Q.Pebble},6540:(A,I,g)=>{var B=g(6900);A.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(B)},6521:(A,I,g)=>{var B=g(1570),Q=g(2868);A.exports="process"==B(Q.process)},4010:(A,I,g)=>{var B=g(6900);A.exports=/web0s(?!.*chrome)/i.test(B)},6900:(A,I,g)=>{var B=g(8104);A.exports=B("navigator","userAgent")||""},8233:(A,I,g)=>{var B,Q,C=g(2868),E=g(6900),i=C.process,o=C.Deno,D=i&&i.versions||o&&o.version,a=D&&D.v8;a?Q=(B=a.split("."))[0]<4?1:B[0]+B[1]:E&&(!(B=E.match(/Edge\\/(\\d+)/))||B[1]>=74)&&(B=E.match(/Chrome\\/(\\d+)/))&&(Q=B[1]),A.exports=Q&&+Q},2018:(A,I,g)=>{var B=g(9081);A.exports=function(A){return B[A+"Prototype"]}},2712:A=>{A.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},390:(A,I,g)=>{"use strict";var B=g(2868),Q=g(5904).f,C=g(1011),E=g(9081),i=g(7673),o=g(8518),D=g(6690),a=function(A){var I=function(I,g,B){if(this instanceof A){switch(arguments.length){case 0:return new A;case 1:return new A(I);case 2:return new A(I,g)}return new A(I,g,B)}return A.apply(this,arguments)};return I.prototype=A.prototype,I};A.exports=function(A,I){var g,s,w,t,G,h,F,y,c=A.target,r=A.global,N=A.stat,R=A.proto,e=r?B:N?B[c]:(B[c]||{}).prototype,n=r?E:E[c]||o(E,c,{})[c],S=n.prototype;for(w in I)g=!C(r?w:c+(N?".":"#")+w,A.forced)&&e&&D(e,w),G=n[w],g&&(h=A.noTargetGet?(y=Q(e,w))&&y.value:e[w]),t=g&&h?h:I[w],g&&typeof G==typeof t||(F=A.bind&&g?i(t,B):A.wrap&&g?a(t):R&&"function"==typeof t?i(Function.call,t):t,(A.sham||t&&t.sham||G&&G.sham)&&o(F,"sham",!0),o(n,w,F),R&&(D(E,s=c+"Prototype")||o(E,s,{}),o(E[s],w,t),A.real&&S&&!S[w]&&o(S,w,t)))}},6530:A=>{A.exports=function(A){try{return!!A()}catch(A){return!0}}},7673:(A,I,g)=>{var B=g(9077);A.exports=function(A,I,g){if(B(A),void 0===I)return A;switch(g){case 0:return function(){return A.call(I)};case 1:return function(g){return A.call(I,g)};case 2:return function(g,B){return A.call(I,g,B)};case 3:return function(g,B,Q){return A.call(I,g,B,Q)}}return function(){return A.apply(I,arguments)}}},8104:(A,I,g)=>{var B=g(9081),Q=g(2868),C=function(A){return"function"==typeof A?A:void 0};A.exports=function(A,I){return arguments.length<2?C(B[A])||C(Q[A]):B[A]&&B[A][I]||Q[A]&&Q[A][I]}},5018:(A,I,g)=>{var B=g(7499),Q=g(9418),C=g(5712)("iterator");A.exports=function(A){if(null!=A)return A[C]||A["@@iterator"]||Q[B(A)]}},5945:(A,I,g)=>{var B=g(1912),Q=g(5018);A.exports=function(A,I){var g=arguments.length<2?Q(A):I;if("function"!=typeof g)throw TypeError(String(A)+" is not iterable");return B(g.call(A))}},2868:(A,I,g)=>{var B=function(A){return A&&A.Math==Math&&A};A.exports=B("object"==typeof globalThis&&globalThis)||B("object"==typeof window&&window)||B("object"==typeof self&&self)||B("object"==typeof g.g&&g.g)||function(){return this}()||Function("return this")()},6690:(A,I,g)=>{var B=g(2058),Q={}.hasOwnProperty;A.exports=Object.hasOwn||function(A,I){return Q.call(B(A),I)}},7048:A=>{A.exports={}},8471:(A,I,g)=>{var B=g(2868);A.exports=function(A,I){var g=B.console;g&&g.error&&(1===arguments.length?g.error(A):g.error(A,I))}},5644:(A,I,g)=>{var B=g(8104);A.exports=B("document","documentElement")},640:(A,I,g)=>{var B=g(7001),Q=g(6530),C=g(231);A.exports=!B&&!Q((function(){return 7!=Object.defineProperty(C("div"),"a",{get:function(){return 7}}).a}))},1251:(A,I,g)=>{var B=g(6530),Q=g(1570),C="".split;A.exports=B((function(){return!Object("z").propertyIsEnumerable(0)}))?function(A){return"String"==Q(A)?C.call(A,""):Object(A)}:Object},1494:(A,I,g)=>{var B=g(2656),Q=Function.toString;"function"!=typeof B.inspectSource&&(B.inspectSource=function(A){return Q.call(A)}),A.exports=B.inspectSource},5875:(A,I,g)=>{var B,Q,C,E=g(2297),i=g(2868),o=g(3359),D=g(8518),a=g(6690),s=g(2656),w=g(5039),t=g(7048),G="Object already initialized",h=i.WeakMap;if(E||s.state){var F=s.state||(s.state=new h),y=F.get,c=F.has,r=F.set;B=function(A,I){if(c.call(F,A))throw new TypeError(G);return I.facade=A,r.call(F,A,I),I},Q=function(A){return y.call(F,A)||{}},C=function(A){return c.call(F,A)}}else{var N=w("state");t[N]=!0,B=function(A,I){if(a(A,N))throw new TypeError(G);return I.facade=A,D(A,N,I),I},Q=function(A){return a(A,N)?A[N]:{}},C=function(A){return a(A,N)}}A.exports={set:B,get:Q,has:C,enforce:function(A){return C(A)?Q(A):B(A,{})},getterFor:function(A){return function(I){var g;if(!o(I)||(g=Q(I)).type!==A)throw TypeError("Incompatible receiver, "+A+" required");return g}}}},6475:(A,I,g)=>{var B=g(5712),Q=g(9418),C=B("iterator"),E=Array.prototype;A.exports=function(A){return void 0!==A&&(Q.Array===A||E[C]===A)}},1054:(A,I,g)=>{var B=g(1570);A.exports=Array.isArray||function(A){return"Array"==B(A)}},1011:(A,I,g)=>{var B=g(6530),Q=/#|\\.prototype\\./,C=function(A,I){var g=i[E(A)];return g==D||g!=o&&("function"==typeof I?B(I):!!I)},E=C.normalize=function(A){return String(A).replace(Q,".").toLowerCase()},i=C.data={},o=C.NATIVE="N",D=C.POLYFILL="P";A.exports=C},3359:A=>{A.exports=function(A){return"object"==typeof A?null!==A:"function"==typeof A}},8367:A=>{A.exports=!0},6858:(A,I,g)=>{var B=g(3359),Q=g(1570),C=g(5712)("match");A.exports=function(A){var I;return B(A)&&(void 0!==(I=A[C])?!!I:"RegExp"==Q(A))}},1149:(A,I,g)=>{var B=g(8104),Q=g(6046);A.exports=Q?function(A){return"symbol"==typeof A}:function(A){var I=B("Symbol");return"function"==typeof I&&Object(A)instanceof I}},3906:(A,I,g)=>{var B=g(1912),Q=g(6475),C=g(3746),E=g(7673),i=g(5945),o=g(5018),D=g(309),a=function(A,I){this.stopped=A,this.result=I};A.exports=function(A,I,g){var s,w,t,G,h,F,y,c=g&&g.that,r=!(!g||!g.AS_ENTRIES),N=!(!g||!g.IS_ITERATOR),R=!(!g||!g.INTERRUPTED),e=E(I,c,1+r+R),n=function(A){return s&&D(s,"normal",A),new a(!0,A)},S=function(A){return r?(B(A),R?e(A[0],A[1],n):e(A[0],A[1])):R?e(A,n):e(A)};if(N)s=A;else{if("function"!=typeof(w=o(A)))throw TypeError("Target is not iterable");if(Q(w)){for(t=0,G=C(A.length);G>t;t++)if((h=S(A[t]))&&h instanceof a)return h;return new a(!1)}s=i(A,w)}for(F=s.next;!(y=F.call(s)).done;){try{h=S(y.value)}catch(A){D(s,"throw",A)}if("object"==typeof h&&h&&h instanceof a)return h}return new a(!1)}},309:(A,I,g)=>{var B=g(1912);A.exports=function(A,I,g){var Q,C;B(A);try{if(void 0===(Q=A.return)){if("throw"===I)throw g;return g}Q=Q.call(A)}catch(A){C=!0,Q=A}if("throw"===I)throw g;if(C)throw Q;return B(Q),g}},7300:(A,I,g)=>{"use strict";var B,Q,C,E=g(6530),i=g(2629),o=g(8518),D=g(6690),a=g(5712),s=g(8367),w=a("iterator"),t=!1;[].keys&&("next"in(C=[].keys())?(Q=i(i(C)))!==Object.prototype&&(B=Q):t=!0);var G=null==B||E((function(){var A={};return B[w].call(A)!==A}));G&&(B={}),s&&!G||D(B,w)||o(B,w,(function(){return this})),A.exports={IteratorPrototype:B,BUGGY_SAFARI_ITERATORS:t}},9418:A=>{A.exports={}},8054:(A,I,g)=>{var B,Q,C,E,i,o,D,a,s=g(2868),w=g(5904).f,t=g(6569).set,G=g(6540),h=g(6405),F=g(4010),y=g(6521),c=s.MutationObserver||s.WebKitMutationObserver,r=s.document,N=s.process,R=s.Promise,e=w(s,"queueMicrotask"),n=e&&e.value;n||(B=function(){var A,I;for(y&&(A=N.domain)&&A.exit();Q;){I=Q.fn,Q=Q.next;try{I()}catch(A){throw Q?E():C=void 0,A}}C=void 0,A&&A.enter()},G||y||F||!c||!r?!h&&R&&R.resolve?((D=R.resolve(void 0)).constructor=R,a=D.then,E=function(){a.call(D,B)}):E=y?function(){N.nextTick(B)}:function(){t.call(s,B)}:(i=!0,o=r.createTextNode(""),new c(B).observe(o,{characterData:!0}),E=function(){o.data=i=!i})),A.exports=n||function(A){var I={fn:A,next:void 0};C&&(C.next=I),Q||(Q=I,E()),C=I}},3104:(A,I,g)=>{var B=g(2868);A.exports=B.Promise},3216:(A,I,g)=>{var B=g(8233),Q=g(6530);A.exports=!!Object.getOwnPropertySymbols&&!Q((function(){var A=Symbol();return!String(A)||!(Object(A)instanceof Symbol)||!Symbol.sham&&B&&B<41}))},2297:(A,I,g)=>{var B=g(2868),Q=g(1494),C=B.WeakMap;A.exports="function"==typeof C&&/native code/.test(Q(C))},4130:(A,I,g)=>{"use strict";var B=g(9077),Q=function(A){var I,g;this.promise=new A((function(A,B){if(void 0!==I||void 0!==g)throw TypeError("Bad Promise constructor");I=A,g=B})),this.resolve=B(I),this.reject=B(g)};A.exports.f=function(A){return new Q(A)}},9611:(A,I,g)=>{var B=g(6858);A.exports=function(A){if(B(A))throw TypeError("The method doesn\'t accept regular expressions");return A}},3210:(A,I,g)=>{"use strict";var B=g(7001),Q=g(6530),C=g(461),E=g(3764),i=g(1156),o=g(2058),D=g(1251),a=Object.assign,s=Object.defineProperty;A.exports=!a||Q((function(){if(B&&1!==a({b:1},a(s({},"a",{enumerable:!0,get:function(){s(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var A={},I={},g=Symbol(),Q="abcdefghijklmnopqrst";return A[g]=7,Q.split("").forEach((function(A){I[A]=A})),7!=a({},A)[g]||C(a({},I)).join("")!=Q}))?function(A,I){for(var g=o(A),Q=arguments.length,a=1,s=E.f,w=i.f;Q>a;)for(var t,G=D(arguments[a++]),h=s?C(G).concat(s(G)):C(G),F=h.length,y=0;F>y;)t=h[y++],B&&!w.call(G,t)||(g[t]=G[t]);return g}:a},2491:(A,I,g)=>{var B,Q=g(1912),C=g(4686),E=g(2712),i=g(7048),o=g(5644),D=g(231),a=g(5039),s=a("IE_PROTO"),w=function(){},t=function(A){return"<script>"+A+"</"+"script>"},G=function(A){A.write(t("")),A.close();var I=A.parentWindow.Object;return A=null,I},h=function(){try{B=new ActiveXObject("htmlfile")}catch(A){}var A,I;h="undefined"!=typeof document?document.domain&&B?G(B):((I=D("iframe")).style.display="none",o.appendChild(I),I.src=String("javascript:"),(A=I.contentWindow.document).open(),A.write(t("document.F=Object")),A.close(),A.F):G(B);for(var g=E.length;g--;)delete h.prototype[E[g]];return h()};i[s]=!0,A.exports=Object.create||function(A,I){var g;return null!==A?(w.prototype=Q(A),g=new w,w.prototype=null,g[s]=A):g=h(),void 0===I?g:C(g,I)}},4686:(A,I,g)=>{var B=g(7001),Q=g(7550),C=g(1912),E=g(461);A.exports=B?Object.defineProperties:function(A,I){C(A);for(var g,B=E(I),i=B.length,o=0;i>o;)Q.f(A,g=B[o++],I[g]);return A}},7550:(A,I,g)=>{var B=g(7001),Q=g(640),C=g(1912),E=g(5623),i=Object.defineProperty;I.f=B?i:function(A,I,g){if(C(A),I=E(I),C(g),Q)try{return i(A,I,g)}catch(A){}if("get"in g||"set"in g)throw TypeError("Accessors not supported");return"value"in g&&(A[I]=g.value),A}},5904:(A,I,g)=>{var B=g(7001),Q=g(1156),C=g(5595),E=g(3861),i=g(5623),o=g(6690),D=g(640),a=Object.getOwnPropertyDescriptor;I.f=B?a:function(A,I){if(A=E(A),I=i(I),D)try{return a(A,I)}catch(A){}if(o(A,I))return C(!Q.f.call(A,I),A[I])}},6159:(A,I,g)=>{var B=g(3861),Q=g(9035).f,C={}.toString,E="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];A.exports.f=function(A){return E&&"[object Window]"==C.call(A)?function(A){try{return Q(A)}catch(A){return E.slice()}}(A):Q(B(A))}},9035:(A,I,g)=>{var B=g(1247),Q=g(2712).concat("length","prototype");I.f=Object.getOwnPropertyNames||function(A){return B(A,Q)}},3764:(A,I)=>{I.f=Object.getOwnPropertySymbols},2629:(A,I,g)=>{var B=g(6690),Q=g(2058),C=g(5039),E=g(872),i=C("IE_PROTO"),o=Object.prototype;A.exports=E?Object.getPrototypeOf:function(A){return A=Q(A),B(A,i)?A[i]:"function"==typeof A.constructor&&A instanceof A.constructor?A.constructor.prototype:A instanceof Object?o:null}},1247:(A,I,g)=>{var B=g(6690),Q=g(3861),C=g(7075).indexOf,E=g(7048);A.exports=function(A,I){var g,i=Q(A),o=0,D=[];for(g in i)!B(E,g)&&B(i,g)&&D.push(g);for(;I.length>o;)B(i,g=I[o++])&&(~C(D,g)||D.push(g));return D}},461:(A,I,g)=>{var B=g(1247),Q=g(2712);A.exports=Object.keys||function(A){return B(A,Q)}},1156:(A,I)=>{"use strict";var g={}.propertyIsEnumerable,B=Object.getOwnPropertyDescriptor,Q=B&&!g.call({1:2},1);I.f=Q?function(A){var I=B(this,A);return!!I&&I.enumerable}:g},5255:(A,I,g)=>{var B=g(1912),Q=g(9154);A.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var A,I=!1,g={};try{(A=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(g,[]),I=g instanceof Array}catch(A){}return function(g,C){return B(g),Q(C),I?A.call(g,C):g.__proto__=C,g}}():void 0)},2204:(A,I,g)=>{"use strict";var B=g(8889),Q=g(7499);A.exports=B?{}.toString:function(){return"[object "+Q(this)+"]"}},9466:(A,I,g)=>{var B=g(3359);A.exports=function(A,I){var g,Q;if("string"===I&&"function"==typeof(g=A.toString)&&!B(Q=g.call(A)))return Q;if("function"==typeof(g=A.valueOf)&&!B(Q=g.call(A)))return Q;if("string"!==I&&"function"==typeof(g=A.toString)&&!B(Q=g.call(A)))return Q;throw TypeError("Can\'t convert object to primitive value")}},5340:(A,I,g)=>{var B=g(8104),Q=g(9035),C=g(3764),E=g(1912);A.exports=B("Reflect","ownKeys")||function(A){var I=Q.f(E(A)),g=C.f;return g?I.concat(g(A)):I}},9081:A=>{A.exports={}},4618:A=>{A.exports=function(A){try{return{error:!1,value:A()}}catch(A){return{error:!0,value:A}}}},4567:(A,I,g)=>{var B=g(1912),Q=g(3359),C=g(4130);A.exports=function(A,I){if(B(A),Q(I)&&I.constructor===A)return I;var g=C.f(A);return(0,g.resolve)(I),g.promise}},9248:(A,I,g)=>{var B=g(9791);A.exports=function(A,I,g){for(var Q in I)g&&g.unsafe&&A[Q]?A[Q]=I[Q]:B(A,Q,I[Q],g);return A}},9791:(A,I,g)=>{var B=g(8518);A.exports=function(A,I,g,Q){Q&&Q.enumerable?A[I]=g:B(A,I,g)}},3604:A=>{A.exports=function(A){if(null==A)throw TypeError("Can\'t call method on "+A);return A}},2643:(A,I,g)=>{var B=g(2868);A.exports=function(A,I){try{Object.defineProperty(B,A,{value:I,configurable:!0,writable:!0})}catch(g){B[A]=I}return I}},3918:(A,I,g)=>{"use strict";var B=g(8104),Q=g(7550),C=g(5712),E=g(7001),i=C("species");A.exports=function(A){var I=B(A),g=Q.f;E&&I&&!I[i]&&g(I,i,{configurable:!0,get:function(){return this}})}},6738:(A,I,g)=>{var B=g(8889),Q=g(7550).f,C=g(8518),E=g(6690),i=g(2204),o=g(5712)("toStringTag");A.exports=function(A,I,g,D){if(A){var a=g?A:A.prototype;E(a,o)||Q(a,o,{configurable:!0,value:I}),D&&!B&&C(a,"toString",i)}}},5039:(A,I,g)=>{var B=g(6315),Q=g(9),C=B("keys");A.exports=function(A){return C[A]||(C[A]=Q(A))}},2656:(A,I,g)=>{var B=g(2868),Q=g(2643),C="__core-js_shared__",E=B[C]||Q(C,{});A.exports=E},6315:(A,I,g)=>{var B=g(8367),Q=g(2656);(A.exports=function(A,I){return Q[A]||(Q[A]=void 0!==I?I:{})})("versions",[]).push({version:"3.17.2",mode:B?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},5462:(A,I,g)=>{var B=g(1912),Q=g(9077),C=g(5712)("species");A.exports=function(A,I){var g,E=B(A).constructor;return void 0===E||null==(g=B(E)[C])?I:Q(g)}},1420:(A,I,g)=>{var B=g(1470),Q=g(5264),C=g(3604),E=function(A){return function(I,g){var E,i,o=Q(C(I)),D=B(g),a=o.length;return D<0||D>=a?A?"":void 0:(E=o.charCodeAt(D))<55296||E>56319||D+1===a||(i=o.charCodeAt(D+1))<56320||i>57343?A?o.charAt(D):E:A?o.slice(D,D+2):i-56320+(E-55296<<10)+65536}};A.exports={codeAt:E(!1),charAt:E(!0)}},6569:(A,I,g)=>{var B,Q,C,E,i=g(2868),o=g(6530),D=g(7673),a=g(5644),s=g(231),w=g(6540),t=g(6521),G=i.setImmediate,h=i.clearImmediate,F=i.process,y=i.MessageChannel,c=i.Dispatch,r=0,N={},R="onreadystatechange";try{B=i.location}catch(A){}var e=function(A){if(N.hasOwnProperty(A)){var I=N[A];delete N[A],I()}},n=function(A){return function(){e(A)}},S=function(A){e(A.data)},U=function(A){i.postMessage(String(A),B.protocol+"//"+B.host)};G&&h||(G=function(A){for(var I=[],g=arguments.length,B=1;g>B;)I.push(arguments[B++]);return N[++r]=function(){("function"==typeof A?A:Function(A)).apply(void 0,I)},Q(r),r},h=function(A){delete N[A]},t?Q=function(A){F.nextTick(n(A))}:c&&c.now?Q=function(A){c.now(n(A))}:y&&!w?(E=(C=new y).port2,C.port1.onmessage=S,Q=D(E.postMessage,E,1)):i.addEventListener&&"function"==typeof postMessage&&!i.importScripts&&B&&"file:"!==B.protocol&&!o(U)?(Q=U,i.addEventListener("message",S,!1)):Q=R in s("script")?function(A){a.appendChild(s("script")).onreadystatechange=function(){a.removeChild(this),e(A)}}:function(A){setTimeout(n(A),0)}),A.exports={set:G,clear:h}},3055:(A,I,g)=>{var B=g(1470),Q=Math.max,C=Math.min;A.exports=function(A,I){var g=B(A);return g<0?Q(g+I,0):C(g,I)}},3861:(A,I,g)=>{var B=g(1251),Q=g(3604);A.exports=function(A){return B(Q(A))}},1470:A=>{var I=Math.ceil,g=Math.floor;A.exports=function(A){return isNaN(A=+A)?0:(A>0?g:I)(A)}},3746:(A,I,g)=>{var B=g(1470),Q=Math.min;A.exports=function(A){return A>0?Q(B(A),9007199254740991):0}},2058:(A,I,g)=>{var B=g(3604);A.exports=function(A){return Object(B(A))}},3957:(A,I,g)=>{var B=g(3359),Q=g(1149),C=g(9466),E=g(5712)("toPrimitive");A.exports=function(A,I){if(!B(A)||Q(A))return A;var g,i=A[E];if(void 0!==i){if(void 0===I&&(I="default"),g=i.call(A,I),!B(g)||Q(g))return g;throw TypeError("Can\'t convert object to primitive value")}return void 0===I&&(I="number"),C(A,I)}},5623:(A,I,g)=>{var B=g(3957),Q=g(1149);A.exports=function(A){var I=B(A,"string");return Q(I)?I:String(I)}},8889:(A,I,g)=>{var B={};B[g(5712)("toStringTag")]="z",A.exports="[object z]"===String(B)},5264:(A,I,g)=>{var B=g(1149);A.exports=function(A){if(B(A))throw TypeError("Cannot convert a Symbol value to a string");return String(A)}},9:A=>{var I=0,g=Math.random();A.exports=function(A){return"Symbol("+String(void 0===A?"":A)+")_"+(++I+g).toString(36)}},6046:(A,I,g)=>{var B=g(3216);A.exports=B&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},3379:(A,I,g)=>{var B=g(5712);I.f=B},5712:(A,I,g)=>{var B=g(2868),Q=g(6315),C=g(6690),E=g(9),i=g(3216),o=g(6046),D=Q("wks"),a=B.Symbol,s=o?a:a&&a.withoutSetter||E;A.exports=function(A){return C(D,A)&&(i||"string"==typeof D[A])||(i&&C(a,A)?D[A]=a[A]:D[A]=s("Symbol."+A)),D[A]}},6454:(A,I,g)=>{"use strict";var B=g(390),Q=g(2629),C=g(5255),E=g(2491),i=g(8518),o=g(5595),D=g(3906),a=g(5264),s=function(A,I){var g=this;if(!(g instanceof s))return new s(A,I);C&&(g=C(new Error(void 0),Q(g))),void 0!==I&&i(g,"message",a(I));var B=[];return D(A,B.push,{that:B}),i(g,"errors",B),g};s.prototype=E(Error.prototype,{constructor:o(5,s),message:o(5,""),name:o(5,"AggregateError")}),B({global:!0},{AggregateError:s})},3075:(A,I,g)=>{"use strict";var B=g(390),Q=g(6530),C=g(1054),E=g(3359),i=g(2058),o=g(3746),D=g(409),a=g(8136),s=g(2143),w=g(5712),t=g(8233),G=w("isConcatSpreadable"),h=9007199254740991,F="Maximum allowed index exceeded",y=t>=51||!Q((function(){var A=[];return A[G]=!1,A.concat()[0]!==A})),c=s("concat"),r=function(A){if(!E(A))return!1;var I=A[G];return void 0!==I?!!I:C(A)};B({target:"Array",proto:!0,forced:!y||!c},{concat:function(A){var I,g,B,Q,C,E=i(this),s=a(E,0),w=0;for(I=-1,B=arguments.length;I<B;I++)if(r(C=-1===I?E:arguments[I])){if(w+(Q=o(C.length))>h)throw TypeError(F);for(g=0;g<Q;g++,w++)g in C&&D(s,w,C[g])}else{if(w>=h)throw TypeError(F);D(s,w++,C)}return s.length=w,s}})},8345:(A,I,g)=>{"use strict";var B=g(390),Q=g(4206).filter;B({target:"Array",proto:!0,forced:!g(2143)("filter")},{filter:function(A){return Q(this,A,arguments.length>1?arguments[1]:void 0)}})},2228:(A,I,g)=>{"use strict";var B=g(3861),Q=g(7710),C=g(9418),E=g(5875),i=g(8277),o="Array Iterator",D=E.set,a=E.getterFor(o);A.exports=i(Array,"Array",(function(A,I){D(this,{type:o,target:B(A),index:0,kind:I})}),(function(){var A=a(this),I=A.target,g=A.kind,B=A.index++;return!I||B>=I.length?(A.target=void 0,{value:void 0,done:!0}):"keys"==g?{value:B,done:!1}:"values"==g?{value:I[B],done:!1}:{value:[B,I[B]],done:!1}}),"values"),C.Arguments=C.Array,Q("keys"),Q("values"),Q("entries")},5313:(A,I,g)=>{"use strict";var B=g(390),Q=g(3359),C=g(1054),E=g(3055),i=g(3746),o=g(3861),D=g(409),a=g(5712),s=g(2143)("slice"),w=a("species"),t=[].slice,G=Math.max;B({target:"Array",proto:!0,forced:!s},{slice:function(A,I){var g,B,a,s=o(this),h=i(s.length),F=E(A,h),y=E(void 0===I?h:I,h);if(C(s)&&("function"!=typeof(g=s.constructor)||g!==Array&&!C(g.prototype)?Q(g)&&null===(g=g[w])&&(g=void 0):g=void 0,g===Array||void 0===g))return t.call(s,F,y);for(B=new(void 0===g?Array:g)(G(y-F,0)),a=0;F<y;F++,a++)F in s&&D(B,a,s[F]);return B.length=a,B}})},8524:(A,I,g)=>{var B=g(390),Q=g(3210);B({target:"Object",stat:!0,forced:Object.assign!==Q},{assign:Q})},6764:(A,I,g)=>{var B=g(390),Q=g(7001);B({target:"Object",stat:!0,forced:!Q,sham:!Q},{defineProperty:g(7550).f})},554:(A,I,g)=>{var B=g(390),Q=g(6530),C=g(3861),E=g(5904).f,i=g(7001),o=Q((function(){E(1)}));B({target:"Object",stat:!0,forced:!i||o,sham:!i},{getOwnPropertyDescriptor:function(A,I){return E(C(A),I)}})},4267:(A,I,g)=>{var B=g(390),Q=g(7001),C=g(5340),E=g(3861),i=g(5904),o=g(409);B({target:"Object",stat:!0,sham:!Q},{getOwnPropertyDescriptors:function(A){for(var I,g,B=E(A),Q=i.f,D=C(B),a={},s=0;D.length>s;)void 0!==(g=Q(B,I=D[s++]))&&o(a,I,g);return a}})},8390:(A,I,g)=>{var B=g(390),Q=g(2058),C=g(461);B({target:"Object",stat:!0,forced:g(6530)((function(){C(1)}))},{keys:function(A){return C(Q(A))}})},2575:()=>{},4465:(A,I,g)=>{"use strict";var B=g(390),Q=g(9077),C=g(4130),E=g(4618),i=g(3906);B({target:"Promise",stat:!0},{allSettled:function(A){var I=this,g=C.f(I),B=g.resolve,o=g.reject,D=E((function(){var g=Q(I.resolve),C=[],E=0,o=1;i(A,(function(A){var Q=E++,i=!1;C.push(void 0),o++,g.call(I,A).then((function(A){i||(i=!0,C[Q]={status:"fulfilled",value:A},--o||B(C))}),(function(A){i||(i=!0,C[Q]={status:"rejected",reason:A},--o||B(C))}))})),--o||B(C)}));return D.error&&o(D.value),g.promise}})},8359:(A,I,g)=>{"use strict";var B=g(390),Q=g(9077),C=g(8104),E=g(4130),i=g(4618),o=g(3906),D="No one promise resolved";B({target:"Promise",stat:!0},{any:function(A){var I=this,g=E.f(I),B=g.resolve,a=g.reject,s=i((function(){var g=Q(I.resolve),E=[],i=0,s=1,w=!1;o(A,(function(A){var Q=i++,o=!1;E.push(void 0),s++,g.call(I,A).then((function(A){o||w||(w=!0,B(A))}),(function(A){o||w||(o=!0,E[Q]=A,--s||a(new(C("AggregateError"))(E,D)))}))})),--s||a(new(C("AggregateError"))(E,D))}));return s.error&&a(s.value),g.promise}})},5203:(A,I,g)=>{"use strict";var B=g(390),Q=g(8367),C=g(3104),E=g(6530),i=g(8104),o=g(5462),D=g(4567),a=g(9791);if(B({target:"Promise",proto:!0,real:!0,forced:!!C&&E((function(){C.prototype.finally.call({then:function(){}},(function(){}))}))},{finally:function(A){var I=o(this,i("Promise")),g="function"==typeof A;return this.then(g?function(g){return D(I,A()).then((function(){return g}))}:A,g?function(g){return D(I,A()).then((function(){throw g}))}:A)}}),!Q&&"function"==typeof C){var s=i("Promise").prototype.finally;C.prototype.finally!==s&&a(C.prototype,"finally",s,{unsafe:!0})}},3658:(A,I,g)=>{"use strict";var B,Q,C,E,i=g(390),o=g(8367),D=g(2868),a=g(8104),s=g(3104),w=g(9791),t=g(9248),G=g(5255),h=g(6738),F=g(3918),y=g(3359),c=g(9077),r=g(8792),N=g(1494),R=g(3906),e=g(8908),n=g(5462),S=g(6569).set,U=g(8054),k=g(4567),J=g(8471),H=g(4130),M=g(4618),L=g(5875),Y=g(1011),K=g(5712),d=g(6610),l=g(6521),f=g(8233),u=K("species"),q="Promise",p=L.get,b=L.set,W=L.getterFor(q),Z=s&&s.prototype,m=s,x=Z,T=D.TypeError,v=D.document,X=D.process,P=H.f,V=P,O=!!(v&&v.createEvent&&D.dispatchEvent),j="function"==typeof PromiseRejectionEvent,z="unhandledrejection",_=!1,$=Y(q,(function(){var A=N(m),I=A!==String(m);if(!I&&66===f)return!0;if(o&&!x.finally)return!0;if(f>=51&&/native code/.test(A))return!1;var g=new m((function(A){A(1)})),B=function(A){A((function(){}),(function(){}))};return(g.constructor={})[u]=B,!(_=g.then((function(){}))instanceof B)||!I&&d&&!j})),AA=$||!e((function(A){m.all(A).catch((function(){}))})),IA=function(A){var I;return!(!y(A)||"function"!=typeof(I=A.then))&&I},gA=function(A,I){if(!A.notified){A.notified=!0;var g=A.reactions;U((function(){for(var B=A.value,Q=1==A.state,C=0;g.length>C;){var E,i,o,D=g[C++],a=Q?D.ok:D.fail,s=D.resolve,w=D.reject,t=D.domain;try{a?(Q||(2===A.rejection&&EA(A),A.rejection=1),!0===a?E=B:(t&&t.enter(),E=a(B),t&&(t.exit(),o=!0)),E===D.promise?w(T("Promise-chain cycle")):(i=IA(E))?i.call(E,s,w):s(E)):w(B)}catch(A){t&&!o&&t.exit(),w(A)}}A.reactions=[],A.notified=!1,I&&!A.rejection&&QA(A)}))}},BA=function(A,I,g){var B,Q;O?((B=v.createEvent("Event")).promise=I,B.reason=g,B.initEvent(A,!1,!0),D.dispatchEvent(B)):B={promise:I,reason:g},!j&&(Q=D["on"+A])?Q(B):A===z&&J("Unhandled promise rejection",g)},QA=function(A){S.call(D,(function(){var I,g=A.facade,B=A.value;if(CA(A)&&(I=M((function(){l?X.emit("unhandledRejection",B,g):BA(z,g,B)})),A.rejection=l||CA(A)?2:1,I.error))throw I.value}))},CA=function(A){return 1!==A.rejection&&!A.parent},EA=function(A){S.call(D,(function(){var I=A.facade;l?X.emit("rejectionHandled",I):BA("rejectionhandled",I,A.value)}))},iA=function(A,I,g){return function(B){A(I,B,g)}},oA=function(A,I,g){A.done||(A.done=!0,g&&(A=g),A.value=I,A.state=2,gA(A,!0))},DA=function(A,I,g){if(!A.done){A.done=!0,g&&(A=g);try{if(A.facade===I)throw T("Promise can\'t be resolved itself");var B=IA(I);B?U((function(){var g={done:!1};try{B.call(I,iA(DA,g,A),iA(oA,g,A))}catch(I){oA(g,I,A)}})):(A.value=I,A.state=1,gA(A,!1))}catch(I){oA({done:!1},I,A)}}};if($&&(x=(m=function(A){r(this,m,q),c(A),B.call(this);var I=p(this);try{A(iA(DA,I),iA(oA,I))}catch(A){oA(I,A)}}).prototype,(B=function(A){b(this,{type:q,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=t(x,{then:function(A,I){var g=W(this),B=P(n(this,m));return B.ok="function"!=typeof A||A,B.fail="function"==typeof I&&I,B.domain=l?X.domain:void 0,g.parent=!0,g.reactions.push(B),0!=g.state&&gA(g,!1),B.promise},catch:function(A){return this.then(void 0,A)}}),Q=function(){var A=new B,I=p(A);this.promise=A,this.resolve=iA(DA,I),this.reject=iA(oA,I)},H.f=P=function(A){return A===m||A===C?new Q(A):V(A)},!o&&"function"==typeof s&&Z!==Object.prototype)){E=Z.then,_||(w(Z,"then",(function(A,I){var g=this;return new m((function(A,I){E.call(g,A,I)})).then(A,I)}),{unsafe:!0}),w(Z,"catch",x.catch,{unsafe:!0}));try{delete Z.constructor}catch(A){}G&&G(Z,x)}i({global:!0,wrap:!0,forced:$},{Promise:m}),h(m,q,!1,!0),F(q),C=a(q),i({target:q,stat:!0,forced:$},{reject:function(A){var I=P(this);return I.reject.call(void 0,A),I.promise}}),i({target:q,stat:!0,forced:o||$},{resolve:function(A){return k(o&&this===C?m:this,A)}}),i({target:q,stat:!0,forced:AA},{all:function(A){var I=this,g=P(I),B=g.resolve,Q=g.reject,C=M((function(){var g=c(I.resolve),C=[],E=0,i=1;R(A,(function(A){var o=E++,D=!1;C.push(void 0),i++,g.call(I,A).then((function(A){D||(D=!0,C[o]=A,--i||B(C))}),Q)})),--i||B(C)}));return C.error&&Q(C.value),g.promise},race:function(A){var I=this,g=P(I),B=g.reject,Q=M((function(){var Q=c(I.resolve);R(A,(function(A){Q.call(I,A).then(g.resolve,B)}))}));return Q.error&&B(Q.value),g.promise}})},2329:(A,I,g)=>{"use strict";var B,Q=g(390),C=g(5904).f,E=g(3746),i=g(5264),o=g(9611),D=g(3604),a=g(1722),s=g(8367),w="".endsWith,t=Math.min,G=a("endsWith");Q({target:"String",proto:!0,forced:!!(s||G||(B=C(String.prototype,"endsWith"),!B||B.writable))&&!G},{endsWith:function(A){var I=i(D(this));o(A);var g=arguments.length>1?arguments[1]:void 0,B=E(I.length),Q=void 0===g?B:t(E(g),B),C=i(A);return w?w.call(I,C,Q):I.slice(Q-C.length,Q)===C}})},8109:(A,I,g)=>{"use strict";var B=g(1420).charAt,Q=g(5264),C=g(5875),E=g(8277),i="String Iterator",o=C.set,D=C.getterFor(i);E(String,"String",(function(A){o(this,{type:i,string:Q(A),index:0})}),(function(){var A,I=D(this),g=I.string,Q=I.index;return Q>=g.length?{value:void 0,done:!0}:(A=B(g,Q),I.index+=A.length,{value:A,done:!1})}))},8318:(A,I,g)=>{"use strict";var B=g(390),Q=g(2868),C=g(8104),E=g(8367),i=g(7001),o=g(3216),D=g(6530),a=g(6690),s=g(1054),w=g(3359),t=g(1149),G=g(1912),h=g(2058),F=g(3861),y=g(5623),c=g(5264),r=g(5595),N=g(2491),R=g(461),e=g(9035),n=g(6159),S=g(3764),U=g(5904),k=g(7550),J=g(1156),H=g(8518),M=g(9791),L=g(6315),Y=g(5039),K=g(7048),d=g(9),l=g(5712),f=g(3379),u=g(1412),q=g(6738),p=g(5875),b=g(4206).forEach,W=Y("hidden"),Z="Symbol",m=l("toPrimitive"),x=p.set,T=p.getterFor(Z),v=Object.prototype,X=Q.Symbol,P=C("JSON","stringify"),V=U.f,O=k.f,j=n.f,z=J.f,_=L("symbols"),$=L("op-symbols"),AA=L("string-to-symbol-registry"),IA=L("symbol-to-string-registry"),gA=L("wks"),BA=Q.QObject,QA=!BA||!BA.prototype||!BA.prototype.findChild,CA=i&&D((function(){return 7!=N(O({},"a",{get:function(){return O(this,"a",{value:7}).a}})).a}))?function(A,I,g){var B=V(v,I);B&&delete v[I],O(A,I,g),B&&A!==v&&O(v,I,B)}:O,EA=function(A,I){var g=_[A]=N(X.prototype);return x(g,{type:Z,tag:A,description:I}),i||(g.description=I),g},iA=function(A,I,g){A===v&&iA($,I,g),G(A);var B=y(I);return G(g),a(_,B)?(g.enumerable?(a(A,W)&&A[W][B]&&(A[W][B]=!1),g=N(g,{enumerable:r(0,!1)})):(a(A,W)||O(A,W,r(1,{})),A[W][B]=!0),CA(A,B,g)):O(A,B,g)},oA=function(A,I){G(A);var g=F(I),B=R(g).concat(wA(g));return b(B,(function(I){i&&!DA.call(g,I)||iA(A,I,g[I])})),A},DA=function(A){var I=y(A),g=z.call(this,I);return!(this===v&&a(_,I)&&!a($,I))&&(!(g||!a(this,I)||!a(_,I)||a(this,W)&&this[W][I])||g)},aA=function(A,I){var g=F(A),B=y(I);if(g!==v||!a(_,B)||a($,B)){var Q=V(g,B);return!Q||!a(_,B)||a(g,W)&&g[W][B]||(Q.enumerable=!0),Q}},sA=function(A){var I=j(F(A)),g=[];return b(I,(function(A){a(_,A)||a(K,A)||g.push(A)})),g},wA=function(A){var I=A===v,g=j(I?$:F(A)),B=[];return b(g,(function(A){!a(_,A)||I&&!a(v,A)||B.push(_[A])})),B};(o||(M((X=function(){if(this instanceof X)throw TypeError("Symbol is not a constructor");var A=arguments.length&&void 0!==arguments[0]?c(arguments[0]):void 0,I=d(A),g=function(A){this===v&&g.call($,A),a(this,W)&&a(this[W],I)&&(this[W][I]=!1),CA(this,I,r(1,A))};return i&&QA&&CA(v,I,{configurable:!0,set:g}),EA(I,A)}).prototype,"toString",(function(){return T(this).tag})),M(X,"withoutSetter",(function(A){return EA(d(A),A)})),J.f=DA,k.f=iA,U.f=aA,e.f=n.f=sA,S.f=wA,f.f=function(A){return EA(l(A),A)},i&&(O(X.prototype,"description",{configurable:!0,get:function(){return T(this).description}}),E||M(v,"propertyIsEnumerable",DA,{unsafe:!0}))),B({global:!0,wrap:!0,forced:!o,sham:!o},{Symbol:X}),b(R(gA),(function(A){u(A)})),B({target:Z,stat:!0,forced:!o},{for:function(A){var I=c(A);if(a(AA,I))return AA[I];var g=X(I);return AA[I]=g,IA[g]=I,g},keyFor:function(A){if(!t(A))throw TypeError(A+" is not a symbol");if(a(IA,A))return IA[A]},useSetter:function(){QA=!0},useSimple:function(){QA=!1}}),B({target:"Object",stat:!0,forced:!o,sham:!i},{create:function(A,I){return void 0===I?N(A):oA(N(A),I)},defineProperty:iA,defineProperties:oA,getOwnPropertyDescriptor:aA}),B({target:"Object",stat:!0,forced:!o},{getOwnPropertyNames:sA,getOwnPropertySymbols:wA}),B({target:"Object",stat:!0,forced:D((function(){S.f(1)}))},{getOwnPropertySymbols:function(A){return S.f(h(A))}}),P)&&B({target:"JSON",stat:!0,forced:!o||D((function(){var A=X();return"[null]"!=P([A])||"{}"!=P({a:A})||"{}"!=P(Object(A))}))},{stringify:function(A,I,g){for(var B,Q=[A],C=1;arguments.length>C;)Q.push(arguments[C++]);if(B=I,(w(I)||void 0!==A)&&!t(A))return s(I)||(I=function(A,I){if("function"==typeof B&&(I=B.call(this,A,I)),!t(I))return I}),Q[1]=I,P.apply(null,Q)}});X.prototype[m]||H(X.prototype,m,X.prototype.valueOf),q(X,Z),K[W]=!0},1152:(A,I,g)=>{g(6454)},8561:(A,I,g)=>{g(4465)},8302:(A,I,g)=>{g(8359)},5543:(A,I,g)=>{"use strict";var B=g(390),Q=g(4130),C=g(4618);B({target:"Promise",stat:!0},{try:function(A){var I=Q.f(this),g=C(A);return(g.error?I.reject:I.resolve)(g.value),I.promise}})},9702:(A,I,g)=>{g(2228);var B=g(315),Q=g(2868),C=g(7499),E=g(8518),i=g(9418),o=g(5712)("toStringTag");for(var D in B){var a=Q[D],s=a&&a.prototype;s&&C(s)!==o&&E(s,o,D),i[D]=i.Array}},9842:(A,I,g)=>{var B=g(7543);A.exports=B},5697:(A,I,g)=>{var B=g(1065);A.exports=B},3798:(A,I,g)=>{var B=g(4388);A.exports=B},671:(A,I,g)=>{var B=g(1285);A.exports=B},8730:(A,I,g)=>{var B=g(2529);A.exports=B},8531:(A,I,g)=>{var B=g(6854);A.exports=B},3751:(A,I,g)=>{var B=g(2744);A.exports=B},1380:(A,I,g)=>{var B=g(6018);A.exports=B},6601:(A,I,g)=>{var B=g(5350);A.exports=B},8783:(A,I,g)=>{var B=g(8116);A.exports=B},4731:(A,I,g)=>{var B=g(7281);g(9702),A.exports=B},1888:function(A,I){var g={Unkown:0,Grayscale:1,AdobeRGB:2,RGB:3,CYMK:4},B=function(){"use strict";var A=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),I=4017,B=799,Q=3406,C=2276,E=1567,i=3784,o=5793,D=2896;function a(){}function s(A,I){for(var g,B,Q=0,C=[],E=16;E>0&&!A[E-1];)E--;C.push({children:[],index:0});var i,o=C[0];for(g=0;g<E;g++){for(B=0;B<A[g];B++){for((o=C.pop()).children[o.index]=I[Q];o.index>0;)o=C.pop();for(o.index++,C.push(o);C.length<=g;)C.push(i={children:[],index:0}),o.children[o.index]=i.children,o=i;Q++}g+1<E&&(C.push(i={children:[],index:0}),o.children[o.index]=i.children,o=i)}return C[0].children}function w(A,I,g){return 64*((A.blocksPerLine+1)*I+g)}function t(I,g,B,Q,C,E,i,o,D){B.precision,B.samplesPerLine,B.scanLines;var a=B.mcusPerLine,s=B.progressive,t=(B.maxH,B.maxV,g),G=0,h=0;function F(){if(h>0)return h--,G>>h&1;if(255==(G=I[g++])){var A=I[g++];if(A)throw"unexpected marker: "+(G<<8|A).toString(16)}return h=7,G>>>7}function y(A){for(var I,g=A;null!==(I=F());){if("number"==typeof(g=g[I]))return g;if("object"!=typeof g)throw"invalid huffman sequence"}return null}function c(A){for(var I=0;A>0;){var g=F();if(null===g)return;I=I<<1|g,A--}return I}function r(A){var I=c(A);return I>=1<<A-1?I:I+(-1<<A)+1}var N=0;var R,e=0;function n(A,I,g,B,Q){var C=g%a;I(A,w(A,(g/a|0)*A.v+B,C*A.h+Q))}function S(A,I,g){I(A,w(A,g/A.blocksPerLine|0,g%A.blocksPerLine))}var U,k,J,H,M,L,Y=Q.length;L=s?0===E?0===o?function(A,I){var g=y(A.huffmanTableDC),B=0===g?0:r(g)<<D;A.blockData[I]=A.pred+=B}:function(A,I){A.blockData[I]|=F()<<D}:0===o?function(I,g){if(N>0)N--;else for(var B=E,Q=i;B<=Q;){var C=y(I.huffmanTableAC),o=15&C,a=C>>4;if(0!==o){var s=A[B+=a];I.blockData[g+s]=r(o)*(1<<D),B++}else{if(a<15){N=c(a)+(1<<a)-1;break}B+=16}}}:function(I,g){for(var B=E,Q=i,C=0;B<=Q;){var o=A[B];switch(e){case 0:var a=y(I.huffmanTableAC),s=15&a;if(C=a>>4,0===s)C<15?(N=c(C)+(1<<C),e=4):(C=16,e=1);else{if(1!==s)throw"invalid ACn encoding";R=r(s),e=C?2:3}continue;case 1:case 2:I.blockData[g+o]?I.blockData[g+o]+=F()<<D:0==--C&&(e=2==e?3:0);break;case 3:I.blockData[g+o]?I.blockData[g+o]+=F()<<D:(I.blockData[g+o]=R<<D,e=0);break;case 4:I.blockData[g+o]&&(I.blockData[g+o]+=F()<<D)}B++}4===e&&0==--N&&(e=0)}:function(I,g){var B=y(I.huffmanTableDC),Q=0===B?0:r(B);I.blockData[g]=I.pred+=Q;for(var C=1;C<64;){var E=y(I.huffmanTableAC),i=15&E,o=E>>4;if(0!==i){var D=A[C+=o];I.blockData[g+D]=r(i),C++}else{if(o<15)break;C+=16}}};var K,d,l,f,u=0;for(d=1==Y?Q[0].blocksPerLine*Q[0].blocksPerColumn:a*B.mcusPerColumn,C||(C=d);u<d;){for(k=0;k<Y;k++)Q[k].pred=0;if(N=0,1==Y)for(U=Q[0],M=0;M<C;M++)S(U,L,u),u++;else for(M=0;M<C;M++){for(k=0;k<Y;k++)for(l=(U=Q[k]).h,f=U.v,J=0;J<f;J++)for(H=0;H<l;H++)n(U,L,u,J,H);u++}if(h=0,(K=I[g]<<8|I[g+1])<=65280)throw"marker was not found";if(!(K>=65488&&K<=65495))break;g+=2}return g-t}function G(A,g,a){var s,w,t,G,h,F,y,c,r,N,R=A.quantizationTable;for(N=0;N<64;N++)a[N]=A.blockData[g+N]*R[N];for(N=0;N<8;++N){var e=8*N;0!==a[1+e]||0!==a[2+e]||0!==a[3+e]||0!==a[4+e]||0!==a[5+e]||0!==a[6+e]||0!==a[7+e]?(s=o*a[0+e]+128>>8,w=o*a[4+e]+128>>8,t=a[2+e],G=a[6+e],h=D*(a[1+e]-a[7+e])+128>>8,c=D*(a[1+e]+a[7+e])+128>>8,F=a[3+e]<<4,y=a[5+e]<<4,r=s-w+1>>1,s=s+w+1>>1,w=r,r=t*i+G*E+128>>8,t=t*E-G*i+128>>8,G=r,r=h-y+1>>1,h=h+y+1>>1,y=r,r=c+F+1>>1,F=c-F+1>>1,c=r,r=s-G+1>>1,s=s+G+1>>1,G=r,r=w-t+1>>1,w=w+t+1>>1,t=r,r=h*C+c*Q+2048>>12,h=h*Q-c*C+2048>>12,c=r,r=F*B+y*I+2048>>12,F=F*I-y*B+2048>>12,y=r,a[0+e]=s+c,a[7+e]=s-c,a[1+e]=w+y,a[6+e]=w-y,a[2+e]=t+F,a[5+e]=t-F,a[3+e]=G+h,a[4+e]=G-h):(r=o*a[0+e]+512>>10,a[0+e]=r,a[1+e]=r,a[2+e]=r,a[3+e]=r,a[4+e]=r,a[5+e]=r,a[6+e]=r,a[7+e]=r)}for(N=0;N<8;++N){var n=N;0!==a[8+n]||0!==a[16+n]||0!==a[24+n]||0!==a[32+n]||0!==a[40+n]||0!==a[48+n]||0!==a[56+n]?(s=o*a[0+n]+2048>>12,w=o*a[32+n]+2048>>12,t=a[16+n],G=a[48+n],h=D*(a[8+n]-a[56+n])+2048>>12,c=D*(a[8+n]+a[56+n])+2048>>12,F=a[24+n],y=a[40+n],r=s-w+1>>1,s=s+w+1>>1,w=r,r=t*i+G*E+2048>>12,t=t*E-G*i+2048>>12,G=r,r=h-y+1>>1,h=h+y+1>>1,y=r,r=c+F+1>>1,F=c-F+1>>1,c=r,r=s-G+1>>1,s=s+G+1>>1,G=r,r=w-t+1>>1,w=w+t+1>>1,t=r,r=h*C+c*Q+2048>>12,h=h*Q-c*C+2048>>12,c=r,r=F*B+y*I+2048>>12,F=F*I-y*B+2048>>12,y=r,a[0+n]=s+c,a[56+n]=s-c,a[8+n]=w+y,a[48+n]=w-y,a[16+n]=t+F,a[40+n]=t-F,a[24+n]=G+h,a[32+n]=G-h):(r=o*a[N+0]+8192>>14,a[0+n]=r,a[8+n]=r,a[16+n]=r,a[24+n]=r,a[32+n]=r,a[40+n]=r,a[48+n]=r,a[56+n]=r)}for(N=0;N<64;++N){var S=g+N,U=a[N];U=U<=-2056/A.bitConversion?0:U>=2024/A.bitConversion?255/A.bitConversion:U+2056/A.bitConversion>>4,A.blockData[S]=U}}function h(A,I){for(var g=I.blocksPerLine,B=I.blocksPerColumn,Q=new Int32Array(64),C=0;C<B;C++)for(var E=0;E<g;E++){G(I,w(I,C,E),Q)}return I.blockData}function F(A){return A<=0?0:A>=255?255:0|A}return a.prototype={load:function(A){var I=function(A){this.parse(A),this.onload&&this.onload()}.bind(this);if(A.indexOf("data:")>-1){for(var g=A.indexOf("base64,")+7,B=atob(A.substring(g)),Q=new Uint8Array(B.length),C=B.length-1;C>=0;C--)Q[C]=B.charCodeAt(C);I(B)}else{var E=new XMLHttpRequest;E.open("GET",A,!0),E.responseType="arraybuffer",E.onload=function(){var A=new Uint8Array(E.response);I(A)}.bind(this),E.send(null)}},parse:function(I){function B(){var A=I[o]<<8|I[o+1];return o+=2,A}function Q(){var A=B(),g=I.subarray(o,o+A-2);return o+=g.length,g}function C(A){for(var I=Math.ceil(A.samplesPerLine/8/A.maxH),g=Math.ceil(A.scanLines/8/A.maxV),B=0;B<A.components.length;B++){v=A.components[B];var Q=Math.ceil(Math.ceil(A.samplesPerLine/8)*v.h/A.maxH),C=Math.ceil(Math.ceil(A.scanLines/8)*v.v/A.maxV),E=I*v.h,i=64*(g*v.v)*(E+1);v.blockData=new Int16Array(i),v.blocksPerLine=Q,v.blocksPerColumn=C}A.mcusPerLine=I,A.mcusPerColumn=g}var E,i,o=0,D=(I.length,null),a=null,w=[],G=[],F=[],y=B();if(65496!=y)throw"SOI not found";for(y=B();65497!=y;){var c,r;switch(y){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var N=Q();65504===y&&74===N[0]&&70===N[1]&&73===N[2]&&70===N[3]&&0===N[4]&&(D={version:{major:N[5],minor:N[6]},densityUnits:N[7],xDensity:N[8]<<8|N[9],yDensity:N[10]<<8|N[11],thumbWidth:N[12],thumbHeight:N[13],thumbData:N.subarray(14,14+3*N[12]*N[13])}),65518===y&&65===N[0]&&100===N[1]&&111===N[2]&&98===N[3]&&101===N[4]&&0===N[5]&&(a={version:N[6],flags0:N[7]<<8|N[8],flags1:N[9]<<8|N[10],transformCode:N[11]});break;case 65499:for(var R=B()+o-2;o<R;){var e=I[o++],n=new Int32Array(64);if(e>>4==0)for(c=0;c<64;c++){n[A[c]]=I[o++]}else{if(e>>4!=1)throw"DQT: invalid table spec";for(c=0;c<64;c++){n[A[c]]=B()}}w[15&e]=n}break;case 65472:case 65473:case 65474:if(E)throw"Only single frame JPEGs supported";B(),(E={}).extended=65473===y,E.progressive=65474===y,E.precision=I[o++],E.scanLines=B(),E.samplesPerLine=B(),E.components=[],E.componentIds={};var S,U=I[o++],k=0,J=0;for(T=0;T<U;T++){S=I[o];var H=I[o+1]>>4,M=15&I[o+1];k<H&&(k=H),J<M&&(J=M);var L=I[o+2];r=E.components.push({h:H,v:M,quantizationTable:w[L],quantizationTableId:L,bitConversion:255/((1<<E.precision)-1)}),E.componentIds[S]=r-1,o+=3}E.maxH=k,E.maxV=J,C(E);break;case 65476:var Y=B();for(T=2;T<Y;){var K=I[o++],d=new Uint8Array(16),l=0;for(c=0;c<16;c++,o++)l+=d[c]=I[o];var f=new Uint8Array(l);for(c=0;c<l;c++,o++)f[c]=I[o];T+=17+l,(K>>4==0?F:G)[15&K]=s(d,f)}break;case 65501:B(),i=B();break;case 65498:B();var u=I[o++],q=[];for(T=0;T<u;T++){var p=E.componentIds[I[o++]];v=E.components[p];var b=I[o++];v.huffmanTableDC=F[b>>4],v.huffmanTableAC=G[15&b],q.push(v)}var W=I[o++],Z=I[o++],m=I[o++],x=t(I,o,E,q,i,W,Z,m>>4,15&m);o+=x;break;case 65535:255!==I[o]&&o--;break;default:if(255==I[o-3]&&I[o-2]>=192&&I[o-2]<=254){o-=3;break}throw"unknown JPEG marker "+y.toString(16)}y=B()}switch(this.width=E.samplesPerLine,this.height=E.scanLines,this.jfif=D,this.adobe=a,this.components=[],E.components.length){case 1:this.colorspace=g.Grayscale;break;case 3:this.adobe?this.colorspace=g.AdobeRGB:this.colorspace=g.RGB;break;case 4:this.colorspace=g.CYMK;break;default:this.colorspace=g.Unknown}for(var T=0;T<E.components.length;T++){var v;(v=E.components[T]).quantizationTable||null===v.quantizationTableId||(v.quantizationTable=w[v.quantizationTableId]),this.components.push({output:h(0,v),scaleX:v.h/E.maxH,scaleY:v.v/E.maxV,blocksPerLine:v.blocksPerLine,blocksPerColumn:v.blocksPerColumn,bitConversion:v.bitConversion})}},getData16:function(A,I){if(1!==this.components.length)throw"Unsupported color mode";var g,B,Q,C,E,i,o=this.width/A,D=this.height/I,a=0,s=this.components.length,t=new Uint16Array(A*I*s),G=new Uint16Array((this.components[0].blocksPerLine<<3)*this.components[0].blocksPerColumn*8);for(i=0;i<s;i++){for(var h,F,y,c=(g=this.components[i]).blocksPerLine,r=g.blocksPerColumn,N=c<<3,R=0,e=0;e<r;e++)for(var n=e<<3,S=0;S<c;S++){var U=w(g,e,S),k=(a=0,S<<3);for(h=0;h<8;h++){R=(n+h)*N;for(F=0;F<8;F++)G[R+k+F]=g.output[U+a++]}}for(B=g.scaleX*o,Q=g.scaleY*D,a=i,E=0;E<I;E++)for(C=0;C<A;C++)y=(0|E*Q)*N+(0|C*B),t[a]=G[y],a+=s}return t},getData:function(A,I){var g,B,Q,C,E,i,o,D,a,s,t,G,h,y,c,r=this.width/A,N=this.height/I,R=0,e=this.components.length,n=A*I*e,S=new Uint8Array(n),U=new Uint8Array((this.components[0].blocksPerLine<<3)*this.components[0].blocksPerColumn*8);for(i=0;i<e;i++){for(var k,J,H,M=(g=this.components[i]).blocksPerLine,L=g.blocksPerColumn,Y=M<<3,K=0,d=0;d<L;d++)for(var l=d<<3,f=0;f<M;f++){var u=w(g,d,f),q=(R=0,f<<3);for(k=0;k<8;k++){K=(l+k)*Y;for(J=0;J<8;J++)U[K+q+J]=g.output[u+R++]*g.bitConversion}}for(B=g.scaleX*r,Q=g.scaleY*N,R=i,E=0;E<I;E++)for(C=0;C<A;C++)H=(0|E*Q)*Y+(0|C*B),S[R]=U[H],R+=e}switch(e){case 1:case 2:break;case 3:if(c=!0,this.adobe&&this.adobe.transformCode?c=!0:void 0!==this.colorTransform&&(c=!!this.colorTransform),c)for(i=0;i<n;i+=e)o=S[i],D=S[i+1],G=F(o-179.456+1.402*(a=S[i+2])),h=F(o+135.459-.344*D-.714*a),y=F(o-226.816+1.772*D),S[i]=G,S[i+1]=h,S[i+2]=y;break;case 4:if(!this.adobe)throw"Unsupported color mode (4 components)";if(c=!1,this.adobe&&this.adobe.transformCode?c=!0:void 0!==this.colorTransform&&(c=!!this.colorTransform),c)for(i=0;i<n;i+=e)o=S[i],D=S[i+1],s=F(434.456-o-1.402*(a=S[i+2])),t=F(119.541-o+.344*D+.714*a),o=F(481.816-o-1.772*D),S[i]=s,S[i+1]=t,S[i+2]=o;break;default:throw"Unsupported color mode"}return S}},a}();A.exports={JpegImage:B}},3240:A=>{"use strict";A.exports="data:application/wasm;base64,AGFzbQEAAAABoQEVYAF/AGAEf39/fwBgAX8Bf2ADf39/AGADf39/AX9gBH9/f38Bf2AAAGACf38Bf2ACf38AYAZ/f39/f38AYAV/f39/fwBgBX9/f39/AX9gAAF/YAh/f39/f39/fwBgCn9/f39/f39/f38AYA1/f39/f39/f39/f39/AGAHf39/f39/fwBgAn5/AX9gBH9/fn4AYAZ/fH9/f38Bf2ACfH8BfAKXARkBYQFhAAMBYQFiAAoBYQFjAA0BYQFkAA4BYQFlAAkBYQFmAAYBYQFnAAMBYQFoAAMBYQFpAAABYQFqAAgBYQFrAAMBYQFsAAABYQFtAAIBYQFuAAcBYQFvAAkBYQFwAA8BYQFxAAABYQFyABABYQFzAAIBYQF0AAMBYQF1AAkBYQF2AAgBYQF3AAoBYQF4AAgBYQF5AAUDtAGyAQACBAAEBgAABQQDBAoHBwQAAAICBwIDAAIRAAIABgICAwMLCwsLBAACAAQCBgQEBgEEAAcSAgAAAgEHAwAGAAMHBgMDCBMDAgUUBwIIBggIBAUFBQMFAwUFAAUBAQwBAQEBAQEFAQEBAQEBAQABAQEAAgIFAAAAAAMGAgcGAAACAgcCCAAHCAQIAwwCAAwCAgICCQkKCgQAAQEEBAYAAgIDAgIEBAMEAwcHAwYCBQQFBwAEBwFwAboBugEFBwEBoAaAgAIGCAF/AUHg9gYLBzMLAXoCAAFBAEUBQgAuAUMBAAFEAMUBAUUAxAEBRgAfAUcApgEBSAClAQFJAKQBAUoAqgEJhAIBAEEBC7kBiwGFAXZyyQHDAcEBwAG3AbABpwGjAaIBoAGfAZ4BnQGcAZsBmgGZAUyYAUzKAZcBN7gBUZQBoQGSAUhalQGWAU5ANymTAb4BvQG8AZEBkAGPAY4BjQExMEovjAGKAYkBtQE3KUmIASlJhwErKoYBhAErKoMBggErKoEBgAErKn9+MTA/L30rKnx7Kyp6eSsqeHcrKnV0NDNHOnM0M0Y6cTQzSjpwNDM/b240Mz9tbDEwRy9rMTBGL2oxMGkvyAExMMcBL8YBZl5dvwEpuwFYKboBuQFYV7YBVTcpQEC0ASmzAasBrQGyASmsAa4BsQEprwEpqAEpqQFPTjhXTwq5jgiyAYYDAQV/QRAQQSEEIwBBEGsiAiQAQaXnAC0AAEUEQEGl5wBBAToAAAsgAkHk5gA2AgwgAiAANgIIIAIgAikDCDcDACMAQSBrIgUkACAFQY8rEFkhASMAQRBrIgAkACACKAIABEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsEQCABQY0rQY0rECwQWwsgACACKAIEIgMgAigCACADKAIAKAIYEQMAIAECfyAALQALQQd2BEAgACgCAAwBCyAACwJ/IAAtAAtBB3YEQCAAKAIEDAELIAAtAAtB/wBxCxBbIAAQQgsgBUEQaiIDIAEpAgA3AgAgAyABKAIINgIIIAFCADcCACABQQA2AgggAy0ACxogAEEQaiQAIARB9OQANgIAIARB0OUANgIAIARBBGoCfyADLQALQQd2BEAgAygCAAwBCyADCxBlIAMQQiABEEIgBEGg3QA2AgAgBCACKQIANwIIIAVBIGokACAEQYQuNgIAIAJBEGokACAEQfAtQRwQBwALMwEBfyAAQQEgABshAAJAA0AgABAuIgENAUHE9gIoAgAiAQRAIAERBgAMAQsLEAUACyABC/ICAgJ/AX4CQCACRQ0AIAAgAToAACAAIAJqIgNBAWsgAToAACACQQNJDQAgACABOgACIAAgAToAASADQQNrIAE6AAAgA0ECayABOgAAIAJBB0kNACAAIAE6AAMgA0EEayABOgAAIAJBCUkNACAAQQAgAGtBA3EiBGoiAyABQf8BcUGBgoQIbCIBNgIAIAMgAiAEa0F8cSIEaiICQQRrIAE2AgAgBEEJSQ0AIAMgATYCCCADIAE2AgQgAkEIayABNgIAIAJBDGsgATYCACAEQRlJDQAgAyABNgIYIAMgATYCFCADIAE2AhAgAyABNgIMIAJBEGsgATYCACACQRRrIAE2AgAgAkEYayABNgIAIAJBHGsgATYCACAEIANBBHFBGHIiBGsiAkEgSQ0AIAGtQoGAgIAQfiEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkEgayICQR9LDQALCyAAC6wCAQd/IAAoAjQiASAAKAI8QQNrTwRAIAAoAjgiAkEBayEFAkADQCABIAJPBEAgACgCMA0CQQUQGQALAkAgAS0AACIGQf8BRyIHDQAgASAFRwRAIAEsAAFBAE4NAQsgACgCMEEASg0CQQUQGQALIAAgAUEBaiIBNgI0IAAg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BEAgACEDDAMLIABBA3FFBEAgACEDDAILIAAhAwNAIAJFDQQgAyABLQAAOgAAIAFBAWohASACQQFrIQIgA0EBaiIDQQNxDQALDAELAkAgAw0AIARBA3EEQANAIAJFDQUgACACQQFrIgJqIgMgASACai0AADoAACADQQNxDQALCyACQQNNDQADQCAAIAJBBGsiAmogASACaigCADYCACACQQNLDQALCyACRQ0CA0AgACACQQFrIgJqIAEgAmotAAA6AAAgAg0ACwwCCyACQQNNDQADQCADIAEoAgA2AgAgAUEEaiEBIANBBGohAyACQQRrIgJBA0sNAAsLIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQQFrIgINAAsLIAALBgAgABAfCzIBAX8gACgCHCIBBEAgACABNgIgIAEQHwsgACgCECIBBEAgACABNgIUIAEQHwsgABAfCzABAX8gACgCHCIBBEAgACABNgIgIAEQHwsgACgCECIBBEAgACABNgIUIAEQHwsgAAtpAQN/AkAgACIBQQNxBEADQCABLQAARQ0CIAFBAWoiAUEDcQ0ACwsDQCABIgJBBGohASACKAIAIgNBf3MgA0GBgoQIa3FBgIGChHhxRQ0ACwNAIAIiAUEBaiECIAEtAAANAAsLIAEgAGsLgQIBBX9BASEEIAEoAgQgASgCACABLQAIIgJBAXZsaiIFIAJKBEADQCADQQFqIQMgAkEBdCICIAVIDQALCyAAIANBHyAAKALYLkECdEHcNGooAgBrQQgQISIFIAEoAgAiBmohAiADRQRAIAEtAAggAS0ACUEBdE0hBAsgAC0AZCEAQQAgAiACQQFxIgJqQQJtIgNrIAMgAiAERhsiA0EASARAIAEgAS0ACUEBajoACQsgASABKAIEIAUgBmtBAWpBAXVqIgQ2AgQgASAAIAEtAAgiAkYEfyABIARBAXU2AgQgASABLQAJQQF2OgAJIABB/gFxQQF2BSACC0EBajoACCADCwkAQQggABDCAQv7CAIHfwF+IAEpAgQhCiABKAIMIQMgACABKAIQOgB8IAAgAzYCeCAAIAo3AnACQAJAIAAoAkQEQCAAKAJQIQcMAQsgACgCQCIDQX8gACgCUCIHdEF/c0cNAAJ/IANBgAFOBEBB/x8gAyADQf8fTxtBgAFqIgFBBnZBA3Ii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AEHo6gBCgYCAgDA3AgBB4OoAQoGAgIAwNwIAQdjqAEKBgICAMDcCAEHQ6gBCgYCAgDA3AgBByOoAQoGAgIAwNwIAQcDqAEKBgICAMDcCAEG46gBCgYCAgDA3AgBBsOoAQoGAgIAwNwIAQajqAEKBgICAMDcCAEGg6gBCgYCAgDA3AgBBmOoAQoGAgIAwNwIAQZDqAEKBgICAMDcCAEGI6gBCgYCAgDA3AgBBgOoAQoGAgIAwNwIAQfjpAEKBgICAMDcCAEHw6QBCgYCAgDA3AgBB6OkAQoGAgIAwNwIAQeDpAEKBgICAMDcCAEHY6QBCgYCAgDA3AgBB0OkAQoGAgIAwNwIAQcjpAEKBgICAMDcCAEHA6QBCgYCAgDA3AgBBuOkAQoGAgIAwNwIAQbDpAEKBgICAMDcCAEGo6QBCgYCAgDA3AgBBoOgAQoKAgIDQADcCAEGY6ABCgoCAgNAANwIAQZDoAEKCgICA0AA3AgBBiOgAQoKAgIDQADcCAEGA6ABCgoCAgNAANwIAQfjnAEKCgICA0AA3AgBB8OcAQoKAgIDQADcCAEHo5wBCgoCAgNAANwIAQaDvAEL/////LzcCAEGY7wBC/////y83AgBBkO8AQv////8vNwIAQYjvAEL/////LzcCAEGA7wBC/////y83AgBB+O4AQv////8vNwIAQfDuAEL/////LzcCAEHo7gBC/////y83AgBB4O4AQv////8vNwIAQdjuAEL/////LzcCAEHQ7gBC/////y83AgBByO4AQv////8vNwIAQcDuAEL/////LzcCAEG47gBC/////y83AgBBsO4AQv////8vNwIAQajuAEL/////LzcCAEGg7gBC/////y83AgBBmO4AQv////8vNwIAQZDuAEL/////LzcCAEGI7gBC/////y83AgBBgO4AQv////8vNwIAQfjtAEL/////LzcCAEHw7QBC/////y83AgBB6O0AQv////8vNwIAQeDtAEL/////LzcCAEHY7QBC/////y83AgBB0O0AQv////8vNwIAQcjtAEL/////LzcCAEHA7QBC/////y83AgBBuO0AQv////8vNwIAQbDtAEL/////LzcCAEGo7QBC/////y83AgBBoO0AQv////8vNwIAQZjtAEL/////LzcCAEGQ7QBC/////y83AgBBiO0AQv////8vNwIAQYDtAEL/////LzcCAEH47ABC/////y83AgBB8OwAQv////8vNwIAQejsAEL/////LzcCAEHg7ABC/////y83AgBB2OwAQv////8vNwIAQdDsAEL/////LzcCAEHI7ABC/////y83AgBBwOwAQv////8vNwIAQbjsAEL/////LzcCAEGw7ABC/////y83AgBBqOwAQv////8vNwIAQaDsAEL/////LzcCAEGY7ABC/////y83AgBBkOwAQv////8vNwIAQYjsAEL/////LzcCAEGA7ABC/////y83AgBB+OsAQv////8vNwIAQfDrAEL/////LzcCAEHo6wBC/////y83AgBB4OsAQv////8vNwIAQdjrAEL/////LzcCAEHQ6wBC/////y83AgBByOsAQv////8vNwIAQcDrAEL/////LzcCAEG46wBC/////y83AgBBsOsAQv////8vNwIAQajrAEL/////LzcCAEHA5wBCg4CAgPAANwIAQbjnAEKDgICA8AA3AgBBoOkAQv7////PADcCAEGY6QBC/v///88ANwIAQZDpAEL+////zwA3AgBBiOkAQv7////PADcCAEGA6QBC/v///88ANwIAQfjoAEL+////zwA3AgBB8OgAQv7////PADcCAEHo6ABC/v///88ANwIAQeDoAEL+////zwA3AgBB2OgAQv7////PADcCAEHQ6ABC/v///88ANwIAQcjoAEL+////zwA3AgBBwOgAQv7////PADcCAEG46ABC/v///88ANwIAQbDoAEL+////zwA3AgBBqOgAQv7////PADcCAEHg5wBC/f///+8ANwIAQdjnAEL9////7wA3AgBB0OcAQv3////vADcCAEHI5wBC/f///+8ANwIAQbDnAEL8////jwE3AgBBqPcAQQBBgBAQGxpBoIMBQoCAgIAgNwIAQZiDAUKAgICAIDcCAEGQgwFCgICAgCA3AgBBiIMBQoCAgIAgNwIAQYCDAUKAgICAIDcCAEH4ggFCgICAgCA3AgBB8IIBQoCAgIAgNwIAQeiCAUKAgICAIDcCAEHgggFCgICAgCA3AgBB2IIBQoCAgIAgNwIAQdCCAUKAgICAIDcCAEHIggFCgICAgCA3AgBBwIIBQoCAgIAgNwIAQbiCAUKAgICAIDcCAEGwggFCgICAgCA3AgBBqIIBQoCAgIAgNwIAQaCCAUKAgICAIDcCAEGYggFCgICAgCA3AgBBkIIBQoCAgIAgNwIAQYiCAUKAgICAIDcCAEGAggFCgICAgCA3AgBB+IEBQoCAgIAgNwIAQfCBAUKAgICAIDcCAEHogQFCgICAgCA3AgBB4IEBQoCAgIAgNwIAQdiBAUKAgICAIDcCAEHQgQFCgICAgCA3AgBByIEBQoCAgIAgNwIAQcCBAUKAgICAIDcCAEG4gQFCgICAgCA3AgBBsIEBQoCAgIAgNwIAQaiBAUKAgICAIDcCAEGggQFCgICAgCA3AgBBmIEBQoCAgIAgNwIAQZCBAUKAgICAIDcCAEGIgQFCgICAgCA3AgBBgIEBQoCAgIAgNwIAQfiAAUKAgICAIDcCAEHwgAFCgICAgCA3AgBB6IABQoCAgIAgNwIAQeCAAUKAgICAIDcCAEHYgAFCgICAgCA3AgBB0IABQoCAgIAgNwIAQciAAUKAgICAIDcCAEHAgAFCgICAgCA3AgBBuIABQoCAgIAgNwIAQbCAAUKAgICAIDcCAEGogAFCgICAgCA3AgBBoIABQoCAgIAgNwIAQZiAAUKAgICAIDcCAEGQgAFCgICAgCA3AgBBiIABQoCAgIAgNwIAQYCAAUKAgICAIDcCAEH4/wBCgICAgCA3AgBB8P8AQoCAgIAgNwIAQej/AEKAgICAIDcCAEHg/wBCgICAgCA3AgBB2P8AQoCAgIAgNwIAQdD/AEKAgICAIDcCAEHI/wBCgICAgCA3AgBBwP8AQoCAgIAgNwIAQbj/AEKAgICAIDcCAEGw/wBCgICAgCA3AgBBqP8AQoCAgIAgNwIAQaD9AEKBgICAMDcCAEGY/QBCgYCAgDA3AgBBkP0AQoGAgIAwNwIAQYj9AEKBgICAMDcCAEGA/QBCgYCAgDA3AgBB+PwAQoGAgIAwNwIAQfD8AEKBgICAMDcCAEHo/ABCgYCAgDA3AgBB4PwAQoGAgIAwNwIAQdj8AEKBgICAMDcCAEHQ/ABCgYCAgDA3AgBByPwAQoGAgIAwNwIAQcD8AEKBgICAMDcCAEG4/ABCgYCAgDA3AgBBsPwAQoGAgIAwNwIAQaj8AEKBgICAMDcCAEGg/ABCgYCAgDA3AgBBmPwAQoGAgIAwNwIAQZD8AEKBgICAMDcCAEGI/ABCgYCAgDA3AgBBgPwAQoGAgIAwNwIAQfj7AEKBgICAMDcCAEHw+wBCgYCAgDA3AgBB6PsAQoGAgIAwNwIAQeD7AEKBgICAMDcCAEHY+wBCgYCAgDA3AgBB0PsAQoGAgIAwNwIAQcj7AEKBgICAMDcCAEHA+wBCgYCAgDA3AgBBuPsAQoGAgIAwNwIAQbD7AEKBgICAMDcCAEGo+wBCgYCAgDA3AgBBoPoAQoKAgIDAADcCAEGY+gBCgoCAgMAANwIAQZD6AEKCgICAwAA3AgBBiPoAQoKAgIDAADcCAEGA+gBCgoCAgMAANwIAQfj5AEKCgICAwAA3AgBB8PkAQoKAgIDAADcCAEHo+QBCgoCAgMAANwIAQeD5AEKCgICAwAA3AgBB2PkAQoKAgIDAADcCAEHQ+QBCgoCAgMAANwIAQcj5AEKCgICAwAA3AgBBwPkAQoKAgIDAADcCAEG4+QBCgoCAgMAANwIAQbD5AEKCgICAwAA3AgBBqPkAQoKAgIDAADcCAEHg+ABCg4CAgNAANwIAQdj4AEKDgICA0AA3AgBB0PgAQoOAgIDQADcCAEHI+ABCg4CAgNAANwIAQcD4AEKDgICA0AA3AgBBuPgAQoOAgIDQADcCAEGw+ABCg4CAgNAANwIAQaj4AEKDgICA0AA3AgBBgPgAQoSAgIDgADcCAEH49wBChICAgOAANwIAQfD3AEKEgICA4AA3AgBB6PcAQoSAgIDgADcCAEHQ9wBChYCAgPAANwIAQcj3AEKFgICA8AA3AgBBoIcBQv////8vNwIAQZiHAUL/////LzcCAEGQhwFC/////y83AgBBiIcBQv////8vNwIAQYCHAUL/////LzcCAEH4hgFC/////y83AgBB8IYBQv////8vNwIAQeiGAUL/////LzcCAEHghgFC/////y83AgBB2IYBQv////8vNwIAQdCGAUL/////LzcCAEHIhgFC/////y83AgBBwIYBQv////8vNwIAQbiGAUL/////LzcCAEGwhgFC/////y83AgBBqIYBQv////8vNwIAQaCGAUL/////LzcCAEGYhgFC/////y83AgBBkIYBQv////8vNwIAQYiGAUL/////LzcCAEGAhgFC/////y83AgBB+IUBQv////8vNwIAQfCFAUL/////LzcCAEHohQFC/////y83AgBB4IUBQv////8vNwIAQdiFAUL/////LzcCAEHQhQFC/////y83AgBByIUBQv////8vNwIAQcCFAUL/////LzcCAEG4hQFC/////y83AgBBsIUBQv////8vNwIAQaiFAUL/////LzcCAEGghQFC/////y83AgBBmIUBQv////8vNwIAQZCFAUL/////LzcCAEGIhQFC/////y83AgBBgIUBQv////8vNwIAQfiEAUL/////LzcCAEHwhAFC/////y83AgBB6IQBQv////8vNwIAQeCEAUL/////LzcCAEHYhAFC/////y83AgBB0IQBQv////8vNwIAQciEAUL/////LzcCAEHAhAFC/////y83AgBBuIQBQv////8vNwIAQbCEAUL/////LzcCAEGohAFC/////y83AgBBoIQBQv////8vNwIAQZiEAUL/////LzcCAEGQhAFC/////y83AgBBiIQBQv////8vNwIAQYCEAUL/////LzcCAEH4gwFC/////y83AgBB8IMBQv////8vNwIAQeiDAUL/////LzcCAEHggwFC/////y83AgBB2IMBQv////8vNwIAQdCDAUL/////LzcCAEHIgwFC/////y83AgBBwIMBQv////8vNwIAQbiDAUL/////LzcCAEGwgwFC/////y83AgBBqIMBQv////8vNwIAQbj3AEKGgICAgAE3AgBBoP8AQv7///8/NwIAQZj/AEL+////PzcCAEGQ/wBC/v///z83AgBBiP8AQv7///8/NwIAQYD/AEL+////PzcCAEH4/gBC/v///z83AgBB8P4AQv7///8/NwIAQej+AEL+////PzcCAEHg/gBC/v///z83AgBB2P4AQv7///8/NwIAQdD+AEL+////PzcCAEHI/gBC/v///z83AgBBwP4AQv7///8/NwIAQbj+AEL+////PzcCAEGw/gBC/v///z83AgBBqP4AQv7///8/NwIAQaD+AEL+////PzcCAEGY/gBC/v///z83AgBBkP4AQv7///8/NwIAQYj+AEL+////PzcCAEGA/gBC/v///z83AgBB+P0AQv7///8/NwIAQfD9AEL+////PzcCAEHo/QBC/v///z83AgBB4P0AQv7///8/NwIAQdj9AEL+////PzcCAEHQ/QBC/v///z83AgBByP0AQv7///8/NwIAQcD9AEL+////PzcCAEG4/QBC/v///z83AgBBsP0AQv7///8/NwIAQaj9AEL+////PzcCAEGg+wBC/f///88ANwIAQZj7AEL9////zwA3AgBBkPsAQv3////PADcCAEGI+wBC/f///88ANwIAQYD7AEL9////zwA3AgBB+PoAQv3////PADcCAEHw+gBC/f///88ANwIAQej6AEL9////zwA3AgBB4PoAQv3////PADcCAEHY+gBC/f///88ANwIAQdD6AEL9////zwA3AgBByPoAQv3////PADcCAEHA+gBC/f///88ANwIAQbj6AEL9////zwA3AgBBsPoAQv3////PADcCAEGo+gBC/f///88ANwIAQaD5AEL8////3wA3AgBBmPkAQvz////fADcCAEGQ+QBC/P///98ANwIAQYj5AEL8////3wA3AgBBgPkAQvz////fADcCAEH4+ABC/P///98ANwIAQfD4AEL8////3wA3AgBB6PgAQvz////fADcCAEGg+ABC+////+8ANwIAQZj4AEL7////7wA3AgBBkPgAQvv////vADcCAEGI+ABC+////+8ANwIAQeD3AEL6/////wA3AgBB2PcAQvr/////ADcCAEHA9wBC+f///48BNwIAQaiHAUEAQYAQEBsaQaCVAUKBgICAMDcCAEGYlQFCgYCAgDA3AgBBkJUBQoGAgIAwNwIAQYiVAUKBgICAMDcCAEGAlQFCgYCAgDA3AgBB+JQBQoGAgIAwNwIAQfCUAUKBgICAMDcCAEHolAFCgYCAgDA3AgBB4JQBQoGAgIAwNwIAQdiUAUKBgICAMDcCAEHQlAFCgYCAgDA3AgBByJQBQoGAgIAwNwIAQcCUAUKBgICAMDcCAEG4lAFCgYCAgDA3AgBBsJQBQoGAgIAwNwIAQaiUAUKBgICAMDcCAEGglAFCgYCAgDA3AgBBmJQBQoGAgIAwNwIAQZCUAUKBgICAMDcCAEGIlAFCgYCAgDA3AgBBgJQBQoGAgIAwNwIAQfiTAUKBgICAMDcCAEHwkwFCgYCAgDA3AgBB6JMBQoGAgIAwNwIAQeCTAUKBgICAMDcCAEHYkwFCgYCAgDA3AgBB0JMBQoGAgIAwNwIAQciTAUKBgICAMDcCAEHAkwFCgYCAgDA3AgBBuJMBQoGAgIAwNwIAQbCTAUKBgICAMDcCAEGokwFCgYCAgDA3AgBBoJEBQoCAgIAwNwIAQZiRAUKAgICAMDcCAEGQkQFCgICAgDA3AgBBiJEBQoCAgIAwNwIAQYCRAUKAgICAMDcCAEH4kAFCgICAgDA3AgBB8JABQoCAgIAwNwIAQeiQAUKAgICAMDcCAEHgkAFCgICAgDA3AgBB2JABQoCAgIAwNwIAQdCQAUKAgICAMDcCAEHIkAFCgICAgDA3AgBBwJABQoCAgIAwNwIAQbiQAUKAgICAMDcCAEGwkAFCgICAgDA3AgBBqJABQoCAgIAwNwIAQaCQAUKAgICAMDcCAEGYkAFCgICAgDA3AgBBkJABQoCAgIAwNwIAQYiQAUKAgICAMDcCAEGAkAFCgICAgDA3AgBB+I8BQoCAgIAwNwIAQfCPAUKAgICAMDcCAEHojwFCgICAgDA3AgBB4I8BQoCAgIAwNwIAQdiPAUKAgICAMDcCAEHQjwFCgICAgDA3AgBByI8BQoCAgIAwNwIAQcCPAUKAgICAMDcCAEG4jwFCgICAgDA3AgBBsI8BQoCAgIAwNwIAQaiPAUKAgICAMDcCAEGgjgFCg4CAgMAANwIAQZiOAUKDgICAwAA3AgBBkI4BQoOAgIDAADcCAEGIjgFCg4CAgMAANwIAQYCOAUKDgICAwAA3AgBB+I0BQoOAgIDAADcCAEHwjQFCg4CAgMAANwIAQeiNAUKDgICAwAA3AgBB4I0BQoOAgIDAADcCAEHYjQFCg4CAgMAANwIAQdCNAUKDgICAwAA3AgBByI0BQoOAgIDAADcCAEHAjQFCg4CAgMAANwIAQbiNAUKDgICAwAA3AgBBsI0BQoOAgIDAADcCAEGojQFCg4CAgMAANwIAQaCMAUKCgICAwAA3AgBBmIwBQoKAgIDAADcCAEGQjAFCgoCAgMAANwIAQYiMAUKCgICAwAA3AgBBgIwBQoKAgIDAADcCAEH4iwFCgoCAgMAANwIAQfCLAUKCgICAwAA3AgBB6IsBQoKAgIDAADcCAEHgiwFCgoCAgMAANwIAQdiLAUKCgICAwAA3AgBB0IsBQoKAgIDAADcCAEHIiwFCgoCAgMAANwIAQcCLAUKCgICAwAA3AgBBuIsBQoKAgIDAADcCAEGwiwFCgoCAgMAANwIAQaiLAUKCgICAwAA3AgBB4IoBQoWAgIDQADcCAEHYigFChYCAgNAANwIAQdCKAUKFgICA0AA3AgBByIoBQoWAgIDQADcCAEHAigFChYCAgNAANwIAQbiKAUKFgICA0AA3AgBBsIoBQoWAgIDQADcCAEGoigFChYCAgNAANwIAQeCJAUKEgICA0AA3AgBB2IkBQoSAgIDQADcCAEHQiQFChICAgNAANwIAQciJAUKEgICA0AA3AgBBwIkBQoSAgIDQADcCAEG4iQFChICAgNAANwIAQbCJAUKEgICA0AA3AgBBqIkBQoSAgIDQADcCAEGAiQFCh4CAgOAANwIAQfiIAUKHgICA4AA3AgBB8IgBQoeAgIDgADcCAEHoiAFCh4CAgOAANwIAQcCIAUKGgICA4AA3AgBBuIgBQoaAgIDgADcCAEGwiAFChoCAgOAANwIAQaiIAUKGgICA4AA3AgBBkIgBQomAgIDwADcCAEGIiAFCiYCAgPAANwIAQfCHAUKIgICA8AA3AgBB6IcBQoiAgIDwADcCAEGglwFC/v///z83AgBBmJcBQv7///8/NwIAQZCXAUL+////PzcCAEGIlwFC/v///z83AgBBgJcBQv7///8/NwIAQfiWAUL+////PzcCAEHwlgFC/v///z83AgBB6JYBQv7///8/NwIAQeCWAUL+////PzcCAEHYlgFC/v///z83AgBB0JYBQv7///8/NwIAQciWAUL+////PzcCAEHAlgFC/v///z83AgBBuJYBQv7///8/NwIAQbCWAUL+////PzcCAEGolgFC/v///z83AgBBoJYBQv7///8/NwIAQZiWAUL+////PzcCAEGQlgFC/v///z83AgBBiJYBQv7///8/NwIAQYCWAUL+////PzcCAEH4lQFC/v///z83AgBB8JUBQv7///8/NwIAQeiVAUL+////PzcCAEHglQFC/v///z83AgBB2JUBQv7///8/NwIAQdCVAUL+////PzcCAEHIlQFC/v///z83AgBBwJUBQv7///8/NwIAQbiVAUL+////PzcCAEGwlQFC/v///z83AgBBqJUBQv7///8/NwIAQaCTAUL/////PzcCAEGYkwFC/////z83AgBBkJMBQv////8/NwIAQYiTAUL/////PzcCAEGAkwFC/////z83AgBB+JIBQv////8/NwIAQfCSAUL/////PzcCAEHokgFC/////z83AgBB4JIBQv////8/NwIAQdiSAUL/////PzcCAEHQkgFC/////z83AgBByJIBQv////8/NwIAQcCSAUL/////PzcCAEG4kgFC/////z83AgBBsJIBQv////8/NwIAQaiSAUL/////PzcCAEGgkgFC/////z83AgBBmJIBQv////8/NwIAQZCSAUL/////PzcCAEGIkgFC/////z83AgBBgJIBQv////8/NwIAQfiRAUL/////PzcCAEHwkQFC/////z83AgBB6JEBQv////8/NwIAQeCRAUL/////PzcCAEHYkQFC/////z83AgBB0JEBQv////8/NwIAQciRAUL/////PzcCAEHAkQFC/////z83AgBBuJEBQv////8/NwIAQbCRAUL/////PzcCAEGokQFC/////z83AgBB2IcBQouAgICAATcCAEHIhwFCioCAgIABNwIAQaCPAUL8////zwA3AgBBmI8BQvz////PADcCAEGQjwFC/P///88ANwIAQYiPAUL8////zwA3AgBBgI8BQvz////PADcCAEH4jgFC/P///88ANwIAQfCOAUL8////zwA3AgBB6I4BQvz////PADcCAEHgjgFC/P///88ANwIAQdiOAUL8////zwA3AgBB0I4BQvz////PADcCAEHIjgFC/P///88ANwIAQcCOAUL8////zwA3AgBBuI4BQvz////PADcCAEGwjgFC/P///88ANwIAQaiOAUL8////zwA3AgBBoI0BQv3////PADcCAEGYjQFC/f///88ANwIAQZCNAUL9////zwA3AgBBiI0BQv3////PADcCAEGAjQFC/f///88ANwIAQfiMAUL9////zwA3AgBB8IwBQv3////PADcCAEHojAFC/f///88ANwIAQeCMAUL9////zwA3AgBB2IwBQv3////PADcCAEHQjAFC/f///88ANwIAQciMAUL9////zwA3AgBBwIwBQv3////PADcCAEG4jAFC/f///88ANwIAQbCMAUL9////zwA3AgBBqIwBQv3////PADcCAEGgiwFC+v///98ANwIAQZiLAUL6////3wA3AgBBkIsBQvr////fADcCAEGIiwFC+v///98ANwIAQYCLAUL6////3wA3AgBB+IoBQvr////fADcCAEHwigFC+v///98ANwIAQeiKAUL6////3wA3AgBBoIoBQvv////fADcCAEGYigFC+////98ANwIAQZCKAUL7////3wA3AgBBiIoBQvv////fADcCAEGAigFC+////98ANwIAQfiJAUL7////3wA3AgBB8IkBQvv////fADcCAEHoiQFC+////98ANwIAQaCJAUL4////7wA3AgBBmIkBQvj////vADcCAEGQiQFC+P///+8ANwIAQYiJAUL4////7wA3AgBB4IgBQvn////vADcCAEHYiAFC+f///+8ANwIAQdCIAUL5////7wA3AgBByIgBQvn////vADcCAEGgiAFC9v////8ANwIAQZiIAUL2/////wA3AgBBgIgBQvf/////ADcCAEH4hwFC9/////8ANwIAQeCHAUL0////jwE3AgBB0IcBQvX///+PATcCAEGolwFBAEGAEBAbIQVBBCECA0AgBEEHcUEIckEIIAJrIgN0IQQgAq1CIIYgBoQhB0EAIQADQCAAIARqQQN0IAVqIAc3AgAgAEEBaiIAIAN2RQ0AC0EBIQMgAUEBaiIBQR52IAFBAXRzIQRBBCEAIAFBAnZBBGohAiAGQgF8IgZCFFINAAtC/////w8hBkF/IQEDQCADQQdxQQhyQQggAGsiAnQhAyAArUIghiAGhCEHQQAhAANAIAAgA2pBA3RBqJcBaiAHNwIAIABBAWoiACACdkUNAAsgAUEQdCEAIAFBAWshASAGQgF9IQYgAEGAgARrIgBBH3UgAEEPdXMiA0EDdUEEaiIAQQlJDQALQQAhAUGopwFBAEGAEBAbIQVBBSECQgAhBkEAIQQDQCAEQQ9xQRByQQggAmsiA3QhBCACrUIghiAGhCEHQQAhAANAIAAgBGpBA3QgBWogBzcCACAAQQFqIgAgA3ZFDQALQQEhAyABQQFqIgFBHnYgAUEBdHMhBEEFIQAgAUEDdkEFaiECIAZCAXwiBkIgUg0AC0L/////DyEGQX8hAQNAIANBD3FBEHJBCCAAayICdCEDIACtQiCGIAaEIQdBACEAA0AgACADakEDdEGopwFqIAc3AgAgAEEBaiIAIAJ2RQ0ACyABQRB0IQAgAUEBayEBIAZCAX0hBiAAQYCABGsiAEEfdSAAQQ91cyIDQQR1QQVqIgBBCUkNAAtBACEBQai3AUEAQYAQEBshBUEGIQJCACEGQQAhBANAIARBH3FBIHJBCCACayIDdCEEIAKtQiCGIAaEIQdBACEAA0AgACAE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ADYCGCADQgA3AhACQCABIAJsIgFFBEAgA0IANwIcIANBADYCJAwBCyABQQBIDQMgAyABEBoiAjYCECADIAEgAmoiBDYCGCACQQAgARAbGiADQQA2AiQgA0IANwIcIAMgBDYCFCADIAEQGiICNgIcIAMgASACaiIENgIkIAJBACABEBsaIAMgBDYCIAsgAyAGNwIsIANBfyAAKAIMdEF/czYCNCADDwsgACgCDEEIRgRAAkACQAJAAkAgA0EBaw4DAAECAwtBOBAaIQMgASkCACEGIAMgAjYCDCADIAU2AgggAyAENgIEIANB0DI2AgAgACgCECEBIAAoAgQhACADQQA2AhggA0IANwIQAkAgACABbCIARQRAIANCADcCHCADQQA2AiQMAQsgAEEASA0GIAMgABAaIgE2AhAgAyAAIAFqIgI2AhggAUEAIAAQGxogA0EANgIkIANCADcCHCADIAI2AhQgAyAAEBoiATYCHCADIAAgAWoiAjYCJCABQQAgABAbGiADIAI2AiALDAYLQTgQGiEDIAEpAgAhBiADIAI2AgwgAyAFNgIIIAMgBDYCBCADQawzNgIAIAAoAhAhASAAKAIEIQAgA0EANgIYIANCADcCEAJAIAAgAWwiAEUEQCADQgA3AhwgA0EANgIkDAELIABBAEgNBSADIAAQGiIBNgIQIAMgACABaiICNgIYIAFBACAAEBsaIANBADYCJCADQgA3AhwgAyACNgIUIAMgABAaIgE2AhwgAyAAIAFqIgI2AiQgAUEAIAAQGxogAyACNgIgCwwFC0E4EBohAyABKQIAIQYgAyACNgIMIAMgBTYCCCADIAQ2AgQgA0GINDYCACAAKAIQIQEgACgCBCEAIANBADYCGCADQgA3AhACQCAAIAFsIgBFBEAgA0IANwIcIANBADYCJAwBCyAAQQBIDQQgAyAAEBoiATYCECADIAAgAWoiAjYCGCABQQAgABAbGiADQQA2AiQgA0IANwIcIAMgAjYCFCADIAAQGiIBNgIcIAMgACABaiICNgIkIAFBACAAEBsaIAMgAjYCIAsMBAtBCRAZAAtBCBAZAAtBGBAaIQAgASgCACEBIABBADoAFCAAQX8gA3RBf3M2AhAgACACNgIMIABBBDYCCCAAIAE2AgQgAEGgMTYCACAADwsQHgALIANB/wE2AjQgAyAGNwIsIAMLpwgCA38BfgJAAkACQCAAKAIcRQRAIAAoAgwiA0EIRw0BQRAQGiEAIAEoAgAhASAAIAI2AgwgAEEDNgIIIAAgATYCBCAAQbAwNgIAIAAPCyAAQQRqIQQgAEEUaiEFIAAoAiAiA0UEQEE4EBohAyABKQIAIQYgAyACNgIMIAMgBTYCCCADIAQ2AgQgA0H0MTYCACAAKAIQIQEgACgCBCECIANBADYCGCADQgA3AhACQCABIAJsIgFFBEAgA0IANwIcIANBADYCJAwBCyABQQBIDQMgAyABEBoiAjYCECADIAEgAmoiBDYCGCACQQAgARAbGiADQQA2AiQgA0IANwIcIAMgBDYCFCADIAEQGiICNgIcIAMgASACaiIENgIkIAJBACABEBsaIAMgBDYCIAsgAyAGNwIsIANBfyAAKAIMdEF/czYCNCADDwsgACgCDEEIRgRAAkACQAJAAkAgA0EBaw4DAAECAwtBOBAaIQMgASkCACEGIAMgAjYCDCADIAU2AgggAyAENgIEIANB0DI2AgAgACgCECEBIAAoAgQhACADQQA2AhggA0IANwIQAkAgACABbCIARQRAIANCADcCHCADQQA2AiQMAQsgAEEASA0GIAMgABAaIgE2AhAgAyAAIAFqIgI2AhggAUEAIAAQGxogA0EANgIkIANCADcCHCADIAI2AhQgAyAAEBoiATYCHCADIAAgAWoiAjYCJCABQQAgABAbGiADIAI2AiALDAYLQTgQGiEDIAEpAgAhBiADIAI2AgwgAyAFNgIIIAMgBDYCBCADQawzNgIAIAAoAhAhASAAKAIEIQAgA0EANgIYIANCADcCEAJAIAAgAWwiAEUEQCADQgA3AhwgA0EANgIkDAELIABBAEgNBSADIAAQGiIBNgIQIAMgACABaiICNgIYIAFBACAAEBsaIANBADYCJCADQgA3AhwgAyACNgIUIAMgABAaIgE2AhwgAyAAIAFqIgI2AiQgAUEAIAAQGxogAyACNgIgCwwFC0E4EBohAyABKQIAIQYgAyACNgIMIAMgBTYCCCADIAQ2AgQgA0GINDYCACAAKAIQIQEgACgCBCEAIANBADYCGCADQgA3AhACQCAAIAFsIgBFBEAgA0IANwIcIANBADYCJAwBCyAAQQBIDQQgAyAAEBoiATYCECADIAAgAWoiAjYCGCABQQAgABAbGiADQQA2AiQgA0IANwIcIAMgAjYCFCADIAAQGiIBNgIcIAMgACABaiICNgIkIAFBACAAEBsaIAMgAjYCIAsMBAtBCRAZAAtBCBAZAAtBGBAaIQAgASgCACEBIABBADoAFCAAQX8gA3RBf3M2AhAgACACNgIMIABBAzYCCCAAIAE2AgQgAEGgMTYCACAADwsQHgALIANB/wE2AjQgAyAGNwIsIAML6wEBAn9B7CtBkxNB9CtBA0H2K0EEEBRBBBAaIgBBADYCAEEEEBoiAUEANgIAQewrQYYVQdDiAEH5K0EFIABB0OIAQf0rQQYgARADQQQQGiIAQQI2AgBBBBAaIgFBAjYCAEHsK0HxDEHQ4gBB+StBBSAAQdDiAEH9K0EGIAEQA0EEEBoiAEEENgIAQQQQGiIBQQQ2AgBB7CtB8xhBrOIAQfkrQQcgAEGs4gBB/StBCCABEANBBBAaIgBBBTYCAEEEEBoiAUEFNgIAQewrQfgLQaziAEH5K0EHIABBrOIAQf0rQQggARADQewrEBALJAAgACgCBCABIAAoAgggAmwQIhogACAAKAIEIAAoAgxqNgIEC6cIAgN/AX4CQAJAAkAgACgCHEUEQCAAKAIMIgNBCEcNAUEQEBohACABKAIAIQEgACACNgIMIABBATYCCCAAIAE2AgQgAEGwMDYCACAADwsgAEEEaiEEIABBFGohBSAAKAIgIgNFBEBBOBAaIQMgASkCACEGIAMgAjYCDCADIAU2AgggAyAENgIEIANB9DE2AgAgACgCECEBIAAoAgQhAiADQQA2AhggA0IANwIQAkAgASACbCIBRQRAIANCADcCHCADQQA2AiQMAQsgAUEASA0DIAMgARAaIgI2AhAgAyABIAJqIgQ2AhggAkEAIAEQGxogA0EANgIkIANCADcCHCADIAQ2AhQgAyABEBoiAjYCHCADIAEgAmoiBDYCJCACQQAgARAbGiADIAQ2AiALIAMgBjcCLCADQX8gACgCDHRBf3M2AjQgAw8LIAAoAgxBCEYEQAJAAkACQAJAIANBAWsOAwABAgMLQTgQGiEDIAEpAgAhBiADIAI2AgwgAyAFNgIIIAMgBDYCBCADQdAyNgIAIAAoAhAhASAAKAIEIQAgA0EANgIYIANCADcCEAJAIAAgAWwiAEUEQCADQgA3AhwgA0EANgIkDAELIABBAEgNBiADIAAQGiIBNgIQIAMgACABaiICNgIYIAFBACAAEBsaIANBADYCJCADQgA3AhwgAyACNgIUIAMgABAaIgE2AhwgAyAAIAFqIgI2AiQgAUEAIAAQGxogAyACNgIgCwwGC0E4EBohAyABKQIAIQYgAyACNgIMIAMgBTYCCCADIAQ2AgQgA0GsMzYCACAAKAIQIQEgACgCBCEAIANBADYCGCADQgA3AhACQCAAIAFsIgBFBEAgA0IANwIcIANBADYCJAwBCyAAQQBIDQUgAyAAEBoiATYCECADIAAgAWoiAjYCGCABQQAgABAbGiADQQA2AiQgA0IANwIcIAMgAjYCFCADIAAQGiIBNgIcIAMgACABaiICNgIkIAFBACAAEBsaIAMgAjYCIAsMBQtBOBAaIQMgASkCACEGIAMgAjYCDCADIAU2AgggAyAENgIEIANBiDQ2AgAgACgCECEBIAAoAgQhACADQQA2AhggA0IANwIQAkAgACABbCIARQRAIANCADcCHCADQQA2AiQMAQsgAEEASA0EIAMgABAaIgE2AhAgAyAAIAFqIgI2AhggAUEAIAAQGxogA0EANgIkIANCADcCHCADIAI2AhQgAyAAEBoiATYCHCADIAAgAWoiAjYCJCABQQAgABAbGiADIAI2AiALDAQLQQkQGQALQQgQGQALQRgQGiEAIAEoAgAhASAAQQE6ABQgAEF/IAN0QX9zNgIQIAAgAjYCDCAAQQE2AgggACABNgIEIABBoDE2AgAgAA8LEB4ACyADQf8BNgI0IAMgBjcCLCADCzcBAX9BCBBBIgFB9OQANgIAIAFBvOUANgIAIAFBBGogABBlIAFBgOYANgIAIAFBoOYAQR0QBwALNQEBfyABIAAoAgQiAkEBdWohASAAKAIAIQAgASACQQFxBH8gASgCACAAaigCAAUgAAsRAgALHAAgACABQQggAqcgAkIgiKcgA6cgA0IgiKcQEQsHACAAKAIECwsAIAAQURogABAfCycBAX8gACgCAEEMayIAIAAoAghBAWsiATYCCCABQQBIBEAgABAfCwsUACAAQbzlADYCACAAQQRqEFAgAAuaAQAgAEEBOgA1AkAgACgCBCACRw0AIABBAToANAJAIAAoAhAiAkUEQCAAQQE2AiQgACADNgIYIAAgATYCECADQQFHDQIgACgCMEEBRg0BDAILIAEgAkYEQCAAKAIYIgJBAkYEQCAAIAM2AhggAyECCyAAKAIwQQFHDQIgAkEBRg0BDAILIAAgACgCJEEBajYCJAsgAEEBOgA2CwtMAQF/AkAgAUUNACABQZzhABAnIgFFDQAgASgCCCAAKAIIQX9zcQ0AIAAoAgwgASgCDEEAECRFDQAgACgCECABKAIQQQAQJCECCyACC10BAX8gACgCECIDRQRAIABBATYCJCAAIAI2AhggACABNgIQDwsCQCABIANGBEAgACgCGEECRw0BIAAgAjYCGA8LIABBAToANiAAQQI2AhggACAAKAIkQQFqNgIkCws5AANAQdD2AigCACIABEBB0PYCIAAoAgg2AgAgACgCBCAAKAIAEQAAIAAQHwwBCwtByfYCQQA6AAALBQAQBQALCwAgABA4GiAAEB8L8QQBCH8jAEGQCGsiBCQAQYDwAigCACEIAkACQAJAAn8gBEEQaiEDQZzxAigCACgCFBogAkEAIAJBmQFNG0EBdEGw1gBqLwEAQa3HAGoiARAsIgVBgAhPBEAgAyABQf8HECIaIANBADoA/wdBxAAMAQsgAyABIAVBAWoQIhpBAAsiAUEBag4CAAIBC0GA8AIoAgAhAQtBjyshAyABQRxGDQAQBQALIAMtAABFBEAgBCACNgIAIwBBEGsiByQAIAcgBDYCDEEAIQUjAEGgAWsiASQAIAFB/wc2ApQBIAEgBEEQaiIDNgKQASABQQBBkAEQGyIBQX82AkwgAUGWATYCJCABQX82AlAgASABQZ8BajYCLCABIAFBkAFqNgJUIANBADoAACMAQdABayICJAAgAiAENgLMASACQaABaiIGQQBBKBAbGiACIAIoAswBNgLIAQJAQQAgAkHIAWogAkHQAGogBhBhQQBIDQAgASgCTEEATiEJIAEoAgAhBiABKAJIQQBMBEAgASAGQV9xNgIACwJ/AkACQCABKAIwRQRAIAFB0AA2AjAgAUEANgIcIAFCADcDECABKAIsIQUgASACNgIsDAELIAEoAhANAQtBfyABEGQNARoLIAEgAkHIAWogAkHQAGogAkGgAWoQYQshCiAFBH8gAUEAQQAgASgCJBEEABogAUEANgIwIAEgBTYCLCABQQA2AhwgASgCFBogAUIANwMQQQAFIAoLGiABIAEoAgAgBkEgcXI2AgAgCUUNAAsgAkHQAWokACABQaABaiQAIAdBEGokAAtBgPACIAg2AgAgACADEFkaIARBkAhqJAALggIBBH8jAEEQayIFJAAgARAsIQIjAEEQayIDJAACQCACQe////8HTQRAAkAgAkELSQRAIAAgAC0AC0GAAXEgAnI6AAsgACAALQALQf8AcToACyAAIQQMAQsgA0EIaiAAIAJBC08EfyACQRBqQXBxIgQgBEEBayIEIARBC0YbBUEKC0EBahBcIAMoAgwaIAAgAygCCCIENgIAIAAgACgCCEGAgICAeHEgAygCDEH/////B3FyNgIIIAAgACgCCEGAgICAeHI2AgggACACNgIECyAEIAEgAhA5IANBADoAByACIARqIAMtAAc6AAAgA0EQaiQADAELEDYACyAFQRBqJAAgAAupAgEBf0GULEGwLEHULEEAQdwrQQlB5CxBAEHkLEEAQccSQfYrQQoQD0GULEEBQegsQdwrQQtBDBAOQQgQGiIAQQA2AgQgAEENNgIAQZQsQcQRQQNB7CxBlC1BDiAAQQAQAkEIEBoiAEEANgIEIABBDzYCAEGULEHVEUECQcAtQfkrQRAgAEEAEAJBCBAaIgBBADYCBCAAQRE2AgBBlCxB4RlBAkHMLUHULUESIABBABACQQgQGiIAQQA2AgQgAEETNgIAQZQsQZATQQJBkC5B+StBFCAAQQAQAkEIEBoiAEEANgIEIABBFTYCAEGULEHoGUECQZguQfkrQRYgAEEAEAJBCBAaIgBBADYCBCAAQRc2AgBBlCxBhw1BAkGgLkH5K0EYIABBABACC7kEAQh/IwBBEGsiByQAAkAgAiAALQALQQd2BH8gACgCCEH/////B3FBAWsFQQoLIgYCfyAALQALQQd2BEAgACgCBAwBCyAALQALQf8AcQsiA2tNBEAgAkUNAQJ/IAAtAAtBB3YEQCAAKAIADAELIAALIgYgA2ogASACEDkgAiADaiEBAkAgAC0AC0EHdgRAIAAgATYCBAwBCyAAIAAtAAtBgAFxIAFyOgALIAAgAC0AC0H/AHE6AAsLIAdBADoADyABIAZqIActAA86AAAMAQsgACEFIwBBEGsiBCQAAkAgAyIAIAJqIAZrIgMgBkF/c0Hv////B2pNBEACfyAFLQALQQd2BEAgBSgCAAwBCyAFCyEIIAQgBSAGQef///8DSQR/IAQgBkEBdDYCDCAEIAMgBmo2AgAjAEEQayIJJAAgBCgCACAEQQxqIgooAgBJIQMgCUEQaiQAIAogBCADGygCACIDQQtPBH8gA0EQakFwcSIDIANBAWsiAyADQQtGGwVBCgtBAWoFQe////8HCxBcIAQoAgAhAyAEKAIEGiAABEAgAyAIIAAQOQsgAgRAIAAgA2ogASACEDkLQQAhASAGQQpHBEAgCBAfCyAFIAM2AgAgBSAFKAIIQYCAgIB4cSAEKAIEQf////8HcXI2AgggBSAFKAIIQYCAgIB4cjYCCCAFIAAgAmogAWoiADYCBCAEQQA6AAwgACADaiAELQAMOgAAIARBEGokAAwBCxA2AAsLIAdBEGokAAsWACACEBohASAAIAI2AgQgACABNgIAC4oFAgZ+An8gASABKAIAQQdqQXhxIgFBEGo2AgAgACEJIAEpAwAhAyABKQMIIQYjAEEgayIIJAACQCAGQv///////////wCDIgRCgICAgICAwIA8fSAEQoCAgICAgMD/wwB9VARAIAZCBIYgA0I8iIQhBCADQv//////////D4MiA0KBgICAgICAgAhaBEAgBEKBgICAgICAgMAAfCECDAILIARCgICAgICAgIBAfSECIANCgICAgICAgIAIUg0BIAIgBEIBg3whAgwBCyADUCAEQoCAgICAgMD//wBUIARCgICAgICAwP//AFEbRQRAIAZCBIYgA0I8iIRC/////////wODQoCAgICAgID8/wCEIQIMAQtCgICAgICAgPj/ACECIARC////////v//DAFYNAEIAIQIgBEIwiKciAEGR9wBJDQAgAyECIAZC////////P4NCgICAgICAwACEIgUhBwJAIABBgfcAayIBQcAAcQRAIAIgAUFAaq2GIQdCACECDAELIAFFDQAgByABrSIEhiACQcAAIAFrrYiEIQcgAiAEhiECCyAIIAI3AxAgCCAHNwMYAkBBgfgAIABrIgBBwABxBEAgBSAAQUBqrYghA0IAIQUMAQsgAEUNACAFQcAAIABrrYYgAyAArSICiIQhAyAFIAKIIQULIAggAzcDACAIIAU3AwggCCkDCEIEhiAIKQMAIgNCPIiEIQIgCCkDECAIKQMYhEIAUq0gA0L//////////w+DhCIDQoGAgICAgICACFoEQCACQgF8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IAQgAkEDbGoiBy0AAiEKIActAAEhCSABIAJqIActAAAgBXE6AAAgASACIANqaiAFIAlxOgAAIAEgAiAGamogBSAKcToAACACQQFqIgIgCEcNAAsMAQsCQAJAIAAoAggoAghBAWsOAgEAAgsgAkUNASAAKAI0IQNBACEHA0AgASAHQQJ0IgVqIAMgBCAFaiIFLQACcUEQdCADIAUtAAFxQQh0ciADIAUtAABxciAFLQADIANxQRh0cjYAACAHQQFqIgcgAkcNAAsMAQsgAiADIAIgA0kbIghFDQAgA0EDbCEGIANBAXQhCiAAKAI0IQVBACECA0AgBCACQQJ0aiIHLQADIQkgBy0AAiELIActAAEhDCABIAJqIActAAAgBXE6AAAgASACIANqaiAFIAxxOgAAIAEgAiAKamogBSALcToAACABIAIgBmpqIAUgCXE6AAAgAkEBaiICIAhHDQALCyAAIAAoAiwgACgCDGo2AiwLggEBA39BpSoQLCIBQfD///8HSQRAAkACQCABQQtPBEAgAUEPckEBaiICEBohAyAAIAJBgICAgHhyNgIIIAAgAzYCACAAIAE2AgQgASADaiECIAMhAAwBCyAAIAE6AAsgACABaiECIAFFDQELIABBpSogARAoGgsgAkEAOgAADwsQNgALkQcBCn8gACgCLCEFAkACQAJAIAAoAgQoAgxBA2sOAgABAgsgACgCCCgCCEECRgRAIAJFDQIgAkEBRwRAIAJBfnEhCEEAIQMDQCABIARBA2wiB2oiBi8AACEJIAUgB2oiByAGLQACOgACIAcgCTsAACABIARBAXJBA2wiB2oiBi8AACEJIAUgB2oiByAGLQACOgACIAcgCTsAACAEQQJqIQQgA0ECaiIDIAhHDQALCyACQQFxRQ0CIAEgBEEDbCIDaiIBLwAAIQQgAyAFaiIDIAEtAAI6AAIgAyAEOwAADAILIAMgAiACIANLGyIIRQ0BIANBAXQhByAIQQFHBEAgCEF+cSEMA0AgASAEai0AACEKIAEgAyAEamotAAAhCyAFIARBA2xqIgYgASAEIAdqai0AADoAAiAGIAs6AAEgBiAKOgAAIAEgBEEBciIGai0AACELIAEgAyAGamotAAAhDSAFIAZBA2xqIgogASAGIAdqai0AADoAAiAKIA06AAEgCiALOgAAIARBAmohBCAJQQJqIgkgDEcNAAsLIAhBAXFFDQEgASAEai0AACEIIAEgAyAEamotAAAhBiAFIARBA2xqIgMgASAEIAdqai0AADoAAiADIAY6AAEgAyAIOgAADAELAkACQCAAKAIIKAIIQQFrDgIBAAILIAJFDQEDQCAFIARBAnQiA2ogASADaigAADYAACAEQQFqIgQgAkcNAAsMAQsgAyACIAIgA0sbIghFDQAgA0EDbCEHIANBAXQhBgNAIAUgBEECdGogASAEai0AACABIAMgBGpqLQAAQQh0ciABIAQgBmpqLQAAQRB0ciABIAQgB2pqLQAAQRh0cjYAACAEQQFqIgQgCEcNAAsLAkAgACgCCC0AEEUNACACRQ0AIAAoAgQoAgwhASACQQRPBEAgAkF8cSEIQQAhBANAIAUtAAIhAyAFIAUtAAA6AAIgBSADOgAAIAEgBWoiAy0AAiEFIAMgAy0AADoAAiADIAU6AAAgASADaiIDLQACIQUgAyADLQAAOgACIAMgBToAACABIANqIgMtAAIhBSADIAMtAAA6AAIgAyAFOgAAIAEgA2ohBSAEQQRqIgQgCEcNAAsLIAJBA3EiAkUNAEEAIQQDQCAFLQACIQMgBSAFLQAAOgACIAUgAzoAACABIAVqIQUgBEEBaiIEIAJHDQALCyAAIAAoAiwgACgCDGo2AiwLygMBB38gACgCBCEEAkAgAC0AFARAIAJFDQEgAkEDcSEGQQAhAyACQQRPBEAgAkF8cSEIQQAhAgNAIAEgA2ogAyAEai0AACAALQAQcToAACABIANBAXIiB2ogBCAHai0AACAALQAQcToAACABIANBAnIiB2ogBCAHai0AACAALQAQcToAACABIANBA3IiB2ogBCAHai0AACAALQAQcToAACADQQRqIQMgAkEEaiICIAhHDQALCyAGBEADQCABIANqIAMgBGotAAAgAC0AEHE6AAAgA0EBaiEDIAVBAWoiBSAGRw0ACwsgACgCBCEEDAELIAJFDQAgACgCECEGQQAhAyACQQRPBEAgAkF8cSEKA0AgASADQQF0IgVqIAQgBWovAQAgBnE7AQAgASAFQQJyIglqIAQgCWovAQAgBnE7AQAgASAFQQRyIglqIAQgCWovAQAgBnE7AQAgASAFQQZyIgVqIAQgBWovAQAgBnE7AQAgA0EEaiEDIAdBBGoiByAK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IABCADcCTCAEKAIAIQEgAEIANwJoIAAgATYCVCAAQgA3AlggAEIANwBdIABB8ABqIQNBACEBA0AgAyABQQR0aiICQoCAgIAQNwIIIAJCADcCACABQQFyIgJB7QJHBEAgAyACQQR0aiICQoCAgIAQNwIIIAJCADcCACABQQJqIQEMAQsLIABCADcCwC4gAEHULmpBATsBACAAQcwuakIANwIAIABByC5qQQE7AQAgAEHYLmoMAgsgBSgCACILDQBBACELAkACQAJAIAQoAghBCGsOCQADAwMBAwMDAgMLQfQuEBohACAEKAIMIQEgACAEKAIINgIMIAAgBCkCADcCBCAAIAFBASAHGzYCECAAIAUpAgA3AhQgACAFKQIINwIcIAAgBSgCEDYCJCAAQgA3AiggAEIANwIwIABCADcCOCAAQgA3AkQgAEG8OzYCACAAQgA3AkwgBCgCACEBIABCADcCaCAAIAE2AlQgAEIANwJYIABCADcAXSAAQfAAaiEDQQAhAQNAIAMgAUEEdGoiAkKAgICAEDcCCCACQgA3AgAgAUEBciICQe0CRwRAIAMgAkEEdGoiAkKAgICAEDcCCCACQgA3AgAgAUECaiEBDAELCyAAQgA3AsAuIABB1C5qQQE7AQAgAEHMLmpCADcCACAAQcguakEBOwEAIABB2C5qDAMLQfQuEBohACAEKAIMIQEgACAEKAIINgIMIAAgBCkCADcCBCAAIAFBASAHGzYCECAAIAUpAgA3AhQgACAFKQIINwIcIAAgBSgCEDYCJCAAQgA3AiggAEIANwIwIABCADcCOCAAQgA3AkQgAEGsPDYCACAAQgA3AkwgBCgCACEBIABCADcCaCAAIAE2AlQgAEIANwJYIABCADcAXSAAQfAAaiEDQQAhAQNAIAMgAUEEdGoiAkKAgICAEDcCCCACQgA3AgAgAUEBciICQe0CRwRAIAMgAkEEdGoiAkKAgICAEDcCCCACQgA3AgAgAUECaiEBDAELCyAAQgA3AsAuIABB1C5qQQE7AQAgAEHMLmpCADcCACAAQcguakEBOwEAIABB2C5qDAILQfQuEBohACAEKAIMIQEgACAEKAIINgIMIAAgBCkCADcCBCAAIAFBASAHGzYCECAAIAUpAgA3AhQgACAFKQIINwIcIAAgBSgCEDYCJCAAQgA3AiggAEIANwIw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KAIIEAsgAigCCCIAEAggAkEQaiQAIAALzQIBA38jAEEQayIDJABBpOcALQAARQRAQaTnAEEBOgAAQYDnAEHKCBAMNgIAQcj2Ai0AAEUEQAJ/A0AgAkHA8QJqLQAARQRAIAJBwPECakEBOgAAIAJBAnRBwPICakEANgIAQcz2AiACNgIAQQAMAgsgAkEBaiICQYABRw0AC0EGCwRAEFYAC0HI9gJBAToAAAsCQEHJ9gItAABFBEBBHCECAkBBzPYCKAIAIgRB/wBLDQAgBEHA8QJqLQAARQ0AIARBAnRBwPICakHM9gI2AgBBACECCyACDQFByfYCQQE6AAALQQwQLiICRQ0AIAJBADYCBCACQRk2AgAgAkHQ9gIoAgA2AghB0PYCIAI2AgALCyABKAIQIQIgAyABKAIMIgE2AgwgAyACIAFrNgIIIABBgOcAKAIAQQFByC0gA0EIahAYNgIAIANBEGokAAteAQJ/IwBBEGsiAyQAIAEgACgCBCIEQQF1aiEBIAAoAgAhACADQQhqIAEgAiAEQQFxBH8gASgCACAAaigCAAUgAAsRAwAgAygCCBALIAMoAggiABAIIANBEGokACAAC40BAQN/IAEgASgCACgCCBECACIEECwiAkHw////B0kEQAJAAkAgAkELTwRAIAJBD3JBAWoiAxAaIQEgACADQYCAgIB4cjYCCCAAIAE2AgAgACACNgIEIAEgAmohAyABIQAMAQsgACACOgALIAAgAmohAyACRQ0BCyAAIAQgAhAoGgsgA0EAOgAADwsQNgALhAIBBn8jAEEQayIHJAACQAJAIAECfyACIAEoAgQiAyABKAIAIgVrIgRLBEAgAiAEayIIIAEoAggiBiADa00EQCADQQAgCBAbIAhqDAILIAJBAEgNA0H/////ByAGIAVrIgNBAXQiBiACIAIgBkkbIANB/////wNPGyIDEBoiBiAEakEAIAgQGxogASAGIAUgBBAoIgQgA2o2AgggASACIARqIgM2AgQgASAENgIAIAVFDQIgBRAfIAEoAgQhAwwCCyACIARPDQEgAiAFagsiAzYCBAsgByABKAIAIgE2AgwgByADIAFrNgIIIABBuC0gB0EIahANNgIAIAdBEGokAA8LEB4ACx8BAX9BKBAaIgBCADcCACAAQgA3AhAgAEIANwIIIAALEAAjACAAa0Fw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IG1vZGUgaXMgbm90IE5vbmUsIFNhbXBsZSwgTGluZSkgb3IgaW52YWxpZCBpbiBjb21iaW5hdGlvbiB3aXRoIGNvbXBvbmVudCBjb3VudABUaGUgYXJndW1lbnQgZm9yIHRoZSBjb2xvciBjb21wb25lbnQgaXMgbm90IChOb25lLCBIcDEsIEhwMiwgSHAzKSBvciBpbnZhbGlkIGluIGNvbWJpbmF0aW9uIHdpdGggY29tcG9uZW50IGNvdW50AGNvbXBvbmVudENvdW50AHVuc2lnbmVkIGludABJbnZhbGlkIGFyZ3VtZW50AEludmFsaWQgSlBFRy1MUyBzdHJlYW06IGR1cGxpY2F0ZSBjb21wb25lbnQgaWRlbnRpZmllciBpbiB0aGUgKFNPRikgc2VnbWVudABoZWlnaHQAZmxvYXQAdWludDY0X3QAZ2V0TmVhckxvc3NsZXNzAFN1Y2Nlc3MAY2hhcmxzOjpqcGVnbHMASW52YWxpZCBKUEVHLUxTIHN0cmVhbTogSlBFRy1MUyBwcmVzZXQgcGFyYW1ldGVycyBzZWdtZW50IGNvbnRhaW5zIGludmFsaWQgdmFsdWVzAHZlY3RvcgBJbnZhbGlkIEpQRUctTFMgc3RyZWFtOiBtaXNzaW5nIGV4cGVjdGVkIHJlc3RhcnQgKFJUU20pIG1hcmtlcgBJbnZhbGlkIEpQRUctTFMgc3RyZWFtOiBtb3JlIHRoZW4gb25lIFN0YXJ0IE9mIEltYWdlIChTT0kpIG1hcmtlcgBJbnZhbGlkIEpQRUctTFMgc3RyZWFtOiBmaXJzdCBKUEVHIG1hcmtlciBpcyBub3QgYSBTdGFydCBPZiBJbWFnZSAoU09JKSBtYXJrZXIASW52YWxpZCBKUEVHLUxTIHN0cmVhbTogbWlzc2luZyBFbmQgT2YgSW1hZ2UgKEVPSSkgbWFya2VyAEludmFsaWQgSlBFRy1MUyBzdHJlYW06IHVuZXhwZWN0ZWQgRW5kIE9mIEltYWdlIChFT0kpIG1hcmtlcgBJbnZhbGlkIEpQRUctTFMgc3RyZWFtOiBtb3JlIHRoZW4gb25lIFN0YXJ0IE9mIEZyYW1lIChTT0YpIG1hcmtlcgBObyBtZW1vcnkgY291bGQgYmUgYWxsb2NhdGVkIGZvciBhbiBpbnRlcm5hbCBidWZmZXIAZ2V0RW5jb2RlZEJ1ZmZlcgBnZXREZWNvZGVkQnVmZmVyAFRoZSBKUEVHLUxTIHN0cmVhbSBpcyBlbmNvZGVkIHdpdGggYSBwYXJhbWV0ZXIgdmFsdWUgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBDaGFyTFMgZGVjb2RlcgBKcGVnTFNEZWNvZGVyAEludmFsaWQgSlBFRy1MUyBzdHJlYW06IGludmFsaWQgU1BJRkYgaGVhZGVyAHVuc2lnbmVkIGNoYXIAZ2V0RnJhbWVJbmZvAFVua25vd24Ac3RkOjpleGNlcHRpb24AZ2V0VmVyc2lvbgBuYW4ASW52YWxpZCBKUEVHLUxTIHN0cmVhbTogdGhlIEpQRUcgc3RyZWFtIGlzIG5vdCBlbmNvZGVkIHdpdGggdGhlIEpQRUctTFMgYWxnb3JpdGhtAHN5c3RlbQBJbnZhbGlkIEpQRUctTFMgc3RyZWFtLCB0aGUgZW5jb2RlZCBiaXQgc3RyZWFtIGNvbnRhaW5zIGEgZ2VuZXJhbCBzdHJ1Y3R1cmFsIHByb2JsZW0AYm9vbABlbXNjcmlwdGVuOjp2YWwAd2lkdGgAdW5zaWduZWQgbG9uZwBzdGQ6OndzdHJpbmcAYmFzaWNfc3RyaW5nAHN0ZDo6c3RyaW5nAHN0ZDo6dTE2c3RyaW5nAHN0ZDo6dTMyc3RyaW5nAGluZgBUaGUgc3RyaWRlIGFyZ3VtZW50IGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIGZyYW1lIGluZm8gYW5kIGJ1ZmZlciBzaXplAFRoZSBlbmNvZGluZyBvcHRpb25zIGFyZ3VtZW50IGhhcyBhbiBpbnZhbGlkIHZhbHVlAE1ldGhvZCBjYWxsIGlzIGludmFsaWQgZm9yIHRoZSBjdXJyZW50IHN0YXRlAENhbGxiYWNrIGZ1bmN0aW9uIHJldHVybmVkIGEgZmFpbHVyZQBJbnZhbGlkIEpQRUctTFMgc3RyZWFtOiBKUEVHLUxTIHByZXNldCBwYXJhbWV0ZXJzIHNlZ21lbnQgY29udGFpbnMgYW4gaW52YWxpZCB0eXBlAFVuc3VwcG9ydGVkIEpQRUctTFMgc3RyZWFtOiBKUEVHLUxTIHByZXNldCBwYXJhbWV0ZXJzIHNlZ21lbnQgY29udGFpbnMgYW4gSlBFRy1MUyBFeHRlbmRlZCAoSVNPL0lFQyAxNDQ5NS0yKSB0eXBlAGJpdHNQZXJTYW1wbGUAZG91YmxlAFRoZSBhcmd1bWVudCBmb3IgdGhlIGVudHJ5IHNpemUgcGFyYW1ldGVyIGlzIG91dHNpZGUgdGhlIHZhbGlkIHJhbmdlAGdldEV4Y2VwdGlvbk1lc3NhZ2UAZGVjb2RlAGdldEludGVybGVhdmVNb2RlAEludmFsaWQgSlBFRy1MUyBzdHJlYW06IHRoZSBsZWFkaW5nIHN0YXJ0IGJ5dGUgKDB4RkYpIGZvciBhIEpQRUcgbWFya2VyIHdhcyBub3QgZm91bmQASW52YWxpZCBKUEVHLUxTIHN0cmVhbTogYW4gdW5rbm93biBKUEVHIG1hcmtlciBjb2RlIHdhcyBmb3VuZABJbnZhbGlkIEpQRUctTFMgc3RyZWFtOiB1bmV4cGVjdGVkIG1hcmtlciBmb3VuZAB2b2lkAEludmFsaWQgSlBFRy1MUyBzdHJlYW06IHNlZ21lbnQgc2l6ZSBvZiBhIG1hcmtlciBzZWdtZW50IGlzIGludmFsaWQAVGhlIGFyZ3VtZW50IGZvciB0aGUgSlBFRy1MUyBwcmVzZXQgY29kaW5nIHBhcmFtZXRlcnMgaXMgbm90IHZhbGlkAFRoZSBiaXQgZGVwdGggZm9yIHRoZSB0cmFuc2Zvcm1hdGlvbiBpcyBub3Qgc3VwcG9ydGVkAFRoZSBjb2xvciB0cmFuc2Zvcm0gaXMgbm90IHN1cHBvcnRlZABUaGUgc291cmNlIGJ1ZmZlciBpcyB0b28gc21hbGwsIG1vcmUgaW5wdXQgZGF0YSB3YXMgZXhwZWN0ZWQAQW4gdW5leHBlY3RlZCBpbnRlcm5hbCBmYWlsdXJlIG9jY3VycmVkAEludmFsaWQgSlBFRy1MUyBzdHJlYW06IHRoZSBoZWlnaHQgKE51bWJlciBvZiBsaW5lcykgaXMgYWxyZWFkeSBkZWZpbmVkAEludmFsaWQgSlBFRy1MUyBzdHJlYW06IHRoZSB3aWR0aCAoTnVtYmVyIG9mIHNhbXBsZXMgcGVyIGxpbmUpIGlzIGFscmVhZHkgZGVmaW5lZABVbmtub3duIGVycm9yICVkAHN0ZDo6YmFkX2FsbG9jAGdlbmVyaWMASW52YWxpZCBKUEVHLUxTIHN0cmVhbTogcmVzdGFydCAoUlRTbSkgbWFya2VyIGZvdW5kIG91dHNpZGUgZW5jb2RlZCBlbnRyb3B5IGRhdGEASW52YWxpZCBKUEVHLUxTIHN0cmVhbSwgdGhlIGRlY29kaW5nIHByb2Nlc3MgaXMgcmVhZHkgYnV0IHRoZSBzb3VyY2UgYnVmZmVyIHN0aWxsIGNvbnRhaW5zIGVuY29kZWQgZGF0YQBJbnZhbGlkIEpQRUctTFMgc3RyZWFtOiB0aGUgYml0IHBlciBzYW1wbGUgKHNhbXBsZSBwcmVjaXNpb24pIHBhcmFtZXRlciBpcyBub3QgaW4gdGhlIHJhbmdlIFsyLCAxNl0AVGhlIGJpdCBwZXIgc2FtcGxlIGFyZ3VtZW50IGlzIG91dHNpZGUgdGhlIHJhbmdlIFsyLCAxNl0AVGhlIGNvbXBvbmVudCBjb3VudCBhcmd1bWVudCBpcyBvdXRzaWRlIHRoZSByYW5nZSBbMSwgMjU1XQBJbnZhbGlkIEpQRUctTFMgc3RyZWFtOiBjb21wb25lbnQgY291bnQgaW4gdGhlIFNPRiBzZWdtZW50IGlzIG91dHNpZGUgdGhlIHJhbmdlIFsxLCAyNTVdAFRoZSBuZWFyIGxvc3NsZXNzIGFyZ3VtZW50IGlzIG91dHNpZGUgdGhlIHJhbmdlIFswLCAyNTVdAFRoZSBoZWlnaHQgYXJndW1lbnQgaXMgb3V0c2lkZSB0aGUgc3VwcG9ydGVkIHJhbmdlIFsxLCA2NTUzNV0AVGhlIHdpZHRoIGFyZ3VtZW50IGlzIG91dHNpZGUgdGhlIHN1cHBvcnRlZCByYW5nZSBbMSwgNjU1MzVdAEludmFsaWQgSlBFRy1MUyBzdHJlYW06IG5lYXItbG9zc2xlc3MgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgWzAsIG1pbigyNTUsIE1BWFZBTC8yKV0ATkFOAElORgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDhfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MTZfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MTZfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGNoYXI+AHN0ZDo6YmFzaWNfc3RyaW5nPHVuc2lnbmVkIGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+ADIuNC4xAC4AKG51bGwpAHN0ZDo6X19saWJjcHBfdGxzX2NyZWF0ZSgpIGZhaWxlZCBpbiBfX2N4YV90aHJlYWRfYXRleGl0KCkAUHVyZSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxlZCEAOiAA1BUAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAADAMQAAlBUAAGlpADlGcmFtZUluZm8AAADAMQAA3xUAAGkAdmkAaWlpAHZpaWkAMTNKcGVnTFNEZWNvZGVyAAAAwDEAAAIWAABQMTNKcGVnTFNEZWNvZGVyAAAAAEQyAAAcFgAAAAAAABQWAABQSzEzSnBlZ0xTRGVjb2RlcgAAAEQyAABAFgAAAQAAABQWAAB2AAAAMBYAAIwWAAAwFgAAgDEAAE4xMGVtc2NyaXB0ZW4zdmFsRQAAwDEAAHgWAABpaWlpAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWhFRQDAMQAAmRYAAIwWAAAwFgAAuBYAAPwwAAAwFgAAdmlpAE42Y2hhcmxzMTJqcGVnbHNfZXJyb3JFAOgxAADYFgAAbC8AAAAAAADwFgAAHAAAACQAAAAlAAAA7BUAAFQWAAAsMQAAVBYAAFwxAABUFgAA1BUAAHQxAAAAAAAAcBcAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAABONmNoYXJsczE1anBlZ2xzX2NhdGVnb3J5RQAA6DEAAFQXAADILgAAAAAAAAAYAAAyAAAAMwAAADQAAAA1AAAANgAAAE42Y2hhcmxzOWpsc19jb2RlY0lOU18xNGRlZmF1bHRfdHJhaXRzSWhoRUVOU18xNmRlY29kZXJfc3RyYXRlZ3lFRUUATjZjaGFybHMxNmRlY29kZXJfc3RyYXRlZ3lFAMAxAADcFwAA6DEAAJgXAAD4FwAAAAAAAPgXAAA3AAAAOAAAADkAAAA5AAAAOQAAAAAAAACMGAAAOgAAADsAAAA8AAAAPQAAAE42Y2hhcmxzMjlwb3N0X3Byb2Nlc3Nfc2luZ2xlX2NvbXBvbmVudEUATjZjaGFybHMxMnByb2Nlc3NfbGluZUUAAAAAwDEAAGkYAADoMQAAQBgAAIQYAAAAAAAA4BgAADoAAAA+AAAAPwAAAEAAAABONmNoYXJsczM2cG9zdF9wcm9jZXNzX3NpbmdsZV9jb21wb25lbnRfbWFza2VkRQDoMQAAsBgAAIQYAAAAAAAAPBkAAEEAAABCAAAAQwAAAEQAAABONmNoYXJsczE5cHJvY2Vzc190cmFuc2Zvcm1lZElOU18xNHRyYW5zZm9ybV9ub25lSWhFRUVFAOgxAAAEGQAAhBgAAAAAAACYGQAARQAAAEYAAABHAAAASAAAAE42Y2hhcmxzMTlwcm9jZXNzX3RyYW5zZm9ybWVkSU5TXzEzdHJhbnNmb3JtX2hwMUloRUVFRQAA6DEAAGAZAACEGAAAAAAAAPQZAABJAAAASgAAAEsAAABMAAAATjZjaGFybHMxOXByb2Nlc3NfdHJhbnNmb3JtZWRJTlNfMTN0cmFuc2Zvcm1faHAySWhFRUVFAADoMQAAvBkAAIQYAAAAAAAAUBoAAE0AAABOAAAATwAAAFAAAABONmNoYXJsczE5cHJvY2Vzc190cmFuc2Zvcm1lZElOU18xM3RyYW5zZm9ybV9ocDNJaEVFRUUAAOgxAAAYGgAAhBgAQew0C7ohAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAAAAAAAA8GwAAUQAAAFIAAABTAAAAVAAAAFUAAABONmNoYXJsczlqbHNfY29kZWNJTlNfMTRkZWZhdWx0X3RyYWl0c0l0dEVFTlNfMTZkZWNvZGVyX3N0cmF0ZWd5RUVFAOgxAAD4GgAA+BcAAAAAAACYGwAAVgAAAFcAAABYAAAAWQAAAE42Y2hhcmxzMTlwcm9jZXNzX3RyYW5zZm9ybWVkSU5TXzE0dHJhbnNmb3JtX25vbmVJdEVFRUUA6DEAAGAbAACEGAAAAAAAAPQbAABaAAAAWwAAAFwAAABdAAAATjZjaGFybHMxOXByb2Nlc3NfdHJhbnNmb3JtZWRJTlNfMTN0cmFuc2Zvcm1faHAxSXRFRUVFAADoMQAAvBsAAIQYAAAAAAAAUBwAAF4AAABfAAAAYAAAAGEAAABONmNoYXJsczE5cHJvY2Vzc190cmFuc2Zvcm1lZElOU18xM3RyYW5zZm9ybV9ocDJJdEVFRUUAAOgxAAAYHAAAhBgAAAAAAACsHAAAYgAAAGMAAABkAAAAZQAAAE42Y2hhcmxzMTlwcm9jZXNzX3RyYW5zZm9ybWVkSU5TXzEzdHJhbnNmb3JtX2hwM0l0RUVFRQAA6DEAAHQcAACEGAAAAAAAACwdAABmAAAAZwAAAGgAAABpAAAAagAAAE42Y2hhcmxzOWpsc19jb2RlY0lOU18xNWxvc3NsZXNzX3RyYWl0c0lOU183dHJpcGxldEloRUVMaThFRUVOU18xNmRlY29kZXJfc3RyYXRlZ3lFRUUAAADoMQAA1BwAAPgXAAAAAAAAqB0AAGsAAABsAAAAbQAAAG4AAABvAAAATjZjaGFybHM5amxzX2NvZGVjSU5TXzE1bG9zc2xlc3NfdHJhaXRzSU5TXzRxdWFkSWhFRUxpOEVFRU5TXzE2ZGVjb2Rlcl9zdHJhdGVneUVFRQAA6DEAAFQdAAD4FwAAAAAAABgeAABwAAAAcQAAAHIAAABzAAAAdAAAAE42Y2hhcmxzOWpsc19jb2RlY0lOU18xNWxvc3NsZXNzX3RyYWl0c0loTGk4RUVFTlNfMTZkZWNvZGVyX3N0cmF0ZWd5RUVFAOgxAADQHQAA+BcAAAAAAACMHgAAdQAAAHYAAAB3AAAAeAAAAHkAAABONmNoYXJsczlqbHNfY29kZWNJTlNfMTVsb3NzbGVzc190cmFpdHNJdExpMTJFRUVOU18xNmRlY29kZXJfc3RyYXRlZ3lFRUUAAAAA6DEAAEAeAAD4FwAAAAAAAAAfAAB6AAAAewAAAHwAAAB9AAAAfgAAAE42Y2hhcmxzOWpsc19jb2RlY0lOU18xNWxvc3NsZXNzX3RyYWl0c0l0TGkxNkVFRU5TXzE2ZGVjb2Rlcl9zdHJhdGVneUVFRQAAAADoMQAAtB4AAPgXAAAAAAAAfB8AAH8AAACAAAAAgQAAAIIAAACDAAAATjZjaGFybHM5amxzX2NvZGVjSU5TXzE0ZGVmYXVsdF90cmFpdHNJaE5TXzd0cmlwbGV0SWhFRUVFTlNfMTZkZWNvZGVyX3N0cmF0ZWd5RUVFAAAA6DEAACgfAAD4FwAAAAAAAPQfAACEAAAAhQAAAIYAAACHAAAAiAAAAE42Y2hhcmxzOWpsc19jb2RlY0lOU18xNGRlZmF1bHRfdHJhaXRzSWhOU180cXVhZEloRUVFRU5TXzE2ZGVjb2Rlcl9zdHJhdGVneUVFRQAA6DEAAKQfAAD4FwAAAAAAAHAgAACJAAAAigAAAIsAAACMAAAAjQAAAE42Y2hhcmxzOWpsc19jb2RlY0lOU18xNGRlZmF1bHRfdHJhaXRzSXROU183dHJpcGxldEl0RUVFRU5TXzE2ZGVjb2Rlcl9zdHJhdGVneUVFRQAAAOgxAAAcIAAA+BcAAAAAAADoIAAAjgAAAI8AAACQAAAAkQAAAJIAAABONmNoYXJsczlqbHNfY29kZWNJTlNfMTRkZWZhdWx0X3RyYWl0c0l0TlNfNHF1YWRJdEVFRUVOU18xNmRlY29kZXJfc3RyYXRlZ3lFRUUAAOgxAACYIAAA+BcAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0loTlNfMTFjaGFyX3RyYWl0c0loRUVOU185YWxsb2NhdG9ySWhFRUVFAADAMQAA9CAAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0l3TlNfMTFjaGFyX3RyYWl0c0l3RUVOU185YWxsb2NhdG9ySXdFRUVFAADAMQAAPCEAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0lEc05TXzExY2hhcl90cmFpdHNJRHNFRU5TXzlhbGxvY2F0b3JJRHNFRUVFAAAAwDEAAIQhAABOU3QzX18yMTJiYXNpY19zdHJpbmdJRGlOU18xMWNoYXJfdHJhaXRzSURpRUVOU185YWxsb2NhdG9ySURpRUVFRQAAAMAxAADQIQAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJY0VFAADAMQAAHCIAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQAAwDEAAEQiAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lzRUUAAMAxAABsIgAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJdEVFAADAMQAAlCIAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQAAwDEAALwiAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lqRUUAAMAxAADkIgAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJbEVFAADAMQAADCMAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQAAwDEAADQjAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lmRUUAAMAxAABcIwAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZEVFAADAMQAAhCMAAABObyBlcnJvciBpbmZvcm1hdGlvbgBJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBNdWx0aWhvcCBhdHRlbXB0ZWQAUmVxdWlyZWQga2V5IG5vdCBhdmFpbGFibGUAS2V5IGhhcyBleHBpcmVkAEtleSBoYXMgYmVlbiByZXZva2VkAEtleSB3YXMgcmVqZWN0ZWQgYnkgc2VydmljZQBBstYAC5YBpQJbAPABtQWMBSUBgwYdA5QE/wDHAzEDCwa8AY8BfwPKBCsA2gavAEIDTgPcAQ4EFQChBg0BlAILAjgGZAK8Av8CXQPnBAsHzwLLBe8F2wXhAh4GRQKFAIICbANvBPEA8wMYBdkA2gNMBlQCewGdA70EAABRABUCuwCzA20A/wGFBC8F+QQ4AGUBRgGfALcGqAFzAlMBAEH41wALDCEEAAAAAAAAAAAvAgBBmNgACwY1BEcEVgQAQa7YAAsCoAQA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"},12:A=>{"use strict";A.exports="data:application/wasm;base64,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IAIgBkgEQCABIAMgBXM6AAAgAEGAAXMhAAwBCyABIAMgB3M6AAALIABBB3YL8gICAn8BfgJAIAJFDQAgACABOgAAIAAgAmoiA0EBayABOgAAIAJBA0kNACAAIAE6AAIgACABOgABIANBA2sgAToAACADQQJrIAE6AAAgAkEHSQ0AIAAgAToAAyADQQRrIAE6AAAgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBBGsgATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQQhrIAE2AgAgAkEMayABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkEQayABNgIAIAJBFGsgATYCACACQRhrIAE2AgAgAkEcayABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa1CgYCAgBB+IQUgAyAEaiEBA0AgASAFNwMYIAEgBTcDECABIAU3AwggASAFNwMAIAFBIGohASACQSBrIgJBH0sNAAsLIAALCwAgAEEAIAEQJRoLiwICA38CfgJAIAApA3AiBEIAUiAEIAApA3ggACgCBCIBIAAoAiwiAmusfCIFV3FFBEAjAEEQayICJABBfyEBAkAgABB/DQAgACACQQ9qQQEgACgCIBECAEEBRw0AIAItAA8hAQsgAkEQaiQAIAEiA0EATg0BIAAoAgQhASAAKAIsIQILIABCfzcDcCAAIAE2AmggACAFIAIgAWusfDcDeEF/DwsgBUIBfCEFIAAoAgQhASAAKAIIIQICQCAAKQNwIgRQDQAgBCAFfSIEIAIgAWusWQ0AIAEgBKdqIQILIAAgAjYCaCAAIAUgACgCLCIAIAFrrHw3A3ggACABTwRAIAFBAWsgAzoAAAsgAwvFCgIFfw9+IwBB4ABrIgUkACAEQv///////z+DIQwgAiAEhUKAgICAgICAgIB/gyEKIAJC////////P4MiDUIgiCEOIARCMIinQf//AXEhBwJAAkAgAkIwiKdB//8BcSIJQf//AWtBgoB+TwRAIAdB//8Ba0GBgH5LDQELIAFQIAJC////////////AIMiC0KAgICAgIDA//8AVCALQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQoMAgsgA1AgBEL///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhCiADIQEMAgsgASALQoCAgICAgMD//wCFhFAEQCACIAOEUARAQoCAgICAgOD//wAhCkIAIQEMAwsgCkKAgICAgIDA//8AhCEKQgAhAQwCCyADIAJCgICAgICAwP//AIWEUARAIAEgC4QhAkIAIQEgAlAEQEKAgICAgIDg//8AIQoMAwsgCkKAgICAgIDA//8AhCEKDAILIAEgC4RQBEBCACEBDAILIAIgA4RQBEBCACEBDAILIAtC////////P1gEQCAFQdAAaiABIA0gASANIA1QIgYbeSAGQQZ0rXynIgZBD2sQMUEQIAZrIQYgBSkDWCINQiCIIQ4gBSkDUCEBCyACQv///////z9WDQAgBUFAayADIAwgAyAMIAxQIggbeSAIQQZ0rXynIghBD2sQMSAGIAhrQRBqIQYgBSkDSCEMIAUpA0AhAwsgA0IPhiILQoCA/v8PgyICIAFCIIgiBH4iECALQiCIIhMgAUL/////D4MiAX58Ig9CIIYiESABIAJ+fCILIBFUrSACIA1C/////w+DIg1+IhUgBCATfnwiESAMQg+GIhIgA0IxiIRC/////w+DIgMgAX58IhQgDyAQVK1CIIYgD0IgiIR8Ig8gAiAOQoCABIQiDH4iFiANIBN+fCIOIBJCIIhCgICAgAiEIgIgAX58IhAgAyAEfnwiEkIghnwiF3whASAHIAlqIAZqQf//AGshBgJAIAIgBH4iGCAMIBN+fCIEIBhUrSAEIAQgAyANfnwiBFatfCACIAx+fCAEIAQgESAVVK0gESAUVq18fCIEVq18IAMgDH4iAyACIA1+fCICIANUrUIghiACQiCIhHwgBCACQiCGfCICIARUrXwgAiACIBAgElatIA4gFlStIA4gEFatfHxCIIYgEkIgiIR8IgJWrXwgAiACIA8gFFStIA8gF1atfHwiAlatfCIEQoCAgICAgMAAg0IAUgRAIAZBAWohBgwBCyALQj+IIQMgBEIBhiACQj+IhCEEIAJCAYYgAUI/iIQhAiALQgGGIQsgAyABQgGGhCEBCyAGQf//AU4EQCAKQoCAgICAgMD//wCEIQpCACEBDAELAn4gBkEATARAQQEgBmsiB0GAAU8EQEIAIQEMAwsgBUEw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LQsgBUGAAmokAAsGACAAECsLQQECfwJAIAJFDQADQCABIANBA3RqKAIAIgRFDQEgACAERgRAIAEgA0EDdGooAgQPCyADQQFqIgMgAkcNAAsLQQALxQkCBH8FfiMAQfAAayIGJAAgBEL///////////8AgyEJAkACQCABUCIFIAJC////////////AIMiCkKAgICAgIDA//8AfUKAgICAgIDAgIB/VCAKUBtFBEAgA0IAUiAJQoCAgICAgMD//wB9IgtCgICAgICAwICAf1YgC0KAgICAgIDAgIB/URsNAQsgBSAKQoCAgICAgMD//wBUIApCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhBCABIQMMAgsgA1AgCUKAgICAgIDA//8AVCAJQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQQMAgsgASAKQoCAgICAgMD//wCFhFAEQEKAgICAgIDg//8AIAIgASADhSACIASFQoCAgICAgICAgH+FhFAiBRshBEIAIAEgBRshAwwCCyADIAlCgICAgICAwP//AIWEUA0BIAEgCoRQBEAgAyAJhEIAUg0CIAEgA4MhAyACIASDIQQMAgsgAyAJhEIAUg0AIAEhAyACIQQMAQsgAyABIAEgA1QgCSAKViAJIApRGyIIGyEKIAQgAiAIGyILQv///////z+DIQkgAiAEIAgbIgJCMIinQf//AXEhByALQjCIp0H//wFxIgVFBEAgBkHgAGogCiAJIAogCSAJUCIFG3kgBUEGdK18pyIFQQ9rEDEgBikDaCEJIAYpA2AhCkEQIAVrIQULIAEgAyAIGyEDIAJC////////P4MhBCAHRQRAIAZB0ABqIAMgBCADIAQgBFAiBxt5IAdBBnStfKciB0EPaxAxQRAgB2shByAGKQNYIQQgBikDUCEDCyAEQgOGIANCPYiEQoCAgICAgIAEhCEBIAlCA4YgCkI9iIQhBCACIAuFIQ0CfiADQgOGIgIgBSAHRg0AGiAFIAdrIgdB/wBLBEBCACEBQgEMAQsgBkFAayACIAFBgAEgB2sQMSAGQTBqIAIgASAHEDwgBikDOCEBIAYpAzAgBikDQCAGKQNIhEIAUq2ECyEJIARCgICAgICAgASEIQwgCkIDhiEKAkAgDUIAUwRAQgAhA0IAIQQgCSAKhSABIAyFhFANAiAKIAl9IQIgDCABfSAJIApWrX0iBEL/////////A1YNASAGQSBqIAIgBCACIAQgBFAiBxt5IAdBBnStfKdBDGsiBxAxIAUgB2shBSAGKQMoIQQgBikDICECDAELIAkgCnwiAiAJVK0gASAMfHwiBEKAgICAgICACINQDQAgCUIBgyAEQj+GIAJCAYiEhCECIAVBAWohBSAEQgGIIQQLIAtCgICAgICAgICAf4MhASAFQf//AU4EQCABQoCAgICAgMD//wCEIQRCACEDDAELQQAhBwJAIAVBAEoEQCAFIQcMAQsgBkEQaiACIAQgBUH/AGoQMSAGIAIgBEEBIAVrEDwgBikDACAGKQMQIAYpAxiEQgBSrYQhAiAGKQMIIQQLIAKnQQdxIgVBBEutIARCPYYgAkIDiIQiAnwiAyACVK0gBEIDiEL///////8/gyAHrUIwhoQgAYR8IQQCQCAFQQRGBEAgBCADQgGDIgEgA3wiAyABVK18IQQMAQsgBUUNAQsLIAAgAzcDACAAIAQ3AwggBkHwAGokAAt+AgJ/AX4jAEEQayIDJAAgAAJ+IAFFBEBCAAwBCyADIAEgAUEfdSICcyACayICrUIAIAJnIgJB0QBqEDEgAykDCEKAgICAgIDAAIVBnoABIAJrrUIwhnwgAUGAgICAeHGtQiCGhCEEIAMpAwALNwMAIAAgBDcDCCADQRBqJAALugIBA38jAEFAaiICJAAgACgCACIDQQRrKAIAIQQgA0EIaygCACEDIAJCADcDICACQgA3AyggAkIANwMwIAJCADcANyACQgA3AxggAkEANgIUIAJB0O0ANgIQIAIgADYCDCACIAE2AgggACADaiEAQQAhAwJAIAQgAUEAEC8EQCACQQE2AjggBCACQQhqIAAgAEEBQQAgBCgCACgCFBEMACAAQQAgAigCIEEBRhshAwwBCyAEIAJBCGogAEEBQQAgBCgCACgCGBEEAAJAAkAgAigCLA4CAAECCyACKAIcQQAgAigCKEEBRhtBACACKAIkQQFGG0EAIAIoAjBBAUYbIQMMAQsgAigCIEEBRwRAIAIoAjANASACKAIkQQFHDQEgAigCKEEBRw0BCyACKAIYIQMLIAJBQGskACADC/kBAgN+An8jAEEQayIFJAACfiABvSIDQv///////////wCDIgJCgICAgICAgAh9Qv/////////v/wBYBEAgAkI8hiEEIAJCBIhCgICAgICAgIA8fAwBCyACQoCAgICAgID4/wBaBEAgA0I8hiEEIANCBIhCgICAgICAwP//AIQMAQsgAlAEQEIADAELIAUgAkIAIAOnZ0EgaiACQiCIp2cgAkKAgICAEFQbIgZBMWoQMSAFKQMAIQQgBSkDCEKAgICAgIDAAIVBjPgAIAZrrUIwhoQLIQIgACAENwMAIAAgAiADQoCAgICAgICAgH+DhDcDCCAFQRBqJAALRwECfyAAIAE3A3AgACAAKAIsIAAoAgQiA2usNwN4IAAoAgghAgJAIAFQDQAgAiADa6wgAVcNACADIAGnaiECCyAAIAI2AmgLtAMBB38gACgCBCEGIAJBgZTr3ANPBEAgACgCAEK2gICA8AA3AhQgACAAKAIAKAIAEQAACyACQR9qQWBxIgRBK2oiB0GBlOvcA08EQCAAKAIAQraAgIAQNwIUIAAgACgCACgCABEAAAsgAUECTwRAIAAoAgAiAiABNgIYIAJBDjYCFCAAIAAoAgAoAgARAAALAn8CQCAGIAFBAnRqIgkoAjQiAkUNAANAIAQgAiIFKAIIIgJLBEAgBSgCACICDQEMAgsLIAUiAygCBAwBCwJAIAFBAnRB2McAQdDHACAFG2ooAgAiAUHVk+vcAyAEayICIAEgAkkbIgIgB2oiCBAqIgMEQCACIQEMAQsDQCACQQF2IQEgAkHjAE0EQCAAKAIAQraAgIAgNwIUIAAgACgCACgCABEAAAsgByABIgJqIggQKiIDRQ0ACwsgBiAGKAJMIAhqNgJMIAMgASAEaiICNgIIIANCADcCAAJAIAVFBEAgCSADNgI0DAELIAUgAzYCAAtBAAshACADIAIgBGs2AgggAyAAIARqNgIEIAAgA0EMaiIBQSAgAUEfcSIBa0EAIAEbamoLAwABC1ABAX4CQCADQcAAcQRAIAIgA0FAaq2IIQFCACECDAELIANFDQAgAkHAACADa62GIAEgA60iBIiEIQEgAiAEiCECCyAAIAE3AwAgACACNwMICyEAQcCHASgCAEUEQEHAhwEgADYCAEHEhwEgATYCAAsQFwvbAQIBfwJ+QQEhBAJAIABCAFIgAUL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFEbDQAgAkIAUiADQv///////////wCDIgZCgICAgICAwP//AFYgBkKAgICAgIDA//8AURsNACAAIAKEIAUgBoSEUARAQQAPCyABIAODQgBZBEBBfyEEIAAgAlQgASADUyABIANRGw0BIAAgAoUgASADhYRCAFIPC0F/IQQgACACViABIANVIAEgA1EbDQAgACAChSABIAOFhEIAUiEECyAECwMAAQsOACAAQdAAahAqQdAAagtjAgF/AX4jAEEQayICJAAgAAJ+IAFFBEBCAAwBCyACIAGtQgAgAWciAUHRAGoQMSACKQMIQoCAgICAgMAAhUGegAEgAWutQjCGfCEDIAIpAwALNwMAIAAgAzcDCCACQRBqJAALiAEBA39ByIcBQciHASgCAEEBaiIFNgIAIAAgBTYCACADBEADQCACIARBA3RqIgYoAgBFBEAgBiAFNgIAIAIgBEEDdGoiACABNgIEIABBADYCCCADJAEgAg8LIARBAWoiBCADRw0ACwsgACABIAIgA0EEdEEIchBIIANBAXQiABBCIQEgACQBIAELgwECA38BfgJAIABCgICAgBBUBEAgACEFDAELA0AgAUEBayIBIAAgAEIKgCIFQgp+fadBMHI6AAAgAEL/////nwFWIQIgBSEAIAINAAsLIAWnIgIEQANAIAFBAWsiASACIAJBCm4iA0EKbGtBMHI6AAAgAkEJSyEEIAMhAiAEDQALCyABCwMAAQvwAQEBfyACIARIBEAgACABIAIgBBAuRQRAQX8PCyAAKAIMIQIgACgCCCEBC0F/IAR0QX9zIAEgAiAEayICdnEiBSADIARBAnRqKAIASgRAA0AgAkEATARAIAAgASACQQEQLkUEQEF/DwsgACgCDCECIAAoAgghAQsgASACQQFrIgJ2QQFxIAVBAXRyIgUgAyAEQQFqIgRBAnRqKAIASg0ACwsgACACNgIMIAAgATYCCCAEQRFOBEAgACgCECIAKAIAIgFB9gA2AhQgAEF/IAEoAgQRAwBBAA8LIAMoApABIAMgBEECdGooAkggBWpqLQARC9oBAQF/AkAgBEEATA0AIAAgAUECdGohASACIANBAnRqIQMCQCAEQQNxIgZFBEAgBCECDAELQQAhACAEIQIDQCADKAIAIAEoAgAgBRApGiACQQFrIQIgA0EEaiEDIAFBBGohASAAQQFqIgAgBkcNAAsL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JRoLIAIgBC0ABCIHaiIDQYECTgRAIAAoAgAiCkEINgIUIAAgCigCABEAAAsCQCAHRQRAIAIhAwwBCyAGQZAIaiACakEEIAcQJRoLIAMgBC0ABSIHaiICQYECTgRAIAAoAgAiCkEINgIUIAAgCigCABEAAAsCQCAHRQRAIAMhAgwBCyAGQZAIaiADakEFIAcQJRoLIAIgBC0ABiIHaiIDQYECTgRAIAAoAgAiCkEINgIUIAAgCigCABEAAAsCQCAHRQRAIAIhAwwBCyAGQZAIaiACakEGIAcQJRoLIAMgBC0AByIHaiICQYECTgRAIAAoAgAiCkEINgIUIAAgCigCABEAAAsCQCAHRQRAIAMhAgwBCyAGQZAIaiADakEHIAcQJRoLIAIgBC0ACCIHaiIDQYECTgRAIAAoAgAiCkEINgIUIAAgCigCABEAAAsCQCAHRQRAIAIhAwwBCyAGQZAIaiACakEIIAcQJRoLIAMgBC0ACSIHaiICQYECTgRAIAAoAgAiCkEINgIUIAAgCigCABEAAAsCQCAHRQRAIAMhAgwBCyAGQZAIaiADakEJIAcQJRoLIAIgBC0ACiIHaiIDQYECTgRAIAAoAgAiCkEINgIUIAAgCigCABEAAAsCQCAHRQRAIAIhAwwBCyAGQZAIaiACakEKIAcQJRoLIAMgBC0ACyIHaiICQYECTgRAIAAoAgAiCkEINgIUIAAgCigCABEAAAsCQCAHRQRAIAMhAgwBCyAGQZAIaiADakELIAcQJRoLIAIgBC0ADCIHaiIDQYECTgRAIAAoAgAiCkEINgIUIAAgCigCABEAAAsCQCAHRQRAIAIhAwwBCyAGQZAIaiACakEMIAcQJRoLIAMgBC0ADSIHaiICQYECTgRAIAAoAgAiCkEINgIUIAAgCigCABEAAAsCQCAHRQRAIAMhAgwBCyAGQZAIaiADakENIAcQJRoLIAIgBC0ADiIHaiIDQYECTgRAIAAoAgAiCkEINgIUIAAgCigCABEAAAsCQCAHRQRAIAIhAwwBCyAGQZAIaiACakEOIAcQJRoLIAMgBC0ADyICaiIHQYECTgRAIAAoAgAiCkEINgIUIAAgCigCABEAAAsCQCACRQRAIAMhBwwBCyAGQZAIaiADakEPIAIQJRoLIAcgBC0AECICaiIKQYECTgRAIAAoAgAiA0EINgIUIAAg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A0EDaiEAIANBBGohAyAAIAZHDQALCyAFIAtHIQAgC0EBaiELIAANAAsLIAkgCkchACAJQQFqIQkgAA0ACwsgASACNgIcC4kDAQZ/IAAoAhgiASgCBCECIAEoAgAhBANAIAJFBEAgACABKAIMEQEARQRAQQAPCyABKAIAIQQgASgCBCECCyAEQQFqIQMgAkEBayECIAQtAABB/wFHBEADQCAAKAK4AyIEIAQoAhhBAWo2AhggASACNgIEIAEgAzYCACACBH8gAgUgACABKAIMEQEARQRAQQAPCyABKAIAIQMgASgCBAtBAWshAiADLQAAIQQgA0EBaiEDIARB/wFHDQALCwNAIAIEfyACBSAAIAEoAgwRAQBFBEBBAA8LIAEoAgAhAyABKAIEC0EBayECIAMtAAAhBSADQQFqIgQhAyAFQf8BRg0ACyAFRQRAIAAoArgDIgMgAygCGEECajYCGCABIAI2AgQgASAENgIADAELCyAAKAK4AygCGCIDBEAgACgCACIGIAM2AhggBkH0ADYCFCAAKAIAIAU2AhwgAEF/IAAoAgAoAgQRAwAgACgCuANBADYCGAsgACAFNgKgAyABIAI2AgQgASAENgIAQQELOwEBfyAAKAIEIgEEQCAAQQEgASgCJBEDACAAKAIQBEAgAEEANgKwAiAAQcgBNgIUDwsgAEHkADYCFAsLhAIBA38gACgCBCEDIAJBgZTr3ANPBEAgACgCAEK2gICAgAE3AhQgACAAKAIAKAIAEQAACyACQR9qQWBxIgVBK2oiBEGBlOvcA08EQCAAKAIAQraAgIAwNwIUIAAgACgCACgCABEAAAsgAUECTwRAIAAoAgAiAiABNgIYIAJBDjYCFCAAIAAoAgAoAgARAAALIAQQKiICRQRAIAAoAgBCtoCAgMAANwIUIAAgACgCACgCABEAAAsgAyADKAJMIARqNgJMIAMgAUECdGoiACgCPCEBIAJBADYCCCACIAU2AgQgAiABNgIAIAAgAjYCPCACQQxqIgBBICAAQR9xIgBrQQAgABtqC8cCAQN/IAAoAgQhAwJAIAFBAk8EQCAAKAIAIgIgATYCGCACQQ42AhQgACAAKAIAKAIAEQAADAELIAFBAUcNACADKAJEIgIEQANAIAIoAigEQCACQQA2AiggACACQTBqIAIoAjgRAwALIAIoAiwiAg0A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IBAgBSAZa2wiByAHbGohByAQIAUgF2tsIgUgBWwMAQsgBSASTQRAIBAgBSAZa2wiBSAFbAwBCyAQIAUgF2tsIgUgBWwLIAtqIQsCfyAGIBpqLQAAIgUgFkgEQCAHIAogBSAWa2wiByAHbGohByAKIAUgFGtsIgUgBWwMAQsgBSAUSgRAIAcgCiAFIBRrbCIHIAdsaiEHIAogBSAWa2wiBSAFbAwBCyAFIA9NBEAgCiAFIBRrbCIFIAVsDAELIAogBSAWa2wiBSAFbAshBSAEQYADaiAGQQJ0aiAHNgIAIAUgC2oiBSAJIAUgCUgbIQkgBkEBaiIGIBFHDQALIBFBAXEhBQJAIBFBAUYEQEEAIRJBACEGDAELIBFBfnEhC0EAIRJBACEGQQAhBwNAIAkgBEGAA2ogBkECdGooAgBOBEAgBEGAAWogEmogBjoAACASQQFqIRILIAkgBEGAA2ogBkEBciIKQQJ0aigCAE4EQCAEQYABaiASaiAKOgAAIBJBAWohEgsgBkECaiEGIAdBAmoiByALRw0ACwsgBUUNACAEQYADaiAGQQJ0aigCACAJSg0AIARBgAFqIBJqIAY6AAAgEkEBaiESCyAEQv/////3/////wA3A/gGIARC//////f/////ADcD8AYgBEL/////9/////8ANwPoBiAEQv/////3/////wA3A+AGIARC//////f/////ADcD2AYgBEL/////9/////8ANwPQBiAEQv/////3/////wA3A8gGIARC//////f/////ADcDwAYgBEL/////9/////8ANwO4BiAEQv/////3/////wA3A7AGIARC//////f/////ADcDqAYgBEL/////9/////8ANwOgBiAEQv/////3/////wA3A5gGIARC//////f/////ADcDkAYgBEL/////9/////8ANwOIBiAEQv/////3/////wA3A4AGIARC//////f/////ADcD+AUgBEL/////9/////8ANwPwBSAEQv/////3/////wA3A+gFIARC//////f/////ADcD4AUgBEL/////9/////8ANwPYBSAEQv/////3/////wA3A9AFIARC//////f/////ADcDyAUgBEL/////9/////8ANwPABSAEQv/////3/////wA3A7gFIARC//////f/////ADcDsAUgBEL/////9/////8ANwOoBSAEQv/////3/////wA3A6AFIARC//////f/////ADcDmAUgBEL/////9/////8ANwOQBSAEQv/////3/////wA3A4gFIARC//////f/////ADcDgAUgBEL/////9/////8ANwP4BCAEQv/////3/////wA3A/AEIARC//////f/////ADcD6AQgBEL/////9/////8ANwPgBCAEQv/////3/////wA3A9gEIARC//////f/////ADcD0AQgBEL/////9/////8ANwPIBCAEQv/////3/////wA3A8AEIARC//////f/////ADcDuAQgBEL/////9/////8ANwOwBCAEQv/////3/////wA3A6gEIARC//////f/////ADcDoAQgBEL/////9/////8ANwOYBCAEQv/////3/////wA3A5AEIARC//////f/////ADcDiAQgBEL/////9/////8ANwOABCAEQv/////3/////wA3A/gDIARC//////f/////ADcD8AMgBEL/////9/////8ANwPoAyAEQv/////3/////wA3A+ADIARC//////f/////ADcD2AMgBEL/////9/////8ANwPQAyAEQv/////3/////wA3A8gDIARC//////f/////ADcDwAMgBEL/////9/////8ANwO4AyAEQv/////3/////wA3A7ADIARC//////f/////ADcDqAMgBEL/////9/////8ANwOgAyAEQv/////3/////wA3A5gDIARC//////f/////ADcDkAMgBEL/////9/////8ANwOIAyAEQv/////3/////wA3A4ADIBJBAEoEQCAAKAIsIgtBAnRBgNQAaigCAEECdEGk0wBqKAIAIQkgBEEgaiEUIARBgARqIRlBACEaA0AgC0ECdCINQdDUAGoiCigCAEECdEGk0wBqKAIAIgYgBiAWIARBgAFqIBpqLQAAIgggACgCiAEiBSgCCGotAABrbCIQbEEEdCAGQQN0IgcgB2xqIQ8gFyAFKAIEIAhqLQAAayAJbCIHIAdsIA1BsNMAaigCAEECdEGk0wBqKAIAIhUgGCAFKAIAIAhqLQAAa2wiESARbGogECAQbGoiDSAEKAKAA0gEQCAEIAg6AAAgBCANNgKAAwsgBiAGbEEHdCIGIA9q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Bi0AEkEBajsBBCAFIAYtABNBAWo7AQYgAiAJaiABaiIFIAYtABRBAWo7AQAgBSAGLQAVQQFqOwECIAUgBi0AFkEBajsBBCAFIAYtABdBAWo7AQYgAiARaiABaiIFIAYtABhBAWo7AQAgBSAGLQAZQQFqOwECIAUgBi0AGkEBajsBBCAFIAYtABtBAWo7AQYgAiAUaiABaiICIAYtABxBAWo7AQAgAiAGLQAdQQFqOwECIAIgBi0AHkEBajsBBCACIAYtAB9BAWo7AQYgBkEgaiEGIABBAWoiAEEERw0ACyAEQYALaiQAC8sDAQR/IAAoAswDIABBAUH8DyAAKAIEKAIAEQIAIgBB/AdqIgE2AiggAEL/////DzcC+AcgAEKBgICAIDcCgAggAEKDgICAwAA3AogIIABC/f///283AvAHIABChYCAgOAANwKQCCAAQvv///9PNwLoByAAQoeAgICAATcCmAggAEL5////r383AuAHIABCiYCAgKABNwKgCCAAQvf///+PfzcC2AcgAEKLgICAwAE3AqgIIABC9f///+9+NwLQByAAQo2AgIDgATcCsAggAELz////z343AsgHIABBDzYCuAggAELx////r343AsAHQRAhAkEQIQMDQCABIANBAnQiAGogAjYCACABIABrQQAgAmsiBDYCACABIABBBHJqIAI2AgAgASADQX9zQQJ0aiAENgIAIAJBAWohAkEwIQAgA0ECaiIDQTBHDQALA0AgASAAQQJ0IgJqQSA2AgAgASACa0FgNgIAIAEgAkEEcmpBIDYCACABIABBf3NBAnRqQWA2AgAgASACQQhyakEgNgIAIAFBfiAAa0ECdGpBYDYCACABIAJBDHJqQSA2AgAgAUF9IABrQQJ0akFgNgIAIABBBGoiAEGAAkcNAAsLDQAgASAAKAIAai0AAAv9AwEJfyAAKALMAyIEIAAoAlgiAUEBRiICNgIcIAQgAEEBQf4FQYACIAIbIAAoAnggACgCBCgCCBEIADYCGAJAIAAoAnhBAEwNACAEKAIUIQYgAUEBRgRAA0AgBCAHQQJ0IgJqKAIgIQEgBCgCGCACaiIDIAMoAgBB/wFqNgIAIAFB/gFqIgggAUEBdEECayIJbSEFIAYgAW0hBiAEKAIYIAJqKAIAIQNBACEBQQAhAgNAIAIgBUoEQANAIAIgCCAB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////AIMiA0KAgICAgIDAgDx9IANCgICAgICAwP/DAH1UBEAgAUIEhiAAQjyIhCEDIABC//////////8PgyIAQoGAgICAgICACFoEQCADQoGAgICAgICAwAB8IQIMAgsgA0KAgICAgICAgEB9IQIgAEKAgICAgICAgAhSDQEgAiADQgGDfCECDAELIABQIANCgICAgICAwP//AFQgA0KAgICAgIDA//8AURtFBEAgAUIEhiAAQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgA0L///////+//8MAVg0AQgAhAiADQjCIpyIFQZH3AEkNACAEQRBqIAAgAUL///////8/g0KAgICAgIDAAIQiAiAFQYH3AGsQMSAEIAAgAkGB+AAgBWsQPCAEKQMIQgSGIAQpAwAiAEI8iIQhAiAEKQMQIAQpAxiEQgBSrSAAQv//////////D4OEIgBCgYCAgICAgIAIWgRAIAJCAXwhAgwBCyAAQoCAgICAgICACFINACACQgGDIAJ8IQILIARBIGokACACIAFCgICAgICAgICAf4OEvwupDwIFfw9+IwBB0AJrIgUkACAEQv///////z+DIQsgAkL///////8/gyEKIAIgBIVCgICAgICAgICAf4MhDSAEQjCIp0H//wFxIQgCQAJAIAJCMIinQf//AXEiCUH//wFrQYKAfk8EQCAIQf//AWtBgYB+Sw0BCyABUCACQv///////////wCDIgxCgICAgICAwP//AFQgDEKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCENDAILIANQIARC////////////AIMiAkKAgICAgIDA//8AVCACQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQ0gAyEBDAILIAEgDEKAgICAgIDA//8AhYRQBEAgAyACQoCAgICAgMD//wCFhFAEQEIAIQFCgICAgICA4P//ACENDAMLIA1CgICAgICAwP//AIQhDUIAIQEMAgsgAyACQoCAgICAgMD//wCFhFAEQEIAIQEMAgsgASAMhFAEQEKAgICAgIDg//8AIA0gAiADhFAbIQ1CACEBDAILIAIgA4RQBEAgDUKAgICAgIDA//8AhCENQgAhAQwCCyAMQv///////z9YBEAgBUHAAmogASAKIAEgCiAKUCIGG3kgBkEGdK18pyIGQQ9rEDFBECAGayEGIAUpA8gCIQogBSkDwAIhAQsgAkL///////8/Vg0AIAVBsAJqIAMgCyADIAsgC1AiBxt5IAdBBnStfKciB0EPaxAxIAYgB2pBEGshBiAFKQO4AiELIAUpA7ACIQMLIAVBoAJqIAtCgICAgICAwACEIhJCD4YgA0IxiIQiAkIAQoCAgICw5ryC9QAgAn0iBEIAEDAgBUGQAmpCACAFKQOoAn1CACAEQgAQMCAFQYACaiAFKQOYAkIBhiAFKQOQAkI/iIQiBEIAIAJCABAwIAVB8AFqIARCAEIAIAUpA4gCfUIAEDAgBUHgAWogBSkD+AFCAYYgBSkD8AFCP4iEIgRCACACQgAQMCAFQdABaiAEQgBCACAFKQPoAX1CABAwIAVBwAFqIAUpA9gBQgGGIAUpA9ABQj+IhCIEQgAgAkIAEDAgBUGwAWogBEIAQgAgBSkDyAF9QgAQMCAFQaABaiACQgAgBSkDuAFCAYYgBSkDsAFCP4iEQgF9IgJCABAwIAVBkAFqIANCD4ZCACACQgAQMCAFQfAAaiACQgBCACAFKQOoASAFKQOgASIMIAUpA5gBfCIEIAxUrXwgBEIBVq18fUIAEDAgBUGAAWpCASAEfUIAIAJCABAwIAYgCSAIa2ohBgJ/IAUpA3AiE0IBhiIOIAUpA4gBIg9CAYYgBSkDgAFCP4iEfCIQQufsAH0iFEIgiCICIApCgICAgICAwACEIhVCAYYiFkIgiCIEfiIRIAFCAYYiDEIgiCILIBAgFFatIA4gEFatIAUpA3hCAYYgE0I/iIQgD0I/iHx8fEIBfSITQiCIIhB+fCIOIBFUrSAOIA4gE0L/////D4MiEyABQj+IIhcgCkIBhoRC/////w+DIgp+fCIOVq18IAQgEH58IAQgE34iESAKIBB+fCIPIBFUrUIghiAPQiCIhHwgDiAOIA9CIIZ8Ig5WrXwgDiAOIBRC/////w+DIhQgCn4iESACIAt+fCIPIBFUrSAPIA8gEyAMQv7///8PgyIRfnwiD1atfHwiDlatfCAOIAQgFH4iGCAQIBF+fCIEIAIgCn58IgogCyATfnwiEEIgiCAKIBBWrSAEIBhUrSAEIApWrXx8QiCGhHwiBCAOVK18IAQgDyACIBF+IgIgCyAUfnwiC0IgiCACIAtWrUIghoR8IgIgD1StIAIgEEIghnwgAlStfHwiAiAEVK18IgRC/////////wBYBEAgFiAXhCEVIAVB0ABqIAIgBCADIBIQMCABQjGGIAUpA1h9IAUpA1AiAUIAUq19IQpCACABfSELIAZB/v8AagwBCyAFQeAAaiAEQj+GIAJCAYiEIgIgBEIBiCIEIAMgEhAwIAFCMIYgBSkDaH0gBSkDYCIMQgBSrX0hCkIAIAx9IQsgASEMIAZB//8AagsiBkH//wFOBEAgDUKAgICAgIDA//8AhCENQgAhAQwBCwJ+IAZBAEoEQCAKQgGGIAtCP4iEIQogBEL///////8/gyAGrUIwhoQhDCALQgGGDAELIAZBj39MBEBCACEBDAILIAVBQGsgAiAEQQEgBmsQPCAFQTBqIAwgFSAGQfAAahAxIAVBIGogAyASIAUpA0AiAiAFKQNIIgwQMCAFKQM4IAUpAyhCAYYgBSkDICIBQj+IhH0gBSkDMCIEIAFCAYYiAVStfSEKIAQgAX0LIQQgBUEQaiADIBJCA0IAEDAgBSADIBJCBUIAEDAgDCACIAIgAyACQgGDIgEgBHwiA1QgCiABIANWrXwiASASViABIBJRG618IgJWrXwiBCACIAIgBEKAgICAgIDA//8AVCADIAUpAxBWIAEgBSkDGCIEViABIARRG3GtfCICVq18IgQgAiAEQoCAgICAgMD//wBUIAMgBSkDAFYgASAFKQMIIgNWIAEgA1Ebca18IgEgAlStfCANhCENCyAAIAE3AwAgACANNwMIIAVB0AJqJAALwAECAX8CfkF/IQMCQCAAQgBSIAFC////////////AIMiBEKAgICAgIDA//8AViAEQoCAgICAgMD//wBRGw0AIAJC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBScQ0AIAAgBCAFhIRQBEBBAA8LIAEgAoNCAFkEQCABIAJSIAEgAlNxDQEgACABIAKFhEIAUg8LIABCAFIgASACVSABIAJRGw0AIAAgASAChYRCAFIhAwsgAwtjAQN/QQgQQCIAQajzADYCACAAQdTzADYCAEGOGxBKIgFBDWoQLCICQQA2AgggAiABNgIEIAIgATYCACAAIAJBDGpBjhsgAUEBahApNgIEIABBhPQANgIAIABBpPQAQRcQBgALmQIAIABFBEBBAA8LAn8CQCAABH8gAUH/AE0NAQJAQYD/ACgCACgCAEUEQCABQYB/cUGAvwNGDQMMAQsgAUH/D00EQCAAIAFBP3FBgAFyOgABIAAgAUEGdkHAAXI6AABBAgwECyABQYBAcUGAwANHIAFBgLADT3FFBEAgACABQT9xQYABcjoAAiAAIAFBDHZB4AFyOgAAIAAgAUEGdkE/cUGAAXI6AAFBAwwECyABQYCABGtB//8/TQRAIAAgAUE/cUGAAXI6AAMgACABQRJ2QfABcjoAACAAIAFBBnZBP3FBgAFyOgACIAAgAUEMdkE/cUGAAXI6AAFBBAwECwtB1PgAQRk2AgBBfwVBAQsMAQsgACABOgAAQQELC0MAAkAgAEUNAAJAAkACQAJAIAFBAmoOBgABAgIEAwQLIAAgAjwAAA8LIAAgAj0BAA8LIAAgAj4CAA8LIAAgAjcDAAsL1QMCBH8BfgJAAn8CQAJAAn8gACgCBCIBIAAoAmhHBEAgACABQQFqNgIEIAEtAAAMAQsgABAnCyIBQStrDgMAAQABCyABQS1GIQQCfyAAKAIEIgEgACgCaEcEQCAAIAFBAWo2AgQgAS0AAAwBCyAAECcLIgFBOmsMAQsgAUE6awtBdk8EQCABQTBrIgJBCkkEQANAIAEgA0EKbGpBMGsiA0HMmbPmAEgCfyAAKAIEIgEgACgCaEcEQCAAIAFBAWo2AgQgAS0AAAwBCyAAECcLIgFBMGsiAkEJTXENAAsgA6whBQsCQCACQQpPDQADQCABrSAFQgp+fEIwfSEFAn8gACgCBCIBIAAoAmhHBEAgACABQQFqNgIEIAEtAAAMAQsgABAnCyIBQTBrIgJBCUsNASAFQq6PhdfHwuujAVMNAAsLIAJBCkkEQANAAn8gACgCBCIBIAAoAmhHBEAgACABQQFqNgIEIAEtAAAMAQsgABAnC0Ewa0EKSQ0ACwsgACkDcEIAWQRAIAAgACgCBEEBazYCBAtCACAFfSAFIAQbIQUMAQtCgICAgICAgICAfyEFIAApA3BCAFMNACAAIAAoAgRBAWs2AgRCgICAgICAgICAfw8LIAULxgYCBH8DfiMAQYABayIFJAACQAJAAkAgAyAEQgBCABA+RQ0AAn8gBEL///////8/gyEKAn8gBEIwiKdB//8BcSIGQf//AUcEQEEEIAYNARpBAkEDIAMgCoRQGwwCCyADIAqEUAsLIQYgAkIwiKciCEH//wFxIgdB//8BRg0AIAYNAQsgBUEQaiABIAIgAyAEECggBSAFKQMQIgIgBSkDGCIBIAIgARBpIAUpAwghAiAFKQMAIQQMAQsgASACQv///////////wCDIgogAyAEQv///////////wCDIgkQPkEATARAIAEgCiADIAkQPgRAIAEhBAwCCyAFQfAAaiABIAJCAEIAECggBSkDeCECIAUpA3AhBAwBCyAEQjCIp0H//wFxIQYgBwR+IAEFIAVB4ABqIAEgCkIAQoCAgICAgMC7wAAQKCAFKQNoIgpCMIinQfgAayEHIAUpA2ALIQQgBkUEQCAFQdAAaiADIAlCAEKAgICAgIDAu8AAECggBSkDWCIJQjCIp0H4AGshBiAFKQNQIQMLIAlC////////P4NCgICAgICAwACEIQsgCkL///////8/g0KAgICAgIDAAIQhCiAGIAdIBEADQAJ+IAogC30gAyAEVq19IglCAFkEQCAJIAQgA30iBIRQBEAgBUEgaiABIAJCAEIAECggBSkDKCECIAUpAyAhBAwFCyAJQgGGIARCP4iEDAELIApCAYYgBEI/iIQLIQogBEIBhiEEIAdBAWsiByAGSg0ACyAGIQcLAkAgCiALfSADIARWrX0iCUIAUwRAIAohCQwBCyAJIAQgA30iBIRCAFINACAFQTBqIAEgAkIAQgAQKCAFKQM4IQIgBSkDMCEEDAELIAlC////////P1gEQANAIARCP4ghASAHQQFrIQcgBEIBhiEEIAEgCUIBhoQiCUKAgICAgIDAAFQNAAsLIAhBgIACcSEGIAdBAEwEQCAFQUBrIAQgCUL///////8/gyAHQfgAaiAGcq1CMIaEQgBCgICAgICAwMM/ECggBSkDSCECIAUpA0AhBAwBCyAJQv///////z+DIAYgB3KtQjCGhCECCyAAIAQ3AwAgACACNwMIIAVBgAFqJAALvwIBAX8jAEHQAGsiBCQAAkAgA0GAgAFOBEAgBEEgaiABIAJCAEKAgICAgICA//8AECggBCkDKCECIAQpAyAhASADQf//AUkEQCADQf//AGshAwwCCyAEQRBqIAEgAkIAQoCAgICAgID//wAQKEH9/wIgAyADQf3/Ak4bQf7/AWshAyAEKQMYIQIgBCkDECEBDAELIANBgYB/Sg0AIARBQGsgASACQgBCgICAgICAgDkQKCAEKQNIIQIgBCkDQCEBIANB9IB+SwRAIANBjf8AaiEDDAELIARBMGogASACQgBCgICAgICAgDkQKEHogX0gAyADQeiBfUwbQZr+AWohAyAEKQM4IQIgBCkDMCEBCyAEIAEgAkIAIANB//8Aaq1CMIYQKCAAIAQpAwg3AwggACAEKQMANwMAIARB0ABqJAALNQAgACABNwMAIAAgAkL///////8/gyAEQjCIp0GAgAJxIAJCMIinQf//AXFyrUIwhoQ3AwgLxAIAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4SAAoLDAoLAgMEBQwLDAwKCwcICQsgAiACKAIAIgFBBGo2AgAgACABKAIANgIADwsACyACIAIoAgAiAUEEajYCACAAIAEyAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEzAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEwAAA3AwAPCyACIAIoAgAiAUEEajYCACAAIAExAAA3AwAPCwALIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASsDADkDAA8LIAAgAiADEQMACw8LIAIgAigCACIBQQRqNgIAIAAgATQCADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATUCADcDAA8LIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASkDADcDAAtyAQN/IAAoAgAsAABBMGtBCk8EQEEADwsDQCAAKAIAIQNBfyEBIAJBzJmz5gBNBEBBfyADLAAAQTBrIgEgAkEKbCICaiABIAJB/////wdzShshAQsgACADQQFqNgIAIAEhAiADLAABQTBrQQpJDQALIAIL4hICEn8BfiMAQdAAayIIJAAgCCABNgJMIAhBN2ohFyAIQThqIRICQAJAAkACQANAIAEhDCAHIA5B/////wdzSg0BIAcgDmohDgJAAkACQCAMIgctAAAiCQRAA0ACQAJAIAlB/wFxIgFFBEAgByEBDAELIAFBJUcNASAHIQkDQCAJLQABQSVHBEAgCSEBDAILIAdBAWohByAJLQACIQsgCUECaiIBIQkgC0ElRg0ACwsgByAMayIHIA5B/////wdzIhhKDQcgAARAIAAgDCAHEC0LIAcNBiAIIAE2AkwgAUEB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IgAgASgCCGooAgAhCCABKAIEIABqKAIAIQkgASgCACAAaigCACEKIAMoAgAhAEEAIQVBACELIAdBAUcEQANAIAAgBSAKai0AADoAACAAIAUgCWotAAA6AAEgACAFIAhqLQAAOgACIAAgCiAFQQFyIgZqLQAAOgADIAAgBiAJai0AADoABCAAIAYgCGotAAA6AAUgBUECaiEFIABBBmohACALQQJqIgsgDEcNAAsLIA0EQCAAIAUgCmotAAA6AAAgACAFIAlqLQAAOgABIAAgBSAIai0AADoAAgsgA0EEaiEDIAJBAWohAiAEQQFKIQAgBEEBayEEIAANAAsMBgsgBEEATA0FIAAoAnAiB0UNBSAHQX5xIQwgB0EBcSENA0AgAkECdCIAIAEoAghqKAIAIQggASgCBCAAaigCACEJIAEoAgAgAGooAgAhCiADKAIAIQBBACEFQQAhCyAHQQFHBEADQCAAIAUgCmotAAA6AAAgACAFIAlqLQAAOgABIAUgCGotAAAhBiAAQf8BOgADIAAgBjoAAiAAIAogBUEBciIGai0AADoABCAAIAYgCWotAAA6AAUgBiAIai0AACEGIABB/wE6AAcgACAGOgAGIAVBAmohBSAAQQhqIQAgC0ECaiILIAxHDQALCyANBEAgACAFIApqLQAAOgAAIAAgBSAJai0AADoAASAFIAhqLQAAIQUgAEH/AToAAyAAIAU6AAILIANBBGohAyACQQFqIQIgBEEBSiEAIARBAWshBCAADQALDAULIARBAEwNBCAAKAJwIgdFDQQgB0F+cSEMIAdBAXEhDQNAIAJBAnQiACABKAIIaigCACEIIAEoAgQgAGooAgAhCSABKAIAIABqKAIAIQogAygCACEAQQAhBUEAIQsgB0EBRwRAA0AgACAFIApqLQAAOgACIAAgBSAJai0AADoAASAAIAUgCGotAAA6AAAgACAKIAVBAXIiBmotAAA6AAUgACAGIAlqLQAAOgAEIAAgBiAIai0AADoAAyAFQQJqIQUgAEEGaiEAIAtBAmoiCyAMRw0ACwsgDQRAIAAgBSAKai0AADoAAiAAIAUgCWotAAA6AAEgACAFIAhqLQAAOgAACyADQQRqIQMgAkEBaiECIARBAUohACAEQQFrIQQgAA0ACwwECyAEQQBMDQMgACgCcCIHRQ0DIAdBfnEhDCAHQQFxIQ0DQCACQQJ0IgAgASgCCGooAgAhCCABKAIEIABqKAIAIQkgASgCACAAaigCACEKIAMoAgAhAEEAIQVBACELIAdBAUcEQANAIAAgBSAKai0AADoAAiAAIAUgCWotAAA6AAEgBSAIai0AACEGIABB/wE6AAMgACAGOgAAIAAgCiAFQQFyIgZqLQAAOgAGIAAgBiAJai0AADoABSAGIAhqLQAAIQYgAEH/AToAByAAIAY6AAQgBUECaiEFIABBCGohACALQQJqIgsgDEcNAAsLIA0EQCAAIAUgCmotAAA6AAIgACAFIAlqLQAAOgABIAUgCGotAAAhBSAAQf8BOgADIAAgBToAAAsgA0EEaiEDIAJBAWohAiAEQQFKIQAgBEEBayEEIAANAAsMAwsgBEEATA0CIAAoAnAiB0UNAiAHQX5xIQwgB0EBcSENA0AgAkECdCIAIAEoAghqKAIAIQggASgCBCAAaigCACEJIAEoAgAgAGooAgAhCiADKAIAIQBBACEFQQAhCyAHQQFHBEADQCAAIAUgCmotAAA6AAMgACAFIAlqLQAAOgACIAUgCGotAAAhBiAAQf8BOgAAIAAgBjoAASAAIAogBUEBciIGai0AADoAByAAIAYgCWotAAA6AAYgBiAIai0AACEGIABB/wE6AAQgACAGOgAFIAVBAmohBSAAQQhqIQAgC0ECaiILIAxHDQALCyANBEAgACAFIApqLQAAOgADIAAgBSAJai0AADoAAiAFIAhqLQAAIQUgAEH/AToAACAAIAU6AAELIANBBGohAyACQQFqIQIgBEEBSiEAIARBAWshBCAADQALDAILIARBAEwNASAAKAJwIgdFDQEgB0F+cSEMIAdBAXEhDQNAIAJBAnQiACABKAIIaigCACEIIAEoAgQgAGooAgAhCSABKAIAIABqKAIAIQogAygCACEAQQAhBUEAIQsgB0EBRwRAA0AgACAFIApqLQAAOgABIAAgBSAJai0AADoAAiAFIAhqLQAAIQYgAEH/AToAACAAIAY6AAMgACAKIAVBAXIiBmotAAA6AAUgACAGIAlqLQAAOgAGIAYgCGotAAAhBiAAQf8BOgAEIAAgBjoAByAFQQJqIQUgAEEIaiEAIAtBAmoiCyAMRw0ACwsgDQRAIAAgBSAKai0AADoAASAAIAUgCWotAAA6AAIgBSAIai0AACEFIABB/wE6AAAgACAFOgADCyADQQRqIQMgAkEBaiECIARBAUohACAEQQFrIQQgAA0ACwwBCyAEQQBMDQAgACgCcCIHRQ0AIAdBfnEhDCAHQQFxIQ0DQCACQQJ0IgAgASgCCGooAgAhCCABKAIEIABqKAIAIQkgASgCACAAaigCACEKIAMoAgAhAEEAIQVBACELIAdBAUcEQANAIAAgBSAKai0AADoAACAAIAUgCWotAAA6AAEgACAFIAhqLQAAOgACIAAgCiAFQQFyIgZqLQAAOgADIAAgBiAJai0AADoABCAAIAYgCGotAAA6AAUgBUECaiEFIABBBmohACALQQJqIgsgDEcNAAsLIA0EQCAAIAUgCmotAAA6AAAgACAFIAlqLQAAOgABIAAgBSAIai0AADoAAgsgA0EEaiEDIAJBAWohAiAEQQFKIQAgBEEBayEEIAANAAsLC9EHAQp/IAAoAnAhCAJAAkACQAJAIAAoAiQiB0EDaw4CAQACCyAEQQBMDQIgCEUNAiAIQX5xIQ0gCEEBcSEOA0AgAkECdCIAIAEoAgxqKAIAIQYgASgCCCAAaigCACEHIAEoAgQgAGooAgAhCSABKAIAIABqKAIAIQogAygCACEAQQAhBUEAIQwgCEEBRwRAA0AgACAFIApqLQAAOgAAIAAgBSAJai0AADoAASAAIAUgB2otAAA6AAIgACAFIAZqLQAAOgADIAAgCiAFQQFyIgtqLQAAOgAEIAAgCSALai0AADoABSAAIAcgC2otAAA6AAYgACAGIAtqLQAAOgAHIAVBAmohBSAAQQhqIQAgDEECaiIMIA1HDQALCyAOBEAgACAFIApqLQAAOgAAIAAgBSAJai0AADoAASAAIAUgB2otAAA6AAIgACAFIAZqLQAAOgADCyACQQFqIQIgA0EEaiEDIARBAUohACAEQQFrIQQgAA0ACwwCCyAEQQBMDQEgCEUNASAIQX5xIQwgCEEBcSENA0AgAkECdCIAIAEoAghqKAIAIQYgASgCBCAAaigCACEHIAEoAgAgAGooAgAhCSADKAIAIQBBACEFQQAhCiAIQQFHBEADQCAAIAUgCWotAAA6AAAgACAFIAdqLQAAOgABIAAgBSAGai0AADoAAiAAIAkgBUEBciILai0AADoAAyAAIAcgC2otAAA6AAQgACAGIAtqLQAAOgAFIAVBAmohBSAAQQZqIQAgCkECaiIKIAxHDQALCyANBEAgACAFIAlqLQAAOgAAIAAgBSAHai0AADoAASAAIAUgBmotAAA6AAILIAJBAWohAiADQQRqIQMgBEEBSiEAIARBAWshBCAADQALDAELIARBAEwNACAHQQBMDQAgCEUNACAIQXxxIQwgCEEDcSELIAhBAWtBA0khDQNAIARBAWshCEEAIQYDQCABIAZBAnRqKAIAIAJBAnRqKAIAIQkgAygCACEFQQAhAEEAIQogDUUEQANAIAUgBmogACAJai0AADoAACAFIAdqIgUgBmogCSAAQQFyai0AADoAACAFIAdqIgUgBmogCSAAQQJyai0AADoAACAFIAdqIgUgBmogCSAAQQNyai0AADoAACAAQQRqIQAgBSAHaiEFIApBBGoiCiAMRw0ACwtBACEKIAsEQANAIAUgBmogACAJai0AADoAACAAQQFqIQAgBSAHaiEFIApBAWoiCiALRw0ACwsgBkEBaiIGIAdHDQALIAJBAWohAiADQQRqIQMgBEEBSiEAIAghBCAADQALCwuJFAEIfwJAAkACQAJAAkACQAJAAkAgACgCLEEGaw4KAAECAwQFAQMEBQYLIARBAEwNBiAAKAJwIgBFDQYgAEF8cSELIABBA3EhCSAAQQFrQQNJIQwDQCABKAIAIAJBAnRqKAIAIQggAygCACEAQQAhCkEAIQZBACEHIAxFBEADQCAAIAYgCGotAAAiBToAASAAIAU6AAIgACAFOgAAIAAgCCAGQQFyai0AACIFOgAEIAAgBToABSAAIAU6AAMgACAIIAZBAnJqLQAAIgU6AAcgACAFOgAIIAAgBToABiAAIAggBkEDcmotAAAiBToACiAAIAU6AAsgACAFOgAJIAZBBGohBiAAQQxqIQAgB0EEaiIHIAtHDQALCyAJBEADQCAAIAYgCGotAAAiBzoAASAAIAc6AAIgACAHOgAAIAZBAWohBiAAQQNqIQAgCkEBaiIKIAlHDQALCyADQQRqIQMgAkEBaiECIARBAUohACAEQQFrIQQgAA0ACwwGCyAEQQBMDQUgACgCcCIARQ0FIABBfHEhCyAAQQNxIQkgAEEBa0EDSSEMA0AgASgCACACQQJ0aigCACEIIAMoAgAhAEEAIQpBACEGQQAhByAMRQRAA0AgACAGIAhqLQAAIgU6AAEgACAFOgACIABB/wE6AAMgACAFOgAAIAAgCCAGQQFyai0AACIFOgAFIAAgBToABiAAQf8BOgAHIAAgBToABCAAIAggBkECcmotAAAiBToACSAAIAU6AAogAEH/AToACyAAIAU6AAggACAIIAZBA3JqLQAAIgU6AA0gACAFOgAOIABB/wE6AA8gACAFOgAMIAZBBGohBiAAQRBqIQAgB0EEaiIHIAtHDQALCyAJBEADQCAAIAYgCGotAAAiBzoAASAAIAc6AAIgAEH/AToAAyAAIAc6AAAgBkEBaiEGIABBBGohACAKQQFqIgogCUcNAAsLIANBBGohAyACQQFqIQIgBEEBSiEAIARBAWshBCAADQALDAULIARBAEwNBCAAKAJwIgBFDQQgAEF8cSELIABBA3EhCSAAQQFrQQNJIQwDQCABKAIAIAJBAnRqKAIAIQggAygCACEAQQAhCkEAIQZBACEHIAxFBEADQCAAIAYgCGotAAAiBToAAiAAIAU6AAEgACAFOgAAIAAgCCAGQQFyai0AACIFOgAFIAAgBToABCAAIAU6AAMgACAIIAZBAnJqLQAAIgU6AAggACAFOgAHIAAgBToABiAAIAggBkEDcmotAAAiBToACyAAIAU6AAogACAFOgAJIAZBBGohBiAAQQxqIQAgB0EEaiIHIAtHDQALCyAJBEADQCAAIAYgCGotAAAiBzoAAiAAIAc6AAEgACAHOgAAIAZBAWohBiAAQQNqIQAgCkEBaiIKIAlHDQALCyADQQRqIQMgAkEBaiECIARBAUohACAEQQFrIQQgAA0ACwwECyAEQQBMDQMgACgCcCIARQ0DIABBfHEhCyAAQQNxIQUgAEEBa0EDSSEMA0AgASgCACACQQJ0aigCACEIIAMoAgAhAEEAIQpBACEGQQAhByAMRQRAA0AgBiAIai0AACEJIABB/wE6AAMgACAJOgACIAAgCToAASAAIAk6AAAgCCAGQQFyai0AACEJIABB/wE6AAcgACAJOgAGIAAgCToABSAAIAk6AAQgCCAGQQJyai0AACEJIABB/wE6AAsgACAJOgAKIAAgCToACSAAIAk6AAggCCAGQQNyai0AACEJIABB/wE6AA8gACAJOgAOIAAgCToADSAAIAk6AAwgBkEEaiEGIABBEGohACAHQQRqIgcgC0cNAAsLIAUEQANAIAYgCGotAAAhByAAQf8BOgADIAAgBzoAAiAAIAc6AAEgACAHOgAAIAZBAWohBiAAQQRqIQAgCkEBaiIKIAVHDQALCyADQQRqIQMgAkEBaiECIARBAUohACAEQQFrIQQgAA0ACwwDCyAEQQBMDQIgACgCcCIARQ0CIABBfHEhCyAAQQNxIQkgAEEBa0EDSSEMA0AgASgCACACQQJ0aigCACEIIAMoAgAhAEEAIQpBACEGQQAhByAMRQRAA0AgACAGIAhqLQAAIgU6AAMgACAFOgACIAAgBToAASAAQf8BOgAAIAAgCCAGQQFyai0AACIFOgAHIAAgBToABiAAIAU6AAUgAEH/AToABCAAIAggBkECcmotAAAiBToACyAAIAU6AAogACAFOgAJIABB/wE6AAggACAIIAZBA3JqLQAAIgU6AA8gACAFOgAOIAAgBToADSAAQf8BOgAMIAZBBGohBiAAQRBqIQAgB0EEaiIHIAtHDQALCyAJBEADQCAAIAYgCGotAAAiBzoAAyAAIAc6AAIgACAHOgABIABB/wE6AAAgBkEBaiEGIABBBGohACAKQQFqIgogCUcNAAsLIANBBGohAyACQQFqIQIgBEEBSiEAIARBAWshBCAADQALDAILIARBAEwNASAAKAJwIgBFDQEgAEF8cSELIABBA3EhCSAAQQFrQQNJIQwDQCABKAIAIAJBAnRqKAIAIQggAygCACEAQQAhCkEAIQZBACEHIAxFBEADQCAAIAYgCGotAAAiBToAAiAAIAU6AAMgACAFOgABIABB/wE6AAAgACAIIAZBAXJqLQAAIgU6AAYgACAFOgAHIAAgBToABSAAQf8BOgAEIAAgCCAGQQJyai0AACIFOgAKIAAgBToACyAAIAU6AAkgAEH/AToACCAAIAggBkEDcmotAAAiBToADiAAIAU6AA8gACAFOgANIABB/wE6AAwgBkEEaiEGIABBEGohACAHQQRqIgcgC0cNAAsLIAkEQANAIAAgBiAIai0AACIHOgACIAAgBzoAAyAAIAc6AAEgAEH/AToAACAGQQFqIQYgAEEEaiEAIApBAWoiCiAJRw0ACwsgA0EEaiEDIAJBAWohAiAEQQFKIQAgBEEBayEEIAANAAsMAQsgBEEATA0AIAAoAnAiAEUNACAAQXxxIQsgAEEDcSEJIABBAWtBA0khDANAIAEoAgAgAkECdGooAgAhCCADKAIAIQBBACEKQQAhBkEAIQcgDEUEQANAIAAgBiAIai0AACIFOgABIAAgBToAAiAAIAU6AAAgACAIIAZBAXJqLQAAIgU6AAQgACAFOgAFIAAgBToAAyAAIAggBkECcmotAAAiBToAByAAIAU6AAggACAFOgAGIAAgCCAGQQNyai0AACIFOgAKIAAgBToACyAAIAU6AAkgBkEEaiEGIABBDGohACAHQQRqIgcgC0cNAAsLIAkEQANAIAAgBiAIai0AACIHOgABIAAgBzoAAiAAIAc6AAAgBkEBaiEGIABBA2ohACAKQQFqIgogCUcNAAsLIANBBGohAyACQQFqIQIgBEEBSiEAIARBAWshBCAADQALCwuqEAENfwJAAkACQAJAAkACQAJAAkAgACgCLEEGaw4KAAECAwQFAQMEBQYLIARBAEwNBiAAKAJwIglFDQYgACgCxAIhByAAKALIAyIAKAIUIQogACgCECELIAAoAgwhDCAAKAIIIQ0DQCACQQJ0IgAgASgCCGooAgAhDiABKAIEIABqKAIAIQ8gASgCACAAaigCACEQIAMoAgAhAEEAIQUDQCAFIA9qLQAAIQggACAHIAUgEGotAAAiBiANIAUgDmotAABBAnQiEWooAgBqai0AADoAACAAIAcgBiALIBFqKAIAIAogCEECdCIIaigCAGpBEHVqai0AADoAASAAIAcgBiAIIAxqKAIAamotAAA6AAIgAEEDaiEAIAVBAWoiBSAJRw0ACyADQQRqIQMgAkEBaiECIARBAUohACAEQQFrIQQgAA0ACwwGCyAEQQBMDQUgACgCcCIJRQ0FIAAoAsQCIQcgACgCyAMiACgCFCEKIAAoAhAhCyAAKAIMIQwgACgCCCENA0AgAkECdCIAIAEoAghqKAIAIQ4gASgCBCAAaigCACEPIAEoAgAgAGooAgAhECADKAIAIQBBACEFA0AgBSAPai0AACEIIAAgByAFIBBqLQAAIgYgDSAFIA5qLQAAQQJ0IhFqKAIAamotAAA6AAAgACAHIAYgCyARaigCACAKIAhBAnQiCGooAgBqQRB1amotAAA6AAEgByAGIAggDGooAgBqai0AACEGIABB/wE6AAMgACAGOgACIABBBGohACAFQQFqIgUgCUcNAAsgA0EEaiEDIAJBAWohAiAEQQFKIQAgBEEBayEEIAANAAsMBQsgBEEATA0EIAAoAnAiCUUNBCAAKALEAiEHIAAoAsgDIgAoAhQhCiAAKAIQIQsgACgCDCEMIAAoAgghDQNAIAJBAnQiACABKAIIaigCACEOIAEoAgQgAGooAgAhDyABKAIAIABqKAIAIRAgAygCACEAQQAhBQNAIAUgD2otAAAhCCAAIAcgBSAQai0AACIGIA0gBSAOai0AAEECdCIRaigCAGpqLQAAOgACIAAgByAGIAsgEWooAgAgCiAIQQJ0IghqKAIAakEQdWpqLQAAOgABIAAgByAGIAggDGooAgBqai0AADoAACAAQQNqIQAgBUEBaiIFIAlHDQALIANBBGohAyACQQFqIQIgBEEBSiEAIARBAWshBCAADQALDAQLIARBAEwNAyAAKAJwIglFDQMgACgCxAIhByAAKALIAyIAKAIUIQogACgCECELIAAoAgwhDCAAKAIIIQ0DQCACQQJ0IgAgASgCCGooAgAhDiABKAIEIABqKAIAIQ8gASgCACAAaigCACEQIAMoAgAhAEEAIQUDQCAFIA9qLQAAIQggACAHIAUgEGotAAAiBiANIAUgDmotAABBAnQiEWooAgBqai0AADoAAiAAIAcgBiALIBFqKAIAIAogCEECdCIIaigCAGpBEHVqai0AADoAASAHIAYgCCAMaigCAGpqLQAAIQYgAEH/AToAAyAAIAY6AAAgAEEEaiEAIAVBAWoiBSAJRw0ACyADQQRqIQMgAkEBaiECIARBAUohACAEQQFrIQQgAA0ACwwDCyAEQQBMDQIgACgCcCIJRQ0CIAAoAsQCIQcgACgCyAMiACgCFCEKIAAoAhAhCyAAKAIMIQwgACgCCCENA0AgAkECdCIAIAEoAghqKAIAIQ4gASgCBCAAaigCACEPIAEoAgAgAGooAgAhECADKAIAIQBBACEFA0AgBSAPai0AACEIIAAgByAFIBBqLQAAIgYgDSAFIA5qLQAAQQJ0IhFqKAIAamotAAA6AAMgACAHIAYgCyARaigCACAKIAhBAnQiCGooAgBqQRB1amotAAA6AAIgByAGIAggDGooAgBqai0AACEGIABB/wE6AAAgACAGOgABIABBBGohACAFQQFqIgUgCUcNAAsgA0EEaiEDIAJBAWohAiAEQQFKIQAgBEEBayEEIAANAAsMAgsgBEEATA0BIAAoAnAiCUUNASAAKALEAiEHIAAoAsgDIgAoAhQhCiAAKAIQIQsgACgCDCEMIAAoAgghDQNAIAJBAnQiACABKAIIaigCACEOIAEoAgQgAGooAgAhDyABKAIAIABqKAIAIRAgAygCACEAQQAhBQNAIAUgD2otAAAhCCAAIAcgBSAQai0AACIGIA0gBSAOai0AAEECdCIRaigCAGpqLQAAOgABIAAgByAGIAsgEWooAgAgCiAIQQJ0IghqKAIAakEQdWpqLQAAOgACIAcgBiAIIAxqKAIAamotAAAhBiAAQf8BOgAAIAAgBjoAAyAAQQRqIQAgBUEBaiIFIAlHDQALIANBBGohAyACQQFqIQIgBEEBSiEAIARBAWshBCAADQALDAELIARBAEwNACAAKAJwIglFDQAgACgCxAIhByAAKALIAyIAKAIUIQogACgCECELIAAoAgwhDCAAKAIIIQ0DQCACQQJ0IgAgASgCCGooAgAhDiABKAIEIABqKAIAIQ8gASgCACAAaigCACEQIAMoAgAhAEEAIQUDQCAFIA9qLQAAIQggACAHIAUgEGotAAAiBiANIAUgDmotAABBAnQiEWooAgBqai0AADoAACAAIAcgBiALIBFqKAIAIAogCEECdCIIaigCAGpBEHVqai0AADoAASAAIAcgBiAIIAxqKAIAamotAAA6AAIgAEEDaiEAIAVBAWoiBSAJRw0ACyADQQRqIQMgAkEBaiECIARBAUohACAEQQFrIQQgAA0ACwsL3AEBB38CQCAEQQBMDQAgACgCcCIHRQ0AIAAoAsgDKAIYIQUDQCACQQFqIQAgBEEBayEIIAJBAnQiAiABKAIIaigCACEGIAEoAgQgAmooAgAhCSABKAIAIAJqKAIAIQogAygCACELQQAhAgNAIAIgC2ogBSACIAZqLQAAQQJ0akGAEGooAgAgBSACIAlqLQAAQQJ0akGACGooAgAgBSACIApqLQAAQQJ0aigCAGpqQRB2OgAAIAJBAWoiAiAHRw0ACyADQQRqIQMgBEEBSiEGIAghBCAAIQIgBg0ACwsLFgAgASgCACACIANBACAEIAAoAnAQRgvQAwEOfyACQQJ0IgIgASgCCGooAgAhBiABKAIEIAJqKAIAIQcgASgCACACaigCACECIAAoAsQCIQEgAygCACEDIAAoAsQDIgQoAhwhCiAEKAIYIQsgBCgCFCEMIAQoAhAhBCAAKAJwIgBBAk8EQCAAQQF2IQ0DQCABIAsgBi0AAEECdCIIaigCACAKIActAABBAnQiCWooAgBqQRB1Ig4gAi0AACIFamotAAAhDyABIAkgDGooAgAiCSAFamotAAAhECABIAQgCGooAgAiCCAFamotAAAhESADIAEgDiACLQABIgVqai0AAEEDdEHgD3EgASAFIAhqai0AAEEIdEGA8ANxciABIAUgCWpqLQAAQQN2cjsBAiADIA9BA3RB4A9xIBFBCHRBgPADcXIgEEEDdnI7AQAgA0EEaiEDIAJBAmohAiAGQQFqIQYgB0EBaiEHIA1BAWsiDQ0ACwsgAEEBcQRAIAMgASACLQAAIgAgCyAGLQAAQQJ0IgJqKAIAIAogBy0AAEECdCIDaigCAGpBEHVqai0AAEEDdEHgD3EgASACIARqKAIAIABqai0AAEEIdEGA8ANxciABIAMgDGooAgAgAGpqLQAAQQN2cjsBAAsLowQBEH8gAkECdCICIAEoAghqKAIAIQcgASgCBCACaigCACEIIAEoAgAgAmooAgAhAiAAKAKMAUEDcUECdEGg1QBqKAIAIQQgACgCxAIhASADKAIAIQMgACgCxAMiBigCHCEMIAYoAhghDSAGKAIUIQ4gBigCECEGIAAoAnAiD0ECTwRAIA9BAXYhAANAIAEgBEH/AXEiCSACLQAAIgVqIgogDiAILQAAQQJ0IgtqKAIAIhBqai0AACERIAEgBSANIActAABBAnQiBWooAgAgCyAMaigCAGpBEHUiCyAJQQF2ampqLQAAIQkgASAKIAUgBmooAgAiBWpqLQAAIQogAyABIAItAAEiEiALIARBCHZB/wFxIhNBAXZqamotAABBA3RB4A9xIAEgBSASIBNqIgVqai0AAEEIdEGA8ANxciABIAUgEGpqLQAAQQN2cjsBAiADIAlBA3RB4A9xIApBCHRBgPADcXIgEUEDdnI7AQAgA0EEaiEDIARBEHchBCACQQJqIQIgB0EBaiEHIAhBAWohCCAAQQFrIgANAAsLIA9BAXEEQCADIAEgAi0AACIAIA0gBy0AAEECdCICaigCACAMIAgtAABBAnQiA2ooAgBqQRB1IARB/wFxIgRBAXZqamotAABBA3RB4A9xIAEgACAEaiIAIAIgBmooAgBqai0AAEEIdEGA8ANxciABIAAgAyAOaigCAGpqLQAAQQN2cjsBAAsL+RkBDH8CQAJAAkACQAJAAkACQAJAIAAoAixBBmsOCgABAgMEBQEDBAUGCyACQQJ0IgIgASgCCGooAgAhBiABKAIEIAJqKAIAIQcgASgCACACaigCACECIAAoAsQCIQQgAygCACEBIAAoAsQDIgMoAhwhCCADKAIYIQwgAygCFCENIAMoAhAhDiAAKAJwIgNBAk8EfyADQQF2IQMDQCANIActAABBAnQiBWooAgAhCSAMIAYtAABBAnQiCmooAgAhCyAFIAhqKAIAIQ8gASAEIAogDmooAgAiCiACLQAAIgVqai0AADoAACABIAQgBSALIA9qQRB1Igtqai0AADoAASABIAQgBSAJamotAAA6AAIgASAEIAogAi0AASIFamotAAA6AAMgASAEIAUgC2pqLQAAOgAEIAEgBCAFIAlqai0AADoABSABQQZqIQEgAkECaiECIAZBAWohBiAHQQFqIQcgA0EBayIDDQALIAAoAnAFIAMLQQFxRQ0GIA0gBy0AAEECdCIAaigCACEDIAwgBi0AAEECdCIGaigCACEHIAAgCGooAgAhCCABIAQgAi0AACIAIAYgDmooAgBqai0AADoAACABIAQgACAHIAhqQRB1amotAAA6AAEgASAEIAAgA2pqLQAAOgACDwsgAkECdCICIAEoAghqKAIAIQYgASgCBCACaigCACEHIAEoAgAgAmooAgAhAiAAKALEAiEEIAMoAgAhASAAKALEAyIDKAIcIQggAygCGCEMIAMoAhQhDSADKAIQIQ4gACgCcCIDQQJPBH8gA0EBdiEDA0AgDSAHLQAAQQJ0IgVqKAIAIQkgDCAGLQAAQQJ0IgpqKAIAIQsgBSAIaigCACEPIAEgBCAKIA5qKAIAIgogAi0AACIFamotAAA6AAAgASAEIAUgCyAPakEQdSILamotAAA6AAEgBCAFIAlqai0AACEFIAFB/wE6AAMgASAFOgACIAEgBCAKIAItAAEiBWpqLQAAOgAEIAEgBCAFIAtqai0AADoABSAEIAUgCWpqLQAAIQkgAUH/AToAByABIAk6AAYgAUEIaiEBIAJBAmohAiAGQQFqIQYgB0EBaiEHIANBAWsiAw0ACyAAKAJwBSADC0EBcUUNBSANIActAABBAnQiAGooAgAhAyAMIAYtAABBAnQiBmooAgAhByAAIAhqKAIAIQggASAEIAItAAAiACAGIA5qKAIAamotAAA6AAAgASAEIAAgByAIakEQdWpqLQAAOgABIAQgACADamotAAAhACABQf8BOgADIAEgADoAAg8LIAJBAnQiAiABKAIIaigCACEGIAEoAgQgAmooAgAhByABKAIAIAJqKAIAIQIgACgCxAIhBCADKAIAIQEgACgCxAMiAygCHCEIIAMoAhghDCADKAIUIQ0gAygCECEOIAAoAnAiA0ECTwR/IANBAXYhAwNAIA0gBy0AAEECdCIFaigCACEJIAwgBi0AAEECdCIKaigCACELIAUgCGooAgAhDyABIAQgCiAOaigCACIKIAItAAAiBWpqLQAAOgACIAEgBCAFIAsgD2pBEHUiC2pqLQAAOgABIAEgBCAFIAlqai0AADoAACABIAQgCiACLQABIgVqai0AADoABSABIAQgBSALamotAAA6AAQgASAEIAUgCWpqLQAAOgADIAFBBmohASACQQJqIQIgBkEBaiEGIAdBAWohByADQQFrIgMNAAsgACgCcAUgAwtBAXFFDQQgDSAHLQAAQQJ0IgBqKAIAIQMgDCAGLQAAQQJ0IgZqKAIAIQcgACAIaigCACEIIAEgBCACLQAAIgAgBiAOaigCAGpqLQAAOgACIAEgBCAAIAcgCGpBEHVqai0AADoAASABIAQgACADamotAAA6AAAPCyACQQJ0IgIgASgCCGooAgAhBiABKAIEIAJqKAIAIQcgASgCACACaigCACECIAAoAsQCIQQgAygCACEBIAAoAsQDIgMoAhwhCCADKAIYIQwgAygCFCENIAMoAhAhDiAAKAJwIgNBAk8EfyADQQF2IQMDQCANIActAABBAnQiBWooAgAhCSAMIAYtAABBAnQiCmooAgAhCyAFIAhqKAIAIQ8gASAEIAogDmooAgAiCiACLQAAIgVqai0AADoAAiABIAQgBSALIA9qQRB1Igtqai0AADoAASAEIAUgCWpqLQAAIQUgAUH/AToAAyABIAU6AAAgASAEIAogAi0AASIFamotAAA6AAYgASAEIAUgC2pqLQAAOgAFIAQgBSAJamotAAAhCSABQf8BOgAHIAEgCToABCABQQhqIQEgAkECaiECIAZBAWohBiAHQQFqIQcgA0EBayIDDQALIAAoAnAFIAMLQQFxRQ0DIA0gBy0AAEECdCIAaigCACEDIAwgBi0AAEECdCIGaigCACEHIAAgCGooAgAhCCABIAQgAi0AACIAIAYgDmooAgBqai0AADoAAiABIAQgACAHIAhqQRB1amotAAA6AAEgBCAAIANqai0AACEAIAFB/wE6AAMgASAAOgAADwsgAkECdCICIAEoAghqKAIAIQYgASgCBCACaigCACEHIAEoAgAgAmooAgAhAiAAKALEAiEEIAMoAgAhASAAKALEAyIDKAIcIQggAygCGCEMIAMoAhQhDSADKAIQIQ4gACgCcCIDQQJPBH8gA0EBdiEDA0AgDSAHLQAAQQJ0IgVqKAIAIQkgDCAGLQAAQQJ0IgpqKAIAIQsgBSAIaigCACEPIAEgBCAKIA5qKAIAIgogAi0AACIFamotAAA6AAMgASAEIAUgCyAPakEQdSILamotAAA6AAIgBCAFIAlqai0AACEFIAFB/wE6AAAgASAFOgABIAEgBCAKIAItAAEiBWpqLQAAOgAHIAEgBCAFIAtqai0AADoABiAEIAUgCWpqLQAAIQkgAUH/AToABCABIAk6AAUgAUEIaiEBIAJBAmohAiAGQQFqIQYgB0EBaiEHIANBAWsiAw0ACyAAKAJwBSADC0EBcUUNAiANIActAABBAnQiAGooAgAhAyAMIAYtAABBAnQiBmooAgAhByAAIAhqKAIAIQggASAEIAItAAAiACAGIA5qKAIAamotAAA6AAMgASAEIAAgByAIakEQdWpqLQAAOgACIAQgACADamotAAAhACABQf8BOgAAIAEgADoAAQ8LIAJBAnQiAiABKAIIaigCACEGIAEoAgQgAmooAgAhByABKAIAIAJqKAIAIQIgACgCxAIhBCADKAIAIQEgACgCxAMiAygCHCEIIAMoAhghDCADKAIUIQ0gAygCECEOIAAoAnAiA0ECTwR/IANBAXYhAwNAIA0gBy0AAEECdCIFaigCACEJIAwgBi0AAEECdCIKaigCACELIAUgCGooAgAhDyABIAQgCiAOaigCACIKIAItAAAiBWpqLQAAOgABIAEgBCAFIAsgD2pBEHUiC2pqLQAAOgACIAQgBSAJamotAAAhBSABQf8BOgAAIAEgBToAAyABIAQgCiACLQABIgVqai0AADoABSABIAQgBSALamotAAA6AAYgBCAFIAlqai0AACEJIAFB/wE6AAQgASAJOgAHIAFBCGohASACQQJqIQIgBkEBaiEGIAdBAWohByADQQFrIgMNAAsgACgCcAUgAwtBAXFFDQEgDSAHLQAAQQJ0IgBqKAIAIQMgDCAGLQAAQQJ0IgZqKAIAIQcgACAIaigCACEIIAEgBCACLQAAIgAgBiAOaigCAGpqLQAAOgABIAEgBCAAIAcgCGpBEHVqai0AADoAAiAEIAAgA2pqLQAAIQAgAUH/AToAACABIAA6AAMPCyACQQJ0IgIgASgCCGooAgAhBiABKAIEIAJqKAIAIQcgASgCACACaigCACECIAAoAsQCIQQgAygCACEBIAAoAsQDIgMoAhwhCCADKAIYIQwgAygCFCENIAMoAhAhDiAAKAJwIgNBAk8EfyADQQF2IQMDQCANIActAABBAnQiBWooAgAhCSAMIAYtAABBAnQiCmooAgAhCyAFIAhqKAIAIQ8gASAEIAogDmooAgAiCiACLQAAIgVqai0AADoAACABIAQgBSALIA9qQRB1Igtqai0AADoAASABIAQgBSAJamotAAA6AAIgASAEIAogAi0AASIFamotAAA6AAMgASAEIAUgC2pqLQAAOgAEIAEgBCAFIAlqai0AADoABSABQQZqIQEgAkECaiECIAZBAWohBiAHQQFqIQcgA0EBayIDDQALIAAoAnAFIAMLQQFxRQ0AIA0gBy0AAEECdCIAaigCACEDIAwgBi0AAEECdCIGaigCACEHIAAgCGooAgAhCCABIAQgAi0AACIAIAYgDmooAgBqai0AADoAACABIAQgACAHIAhqQRB1amotAAA6AAEgASAEIAAgA2pqLQAAOgACCws8ACAAIAEgAigCACAEIAUoAgBBAnRqIAAoAsQDKAIMEQUAIAUgBSgCAEEBajYCACACIAIoAgBBAWo2AgALwAUBEH8gAygCBCEKIAJBAnQiBiABKAIIaigCACEHIAEoAgQgBmooAgAhCCABKAIAIAJBA3RqIgEoAgAhAiABKAIEIQYgACgCxAIhASADKAIAIQMgACgCxAMiBSgCHCEOIAUoAhghDyAFKAIUIRAgBSgCECERIAAoAnAiEkECTwRAIBJBAXYhEwNAIAEgDyAHLQAAQQJ0IgRqKAIAIA4gCC0AAEECdCIFaigCAGpBEHUiACACLQAAIglqai0AACELIAEgBSAQaigCACIFIAlqai0AACEMIAEgCSAEIBFqKAIAIglqai0AACENIAMgASAAIAItAAEiBGpqLQAAQQN0QeAPcSABIAQgCWpqLQAAQQh0QYDwA3FyIAEgBCAFamotAABBA3ZyOwECIAMgC0EDdEHgD3EgDUEIdEGA8ANxciAMQQN2cjsBACABIAAgBi0AACIEamotAAAhCyABIAQgBWpqLQAAIQwgASAEIAlqai0AACENIAogASAAIAYtAAEiBGpqLQAAQQN0QeAPcSABIAQgCWpqLQAAQQh0QYDwA3FyIAEgBCAFamotAABBA3ZyOwECIAogC0EDdEHgD3EgDUEIdEGA8ANxciAMQQN2cjsBACAKQQRqIQogBkECaiEGIANBBGohAyACQQJqIQIgB0EBaiEHIAhBAWohCCATQQFrIhMNAAsLIBJBAXEEQCADIAEgDyAHLQAAQQJ0IgNqKAIAIA4gCC0AAEECdCIHaigCAGpBEHUiCCACLQAAIgBqai0AAEEDdEHgD3EgASADIBFqKAIAIgIgAGpqLQAAQQh0QYDwA3FyIAEgByAQaigCACIDIABqai0AAEEDdnI7AQAgCiABIAggBi0AACIAamotAABBA3RB4A9xIAEgACACamotAABBCHRBgPADcXIgASAAIANqai0AAEEDdnI7AQALC+cGARN/IAMoAgQhBSACQQJ0IgYgASgCCGooAgAhCyABKAIEIAZqKAIAIQ8gASgCACACQQN0aiIBKAIAIQIgASgCBCEGIAAoAowBIgFBA3FBAnRBoNUAaigCACEHIAFBAWpBA3FBAnRBoNUAaigCACEMIAAoAsQCIQEgAygCACEDIAAoAsQDIgQoAhwhESAEKAIYIRIgBCgCFCETIAQoAhAhFCAAKAJwIhVBAk8EQCAVQQF2IRYDQCABIAdB/wFxIg0gAi0AACIEaiIIIBMgDy0AAEECdCIJaigCACIAamotAAAhDiABIAQgEiALLQAAQQJ0IgpqKAIAIAkgEWooAgBqQRB1IgQgDUEBdmpqai0AACEJIAEgCCAKIBRqKAIAIg1qai0AACEIIAMgASACLQABIgogBCAHQQh2Qf8BcSIQQQF2ampqLQAAQQN0QeAPcSABIAogEGoiCiANamotAABBCHRBgPADcXIgASAAIApqai0AAEEDdnI7AQIgAyAJQQN0QeAPcSAIQQh0QYDwA3FyIA5BA3ZyOwEAIAEgACAMQf8BcSIIIAYtAAAiCWoiDmpqLQAAIQogASANIA5qai0AACEOIAEgBCAIQQF2aiAJamotAAAhCCAFIAEgBi0AASIJIAQgDEEIdkH/AXEiEEEBdmpqai0AAEEDdEHgD3EgASANIAkgEGoiBGpqLQAAQQh0QYDwA3FyIAEgACAEamotAABBA3ZyOwECIAUgCEEDdEHgD3EgDkEIdEGA8ANxciAKQQN2cjsBACAFQQRqIQUgDEEQdyEMIAZBAmohBiADQQRqIQMgB0EQdyEHIAJBAmohAiALQQFqIQsgD0EBaiEPIBZBAWsiFg0ACwsgFUEBcQRAIAMgASACLQAAIgAgEiALLQAAQQJ0IgJqKAIAIBEgDy0AAEECdCIDaigCAGpBEHUiCyAHQf8BcSIHQQF2ampqLQAAQQN0QeAPcSABIAAgB2oiACACIBRqKAIAIgJqai0AAEEIdEGA8ANxciABIAAgAyATaigCACIDamotAABBA3ZyOwEAIAUgASAGLQAAIgAgCyAMQf8BcSIFQQF2ampqLQAAQQN0QeAPcSABIAIgACAFaiIAamotAABBCHRBgPADcXIgASAAIANqai0AAEEDdnI7AQALC+UlAQ5/AkACQAJAAkACQAJAAkACQCAAKAIsQQZrDgoAAQIDBAUBAwQFBgsgAygCBCEFIAJBAnQiBiABKAIIaigCACEKIAEoAgQgBmooAgAhCyABKAIAIAJBA3RqIgEoAgAhByABKAIEIQggACgCxAIhBCADKAIAIQMgACgCxAMiASgCHCEOIAEoAhghDyABKAIUIQkgASgCECEQIAAoAnAiAkECTwR/IAJBAXYhEQNAIAkgCy0AAEECdCIBaigCACEMIA8gCi0AAEECdCIGaigCACECIAEgDmooAgAhASADIAQgBiAQaigCACINIActAAAiBmpqLQAAOgAAIAMgBCAGIAEgAmpBEHUiAmpqLQAAOgABIAMgBCAGIAxqai0AADoAAiADIAQgDSAHLQABIgFqai0AADoAAyADIAQgASACamotAAA6AAQgAyAEIAEgDGpqLQAAOgAFIAUgBCANIAgtAAAiAWpqLQAAOgAAIAUgBCABIAJqai0AADoAASAFIAQgASAMamotAAA6AAIgBSAEIA0gCC0AASIBamotAAA6AAMgBSAEIAEgAmpqLQAAOgAEIAUgBCABIAxqai0AADoABSAFQQZqIQUgCEECaiEIIANBBmohAyAHQQJqIQcgCkEBaiEKIAtBAWohCyARQQFrIhENAAsgACgCcAUgAgtBAXFFDQYgCSALLQAAQQJ0IgBqKAIAIQkgDyAKLQAAQQJ0IgFqKAIAIQIgACAOaigCACEAIAMgBCABIBBqKAIAIgEgBy0AACIGamotAAA6AAAgAyAEIAYgACACakEQdSIAamotAAA6AAEgAyAEIAYgCWpqLQAAOgACIAUgBCABIAgtAAAiAmpqLQAAOgAAIAUgBCAAIAJqai0AADoAASAFIAQgAiAJamotAAA6AAIPCyADKAIEIQUgAkECdCIGIAEoAghqKAIAIQogASgCBCAGaigCACELIAEoAgAgAkEDdGoiASgCACEHIAEoAgQhCCAAKALEAiEEIAMoAgAhAyAAKALEAyIBKAIcIQ4gASgCGCEPIAEoAhQhCSABKAIQIRAgACgCcCICQQJPBH8gAkEBdiERA0AgCSALLQAAQQJ0IgFqKAIAIQwgDyAKLQAAQQJ0IgZqKAIAIQIgASAOaigCACEBIAMgBCAGIBBqKAIAIg0gBy0AACIGamotAAA6AAAgAyAEIAYgASACakEQdSICamotAAA6AAEgBCAGIAxqai0AACEBIANB/wE6AAMgAyABOgACIAMgBCANIActAAEiAWpqLQAAOgAEIAMgBCABIAJqai0AADoABSAEIAEgDGpqLQAAIQEgA0H/AToAByADIAE6AAYgBSAEIA0gCC0AACIBamotAAA6AAAgBSAEIAEgAmpqLQAAOgABIAQgASAMamotAAAhASAFQf8BOgADIAUgAToAAiAFIAQgDSAILQABIgFqai0AADoABCAFIAQgASACamotAAA6AAUgBCABIAxqai0AACEBIAVB/wE6AAcgBSABOgAGIAVBCGohBSAIQQJqIQggA0EIaiEDIAdBAmohByAKQQFqIQogC0EBaiELIBFBAWsiEQ0ACyAAKAJwBSACC0EBcUUNBSAJIAstAABBAnQiAGooAgAhCSAPIAotAABBAnQiAmooAgAhASAAIA5qKAIAIQAgAyAEIAIgEGooAgAiAiAHLQAAIgZqai0AADoAACADIAQgBiAAIAFqQRB1IgFqai0AADoAASAEIAYgCWpqLQAAIQAgA0H/AToAAyADIAA6AAIgBSAEIAIgCC0AACIAamotAAA6AAAgBSAEIAAgAWpqLQAAOgABIAQgACAJamotAAAhACAFQf8BOgADIAUgADoAAg8LIAMoAgQhBSACQQJ0IgYgASgCCGooAgAhCiABKAIEIAZqKAIAIQsgASgCACACQQN0aiIBKAIAIQcgASgCBCEIIAAoAsQCIQQgAygCACEDIAAoAsQDIgEoAhwhDiABKAIYIQ8gASgCFCEJIAEoAhAhECAAKAJwIgJBAk8EfyACQQF2IREDQCAJIAstAABBAnQiAWooAgAhDCAPIAotAABBAnQiBmooAgAhAiABIA5qKAIAIQEgAyAEIAYgEGooAgAiDSAHLQAAIgZqai0AADoAAiADIAQgBiABIAJqQRB1IgJqai0AADoAASADIAQgBiAMamotAAA6AAAgAyAEIA0gBy0AASIBamotAAA6AAUgAyAEIAEgAmpqLQAAOgAEIAMgBCABIAxqai0AADoAAyAFIAQgDSAILQAAIgFqai0AADoAAiAFIAQgASACamotAAA6AAEgBSAEIAEgDGpqLQAAOgAAIAUgBCANIAgtAAEiAWpqLQAAOgAFIAUgBCABIAJqai0AADoABCAFIAQgASAMamotAAA6AAMgBUEGaiEFIAhBAmohCCADQQZqIQMgB0ECaiEHIApBAWohCiALQQFqIQsgEUEBayIRDQALIAAoAnAFIAILQQFxRQ0EIAkgCy0AAEECdCIAaigCACEJIA8gCi0AAEECdCIBaigCACECIAAgDmooAgAhACADIAQgASAQaigCACIBIActAAAiBmpqLQAAOgACIAMgBCAGIAAgAmpBEHUiAGpqLQAAOgABIAMgBCAGIAlqai0AADoAACAFIAQgASAILQAAIgJqai0AADoAAiAFIAQgACACamotAAA6AAEgBSAEIAIgCWpqLQAAOgAADwsgAygCBCEFIAJBAnQiBiABKAIIaigCACEKIAEoAgQgBmooAgAhCyABKAIAIAJBA3RqIgEoAgAhByABKAIEIQggACgCxAIhBCADKAIAIQMgACgCxAMiASgCHCEOIAEoAhghDyABKAIUIQkgASgCECEQIAAoAnAiAkECTwR/IAJBAXYhEQNAIAkgCy0AAEECdCIBaigCACEMIA8gCi0AAEECdCIGaigCACECIAEgDmooAgAhASADIAQgBiAQaigCACINIActAAAiBmpqLQAAOgACIAMgBCAGIAEgAmpBEHUiAmpqLQAAOgABIAQgBiAMamotAAAhASADQf8BOgADIAMgAToAACADIAQgDSAHLQABIgFqai0AADoABiADIAQgASACamotAAA6AAUgBCABIAxqai0AACEBIANB/wE6AAcgAyABOgAEIAUgBCANIAgtAAAiAWpqLQAAOgACIAUgBCABIAJqai0AADoAASAEIAEgDGpqLQAAIQEgBUH/AToAAyAFIAE6AAAgBSAEIA0gCC0AASIBamotAAA6AAYgBSAEIAEgAmpqLQAAOgAFIAQgASAMamotAAAhASAFQf8BOgAHIAUgAToABCAFQQhqIQUgCEECaiEIIANBCGohAyAHQQJqIQcgCkEBaiEKIAtBAWohCyARQQFrIhENAAsgACgCcAUgAgtBAXFFDQMgCSALLQAAQQJ0IgBqKAIAIQkgDyAKLQAAQQJ0IgJqKAIAIQEgACAOaigCACEAIAMgBCACIBBqKAIAIgIgBy0AACIGamotAAA6AAIgAyAEIAYgACABakEQdSIBamotAAA6AAEgBCAGIAlqai0AACEAIANB/wE6AAMgAyAAOgAAIAUgBCACIAgtAAAiAGpqLQAAOgACIAUgBCAAIAFqai0AADoAASAEIAAgCWpqLQAAIQAgBUH/AToAAyAFIAA6AAAPCyADKAIEIQUgAkECdCIGIAEoAghqKAIAIQogASgCBCAGaigCACELIAEoAgAgAkEDdGoiASgCACEHIAEoAgQhCCAAKALEAiEEIAMoAgAhAyAAKALEAyIBKAIcIQ4gASgCGCEPIAEoAhQhCSABKAIQIRAgACgCcCICQQJPBH8gAkEBdiERA0AgCSALLQAAQQJ0IgFqKAIAIQwgDyAKLQAAQQJ0IgZqKAIAIQIgASAOaigCACEBIAMgBCAGIBBqKAIAIg0gBy0AACIGamotAAA6AAMgAyAEIAYgASACakEQdSICamotAAA6AAIgBCAGIAxqai0AACEBIANB/wE6AAAgAyABOgABIAMgBCANIActAAEiAWpqLQAAOgAHIAMgBCABIAJqai0AADoABiAEIAEgDGpqLQAAIQEgA0H/AToABCADIAE6AAUgBSAEIA0gCC0AACIBamotAAA6AAMgBSAEIAEgAmpqLQAAOgACIAQgASAMamotAAAhASAFQf8BOgAAIAUgAToAASAFIAQgDSAILQABIgFqai0AADoAByAFIAQgASACamotAAA6AAYgBCABIAxqai0AACEBIAVB/wE6AAQgBSABOgAFIAVBCGohBSAIQQJqIQggA0EIaiEDIAdBAmohByAKQQFqIQogC0EBaiELIBFBAWsiEQ0ACyAAKAJwBSACC0EBcUUNAiAJIAstAABBAnQiAGooAgAhCSAPIAotAABBAnQiAmooAgAhASAAIA5qKAIAIQAgAyAEIAIgEGooAgAiAiAHLQAAIgZqai0AADoAAyADIAQgBiAAIAFqQRB1IgFqai0AADoAAiAEIAYgCWpqLQAAIQAgA0H/AToAACADIAA6AAEgBSAEIAIgCC0AACIAamotAAA6AAMgBSAEIAAgAWpqLQAAOgACIAQgACAJamotAAAhACAFQf8BOgAAIAUgADoAAQ8LIAMoAgQhBSACQQJ0IgYgASgCCGooAgAhCiABKAIEIAZqKAIAIQsgASgCACACQQN0aiIBKAIAIQcgASgCBCEIIAAoAsQCIQQgAygCACEDIAAoAsQDIgEoAhwhDiABKAIYIQ8gASgCFCEJIAEoAhAhECAAKAJwIgJBAk8EfyACQQF2IREDQCAJIAstAABBAnQiAWooAgAhDCAPIAotAABBAnQiBmooAgAhAiABIA5qKAIAIQEgAyAEIAYgEGooAgAiDSAHLQAAIgZqai0AADoAASADIAQgBiABIAJqQRB1IgJqai0AADoAAiAEIAYgDGpqLQAAIQEgA0H/AToAACADIAE6AAMgAyAEIA0gBy0AASIBamotAAA6AAUgAyAEIAEgAmpqLQAAOgAGIAQgASAMamotAAAhASADQf8BOgAEIAMgAToAByAFIAQgDSAILQAAIgFqai0AADoAASAFIAQgASACamotAAA6AAIgBCABIAxqai0AACEBIAVB/wE6AAAgBSABOgADIAUgBCANIAgtAAEiAWpqLQAAOgAFIAUgBCABIAJqai0AADoABiAEIAEgDGpqLQAAIQEgBUH/AToABCAFIAE6AAcgBUEIaiEFIAhBAmohCCADQQhqIQMgB0ECaiEHIApBAWohCiALQQFqIQsgEUEBayIRDQALIAAoAnAFIAILQQFxRQ0BIAkgCy0AAEECdCIAaigCACEJIA8gCi0AAEECdCICaigCACEBIAAgDmooAgAhACADIAQgAiAQaigCACICIActAAAiBmpqLQAAOgABIAMgBCAGIAAgAWpBEHUiAWpqLQAAOgACIAQgBiAJamotAAAhACADQf8BOgAAIAMgADoAAyAFIAQgAiAILQAAIgBqai0AADoAASAFIAQgACABamotAAA6AAIgBCAAIAlqai0AACEAIAVB/wE6AAAgBSAAOgADDwsgAygCBCEFIAJBAnQiBiABKAIIaigCACEKIAEoAgQgBmooAgAhCyABKAIAIAJBA3RqIgEoAgAhByABKAIEIQggACgCxAIhBCADKAIAIQMgACgCxAMiASgCHCEOIAEoAhghDyABKAIUIQkgASgCECEQIAAoAnAiAkECTwR/IAJBAXYhEQNAIAkgCy0AAEECdCIBaigCACEMIA8gCi0AAEECdCIGaigCACECIAEgDmooAgAhASADIAQgBiAQaigCACINIActAAAiBmpqLQAAOgAAIAMgBCAGIAEgAmpBEHUiAmpqLQAAOgABIAMgBCAGIAxqai0AADoAAiADIAQgDSAHLQABIgFqai0AADoAAyADIAQgASACamotAAA6AAQgAyAEIAEgDGpqLQAAOgAFIAUgBCANIAgtAAAiAWpqLQAAOgAAIAUgBCABIAJqai0AADoAASAFIAQgASAMamotAAA6AAIgBSAEIA0gCC0AASIBamotAAA6AAMgBSAEIAEgAmpqLQAAOgAEIAUgBCABIAxqai0AADoABSAFQQZqIQUgCEECaiEIIANBBmohAyAHQQJqIQcgCkEBaiEKIAtBAWohCyARQQFrIhENAAsgACgCcAUgAgtBAXFFDQAgCSALLQAAQQJ0IgBqKAIAIQkgDyAKLQAAQQJ0IgFqKAIAIQIgACAOaigCACEAIAMgBCABIBBqKAIAIgEgBy0AACIGamotAAA6AAAgAyAEIAYgACACakEQdSIAamotAAA6AAEgAyAEIAYgCWpqLQAAOgACIAUgBCABIAgtAAAiAmpqLQAAOgAAIAUgBCAAIAJqai0AADoAASAFIAQgAiAJamotAAA6AAILC4cCAQN/IwBBEGsiByQAAkAgACgCxAMiAygCJARAQQEhBiADQSBqQQAgBCAFKAIA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/z8QNSAEKQPIAyEjIAQpA8ADISELIARBsANqICQgIiAhICMQNSAEQaADaiAEKQOwAyAEKQO4AyAmICUQUiAEKQOoAyEiIAQpA6ADISQCQCAPQQJrIAdB/////wdxTg0AIAQgIkL///////////8AgzcDmAMgBCAkNwOQAyAEQYADaiAkICJCAEKAgICAgICA/z8QKCAEKQOQAyAEKQOYA0KAgICAgICAuMAAEGohAiAiIAQpA4gDIAJBAEgiARshIiAkIAQpA4ADIAEbISQgISAjQgBCABA+QQBHIAUgBSAOIBpHcSABG3FFIA8gFSACQQBOaiIVQe4Aak5xDQBB1PgAQcQANgIACyAEQfACaiAkICIgFRBwIAQpA/ACISIgBCkD+AILNwMoIBkgIjcDICAEQZDGAGokACAZKQMoISEgGSkDICEiDAQLDAELAkACfyADKAIEIgEgAygCaEcEQCADIAFBAWo2AgQgAS0AAAwBCyADECcLQShGBEBBASEJDAELQoCAgICAgOD//wAhISADKQNwQgBTDQMgAyADKAIEQQFrNgIEDAMLA0ACfyADKAIEIgEgAygCaEcEQCADIAFBAWo2AgQgAS0AAAwBCyADECcLIgJBwQBrIQECQAJAIAJBMGtBCkkNACABQRpJDQAgAkHfAEYNACACQeEAa0EaTw0BCyAJQQFqIQkMAQsLQoCAgICAgOD//wAhISACQSlGDQILIAMpA3BCAFkEQCADIAMoAgRBAWs2AgQLQdT4AEEcNgIAIANCABA5C0IAISELIAwgIjcDCCAMICE3AxAgGUEwaiQAIAMpA3hCACADKAIEIAMoAixrrH1SDQUMDAsgF0EQckHzAEYEQCAMQSBqQX9BgQIQJRogDEEAOgAgIBdB8wBHDQYgDEEAOgBBIAxBADoALiAMQQA2ASoMBgsgDEEgaiAILQABIgZB3gBGIgFBgQIQJRogDEEAOgAgIAhBAmogCEEBaiABGyECAn8CQAJAIAhBAkEBIAEbai0AACIBQS1HBEAgAUHdAEYNASAGQd4ARyEGIAIMAwsgDCAGQd4ARyIGOgBODAELIAwgBkHeAEciBjoAfgsgAkEBagshCANAAkAgCC0AACIBQS1HBEAgAUUNDyABQd0ARg0IDAELQS0hASAILQABIhZFDQAgFkHdAEYNACAIQQFqIQICQCAWIAhBAWstAAAiCE0EQCAWIQEMAQsDQCAIQQFqIgggDEEgamogBjoAACAIIAItAAAiAUkNAAsLIAIhCAsgASAMaiAGOgAhIAhBAWohCAwACwALQQghAQwCC0EKIQEMAQtBACEBC0IAISFBACEPQQAhBkEAIQojAEEQayIWJAACQCABQQFHIAFBJE1xRQRAQdT4AEEcNgIADAELA0ACfyADKAIEIgIgAygCaEcEQCADIAJBAWo2AgQgAi0AAAwBCyADECcLIgJBIEYgAkEJa0EFSXINAAsCQAJAIAJBK2sOAwABAAELQX9BACACQS1GGyEKIAMoAgQiAiADKAJoRwRAIAMgAkEBajYCBCACLQAAIQIMAQsgAxAnIQILAkACQAJAAkACQCABQQBHIAFBEEdxDQAgAkEwRw0AAn8gAygCBCICIAMoAmhHBEAgAyACQQFqNgIEIAItAAAMAQsgAxAnCyICQV9xQdgARgRAQRAhAQJ/IAMoAgQiAiADKAJoRwRAIAMgAkEBajYCBCACLQAADAELIAMQJwsiAkHR6QBqLQAAQRBJDQMgAykDcEIAWQRAIAMgAygCBEEBazYCBAsgA0IAEDkMBgsgAQ0BQQghAQwCCyABQQogARsiASACQdHpAGotAABLDQAgAykDcEIAWQRAIAMgAygCBEEBazYCBAsgA0IAEDlB1PgAQRw2AgAMBAsgAUEKRw0AIAJBMGsiD0EJTQRAQQAhAQNAIAFBCmwgD2oiAUGZs+bMAUkCfyADKAIEIgIgAygCaEcEQCADIAJBAWo2AgQgAi0AAAwBCyADECcLIgJBMGsiD0EJTXENAAsgAa0hIQsCQCAPQQlLDQAgIUIKfiEiIA+tISMDQCAiICN8ISECfyADKAIEIgEgAygCaEcEQCADIAFBAWo2AgQgAS0AAAwBCyADECcLIgJBMGsiD0EJSw0BICFCmrPmzJmz5swZWg0BICFCCn4iIiAPrSIjQn+FWA0AC0EKIQEMAgtBCiEBIA9BCU0NAQwCCyABIAFBAWtxBEAgAkHR6QBqLQAAIgYgAUkEQANAIAEgD2wgBmoiD0HH4/E4SQJ/IAMoAgQiAiADKAJoRwRAIAMgAkEBajYCBCACLQAADAELIAMQJwsiAkHR6QBqLQAAIgYgAUlxDQALIA+tISELIAEgBk0NASABrSEoA0AgISAofiIjIAatQv8BgyIiQn+FVg0CICIgI3whISABAn8gAygCBCICIAMoAmhHBEAgAyACQQFqNgIEIAItAAAMAQsgAxAnCyICQdHpAGotAAAiBk0NAiAWIChCACAhQgAQMCAWKQMIUA0ACwwBCyABQRdsQQV2QQdxQdHrAGosAAAhByACQdHpAGotAAAiDyABSQRAA0AgBiAHdCAPciIGQYCAgMAASQJ/IAMoAgQiAiADKAJoRwRAIAMgAkEBajYCBCACLQAADAELIAMQJwsiAkHR6QBqLQAAIg8gAUlxDQALIAatISELIAEgD00NAEJ/IAetIiOIIiIgIVQNAANAIA+tQv8BgyAhICOGhCEhIAECfyADKAIEIgIgAygCaEcEQCADIAJBAWo2AgQgAi0AAAwBCyADECcLIgJB0ekAai0AACIPTQ0BICEgIlgNAAsLIAEgAkHR6QBqLQAATQ0AA0AgAQJ/IAMoAgQiAiADKAJoRwRAIAMgAkEBajYCBCACLQAADAELIAMQJwtB0ekAai0AAEsNAAtB1PgAQcQANgIAQQAhCkJ/ISELIAMpA3BCAFkEQCADIAMoAgRBAWs2AgQLAkAgIUJ/Ug0ACyAhIAqsIiKFICJ9ISELIBZBEGokACADKQN4QgAgAygCBCADKAIsa6x9UQ0HAkAgF0HwAEcNACAURQ0AIBQgIT4CAAwDCyAUIBEgIRBtDAILIBRFDQEgDCkDECEjIAwpAwghIgJAAkACQCAWDgMAAQIECyMAQSBrIgIkAAJAICNC////////////AIMiIUKAgICAgIDAwD99ICFCgICAgICAwL/AAH1UBEAgI0IZiKchASAiUCAjQv///w+DIiFCgICACFQgIUKAgIAIURtFBEAgAUGBgICABGohEAwCCyABQYCAgIAEaiEQICIgIUKAgIAIhYRCAFINASAQIAFBAXFqIRAMAQsgIlAgIUKAgICAgIDA//8AVCAhQoCAgICAgMD//wBRG0UEQCAjQhmIp0H///8BcUGAgID+B3IhEAwBC0GAgID8ByEQICFC////////v7/AAFYNAEEAIRAgIUIwiKciAUGR/gBJDQAgAkEQaiAiICNC////////P4NCgICAgICAwACEIiEgAUGB/gBrEDEgAiAiICFBgf8AIAFrEDwgAikDCCIiQhmIpyEQIAIpAwAgAikDECACKQMY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AygCAAsiAi0AACEIIARBAWsiAQR/IAJBAWoFIAAgAygCDBEBAEUNCyADKAIEIQEgAygCAAsiAi0AACEJIAFBAWsiAQR/IAJBAWoFIAAgAygCDBEBAEUNCyADKAIEIQEgAygCAAsiAi0AACELIAFBAWsiAQR/IAJBAWoFIAAgAygCDBEBAEUNCyADKAIEIQEgAygCAAsiAi0AACEKIAFBAWsiAQR/IAJBAWoFIAAgAygCDBEBAEUNCyADKAIEIQEgAygCAAsiAi0AACEMIAFBAWsiAQR/IAJBAWoFIAAgAygCDBEBAEUNCyADKAIEIQEgAygCAAsiAi0AACEOIAFBAWsiAQR/IAJBAWoFIAAgAygCDBEBAEUNCyADKAIEIQEgAygCAAsiAi0AACEPIAFBAWsiAQR/IAJBAWoFIAAgAygCDBEBAEUNCyADKAIEIQEgAygCAAsiAi0AACEQIAFBAWsiAQR/IAJBAWoFIAAgAygCDBEBAEUNCyADKAIEIQEgAygCAAsiAi0AACERIAFBAWsiAQR/IAJBAWoFIAAgAygCDBEBAEUNCyADKAIEIQEgAygCAAsiAi0AACESIAFBAWsiAQR/IAJBAWoFIAAgAygCDBEBAEUNCyADKAIEIQEgAygCAAsiAi0AACETIAFBAWsiAQR/IAJBAWoFIAAgAygCDBEBAEUNCyADKAIEIQEgAygCAAsiAi0AACEUIAFBAWsiAQR/IAJBAWoFIAAgAygCDBEBAEUNCyADKAIEIQEgAygCAAsiAi0AACEVIAFBAWsiAQR/IAJBAWoFIAAgAygCDBEBAEUNCyADKAIEIQEgAygCAAsiAi0AACEWIAFBAWsiAQR/IAJBAWoFIAAgAygCDBEBAEUNCyADKAIEIQEgAygCAAsiAi0AACEXIAFBAWsiBAR/IAJBAWoFIAAgAygCDBEBAEUNCyADKAIEIQQgAygCAAsiAi0AACEYIAAoAgAiASAINgIYIAFB1gA2AhQgASAQNgI0IAEgDzYCMCABIA42AiwgASAMNgIoIAEgCjYCJCABIAs2AiAgASAJNgIcIABBAiABKAIEEQMAIAAoAgAiASARNgIYIAFB1gA2AhQgASAYNgI0IAEgFzYCMCABIBY2AiwgASAVNgIoIAEgFDYCJCABIBM2AiAgASASNgIcIABBAiABKAIEEQMAIAJBAWoh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IANB0O8AEDciAQRAIAAtAAhBAXFFDQIgASAFKAIMEGUhBAwCCyADQYDuABA3IgFFDQEgBSgCDCIARQ0BIABBgO4AEDciA0UNASAGQQhqIgBBBHJBAEE0ECUaIAZBATYCOCAGQX82AhQgBiABNgIQIAYgAzYCCCADIAAgAigCAEEBIAMoAgAoAhwRBQACQCAGKAIgIgBBAUcNACACKAIARQ0AIAIgBigCGDYCAAsgAEEBRiEEDAELQQAhBAsgBkFAayQAIAQLMQAgACABKAIIQQAQLwRAIAEgAiADEGYPCyAAKAIIIgAgASACIAMgACgCACgCHBEFAAsYACAAIAEoAghBABAvBEAgASACIAMQZgsLnwEBAn8jAEFAaiIDJAACf0EBIAAgAUEAEC8NABpBACABRQ0AGkEAIAFBgO4AEDciAUUNABogA0EIaiIEQQRyQQBBNBAlGiADQQE2AjggA0F/NgIUIAMgADYCECADIAE2AgggASAEIAIoAgBBASABKAIAKAIcEQUAIAMoAiAiAEEBRgRAIAIgAygCGDYCAAsgAEEBRgshACADQUBrJAAgAAsKACAAIAFBABAvCwYAQQAQZwsEAEEACx8AQcCHASgCAEUEQEHAhwEgADYCAEHEhwEgATYCAAsLBgAgABAqC1EBAn8gASAAKAJUIgEgASACQYACaiIDEHciBCABayADIAQbIgMgAiACIANLGyICECkaIAAgASADaiIDNgJUIAAgAzYCCCAAIAEgAmo2AgQgAgtHAQF/IAEgACgCBCICQQF1aiEBIAAoAgAhACABIAJBAXEEfyABKAIAIABqKAIABSAACxEBACEAQQgQLCIBIAApAQA3AwAgAQupAQEEfyAAKAJUIgMoAgQiBSAAKAIUIAAoAhwiBmsiBCAEIAVLGyIEBEAgAygCACAGIAQQKRogAyADKAIAIARqNgIAIAMgAygCBCAEayIFNgIECyADKAIAIQQgBSACIAIgBUsbIgUEQCAEIAEgBRApGiADIAMoAgAgBWoiBDYCACADIAMoAgQgBWs2AgQLIARBADoAACAAIAAoAiwiATYCHCAAIAE2AhQgAgsoACABIAEoAgBBB2pBeHEiAUEQajYCACAAIAEpAwAgASkDCBBoOQMACwcAIABBGGoLqxgDEn8BfAJ+IwBBsARrIgskACALQQA2AiwCQCAB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dGggJXUATWlzY2VsbGFuZW91cyBtYXJrZXIgMHglMDJ4LCBsZW5ndGggJXUASkZJRiBleHRlbnNpb24gbWFya2VyOiB0eXBlIDB4JTAyeCwgbGVuZ3RoICV1AEpGSUYgZXh0ZW5zaW9uIG1hcmtlcjogcGFsZXR0ZSB0aHVtYm5haWwgaW1hZ2UsIGxlbmd0aCAldQBKRklGIGV4dGVuc2lvbiBtYXJrZXI6IEpQRUctY29tcHJlc3NlZCB0aHVtYm5haWwgaW1hZ2UsIGxlbmd0aCAldQBKRklGIGV4dGVuc2lvbiBtYXJrZXI6IFJHQiB0aHVtYm5haWwgaW1hZ2UsIGxlbmd0aCAldQBVbmtub3duIEFQUDE0IG1hcmtlciAobm90IEFkb2JlKSwgbGVuZ3RoICV1AFVua25vd24gQVBQMCBtYXJrZXIgKG5vdCBKRklGKSwgbGVuZ3RoICV1AE9idGFpbmVkIFhNUyBoYW5kbGUgJXUARnJlZWQgWE1TIGhhbmRsZSAldQBPYnRhaW5lZCBFTVMgaGFuZGxlICV1AEZyZWVkIEVNUyBoYW5kbGUgJXUASW52YWxpZCBjcm9wIHJlcXVlc3QAVW5zdXBwb3J0ZWQgY29sb3IgY29udmVyc2lvbiByZXF1ZXN0AHVuc2lnbmVkIHNob3J0AGNvbXBvbmVudENvdW50AHVuc2lnbmVkIGludAB0akRlY29tcHJlc3NIZWFkZXIzKCk6IEludmFsaWQgYXJndW1lbnQAdGpEZWNvbXByZXNzMigpOiBJbnZhbGlkIGFyZ3VtZW50AENvcnJ1cHQgSlBFRyBkYXRhOiBwcmVtYXR1cmUgZW5kIG9mIGRhdGEgc2VnbWVudABoZWlnaHQARnJhY3Rpb25hbCBzYW1wbGluZyBub3QgaW1wbGVtZW50ZWQgeWV0AENDSVI2MDEgc2FtcGxpbmcgbm90IGltcGxlbWVudGVkIHlldABmbG9hdABVbnN1cHBvcnRlZCBCTVAgY29sb3JtYXAgZm9ybWF0AFVuc3VwcG9ydGVkIG91dHB1dCBmaWxlIGZvcm1hdABVbnJlY29nbml6ZWQgaW5wdXQgZmlsZSBmb3JtYXQAQ29sb3IgbWFwIGZpbGUgaXMgaW52YWxpZCBvciBvZiB1bnN1cHBvcnRlZCBmb3JtYXQAdWludDY0X3QAQ2Fubm90IHF1YW50aXplIG1vcmUgdGhhbiAlZCBjb2xvciBjb21wb25lbnRzAFN0YXJ0IE9mIFNjYW46ICVkIGNvbXBvbmVudHMAQm9ndXMgdmlydHVhbCBhcnJheSBhY2Nlc3MAQm9ndXMgc2FtcGxpbmcgZmFjdG9ycwBRdWFudGl6aW5nIHRvICVkID0gJWQqJWQqJWQgY29sb3JzAFF1YW50aXppbmcgdG8gJWQgY29sb3JzAENhbm5vdCBxdWFudGl6ZSB0byBmZXdlciB0aGFuICVkIGNvbG9ycwBDYW5ub3QgcXVhbnRpemUgdG8gbW9yZSB0aGFuICVkIGNvbG9ycwBJbnZhbGlkIEpQRUcgZmlsZSBzdHJ1Y3R1cmU6IHR3byBTT0kgbWFya2VycwBJbnZhbGlkIEpQRUcgZmlsZSBzdHJ1Y3R1cmU6IHR3byBTT0YgbWFya2VycwBDb3B5cmlnaHQgKEMpIDE5OTEtMjAyMiBUaGUgbGlianBlZy10dXJibyBQcm9qZWN0IGFuZCBtYW55IG90aGVycwBTbW9vdGhpbmcgbm90IHN1cHBvcnRlZCB3aXRoIG5vbnN0YW5kYXJkIHNhbXBsaW5nIHJhdGlvcwB0akRlY29tcHJlc3MyKCk6IENvdWxkIG5vdCBzY2FsZSBkb3duIHRvIGRlc2lyZWQgaW1hZ2UgZGltZW5zaW9ucwBQcm9ncmVzc2l2ZSBKUEVHIGltYWdlIGhhcyBtb3JlIHRoYW4gNTAwIHNjYW5zAE1heGltdW0gc3VwcG9ydGVkIGltYWdlIGRpbWVuc2lvbiBpcyAldSBwaXhlbHMAQXBwbGljYXRpb24gdHJhbnNmZXJyZWQgdG9vIG1hbnkgc2NhbmxpbmVzAEFwcGxpY2F0aW9uIHRyYW5zZmVycmVkIHRvbyBmZXcgc2NhbmxpbmVzAE91dHB1dCBmaWxlIGZvcm1hdCBjYW5ub3QgaGFuZGxlICVkIGNvbG9ybWFwIGVudHJpZXMARmFpbGVkIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAlcwBDbG9zZWQgdGVtcG9yYXJ5IGZpbGUgJXMAT3BlbmVkIHRlbXBvcmFyeSBmaWxlICVzAHZlY3RvcgBObyBlcnJvcgBJbnB1dCBmaWxlIHJlYWQgZXJyb3IASW52YWxpZCBKUEVHIGZpbGUgc3RydWN0dXJlOiBtaXNzaW5nIFNPUyBtYXJrZXIAQ29ycnVwdCBKUEVHIGRhdGE6IGJhZCBJQ0MgbWFya2VyAGdldEVuY29kZWRCdWZmZXIAZ2V0RGVjb2RlZEJ1ZmZlcgBKUEVHRGVjb2RlcgB0akRlY29tcHJlc3NIZWFkZXIzKCk6IEludmFsaWQgZGF0YSByZXR1cm5lZCBpbiBoZWFkZXIAcmVhZGluZyBoZWFkZXIAcmVhZEhlYWRlcgB1bnNpZ25lZCBjaGFyAFVucmVjb2duaXplZCBjb21wb25lbnQgSURzICVkICVkICVkLCBhc3N1bWluZyBZQ2JDcgBWaXJ0dWFsIGFycmF5IGNvbnRyb2xsZXIgbWVzc2VkIHVwAGdldEZyYW1lSW5mbwBzdGQ6OmV4Y2VwdGlvbgBCb2d1cyBIdWZmbWFuIHRhYmxlIGRlZmluaXRpb24AU2VsZWN0ZWQgJWQgY29sb3JzIGZvciBxdWFudGl6YXRpb24ASW1hZ2UgdG9vIHdpZGUgZm9yIHRoaXMgaW1wbGVtZW50YXRpb24AdGpEZWNvbXByZXNzSGVhZGVyMygpOiBJbnN0YW5jZSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgZm9yIGRlY29tcHJlc3Npb24AdGpEZWNvbXByZXNzMigpOiBJbnN0YW5jZSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgZm9yIGRlY29tcHJlc3Npb24AbmFuAERpZG4ndCBleHBlY3QgbW9yZSB0aGFuIG9uZSBzY2FuAFNhbXBsaW5nIGZhY3RvcnMgdG9vIGxhcmdlIGZvciBpbnRlcmxlYXZlZCBzY2FuAGJvb2wAQnVmZmVyIHBhc3NlZCB0byBKUEVHIGxpYnJhcnkgaXMgdG9vIHNtYWxsAGVtc2NyaXB0ZW46OnZhbABCb2d1cyBtYXJrZXIgbGVuZ3RoAEludmFsaWQgQk1QIGZpbGU6IGJhZCBoZWFkZXIgbGVuZ3RoAHdpZHRoAHVuc2lnbmVkIGxvbmcAc3RkOjp3c3RyaW5nAHN0ZDo6c3RyaW5nAHN0ZDo6dTE2c3RyaW5nAHN0ZDo6dTMyc3RyaW5nAGluZgB0akluaXREZWNvbXByZXNzKCk6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUAdGpEZWNvbXByZXNzMigpOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlAFN1c3BlbnNpb24gbm90IGFsbG93ZWQgaGVyZQBSZXF1ZXN0ZWQgZmVhdHVyZSB3YXMgb21pdHRlZCBhdCBjb21waWxlIHRpbWUAYml0c1BlclNhbXBsZQBTZWVrIGZhaWxlZCBvbiB0ZW1wb3JhcnkgZmlsZQBSZWFkIGZhaWxlZCBvbiB0ZW1wb3JhcnkgZmlsZQBFbXB0eSBpbnB1dCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgaW5wdXQgZmlsZQBOdW1lcmljIHZhbHVlIG91dCBvZiByYW5nZSBpbiBCTVAgZmlsZQBOdW1lcmljIHZhbHVlIG91dCBvZiByYW5nZSBpbiBQUE0gZmlsZQBOb25udW1lcmljIGRhdGEgaW4gUFBNIGZpbGUATm90IGEgUFBNL1BHTSBmaWxlAFByZW1hdHVyZSBlbmQgb2YgSlBFRyBmaWxlAEludmFsaWQgaGFuZGxlAGRvdWJsZQBSZXF1ZXN0ZWQgZmVhdHVyZXMgYXJlIGluY29tcGF0aWJsZQBEQ1QgY29lZmZpY2llbnQgb3V0IG9mIHJhbmdlAEludmFsaWQgY29sb3IgcXVhbnRpemF0aW9uIG1vZGUgY2hhbmdlAEpQRUcgZGF0YXN0cmVhbSBjb250YWlucyBubyBpbWFnZQAgICAgd2l0aCAlZCB4ICVkIHRodW1ibmFpbCBpbWFnZQBFbXB0eSBCTVAgaW1hZ2UAJXV4JXUgJWQtYml0IEJNUCBpbWFnZQAldXgldSA4LWJpdCBjb2xvcm1hcHBlZCBCTVAgaW1hZ2UAJXV4JXUgJWQtYml0IE9TMiBCTVAgaW1hZ2UAJXV4JXUgOC1iaXQgY29sb3JtYXBwZWQgT1MyIEJNUCBpbWFnZQAldXgldSBQUE0gaW1hZ2UAJXV4JXUgdGV4dCBQUE0gaW1hZ2UAJXV4JXUgUEdNIGltYWdlACV1eCV1IHRleHQgUEdNIGltYWdlAHRqRGVjb21wcmVzc0hlYWRlcjMoKTogQ291bGQgbm90IGRldGVybWluZSBzdWJzYW1wbGluZyB0eXBlIGZvciBKUEVHIGltYWdlAHRqRGVjb21wcmVzc0hlYWRlcjMoKTogQ291bGQgbm90IGRldGVybWluZSBjb2xvcnNwYWNlIG9mIEpQRUcgaW1hZ2UAU3RhcnQgb2YgSW1hZ2UARW5kIE9mIEltYWdlAEJvZ3VzIGJ1ZmZlciBjb250cm9sIG1vZGUAZGVjb2RlAENvcnJ1cHQgSlBFRyBkYXRhOiBiYWQgSHVmZm1hbiBjb2RlAENvcnJ1cHQgSlBFRyBkYXRhOiBiYWQgYXJpdGhtZXRpYyBjb2RlAEJvZ3VzIGlucHV0IGNvbG9yc3BhY2UAQm9ndXMgSlBFRyBjb2xvcnNwYWNlAHZvaWQAQmFja2luZyBzdG9yZSBub3Qgc3VwcG9ydGVkAElEQ1Qgb3V0cHV0IGJsb2NrIHNpemUgJWQgbm90IHN1cHBvcnRlZABTb3JyeSwgY29tcHJlc3NlZCBCTVBzIG5vdCB5ZXQgc3VwcG9ydGVkAE9ubHkgOC0sIDI0LSwgYW5kIDMyLWJpdCBCTVAgZmlsZXMgYXJlIHN1cHBvcnRlZABTb3JyeSwgYXJpdGhtZXRpYyBjb2RpbmcgaXMgbm90IGltcGxlbWVudGVkAFF1YW50aXphdGlvbiB0YWJsZSAweCUwMnggd2FzIG5vdCBkZWZpbmVkAEh1ZmZtYW4gdGFibGUgMHglMDJ4IHdhcyBub3QgZGVmaW5lZABBcml0aG1ldGljIHRhYmxlIDB4JTAyeCB3YXMgbm90IGRlZmluZWQAaXNTaWduZWQAVGFyZ2Egc3VwcG9ydCB3YXMgbm90IGNvbXBpbGVkAHVuZ2V0YyBmYWlsZWQAV3JpdGUgdG8gWE1TIGZhaWxlZABSZWFkIGZyb20gWE1TIGZhaWxlZABXcml0ZSB0byBFTVMgZmFpbGVkAFJlYWQgZnJvbSBFTVMgZmFpbGVkACAgICAgICAgJTNkICUzZCAlM2QgJTNkICUzZCAlM2QgJTNkICUzZABXYXJuaW5nOiB1bmtub3duIEpGSUYgcmV2aXNpb24gbnVtYmVyICVkLiUwMmQAQ29ycnVwdCBKUEVHIGRhdGE6IGZvdW5kIG1hcmtlciAweCUwMnggaW5zdGVhZCBvZiBSU1QlZABTdGFydCBPZiBGcmFtZSAweCUwMng6IHdpZHRoPSV1LCBoZWlnaHQ9JXUsIGNvbXBvbmVudHM9JWQAICAgIENvbXBvbmVudCAlZDogJWRoeCVkdiBxPSVkAEludmFsaWQgcHJvZ3Jlc3NpdmUgcGFyYW1ldGVycyBTcz0lZCBTZT0lZCBBaD0lZCBBbD0lZAAgIFNzPSVkLCBTZT0lZCwgQWg9JWQsIEFsPSVkACAgICBDb21wb25lbnQgJWQ6IGRjPSVkIGFjPSVkAEludmFsaWQgcHJvZ3Jlc3NpdmUgcGFyYW1ldGVycyBhdCBzY2FuIHNjcmlwdCBlbnRyeSAlZABJbnZhbGlkIHNjYW4gc2NyaXB0IGF0IGVudHJ5ICVkAEJvZ3VzIERRVCBpbmRleCAlZABCb2d1cyBESFQgaW5kZXggJWQAQm9ndXMgREFDIGluZGV4ICVkAFRvbyBtYW55IGNvbG9yIGNvbXBvbmVudHM6ICVkLCBtYXggJWQASW5jb25zaXN0ZW50IHByb2dyZXNzaW9uIHNlcXVlbmNlIGZvciBjb21wb25lbnQgJWQgY29lZmZpY2llbnQgJWQAV3JvbmcgSlBFRyBsaWJyYXJ5IHZlcnNpb246IGxpYnJhcnkgaXMgJWQsIGNhbGxlciBleHBlY3RzICVkAEF0IG1hcmtlciAweCUwMngsIHJlY292ZXJ5IGFjdGlvbiAlZABVbnN1cHBvcnRlZCBKUEVHIGRhdGEgcHJlY2lzaW9uICVkAERlZmluZSBRdWFudGl6YXRpb24gVGFibGUgJWQgIHByZWNpc2lvbiAlZABBZG9iZSBBUFAxNCBtYXJrZXI6IHZlcnNpb24gJWQsIGZsYWdzIDB4JTA0eCAweCUwNHgsIHRyYW5zZm9ybSAlZABJbXByb3BlciBjYWxsIHRvIEpQRUcgbGlicmFyeSBpbiBzdGF0ZSAlZABDYW5ub3QgdHJhbnNjb2RlIGR1ZSB0byBtdWx0aXBsZSB1c2Ugb2YgcXVhbnRpemF0aW9uIHRhYmxlICVkAFVua25vd24gQWRvYmUgY29sb3IgdHJhbnNmb3JtIGNvZGUgJWQASW52YWxpZCBtZW1vcnkgcG9vbCBjb2RlICVkAEJvZ3VzIG1lc3NhZ2UgY29kZSAlZABKRklGIEFQUDAgbWFya2VyOiB2ZXJzaW9uICVkLiUwMmQsIGRlbnNpdHkgJWR4JWQgICVkACVsZCVjAENvbXBvbmVudCBpbmRleCAlZDogbWlzbWF0Y2hpbmcgc2FtcGxpbmcgcmF0aW8gJWQ6JWQsICVkOiVkLCAlYwBTY2FuIHNjcmlwdCBkb2VzIG5vdCB0cmFuc21pdCBhbGwgZGF0YQBKU0lNRF9GT1JDRU1NWABJbnZhbGlkIGNvbXBvbmVudCBJRCAlZCBpbiBTT1MATkFOAEpQRUdNRU0ATm90IGEgQk1QIGZpbGUgLSBkb2VzIG5vdCBzdGFydCB3aXRoIEJNAEludmFsaWQgU09TIHBhcmFtZXRlcnMgZm9yIHNlcXVlbnRpYWwgSlBFRwBDYXV0aW9uOiBxdWFudGl6YXRpb24gdGFibGVzIGFyZSB0b28gY29hcnNlIGZvciBiYXNlbGluZSBKUEVHAEludmFsaWQgSlBFRyBmaWxlIHN0cnVjdHVyZTogU09TIGJlZm9yZSBTT0YASU5GAEpTSU1EX0ZPUkNFU1NFAEJNUCBvdXRwdXQgbXVzdCBiZSBncmF5c2NhbGUgb3IgUkdCAFBQTSBvdXRwdXQgbXVzdCBiZSBncmF5c2NhbGUgb3IgUkdCAE91dHB1dCBmaWxlIHdyaXRlIGVycm9yIC0tLSBvdXQgb2YgZGlzayBzcGFjZT8AV3JpdGUgZmFpbGVkIG9uIHRlbXBvcmFyeSBmaWxlIC0tLSBvdXQgb2YgZGlzayBzcGFjZT8AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8ZmxvYXQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDhfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZz4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgbG9uZz4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8ZG91YmxlPgA2YiAgMjctTWFyLTE5OTgASlNJTURfRk9SQ0VTU0UyAEludmFsaWQgQk1QIGZpbGU6IGJpUGxhbmVzIG5vdCBlcXVhbCB0byAxAC4AKG51bGwpAEVtcHR5IEpQRUcgaW1hZ2UgKEROTCBub3Qgc3VwcG9ydGVkKQBJbnN1ZmZpY2llbnQgbWVtb3J5IChjYXNlICVkKQBzdGQ6Ol9fbGliY3BwX3Rsc19jcmVhdGUoKSBmYWlsZWQgaW4gX19jeGFfdGhyZWFkX2F0ZXhpdCgpACVzCgBpbml0aWFsaXppbmcgZGVjb21wcmVzc29yCgBlcnJvciByZWFkaW5nIGhlYWRlcgoAfn5kZWNvbXByZXNzaW5nIEpQRUcgaW1hZ2UKADlGcmFtZUluZm8AAAAIOQAAUyEAAGkAdmkAaWlpAHZpaWkAMTFKUEVHRGVjb2RlcgAIOQAAdiEAAFAxMUpQRUdEZWNvZGVyAACMOQAAjCEAAAAAAACEIQAAUEsxMUpQRUdEZWNvZGVyAIw5AACsIQAAAQAAAIQhAABpaQB2AAAAAJwhAAD4IQAAnCEAAMg4AABOMTBlbXNjcmlwdGVuM3ZhbEUAAAg5AADkIQAAaWlpaQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUACDkAAAUiAAD4IQAAnCEAACQiAAAwOAAAnCEAAHZpaQBB0MQACzYDAAAAAwAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAABgIQAAvCEAQZTFAAvOBgEAAAAIAAAAEAAAAAkAAAACAAAAAwAAAAoAAAARAAAAGAAAACAAAAAZAAAAEgAAAAsAAAAEAAAABQAAAAwAAAATAAAAGgAAACEAAAAoAAAAMAAAACkAAAAiAAAAGwAAABQAAAANAAAABgAAAAcAAAAOAAAAFQAAABwAAAAjAAAAKgAAADEAAAA4AAAAOQAAADIAAAArAAAAJAAAAB0AAAAWAAAADwAAABcAAAAeAAAAJQAAACwAAAAzAAAAOgAAADsAAAA0AAAALQAAACYAAAAfAAAAJwAAAC4AAAA1AAAAPAAAAD0AAAA2AAAALwAAADcAAAA+AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAABABgAAgD4AAAAAAACIEwAAYhsAAEoWAABhBAAAPAQAAA4VAAApHAAACBMAAMgVAAAGDwAAehUAAJEVAACVEAAAxhkAACUQAABGGwAAKBoAAFwYAADOGAAAmQoAAAUZAAC4GgAACAYAAH4KAABaEAAAdREAAG4JAABeGQAAdAgAAEsZAACqBQAAOBkAACUZAACEIAAAYBcAAEwXAAAEEAAAng0AAGwdAABGCQAAvwUAAAkEAACADAAACRIAABoSAADiGgAA8xsAACUTAADkEgAAkREAAKwVAACgFgAATBMAAHYWAACBBAAAqSAAADMKAADrCgAAEwsAAGcLAAC0DQAAIAUAADoLAADlHAAAOQ0AAOsRAADNEQAAmx0AANoMAAABBQAAxw4AAEkPAAA3FwAAIxcAAJQLAAAxIAAApxwAAHYaAADfBwAAswcAAGYFAABKBQAASxoAAFUGAABLCAAANAgAAAEVAAB1FwAAeBsAAHAGAADTBgAAbhMAAKwGAADoBAAA4AUAALAKAADTCgAAJQ8AAAMaAAD9FwAA1gsAAAMYAAA9GAAA8hQAAGEKAACwGAAAkxgAAFwNAAB1DQAAOwcAAAEHAAB9BwAAkw4AACAIAAAJCAAAIBsAAIQZAACsBAAADgkAAC8VAACdFwAAsxIAAMsXAAB8HAAArwwAAF8IAADFFgAAUxUAAOQNAACzGwBB8MsAC8gDgQEdWg4ChiUQAxQREgQLCBQF2AMXBtoBGQflABwIbwAeCTYAIQoaACMLDQAJDAYACg0DAAwNAQCPD39aJBAlPyYR8iwnEnwgKBO5FyoUghErFe8MLRahCS4XLwcwGFwFMRkGBDMaAwM0G0ACNhyxATgdRAE5HvUAOx+3ADwgigA+IWgAPyJOACAjOwAhCSwApSXhWkAmTEhBJw06QyjxLkQpHyZFKjMfRiuoGUgsGBVJLXcRSi50Dksv+wtNMPgJTjFhCE8yBgcwM80FMjTeBDI1DwQzNmMDNDfUAjU4XAI2OfgBNzqkATg7YAE5PCUBOj32ADs+ywA9P6sAPSCPAMFBEltQQgRNUUMsQVJE2DdTRegvVEY8KVZHeSNXSN8eV0mpGkhKThdISyQUSkycEUpNaw9LTlENTU+2C00wQArQUTJYWFIcTVlTjkNaVN07W1XuNFxWri5dV5opVkcWJdhZcFVfWqlMYFvZRGFcIj5jXSQ4Y160Ml1WFy7fYKhWZWFGT2Zi5UdnY89BaGQ9PGNdXjdpZjFSamcPTGtoOUZnY15B6WonVmxr51BtZ4VLbm2XVW9rT1DubxBacG0iVfBv61lxcR1aAEHBzwALwwLAMPAMzDz8A8Mz8w/PP/+AQLBwjEy8fINDs3OPT79/IOAQ0CzsHNwj4xPTL+8f36BgkFCsbJxco2OTU69vn18IyDj4BMQ09AvLO/sHxzf3iEi4eIREtHSLS7t7h0e3dyjoGNgk5BTUK+sb2yfnF9eoaJhYpGSUVKtrm1unZ5dXAsIy8g7OPv4BwTHxDc09/YJCsnKOTr5+gUGxcY1NvX0i4hLSLu4e3iHhEdEt7R3domKSUq5unl6hYZFRrW2dXQrKOvoGxjb2Cck5+QXFNfWKSrp6hka2dolJuXmFRbV1Kuoa2ibmFtYp6RnZJeUV1apqmlqmZpZWqWmZWaVllVX//////////wEAAAD///////////////8BAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAQAAAAIAAAACAAAA/////wBBkNIAC0T//////////wAAAAD///////////////8AAAAAAAAAAAIAAAACAAAAAwAAAAEAAAAAAAAAAgAAAAMAAAABAAAA/////wBB4NIACx3//////////wIAAAD///////////////8CAAAAAgBBiNMAC2wBAAAAAwAAAAIAAAAAAAAAAQAAAAMAAAD/////AgAAAAMAAAABAAAA//////////8AAAAA////////////////AAAAAAAAAAACAAAAAgAAAAMAAAABAAAAAAAAAAIAAAADAAAAAQAAAP////8AQYDUAAtE//////////8BAAAA////////////////AQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAQAAAAEAAAACAAAAAgAAAP////8AQdDUAAsd//////////8CAAAA////////////////AgAAAAIAQfjUAAscAQAAAAMAAAACAAAAAAAAAAEAAAADAAAA/////wBBoNUAC1QKAggABg4EDAkBCwMFDQcP//////////8DAAAA////////////////AwAAAAQAAAADAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAP////8AQYDWAAvaAQoCCAAGDgQMCQELAwUNBw8AQMVYn1NCSwBASTKjIqgRxVghe/xzYmjFWL9FCzB+GJ9T/HNBbVRin1OzQUEtEhdCS2JoVGJ+WEJLITu6KMMUAEDFWJ9TQksAQEkyoyKoEUkyv0WzQSE7STKCJzcb4A2jIgswQS26KKMiNxu/Eo4JqBF+GBIXwxSoEeANjgnfBAAAAAAAAPA/72FIsVAx9j/Kb02Rruf0P6oRbO9i0PI/AAAAAAAA8D87v6fAaSTpP7sgx3t6UeE/Xaty3lWo0T8AAAEFAQEBAQEBAEHy1wALLwMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKCwAAAAAAAgEDAwIEAwUFBAQAAAF9AEGw2AALogEBAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+foAQeLZAAsPAgECBAQDBAcFBAQAAQJ3AEGB2gALoQEBAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+gBBsNsAC4EB//////////8DAAAA////////////////AwAAAAQAAAADAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAP////8BAAAAAwAAAAMAAAAEAAAABAAAAAMAAAAEAAAAAwAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAADAEHA3AALFQgAAAAQAAAAEAAAAAgAAAAIAAAAIABB4NwACxUIAAAACAAAABAAAAAIAAAAEAAAAAgAQYDdAAuSCAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAIAAAABAAAADwAAAAgAAAAHAAAABAAAAA0AAAAIAAAAAwAAAAIAAAALAAAACAAAAAUAAAAEAAAACQAAAAgAAAABAAAAAQAAAAcAAAAIAAAAAwAAAAQAAAAFAAAACAAAAAEAAAACAAAAAwAAAAgAAAABAAAABAAAAAEAAAAIAAAABgAAAAgAAAAHAAAACQAAAAoAAAALAAAAAQAAAAwAAAANAAAADgAAAA8AAAAEAAAAAwAAAAMAAAADAAAAAQAAAAMAAAADAAAAAgAAAAAAAAABAAAAAwAAAAQAAAD/2QAATlN0M19fMjEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAAAg5AACQLwAATlN0M19fMjEyYmFzaWNfc3RyaW5nSWhOU18xMWNoYXJfdHJhaXRzSWhFRU5TXzlhbGxvY2F0b3JJaEVFRUUAAAg5AADYLwAATlN0M19fMjEyYmFzaWNfc3RyaW5nSXdOU18xMWNoYXJfdHJhaXRzSXdFRU5TXzlhbGxvY2F0b3JJd0VFRUUAAAg5AAAgMAAATlN0M19fMjEyYmFzaWNfc3RyaW5nSURzTlNfMTFjaGFyX3RyYWl0c0lEc0VFTlNfOWFsbG9jYXRvcklEc0VFRUUAAAAIOQAAaDAAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0lEaU5TXzExY2hhcl90cmFpdHNJRGlFRU5TXzlhbGxvY2F0b3JJRGlFRUVFAAAACDkAALQwAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAAAg5AAAAMQAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJYUVFAAAIOQAAKDEAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SXNFRQAACDkAAFAxAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUAAAg5AAB4MQAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJaUVFAAAIOQAAoDEAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWpFRQAACDkAAMgxAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUAAAg5AADwMQAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJbUVFAAAIOQAAGDIAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWZFRQAACDkAAEAyAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lkRUUAAAg5AABoMgAAmDsAQaDlAAtBGQAKABkZGQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAAZABEKGRkZAwoHAAEACQsYAAAJBgsAAAsABhkAAAAZGRkAQfHlAAshDgAAAAAAAAAAGQAKDRkZGQANAAACAAkOAAAACQAOAAAOAEGr5gALAQwAQbfmAAsVEwAAAAATAAAAAAkMAAAAAAAMAAAMAEHl5gALARAAQfHmAAsVDwAAAAQPAAAAAAkQAAAAAAAQAAAQAEGf5wALARIAQavnAAseEQAAAAARAAAAAAkSAAAAAAASAAASAAAaAAAAGhoaAEHi5wALDhoAAAAaGhoAAAAAAAAJAEGT6AALARQAQZ/oAAsVFwAAAAAXAAAAAAkUAAAAAAAUAAAUAEHN6AALARYAQdnoAAvtCxUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRtF0ngBXnb0qgHBSD///PicKAAAAZAAAAOgDAAAQJwAAoIYBAEBCDwCAlpgAAOH1BRgAAAA1AAAAcQAAAGv////O+///kr///wAAAAAAAAAA/////////////////////////////////////////////////////////////////wABAgMEBQYHCAn/////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP///////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAQIEBwMGBQAAAAAAAAACAADAAwAAwAQAAMAFAADABgAAwAcAAMAIAADACQAAwAoAAMALAADADAAAwA0AAMAOAADADwAAwBAAAMARAADAEgAAwBMAAMAUAADAFQAAwBYAAMAXAADAGAAAwBkAAMAaAADAGwAAwBwAAMAdAADAHgAAwB8AAMAAAACzAQAAwwIAAMMDAADDBAAAwwUAAMMGAADDBwAAwwgAAMMJAADDCgAAwwsAAMMMAADDDQAA0w4AAMMPAADDAAAMuwEADMMCAAzDAwAMwwQADNtOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQAAAAAwOQAArDYAAEA6AABOMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mb0UAAAAwOQAA3DYAANA2AABOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UAAAAwOQAADDcAANA2AABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQAwOQAAPDcAADA3AABOMTBfX2N4eGFiaXYxMjBfX2Z1bmN0aW9uX3R5cGVfaW5mb0UAAAAAMDkAAGw3AADQNgAATjEwX19jeHhhYml2MTI5X19wb2ludGVyX3RvX21lbWJlcl90eXBlX2luZm9FAAAAMDkAAKA3AAAwNwAAAAAAACA4AADAAAAAwQAAAMIAAADDAAAAxAAAAE4xMF9fY3h4YWJpdjEyM19fZnVuZGFtZW50YWxfdHlwZV9pbmZvRQAwOQAA+DcAANA2AAB2AAAA5DcAACw4AABEbgAA5DcAADg4AABiAAAA5DcAAEQ4AABjAAAA5DcAAFA4AABQS2MAjDkAAFw4AAABAAAAVDgAAGgAAADkNwAAcDgAAGEAAADkNwAAfDgAAHMAAADkNwAAiDgAAHQAAADkNwAAlDgAAGkAAADkNwAAoDgAAGoAAADkNwAArDgAAGwAAADkNwAAuDgAAG0AAADkNwAAxDgAAHgAAADkNwAA0DgAAHkAAADkNwAA3DgAAGYAAADkNwAA6DgAAGQAAADkNwAA9DgAAAAAAAAANwAAwAAAAMUAAADCAAAAwwAAAMYAAADHAAAAyAAAAMkAAAAAAAAAeDkAAMAAAADKAAAAwgAAAMMAAADGAAAAywAAAMwAAADNAAAATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAAAAADA5AABQOQAAADcAAAAAAABgNwAAwAAAAM4AAADCAAAAwwAAAM8AAAAAAAAAxDkAANAAAADRAAAA0gAAAFN0OWV4Y2VwdGlvbgAAAAAIOQAAtDkAAAAAAADwOQAAFwAAANMAAADUAAAAU3QxMWxvZ2ljX2Vycm9yADA5AADgOQAAxDkAAAAAAAAkOgAAFwAAANUAAADUAAAAU3QxMmxlbmd0aF9lcnJvcgAAAAAwOQAAEDoAAPA5AABTdDl0eXBlX2luZm8AAAAACDkAADA6AEHQ9AALCE5vIGVycm9yAEGk9gALapkJAAAZFgAAqRAAAFEgAAAkHQAA8BUAAI8TAABUHAAANhIAAJ8TAAC2EwAA2BMAAPMTAABIHQAAhBIAAKASAABdEgAAPhQAAE4UAAAZFAAAKRQAAPYWAAD3CQAABA0AABUXAADYCQAAuQkAQZj3AAsBBQBBpPcACwG3AEG89wALCrgAAAC5AAAArD8AQdT3AAsBAgBB5PcACwj//////////wBBqPgACwPgQwE="},7414:A=>{"use strict";A.exports="data:application/wasm;base64,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rgEBAn8gAUEANgIAAkAgAkUNACACQQNxIQMgASACaiEBIAJBBE8EQCACQXxxIQRBACECA0AgAUEBayAALQAAOgAAIAFBAmsgAC0AAToAACABQQNrIAAtAAI6AAAgAUEEayIBIAAtAAM6AAAgAEEEaiEAIAJBBGoiAiAERw0ACwsgA0UNAEEAIQIDQCABQQFrIgEgAC0AADoAACAAQQFqIQAgAkEBaiICIANHDQALCwuABAEDfyACQYAETwRAIAAgASACEBkgAA8LIAAgAmohAwJAIAAgAXNBA3FFBEACQCAAQQNxRQRAIAAhAgwBCyACRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAkEDcUUNASACIANJDQALCwJAIANBfHEiBEHAAEkNACACIARBQGoiBUsNAANAIAIgASgCADYCACACIAEoAgQ2AgQgAiABKAIINgIIIAIgASgCDDYCDCACIAEoAhA2AhAgAiABKAIUNgIUIAIgASgCGDYCGCACIAEoAhw2AhwgAiABKAIgNgIgIAIgASgCJDYCJCACIAEoAig2AiggAiABKAIsNgIsIAIgASgCMDYCMCACIAEoAjQ2AjQgAiABKAI4NgI4IAIgASgCPDYCPCABQUBrIQEgAkFAayICIAVNDQALCyACIARPDQEDQCACIAEoAgA2AgAgAUEEaiEBIAJBBGoiAiAESQ0ACwwBCyADQQRJBEAgACECDAELIAAgA0EEayIESwRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAiABLQABOgABIAIgAS0AAjoAAiACIAEtAAM6AAMgAUEEaiEBIAJBBGoiAiAETQ0ACwsgAiADSQRAA0AgAiABLQAAOgAAIAFBAWohASACQQFqIgIgA0cNAAsLIAALMAEBfwJAIABFDQAgAUUNAEEIIAAgAWwiARBEIgAEQCAAQQAgARAkGgsgACECCyACCw8AIABFBEBBAA8LIAAQOAvyAgICfwF+AkAgAkUNACAAIAE6AAAgACACaiIDQQFrIAE6AAAgAkEDSQ0AIAAgAToAAiAAIAE6AAEgA0EDayABOgAAIANBAmsgAToAACACQQdJDQAgACABOgADIANBBGsgAToAACACQQlJDQAgAEEAIABrQQNxIgRqIgMgAUH/AXFBgYKECGwiATYCACADIAIg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QQJ0IRQgACAFakEBakECSSEVIAdBAXZBAWsgAmxBAnQhFgNAIAggASgCACABIBRqIgkgAkECdGooAgAiBiAJKAIAIgBqQQJqQQJ1ayIFIABqNgIAQQEhBEEBIQAgFUUEQANAIAEgACACbEECdGooAgAhCyAJIABBAWoiDiACbEECdGooAgAhCiAIIARBAnRqIhcgBTYCACAXIAUgCyAGIApqQQJqQQJ1ayIFakEBdSAGajYCBCAEQQJqIQQgACATRyELIA4hACAKIQYgCw0ACwsgCCAEQQJ0aiAFNgIAAkAgEEUEQCASIAEgFmooAgAgBkEBakEBdWsiACAFakEBdSAGajYCAAwBCyAFIAZqIQALIBEgADYCAEEAIQVBACEAQQAhBiAHQQRPBEADQCABIAAgAmxBAnRqIAggAEECdGooAgA2AgAgASAAQQFyIgQgAmxBAnRqIAggBEECdGooAgA2AgAgASAAQQJyIgQgAmxBAnRqIAggBEECdGooAgA2AgAgASAAQQNyIgQgAmxBAnRqIAggBEECdGooAgA2AgAgAEEEaiEAIAZBBGoiBiAPRw0ACwsgDARAA0AgASAAIAJsQQJ0aiAIIABBAnRqKAIANgIAIABBAWohACAFQQFqIgUgDEcNAAsLIAFBBGohASANQQFqIg0gA0cNAAsLC78DAQN/IwBBMGsiAyQAAn9BAUEsECIiAQRAIAFBADYCEAJAAkAgAEEATARAIAFBAUEIECIiADYCJCAADQEgARAfQQAMBAsCQEEBQRgQIiICBEAMAQsgAUEANgIMIAEQH0EADAQLIAEgAjYCDAJAQTAQIyICBEAMAQsgAUEANgIIDAILIAEgAjYCCCABIABBFBAiIgI2AgAgAkUNASABIAA2AgQgAiABNgIAAkACQEEBQRgQIiIABEAMAQsgASgCAEEANgIMDAELIAEoAgAgADYCDAJAQTAQIyIABEAMAQsgASgCACIAQQA2AhAgACgCDCIARQ0BIAAQHwwBCyABKAIAIgJBADYCCCACIAA2AhBBDBAjIgAEQCAAQccANgIAIAAgAjYCBCAAEB8LIAEoAgAiACICQQA2AgQgAigCDCICBH8gAhAfIAEoAgAFIAALKAIQIgBFDQAgABAfCyABQQA2AgQgASgCDBogASgCICABKAIESARAA0AgASgCCBogASgCDBog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OgAAQQIMBAsgAUGAQHFBgMADRyABQYCwA09xRQRAIAAgAUE/cUGAAXI6AAIgACABQQx2QeABcjoAACAAIAFBBnZBP3FBgAFyOgABQQMMBAsgAUGAgARrQf//P00EQCAAIAFBP3FBgAFyOgADIAAgAUESdkHwAXI6AAAgACABQQZ2QT9xQYABcjoAAiAAIAFBDHZBP3FBgAFyOgABQQQMBAsLQbjlAUEZNgIAQX8FQQELDAELIAAgAToAAEEBCwsPACAAIAEgAkEAQQAQgAELxAIAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4SAAoLDAoLAgMEBQwLDAwKCwcICQsgAiACKAIAIgFBBGo2AgAgACABKAIANgIADwsACyACIAIoAgAiAUEEajYCACAAIAEyAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEzAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEwAAA3AwAPCyACIAIoAgAiAUEEajYCACAAIAExAAA3AwAPCwALIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASsDADkDAA8LIAAgAiADEQQACw8LIAIgAigCACIBQQRqNgIAIAAgATQCADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATUCADcDAA8LIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASkDADcDAAtyAQN/IAAoAgAsAABBMGtBCk8EQEEADwsDQCAAKAIAIQNBfyEBIAJBzJmz5gBNBEBBfyADLAAAQTBrIgEgAkEKbCICaiABIAJB/////wdzShshAQsgACADQQFqNgIAIAEhAiADLAABQTBrQQpJDQALIAILlRQCEn8BfiMAQdAAayIIJAAgCCABNgJMIAhBN2ohFyAIQThqIRMCQAJAAkACQANAIAEhDSAHIA9B/////wdzSg0BIAcgD2ohDwJAAkACQCANIgctAAAiCQRAA0ACQAJAIAlB/wFxIgFFBEAgByEBDAELIAFBJUcNASAHIQkDQCAJLQABQSVHBEAgCSEBDAILIAdBAWohByAJLQACIQsgCUECaiIBIQkgC0ElRg0ACwsgByANayIHIA9B/////wdzIhhKDQcgAARAIAAgDSAHECwLIAcNBiAIIAE2AkwgAUEBaiEHQX8hEQJAIAEsAAFBMGtBCk8NACABLQAC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DQALDAILA0ACQCAORQ0AQQAhDEEAIQlBACENIA5BBE8EQANAIAogCUECdGogCyAGIAlsQQJ0aigCADYCACAKIAlBAXIiF0ECdGogCyAGIBdsQQJ0aigCADYCACAKIAlBAnIiF0ECdGogCyAGIBdsQQJ0aigCADYCACAKIAlBA3IiF0ECdGogCyAGIBdsQQJ0aigCADYCACAJQQRqIQkgDUEEaiINIBVHDQALCyATRQ0AA0AgCiAJQQJ0aiALIAYgCWxBAnRqKAIANgIAIAlBAWohCSAMQQFqIgwgE0cNAAsLIAogEEECdGohCiALIAdBAnRqIQsgDyARQQFqIhFHDQALDAELA0ACQCAORQ0AQQAhDEEAIQlBACENIBdBA08EQANAIAsgBiAJbEECdGogCiAJQQJ0aigCADYCACALIAlBAXIiHCAGbEECdGogCiAcQQJ0aigCADYCACALIAlBAnIiHCAGbEECdGogCiAcQQJ0aigCADYCACALIAlBA3IiHCAGbEECdGogCiAcQQJ0aigCADYCACAJQQRqIQkgDUEEaiINIBVHDQALCyATRQ0AA0AgCyAGIAlsQQJ0aiAKIAlBAnRqKAIANgIAIAlBAWohCSAMQQFqIgwgE0cNAAsLIAogEEECdGohCiALIAdBAnRqIQsgEUEBaiIRIA9HDQALCyAYQQFqIRggDiASaiISIANJDQALIB1BAWohHSAPIBtqIhsgBEkNAAsLQQELzAEBA38jAEGAAWsiBiQAIAYhBCABKAIMIAJBBHRqIgEoAgAEQANAIAQgATYCACAEQQRqIQQgASgCACIBKAIADQALCwNAIAEoAggiAiAFSARAIAEgBTYCCCAFIQILAkAgAiADTg0AA0AgAiABKAIETg0BAkAgAEEBEDUEQCABIAI2AgQMAQsgAkEBaiECCyACIANIDQALCyABIAI2AgggBCAGRwRAIARBBGsiBCgCACEBIAIhBQwBCwsgASgCBCEAIAZBgAFqJAAgACADSAv5BgEKfyMAQYACayIKJAACQCAARQRAQQAhAAwBCwJAIAEgACgCAEYEQCAAKAIEIAJGDQELIAAgAjYCBCAAIAE2AgAgCiACNgIAIAogATYCgAEgAiEEIAEhBQNAIAogByIMQQFqIgdBAnQiCGogBEEBakECbSIJNgIAIApBgAFqIAhqIAVBAWpB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JAALIAAjAEEQayIBJAAgASAANgIAQYMKIAEQWiABQRBqJAALBwAgACgCUAsHACAAKAJMCwwAIAAgASkCRDcCAAsMACAAIAEpAjw3AgALDAAgACABKQI0NwIACyAAIAEgASgCACAApyABKAIIIgEgAa0gAFUbajYCBEEBCwwAIAAgASkCLDcCAAsHACAAKAIoCwcAIAAtACQLBwAgACgCIAtHAQF/IAEgACgCBCICQQF1aiEBIAAoAgAhACABIAJBAXEEfyABKAIAIABqKAIABSAACxEDACEAQQgQJSIBIAApAQA3AwAgAQsHACAAQRhqCzkBAX8gASAAKAIEIgRBAXVqIQEgACgCACEAIAEgAiADIARBAXEEfyABKAIAIABqKAIABSAACxEFAAsPACAAIAI2AlQgACABEHALDwAgAEEANgJUIABBABBwCzgBAn8gASgCACABKAIIaiIDIAEoAgQiAkYEQEF/DwsgASAAIAJqNgIEIAMgAmsiASAAIAAgAUsbC1wBAn8jAEEQayIDJAAgASAAKAIEIgRBAXVqIQEgACgCACEAIANBCGogASACIARBAXEEfyABKAIAIABqKAIABSAACxEFAEEIECUiACADKQMINwMAIANBEGokACAACyIBAX4gASACrSADrUIghoQgBCAAEQoAIgVCIIinJAEgBacLFQAgASACrSADrUIghoQgBCAAEQ8ACyABAX4gAa0gAq1CIIaEIAMgABEQACIEQiCIpyQBIASnCxMAIAGtIAKtQiCGhCADIAARDgALEAAjACAAa0FwcSIAJAAgAAsGACAAJAALuAEBBH8gAS8BGiEDIAAgAS8BGCIBNgIAIAIEQAJAIAJBA3EiBkUEQCACIQQMAQsgAiEEA0AgBEEBayEEIANBAWpBAXYhAyABQQFqQQF2IQEgBUEBaiIFIAZHDQALCyACQQRPBEADQCADQQFqQQF2QQFqQQF2QQFqQQF2QQFqQQF2IQMgAUEBakEBdkEBakEBdkEBakEBdkEBakEBdiEBIARBBGsiBA0ACwsgACABNgIACyAAIAM2AgQLBAAjAAsHACAAKAIECwUAQbIMCxYAIABFBEBBAA8LIABBhN0BEDFBAEcLGgAgACABKAIIIAUQLQRAIAEgAiADIAQQdgsLNwAgACABKAIIIAUQLQRAIAEgAiADIAQQdg8LIAAo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////////D4MiBEKBgICAgICAgAhaBEAgA0KBgICAgICAgMAAfCECDAILIANCgICAgICAgIBAfSECIARCgICAgICAgIAIUg0BIAIgA0IBg3whAgwBCyAEUCADQoCAgICAgMD//wBUIANCgICAgICAwP//AFEbRQRAIAVCBIYgBEI8iIRC/////////wODQoCAgICAgID8/wCEIQIMAQtCgICAgICAgPj/ACECIANC////////v//DAFYNAEIAIQIgA0IwiKciAUGR9wBJDQAgBCECIAVC////////P4NCgICAgICAwACEIgMhBgJAIAFBgfcAayIIQcAAcQRAIAIgCEFAaq2GIQZCACECDAELIAhFDQAgBiAIrSIHhiACQcAAIAhrrYiEIQYgAiAHhiECCyAAIAI3AxAgACAGNwMYAkBBgfgAIAFrIgFBwABxBEAgAyABQUBqrYghBEIAIQMMAQsgAUUNACADQcAAIAFrrYYgBCABrSICiIQhBCADIAKIIQMLIAAgBDcDACAAIAM3AwggACkDCEIEhiAAKQMAIgRCPIiEIQIgACkDECAAKQMYhEIAUq0gBEL//////////w+DhCIEQoGAgICAgICACFoEQCACQgF8IQIMAQsgBEKAgICAgICAgAhSDQAgAkIBgyACfCECCyAAQSBqJAAgCSACIAVCgICAgICAgICAf4OEvzkDAAuqGAMSfwF8An4jAEGwBGsiCyQAIAtBADYCLAJAIAG9IhlCAFMEQEEBIRBBzAghEyABmiIBvSEZDAELIARBgBBxBEBBASEQQc8IIRMMAQtB0ghBzQggBEEBcSIQGyETIBBFIRULAkAgGUKAgICAgICA+P8Ag0KAgICAgICA+P8AUQRAIABBICACIBBBA2oiAyAEQf//e3EQLiAAIBMgEBAsIABBwQxBuw8gBUEgcSIFG0GsDkG/DyAFGyABIAFiG0EDECwgAEEgIAIgAyAEQYDAAHMQLiADIAIgAiADSBshCQwBCyALQRBqIRECQAJ/AkAgASALQSxqEIEBIgEgAaAiAUQAAAAAAAAAAGIEQCALIAsoAiwiBkEBazYCLCAFQSByIg5B4QBHDQEMAwsgBUEgciIOQeEARg0CIAsoAiwhCkEGIAMgA0EASBsMAQsgCyAGQR1rIgo2AiwgAUQAAAAAAACwQaIhAUEGIAMgA0EA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ZWdfZGF0YV9jaHVua190KiBhcnJheQBVaW50OENsYW1wZWRBcnJheQAtKyAgIDBYMHgALTBYKzBYIDBYLTB4KzB4IDB4AHVuc2lnbmVkIHNob3J0AGNvbXBvbmVudENvdW50AFBvaW50AHVuc2lnbmVkIGludABoZWlnaHQAZ2V0VGlsZU9mZnNldABnZXRJbWFnZU9mZnNldABmbG9hdAB1aW50NjRfdABnZXROdW1MYXllcnMAZ2V0TnVtRGVjb21wb3NpdGlvbnMAZ2V0QmxvY2tEaW1lbnNpb25zAFtFUlJPUl0gJXMAW0lORk9dICVzAFtXQVJOSU5HXSAlcwB2ZWN0b3IAZ2V0RW5jb2RlZEJ1ZmZlcgBnZXREZWNvZGVkQnVmZmVyAGdldFByb2dyZXNzaW9uT3JkZXIAW0VSUk9SXSBvcGpfZGVjb21wcmVzczogZmFpbGVkIHRvIHNldHVwIHRoZSBkZWNvZGVyAEoyS0RlY29kZXIAW0VSUk9SXSBvcGpfZGVjb21wcmVzczogZmFpbGVkIHRvIHJlYWQgdGhlIGhlYWRlcgByZWFkSGVhZGVyAHVuc2lnbmVkIGNoYXIAL3Jvb3QvcmVwby9wYWNrYWdlcy9vcGVuanBlZy9zcmMvSjJLRGVjb2Rlci5ocHAAZ2V0RnJhbWVJbmZvAGRlY29kZVN1YlJlc29sdXRpb24Ac3RkOjpleGNlcHRpb24AbmFuAGJvb2wAY2FsY3VsYXRlU2l6ZUF0RGVjb21wb3NpdGlvbkxldmVsAGVtc2NyaXB0ZW46OnZhbAAqbF90aWxlX2xlbiA+IFVJTlRfTUFYIC0gT1BKX0NPTU1PTl9DQkxLX0RBVEFfRVhUUkEgLSBwX2oyay0+bV9zcGVjaWZpY19wYXJhbS5tX2RlY29kZXIubV9zb3RfbGVuZ3RoAHdpZHRoAHVuc2lnbmVkIGxvbmcAc3RkOjp3c3RyaW5nAHN0ZDo6c3RyaW5nAHN0ZDo6dTE2c3RyaW5nAHN0ZDo6dTMyc3RyaW5nAGluZgBnZXRUaWxlU2l6ZQBiaXRzUGVyU2FtcGxlAGRvdWJsZQBnZXRJc1JldmVyc2libGUASW52YWxpZCBhY2Nlc3MgdG8gcGktPmluY2x1ZGUAZGVjb2RlAGdldENvbG9yU3BhY2UAdm9pZABpc1NpZ25lZABBTExfQ1BVUwBPUEpfTlVNX1RIUkVBRFMATkFOAElORgBwX2oyay0+bV9zcGVjaWZpY19wYXJhbS5tX2RlY29kZXIubV9zb3RfbGVuZ3RoID4gVUlOVF9NQVggLSBPUEpfQ09NTU9OX0NCTEtfREFUQV9FWFRSQQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDhfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MTZfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MTZfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGNoYXI+AHN0ZDo6YmFzaWNfc3RyaW5nPHVuc2lnbmVkIGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AAkJCSBwcmVjY2ludHNpemUgKHcsaCk9AAkJCSBzdGVwc2l6ZXMgKG0sZSk9AC4AKG51bGwpAHN0ZDo6X19saWJjcHBfdGxzX2NyZWF0ZSgpIGZhaWxlZCBpbiBfX2N4YV90aHJlYWRfYXRleGl0KCkAW0VSUk9SXSBvcGpfZGVjb21wcmVzczogZmFpbGVkIHRvIGRlY29kZSB0aWxlIQAoJWQsJWQpIAAlc30KAAkJIH0KAFtERVZdIER1bXAgYW4gaW1hZ2VfY29tcF9oZWFkZXIgc3RydWN0IHsKAFtERVZdIER1bXAgYW4gaW1hZ2VfaGVhZGVyIHN0cnVjdCB7CgBJbWFnZSBpbmZvIHsKAAkgZGVmYXVsdCB0aWxlIHsKACVzCSBjb21wb25lbnQgJWQgewoACQkgY29tcCAlZCB7CgAJIFRpbGUgaW5kZXg6IHsKAAkgTWFya2VyIGxpc3Q6IHsKAENvZGVzdHJlYW0gaW5kZXggZnJvbSBtYWluIGhlYWRlcjogewoAQ29kZXN0cmVhbSBpbmZvIGZyb20gbWFpbiBoZWFkZXI6IHsKAFN0cmVhbSBlcnJvciB3aGlsZSByZWFkaW5nIEpQMiBIZWFkZXIgYm94CgBGb3VuZCBhIG1pc3BsYWNlZCAnJWMlYyVjJWMnIGJveCBvdXRzaWRlIGpwMmggYm94CgBNYWxmb3JtZWQgSlAyIGZpbGUgZm9ybWF0OiBmaXJzdCBib3ggbXVzdCBiZSBKUEVHIDIwMDAgc2lnbmF0dXJlIGJveAoATWFsZm9ybWVkIEpQMiBmaWxlIGZvcm1hdDogc2Vjb25kIGJveCBtdXN0IGJlIGZpbGUgdHlwZSBib3gKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGhhbmRsZSBqcGVnMjAwMCBib3gKAE5vdCBlbm91Z2ggbWVtb3J5IHdpdGggRlRZUCBCb3gKAEEgbWFya2VyIElEIHdhcyBleHBlY3RlZCAoMHhmZi0tKSBpbnN0ZWFkIG9mICUuOHgKAAkJIG1jdD0leAoACQkJIGNibGtzdHk9JSN4CgAJCQkgY3N0eT0lI3gKAAkJIHByZz0lI3gKAEludGVnZXIgb3ZlcmZsb3cKAEludmFsaWQgY29tcG9uZW50IGluZGV4OiAldQoAU3RyZWFtIHRvbyBzaG9ydAoATWFya2VyIGhhbmRsZXIgZnVuY3Rpb24gZmFpbGVkIHRvIHJlYWQgdGhlIG1hcmtlciBzZWdtZW50CgBOb3QgZW5vdWdoIG1lbW9yeSBmb3IgY3VycmVudCBwcmVjaW5jdCBjb2RlYmxvY2sgZWxlbWVudAoARXJyb3IgcmVhZGluZyBTUENvZCBTUENvYyBlbGVtZW50CgBFcnJvciByZWFkaW5nIFNRY2Qgb3IgU1FjYyBlbGVtZW50CgBBIEJQQ0MgaGVhZGVyIGJveCBpcyBhdmFpbGFibGUgYWx0aG91Z2ggQlBDIGdpdmVuIGJ5IHRoZSBJSERSIGJveCAoJWQpIGluZGljYXRlIGNvbXBvbmVudHMgYml0IGRlcHRoIGlzIGNvbnN0YW50CgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IGlsbGVnYWwgdGlsZSBvZmZzZXQKAEludmFsaWQgcHJlY2luY3QKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGhhbmRsZSBiYW5kIHByZWNpbnRzCgBGYWlsZWQgdG8gZGVjb2RlIGFsbCB1c2VkIGNvbXBvbmVudHMKAFNpemUgb2YgY29kZSBibG9jayBkYXRhIGV4Y2VlZHMgc3lzdGVtIGxpbWl0cwoAU2l6ZSBvZiB0aWxlIGRhdGEgZXhjZWVkcyBzeXN0ZW0gbGltaXRzCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbXVsdGlwbGUgTUNUIG1hcmtlcnMKAENvcnJ1cHRlZCBQUE0gbWFya2VycwoATm90IGVub3VnaCBtZW1vcnkgZm9yIHRpbGUgcmVzb2x1dGlvbnMKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBtdWx0aXBsZSBjb2xsZWN0aW9ucwoASW52YWxpZCBQQ0xSIGJveC4gUmVwb3J0cyAwIHBhbGV0dGUgY29sdW1ucwoAV2UgZG8gbm90IHN1cHBvcnQgUk9JIGluIGRlY29kaW5nIEhUIGNvZGVibG9ja3MKAENhbm5vdCBoYW5kbGUgYm94IG9mIHVuZGVmaW5lZCBzaXplcwoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIGNvbGxlY3Rpb25zIHdpdGhvdXQgc2FtZSBudW1iZXIgb2YgaW5kaXhlcwoASW52YWxpZCB0aWxlYy0+d2luX3h4eCB2YWx1ZXMKAENhbm5vdCBoYW5kbGUgYm94IG9mIGxlc3MgdGhhbiA4IGJ5dGVzCgBDYW5ub3QgaGFuZGxlIFhMIGJveCBvZiBsZXNzIHRoYW4gMTYgYnl0ZXMKAENvbXBvbmVudCBpbmRleCAldSB1c2VkIHNldmVyYWwgdGltZXMKAEludmFsaWQgUENMUiBib3guIFJlcG9ydHMgJWQgZW50cmllcwoATm90IGVub3VnaCBtZW1vcnkgdG8gY3JlYXRlIFRhZy10cmVlIG5vZGVzCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbWN0IGRhdGEgd2l0aGluIG11bHRpcGxlIE1DVCByZWNvcmRzCgBDYW5ub3QgZGVjb2RlIHRpbGUsIG1lbW9yeSBlcnJvcgoAb3BqX2oya19hcHBseV9uYl90aWxlX3BhcnRzX2NvcnJlY3Rpb24gZXJyb3IKAFByb2JsZW0gd2l0aCBza2lwcGluZyBKUEVHMjAwMCBib3gsIHN0cmVhbSBlcnJvcgoAUHJvYmxlbSB3aXRoIHJlYWRpbmcgSlBFRzIwMDAgYm94LCBzdHJlYW0gZXJyb3IKAFVua25vd24gbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBhZGQgdGwgbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBhZGQgbWggbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byB0YWtlIGluIGNoYXJnZSBTSVogbWFya2VyCgBFcnJvciByZWFkaW5nIFBQVCBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQgUFBUIG1hcmtlcgoARXJyb3IgcmVhZGluZyBTT1QgbWFya2VyCgBFcnJvciByZWFkaW5nIFBMVCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgTUNUIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBNQ1QgbWFya2VyCgBOb3QgZW5vdWdoIHNwYWNlIGZvciBleHBlY3RlZCBTT1AgbWFya2VyCgBFeHBlY3RlZCBTT1AgbWFya2VyCgBFcnJvciByZWFkaW5nIE1DTyBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUkdOIG1hcmtlcgoARXJyb3IgcmVhZGluZyBQUE0gbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWFkIFBQTSBtYXJrZXIKAEVycm9yIHJlYWRpbmcgVExNIG1hcmtlcgoARXJyb3IgcmVhZGluZyBQTE0gbWFya2VyCgBOb3QgZW5vdWdoIHNwYWNlIGZvciBleHBlY3RlZCBFUEggbWFya2VyCgBFeHBlY3RlZCBFUEggbWFya2VyCgBFcnJvciByZWFkaW5nIENSRyBtYXJrZXIKAFVua25vd24gcHJvZ3Jlc3Npb24gb3JkZXIgaW4gQ09EIG1hcmtlcgoAVW5rbm93biBTY29kIHZhbHVlIGluIENPRCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgQ09EIG1hcmtlcgoARXJyb3IgcmVhZGluZyBRQ0QgbWFya2VyCgBDcnJvciByZWFkaW5nIENCRCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUE9DIG1hcmtlcgoARXJyb3IgcmVhZGluZyBDT0MgbWFya2VyCgBFcnJvciByZWFkaW5nIFFDQyBtYXJrZXIKAEVycm9yIHJlYWRpbmcgTUNDIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBNQ0MgbWFya2VyCgByZXF1aXJlZCBTSVogbWFya2VyIG5vdCBmb3VuZCBpbiBtYWluIGhlYWRlcgoAcmVxdWlyZWQgQ09EIG1hcmtlciBub3QgZm91bmQgaW4gbWFpbiBoZWFkZXIKAHJlcXVpcmVkIFFDRCBtYXJrZXIgbm90IGZvdW5kIGluIG1haW4gaGVhZGVyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBoYW5kbGUganBlZzIwMDAgZmlsZSBoZWFkZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQgaGVhZGVyCgBFcnJvciB3aXRoIEpQIFNpZ25hdHVyZSA6IGJhZCBtYWdpYyBudW1iZXIKAEluIFNPVCBtYXJrZXIsIFRQU290ICglZCkgaXMgbm90IHZhbGlkIHJlZ2FyZHMgdG8gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHRpbGUtcGFydCAoJWQpLCBnaXZpbmcgdXAKAEluIFNPVCBtYXJrZXIsIFRQU290ICglZCkgaXMgbm90IHZhbGlkIHJlZ2FyZHMgdG8gdGhlIHByZXZpb3VzIG51bWJlciBvZiB0aWxlLXBhcnQgKCVkKSwgZ2l2aW5nIHVwCgBJbiBTT1QgbWFya2VyLCBUUFNvdCAoJWQpIGlzIG5vdCB2YWxpZCByZWdhcmRzIHRvIHRoZSBjdXJyZW50IG51bWJlciBvZiB0aWxlLXBhcnQgKGhlYWRlcikgKCVkKSwgZ2l2aW5nIHVwCgB0aWxlcyByZXF1aXJlIGF0IGxlYXN0IG9uZSByZXNvbHV0aW9uCgBNYXJrZXIgaXMgbm90IGNvbXBsaWFudCB3aXRoIGl0cyBwb3NpdGlvbgoAUHJvYmxlbSB3aXRoIHNlZWsgZnVuY3Rpb24KAEVycm9yIHJlYWRpbmcgU1BDb2QgU1BDb2MgZWxlbWVudCwgSW52YWxpZCBjYmxrdy9jYmxraCBjb21iaW5hdGlvbgoASW52YWxpZCBtdWx0aXBsZSBjb21wb25lbnQgdHJhbnNmb3JtYXRpb24KAENhbm5vdCB0YWtlIGluIGNoYXJnZSBjb2xsZWN0aW9ucyBvdGhlciB0aGFuIGFycmF5IGRlY29ycmVsYXRpb24KAE5vdCBlbm91Z2ggYnl0ZXMgdG8gcmVhZCBOcHBtCgBiYWQgcGxhY2VkIGpwZWcgY29kZXN0cmVhbQoACSBNYWluIGhlYWRlciBzdGFydCBwb3NpdGlvbj0lbGxpCgkgTWFpbiBoZWFkZXIgZW5kIHBvc2l0aW9uPSVsbGkKAE1hcmtlciBzaXplIGluY29uc2lzdGVudCB3aXRoIHN0cmVhbSBsZW5ndGgKAFRpbGUgcGFydCBsZW5ndGggc2l6ZSBpbmNvbnNpc3RlbnQgd2l0aCBzdHJlYW0gbGVuZ3RoCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbXVsdGlwbGUgZGF0YSBzcGFubmluZwoAV3JvbmcgZmxhZwoARXJyb3Igd2l0aCBGVFlQIHNpZ25hdHVyZSBCb3ggc2l6ZQoARXJyb3Igd2l0aCBKUCBzaWduYXR1cmUgQm94IHNpemUKAEludmFsaWQgcHJlY2luY3Qgc2l6ZQoASW5jb25zaXN0ZW50IG1hcmtlciBzaXplCgBJbnZhbGlkIG1hcmtlciBzaXplCgBFcnJvciB3aXRoIFNJWiBtYXJrZXIgc2l6ZQoATm90IGVub3VnaCBtZW1vcnkgdG8gYWRkIGEgbmV3IHZhbGlkYXRpb24gcHJvY2VkdXJlCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBkZWNvZGUgdGlsZQoARmFpbGVkIHRvIGRlY29kZSB0aGUgY29kZXN0cmVhbSBpbiB0aGUgSlAyIGZpbGUKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBjb2xsZWN0aW9ucyB3aXRoIGluZGl4IHNodWZmbGUKAENhbm5vdCBhbGxvY2F0ZSBUaWVyIDEgaGFuZGxlCgBObyBkZWNvZGVkIGFyZWEgcGFyYW1ldGVycywgc2V0IHRoZSBkZWNvZGVkIGFyZWEgdG8gdGhlIHdob2xlIGltYWdlCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBjcmVhdGUgVGFnLXRyZWUKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlaW5pdGlhbGl6ZSB0aGUgdGFnIHRyZWUKAEVycm9yIHJlYWRpbmcgU1BDb2QgU1BDb2MgZWxlbWVudCwgSW52YWxpZCB0cmFuc2Zvcm1hdGlvbiBmb3VuZAoARXJyb3IgcmVhZGluZyBTUENvZCBTUENvYyBlbGVtZW50LiBVbnN1cHBvcnRlZCBNaXhlZCBIVCBjb2RlLWJsb2NrIHN0eWxlIGZvdW5kCgBUaWxlIFkgY29vcmRpbmF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQKAFRpbGUgWCBjb29yZGluYXRlcyBhcmUgbm90IHN1cHBvcnRlZAoASW1hZ2UgY29vcmRpbmF0ZXMgYWJvdmUgSU5UX01BWCBhcmUgbm90IHN1cHBvcnRlZAoASlBFRzIwMDAgSGVhZGVyIGJveCBub3QgcmVhZCB5ZXQsICclYyVjJWMlYycgYm94IHdpbGwgYmUgaWdub3JlZAoAb3BqX2oya19tZXJnZV9wcHQoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZAoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBTT1QgbWFya2VyLiBUaWxlIGluZGV4IGFsbG9jYXRpb24gZmFpbGVkCgBJZ25vcmluZyBpaGRyIGJveC4gRmlyc3QgaWhkciBib3ggYWxyZWFkeSByZWFkCgBacHB0ICV1IGFscmVhZHkgcmVhZAoAWnBwbSAldSBhbHJlYWR5IHJlYWQKAFBURVJNIGNoZWNrIGZhaWx1cmU6ICVkIHN5bnRoZXRpemVkIDB4RkYgbWFya2VycyByZWFkCgAJCQkgY2Jsa3c9Ml4lZAoACQkJIGNibGtoPTJeJWQKAAkJCSBxbnRzdHk9JWQKAAkgdGR4PSVkLCB0ZHk9JWQKACVzIGR4PSVkLCBkeT0lZAoACQkJIHJvaXNoaWZ0PSVkCgAJCQkgbnVtZ2JpdHM9JWQKAAkJIG51bWxheWVycz0lZAoAJXMgbnVtY29tcHM9JWQKAG9wal9qcDJfYXBwbHlfY2RlZjogYWNuPSVkLCBudW1jb21wcz0lZAoAb3BqX2pwMl9hcHBseV9jZGVmOiBjbj0lZCwgbnVtY29tcHM9JWQKAAkJCSBudW1yZXNvbHV0aW9ucz0lZAoACQkgdHlwZT0lI3gsIHBvcz0lbGxpLCBsZW49JWQKAAkgdHc9JWQsIHRoPSVkCgAlcyBzZ25kPSVkCgAJCQkgcW1mYmlkPSVkCgAlcyBwcmVjPSVkCgAJCSBuYiBvZiB0aWxlLXBhcnQgaW4gdGlsZSBbJWRdPSVkCgAlcyB4MT0lZCwgeTE9JWQKAAkgdHgwPSVkLCB0eTA9JWQKACVzIHgwPSVkLCB5MD0lZAoARmFpbGVkIHRvIGRlY29kZSB0aWxlICVkLyVkCgBTZXR0aW5nIGRlY29kaW5nIGFyZWEgdG8gJWQsJWQsJWQsJWQKAEZhaWxlZCB0byBkZWNvZGUgY29tcG9uZW50ICVkCgBJbnZhbGlkIHZhbHVlIGZvciBudW1yZXNvbHV0aW9ucyA6ICVkLCBtYXggdmFsdWUgaXMgc2V0IGluIG9wZW5qcGVnLmggYXQgJWQKAEludmFsaWQgY29tcG9uZW50IG51bWJlcjogJWQsIHJlZ2FyZGluZyB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMgJWQKAFRvbyBtYW55IFBPQ3MgJWQKAEludmFsaWQgdGlsZSBudW1iZXIgJWQKAEludmFsaWQgdGlsZSBwYXJ0IGluZGV4IGZvciB0aWxlIG51bWJlciAlZC4gR290ICVkLCBleHBlY3RlZCAlZAoARXJyb3Igd2l0aCBTSVogbWFya2VyOiBudW1iZXIgb2YgY29tcG9uZW50IGlzIGlsbGVnYWwgLT4gJWQKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciBjaWVsYWIKAENhbm5vdCBhbGxvY2F0ZSBjYmxrLT5kZWNvZGVkX2RhdGEKAEZhaWxlZCB0byBtZXJnZSBQUFQgZGF0YQoARmFpbGVkIHRvIG1lcmdlIFBQTSBkYXRhCgBJbnZhbGlkIG51bWJlciBvZiBsYXllcnMgaW4gQ09EIG1hcmtlciA6ICVkIG5vdCBpbiByYW5nZSBbMS02NTUzNV0KACVzOiVkOmNvbG9yX2NteWtfdG9fcmdiCglDQU4gTk9UIENPTlZFUlQKACVzOiVkOmNvbG9yX2VzeWNjX3RvX3JnYgoJQ0FOIE5PVCBDT05WRVJUCgAlczolZDpjb2xvcl9zeWNjX3RvX3JnYgoJQ0FOIE5PVCBDT05WRVJUCgBTdHJlYW0gdG9vIHNob3J0LCBleHBlY3RlZCBTT1QKAFVuYWJsZSB0byBzZXQgdDEgaGFuZGxlIGFzIFRMUwoAU3RyZWFtIGRvZXMgbm90IGVuZCB3aXRoIEVPQwoAQ2Fubm90IGhhbmRsZSBib3ggc2l6ZXMgaGlnaGVyIHRoYW4gMl4zMgoAb3BqX3BpX25leHRfbHJjcCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcmxjcCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfY3BybCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcGNybCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcnBjbCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3QxX2RlY29kZV9jYmxrKCk6IHVuc3VwcG9ydGVkIGJwbm9fcGx1c19vbmUgPSAlZCA+PSAzMQoARmFpbGVkIHRvIGRlY29kZSB0aWxlIDEvMQoASW5zdWZmaWNpZW50IGRhdGEgZm9yIENNQVAgYm94LgoATmVlZCB0byByZWFkIGEgUENMUiBib3ggYmVmb3JlIHRoZSBDTUFQIGJveC4KAEluc3VmZmljaWVudCBkYXRhIGZvciBDREVGIGJveC4KAE51bWJlciBvZiBjaGFubmVsIGRlc2NyaXB0aW9uIGlzIGVxdWFsIHRvIHplcm8gaW4gQ0RFRiBib3guCgBTdHJlYW0gZXJyb3Igd2hpbGUgcmVhZGluZyBKUDIgSGVhZGVyIGJveDogbm8gJ2loZHInIGJveC4KAE5vbiBjb25mb3JtYW50IGNvZGVzdHJlYW0gVFBzb3Q9PVROc290LgoAU3RyZWFtIGVycm9yIHdoaWxlIHJlYWRpbmcgSlAyIEhlYWRlciBib3g6IGJveCBsZW5ndGggaXMgaW5jb25zaXN0ZW50LgoAQm94IGxlbmd0aCBpcyBpbmNvbnNpc3RlbnQuCgBSZXNvbHV0aW9uIGZhY3RvciBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gcmVzb2x1dGlvbiBpbiB0aGUgY29tcG9uZW50LgoAQ29tcG9uZW50IG1hcHBpbmcgc2VlbXMgd3JvbmcuIFRyeWluZyB0byBjb3JyZWN0LgoASW5jb21wbGV0ZSBjaGFubmVsIGRlZmluaXRpb25zLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gSW52YWxpZCBjb2RlYmxvY2sgbGVuZ3RoIHZhbHVlcy4KAFdlIGRvIG5vdCBzdXBwb3J0IG1vcmUgdGhhbiAzIGNvZGluZyBwYXNzZXMgaW4gYW4gSFQgY29kZWJsb2NrOyBUaGlzIGNvZGVibG9ja3MgaGFzICVkIHBhc3Nlcy4KAE1hbGZvcm1lZCBIVCBjb2RlYmxvY2suIERlY29kaW5nIHRoaXMgY29kZWJsb2NrIGlzIHN0b3BwZWQuIFRoZXJlIGFyZSAlZCB6ZXJvIGJpdHBsYW5lcyBpbiAlZCBiaXRwbGFuZXMuCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbXVsdGlwbGUgdHJhbnNmb3JtYXRpb24gc3RhZ2VzLgoAVW5rbm93biBtYXJrZXIgaGFzIGJlZW4gZGV0ZWN0ZWQgYW5kIGdlbmVyYXRlZCBlcnJvci4KAENvZGVjIHByb3ZpZGVkIHRvIHRoZSBvcGpfc2V0dXBfZGVjb2RlciBmdW5jdGlvbiBpcyBub3QgYSBkZWNvbXByZXNzb3IgaGFuZGxlci4KAENvZGVjIHByb3ZpZGVkIHRvIHRoZSBvcGpfcmVhZF9oZWFkZXIgZnVuY3Rpb24gaXMgbm90IGEgZGVjb21wcmVzc29yIGhhbmRsZXIuCgBUaWxlcyBkb24ndCBhbGwgaGF2ZSB0aGUgc2FtZSBkaW1lbnNpb24uIFNraXAgdGhlIE1DVCBzdGVwLgoATnVtYmVyIG9mIGNvbXBvbmVudHMgKCVkKSBpcyBpbmNvbnNpc3RlbnQgd2l0aCBhIE1DVC4gU2tpcCB0aGUgTUNUIHN0ZXAuCgBKUDIgYm94IHdoaWNoIGFyZSBhZnRlciB0aGUgY29kZXN0cmVhbSB3aWxsIG5vdCBiZSByZWFkIGJ5IHRoaXMgZnVuY3Rpb24uCgBNYWxmb3JtZWQgSFQgY29kZWJsb2NrLiBXaGVuIHRoZSBudW1iZXIgb2YgemVybyBwbGFuZXMgYml0cGxhbmVzIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgYml0cGxhbmVzLCBvbmx5IHRoZSBjbGVhbnVwIHBhc3MgbWFrZXMgc2Vuc2UsIGJ1dCB3ZSBoYXZlICVkIHBhc3NlcyBpbiB0aGlzIGNvZGVibG9jay4gVGhlcmVmb3JlLCBvbmx5IHRoZSBjbGVhbnVwIHBhc3Mgd2lsbCBiZSBkZWNvZGVkLiBUaGlzIG1lc3NhZ2Ugd2lsbCBub3QgYmUgZGlzcGxheWVkIGFnYWluLgoASW1hZ2UgaGFzIGxlc3MgY29tcG9uZW50cyB0aGFuIGNvZGVzdHJlYW0uCgBOZWVkIHRvIGRlY29kZSB0aGUgbWFpbiBoZWFkZXIgYmVmb3JlIGJlZ2luIHRvIGRlY29kZSB0aGUgcmVtYWluaW5nIGNvZGVzdHJlYW0uCgBQc290IHZhbHVlIG9mIHRoZSBjdXJyZW50IHRpbGUtcGFydCBpcyBlcXVhbCB0byB6ZXJvLCB3ZSBhc3N1bWluZyBpdCBpcyB0aGUgbGFzdCB0aWxlLXBhcnQgb2YgdGhlIGNvZGVzdHJlYW0uCgBBIG1hbGZvcm1lZCBjb2RlYmxvY2sgdGhhdCBoYXMgbW9yZSB0aGFuIG9uZSBjb2RpbmcgcGFzcywgYnV0IHplcm8gbGVuZ3RoIGZvciAybmQgYW5kIHBvdGVudGlhbGx5IHRoZSAzcmQgcGFzcyBpbiBhbiBIVCBjb2RlYmxvY2suCgAJCQkgdGlsZS1wYXJ0WyVkXTogc3Rhcl9wb3M9JWxsaSwgZW5kX2hlYWRlcj0lbGxpLCBlbmRfcG9zPSVsbGkuCgBUaWxlICV1IGhhcyBUUHNvdCA9PSAwIGFuZCBUTnNvdCA9PSAwLCBidXQgbm8gb3RoZXIgdGlsZS1wYXJ0cyB3ZXJlIGZvdW5kLiBFT0MgaXMgYWxzbyBtaXNzaW5nLgoAQ29tcG9uZW50ICVkIGRvZXNuJ3QgaGF2ZSBhIG1hcHBpbmcuCgBBIGNvbmZvcm1pbmcgSlAyIHJlYWRlciBzaGFsbCBpZ25vcmUgYWxsIENvbG91ciBTcGVjaWZpY2F0aW9uIGJveGVzIGFmdGVyIHRoZSBmaXJzdCwgc28gd2UgaWdub3JlIHRoaXMgb25lLgoAVGhlIHNpZ25hdHVyZSBib3ggbXVzdCBiZSB0aGUgZmlyc3QgYm94IGluIHRoZSBmaWxlLgoAVGhlICBib3ggbXVzdCBiZSB0aGUgZmlyc3QgYm94IGluIHRoZSBmaWxlLgoAVGhlIGZ0eXAgYm94IG11c3QgYmUgdGhlIHNlY29uZCBib3ggaW4gdGhlIGZpbGUuCgBGYWlsZWQgdG8gZGVjb2RlLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gSW5jb3JyZWN0IE1FTCBzZWdtZW50IHNlcXVlbmNlLgoAQ29tcG9uZW50ICVkIGlzIG1hcHBlZCB0d2ljZS4KAE9ubHkgb25lIENNQVAgYm94IGlzIGFsbG93ZWQuCgBXZSBuZWVkIGFuIGltYWdlIHByZXZpb3VzbHkgY3JlYXRlZC4KAElIRFIgYm94X21pc3NpbmcuIFJlcXVpcmVkLgoASlAySCBib3ggbWlzc2luZy4gUmVxdWlyZWQuCgBOb3Qgc3VyZSBob3cgdGhhdCBoYXBwZW5lZC4KAE1haW4gaGVhZGVyIGhhcyBiZWVuIGNvcnJlY3RseSBkZWNvZGVkLgoAVGlsZSAlZC8lZCBoYXMgYmVlbiBkZWNvZGVkLgoASGVhZGVyIG9mIHRpbGUgJWQgLyAlZCBoYXMgYmVlbiByZWFkLgoARW1wdHkgU09UIG1hcmtlciBkZXRlY3RlZDogUHNvdD0lZC4KAERpcmVjdCB1c2UgYXQgIyVkIGhvd2V2ZXIgcGNvbD0lZC4KAEltcGxlbWVudGF0aW9uIGxpbWl0YXRpb246IGZvciBwYWxldHRlIG1hcHBpbmcsIHBjb2xbJWRdIHNob3VsZCBiZSBlcXVhbCB0byAlZCwgYnV0IGlzIGVxdWFsIHRvICVkLgoASW52YWxpZCBjb21wb25lbnQvcGFsZXR0ZSBpbmRleCBmb3IgZGlyZWN0IG1hcHBpbmcgJWQuCgBJbnZhbGlkIHZhbHVlIGZvciBjbWFwWyVkXS5tdHlwID0gJWQuCgBQc290IHZhbHVlIGlzIG5vdCBjb3JyZWN0IHJlZ2FyZHMgdG8gdGhlIEpQRUcyMDAwIG5vcm06ICVkLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gVkxDIGNvZGUgcHJvZHVjZXMgc2lnbmlmaWNhbnQgc2FtcGxlcyBvdXRzaWRlIHRoZSBjb2RlYmxvY2sgYXJlYS4KAFVuZXhwZWN0ZWQgT09NLgoAMzIgYml0cyBhcmUgbm90IGVub3VnaCB0byBkZWNvZGUgdGhpcyBjb2RlYmxvY2ssIHNpbmNlIHRoZSBudW1iZXIgb2YgYml0cGxhbmUsICVkLCBpcyBsYXJnZXIgdGhhbiAzMC4KAEJvdHRvbSBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feTE9JWQpIHNob3VsZCBiZSA+IDAuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIHNob3VsZCBiZSA+IDAuCgBVcCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feTA9JWQpIHNob3VsZCBiZSA+PSAwLgoATGVmdCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDA9JWQpIHNob3VsZCBiZSA+PSAwLgoARXJyb3IgcmVhZGluZyBQUFQgbWFya2VyOiBwYWNrZXQgaGVhZGVyIGhhdmUgYmVlbiBwcmV2aW91c2x5IGZvdW5kIGluIHRoZSBtYWluIGhlYWRlciAoUFBNIG1hcmtlcikuCgBTdGFydCB0byByZWFkIGoyayBtYWluIGhlYWRlciAoJWxsZCkuCgBCb3R0b20gcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kxPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZc2l6PSVkKS4KAFVwIHBvc2l0aW9uIG9mIHRoZSBkZWNvZGVkIGFyZWEgKHJlZ2lvbl95MD0lZCkgaXMgb3V0c2lkZSB0aGUgaW1hZ2UgYXJlYSAoWXNpej0lZCkuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhzaXo9JWQpLgoATGVmdCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDA9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhzaXo9JWQpLgoAQm90dG9tIHBvc2l0aW9uIG9mIHRoZSBkZWNvZGVkIGFyZWEgKHJlZ2lvbl95MT0lZCkgaXMgb3V0c2lkZSB0aGUgaW1hZ2UgYXJlYSAoWU9zaXo9JWQpLgoAVXAgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZT3Npej0lZCkuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhPc2l6PSVkKS4KAExlZnQgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3gwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChYT3Npej0lZCkuCgBTaXplIHggb2YgdGhlIGRlY29kZWQgY29tcG9uZW50IGltYWdlIGlzIGluY29ycmVjdCAoY29tcFslZF0udz0lZCkuCgBTaXplIHkgb2YgdGhlIGRlY29kZWQgY29tcG9uZW50IGltYWdlIGlzIGluY29ycmVjdCAoY29tcFslZF0uaD0lZCkuCgBUaWxlIHJlYWQsIGRlY29kZWQgYW5kIHVwZGF0ZWQgaXMgbm90IHRoZSBkZXNpcmVkIG9uZSAoJWQgdnMgJWQpLgoASW52YWxpZCBjb21wb25lbnQgaW5kZXggJWQgKD49ICVkKS4KAG9wal9yZWFkX2hlYWRlcigpIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIG9wal9zZXRfZGVjb2RlZF9jb21wb25lbnRzKCkuCgBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGluIG9wal9qcDJfYXBwbHlfcGNscigpLgoAaW1hZ2UtPmNvbXBzWyVkXS5kYXRhID09IE5VTEwgaW4gb3BqX2pwMl9hcHBseV9wY2xyKCkuCgBpbnZhbGlkIGJveCBzaXplICVkICgleCkKAEZhaWwgdG8gcmVhZCB0aGUgY3VycmVudCBtYXJrZXIgc2VnbWVudCAoJSN4KQoARXJyb3Igd2l0aCBTSVogbWFya2VyOiBJSERSIHcoJXUpIGgoJXUpIHZzLiBTSVogdygldSkgaCgldSkKAEVycm9yIHJlYWRpbmcgQ09DIG1hcmtlciAoYmFkIG51bWJlciBvZiBjb21wb25lbnRzKQoASW52YWxpZCBudW1iZXIgb2YgdGlsZXMgOiAldSB4ICV1IChtYXhpbXVtIGZpeGVkIGJ5IGpwZWcyMDAwIG5vcm0gaXMgNjU1MzUgdGlsZXMpCgBJbnZhbGlkIG51bWJlciBvZiBjb21wb25lbnRzIChpaGRyKQoATm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIGltYWdlIGhlYWRlciAoaWhkcikKAFdyb25nIHZhbHVlcyBmb3I6IHcoJWQpIGgoJWQpIG51bWNvbXBzKCVkKSAoaWhkcikKAEludmFsaWQgdmFsdWVzIGZvciBjb21wID0gJWQgOiBkeD0ldSBkeT0ldSAoc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMjU1IGFjY29yZGluZyB0byB0aGUgSlBFRzIwMDAgbm9ybSkKAEJhZCBpbWFnZSBoZWFkZXIgYm94IChiYWQgc2l6ZSkKAEJhZCBDT0xSIGhlYWRlciBib3ggKGJhZCBzaXplKQoAQmFkIEJQQ0MgaGVhZGVyIGJveCAoYmFkIHNpemUpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG5lZ2F0aXZlIG9yIHplcm8gaW1hZ2Ugc2l6ZSAoJWxsZCB4ICVsbGQpCgBza2lwOiBzZWdtZW50IHRvbyBsb25nICglZCkgd2l0aCBtYXggKCVkKSBmb3IgY29kZWJsb2NrICVkIChwPSVkLCBiPSVkLCByPSVkLCBjPSVkKQoAcmVhZDogc2VnbWVudCB0b28gbG9uZyAoJWQpIHdpdGggbWF4ICglZCkgZm9yIGNvZGVibG9jayAlZCAocD0lZCwgYj0lZCwgcj0lZCwgYz0lZCkKAERlc3BpdGUgSlAyIEJQQyE9MjU1LCBwcmVjaXNpb24gYW5kL29yIHNnbmQgdmFsdWVzIGZvciBjb21wWyVkXSBpcyBkaWZmZXJlbnQgdGhhbiBjb21wWzBdOgogICAgICAgIFswXSBwcmVjKCVkKSBzZ25kKCVkKSBbJWRdIHByZWMoJWQpIHNnbmQoJWQpCgBiYWQgY29tcG9uZW50IG51bWJlciBpbiBSR04gKCVkIHdoZW4gdGhlcmUgYXJlIG9ubHkgJWQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG51bWJlciBvZiBjb21wb25lbnQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgcmVtYWluaW5nIG51bWJlciBvZiBwYXJhbWV0ZXJzICggJWQgdnMgJWQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IGludmFsaWQgdGlsZSBzaXplICh0ZHg6ICVkLCB0ZHk6ICVkKQoAQmFkIENPTFIgaGVhZGVyIGJveCAoYmFkIHNpemU6ICVkKQoAQmFkIENPTFIgaGVhZGVyIGJveCAoQ0lFTGFiLCBiYWQgc2l6ZTogJWQpCgBQVEVSTSBjaGVjayBmYWlsdXJlOiAlZCByZW1haW5pbmcgYnl0ZXMgaW4gY29kZSBibG9jayAoJWQgdXNlZCAvICVkKQoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gT25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIGlzIG5vdCBtZXQ6IDIgPD0gU2N1cCA8PSBtaW4oTGN1cCwgNDA3OSkKAEludmFsaWQgdmFsdWVzIGZvciBjb21wID0gJWQgOiBwcmVjPSV1IChzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzOCBhY2NvcmRpbmcgdG8gdGhlIEpQRUcyMDAwIG5vcm0uIE9wZW5KcGVnIG9ubHkgc3VwcG9ydHMgdXAgdG8gMzEpCgBJbnZhbGlkIGJpdCBudW1iZXIgJWQgaW4gb3BqX3QyX3JlYWRfcGFja2V0X2hlYWRlcigpCgBTdHJlYW0gZXJyb3IhCgBFcnJvciBvbiB3cml0aW5nIHN0cmVhbSEKAFN0cmVhbSByZWFjaGVkIGl0cyBlbmQgIQoARXhwZWN0ZWQgYSBTT0MgbWFya2VyIAoASW52YWxpZCBib3ggc2l6ZSAlZCBmb3IgYm94ICclYyVjJWMlYycuIE5lZWQgJWQgYnl0ZXMsICVkIGJ5dGVzIHJlbWFpbmluZyAKAE1hbGZvcm1lZCBIVCBjb2RlYmxvY2suIERlY29kaW5nIHRoaXMgY29kZWJsb2NrIGlzIHN0b3BwZWQuIFVfcSBpcyBsYXJnZXIgdGhhbiB6ZXJvIGJpdHBsYW5lcyArIDEgCgBNYWxmb3JtZWQgSFQgY29kZWJsb2NrLiBEZWNvZGluZyB0aGlzIGNvZGVibG9jayBpcyBzdG9wcGVkLiBVX3EgaXNsYXJnZXIgdGhhbiBiaXRwbGFuZXMgKyAxIAoAQ09MUiBCT1ggbWV0aCB2YWx1ZSBpcyBub3QgYSByZWd1bGFyIHZhbHVlICglZCksIHNvIHdlIHdpbGwgaWdub3JlIHRoZSBlbnRpcmUgQ29sb3VyIFNwZWNpZmljYXRpb24gYm94LiAKAFdoaWxlIHJlYWRpbmcgQ0NQX1FOVFNUWSBlbGVtZW50IGluc2lkZSBRQ0Qgb3IgUUNDIG1hcmtlciBzZWdtZW50LCBudW1iZXIgb2Ygc3ViYmFuZHMgKCVkKSBpcyBncmVhdGVyIHRvIE9QSl9KMktfTUFYQkFORFMgKCVkKS4gU28gd2UgbGltaXQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBzdG9yZWQgdG8gT1BKX0oyS19NQVhCQU5EUyAoJWQpIGFuZCBza2lwIHRoZSByZXN0LiAKAEpQMiBJSERSIGJveDogY29tcHJlc3Npb24gdHlwZSBpbmRpY2F0ZSB0aGF0IHRoZSBmaWxlIGlzIG5vdCBhIGNvbmZvcm1pbmcgSlAyIGZpbGUgKCVkKSAKAFRpbGUgaW5kZXggcHJvdmlkZWQgYnkgdGhlIHVzZXIgaXMgaW5jb3JyZWN0ICVkIChtYXggPSAlZCkgCgBFcnJvciBkZWNvZGluZyBjb21wb25lbnQgJWQuClRoZSBudW1iZXIgb2YgcmVzb2x1dGlvbnMgdG8gcmVtb3ZlICglZCkgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGFuIHRoZSBudW1iZXIgb2YgcmVzb2x1dGlvbnMgb2YgdGhpcyBjb21wb25lbnQgKCVkKQpNb2RpZnkgdGhlIGNwX3JlZHVjZSBwYXJhbWV0ZXIuCgoASW1hZ2Ug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AQAAALBYAACQWQAAARYAAAAAAACgWgAAoFkAAAEWAAABAAAAsFoAALBZAAABVgAAAAAAAOBYAADQWAAAAVYAAAEAAADwWAAAwFgAAAFUAAAAAAAAAFkAAMBYAAABVAAAAQAAABBZAADQWAAAAVEAAAAAAAAgWQAA4FgAAAFRAAABAAAAMFkAAPBYAAABSAAAAAAAAEBZAAAAWQAAAUgAAAEAAABQWQAAEFkAAAE4AAAAAAAAYFkAACBZAAABOAAAAQAAAHBZAAAwWQAAATQAAAAAAACAWQAAQFkAAAE0AAABAAAAkFkAAFBZAAABMAAAAAAAAKBZAABgWQAAATAAAAEAAACwWQAAcFkAAAEoAAAAAAAAwFkAAGBZAAABKAAAAQAAANBZAABwWQAAASQAAAAAAADgWQAAgFkAAAEkAAABAAAA8FkAAJBZAAABIgAAAAAAAABaAACgWQAAASIAAAEAAAAQWgAAsFkAAAEcAAAAAAAAIFoAAMBZAAABHAAAAQAAADBaAADQWQAAARgAAAAAAABAWgAA4FkAAAEYAAABAAAAUFoAAPBZAAABFgAAAAAAAGBaAAAAWgAAARYAAAEAAABwWgAAEFoAAAEUAAAAAAAAgFoAACBaAAABFAAAAQAAAJBaAAAwWgAAARIAAAAAAACgWgAAQFoAAAESAAABAAAAsFoAAFBaAAABEQAAAAAAAMBaAABgWgAAAREAAAEAAADQWgAAcFoAAMEKAAAAAAAA4FoAAIBaAADBCgAAAQAAAPBaAACQWgAAwQkAAAAAAAAAWwAAoFoAAMEJAAABAAAAEFsAALBaAAChCAAAAAAAACBbAADAWgAAoQgAAAEAAAAwWwAA0FoAACEFAAAAAAAAQFsAAOBaAAAhBQAAAQAAAFBbAADwWgAAQQQAAAAAAABgWwAAAFsAAEEEAAABAAAAcFsAABBbAAChAgAAAAAAAIBbAAAgWwAAoQIAAAEAAACQWwAAMFsAACECAAAAAAAAoFsAAEBbAAAhAgAAAQAAALBbAABQWwAAQQEAAAAAAADAWwAAYFsAAEEBAAABAAAA0FsAAHBbAAARAQAAAAAAAOBbAACAWwAAEQEAAAEAAADwWwAAkFsAAIUAAAAAAAAAAFwAAKBbAACFAAAAAQAAABBcAACwWwAASQAAAAAAAAAgXAAAwFsAAEkAAAABAAAAMFwAANBbAAAlAAAAAAAAAEBcAADgWwAAJQAAAAEAAABQXAAA8FsAABUAAAAAAAAAYFwAAABcAAAVAAAAAQAAAHBcAAAQXAAACQAAAAAAAACAXAAAIFwAAAkAAAABAAAAkFwAADBcAAAFAAAAAAAAAKBcAABAXAAABQAAAAEAAACwXAAAUFwAAAEAAAAAAAAAoFwAAGBcAAABAAAAAQAAALBcAABwXAAAAVYAAAAAAADAXAAAwFwAAAFWAAABAAAA0FwAANBcAAAAAQMDAQIDAwUGBwcGBgcHAAEDAwECAwMFBgcHBgYHBwUGBwcGBgcHCAgICAgICAgFBgcHBgYHBwgICAgICAgIAQIDAwICAwMGBgcHBgYHBwECAwMCAgMDBgYHBwYGBwcGBgcHBgYHBwgICAgICAgIBgYHBwYGBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgDAwQEAwMEBAcHBwcHBwcHAwMEBAMDBAQHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgHBwcHBwcHBwgICAgICAgIAQIDAwICAwMGBgcHBgYHBwECAwMCAgMDBgYHBwYGBwcGBgcHBgYHBwgICAgICAgIBgYHBwYGBwcICAgICAgICAICAwMCAgMDBgYHBwYGBwcCAgMDAgIDAwYGBwcGBgcHBgYHBwYGBwcICAgICAgICAYGBwcGBgcHCAgICAgICAgDAwQEAwMEBAcHBwcHBwcHAwMEBAMDBAQHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgHBwcHBwcHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAABBQYBAgYGAwMHBwMDBwcAAQUGAQIGBgMDBwcDAwcHAwMHBwMDBwcEBAcHBAQHBwMDBwcDAwcHBAQHBwQEBwcBAgYGAgIGBgMDBwcDAwcHAQIGBgICBgYDAwcHAwMHBwMDBwcDAwcHBAQHBwQEBwcDAwcHAwMHBwQEBwcEBAcHBQYICAYGCAgHBwgIBwcICAUGCAgGBggIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAYGCAgGBggIBwcICAcHCAgGBggIBgYICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgBAgYGAgIGBgMDBwcDAwcHAQIGBgICBgYDAwcHAwMHBwMDBwcDAwcHBAQHBwQEBwcDAwcHAwMHBwQEBwcEBAcHAgIGBgICBgYDAwcHAwMHBwICBgYCAgYGAwMHBwMDBwcDAwcHAwMHBwQEBwcEBAcHAwMHBwMDBwcEBAcHBAQHBwYGCAgGBggIBwcICAcHCAgGBggIBgYICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgGBggIBgYICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIAAEDAwECAwMFBgcHBgYHBwABAwMBAgMDBQYHBwYGBwcFBgcHBgYHBwgICAgICAgIBQYHBwYGBwcICAgICAgICAECAwMCAgMDBgYHBwYGBwcBAgMDAgIDAwYGBwcGBgcHBgYHBwYGBwcICAgICAgICAYGBwcGBgcHCAgICAgICAgDAwQEAwMEBAcHBwcHBwcHAwMEBAMDBAQHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgHBwcHBwcHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAECAwMCAgMDBgYHBwYGBwcBAgMDAgIDAwYGBwcGBgcHBgYHBwYGBwcICAgICAgICAYGBwcGBgcHCAgICAgICAgCAgMDAgIDAwYGBwcGBgcHAgIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgAAwEEAwYEBwEEAgUEBwUHAAMBBAMGBAcBBAIFBAcFBwEEAgUEBwUHAgUCBQUHBQcBBAIFBAcFBwIFAgUFBwUHAwYEBwYIBwgEBwUHBwgHCAMGBAcGCAcIBAcFBwcIBwgEBwUHBwgHCAUHBQcHCAcIBAcFBwcIBwgFBwUHBwgHCAEEAgUEBwUHAgUCBQUHBQcBBAIFBAcFBwIFAgUFBwUHAgUCBQUHBQcCBQIFBQcFBwIFAgUFBwUHAgUCBQUHBQcEBwUHBwgHCAUHBQcHCAcIBAcFBwcIBwgFBwUHBwgHCAUHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAUHBQcHCAcIAwYEBwYIBwgEBwUHBwgHCAMGBAcGCAcIBAcFBwcIBwgEBwUHBwgHCAUHBQcHCAcIBAcFBwcIBwgFBwUHBwgHCAYIBwgICAgIBwgHCAgICAgGCAcICAgICAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgEBwUHBwgHCAUHBQcHCAcIBAcFBwcIBwgFBwUHBwgHCAUHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAUHBQcHCAcIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgHCAcICAgICAkJCgoJCQoKDAwNCwwMDQsJCQoKCQkKCgwMCw0MDAsNDAwNDQwMCwsMCQ0KCQwKCwwMCwsMDA0NDAkLCgkMCg0JCQoKCQkKCgwMDQsMDA0LCQkKCgkJCgoMDAsNDAwLDQwMDQ0MDAsLDAkNCgkMCgsMDAsLDAwNDQwJCwoJDAoNCgoKCgoKCgoNCw0LDQsNCwoKCQkKCgkJDQsMDA0LDAwNDQ0NCwsLCw0KDQoKCwoLDQ0MDAsLDAwNCgwJCgsJDAoKCQkKCgkJCw0MDAsNDAwKCgoKCgoKCgsNCw0LDQsNCwsMDA0NDAwLCgwJCg0JDAsLCwsNDQ0NCwoLCgoNCg0AQenLAQs3AQABAAEAAQAAAQEAAAEBAAEAAQABAAEAAAAAAQEBAQAAAAAAAQABAAAAAAEBAQEAAAABAAEBAQBBqcwBCzcBAAEAAQABAAABAQAAAQEAAQABAAEAAQAAAAABAQEBAAAAAAABAAEAAAAAAQEBAQAAAAEAAQEBAEHpzAELBwEAAQABAAEAQfnMAQvtBgEAAQABAAEAAAAAAQEBAQAAAAAAAQABAAAAAAEBAQEAAAAAAAEAAQEBAAABAQAAAAEAAQABAAEBAQEBAQEBAQABAAEAAQABAAAAAAEBAQEAAQAAAQEAAQAAAAABAQEBAAEAAQEBAQFOU3QzX18yMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRQAAGHAAAOBmAABOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQAAGHAAAChnAABOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQAAGHAAAHBnAABOU3QzX18yMTJiYXNpY19zdHJpbmdJRHNOU18xMWNoYXJfdHJhaXRzSURzRUVOU185YWxsb2NhdG9ySURzRUVFRQAAABhwAAC4ZwAATlN0M19fMjEyYmFzaWNfc3RyaW5nSURpTlNfMTFjaGFyX3RyYWl0c0lEaUVFTlNfOWFsbG9jYXRvcklEaUVFRUUAAAAYcAAABGgAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWNFRQAAGHAAAFBoAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lhRUUAABhwAAB4aAAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAAAYcAAAoGgAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SXRFRQAAGHAAAMhoAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lpRUUAABhwAADwaAAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAAAYcAAAGGkAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWxFRQAAGHAAAEBpAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ltRUUAABhwAABoaQAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAAAYcAAAkGkAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQAAGHAAALhpAABYcQAA6HEAQfDTAQtqAv8ABGQAIAAABP//BgABAAEAAQD//wH/Af//////Af8B/wH/Af8B/wH/Af8B//////8K/yAA//8D/wH/BP8eAAABBf//////YwAACGMA6AMCAAAA//////8AAAAB/wH//////////////wBB6dQBCwEEAEH21AELRAH/Af//////AAEgAAQAgAAACP//Af8B/////////wH/Bv8H/wj/Cf//////vAK8AgEA//8BAAEA//8AAP//////////AEHK1QELARQAQerVAQse//8BAAr///////////8B/wH/AAAAAAAAAf8B/wH/AEGa1gELSAH/AAAAAAAAAf8B/wEAAAABAAAAAf//////AAAAAAH///8AAAAA/////////////ygACv//////AQAK/////wD//////////wBBxtcBCxwB/wH///8BAP//////////////////Cv//////AEHw1wELQRkACgAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQARChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEHB2AELIQ4AAAAAAAAAABkACg0ZGRkADQAAAgAJDgAAAAkADgAADgBB+9gBCwEMAEGH2QELFRMAAAAAEwAAAAAJDAAAAAAADAAADABBtdkBCwEQAEHB2QELFQ8AAAAEDwAAAAAJEAAAAAAAEAAAEABB79kBCwESAEH72QELHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBBstoBCw4aAAAAGhoaAAAAAAAACQBB49oBCwEUAEHv2gELFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABBndsBCwEWAEGp2wELrQcVAAAAABUAAAAACRYAAAAAABYAABYAADAxMjM0NTY3ODlBQkNERUZOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQAAAABAcAAA0G0AAFBxAABOMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mb0UAAABAcAAAAG4AAPRtAABOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UAAABAcAAAMG4AAPRtAABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBAcAAAYG4AAFRuAABOMTBfX2N4eGFiaXYxMjBfX2Z1bmN0aW9uX3R5cGVfaW5mb0UAAAAAQHAAAJBuAAD0bQAATjEwX19jeHhhYml2MTI5X19wb2ludGVyX3RvX21lbWJlcl90eXBlX2luZm9FAAAAQHAAAMRuAABUbgAAAAAAAERvAACpAAAAqgAAAKsAAACsAAAArQAAAE4xMF9fY3h4YWJpdjEyM19fZnVuZGFtZW50YWxfdHlwZV9pbmZvRQBAcAAAHG8AAPRtAAB2AAAACG8AAFBvAABEbgAACG8AAFxvAABiAAAACG8AAGhvAABjAAAACG8AAHRvAABoAAAACG8AAIBvAABhAAAACG8AAIxvAABzAAAACG8AAJhvAAB0AAAACG8AAKRvAABpAAAACG8AALBvAABqAAAACG8AALxvAABsAAAACG8AAMhvAABtAAAACG8AANRvAAB4AAAACG8AAOBvAAB5AAAACG8AAOxvAABmAAAACG8AAPhvAABkAAAACG8AAARwAAAAAAAAJG4AAKkAAACuAAAAqwAAAKwAAACvAAAAsAAAALEAAACyAAAAAAAAAIhwAACpAAAAswAAAKsAAACsAAAArwAAALQAAAC1AAAAtgAAAE4xMF9fY3h4YWJpdjEyMF9fc2lfY2xhc3NfdHlwZV9pbmZvRQAAAABAcAAAYHAAACRuAAAAAAAAhG4AAKkAAAC3AAAAqwAAAKwAAAC4AAAAAAAAANRwAAC5AAAAugAAALsAAABTdDlleGNlcHRpb24AAAAAGHAAAMRwAAAAAAAAAHEAADkAAAC8AAAAvQAAAFN0MTFsb2dpY19lcnJvcgBAcAAA8HAAANRwAAAAAAAANHEAADkAAAC+AAAAvQAAAFN0MTJsZW5ndGhfZXJyb3IAAAAAQHAAACBxAAAAcQAAU3Q5dHlwZV9pbmZvAAAAABhwAABAcQBB2OIBCwEFAEHk4gELAZ8AQfziAQsKoAAAAKEAAAAAdgBBlOMBCwECAEGk4wELCP//////////AEHo4wELAQUAQfTjAQsBogBBjOQBCw6gAAAAowAAAAh2AAAABABBpOQBCwEBAEG05AELBf////8KAEH45AELAzB+AQ=="},8081:A=>{"use strict";A.exports="data:application/wasm;base64,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DiAJRw0ACwsgASADRg0BCwNAIAUgAUECdCICaiAPIAIgEWooAgBqNgL8ASABIBVGIQIgAUEBaiEBIAJFDQALCyBfpyEMIGCnISECQCANQQ1LIhwNACADIQFBDiANayITQQRPBEBBCiANayIJQQJ2QQFqIgRBA3EhD0EAIQJBACEBIAlBDE8EQCAEQfz///8HcSEEQQAhCwNAIAVB/AFqIgkgASADakECdGr9DP///3////9/////f////3/9CwIAIAkgAyABQQRyakECdGr9DP///3////9/////f////3/9CwIAIAkgAyABQQhyakECdGr9DP///3////9/////f////3/9CwIAIAkgAyABQQxyakECdGr9DP///3////9/////f////3/9CwIAIAFBEGohASALQQRqIgsgBEcNAAsLIA8EQANAIAEgA2pBAnQgBWr9DP///3////9/////f////3/9CwL8ASABQQRqIQEgAkEBaiICIA9HDQALCyATQXxxIgEgE0YNASABIANqIQELA0AgAUECdCAFakH/////BzYC/AEgAUEBaiIBQRBHDQALCyAFIAw2AvQBIAUgITYC8AEgDUEBaiIiQQNxIRlBACELQQAhASANQQNJIh9FBEAgIkH8AXEhBEEAIQ4DQCAFQfwBaiIJIAFBAnRqKAIAQf8BQQEgDSABa0EBdHQQKhogCSABQQFyIgJBAnRqKAIAQf8BQQEgDSACa0EBdHQQKhogCSABQQJyIgJBAnRqKAIAQf8BQQEgDSACa0EBdHQQKhogCSABQQNyIgJBAnRqKAIAQf8BQQEgDSACa0EBdHQQKhogAUEEaiEBIA5BBGoiDiAERw0ACwsgGQRAA0AgAUECdCAFaigC/AFB/wFBASANIAFrQQF0dBAqGiABQQFqIQEgC0EBaiILIBlHDQALC0EAIQEgBSAVQQJ0IhNqKAL8ASJJQQA6AAAgBSAVNgL4ASAUKQIUImBCIIghXyAYKAIAIDlqIQ8CQCASRQRAIA1BAmsiBEECdkEBaiIBQQNxIQlBACELQQAhAiAEQQxPBEAgAUH8////B3EhBEEAIRYDQCAFQawBaiIMIAJBAnQiDmogD/0RIk0gDiARav0AAgD9rgH9CwIAIAwgDkEQciIBaiBNIAEgEWr9AAIA/a4B/QsCACAMIA5BIHIiAWogTSABIBFq/QACAP2uAf0LAgAgDCAOQTByIgFqIE0gASARav0AAgD9rgH9CwIAIAJBEGohAiAWQQRqIhYgBEcNAAsLIANB/AFxIQEgCQRAA0AgBSACQQJ0IgRqIA/9ESAEIBFq/QACAP2uAf0LAqwBIAJBBGohAiALQQFqIgsgCUcNAAsLIAEgA0YNAQsDQCAFIAFBAnQiAmogDyACIBFqKAIAajYCrAEgASAVRiECIAFBAWohASACRQ0ACwsgX6chCSBgpyE6AkAgHA0AIAMhAUEOIA1rIg9BBE8EQEEKIA1rIgRBAnZBAWoiAkEDcSEMQQAhC0EAIQEgBEEMTwRAIAJB/P///wdxIQJBACEOA0AgBUGsAWoiBCABIANqQQJ0av0M////f////3////9/////f/0LAgAgBCADIAFBBHJqQQJ0av0M////f////3////9/////f/0LAgAgBCADIAFBCHJqQQJ0av0M////f////3////9/////f/0LAgAgBCADIAFBDHJqQQJ0av0M////f////3////9/////f/0LAgAgAUEQaiEBIA5BBGoiDiACRw0ACwsgDARAA0AgASADakECdCAFav0M////f////3////9/////f/0LAqwBIAFBBGohASALQQFqIgsgDEcNAAsLIA9BfHEiASAPRg0BIAEgA2ohAQsDQCABQQJ0IAVqQf////8HNgKsASABQQFqIgFBEEcNAAsLIAUgCTYCpAEgBSA6NgKgAUEAIQtBACEBIB9FBEAgIkH8AXEhBEEAIQ4DQCAFQawBaiIJIAFBAnRqKAIAQQBBASANIAFrQQF0dBAqGiAJIAFBAXIiAkECdGooAgBBAEEBIA0gAmtBAXR0ECoaIAkgAUECciICQQJ0aigCAEEAQQEgDSACa0EBdHQQKhogCSABQQNyIgJBAnRqKAIAQQBBASANIAJrQQF0dBAqGiABQQRqIQEgDkEEaiIOIARHDQALCyAZBEADQCABQQJ0IAVqKAKsAUEAQQEgDSABa0EBdHQQKhogAUEBaiEBIAtBAWoiCyAZRw0ACwtBACEBIAUgE2ooAqwBIkpBADoAACAFIBU2AqgBIBQpAhQiYEIgiCFfIBgoAgAgRmohDwJAIBJFBEAgDUECayIEQQJ2QQFqIgFBA3EhCUEAIQtBACECIARBDE8EQCABQfz///8HcSEEQQAhFgNAIAVB3ABqIgwgAkECdCIOaiAP/REiTSAOIBFq/QACAP2uAf0LAgAgDCAOQRByIgFqIE0gASARav0AAgD9rgH9CwIAIAwgDkEgciIBaiBNIAEgEWr9AAIA/a4B/QsCACAMIA5BMHIiAWogTSABIBFq/QACAP2uAf0LAgAgAkEQaiECIBZBBGoiFiAERw0ACwsgA0H8AXEhASAJBEADQCAFIAJBAnQiBGogD/0RIAQgEWr9AAIA/a4B/QsCXCACQQRqIQIgC0EBaiILIAlHDQALCyABIANGDQELA0AgBSABQQJ0IgJqIA8gAiARaigCAGo2AlwgASAVRiECIAFBAWohASACRQ0ACwsgX6chCSBgpyEjAkAgHA0AIAMhAUEOIA1rIg9BBE8EQEEKIA1rIgRBAnZBAWoiAkEDcSEMQQAhC0EAIQEgBEEMTwRAIAJB/P///wdxIQJBACEOA0AgBUHcAGoiBCABIANqQQJ0av0M////f////3////9/////f/0LAgAgBCADIAFBBHJqQQJ0av0M////f////3////9/////f/0LAgAgBCADIAFBCHJqQQJ0av0M////f////3////9/////f/0LAgAgBCADIAFBDHJqQQJ0av0M////f////3////9/////f/0LAgAgAUEQaiEBIA5BBGoiDiACRw0ACwsgDARAA0AgASADakECdCAFav0M////f////3////9/////f/0LAlwgAUEEaiEBIAtBAWoiCyAMRw0ACwsgD0F8cSIBIA9GDQEgASADaiEBCwNAIAFBAnQgBWpB/////wc2AlwgAUEBaiIBQRBHDQALCyAFIAk2AlQgBSAjNgJQQQAhC0EAIQEgH0UEQCAiQfwBcSEEQQAhDgNAIAVB3ABqIgkgAUECdGooAgBB/wFBASANIAFrQQF0dBAqGiAJIAFBAXIiAkECdGooAgBB/wFBASANIAJrQQF0dBAqGiAJIAFBAnIiAkECdGooAgBB/wFBASANIAJrQQF0dBAqGiAJIAFBA3IiAkECdGooAgBB/wFBASANIAJrQQF0dBAqGiABQQRqIQEgDkEEaiIOIARHDQALCyAZBEADQCABQQJ0IAVqKAJcQf8BQQEgDSABa0EBdHQQKhogAUEBaiEBIAtBAWoiCyAZRw0ACwtBACEBIAUgE2ooAlwiS0EAOgAAIAUgFTYCWCAUKQIUImBCIIghXyAYKAIAIEZqIDlqIQ8CQCASRQRAIA1BAmsiBEECdkEBaiIBQQNxIQlBACELQQAhAiAEQQxPBEAgAUH8////B3EhBEEAIRYDQCAFQQxqIgwgAkECdCISaiAP/REiTSARIBJq/QACAP2uAf0LAgAgDCASQRByIgFqIE0gASARav0AAgD9rgH9CwIAIAwgEkEgciIBaiBNIAEgEWr9AAIA/a4B/QsCACAMIBJBMHIiAWogTSABIBFq/QACAP2uAf0LAgAgAkEQaiECIBZBBGoiFiAERw0ACwsgA0H8AXEhASAJBEADQCAFIAJBAnQiBGogD/0RIAQgEWr9AAIA/a4B/QsCDCACQQRqIQIgC0EBaiILIAlHDQALCyABIANGDQELA0AgBSABQQJ0IgJqIA8gAiARaigCAGo2AgwgASAVRiECIAFBAWohASACRQ0ACwsgX6chCSBgpyE7AkAgHA0AQQ4gDWsiD0EETwRAQQogDWsiBEECdkEBaiICQQNxIQxBACELQQAhASAEQQxPBEAgAkH8////B3EhAkEAIQ4DQCAFQQxqIgQgASADakECdGr9DP///3////9/////f////3/9CwIAIAQgAyABQQRyakECdGr9DP///3////9/////f////3/9CwIAIAQgAyABQQhyakECdGr9DP///3////9/////f////3/9CwIAIAQgAyABQQxyakECdGr9DP///3////9/////f////3/9CwIAIAFBEGohASAOQQRqIg4gAkcNAAsLIAwEQANAIAUgASADakECdGr9DP///3////9/////f////3/9CwIMIAFBBGohASALQQFqIgsgDEcNAAsLIA9BfHEiASAPRg0BIAEgA2ohAwsDQCAFIANBAnRqQf////8HNgIMIANBAWoiA0EQRw0ACwsgBSAJNgIEIAUgOzYCAEEAIQJBACEBIB9FBEAgIkH8AXEhBEEAIQsDQCAFQQxqIgkgAUECdGooAgBBAEEBIA0gAWtBAXR0ECoaIAkgAUEBciIDQQJ0aigCAEEAQQEgDSADa0EBdHQQKhogCSABQQJyIgNBAnRqKAIAQQBBASANIANrQQF0dBAqGiAJIAFBA3IiA0ECdGooAgBBAEEBIA0gA2tBAXR0ECoaIAFBBGohASALQQRq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IAMgAygCECICQQAgAiADKAIkSRs2AhAgAA0DC0EAIQggAygCICICDQALCyADIAMoAhAiAEEAIAAgAygCJEkbNgIQCyABIAMoAgw2AgACQCADKAJABEAgAyADKAIIQQFqIgI2AgggAiADKAI4IAMoAgwiAEEDdGooAgRJDQEgA0EANgIQIANBADYCCCADIABBAWo2AgwgACADKAIwSQ0BIAFBADYCAEEADAILIAMgAygCDEEBaiIANgIMIAAgAygCMEkNACADQQA2AgwgAyADKAIIIgBBAWo2AgggACADKAI4KAIESQ0AIAFBADYCAEEADAELIAMoAiwgASgCAEEMbGoLC5UWAw1/An4BeyMAQRBrIgwkAAJAIAAoAmAgAS0ACEYNACAALQAyBEBBmMsDQZGBDEG9GkHmDUG6CEEAQZjLAygCACgCABEAAAwBC0GgywNBkYEMQb0aQegNQboIQQBBoMsDKAIAKAIAEQAACyAAIAAoAmBBAWo2AmAgASgCBCEBIAMpAwAhEiACIAIoAgAoAhARDgAhESAMIAFBDGtBACABGyIQIAMpAwAgEX2naiIENgIMAkACQCAEBEACQCAAKAIgIgZFDQAgACgCJCEFQQAhAyAGQQRPBEAgBkF8cSEDQQAhAQNAIBMgBSABQQNyQShsakEgaiAFIAFBAnJBKGxqQSBqIAUgAUEBckEobGpBIGogBSABQShsav0JAiD9VgIAAf1WAgAC/VYCAAP9uQEhEyABQQRqIgEgA0cNAAsgEyATIBP9DQgJCgsMDQ4PAAECAwABAgP9uQEiEyATIBP9DQQFBgcAAQIDAAECAwABAgP9uQH9GwAhByADIAZGDQELA0AgByAFIANBKGxqKAIgIgEgASAHSRshByADQQFqIgMgBkcNAAsLAkACQAJAAkACQAJAAkAgACgCUA4FBAQDAQAGCyAGRQ0FDAELIAZFDQQDQCAAKAIkIQ5B/////wchBUEAIQdBACENQQAhCEEAIQlB/////wchCgNAIA4gB0EobGoiASgCBCILBEAgASgCICEPQQAhAwNAIAshAQJAIA8gAyIEayIDBEADQAJAIAEoAjwhASADQQFrIgNFDQAgAQ0BCwsgAUUNAQsgATUCSCABKAJEIgOtfiABKAKsASADIAEoArABbGoiA61YDQAgASgCQCADQdwAbGopAgQi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dGoiGiITQRRqKAIAIgpFDQAgGigCGCILRQ0AAkAgCEEBcQRAAkAgBygC0AIiCgRAIAcoAswCIQgMAQsCQCAHKALYAgRAIAdBADYC+AEgBygCyAIiCyAHQfgBakEBIAsoAgAoAggRAQBBAUcNDSAHIAcoAvgBIgg2AswCIActANQCIQogByAIQf8BRjoA1AIgByAHKALYAkEBazYC2AIMAQtBACEIIAdBADYCzAIgBy0A1AIhCiAHQQA6ANQCC0EIIAprQf8BcSEKCyAHIApBAWsiCzYC0AIgCCALdkEBcUUNByATKAIUIQogGigCGCELC0EAIQggCiAKQQFrcUEARyAKZ2tBH2oiCiALIAtBAWtxQQBHIAtna0EfaiILIAogC0sbIgpBAWohEiATKQIUIiRCIIghJSAAKAIAIQ0gCkECaiILQQRJIhRFBEAgCkECayIIQQJ2QQFqIgxBA3EhEEEAIQ9BACEJIAhBDE8EQCAMQfz///8HcSEbQQAhDgNAIAdBhAJqIgwgCUECdCIIaiAN/REiIyACIAhq/QACAP2uAf0LAgAgDCAIQRByIhVqICMgAiAVav0AAgD9rgH9CwIAIAwgCEEgciIVaiAjIAIgFWr9AAIA/a4B/QsCACAMIAhBMHIiCGogIyACIAhq/QACAP2uAf0LAgAgCUEQaiEJIA5BBGoiDiAbRw0ACwsgC0F8cSEIIBAEQANAIAcgCUECdCIMaiAN/REgAiAMav0AAgD9rgH9CwKEAiAJQQRqIQkgD0EBaiIPIBBHDQALCyAIIAtGDQELA0AgByAIQQJ0IglqIA0gAiAJaigCAGo2AoQCIAggEkYhCSAIQQFqIQggCUUNAAsMAAsgJachDiAkpyEbAkACQCALQQ9LIhVFBEAgCyEIAkBBDiAKayIPQQRPBEBBCiAKayIJQQJ2QQFqIgxBA3EhEEEAIQ1BACEIIAlBDE8EQCAMQfz///8HcSEYQQAhDANAIAdBhAJqIgkgCCALakECdGr9DP///3////9/////f////3/9CwIAIAkgCyAIQQRyakECdGr9DP///3////9/////f////3/9CwIAIAkgCyAIQQhyakECdGr9DP///3////9/////f////3/9CwIAIAkgCyAIQQxyakECdGr9DP///3////9/////f////3/9CwIAIAhBEGohCCAMQQRqIgwgGEcNAAsLIBAEQANAIAggC2pBAnQgB2r9DP///3////9/////f////3/9CwKEAiAIQQRqIQggDUEBaiINIBBHDQALCyAPQXxxIgggD0YNASAIIAtqIQgLA0AgCEECdCAHakH/////BzYChAIgCEEBaiIIQRBHDQALCyAHIA42AvwBIAcgGzYC+AEgEg0BDAILIAcgDjYC/AEgByAbNgL4AQsgCkEBaiIJQQNxIQ5BACENQQAhCCAKQQNPBEAgCUF8cSEPQQAhDANAIAdBhAJqIgkgCEECdGooAgBBAEEBIAogCGtBAXR0ECoaIAkgCEEBciIQQQJ0aigCAEEAQQEgCiAQa0EBdHQQKhogCSAIQQJyIhBBAnRqKAIAQQBBASAKIBBrQQF0dBAqGiAJIAhBA3IiEEECdGooAgBBAEEBIAogEGtBAXR0ECoaIAhBBGohCCAMQQRqIgwgD0cNAAsLIA5FDQADQCAIQQJ0IAdqKAKEAkEAQQEgCiAIa0EBdHQQKhogCEEBaiEIIA1BAWoiDSAORw0ACwsgByASQQJ0IhhqKAKEAiEJIAcgEjYCgAJBACEIIAlBADoAACATKQIUIiRCIIghJSAAKAIAIAFqIQ0CQCAURQRAIApBAmsiCEECdkEBaiIMQQNxIRBBACEPQQAhCSAIQQxPBEAgDEH8////B3EhHEEAIQ4DQCAHQbQBaiIMIAlBAnQiCGogDf0RIiMgAiAIav0AAgD9rgH9CwIAIAwgCEEQciIRaiAjIAIgEWr9AAIA/a4B/QsCACAMIAhBIHIiEWogIyACIBFq/QACAP2uAf0LAgAgDCAIQTByIghqICMgAiAIav0AAgD9rgH9CwIAIAlBEGohCSAOQQRqIg4gHEcNAAsLIAtBfHEhCCAQBEADQCAHIAlBAnQiDGogDf0RIAIgDGr9AAIA/a4B/QsCtAEgCUEEaiEJIA9BAWoiDyAQRw0ACwsgCCALRg0BCwNAIAcgCEECdCIJaiANIAIgCWooAgBqNgK0ASAIIBJGIQkgCEEBaiEIIAlFDQALCyAlpyEOICSnIRwCQAJAIBVFBEAgCyEIAkBBDiAKayIPQQRPBEBBCiAKayIJQQJ2QQFqIgxBA3EhEEEAIQ1BACEIIAlBDE8EQCAMQfz///8HcSERQQAhDANAIAdBtAFqIgkgCCALakECdGr9DP///3////9/////f////3/9CwIAIAkgCyAIQQRyakECdGr9DP///3////9/////f////3/9CwIAIAkgCyAIQQhyakECdGr9DP///3////9/////f////3/9CwIAIAkgCyAIQQxyakECdGr9DP///3////9/////f////3/9CwIAIAhBEGohCCAMQQRqIgwgEUcNAAsLIBAEQANAIAggC2pBAnQgB2r9DP///3////9/////f////3/9CwK0ASAIQQRqIQggDUEBaiINIBBHDQALCyAPQXxxIgggD0YNASAIIAtqIQgLA0AgCEECdCAHakH/////BzYCtAEgCEEBaiIIQRBHDQALCyAHIA42AqwBIAcgHDYCqAEgEg0BDAILIAcgDjYCrAEgByAcNgKoAQsgCkEBaiIJQQNxIQ5BACENQQAhCCAKQQNPBEAgCUF8cSEPQQAhDANAIAdBtAFqIgkgCEECdGooAgBBAEEBIAogCGtBAXR0ECoaIAkgCEEBciIQQQJ0aigCAEEAQQEgCiAQa0EBdHQQKhogCSAIQQJyIhBBAnRqKAIAQQBBASAKIBBrQQF0dBAqGiAJIAhBA3IiEEECdGooAgBBAEEBIAogEGtBAXR0ECoaIAhBBGohCCAMQQRqIgwgD0cNAAsLIA5FDQADQCAIQQJ0IAdqKAK0AUEAQQEgCiAIa0EBdHQQKhogCEEBaiEIIA1BAWoiDSAORw0ACwsgByAYaigCtAEhCSAHIBI2ArABQQAhCCAJQQA6AAAgEykCFCIkQiCIISUgACgCACAeaiENAkAgFEUEQCAKQQJrIghBAnZBAWoiDEEDcSEQQQAhD0EAIQkgCEEMTwRAIAxB/P///wdxIRFBACEOA0AgB0HkAGoiDCAJQQJ0IghqIA39ESIjIAIgCGr9AAIA/a4B/QsCACAMIAhBEHIiFmogIyACIBZq/QACAP2uAf0LAgAgDCAIQSByIhZqICMgAiAWav0AAgD9rgH9CwIAIAwgCEEwciIIaiAjIAIgCGr9AAIA/a4B/QsCACAJQRBqIQkgDkEEaiIOIBFHDQALCyALQXxxIQggEARAA0AgByAJQQJ0IgxqIA39ESACIAxq/QACAP2uAf0LAmQgCUEEaiEJIA9BAWoiDyAQRw0ACwsgCCALRg0BCwNAIAcgCEECdCIJaiANIAIgCWooAgBqNgJkIAggEkYhCSAIQQFqIQggCUUNAAsLICWnIQ4gJKchEAJAAkAgFUUEQCALIQgCQEEOIAprIg9BBE8EQEEKIAprIglBAnZBAWoiDEEDcSERQQAhDUEAIQggCUEMTwRAIAxB/P///wdxIRZBACEMA0AgB0HkAGoiCSAIIAtqQQJ0av0M////f////3////9/////f/0LAgAgCSALIAhBBHJqQQJ0av0M////f////3////9/////f/0LAgAgCSALIAhBCHJqQQJ0av0M////f////3////9/////f/0LAgAgCSALIAhBDHJqQQJ0av0M////f////3////9/////f/0LAgAgCEEQaiEIIAxBBGoiDCAWRw0ACwsgEQRAA0AgCCALakECdCAHav0M////f////3////9/////f/0LAmQgCEEEaiEIIA1BAWoiDSARRw0ACwsgD0F8cSIIIA9GDQEgCCALaiEICwNAIAhBAnQgB2pB/////wc2AmQgCEEBaiIIQRBHDQALCyAHIA42AlwgByAQNgJYIBINAQwCCyAHIA42AlwgByAQNgJYCyAKQQFqIglBA3EhDkEAIQ1BACEIIApBA08EQCAJQXxxIQ9BACEMA0AgB0HkAGoiCSAIQQJ0aigCAEEAQQEgCiAIa0EBdHQQKhogCSAIQQFyIhFBAnRqKAIAQQBBASAKIBFrQQF0dBAqGiAJIAhBAnIiEUECdGooAgBBAEEBIAogEWtBAXR0ECoaIAkgCEEDciIRQQJ0aigCAEEAQQEgCiARa0EBdHQQKhogCEEEaiEIIAxBBGoiDCAPRw0ACwsgDkUNAANAIAhBAnQgB2ooAmRBAEEBIAogCGtBAXR0ECoaIAhBAWohCCANQQFqIg0gDkcNAAsLIAcgGGooAmQhCSAHIBI2AmBBACEIIAlBADoAACATKQIUIiRCIIghJSAAKAIAIAFqIB5qIQ0CQCAURQRAIApBAmsiCEECdkEBaiIMQQNxIRRBACEPQQAhCSAIQQxPBEAgDEH8////B3EhEUEAIQ4DQCAHQRRqIgwgCUECdCIIaiAN/REiIyACIAhq/QACAP2uAf0LAgAgDCAIQRByIhZqICMgAiAWav0AAgD9rgH9CwIAIAwgCEEgciIWaiAjIAIgFmr9AAIA/a4B/QsCACAMIAhBMHIiCGogIyACIAhq/QACAP2uAf0LAgAgCUEQaiEJIA5BBGoiDiARRw0ACwsgC0F8cSEIIBQEQANAIAcgCUECdCIMaiAN/REgAiAMav0AAgD9rgH9CwIUIAlBBGohCSAPQQFqIg8gFEcNAAsLIAggC0YNAQsDQCAHIAhBAnQiCWogDSACIAlqKAIAajYCFCAIIBJGIQkgCEEBaiEIIAlFDQALCyAlpyEOICSnIRECQAJAIBVFBEACQEEOIAprIg9BBE8EQEEKIAprIglBAnZBAWoiDEEDcSEUQQAhDUEAIQggCUEMTwRAIAxB/P///wdxIRVBACEMA0AgB0EUaiIJIAggC2pBAnRq/Qz///9/////f////3////9//QsCACAJIAsgCEEEcmpBAnRq/Qz///9/////f////3////9//QsCACAJIAsgCEEIcmpBAnRq/Qz///9/////f////3////9//QsCACAJIAsgCEEMcmpBAnRq/Qz///9/////f////3////9//QsCACAIQRBqIQggDEEEaiIMIBVHDQALCyAUBEADQCAIIAtqQQJ0IAdq/Qz///9/////f////3////9//QsCFCAIQQRqIQggDUEBaiINIBRHDQALCyAPQXxxIgggD0YNASAIIAtqIQsLA0AgC0ECdCAHakH/////BzYCFCALQQFqIgtBEEcNAAsLIAcgDjYCDCAHIBE2AgggEg0BDAILIAcgDjYCDCAHIBE2AggLIApBAWoiC0EDcSEMQQAhCUEAIQggCkEDTwRAIAtBfHEhDkEAIQ0DQCAHQRRqIgsgCEECdGooAgBBAEEBIAogCGtBAXR0ECoaIAsgCEEBciIPQQJ0aigCAEEAQQEgCiAPa0EBdHQQKhogCyAIQQJyIg9BAnRqKAIAQQBBASAKIA9rQQF0dBAqGiALIAhBA3IiD0ECdGooAgBBAEEBIAogD2tBAXR0ECoaIAhBBGohCCANQQRqIg0gDkcNAAsLIAxFDQADQCAIQQJ0IAdqKAIUQQBBASAKIAhrQQF0dBAqGiAIQQFqIQggCUEBaiIJIAxHDQALCyAHIBhqKAIUIQsgByASNgIQIAtBADoAACAaKAIYIhYEQCAZQeAAbCIgIAAoAkxqKAIoISEgEygCFCEVQQAhEwNAAkAgFUUNACAAKAJMICBqKAJYIBooAgwgGigCECATaiAhbGpBGGxqIRRB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CgsMDQ4PAAECAwABAgP9uQEiEyATIBP9DQQFBgcAAQIDAAECAwABAgP9uQH9GwAhAiAEIAlGDQILA0AgAiAFIANBAWtBA25qIAcgA0EBdGovAQBBC3ZqIgkgAiAJSxshAiADIARHIQkgA0EBaiEDIAkNAAsMAQsgACgCyAFBA2wiBUF/Rg0AIANBBXYhByAAQQRqIQRBACEDIAVBAWoiCUEETwRAIAVBA2siAkECdkEBaiIDQQFxIQsgB/0PIRUCQCACQQRJBEBBACECDAELIANB/v///wdxIQxBACECQQAhAwNAIBP9DAAAAAAAAAAAAAAAAAAAAAAgAiAEav1cAgBBA/1tIBX9bv0NEAECAxEFBgcSCQoLEw0OD/0M//////////////////////2uAf25Af0MAAAAAAAAAAAAAAAAAAAAACAEIAJBBHJq/VwCAEED/W0gFf1u/Q0QAQIDEQUGBxIJCgsTDQ4P/Qz//////////////////////a4B/bkBIRMgAkEIaiECIANBAmoiAyAMRw0ACwsgCUF8cSEDIAsEQCAT/QwAAAAAAAAAAAAAAAAAAAAAIAIgBGr9XAIAQQP9bSAV/W79DRABAgMRBQYHEgkKCxMNDg/9DP/////////////////////9rgH9uQEhEwsgEyATIBP9DQgJCgsMDQ4PAAECAwABAgP9uQEiEyATIBP9DQQFBgcAAQIDAAECAwABAgP9uQH9GwAhAiADIAlGDQELA0AgAiADIARqLQAAQQN2IAdqQQFrIgkgAiAJSxshAiADIAVGIQkgA0EBaiEDIAlFDQALC0EAIAJBCUkNABogAkEIayACQRtNDQAaQR8gAkEvSw0AGiACQQJ2QQ1qCyAILwHAAXI7AcABAkACQAJAIAgoAkRBB2sOAgEAAgsjAEEgayICJAAgAiAIQcgAajYCGCACIAhBiAFqNgIQIAIoAhAtAA5BAUYhByACIAIoAhgpAgQ3AgggAiACKAIYKQIMNwIIAkAgAigCCEUEQCACIAIoAhgpAgw3AgAgAigCBEUNAQtBoMsDQcOBDEG9GkHnA0GXPkEAQaDLAygCACgCABEAAAsgAiACKAIYKQIcNwIIAkAgAigCCEUEQCACIAIoAhgpAhw3AgAgAigCBEUNAQtBoMsDQcSBDEG9GkHqA0GSP0EAQaDLAygC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IAJJBEAgACADIAFBA3RqNgJkCwsMACAAIAEpAgA3AlgLDAAgACABKQIANwJQCygAIABB9MgDNgIAIABB5MkDNgIAIABBBGogARB4IABBqMoDNgIAIAALDAAgACABKQIANwJICwwAIAAgASkCADcCQAsVACAAKAI0IAFBA3RqIAIpAgA3AgALCQAgACABNgIwCzkBAX8gASAAKAIEIgRBAXVqIQEgACgCACEAIAEgAiADIARBAXEEfyABKAIAIABqKAIABSAACxEYAAsQACAAIAI4AiwgACABOgAoCyAAIAAgATYCJCAAKAJgIgEgACgCZEcEQCAAIAE2AmQLC4oYAxF/AX4BfSMAQYABayIDJAAgACgCFCIBIAAoAhAiAkcEQCAAIAI2AhQgAiEBCwJAIAAoAhggAmtB//8DSw0AIABBgIAEECsgAiABIAJrIgQQOSIBQYCABGo2AhggACABIARqNgIUIAAgATYCECACRQ0AIAIQLAsgA0H4AGoQRiEHQbDOBEEANgIAIAcoAgBByABqIQFBsM4EKAIAIQJBsM4EQQA2AgACQAJAAkACQAJAIAJBAUYNACADIAE2AnAgAC8BHCEBIAMgAC8BHjYCbCADIAE2AmhBsM4EQQA2AgAgAyADKQNoNwMYIAMoAnAiASADKAIYNgIEIAEgAygCHDYCCEGwzgQoAgAhAUGwzgRBADYCACABQQFGDQAgAC0AISEBQbDOBEEANgIAQeIAIANB8ABqIAEQCkGwzgQoAgAhAkGwzgRBADYCACACQQFGDQMCQAJAIAEEQEEAIQIDQCADIAAoAjQgAkEDdGopAgA3AzggAC0AIiEEIAAtACAhBUGwzgRBADYCACADQfAAaiACIANBOGogBSAEEJABQbDOBCgCACEEQbDOBEEANgIAIARBAUYNAiACQQFqIgIgAUcNAAsLIAApAkAhEkGwzgRBADYCACADIBI3A2AgAyASNwMQIAMoAnAiASADKAIQNgIMIAEgAygCFDYCEEGwzgQoAgAhAUGwzgRBADYCACABQQFHDQEMBQsQAiECDAULIAApAkghEkGwzgRBADYCACADIBI3A1ggAyASNwMIIAMoAnAiASADKAIINgIUIAEgAygCDDYCGEGwzgQoAgAhAUGwzgRBADYCACABQQFGDQMgACkCUCESQbDOBEEANgIAIAMgEjcDUCADIBI3AwAgAygCcCIBIAMoAgA2AhwgASADKAIENgIgQbDOBCgCACEBQbDOBEEANgIAIAFBAUYNA0GwzgRBADYCACAHKAIAQYgBaiEBQbDOBCgCACECQbDOBEEANgIAAkACQCACQQFGDQAgAyABNgJIIAAoAiQhAUGwzgRBADYCAEHoACADQcgAaiABEApBsM4EKAIAIQFBsM4EQQA2AgAgAUEBRg0AIAAoAlwhASAAKAJYIQJBsM4EQQA2AgBB6QAgA0HIAGogAiABEAtBsM4EKAIAIQFBsM4EQQA2AgAgAUEBRg0AIANBADYCQCADQgA3AzgCQAJAIAAoAmQiASAAKAJgIgJHBEBBsM4EQQA2AgBB6gAgA0E4aiABIAJrQQN1EApBsM4EKAIAIQFBsM4EQQA2AgAgAUEBRg0HIAAoAmQiAiAAKAJgIgFrIgVBA3UhCSABIAJHDQELIAMoAjghBAwBC0EBIAkgCUEBTRsiBkEBcSEKQQAhAiADKAI4IQQgBUEQTwRAIAZBfnEhDUEAIQUDQCAEIAJBA3QiBmoiCyABIAZqIg4oAgA2AgAgCyAOKAIENgIEIAQgBkEIciIGaiILIAEgBmoiBigCADYCACALIAYoAgQ2AgQgAkECaiECIAVBAmoiBSANRw0ACwsgCkUNACAEIAJBA3QiAmoiBSABIAJqIgEoAgA2AgAgBSABKAIENgIEC0GwzgRBADYCAEHrACADQcgAaiAJIAQQC0GwzgQoAgAhAUGwzgRBADYCACABQQFGDQQgACgCMCEBQbDOBEEANgIAQewAIANByABqIAFBAnRBkM4AaigCABAKQbDOBCgCACEBQbDOBEEANgIAIAFBAUYNBCAALQBsIQFBsM4EQQA2AgAgAygCSCABOgAIQbDOBCgCACEBQbDOBEEANgIAIAFBAUYNBCAALQAoIQFBsM4EQQA2AgAgAygCSCABOgAOQbDOBCgCACEBQbDOBEEANgIAIAFBAUYNBAJAIAAtACgNAEGwzgRBADYCACAHKAIAQYACaiEBQbDOBCgCACECQbDOBEEANgIAIAJBAUcEQCADIAE2AiggACoCLCETQbDOBEEANgIAIAMoAiggEzgCzAFBsM4EKAIAIQFBsM4EQQA2AgAgAUEBRw0BCwwFCyAALQBsIQFBsM4EQQA2AgAgBygCACABRTYCQEGwzgQoAgAhAUGwzgRBADYCACABQQFGDQRBsM4EQQA2AgBB8gAgByAAQQxqEApBsM4EKAIAIQFBsM4EQQA2AgAgAUEBRg0EIAAtACAhAkGwzgRBADYCAEHzACAHQQAgA0E0ahAWIQlBsM4EKAIAIQFBsM4EQQA2AgAgAUEBRg0EQbDOBEEANgIAIAcoAgBByABqIQFBsM4EKAIAIQRBsM4EQQA2AgAgBEEBRg0EIAMgATYCcEGwzgRBADYCACADIAMoAnApAgQ3AihBsM4EKAIAIQFBsM4EQQA2AgAgAUEBRg0EQbDOBEEANgIAIAMoAiwhASADIAMoAnApAgw3AiBBsM4EKAIAIQRBsM4EQQA2AgAgBEEBRg0EIAEgAygCJCIERg0DIAJBA3YhECABIARrIRFBACELA0AgCyAQbCEOQQAhDQNAQbDOBEEANgIAIAMoAnAvASQhAUGwzgQoAgAhAkGwzgRBADYCAAJAIAJBAUcEQCABIA1LDQEgC0EBaiILIBFHDQMMBwsMBwsgCSgCCCECAkAgAC0AIEEITQRAIAAvARwhASAAKAIAIQRBsM4EQQA2AgAgAygCcC8BJCEFQbDOBCgCACEGQbDOBEEANgIAIAZBAUYNBSAALwEcRQ0BIAQgASAObCAFbGogDWohAUEAIQQDQAJAIAIgAS0AADYCAEGwzgRBADYCACADKAJwLwEkIQVBsM4EKAIAIQZBsM4EQQA2AgAgBkEBRg0AIAEgBWohASACQQRqIQIgBEEBaiIEIAAvARxJDQEMAwsLDAgLIAAvARwhBiAALQAiBEAgBkUNASAAKAIAIAYgDmxqIQFBACEFIAZBBE8EQCAGQQRrIgVBAnZBAWoiDEEDcSEPQQAhCkEAIQQgBUEMTwRAIAxB/P///wdxIQxBACEFA0AgAiAEQQJ0aiABIARBAXRq/QMBAP0LAgAgAiAEQQRyIghBAnRqIAEgCEEBdGr9AwEA/QsCACACIARBCHIiCEECdGogASAIQQF0av0DAQD9CwIAIAIgBEEMciIIQQJ0aiABIAhBAXRq/QMBAP0LAgAgBEEQaiEEIAVBBGoiBSAMRw0ACwsgBkH8/wNxIQUgDwRAA0AgAiAEQQJ0aiABIARBAXRq/QMBAP0LAgAgBEEEaiEEIApBAWoiCiAPRw0ACwsgBSAGRg0CIAIgBUECdGohAiABIAVBAXRqIQELA0AgAiABLgEANgIAIAJBBGohAiABQQJqIQEgBUEBaiIFIAZHDQALDAELIAZFDQAgACgCACAGIA5saiEBQQAhBSAGQQRPBEAgBkEEayIFQQJ2QQFqIgxBA3EhD0EAIQpBACEEIAVBDE8EQCAMQfz///8HcSEMQQAhBQNAIAIgBEECdGogASAEQQF0av0EAQD9CwIAIAIgBEEEciIIQQJ0aiABIAhBAXRq/QQBAP0LAgAgAiAEQQhyIghBAnRqIAEgCEEBdGr9BAEA/QsCACACIARBDHIiCEECdGogASAIQQF0av0EAQD9CwIAIARBEGohBCAFQQRqIgUgDEcNAAsLIAZB/P8DcSEFIA8EQANAIAIgBEECdGogASAEQQF0av0EAQD9CwIAIARBBGohBCAKQQFqIgogD0cNAAsLIAUgBkYNASACIAVBAnRqIQIgASAFQQF0aiEBCwNAIAIgAS8BADYCACACQQRqIQIgAUECaiEBIAVBAWoiBSAGRw0ACwtBsM4EQQA2AgBB8wAgByAJIANBNGoQFiEJQbDOBCgCACEBQbDOBEEANgIAIAFBAUcEQCANQQFqIQ0MAQsLCwwECxACIQIMBQsMAgsQAiECDAMLQbDOBEEANgIAQfcAIAcQBEGwzgQoAgAhAEGwzgRBADYCAAJAIABBAUYNAEGwzgRBADYCAEH4ACAHEARBsM4EKAIAIQBBsM4EQQA2AgAgAEEBRg0AIAMoAjgiAARAIAMgADYCPCAAECwLIAcQOiADQYABaiQADwsLEAIhAiADKAI4IgBFDQEgAyAANgI8IAAQLAwBCxACIQILIAcQOiACEAUAC0EBAn8jAEEQayICJAAgASgCFCEDIAIgASgCECIBNgIMIAIgAyABazYCCCAAQazLACACQQhqEA02AgAgAkEQaiQAC4oEAgt/AX4jAEEQayIIJAAgASACKQEAIg43AhwgDqciBkEQdiEJIA5CKIinIgJB/wFxIQUgDkIgiKchCgJAIA5CgICAgIDgP4NQDQAgAkEDcSEEIAEoAjQhA0EAIQIgBUEBa0EDTwRAIAUgBGshCwNAIAMgAkEDdCIHakKBgICAEDcCACADIAdBCHJqQoGAgIAQNwIAIAMgB0EQcmpCgYCAgBA3AgAgAyAHQRhyakKBgICAEDcCACACQQRqIQIgDEEEaiIMIAtHDQALCyAERQ0AA0AgAyACQQN0akKBgICAEDcCACACQQFqIQIgDUEBaiINIARHDQALCwJAAkAgAQJ/IAkgBkH//wNxbCAKQf8BcUEHakEDdmwgBWwiAyABKAIEIgIgASgCACIFayIESwRAIAMgBGsiByABKAIIIgYgAmtNBEAgAkEAIAcQKiAHagwCCyADQQBIDQNB/////wcgBiAFayICQQF0IgYgAyADIAZJGyACQf////8DTxsiAhArIgYgBGpBACAHECoaIAEgBiAFIAQQOSIEIAJqNgIIIAEgAyAEaiICNgIEIAEgBDYCACAFRQ0CIAUQLCABKAIEIQIMAgsgAyAETw0BIAMgBWoLIgI2AgQLIAggASgCACIBNgIMIAggAiABazYCCCAAQazLACAIQQhqEA02AgAgCEEQaiQADwsQQgALmgEBAX9B8AAQKyIAQoCAgPwrNwIsIABBAToAKCAAQQU2AiQgAEHQzAA2AgwgAEEANgIIIABCADcCACAA/QwAAAAAAAAAAAAAAAAAAAAA/QsCNCAAQgA3AmAgAELAgICAgAg3AlggAEEANgIYIABCADcCECAA/QwAAAAAAAAAAAAAAAAAAAAA/QsCRCAAQQA2AlQgAEEANgJoIAALagEBfyAABEAgACgCYCIBBEAgACABNgJkIAEQLAsgACgCNCIBBEAgACABNgI4IAEQLAsgAEHQzAA2AgwgACgCECIBBEAgACABNgIUIAEQLAsgACgCACIBBEAgACABNgIEIAEQLAsgABAsCwsGAEHAzAAL9zIBD38jAEEQayIQJAAgAC8BGiEOIAAvARghDQJAIANBAEwNAAJAIANBA3EiBEUEQCADIQYMAQsgAyEGA0AgBkEBayEGIA5BAWpBAXYhDiANQQFqQQF2IQ0gBUEBaiIFIARHDQALCyADQQRJDQADQCAOQQFqQQF2QQFqQQF2QQFqQQF2QQFqQQF2IQ4gDUEBakEBdkEBakEBdkEBakEBdkEBakEBdiENIAZBBWshBCAGQQRrIQYgBEF+SQ0ACwsCQAJAIAItAAUgAC0AHEEHakEDdiANbCISIA5sbCIGIAAoAhAiDCAAKAIMIgRrIgVLBEAgBiAFayIIIAAoAhQiCSAMa00EQCAAIAxBACAIECogCGo2AhAMAgsgBkEASA0CQf////8HIAkgBGsiDEEBdCIJIAYgBiAJSRsgDEH/////A08bIgwQKyIJIAVqQQAgCBAqGiAAIAkgBCAFEDkiBSAMajYCFCAAIAUgBmo2AhAgACAFNgIMIARFDQEgBBAsDAELIAUgBk0NACAAIAQgBmo2AhALIwBBIGsiBiQAIAMgASgCACIELQCSAUsEQEGgywMoAgAoAgAhBSAGIAQtAJIBNgIEIAYgAzYCAEGgywNBooEMQb0aQYMHQaPCACAGIAURAAALIAQgAzYCHCAEIAM2AhggBCADNgJ0IAZBIGokACABKAIAIAAtAGhFIAItAAVBAUZyNgJAIAEoAgAhBiMAQeABayIDJAAgBhBkIAYQYwJAA0ACQAJ/IAYtABQhDCAGKALECiIFIANB0AFqIgRBAiAFKAIAKAIIEQEAIQgCQAJAIAwEQCAIQQJHBEBBmMsDQZGBFEG/GEHSCEG2E0EAQZjLAygCACgCABEAAAwDCyAEIAQvAQAiCEEIdCAIQQh2cjsBACAIQYAURwRAQZjLA0GSgRRBvxhB2QhBmx5BAEGYywMoAgAoAgARAAAMAwsgBSAEQQJqQQIgBSgCACgCCBEBAEECRwRAQZjLA0GTgRRBvxhB3whB4QhBAEGYywMoAgAoAgARAAAMAwsgBCAELwECIghBCHQgCEEIdnI7AQIgCEH//wNGBEBBmMsDQZSBFEG/GEHmCEHnKkEAQZjLAygCACgCABEAAAwDCyAFIARBBGpBBCAFKAIAKAIIEQEAQQRHBEBBmMsDQZWBFEG/GEHsCEG2E0EAQZjLAygCACgCABEAAAwDCyAEIAQoAgQiCEEYdCAIQYD+A3FBCHRyIAhBCHZBgP4DcSAIQRh2cnI2AgQgBSAEQQhqQQEgBSgCACgCCBEBAEEBRwRAQZjLA0GWgRRBvxhB8whBthNBAEGYywMoAgAoAgARAAAMAwsgBSAEQQlqQQEgBSgCACgCCBEBAEEBRg0BQZjLA0GXgRRBvxhB+QhBthNBAEGYywMoAgAoAgARAAAMAgsgCEECRwRAQaDLA0GRgRRBvxhBgQlBthNBAEGgywMoAgAoAgARAAALIAQgBC8BACIIQQh0IAhBCHZyOwEAIAhBgBRHBEBBoMsDQZKBFEG/GEGECUGbHkEAQaDLAygCACgCABEAAAsgBSAEQQJqQQIgBSgCACgCCBEBAEECRwRAQaDLA0GTgRRBvxhBhglB+ghBAEGgywMoAgAoAgARAAALIAQgBC8BAiIIQQh0IAhBCHZyOwECIAhB//8DRgRAQaDLA0GUgRRBvxhBiQlB5ypBAEGgywMoAgAoAgARAAALIAUgBEEEakEEIAUoAgAoAggRAQBBBEcEQEGgywNBlYEUQb8YQYsJQbYTQQBBoMsDKAIAKAIAEQAACyAEIAQoAgQiCEEYdCAIQYD+A3FBCHRyIAhBCHZBgP4DcSAIQRh2cnI2AgQgBSAEQQhqQQEgBSgCACgCCBEBAEEBRwRAQaDLA0GWgRRBvxhBjglBthNBAEGgywMoAgAoAgARAAALIAUgBEEJakEBIAUoAgAoAggRAQBBAUYNAEGgywNBl4EUQb8YQZAJQbYTQQBBoMsDKAIAKAIAEQAAC0EBDAELIARBADsBCCAEQgA3AgBBAAtFDQAgAyAGKALECiIEIAQoAgAoAhARDgA3A8gBAkAgAy8B0gEgBigCJCAGKAIgbEwNACAGLQAUBEBBmMsDQeGADEG9GkGjB0HQCEEAQZjLAygCACgCABEAAAwBC0GgywNB4YAMQb0aQaUHQdAIQQBBoMsDKAIAKAIAEQAACyADLQDYASIERQRAAkAgBigCxAoiBCAEKAIAKAIUEQIADQADQCAEIANB3gFqQQEgBCgCACgCCBEBAEEBRw0BAn8CQAJAAkAgAy0A3gFB/wFHDQAgBCADQd4BakEBIAQoAgAoAggRAQBBAUcNBQJAAkACQAJAAkACQAJAAkACQCADLQDeAUHSAGsOQgABCQkJCQcJCQkCAwQFCQYJCQgJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCgkLIAYtABQhBSAGKALECiIEIANB3gFqQQIgBCgCACgCCBEBAEECRwRAQX8gBQ0MGkGgywNBwYAMQb0aQZIGQYgTQQBBoMsDKAIAKAIAEQAACyADIAMvAd4BIgVBCHQgBUEIdnIiBTsB3gEgBCAFrUL//wODQgJ9QQEgBCgCACgCDBEIABpBnMsDKAIAKAIAIQQgA0HbCjYCIEGcywNBgYAMQb0aQZ4GQYPCACADQSBqIAQRAAAMCgsgBi0AFCEFIAYoAsQKIgQgA0HeAWpBAiAEKAIAKAIIEQEAQQJHBEBBfyAFDQsaQaDLA0HBgAxBvRpBkgZBiBNBAEGgywMoAgAoAgARAAALIAMgAy8B3gEiBUEIdCAFQQh2ciIFOwHeASAEIAWtQv//A4NCAn1BASAEKAIAKAIMEQgAGkGcywMoAgAoAgAhBCADQcQLNgIwQZzLA0GBgAxBvRpBngZBg8IAIANBMGogBBEAAAwJCyAGLQAUIQUgBigCxAoiBCADQd4BakECIAQoAgAoAggRAQBBAkcEQEF/IAUNChpBoMsDQcGADEG9GkGSBkGIE0EAQaDLAygCACgCABEAAAsgAyADLwHeASIFQQh0IAVBCHZyIgU7Ad4BIAQgBa1C//8Dg0ICfUEBIAQoAgAoAgwRCAAaQZzLAygCACgCACEEIANB/go2AkBBnMsDQYGADEG9GkGeBkGDwgAgA0FAayAEEQAADAgLIAYtABQhBSAGKALECiIEIANB3gFqQQIgBCgCACgCCBEBAEECRwRAQX8gBQ0JGkGgywNBwYAMQb0aQZIGQYgTQQBBoMsDKAIAKAIAEQAACyADIAMvAd4BIgVBCHQgBUEIdnIiBTsB3gEgBCAFrUL//wODQgJ9QQEgBCgCACgCDBEIABpBnMsDKAIAKAIAIQQgA0HnCzYCUEGcywNBgYAMQb0aQZ4GQYPCACADQdAAaiAEEQAADAcLIAYtABQhBSAGKALECiIEIANB3gFqQQIgBCgCACgCCBEBAEECRwRAQX8gBQ0IGkGgywNBwYAMQb0aQZIGQYgTQQBBoMsDKAIAKAIAEQAACyADIAMvAd4BIgVBCHQgBUEIdnIiBTsB3gEgBCAFrUL//wODQgJ9QQEgBCgCACgCDBEIABpBnMsDKAIAKAIAIQQgA0G4CjYCYEGcywNBgYAMQb0aQZ4GQYPCACADQeAAaiAEEQAADAYLIAYtABQhBSAGKALECiIEIANB3gFqQQIgBCgCACgCCBEBAEECRwRAQX8gBQ0HGkGgywNBwYAMQb0aQZIGQYgTQQBBoMsDKAIAKAIAEQAACyADIAMvAd4BIgVBCHQgBUEIdnIiBTsB3gEgBCAFrUL//wODQgJ9QQEgBCgCACgCDBEIABpBnMsDKAIAKAIAIQQgA0GhCzYCcEGcywNBgYAMQb0aQZ4GQYPCACADQfAAaiAEEQAADAULIAYtABQhBSAGKALECiIEIANB3gFqQQIgBCgCACgCCBEBAEECRwRAQX8gBQ0GGkGgywNBwYAMQb0aQZIGQYgTQQBBoMsDKAIAKAIAEQAACyADIAMvAd4BIgVBCHQgBUEIdnIiBTsB3gEgBCAFrUL//wODQgJ9QQEgBCgCACgCDBEIABpBnMsDKAIAKAIAIQQgA0GVCjYCgAFBnMsDQYGADEG9GkGeBkGDwgAgA0GAAWogBBEAAAwECyAGLQAUIQUgBigCxAoiBCADQd4BakECIAQoAgAoAggRAQBBAkcEQEF/IAUNBRpBoMsDQcGADEG9GkGSBkGIE0EAQaDLAygCACgCABEAAAsgAyADLwHeASIFQQh0IAVBCHZyIgU7Ad4BIAQgBa1C//8Dg0ICfUEBIAQoAgAoAgwRCAAaDAMLIAYtABQhBSAGKALECiIEIANB3gFqQQIgBCgCACgCCBEBAEECRwRAQX8gBQ0EGkGgywNBwYAMQb0aQZIGQYgTQQBBoMsDKAIAKAIAEQAACyADIAMvAd4BIgVBCHQgBUEIdnIiBTsB3gEgBCAFrUL//wODQgJ9QQEgBCgCACgCDBEIABoMAgsgBCAEKAIAKAIUEQIARQ0DDAQLIAYoAiggAy8B0gFB7ABsaiADQdABaiAGKALECiADQcgBahBiDAULQQALQX9GBEAgBi0AFARAQZjLA0HmgAxBvRpBtQhBiyBBAEGYywMoAgAoAgARAAAMBQtBoMsDQeaADEG9GkG4CEGLIEEAQaDLAygCACgCABEAAAwECyAGKALECiIEIAQoAgAoAhQRAgBFDQALCyAGLQAUBEBBmMsDKAIAKAIAIQQgAyADLwHSATYCECADIAMtANgBNgIUQZjLA0HlgAxBvRpBqQhB3ikgA0EQaiAEEQAADAILQaDLAygCACgCACEEIAMgAy8B0gE2AgAgAyADLQDYATYCBEGgywNB5YAMQb0aQa4IQd4pIAMgBBEAAAwBCwJAIAMtANkBIgVFDQAgBCAFSQ0AIAYtABQEQEGYywNB4oAMQb0aQbAHQf8NQQBBmMsDKAIAKAIAEQAADAELQaDLA0HigAxBvRpBtAdB/w1BAEGgywMoAgAoAgARAAALAkACQCAGKALECiIEIAQoAgAoAhQRAgANAANAIAQgA0HeAWpBASAEKAIAKAIIEQEAQQFHDQECfwJAAkACQAJAAkACQAJAIAMtAN4BQf8BRw0AIAQgA0HeAWpBASAEKAIAKAIIEQEAQQFHDQkCQCADLQDeASIFQdgAaw4NBAEBAQEBAQIBAwEBBQALIAVBkwFGDQULIAQgBCgCACgCFBECAEUNBwwICyAGLQAUIQUgBigCxAoiBCADQd4BakECIAQoAgAoAggRAQBBAkcEQEF/IAUNBhpBoMsDQcGADEG9GkGSBkGIE0EAQaDLAygCACgCABEAAAsgAyADLwHeASIFQQh0IAVBCHZyIgU7Ad4BIAQgBa1C//8Dg0ICfUEBIAQoAgAoAgwRCAAaQZzLAygCACgCACEEIANBoQs2ArABQZzLA0GBgAxBvRpBngZBg8IAIANBsAFqIAQRAAAMBAsgBi0AFCEFIAYoAsQKIgQgA0HeAWpBAiAEKAIAKAIIEQEAQQJHBEBBfyAFDQUaQaDLA0HBgAxBvRpBkgZBiBNBAEGgywMoAgAoAgARAAALIAMgAy8B3gEiBUEIdCAFQQh2ciIFOwHeASAEIAWtQv//A4NCAn1BASAEKAIAKAIMEQgAGkGcywMoAgAoAgAhBCADQZUKNgLAAUGcywNBgYAMQb0aQZ4GQYPCACADQcABaiAEEQAADAMLIAYtABQhBSAGKALECiIEIANB3gFqQQIgBCgCACgCCBEBAEECRwRAQX8gBQ0EGkGgywNBwYAMQb0aQZIGQYgTQQBBoMsDKAIAKAIAEQAACyADIAMvAd4BIgVBCHQgBUEIdnIiBTsB3gEgBCAFrUL//wODQgJ9QQEgBCgCACgCDBEIABoMAgsgBi0AFCEFIAYoAsQKIgQgA0HeAWpBAiAEKAIAKAIIEQEAQQJHBEBBfyAFDQMaQaDLA0HBgAxBvRpBkgZBiBNBAEGgywMoAgAoAgARAAALIAMgAy8B3gEiBUEIdCAFQQh2ciIFOwHeASAEIAWtQv//A4NCAn1BASAEKAIAKAIMEQgAGgwBCyAGKAIoIAMvAdIBQewAbGogA0HQAWogBigCxAogA0HIAWoQYgwFC0EAC0F/RgRAIAYtABRFDQNBmMsDQeSADEG9GkHlB0GLIEEAQZjLAygCACgCABEAAAwECyAGKALECiIEIAQoAgAoAhQRAgBFDQALCyAGLQAUBEBBmMsDKAIAKAIAIQQgAyADLwHSATYCoAEgAyADLQDYATYCpAFBmMsDQeOADEG9GkHZB0HeKSADQaABaiAEEQAADAILQaDLAygCACgCACEEIAMgAy8B0gE2ApABIAMgAy0A2AE2ApQBQaDLA0HjgAxBvRpB3gdB3ikgA0GQAWogBBEAAAwBC0GgywNB5IAMQb0aQegHQYsgQQBBoMsDKAIAKAIAEQAACwJAIAYoAsQKIgQgBCgCACgCFBECAA0AA0AgBCADQcgBakEBIAQoAgAoAggRAQBBAUcNASADLQDIAUH/AUYEQCAEIANByAFqQQEgBCgCACgCCBEBAEEBRw0CIAMtAMgBIgVBkAFGDQMgBUHZAUYNBAsgBCAEKAIAKAIUEQIARQ0ACwsLQZjLA0HngAxBvRpByAhBiwhBAEGYywMoAgAoAgARAAALIANB4AFqJAAgDgRAIA1BfnEhBSANQQFxIQggDUEBayEMA0AgAi0ABSIDIBEgEmxsIQdBACEPAkACQAJAIAMOAgIAAQsgASAQQQxqEGEhBCACLQAEQQhNBEAgDUUNAiAAKAIMIAdqIQlBACEGQQAhAyAMBEADQCAGIAlqQf8BIAQoAgggBkECdGooAgAiByAHQf8BThsiB0EAIAdBAEobOgAAIAkgBkEBciIHakH/ASAEKAIIIAdBAnRqKAIAIgcgB0H/AU4bIgdBACAHQQBKGzoAACAGQQJqIQYgA0ECaiIDIAVHDQALCyAIRQ0CIAYgCWpB/wEgBCgCCCAGQQJ0aigCACIDIANB/wFOGyIDQQAgA0EAShs6AAAMAgsgACgCDCAHaiEJIAItAAYEQCANRQ0CQQAhBkEAIQMgDARAA0AgCSAGQQF0akGAgH5B//8BIAQoAgggBkECdGooAgAiByAHQf//AU4bIgcgB0GAgH5MGzsBACAJIAZBAXIiB0EBdGpBgIB+Qf//ASAEKAIIIAdBAnRqKAIAIgcgB0H//wFOGyIHIAdBgIB+TBs7AQAgBkECaiEGIANBAmoiAyAFRw0ACwsgCEUNAiAJIAZBAXRqQYCAfkH//wEgBCgCCCAGQQJ0aigCACIDIANB//8BThsiAyADQYCAfkwbOwEADAILIA1FDQFBACEGQQAhAyAMBEADQCAJIAZBAXRqQf//AyAEKAIIIAZBAnRqKAIAIgcgB0H//wNOGyIHQQAgB0EAShs7AQAgCSAGQQFyIgdBAXRqQf//AyAEKAIIIAdBAnRqKAIAIgcgB0H//wNOGyIHQQAgB0EAShs7AQAgBkECaiEGIANBAmoiAyAFRw0ACwsgCEUNASAJIAZBAXRqQf//AyAEKAIIIAZBAnRqKAIAIgMgA0H//wNOGyIDQQAgA0EAShs7AQAMAQsDQCABIBBBDGoQYSEEAkAgAi0ABEEITQRAIA1FDQEgACgCDCAHaiAPaiEJQQAhBkEAIQMgDARAA0AgCSAGIAItAAVsakH/ASAEKAIIIAZBAnRqKAIAIgsgC0H/AU4bIgtBACALQQBKGzoAACAJIAZBAXIiCyACLQAFbGpB/wEgBCgCCCALQQJ0aigCACILIAtB/wFOGyILQQAgC0EAShs6AAAgBkECaiEGIANBAmoiAyAFRw0ACwsgCEUNASAJIAYgAi0ABWxqQf8BIAQoAgggBkECdGooAgAiAyADQf8BThsiA0EAIANBAEobOgAADAELIAAoAgwgB2ogD0EBdGohAyACLQAGBEAgDUUNASACLQAFIQtBACEGQQAhCSAMBEADQCADIAYgC2xBAXRqQYCAfkH//wEgBCgCCCAGQQJ0aigCACIKIApB//8BThsiCiAKQYCAfkwbOwEAIAMgBkEBciIKIAtsQQF0akGAgH5B//8BIAQoAgggCkECdGooAgAiCiAKQf//AU4bIgogCkGAgH5MGzsBACAGQQJqIQYgCUECaiIJIAVHDQALCyAIRQ0BIAMgBiALbEEBdGpBgIB+Qf//ASAEKAIIIAZBAnRqKAIAIgMgA0H//wFOGyIDIANBgIB+TBs7AQAMAQsgDUUNACACLQAFIQtBACEGQQAhCSAMBEADQCADIAYgC2xBAXRqQf//AyAEKAIIIAZBAnRqKAIAIgogCkH//wNOGyIKQQAgCkEAShs7AQAgAyAGQQFyIgogC2xBAXRqQf//AyAEKAIIIApBAnRqKAIAIgogCkH//wNOGyIKQQAgCkEAShs7AQAgBkECaiEGIAlBAmoiCSAFRw0ACwsgCEUNACADIAYgC2xBAXRqQf//AyAEKAIIIAZBAnRqKAIAIgMgA0H//wNOGyIDQQAgA0EAShs7AQALIA9BAWoiDyACLQAFSQ0ACwsgEUEBaiIRIA5HDQALCyAQQRBqJAAPCxBCAAvwOwIPfwF+IwBBIGsiBSQAIAEoAgAiAygCxAoEQEGgywNBo4EMQb0aQY8HQdLEAEEAQaDLAygCACgCABEAAAsgA0EBOgAUIAEoAgAhCiMAQdAAayIGJAACQCACIAIoAgAoAhQRAgANAANAIAIgBkHOAGpBASACKAIAKAIIEQEAQQFHDQEgBi0ATkH/AUYEQCACIAZBzgBqQQEgAigCACgCCBEBAEEBRw0CIAYtAE5BzwBGDQILIAIgAigCACgCFBECAEUNAAsLAkAgAiACKAIAKAIUEQIADQADQCACIAZBzgBqQQEgAigCACgCCBEBAEEBRw0BIAYtAE5B/wFGBEAgAiAGQc4AakEBIAIoAgAoAggRAQBBAUcNAiAGLQBOQdEARg0CCyACIAIoAgAoAhQRAgBFDQALCyACIApByABqIgNBAiACKAIAKAIIEQEAQQJHBEBBoMsDQcGAFEG/GEGtBEGdE0EAQaDLAygCACgCABEAAAsgAyADLwEAIgRBCHQgBEEIdnIiBDsBACAEQf//A3EiBEEma0EDbSIJQQNsQSZqIARHBEBBoMsDQcKAFEG/GEGxBEHKHUEAQaDLAygCACgCABEAAAsgAiADQQJqQQIgAigCACgCCBEBAEECRwRAQaDLA0HDgBRBvxhBswRBnRNBAEGgywMoAgAoAgARAAALIAMgAy8BAiIEQQh0IARBCHZyIgQ7AQIgBEGAgAFxBH8gBAVBoMsDQcSAFEG/GEG2BEH+wABBAEGgywMoAgAoAgARAAAgAy8BAgtB//8CcQRAQZzLA0GBgBRBvxhBuARB2hBBAEGcywMoAgAoAgARAAALIAIgA0EEakEEIAIoAgAoAggRAQBBBEcEQEGgywNBxYAUQb8YQboEQZ0TQQBBoMsDKAIAKAIAEQAACyADIAMoAgQiBEEYdCAEQYD+A3FBCHRyIARBCHZBgP4DcSAEQRh2cnI2AgQgAiADQQhqQQQgAigCACgCCBEBAEEERwRAQaDLA0HGgBRBvxhBvQRBnRNBAEGgywMoAgAoAgARAAALIAMgAygCCCIEQRh0IARBgP4DcUEIdHIgBEEIdkGA/gNxIARBGHZycjYCCCACIANBDGpBBCACKAIAKAIIEQEAQQRHBEBBoMsDQceAFEG/GEHABEGdE0EAQaDLAygCACgCABEAAAsgAyADKAIMIgRBGHQgBEGA/gNxQQh0ciAEQQh2QYD+A3EgBEEYdnJyNgIMIAIgA0EQakEEIAIoAgAoAggRAQBBBEcEQEGgywNByIAUQb8YQcMEQZ0TQQBBoMsDKAIAKAIAEQAACyADIAMoAhAiBEEYdCAEQYD+A3FBCHRyIARBCHZBgP4DcSAEQRh2cnI2AhAgAiADQRRqQQQgAigCACgCCBEBAEEERwRAQaDLA0HJgBRBvxhBxgRBnRNBAEGgywMoAgAoAgARAAALIAMgAygCFCIEQRh0IARBgP4DcUEIdHIgBEEIdkGA/gNxIARBGHZycjYCFCACIANBGGpBBCACKAIAKAIIEQEAQQRHBEBBoMsDQcqAFEG/GEHJBEGdE0EAQaDLAygCACgCABEAAAsgAyADKAIYIgRBGHQgBEGA/gNxQQh0ciAEQQh2QYD+A3EgBEEYdnJyNgIYIAIgA0EcakEEIAIoAgAoAggRAQBBBEcEQEGgywNBy4AUQb8YQcwEQZ0TQQBBoMsDKAIAKAIAEQAACyADIAMoAhwiBEEYdCAEQYD+A3FBCHRyIARBCHZBgP4DcSAEQRh2cnI2AhwgAiADQSBqQQQgAigCACgCCBEBAEEERwRAQaDLA0HMgBRBvxhBzwRBnRNBAEGgywMoAgAoAgARAAALIAMgAygCICIEQRh0IARBgP4DcUEIdHIgBEEIdkGA/gNxIARBGHZycjYCICACIANBJGpBAiACKAIAKAIIEQEAQQJHBEBBoMsDQc2AFEG/GEHSBEGdE0EAQaDLAygCACgCABEAAAsgAyADLwEkIgRBCHQgBEEIdnIiBDsBJCAEQf//A3EiByAJRwRAQaDLA0HOgBRBvxhB1QRBviBBAEGgywMoAgAoAgARAAAgAy8BJCIHIQQLIAcgAygCMEoEQAJAIAMoAigiCyADQTRqRg0AIAtFDQAgCxBKIAMvASQiByEEC0F/IAmtQgN+IhKnIBJCIIinGxArIQkgAyAHNgIwIAMgCTYCKAsgBEH//wNxBEBBACEEA0AgAiAEQQNsIgcgAygCKGpBASACKAIAKAIIEQEAQQFHBEBBoMsDQdGAFEG/GEHgBEGdE0EAQaDLAygCACgCABEAAAsgAiADKAIoIAdqQQFqQQEgAigCACgCCBEBAEEBRwRAQaDLA0HSgBRBvxhB4gRBnRNBAEGgywMoAgAoAgARAAALIAIgAygCKCAHakECakEBIAIoAgAoAggRAQBBAUcEQEGgywNB04AUQb8YQeQEQZ0TQQBBoMsDKAIAKAIAEQAACyAEQQFqIgQgAy8BJEkNAAsLIApBuAFqIQsgCkGIAWohByAKQYACaiEJIApB5ANqIQ8DQAJAAkAgAiACKAIAKAIUEQIADQADQCACIAZBzgBqQQEgAigCACgCCBEBAEEBRw0BAkAgBi0ATkH/AUcNACACIAZBzgBqQQEgAigCACgCCBEBAEEBRw0CAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAGLQBOQdAAaw5BAA4DBA4KAQsOAg4OBQYHCAkODgwNDg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODhEOCyACIAtBAiACKAIAKAIIEQEAQQJHBEBBoMsDQeGAFEG/GEGLBUHPE0EAQaDLAygCACgCABEAAAsgCyALLwEAIgNBCHQgA0EIdnI7AQAgAiALQQRqQQQgAigCACgCCBEBAEEERwRAQaDLA0HigBRBvxhBjgVBzxNBAEGgywMoAgAoAgARAAALIAsgCygCBCIDQRh0IANBgP4DcUEIdHIgA0EIdkGA/gNxIANBGHZyciIENgIEIARB//93cQR/QaDLA0HjgBRBvxhBkwVB2CZBAEGgywMoAgAoAgARAAAgCygCBAUgBAtBgIAIcUUEQEGgywNB5IAUQb8YQZcFQcwkQQBBoMsDKAIAKAIAEQAACyADaSEEIAMEQEEBIAQgBEEBTRshCCALQQhqIQxBACEDA0AgAiAMIANBAXRqQQIgAigCACgCCBEBAEECRwRAQaDLA0HlgBRBvxhBmgVBzxNBAEGgywMoAgAoAgARAAALIANBAWoiAyAIRw0ACwsgCy8BACAEQQF0QQZqRwRAQaDLA0HmgBRBvxhBnAVB5R1BAEGgywMoAgAoAgARAAALDBELIAIgBkHOAGpBAiACKAIAKAIIEQEAQQJHBEBBoMsDQcGADEG9GkGSBkGIE0EAQaDLAygCACgCABEAAAsgBiAGLwFOIgNBCHQgA0EIdnIiAzsBTiACIAOtQv//A4NCAn1BASACKAIAKAIMEQgAGgwQCyACIAZBzgBqQQIgAigCACgCCBEBAEECRwRAQaDLA0HBgAxBvRpBkgZBiBNBAEGgywMoAgAoAgARAAALIAYgBi8BTiIDQQh0IANBCHZyIgM7AU4gAiADrUL//wODQgJ9QQEgAigCACgCDBEIABoMDwsgAiAHQQIgAigCACgCCBEBAEECRwRAQaDLA0HxgBRBvxhB0wVB6BNBAEGgywMoAgAoAgARAAALIAcgBy8BACIDQQh0IANBCHZyOwEAIAIgB0ECakEBIAIoAgAoAggRAQBBAUcEQEGgywNB8oAUQb8YQdYFQegTQQBBoMsDKAIAKAIAEQAACyACIAdBBGpBASACKAIAKAIIEQEAQQFHBEBBoMsDQfOAFEG/GEHYBUHoE0EAQaDLAygCACgCABEAAAsgAiAHQQZqQQIgAigCACgCCBEBAEECRwRAQaDLA0H0gBRBvxhB2gVB6BNBAEGgywMoAgAoAgARAAALIAIgB0EIakEBIAIoAgAoAggRAQBBAUcEQEGgywNB9YAUQb8YQdwFQegTQQBBoMsDKAIAKAIAEQAACyACIAdBCmpBASACKAIAKAIIEQEAQQFHBEBBoMsDQfaAFEG/GEHeBUHoE0EAQaDLAygCACgCABEAAAsgAiAHQQtqQQEgAigCACgCCBEBAEEBRwRAQaDLA0H3gBRBvxhB4AVB6BNBAEGgywMoAgAoAgARAAALIAIgB0EMakEBIAIoAgAoAggRAQBBAUcEQEGgywNB+IAUQb8YQeIFQegTQQBBoMsDKAIAKAIAEQAACyACIAdBDWpBASACKAIAKAIIEQEAQQFHBEBBoMsDQfmAFEG/GEHkBUHoE0EAQaDLAygCACgCABEAAAsgAiAHQQ5qQQEgAigCACgCCBEBAEEBRwRAQaDLA0H6gBRBvxhB5gVB6BNBAEGgywMoAgAoAgARAAALAn8CfyAHLQACQQFxBEBBACEDA0AgAiADIAdqQQ9qQQEgAigCACgCCBEBAEEBRwRAQaDLA0H7gBRBvxhB6gVB6BNBAEGgywMoAgAoAgARAAALIAMgBy0ACiIESSEIIANBAWohAyAIDQALIAcvAQAiAyAHLQACQQFxRQ0BGiAEQQ1qDAILIAcvAQALIQNBDAsgA0cEQEGgywNB/IAUQb8YQewFQYAeQQBBoMsDKAIAKAIAEQAACyAOQQFyIQ4MDgsgAiAGQc4AakECIAIoAgAoAggRAQBBAkcEQEGgywNBwYAMQb0aQZIGQYgTQQBBoMsDKAIAKAIAEQAACyAGIAYvAU4iA0EIdCADQQh2ciIDOwFOIAIgA61C//8Dg0ICfUEBIAIoAgAoAgwRCAAaQZzLAygCACgCACEDIAZB1Qw2AgBBnMsDQYGADEG9GkGeBkGDwgAgBiADEQAADA0LIAIgCUECIAIoAgAoAggRAQBBAkcEQEGgywNBgYEUQb8YQawHQf4UQQBBoMsDKAIAKAIAEQAACyAJIAkvAQAiA0EIdCADQQh2cjsBACACIAlBAmpBASACKAIAKAIIEQEAQQFHBEBBoMsDQYKBFEG/GEGvB0H+FEEAQaDLAygCACgCABEAAAsCQAJAAkACQAJAIAktAAJBH3EOAwABAgMLIAkgCS8BACIDQQRrQQNtIgQ2AsgBIARBA2xBBGogA0cEQEGgywNBg4EUQb8YQbQHQd8UQQBBoMsDKAIAKAIAEQAAIAkoAsgBQQNsQX9GDQQLIAlBBGohBEEAIQMDQCACIAMgBGpBASACKAIAKAIIEQEAQQFHBEBBoMsDQYSBFEG/GEG3B0H+FEEAQaDLAygCACgCABEAAAsgA0EBaiIDIAkoAsgBQQNsQQFqSQ0ACwwDCyAJQQA2AsgBQaDLA0GJgRRBvxhBvQdBgRRBAEGgywMoAgAoAgARAAAgCS8BAEEFRg0CQaDLA0GFgRRBvxhBvwdB3xRBAEGgywMoAgAoAgARAAAMAgsgCSAJLwEAIgRBBWtBBm0iAzYCyAEgA0EGbEEFaiAERwR/QaDLA0GGgRRBvxhBxQdB3xRBAEGgywMoAgAoAgARAAAgCSgCyAEFIAMLQQNsQX9GDQEgCUEEaiEIQQAhAwNAIAIgCCADQQF0aiIEQQIgAigCACgCCBEBAEECRwRAQaDLA0GHgRRBvxhByQdB/hRBAEGgywMoAgAoAgARAAALIAQgBC8BACIEQQh0IARBCHZyOwEAIANBAWoiAyAJKALIAUEDbEEBakkNAAsMAQtBoMsDQYiBFEG/GEHOB0HAFEEAQaDLAygCACgCABEAAAsgDkECciEODAwLIAovAWwhCAJAIAooArQKIgQgD0cNACAIQdQBbCIMQdEGSQ0AIAwQKyEEAkAgCEUNAEEAIQ0gBCEDIAxB1AFrIhBB1AFuQQFqQQNxIhEEQANAIANBADoAAiADQQA7AQAgA0EEakEAQcIBECoaIANBADsB0AEgA0KAgICAgICAwL9/NwLIASADQdQBaiEDIA1BAWoiDSARRw0ACwsgEEH8BEkNACAEIAxqIQwDQCADQQA6AAIgA0EAOwEAIANBBGpBAEHCARAqGiADQQA6ANYBIANBADsB1AEgA0EAOwHQASADQoCAgICAgIDAv383AsgBIANB2AFqQQBBwgEQKhogA0EAOgCqAyADQQA7AagDIANBADsBpAMgA0KAgICAgICAwL9/NwKcAyADQawDakEAQcIBECoaIANBADoA/gQgA0EAOwH8BCADQQA7AfgEIANCgICAgICAgMC/fzcC8AQgA0GABWpBAEHCARAqGiADQQA7AcwGIANCgICAgICAgMC/fzcCxAYgA0HQBmoiAyAMRw0ACwsgCiAENgK0CgsgCiAKKALgAyIDQQFqNgLgAyMAQRBrIgwkACACIAQgA0HUAWxqIgNBAiACKAIAKAIIEQEAQQJHBEBBoMsDQaGBFEG/GEHdB0GzFkEAQaDLAygCACgCABEAAAsgAyADLwEAIgRBCHQgBEEIdnI7AQACQCAIQYACTQRAIAIgDEEPakEBIAIoAgAoAggRAQBBAUcEQEGgywNBooEUQb8YQeMHQbMWQQBBoMsDKAIAKAIAEQAACyADIAwtAA87AdABDAELIAIgA0HQAWpBAiACKAIAKAIIEQEAQQJHBEBBoMsDQaOBFEG/GEHpB0GzFkEAQaDLAygCACgCABEAAAsgAyADLwHQASIEQQh0IARBCHZyOwHQAQsgAiADQQJqQQEgAigCACgCCBEBAEEBRwRAQaDLA0GkgRRBvxhB7QdBsxZBAEGgywMoAgAoAgARAAALAkACQAJAAkACQCADLQACQR9xDgMAAQIDCyADIAMvAQAiBEEFQQYgCEGBAkkbIghrQQNuIg02AsgBIAQgCCANQQNsIg1qRwR/QaDLA0GlgRRBvxhB8wdB1hVBAEGgywMoAgAoAgARAAAgAygCyAFBA2wFIA0LQX9GDQMgA0EEaiEIQQAhBANAIAIgBCAIakEBIAIoAgAoAggRAQBBAUcEQEGgywNBpoEUQb8YQfYHQbMWQQBBoMsDKAIAKAIAEQAACyAEQQFqIgQgAygCyAFBA2xBAWpJDQALDAMLIANBADYCyAFBoMsDQauBFEG/GEH9B0GXFUEAQaDLAygCACgCABEAACADLwEAQQZBByAIQYECSRtGDQJBoMsDQaeBFEG/GEH/B0GUFkEAQaDLAygCACgCABEAAAwCCyADIAMvAQAiDUEGQQcgCEGBAkkbIghrQQZuIgQ2AsgBIARBBmwgCGogDUcEf0GgywNBqIEUQb8YQYYIQZQWQQBBoMsDKAIAKAIAEQAAIAMoAsgBBSAEC0EDbEF/Rg0BIANBBGohDUEAIQQDQCACIA0gBEEBdGoiCEECIAIoAgAoAggRAQBBAkcEQEGgywNBqYEUQb8YQYoIQbMWQQBBoMsDKAIAKAIAEQAACyAIIAgvAQAiCEEIdCAIQQh2cjsBACAEQQFqIgQgAygCyAFBA2xBAWpJDQALDAELQaDLA0GqgRRBvxhBjwhB9RVBAEGgywMoAgAoAgARAAALIAxBEGokAAwLCyACIAZBzgBqQQIgAigCACgCCBEBAEECRwRAQaDLA0HBgAxBvRpBkgZBiBNBAEGgywMoAgAoAgARAAALIAYgBi8BTiIDQQh0IANBCHZyIgM7AU4gAiADrUL//wODQgJ9QQEgAigCACgCDBEIABpBnMsDKAIAKAIAIQMgBkGKDDYCEEGcywNBgYAMQb0aQZ4GQYPCACAGQRBqIAMRAAAMCgsgAiAGQc4AakECIAIoAgAoAggRAQBBAkcEQEGgywNBwYAMQb0aQZIGQYgTQQBBoMsDKAIAKAIAEQAACyAGIAYvAU4iA0EIdCADQQh2ciIDOwFOIAIgA61C//8Dg0ICfUEBIAIoAgAoAgwRCAAaQZzLAygCACgCACEDIAZBvAw2AiBBnMsDQYGADEG9GkGeBkGDwgAgBkEgaiADEQAADAkLIAIgBkHOAGpBAiACKAIAKAIIEQEAQQJHBEBBoMsDQcGADEG9GkGSBkGIE0EAQaDLAygCACgCABEAAAsgBiAGLwFOIgNBCHQgA0EIdnIiAzsBTiACIAOtQv//A4NCAn1BASACKAIAKAIMEQgAGkGcywMoAgAoAgAhAyAGQaMMNgIwQZzLA0GBgAxBvRpBngZBg8IAIAZBMGogAxEAAAwICyACIAZBzgBqQQIgAigCACgCCBEBAEECRwRAQaDLA0HBgAxBvRpBkgZBiBNBAEGgywMoAgAoAgARAAALIAYgBi8BTiIDQQh0IANBCHZyIgM7AU4gAiADrUL//wODQgJ9QQEgAigCACgCDBEIABoMBwsgAiAGQc4AakECIAIoAgAoAggRAQBBAkcEQEGgywNBwYAMQb0aQZIGQYgTQQBBoMsDKAIAKAIAEQAACyAGIAYvAU4iA0EIdCADQQh2ciIDOwFOIAIgA61C//8Dg0ICfUEBIAIoAgAoAgwRCAAaDAYLIAIgBkHOAGpBAiACKAIAKAIIEQEAQQJHBEBBoMsDQcGADEG9GkGSBkGIE0EAQaDLAygCACgCABEAAAsgBiAGLwFOIgNBCHQgA0EIdnIiAzsBTiACIAOtQv//A4NCAn1BASACKAIAKAIMEQgAGkGYywMoAgAoAgAhAyAGQf8QNgJAQZjLA0GBgAxBvRpBmgZBg8IAIAZBQGsgAxEAAAwFCyACIAZBzgBqQQIgAigCACgCCBEBAEECRwRAQaDLA0HBgAxBvRpBkgZBiBNBAEGgywMoAgAoAgARAAALIAYgBi8BTiIDQQh0IANBCHZyIgM7AU4gAiADrUL//wODQgJ9QQEgAigCACgCDBEIABoMBAsgAiACKAIAKAIUEQIARQ0ACwtBoMsDQdGADEG9GkHsBkHlCUEAQaDLAygCACgCABEAAAwBCwsgDkEDRwRAQaDLA0HSgAxBvRpB8AZBjSdBAEGgywMoAgAoAgARAAALIAogAjYCxAogCiAKLQCQAUEBRzYCQCAGQdAAaiQAIAUgASgCAEHIAGo2AhggBSAFKAIYKQIENwIQIAUoAhAhAiAFIAUoAhgpAgw3AgggACACIAUoAghrOwEYIAUgBSgCGCkCBDcCECAFKAIUIQIgBSAFKAIYKQIMNwIIIAAgAiAFKAIMazsBGiAAIAUoAhgvASQ6AB0gACAFKAIYKAIoLQAAQf8AcUEBajoAHCAAIAUoAhgoAigtAABBB3Y6AB4CQCAAKAIkIAAoAiAiBGtBA3UiAyAALQAdIgJJBEAgAEEgaiACIANrEEggAC0AHSECDAELIAIgA08NACAAIAQgAkEDdGo2AiQLIAJB/wFxBEBBACECA0AgAkEDbCIDIAUoAhgoAihqIgQtAAEhBiAFIAQtAAI2AhQgBSAGNgIQIAJBA3QiBCAAKAIgaiAFKAIQNgIAIAMgBSgCGCgCKGoiAy0AASEGIAUgAy0AAjYCFCAFIAY2AhAgACgCICAEaiAFKAIUNgIEIAJBAWoiAiAALQAdSQ0ACwsgBSAFKAIYKQIMNwIQIAAgBSgCEDYCOCAFIAUoAhgpAgw3AhAgACAFKAIUNgI8IAUgBSgCGCkCFDcCECAAIAUoAhA2AkAgBSAFKAIYKQIUNwIQIAAgBSgCFDYCRCAFIAUoAhgpAhw3AhAgACAFKAIQNgJIIAUgBSgCGCkCHDcCECAAIAUoAhQ2AkwgBSABKAIAQYgBajYCCCAAIAUoAggtAAo2AiwgACAFKAIILQAOQQFGOgAwIAAgBSgCCC0ABDYCNCAFKAIIIgEtAAshAiAFQQQgAS0ADHQ2AhQgBUEEIAJ0NgIQIAAgBSgCEDYCUCAFKAIIIgEtAAshAiAFQQQgAS0ADHQ2AhQgBUEEIAJ0NgIQIAAgBSgCFDYCVAJAIAAoAiwiAiAAKAJcIAAoAlgiA2tBA3UiAUsEQCAAQdgAaiACIAFrEEggACgCLCECDAELIAEgAk0NACAAIAMgAkEDdGo2AlwLIAIEQEEAIQIDQCAFQRBqIgEgBUEIaiIDIAIQjwEgAkEDdCIEIAAoAlhqIAUoAhA2AgAgASADIAIQjwEgACgCWCAEaiAFKAIUNgIEIAJBAWoiAiAAKAIsSQ0ACwsgACAFKAIILwEGNgJkIAAgBSgCCC0ACEEBRjoAaCAFQSBqJAALKwECfyMAQRBrIgAkACAAQQA2AgwgAEEBNgIMIAAoAgwhASAAQRBqJAAgAQsHACAALQBoCwcAIAAoAmQLFQAgACABKAJYIAJBA3RqKQIANwIACwwAIAAgASkCUDcCAAsMACAAIAEpAkg3AgALDAAgACABKQJANwIACwwAIAAgASkCODcCAAsHACAAKAI0CwcAIAAtADALBwAgACgCLAsVACAAIAEoAiAgAkEDdGopAgA3AgALRwEBfyABIAAoAgQiAkEBdWohASAAKAIAIQAgASACQQFxBH8gASgCACAAaigCAAUgAAsRAgAhAEEIECsiASAAKQEANwMAIAELBwAgAEEYaguWAgEEfyMAQSBrIgMkACADQRhqEEYhBEGwzgRBADYCACADQcyEAjYCCEHkhAIoAgAgA0EIahAEQbDOBCgCACECQbDOBEEANgIAIAJBAUcEQAJAIAAoAgQhBSAAKAIAIQJBsM4EQQA2AgAgAyAFIAJrNgIUIAMgAjYCECADIAI2AgxBsM4EKAIAIQJBsM4EQQA2AgAgAkEBRg0AQbDOBEEANgIAQcIAIAAgBCADQQhqEAtBsM4EKAIAIQJBsM4EQQA2AgAgAkEBRg0AQbDOBEEANgIAQcMAIAAgBCAAQRhqIAEQF0GwzgQoAgAhAEGwzgRBADYCACAAQQFGDQAgBBA6IANBIGokAA8LCxACIQAgBBA6IAAQBQALlgIBBH8jAEEgayICJAAgAkEYahBGIQNBsM4EQQA2AgAgAkHMhAI2AghB5IQCKAIAIAJBCGoQBEGwzgQoAgAhAUGwzgRBADYCACABQQFHBEACQCAAKAIEIQQgACgCACEBQbDOBEEANgIAIAIgBCABazYCFCACIAE2AhAgAiABNgIMQbDOBCgCACEBQbDOBEEANgIAIAFBAUYNAEGwzgRBADYCAEHCACAAIAMgAkEIahALQbDOBCgCACEBQbDOBEEANgIAIAFBAUYNAEGwzgRBADYCAEHDACAAIAMgAEEYakEAEBdBsM4EKAIAIQBBsM4EQQA2AgAgAEEBRg0AIAMQOiACQSBqJAAPCwsQAiEAIAMQOiAAEAUAC84BAQR/IAEvARghAyAAIAEvARoiBDYCBCAAIAM2AgAgAkEASgRAAkAgAkEDcSIGRQRAIAIhAQwBCyACIQEDQCABQQFrIQEgBEEBakEBdiEEIANBAWpBAXYhAyAFQQFqIgUgBkcNAAsLIAJBBE8EQANAIARBAWpBAXZBAWpBAXZBAWpBAXZBAWpBAXYhBCADQQFqQQF2QQFqQQF2QQFqQQF2QQFqQQF2IQMgAUEFayECIAFBBGshASACQX5JDQALCyAAIAQ2AgQgACADNgIACwuHAQEDf0GQywMQRSIBQfD///8HSQRAAkACQCABQQtPBEAgAUEPckEBaiICECshAyAAIAJBgICAgHhyNgIIIAAgAzYCACAAIAE2AgQgASADaiECIAMhAAwBCyAAIAE6AAsgACABaiECIAFFDQELIABBkMsDIAEQMhoLIAJBADoAAA8LQdQfEGgAC+QBAQR/IwBBIGsiASQAIAFBGGoQRiEDQbDOBEEANgIAIAFBzIQCNgIIQeSEAigCACABQQhqEARBsM4EKAIAIQJBsM4EQQA2AgAgAkEBRwRAAkAgACgCBCEEIAAoAgAhAkGwzgRBADYCACABIAQgAms2AhQgASACNgIQIAEgAjYCDEGwzgQoAgAhAkGwzgRBADYCACACQQFGDQBBsM4EQQA2AgBBwgAgACADIAFBCGoQC0GwzgQoAgAhAEGwzgRBADYCACAAQQFGDQAgAxA6IAFBIGokAA8LCxACIQAgAxA6IAAQBQALQQECfyMAQRBrIgIkACABKAIQIQMgAiABKAIMIgE2AgwgAiADIAFrNgIIIABBrMsAIAJBCGoQDTYCACACQRBqJAALIgEBfiABIAKtIAOtQiCGhCAEIAAREgAiBUIgiKckASAFpwsVACABIAKtIAOtQiCGhCAEIAARCAALFgEBfiABIAARDgAiAkIgiKckASACpwsQACMAIABrQXBxIgAkACAACwYAIAAkAAsEACMACwsAIAAQbxogABAsCwUAQbUdC4UCAQZ/IwBBEGsiByQAAkACQCABAn8gAiABKAIEIgMgASgCACIFayIESwRAIAIgBGsiCCABKAIIIgYgA2tNBEAgA0EAIAgQKiAIagwCCyACQQBIDQNB/////wcgBiAFayIDQQF0IgYgAiACIAZJGyADQf////8DTxsiAxArIgYgBGpBACAIECoaIAEgBiAFIAQQOSIEIANqNgIIIAEgAiAEaiIDNgIEIAEgBDYCACAFRQ0CIAUQLCABKAIEIQMMAgsgAiAETw0BIAIgBWoLIgM2AgQLIAcgASgCACIBNgIMIAcgAyABazYCCCAAQazLACAHQQhqEA02AgAgB0EQaiQADwsQQgALBQBBtyoLBQBBpBsLFgAgAEUEQEEADwsgAEGExAMQNUEARwtDAQF/IwBBEGsiAyQAIAMgAigCADYCDCAAIAEgA0EMaiAAKAIAKAIQEQEAIgAEQCACIAMoAgw2AgALIANBEGokACAACxoAIAAgASgCCCAFEDAEQCABIAIgAyAEEHQLCzcAIAAgASgCCCAFEDAEQCABIAIgAyAEEHQPCyAAKAIIIgAgASACIAMgBCAFIAAoAgAoAhQRAAALpwEAIAAgASgCCCAEEDAEQAJAIAEoAgQgAkcNACABKAIcQQFGDQAgASADNgIcCw8LAkAgACABKAIAIAQQMEUNAAJAIAIgASgCEEcEQCABKAIUIAJHDQELIANBAUcNASABQQE2AiAPCyABIAI2AhQgASADNgIgIAEgASgCKEEBajYCKAJAIAEoAiRBAUcNACABKAIYQQJHDQAgAUEBOgA2CyABQQQ2AiwLC4gCACAAIAEoAgggBBAwBEACQCABKAIEIAJHDQAgASgCHEEBRg0AIAEgAzYCHAsPCwJAIAAgASgCACAEEDAEQAJAIAIgASgCEEcEQCABKAIUIAJHDQELIANBAUcNAiABQQE2AiAPCyABIAM2AiACQCABKAIsQQRGDQAgAUEAOwE0IAAoAggiACABIAIgAkEBIAQgACgCACgCFBEAACABLQA1BEAgAUEDNgIsIAEtADRFDQEMAwsgAUEENgIsCyABIAI2AhQgASABKAIoQQFqNgIoIAEoAiRBAUcNASABKAIYQQJHDQEgAUEBOgA2DwsgACgCCCIAIAEgAiADIAQgACgCACgCGBEDAAsLeQEBf0HsABArIgBCADcCICAAQgA3AgAgAEIANwI4IABBADYCKCAA/QwAAAAAAAAAAAAAAAAAAAAA/QsCCCAAQUBr/QwAAAAAAAAAAAAAAAAAAAAA/QsCACAA/QwAAAAAAAAAAAAAAAAAAAAA/QsCUCAAQQA2AmAgAAuGBQEEfyMAQUBqIgYkAAJAIAFB4MUDQQAQMARAIAJBADYCAEEBIQQMAQsCQCAAIAEgAC0ACEEYcQR/QQEFIAFFDQEgAUHUwwMQNSIDRQ0BIAMtAAhBGHFBAEcLEDAhBQsgBQRAQQEhBCACKAIAIgBFDQEgAiAAKAIANgIADAELAkAgAUUNACABQYTEAxA1IgVFDQEgAigCACIBBEAgAiABKAIANgIACyAFKAIIIgMgACgCCCIBQX9zcUEHcQ0BIANBf3MgAXFB4ABxDQFBASEEIAAoAgwgBSgCDEEAEDANASAAKAIMQdTFA0EAEDAEQCAFKAIMIgBFDQIgAEG4xAMQNUUhBAwCCyAAKAIMIgNFDQBBACEEIANBhMQDEDUiAQRAIAAtAAhBAXFFDQICfyAFKAIMIQBBACECAkADQEEAIABFDQIaIABBhMQDEDUiA0UNASADKAIIIAEoAghBf3NxDQFBASABKAIMIAMoAgxBABAwDQIaIAEtAAhBAXFFDQEgASgCDCIARQ0BIABBhMQDEDUiAQRAIAMoAgwhAAwBCwsgAEH0xAMQNSIARQ0AIAAgAygCDBB1IQILIAILIQQMAgsgA0H0xAMQNSIBBEAgAC0ACEEBcUUNAiABIAUoAgwQdSEEDAILIANBpMMDEDUiAUUNASAFKAIMIgBFDQEgAEGkwwMQNSIDRQ0BIAZBCGoiAEEEckEAQTQQKhogBkEBNgI4IAZBfzYCFCAGIAE2AhAgBiADNgIIIAMgACACKAIAQQEgAygCACgCHBEFAAJAIAYoAiAiAEEBRw0AIAIoAgBFDQAgAiAGKAIYNgIACyAAQQFGIQQMAQtBACEECyAGQUBrJAAgBAsxACAAIAEoAghBABAwBEAgASACIAMQdg8LIAAoAggiACABIAIgAyAAKAIAKAIcEQUACxgAIAAgASgCCEEAEDAEQCABIAIgAxB2CwufAQECfyMAQUBqIgMkAAJ/QQEgACABQQAQMA0AGkEAIAFFDQAaQQAgAUGkwwMQNSIBRQ0AGiADQQhqIgRBBHJBAEE0ECoaIANBATYCOCADQX82AhQgAyAANgIQIAMgATYCCCABIAQgAigCAEEBIAEoAgAoAhwRBQAgAygCICIAQQFGBEAgAiADKAIYNgIACyAAQQFGCyEAIANBQGskACAACwoAIAAgAUEAEDALYQEBfyAABEAgACgCWCIBBEAgACABNgJcIAEQLAsgACgCICIBBEAgACABNgIkIAEQLAsgACgCDCIBBEAgACABNgIQIAEQLAsgACgCACIBBEAgACABNgIEIAEQLAsgABAsCwsFABB3AAsfACAAQfTIAzYCACAAQfjJAzYCACAAQQRqIAEQeCAACwYAIAAkAQsGAEGMygALigUCBn4CfyABIAEoAgBBB2pBeHEiAUEQajYCACAAIQkgASkDACEEIAEpAwghBSMAQSBrIgAkAAJAIAVC////////////AIMiA0KAgICAgIDAgDx9IANCgICAgICAwP/DAH1UBEAgBUIEhiAEQjyIhCEDIARC//////////8PgyIEQoGAgICAgICACFoEQCADQoGAgICAgICAwAB8IQIMAgsgA0KAgICAgICAgEB9IQIgBEKAgICAgICAgAhSDQEgAiADQgGDfCECDAELIARQIANCgICAgICAwP//AFQgA0KAgICAgIDA//8AURtFBEAgBUIEhiAEQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgA0L///////+//8MAVg0AQgAhAiADQjCIpyIBQZH3AEkNACAEIQIgBUL///////8/g0KAgICAgIDAAIQiAyEGAkAgAUGB9wBrIghBwABxBEAgAiAIQUBqrYYhBkIAIQIMAQsgCEUNACAGIAitIgeGIAJBwAAgCGutiIQhBiACIAeGIQILIAAgAjcDECAAIAY3AxgCQEGB+AAgAWsiAUHAAHEEQCADIAFBQGqtiCEEQgAhAwwBCyABRQ0A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AAAA/QwAAAAAAAAAAAAAAAAAAAAA/QwAAAAAAAAAAAAAAAAAAAAA/QwAAAAAAAAAAAAAAAAAAAAA/QwAAAAAAAAAAAAAAAAAAAAAIAr9Ef0MAAAAAAAAAAAAAAAAAAAAAP0NAAEAAQABAAEAAQABAAEAAf0MAAAAAAAAAAABAQEBAQEBAf0O/QwBAgQIECBAgAECBAgQIECA/U79JCIe/WAiIP0NDxAREhMUFRYXGBkaGxwdHiAg/W4iIP0NDg8QERITFBUWFxgZGhscHSAg/W4iIP0NDA0ODxAREhMUFRYXGBkaGyAg/W4iIP0NCAkKCwwNDg8QERITFBUWFyAg/W4iIf0NDxAREhMUFRYXGBkaGxwdHv0OIiD9DAD///8E////CP///wz////9DkEf/asBIB/9UP0MAAAAAAAAAAAAAAAAAAAAACAe/QwA////BP///wj///8M/////Q79DP8AAAD/AAAA/wAAAP8AAAD9N/1S/VD9CwAAIBggCEECdCINaiILIAv9AAAAICD9DAH///8F////Cf///w3////9DkEf/asBIB/9UP0MAAAAAAAAAAAAAAAAAAAAACAe/QwB////Bf///wn///8N/////Q79DP8AAAD/AAAA/wAAAP8AAAD9N/1S/VD9CwAAIAsgDWoiCyAL/QAAACAg/QwC////Bv///wr///8O/////Q5BH/2rASAf/VD9DAAAAAAAAAAAAAAAAAAAAAAgHv0MAv///wb///8K////Dv////0O/Qz/AAAA/wAAAP8AAAD/AAAA/Tf9Uv1Q/QsAACALIA1qIg0gDf0AAAAgIP0MA////wf///8L////D/////0OQR/9qwEgH/1Q/QwAAAAAAAAAAAAAAAAAAAAAIB79DAP///8H////C////w/////9Dv0M/wAAAP8AAAD/AAAA/wAAAP03/VL9UP0LAAAgECAh/RYPaiEQCyAMIA4gEGs2AkQgGSAQQQN2QRhxaiIO/QACACIiIBBBP3EiDf3NASEgIA2t/RIhISAO/QACECEeIAwCeyANBEAgDP0MAAAAAAAAAAAAAAAAAAAAACAe/Q0ICQoLDA0ODxAREhMUFRYXICL9DAAAAAAAAAAAAAAAAAAAAAD9DQgJCgsMDQ4PEBESExQVFhf9UEHAACANayIN/csBICD9UP0LAhQgHv0MAAAA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ERITFBUWFxgZGhscHSAh/W4iIf0NDA0ODxAREhMUFRYXGBkaGyAh/W4iIf0NCAkKCwwNDg8QERITFBUWFyAh/W4iI/0NDxAREhMUFRYXGBkaGxwdHiIh/QwA////BP///wj///8M/////Q79DiAe/QwA////BP///wj///8M/////Q79DAAAAAAAAAAAAAAAAAAAAAD9I/1PIiL9GwAgH/0bACIAdP0RICL9GwEgH/0bASICdP0cASAi/RsCIB/9GwIiA3T9HAIgIv0bAyAf/RsDIgR0/RwD/VH9CwAAIBAgCEECdCIFaiIJIAn9AAAAICAgIf0MAf///wX///8J////Df////0O/Q4gHv0MAf///wX///8J////Df////0O/QwAAAAAAAAAAAAAAAAAAAAA/SP9TyIi/RsAIAB0/REgIv0bASACdP0cASAi/RsCIAN0/RwCICL9GwMgBHT9HAP9Uf0LAAAgBSAJaiIJIAn9AAAAICAgIf0MAv///wb///8K////Dv////0O/Q4gHv0MAv///wb///8K////Dv////0O/QwAAAAAAAAAAAAAAAAAAAAA/SP9TyIi/RsAIAB0/REgIv0bASACdP0cASAi/RsCIAN0/RwCICL9GwMgBHT9HAP9Uf0LAAAgBSAJaiIFIAX9AAAAICAgIf0MA////wf///8L////D/////0O/Q4gHv0MA////wf///8L////D/////0O/QwAAAAAAAAAAAAAAAAAAAAA/SP9TyIe/RsAIAB0/REgHv0bASACdP0cASAe/RsCIAN0/RwCIB79GwMgBHT9HAP9Uf0LAAAgI/0WDwVBAAshACAUQQJqIRQgDCAKIABrIgo2AmAgEEEQaiEQICsgAK2IISsgF0EEaiIXIAZJDQALCyAMIA42AlAgDCArNwNYIBFBBGoiESAHSQ0ACwwBC0EAIRILIAxBoOEAaiQAIBILpQICAnsBfwJAIARFDQAgBEEBa0ECdkEBaiICQQFxIQcgA/0TIQYgBEEFTwRAIAJB/v///wdxIQJBACEEA0AgASAA/QAAACIF/QwAAACAAAAAgAAAAIAAAACA/U4gBiAF/Qz///9/////f////3////9//U79+gH95gH9UP0LAAAgASAA/QAAECIF/QwAAACAAAAAgAAAAIAAAACA/U4gBiAF/Qz///9/////f////3////9//U79+gH95gH9UP0LABAgAUEgaiEBIABBIGohACAEQQJqIgQgAkcNAAsLIAdFDQAgASAA/QAAACIF/QwAAACAAAAAgAAAAIAAAACA/U4gBiAF/Qz///9/////f////3////9//U79+gH95gH9UP0LAAALC6IDAgN7BX8CQCAERQ0AIARBAWtBAnZBAWoiCEEBcSEJQR8gAmv9ESEGIARBBU8EQCAIQf7///8HcSECQQAhBANAIAEgAP0AAAAiB/0M////f////3////9/////f/1OIgX9GwAgBv0bACIIdv0RIAX9GwEgBv0bASIKdv0cASAF/RsCIAb9GwIiC3b9HAIgBf0bAyAG/RsDIgx2/RwDIAdBH/2sAf1RIAdBH/2tAf2uAf0LAAAgASAA/QAAECIH/Qz///9/////f////3////9//U4iBf0bACAIdv0RIAX9GwEgCnb9HAEgBf0bAiALdv0cAiAF/RsDIAx2/RwDIAdBH/2sAf1RIAdBH/2tAf2uAf0LABAgAUEgaiEBIABBIGohACAEQQJqIgQgAkcNAAsLIAlFDQAgASAA/QAAACIH/Qz///9/////f////3////9//U4iBf0bACAG/RsAdv0RIAX9GwEgBv0bAXb9HAEgBf0bAiAG/RsCdv0cAiAF/RsDIAb9GwN2/RwDIAdBH/2sAf1RIAdBH/2tAf2uAf0LAAALC4sBAQR7IAX9AAAAIQYgBARAIAP9EyEIQQAhAgNAIAEgCCAA/QAAAP3mAf34ASIHQR/9rAEgB/1RIAdBH/2tAf2uASIJIAf9DAAAAIAAAACAAAAAgAAAAID9Tv1Q/QsAACAJIAb9UCEGIAFBEGohASAAQRBqIQAgAkEEaiICIARJDQALCyAFIAb9CwAAC94DAgV7BX8gBf0AAAAhCAJAIARFDQAgBEEBa0ECdkEBaiILQQFxIQxBHyACa/0RIQcgBEEFTwRAIAtB/v///wdxIQJBACEEA0AgASAA/QAAACIGQR/9rAEiCSAG/VEgBkEf/a0B/a4BIgb9GwAgB/0bACILdP0RIAb9GwEgB/0bASINdP0cASAG/RsCIAf9GwIiDnT9HAIgBv0bAyAH/RsDIg90/RwDIgogCf0MAAAAgAAAAIAAAACAAAAAgP1O/VD9CwAAIAEgAP0AABAiBkEf/awBIgkg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aW4gYSB0aWxlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0AENPRCBpbiBhIHRpbGUgaXMgbm90IHN1cHBvcnRlZCB5ZXQAUUNEIGluIGEgdGlsZSBpcyBub3Qgc3VwcG9ydGVkIHlldABQT0MgaW4gYSB0aWxlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0AENPQyBpbiBhIHRpbGUgaXMgbm90IHN1cHBvcnRlZCB5ZXQAUUNDIGluIGEgdGlsZSBpcyBub3Qgc3VwcG9ydGVkIHlldABSR04gaXMgbm90IHN1cHBvcnRlZCB5ZXQAUFBNIGlzIG5vdCBzdXBwb3J0ZWQgeWV0AFBPQyBpcyBub3Qgc3VwcG9ydGVkIHlldABDT0MgaXMgbm90IHN1cHBvcnRlZCB5ZXQAdGlsZSBvZmZzZXQgaGFzIHRvIGJlIHNtYWxsZXIgdGhhbiBpbWFnZSBvZmZzZXQAc2V0VGlsZU9mZnNldABnZXRUaWxlT2Zmc2V0AHNldEltYWdlT2Zmc2V0AGdldEltYWdlT2Zmc2V0AHNldFByZWNpbmN0AGdldFByZWNpbmN0AGZsb2F0AHVpbnQ2NF90AGVycm9yIGluIHRpbGUgcGFydCBudW1iZXIsIHNob3VsZCBiZSBzbWFsbGVyIHRoYW4gdG90YWwgbnVtYmVyIG9mIHRpbGUgcGFydHMAY29sb3IgdHJhbnNmb3JtIGNhbiBvbmx5IGJlIGVtcGxveWVkIHdoZW4gdGhlIGltYWdlIGhhcyAzIG9yIG1vcmUgY29sb3IgY29tcG9uZW50cwBzZXROdW1QcmVjaW5jdHMAZ2V0TnVtTGF5ZXJzAHNldERlY29tcG9zaXRpb25zAGdldE51bURlY29tcG9zaXRpb25zAGluY29ycmVjdCBjb2RlIGJsb2NrIGRpbWVuc2lvbnMAc2V0QmxvY2tEaW1lbnNpb25zAGdldEJsb2NrRGltZW5zaW9ucwBUaGUgYnJvYWRjYXN0IHByb2ZpbGUgY2FuIG9ubHkgaGF2ZSAxIG9yIDQgdGlsZXMAUnNpeiBpbiBTSVogaGFzIHVuaW1wbGVtZW50ZWQgZmllbGRzAENSRyBoYXMgYmVlbiBpZ25vcmVkOyBDUkcgaXMgcmVsYXRlZCB0byB3aGVyZSB0aGUgQ2IgYW5kIENyIGNvbG91ciBjb21wb25lbnRzIGFyZSBjby1zaXRlZCBvciBsb2NhdGVkIHdpdGggcmVzcGVjdCB0byB0aGUgWScgbHVtYSBjb21wb25lbnQuIFBlcmhhcHMsIGl0IGlzIGJldHRlciB0byBnZXQgdGhlIGluZGl2ZHVhbCBjb21wb25lbnRzIGFuZCBhc3NlbWJsZSB0aGUgc2FtcGxlcyBhY2NvcmRpbmcgdG8geW91ciBuZWVkcwAlcwB2ZWN0b3IAb2pwaCBlcnJvcgBlcnJvciByZWFkaW5nIG1hcmtlcgBlcnJvciByZWFkaW5nIFNJWiBtYXJrZXIAZXJyb3IgcmVhZGluZyBTT1QgbWFya2VyAGVycm9yIHJlYWRpbmcgQ0FQIG1hcmtlcgBlcnJvciByZWFkaW5nIENPRCBtYXJrZXIAU2NhbGFyIGRlcml2ZWQgcXVhbnRpemF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IGluIFFDRCBtYXJrZXIAd3JvbmcgU3FjZCB2YWx1ZSBpbiBRQ0QgbWFya2VyAHdyb25nIExxY2QgdmFsdWUgaW4gUUNEIG1hcmtlcgBlcnJvciByZWFkaW5nIFFDRCBtYXJrZXIAU2NhbGFyIGRlcml2ZWQgcXVhbnRpemF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IGluIFFDQyBtYXJrZXIAd3JvbmcgTHFjZCB2YWx1ZSBpbiBRQ0MgbWFya2VyAHdyb25nIFNxY2MgdmFsdWUgaW4gUUNDIG1hcmtlcgB3cm9uZyBMcWNjIHZhbHVlIGluIFFDQyBtYXJrZXIAZXJyb3IgcmVhZGluZyBRQ0MgbWFya2VyAGdldEVuY29kZWRCdWZmZXIAZ2V0RGVjb2RlZEJ1ZmZlcgBpbXByb3BlciBwcm9ncmVzc2lvbiBvcmRlcgB1bmtub3duIHByb2dyZXNzaW9uIG9yZGVyAHNldFByb2dyZXNzaW9uT3JkZXIAZ2V0UHJvZ3Jlc3Npb25PcmRlcgBIVEoyS0VuY29kZXIASFRKMktEZWNvZGVyAHJlYWRIZWFkZXIAdW5zaWduZWQgY2hhcgAvcm9vdC9yZXBvL3BhY2thZ2VzL29wZW5qcGhqcy9leHRlcm4vb3BlbmpwaC9zcmMvY29yZS9jb2Rlc3RyZWFtL29qcGhfcGFyYW1zLmNwcAAvcm9vdC9yZXBvL3BhY2thZ2VzL29wZW5qcGhqcy9leHRlcm4vb3BlbmpwaC9zcmMvY29yZS9jb2Rpbmcvb2pwaF9ibG9ja19lbmNvZGVyLmNwcAAvcm9vdC9yZXBvL3BhY2thZ2VzL29wZW5qcGhqcy9leHRlcm4vb3BlbmpwaC9zcmMvY29yZS9jb2Rpbmcvb2pwaF9ibG9ja19kZWNvZGVyX3dhc20uY3BwAC9yb290L3JlcG8vcGFja2FnZXMvb3BlbmpwaGpzL2V4dGVybi9vcGVuanBoL3NyYy9jb3JlL2NvZGVzdHJlYW0vb2pwaF9jb2Rlc3RyZWFtLmNwcABZb3UgY2Fubm90IHNldCBpbWFnZSBleHRlbnQgbm9yIHRpbGUgc2l6ZSB0byB6ZXJvAGdldEZyYW1lSW5mbwBkZWNvZGVTdWJSZXNvbHV0aW9uAHN0ZDo6ZXhjZXB0aW9uAGdldFZlcnNpb24AbmFuAHNldElzVXNpbmdDb2xvclRyYW5zZm9ybQBnZXRJc1VzaW5nQ29sb3JUcmFuc2Zvcm0AYm9vbABtYWduaXR1ZGUgc2lnbiBlbmNvZGVyJ3MgYnVmZmVyIGlzIGZ1bGwAbWVsIGVuY29kZXIncyBidWZmZXIgaXMgZnVsbAB2bGMgZW5jb2RlcidzIGJ1ZmZlciBpcyBmdWxsAHByZWNpbmN0IHNpemUgaXMgdG9vIHNtYWxsAGNhbGN1bGF0ZVNpemVBdERlY29tcG9zaXRpb25MZXZlbABnZXRTSU1ETGV2ZWwAZW1zY3JpcHRlbjo6dmFsAGJhZF9hcnJheV9uZXdfbGVuZ3RoAGVycm9yIGluIFNJWiBtYXJrZXIgbGVuZ3RoAGVycm9yIGluIENBUCBtYXJrZXIgbGVuZ3RoAGVycm9yIGluIENPRCBtYXJrZXIgbGVuZ3RoAGVycm9yIGluIFNPVCBsZW5ndGgAc29tZXRoaW5nIGlzIHdyb25nIHdpdGggU09QIGxlbmd0aAB3aWR0aAAvcm9vdC9yZXBvL3BhY2thZ2VzL29wZW5qcGhqcy9leHRlcm4vb3BlbmpwaC9zcmMvY29yZS9jb2Rlc3RyZWFtL29qcGhfcGFyYW1zX2xvY2FsLmgAdW5zaWduZWQgbG9uZwB0ZXJtaW5hdGluZwBzdGQ6OndzdHJpbmcAYmFzaWNfc3RyaW5nAHN0ZDo6c3RyaW5nAHN0ZDo6dTE2c3RyaW5nAHN0ZDo6dTMyc3RyaW5nAEZpbGUgdGVybWluYXRlZCBkdXJpbmcgbWFya2VyIHNlZ21lbnQgc2tpcHBpbmcAaW5mAENzaXogZG9lcyBub3QgbWF0Y2ggdGhlIFNJWiBtYXJrZXIgc2l6ZQBzZXRUaWxlU2l6ZQBnZXRUaWxlU2l6ZQBzaG91bGQgZmluZCBFUEgsIGJ1dCBmb3VuZCBzb21ldGhpbmcgZWxzZQBGb3IgYnJvYWRjYXN0IHByb2ZpbGUsIHByZWNpbmN0IHNpemVzIGFyZSByZXN0cmljdGVkLiBVc2UgIi1wcmVjaW5jdHMgezEyOCwxMjh9LHsyNTYsMjU2fSIgYXQgdGhlIGNvbW1hbmRsaW5lAEZvciBJTUYgcHJvZmlsZSwgcHJlY2luY3Qgc2l6ZXMgYXJlIHJlc3RyaWN0ZWQuIFVzZSAiLXByZWNpbmN0cyB7MTI4LDEyOH0sezI1NiwyNTZ9IiBhdCB0aGUgY29tbWFuZGxpbmUARm9yIElNRiBwcm9maWxlLCBjb2RlYmxvY2sgZGltZW5zaW9ucyBhcmUgcmVzdHJpY3RlZC4gVXNlICItYmxvY2tfc2l6ZSB7MzIsMzJ9IiBhdCB0aGUgY29tbWFuZGxpbmUAYml0c1BlclNhbXBsZQBzZXREb3duU2FtcGxlAGdldERvd25TYW1wbGUARXJyb3Igd3JpdGluZyB0byBmaWxlAGVycm9yIHJlYWRpbmcgZnJvbSBmaWxlAGVycm9yIHNlZWtpbmcgZmlsZQBlcnJvciBQY2FwIHNob3VsZCBoYXZlIGl0cyAxNXRoIE1TQiBzZXQsIFBjYXBeMTUuICBUaGlzIGlzIG5vdCBhIEpQSCBmaWxlAGRvdWJsZQBnZXRJc1JldmVyc2libGUAcHJlY2luY3Qgc2l6ZSBpcyB0b28gbGFyZ2UAdGhlIHRvcCBsZWZ0IHRpbGUgbXVzdCBpbnRlcnNlY3Qgd2l0aCB0aGUgaW1hZ2UAZW5jb2RlAGRlY29kZQB2b2lkAHRoZSBwbGFuYXIgaW50ZXJmYWNlIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aGVuIGNvbG91ciB0cmFuc2Zvcm0gaXMgZW1wbG95ZWQAZXJyb3IgUGNhcCBpbiBDQVAgaGFzIG9wdGlvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZABtYXJrZXJzIGVycm9yLCBDT0QgYW5kIFFDRCBhcmUgcmVxdWlyZWQAdGVybWluYXRlX2hhbmRsZXIgdW5leHBlY3RlZGx5IHJldHVybmVkAEZvciBJTUYgcHJvZmlsZSwgY29tcG5lbnQgYml0X2RlcHRoIGhhcyB0byBiZSBiZXR3ZWVuIDggYW5kIDE2IGJpdHMgaW5jbHVzaXZlbHksIGFuZCB0aGUgc2FtcGxlcyBtdXN0IGJlIHVuc2lnbmVkAEZvciBicm9hZGNhc3QgcHJvZmlsZSwgY29tcG5lbnQgYml0X2RlcHRoIGhhcyB0byBiZSBiZXR3ZWVuIDggYW5kIDEyIGJpdHMgaW5jbHVzaXZlbHksIGFuZCB0aGUgc2FtcGxlcyBtdXN0IGJlIHVuc2lnbmVkAGlzU2lnbmVkAG1hbGxvYyBmYWlsZWQARmlsZSB0ZXJtaW5hdGVkIGVhcmx5IGJlZm9yZSBzdGFydCBvZiBkYXRhIGlzIGZvdW5kIGZvciB0aWxlIGluZGV4ZWQgJWQgYW5kIHRpbGUgcGFydCAlZABzdGQ6OmJhZF9hbGxvYwBMUkNQAFJMQ1AATkFOAENQUkwAUENSTABSUENMAElORgB0aWxlIGluZGV4IGluIFNPVCBtYXJrZXIgY2Fubm90IGJlIDB4RkZGRgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDhfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MTZfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MTZfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGNoYXI+AHN0ZDo6YmFzaWNfc3RyaW5nPHVuc2lnbmVkIGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AGVycm9yIHJlYWRpbmcgZnJvbSBmaWxlIHA5AGVycm9yIHJlYWRpbmcgZnJvbSBmaWxlIHA4AGVycm9yIHJlYWRpbmcgZnJvbSBmaWxlIHA3AGVycm9yIHJlYWRpbmcgZnJvbSBmaWxlIHA2AGVycm9yIHJlYWRpbmcgZnJvbSBmaWxlIHA1AG51bWJlciBvZiB0aWxlcyBjYW5ub3QgZXhjZWVkIDY1NTM1AGVycm9yIHJlYWRpbmcgZnJvbSBmaWxlIHA0AEZvciBicm9hZGNhc3QgcHJvZmlsZSwgdGhlIG51bWJlciBvZiBjb21wb25lbnRzIGhhcyB0byBiZSBsZXNzICBvciBlcXVhbCB0byA0AGVycm9yIHJlYWRpbmcgZnJvbSBmaWxlIHAzAEZvciBJTUYgcHJvZmlsZSwgdGhlIG51bWJlciBvZiBjb21wb25lbnRzIGhhcyB0byBiZSBsZXNzICBvciBlcXVhbCB0byAzAGVycm9yIHJlYWRpbmcgZnJvbSBmaWxlIHAyAG1heGltdW0gbnVtYmVyIG9mIGRlY29tcG9zaXRpb25zIGNhbm5vdCBleGNlZWQgMzIARm9yIFJQQ0wgYW5kIFBDUkwgcHJvZ3Jlc3Npb24gb3JkZXJzLGNvbXBvbmVudCBkb3duc2FtcGxpbmcgZmFjdG9ycyBoYXZlIHRvIGJlIHBvd2VycyBvZiAyAHByZWNpbmN0IHdpZHRoIGFuZCBoZWlnaHQgc2hvdWxkIGJlIGEgcG93ZXIgb2YgMgBlcnJvciByZWFkaW5nIGZyb20gZmlsZSBwMQBlcnJvciByZWFkaW5nIGZyb20gZmlsZSBwMTAAcHJlY2luY3Qgd2lkdGggb3IgaGVpZ2h0IGNhbm5vdCBiZSAwAEZvciBicm9hZGNhc3QgcHJvZmlsZSwgbnVtYmVyIG9mIGRlY29tcG9zaXRpb25zIGhhcyB0byBiZSBiZXR3ZWVuMSBhbmQgNSBpbmNsdXNpdmVseS4ATnVtYmVyIG9mIGRlY29tcG9zaXRpb25zIGRvZXMgbm90IG1hdGNoIHRoZSBJTUYgcHJvZmlsZSBkaWN0YXRlZCBieSB3YXZlbGV0IHJldmVyc2liaWxpdHkgYW5kIGltYWdlIGRpbWVuc2lvbnMuAE51bWJlciBvZiBkZWNvbXBvc2l0aW9ucyBkb2VzIG5vdCBtYXRjaCB0aGUgSU1GIHByb2ZpbGUgZGljdGF0ZWQgYnkgd2F2ZWxldCByZXZlcnNpYmlsaXR5IGFuZCBpbWFnZSBkaW1lbnNpb25zIGFuZCB0aWxlcy4AZXJyb3IgaW4gcGFyc2luZyBhIHRpbGUgaGVhZGVyOyBtaXNzaW5nIG1zYnMgYXJlIGxhcmdlciBvciBlcXVhbCB0byBLbWF4LiBUaGUgbW9zdCBsaWtlbHkgY2F1c2UgaXMgYSBjb3JydXB0aW9uIGluIHRoZSBiaXRzdHJlYW0uAHdoZW4gY29sb3IgdHJhbnNmb3JtIGlzIHVzZWQsIHRoZSBmaXJzdCAzIGNvbG91ciBjb21wb25lbnRzIG11c3QgaGF2ZSB0aGUgc2FtZSBkb3duc2FtcGxpbmcuAExvc3N5IElNRiBwcm9maWxlIG11c3QgaGF2ZSBvbmUgdGlsZS4ARm9yIGJyb2FkY2FzdCBwcm9maWxlLCBjb2RlYmxvY2sgZGltZW5zaW9ucyBhcmUgcmVzdHJpY3RlZCBzdWNoIHRoYXQgY29kZWJsb2NrIGhlaWdodCBoYXMgdG8gYmUgZWl0aGVyIDMyLCA2NCwgb3IgMTI4LgBGb3IgYnJvYWRjYXN0IHByb2ZpbGUsIGNvZGVibG9jayBkaW1lbnNpb25zIGFyZSByZXN0cmljdGVkIHN1Y2ggdGhhdCBjb2RlYmxvY2sgd2lkdGggaGFzIHRvIGJlIGVpdGhlciAzMiwgNjQsIG9yIDEyOC4ARm9yIGJyb2FkY2FzdCBwcm9maWxlLCBlaXRoZXIgbm8gY29tcG9uZW50IGRvd25zYW1wbGluZyBpcyB1c2VkLCBvciB0aGUgeC1kaW1lbnNpb24gb2YgdGhlIDJuZCBhbmQgM3JkIGNvbXBvbmVudHMgaXMgZG93bnNhbXBsZWQgYnkgMi4ARm9yIElNRiBwcm9maWxlLCBlaXRoZXIgbm8gY29tcG9uZW50IGRvd25zYW1wbGluZyBpcyB1c2VkLCBvciB0aGUgeC1kaW1lbnNpb24gb2YgdGhlIDJuZCBhbmQgM3JkIGNvbXBvbmVudHMgaXMgZG93bnNhbXBsZWQgYnkgMi4ARm9yIGJyb2FkY2FzdCBwcm9maWxlLCBpbWFnZSBvZmZzZXQgKFhPc2l6LCBZT3NpeikgaGFzIHRvIGJlIDAuAEZvciBJTUYgcHJvZmlsZSwgaW1hZ2Ugb2Zmc2V0IChYT3NpeiwgWU9zaXopIGhhcyB0byBiZSAwLgBGb3IgYnJvYWRjYXN0IHByb2ZpbGUsIHRpbGUgb2Zmc2V0IChYVE9zaXosIFlUT3NpeikgaGFzIHRvIGJlIDAuAEZvciBJTUYgcHJvZmlsZSwgdGlsZSBvZmZzZXQgKFhUT3NpeiwgWVRPc2l6KSBoYXMgdG8gYmUgMC4ARm9yIGJyb2FkY2FzdCBwcm9maWxlLCB0aGUgQ1BSTCBwcm9ncmVzc2lvbiBvcmRlciBtdXN0IGJlIHVzZWQuIFVzZSAiLXByb2dfb3JkZXIgQ1BSTCIuAEZvciBJTUYgcHJvZmlsZSwgdGhlIENQUkwgcHJvZ3Jlc3Npb24gb3JkZXIgbXVzdCBiZSB1c2VkLiBVc2UgIi1wcm9nX29yZGVyIENQUkwiLgAobnVsbCkAUnNpeiBiaXQgMTQgbm90IHNldCAodGhpcyBpcyBub3QgYSBKUEggZmlsZSkAb2pwaCBlcnJvciAweCUwOFggYXQgJXM6JWQ6IABvanBoIGluZm8gMHglMDhYIGF0ICVzOiVkOiAAb2pwaCB3YXJuaW5nIDB4JTA4WCBhdCAlczolZDogACVzCgBFcnJvciBkZWNvZGluZyBhIGNvZGVibG9jawoAc2tpcHBlZF9yZXNvbHV0aW9uIGZvciBkYXRhICVkIG11c3QgYmUgc21hbGxlciB0aGFuICB0aGUgbnVtYmVyIG9mIGRlY29tcG9zaXRpb24gbGV2ZWxzICVkCgBza2lwcGVkX3Jlc29sdXRpb24gZm9yIGRhdGEgJWQgbXVzdCBiZSBlcXVhbCBvciBzbWFsbGVyIHRoYW4gIHNraXBwZWRfcmVzb2x1dGlvbiBmb3IgcmVjb25zdHJ1Y3Rpb24gJWQKAEEgbWFsZm9ybWVkIGNvZGVibG9jayB0aGF0IGhhcyBtb3JlIHRoYW4gb25lIGNvZGluZyBwYXNzLCBidXQgemVybyBsZW5ndGggZm9yIDJuZCBhbmQgcG90ZW50aWFsIDNyZCBwYXNzLgoAQ29kZXN0cmVhbSByZXNpbGllbmNlIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgcmVhZGluZyBmaWxlIGhlYWRlcnMuCgBXZSBkbyBub3Qgc3VwcG9ydCBtb3JlIHRoYW4gMyBjb2RpbmcgcGFzc2VzOyBUaGlzIGNvZGVibG9ja3MgaGFzICVkIHBhc3Nlcy4KADMyIGJpdHMgYXJlIG5vdCBlbm91Z2ggdG8gZGVjb2RlIHRoaXMgY29kZWJsb2NrLiBUaGlzIG1lc3NhZ2Ugd2lsbCBub3QgYmUgZGlzcGxheWVkIGFnYWluLgoATm90IGVub3VnaCBwcmVjaXNpb24gdG8gZGVjb2RlIHRoZSBjbGVhbnVwIHBhc3MuIFRoZSBjb2RlIGNhbiBiZSBtb2RpZmllZCB0byBzdXBwb3J0IHRoaXMgY2FzZS4gVGhpcyBtZXNzYWdlIHdpbGwgbm90IGJlIGRpc3BsYXllZCBhZ2Fpbi4KAE5vdCBlbm91Z2ggcHJlY2lzaW9uIHRvIGRlY29kZSB0aGUgU2duUHJvcCBub3IgTWFnUmVmIHBhc3NlczsgYm90aCB3aWxsIGJlIHNraXBwZWQuIFRoaXMgbWVzc2FnZSB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQgYWdhaW4uCgBXcm9uZyBjb2RlYmxvY2sgbGVuZ3RoLgoAAACoJAAATlN0M19fMjEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAAKzjAABoJAAAaWkAAFTjAAA5RnJhbWVJbmZvAACs4wAAuCQAAGkAdmkAaWlpAHZpaWkANVBvaW50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"},981:()=>{},1209:()=>{},1973:()=>{},378:()=>{},9652:()=>{},6087:()=>{},4555:()=>{},1005:()=>{}},B={};function Q(A){var I=B[A];if(void 0!==I)return I.exports;var C=B[A]={exports:{}};return g[A].call(C.exports,C,C.exports,Q),C.exports}Q.n=A=>{var I=A&&A.__esModule?()=>A.default:()=>A;return Q.d(I,{a:I}),I},I=Object.getPrototypeOf?A=>Object.getPrototypeOf(A):A=>A.__proto__,Q.t=function(g,B){if(1&B&&(g=this(g)),8&B)return g;if("object"==typeof g&&g){if(4&B&&g.__esModule)return g;if(16&B&&"function"==typeof g.then)return g}var C=Object.create(null);Q.r(C);var E={};A=A||[null,I({}),I([]),I(I)];for(var i=2&B&&g;"object"==typeof i&&!~A.indexOf(i);i=I(i))Object.getOwnPropertyNames(i).forEach((A=>E[A]=()=>g[A]));return E.default=()=>g,Q.d(C,E),C},Q.d=(A,I)=>{for(var g in I)Q.o(I,g)&&!Q.o(A,g)&&Object.defineProperty(A,g,{enumerable:!0,get:I[g]})},Q.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(A){if("object"==typeof window)return window}}(),Q.o=(A,I)=>Object.prototype.hasOwnProperty.call(A,I),Q.r=A=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(A,"__esModule",{value:!0})},(()=>{"use strict";var A=Q(5534);function I(I,g,B,Q,C,E,i){try{var o=I[E](i),D=o.value}catch(A){return void B(A)}o.done?g(D):A.resolve(D).then(Q,C)}function g(g){return function(){var B=this,Q=arguments;return new A((function(A,C){var E=g.apply(B,Q);function i(g){I(E,A,C,i,o,"next",g)}function o(g){I(E,A,C,i,o,"throw",g)}i(void 0)}))}}var B,C=Q(2043),E=Q.n(C),i=Q(7878),o=Q.n(i),D=Q(4559),a=Q.n(D),s={},w=!1;function t(A){if(!w){if(B=A.config,self.registerTaskHandler=G,A.config.webWorkerTaskPaths)for(var I=0;I<A.config.webWorkerTaskPaths.length;I++)self.importScripts(A.config.webWorkerTaskPaths[I]);o()(s).forEach((function(A){s[A].initialize(B.taskConfiguration)})),self.postMessage({taskType:"initialize",status:"success",result:{},workerIndex:A.workerIndex}),w=!0}}function G(A){if(s[A.taskType])return console.log(\'attempt to register duplicate task handler "\',A.taskType,\'"\'),!1;s[A.taskType]=A,w&&A.initialize(B.taskConfiguration)}self.onmessage=function(){var A=g(E().mark((function A(I){var g,Q,C,i;return E().wrap((function(A){for(;;)switch(A.prev=A.next){case 0:if(I.data.taskType){A.next=3;break}return console.log(I.data),A.abrupt("return");case 3:if("initialize"!==I.data.taskType){A.next=6;break}return t(I.data),A.abrupt("return");case 6:if("loadWebWorkerTask"!==I.data.taskType){A.next=9;break}return E=I.data,B=E.config,self.importScripts(E.sourcePath),A.abrupt("return");case 9:if(!s[I.data.taskType]){A.next=25;break}return A.prev=10,A.next=13,s[I.data.taskType].handler(I.data);case 13:g=A.sent,Q=g.result,C=g.transferList,self.postMessage({taskType:I.data.taskType,status:"success",result:Q,workerIndex:I.data.workerIndex},C),A.next=23;break;case 19:A.prev=19,A.t0=A.catch(10),console.log(a()(i="task ".concat(I.data.taskType," failed - ")).call(i,A.t0.message),A.t0),self.postMessage({taskType:I.data.taskType,status:"failed",result:A.t0.message,workerIndex:I.data.workerIndex});case 23:A.next=28;break;case 25:console.log("no task handler for ",I.data.taskType),console.log(s),self.postMessage({taskType:I.data.taskType,status:"failed - no task handler registered",workerIndex:I.data.workerIndex});case 28:case"end":return A.stop()}var E}),A,null,[[10,19]])})));return function(I){return A.apply(this,arguments)}}();var h=Q(1246),F=Q.n(h),y=Q(1082);function c(A,I,g){return I in A?y(A,I,{value:g,enumerable:!0,configurable:!0,writable:!0}):A[I]=g,A}var r=Q(2250),N=Q.n(r),R=Q(7552),e=Q.n(R),n=Q(1882),S=Q.n(n),U=Q(7647),k=Q.n(U),J=Q(337),H=Q.n(J),M=Q(2770),L=Q.n(M),Y=Q(4044),K=Q.n(Y),d=Q(7414);function l(A,I){var g=o()(A);if(S()){var B=S()(A);I&&(B=k()(B).call(B,(function(I){return H()(A,I).enumerable}))),g.push.apply(g,B)}return g}function f(A){for(var I=1;I<arguments.length;I++){var g=null!=arguments[I]?arguments[I]:{};I%2?l(Object(g),!0).forEach((function(I){c(A,I,g[I])})):L()?Object.defineProperties(A,L()(g)):l(Object(g)).forEach((function(I){Object.defineProperty(A,I,H()(g,I))}))}return A}var u={codec:void 0,decoder:void 0,decodeConfig:{}};function q(A){if(u.decodeConfig=A,u.codec)return N().resolve();var I=K()({locateFile:function(A){return e()(A).call(A,".wasm")?d:A}});return new(N())((function(A,g){I.then((function(I){u.codec=I,u.decoder=new I.J2KDecoder,A()}),g)}))}function p(){return(p=g(E().mark((function A(I,g){var B,Q,C,i,o,D,s,w,t,G,h,F,y,c,r,N,R,e,n,S,U,k;return E().wrap((function(A){for(;;)switch(A.prev=A.next){case 0:return A.next=2,q();case 2:return o=u.decoder,(D=o.getEncodedBuffer(I.length)).set(I),o.decode(),s=o.getFrameInfo(),w=o.getDecodedBuffer(),new Uint8Array(w.length).set(w),t=a()(B="x: ".concat(o.getImageOffset().x,", y: ")).call(B,o.getImageOffset().y),G=o.getNumDecompositions(),h=o.getNumLayers(),F=["unknown","LRCP","RLCP","RPCL","PCRL","CPRL"][o.getProgressionOrder()+1],y=o.getIsReversible(),c=a()(Q="".concat(o.getBlockDimensions().width," x ")).call(Q,o.getBlockDimensions().height),r=a()(C="".concat(o.getTileSize().width," x ")).call(C,o.getTileSize().height),N=a()(i="".concat(o.getTileOffset().x,", ")).call(i,o.getTileOffset().y),R=o.getColorSpace(),e="".concat(w.length.toLocaleString()," bytes"),n="".concat((w.length/D.length).toFixed(2),":1"),S={columns:s.width,rows:s.height,bitsPerPixel:s.bitsPerSample,signed:s.isSigned,bytesPerPixel:g.bytesPerPixel,componentsPerPixel:s.componentCount},U=b(s,w),k={imageOffset:t,numDecompositions:G,numLayers:h,progessionOrder:F,reversible:y,blockDimensions:c,tileSize:r,tileOffset:N,colorTransform:R,decodedSize:e,compressionRatio:n},A.abrupt("return",f(f(f({},g),{},{pixelData:U,imageInfo:S,encodeOptions:k},k),S));case 25:case"end":return A.stop()}}),A)})))).apply(this,arguments)}function b(A,I){return A.bitsPerSample>8?A.isSigned?new Int16Array(I.buffer,I.byteOffset,I.byteLength/2):new Uint16Array(I.buffer,I.byteOffset,I.byteLength/2):A.isSigned?new Int8Array(I.buffer,I.byteOffset,I.byteLength):new Uint8Array(I.buffer,I.byteOffset,I.byteLength)}const W=function(A,I){return p.apply(this,arguments)};var Z=Q(8327),m=Q.n(Z),x=Q(3240);function T(A,I){var g=o()(A);if(S()){var B=S()(A);I&&(B=k()(B).call(B,(function(I){return H()(A,I).enumerable}))),g.push.apply(g,B)}return g}function v(A){for(var I=1;I<arguments.length;I++){var g=null!=arguments[I]?arguments[I]:{};I%2?T(Object(g),!0).forEach((function(I){c(A,I,g[I])})):L()?Object.defineProperties(A,L()(g)):T(Object(g)).forEach((function(I){Object.defineProperty(A,I,H()(g,I))}))}return A}var X={codec:void 0,decoder:void 0,decodeConfig:{}};function P(A){return"number"==typeof A?X.codec.getExceptionMessage(A):A}function V(A){if(X.decodeConfig=A,X.codec)return N().resolve();var I=m()({locateFile:function(A){return e()(A).call(A,".wasm")?x:A}});return new(N())((function(A,g){I.then((function(I){X.codec=I,X.decoder=new I.JpegLSDecoder,A()}),g)}))}function O(){return(O=g(E().mark((function A(I,g){var B,Q,C,i,o,D,a,s;return E().wrap((function(A){for(;;)switch(A.prev=A.next){case 0:return A.prev=0,A.next=3,V();case 3:return B=X.decoder,B.getEncodedBuffer(I.length).set(I),B.decode(),Q=B.getFrameInfo(),C=B.getInterleaveMode(),i=B.getNearLossless(),o=B.getDecodedBuffer(),D={columns:Q.width,rows:Q.height,bitsPerPixel:Q.bitsPerSample,signed:g.signed,bytesPerPixel:g.bytesPerPixel,componentsPerPixel:Q.componentCount},a=j(Q,o,g.signed),s={nearLossless:i,interleaveMode:C,frameInfo:Q},A.abrupt("return",v(v(v({},g),{},{pixelData:a,imageInfo:D,encodeOptions:s},s),D));case 17:throw A.prev=17,A.t0=A.catch(0),P(A.t0);case 20:case"end":return A.stop()}}),A,null,[[0,17]])})))).apply(this,arguments)}function j(A,I,g){return A.bitsPerSample>8?g?new Int16Array(I.buffer,I.byteOffset,I.byteLength/2):new Uint16Array(I.buffer,I.byteOffset,I.byteLength/2):g?new Int8Array(I.buffer,I.byteOffset,I.byteLength):new Uint8Array(I.buffer,I.byteOffset,I.byteLength)}const z=function(A,I){return O.apply(this,arguments)};const _=function(A){for(var I,g=A[0],B=A[0],Q=A.length,C=1;C<Q;C++)I=A[C],g=Math.min(g,I),B=Math.max(B,I);return{min:g,max:B}};function $(A){var I=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],g=_(A.pixelData),B=!(AA(A.smallestPixelValue)&&AA(A.largestPixelValue));!0!==I||B?(A.smallestPixelValue=g.min,A.largestPixelValue=g.max):(A.smallestPixelValue!==g.min&&console.warn("Image smallestPixelValue tag is incorrect. Rendering performance will suffer considerably."),A.largestPixelValue!==g.max&&console.warn("Image largestPixelValue tag is incorrect. Rendering performance will suffer considerably."))}function AA(A){return"number"==typeof A}var IA=Q(6028),gA=Q.n(IA);function BA(){return(BA=g(E().mark((function A(I,g){var B,Q,C;return E().wrap((function(A){for(;;)switch(A.prev=A.next){case 0:return B=g.buffer,Q=g.byteOffset,C=g.length,16===I.bitsAllocated?(Q%2&&(B=gA()(B).call(B,Q),Q=0),0===I.pixelRepresentation?I.pixelData=new Uint16Array(B,Q,C/2):I.pixelData=new Int16Array(B,Q,C/2)):8===I.bitsAllocated||1===I.bitsAllocated?I.pixelData=g:32===I.bitsAllocated&&(Q%2&&(B=gA()(B).call(B,Q),Q=0),I.pixelData=new Float32Array(B,Q,C/4)),A.abrupt("return",I);case 5:case"end":return A.stop()}}),A)})))).apply(this,arguments)}const QA=function(A,I){return BA.apply(this,arguments)};function CA(A){return(255&A)<<8|A>>8&255}function EA(){return(EA=g(E().mark((function A(I,g){var B,Q,C,i;return E().wrap((function(A){for(;;)switch(A.prev=A.next){case 0:if(16===I.bitsAllocated)for(B=g.buffer,Q=g.byteOffset,C=g.length,Q%2&&(B=gA()(B).call(B,Q),Q=0),0===I.pixelRepresentation?I.pixelData=new Uint16Array(B,Q,C/2):I.pixelData=new Int16Array(B,Q,C/2),i=0;i<I.pixelData.length;i++)I.pixelData[i]=CA(I.pixelData[i]);else 8===I.bitsAllocated&&(I.pixelData=g);return A.abrupt("return",I);case 2:case"end":return A.stop()}}),A)})))).apply(this,arguments)}const iA=function(A,I){return EA.apply(this,arguments)};function oA(){return(oA=g(E().mark((function A(I,g){return E().wrap((function(A){for(;;)switch(A.prev=A.next){case 0:if(8!==I.bitsAllocated){A.next=6;break}if(!I.planarConfiguration){A.next=3;break}return A.abrupt("return",aA(I,g));case 3:return A.abrupt("return",DA(I,g));case 6:if(16!==I.bitsAllocated){A.next=8;break}return A.abrupt("return",sA(I,g));case 8:throw new Error("unsupported pixel format for RLE");case 9:case"end":return A.stop()}}),A)})))).apply(this,arguments)}function DA(A,I){for(var g=I,B=A.rows*A.columns,Q=new ArrayBuffer(B*A.samplesPerPixel),C=new DataView(g.buffer,g.byteOffset),E=new Int8Array(g.buffer,g.byteOffset),i=new Int8Array(Q),o=0,D=C.getInt32(0,!0),a=0;a<D;++a){o=a;var s=C.getInt32(4*(a+1),!0),w=C.getInt32(4*(a+2),!0);0===w&&(w=g.length);for(var t=B*D;s<w;){var G=E[s++];if(G>=0&&G<=127)for(var h=0;h<G+1&&o<t;++h)i[o]=E[s++],o+=A.samplesPerPixel;else if(G<=-1&&G>=-127)for(var F=E[s++],y=0;y<1-G&&o<t;++y)i[o]=F,o+=A.samplesPerPixel}}return A.pixelData=new Uint8Array(Q),A}function aA(A,I){for(var g=I,B=A.rows*A.columns,Q=new ArrayBuffer(B*A.samplesPerPixel),C=new DataView(g.buffer,g.byteOffset),E=new Int8Array(g.buffer,g.byteOffset),i=new Int8Array(Q),o=0,D=C.getInt32(0,!0),a=0;a<D;++a){o=a*B;var s=C.getInt32(4*(a+1),!0),w=C.getInt32(4*(a+2),!0);0===w&&(w=g.length);for(var t=B*D;s<w;){var G=E[s++];if(G>=0&&G<=127)for(var h=0;h<G+1&&o<t;++h)i[o]=E[s++],o++;else if(G<=-1&&G>=-127)for(var F=E[s++],y=0;y<1-G&&o<t;++y)i[o]=F,o++}}return A.pixelData=new Uint8Array(Q),A}function sA(A,I){for(var g=I,B=A.rows*A.columns,Q=new ArrayBuffer(B*A.samplesPerPixel*2),C=new DataView(g.buffer,g.byteOffset),E=new Int8Array(g.buffer,g.byteOffset),i=new Int8Array(Q),o=C.getInt32(0,!0),D=0;D<o;++D){var a=0,s=0===D?1:0,w=C.getInt32(4*(D+1),!0),t=C.getInt32(4*(D+2),!0);for(0===t&&(t=g.length);w<t;){var G=E[w++];if(G>=0&&G<=127)for(var h=0;h<G+1&&a<B;++h)i[2*a+s]=E[w++],a++;else if(G<=-1&&G>=-127)for(var F=E[w++],y=0;y<1-G&&a<B;++y)i[2*a+s]=F,a++}}return 0===A.pixelRepresentation?A.pixelData=new Uint16Array(Q):A.pixelData=new Int16Array(Q),A}const wA=function(A,I){return oA.apply(this,arguments)};var tA=Q(9400),GA=Q.n(tA),hA=Q(12);function FA(A,I){var g=o()(A);if(S()){var B=S()(A);I&&(B=k()(B).call(B,(function(I){return H()(A,I).enumerable}))),g.push.apply(g,B)}return g}function yA(A){for(var I=1;I<arguments.length;I++){var g=null!=arguments[I]?arguments[I]:{};I%2?FA(Object(g),!0).forEach((function(I){c(A,I,g[I])})):L()?Object.defineProperties(A,L()(g)):FA(Object(g)).forEach((function(I){Object.defineProperty(A,I,H()(g,I))}))}return A}var cA={codec:void 0,decoder:void 0};function rA(){if(cA.codec)return N().resolve();var A=GA()({locateFile:function(A){return e()(A).call(A,".wasm")?hA:A}});return new(N())((function(I,g){A.then((function(A){cA.codec=A,cA.decoder=new A.JPEGDecoder,I()}),g)}))}function NA(){return(NA=g(E().mark((function A(I,g){var B,Q,C,i,o,D;return E().wrap((function(A){for(;;)switch(A.prev=A.next){case 0:return A.next=2,rA();case 2:return B=cA.decoder,B.getEncodedBuffer(I.length).set(I),B.decode(),Q=B.getFrameInfo(),C=B.getDecodedBuffer(),i={columns:Q.width,rows:Q.height,bitsPerPixel:Q.bitsPerSample,signed:g.signed,bytesPerPixel:g.bytesPerPixel,componentsPerPixel:Q.componentCount},o=RA(Q,C),D={frameInfo:Q},A.abrupt("return",yA(yA(yA({},g),{},{pixelData:o,imageInfo:i,encodeOptions:D},D),i));case 12:case"end":return A.stop()}}),A)})))).apply(this,arguments)}function RA(A,I){return A.isSigned?new Int8Array(I.buffer,I.byteOffset,I.byteLength):new Uint8Array(I.buffer,I.byteOffset,I.byteLength)}const eA=function(A,I){return NA.apply(this,arguments)};var nA={JpegImage:void 0,decodeConfig:{}};function SA(A){return nA.decodeConfig=A,nA.JpegImage?N().resolve():new(N())((function(A,I){Promise.resolve().then(Q.t.bind(Q,1888,23)).then((function(I){var g=I.JpegImage;nA.JpegImage=g,A()}),I)}))}function UA(){return(UA=g(E().mark((function A(I,g){var B;return E().wrap((function(A){for(;;)switch(A.prev=A.next){case 0:return A.next=2,SA();case 2:if(void 0!==nA.JpegImage){A.next=4;break}throw new Error("No JPEG Baseline decoder loaded");case 4:if((B=new nA.JpegImage).parse(g),B.colorTransform=!1,8!==I.bitsAllocated){A.next=12;break}return I.pixelData=B.getData(I.columns,I.rows),A.abrupt("return",I);case 12:if(16!==I.bitsAllocated){A.next=15;break}return I.pixelData=B.getData16(I.columns,I.rows),A.abrupt("return",I);case 15:case"end":return A.stop()}}),A)})))).apply(this,arguments)}const kA=function(A,I){return UA.apply(this,arguments)};var JA={jpeg:void 0,decodeConfig:{}};function HA(A){return JA.decodeConfig=A,JA.jpeg?N().resolve():new(N())((function(A,I){Promise.resolve().then(Q.t.bind(Q,8726,23)).then((function(I){JA.jpeg=I,A()}),I)}))}function MA(){return(MA=g(E().mark((function A(I,g){var B,Q,C,i;return E().wrap((function(A){for(;;)switch(A.prev=A.next){case 0:return A.next=2,HA();case 2:if(void 0!==JA.jpeg&&void 0!==JA.jpeg.lossless&&void 0!==JA.jpeg.lossless.Decoder){A.next=4;break}throw new Error("No JPEG Lossless decoder loaded");case 4:if(B=I.bitsAllocated<=8?1:2,Q=g.buffer,C=new JA.jpeg.lossless.Decoder,i=C.decode(Q,g.byteOffset,g.length,B),0!==I.pixelRepresentation){A.next=14;break}if(16!==I.bitsAllocated){A.next=12;break}return I.pixelData=new Uint16Array(i.buffer),A.abrupt("return",I);case 12:return I.pixelData=new Uint8Array(i.buffer),A.abrupt("return",I);case 14:return I.pixelData=new Int16Array(i.buffer),A.abrupt("return",I);case 16:case"end":return A.stop()}}),A)})))).apply(this,arguments)}const LA=function(A,I){return MA.apply(this,arguments)};var YA=Q(6396),KA=Q.n(YA),dA=Q(8081);function lA(A,I){var g=o()(A);if(S()){var B=S()(A);I&&(B=k()(B).call(B,(function(I){return H()(A,I).enumerable}))),g.push.apply(g,B)}return g}function fA(A){for(var I=1;I<arguments.length;I++){var g=null!=arguments[I]?arguments[I]:{};I%2?lA(Object(g),!0).forEach((function(I){c(A,I,g[I])})):L()?Object.defineProperties(A,L()(g)):lA(Object(g)).forEach((function(I){Object.defineProperty(A,I,H()(g,I))}))}return A}var uA={codec:void 0,decoder:void 0,decodeConfig:{}};function qA(A){if(uA.decodeConfig=A,uA.codec)return N().resolve();var I=KA()({locateFile:function(A){return e()(A).call(A,".wasm")?dA:A}});return new(N())((function(A,g){I.then((function(I){uA.codec=I,uA.decoder=new I.HTJ2KDecoder,A()}),g)}))}function pA(){return(pA=g(E().mark((function A(I,g){var B,Q,C,i,o,D,s,w,t,G,h,F,y,c,r,N,R,e,n,S,U,k,J,H,M,L;return E().wrap((function(A){for(;;)switch(A.prev=A.next){case 0:return A.next=2,qA();case 2:return o=uA.decoder,(D=o.getEncodedBuffer(I.length)).set(I),o.decode(),s=o.getFrameInfo(),w=o.getDecodedBuffer(),new Uint8Array(w.length).set(w),t=a()(B="x: ".concat(o.getImageOffset().x,", y: ")).call(B,o.getImageOffset().y),G=o.getNumDecompositions(),h=o.getNumLayers(),F=["unknown","LRCP","RLCP","RPCL","PCRL","CPRL"][o.getProgressionOrder()+1],y=o.getIsReversible(),c=a()(Q="".concat(o.getBlockDimensions().width," x ")).call(Q,o.getBlockDimensions().height),r=a()(C="".concat(o.getTileSize().width," x ")).call(C,o.getTileSize().height),N=a()(i="".concat(o.getTileOffset().x,", ")).call(i,o.getTileOffset().y),R="".concat(w.length.toLocaleString()," bytes"),e="".concat((w.length/D.length).toFixed(2),":1"),n={columns:s.width,rows:s.height,bitsPerPixel:s.bitsPerSample,signed:s.isSigned,bytesPerPixel:g.bytesPerPixel,componentsPerPixel:s.componentCount},S=bA(s,w),k=(U=S).buffer,J=U.byteOffset,H=U.byteLength,M=gA()(k).call(k,J,J+H),S=new S.constructor(M),L={imageOffset:t,numDecompositions:G,numLayers:h,progessionOrder:F,reversible:y,blockDimensions:c,tileSize:r,tileOffset:N,decodedSize:R,compressionRatio:e},A.abrupt("return",fA(fA(fA({},g),{},{pixelData:S,imageInfo:n,encodeOptions:L},L),n));case 27:case"end":return A.stop()}}),A)})))).apply(this,arguments)}function bA(A,I){return A.bitsPerSample>8?A.isSigned?new Int16Array(I.buffer,I.byteOffset,I.byteLength/2):new Uint16Array(I.buffer,I.byteOffset,I.byteLength/2):A.isSigned?new Int8Array(I.buffer,I.byteOffset,I.byteLength):new Uint8Array(I.buffer,I.byteOffset,I.byteLength)}const WA=function(A,I){return pA.apply(this,arguments)};function ZA(A,I){var g=o()(A);if(S()){var B=S()(A);I&&(B=k()(B).call(B,(function(I){return H()(A,I).enumerable}))),g.push.apply(g,B)}return g}function mA(A){for(var I=1;I<arguments.length;I++){var g=null!=arguments[I]?arguments[I]:{};I%2?ZA(Object(g),!0).forEach((function(I){c(A,I,g[I])})):L()?Object.defineProperties(A,L()(g)):ZA(Object(g)).forEach((function(I){Object.defineProperty(A,I,H()(g,I))}))}return A}function xA(){return(xA=g(E().mark((function A(I,g,B,Q,C,i){var o,D,a,s,w;return E().wrap((function(A){for(;;)switch(A.prev=A.next){case 0:o=(new Date).getTime(),D=null,A.t0=g,A.next="1.2.840.10008.1.2"===A.t0||"1.2.840.10008.1.2.1"===A.t0?5:"1.2.840.10008.1.2.2"===A.t0?7:"1.2.840.10008.1.2.1.99"===A.t0?9:"1.2.840.10008.1.2.5"===A.t0?11:"1.2.840.10008.1.2.4.50"===A.t0?13:"1.2.840.10008.1.2.4.51"===A.t0?16:"1.2.840.10008.1.2.4.57"===A.t0?18:"1.2.840.10008.1.2.4.70"===A.t0?20:"1.2.840.10008.1.2.4.80"===A.t0?22:"1.2.840.10008.1.2.4.81"===A.t0?25:"1.2.840.10008.1.2.4.90"===A.t0?28:"1.2.840.10008.1.2.4.91"===A.t0?31:"3.2.840.10008.1.2.4.96"===A.t0?34:37;break;case 5:return D=QA(I,B),A.abrupt("break",38);case 7:return D=iA(I,B),A.abrupt("break",38);case 9:return D=QA(I,B),A.abrupt("break",38);case 11:return D=wA(I,B),A.abrupt("break",38);case 13:return a=mA({},I),D=eA(B,a),A.abrupt("break",38);case 16:return D=kA(I,B),A.abrupt("break",38);case 18:case 20:return D=LA(I,B),A.abrupt("break",38);case 22:return a=mA({signed:1===I.pixelRepresentation,bytesPerPixel:I.bitsAllocated<=8?1:2},I),D=z(B,a),A.abrupt("break",38);case 25:return a=mA({signed:!1,bytesPerPixel:I.bitsAllocated<=8?1:2},I),D=z(B,a),A.abrupt("break",38);case 28:case 31:return a=mA({},I),D=W(B,a),A.abrupt("break",38);case 34:return a=mA({},I),D=WA(B,a),A.abrupt("break",38);case 37:throw new Error("no decoder for transfer syntax ".concat(g));case 38:if(D){A.next=40;break}throw new Error("decodePromise not defined");case 40:return A.next=42,D;case 42:return s=A.sent,w=TA(s,C,o,Q),null==i||i(w),A.abrupt("return",w);case 46:case"end":return A.stop()}}),A)})))).apply(this,arguments)}function TA(A,I,g,B){var Q=(B||{}).use16BitDataType,C=void 0!==A.pixelRepresentation&&1===A.pixelRepresentation,E=C&&void 0!==A.bitsStored?32-A.bitsStored:void 0;if(C&&void 0!==E)for(var i=0;i<A.pixelData.length;i++)A.pixelData[i]=A.pixelData[i]<<E>>E;var o=A.pixelData;if(A.pixelDataLength=A.pixelData.length,I.targetBuffer){var D,s,w=I.targetBuffer;D=w.offset,s=w.length;var t,G=I.targetBuffer,h=G.arrayBuffer,F=G.type;switch(null==D&&(D=0),null==s&&0!==D?s=A.pixelDataLength-D:null==s&&(s=A.pixelDataLength),F){case"Uint8Array":t=Uint8Array;break;case Q&&"Uint16Array":t=Uint16Array;break;case Q&&"Int16Array":t=Int16Array;break;case"Float32Array":t=Float32Array;break;default:throw new Error("target array for image does not have a valid type.")}var y,c,r=A.pixelData;if(s!==r.length)throw new Error(a()(y="target array for image does not have the same length (".concat(s,") as the decoded image length (")).call(y,r.length,")."));(c=h?new t(h,D,s):new t(s)).set(r,0),o=c}if(I.preScale.enabled){var N=I.preScale.scalingParameters;if(!N)throw new Error("options.preScale.scalingParameters must be defined if preScale.enabled is true, and scalingParameters cannot be derived from the metadata providers.");var R=N.rescaleSlope,e=N.rescaleIntercept;"number"==typeof R&&"number"==typeof e&&function(A,I){var g=A.length,B=I.rescaleSlope,Q=I.rescaleIntercept,C=I.suvbw;if("PT"===I.modality&&"number"==typeof C)for(var E=0;E<g;E++)A[E]=C*(A[E]*B+Q);else for(var i=0;i<g;i++)A[i]=A[i]*B+Q;return!0}(o,N)&&(A.preScale=mA(mA({},I.preScale),{},{scaled:!0}))}I.targetBuffer&&(!I.targetBuffer.arrayBuffer||I.targetBuffer.arrayBuffer instanceof ArrayBuffer)&&(A.pixelData=o);var n=(new Date).getTime();return A.decodeTimeInMS=n-g,A}const vA=function(A,I,g,B,Q,C){return xA.apply(this,arguments)};var XA;function PA(A){A.decodeTask.initializeCodecsOnStartup&&(q(A.decodeTask),V(A.decodeTask))}function VA(){return(VA=g(E().mark((function A(I,g){var B,Q,C;return E().wrap((function(A){for(;;)switch(A.prev=A.next){case 0:return PA(XA),B=XA&&XA.decodeTask&&XA.decodeTask.strict,Q=new Uint8Array(I.data.pixelData),A.next=5,vA(I.data.imageFrame,I.data.transferSyntax,Q,F()(XA.decodeTask,I.data.decodeConfig),I.data.options);case 5:if((C=A.sent).pixelData){A.next=8;break}throw new Error("decodeTask: imageFrame.pixelData is undefined after decoding");case 8:return $(C,B),C.pixelData=C.pixelData.buffer,null==g||g(C,[C.pixelData]),A.abrupt("return",{result:C,transferList:[C.pixelData]});case 12:case"end":return A.stop()}}),A)})))).apply(this,arguments)}G({taskType:"decodeTask",handler:function(A,I){return VA.apply(this,arguments)},initialize:function(A){XA=A,PA(A)}})})()})();\n//# sourceMappingURL=index.worker.bundle.min.worker.js.map',"Worker",void 0,g.p+"index.worker.bundle.min.worker.js")}var ZA,TA=0,PA=[],XA=[],VA=RA(),OA={maxWebWorkers:navigator.hardwareConcurrency||1,startWebWorkersOnDemand:!0,webWorkerTaskPaths:[],taskConfiguration:{decodeTask:{initializeCodecsOnStartup:!1,strict:VA.strict}}},jA={maxWebWorkers:0,numWebWorkers:0,numTasksQueued:0,numTasksExecuting:0,numTasksCompleted:0,totalTaskTimeInMS:0,totalTimeDelayedInMS:0};function zA(){if(PA.length){for(var A=0;A<XA.length;A++)if("ready"===XA[A].status){XA[A].status="busy";var I=PA.shift();I.start=(new Date).getTime();var g=(new Date).getTime();return jA.totalTimeDelayedInMS+=g-I.added,XA[A].task=I,XA[A].worker.postMessage({taskType:I.taskType,workerIndex:A,data:I.data},I.transferList),void jA.numTasksExecuting++}XA.length<ZA.maxWebWorkers&&$A()}}function _A(A){if("initialize"===A.data.taskType)XA[A.data.workerIndex].status="ready",zA();else{var I=XA[A.data.workerIndex].task.start,g="success"===A.data.status?"resolve":"reject";try{XA[A.data.workerIndex].task.deferred[g](A.data.result)}catch(A){console.warn("Caught error delivering response",A)}XA[A.data.workerIndex].task=void 0,jA.numTasksExecuting--,XA[A.data.workerIndex].status="ready",jA.numTasksCompleted++;var B=(new Date).getTime();jA.totalTaskTimeInMS+=B-I,zA()}}function $A(){if(!(XA.length>=ZA.maxWebWorkers)){var A=new vA;XA.push({worker:A,status:"initializing"}),A.addEventListener("message",_A),A.postMessage({taskType:"initialize",workerIndex:XA.length-1,config:ZA})}}function AI(A){if((ZA=A=A||OA).maxWebWorkers=ZA.maxWebWorkers||navigator.hardwareConcurrency||1,!ZA.startWebWorkersOnDemand)for(var I=0;I<ZA.maxWebWorkers;I++)$A()}const II={initialize:AI,loadWebWorkerTask:function(A,I){ZA.webWorkerTaskPaths.push(A),I&&(ZA.taskConfiguration=X()(ZA.taskConfiguration,I));for(var g=0;g<XA.length;g++)XA[g].worker.postMessage({taskType:"loadWebWorkerTask",workerIndex:XA.length-1,sourcePath:A,config:ZA})},addTask:function(A,I){var g=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,B=arguments.length>3?arguments[3]:void 0;ZA||AI();var Q,C={},E=new(hA())((function(A,I){C={resolve:A,reject:I}}));for(Q=0;Q<PA.length&&!(PA[Q].priority<g);Q++);var i=TA++;return mA()(PA).call(PA,Q,0,{taskId:i,taskType:A,status:"ready",added:(new Date).getTime(),data:I,deferred:C,priority:g,transferList:B}),zA(),{taskId:i,promise:E}},getStatistics:function(){return jA.maxWebWorkers=ZA.maxWebWorkers,jA.numWebWorkers=XA.length,jA.numTasksQueued=PA.length,jA},setTaskPriority:function(A){for(var I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,g=0;g<PA.length;g++)if(PA[g].taskId===A){var B=mA()(PA).call(PA,g,1)[0];for(B.priority=I,g=0;g<PA.length&&!(PA[g].priority<I);g++);return mA()(PA).call(PA,g,0,B),!0}return!1},cancelTask:function(A,I){for(var g=0;g<PA.length;g++){if(PA[g].taskId===A)return mA()(PA).call(PA,g,1).deferred.reject(I),!0}return!1},webWorkers:XA,terminate:function(){for(var A=0;A<XA.length;A++)XA[A].worker.terminate();XA.length=0,ZA=void 0}};const gI=function(A){for(var I,g=A[0],B=A[0],Q=A.length,C=1;C<Q;C++)I=A[C],g=Math.min(g,I),B=Math.max(B,I);return{min:g,max:B}};function BI(A){return function(A){var I;try{return decodeURIComponent(escape(A))}catch(g){if((I=g)instanceof URIError)return A;throw I}}(String.fromCharCode.apply(null,IA()(Array.prototype).apply(new Uint8Array(A))))}const QI=function(A,I,g){var B=(new Date).getTime(),Q=new Blob([I],{type:"image/jpeg"});return new(hA())((function(I,C){var E=new FileReader;void 0===E.readAsBinaryString?E.readAsArrayBuffer(Q):E.readAsBinaryString(Q),E.onload=function(){var Q=new Image;Q.onload=function(){g.height=Q.height,g.width=Q.width,A.rows=Q.height,A.columns=Q.width;var C=g.getContext("2d");C.drawImage(this,0,0);var E=C.getImageData(0,0,Q.width,Q.height),i=(new Date).getTime();A.pixelData=E.data,A.imageData=E,A.decodeTimeInMS=i-B;var o=gI(A.pixelData);A.smallestPixelValue=o.min,A.largestPixelValue=o.max,I(A)},Q.onerror=function(A){C(A)},void 0===E.readAsBinaryString?Q.src="data:image/jpeg;base64,".concat(window.btoa(BI(E.result))):Q.src="data:image/jpeg;base64,".concat(window.btoa(E.result))},E.onerror=function(A){C(A)}}))};var CI=g(5613);function EI(A,I,g,B,Q){var C=B.priority||void 0,E=B.transferPixelData?[g.buffer]:void 0;return II.addTask("decodeTask",{imageFrame:A,transferSyntax:I,pixelData:g,options:B,decodeConfig:Q},C,E).promise}window.pako={inflateRaw:CI.Hq};const iI=function(A,I,g,B){var Q=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},C=arguments.length>5?arguments[5]:void 0;switch(I){case"1.2.840.10008.1.2":case"1.2.840.10008.1.2.1":case"1.2.840.10008.1.2.2":case"1.2.840.10008.1.2.1.99":case"1.2.840.10008.1.2.5":return EI(A,I,g,Q,C);case"1.2.840.10008.1.2.4.50":return 8!==A.bitsAllocated||3!==A.samplesPerPixel&&4!==A.samplesPerPixel?EI(A,I,g,Q,C):QI(A,g,B);case"1.2.840.10008.1.2.4.51":case"1.2.840.10008.1.2.4.57":case"1.2.840.10008.1.2.4.70":case"1.2.840.10008.1.2.4.80":case"1.2.840.10008.1.2.4.81":case"1.2.840.10008.1.2.4.90":case"1.2.840.10008.1.2.4.91":case"3.2.840.10008.1.2.4.96":return EI(A,I,g,Q,C)}return hA().reject(new Error("No decoder for transfer syntax ".concat(I)))};function oI(A){return"RGB"===A||"PALETTE COLOR"===A||"YBR_FULL"===A||"YBR_FULL_422"===A||"YBR_PARTIAL_422"===A||"YBR_PARTIAL_420"===A||"YBR_RCT"===A||"YBR_ICT"===A}function tI(g,B,Q){0===g.planarConfiguration?A(g.pixelData,B,Q):I(g.pixelData,B,Q)}function aI(A,I,g){if("RGB"===A.photometricInterpretation)tI(A,I,g);else if("YBR_RCT"===A.photometricInterpretation)tI(A,I,g);else if("YBR_ICT"===A.photometricInterpretation)tI(A,I,g);else if("PALETTE COLOR"===A.photometricInterpretation)i(A,I,g);else if("YBR_FULL_422"===A.photometricInterpretation)!function(A,I,g){if(void 0===A)throw new Error("decodeRGB: ybrBuffer must not be undefined");if(A.length%2!=0)throw new Error("decodeRGB: ybrBuffer length must be divisble by 3");var B=A.length/2,Q=0,C=0;if(g)for(var E=0;E<B;E+=2){var i=A[Q++],o=A[Q++],t=A[Q++],a=A[Q++];I[C++]=i+1.402*(a-128),I[C++]=i-.34414*(t-128)-.71414*(a-128),I[C++]=i+1.772*(t-128),I[C++]=255,I[C++]=o+1.402*(a-128),I[C++]=o-.34414*(t-128)-.71414*(a-128),I[C++]=o+1.772*(t-128),I[C++]=255}else for(var D=0;D<B;D+=2){var s=A[Q++],r=A[Q++],e=A[Q++],w=A[Q++];I[C++]=s+1.402*(w-128),I[C++]=s-.34414*(e-128)-.71414*(w-128),I[C++]=s+1.772*(e-128),I[C++]=r+1.402*(w-128),I[C++]=r-.34414*(e-128)-.71414*(w-128),I[C++]=r+1.772*(e-128)}}(A.pixelData,I,g);else{if("YBR_FULL"!==A.photometricInterpretation)throw new Error("No color space conversion for photometric interpretation ".concat(A.photometricInterpretation));!function(A,I,g){0===A.planarConfiguration?Q(A.pixelData,I,g):C(A.pixelData,I,g)}(A,I,g)}}const DI=function(A,I){if(I=I||A.transferSyntax,8===A.bitsAllocated&&"1.2.840.10008.1.2.4.50"===I&&(3===A.samplesPerPixel||4===A.samplesPerPixel))return!0};function sI(A,I){var g=GA()(A);if(YA()){var B=YA()(A);I&&(B=x()(B).call(B,(function(I){return dA()(A,I).enumerable}))),g.push.apply(g,B)}return g}function rI(A){for(var I=1;I<arguments.length;I++){var g=null!=arguments[I]?arguments[I]:{};I%2?sI(Object(g),!0).forEach((function(I){pA(A,I,g[I])})):fA()?Object.defineProperties(A,fA()(g)):sI(Object(g)).forEach((function(I){Object.defineProperty(A,I,dA()(g,I))}))}return A}function eI(A,I){var g=A.get("modalityLutModule",I)||{},B=(A.get("generalSeriesModule",I)||{}).modality,Q={rescaleSlope:g.rescaleSlope,rescaleIntercept:g.rescaleIntercept,modality:B},C=A.get("scalingModule",I)||{};return rI(rI({},Q),"PT"===B&&{suvbw:C.suvbw})}function wI(A,I){var g=GA()(A);if(YA()){var B=YA()(A);I&&(B=x()(B).call(B,(function(I){return dA()(A,I).enumerable}))),g.push.apply(g,B)}return g}function nI(A){for(var I=1;I<arguments.length;I++){var g=null!=arguments[I]?arguments[I]:{};I%2?wI(Object(g),!0).forEach((function(I){pA(A,I,g[I])})):fA()?Object.defineProperties(A,fA()(g)):wI(Object(g)).forEach((function(I){Object.defineProperty(A,I,dA()(g,I))}))}return A}var cI="";function hI(A){return"1.2.840.10008.5.1.4.1.1.12.1"!==A&&"1.2.840.10008.5.1.4.1.1.12.2.1"!==A}function yI(A){for(var I=gI(A),g=Math.abs(I.max-I.min)/65535,B=I.min,Q=A.length,C=new Uint16Array(Q),E=65535,i=0,o=0;o<Q;o++){var t=Math.floor((A[o]-B)/g);C[o]=t,E=Math.min(E,t),i=Math.max(i,t)}return{min:E,max:i,intPixelData:C,slope:g,intercept:B}}function GI(A,I){var g=null==I?void 0:I.scaled,B=null==I?void 0:I.scalingParameters,Q=!1;if(g&&B){var C=(null==B?void 0:B.rescaleSlope)||1,E=(null==B?void 0:B.rescaleIntercep)||0;Q=((null==B?void 0:B.suvbw)||1)*(A.smallestPixelValue*C+E)<0}32===A.bitsAllocated?A.pixelData=new Float32Array(A.pixelData):16===A.bitsAllocated?0!==A.pixelRepresentation||Q?A.pixelData=new Int16Array(A.pixelData):A.pixelData=new Uint16Array(A.pixelData):A.pixelData=new Uint8Array(A.pixelData)}function FI(A,I){for(var g=A.length/4,B=0,Q=0,C=0;C<g;C++)I[Q++]=A[B++],I[Q++]=A[B++],I[Q++]=A[B++],B++;return I}const NI=function(A,I,g){var B=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},Q=!0;if(void 0!==B.useRGBA&&(Q=B.useRGBA),B.preScale={enabled:!(!B.preScale||void 0===B.preScale.enabled)&&B.preScale.enabled},!I||!I.length)return hA().reject(new Error("The file does not contain image data."));var C=LI.cornerstone,E=document.createElement("canvas"),i=bA(A);if(B.preScale.enabled){var o=eI(C.metaData,A);o&&(B.preScale=nI(nI({},B.preScale),{},{scalingParameters:o}))}var t=RA(),a=t.decodeConfig,D=iI(i,g,I,E,B,a),s=a.convertFloatPixelDataToInt,r=a.use16BitDataType;return new(hA())((function(I,i){D.then((function(i){if(B.skipCreateImage)return I(i);var o=!1;if(B.targetBuffer){var t,a,D=B.targetBuffer;t=D.offset,a=D.length;var e,w,n=B.targetBuffer,c=n.arrayBuffer,h=n.type;switch(null==a&&(a=i.pixelDataLength),null==t&&(t=0),h){case"Uint8Array":e=Uint8Array;break;case r&&"Uint16Array":e=Uint16Array;break;case r&&"Int16Array":e=Int16Array;break;case"Float32Array":e=Float32Array;break;default:throw new Error("target array for image does not have a valid type.")}if(a!==i.pixelDataLength)throw new Error("target array for image does not have the same length as the decoded image length.");w=c?new e(c,t,a):new e(i.pixelData),i.pixelData=w,o=!0}o||GI(i,i.preScale);var y=C.metaData.get("imagePlaneModule",A)||{},G=C.metaData.get("voiLutModule",A)||{},F=C.metaData.get("modalityLutModule",A)||{},N=C.metaData.get("sopCommonModule",A)||{},R=oI(i.photometricInterpretation);if(R){if(Q){if(!DI(i,g)){E.height=i.rows,E.width=i.columns;var S=E.getContext("2d").createImageData(i.columns,i.rows);aI(i,S.data,Q),i.imageData=S,i.pixelData=S.data}}else if(DI(i,g)){var k=new Uint8ClampedArray(i.pixelData.length/4*3);i.pixelData=FI(i.pixelData,k)}else if("PALETTE COLOR"===i.photometricInterpretation){E.height=i.rows,E.width=i.columns;var U=E.getContext("2d").createImageData(i.columns,i.rows);aI(i,U.data,!0);var J=new U.data.constructor(U.data.length/4*3);i.pixelData=FI(U.data,J)}var M=gI(i.pixelData);i.smallestPixelValue=M.min,i.largestPixelValue=M.max}var H={imageId:A,color:R,columnPixelSpacing:y.columnPixelSpacing,columns:i.columns,height:i.rows,preScale:i.preScale,intercept:F.rescaleIntercept?F.rescaleIntercept:0,slope:F.rescaleSlope?F.rescaleSlope:1,invert:"MONOCHROME1"===i.photometricInterpretation,minPixelValue:i.smallestPixelValue,maxPixelValue:i.largestPixelValue,rowPixelSpacing:y.rowPixelSpacing,rows:i.rows,sizeInBytes:i.pixelData.byteLength,width:i.columns,windowCenter:G.windowCenter?G.windowCenter[0]:void 0,windowWidth:G.windowWidth?G.windowWidth[0]:void 0,voiLUTFunction:G.voiLUTFunction?G.voiLUTFunction:void 0,decodeTimeInMS:i.decodeTimeInMS,floatPixelData:void 0,imageFrame:i,rgba:R&&Q};if(i.pixelData instanceof Float32Array&&s){var L=i.pixelData,Y=yI(L);H.minPixelValue=Y.min,H.maxPixelValue=Y.max,H.slope=Y.slope,H.intercept=Y.intercept,H.floatPixelData=L,H.getPixelData=function(){return Y.intPixelData}}else H.getPixelData=function(){return i.pixelData};if(H.color&&(H.getCanvas=function(){return cI===A||(E.height=H.rows,E.width=H.columns,E.getContext("2d").putImageData(i.imageData,0,0),cI=A),E}),F.modalityLUTSequence&&F.modalityLUTSequence.length>0&&hI(N.sopClassUID)&&(H.modalityLUT=F.modalityLUTSequence[0]),G.voiLUTSequence&&G.voiLUTSequence.length>0&&(H.voiLUT=G.voiLUTSequence[0]),H.color&&(H.windowWidth=255,H.windowCenter=127),void 0===H.windowCenter||void 0===H.windowWidth){var l=H.maxPixelValue*H.slope+H.intercept,d=H.minPixelValue*H.slope+H.intercept;H.windowWidth=l-d,H.windowCenter=(l+d)/2}I(H)}),i)}))};function RI(A){var I="1.2.840.10008.1.2";if(!A)return I;var g=A.split(";"),B={};g.forEach((function(A){var I,g,Q=A.split("=");if(2===Q.length){var C=nA()(I=Q[1]).call(I).replace(/"/g,"");B[nA()(g=Q[0]).call(g)]=C}}));var Q={"image/jpeg":"1.2.840.10008.1.2.4.50","image/x-dicom-rle":"1.2.840.10008.1.2.5","image/x-jls":"1.2.840.10008.1.2.4.80","image/jls":"1.2.840.10008.1.2.4.80","image/jll":"1.2.840.10008.1.2.4.70","image/jp2":"1.2.840.10008.1.2.4.90","image/jpx":"1.2.840.10008.1.2.4.92","image/jphc":"3.2.840.10008.1.2.4.96","image/jxl":"1.2.840.10008.1.2.4.140"};return B["transfer-syntax"]?B["transfer-syntax"]:A&&!GA()(B).length&&Q[A]?Q[A]:B.type&&Q[B.type]?Q[B.type]:Q[A]?Q[A]:I}function SI(){return LI.cornerstone.imageRetrievalPoolManager}const kI=function(A){var I=this,g=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},B=SI(),Q=(new Date).getTime(),C=new(hA())((function(C,E){var i=g.requestType||"interaction",o=g.additionalDetails||{imageId:A},t=void 0===g.priority?5:g.priority,a=g.addToBeginning||!1,D=A.substring(7);B.addRequest(function(A,I,B){return HA(A,I,B).then((function(A){var B=RI(A.contentType),i=A.imageFrame.pixelData;NI(I,i,B,g).then((function(A){var I=(new Date).getTime();A.loadTimeInMS=I-Q,C(A)}),E)}),E).catch((function(A){E(A)}))}.bind(I,D,A,"multipart/related; type=application/octet-stream; transfer-syntax=*"),i,o,t,a)}));return{promise:C,cancelFn:void 0}};const UI={metaData:{getNumberString:G,getNumberValue:F,getNumberValues:N,getValue:y,metaDataProvider:sA},findIndexOfString:eA,getPixelData:HA,loadImage:kI,metaDataManager:EA,register:function(A){A.registerImageLoader("wadors",kI),A.metaData.addProvider(sA)}};const JI=function(A){UI.register(A),Jg.register(A)};var MI,HI;const LI={set cornerstone(A){JI(MI=A)},get cornerstone(){if(!MI){if(!window||!window.cornerstone)throw new Error("cornerstoneWADOImageLoader requires a copy of Cornerstone to work properly. Please add cornerstoneWADOImageLoader.external.cornerstone = cornerstone; to your application.");MI=window.cornerstone,JI(MI)}return MI},set dicomParser(A){HI=A},get dicomParser(){if(!HI){if(!window||!window.dicomParser)throw new Error("cornerstoneWADOImageLoader requires a copy of dicomParser to work properly. Please add cornerstoneWADOImageLoader.external.dicomParser = dicomParser; to your application.");HI=window.dicomParser}return HI}};const YI=function(A){var I,g=A.indexOf(":"),B=A.substring(g+1),Q=B.indexOf("frame=");if(-1!==Q){var C=B.substr(Q+6);I=parseInt(C,10),B=B.substr(0,Q-1)}return{scheme:A.substr(0,g),url:B,frame:I}};var lI=g(5534);function dI(A,I,g,B,Q,C,E){try{var i=A[C](E),o=i.value}catch(A){return void g(A)}i.done?I(o):lI.resolve(o).then(B,Q)}function KI(A){return function(){var I=this,g=arguments;return new lI((function(B,Q){var C=A.apply(I,g);function E(A){dI(C,B,Q,E,i,"next",A)}function i(A){dI(C,B,Q,E,i,"throw",A)}E(void 0)}))}}var fI=g(2043),uI=g.n(fI),pI=g(9387),bI=g.n(pI),qI=["elements"],mI=["x52009230","x52009229"];function xI(A,I){var g=GA()(A);if(YA()){var B=YA()(A);I&&(B=x()(B).call(B,(function(I){return dA()(A,I).enumerable}))),g.push.apply(g,B)}return g}function WI(A){for(var I=1;I<arguments.length;I++){var g=null!=arguments[I]?arguments[I]:{};I%2?xI(Object(g),!0).forEach((function(I){pA(A,I,g[I])})):fA()?Object.defineProperties(A,fA()(g)):xI(Object(g)).forEach((function(I){Object.defineProperty(A,I,dA()(g,I))}))}return A}function vI(A,I,g){var B,Q,C={};v()(B=I?T()(I.items[0].dataSet.elements):[]).call(B,(function(A){return C[A.tag]=A}));var E={};return v()(Q=A?T()(A.items[g-1].dataSet.elements):[]).call(Q,(function(A){return E[A.tag]=A})),{shared:C,perFrame:E}}function ZI(A){if(A){var I=A.elements,g=p(A,qI),B=I.x52009230,Q=I.x52009229,C=p(I,mI);return{NumberOfFrames:A.intString("x00280008"),PerFrameFunctionalGroupsSequence:B,SharedFunctionalGroupsSequence:Q,otherElements:C,otherAttributtes:g}}}function TI(A){if(Qg[A])return Qg[A]}function PI(A){if(!A)return!1;var I=A.intString("x00280008");return I&&I>1}const XI={_get:TI,generateMultiframeWADOURIs:function(A){var I=[],g=TI(A);if(PI(g))for(var B=g.intString("x00280008"),Q=1;Q<=B;Q++){var C;I.push(n()(C="".concat(A,"&frame=")).call(C,Q))}else I.push(A);return I},retrieveMultiframeDataset:function(A){var I=function(A){return A.indexOf("&frame=")}(A),g=-1===I?A:IA()(A).call(A,0,I),B=parseInt(IA()(A).call(A,I+7),10)||1;return{dataSet:Qg[g]?Qg[g].dataSet:void 0,frame:B}},isMultiframeDataset:function(A){return PI(TI(A))}};var VI=g(6089),OI=g.n(VI),jI=g(1407),zI=g.n(jI);function _I(A,I){var g=void 0!==zI()&&J()(A)||A["@@iterator"];if(!g){if(Array.isArray(A)||(g=function(A,I){var g;if(!A)return;if("string"==typeof A)return $I(A,I);var B=IA()(g=Object.prototype.toString.call(A)).call(g,8,-1);"Object"===B&&A.constructor&&(B=A.constructor.name);if("Map"===B||"Set"===B)return OI()(A);if("Arguments"===B||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(B))return $I(A,I)}(A))||I&&A&&"number"==typeof A.length){g&&(A=g);var B=0,Q=function(){};return{s:Q,n:function(){return B>=A.length?{done:!0}:{done:!1,value:A[B++]}},e:function(A){throw A},f:Q}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var C,E=!0,i=!1;return{s:function(){g=g.call(A)},n:function(){var A=g.next();return E=A.done,A},e:function(A){i=!0,C=A},f:function(){try{E||null==g.return||g.return()}finally{if(i)throw C}}}}function $I(A,I){(null==I||I>A.length)&&(I=A.length);for(var g=0,B=new Array(I);g<I;g++)B[g]=A[g];return B}function Ag(A){var I,g=LI.dicomParser,B=g.parseDicom(A,{untilTag:"x7fe00010"});B.elements.x7fe00010||console.warn("Pixel data not found!");try{I=g.parseDicom(A)}catch(A){console.error(A),console.log("pixel data dataset:",A.dataSet),I=A.dataSet}return B.elements.x7fe00010=I.elements.x7fe00010,B=function(A){var I,g=A.elements.x7fe00010.fragments,B=A.byteArray.length,Q=_I(g);try{for(Q.s();!(I=Q.n()).done;){var C,E=I.value,i=E.position;E.length>B-i&&(console.log(n()(C="Truncated fragment, changing fragment length from ".concat(E.length," to ")).call(C,B-i)),E.length=B-i)}}catch(A){Q.e(A)}finally{Q.f()}return A}(B)}function Ig(A,I,g){return gg.apply(this,arguments)}function gg(){return(gg=KI(uI().mark((function A(I,g,B){var Q,C,E,i;return uI().wrap((function(A){for(;;)switch(A.prev=A.next){case 0:return Q=Ag(I),C=B.uri,E=B.imageId,i=B.fileTotalLength,Q.fetchMore=function(){var A=KI(uI().mark((function A(o){var t,a,D,s,r,e,w,c;return uI().wrap((function(A){for(;;)switch(A.prev=A.next){case 0:return a=X()({uri:C,imageId:E,fetchedLength:I.length,lengthToFetch:i-I.length},o),D=a.fetchedLength,s=a.lengthToFetch,A.next=4,g(C,E,{byteRange:n()(t="".concat(D,"-")).call(t,D+s)});case 4:return r=A.sent,e=r.arrayBuffer,w=new Uint8Array(e),(c=new Uint8Array(Q.byteArray.length+w.length)).set(Q.byteArray),c.set(w,Q.byteArray.length),A.abrupt("return",Ig(c,g,B));case 11:case"end":return A.stop()}}),A)})));return function(I){return A.apply(this,arguments)}}(),A.abrupt("return",Q);case 4:case"end":return A.stop()}}),A)})))).apply(this,arguments)}var Bg=0,Qg={},Cg={};function Eg(){return{cacheSizeInBytes:Bg,numberOfDataSetsCached:GA()(Qg).length}}const ig={isLoaded:function(A){return void 0!==Qg[A]},load:function(A){var I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:SA,g=arguments.length>2?arguments[2]:void 0,B=LI.cornerstone,Q=LI.dicomParser;if(Qg[A])return new(hA())((function(I){Qg[A].cacheCount++,I(Qg[A].dataSet)}));if(Cg[A])return Cg[A].cacheCount++,Cg[A];var C=I(A,g),E=new(hA())((function(i,o){C.then(function(){var C=KI(uI().mark((function C(t){var a,D,s;return uI().wrap((function(C){for(;;)switch(C.prev=C.next){case 0:if(a={isPartialContent:!1,fileTotalLength:null},t instanceof ArrayBuffer){C.next=7;break}if(t.arrayBuffer){C.next=4;break}return C.abrupt("return",o(new Error("If not returning ArrayBuffer, must return object with `arrayBuffer` parameter")));case 4:a.isPartialContent=bI()(t).isPartialContent,a.fileTotalLength=bI()(t).fileTotalLength,t=t.arrayBuffer;case 7:if(D=new Uint8Array(t),C.prev=8,!a.isPartialContent){C.next=15;break}return C.next=12,Ig(D,I,{uri:A,imageId:g,fileTotalLength:a.fileTotalLength});case 12:s=C.sent,C.next=16;break;case 15:s=Q.parseDicom(D);case 16:C.next=21;break;case 18:return C.prev=18,C.t0=C.catch(8),C.abrupt("return",o(C.t0));case 21:Qg[A]={dataSet:s,cacheCount:E.cacheCount},Bg+=s.byteArray.length,i(s),B.triggerEvent(B.events,"datasetscachechanged",{uri:A,action:"loaded",cacheInfo:Eg()});case 25:case"end":return C.stop()}}),C,null,[[8,18]])})));return function(A){return C.apply(this,arguments)}}(),o).then((function(){delete Cg[A]}),(function(){delete Cg[A]}))}));return E.cacheCount=1,Cg[A]=E,E},unload:function(A){var I=LI.cornerstone;Qg[A]&&(Qg[A].cacheCount--,0===Qg[A].cacheCount&&(Bg-=Qg[A].dataSet.byteArray.length,delete Qg[A],I.triggerEvent(I.events,"datasetscachechanged",{uri:A,action:"unloaded",cacheInfo:Eg()})))},getInfo:Eg,purge:function(){Qg={},Cg={},Bg=0},get:function(A){var I;if(h()(A).call(A,"&frame=")){var g=XI.retrieveMultiframeDataset(A);I=function(A,I){if(I){var g=ZI(I),B=g.NumberOfFrames,Q=g.PerFrameFunctionalGroupsSequence,C=g.SharedFunctionalGroupsSequence,E=g.otherElements;if(Q||B>1){var i=vI(Q,C,A),o=i.shared,t=i.perFrame,a={elements:WI(WI(WI({},E),o),t)},D=Object.create(I);return X()(D,a)}return I}}(g.frame,g.dataSet)}else Qg[A]&&(I=Qg[A].dataSet);return I},update:function(A,I){var g=Qg[A];g?(Bg-=g.dataSet.byteArray.length,g.dataSet=I,Bg+=I.byteArray.length,LI.cornerstone.triggerEvent(LI.cornerstone.events,"datasetscachechanged",{uri:A,action:"updated",cacheInfo:Eg()})):console.error("No loaded dataSet for uri ".concat(A))}};function og(A,I){var g=A.string("x00080008");if(g){var B=g.split("\\");if(B.length>I)return B[I]}}function tg(A){var I=e(A,"x00200037",6);return!I&&A.elements.x00209116&&(I=e(A.elements.x00209116.items[0].dataSet,"x00200037",6)),I||(I=function(A){var I,g=A.string("x00080060");if(h()(g).call(g,"NM")){var B=og(A,2);B&&iA(B)&&A.elements.x00540022&&(I=e(A.elements.x00540022.items[0].dataSet,"x00200037",6))}return I}(A)),I}function ag(A){var I=e(A,"x00200032",3);return!I&&A.elements.x00209113&&(I=e(A.elements.x00209113.items[0].dataSet,"x00200032",3)),I||(I=function(A){var I,g=A.string("x00080060");if(h()(g).call(g,"NM")){var B=og(A,2);B&&iA(B)&&A.elements.x00540022&&(I=e(A.elements.x00540022.items[0].dataSet,"x00200032",3))}return I}(A)),I}function Dg(A){var I=e(A,"x00280030",2);return!I&&A.elements.x00289110&&(I=e(A.elements.x00289110.items[0].dataSet,"x00280030",2)),I}function sg(A){var I;return A.elements.x00180050?I=A.floatString("x00180050"):A.elements.x00289110&&A.elements.x00289110.items.length&&A.elements.x00289110.items[0].dataSet.elements.x00180050&&(I=A.elements.x00289110.items[0].dataSet.floatString("x00180050")),I}const rg=function(A,I){var g=YI(I);if("multiframeModule"===A){var B=XI.retrieveMultiframeDataset(g.url);if(!B.dataSet)return;return function(A,I){if(A){var g=ZI(A),B=g.NumberOfFrames,Q=g.PerFrameFunctionalGroupsSequence,C=g.SharedFunctionalGroupsSequence;if(Q||B>1){var E=vI(Q,C,I),i=E.shared;return{NumberOfFrames:B,PerFrameFunctionalInformation:E.perFrame,SharedFunctionalInformation:i}}return{NumberOfFrames:B}}}(B.dataSet,B.frame)}var Q,C=LI.dicomParser,E=g.url;g.frame&&(E=n()(Q="".concat(E,"&frame=")).call(Q,g.frame));var i=ig.get(E);if(i){if("generalSeriesModule"===A)return{modality:i.string("x00080060"),seriesInstanceUID:i.string("x0020000e"),seriesNumber:i.intString("x00200011"),studyInstanceUID:i.string("x0020000d"),seriesDate:C.parseDA(i.string("x00080021")),seriesTime:C.parseTM(i.string("x00080031")||""),acquisitionDate:C.parseDA(i.string("x00080022")||""),acquisitionTime:C.parseTM(i.string("x00080032")||"")};if("patientStudyModule"===A)return{patientAge:i.intString("x00101010"),patientSize:i.floatString("x00101020"),patientWeight:i.floatString("x00101030")};if("imagePlaneModule"===A){var o,t=tg(i),D=ag(i),w=Dg(i);i.elements.x00200052&&(o=i.string("x00200052"));var c,y=sg(i);i.elements.x00201041&&(c=i.floatString("x00201041"));var G=null,F=null;w&&(F=w[0],G=w[1]);var N=null,R=null;return t&&(N=[parseFloat(t[0]),parseFloat(t[1]),parseFloat(t[2])],R=[parseFloat(t[3]),parseFloat(t[4]),parseFloat(t[5])]),{frameOfReferenceUID:o,rows:i.uint16("x00280010"),columns:i.uint16("x00280011"),imageOrientationPatient:t,rowCosines:N,columnCosines:R,imagePositionPatient:D,sliceThickness:y,sliceLocation:c,pixelSpacing:w,rowPixelSpacing:F,columnPixelSpacing:G}}if("nmMultiframeGeometryModule"===A){var S=i.string("x00080060"),k=og(i,2);return{modality:S,imageType:i.string("x00080008"),imageSubType:k,imageOrientationPatient:tg(i),imagePositionPatient:ag(i),sliceThickness:sg(i),pixelSpacing:Dg(i),numberOfFrames:i.uint16("x00280008"),isNMReconstructable:iA(k)&&h()(S).call(S,"NM")}}if("imagePixelModule"===A)return a(i);if("modalityLutModule"===A)return{rescaleIntercept:i.floatString("x00281052"),rescaleSlope:i.floatString("x00281053"),rescaleType:i.string("x00281054"),modalityLUTSequence:s(i.uint16("x00280103"),i.elements.x00283000)};if("voiLutModule"===A){var U=r(i);return{windowCenter:e(i,"x00281050",1),windowWidth:e(i,"x00281051",1),voiLUTSequence:s(U,i.elements.x00283010)}}if("sopCommonModule"===A)return{sopClassUID:i.string("x00080016"),sopInstanceUID:i.string("x00080018")};if("petIsotopeModule"===A){var J=i.elements.x00540016;if(void 0===J)return;var M=J.items[0].dataSet;return{radiopharmaceuticalInfo:{radiopharmaceuticalStartTime:C.parseTM(M.string("x00181072")||""),radionuclideTotalDose:M.floatString("x00181074"),radionuclideHalfLife:M.floatString("x00181075")}}}return"overlayPlaneModule"===A?function(A){for(var I=[],g=0;g<=30;g+=2){var B="x60".concat(g.toString(16));4===B.length&&(B="x600".concat(g.toString(16)));var Q=A.elements["".concat(B,"3000")];if(Q){for(var C=[],E=0;E<Q.length;E++)for(var i=0;i<8;i++){var o=A.byteArray[Q.dataOffset+E];C[8*E+i]=o>>i&1}I.push({rows:A.uint16("".concat(B,"0010")),columns:A.uint16("".concat(B,"0011")),type:A.string("".concat(B,"0040")),x:A.int16("".concat(B,"0050"),1)-1,y:A.int16("".concat(B,"0050"),0)-1,pixelData:C,description:A.string("".concat(B,"0022")),label:A.string("".concat(B,"1500")),roiArea:A.string("".concat(B,"1301")),roiMean:A.string("".concat(B,"1302")),roiStandardDeviation:A.string("".concat(B,"1303"))})}}return{overlays:I}}(i):"transferSyntax"===A?{transferSyntaxUID:i.string("x00020010")}:"petSeriesModule"===A?{correctedImage:i.string("x00280051"),units:i.string("x00541001"),decayCorrection:i.string("x00541102")}:"petImageModule"===A?{frameReferenceTime:C.floatString(i.string("x00541300")||""),actualFrameDuration:C.intString(i.string("x00181242"))}:void 0}};var eg=[];const wg={add:function(A){var I=eg.push(A);return"dicomfile:".concat(I-1)},get:function(A){return eg[A]},remove:function(A){eg[A]=void 0},purge:function(){eg=[]}};function ng(A,I){var g=LI.dicomParser;if(A.elements.x7fe00010&&A.elements.x7fe00010.basicOffsetTable.length)return g.readEncapsulatedImageFrame(A,A.elements.x7fe00010,I);if(function(A){return A.intString("x00280008")!==A.elements.x7fe00010.fragments.length}(A)){var B=g.createJPEGBasicOffsetTable(A,A.elements.x7fe00010);return g.readEncapsulatedImageFrame(A,A.elements.x7fe00010,I,B)}return g.readEncapsulatedPixelDataFromFragments(A,A.elements.x7fe00010,I)}function cg(A,I){return A&1<<I}const hg=function(A,I,g){for(var B=new Uint8Array(g),Q=0;Q<g;Q++){var C=A[Math.floor(Q/8)+I],E=Q%8;B[Q]=cg(C,E)?1:0}return B};const yg=function(A,I){var g=A.elements.x7fe00010||A.elements.x7fe00008,B=A.uint16("x00280100"),Q=A.uint16("x00280010"),C=A.uint16("x00280011"),E=A.uint16("x00280002");"YBR_FULL_422"===A.string("x00280004")&&(E=2,console.warn("Using SamplesPerPixel of 2 for YBR_FULL_422 photometric interpretation.\n      See http://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_C.7.6.3.html for more information."));var i,o=g.dataOffset,t=Q*C*E;if(8===B){var a;if((i=o+I*t)>=A.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(IA()(a=A.byteArray.buffer).call(a,i,i+t))}if(16===B){var D;if((i=o+I*t*2)>=A.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(IA()(D=A.byteArray.buffer).call(D,i,i+2*t))}if(1===B){if((i=o+I*t*.125)>=A.byteArray.length)throw new Error("frame exceeds size of pixelData");return hg(A.byteArray,i,t)}if(32===B){var s;if((i=o+I*t*4)>=A.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(IA()(s=A.byteArray.buffer).call(s,i,i+4*t))}throw new Error("unsupported pixel format")};const Gg=function(A){var I=YI(A),g=parseInt(I.url,10),B=wg.get(g);return new(hA())((function(A,I){var g=new FileReader;g.onload=function(I){var g=I.target.result;A(g)},g.onerror=I,g.readAsArrayBuffer(B)}))};const Fg=function(A){var I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,g=A.elements.x7fe00010||A.elements.x7fe00008;return g?g.encapsulatedPixelData?ng(A,I):yg(A,I):null};function Ng(A,I){A.decache=function(){var A=YI(I);ig.unload(A.url)}}function Rg(A,I){var g=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,B=arguments.length>3?arguments[3]:void 0,Q=arguments.length>4?arguments[4]:void 0,C=arguments.length>5?arguments[5]:void 0,E=(new Date).getTime(),i={cancelFn:void 0};return i.promise=new(hA())((function(o,t){A.then((function(A){var a=Fg(A,g),D=A.string("x00020010"),s=(new Date).getTime(),r=NI(I,a,D,Q);Ng(i,I),r.then((function(I){I.data=A,I.sharedCacheKey=B;var g=(new Date).getTime();I.loadTimeInMS=s-E,I.totalTimeInMS=g-E,void 0!==C&&void 0!==C.imageDoneCallback&&C.imageDoneCallback(I),o(I)}),(function(I){t({error:I,dataSet:A})}))}),(function(A){t({error:A})}))})),i}function Sg(A,I){var g=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,B=arguments.length>3?arguments[3]:void 0,Q=arguments.length>4?arguments[4]:void 0,C=(new Date).getTime(),E=new(hA())((function(E,i){var o,t=(new Date).getTime();try{var a=Fg(A,g),D=A.string("x00020010");o=NI(I,a,D,Q)}catch(I){return void i({error:I,dataSet:A})}o.then((function(I){I.data=A,I.sharedCacheKey=B;var g=(new Date).getTime();I.loadTimeInMS=t-C,I.totalTimeInMS=g-C,E(I)}),i)}));return{promise:E,cancelFn:void 0}}function kg(A){return"dicomweb"===A||"wadouri"===A?SA:"dicomfile"===A?Gg:void 0}function Ug(A){var I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},g=YI(A),B=(I=X()({},I)).loader;if(void 0===B?B=kg(g.scheme):delete I.loader,ig.isLoaded(g.url)){var Q=ig.get(g.url,B,A);return Sg(Q,A,g.frame,g.url,I)}var C=ig.load(g.url,B,A);return Rg(C,A,g.frame,g.url,I)}const Jg={metaData:{getImagePixelModule:a,getLUTs:s,getModalityLUTOutputPixelRepresentation:r,getNumberValues:e,metaDataProvider:rg},dataSetCacheManager:ig,fileManager:wg,getEncapsulatedImageFrame:ng,getUncompressedImageFrame:yg,loadFileRequest:Gg,loadImageFromPromise:Rg,getLoaderForScheme:kg,loadImage:Ug,parseImageId:YI,unpackBinaryFrame:hg,register:function(A){A.registerImageLoader("dicomweb",Ug),A.registerImageLoader("wadouri",Ug),A.registerImageLoader("dicomfile",Ug),A.metaData.addProvider(rg)}};const Mg=function(A){NA(A)},Hg="4.13.2";const Lg={convertRGBColorByPixel:A,convertRGBColorByPlane:I,convertYBRFullByPixel:Q,convertYBRFullByPlane:C,convertPALETTECOLOR:i,wadouri:Jg,wadors:UI,configure:Mg,convertColorSpace:aI,createImage:NI,decodeImageFrame:iI,decodeJPEGBaseline8BitColor:QI,getImageFrame:bA,getPixelData:HA,getMinMax:gI,isColorImage:oI,isJPEGBaseline8BitColor:DI,webWorkerManager:II,version:Hg,internal:kA,external:LI}})(),B})()}));
//# sourceMappingURL=cornerstoneWADOImageLoader.bundle.min.js.map

/***/ }),

/***/ 5205:
/***/ ((module) => {

/*! cornerstone-web-image-loader - 2.1.1 - 2018-12-05 | (c) 2016 Chris Hafey | https://github.com/cornerstonejs/cornerstoneWebImageLoader */
!function(e,t){ true?module.exports=t():0}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=5)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.external=void 0;var r,o=n(4),a=(r=o)&&r.__esModule?r:{default:r};var u=void 0,i={set cornerstone(e){u=e,(0,a.default)(u)},get cornerstone(){return u}};t.external=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.loadImage=function(e){var t=r.external.cornerstone,n=new XMLHttpRequest;return n.open("GET",e,!0),n.responseType="arraybuffer",i.beforeSend(n),n.onprogress=function(n){if(n.lengthComputable){var r=n.loaded,o=n.total,a=Math.round(r/o*100),u={imageId:e,loaded:r,total:o,percentComplete:a};t.triggerEvent(t.events,"cornerstoneimageloadprogress",u)}},{promise:new Promise(function(t,r){n.onload=function(){(0,o.default)(this.response).then(function(n){var r=(0,a.default)(n,e);t(r)},r)},n.send()}),cancelFn:function(){n.abort()}}},t.configure=function(e){i=e};var r=n(0),o=u(n(3)),a=u(n(2));function u(e){return e&&e.__esModule?e:{default:e}}var i={beforeSend:function(){}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=e.naturalHeight,u=e.naturalWidth;return{imageId:t,minPixelValue:0,maxPixelValue:255,slope:1,intercept:0,windowCenter:128,windowWidth:255,render:r.external.cornerstone.renderWebImage,getPixelData:function(){return(n=void 0,a===t?n=o.getContext("2d"):(o.height=e.naturalHeight,o.width=e.naturalWidth,(n=o.getContext("2d")).drawImage(e,0,0),a=t),n.getImageData(0,0,e.naturalWidth,e.naturalHeight)).data;var n},getCanvas:function(){return a===t?o:(o.height=e.naturalHeight,o.width=e.naturalWidth,o.getContext("2d").drawImage(e,0,0),a=t,o)},getImage:function(){return e},rows:n,columns:u,height:n,width:u,color:!0,rgba:!1,columnPixelSpacing:void 0,rowPixelSpacing:void 0,invert:!1,sizeInBytes:n*u*4}};var r=n(0),o=document.createElement("canvas"),a=void 0},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return new Promise(function(t,n){var r=new Image,o=new Uint8Array(e),a=new Blob([o]),u=window.URL||window.webkitURL,i=u.createObjectURL(a);r.src=i,r.onload=function(){t(r),u.revokeObjectURL(i)},r.onerror=function(e){u.revokeObjectURL(i),n(e)}})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){e.registerImageLoader("http",r.loadImage),e.registerImageLoader("https",r.loadImage)};var r=n(1)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.external=t.configure=t.loadImage=t.createImage=t.arrayBufferToImage=void 0;var r=i(n(3)),o=i(n(2)),a=n(1),u=n(0);function i(e){return e&&e.__esModule?e:{default:e}}var d={arrayBufferToImage:r.default,createImage:o.default,loadImage:a.loadImage,configure:a.configure,external:u.external};t.arrayBufferToImage=r.default,t.createImage=o.default,t.loadImage=a.loadImage,t.configure=a.configure,t.external=u.external,t.default=d}])});
//# sourceMappingURL=cornerstoneWebImageLoader.min.js.map

/***/ }),

/***/ 4222:
/***/ (function(module) {

/*! dicom-character-set - 1.0.4 - 2021-09-23 | (c) 2018 Radialogica, LLC | https://github.com/radialogica/dicom-character-set */
!function(e,n){ true?module.exports=n():0}(this,function(){return function(e){var n={};function t(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,t),r.l=!0,r.exports}return t.m=e,t.c=n,t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:o})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(t.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)t.d(o,r,function(n){return e[n]}.bind(null,r));return o},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=0)}([function(e,n,t){"use strict";t.r(n);var o={codeElement:"G0",escapeSequence:[27,40,66],encoding:"windows-1252",isASCII:!0,bytesPerCodePoint:1},r={"ISO_IR 6":{encoding:"utf-8"},"ISO_IR 100":{encoding:"windows-1252"},"ISO_IR 101":{encoding:"iso-8859-2"},"ISO_IR 109":{encoding:"iso-8859-3"},"ISO_IR 110":{encoding:"iso-8859-4"},"ISO_IR 144":{encoding:"iso-8859-5"},"ISO_IR 127":{encoding:"iso-8859-6"},"ISO_IR 126":{encoding:"iso-8859-7"},"ISO_IR 138":{encoding:"iso-8859-8"},"ISO_IR 148":{encoding:"windows-1254"},"ISO_IR 13":{encoding:"shift-jis"},"ISO_IR 166":{encoding:"tis-620"},"ISO 2022 IR 6":{extension:!0,elements:[o]},"ISO 2022 IR 100":{extension:!0,elements:[o,{codeElement:"G1",escapeSequence:[27,45,65],encoding:"windows-1252",bytesPerCodePoint:1}]},"ISO 2022 IR 101":{extension:!0,elements:[o,{codeElement:"G1",escapeSequence:[27,45,66],encoding:"iso-8859-2",bytesPerCodePoint:1}]},"ISO 2022 IR 109":{extension:!0,elements:[o,{codeElement:"G1",escapeSequence:[27,45,67],encoding:"iso-8859-3",bytesPerCodePoint:1}]},"ISO 2022 IR 110":{extension:!0,elements:[o,{codeElement:"G1",escapeSequence:[27,45,68],encoding:"iso-8859-4",bytesPerCodePoint:1}]},"ISO 2022 IR 144":{extension:!0,elements:[o,{codeElement:"G1",escapeSequence:[27,45,76],encoding:"iso-8859-5",bytesPerCodePoint:1}]},"ISO 2022 IR 127":{extension:!0,elements:[o,{codeElement:"G1",escapeSequence:[27,45,71],encoding:"iso-8859-6",bytesPerCodePoint:1}]},"ISO 2022 IR 126":{extension:!0,elements:[o,{codeElement:"G1",escapeSequence:[27,45,70],encoding:"iso-8859-7",bytesPerCodePoint:1}]},"ISO 2022 IR 138":{extension:!0,elements:[o,{codeElement:"G1",escapeSequence:[27,45,72],encoding:"iso-8859-8",bytesPerCodePoint:1}]},"ISO 2022 IR 148":{extension:!0,elements:[o,{codeElement:"G1",escapeSequence:[27,45,77],encoding:"windows-1254",bytesPerCodePoint:1}]},"ISO 2022 IR 13":{extension:!0,elements:[{codeElement:"G0",escapeSequence:[27,40,74],encoding:"shift-jis",bytesPerCodePoint:1},{codeElement:"G1",escapeSequence:[27,41,73],encoding:"shift-jis",bytesPerCodePoint:1}]},"ISO 2022 IR 166":{extension:!0,elements:[o,{codeElement:"G1",escapeSequence:[27,45,84],encoding:"tis-620",bytesPerCodePoint:1}]},"ISO 2022 IR 87":{extension:!0,multiByte:!0,elements:[{codeElement:"G0",escapeSequence:[27,36,66],encoding:"euc-jp",setHighBit:!0,bytesPerCodePoint:2}]},"ISO 2022 IR 159":{extension:!0,multiByte:!0,elements:[{codeElement:"G0",escapeSequence:[27,36,40,68],encoding:"euc-jp",isJISX0212:!0,bytesPerCodePoint:2}]},"ISO 2022 IR 149":{extension:!0,multiByte:!0,elements:[{codeElement:"G1",escapeSequence:[27,36,41,67],encoding:"euc-kr",bytesPerCodePoint:2}]},"ISO 2022 IR 58":{extension:!0,multiByte:!0,elements:[{codeElement:"G1",escapeSequence:[27,36,41,65],encoding:"gb18030",bytesPerCodePoint:2}]},"ISO_IR 192":{encoding:"utf-8",multiByte:!0},GB18030:{encoding:"gb18030",multiByte:!0},GBK:{encoding:"gbk",multiByte:!0}},i=27,c=10,s=12,u=13,d=9,a=92,f=61,l=94;function I(e){return e.replace(/~/g,"‾").replace(/\\/g,"¥")}function m(e,n,t,o,r){var i=h(n,t,o,r);return e+p(n.encoding,i)}function S(e,n,t,o,r){var i=h(n,t,o,r);return(""===e?Promise.resolve(""):e).then(function(e){return y(n.encoding,i).then(function(n){return e+n})})}function g(e,n,t,o,i){!function(e,n){if(n&&!(n instanceof Uint8Array))throw new Error("bytes must be a Uint8Array");if(e&&"string"!=typeof e)throw new Error("specificCharacterSet must be a string")}(t,o);var I=function(e){var n=e?e.split("\\").map(function(e){return e.trim().toUpperCase()}):[""];""===n[0]&&(n[0]=n.length>1?"ISO 2022 IR 6":"ISO_IR 6");if(n.some(function(e){return void 0===r[e]}))throw new Error("Invalid specific character set specified.");return function(e){for(var n=e.length>1,t=[],o=0;o<e.length;o++){var r=e[o];t.includes(r)||t.push(n?r.replace("ISO_IR","ISO 2022 IR"):r)}return t}(n=function(e){var n=r[e[0]];return n.multiByte&&!n.extension?[e[0]]:e.filter(function(e){return!r[e].multiByte||r[e].extension})}(n))}(t);if(1===I.length&&!I[0].startsWith("ISO 2022"))return e(r[I[0]].encoding,o);var m=i||{};return function(e,n,t,o){var r="";if(!n||0===n.length)return r;var i={G0:e[0].elements.find(function(e){return"G0"===e.codeElement}),G1:e[0].elements.find(function(e){return"G1"===e.codeElement})},c=Object.assign({},i),s=0,u=void 0,d=0;for(;d<n.length;){u||(u=P(n[s],c));var a=b(n,s,u,c,i,t);if((d=a.index)>s&&(r=o(r,u,n,s,d)),s=d,u=a.characterSet,a.escapeSequence){var f=v(n,d,e);c[f.codeElement]=f,s+=f.escapeSequence.length}}return r}(I.map(function(e){return r[e]}),o,function(e){var n=(e||"").trim().toUpperCase(),t=[c,s,u,d];["UT","ST","LT"].includes(n)||t.push(a);"PN"===n&&(t.push(f),t.push(l));return t}(m.vr),n)}function p(e,n){var t=new TextDecoder(e).decode(n);return"shift-jis"===e?I(t):t}function y(e,n){return new Promise(function(t){var o=new FileReader;o.onload="shift-jis"===e?function(){return t(I(o.result))}:function(){return t(o.result)};var r=new Blob([n]);o.readAsText(r,e)})}function b(e,n,t,o,r,c){for(var s=n;s<e.length;s+=t.bytesPerCodePoint){if(e[s]===i)return{escapeSequence:!0,index:s};1===t.bytesPerCodePoint&&c.includes(e[s])&&Object.assign(o,r);var u=P(e[s],o);if(t&&u!==t)return{characterSet:u,index:s}}return{index:e.length}}function P(e,n){return e>127&&n.G1?n.G1:n.G0?n.G0:n.G1&&1===n.G1.bytesPerCodePoint?n.G1:r["ISO 2022 IR 6"].elements[0]}function h(e,n,t,o){var r=void 0;return e.isJISX0212?r=function(e,n,t){var o=t-n;if(o%2!=0)throw new Error("JIS X string with a character not having exactly two bytes!");for(var r=new Uint8Array(o+o/2),i=0,c=n;c<t;c+=2)r[i++]=143,r[i++]=128|e[c],r[i++]=128|e[c+1];return r}(n,t,o):((r=new Uint8Array(o-t)).set(new Uint8Array(n.buffer,n.byteOffset+t,o-t)),e.setHighBit&&function(e){for(var n=0;n<e.length;n++)e[n]|=128}(r)),r}function O(e,n,t){for(var o=0;o<e.length;o++){if(t+o>=n.length)return!1;if(n[t+o]!==e[o])return!1}return!0}function v(e,n,t){for(var o=0;o<t.length;o++)for(var r=t[o],i=0;i<r.elements.length;i++){var c=r.elements[i];if(O(c.escapeSequence,e,n))return c}throw new Error("Unknown escape sequence encountered at byte "+n)}function R(e,n,t){return g(p,m,e,n,t)}function x(e,n,t){return g(y,S,e,n,t)}t.d(n,"convertBytes",function(){return R}),t.d(n,"convertBytesPromise",function(){return x}),t.d(n,"characterSets",function(){return r})}])});
//# sourceMappingURL=dicom-character-set.min.js.map

/***/ }),

/***/ 4705:
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

/*! dicom-parser - 1.8.12 - 2023-02-20 | (c) 2017 Chris Hafey | https://github.com/cornerstonejs/dicomParser */
!function(e,t){ true?module.exports=t(__webpack_require__(3848)):0}(this,function(r){return a=[function(e,t){e.exports=r},function(e,t,s){"use strict";s.r(t),s.d(t,"isStringVr",function(){return d}),s.d(t,"isPrivateTag",function(){return f}),s.d(t,"parsePN",function(){return a}),s.d(t,"parseTM",function(){return n}),s.d(t,"parseDA",function(){return o}),s.d(t,"explicitElementToString",function(){return l}),s.d(t,"explicitDataSetToJS",function(){return u}),s.d(t,"createJPEGBasicOffsetTable",function(){return p}),s.d(t,"parseDicomDataSetExplicit",function(){return q}),s.d(t,"parseDicomDataSetImplicit",function(){return T}),s.d(t,"readFixedString",function(){return b}),s.d(t,"alloc",function(){return k}),s.d(t,"version",function(){return L}),s.d(t,"bigEndianByteArrayParser",function(){return N}),s.d(t,"ByteStream",function(){return J}),s.d(t,"sharedCopy",function(){return j}),s.d(t,"DataSet",function(){return w}),s.d(t,"findAndSetUNElementLength",function(){return y}),s.d(t,"findEndOfEncapsulatedElement",function(){return g}),s.d(t,"findItemDelimitationItemAndSetElementLength",function(){return x}),s.d(t,"littleEndianByteArrayParser",function(){return M}),s.d(t,"parseDicom",function(){return V}),s.d(t,"readDicomElementExplicit",function(){return B}),s.d(t,"readDicomElementImplicit",function(){return A}),s.d(t,"readEncapsulatedImageFrame",function(){return W}),s.d(t,"readEncapsulatedPixelData",function(){return K}),s.d(t,"readEncapsulatedPixelDataFromFragments",function(){return _}),s.d(t,"readPart10Header",function(){return G}),s.d(t,"readSequenceItemsExplicit",function(){return I}),s.d(t,"readSequenceItemsImplicit",function(){return F}),s.d(t,"readSequenceItem",function(){return S}),s.d(t,"readTag",function(){return h});var r={AE:!0,AS:!0,AT:!1,CS:!0,DA:!0,DS:!0,DT:!0,FL:!1,FD:!1,IS:!0,LO:!0,LT:!0,OB:!1,OD:!1,OF:!1,OW:!1,PN:!0,SH:!0,SL:!1,SQ:!1,SS:!1,ST:!0,TM:!0,UI:!0,UL:!1,UN:void 0,UR:!0,US:!1,UT:!0},d=function(e){return r[e]},f=function(e){e=parseInt(e[4],16);if(isNaN(e))throw"dicomParser.isPrivateTag: cannot parse last character of group";return e%2==1},a=function(e){if(void 0!==e){e=e.split("^");return{familyName:e[0],givenName:e[1],middleName:e[2],prefix:e[3],suffix:e[4]}}};function n(e,t){if(2<=e.length){var r=parseInt(e.substring(0,2),10),a=4<=e.length?parseInt(e.substring(2,4),10):void 0,n=6<=e.length?parseInt(e.substring(4,6),10):void 0,i=8<=e.length?e.substring(7,13):void 0,i=i?parseInt(i,10)*Math.pow(10,6-i.length):void 0;if(t&&(isNaN(r)||void 0!==a&&isNaN(a)||void 0!==n&&isNaN(n)||void 0!==i&&isNaN(i)||r<0||23<r||a&&(a<0||59<a)||n&&(n<0||59<n)||i&&(i<0||999999<i)))throw"invalid TM '".concat(e,"'");return{hours:r,minutes:a,seconds:n,fractionalSeconds:i}}if(t)throw"invalid TM '".concat(e,"'")}function i(e,t,r){return!isNaN(r)&&(0<t&&t<=12&&0<e&&e<=function(e,t){switch(e){case 2:return t%4==0&&t%100||t%400==0?29:28;case 9:case 4:case 6:case 11:return 30;default:return 31}}(t,r))}function o(e,t){if(e&&8===e.length){var r=parseInt(e.substring(0,4),10),a=parseInt(e.substring(4,6),10),n=parseInt(e.substring(6,8),10);if(t&&!0!==i(n,a,r))throw"invalid DA '".concat(e,"'");return{year:r,month:a,day:n}}if(t)throw"invalid DA '".concat(e,"'")}function l(n,e){if(void 0===n||void 0===e)throw"dicomParser.explicitElementToString: missing required parameters";if(void 0===e.vr)throw"dicomParser.explicitElementToString: cannot convert implicit element to string";var t,r=e.vr,i=e.tag;function a(e,t){for(var r="",a=0;a<e;a++)0!==a&&(r+="/"),r+=t.call(n,i,a).toString();return r}if(!0===d(r))t=n.string(i);else{if("AT"===r){var o=n.uint32(i);return void 0===o?void 0:"x".concat((o=o<0?4294967295+o+1:o).toString(16).toUpperCase())}"US"===r?t=a(e.length/2,n.uint16):"SS"===r?t=a(e.length/2,n.int16):"UL"===r?t=a(e.length/4,n.uint32):"SL"===r?t=a(e.length/4,n.int32):"FD"===r?t=a(e.length/8,n.double):"FL"===r&&(t=a(e.length/4,n.float))}return t}function u(e,t){if(void 0===e)throw"dicomParser.explicitDataSetToJS: missing required parameter dataSet";t=t||{omitPrivateAttibutes:!0,maxElementLength:128};var r,a={};for(r in e.elements){var n=e.elements[r];if(!0!==t.omitPrivateAttibutes||!f(r))if(n.items){for(var i=[],o=0;o<n.items.length;o++)i.push(u(n.items[o].dataSet,t));a[r]=i}else{var s=void 0;n.length<t.maxElementLength&&(s=l(e,n)),a[r]=void 0!==s?s:{dataOffset:n.dataOffset,length:n.length}}}return a}function c(e,t){return 255===e.byteArray[t]&&217===e.byteArray[t+1]}function m(e,t,r){for(var a,n,i=r;i<t.fragments.length;i++)if(a=e,n=i,n=t.fragments[n],!(!c(a,n.position+n.length-2)&&!c(a,n.position+n.length-3)))return i}function p(e,t,r){if(void 0===e)throw"dicomParser.createJPEGBasicOffsetTable: missing required parameter dataSet";if(void 0===t)throw"dicomParser.createJPEGBasicOffsetTable: missing required parameter pixelDataElement";if("x7fe00010"!==t.tag)throw"dicomParser.createJPEGBasicOffsetTable: parameter 'pixelDataElement' refers to non pixel data tag (expected tag = x7fe00010'";if(!0!==t.encapsulatedPixelData)throw"dicomParser.createJPEGBasicOffsetTable: parameter 'pixelDataElement' refers to pixel data element that does not have encapsulated pixel data";if(!0!==t.hadUndefinedLength)throw"dicomParser.createJPEGBasicOffsetTable: parameter 'pixelDataElement' refers to pixel data element that does not have encapsulated pixel data";if(void 0===t.basicOffsetTable)throw"dicomParser.createJPEGBasicOffsetTable: parameter 'pixelDataElement' refers to pixel data element that does not have encapsulated pixel data";if(void 0===t.fragments)throw"dicomParser.createJPEGBasicOffsetTable: parameter 'pixelDataElement' refers to pixel data element that does not have encapsulated pixel data";if(t.fragments.length<=0)throw"dicomParser.createJPEGBasicOffsetTable: parameter 'pixelDataElement' refers to pixel data element that does not have encapsulated pixel data";if(r&&r.length<=0)throw"dicomParser.createJPEGBasicOffsetTable: parameter 'fragments' must not be zero length";r=r||t.fragments;for(var a=[],n=0;;){a.push(t.fragments[n].offset);var i=m(e,t,n);if(void 0===i||i===t.fragments.length-1)return a;n=i+1}}function h(e){if(void 0===e)throw"dicomParser.readTag: missing required parameter 'byteStream'";var t=256*e.readUint16()*256,e=e.readUint16();return"x".concat("00000000".concat((t+e).toString(16)).substr(-8))}function g(e,t,r){if(void 0===e)throw"dicomParser.findEndOfEncapsulatedElement: missing required parameter 'byteStream'";if(void 0===t)throw"dicomParser.findEndOfEncapsulatedElement: missing required parameter 'element'";if(t.encapsulatedPixelData=!0,t.basicOffsetTable=[],t.fragments=[],"xfffee000"!==h(e))throw"dicomParser.findEndOfEncapsulatedElement: basic offset table not found";for(var a=e.readUint32()/4,n=0;n<a;n++){var i=e.readUint32();t.basicOffsetTable.push(i)}for(var o=e.position;e.position<e.byteArray.length;){var s=h(e),d=e.readUint32();if("xfffee0dd"===s)return e.seek(d),void(t.length=e.position-t.dataOffset);if("xfffee000"!==s)return r&&r.push("unexpected tag ".concat(s," while searching for end of pixel data element with undefined length")),d>e.byteArray.length-e.position&&(d=e.byteArray.length-e.position),t.fragments.push({offset:e.position-o-8,position:e.position,length:d}),e.seek(d),void(t.length=e.position-t.dataOffset);t.fragments.push({offset:e.position-o-8,position:e.position,length:d}),e.seek(d)}r&&r.push("pixel data element ".concat(t.tag," missing sequence delimiter tag xfffee0dd"))}function y(e,t){if(void 0===e)throw"dicomParser.findAndSetUNElementLength: missing required parameter 'byteStream'";for(var r=e.byteArray.length-8;e.position<=r;)if(65534===e.readUint16()){var a=e.readUint16();if(57565===a)return 0!==e.readUint32()&&e.warnings("encountered non zero length following item delimiter at position ".concat(e.position-4," while reading element of undefined length with tag ").concat(t.tag)),void(t.length=e.position-t.dataOffset)}t.length=e.byteArray.length-t.dataOffset,e.seek(e.byteArray.length-e.position)}function b(e,t,r){if(r<0)throw"dicomParser.readFixedString - length cannot be less than 0";if(t+r>e.length)throw"dicomParser.readFixedString: attempt to read past end of buffer";for(var a,n="",i=0;i<r;i++){if(0===(a=e[t+i]))return t+=r,n;n+=String.fromCharCode(a)}return n}function v(e,t){for(var r=0;r<t.length;r++){var a=t[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function P(e,t){return void 0!==e.parser?e.parser:t}var w=function(){function a(e,t,r){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),this.byteArrayParser=e,this.byteArray=t,this.elements=r}var e,t,r;return e=a,(t=[{key:"uint16",value:function(e,t){e=this.elements[e];if(t=void 0!==t?t:0,e&&0!==e.length)return P(e,this.byteArrayParser).readUint16(this.byteArray,e.dataOffset+2*t)}},{key:"int16",value:function(e,t){e=this.elements[e];if(t=void 0!==t?t:0,e&&0!==e.length)return P(e,this.byteArrayParser).readInt16(this.byteArray,e.dataOffset+2*t)}},{key:"uint32",value:function(e,t){e=this.elements[e];if(t=void 0!==t?t:0,e&&0!==e.length)return P(e,this.byteArrayParser).readUint32(this.byteArray,e.dataOffset+4*t)}},{key:"int32",value:function(e,t){e=this.elements[e];if(t=void 0!==t?t:0,e&&0!==e.length)return P(e,this.byteArrayParser).readInt32(this.byteArray,e.dataOffset+4*t)}},{key:"float",value:function(e,t){e=this.elements[e];if(t=void 0!==t?t:0,e&&0!==e.length)return P(e,this.byteArrayParser).readFloat(this.byteArray,e.dataOffset+4*t)}},{key:"double",value:function(e,t){e=this.elements[e];if(t=void 0!==t?t:0,e&&0!==e.length)return P(e,this.byteArrayParser).readDouble(this.byteArray,e.dataOffset+8*t)}},{key:"numStringValues",value:function(e){e=this.elements[e];if(e&&0<e.length){e=b(this.byteArray,e.dataOffset,e.length).match(/\\/g);return null===e?1:e.length+1}}},{key:"string",value:function(e,t){e=this.elements[e];if(e&&e.Value)return e.Value;if(e&&0<e.length){e=b(this.byteArray,e.dataOffset,e.length);return 0<=t?e.split("\\")[t].trim():e.trim()}}},{key:"text",value:function(e,t){e=this.elements[e];if(e&&0<e.length){e=b(this.byteArray,e.dataOffset,e.length);return 0<=t?e.split("\\")[t].replace(/ +$/,""):e.replace(/ +$/,"")}}},{key:"floatString",value:function(e,t){var r=this.elements[e];if(r&&0<r.length){t=this.string(e,t=void 0!==t?t:0);if(void 0!==t)return parseFloat(t)}}},{key:"intString",value:function(e,t){var r=this.elements[e];if(r&&0<r.length){t=this.string(e,t=void 0!==t?t:0);if(void 0!==t)return parseInt(t)}}},{key:"attributeTag",value:function(e){var t=this.elements[e];if(t&&4===t.length){var r=P(t,this.byteArrayParser).readUint16,e=this.byteArray,t=t.dataOffset;return"x".concat("00000000".concat((256*r(e,t)*256+r(e,t+2)).toString(16)).substr(-8))}}}])&&v(e.prototype,t),r&&v(e,r),Object.defineProperty(e,"prototype",{writable:!1}),a}();function x(e,t){if(void 0===e)throw"dicomParser.readDicomElementImplicit: missing required parameter 'byteStream'";for(var r=e.byteArray.length-8;e.position<=r;)if(65534===e.readUint16()){var a=e.readUint16();if(57357===a)return 0!==e.readUint32()&&e.warnings("encountered non zero length following item delimiter at position ".concat(e.position-4," while reading element of undefined length with tag ").concat(t.tag)),void(t.length=e.position-t.dataOffset)}t.length=e.byteArray.length-t.dataOffset,e.seek(e.byteArray.length-e.position)}var E=function(e,t){if(void 0!==e.vr)return"SQ"===e.vr;if(t.position+4<=t.byteArray.length){e=h(t);return t.seek(-4),"xfffee000"===e||"xfffee0dd"===e}return t.warnings.push("eof encountered before finding sequence item tag or sequence delimiter tag in peeking to determine VR"),!1};function A(e,t,r){if(void 0===e)throw"dicomParser.readDicomElementImplicit: missing required parameter 'byteStream'";var a=h(e),a={tag:a,vr:void 0!==r?r(a):void 0,length:e.readUint32(),dataOffset:e.position};return 4294967295===a.length&&(a.hadUndefinedLength=!0),a.tag===t||(!E(a,e)||f(a.tag)&&!a.hadUndefinedLength?a.hadUndefinedLength?x(e,a):e.seek(a.length):(F(e,a,r),f(a.tag)&&(a.items=void 0))),a}function S(e){if(void 0===e)throw"dicomParser.readSequenceItem: missing required parameter 'byteStream'";var t={tag:h(e),length:e.readUint32(),dataOffset:e.position};if("xfffee000"!==t.tag)throw"dicomParser.readSequenceItem: item tag (FFFE,E000) not found at offset ".concat(e.position);return t}function D(e,t){var r=S(e);return 4294967295===r.length?(r.hadUndefinedLength=!0,r.dataSet=function(e,t){for(var r={};e.position<e.byteArray.length;){var a=A(e,void 0,t);if("xfffee00d"===(r[a.tag]=a).tag)return new w(e.byteArrayParser,e.byteArray,r)}return e.warnings.push("eof encountered before finding sequence item delimiter in sequence item of undefined length"),new w(e.byteArrayParser,e.byteArray,r)}(e,t),r.length=e.position-r.dataOffset):(r.dataSet=new w(e.byteArrayParser,e.byteArray,{}),T(r.dataSet,e,e.position+r.length,{vrCallback:t})),r}function F(e,t,r){if(void 0===e)throw"dicomParser.readSequenceItemsImplicit: missing required parameter 'byteStream'";if(void 0===t)throw"dicomParser.readSequenceItemsImplicit: missing required parameter 'element'";t.items=[],(4294967295===t.length?function(e,t,r){for(;e.position+4<=e.byteArray.length;){var a=h(e);if(e.seek(-4),"xfffee0dd"===a)return t.length=e.position-t.dataOffset,e.seek(8);a=D(e,r);t.items.push(a)}e.warnings.push("eof encountered before finding sequence delimiter in sequence of undefined length"),t.length=e.byteArray.length-t.dataOffset}:function(e,t,r){for(var a=t.dataOffset+t.length;e.position<a;){var n=D(e,r);t.items.push(n)}})(e,t,r)}function O(e,t){var r=S(e);return 4294967295===r.length?(r.hadUndefinedLength=!0,r.dataSet=function(e,t){for(var r={};e.position<e.byteArray.length;){var a=B(e,t);if("xfffee00d"===(r[a.tag]=a).tag)return new w(e.byteArrayParser,e.byteArray,r)}return t.push("eof encountered before finding item delimiter tag while reading sequence item of undefined length"),new w(e.byteArrayParser,e.byteArray,r)}(e,t),r.length=e.position-r.dataOffset):(r.dataSet=new w(e.byteArrayParser,e.byteArray,{}),q(r.dataSet,e,e.position+r.length)),r}function I(e,t,r){if(void 0===e)throw"dicomParser.readSequenceItemsExplicit: missing required parameter 'byteStream'";if(void 0===t)throw"dicomParser.readSequenceItemsExplicit: missing required parameter 'element'";t.items=[],(4294967295===t.length?function(e,t,r){for(;e.position+4<=e.byteArray.length;){var a=h(e);if(e.seek(-4),"xfffee0dd"===a)return t.length=e.position-t.dataOffset,e.seek(8);a=O(e,r);t.items.push(a)}r.push("eof encountered before finding sequence delimitation tag while reading sequence of undefined length"),t.length=e.position-t.dataOffset}:function(e,t,r){for(var a=t.dataOffset+t.length;e.position<a;){var n=O(e,r);t.items.push(n)}})(e,t,r)}var U=function(e){return"OB"===e||"OD"===e||"OL"===e||"OW"===e||"SQ"===e||"OF"===e||"UC"===e||"UR"===e||"UT"===e||"UN"===e?4:2};function B(e,t,r){if(void 0===e)throw"dicomParser.readDicomElementExplicit: missing required parameter 'byteStream'";var a={tag:h(e),vr:e.readFixedString(2)};return 2===U(a.vr)?a.length=e.readUint16():(e.seek(2),a.length=e.readUint32()),a.dataOffset=e.position,4294967295===a.length&&(a.hadUndefinedLength=!0),a.tag===r||("SQ"===a.vr?I(e,a,t):4294967295===a.length?"x7fe00010"===a.tag?g(e,a,t):("UN"===a.vr?F:x)(e,a):e.seek(a.length)),a}function q(e,t,r){var a=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{};if(r=void 0===r?t.byteArray.length:r,void 0===t)throw"dicomParser.parseDicomDataSetExplicit: missing required parameter 'byteStream'";if(r<t.position||r>t.byteArray.length)throw"dicomParser.parseDicomDataSetExplicit: invalid value for parameter 'maxP osition'";for(var n=e.elements;t.position<r;){var i=B(t,e.warnings,a.untilTag);if((n[i.tag]=i).tag===a.untilTag)return}if(t.position>r)throw"dicomParser:parseDicomDataSetExplicit: buffer overrun"}function T(e,t,r){var a=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{};if(r=void 0===r?e.byteArray.length:r,void 0===t)throw"dicomParser.parseDicomDataSetImplicit: missing required parameter 'byteStream'";if(r<t.position||r>t.byteArray.length)throw"dicomParser.parseDicomDataSetImplicit: invalid value for parameter 'maxPosition'";for(var n=e.elements;t.position<r;){var i=A(t,a.untilTag,a.vrCallback);if((n[i.tag]=i).tag===a.untilTag)return}}function k(e,t){if("undefined"!=typeof Buffer&&e instanceof Buffer)return Buffer.alloc(t);if(e instanceof Uint8Array)return new Uint8Array(t);throw"dicomParser.alloc: unknown type for byteArray"}var L="1.8.12",N={readUint16:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readUint16: position cannot be less than 0";if(t+2>e.length)throw"bigEndianByteArrayParser.readUint16: attempt to read past end of buffer";return(e[t]<<8)+e[t+1]},readInt16:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readInt16: position cannot be less than 0";if(t+2>e.length)throw"bigEndianByteArrayParser.readInt16: attempt to read past end of buffer";t=(e[t]<<8)+e[t+1];return t=32768&t?t-65535-1:t},readUint32:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readUint32: position cannot be less than 0";if(t+4>e.length)throw"bigEndianByteArrayParser.readUint32: attempt to read past end of buffer";return 256*(256*(256*e[t]+e[t+1])+e[t+2])+e[t+3]},readInt32:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readInt32: position cannot be less than 0";if(t+4>e.length)throw"bigEndianByteArrayParser.readInt32: attempt to read past end of buffer";return(e[t]<<24)+(e[t+1]<<16)+(e[t+2]<<8)+e[t+3]},readFloat:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readFloat: position cannot be less than 0";if(t+4>e.length)throw"bigEndianByteArrayParser.readFloat: attempt to read past end of buffer";var r=new Uint8Array(4);return r[3]=e[t],r[2]=e[t+1],r[1]=e[t+2],r[0]=e[t+3],new Float32Array(r.buffer)[0]},readDouble:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readDouble: position cannot be less than 0";if(t+8>e.length)throw"bigEndianByteArrayParser.readDouble: attempt to read past end of buffer";var r=new Uint8Array(8);return r[7]=e[t],r[6]=e[t+1],r[5]=e[t+2],r[4]=e[t+3],r[3]=e[t+4],r[2]=e[t+5],r[1]=e[t+6],r[0]=e[t+7],new Float64Array(r.buffer)[0]}};function j(e,t,r){if("undefined"!=typeof Buffer&&e instanceof Buffer)return e.slice(t,t+r);if(e instanceof Uint8Array)return new Uint8Array(e.buffer,e.byteOffset+t,r);throw"dicomParser.from: unknown type for byteArray"}function C(e,t){for(var r=0;r<t.length;r++){var a=t[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}var J=function(){function a(e,t,r){if(!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),void 0===e)throw"dicomParser.ByteStream: missing required parameter 'byteArrayParser'";if(void 0===t)throw"dicomParser.ByteStream: missing required parameter 'byteArray'";if(t instanceof Uint8Array==!1&&("undefined"==typeof Buffer||t instanceof Buffer==!1))throw"dicomParser.ByteStream: parameter byteArray is not of type Uint8Array or Buffer";if(r<0)throw"dicomParser.ByteStream: parameter 'position' cannot be less than 0";if(r>=t.length)throw"dicomParser.ByteStream: parameter 'position' cannot be greater than or equal to 'byteArray' length";this.byteArrayParser=e,this.byteArray=t,this.position=r||0,this.warnings=[]}var e,t,r;return e=a,(t=[{key:"seek",value:function(e){if(this.position+e<0)throw"dicomParser.ByteStream.prototype.seek: cannot seek to position < 0";this.position+=e}},{key:"readByteStream",value:function(e){if(this.position+e>this.byteArray.length)throw"dicomParser.ByteStream.prototype.readByteStream: readByteStream - buffer overread";var t=j(this.byteArray,this.position,e);return this.position+=e,new a(this.byteArrayParser,t)}},{key:"getSize",value:function(){return this.byteArray.length}},{key:"readUint16",value:function(){var e=this.byteArrayParser.readUint16(this.byteArray,this.position);return this.position+=2,e}},{key:"readUint32",value:function(){var e=this.byteArrayParser.readUint32(this.byteArray,this.position);return this.position+=4,e}},{key:"readFixedString",value:function(e){var t=b(this.byteArray,this.position,e);return this.position+=e,t}}])&&C(e.prototype,t),r&&C(e,r),Object.defineProperty(e,"prototype",{writable:!1}),a}(),M={readUint16:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readUint16: position cannot be less than 0";if(t+2>e.length)throw"littleEndianByteArrayParser.readUint16: attempt to read past end of buffer";return e[t]+256*e[t+1]},readInt16:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readInt16: position cannot be less than 0";if(t+2>e.length)throw"littleEndianByteArrayParser.readInt16: attempt to read past end of buffer";t=e[t]+(e[t+1]<<8);return t=32768&t?t-65535-1:t},readUint32:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readUint32: position cannot be less than 0";if(t+4>e.length)throw"littleEndianByteArrayParser.readUint32: attempt to read past end of buffer";return e[t]+256*e[t+1]+256*e[t+2]*256+256*e[t+3]*256*256},readInt32:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readInt32: position cannot be less than 0";if(t+4>e.length)throw"littleEndianByteArrayParser.readInt32: attempt to read past end of buffer";return e[t]+(e[t+1]<<8)+(e[t+2]<<16)+(e[t+3]<<24)},readFloat:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readFloat: position cannot be less than 0";if(t+4>e.length)throw"littleEndianByteArrayParser.readFloat: attempt to read past end of buffer";var r=new Uint8Array(4);return r[0]=e[t],r[1]=e[t+1],r[2]=e[t+2],r[3]=e[t+3],new Float32Array(r.buffer)[0]},readDouble:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readDouble: position cannot be less than 0";if(t+8>e.length)throw"littleEndianByteArrayParser.readDouble: attempt to read past end of buffer";var r=new Uint8Array(8);return r[0]=e[t],r[1]=e[t+1],r[2]=e[t+2],r[3]=e[t+3],r[4]=e[t+4],r[5]=e[t+5],r[6]=e[t+6],r[7]=e[t+7],new Float64Array(r.buffer)[0]}};function G(e){var i=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};if(void 0===e)throw"dicomParser.readPart10Header: missing required parameter 'byteArray'";var o=i.TransferSyntaxUID,s=new J(M,e);return function(){var e=function(){if(s.getSize()<=132&&o)return!1;if(s.seek(128),"DICM"===s.readFixedString(4))return!0;if(!(i||{}).TransferSyntaxUID)throw"dicomParser.readPart10Header: DICM prefix not found at location 132 - this is not a valid DICOM P10 file.";return s.seek(0),!1}(),t=[],r={};if(!e)return s.position=0,{elements:{x00020010:{tag:"x00020010",vr:"UI",Value:o}},warnings:t};for(;s.position<s.byteArray.length;){var a=s.position,n=B(s,t);if("x0002ffff"<n.tag){s.position=a;break}n.parser=M,r[n.tag]=n}return(e=new w(s.byteArrayParser,s.byteArray,r)).warnings=s.warnings,e.position=s.position,e}()}var z="1.2.840.10008.1.2.2";function V(i){var o=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};if(void 0===i)throw new Error("dicomParser.parseDicom: missing required parameter 'byteArray'");var e,a=function(e){if(void 0===e.elements.x00020010)throw new Error("dicomParser.parseDicom: missing required meta header attribute 0002,0010");e=e.elements.x00020010;return e&&e.Value||b(i,e.dataOffset,e.length)};function t(t){var e=a(t),r="1.2.840.10008.1.2"!==e,e=function(e,t){var r="[object process]"===Object.prototype.toString.call("undefined"!=typeof process?process:0);if("1.2.840.10008.1.2.1.99"!==e)return new J(e===z?N:M,i,t);if(o&&o.inflater){e=o.inflater(i,t);return new J(M,e,0)}if(!0==r){var a=s(0),n=j(i,t,i.length-t),a=a.inflateRawSync(n),n=k(i,a.length+t);return i.copy(n,0,0,t),a.copy(n,t),new J(M,n,0)}if("undefined"==typeof pako)throw"dicomParser.parseDicom: no inflater available to handle deflate transfer syntax";return a=i.slice(t),n=pako.inflateRaw(a),(a=k(i,n.length+t)).set(i.slice(0,t),0),a.set(n,t),new J(M,a,0)}(e,t.position),t=new w(e.byteArrayParser,e.byteArray,{});t.warnings=e.warnings;try{(r?q:T)(t,e,e.byteArray.length,o)}catch(e){throw{exception:e,dataSet:t}}return t}return function(e,t){for(var r in e.elements)e.elements.hasOwnProperty(r)&&(t.elements[r]=e.elements[r]);return void 0!==e.warnings&&(t.warnings=e.warnings.concat(t.warnings)),t}(e=G(i,o),t(e))}var R=function(e,t,r){for(var a=0,n=t;n<t+r;n++)a+=e[n].length;return a};function _(e,t,r,a,n){if(n=n||t.fragments,void 0===e)throw"dicomParser.readEncapsulatedPixelDataFromFragments: missing required parameter 'dataSet'";if(void 0===t)throw"dicomParser.readEncapsulatedPixelDataFromFragments: missing required parameter 'pixelDataElement'";if(void 0===r)throw"dicomParser.readEncapsulatedPixelDataFromFragments: missing required parameter 'startFragmentIndex'";if(void 0===(a=a||1))throw"dicomParser.readEncapsulatedPixelDataFromFragments: missing required parameter 'numFragments'";if("x7fe00010"!==t.tag)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'pixelDataElement' refers to non pixel data tag (expected tag = x7fe00010";if(!0!==t.encapsulatedPixelData)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'pixelDataElement' refers to pixel data element that does not have encapsulated pixel data";if(!0!==t.hadUndefinedLength)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'pixelDataElement' refers to pixel data element that does not have encapsulated pixel data";if(void 0===t.basicOffsetTable)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'pixelDataElement' refers to pixel data element that does not have encapsulated pixel data";if(void 0===t.fragments)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'pixelDataElement' refers to pixel data element that does not have encapsulated pixel data";if(t.fragments.length<=0)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'pixelDataElement' refers to pixel data element that does not have encapsulated pixel data";if(r<0)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragmentIndex' must be >= 0";if(r>=t.fragments.length)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragmentIndex' must be < number of fragments";if(a<1)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'numFragments' must be > 0";if(r+a>t.fragments.length)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragment' + 'numFragments' < number of fragments";var i=new J(e.byteArrayParser,e.byteArray,t.dataOffset),t=S(i);if("xfffee000"!==t.tag)throw"dicomParser.readEncapsulatedPixelData: missing basic offset table xfffee000";i.seek(t.length);var o=i.position;if(1===a)return j(i.byteArray,o+n[r].offset+8,n[r].length);for(var t=R(n,r,a),s=k(i.byteArray,t),d=0,f=r;f<r+a;f++)for(var l=o+n[f].offset+8,u=0;u<n[f].length;u++)s[d++]=i.byteArray[l++];return s}var H=function(e,t){for(var r=0;r<e.length;r++)if(e[r].offset===t)return r},Q=function(e,t,r,a){if(e===t.length-1)return r.length-a;for(var n=t[e+1],i=a+1;i<r.length;i++)if(r[i].offset===n)return i-a;throw"dicomParser.calculateNumberOfFragmentsForFrame: could not find fragment with offset matching basic offset table"};function W(e,t,r,a,n){if(a=a||t.basicOffsetTable,n=n||t.fragments,void 0===e)throw"dicomParser.readEncapsulatedImageFrame: missing required parameter 'dataSet'";if(void 0===t)throw"dicomParser.readEncapsulatedImageFrame: missing required parameter 'pixelDataElement'";if(void 0===r)throw"dicomParser.readEncapsulatedImageFrame: missing required parameter 'frameIndex'";if(void 0===a)throw"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' does not have basicOffsetTable";if("x7fe00010"!==t.tag)throw"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to non pixel data tag (expected tag = x7fe00010)";if(!0!==t.encapsulatedPixelData)throw"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to pixel data element that does not have encapsulated pixel data";if(!0!==t.hadUndefinedLength)throw"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to pixel data element that does not have undefined length";if(void 0===t.fragments)throw"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to pixel data element that does not have fragments";if(0===a.length)throw"dicomParser.readEncapsulatedImageFrame: basicOffsetTable has zero entries";if(r<0)throw"dicomParser.readEncapsulatedImageFrame: parameter 'frameIndex' must be >= 0";if(r>=a.length)throw"dicomParser.readEncapsulatedImageFrame: parameter 'frameIndex' must be < basicOffsetTable.length";var i=a[r],i=H(n,i);if(void 0===i)throw"dicomParser.readEncapsulatedImageFrame: unable to find fragment that matches basic offset table entry";return _(e,t,i,Q(r,a,n,i),n)}var $=!1;function K(e,t,r){if($||($=!0,console&&console.log&&console.log("WARNING: dicomParser.readEncapsulatedPixelData() has been deprecated")),void 0===e)throw"dicomParser.readEncapsulatedPixelData: missing required parameter 'dataSet'";if(void 0===t)throw"dicomParser.readEncapsulatedPixelData: missing required parameter 'element'";if(void 0===r)throw"dicomParser.readEncapsulatedPixelData: missing required parameter 'frame'";if("x7fe00010"!==t.tag)throw"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to non pixel data tag (expected tag = x7fe00010)";if(!0!==t.encapsulatedPixelData)throw"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to pixel data element that does not have encapsulated pixel data";if(!0!==t.hadUndefinedLength)throw"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to pixel data element that does not have encapsulated pixel data";if(void 0===t.basicOffsetTable)throw"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to pixel data element that does not have encapsulated pixel data";if(void 0===t.fragments)throw"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to pixel data element that does not have encapsulated pixel data";if(r<0)throw"dicomParser.readEncapsulatedPixelData: parameter 'frame' must be >= 0";return 0!==t.basicOffsetTable.length?W(e,t,r):_(e,t,0,t.fragments.length)}t.default={isStringVr:d,isPrivateTag:f,parsePN:a,parseTM:n,parseDA:o,explicitElementToString:l,explicitDataSetToJS:u,createJPEGBasicOffsetTable:p,parseDicomDataSetExplicit:q,parseDicomDataSetImplicit:T,readFixedString:b,alloc:k,version:L,bigEndianByteArrayParser:N,ByteStream:J,sharedCopy:j,DataSet:w,findAndSetUNElementLength:y,findEndOfEncapsulatedElement:g,findItemDelimitationItemAndSetElementLength:x,littleEndianByteArrayParser:M,parseDicom:V,readDicomElementExplicit:B,readDicomElementImplicit:A,readEncapsulatedImageFrame:W,readEncapsulatedPixelData:K,readEncapsulatedPixelDataFromFragments:_,readPart10Header:G,readSequenceItemsExplicit:I,readSequenceItemsImplicit:F,readSequenceItem:S,readTag:h,LEI:"1.2.840.10008.1.2",LEE:"1.2.840.10008.1.2.1"}}],i={},n.m=a,n.c=i,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var a in t)n.d(r,a,function(e){return t[e]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1);function n(e){if(i[e])return i[e].exports;var t=i[e]={i:e,l:!1,exports:{}};return a[e].call(t.exports,t,t.exports,n),t.l=!0,t.exports}var a,i});
//# sourceMappingURL=dicomParser.min.js.map

/***/ }),

/***/ 840:
/***/ ((module, exports, __webpack_require__) => {

var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v2.0.7 - 2016-04-22
 * http://hammerjs.github.io/
 *
 * Copyright (c) 2016 Jorik Tangelder;
 * Licensed under the MIT license */
(function(window, document, exportName, undefined) {
  'use strict';

var VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];
var TEST_ELEMENT = document.createElement('div');

var TYPE_FUNCTION = 'function';

var round = Math.round;
var abs = Math.abs;
var now = Date.now;

/**
 * set a timeout with a given scope
 * @param {Function} fn
 * @param {Number} timeout
 * @param {Object} context
 * @returns {number}
 */
function setTimeoutContext(fn, timeout, context) {
    return setTimeout(bindFn(fn, context), timeout);
}

/**
 * if the argument is an array, we want to execute the fn on each entry
 * if it aint an array we don't want to do a thing.
 * this is used by all the methods that accept a single and array argument.
 * @param {*|Array} arg
 * @param {String} fn
 * @param {Object} [context]
 * @returns {Boolean}
 */
function invokeArrayArg(arg, fn, context) {
    if (Array.isArray(arg)) {
        each(arg, context[fn], context);
        return true;
    }
    return false;
}

/**
 * walk objects and arrays
 * @param {Object} obj
 * @param {Function} iterator
 * @param {Object} context
 */
function each(obj, iterator, context) {
    var i;

    if (!obj) {
        return;
    }

    if (obj.forEach) {
        obj.forEach(iterator, context);
    } else if (obj.length !== undefined) {
        i = 0;
        while (i < obj.length) {
            iterator.call(context, obj[i], i, obj);
            i++;
        }
    } else {
        for (i in obj) {
            obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);
        }
    }
}

/**
 * wrap a method with a deprecation warning and stack trace
 * @param {Function} method
 * @param {String} name
 * @param {String} message
 * @returns {Function} A new function wrapping the supplied method.
 */
function deprecate(method, name, message) {
    var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\n' + message + ' AT \n';
    return function() {
        var e = new Error('get-stack-trace');
        var stack = e && e.stack ? e.stack.replace(/^[^\(]+?[\n$]/gm, '')
            .replace(/^\s+at\s+/gm, '')
            .replace(/^Object.<anonymous>\s*\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';

        var log = window.console && (window.console.warn || window.console.log);
        if (log) {
            log.call(window.console, deprecationMessage, stack);
        }
        return method.apply(this, arguments);
    };
}

/**
 * extend object.
 * means that properties in dest will be overwritten by the ones in src.
 * @param {Object} target
 * @param {...Object} objects_to_assign
 * @returns {Object} target
 */
var assign;
if (typeof Object.assign !== 'function') {
    assign = function assign(target) {
        if (target === undefined || target === null) {
            throw new TypeError('Cannot convert undefined or null to object');
        }

        var output = Object(target);
        for (var index = 1; index < arguments.length; index++) {
            var source = arguments[index];
            if (source !== undefined && source !== null) {
                for (var nextKey in source) {
                    if (source.hasOwnProperty(nextKey)) {
                        output[nextKey] = source[nextKey];
                    }
                }
            }
        }
        return output;
    };
} else {
    assign = Object.assign;
}

/**
 * extend object.
 * means that properties in dest will be overwritten by the ones in src.
 * @param {Object} dest
 * @param {Object} src
 * @param {Boolean} [merge=false]
 * @returns {Object} dest
 */
var extend = deprecate(function extend(dest, src, merge) {
    var keys = Object.keys(src);
    var i = 0;
    while (i < keys.length) {
        if (!merge || (merge && dest[keys[i]] === undefined)) {
            dest[keys[i]] = src[keys[i]];
        }
        i++;
    }
    return dest;
}, 'extend', 'Use `assign`.');

/**
 * merge the values from src in the dest.
 * means that properties that exist in dest will not be overwritten by src
 * @param {Object} dest
 * @param {Object} src
 * @returns {Object} dest
 */
var merge = deprecate(function merge(dest, src) {
    return extend(dest, src, true);
}, 'merge', 'Use `assign`.');

/**
 * simple class inheritance
 * @param {Function} child
 * @param {Function} base
 * @param {Object} [properties]
 */
function inherit(child, base, properties) {
    var baseP = base.prototype,
        childP;

    childP = child.prototype = Object.create(baseP);
    childP.constructor = child;
    childP._super = baseP;

    if (properties) {
        assign(childP, properties);
    }
}

/**
 * simple function bind
 * @param {Function} fn
 * @param {Object} context
 * @returns {Function}
 */
function bindFn(fn, context) {
    return function boundFn() {
        return fn.apply(context, arguments);
    };
}

/**
 * let a boolean value also be a function that must return a boolean
 * this first item in args will be used as the context
 * @param {Boolean|Function} val
 * @param {Array} [args]
 * @returns {Boolean}
 */
function boolOrFn(val, args) {
    if (typeof val == TYPE_FUNCTION) {
        return val.apply(args ? args[0] || undefined : undefined, args);
    }
    return val;
}

/**
 * use the val2 when val1 is undefined
 * @param {*} val1
 * @param {*} val2
 * @returns {*}
 */
function ifUndefined(val1, val2) {
    return (val1 === undefined) ? val2 : val1;
}

/**
 * addEventListener with multiple events at once
 * @param {EventTarget} target
 * @param {String} types
 * @param {Function} handler
 */
function addEventListeners(target, types, handler) {
    each(splitStr(types), function(type) {
        target.addEventListener(type, handler, false);
    });
}

/**
 * removeEventListener with multiple events at once
 * @param {EventTarget} target
 * @param {String} types
 * @param {Function} handler
 */
function removeEventListeners(target, types, handler) {
    each(splitStr(types), function(type) {
        target.removeEventListener(type, handler, false);
    });
}

/**
 * find if a node is in the given parent
 * @method hasParent
 * @param {HTMLElement} node
 * @param {HTMLElement} parent
 * @return {Boolean} found
 */
function hasParent(node, parent) {
    while (node) {
        if (node == parent) {
            return true;
        }
        node = node.parentNode;
    }
    return false;
}

/**
 * small indexOf wrapper
 * @param {String} str
 * @param {String} find
 * @returns {Boolean} found
 */
function inStr(str, find) {
    return str.indexOf(find) > -1;
}

/**
 * split string on whitespace
 * @param {String} str
 * @returns {Array} words
 */
function splitStr(str) {
    return str.trim().split(/\s+/g);
}

/**
 * find if a array contains the object using indexOf or a simple polyFill
 * @param {Array} src
 * @param {String} find
 * @param {String} [findByKey]
 * @return {Boolean|Number} false when not found, or the index
 */
function inArray(src, find, findByKey) {
    if (src.indexOf && !findByKey) {
        return src.indexOf(find);
    } else {
        var i = 0;
        while (i < src.length) {
            if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {
                return i;
            }
            i++;
        }
        return -1;
    }
}

/**
 * convert array-like objects to real arrays
 * @param {Object} obj
 * @returns {Array}
 */
function toArray(obj) {
    return Array.prototype.slice.call(obj, 0);
}

/**
 * unique array with objects based on a key (like 'id') or just by the array's value
 * @param {Array} src [{id:1},{id:2},{id:1}]
 * @param {String} [key]
 * @param {Boolean} [sort=False]
 * @returns {Array} [{id:1},{id:2}]
 */
function uniqueArray(src, key, sort) {
    var results = [];
    var values = [];
    var i = 0;

    while (i < src.length) {
        var val = key ? src[i][key] : src[i];
        if (inArray(values, val) < 0) {
            results.push(src[i]);
        }
        values[i] = val;
        i++;
    }

    if (sort) {
        if (!key) {
            results = results.sort();
        } else {
            results = results.sort(function sortUniqueArray(a, b) {
                return a[key] > b[key];
            });
        }
    }

    return results;
}

/**
 * get the prefixed property
 * @param {Object} obj
 * @param {String} property
 * @returns {String|Undefined} prefixed
 */
function prefixed(obj, property) {
    var prefix, prop;
    var camelProp = property[0].toUpperCase() + property.slice(1);

    var i = 0;
    while (i < VENDOR_PREFIXES.length) {
        prefix = VENDOR_PREFIXES[i];
        prop = (prefix) ? prefix + camelProp : property;

        if (prop in obj) {
            return prop;
        }
        i++;
    }
    return undefined;
}

/**
 * get a unique id
 * @returns {number} uniqueId
 */
var _uniqueId = 1;
function uniqueId() {
    return _uniqueId++;
}

/**
 * get the window object of an element
 * @param {HTMLElement} element
 * @returns {DocumentView|Window}
 */
function getWindowForElement(element) {
    var doc = element.ownerDocument || element;
    return (doc.defaultView || doc.parentWindow || window);
}

var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;

var SUPPORT_TOUCH = ('ontouchstart' in window);
var SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;
var SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);

var INPUT_TYPE_TOUCH = 'touch';
var INPUT_TYPE_PEN = 'pen';
var INPUT_TYPE_MOUSE = 'mouse';
var INPUT_TYPE_KINECT = 'kinect';

var COMPUTE_INTERVAL = 25;

var INPUT_START = 1;
var INPUT_MOVE = 2;
var INPUT_END = 4;
var INPUT_CANCEL = 8;

var DIRECTION_NONE = 1;
var DIRECTION_LEFT = 2;
var DIRECTION_RIGHT = 4;
var DIRECTION_UP = 8;
var DIRECTION_DOWN = 16;

var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;
var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;
var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;

var PROPS_XY = ['x', 'y'];
var PROPS_CLIENT_XY = ['clientX', 'clientY'];

/**
 * create new input type manager
 * @param {Manager} manager
 * @param {Function} callback
 * @returns {Input}
 * @constructor
 */
function Input(manager, callback) {
    var self = this;
    this.manager = manager;
    this.callback = callback;
    this.element = manager.element;
    this.target = manager.options.inputTarget;

    // smaller wrapper around the handler, for the scope and the enabled state of the manager,
    // so when disabled the input events are completely bypassed.
    this.domHandler = function(ev) {
        if (boolOrFn(manager.options.enable, [manager])) {
            self.handler(ev);
        }
    };

    this.init();

}

Input.prototype = {
    /**
     * should handle the inputEvent data and trigger the callback
     * @virtual
     */
    handler: function() { },

    /**
     * bind the events
     */
    init: function() {
        this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);
        this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);
        this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);
    },

    /**
     * unbind the events
     */
    destroy: function() {
        this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);
        this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);
        this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);
    }
};

/**
 * create new input type manager
 * called by the Manager constructor
 * @param {Hammer} manager
 * @returns {Input}
 */
function createInputInstance(manager) {
    var Type;
    var inputClass = manager.options.inputClass;

    if (inputClass) {
        Type = inputClass;
    } else if (SUPPORT_POINTER_EVENTS) {
        Type = PointerEventInput;
    } else if (SUPPORT_ONLY_TOUCH) {
        Type = TouchInput;
    } else if (!SUPPORT_TOUCH) {
        Type = MouseInput;
    } else {
        Type = TouchMouseInput;
    }
    return new (Type)(manager, inputHandler);
}

/**
 * handle input events
 * @param {Manager} manager
 * @param {String} eventType
 * @param {Object} input
 */
function inputHandler(manager, eventType, input) {
    var pointersLen = input.pointers.length;
    var changedPointersLen = input.changedPointers.length;
    var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));
    var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));

    input.isFirst = !!isFirst;
    input.isFinal = !!isFinal;

    if (isFirst) {
        manager.session = {};
    }

    // source event is the normalized value of the domEvents
    // like 'touchstart, mouseup, pointerdown'
    input.eventType = eventType;

    // compute scale, rotation etc
    computeInputData(manager, input);

    // emit secret event
    manager.emit('hammer.input', input);

    manager.recognize(input);
    manager.session.prevInput = input;
}

/**
 * extend the data with some usable properties like scale, rotate, velocity etc
 * @param {Object} manager
 * @param {Object} input
 */
function computeInputData(manager, input) {
    var session = manager.session;
    var pointers = input.pointers;
    var pointersLength = pointers.length;

    // store the first input to calculate the distance and direction
    if (!session.firstInput) {
        session.firstInput = simpleCloneInputData(input);
    }

    // to compute scale and rotation we need to store the multiple touches
    if (pointersLength > 1 && !session.firstMultiple) {
        session.firstMultiple = simpleCloneInputData(input);
    } else if (pointersLength === 1) {
        session.firstMultiple = false;
    }

    var firstInput = session.firstInput;
    var firstMultiple = session.firstMultiple;
    var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;

    var center = input.center = getCenter(pointers);
    input.timeStamp = now();
    input.deltaTime = input.timeStamp - firstInput.timeStamp;

    input.angle = getAngle(offsetCenter, center);
    input.distance = getDistance(offsetCenter, center);

    computeDeltaXY(session, input);
    input.offsetDirection = getDirection(input.deltaX, input.deltaY);

    var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);
    input.overallVelocityX = overallVelocity.x;
    input.overallVelocityY = overallVelocity.y;
    input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;

    input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;
    input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;

    input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >
        session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);

    computeIntervalInputData(session, input);

    // find the correct target
    var target = manager.element;
    if (hasParent(input.srcEvent.target, target)) {
        target = input.srcEvent.target;
    }
    input.target = target;
}

function computeDeltaXY(session, input) {
    var center = input.center;
    var offset = session.offsetDelta || {};
    var prevDelta = session.prevDelta || {};
    var prevInput = session.prevInput || {};

    if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {
        prevDelta = session.prevDelta = {
            x: prevInput.deltaX || 0,
            y: prevInput.deltaY || 0
        };

        offset = session.offsetDelta = {
            x: center.x,
            y: center.y
        };
    }

    input.deltaX = prevDelta.x + (center.x - offset.x);
    input.deltaY = prevDelta.y + (center.y - offset.y);
}

/**
 * velocity is calculated every x ms
 * @param {Object} session
 * @param {Object} input
 */
function computeIntervalInputData(session, input) {
    var last = session.lastInterval || input,
        deltaTime = input.timeStamp - last.timeStamp,
        velocity, velocityX, velocityY, direction;

    if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {
        var deltaX = input.deltaX - last.deltaX;
        var deltaY = input.deltaY - last.deltaY;

        var v = getVelocity(deltaTime, deltaX, deltaY);
        velocityX = v.x;
        velocityY = v.y;
        velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;
        direction = getDirection(deltaX, deltaY);

        session.lastInterval = input;
    } else {
        // use latest velocity info if it doesn't overtake a minimum period
        velocity = last.velocity;
        velocityX = last.velocityX;
        velocityY = last.velocityY;
        direction = last.direction;
    }

    input.velocity = velocity;
    input.velocityX = velocityX;
    input.velocityY = velocityY;
    input.direction = direction;
}

/**
 * create a simple clone from the input used for storage of firstInput and firstMultiple
 * @param {Object} input
 * @returns {Object} clonedInputData
 */
function simpleCloneInputData(input) {
    // make a simple copy of the pointers because we will get a reference if we don't
    // we only need clientXY for the calculations
    var pointers = [];
    var i = 0;
    while (i < input.pointers.length) {
        pointers[i] = {
            clientX: round(input.pointers[i].clientX),
            clientY: round(input.pointers[i].clientY)
        };
        i++;
    }

    return {
        timeStamp: now(),
        pointers: pointers,
        center: getCenter(pointers),
        deltaX: input.deltaX,
        deltaY: input.deltaY
    };
}

/**
 * get the center of all the pointers
 * @param {Array} pointers
 * @return {Object} center contains `x` and `y` properties
 */
function getCenter(pointers) {
    var pointersLength = pointers.length;

    // no need to loop when only one touch
    if (pointersLength === 1) {
        return {
            x: round(pointers[0].clientX),
            y: round(pointers[0].clientY)
        };
    }

    var x = 0, y = 0, i = 0;
    while (i < pointersLength) {
        x += pointers[i].clientX;
        y += pointers[i].clientY;
        i++;
    }

    return {
        x: round(x / pointersLength),
        y: round(y / pointersLength)
    };
}

/**
 * calculate the velocity between two points. unit is in px per ms.
 * @param {Number} deltaTime
 * @param {Number} x
 * @param {Number} y
 * @return {Object} velocity `x` and `y`
 */
function getVelocity(deltaTime, x, y) {
    return {
        x: x / deltaTime || 0,
        y: y / deltaTime || 0
    };
}

/**
 * get the direction between two points
 * @param {Number} x
 * @param {Number} y
 * @return {Number} direction
 */
function getDirection(x, y) {
    if (x === y) {
        return DIRECTION_NONE;
    }

    if (abs(x) >= abs(y)) {
        return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;
    }
    return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;
}

/**
 * calculate the absolute distance between two points
 * @param {Object} p1 {x, y}
 * @param {Object} p2 {x, y}
 * @param {Array} [props] containing x and y keys
 * @return {Number} distance
 */
function getDistance(p1, p2, props) {
    if (!props) {
        props = PROPS_XY;
    }
    var x = p2[props[0]] - p1[props[0]],
        y = p2[props[1]] - p1[props[1]];

    return Math.sqrt((x * x) + (y * y));
}

/**
 * calculate the angle between two coordinates
 * @param {Object} p1
 * @param {Object} p2
 * @param {Array} [props] containing x and y keys
 * @return {Number} angle
 */
function getAngle(p1, p2, props) {
    if (!props) {
        props = PROPS_XY;
    }
    var x = p2[props[0]] - p1[props[0]],
        y = p2[props[1]] - p1[props[1]];
    return Math.atan2(y, x) * 180 / Math.PI;
}

/**
 * calculate the rotation degrees between two pointersets
 * @param {Array} start array of pointers
 * @param {Array} end array of pointers
 * @return {Number} rotation
 */
function getRotation(start, end) {
    return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);
}

/**
 * calculate the scale factor between two pointersets
 * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out
 * @param {Array} start array of pointers
 * @param {Array} end array of pointers
 * @return {Number} scale
 */
function getScale(start, end) {
    return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);
}

var MOUSE_INPUT_MAP = {
    mousedown: INPUT_START,
    mousemove: INPUT_MOVE,
    mouseup: INPUT_END
};

var MOUSE_ELEMENT_EVENTS = 'mousedown';
var MOUSE_WINDOW_EVENTS = 'mousemove mouseup';

/**
 * Mouse events input
 * @constructor
 * @extends Input
 */
function MouseInput() {
    this.evEl = MOUSE_ELEMENT_EVENTS;
    this.evWin = MOUSE_WINDOW_EVENTS;

    this.pressed = false; // mousedown state

    Input.apply(this, arguments);
}

inherit(MouseInput, Input, {
    /**
     * handle mouse events
     * @param {Object} ev
     */
    handler: function MEhandler(ev) {
        var eventType = MOUSE_INPUT_MAP[ev.type];

        // on start we want to have the left mouse button down
        if (eventType & INPUT_START && ev.button === 0) {
            this.pressed = true;
        }

        if (eventType & INPUT_MOVE && ev.which !== 1) {
            eventType = INPUT_END;
        }

        // mouse must be down
        if (!this.pressed) {
            return;
        }

        if (eventType & INPUT_END) {
            this.pressed = false;
        }

        this.callback(this.manager, eventType, {
            pointers: [ev],
            changedPointers: [ev],
            pointerType: INPUT_TYPE_MOUSE,
            srcEvent: ev
        });
    }
});

var POINTER_INPUT_MAP = {
    pointerdown: INPUT_START,
    pointermove: INPUT_MOVE,
    pointerup: INPUT_END,
    pointercancel: INPUT_CANCEL,
    pointerout: INPUT_CANCEL
};

// in IE10 the pointer types is defined as an enum
var IE10_POINTER_TYPE_ENUM = {
    2: INPUT_TYPE_TOUCH,
    3: INPUT_TYPE_PEN,
    4: INPUT_TYPE_MOUSE,
    5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816
};

var POINTER_ELEMENT_EVENTS = 'pointerdown';
var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';

// IE10 has prefixed support, and case-sensitive
if (window.MSPointerEvent && !window.PointerEvent) {
    POINTER_ELEMENT_EVENTS = 'MSPointerDown';
    POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';
}

/**
 * Pointer events input
 * @constructor
 * @extends Input
 */
function PointerEventInput() {
    this.evEl = POINTER_ELEMENT_EVENTS;
    this.evWin = POINTER_WINDOW_EVENTS;

    Input.apply(this, arguments);

    this.store = (this.manager.session.pointerEvents = []);
}

inherit(PointerEventInput, Input, {
    /**
     * handle mouse events
     * @param {Object} ev
     */
    handler: function PEhandler(ev) {
        var store = this.store;
        var removePointer = false;

        var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');
        var eventType = POINTER_INPUT_MAP[eventTypeNormalized];
        var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;

        var isTouch = (pointerType == INPUT_TYPE_TOUCH);

        // get index of the event in the store
        var storeIndex = inArray(store, ev.pointerId, 'pointerId');

        // start and mouse must be down
        if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {
            if (storeIndex < 0) {
                store.push(ev);
                storeIndex = store.length - 1;
            }
        } else if (eventType & (INPUT_END | INPUT_CANCEL)) {
            removePointer = true;
        }

        // it not found, so the pointer hasn't been down (so it's probably a hover)
        if (storeIndex < 0) {
            return;
        }

        // update the event in the store
        store[storeIndex] = ev;

        this.callback(this.manager, eventType, {
            pointers: store,
            changedPointers: [ev],
            pointerType: pointerType,
            srcEvent: ev
        });

        if (removePointer) {
            // remove from the store
            store.splice(storeIndex, 1);
        }
    }
});

var SINGLE_TOUCH_INPUT_MAP = {
    touchstart: INPUT_START,
    touchmove: INPUT_MOVE,
    touchend: INPUT_END,
    touchcancel: INPUT_CANCEL
};

var SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';
var SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';

/**
 * Touch events input
 * @constructor
 * @extends Input
 */
function SingleTouchInput() {
    this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;
    this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;
    this.started = false;

    Input.apply(this, arguments);
}

inherit(SingleTouchInput, Input, {
    handler: function TEhandler(ev) {
        var type = SINGLE_TOUCH_INPUT_MAP[ev.type];

        // should we handle the touch events?
        if (type === INPUT_START) {
            this.started = true;
        }

        if (!this.started) {
            return;
        }

        var touches = normalizeSingleTouches.call(this, ev, type);

        // when done, reset the started state
        if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {
            this.started = false;
        }

        this.callback(this.manager, type, {
            pointers: touches[0],
            changedPointers: touches[1],
            pointerType: INPUT_TYPE_TOUCH,
            srcEvent: ev
        });
    }
});

/**
 * @this {TouchInput}
 * @param {Object} ev
 * @param {Number} type flag
 * @returns {undefined|Array} [all, changed]
 */
function normalizeSingleTouches(ev, type) {
    var all = toArray(ev.touches);
    var changed = toArray(ev.changedTouches);

    if (type & (INPUT_END | INPUT_CANCEL)) {
        all = uniqueArray(all.concat(changed), 'identifier', true);
    }

    return [all, changed];
}

var TOUCH_INPUT_MAP = {
    touchstart: INPUT_START,
    touchmove: INPUT_MOVE,
    touchend: INPUT_END,
    touchcancel: INPUT_CANCEL
};

var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';

/**
 * Multi-user touch events input
 * @constructor
 * @extends Input
 */
function TouchInput() {
    this.evTarget = TOUCH_TARGET_EVENTS;
    this.targetIds = {};

    Input.apply(this, arguments);
}

inherit(TouchInput, Input, {
    handler: function MTEhandler(ev) {
        var type = TOUCH_INPUT_MAP[ev.type];
        var touches = getTouches.call(this, ev, type);
        if (!touches) {
            return;
        }

        this.callback(this.manager, type, {
            pointers: touches[0],
            changedPointers: touches[1],
            pointerType: INPUT_TYPE_TOUCH,
            srcEvent: ev
        });
    }
});

/**
 * @this {TouchInput}
 * @param {Object} ev
 * @param {Number} type flag
 * @returns {undefined|Array} [all, changed]
 */
function getTouches(ev, type) {
    var allTouches = toArray(ev.touches);
    var targetIds = this.targetIds;

    // when there is only one touch, the process can be simplified
    if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {
        targetIds[allTouches[0].identifier] = true;
        return [allTouches, allTouches];
    }

    var i,
        targetTouches,
        changedTouches = toArray(ev.changedTouches),
        changedTargetTouches = [],
        target = this.target;

    // get target touches from touches
    targetTouches = allTouches.filter(function(touch) {
        return hasParent(touch.target, target);
    });

    // collect touches
    if (type === INPUT_START) {
        i = 0;
        while (i < targetTouches.length) {
            targetIds[targetTouches[i].identifier] = true;
            i++;
        }
    }

    // filter changed touches to only contain touches that exist in the collected target ids
    i = 0;
    while (i < changedTouches.length) {
        if (targetIds[changedTouches[i].identifier]) {
            changedTargetTouches.push(changedTouches[i]);
        }

        // cleanup removed touches
        if (type & (INPUT_END | INPUT_CANCEL)) {
            delete targetIds[changedTouches[i].identifier];
        }
        i++;
    }

    if (!changedTargetTouches.length) {
        return;
    }

    return [
        // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'
        uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),
        changedTargetTouches
    ];
}

/**
 * Combined touch and mouse input
 *
 * Touch has a higher priority then mouse, and while touching no mouse events are allowed.
 * This because touch devices also emit mouse events while doing a touch.
 *
 * @constructor
 * @extends Input
 */

var DEDUP_TIMEOUT = 2500;
var DEDUP_DISTANCE = 25;

function TouchMouseInput() {
    Input.apply(this, arguments);

    var handler = bindFn(this.handler, this);
    this.touch = new TouchInput(this.manager, handler);
    this.mouse = new MouseInput(this.manager, handler);

    this.primaryTouch = null;
    this.lastTouches = [];
}

inherit(TouchMouseInput, Input, {
    /**
     * handle mouse and touch events
     * @param {Hammer} manager
     * @param {String} inputEvent
     * @param {Object} inputData
     */
    handler: function TMEhandler(manager, inputEvent, inputData) {
        var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),
            isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);

        if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {
            return;
        }

        // when we're in a touch event, record touches to  de-dupe synthetic mouse event
        if (isTouch) {
            recordTouches.call(this, inputEvent, inputData);
        } else if (isMouse && isSyntheticEvent.call(this, inputData)) {
            return;
        }

        this.callback(manager, inputEvent, inputData);
    },

    /**
     * remove the event listeners
     */
    destroy: function destroy() {
        this.touch.destroy();
        this.mouse.destroy();
    }
});

function recordTouches(eventType, eventData) {
    if (eventType & INPUT_START) {
        this.primaryTouch = eventData.changedPointers[0].identifier;
        setLastTouch.call(this, eventData);
    } else if (eventType & (INPUT_END | INPUT_CANCEL)) {
        setLastTouch.call(this, eventData);
    }
}

function setLastTouch(eventData) {
    var touch = eventData.changedPointers[0];

    if (touch.identifier === this.primaryTouch) {
        var lastTouch = {x: touch.clientX, y: touch.clientY};
        this.lastTouches.push(lastTouch);
        var lts = this.lastTouches;
        var removeLastTouch = function() {
            var i = lts.indexOf(lastTouch);
            if (i > -1) {
                lts.splice(i, 1);
            }
        };
        setTimeout(removeLastTouch, DEDUP_TIMEOUT);
    }
}

function isSyntheticEvent(eventData) {
    var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;
    for (var i = 0; i < this.lastTouches.length; i++) {
        var t = this.lastTouches[i];
        var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);
        if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {
            return true;
        }
    }
    return false;
}

var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');
var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;

// magical touchAction value
var TOUCH_ACTION_COMPUTE = 'compute';
var TOUCH_ACTION_AUTO = 'auto';
var TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented
var TOUCH_ACTION_NONE = 'none';
var TOUCH_ACTION_PAN_X = 'pan-x';
var TOUCH_ACTION_PAN_Y = 'pan-y';
var TOUCH_ACTION_MAP = getTouchActionProps();

/**
 * Touch Action
 * sets the touchAction property or uses the js alternative
 * @param {Manager} manager
 * @param {String} value
 * @constructor
 */
function TouchAction(manager, value) {
    this.manager = manager;
    this.set(value);
}

TouchAction.prototype = {
    /**
     * set the touchAction value on the element or enable the polyfill
     * @param {String} value
     */
    set: function(value) {
        // find out the touch-action by the event handlers
        if (value == TOUCH_ACTION_COMPUTE) {
            value = this.compute();
        }

        if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {
            this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;
        }
        this.actions = value.toLowerCase().trim();
    },

    /**
     * just re-set the touchAction value
     */
    update: function() {
        this.set(this.manager.options.touchAction);
    },

    /**
     * compute the value for the touchAction property based on the recognizer's settings
     * @returns {String} value
     */
    compute: function() {
        var actions = [];
        each(this.manager.recognizers, function(recognizer) {
            if (boolOrFn(recognizer.options.enable, [recognizer])) {
                actions = actions.concat(recognizer.getTouchAction());
            }
        });
        return cleanTouchActions(actions.join(' '));
    },

    /**
     * this method is called on each input cycle and provides the preventing of the browser behavior
     * @param {Object} input
     */
    preventDefaults: function(input) {
        var srcEvent = input.srcEvent;
        var direction = input.offsetDirection;

        // if the touch action did prevented once this session
        if (this.manager.session.prevented) {
            srcEvent.preventDefault();
            return;
        }

        var actions = this.actions;
        var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];
        var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];
        var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];

        if (hasNone) {
            //do not prevent defaults if this is a tap gesture

            var isTapPointer = input.pointers.length === 1;
            var isTapMovement = input.distance < 2;
            var isTapTouchTime = input.deltaTime < 250;

            if (isTapPointer && isTapMovement && isTapTouchTime) {
                return;
            }
        }

        if (hasPanX && hasPanY) {
            // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent
            return;
        }

        if (hasNone ||
            (hasPanY && direction & DIRECTION_HORIZONTAL) ||
            (hasPanX && direction & DIRECTION_VERTICAL)) {
            return this.preventSrc(srcEvent);
        }
    },

    /**
     * call preventDefault to prevent the browser's default behavior (scrolling in most cases)
     * @param {Object} srcEvent
     */
    preventSrc: function(srcEvent) {
        this.manager.session.prevented = true;
        srcEvent.preventDefault();
    }
};

/**
 * when the touchActions are collected they are not a valid value, so we need to clean things up. *
 * @param {String} actions
 * @returns {*}
 */
function cleanTouchActions(actions) {
    // none
    if (inStr(actions, TOUCH_ACTION_NONE)) {
        return TOUCH_ACTION_NONE;
    }

    var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);
    var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);

    // if both pan-x and pan-y are set (different recognizers
    // for different directions, e.g. horizontal pan but vertical swipe?)
    // we need none (as otherwise with pan-x pan-y combined none of these
    // recognizers will work, since the browser would handle all panning
    if (hasPanX && hasPanY) {
        return TOUCH_ACTION_NONE;
    }

    // pan-x OR pan-y
    if (hasPanX || hasPanY) {
        return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;
    }

    // manipulation
    if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {
        return TOUCH_ACTION_MANIPULATION;
    }

    return TOUCH_ACTION_AUTO;
}

function getTouchActionProps() {
    if (!NATIVE_TOUCH_ACTION) {
        return false;
    }
    var touchMap = {};
    var cssSupports = window.CSS && window.CSS.supports;
    ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {

        // If css.supports is not supported but there is native touch-action assume it supports
        // all values. This is the case for IE 10 and 11.
        touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;
    });
    return touchMap;
}

/**
 * Recognizer flow explained; *
 * All recognizers have the initial state of POSSIBLE when a input session starts.
 * The definition of a input session is from the first input until the last input, with all it's movement in it. *
 * Example session for mouse-input: mousedown -> mousemove -> mouseup
 *
 * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed
 * which determines with state it should be.
 *
 * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to
 * POSSIBLE to give it another change on the next cycle.
 *
 *               Possible
 *                  |
 *            +-----+---------------+
 *            |                     |
 *      +-----+-----+               |
 *      |           |               |
 *   Failed      Cancelled          |
 *                          +-------+------+
 *                          |              |
 *                      Recognized       Began
 *                                         |
 *                                      Changed
 *                                         |
 *                                  Ended/Recognized
 */
var STATE_POSSIBLE = 1;
var STATE_BEGAN = 2;
var STATE_CHANGED = 4;
var STATE_ENDED = 8;
var STATE_RECOGNIZED = STATE_ENDED;
var STATE_CANCELLED = 16;
var STATE_FAILED = 32;

/**
 * Recognizer
 * Every recognizer needs to extend from this class.
 * @constructor
 * @param {Object} options
 */
function Recognizer(options) {
    this.options = assign({}, this.defaults, options || {});

    this.id = uniqueId();

    this.manager = null;

    // default is enable true
    this.options.enable = ifUndefined(this.options.enable, true);

    this.state = STATE_POSSIBLE;

    this.simultaneous = {};
    this.requireFail = [];
}

Recognizer.prototype = {
    /**
     * @virtual
     * @type {Object}
     */
    defaults: {},

    /**
     * set options
     * @param {Object} options
     * @return {Recognizer}
     */
    set: function(options) {
        assign(this.options, options);

        // also update the touchAction, in case something changed about the directions/enabled state
        this.manager && this.manager.touchAction.update();
        return this;
    },

    /**
     * recognize simultaneous with an other recognizer.
     * @param {Recognizer} otherRecognizer
     * @returns {Recognizer} this
     */
    recognizeWith: function(otherRecognizer) {
        if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {
            return this;
        }

        var simultaneous = this.simultaneous;
        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
        if (!simultaneous[otherRecognizer.id]) {
            simultaneous[otherRecognizer.id] = otherRecognizer;
            otherRecognizer.recognizeWith(this);
        }
        return this;
    },

    /**
     * drop the simultaneous link. it doesnt remove the link on the other recognizer.
     * @param {Recognizer} otherRecognizer
     * @returns {Recognizer} this
     */
    dropRecognizeWith: function(otherRecognizer) {
        if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {
            return this;
        }

        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
        delete this.simultaneous[otherRecognizer.id];
        return this;
    },

    /**
     * recognizer can only run when an other is failing
     * @param {Recognizer} otherRecognizer
     * @returns {Recognizer} this
     */
    requireFailure: function(otherRecognizer) {
        if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {
            return this;
        }

        var requireFail = this.requireFail;
        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
        if (inArray(requireFail, otherRecognizer) === -1) {
            requireFail.push(otherRecognizer);
            otherRecognizer.requireFailure(this);
        }
        return this;
    },

    /**
     * drop the requireFailure link. it does not remove the link on the other recognizer.
     * @param {Recognizer} otherRecognizer
     * @returns {Recognizer} this
     */
    dropRequireFailure: function(otherRecognizer) {
        if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {
            return this;
        }

        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
        var index = inArray(this.requireFail, otherRecognizer);
        if (index > -1) {
            this.requireFail.splice(index, 1);
        }
        return this;
    },

    /**
     * has require failures boolean
     * @returns {boolean}
     */
    hasRequireFailures: function() {
        return this.requireFail.length > 0;
    },

    /**
     * if the recognizer can recognize simultaneous with an other recognizer
     * @param {Recognizer} otherRecognizer
     * @returns {Boolean}
     */
    canRecognizeWith: function(otherRecognizer) {
        return !!this.simultaneous[otherRecognizer.id];
    },

    /**
     * You should use `tryEmit` instead of `emit` directly to check
     * that all the needed recognizers has failed before emitting.
     * @param {Object} input
     */
    emit: function(input) {
        var self = this;
        var state = this.state;

        function emit(event) {
            self.manager.emit(event, input);
        }

        // 'panstart' and 'panmove'
        if (state < STATE_ENDED) {
            emit(self.options.event + stateStr(state));
        }

        emit(self.options.event); // simple 'eventName' events

        if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)
            emit(input.additionalEvent);
        }

        // panend and pancancel
        if (state >= STATE_ENDED) {
            emit(self.options.event + stateStr(state));
        }
    },

    /**
     * Check that all the require failure recognizers has failed,
     * if true, it emits a gesture event,
     * otherwise, setup the state to FAILED.
     * @param {Object} input
     */
    tryEmit: function(input) {
        if (this.canEmit()) {
            return this.emit(input);
        }
        // it's failing anyway
        this.state = STATE_FAILED;
    },

    /**
     * can we emit?
     * @returns {boolean}
     */
    canEmit: function() {
        var i = 0;
        while (i < this.requireFail.length) {
            if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {
                return false;
            }
            i++;
        }
        return true;
    },

    /**
     * update the recognizer
     * @param {Object} inputData
     */
    recognize: function(inputData) {
        // make a new copy of the inputData
        // so we can change the inputData without messing up the other recognizers
        var inputDataClone = assign({}, inputData);

        // is is enabled and allow recognizing?
        if (!boolOrFn(this.options.enable, [this, inputDataClone])) {
            this.reset();
            this.state = STATE_FAILED;
            return;
        }

        // reset when we've reached the end
        if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {
            this.state = STATE_POSSIBLE;
        }

        this.state = this.process(inputDataClone);

        // the recognizer has recognized a gesture
        // so trigger an event
        if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {
            this.tryEmit(inputDataClone);
        }
    },

    /**
     * return the state of the recognizer
     * the actual recognizing happens in this method
     * @virtual
     * @param {Object} inputData
     * @returns {Const} STATE
     */
    process: function(inputData) { }, // jshint ignore:line

    /**
     * return the preferred touch-action
     * @virtual
     * @returns {Array}
     */
    getTouchAction: function() { },

    /**
     * called when the gesture isn't allowed to recognize
     * like when another is being recognized or it is disabled
     * @virtual
     */
    reset: function() { }
};

/**
 * get a usable string, used as event postfix
 * @param {Const} state
 * @returns {String} state
 */
function stateStr(state) {
    if (state & STATE_CANCELLED) {
        return 'cancel';
    } else if (state & STATE_ENDED) {
        return 'end';
    } else if (state & STATE_CHANGED) {
        return 'move';
    } else if (state & STATE_BEGAN) {
        return 'start';
    }
    return '';
}

/**
 * direction cons to string
 * @param {Const} direction
 * @returns {String}
 */
function directionStr(direction) {
    if (direction == DIRECTION_DOWN) {
        return 'down';
    } else if (direction == DIRECTION_UP) {
        return 'up';
    } else if (direction == DIRECTION_LEFT) {
        return 'left';
    } else if (direction == DIRECTION_RIGHT) {
        return 'right';
    }
    return '';
}

/**
 * get a recognizer by name if it is bound to a manager
 * @param {Recognizer|String} otherRecognizer
 * @param {Recognizer} recognizer
 * @returns {Recognizer}
 */
function getRecognizerByNameIfManager(otherRecognizer, recognizer) {
    var manager = recognizer.manager;
    if (manager) {
        return manager.get(otherRecognizer);
    }
    return otherRecognizer;
}

/**
 * This recognizer is just used as a base for the simple attribute recognizers.
 * @constructor
 * @extends Recognizer
 */
function AttrRecognizer() {
    Recognizer.apply(this, arguments);
}

inherit(AttrRecognizer, Recognizer, {
    /**
     * @namespace
     * @memberof AttrRecognizer
     */
    defaults: {
        /**
         * @type {Number}
         * @default 1
         */
        pointers: 1
    },

    /**
     * Used to check if it the recognizer receives valid input, like input.distance > 10.
     * @memberof AttrRecognizer
     * @param {Object} input
     * @returns {Boolean} recognized
     */
    attrTest: function(input) {
        var optionPointers = this.options.pointers;
        return optionPointers === 0 || input.pointers.length === optionPointers;
    },

    /**
     * Process the input and return the state for the recognizer
     * @memberof AttrRecognizer
     * @param {Object} input
     * @returns {*} State
     */
    process: function(input) {
        var state = this.state;
        var eventType = input.eventType;

        var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);
        var isValid = this.attrTest(input);

        // on cancel input and we've recognized before, return STATE_CANCELLED
        if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {
            return state | STATE_CANCELLED;
        } else if (isRecognized || isValid) {
            if (eventType & INPUT_END) {
                return state | STATE_ENDED;
            } else if (!(state & STATE_BEGAN)) {
                return STATE_BEGAN;
            }
            return state | STATE_CHANGED;
        }
        return STATE_FAILED;
    }
});

/**
 * Pan
 * Recognized when the pointer is down and moved in the allowed direction.
 * @constructor
 * @extends AttrRecognizer
 */
function PanRecognizer() {
    AttrRecognizer.apply(this, arguments);

    this.pX = null;
    this.pY = null;
}

inherit(PanRecognizer, AttrRecognizer, {
    /**
     * @namespace
     * @memberof PanRecognizer
     */
    defaults: {
        event: 'pan',
        threshold: 10,
        pointers: 1,
        direction: DIRECTION_ALL
    },

    getTouchAction: function() {
        var direction = this.options.direction;
        var actions = [];
        if (direction & DIRECTION_HORIZONTAL) {
            actions.push(TOUCH_ACTION_PAN_Y);
        }
        if (direction & DIRECTION_VERTICAL) {
            actions.push(TOUCH_ACTION_PAN_X);
        }
        return actions;
    },

    directionTest: function(input) {
        var options = this.options;
        var hasMoved = true;
        var distance = input.distance;
        var direction = input.direction;
        var x = input.deltaX;
        var y = input.deltaY;

        // lock to axis?
        if (!(direction & options.direction)) {
            if (options.direction & DIRECTION_HORIZONTAL) {
                direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;
                hasMoved = x != this.pX;
                distance = Math.abs(input.deltaX);
            } else {
                direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;
                hasMoved = y != this.pY;
                distance = Math.abs(input.deltaY);
            }
        }
        input.direction = direction;
        return hasMoved && distance > options.threshold && direction & options.direction;
    },

    attrTest: function(input) {
        return AttrRecognizer.prototype.attrTest.call(this, input) &&
            (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));
    },

    emit: function(input) {

        this.pX = input.deltaX;
        this.pY = input.deltaY;

        var direction = directionStr(input.direction);

        if (direction) {
            input.additionalEvent = this.options.event + direction;
        }
        this._super.emit.call(this, input);
    }
});

/**
 * Pinch
 * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).
 * @constructor
 * @extends AttrRecognizer
 */
function PinchRecognizer() {
    AttrRecognizer.apply(this, arguments);
}

inherit(PinchRecognizer, AttrRecognizer, {
    /**
     * @namespace
     * @memberof PinchRecognizer
     */
    defaults: {
        event: 'pinch',
        threshold: 0,
        pointers: 2
    },

    getTouchAction: function() {
        return [TOUCH_ACTION_NONE];
    },

    attrTest: function(input) {
        return this._super.attrTest.call(this, input) &&
            (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);
    },

    emit: function(input) {
        if (input.scale !== 1) {
            var inOut = input.scale < 1 ? 'in' : 'out';
            input.additionalEvent = this.options.event + inOut;
        }
        this._super.emit.call(this, input);
    }
});

/**
 * Press
 * Recognized when the pointer is down for x ms without any movement.
 * @constructor
 * @extends Recognizer
 */
function PressRecognizer() {
    Recognizer.apply(this, arguments);

    this._timer = null;
    this._input = null;
}

inherit(PressRecognizer, Recognizer, {
    /**
     * @namespace
     * @memberof PressRecognizer
     */
    defaults: {
        event: 'press',
        pointers: 1,
        time: 251, // minimal time of the pointer to be pressed
        threshold: 9 // a minimal movement is ok, but keep it low
    },

    getTouchAction: function() {
        return [TOUCH_ACTION_AUTO];
    },

    process: function(input) {
        var options = this.options;
        var validPointers = input.pointers.length === options.pointers;
        var validMovement = input.distance < options.threshold;
        var validTime = input.deltaTime > options.time;

        this._input = input;

        // we only allow little movement
        // and we've reached an end event, so a tap is possible
        if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {
            this.reset();
        } else if (input.eventType & INPUT_START) {
            this.reset();
            this._timer = setTimeoutContext(function() {
                this.state = STATE_RECOGNIZED;
                this.tryEmit();
            }, options.time, this);
        } else if (input.eventType & INPUT_END) {
            return STATE_RECOGNIZED;
        }
        return STATE_FAILED;
    },

    reset: function() {
        clearTimeout(this._timer);
    },

    emit: function(input) {
        if (this.state !== STATE_RECOGNIZED) {
            return;
        }

        if (input && (input.eventType & INPUT_END)) {
            this.manager.emit(this.options.event + 'up', input);
        } else {
            this._input.timeStamp = now();
            this.manager.emit(this.options.event, this._input);
        }
    }
});

/**
 * Rotate
 * Recognized when two or more pointer are moving in a circular motion.
 * @constructor
 * @extends AttrRecognizer
 */
function RotateRecognizer() {
    AttrRecognizer.apply(this, arguments);
}

inherit(RotateRecognizer, AttrRecognizer, {
    /**
     * @namespace
     * @memberof RotateRecognizer
     */
    defaults: {
        event: 'rotate',
        threshold: 0,
        pointers: 2
    },

    getTouchAction: function() {
        return [TOUCH_ACTION_NONE];
    },

    attrTest: function(input) {
        return this._super.attrTest.call(this, input) &&
            (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);
    }
});

/**
 * Swipe
 * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.
 * @constructor
 * @extends AttrRecognizer
 */
function SwipeRecognizer() {
    AttrRecognizer.apply(this, arguments);
}

inherit(SwipeRecognizer, AttrRecognizer, {
    /**
     * @namespace
     * @memberof SwipeRecognizer
     */
    defaults: {
        event: 'swipe',
        threshold: 10,
        velocity: 0.3,
        direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,
        pointers: 1
    },

    getTouchAction: function() {
        return PanRecognizer.prototype.getTouchAction.call(this);
    },

    attrTest: function(input) {
        var direction = this.options.direction;
        var velocity;

        if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {
            velocity = input.overallVelocity;
        } else if (direction & DIRECTION_HORIZONTAL) {
            velocity = input.overallVelocityX;
        } else if (direction & DIRECTION_VERTICAL) {
            velocity = input.overallVelocityY;
        }

        return this._super.attrTest.call(this, input) &&
            direction & input.offsetDirection &&
            input.distance > this.options.threshold &&
            input.maxPointers == this.options.pointers &&
            abs(velocity) > this.options.velocity && input.eventType & INPUT_END;
    },

    emit: function(input) {
        var direction = directionStr(input.offsetDirection);
        if (direction) {
            this.manager.emit(this.options.event + direction, input);
        }

        this.manager.emit(this.options.event, input);
    }
});

/**
 * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur
 * between the given interval and position. The delay option can be used to recognize multi-taps without firing
 * a single tap.
 *
 * The eventData from the emitted event contains the property `tapCount`, which contains the amount of
 * multi-taps being recognized.
 * @constructor
 * @extends Recognizer
 */
function TapRecognizer() {
    Recognizer.apply(this, arguments);

    // previous time and center,
    // used for tap counting
    this.pTime = false;
    this.pCenter = false;

    this._timer = null;
    this._input = null;
    this.count = 0;
}

inherit(TapRecognizer, Recognizer, {
    /**
     * @namespace
     * @memberof PinchRecognizer
     */
    defaults: {
        event: 'tap',
        pointers: 1,
        taps: 1,
        interval: 300, // max time between the multi-tap taps
        time: 250, // max time of the pointer to be down (like finger on the screen)
        threshold: 9, // a minimal movement is ok, but keep it low
        posThreshold: 10 // a multi-tap can be a bit off the initial position
    },

    getTouchAction: function() {
        return [TOUCH_ACTION_MANIPULATION];
    },

    process: function(input) {
        var options = this.options;

        var validPointers = input.pointers.length === options.pointers;
        var validMovement = input.distance < options.threshold;
        var validTouchTime = input.deltaTime < options.time;

        this.reset();

        if ((input.eventType & INPUT_START) && (this.count === 0)) {
            return this.failTimeout();
        }

        // we only allow little movement
        // and we've reached an end event, so a tap is possible
        if (validMovement && validTouchTime && validPointers) {
            if (input.eventType != INPUT_END) {
                return this.failTimeout();
            }

            var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;
            var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;

            this.pTime = input.timeStamp;
            this.pCenter = input.center;

            if (!validMultiTap || !validInterval) {
                this.count = 1;
            } else {
                this.count += 1;
            }

            this._input = input;

            // if tap count matches we have recognized it,
            // else it has began recognizing...
            var tapCount = this.count % options.taps;
            if (tapCount === 0) {
                // no failing requirements, immediately trigger the tap event
                // or wait as long as the multitap interval to trigger
                if (!this.hasRequireFailures()) {
                    return STATE_RECOGNIZED;
                } else {
                    this._timer = setTimeoutContext(function() {
                        this.state = STATE_RECOGNIZED;
                        this.tryEmit();
                    }, options.interval, this);
                    return STATE_BEGAN;
                }
            }
        }
        return STATE_FAILED;
    },

    failTimeout: function() {
        this._timer = setTimeoutContext(function() {
            this.state = STATE_FAILED;
        }, this.options.interval, this);
        return STATE_FAILED;
    },

    reset: function() {
        clearTimeout(this._timer);
    },

    emit: function() {
        if (this.state == STATE_RECOGNIZED) {
            this._input.tapCount = this.count;
            this.manager.emit(this.options.event, this._input);
        }
    }
});

/**
 * Simple way to create a manager with a default set of recognizers.
 * @param {HTMLElement} element
 * @param {Object} [options]
 * @constructor
 */
function Hammer(element, options) {
    options = options || {};
    options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);
    return new Manager(element, options);
}

/**
 * @const {string}
 */
Hammer.VERSION = '2.0.7';

/**
 * default settings
 * @namespace
 */
Hammer.defaults = {
    /**
     * set if DOM events are being triggered.
     * But this is slower and unused by simple implementations, so disabled by default.
     * @type {Boolean}
     * @default false
     */
    domEvents: false,

    /**
     * The value for the touchAction property/fallback.
     * When set to `compute` it will magically set the correct value based on the added recognizers.
     * @type {String}
     * @default compute
     */
    touchAction: TOUCH_ACTION_COMPUTE,

    /**
     * @type {Boolean}
     * @default true
     */
    enable: true,

    /**
     * EXPERIMENTAL FEATURE -- can be removed/changed
     * Change the parent input target element.
     * If Null, then it is being set the to main element.
     * @type {Null|EventTarget}
     * @default null
     */
    inputTarget: null,

    /**
     * force an input class
     * @type {Null|Function}
     * @default null
     */
    inputClass: null,

    /**
     * Default recognizer setup when calling `Hammer()`
     * When creating a new Manager these will be skipped.
     * @type {Array}
     */
    preset: [
        // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]
        [RotateRecognizer, {enable: false}],
        [PinchRecognizer, {enable: false}, ['rotate']],
        [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],
        [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],
        [TapRecognizer],
        [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],
        [PressRecognizer]
    ],

    /**
     * Some CSS properties can be used to improve the working of Hammer.
     * Add them to this method and they will be set when creating a new Manager.
     * @namespace
     */
    cssProps: {
        /**
         * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.
         * @type {String}
         * @default 'none'
         */
        userSelect: 'none',

        /**
         * Disable the Windows Phone grippers when pressing an element.
         * @type {String}
         * @default 'none'
         */
        touchSelect: 'none',

        /**
         * Disables the default callout shown when you touch and hold a touch target.
         * On iOS, when you touch and hold a touch target such as a link, Safari displays
         * a callout containing information about the link. This property allows you to disable that callout.
         * @type {String}
         * @default 'none'
         */
        touchCallout: 'none',

        /**
         * Specifies whether zooming is enabled. Used by IE10>
         * @type {String}
         * @default 'none'
         */
        contentZooming: 'none',

        /**
         * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.
         * @type {String}
         * @default 'none'
         */
        userDrag: 'none',

        /**
         * Overrides the highlight color shown when the user taps a link or a JavaScript
         * clickable element in iOS. This property obeys the alpha value, if specified.
         * @type {String}
         * @default 'rgba(0,0,0,0)'
         */
        tapHighlightColor: 'rgba(0,0,0,0)'
    }
};

var STOP = 1;
var FORCED_STOP = 2;

/**
 * Manager
 * @param {HTMLElement} element
 * @param {Object} [options]
 * @constructor
 */
function Manager(element, options) {
    this.options = assign({}, Hammer.defaults, options || {});

    this.options.inputTarget = this.options.inputTarget || element;

    this.handlers = {};
    this.session = {};
    this.recognizers = [];
    this.oldCssProps = {};

    this.element = element;
    this.input = createInputInstance(this);
    this.touchAction = new TouchAction(this, this.options.touchAction);

    toggleCssProps(this, true);

    each(this.options.recognizers, function(item) {
        var recognizer = this.add(new (item[0])(item[1]));
        item[2] && recognizer.recognizeWith(item[2]);
        item[3] && recognizer.requireFailure(item[3]);
    }, this);
}

Manager.prototype = {
    /**
     * set options
     * @param {Object} options
     * @returns {Manager}
     */
    set: function(options) {
        assign(this.options, options);

        // Options that need a little more setup
        if (options.touchAction) {
            this.touchAction.update();
        }
        if (options.inputTarget) {
            // Clean up existing event listeners and reinitialize
            this.input.destroy();
            this.input.target = options.inputTarget;
            this.input.init();
        }
        return this;
    },

    /**
     * stop recognizing for this session.
     * This session will be discarded, when a new [input]start event is fired.
     * When forced, the recognizer cycle is stopped immediately.
     * @param {Boolean} [force]
     */
    stop: function(force) {
        this.session.stopped = force ? FORCED_STOP : STOP;
    },

    /**
     * run the recognizers!
     * called by the inputHandler function on every movement of the pointers (touches)
     * it walks through all the recognizers and tries to detect the gesture that is being made
     * @param {Object} inputData
     */
    recognize: function(inputData) {
        var session = this.session;
        if (session.stopped) {
            return;
        }

        // run the touch-action polyfill
        this.touchAction.preventDefaults(inputData);

        var recognizer;
        var recognizers = this.recognizers;

        // this holds the recognizer that is being recognized.
        // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED
        // if no recognizer is detecting a thing, it is set to `null`
        var curRecognizer = session.curRecognizer;

        // reset when the last recognizer is recognized
        // or when we're in a new session
        if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {
            curRecognizer = session.curRecognizer = null;
        }

        var i = 0;
        while (i < recognizers.length) {
            recognizer = recognizers[i];

            // find out if we are allowed try to recognize the input for this one.
            // 1.   allow if the session is NOT forced stopped (see the .stop() method)
            // 2.   allow if we still haven't recognized a gesture in this session, or the this recognizer is the one
            //      that is being recognized.
            // 3.   allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.
            //      this can be setup with the `recognizeWith()` method on the recognizer.
            if (session.stopped !== FORCED_STOP && ( // 1
                    !curRecognizer || recognizer == curRecognizer || // 2
                    recognizer.canRecognizeWith(curRecognizer))) { // 3
                recognizer.recognize(inputData);
            } else {
                recognizer.reset();
            }

            // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the
            // current active recognizer. but only if we don't already have an active recognizer
            if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {
                curRecognizer = session.curRecognizer = recognizer;
            }
            i++;
        }
    },

    /**
     * get a recognizer by its event name.
     * @param {Recognizer|String} recognizer
     * @returns {Recognizer|Null}
     */
    get: function(recognizer) {
        if (recognizer instanceof Recognizer) {
            return recognizer;
        }

        var recognizers = this.recognizers;
        for (var i = 0; i < recognizers.length; i++) {
            if (recognizers[i].options.event == recognizer) {
                return recognizers[i];
            }
        }
        return null;
    },

    /**
     * add a recognizer to the manager
     * existing recognizers with the same event name will be removed
     * @param {Recognizer} recognizer
     * @returns {Recognizer|Manager}
     */
    add: function(recognizer) {
        if (invokeArrayArg(recognizer, 'add', this)) {
            return this;
        }

        // remove existing
        var existing = this.get(recognizer.options.event);
        if (existing) {
            this.remove(existing);
        }

        this.recognizers.push(recognizer);
        recognizer.manager = this;

        this.touchAction.update();
        return recognizer;
    },

    /**
     * remove a recognizer by name or instance
     * @param {Recognizer|String} recognizer
     * @returns {Manager}
     */
    remove: function(recognizer) {
        if (invokeArrayArg(recognizer, 'remove', this)) {
            return this;
        }

        recognizer = this.get(recognizer);

        // let's make sure this recognizer exists
        if (recognizer) {
            var recognizers = this.recognizers;
            var index = inArray(recognizers, recognizer);

            if (index !== -1) {
                recognizers.splice(index, 1);
                this.touchAction.update();
            }
        }

        return this;
    },

    /**
     * bind event
     * @param {String} events
     * @param {Function} handler
     * @returns {EventEmitter} this
     */
    on: function(events, handler) {
        if (events === undefined) {
            return;
        }
        if (handler === undefined) {
            return;
        }

        var handlers = this.handlers;
        each(splitStr(events), function(event) {
            handlers[event] = handlers[event] || [];
            handlers[event].push(handler);
        });
        return this;
    },

    /**
     * unbind event, leave emit blank to remove all handlers
     * @param {String} events
     * @param {Function} [handler]
     * @returns {EventEmitter} this
     */
    off: function(events, handler) {
        if (events === undefined) {
            return;
        }

        var handlers = this.handlers;
        each(splitStr(events), function(event) {
            if (!handler) {
                delete handlers[event];
            } else {
                handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);
            }
        });
        return this;
    },

    /**
     * emit event to the listeners
     * @param {String} event
     * @param {Object} data
     */
    emit: function(event, data) {
        // we also want to trigger dom events
        if (this.options.domEvents) {
            triggerDomEvent(event, data);
        }

        // no handlers, so skip it all
        var handlers = this.handlers[event] && this.handlers[event].slice();
        if (!handlers || !handlers.length) {
            return;
        }

        data.type = event;
        data.preventDefault = function() {
            data.srcEvent.preventDefault();
        };

        var i = 0;
        while (i < handlers.length) {
            handlers[i](data);
            i++;
        }
    },

    /**
     * destroy the manager and unbinds all events
     * it doesn't unbind dom events, that is the user own responsibility
     */
    destroy: function() {
        this.element && toggleCssProps(this, false);

        this.handlers = {};
        this.session = {};
        this.input.destroy();
        this.element = null;
    }
};

/**
 * add/remove the css properties as defined in manager.options.cssProps
 * @param {Manager} manager
 * @param {Boolean} add
 */
function toggleCssProps(manager, add) {
    var element = manager.element;
    if (!element.style) {
        return;
    }
    var prop;
    each(manager.options.cssProps, function(value, name) {
        prop = prefixed(element.style, name);
        if (add) {
            manager.oldCssProps[prop] = element.style[prop];
            element.style[prop] = value;
        } else {
            element.style[prop] = manager.oldCssProps[prop] || '';
        }
    });
    if (!add) {
        manager.oldCssProps = {};
    }
}

/**
 * trigger dom event
 * @param {String} event
 * @param {Object} data
 */
function triggerDomEvent(event, data) {
    var gestureEvent = document.createEvent('Event');
    gestureEvent.initEvent(event, true, true);
    gestureEvent.gesture = data;
    data.target.dispatchEvent(gestureEvent);
}

assign(Hammer, {
    INPUT_START: INPUT_START,
    INPUT_MOVE: INPUT_MOVE,
    INPUT_END: INPUT_END,
    INPUT_CANCEL: INPUT_CANCEL,

    STATE_POSSIBLE: STATE_POSSIBLE,
    STATE_BEGAN: STATE_BEGAN,
    STATE_CHANGED: STATE_CHANGED,
    STATE_ENDED: STATE_ENDED,
    STATE_RECOGNIZED: STATE_RECOGNIZED,
    STATE_CANCELLED: STATE_CANCELLED,
    STATE_FAILED: STATE_FAILED,

    DIRECTION_NONE: DIRECTION_NONE,
    DIRECTION_LEFT: DIRECTION_LEFT,
    DIRECTION_RIGHT: DIRECTION_RIGHT,
    DIRECTION_UP: DIRECTION_UP,
    DIRECTION_DOWN: DIRECTION_DOWN,
    DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,
    DIRECTION_VERTICAL: DIRECTION_VERTICAL,
    DIRECTION_ALL: DIRECTION_ALL,

    Manager: Manager,
    Input: Input,
    TouchAction: TouchAction,

    TouchInput: TouchInput,
    MouseInput: MouseInput,
    PointerEventInput: PointerEventInput,
    TouchMouseInput: TouchMouseInput,
    SingleTouchInput: SingleTouchInput,

    Recognizer: Recognizer,
    AttrRecognizer: AttrRecognizer,
    Tap: TapRecognizer,
    Pan: PanRecognizer,
    Swipe: SwipeRecognizer,
    Pinch: PinchRecognizer,
    Rotate: RotateRecognizer,
    Press: PressRecognizer,

    on: addEventListeners,
    off: removeEventListeners,
    each: each,
    merge: merge,
    extend: extend,
    assign: assign,
    inherit: inherit,
    bindFn: bindFn,
    prefixed: prefixed
});

// this prevents errors when Hammer is loaded in the presence of an AMD
//  style loader but by script tag, not by the loader.
var freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line
freeGlobal.Hammer = Hammer;

if (true) {
    !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
        return Hammer;
    }).call(exports, __webpack_require__, exports, module),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
} else {}

})(window, document, 'Hammer');


/***/ }),

/***/ 3445:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   CODE_0: () => (/* binding */ CODE_0),
/* harmony export */   CODE_1: () => (/* binding */ CODE_1),
/* harmony export */   CODE_2: () => (/* binding */ CODE_2),
/* harmony export */   CODE_3: () => (/* binding */ CODE_3),
/* harmony export */   CODE_4: () => (/* binding */ CODE_4),
/* harmony export */   CODE_5: () => (/* binding */ CODE_5),
/* harmony export */   CODE_6: () => (/* binding */ CODE_6),
/* harmony export */   CODE_7: () => (/* binding */ CODE_7),
/* harmony export */   CODE_8: () => (/* binding */ CODE_8),
/* harmony export */   CODE_9: () => (/* binding */ CODE_9),
/* harmony export */   CODE_A: () => (/* binding */ CODE_A),
/* harmony export */   CODE_ALT_LEFT: () => (/* binding */ CODE_ALT_LEFT),
/* harmony export */   CODE_ALT_RIGHT: () => (/* binding */ CODE_ALT_RIGHT),
/* harmony export */   CODE_B: () => (/* binding */ CODE_B),
/* harmony export */   CODE_BACK_QUOTE: () => (/* binding */ CODE_BACK_QUOTE),
/* harmony export */   CODE_BACK_SLASH: () => (/* binding */ CODE_BACK_SLASH),
/* harmony export */   CODE_BACK_SPACE: () => (/* binding */ CODE_BACK_SPACE),
/* harmony export */   CODE_C: () => (/* binding */ CODE_C),
/* harmony export */   CODE_CAPS_LOCK: () => (/* binding */ CODE_CAPS_LOCK),
/* harmony export */   CODE_CLOSE_BRACKET: () => (/* binding */ CODE_CLOSE_BRACKET),
/* harmony export */   CODE_COMMA: () => (/* binding */ CODE_COMMA),
/* harmony export */   CODE_CONTEXT_MENU: () => (/* binding */ CODE_CONTEXT_MENU),
/* harmony export */   CODE_CONTROL_LEFT: () => (/* binding */ CODE_CONTROL_LEFT),
/* harmony export */   CODE_CONTROL_RIGHT: () => (/* binding */ CODE_CONTROL_RIGHT),
/* harmony export */   CODE_D: () => (/* binding */ CODE_D),
/* harmony export */   CODE_DASH: () => (/* binding */ CODE_DASH),
/* harmony export */   CODE_DELETE: () => (/* binding */ CODE_DELETE),
/* harmony export */   CODE_DOWN: () => (/* binding */ CODE_DOWN),
/* harmony export */   CODE_E: () => (/* binding */ CODE_E),
/* harmony export */   CODE_END: () => (/* binding */ CODE_END),
/* harmony export */   CODE_ENTER: () => (/* binding */ CODE_ENTER),
/* harmony export */   CODE_EQUALS: () => (/* binding */ CODE_EQUALS),
/* harmony export */   CODE_ESCAPE: () => (/* binding */ CODE_ESCAPE),
/* harmony export */   CODE_F: () => (/* binding */ CODE_F),
/* harmony export */   CODE_F1: () => (/* binding */ CODE_F1),
/* harmony export */   CODE_F10: () => (/* binding */ CODE_F10),
/* harmony export */   CODE_F11: () => (/* binding */ CODE_F11),
/* harmony export */   CODE_F12: () => (/* binding */ CODE_F12),
/* harmony export */   CODE_F13: () => (/* binding */ CODE_F13),
/* harmony export */   CODE_F14: () => (/* binding */ CODE_F14),
/* harmony export */   CODE_F15: () => (/* binding */ CODE_F15),
/* harmony export */   CODE_F16: () => (/* binding */ CODE_F16),
/* harmony export */   CODE_F17: () => (/* binding */ CODE_F17),
/* harmony export */   CODE_F18: () => (/* binding */ CODE_F18),
/* harmony export */   CODE_F19: () => (/* binding */ CODE_F19),
/* harmony export */   CODE_F2: () => (/* binding */ CODE_F2),
/* harmony export */   CODE_F20: () => (/* binding */ CODE_F20),
/* harmony export */   CODE_F21: () => (/* binding */ CODE_F21),
/* harmony export */   CODE_F22: () => (/* binding */ CODE_F22),
/* harmony export */   CODE_F23: () => (/* binding */ CODE_F23),
/* harmony export */   CODE_F24: () => (/* binding */ CODE_F24),
/* harmony export */   CODE_F3: () => (/* binding */ CODE_F3),
/* harmony export */   CODE_F4: () => (/* binding */ CODE_F4),
/* harmony export */   CODE_F5: () => (/* binding */ CODE_F5),
/* harmony export */   CODE_F6: () => (/* binding */ CODE_F6),
/* harmony export */   CODE_F7: () => (/* binding */ CODE_F7),
/* harmony export */   CODE_F8: () => (/* binding */ CODE_F8),
/* harmony export */   CODE_F9: () => (/* binding */ CODE_F9),
/* harmony export */   CODE_G: () => (/* binding */ CODE_G),
/* harmony export */   CODE_H: () => (/* binding */ CODE_H),
/* harmony export */   CODE_HOME: () => (/* binding */ CODE_HOME),
/* harmony export */   CODE_I: () => (/* binding */ CODE_I),
/* harmony export */   CODE_INSERT: () => (/* binding */ CODE_INSERT),
/* harmony export */   CODE_J: () => (/* binding */ CODE_J),
/* harmony export */   CODE_K: () => (/* binding */ CODE_K),
/* harmony export */   CODE_L: () => (/* binding */ CODE_L),
/* harmony export */   CODE_LEFT: () => (/* binding */ CODE_LEFT),
/* harmony export */   CODE_M: () => (/* binding */ CODE_M),
/* harmony export */   CODE_META_LEFT: () => (/* binding */ CODE_META_LEFT),
/* harmony export */   CODE_META_RIGHT: () => (/* binding */ CODE_META_RIGHT),
/* harmony export */   CODE_MINUS: () => (/* binding */ CODE_MINUS),
/* harmony export */   CODE_N: () => (/* binding */ CODE_N),
/* harmony export */   CODE_NUMPAD0: () => (/* binding */ CODE_NUMPAD0),
/* harmony export */   CODE_NUMPAD1: () => (/* binding */ CODE_NUMPAD1),
/* harmony export */   CODE_NUMPAD2: () => (/* binding */ CODE_NUMPAD2),
/* harmony export */   CODE_NUMPAD3: () => (/* binding */ CODE_NUMPAD3),
/* harmony export */   CODE_NUMPAD4: () => (/* binding */ CODE_NUMPAD4),
/* harmony export */   CODE_NUMPAD5: () => (/* binding */ CODE_NUMPAD5),
/* harmony export */   CODE_NUMPAD6: () => (/* binding */ CODE_NUMPAD6),
/* harmony export */   CODE_NUMPAD7: () => (/* binding */ CODE_NUMPAD7),
/* harmony export */   CODE_NUMPAD8: () => (/* binding */ CODE_NUMPAD8),
/* harmony export */   CODE_NUMPAD9: () => (/* binding */ CODE_NUMPAD9),
/* harmony export */   CODE_NUMPAD_ADD: () => (/* binding */ CODE_NUMPAD_ADD),
/* harmony export */   CODE_NUMPAD_DECIMAL: () => (/* binding */ CODE_NUMPAD_DECIMAL),
/* harmony export */   CODE_NUMPAD_DIVIDE: () => (/* binding */ CODE_NUMPAD_DIVIDE),
/* harmony export */   CODE_NUMPAD_ENTER: () => (/* binding */ CODE_NUMPAD_ENTER),
/* harmony export */   CODE_NUMPAD_MULTIPLY: () => (/* binding */ CODE_NUMPAD_MULTIPLY),
/* harmony export */   CODE_NUMPAD_SUBTRACT: () => (/* binding */ CODE_NUMPAD_SUBTRACT),
/* harmony export */   CODE_NUM_LOCK: () => (/* binding */ CODE_NUM_LOCK),
/* harmony export */   CODE_O: () => (/* binding */ CODE_O),
/* harmony export */   CODE_OPEN_BRACKET: () => (/* binding */ CODE_OPEN_BRACKET),
/* harmony export */   CODE_OS_LEFT: () => (/* binding */ CODE_OS_LEFT),
/* harmony export */   CODE_OS_RIGHT: () => (/* binding */ CODE_OS_RIGHT),
/* harmony export */   CODE_P: () => (/* binding */ CODE_P),
/* harmony export */   CODE_PAGE_DOWN: () => (/* binding */ CODE_PAGE_DOWN),
/* harmony export */   CODE_PAGE_UP: () => (/* binding */ CODE_PAGE_UP),
/* harmony export */   CODE_PAUSE: () => (/* binding */ CODE_PAUSE),
/* harmony export */   CODE_PERIOD: () => (/* binding */ CODE_PERIOD),
/* harmony export */   CODE_PRINTSCREEN: () => (/* binding */ CODE_PRINTSCREEN),
/* harmony export */   CODE_Q: () => (/* binding */ CODE_Q),
/* harmony export */   CODE_QUOTE: () => (/* binding */ CODE_QUOTE),
/* harmony export */   CODE_R: () => (/* binding */ CODE_R),
/* harmony export */   CODE_RETURN: () => (/* binding */ CODE_RETURN),
/* harmony export */   CODE_RIGHT: () => (/* binding */ CODE_RIGHT),
/* harmony export */   CODE_S: () => (/* binding */ CODE_S),
/* harmony export */   CODE_SCROLL_LOCK: () => (/* binding */ CODE_SCROLL_LOCK),
/* harmony export */   CODE_SEMICOLON: () => (/* binding */ CODE_SEMICOLON),
/* harmony export */   CODE_SHIFT_LEFT: () => (/* binding */ CODE_SHIFT_LEFT),
/* harmony export */   CODE_SHIFT_RIGHT: () => (/* binding */ CODE_SHIFT_RIGHT),
/* harmony export */   CODE_SLASH: () => (/* binding */ CODE_SLASH),
/* harmony export */   CODE_SPACE: () => (/* binding */ CODE_SPACE),
/* harmony export */   CODE_T: () => (/* binding */ CODE_T),
/* harmony export */   CODE_TAB: () => (/* binding */ CODE_TAB),
/* harmony export */   CODE_U: () => (/* binding */ CODE_U),
/* harmony export */   CODE_UNIDENTIFIED: () => (/* binding */ CODE_UNIDENTIFIED),
/* harmony export */   CODE_UP: () => (/* binding */ CODE_UP),
/* harmony export */   CODE_V: () => (/* binding */ CODE_V),
/* harmony export */   CODE_W: () => (/* binding */ CODE_W),
/* harmony export */   CODE_X: () => (/* binding */ CODE_X),
/* harmony export */   CODE_Y: () => (/* binding */ CODE_Y),
/* harmony export */   CODE_Z: () => (/* binding */ CODE_Z),
/* harmony export */   KEY_0: () => (/* binding */ KEY_0),
/* harmony export */   KEY_1: () => (/* binding */ KEY_1),
/* harmony export */   KEY_2: () => (/* binding */ KEY_2),
/* harmony export */   KEY_3: () => (/* binding */ KEY_3),
/* harmony export */   KEY_4: () => (/* binding */ KEY_4),
/* harmony export */   KEY_5: () => (/* binding */ KEY_5),
/* harmony export */   KEY_6: () => (/* binding */ KEY_6),
/* harmony export */   KEY_7: () => (/* binding */ KEY_7),
/* harmony export */   KEY_8: () => (/* binding */ KEY_8),
/* harmony export */   KEY_9: () => (/* binding */ KEY_9),
/* harmony export */   KEY_A: () => (/* binding */ KEY_A),
/* harmony export */   KEY_ADD: () => (/* binding */ KEY_ADD),
/* harmony export */   KEY_ALT: () => (/* binding */ KEY_ALT),
/* harmony export */   KEY_B: () => (/* binding */ KEY_B),
/* harmony export */   KEY_BACK_QUOTE: () => (/* binding */ KEY_BACK_QUOTE),
/* harmony export */   KEY_BACK_SLASH: () => (/* binding */ KEY_BACK_SLASH),
/* harmony export */   KEY_BACK_SPACE: () => (/* binding */ KEY_BACK_SPACE),
/* harmony export */   KEY_C: () => (/* binding */ KEY_C),
/* harmony export */   KEY_CANCEL: () => (/* binding */ KEY_CANCEL),
/* harmony export */   KEY_CAPS_LOCK: () => (/* binding */ KEY_CAPS_LOCK),
/* harmony export */   KEY_CLEAR: () => (/* binding */ KEY_CLEAR),
/* harmony export */   KEY_CLOSE_BRACKET: () => (/* binding */ KEY_CLOSE_BRACKET),
/* harmony export */   KEY_COMMA: () => (/* binding */ KEY_COMMA),
/* harmony export */   KEY_CONTEXT_MENU: () => (/* binding */ KEY_CONTEXT_MENU),
/* harmony export */   KEY_CONTROL: () => (/* binding */ KEY_CONTROL),
/* harmony export */   KEY_D: () => (/* binding */ KEY_D),
/* harmony export */   KEY_DASH: () => (/* binding */ KEY_DASH),
/* harmony export */   KEY_DECIMAL: () => (/* binding */ KEY_DECIMAL),
/* harmony export */   KEY_DELETE: () => (/* binding */ KEY_DELETE),
/* harmony export */   KEY_DIVIDE: () => (/* binding */ KEY_DIVIDE),
/* harmony export */   KEY_DOWN: () => (/* binding */ KEY_DOWN),
/* harmony export */   KEY_E: () => (/* binding */ KEY_E),
/* harmony export */   KEY_END: () => (/* binding */ KEY_END),
/* harmony export */   KEY_EQUALS: () => (/* binding */ KEY_EQUALS),
/* harmony export */   KEY_ESCAPE: () => (/* binding */ KEY_ESCAPE),
/* harmony export */   KEY_F: () => (/* binding */ KEY_F),
/* harmony export */   KEY_F1: () => (/* binding */ KEY_F1),
/* harmony export */   KEY_F10: () => (/* binding */ KEY_F10),
/* harmony export */   KEY_F11: () => (/* binding */ KEY_F11),
/* harmony export */   KEY_F12: () => (/* binding */ KEY_F12),
/* harmony export */   KEY_F13: () => (/* binding */ KEY_F13),
/* harmony export */   KEY_F14: () => (/* binding */ KEY_F14),
/* harmony export */   KEY_F15: () => (/* binding */ KEY_F15),
/* harmony export */   KEY_F16: () => (/* binding */ KEY_F16),
/* harmony export */   KEY_F17: () => (/* binding */ KEY_F17),
/* harmony export */   KEY_F18: () => (/* binding */ KEY_F18),
/* harmony export */   KEY_F19: () => (/* binding */ KEY_F19),
/* harmony export */   KEY_F2: () => (/* binding */ KEY_F2),
/* harmony export */   KEY_F20: () => (/* binding */ KEY_F20),
/* harmony export */   KEY_F21: () => (/* binding */ KEY_F21),
/* harmony export */   KEY_F22: () => (/* binding */ KEY_F22),
/* harmony export */   KEY_F23: () => (/* binding */ KEY_F23),
/* harmony export */   KEY_F24: () => (/* binding */ KEY_F24),
/* harmony export */   KEY_F3: () => (/* binding */ KEY_F3),
/* harmony export */   KEY_F4: () => (/* binding */ KEY_F4),
/* harmony export */   KEY_F5: () => (/* binding */ KEY_F5),
/* harmony export */   KEY_F6: () => (/* binding */ KEY_F6),
/* harmony export */   KEY_F7: () => (/* binding */ KEY_F7),
/* harmony export */   KEY_F8: () => (/* binding */ KEY_F8),
/* harmony export */   KEY_F9: () => (/* binding */ KEY_F9),
/* harmony export */   KEY_FIREFOX_ENTER: () => (/* binding */ KEY_FIREFOX_ENTER),
/* harmony export */   KEY_FIREFOX_EQUALS: () => (/* binding */ KEY_FIREFOX_EQUALS),
/* harmony export */   KEY_FIREFOX_META: () => (/* binding */ KEY_FIREFOX_META),
/* harmony export */   KEY_FIREFOX_SEMICOLON: () => (/* binding */ KEY_FIREFOX_SEMICOLON),
/* harmony export */   KEY_FIREFOX_SEPARATOR: () => (/* binding */ KEY_FIREFOX_SEPARATOR),
/* harmony export */   KEY_G: () => (/* binding */ KEY_G),
/* harmony export */   KEY_H: () => (/* binding */ KEY_H),
/* harmony export */   KEY_HELP: () => (/* binding */ KEY_HELP),
/* harmony export */   KEY_HOME: () => (/* binding */ KEY_HOME),
/* harmony export */   KEY_I: () => (/* binding */ KEY_I),
/* harmony export */   KEY_INSERT: () => (/* binding */ KEY_INSERT),
/* harmony export */   KEY_J: () => (/* binding */ KEY_J),
/* harmony export */   KEY_K: () => (/* binding */ KEY_K),
/* harmony export */   KEY_L: () => (/* binding */ KEY_L),
/* harmony export */   KEY_LEFT: () => (/* binding */ KEY_LEFT),
/* harmony export */   KEY_LEFT_CMD: () => (/* binding */ KEY_LEFT_CMD),
/* harmony export */   KEY_M: () => (/* binding */ KEY_M),
/* harmony export */   KEY_MULTIPLY: () => (/* binding */ KEY_MULTIPLY),
/* harmony export */   KEY_N: () => (/* binding */ KEY_N),
/* harmony export */   KEY_NUMPAD0: () => (/* binding */ KEY_NUMPAD0),
/* harmony export */   KEY_NUMPAD1: () => (/* binding */ KEY_NUMPAD1),
/* harmony export */   KEY_NUMPAD2: () => (/* binding */ KEY_NUMPAD2),
/* harmony export */   KEY_NUMPAD3: () => (/* binding */ KEY_NUMPAD3),
/* harmony export */   KEY_NUMPAD4: () => (/* binding */ KEY_NUMPAD4),
/* harmony export */   KEY_NUMPAD5: () => (/* binding */ KEY_NUMPAD5),
/* harmony export */   KEY_NUMPAD6: () => (/* binding */ KEY_NUMPAD6),
/* harmony export */   KEY_NUMPAD7: () => (/* binding */ KEY_NUMPAD7),
/* harmony export */   KEY_NUMPAD8: () => (/* binding */ KEY_NUMPAD8),
/* harmony export */   KEY_NUMPAD9: () => (/* binding */ KEY_NUMPAD9),
/* harmony export */   KEY_NUM_LOCK: () => (/* binding */ KEY_NUM_LOCK),
/* harmony export */   KEY_O: () => (/* binding */ KEY_O),
/* harmony export */   KEY_OPEN_BRACKET: () => (/* binding */ KEY_OPEN_BRACKET),
/* harmony export */   KEY_P: () => (/* binding */ KEY_P),
/* harmony export */   KEY_PAGE_DOWN: () => (/* binding */ KEY_PAGE_DOWN),
/* harmony export */   KEY_PAGE_UP: () => (/* binding */ KEY_PAGE_UP),
/* harmony export */   KEY_PAUSE: () => (/* binding */ KEY_PAUSE),
/* harmony export */   KEY_PERIOD: () => (/* binding */ KEY_PERIOD),
/* harmony export */   KEY_PRINTSCREEN: () => (/* binding */ KEY_PRINTSCREEN),
/* harmony export */   KEY_Q: () => (/* binding */ KEY_Q),
/* harmony export */   KEY_QUOTE: () => (/* binding */ KEY_QUOTE),
/* harmony export */   KEY_R: () => (/* binding */ KEY_R),
/* harmony export */   KEY_RETURN: () => (/* binding */ KEY_RETURN),
/* harmony export */   KEY_RIGHT: () => (/* binding */ KEY_RIGHT),
/* harmony export */   KEY_RIGHT_CMD: () => (/* binding */ KEY_RIGHT_CMD),
/* harmony export */   KEY_S: () => (/* binding */ KEY_S),
/* harmony export */   KEY_SCROLL_LOCK: () => (/* binding */ KEY_SCROLL_LOCK),
/* harmony export */   KEY_SEMICOLON: () => (/* binding */ KEY_SEMICOLON),
/* harmony export */   KEY_SHIFT: () => (/* binding */ KEY_SHIFT),
/* harmony export */   KEY_SLASH: () => (/* binding */ KEY_SLASH),
/* harmony export */   KEY_SPACE: () => (/* binding */ KEY_SPACE),
/* harmony export */   KEY_SUBTRACT: () => (/* binding */ KEY_SUBTRACT),
/* harmony export */   KEY_T: () => (/* binding */ KEY_T),
/* harmony export */   KEY_TAB: () => (/* binding */ KEY_TAB),
/* harmony export */   KEY_U: () => (/* binding */ KEY_U),
/* harmony export */   KEY_UP: () => (/* binding */ KEY_UP),
/* harmony export */   KEY_V: () => (/* binding */ KEY_V),
/* harmony export */   KEY_W: () => (/* binding */ KEY_W),
/* harmony export */   KEY_X: () => (/* binding */ KEY_X),
/* harmony export */   KEY_Y: () => (/* binding */ KEY_Y),
/* harmony export */   KEY_Z: () => (/* binding */ KEY_Z),
/* harmony export */   VALUE_0: () => (/* binding */ VALUE_0),
/* harmony export */   VALUE_1: () => (/* binding */ VALUE_1),
/* harmony export */   VALUE_2: () => (/* binding */ VALUE_2),
/* harmony export */   VALUE_3: () => (/* binding */ VALUE_3),
/* harmony export */   VALUE_4: () => (/* binding */ VALUE_4),
/* harmony export */   VALUE_5: () => (/* binding */ VALUE_5),
/* harmony export */   VALUE_6: () => (/* binding */ VALUE_6),
/* harmony export */   VALUE_7: () => (/* binding */ VALUE_7),
/* harmony export */   VALUE_8: () => (/* binding */ VALUE_8),
/* harmony export */   VALUE_9: () => (/* binding */ VALUE_9),
/* harmony export */   VALUE_A: () => (/* binding */ VALUE_A),
/* harmony export */   VALUE_ADD: () => (/* binding */ VALUE_ADD),
/* harmony export */   VALUE_ALT: () => (/* binding */ VALUE_ALT),
/* harmony export */   VALUE_B: () => (/* binding */ VALUE_B),
/* harmony export */   VALUE_BACK_QUOTE: () => (/* binding */ VALUE_BACK_QUOTE),
/* harmony export */   VALUE_BACK_SLASH: () => (/* binding */ VALUE_BACK_SLASH),
/* harmony export */   VALUE_BACK_SPACE: () => (/* binding */ VALUE_BACK_SPACE),
/* harmony export */   VALUE_C: () => (/* binding */ VALUE_C),
/* harmony export */   VALUE_CANCEL: () => (/* binding */ VALUE_CANCEL),
/* harmony export */   VALUE_CAPS_LOCK: () => (/* binding */ VALUE_CAPS_LOCK),
/* harmony export */   VALUE_CLEAR: () => (/* binding */ VALUE_CLEAR),
/* harmony export */   VALUE_CLOSE_BRACKET: () => (/* binding */ VALUE_CLOSE_BRACKET),
/* harmony export */   VALUE_COMMA: () => (/* binding */ VALUE_COMMA),
/* harmony export */   VALUE_CONTEXT_MENU: () => (/* binding */ VALUE_CONTEXT_MENU),
/* harmony export */   VALUE_CONTROL: () => (/* binding */ VALUE_CONTROL),
/* harmony export */   VALUE_D: () => (/* binding */ VALUE_D),
/* harmony export */   VALUE_DASH: () => (/* binding */ VALUE_DASH),
/* harmony export */   VALUE_DECIMAL: () => (/* binding */ VALUE_DECIMAL),
/* harmony export */   VALUE_DELETE: () => (/* binding */ VALUE_DELETE),
/* harmony export */   VALUE_DIVIDE: () => (/* binding */ VALUE_DIVIDE),
/* harmony export */   VALUE_DOWN: () => (/* binding */ VALUE_DOWN),
/* harmony export */   VALUE_E: () => (/* binding */ VALUE_E),
/* harmony export */   VALUE_END: () => (/* binding */ VALUE_END),
/* harmony export */   VALUE_ENTER: () => (/* binding */ VALUE_ENTER),
/* harmony export */   VALUE_EQUALS: () => (/* binding */ VALUE_EQUALS),
/* harmony export */   VALUE_ESCAPE: () => (/* binding */ VALUE_ESCAPE),
/* harmony export */   VALUE_F: () => (/* binding */ VALUE_F),
/* harmony export */   VALUE_F1: () => (/* binding */ VALUE_F1),
/* harmony export */   VALUE_F10: () => (/* binding */ VALUE_F10),
/* harmony export */   VALUE_F11: () => (/* binding */ VALUE_F11),
/* harmony export */   VALUE_F12: () => (/* binding */ VALUE_F12),
/* harmony export */   VALUE_F13: () => (/* binding */ VALUE_F13),
/* harmony export */   VALUE_F14: () => (/* binding */ VALUE_F14),
/* harmony export */   VALUE_F15: () => (/* binding */ VALUE_F15),
/* harmony export */   VALUE_F16: () => (/* binding */ VALUE_F16),
/* harmony export */   VALUE_F17: () => (/* binding */ VALUE_F17),
/* harmony export */   VALUE_F18: () => (/* binding */ VALUE_F18),
/* harmony export */   VALUE_F19: () => (/* binding */ VALUE_F19),
/* harmony export */   VALUE_F2: () => (/* binding */ VALUE_F2),
/* harmony export */   VALUE_F20: () => (/* binding */ VALUE_F20),
/* harmony export */   VALUE_F21: () => (/* binding */ VALUE_F21),
/* harmony export */   VALUE_F22: () => (/* binding */ VALUE_F22),
/* harmony export */   VALUE_F23: () => (/* binding */ VALUE_F23),
/* harmony export */   VALUE_F24: () => (/* binding */ VALUE_F24),
/* harmony export */   VALUE_F3: () => (/* binding */ VALUE_F3),
/* harmony export */   VALUE_F4: () => (/* binding */ VALUE_F4),
/* harmony export */   VALUE_F5: () => (/* binding */ VALUE_F5),
/* harmony export */   VALUE_F6: () => (/* binding */ VALUE_F6),
/* harmony export */   VALUE_F7: () => (/* binding */ VALUE_F7),
/* harmony export */   VALUE_F8: () => (/* binding */ VALUE_F8),
/* harmony export */   VALUE_F9: () => (/* binding */ VALUE_F9),
/* harmony export */   VALUE_G: () => (/* binding */ VALUE_G),
/* harmony export */   VALUE_H: () => (/* binding */ VALUE_H),
/* harmony export */   VALUE_HELP: () => (/* binding */ VALUE_HELP),
/* harmony export */   VALUE_HOME: () => (/* binding */ VALUE_HOME),
/* harmony export */   VALUE_I: () => (/* binding */ VALUE_I),
/* harmony export */   VALUE_INSERT: () => (/* binding */ VALUE_INSERT),
/* harmony export */   VALUE_J: () => (/* binding */ VALUE_J),
/* harmony export */   VALUE_K: () => (/* binding */ VALUE_K),
/* harmony export */   VALUE_L: () => (/* binding */ VALUE_L),
/* harmony export */   VALUE_LEFT: () => (/* binding */ VALUE_LEFT),
/* harmony export */   VALUE_LEFT_CMD: () => (/* binding */ VALUE_LEFT_CMD),
/* harmony export */   VALUE_M: () => (/* binding */ VALUE_M),
/* harmony export */   VALUE_META: () => (/* binding */ VALUE_META),
/* harmony export */   VALUE_MULTIPLY: () => (/* binding */ VALUE_MULTIPLY),
/* harmony export */   VALUE_N: () => (/* binding */ VALUE_N),
/* harmony export */   VALUE_NUMPAD0: () => (/* binding */ VALUE_NUMPAD0),
/* harmony export */   VALUE_NUMPAD1: () => (/* binding */ VALUE_NUMPAD1),
/* harmony export */   VALUE_NUMPAD2: () => (/* binding */ VALUE_NUMPAD2),
/* harmony export */   VALUE_NUMPAD3: () => (/* binding */ VALUE_NUMPAD3),
/* harmony export */   VALUE_NUMPAD4: () => (/* binding */ VALUE_NUMPAD4),
/* harmony export */   VALUE_NUMPAD5: () => (/* binding */ VALUE_NUMPAD5),
/* harmony export */   VALUE_NUMPAD6: () => (/* binding */ VALUE_NUMPAD6),
/* harmony export */   VALUE_NUMPAD7: () => (/* binding */ VALUE_NUMPAD7),
/* harmony export */   VALUE_NUMPAD8: () => (/* binding */ VALUE_NUMPAD8),
/* harmony export */   VALUE_NUMPAD9: () => (/* binding */ VALUE_NUMPAD9),
/* harmony export */   VALUE_NUM_LOCK: () => (/* binding */ VALUE_NUM_LOCK),
/* harmony export */   VALUE_O: () => (/* binding */ VALUE_O),
/* harmony export */   VALUE_OPEN_BRACKET: () => (/* binding */ VALUE_OPEN_BRACKET),
/* harmony export */   VALUE_P: () => (/* binding */ VALUE_P),
/* harmony export */   VALUE_PAGE_DOWN: () => (/* binding */ VALUE_PAGE_DOWN),
/* harmony export */   VALUE_PAGE_UP: () => (/* binding */ VALUE_PAGE_UP),
/* harmony export */   VALUE_PAUSE: () => (/* binding */ VALUE_PAUSE),
/* harmony export */   VALUE_PERIOD: () => (/* binding */ VALUE_PERIOD),
/* harmony export */   VALUE_PRINTSCREEN: () => (/* binding */ VALUE_PRINTSCREEN),
/* harmony export */   VALUE_Q: () => (/* binding */ VALUE_Q),
/* harmony export */   VALUE_QUOTE: () => (/* binding */ VALUE_QUOTE),
/* harmony export */   VALUE_R: () => (/* binding */ VALUE_R),
/* harmony export */   VALUE_RETURN: () => (/* binding */ VALUE_RETURN),
/* harmony export */   VALUE_RIGHT: () => (/* binding */ VALUE_RIGHT),
/* harmony export */   VALUE_RIGHT_CMD: () => (/* binding */ VALUE_RIGHT_CMD),
/* harmony export */   VALUE_S: () => (/* binding */ VALUE_S),
/* harmony export */   VALUE_SCROLL_LOCK: () => (/* binding */ VALUE_SCROLL_LOCK),
/* harmony export */   VALUE_SEMICOLON: () => (/* binding */ VALUE_SEMICOLON),
/* harmony export */   VALUE_SHIFT: () => (/* binding */ VALUE_SHIFT),
/* harmony export */   VALUE_SLASH: () => (/* binding */ VALUE_SLASH),
/* harmony export */   VALUE_SPACE: () => (/* binding */ VALUE_SPACE),
/* harmony export */   VALUE_SUBTRACT: () => (/* binding */ VALUE_SUBTRACT),
/* harmony export */   VALUE_T: () => (/* binding */ VALUE_T),
/* harmony export */   VALUE_TAB: () => (/* binding */ VALUE_TAB),
/* harmony export */   VALUE_U: () => (/* binding */ VALUE_U),
/* harmony export */   VALUE_UP: () => (/* binding */ VALUE_UP),
/* harmony export */   VALUE_V: () => (/* binding */ VALUE_V),
/* harmony export */   VALUE_W: () => (/* binding */ VALUE_W),
/* harmony export */   VALUE_X: () => (/* binding */ VALUE_X),
/* harmony export */   VALUE_Y: () => (/* binding */ VALUE_Y),
/* harmony export */   VALUE_Z: () => (/* binding */ VALUE_Z)
/* harmony export */ });
// Key code constants
// Available values for `KeyboardEvent.keyCode` attribute.
var KEY_CANCEL = 3;
var KEY_HELP = 6;
var KEY_BACK_SPACE = 8;
var KEY_TAB = 9;
var KEY_CLEAR = 12;
var KEY_RETURN = 13;
var KEY_SHIFT = 16;
var KEY_CONTROL = 17;
var KEY_ALT = 18;
var KEY_PAUSE = 19;
var KEY_CAPS_LOCK = 20;
var KEY_ESCAPE = 27;
var KEY_SPACE = 32;
var KEY_PAGE_UP = 33;
var KEY_PAGE_DOWN = 34;
var KEY_END = 35;
var KEY_HOME = 36;
var KEY_LEFT = 37;
var KEY_UP = 38;
var KEY_RIGHT = 39;
var KEY_DOWN = 40;
var KEY_PRINTSCREEN = 44;
var KEY_INSERT = 45;
var KEY_DELETE = 46;
var KEY_0 = 48;
var KEY_1 = 49;
var KEY_2 = 50;
var KEY_3 = 51;
var KEY_4 = 52;
var KEY_5 = 53;
var KEY_6 = 54;
var KEY_7 = 55;
var KEY_8 = 56;
var KEY_9 = 57;
var KEY_A = 65;
var KEY_B = 66;
var KEY_C = 67;
var KEY_D = 68;
var KEY_E = 69;
var KEY_F = 70;
var KEY_G = 71;
var KEY_H = 72;
var KEY_I = 73;
var KEY_J = 74;
var KEY_K = 75;
var KEY_L = 76;
var KEY_M = 77;
var KEY_N = 78;
var KEY_O = 79;
var KEY_P = 80;
var KEY_Q = 81;
var KEY_R = 82;
var KEY_S = 83;
var KEY_T = 84;
var KEY_U = 85;
var KEY_V = 86;
var KEY_W = 87;
var KEY_X = 88;
var KEY_Y = 89;
var KEY_Z = 90;
var KEY_LEFT_CMD = 91;
var KEY_RIGHT_CMD = 92;
var KEY_CONTEXT_MENU = 93;
var KEY_NUMPAD0 = 96;
var KEY_NUMPAD1 = 97;
var KEY_NUMPAD2 = 98;
var KEY_NUMPAD3 = 99;
var KEY_NUMPAD4 = 100;
var KEY_NUMPAD5 = 101;
var KEY_NUMPAD6 = 102;
var KEY_NUMPAD7 = 103;
var KEY_NUMPAD8 = 104;
var KEY_NUMPAD9 = 105;
var KEY_MULTIPLY = 106;
var KEY_ADD = 107;
var KEY_SUBTRACT = 109;
var KEY_DECIMAL = 110;
var KEY_DIVIDE = 111;
var KEY_F1 = 112;
var KEY_F2 = 113;
var KEY_F3 = 114;
var KEY_F4 = 115;
var KEY_F5 = 116;
var KEY_F6 = 117;
var KEY_F7 = 118;
var KEY_F8 = 119;
var KEY_F9 = 120;
var KEY_F10 = 121;
var KEY_F11 = 122;
var KEY_F12 = 123;
var KEY_F13 = 124;
var KEY_F14 = 125;
var KEY_F15 = 126;
var KEY_F16 = 127;
var KEY_F17 = 128;
var KEY_F18 = 129;
var KEY_F19 = 130;
var KEY_F20 = 131;
var KEY_F21 = 132;
var KEY_F22 = 133;
var KEY_F23 = 134;
var KEY_F24 = 135;
var KEY_NUM_LOCK = 144;
var KEY_SCROLL_LOCK = 145;
var KEY_SEMICOLON = 186;
var KEY_EQUALS = 187;
var KEY_COMMA = 188;
var KEY_DASH = 189;
var KEY_PERIOD = 190;
var KEY_SLASH = 191;
var KEY_BACK_QUOTE = 192;
var KEY_OPEN_BRACKET = 219;
var KEY_BACK_SLASH = 220;
var KEY_CLOSE_BRACKET = 221;
var KEY_QUOTE = 222;
// Key code constants specific to firefox only.
var KEY_FIREFOX_ENTER = 14;
var KEY_FIREFOX_SEMICOLON = 59;
var KEY_FIREFOX_EQUALS = 61;
var KEY_FIREFOX_SEPARATOR = 108;
var KEY_FIREFOX_META = 224;
// Key values constants
// Available values for `KeyboardEvent.key` attribute.
var VALUE_CANCEL = 'Cancel';
var VALUE_HELP = 'Help';
var VALUE_BACK_SPACE = 'Backspace';
var VALUE_TAB = 'Tab';
var VALUE_CLEAR = 'Clear';
var VALUE_ENTER = 'Enter';
var VALUE_RETURN = 'Enter';
var VALUE_SHIFT = 'Shift';
var VALUE_CONTROL = 'Control';
var VALUE_ALT = 'Alt';
var VALUE_PAUSE = 'Pause';
var VALUE_CAPS_LOCK = 'CapsLock';
var VALUE_ESCAPE = 'Escape';
var VALUE_SPACE = ' ';
var VALUE_PAGE_UP = 'PageUp';
var VALUE_PAGE_DOWN = 'PageDown';
var VALUE_END = 'End';
var VALUE_HOME = 'Home';
var VALUE_LEFT = 'ArrowLeft';
var VALUE_UP = 'ArrowUp';
var VALUE_RIGHT = 'ArrowRight';
var VALUE_DOWN = 'ArrowDown';
var VALUE_PRINTSCREEN = 'PrintScreen';
var VALUE_INSERT = 'Insert';
var VALUE_DELETE = 'Delete';
var VALUE_0 = '0';
var VALUE_1 = '1';
var VALUE_2 = '2';
var VALUE_3 = '3';
var VALUE_4 = '4';
var VALUE_5 = '5';
var VALUE_6 = '6';
var VALUE_7 = '7';
var VALUE_8 = '8';
var VALUE_9 = '9';
var VALUE_A = 'a';
var VALUE_B = 'b';
var VALUE_C = 'c';
var VALUE_D = 'd';
var VALUE_E = 'e';
var VALUE_F = 'f';
var VALUE_G = 'g';
var VALUE_H = 'h';
var VALUE_I = 'i';
var VALUE_J = 'j';
var VALUE_K = 'k';
var VALUE_L = 'l';
var VALUE_M = 'm';
var VALUE_N = 'n';
var VALUE_O = 'o';
var VALUE_P = 'p';
var VALUE_Q = 'q';
var VALUE_R = 'r';
var VALUE_S = 's';
var VALUE_T = 't';
var VALUE_U = 'u';
var VALUE_V = 'v';
var VALUE_W = 'w';
var VALUE_X = 'x';
var VALUE_Y = 'y';
var VALUE_Z = 'z';
var VALUE_META = 'Meta';
var VALUE_LEFT_CMD = 'Meta';
var VALUE_RIGHT_CMD = 'Meta';
var VALUE_CONTEXT_MENU = 'ContextMenu';
var VALUE_NUMPAD0 = '0';
var VALUE_NUMPAD1 = '1';
var VALUE_NUMPAD2 = '2';
var VALUE_NUMPAD3 = '3';
var VALUE_NUMPAD4 = '4';
var VALUE_NUMPAD5 = '5';
var VALUE_NUMPAD6 = '6';
var VALUE_NUMPAD7 = '7';
var VALUE_NUMPAD8 = '8';
var VALUE_NUMPAD9 = '9';
var VALUE_MULTIPLY = '*';
var VALUE_ADD = '+';
var VALUE_SUBTRACT = '-';
var VALUE_DECIMAL = '.';
var VALUE_DIVIDE = '/';
var VALUE_F1 = 'F1';
var VALUE_F2 = 'F2';
var VALUE_F3 = 'F3';
var VALUE_F4 = 'F4';
var VALUE_F5 = 'F5';
var VALUE_F6 = 'F6';
var VALUE_F7 = 'F7';
var VALUE_F8 = 'F8';
var VALUE_F9 = 'F9';
var VALUE_F10 = 'F10';
var VALUE_F11 = 'F11';
var VALUE_F12 = 'F12';
var VALUE_F13 = 'F13';
var VALUE_F14 = 'F14';
var VALUE_F15 = 'F15';
var VALUE_F16 = 'F16';
var VALUE_F17 = 'F17';
var VALUE_F18 = 'F18';
var VALUE_F19 = 'F19';
var VALUE_F20 = 'F20';
var VALUE_F21 = 'F21';
var VALUE_F22 = 'F22';
var VALUE_F23 = 'F23';
var VALUE_F24 = 'F24';
var VALUE_NUM_LOCK = 'NumLock';
var VALUE_SCROLL_LOCK = 'ScrollLock';
var VALUE_SEMICOLON = ';';
var VALUE_EQUALS = '=';
var VALUE_COMMA = ',';
var VALUE_DASH = '-';
var VALUE_PERIOD = '.';
var VALUE_SLASH = '/';
var VALUE_BACK_QUOTE = '`';
var VALUE_OPEN_BRACKET = '[';
var VALUE_BACK_SLASH = '\\';
var VALUE_CLOSE_BRACKET = ']';
var VALUE_QUOTE = "'";
// Key code constants
// Available values for `KeyboardEvent.code` attribute.
var CODE_UNIDENTIFIED = 'Unidentified';
var CODE_ESCAPE = 'Escape';
var CODE_MINUS = 'Minus';
var CODE_DASH = 'Minus';
var CODE_EQUALS = 'Equal';
var CODE_BACK_SPACE = 'Backspace';
var CODE_TAB = 'Tab';
var CODE_ENTER = 'Enter';
var CODE_RETURN = 'Enter';
var CODE_SHIFT_LEFT = 'ShiftLeft';
var CODE_SHIFT_RIGHT = 'ShiftRight';
var CODE_CONTROL_LEFT = 'ControlLeft';
var CODE_CONTROL_RIGHT = 'ControlRight';
var CODE_ALT_LEFT = 'AltLeft';
var CODE_ALT_RIGHT = 'AltRight';
var CODE_PAUSE = 'Pause';
var CODE_CAPS_LOCK = 'CapsLock';
var CODE_SPACE = 'Space';
var CODE_PAGE_UP = 'PageUp';
var CODE_PAGE_DOWN = 'PageDown';
var CODE_END = 'End';
var CODE_HOME = 'Home';
var CODE_LEFT = 'ArrowLeft';
var CODE_UP = 'ArrowUp';
var CODE_RIGHT = 'ArrowRight';
var CODE_DOWN = 'ArrowDown';
var CODE_PRINTSCREEN = 'PrintScreen';
var CODE_INSERT = 'Insert';
var CODE_DELETE = 'Delete';
var CODE_0 = 'Digit0';
var CODE_1 = 'Digit1';
var CODE_2 = 'Digit2';
var CODE_3 = 'Digit3';
var CODE_4 = 'Digit4';
var CODE_5 = 'Digit5';
var CODE_6 = 'Digit6';
var CODE_7 = 'Digit7';
var CODE_8 = 'Digit8';
var CODE_9 = 'Digit9';
var CODE_A = 'KeyA';
var CODE_B = 'KeyB';
var CODE_C = 'KeyC';
var CODE_D = 'KeyD';
var CODE_E = 'KeyE';
var CODE_F = 'KeyF';
var CODE_G = 'KeyG';
var CODE_H = 'KeyH';
var CODE_I = 'KeyI';
var CODE_J = 'KeyJ';
var CODE_K = 'KeyK';
var CODE_L = 'KeyL';
var CODE_M = 'KeyM';
var CODE_N = 'KeyN';
var CODE_O = 'KeyO';
var CODE_P = 'KeyP';
var CODE_Q = 'KeyQ';
var CODE_R = 'KeyR';
var CODE_S = 'KeyS';
var CODE_T = 'KeyT';
var CODE_U = 'KeyU';
var CODE_V = 'KeyV';
var CODE_W = 'KeyW';
var CODE_X = 'KeyX';
var CODE_Y = 'KeyY';
var CODE_Z = 'KeyZ';
var CODE_META_LEFT = 'MetaLeft';
var CODE_OS_LEFT = 'OSLeft';
var CODE_META_RIGHT = 'MetaRight';
var CODE_OS_RIGHT = 'OSRight';
var CODE_CONTEXT_MENU = 'ContextMenu';
var CODE_NUMPAD0 = 'Numpad0';
var CODE_NUMPAD1 = 'Numpad1';
var CODE_NUMPAD2 = 'Numpad2';
var CODE_NUMPAD3 = 'Numpad3';
var CODE_NUMPAD4 = 'Numpad4';
var CODE_NUMPAD5 = 'Numpad5';
var CODE_NUMPAD6 = 'Numpad6';
var CODE_NUMPAD7 = 'Numpad7';
var CODE_NUMPAD8 = 'Numpad8';
var CODE_NUMPAD9 = 'Numpad9';
var CODE_NUMPAD_MULTIPLY = 'NumpadMultiply';
var CODE_NUMPAD_ADD = 'NumpadAdd';
var CODE_NUMPAD_SUBTRACT = 'NumpadSubtract';
var CODE_NUMPAD_DECIMAL = 'NumpadDecimal';
var CODE_NUMPAD_DIVIDE = 'NumpadDivide';
var CODE_NUMPAD_ENTER = 'NumpadEnter';
var CODE_F1 = 'F1';
var CODE_F2 = 'F2';
var CODE_F3 = 'F3';
var CODE_F4 = 'F4';
var CODE_F5 = 'F5';
var CODE_F6 = 'F6';
var CODE_F7 = 'F7';
var CODE_F8 = 'F8';
var CODE_F9 = 'F9';
var CODE_F10 = 'F10';
var CODE_F11 = 'F11';
var CODE_F12 = 'F12';
var CODE_F13 = 'F13';
var CODE_F14 = 'F14';
var CODE_F15 = 'F15';
var CODE_F16 = 'F16';
var CODE_F17 = 'F17';
var CODE_F18 = 'F18';
var CODE_F19 = 'F19';
var CODE_F20 = 'F20';
var CODE_F21 = 'F21';
var CODE_F22 = 'F22';
var CODE_F23 = 'F23';
var CODE_F24 = 'F24';
var CODE_NUM_LOCK = 'NumLock';
var CODE_SCROLL_LOCK = 'ScrollLock';
var CODE_SEMICOLON = 'Semicolon';
var CODE_COMMA = 'Comma';
var CODE_PERIOD = 'Period';
var CODE_SLASH = 'Slash';
var CODE_BACK_QUOTE = 'Backquote';
var CODE_OPEN_BRACKET = 'BracketLeft';
var CODE_BACK_SLASH = 'Backslash';
var CODE_CLOSE_BRACKET = 'BracketRight';
var CODE_QUOTE = 'Quote';




/***/ }),

/***/ 6486:
/***/ (function(module, exports, __webpack_require__) {

/* module decorator */ module = __webpack_require__.nmd(module);
var __WEBPACK_AMD_DEFINE_RESULT__;/**
 * @license
 * Lodash <https://lodash.com/>
 * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
 * Released under MIT license <https://lodash.com/license>
 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
 */
;(function() {

  /** Used as a safe reference for `undefined` in pre-ES5 environments. */
  var undefined;

  /** Used as the semantic version number. */
  var VERSION = '4.17.21';

  /** Used as the size to enable large array optimizations. */
  var LARGE_ARRAY_SIZE = 200;

  /** Error message constants. */
  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
      FUNC_ERROR_TEXT = 'Expected a function',
      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';

  /** Used to stand-in for `undefined` hash values. */
  var HASH_UNDEFINED = '__lodash_hash_undefined__';

  /** Used as the maximum memoize cache size. */
  var MAX_MEMOIZE_SIZE = 500;

  /** Used as the internal argument placeholder. */
  var PLACEHOLDER = '__lodash_placeholder__';

  /** Used to compose bitmasks for cloning. */
  var CLONE_DEEP_FLAG = 1,
      CLONE_FLAT_FLAG = 2,
      CLONE_SYMBOLS_FLAG = 4;

  /** Used to compose bitmasks for value comparisons. */
  var COMPARE_PARTIAL_FLAG = 1,
      COMPARE_UNORDERED_FLAG = 2;

  /** Used to compose bitmasks for function metadata. */
  var WRAP_BIND_FLAG = 1,
      WRAP_BIND_KEY_FLAG = 2,
      WRAP_CURRY_BOUND_FLAG = 4,
      WRAP_CURRY_FLAG = 8,
      WRAP_CURRY_RIGHT_FLAG = 16,
      WRAP_PARTIAL_FLAG = 32,
      WRAP_PARTIAL_RIGHT_FLAG = 64,
      WRAP_ARY_FLAG = 128,
      WRAP_REARG_FLAG = 256,
      WRAP_FLIP_FLAG = 512;

  /** Used as default options for `_.truncate`. */
  var DEFAULT_TRUNC_LENGTH = 30,
      DEFAULT_TRUNC_OMISSION = '...';

  /** Used to detect hot functions by number of calls within a span of milliseconds. */
  var HOT_COUNT = 800,
      HOT_SPAN = 16;

  /** Used to indicate the type of lazy iteratees. */
  var LAZY_FILTER_FLAG = 1,
      LAZY_MAP_FLAG = 2,
      LAZY_WHILE_FLAG = 3;

  /** Used as references for various `Number` constants. */
  var INFINITY = 1 / 0,
      MAX_SAFE_INTEGER = 9007199254740991,
      MAX_INTEGER = 1.7976931348623157e+308,
      NAN = 0 / 0;

  /** Used as references for the maximum length and index of an array. */
  var MAX_ARRAY_LENGTH = 4294967295,
      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;

  /** Used to associate wrap methods with their bit flags. */
  var wrapFlags = [
    ['ary', WRAP_ARY_FLAG],
    ['bind', WRAP_BIND_FLAG],
    ['bindKey', WRAP_BIND_KEY_FLAG],
    ['curry', WRAP_CURRY_FLAG],
    ['curryRight', WRAP_CURRY_RIGHT_FLAG],
    ['flip', WRAP_FLIP_FLAG],
    ['partial', WRAP_PARTIAL_FLAG],
    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
    ['rearg', WRAP_REARG_FLAG]
  ];

  /** `Object#toString` result references. */
  var argsTag = '[object Arguments]',
      arrayTag = '[object Array]',
      asyncTag = '[object AsyncFunction]',
      boolTag = '[object Boolean]',
      dateTag = '[object Date]',
      domExcTag = '[object DOMException]',
      errorTag = '[object Error]',
      funcTag = '[object Function]',
      genTag = '[object GeneratorFunction]',
      mapTag = '[object Map]',
      numberTag = '[object Number]',
      nullTag = '[object Null]',
      objectTag = '[object Object]',
      promiseTag = '[object Promise]',
      proxyTag = '[object Proxy]',
      regexpTag = '[object RegExp]',
      setTag = '[object Set]',
      stringTag = '[object String]',
      symbolTag = '[object Symbol]',
      undefinedTag = '[object Undefined]',
      weakMapTag = '[object WeakMap]',
      weakSetTag = '[object WeakSet]';

  var arrayBufferTag = '[object ArrayBuffer]',
      dataViewTag = '[object DataView]',
      float32Tag = '[object Float32Array]',
      float64Tag = '[object Float64Array]',
      int8Tag = '[object Int8Array]',
      int16Tag = '[object Int16Array]',
      int32Tag = '[object Int32Array]',
      uint8Tag = '[object Uint8Array]',
      uint8ClampedTag = '[object Uint8ClampedArray]',
      uint16Tag = '[object Uint16Array]',
      uint32Tag = '[object Uint32Array]';

  /** Used to match empty string literals in compiled template source. */
  var reEmptyStringLeading = /\b__p \+= '';/g,
      reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
      reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;

  /** Used to match HTML entities and HTML characters. */
  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
      reUnescapedHtml = /[&<>"']/g,
      reHasEscapedHtml = RegExp(reEscapedHtml.source),
      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);

  /** Used to match template delimiters. */
  var reEscape = /<%-([\s\S]+?)%>/g,
      reEvaluate = /<%([\s\S]+?)%>/g,
      reInterpolate = /<%=([\s\S]+?)%>/g;

  /** Used to match property names within property paths. */
  var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
      reIsPlainProp = /^\w*$/,
      rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;

  /**
   * Used to match `RegExp`
   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
   */
  var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
      reHasRegExpChar = RegExp(reRegExpChar.source);

  /** Used to match leading whitespace. */
  var reTrimStart = /^\s+/;

  /** Used to match a single whitespace character. */
  var reWhitespace = /\s/;

  /** Used to match wrap detail comments. */
  var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
      reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
      reSplitDetails = /,? & /;

  /** Used to match words composed of alphanumeric characters. */
  var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;

  /**
   * Used to validate the `validate` option in `_.template` variable.
   *
   * Forbids characters which could potentially change the meaning of the function argument definition:
   * - "()," (modification of function parameters)
   * - "=" (default value)
   * - "[]{}" (destructuring of function parameters)
   * - "/" (beginning of a comment)
   * - whitespace
   */
  var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/;

  /** Used to match backslashes in property paths. */
  var reEscapeChar = /\\(\\)?/g;

  /**
   * Used to match
   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).
   */
  var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;

  /** Used to match `RegExp` flags from their coerced string values. */
  var reFlags = /\w*$/;

  /** Used to detect bad signed hexadecimal string values. */
  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;

  /** Used to detect binary string values. */
  var reIsBinary = /^0b[01]+$/i;

  /** Used to detect host constructors (Safari). */
  var reIsHostCtor = /^\[object .+?Constructor\]$/;

  /** Used to detect octal string values. */
  var reIsOctal = /^0o[0-7]+$/i;

  /** Used to detect unsigned integer values. */
  var reIsUint = /^(?:0|[1-9]\d*)$/;

  /** Used to match Latin Unicode letters (excluding mathematical operators). */
  var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;

  /** Used to ensure capturing order of template delimiters. */
  var reNoMatch = /($^)/;

  /** Used to match unescaped characters in compiled string literals. */
  var reUnescapedString = /['\n\r\u2028\u2029\\]/g;

  /** Used to compose unicode character classes. */
  var rsAstralRange = '\\ud800-\\udfff',
      rsComboMarksRange = '\\u0300-\\u036f',
      reComboHalfMarksRange = '\\ufe20-\\ufe2f',
      rsComboSymbolsRange = '\\u20d0-\\u20ff',
      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
      rsDingbatRange = '\\u2700-\\u27bf',
      rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
      rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
      rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
      rsPunctuationRange = '\\u2000-\\u206f',
      rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',
      rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
      rsVarRange = '\\ufe0e\\ufe0f',
      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;

  /** Used to compose unicode capture groups. */
  var rsApos = "['\u2019]",
      rsAstral = '[' + rsAstralRange + ']',
      rsBreak = '[' + rsBreakRange + ']',
      rsCombo = '[' + rsComboRange + ']',
      rsDigits = '\\d+',
      rsDingbat = '[' + rsDingbatRange + ']',
      rsLower = '[' + rsLowerRange + ']',
      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
      rsFitz = '\\ud83c[\\udffb-\\udfff]',
      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
      rsNonAstral = '[^' + rsAstralRange + ']',
      rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
      rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
      rsUpper = '[' + rsUpperRange + ']',
      rsZWJ = '\\u200d';

  /** Used to compose unicode regexes. */
  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
      reOptMod = rsModifier + '?',
      rsOptVar = '[' + rsVarRange + ']?',
      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
      rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
      rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
      rsSeq = rsOptVar + reOptMod + rsOptJoin,
      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';

  /** Used to match apostrophes. */
  var reApos = RegExp(rsApos, 'g');

  /**
   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
   */
  var reComboMark = RegExp(rsCombo, 'g');

  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');

  /** Used to match complex or compound words. */
  var reUnicodeWord = RegExp([
    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',
    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,
    rsUpper + '+' + rsOptContrUpper,
    rsOrdUpper,
    rsOrdLower,
    rsDigits,
    rsEmoji
  ].join('|'), 'g');

  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');

  /** Used to detect strings that need a more robust regexp to match words. */
  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;

  /** Used to assign default `context` object properties. */
  var contextProps = [
    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',
    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',
    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',
    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',
    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'
  ];

  /** Used to make template sourceURLs easier to identify. */
  var templateCounter = -1;

  /** Used to identify `toStringTag` values of typed arrays. */
  var typedArrayTags = {};
  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
  typedArrayTags[uint32Tag] = true;
  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
  typedArrayTags[errorTag] = typedArrayTags[funcTag] =
  typedArrayTags[mapTag] = typedArrayTags[numberTag] =
  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
  typedArrayTags[setTag] = typedArrayTags[stringTag] =
  typedArrayTags[weakMapTag] = false;

  /** Used to identify `toStringTag` values supported by `_.clone`. */
  var cloneableTags = {};
  cloneableTags[argsTag] = cloneableTags[arrayTag] =
  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
  cloneableTags[boolTag] = cloneableTags[dateTag] =
  cloneableTags[float32Tag] = cloneableTags[float64Tag] =
  cloneableTags[int8Tag] = cloneableTags[int16Tag] =
  cloneableTags[int32Tag] = cloneableTags[mapTag] =
  cloneableTags[numberTag] = cloneableTags[objectTag] =
  cloneableTags[regexpTag] = cloneableTags[setTag] =
  cloneableTags[stringTag] = cloneableTags[symbolTag] =
  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
  cloneableTags[errorTag] = cloneableTags[funcTag] =
  cloneableTags[weakMapTag] = false;

  /** Used to map Latin Unicode letters to basic Latin letters. */
  var deburredLetters = {
    // Latin-1 Supplement block.
    '\xc0': 'A',  '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
    '\xe0': 'a',  '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
    '\xc7': 'C',  '\xe7': 'c',
    '\xd0': 'D',  '\xf0': 'd',
    '\xc8': 'E',  '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
    '\xe8': 'e',  '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
    '\xcc': 'I',  '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
    '\xec': 'i',  '\xed': 'i', '\xee': 'i', '\xef': 'i',
    '\xd1': 'N',  '\xf1': 'n',
    '\xd2': 'O',  '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
    '\xf2': 'o',  '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
    '\xd9': 'U',  '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
    '\xf9': 'u',  '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
    '\xdd': 'Y',  '\xfd': 'y', '\xff': 'y',
    '\xc6': 'Ae', '\xe6': 'ae',
    '\xde': 'Th', '\xfe': 'th',
    '\xdf': 'ss',
    // Latin Extended-A block.
    '\u0100': 'A',  '\u0102': 'A', '\u0104': 'A',
    '\u0101': 'a',  '\u0103': 'a', '\u0105': 'a',
    '\u0106': 'C',  '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
    '\u0107': 'c',  '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
    '\u010e': 'D',  '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
    '\u0112': 'E',  '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
    '\u0113': 'e',  '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
    '\u011c': 'G',  '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
    '\u011d': 'g',  '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
    '\u0124': 'H',  '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
    '\u0128': 'I',  '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
    '\u0129': 'i',  '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
    '\u0134': 'J',  '\u0135': 'j',
    '\u0136': 'K',  '\u0137': 'k', '\u0138': 'k',
    '\u0139': 'L',  '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
    '\u013a': 'l',  '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
    '\u0143': 'N',  '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
    '\u0144': 'n',  '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
    '\u014c': 'O',  '\u014e': 'O', '\u0150': 'O',
    '\u014d': 'o',  '\u014f': 'o', '\u0151': 'o',
    '\u0154': 'R',  '\u0156': 'R', '\u0158': 'R',
    '\u0155': 'r',  '\u0157': 'r', '\u0159': 'r',
    '\u015a': 'S',  '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
    '\u015b': 's',  '\u015d': 's', '\u015f': 's', '\u0161': 's',
    '\u0162': 'T',  '\u0164': 'T', '\u0166': 'T',
    '\u0163': 't',  '\u0165': 't', '\u0167': 't',
    '\u0168': 'U',  '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
    '\u0169': 'u',  '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
    '\u0174': 'W',  '\u0175': 'w',
    '\u0176': 'Y',  '\u0177': 'y', '\u0178': 'Y',
    '\u0179': 'Z',  '\u017b': 'Z', '\u017d': 'Z',
    '\u017a': 'z',  '\u017c': 'z', '\u017e': 'z',
    '\u0132': 'IJ', '\u0133': 'ij',
    '\u0152': 'Oe', '\u0153': 'oe',
    '\u0149': "'n", '\u017f': 's'
  };

  /** Used to map characters to HTML entities. */
  var htmlEscapes = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#39;'
  };

  /** Used to map HTML entities to characters. */
  var htmlUnescapes = {
    '&amp;': '&',
    '&lt;': '<',
    '&gt;': '>',
    '&quot;': '"',
    '&#39;': "'"
  };

  /** Used to escape characters for inclusion in compiled string literals. */
  var stringEscapes = {
    '\\': '\\',
    "'": "'",
    '\n': 'n',
    '\r': 'r',
    '\u2028': 'u2028',
    '\u2029': 'u2029'
  };

  /** Built-in method references without a dependency on `root`. */
  var freeParseFloat = parseFloat,
      freeParseInt = parseInt;

  /** Detect free variable `global` from Node.js. */
  var freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g;

  /** Detect free variable `self`. */
  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;

  /** Used as a reference to the global object. */
  var root = freeGlobal || freeSelf || Function('return this')();

  /** Detect free variable `exports`. */
  var freeExports =  true && exports && !exports.nodeType && exports;

  /** Detect free variable `module`. */
  var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module;

  /** Detect the popular CommonJS extension `module.exports`. */
  var moduleExports = freeModule && freeModule.exports === freeExports;

  /** Detect free variable `process` from Node.js. */
  var freeProcess = moduleExports && freeGlobal.process;

  /** Used to access faster Node.js helpers. */
  var nodeUtil = (function() {
    try {
      // Use `util.types` for Node.js 10+.
      var types = freeModule && freeModule.require && freeModule.require('util').types;

      if (types) {
        return types;
      }

      // Legacy `process.binding('util')` for Node.js < 10.
      return freeProcess && freeProcess.binding && freeProcess.binding('util');
    } catch (e) {}
  }());

  /* Node.js helper references. */
  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,
      nodeIsDate = nodeUtil && nodeUtil.isDate,
      nodeIsMap = nodeUtil && nodeUtil.isMap,
      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,
      nodeIsSet = nodeUtil && nodeUtil.isSet,
      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;

  /*--------------------------------------------------------------------------*/

  /**
   * A faster alternative to `Function#apply`, this function invokes `func`
   * with the `this` binding of `thisArg` and the arguments of `args`.
   *
   * @private
   * @param {Function} func The function to invoke.
   * @param {*} thisArg The `this` binding of `func`.
   * @param {Array} args The arguments to invoke `func` with.
   * @returns {*} Returns the result of `func`.
   */
  function apply(func, thisArg, args) {
    switch (args.length) {
      case 0: return func.call(thisArg);
      case 1: return func.call(thisArg, args[0]);
      case 2: return func.call(thisArg, args[0], args[1]);
      case 3: return func.call(thisArg, args[0], args[1], args[2]);
    }
    return func.apply(thisArg, args);
  }

  /**
   * A specialized version of `baseAggregator` for arrays.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} setter The function to set `accumulator` values.
   * @param {Function} iteratee The iteratee to transform keys.
   * @param {Object} accumulator The initial aggregated object.
   * @returns {Function} Returns `accumulator`.
   */
  function arrayAggregator(array, setter, iteratee, accumulator) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      var value = array[index];
      setter(accumulator, value, iteratee(value), array);
    }
    return accumulator;
  }

  /**
   * A specialized version of `_.forEach` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns `array`.
   */
  function arrayEach(array, iteratee) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (iteratee(array[index], index, array) === false) {
        break;
      }
    }
    return array;
  }

  /**
   * A specialized version of `_.forEachRight` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns `array`.
   */
  function arrayEachRight(array, iteratee) {
    var length = array == null ? 0 : array.length;

    while (length--) {
      if (iteratee(array[length], length, array) === false) {
        break;
      }
    }
    return array;
  }

  /**
   * A specialized version of `_.every` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {boolean} Returns `true` if all elements pass the predicate check,
   *  else `false`.
   */
  function arrayEvery(array, predicate) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (!predicate(array[index], index, array)) {
        return false;
      }
    }
    return true;
  }

  /**
   * A specialized version of `_.filter` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {Array} Returns the new filtered array.
   */
  function arrayFilter(array, predicate) {
    var index = -1,
        length = array == null ? 0 : array.length,
        resIndex = 0,
        result = [];

    while (++index < length) {
      var value = array[index];
      if (predicate(value, index, array)) {
        result[resIndex++] = value;
      }
    }
    return result;
  }

  /**
   * A specialized version of `_.includes` for arrays without support for
   * specifying an index to search from.
   *
   * @private
   * @param {Array} [array] The array to inspect.
   * @param {*} target The value to search for.
   * @returns {boolean} Returns `true` if `target` is found, else `false`.
   */
  function arrayIncludes(array, value) {
    var length = array == null ? 0 : array.length;
    return !!length && baseIndexOf(array, value, 0) > -1;
  }

  /**
   * This function is like `arrayIncludes` except that it accepts a comparator.
   *
   * @private
   * @param {Array} [array] The array to inspect.
   * @param {*} target The value to search for.
   * @param {Function} comparator The comparator invoked per element.
   * @returns {boolean} Returns `true` if `target` is found, else `false`.
   */
  function arrayIncludesWith(array, value, comparator) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (comparator(value, array[index])) {
        return true;
      }
    }
    return false;
  }

  /**
   * A specialized version of `_.map` for arrays without support for iteratee
   * shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns the new mapped array.
   */
  function arrayMap(array, iteratee) {
    var index = -1,
        length = array == null ? 0 : array.length,
        result = Array(length);

    while (++index < length) {
      result[index] = iteratee(array[index], index, array);
    }
    return result;
  }

  /**
   * Appends the elements of `values` to `array`.
   *
   * @private
   * @param {Array} array The array to modify.
   * @param {Array} values The values to append.
   * @returns {Array} Returns `array`.
   */
  function arrayPush(array, values) {
    var index = -1,
        length = values.length,
        offset = array.length;

    while (++index < length) {
      array[offset + index] = values[index];
    }
    return array;
  }

  /**
   * A specialized version of `_.reduce` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} [accumulator] The initial value.
   * @param {boolean} [initAccum] Specify using the first element of `array` as
   *  the initial value.
   * @returns {*} Returns the accumulated value.
   */
  function arrayReduce(array, iteratee, accumulator, initAccum) {
    var index = -1,
        length = array == null ? 0 : array.length;

    if (initAccum && length) {
      accumulator = array[++index];
    }
    while (++index < length) {
      accumulator = iteratee(accumulator, array[index], index, array);
    }
    return accumulator;
  }

  /**
   * A specialized version of `_.reduceRight` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} [accumulator] The initial value.
   * @param {boolean} [initAccum] Specify using the last element of `array` as
   *  the initial value.
   * @returns {*} Returns the accumulated value.
   */
  function arrayReduceRight(array, iteratee, accumulator, initAccum) {
    var length = array == null ? 0 : array.length;
    if (initAccum && length) {
      accumulator = array[--length];
    }
    while (length--) {
      accumulator = iteratee(accumulator, array[length], length, array);
    }
    return accumulator;
  }

  /**
   * A specialized version of `_.some` for arrays without support for iteratee
   * shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {boolean} Returns `true` if any element passes the predicate check,
   *  else `false`.
   */
  function arraySome(array, predicate) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (predicate(array[index], index, array)) {
        return true;
      }
    }
    return false;
  }

  /**
   * Gets the size of an ASCII `string`.
   *
   * @private
   * @param {string} string The string inspect.
   * @returns {number} Returns the string size.
   */
  var asciiSize = baseProperty('length');

  /**
   * Converts an ASCII `string` to an array.
   *
   * @private
   * @param {string} string The string to convert.
   * @returns {Array} Returns the converted array.
   */
  function asciiToArray(string) {
    return string.split('');
  }

  /**
   * Splits an ASCII `string` into an array of its words.
   *
   * @private
   * @param {string} The string to inspect.
   * @returns {Array} Returns the words of `string`.
   */
  function asciiWords(string) {
    return string.match(reAsciiWord) || [];
  }

  /**
   * The base implementation of methods like `_.findKey` and `_.findLastKey`,
   * without support for iteratee shorthands, which iterates over `collection`
   * using `eachFunc`.
   *
   * @private
   * @param {Array|Object} collection The collection to inspect.
   * @param {Function} predicate The function invoked per iteration.
   * @param {Function} eachFunc The function to iterate over `collection`.
   * @returns {*} Returns the found element or its key, else `undefined`.
   */
  function baseFindKey(collection, predicate, eachFunc) {
    var result;
    eachFunc(collection, function(value, key, collection) {
      if (predicate(value, key, collection)) {
        result = key;
        return false;
      }
    });
    return result;
  }

  /**
   * The base implementation of `_.findIndex` and `_.findLastIndex` without
   * support for iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {Function} predicate The function invoked per iteration.
   * @param {number} fromIndex The index to search from.
   * @param {boolean} [fromRight] Specify iterating from right to left.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseFindIndex(array, predicate, fromIndex, fromRight) {
    var length = array.length,
        index = fromIndex + (fromRight ? 1 : -1);

    while ((fromRight ? index-- : ++index < length)) {
      if (predicate(array[index], index, array)) {
        return index;
      }
    }
    return -1;
  }

  /**
   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseIndexOf(array, value, fromIndex) {
    return value === value
      ? strictIndexOf(array, value, fromIndex)
      : baseFindIndex(array, baseIsNaN, fromIndex);
  }

  /**
   * This function is like `baseIndexOf` except that it accepts a comparator.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @param {Function} comparator The comparator invoked per element.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseIndexOfWith(array, value, fromIndex, comparator) {
    var index = fromIndex - 1,
        length = array.length;

    while (++index < length) {
      if (comparator(array[index], value)) {
        return index;
      }
    }
    return -1;
  }

  /**
   * The base implementation of `_.isNaN` without support for number objects.
   *
   * @private
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
   */
  function baseIsNaN(value) {
    return value !== value;
  }

  /**
   * The base implementation of `_.mean` and `_.meanBy` without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {number} Returns the mean.
   */
  function baseMean(array, iteratee) {
    var length = array == null ? 0 : array.length;
    return length ? (baseSum(array, iteratee) / length) : NAN;
  }

  /**
   * The base implementation of `_.property` without support for deep paths.
   *
   * @private
   * @param {string} key The key of the property to get.
   * @returns {Function} Returns the new accessor function.
   */
  function baseProperty(key) {
    return function(object) {
      return object == null ? undefined : object[key];
    };
  }

  /**
   * The base implementation of `_.propertyOf` without support for deep paths.
   *
   * @private
   * @param {Object} object The object to query.
   * @returns {Function} Returns the new accessor function.
   */
  function basePropertyOf(object) {
    return function(key) {
      return object == null ? undefined : object[key];
    };
  }

  /**
   * The base implementation of `_.reduce` and `_.reduceRight`, without support
   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
   *
   * @private
   * @param {Array|Object} collection The collection to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} accumulator The initial value.
   * @param {boolean} initAccum Specify using the first or last element of
   *  `collection` as the initial value.
   * @param {Function} eachFunc The function to iterate over `collection`.
   * @returns {*} Returns the accumulated value.
   */
  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
    eachFunc(collection, function(value, index, collection) {
      accumulator = initAccum
        ? (initAccum = false, value)
        : iteratee(accumulator, value, index, collection);
    });
    return accumulator;
  }

  /**
   * The base implementation of `_.sortBy` which uses `comparer` to define the
   * sort order of `array` and replaces criteria objects with their corresponding
   * values.
   *
   * @private
   * @param {Array} array The array to sort.
   * @param {Function} comparer The function to define sort order.
   * @returns {Array} Returns `array`.
   */
  function baseSortBy(array, comparer) {
    var length = array.length;

    array.sort(comparer);
    while (length--) {
      array[length] = array[length].value;
    }
    return array;
  }

  /**
   * The base implementation of `_.sum` and `_.sumBy` without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {number} Returns the sum.
   */
  function baseSum(array, iteratee) {
    var result,
        index = -1,
        length = array.length;

    while (++index < length) {
      var current = iteratee(array[index]);
      if (current !== undefined) {
        result = result === undefined ? current : (result + current);
      }
    }
    return result;
  }

  /**
   * The base implementation of `_.times` without support for iteratee shorthands
   * or max array length checks.
   *
   * @private
   * @param {number} n The number of times to invoke `iteratee`.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns the array of results.
   */
  function baseTimes(n, iteratee) {
    var index = -1,
        result = Array(n);

    while (++index < n) {
      result[index] = iteratee(index);
    }
    return result;
  }

  /**
   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
   * of key-value pairs for `object` corresponding to the property names of `props`.
   *
   * @private
   * @param {Object} object The object to query.
   * @param {Array} props The property names to get values for.
   * @returns {Object} Returns the key-value pairs.
   */
  function baseToPairs(object, props) {
    return arrayMap(props, function(key) {
      return [key, object[key]];
    });
  }

  /**
   * The base implementation of `_.trim`.
   *
   * @private
   * @param {string} string The string to trim.
   * @returns {string} Returns the trimmed string.
   */
  function baseTrim(string) {
    return string
      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')
      : string;
  }

  /**
   * The base implementation of `_.unary` without support for storing metadata.
   *
   * @private
   * @param {Function} func The function to cap arguments for.
   * @returns {Function} Returns the new capped function.
   */
  function baseUnary(func) {
    return function(value) {
      return func(value);
    };
  }

  /**
   * The base implementation of `_.values` and `_.valuesIn` which creates an
   * array of `object` property values corresponding to the property names
   * of `props`.
   *
   * @private
   * @param {Object} object The object to query.
   * @param {Array} props The property names to get values for.
   * @returns {Object} Returns the array of property values.
   */
  function baseValues(object, props) {
    return arrayMap(props, function(key) {
      return object[key];
    });
  }

  /**
   * Checks if a `cache` value for `key` exists.
   *
   * @private
   * @param {Object} cache The cache to query.
   * @param {string} key The key of the entry to check.
   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
   */
  function cacheHas(cache, key) {
    return cache.has(key);
  }

  /**
   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol
   * that is not found in the character symbols.
   *
   * @private
   * @param {Array} strSymbols The string symbols to inspect.
   * @param {Array} chrSymbols The character symbols to find.
   * @returns {number} Returns the index of the first unmatched string symbol.
   */
  function charsStartIndex(strSymbols, chrSymbols) {
    var index = -1,
        length = strSymbols.length;

    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
    return index;
  }

  /**
   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
   * that is not found in the character symbols.
   *
   * @private
   * @param {Array} strSymbols The string symbols to inspect.
   * @param {Array} chrSymbols The character symbols to find.
   * @returns {number} Returns the index of the last unmatched string symbol.
   */
  function charsEndIndex(strSymbols, chrSymbols) {
    var index = strSymbols.length;

    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
    return index;
  }

  /**
   * Gets the number of `placeholder` occurrences in `array`.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} placeholder The placeholder to search for.
   * @returns {number} Returns the placeholder count.
   */
  function countHolders(array, placeholder) {
    var length = array.length,
        result = 0;

    while (length--) {
      if (array[length] === placeholder) {
        ++result;
      }
    }
    return result;
  }

  /**
   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
   * letters to basic Latin letters.
   *
   * @private
   * @param {string} letter The matched letter to deburr.
   * @returns {string} Returns the deburred letter.
   */
  var deburrLetter = basePropertyOf(deburredLetters);

  /**
   * Used by `_.escape` to convert characters to HTML entities.
   *
   * @private
   * @param {string} chr The matched character to escape.
   * @returns {string} Returns the escaped character.
   */
  var escapeHtmlChar = basePropertyOf(htmlEscapes);

  /**
   * Used by `_.template` to escape characters for inclusion in compiled string literals.
   *
   * @private
   * @param {string} chr The matched character to escape.
   * @returns {string} Returns the escaped character.
   */
  function escapeStringChar(chr) {
    return '\\' + stringEscapes[chr];
  }

  /**
   * Gets the value at `key` of `object`.
   *
   * @private
   * @param {Object} [object] The object to query.
   * @param {string} key The key of the property to get.
   * @returns {*} Returns the property value.
   */
  function getValue(object, key) {
    return object == null ? undefined : object[key];
  }

  /**
   * Checks if `string` contains Unicode symbols.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {boolean} Returns `true` if a symbol is found, else `false`.
   */
  function hasUnicode(string) {
    return reHasUnicode.test(string);
  }

  /**
   * Checks if `string` contains a word composed of Unicode symbols.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {boolean} Returns `true` if a word is found, else `false`.
   */
  function hasUnicodeWord(string) {
    return reHasUnicodeWord.test(string);
  }

  /**
   * Converts `iterator` to an array.
   *
   * @private
   * @param {Object} iterator The iterator to convert.
   * @returns {Array} Returns the converted array.
   */
  function iteratorToArray(iterator) {
    var data,
        result = [];

    while (!(data = iterator.next()).done) {
      result.push(data.value);
    }
    return result;
  }

  /**
   * Converts `map` to its key-value pairs.
   *
   * @private
   * @param {Object} map The map to convert.
   * @returns {Array} Returns the key-value pairs.
   */
  function mapToArray(map) {
    var index = -1,
        result = Array(map.size);

    map.forEach(function(value, key) {
      result[++index] = [key, value];
    });
    return result;
  }

  /**
   * Creates a unary function that invokes `func` with its argument transformed.
   *
   * @private
   * @param {Function} func The function to wrap.
   * @param {Function} transform The argument transform.
   * @returns {Function} Returns the new function.
   */
  function overArg(func, transform) {
    return function(arg) {
      return func(transform(arg));
    };
  }

  /**
   * Replaces all `placeholder` elements in `array` with an internal placeholder
   * and returns an array of their indexes.
   *
   * @private
   * @param {Array} array The array to modify.
   * @param {*} placeholder The placeholder to replace.
   * @returns {Array} Returns the new array of placeholder indexes.
   */
  function replaceHolders(array, placeholder) {
    var index = -1,
        length = array.length,
        resIndex = 0,
        result = [];

    while (++index < length) {
      var value = array[index];
      if (value === placeholder || value === PLACEHOLDER) {
        array[index] = PLACEHOLDER;
        result[resIndex++] = index;
      }
    }
    return result;
  }

  /**
   * Converts `set` to an array of its values.
   *
   * @private
   * @param {Object} set The set to convert.
   * @returns {Array} Returns the values.
   */
  function setToArray(set) {
    var index = -1,
        result = Array(set.size);

    set.forEach(function(value) {
      result[++index] = value;
    });
    return result;
  }

  /**
   * Converts `set` to its value-value pairs.
   *
   * @private
   * @param {Object} set The set to convert.
   * @returns {Array} Returns the value-value pairs.
   */
  function setToPairs(set) {
    var index = -1,
        result = Array(set.size);

    set.forEach(function(value) {
      result[++index] = [value, value];
    });
    return result;
  }

  /**
   * A specialized version of `_.indexOf` which performs strict equality
   * comparisons of values, i.e. `===`.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function strictIndexOf(array, value, fromIndex) {
    var index = fromIndex - 1,
        length = array.length;

    while (++index < length) {
      if (array[index] === value) {
        return index;
      }
    }
    return -1;
  }

  /**
   * A specialized version of `_.lastIndexOf` which performs strict equality
   * comparisons of values, i.e. `===`.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function strictLastIndexOf(array, value, fromIndex) {
    var index = fromIndex + 1;
    while (index--) {
      if (array[index] === value) {
        return index;
      }
    }
    return index;
  }

  /**
   * Gets the number of symbols in `string`.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {number} Returns the string size.
   */
  function stringSize(string) {
    return hasUnicode(string)
      ? unicodeSize(string)
      : asciiSize(string);
  }

  /**
   * Converts `string` to an array.
   *
   * @private
   * @param {string} string The string to convert.
   * @returns {Array} Returns the converted array.
   */
  function stringToArray(string) {
    return hasUnicode(string)
      ? unicodeToArray(string)
      : asciiToArray(string);
  }

  /**
   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
   * character of `string`.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {number} Returns the index of the last non-whitespace character.
   */
  function trimmedEndIndex(string) {
    var index = string.length;

    while (index-- && reWhitespace.test(string.charAt(index))) {}
    return index;
  }

  /**
   * Used by `_.unescape` to convert HTML entities to characters.
   *
   * @private
   * @param {string} chr The matched character to unescape.
   * @returns {string} Returns the unescaped character.
   */
  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);

  /**
   * Gets the size of a Unicode `string`.
   *
   * @private
   * @param {string} string The string inspect.
   * @returns {number} Returns the string size.
   */
  function unicodeSize(string) {
    var result = reUnicode.lastIndex = 0;
    while (reUnicode.test(string)) {
      ++result;
    }
    return result;
  }

  /**
   * Converts a Unicode `string` to an array.
   *
   * @private
   * @param {string} string The string to convert.
   * @returns {Array} Returns the converted array.
   */
  function unicodeToArray(string) {
    return string.match(reUnicode) || [];
  }

  /**
   * Splits a Unicode `string` into an array of its words.
   *
   * @private
   * @param {string} The string to inspect.
   * @returns {Array} Returns the words of `string`.
   */
  function unicodeWords(string) {
    return string.match(reUnicodeWord) || [];
  }

  /*--------------------------------------------------------------------------*/

  /**
   * Create a new pristine `lodash` function using the `context` object.
   *
   * @static
   * @memberOf _
   * @since 1.1.0
   * @category Util
   * @param {Object} [context=root] The context object.
   * @returns {Function} Returns a new `lodash` function.
   * @example
   *
   * _.mixin({ 'foo': _.constant('foo') });
   *
   * var lodash = _.runInContext();
   * lodash.mixin({ 'bar': lodash.constant('bar') });
   *
   * _.isFunction(_.foo);
   * // => true
   * _.isFunction(_.bar);
   * // => false
   *
   * lodash.isFunction(lodash.foo);
   * // => false
   * lodash.isFunction(lodash.bar);
   * // => true
   *
   * // Create a suped-up `defer` in Node.js.
   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
   */
  var runInContext = (function runInContext(context) {
    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));

    /** Built-in constructor references. */
    var Array = context.Array,
        Date = context.Date,
        Error = context.Error,
        Function = context.Function,
        Math = context.Math,
        Object = context.Object,
        RegExp = context.RegExp,
        String = context.String,
        TypeError = context.TypeError;

    /** Used for built-in method references. */
    var arrayProto = Array.prototype,
        funcProto = Function.prototype,
        objectProto = Object.prototype;

    /** Used to detect overreaching core-js shims. */
    var coreJsData = context['__core-js_shared__'];

    /** Used to resolve the decompiled source of functions. */
    var funcToString = funcProto.toString;

    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;

    /** Used to generate unique IDs. */
    var idCounter = 0;

    /** Used to detect methods masquerading as native. */
    var maskSrcKey = (function() {
      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
      return uid ? ('Symbol(src)_1.' + uid) : '';
    }());

    /**
     * Used to resolve the
     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
     * of values.
     */
    var nativeObjectToString = objectProto.toString;

    /** Used to infer the `Object` constructor. */
    var objectCtorString = funcToString.call(Object);

    /** Used to restore the original `_` reference in `_.noConflict`. */
    var oldDash = root._;

    /** Used to detect if a method is native. */
    var reIsNative = RegExp('^' +
      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
      .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
    );

    /** Built-in value references. */
    var Buffer = moduleExports ? context.Buffer : undefined,
        Symbol = context.Symbol,
        Uint8Array = context.Uint8Array,
        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
        getPrototype = overArg(Object.getPrototypeOf, Object),
        objectCreate = Object.create,
        propertyIsEnumerable = objectProto.propertyIsEnumerable,
        splice = arrayProto.splice,
        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,
        symIterator = Symbol ? Symbol.iterator : undefined,
        symToStringTag = Symbol ? Symbol.toStringTag : undefined;

    var defineProperty = (function() {
      try {
        var func = getNative(Object, 'defineProperty');
        func({}, '', {});
        return func;
      } catch (e) {}
    }());

    /** Mocked built-ins. */
    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,
        ctxNow = Date && Date.now !== root.Date.now && Date.now,
        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;

    /* Built-in method references for those with the same name as other `lodash` methods. */
    var nativeCeil = Math.ceil,
        nativeFloor = Math.floor,
        nativeGetSymbols = Object.getOwnPropertySymbols,
        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
        nativeIsFinite = context.isFinite,
        nativeJoin = arrayProto.join,
        nativeKeys = overArg(Object.keys, Object),
        nativeMax = Math.max,
        nativeMin = Math.min,
        nativeNow = Date.now,
        nativeParseInt = context.parseInt,
        nativeRandom = Math.random,
        nativeReverse = arrayProto.reverse;

    /* Built-in method references that are verified to be native. */
    var DataView = getNative(context, 'DataView'),
        Map = getNative(context, 'Map'),
        Promise = getNative(context, 'Promise'),
        Set = getNative(context, 'Set'),
        WeakMap = getNative(context, 'WeakMap'),
        nativeCreate = getNative(Object, 'create');

    /** Used to store function metadata. */
    var metaMap = WeakMap && new WeakMap;

    /** Used to lookup unminified function names. */
    var realNames = {};

    /** Used to detect maps, sets, and weakmaps. */
    var dataViewCtorString = toSource(DataView),
        mapCtorString = toSource(Map),
        promiseCtorString = toSource(Promise),
        setCtorString = toSource(Set),
        weakMapCtorString = toSource(WeakMap);

    /** Used to convert symbols to primitives and strings. */
    var symbolProto = Symbol ? Symbol.prototype : undefined,
        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
        symbolToString = symbolProto ? symbolProto.toString : undefined;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a `lodash` object which wraps `value` to enable implicit method
     * chain sequences. Methods that operate on and return arrays, collections,
     * and functions can be chained together. Methods that retrieve a single value
     * or may return a primitive value will automatically end the chain sequence
     * and return the unwrapped value. Otherwise, the value must be unwrapped
     * with `_#value`.
     *
     * Explicit chain sequences, which must be unwrapped with `_#value`, may be
     * enabled using `_.chain`.
     *
     * The execution of chained methods is lazy, that is, it's deferred until
     * `_#value` is implicitly or explicitly called.
     *
     * Lazy evaluation allows several methods to support shortcut fusion.
     * Shortcut fusion is an optimization to merge iteratee calls; this avoids
     * the creation of intermediate arrays and can greatly reduce the number of
     * iteratee executions. Sections of a chain sequence qualify for shortcut
     * fusion if the section is applied to an array and iteratees accept only
     * one argument. The heuristic for whether a section qualifies for shortcut
     * fusion is subject to change.
     *
     * Chaining is supported in custom builds as long as the `_#value` method is
     * directly or indirectly included in the build.
     *
     * In addition to lodash methods, wrappers have `Array` and `String` methods.
     *
     * The wrapper `Array` methods are:
     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
     *
     * The wrapper `String` methods are:
     * `replace` and `split`
     *
     * The wrapper methods that support shortcut fusion are:
     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
     *
     * The chainable wrapper methods are:
     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
     * `zipObject`, `zipObjectDeep`, and `zipWith`
     *
     * The wrapper methods that are **not** chainable by default are:
     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
     * `upperFirst`, `value`, and `words`
     *
     * @name _
     * @constructor
     * @category Seq
     * @param {*} value The value to wrap in a `lodash` instance.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var wrapped = _([1, 2, 3]);
     *
     * // Returns an unwrapped value.
     * wrapped.reduce(_.add);
     * // => 6
     *
     * // Returns a wrapped value.
     * var squares = wrapped.map(square);
     *
     * _.isArray(squares);
     * // => false
     *
     * _.isArray(squares.value());
     * // => true
     */
    function lodash(value) {
      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
        if (value instanceof LodashWrapper) {
          return value;
        }
        if (hasOwnProperty.call(value, '__wrapped__')) {
          return wrapperClone(value);
        }
      }
      return new LodashWrapper(value);
    }

    /**
     * The base implementation of `_.create` without support for assigning
     * properties to the created object.
     *
     * @private
     * @param {Object} proto The object to inherit from.
     * @returns {Object} Returns the new object.
     */
    var baseCreate = (function() {
      function object() {}
      return function(proto) {
        if (!isObject(proto)) {
          return {};
        }
        if (objectCreate) {
          return objectCreate(proto);
        }
        object.prototype = proto;
        var result = new object;
        object.prototype = undefined;
        return result;
      };
    }());

    /**
     * The function whose prototype chain sequence wrappers inherit from.
     *
     * @private
     */
    function baseLodash() {
      // No operation performed.
    }

    /**
     * The base constructor for creating `lodash` wrapper objects.
     *
     * @private
     * @param {*} value The value to wrap.
     * @param {boolean} [chainAll] Enable explicit method chain sequences.
     */
    function LodashWrapper(value, chainAll) {
      this.__wrapped__ = value;
      this.__actions__ = [];
      this.__chain__ = !!chainAll;
      this.__index__ = 0;
      this.__values__ = undefined;
    }

    /**
     * By default, the template delimiters used by lodash are like those in
     * embedded Ruby (ERB) as well as ES2015 template strings. Change the
     * following template settings to use alternative delimiters.
     *
     * @static
     * @memberOf _
     * @type {Object}
     */
    lodash.templateSettings = {

      /**
       * Used to detect `data` property values to be HTML-escaped.
       *
       * @memberOf _.templateSettings
       * @type {RegExp}
       */
      'escape': reEscape,

      /**
       * Used to detect code to be evaluated.
       *
       * @memberOf _.templateSettings
       * @type {RegExp}
       */
      'evaluate': reEvaluate,

      /**
       * Used to detect `data` property values to inject.
       *
       * @memberOf _.templateSettings
       * @type {RegExp}
       */
      'interpolate': reInterpolate,

      /**
       * Used to reference the data object in the template text.
       *
       * @memberOf _.templateSettings
       * @type {string}
       */
      'variable': '',

      /**
       * Used to import variables into the compiled template.
       *
       * @memberOf _.templateSettings
       * @type {Object}
       */
      'imports': {

        /**
         * A reference to the `lodash` function.
         *
         * @memberOf _.templateSettings.imports
         * @type {Function}
         */
        '_': lodash
      }
    };

    // Ensure wrappers are instances of `baseLodash`.
    lodash.prototype = baseLodash.prototype;
    lodash.prototype.constructor = lodash;

    LodashWrapper.prototype = baseCreate(baseLodash.prototype);
    LodashWrapper.prototype.constructor = LodashWrapper;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
     *
     * @private
     * @constructor
     * @param {*} value The value to wrap.
     */
    function LazyWrapper(value) {
      this.__wrapped__ = value;
      this.__actions__ = [];
      this.__dir__ = 1;
      this.__filtered__ = false;
      this.__iteratees__ = [];
      this.__takeCount__ = MAX_ARRAY_LENGTH;
      this.__views__ = [];
    }

    /**
     * Creates a clone of the lazy wrapper object.
     *
     * @private
     * @name clone
     * @memberOf LazyWrapper
     * @returns {Object} Returns the cloned `LazyWrapper` object.
     */
    function lazyClone() {
      var result = new LazyWrapper(this.__wrapped__);
      result.__actions__ = copyArray(this.__actions__);
      result.__dir__ = this.__dir__;
      result.__filtered__ = this.__filtered__;
      result.__iteratees__ = copyArray(this.__iteratees__);
      result.__takeCount__ = this.__takeCount__;
      result.__views__ = copyArray(this.__views__);
      return result;
    }

    /**
     * Reverses the direction of lazy iteration.
     *
     * @private
     * @name reverse
     * @memberOf LazyWrapper
     * @returns {Object} Returns the new reversed `LazyWrapper` object.
     */
    function lazyReverse() {
      if (this.__filtered__) {
        var result = new LazyWrapper(this);
        result.__dir__ = -1;
        result.__filtered__ = true;
      } else {
        result = this.clone();
        result.__dir__ *= -1;
      }
      return result;
    }

    /**
     * Extracts the unwrapped value from its lazy wrapper.
     *
     * @private
     * @name value
     * @memberOf LazyWrapper
     * @returns {*} Returns the unwrapped value.
     */
    function lazyValue() {
      var array = this.__wrapped__.value(),
          dir = this.__dir__,
          isArr = isArray(array),
          isRight = dir < 0,
          arrLength = isArr ? array.length : 0,
          view = getView(0, arrLength, this.__views__),
          start = view.start,
          end = view.end,
          length = end - start,
          index = isRight ? end : (start - 1),
          iteratees = this.__iteratees__,
          iterLength = iteratees.length,
          resIndex = 0,
          takeCount = nativeMin(length, this.__takeCount__);

      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {
        return baseWrapperValue(array, this.__actions__);
      }
      var result = [];

      outer:
      while (length-- && resIndex < takeCount) {
        index += dir;

        var iterIndex = -1,
            value = array[index];

        while (++iterIndex < iterLength) {
          var data = iteratees[iterIndex],
              iteratee = data.iteratee,
              type = data.type,
              computed = iteratee(value);

          if (type == LAZY_MAP_FLAG) {
            value = computed;
          } else if (!computed) {
            if (type == LAZY_FILTER_FLAG) {
              continue outer;
            } else {
              break outer;
            }
          }
        }
        result[resIndex++] = value;
      }
      return result;
    }

    // Ensure `LazyWrapper` is an instance of `baseLodash`.
    LazyWrapper.prototype = baseCreate(baseLodash.prototype);
    LazyWrapper.prototype.constructor = LazyWrapper;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a hash object.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function Hash(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;

      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }

    /**
     * Removes all key-value entries from the hash.
     *
     * @private
     * @name clear
     * @memberOf Hash
     */
    function hashClear() {
      this.__data__ = nativeCreate ? nativeCreate(null) : {};
      this.size = 0;
    }

    /**
     * Removes `key` and its value from the hash.
     *
     * @private
     * @name delete
     * @memberOf Hash
     * @param {Object} hash The hash to modify.
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function hashDelete(key) {
      var result = this.has(key) && delete this.__data__[key];
      this.size -= result ? 1 : 0;
      return result;
    }

    /**
     * Gets the hash value for `key`.
     *
     * @private
     * @name get
     * @memberOf Hash
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function hashGet(key) {
      var data = this.__data__;
      if (nativeCreate) {
        var result = data[key];
        return result === HASH_UNDEFINED ? undefined : result;
      }
      return hasOwnProperty.call(data, key) ? data[key] : undefined;
    }

    /**
     * Checks if a hash value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf Hash
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function hashHas(key) {
      var data = this.__data__;
      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
    }

    /**
     * Sets the hash `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf Hash
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the hash instance.
     */
    function hashSet(key, value) {
      var data = this.__data__;
      this.size += this.has(key) ? 0 : 1;
      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
      return this;
    }

    // Add methods to `Hash`.
    Hash.prototype.clear = hashClear;
    Hash.prototype['delete'] = hashDelete;
    Hash.prototype.get = hashGet;
    Hash.prototype.has = hashHas;
    Hash.prototype.set = hashSet;

    /*------------------------------------------------------------------------*/

    /**
     * Creates an list cache object.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function ListCache(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;

      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }

    /**
     * Removes all key-value entries from the list cache.
     *
     * @private
     * @name clear
     * @memberOf ListCache
     */
    function listCacheClear() {
      this.__data__ = [];
      this.size = 0;
    }

    /**
     * Removes `key` and its value from the list cache.
     *
     * @private
     * @name delete
     * @memberOf ListCache
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function listCacheDelete(key) {
      var data = this.__data__,
          index = assocIndexOf(data, key);

      if (index < 0) {
        return false;
      }
      var lastIndex = data.length - 1;
      if (index == lastIndex) {
        data.pop();
      } else {
        splice.call(data, index, 1);
      }
      --this.size;
      return true;
    }

    /**
     * Gets the list cache value for `key`.
     *
     * @private
     * @name get
     * @memberOf ListCache
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function listCacheGet(key) {
      var data = this.__data__,
          index = assocIndexOf(data, key);

      return index < 0 ? undefined : data[index][1];
    }

    /**
     * Checks if a list cache value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf ListCache
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function listCacheHas(key) {
      return assocIndexOf(this.__data__, key) > -1;
    }

    /**
     * Sets the list cache `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf ListCache
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the list cache instance.
     */
    function listCacheSet(key, value) {
      var data = this.__data__,
          index = assocIndexOf(data, key);

      if (index < 0) {
        ++this.size;
        data.push([key, value]);
      } else {
        data[index][1] = value;
      }
      return this;
    }

    // Add methods to `ListCache`.
    ListCache.prototype.clear = listCacheClear;
    ListCache.prototype['delete'] = listCacheDelete;
    ListCache.prototype.get = listCacheGet;
    ListCache.prototype.has = listCacheHas;
    ListCache.prototype.set = listCacheSet;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a map cache object to store key-value pairs.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function MapCache(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;

      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }

    /**
     * Removes all key-value entries from the map.
     *
     * @private
     * @name clear
     * @memberOf MapCache
     */
    function mapCacheClear() {
      this.size = 0;
      this.__data__ = {
        'hash': new Hash,
        'map': new (Map || ListCache),
        'string': new Hash
      };
    }

    /**
     * Removes `key` and its value from the map.
     *
     * @private
     * @name delete
     * @memberOf MapCache
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function mapCacheDelete(key) {
      var result = getMapData(this, key)['delete'](key);
      this.size -= result ? 1 : 0;
      return result;
    }

    /**
     * Gets the map value for `key`.
     *
     * @private
     * @name get
     * @memberOf MapCache
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function mapCacheGet(key) {
      return getMapData(this, key).get(key);
    }

    /**
     * Checks if a map value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf MapCache
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function mapCacheHas(key) {
      return getMapData(this, key).has(key);
    }

    /**
     * Sets the map `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf MapCache
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the map cache instance.
     */
    function mapCacheSet(key, value) {
      var data = getMapData(this, key),
          size = data.size;

      data.set(key, value);
      this.size += data.size == size ? 0 : 1;
      return this;
    }

    // Add methods to `MapCache`.
    MapCache.prototype.clear = mapCacheClear;
    MapCache.prototype['delete'] = mapCacheDelete;
    MapCache.prototype.get = mapCacheGet;
    MapCache.prototype.has = mapCacheHas;
    MapCache.prototype.set = mapCacheSet;

    /*------------------------------------------------------------------------*/

    /**
     *
     * Creates an array cache object to store unique values.
     *
     * @private
     * @constructor
     * @param {Array} [values] The values to cache.
     */
    function SetCache(values) {
      var index = -1,
          length = values == null ? 0 : values.length;

      this.__data__ = new MapCache;
      while (++index < length) {
        this.add(values[index]);
      }
    }

    /**
     * Adds `value` to the array cache.
     *
     * @private
     * @name add
     * @memberOf SetCache
     * @alias push
     * @param {*} value The value to cache.
     * @returns {Object} Returns the cache instance.
     */
    function setCacheAdd(value) {
      this.__data__.set(value, HASH_UNDEFINED);
      return this;
    }

    /**
     * Checks if `value` is in the array cache.
     *
     * @private
     * @name has
     * @memberOf SetCache
     * @param {*} value The value to search for.
     * @returns {number} Returns `true` if `value` is found, else `false`.
     */
    function setCacheHas(value) {
      return this.__data__.has(value);
    }

    // Add methods to `SetCache`.
    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
    SetCache.prototype.has = setCacheHas;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a stack cache object to store key-value pairs.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function Stack(entries) {
      var data = this.__data__ = new ListCache(entries);
      this.size = data.size;
    }

    /**
     * Removes all key-value entries from the stack.
     *
     * @private
     * @name clear
     * @memberOf Stack
     */
    function stackClear() {
      this.__data__ = new ListCache;
      this.size = 0;
    }

    /**
     * Removes `key` and its value from the stack.
     *
     * @private
     * @name delete
     * @memberOf Stack
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function stackDelete(key) {
      var data = this.__data__,
          result = data['delete'](key);

      this.size = data.size;
      return result;
    }

    /**
     * Gets the stack value for `key`.
     *
     * @private
     * @name get
     * @memberOf Stack
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function stackGet(key) {
      return this.__data__.get(key);
    }

    /**
     * Checks if a stack value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf Stack
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function stackHas(key) {
      return this.__data__.has(key);
    }

    /**
     * Sets the stack `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf Stack
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the stack cache instance.
     */
    function stackSet(key, value) {
      var data = this.__data__;
      if (data instanceof ListCache) {
        var pairs = data.__data__;
        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
          pairs.push([key, value]);
          this.size = ++data.size;
          return this;
        }
        data = this.__data__ = new MapCache(pairs);
      }
      data.set(key, value);
      this.size = data.size;
      return this;
    }

    // Add methods to `Stack`.
    Stack.prototype.clear = stackClear;
    Stack.prototype['delete'] = stackDelete;
    Stack.prototype.get = stackGet;
    Stack.prototype.has = stackHas;
    Stack.prototype.set = stackSet;

    /*------------------------------------------------------------------------*/

    /**
     * Creates an array of the enumerable property names of the array-like `value`.
     *
     * @private
     * @param {*} value The value to query.
     * @param {boolean} inherited Specify returning inherited property names.
     * @returns {Array} Returns the array of property names.
     */
    function arrayLikeKeys(value, inherited) {
      var isArr = isArray(value),
          isArg = !isArr && isArguments(value),
          isBuff = !isArr && !isArg && isBuffer(value),
          isType = !isArr && !isArg && !isBuff && isTypedArray(value),
          skipIndexes = isArr || isArg || isBuff || isType,
          result = skipIndexes ? baseTimes(value.length, String) : [],
          length = result.length;

      for (var key in value) {
        if ((inherited || hasOwnProperty.call(value, key)) &&
            !(skipIndexes && (
               // Safari 9 has enumerable `arguments.length` in strict mode.
               key == 'length' ||
               // Node.js 0.10 has enumerable non-index properties on buffers.
               (isBuff && (key == 'offset' || key == 'parent')) ||
               // PhantomJS 2 has enumerable non-index properties on typed arrays.
               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
               // Skip index properties.
               isIndex(key, length)
            ))) {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * A specialized version of `_.sample` for arrays.
     *
     * @private
     * @param {Array} array The array to sample.
     * @returns {*} Returns the random element.
     */
    function arraySample(array) {
      var length = array.length;
      return length ? array[baseRandom(0, length - 1)] : undefined;
    }

    /**
     * A specialized version of `_.sampleSize` for arrays.
     *
     * @private
     * @param {Array} array The array to sample.
     * @param {number} n The number of elements to sample.
     * @returns {Array} Returns the random elements.
     */
    function arraySampleSize(array, n) {
      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
    }

    /**
     * A specialized version of `_.shuffle` for arrays.
     *
     * @private
     * @param {Array} array The array to shuffle.
     * @returns {Array} Returns the new shuffled array.
     */
    function arrayShuffle(array) {
      return shuffleSelf(copyArray(array));
    }

    /**
     * This function is like `assignValue` except that it doesn't assign
     * `undefined` values.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function assignMergeValue(object, key, value) {
      if ((value !== undefined && !eq(object[key], value)) ||
          (value === undefined && !(key in object))) {
        baseAssignValue(object, key, value);
      }
    }

    /**
     * Assigns `value` to `key` of `object` if the existing value is not equivalent
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function assignValue(object, key, value) {
      var objValue = object[key];
      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
          (value === undefined && !(key in object))) {
        baseAssignValue(object, key, value);
      }
    }

    /**
     * Gets the index at which the `key` is found in `array` of key-value pairs.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {*} key The key to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     */
    function assocIndexOf(array, key) {
      var length = array.length;
      while (length--) {
        if (eq(array[length][0], key)) {
          return length;
        }
      }
      return -1;
    }

    /**
     * Aggregates elements of `collection` on `accumulator` with keys transformed
     * by `iteratee` and values set by `setter`.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} setter The function to set `accumulator` values.
     * @param {Function} iteratee The iteratee to transform keys.
     * @param {Object} accumulator The initial aggregated object.
     * @returns {Function} Returns `accumulator`.
     */
    function baseAggregator(collection, setter, iteratee, accumulator) {
      baseEach(collection, function(value, key, collection) {
        setter(accumulator, value, iteratee(value), collection);
      });
      return accumulator;
    }

    /**
     * The base implementation of `_.assign` without support for multiple sources
     * or `customizer` functions.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @returns {Object} Returns `object`.
     */
    function baseAssign(object, source) {
      return object && copyObject(source, keys(source), object);
    }

    /**
     * The base implementation of `_.assignIn` without support for multiple sources
     * or `customizer` functions.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @returns {Object} Returns `object`.
     */
    function baseAssignIn(object, source) {
      return object && copyObject(source, keysIn(source), object);
    }

    /**
     * The base implementation of `assignValue` and `assignMergeValue` without
     * value checks.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function baseAssignValue(object, key, value) {
      if (key == '__proto__' && defineProperty) {
        defineProperty(object, key, {
          'configurable': true,
          'enumerable': true,
          'value': value,
          'writable': true
        });
      } else {
        object[key] = value;
      }
    }

    /**
     * The base implementation of `_.at` without support for individual paths.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {string[]} paths The property paths to pick.
     * @returns {Array} Returns the picked elements.
     */
    function baseAt(object, paths) {
      var index = -1,
          length = paths.length,
          result = Array(length),
          skip = object == null;

      while (++index < length) {
        result[index] = skip ? undefined : get(object, paths[index]);
      }
      return result;
    }

    /**
     * The base implementation of `_.clamp` which doesn't coerce arguments.
     *
     * @private
     * @param {number} number The number to clamp.
     * @param {number} [lower] The lower bound.
     * @param {number} upper The upper bound.
     * @returns {number} Returns the clamped number.
     */
    function baseClamp(number, lower, upper) {
      if (number === number) {
        if (upper !== undefined) {
          number = number <= upper ? number : upper;
        }
        if (lower !== undefined) {
          number = number >= lower ? number : lower;
        }
      }
      return number;
    }

    /**
     * The base implementation of `_.clone` and `_.cloneDeep` which tracks
     * traversed objects.
     *
     * @private
     * @param {*} value The value to clone.
     * @param {boolean} bitmask The bitmask flags.
     *  1 - Deep clone
     *  2 - Flatten inherited properties
     *  4 - Clone symbols
     * @param {Function} [customizer] The function to customize cloning.
     * @param {string} [key] The key of `value`.
     * @param {Object} [object] The parent object of `value`.
     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
     * @returns {*} Returns the cloned value.
     */
    function baseClone(value, bitmask, customizer, key, object, stack) {
      var result,
          isDeep = bitmask & CLONE_DEEP_FLAG,
          isFlat = bitmask & CLONE_FLAT_FLAG,
          isFull = bitmask & CLONE_SYMBOLS_FLAG;

      if (customizer) {
        result = object ? customizer(value, key, object, stack) : customizer(value);
      }
      if (result !== undefined) {
        return result;
      }
      if (!isObject(value)) {
        return value;
      }
      var isArr = isArray(value);
      if (isArr) {
        result = initCloneArray(value);
        if (!isDeep) {
          return copyArray(value, result);
        }
      } else {
        var tag = getTag(value),
            isFunc = tag == funcTag || tag == genTag;

        if (isBuffer(value)) {
          return cloneBuffer(value, isDeep);
        }
        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
          result = (isFlat || isFunc) ? {} : initCloneObject(value);
          if (!isDeep) {
            return isFlat
              ? copySymbolsIn(value, baseAssignIn(result, value))
              : copySymbols(value, baseAssign(result, value));
          }
        } else {
          if (!cloneableTags[tag]) {
            return object ? value : {};
          }
          result = initCloneByTag(value, tag, isDeep);
        }
      }
      // Check for circular references and return its corresponding clone.
      stack || (stack = new Stack);
      var stacked = stack.get(value);
      if (stacked) {
        return stacked;
      }
      stack.set(value, result);

      if (isSet(value)) {
        value.forEach(function(subValue) {
          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
        });
      } else if (isMap(value)) {
        value.forEach(function(subValue, key) {
          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
        });
      }

      var keysFunc = isFull
        ? (isFlat ? getAllKeysIn : getAllKeys)
        : (isFlat ? keysIn : keys);

      var props = isArr ? undefined : keysFunc(value);
      arrayEach(props || value, function(subValue, key) {
        if (props) {
          key = subValue;
          subValue = value[key];
        }
        // Recursively populate clone (susceptible to call stack limits).
        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
      });
      return result;
    }

    /**
     * The base implementation of `_.conforms` which doesn't clone `source`.
     *
     * @private
     * @param {Object} source The object of property predicates to conform to.
     * @returns {Function} Returns the new spec function.
     */
    function baseConforms(source) {
      var props = keys(source);
      return function(object) {
        return baseConformsTo(object, source, props);
      };
    }

    /**
     * The base implementation of `_.conformsTo` which accepts `props` to check.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property predicates to conform to.
     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
     */
    function baseConformsTo(object, source, props) {
      var length = props.length;
      if (object == null) {
        return !length;
      }
      object = Object(object);
      while (length--) {
        var key = props[length],
            predicate = source[key],
            value = object[key];

        if ((value === undefined && !(key in object)) || !predicate(value)) {
          return false;
        }
      }
      return true;
    }

    /**
     * The base implementation of `_.delay` and `_.defer` which accepts `args`
     * to provide to `func`.
     *
     * @private
     * @param {Function} func The function to delay.
     * @param {number} wait The number of milliseconds to delay invocation.
     * @param {Array} args The arguments to provide to `func`.
     * @returns {number|Object} Returns the timer id or timeout object.
     */
    function baseDelay(func, wait, args) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      return setTimeout(function() { func.apply(undefined, args); }, wait);
    }

    /**
     * The base implementation of methods like `_.difference` without support
     * for excluding multiple arrays or iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Array} values The values to exclude.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     */
    function baseDifference(array, values, iteratee, comparator) {
      var index = -1,
          includes = arrayIncludes,
          isCommon = true,
          length = array.length,
          result = [],
          valuesLength = values.length;

      if (!length) {
        return result;
      }
      if (iteratee) {
        values = arrayMap(values, baseUnary(iteratee));
      }
      if (comparator) {
        includes = arrayIncludesWith;
        isCommon = false;
      }
      else if (values.length >= LARGE_ARRAY_SIZE) {
        includes = cacheHas;
        isCommon = false;
        values = new SetCache(values);
      }
      outer:
      while (++index < length) {
        var value = array[index],
            computed = iteratee == null ? value : iteratee(value);

        value = (comparator || value !== 0) ? value : 0;
        if (isCommon && computed === computed) {
          var valuesIndex = valuesLength;
          while (valuesIndex--) {
            if (values[valuesIndex] === computed) {
              continue outer;
            }
          }
          result.push(value);
        }
        else if (!includes(values, computed, comparator)) {
          result.push(value);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.forEach` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     */
    var baseEach = createBaseEach(baseForOwn);

    /**
     * The base implementation of `_.forEachRight` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     */
    var baseEachRight = createBaseEach(baseForOwnRight, true);

    /**
     * The base implementation of `_.every` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {boolean} Returns `true` if all elements pass the predicate check,
     *  else `false`
     */
    function baseEvery(collection, predicate) {
      var result = true;
      baseEach(collection, function(value, index, collection) {
        result = !!predicate(value, index, collection);
        return result;
      });
      return result;
    }

    /**
     * The base implementation of methods like `_.max` and `_.min` which accepts a
     * `comparator` to determine the extremum value.
     *
     * @private
     * @param {Array} array The array to iterate over.
     * @param {Function} iteratee The iteratee invoked per iteration.
     * @param {Function} comparator The comparator used to compare values.
     * @returns {*} Returns the extremum value.
     */
    function baseExtremum(array, iteratee, comparator) {
      var index = -1,
          length = array.length;

      while (++index < length) {
        var value = array[index],
            current = iteratee(value);

        if (current != null && (computed === undefined
              ? (current === current && !isSymbol(current))
              : comparator(current, computed)
            )) {
          var computed = current,
              result = value;
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.fill` without an iteratee call guard.
     *
     * @private
     * @param {Array} array The array to fill.
     * @param {*} value The value to fill `array` with.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns `array`.
     */
    function baseFill(array, value, start, end) {
      var length = array.length;

      start = toInteger(start);
      if (start < 0) {
        start = -start > length ? 0 : (length + start);
      }
      end = (end === undefined || end > length) ? length : toInteger(end);
      if (end < 0) {
        end += length;
      }
      end = start > end ? 0 : toLength(end);
      while (start < end) {
        array[start++] = value;
      }
      return array;
    }

    /**
     * The base implementation of `_.filter` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     */
    function baseFilter(collection, predicate) {
      var result = [];
      baseEach(collection, function(value, index, collection) {
        if (predicate(value, index, collection)) {
          result.push(value);
        }
      });
      return result;
    }

    /**
     * The base implementation of `_.flatten` with support for restricting flattening.
     *
     * @private
     * @param {Array} array The array to flatten.
     * @param {number} depth The maximum recursion depth.
     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
     * @param {Array} [result=[]] The initial result value.
     * @returns {Array} Returns the new flattened array.
     */
    function baseFlatten(array, depth, predicate, isStrict, result) {
      var index = -1,
          length = array.length;

      predicate || (predicate = isFlattenable);
      result || (result = []);

      while (++index < length) {
        var value = array[index];
        if (depth > 0 && predicate(value)) {
          if (depth > 1) {
            // Recursively flatten arrays (susceptible to call stack limits).
            baseFlatten(value, depth - 1, predicate, isStrict, result);
          } else {
            arrayPush(result, value);
          }
        } else if (!isStrict) {
          result[result.length] = value;
        }
      }
      return result;
    }

    /**
     * The base implementation of `baseForOwn` which iterates over `object`
     * properties returned by `keysFunc` and invokes `iteratee` for each property.
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @returns {Object} Returns `object`.
     */
    var baseFor = createBaseFor();

    /**
     * This function is like `baseFor` except that it iterates over properties
     * in the opposite order.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @returns {Object} Returns `object`.
     */
    var baseForRight = createBaseFor(true);

    /**
     * The base implementation of `_.forOwn` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Object} Returns `object`.
     */
    function baseForOwn(object, iteratee) {
      return object && baseFor(object, iteratee, keys);
    }

    /**
     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Object} Returns `object`.
     */
    function baseForOwnRight(object, iteratee) {
      return object && baseForRight(object, iteratee, keys);
    }

    /**
     * The base implementation of `_.functions` which creates an array of
     * `object` function property names filtered from `props`.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Array} props The property names to filter.
     * @returns {Array} Returns the function names.
     */
    function baseFunctions(object, props) {
      return arrayFilter(props, function(key) {
        return isFunction(object[key]);
      });
    }

    /**
     * The base implementation of `_.get` without support for default values.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to get.
     * @returns {*} Returns the resolved value.
     */
    function baseGet(object, path) {
      path = castPath(path, object);

      var index = 0,
          length = path.length;

      while (object != null && index < length) {
        object = object[toKey(path[index++])];
      }
      return (index && index == length) ? object : undefined;
    }

    /**
     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
     * `keysFunc` and `symbolsFunc` to get the enumerable property names and
     * symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @param {Function} symbolsFunc The function to get the symbols of `object`.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function baseGetAllKeys(object, keysFunc, symbolsFunc) {
      var result = keysFunc(object);
      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
    }

    /**
     * The base implementation of `getTag` without fallbacks for buggy environments.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the `toStringTag`.
     */
    function baseGetTag(value) {
      if (value == null) {
        return value === undefined ? undefinedTag : nullTag;
      }
      return (symToStringTag && symToStringTag in Object(value))
        ? getRawTag(value)
        : objectToString(value);
    }

    /**
     * The base implementation of `_.gt` which doesn't coerce arguments.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is greater than `other`,
     *  else `false`.
     */
    function baseGt(value, other) {
      return value > other;
    }

    /**
     * The base implementation of `_.has` without support for deep paths.
     *
     * @private
     * @param {Object} [object] The object to query.
     * @param {Array|string} key The key to check.
     * @returns {boolean} Returns `true` if `key` exists, else `false`.
     */
    function baseHas(object, key) {
      return object != null && hasOwnProperty.call(object, key);
    }

    /**
     * The base implementation of `_.hasIn` without support for deep paths.
     *
     * @private
     * @param {Object} [object] The object to query.
     * @param {Array|string} key The key to check.
     * @returns {boolean} Returns `true` if `key` exists, else `false`.
     */
    function baseHasIn(object, key) {
      return object != null && key in Object(object);
    }

    /**
     * The base implementation of `_.inRange` which doesn't coerce arguments.
     *
     * @private
     * @param {number} number The number to check.
     * @param {number} start The start of the range.
     * @param {number} end The end of the range.
     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
     */
    function baseInRange(number, start, end) {
      return number >= nativeMin(start, end) && number < nativeMax(start, end);
    }

    /**
     * The base implementation of methods like `_.intersection`, without support
     * for iteratee shorthands, that accepts an array of arrays to inspect.
     *
     * @private
     * @param {Array} arrays The arrays to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of shared values.
     */
    function baseIntersection(arrays, iteratee, comparator) {
      var includes = comparator ? arrayIncludesWith : arrayIncludes,
          length = arrays[0].length,
          othLength = arrays.length,
          othIndex = othLength,
          caches = Array(othLength),
          maxLength = Infinity,
          result = [];

      while (othIndex--) {
        var array = arrays[othIndex];
        if (othIndex && iteratee) {
          array = arrayMap(array, baseUnary(iteratee));
        }
        maxLength = nativeMin(array.length, maxLength);
        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
          ? new SetCache(othIndex && array)
          : undefined;
      }
      array = arrays[0];

      var index = -1,
          seen = caches[0];

      outer:
      while (++index < length && result.length < maxLength) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;

        value = (comparator || value !== 0) ? value : 0;
        if (!(seen
              ? cacheHas(seen, computed)
              : includes(result, computed, comparator)
            )) {
          othIndex = othLength;
          while (--othIndex) {
            var cache = caches[othIndex];
            if (!(cache
                  ? cacheHas(cache, computed)
                  : includes(arrays[othIndex], computed, comparator))
                ) {
              continue outer;
            }
          }
          if (seen) {
            seen.push(computed);
          }
          result.push(value);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.invert` and `_.invertBy` which inverts
     * `object` with values transformed by `iteratee` and set by `setter`.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} setter The function to set `accumulator` values.
     * @param {Function} iteratee The iteratee to transform values.
     * @param {Object} accumulator The initial inverted object.
     * @returns {Function} Returns `accumulator`.
     */
    function baseInverter(object, setter, iteratee, accumulator) {
      baseForOwn(object, function(value, key, object) {
        setter(accumulator, iteratee(value), key, object);
      });
      return accumulator;
    }

    /**
     * The base implementation of `_.invoke` without support for individual
     * method arguments.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the method to invoke.
     * @param {Array} args The arguments to invoke the method with.
     * @returns {*} Returns the result of the invoked method.
     */
    function baseInvoke(object, path, args) {
      path = castPath(path, object);
      object = parent(object, path);
      var func = object == null ? object : object[toKey(last(path))];
      return func == null ? undefined : apply(func, object, args);
    }

    /**
     * The base implementation of `_.isArguments`.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
     */
    function baseIsArguments(value) {
      return isObjectLike(value) && baseGetTag(value) == argsTag;
    }

    /**
     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
     */
    function baseIsArrayBuffer(value) {
      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
    }

    /**
     * The base implementation of `_.isDate` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
     */
    function baseIsDate(value) {
      return isObjectLike(value) && baseGetTag(value) == dateTag;
    }

    /**
     * The base implementation of `_.isEqual` which supports partial comparisons
     * and tracks traversed objects.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @param {boolean} bitmask The bitmask flags.
     *  1 - Unordered comparison
     *  2 - Partial comparison
     * @param {Function} [customizer] The function to customize comparisons.
     * @param {Object} [stack] Tracks traversed `value` and `other` objects.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     */
    function baseIsEqual(value, other, bitmask, customizer, stack) {
      if (value === other) {
        return true;
      }
      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
        return value !== value && other !== other;
      }
      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
    }

    /**
     * A specialized version of `baseIsEqual` for arrays and objects which performs
     * deep comparisons and tracks traversed objects enabling objects with circular
     * references to be compared.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} [stack] Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
      var objIsArr = isArray(object),
          othIsArr = isArray(other),
          objTag = objIsArr ? arrayTag : getTag(object),
          othTag = othIsArr ? arrayTag : getTag(other);

      objTag = objTag == argsTag ? objectTag : objTag;
      othTag = othTag == argsTag ? objectTag : othTag;

      var objIsObj = objTag == objectTag,
          othIsObj = othTag == objectTag,
          isSameTag = objTag == othTag;

      if (isSameTag && isBuffer(object)) {
        if (!isBuffer(other)) {
          return false;
        }
        objIsArr = true;
        objIsObj = false;
      }
      if (isSameTag && !objIsObj) {
        stack || (stack = new Stack);
        return (objIsArr || isTypedArray(object))
          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
      }
      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');

        if (objIsWrapped || othIsWrapped) {
          var objUnwrapped = objIsWrapped ? object.value() : object,
              othUnwrapped = othIsWrapped ? other.value() : other;

          stack || (stack = new Stack);
          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
        }
      }
      if (!isSameTag) {
        return false;
      }
      stack || (stack = new Stack);
      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
    }

    /**
     * The base implementation of `_.isMap` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
     */
    function baseIsMap(value) {
      return isObjectLike(value) && getTag(value) == mapTag;
    }

    /**
     * The base implementation of `_.isMatch` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @param {Array} matchData The property names, values, and compare flags to match.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     */
    function baseIsMatch(object, source, matchData, customizer) {
      var index = matchData.length,
          length = index,
          noCustomizer = !customizer;

      if (object == null) {
        return !length;
      }
      object = Object(object);
      while (index--) {
        var data = matchData[index];
        if ((noCustomizer && data[2])
              ? data[1] !== object[data[0]]
              : !(data[0] in object)
            ) {
          return false;
        }
      }
      while (++index < length) {
        data = matchData[index];
        var key = data[0],
            objValue = object[key],
            srcValue = data[1];

        if (noCustomizer && data[2]) {
          if (objValue === undefined && !(key in object)) {
            return false;
          }
        } else {
          var stack = new Stack;
          if (customizer) {
            var result = customizer(objValue, srcValue, key, object, source, stack);
          }
          if (!(result === undefined
                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
                : result
              )) {
            return false;
          }
        }
      }
      return true;
    }

    /**
     * The base implementation of `_.isNative` without bad shim checks.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a native function,
     *  else `false`.
     */
    function baseIsNative(value) {
      if (!isObject(value) || isMasked(value)) {
        return false;
      }
      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
      return pattern.test(toSource(value));
    }

    /**
     * The base implementation of `_.isRegExp` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
     */
    function baseIsRegExp(value) {
      return isObjectLike(value) && baseGetTag(value) == regexpTag;
    }

    /**
     * The base implementation of `_.isSet` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
     */
    function baseIsSet(value) {
      return isObjectLike(value) && getTag(value) == setTag;
    }

    /**
     * The base implementation of `_.isTypedArray` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
     */
    function baseIsTypedArray(value) {
      return isObjectLike(value) &&
        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
    }

    /**
     * The base implementation of `_.iteratee`.
     *
     * @private
     * @param {*} [value=_.identity] The value to convert to an iteratee.
     * @returns {Function} Returns the iteratee.
     */
    function baseIteratee(value) {
      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
      if (typeof value == 'function') {
        return value;
      }
      if (value == null) {
        return identity;
      }
      if (typeof value == 'object') {
        return isArray(value)
          ? baseMatchesProperty(value[0], value[1])
          : baseMatches(value);
      }
      return property(value);
    }

    /**
     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function baseKeys(object) {
      if (!isPrototype(object)) {
        return nativeKeys(object);
      }
      var result = [];
      for (var key in Object(object)) {
        if (hasOwnProperty.call(object, key) && key != 'constructor') {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function baseKeysIn(object) {
      if (!isObject(object)) {
        return nativeKeysIn(object);
      }
      var isProto = isPrototype(object),
          result = [];

      for (var key in object) {
        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.lt` which doesn't coerce arguments.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is less than `other`,
     *  else `false`.
     */
    function baseLt(value, other) {
      return value < other;
    }

    /**
     * The base implementation of `_.map` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array} Returns the new mapped array.
     */
    function baseMap(collection, iteratee) {
      var index = -1,
          result = isArrayLike(collection) ? Array(collection.length) : [];

      baseEach(collection, function(value, key, collection) {
        result[++index] = iteratee(value, key, collection);
      });
      return result;
    }

    /**
     * The base implementation of `_.matches` which doesn't clone `source`.
     *
     * @private
     * @param {Object} source The object of property values to match.
     * @returns {Function} Returns the new spec function.
     */
    function baseMatches(source) {
      var matchData = getMatchData(source);
      if (matchData.length == 1 && matchData[0][2]) {
        return matchesStrictComparable(matchData[0][0], matchData[0][1]);
      }
      return function(object) {
        return object === source || baseIsMatch(object, source, matchData);
      };
    }

    /**
     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
     *
     * @private
     * @param {string} path The path of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     */
    function baseMatchesProperty(path, srcValue) {
      if (isKey(path) && isStrictComparable(srcValue)) {
        return matchesStrictComparable(toKey(path), srcValue);
      }
      return function(object) {
        var objValue = get(object, path);
        return (objValue === undefined && objValue === srcValue)
          ? hasIn(object, path)
          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
      };
    }

    /**
     * The base implementation of `_.merge` without support for multiple sources.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @param {number} srcIndex The index of `source`.
     * @param {Function} [customizer] The function to customize merged values.
     * @param {Object} [stack] Tracks traversed source values and their merged
     *  counterparts.
     */
    function baseMerge(object, source, srcIndex, customizer, stack) {
      if (object === source) {
        return;
      }
      baseFor(source, function(srcValue, key) {
        stack || (stack = new Stack);
        if (isObject(srcValue)) {
          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
        }
        else {
          var newValue = customizer
            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)
            : undefined;

          if (newValue === undefined) {
            newValue = srcValue;
          }
          assignMergeValue(object, key, newValue);
        }
      }, keysIn);
    }

    /**
     * A specialized version of `baseMerge` for arrays and objects which performs
     * deep merges and tracks traversed objects enabling objects with circular
     * references to be merged.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @param {string} key The key of the value to merge.
     * @param {number} srcIndex The index of `source`.
     * @param {Function} mergeFunc The function to merge values.
     * @param {Function} [customizer] The function to customize assigned values.
     * @param {Object} [stack] Tracks traversed source values and their merged
     *  counterparts.
     */
    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
      var objValue = safeGet(object, key),
          srcValue = safeGet(source, key),
          stacked = stack.get(srcValue);

      if (stacked) {
        assignMergeValue(object, key, stacked);
        return;
      }
      var newValue = customizer
        ? customizer(objValue, srcValue, (key + ''), object, source, stack)
        : undefined;

      var isCommon = newValue === undefined;

      if (isCommon) {
        var isArr = isArray(srcValue),
            isBuff = !isArr && isBuffer(srcValue),
            isTyped = !isArr && !isBuff && isTypedArray(srcValue);

        newValue = srcValue;
        if (isArr || isBuff || isTyped) {
          if (isArray(objValue)) {
            newValue = objValue;
          }
          else if (isArrayLikeObject(objValue)) {
            newValue = copyArray(objValue);
          }
          else if (isBuff) {
            isCommon = false;
            newValue = cloneBuffer(srcValue, true);
          }
          else if (isTyped) {
            isCommon = false;
            newValue = cloneTypedArray(srcValue, true);
          }
          else {
            newValue = [];
          }
        }
        else if (isPlainObject(srcValue) || isArguments(srcValue)) {
          newValue = objValue;
          if (isArguments(objValue)) {
            newValue = toPlainObject(objValue);
          }
          else if (!isObject(objValue) || isFunction(objValue)) {
            newValue = initCloneObject(srcValue);
          }
        }
        else {
          isCommon = false;
        }
      }
      if (isCommon) {
        // Recursively merge objects and arrays (susceptible to call stack limits).
        stack.set(srcValue, newValue);
        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
        stack['delete'](srcValue);
      }
      assignMergeValue(object, key, newValue);
    }

    /**
     * The base implementation of `_.nth` which doesn't coerce arguments.
     *
     * @private
     * @param {Array} array The array to query.
     * @param {number} n The index of the element to return.
     * @returns {*} Returns the nth element of `array`.
     */
    function baseNth(array, n) {
      var length = array.length;
      if (!length) {
        return;
      }
      n += n < 0 ? length : 0;
      return isIndex(n, length) ? array[n] : undefined;
    }

    /**
     * The base implementation of `_.orderBy` without param guards.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
     * @param {string[]} orders The sort orders of `iteratees`.
     * @returns {Array} Returns the new sorted array.
     */
    function baseOrderBy(collection, iteratees, orders) {
      if (iteratees.length) {
        iteratees = arrayMap(iteratees, function(iteratee) {
          if (isArray(iteratee)) {
            return function(value) {
              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);
            }
          }
          return iteratee;
        });
      } else {
        iteratees = [identity];
      }

      var index = -1;
      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));

      var result = baseMap(collection, function(value, key, collection) {
        var criteria = arrayMap(iteratees, function(iteratee) {
          return iteratee(value);
        });
        return { 'criteria': criteria, 'index': ++index, 'value': value };
      });

      return baseSortBy(result, function(object, other) {
        return compareMultiple(object, other, orders);
      });
    }

    /**
     * The base implementation of `_.pick` without support for individual
     * property identifiers.
     *
     * @private
     * @param {Object} object The source object.
     * @param {string[]} paths The property paths to pick.
     * @returns {Object} Returns the new object.
     */
    function basePick(object, paths) {
      return basePickBy(object, paths, function(value, path) {
        return hasIn(object, path);
      });
    }

    /**
     * The base implementation of  `_.pickBy` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The source object.
     * @param {string[]} paths The property paths to pick.
     * @param {Function} predicate The function invoked per property.
     * @returns {Object} Returns the new object.
     */
    function basePickBy(object, paths, predicate) {
      var index = -1,
          length = paths.length,
          result = {};

      while (++index < length) {
        var path = paths[index],
            value = baseGet(object, path);

        if (predicate(value, path)) {
          baseSet(result, castPath(path, object), value);
        }
      }
      return result;
    }

    /**
     * A specialized version of `baseProperty` which supports deep paths.
     *
     * @private
     * @param {Array|string} path The path of the property to get.
     * @returns {Function} Returns the new accessor function.
     */
    function basePropertyDeep(path) {
      return function(object) {
        return baseGet(object, path);
      };
    }

    /**
     * The base implementation of `_.pullAllBy` without support for iteratee
     * shorthands.
     *
     * @private
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns `array`.
     */
    function basePullAll(array, values, iteratee, comparator) {
      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
          index = -1,
          length = values.length,
          seen = array;

      if (array === values) {
        values = copyArray(values);
      }
      if (iteratee) {
        seen = arrayMap(array, baseUnary(iteratee));
      }
      while (++index < length) {
        var fromIndex = 0,
            value = values[index],
            computed = iteratee ? iteratee(value) : value;

        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
          if (seen !== array) {
            splice.call(seen, fromIndex, 1);
          }
          splice.call(array, fromIndex, 1);
        }
      }
      return array;
    }

    /**
     * The base implementation of `_.pullAt` without support for individual
     * indexes or capturing the removed elements.
     *
     * @private
     * @param {Array} array The array to modify.
     * @param {number[]} indexes The indexes of elements to remove.
     * @returns {Array} Returns `array`.
     */
    function basePullAt(array, indexes) {
      var length = array ? indexes.length : 0,
          lastIndex = length - 1;

      while (length--) {
        var index = indexes[length];
        if (length == lastIndex || index !== previous) {
          var previous = index;
          if (isIndex(index)) {
            splice.call(array, index, 1);
          } else {
            baseUnset(array, index);
          }
        }
      }
      return array;
    }

    /**
     * The base implementation of `_.random` without support for returning
     * floating-point numbers.
     *
     * @private
     * @param {number} lower The lower bound.
     * @param {number} upper The upper bound.
     * @returns {number} Returns the random number.
     */
    function baseRandom(lower, upper) {
      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
    }

    /**
     * The base implementation of `_.range` and `_.rangeRight` which doesn't
     * coerce arguments.
     *
     * @private
     * @param {number} start The start of the range.
     * @param {number} end The end of the range.
     * @param {number} step The value to increment or decrement by.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Array} Returns the range of numbers.
     */
    function baseRange(start, end, step, fromRight) {
      var index = -1,
          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
          result = Array(length);

      while (length--) {
        result[fromRight ? length : ++index] = start;
        start += step;
      }
      return result;
    }

    /**
     * The base implementation of `_.repeat` which doesn't coerce arguments.
     *
     * @private
     * @param {string} string The string to repeat.
     * @param {number} n The number of times to repeat the string.
     * @returns {string} Returns the repeated string.
     */
    function baseRepeat(string, n) {
      var result = '';
      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
        return result;
      }
      // Leverage the exponentiation by squaring algorithm for a faster repeat.
      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
      do {
        if (n % 2) {
          result += string;
        }
        n = nativeFloor(n / 2);
        if (n) {
          string += string;
        }
      } while (n);

      return result;
    }

    /**
     * The base implementation of `_.rest` which doesn't validate or coerce arguments.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @returns {Function} Returns the new function.
     */
    function baseRest(func, start) {
      return setToString(overRest(func, start, identity), func + '');
    }

    /**
     * The base implementation of `_.sample`.
     *
     * @private
     * @param {Array|Object} collection The collection to sample.
     * @returns {*} Returns the random element.
     */
    function baseSample(collection) {
      return arraySample(values(collection));
    }

    /**
     * The base implementation of `_.sampleSize` without param guards.
     *
     * @private
     * @param {Array|Object} collection The collection to sample.
     * @param {number} n The number of elements to sample.
     * @returns {Array} Returns the random elements.
     */
    function baseSampleSize(collection, n) {
      var array = values(collection);
      return shuffleSelf(array, baseClamp(n, 0, array.length));
    }

    /**
     * The base implementation of `_.set`.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {*} value The value to set.
     * @param {Function} [customizer] The function to customize path creation.
     * @returns {Object} Returns `object`.
     */
    function baseSet(object, path, value, customizer) {
      if (!isObject(object)) {
        return object;
      }
      path = castPath(path, object);

      var index = -1,
          length = path.length,
          lastIndex = length - 1,
          nested = object;

      while (nested != null && ++index < length) {
        var key = toKey(path[index]),
            newValue = value;

        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
          return object;
        }

        if (index != lastIndex) {
          var objValue = nested[key];
          newValue = customizer ? customizer(objValue, key, nested) : undefined;
          if (newValue === undefined) {
            newValue = isObject(objValue)
              ? objValue
              : (isIndex(path[index + 1]) ? [] : {});
          }
        }
        assignValue(nested, key, newValue);
        nested = nested[key];
      }
      return object;
    }

    /**
     * The base implementation of `setData` without support for hot loop shorting.
     *
     * @private
     * @param {Function} func The function to associate metadata with.
     * @param {*} data The metadata.
     * @returns {Function} Returns `func`.
     */
    var baseSetData = !metaMap ? identity : function(func, data) {
      metaMap.set(func, data);
      return func;
    };

    /**
     * The base implementation of `setToString` without support for hot loop shorting.
     *
     * @private
     * @param {Function} func The function to modify.
     * @param {Function} string The `toString` result.
     * @returns {Function} Returns `func`.
     */
    var baseSetToString = !defineProperty ? identity : function(func, string) {
      return defineProperty(func, 'toString', {
        'configurable': true,
        'enumerable': false,
        'value': constant(string),
        'writable': true
      });
    };

    /**
     * The base implementation of `_.shuffle`.
     *
     * @private
     * @param {Array|Object} collection The collection to shuffle.
     * @returns {Array} Returns the new shuffled array.
     */
    function baseShuffle(collection) {
      return shuffleSelf(values(collection));
    }

    /**
     * The base implementation of `_.slice` without an iteratee call guard.
     *
     * @private
     * @param {Array} array The array to slice.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns the slice of `array`.
     */
    function baseSlice(array, start, end) {
      var index = -1,
          length = array.length;

      if (start < 0) {
        start = -start > length ? 0 : (length + start);
      }
      end = end > length ? length : end;
      if (end < 0) {
        end += length;
      }
      length = start > end ? 0 : ((end - start) >>> 0);
      start >>>= 0;

      var result = Array(length);
      while (++index < length) {
        result[index] = array[index + start];
      }
      return result;
    }

    /**
     * The base implementation of `_.some` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {boolean} Returns `true` if any element passes the predicate check,
     *  else `false`.
     */
    function baseSome(collection, predicate) {
      var result;

      baseEach(collection, function(value, index, collection) {
        result = predicate(value, index, collection);
        return !result;
      });
      return !!result;
    }

    /**
     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which
     * performs a binary search of `array` to determine the index at which `value`
     * should be inserted into `array` in order to maintain its sort order.
     *
     * @private
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {boolean} [retHighest] Specify returning the highest qualified index.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     */
    function baseSortedIndex(array, value, retHighest) {
      var low = 0,
          high = array == null ? low : array.length;

      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
        while (low < high) {
          var mid = (low + high) >>> 1,
              computed = array[mid];

          if (computed !== null && !isSymbol(computed) &&
              (retHighest ? (computed <= value) : (computed < value))) {
            low = mid + 1;
          } else {
            high = mid;
          }
        }
        return high;
      }
      return baseSortedIndexBy(array, value, identity, retHighest);
    }

    /**
     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
     * which invokes `iteratee` for `value` and each element of `array` to compute
     * their sort ranking. The iteratee is invoked with one argument; (value).
     *
     * @private
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {Function} iteratee The iteratee invoked per element.
     * @param {boolean} [retHighest] Specify returning the highest qualified index.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     */
    function baseSortedIndexBy(array, value, iteratee, retHighest) {
      var low = 0,
          high = array == null ? 0 : array.length;
      if (high === 0) {
        return 0;
      }

      value = iteratee(value);
      var valIsNaN = value !== value,
          valIsNull = value === null,
          valIsSymbol = isSymbol(value),
          valIsUndefined = value === undefined;

      while (low < high) {
        var mid = nativeFloor((low + high) / 2),
            computed = iteratee(array[mid]),
            othIsDefined = computed !== undefined,
            othIsNull = computed === null,
            othIsReflexive = computed === computed,
            othIsSymbol = isSymbol(computed);

        if (valIsNaN) {
          var setLow = retHighest || othIsReflexive;
        } else if (valIsUndefined) {
          setLow = othIsReflexive && (retHighest || othIsDefined);
        } else if (valIsNull) {
          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
        } else if (valIsSymbol) {
          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
        } else if (othIsNull || othIsSymbol) {
          setLow = false;
        } else {
          setLow = retHighest ? (computed <= value) : (computed < value);
        }
        if (setLow) {
          low = mid + 1;
        } else {
          high = mid;
        }
      }
      return nativeMin(high, MAX_ARRAY_INDEX);
    }

    /**
     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without
     * support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     */
    function baseSortedUniq(array, iteratee) {
      var index = -1,
          length = array.length,
          resIndex = 0,
          result = [];

      while (++index < length) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;

        if (!index || !eq(computed, seen)) {
          var seen = computed;
          result[resIndex++] = value === 0 ? 0 : value;
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.toNumber` which doesn't ensure correct
     * conversions of binary, hexadecimal, or octal string values.
     *
     * @private
     * @param {*} value The value to process.
     * @returns {number} Returns the number.
     */
    function baseToNumber(value) {
      if (typeof value == 'number') {
        return value;
      }
      if (isSymbol(value)) {
        return NAN;
      }
      return +value;
    }

    /**
     * The base implementation of `_.toString` which doesn't convert nullish
     * values to empty strings.
     *
     * @private
     * @param {*} value The value to process.
     * @returns {string} Returns the string.
     */
    function baseToString(value) {
      // Exit early for strings to avoid a performance hit in some environments.
      if (typeof value == 'string') {
        return value;
      }
      if (isArray(value)) {
        // Recursively convert values (susceptible to call stack limits).
        return arrayMap(value, baseToString) + '';
      }
      if (isSymbol(value)) {
        return symbolToString ? symbolToString.call(value) : '';
      }
      var result = (value + '');
      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
    }

    /**
     * The base implementation of `_.uniqBy` without support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     */
    function baseUniq(array, iteratee, comparator) {
      var index = -1,
          includes = arrayIncludes,
          length = array.length,
          isCommon = true,
          result = [],
          seen = result;

      if (comparator) {
        isCommon = false;
        includes = arrayIncludesWith;
      }
      else if (length >= LARGE_ARRAY_SIZE) {
        var set = iteratee ? null : createSet(array);
        if (set) {
          return setToArray(set);
        }
        isCommon = false;
        includes = cacheHas;
        seen = new SetCache;
      }
      else {
        seen = iteratee ? [] : result;
      }
      outer:
      while (++index < length) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;

        value = (comparator || value !== 0) ? value : 0;
        if (isCommon && computed === computed) {
          var seenIndex = seen.length;
          while (seenIndex--) {
            if (seen[seenIndex] === computed) {
              continue outer;
            }
          }
          if (iteratee) {
            seen.push(computed);
          }
          result.push(value);
        }
        else if (!includes(seen, computed, comparator)) {
          if (seen !== result) {
            seen.push(computed);
          }
          result.push(value);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.unset`.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {Array|string} path The property path to unset.
     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
     */
    function baseUnset(object, path) {
      path = castPath(path, object);
      object = parent(object, path);
      return object == null || delete object[toKey(last(path))];
    }

    /**
     * The base implementation of `_.update`.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to update.
     * @param {Function} updater The function to produce the updated value.
     * @param {Function} [customizer] The function to customize path creation.
     * @returns {Object} Returns `object`.
     */
    function baseUpdate(object, path, updater, customizer) {
      return baseSet(object, path, updater(baseGet(object, path)), customizer);
    }

    /**
     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`
     * without support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to query.
     * @param {Function} predicate The function invoked per iteration.
     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Array} Returns the slice of `array`.
     */
    function baseWhile(array, predicate, isDrop, fromRight) {
      var length = array.length,
          index = fromRight ? length : -1;

      while ((fromRight ? index-- : ++index < length) &&
        predicate(array[index], index, array)) {}

      return isDrop
        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
    }

    /**
     * The base implementation of `wrapperValue` which returns the result of
     * performing a sequence of actions on the unwrapped `value`, where each
     * successive action is supplied the return value of the previous.
     *
     * @private
     * @param {*} value The unwrapped value.
     * @param {Array} actions Actions to perform to resolve the unwrapped value.
     * @returns {*} Returns the resolved value.
     */
    function baseWrapperValue(value, actions) {
      var result = value;
      if (result instanceof LazyWrapper) {
        result = result.value();
      }
      return arrayReduce(actions, function(result, action) {
        return action.func.apply(action.thisArg, arrayPush([result], action.args));
      }, result);
    }

    /**
     * The base implementation of methods like `_.xor`, without support for
     * iteratee shorthands, that accepts an array of arrays to inspect.
     *
     * @private
     * @param {Array} arrays The arrays to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of values.
     */
    function baseXor(arrays, iteratee, comparator) {
      var length = arrays.length;
      if (length < 2) {
        return length ? baseUniq(arrays[0]) : [];
      }
      var index = -1,
          result = Array(length);

      while (++index < length) {
        var array = arrays[index],
            othIndex = -1;

        while (++othIndex < length) {
          if (othIndex != index) {
            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
          }
        }
      }
      return baseUniq(baseFlatten(result, 1), iteratee, comparator);
    }

    /**
     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
     *
     * @private
     * @param {Array} props The property identifiers.
     * @param {Array} values The property values.
     * @param {Function} assignFunc The function to assign values.
     * @returns {Object} Returns the new object.
     */
    function baseZipObject(props, values, assignFunc) {
      var index = -1,
          length = props.length,
          valsLength = values.length,
          result = {};

      while (++index < length) {
        var value = index < valsLength ? values[index] : undefined;
        assignFunc(result, props[index], value);
      }
      return result;
    }

    /**
     * Casts `value` to an empty array if it's not an array like object.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {Array|Object} Returns the cast array-like object.
     */
    function castArrayLikeObject(value) {
      return isArrayLikeObject(value) ? value : [];
    }

    /**
     * Casts `value` to `identity` if it's not a function.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {Function} Returns cast function.
     */
    function castFunction(value) {
      return typeof value == 'function' ? value : identity;
    }

    /**
     * Casts `value` to a path array if it's not one.
     *
     * @private
     * @param {*} value The value to inspect.
     * @param {Object} [object] The object to query keys on.
     * @returns {Array} Returns the cast property path array.
     */
    function castPath(value, object) {
      if (isArray(value)) {
        return value;
      }
      return isKey(value, object) ? [value] : stringToPath(toString(value));
    }

    /**
     * A `baseRest` alias which can be replaced with `identity` by module
     * replacement plugins.
     *
     * @private
     * @type {Function}
     * @param {Function} func The function to apply a rest parameter to.
     * @returns {Function} Returns the new function.
     */
    var castRest = baseRest;

    /**
     * Casts `array` to a slice if it's needed.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {number} start The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns the cast slice.
     */
    function castSlice(array, start, end) {
      var length = array.length;
      end = end === undefined ? length : end;
      return (!start && end >= length) ? array : baseSlice(array, start, end);
    }

    /**
     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).
     *
     * @private
     * @param {number|Object} id The timer id or timeout object of the timer to clear.
     */
    var clearTimeout = ctxClearTimeout || function(id) {
      return root.clearTimeout(id);
    };

    /**
     * Creates a clone of  `buffer`.
     *
     * @private
     * @param {Buffer} buffer The buffer to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Buffer} Returns the cloned buffer.
     */
    function cloneBuffer(buffer, isDeep) {
      if (isDeep) {
        return buffer.slice();
      }
      var length = buffer.length,
          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);

      buffer.copy(result);
      return result;
    }

    /**
     * Creates a clone of `arrayBuffer`.
     *
     * @private
     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
     * @returns {ArrayBuffer} Returns the cloned array buffer.
     */
    function cloneArrayBuffer(arrayBuffer) {
      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
      new Uint8Array(result).set(new Uint8Array(arrayBuffer));
      return result;
    }

    /**
     * Creates a clone of `dataView`.
     *
     * @private
     * @param {Object} dataView The data view to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Object} Returns the cloned data view.
     */
    function cloneDataView(dataView, isDeep) {
      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
    }

    /**
     * Creates a clone of `regexp`.
     *
     * @private
     * @param {Object} regexp The regexp to clone.
     * @returns {Object} Returns the cloned regexp.
     */
    function cloneRegExp(regexp) {
      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
      result.lastIndex = regexp.lastIndex;
      return result;
    }

    /**
     * Creates a clone of the `symbol` object.
     *
     * @private
     * @param {Object} symbol The symbol object to clone.
     * @returns {Object} Returns the cloned symbol object.
     */
    function cloneSymbol(symbol) {
      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
    }

    /**
     * Creates a clone of `typedArray`.
     *
     * @private
     * @param {Object} typedArray The typed array to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Object} Returns the cloned typed array.
     */
    function cloneTypedArray(typedArray, isDeep) {
      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
    }

    /**
     * Compares values to sort them in ascending order.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {number} Returns the sort order indicator for `value`.
     */
    function compareAscending(value, other) {
      if (value !== other) {
        var valIsDefined = value !== undefined,
            valIsNull = value === null,
            valIsReflexive = value === value,
            valIsSymbol = isSymbol(value);

        var othIsDefined = other !== undefined,
            othIsNull = other === null,
            othIsReflexive = other === other,
            othIsSymbol = isSymbol(other);

        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
            (valIsNull && othIsDefined && othIsReflexive) ||
            (!valIsDefined && othIsReflexive) ||
            !valIsReflexive) {
          return 1;
        }
        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
            (othIsNull && valIsDefined && valIsReflexive) ||
            (!othIsDefined && valIsReflexive) ||
            !othIsReflexive) {
          return -1;
        }
      }
      return 0;
    }

    /**
     * Used by `_.orderBy` to compare multiple properties of a value to another
     * and stable sort them.
     *
     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
     * specify an order of "desc" for descending or "asc" for ascending sort order
     * of corresponding values.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {boolean[]|string[]} orders The order to sort by for each property.
     * @returns {number} Returns the sort order indicator for `object`.
     */
    function compareMultiple(object, other, orders) {
      var index = -1,
          objCriteria = object.criteria,
          othCriteria = other.criteria,
          length = objCriteria.length,
          ordersLength = orders.length;

      while (++index < length) {
        var result = compareAscending(objCriteria[index], othCriteria[index]);
        if (result) {
          if (index >= ordersLength) {
            return result;
          }
          var order = orders[index];
          return result * (order == 'desc' ? -1 : 1);
        }
      }
      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
      // that causes it, under certain circumstances, to provide the same value for
      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
      // for more details.
      //
      // This also ensures a stable sort in V8 and other engines.
      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
      return object.index - other.index;
    }

    /**
     * Creates an array that is the composition of partially applied arguments,
     * placeholders, and provided arguments into a single array of arguments.
     *
     * @private
     * @param {Array} args The provided arguments.
     * @param {Array} partials The arguments to prepend to those provided.
     * @param {Array} holders The `partials` placeholder indexes.
     * @params {boolean} [isCurried] Specify composing for a curried function.
     * @returns {Array} Returns the new array of composed arguments.
     */
    function composeArgs(args, partials, holders, isCurried) {
      var argsIndex = -1,
          argsLength = args.length,
          holdersLength = holders.length,
          leftIndex = -1,
          leftLength = partials.length,
          rangeLength = nativeMax(argsLength - holdersLength, 0),
          result = Array(leftLength + rangeLength),
          isUncurried = !isCurried;

      while (++leftIndex < leftLength) {
        result[leftIndex] = partials[leftIndex];
      }
      while (++argsIndex < holdersLength) {
        if (isUncurried || argsIndex < argsLength) {
          result[holders[argsIndex]] = args[argsIndex];
        }
      }
      while (rangeLength--) {
        result[leftIndex++] = args[argsIndex++];
      }
      return result;
    }

    /**
     * This function is like `composeArgs` except that the arguments composition
     * is tailored for `_.partialRight`.
     *
     * @private
     * @param {Array} args The provided arguments.
     * @param {Array} partials The arguments to append to those provided.
     * @param {Array} holders The `partials` placeholder indexes.
     * @params {boolean} [isCurried] Specify composing for a curried function.
     * @returns {Array} Returns the new array of composed arguments.
     */
    function composeArgsRight(args, partials, holders, isCurried) {
      var argsIndex = -1,
          argsLength = args.length,
          holdersIndex = -1,
          holdersLength = holders.length,
          rightIndex = -1,
          rightLength = partials.length,
          rangeLength = nativeMax(argsLength - holdersLength, 0),
          result = Array(rangeLength + rightLength),
          isUncurried = !isCurried;

      while (++argsIndex < rangeLength) {
        result[argsIndex] = args[argsIndex];
      }
      var offset = argsIndex;
      while (++rightIndex < rightLength) {
        result[offset + rightIndex] = partials[rightIndex];
      }
      while (++holdersIndex < holdersLength) {
        if (isUncurried || argsIndex < argsLength) {
          result[offset + holders[holdersIndex]] = args[argsIndex++];
        }
      }
      return result;
    }

    /**
     * Copies the values of `source` to `array`.
     *
     * @private
     * @param {Array} source The array to copy values from.
     * @param {Array} [array=[]] The array to copy values to.
     * @returns {Array} Returns `array`.
     */
    function copyArray(source, array) {
      var index = -1,
          length = source.length;

      array || (array = Array(length));
      while (++index < length) {
        array[index] = source[index];
      }
      return array;
    }

    /**
     * Copies properties of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy properties from.
     * @param {Array} props The property identifiers to copy.
     * @param {Object} [object={}] The object to copy properties to.
     * @param {Function} [customizer] The function to customize copied values.
     * @returns {Object} Returns `object`.
     */
    function copyObject(source, props, object, customizer) {
      var isNew = !object;
      object || (object = {});

      var index = -1,
          length = props.length;

      while (++index < length) {
        var key = props[index];

        var newValue = customizer
          ? customizer(object[key], source[key], key, object, source)
          : undefined;

        if (newValue === undefined) {
          newValue = source[key];
        }
        if (isNew) {
          baseAssignValue(object, key, newValue);
        } else {
          assignValue(object, key, newValue);
        }
      }
      return object;
    }

    /**
     * Copies own symbols of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy symbols from.
     * @param {Object} [object={}] The object to copy symbols to.
     * @returns {Object} Returns `object`.
     */
    function copySymbols(source, object) {
      return copyObject(source, getSymbols(source), object);
    }

    /**
     * Copies own and inherited symbols of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy symbols from.
     * @param {Object} [object={}] The object to copy symbols to.
     * @returns {Object} Returns `object`.
     */
    function copySymbolsIn(source, object) {
      return copyObject(source, getSymbolsIn(source), object);
    }

    /**
     * Creates a function like `_.groupBy`.
     *
     * @private
     * @param {Function} setter The function to set accumulator values.
     * @param {Function} [initializer] The accumulator object initializer.
     * @returns {Function} Returns the new aggregator function.
     */
    function createAggregator(setter, initializer) {
      return function(collection, iteratee) {
        var func = isArray(collection) ? arrayAggregator : baseAggregator,
            accumulator = initializer ? initializer() : {};

        return func(collection, setter, getIteratee(iteratee, 2), accumulator);
      };
    }

    /**
     * Creates a function like `_.assign`.
     *
     * @private
     * @param {Function} assigner The function to assign values.
     * @returns {Function} Returns the new assigner function.
     */
    function createAssigner(assigner) {
      return baseRest(function(object, sources) {
        var index = -1,
            length = sources.length,
            customizer = length > 1 ? sources[length - 1] : undefined,
            guard = length > 2 ? sources[2] : undefined;

        customizer = (assigner.length > 3 && typeof customizer == 'function')
          ? (length--, customizer)
          : undefined;

        if (guard && isIterateeCall(sources[0], sources[1], guard)) {
          customizer = length < 3 ? undefined : customizer;
          length = 1;
        }
        object = Object(object);
        while (++index < length) {
          var source = sources[index];
          if (source) {
            assigner(object, source, index, customizer);
          }
        }
        return object;
      });
    }

    /**
     * Creates a `baseEach` or `baseEachRight` function.
     *
     * @private
     * @param {Function} eachFunc The function to iterate over a collection.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new base function.
     */
    function createBaseEach(eachFunc, fromRight) {
      return function(collection, iteratee) {
        if (collection == null) {
          return collection;
        }
        if (!isArrayLike(collection)) {
          return eachFunc(collection, iteratee);
        }
        var length = collection.length,
            index = fromRight ? length : -1,
            iterable = Object(collection);

        while ((fromRight ? index-- : ++index < length)) {
          if (iteratee(iterable[index], index, iterable) === false) {
            break;
          }
        }
        return collection;
      };
    }

    /**
     * Creates a base function for methods like `_.forIn` and `_.forOwn`.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new base function.
     */
    function createBaseFor(fromRight) {
      return function(object, iteratee, keysFunc) {
        var index = -1,
            iterable = Object(object),
            props = keysFunc(object),
            length = props.length;

        while (length--) {
          var key = props[fromRight ? length : ++index];
          if (iteratee(iterable[key], key, iterable) === false) {
            break;
          }
        }
        return object;
      };
    }

    /**
     * Creates a function that wraps `func` to invoke it with the optional `this`
     * binding of `thisArg`.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createBind(func, bitmask, thisArg) {
      var isBind = bitmask & WRAP_BIND_FLAG,
          Ctor = createCtor(func);

      function wrapper() {
        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
        return fn.apply(isBind ? thisArg : this, arguments);
      }
      return wrapper;
    }

    /**
     * Creates a function like `_.lowerFirst`.
     *
     * @private
     * @param {string} methodName The name of the `String` case method to use.
     * @returns {Function} Returns the new case function.
     */
    function createCaseFirst(methodName) {
      return function(string) {
        string = toString(string);

        var strSymbols = hasUnicode(string)
          ? stringToArray(string)
          : undefined;

        var chr = strSymbols
          ? strSymbols[0]
          : string.charAt(0);

        var trailing = strSymbols
          ? castSlice(strSymbols, 1).join('')
          : string.slice(1);

        return chr[methodName]() + trailing;
      };
    }

    /**
     * Creates a function like `_.camelCase`.
     *
     * @private
     * @param {Function} callback The function to combine each word.
     * @returns {Function} Returns the new compounder function.
     */
    function createCompounder(callback) {
      return function(string) {
        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
      };
    }

    /**
     * Creates a function that produces an instance of `Ctor` regardless of
     * whether it was invoked as part of a `new` expression or by `call` or `apply`.
     *
     * @private
     * @param {Function} Ctor The constructor to wrap.
     * @returns {Function} Returns the new wrapped function.
     */
    function createCtor(Ctor) {
      return function() {
        // Use a `switch` statement to work with class constructors. See
        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
        // for more details.
        var args = arguments;
        switch (args.length) {
          case 0: return new Ctor;
          case 1: return new Ctor(args[0]);
          case 2: return new Ctor(args[0], args[1]);
          case 3: return new Ctor(args[0], args[1], args[2]);
          case 4: return new Ctor(args[0], args[1], args[2], args[3]);
          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
        }
        var thisBinding = baseCreate(Ctor.prototype),
            result = Ctor.apply(thisBinding, args);

        // Mimic the constructor's `return` behavior.
        // See https://es5.github.io/#x13.2.2 for more details.
        return isObject(result) ? result : thisBinding;
      };
    }

    /**
     * Creates a function that wraps `func` to enable currying.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {number} arity The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createCurry(func, bitmask, arity) {
      var Ctor = createCtor(func);

      function wrapper() {
        var length = arguments.length,
            args = Array(length),
            index = length,
            placeholder = getHolder(wrapper);

        while (index--) {
          args[index] = arguments[index];
        }
        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
          ? []
          : replaceHolders(args, placeholder);

        length -= holders.length;
        if (length < arity) {
          return createRecurry(
            func, bitmask, createHybrid, wrapper.placeholder, undefined,
            args, holders, undefined, undefined, arity - length);
        }
        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
        return apply(fn, this, args);
      }
      return wrapper;
    }

    /**
     * Creates a `_.find` or `_.findLast` function.
     *
     * @private
     * @param {Function} findIndexFunc The function to find the collection index.
     * @returns {Function} Returns the new find function.
     */
    function createFind(findIndexFunc) {
      return function(collection, predicate, fromIndex) {
        var iterable = Object(collection);
        if (!isArrayLike(collection)) {
          var iteratee = getIteratee(predicate, 3);
          collection = keys(collection);
          predicate = function(key) { return iteratee(iterable[key], key, iterable); };
        }
        var index = findIndexFunc(collection, predicate, fromIndex);
        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
      };
    }

    /**
     * Creates a `_.flow` or `_.flowRight` function.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new flow function.
     */
    function createFlow(fromRight) {
      return flatRest(function(funcs) {
        var length = funcs.length,
            index = length,
            prereq = LodashWrapper.prototype.thru;

        if (fromRight) {
          funcs.reverse();
        }
        while (index--) {
          var func = funcs[index];
          if (typeof func != 'function') {
            throw new TypeError(FUNC_ERROR_TEXT);
          }
          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
            var wrapper = new LodashWrapper([], true);
          }
        }
        index = wrapper ? index : length;
        while (++index < length) {
          func = funcs[index];

          var funcName = getFuncName(func),
              data = funcName == 'wrapper' ? getData(func) : undefined;

          if (data && isLaziable(data[0]) &&
                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
                !data[4].length && data[9] == 1
              ) {
            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
          } else {
            wrapper = (func.length == 1 && isLaziable(func))
              ? wrapper[funcName]()
              : wrapper.thru(func);
          }
        }
        return function() {
          var args = arguments,
              value = args[0];

          if (wrapper && args.length == 1 && isArray(value)) {
            return wrapper.plant(value).value();
          }
          var index = 0,
              result = length ? funcs[index].apply(this, args) : value;

          while (++index < length) {
            result = funcs[index].call(this, result);
          }
          return result;
        };
      });
    }

    /**
     * Creates a function that wraps `func` to invoke it with optional `this`
     * binding of `thisArg`, partial application, and currying.
     *
     * @private
     * @param {Function|string} func The function or method name to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to prepend to those provided to
     *  the new function.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [partialsRight] The arguments to append to those provided
     *  to the new function.
     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
      var isAry = bitmask & WRAP_ARY_FLAG,
          isBind = bitmask & WRAP_BIND_FLAG,
          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
          isFlip = bitmask & WRAP_FLIP_FLAG,
          Ctor = isBindKey ? undefined : createCtor(func);

      function wrapper() {
        var length = arguments.length,
            args = Array(length),
            index = length;

        while (index--) {
          args[index] = arguments[index];
        }
        if (isCurried) {
          var placeholder = getHolder(wrapper),
              holdersCount = countHolders(args, placeholder);
        }
        if (partials) {
          args = composeArgs(args, partials, holders, isCurried);
        }
        if (partialsRight) {
          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
        }
        length -= holdersCount;
        if (isCurried && length < arity) {
          var newHolders = replaceHolders(args, placeholder);
          return createRecurry(
            func, bitmask, createHybrid, wrapper.placeholder, thisArg,
            args, newHolders, argPos, ary, arity - length
          );
        }
        var thisBinding = isBind ? thisArg : this,
            fn = isBindKey ? thisBinding[func] : func;

        length = args.length;
        if (argPos) {
          args = reorder(args, argPos);
        } else if (isFlip && length > 1) {
          args.reverse();
        }
        if (isAry && ary < length) {
          args.length = ary;
        }
        if (this && this !== root && this instanceof wrapper) {
          fn = Ctor || createCtor(fn);
        }
        return fn.apply(thisBinding, args);
      }
      return wrapper;
    }

    /**
     * Creates a function like `_.invertBy`.
     *
     * @private
     * @param {Function} setter The function to set accumulator values.
     * @param {Function} toIteratee The function to resolve iteratees.
     * @returns {Function} Returns the new inverter function.
     */
    function createInverter(setter, toIteratee) {
      return function(object, iteratee) {
        return baseInverter(object, setter, toIteratee(iteratee), {});
      };
    }

    /**
     * Creates a function that performs a mathematical operation on two values.
     *
     * @private
     * @param {Function} operator The function to perform the operation.
     * @param {number} [defaultValue] The value used for `undefined` arguments.
     * @returns {Function} Returns the new mathematical operation function.
     */
    function createMathOperation(operator, defaultValue) {
      return function(value, other) {
        var result;
        if (value === undefined && other === undefined) {
          return defaultValue;
        }
        if (value !== undefined) {
          result = value;
        }
        if (other !== undefined) {
          if (result === undefined) {
            return other;
          }
          if (typeof value == 'string' || typeof other == 'string') {
            value = baseToString(value);
            other = baseToString(other);
          } else {
            value = baseToNumber(value);
            other = baseToNumber(other);
          }
          result = operator(value, other);
        }
        return result;
      };
    }

    /**
     * Creates a function like `_.over`.
     *
     * @private
     * @param {Function} arrayFunc The function to iterate over iteratees.
     * @returns {Function} Returns the new over function.
     */
    function createOver(arrayFunc) {
      return flatRest(function(iteratees) {
        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
        return baseRest(function(args) {
          var thisArg = this;
          return arrayFunc(iteratees, function(iteratee) {
            return apply(iteratee, thisArg, args);
          });
        });
      });
    }

    /**
     * Creates the padding for `string` based on `length`. The `chars` string
     * is truncated if the number of characters exceeds `length`.
     *
     * @private
     * @param {number} length The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padding for `string`.
     */
    function createPadding(length, chars) {
      chars = chars === undefined ? ' ' : baseToString(chars);

      var charsLength = chars.length;
      if (charsLength < 2) {
        return charsLength ? baseRepeat(chars, length) : chars;
      }
      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
      return hasUnicode(chars)
        ? castSlice(stringToArray(result), 0, length).join('')
        : result.slice(0, length);
    }

    /**
     * Creates a function that wraps `func` to invoke it with the `this` binding
     * of `thisArg` and `partials` prepended to the arguments it receives.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} thisArg The `this` binding of `func`.
     * @param {Array} partials The arguments to prepend to those provided to
     *  the new function.
     * @returns {Function} Returns the new wrapped function.
     */
    function createPartial(func, bitmask, thisArg, partials) {
      var isBind = bitmask & WRAP_BIND_FLAG,
          Ctor = createCtor(func);

      function wrapper() {
        var argsIndex = -1,
            argsLength = arguments.length,
            leftIndex = -1,
            leftLength = partials.length,
            args = Array(leftLength + argsLength),
            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;

        while (++leftIndex < leftLength) {
          args[leftIndex] = partials[leftIndex];
        }
        while (argsLength--) {
          args[leftIndex++] = arguments[++argsIndex];
        }
        return apply(fn, isBind ? thisArg : this, args);
      }
      return wrapper;
    }

    /**
     * Creates a `_.range` or `_.rangeRight` function.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new range function.
     */
    function createRange(fromRight) {
      return function(start, end, step) {
        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {
          end = step = undefined;
        }
        // Ensure the sign of `-0` is preserved.
        start = toFinite(start);
        if (end === undefined) {
          end = start;
          start = 0;
        } else {
          end = toFinite(end);
        }
        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
        return baseRange(start, end, step, fromRight);
      };
    }

    /**
     * Creates a function that performs a relational operation on two values.
     *
     * @private
     * @param {Function} operator The function to perform the operation.
     * @returns {Function} Returns the new relational operation function.
     */
    function createRelationalOperation(operator) {
      return function(value, other) {
        if (!(typeof value == 'string' && typeof other == 'string')) {
          value = toNumber(value);
          other = toNumber(other);
        }
        return operator(value, other);
      };
    }

    /**
     * Creates a function that wraps `func` to continue currying.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {Function} wrapFunc The function to create the `func` wrapper.
     * @param {*} placeholder The placeholder value.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to prepend to those provided to
     *  the new function.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
      var isCurry = bitmask & WRAP_CURRY_FLAG,
          newHolders = isCurry ? holders : undefined,
          newHoldersRight = isCurry ? undefined : holders,
          newPartials = isCurry ? partials : undefined,
          newPartialsRight = isCurry ? undefined : partials;

      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);

      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
      }
      var newData = [
        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
        newHoldersRight, argPos, ary, arity
      ];

      var result = wrapFunc.apply(undefined, newData);
      if (isLaziable(func)) {
        setData(result, newData);
      }
      result.placeholder = placeholder;
      return setWrapToString(result, func, bitmask);
    }

    /**
     * Creates a function like `_.round`.
     *
     * @private
     * @param {string} methodName The name of the `Math` method to use when rounding.
     * @returns {Function} Returns the new round function.
     */
    function createRound(methodName) {
      var func = Math[methodName];
      return function(number, precision) {
        number = toNumber(number);
        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
        if (precision && nativeIsFinite(number)) {
          // Shift with exponential notation to avoid floating-point issues.
          // See [MDN](https://mdn.io/round#Examples) for more details.
          var pair = (toString(number) + 'e').split('e'),
              value = func(pair[0] + 'e' + (+pair[1] + precision));

          pair = (toString(value) + 'e').split('e');
          return +(pair[0] + 'e' + (+pair[1] - precision));
        }
        return func(number);
      };
    }

    /**
     * Creates a set object of `values`.
     *
     * @private
     * @param {Array} values The values to add to the set.
     * @returns {Object} Returns the new set.
     */
    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
      return new Set(values);
    };

    /**
     * Creates a `_.toPairs` or `_.toPairsIn` function.
     *
     * @private
     * @param {Function} keysFunc The function to get the keys of a given object.
     * @returns {Function} Returns the new pairs function.
     */
    function createToPairs(keysFunc) {
      return function(object) {
        var tag = getTag(object);
        if (tag == mapTag) {
          return mapToArray(object);
        }
        if (tag == setTag) {
          return setToPairs(object);
        }
        return baseToPairs(object, keysFunc(object));
      };
    }

    /**
     * Creates a function that either curries or invokes `func` with optional
     * `this` binding and partially applied arguments.
     *
     * @private
     * @param {Function|string} func The function or method name to wrap.
     * @param {number} bitmask The bitmask flags.
     *    1 - `_.bind`
     *    2 - `_.bindKey`
     *    4 - `_.curry` or `_.curryRight` of a bound function
     *    8 - `_.curry`
     *   16 - `_.curryRight`
     *   32 - `_.partial`
     *   64 - `_.partialRight`
     *  128 - `_.rearg`
     *  256 - `_.ary`
     *  512 - `_.flip`
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to be partially applied.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
      if (!isBindKey && typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      var length = partials ? partials.length : 0;
      if (!length) {
        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
        partials = holders = undefined;
      }
      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
      arity = arity === undefined ? arity : toInteger(arity);
      length -= holders ? holders.length : 0;

      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
        var partialsRight = partials,
            holdersRight = holders;

        partials = holders = undefined;
      }
      var data = isBindKey ? undefined : getData(func);

      var newData = [
        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,
        argPos, ary, arity
      ];

      if (data) {
        mergeData(newData, data);
      }
      func = newData[0];
      bitmask = newData[1];
      thisArg = newData[2];
      partials = newData[3];
      holders = newData[4];
      arity = newData[9] = newData[9] === undefined
        ? (isBindKey ? 0 : func.length)
        : nativeMax(newData[9] - length, 0);

      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
      }
      if (!bitmask || bitmask == WRAP_BIND_FLAG) {
        var result = createBind(func, bitmask, thisArg);
      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
        result = createCurry(func, bitmask, arity);
      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
        result = createPartial(func, bitmask, thisArg, partials);
      } else {
        result = createHybrid.apply(undefined, newData);
      }
      var setter = data ? baseSetData : setData;
      return setWrapToString(setter(result, newData), func, bitmask);
    }

    /**
     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties
     * of source objects to the destination object for all destination properties
     * that resolve to `undefined`.
     *
     * @private
     * @param {*} objValue The destination value.
     * @param {*} srcValue The source value.
     * @param {string} key The key of the property to assign.
     * @param {Object} object The parent object of `objValue`.
     * @returns {*} Returns the value to assign.
     */
    function customDefaultsAssignIn(objValue, srcValue, key, object) {
      if (objValue === undefined ||
          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
        return srcValue;
      }
      return objValue;
    }

    /**
     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
     * objects into destination objects that are passed thru.
     *
     * @private
     * @param {*} objValue The destination value.
     * @param {*} srcValue The source value.
     * @param {string} key The key of the property to merge.
     * @param {Object} object The parent object of `objValue`.
     * @param {Object} source The parent object of `srcValue`.
     * @param {Object} [stack] Tracks traversed source values and their merged
     *  counterparts.
     * @returns {*} Returns the value to assign.
     */
    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
      if (isObject(objValue) && isObject(srcValue)) {
        // Recursively merge objects and arrays (susceptible to call stack limits).
        stack.set(srcValue, objValue);
        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
        stack['delete'](srcValue);
      }
      return objValue;
    }

    /**
     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
     * objects.
     *
     * @private
     * @param {*} value The value to inspect.
     * @param {string} key The key of the property to inspect.
     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
     */
    function customOmitClone(value) {
      return isPlainObject(value) ? undefined : value;
    }

    /**
     * A specialized version of `baseIsEqualDeep` for arrays with support for
     * partial deep comparisons.
     *
     * @private
     * @param {Array} array The array to compare.
     * @param {Array} other The other array to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `array` and `other` objects.
     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
     */
    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
          arrLength = array.length,
          othLength = other.length;

      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
        return false;
      }
      // Check that cyclic values are equal.
      var arrStacked = stack.get(array);
      var othStacked = stack.get(other);
      if (arrStacked && othStacked) {
        return arrStacked == other && othStacked == array;
      }
      var index = -1,
          result = true,
          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;

      stack.set(array, other);
      stack.set(other, array);

      // Ignore non-index properties.
      while (++index < arrLength) {
        var arrValue = array[index],
            othValue = other[index];

        if (customizer) {
          var compared = isPartial
            ? customizer(othValue, arrValue, index, other, array, stack)
            : customizer(arrValue, othValue, index, array, other, stack);
        }
        if (compared !== undefined) {
          if (compared) {
            continue;
          }
          result = false;
          break;
        }
        // Recursively compare arrays (susceptible to call stack limits).
        if (seen) {
          if (!arraySome(other, function(othValue, othIndex) {
                if (!cacheHas(seen, othIndex) &&
                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
                  return seen.push(othIndex);
                }
              })) {
            result = false;
            break;
          }
        } else if (!(
              arrValue === othValue ||
                equalFunc(arrValue, othValue, bitmask, customizer, stack)
            )) {
          result = false;
          break;
        }
      }
      stack['delete'](array);
      stack['delete'](other);
      return result;
    }

    /**
     * A specialized version of `baseIsEqualDeep` for comparing objects of
     * the same `toStringTag`.
     *
     * **Note:** This function only supports comparing values with tags of
     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {string} tag The `toStringTag` of the objects to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
      switch (tag) {
        case dataViewTag:
          if ((object.byteLength != other.byteLength) ||
              (object.byteOffset != other.byteOffset)) {
            return false;
          }
          object = object.buffer;
          other = other.buffer;

        case arrayBufferTag:
          if ((object.byteLength != other.byteLength) ||
              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
            return false;
          }
          return true;

        case boolTag:
        case dateTag:
        case numberTag:
          // Coerce booleans to `1` or `0` and dates to milliseconds.
          // Invalid dates are coerced to `NaN`.
          return eq(+object, +other);

        case errorTag:
          return object.name == other.name && object.message == other.message;

        case regexpTag:
        case stringTag:
          // Coerce regexes to strings and treat strings, primitives and objects,
          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
          // for more details.
          return object == (other + '');

        case mapTag:
          var convert = mapToArray;

        case setTag:
          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
          convert || (convert = setToArray);

          if (object.size != other.size && !isPartial) {
            return false;
          }
          // Assume cyclic values are equal.
          var stacked = stack.get(object);
          if (stacked) {
            return stacked == other;
          }
          bitmask |= COMPARE_UNORDERED_FLAG;

          // Recursively compare objects (susceptible to call stack limits).
          stack.set(object, other);
          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
          stack['delete'](object);
          return result;

        case symbolTag:
          if (symbolValueOf) {
            return symbolValueOf.call(object) == symbolValueOf.call(other);
          }
      }
      return false;
    }

    /**
     * A specialized version of `baseIsEqualDeep` for objects with support for
     * partial deep comparisons.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
          objProps = getAllKeys(object),
          objLength = objProps.length,
          othProps = getAllKeys(other),
          othLength = othProps.length;

      if (objLength != othLength && !isPartial) {
        return false;
      }
      var index = objLength;
      while (index--) {
        var key = objProps[index];
        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
          return false;
        }
      }
      // Check that cyclic values are equal.
      var objStacked = stack.get(object);
      var othStacked = stack.get(other);
      if (objStacked && othStacked) {
        return objStacked == other && othStacked == object;
      }
      var result = true;
      stack.set(object, other);
      stack.set(other, object);

      var skipCtor = isPartial;
      while (++index < objLength) {
        key = objProps[index];
        var objValue = object[key],
            othValue = other[key];

        if (customizer) {
          var compared = isPartial
            ? customizer(othValue, objValue, key, other, object, stack)
            : customizer(objValue, othValue, key, object, other, stack);
        }
        // Recursively compare objects (susceptible to call stack limits).
        if (!(compared === undefined
              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
              : compared
            )) {
          result = false;
          break;
        }
        skipCtor || (skipCtor = key == 'constructor');
      }
      if (result && !skipCtor) {
        var objCtor = object.constructor,
            othCtor = other.constructor;

        // Non `Object` object instances with different constructors are not equal.
        if (objCtor != othCtor &&
            ('constructor' in object && 'constructor' in other) &&
            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
              typeof othCtor == 'function' && othCtor instanceof othCtor)) {
          result = false;
        }
      }
      stack['delete'](object);
      stack['delete'](other);
      return result;
    }

    /**
     * A specialized version of `baseRest` which flattens the rest array.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @returns {Function} Returns the new function.
     */
    function flatRest(func) {
      return setToString(overRest(func, undefined, flatten), func + '');
    }

    /**
     * Creates an array of own enumerable property names and symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function getAllKeys(object) {
      return baseGetAllKeys(object, keys, getSymbols);
    }

    /**
     * Creates an array of own and inherited enumerable property names and
     * symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function getAllKeysIn(object) {
      return baseGetAllKeys(object, keysIn, getSymbolsIn);
    }

    /**
     * Gets metadata for `func`.
     *
     * @private
     * @param {Function} func The function to query.
     * @returns {*} Returns the metadata for `func`.
     */
    var getData = !metaMap ? noop : function(func) {
      return metaMap.get(func);
    };

    /**
     * Gets the name of `func`.
     *
     * @private
     * @param {Function} func The function to query.
     * @returns {string} Returns the function name.
     */
    function getFuncName(func) {
      var result = (func.name + ''),
          array = realNames[result],
          length = hasOwnProperty.call(realNames, result) ? array.length : 0;

      while (length--) {
        var data = array[length],
            otherFunc = data.func;
        if (otherFunc == null || otherFunc == func) {
          return data.name;
        }
      }
      return result;
    }

    /**
     * Gets the argument placeholder value for `func`.
     *
     * @private
     * @param {Function} func The function to inspect.
     * @returns {*} Returns the placeholder value.
     */
    function getHolder(func) {
      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;
      return object.placeholder;
    }

    /**
     * Gets the appropriate "iteratee" function. If `_.iteratee` is customized,
     * this function returns the custom method, otherwise it returns `baseIteratee`.
     * If arguments are provided, the chosen function is invoked with them and
     * its result is returned.
     *
     * @private
     * @param {*} [value] The value to convert to an iteratee.
     * @param {number} [arity] The arity of the created iteratee.
     * @returns {Function} Returns the chosen function or its result.
     */
    function getIteratee() {
      var result = lodash.iteratee || iteratee;
      result = result === iteratee ? baseIteratee : result;
      return arguments.length ? result(arguments[0], arguments[1]) : result;
    }

    /**
     * Gets the data for `map`.
     *
     * @private
     * @param {Object} map The map to query.
     * @param {string} key The reference key.
     * @returns {*} Returns the map data.
     */
    function getMapData(map, key) {
      var data = map.__data__;
      return isKeyable(key)
        ? data[typeof key == 'string' ? 'string' : 'hash']
        : data.map;
    }

    /**
     * Gets the property names, values, and compare flags of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the match data of `object`.
     */
    function getMatchData(object) {
      var result = keys(object),
          length = result.length;

      while (length--) {
        var key = result[length],
            value = object[key];

        result[length] = [key, value, isStrictComparable(value)];
      }
      return result;
    }

    /**
     * Gets the native function at `key` of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {string} key The key of the method to get.
     * @returns {*} Returns the function if it's native, else `undefined`.
     */
    function getNative(object, key) {
      var value = getValue(object, key);
      return baseIsNative(value) ? value : undefined;
    }

    /**
     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the raw `toStringTag`.
     */
    function getRawTag(value) {
      var isOwn = hasOwnProperty.call(value, symToStringTag),
          tag = value[symToStringTag];

      try {
        value[symToStringTag] = undefined;
        var unmasked = true;
      } catch (e) {}

      var result = nativeObjectToString.call(value);
      if (unmasked) {
        if (isOwn) {
          value[symToStringTag] = tag;
        } else {
          delete value[symToStringTag];
        }
      }
      return result;
    }

    /**
     * Creates an array of the own enumerable symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of symbols.
     */
    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
      if (object == null) {
        return [];
      }
      object = Object(object);
      return arrayFilter(nativeGetSymbols(object), function(symbol) {
        return propertyIsEnumerable.call(object, symbol);
      });
    };

    /**
     * Creates an array of the own and inherited enumerable symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of symbols.
     */
    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
      var result = [];
      while (object) {
        arrayPush(result, getSymbols(object));
        object = getPrototype(object);
      }
      return result;
    };

    /**
     * Gets the `toStringTag` of `value`.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the `toStringTag`.
     */
    var getTag = baseGetTag;

    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
        (Map && getTag(new Map) != mapTag) ||
        (Promise && getTag(Promise.resolve()) != promiseTag) ||
        (Set && getTag(new Set) != setTag) ||
        (WeakMap && getTag(new WeakMap) != weakMapTag)) {
      getTag = function(value) {
        var result = baseGetTag(value),
            Ctor = result == objectTag ? value.constructor : undefined,
            ctorString = Ctor ? toSource(Ctor) : '';

        if (ctorString) {
          switch (ctorString) {
            case dataViewCtorString: return dataViewTag;
            case mapCtorString: return mapTag;
            case promiseCtorString: return promiseTag;
            case setCtorString: return setTag;
            case weakMapCtorString: return weakMapTag;
          }
        }
        return result;
      };
    }

    /**
     * Gets the view, applying any `transforms` to the `start` and `end` positions.
     *
     * @private
     * @param {number} start The start of the view.
     * @param {number} end The end of the view.
     * @param {Array} transforms The transformations to apply to the view.
     * @returns {Object} Returns an object containing the `start` and `end`
     *  positions of the view.
     */
    function getView(start, end, transforms) {
      var index = -1,
          length = transforms.length;

      while (++index < length) {
        var data = transforms[index],
            size = data.size;

        switch (data.type) {
          case 'drop':      start += size; break;
          case 'dropRight': end -= size; break;
          case 'take':      end = nativeMin(end, start + size); break;
          case 'takeRight': start = nativeMax(start, end - size); break;
        }
      }
      return { 'start': start, 'end': end };
    }

    /**
     * Extracts wrapper details from the `source` body comment.
     *
     * @private
     * @param {string} source The source to inspect.
     * @returns {Array} Returns the wrapper details.
     */
    function getWrapDetails(source) {
      var match = source.match(reWrapDetails);
      return match ? match[1].split(reSplitDetails) : [];
    }

    /**
     * Checks if `path` exists on `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @param {Function} hasFunc The function to check properties.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     */
    function hasPath(object, path, hasFunc) {
      path = castPath(path, object);

      var index = -1,
          length = path.length,
          result = false;

      while (++index < length) {
        var key = toKey(path[index]);
        if (!(result = object != null && hasFunc(object, key))) {
          break;
        }
        object = object[key];
      }
      if (result || ++index != length) {
        return result;
      }
      length = object == null ? 0 : object.length;
      return !!length && isLength(length) && isIndex(key, length) &&
        (isArray(object) || isArguments(object));
    }

    /**
     * Initializes an array clone.
     *
     * @private
     * @param {Array} array The array to clone.
     * @returns {Array} Returns the initialized clone.
     */
    function initCloneArray(array) {
      var length = array.length,
          result = new array.constructor(length);

      // Add properties assigned by `RegExp#exec`.
      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
        result.index = array.index;
        result.input = array.input;
      }
      return result;
    }

    /**
     * Initializes an object clone.
     *
     * @private
     * @param {Object} object The object to clone.
     * @returns {Object} Returns the initialized clone.
     */
    function initCloneObject(object) {
      return (typeof object.constructor == 'function' && !isPrototype(object))
        ? baseCreate(getPrototype(object))
        : {};
    }

    /**
     * Initializes an object clone based on its `toStringTag`.
     *
     * **Note:** This function only supports cloning values with tags of
     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
     *
     * @private
     * @param {Object} object The object to clone.
     * @param {string} tag The `toStringTag` of the object to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Object} Returns the initialized clone.
     */
    function initCloneByTag(object, tag, isDeep) {
      var Ctor = object.constructor;
      switch (tag) {
        case arrayBufferTag:
          return cloneArrayBuffer(object);

        case boolTag:
        case dateTag:
          return new Ctor(+object);

        case dataViewTag:
          return cloneDataView(object, isDeep);

        case float32Tag: case float64Tag:
        case int8Tag: case int16Tag: case int32Tag:
        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
          return cloneTypedArray(object, isDeep);

        case mapTag:
          return new Ctor;

        case numberTag:
        case stringTag:
          return new Ctor(object);

        case regexpTag:
          return cloneRegExp(object);

        case setTag:
          return new Ctor;

        case symbolTag:
          return cloneSymbol(object);
      }
    }

    /**
     * Inserts wrapper `details` in a comment at the top of the `source` body.
     *
     * @private
     * @param {string} source The source to modify.
     * @returns {Array} details The details to insert.
     * @returns {string} Returns the modified source.
     */
    function insertWrapDetails(source, details) {
      var length = details.length;
      if (!length) {
        return source;
      }
      var lastIndex = length - 1;
      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];
      details = details.join(length > 2 ? ', ' : ' ');
      return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
    }

    /**
     * Checks if `value` is a flattenable `arguments` object or array.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
     */
    function isFlattenable(value) {
      return isArray(value) || isArguments(value) ||
        !!(spreadableSymbol && value && value[spreadableSymbol]);
    }

    /**
     * Checks if `value` is a valid array-like index.
     *
     * @private
     * @param {*} value The value to check.
     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
     */
    function isIndex(value, length) {
      var type = typeof value;
      length = length == null ? MAX_SAFE_INTEGER : length;

      return !!length &&
        (type == 'number' ||
          (type != 'symbol' && reIsUint.test(value))) &&
            (value > -1 && value % 1 == 0 && value < length);
    }

    /**
     * Checks if the given arguments are from an iteratee call.
     *
     * @private
     * @param {*} value The potential iteratee value argument.
     * @param {*} index The potential iteratee index or key argument.
     * @param {*} object The potential iteratee object argument.
     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
     *  else `false`.
     */
    function isIterateeCall(value, index, object) {
      if (!isObject(object)) {
        return false;
      }
      var type = typeof index;
      if (type == 'number'
            ? (isArrayLike(object) && isIndex(index, object.length))
            : (type == 'string' && index in object)
          ) {
        return eq(object[index], value);
      }
      return false;
    }

    /**
     * Checks if `value` is a property name and not a property path.
     *
     * @private
     * @param {*} value The value to check.
     * @param {Object} [object] The object to query keys on.
     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
     */
    function isKey(value, object) {
      if (isArray(value)) {
        return false;
      }
      var type = typeof value;
      if (type == 'number' || type == 'symbol' || type == 'boolean' ||
          value == null || isSymbol(value)) {
        return true;
      }
      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
        (object != null && value in Object(object));
    }

    /**
     * Checks if `value` is suitable for use as unique object key.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
     */
    function isKeyable(value) {
      var type = typeof value;
      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
        ? (value !== '__proto__')
        : (value === null);
    }

    /**
     * Checks if `func` has a lazy counterpart.
     *
     * @private
     * @param {Function} func The function to check.
     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,
     *  else `false`.
     */
    function isLaziable(func) {
      var funcName = getFuncName(func),
          other = lodash[funcName];

      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
        return false;
      }
      if (func === other) {
        return true;
      }
      var data = getData(other);
      return !!data && func === data[0];
    }

    /**
     * Checks if `func` has its source masked.
     *
     * @private
     * @param {Function} func The function to check.
     * @returns {boolean} Returns `true` if `func` is masked, else `false`.
     */
    function isMasked(func) {
      return !!maskSrcKey && (maskSrcKey in func);
    }

    /**
     * Checks if `func` is capable of being masked.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.
     */
    var isMaskable = coreJsData ? isFunction : stubFalse;

    /**
     * Checks if `value` is likely a prototype object.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
     */
    function isPrototype(value) {
      var Ctor = value && value.constructor,
          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;

      return value === proto;
    }

    /**
     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` if suitable for strict
     *  equality comparisons, else `false`.
     */
    function isStrictComparable(value) {
      return value === value && !isObject(value);
    }

    /**
     * A specialized version of `matchesProperty` for source values suitable
     * for strict equality comparisons, i.e. `===`.
     *
     * @private
     * @param {string} key The key of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     */
    function matchesStrictComparable(key, srcValue) {
      return function(object) {
        if (object == null) {
          return false;
        }
        return object[key] === srcValue &&
          (srcValue !== undefined || (key in Object(object)));
      };
    }

    /**
     * A specialized version of `_.memoize` which clears the memoized function's
     * cache when it exceeds `MAX_MEMOIZE_SIZE`.
     *
     * @private
     * @param {Function} func The function to have its output memoized.
     * @returns {Function} Returns the new memoized function.
     */
    function memoizeCapped(func) {
      var result = memoize(func, function(key) {
        if (cache.size === MAX_MEMOIZE_SIZE) {
          cache.clear();
        }
        return key;
      });

      var cache = result.cache;
      return result;
    }

    /**
     * Merges the function metadata of `source` into `data`.
     *
     * Merging metadata reduces the number of wrappers used to invoke a function.
     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
     * may be applied regardless of execution order. Methods like `_.ary` and
     * `_.rearg` modify function arguments, making the order in which they are
     * executed important, preventing the merging of metadata. However, we make
     * an exception for a safe combined case where curried functions have `_.ary`
     * and or `_.rearg` applied.
     *
     * @private
     * @param {Array} data The destination metadata.
     * @param {Array} source The source metadata.
     * @returns {Array} Returns `data`.
     */
    function mergeData(data, source) {
      var bitmask = data[1],
          srcBitmask = source[1],
          newBitmask = bitmask | srcBitmask,
          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);

      var isCombo =
        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));

      // Exit early if metadata can't be merged.
      if (!(isCommon || isCombo)) {
        return data;
      }
      // Use source `thisArg` if available.
      if (srcBitmask & WRAP_BIND_FLAG) {
        data[2] = source[2];
        // Set when currying a bound function.
        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
      }
      // Compose partial arguments.
      var value = source[3];
      if (value) {
        var partials = data[3];
        data[3] = partials ? composeArgs(partials, value, source[4]) : value;
        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
      }
      // Compose partial right arguments.
      value = source[5];
      if (value) {
        partials = data[5];
        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
      }
      // Use source `argPos` if available.
      value = source[7];
      if (value) {
        data[7] = value;
      }
      // Use source `ary` if it's smaller.
      if (srcBitmask & WRAP_ARY_FLAG) {
        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
      }
      // Use source `arity` if one is not provided.
      if (data[9] == null) {
        data[9] = source[9];
      }
      // Use source `func` and merge bitmasks.
      data[0] = source[0];
      data[1] = newBitmask;

      return data;
    }

    /**
     * This function is like
     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
     * except that it includes inherited enumerable properties.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function nativeKeysIn(object) {
      var result = [];
      if (object != null) {
        for (var key in Object(object)) {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * Converts `value` to a string using `Object.prototype.toString`.
     *
     * @private
     * @param {*} value The value to convert.
     * @returns {string} Returns the converted string.
     */
    function objectToString(value) {
      return nativeObjectToString.call(value);
    }

    /**
     * A specialized version of `baseRest` which transforms the rest array.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @param {Function} transform The rest array transform.
     * @returns {Function} Returns the new function.
     */
    function overRest(func, start, transform) {
      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
      return function() {
        var args = arguments,
            index = -1,
            length = nativeMax(args.length - start, 0),
            array = Array(length);

        while (++index < length) {
          array[index] = args[start + index];
        }
        index = -1;
        var otherArgs = Array(start + 1);
        while (++index < start) {
          otherArgs[index] = args[index];
        }
        otherArgs[start] = transform(array);
        return apply(func, this, otherArgs);
      };
    }

    /**
     * Gets the parent value at `path` of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array} path The path to get the parent value of.
     * @returns {*} Returns the parent value.
     */
    function parent(object, path) {
      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
    }

    /**
     * Reorder `array` according to the specified indexes where the element at
     * the first index is assigned as the first element, the element at
     * the second index is assigned as the second element, and so on.
     *
     * @private
     * @param {Array} array The array to reorder.
     * @param {Array} indexes The arranged array indexes.
     * @returns {Array} Returns `array`.
     */
    function reorder(array, indexes) {
      var arrLength = array.length,
          length = nativeMin(indexes.length, arrLength),
          oldArray = copyArray(array);

      while (length--) {
        var index = indexes[length];
        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
      }
      return array;
    }

    /**
     * Gets the value at `key`, unless `key` is "__proto__" or "constructor".
     *
     * @private
     * @param {Object} object The object to query.
     * @param {string} key The key of the property to get.
     * @returns {*} Returns the property value.
     */
    function safeGet(object, key) {
      if (key === 'constructor' && typeof object[key] === 'function') {
        return;
      }

      if (key == '__proto__') {
        return;
      }

      return object[key];
    }

    /**
     * Sets metadata for `func`.
     *
     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
     * period of time, it will trip its breaker and transition to an identity
     * function to avoid garbage collection pauses in V8. See
     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
     * for more details.
     *
     * @private
     * @param {Function} func The function to associate metadata with.
     * @param {*} data The metadata.
     * @returns {Function} Returns `func`.
     */
    var setData = shortOut(baseSetData);

    /**
     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
     *
     * @private
     * @param {Function} func The function to delay.
     * @param {number} wait The number of milliseconds to delay invocation.
     * @returns {number|Object} Returns the timer id or timeout object.
     */
    var setTimeout = ctxSetTimeout || function(func, wait) {
      return root.setTimeout(func, wait);
    };

    /**
     * Sets the `toString` method of `func` to return `string`.
     *
     * @private
     * @param {Function} func The function to modify.
     * @param {Function} string The `toString` result.
     * @returns {Function} Returns `func`.
     */
    var setToString = shortOut(baseSetToString);

    /**
     * Sets the `toString` method of `wrapper` to mimic the source of `reference`
     * with wrapper details in a comment at the top of the source body.
     *
     * @private
     * @param {Function} wrapper The function to modify.
     * @param {Function} reference The reference function.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @returns {Function} Returns `wrapper`.
     */
    function setWrapToString(wrapper, reference, bitmask) {
      var source = (reference + '');
      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
    }

    /**
     * Creates a function that'll short out and invoke `identity` instead
     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
     * milliseconds.
     *
     * @private
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new shortable function.
     */
    function shortOut(func) {
      var count = 0,
          lastCalled = 0;

      return function() {
        var stamp = nativeNow(),
            remaining = HOT_SPAN - (stamp - lastCalled);

        lastCalled = stamp;
        if (remaining > 0) {
          if (++count >= HOT_COUNT) {
            return arguments[0];
          }
        } else {
          count = 0;
        }
        return func.apply(undefined, arguments);
      };
    }

    /**
     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.
     *
     * @private
     * @param {Array} array The array to shuffle.
     * @param {number} [size=array.length] The size of `array`.
     * @returns {Array} Returns `array`.
     */
    function shuffleSelf(array, size) {
      var index = -1,
          length = array.length,
          lastIndex = length - 1;

      size = size === undefined ? length : size;
      while (++index < size) {
        var rand = baseRandom(index, lastIndex),
            value = array[rand];

        array[rand] = array[index];
        array[index] = value;
      }
      array.length = size;
      return array;
    }

    /**
     * Converts `string` to a property path array.
     *
     * @private
     * @param {string} string The string to convert.
     * @returns {Array} Returns the property path array.
     */
    var stringToPath = memoizeCapped(function(string) {
      var result = [];
      if (string.charCodeAt(0) === 46 /* . */) {
        result.push('');
      }
      string.replace(rePropName, function(match, number, quote, subString) {
        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
      });
      return result;
    });

    /**
     * Converts `value` to a string key if it's not a string or symbol.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {string|symbol} Returns the key.
     */
    function toKey(value) {
      if (typeof value == 'string' || isSymbol(value)) {
        return value;
      }
      var result = (value + '');
      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
    }

    /**
     * Converts `func` to its source code.
     *
     * @private
     * @param {Function} func The function to convert.
     * @returns {string} Returns the source code.
     */
    function toSource(func) {
      if (func != null) {
        try {
          return funcToString.call(func);
        } catch (e) {}
        try {
          return (func + '');
        } catch (e) {}
      }
      return '';
    }

    /**
     * Updates wrapper `details` based on `bitmask` flags.
     *
     * @private
     * @returns {Array} details The details to modify.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @returns {Array} Returns `details`.
     */
    function updateWrapDetails(details, bitmask) {
      arrayEach(wrapFlags, function(pair) {
        var value = '_.' + pair[0];
        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
          details.push(value);
        }
      });
      return details.sort();
    }

    /**
     * Creates a clone of `wrapper`.
     *
     * @private
     * @param {Object} wrapper The wrapper to clone.
     * @returns {Object} Returns the cloned wrapper.
     */
    function wrapperClone(wrapper) {
      if (wrapper instanceof LazyWrapper) {
        return wrapper.clone();
      }
      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
      result.__actions__ = copyArray(wrapper.__actions__);
      result.__index__  = wrapper.__index__;
      result.__values__ = wrapper.__values__;
      return result;
    }

    /*------------------------------------------------------------------------*/

    /**
     * Creates an array of elements split into groups the length of `size`.
     * If `array` can't be split evenly, the final chunk will be the remaining
     * elements.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to process.
     * @param {number} [size=1] The length of each chunk
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the new array of chunks.
     * @example
     *
     * _.chunk(['a', 'b', 'c', 'd'], 2);
     * // => [['a', 'b'], ['c', 'd']]
     *
     * _.chunk(['a', 'b', 'c', 'd'], 3);
     * // => [['a', 'b', 'c'], ['d']]
     */
    function chunk(array, size, guard) {
      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {
        size = 1;
      } else {
        size = nativeMax(toInteger(size), 0);
      }
      var length = array == null ? 0 : array.length;
      if (!length || size < 1) {
        return [];
      }
      var index = 0,
          resIndex = 0,
          result = Array(nativeCeil(length / size));

      while (index < length) {
        result[resIndex++] = baseSlice(array, index, (index += size));
      }
      return result;
    }

    /**
     * Creates an array with all falsey values removed. The values `false`, `null`,
     * `0`, `""`, `undefined`, and `NaN` are falsey.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to compact.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.compact([0, 1, false, 2, '', 3]);
     * // => [1, 2, 3]
     */
    function compact(array) {
      var index = -1,
          length = array == null ? 0 : array.length,
          resIndex = 0,
          result = [];

      while (++index < length) {
        var value = array[index];
        if (value) {
          result[resIndex++] = value;
        }
      }
      return result;
    }

    /**
     * Creates a new array concatenating `array` with any additional arrays
     * and/or values.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to concatenate.
     * @param {...*} [values] The values to concatenate.
     * @returns {Array} Returns the new concatenated array.
     * @example
     *
     * var array = [1];
     * var other = _.concat(array, 2, [3], [[4]]);
     *
     * console.log(other);
     * // => [1, 2, 3, [4]]
     *
     * console.log(array);
     * // => [1]
     */
    function concat() {
      var length = arguments.length;
      if (!length) {
        return [];
      }
      var args = Array(length - 1),
          array = arguments[0],
          index = length;

      while (index--) {
        args[index - 1] = arguments[index];
      }
      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
    }

    /**
     * Creates an array of `array` values not included in the other given arrays
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. The order and references of result values are
     * determined by the first array.
     *
     * **Note:** Unlike `_.pullAll`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.without, _.xor
     * @example
     *
     * _.difference([2, 1], [2, 3]);
     * // => [1]
     */
    var difference = baseRest(function(array, values) {
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))
        : [];
    });

    /**
     * This method is like `_.difference` except that it accepts `iteratee` which
     * is invoked for each element of `array` and `values` to generate the criterion
     * by which they're compared. The order and references of result values are
     * determined by the first array. The iteratee is invoked with one argument:
     * (value).
     *
     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
     * // => [1.2]
     *
     * // The `_.property` iteratee shorthand.
     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
     * // => [{ 'x': 2 }]
     */
    var differenceBy = baseRest(function(array, values) {
      var iteratee = last(values);
      if (isArrayLikeObject(iteratee)) {
        iteratee = undefined;
      }
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))
        : [];
    });

    /**
     * This method is like `_.difference` except that it accepts `comparator`
     * which is invoked to compare elements of `array` to `values`. The order and
     * references of result values are determined by the first array. The comparator
     * is invoked with two arguments: (arrVal, othVal).
     *
     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     *
     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
     * // => [{ 'x': 2, 'y': 1 }]
     */
    var differenceWith = baseRest(function(array, values) {
      var comparator = last(values);
      if (isArrayLikeObject(comparator)) {
        comparator = undefined;
      }
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)
        : [];
    });

    /**
     * Creates a slice of `array` with `n` elements dropped from the beginning.
     *
     * @static
     * @memberOf _
     * @since 0.5.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to drop.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.drop([1, 2, 3]);
     * // => [2, 3]
     *
     * _.drop([1, 2, 3], 2);
     * // => [3]
     *
     * _.drop([1, 2, 3], 5);
     * // => []
     *
     * _.drop([1, 2, 3], 0);
     * // => [1, 2, 3]
     */
    function drop(array, n, guard) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      return baseSlice(array, n < 0 ? 0 : n, length);
    }

    /**
     * Creates a slice of `array` with `n` elements dropped from the end.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to drop.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.dropRight([1, 2, 3]);
     * // => [1, 2]
     *
     * _.dropRight([1, 2, 3], 2);
     * // => [1]
     *
     * _.dropRight([1, 2, 3], 5);
     * // => []
     *
     * _.dropRight([1, 2, 3], 0);
     * // => [1, 2, 3]
     */
    function dropRight(array, n, guard) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      n = length - n;
      return baseSlice(array, 0, n < 0 ? 0 : n);
    }

    /**
     * Creates a slice of `array` excluding elements dropped from the end.
     * Elements are dropped until `predicate` returns falsey. The predicate is
     * invoked with three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': true },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': false }
     * ];
     *
     * _.dropRightWhile(users, function(o) { return !o.active; });
     * // => objects for ['barney']
     *
     * // The `_.matches` iteratee shorthand.
     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
     * // => objects for ['barney', 'fred']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.dropRightWhile(users, ['active', false]);
     * // => objects for ['barney']
     *
     * // The `_.property` iteratee shorthand.
     * _.dropRightWhile(users, 'active');
     * // => objects for ['barney', 'fred', 'pebbles']
     */
    function dropRightWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3), true, true)
        : [];
    }

    /**
     * Creates a slice of `array` excluding elements dropped from the beginning.
     * Elements are dropped until `predicate` returns falsey. The predicate is
     * invoked with three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.dropWhile(users, function(o) { return !o.active; });
     * // => objects for ['pebbles']
     *
     * // The `_.matches` iteratee shorthand.
     * _.dropWhile(users, { 'user': 'barney', 'active': false });
     * // => objects for ['fred', 'pebbles']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.dropWhile(users, ['active', false]);
     * // => objects for ['pebbles']
     *
     * // The `_.property` iteratee shorthand.
     * _.dropWhile(users, 'active');
     * // => objects for ['barney', 'fred', 'pebbles']
     */
    function dropWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3), true)
        : [];
    }

    /**
     * Fills elements of `array` with `value` from `start` up to, but not
     * including, `end`.
     *
     * **Note:** This method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 3.2.0
     * @category Array
     * @param {Array} array The array to fill.
     * @param {*} value The value to fill `array` with.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [1, 2, 3];
     *
     * _.fill(array, 'a');
     * console.log(array);
     * // => ['a', 'a', 'a']
     *
     * _.fill(Array(3), 2);
     * // => [2, 2, 2]
     *
     * _.fill([4, 6, 8, 10], '*', 1, 3);
     * // => [4, '*', '*', 10]
     */
    function fill(array, value, start, end) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
        start = 0;
        end = length;
      }
      return baseFill(array, value, start, end);
    }

    /**
     * This method is like `_.find` except that it returns the index of the first
     * element `predicate` returns truthy for instead of the element itself.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {number} Returns the index of the found element, else `-1`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.findIndex(users, function(o) { return o.user == 'barney'; });
     * // => 0
     *
     * // The `_.matches` iteratee shorthand.
     * _.findIndex(users, { 'user': 'fred', 'active': false });
     * // => 1
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findIndex(users, ['active', false]);
     * // => 0
     *
     * // The `_.property` iteratee shorthand.
     * _.findIndex(users, 'active');
     * // => 2
     */
    function findIndex(array, predicate, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = fromIndex == null ? 0 : toInteger(fromIndex);
      if (index < 0) {
        index = nativeMax(length + index, 0);
      }
      return baseFindIndex(array, getIteratee(predicate, 3), index);
    }

    /**
     * This method is like `_.findIndex` except that it iterates over elements
     * of `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=array.length-1] The index to search from.
     * @returns {number} Returns the index of the found element, else `-1`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': true },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': false }
     * ];
     *
     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
     * // => 2
     *
     * // The `_.matches` iteratee shorthand.
     * _.findLastIndex(users, { 'user': 'barney', 'active': true });
     * // => 0
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findLastIndex(users, ['active', false]);
     * // => 2
     *
     * // The `_.property` iteratee shorthand.
     * _.findLastIndex(users, 'active');
     * // => 0
     */
    function findLastIndex(array, predicate, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = length - 1;
      if (fromIndex !== undefined) {
        index = toInteger(fromIndex);
        index = fromIndex < 0
          ? nativeMax(length + index, 0)
          : nativeMin(index, length - 1);
      }
      return baseFindIndex(array, getIteratee(predicate, 3), index, true);
    }

    /**
     * Flattens `array` a single level deep.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to flatten.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * _.flatten([1, [2, [3, [4]], 5]]);
     * // => [1, 2, [3, [4]], 5]
     */
    function flatten(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseFlatten(array, 1) : [];
    }

    /**
     * Recursively flattens `array`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to flatten.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * _.flattenDeep([1, [2, [3, [4]], 5]]);
     * // => [1, 2, 3, 4, 5]
     */
    function flattenDeep(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseFlatten(array, INFINITY) : [];
    }

    /**
     * Recursively flatten `array` up to `depth` times.
     *
     * @static
     * @memberOf _
     * @since 4.4.0
     * @category Array
     * @param {Array} array The array to flatten.
     * @param {number} [depth=1] The maximum recursion depth.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * var array = [1, [2, [3, [4]], 5]];
     *
     * _.flattenDepth(array, 1);
     * // => [1, 2, [3, [4]], 5]
     *
     * _.flattenDepth(array, 2);
     * // => [1, 2, 3, [4], 5]
     */
    function flattenDepth(array, depth) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      depth = depth === undefined ? 1 : toInteger(depth);
      return baseFlatten(array, depth);
    }

    /**
     * The inverse of `_.toPairs`; this method returns an object composed
     * from key-value `pairs`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} pairs The key-value pairs.
     * @returns {Object} Returns the new object.
     * @example
     *
     * _.fromPairs([['a', 1], ['b', 2]]);
     * // => { 'a': 1, 'b': 2 }
     */
    function fromPairs(pairs) {
      var index = -1,
          length = pairs == null ? 0 : pairs.length,
          result = {};

      while (++index < length) {
        var pair = pairs[index];
        result[pair[0]] = pair[1];
      }
      return result;
    }

    /**
     * Gets the first element of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @alias first
     * @category Array
     * @param {Array} array The array to query.
     * @returns {*} Returns the first element of `array`.
     * @example
     *
     * _.head([1, 2, 3]);
     * // => 1
     *
     * _.head([]);
     * // => undefined
     */
    function head(array) {
      return (array && array.length) ? array[0] : undefined;
    }

    /**
     * Gets the index at which the first occurrence of `value` is found in `array`
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. If `fromIndex` is negative, it's used as the
     * offset from the end of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.indexOf([1, 2, 1, 2], 2);
     * // => 1
     *
     * // Search from the `fromIndex`.
     * _.indexOf([1, 2, 1, 2], 2, 2);
     * // => 3
     */
    function indexOf(array, value, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = fromIndex == null ? 0 : toInteger(fromIndex);
      if (index < 0) {
        index = nativeMax(length + index, 0);
      }
      return baseIndexOf(array, value, index);
    }

    /**
     * Gets all but the last element of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to query.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.initial([1, 2, 3]);
     * // => [1, 2]
     */
    function initial(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseSlice(array, 0, -1) : [];
    }

    /**
     * Creates an array of unique values that are included in all given arrays
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. The order and references of result values are
     * determined by the first array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of intersecting values.
     * @example
     *
     * _.intersection([2, 1], [2, 3]);
     * // => [2]
     */
    var intersection = baseRest(function(arrays) {
      var mapped = arrayMap(arrays, castArrayLikeObject);
      return (mapped.length && mapped[0] === arrays[0])
        ? baseIntersection(mapped)
        : [];
    });

    /**
     * This method is like `_.intersection` except that it accepts `iteratee`
     * which is invoked for each element of each `arrays` to generate the criterion
     * by which they're compared. The order and references of result values are
     * determined by the first array. The iteratee is invoked with one argument:
     * (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of intersecting values.
     * @example
     *
     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
     * // => [2.1]
     *
     * // The `_.property` iteratee shorthand.
     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 1 }]
     */
    var intersectionBy = baseRest(function(arrays) {
      var iteratee = last(arrays),
          mapped = arrayMap(arrays, castArrayLikeObject);

      if (iteratee === last(mapped)) {
        iteratee = undefined;
      } else {
        mapped.pop();
      }
      return (mapped.length && mapped[0] === arrays[0])
        ? baseIntersection(mapped, getIteratee(iteratee, 2))
        : [];
    });

    /**
     * This method is like `_.intersection` except that it accepts `comparator`
     * which is invoked to compare elements of `arrays`. The order and references
     * of result values are determined by the first array. The comparator is
     * invoked with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of intersecting values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.intersectionWith(objects, others, _.isEqual);
     * // => [{ 'x': 1, 'y': 2 }]
     */
    var intersectionWith = baseRest(function(arrays) {
      var comparator = last(arrays),
          mapped = arrayMap(arrays, castArrayLikeObject);

      comparator = typeof comparator == 'function' ? comparator : undefined;
      if (comparator) {
        mapped.pop();
      }
      return (mapped.length && mapped[0] === arrays[0])
        ? baseIntersection(mapped, undefined, comparator)
        : [];
    });

    /**
     * Converts all elements in `array` into a string separated by `separator`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to convert.
     * @param {string} [separator=','] The element separator.
     * @returns {string} Returns the joined string.
     * @example
     *
     * _.join(['a', 'b', 'c'], '~');
     * // => 'a~b~c'
     */
    function join(array, separator) {
      return array == null ? '' : nativeJoin.call(array, separator);
    }

    /**
     * Gets the last element of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to query.
     * @returns {*} Returns the last element of `array`.
     * @example
     *
     * _.last([1, 2, 3]);
     * // => 3
     */
    function last(array) {
      var length = array == null ? 0 : array.length;
      return length ? array[length - 1] : undefined;
    }

    /**
     * This method is like `_.indexOf` except that it iterates over elements of
     * `array` from right to left.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @param {number} [fromIndex=array.length-1] The index to search from.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.lastIndexOf([1, 2, 1, 2], 2);
     * // => 3
     *
     * // Search from the `fromIndex`.
     * _.lastIndexOf([1, 2, 1, 2], 2, 2);
     * // => 1
     */
    function lastIndexOf(array, value, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = length;
      if (fromIndex !== undefined) {
        index = toInteger(fromIndex);
        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
      }
      return value === value
        ? strictLastIndexOf(array, value, index)
        : baseFindIndex(array, baseIsNaN, index, true);
    }

    /**
     * Gets the element at index `n` of `array`. If `n` is negative, the nth
     * element from the end is returned.
     *
     * @static
     * @memberOf _
     * @since 4.11.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=0] The index of the element to return.
     * @returns {*} Returns the nth element of `array`.
     * @example
     *
     * var array = ['a', 'b', 'c', 'd'];
     *
     * _.nth(array, 1);
     * // => 'b'
     *
     * _.nth(array, -2);
     * // => 'c';
     */
    function nth(array, n) {
      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;
    }

    /**
     * Removes all given values from `array` using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
     * to remove elements from an array by predicate.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {...*} [values] The values to remove.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
     *
     * _.pull(array, 'a', 'c');
     * console.log(array);
     * // => ['b', 'b']
     */
    var pull = baseRest(pullAll);

    /**
     * This method is like `_.pull` except that it accepts an array of values to remove.
     *
     * **Note:** Unlike `_.difference`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
     *
     * _.pullAll(array, ['a', 'c']);
     * console.log(array);
     * // => ['b', 'b']
     */
    function pullAll(array, values) {
      return (array && array.length && values && values.length)
        ? basePullAll(array, values)
        : array;
    }

    /**
     * This method is like `_.pullAll` except that it accepts `iteratee` which is
     * invoked for each element of `array` and `values` to generate the criterion
     * by which they're compared. The iteratee is invoked with one argument: (value).
     *
     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
     *
     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
     * console.log(array);
     * // => [{ 'x': 2 }]
     */
    function pullAllBy(array, values, iteratee) {
      return (array && array.length && values && values.length)
        ? basePullAll(array, values, getIteratee(iteratee, 2))
        : array;
    }

    /**
     * This method is like `_.pullAll` except that it accepts `comparator` which
     * is invoked to compare elements of `array` to `values`. The comparator is
     * invoked with two arguments: (arrVal, othVal).
     *
     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 4.6.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
     *
     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
     * console.log(array);
     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
     */
    function pullAllWith(array, values, comparator) {
      return (array && array.length && values && values.length)
        ? basePullAll(array, values, undefined, comparator)
        : array;
    }

    /**
     * Removes elements from `array` corresponding to `indexes` and returns an
     * array of removed elements.
     *
     * **Note:** Unlike `_.at`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {...(number|number[])} [indexes] The indexes of elements to remove.
     * @returns {Array} Returns the new array of removed elements.
     * @example
     *
     * var array = ['a', 'b', 'c', 'd'];
     * var pulled = _.pullAt(array, [1, 3]);
     *
     * console.log(array);
     * // => ['a', 'c']
     *
     * console.log(pulled);
     * // => ['b', 'd']
     */
    var pullAt = flatRest(function(array, indexes) {
      var length = array == null ? 0 : array.length,
          result = baseAt(array, indexes);

      basePullAt(array, arrayMap(indexes, function(index) {
        return isIndex(index, length) ? +index : index;
      }).sort(compareAscending));

      return result;
    });

    /**
     * Removes all elements from `array` that `predicate` returns truthy for
     * and returns an array of the removed elements. The predicate is invoked
     * with three arguments: (value, index, array).
     *
     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
     * to pull elements from an array by value.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new array of removed elements.
     * @example
     *
     * var array = [1, 2, 3, 4];
     * var evens = _.remove(array, function(n) {
     *   return n % 2 == 0;
     * });
     *
     * console.log(array);
     * // => [1, 3]
     *
     * console.log(evens);
     * // => [2, 4]
     */
    function remove(array, predicate) {
      var result = [];
      if (!(array && array.length)) {
        return result;
      }
      var index = -1,
          indexes = [],
          length = array.length;

      predicate = getIteratee(predicate, 3);
      while (++index < length) {
        var value = array[index];
        if (predicate(value, index, array)) {
          result.push(value);
          indexes.push(index);
        }
      }
      basePullAt(array, indexes);
      return result;
    }

    /**
     * Reverses `array` so that the first element becomes the last, the second
     * element becomes the second to last, and so on.
     *
     * **Note:** This method mutates `array` and is based on
     * [`Array#reverse`](https://mdn.io/Array/reverse).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [1, 2, 3];
     *
     * _.reverse(array);
     * // => [3, 2, 1]
     *
     * console.log(array);
     * // => [3, 2, 1]
     */
    function reverse(array) {
      return array == null ? array : nativeReverse.call(array);
    }

    /**
     * Creates a slice of `array` from `start` up to, but not including, `end`.
     *
     * **Note:** This method is used instead of
     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
     * returned.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to slice.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns the slice of `array`.
     */
    function slice(array, start, end) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
        start = 0;
        end = length;
      }
      else {
        start = start == null ? 0 : toInteger(start);
        end = end === undefined ? length : toInteger(end);
      }
      return baseSlice(array, start, end);
    }

    /**
     * Uses a binary search to determine the lowest index at which `value`
     * should be inserted into `array` in order to maintain its sort order.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * _.sortedIndex([30, 50], 40);
     * // => 1
     */
    function sortedIndex(array, value) {
      return baseSortedIndex(array, value);
    }

    /**
     * This method is like `_.sortedIndex` except that it accepts `iteratee`
     * which is invoked for `value` and each element of `array` to compute their
     * sort ranking. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * var objects = [{ 'x': 4 }, { 'x': 5 }];
     *
     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
     * // => 0
     *
     * // The `_.property` iteratee shorthand.
     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');
     * // => 0
     */
    function sortedIndexBy(array, value, iteratee) {
      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));
    }

    /**
     * This method is like `_.indexOf` except that it performs a binary
     * search on a sorted `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);
     * // => 1
     */
    function sortedIndexOf(array, value) {
      var length = array == null ? 0 : array.length;
      if (length) {
        var index = baseSortedIndex(array, value);
        if (index < length && eq(array[index], value)) {
          return index;
        }
      }
      return -1;
    }

    /**
     * This method is like `_.sortedIndex` except that it returns the highest
     * index at which `value` should be inserted into `array` in order to
     * maintain its sort order.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);
     * // => 4
     */
    function sortedLastIndex(array, value) {
      return baseSortedIndex(array, value, true);
    }

    /**
     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`
     * which is invoked for `value` and each element of `array` to compute their
     * sort ranking. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * var objects = [{ 'x': 4 }, { 'x': 5 }];
     *
     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
     * // => 1
     *
     * // The `_.property` iteratee shorthand.
     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');
     * // => 1
     */
    function sortedLastIndexBy(array, value, iteratee) {
      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);
    }

    /**
     * This method is like `_.lastIndexOf` except that it performs a binary
     * search on a sorted `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);
     * // => 3
     */
    function sortedLastIndexOf(array, value) {
      var length = array == null ? 0 : array.length;
      if (length) {
        var index = baseSortedIndex(array, value, true) - 1;
        if (eq(array[index], value)) {
          return index;
        }
      }
      return -1;
    }

    /**
     * This method is like `_.uniq` except that it's designed and optimized
     * for sorted arrays.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.sortedUniq([1, 1, 2]);
     * // => [1, 2]
     */
    function sortedUniq(array) {
      return (array && array.length)
        ? baseSortedUniq(array)
        : [];
    }

    /**
     * This method is like `_.uniqBy` except that it's designed and optimized
     * for sorted arrays.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
     * // => [1.1, 2.3]
     */
    function sortedUniqBy(array, iteratee) {
      return (array && array.length)
        ? baseSortedUniq(array, getIteratee(iteratee, 2))
        : [];
    }

    /**
     * Gets all but the first element of `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.tail([1, 2, 3]);
     * // => [2, 3]
     */
    function tail(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseSlice(array, 1, length) : [];
    }

    /**
     * Creates a slice of `array` with `n` elements taken from the beginning.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to take.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.take([1, 2, 3]);
     * // => [1]
     *
     * _.take([1, 2, 3], 2);
     * // => [1, 2]
     *
     * _.take([1, 2, 3], 5);
     * // => [1, 2, 3]
     *
     * _.take([1, 2, 3], 0);
     * // => []
     */
    function take(array, n, guard) {
      if (!(array && array.length)) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      return baseSlice(array, 0, n < 0 ? 0 : n);
    }

    /**
     * Creates a slice of `array` with `n` elements taken from the end.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to take.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.takeRight([1, 2, 3]);
     * // => [3]
     *
     * _.takeRight([1, 2, 3], 2);
     * // => [2, 3]
     *
     * _.takeRight([1, 2, 3], 5);
     * // => [1, 2, 3]
     *
     * _.takeRight([1, 2, 3], 0);
     * // => []
     */
    function takeRight(array, n, guard) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      n = length - n;
      return baseSlice(array, n < 0 ? 0 : n, length);
    }

    /**
     * Creates a slice of `array` with elements taken from the end. Elements are
     * taken until `predicate` returns falsey. The predicate is invoked with
     * three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': true },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': false }
     * ];
     *
     * _.takeRightWhile(users, function(o) { return !o.active; });
     * // => objects for ['fred', 'pebbles']
     *
     * // The `_.matches` iteratee shorthand.
     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
     * // => objects for ['pebbles']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.takeRightWhile(users, ['active', false]);
     * // => objects for ['fred', 'pebbles']
     *
     * // The `_.property` iteratee shorthand.
     * _.takeRightWhile(users, 'active');
     * // => []
     */
    function takeRightWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3), false, true)
        : [];
    }

    /**
     * Creates a slice of `array` with elements taken from the beginning. Elements
     * are taken until `predicate` returns falsey. The predicate is invoked with
     * three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.takeWhile(users, function(o) { return !o.active; });
     * // => objects for ['barney', 'fred']
     *
     * // The `_.matches` iteratee shorthand.
     * _.takeWhile(users, { 'user': 'barney', 'active': false });
     * // => objects for ['barney']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.takeWhile(users, ['active', false]);
     * // => objects for ['barney', 'fred']
     *
     * // The `_.property` iteratee shorthand.
     * _.takeWhile(users, 'active');
     * // => []
     */
    function takeWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3))
        : [];
    }

    /**
     * Creates an array of unique values, in order, from all given arrays using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * _.union([2], [1, 2]);
     * // => [2, 1]
     */
    var union = baseRest(function(arrays) {
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
    });

    /**
     * This method is like `_.union` except that it accepts `iteratee` which is
     * invoked for each element of each `arrays` to generate the criterion by
     * which uniqueness is computed. Result values are chosen from the first
     * array in which the value occurs. The iteratee is invoked with one argument:
     * (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * _.unionBy([2.1], [1.2, 2.3], Math.floor);
     * // => [2.1, 1.2]
     *
     * // The `_.property` iteratee shorthand.
     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 1 }, { 'x': 2 }]
     */
    var unionBy = baseRest(function(arrays) {
      var iteratee = last(arrays);
      if (isArrayLikeObject(iteratee)) {
        iteratee = undefined;
      }
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));
    });

    /**
     * This method is like `_.union` except that it accepts `comparator` which
     * is invoked to compare elements of `arrays`. Result values are chosen from
     * the first array in which the value occurs. The comparator is invoked
     * with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.unionWith(objects, others, _.isEqual);
     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
     */
    var unionWith = baseRest(function(arrays) {
      var comparator = last(arrays);
      comparator = typeof comparator == 'function' ? comparator : undefined;
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);
    });

    /**
     * Creates a duplicate-free version of an array, using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons, in which only the first occurrence of each element
     * is kept. The order of result values is determined by the order they occur
     * in the array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.uniq([2, 1, 2]);
     * // => [2, 1]
     */
    function uniq(array) {
      return (array && array.length) ? baseUniq(array) : [];
    }

    /**
     * This method is like `_.uniq` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the criterion by which
     * uniqueness is computed. The order of result values is determined by the
     * order they occur in the array. The iteratee is invoked with one argument:
     * (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
     * // => [2.1, 1.2]
     *
     * // The `_.property` iteratee shorthand.
     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 1 }, { 'x': 2 }]
     */
    function uniqBy(array, iteratee) {
      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];
    }

    /**
     * This method is like `_.uniq` except that it accepts `comparator` which
     * is invoked to compare elements of `array`. The order of result values is
     * determined by the order they occur in the array.The comparator is invoked
     * with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.uniqWith(objects, _.isEqual);
     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
     */
    function uniqWith(array, comparator) {
      comparator = typeof comparator == 'function' ? comparator : undefined;
      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];
    }

    /**
     * This method is like `_.zip` except that it accepts an array of grouped
     * elements and creates an array regrouping the elements to their pre-zip
     * configuration.
     *
     * @static
     * @memberOf _
     * @since 1.2.0
     * @category Array
     * @param {Array} array The array of grouped elements to process.
     * @returns {Array} Returns the new array of regrouped elements.
     * @example
     *
     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);
     * // => [['a', 1, true], ['b', 2, false]]
     *
     * _.unzip(zipped);
     * // => [['a', 'b'], [1, 2], [true, false]]
     */
    function unzip(array) {
      if (!(array && array.length)) {
        return [];
      }
      var length = 0;
      array = arrayFilter(array, function(group) {
        if (isArrayLikeObject(group)) {
          length = nativeMax(group.length, length);
          return true;
        }
      });
      return baseTimes(length, function(index) {
        return arrayMap(array, baseProperty(index));
      });
    }

    /**
     * This method is like `_.unzip` except that it accepts `iteratee` to specify
     * how regrouped values should be combined. The iteratee is invoked with the
     * elements of each group: (...group).
     *
     * @static
     * @memberOf _
     * @since 3.8.0
     * @category Array
     * @param {Array} array The array of grouped elements to process.
     * @param {Function} [iteratee=_.identity] The function to combine
     *  regrouped values.
     * @returns {Array} Returns the new array of regrouped elements.
     * @example
     *
     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
     * // => [[1, 10, 100], [2, 20, 200]]
     *
     * _.unzipWith(zipped, _.add);
     * // => [3, 30, 300]
     */
    function unzipWith(array, iteratee) {
      if (!(array && array.length)) {
        return [];
      }
      var result = unzip(array);
      if (iteratee == null) {
        return result;
      }
      return arrayMap(result, function(group) {
        return apply(iteratee, undefined, group);
      });
    }

    /**
     * Creates an array excluding all given values using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * **Note:** Unlike `_.pull`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...*} [values] The values to exclude.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.difference, _.xor
     * @example
     *
     * _.without([2, 1, 2, 3], 1, 2);
     * // => [3]
     */
    var without = baseRest(function(array, values) {
      return isArrayLikeObject(array)
        ? baseDifference(array, values)
        : [];
    });

    /**
     * Creates an array of unique values that is the
     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
     * of the given arrays. The order of result values is determined by the order
     * they occur in the arrays.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.difference, _.without
     * @example
     *
     * _.xor([2, 1], [2, 3]);
     * // => [1, 3]
     */
    var xor = baseRest(function(arrays) {
      return baseXor(arrayFilter(arrays, isArrayLikeObject));
    });

    /**
     * This method is like `_.xor` except that it accepts `iteratee` which is
     * invoked for each element of each `arrays` to generate the criterion by
     * which by which they're compared. The order of result values is determined
     * by the order they occur in the arrays. The iteratee is invoked with one
     * argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);
     * // => [1.2, 3.4]
     *
     * // The `_.property` iteratee shorthand.
     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 2 }]
     */
    var xorBy = baseRest(function(arrays) {
      var iteratee = last(arrays);
      if (isArrayLikeObject(iteratee)) {
        iteratee = undefined;
      }
      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));
    });

    /**
     * This method is like `_.xor` except that it accepts `comparator` which is
     * invoked to compare elements of `arrays`. The order of result values is
     * determined by the order they occur in the arrays. The comparator is invoked
     * with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.xorWith(objects, others, _.isEqual);
     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
     */
    var xorWith = baseRest(function(arrays) {
      var comparator = last(arrays);
      comparator = typeof comparator == 'function' ? comparator : undefined;
      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);
    });

    /**
     * Creates an array of grouped elements, the first of which contains the
     * first elements of the given arrays, the second of which contains the
     * second elements of the given arrays, and so on.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to process.
     * @returns {Array} Returns the new array of grouped elements.
     * @example
     *
     * _.zip(['a', 'b'], [1, 2], [true, false]);
     * // => [['a', 1, true], ['b', 2, false]]
     */
    var zip = baseRest(unzip);

    /**
     * This method is like `_.fromPairs` except that it accepts two arrays,
     * one of property identifiers and one of corresponding values.
     *
     * @static
     * @memberOf _
     * @since 0.4.0
     * @category Array
     * @param {Array} [props=[]] The property identifiers.
     * @param {Array} [values=[]] The property values.
     * @returns {Object} Returns the new object.
     * @example
     *
     * _.zipObject(['a', 'b'], [1, 2]);
     * // => { 'a': 1, 'b': 2 }
     */
    function zipObject(props, values) {
      return baseZipObject(props || [], values || [], assignValue);
    }

    /**
     * This method is like `_.zipObject` except that it supports property paths.
     *
     * @static
     * @memberOf _
     * @since 4.1.0
     * @category Array
     * @param {Array} [props=[]] The property identifiers.
     * @param {Array} [values=[]] The property values.
     * @returns {Object} Returns the new object.
     * @example
     *
     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);
     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
     */
    function zipObjectDeep(props, values) {
      return baseZipObject(props || [], values || [], baseSet);
    }

    /**
     * This method is like `_.zip` except that it accepts `iteratee` to specify
     * how grouped values should be combined. The iteratee is invoked with the
     * elements of each group: (...group).
     *
     * @static
     * @memberOf _
     * @since 3.8.0
     * @category Array
     * @param {...Array} [arrays] The arrays to process.
     * @param {Function} [iteratee=_.identity] The function to combine
     *  grouped values.
     * @returns {Array} Returns the new array of grouped elements.
     * @example
     *
     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {
     *   return a + b + c;
     * });
     * // => [111, 222]
     */
    var zipWith = baseRest(function(arrays) {
      var length = arrays.length,
          iteratee = length > 1 ? arrays[length - 1] : undefined;

      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;
      return unzipWith(arrays, iteratee);
    });

    /*------------------------------------------------------------------------*/

    /**
     * Creates a `lodash` wrapper instance that wraps `value` with explicit method
     * chain sequences enabled. The result of such sequences must be unwrapped
     * with `_#value`.
     *
     * @static
     * @memberOf _
     * @since 1.3.0
     * @category Seq
     * @param {*} value The value to wrap.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36 },
     *   { 'user': 'fred',    'age': 40 },
     *   { 'user': 'pebbles', 'age': 1 }
     * ];
     *
     * var youngest = _
     *   .chain(users)
     *   .sortBy('age')
     *   .map(function(o) {
     *     return o.user + ' is ' + o.age;
     *   })
     *   .head()
     *   .value();
     * // => 'pebbles is 1'
     */
    function chain(value) {
      var result = lodash(value);
      result.__chain__ = true;
      return result;
    }

    /**
     * This method invokes `interceptor` and returns `value`. The interceptor
     * is invoked with one argument; (value). The purpose of this method is to
     * "tap into" a method chain sequence in order to modify intermediate results.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Seq
     * @param {*} value The value to provide to `interceptor`.
     * @param {Function} interceptor The function to invoke.
     * @returns {*} Returns `value`.
     * @example
     *
     * _([1, 2, 3])
     *  .tap(function(array) {
     *    // Mutate input array.
     *    array.pop();
     *  })
     *  .reverse()
     *  .value();
     * // => [2, 1]
     */
    function tap(value, interceptor) {
      interceptor(value);
      return value;
    }

    /**
     * This method is like `_.tap` except that it returns the result of `interceptor`.
     * The purpose of this method is to "pass thru" values replacing intermediate
     * results in a method chain sequence.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Seq
     * @param {*} value The value to provide to `interceptor`.
     * @param {Function} interceptor The function to invoke.
     * @returns {*} Returns the result of `interceptor`.
     * @example
     *
     * _('  abc  ')
     *  .chain()
     *  .trim()
     *  .thru(function(value) {
     *    return [value];
     *  })
     *  .value();
     * // => ['abc']
     */
    function thru(value, interceptor) {
      return interceptor(value);
    }

    /**
     * This method is the wrapper version of `_.at`.
     *
     * @name at
     * @memberOf _
     * @since 1.0.0
     * @category Seq
     * @param {...(string|string[])} [paths] The property paths to pick.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
     *
     * _(object).at(['a[0].b.c', 'a[1]']).value();
     * // => [3, 4]
     */
    var wrapperAt = flatRest(function(paths) {
      var length = paths.length,
          start = length ? paths[0] : 0,
          value = this.__wrapped__,
          interceptor = function(object) { return baseAt(object, paths); };

      if (length > 1 || this.__actions__.length ||
          !(value instanceof LazyWrapper) || !isIndex(start)) {
        return this.thru(interceptor);
      }
      value = value.slice(start, +start + (length ? 1 : 0));
      value.__actions__.push({
        'func': thru,
        'args': [interceptor],
        'thisArg': undefined
      });
      return new LodashWrapper(value, this.__chain__).thru(function(array) {
        if (length && !array.length) {
          array.push(undefined);
        }
        return array;
      });
    });

    /**
     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.
     *
     * @name chain
     * @memberOf _
     * @since 0.1.0
     * @category Seq
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36 },
     *   { 'user': 'fred',   'age': 40 }
     * ];
     *
     * // A sequence without explicit chaining.
     * _(users).head();
     * // => { 'user': 'barney', 'age': 36 }
     *
     * // A sequence with explicit chaining.
     * _(users)
     *   .chain()
     *   .head()
     *   .pick('user')
     *   .value();
     * // => { 'user': 'barney' }
     */
    function wrapperChain() {
      return chain(this);
    }

    /**
     * Executes the chain sequence and returns the wrapped result.
     *
     * @name commit
     * @memberOf _
     * @since 3.2.0
     * @category Seq
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var array = [1, 2];
     * var wrapped = _(array).push(3);
     *
     * console.log(array);
     * // => [1, 2]
     *
     * wrapped = wrapped.commit();
     * console.log(array);
     * // => [1, 2, 3]
     *
     * wrapped.last();
     * // => 3
     *
     * console.log(array);
     * // => [1, 2, 3]
     */
    function wrapperCommit() {
      return new LodashWrapper(this.value(), this.__chain__);
    }

    /**
     * Gets the next value on a wrapped object following the
     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).
     *
     * @name next
     * @memberOf _
     * @since 4.0.0
     * @category Seq
     * @returns {Object} Returns the next iterator value.
     * @example
     *
     * var wrapped = _([1, 2]);
     *
     * wrapped.next();
     * // => { 'done': false, 'value': 1 }
     *
     * wrapped.next();
     * // => { 'done': false, 'value': 2 }
     *
     * wrapped.next();
     * // => { 'done': true, 'value': undefined }
     */
    function wrapperNext() {
      if (this.__values__ === undefined) {
        this.__values__ = toArray(this.value());
      }
      var done = this.__index__ >= this.__values__.length,
          value = done ? undefined : this.__values__[this.__index__++];

      return { 'done': done, 'value': value };
    }

    /**
     * Enables the wrapper to be iterable.
     *
     * @name Symbol.iterator
     * @memberOf _
     * @since 4.0.0
     * @category Seq
     * @returns {Object} Returns the wrapper object.
     * @example
     *
     * var wrapped = _([1, 2]);
     *
     * wrapped[Symbol.iterator]() === wrapped;
     * // => true
     *
     * Array.from(wrapped);
     * // => [1, 2]
     */
    function wrapperToIterator() {
      return this;
    }

    /**
     * Creates a clone of the chain sequence planting `value` as the wrapped value.
     *
     * @name plant
     * @memberOf _
     * @since 3.2.0
     * @category Seq
     * @param {*} value The value to plant.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var wrapped = _([1, 2]).map(square);
     * var other = wrapped.plant([3, 4]);
     *
     * other.value();
     * // => [9, 16]
     *
     * wrapped.value();
     * // => [1, 4]
     */
    function wrapperPlant(value) {
      var result,
          parent = this;

      while (parent instanceof baseLodash) {
        var clone = wrapperClone(parent);
        clone.__index__ = 0;
        clone.__values__ = undefined;
        if (result) {
          previous.__wrapped__ = clone;
        } else {
          result = clone;
        }
        var previous = clone;
        parent = parent.__wrapped__;
      }
      previous.__wrapped__ = value;
      return result;
    }

    /**
     * This method is the wrapper version of `_.reverse`.
     *
     * **Note:** This method mutates the wrapped array.
     *
     * @name reverse
     * @memberOf _
     * @since 0.1.0
     * @category Seq
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var array = [1, 2, 3];
     *
     * _(array).reverse().value()
     * // => [3, 2, 1]
     *
     * console.log(array);
     * // => [3, 2, 1]
     */
    function wrapperReverse() {
      var value = this.__wrapped__;
      if (value instanceof LazyWrapper) {
        var wrapped = value;
        if (this.__actions__.length) {
          wrapped = new LazyWrapper(this);
        }
        wrapped = wrapped.reverse();
        wrapped.__actions__.push({
          'func': thru,
          'args': [reverse],
          'thisArg': undefined
        });
        return new LodashWrapper(wrapped, this.__chain__);
      }
      return this.thru(reverse);
    }

    /**
     * Executes the chain sequence to resolve the unwrapped value.
     *
     * @name value
     * @memberOf _
     * @since 0.1.0
     * @alias toJSON, valueOf
     * @category Seq
     * @returns {*} Returns the resolved unwrapped value.
     * @example
     *
     * _([1, 2, 3]).value();
     * // => [1, 2, 3]
     */
    function wrapperValue() {
      return baseWrapperValue(this.__wrapped__, this.__actions__);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Creates an object composed of keys generated from the results of running
     * each element of `collection` thru `iteratee`. The corresponding value of
     * each key is the number of times the key was returned by `iteratee`. The
     * iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 0.5.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
     * @returns {Object} Returns the composed aggregate object.
     * @example
     *
     * _.countBy([6.1, 4.2, 6.3], Math.floor);
     * // => { '4': 1, '6': 2 }
     *
     * // The `_.property` iteratee shorthand.
     * _.countBy(['one', 'two', 'three'], 'length');
     * // => { '3': 2, '5': 1 }
     */
    var countBy = createAggregator(function(result, value, key) {
      if (hasOwnProperty.call(result, key)) {
        ++result[key];
      } else {
        baseAssignValue(result, key, 1);
      }
    });

    /**
     * Checks if `predicate` returns truthy for **all** elements of `collection`.
     * Iteration is stopped once `predicate` returns falsey. The predicate is
     * invoked with three arguments: (value, index|key, collection).
     *
     * **Note:** This method returns `true` for
     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
     * elements of empty collections.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {boolean} Returns `true` if all elements pass the predicate check,
     *  else `false`.
     * @example
     *
     * _.every([true, 1, null, 'yes'], Boolean);
     * // => false
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': false },
     *   { 'user': 'fred',   'age': 40, 'active': false }
     * ];
     *
     * // The `_.matches` iteratee shorthand.
     * _.every(users, { 'user': 'barney', 'active': false });
     * // => false
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.every(users, ['active', false]);
     * // => true
     *
     * // The `_.property` iteratee shorthand.
     * _.every(users, 'active');
     * // => false
     */
    function every(collection, predicate, guard) {
      var func = isArray(collection) ? arrayEvery : baseEvery;
      if (guard && isIterateeCall(collection, predicate, guard)) {
        predicate = undefined;
      }
      return func(collection, getIteratee(predicate, 3));
    }

    /**
     * Iterates over elements of `collection`, returning an array of all elements
     * `predicate` returns truthy for. The predicate is invoked with three
     * arguments: (value, index|key, collection).
     *
     * **Note:** Unlike `_.remove`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     * @see _.reject
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': true },
     *   { 'user': 'fred',   'age': 40, 'active': false }
     * ];
     *
     * _.filter(users, function(o) { return !o.active; });
     * // => objects for ['fred']
     *
     * // The `_.matches` iteratee shorthand.
     * _.filter(users, { 'age': 36, 'active': true });
     * // => objects for ['barney']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.filter(users, ['active', false]);
     * // => objects for ['fred']
     *
     * // The `_.property` iteratee shorthand.
     * _.filter(users, 'active');
     * // => objects for ['barney']
     *
     * // Combining several predicates using `_.overEvery` or `_.overSome`.
     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
     * // => objects for ['fred', 'barney']
     */
    function filter(collection, predicate) {
      var func = isArray(collection) ? arrayFilter : baseFilter;
      return func(collection, getIteratee(predicate, 3));
    }

    /**
     * Iterates over elements of `collection`, returning the first element
     * `predicate` returns truthy for. The predicate is invoked with three
     * arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {*} Returns the matched element, else `undefined`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36, 'active': true },
     *   { 'user': 'fred',    'age': 40, 'active': false },
     *   { 'user': 'pebbles', 'age': 1,  'active': true }
     * ];
     *
     * _.find(users, function(o) { return o.age < 40; });
     * // => object for 'barney'
     *
     * // The `_.matches` iteratee shorthand.
     * _.find(users, { 'age': 1, 'active': true });
     * // => object for 'pebbles'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.find(users, ['active', false]);
     * // => object for 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.find(users, 'active');
     * // => object for 'barney'
     */
    var find = createFind(findIndex);

    /**
     * This method is like `_.find` except that it iterates over elements of
     * `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=collection.length-1] The index to search from.
     * @returns {*} Returns the matched element, else `undefined`.
     * @example
     *
     * _.findLast([1, 2, 3, 4], function(n) {
     *   return n % 2 == 1;
     * });
     * // => 3
     */
    var findLast = createFind(findLastIndex);

    /**
     * Creates a flattened array of values by running each element in `collection`
     * thru `iteratee` and flattening the mapped results. The iteratee is invoked
     * with three arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * function duplicate(n) {
     *   return [n, n];
     * }
     *
     * _.flatMap([1, 2], duplicate);
     * // => [1, 1, 2, 2]
     */
    function flatMap(collection, iteratee) {
      return baseFlatten(map(collection, iteratee), 1);
    }

    /**
     * This method is like `_.flatMap` except that it recursively flattens the
     * mapped results.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * function duplicate(n) {
     *   return [[[n, n]]];
     * }
     *
     * _.flatMapDeep([1, 2], duplicate);
     * // => [1, 1, 2, 2]
     */
    function flatMapDeep(collection, iteratee) {
      return baseFlatten(map(collection, iteratee), INFINITY);
    }

    /**
     * This method is like `_.flatMap` except that it recursively flattens the
     * mapped results up to `depth` times.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {number} [depth=1] The maximum recursion depth.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * function duplicate(n) {
     *   return [[[n, n]]];
     * }
     *
     * _.flatMapDepth([1, 2], duplicate, 2);
     * // => [[1, 1], [2, 2]]
     */
    function flatMapDepth(collection, iteratee, depth) {
      depth = depth === undefined ? 1 : toInteger(depth);
      return baseFlatten(map(collection, iteratee), depth);
    }

    /**
     * Iterates over elements of `collection` and invokes `iteratee` for each element.
     * The iteratee is invoked with three arguments: (value, index|key, collection).
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * **Note:** As with other "Collections" methods, objects with a "length"
     * property are iterated like arrays. To avoid this behavior use `_.forIn`
     * or `_.forOwn` for object iteration.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @alias each
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     * @see _.forEachRight
     * @example
     *
     * _.forEach([1, 2], function(value) {
     *   console.log(value);
     * });
     * // => Logs `1` then `2`.
     *
     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
     */
    function forEach(collection, iteratee) {
      var func = isArray(collection) ? arrayEach : baseEach;
      return func(collection, getIteratee(iteratee, 3));
    }

    /**
     * This method is like `_.forEach` except that it iterates over elements of
     * `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @alias eachRight
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     * @see _.forEach
     * @example
     *
     * _.forEachRight([1, 2], function(value) {
     *   console.log(value);
     * });
     * // => Logs `2` then `1`.
     */
    function forEachRight(collection, iteratee) {
      var func = isArray(collection) ? arrayEachRight : baseEachRight;
      return func(collection, getIteratee(iteratee, 3));
    }

    /**
     * Creates an object composed of keys generated from the results of running
     * each element of `collection` thru `iteratee`. The order of grouped values
     * is determined by the order they occur in `collection`. The corresponding
     * value of each key is an array of elements responsible for generating the
     * key. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
     * @returns {Object} Returns the composed aggregate object.
     * @example
     *
     * _.groupBy([6.1, 4.2, 6.3], Math.floor);
     * // => { '4': [4.2], '6': [6.1, 6.3] }
     *
     * // The `_.property` iteratee shorthand.
     * _.groupBy(['one', 'two', 'three'], 'length');
     * // => { '3': ['one', 'two'], '5': ['three'] }
     */
    var groupBy = createAggregator(function(result, value, key) {
      if (hasOwnProperty.call(result, key)) {
        result[key].push(value);
      } else {
        baseAssignValue(result, key, [value]);
      }
    });

    /**
     * Checks if `value` is in `collection`. If `collection` is a string, it's
     * checked for a substring of `value`, otherwise
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * is used for equality comparisons. If `fromIndex` is negative, it's used as
     * the offset from the end of `collection`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object|string} collection The collection to inspect.
     * @param {*} value The value to search for.
     * @param {number} [fromIndex=0] The index to search from.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
     * @returns {boolean} Returns `true` if `value` is found, else `false`.
     * @example
     *
     * _.includes([1, 2, 3], 1);
     * // => true
     *
     * _.includes([1, 2, 3], 1, 2);
     * // => false
     *
     * _.includes({ 'a': 1, 'b': 2 }, 1);
     * // => true
     *
     * _.includes('abcd', 'bc');
     * // => true
     */
    function includes(collection, value, fromIndex, guard) {
      collection = isArrayLike(collection) ? collection : values(collection);
      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;

      var length = collection.length;
      if (fromIndex < 0) {
        fromIndex = nativeMax(length + fromIndex, 0);
      }
      return isString(collection)
        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);
    }

    /**
     * Invokes the method at `path` of each element in `collection`, returning
     * an array of the results of each invoked method. Any additional arguments
     * are provided to each invoked method. If `path` is a function, it's invoked
     * for, and `this` bound to, each element in `collection`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Array|Function|string} path The path of the method to invoke or
     *  the function invoked per iteration.
     * @param {...*} [args] The arguments to invoke each method with.
     * @returns {Array} Returns the array of results.
     * @example
     *
     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
     * // => [[1, 5, 7], [1, 2, 3]]
     *
     * _.invokeMap([123, 456], String.prototype.split, '');
     * // => [['1', '2', '3'], ['4', '5', '6']]
     */
    var invokeMap = baseRest(function(collection, path, args) {
      var index = -1,
          isFunc = typeof path == 'function',
          result = isArrayLike(collection) ? Array(collection.length) : [];

      baseEach(collection, function(value) {
        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
      });
      return result;
    });

    /**
     * Creates an object composed of keys generated from the results of running
     * each element of `collection` thru `iteratee`. The corresponding value of
     * each key is the last element responsible for generating the key. The
     * iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
     * @returns {Object} Returns the composed aggregate object.
     * @example
     *
     * var array = [
     *   { 'dir': 'left', 'code': 97 },
     *   { 'dir': 'right', 'code': 100 }
     * ];
     *
     * _.keyBy(array, function(o) {
     *   return String.fromCharCode(o.code);
     * });
     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
     *
     * _.keyBy(array, 'dir');
     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
     */
    var keyBy = createAggregator(function(result, value, key) {
      baseAssignValue(result, key, value);
    });

    /**
     * Creates an array of values by running each element in `collection` thru
     * `iteratee`. The iteratee is invoked with three arguments:
     * (value, index|key, collection).
     *
     * Many lodash methods are guarded to work as iteratees for methods like
     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
     *
     * The guarded methods are:
     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new mapped array.
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * _.map([4, 8], square);
     * // => [16, 64]
     *
     * _.map({ 'a': 4, 'b': 8 }, square);
     * // => [16, 64] (iteration order is not guaranteed)
     *
     * var users = [
     *   { 'user': 'barney' },
     *   { 'user': 'fred' }
     * ];
     *
     * // The `_.property` iteratee shorthand.
     * _.map(users, 'user');
     * // => ['barney', 'fred']
     */
    function map(collection, iteratee) {
      var func = isArray(collection) ? arrayMap : baseMap;
      return func(collection, getIteratee(iteratee, 3));
    }

    /**
     * This method is like `_.sortBy` except that it allows specifying the sort
     * orders of the iteratees to sort by. If `orders` is unspecified, all values
     * are sorted in ascending order. Otherwise, specify an order of "desc" for
     * descending or "asc" for ascending sort order of corresponding values.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]
     *  The iteratees to sort by.
     * @param {string[]} [orders] The sort orders of `iteratees`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
     * @returns {Array} Returns the new sorted array.
     * @example
     *
     * var users = [
     *   { 'user': 'fred',   'age': 48 },
     *   { 'user': 'barney', 'age': 34 },
     *   { 'user': 'fred',   'age': 40 },
     *   { 'user': 'barney', 'age': 36 }
     * ];
     *
     * // Sort by `user` in ascending order and by `age` in descending order.
     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
     */
    function orderBy(collection, iteratees, orders, guard) {
      if (collection == null) {
        return [];
      }
      if (!isArray(iteratees)) {
        iteratees = iteratees == null ? [] : [iteratees];
      }
      orders = guard ? undefined : orders;
      if (!isArray(orders)) {
        orders = orders == null ? [] : [orders];
      }
      return baseOrderBy(collection, iteratees, orders);
    }

    /**
     * Creates an array of elements split into two groups, the first of which
     * contains elements `predicate` returns truthy for, the second of which
     * contains elements `predicate` returns falsey for. The predicate is
     * invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the array of grouped elements.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36, 'active': false },
     *   { 'user': 'fred',    'age': 40, 'active': true },
     *   { 'user': 'pebbles', 'age': 1,  'active': false }
     * ];
     *
     * _.partition(users, function(o) { return o.active; });
     * // => objects for [['fred'], ['barney', 'pebbles']]
     *
     * // The `_.matches` iteratee shorthand.
     * _.partition(users, { 'age': 1, 'active': false });
     * // => objects for [['pebbles'], ['barney', 'fred']]
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.partition(users, ['active', false]);
     * // => objects for [['barney', 'pebbles'], ['fred']]
     *
     * // The `_.property` iteratee shorthand.
     * _.partition(users, 'active');
     * // => objects for [['fred'], ['barney', 'pebbles']]
     */
    var partition = createAggregator(function(result, value, key) {
      result[key ? 0 : 1].push(value);
    }, function() { return [[], []]; });

    /**
     * Reduces `collection` to a value which is the accumulated result of running
     * each element in `collection` thru `iteratee`, where each successive
     * invocation is supplied the return value of the previous. If `accumulator`
     * is not given, the first element of `collection` is used as the initial
     * value. The iteratee is invoked with four arguments:
     * (accumulator, value, index|key, collection).
     *
     * Many lodash methods are guarded to work as iteratees for methods like
     * `_.reduce`, `_.reduceRight`, and `_.transform`.
     *
     * The guarded methods are:
     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
     * and `sortBy`
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {*} [accumulator] The initial value.
     * @returns {*} Returns the accumulated value.
     * @see _.reduceRight
     * @example
     *
     * _.reduce([1, 2], function(sum, n) {
     *   return sum + n;
     * }, 0);
     * // => 3
     *
     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
     *   (result[value] || (result[value] = [])).push(key);
     *   return result;
     * }, {});
     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
     */
    function reduce(collection, iteratee, accumulator) {
      var func = isArray(collection) ? arrayReduce : baseReduce,
          initAccum = arguments.length < 3;

      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);
    }

    /**
     * This method is like `_.reduce` except that it iterates over elements of
     * `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {*} [accumulator] The initial value.
     * @returns {*} Returns the accumulated value.
     * @see _.reduce
     * @example
     *
     * var array = [[0, 1], [2, 3], [4, 5]];
     *
     * _.reduceRight(array, function(flattened, other) {
     *   return flattened.concat(other);
     * }, []);
     * // => [4, 5, 2, 3, 0, 1]
     */
    function reduceRight(collection, iteratee, accumulator) {
      var func = isArray(collection) ? arrayReduceRight : baseReduce,
          initAccum = arguments.length < 3;

      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
    }

    /**
     * The opposite of `_.filter`; this method returns the elements of `collection`
     * that `predicate` does **not** return truthy for.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     * @see _.filter
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': false },
     *   { 'user': 'fred',   'age': 40, 'active': true }
     * ];
     *
     * _.reject(users, function(o) { return !o.active; });
     * // => objects for ['fred']
     *
     * // The `_.matches` iteratee shorthand.
     * _.reject(users, { 'age': 40, 'active': true });
     * // => objects for ['barney']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.reject(users, ['active', false]);
     * // => objects for ['fred']
     *
     * // The `_.property` iteratee shorthand.
     * _.reject(users, 'active');
     * // => objects for ['barney']
     */
    function reject(collection, predicate) {
      var func = isArray(collection) ? arrayFilter : baseFilter;
      return func(collection, negate(getIteratee(predicate, 3)));
    }

    /**
     * Gets a random element from `collection`.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to sample.
     * @returns {*} Returns the random element.
     * @example
     *
     * _.sample([1, 2, 3, 4]);
     * // => 2
     */
    function sample(collection) {
      var func = isArray(collection) ? arraySample : baseSample;
      return func(collection);
    }

    /**
     * Gets `n` random elements at unique keys from `collection` up to the
     * size of `collection`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to sample.
     * @param {number} [n=1] The number of elements to sample.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the random elements.
     * @example
     *
     * _.sampleSize([1, 2, 3], 2);
     * // => [3, 1]
     *
     * _.sampleSize([1, 2, 3], 4);
     * // => [2, 3, 1]
     */
    function sampleSize(collection, n, guard) {
      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {
        n = 1;
      } else {
        n = toInteger(n);
      }
      var func = isArray(collection) ? arraySampleSize : baseSampleSize;
      return func(collection, n);
    }

    /**
     * Creates an array of shuffled values, using a version of the
     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to shuffle.
     * @returns {Array} Returns the new shuffled array.
     * @example
     *
     * _.shuffle([1, 2, 3, 4]);
     * // => [4, 1, 3, 2]
     */
    function shuffle(collection) {
      var func = isArray(collection) ? arrayShuffle : baseShuffle;
      return func(collection);
    }

    /**
     * Gets the size of `collection` by returning its length for array-like
     * values or the number of own enumerable string keyed properties for objects.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object|string} collection The collection to inspect.
     * @returns {number} Returns the collection size.
     * @example
     *
     * _.size([1, 2, 3]);
     * // => 3
     *
     * _.size({ 'a': 1, 'b': 2 });
     * // => 2
     *
     * _.size('pebbles');
     * // => 7
     */
    function size(collection) {
      if (collection == null) {
        return 0;
      }
      if (isArrayLike(collection)) {
        return isString(collection) ? stringSize(collection) : collection.length;
      }
      var tag = getTag(collection);
      if (tag == mapTag || tag == setTag) {
        return collection.size;
      }
      return baseKeys(collection).length;
    }

    /**
     * Checks if `predicate` returns truthy for **any** element of `collection`.
     * Iteration is stopped once `predicate` returns truthy. The predicate is
     * invoked with three arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {boolean} Returns `true` if any element passes the predicate check,
     *  else `false`.
     * @example
     *
     * _.some([null, 0, 'yes', false], Boolean);
     * // => true
     *
     * var users = [
     *   { 'user': 'barney', 'active': true },
     *   { 'user': 'fred',   'active': false }
     * ];
     *
     * // The `_.matches` iteratee shorthand.
     * _.some(users, { 'user': 'barney', 'active': false });
     * // => false
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.some(users, ['active', false]);
     * // => true
     *
     * // The `_.property` iteratee shorthand.
     * _.some(users, 'active');
     * // => true
     */
    function some(collection, predicate, guard) {
      var func = isArray(collection) ? arraySome : baseSome;
      if (guard && isIterateeCall(collection, predicate, guard)) {
        predicate = undefined;
      }
      return func(collection, getIteratee(predicate, 3));
    }

    /**
     * Creates an array of elements, sorted in ascending order by the results of
     * running each element in a collection thru each iteratee. This method
     * performs a stable sort, that is, it preserves the original sort order of
     * equal elements. The iteratees are invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {...(Function|Function[])} [iteratees=[_.identity]]
     *  The iteratees to sort by.
     * @returns {Array} Returns the new sorted array.
     * @example
     *
     * var users = [
     *   { 'user': 'fred',   'age': 48 },
     *   { 'user': 'barney', 'age': 36 },
     *   { 'user': 'fred',   'age': 30 },
     *   { 'user': 'barney', 'age': 34 }
     * ];
     *
     * _.sortBy(users, [function(o) { return o.user; }]);
     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
     *
     * _.sortBy(users, ['user', 'age']);
     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
     */
    var sortBy = baseRest(function(collection, iteratees) {
      if (collection == null) {
        return [];
      }
      var length = iteratees.length;
      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
        iteratees = [];
      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
        iteratees = [iteratees[0]];
      }
      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
    });

    /*------------------------------------------------------------------------*/

    /**
     * Gets the timestamp of the number of milliseconds that have elapsed since
     * the Unix epoch (1 January 1970 00:00:00 UTC).
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Date
     * @returns {number} Returns the timestamp.
     * @example
     *
     * _.defer(function(stamp) {
     *   console.log(_.now() - stamp);
     * }, _.now());
     * // => Logs the number of milliseconds it took for the deferred invocation.
     */
    var now = ctxNow || function() {
      return root.Date.now();
    };

    /*------------------------------------------------------------------------*/

    /**
     * The opposite of `_.before`; this method creates a function that invokes
     * `func` once it's called `n` or more times.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {number} n The number of calls before `func` is invoked.
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new restricted function.
     * @example
     *
     * var saves = ['profile', 'settings'];
     *
     * var done = _.after(saves.length, function() {
     *   console.log('done saving!');
     * });
     *
     * _.forEach(saves, function(type) {
     *   asyncSave({ 'type': type, 'complete': done });
     * });
     * // => Logs 'done saving!' after the two async saves have completed.
     */
    function after(n, func) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      n = toInteger(n);
      return function() {
        if (--n < 1) {
          return func.apply(this, arguments);
        }
      };
    }

    /**
     * Creates a function that invokes `func`, with up to `n` arguments,
     * ignoring any additional arguments.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} func The function to cap arguments for.
     * @param {number} [n=func.length] The arity cap.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new capped function.
     * @example
     *
     * _.map(['6', '8', '10'], _.ary(parseInt, 1));
     * // => [6, 8, 10]
     */
    function ary(func, n, guard) {
      n = guard ? undefined : n;
      n = (func && n == null) ? func.length : n;
      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
    }

    /**
     * Creates a function that invokes `func`, with the `this` binding and arguments
     * of the created function, while it's called less than `n` times. Subsequent
     * calls to the created function return the result of the last `func` invocation.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {number} n The number of calls at which `func` is no longer invoked.
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new restricted function.
     * @example
     *
     * jQuery(element).on('click', _.before(5, addContactToList));
     * // => Allows adding up to 4 contacts to the list.
     */
    function before(n, func) {
      var result;
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      n = toInteger(n);
      return function() {
        if (--n > 0) {
          result = func.apply(this, arguments);
        }
        if (n <= 1) {
          func = undefined;
        }
        return result;
      };
    }

    /**
     * Creates a function that invokes `func` with the `this` binding of `thisArg`
     * and `partials` prepended to the arguments it receives.
     *
     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
     * may be used as a placeholder for partially applied arguments.
     *
     * **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
     * property of bound functions.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to bind.
     * @param {*} thisArg The `this` binding of `func`.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new bound function.
     * @example
     *
     * function greet(greeting, punctuation) {
     *   return greeting + ' ' + this.user + punctuation;
     * }
     *
     * var object = { 'user': 'fred' };
     *
     * var bound = _.bind(greet, object, 'hi');
     * bound('!');
     * // => 'hi fred!'
     *
     * // Bound with placeholders.
     * var bound = _.bind(greet, object, _, '!');
     * bound('hi');
     * // => 'hi fred!'
     */
    var bind = baseRest(function(func, thisArg, partials) {
      var bitmask = WRAP_BIND_FLAG;
      if (partials.length) {
        var holders = replaceHolders(partials, getHolder(bind));
        bitmask |= WRAP_PARTIAL_FLAG;
      }
      return createWrap(func, bitmask, thisArg, partials, holders);
    });

    /**
     * Creates a function that invokes the method at `object[key]` with `partials`
     * prepended to the arguments it receives.
     *
     * This method differs from `_.bind` by allowing bound functions to reference
     * methods that may be redefined or don't yet exist. See
     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
     * for more details.
     *
     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for partially applied arguments.
     *
     * @static
     * @memberOf _
     * @since 0.10.0
     * @category Function
     * @param {Object} object The object to invoke the method on.
     * @param {string} key The key of the method.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new bound function.
     * @example
     *
     * var object = {
     *   'user': 'fred',
     *   'greet': function(greeting, punctuation) {
     *     return greeting + ' ' + this.user + punctuation;
     *   }
     * };
     *
     * var bound = _.bindKey(object, 'greet', 'hi');
     * bound('!');
     * // => 'hi fred!'
     *
     * object.greet = function(greeting, punctuation) {
     *   return greeting + 'ya ' + this.user + punctuation;
     * };
     *
     * bound('!');
     * // => 'hiya fred!'
     *
     * // Bound with placeholders.
     * var bound = _.bindKey(object, 'greet', _, '!');
     * bound('hi');
     * // => 'hiya fred!'
     */
    var bindKey = baseRest(function(object, key, partials) {
      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
      if (partials.length) {
        var holders = replaceHolders(partials, getHolder(bindKey));
        bitmask |= WRAP_PARTIAL_FLAG;
      }
      return createWrap(key, bitmask, object, partials, holders);
    });

    /**
     * Creates a function that accepts arguments of `func` and either invokes
     * `func` returning its result, if at least `arity` number of arguments have
     * been provided, or returns a function that accepts the remaining `func`
     * arguments, and so on. The arity of `func` may be specified if `func.length`
     * is not sufficient.
     *
     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
     * may be used as a placeholder for provided arguments.
     *
     * **Note:** This method doesn't set the "length" property of curried functions.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Function
     * @param {Function} func The function to curry.
     * @param {number} [arity=func.length] The arity of `func`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new curried function.
     * @example
     *
     * var abc = function(a, b, c) {
     *   return [a, b, c];
     * };
     *
     * var curried = _.curry(abc);
     *
     * curried(1)(2)(3);
     * // => [1, 2, 3]
     *
     * curried(1, 2)(3);
     * // => [1, 2, 3]
     *
     * curried(1, 2, 3);
     * // => [1, 2, 3]
     *
     * // Curried with placeholders.
     * curried(1)(_, 3)(2);
     * // => [1, 2, 3]
     */
    function curry(func, arity, guard) {
      arity = guard ? undefined : arity;
      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
      result.placeholder = curry.placeholder;
      return result;
    }

    /**
     * This method is like `_.curry` except that arguments are applied to `func`
     * in the manner of `_.partialRight` instead of `_.partial`.
     *
     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for provided arguments.
     *
     * **Note:** This method doesn't set the "length" property of curried functions.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} func The function to curry.
     * @param {number} [arity=func.length] The arity of `func`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new curried function.
     * @example
     *
     * var abc = function(a, b, c) {
     *   return [a, b, c];
     * };
     *
     * var curried = _.curryRight(abc);
     *
     * curried(3)(2)(1);
     * // => [1, 2, 3]
     *
     * curried(2, 3)(1);
     * // => [1, 2, 3]
     *
     * curried(1, 2, 3);
     * // => [1, 2, 3]
     *
     * // Curried with placeholders.
     * curried(3)(1, _)(2);
     * // => [1, 2, 3]
     */
    function curryRight(func, arity, guard) {
      arity = guard ? undefined : arity;
      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
      result.placeholder = curryRight.placeholder;
      return result;
    }

    /**
     * Creates a debounced function that delays invoking `func` until after `wait`
     * milliseconds have elapsed since the last time the debounced function was
     * invoked. The debounced function comes with a `cancel` method to cancel
     * delayed `func` invocations and a `flush` method to immediately invoke them.
     * Provide `options` to indicate whether `func` should be invoked on the
     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
     * with the last arguments provided to the debounced function. Subsequent
     * calls to the debounced function return the result of the last `func`
     * invocation.
     *
     * **Note:** If `leading` and `trailing` options are `true`, `func` is
     * invoked on the trailing edge of the timeout only if the debounced function
     * is invoked more than once during the `wait` timeout.
     *
     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
     *
     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
     * for details over the differences between `_.debounce` and `_.throttle`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to debounce.
     * @param {number} [wait=0] The number of milliseconds to delay.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.leading=false]
     *  Specify invoking on the leading edge of the timeout.
     * @param {number} [options.maxWait]
     *  The maximum time `func` is allowed to be delayed before it's invoked.
     * @param {boolean} [options.trailing=true]
     *  Specify invoking on the trailing edge of the timeout.
     * @returns {Function} Returns the new debounced function.
     * @example
     *
     * // Avoid costly calculations while the window size is in flux.
     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
     *
     * // Invoke `sendMail` when clicked, debouncing subsequent calls.
     * jQuery(element).on('click', _.debounce(sendMail, 300, {
     *   'leading': true,
     *   'trailing': false
     * }));
     *
     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
     * var source = new EventSource('/stream');
     * jQuery(source).on('message', debounced);
     *
     * // Cancel the trailing debounced invocation.
     * jQuery(window).on('popstate', debounced.cancel);
     */
    function debounce(func, wait, options) {
      var lastArgs,
          lastThis,
          maxWait,
          result,
          timerId,
          lastCallTime,
          lastInvokeTime = 0,
          leading = false,
          maxing = false,
          trailing = true;

      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      wait = toNumber(wait) || 0;
      if (isObject(options)) {
        leading = !!options.leading;
        maxing = 'maxWait' in options;
        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
        trailing = 'trailing' in options ? !!options.trailing : trailing;
      }

      function invokeFunc(time) {
        var args = lastArgs,
            thisArg = lastThis;

        lastArgs = lastThis = undefined;
        lastInvokeTime = time;
        result = func.apply(thisArg, args);
        return result;
      }

      function leadingEdge(time) {
        // Reset any `maxWait` timer.
        lastInvokeTime = time;
        // Start the timer for the trailing edge.
        timerId = setTimeout(timerExpired, wait);
        // Invoke the leading edge.
        return leading ? invokeFunc(time) : result;
      }

      function remainingWait(time) {
        var timeSinceLastCall = time - lastCallTime,
            timeSinceLastInvoke = time - lastInvokeTime,
            timeWaiting = wait - timeSinceLastCall;

        return maxing
          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
          : timeWaiting;
      }

      function shouldInvoke(time) {
        var timeSinceLastCall = time - lastCallTime,
            timeSinceLastInvoke = time - lastInvokeTime;

        // Either this is the first call, activity has stopped and we're at the
        // trailing edge, the system time has gone backwards and we're treating
        // it as the trailing edge, or we've hit the `maxWait` limit.
        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
      }

      function timerExpired() {
        var time = now();
        if (shouldInvoke(time)) {
          return trailingEdge(time);
        }
        // Restart the timer.
        timerId = setTimeout(timerExpired, remainingWait(time));
      }

      function trailingEdge(time) {
        timerId = undefined;

        // Only invoke if we have `lastArgs` which means `func` has been
        // debounced at least once.
        if (trailing && lastArgs) {
          return invokeFunc(time);
        }
        lastArgs = lastThis = undefined;
        return result;
      }

      function cancel() {
        if (timerId !== undefined) {
          clearTimeout(timerId);
        }
        lastInvokeTime = 0;
        lastArgs = lastCallTime = lastThis = timerId = undefined;
      }

      function flush() {
        return timerId === undefined ? result : trailingEdge(now());
      }

      function debounced() {
        var time = now(),
            isInvoking = shouldInvoke(time);

        lastArgs = arguments;
        lastThis = this;
        lastCallTime = time;

        if (isInvoking) {
          if (timerId === undefined) {
            return leadingEdge(lastCallTime);
          }
          if (maxing) {
            // Handle invocations in a tight loop.
            clearTimeout(timerId);
            timerId = setTimeout(timerExpired, wait);
            return invokeFunc(lastCallTime);
          }
        }
        if (timerId === undefined) {
          timerId = setTimeout(timerExpired, wait);
        }
        return result;
      }
      debounced.cancel = cancel;
      debounced.flush = flush;
      return debounced;
    }

    /**
     * Defers invoking the `func` until the current call stack has cleared. Any
     * additional arguments are provided to `func` when it's invoked.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to defer.
     * @param {...*} [args] The arguments to invoke `func` with.
     * @returns {number} Returns the timer id.
     * @example
     *
     * _.defer(function(text) {
     *   console.log(text);
     * }, 'deferred');
     * // => Logs 'deferred' after one millisecond.
     */
    var defer = baseRest(function(func, args) {
      return baseDelay(func, 1, args);
    });

    /**
     * Invokes `func` after `wait` milliseconds. Any additional arguments are
     * provided to `func` when it's invoked.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to delay.
     * @param {number} wait The number of milliseconds to delay invocation.
     * @param {...*} [args] The arguments to invoke `func` with.
     * @returns {number} Returns the timer id.
     * @example
     *
     * _.delay(function(text) {
     *   console.log(text);
     * }, 1000, 'later');
     * // => Logs 'later' after one second.
     */
    var delay = baseRest(function(func, wait, args) {
      return baseDelay(func, toNumber(wait) || 0, args);
    });

    /**
     * Creates a function that invokes `func` with arguments reversed.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Function
     * @param {Function} func The function to flip arguments for.
     * @returns {Function} Returns the new flipped function.
     * @example
     *
     * var flipped = _.flip(function() {
     *   return _.toArray(arguments);
     * });
     *
     * flipped('a', 'b', 'c', 'd');
     * // => ['d', 'c', 'b', 'a']
     */
    function flip(func) {
      return createWrap(func, WRAP_FLIP_FLAG);
    }

    /**
     * Creates a function that memoizes the result of `func`. If `resolver` is
     * provided, it determines the cache key for storing the result based on the
     * arguments provided to the memoized function. By default, the first argument
     * provided to the memoized function is used as the map cache key. The `func`
     * is invoked with the `this` binding of the memoized function.
     *
     * **Note:** The cache is exposed as the `cache` property on the memoized
     * function. Its creation may be customized by replacing the `_.memoize.Cache`
     * constructor with one whose instances implement the
     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
     * method interface of `clear`, `delete`, `get`, `has`, and `set`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to have its output memoized.
     * @param {Function} [resolver] The function to resolve the cache key.
     * @returns {Function} Returns the new memoized function.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     * var other = { 'c': 3, 'd': 4 };
     *
     * var values = _.memoize(_.values);
     * values(object);
     * // => [1, 2]
     *
     * values(other);
     * // => [3, 4]
     *
     * object.a = 2;
     * values(object);
     * // => [1, 2]
     *
     * // Modify the result cache.
     * values.cache.set(object, ['a', 'b']);
     * values(object);
     * // => ['a', 'b']
     *
     * // Replace `_.memoize.Cache`.
     * _.memoize.Cache = WeakMap;
     */
    function memoize(func, resolver) {
      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      var memoized = function() {
        var args = arguments,
            key = resolver ? resolver.apply(this, args) : args[0],
            cache = memoized.cache;

        if (cache.has(key)) {
          return cache.get(key);
        }
        var result = func.apply(this, args);
        memoized.cache = cache.set(key, result) || cache;
        return result;
      };
      memoized.cache = new (memoize.Cache || MapCache);
      return memoized;
    }

    // Expose `MapCache`.
    memoize.Cache = MapCache;

    /**
     * Creates a function that negates the result of the predicate `func`. The
     * `func` predicate is invoked with the `this` binding and arguments of the
     * created function.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} predicate The predicate to negate.
     * @returns {Function} Returns the new negated function.
     * @example
     *
     * function isEven(n) {
     *   return n % 2 == 0;
     * }
     *
     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
     * // => [1, 3, 5]
     */
    function negate(predicate) {
      if (typeof predicate != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      return function() {
        var args = arguments;
        switch (args.length) {
          case 0: return !predicate.call(this);
          case 1: return !predicate.call(this, args[0]);
          case 2: return !predicate.call(this, args[0], args[1]);
          case 3: return !predicate.call(this, args[0], args[1], args[2]);
        }
        return !predicate.apply(this, args);
      };
    }

    /**
     * Creates a function that is restricted to invoking `func` once. Repeat calls
     * to the function return the value of the first invocation. The `func` is
     * invoked with the `this` binding and arguments of the created function.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new restricted function.
     * @example
     *
     * var initialize = _.once(createApplication);
     * initialize();
     * initialize();
     * // => `createApplication` is invoked once
     */
    function once(func) {
      return before(2, func);
    }

    /**
     * Creates a function that invokes `func` with its arguments transformed.
     *
     * @static
     * @since 4.0.0
     * @memberOf _
     * @category Function
     * @param {Function} func The function to wrap.
     * @param {...(Function|Function[])} [transforms=[_.identity]]
     *  The argument transforms.
     * @returns {Function} Returns the new function.
     * @example
     *
     * function doubled(n) {
     *   return n * 2;
     * }
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var func = _.overArgs(function(x, y) {
     *   return [x, y];
     * }, [square, doubled]);
     *
     * func(9, 3);
     * // => [81, 6]
     *
     * func(10, 5);
     * // => [100, 10]
     */
    var overArgs = castRest(function(func, transforms) {
      transforms = (transforms.length == 1 && isArray(transforms[0]))
        ? arrayMap(transforms[0], baseUnary(getIteratee()))
        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));

      var funcsLength = transforms.length;
      return baseRest(function(args) {
        var index = -1,
            length = nativeMin(args.length, funcsLength);

        while (++index < length) {
          args[index] = transforms[index].call(this, args[index]);
        }
        return apply(func, this, args);
      });
    });

    /**
     * Creates a function that invokes `func` with `partials` prepended to the
     * arguments it receives. This method is like `_.bind` except it does **not**
     * alter the `this` binding.
     *
     * The `_.partial.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for partially applied arguments.
     *
     * **Note:** This method doesn't set the "length" property of partially
     * applied functions.
     *
     * @static
     * @memberOf _
     * @since 0.2.0
     * @category Function
     * @param {Function} func The function to partially apply arguments to.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new partially applied function.
     * @example
     *
     * function greet(greeting, name) {
     *   return greeting + ' ' + name;
     * }
     *
     * var sayHelloTo = _.partial(greet, 'hello');
     * sayHelloTo('fred');
     * // => 'hello fred'
     *
     * // Partially applied with placeholders.
     * var greetFred = _.partial(greet, _, 'fred');
     * greetFred('hi');
     * // => 'hi fred'
     */
    var partial = baseRest(function(func, partials) {
      var holders = replaceHolders(partials, getHolder(partial));
      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
    });

    /**
     * This method is like `_.partial` except that partially applied arguments
     * are appended to the arguments it receives.
     *
     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for partially applied arguments.
     *
     * **Note:** This method doesn't set the "length" property of partially
     * applied functions.
     *
     * @static
     * @memberOf _
     * @since 1.0.0
     * @category Function
     * @param {Function} func The function to partially apply arguments to.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new partially applied function.
     * @example
     *
     * function greet(greeting, name) {
     *   return greeting + ' ' + name;
     * }
     *
     * var greetFred = _.partialRight(greet, 'fred');
     * greetFred('hi');
     * // => 'hi fred'
     *
     * // Partially applied with placeholders.
     * var sayHelloTo = _.partialRight(greet, 'hello', _);
     * sayHelloTo('fred');
     * // => 'hello fred'
     */
    var partialRight = baseRest(function(func, partials) {
      var holders = replaceHolders(partials, getHolder(partialRight));
      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
    });

    /**
     * Creates a function that invokes `func` with arguments arranged according
     * to the specified `indexes` where the argument value at the first index is
     * provided as the first argument, the argument value at the second index is
     * provided as the second argument, and so on.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} func The function to rearrange arguments for.
     * @param {...(number|number[])} indexes The arranged argument indexes.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var rearged = _.rearg(function(a, b, c) {
     *   return [a, b, c];
     * }, [2, 0, 1]);
     *
     * rearged('b', 'c', 'a')
     * // => ['a', 'b', 'c']
     */
    var rearg = flatRest(function(func, indexes) {
      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
    });

    /**
     * Creates a function that invokes `func` with the `this` binding of the
     * created function and arguments from `start` and beyond provided as
     * an array.
     *
     * **Note:** This method is based on the
     * [rest parameter](https://mdn.io/rest_parameters).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Function
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var say = _.rest(function(what, names) {
     *   return what + ' ' + _.initial(names).join(', ') +
     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);
     * });
     *
     * say('hello', 'fred', 'barney', 'pebbles');
     * // => 'hello fred, barney, & pebbles'
     */
    function rest(func, start) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      start = start === undefined ? start : toInteger(start);
      return baseRest(func, start);
    }

    /**
     * Creates a function that invokes `func` with the `this` binding of the
     * create function and an array of arguments much like
     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).
     *
     * **Note:** This method is based on the
     * [spread operator](https://mdn.io/spread_operator).
     *
     * @static
     * @memberOf _
     * @since 3.2.0
     * @category Function
     * @param {Function} func The function to spread arguments over.
     * @param {number} [start=0] The start position of the spread.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var say = _.spread(function(who, what) {
     *   return who + ' says ' + what;
     * });
     *
     * say(['fred', 'hello']);
     * // => 'fred says hello'
     *
     * var numbers = Promise.all([
     *   Promise.resolve(40),
     *   Promise.resolve(36)
     * ]);
     *
     * numbers.then(_.spread(function(x, y) {
     *   return x + y;
     * }));
     * // => a Promise of 76
     */
    function spread(func, start) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      start = start == null ? 0 : nativeMax(toInteger(start), 0);
      return baseRest(function(args) {
        var array = args[start],
            otherArgs = castSlice(args, 0, start);

        if (array) {
          arrayPush(otherArgs, array);
        }
        return apply(func, this, otherArgs);
      });
    }

    /**
     * Creates a throttled function that only invokes `func` at most once per
     * every `wait` milliseconds. The throttled function comes with a `cancel`
     * method to cancel delayed `func` invocations and a `flush` method to
     * immediately invoke them. Provide `options` to indicate whether `func`
     * should be invoked on the leading and/or trailing edge of the `wait`
     * timeout. The `func` is invoked with the last arguments provided to the
     * throttled function. Subsequent calls to the throttled function return the
     * result of the last `func` invocation.
     *
     * **Note:** If `leading` and `trailing` options are `true`, `func` is
     * invoked on the trailing edge of the timeout only if the throttled function
     * is invoked more than once during the `wait` timeout.
     *
     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
     *
     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
     * for details over the differences between `_.throttle` and `_.debounce`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to throttle.
     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.leading=true]
     *  Specify invoking on the leading edge of the timeout.
     * @param {boolean} [options.trailing=true]
     *  Specify invoking on the trailing edge of the timeout.
     * @returns {Function} Returns the new throttled function.
     * @example
     *
     * // Avoid excessively updating the position while scrolling.
     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
     *
     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
     * jQuery(element).on('click', throttled);
     *
     * // Cancel the trailing throttled invocation.
     * jQuery(window).on('popstate', throttled.cancel);
     */
    function throttle(func, wait, options) {
      var leading = true,
          trailing = true;

      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      if (isObject(options)) {
        leading = 'leading' in options ? !!options.leading : leading;
        trailing = 'trailing' in options ? !!options.trailing : trailing;
      }
      return debounce(func, wait, {
        'leading': leading,
        'maxWait': wait,
        'trailing': trailing
      });
    }

    /**
     * Creates a function that accepts up to one argument, ignoring any
     * additional arguments.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Function
     * @param {Function} func The function to cap arguments for.
     * @returns {Function} Returns the new capped function.
     * @example
     *
     * _.map(['6', '8', '10'], _.unary(parseInt));
     * // => [6, 8, 10]
     */
    function unary(func) {
      return ary(func, 1);
    }

    /**
     * Creates a function that provides `value` to `wrapper` as its first
     * argument. Any additional arguments provided to the function are appended
     * to those provided to the `wrapper`. The wrapper is invoked with the `this`
     * binding of the created function.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {*} value The value to wrap.
     * @param {Function} [wrapper=identity] The wrapper function.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var p = _.wrap(_.escape, function(func, text) {
     *   return '<p>' + func(text) + '</p>';
     * });
     *
     * p('fred, barney, & pebbles');
     * // => '<p>fred, barney, &amp; pebbles</p>'
     */
    function wrap(value, wrapper) {
      return partial(castFunction(wrapper), value);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Casts `value` as an array if it's not one.
     *
     * @static
     * @memberOf _
     * @since 4.4.0
     * @category Lang
     * @param {*} value The value to inspect.
     * @returns {Array} Returns the cast array.
     * @example
     *
     * _.castArray(1);
     * // => [1]
     *
     * _.castArray({ 'a': 1 });
     * // => [{ 'a': 1 }]
     *
     * _.castArray('abc');
     * // => ['abc']
     *
     * _.castArray(null);
     * // => [null]
     *
     * _.castArray(undefined);
     * // => [undefined]
     *
     * _.castArray();
     * // => []
     *
     * var array = [1, 2, 3];
     * console.log(_.castArray(array) === array);
     * // => true
     */
    function castArray() {
      if (!arguments.length) {
        return [];
      }
      var value = arguments[0];
      return isArray(value) ? value : [value];
    }

    /**
     * Creates a shallow clone of `value`.
     *
     * **Note:** This method is loosely based on the
     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
     * and supports cloning arrays, array buffers, booleans, date objects, maps,
     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
     * arrays. The own enumerable properties of `arguments` objects are cloned
     * as plain objects. An empty object is returned for uncloneable values such
     * as error objects, functions, DOM nodes, and WeakMaps.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to clone.
     * @returns {*} Returns the cloned value.
     * @see _.cloneDeep
     * @example
     *
     * var objects = [{ 'a': 1 }, { 'b': 2 }];
     *
     * var shallow = _.clone(objects);
     * console.log(shallow[0] === objects[0]);
     * // => true
     */
    function clone(value) {
      return baseClone(value, CLONE_SYMBOLS_FLAG);
    }

    /**
     * This method is like `_.clone` except that it accepts `customizer` which
     * is invoked to produce the cloned value. If `customizer` returns `undefined`,
     * cloning is handled by the method instead. The `customizer` is invoked with
     * up to four arguments; (value [, index|key, object, stack]).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to clone.
     * @param {Function} [customizer] The function to customize cloning.
     * @returns {*} Returns the cloned value.
     * @see _.cloneDeepWith
     * @example
     *
     * function customizer(value) {
     *   if (_.isElement(value)) {
     *     return value.cloneNode(false);
     *   }
     * }
     *
     * var el = _.cloneWith(document.body, customizer);
     *
     * console.log(el === document.body);
     * // => false
     * console.log(el.nodeName);
     * // => 'BODY'
     * console.log(el.childNodes.length);
     * // => 0
     */
    function cloneWith(value, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
    }

    /**
     * This method is like `_.clone` except that it recursively clones `value`.
     *
     * @static
     * @memberOf _
     * @since 1.0.0
     * @category Lang
     * @param {*} value The value to recursively clone.
     * @returns {*} Returns the deep cloned value.
     * @see _.clone
     * @example
     *
     * var objects = [{ 'a': 1 }, { 'b': 2 }];
     *
     * var deep = _.cloneDeep(objects);
     * console.log(deep[0] === objects[0]);
     * // => false
     */
    function cloneDeep(value) {
      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
    }

    /**
     * This method is like `_.cloneWith` except that it recursively clones `value`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to recursively clone.
     * @param {Function} [customizer] The function to customize cloning.
     * @returns {*} Returns the deep cloned value.
     * @see _.cloneWith
     * @example
     *
     * function customizer(value) {
     *   if (_.isElement(value)) {
     *     return value.cloneNode(true);
     *   }
     * }
     *
     * var el = _.cloneDeepWith(document.body, customizer);
     *
     * console.log(el === document.body);
     * // => false
     * console.log(el.nodeName);
     * // => 'BODY'
     * console.log(el.childNodes.length);
     * // => 20
     */
    function cloneDeepWith(value, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
    }

    /**
     * Checks if `object` conforms to `source` by invoking the predicate
     * properties of `source` with the corresponding property values of `object`.
     *
     * **Note:** This method is equivalent to `_.conforms` when `source` is
     * partially applied.
     *
     * @static
     * @memberOf _
     * @since 4.14.0
     * @category Lang
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property predicates to conform to.
     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     *
     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });
     * // => true
     *
     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });
     * // => false
     */
    function conformsTo(object, source) {
      return source == null || baseConformsTo(object, source, keys(source));
    }

    /**
     * Performs a
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * comparison between two values to determine if they are equivalent.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * var object = { 'a': 1 };
     * var other = { 'a': 1 };
     *
     * _.eq(object, object);
     * // => true
     *
     * _.eq(object, other);
     * // => false
     *
     * _.eq('a', 'a');
     * // => true
     *
     * _.eq('a', Object('a'));
     * // => false
     *
     * _.eq(NaN, NaN);
     * // => true
     */
    function eq(value, other) {
      return value === other || (value !== value && other !== other);
    }

    /**
     * Checks if `value` is greater than `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is greater than `other`,
     *  else `false`.
     * @see _.lt
     * @example
     *
     * _.gt(3, 1);
     * // => true
     *
     * _.gt(3, 3);
     * // => false
     *
     * _.gt(1, 3);
     * // => false
     */
    var gt = createRelationalOperation(baseGt);

    /**
     * Checks if `value` is greater than or equal to `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is greater than or equal to
     *  `other`, else `false`.
     * @see _.lte
     * @example
     *
     * _.gte(3, 1);
     * // => true
     *
     * _.gte(3, 3);
     * // => true
     *
     * _.gte(1, 3);
     * // => false
     */
    var gte = createRelationalOperation(function(value, other) {
      return value >= other;
    });

    /**
     * Checks if `value` is likely an `arguments` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
     *  else `false`.
     * @example
     *
     * _.isArguments(function() { return arguments; }());
     * // => true
     *
     * _.isArguments([1, 2, 3]);
     * // => false
     */
    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
        !propertyIsEnumerable.call(value, 'callee');
    };

    /**
     * Checks if `value` is classified as an `Array` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array, else `false`.
     * @example
     *
     * _.isArray([1, 2, 3]);
     * // => true
     *
     * _.isArray(document.body.children);
     * // => false
     *
     * _.isArray('abc');
     * // => false
     *
     * _.isArray(_.noop);
     * // => false
     */
    var isArray = Array.isArray;

    /**
     * Checks if `value` is classified as an `ArrayBuffer` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
     * @example
     *
     * _.isArrayBuffer(new ArrayBuffer(2));
     * // => true
     *
     * _.isArrayBuffer(new Array(2));
     * // => false
     */
    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;

    /**
     * Checks if `value` is array-like. A value is considered array-like if it's
     * not a function and has a `value.length` that's an integer greater than or
     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
     * @example
     *
     * _.isArrayLike([1, 2, 3]);
     * // => true
     *
     * _.isArrayLike(document.body.children);
     * // => true
     *
     * _.isArrayLike('abc');
     * // => true
     *
     * _.isArrayLike(_.noop);
     * // => false
     */
    function isArrayLike(value) {
      return value != null && isLength(value.length) && !isFunction(value);
    }

    /**
     * This method is like `_.isArrayLike` except that it also checks if `value`
     * is an object.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array-like object,
     *  else `false`.
     * @example
     *
     * _.isArrayLikeObject([1, 2, 3]);
     * // => true
     *
     * _.isArrayLikeObject(document.body.children);
     * // => true
     *
     * _.isArrayLikeObject('abc');
     * // => false
     *
     * _.isArrayLikeObject(_.noop);
     * // => false
     */
    function isArrayLikeObject(value) {
      return isObjectLike(value) && isArrayLike(value);
    }

    /**
     * Checks if `value` is classified as a boolean primitive or object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
     * @example
     *
     * _.isBoolean(false);
     * // => true
     *
     * _.isBoolean(null);
     * // => false
     */
    function isBoolean(value) {
      return value === true || value === false ||
        (isObjectLike(value) && baseGetTag(value) == boolTag);
    }

    /**
     * Checks if `value` is a buffer.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
     * @example
     *
     * _.isBuffer(new Buffer(2));
     * // => true
     *
     * _.isBuffer(new Uint8Array(2));
     * // => false
     */
    var isBuffer = nativeIsBuffer || stubFalse;

    /**
     * Checks if `value` is classified as a `Date` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
     * @example
     *
     * _.isDate(new Date);
     * // => true
     *
     * _.isDate('Mon April 23 2012');
     * // => false
     */
    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;

    /**
     * Checks if `value` is likely a DOM element.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
     * @example
     *
     * _.isElement(document.body);
     * // => true
     *
     * _.isElement('<body>');
     * // => false
     */
    function isElement(value) {
      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
    }

    /**
     * Checks if `value` is an empty object, collection, map, or set.
     *
     * Objects are considered empty if they have no own enumerable string keyed
     * properties.
     *
     * Array-like values such as `arguments` objects, arrays, buffers, strings, or
     * jQuery-like collections are considered empty if they have a `length` of `0`.
     * Similarly, maps and sets are considered empty if they have a `size` of `0`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is empty, else `false`.
     * @example
     *
     * _.isEmpty(null);
     * // => true
     *
     * _.isEmpty(true);
     * // => true
     *
     * _.isEmpty(1);
     * // => true
     *
     * _.isEmpty([1, 2, 3]);
     * // => false
     *
     * _.isEmpty({ 'a': 1 });
     * // => false
     */
    function isEmpty(value) {
      if (value == null) {
        return true;
      }
      if (isArrayLike(value) &&
          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
            isBuffer(value) || isTypedArray(value) || isArguments(value))) {
        return !value.length;
      }
      var tag = getTag(value);
      if (tag == mapTag || tag == setTag) {
        return !value.size;
      }
      if (isPrototype(value)) {
        return !baseKeys(value).length;
      }
      for (var key in value) {
        if (hasOwnProperty.call(value, key)) {
          return false;
        }
      }
      return true;
    }

    /**
     * Performs a deep comparison between two values to determine if they are
     * equivalent.
     *
     * **Note:** This method supports comparing arrays, array buffers, booleans,
     * date objects, error objects, maps, numbers, `Object` objects, regexes,
     * sets, strings, symbols, and typed arrays. `Object` objects are compared
     * by their own, not inherited, enumerable properties. Functions and DOM
     * nodes are compared by strict equality, i.e. `===`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * var object = { 'a': 1 };
     * var other = { 'a': 1 };
     *
     * _.isEqual(object, other);
     * // => true
     *
     * object === other;
     * // => false
     */
    function isEqual(value, other) {
      return baseIsEqual(value, other);
    }

    /**
     * This method is like `_.isEqual` except that it accepts `customizer` which
     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
     * are handled by the method instead. The `customizer` is invoked with up to
     * six arguments: (objValue, othValue [, index|key, object, other, stack]).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * function isGreeting(value) {
     *   return /^h(?:i|ello)$/.test(value);
     * }
     *
     * function customizer(objValue, othValue) {
     *   if (isGreeting(objValue) && isGreeting(othValue)) {
     *     return true;
     *   }
     * }
     *
     * var array = ['hello', 'goodbye'];
     * var other = ['hi', 'goodbye'];
     *
     * _.isEqualWith(array, other, customizer);
     * // => true
     */
    function isEqualWith(value, other, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      var result = customizer ? customizer(value, other) : undefined;
      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
    }

    /**
     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
     * `SyntaxError`, `TypeError`, or `URIError` object.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
     * @example
     *
     * _.isError(new Error);
     * // => true
     *
     * _.isError(Error);
     * // => false
     */
    function isError(value) {
      if (!isObjectLike(value)) {
        return false;
      }
      var tag = baseGetTag(value);
      return tag == errorTag || tag == domExcTag ||
        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));
    }

    /**
     * Checks if `value` is a finite primitive number.
     *
     * **Note:** This method is based on
     * [`Number.isFinite`](https://mdn.io/Number/isFinite).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
     * @example
     *
     * _.isFinite(3);
     * // => true
     *
     * _.isFinite(Number.MIN_VALUE);
     * // => true
     *
     * _.isFinite(Infinity);
     * // => false
     *
     * _.isFinite('3');
     * // => false
     */
    function isFinite(value) {
      return typeof value == 'number' && nativeIsFinite(value);
    }

    /**
     * Checks if `value` is classified as a `Function` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a function, else `false`.
     * @example
     *
     * _.isFunction(_);
     * // => true
     *
     * _.isFunction(/abc/);
     * // => false
     */
    function isFunction(value) {
      if (!isObject(value)) {
        return false;
      }
      // The use of `Object#toString` avoids issues with the `typeof` operator
      // in Safari 9 which returns 'object' for typed arrays and other constructors.
      var tag = baseGetTag(value);
      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
    }

    /**
     * Checks if `value` is an integer.
     *
     * **Note:** This method is based on
     * [`Number.isInteger`](https://mdn.io/Number/isInteger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.
     * @example
     *
     * _.isInteger(3);
     * // => true
     *
     * _.isInteger(Number.MIN_VALUE);
     * // => false
     *
     * _.isInteger(Infinity);
     * // => false
     *
     * _.isInteger('3');
     * // => false
     */
    function isInteger(value) {
      return typeof value == 'number' && value == toInteger(value);
    }

    /**
     * Checks if `value` is a valid array-like length.
     *
     * **Note:** This method is loosely based on
     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
     * @example
     *
     * _.isLength(3);
     * // => true
     *
     * _.isLength(Number.MIN_VALUE);
     * // => false
     *
     * _.isLength(Infinity);
     * // => false
     *
     * _.isLength('3');
     * // => false
     */
    function isLength(value) {
      return typeof value == 'number' &&
        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
    }

    /**
     * Checks if `value` is the
     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an object, else `false`.
     * @example
     *
     * _.isObject({});
     * // => true
     *
     * _.isObject([1, 2, 3]);
     * // => true
     *
     * _.isObject(_.noop);
     * // => true
     *
     * _.isObject(null);
     * // => false
     */
    function isObject(value) {
      var type = typeof value;
      return value != null && (type == 'object' || type == 'function');
    }

    /**
     * Checks if `value` is object-like. A value is object-like if it's not `null`
     * and has a `typeof` result of "object".
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
     * @example
     *
     * _.isObjectLike({});
     * // => true
     *
     * _.isObjectLike([1, 2, 3]);
     * // => true
     *
     * _.isObjectLike(_.noop);
     * // => false
     *
     * _.isObjectLike(null);
     * // => false
     */
    function isObjectLike(value) {
      return value != null && typeof value == 'object';
    }

    /**
     * Checks if `value` is classified as a `Map` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
     * @example
     *
     * _.isMap(new Map);
     * // => true
     *
     * _.isMap(new WeakMap);
     * // => false
     */
    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;

    /**
     * Performs a partial deep comparison between `object` and `source` to
     * determine if `object` contains equivalent property values.
     *
     * **Note:** This method is equivalent to `_.matches` when `source` is
     * partially applied.
     *
     * Partial comparisons will match empty array and empty object `source`
     * values against any array or object value, respectively. See `_.isEqual`
     * for a list of supported value comparisons.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     *
     * _.isMatch(object, { 'b': 2 });
     * // => true
     *
     * _.isMatch(object, { 'b': 1 });
     * // => false
     */
    function isMatch(object, source) {
      return object === source || baseIsMatch(object, source, getMatchData(source));
    }

    /**
     * This method is like `_.isMatch` except that it accepts `customizer` which
     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
     * are handled by the method instead. The `customizer` is invoked with five
     * arguments: (objValue, srcValue, index|key, object, source).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     * @example
     *
     * function isGreeting(value) {
     *   return /^h(?:i|ello)$/.test(value);
     * }
     *
     * function customizer(objValue, srcValue) {
     *   if (isGreeting(objValue) && isGreeting(srcValue)) {
     *     return true;
     *   }
     * }
     *
     * var object = { 'greeting': 'hello' };
     * var source = { 'greeting': 'hi' };
     *
     * _.isMatchWith(object, source, customizer);
     * // => true
     */
    function isMatchWith(object, source, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return baseIsMatch(object, source, getMatchData(source), customizer);
    }

    /**
     * Checks if `value` is `NaN`.
     *
     * **Note:** This method is based on
     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as
     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for
     * `undefined` and other non-number values.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
     * @example
     *
     * _.isNaN(NaN);
     * // => true
     *
     * _.isNaN(new Number(NaN));
     * // => true
     *
     * isNaN(undefined);
     * // => true
     *
     * _.isNaN(undefined);
     * // => false
     */
    function isNaN(value) {
      // An `NaN` primitive is the only value that is not equal to itself.
      // Perform the `toStringTag` check first to avoid errors with some
      // ActiveX objects in IE.
      return isNumber(value) && value != +value;
    }

    /**
     * Checks if `value` is a pristine native function.
     *
     * **Note:** This method can't reliably detect native functions in the presence
     * of the core-js package because core-js circumvents this kind of detection.
     * Despite multiple requests, the core-js maintainer has made it clear: any
     * attempt to fix the detection will be obstructed. As a result, we're left
     * with little choice but to throw an error. Unfortunately, this also affects
     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),
     * which rely on core-js.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a native function,
     *  else `false`.
     * @example
     *
     * _.isNative(Array.prototype.push);
     * // => true
     *
     * _.isNative(_);
     * // => false
     */
    function isNative(value) {
      if (isMaskable(value)) {
        throw new Error(CORE_ERROR_TEXT);
      }
      return baseIsNative(value);
    }

    /**
     * Checks if `value` is `null`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
     * @example
     *
     * _.isNull(null);
     * // => true
     *
     * _.isNull(void 0);
     * // => false
     */
    function isNull(value) {
      return value === null;
    }

    /**
     * Checks if `value` is `null` or `undefined`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.
     * @example
     *
     * _.isNil(null);
     * // => true
     *
     * _.isNil(void 0);
     * // => true
     *
     * _.isNil(NaN);
     * // => false
     */
    function isNil(value) {
      return value == null;
    }

    /**
     * Checks if `value` is classified as a `Number` primitive or object.
     *
     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
     * classified as numbers, use the `_.isFinite` method.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a number, else `false`.
     * @example
     *
     * _.isNumber(3);
     * // => true
     *
     * _.isNumber(Number.MIN_VALUE);
     * // => true
     *
     * _.isNumber(Infinity);
     * // => true
     *
     * _.isNumber('3');
     * // => false
     */
    function isNumber(value) {
      return typeof value == 'number' ||
        (isObjectLike(value) && baseGetTag(value) == numberTag);
    }

    /**
     * Checks if `value` is a plain object, that is, an object created by the
     * `Object` constructor or one with a `[[Prototype]]` of `null`.
     *
     * @static
     * @memberOf _
     * @since 0.8.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * _.isPlainObject(new Foo);
     * // => false
     *
     * _.isPlainObject([1, 2, 3]);
     * // => false
     *
     * _.isPlainObject({ 'x': 0, 'y': 0 });
     * // => true
     *
     * _.isPlainObject(Object.create(null));
     * // => true
     */
    function isPlainObject(value) {
      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
        return false;
      }
      var proto = getPrototype(value);
      if (proto === null) {
        return true;
      }
      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
      return typeof Ctor == 'function' && Ctor instanceof Ctor &&
        funcToString.call(Ctor) == objectCtorString;
    }

    /**
     * Checks if `value` is classified as a `RegExp` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
     * @example
     *
     * _.isRegExp(/abc/);
     * // => true
     *
     * _.isRegExp('/abc/');
     * // => false
     */
    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;

    /**
     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754
     * double precision number which isn't the result of a rounded unsafe integer.
     *
     * **Note:** This method is based on
     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.
     * @example
     *
     * _.isSafeInteger(3);
     * // => true
     *
     * _.isSafeInteger(Number.MIN_VALUE);
     * // => false
     *
     * _.isSafeInteger(Infinity);
     * // => false
     *
     * _.isSafeInteger('3');
     * // => false
     */
    function isSafeInteger(value) {
      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
    }

    /**
     * Checks if `value` is classified as a `Set` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
     * @example
     *
     * _.isSet(new Set);
     * // => true
     *
     * _.isSet(new WeakSet);
     * // => false
     */
    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;

    /**
     * Checks if `value` is classified as a `String` primitive or object.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a string, else `false`.
     * @example
     *
     * _.isString('abc');
     * // => true
     *
     * _.isString(1);
     * // => false
     */
    function isString(value) {
      return typeof value == 'string' ||
        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
    }

    /**
     * Checks if `value` is classified as a `Symbol` primitive or object.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
     * @example
     *
     * _.isSymbol(Symbol.iterator);
     * // => true
     *
     * _.isSymbol('abc');
     * // => false
     */
    function isSymbol(value) {
      return typeof value == 'symbol' ||
        (isObjectLike(value) && baseGetTag(value) == symbolTag);
    }

    /**
     * Checks if `value` is classified as a typed array.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
     * @example
     *
     * _.isTypedArray(new Uint8Array);
     * // => true
     *
     * _.isTypedArray([]);
     * // => false
     */
    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;

    /**
     * Checks if `value` is `undefined`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
     * @example
     *
     * _.isUndefined(void 0);
     * // => true
     *
     * _.isUndefined(null);
     * // => false
     */
    function isUndefined(value) {
      return value === undefined;
    }

    /**
     * Checks if `value` is classified as a `WeakMap` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.
     * @example
     *
     * _.isWeakMap(new WeakMap);
     * // => true
     *
     * _.isWeakMap(new Map);
     * // => false
     */
    function isWeakMap(value) {
      return isObjectLike(value) && getTag(value) == weakMapTag;
    }

    /**
     * Checks if `value` is classified as a `WeakSet` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.
     * @example
     *
     * _.isWeakSet(new WeakSet);
     * // => true
     *
     * _.isWeakSet(new Set);
     * // => false
     */
    function isWeakSet(value) {
      return isObjectLike(value) && baseGetTag(value) == weakSetTag;
    }

    /**
     * Checks if `value` is less than `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is less than `other`,
     *  else `false`.
     * @see _.gt
     * @example
     *
     * _.lt(1, 3);
     * // => true
     *
     * _.lt(3, 3);
     * // => false
     *
     * _.lt(3, 1);
     * // => false
     */
    var lt = createRelationalOperation(baseLt);

    /**
     * Checks if `value` is less than or equal to `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is less than or equal to
     *  `other`, else `false`.
     * @see _.gte
     * @example
     *
     * _.lte(1, 3);
     * // => true
     *
     * _.lte(3, 3);
     * // => true
     *
     * _.lte(3, 1);
     * // => false
     */
    var lte = createRelationalOperation(function(value, other) {
      return value <= other;
    });

    /**
     * Converts `value` to an array.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {Array} Returns the converted array.
     * @example
     *
     * _.toArray({ 'a': 1, 'b': 2 });
     * // => [1, 2]
     *
     * _.toArray('abc');
     * // => ['a', 'b', 'c']
     *
     * _.toArray(1);
     * // => []
     *
     * _.toArray(null);
     * // => []
     */
    function toArray(value) {
      if (!value) {
        return [];
      }
      if (isArrayLike(value)) {
        return isString(value) ? stringToArray(value) : copyArray(value);
      }
      if (symIterator && value[symIterator]) {
        return iteratorToArray(value[symIterator]());
      }
      var tag = getTag(value),
          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);

      return func(value);
    }

    /**
     * Converts `value` to a finite number.
     *
     * @static
     * @memberOf _
     * @since 4.12.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted number.
     * @example
     *
     * _.toFinite(3.2);
     * // => 3.2
     *
     * _.toFinite(Number.MIN_VALUE);
     * // => 5e-324
     *
     * _.toFinite(Infinity);
     * // => 1.7976931348623157e+308
     *
     * _.toFinite('3.2');
     * // => 3.2
     */
    function toFinite(value) {
      if (!value) {
        return value === 0 ? value : 0;
      }
      value = toNumber(value);
      if (value === INFINITY || value === -INFINITY) {
        var sign = (value < 0 ? -1 : 1);
        return sign * MAX_INTEGER;
      }
      return value === value ? value : 0;
    }

    /**
     * Converts `value` to an integer.
     *
     * **Note:** This method is loosely based on
     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toInteger(3.2);
     * // => 3
     *
     * _.toInteger(Number.MIN_VALUE);
     * // => 0
     *
     * _.toInteger(Infinity);
     * // => 1.7976931348623157e+308
     *
     * _.toInteger('3.2');
     * // => 3
     */
    function toInteger(value) {
      var result = toFinite(value),
          remainder = result % 1;

      return result === result ? (remainder ? result - remainder : result) : 0;
    }

    /**
     * Converts `value` to an integer suitable for use as the length of an
     * array-like object.
     *
     * **Note:** This method is based on
     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toLength(3.2);
     * // => 3
     *
     * _.toLength(Number.MIN_VALUE);
     * // => 0
     *
     * _.toLength(Infinity);
     * // => 4294967295
     *
     * _.toLength('3.2');
     * // => 3
     */
    function toLength(value) {
      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
    }

    /**
     * Converts `value` to a number.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to process.
     * @returns {number} Returns the number.
     * @example
     *
     * _.toNumber(3.2);
     * // => 3.2
     *
     * _.toNumber(Number.MIN_VALUE);
     * // => 5e-324
     *
     * _.toNumber(Infinity);
     * // => Infinity
     *
     * _.toNumber('3.2');
     * // => 3.2
     */
    function toNumber(value) {
      if (typeof value == 'number') {
        return value;
      }
      if (isSymbol(value)) {
        return NAN;
      }
      if (isObject(value)) {
        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
        value = isObject(other) ? (other + '') : other;
      }
      if (typeof value != 'string') {
        return value === 0 ? value : +value;
      }
      value = baseTrim(value);
      var isBinary = reIsBinary.test(value);
      return (isBinary || reIsOctal.test(value))
        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
        : (reIsBadHex.test(value) ? NAN : +value);
    }

    /**
     * Converts `value` to a plain object flattening inherited enumerable string
     * keyed properties of `value` to own properties of the plain object.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {Object} Returns the converted plain object.
     * @example
     *
     * function Foo() {
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.assign({ 'a': 1 }, new Foo);
     * // => { 'a': 1, 'b': 2 }
     *
     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
     * // => { 'a': 1, 'b': 2, 'c': 3 }
     */
    function toPlainObject(value) {
      return copyObject(value, keysIn(value));
    }

    /**
     * Converts `value` to a safe integer. A safe integer can be compared and
     * represented correctly.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toSafeInteger(3.2);
     * // => 3
     *
     * _.toSafeInteger(Number.MIN_VALUE);
     * // => 0
     *
     * _.toSafeInteger(Infinity);
     * // => 9007199254740991
     *
     * _.toSafeInteger('3.2');
     * // => 3
     */
    function toSafeInteger(value) {
      return value
        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)
        : (value === 0 ? value : 0);
    }

    /**
     * Converts `value` to a string. An empty string is returned for `null`
     * and `undefined` values. The sign of `-0` is preserved.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.toString(null);
     * // => ''
     *
     * _.toString(-0);
     * // => '-0'
     *
     * _.toString([1, 2, 3]);
     * // => '1,2,3'
     */
    function toString(value) {
      return value == null ? '' : baseToString(value);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Assigns own enumerable string keyed properties of source objects to the
     * destination object. Source objects are applied from left to right.
     * Subsequent sources overwrite property assignments of previous sources.
     *
     * **Note:** This method mutates `object` and is loosely based on
     * [`Object.assign`](https://mdn.io/Object/assign).
     *
     * @static
     * @memberOf _
     * @since 0.10.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.assignIn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * function Bar() {
     *   this.c = 3;
     * }
     *
     * Foo.prototype.b = 2;
     * Bar.prototype.d = 4;
     *
     * _.assign({ 'a': 0 }, new Foo, new Bar);
     * // => { 'a': 1, 'c': 3 }
     */
    var assign = createAssigner(function(object, source) {
      if (isPrototype(source) || isArrayLike(source)) {
        copyObject(source, keys(source), object);
        return;
      }
      for (var key in source) {
        if (hasOwnProperty.call(source, key)) {
          assignValue(object, key, source[key]);
        }
      }
    });

    /**
     * This method is like `_.assign` except that it iterates over own and
     * inherited source properties.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias extend
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.assign
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * function Bar() {
     *   this.c = 3;
     * }
     *
     * Foo.prototype.b = 2;
     * Bar.prototype.d = 4;
     *
     * _.assignIn({ 'a': 0 }, new Foo, new Bar);
     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
     */
    var assignIn = createAssigner(function(object, source) {
      copyObject(source, keysIn(source), object);
    });

    /**
     * This method is like `_.assignIn` except that it accepts `customizer`
     * which is invoked to produce the assigned values. If `customizer` returns
     * `undefined`, assignment is handled by the method instead. The `customizer`
     * is invoked with five arguments: (objValue, srcValue, key, object, source).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias extendWith
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} sources The source objects.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @see _.assignWith
     * @example
     *
     * function customizer(objValue, srcValue) {
     *   return _.isUndefined(objValue) ? srcValue : objValue;
     * }
     *
     * var defaults = _.partialRight(_.assignInWith, customizer);
     *
     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
     * // => { 'a': 1, 'b': 2 }
     */
    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
      copyObject(source, keysIn(source), object, customizer);
    });

    /**
     * This method is like `_.assign` except that it accepts `customizer`
     * which is invoked to produce the assigned values. If `customizer` returns
     * `undefined`, assignment is handled by the method instead. The `customizer`
     * is invoked with five arguments: (objValue, srcValue, key, object, source).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} sources The source objects.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @see _.assignInWith
     * @example
     *
     * function customizer(objValue, srcValue) {
     *   return _.isUndefined(objValue) ? srcValue : objValue;
     * }
     *
     * var defaults = _.partialRight(_.assignWith, customizer);
     *
     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
     * // => { 'a': 1, 'b': 2 }
     */
    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
      copyObject(source, keys(source), object, customizer);
    });

    /**
     * Creates an array of values corresponding to `paths` of `object`.
     *
     * @static
     * @memberOf _
     * @since 1.0.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {...(string|string[])} [paths] The property paths to pick.
     * @returns {Array} Returns the picked values.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
     *
     * _.at(object, ['a[0].b.c', 'a[1]']);
     * // => [3, 4]
     */
    var at = flatRest(baseAt);

    /**
     * Creates an object that inherits from the `prototype` object. If a
     * `properties` object is given, its own enumerable string keyed properties
     * are assigned to the created object.
     *
     * @static
     * @memberOf _
     * @since 2.3.0
     * @category Object
     * @param {Object} prototype The object to inherit from.
     * @param {Object} [properties] The properties to assign to the object.
     * @returns {Object} Returns the new object.
     * @example
     *
     * function Shape() {
     *   this.x = 0;
     *   this.y = 0;
     * }
     *
     * function Circle() {
     *   Shape.call(this);
     * }
     *
     * Circle.prototype = _.create(Shape.prototype, {
     *   'constructor': Circle
     * });
     *
     * var circle = new Circle;
     * circle instanceof Circle;
     * // => true
     *
     * circle instanceof Shape;
     * // => true
     */
    function create(prototype, properties) {
      var result = baseCreate(prototype);
      return properties == null ? result : baseAssign(result, properties);
    }

    /**
     * Assigns own and inherited enumerable string keyed properties of source
     * objects to the destination object for all destination properties that
     * resolve to `undefined`. Source objects are applied from left to right.
     * Once a property is set, additional values of the same property are ignored.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.defaultsDeep
     * @example
     *
     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
     * // => { 'a': 1, 'b': 2 }
     */
    var defaults = baseRest(function(object, sources) {
      object = Object(object);

      var index = -1;
      var length = sources.length;
      var guard = length > 2 ? sources[2] : undefined;

      if (guard && isIterateeCall(sources[0], sources[1], guard)) {
        length = 1;
      }

      while (++index < length) {
        var source = sources[index];
        var props = keysIn(source);
        var propsIndex = -1;
        var propsLength = props.length;

        while (++propsIndex < propsLength) {
          var key = props[propsIndex];
          var value = object[key];

          if (value === undefined ||
              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
            object[key] = source[key];
          }
        }
      }

      return object;
    });

    /**
     * This method is like `_.defaults` except that it recursively assigns
     * default properties.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.defaults
     * @example
     *
     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
     * // => { 'a': { 'b': 2, 'c': 3 } }
     */
    var defaultsDeep = baseRest(function(args) {
      args.push(undefined, customDefaultsMerge);
      return apply(mergeWith, undefined, args);
    });

    /**
     * This method is like `_.find` except that it returns the key of the first
     * element `predicate` returns truthy for instead of the element itself.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category Object
     * @param {Object} object The object to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {string|undefined} Returns the key of the matched element,
     *  else `undefined`.
     * @example
     *
     * var users = {
     *   'barney':  { 'age': 36, 'active': true },
     *   'fred':    { 'age': 40, 'active': false },
     *   'pebbles': { 'age': 1,  'active': true }
     * };
     *
     * _.findKey(users, function(o) { return o.age < 40; });
     * // => 'barney' (iteration order is not guaranteed)
     *
     * // The `_.matches` iteratee shorthand.
     * _.findKey(users, { 'age': 1, 'active': true });
     * // => 'pebbles'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findKey(users, ['active', false]);
     * // => 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.findKey(users, 'active');
     * // => 'barney'
     */
    function findKey(object, predicate) {
      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
    }

    /**
     * This method is like `_.findKey` except that it iterates over elements of
     * a collection in the opposite order.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Object
     * @param {Object} object The object to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {string|undefined} Returns the key of the matched element,
     *  else `undefined`.
     * @example
     *
     * var users = {
     *   'barney':  { 'age': 36, 'active': true },
     *   'fred':    { 'age': 40, 'active': false },
     *   'pebbles': { 'age': 1,  'active': true }
     * };
     *
     * _.findLastKey(users, function(o) { return o.age < 40; });
     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'
     *
     * // The `_.matches` iteratee shorthand.
     * _.findLastKey(users, { 'age': 36, 'active': true });
     * // => 'barney'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findLastKey(users, ['active', false]);
     * // => 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.findLastKey(users, 'active');
     * // => 'pebbles'
     */
    function findLastKey(object, predicate) {
      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
    }

    /**
     * Iterates over own and inherited enumerable string keyed properties of an
     * object and invokes `iteratee` for each property. The iteratee is invoked
     * with three arguments: (value, key, object). Iteratee functions may exit
     * iteration early by explicitly returning `false`.
     *
     * @static
     * @memberOf _
     * @since 0.3.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forInRight
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forIn(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
     */
    function forIn(object, iteratee) {
      return object == null
        ? object
        : baseFor(object, getIteratee(iteratee, 3), keysIn);
    }

    /**
     * This method is like `_.forIn` except that it iterates over properties of
     * `object` in the opposite order.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forIn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forInRight(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.
     */
    function forInRight(object, iteratee) {
      return object == null
        ? object
        : baseForRight(object, getIteratee(iteratee, 3), keysIn);
    }

    /**
     * Iterates over own enumerable string keyed properties of an object and
     * invokes `iteratee` for each property. The iteratee is invoked with three
     * arguments: (value, key, object). Iteratee functions may exit iteration
     * early by explicitly returning `false`.
     *
     * @static
     * @memberOf _
     * @since 0.3.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forOwnRight
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forOwn(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
     */
    function forOwn(object, iteratee) {
      return object && baseForOwn(object, getIteratee(iteratee, 3));
    }

    /**
     * This method is like `_.forOwn` except that it iterates over properties of
     * `object` in the opposite order.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forOwn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forOwnRight(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.
     */
    function forOwnRight(object, iteratee) {
      return object && baseForOwnRight(object, getIteratee(iteratee, 3));
    }

    /**
     * Creates an array of function property names from own enumerable properties
     * of `object`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to inspect.
     * @returns {Array} Returns the function names.
     * @see _.functionsIn
     * @example
     *
     * function Foo() {
     *   this.a = _.constant('a');
     *   this.b = _.constant('b');
     * }
     *
     * Foo.prototype.c = _.constant('c');
     *
     * _.functions(new Foo);
     * // => ['a', 'b']
     */
    function functions(object) {
      return object == null ? [] : baseFunctions(object, keys(object));
    }

    /**
     * Creates an array of function property names from own and inherited
     * enumerable properties of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to inspect.
     * @returns {Array} Returns the function names.
     * @see _.functions
     * @example
     *
     * function Foo() {
     *   this.a = _.constant('a');
     *   this.b = _.constant('b');
     * }
     *
     * Foo.prototype.c = _.constant('c');
     *
     * _.functionsIn(new Foo);
     * // => ['a', 'b', 'c']
     */
    function functionsIn(object) {
      return object == null ? [] : baseFunctions(object, keysIn(object));
    }

    /**
     * Gets the value at `path` of `object`. If the resolved value is
     * `undefined`, the `defaultValue` is returned in its place.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to get.
     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.get(object, 'a[0].b.c');
     * // => 3
     *
     * _.get(object, ['a', '0', 'b', 'c']);
     * // => 3
     *
     * _.get(object, 'a.b.c', 'default');
     * // => 'default'
     */
    function get(object, path, defaultValue) {
      var result = object == null ? undefined : baseGet(object, path);
      return result === undefined ? defaultValue : result;
    }

    /**
     * Checks if `path` is a direct property of `object`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     * @example
     *
     * var object = { 'a': { 'b': 2 } };
     * var other = _.create({ 'a': _.create({ 'b': 2 }) });
     *
     * _.has(object, 'a');
     * // => true
     *
     * _.has(object, 'a.b');
     * // => true
     *
     * _.has(object, ['a', 'b']);
     * // => true
     *
     * _.has(other, 'a');
     * // => false
     */
    function has(object, path) {
      return object != null && hasPath(object, path, baseHas);
    }

    /**
     * Checks if `path` is a direct or inherited property of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     * @example
     *
     * var object = _.create({ 'a': _.create({ 'b': 2 }) });
     *
     * _.hasIn(object, 'a');
     * // => true
     *
     * _.hasIn(object, 'a.b');
     * // => true
     *
     * _.hasIn(object, ['a', 'b']);
     * // => true
     *
     * _.hasIn(object, 'b');
     * // => false
     */
    function hasIn(object, path) {
      return object != null && hasPath(object, path, baseHasIn);
    }

    /**
     * Creates an object composed of the inverted keys and values of `object`.
     * If `object` contains duplicate values, subsequent values overwrite
     * property assignments of previous values.
     *
     * @static
     * @memberOf _
     * @since 0.7.0
     * @category Object
     * @param {Object} object The object to invert.
     * @returns {Object} Returns the new inverted object.
     * @example
     *
     * var object = { 'a': 1, 'b': 2, 'c': 1 };
     *
     * _.invert(object);
     * // => { '1': 'c', '2': 'b' }
     */
    var invert = createInverter(function(result, value, key) {
      if (value != null &&
          typeof value.toString != 'function') {
        value = nativeObjectToString.call(value);
      }

      result[value] = key;
    }, constant(identity));

    /**
     * This method is like `_.invert` except that the inverted object is generated
     * from the results of running each element of `object` thru `iteratee`. The
     * corresponding inverted value of each inverted key is an array of keys
     * responsible for generating the inverted value. The iteratee is invoked
     * with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.1.0
     * @category Object
     * @param {Object} object The object to invert.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Object} Returns the new inverted object.
     * @example
     *
     * var object = { 'a': 1, 'b': 2, 'c': 1 };
     *
     * _.invertBy(object);
     * // => { '1': ['a', 'c'], '2': ['b'] }
     *
     * _.invertBy(object, function(value) {
     *   return 'group' + value;
     * });
     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }
     */
    var invertBy = createInverter(function(result, value, key) {
      if (value != null &&
          typeof value.toString != 'function') {
        value = nativeObjectToString.call(value);
      }

      if (hasOwnProperty.call(result, value)) {
        result[value].push(key);
      } else {
        result[value] = [key];
      }
    }, getIteratee);

    /**
     * Invokes the method at `path` of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the method to invoke.
     * @param {...*} [args] The arguments to invoke the method with.
     * @returns {*} Returns the result of the invoked method.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };
     *
     * _.invoke(object, 'a[0].b.c.slice', 1, 3);
     * // => [2, 3]
     */
    var invoke = baseRest(baseInvoke);

    /**
     * Creates an array of the own enumerable property names of `object`.
     *
     * **Note:** Non-object values are coerced to objects. See the
     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
     * for more details.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.keys(new Foo);
     * // => ['a', 'b'] (iteration order is not guaranteed)
     *
     * _.keys('hi');
     * // => ['0', '1']
     */
    function keys(object) {
      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
    }

    /**
     * Creates an array of the own and inherited enumerable property names of `object`.
     *
     * **Note:** Non-object values are coerced to objects.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.keysIn(new Foo);
     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
     */
    function keysIn(object) {
      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
    }

    /**
     * The opposite of `_.mapValues`; this method creates an object with the
     * same values as `object` and keys generated by running each own enumerable
     * string keyed property of `object` thru `iteratee`. The iteratee is invoked
     * with three arguments: (value, key, object).
     *
     * @static
     * @memberOf _
     * @since 3.8.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns the new mapped object.
     * @see _.mapValues
     * @example
     *
     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
     *   return key + value;
     * });
     * // => { 'a1': 1, 'b2': 2 }
     */
    function mapKeys(object, iteratee) {
      var result = {};
      iteratee = getIteratee(iteratee, 3);

      baseForOwn(object, function(value, key, object) {
        baseAssignValue(result, iteratee(value, key, object), value);
      });
      return result;
    }

    /**
     * Creates an object with the same keys as `object` and values generated
     * by running each own enumerable string keyed property of `object` thru
     * `iteratee`. The iteratee is invoked with three arguments:
     * (value, key, object).
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns the new mapped object.
     * @see _.mapKeys
     * @example
     *
     * var users = {
     *   'fred':    { 'user': 'fred',    'age': 40 },
     *   'pebbles': { 'user': 'pebbles', 'age': 1 }
     * };
     *
     * _.mapValues(users, function(o) { return o.age; });
     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
     *
     * // The `_.property` iteratee shorthand.
     * _.mapValues(users, 'age');
     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
     */
    function mapValues(object, iteratee) {
      var result = {};
      iteratee = getIteratee(iteratee, 3);

      baseForOwn(object, function(value, key, object) {
        baseAssignValue(result, key, iteratee(value, key, object));
      });
      return result;
    }

    /**
     * This method is like `_.assign` except that it recursively merges own and
     * inherited enumerable string keyed properties of source objects into the
     * destination object. Source properties that resolve to `undefined` are
     * skipped if a destination value exists. Array and plain object properties
     * are merged recursively. Other objects and value types are overridden by
     * assignment. Source objects are applied from left to right. Subsequent
     * sources overwrite property assignments of previous sources.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 0.5.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = {
     *   'a': [{ 'b': 2 }, { 'd': 4 }]
     * };
     *
     * var other = {
     *   'a': [{ 'c': 3 }, { 'e': 5 }]
     * };
     *
     * _.merge(object, other);
     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
     */
    var merge = createAssigner(function(object, source, srcIndex) {
      baseMerge(object, source, srcIndex);
    });

    /**
     * This method is like `_.merge` except that it accepts `customizer` which
     * is invoked to produce the merged values of the destination and source
     * properties. If `customizer` returns `undefined`, merging is handled by the
     * method instead. The `customizer` is invoked with six arguments:
     * (objValue, srcValue, key, object, source, stack).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} sources The source objects.
     * @param {Function} customizer The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @example
     *
     * function customizer(objValue, srcValue) {
     *   if (_.isArray(objValue)) {
     *     return objValue.concat(srcValue);
     *   }
     * }
     *
     * var object = { 'a': [1], 'b': [2] };
     * var other = { 'a': [3], 'b': [4] };
     *
     * _.mergeWith(object, other, customizer);
     * // => { 'a': [1, 3], 'b': [2, 4] }
     */
    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
      baseMerge(object, source, srcIndex, customizer);
    });

    /**
     * The opposite of `_.pick`; this method creates an object composed of the
     * own and inherited enumerable property paths of `object` that are not omitted.
     *
     * **Note:** This method is considerably slower than `_.pick`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The source object.
     * @param {...(string|string[])} [paths] The property paths to omit.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.omit(object, ['a', 'c']);
     * // => { 'b': '2' }
     */
    var omit = flatRest(function(object, paths) {
      var result = {};
      if (object == null) {
        return result;
      }
      var isDeep = false;
      paths = arrayMap(paths, function(path) {
        path = castPath(path, object);
        isDeep || (isDeep = path.length > 1);
        return path;
      });
      copyObject(object, getAllKeysIn(object), result);
      if (isDeep) {
        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
      }
      var length = paths.length;
      while (length--) {
        baseUnset(result, paths[length]);
      }
      return result;
    });

    /**
     * The opposite of `_.pickBy`; this method creates an object composed of
     * the own and inherited enumerable string keyed properties of `object` that
     * `predicate` doesn't return truthy for. The predicate is invoked with two
     * arguments: (value, key).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The source object.
     * @param {Function} [predicate=_.identity] The function invoked per property.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.omitBy(object, _.isNumber);
     * // => { 'b': '2' }
     */
    function omitBy(object, predicate) {
      return pickBy(object, negate(getIteratee(predicate)));
    }

    /**
     * Creates an object composed of the picked `object` properties.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The source object.
     * @param {...(string|string[])} [paths] The property paths to pick.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.pick(object, ['a', 'c']);
     * // => { 'a': 1, 'c': 3 }
     */
    var pick = flatRest(function(object, paths) {
      return object == null ? {} : basePick(object, paths);
    });

    /**
     * Creates an object composed of the `object` properties `predicate` returns
     * truthy for. The predicate is invoked with two arguments: (value, key).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The source object.
     * @param {Function} [predicate=_.identity] The function invoked per property.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.pickBy(object, _.isNumber);
     * // => { 'a': 1, 'c': 3 }
     */
    function pickBy(object, predicate) {
      if (object == null) {
        return {};
      }
      var props = arrayMap(getAllKeysIn(object), function(prop) {
        return [prop];
      });
      predicate = getIteratee(predicate);
      return basePickBy(object, props, function(value, path) {
        return predicate(value, path[0]);
      });
    }

    /**
     * This method is like `_.get` except that if the resolved value is a
     * function it's invoked with the `this` binding of its parent object and
     * its result is returned.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to resolve.
     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
     *
     * _.result(object, 'a[0].b.c1');
     * // => 3
     *
     * _.result(object, 'a[0].b.c2');
     * // => 4
     *
     * _.result(object, 'a[0].b.c3', 'default');
     * // => 'default'
     *
     * _.result(object, 'a[0].b.c3', _.constant('default'));
     * // => 'default'
     */
    function result(object, path, defaultValue) {
      path = castPath(path, object);

      var index = -1,
          length = path.length;

      // Ensure the loop is entered when path is empty.
      if (!length) {
        length = 1;
        object = undefined;
      }
      while (++index < length) {
        var value = object == null ? undefined : object[toKey(path[index])];
        if (value === undefined) {
          index = length;
          value = defaultValue;
        }
        object = isFunction(value) ? value.call(object) : value;
      }
      return object;
    }

    /**
     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
     * it's created. Arrays are created for missing index properties while objects
     * are created for all other missing properties. Use `_.setWith` to customize
     * `path` creation.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.set(object, 'a[0].b.c', 4);
     * console.log(object.a[0].b.c);
     * // => 4
     *
     * _.set(object, ['x', '0', 'y', 'z'], 5);
     * console.log(object.x[0].y.z);
     * // => 5
     */
    function set(object, path, value) {
      return object == null ? object : baseSet(object, path, value);
    }

    /**
     * This method is like `_.set` except that it accepts `customizer` which is
     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
     * path creation is handled by the method instead. The `customizer` is invoked
     * with three arguments: (nsValue, key, nsObject).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {*} value The value to set.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = {};
     *
     * _.setWith(object, '[0][1]', 'a', Object);
     * // => { '0': { '1': 'a' } }
     */
    function setWith(object, path, value, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return object == null ? object : baseSet(object, path, value, customizer);
    }

    /**
     * Creates an array of own enumerable string keyed-value pairs for `object`
     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its
     * entries are returned.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias entries
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the key-value pairs.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.toPairs(new Foo);
     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
     */
    var toPairs = createToPairs(keys);

    /**
     * Creates an array of own and inherited enumerable string keyed-value pairs
     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map
     * or set, its entries are returned.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias entriesIn
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the key-value pairs.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.toPairsIn(new Foo);
     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)
     */
    var toPairsIn = createToPairs(keysIn);

    /**
     * An alternative to `_.reduce`; this method transforms `object` to a new
     * `accumulator` object which is the result of running each of its own
     * enumerable string keyed properties thru `iteratee`, with each invocation
     * potentially mutating the `accumulator` object. If `accumulator` is not
     * provided, a new object with the same `[[Prototype]]` will be used. The
     * iteratee is invoked with four arguments: (accumulator, value, key, object).
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * @static
     * @memberOf _
     * @since 1.3.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {*} [accumulator] The custom accumulator value.
     * @returns {*} Returns the accumulated value.
     * @example
     *
     * _.transform([2, 3, 4], function(result, n) {
     *   result.push(n *= n);
     *   return n % 2 == 0;
     * }, []);
     * // => [4, 9]
     *
     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
     *   (result[value] || (result[value] = [])).push(key);
     * }, {});
     * // => { '1': ['a', 'c'], '2': ['b'] }
     */
    function transform(object, iteratee, accumulator) {
      var isArr = isArray(object),
          isArrLike = isArr || isBuffer(object) || isTypedArray(object);

      iteratee = getIteratee(iteratee, 4);
      if (accumulator == null) {
        var Ctor = object && object.constructor;
        if (isArrLike) {
          accumulator = isArr ? new Ctor : [];
        }
        else if (isObject(object)) {
          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
        }
        else {
          accumulator = {};
        }
      }
      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {
        return iteratee(accumulator, value, index, object);
      });
      return accumulator;
    }

    /**
     * Removes the property at `path` of `object`.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to unset.
     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 7 } }] };
     * _.unset(object, 'a[0].b.c');
     * // => true
     *
     * console.log(object);
     * // => { 'a': [{ 'b': {} }] };
     *
     * _.unset(object, ['a', '0', 'b', 'c']);
     * // => true
     *
     * console.log(object);
     * // => { 'a': [{ 'b': {} }] };
     */
    function unset(object, path) {
      return object == null ? true : baseUnset(object, path);
    }

    /**
     * This method is like `_.set` except that accepts `updater` to produce the
     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`
     * is invoked with one argument: (value).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.6.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {Function} updater The function to produce the updated value.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.update(object, 'a[0].b.c', function(n) { return n * n; });
     * console.log(object.a[0].b.c);
     * // => 9
     *
     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });
     * console.log(object.x[0].y.z);
     * // => 0
     */
    function update(object, path, updater) {
      return object == null ? object : baseUpdate(object, path, castFunction(updater));
    }

    /**
     * This method is like `_.update` except that it accepts `customizer` which is
     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
     * path creation is handled by the method instead. The `customizer` is invoked
     * with three arguments: (nsValue, key, nsObject).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.6.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {Function} updater The function to produce the updated value.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = {};
     *
     * _.updateWith(object, '[0][1]', _.constant('a'), Object);
     * // => { '0': { '1': 'a' } }
     */
    function updateWith(object, path, updater, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);
    }

    /**
     * Creates an array of the own enumerable string keyed property values of `object`.
     *
     * **Note:** Non-object values are coerced to objects.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property values.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.values(new Foo);
     * // => [1, 2] (iteration order is not guaranteed)
     *
     * _.values('hi');
     * // => ['h', 'i']
     */
    function values(object) {
      return object == null ? [] : baseValues(object, keys(object));
    }

    /**
     * Creates an array of the own and inherited enumerable string keyed property
     * values of `object`.
     *
     * **Note:** Non-object values are coerced to objects.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property values.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.valuesIn(new Foo);
     * // => [1, 2, 3] (iteration order is not guaranteed)
     */
    function valuesIn(object) {
      return object == null ? [] : baseValues(object, keysIn(object));
    }

    /*------------------------------------------------------------------------*/

    /**
     * Clamps `number` within the inclusive `lower` and `upper` bounds.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Number
     * @param {number} number The number to clamp.
     * @param {number} [lower] The lower bound.
     * @param {number} upper The upper bound.
     * @returns {number} Returns the clamped number.
     * @example
     *
     * _.clamp(-10, -5, 5);
     * // => -5
     *
     * _.clamp(10, -5, 5);
     * // => 5
     */
    function clamp(number, lower, upper) {
      if (upper === undefined) {
        upper = lower;
        lower = undefined;
      }
      if (upper !== undefined) {
        upper = toNumber(upper);
        upper = upper === upper ? upper : 0;
      }
      if (lower !== undefined) {
        lower = toNumber(lower);
        lower = lower === lower ? lower : 0;
      }
      return baseClamp(toNumber(number), lower, upper);
    }

    /**
     * Checks if `n` is between `start` and up to, but not including, `end`. If
     * `end` is not specified, it's set to `start` with `start` then set to `0`.
     * If `start` is greater than `end` the params are swapped to support
     * negative ranges.
     *
     * @static
     * @memberOf _
     * @since 3.3.0
     * @category Number
     * @param {number} number The number to check.
     * @param {number} [start=0] The start of the range.
     * @param {number} end The end of the range.
     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
     * @see _.range, _.rangeRight
     * @example
     *
     * _.inRange(3, 2, 4);
     * // => true
     *
     * _.inRange(4, 8);
     * // => true
     *
     * _.inRange(4, 2);
     * // => false
     *
     * _.inRange(2, 2);
     * // => false
     *
     * _.inRange(1.2, 2);
     * // => true
     *
     * _.inRange(5.2, 4);
     * // => false
     *
     * _.inRange(-3, -2, -6);
     * // => true
     */
    function inRange(number, start, end) {
      start = toFinite(start);
      if (end === undefined) {
        end = start;
        start = 0;
      } else {
        end = toFinite(end);
      }
      number = toNumber(number);
      return baseInRange(number, start, end);
    }

    /**
     * Produces a random number between the inclusive `lower` and `upper` bounds.
     * If only one argument is provided a number between `0` and the given number
     * is returned. If `floating` is `true`, or either `lower` or `upper` are
     * floats, a floating-point number is returned instead of an integer.
     *
     * **Note:** JavaScript follows the IEEE-754 standard for resolving
     * floating-point values which can produce unexpected results.
     *
     * @static
     * @memberOf _
     * @since 0.7.0
     * @category Number
     * @param {number} [lower=0] The lower bound.
     * @param {number} [upper=1] The upper bound.
     * @param {boolean} [floating] Specify returning a floating-point number.
     * @returns {number} Returns the random number.
     * @example
     *
     * _.random(0, 5);
     * // => an integer between 0 and 5
     *
     * _.random(5);
     * // => also an integer between 0 and 5
     *
     * _.random(5, true);
     * // => a floating-point number between 0 and 5
     *
     * _.random(1.2, 5.2);
     * // => a floating-point number between 1.2 and 5.2
     */
    function random(lower, upper, floating) {
      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {
        upper = floating = undefined;
      }
      if (floating === undefined) {
        if (typeof upper == 'boolean') {
          floating = upper;
          upper = undefined;
        }
        else if (typeof lower == 'boolean') {
          floating = lower;
          lower = undefined;
        }
      }
      if (lower === undefined && upper === undefined) {
        lower = 0;
        upper = 1;
      }
      else {
        lower = toFinite(lower);
        if (upper === undefined) {
          upper = lower;
          lower = 0;
        } else {
          upper = toFinite(upper);
        }
      }
      if (lower > upper) {
        var temp = lower;
        lower = upper;
        upper = temp;
      }
      if (floating || lower % 1 || upper % 1) {
        var rand = nativeRandom();
        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);
      }
      return baseRandom(lower, upper);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the camel cased string.
     * @example
     *
     * _.camelCase('Foo Bar');
     * // => 'fooBar'
     *
     * _.camelCase('--foo-bar--');
     * // => 'fooBar'
     *
     * _.camelCase('__FOO_BAR__');
     * // => 'fooBar'
     */
    var camelCase = createCompounder(function(result, word, index) {
      word = word.toLowerCase();
      return result + (index ? capitalize(word) : word);
    });

    /**
     * Converts the first character of `string` to upper case and the remaining
     * to lower case.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to capitalize.
     * @returns {string} Returns the capitalized string.
     * @example
     *
     * _.capitalize('FRED');
     * // => 'Fred'
     */
    function capitalize(string) {
      return upperFirst(toString(string).toLowerCase());
    }

    /**
     * Deburrs `string` by converting
     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
     * letters to basic Latin letters and removing
     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to deburr.
     * @returns {string} Returns the deburred string.
     * @example
     *
     * _.deburr('déjà vu');
     * // => 'deja vu'
     */
    function deburr(string) {
      string = toString(string);
      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
    }

    /**
     * Checks if `string` ends with the given target string.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to inspect.
     * @param {string} [target] The string to search for.
     * @param {number} [position=string.length] The position to search up to.
     * @returns {boolean} Returns `true` if `string` ends with `target`,
     *  else `false`.
     * @example
     *
     * _.endsWith('abc', 'c');
     * // => true
     *
     * _.endsWith('abc', 'b');
     * // => false
     *
     * _.endsWith('abc', 'b', 2);
     * // => true
     */
    function endsWith(string, target, position) {
      string = toString(string);
      target = baseToString(target);

      var length = string.length;
      position = position === undefined
        ? length
        : baseClamp(toInteger(position), 0, length);

      var end = position;
      position -= target.length;
      return position >= 0 && string.slice(position, end) == target;
    }

    /**
     * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
     * corresponding HTML entities.
     *
     * **Note:** No other characters are escaped. To escape additional
     * characters use a third-party library like [_he_](https://mths.be/he).
     *
     * Though the ">" character is escaped for symmetry, characters like
     * ">" and "/" don't need escaping in HTML and have no special meaning
     * unless they're part of a tag or unquoted attribute value. See
     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
     * (under "semi-related fun fact") for more details.
     *
     * When working with HTML you should always
     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
     * XSS vectors.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category String
     * @param {string} [string=''] The string to escape.
     * @returns {string} Returns the escaped string.
     * @example
     *
     * _.escape('fred, barney, & pebbles');
     * // => 'fred, barney, &amp; pebbles'
     */
    function escape(string) {
      string = toString(string);
      return (string && reHasUnescapedHtml.test(string))
        ? string.replace(reUnescapedHtml, escapeHtmlChar)
        : string;
    }

    /**
     * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
     * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to escape.
     * @returns {string} Returns the escaped string.
     * @example
     *
     * _.escapeRegExp('[lodash](https://lodash.com/)');
     * // => '\[lodash\]\(https://lodash\.com/\)'
     */
    function escapeRegExp(string) {
      string = toString(string);
      return (string && reHasRegExpChar.test(string))
        ? string.replace(reRegExpChar, '\\$&')
        : string;
    }

    /**
     * Converts `string` to
     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the kebab cased string.
     * @example
     *
     * _.kebabCase('Foo Bar');
     * // => 'foo-bar'
     *
     * _.kebabCase('fooBar');
     * // => 'foo-bar'
     *
     * _.kebabCase('__FOO_BAR__');
     * // => 'foo-bar'
     */
    var kebabCase = createCompounder(function(result, word, index) {
      return result + (index ? '-' : '') + word.toLowerCase();
    });

    /**
     * Converts `string`, as space separated words, to lower case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the lower cased string.
     * @example
     *
     * _.lowerCase('--Foo-Bar--');
     * // => 'foo bar'
     *
     * _.lowerCase('fooBar');
     * // => 'foo bar'
     *
     * _.lowerCase('__FOO_BAR__');
     * // => 'foo bar'
     */
    var lowerCase = createCompounder(function(result, word, index) {
      return result + (index ? ' ' : '') + word.toLowerCase();
    });

    /**
     * Converts the first character of `string` to lower case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.lowerFirst('Fred');
     * // => 'fred'
     *
     * _.lowerFirst('FRED');
     * // => 'fRED'
     */
    var lowerFirst = createCaseFirst('toLowerCase');

    /**
     * Pads `string` on the left and right sides if it's shorter than `length`.
     * Padding characters are truncated if they can't be evenly divided by `length`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to pad.
     * @param {number} [length=0] The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padded string.
     * @example
     *
     * _.pad('abc', 8);
     * // => '  abc   '
     *
     * _.pad('abc', 8, '_-');
     * // => '_-abc_-_'
     *
     * _.pad('abc', 3);
     * // => 'abc'
     */
    function pad(string, length, chars) {
      string = toString(string);
      length = toInteger(length);

      var strLength = length ? stringSize(string) : 0;
      if (!length || strLength >= length) {
        return string;
      }
      var mid = (length - strLength) / 2;
      return (
        createPadding(nativeFloor(mid), chars) +
        string +
        createPadding(nativeCeil(mid), chars)
      );
    }

    /**
     * Pads `string` on the right side if it's shorter than `length`. Padding
     * characters are truncated if they exceed `length`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to pad.
     * @param {number} [length=0] The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padded string.
     * @example
     *
     * _.padEnd('abc', 6);
     * // => 'abc   '
     *
     * _.padEnd('abc', 6, '_-');
     * // => 'abc_-_'
     *
     * _.padEnd('abc', 3);
     * // => 'abc'
     */
    function padEnd(string, length, chars) {
      string = toString(string);
      length = toInteger(length);

      var strLength = length ? stringSize(string) : 0;
      return (length && strLength < length)
        ? (string + createPadding(length - strLength, chars))
        : string;
    }

    /**
     * Pads `string` on the left side if it's shorter than `length`. Padding
     * characters are truncated if they exceed `length`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to pad.
     * @param {number} [length=0] The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padded string.
     * @example
     *
     * _.padStart('abc', 6);
     * // => '   abc'
     *
     * _.padStart('abc', 6, '_-');
     * // => '_-_abc'
     *
     * _.padStart('abc', 3);
     * // => 'abc'
     */
    function padStart(string, length, chars) {
      string = toString(string);
      length = toInteger(length);

      var strLength = length ? stringSize(string) : 0;
      return (length && strLength < length)
        ? (createPadding(length - strLength, chars) + string)
        : string;
    }

    /**
     * Converts `string` to an integer of the specified radix. If `radix` is
     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a
     * hexadecimal, in which case a `radix` of `16` is used.
     *
     * **Note:** This method aligns with the
     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category String
     * @param {string} string The string to convert.
     * @param {number} [radix=10] The radix to interpret `value` by.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.parseInt('08');
     * // => 8
     *
     * _.map(['6', '08', '10'], _.parseInt);
     * // => [6, 8, 10]
     */
    function parseInt(string, radix, guard) {
      if (guard || radix == null) {
        radix = 0;
      } else if (radix) {
        radix = +radix;
      }
      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);
    }

    /**
     * Repeats the given string `n` times.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to repeat.
     * @param {number} [n=1] The number of times to repeat the string.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the repeated string.
     * @example
     *
     * _.repeat('*', 3);
     * // => '***'
     *
     * _.repeat('abc', 2);
     * // => 'abcabc'
     *
     * _.repeat('abc', 0);
     * // => ''
     */
    function repeat(string, n, guard) {
      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {
        n = 1;
      } else {
        n = toInteger(n);
      }
      return baseRepeat(toString(string), n);
    }

    /**
     * Replaces matches for `pattern` in `string` with `replacement`.
     *
     * **Note:** This method is based on
     * [`String#replace`](https://mdn.io/String/replace).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to modify.
     * @param {RegExp|string} pattern The pattern to replace.
     * @param {Function|string} replacement The match replacement.
     * @returns {string} Returns the modified string.
     * @example
     *
     * _.replace('Hi Fred', 'Fred', 'Barney');
     * // => 'Hi Barney'
     */
    function replace() {
      var args = arguments,
          string = toString(args[0]);

      return args.length < 3 ? string : string.replace(args[1], args[2]);
    }

    /**
     * Converts `string` to
     * [snake case](https://en.wikipedia.org/wiki/Snake_case).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the snake cased string.
     * @example
     *
     * _.snakeCase('Foo Bar');
     * // => 'foo_bar'
     *
     * _.snakeCase('fooBar');
     * // => 'foo_bar'
     *
     * _.snakeCase('--FOO-BAR--');
     * // => 'foo_bar'
     */
    var snakeCase = createCompounder(function(result, word, index) {
      return result + (index ? '_' : '') + word.toLowerCase();
    });

    /**
     * Splits `string` by `separator`.
     *
     * **Note:** This method is based on
     * [`String#split`](https://mdn.io/String/split).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to split.
     * @param {RegExp|string} separator The separator pattern to split by.
     * @param {number} [limit] The length to truncate results to.
     * @returns {Array} Returns the string segments.
     * @example
     *
     * _.split('a-b-c', '-', 2);
     * // => ['a', 'b']
     */
    function split(string, separator, limit) {
      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {
        separator = limit = undefined;
      }
      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;
      if (!limit) {
        return [];
      }
      string = toString(string);
      if (string && (
            typeof separator == 'string' ||
            (separator != null && !isRegExp(separator))
          )) {
        separator = baseToString(separator);
        if (!separator && hasUnicode(string)) {
          return castSlice(stringToArray(string), 0, limit);
        }
      }
      return string.split(separator, limit);
    }

    /**
     * Converts `string` to
     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
     *
     * @static
     * @memberOf _
     * @since 3.1.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the start cased string.
     * @example
     *
     * _.startCase('--foo-bar--');
     * // => 'Foo Bar'
     *
     * _.startCase('fooBar');
     * // => 'Foo Bar'
     *
     * _.startCase('__FOO_BAR__');
     * // => 'FOO BAR'
     */
    var startCase = createCompounder(function(result, word, index) {
      return result + (index ? ' ' : '') + upperFirst(word);
    });

    /**
     * Checks if `string` starts with the given target string.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to inspect.
     * @param {string} [target] The string to search for.
     * @param {number} [position=0] The position to search from.
     * @returns {boolean} Returns `true` if `string` starts with `target`,
     *  else `false`.
     * @example
     *
     * _.startsWith('abc', 'a');
     * // => true
     *
     * _.startsWith('abc', 'b');
     * // => false
     *
     * _.startsWith('abc', 'b', 1);
     * // => true
     */
    function startsWith(string, target, position) {
      string = toString(string);
      position = position == null
        ? 0
        : baseClamp(toInteger(position), 0, string.length);

      target = baseToString(target);
      return string.slice(position, position + target.length) == target;
    }

    /**
     * Creates a compiled template function that can interpolate data properties
     * in "interpolate" delimiters, HTML-escape interpolated data properties in
     * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
     * properties may be accessed as free variables in the template. If a setting
     * object is given, it takes precedence over `_.templateSettings` values.
     *
     * **Note:** In the development build `_.template` utilizes
     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
     * for easier debugging.
     *
     * For more information on precompiling templates see
     * [lodash's custom builds documentation](https://lodash.com/custom-builds).
     *
     * For more information on Chrome extension sandboxes see
     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category String
     * @param {string} [string=''] The template string.
     * @param {Object} [options={}] The options object.
     * @param {RegExp} [options.escape=_.templateSettings.escape]
     *  The HTML "escape" delimiter.
     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]
     *  The "evaluate" delimiter.
     * @param {Object} [options.imports=_.templateSettings.imports]
     *  An object to import into the template as free variables.
     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]
     *  The "interpolate" delimiter.
     * @param {string} [options.sourceURL='lodash.templateSources[n]']
     *  The sourceURL of the compiled template.
     * @param {string} [options.variable='obj']
     *  The data object variable name.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the compiled template function.
     * @example
     *
     * // Use the "interpolate" delimiter to create a compiled template.
     * var compiled = _.template('hello <%= user %>!');
     * compiled({ 'user': 'fred' });
     * // => 'hello fred!'
     *
     * // Use the HTML "escape" delimiter to escape data property values.
     * var compiled = _.template('<b><%- value %></b>');
     * compiled({ 'value': '<script>' });
     * // => '<b>&lt;script&gt;</b>'
     *
     * // Use the "evaluate" delimiter to execute JavaScript and generate HTML.
     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
     * compiled({ 'users': ['fred', 'barney'] });
     * // => '<li>fred</li><li>barney</li>'
     *
     * // Use the internal `print` function in "evaluate" delimiters.
     * var compiled = _.template('<% print("hello " + user); %>!');
     * compiled({ 'user': 'barney' });
     * // => 'hello barney!'
     *
     * // Use the ES template literal delimiter as an "interpolate" delimiter.
     * // Disable support by replacing the "interpolate" delimiter.
     * var compiled = _.template('hello ${ user }!');
     * compiled({ 'user': 'pebbles' });
     * // => 'hello pebbles!'
     *
     * // Use backslashes to treat delimiters as plain text.
     * var compiled = _.template('<%= "\\<%- value %\\>" %>');
     * compiled({ 'value': 'ignored' });
     * // => '<%- value %>'
     *
     * // Use the `imports` option to import `jQuery` as `jq`.
     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
     * compiled({ 'users': ['fred', 'barney'] });
     * // => '<li>fred</li><li>barney</li>'
     *
     * // Use the `sourceURL` option to specify a custom sourceURL for the template.
     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
     * compiled(data);
     * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector.
     *
     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.
     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
     * compiled.source;
     * // => function(data) {
     * //   var __t, __p = '';
     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
     * //   return __p;
     * // }
     *
     * // Use custom template delimiters.
     * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
     * var compiled = _.template('hello {{ user }}!');
     * compiled({ 'user': 'mustache' });
     * // => 'hello mustache!'
     *
     * // Use the `source` property to inline compiled templates for meaningful
     * // line numbers in error messages and stack traces.
     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\
     *   var JST = {\
     *     "main": ' + _.template(mainText).source + '\
     *   };\
     * ');
     */
    function template(string, options, guard) {
      // Based on John Resig's `tmpl` implementation
      // (http://ejohn.org/blog/javascript-micro-templating/)
      // and Laura Doktorova's doT.js (https://github.com/olado/doT).
      var settings = lodash.templateSettings;

      if (guard && isIterateeCall(string, options, guard)) {
        options = undefined;
      }
      string = toString(string);
      options = assignInWith({}, options, settings, customDefaultsAssignIn);

      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
          importsKeys = keys(imports),
          importsValues = baseValues(imports, importsKeys);

      var isEscaping,
          isEvaluating,
          index = 0,
          interpolate = options.interpolate || reNoMatch,
          source = "__p += '";

      // Compile the regexp to match each delimiter.
      var reDelimiters = RegExp(
        (options.escape || reNoMatch).source + '|' +
        interpolate.source + '|' +
        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
        (options.evaluate || reNoMatch).source + '|$'
      , 'g');

      // Use a sourceURL for easier debugging.
      // The sourceURL gets injected into the source that's eval-ed, so be careful
      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in
      // and escape the comment, thus injecting code that gets evaled.
      var sourceURL = '//# sourceURL=' +
        (hasOwnProperty.call(options, 'sourceURL')
          ? (options.sourceURL + '').replace(/\s/g, ' ')
          : ('lodash.templateSources[' + (++templateCounter) + ']')
        ) + '\n';

      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
        interpolateValue || (interpolateValue = esTemplateValue);

        // Escape characters that can't be included in string literals.
        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);

        // Replace delimiters with snippets.
        if (escapeValue) {
          isEscaping = true;
          source += "' +\n__e(" + escapeValue + ") +\n'";
        }
        if (evaluateValue) {
          isEvaluating = true;
          source += "';\n" + evaluateValue + ";\n__p += '";
        }
        if (interpolateValue) {
          source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
        }
        index = offset + match.length;

        // The JS engine embedded in Adobe products needs `match` returned in
        // order to produce the correct `offset` value.
        return match;
      });

      source += "';\n";

      // If `variable` is not specified wrap a with-statement around the generated
      // code to add the data object to the top of the scope chain.
      var variable = hasOwnProperty.call(options, 'variable') && options.variable;
      if (!variable) {
        source = 'with (obj) {\n' + source + '\n}\n';
      }
      // Throw an error if a forbidden character was found in `variable`, to prevent
      // potential command injection attacks.
      else if (reForbiddenIdentifierChars.test(variable)) {
        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);
      }

      // Cleanup code by stripping empty strings.
      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
        .replace(reEmptyStringMiddle, '$1')
        .replace(reEmptyStringTrailing, '$1;');

      // Frame code as the function body.
      source = 'function(' + (variable || 'obj') + ') {\n' +
        (variable
          ? ''
          : 'obj || (obj = {});\n'
        ) +
        "var __t, __p = ''" +
        (isEscaping
           ? ', __e = _.escape'
           : ''
        ) +
        (isEvaluating
          ? ', __j = Array.prototype.join;\n' +
            "function print() { __p += __j.call(arguments, '') }\n"
          : ';\n'
        ) +
        source +
        'return __p\n}';

      var result = attempt(function() {
        return Function(importsKeys, sourceURL + 'return ' + source)
          .apply(undefined, importsValues);
      });

      // Provide the compiled function's source by its `toString` method or
      // the `source` property as a convenience for inlining compiled templates.
      result.source = source;
      if (isError(result)) {
        throw result;
      }
      return result;
    }

    /**
     * Converts `string`, as a whole, to lower case just like
     * [String#toLowerCase](https://mdn.io/toLowerCase).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the lower cased string.
     * @example
     *
     * _.toLower('--Foo-Bar--');
     * // => '--foo-bar--'
     *
     * _.toLower('fooBar');
     * // => 'foobar'
     *
     * _.toLower('__FOO_BAR__');
     * // => '__foo_bar__'
     */
    function toLower(value) {
      return toString(value).toLowerCase();
    }

    /**
     * Converts `string`, as a whole, to upper case just like
     * [String#toUpperCase](https://mdn.io/toUpperCase).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the upper cased string.
     * @example
     *
     * _.toUpper('--foo-bar--');
     * // => '--FOO-BAR--'
     *
     * _.toUpper('fooBar');
     * // => 'FOOBAR'
     *
     * _.toUpper('__foo_bar__');
     * // => '__FOO_BAR__'
     */
    function toUpper(value) {
      return toString(value).toUpperCase();
    }

    /**
     * Removes leading and trailing whitespace or specified characters from `string`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to trim.
     * @param {string} [chars=whitespace] The characters to trim.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the trimmed string.
     * @example
     *
     * _.trim('  abc  ');
     * // => 'abc'
     *
     * _.trim('-_-abc-_-', '_-');
     * // => 'abc'
     *
     * _.map(['  foo  ', '  bar  '], _.trim);
     * // => ['foo', 'bar']
     */
    function trim(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === undefined)) {
        return baseTrim(string);
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string),
          chrSymbols = stringToArray(chars),
          start = charsStartIndex(strSymbols, chrSymbols),
          end = charsEndIndex(strSymbols, chrSymbols) + 1;

      return castSlice(strSymbols, start, end).join('');
    }

    /**
     * Removes trailing whitespace or specified characters from `string`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to trim.
     * @param {string} [chars=whitespace] The characters to trim.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the trimmed string.
     * @example
     *
     * _.trimEnd('  abc  ');
     * // => '  abc'
     *
     * _.trimEnd('-_-abc-_-', '_-');
     * // => '-_-abc'
     */
    function trimEnd(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === undefined)) {
        return string.slice(0, trimmedEndIndex(string) + 1);
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string),
          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;

      return castSlice(strSymbols, 0, end).join('');
    }

    /**
     * Removes leading whitespace or specified characters from `string`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to trim.
     * @param {string} [chars=whitespace] The characters to trim.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the trimmed string.
     * @example
     *
     * _.trimStart('  abc  ');
     * // => 'abc  '
     *
     * _.trimStart('-_-abc-_-', '_-');
     * // => 'abc-_-'
     */
    function trimStart(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === undefined)) {
        return string.replace(reTrimStart, '');
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string),
          start = charsStartIndex(strSymbols, stringToArray(chars));

      return castSlice(strSymbols, start).join('');
    }

    /**
     * Truncates `string` if it's longer than the given maximum string length.
     * The last characters of the truncated string are replaced with the omission
     * string which defaults to "...".
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to truncate.
     * @param {Object} [options={}] The options object.
     * @param {number} [options.length=30] The maximum string length.
     * @param {string} [options.omission='...'] The string to indicate text is omitted.
     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
     * @returns {string} Returns the truncated string.
     * @example
     *
     * _.truncate('hi-diddly-ho there, neighborino');
     * // => 'hi-diddly-ho there, neighbo...'
     *
     * _.truncate('hi-diddly-ho there, neighborino', {
     *   'length': 24,
     *   'separator': ' '
     * });
     * // => 'hi-diddly-ho there,...'
     *
     * _.truncate('hi-diddly-ho there, neighborino', {
     *   'length': 24,
     *   'separator': /,? +/
     * });
     * // => 'hi-diddly-ho there...'
     *
     * _.truncate('hi-diddly-ho there, neighborino', {
     *   'omission': ' [...]'
     * });
     * // => 'hi-diddly-ho there, neig [...]'
     */
    function truncate(string, options) {
      var length = DEFAULT_TRUNC_LENGTH,
          omission = DEFAULT_TRUNC_OMISSION;

      if (isObject(options)) {
        var separator = 'separator' in options ? options.separator : separator;
        length = 'length' in options ? toInteger(options.length) : length;
        omission = 'omission' in options ? baseToString(options.omission) : omission;
      }
      string = toString(string);

      var strLength = string.length;
      if (hasUnicode(string)) {
        var strSymbols = stringToArray(string);
        strLength = strSymbols.length;
      }
      if (length >= strLength) {
        return string;
      }
      var end = length - stringSize(omission);
      if (end < 1) {
        return omission;
      }
      var result = strSymbols
        ? castSlice(strSymbols, 0, end).join('')
        : string.slice(0, end);

      if (separator === undefined) {
        return result + omission;
      }
      if (strSymbols) {
        end += (result.length - end);
      }
      if (isRegExp(separator)) {
        if (string.slice(end).search(separator)) {
          var match,
              substring = result;

          if (!separator.global) {
            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
          }
          separator.lastIndex = 0;
          while ((match = separator.exec(substring))) {
            var newEnd = match.index;
          }
          result = result.slice(0, newEnd === undefined ? end : newEnd);
        }
      } else if (string.indexOf(baseToString(separator), end) != end) {
        var index = result.lastIndexOf(separator);
        if (index > -1) {
          result = result.slice(0, index);
        }
      }
      return result + omission;
    }

    /**
     * The inverse of `_.escape`; this method converts the HTML entities
     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to
     * their corresponding characters.
     *
     * **Note:** No other HTML entities are unescaped. To unescape additional
     * HTML entities use a third-party library like [_he_](https://mths.be/he).
     *
     * @static
     * @memberOf _
     * @since 0.6.0
     * @category String
     * @param {string} [string=''] The string to unescape.
     * @returns {string} Returns the unescaped string.
     * @example
     *
     * _.unescape('fred, barney, &amp; pebbles');
     * // => 'fred, barney, & pebbles'
     */
    function unescape(string) {
      string = toString(string);
      return (string && reHasEscapedHtml.test(string))
        ? string.replace(reEscapedHtml, unescapeHtmlChar)
        : string;
    }

    /**
     * Converts `string`, as space separated words, to upper case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the upper cased string.
     * @example
     *
     * _.upperCase('--foo-bar');
     * // => 'FOO BAR'
     *
     * _.upperCase('fooBar');
     * // => 'FOO BAR'
     *
     * _.upperCase('__foo_bar__');
     * // => 'FOO BAR'
     */
    var upperCase = createCompounder(function(result, word, index) {
      return result + (index ? ' ' : '') + word.toUpperCase();
    });

    /**
     * Converts the first character of `string` to upper case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.upperFirst('fred');
     * // => 'Fred'
     *
     * _.upperFirst('FRED');
     * // => 'FRED'
     */
    var upperFirst = createCaseFirst('toUpperCase');

    /**
     * Splits `string` into an array of its words.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to inspect.
     * @param {RegExp|string} [pattern] The pattern to match words.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the words of `string`.
     * @example
     *
     * _.words('fred, barney, & pebbles');
     * // => ['fred', 'barney', 'pebbles']
     *
     * _.words('fred, barney, & pebbles', /[^, ]+/g);
     * // => ['fred', 'barney', '&', 'pebbles']
     */
    function words(string, pattern, guard) {
      string = toString(string);
      pattern = guard ? undefined : pattern;

      if (pattern === undefined) {
        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
      }
      return string.match(pattern) || [];
    }

    /*------------------------------------------------------------------------*/

    /**
     * Attempts to invoke `func`, returning either the result or the caught error
     * object. Any additional arguments are provided to `func` when it's invoked.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {Function} func The function to attempt.
     * @param {...*} [args] The arguments to invoke `func` with.
     * @returns {*} Returns the `func` result or error object.
     * @example
     *
     * // Avoid throwing errors for invalid selectors.
     * var elements = _.attempt(function(selector) {
     *   return document.querySelectorAll(selector);
     * }, '>_>');
     *
     * if (_.isError(elements)) {
     *   elements = [];
     * }
     */
    var attempt = baseRest(function(func, args) {
      try {
        return apply(func, undefined, args);
      } catch (e) {
        return isError(e) ? e : new Error(e);
      }
    });

    /**
     * Binds methods of an object to the object itself, overwriting the existing
     * method.
     *
     * **Note:** This method doesn't set the "length" property of bound functions.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {Object} object The object to bind and assign the bound methods to.
     * @param {...(string|string[])} methodNames The object method names to bind.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var view = {
     *   'label': 'docs',
     *   'click': function() {
     *     console.log('clicked ' + this.label);
     *   }
     * };
     *
     * _.bindAll(view, ['click']);
     * jQuery(element).on('click', view.click);
     * // => Logs 'clicked docs' when clicked.
     */
    var bindAll = flatRest(function(object, methodNames) {
      arrayEach(methodNames, function(key) {
        key = toKey(key);
        baseAssignValue(object, key, bind(object[key], object));
      });
      return object;
    });

    /**
     * Creates a function that iterates over `pairs` and invokes the corresponding
     * function of the first predicate to return truthy. The predicate-function
     * pairs are invoked with the `this` binding and arguments of the created
     * function.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {Array} pairs The predicate-function pairs.
     * @returns {Function} Returns the new composite function.
     * @example
     *
     * var func = _.cond([
     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],
     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
     *   [_.stubTrue,                      _.constant('no match')]
     * ]);
     *
     * func({ 'a': 1, 'b': 2 });
     * // => 'matches A'
     *
     * func({ 'a': 0, 'b': 1 });
     * // => 'matches B'
     *
     * func({ 'a': '1', 'b': '2' });
     * // => 'no match'
     */
    function cond(pairs) {
      var length = pairs == null ? 0 : pairs.length,
          toIteratee = getIteratee();

      pairs = !length ? [] : arrayMap(pairs, function(pair) {
        if (typeof pair[1] != 'function') {
          throw new TypeError(FUNC_ERROR_TEXT);
        }
        return [toIteratee(pair[0]), pair[1]];
      });

      return baseRest(function(args) {
        var index = -1;
        while (++index < length) {
          var pair = pairs[index];
          if (apply(pair[0], this, args)) {
            return apply(pair[1], this, args);
          }
        }
      });
    }

    /**
     * Creates a function that invokes the predicate properties of `source` with
     * the corresponding property values of a given object, returning `true` if
     * all predicates return truthy, else `false`.
     *
     * **Note:** The created function is equivalent to `_.conformsTo` with
     * `source` partially applied.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {Object} source The object of property predicates to conform to.
     * @returns {Function} Returns the new spec function.
     * @example
     *
     * var objects = [
     *   { 'a': 2, 'b': 1 },
     *   { 'a': 1, 'b': 2 }
     * ];
     *
     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));
     * // => [{ 'a': 1, 'b': 2 }]
     */
    function conforms(source) {
      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that returns `value`.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Util
     * @param {*} value The value to return from the new function.
     * @returns {Function} Returns the new constant function.
     * @example
     *
     * var objects = _.times(2, _.constant({ 'a': 1 }));
     *
     * console.log(objects);
     * // => [{ 'a': 1 }, { 'a': 1 }]
     *
     * console.log(objects[0] === objects[1]);
     * // => true
     */
    function constant(value) {
      return function() {
        return value;
      };
    }

    /**
     * Checks `value` to determine whether a default value should be returned in
     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,
     * or `undefined`.
     *
     * @static
     * @memberOf _
     * @since 4.14.0
     * @category Util
     * @param {*} value The value to check.
     * @param {*} defaultValue The default value.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * _.defaultTo(1, 10);
     * // => 1
     *
     * _.defaultTo(undefined, 10);
     * // => 10
     */
    function defaultTo(value, defaultValue) {
      return (value == null || value !== value) ? defaultValue : value;
    }

    /**
     * Creates a function that returns the result of invoking the given functions
     * with the `this` binding of the created function, where each successive
     * invocation is supplied the return value of the previous.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {...(Function|Function[])} [funcs] The functions to invoke.
     * @returns {Function} Returns the new composite function.
     * @see _.flowRight
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var addSquare = _.flow([_.add, square]);
     * addSquare(1, 2);
     * // => 9
     */
    var flow = createFlow();

    /**
     * This method is like `_.flow` except that it creates a function that
     * invokes the given functions from right to left.
     *
     * @static
     * @since 3.0.0
     * @memberOf _
     * @category Util
     * @param {...(Function|Function[])} [funcs] The functions to invoke.
     * @returns {Function} Returns the new composite function.
     * @see _.flow
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var addSquare = _.flowRight([square, _.add]);
     * addSquare(1, 2);
     * // => 9
     */
    var flowRight = createFlow(true);

    /**
     * This method returns the first argument it receives.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {*} value Any value.
     * @returns {*} Returns `value`.
     * @example
     *
     * var object = { 'a': 1 };
     *
     * console.log(_.identity(object) === object);
     * // => true
     */
    function identity(value) {
      return value;
    }

    /**
     * Creates a function that invokes `func` with the arguments of the created
     * function. If `func` is a property name, the created function returns the
     * property value for a given element. If `func` is an array or object, the
     * created function returns `true` for elements that contain the equivalent
     * source properties, otherwise it returns `false`.
     *
     * @static
     * @since 4.0.0
     * @memberOf _
     * @category Util
     * @param {*} [func=_.identity] The value to convert to a callback.
     * @returns {Function} Returns the callback.
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': true },
     *   { 'user': 'fred',   'age': 40, 'active': false }
     * ];
     *
     * // The `_.matches` iteratee shorthand.
     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.filter(users, _.iteratee(['user', 'fred']));
     * // => [{ 'user': 'fred', 'age': 40 }]
     *
     * // The `_.property` iteratee shorthand.
     * _.map(users, _.iteratee('user'));
     * // => ['barney', 'fred']
     *
     * // Create custom iteratee shorthands.
     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {
     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {
     *     return func.test(string);
     *   };
     * });
     *
     * _.filter(['abc', 'def'], /ef/);
     * // => ['def']
     */
    function iteratee(func) {
      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that performs a partial deep comparison between a given
     * object and `source`, returning `true` if the given object has equivalent
     * property values, else `false`.
     *
     * **Note:** The created function is equivalent to `_.isMatch` with `source`
     * partially applied.
     *
     * Partial comparisons will match empty array and empty object `source`
     * values against any array or object value, respectively. See `_.isEqual`
     * for a list of supported value comparisons.
     *
     * **Note:** Multiple values can be checked by combining several matchers
     * using `_.overSome`
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {Object} source The object of property values to match.
     * @returns {Function} Returns the new spec function.
     * @example
     *
     * var objects = [
     *   { 'a': 1, 'b': 2, 'c': 3 },
     *   { 'a': 4, 'b': 5, 'c': 6 }
     * ];
     *
     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
     *
     * // Checking for several possible values
     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));
     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
     */
    function matches(source) {
      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that performs a partial deep comparison between the
     * value at `path` of a given object to `srcValue`, returning `true` if the
     * object value is equivalent, else `false`.
     *
     * **Note:** Partial comparisons will match empty array and empty object
     * `srcValue` values against any array or object value, respectively. See
     * `_.isEqual` for a list of supported value comparisons.
     *
     * **Note:** Multiple values can be checked by combining several matchers
     * using `_.overSome`
     *
     * @static
     * @memberOf _
     * @since 3.2.0
     * @category Util
     * @param {Array|string} path The path of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     * @example
     *
     * var objects = [
     *   { 'a': 1, 'b': 2, 'c': 3 },
     *   { 'a': 4, 'b': 5, 'c': 6 }
     * ];
     *
     * _.find(objects, _.matchesProperty('a', 4));
     * // => { 'a': 4, 'b': 5, 'c': 6 }
     *
     * // Checking for several possible values
     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));
     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
     */
    function matchesProperty(path, srcValue) {
      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that invokes the method at `path` of a given object.
     * Any additional arguments are provided to the invoked method.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Util
     * @param {Array|string} path The path of the method to invoke.
     * @param {...*} [args] The arguments to invoke the method with.
     * @returns {Function} Returns the new invoker function.
     * @example
     *
     * var objects = [
     *   { 'a': { 'b': _.constant(2) } },
     *   { 'a': { 'b': _.constant(1) } }
     * ];
     *
     * _.map(objects, _.method('a.b'));
     * // => [2, 1]
     *
     * _.map(objects, _.method(['a', 'b']));
     * // => [2, 1]
     */
    var method = baseRest(function(path, args) {
      return function(object) {
        return baseInvoke(object, path, args);
      };
    });

    /**
     * The opposite of `_.method`; this method creates a function that invokes
     * the method at a given path of `object`. Any additional arguments are
     * provided to the invoked method.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Util
     * @param {Object} object The object to query.
     * @param {...*} [args] The arguments to invoke the method with.
     * @returns {Function} Returns the new invoker function.
     * @example
     *
     * var array = _.times(3, _.constant),
     *     object = { 'a': array, 'b': array, 'c': array };
     *
     * _.map(['a[2]', 'c[0]'], _.methodOf(object));
     * // => [2, 0]
     *
     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
     * // => [2, 0]
     */
    var methodOf = baseRest(function(object, args) {
      return function(path) {
        return baseInvoke(object, path, args);
      };
    });

    /**
     * Adds all own enumerable string keyed function properties of a source
     * object to the destination object. If `object` is a function, then methods
     * are added to its prototype as well.
     *
     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
     * avoid conflicts caused by modifying the original.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {Function|Object} [object=lodash] The destination object.
     * @param {Object} source The object of functions to add.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.
     * @returns {Function|Object} Returns `object`.
     * @example
     *
     * function vowels(string) {
     *   return _.filter(string, function(v) {
     *     return /[aeiou]/i.test(v);
     *   });
     * }
     *
     * _.mixin({ 'vowels': vowels });
     * _.vowels('fred');
     * // => ['e']
     *
     * _('fred').vowels().value();
     * // => ['e']
     *
     * _.mixin({ 'vowels': vowels }, { 'chain': false });
     * _('fred').vowels();
     * // => ['e']
     */
    function mixin(object, source, options) {
      var props = keys(source),
          methodNames = baseFunctions(source, props);

      if (options == null &&
          !(isObject(source) && (methodNames.length || !props.length))) {
        options = source;
        source = object;
        object = this;
        methodNames = baseFunctions(source, keys(source));
      }
      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
          isFunc = isFunction(object);

      arrayEach(methodNames, function(methodName) {
        var func = source[methodName];
        object[methodName] = func;
        if (isFunc) {
          object.prototype[methodName] = function() {
            var chainAll = this.__chain__;
            if (chain || chainAll) {
              var result = object(this.__wrapped__),
                  actions = result.__actions__ = copyArray(this.__actions__);

              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
              result.__chain__ = chainAll;
              return result;
            }
            return func.apply(object, arrayPush([this.value()], arguments));
          };
        }
      });

      return object;
    }

    /**
     * Reverts the `_` variable to its previous value and returns a reference to
     * the `lodash` function.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @returns {Function} Returns the `lodash` function.
     * @example
     *
     * var lodash = _.noConflict();
     */
    function noConflict() {
      if (root._ === this) {
        root._ = oldDash;
      }
      return this;
    }

    /**
     * This method returns `undefined`.
     *
     * @static
     * @memberOf _
     * @since 2.3.0
     * @category Util
     * @example
     *
     * _.times(2, _.noop);
     * // => [undefined, undefined]
     */
    function noop() {
      // No operation performed.
    }

    /**
     * Creates a function that gets the argument at index `n`. If `n` is negative,
     * the nth argument from the end is returned.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {number} [n=0] The index of the argument to return.
     * @returns {Function} Returns the new pass-thru function.
     * @example
     *
     * var func = _.nthArg(1);
     * func('a', 'b', 'c', 'd');
     * // => 'b'
     *
     * var func = _.nthArg(-2);
     * func('a', 'b', 'c', 'd');
     * // => 'c'
     */
    function nthArg(n) {
      n = toInteger(n);
      return baseRest(function(args) {
        return baseNth(args, n);
      });
    }

    /**
     * Creates a function that invokes `iteratees` with the arguments it receives
     * and returns their results.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {...(Function|Function[])} [iteratees=[_.identity]]
     *  The iteratees to invoke.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var func = _.over([Math.max, Math.min]);
     *
     * func(1, 2, 3, 4);
     * // => [4, 1]
     */
    var over = createOver(arrayMap);

    /**
     * Creates a function that checks if **all** of the `predicates` return
     * truthy when invoked with the arguments it receives.
     *
     * Following shorthands are possible for providing predicates.
     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {...(Function|Function[])} [predicates=[_.identity]]
     *  The predicates to check.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var func = _.overEvery([Boolean, isFinite]);
     *
     * func('1');
     * // => true
     *
     * func(null);
     * // => false
     *
     * func(NaN);
     * // => false
     */
    var overEvery = createOver(arrayEvery);

    /**
     * Creates a function that checks if **any** of the `predicates` return
     * truthy when invoked with the arguments it receives.
     *
     * Following shorthands are possible for providing predicates.
     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {...(Function|Function[])} [predicates=[_.identity]]
     *  The predicates to check.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var func = _.overSome([Boolean, isFinite]);
     *
     * func('1');
     * // => true
     *
     * func(null);
     * // => true
     *
     * func(NaN);
     * // => false
     *
     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])
     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])
     */
    var overSome = createOver(arraySome);

    /**
     * Creates a function that returns the value at `path` of a given object.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Util
     * @param {Array|string} path The path of the property to get.
     * @returns {Function} Returns the new accessor function.
     * @example
     *
     * var objects = [
     *   { 'a': { 'b': 2 } },
     *   { 'a': { 'b': 1 } }
     * ];
     *
     * _.map(objects, _.property('a.b'));
     * // => [2, 1]
     *
     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
     * // => [1, 2]
     */
    function property(path) {
      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
    }

    /**
     * The opposite of `_.property`; this method creates a function that returns
     * the value at a given path of `object`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {Object} object The object to query.
     * @returns {Function} Returns the new accessor function.
     * @example
     *
     * var array = [0, 1, 2],
     *     object = { 'a': array, 'b': array, 'c': array };
     *
     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
     * // => [2, 0]
     *
     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
     * // => [2, 0]
     */
    function propertyOf(object) {
      return function(path) {
        return object == null ? undefined : baseGet(object, path);
      };
    }

    /**
     * Creates an array of numbers (positive and/or negative) progressing from
     * `start` up to, but not including, `end`. A step of `-1` is used if a negative
     * `start` is specified without an `end` or `step`. If `end` is not specified,
     * it's set to `start` with `start` then set to `0`.
     *
     * **Note:** JavaScript follows the IEEE-754 standard for resolving
     * floating-point values which can produce unexpected results.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {number} [start=0] The start of the range.
     * @param {number} end The end of the range.
     * @param {number} [step=1] The value to increment or decrement by.
     * @returns {Array} Returns the range of numbers.
     * @see _.inRange, _.rangeRight
     * @example
     *
     * _.range(4);
     * // => [0, 1, 2, 3]
     *
     * _.range(-4);
     * // => [0, -1, -2, -3]
     *
     * _.range(1, 5);
     * // => [1, 2, 3, 4]
     *
     * _.range(0, 20, 5);
     * // => [0, 5, 10, 15]
     *
     * _.range(0, -4, -1);
     * // => [0, -1, -2, -3]
     *
     * _.range(1, 4, 0);
     * // => [1, 1, 1]
     *
     * _.range(0);
     * // => []
     */
    var range = createRange();

    /**
     * This method is like `_.range` except that it populates values in
     * descending order.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {number} [start=0] The start of the range.
     * @param {number} end The end of the range.
     * @param {number} [step=1] The value to increment or decrement by.
     * @returns {Array} Returns the range of numbers.
     * @see _.inRange, _.range
     * @example
     *
     * _.rangeRight(4);
     * // => [3, 2, 1, 0]
     *
     * _.rangeRight(-4);
     * // => [-3, -2, -1, 0]
     *
     * _.rangeRight(1, 5);
     * // => [4, 3, 2, 1]
     *
     * _.rangeRight(0, 20, 5);
     * // => [15, 10, 5, 0]
     *
     * _.rangeRight(0, -4, -1);
     * // => [-3, -2, -1, 0]
     *
     * _.rangeRight(1, 4, 0);
     * // => [1, 1, 1]
     *
     * _.rangeRight(0);
     * // => []
     */
    var rangeRight = createRange(true);

    /**
     * This method returns a new empty array.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {Array} Returns the new empty array.
     * @example
     *
     * var arrays = _.times(2, _.stubArray);
     *
     * console.log(arrays);
     * // => [[], []]
     *
     * console.log(arrays[0] === arrays[1]);
     * // => false
     */
    function stubArray() {
      return [];
    }

    /**
     * This method returns `false`.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {boolean} Returns `false`.
     * @example
     *
     * _.times(2, _.stubFalse);
     * // => [false, false]
     */
    function stubFalse() {
      return false;
    }

    /**
     * This method returns a new empty object.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {Object} Returns the new empty object.
     * @example
     *
     * var objects = _.times(2, _.stubObject);
     *
     * console.log(objects);
     * // => [{}, {}]
     *
     * console.log(objects[0] === objects[1]);
     * // => false
     */
    function stubObject() {
      return {};
    }

    /**
     * This method returns an empty string.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {string} Returns the empty string.
     * @example
     *
     * _.times(2, _.stubString);
     * // => ['', '']
     */
    function stubString() {
      return '';
    }

    /**
     * This method returns `true`.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {boolean} Returns `true`.
     * @example
     *
     * _.times(2, _.stubTrue);
     * // => [true, true]
     */
    function stubTrue() {
      return true;
    }

    /**
     * Invokes the iteratee `n` times, returning an array of the results of
     * each invocation. The iteratee is invoked with one argument; (index).
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {number} n The number of times to invoke `iteratee`.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the array of results.
     * @example
     *
     * _.times(3, String);
     * // => ['0', '1', '2']
     *
     *  _.times(4, _.constant(0));
     * // => [0, 0, 0, 0]
     */
    function times(n, iteratee) {
      n = toInteger(n);
      if (n < 1 || n > MAX_SAFE_INTEGER) {
        return [];
      }
      var index = MAX_ARRAY_LENGTH,
          length = nativeMin(n, MAX_ARRAY_LENGTH);

      iteratee = getIteratee(iteratee);
      n -= MAX_ARRAY_LENGTH;

      var result = baseTimes(length, iteratee);
      while (++index < n) {
        iteratee(index);
      }
      return result;
    }

    /**
     * Converts `value` to a property path array.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {*} value The value to convert.
     * @returns {Array} Returns the new property path array.
     * @example
     *
     * _.toPath('a.b.c');
     * // => ['a', 'b', 'c']
     *
     * _.toPath('a[0].b.c');
     * // => ['a', '0', 'b', 'c']
     */
    function toPath(value) {
      if (isArray(value)) {
        return arrayMap(value, toKey);
      }
      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
    }

    /**
     * Generates a unique ID. If `prefix` is given, the ID is appended to it.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {string} [prefix=''] The value to prefix the ID with.
     * @returns {string} Returns the unique ID.
     * @example
     *
     * _.uniqueId('contact_');
     * // => 'contact_104'
     *
     * _.uniqueId();
     * // => '105'
     */
    function uniqueId(prefix) {
      var id = ++idCounter;
      return toString(prefix) + id;
    }

    /*------------------------------------------------------------------------*/

    /**
     * Adds two numbers.
     *
     * @static
     * @memberOf _
     * @since 3.4.0
     * @category Math
     * @param {number} augend The first number in an addition.
     * @param {number} addend The second number in an addition.
     * @returns {number} Returns the total.
     * @example
     *
     * _.add(6, 4);
     * // => 10
     */
    var add = createMathOperation(function(augend, addend) {
      return augend + addend;
    }, 0);

    /**
     * Computes `number` rounded up to `precision`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Math
     * @param {number} number The number to round up.
     * @param {number} [precision=0] The precision to round up to.
     * @returns {number} Returns the rounded up number.
     * @example
     *
     * _.ceil(4.006);
     * // => 5
     *
     * _.ceil(6.004, 2);
     * // => 6.01
     *
     * _.ceil(6040, -2);
     * // => 6100
     */
    var ceil = createRound('ceil');

    /**
     * Divide two numbers.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Math
     * @param {number} dividend The first number in a division.
     * @param {number} divisor The second number in a division.
     * @returns {number} Returns the quotient.
     * @example
     *
     * _.divide(6, 4);
     * // => 1.5
     */
    var divide = createMathOperation(function(dividend, divisor) {
      return dividend / divisor;
    }, 1);

    /**
     * Computes `number` rounded down to `precision`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Math
     * @param {number} number The number to round down.
     * @param {number} [precision=0] The precision to round down to.
     * @returns {number} Returns the rounded down number.
     * @example
     *
     * _.floor(4.006);
     * // => 4
     *
     * _.floor(0.046, 2);
     * // => 0.04
     *
     * _.floor(4060, -2);
     * // => 4000
     */
    var floor = createRound('floor');

    /**
     * Computes the maximum value of `array`. If `array` is empty or falsey,
     * `undefined` is returned.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {*} Returns the maximum value.
     * @example
     *
     * _.max([4, 2, 8, 6]);
     * // => 8
     *
     * _.max([]);
     * // => undefined
     */
    function max(array) {
      return (array && array.length)
        ? baseExtremum(array, identity, baseGt)
        : undefined;
    }

    /**
     * This method is like `_.max` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the criterion by which
     * the value is ranked. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {*} Returns the maximum value.
     * @example
     *
     * var objects = [{ 'n': 1 }, { 'n': 2 }];
     *
     * _.maxBy(objects, function(o) { return o.n; });
     * // => { 'n': 2 }
     *
     * // The `_.property` iteratee shorthand.
     * _.maxBy(objects, 'n');
     * // => { 'n': 2 }
     */
    function maxBy(array, iteratee) {
      return (array && array.length)
        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)
        : undefined;
    }

    /**
     * Computes the mean of the values in `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {number} Returns the mean.
     * @example
     *
     * _.mean([4, 2, 8, 6]);
     * // => 5
     */
    function mean(array) {
      return baseMean(array, identity);
    }

    /**
     * This method is like `_.mean` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the value to be averaged.
     * The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the mean.
     * @example
     *
     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
     *
     * _.meanBy(objects, function(o) { return o.n; });
     * // => 5
     *
     * // The `_.property` iteratee shorthand.
     * _.meanBy(objects, 'n');
     * // => 5
     */
    function meanBy(array, iteratee) {
      return baseMean(array, getIteratee(iteratee, 2));
    }

    /**
     * Computes the minimum value of `array`. If `array` is empty or falsey,
     * `undefined` is returned.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {*} Returns the minimum value.
     * @example
     *
     * _.min([4, 2, 8, 6]);
     * // => 2
     *
     * _.min([]);
     * // => undefined
     */
    function min(array) {
      return (array && array.length)
        ? baseExtremum(array, identity, baseLt)
        : undefined;
    }

    /**
     * This method is like `_.min` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the criterion by which
     * the value is ranked. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {*} Returns the minimum value.
     * @example
     *
     * var objects = [{ 'n': 1 }, { 'n': 2 }];
     *
     * _.minBy(objects, function(o) { return o.n; });
     * // => { 'n': 1 }
     *
     * // The `_.property` iteratee shorthand.
     * _.minBy(objects, 'n');
     * // => { 'n': 1 }
     */
    function minBy(array, iteratee) {
      return (array && array.length)
        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)
        : undefined;
    }

    /**
     * Multiply two numbers.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Math
     * @param {number} multiplier The first number in a multiplication.
     * @param {number} multiplicand The second number in a multiplication.
     * @returns {number} Returns the product.
     * @example
     *
     * _.multiply(6, 4);
     * // => 24
     */
    var multiply = createMathOperation(function(multiplier, multiplicand) {
      return multiplier * multiplicand;
    }, 1);

    /**
     * Computes `number` rounded to `precision`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Math
     * @param {number} number The number to round.
     * @param {number} [precision=0] The precision to round to.
     * @returns {number} Returns the rounded number.
     * @example
     *
     * _.round(4.006);
     * // => 4
     *
     * _.round(4.006, 2);
     * // => 4.01
     *
     * _.round(4060, -2);
     * // => 4100
     */
    var round = createRound('round');

    /**
     * Subtract two numbers.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {number} minuend The first number in a subtraction.
     * @param {number} subtrahend The second number in a subtraction.
     * @returns {number} Returns the difference.
     * @example
     *
     * _.subtract(6, 4);
     * // => 2
     */
    var subtract = createMathOperation(function(minuend, subtrahend) {
      return minuend - subtrahend;
    }, 0);

    /**
     * Computes the sum of the values in `array`.
     *
     * @static
     * @memberOf _
     * @since 3.4.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {number} Returns the sum.
     * @example
     *
     * _.sum([4, 2, 8, 6]);
     * // => 20
     */
    function sum(array) {
      return (array && array.length)
        ? baseSum(array, identity)
        : 0;
    }

    /**
     * This method is like `_.sum` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the value to be summed.
     * The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the sum.
     * @example
     *
     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
     *
     * _.sumBy(objects, function(o) { return o.n; });
     * // => 20
     *
     * // The `_.property` iteratee shorthand.
     * _.sumBy(objects, 'n');
     * // => 20
     */
    function sumBy(array, iteratee) {
      return (array && array.length)
        ? baseSum(array, getIteratee(iteratee, 2))
        : 0;
    }

    /*------------------------------------------------------------------------*/

    // Add methods that return wrapped values in chain sequences.
    lodash.after = after;
    lodash.ary = ary;
    lodash.assign = assign;
    lodash.assignIn = assignIn;
    lodash.assignInWith = assignInWith;
    lodash.assignWith = assignWith;
    lodash.at = at;
    lodash.before = before;
    lodash.bind = bind;
    lodash.bindAll = bindAll;
    lodash.bindKey = bindKey;
    lodash.castArray = castArray;
    lodash.chain = chain;
    lodash.chunk = chunk;
    lodash.compact = compact;
    lodash.concat = concat;
    lodash.cond = cond;
    lodash.conforms = conforms;
    lodash.constant = constant;
    lodash.countBy = countBy;
    lodash.create = create;
    lodash.curry = curry;
    lodash.curryRight = curryRight;
    lodash.debounce = debounce;
    lodash.defaults = defaults;
    lodash.defaultsDeep = defaultsDeep;
    lodash.defer = defer;
    lodash.delay = delay;
    lodash.difference = difference;
    lodash.differenceBy = differenceBy;
    lodash.differenceWith = differenceWith;
    lodash.drop = drop;
    lodash.dropRight = dropRight;
    lodash.dropRightWhile = dropRightWhile;
    lodash.dropWhile = dropWhile;
    lodash.fill = fill;
    lodash.filter = filter;
    lodash.flatMap = flatMap;
    lodash.flatMapDeep = flatMapDeep;
    lodash.flatMapDepth = flatMapDepth;
    lodash.flatten = flatten;
    lodash.flattenDeep = flattenDeep;
    lodash.flattenDepth = flattenDepth;
    lodash.flip = flip;
    lodash.flow = flow;
    lodash.flowRight = flowRight;
    lodash.fromPairs = fromPairs;
    lodash.functions = functions;
    lodash.functionsIn = functionsIn;
    lodash.groupBy = groupBy;
    lodash.initial = initial;
    lodash.intersection = intersection;
    lodash.intersectionBy = intersectionBy;
    lodash.intersectionWith = intersectionWith;
    lodash.invert = invert;
    lodash.invertBy = invertBy;
    lodash.invokeMap = invokeMap;
    lodash.iteratee = iteratee;
    lodash.keyBy = keyBy;
    lodash.keys = keys;
    lodash.keysIn = keysIn;
    lodash.map = map;
    lodash.mapKeys = mapKeys;
    lodash.mapValues = mapValues;
    lodash.matches = matches;
    lodash.matchesProperty = matchesProperty;
    lodash.memoize = memoize;
    lodash.merge = merge;
    lodash.mergeWith = mergeWith;
    lodash.method = method;
    lodash.methodOf = methodOf;
    lodash.mixin = mixin;
    lodash.negate = negate;
    lodash.nthArg = nthArg;
    lodash.omit = omit;
    lodash.omitBy = omitBy;
    lodash.once = once;
    lodash.orderBy = orderBy;
    lodash.over = over;
    lodash.overArgs = overArgs;
    lodash.overEvery = overEvery;
    lodash.overSome = overSome;
    lodash.partial = partial;
    lodash.partialRight = partialRight;
    lodash.partition = partition;
    lodash.pick = pick;
    lodash.pickBy = pickBy;
    lodash.property = property;
    lodash.propertyOf = propertyOf;
    lodash.pull = pull;
    lodash.pullAll = pullAll;
    lodash.pullAllBy = pullAllBy;
    lodash.pullAllWith = pullAllWith;
    lodash.pullAt = pullAt;
    lodash.range = range;
    lodash.rangeRight = rangeRight;
    lodash.rearg = rearg;
    lodash.reject = reject;
    lodash.remove = remove;
    lodash.rest = rest;
    lodash.reverse = reverse;
    lodash.sampleSize = sampleSize;
    lodash.set = set;
    lodash.setWith = setWith;
    lodash.shuffle = shuffle;
    lodash.slice = slice;
    lodash.sortBy = sortBy;
    lodash.sortedUniq = sortedUniq;
    lodash.sortedUniqBy = sortedUniqBy;
    lodash.split = split;
    lodash.spread = spread;
    lodash.tail = tail;
    lodash.take = take;
    lodash.takeRight = takeRight;
    lodash.takeRightWhile = takeRightWhile;
    lodash.takeWhile = takeWhile;
    lodash.tap = tap;
    lodash.throttle = throttle;
    lodash.thru = thru;
    lodash.toArray = toArray;
    lodash.toPairs = toPairs;
    lodash.toPairsIn = toPairsIn;
    lodash.toPath = toPath;
    lodash.toPlainObject = toPlainObject;
    lodash.transform = transform;
    lodash.unary = unary;
    lodash.union = union;
    lodash.unionBy = unionBy;
    lodash.unionWith = unionWith;
    lodash.uniq = uniq;
    lodash.uniqBy = uniqBy;
    lodash.uniqWith = uniqWith;
    lodash.unset = unset;
    lodash.unzip = unzip;
    lodash.unzipWith = unzipWith;
    lodash.update = update;
    lodash.updateWith = updateWith;
    lodash.values = values;
    lodash.valuesIn = valuesIn;
    lodash.without = without;
    lodash.words = words;
    lodash.wrap = wrap;
    lodash.xor = xor;
    lodash.xorBy = xorBy;
    lodash.xorWith = xorWith;
    lodash.zip = zip;
    lodash.zipObject = zipObject;
    lodash.zipObjectDeep = zipObjectDeep;
    lodash.zipWith = zipWith;

    // Add aliases.
    lodash.entries = toPairs;
    lodash.entriesIn = toPairsIn;
    lodash.extend = assignIn;
    lodash.extendWith = assignInWith;

    // Add methods to `lodash.prototype`.
    mixin(lodash, lodash);

    /*------------------------------------------------------------------------*/

    // Add methods that return unwrapped values in chain sequences.
    lodash.add = add;
    lodash.attempt = attempt;
    lodash.camelCase = camelCase;
    lodash.capitalize = capitalize;
    lodash.ceil = ceil;
    lodash.clamp = clamp;
    lodash.clone = clone;
    lodash.cloneDeep = cloneDeep;
    lodash.cloneDeepWith = cloneDeepWith;
    lodash.cloneWith = cloneWith;
    lodash.conformsTo = conformsTo;
    lodash.deburr = deburr;
    lodash.defaultTo = defaultTo;
    lodash.divide = divide;
    lodash.endsWith = endsWith;
    lodash.eq = eq;
    lodash.escape = escape;
    lodash.escapeRegExp = escapeRegExp;
    lodash.every = every;
    lodash.find = find;
    lodash.findIndex = findIndex;
    lodash.findKey = findKey;
    lodash.findLast = findLast;
    lodash.findLastIndex = findLastIndex;
    lodash.findLastKey = findLastKey;
    lodash.floor = floor;
    lodash.forEach = forEach;
    lodash.forEachRight = forEachRight;
    lodash.forIn = forIn;
    lodash.forInRight = forInRight;
    lodash.forOwn = forOwn;
    lodash.forOwnRight = forOwnRight;
    lodash.get = get;
    lodash.gt = gt;
    lodash.gte = gte;
    lodash.has = has;
    lodash.hasIn = hasIn;
    lodash.head = head;
    lodash.identity = identity;
    lodash.includes = includes;
    lodash.indexOf = indexOf;
    lodash.inRange = inRange;
    lodash.invoke = invoke;
    lodash.isArguments = isArguments;
    lodash.isArray = isArray;
    lodash.isArrayBuffer = isArrayBuffer;
    lodash.isArrayLike = isArrayLike;
    lodash.isArrayLikeObject = isArrayLikeObject;
    lodash.isBoolean = isBoolean;
    lodash.isBuffer = isBuffer;
    lodash.isDate = isDate;
    lodash.isElement = isElement;
    lodash.isEmpty = isEmpty;
    lodash.isEqual = isEqual;
    lodash.isEqualWith = isEqualWith;
    lodash.isError = isError;
    lodash.isFinite = isFinite;
    lodash.isFunction = isFunction;
    lodash.isInteger = isInteger;
    lodash.isLength = isLength;
    lodash.isMap = isMap;
    lodash.isMatch = isMatch;
    lodash.isMatchWith = isMatchWith;
    lodash.isNaN = isNaN;
    lodash.isNative = isNative;
    lodash.isNil = isNil;
    lodash.isNull = isNull;
    lodash.isNumber = isNumber;
    lodash.isObject = isObject;
    lodash.isObjectLike = isObjectLike;
    lodash.isPlainObject = isPlainObject;
    lodash.isRegExp = isRegExp;
    lodash.isSafeInteger = isSafeInteger;
    lodash.isSet = isSet;
    lodash.isString = isString;
    lodash.isSymbol = isSymbol;
    lodash.isTypedArray = isTypedArray;
    lodash.isUndefined = isUndefined;
    lodash.isWeakMap = isWeakMap;
    lodash.isWeakSet = isWeakSet;
    lodash.join = join;
    lodash.kebabCase = kebabCase;
    lodash.last = last;
    lodash.lastIndexOf = lastIndexOf;
    lodash.lowerCase = lowerCase;
    lodash.lowerFirst = lowerFirst;
    lodash.lt = lt;
    lodash.lte = lte;
    lodash.max = max;
    lodash.maxBy = maxBy;
    lodash.mean = mean;
    lodash.meanBy = meanBy;
    lodash.min = min;
    lodash.minBy = minBy;
    lodash.stubArray = stubArray;
    lodash.stubFalse = stubFalse;
    lodash.stubObject = stubObject;
    lodash.stubString = stubString;
    lodash.stubTrue = stubTrue;
    lodash.multiply = multiply;
    lodash.nth = nth;
    lodash.noConflict = noConflict;
    lodash.noop = noop;
    lodash.now = now;
    lodash.pad = pad;
    lodash.padEnd = padEnd;
    lodash.padStart = padStart;
    lodash.parseInt = parseInt;
    lodash.random = random;
    lodash.reduce = reduce;
    lodash.reduceRight = reduceRight;
    lodash.repeat = repeat;
    lodash.replace = replace;
    lodash.result = result;
    lodash.round = round;
    lodash.runInContext = runInContext;
    lodash.sample = sample;
    lodash.size = size;
    lodash.snakeCase = snakeCase;
    lodash.some = some;
    lodash.sortedIndex = sortedIndex;
    lodash.sortedIndexBy = sortedIndexBy;
    lodash.sortedIndexOf = sortedIndexOf;
    lodash.sortedLastIndex = sortedLastIndex;
    lodash.sortedLastIndexBy = sortedLastIndexBy;
    lodash.sortedLastIndexOf = sortedLastIndexOf;
    lodash.startCase = startCase;
    lodash.startsWith = startsWith;
    lodash.subtract = subtract;
    lodash.sum = sum;
    lodash.sumBy = sumBy;
    lodash.template = template;
    lodash.times = times;
    lodash.toFinite = toFinite;
    lodash.toInteger = toInteger;
    lodash.toLength = toLength;
    lodash.toLower = toLower;
    lodash.toNumber = toNumber;
    lodash.toSafeInteger = toSafeInteger;
    lodash.toString = toString;
    lodash.toUpper = toUpper;
    lodash.trim = trim;
    lodash.trimEnd = trimEnd;
    lodash.trimStart = trimStart;
    lodash.truncate = truncate;
    lodash.unescape = unescape;
    lodash.uniqueId = uniqueId;
    lodash.upperCase = upperCase;
    lodash.upperFirst = upperFirst;

    // Add aliases.
    lodash.each = forEach;
    lodash.eachRight = forEachRight;
    lodash.first = head;

    mixin(lodash, (function() {
      var source = {};
      baseForOwn(lodash, function(func, methodName) {
        if (!hasOwnProperty.call(lodash.prototype, methodName)) {
          source[methodName] = func;
        }
      });
      return source;
    }()), { 'chain': false });

    /*------------------------------------------------------------------------*/

    /**
     * The semantic version number.
     *
     * @static
     * @memberOf _
     * @type {string}
     */
    lodash.VERSION = VERSION;

    // Assign default placeholders.
    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
      lodash[methodName].placeholder = lodash;
    });

    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
    arrayEach(['drop', 'take'], function(methodName, index) {
      LazyWrapper.prototype[methodName] = function(n) {
        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);

        var result = (this.__filtered__ && !index)
          ? new LazyWrapper(this)
          : this.clone();

        if (result.__filtered__) {
          result.__takeCount__ = nativeMin(n, result.__takeCount__);
        } else {
          result.__views__.push({
            'size': nativeMin(n, MAX_ARRAY_LENGTH),
            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')
          });
        }
        return result;
      };

      LazyWrapper.prototype[methodName + 'Right'] = function(n) {
        return this.reverse()[methodName](n).reverse();
      };
    });

    // Add `LazyWrapper` methods that accept an `iteratee` value.
    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
      var type = index + 1,
          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;

      LazyWrapper.prototype[methodName] = function(iteratee) {
        var result = this.clone();
        result.__iteratees__.push({
          'iteratee': getIteratee(iteratee, 3),
          'type': type
        });
        result.__filtered__ = result.__filtered__ || isFilter;
        return result;
      };
    });

    // Add `LazyWrapper` methods for `_.head` and `_.last`.
    arrayEach(['head', 'last'], function(methodName, index) {
      var takeName = 'take' + (index ? 'Right' : '');

      LazyWrapper.prototype[methodName] = function() {
        return this[takeName](1).value()[0];
      };
    });

    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.
    arrayEach(['initial', 'tail'], function(methodName, index) {
      var dropName = 'drop' + (index ? '' : 'Right');

      LazyWrapper.prototype[methodName] = function() {
        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
      };
    });

    LazyWrapper.prototype.compact = function() {
      return this.filter(identity);
    };

    LazyWrapper.prototype.find = function(predicate) {
      return this.filter(predicate).head();
    };

    LazyWrapper.prototype.findLast = function(predicate) {
      return this.reverse().find(predicate);
    };

    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
      if (typeof path == 'function') {
        return new LazyWrapper(this);
      }
      return this.map(function(value) {
        return baseInvoke(value, path, args);
      });
    });

    LazyWrapper.prototype.reject = function(predicate) {
      return this.filter(negate(getIteratee(predicate)));
    };

    LazyWrapper.prototype.slice = function(start, end) {
      start = toInteger(start);

      var result = this;
      if (result.__filtered__ && (start > 0 || end < 0)) {
        return new LazyWrapper(result);
      }
      if (start < 0) {
        result = result.takeRight(-start);
      } else if (start) {
        result = result.drop(start);
      }
      if (end !== undefined) {
        end = toInteger(end);
        result = end < 0 ? result.dropRight(-end) : result.take(end - start);
      }
      return result;
    };

    LazyWrapper.prototype.takeRightWhile = function(predicate) {
      return this.reverse().takeWhile(predicate).reverse();
    };

    LazyWrapper.prototype.toArray = function() {
      return this.take(MAX_ARRAY_LENGTH);
    };

    // Add `LazyWrapper` methods to `lodash.prototype`.
    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),
          isTaker = /^(?:head|last)$/.test(methodName),
          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],
          retUnwrapped = isTaker || /^find/.test(methodName);

      if (!lodashFunc) {
        return;
      }
      lodash.prototype[methodName] = function() {
        var value = this.__wrapped__,
            args = isTaker ? [1] : arguments,
            isLazy = value instanceof LazyWrapper,
            iteratee = args[0],
            useLazy = isLazy || isArray(value);

        var interceptor = function(value) {
          var result = lodashFunc.apply(lodash, arrayPush([value], args));
          return (isTaker && chainAll) ? result[0] : result;
        };

        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
          // Avoid lazy use if the iteratee has a "length" value other than `1`.
          isLazy = useLazy = false;
        }
        var chainAll = this.__chain__,
            isHybrid = !!this.__actions__.length,
            isUnwrapped = retUnwrapped && !chainAll,
            onlyLazy = isLazy && !isHybrid;

        if (!retUnwrapped && useLazy) {
          value = onlyLazy ? value : new LazyWrapper(this);
          var result = func.apply(value, args);
          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
          return new LodashWrapper(result, chainAll);
        }
        if (isUnwrapped && onlyLazy) {
          return func.apply(this, args);
        }
        result = this.thru(interceptor);
        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;
      };
    });

    // Add `Array` methods to `lodash.prototype`.
    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
      var func = arrayProto[methodName],
          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
          retUnwrapped = /^(?:pop|shift)$/.test(methodName);

      lodash.prototype[methodName] = function() {
        var args = arguments;
        if (retUnwrapped && !this.__chain__) {
          var value = this.value();
          return func.apply(isArray(value) ? value : [], args);
        }
        return this[chainName](function(value) {
          return func.apply(isArray(value) ? value : [], args);
        });
      };
    });

    // Map minified method names to their real names.
    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
      var lodashFunc = lodash[methodName];
      if (lodashFunc) {
        var key = lodashFunc.name + '';
        if (!hasOwnProperty.call(realNames, key)) {
          realNames[key] = [];
        }
        realNames[key].push({ 'name': methodName, 'func': lodashFunc });
      }
    });

    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
      'name': 'wrapper',
      'func': undefined
    }];

    // Add methods to `LazyWrapper`.
    LazyWrapper.prototype.clone = lazyClone;
    LazyWrapper.prototype.reverse = lazyReverse;
    LazyWrapper.prototype.value = lazyValue;

    // Add chain sequence methods to the `lodash` wrapper.
    lodash.prototype.at = wrapperAt;
    lodash.prototype.chain = wrapperChain;
    lodash.prototype.commit = wrapperCommit;
    lodash.prototype.next = wrapperNext;
    lodash.prototype.plant = wrapperPlant;
    lodash.prototype.reverse = wrapperReverse;
    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;

    // Add lazy aliases.
    lodash.prototype.first = lodash.prototype.head;

    if (symIterator) {
      lodash.prototype[symIterator] = wrapperToIterator;
    }
    return lodash;
  });

  /*--------------------------------------------------------------------------*/

  // Export lodash.
  var _ = runInContext();

  // Some AMD build optimizers, like r.js, check for condition patterns like:
  if (true) {
    // Expose Lodash on the global object to prevent errors when Lodash is
    // loaded by a script tag in the presence of an AMD loader.
    // See http://requirejs.org/docs/errors.html#mismatch for more details.
    // Use `_.noConflict` to remove Lodash from the global object.
    root._ = _;

    // Define as an anonymous module so, through path mapping, it can be
    // referenced as the "underscore" module.
    !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
      return _;
    }).call(exports, __webpack_require__, exports, module),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  }
  // Check for `exports` after `define` in case a build optimizer adds it.
  else {}
}.call(this));


/***/ }),

/***/ 9591:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
// Top level file is just a mixin of submodules & constants


var assign    = (__webpack_require__(4236).assign);

var deflate   = __webpack_require__(4555);
var inflate   = __webpack_require__(8843);
var constants = __webpack_require__(1619);

var pako = {};

assign(pako, deflate, inflate, constants);

module.exports = pako;


/***/ }),

/***/ 4555:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";



var zlib_deflate = __webpack_require__(405);
var utils        = __webpack_require__(4236);
var strings      = __webpack_require__(9373);
var msg          = __webpack_require__(8898);
var ZStream      = __webpack_require__(2292);

var toString = Object.prototype.toString;

/* Public constants ==========================================================*/
/* ===========================================================================*/

var Z_NO_FLUSH      = 0;
var Z_FINISH        = 4;

var Z_OK            = 0;
var Z_STREAM_END    = 1;
var Z_SYNC_FLUSH    = 2;

var Z_DEFAULT_COMPRESSION = -1;

var Z_DEFAULT_STRATEGY    = 0;

var Z_DEFLATED  = 8;

/* ===========================================================================*/


/**
 * class Deflate
 *
 * Generic JS-style wrapper for zlib calls. If you don't need
 * streaming behaviour - use more simple functions: [[deflate]],
 * [[deflateRaw]] and [[gzip]].
 **/

/* internal
 * Deflate.chunks -> Array
 *
 * Chunks of output data, if [[Deflate#onData]] not overridden.
 **/

/**
 * Deflate.result -> Uint8Array|Array
 *
 * Compressed result, generated by default [[Deflate#onData]]
 * and [[Deflate#onEnd]] handlers. Filled after you push last chunk
 * (call [[Deflate#push]] with `Z_FINISH` / `true` param)  or if you
 * push a chunk with explicit flush (call [[Deflate#push]] with
 * `Z_SYNC_FLUSH` param).
 **/

/**
 * Deflate.err -> Number
 *
 * Error code after deflate finished. 0 (Z_OK) on success.
 * You will not need it in real life, because deflate errors
 * are possible only on wrong options or bad `onData` / `onEnd`
 * custom handlers.
 **/

/**
 * Deflate.msg -> String
 *
 * Error message, if [[Deflate.err]] != 0
 **/


/**
 * new Deflate(options)
 * - options (Object): zlib deflate options.
 *
 * Creates new deflator instance with specified params. Throws exception
 * on bad params. Supported options:
 *
 * - `level`
 * - `windowBits`
 * - `memLevel`
 * - `strategy`
 * - `dictionary`
 *
 * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
 * for more information on these.
 *
 * Additional options, for internal needs:
 *
 * - `chunkSize` - size of generated data chunks (16K by default)
 * - `raw` (Boolean) - do raw deflate
 * - `gzip` (Boolean) - create gzip wrapper
 * - `to` (String) - if equal to 'string', then result will be "binary string"
 *    (each char code [0..255])
 * - `header` (Object) - custom header for gzip
 *   - `text` (Boolean) - true if compressed data believed to be text
 *   - `time` (Number) - modification time, unix timestamp
 *   - `os` (Number) - operation system code
 *   - `extra` (Array) - array of bytes with extra data (max 65536)
 *   - `name` (String) - file name (binary string)
 *   - `comment` (String) - comment (binary string)
 *   - `hcrc` (Boolean) - true if header crc should be added
 *
 * ##### Example:
 *
 * ```javascript
 * var pako = require('pako')
 *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])
 *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);
 *
 * var deflate = new pako.Deflate({ level: 3});
 *
 * deflate.push(chunk1, false);
 * deflate.push(chunk2, true);  // true -> last chunk
 *
 * if (deflate.err) { throw new Error(deflate.err); }
 *
 * console.log(deflate.result);
 * ```
 **/
function Deflate(options) {
  if (!(this instanceof Deflate)) return new Deflate(options);

  this.options = utils.assign({
    level: Z_DEFAULT_COMPRESSION,
    method: Z_DEFLATED,
    chunkSize: 16384,
    windowBits: 15,
    memLevel: 8,
    strategy: Z_DEFAULT_STRATEGY,
    to: ''
  }, options || {});

  var opt = this.options;

  if (opt.raw && (opt.windowBits > 0)) {
    opt.windowBits = -opt.windowBits;
  }

  else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {
    opt.windowBits += 16;
  }

  this.err    = 0;      // error code, if happens (0 = Z_OK)
  this.msg    = '';     // error message
  this.ended  = false;  // used to avoid multiple onEnd() calls
  this.chunks = [];     // chunks of compressed data

  this.strm = new ZStream();
  this.strm.avail_out = 0;

  var status = zlib_deflate.deflateInit2(
    this.strm,
    opt.level,
    opt.method,
    opt.windowBits,
    opt.memLevel,
    opt.strategy
  );

  if (status !== Z_OK) {
    throw new Error(msg[status]);
  }

  if (opt.header) {
    zlib_deflate.deflateSetHeader(this.strm, opt.header);
  }

  if (opt.dictionary) {
    var dict;
    // Convert data if needed
    if (typeof opt.dictionary === 'string') {
      // If we need to compress text, change encoding to utf8.
      dict = strings.string2buf(opt.dictionary);
    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {
      dict = new Uint8Array(opt.dictionary);
    } else {
      dict = opt.dictionary;
    }

    status = zlib_deflate.deflateSetDictionary(this.strm, dict);

    if (status !== Z_OK) {
      throw new Error(msg[status]);
    }

    this._dict_set = true;
  }
}

/**
 * Deflate#push(data[, mode]) -> Boolean
 * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be
 *   converted to utf8 byte sequence.
 * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
 *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.
 *
 * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with
 * new compressed chunks. Returns `true` on success. The last data block must have
 * mode Z_FINISH (or `true`). That will flush internal pending buffers and call
 * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you
 * can use mode Z_SYNC_FLUSH, keeping the compression context.
 *
 * On fail call [[Deflate#onEnd]] with error code and return false.
 *
 * We strongly recommend to use `Uint8Array` on input for best speed (output
 * array format is detected automatically). Also, don't skip last param and always
 * use the same type in your code (boolean or number). That will improve JS speed.
 *
 * For regular `Array`-s make sure all elements are [0..255].
 *
 * ##### Example
 *
 * ```javascript
 * push(chunk, false); // push one of data chunks
 * ...
 * push(chunk, true);  // push last chunk
 * ```
 **/
Deflate.prototype.push = function (data, mode) {
  var strm = this.strm;
  var chunkSize = this.options.chunkSize;
  var status, _mode;

  if (this.ended) { return false; }

  _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);

  // Convert data if needed
  if (typeof data === 'string') {
    // If we need to compress text, change encoding to utf8.
    strm.input = strings.string2buf(data);
  } else if (toString.call(data) === '[object ArrayBuffer]') {
    strm.input = new Uint8Array(data);
  } else {
    strm.input = data;
  }

  strm.next_in = 0;
  strm.avail_in = strm.input.length;

  do {
    if (strm.avail_out === 0) {
      strm.output = new utils.Buf8(chunkSize);
      strm.next_out = 0;
      strm.avail_out = chunkSize;
    }
    status = zlib_deflate.deflate(strm, _mode);    /* no bad return value */

    if (status !== Z_STREAM_END && status !== Z_OK) {
      this.onEnd(status);
      this.ended = true;
      return false;
    }
    if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {
      if (this.options.to === 'string') {
        this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));
      } else {
        this.onData(utils.shrinkBuf(strm.output, strm.next_out));
      }
    }
  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);

  // Finalize on the last chunk.
  if (_mode === Z_FINISH) {
    status = zlib_deflate.deflateEnd(this.strm);
    this.onEnd(status);
    this.ended = true;
    return status === Z_OK;
  }

  // callback interim results if Z_SYNC_FLUSH.
  if (_mode === Z_SYNC_FLUSH) {
    this.onEnd(Z_OK);
    strm.avail_out = 0;
    return true;
  }

  return true;
};


/**
 * Deflate#onData(chunk) -> Void
 * - chunk (Uint8Array|Array|String): output data. Type of array depends
 *   on js engine support. When string output requested, each chunk
 *   will be string.
 *
 * By default, stores data blocks in `chunks[]` property and glue
 * those in `onEnd`. Override this handler, if you need another behaviour.
 **/
Deflate.prototype.onData = function (chunk) {
  this.chunks.push(chunk);
};


/**
 * Deflate#onEnd(status) -> Void
 * - status (Number): deflate status. 0 (Z_OK) on success,
 *   other if not.
 *
 * Called once after you tell deflate that the input stream is
 * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)
 * or if an error happened. By default - join collected chunks,
 * free memory and fill `results` / `err` properties.
 **/
Deflate.prototype.onEnd = function (status) {
  // On success - join
  if (status === Z_OK) {
    if (this.options.to === 'string') {
      this.result = this.chunks.join('');
    } else {
      this.result = utils.flattenChunks(this.chunks);
    }
  }
  this.chunks = [];
  this.err = status;
  this.msg = this.strm.msg;
};


/**
 * deflate(data[, options]) -> Uint8Array|Array|String
 * - data (Uint8Array|Array|String): input data to compress.
 * - options (Object): zlib deflate options.
 *
 * Compress `data` with deflate algorithm and `options`.
 *
 * Supported options are:
 *
 * - level
 * - windowBits
 * - memLevel
 * - strategy
 * - dictionary
 *
 * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
 * for more information on these.
 *
 * Sugar (options):
 *
 * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
 *   negative windowBits implicitly.
 * - `to` (String) - if equal to 'string', then result will be "binary string"
 *    (each char code [0..255])
 *
 * ##### Example:
 *
 * ```javascript
 * var pako = require('pako')
 *   , data = Uint8Array([1,2,3,4,5,6,7,8,9]);
 *
 * console.log(pako.deflate(data));
 * ```
 **/
function deflate(input, options) {
  var deflator = new Deflate(options);

  deflator.push(input, true);

  // That will never happens, if you don't cheat with options :)
  if (deflator.err) { throw deflator.msg || msg[deflator.err]; }

  return deflator.result;
}


/**
 * deflateRaw(data[, options]) -> Uint8Array|Array|String
 * - data (Uint8Array|Array|String): input data to compress.
 * - options (Object): zlib deflate options.
 *
 * The same as [[deflate]], but creates raw data, without wrapper
 * (header and adler32 crc).
 **/
function deflateRaw(input, options) {
  options = options || {};
  options.raw = true;
  return deflate(input, options);
}


/**
 * gzip(data[, options]) -> Uint8Array|Array|String
 * - data (Uint8Array|Array|String): input data to compress.
 * - options (Object): zlib deflate options.
 *
 * The same as [[deflate]], but create gzip wrapper instead of
 * deflate one.
 **/
function gzip(input, options) {
  options = options || {};
  options.gzip = true;
  return deflate(input, options);
}


exports.Deflate = Deflate;
exports.deflate = deflate;
exports.deflateRaw = deflateRaw;
exports.gzip = gzip;


/***/ }),

/***/ 8843:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";



var zlib_inflate = __webpack_require__(7948);
var utils        = __webpack_require__(4236);
var strings      = __webpack_require__(9373);
var c            = __webpack_require__(1619);
var msg          = __webpack_require__(8898);
var ZStream      = __webpack_require__(2292);
var GZheader     = __webpack_require__(2401);

var toString = Object.prototype.toString;

/**
 * class Inflate
 *
 * Generic JS-style wrapper for zlib calls. If you don't need
 * streaming behaviour - use more simple functions: [[inflate]]
 * and [[inflateRaw]].
 **/

/* internal
 * inflate.chunks -> Array
 *
 * Chunks of output data, if [[Inflate#onData]] not overridden.
 **/

/**
 * Inflate.result -> Uint8Array|Array|String
 *
 * Uncompressed result, generated by default [[Inflate#onData]]
 * and [[Inflate#onEnd]] handlers. Filled after you push last chunk
 * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you
 * push a chunk with explicit flush (call [[Inflate#push]] with
 * `Z_SYNC_FLUSH` param).
 **/

/**
 * Inflate.err -> Number
 *
 * Error code after inflate finished. 0 (Z_OK) on success.
 * Should be checked if broken data possible.
 **/

/**
 * Inflate.msg -> String
 *
 * Error message, if [[Inflate.err]] != 0
 **/


/**
 * new Inflate(options)
 * - options (Object): zlib inflate options.
 *
 * Creates new inflator instance with specified params. Throws exception
 * on bad params. Supported options:
 *
 * - `windowBits`
 * - `dictionary`
 *
 * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
 * for more information on these.
 *
 * Additional options, for internal needs:
 *
 * - `chunkSize` - size of generated data chunks (16K by default)
 * - `raw` (Boolean) - do raw inflate
 * - `to` (String) - if equal to 'string', then result will be converted
 *   from utf8 to utf16 (javascript) string. When string output requested,
 *   chunk length can differ from `chunkSize`, depending on content.
 *
 * By default, when no options set, autodetect deflate/gzip data format via
 * wrapper header.
 *
 * ##### Example:
 *
 * ```javascript
 * var pako = require('pako')
 *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])
 *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);
 *
 * var inflate = new pako.Inflate({ level: 3});
 *
 * inflate.push(chunk1, false);
 * inflate.push(chunk2, true);  // true -> last chunk
 *
 * if (inflate.err) { throw new Error(inflate.err); }
 *
 * console.log(inflate.result);
 * ```
 **/
function Inflate(options) {
  if (!(this instanceof Inflate)) return new Inflate(options);

  this.options = utils.assign({
    chunkSize: 16384,
    windowBits: 0,
    to: ''
  }, options || {});

  var opt = this.options;

  // Force window size for `raw` data, if not set directly,
  // because we have no header for autodetect.
  if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {
    opt.windowBits = -opt.windowBits;
    if (opt.windowBits === 0) { opt.windowBits = -15; }
  }

  // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate
  if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&
      !(options && options.windowBits)) {
    opt.windowBits += 32;
  }

  // Gzip header has no info about windows size, we can do autodetect only
  // for deflate. So, if window size not set, force it to max when gzip possible
  if ((opt.windowBits > 15) && (opt.windowBits < 48)) {
    // bit 3 (16) -> gzipped data
    // bit 4 (32) -> autodetect gzip/deflate
    if ((opt.windowBits & 15) === 0) {
      opt.windowBits |= 15;
    }
  }

  this.err    = 0;      // error code, if happens (0 = Z_OK)
  this.msg    = '';     // error message
  this.ended  = false;  // used to avoid multiple onEnd() calls
  this.chunks = [];     // chunks of compressed data

  this.strm   = new ZStream();
  this.strm.avail_out = 0;

  var status  = zlib_inflate.inflateInit2(
    this.strm,
    opt.windowBits
  );

  if (status !== c.Z_OK) {
    throw new Error(msg[status]);
  }

  this.header = new GZheader();

  zlib_inflate.inflateGetHeader(this.strm, this.header);

  // Setup dictionary
  if (opt.dictionary) {
    // Convert data if needed
    if (typeof opt.dictionary === 'string') {
      opt.dictionary = strings.string2buf(opt.dictionary);
    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {
      opt.dictionary = new Uint8Array(opt.dictionary);
    }
    if (opt.raw) { //In raw mode we need to set the dictionary early
      status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);
      if (status !== c.Z_OK) {
        throw new Error(msg[status]);
      }
    }
  }
}

/**
 * Inflate#push(data[, mode]) -> Boolean
 * - data (Uint8Array|Array|ArrayBuffer|String): input data
 * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
 *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.
 *
 * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with
 * new output chunks. Returns `true` on success. The last data block must have
 * mode Z_FINISH (or `true`). That will flush internal pending buffers and call
 * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you
 * can use mode Z_SYNC_FLUSH, keeping the decompression context.
 *
 * On fail call [[Inflate#onEnd]] with error code and return false.
 *
 * We strongly recommend to use `Uint8Array` on input for best speed (output
 * format is detected automatically). Also, don't skip last param and always
 * use the same type in your code (boolean or number). That will improve JS speed.
 *
 * For regular `Array`-s make sure all elements are [0..255].
 *
 * ##### Example
 *
 * ```javascript
 * push(chunk, false); // push one of data chunks
 * ...
 * push(chunk, true);  // push last chunk
 * ```
 **/
Inflate.prototype.push = function (data, mode) {
  var strm = this.strm;
  var chunkSize = this.options.chunkSize;
  var dictionary = this.options.dictionary;
  var status, _mode;
  var next_out_utf8, tail, utf8str;

  // Flag to properly process Z_BUF_ERROR on testing inflate call
  // when we check that all output data was flushed.
  var allowBufError = false;

  if (this.ended) { return false; }
  _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);

  // Convert data if needed
  if (typeof data === 'string') {
    // Only binary strings can be decompressed on practice
    strm.input = strings.binstring2buf(data);
  } else if (toString.call(data) === '[object ArrayBuffer]') {
    strm.input = new Uint8Array(data);
  } else {
    strm.input = data;
  }

  strm.next_in = 0;
  strm.avail_in = strm.input.length;

  do {
    if (strm.avail_out === 0) {
      strm.output = new utils.Buf8(chunkSize);
      strm.next_out = 0;
      strm.avail_out = chunkSize;
    }

    status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);    /* no bad return value */

    if (status === c.Z_NEED_DICT && dictionary) {
      status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);
    }

    if (status === c.Z_BUF_ERROR && allowBufError === true) {
      status = c.Z_OK;
      allowBufError = false;
    }

    if (status !== c.Z_STREAM_END && status !== c.Z_OK) {
      this.onEnd(status);
      this.ended = true;
      return false;
    }

    if (strm.next_out) {
      if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {

        if (this.options.to === 'string') {

          next_out_utf8 = strings.utf8border(strm.output, strm.next_out);

          tail = strm.next_out - next_out_utf8;
          utf8str = strings.buf2string(strm.output, next_out_utf8);

          // move tail
          strm.next_out = tail;
          strm.avail_out = chunkSize - tail;
          if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }

          this.onData(utf8str);

        } else {
          this.onData(utils.shrinkBuf(strm.output, strm.next_out));
        }
      }
    }

    // When no more input data, we should check that internal inflate buffers
    // are flushed. The only way to do it when avail_out = 0 - run one more
    // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.
    // Here we set flag to process this error properly.
    //
    // NOTE. Deflate does not return error in this case and does not needs such
    // logic.
    if (strm.avail_in === 0 && strm.avail_out === 0) {
      allowBufError = true;
    }

  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);

  if (status === c.Z_STREAM_END) {
    _mode = c.Z_FINISH;
  }

  // Finalize on the last chunk.
  if (_mode === c.Z_FINISH) {
    status = zlib_inflate.inflateEnd(this.strm);
    this.onEnd(status);
    this.ended = true;
    return status === c.Z_OK;
  }

  // callback interim results if Z_SYNC_FLUSH.
  if (_mode === c.Z_SYNC_FLUSH) {
    this.onEnd(c.Z_OK);
    strm.avail_out = 0;
    return true;
  }

  return true;
};


/**
 * Inflate#onData(chunk) -> Void
 * - chunk (Uint8Array|Array|String): output data. Type of array depends
 *   on js engine support. When string output requested, each chunk
 *   will be string.
 *
 * By default, stores data blocks in `chunks[]` property and glue
 * those in `onEnd`. Override this handler, if you need another behaviour.
 **/
Inflate.prototype.onData = function (chunk) {
  this.chunks.push(chunk);
};


/**
 * Inflate#onEnd(status) -> Void
 * - status (Number): inflate status. 0 (Z_OK) on success,
 *   other if not.
 *
 * Called either after you tell inflate that the input stream is
 * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)
 * or if an error happened. By default - join collected chunks,
 * free memory and fill `results` / `err` properties.
 **/
Inflate.prototype.onEnd = function (status) {
  // On success - join
  if (status === c.Z_OK) {
    if (this.options.to === 'string') {
      // Glue & convert here, until we teach pako to send
      // utf8 aligned strings to onData
      this.result = this.chunks.join('');
    } else {
      this.result = utils.flattenChunks(this.chunks);
    }
  }
  this.chunks = [];
  this.err = status;
  this.msg = this.strm.msg;
};


/**
 * inflate(data[, options]) -> Uint8Array|Array|String
 * - data (Uint8Array|Array|String): input data to decompress.
 * - options (Object): zlib inflate options.
 *
 * Decompress `data` with inflate/ungzip and `options`. Autodetect
 * format via wrapper header by default. That's why we don't provide
 * separate `ungzip` method.
 *
 * Supported options are:
 *
 * - windowBits
 *
 * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
 * for more information.
 *
 * Sugar (options):
 *
 * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
 *   negative windowBits implicitly.
 * - `to` (String) - if equal to 'string', then result will be converted
 *   from utf8 to utf16 (javascript) string. When string output requested,
 *   chunk length can differ from `chunkSize`, depending on content.
 *
 *
 * ##### Example:
 *
 * ```javascript
 * var pako = require('pako')
 *   , input = pako.deflate([1,2,3,4,5,6,7,8,9])
 *   , output;
 *
 * try {
 *   output = pako.inflate(input);
 * } catch (err)
 *   console.log(err);
 * }
 * ```
 **/
function inflate(input, options) {
  var inflator = new Inflate(options);

  inflator.push(input, true);

  // That will never happens, if you don't cheat with options :)
  if (inflator.err) { throw inflator.msg || msg[inflator.err]; }

  return inflator.result;
}


/**
 * inflateRaw(data[, options]) -> Uint8Array|Array|String
 * - data (Uint8Array|Array|String): input data to decompress.
 * - options (Object): zlib inflate options.
 *
 * The same as [[inflate]], but creates raw data, without wrapper
 * (header and adler32 crc).
 **/
function inflateRaw(input, options) {
  options = options || {};
  options.raw = true;
  return inflate(input, options);
}


/**
 * ungzip(data[, options]) -> Uint8Array|Array|String
 * - data (Uint8Array|Array|String): input data to decompress.
 * - options (Object): zlib inflate options.
 *
 * Just shortcut to [[inflate]], because it autodetects format
 * by header.content. Done for convenience.
 **/


exports.Inflate = Inflate;
exports.inflate = inflate;
exports.inflateRaw = inflateRaw;
exports.ungzip  = inflate;


/***/ }),

/***/ 4236:
/***/ ((__unused_webpack_module, exports) => {

"use strict";



var TYPED_OK =  (typeof Uint8Array !== 'undefined') &&
                (typeof Uint16Array !== 'undefined') &&
                (typeof Int32Array !== 'undefined');

function _has(obj, key) {
  return Object.prototype.hasOwnProperty.call(obj, key);
}

exports.assign = function (obj /*from1, from2, from3, ...*/) {
  var sources = Array.prototype.slice.call(arguments, 1);
  while (sources.length) {
    var source = sources.shift();
    if (!source) { continue; }

    if (typeof source !== 'object') {
      throw new TypeError(source + 'must be non-object');
    }

    for (var p in source) {
      if (_has(source, p)) {
        obj[p] = source[p];
      }
    }
  }

  return obj;
};


// reduce buffer size, avoiding mem copy
exports.shrinkBuf = function (buf, size) {
  if (buf.length === size) { return buf; }
  if (buf.subarray) { return buf.subarray(0, size); }
  buf.length = size;
  return buf;
};


var fnTyped = {
  arraySet: function (dest, src, src_offs, len, dest_offs) {
    if (src.subarray && dest.subarray) {
      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);
      return;
    }
    // Fallback to ordinary array
    for (var i = 0; i < len; i++) {
      dest[dest_offs + i] = src[src_offs + i];
    }
  },
  // Join array of chunks to single array.
  flattenChunks: function (chunks) {
    var i, l, len, pos, chunk, result;

    // calculate data length
    len = 0;
    for (i = 0, l = chunks.length; i < l; i++) {
      len += chunks[i].length;
    }

    // join chunks
    result = new Uint8Array(len);
    pos = 0;
    for (i = 0, l = chunks.length; i < l; i++) {
      chunk = chunks[i];
      result.set(chunk, pos);
      pos += chunk.length;
    }

    return result;
  }
};

var fnUntyped = {
  arraySet: function (dest, src, src_offs, len, dest_offs) {
    for (var i = 0; i < len; i++) {
      dest[dest_offs + i] = src[src_offs + i];
    }
  },
  // Join array of chunks to single array.
  flattenChunks: function (chunks) {
    return [].concat.apply([], chunks);
  }
};


// Enable/Disable typed arrays use, for testing
//
exports.setTyped = function (on) {
  if (on) {
    exports.Buf8  = Uint8Array;
    exports.Buf16 = Uint16Array;
    exports.Buf32 = Int32Array;
    exports.assign(exports, fnTyped);
  } else {
    exports.Buf8  = Array;
    exports.Buf16 = Array;
    exports.Buf32 = Array;
    exports.assign(exports, fnUntyped);
  }
};

exports.setTyped(TYPED_OK);


/***/ }),

/***/ 9373:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
// String encode/decode helpers



var utils = __webpack_require__(4236);


// Quick check if we can use fast array to bin string conversion
//
// - apply(Array) can fail on Android 2.2
// - apply(Uint8Array) can fail on iOS 5.1 Safari
//
var STR_APPLY_OK = true;
var STR_APPLY_UIA_OK = true;

try { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }
try { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }


// Table with utf8 lengths (calculated by first byte of sequence)
// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,
// because max possible codepoint is 0x10ffff
var _utf8len = new utils.Buf8(256);
for (var q = 0; q < 256; q++) {
  _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);
}
_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start


// convert string to array (typed, when possible)
exports.string2buf = function (str) {
  var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;

  // count binary size
  for (m_pos = 0; m_pos < str_len; m_pos++) {
    c = str.charCodeAt(m_pos);
    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {
      c2 = str.charCodeAt(m_pos + 1);
      if ((c2 & 0xfc00) === 0xdc00) {
        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
        m_pos++;
      }
    }
    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;
  }

  // allocate buffer
  buf = new utils.Buf8(buf_len);

  // convert
  for (i = 0, m_pos = 0; i < buf_len; m_pos++) {
    c = str.charCodeAt(m_pos);
    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {
      c2 = str.charCodeAt(m_pos + 1);
      if ((c2 & 0xfc00) === 0xdc00) {
        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
        m_pos++;
      }
    }
    if (c < 0x80) {
      /* one byte */
      buf[i++] = c;
    } else if (c < 0x800) {
      /* two bytes */
      buf[i++] = 0xC0 | (c >>> 6);
      buf[i++] = 0x80 | (c & 0x3f);
    } else if (c < 0x10000) {
      /* three bytes */
      buf[i++] = 0xE0 | (c >>> 12);
      buf[i++] = 0x80 | (c >>> 6 & 0x3f);
      buf[i++] = 0x80 | (c & 0x3f);
    } else {
      /* four bytes */
      buf[i++] = 0xf0 | (c >>> 18);
      buf[i++] = 0x80 | (c >>> 12 & 0x3f);
      buf[i++] = 0x80 | (c >>> 6 & 0x3f);
      buf[i++] = 0x80 | (c & 0x3f);
    }
  }

  return buf;
};

// Helper (used in 2 places)
function buf2binstring(buf, len) {
  // On Chrome, the arguments in a function call that are allowed is `65534`.
  // If the length of the buffer is smaller than that, we can use this optimization,
  // otherwise we will take a slower path.
  if (len < 65534) {
    if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {
      return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));
    }
  }

  var result = '';
  for (var i = 0; i < len; i++) {
    result += String.fromCharCode(buf[i]);
  }
  return result;
}


// Convert byte array to binary string
exports.buf2binstring = function (buf) {
  return buf2binstring(buf, buf.length);
};


// Convert binary string (typed, when possible)
exports.binstring2buf = function (str) {
  var buf = new utils.Buf8(str.length);
  for (var i = 0, len = buf.length; i < len; i++) {
    buf[i] = str.charCodeAt(i);
  }
  return buf;
};


// convert array to string
exports.buf2string = function (buf, max) {
  var i, out, c, c_len;
  var len = max || buf.length;

  // Reserve max possible length (2 words per char)
  // NB: by unknown reasons, Array is significantly faster for
  //     String.fromCharCode.apply than Uint16Array.
  var utf16buf = new Array(len * 2);

  for (out = 0, i = 0; i < len;) {
    c = buf[i++];
    // quick process ascii
    if (c < 0x80) { utf16buf[out++] = c; continue; }

    c_len = _utf8len[c];
    // skip 5 & 6 byte codes
    if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }

    // apply mask on first byte
    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;
    // join the rest
    while (c_len > 1 && i < len) {
      c = (c << 6) | (buf[i++] & 0x3f);
      c_len--;
    }

    // terminated by end of string?
    if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }

    if (c < 0x10000) {
      utf16buf[out++] = c;
    } else {
      c -= 0x10000;
      utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);
      utf16buf[out++] = 0xdc00 | (c & 0x3ff);
    }
  }

  return buf2binstring(utf16buf, out);
};


// Calculate max possible position in utf8 buffer,
// that will not break sequence. If that's not possible
// - (very small limits) return max size as is.
//
// buf[] - utf8 bytes array
// max   - length limit (mandatory);
exports.utf8border = function (buf, max) {
  var pos;

  max = max || buf.length;
  if (max > buf.length) { max = buf.length; }

  // go back from last position, until start of sequence found
  pos = max - 1;
  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }

  // Very small and broken sequence,
  // return max, because we should return something anyway.
  if (pos < 0) { return max; }

  // If we came to start of buffer - that means buffer is too small,
  // return max too.
  if (pos === 0) { return max; }

  return (pos + _utf8len[buf[pos]] > max) ? pos : max;
};


/***/ }),

/***/ 6069:
/***/ ((module) => {

"use strict";


// Note: adler32 takes 12% for level 0 and 2% for level 6.
// It isn't worth it to make additional optimizations as in original.
// Small size is preferable.

// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

function adler32(adler, buf, len, pos) {
  var s1 = (adler & 0xffff) |0,
      s2 = ((adler >>> 16) & 0xffff) |0,
      n = 0;

  while (len !== 0) {
    // Set limit ~ twice less than 5552, to keep
    // s2 in 31-bits, because we force signed ints.
    // in other case %= will fail.
    n = len > 2000 ? 2000 : len;
    len -= n;

    do {
      s1 = (s1 + buf[pos++]) |0;
      s2 = (s2 + s1) |0;
    } while (--n);

    s1 %= 65521;
    s2 %= 65521;
  }

  return (s1 | (s2 << 16)) |0;
}


module.exports = adler32;


/***/ }),

/***/ 1619:
/***/ ((module) => {

"use strict";


// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

module.exports = {

  /* Allowed flush values; see deflate() and inflate() below for details */
  Z_NO_FLUSH:         0,
  Z_PARTIAL_FLUSH:    1,
  Z_SYNC_FLUSH:       2,
  Z_FULL_FLUSH:       3,
  Z_FINISH:           4,
  Z_BLOCK:            5,
  Z_TREES:            6,

  /* Return codes for the compression/decompression functions. Negative values
  * are errors, positive values are used for special but normal events.
  */
  Z_OK:               0,
  Z_STREAM_END:       1,
  Z_NEED_DICT:        2,
  Z_ERRNO:           -1,
  Z_STREAM_ERROR:    -2,
  Z_DATA_ERROR:      -3,
  //Z_MEM_ERROR:     -4,
  Z_BUF_ERROR:       -5,
  //Z_VERSION_ERROR: -6,

  /* compression levels */
  Z_NO_COMPRESSION:         0,
  Z_BEST_SPEED:             1,
  Z_BEST_COMPRESSION:       9,
  Z_DEFAULT_COMPRESSION:   -1,


  Z_FILTERED:               1,
  Z_HUFFMAN_ONLY:           2,
  Z_RLE:                    3,
  Z_FIXED:                  4,
  Z_DEFAULT_STRATEGY:       0,

  /* Possible values of the data_type field (though see inflate()) */
  Z_BINARY:                 0,
  Z_TEXT:                   1,
  //Z_ASCII:                1, // = Z_TEXT (deprecated)
  Z_UNKNOWN:                2,

  /* The deflate compression method */
  Z_DEFLATED:               8
  //Z_NULL:                 null // Use -1 or null inline, depending on var type
};


/***/ }),

/***/ 1806:
/***/ ((module) => {

"use strict";


// Note: we can't get significant speed boost here.
// So write code to minimize size - no pregenerated tables
// and array tools dependencies.

// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

// Use ordinary array, since untyped makes no boost here
function makeTable() {
  var c, table = [];

  for (var n = 0; n < 256; n++) {
    c = n;
    for (var k = 0; k < 8; k++) {
      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
    }
    table[n] = c;
  }

  return table;
}

// Create table on load. Just 255 signed longs. Not a problem.
var crcTable = makeTable();


function crc32(crc, buf, len, pos) {
  var t = crcTable,
      end = pos + len;

  crc ^= -1;

  for (var i = pos; i < end; i++) {
    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
  }

  return (crc ^ (-1)); // >>> 0;
}


module.exports = crc32;


/***/ }),

/***/ 405:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

var utils   = __webpack_require__(4236);
var trees   = __webpack_require__(342);
var adler32 = __webpack_require__(6069);
var crc32   = __webpack_require__(1806);
var msg     = __webpack_require__(8898);

/* Public constants ==========================================================*/
/* ===========================================================================*/


/* Allowed flush values; see deflate() and inflate() below for details */
var Z_NO_FLUSH      = 0;
var Z_PARTIAL_FLUSH = 1;
//var Z_SYNC_FLUSH    = 2;
var Z_FULL_FLUSH    = 3;
var Z_FINISH        = 4;
var Z_BLOCK         = 5;
//var Z_TREES         = 6;


/* Return codes for the compression/decompression functions. Negative values
 * are errors, positive values are used for special but normal events.
 */
var Z_OK            = 0;
var Z_STREAM_END    = 1;
//var Z_NEED_DICT     = 2;
//var Z_ERRNO         = -1;
var Z_STREAM_ERROR  = -2;
var Z_DATA_ERROR    = -3;
//var Z_MEM_ERROR     = -4;
var Z_BUF_ERROR     = -5;
//var Z_VERSION_ERROR = -6;


/* compression levels */
//var Z_NO_COMPRESSION      = 0;
//var Z_BEST_SPEED          = 1;
//var Z_BEST_COMPRESSION    = 9;
var Z_DEFAULT_COMPRESSION = -1;


var Z_FILTERED            = 1;
var Z_HUFFMAN_ONLY        = 2;
var Z_RLE                 = 3;
var Z_FIXED               = 4;
var Z_DEFAULT_STRATEGY    = 0;

/* Possible values of the data_type field (though see inflate()) */
//var Z_BINARY              = 0;
//var Z_TEXT                = 1;
//var Z_ASCII               = 1; // = Z_TEXT
var Z_UNKNOWN             = 2;


/* The deflate compression method */
var Z_DEFLATED  = 8;

/*============================================================================*/


var MAX_MEM_LEVEL = 9;
/* Maximum value for memLevel in deflateInit2 */
var MAX_WBITS = 15;
/* 32K LZ77 window */
var DEF_MEM_LEVEL = 8;


var LENGTH_CODES  = 29;
/* number of length codes, not counting the special END_BLOCK code */
var LITERALS      = 256;
/* number of literal bytes 0..255 */
var L_CODES       = LITERALS + 1 + LENGTH_CODES;
/* number of Literal or Length codes, including the END_BLOCK code */
var D_CODES       = 30;
/* number of distance codes */
var BL_CODES      = 19;
/* number of codes used to transfer the bit lengths */
var HEAP_SIZE     = 2 * L_CODES + 1;
/* maximum heap size */
var MAX_BITS  = 15;
/* All codes must not exceed MAX_BITS bits */

var MIN_MATCH = 3;
var MAX_MATCH = 258;
var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);

var PRESET_DICT = 0x20;

var INIT_STATE = 42;
var EXTRA_STATE = 69;
var NAME_STATE = 73;
var COMMENT_STATE = 91;
var HCRC_STATE = 103;
var BUSY_STATE = 113;
var FINISH_STATE = 666;

var BS_NEED_MORE      = 1; /* block not completed, need more input or more output */
var BS_BLOCK_DONE     = 2; /* block flush performed */
var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */
var BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */

var OS_CODE = 0x03; // Unix :) . Don't detect, use this default.

function err(strm, errorCode) {
  strm.msg = msg[errorCode];
  return errorCode;
}

function rank(f) {
  return ((f) << 1) - ((f) > 4 ? 9 : 0);
}

function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }


/* =========================================================================
 * Flush as much pending output as possible. All deflate() output goes
 * through this function so some applications may wish to modify it
 * to avoid allocating a large strm->output buffer and copying into it.
 * (See also read_buf()).
 */
function flush_pending(strm) {
  var s = strm.state;

  //_tr_flush_bits(s);
  var len = s.pending;
  if (len > strm.avail_out) {
    len = strm.avail_out;
  }
  if (len === 0) { return; }

  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);
  strm.next_out += len;
  s.pending_out += len;
  strm.total_out += len;
  strm.avail_out -= len;
  s.pending -= len;
  if (s.pending === 0) {
    s.pending_out = 0;
  }
}


function flush_block_only(s, last) {
  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);
  s.block_start = s.strstart;
  flush_pending(s.strm);
}


function put_byte(s, b) {
  s.pending_buf[s.pending++] = b;
}


/* =========================================================================
 * Put a short in the pending buffer. The 16-bit value is put in MSB order.
 * IN assertion: the stream state is correct and there is enough room in
 * pending_buf.
 */
function putShortMSB(s, b) {
//  put_byte(s, (Byte)(b >> 8));
//  put_byte(s, (Byte)(b & 0xff));
  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;
  s.pending_buf[s.pending++] = b & 0xff;
}


/* ===========================================================================
 * Read a new buffer from the current input stream, update the adler32
 * and total number of bytes read.  All deflate() input goes through
 * this function so some applications may wish to modify it to avoid
 * allocating a large strm->input buffer and copying from it.
 * (See also flush_pending()).
 */
function read_buf(strm, buf, start, size) {
  var len = strm.avail_in;

  if (len > size) { len = size; }
  if (len === 0) { return 0; }

  strm.avail_in -= len;

  // zmemcpy(buf, strm->next_in, len);
  utils.arraySet(buf, strm.input, strm.next_in, len, start);
  if (strm.state.wrap === 1) {
    strm.adler = adler32(strm.adler, buf, len, start);
  }

  else if (strm.state.wrap === 2) {
    strm.adler = crc32(strm.adler, buf, len, start);
  }

  strm.next_in += len;
  strm.total_in += len;

  return len;
}


/* ===========================================================================
 * Set match_start to the longest match starting at the given string and
 * return its length. Matches shorter or equal to prev_length are discarded,
 * in which case the result is equal to prev_length and match_start is
 * garbage.
 * IN assertions: cur_match is the head of the hash chain for the current
 *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
 * OUT assertion: the match length is not greater than s->lookahead.
 */
function longest_match(s, cur_match) {
  var chain_length = s.max_chain_length;      /* max hash chain length */
  var scan = s.strstart; /* current string */
  var match;                       /* matched string */
  var len;                           /* length of current match */
  var best_len = s.prev_length;              /* best match length so far */
  var nice_match = s.nice_match;             /* stop if match long enough */
  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?
      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;

  var _win = s.window; // shortcut

  var wmask = s.w_mask;
  var prev  = s.prev;

  /* Stop when cur_match becomes <= limit. To simplify the code,
   * we prevent matches with the string of window index 0.
   */

  var strend = s.strstart + MAX_MATCH;
  var scan_end1  = _win[scan + best_len - 1];
  var scan_end   = _win[scan + best_len];

  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
   * It is easy to get rid of this optimization if necessary.
   */
  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");

  /* Do not waste too much time if we already have a good match: */
  if (s.prev_length >= s.good_match) {
    chain_length >>= 2;
  }
  /* Do not look for matches beyond the end of the input. This is necessary
   * to make deflate deterministic.
   */
  if (nice_match > s.lookahead) { nice_match = s.lookahead; }

  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");

  do {
    // Assert(cur_match < s->strstart, "no future");
    match = cur_match;

    /* Skip to next match if the match length cannot increase
     * or if the match length is less than 2.  Note that the checks below
     * for insufficient lookahead only occur occasionally for performance
     * reasons.  Therefore uninitialized memory will be accessed, and
     * conditional jumps will be made that depend on those values.
     * However the length of the match is limited to the lookahead, so
     * the output of deflate is not affected by the uninitialized values.
     */

    if (_win[match + best_len]     !== scan_end  ||
        _win[match + best_len - 1] !== scan_end1 ||
        _win[match]                !== _win[scan] ||
        _win[++match]              !== _win[scan + 1]) {
      continue;
    }

    /* The check at best_len-1 can be removed because it will be made
     * again later. (This heuristic is not always a win.)
     * It is not necessary to compare scan[2] and match[2] since they
     * are always equal when the other bytes match, given that
     * the hash keys are equal and that HASH_BITS >= 8.
     */
    scan += 2;
    match++;
    // Assert(*scan == *match, "match[2]?");

    /* We check for insufficient lookahead only every 8th comparison;
     * the 256th check will be made at strstart+258.
     */
    do {
      /*jshint noempty:false*/
    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
             scan < strend);

    // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");

    len = MAX_MATCH - (strend - scan);
    scan = strend - MAX_MATCH;

    if (len > best_len) {
      s.match_start = cur_match;
      best_len = len;
      if (len >= nice_match) {
        break;
      }
      scan_end1  = _win[scan + best_len - 1];
      scan_end   = _win[scan + best_len];
    }
  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);

  if (best_len <= s.lookahead) {
    return best_len;
  }
  return s.lookahead;
}


/* ===========================================================================
 * Fill the window when the lookahead becomes insufficient.
 * Updates strstart and lookahead.
 *
 * IN assertion: lookahead < MIN_LOOKAHEAD
 * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
 *    At least one byte has been read, or avail_in == 0; reads are
 *    performed for at least two bytes (required for the zip translate_eol
 *    option -- not supported here).
 */
function fill_window(s) {
  var _w_size = s.w_size;
  var p, n, m, more, str;

  //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");

  do {
    more = s.window_size - s.lookahead - s.strstart;

    // JS ints have 32 bit, block below not needed
    /* Deal with !@#$% 64K limit: */
    //if (sizeof(int) <= 2) {
    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
    //        more = wsize;
    //
    //  } else if (more == (unsigned)(-1)) {
    //        /* Very unlikely, but possible on 16 bit machine if
    //         * strstart == 0 && lookahead == 1 (input done a byte at time)
    //         */
    //        more--;
    //    }
    //}


    /* If the window is almost full and there is insufficient lookahead,
     * move the upper half to the lower one to make room in the upper half.
     */
    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {

      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);
      s.match_start -= _w_size;
      s.strstart -= _w_size;
      /* we now have strstart >= MAX_DIST */
      s.block_start -= _w_size;

      /* Slide the hash table (could be avoided with 32 bit values
       at the expense of memory usage). We slide even when level == 0
       to keep the hash table consistent if we switch back to level > 0
       later. (Using level 0 permanently is not an optimal usage of
       zlib, so we don't care about this pathological case.)
       */

      n = s.hash_size;
      p = n;
      do {
        m = s.head[--p];
        s.head[p] = (m >= _w_size ? m - _w_size : 0);
      } while (--n);

      n = _w_size;
      p = n;
      do {
        m = s.prev[--p];
        s.prev[p] = (m >= _w_size ? m - _w_size : 0);
        /* If n is not on any hash chain, prev[n] is garbage but
         * its value will never be used.
         */
      } while (--n);

      more += _w_size;
    }
    if (s.strm.avail_in === 0) {
      break;
    }

    /* If there was no sliding:
     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
     *    more == window_size - lookahead - strstart
     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
     * => more >= window_size - 2*WSIZE + 2
     * In the BIG_MEM or MMAP case (not yet supported),
     *   window_size == input_size + MIN_LOOKAHEAD  &&
     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
     * Otherwise, window_size == 2*WSIZE so more >= 2.
     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
     */
    //Assert(more >= 2, "more < 2");
    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
    s.lookahead += n;

    /* Initialize the hash value now that we have some input: */
    if (s.lookahead + s.insert >= MIN_MATCH) {
      str = s.strstart - s.insert;
      s.ins_h = s.window[str];

      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */
      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;
//#if MIN_MATCH != 3
//        Call update_hash() MIN_MATCH-3 more times
//#endif
      while (s.insert) {
        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;

        s.prev[str & s.w_mask] = s.head[s.ins_h];
        s.head[s.ins_h] = str;
        str++;
        s.insert--;
        if (s.lookahead + s.insert < MIN_MATCH) {
          break;
        }
      }
    }
    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
     * but this is not important since only literal bytes will be emitted.
     */

  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);

  /* If the WIN_INIT bytes after the end of the current data have never been
   * written, then zero those bytes in order to avoid memory check reports of
   * the use of uninitialized (or uninitialised as Julian writes) bytes by
   * the longest match routines.  Update the high water mark for the next
   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match
   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
   */
//  if (s.high_water < s.window_size) {
//    var curr = s.strstart + s.lookahead;
//    var init = 0;
//
//    if (s.high_water < curr) {
//      /* Previous high water mark below current data -- zero WIN_INIT
//       * bytes or up to end of window, whichever is less.
//       */
//      init = s.window_size - curr;
//      if (init > WIN_INIT)
//        init = WIN_INIT;
//      zmemzero(s->window + curr, (unsigned)init);
//      s->high_water = curr + init;
//    }
//    else if (s->high_water < (ulg)curr + WIN_INIT) {
//      /* High water mark at or above current data, but below current data
//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
//       * to end of window, whichever is less.
//       */
//      init = (ulg)curr + WIN_INIT - s->high_water;
//      if (init > s->window_size - s->high_water)
//        init = s->window_size - s->high_water;
//      zmemzero(s->window + s->high_water, (unsigned)init);
//      s->high_water += init;
//    }
//  }
//
//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
//    "not enough room for search");
}

/* ===========================================================================
 * Copy without compression as much as possible from the input stream, return
 * the current block state.
 * This function does not insert new strings in the dictionary since
 * uncompressible data is probably not useful. This function is used
 * only for the level=0 compression option.
 * NOTE: this function should be optimized to avoid extra copying from
 * window to pending_buf.
 */
function deflate_stored(s, flush) {
  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
   * to pending_buf_size, and each stored block has a 5 byte header:
   */
  var max_block_size = 0xffff;

  if (max_block_size > s.pending_buf_size - 5) {
    max_block_size = s.pending_buf_size - 5;
  }

  /* Copy as much as possible from input to output: */
  for (;;) {
    /* Fill the window as much as possible: */
    if (s.lookahead <= 1) {

      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||
      //  s->block_start >= (long)s->w_size, "slide too late");
//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||
//        s.block_start >= s.w_size)) {
//        throw  new Error("slide too late");
//      }

      fill_window(s);
      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {
        return BS_NEED_MORE;
      }

      if (s.lookahead === 0) {
        break;
      }
      /* flush the current block */
    }
    //Assert(s->block_start >= 0L, "block gone");
//    if (s.block_start < 0) throw new Error("block gone");

    s.strstart += s.lookahead;
    s.lookahead = 0;

    /* Emit a stored block if pending_buf will be full: */
    var max_start = s.block_start + max_block_size;

    if (s.strstart === 0 || s.strstart >= max_start) {
      /* strstart == 0 is possible when wraparound on 16-bit machine */
      s.lookahead = s.strstart - max_start;
      s.strstart = max_start;
      /*** FLUSH_BLOCK(s, 0); ***/
      flush_block_only(s, false);
      if (s.strm.avail_out === 0) {
        return BS_NEED_MORE;
      }
      /***/


    }
    /* Flush if we may have to slide, otherwise block_start may become
     * negative and the data will be gone:
     */
    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {
      /*** FLUSH_BLOCK(s, 0); ***/
      flush_block_only(s, false);
      if (s.strm.avail_out === 0) {
        return BS_NEED_MORE;
      }
      /***/
    }
  }

  s.insert = 0;

  if (flush === Z_FINISH) {
    /*** FLUSH_BLOCK(s, 1); ***/
    flush_block_only(s, true);
    if (s.strm.avail_out === 0) {
      return BS_FINISH_STARTED;
    }
    /***/
    return BS_FINISH_DONE;
  }

  if (s.strstart > s.block_start) {
    /*** FLUSH_BLOCK(s, 0); ***/
    flush_block_only(s, false);
    if (s.strm.avail_out === 0) {
      return BS_NEED_MORE;
    }
    /***/
  }

  return BS_NEED_MORE;
}

/* ===========================================================================
 * Compress as much as possible from the input stream, return the current
 * block state.
 * This function does not perform lazy evaluation of matches and inserts
 * new strings in the dictionary only for unmatched strings or for short
 * matches. It is used only for the fast compression options.
 */
function deflate_fast(s, flush) {
  var hash_head;        /* head of the hash chain */
  var bflush;           /* set if current block must be flushed */

  for (;;) {
    /* Make sure that we always have enough lookahead, except
     * at the end of the input file. We need MAX_MATCH bytes
     * for the next match, plus MIN_MATCH bytes to insert the
     * string following the next match.
     */
    if (s.lookahead < MIN_LOOKAHEAD) {
      fill_window(s);
      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
        return BS_NEED_MORE;
      }
      if (s.lookahead === 0) {
        break; /* flush the current block */
      }
    }

    /* Insert the string window[strstart .. strstart+2] in the
     * dictionary, and set hash_head to the head of the hash chain:
     */
    hash_head = 0/*NIL*/;
    if (s.lookahead >= MIN_MATCH) {
      /*** INSERT_STRING(s, s.strstart, hash_head); ***/
      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
      s.head[s.ins_h] = s.strstart;
      /***/
    }

    /* Find the longest match, discarding those <= prev_length.
     * At this point we have always match_length < MIN_MATCH
     */
    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {
      /* To simplify the code, we prevent matches with the string
       * of window index 0 (in particular we have to avoid a match
       * of the string with itself at the start of the input file).
       */
      s.match_length = longest_match(s, hash_head);
      /* longest_match() sets match_start */
    }
    if (s.match_length >= MIN_MATCH) {
      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only

      /*** _tr_tally_dist(s, s.strstart - s.match_start,
                     s.match_length - MIN_MATCH, bflush); ***/
      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);

      s.lookahead -= s.match_length;

      /* Insert new strings in the hash table only if the match length
       * is not too large. This saves time but degrades compression.
       */
      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {
        s.match_length--; /* string at strstart already in table */
        do {
          s.strstart++;
          /*** INSERT_STRING(s, s.strstart, hash_head); ***/
          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
          s.head[s.ins_h] = s.strstart;
          /***/
          /* strstart never exceeds WSIZE-MAX_MATCH, so there are
           * always MIN_MATCH bytes ahead.
           */
        } while (--s.match_length !== 0);
        s.strstart++;
      } else
      {
        s.strstart += s.match_length;
        s.match_length = 0;
        s.ins_h = s.window[s.strstart];
        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */
        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;

//#if MIN_MATCH != 3
//                Call UPDATE_HASH() MIN_MATCH-3 more times
//#endif
        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
         * matter since it will be recomputed at next deflate call.
         */
      }
    } else {
      /* No match, output a literal byte */
      //Tracevv((stderr,"%c", s.window[s.strstart]));
      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);

      s.lookahead--;
      s.strstart++;
    }
    if (bflush) {
      /*** FLUSH_BLOCK(s, 0); ***/
      flush_block_only(s, false);
      if (s.strm.avail_out === 0) {
        return BS_NEED_MORE;
      }
      /***/
    }
  }
  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);
  if (flush === Z_FINISH) {
    /*** FLUSH_BLOCK(s, 1); ***/
    flush_block_only(s, true);
    if (s.strm.avail_out === 0) {
      return BS_FINISH_STARTED;
    }
    /***/
    return BS_FINISH_DONE;
  }
  if (s.last_lit) {
    /*** FLUSH_BLOCK(s, 0); ***/
    flush_block_only(s, false);
    if (s.strm.avail_out === 0) {
      return BS_NEED_MORE;
    }
    /***/
  }
  return BS_BLOCK_DONE;
}

/* ===========================================================================
 * Same as above, but achieves better compression. We use a lazy
 * evaluation for matches: a match is finally adopted only if there is
 * no better match at the next window position.
 */
function deflate_slow(s, flush) {
  var hash_head;          /* head of hash chain */
  var bflush;              /* set if current block must be flushed */

  var max_insert;

  /* Process the input block. */
  for (;;) {
    /* Make sure that we always have enough lookahead, except
     * at the end of the input file. We need MAX_MATCH bytes
     * for the next match, plus MIN_MATCH bytes to insert the
     * string following the next match.
     */
    if (s.lookahead < MIN_LOOKAHEAD) {
      fill_window(s);
      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
        return BS_NEED_MORE;
      }
      if (s.lookahead === 0) { break; } /* flush the current block */
    }

    /* Insert the string window[strstart .. strstart+2] in the
     * dictionary, and set hash_head to the head of the hash chain:
     */
    hash_head = 0/*NIL*/;
    if (s.lookahead >= MIN_MATCH) {
      /*** INSERT_STRING(s, s.strstart, hash_head); ***/
      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
      s.head[s.ins_h] = s.strstart;
      /***/
    }

    /* Find the longest match, discarding those <= prev_length.
     */
    s.prev_length = s.match_length;
    s.prev_match = s.match_start;
    s.match_length = MIN_MATCH - 1;

    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&
        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {
      /* To simplify the code, we prevent matches with the string
       * of window index 0 (in particular we have to avoid a match
       * of the string with itself at the start of the input file).
       */
      s.match_length = longest_match(s, hash_head);
      /* longest_match() sets match_start */

      if (s.match_length <= 5 &&
         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {

        /* If prev_match is also MIN_MATCH, match_start is garbage
         * but we will ignore the current match anyway.
         */
        s.match_length = MIN_MATCH - 1;
      }
    }
    /* If there was a match at the previous step and the current
     * match is not better, output the previous match:
     */
    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {
      max_insert = s.strstart + s.lookahead - MIN_MATCH;
      /* Do not insert strings in hash table beyond this. */

      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);

      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,
                     s.prev_length - MIN_MATCH, bflush);***/
      bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);
      /* Insert in hash table all strings up to the end of the match.
       * strstart-1 and strstart are already inserted. If there is not
       * enough lookahead, the last two strings are not inserted in
       * the hash table.
       */
      s.lookahead -= s.prev_length - 1;
      s.prev_length -= 2;
      do {
        if (++s.strstart <= max_insert) {
          /*** INSERT_STRING(s, s.strstart, hash_head); ***/
          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
          s.head[s.ins_h] = s.strstart;
          /***/
        }
      } while (--s.prev_length !== 0);
      s.match_available = 0;
      s.match_length = MIN_MATCH - 1;
      s.strstart++;

      if (bflush) {
        /*** FLUSH_BLOCK(s, 0); ***/
        flush_block_only(s, false);
        if (s.strm.avail_out === 0) {
          return BS_NEED_MORE;
        }
        /***/
      }

    } else if (s.match_available) {
      /* If there was no match at the previous position, output a
       * single literal. If there was a match but the current match
       * is longer, truncate the previous match to a single literal.
       */
      //Tracevv((stderr,"%c", s->window[s->strstart-1]));
      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);

      if (bflush) {
        /*** FLUSH_BLOCK_ONLY(s, 0) ***/
        flush_block_only(s, false);
        /***/
      }
      s.strstart++;
      s.lookahead--;
      if (s.strm.avail_out === 0) {
        return BS_NEED_MORE;
      }
    } else {
      /* There is no previous match to compare with, wait for
       * the next step to decide.
       */
      s.match_available = 1;
      s.strstart++;
      s.lookahead--;
    }
  }
  //Assert (flush != Z_NO_FLUSH, "no flush?");
  if (s.match_available) {
    //Tracevv((stderr,"%c", s->window[s->strstart-1]));
    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
    bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);

    s.match_available = 0;
  }
  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;
  if (flush === Z_FINISH) {
    /*** FLUSH_BLOCK(s, 1); ***/
    flush_block_only(s, true);
    if (s.strm.avail_out === 0) {
      return BS_FINISH_STARTED;
    }
    /***/
    return BS_FINISH_DONE;
  }
  if (s.last_lit) {
    /*** FLUSH_BLOCK(s, 0); ***/
    flush_block_only(s, false);
    if (s.strm.avail_out === 0) {
      return BS_NEED_MORE;
    }
    /***/
  }

  return BS_BLOCK_DONE;
}


/* ===========================================================================
 * For Z_RLE, simply look for runs of bytes, generate matches only of distance
 * one.  Do not maintain a hash table.  (It will be regenerated if this run of
 * deflate switches away from Z_RLE.)
 */
function deflate_rle(s, flush) {
  var bflush;            /* set if current block must be flushed */
  var prev;              /* byte at distance one to match */
  var scan, strend;      /* scan goes up to strend for length of run */

  var _win = s.window;

  for (;;) {
    /* Make sure that we always have enough lookahead, except
     * at the end of the input file. We need MAX_MATCH bytes
     * for the longest run, plus one for the unrolled loop.
     */
    if (s.lookahead <= MAX_MATCH) {
      fill_window(s);
      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {
        return BS_NEED_MORE;
      }
      if (s.lookahead === 0) { break; } /* flush the current block */
    }

    /* See how many times the previous byte repeats */
    s.match_length = 0;
    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {
      scan = s.strstart - 1;
      prev = _win[scan];
      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {
        strend = s.strstart + MAX_MATCH;
        do {
          /*jshint noempty:false*/
        } while (prev === _win[++scan] && prev === _win[++scan] &&
                 prev === _win[++scan] && prev === _win[++scan] &&
                 prev === _win[++scan] && prev === _win[++scan] &&
                 prev === _win[++scan] && prev === _win[++scan] &&
                 scan < strend);
        s.match_length = MAX_MATCH - (strend - scan);
        if (s.match_length > s.lookahead) {
          s.match_length = s.lookahead;
        }
      }
      //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
    }

    /* Emit match if have run of MIN_MATCH or longer, else emit literal */
    if (s.match_length >= MIN_MATCH) {
      //check_match(s, s.strstart, s.strstart - 1, s.match_length);

      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/
      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);

      s.lookahead -= s.match_length;
      s.strstart += s.match_length;
      s.match_length = 0;
    } else {
      /* No match, output a literal byte */
      //Tracevv((stderr,"%c", s->window[s->strstart]));
      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);

      s.lookahead--;
      s.strstart++;
    }
    if (bflush) {
      /*** FLUSH_BLOCK(s, 0); ***/
      flush_block_only(s, false);
      if (s.strm.avail_out === 0) {
        return BS_NEED_MORE;
      }
      /***/
    }
  }
  s.insert = 0;
  if (flush === Z_FINISH) {
    /*** FLUSH_BLOCK(s, 1); ***/
    flush_block_only(s, true);
    if (s.strm.avail_out === 0) {
      return BS_FINISH_STARTED;
    }
    /***/
    return BS_FINISH_DONE;
  }
  if (s.last_lit) {
    /*** FLUSH_BLOCK(s, 0); ***/
    flush_block_only(s, false);
    if (s.strm.avail_out === 0) {
      return BS_NEED_MORE;
    }
    /***/
  }
  return BS_BLOCK_DONE;
}

/* ===========================================================================
 * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.
 * (It will be regenerated if this run of deflate switches away from Huffman.)
 */
function deflate_huff(s, flush) {
  var bflush;             /* set if current block must be flushed */

  for (;;) {
    /* Make sure that we have a literal to write. */
    if (s.lookahead === 0) {
      fill_window(s);
      if (s.lookahead === 0) {
        if (flush === Z_NO_FLUSH) {
          return BS_NEED_MORE;
        }
        break;      /* flush the current block */
      }
    }

    /* Output a literal byte */
    s.match_length = 0;
    //Tracevv((stderr,"%c", s->window[s->strstart]));
    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
    s.lookahead--;
    s.strstart++;
    if (bflush) {
      /*** FLUSH_BLOCK(s, 0); ***/
      flush_block_only(s, false);
      if (s.strm.avail_out === 0) {
        return BS_NEED_MORE;
      }
      /***/
    }
  }
  s.insert = 0;
  if (flush === Z_FINISH) {
    /*** FLUSH_BLOCK(s, 1); ***/
    flush_block_only(s, true);
    if (s.strm.avail_out === 0) {
      return BS_FINISH_STARTED;
    }
    /***/
    return BS_FINISH_DONE;
  }
  if (s.last_lit) {
    /*** FLUSH_BLOCK(s, 0); ***/
    flush_block_only(s, false);
    if (s.strm.avail_out === 0) {
      return BS_NEED_MORE;
    }
    /***/
  }
  return BS_BLOCK_DONE;
}

/* Values for max_lazy_match, good_match and max_chain_length, depending on
 * the desired pack level (0..9). The values given below have been tuned to
 * exclude worst case performance for pathological files. Better values may be
 * found for specific files.
 */
function Config(good_length, max_lazy, nice_length, max_chain, func) {
  this.good_length = good_length;
  this.max_lazy = max_lazy;
  this.nice_length = nice_length;
  this.max_chain = max_chain;
  this.func = func;
}

var configuration_table;

configuration_table = [
  /*      good lazy nice chain */
  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */
  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */
  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */
  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */

  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */
  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */
  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */
  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */
  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */
  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */
];


/* ===========================================================================
 * Initialize the "longest match" routines for a new zlib stream
 */
function lm_init(s) {
  s.window_size = 2 * s.w_size;

  /*** CLEAR_HASH(s); ***/
  zero(s.head); // Fill with NIL (= 0);

  /* Set the default configuration parameters:
   */
  s.max_lazy_match = configuration_table[s.level].max_lazy;
  s.good_match = configuration_table[s.level].good_length;
  s.nice_match = configuration_table[s.level].nice_length;
  s.max_chain_length = configuration_table[s.level].max_chain;

  s.strstart = 0;
  s.block_start = 0;
  s.lookahead = 0;
  s.insert = 0;
  s.match_length = s.prev_length = MIN_MATCH - 1;
  s.match_available = 0;
  s.ins_h = 0;
}


function DeflateState() {
  this.strm = null;            /* pointer back to this zlib stream */
  this.status = 0;            /* as the name implies */
  this.pending_buf = null;      /* output still pending */
  this.pending_buf_size = 0;  /* size of pending_buf */
  this.pending_out = 0;       /* next pending byte to output to the stream */
  this.pending = 0;           /* nb of bytes in the pending buffer */
  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */
  this.gzhead = null;         /* gzip header information to write */
  this.gzindex = 0;           /* where in extra, name, or comment */
  this.method = Z_DEFLATED; /* can only be DEFLATED */
  this.last_flush = -1;   /* value of flush param for previous deflate call */

  this.w_size = 0;  /* LZ77 window size (32K by default) */
  this.w_bits = 0;  /* log2(w_size)  (8..16) */
  this.w_mask = 0;  /* w_size - 1 */

  this.window = null;
  /* Sliding window. Input bytes are read into the second half of the window,
   * and move to the first half later to keep a dictionary of at least wSize
   * bytes. With this organization, matches are limited to a distance of
   * wSize-MAX_MATCH bytes, but this ensures that IO is always
   * performed with a length multiple of the block size.
   */

  this.window_size = 0;
  /* Actual size of window: 2*wSize, except when the user input buffer
   * is directly used as sliding window.
   */

  this.prev = null;
  /* Link to older string with same hash index. To limit the size of this
   * array to 64K, this link is maintained only for the last 32K strings.
   * An index in this array is thus a window index modulo 32K.
   */

  this.head = null;   /* Heads of the hash chains or NIL. */

  this.ins_h = 0;       /* hash index of string to be inserted */
  this.hash_size = 0;   /* number of elements in hash table */
  this.hash_bits = 0;   /* log2(hash_size) */
  this.hash_mask = 0;   /* hash_size-1 */

  this.hash_shift = 0;
  /* Number of bits by which ins_h must be shifted at each input
   * step. It must be such that after MIN_MATCH steps, the oldest
   * byte no longer takes part in the hash key, that is:
   *   hash_shift * MIN_MATCH >= hash_bits
   */

  this.block_start = 0;
  /* Window position at the beginning of the current output block. Gets
   * negative when the window is moved backwards.
   */

  this.match_length = 0;      /* length of best match */
  this.prev_match = 0;        /* previous match */
  this.match_available = 0;   /* set if previous match exists */
  this.strstart = 0;          /* start of string to insert */
  this.match_start = 0;       /* start of matching string */
  this.lookahead = 0;         /* number of valid bytes ahead in window */

  this.prev_length = 0;
  /* Length of the best match at previous step. Matches not greater than this
   * are discarded. This is used in the lazy match evaluation.
   */

  this.max_chain_length = 0;
  /* To speed up deflation, hash chains are never searched beyond this
   * length.  A higher limit improves compression ratio but degrades the
   * speed.
   */

  this.max_lazy_match = 0;
  /* Attempt to find a better match only when the current match is strictly
   * smaller than this value. This mechanism is used only for compression
   * levels >= 4.
   */
  // That's alias to max_lazy_match, don't use directly
  //this.max_insert_length = 0;
  /* Insert new strings in the hash table only if the match length is not
   * greater than this length. This saves time but degrades compression.
   * max_insert_length is used only for compression levels <= 3.
   */

  this.level = 0;     /* compression level (1..9) */
  this.strategy = 0;  /* favor or force Huffman coding*/

  this.good_match = 0;
  /* Use a faster search when the previous match is longer than this */

  this.nice_match = 0; /* Stop searching when current match exceeds this */

              /* used by trees.c: */

  /* Didn't use ct_data typedef below to suppress compiler warning */

  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */

  // Use flat array of DOUBLE size, with interleaved fata,
  // because JS does not support effective
  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);
  this.dyn_dtree  = new utils.Buf16((2 * D_CODES + 1) * 2);
  this.bl_tree    = new utils.Buf16((2 * BL_CODES + 1) * 2);
  zero(this.dyn_ltree);
  zero(this.dyn_dtree);
  zero(this.bl_tree);

  this.l_desc   = null;         /* desc. for literal tree */
  this.d_desc   = null;         /* desc. for distance tree */
  this.bl_desc  = null;         /* desc. for bit length tree */

  //ush bl_count[MAX_BITS+1];
  this.bl_count = new utils.Buf16(MAX_BITS + 1);
  /* number of codes at each bit length for an optimal tree */

  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */
  this.heap = new utils.Buf16(2 * L_CODES + 1);  /* heap used to build the Huffman trees */
  zero(this.heap);

  this.heap_len = 0;               /* number of elements in the heap */
  this.heap_max = 0;               /* element of largest frequency */
  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
   * The same heap array is used to build all trees.
   */

  this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];
  zero(this.depth);
  /* Depth of each subtree used as tie breaker for trees of equal frequency
   */

  this.l_buf = 0;          /* buffer index for literals or lengths */

  this.lit_bufsize = 0;
  /* Size of match buffer for literals/lengths.  There are 4 reasons for
   * limiting lit_bufsize to 64K:
   *   - frequencies can be kept in 16 bit counters
   *   - if compression is not successful for the first block, all input
   *     data is still in the window so we can still emit a stored block even
   *     when input comes from standard input.  (This can also be done for
   *     all blocks if lit_bufsize is not greater than 32K.)
   *   - if compression is not successful for a file smaller than 64K, we can
   *     even emit a stored file instead of a stored block (saving 5 bytes).
   *     This is applicable only for zip (not gzip or zlib).
   *   - creating new Huffman trees less frequently may not provide fast
   *     adaptation to changes in the input data statistics. (Take for
   *     example a binary file with poorly compressible code followed by
   *     a highly compressible string table.) Smaller buffer sizes give
   *     fast adaptation but have of course the overhead of transmitting
   *     trees more frequently.
   *   - I can't count above 4
   */

  this.last_lit = 0;      /* running index in l_buf */

  this.d_buf = 0;
  /* Buffer index for distances. To simplify the code, d_buf and l_buf have
   * the same number of elements. To use different lengths, an extra flag
   * array would be necessary.
   */

  this.opt_len = 0;       /* bit length of current block with optimal trees */
  this.static_len = 0;    /* bit length of current block with static trees */
  this.matches = 0;       /* number of string matches in current block */
  this.insert = 0;        /* bytes at end of window left to insert */


  this.bi_buf = 0;
  /* Output buffer. bits are inserted starting at the bottom (least
   * significant bits).
   */
  this.bi_valid = 0;
  /* Number of valid bits in bi_buf.  All bits above the last valid bit
   * are always zero.
   */

  // Used for window memory init. We safely ignore it for JS. That makes
  // sense only for pointers and memory check tools.
  //this.high_water = 0;
  /* High water mark offset in window for initialized bytes -- bytes above
   * this are set to zero in order to avoid memory check warnings when
   * longest match routines access bytes past the input.  This is then
   * updated to the new high water mark.
   */
}


function deflateResetKeep(strm) {
  var s;

  if (!strm || !strm.state) {
    return err(strm, Z_STREAM_ERROR);
  }

  strm.total_in = strm.total_out = 0;
  strm.data_type = Z_UNKNOWN;

  s = strm.state;
  s.pending = 0;
  s.pending_out = 0;

  if (s.wrap < 0) {
    s.wrap = -s.wrap;
    /* was made negative by deflate(..., Z_FINISH); */
  }
  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);
  strm.adler = (s.wrap === 2) ?
    0  // crc32(0, Z_NULL, 0)
  :
    1; // adler32(0, Z_NULL, 0)
  s.last_flush = Z_NO_FLUSH;
  trees._tr_init(s);
  return Z_OK;
}


function deflateReset(strm) {
  var ret = deflateResetKeep(strm);
  if (ret === Z_OK) {
    lm_init(strm.state);
  }
  return ret;
}


function deflateSetHeader(strm, head) {
  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }
  strm.state.gzhead = head;
  return Z_OK;
}


function deflateInit2(strm, level, method, windowBits, memLevel, strategy) {
  if (!strm) { // === Z_NULL
    return Z_STREAM_ERROR;
  }
  var wrap = 1;

  if (level === Z_DEFAULT_COMPRESSION) {
    level = 6;
  }

  if (windowBits < 0) { /* suppress zlib wrapper */
    wrap = 0;
    windowBits = -windowBits;
  }

  else if (windowBits > 15) {
    wrap = 2;           /* write gzip wrapper instead */
    windowBits -= 16;
  }


  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||
    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
    strategy < 0 || strategy > Z_FIXED) {
    return err(strm, Z_STREAM_ERROR);
  }


  if (windowBits === 8) {
    windowBits = 9;
  }
  /* until 256-byte window bug fixed */

  var s = new DeflateState();

  strm.state = s;
  s.strm = strm;

  s.wrap = wrap;
  s.gzhead = null;
  s.w_bits = windowBits;
  s.w_size = 1 << s.w_bits;
  s.w_mask = s.w_size - 1;

  s.hash_bits = memLevel + 7;
  s.hash_size = 1 << s.hash_bits;
  s.hash_mask = s.hash_size - 1;
  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);

  s.window = new utils.Buf8(s.w_size * 2);
  s.head = new utils.Buf16(s.hash_size);
  s.prev = new utils.Buf16(s.w_size);

  // Don't need mem init magic for JS.
  //s.high_water = 0;  /* nothing written to s->window yet */

  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */

  s.pending_buf_size = s.lit_bufsize * 4;

  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
  //s->pending_buf = (uchf *) overlay;
  s.pending_buf = new utils.Buf8(s.pending_buf_size);

  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)
  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
  s.d_buf = 1 * s.lit_bufsize;

  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
  s.l_buf = (1 + 2) * s.lit_bufsize;

  s.level = level;
  s.strategy = strategy;
  s.method = method;

  return deflateReset(strm);
}

function deflateInit(strm, level) {
  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);
}


function deflate(strm, flush) {
  var old_flush, s;
  var beg, val; // for gzip header write only

  if (!strm || !strm.state ||
    flush > Z_BLOCK || flush < 0) {
    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;
  }

  s = strm.state;

  if (!strm.output ||
      (!strm.input && strm.avail_in !== 0) ||
      (s.status === FINISH_STATE && flush !== Z_FINISH)) {
    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);
  }

  s.strm = strm; /* just in case */
  old_flush = s.last_flush;
  s.last_flush = flush;

  /* Write the header */
  if (s.status === INIT_STATE) {

    if (s.wrap === 2) { // GZIP header
      strm.adler = 0;  //crc32(0L, Z_NULL, 0);
      put_byte(s, 31);
      put_byte(s, 139);
      put_byte(s, 8);
      if (!s.gzhead) { // s->gzhead == Z_NULL
        put_byte(s, 0);
        put_byte(s, 0);
        put_byte(s, 0);
        put_byte(s, 0);
        put_byte(s, 0);
        put_byte(s, s.level === 9 ? 2 :
                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
                     4 : 0));
        put_byte(s, OS_CODE);
        s.status = BUSY_STATE;
      }
      else {
        put_byte(s, (s.gzhead.text ? 1 : 0) +
                    (s.gzhead.hcrc ? 2 : 0) +
                    (!s.gzhead.extra ? 0 : 4) +
                    (!s.gzhead.name ? 0 : 8) +
                    (!s.gzhead.comment ? 0 : 16)
        );
        put_byte(s, s.gzhead.time & 0xff);
        put_byte(s, (s.gzhead.time >> 8) & 0xff);
        put_byte(s, (s.gzhead.time >> 16) & 0xff);
        put_byte(s, (s.gzhead.time >> 24) & 0xff);
        put_byte(s, s.level === 9 ? 2 :
                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
                     4 : 0));
        put_byte(s, s.gzhead.os & 0xff);
        if (s.gzhead.extra && s.gzhead.extra.length) {
          put_byte(s, s.gzhead.extra.length & 0xff);
          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);
        }
        if (s.gzhead.hcrc) {
          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);
        }
        s.gzindex = 0;
        s.status = EXTRA_STATE;
      }
    }
    else // DEFLATE header
    {
      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;
      var level_flags = -1;

      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {
        level_flags = 0;
      } else if (s.level < 6) {
        level_flags = 1;
      } else if (s.level === 6) {
        level_flags = 2;
      } else {
        level_flags = 3;
      }
      header |= (level_flags << 6);
      if (s.strstart !== 0) { header |= PRESET_DICT; }
      header += 31 - (header % 31);

      s.status = BUSY_STATE;
      putShortMSB(s, header);

      /* Save the adler32 of the preset dictionary: */
      if (s.strstart !== 0) {
        putShortMSB(s, strm.adler >>> 16);
        putShortMSB(s, strm.adler & 0xffff);
      }
      strm.adler = 1; // adler32(0L, Z_NULL, 0);
    }
  }

//#ifdef GZIP
  if (s.status === EXTRA_STATE) {
    if (s.gzhead.extra/* != Z_NULL*/) {
      beg = s.pending;  /* start of bytes to update crc */

      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {
        if (s.pending === s.pending_buf_size) {
          if (s.gzhead.hcrc && s.pending > beg) {
            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
          }
          flush_pending(strm);
          beg = s.pending;
          if (s.pending === s.pending_buf_size) {
            break;
          }
        }
        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);
        s.gzindex++;
      }
      if (s.gzhead.hcrc && s.pending > beg) {
        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
      }
      if (s.gzindex === s.gzhead.extra.length) {
        s.gzindex = 0;
        s.status = NAME_STATE;
      }
    }
    else {
      s.status = NAME_STATE;
    }
  }
  if (s.status === NAME_STATE) {
    if (s.gzhead.name/* != Z_NULL*/) {
      beg = s.pending;  /* start of bytes to update crc */
      //int val;

      do {
        if (s.pending === s.pending_buf_size) {
          if (s.gzhead.hcrc && s.pending > beg) {
            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
          }
          flush_pending(strm);
          beg = s.pending;
          if (s.pending === s.pending_buf_size) {
            val = 1;
            break;
          }
        }
        // JS specific: little magic to add zero terminator to end of string
        if (s.gzindex < s.gzhead.name.length) {
          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;
        } else {
          val = 0;
        }
        put_byte(s, val);
      } while (val !== 0);

      if (s.gzhead.hcrc && s.pending > beg) {
        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
      }
      if (val === 0) {
        s.gzindex = 0;
        s.status = COMMENT_STATE;
      }
    }
    else {
      s.status = COMMENT_STATE;
    }
  }
  if (s.status === COMMENT_STATE) {
    if (s.gzhead.comment/* != Z_NULL*/) {
      beg = s.pending;  /* start of bytes to update crc */
      //int val;

      do {
        if (s.pending === s.pending_buf_size) {
          if (s.gzhead.hcrc && s.pending > beg) {
            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
          }
          flush_pending(strm);
          beg = s.pending;
          if (s.pending === s.pending_buf_size) {
            val = 1;
            break;
          }
        }
        // JS specific: little magic to add zero terminator to end of string
        if (s.gzindex < s.gzhead.comment.length) {
          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;
        } else {
          val = 0;
        }
        put_byte(s, val);
      } while (val !== 0);

      if (s.gzhead.hcrc && s.pending > beg) {
        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
      }
      if (val === 0) {
        s.status = HCRC_STATE;
      }
    }
    else {
      s.status = HCRC_STATE;
    }
  }
  if (s.status === HCRC_STATE) {
    if (s.gzhead.hcrc) {
      if (s.pending + 2 > s.pending_buf_size) {
        flush_pending(strm);
      }
      if (s.pending + 2 <= s.pending_buf_size) {
        put_byte(s, strm.adler & 0xff);
        put_byte(s, (strm.adler >> 8) & 0xff);
        strm.adler = 0; //crc32(0L, Z_NULL, 0);
        s.status = BUSY_STATE;
      }
    }
    else {
      s.status = BUSY_STATE;
    }
  }
//#endif

  /* Flush as much pending output as possible */
  if (s.pending !== 0) {
    flush_pending(strm);
    if (strm.avail_out === 0) {
      /* Since avail_out is 0, deflate will be called again with
       * more output space, but possibly with both pending and
       * avail_in equal to zero. There won't be anything to do,
       * but this is not an error situation so make sure we
       * return OK instead of BUF_ERROR at next call of deflate:
       */
      s.last_flush = -1;
      return Z_OK;
    }

    /* Make sure there is something to do and avoid duplicate consecutive
     * flushes. For repeated and useless calls with Z_FINISH, we keep
     * returning Z_STREAM_END instead of Z_BUF_ERROR.
     */
  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&
    flush !== Z_FINISH) {
    return err(strm, Z_BUF_ERROR);
  }

  /* User must not provide more input after the first FINISH: */
  if (s.status === FINISH_STATE && strm.avail_in !== 0) {
    return err(strm, Z_BUF_ERROR);
  }

  /* Start a new block or continue the current one.
   */
  if (strm.avail_in !== 0 || s.lookahead !== 0 ||
    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {
    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :
      (s.strategy === Z_RLE ? deflate_rle(s, flush) :
        configuration_table[s.level].func(s, flush));

    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {
      s.status = FINISH_STATE;
    }
    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {
      if (strm.avail_out === 0) {
        s.last_flush = -1;
        /* avoid BUF_ERROR next call, see above */
      }
      return Z_OK;
      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
       * of deflate should use the same flush parameter to make sure
       * that the flush is complete. So we don't have to output an
       * empty block here, this will be done at next call. This also
       * ensures that for a very small output buffer, we emit at most
       * one empty block.
       */
    }
    if (bstate === BS_BLOCK_DONE) {
      if (flush === Z_PARTIAL_FLUSH) {
        trees._tr_align(s);
      }
      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */

        trees._tr_stored_block(s, 0, 0, false);
        /* For a full flush, this empty block will be recognized
         * as a special marker by inflate_sync().
         */
        if (flush === Z_FULL_FLUSH) {
          /*** CLEAR_HASH(s); ***/             /* forget history */
          zero(s.head); // Fill with NIL (= 0);

          if (s.lookahead === 0) {
            s.strstart = 0;
            s.block_start = 0;
            s.insert = 0;
          }
        }
      }
      flush_pending(strm);
      if (strm.avail_out === 0) {
        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */
        return Z_OK;
      }
    }
  }
  //Assert(strm->avail_out > 0, "bug2");
  //if (strm.avail_out <= 0) { throw new Error("bug2");}

  if (flush !== Z_FINISH) { return Z_OK; }
  if (s.wrap <= 0) { return Z_STREAM_END; }

  /* Write the trailer */
  if (s.wrap === 2) {
    put_byte(s, strm.adler & 0xff);
    put_byte(s, (strm.adler >> 8) & 0xff);
    put_byte(s, (strm.adler >> 16) & 0xff);
    put_byte(s, (strm.adler >> 24) & 0xff);
    put_byte(s, strm.total_in & 0xff);
    put_byte(s, (strm.total_in >> 8) & 0xff);
    put_byte(s, (strm.total_in >> 16) & 0xff);
    put_byte(s, (strm.total_in >> 24) & 0xff);
  }
  else
  {
    putShortMSB(s, strm.adler >>> 16);
    putShortMSB(s, strm.adler & 0xffff);
  }

  flush_pending(strm);
  /* If avail_out is zero, the application will call deflate again
   * to flush the rest.
   */
  if (s.wrap > 0) { s.wrap = -s.wrap; }
  /* write the trailer only once! */
  return s.pending !== 0 ? Z_OK : Z_STREAM_END;
}

function deflateEnd(strm) {
  var status;

  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
    return Z_STREAM_ERROR;
  }

  status = strm.state.status;
  if (status !== INIT_STATE &&
    status !== EXTRA_STATE &&
    status !== NAME_STATE &&
    status !== COMMENT_STATE &&
    status !== HCRC_STATE &&
    status !== BUSY_STATE &&
    status !== FINISH_STATE
  ) {
    return err(strm, Z_STREAM_ERROR);
  }

  strm.state = null;

  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;
}


/* =========================================================================
 * Initializes the compression dictionary from the given byte
 * sequence without producing any compressed output.
 */
function deflateSetDictionary(strm, dictionary) {
  var dictLength = dictionary.length;

  var s;
  var str, n;
  var wrap;
  var avail;
  var next;
  var input;
  var tmpDict;

  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
    return Z_STREAM_ERROR;
  }

  s = strm.state;
  wrap = s.wrap;

  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {
    return Z_STREAM_ERROR;
  }

  /* when using zlib wrappers, compute Adler-32 for provided dictionary */
  if (wrap === 1) {
    /* adler32(strm->adler, dictionary, dictLength); */
    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);
  }

  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */

  /* if dictionary would fill window, just replace the history */
  if (dictLength >= s.w_size) {
    if (wrap === 0) {            /* already empty otherwise */
      /*** CLEAR_HASH(s); ***/
      zero(s.head); // Fill with NIL (= 0);
      s.strstart = 0;
      s.block_start = 0;
      s.insert = 0;
    }
    /* use the tail */
    // dictionary = dictionary.slice(dictLength - s.w_size);
    tmpDict = new utils.Buf8(s.w_size);
    utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);
    dictionary = tmpDict;
    dictLength = s.w_size;
  }
  /* insert dictionary into window and hash */
  avail = strm.avail_in;
  next = strm.next_in;
  input = strm.input;
  strm.avail_in = dictLength;
  strm.next_in = 0;
  strm.input = dictionary;
  fill_window(s);
  while (s.lookahead >= MIN_MATCH) {
    str = s.strstart;
    n = s.lookahead - (MIN_MATCH - 1);
    do {
      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;

      s.prev[str & s.w_mask] = s.head[s.ins_h];

      s.head[s.ins_h] = str;
      str++;
    } while (--n);
    s.strstart = str;
    s.lookahead = MIN_MATCH - 1;
    fill_window(s);
  }
  s.strstart += s.lookahead;
  s.block_start = s.strstart;
  s.insert = s.lookahead;
  s.lookahead = 0;
  s.match_length = s.prev_length = MIN_MATCH - 1;
  s.match_available = 0;
  strm.next_in = next;
  strm.input = input;
  strm.avail_in = avail;
  s.wrap = wrap;
  return Z_OK;
}


exports.deflateInit = deflateInit;
exports.deflateInit2 = deflateInit2;
exports.deflateReset = deflateReset;
exports.deflateResetKeep = deflateResetKeep;
exports.deflateSetHeader = deflateSetHeader;
exports.deflate = deflate;
exports.deflateEnd = deflateEnd;
exports.deflateSetDictionary = deflateSetDictionary;
exports.deflateInfo = 'pako deflate (from Nodeca project)';

/* Not implemented
exports.deflateBound = deflateBound;
exports.deflateCopy = deflateCopy;
exports.deflateParams = deflateParams;
exports.deflatePending = deflatePending;
exports.deflatePrime = deflatePrime;
exports.deflateTune = deflateTune;
*/


/***/ }),

/***/ 2401:
/***/ ((module) => {

"use strict";


// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

function GZheader() {
  /* true if compressed data believed to be text */
  this.text       = 0;
  /* modification time */
  this.time       = 0;
  /* extra flags (not used when writing a gzip file) */
  this.xflags     = 0;
  /* operating system */
  this.os         = 0;
  /* pointer to extra field or Z_NULL if none */
  this.extra      = null;
  /* extra field length (valid if extra != Z_NULL) */
  this.extra_len  = 0; // Actually, we don't need it in JS,
                       // but leave for few code modifications

  //
  // Setup limits is not necessary because in js we should not preallocate memory
  // for inflate use constant limit in 65536 bytes
  //

  /* space at extra (only when reading header) */
  // this.extra_max  = 0;
  /* pointer to zero-terminated file name or Z_NULL */
  this.name       = '';
  /* space at name (only when reading header) */
  // this.name_max   = 0;
  /* pointer to zero-terminated comment or Z_NULL */
  this.comment    = '';
  /* space at comment (only when reading header) */
  // this.comm_max   = 0;
  /* true if there was or will be a header crc */
  this.hcrc       = 0;
  /* true when done reading gzip header (not used when writing a gzip file) */
  this.done       = false;
}

module.exports = GZheader;


/***/ }),

/***/ 4264:
/***/ ((module) => {

"use strict";


// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

// See state defs from inflate.js
var BAD = 30;       /* got a data error -- remain here until reset */
var TYPE = 12;      /* i: waiting for type bits, including last-flag bit */

/*
   Decode literal, length, and distance codes and write out the resulting
   literal and match bytes until either not enough input or output is
   available, an end-of-block is encountered, or a data error is encountered.
   When large enough input and output buffers are supplied to inflate(), for
   example, a 16K input buffer and a 64K output buffer, more than 95% of the
   inflate execution time is spent in this routine.

   Entry assumptions:

        state.mode === LEN
        strm.avail_in >= 6
        strm.avail_out >= 258
        start >= strm.avail_out
        state.bits < 8

   On return, state.mode is one of:

        LEN -- ran out of enough output space or enough available input
        TYPE -- reached end of block code, inflate() to interpret next block
        BAD -- error in block data

   Notes:

    - The maximum input bits used by a length/distance pair is 15 bits for the
      length code, 5 bits for the length extra, 15 bits for the distance code,
      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
      Therefore if strm.avail_in >= 6, then there is enough input to avoid
      checking for available input while decoding.

    - The maximum bytes that a single length/distance pair can output is 258
      bytes, which is the maximum length that can be coded.  inflate_fast()
      requires strm.avail_out >= 258 for each loop to avoid checking for
      output space.
 */
module.exports = function inflate_fast(strm, start) {
  var state;
  var _in;                    /* local strm.input */
  var last;                   /* have enough input while in < last */
  var _out;                   /* local strm.output */
  var beg;                    /* inflate()'s initial strm.output */
  var end;                    /* while out < end, enough space available */
//#ifdef INFLATE_STRICT
  var dmax;                   /* maximum distance from zlib header */
//#endif
  var wsize;                  /* window size or zero if not using window */
  var whave;                  /* valid bytes in the window */
  var wnext;                  /* window write index */
  // Use `s_window` instead `window`, avoid conflict with instrumentation tools
  var s_window;               /* allocated sliding window, if wsize != 0 */
  var hold;                   /* local strm.hold */
  var bits;                   /* local strm.bits */
  var lcode;                  /* local strm.lencode */
  var dcode;                  /* local strm.distcode */
  var lmask;                  /* mask for first level of length codes */
  var dmask;                  /* mask for first level of distance codes */
  var here;                   /* retrieved table entry */
  var op;                     /* code bits, operation, extra bits, or */
                              /*  window position, window bytes to copy */
  var len;                    /* match length, unused bytes */
  var dist;                   /* match distance */
  var from;                   /* where to copy match from */
  var from_source;


  var input, output; // JS specific, because we have no pointers

  /* copy state to local variables */
  state = strm.state;
  //here = state.here;
  _in = strm.next_in;
  input = strm.input;
  last = _in + (strm.avail_in - 5);
  _out = strm.next_out;
  output = strm.output;
  beg = _out - (start - strm.avail_out);
  end = _out + (strm.avail_out - 257);
//#ifdef INFLATE_STRICT
  dmax = state.dmax;
//#endif
  wsize = state.wsize;
  whave = state.whave;
  wnext = state.wnext;
  s_window = state.window;
  hold = state.hold;
  bits = state.bits;
  lcode = state.lencode;
  dcode = state.distcode;
  lmask = (1 << state.lenbits) - 1;
  dmask = (1 << state.distbits) - 1;


  /* decode literals and length/distances until end-of-block or not enough
     input data or output space */

  top:
  do {
    if (bits < 15) {
      hold += input[_in++] << bits;
      bits += 8;
      hold += input[_in++] << bits;
      bits += 8;
    }

    here = lcode[hold & lmask];

    dolen:
    for (;;) { // Goto emulation
      op = here >>> 24/*here.bits*/;
      hold >>>= op;
      bits -= op;
      op = (here >>> 16) & 0xff/*here.op*/;
      if (op === 0) {                          /* literal */
        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
        //        "inflate:         literal '%c'\n" :
        //        "inflate:         literal 0x%02x\n", here.val));
        output[_out++] = here & 0xffff/*here.val*/;
      }
      else if (op & 16) {                     /* length base */
        len = here & 0xffff/*here.val*/;
        op &= 15;                           /* number of extra bits */
        if (op) {
          if (bits < op) {
            hold += input[_in++] << bits;
            bits += 8;
          }
          len += hold & ((1 << op) - 1);
          hold >>>= op;
          bits -= op;
        }
        //Tracevv((stderr, "inflate:         length %u\n", len));
        if (bits < 15) {
          hold += input[_in++] << bits;
          bits += 8;
          hold += input[_in++] << bits;
          bits += 8;
        }
        here = dcode[hold & dmask];

        dodist:
        for (;;) { // goto emulation
          op = here >>> 24/*here.bits*/;
          hold >>>= op;
          bits -= op;
          op = (here >>> 16) & 0xff/*here.op*/;

          if (op & 16) {                      /* distance base */
            dist = here & 0xffff/*here.val*/;
            op &= 15;                       /* number of extra bits */
            if (bits < op) {
              hold += input[_in++] << bits;
              bits += 8;
              if (bits < op) {
                hold += input[_in++] << bits;
                bits += 8;
              }
            }
            dist += hold & ((1 << op) - 1);
//#ifdef INFLATE_STRICT
            if (dist > dmax) {
              strm.msg = 'invalid distance too far back';
              state.mode = BAD;
              break top;
            }
//#endif
            hold >>>= op;
            bits -= op;
            //Tracevv((stderr, "inflate:         distance %u\n", dist));
            op = _out - beg;                /* max distance in output */
            if (dist > op) {                /* see if copy from window */
              op = dist - op;               /* distance back in window */
              if (op > whave) {
                if (state.sane) {
                  strm.msg = 'invalid distance too far back';
                  state.mode = BAD;
                  break top;
                }

// (!) This block is disabled in zlib defaults,
// don't enable it for binary compatibility
//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
//                if (len <= op - whave) {
//                  do {
//                    output[_out++] = 0;
//                  } while (--len);
//                  continue top;
//                }
//                len -= op - whave;
//                do {
//                  output[_out++] = 0;
//                } while (--op > whave);
//                if (op === 0) {
//                  from = _out - dist;
//                  do {
//                    output[_out++] = output[from++];
//                  } while (--len);
//                  continue top;
//                }
//#endif
              }
              from = 0; // window index
              from_source = s_window;
              if (wnext === 0) {           /* very common case */
                from += wsize - op;
                if (op < len) {         /* some from window */
                  len -= op;
                  do {
                    output[_out++] = s_window[from++];
                  } while (--op);
                  from = _out - dist;  /* rest from output */
                  from_source = output;
                }
              }
              else if (wnext < op) {      /* wrap around window */
                from += wsize + wnext - op;
                op -= wnext;
                if (op < len) {         /* some from end of window */
                  len -= op;
                  do {
                    output[_out++] = s_window[from++];
                  } while (--op);
                  from = 0;
                  if (wnext < len) {  /* some from start of window */
                    op = wnext;
                    len -= op;
                    do {
                      output[_out++] = s_window[from++];
                    } while (--op);
                    from = _out - dist;      /* rest from output */
                    from_source = output;
                  }
                }
              }
              else {                      /* contiguous in window */
                from += wnext - op;
                if (op < len) {         /* some from window */
                  len -= op;
                  do {
                    output[_out++] = s_window[from++];
                  } while (--op);
                  from = _out - dist;  /* rest from output */
                  from_source = output;
                }
              }
              while (len > 2) {
                output[_out++] = from_source[from++];
                output[_out++] = from_source[from++];
                output[_out++] = from_source[from++];
                len -= 3;
              }
              if (len) {
                output[_out++] = from_source[from++];
                if (len > 1) {
                  output[_out++] = from_source[from++];
                }
              }
            }
            else {
              from = _out - dist;          /* copy direct from output */
              do {                        /* minimum length is three */
                output[_out++] = output[from++];
                output[_out++] = output[from++];
                output[_out++] = output[from++];
                len -= 3;
              } while (len > 2);
              if (len) {
                output[_out++] = output[from++];
                if (len > 1) {
                  output[_out++] = output[from++];
                }
              }
            }
          }
          else if ((op & 64) === 0) {          /* 2nd level distance code */
            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
            continue dodist;
          }
          else {
            strm.msg = 'invalid distance code';
            state.mode = BAD;
            break top;
          }

          break; // need to emulate goto via "continue"
        }
      }
      else if ((op & 64) === 0) {              /* 2nd level length code */
        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
        continue dolen;
      }
      else if (op & 32) {                     /* end-of-block */
        //Tracevv((stderr, "inflate:         end of block\n"));
        state.mode = TYPE;
        break top;
      }
      else {
        strm.msg = 'invalid literal/length code';
        state.mode = BAD;
        break top;
      }

      break; // need to emulate goto via "continue"
    }
  } while (_in < last && _out < end);

  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
  len = bits >> 3;
  _in -= len;
  bits -= len << 3;
  hold &= (1 << bits) - 1;

  /* update state and return */
  strm.next_in = _in;
  strm.next_out = _out;
  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));
  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));
  state.hold = hold;
  state.bits = bits;
  return;
};


/***/ }),

/***/ 7948:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

var utils         = __webpack_require__(4236);
var adler32       = __webpack_require__(6069);
var crc32         = __webpack_require__(1806);
var inflate_fast  = __webpack_require__(4264);
var inflate_table = __webpack_require__(9241);

var CODES = 0;
var LENS = 1;
var DISTS = 2;

/* Public constants ==========================================================*/
/* ===========================================================================*/


/* Allowed flush values; see deflate() and inflate() below for details */
//var Z_NO_FLUSH      = 0;
//var Z_PARTIAL_FLUSH = 1;
//var Z_SYNC_FLUSH    = 2;
//var Z_FULL_FLUSH    = 3;
var Z_FINISH        = 4;
var Z_BLOCK         = 5;
var Z_TREES         = 6;


/* Return codes for the compression/decompression functions. Negative values
 * are errors, positive values are used for special but normal events.
 */
var Z_OK            = 0;
var Z_STREAM_END    = 1;
var Z_NEED_DICT     = 2;
//var Z_ERRNO         = -1;
var Z_STREAM_ERROR  = -2;
var Z_DATA_ERROR    = -3;
var Z_MEM_ERROR     = -4;
var Z_BUF_ERROR     = -5;
//var Z_VERSION_ERROR = -6;

/* The deflate compression method */
var Z_DEFLATED  = 8;


/* STATES ====================================================================*/
/* ===========================================================================*/


var    HEAD = 1;       /* i: waiting for magic header */
var    FLAGS = 2;      /* i: waiting for method and flags (gzip) */
var    TIME = 3;       /* i: waiting for modification time (gzip) */
var    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */
var    EXLEN = 5;      /* i: waiting for extra length (gzip) */
var    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */
var    NAME = 7;       /* i: waiting for end of file name (gzip) */
var    COMMENT = 8;    /* i: waiting for end of comment (gzip) */
var    HCRC = 9;       /* i: waiting for header crc (gzip) */
var    DICTID = 10;    /* i: waiting for dictionary check value */
var    DICT = 11;      /* waiting for inflateSetDictionary() call */
var        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */
var        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */
var        STORED = 14;    /* i: waiting for stored size (length and complement) */
var        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */
var        COPY = 16;      /* i/o: waiting for input or output to copy stored block */
var        TABLE = 17;     /* i: waiting for dynamic block table lengths */
var        LENLENS = 18;   /* i: waiting for code length code lengths */
var        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */
var            LEN_ = 20;      /* i: same as LEN below, but only first time in */
var            LEN = 21;       /* i: waiting for length/lit/eob code */
var            LENEXT = 22;    /* i: waiting for length extra bits */
var            DIST = 23;      /* i: waiting for distance code */
var            DISTEXT = 24;   /* i: waiting for distance extra bits */
var            MATCH = 25;     /* o: waiting for output space to copy string */
var            LIT = 26;       /* o: waiting for output space to write literal */
var    CHECK = 27;     /* i: waiting for 32-bit check value */
var    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */
var    DONE = 29;      /* finished check, done -- remain here until reset */
var    BAD = 30;       /* got a data error -- remain here until reset */
var    MEM = 31;       /* got an inflate() memory error -- remain here until reset */
var    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */

/* ===========================================================================*/



var ENOUGH_LENS = 852;
var ENOUGH_DISTS = 592;
//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);

var MAX_WBITS = 15;
/* 32K LZ77 window */
var DEF_WBITS = MAX_WBITS;


function zswap32(q) {
  return  (((q >>> 24) & 0xff) +
          ((q >>> 8) & 0xff00) +
          ((q & 0xff00) << 8) +
          ((q & 0xff) << 24));
}


function InflateState() {
  this.mode = 0;             /* current inflate mode */
  this.last = false;          /* true if processing last block */
  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */
  this.havedict = false;      /* true if dictionary provided */
  this.flags = 0;             /* gzip header method and flags (0 if zlib) */
  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */
  this.check = 0;             /* protected copy of check value */
  this.total = 0;             /* protected copy of output count */
  // TODO: may be {}
  this.head = null;           /* where to save gzip header information */

  /* sliding window */
  this.wbits = 0;             /* log base 2 of requested window size */
  this.wsize = 0;             /* window size or zero if not using window */
  this.whave = 0;             /* valid bytes in the window */
  this.wnext = 0;             /* window write index */
  this.window = null;         /* allocated sliding window, if needed */

  /* bit accumulator */
  this.hold = 0;              /* input bit accumulator */
  this.bits = 0;              /* number of bits in "in" */

  /* for string and stored block copying */
  this.length = 0;            /* literal or length of data to copy */
  this.offset = 0;            /* distance back to copy string from */

  /* for table and code decoding */
  this.extra = 0;             /* extra bits needed */

  /* fixed and dynamic code tables */
  this.lencode = null;          /* starting table for length/literal codes */
  this.distcode = null;         /* starting table for distance codes */
  this.lenbits = 0;           /* index bits for lencode */
  this.distbits = 0;          /* index bits for distcode */

  /* dynamic table building */
  this.ncode = 0;             /* number of code length code lengths */
  this.nlen = 0;              /* number of length code lengths */
  this.ndist = 0;             /* number of distance code lengths */
  this.have = 0;              /* number of code lengths in lens[] */
  this.next = null;              /* next available space in codes[] */

  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */
  this.work = new utils.Buf16(288); /* work area for code table building */

  /*
   because we don't have pointers in js, we use lencode and distcode directly
   as buffers so we don't need codes
  */
  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */
  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */
  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */
  this.sane = 0;                   /* if false, allow invalid distance too far */
  this.back = 0;                   /* bits back of last unprocessed length/lit */
  this.was = 0;                    /* initial length of match */
}

function inflateResetKeep(strm) {
  var state;

  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  state = strm.state;
  strm.total_in = strm.total_out = state.total = 0;
  strm.msg = ''; /*Z_NULL*/
  if (state.wrap) {       /* to support ill-conceived Java test suite */
    strm.adler = state.wrap & 1;
  }
  state.mode = HEAD;
  state.last = 0;
  state.havedict = 0;
  state.dmax = 32768;
  state.head = null/*Z_NULL*/;
  state.hold = 0;
  state.bits = 0;
  //state.lencode = state.distcode = state.next = state.codes;
  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);
  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);

  state.sane = 1;
  state.back = -1;
  //Tracev((stderr, "inflate: reset\n"));
  return Z_OK;
}

function inflateReset(strm) {
  var state;

  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  state = strm.state;
  state.wsize = 0;
  state.whave = 0;
  state.wnext = 0;
  return inflateResetKeep(strm);

}

function inflateReset2(strm, windowBits) {
  var wrap;
  var state;

  /* get the state */
  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  state = strm.state;

  /* extract wrap request from windowBits parameter */
  if (windowBits < 0) {
    wrap = 0;
    windowBits = -windowBits;
  }
  else {
    wrap = (windowBits >> 4) + 1;
    if (windowBits < 48) {
      windowBits &= 15;
    }
  }

  /* set number of window bits, free window if different */
  if (windowBits && (windowBits < 8 || windowBits > 15)) {
    return Z_STREAM_ERROR;
  }
  if (state.window !== null && state.wbits !== windowBits) {
    state.window = null;
  }

  /* update state and reset the rest of it */
  state.wrap = wrap;
  state.wbits = windowBits;
  return inflateReset(strm);
}

function inflateInit2(strm, windowBits) {
  var ret;
  var state;

  if (!strm) { return Z_STREAM_ERROR; }
  //strm.msg = Z_NULL;                 /* in case we return an error */

  state = new InflateState();

  //if (state === Z_NULL) return Z_MEM_ERROR;
  //Tracev((stderr, "inflate: allocated\n"));
  strm.state = state;
  state.window = null/*Z_NULL*/;
  ret = inflateReset2(strm, windowBits);
  if (ret !== Z_OK) {
    strm.state = null/*Z_NULL*/;
  }
  return ret;
}

function inflateInit(strm) {
  return inflateInit2(strm, DEF_WBITS);
}


/*
 Return state with length and distance decoding tables and index sizes set to
 fixed code decoding.  Normally this returns fixed tables from inffixed.h.
 If BUILDFIXED is defined, then instead this routine builds the tables the
 first time it's called, and returns those tables the first time and
 thereafter.  This reduces the size of the code by about 2K bytes, in
 exchange for a little execution time.  However, BUILDFIXED should not be
 used for threaded applications, since the rewriting of the tables and virgin
 may not be thread-safe.
 */
var virgin = true;

var lenfix, distfix; // We have no pointers in JS, so keep tables separate

function fixedtables(state) {
  /* build fixed huffman tables if first call (may not be thread safe) */
  if (virgin) {
    var sym;

    lenfix = new utils.Buf32(512);
    distfix = new utils.Buf32(32);

    /* literal/length table */
    sym = 0;
    while (sym < 144) { state.lens[sym++] = 8; }
    while (sym < 256) { state.lens[sym++] = 9; }
    while (sym < 280) { state.lens[sym++] = 7; }
    while (sym < 288) { state.lens[sym++] = 8; }

    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });

    /* distance table */
    sym = 0;
    while (sym < 32) { state.lens[sym++] = 5; }

    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });

    /* do this just once */
    virgin = false;
  }

  state.lencode = lenfix;
  state.lenbits = 9;
  state.distcode = distfix;
  state.distbits = 5;
}


/*
 Update the window with the last wsize (normally 32K) bytes written before
 returning.  If window does not exist yet, create it.  This is only called
 when a window is already in use, or when output has been written during this
 inflate call, but the end of the deflate stream has not been reached yet.
 It is also called to create a window for dictionary data when a dictionary
 is loaded.

 Providing output buffers larger than 32K to inflate() should provide a speed
 advantage, since only the last 32K of output is copied to the sliding window
 upon return from inflate(), and since all distances after the first 32K of
 output will fall in the output data, making match copies simpler and faster.
 The advantage may be dependent on the size of the processor's data caches.
 */
function updatewindow(strm, src, end, copy) {
  var dist;
  var state = strm.state;

  /* if it hasn't been done already, allocate space for the window */
  if (state.window === null) {
    state.wsize = 1 << state.wbits;
    state.wnext = 0;
    state.whave = 0;

    state.window = new utils.Buf8(state.wsize);
  }

  /* copy state->wsize or less output bytes into the circular window */
  if (copy >= state.wsize) {
    utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);
    state.wnext = 0;
    state.whave = state.wsize;
  }
  else {
    dist = state.wsize - state.wnext;
    if (dist > copy) {
      dist = copy;
    }
    //zmemcpy(state->window + state->wnext, end - copy, dist);
    utils.arraySet(state.window, src, end - copy, dist, state.wnext);
    copy -= dist;
    if (copy) {
      //zmemcpy(state->window, end - copy, copy);
      utils.arraySet(state.window, src, end - copy, copy, 0);
      state.wnext = copy;
      state.whave = state.wsize;
    }
    else {
      state.wnext += dist;
      if (state.wnext === state.wsize) { state.wnext = 0; }
      if (state.whave < state.wsize) { state.whave += dist; }
    }
  }
  return 0;
}

function inflate(strm, flush) {
  var state;
  var input, output;          // input/output buffers
  var next;                   /* next input INDEX */
  var put;                    /* next output INDEX */
  var have, left;             /* available input and output */
  var hold;                   /* bit buffer */
  var bits;                   /* bits in bit buffer */
  var _in, _out;              /* save starting available input and output */
  var copy;                   /* number of stored or match bytes to copy */
  var from;                   /* where to copy match bytes from */
  var from_source;
  var here = 0;               /* current decoding table entry */
  var here_bits, here_op, here_val; // paked "here" denormalized (JS specific)
  //var last;                   /* parent table entry */
  var last_bits, last_op, last_val; // paked "last" denormalized (JS specific)
  var len;                    /* length to copy for repeats, bits to drop */
  var ret;                    /* return code */
  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */
  var opts;

  var n; // temporary var for NEED_BITS

  var order = /* permutation of code lengths */
    [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];


  if (!strm || !strm.state || !strm.output ||
      (!strm.input && strm.avail_in !== 0)) {
    return Z_STREAM_ERROR;
  }

  state = strm.state;
  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */


  //--- LOAD() ---
  put = strm.next_out;
  output = strm.output;
  left = strm.avail_out;
  next = strm.next_in;
  input = strm.input;
  have = strm.avail_in;
  hold = state.hold;
  bits = state.bits;
  //---

  _in = have;
  _out = left;
  ret = Z_OK;

  inf_leave: // goto emulation
  for (;;) {
    switch (state.mode) {
      case HEAD:
        if (state.wrap === 0) {
          state.mode = TYPEDO;
          break;
        }
        //=== NEEDBITS(16);
        while (bits < 16) {
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
        }
        //===//
        if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */
          state.check = 0/*crc32(0L, Z_NULL, 0)*/;
          //=== CRC2(state.check, hold);
          hbuf[0] = hold & 0xff;
          hbuf[1] = (hold >>> 8) & 0xff;
          state.check = crc32(state.check, hbuf, 2, 0);
          //===//

          //=== INITBITS();
          hold = 0;
          bits = 0;
          //===//
          state.mode = FLAGS;
          break;
        }
        state.flags = 0;           /* expect zlib header */
        if (state.head) {
          state.head.done = false;
        }
        if (!(state.wrap & 1) ||   /* check if zlib header allowed */
          (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {
          strm.msg = 'incorrect header check';
          state.mode = BAD;
          break;
        }
        if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {
          strm.msg = 'unknown compression method';
          state.mode = BAD;
          break;
        }
        //--- DROPBITS(4) ---//
        hold >>>= 4;
        bits -= 4;
        //---//
        len = (hold & 0x0f)/*BITS(4)*/ + 8;
        if (state.wbits === 0) {
          state.wbits = len;
        }
        else if (len > state.wbits) {
          strm.msg = 'invalid window size';
          state.mode = BAD;
          break;
        }
        state.dmax = 1 << len;
        //Tracev((stderr, "inflate:   zlib header ok\n"));
        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
        state.mode = hold & 0x200 ? DICTID : TYPE;
        //=== INITBITS();
        hold = 0;
        bits = 0;
        //===//
        break;
      case FLAGS:
        //=== NEEDBITS(16); */
        while (bits < 16) {
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
        }
        //===//
        state.flags = hold;
        if ((state.flags & 0xff) !== Z_DEFLATED) {
          strm.msg = 'unknown compression method';
          state.mode = BAD;
          break;
        }
        if (state.flags & 0xe000) {
          strm.msg = 'unknown header flags set';
          state.mode = BAD;
          break;
        }
        if (state.head) {
          state.head.text = ((hold >> 8) & 1);
        }
        if (state.flags & 0x0200) {
          //=== CRC2(state.check, hold);
          hbuf[0] = hold & 0xff;
          hbuf[1] = (hold >>> 8) & 0xff;
          state.check = crc32(state.check, hbuf, 2, 0);
          //===//
        }
        //=== INITBITS();
        hold = 0;
        bits = 0;
        //===//
        state.mode = TIME;
        /* falls through */
      case TIME:
        //=== NEEDBITS(32); */
        while (bits < 32) {
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
        }
        //===//
        if (state.head) {
          state.head.time = hold;
        }
        if (state.flags & 0x0200) {
          //=== CRC4(state.check, hold)
          hbuf[0] = hold & 0xff;
          hbuf[1] = (hold >>> 8) & 0xff;
          hbuf[2] = (hold >>> 16) & 0xff;
          hbuf[3] = (hold >>> 24) & 0xff;
          state.check = crc32(state.check, hbuf, 4, 0);
          //===
        }
        //=== INITBITS();
        hold = 0;
        bits = 0;
        //===//
        state.mode = OS;
        /* falls through */
      case OS:
        //=== NEEDBITS(16); */
        while (bits < 16) {
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
        }
        //===//
        if (state.head) {
          state.head.xflags = (hold & 0xff);
          state.head.os = (hold >> 8);
        }
        if (state.flags & 0x0200) {
          //=== CRC2(state.check, hold);
          hbuf[0] = hold & 0xff;
          hbuf[1] = (hold >>> 8) & 0xff;
          state.check = crc32(state.check, hbuf, 2, 0);
          //===//
        }
        //=== INITBITS();
        hold = 0;
        bits = 0;
        //===//
        state.mode = EXLEN;
        /* falls through */
      case EXLEN:
        if (state.flags & 0x0400) {
          //=== NEEDBITS(16); */
          while (bits < 16) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          state.length = hold;
          if (state.head) {
            state.head.extra_len = hold;
          }
          if (state.flags & 0x0200) {
            //=== CRC2(state.check, hold);
            hbuf[0] = hold & 0xff;
            hbuf[1] = (hold >>> 8) & 0xff;
            state.check = crc32(state.check, hbuf, 2, 0);
            //===//
          }
          //=== INITBITS();
          hold = 0;
          bits = 0;
          //===//
        }
        else if (state.head) {
          state.head.extra = null/*Z_NULL*/;
        }
        state.mode = EXTRA;
        /* falls through */
      case EXTRA:
        if (state.flags & 0x0400) {
          copy = state.length;
          if (copy > have) { copy = have; }
          if (copy) {
            if (state.head) {
              len = state.head.extra_len - state.length;
              if (!state.head.extra) {
                // Use untyped array for more convenient processing later
                state.head.extra = new Array(state.head.extra_len);
              }
              utils.arraySet(
                state.head.extra,
                input,
                next,
                // extra field is limited to 65536 bytes
                // - no need for additional size check
                copy,
                /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
                len
              );
              //zmemcpy(state.head.extra + len, next,
              //        len + copy > state.head.extra_max ?
              //        state.head.extra_max - len : copy);
            }
            if (state.flags & 0x0200) {
              state.check = crc32(state.check, input, copy, next);
            }
            have -= copy;
            next += copy;
            state.length -= copy;
          }
          if (state.length) { break inf_leave; }
        }
        state.length = 0;
        state.mode = NAME;
        /* falls through */
      case NAME:
        if (state.flags & 0x0800) {
          if (have === 0) { break inf_leave; }
          copy = 0;
          do {
            // TODO: 2 or 1 bytes?
            len = input[next + copy++];
            /* use constant limit because in js we should not preallocate memory */
            if (state.head && len &&
                (state.length < 65536 /*state.head.name_max*/)) {
              state.head.name += String.fromCharCode(len);
            }
          } while (len && copy < have);

          if (state.flags & 0x0200) {
            state.check = crc32(state.check, input, copy, next);
          }
          have -= copy;
          next += copy;
          if (len) { break inf_leave; }
        }
        else if (state.head) {
          state.head.name = null;
        }
        state.length = 0;
        state.mode = COMMENT;
        /* falls through */
      case COMMENT:
        if (state.flags & 0x1000) {
          if (have === 0) { break inf_leave; }
          copy = 0;
          do {
            len = input[next + copy++];
            /* use constant limit because in js we should not preallocate memory */
            if (state.head && len &&
                (state.length < 65536 /*state.head.comm_max*/)) {
              state.head.comment += String.fromCharCode(len);
            }
          } while (len && copy < have);
          if (state.flags & 0x0200) {
            state.check = crc32(state.check, input, copy, next);
          }
          have -= copy;
          next += copy;
          if (len) { break inf_leave; }
        }
        else if (state.head) {
          state.head.comment = null;
        }
        state.mode = HCRC;
        /* falls through */
      case HCRC:
        if (state.flags & 0x0200) {
          //=== NEEDBITS(16); */
          while (bits < 16) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          if (hold !== (state.check & 0xffff)) {
            strm.msg = 'header crc mismatch';
            state.mode = BAD;
            break;
          }
          //=== INITBITS();
          hold = 0;
          bits = 0;
          //===//
        }
        if (state.head) {
          state.head.hcrc = ((state.flags >> 9) & 1);
          state.head.done = true;
        }
        strm.adler = state.check = 0;
        state.mode = TYPE;
        break;
      case DICTID:
        //=== NEEDBITS(32); */
        while (bits < 32) {
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
        }
        //===//
        strm.adler = state.check = zswap32(hold);
        //=== INITBITS();
        hold = 0;
        bits = 0;
        //===//
        state.mode = DICT;
        /* falls through */
      case DICT:
        if (state.havedict === 0) {
          //--- RESTORE() ---
          strm.next_out = put;
          strm.avail_out = left;
          strm.next_in = next;
          strm.avail_in = have;
          state.hold = hold;
          state.bits = bits;
          //---
          return Z_NEED_DICT;
        }
        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
        state.mode = TYPE;
        /* falls through */
      case TYPE:
        if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }
        /* falls through */
      case TYPEDO:
        if (state.last) {
          //--- BYTEBITS() ---//
          hold >>>= bits & 7;
          bits -= bits & 7;
          //---//
          state.mode = CHECK;
          break;
        }
        //=== NEEDBITS(3); */
        while (bits < 3) {
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
        }
        //===//
        state.last = (hold & 0x01)/*BITS(1)*/;
        //--- DROPBITS(1) ---//
        hold >>>= 1;
        bits -= 1;
        //---//

        switch ((hold & 0x03)/*BITS(2)*/) {
          case 0:                             /* stored block */
            //Tracev((stderr, "inflate:     stored block%s\n",
            //        state.last ? " (last)" : ""));
            state.mode = STORED;
            break;
          case 1:                             /* fixed block */
            fixedtables(state);
            //Tracev((stderr, "inflate:     fixed codes block%s\n",
            //        state.last ? " (last)" : ""));
            state.mode = LEN_;             /* decode codes */
            if (flush === Z_TREES) {
              //--- DROPBITS(2) ---//
              hold >>>= 2;
              bits -= 2;
              //---//
              break inf_leave;
            }
            break;
          case 2:                             /* dynamic block */
            //Tracev((stderr, "inflate:     dynamic codes block%s\n",
            //        state.last ? " (last)" : ""));
            state.mode = TABLE;
            break;
          case 3:
            strm.msg = 'invalid block type';
            state.mode = BAD;
        }
        //--- DROPBITS(2) ---//
        hold >>>= 2;
        bits -= 2;
        //---//
        break;
      case STORED:
        //--- BYTEBITS() ---// /* go to byte boundary */
        hold >>>= bits & 7;
        bits -= bits & 7;
        //---//
        //=== NEEDBITS(32); */
        while (bits < 32) {
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
        }
        //===//
        if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {
          strm.msg = 'invalid stored block lengths';
          state.mode = BAD;
          break;
        }
        state.length = hold & 0xffff;
        //Tracev((stderr, "inflate:       stored length %u\n",
        //        state.length));
        //=== INITBITS();
        hold = 0;
        bits = 0;
        //===//
        state.mode = COPY_;
        if (flush === Z_TREES) { break inf_leave; }
        /* falls through */
      case COPY_:
        state.mode = COPY;
        /* falls through */
      case COPY:
        copy = state.length;
        if (copy) {
          if (copy > have) { copy = have; }
          if (copy > left) { copy = left; }
          if (copy === 0) { break inf_leave; }
          //--- zmemcpy(put, next, copy); ---
          utils.arraySet(output, input, next, copy, put);
          //---//
          have -= copy;
          next += copy;
          left -= copy;
          put += copy;
          state.length -= copy;
          break;
        }
        //Tracev((stderr, "inflate:       stored end\n"));
        state.mode = TYPE;
        break;
      case TABLE:
        //=== NEEDBITS(14); */
        while (bits < 14) {
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
        }
        //===//
        state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;
        //--- DROPBITS(5) ---//
        hold >>>= 5;
        bits -= 5;
        //---//
        state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;
        //--- DROPBITS(5) ---//
        hold >>>= 5;
        bits -= 5;
        //---//
        state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;
        //--- DROPBITS(4) ---//
        hold >>>= 4;
        bits -= 4;
        //---//
//#ifndef PKZIP_BUG_WORKAROUND
        if (state.nlen > 286 || state.ndist > 30) {
          strm.msg = 'too many length or distance symbols';
          state.mode = BAD;
          break;
        }
//#endif
        //Tracev((stderr, "inflate:       table sizes ok\n"));
        state.have = 0;
        state.mode = LENLENS;
        /* falls through */
      case LENLENS:
        while (state.have < state.ncode) {
          //=== NEEDBITS(3);
          while (bits < 3) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);
          //--- DROPBITS(3) ---//
          hold >>>= 3;
          bits -= 3;
          //---//
        }
        while (state.have < 19) {
          state.lens[order[state.have++]] = 0;
        }
        // We have separate tables & no pointers. 2 commented lines below not needed.
        //state.next = state.codes;
        //state.lencode = state.next;
        // Switch to use dynamic table
        state.lencode = state.lendyn;
        state.lenbits = 7;

        opts = { bits: state.lenbits };
        ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
        state.lenbits = opts.bits;

        if (ret) {
          strm.msg = 'invalid code lengths set';
          state.mode = BAD;
          break;
        }
        //Tracev((stderr, "inflate:       code lengths ok\n"));
        state.have = 0;
        state.mode = CODELENS;
        /* falls through */
      case CODELENS:
        while (state.have < state.nlen + state.ndist) {
          for (;;) {
            here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/
            here_bits = here >>> 24;
            here_op = (here >>> 16) & 0xff;
            here_val = here & 0xffff;

            if ((here_bits) <= bits) { break; }
            //--- PULLBYTE() ---//
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
            //---//
          }
          if (here_val < 16) {
            //--- DROPBITS(here.bits) ---//
            hold >>>= here_bits;
            bits -= here_bits;
            //---//
            state.lens[state.have++] = here_val;
          }
          else {
            if (here_val === 16) {
              //=== NEEDBITS(here.bits + 2);
              n = here_bits + 2;
              while (bits < n) {
                if (have === 0) { break inf_leave; }
                have--;
                hold += input[next++] << bits;
                bits += 8;
              }
              //===//
              //--- DROPBITS(here.bits) ---//
              hold >>>= here_bits;
              bits -= here_bits;
              //---//
              if (state.have === 0) {
                strm.msg = 'invalid bit length repeat';
                state.mode = BAD;
                break;
              }
              len = state.lens[state.have - 1];
              copy = 3 + (hold & 0x03);//BITS(2);
              //--- DROPBITS(2) ---//
              hold >>>= 2;
              bits -= 2;
              //---//
            }
            else if (here_val === 17) {
              //=== NEEDBITS(here.bits + 3);
              n = here_bits + 3;
              while (bits < n) {
                if (have === 0) { break inf_leave; }
                have--;
                hold += input[next++] << bits;
                bits += 8;
              }
              //===//
              //--- DROPBITS(here.bits) ---//
              hold >>>= here_bits;
              bits -= here_bits;
              //---//
              len = 0;
              copy = 3 + (hold & 0x07);//BITS(3);
              //--- DROPBITS(3) ---//
              hold >>>= 3;
              bits -= 3;
              //---//
            }
            else {
              //=== NEEDBITS(here.bits + 7);
              n = here_bits + 7;
              while (bits < n) {
                if (have === 0) { break inf_leave; }
                have--;
                hold += input[next++] << bits;
                bits += 8;
              }
              //===//
              //--- DROPBITS(here.bits) ---//
              hold >>>= here_bits;
              bits -= here_bits;
              //---//
              len = 0;
              copy = 11 + (hold & 0x7f);//BITS(7);
              //--- DROPBITS(7) ---//
              hold >>>= 7;
              bits -= 7;
              //---//
            }
            if (state.have + copy > state.nlen + state.ndist) {
              strm.msg = 'invalid bit length repeat';
              state.mode = BAD;
              break;
            }
            while (copy--) {
              state.lens[state.have++] = len;
            }
          }
        }

        /* handle error breaks in while */
        if (state.mode === BAD) { break; }

        /* check for end-of-block code (better have one) */
        if (state.lens[256] === 0) {
          strm.msg = 'invalid code -- missing end-of-block';
          state.mode = BAD;
          break;
        }

        /* build code tables -- note: do not change the lenbits or distbits
           values here (9 and 6) without reading the comments in inftrees.h
           concerning the ENOUGH constants, which depend on those values */
        state.lenbits = 9;

        opts = { bits: state.lenbits };
        ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);
        // We have separate tables & no pointers. 2 commented lines below not needed.
        // state.next_index = opts.table_index;
        state.lenbits = opts.bits;
        // state.lencode = state.next;

        if (ret) {
          strm.msg = 'invalid literal/lengths set';
          state.mode = BAD;
          break;
        }

        state.distbits = 6;
        //state.distcode.copy(state.codes);
        // Switch to use dynamic table
        state.distcode = state.distdyn;
        opts = { bits: state.distbits };
        ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);
        // We have separate tables & no pointers. 2 commented lines below not needed.
        // state.next_index = opts.table_index;
        state.distbits = opts.bits;
        // state.distcode = state.next;

        if (ret) {
          strm.msg = 'invalid distances set';
          state.mode = BAD;
          break;
        }
        //Tracev((stderr, 'inflate:       codes ok\n'));
        state.mode = LEN_;
        if (flush === Z_TREES) { break inf_leave; }
        /* falls through */
      case LEN_:
        state.mode = LEN;
        /* falls through */
      case LEN:
        if (have >= 6 && left >= 258) {
          //--- RESTORE() ---
          strm.next_out = put;
          strm.avail_out = left;
          strm.next_in = next;
          strm.avail_in = have;
          state.hold = hold;
          state.bits = bits;
          //---
          inflate_fast(strm, _out);
          //--- LOAD() ---
          put = strm.next_out;
          output = strm.output;
          left = strm.avail_out;
          next = strm.next_in;
          input = strm.input;
          have = strm.avail_in;
          hold = state.hold;
          bits = state.bits;
          //---

          if (state.mode === TYPE) {
            state.back = -1;
          }
          break;
        }
        state.back = 0;
        for (;;) {
          here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/
          here_bits = here >>> 24;
          here_op = (here >>> 16) & 0xff;
          here_val = here & 0xffff;

          if (here_bits <= bits) { break; }
          //--- PULLBYTE() ---//
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
          //---//
        }
        if (here_op && (here_op & 0xf0) === 0) {
          last_bits = here_bits;
          last_op = here_op;
          last_val = here_val;
          for (;;) {
            here = state.lencode[last_val +
                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
            here_bits = here >>> 24;
            here_op = (here >>> 16) & 0xff;
            here_val = here & 0xffff;

            if ((last_bits + here_bits) <= bits) { break; }
            //--- PULLBYTE() ---//
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
            //---//
          }
          //--- DROPBITS(last.bits) ---//
          hold >>>= last_bits;
          bits -= last_bits;
          //---//
          state.back += last_bits;
        }
        //--- DROPBITS(here.bits) ---//
        hold >>>= here_bits;
        bits -= here_bits;
        //---//
        state.back += here_bits;
        state.length = here_val;
        if (here_op === 0) {
          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
          //        "inflate:         literal '%c'\n" :
          //        "inflate:         literal 0x%02x\n", here.val));
          state.mode = LIT;
          break;
        }
        if (here_op & 32) {
          //Tracevv((stderr, "inflate:         end of block\n"));
          state.back = -1;
          state.mode = TYPE;
          break;
        }
        if (here_op & 64) {
          strm.msg = 'invalid literal/length code';
          state.mode = BAD;
          break;
        }
        state.extra = here_op & 15;
        state.mode = LENEXT;
        /* falls through */
      case LENEXT:
        if (state.extra) {
          //=== NEEDBITS(state.extra);
          n = state.extra;
          while (bits < n) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
          //--- DROPBITS(state.extra) ---//
          hold >>>= state.extra;
          bits -= state.extra;
          //---//
          state.back += state.extra;
        }
        //Tracevv((stderr, "inflate:         length %u\n", state.length));
        state.was = state.length;
        state.mode = DIST;
        /* falls through */
      case DIST:
        for (;;) {
          here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/
          here_bits = here >>> 24;
          here_op = (here >>> 16) & 0xff;
          here_val = here & 0xffff;

          if ((here_bits) <= bits) { break; }
          //--- PULLBYTE() ---//
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
          //---//
        }
        if ((here_op & 0xf0) === 0) {
          last_bits = here_bits;
          last_op = here_op;
          last_val = here_val;
          for (;;) {
            here = state.distcode[last_val +
                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
            here_bits = here >>> 24;
            here_op = (here >>> 16) & 0xff;
            here_val = here & 0xffff;

            if ((last_bits + here_bits) <= bits) { break; }
            //--- PULLBYTE() ---//
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
            //---//
          }
          //--- DROPBITS(last.bits) ---//
          hold >>>= last_bits;
          bits -= last_bits;
          //---//
          state.back += last_bits;
        }
        //--- DROPBITS(here.bits) ---//
        hold >>>= here_bits;
        bits -= here_bits;
        //---//
        state.back += here_bits;
        if (here_op & 64) {
          strm.msg = 'invalid distance code';
          state.mode = BAD;
          break;
        }
        state.offset = here_val;
        state.extra = (here_op) & 15;
        state.mode = DISTEXT;
        /* falls through */
      case DISTEXT:
        if (state.extra) {
          //=== NEEDBITS(state.extra);
          n = state.extra;
          while (bits < n) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
          //--- DROPBITS(state.extra) ---//
          hold >>>= state.extra;
          bits -= state.extra;
          //---//
          state.back += state.extra;
        }
//#ifdef INFLATE_STRICT
        if (state.offset > state.dmax) {
          strm.msg = 'invalid distance too far back';
          state.mode = BAD;
          break;
        }
//#endif
        //Tracevv((stderr, "inflate:         distance %u\n", state.offset));
        state.mode = MATCH;
        /* falls through */
      case MATCH:
        if (left === 0) { break inf_leave; }
        copy = _out - left;
        if (state.offset > copy) {         /* copy from window */
          copy = state.offset - copy;
          if (copy > state.whave) {
            if (state.sane) {
              strm.msg = 'invalid distance too far back';
              state.mode = BAD;
              break;
            }
// (!) This block is disabled in zlib defaults,
// don't enable it for binary compatibility
//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
//          Trace((stderr, "inflate.c too far\n"));
//          copy -= state.whave;
//          if (copy > state.length) { copy = state.length; }
//          if (copy > left) { copy = left; }
//          left -= copy;
//          state.length -= copy;
//          do {
//            output[put++] = 0;
//          } while (--copy);
//          if (state.length === 0) { state.mode = LEN; }
//          break;
//#endif
          }
          if (copy > state.wnext) {
            copy -= state.wnext;
            from = state.wsize - copy;
          }
          else {
            from = state.wnext - copy;
          }
          if (copy > state.length) { copy = state.length; }
          from_source = state.window;
        }
        else {                              /* copy from output */
          from_source = output;
          from = put - state.offset;
          copy = state.length;
        }
        if (copy > left) { copy = left; }
        left -= copy;
        state.length -= copy;
        do {
          output[put++] = from_source[from++];
        } while (--copy);
        if (state.length === 0) { state.mode = LEN; }
        break;
      case LIT:
        if (left === 0) { break inf_leave; }
        output[put++] = state.length;
        left--;
        state.mode = LEN;
        break;
      case CHECK:
        if (state.wrap) {
          //=== NEEDBITS(32);
          while (bits < 32) {
            if (have === 0) { break inf_leave; }
            have--;
            // Use '|' instead of '+' to make sure that result is signed
            hold |= input[next++] << bits;
            bits += 8;
          }
          //===//
          _out -= left;
          strm.total_out += _out;
          state.total += _out;
          if (_out) {
            strm.adler = state.check =
                /*UPDATE(state.check, put - _out, _out);*/
                (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));

          }
          _out = left;
          // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too
          if ((state.flags ? hold : zswap32(hold)) !== state.check) {
            strm.msg = 'incorrect data check';
            state.mode = BAD;
            break;
          }
          //=== INITBITS();
          hold = 0;
          bits = 0;
          //===//
          //Tracev((stderr, "inflate:   check matches trailer\n"));
        }
        state.mode = LENGTH;
        /* falls through */
      case LENGTH:
        if (state.wrap && state.flags) {
          //=== NEEDBITS(32);
          while (bits < 32) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          if (hold !== (state.total & 0xffffffff)) {
            strm.msg = 'incorrect length check';
            state.mode = BAD;
            break;
          }
          //=== INITBITS();
          hold = 0;
          bits = 0;
          //===//
          //Tracev((stderr, "inflate:   length matches trailer\n"));
        }
        state.mode = DONE;
        /* falls through */
      case DONE:
        ret = Z_STREAM_END;
        break inf_leave;
      case BAD:
        ret = Z_DATA_ERROR;
        break inf_leave;
      case MEM:
        return Z_MEM_ERROR;
      case SYNC:
        /* falls through */
      default:
        return Z_STREAM_ERROR;
    }
  }

  // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"

  /*
     Return from inflate(), updating the total counts and the check value.
     If there was no progress during the inflate() call, return a buffer
     error.  Call updatewindow() to create and/or update the window state.
     Note: a memory error from inflate() is non-recoverable.
   */

  //--- RESTORE() ---
  strm.next_out = put;
  strm.avail_out = left;
  strm.next_in = next;
  strm.avail_in = have;
  state.hold = hold;
  state.bits = bits;
  //---

  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&
                      (state.mode < CHECK || flush !== Z_FINISH))) {
    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {
      state.mode = MEM;
      return Z_MEM_ERROR;
    }
  }
  _in -= strm.avail_in;
  _out -= strm.avail_out;
  strm.total_in += _in;
  strm.total_out += _out;
  state.total += _out;
  if (state.wrap && _out) {
    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/
      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));
  }
  strm.data_type = state.bits + (state.last ? 64 : 0) +
                    (state.mode === TYPE ? 128 : 0) +
                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {
    ret = Z_BUF_ERROR;
  }
  return ret;
}

function inflateEnd(strm) {

  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {
    return Z_STREAM_ERROR;
  }

  var state = strm.state;
  if (state.window) {
    state.window = null;
  }
  strm.state = null;
  return Z_OK;
}

function inflateGetHeader(strm, head) {
  var state;

  /* check state */
  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  state = strm.state;
  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }

  /* save header structure */
  state.head = head;
  head.done = false;
  return Z_OK;
}

function inflateSetDictionary(strm, dictionary) {
  var dictLength = dictionary.length;

  var state;
  var dictid;
  var ret;

  /* check state */
  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }
  state = strm.state;

  if (state.wrap !== 0 && state.mode !== DICT) {
    return Z_STREAM_ERROR;
  }

  /* check for correct dictionary identifier */
  if (state.mode === DICT) {
    dictid = 1; /* adler32(0, null, 0)*/
    /* dictid = adler32(dictid, dictionary, dictLength); */
    dictid = adler32(dictid, dictionary, dictLength, 0);
    if (dictid !== state.check) {
      return Z_DATA_ERROR;
    }
  }
  /* copy dictionary to window using updatewindow(), which will amend the
   existing dictionary if appropriate */
  ret = updatewindow(strm, dictionary, dictLength, dictLength);
  if (ret) {
    state.mode = MEM;
    return Z_MEM_ERROR;
  }
  state.havedict = 1;
  // Tracev((stderr, "inflate:   dictionary set\n"));
  return Z_OK;
}

exports.inflateReset = inflateReset;
exports.inflateReset2 = inflateReset2;
exports.inflateResetKeep = inflateResetKeep;
exports.inflateInit = inflateInit;
exports.inflateInit2 = inflateInit2;
exports.inflate = inflate;
exports.inflateEnd = inflateEnd;
exports.inflateGetHeader = inflateGetHeader;
exports.inflateSetDictionary = inflateSetDictionary;
exports.inflateInfo = 'pako inflate (from Nodeca project)';

/* Not implemented
exports.inflateCopy = inflateCopy;
exports.inflateGetDictionary = inflateGetDictionary;
exports.inflateMark = inflateMark;
exports.inflatePrime = inflatePrime;
exports.inflateSync = inflateSync;
exports.inflateSyncPoint = inflateSyncPoint;
exports.inflateUndermine = inflateUndermine;
*/


/***/ }),

/***/ 9241:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

var utils = __webpack_require__(4236);

var MAXBITS = 15;
var ENOUGH_LENS = 852;
var ENOUGH_DISTS = 592;
//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);

var CODES = 0;
var LENS = 1;
var DISTS = 2;

var lbase = [ /* Length codes 257..285 base */
  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
];

var lext = [ /* Length codes 257..285 extra */
  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78
];

var dbase = [ /* Distance codes 0..29 base */
  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
  8193, 12289, 16385, 24577, 0, 0
];

var dext = [ /* Distance codes 0..29 extra */
  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
  28, 28, 29, 29, 64, 64
];

module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)
{
  var bits = opts.bits;
      //here = opts.here; /* table entry for duplication */

  var len = 0;               /* a code's length in bits */
  var sym = 0;               /* index of code symbols */
  var min = 0, max = 0;          /* minimum and maximum code lengths */
  var root = 0;              /* number of index bits for root table */
  var curr = 0;              /* number of index bits for current table */
  var drop = 0;              /* code bits to drop for sub-table */
  var left = 0;                   /* number of prefix codes available */
  var used = 0;              /* code entries in table used */
  var huff = 0;              /* Huffman code */
  var incr;              /* for incrementing code, index */
  var fill;              /* index for replicating entries */
  var low;               /* low bits for current root entry */
  var mask;              /* mask for low root bits */
  var next;             /* next available space in table */
  var base = null;     /* base value table to use */
  var base_index = 0;
//  var shoextra;    /* extra bits table to use */
  var end;                    /* use base and extra for symbol > end */
  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */
  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */
  var extra = null;
  var extra_index = 0;

  var here_bits, here_op, here_val;

  /*
   Process a set of code lengths to create a canonical Huffman code.  The
   code lengths are lens[0..codes-1].  Each length corresponds to the
   symbols 0..codes-1.  The Huffman code is generated by first sorting the
   symbols by length from short to long, and retaining the symbol order
   for codes with equal lengths.  Then the code starts with all zero bits
   for the first code of the shortest length, and the codes are integer
   increments for the same length, and zeros are appended as the length
   increases.  For the deflate format, these bits are stored backwards
   from their more natural integer increment ordering, and so when the
   decoding tables are built in the large loop below, the integer codes
   are incremented backwards.

   This routine assumes, but does not check, that all of the entries in
   lens[] are in the range 0..MAXBITS.  The caller must assure this.
   1..MAXBITS is interpreted as that code length.  zero means that that
   symbol does not occur in this code.

   The codes are sorted by computing a count of codes for each length,
   creating from that a table of starting indices for each length in the
   sorted table, and then entering the symbols in order in the sorted
   table.  The sorted table is work[], with that space being provided by
   the caller.

   The length counts are used for other purposes as well, i.e. finding
   the minimum and maximum length codes, determining if there are any
   codes at all, checking for a valid set of lengths, and looking ahead
   at length counts to determine sub-table sizes when building the
   decoding tables.
   */

  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
  for (len = 0; len <= MAXBITS; len++) {
    count[len] = 0;
  }
  for (sym = 0; sym < codes; sym++) {
    count[lens[lens_index + sym]]++;
  }

  /* bound code lengths, force root to be within code lengths */
  root = bits;
  for (max = MAXBITS; max >= 1; max--) {
    if (count[max] !== 0) { break; }
  }
  if (root > max) {
    root = max;
  }
  if (max === 0) {                     /* no symbols to code at all */
    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */
    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;
    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;
    table[table_index++] = (1 << 24) | (64 << 16) | 0;


    //table.op[opts.table_index] = 64;
    //table.bits[opts.table_index] = 1;
    //table.val[opts.table_index++] = 0;
    table[table_index++] = (1 << 24) | (64 << 16) | 0;

    opts.bits = 1;
    return 0;     /* no symbols, but wait for decoding to report error */
  }
  for (min = 1; min < max; min++) {
    if (count[min] !== 0) { break; }
  }
  if (root < min) {
    root = min;
  }

  /* check for an over-subscribed or incomplete set of lengths */
  left = 1;
  for (len = 1; len <= MAXBITS; len++) {
    left <<= 1;
    left -= count[len];
    if (left < 0) {
      return -1;
    }        /* over-subscribed */
  }
  if (left > 0 && (type === CODES || max !== 1)) {
    return -1;                      /* incomplete set */
  }

  /* generate offsets into symbol table for each length for sorting */
  offs[1] = 0;
  for (len = 1; len < MAXBITS; len++) {
    offs[len + 1] = offs[len] + count[len];
  }

  /* sort symbols by length, by symbol order within each length */
  for (sym = 0; sym < codes; sym++) {
    if (lens[lens_index + sym] !== 0) {
      work[offs[lens[lens_index + sym]]++] = sym;
    }
  }

  /*
   Create and fill in decoding tables.  In this loop, the table being
   filled is at next and has curr index bits.  The code being used is huff
   with length len.  That code is converted to an index by dropping drop
   bits off of the bottom.  For codes where len is less than drop + curr,
   those top drop + curr - len bits are incremented through all values to
   fill the table with replicated entries.

   root is the number of index bits for the root table.  When len exceeds
   root, sub-tables are created pointed to by the root entry with an index
   of the low root bits of huff.  This is saved in low to check for when a
   new sub-table should be started.  drop is zero when the root table is
   being filled, and drop is root when sub-tables are being filled.

   When a new sub-table is needed, it is necessary to look ahead in the
   code lengths to determine what size sub-table is needed.  The length
   counts are used for this, and so count[] is decremented as codes are
   entered in the tables.

   used keeps track of how many table entries have been allocated from the
   provided *table space.  It is checked for LENS and DIST tables against
   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
   the initial root table size constants.  See the comments in inftrees.h
   for more information.

   sym increments through all symbols, and the loop terminates when
   all codes of length max, i.e. all codes, have been processed.  This
   routine permits incomplete codes, so another loop after this one fills
   in the rest of the decoding tables with invalid code markers.
   */

  /* set up for code type */
  // poor man optimization - use if-else instead of switch,
  // to avoid deopts in old v8
  if (type === CODES) {
    base = extra = work;    /* dummy value--not used */
    end = 19;

  } else if (type === LENS) {
    base = lbase;
    base_index -= 257;
    extra = lext;
    extra_index -= 257;
    end = 256;

  } else {                    /* DISTS */
    base = dbase;
    extra = dext;
    end = -1;
  }

  /* initialize opts for loop */
  huff = 0;                   /* starting code */
  sym = 0;                    /* starting code symbol */
  len = min;                  /* starting code length */
  next = table_index;              /* current table to fill in */
  curr = root;                /* current table index bits */
  drop = 0;                   /* current bits to drop from code for index */
  low = -1;                   /* trigger new sub-table when len > root */
  used = 1 << root;          /* use root table entries */
  mask = used - 1;            /* mask for comparing low */

  /* check available table space */
  if ((type === LENS && used > ENOUGH_LENS) ||
    (type === DISTS && used > ENOUGH_DISTS)) {
    return 1;
  }

  /* process all codes and make table entries */
  for (;;) {
    /* create table entry */
    here_bits = len - drop;
    if (work[sym] < end) {
      here_op = 0;
      here_val = work[sym];
    }
    else if (work[sym] > end) {
      here_op = extra[extra_index + work[sym]];
      here_val = base[base_index + work[sym]];
    }
    else {
      here_op = 32 + 64;         /* end of block */
      here_val = 0;
    }

    /* replicate for those indices with low len bits equal to huff */
    incr = 1 << (len - drop);
    fill = 1 << curr;
    min = fill;                 /* save offset to next table */
    do {
      fill -= incr;
      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;
    } while (fill !== 0);

    /* backwards increment the len-bit code huff */
    incr = 1 << (len - 1);
    while (huff & incr) {
      incr >>= 1;
    }
    if (incr !== 0) {
      huff &= incr - 1;
      huff += incr;
    } else {
      huff = 0;
    }

    /* go to next symbol, update count, len */
    sym++;
    if (--count[len] === 0) {
      if (len === max) { break; }
      len = lens[lens_index + work[sym]];
    }

    /* create new sub-table if needed */
    if (len > root && (huff & mask) !== low) {
      /* if first time, transition to sub-tables */
      if (drop === 0) {
        drop = root;
      }

      /* increment past last table */
      next += min;            /* here min is 1 << curr */

      /* determine length of next table */
      curr = len - drop;
      left = 1 << curr;
      while (curr + drop < max) {
        left -= count[curr + drop];
        if (left <= 0) { break; }
        curr++;
        left <<= 1;
      }

      /* check for enough space */
      used += 1 << curr;
      if ((type === LENS && used > ENOUGH_LENS) ||
        (type === DISTS && used > ENOUGH_DISTS)) {
        return 1;
      }

      /* point entry in root table to sub-table */
      low = huff & mask;
      /*table.op[low] = curr;
      table.bits[low] = root;
      table.val[low] = next - opts.table_index;*/
      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;
    }
  }

  /* fill in remaining table entry if code is incomplete (guaranteed to have
   at most one remaining entry, since if the code is incomplete, the
   maximum code length that was allowed to get this far is one bit) */
  if (huff !== 0) {
    //table.op[next + huff] = 64;            /* invalid code marker */
    //table.bits[next + huff] = len - drop;
    //table.val[next + huff] = 0;
    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;
  }

  /* set return parameters */
  //opts.table_index += used;
  opts.bits = root;
  return 0;
};


/***/ }),

/***/ 8898:
/***/ ((module) => {

"use strict";


// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

module.exports = {
  2:      'need dictionary',     /* Z_NEED_DICT       2  */
  1:      'stream end',          /* Z_STREAM_END      1  */
  0:      '',                    /* Z_OK              0  */
  '-1':   'file error',          /* Z_ERRNO         (-1) */
  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */
  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */
  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */
  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */
  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */
};


/***/ }),

/***/ 342:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

/* eslint-disable space-unary-ops */

var utils = __webpack_require__(4236);

/* Public constants ==========================================================*/
/* ===========================================================================*/


//var Z_FILTERED          = 1;
//var Z_HUFFMAN_ONLY      = 2;
//var Z_RLE               = 3;
var Z_FIXED               = 4;
//var Z_DEFAULT_STRATEGY  = 0;

/* Possible values of the data_type field (though see inflate()) */
var Z_BINARY              = 0;
var Z_TEXT                = 1;
//var Z_ASCII             = 1; // = Z_TEXT
var Z_UNKNOWN             = 2;

/*============================================================================*/


function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }

// From zutil.h

var STORED_BLOCK = 0;
var STATIC_TREES = 1;
var DYN_TREES    = 2;
/* The three kinds of block type */

var MIN_MATCH    = 3;
var MAX_MATCH    = 258;
/* The minimum and maximum match lengths */

// From deflate.h
/* ===========================================================================
 * Internal compression state.
 */

var LENGTH_CODES  = 29;
/* number of length codes, not counting the special END_BLOCK code */

var LITERALS      = 256;
/* number of literal bytes 0..255 */

var L_CODES       = LITERALS + 1 + LENGTH_CODES;
/* number of Literal or Length codes, including the END_BLOCK code */

var D_CODES       = 30;
/* number of distance codes */

var BL_CODES      = 19;
/* number of codes used to transfer the bit lengths */

var HEAP_SIZE     = 2 * L_CODES + 1;
/* maximum heap size */

var MAX_BITS      = 15;
/* All codes must not exceed MAX_BITS bits */

var Buf_size      = 16;
/* size of bit buffer in bi_buf */


/* ===========================================================================
 * Constants
 */

var MAX_BL_BITS = 7;
/* Bit length codes must not exceed MAX_BL_BITS bits */

var END_BLOCK   = 256;
/* end of block literal code */

var REP_3_6     = 16;
/* repeat previous bit length 3-6 times (2 bits of repeat count) */

var REPZ_3_10   = 17;
/* repeat a zero length 3-10 times  (3 bits of repeat count) */

var REPZ_11_138 = 18;
/* repeat a zero length 11-138 times  (7 bits of repeat count) */

/* eslint-disable comma-spacing,array-bracket-spacing */
var extra_lbits =   /* extra bits for each length code */
  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];

var extra_dbits =   /* extra bits for each distance code */
  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];

var extra_blbits =  /* extra bits for each bit length code */
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];

var bl_order =
  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];
/* eslint-enable comma-spacing,array-bracket-spacing */

/* The lengths of the bit length codes are sent in order of decreasing
 * probability, to avoid transmitting the lengths for unused bit length codes.
 */

/* ===========================================================================
 * Local data. These are initialized only once.
 */

// We pre-fill arrays with 0 to avoid uninitialized gaps

var DIST_CODE_LEN = 512; /* see definition of array dist_code below */

// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1
var static_ltree  = new Array((L_CODES + 2) * 2);
zero(static_ltree);
/* The static literal tree. Since the bit lengths are imposed, there is no
 * need for the L_CODES extra codes used during heap construction. However
 * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
 * below).
 */

var static_dtree  = new Array(D_CODES * 2);
zero(static_dtree);
/* The static distance tree. (Actually a trivial tree since all codes use
 * 5 bits.)
 */

var _dist_code    = new Array(DIST_CODE_LEN);
zero(_dist_code);
/* Distance codes. The first 256 values correspond to the distances
 * 3 .. 258, the last 256 values correspond to the top 8 bits of
 * the 15 bit distances.
 */

var _length_code  = new Array(MAX_MATCH - MIN_MATCH + 1);
zero(_length_code);
/* length code for each normalized match length (0 == MIN_MATCH) */

var base_length   = new Array(LENGTH_CODES);
zero(base_length);
/* First normalized length for each code (0 = MIN_MATCH) */

var base_dist     = new Array(D_CODES);
zero(base_dist);
/* First normalized distance for each code (0 = distance of 1) */


function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {

  this.static_tree  = static_tree;  /* static tree or NULL */
  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */
  this.extra_base   = extra_base;   /* base index for extra_bits */
  this.elems        = elems;        /* max number of elements in the tree */
  this.max_length   = max_length;   /* max bit length for the codes */

  // show if `static_tree` has data or dummy - needed for monomorphic objects
  this.has_stree    = static_tree && static_tree.length;
}


var static_l_desc;
var static_d_desc;
var static_bl_desc;


function TreeDesc(dyn_tree, stat_desc) {
  this.dyn_tree = dyn_tree;     /* the dynamic tree */
  this.max_code = 0;            /* largest code with non zero frequency */
  this.stat_desc = stat_desc;   /* the corresponding static tree */
}



function d_code(dist) {
  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];
}


/* ===========================================================================
 * Output a short LSB first on the stream.
 * IN assertion: there is enough room in pendingBuf.
 */
function put_short(s, w) {
//    put_byte(s, (uch)((w) & 0xff));
//    put_byte(s, (uch)((ush)(w) >> 8));
  s.pending_buf[s.pending++] = (w) & 0xff;
  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;
}


/* ===========================================================================
 * Send a value on a given number of bits.
 * IN assertion: length <= 16 and value fits in length bits.
 */
function send_bits(s, value, length) {
  if (s.bi_valid > (Buf_size - length)) {
    s.bi_buf |= (value << s.bi_valid) & 0xffff;
    put_short(s, s.bi_buf);
    s.bi_buf = value >> (Buf_size - s.bi_valid);
    s.bi_valid += length - Buf_size;
  } else {
    s.bi_buf |= (value << s.bi_valid) & 0xffff;
    s.bi_valid += length;
  }
}


function send_code(s, c, tree) {
  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);
}


/* ===========================================================================
 * Reverse the first len bits of a code, using straightforward code (a faster
 * method would use a table)
 * IN assertion: 1 <= len <= 15
 */
function bi_reverse(code, len) {
  var res = 0;
  do {
    res |= code & 1;
    code >>>= 1;
    res <<= 1;
  } while (--len > 0);
  return res >>> 1;
}


/* ===========================================================================
 * Flush the bit buffer, keeping at most 7 bits in it.
 */
function bi_flush(s) {
  if (s.bi_valid === 16) {
    put_short(s, s.bi_buf);
    s.bi_buf = 0;
    s.bi_valid = 0;

  } else if (s.bi_valid >= 8) {
    s.pending_buf[s.pending++] = s.bi_buf & 0xff;
    s.bi_buf >>= 8;
    s.bi_valid -= 8;
  }
}


/* ===========================================================================
 * Compute the optimal bit lengths for a tree and update the total bit length
 * for the current block.
 * IN assertion: the fields freq and dad are set, heap[heap_max] and
 *    above are the tree nodes sorted by increasing frequency.
 * OUT assertions: the field len is set to the optimal bit length, the
 *     array bl_count contains the frequencies for each bit length.
 *     The length opt_len is updated; static_len is also updated if stree is
 *     not null.
 */
function gen_bitlen(s, desc)
//    deflate_state *s;
//    tree_desc *desc;    /* the tree descriptor */
{
  var tree            = desc.dyn_tree;
  var max_code        = desc.max_code;
  var stree           = desc.stat_desc.static_tree;
  var has_stree       = desc.stat_desc.has_stree;
  var extra           = desc.stat_desc.extra_bits;
  var base            = desc.stat_desc.extra_base;
  var max_length      = desc.stat_desc.max_length;
  var h;              /* heap index */
  var n, m;           /* iterate over the tree elements */
  var bits;           /* bit length */
  var xbits;          /* extra bits */
  var f;              /* frequency */
  var overflow = 0;   /* number of elements with bit length too large */

  for (bits = 0; bits <= MAX_BITS; bits++) {
    s.bl_count[bits] = 0;
  }

  /* In a first pass, compute the optimal bit lengths (which may
   * overflow in the case of the bit length tree).
   */
  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */

  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {
    n = s.heap[h];
    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;
    if (bits > max_length) {
      bits = max_length;
      overflow++;
    }
    tree[n * 2 + 1]/*.Len*/ = bits;
    /* We overwrite tree[n].Dad which is no longer needed */

    if (n > max_code) { continue; } /* not a leaf node */

    s.bl_count[bits]++;
    xbits = 0;
    if (n >= base) {
      xbits = extra[n - base];
    }
    f = tree[n * 2]/*.Freq*/;
    s.opt_len += f * (bits + xbits);
    if (has_stree) {
      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);
    }
  }
  if (overflow === 0) { return; }

  // Trace((stderr,"\nbit length overflow\n"));
  /* This happens for example on obj2 and pic of the Calgary corpus */

  /* Find the first bit length which could increase: */
  do {
    bits = max_length - 1;
    while (s.bl_count[bits] === 0) { bits--; }
    s.bl_count[bits]--;      /* move one leaf down the tree */
    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */
    s.bl_count[max_length]--;
    /* The brother of the overflow item also moves one step up,
     * but this does not affect bl_count[max_length]
     */
    overflow -= 2;
  } while (overflow > 0);

  /* Now recompute all bit lengths, scanning in increasing frequency.
   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
   * lengths instead of fixing only the wrong ones. This idea is taken
   * from 'ar' written by Haruhiko Okumura.)
   */
  for (bits = max_length; bits !== 0; bits--) {
    n = s.bl_count[bits];
    while (n !== 0) {
      m = s.heap[--h];
      if (m > max_code) { continue; }
      if (tree[m * 2 + 1]/*.Len*/ !== bits) {
        // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;
        tree[m * 2 + 1]/*.Len*/ = bits;
      }
      n--;
    }
  }
}


/* ===========================================================================
 * Generate the codes for a given tree and bit counts (which need not be
 * optimal).
 * IN assertion: the array bl_count contains the bit length statistics for
 * the given tree and the field len is set for all tree elements.
 * OUT assertion: the field code is set for all tree elements of non
 *     zero code length.
 */
function gen_codes(tree, max_code, bl_count)
//    ct_data *tree;             /* the tree to decorate */
//    int max_code;              /* largest code with non zero frequency */
//    ushf *bl_count;            /* number of codes at each bit length */
{
  var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */
  var code = 0;              /* running code value */
  var bits;                  /* bit index */
  var n;                     /* code index */

  /* The distribution counts are first used to generate the code values
   * without bit reversal.
   */
  for (bits = 1; bits <= MAX_BITS; bits++) {
    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;
  }
  /* Check that the bit counts in bl_count are consistent. The last code
   * must be all ones.
   */
  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
  //        "inconsistent bit counts");
  //Tracev((stderr,"\ngen_codes: max_code %d ", max_code));

  for (n = 0;  n <= max_code; n++) {
    var len = tree[n * 2 + 1]/*.Len*/;
    if (len === 0) { continue; }
    /* Now reverse the bits */
    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);

    //Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
  }
}


/* ===========================================================================
 * Initialize the various 'constant' tables.
 */
function tr_static_init() {
  var n;        /* iterates over tree elements */
  var bits;     /* bit counter */
  var length;   /* length value */
  var code;     /* code value */
  var dist;     /* distance index */
  var bl_count = new Array(MAX_BITS + 1);
  /* number of codes at each bit length for an optimal tree */

  // do check in _tr_init()
  //if (static_init_done) return;

  /* For some embedded targets, global variables are not initialized: */
/*#ifdef NO_INIT_GLOBAL_POINTERS
  static_l_desc.static_tree = static_ltree;
  static_l_desc.extra_bits = extra_lbits;
  static_d_desc.static_tree = static_dtree;
  static_d_desc.extra_bits = extra_dbits;
  static_bl_desc.extra_bits = extra_blbits;
#endif*/

  /* Initialize the mapping length (0..255) -> length code (0..28) */
  length = 0;
  for (code = 0; code < LENGTH_CODES - 1; code++) {
    base_length[code] = length;
    for (n = 0; n < (1 << extra_lbits[code]); n++) {
      _length_code[length++] = code;
    }
  }
  //Assert (length == 256, "tr_static_init: length != 256");
  /* Note that the length 255 (match length 258) can be represented
   * in two different ways: code 284 + 5 bits or code 285, so we
   * overwrite length_code[255] to use the best encoding:
   */
  _length_code[length - 1] = code;

  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
  dist = 0;
  for (code = 0; code < 16; code++) {
    base_dist[code] = dist;
    for (n = 0; n < (1 << extra_dbits[code]); n++) {
      _dist_code[dist++] = code;
    }
  }
  //Assert (dist == 256, "tr_static_init: dist != 256");
  dist >>= 7; /* from now on, all distances are divided by 128 */
  for (; code < D_CODES; code++) {
    base_dist[code] = dist << 7;
    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {
      _dist_code[256 + dist++] = code;
    }
  }
  //Assert (dist == 256, "tr_static_init: 256+dist != 512");

  /* Construct the codes of the static literal tree */
  for (bits = 0; bits <= MAX_BITS; bits++) {
    bl_count[bits] = 0;
  }

  n = 0;
  while (n <= 143) {
    static_ltree[n * 2 + 1]/*.Len*/ = 8;
    n++;
    bl_count[8]++;
  }
  while (n <= 255) {
    static_ltree[n * 2 + 1]/*.Len*/ = 9;
    n++;
    bl_count[9]++;
  }
  while (n <= 279) {
    static_ltree[n * 2 + 1]/*.Len*/ = 7;
    n++;
    bl_count[7]++;
  }
  while (n <= 287) {
    static_ltree[n * 2 + 1]/*.Len*/ = 8;
    n++;
    bl_count[8]++;
  }
  /* Codes 286 and 287 do not exist, but we must include them in the
   * tree construction to get a canonical Huffman tree (longest code
   * all ones)
   */
  gen_codes(static_ltree, L_CODES + 1, bl_count);

  /* The static distance tree is trivial: */
  for (n = 0; n < D_CODES; n++) {
    static_dtree[n * 2 + 1]/*.Len*/ = 5;
    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);
  }

  // Now data ready and we can init static trees
  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);
  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);
  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);

  //static_init_done = true;
}


/* ===========================================================================
 * Initialize a new block.
 */
function init_block(s) {
  var n; /* iterates over tree elements */

  /* Initialize the trees. */
  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }
  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }
  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }

  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;
  s.opt_len = s.static_len = 0;
  s.last_lit = s.matches = 0;
}


/* ===========================================================================
 * Flush the bit buffer and align the output on a byte boundary
 */
function bi_windup(s)
{
  if (s.bi_valid > 8) {
    put_short(s, s.bi_buf);
  } else if (s.bi_valid > 0) {
    //put_byte(s, (Byte)s->bi_buf);
    s.pending_buf[s.pending++] = s.bi_buf;
  }
  s.bi_buf = 0;
  s.bi_valid = 0;
}

/* ===========================================================================
 * Copy a stored block, storing first the length and its
 * one's complement if requested.
 */
function copy_block(s, buf, len, header)
//DeflateState *s;
//charf    *buf;    /* the input data */
//unsigned len;     /* its length */
//int      header;  /* true if block header must be written */
{
  bi_windup(s);        /* align on byte boundary */

  if (header) {
    put_short(s, len);
    put_short(s, ~len);
  }
//  while (len--) {
//    put_byte(s, *buf++);
//  }
  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);
  s.pending += len;
}

/* ===========================================================================
 * Compares to subtrees, using the tree depth as tie breaker when
 * the subtrees have equal frequency. This minimizes the worst case length.
 */
function smaller(tree, n, m, depth) {
  var _n2 = n * 2;
  var _m2 = m * 2;
  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||
         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));
}

/* ===========================================================================
 * Restore the heap property by moving down the tree starting at node k,
 * exchanging a node with the smallest of its two sons if necessary, stopping
 * when the heap property is re-established (each father smaller than its
 * two sons).
 */
function pqdownheap(s, tree, k)
//    deflate_state *s;
//    ct_data *tree;  /* the tree to restore */
//    int k;               /* node to move down */
{
  var v = s.heap[k];
  var j = k << 1;  /* left son of k */
  while (j <= s.heap_len) {
    /* Set j to the smallest of the two sons: */
    if (j < s.heap_len &&
      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {
      j++;
    }
    /* Exit if v is smaller than both sons */
    if (smaller(tree, v, s.heap[j], s.depth)) { break; }

    /* Exchange v with the smallest son */
    s.heap[k] = s.heap[j];
    k = j;

    /* And continue down the tree, setting j to the left son of k */
    j <<= 1;
  }
  s.heap[k] = v;
}


// inlined manually
// var SMALLEST = 1;

/* ===========================================================================
 * Send the block data compressed using the given Huffman trees
 */
function compress_block(s, ltree, dtree)
//    deflate_state *s;
//    const ct_data *ltree; /* literal tree */
//    const ct_data *dtree; /* distance tree */
{
  var dist;           /* distance of matched string */
  var lc;             /* match length or unmatched char (if dist == 0) */
  var lx = 0;         /* running index in l_buf */
  var code;           /* the code to send */
  var extra;          /* number of extra bits to send */

  if (s.last_lit !== 0) {
    do {
      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);
      lc = s.pending_buf[s.l_buf + lx];
      lx++;

      if (dist === 0) {
        send_code(s, lc, ltree); /* send a literal byte */
        //Tracecv(isgraph(lc), (stderr," '%c' ", lc));
      } else {
        /* Here, lc is the match length - MIN_MATCH */
        code = _length_code[lc];
        send_code(s, code + LITERALS + 1, ltree); /* send the length code */
        extra = extra_lbits[code];
        if (extra !== 0) {
          lc -= base_length[code];
          send_bits(s, lc, extra);       /* send the extra length bits */
        }
        dist--; /* dist is now the match distance - 1 */
        code = d_code(dist);
        //Assert (code < D_CODES, "bad d_code");

        send_code(s, code, dtree);       /* send the distance code */
        extra = extra_dbits[code];
        if (extra !== 0) {
          dist -= base_dist[code];
          send_bits(s, dist, extra);   /* send the extra distance bits */
        }
      } /* literal or match pair ? */

      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
      //       "pendingBuf overflow");

    } while (lx < s.last_lit);
  }

  send_code(s, END_BLOCK, ltree);
}


/* ===========================================================================
 * Construct one Huffman tree and assigns the code bit strings and lengths.
 * Update the total bit length for the current block.
 * IN assertion: the field freq is set for all tree elements.
 * OUT assertions: the fields len and code are set to the optimal bit length
 *     and corresponding code. The length opt_len is updated; static_len is
 *     also updated if stree is not null. The field max_code is set.
 */
function build_tree(s, desc)
//    deflate_state *s;
//    tree_desc *desc; /* the tree descriptor */
{
  var tree     = desc.dyn_tree;
  var stree    = desc.stat_desc.static_tree;
  var has_stree = desc.stat_desc.has_stree;
  var elems    = desc.stat_desc.elems;
  var n, m;          /* iterate over heap elements */
  var max_code = -1; /* largest code with non zero frequency */
  var node;          /* new node being created */

  /* Construct the initial heap, with least frequent element in
   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
   * heap[0] is not used.
   */
  s.heap_len = 0;
  s.heap_max = HEAP_SIZE;

  for (n = 0; n < elems; n++) {
    if (tree[n * 2]/*.Freq*/ !== 0) {
      s.heap[++s.heap_len] = max_code = n;
      s.depth[n] = 0;

    } else {
      tree[n * 2 + 1]/*.Len*/ = 0;
    }
  }

  /* The pkzip format requires that at least one distance code exists,
   * and that at least one bit should be sent even if there is only one
   * possible code. So to avoid special checks later on we force at least
   * two codes of non zero frequency.
   */
  while (s.heap_len < 2) {
    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);
    tree[node * 2]/*.Freq*/ = 1;
    s.depth[node] = 0;
    s.opt_len--;

    if (has_stree) {
      s.static_len -= stree[node * 2 + 1]/*.Len*/;
    }
    /* node is 0 or 1 so it does not have extra bits */
  }
  desc.max_code = max_code;

  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
   * establish sub-heaps of increasing lengths:
   */
  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }

  /* Construct the Huffman tree by repeatedly combining the least two
   * frequent nodes.
   */
  node = elems;              /* next internal node of the tree */
  do {
    //pqremove(s, tree, n);  /* n = node of least frequency */
    /*** pqremove ***/
    n = s.heap[1/*SMALLEST*/];
    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];
    pqdownheap(s, tree, 1/*SMALLEST*/);
    /***/

    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */

    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */
    s.heap[--s.heap_max] = m;

    /* Create a new node father of n and m */
    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;
    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;

    /* and insert the new node in the heap */
    s.heap[1/*SMALLEST*/] = node++;
    pqdownheap(s, tree, 1/*SMALLEST*/);

  } while (s.heap_len >= 2);

  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];

  /* At this point, the fields freq and dad are set. We can now
   * generate the bit lengths.
   */
  gen_bitlen(s, desc);

  /* The field len is now set, we can generate the bit codes */
  gen_codes(tree, max_code, s.bl_count);
}


/* ===========================================================================
 * Scan a literal or distance tree to determine the frequencies of the codes
 * in the bit length tree.
 */
function scan_tree(s, tree, max_code)
//    deflate_state *s;
//    ct_data *tree;   /* the tree to be scanned */
//    int max_code;    /* and its largest code of non zero frequency */
{
  var n;                     /* iterates over all tree elements */
  var prevlen = -1;          /* last emitted length */
  var curlen;                /* length of current code */

  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */

  var count = 0;             /* repeat count of the current code */
  var max_count = 7;         /* max repeat count */
  var min_count = 4;         /* min repeat count */

  if (nextlen === 0) {
    max_count = 138;
    min_count = 3;
  }
  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */

  for (n = 0; n <= max_code; n++) {
    curlen = nextlen;
    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;

    if (++count < max_count && curlen === nextlen) {
      continue;

    } else if (count < min_count) {
      s.bl_tree[curlen * 2]/*.Freq*/ += count;

    } else if (curlen !== 0) {

      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }
      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;

    } else if (count <= 10) {
      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;

    } else {
      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;
    }

    count = 0;
    prevlen = curlen;

    if (nextlen === 0) {
      max_count = 138;
      min_count = 3;

    } else if (curlen === nextlen) {
      max_count = 6;
      min_count = 3;

    } else {
      max_count = 7;
      min_count = 4;
    }
  }
}


/* ===========================================================================
 * Send a literal or distance tree in compressed form, using the codes in
 * bl_tree.
 */
function send_tree(s, tree, max_code)
//    deflate_state *s;
//    ct_data *tree; /* the tree to be scanned */
//    int max_code;       /* and its largest code of non zero frequency */
{
  var n;                     /* iterates over all tree elements */
  var prevlen = -1;          /* last emitted length */
  var curlen;                /* length of current code */

  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */

  var count = 0;             /* repeat count of the current code */
  var max_count = 7;         /* max repeat count */
  var min_count = 4;         /* min repeat count */

  /* tree[max_code+1].Len = -1; */  /* guard already set */
  if (nextlen === 0) {
    max_count = 138;
    min_count = 3;
  }

  for (n = 0; n <= max_code; n++) {
    curlen = nextlen;
    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;

    if (++count < max_count && curlen === nextlen) {
      continue;

    } else if (count < min_count) {
      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);

    } else if (curlen !== 0) {
      if (curlen !== prevlen) {
        send_code(s, curlen, s.bl_tree);
        count--;
      }
      //Assert(count >= 3 && count <= 6, " 3_6?");
      send_code(s, REP_3_6, s.bl_tree);
      send_bits(s, count - 3, 2);

    } else if (count <= 10) {
      send_code(s, REPZ_3_10, s.bl_tree);
      send_bits(s, count - 3, 3);

    } else {
      send_code(s, REPZ_11_138, s.bl_tree);
      send_bits(s, count - 11, 7);
    }

    count = 0;
    prevlen = curlen;
    if (nextlen === 0) {
      max_count = 138;
      min_count = 3;

    } else if (curlen === nextlen) {
      max_count = 6;
      min_count = 3;

    } else {
      max_count = 7;
      min_count = 4;
    }
  }
}


/* ===========================================================================
 * Construct the Huffman tree for the bit lengths and return the index in
 * bl_order of the last bit length code to send.
 */
function build_bl_tree(s) {
  var max_blindex;  /* index of last bit length code of non zero freq */

  /* Determine the bit length frequencies for literal and distance trees */
  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);

  /* Build the bit length tree: */
  build_tree(s, s.bl_desc);
  /* opt_len now includes the length of the tree representations, except
   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
   */

  /* Determine the number of bit length codes to send. The pkzip format
   * requires that at least 4 bit length codes be sent. (appnote.txt says
   * 3 but the actual value used is 4.)
   */
  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {
    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {
      break;
    }
  }
  /* Update opt_len to include the bit length tree and counts */
  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;
  //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
  //        s->opt_len, s->static_len));

  return max_blindex;
}


/* ===========================================================================
 * Send the header for a block using dynamic Huffman trees: the counts, the
 * lengths of the bit length codes, the literal tree and the distance tree.
 * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
 */
function send_all_trees(s, lcodes, dcodes, blcodes)
//    deflate_state *s;
//    int lcodes, dcodes, blcodes; /* number of codes for each tree */
{
  var rank;                    /* index in bl_order */

  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
  //        "too many codes");
  //Tracev((stderr, "\nbl counts: "));
  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */
  send_bits(s, dcodes - 1,   5);
  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */
  for (rank = 0; rank < blcodes; rank++) {
    //Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);
  }
  //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));

  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */
  //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));

  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */
  //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
}


/* ===========================================================================
 * Check if the data type is TEXT or BINARY, using the following algorithm:
 * - TEXT if the two conditions below are satisfied:
 *    a) There are no non-portable control characters belonging to the
 *       "black list" (0..6, 14..25, 28..31).
 *    b) There is at least one printable character belonging to the
 *       "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
 * - BINARY otherwise.
 * - The following partially-portable control characters form a
 *   "gray list" that is ignored in this detection algorithm:
 *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
 * IN assertion: the fields Freq of dyn_ltree are set.
 */
function detect_data_type(s) {
  /* black_mask is the bit mask of black-listed bytes
   * set bits 0..6, 14..25, and 28..31
   * 0xf3ffc07f = binary 11110011111111111100000001111111
   */
  var black_mask = 0xf3ffc07f;
  var n;

  /* Check for non-textual ("black-listed") bytes. */
  for (n = 0; n <= 31; n++, black_mask >>>= 1) {
    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {
      return Z_BINARY;
    }
  }

  /* Check for textual ("white-listed") bytes. */
  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||
      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {
    return Z_TEXT;
  }
  for (n = 32; n < LITERALS; n++) {
    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {
      return Z_TEXT;
    }
  }

  /* There are no "black-listed" or "white-listed" bytes:
   * this stream either is empty or has tolerated ("gray-listed") bytes only.
   */
  return Z_BINARY;
}


var static_init_done = false;

/* ===========================================================================
 * Initialize the tree data structures for a new zlib stream.
 */
function _tr_init(s)
{

  if (!static_init_done) {
    tr_static_init();
    static_init_done = true;
  }

  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);
  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);
  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);

  s.bi_buf = 0;
  s.bi_valid = 0;

  /* Initialize the first block of the first file: */
  init_block(s);
}


/* ===========================================================================
 * Send a stored block
 */
function _tr_stored_block(s, buf, stored_len, last)
//DeflateState *s;
//charf *buf;       /* input block */
//ulg stored_len;   /* length of input block */
//int last;         /* one if this is the last block for a file */
{
  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */
  copy_block(s, buf, stored_len, true); /* with header */
}


/* ===========================================================================
 * Send one empty static block to give enough lookahead for inflate.
 * This takes 10 bits, of which 7 may remain in the bit buffer.
 */
function _tr_align(s) {
  send_bits(s, STATIC_TREES << 1, 3);
  send_code(s, END_BLOCK, static_ltree);
  bi_flush(s);
}


/* ===========================================================================
 * Determine the best encoding for the current block: dynamic trees, static
 * trees or store, and output the encoded block to the zip file.
 */
function _tr_flush_block(s, buf, stored_len, last)
//DeflateState *s;
//charf *buf;       /* input block, or NULL if too old */
//ulg stored_len;   /* length of input block */
//int last;         /* one if this is the last block for a file */
{
  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */
  var max_blindex = 0;        /* index of last bit length code of non zero freq */

  /* Build the Huffman trees unless a stored block is forced */
  if (s.level > 0) {

    /* Check if the file is binary or text */
    if (s.strm.data_type === Z_UNKNOWN) {
      s.strm.data_type = detect_data_type(s);
    }

    /* Construct the literal and distance trees */
    build_tree(s, s.l_desc);
    // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
    //        s->static_len));

    build_tree(s, s.d_desc);
    // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
    //        s->static_len));
    /* At this point, opt_len and static_len are the total bit lengths of
     * the compressed block data, excluding the tree representations.
     */

    /* Build the bit length tree for the above two trees, and get the index
     * in bl_order of the last bit length code to send.
     */
    max_blindex = build_bl_tree(s);

    /* Determine the best encoding. Compute the block lengths in bytes. */
    opt_lenb = (s.opt_len + 3 + 7) >>> 3;
    static_lenb = (s.static_len + 3 + 7) >>> 3;

    // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
    //        s->last_lit));

    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }

  } else {
    // Assert(buf != (char*)0, "lost buf");
    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
  }

  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {
    /* 4: two words for the lengths */

    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
     * Otherwise we can't have processed more than WSIZE input bytes since
     * the last block flush, because compression would have been
     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
     * transform a block into a stored block.
     */
    _tr_stored_block(s, buf, stored_len, last);

  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {

    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);
    compress_block(s, static_ltree, static_dtree);

  } else {
    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);
    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);
    compress_block(s, s.dyn_ltree, s.dyn_dtree);
  }
  // Assert (s->compressed_len == s->bits_sent, "bad compressed size");
  /* The above check is made mod 2^32, for files larger than 512 MB
   * and uLong implemented on 32 bits.
   */
  init_block(s);

  if (last) {
    bi_windup(s);
  }
  // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
  //       s->compressed_len-7*last));
}

/* ===========================================================================
 * Save the match info and tally the frequency counts. Return true if
 * the current block must be flushed.
 */
function _tr_tally(s, dist, lc)
//    deflate_state *s;
//    unsigned dist;  /* distance of matched string */
//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */
{
  //var out_length, in_length, dcode;

  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;
  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;

  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;
  s.last_lit++;

  if (dist === 0) {
    /* lc is the unmatched char */
    s.dyn_ltree[lc * 2]/*.Freq*/++;
  } else {
    s.matches++;
    /* Here, lc is the match length - MIN_MATCH */
    dist--;             /* dist = match distance - 1 */
    //Assert((ush)dist < (ush)MAX_DIST(s) &&
    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
    //       (ush)d_code(dist) < (ush)D_CODES,  "_tr_tally: bad match");

    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;
    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;
  }

// (!) This block is disabled in zlib defaults,
// don't enable it for binary compatibility

//#ifdef TRUNCATE_BLOCK
//  /* Try to guess if it is profitable to stop the current block here */
//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {
//    /* Compute an upper bound for the compressed length */
//    out_length = s.last_lit*8;
//    in_length = s.strstart - s.block_start;
//
//    for (dcode = 0; dcode < D_CODES; dcode++) {
//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);
//    }
//    out_length >>>= 3;
//    //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
//    //       s->last_lit, in_length, out_length,
//    //       100L - out_length*100L/in_length));
//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {
//      return true;
//    }
//  }
//#endif

  return (s.last_lit === s.lit_bufsize - 1);
  /* We avoid equality with lit_bufsize because of wraparound at 64K
   * on 16 bit machines and because stored blocks are restricted to
   * 64K-1 bytes.
   */
}

exports._tr_init  = _tr_init;
exports._tr_stored_block = _tr_stored_block;
exports._tr_flush_block  = _tr_flush_block;
exports._tr_tally = _tr_tally;
exports._tr_align = _tr_align;


/***/ }),

/***/ 2292:
/***/ ((module) => {

"use strict";


// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

function ZStream() {
  /* next input byte */
  this.input = null; // JS specific, because we have no pointers
  this.next_in = 0;
  /* number of bytes available at input */
  this.avail_in = 0;
  /* total number of input bytes read so far */
  this.total_in = 0;
  /* next output byte should be put there */
  this.output = null; // JS specific, because we have no pointers
  this.next_out = 0;
  /* remaining free space at output */
  this.avail_out = 0;
  /* total number of bytes output so far */
  this.total_out = 0;
  /* last error message, NULL if no error */
  this.msg = ''/*Z_NULL*/;
  /* not visible by applications */
  this.state = null;
  /* best guess about the data type: binary or text */
  this.data_type = 2/*Z_UNKNOWN*/;
  /* adler32 value of the uncompressed data */
  this.adler = 0;
}

module.exports = ZStream;


/***/ }),

/***/ 7460:
/***/ (function(module, exports) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* @license
Papa Parse
v5.4.1
https://github.com/mholt/PapaParse
License: MIT
*/
!function(e,t){ true?!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (t),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):0}(this,function s(){"use strict";var f="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==f?f:{};var n=!f.document&&!!f.postMessage,o=f.IS_PAPA_WORKER||!1,a={},u=0,b={parse:function(e,t){var r=(t=t||{}).dynamicTyping||!1;J(r)&&(t.dynamicTypingFunction=r,r={});if(t.dynamicTyping=r,t.transform=!!J(t.transform)&&t.transform,t.worker&&b.WORKERS_SUPPORTED){var i=function(){if(!b.WORKERS_SUPPORTED)return!1;var e=(r=f.URL||f.webkitURL||null,i=s.toString(),b.BLOB_URL||(b.BLOB_URL=r.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ","(",i,")();"],{type:"text/javascript"})))),t=new f.Worker(e);var r,i;return t.onmessage=_,t.id=u++,a[t.id]=t}();return i.userStep=t.step,i.userChunk=t.chunk,i.userComplete=t.complete,i.userError=t.error,t.step=J(t.step),t.chunk=J(t.chunk),t.complete=J(t.complete),t.error=J(t.error),delete t.worker,void i.postMessage({input:e,config:t,workerId:i.id})}var n=null;b.NODE_STREAM_INPUT,"string"==typeof e?(e=function(e){if(65279===e.charCodeAt(0))return e.slice(1);return e}(e),n=t.download?new l(t):new p(t)):!0===e.readable&&J(e.read)&&J(e.on)?n=new g(t):(f.File&&e instanceof File||e instanceof Object)&&(n=new c(t));return n.stream(e)},unparse:function(e,t){var n=!1,_=!0,m=",",y="\r\n",s='"',a=s+s,r=!1,i=null,o=!1;!function(){if("object"!=typeof t)return;"string"!=typeof t.delimiter||b.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter);("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes);"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(r=t.skipEmptyLines);"string"==typeof t.newline&&(y=t.newline);"string"==typeof t.quoteChar&&(s=t.quoteChar);"boolean"==typeof t.header&&(_=t.header);if(Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");i=t.columns}void 0!==t.escapeChar&&(a=t.escapeChar+s);("boolean"==typeof t.escapeFormulae||t.escapeFormulae instanceof RegExp)&&(o=t.escapeFormulae instanceof RegExp?t.escapeFormulae:/^[=+\-@\t\r].*$/)}();var u=new RegExp(Q(s),"g");"string"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return h(null,e,r);if("object"==typeof e[0])return h(i||Object.keys(e[0]),e,r)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||i),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),h(e.fields||[],e.data||[],r);throw new Error("Unable to serialize unrecognized input");function h(e,t,r){var i="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var n=Array.isArray(e)&&0<e.length,s=!Array.isArray(t[0]);if(n&&_){for(var a=0;a<e.length;a++)0<a&&(i+=m),i+=v(e[a],a);0<t.length&&(i+=y)}for(var o=0;o<t.length;o++){var u=n?e.length:t[o].length,h=!1,f=n?0===Object.keys(t[o]).length:0===t[o].length;if(r&&!n&&(h="greedy"===r?""===t[o].join("").trim():1===t[o].length&&0===t[o][0].length),"greedy"===r&&n){for(var d=[],l=0;l<u;l++){var c=s?e[l]:l;d.push(t[o][c])}h=""===d.join("").trim()}if(!h){for(var p=0;p<u;p++){0<p&&!f&&(i+=m);var g=n&&s?e[p]:p;i+=v(t[o][g],p)}o<t.length-1&&(!r||0<u&&!f)&&(i+=y)}}return i}function v(e,t){if(null==e)return"";if(e.constructor===Date)return JSON.stringify(e).slice(1,25);var r=!1;o&&"string"==typeof e&&o.test(e)&&(e="'"+e,r=!0);var i=e.toString().replace(u,a);return(r=r||!0===n||"function"==typeof n&&n(e,t)||Array.isArray(n)&&n[t]||function(e,t){for(var r=0;r<t.length;r++)if(-1<e.indexOf(t[r]))return!0;return!1}(i,b.BAD_DELIMITERS)||-1<i.indexOf(m)||" "===i.charAt(0)||" "===i.charAt(i.length-1))?s+i+s:i}}};if(b.RECORD_SEP=String.fromCharCode(30),b.UNIT_SEP=String.fromCharCode(31),b.BYTE_ORDER_MARK="\ufeff",b.BAD_DELIMITERS=["\r","\n",'"',b.BYTE_ORDER_MARK],b.WORKERS_SUPPORTED=!n&&!!f.Worker,b.NODE_STREAM_INPUT=1,b.LocalChunkSize=10485760,b.RemoteChunkSize=5242880,b.DefaultDelimiter=",",b.Parser=E,b.ParserHandle=r,b.NetworkStreamer=l,b.FileStreamer=c,b.StringStreamer=p,b.ReadableStreamStreamer=g,f.jQuery){var d=f.jQuery;d.fn.parse=function(o){var r=o.config||{},u=[];return this.each(function(e){if(!("INPUT"===d(this).prop("tagName").toUpperCase()&&"file"===d(this).attr("type").toLowerCase()&&f.FileReader)||!this.files||0===this.files.length)return!0;for(var t=0;t<this.files.length;t++)u.push({file:this.files[t],inputElem:this,instanceConfig:d.extend({},r)})}),e(),this;function e(){if(0!==u.length){var e,t,r,i,n=u[0];if(J(o.before)){var s=o.before(n.file,n.inputElem);if("object"==typeof s){if("abort"===s.action)return e="AbortError",t=n.file,r=n.inputElem,i=s.reason,void(J(o.error)&&o.error({name:e},t,r,i));if("skip"===s.action)return void h();"object"==typeof s.config&&(n.instanceConfig=d.extend(n.instanceConfig,s.config))}else if("skip"===s)return void h()}var a=n.instanceConfig.complete;n.instanceConfig.complete=function(e){J(a)&&a(e,n.file,n.inputElem),h()},b.parse(n.file,n.instanceConfig)}else J(o.complete)&&o.complete()}function h(){u.splice(0,1),e()}}}function h(e){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine="",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=w(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new r(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(e,t){if(this.isFirstChunk&&J(this._config.beforeFirstChunk)){var r=this._config.beforeFirstChunk(e);void 0!==r&&(e=r)}this.isFirstChunk=!1,this._halted=!1;var i=this._partialLine+e;this._partialLine="";var n=this._handle.parse(i,this._baseIndex,!this._finished);if(!this._handle.paused()&&!this._handle.aborted()){var s=n.meta.cursor;this._finished||(this._partialLine=i.substring(s-this._baseIndex),this._baseIndex=s),n&&n.data&&(this._rowCount+=n.data.length);var a=this._finished||this._config.preview&&this._rowCount>=this._config.preview;if(o)f.postMessage({results:n,workerId:b.WORKER_ID,finished:a});else if(J(this._config.chunk)&&!t){if(this._config.chunk(n,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);n=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(n.data),this._completeResults.errors=this._completeResults.errors.concat(n.errors),this._completeResults.meta=n.meta),this._completed||!a||!J(this._config.complete)||n&&n.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),a||n&&n.meta.paused||this._nextChunk(),n}this._halted=!0},this._sendError=function(e){J(this._config.error)?this._config.error(e):o&&this._config.error&&f.postMessage({workerId:b.WORKER_ID,error:e,finished:!1})}}function l(e){var i;(e=e||{}).chunkSize||(e.chunkSize=b.RemoteChunkSize),h.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(i=new XMLHttpRequest,this._config.withCredentials&&(i.withCredentials=this._config.withCredentials),n||(i.onload=v(this._chunkLoaded,this),i.onerror=v(this._chunkError,this)),i.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var t in e)i.setRequestHeader(t,e[t])}if(this._config.chunkSize){var r=this._start+this._config.chunkSize-1;i.setRequestHeader("Range","bytes="+this._start+"-"+r)}try{i.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===i.status&&this._chunkError()}},this._chunkLoaded=function(){4===i.readyState&&(i.status<200||400<=i.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:i.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");if(null===t)return-1;return parseInt(t.substring(t.lastIndexOf("/")+1))}(i),this.parseChunk(i.responseText)))},this._chunkError=function(e){var t=i.statusText||e;this._sendError(new Error(t))}}function c(e){var i,n;(e=e||{}).chunkSize||(e.chunkSize=b.LocalChunkSize),h.call(this,e);var s="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,s?((i=new FileReader).onload=v(this._chunkLoaded,this),i.onerror=v(this._chunkError,this)):i=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var e=this._input;if(this._config.chunkSize){var t=Math.min(this._start+this._config.chunkSize,this._input.size);e=n.call(e,this._start,t)}var r=i.readAsText(e,this._config.encoding);s||this._chunkLoaded({target:{result:r}})},this._chunkLoaded=function(e){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(i.error)}}function p(e){var r;h.call(this,e=e||{}),this.stream=function(e){return r=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,t=this._config.chunkSize;return t?(e=r.substring(0,t),r=r.substring(t)):(e=r,r=""),this._finished=!r,this.parseChunk(e)}}}function g(e){h.call(this,e=e||{});var t=[],r=!0,i=!1;this.pause=function(){h.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){h.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){i&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):r=!0},this._streamData=v(function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),r&&(r=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=v(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=v(function(){this._streamCleanUp(),i=!0,this._streamData("")},this),this._streamCleanUp=v(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)},this)}function r(m){var a,o,u,i=Math.pow(2,53),n=-i,s=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,h=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,t=this,r=0,f=0,d=!1,e=!1,l=[],c={data:[],errors:[],meta:{}};if(J(m.step)){var p=m.step;m.step=function(e){if(c=e,_())g();else{if(g(),0===c.data.length)return;r+=e.data.length,m.preview&&r>m.preview?o.abort():(c.data=c.data[0],p(c,t))}}}function y(e){return"greedy"===m.skipEmptyLines?""===e.join("").trim():1===e.length&&0===e[0].length}function g(){return c&&u&&(k("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+b.DefaultDelimiter+"'"),u=!1),m.skipEmptyLines&&(c.data=c.data.filter(function(e){return!y(e)})),_()&&function(){if(!c)return;function e(e,t){J(m.transformHeader)&&(e=m.transformHeader(e,t)),l.push(e)}if(Array.isArray(c.data[0])){for(var t=0;_()&&t<c.data.length;t++)c.data[t].forEach(e);c.data.splice(0,1)}else c.data.forEach(e)}(),function(){if(!c||!m.header&&!m.dynamicTyping&&!m.transform)return c;function e(e,t){var r,i=m.header?{}:[];for(r=0;r<e.length;r++){var n=r,s=e[r];m.header&&(n=r>=l.length?"__parsed_extra":l[r]),m.transform&&(s=m.transform(s,n)),s=v(n,s),"__parsed_extra"===n?(i[n]=i[n]||[],i[n].push(s)):i[n]=s}return m.header&&(r>l.length?k("FieldMismatch","TooManyFields","Too many fields: expected "+l.length+" fields but parsed "+r,f+t):r<l.length&&k("FieldMismatch","TooFewFields","Too few fields: expected "+l.length+" fields but parsed "+r,f+t)),i}var t=1;!c.data.length||Array.isArray(c.data[0])?(c.data=c.data.map(e),t=c.data.length):c.data=e(c.data,0);m.header&&c.meta&&(c.meta.fields=l);return f+=t,c}()}function _(){return m.header&&0===l.length}function v(e,t){return r=e,m.dynamicTypingFunction&&void 0===m.dynamicTyping[r]&&(m.dynamicTyping[r]=m.dynamicTypingFunction(r)),!0===(m.dynamicTyping[r]||m.dynamicTyping)?"true"===t||"TRUE"===t||"false"!==t&&"FALSE"!==t&&(function(e){if(s.test(e)){var t=parseFloat(e);if(n<t&&t<i)return!0}return!1}(t)?parseFloat(t):h.test(t)?new Date(t):""===t?null:t):t;var r}function k(e,t,r,i){var n={type:e,code:t,message:r};void 0!==i&&(n.row=i),c.errors.push(n)}this.parse=function(e,t,r){var i=m.quoteChar||'"';if(m.newline||(m.newline=function(e,t){e=e.substring(0,1048576);var r=new RegExp(Q(t)+"([^]*?)"+Q(t),"gm"),i=(e=e.replace(r,"")).split("\r"),n=e.split("\n"),s=1<n.length&&n[0].length<i[0].length;if(1===i.length||s)return"\n";for(var a=0,o=0;o<i.length;o++)"\n"===i[o][0]&&a++;return a>=i.length/2?"\r\n":"\r"}(e,i)),u=!1,m.delimiter)J(m.delimiter)&&(m.delimiter=m.delimiter(e),c.meta.delimiter=m.delimiter);else{var n=function(e,t,r,i,n){var s,a,o,u;n=n||[",","\t","|",";",b.RECORD_SEP,b.UNIT_SEP];for(var h=0;h<n.length;h++){var f=n[h],d=0,l=0,c=0;o=void 0;for(var p=new E({comments:i,delimiter:f,newline:t,preview:10}).parse(e),g=0;g<p.data.length;g++)if(r&&y(p.data[g]))c++;else{var _=p.data[g].length;l+=_,void 0!==o?0<_&&(d+=Math.abs(_-o),o=_):o=_}0<p.data.length&&(l/=p.data.length-c),(void 0===a||d<=a)&&(void 0===u||u<l)&&1.99<l&&(a=d,s=f,u=l)}return{successful:!!(m.delimiter=s),bestDelimiter:s}}(e,m.newline,m.skipEmptyLines,m.comments,m.delimitersToGuess);n.successful?m.delimiter=n.bestDelimiter:(u=!0,m.delimiter=b.DefaultDelimiter),c.meta.delimiter=m.delimiter}var s=w(m);return m.preview&&m.header&&s.preview++,a=e,o=new E(s),c=o.parse(a,t,r),g(),d?{meta:{paused:!0}}:c||{meta:{paused:!1}}},this.paused=function(){return d},this.pause=function(){d=!0,o.abort(),a=J(m.chunk)?"":a.substring(o.getCharIndex())},this.resume=function(){t.streamer._halted?(d=!1,t.streamer.parseChunk(a,!0)):setTimeout(t.resume,3)},this.aborted=function(){return e},this.abort=function(){e=!0,o.abort(),c.meta.aborted=!0,J(m.complete)&&m.complete(c),a=""}}function Q(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function E(j){var z,M=(j=j||{}).delimiter,P=j.newline,U=j.comments,q=j.step,N=j.preview,B=j.fastMode,K=z=void 0===j.quoteChar||null===j.quoteChar?'"':j.quoteChar;if(void 0!==j.escapeChar&&(K=j.escapeChar),("string"!=typeof M||-1<b.BAD_DELIMITERS.indexOf(M))&&(M=","),U===M)throw new Error("Comment character same as delimiter");!0===U?U="#":("string"!=typeof U||-1<b.BAD_DELIMITERS.indexOf(U))&&(U=!1),"\n"!==P&&"\r"!==P&&"\r\n"!==P&&(P="\n");var W=0,H=!1;this.parse=function(i,t,r){if("string"!=typeof i)throw new Error("Input must be a string");var n=i.length,e=M.length,s=P.length,a=U.length,o=J(q),u=[],h=[],f=[],d=W=0;if(!i)return L();if(j.header&&!t){var l=i.split(P)[0].split(M),c=[],p={},g=!1;for(var _ in l){var m=l[_];J(j.transformHeader)&&(m=j.transformHeader(m,_));var y=m,v=p[m]||0;for(0<v&&(g=!0,y=m+"_"+v),p[m]=v+1;c.includes(y);)y=y+"_"+v;c.push(y)}if(g){var k=i.split(P);k[0]=c.join(M),i=k.join(P)}}if(B||!1!==B&&-1===i.indexOf(z)){for(var b=i.split(P),E=0;E<b.length;E++){if(f=b[E],W+=f.length,E!==b.length-1)W+=P.length;else if(r)return L();if(!U||f.substring(0,a)!==U){if(o){if(u=[],I(f.split(M)),F(),H)return L()}else I(f.split(M));if(N&&N<=E)return u=u.slice(0,N),L(!0)}}return L()}for(var w=i.indexOf(M,W),R=i.indexOf(P,W),C=new RegExp(Q(K)+Q(z),"g"),S=i.indexOf(z,W);;)if(i[W]!==z)if(U&&0===f.length&&i.substring(W,W+a)===U){if(-1===R)return L();W=R+s,R=i.indexOf(P,W),w=i.indexOf(M,W)}else if(-1!==w&&(w<R||-1===R))f.push(i.substring(W,w)),W=w+e,w=i.indexOf(M,W);else{if(-1===R)break;if(f.push(i.substring(W,R)),D(R+s),o&&(F(),H))return L();if(N&&u.length>=N)return L(!0)}else for(S=W,W++;;){if(-1===(S=i.indexOf(z,S+1)))return r||h.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:u.length,index:W}),T();if(S===n-1)return T(i.substring(W,S).replace(C,z));if(z!==K||i[S+1]!==K){if(z===K||0===S||i[S-1]!==K){-1!==w&&w<S+1&&(w=i.indexOf(M,S+1)),-1!==R&&R<S+1&&(R=i.indexOf(P,S+1));var O=A(-1===R?w:Math.min(w,R));if(i.substr(S+1+O,e)===M){f.push(i.substring(W,S).replace(C,z)),i[W=S+1+O+e]!==z&&(S=i.indexOf(z,W)),w=i.indexOf(M,W),R=i.indexOf(P,W);break}var x=A(R);if(i.substring(S+1+x,S+1+x+s)===P){if(f.push(i.substring(W,S).replace(C,z)),D(S+1+x+s),w=i.indexOf(M,W),S=i.indexOf(z,W),o&&(F(),H))return L();if(N&&u.length>=N)return L(!0);break}h.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:u.length,index:W}),S++}}else S++}return T();function I(e){u.push(e),d=W}function A(e){var t=0;if(-1!==e){var r=i.substring(S+1,e);r&&""===r.trim()&&(t=r.length)}return t}function T(e){return r||(void 0===e&&(e=i.substring(W)),f.push(e),W=n,I(f),o&&F()),L()}function D(e){W=e,I(f),f=[],R=i.indexOf(P,W)}function L(e){return{data:u,errors:h,meta:{delimiter:M,linebreak:P,aborted:H,truncated:!!e,cursor:d+(t||0)}}}function F(){q(L()),u=[],h=[]}},this.abort=function(){H=!0},this.getCharIndex=function(){return W}}function _(e){var t=e.data,r=a[t.workerId],i=!1;if(t.error)r.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){i=!0,m(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:y,resume:y};if(J(r.userStep)){for(var s=0;s<t.results.data.length&&(r.userStep({data:t.results.data[s],errors:t.results.errors,meta:t.results.meta},n),!i);s++);delete t.results}else J(r.userChunk)&&(r.userChunk(t.results,n,t.file),delete t.results)}t.finished&&!i&&m(t.workerId,t.results)}function m(e,t){var r=a[e];J(r.userComplete)&&r.userComplete(t),r.terminate(),delete a[e]}function y(){throw new Error("Not implemented.")}function w(e){if("object"!=typeof e||null===e)return e;var t=Array.isArray(e)?[]:{};for(var r in e)t[r]=w(e[r]);return t}function v(e,t){return function(){e.apply(t,arguments)}}function J(e){return"function"==typeof e}return o&&(f.onmessage=function(e){var t=e.data;void 0===b.WORKER_ID&&t&&(b.WORKER_ID=t.workerId);if("string"==typeof t.input)f.postMessage({workerId:b.WORKER_ID,results:b.parse(t.input,t.config),finished:!0});else if(f.File&&t.input instanceof File||t.input instanceof Object){var r=b.parse(t.input,t.config);r&&f.postMessage({workerId:b.WORKER_ID,results:r,finished:!0})}}),(l.prototype=Object.create(h.prototype)).constructor=l,(c.prototype=Object.create(h.prototype)).constructor=c,(p.prototype=Object.create(p.prototype)).constructor=p,(g.prototype=Object.create(h.prototype)).constructor=g,b});

/***/ }),

/***/ 9299:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

/**
 * @licstart The following is the entire license notice for the
 * JavaScript code in this page
 *
 * Copyright 2023 Mozilla Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * @licend The above is the entire license notice for the
 * JavaScript code in this page
 */

(function webpackUniversalModuleDefinition(root, factory) {
	if(true)
		module.exports = root.pdfjsLib = factory();
	else {}
})(globalThis, () => {
return /******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	var __webpack_modules__ = ([
/* 0 */,
/* 1 */
/***/ ((__unused_webpack_module, exports) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.RenderingIntentFlag = exports.PromiseCapability = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.MAX_IMAGE_SIZE_TO_CACHE = exports.LINE_FACTOR = exports.LINE_DESCENT_FACTOR = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FeatureTest = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.BASELINE_FACTOR = exports.AnnotationType = exports.AnnotationReplyType = exports.AnnotationPrefix = exports.AnnotationMode = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationEditorType = exports.AnnotationEditorPrefix = exports.AnnotationEditorParamsType = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0;
exports.assert = assert;
exports.bytesToString = bytesToString;
exports.createValidAbsoluteUrl = createValidAbsoluteUrl;
exports.getModificationDate = getModificationDate;
exports.getUuid = getUuid;
exports.getVerbosityLevel = getVerbosityLevel;
exports.info = info;
exports.isArrayBuffer = isArrayBuffer;
exports.isArrayEqual = isArrayEqual;
exports.isNodeJS = void 0;
exports.normalizeUnicode = normalizeUnicode;
exports.objectFromMap = objectFromMap;
exports.objectSize = objectSize;
exports.setVerbosityLevel = setVerbosityLevel;
exports.shadow = shadow;
exports.string32 = string32;
exports.stringToBytes = stringToBytes;
exports.stringToPDFString = stringToPDFString;
exports.stringToUTF8String = stringToUTF8String;
exports.unreachable = unreachable;
exports.utf8StringToString = utf8StringToString;
exports.warn = warn;
const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser");
exports.isNodeJS = isNodeJS;
const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;
const MAX_IMAGE_SIZE_TO_CACHE = 10e6;
exports.MAX_IMAGE_SIZE_TO_CACHE = MAX_IMAGE_SIZE_TO_CACHE;
const LINE_FACTOR = 1.35;
exports.LINE_FACTOR = LINE_FACTOR;
const LINE_DESCENT_FACTOR = 0.35;
exports.LINE_DESCENT_FACTOR = LINE_DESCENT_FACTOR;
const BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR;
exports.BASELINE_FACTOR = BASELINE_FACTOR;
const RenderingIntentFlag = {
  ANY: 0x01,
  DISPLAY: 0x02,
  PRINT: 0x04,
  SAVE: 0x08,
  ANNOTATIONS_FORMS: 0x10,
  ANNOTATIONS_STORAGE: 0x20,
  ANNOTATIONS_DISABLE: 0x40,
  OPLIST: 0x100
};
exports.RenderingIntentFlag = RenderingIntentFlag;
const AnnotationMode = {
  DISABLE: 0,
  ENABLE: 1,
  ENABLE_FORMS: 2,
  ENABLE_STORAGE: 3
};
exports.AnnotationMode = AnnotationMode;
const AnnotationEditorPrefix = "pdfjs_internal_editor_";
exports.AnnotationEditorPrefix = AnnotationEditorPrefix;
const AnnotationEditorType = {
  DISABLE: -1,
  NONE: 0,
  FREETEXT: 3,
  STAMP: 13,
  INK: 15
};
exports.AnnotationEditorType = AnnotationEditorType;
const AnnotationEditorParamsType = {
  RESIZE: 1,
  CREATE: 2,
  FREETEXT_SIZE: 11,
  FREETEXT_COLOR: 12,
  FREETEXT_OPACITY: 13,
  INK_COLOR: 21,
  INK_THICKNESS: 22,
  INK_OPACITY: 23
};
exports.AnnotationEditorParamsType = AnnotationEditorParamsType;
const PermissionFlag = {
  PRINT: 0x04,
  MODIFY_CONTENTS: 0x08,
  COPY: 0x10,
  MODIFY_ANNOTATIONS: 0x20,
  FILL_INTERACTIVE_FORMS: 0x100,
  COPY_FOR_ACCESSIBILITY: 0x200,
  ASSEMBLE: 0x400,
  PRINT_HIGH_QUALITY: 0x800
};
exports.PermissionFlag = PermissionFlag;
const TextRenderingMode = {
  FILL: 0,
  STROKE: 1,
  FILL_STROKE: 2,
  INVISIBLE: 3,
  FILL_ADD_TO_PATH: 4,
  STROKE_ADD_TO_PATH: 5,
  FILL_STROKE_ADD_TO_PATH: 6,
  ADD_TO_PATH: 7,
  FILL_STROKE_MASK: 3,
  ADD_TO_PATH_FLAG: 4
};
exports.TextRenderingMode = TextRenderingMode;
const ImageKind = {
  GRAYSCALE_1BPP: 1,
  RGB_24BPP: 2,
  RGBA_32BPP: 3
};
exports.ImageKind = ImageKind;
const AnnotationType = {
  TEXT: 1,
  LINK: 2,
  FREETEXT: 3,
  LINE: 4,
  SQUARE: 5,
  CIRCLE: 6,
  POLYGON: 7,
  POLYLINE: 8,
  HIGHLIGHT: 9,
  UNDERLINE: 10,
  SQUIGGLY: 11,
  STRIKEOUT: 12,
  STAMP: 13,
  CARET: 14,
  INK: 15,
  POPUP: 16,
  FILEATTACHMENT: 17,
  SOUND: 18,
  MOVIE: 19,
  WIDGET: 20,
  SCREEN: 21,
  PRINTERMARK: 22,
  TRAPNET: 23,
  WATERMARK: 24,
  THREED: 25,
  REDACT: 26
};
exports.AnnotationType = AnnotationType;
const AnnotationReplyType = {
  GROUP: "Group",
  REPLY: "R"
};
exports.AnnotationReplyType = AnnotationReplyType;
const AnnotationFlag = {
  INVISIBLE: 0x01,
  HIDDEN: 0x02,
  PRINT: 0x04,
  NOZOOM: 0x08,
  NOROTATE: 0x10,
  NOVIEW: 0x20,
  READONLY: 0x40,
  LOCKED: 0x80,
  TOGGLENOVIEW: 0x100,
  LOCKEDCONTENTS: 0x200
};
exports.AnnotationFlag = AnnotationFlag;
const AnnotationFieldFlag = {
  READONLY: 0x0000001,
  REQUIRED: 0x0000002,
  NOEXPORT: 0x0000004,
  MULTILINE: 0x0001000,
  PASSWORD: 0x0002000,
  NOTOGGLETOOFF: 0x0004000,
  RADIO: 0x0008000,
  PUSHBUTTON: 0x0010000,
  COMBO: 0x0020000,
  EDIT: 0x0040000,
  SORT: 0x0080000,
  FILESELECT: 0x0100000,
  MULTISELECT: 0x0200000,
  DONOTSPELLCHECK: 0x0400000,
  DONOTSCROLL: 0x0800000,
  COMB: 0x1000000,
  RICHTEXT: 0x2000000,
  RADIOSINUNISON: 0x2000000,
  COMMITONSELCHANGE: 0x4000000
};
exports.AnnotationFieldFlag = AnnotationFieldFlag;
const AnnotationBorderStyleType = {
  SOLID: 1,
  DASHED: 2,
  BEVELED: 3,
  INSET: 4,
  UNDERLINE: 5
};
exports.AnnotationBorderStyleType = AnnotationBorderStyleType;
const AnnotationActionEventType = {
  E: "Mouse Enter",
  X: "Mouse Exit",
  D: "Mouse Down",
  U: "Mouse Up",
  Fo: "Focus",
  Bl: "Blur",
  PO: "PageOpen",
  PC: "PageClose",
  PV: "PageVisible",
  PI: "PageInvisible",
  K: "Keystroke",
  F: "Format",
  V: "Validate",
  C: "Calculate"
};
exports.AnnotationActionEventType = AnnotationActionEventType;
const DocumentActionEventType = {
  WC: "WillClose",
  WS: "WillSave",
  DS: "DidSave",
  WP: "WillPrint",
  DP: "DidPrint"
};
exports.DocumentActionEventType = DocumentActionEventType;
const PageActionEventType = {
  O: "PageOpen",
  C: "PageClose"
};
exports.PageActionEventType = PageActionEventType;
const VerbosityLevel = {
  ERRORS: 0,
  WARNINGS: 1,
  INFOS: 5
};
exports.VerbosityLevel = VerbosityLevel;
const CMapCompressionType = {
  NONE: 0,
  BINARY: 1
};
exports.CMapCompressionType = CMapCompressionType;
const OPS = {
  dependency: 1,
  setLineWidth: 2,
  setLineCap: 3,
  setLineJoin: 4,
  setMiterLimit: 5,
  setDash: 6,
  setRenderingIntent: 7,
  setFlatness: 8,
  setGState: 9,
  save: 10,
  restore: 11,
  transform: 12,
  moveTo: 13,
  lineTo: 14,
  curveTo: 15,
  curveTo2: 16,
  curveTo3: 17,
  closePath: 18,
  rectangle: 19,
  stroke: 20,
  closeStroke: 21,
  fill: 22,
  eoFill: 23,
  fillStroke: 24,
  eoFillStroke: 25,
  closeFillStroke: 26,
  closeEOFillStroke: 27,
  endPath: 28,
  clip: 29,
  eoClip: 30,
  beginText: 31,
  endText: 32,
  setCharSpacing: 33,
  setWordSpacing: 34,
  setHScale: 35,
  setLeading: 36,
  setFont: 37,
  setTextRenderingMode: 38,
  setTextRise: 39,
  moveText: 40,
  setLeadingMoveText: 41,
  setTextMatrix: 42,
  nextLine: 43,
  showText: 44,
  showSpacedText: 45,
  nextLineShowText: 46,
  nextLineSetSpacingShowText: 47,
  setCharWidth: 48,
  setCharWidthAndBounds: 49,
  setStrokeColorSpace: 50,
  setFillColorSpace: 51,
  setStrokeColor: 52,
  setStrokeColorN: 53,
  setFillColor: 54,
  setFillColorN: 55,
  setStrokeGray: 56,
  setFillGray: 57,
  setStrokeRGBColor: 58,
  setFillRGBColor: 59,
  setStrokeCMYKColor: 60,
  setFillCMYKColor: 61,
  shadingFill: 62,
  beginInlineImage: 63,
  beginImageData: 64,
  endInlineImage: 65,
  paintXObject: 66,
  markPoint: 67,
  markPointProps: 68,
  beginMarkedContent: 69,
  beginMarkedContentProps: 70,
  endMarkedContent: 71,
  beginCompat: 72,
  endCompat: 73,
  paintFormXObjectBegin: 74,
  paintFormXObjectEnd: 75,
  beginGroup: 76,
  endGroup: 77,
  beginAnnotation: 80,
  endAnnotation: 81,
  paintImageMaskXObject: 83,
  paintImageMaskXObjectGroup: 84,
  paintImageXObject: 85,
  paintInlineImageXObject: 86,
  paintInlineImageXObjectGroup: 87,
  paintImageXObjectRepeat: 88,
  paintImageMaskXObjectRepeat: 89,
  paintSolidColorImageMask: 90,
  constructPath: 91
};
exports.OPS = OPS;
const PasswordResponses = {
  NEED_PASSWORD: 1,
  INCORRECT_PASSWORD: 2
};
exports.PasswordResponses = PasswordResponses;
let verbosity = VerbosityLevel.WARNINGS;
function setVerbosityLevel(level) {
  if (Number.isInteger(level)) {
    verbosity = level;
  }
}
function getVerbosityLevel() {
  return verbosity;
}
function info(msg) {
  if (verbosity >= VerbosityLevel.INFOS) {
    console.log(`Info: ${msg}`);
  }
}
function warn(msg) {
  if (verbosity >= VerbosityLevel.WARNINGS) {
    console.log(`Warning: ${msg}`);
  }
}
function unreachable(msg) {
  throw new Error(msg);
}
function assert(cond, msg) {
  if (!cond) {
    unreachable(msg);
  }
}
function _isValidProtocol(url) {
  switch (url?.protocol) {
    case "http:":
    case "https:":
    case "ftp:":
    case "mailto:":
    case "tel:":
      return true;
    default:
      return false;
  }
}
function createValidAbsoluteUrl(url, baseUrl = null, options = null) {
  if (!url) {
    return null;
  }
  try {
    if (options && typeof url === "string") {
      if (options.addDefaultProtocol && url.startsWith("www.")) {
        const dots = url.match(/\./g);
        if (dots?.length >= 2) {
          url = `http://${url}`;
        }
      }
      if (options.tryConvertEncoding) {
        try {
          url = stringToUTF8String(url);
        } catch {}
      }
    }
    const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);
    if (_isValidProtocol(absoluteUrl)) {
      return absoluteUrl;
    }
  } catch {}
  return null;
}
function shadow(obj, prop, value, nonSerializable = false) {
  Object.defineProperty(obj, prop, {
    value,
    enumerable: !nonSerializable,
    configurable: true,
    writable: false
  });
  return value;
}
const BaseException = function BaseExceptionClosure() {
  function BaseException(message, name) {
    if (this.constructor === BaseException) {
      unreachable("Cannot initialize BaseException.");
    }
    this.message = message;
    this.name = name;
  }
  BaseException.prototype = new Error();
  BaseException.constructor = BaseException;
  return BaseException;
}();
exports.BaseException = BaseException;
class PasswordException extends BaseException {
  constructor(msg, code) {
    super(msg, "PasswordException");
    this.code = code;
  }
}
exports.PasswordException = PasswordException;
class UnknownErrorException extends BaseException {
  constructor(msg, details) {
    super(msg, "UnknownErrorException");
    this.details = details;
  }
}
exports.UnknownErrorException = UnknownErrorException;
class InvalidPDFException extends BaseException {
  constructor(msg) {
    super(msg, "InvalidPDFException");
  }
}
exports.InvalidPDFException = InvalidPDFException;
class MissingPDFException extends BaseException {
  constructor(msg) {
    super(msg, "MissingPDFException");
  }
}
exports.MissingPDFException = MissingPDFException;
class UnexpectedResponseException extends BaseException {
  constructor(msg, status) {
    super(msg, "UnexpectedResponseException");
    this.status = status;
  }
}
exports.UnexpectedResponseException = UnexpectedResponseException;
class FormatError extends BaseException {
  constructor(msg) {
    super(msg, "FormatError");
  }
}
exports.FormatError = FormatError;
class AbortException extends BaseException {
  constructor(msg) {
    super(msg, "AbortException");
  }
}
exports.AbortException = AbortException;
function bytesToString(bytes) {
  if (typeof bytes !== "object" || bytes?.length === undefined) {
    unreachable("Invalid argument for bytesToString");
  }
  const length = bytes.length;
  const MAX_ARGUMENT_COUNT = 8192;
  if (length < MAX_ARGUMENT_COUNT) {
    return String.fromCharCode.apply(null, bytes);
  }
  const strBuf = [];
  for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {
    const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);
    const chunk = bytes.subarray(i, chunkEnd);
    strBuf.push(String.fromCharCode.apply(null, chunk));
  }
  return strBuf.join("");
}
function stringToBytes(str) {
  if (typeof str !== "string") {
    unreachable("Invalid argument for stringToBytes");
  }
  const length = str.length;
  const bytes = new Uint8Array(length);
  for (let i = 0; i < length; ++i) {
    bytes[i] = str.charCodeAt(i) & 0xff;
  }
  return bytes;
}
function string32(value) {
  return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
}
function objectSize(obj) {
  return Object.keys(obj).length;
}
function objectFromMap(map) {
  const obj = Object.create(null);
  for (const [key, value] of map) {
    obj[key] = value;
  }
  return obj;
}
function isLittleEndian() {
  const buffer8 = new Uint8Array(4);
  buffer8[0] = 1;
  const view32 = new Uint32Array(buffer8.buffer, 0, 1);
  return view32[0] === 1;
}
function isEvalSupported() {
  try {
    new Function("");
    return true;
  } catch {
    return false;
  }
}
class FeatureTest {
  static get isLittleEndian() {
    return shadow(this, "isLittleEndian", isLittleEndian());
  }
  static get isEvalSupported() {
    return shadow(this, "isEvalSupported", isEvalSupported());
  }
  static get isOffscreenCanvasSupported() {
    return shadow(this, "isOffscreenCanvasSupported", typeof OffscreenCanvas !== "undefined");
  }
  static get platform() {
    if (typeof navigator === "undefined") {
      return shadow(this, "platform", {
        isWin: false,
        isMac: false
      });
    }
    return shadow(this, "platform", {
      isWin: navigator.platform.includes("Win"),
      isMac: navigator.platform.includes("Mac")
    });
  }
  static get isCSSRoundSupported() {
    return shadow(this, "isCSSRoundSupported", globalThis.CSS?.supports?.("width: round(1.5px, 1px)"));
  }
}
exports.FeatureTest = FeatureTest;
const hexNumbers = [...Array(256).keys()].map(n => n.toString(16).padStart(2, "0"));
class Util {
  static makeHexColor(r, g, b) {
    return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;
  }
  static scaleMinMax(transform, minMax) {
    let temp;
    if (transform[0]) {
      if (transform[0] < 0) {
        temp = minMax[0];
        minMax[0] = minMax[1];
        minMax[1] = temp;
      }
      minMax[0] *= transform[0];
      minMax[1] *= transform[0];
      if (transform[3] < 0) {
        temp = minMax[2];
        minMax[2] = minMax[3];
        minMax[3] = temp;
      }
      minMax[2] *= transform[3];
      minMax[3] *= transform[3];
    } else {
      temp = minMax[0];
      minMax[0] = minMax[2];
      minMax[2] = temp;
      temp = minMax[1];
      minMax[1] = minMax[3];
      minMax[3] = temp;
      if (transform[1] < 0) {
        temp = minMax[2];
        minMax[2] = minMax[3];
        minMax[3] = temp;
      }
      minMax[2] *= transform[1];
      minMax[3] *= transform[1];
      if (transform[2] < 0) {
        temp = minMax[0];
        minMax[0] = minMax[1];
        minMax[1] = temp;
      }
      minMax[0] *= transform[2];
      minMax[1] *= transform[2];
    }
    minMax[0] += transform[4];
    minMax[1] += transform[4];
    minMax[2] += transform[5];
    minMax[3] += transform[5];
  }
  static transform(m1, m2) {
    return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]];
  }
  static applyTransform(p, m) {
    const xt = p[0] * m[0] + p[1] * m[2] + m[4];
    const yt = p[0] * m[1] + p[1] * m[3] + m[5];
    return [xt, yt];
  }
  static applyInverseTransform(p, m) {
    const d = m[0] * m[3] - m[1] * m[2];
    const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
    const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
    return [xt, yt];
  }
  static getAxialAlignedBoundingBox(r, m) {
    const p1 = this.applyTransform(r, m);
    const p2 = this.applyTransform(r.slice(2, 4), m);
    const p3 = this.applyTransform([r[0], r[3]], m);
    const p4 = this.applyTransform([r[2], r[1]], m);
    return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])];
  }
  static inverseTransform(m) {
    const d = m[0] * m[3] - m[1] * m[2];
    return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];
  }
  static singularValueDecompose2dScale(m) {
    const transpose = [m[0], m[2], m[1], m[3]];
    const a = m[0] * transpose[0] + m[1] * transpose[2];
    const b = m[0] * transpose[1] + m[1] * transpose[3];
    const c = m[2] * transpose[0] + m[3] * transpose[2];
    const d = m[2] * transpose[1] + m[3] * transpose[3];
    const first = (a + d) / 2;
    const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2;
    const sx = first + second || 1;
    const sy = first - second || 1;
    return [Math.sqrt(sx), Math.sqrt(sy)];
  }
  static normalizeRect(rect) {
    const r = rect.slice(0);
    if (rect[0] > rect[2]) {
      r[0] = rect[2];
      r[2] = rect[0];
    }
    if (rect[1] > rect[3]) {
      r[1] = rect[3];
      r[3] = rect[1];
    }
    return r;
  }
  static intersect(rect1, rect2) {
    const xLow = Math.max(Math.min(rect1[0], rect1[2]), Math.min(rect2[0], rect2[2]));
    const xHigh = Math.min(Math.max(rect1[0], rect1[2]), Math.max(rect2[0], rect2[2]));
    if (xLow > xHigh) {
      return null;
    }
    const yLow = Math.max(Math.min(rect1[1], rect1[3]), Math.min(rect2[1], rect2[3]));
    const yHigh = Math.min(Math.max(rect1[1], rect1[3]), Math.max(rect2[1], rect2[3]));
    if (yLow > yHigh) {
      return null;
    }
    return [xLow, yLow, xHigh, yHigh];
  }
  static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) {
    const tvalues = [],
      bounds = [[], []];
    let a, b, c, t, t1, t2, b2ac, sqrtb2ac;
    for (let i = 0; i < 2; ++i) {
      if (i === 0) {
        b = 6 * x0 - 12 * x1 + 6 * x2;
        a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;
        c = 3 * x1 - 3 * x0;
      } else {
        b = 6 * y0 - 12 * y1 + 6 * y2;
        a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;
        c = 3 * y1 - 3 * y0;
      }
      if (Math.abs(a) < 1e-12) {
        if (Math.abs(b) < 1e-12) {
          continue;
        }
        t = -c / b;
        if (0 < t && t < 1) {
          tvalues.push(t);
        }
        continue;
      }
      b2ac = b * b - 4 * c * a;
      sqrtb2ac = Math.sqrt(b2ac);
      if (b2ac < 0) {
        continue;
      }
      t1 = (-b + sqrtb2ac) / (2 * a);
      if (0 < t1 && t1 < 1) {
        tvalues.push(t1);
      }
      t2 = (-b - sqrtb2ac) / (2 * a);
      if (0 < t2 && t2 < 1) {
        tvalues.push(t2);
      }
    }
    let j = tvalues.length,
      mt;
    const jlen = j;
    while (j--) {
      t = tvalues[j];
      mt = 1 - t;
      bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3;
      bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3;
    }
    bounds[0][jlen] = x0;
    bounds[1][jlen] = y0;
    bounds[0][jlen + 1] = x3;
    bounds[1][jlen + 1] = y3;
    bounds[0].length = bounds[1].length = jlen + 2;
    return [Math.min(...bounds[0]), Math.min(...bounds[1]), Math.max(...bounds[0]), Math.max(...bounds[1])];
  }
}
exports.Util = Util;
const PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac];
function stringToPDFString(str) {
  if (str[0] >= "\xEF") {
    let encoding;
    if (str[0] === "\xFE" && str[1] === "\xFF") {
      encoding = "utf-16be";
    } else if (str[0] === "\xFF" && str[1] === "\xFE") {
      encoding = "utf-16le";
    } else if (str[0] === "\xEF" && str[1] === "\xBB" && str[2] === "\xBF") {
      encoding = "utf-8";
    }
    if (encoding) {
      try {
        const decoder = new TextDecoder(encoding, {
          fatal: true
        });
        const buffer = stringToBytes(str);
        return decoder.decode(buffer);
      } catch (ex) {
        warn(`stringToPDFString: "${ex}".`);
      }
    }
  }
  const strBuf = [];
  for (let i = 0, ii = str.length; i < ii; i++) {
    const code = PDFStringTranslateTable[str.charCodeAt(i)];
    strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));
  }
  return strBuf.join("");
}
function stringToUTF8String(str) {
  return decodeURIComponent(escape(str));
}
function utf8StringToString(str) {
  return unescape(encodeURIComponent(str));
}
function isArrayBuffer(v) {
  return typeof v === "object" && v?.byteLength !== undefined;
}
function isArrayEqual(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }
  for (let i = 0, ii = arr1.length; i < ii; i++) {
    if (arr1[i] !== arr2[i]) {
      return false;
    }
  }
  return true;
}
function getModificationDate(date = new Date()) {
  const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")];
  return buffer.join("");
}
class PromiseCapability {
  #settled = false;
  constructor() {
    this.promise = new Promise((resolve, reject) => {
      this.resolve = data => {
        this.#settled = true;
        resolve(data);
      };
      this.reject = reason => {
        this.#settled = true;
        reject(reason);
      };
    });
  }
  get settled() {
    return this.#settled;
  }
}
exports.PromiseCapability = PromiseCapability;
let NormalizeRegex = null;
let NormalizationMap = null;
function normalizeUnicode(str) {
  if (!NormalizeRegex) {
    NormalizeRegex = /([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu;
    NormalizationMap = new Map([["ſt", "ſt"]]);
  }
  return str.replaceAll(NormalizeRegex, (_, p1, p2) => {
    return p1 ? p1.normalize("NFKC") : NormalizationMap.get(p2);
  });
}
function getUuid() {
  if (typeof crypto !== "undefined" && typeof crypto?.randomUUID === "function") {
    return crypto.randomUUID();
  }
  const buf = new Uint8Array(32);
  if (typeof crypto !== "undefined" && typeof crypto?.getRandomValues === "function") {
    crypto.getRandomValues(buf);
  } else {
    for (let i = 0; i < 32; i++) {
      buf[i] = Math.floor(Math.random() * 255);
    }
  }
  return bytesToString(buf);
}
const AnnotationPrefix = "pdfjs_internal_id_";
exports.AnnotationPrefix = AnnotationPrefix;

/***/ }),
/* 2 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.RenderTask = exports.PDFWorkerUtil = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFDocumentLoadingTask = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultStandardFontDataFactory = exports.DefaultFilterFactory = exports.DefaultCanvasFactory = exports.DefaultCMapReaderFactory = void 0;
Object.defineProperty(exports, "SVGGraphics", ({
  enumerable: true,
  get: function () {
    return _displaySvg.SVGGraphics;
  }
}));
exports.build = void 0;
exports.getDocument = getDocument;
exports.version = void 0;
var _util = __w_pdfjs_require__(1);
var _annotation_storage = __w_pdfjs_require__(3);
var _display_utils = __w_pdfjs_require__(6);
var _font_loader = __w_pdfjs_require__(9);
var _displayNode_utils = __w_pdfjs_require__(10);
var _canvas = __w_pdfjs_require__(11);
var _worker_options = __w_pdfjs_require__(14);
var _message_handler = __w_pdfjs_require__(15);
var _metadata = __w_pdfjs_require__(16);
var _optional_content_config = __w_pdfjs_require__(17);
var _transport_stream = __w_pdfjs_require__(18);
var _displayFetch_stream = __w_pdfjs_require__(19);
var _displayNetwork = __w_pdfjs_require__(22);
var _displayNode_stream = __w_pdfjs_require__(23);
var _displaySvg = __w_pdfjs_require__(24);
var _xfa_text = __w_pdfjs_require__(25);
const DEFAULT_RANGE_CHUNK_SIZE = 65536;
const RENDERING_CANCELLED_TIMEOUT = 100;
const DELAYED_CLEANUP_TIMEOUT = 5000;
const DefaultCanvasFactory = _util.isNodeJS ? _displayNode_utils.NodeCanvasFactory : _display_utils.DOMCanvasFactory;
exports.DefaultCanvasFactory = DefaultCanvasFactory;
const DefaultCMapReaderFactory = _util.isNodeJS ? _displayNode_utils.NodeCMapReaderFactory : _display_utils.DOMCMapReaderFactory;
exports.DefaultCMapReaderFactory = DefaultCMapReaderFactory;
const DefaultFilterFactory = _util.isNodeJS ? _displayNode_utils.NodeFilterFactory : _display_utils.DOMFilterFactory;
exports.DefaultFilterFactory = DefaultFilterFactory;
const DefaultStandardFontDataFactory = _util.isNodeJS ? _displayNode_utils.NodeStandardFontDataFactory : _display_utils.DOMStandardFontDataFactory;
exports.DefaultStandardFontDataFactory = DefaultStandardFontDataFactory;
function getDocument(src) {
  if (typeof src === "string" || src instanceof URL) {
    src = {
      url: src
    };
  } else if ((0, _util.isArrayBuffer)(src)) {
    src = {
      data: src
    };
  }
  if (typeof src !== "object") {
    throw new Error("Invalid parameter in getDocument, need parameter object.");
  }
  if (!src.url && !src.data && !src.range) {
    throw new Error("Invalid parameter object: need either .data, .range or .url");
  }
  const task = new PDFDocumentLoadingTask();
  const {
    docId
  } = task;
  const url = src.url ? getUrlProp(src.url) : null;
  const data = src.data ? getDataProp(src.data) : null;
  const httpHeaders = src.httpHeaders || null;
  const withCredentials = src.withCredentials === true;
  const password = src.password ?? null;
  const rangeTransport = src.range instanceof PDFDataRangeTransport ? src.range : null;
  const rangeChunkSize = Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0 ? src.rangeChunkSize : DEFAULT_RANGE_CHUNK_SIZE;
  let worker = src.worker instanceof PDFWorker ? src.worker : null;
  const verbosity = src.verbosity;
  const docBaseUrl = typeof src.docBaseUrl === "string" && !(0, _display_utils.isDataScheme)(src.docBaseUrl) ? src.docBaseUrl : null;
  const cMapUrl = typeof src.cMapUrl === "string" ? src.cMapUrl : null;
  const cMapPacked = src.cMapPacked !== false;
  const CMapReaderFactory = src.CMapReaderFactory || DefaultCMapReaderFactory;
  const standardFontDataUrl = typeof src.standardFontDataUrl === "string" ? src.standardFontDataUrl : null;
  const StandardFontDataFactory = src.StandardFontDataFactory || DefaultStandardFontDataFactory;
  const ignoreErrors = src.stopAtErrors !== true;
  const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1;
  const isEvalSupported = src.isEvalSupported !== false;
  const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === "boolean" ? src.isOffscreenCanvasSupported : !_util.isNodeJS;
  const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : -1;
  const disableFontFace = typeof src.disableFontFace === "boolean" ? src.disableFontFace : _util.isNodeJS;
  const fontExtraProperties = src.fontExtraProperties === true;
  const enableXfa = src.enableXfa === true;
  const ownerDocument = src.ownerDocument || globalThis.document;
  const disableRange = src.disableRange === true;
  const disableStream = src.disableStream === true;
  const disableAutoFetch = src.disableAutoFetch === true;
  const pdfBug = src.pdfBug === true;
  const length = rangeTransport ? rangeTransport.length : src.length ?? NaN;
  const useSystemFonts = typeof src.useSystemFonts === "boolean" ? src.useSystemFonts : !_util.isNodeJS && !disableFontFace;
  const useWorkerFetch = typeof src.useWorkerFetch === "boolean" ? src.useWorkerFetch : CMapReaderFactory === _display_utils.DOMCMapReaderFactory && StandardFontDataFactory === _display_utils.DOMStandardFontDataFactory && cMapUrl && standardFontDataUrl && (0, _display_utils.isValidFetchUrl)(cMapUrl, document.baseURI) && (0, _display_utils.isValidFetchUrl)(standardFontDataUrl, document.baseURI);
  const canvasFactory = src.canvasFactory || new DefaultCanvasFactory({
    ownerDocument
  });
  const filterFactory = src.filterFactory || new DefaultFilterFactory({
    docId,
    ownerDocument
  });
  const styleElement = null;
  (0, _util.setVerbosityLevel)(verbosity);
  const transportFactory = {
    canvasFactory,
    filterFactory
  };
  if (!useWorkerFetch) {
    transportFactory.cMapReaderFactory = new CMapReaderFactory({
      baseUrl: cMapUrl,
      isCompressed: cMapPacked
    });
    transportFactory.standardFontDataFactory = new StandardFontDataFactory({
      baseUrl: standardFontDataUrl
    });
  }
  if (!worker) {
    const workerParams = {
      verbosity,
      port: _worker_options.GlobalWorkerOptions.workerPort
    };
    worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams);
    task._worker = worker;
  }
  const fetchDocParams = {
    docId,
    apiVersion: '3.11.174',
    data,
    password,
    disableAutoFetch,
    rangeChunkSize,
    length,
    docBaseUrl,
    enableXfa,
    evaluatorOptions: {
      maxImageSize,
      disableFontFace,
      ignoreErrors,
      isEvalSupported,
      isOffscreenCanvasSupported,
      canvasMaxAreaInBytes,
      fontExtraProperties,
      useSystemFonts,
      cMapUrl: useWorkerFetch ? cMapUrl : null,
      standardFontDataUrl: useWorkerFetch ? standardFontDataUrl : null
    }
  };
  const transportParams = {
    ignoreErrors,
    isEvalSupported,
    disableFontFace,
    fontExtraProperties,
    enableXfa,
    ownerDocument,
    disableAutoFetch,
    pdfBug,
    styleElement
  };
  worker.promise.then(function () {
    if (task.destroyed) {
      throw new Error("Loading aborted");
    }
    const workerIdPromise = _fetchDocument(worker, fetchDocParams);
    const networkStreamPromise = new Promise(function (resolve) {
      let networkStream;
      if (rangeTransport) {
        networkStream = new _transport_stream.PDFDataTransportStream({
          length,
          initialData: rangeTransport.initialData,
          progressiveDone: rangeTransport.progressiveDone,
          contentDispositionFilename: rangeTransport.contentDispositionFilename,
          disableRange,
          disableStream
        }, rangeTransport);
      } else if (!data) {
        const createPDFNetworkStream = params => {
          if (_util.isNodeJS) {
            return new _displayNode_stream.PDFNodeStream(params);
          }
          return (0, _display_utils.isValidFetchUrl)(params.url) ? new _displayFetch_stream.PDFFetchStream(params) : new _displayNetwork.PDFNetworkStream(params);
        };
        networkStream = createPDFNetworkStream({
          url,
          length,
          httpHeaders,
          withCredentials,
          rangeChunkSize,
          disableRange,
          disableStream
        });
      }
      resolve(networkStream);
    });
    return Promise.all([workerIdPromise, networkStreamPromise]).then(function ([workerId, networkStream]) {
      if (task.destroyed) {
        throw new Error("Loading aborted");
      }
      const messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port);
      const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory);
      task._transport = transport;
      messageHandler.send("Ready", null);
    });
  }).catch(task._capability.reject);
  return task;
}
async function _fetchDocument(worker, source) {
  if (worker.destroyed) {
    throw new Error("Worker was destroyed");
  }
  const workerId = await worker.messageHandler.sendWithPromise("GetDocRequest", source, source.data ? [source.data.buffer] : null);
  if (worker.destroyed) {
    throw new Error("Worker was destroyed");
  }
  return workerId;
}
function getUrlProp(val) {
  if (val instanceof URL) {
    return val.href;
  }
  try {
    return new URL(val, window.location).href;
  } catch {
    if (_util.isNodeJS && typeof val === "string") {
      return val;
    }
  }
  throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property.");
}
function getDataProp(val) {
  if (_util.isNodeJS && typeof Buffer !== "undefined" && val instanceof Buffer) {
    throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`.");
  }
  if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) {
    return val;
  }
  if (typeof val === "string") {
    return (0, _util.stringToBytes)(val);
  }
  if (typeof val === "object" && !isNaN(val?.length) || (0, _util.isArrayBuffer)(val)) {
    return new Uint8Array(val);
  }
  throw new Error("Invalid PDF binary data: either TypedArray, " + "string, or array-like object is expected in the data property.");
}
class PDFDocumentLoadingTask {
  static #docId = 0;
  constructor() {
    this._capability = new _util.PromiseCapability();
    this._transport = null;
    this._worker = null;
    this.docId = `d${PDFDocumentLoadingTask.#docId++}`;
    this.destroyed = false;
    this.onPassword = null;
    this.onProgress = null;
  }
  get promise() {
    return this._capability.promise;
  }
  async destroy() {
    this.destroyed = true;
    try {
      if (this._worker?.port) {
        this._worker._pendingDestroy = true;
      }
      await this._transport?.destroy();
    } catch (ex) {
      if (this._worker?.port) {
        delete this._worker._pendingDestroy;
      }
      throw ex;
    }
    this._transport = null;
    if (this._worker) {
      this._worker.destroy();
      this._worker = null;
    }
  }
}
exports.PDFDocumentLoadingTask = PDFDocumentLoadingTask;
class PDFDataRangeTransport {
  constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) {
    this.length = length;
    this.initialData = initialData;
    this.progressiveDone = progressiveDone;
    this.contentDispositionFilename = contentDispositionFilename;
    this._rangeListeners = [];
    this._progressListeners = [];
    this._progressiveReadListeners = [];
    this._progressiveDoneListeners = [];
    this._readyCapability = new _util.PromiseCapability();
  }
  addRangeListener(listener) {
    this._rangeListeners.push(listener);
  }
  addProgressListener(listener) {
    this._progressListeners.push(listener);
  }
  addProgressiveReadListener(listener) {
    this._progressiveReadListeners.push(listener);
  }
  addProgressiveDoneListener(listener) {
    this._progressiveDoneListeners.push(listener);
  }
  onDataRange(begin, chunk) {
    for (const listener of this._rangeListeners) {
      listener(begin, chunk);
    }
  }
  onDataProgress(loaded, total) {
    this._readyCapability.promise.then(() => {
      for (const listener of this._progressListeners) {
        listener(loaded, total);
      }
    });
  }
  onDataProgressiveRead(chunk) {
    this._readyCapability.promise.then(() => {
      for (const listener of this._progressiveReadListeners) {
        listener(chunk);
      }
    });
  }
  onDataProgressiveDone() {
    this._readyCapability.promise.then(() => {
      for (const listener of this._progressiveDoneListeners) {
        listener();
      }
    });
  }
  transportReady() {
    this._readyCapability.resolve();
  }
  requestDataRange(begin, end) {
    (0, _util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange");
  }
  abort() {}
}
exports.PDFDataRangeTransport = PDFDataRangeTransport;
class PDFDocumentProxy {
  constructor(pdfInfo, transport) {
    this._pdfInfo = pdfInfo;
    this._transport = transport;
    Object.defineProperty(this, "getJavaScript", {
      value: () => {
        (0, _display_utils.deprecated)("`PDFDocumentProxy.getJavaScript`, " + "please use `PDFDocumentProxy.getJSActions` instead.");
        return this.getJSActions().then(js => {
          if (!js) {
            return js;
          }
          const jsArr = [];
          for (const name in js) {
            jsArr.push(...js[name]);
          }
          return jsArr;
        });
      }
    });
  }
  get annotationStorage() {
    return this._transport.annotationStorage;
  }
  get filterFactory() {
    return this._transport.filterFactory;
  }
  get numPages() {
    return this._pdfInfo.numPages;
  }
  get fingerprints() {
    return this._pdfInfo.fingerprints;
  }
  get isPureXfa() {
    return (0, _util.shadow)(this, "isPureXfa", !!this._transport._htmlForXfa);
  }
  get allXfaHtml() {
    return this._transport._htmlForXfa;
  }
  getPage(pageNumber) {
    return this._transport.getPage(pageNumber);
  }
  getPageIndex(ref) {
    return this._transport.getPageIndex(ref);
  }
  getDestinations() {
    return this._transport.getDestinations();
  }
  getDestination(id) {
    return this._transport.getDestination(id);
  }
  getPageLabels() {
    return this._transport.getPageLabels();
  }
  getPageLayout() {
    return this._transport.getPageLayout();
  }
  getPageMode() {
    return this._transport.getPageMode();
  }
  getViewerPreferences() {
    return this._transport.getViewerPreferences();
  }
  getOpenAction() {
    return this._transport.getOpenAction();
  }
  getAttachments() {
    return this._transport.getAttachments();
  }
  getJSActions() {
    return this._transport.getDocJSActions();
  }
  getOutline() {
    return this._transport.getOutline();
  }
  getOptionalContentConfig() {
    return this._transport.getOptionalContentConfig();
  }
  getPermissions() {
    return this._transport.getPermissions();
  }
  getMetadata() {
    return this._transport.getMetadata();
  }
  getMarkInfo() {
    return this._transport.getMarkInfo();
  }
  getData() {
    return this._transport.getData();
  }
  saveDocument() {
    return this._transport.saveDocument();
  }
  getDownloadInfo() {
    return this._transport.downloadInfoCapability.promise;
  }
  cleanup(keepLoadedFonts = false) {
    return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa);
  }
  destroy() {
    return this.loadingTask.destroy();
  }
  get loadingParams() {
    return this._transport.loadingParams;
  }
  get loadingTask() {
    return this._transport.loadingTask;
  }
  getFieldObjects() {
    return this._transport.getFieldObjects();
  }
  hasJSActions() {
    return this._transport.hasJSActions();
  }
  getCalculationOrderIds() {
    return this._transport.getCalculationOrderIds();
  }
}
exports.PDFDocumentProxy = PDFDocumentProxy;
class PDFPageProxy {
  #delayedCleanupTimeout = null;
  #pendingCleanup = false;
  constructor(pageIndex, pageInfo, transport, pdfBug = false) {
    this._pageIndex = pageIndex;
    this._pageInfo = pageInfo;
    this._transport = transport;
    this._stats = pdfBug ? new _display_utils.StatTimer() : null;
    this._pdfBug = pdfBug;
    this.commonObjs = transport.commonObjs;
    this.objs = new PDFObjects();
    this._maybeCleanupAfterRender = false;
    this._intentStates = new Map();
    this.destroyed = false;
  }
  get pageNumber() {
    return this._pageIndex + 1;
  }
  get rotate() {
    return this._pageInfo.rotate;
  }
  get ref() {
    return this._pageInfo.ref;
  }
  get userUnit() {
    return this._pageInfo.userUnit;
  }
  get view() {
    return this._pageInfo.view;
  }
  getViewport({
    scale,
    rotation = this.rotate,
    offsetX = 0,
    offsetY = 0,
    dontFlip = false
  } = {}) {
    return new _display_utils.PageViewport({
      viewBox: this.view,
      scale,
      rotation,
      offsetX,
      offsetY,
      dontFlip
    });
  }
  getAnnotations({
    intent = "display"
  } = {}) {
    const intentArgs = this._transport.getRenderingIntent(intent);
    return this._transport.getAnnotations(this._pageIndex, intentArgs.renderingIntent);
  }
  getJSActions() {
    return this._transport.getPageJSActions(this._pageIndex);
  }
  get filterFactory() {
    return this._transport.filterFactory;
  }
  get isPureXfa() {
    return (0, _util.shadow)(this, "isPureXfa", !!this._transport._htmlForXfa);
  }
  async getXfa() {
    return this._transport._htmlForXfa?.children[this._pageIndex] || null;
  }
  render({
    canvasContext,
    viewport,
    intent = "display",
    annotationMode = _util.AnnotationMode.ENABLE,
    transform = null,
    background = null,
    optionalContentConfigPromise = null,
    annotationCanvasMap = null,
    pageColors = null,
    printAnnotationStorage = null
  }) {
    this._stats?.time("Overall");
    const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage);
    this.#pendingCleanup = false;
    this.#abortDelayedCleanup();
    if (!optionalContentConfigPromise) {
      optionalContentConfigPromise = this._transport.getOptionalContentConfig();
    }
    let intentState = this._intentStates.get(intentArgs.cacheKey);
    if (!intentState) {
      intentState = Object.create(null);
      this._intentStates.set(intentArgs.cacheKey, intentState);
    }
    if (intentState.streamReaderCancelTimeout) {
      clearTimeout(intentState.streamReaderCancelTimeout);
      intentState.streamReaderCancelTimeout = null;
    }
    const intentPrint = !!(intentArgs.renderingIntent & _util.RenderingIntentFlag.PRINT);
    if (!intentState.displayReadyCapability) {
      intentState.displayReadyCapability = new _util.PromiseCapability();
      intentState.operatorList = {
        fnArray: [],
        argsArray: [],
        lastChunk: false,
        separateAnnots: null
      };
      this._stats?.time("Page Request");
      this._pumpOperatorList(intentArgs);
    }
    const complete = error => {
      intentState.renderTasks.delete(internalRenderTask);
      if (this._maybeCleanupAfterRender || intentPrint) {
        this.#pendingCleanup = true;
      }
      this.#tryCleanup(!intentPrint);
      if (error) {
        internalRenderTask.capability.reject(error);
        this._abortOperatorList({
          intentState,
          reason: error instanceof Error ? error : new Error(error)
        });
      } else {
        internalRenderTask.capability.resolve();
      }
      this._stats?.timeEnd("Rendering");
      this._stats?.timeEnd("Overall");
    };
    const internalRenderTask = new InternalRenderTask({
      callback: complete,
      params: {
        canvasContext,
        viewport,
        transform,
        background
      },
      objs: this.objs,
      commonObjs: this.commonObjs,
      annotationCanvasMap,
      operatorList: intentState.operatorList,
      pageIndex: this._pageIndex,
      canvasFactory: this._transport.canvasFactory,
      filterFactory: this._transport.filterFactory,
      useRequestAnimationFrame: !intentPrint,
      pdfBug: this._pdfBug,
      pageColors
    });
    (intentState.renderTasks ||= new Set()).add(internalRenderTask);
    const renderTask = internalRenderTask.task;
    Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => {
      if (this.destroyed) {
        complete();
        return;
      }
      this._stats?.time("Rendering");
      internalRenderTask.initializeGraphics({
        transparency,
        optionalContentConfig
      });
      internalRenderTask.operatorListChanged();
    }).catch(complete);
    return renderTask;
  }
  getOperatorList({
    intent = "display",
    annotationMode = _util.AnnotationMode.ENABLE,
    printAnnotationStorage = null
  } = {}) {
    function operatorListChanged() {
      if (intentState.operatorList.lastChunk) {
        intentState.opListReadCapability.resolve(intentState.operatorList);
        intentState.renderTasks.delete(opListTask);
      }
    }
    const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, true);
    let intentState = this._intentStates.get(intentArgs.cacheKey);
    if (!intentState) {
      intentState = Object.create(null);
      this._intentStates.set(intentArgs.cacheKey, intentState);
    }
    let opListTask;
    if (!intentState.opListReadCapability) {
      opListTask = Object.create(null);
      opListTask.operatorListChanged = operatorListChanged;
      intentState.opListReadCapability = new _util.PromiseCapability();
      (intentState.renderTasks ||= new Set()).add(opListTask);
      intentState.operatorList = {
        fnArray: [],
        argsArray: [],
        lastChunk: false,
        separateAnnots: null
      };
      this._stats?.time("Page Request");
      this._pumpOperatorList(intentArgs);
    }
    return intentState.opListReadCapability.promise;
  }
  streamTextContent({
    includeMarkedContent = false,
    disableNormalization = false
  } = {}) {
    const TEXT_CONTENT_CHUNK_SIZE = 100;
    return this._transport.messageHandler.sendWithStream("GetTextContent", {
      pageIndex: this._pageIndex,
      includeMarkedContent: includeMarkedContent === true,
      disableNormalization: disableNormalization === true
    }, {
      highWaterMark: TEXT_CONTENT_CHUNK_SIZE,
      size(textContent) {
        return textContent.items.length;
      }
    });
  }
  getTextContent(params = {}) {
    if (this._transport._htmlForXfa) {
      return this.getXfa().then(xfa => {
        return _xfa_text.XfaText.textContent(xfa);
      });
    }
    const readableStream = this.streamTextContent(params);
    return new Promise(function (resolve, reject) {
      function pump() {
        reader.read().then(function ({
          value,
          done
        }) {
          if (done) {
            resolve(textContent);
            return;
          }
          Object.assign(textContent.styles, value.styles);
          textContent.items.push(...value.items);
          pump();
        }, reject);
      }
      const reader = readableStream.getReader();
      const textContent = {
        items: [],
        styles: Object.create(null)
      };
      pump();
    });
  }
  getStructTree() {
    return this._transport.getStructTree(this._pageIndex);
  }
  _destroy() {
    this.destroyed = true;
    const waitOn = [];
    for (const intentState of this._intentStates.values()) {
      this._abortOperatorList({
        intentState,
        reason: new Error("Page was destroyed."),
        force: true
      });
      if (intentState.opListReadCapability) {
        continue;
      }
      for (const internalRenderTask of intentState.renderTasks) {
        waitOn.push(internalRenderTask.completed);
        internalRenderTask.cancel();
      }
    }
    this.objs.clear();
    this.#pendingCleanup = false;
    this.#abortDelayedCleanup();
    return Promise.all(waitOn);
  }
  cleanup(resetStats = false) {
    this.#pendingCleanup = true;
    const success = this.#tryCleanup(false);
    if (resetStats && success) {
      this._stats &&= new _display_utils.StatTimer();
    }
    return success;
  }
  #tryCleanup(delayed = false) {
    this.#abortDelayedCleanup();
    if (!this.#pendingCleanup || this.destroyed) {
      return false;
    }
    if (delayed) {
      this.#delayedCleanupTimeout = setTimeout(() => {
        this.#delayedCleanupTimeout = null;
        this.#tryCleanup(false);
      }, DELAYED_CLEANUP_TIMEOUT);
      return false;
    }
    for (const {
      renderTasks,
      operatorList
    } of this._intentStates.values()) {
      if (renderTasks.size > 0 || !operatorList.lastChunk) {
        return false;
      }
    }
    this._intentStates.clear();
    this.objs.clear();
    this.#pendingCleanup = false;
    return true;
  }
  #abortDelayedCleanup() {
    if (this.#delayedCleanupTimeout) {
      clearTimeout(this.#delayedCleanupTimeout);
      this.#delayedCleanupTimeout = null;
    }
  }
  _startRenderPage(transparency, cacheKey) {
    const intentState = this._intentStates.get(cacheKey);
    if (!intentState) {
      return;
    }
    this._stats?.timeEnd("Page Request");
    intentState.displayReadyCapability?.resolve(transparency);
  }
  _renderPageChunk(operatorListChunk, intentState) {
    for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {
      intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);
      intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);
    }
    intentState.operatorList.lastChunk = operatorListChunk.lastChunk;
    intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots;
    for (const internalRenderTask of intentState.renderTasks) {
      internalRenderTask.operatorListChanged();
    }
    if (operatorListChunk.lastChunk) {
      this.#tryCleanup(true);
    }
  }
  _pumpOperatorList({
    renderingIntent,
    cacheKey,
    annotationStorageSerializable
  }) {
    const {
      map,
      transfers
    } = annotationStorageSerializable;
    const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", {
      pageIndex: this._pageIndex,
      intent: renderingIntent,
      cacheKey,
      annotationStorage: map
    }, transfers);
    const reader = readableStream.getReader();
    const intentState = this._intentStates.get(cacheKey);
    intentState.streamReader = reader;
    const pump = () => {
      reader.read().then(({
        value,
        done
      }) => {
        if (done) {
          intentState.streamReader = null;
          return;
        }
        if (this._transport.destroyed) {
          return;
        }
        this._renderPageChunk(value, intentState);
        pump();
      }, reason => {
        intentState.streamReader = null;
        if (this._transport.destroyed) {
          return;
        }
        if (intentState.operatorList) {
          intentState.operatorList.lastChunk = true;
          for (const internalRenderTask of intentState.renderTasks) {
            internalRenderTask.operatorListChanged();
          }
          this.#tryCleanup(true);
        }
        if (intentState.displayReadyCapability) {
          intentState.displayReadyCapability.reject(reason);
        } else if (intentState.opListReadCapability) {
          intentState.opListReadCapability.reject(reason);
        } else {
          throw reason;
        }
      });
    };
    pump();
  }
  _abortOperatorList({
    intentState,
    reason,
    force = false
  }) {
    if (!intentState.streamReader) {
      return;
    }
    if (intentState.streamReaderCancelTimeout) {
      clearTimeout(intentState.streamReaderCancelTimeout);
      intentState.streamReaderCancelTimeout = null;
    }
    if (!force) {
      if (intentState.renderTasks.size > 0) {
        return;
      }
      if (reason instanceof _display_utils.RenderingCancelledException) {
        let delay = RENDERING_CANCELLED_TIMEOUT;
        if (reason.extraDelay > 0 && reason.extraDelay < 1000) {
          delay += reason.extraDelay;
        }
        intentState.streamReaderCancelTimeout = setTimeout(() => {
          intentState.streamReaderCancelTimeout = null;
          this._abortOperatorList({
            intentState,
            reason,
            force: true
          });
        }, delay);
        return;
      }
    }
    intentState.streamReader.cancel(new _util.AbortException(reason.message)).catch(() => {});
    intentState.streamReader = null;
    if (this._transport.destroyed) {
      return;
    }
    for (const [curCacheKey, curIntentState] of this._intentStates) {
      if (curIntentState === intentState) {
        this._intentStates.delete(curCacheKey);
        break;
      }
    }
    this.cleanup();
  }
  get stats() {
    return this._stats;
  }
}
exports.PDFPageProxy = PDFPageProxy;
class LoopbackPort {
  #listeners = new Set();
  #deferred = Promise.resolve();
  postMessage(obj, transfer) {
    const event = {
      data: structuredClone(obj, transfer ? {
        transfer
      } : null)
    };
    this.#deferred.then(() => {
      for (const listener of this.#listeners) {
        listener.call(this, event);
      }
    });
  }
  addEventListener(name, listener) {
    this.#listeners.add(listener);
  }
  removeEventListener(name, listener) {
    this.#listeners.delete(listener);
  }
  terminate() {
    this.#listeners.clear();
  }
}
exports.LoopbackPort = LoopbackPort;
const PDFWorkerUtil = {
  isWorkerDisabled: false,
  fallbackWorkerSrc: null,
  fakeWorkerId: 0
};
exports.PDFWorkerUtil = PDFWorkerUtil;
{
  if (_util.isNodeJS && "function" === "function") {
    PDFWorkerUtil.isWorkerDisabled = true;
    PDFWorkerUtil.fallbackWorkerSrc = "./pdf.worker.js";
  } else if (typeof document === "object") {
    const pdfjsFilePath = document?.currentScript?.src;
    if (pdfjsFilePath) {
      PDFWorkerUtil.fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".worker$1$2");
    }
  }
  PDFWorkerUtil.isSameOrigin = function (baseUrl, otherUrl) {
    let base;
    try {
      base = new URL(baseUrl);
      if (!base.origin || base.origin === "null") {
        return false;
      }
    } catch {
      return false;
    }
    const other = new URL(otherUrl, base);
    return base.origin === other.origin;
  };
  PDFWorkerUtil.createCDNWrapper = function (url) {
    const wrapper = `importScripts("${url}");`;
    return URL.createObjectURL(new Blob([wrapper]));
  };
}
class PDFWorker {
  static #workerPorts;
  constructor({
    name = null,
    port = null,
    verbosity = (0, _util.getVerbosityLevel)()
  } = {}) {
    this.name = name;
    this.destroyed = false;
    this.verbosity = verbosity;
    this._readyCapability = new _util.PromiseCapability();
    this._port = null;
    this._webWorker = null;
    this._messageHandler = null;
    if (port) {
      if (PDFWorker.#workerPorts?.has(port)) {
        throw new Error("Cannot use more than one PDFWorker per port.");
      }
      (PDFWorker.#workerPorts ||= new WeakMap()).set(port, this);
      this._initializeFromPort(port);
      return;
    }
    this._initialize();
  }
  get promise() {
    return this._readyCapability.promise;
  }
  get port() {
    return this._port;
  }
  get messageHandler() {
    return this._messageHandler;
  }
  _initializeFromPort(port) {
    this._port = port;
    this._messageHandler = new _message_handler.MessageHandler("main", "worker", port);
    this._messageHandler.on("ready", function () {});
    this._readyCapability.resolve();
    this._messageHandler.send("configure", {
      verbosity: this.verbosity
    });
  }
  _initialize() {
    if (!PDFWorkerUtil.isWorkerDisabled && !PDFWorker._mainThreadWorkerMessageHandler) {
      let {
        workerSrc
      } = PDFWorker;
      try {
        if (!PDFWorkerUtil.isSameOrigin(window.location.href, workerSrc)) {
          workerSrc = PDFWorkerUtil.createCDNWrapper(new URL(workerSrc, window.location).href);
        }
        const worker = new Worker(workerSrc);
        const messageHandler = new _message_handler.MessageHandler("main", "worker", worker);
        const terminateEarly = () => {
          worker.removeEventListener("error", onWorkerError);
          messageHandler.destroy();
          worker.terminate();
          if (this.destroyed) {
            this._readyCapability.reject(new Error("Worker was destroyed"));
          } else {
            this._setupFakeWorker();
          }
        };
        const onWorkerError = () => {
          if (!this._webWorker) {
            terminateEarly();
          }
        };
        worker.addEventListener("error", onWorkerError);
        messageHandler.on("test", data => {
          worker.removeEventListener("error", onWorkerError);
          if (this.destroyed) {
            terminateEarly();
            return;
          }
          if (data) {
            this._messageHandler = messageHandler;
            this._port = worker;
            this._webWorker = worker;
            this._readyCapability.resolve();
            messageHandler.send("configure", {
              verbosity: this.verbosity
            });
          } else {
            this._setupFakeWorker();
            messageHandler.destroy();
            worker.terminate();
          }
        });
        messageHandler.on("ready", data => {
          worker.removeEventListener("error", onWorkerError);
          if (this.destroyed) {
            terminateEarly();
            return;
          }
          try {
            sendTest();
          } catch {
            this._setupFakeWorker();
          }
        });
        const sendTest = () => {
          const testObj = new Uint8Array();
          messageHandler.send("test", testObj, [testObj.buffer]);
        };
        sendTest();
        return;
      } catch {
        (0, _util.info)("The worker has been disabled.");
      }
    }
    this._setupFakeWorker();
  }
  _setupFakeWorker() {
    if (!PDFWorkerUtil.isWorkerDisabled) {
      (0, _util.warn)("Setting up fake worker.");
      PDFWorkerUtil.isWorkerDisabled = true;
    }
    PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => {
      if (this.destroyed) {
        this._readyCapability.reject(new Error("Worker was destroyed"));
        return;
      }
      const port = new LoopbackPort();
      this._port = port;
      const id = `fake${PDFWorkerUtil.fakeWorkerId++}`;
      const workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port);
      WorkerMessageHandler.setup(workerHandler, port);
      const messageHandler = new _message_handler.MessageHandler(id, id + "_worker", port);
      this._messageHandler = messageHandler;
      this._readyCapability.resolve();
      messageHandler.send("configure", {
        verbosity: this.verbosity
      });
    }).catch(reason => {
      this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`));
    });
  }
  destroy() {
    this.destroyed = true;
    if (this._webWorker) {
      this._webWorker.terminate();
      this._webWorker = null;
    }
    PDFWorker.#workerPorts?.delete(this._port);
    this._port = null;
    if (this._messageHandler) {
      this._messageHandler.destroy();
      this._messageHandler = null;
    }
  }
  static fromPort(params) {
    if (!params?.port) {
      throw new Error("PDFWorker.fromPort - invalid method signature.");
    }
    const cachedPort = this.#workerPorts?.get(params.port);
    if (cachedPort) {
      if (cachedPort._pendingDestroy) {
        throw new Error("PDFWorker.fromPort - the worker is being destroyed.\n" + "Please remember to await `PDFDocumentLoadingTask.destroy()`-calls.");
      }
      return cachedPort;
    }
    return new PDFWorker(params);
  }
  static get workerSrc() {
    if (_worker_options.GlobalWorkerOptions.workerSrc) {
      return _worker_options.GlobalWorkerOptions.workerSrc;
    }
    if (PDFWorkerUtil.fallbackWorkerSrc !== null) {
      if (!_util.isNodeJS) {
        (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.');
      }
      return PDFWorkerUtil.fallbackWorkerSrc;
    }
    throw new Error('No "GlobalWorkerOptions.workerSrc" specified.');
  }
  static get _mainThreadWorkerMessageHandler() {
    try {
      return globalThis.pdfjsWorker?.WorkerMessageHandler || null;
    } catch {
      return null;
    }
  }
  static get _setupFakeWorkerGlobal() {
    const loader = async () => {
      const mainWorkerMessageHandler = this._mainThreadWorkerMessageHandler;
      if (mainWorkerMessageHandler) {
        return mainWorkerMessageHandler;
      }
      if (_util.isNodeJS && "function" === "function") {
        const worker = eval("require")(this.workerSrc);
        return worker.WorkerMessageHandler;
      }
      await (0, _display_utils.loadScript)(this.workerSrc);
      return window.pdfjsWorker.WorkerMessageHandler;
    };
    return (0, _util.shadow)(this, "_setupFakeWorkerGlobal", loader());
  }
}
exports.PDFWorker = PDFWorker;
class WorkerTransport {
  #methodPromises = new Map();
  #pageCache = new Map();
  #pagePromises = new Map();
  #passwordCapability = null;
  constructor(messageHandler, loadingTask, networkStream, params, factory) {
    this.messageHandler = messageHandler;
    this.loadingTask = loadingTask;
    this.commonObjs = new PDFObjects();
    this.fontLoader = new _font_loader.FontLoader({
      ownerDocument: params.ownerDocument,
      styleElement: params.styleElement
    });
    this._params = params;
    this.canvasFactory = factory.canvasFactory;
    this.filterFactory = factory.filterFactory;
    this.cMapReaderFactory = factory.cMapReaderFactory;
    this.standardFontDataFactory = factory.standardFontDataFactory;
    this.destroyed = false;
    this.destroyCapability = null;
    this._networkStream = networkStream;
    this._fullReader = null;
    this._lastProgress = null;
    this.downloadInfoCapability = new _util.PromiseCapability();
    this.setupMessageHandler();
  }
  #cacheSimpleMethod(name, data = null) {
    const cachedPromise = this.#methodPromises.get(name);
    if (cachedPromise) {
      return cachedPromise;
    }
    const promise = this.messageHandler.sendWithPromise(name, data);
    this.#methodPromises.set(name, promise);
    return promise;
  }
  get annotationStorage() {
    return (0, _util.shadow)(this, "annotationStorage", new _annotation_storage.AnnotationStorage());
  }
  getRenderingIntent(intent, annotationMode = _util.AnnotationMode.ENABLE, printAnnotationStorage = null, isOpList = false) {
    let renderingIntent = _util.RenderingIntentFlag.DISPLAY;
    let annotationStorageSerializable = _annotation_storage.SerializableEmpty;
    switch (intent) {
      case "any":
        renderingIntent = _util.RenderingIntentFlag.ANY;
        break;
      case "display":
        break;
      case "print":
        renderingIntent = _util.RenderingIntentFlag.PRINT;
        break;
      default:
        (0, _util.warn)(`getRenderingIntent - invalid intent: ${intent}`);
    }
    switch (annotationMode) {
      case _util.AnnotationMode.DISABLE:
        renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_DISABLE;
        break;
      case _util.AnnotationMode.ENABLE:
        break;
      case _util.AnnotationMode.ENABLE_FORMS:
        renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_FORMS;
        break;
      case _util.AnnotationMode.ENABLE_STORAGE:
        renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_STORAGE;
        const annotationStorage = renderingIntent & _util.RenderingIntentFlag.PRINT && printAnnotationStorage instanceof _annotation_storage.PrintAnnotationStorage ? printAnnotationStorage : this.annotationStorage;
        annotationStorageSerializable = annotationStorage.serializable;
        break;
      default:
        (0, _util.warn)(`getRenderingIntent - invalid annotationMode: ${annotationMode}`);
    }
    if (isOpList) {
      renderingIntent += _util.RenderingIntentFlag.OPLIST;
    }
    return {
      renderingIntent,
      cacheKey: `${renderingIntent}_${annotationStorageSerializable.hash}`,
      annotationStorageSerializable
    };
  }
  destroy() {
    if (this.destroyCapability) {
      return this.destroyCapability.promise;
    }
    this.destroyed = true;
    this.destroyCapability = new _util.PromiseCapability();
    this.#passwordCapability?.reject(new Error("Worker was destroyed during onPassword callback"));
    const waitOn = [];
    for (const page of this.#pageCache.values()) {
      waitOn.push(page._destroy());
    }
    this.#pageCache.clear();
    this.#pagePromises.clear();
    if (this.hasOwnProperty("annotationStorage")) {
      this.annotationStorage.resetModified();
    }
    const terminated = this.messageHandler.sendWithPromise("Terminate", null);
    waitOn.push(terminated);
    Promise.all(waitOn).then(() => {
      this.commonObjs.clear();
      this.fontLoader.clear();
      this.#methodPromises.clear();
      this.filterFactory.destroy();
      this._networkStream?.cancelAllRequests(new _util.AbortException("Worker was terminated."));
      if (this.messageHandler) {
        this.messageHandler.destroy();
        this.messageHandler = null;
      }
      this.destroyCapability.resolve();
    }, this.destroyCapability.reject);
    return this.destroyCapability.promise;
  }
  setupMessageHandler() {
    const {
      messageHandler,
      loadingTask
    } = this;
    messageHandler.on("GetReader", (data, sink) => {
      (0, _util.assert)(this._networkStream, "GetReader - no `IPDFStream` instance available.");
      this._fullReader = this._networkStream.getFullReader();
      this._fullReader.onProgress = evt => {
        this._lastProgress = {
          loaded: evt.loaded,
          total: evt.total
        };
      };
      sink.onPull = () => {
        this._fullReader.read().then(function ({
          value,
          done
        }) {
          if (done) {
            sink.close();
            return;
          }
          (0, _util.assert)(value instanceof ArrayBuffer, "GetReader - expected an ArrayBuffer.");
          sink.enqueue(new Uint8Array(value), 1, [value]);
        }).catch(reason => {
          sink.error(reason);
        });
      };
      sink.onCancel = reason => {
        this._fullReader.cancel(reason);
        sink.ready.catch(readyReason => {
          if (this.destroyed) {
            return;
          }
          throw readyReason;
        });
      };
    });
    messageHandler.on("ReaderHeadersReady", data => {
      const headersCapability = new _util.PromiseCapability();
      const fullReader = this._fullReader;
      fullReader.headersReady.then(() => {
        if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {
          if (this._lastProgress) {
            loadingTask.onProgress?.(this._lastProgress);
          }
          fullReader.onProgress = evt => {
            loadingTask.onProgress?.({
              loaded: evt.loaded,
              total: evt.total
            });
          };
        }
        headersCapability.resolve({
          isStreamingSupported: fullReader.isStreamingSupported,
          isRangeSupported: fullReader.isRangeSupported,
          contentLength: fullReader.contentLength
        });
      }, headersCapability.reject);
      return headersCapability.promise;
    });
    messageHandler.on("GetRangeReader", (data, sink) => {
      (0, _util.assert)(this._networkStream, "GetRangeReader - no `IPDFStream` instance available.");
      const rangeReader = this._networkStream.getRangeReader(data.begin, data.end);
      if (!rangeReader) {
        sink.close();
        return;
      }
      sink.onPull = () => {
        rangeReader.read().then(function ({
          value,
          done
        }) {
          if (done) {
            sink.close();
            return;
          }
          (0, _util.assert)(value instanceof ArrayBuffer, "GetRangeReader - expected an ArrayBuffer.");
          sink.enqueue(new Uint8Array(value), 1, [value]);
        }).catch(reason => {
          sink.error(reason);
        });
      };
      sink.onCancel = reason => {
        rangeReader.cancel(reason);
        sink.ready.catch(readyReason => {
          if (this.destroyed) {
            return;
          }
          throw readyReason;
        });
      };
    });
    messageHandler.on("GetDoc", ({
      pdfInfo
    }) => {
      this._numPages = pdfInfo.numPages;
      this._htmlForXfa = pdfInfo.htmlForXfa;
      delete pdfInfo.htmlForXfa;
      loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this));
    });
    messageHandler.on("DocException", function (ex) {
      let reason;
      switch (ex.name) {
        case "PasswordException":
          reason = new _util.PasswordException(ex.message, ex.code);
          break;
        case "InvalidPDFException":
          reason = new _util.InvalidPDFException(ex.message);
          break;
        case "MissingPDFException":
          reason = new _util.MissingPDFException(ex.message);
          break;
        case "UnexpectedResponseException":
          reason = new _util.UnexpectedResponseException(ex.message, ex.status);
          break;
        case "UnknownErrorException":
          reason = new _util.UnknownErrorException(ex.message, ex.details);
          break;
        default:
          (0, _util.unreachable)("DocException - expected a valid Error.");
      }
      loadingTask._capability.reject(reason);
    });
    messageHandler.on("PasswordRequest", exception => {
      this.#passwordCapability = new _util.PromiseCapability();
      if (loadingTask.onPassword) {
        const updatePassword = password => {
          if (password instanceof Error) {
            this.#passwordCapability.reject(password);
          } else {
            this.#passwordCapability.resolve({
              password
            });
          }
        };
        try {
          loadingTask.onPassword(updatePassword, exception.code);
        } catch (ex) {
          this.#passwordCapability.reject(ex);
        }
      } else {
        this.#passwordCapability.reject(new _util.PasswordException(exception.message, exception.code));
      }
      return this.#passwordCapability.promise;
    });
    messageHandler.on("DataLoaded", data => {
      loadingTask.onProgress?.({
        loaded: data.length,
        total: data.length
      });
      this.downloadInfoCapability.resolve(data);
    });
    messageHandler.on("StartRenderPage", data => {
      if (this.destroyed) {
        return;
      }
      const page = this.#pageCache.get(data.pageIndex);
      page._startRenderPage(data.transparency, data.cacheKey);
    });
    messageHandler.on("commonobj", ([id, type, exportedData]) => {
      if (this.destroyed) {
        return;
      }
      if (this.commonObjs.has(id)) {
        return;
      }
      switch (type) {
        case "Font":
          const params = this._params;
          if ("error" in exportedData) {
            const exportedError = exportedData.error;
            (0, _util.warn)(`Error during font loading: ${exportedError}`);
            this.commonObjs.resolve(id, exportedError);
            break;
          }
          const inspectFont = params.pdfBug && globalThis.FontInspector?.enabled ? (font, url) => globalThis.FontInspector.fontAdded(font, url) : null;
          const font = new _font_loader.FontFaceObject(exportedData, {
            isEvalSupported: params.isEvalSupported,
            disableFontFace: params.disableFontFace,
            ignoreErrors: params.ignoreErrors,
            inspectFont
          });
          this.fontLoader.bind(font).catch(reason => {
            return messageHandler.sendWithPromise("FontFallback", {
              id
            });
          }).finally(() => {
            if (!params.fontExtraProperties && font.data) {
              font.data = null;
            }
            this.commonObjs.resolve(id, font);
          });
          break;
        case "FontPath":
        case "Image":
        case "Pattern":
          this.commonObjs.resolve(id, exportedData);
          break;
        default:
          throw new Error(`Got unknown common object type ${type}`);
      }
    });
    messageHandler.on("obj", ([id, pageIndex, type, imageData]) => {
      if (this.destroyed) {
        return;
      }
      const pageProxy = this.#pageCache.get(pageIndex);
      if (pageProxy.objs.has(id)) {
        return;
      }
      switch (type) {
        case "Image":
          pageProxy.objs.resolve(id, imageData);
          if (imageData) {
            let length;
            if (imageData.bitmap) {
              const {
                width,
                height
              } = imageData;
              length = width * height * 4;
            } else {
              length = imageData.data?.length || 0;
            }
            if (length > _util.MAX_IMAGE_SIZE_TO_CACHE) {
              pageProxy._maybeCleanupAfterRender = true;
            }
          }
          break;
        case "Pattern":
          pageProxy.objs.resolve(id, imageData);
          break;
        default:
          throw new Error(`Got unknown object type ${type}`);
      }
    });
    messageHandler.on("DocProgress", data => {
      if (this.destroyed) {
        return;
      }
      loadingTask.onProgress?.({
        loaded: data.loaded,
        total: data.total
      });
    });
    messageHandler.on("FetchBuiltInCMap", data => {
      if (this.destroyed) {
        return Promise.reject(new Error("Worker was destroyed."));
      }
      if (!this.cMapReaderFactory) {
        return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter."));
      }
      return this.cMapReaderFactory.fetch(data);
    });
    messageHandler.on("FetchStandardFontData", data => {
      if (this.destroyed) {
        return Promise.reject(new Error("Worker was destroyed."));
      }
      if (!this.standardFontDataFactory) {
        return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter."));
      }
      return this.standardFontDataFactory.fetch(data);
    });
  }
  getData() {
    return this.messageHandler.sendWithPromise("GetData", null);
  }
  saveDocument() {
    if (this.annotationStorage.size <= 0) {
      (0, _util.warn)("saveDocument called while `annotationStorage` is empty, " + "please use the getData-method instead.");
    }
    const {
      map,
      transfers
    } = this.annotationStorage.serializable;
    return this.messageHandler.sendWithPromise("SaveDocument", {
      isPureXfa: !!this._htmlForXfa,
      numPages: this._numPages,
      annotationStorage: map,
      filename: this._fullReader?.filename ?? null
    }, transfers).finally(() => {
      this.annotationStorage.resetModified();
    });
  }
  getPage(pageNumber) {
    if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) {
      return Promise.reject(new Error("Invalid page request."));
    }
    const pageIndex = pageNumber - 1,
      cachedPromise = this.#pagePromises.get(pageIndex);
    if (cachedPromise) {
      return cachedPromise;
    }
    const promise = this.messageHandler.sendWithPromise("GetPage", {
      pageIndex
    }).then(pageInfo => {
      if (this.destroyed) {
        throw new Error("Transport destroyed");
      }
      const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug);
      this.#pageCache.set(pageIndex, page);
      return page;
    });
    this.#pagePromises.set(pageIndex, promise);
    return promise;
  }
  getPageIndex(ref) {
    if (typeof ref !== "object" || ref === null || !Number.isInteger(ref.num) || ref.num < 0 || !Number.isInteger(ref.gen) || ref.gen < 0) {
      return Promise.reject(new Error("Invalid pageIndex request."));
    }
    return this.messageHandler.sendWithPromise("GetPageIndex", {
      num: ref.num,
      gen: ref.gen
    });
  }
  getAnnotations(pageIndex, intent) {
    return this.messageHandler.sendWithPromise("GetAnnotations", {
      pageIndex,
      intent
    });
  }
  getFieldObjects() {
    return this.#cacheSimpleMethod("GetFieldObjects");
  }
  hasJSActions() {
    return this.#cacheSimpleMethod("HasJSActions");
  }
  getCalculationOrderIds() {
    return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null);
  }
  getDestinations() {
    return this.messageHandler.sendWithPromise("GetDestinations", null);
  }
  getDestination(id) {
    if (typeof id !== "string") {
      return Promise.reject(new Error("Invalid destination request."));
    }
    return this.messageHandler.sendWithPromise("GetDestination", {
      id
    });
  }
  getPageLabels() {
    return this.messageHandler.sendWithPromise("GetPageLabels", null);
  }
  getPageLayout() {
    return this.messageHandler.sendWithPromise("GetPageLayout", null);
  }
  getPageMode() {
    return this.messageHandler.sendWithPromise("GetPageMode", null);
  }
  getViewerPreferences() {
    return this.messageHandler.sendWithPromise("GetViewerPreferences", null);
  }
  getOpenAction() {
    return this.messageHandler.sendWithPromise("GetOpenAction", null);
  }
  getAttachments() {
    return this.messageHandler.sendWithPromise("GetAttachments", null);
  }
  getDocJSActions() {
    return this.#cacheSimpleMethod("GetDocJSActions");
  }
  getPageJSActions(pageIndex) {
    return this.messageHandler.sendWithPromise("GetPageJSActions", {
      pageIndex
    });
  }
  getStructTree(pageIndex) {
    return this.messageHandler.sendWithPromise("GetStructTree", {
      pageIndex
    });
  }
  getOutline() {
    return this.messageHandler.sendWithPromise("GetOutline", null);
  }
  getOptionalContentConfig() {
    return this.messageHandler.sendWithPromise("GetOptionalContentConfig", null).then(results => {
      return new _optional_content_config.OptionalContentConfig(results);
    });
  }
  getPermissions() {
    return this.messageHandler.sendWithPromise("GetPermissions", null);
  }
  getMetadata() {
    const name = "GetMetadata",
      cachedPromise = this.#methodPromises.get(name);
    if (cachedPromise) {
      return cachedPromise;
    }
    const promise = this.messageHandler.sendWithPromise(name, null).then(results => {
      return {
        info: results[0],
        metadata: results[1] ? new _metadata.Metadata(results[1]) : null,
        contentDispositionFilename: this._fullReader?.filename ?? null,
        contentLength: this._fullReader?.contentLength ?? null
      };
    });
    this.#methodPromises.set(name, promise);
    return promise;
  }
  getMarkInfo() {
    return this.messageHandler.sendWithPromise("GetMarkInfo", null);
  }
  async startCleanup(keepLoadedFonts = false) {
    if (this.destroyed) {
      return;
    }
    await this.messageHandler.sendWithPromise("Cleanup", null);
    for (const page of this.#pageCache.values()) {
      const cleanupSuccessful = page.cleanup();
      if (!cleanupSuccessful) {
        throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`);
      }
    }
    this.commonObjs.clear();
    if (!keepLoadedFonts) {
      this.fontLoader.clear();
    }
    this.#methodPromises.clear();
    this.filterFactory.destroy(true);
  }
  get loadingParams() {
    const {
      disableAutoFetch,
      enableXfa
    } = this._params;
    return (0, _util.shadow)(this, "loadingParams", {
      disableAutoFetch,
      enableXfa
    });
  }
}
class PDFObjects {
  #objs = Object.create(null);
  #ensureObj(objId) {
    return this.#objs[objId] ||= {
      capability: new _util.PromiseCapability(),
      data: null
    };
  }
  get(objId, callback = null) {
    if (callback) {
      const obj = this.#ensureObj(objId);
      obj.capability.promise.then(() => callback(obj.data));
      return null;
    }
    const obj = this.#objs[objId];
    if (!obj?.capability.settled) {
      throw new Error(`Requesting object that isn't resolved yet ${objId}.`);
    }
    return obj.data;
  }
  has(objId) {
    const obj = this.#objs[objId];
    return obj?.capability.settled || false;
  }
  resolve(objId, data = null) {
    const obj = this.#ensureObj(objId);
    obj.data = data;
    obj.capability.resolve();
  }
  clear() {
    for (const objId in this.#objs) {
      const {
        data
      } = this.#objs[objId];
      data?.bitmap?.close();
    }
    this.#objs = Object.create(null);
  }
}
class RenderTask {
  #internalRenderTask = null;
  constructor(internalRenderTask) {
    this.#internalRenderTask = internalRenderTask;
    this.onContinue = null;
  }
  get promise() {
    return this.#internalRenderTask.capability.promise;
  }
  cancel(extraDelay = 0) {
    this.#internalRenderTask.cancel(null, extraDelay);
  }
  get separateAnnots() {
    const {
      separateAnnots
    } = this.#internalRenderTask.operatorList;
    if (!separateAnnots) {
      return false;
    }
    const {
      annotationCanvasMap
    } = this.#internalRenderTask;
    return separateAnnots.form || separateAnnots.canvas && annotationCanvasMap?.size > 0;
  }
}
exports.RenderTask = RenderTask;
class InternalRenderTask {
  static #canvasInUse = new WeakSet();
  constructor({
    callback,
    params,
    objs,
    commonObjs,
    annotationCanvasMap,
    operatorList,
    pageIndex,
    canvasFactory,
    filterFactory,
    useRequestAnimationFrame = false,
    pdfBug = false,
    pageColors = null
  }) {
    this.callback = callback;
    this.params = params;
    this.objs = objs;
    this.commonObjs = commonObjs;
    this.annotationCanvasMap = annotationCanvasMap;
    this.operatorListIdx = null;
    this.operatorList = operatorList;
    this._pageIndex = pageIndex;
    this.canvasFactory = canvasFactory;
    this.filterFactory = filterFactory;
    this._pdfBug = pdfBug;
    this.pageColors = pageColors;
    this.running = false;
    this.graphicsReadyCallback = null;
    this.graphicsReady = false;
    this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined";
    this.cancelled = false;
    this.capability = new _util.PromiseCapability();
    this.task = new RenderTask(this);
    this._cancelBound = this.cancel.bind(this);
    this._continueBound = this._continue.bind(this);
    this._scheduleNextBound = this._scheduleNext.bind(this);
    this._nextBound = this._next.bind(this);
    this._canvas = params.canvasContext.canvas;
  }
  get completed() {
    return this.capability.promise.catch(function () {});
  }
  initializeGraphics({
    transparency = false,
    optionalContentConfig
  }) {
    if (this.cancelled) {
      return;
    }
    if (this._canvas) {
      if (InternalRenderTask.#canvasInUse.has(this._canvas)) {
        throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed.");
      }
      InternalRenderTask.#canvasInUse.add(this._canvas);
    }
    if (this._pdfBug && globalThis.StepperManager?.enabled) {
      this.stepper = globalThis.StepperManager.create(this._pageIndex);
      this.stepper.init(this.operatorList);
      this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();
    }
    const {
      canvasContext,
      viewport,
      transform,
      background
    } = this.params;
    this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {
      optionalContentConfig
    }, this.annotationCanvasMap, this.pageColors);
    this.gfx.beginDrawing({
      transform,
      viewport,
      transparency,
      background
    });
    this.operatorListIdx = 0;
    this.graphicsReady = true;
    this.graphicsReadyCallback?.();
  }
  cancel(error = null, extraDelay = 0) {
    this.running = false;
    this.cancelled = true;
    this.gfx?.endDrawing();
    InternalRenderTask.#canvasInUse.delete(this._canvas);
    this.callback(error || new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, extraDelay));
  }
  operatorListChanged() {
    if (!this.graphicsReady) {
      this.graphicsReadyCallback ||= this._continueBound;
      return;
    }
    this.stepper?.updateOperatorList(this.operatorList);
    if (this.running) {
      return;
    }
    this._continue();
  }
  _continue() {
    this.running = true;
    if (this.cancelled) {
      return;
    }
    if (this.task.onContinue) {
      this.task.onContinue(this._scheduleNextBound);
    } else {
      this._scheduleNext();
    }
  }
  _scheduleNext() {
    if (this._useRequestAnimationFrame) {
      window.requestAnimationFrame(() => {
        this._nextBound().catch(this._cancelBound);
      });
    } else {
      Promise.resolve().then(this._nextBound).catch(this._cancelBound);
    }
  }
  async _next() {
    if (this.cancelled) {
      return;
    }
    this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper);
    if (this.operatorListIdx === this.operatorList.argsArray.length) {
      this.running = false;
      if (this.operatorList.lastChunk) {
        this.gfx.endDrawing();
        InternalRenderTask.#canvasInUse.delete(this._canvas);
        this.callback();
      }
    }
  }
}
const version = '3.11.174';
exports.version = version;
const build = 'ce8716743';
exports.build = build;

/***/ }),
/* 3 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.SerializableEmpty = exports.PrintAnnotationStorage = exports.AnnotationStorage = void 0;
var _util = __w_pdfjs_require__(1);
var _editor = __w_pdfjs_require__(4);
var _murmurhash = __w_pdfjs_require__(8);
const SerializableEmpty = Object.freeze({
  map: null,
  hash: "",
  transfers: undefined
});
exports.SerializableEmpty = SerializableEmpty;
class AnnotationStorage {
  #modified = false;
  #storage = new Map();
  constructor() {
    this.onSetModified = null;
    this.onResetModified = null;
    this.onAnnotationEditor = null;
  }
  getValue(key, defaultValue) {
    const value = this.#storage.get(key);
    if (value === undefined) {
      return defaultValue;
    }
    return Object.assign(defaultValue, value);
  }
  getRawValue(key) {
    return this.#storage.get(key);
  }
  remove(key) {
    this.#storage.delete(key);
    if (this.#storage.size === 0) {
      this.resetModified();
    }
    if (typeof this.onAnnotationEditor === "function") {
      for (const value of this.#storage.values()) {
        if (value instanceof _editor.AnnotationEditor) {
          return;
        }
      }
      this.onAnnotationEditor(null);
    }
  }
  setValue(key, value) {
    const obj = this.#storage.get(key);
    let modified = false;
    if (obj !== undefined) {
      for (const [entry, val] of Object.entries(value)) {
        if (obj[entry] !== val) {
          modified = true;
          obj[entry] = val;
        }
      }
    } else {
      modified = true;
      this.#storage.set(key, value);
    }
    if (modified) {
      this.#setModified();
    }
    if (value instanceof _editor.AnnotationEditor && typeof this.onAnnotationEditor === "function") {
      this.onAnnotationEditor(value.constructor._type);
    }
  }
  has(key) {
    return this.#storage.has(key);
  }
  getAll() {
    return this.#storage.size > 0 ? (0, _util.objectFromMap)(this.#storage) : null;
  }
  setAll(obj) {
    for (const [key, val] of Object.entries(obj)) {
      this.setValue(key, val);
    }
  }
  get size() {
    return this.#storage.size;
  }
  #setModified() {
    if (!this.#modified) {
      this.#modified = true;
      if (typeof this.onSetModified === "function") {
        this.onSetModified();
      }
    }
  }
  resetModified() {
    if (this.#modified) {
      this.#modified = false;
      if (typeof this.onResetModified === "function") {
        this.onResetModified();
      }
    }
  }
  get print() {
    return new PrintAnnotationStorage(this);
  }
  get serializable() {
    if (this.#storage.size === 0) {
      return SerializableEmpty;
    }
    const map = new Map(),
      hash = new _murmurhash.MurmurHash3_64(),
      transfers = [];
    const context = Object.create(null);
    let hasBitmap = false;
    for (const [key, val] of this.#storage) {
      const serialized = val instanceof _editor.AnnotationEditor ? val.serialize(false, context) : val;
      if (serialized) {
        map.set(key, serialized);
        hash.update(`${key}:${JSON.stringify(serialized)}`);
        hasBitmap ||= !!serialized.bitmap;
      }
    }
    if (hasBitmap) {
      for (const value of map.values()) {
        if (value.bitmap) {
          transfers.push(value.bitmap);
        }
      }
    }
    return map.size > 0 ? {
      map,
      hash: hash.hexdigest(),
      transfers
    } : SerializableEmpty;
  }
}
exports.AnnotationStorage = AnnotationStorage;
class PrintAnnotationStorage extends AnnotationStorage {
  #serializable;
  constructor(parent) {
    super();
    const {
      map,
      hash,
      transfers
    } = parent.serializable;
    const clone = structuredClone(map, transfers ? {
      transfer: transfers
    } : null);
    this.#serializable = {
      map: clone,
      hash,
      transfers
    };
  }
  get print() {
    (0, _util.unreachable)("Should not call PrintAnnotationStorage.print");
  }
  get serializable() {
    return this.#serializable;
  }
}
exports.PrintAnnotationStorage = PrintAnnotationStorage;

/***/ }),
/* 4 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.AnnotationEditor = void 0;
var _tools = __w_pdfjs_require__(5);
var _util = __w_pdfjs_require__(1);
var _display_utils = __w_pdfjs_require__(6);
class AnnotationEditor {
  #altText = "";
  #altTextDecorative = false;
  #altTextButton = null;
  #altTextTooltip = null;
  #altTextTooltipTimeout = null;
  #keepAspectRatio = false;
  #resizersDiv = null;
  #boundFocusin = this.focusin.bind(this);
  #boundFocusout = this.focusout.bind(this);
  #hasBeenClicked = false;
  #isEditing = false;
  #isInEditMode = false;
  _initialOptions = Object.create(null);
  _uiManager = null;
  _focusEventsAllowed = true;
  _l10nPromise = null;
  #isDraggable = false;
  #zIndex = AnnotationEditor._zIndex++;
  static _borderLineWidth = -1;
  static _colorManager = new _tools.ColorManager();
  static _zIndex = 1;
  static SMALL_EDITOR_SIZE = 0;
  constructor(parameters) {
    if (this.constructor === AnnotationEditor) {
      (0, _util.unreachable)("Cannot initialize AnnotationEditor.");
    }
    this.parent = parameters.parent;
    this.id = parameters.id;
    this.width = this.height = null;
    this.pageIndex = parameters.parent.pageIndex;
    this.name = parameters.name;
    this.div = null;
    this._uiManager = parameters.uiManager;
    this.annotationElementId = null;
    this._willKeepAspectRatio = false;
    this._initialOptions.isCentered = parameters.isCentered;
    this._structTreeParentId = null;
    const {
      rotation,
      rawDims: {
        pageWidth,
        pageHeight,
        pageX,
        pageY
      }
    } = this.parent.viewport;
    this.rotation = rotation;
    this.pageRotation = (360 + rotation - this._uiManager.viewParameters.rotation) % 360;
    this.pageDimensions = [pageWidth, pageHeight];
    this.pageTranslation = [pageX, pageY];
    const [width, height] = this.parentDimensions;
    this.x = parameters.x / width;
    this.y = parameters.y / height;
    this.isAttachedToDOM = false;
    this.deleted = false;
  }
  get editorType() {
    return Object.getPrototypeOf(this).constructor._type;
  }
  static get _defaultLineColor() {
    return (0, _util.shadow)(this, "_defaultLineColor", this._colorManager.getHexCode("CanvasText"));
  }
  static deleteAnnotationElement(editor) {
    const fakeEditor = new FakeEditor({
      id: editor.parent.getNextId(),
      parent: editor.parent,
      uiManager: editor._uiManager
    });
    fakeEditor.annotationElementId = editor.annotationElementId;
    fakeEditor.deleted = true;
    fakeEditor._uiManager.addToAnnotationStorage(fakeEditor);
  }
  static initialize(l10n, options = null) {
    AnnotationEditor._l10nPromise ||= new Map(["editor_alt_text_button_label", "editor_alt_text_edit_button_label", "editor_alt_text_decorative_tooltip"].map(str => [str, l10n.get(str)]));
    if (options?.strings) {
      for (const str of options.strings) {
        AnnotationEditor._l10nPromise.set(str, l10n.get(str));
      }
    }
    if (AnnotationEditor._borderLineWidth !== -1) {
      return;
    }
    const style = getComputedStyle(document.documentElement);
    AnnotationEditor._borderLineWidth = parseFloat(style.getPropertyValue("--outline-width")) || 0;
  }
  static updateDefaultParams(_type, _value) {}
  static get defaultPropertiesToUpdate() {
    return [];
  }
  static isHandlingMimeForPasting(mime) {
    return false;
  }
  static paste(item, parent) {
    (0, _util.unreachable)("Not implemented");
  }
  get propertiesToUpdate() {
    return [];
  }
  get _isDraggable() {
    return this.#isDraggable;
  }
  set _isDraggable(value) {
    this.#isDraggable = value;
    this.div?.classList.toggle("draggable", value);
  }
  center() {
    const [pageWidth, pageHeight] = this.pageDimensions;
    switch (this.parentRotation) {
      case 90:
        this.x -= this.height * pageHeight / (pageWidth * 2);
        this.y += this.width * pageWidth / (pageHeight * 2);
        break;
      case 180:
        this.x += this.width / 2;
        this.y += this.height / 2;
        break;
      case 270:
        this.x += this.height * pageHeight / (pageWidth * 2);
        this.y -= this.width * pageWidth / (pageHeight * 2);
        break;
      default:
        this.x -= this.width / 2;
        this.y -= this.height / 2;
        break;
    }
    this.fixAndSetPosition();
  }
  addCommands(params) {
    this._uiManager.addCommands(params);
  }
  get currentLayer() {
    return this._uiManager.currentLayer;
  }
  setInBackground() {
    this.div.style.zIndex = 0;
  }
  setInForeground() {
    this.div.style.zIndex = this.#zIndex;
  }
  setParent(parent) {
    if (parent !== null) {
      this.pageIndex = parent.pageIndex;
      this.pageDimensions = parent.pageDimensions;
    }
    this.parent = parent;
  }
  focusin(event) {
    if (!this._focusEventsAllowed) {
      return;
    }
    if (!this.#hasBeenClicked) {
      this.parent.setSelected(this);
    } else {
      this.#hasBeenClicked = false;
    }
  }
  focusout(event) {
    if (!this._focusEventsAllowed) {
      return;
    }
    if (!this.isAttachedToDOM) {
      return;
    }
    const target = event.relatedTarget;
    if (target?.closest(`#${this.id}`)) {
      return;
    }
    event.preventDefault();
    if (!this.parent?.isMultipleSelection) {
      this.commitOrRemove();
    }
  }
  commitOrRemove() {
    if (this.isEmpty()) {
      this.remove();
    } else {
      this.commit();
    }
  }
  commit() {
    this.addToAnnotationStorage();
  }
  addToAnnotationStorage() {
    this._uiManager.addToAnnotationStorage(this);
  }
  setAt(x, y, tx, ty) {
    const [width, height] = this.parentDimensions;
    [tx, ty] = this.screenToPageTranslation(tx, ty);
    this.x = (x + tx) / width;
    this.y = (y + ty) / height;
    this.fixAndSetPosition();
  }
  #translate([width, height], x, y) {
    [x, y] = this.screenToPageTranslation(x, y);
    this.x += x / width;
    this.y += y / height;
    this.fixAndSetPosition();
  }
  translate(x, y) {
    this.#translate(this.parentDimensions, x, y);
  }
  translateInPage(x, y) {
    this.#translate(this.pageDimensions, x, y);
    this.div.scrollIntoView({
      block: "nearest"
    });
  }
  drag(tx, ty) {
    const [parentWidth, parentHeight] = this.parentDimensions;
    this.x += tx / parentWidth;
    this.y += ty / parentHeight;
    if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) {
      const {
        x,
        y
      } = this.div.getBoundingClientRect();
      if (this.parent.findNewParent(this, x, y)) {
        this.x -= Math.floor(this.x);
        this.y -= Math.floor(this.y);
      }
    }
    let {
      x,
      y
    } = this;
    const [bx, by] = this.#getBaseTranslation();
    x += bx;
    y += by;
    this.div.style.left = `${(100 * x).toFixed(2)}%`;
    this.div.style.top = `${(100 * y).toFixed(2)}%`;
    this.div.scrollIntoView({
      block: "nearest"
    });
  }
  #getBaseTranslation() {
    const [parentWidth, parentHeight] = this.parentDimensions;
    const {
      _borderLineWidth
    } = AnnotationEditor;
    const x = _borderLineWidth / parentWidth;
    const y = _borderLineWidth / parentHeight;
    switch (this.rotation) {
      case 90:
        return [-x, y];
      case 180:
        return [x, y];
      case 270:
        return [x, -y];
      default:
        return [-x, -y];
    }
  }
  fixAndSetPosition() {
    const [pageWidth, pageHeight] = this.pageDimensions;
    let {
      x,
      y,
      width,
      height
    } = this;
    width *= pageWidth;
    height *= pageHeight;
    x *= pageWidth;
    y *= pageHeight;
    switch (this.rotation) {
      case 0:
        x = Math.max(0, Math.min(pageWidth - width, x));
        y = Math.max(0, Math.min(pageHeight - height, y));
        break;
      case 90:
        x = Math.max(0, Math.min(pageWidth - height, x));
        y = Math.min(pageHeight, Math.max(width, y));
        break;
      case 180:
        x = Math.min(pageWidth, Math.max(width, x));
        y = Math.min(pageHeight, Math.max(height, y));
        break;
      case 270:
        x = Math.min(pageWidth, Math.max(height, x));
        y = Math.max(0, Math.min(pageHeight - width, y));
        break;
    }
    this.x = x /= pageWidth;
    this.y = y /= pageHeight;
    const [bx, by] = this.#getBaseTranslation();
    x += bx;
    y += by;
    const {
      style
    } = this.div;
    style.left = `${(100 * x).toFixed(2)}%`;
    style.top = `${(100 * y).toFixed(2)}%`;
    this.moveInDOM();
  }
  static #rotatePoint(x, y, angle) {
    switch (angle) {
      case 90:
        return [y, -x];
      case 180:
        return [-x, -y];
      case 270:
        return [-y, x];
      default:
        return [x, y];
    }
  }
  screenToPageTranslation(x, y) {
    return AnnotationEditor.#rotatePoint(x, y, this.parentRotation);
  }
  pageTranslationToScreen(x, y) {
    return AnnotationEditor.#rotatePoint(x, y, 360 - this.parentRotation);
  }
  #getRotationMatrix(rotation) {
    switch (rotation) {
      case 90:
        {
          const [pageWidth, pageHeight] = this.pageDimensions;
          return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0];
        }
      case 180:
        return [-1, 0, 0, -1];
      case 270:
        {
          const [pageWidth, pageHeight] = this.pageDimensions;
          return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0];
        }
      default:
        return [1, 0, 0, 1];
    }
  }
  get parentScale() {
    return this._uiManager.viewParameters.realScale;
  }
  get parentRotation() {
    return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360;
  }
  get parentDimensions() {
    const {
      parentScale,
      pageDimensions: [pageWidth, pageHeight]
    } = this;
    const scaledWidth = pageWidth * parentScale;
    const scaledHeight = pageHeight * parentScale;
    return _util.FeatureTest.isCSSRoundSupported ? [Math.round(scaledWidth), Math.round(scaledHeight)] : [scaledWidth, scaledHeight];
  }
  setDims(width, height) {
    const [parentWidth, parentHeight] = this.parentDimensions;
    this.div.style.width = `${(100 * width / parentWidth).toFixed(2)}%`;
    if (!this.#keepAspectRatio) {
      this.div.style.height = `${(100 * height / parentHeight).toFixed(2)}%`;
    }
    this.#altTextButton?.classList.toggle("small", width < AnnotationEditor.SMALL_EDITOR_SIZE || height < AnnotationEditor.SMALL_EDITOR_SIZE);
  }
  fixDims() {
    const {
      style
    } = this.div;
    const {
      height,
      width
    } = style;
    const widthPercent = width.endsWith("%");
    const heightPercent = !this.#keepAspectRatio && height.endsWith("%");
    if (widthPercent && heightPercent) {
      return;
    }
    const [parentWidth, parentHeight] = this.parentDimensions;
    if (!widthPercent) {
      style.width = `${(100 * parseFloat(width) / parentWidth).toFixed(2)}%`;
    }
    if (!this.#keepAspectRatio && !heightPercent) {
      style.height = `${(100 * parseFloat(height) / parentHeight).toFixed(2)}%`;
    }
  }
  getInitialTranslation() {
    return [0, 0];
  }
  #createResizers() {
    if (this.#resizersDiv) {
      return;
    }
    this.#resizersDiv = document.createElement("div");
    this.#resizersDiv.classList.add("resizers");
    const classes = ["topLeft", "topRight", "bottomRight", "bottomLeft"];
    if (!this._willKeepAspectRatio) {
      classes.push("topMiddle", "middleRight", "bottomMiddle", "middleLeft");
    }
    for (const name of classes) {
      const div = document.createElement("div");
      this.#resizersDiv.append(div);
      div.classList.add("resizer", name);
      div.addEventListener("pointerdown", this.#resizerPointerdown.bind(this, name));
      div.addEventListener("contextmenu", _display_utils.noContextMenu);
    }
    this.div.prepend(this.#resizersDiv);
  }
  #resizerPointerdown(name, event) {
    event.preventDefault();
    const {
      isMac
    } = _util.FeatureTest.platform;
    if (event.button !== 0 || event.ctrlKey && isMac) {
      return;
    }
    const boundResizerPointermove = this.#resizerPointermove.bind(this, name);
    const savedDraggable = this._isDraggable;
    this._isDraggable = false;
    const pointerMoveOptions = {
      passive: true,
      capture: true
    };
    window.addEventListener("pointermove", boundResizerPointermove, pointerMoveOptions);
    const savedX = this.x;
    const savedY = this.y;
    const savedWidth = this.width;
    const savedHeight = this.height;
    const savedParentCursor = this.parent.div.style.cursor;
    const savedCursor = this.div.style.cursor;
    this.div.style.cursor = this.parent.div.style.cursor = window.getComputedStyle(event.target).cursor;
    const pointerUpCallback = () => {
      this._isDraggable = savedDraggable;
      window.removeEventListener("pointerup", pointerUpCallback);
      window.removeEventListener("blur", pointerUpCallback);
      window.removeEventListener("pointermove", boundResizerPointermove, pointerMoveOptions);
      this.parent.div.style.cursor = savedParentCursor;
      this.div.style.cursor = savedCursor;
      const newX = this.x;
      const newY = this.y;
      const newWidth = this.width;
      const newHeight = this.height;
      if (newX === savedX && newY === savedY && newWidth === savedWidth && newHeight === savedHeight) {
        return;
      }
      this.addCommands({
        cmd: () => {
          this.width = newWidth;
          this.height = newHeight;
          this.x = newX;
          this.y = newY;
          const [parentWidth, parentHeight] = this.parentDimensions;
          this.setDims(parentWidth * newWidth, parentHeight * newHeight);
          this.fixAndSetPosition();
        },
        undo: () => {
          this.width = savedWidth;
          this.height = savedHeight;
          this.x = savedX;
          this.y = savedY;
          const [parentWidth, parentHeight] = this.parentDimensions;
          this.setDims(parentWidth * savedWidth, parentHeight * savedHeight);
          this.fixAndSetPosition();
        },
        mustExec: true
      });
    };
    window.addEventListener("pointerup", pointerUpCallback);
    window.addEventListener("blur", pointerUpCallback);
  }
  #resizerPointermove(name, event) {
    const [parentWidth, parentHeight] = this.parentDimensions;
    const savedX = this.x;
    const savedY = this.y;
    const savedWidth = this.width;
    const savedHeight = this.height;
    const minWidth = AnnotationEditor.MIN_SIZE / parentWidth;
    const minHeight = AnnotationEditor.MIN_SIZE / parentHeight;
    const round = x => Math.round(x * 10000) / 10000;
    const rotationMatrix = this.#getRotationMatrix(this.rotation);
    const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y];
    const invRotationMatrix = this.#getRotationMatrix(360 - this.rotation);
    const invTransf = (x, y) => [invRotationMatrix[0] * x + invRotationMatrix[2] * y, invRotationMatrix[1] * x + invRotationMatrix[3] * y];
    let getPoint;
    let getOpposite;
    let isDiagonal = false;
    let isHorizontal = false;
    switch (name) {
      case "topLeft":
        isDiagonal = true;
        getPoint = (w, h) => [0, 0];
        getOpposite = (w, h) => [w, h];
        break;
      case "topMiddle":
        getPoint = (w, h) => [w / 2, 0];
        getOpposite = (w, h) => [w / 2, h];
        break;
      case "topRight":
        isDiagonal = true;
        getPoint = (w, h) => [w, 0];
        getOpposite = (w, h) => [0, h];
        break;
      case "middleRight":
        isHorizontal = true;
        getPoint = (w, h) => [w, h / 2];
        getOpposite = (w, h) => [0, h / 2];
        break;
      case "bottomRight":
        isDiagonal = true;
        getPoint = (w, h) => [w, h];
        getOpposite = (w, h) => [0, 0];
        break;
      case "bottomMiddle":
        getPoint = (w, h) => [w / 2, h];
        getOpposite = (w, h) => [w / 2, 0];
        break;
      case "bottomLeft":
        isDiagonal = true;
        getPoint = (w, h) => [0, h];
        getOpposite = (w, h) => [w, 0];
        break;
      case "middleLeft":
        isHorizontal = true;
        getPoint = (w, h) => [0, h / 2];
        getOpposite = (w, h) => [w, h / 2];
        break;
    }
    const point = getPoint(savedWidth, savedHeight);
    const oppositePoint = getOpposite(savedWidth, savedHeight);
    let transfOppositePoint = transf(...oppositePoint);
    const oppositeX = round(savedX + transfOppositePoint[0]);
    const oppositeY = round(savedY + transfOppositePoint[1]);
    let ratioX = 1;
    let ratioY = 1;
    let [deltaX, deltaY] = this.screenToPageTranslation(event.movementX, event.movementY);
    [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight);
    if (isDiagonal) {
      const oldDiag = Math.hypot(savedWidth, savedHeight);
      ratioX = ratioY = Math.max(Math.min(Math.hypot(oppositePoint[0] - point[0] - deltaX, oppositePoint[1] - point[1] - deltaY) / oldDiag, 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight);
    } else if (isHorizontal) {
      ratioX = Math.max(minWidth, Math.min(1, Math.abs(oppositePoint[0] - point[0] - deltaX))) / savedWidth;
    } else {
      ratioY = Math.max(minHeight, Math.min(1, Math.abs(oppositePoint[1] - point[1] - deltaY))) / savedHeight;
    }
    const newWidth = round(savedWidth * ratioX);
    const newHeight = round(savedHeight * ratioY);
    transfOppositePoint = transf(...getOpposite(newWidth, newHeight));
    const newX = oppositeX - transfOppositePoint[0];
    const newY = oppositeY - transfOppositePoint[1];
    this.width = newWidth;
    this.height = newHeight;
    this.x = newX;
    this.y = newY;
    this.setDims(parentWidth * newWidth, parentHeight * newHeight);
    this.fixAndSetPosition();
  }
  async addAltTextButton() {
    if (this.#altTextButton) {
      return;
    }
    const altText = this.#altTextButton = document.createElement("button");
    altText.className = "altText";
    const msg = await AnnotationEditor._l10nPromise.get("editor_alt_text_button_label");
    altText.textContent = msg;
    altText.setAttribute("aria-label", msg);
    altText.tabIndex = "0";
    altText.addEventListener("contextmenu", _display_utils.noContextMenu);
    altText.addEventListener("pointerdown", event => event.stopPropagation());
    altText.addEventListener("click", event => {
      event.preventDefault();
      this._uiManager.editAltText(this);
    }, {
      capture: true
    });
    altText.addEventListener("keydown", event => {
      if (event.target === altText && event.key === "Enter") {
        event.preventDefault();
        this._uiManager.editAltText(this);
      }
    });
    this.#setAltTextButtonState();
    this.div.append(altText);
    if (!AnnotationEditor.SMALL_EDITOR_SIZE) {
      const PERCENT = 40;
      AnnotationEditor.SMALL_EDITOR_SIZE = Math.min(128, Math.round(altText.getBoundingClientRect().width * (1 + PERCENT / 100)));
    }
  }
  async #setAltTextButtonState() {
    const button = this.#altTextButton;
    if (!button) {
      return;
    }
    if (!this.#altText && !this.#altTextDecorative) {
      button.classList.remove("done");
      this.#altTextTooltip?.remove();
      return;
    }
    AnnotationEditor._l10nPromise.get("editor_alt_text_edit_button_label").then(msg => {
      button.setAttribute("aria-label", msg);
    });
    let tooltip = this.#altTextTooltip;
    if (!tooltip) {
      this.#altTextTooltip = tooltip = document.createElement("span");
      tooltip.className = "tooltip";
      tooltip.setAttribute("role", "tooltip");
      const id = tooltip.id = `alt-text-tooltip-${this.id}`;
      button.setAttribute("aria-describedby", id);
      const DELAY_TO_SHOW_TOOLTIP = 100;
      button.addEventListener("mouseenter", () => {
        this.#altTextTooltipTimeout = setTimeout(() => {
          this.#altTextTooltipTimeout = null;
          this.#altTextTooltip.classList.add("show");
          this._uiManager._eventBus.dispatch("reporttelemetry", {
            source: this,
            details: {
              type: "editing",
              subtype: this.editorType,
              data: {
                action: "alt_text_tooltip"
              }
            }
          });
        }, DELAY_TO_SHOW_TOOLTIP);
      });
      button.addEventListener("mouseleave", () => {
        clearTimeout(this.#altTextTooltipTimeout);
        this.#altTextTooltipTimeout = null;
        this.#altTextTooltip?.classList.remove("show");
      });
    }
    button.classList.add("done");
    tooltip.innerText = this.#altTextDecorative ? await AnnotationEditor._l10nPromise.get("editor_alt_text_decorative_tooltip") : this.#altText;
    if (!tooltip.parentNode) {
      button.append(tooltip);
    }
  }
  getClientDimensions() {
    return this.div.getBoundingClientRect();
  }
  get altTextData() {
    return {
      altText: this.#altText,
      decorative: this.#altTextDecorative
    };
  }
  set altTextData({
    altText,
    decorative
  }) {
    if (this.#altText === altText && this.#altTextDecorative === decorative) {
      return;
    }
    this.#altText = altText;
    this.#altTextDecorative = decorative;
    this.#setAltTextButtonState();
  }
  render() {
    this.div = document.createElement("div");
    this.div.setAttribute("data-editor-rotation", (360 - this.rotation) % 360);
    this.div.className = this.name;
    this.div.setAttribute("id", this.id);
    this.div.setAttribute("tabIndex", 0);
    this.setInForeground();
    this.div.addEventListener("focusin", this.#boundFocusin);
    this.div.addEventListener("focusout", this.#boundFocusout);
    const [parentWidth, parentHeight] = this.parentDimensions;
    if (this.parentRotation % 180 !== 0) {
      this.div.style.maxWidth = `${(100 * parentHeight / parentWidth).toFixed(2)}%`;
      this.div.style.maxHeight = `${(100 * parentWidth / parentHeight).toFixed(2)}%`;
    }
    const [tx, ty] = this.getInitialTranslation();
    this.translate(tx, ty);
    (0, _tools.bindEvents)(this, this.div, ["pointerdown"]);
    return this.div;
  }
  pointerdown(event) {
    const {
      isMac
    } = _util.FeatureTest.platform;
    if (event.button !== 0 || event.ctrlKey && isMac) {
      event.preventDefault();
      return;
    }
    this.#hasBeenClicked = true;
    this.#setUpDragSession(event);
  }
  #setUpDragSession(event) {
    if (!this._isDraggable) {
      return;
    }
    const isSelected = this._uiManager.isSelected(this);
    this._uiManager.setUpDragSession();
    let pointerMoveOptions, pointerMoveCallback;
    if (isSelected) {
      pointerMoveOptions = {
        passive: true,
        capture: true
      };
      pointerMoveCallback = e => {
        const [tx, ty] = this.screenToPageTranslation(e.movementX, e.movementY);
        this._uiManager.dragSelectedEditors(tx, ty);
      };
      window.addEventListener("pointermove", pointerMoveCallback, pointerMoveOptions);
    }
    const pointerUpCallback = () => {
      window.removeEventListener("pointerup", pointerUpCallback);
      window.removeEventListener("blur", pointerUpCallback);
      if (isSelected) {
        window.removeEventListener("pointermove", pointerMoveCallback, pointerMoveOptions);
      }
      this.#hasBeenClicked = false;
      if (!this._uiManager.endDragSession()) {
        const {
          isMac
        } = _util.FeatureTest.platform;
        if (event.ctrlKey && !isMac || event.shiftKey || event.metaKey && isMac) {
          this.parent.toggleSelected(this);
        } else {
          this.parent.setSelected(this);
        }
      }
    };
    window.addEventListener("pointerup", pointerUpCallback);
    window.addEventListener("blur", pointerUpCallback);
  }
  moveInDOM() {
    this.parent?.moveEditorInDOM(this);
  }
  _setParentAndPosition(parent, x, y) {
    parent.changeParent(this);
    this.x = x;
    this.y = y;
    this.fixAndSetPosition();
  }
  getRect(tx, ty) {
    const scale = this.parentScale;
    const [pageWidth, pageHeight] = this.pageDimensions;
    const [pageX, pageY] = this.pageTranslation;
    const shiftX = tx / scale;
    const shiftY = ty / scale;
    const x = this.x * pageWidth;
    const y = this.y * pageHeight;
    const width = this.width * pageWidth;
    const height = this.height * pageHeight;
    switch (this.rotation) {
      case 0:
        return [x + shiftX + pageX, pageHeight - y - shiftY - height + pageY, x + shiftX + width + pageX, pageHeight - y - shiftY + pageY];
      case 90:
        return [x + shiftY + pageX, pageHeight - y + shiftX + pageY, x + shiftY + height + pageX, pageHeight - y + shiftX + width + pageY];
      case 180:
        return [x - shiftX - width + pageX, pageHeight - y + shiftY + pageY, x - shiftX + pageX, pageHeight - y + shiftY + height + pageY];
      case 270:
        return [x - shiftY - height + pageX, pageHeight - y - shiftX - width + pageY, x - shiftY + pageX, pageHeight - y - shiftX + pageY];
      default:
        throw new Error("Invalid rotation");
    }
  }
  getRectInCurrentCoords(rect, pageHeight) {
    const [x1, y1, x2, y2] = rect;
    const width = x2 - x1;
    const height = y2 - y1;
    switch (this.rotation) {
      case 0:
        return [x1, pageHeight - y2, width, height];
      case 90:
        return [x1, pageHeight - y1, height, width];
      case 180:
        return [x2, pageHeight - y1, width, height];
      case 270:
        return [x2, pageHeight - y2, height, width];
      default:
        throw new Error("Invalid rotation");
    }
  }
  onceAdded() {}
  isEmpty() {
    return false;
  }
  enableEditMode() {
    this.#isInEditMode = true;
  }
  disableEditMode() {
    this.#isInEditMode = false;
  }
  isInEditMode() {
    return this.#isInEditMode;
  }
  shouldGetKeyboardEvents() {
    return false;
  }
  needsToBeRebuilt() {
    return this.div && !this.isAttachedToDOM;
  }
  rebuild() {
    this.div?.addEventListener("focusin", this.#boundFocusin);
    this.div?.addEventListener("focusout", this.#boundFocusout);
  }
  serialize(isForCopying = false, context = null) {
    (0, _util.unreachable)("An editor must be serializable");
  }
  static deserialize(data, parent, uiManager) {
    const editor = new this.prototype.constructor({
      parent,
      id: parent.getNextId(),
      uiManager
    });
    editor.rotation = data.rotation;
    const [pageWidth, pageHeight] = editor.pageDimensions;
    const [x, y, width, height] = editor.getRectInCurrentCoords(data.rect, pageHeight);
    editor.x = x / pageWidth;
    editor.y = y / pageHeight;
    editor.width = width / pageWidth;
    editor.height = height / pageHeight;
    return editor;
  }
  remove() {
    this.div.removeEventListener("focusin", this.#boundFocusin);
    this.div.removeEventListener("focusout", this.#boundFocusout);
    if (!this.isEmpty()) {
      this.commit();
    }
    if (this.parent) {
      this.parent.remove(this);
    } else {
      this._uiManager.removeEditor(this);
    }
    this.#altTextButton?.remove();
    this.#altTextButton = null;
    this.#altTextTooltip = null;
  }
  get isResizable() {
    return false;
  }
  makeResizable() {
    if (this.isResizable) {
      this.#createResizers();
      this.#resizersDiv.classList.remove("hidden");
    }
  }
  select() {
    this.makeResizable();
    this.div?.classList.add("selectedEditor");
  }
  unselect() {
    this.#resizersDiv?.classList.add("hidden");
    this.div?.classList.remove("selectedEditor");
    if (this.div?.contains(document.activeElement)) {
      this._uiManager.currentLayer.div.focus();
    }
  }
  updateParams(type, value) {}
  disableEditing() {
    if (this.#altTextButton) {
      this.#altTextButton.hidden = true;
    }
  }
  enableEditing() {
    if (this.#altTextButton) {
      this.#altTextButton.hidden = false;
    }
  }
  enterInEditMode() {}
  get contentDiv() {
    return this.div;
  }
  get isEditing() {
    return this.#isEditing;
  }
  set isEditing(value) {
    this.#isEditing = value;
    if (!this.parent) {
      return;
    }
    if (value) {
      this.parent.setSelected(this);
      this.parent.setActiveEditor(this);
    } else {
      this.parent.setActiveEditor(null);
    }
  }
  setAspectRatio(width, height) {
    this.#keepAspectRatio = true;
    const aspectRatio = width / height;
    const {
      style
    } = this.div;
    style.aspectRatio = aspectRatio;
    style.height = "auto";
  }
  static get MIN_SIZE() {
    return 16;
  }
}
exports.AnnotationEditor = AnnotationEditor;
class FakeEditor extends AnnotationEditor {
  constructor(params) {
    super(params);
    this.annotationElementId = params.annotationElementId;
    this.deleted = true;
  }
  serialize() {
    return {
      id: this.annotationElementId,
      deleted: true,
      pageIndex: this.pageIndex
    };
  }
}

/***/ }),
/* 5 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.KeyboardManager = exports.CommandManager = exports.ColorManager = exports.AnnotationEditorUIManager = void 0;
exports.bindEvents = bindEvents;
exports.opacityToHex = opacityToHex;
var _util = __w_pdfjs_require__(1);
var _display_utils = __w_pdfjs_require__(6);
function bindEvents(obj, element, names) {
  for (const name of names) {
    element.addEventListener(name, obj[name].bind(obj));
  }
}
function opacityToHex(opacity) {
  return Math.round(Math.min(255, Math.max(1, 255 * opacity))).toString(16).padStart(2, "0");
}
class IdManager {
  #id = 0;
  getId() {
    return `${_util.AnnotationEditorPrefix}${this.#id++}`;
  }
}
class ImageManager {
  #baseId = (0, _util.getUuid)();
  #id = 0;
  #cache = null;
  static get _isSVGFittingCanvas() {
    const svg = `data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 1 1" width="1" height="1" xmlns="http://www.w3.org/2000/svg"><rect width="1" height="1" style="fill:red;"/></svg>`;
    const canvas = new OffscreenCanvas(1, 3);
    const ctx = canvas.getContext("2d");
    const image = new Image();
    image.src = svg;
    const promise = image.decode().then(() => {
      ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3);
      return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0;
    });
    return (0, _util.shadow)(this, "_isSVGFittingCanvas", promise);
  }
  async #get(key, rawData) {
    this.#cache ||= new Map();
    let data = this.#cache.get(key);
    if (data === null) {
      return null;
    }
    if (data?.bitmap) {
      data.refCounter += 1;
      return data;
    }
    try {
      data ||= {
        bitmap: null,
        id: `image_${this.#baseId}_${this.#id++}`,
        refCounter: 0,
        isSvg: false
      };
      let image;
      if (typeof rawData === "string") {
        data.url = rawData;
        const response = await fetch(rawData);
        if (!response.ok) {
          throw new Error(response.statusText);
        }
        image = await response.blob();
      } else {
        image = data.file = rawData;
      }
      if (image.type === "image/svg+xml") {
        const mustRemoveAspectRatioPromise = ImageManager._isSVGFittingCanvas;
        const fileReader = new FileReader();
        const imageElement = new Image();
        const imagePromise = new Promise((resolve, reject) => {
          imageElement.onload = () => {
            data.bitmap = imageElement;
            data.isSvg = true;
            resolve();
          };
          fileReader.onload = async () => {
            const url = data.svgUrl = fileReader.result;
            imageElement.src = (await mustRemoveAspectRatioPromise) ? `${url}#svgView(preserveAspectRatio(none))` : url;
          };
          imageElement.onerror = fileReader.onerror = reject;
        });
        fileReader.readAsDataURL(image);
        await imagePromise;
      } else {
        data.bitmap = await createImageBitmap(image);
      }
      data.refCounter = 1;
    } catch (e) {
      console.error(e);
      data = null;
    }
    this.#cache.set(key, data);
    if (data) {
      this.#cache.set(data.id, data);
    }
    return data;
  }
  async getFromFile(file) {
    const {
      lastModified,
      name,
      size,
      type
    } = file;
    return this.#get(`${lastModified}_${name}_${size}_${type}`, file);
  }
  async getFromUrl(url) {
    return this.#get(url, url);
  }
  async getFromId(id) {
    this.#cache ||= new Map();
    const data = this.#cache.get(id);
    if (!data) {
      return null;
    }
    if (data.bitmap) {
      data.refCounter += 1;
      return data;
    }
    if (data.file) {
      return this.getFromFile(data.file);
    }
    return this.getFromUrl(data.url);
  }
  getSvgUrl(id) {
    const data = this.#cache.get(id);
    if (!data?.isSvg) {
      return null;
    }
    return data.svgUrl;
  }
  deleteId(id) {
    this.#cache ||= new Map();
    const data = this.#cache.get(id);
    if (!data) {
      return;
    }
    data.refCounter -= 1;
    if (data.refCounter !== 0) {
      return;
    }
    data.bitmap = null;
  }
  isValidId(id) {
    return id.startsWith(`image_${this.#baseId}_`);
  }
}
class CommandManager {
  #commands = [];
  #locked = false;
  #maxSize;
  #position = -1;
  constructor(maxSize = 128) {
    this.#maxSize = maxSize;
  }
  add({
    cmd,
    undo,
    mustExec,
    type = NaN,
    overwriteIfSameType = false,
    keepUndo = false
  }) {
    if (mustExec) {
      cmd();
    }
    if (this.#locked) {
      return;
    }
    const save = {
      cmd,
      undo,
      type
    };
    if (this.#position === -1) {
      if (this.#commands.length > 0) {
        this.#commands.length = 0;
      }
      this.#position = 0;
      this.#commands.push(save);
      return;
    }
    if (overwriteIfSameType && this.#commands[this.#position].type === type) {
      if (keepUndo) {
        save.undo = this.#commands[this.#position].undo;
      }
      this.#commands[this.#position] = save;
      return;
    }
    const next = this.#position + 1;
    if (next === this.#maxSize) {
      this.#commands.splice(0, 1);
    } else {
      this.#position = next;
      if (next < this.#commands.length) {
        this.#commands.splice(next);
      }
    }
    this.#commands.push(save);
  }
  undo() {
    if (this.#position === -1) {
      return;
    }
    this.#locked = true;
    this.#commands[this.#position].undo();
    this.#locked = false;
    this.#position -= 1;
  }
  redo() {
    if (this.#position < this.#commands.length - 1) {
      this.#position += 1;
      this.#locked = true;
      this.#commands[this.#position].cmd();
      this.#locked = false;
    }
  }
  hasSomethingToUndo() {
    return this.#position !== -1;
  }
  hasSomethingToRedo() {
    return this.#position < this.#commands.length - 1;
  }
  destroy() {
    this.#commands = null;
  }
}
exports.CommandManager = CommandManager;
class KeyboardManager {
  constructor(callbacks) {
    this.buffer = [];
    this.callbacks = new Map();
    this.allKeys = new Set();
    const {
      isMac
    } = _util.FeatureTest.platform;
    for (const [keys, callback, options = {}] of callbacks) {
      for (const key of keys) {
        const isMacKey = key.startsWith("mac+");
        if (isMac && isMacKey) {
          this.callbacks.set(key.slice(4), {
            callback,
            options
          });
          this.allKeys.add(key.split("+").at(-1));
        } else if (!isMac && !isMacKey) {
          this.callbacks.set(key, {
            callback,
            options
          });
          this.allKeys.add(key.split("+").at(-1));
        }
      }
    }
  }
  #serialize(event) {
    if (event.altKey) {
      this.buffer.push("alt");
    }
    if (event.ctrlKey) {
      this.buffer.push("ctrl");
    }
    if (event.metaKey) {
      this.buffer.push("meta");
    }
    if (event.shiftKey) {
      this.buffer.push("shift");
    }
    this.buffer.push(event.key);
    const str = this.buffer.join("+");
    this.buffer.length = 0;
    return str;
  }
  exec(self, event) {
    if (!this.allKeys.has(event.key)) {
      return;
    }
    const info = this.callbacks.get(this.#serialize(event));
    if (!info) {
      return;
    }
    const {
      callback,
      options: {
        bubbles = false,
        args = [],
        checker = null
      }
    } = info;
    if (checker && !checker(self, event)) {
      return;
    }
    callback.bind(self, ...args)();
    if (!bubbles) {
      event.stopPropagation();
      event.preventDefault();
    }
  }
}
exports.KeyboardManager = KeyboardManager;
class ColorManager {
  static _colorsMapping = new Map([["CanvasText", [0, 0, 0]], ["Canvas", [255, 255, 255]]]);
  get _colors() {
    const colors = new Map([["CanvasText", null], ["Canvas", null]]);
    (0, _display_utils.getColorValues)(colors);
    return (0, _util.shadow)(this, "_colors", colors);
  }
  convert(color) {
    const rgb = (0, _display_utils.getRGB)(color);
    if (!window.matchMedia("(forced-colors: active)").matches) {
      return rgb;
    }
    for (const [name, RGB] of this._colors) {
      if (RGB.every((x, i) => x === rgb[i])) {
        return ColorManager._colorsMapping.get(name);
      }
    }
    return rgb;
  }
  getHexCode(name) {
    const rgb = this._colors.get(name);
    if (!rgb) {
      return name;
    }
    return _util.Util.makeHexColor(...rgb);
  }
}
exports.ColorManager = ColorManager;
class AnnotationEditorUIManager {
  #activeEditor = null;
  #allEditors = new Map();
  #allLayers = new Map();
  #altTextManager = null;
  #annotationStorage = null;
  #commandManager = new CommandManager();
  #currentPageIndex = 0;
  #deletedAnnotationsElementIds = new Set();
  #draggingEditors = null;
  #editorTypes = null;
  #editorsToRescale = new Set();
  #filterFactory = null;
  #idManager = new IdManager();
  #isEnabled = false;
  #isWaiting = false;
  #lastActiveElement = null;
  #mode = _util.AnnotationEditorType.NONE;
  #selectedEditors = new Set();
  #pageColors = null;
  #boundBlur = this.blur.bind(this);
  #boundFocus = this.focus.bind(this);
  #boundCopy = this.copy.bind(this);
  #boundCut = this.cut.bind(this);
  #boundPaste = this.paste.bind(this);
  #boundKeydown = this.keydown.bind(this);
  #boundOnEditingAction = this.onEditingAction.bind(this);
  #boundOnPageChanging = this.onPageChanging.bind(this);
  #boundOnScaleChanging = this.onScaleChanging.bind(this);
  #boundOnRotationChanging = this.onRotationChanging.bind(this);
  #previousStates = {
    isEditing: false,
    isEmpty: true,
    hasSomethingToUndo: false,
    hasSomethingToRedo: false,
    hasSelectedEditor: false
  };
  #translation = [0, 0];
  #translationTimeoutId = null;
  #container = null;
  #viewer = null;
  static TRANSLATE_SMALL = 1;
  static TRANSLATE_BIG = 10;
  static get _keyboardManager() {
    const proto = AnnotationEditorUIManager.prototype;
    const arrowChecker = self => {
      const {
        activeElement
      } = document;
      return activeElement && self.#container.contains(activeElement) && self.hasSomethingToControl();
    };
    const small = this.TRANSLATE_SMALL;
    const big = this.TRANSLATE_BIG;
    return (0, _util.shadow)(this, "_keyboardManager", new KeyboardManager([[["ctrl+a", "mac+meta+a"], proto.selectAll], [["ctrl+z", "mac+meta+z"], proto.undo], [["ctrl+y", "ctrl+shift+z", "mac+meta+shift+z", "ctrl+shift+Z", "mac+meta+shift+Z"], proto.redo], [["Backspace", "alt+Backspace", "ctrl+Backspace", "shift+Backspace", "mac+Backspace", "mac+alt+Backspace", "mac+ctrl+Backspace", "Delete", "ctrl+Delete", "shift+Delete", "mac+Delete"], proto.delete], [["Escape", "mac+Escape"], proto.unselectAll], [["ArrowLeft", "mac+ArrowLeft"], proto.translateSelectedEditors, {
      args: [-small, 0],
      checker: arrowChecker
    }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto.translateSelectedEditors, {
      args: [-big, 0],
      checker: arrowChecker
    }], [["ArrowRight", "mac+ArrowRight"], proto.translateSelectedEditors, {
      args: [small, 0],
      checker: arrowChecker
    }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto.translateSelectedEditors, {
      args: [big, 0],
      checker: arrowChecker
    }], [["ArrowUp", "mac+ArrowUp"], proto.translateSelectedEditors, {
      args: [0, -small],
      checker: arrowChecker
    }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto.translateSelectedEditors, {
      args: [0, -big],
      checker: arrowChecker
    }], [["ArrowDown", "mac+ArrowDown"], proto.translateSelectedEditors, {
      args: [0, small],
      checker: arrowChecker
    }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto.translateSelectedEditors, {
      args: [0, big],
      checker: arrowChecker
    }]]));
  }
  constructor(container, viewer, altTextManager, eventBus, pdfDocument, pageColors) {
    this.#container = container;
    this.#viewer = viewer;
    this.#altTextManager = altTextManager;
    this._eventBus = eventBus;
    this._eventBus._on("editingaction", this.#boundOnEditingAction);
    this._eventBus._on("pagechanging", this.#boundOnPageChanging);
    this._eventBus._on("scalechanging", this.#boundOnScaleChanging);
    this._eventBus._on("rotationchanging", this.#boundOnRotationChanging);
    this.#annotationStorage = pdfDocument.annotationStorage;
    this.#filterFactory = pdfDocument.filterFactory;
    this.#pageColors = pageColors;
    this.viewParameters = {
      realScale: _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS,
      rotation: 0
    };
  }
  destroy() {
    this.#removeKeyboardManager();
    this.#removeFocusManager();
    this._eventBus._off("editingaction", this.#boundOnEditingAction);
    this._eventBus._off("pagechanging", this.#boundOnPageChanging);
    this._eventBus._off("scalechanging", this.#boundOnScaleChanging);
    this._eventBus._off("rotationchanging", this.#boundOnRotationChanging);
    for (const layer of this.#allLayers.values()) {
      layer.destroy();
    }
    this.#allLayers.clear();
    this.#allEditors.clear();
    this.#editorsToRescale.clear();
    this.#activeEditor = null;
    this.#selectedEditors.clear();
    this.#commandManager.destroy();
    this.#altTextManager.destroy();
  }
  get hcmFilter() {
    return (0, _util.shadow)(this, "hcmFilter", this.#pageColors ? this.#filterFactory.addHCMFilter(this.#pageColors.foreground, this.#pageColors.background) : "none");
  }
  get direction() {
    return (0, _util.shadow)(this, "direction", getComputedStyle(this.#container).direction);
  }
  editAltText(editor) {
    this.#altTextManager?.editAltText(this, editor);
  }
  onPageChanging({
    pageNumber
  }) {
    this.#currentPageIndex = pageNumber - 1;
  }
  focusMainContainer() {
    this.#container.focus();
  }
  findParent(x, y) {
    for (const layer of this.#allLayers.values()) {
      const {
        x: layerX,
        y: layerY,
        width,
        height
      } = layer.div.getBoundingClientRect();
      if (x >= layerX && x <= layerX + width && y >= layerY && y <= layerY + height) {
        return layer;
      }
    }
    return null;
  }
  disableUserSelect(value = false) {
    this.#viewer.classList.toggle("noUserSelect", value);
  }
  addShouldRescale(editor) {
    this.#editorsToRescale.add(editor);
  }
  removeShouldRescale(editor) {
    this.#editorsToRescale.delete(editor);
  }
  onScaleChanging({
    scale
  }) {
    this.commitOrRemove();
    this.viewParameters.realScale = scale * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS;
    for (const editor of this.#editorsToRescale) {
      editor.onScaleChanging();
    }
  }
  onRotationChanging({
    pagesRotation
  }) {
    this.commitOrRemove();
    this.viewParameters.rotation = pagesRotation;
  }
  addToAnnotationStorage(editor) {
    if (!editor.isEmpty() && this.#annotationStorage && !this.#annotationStorage.has(editor.id)) {
      this.#annotationStorage.setValue(editor.id, editor);
    }
  }
  #addFocusManager() {
    window.addEventListener("focus", this.#boundFocus);
    window.addEventListener("blur", this.#boundBlur);
  }
  #removeFocusManager() {
    window.removeEventListener("focus", this.#boundFocus);
    window.removeEventListener("blur", this.#boundBlur);
  }
  blur() {
    if (!this.hasSelection) {
      return;
    }
    const {
      activeElement
    } = document;
    for (const editor of this.#selectedEditors) {
      if (editor.div.contains(activeElement)) {
        this.#lastActiveElement = [editor, activeElement];
        editor._focusEventsAllowed = false;
        break;
      }
    }
  }
  focus() {
    if (!this.#lastActiveElement) {
      return;
    }
    const [lastEditor, lastActiveElement] = this.#lastActiveElement;
    this.#lastActiveElement = null;
    lastActiveElement.addEventListener("focusin", () => {
      lastEditor._focusEventsAllowed = true;
    }, {
      once: true
    });
    lastActiveElement.focus();
  }
  #addKeyboardManager() {
    window.addEventListener("keydown", this.#boundKeydown, {
      capture: true
    });
  }
  #removeKeyboardManager() {
    window.removeEventListener("keydown", this.#boundKeydown, {
      capture: true
    });
  }
  #addCopyPasteListeners() {
    document.addEventListener("copy", this.#boundCopy);
    document.addEventListener("cut", this.#boundCut);
    document.addEventListener("paste", this.#boundPaste);
  }
  #removeCopyPasteListeners() {
    document.removeEventListener("copy", this.#boundCopy);
    document.removeEventListener("cut", this.#boundCut);
    document.removeEventListener("paste", this.#boundPaste);
  }
  addEditListeners() {
    this.#addKeyboardManager();
    this.#addCopyPasteListeners();
  }
  removeEditListeners() {
    this.#removeKeyboardManager();
    this.#removeCopyPasteListeners();
  }
  copy(event) {
    event.preventDefault();
    this.#activeEditor?.commitOrRemove();
    if (!this.hasSelection) {
      return;
    }
    const editors = [];
    for (const editor of this.#selectedEditors) {
      const serialized = editor.serialize(true);
      if (serialized) {
        editors.push(serialized);
      }
    }
    if (editors.length === 0) {
      return;
    }
    event.clipboardData.setData("application/pdfjs", JSON.stringify(editors));
  }
  cut(event) {
    this.copy(event);
    this.delete();
  }
  paste(event) {
    event.preventDefault();
    const {
      clipboardData
    } = event;
    for (const item of clipboardData.items) {
      for (const editorType of this.#editorTypes) {
        if (editorType.isHandlingMimeForPasting(item.type)) {
          editorType.paste(item, this.currentLayer);
          return;
        }
      }
    }
    let data = clipboardData.getData("application/pdfjs");
    if (!data) {
      return;
    }
    try {
      data = JSON.parse(data);
    } catch (ex) {
      (0, _util.warn)(`paste: "${ex.message}".`);
      return;
    }
    if (!Array.isArray(data)) {
      return;
    }
    this.unselectAll();
    const layer = this.currentLayer;
    try {
      const newEditors = [];
      for (const editor of data) {
        const deserializedEditor = layer.deserialize(editor);
        if (!deserializedEditor) {
          return;
        }
        newEditors.push(deserializedEditor);
      }
      const cmd = () => {
        for (const editor of newEditors) {
          this.#addEditorToLayer(editor);
        }
        this.#selectEditors(newEditors);
      };
      const undo = () => {
        for (const editor of newEditors) {
          editor.remove();
        }
      };
      this.addCommands({
        cmd,
        undo,
        mustExec: true
      });
    } catch (ex) {
      (0, _util.warn)(`paste: "${ex.message}".`);
    }
  }
  keydown(event) {
    if (!this.getActive()?.shouldGetKeyboardEvents()) {
      AnnotationEditorUIManager._keyboardManager.exec(this, event);
    }
  }
  onEditingAction(details) {
    if (["undo", "redo", "delete", "selectAll"].includes(details.name)) {
      this[details.name]();
    }
  }
  #dispatchUpdateStates(details) {
    const hasChanged = Object.entries(details).some(([key, value]) => this.#previousStates[key] !== value);
    if (hasChanged) {
      this._eventBus.dispatch("annotationeditorstateschanged", {
        source: this,
        details: Object.assign(this.#previousStates, details)
      });
    }
  }
  #dispatchUpdateUI(details) {
    this._eventBus.dispatch("annotationeditorparamschanged", {
      source: this,
      details
    });
  }
  setEditingState(isEditing) {
    if (isEditing) {
      this.#addFocusManager();
      this.#addKeyboardManager();
      this.#addCopyPasteListeners();
      this.#dispatchUpdateStates({
        isEditing: this.#mode !== _util.AnnotationEditorType.NONE,
        isEmpty: this.#isEmpty(),
        hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),
        hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),
        hasSelectedEditor: false
      });
    } else {
      this.#removeFocusManager();
      this.#removeKeyboardManager();
      this.#removeCopyPasteListeners();
      this.#dispatchUpdateStates({
        isEditing: false
      });
      this.disableUserSelect(false);
    }
  }
  registerEditorTypes(types) {
    if (this.#editorTypes) {
      return;
    }
    this.#editorTypes = types;
    for (const editorType of this.#editorTypes) {
      this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate);
    }
  }
  getId() {
    return this.#idManager.getId();
  }
  get currentLayer() {
    return this.#allLayers.get(this.#currentPageIndex);
  }
  getLayer(pageIndex) {
    return this.#allLayers.get(pageIndex);
  }
  get currentPageIndex() {
    return this.#currentPageIndex;
  }
  addLayer(layer) {
    this.#allLayers.set(layer.pageIndex, layer);
    if (this.#isEnabled) {
      layer.enable();
    } else {
      layer.disable();
    }
  }
  removeLayer(layer) {
    this.#allLayers.delete(layer.pageIndex);
  }
  updateMode(mode, editId = null) {
    if (this.#mode === mode) {
      return;
    }
    this.#mode = mode;
    if (mode === _util.AnnotationEditorType.NONE) {
      this.setEditingState(false);
      this.#disableAll();
      return;
    }
    this.setEditingState(true);
    this.#enableAll();
    this.unselectAll();
    for (const layer of this.#allLayers.values()) {
      layer.updateMode(mode);
    }
    if (!editId) {
      return;
    }
    for (const editor of this.#allEditors.values()) {
      if (editor.annotationElementId === editId) {
        this.setSelected(editor);
        editor.enterInEditMode();
        break;
      }
    }
  }
  updateToolbar(mode) {
    if (mode === this.#mode) {
      return;
    }
    this._eventBus.dispatch("switchannotationeditormode", {
      source: this,
      mode
    });
  }
  updateParams(type, value) {
    if (!this.#editorTypes) {
      return;
    }
    if (type === _util.AnnotationEditorParamsType.CREATE) {
      this.currentLayer.addNewEditor(type);
      return;
    }
    for (const editor of this.#selectedEditors) {
      editor.updateParams(type, value);
    }
    for (const editorType of this.#editorTypes) {
      editorType.updateDefaultParams(type, value);
    }
  }
  enableWaiting(mustWait = false) {
    if (this.#isWaiting === mustWait) {
      return;
    }
    this.#isWaiting = mustWait;
    for (const layer of this.#allLayers.values()) {
      if (mustWait) {
        layer.disableClick();
      } else {
        layer.enableClick();
      }
      layer.div.classList.toggle("waiting", mustWait);
    }
  }
  #enableAll() {
    if (!this.#isEnabled) {
      this.#isEnabled = true;
      for (const layer of this.#allLayers.values()) {
        layer.enable();
      }
    }
  }
  #disableAll() {
    this.unselectAll();
    if (this.#isEnabled) {
      this.#isEnabled = false;
      for (const layer of this.#allLayers.values()) {
        layer.disable();
      }
    }
  }
  getEditors(pageIndex) {
    const editors = [];
    for (const editor of this.#allEditors.values()) {
      if (editor.pageIndex === pageIndex) {
        editors.push(editor);
      }
    }
    return editors;
  }
  getEditor(id) {
    return this.#allEditors.get(id);
  }
  addEditor(editor) {
    this.#allEditors.set(editor.id, editor);
  }
  removeEditor(editor) {
    this.#allEditors.delete(editor.id);
    this.unselect(editor);
    if (!editor.annotationElementId || !this.#deletedAnnotationsElementIds.has(editor.annotationElementId)) {
      this.#annotationStorage?.remove(editor.id);
    }
  }
  addDeletedAnnotationElement(editor) {
    this.#deletedAnnotationsElementIds.add(editor.annotationElementId);
    editor.deleted = true;
  }
  isDeletedAnnotationElement(annotationElementId) {
    return this.#deletedAnnotationsElementIds.has(annotationElementId);
  }
  removeDeletedAnnotationElement(editor) {
    this.#deletedAnnotationsElementIds.delete(editor.annotationElementId);
    editor.deleted = false;
  }
  #addEditorToLayer(editor) {
    const layer = this.#allLayers.get(editor.pageIndex);
    if (layer) {
      layer.addOrRebuild(editor);
    } else {
      this.addEditor(editor);
    }
  }
  setActiveEditor(editor) {
    if (this.#activeEditor === editor) {
      return;
    }
    this.#activeEditor = editor;
    if (editor) {
      this.#dispatchUpdateUI(editor.propertiesToUpdate);
    }
  }
  toggleSelected(editor) {
    if (this.#selectedEditors.has(editor)) {
      this.#selectedEditors.delete(editor);
      editor.unselect();
      this.#dispatchUpdateStates({
        hasSelectedEditor: this.hasSelection
      });
      return;
    }
    this.#selectedEditors.add(editor);
    editor.select();
    this.#dispatchUpdateUI(editor.propertiesToUpdate);
    this.#dispatchUpdateStates({
      hasSelectedEditor: true
    });
  }
  setSelected(editor) {
    for (const ed of this.#selectedEditors) {
      if (ed !== editor) {
        ed.unselect();
      }
    }
    this.#selectedEditors.clear();
    this.#selectedEditors.add(editor);
    editor.select();
    this.#dispatchUpdateUI(editor.propertiesToUpdate);
    this.#dispatchUpdateStates({
      hasSelectedEditor: true
    });
  }
  isSelected(editor) {
    return this.#selectedEditors.has(editor);
  }
  unselect(editor) {
    editor.unselect();
    this.#selectedEditors.delete(editor);
    this.#dispatchUpdateStates({
      hasSelectedEditor: this.hasSelection
    });
  }
  get hasSelection() {
    return this.#selectedEditors.size !== 0;
  }
  undo() {
    this.#commandManager.undo();
    this.#dispatchUpdateStates({
      hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),
      hasSomethingToRedo: true,
      isEmpty: this.#isEmpty()
    });
  }
  redo() {
    this.#commandManager.redo();
    this.#dispatchUpdateStates({
      hasSomethingToUndo: true,
      hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),
      isEmpty: this.#isEmpty()
    });
  }
  addCommands(params) {
    this.#commandManager.add(params);
    this.#dispatchUpdateStates({
      hasSomethingToUndo: true,
      hasSomethingToRedo: false,
      isEmpty: this.#isEmpty()
    });
  }
  #isEmpty() {
    if (this.#allEditors.size === 0) {
      return true;
    }
    if (this.#allEditors.size === 1) {
      for (const editor of this.#allEditors.values()) {
        return editor.isEmpty();
      }
    }
    return false;
  }
  delete() {
    this.commitOrRemove();
    if (!this.hasSelection) {
      return;
    }
    const editors = [...this.#selectedEditors];
    const cmd = () => {
      for (const editor of editors) {
        editor.remove();
      }
    };
    const undo = () => {
      for (const editor of editors) {
        this.#addEditorToLayer(editor);
      }
    };
    this.addCommands({
      cmd,
      undo,
      mustExec: true
    });
  }
  commitOrRemove() {
    this.#activeEditor?.commitOrRemove();
  }
  hasSomethingToControl() {
    return this.#activeEditor || this.hasSelection;
  }
  #selectEditors(editors) {
    this.#selectedEditors.clear();
    for (const editor of editors) {
      if (editor.isEmpty()) {
        continue;
      }
      this.#selectedEditors.add(editor);
      editor.select();
    }
    this.#dispatchUpdateStates({
      hasSelectedEditor: true
    });
  }
  selectAll() {
    for (const editor of this.#selectedEditors) {
      editor.commit();
    }
    this.#selectEditors(this.#allEditors.values());
  }
  unselectAll() {
    if (this.#activeEditor) {
      this.#activeEditor.commitOrRemove();
      return;
    }
    if (!this.hasSelection) {
      return;
    }
    for (const editor of this.#selectedEditors) {
      editor.unselect();
    }
    this.#selectedEditors.clear();
    this.#dispatchUpdateStates({
      hasSelectedEditor: false
    });
  }
  translateSelectedEditors(x, y, noCommit = false) {
    if (!noCommit) {
      this.commitOrRemove();
    }
    if (!this.hasSelection) {
      return;
    }
    this.#translation[0] += x;
    this.#translation[1] += y;
    const [totalX, totalY] = this.#translation;
    const editors = [...this.#selectedEditors];
    const TIME_TO_WAIT = 1000;
    if (this.#translationTimeoutId) {
      clearTimeout(this.#translationTimeoutId);
    }
    this.#translationTimeoutId = setTimeout(() => {
      this.#translationTimeoutId = null;
      this.#translation[0] = this.#translation[1] = 0;
      this.addCommands({
        cmd: () => {
          for (const editor of editors) {
            if (this.#allEditors.has(editor.id)) {
              editor.translateInPage(totalX, totalY);
            }
          }
        },
        undo: () => {
          for (const editor of editors) {
            if (this.#allEditors.has(editor.id)) {
              editor.translateInPage(-totalX, -totalY);
            }
          }
        },
        mustExec: false
      });
    }, TIME_TO_WAIT);
    for (const editor of editors) {
      editor.translateInPage(x, y);
    }
  }
  setUpDragSession() {
    if (!this.hasSelection) {
      return;
    }
    this.disableUserSelect(true);
    this.#draggingEditors = new Map();
    for (const editor of this.#selectedEditors) {
      this.#draggingEditors.set(editor, {
        savedX: editor.x,
        savedY: editor.y,
        savedPageIndex: editor.pageIndex,
        newX: 0,
        newY: 0,
        newPageIndex: -1
      });
    }
  }
  endDragSession() {
    if (!this.#draggingEditors) {
      return false;
    }
    this.disableUserSelect(false);
    const map = this.#draggingEditors;
    this.#draggingEditors = null;
    let mustBeAddedInUndoStack = false;
    for (const [{
      x,
      y,
      pageIndex
    }, value] of map) {
      value.newX = x;
      value.newY = y;
      value.newPageIndex = pageIndex;
      mustBeAddedInUndoStack ||= x !== value.savedX || y !== value.savedY || pageIndex !== value.savedPageIndex;
    }
    if (!mustBeAddedInUndoStack) {
      return false;
    }
    const move = (editor, x, y, pageIndex) => {
      if (this.#allEditors.has(editor.id)) {
        const parent = this.#allLayers.get(pageIndex);
        if (parent) {
          editor._setParentAndPosition(parent, x, y);
        } else {
          editor.pageIndex = pageIndex;
          editor.x = x;
          editor.y = y;
        }
      }
    };
    this.addCommands({
      cmd: () => {
        for (const [editor, {
          newX,
          newY,
          newPageIndex
        }] of map) {
          move(editor, newX, newY, newPageIndex);
        }
      },
      undo: () => {
        for (const [editor, {
          savedX,
          savedY,
          savedPageIndex
        }] of map) {
          move(editor, savedX, savedY, savedPageIndex);
        }
      },
      mustExec: true
    });
    return true;
  }
  dragSelectedEditors(tx, ty) {
    if (!this.#draggingEditors) {
      return;
    }
    for (const editor of this.#draggingEditors.keys()) {
      editor.drag(tx, ty);
    }
  }
  rebuild(editor) {
    if (editor.parent === null) {
      const parent = this.getLayer(editor.pageIndex);
      if (parent) {
        parent.changeParent(editor);
        parent.addOrRebuild(editor);
      } else {
        this.addEditor(editor);
        this.addToAnnotationStorage(editor);
        editor.rebuild();
      }
    } else {
      editor.parent.addOrRebuild(editor);
    }
  }
  isActive(editor) {
    return this.#activeEditor === editor;
  }
  getActive() {
    return this.#activeEditor;
  }
  getMode() {
    return this.#mode;
  }
  get imageManager() {
    return (0, _util.shadow)(this, "imageManager", new ImageManager());
  }
}
exports.AnnotationEditorUIManager = AnnotationEditorUIManager;

/***/ }),
/* 6 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.StatTimer = exports.RenderingCancelledException = exports.PixelsPerInch = exports.PageViewport = exports.PDFDateString = exports.DOMStandardFontDataFactory = exports.DOMSVGFactory = exports.DOMFilterFactory = exports.DOMCanvasFactory = exports.DOMCMapReaderFactory = void 0;
exports.deprecated = deprecated;
exports.getColorValues = getColorValues;
exports.getCurrentTransform = getCurrentTransform;
exports.getCurrentTransformInverse = getCurrentTransformInverse;
exports.getFilenameFromUrl = getFilenameFromUrl;
exports.getPdfFilenameFromUrl = getPdfFilenameFromUrl;
exports.getRGB = getRGB;
exports.getXfaPageViewport = getXfaPageViewport;
exports.isDataScheme = isDataScheme;
exports.isPdfFile = isPdfFile;
exports.isValidFetchUrl = isValidFetchUrl;
exports.loadScript = loadScript;
exports.noContextMenu = noContextMenu;
exports.setLayerDimensions = setLayerDimensions;
var _base_factory = __w_pdfjs_require__(7);
var _util = __w_pdfjs_require__(1);
const SVG_NS = "http://www.w3.org/2000/svg";
class PixelsPerInch {
  static CSS = 96.0;
  static PDF = 72.0;
  static PDF_TO_CSS_UNITS = this.CSS / this.PDF;
}
exports.PixelsPerInch = PixelsPerInch;
class DOMFilterFactory extends _base_factory.BaseFilterFactory {
  #_cache;
  #_defs;
  #docId;
  #document;
  #hcmFilter;
  #hcmKey;
  #hcmUrl;
  #hcmHighlightFilter;
  #hcmHighlightKey;
  #hcmHighlightUrl;
  #id = 0;
  constructor({
    docId,
    ownerDocument = globalThis.document
  } = {}) {
    super();
    this.#docId = docId;
    this.#document = ownerDocument;
  }
  get #cache() {
    return this.#_cache ||= new Map();
  }
  get #defs() {
    if (!this.#_defs) {
      const div = this.#document.createElement("div");
      const {
        style
      } = div;
      style.visibility = "hidden";
      style.contain = "strict";
      style.width = style.height = 0;
      style.position = "absolute";
      style.top = style.left = 0;
      style.zIndex = -1;
      const svg = this.#document.createElementNS(SVG_NS, "svg");
      svg.setAttribute("width", 0);
      svg.setAttribute("height", 0);
      this.#_defs = this.#document.createElementNS(SVG_NS, "defs");
      div.append(svg);
      svg.append(this.#_defs);
      this.#document.body.append(div);
    }
    return this.#_defs;
  }
  addFilter(maps) {
    if (!maps) {
      return "none";
    }
    let value = this.#cache.get(maps);
    if (value) {
      return value;
    }
    let tableR, tableG, tableB, key;
    if (maps.length === 1) {
      const mapR = maps[0];
      const buffer = new Array(256);
      for (let i = 0; i < 256; i++) {
        buffer[i] = mapR[i] / 255;
      }
      key = tableR = tableG = tableB = buffer.join(",");
    } else {
      const [mapR, mapG, mapB] = maps;
      const bufferR = new Array(256);
      const bufferG = new Array(256);
      const bufferB = new Array(256);
      for (let i = 0; i < 256; i++) {
        bufferR[i] = mapR[i] / 255;
        bufferG[i] = mapG[i] / 255;
        bufferB[i] = mapB[i] / 255;
      }
      tableR = bufferR.join(",");
      tableG = bufferG.join(",");
      tableB = bufferB.join(",");
      key = `${tableR}${tableG}${tableB}`;
    }
    value = this.#cache.get(key);
    if (value) {
      this.#cache.set(maps, value);
      return value;
    }
    const id = `g_${this.#docId}_transfer_map_${this.#id++}`;
    const url = `url(#${id})`;
    this.#cache.set(maps, url);
    this.#cache.set(key, url);
    const filter = this.#createFilter(id);
    this.#addTransferMapConversion(tableR, tableG, tableB, filter);
    return url;
  }
  addHCMFilter(fgColor, bgColor) {
    const key = `${fgColor}-${bgColor}`;
    if (this.#hcmKey === key) {
      return this.#hcmUrl;
    }
    this.#hcmKey = key;
    this.#hcmUrl = "none";
    this.#hcmFilter?.remove();
    if (!fgColor || !bgColor) {
      return this.#hcmUrl;
    }
    const fgRGB = this.#getRGB(fgColor);
    fgColor = _util.Util.makeHexColor(...fgRGB);
    const bgRGB = this.#getRGB(bgColor);
    bgColor = _util.Util.makeHexColor(...bgRGB);
    this.#defs.style.color = "";
    if (fgColor === "#000000" && bgColor === "#ffffff" || fgColor === bgColor) {
      return this.#hcmUrl;
    }
    const map = new Array(256);
    for (let i = 0; i <= 255; i++) {
      const x = i / 255;
      map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;
    }
    const table = map.join(",");
    const id = `g_${this.#docId}_hcm_filter`;
    const filter = this.#hcmHighlightFilter = this.#createFilter(id);
    this.#addTransferMapConversion(table, table, table, filter);
    this.#addGrayConversion(filter);
    const getSteps = (c, n) => {
      const start = fgRGB[c] / 255;
      const end = bgRGB[c] / 255;
      const arr = new Array(n + 1);
      for (let i = 0; i <= n; i++) {
        arr[i] = start + i / n * (end - start);
      }
      return arr.join(",");
    };
    this.#addTransferMapConversion(getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter);
    this.#hcmUrl = `url(#${id})`;
    return this.#hcmUrl;
  }
  addHighlightHCMFilter(fgColor, bgColor, newFgColor, newBgColor) {
    const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`;
    if (this.#hcmHighlightKey === key) {
      return this.#hcmHighlightUrl;
    }
    this.#hcmHighlightKey = key;
    this.#hcmHighlightUrl = "none";
    this.#hcmHighlightFilter?.remove();
    if (!fgColor || !bgColor) {
      return this.#hcmHighlightUrl;
    }
    const [fgRGB, bgRGB] = [fgColor, bgColor].map(this.#getRGB.bind(this));
    let fgGray = Math.round(0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]);
    let bgGray = Math.round(0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]);
    let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(this.#getRGB.bind(this));
    if (bgGray < fgGray) {
      [fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB];
    }
    this.#defs.style.color = "";
    const getSteps = (fg, bg, n) => {
      const arr = new Array(256);
      const step = (bgGray - fgGray) / n;
      const newStart = fg / 255;
      const newStep = (bg - fg) / (255 * n);
      let prev = 0;
      for (let i = 0; i <= n; i++) {
        const k = Math.round(fgGray + i * step);
        const value = newStart + i * newStep;
        for (let j = prev; j <= k; j++) {
          arr[j] = value;
        }
        prev = k + 1;
      }
      for (let i = prev; i < 256; i++) {
        arr[i] = arr[prev - 1];
      }
      return arr.join(",");
    };
    const id = `g_${this.#docId}_hcm_highlight_filter`;
    const filter = this.#hcmHighlightFilter = this.#createFilter(id);
    this.#addGrayConversion(filter);
    this.#addTransferMapConversion(getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter);
    this.#hcmHighlightUrl = `url(#${id})`;
    return this.#hcmHighlightUrl;
  }
  destroy(keepHCM = false) {
    if (keepHCM && (this.#hcmUrl || this.#hcmHighlightUrl)) {
      return;
    }
    if (this.#_defs) {
      this.#_defs.parentNode.parentNode.remove();
      this.#_defs = null;
    }
    if (this.#_cache) {
      this.#_cache.clear();
      this.#_cache = null;
    }
    this.#id = 0;
  }
  #addGrayConversion(filter) {
    const feColorMatrix = this.#document.createElementNS(SVG_NS, "feColorMatrix");
    feColorMatrix.setAttribute("type", "matrix");
    feColorMatrix.setAttribute("values", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0");
    filter.append(feColorMatrix);
  }
  #createFilter(id) {
    const filter = this.#document.createElementNS(SVG_NS, "filter");
    filter.setAttribute("color-interpolation-filters", "sRGB");
    filter.setAttribute("id", id);
    this.#defs.append(filter);
    return filter;
  }
  #appendFeFunc(feComponentTransfer, func, table) {
    const feFunc = this.#document.createElementNS(SVG_NS, func);
    feFunc.setAttribute("type", "discrete");
    feFunc.setAttribute("tableValues", table);
    feComponentTransfer.append(feFunc);
  }
  #addTransferMapConversion(rTable, gTable, bTable, filter) {
    const feComponentTransfer = this.#document.createElementNS(SVG_NS, "feComponentTransfer");
    filter.append(feComponentTransfer);
    this.#appendFeFunc(feComponentTransfer, "feFuncR", rTable);
    this.#appendFeFunc(feComponentTransfer, "feFuncG", gTable);
    this.#appendFeFunc(feComponentTransfer, "feFuncB", bTable);
  }
  #getRGB(color) {
    this.#defs.style.color = color;
    return getRGB(getComputedStyle(this.#defs).getPropertyValue("color"));
  }
}
exports.DOMFilterFactory = DOMFilterFactory;
class DOMCanvasFactory extends _base_factory.BaseCanvasFactory {
  constructor({
    ownerDocument = globalThis.document
  } = {}) {
    super();
    this._document = ownerDocument;
  }
  _createCanvas(width, height) {
    const canvas = this._document.createElement("canvas");
    canvas.width = width;
    canvas.height = height;
    return canvas;
  }
}
exports.DOMCanvasFactory = DOMCanvasFactory;
async function fetchData(url, asTypedArray = false) {
  if (isValidFetchUrl(url, document.baseURI)) {
    const response = await fetch(url);
    if (!response.ok) {
      throw new Error(response.statusText);
    }
    return asTypedArray ? new Uint8Array(await response.arrayBuffer()) : (0, _util.stringToBytes)(await response.text());
  }
  return new Promise((resolve, reject) => {
    const request = new XMLHttpRequest();
    request.open("GET", url, true);
    if (asTypedArray) {
      request.responseType = "arraybuffer";
    }
    request.onreadystatechange = () => {
      if (request.readyState !== XMLHttpRequest.DONE) {
        return;
      }
      if (request.status === 200 || request.status === 0) {
        let data;
        if (asTypedArray && request.response) {
          data = new Uint8Array(request.response);
        } else if (!asTypedArray && request.responseText) {
          data = (0, _util.stringToBytes)(request.responseText);
        }
        if (data) {
          resolve(data);
          return;
        }
      }
      reject(new Error(request.statusText));
    };
    request.send(null);
  });
}
class DOMCMapReaderFactory extends _base_factory.BaseCMapReaderFactory {
  _fetchData(url, compressionType) {
    return fetchData(url, this.isCompressed).then(data => {
      return {
        cMapData: data,
        compressionType
      };
    });
  }
}
exports.DOMCMapReaderFactory = DOMCMapReaderFactory;
class DOMStandardFontDataFactory extends _base_factory.BaseStandardFontDataFactory {
  _fetchData(url) {
    return fetchData(url, true);
  }
}
exports.DOMStandardFontDataFactory = DOMStandardFontDataFactory;
class DOMSVGFactory extends _base_factory.BaseSVGFactory {
  _createSVG(type) {
    return document.createElementNS(SVG_NS, type);
  }
}
exports.DOMSVGFactory = DOMSVGFactory;
class PageViewport {
  constructor({
    viewBox,
    scale,
    rotation,
    offsetX = 0,
    offsetY = 0,
    dontFlip = false
  }) {
    this.viewBox = viewBox;
    this.scale = scale;
    this.rotation = rotation;
    this.offsetX = offsetX;
    this.offsetY = offsetY;
    const centerX = (viewBox[2] + viewBox[0]) / 2;
    const centerY = (viewBox[3] + viewBox[1]) / 2;
    let rotateA, rotateB, rotateC, rotateD;
    rotation %= 360;
    if (rotation < 0) {
      rotation += 360;
    }
    switch (rotation) {
      case 180:
        rotateA = -1;
        rotateB = 0;
        rotateC = 0;
        rotateD = 1;
        break;
      case 90:
        rotateA = 0;
        rotateB = 1;
        rotateC = 1;
        rotateD = 0;
        break;
      case 270:
        rotateA = 0;
        rotateB = -1;
        rotateC = -1;
        rotateD = 0;
        break;
      case 0:
        rotateA = 1;
        rotateB = 0;
        rotateC = 0;
        rotateD = -1;
        break;
      default:
        throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.");
    }
    if (dontFlip) {
      rotateC = -rotateC;
      rotateD = -rotateD;
    }
    let offsetCanvasX, offsetCanvasY;
    let width, height;
    if (rotateA === 0) {
      offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
      offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
      width = (viewBox[3] - viewBox[1]) * scale;
      height = (viewBox[2] - viewBox[0]) * scale;
    } else {
      offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
      offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
      width = (viewBox[2] - viewBox[0]) * scale;
      height = (viewBox[3] - viewBox[1]) * scale;
    }
    this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY];
    this.width = width;
    this.height = height;
  }
  get rawDims() {
    const {
      viewBox
    } = this;
    return (0, _util.shadow)(this, "rawDims", {
      pageWidth: viewBox[2] - viewBox[0],
      pageHeight: viewBox[3] - viewBox[1],
      pageX: viewBox[0],
      pageY: viewBox[1]
    });
  }
  clone({
    scale = this.scale,
    rotation = this.rotation,
    offsetX = this.offsetX,
    offsetY = this.offsetY,
    dontFlip = false
  } = {}) {
    return new PageViewport({
      viewBox: this.viewBox.slice(),
      scale,
      rotation,
      offsetX,
      offsetY,
      dontFlip
    });
  }
  convertToViewportPoint(x, y) {
    return _util.Util.applyTransform([x, y], this.transform);
  }
  convertToViewportRectangle(rect) {
    const topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform);
    const bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform);
    return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];
  }
  convertToPdfPoint(x, y) {
    return _util.Util.applyInverseTransform([x, y], this.transform);
  }
}
exports.PageViewport = PageViewport;
class RenderingCancelledException extends _util.BaseException {
  constructor(msg, extraDelay = 0) {
    super(msg, "RenderingCancelledException");
    this.extraDelay = extraDelay;
  }
}
exports.RenderingCancelledException = RenderingCancelledException;
function isDataScheme(url) {
  const ii = url.length;
  let i = 0;
  while (i < ii && url[i].trim() === "") {
    i++;
  }
  return url.substring(i, i + 5).toLowerCase() === "data:";
}
function isPdfFile(filename) {
  return typeof filename === "string" && /\.pdf$/i.test(filename);
}
function getFilenameFromUrl(url, onlyStripPath = false) {
  if (!onlyStripPath) {
    [url] = url.split(/[#?]/, 1);
  }
  return url.substring(url.lastIndexOf("/") + 1);
}
function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") {
  if (typeof url !== "string") {
    return defaultFilename;
  }
  if (isDataScheme(url)) {
    (0, _util.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.');
    return defaultFilename;
  }
  const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/;
  const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i;
  const splitURI = reURI.exec(url);
  let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]);
  if (suggestedFilename) {
    suggestedFilename = suggestedFilename[0];
    if (suggestedFilename.includes("%")) {
      try {
        suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0];
      } catch {}
    }
  }
  return suggestedFilename || defaultFilename;
}
class StatTimer {
  started = Object.create(null);
  times = [];
  time(name) {
    if (name in this.started) {
      (0, _util.warn)(`Timer is already running for ${name}`);
    }
    this.started[name] = Date.now();
  }
  timeEnd(name) {
    if (!(name in this.started)) {
      (0, _util.warn)(`Timer has not been started for ${name}`);
    }
    this.times.push({
      name,
      start: this.started[name],
      end: Date.now()
    });
    delete this.started[name];
  }
  toString() {
    const outBuf = [];
    let longest = 0;
    for (const {
      name
    } of this.times) {
      longest = Math.max(name.length, longest);
    }
    for (const {
      name,
      start,
      end
    } of this.times) {
      outBuf.push(`${name.padEnd(longest)} ${end - start}ms\n`);
    }
    return outBuf.join("");
  }
}
exports.StatTimer = StatTimer;
function isValidFetchUrl(url, baseUrl) {
  try {
    const {
      protocol
    } = baseUrl ? new URL(url, baseUrl) : new URL(url);
    return protocol === "http:" || protocol === "https:";
  } catch {
    return false;
  }
}
function noContextMenu(e) {
  e.preventDefault();
}
function loadScript(src, removeScriptElement = false) {
  return new Promise((resolve, reject) => {
    const script = document.createElement("script");
    script.src = src;
    script.onload = function (evt) {
      if (removeScriptElement) {
        script.remove();
      }
      resolve(evt);
    };
    script.onerror = function () {
      reject(new Error(`Cannot load script at: ${script.src}`));
    };
    (document.head || document.documentElement).append(script);
  });
}
function deprecated(details) {
  console.log("Deprecated API usage: " + details);
}
let pdfDateStringRegex;
class PDFDateString {
  static toDateObject(input) {
    if (!input || typeof input !== "string") {
      return null;
    }
    pdfDateStringRegex ||= new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?");
    const matches = pdfDateStringRegex.exec(input);
    if (!matches) {
      return null;
    }
    const year = parseInt(matches[1], 10);
    let month = parseInt(matches[2], 10);
    month = month >= 1 && month <= 12 ? month - 1 : 0;
    let day = parseInt(matches[3], 10);
    day = day >= 1 && day <= 31 ? day : 1;
    let hour = parseInt(matches[4], 10);
    hour = hour >= 0 && hour <= 23 ? hour : 0;
    let minute = parseInt(matches[5], 10);
    minute = minute >= 0 && minute <= 59 ? minute : 0;
    let second = parseInt(matches[6], 10);
    second = second >= 0 && second <= 59 ? second : 0;
    const universalTimeRelation = matches[7] || "Z";
    let offsetHour = parseInt(matches[8], 10);
    offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;
    let offsetMinute = parseInt(matches[9], 10) || 0;
    offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;
    if (universalTimeRelation === "-") {
      hour += offsetHour;
      minute += offsetMinute;
    } else if (universalTimeRelation === "+") {
      hour -= offsetHour;
      minute -= offsetMinute;
    }
    return new Date(Date.UTC(year, month, day, hour, minute, second));
  }
}
exports.PDFDateString = PDFDateString;
function getXfaPageViewport(xfaPage, {
  scale = 1,
  rotation = 0
}) {
  const {
    width,
    height
  } = xfaPage.attributes.style;
  const viewBox = [0, 0, parseInt(width), parseInt(height)];
  return new PageViewport({
    viewBox,
    scale,
    rotation
  });
}
function getRGB(color) {
  if (color.startsWith("#")) {
    const colorRGB = parseInt(color.slice(1), 16);
    return [(colorRGB & 0xff0000) >> 16, (colorRGB & 0x00ff00) >> 8, colorRGB & 0x0000ff];
  }
  if (color.startsWith("rgb(")) {
    return color.slice(4, -1).split(",").map(x => parseInt(x));
  }
  if (color.startsWith("rgba(")) {
    return color.slice(5, -1).split(",").map(x => parseInt(x)).slice(0, 3);
  }
  (0, _util.warn)(`Not a valid color format: "${color}"`);
  return [0, 0, 0];
}
function getColorValues(colors) {
  const span = document.createElement("span");
  span.style.visibility = "hidden";
  document.body.append(span);
  for (const name of colors.keys()) {
    span.style.color = name;
    const computedColor = window.getComputedStyle(span).color;
    colors.set(name, getRGB(computedColor));
  }
  span.remove();
}
function getCurrentTransform(ctx) {
  const {
    a,
    b,
    c,
    d,
    e,
    f
  } = ctx.getTransform();
  return [a, b, c, d, e, f];
}
function getCurrentTransformInverse(ctx) {
  const {
    a,
    b,
    c,
    d,
    e,
    f
  } = ctx.getTransform().invertSelf();
  return [a, b, c, d, e, f];
}
function setLayerDimensions(div, viewport, mustFlip = false, mustRotate = true) {
  if (viewport instanceof PageViewport) {
    const {
      pageWidth,
      pageHeight
    } = viewport.rawDims;
    const {
      style
    } = div;
    const useRound = _util.FeatureTest.isCSSRoundSupported;
    const w = `var(--scale-factor) * ${pageWidth}px`,
      h = `var(--scale-factor) * ${pageHeight}px`;
    const widthStr = useRound ? `round(${w}, 1px)` : `calc(${w})`,
      heightStr = useRound ? `round(${h}, 1px)` : `calc(${h})`;
    if (!mustFlip || viewport.rotation % 180 === 0) {
      style.width = widthStr;
      style.height = heightStr;
    } else {
      style.width = heightStr;
      style.height = widthStr;
    }
  }
  if (mustRotate) {
    div.setAttribute("data-main-rotation", viewport.rotation);
  }
}

/***/ }),
/* 7 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.BaseStandardFontDataFactory = exports.BaseSVGFactory = exports.BaseFilterFactory = exports.BaseCanvasFactory = exports.BaseCMapReaderFactory = void 0;
var _util = __w_pdfjs_require__(1);
class BaseFilterFactory {
  constructor() {
    if (this.constructor === BaseFilterFactory) {
      (0, _util.unreachable)("Cannot initialize BaseFilterFactory.");
    }
  }
  addFilter(maps) {
    return "none";
  }
  addHCMFilter(fgColor, bgColor) {
    return "none";
  }
  addHighlightHCMFilter(fgColor, bgColor, newFgColor, newBgColor) {
    return "none";
  }
  destroy(keepHCM = false) {}
}
exports.BaseFilterFactory = BaseFilterFactory;
class BaseCanvasFactory {
  constructor() {
    if (this.constructor === BaseCanvasFactory) {
      (0, _util.unreachable)("Cannot initialize BaseCanvasFactory.");
    }
  }
  create(width, height) {
    if (width <= 0 || height <= 0) {
      throw new Error("Invalid canvas size");
    }
    const canvas = this._createCanvas(width, height);
    return {
      canvas,
      context: canvas.getContext("2d")
    };
  }
  reset(canvasAndContext, width, height) {
    if (!canvasAndContext.canvas) {
      throw new Error("Canvas is not specified");
    }
    if (width <= 0 || height <= 0) {
      throw new Error("Invalid canvas size");
    }
    canvasAndContext.canvas.width = width;
    canvasAndContext.canvas.height = height;
  }
  destroy(canvasAndContext) {
    if (!canvasAndContext.canvas) {
      throw new Error("Canvas is not specified");
    }
    canvasAndContext.canvas.width = 0;
    canvasAndContext.canvas.height = 0;
    canvasAndContext.canvas = null;
    canvasAndContext.context = null;
  }
  _createCanvas(width, height) {
    (0, _util.unreachable)("Abstract method `_createCanvas` called.");
  }
}
exports.BaseCanvasFactory = BaseCanvasFactory;
class BaseCMapReaderFactory {
  constructor({
    baseUrl = null,
    isCompressed = true
  }) {
    if (this.constructor === BaseCMapReaderFactory) {
      (0, _util.unreachable)("Cannot initialize BaseCMapReaderFactory.");
    }
    this.baseUrl = baseUrl;
    this.isCompressed = isCompressed;
  }
  async fetch({
    name
  }) {
    if (!this.baseUrl) {
      throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.');
    }
    if (!name) {
      throw new Error("CMap name must be specified.");
    }
    const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : "");
    const compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE;
    return this._fetchData(url, compressionType).catch(reason => {
      throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`);
    });
  }
  _fetchData(url, compressionType) {
    (0, _util.unreachable)("Abstract method `_fetchData` called.");
  }
}
exports.BaseCMapReaderFactory = BaseCMapReaderFactory;
class BaseStandardFontDataFactory {
  constructor({
    baseUrl = null
  }) {
    if (this.constructor === BaseStandardFontDataFactory) {
      (0, _util.unreachable)("Cannot initialize BaseStandardFontDataFactory.");
    }
    this.baseUrl = baseUrl;
  }
  async fetch({
    filename
  }) {
    if (!this.baseUrl) {
      throw new Error('The standard font "baseUrl" parameter must be specified, ensure that ' + 'the "standardFontDataUrl" API parameter is provided.');
    }
    if (!filename) {
      throw new Error("Font filename must be specified.");
    }
    const url = `${this.baseUrl}${filename}`;
    return this._fetchData(url).catch(reason => {
      throw new Error(`Unable to load font data at: ${url}`);
    });
  }
  _fetchData(url) {
    (0, _util.unreachable)("Abstract method `_fetchData` called.");
  }
}
exports.BaseStandardFontDataFactory = BaseStandardFontDataFactory;
class BaseSVGFactory {
  constructor() {
    if (this.constructor === BaseSVGFactory) {
      (0, _util.unreachable)("Cannot initialize BaseSVGFactory.");
    }
  }
  create(width, height, skipDimensions = false) {
    if (width <= 0 || height <= 0) {
      throw new Error("Invalid SVG dimensions");
    }
    const svg = this._createSVG("svg:svg");
    svg.setAttribute("version", "1.1");
    if (!skipDimensions) {
      svg.setAttribute("width", `${width}px`);
      svg.setAttribute("height", `${height}px`);
    }
    svg.setAttribute("preserveAspectRatio", "none");
    svg.setAttribute("viewBox", `0 0 ${width} ${height}`);
    return svg;
  }
  createElement(type) {
    if (typeof type !== "string") {
      throw new Error("Invalid SVG element type");
    }
    return this._createSVG(type);
  }
  _createSVG(type) {
    (0, _util.unreachable)("Abstract method `_createSVG` called.");
  }
}
exports.BaseSVGFactory = BaseSVGFactory;

/***/ }),
/* 8 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.MurmurHash3_64 = void 0;
var _util = __w_pdfjs_require__(1);
const SEED = 0xc3d2e1f0;
const MASK_HIGH = 0xffff0000;
const MASK_LOW = 0xffff;
class MurmurHash3_64 {
  constructor(seed) {
    this.h1 = seed ? seed & 0xffffffff : SEED;
    this.h2 = seed ? seed & 0xffffffff : SEED;
  }
  update(input) {
    let data, length;
    if (typeof input === "string") {
      data = new Uint8Array(input.length * 2);
      length = 0;
      for (let i = 0, ii = input.length; i < ii; i++) {
        const code = input.charCodeAt(i);
        if (code <= 0xff) {
          data[length++] = code;
        } else {
          data[length++] = code >>> 8;
          data[length++] = code & 0xff;
        }
      }
    } else if ((0, _util.isArrayBuffer)(input)) {
      data = input.slice();
      length = data.byteLength;
    } else {
      throw new Error("Wrong data format in MurmurHash3_64_update. " + "Input must be a string or array.");
    }
    const blockCounts = length >> 2;
    const tailLength = length - blockCounts * 4;
    const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts);
    let k1 = 0,
      k2 = 0;
    let h1 = this.h1,
      h2 = this.h2;
    const C1 = 0xcc9e2d51,
      C2 = 0x1b873593;
    const C1_LOW = C1 & MASK_LOW,
      C2_LOW = C2 & MASK_LOW;
    for (let i = 0; i < blockCounts; i++) {
      if (i & 1) {
        k1 = dataUint32[i];
        k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;
        k1 = k1 << 15 | k1 >>> 17;
        k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;
        h1 ^= k1;
        h1 = h1 << 13 | h1 >>> 19;
        h1 = h1 * 5 + 0xe6546b64;
      } else {
        k2 = dataUint32[i];
        k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW;
        k2 = k2 << 15 | k2 >>> 17;
        k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW;
        h2 ^= k2;
        h2 = h2 << 13 | h2 >>> 19;
        h2 = h2 * 5 + 0xe6546b64;
      }
    }
    k1 = 0;
    switch (tailLength) {
      case 3:
        k1 ^= data[blockCounts * 4 + 2] << 16;
      case 2:
        k1 ^= data[blockCounts * 4 + 1] << 8;
      case 1:
        k1 ^= data[blockCounts * 4];
        k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;
        k1 = k1 << 15 | k1 >>> 17;
        k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;
        if (blockCounts & 1) {
          h1 ^= k1;
        } else {
          h2 ^= k1;
        }
    }
    this.h1 = h1;
    this.h2 = h2;
  }
  hexdigest() {
    let h1 = this.h1,
      h2 = this.h2;
    h1 ^= h2 >>> 1;
    h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW;
    h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16;
    h1 ^= h2 >>> 1;
    h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW;
    h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16;
    h1 ^= h2 >>> 1;
    return (h1 >>> 0).toString(16).padStart(8, "0") + (h2 >>> 0).toString(16).padStart(8, "0");
  }
}
exports.MurmurHash3_64 = MurmurHash3_64;

/***/ }),
/* 9 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.FontLoader = exports.FontFaceObject = void 0;
var _util = __w_pdfjs_require__(1);
class FontLoader {
  #systemFonts = new Set();
  constructor({
    ownerDocument = globalThis.document,
    styleElement = null
  }) {
    this._document = ownerDocument;
    this.nativeFontFaces = new Set();
    this.styleElement = null;
    this.loadingRequests = [];
    this.loadTestFontId = 0;
  }
  addNativeFontFace(nativeFontFace) {
    this.nativeFontFaces.add(nativeFontFace);
    this._document.fonts.add(nativeFontFace);
  }
  removeNativeFontFace(nativeFontFace) {
    this.nativeFontFaces.delete(nativeFontFace);
    this._document.fonts.delete(nativeFontFace);
  }
  insertRule(rule) {
    if (!this.styleElement) {
      this.styleElement = this._document.createElement("style");
      this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement);
    }
    const styleSheet = this.styleElement.sheet;
    styleSheet.insertRule(rule, styleSheet.cssRules.length);
  }
  clear() {
    for (const nativeFontFace of this.nativeFontFaces) {
      this._document.fonts.delete(nativeFontFace);
    }
    this.nativeFontFaces.clear();
    this.#systemFonts.clear();
    if (this.styleElement) {
      this.styleElement.remove();
      this.styleElement = null;
    }
  }
  async loadSystemFont(info) {
    if (!info || this.#systemFonts.has(info.loadedName)) {
      return;
    }
    (0, _util.assert)(!this.disableFontFace, "loadSystemFont shouldn't be called when `disableFontFace` is set.");
    if (this.isFontLoadingAPISupported) {
      const {
        loadedName,
        src,
        style
      } = info;
      const fontFace = new FontFace(loadedName, src, style);
      this.addNativeFontFace(fontFace);
      try {
        await fontFace.load();
        this.#systemFonts.add(loadedName);
      } catch {
        (0, _util.warn)(`Cannot load system font: ${info.baseFontName}, installing it could help to improve PDF rendering.`);
        this.removeNativeFontFace(fontFace);
      }
      return;
    }
    (0, _util.unreachable)("Not implemented: loadSystemFont without the Font Loading API.");
  }
  async bind(font) {
    if (font.attached || font.missingFile && !font.systemFontInfo) {
      return;
    }
    font.attached = true;
    if (font.systemFontInfo) {
      await this.loadSystemFont(font.systemFontInfo);
      return;
    }
    if (this.isFontLoadingAPISupported) {
      const nativeFontFace = font.createNativeFontFace();
      if (nativeFontFace) {
        this.addNativeFontFace(nativeFontFace);
        try {
          await nativeFontFace.loaded;
        } catch (ex) {
          (0, _util.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);
          font.disableFontFace = true;
          throw ex;
        }
      }
      return;
    }
    const rule = font.createFontFaceRule();
    if (rule) {
      this.insertRule(rule);
      if (this.isSyncFontLoadingSupported) {
        return;
      }
      await new Promise(resolve => {
        const request = this._queueLoadingCallback(resolve);
        this._prepareFontLoadEvent(font, request);
      });
    }
  }
  get isFontLoadingAPISupported() {
    const hasFonts = !!this._document?.fonts;
    return (0, _util.shadow)(this, "isFontLoadingAPISupported", hasFonts);
  }
  get isSyncFontLoadingSupported() {
    let supported = false;
    if (_util.isNodeJS) {
      supported = true;
    } else if (typeof navigator !== "undefined" && /Mozilla\/5.0.*?rv:\d+.*? Gecko/.test(navigator.userAgent)) {
      supported = true;
    }
    return (0, _util.shadow)(this, "isSyncFontLoadingSupported", supported);
  }
  _queueLoadingCallback(callback) {
    function completeRequest() {
      (0, _util.assert)(!request.done, "completeRequest() cannot be called twice.");
      request.done = true;
      while (loadingRequests.length > 0 && loadingRequests[0].done) {
        const otherRequest = loadingRequests.shift();
        setTimeout(otherRequest.callback, 0);
      }
    }
    const {
      loadingRequests
    } = this;
    const request = {
      done: false,
      complete: completeRequest,
      callback
    };
    loadingRequests.push(request);
    return request;
  }
  get _loadTestFont() {
    const testFont = atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA" + "FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA" + "ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA" + "AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1" + "AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD" + "6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM" + "AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D" + "IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA" + "AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA" + "AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB" + "AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY" + "AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA" + "AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA" + "AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC" + "AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3" + "Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj" + "FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");
    return (0, _util.shadow)(this, "_loadTestFont", testFont);
  }
  _prepareFontLoadEvent(font, request) {
    function int32(data, offset) {
      return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;
    }
    function spliceString(s, offset, remove, insert) {
      const chunk1 = s.substring(0, offset);
      const chunk2 = s.substring(offset + remove);
      return chunk1 + insert + chunk2;
    }
    let i, ii;
    const canvas = this._document.createElement("canvas");
    canvas.width = 1;
    canvas.height = 1;
    const ctx = canvas.getContext("2d");
    let called = 0;
    function isFontReady(name, callback) {
      if (++called > 30) {
        (0, _util.warn)("Load test font never loaded.");
        callback();
        return;
      }
      ctx.font = "30px " + name;
      ctx.fillText(".", 0, 20);
      const imageData = ctx.getImageData(0, 0, 1, 1);
      if (imageData.data[3] > 0) {
        callback();
        return;
      }
      setTimeout(isFontReady.bind(null, name, callback));
    }
    const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`;
    let data = this._loadTestFont;
    const COMMENT_OFFSET = 976;
    data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId);
    const CFF_CHECKSUM_OFFSET = 16;
    const XXXX_VALUE = 0x58585858;
    let checksum = int32(data, CFF_CHECKSUM_OFFSET);
    for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {
      checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;
    }
    if (i < loadTestFontId.length) {
      checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0;
    }
    data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum));
    const url = `url(data:font/opentype;base64,${btoa(data)});`;
    const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`;
    this.insertRule(rule);
    const div = this._document.createElement("div");
    div.style.visibility = "hidden";
    div.style.width = div.style.height = "10px";
    div.style.position = "absolute";
    div.style.top = div.style.left = "0px";
    for (const name of [font.loadedName, loadTestFontId]) {
      const span = this._document.createElement("span");
      span.textContent = "Hi";
      span.style.fontFamily = name;
      div.append(span);
    }
    this._document.body.append(div);
    isFontReady(loadTestFontId, () => {
      div.remove();
      request.complete();
    });
  }
}
exports.FontLoader = FontLoader;
class FontFaceObject {
  constructor(translatedData, {
    isEvalSupported = true,
    disableFontFace = false,
    ignoreErrors = false,
    inspectFont = null
  }) {
    this.compiledGlyphs = Object.create(null);
    for (const i in translatedData) {
      this[i] = translatedData[i];
    }
    this.isEvalSupported = isEvalSupported !== false;
    this.disableFontFace = disableFontFace === true;
    this.ignoreErrors = ignoreErrors === true;
    this._inspectFont = inspectFont;
  }
  createNativeFontFace() {
    if (!this.data || this.disableFontFace) {
      return null;
    }
    let nativeFontFace;
    if (!this.cssFontInfo) {
      nativeFontFace = new FontFace(this.loadedName, this.data, {});
    } else {
      const css = {
        weight: this.cssFontInfo.fontWeight
      };
      if (this.cssFontInfo.italicAngle) {
        css.style = `oblique ${this.cssFontInfo.italicAngle}deg`;
      }
      nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css);
    }
    this._inspectFont?.(this);
    return nativeFontFace;
  }
  createFontFaceRule() {
    if (!this.data || this.disableFontFace) {
      return null;
    }
    const data = (0, _util.bytesToString)(this.data);
    const url = `url(data:${this.mimetype};base64,${btoa(data)});`;
    let rule;
    if (!this.cssFontInfo) {
      rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`;
    } else {
      let css = `font-weight: ${this.cssFontInfo.fontWeight};`;
      if (this.cssFontInfo.italicAngle) {
        css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`;
      }
      rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css}src:${url}}`;
    }
    this._inspectFont?.(this, url);
    return rule;
  }
  getPathGenerator(objs, character) {
    if (this.compiledGlyphs[character] !== undefined) {
      return this.compiledGlyphs[character];
    }
    let cmds;
    try {
      cmds = objs.get(this.loadedName + "_path_" + character);
    } catch (ex) {
      if (!this.ignoreErrors) {
        throw ex;
      }
      (0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`);
      return this.compiledGlyphs[character] = function (c, size) {};
    }
    if (this.isEvalSupported && _util.FeatureTest.isEvalSupported) {
      const jsBuf = [];
      for (const current of cmds) {
        const args = current.args !== undefined ? current.args.join(",") : "";
        jsBuf.push("c.", current.cmd, "(", args, ");\n");
      }
      return this.compiledGlyphs[character] = new Function("c", "size", jsBuf.join(""));
    }
    return this.compiledGlyphs[character] = function (c, size) {
      for (const current of cmds) {
        if (current.cmd === "scale") {
          current.args = [size, -size];
        }
        c[current.cmd].apply(c, current.args);
      }
    };
  }
}
exports.FontFaceObject = FontFaceObject;

/***/ }),
/* 10 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.NodeStandardFontDataFactory = exports.NodeFilterFactory = exports.NodeCanvasFactory = exports.NodeCMapReaderFactory = void 0;
var _base_factory = __w_pdfjs_require__(7);
var _util = __w_pdfjs_require__(1);
;
;
const fetchData = function (url) {
  return new Promise((resolve, reject) => {
    const fs = __webpack_require__(172);
    fs.readFile(url, (error, data) => {
      if (error || !data) {
        reject(new Error(error));
        return;
      }
      resolve(new Uint8Array(data));
    });
  });
};
class NodeFilterFactory extends _base_factory.BaseFilterFactory {}
exports.NodeFilterFactory = NodeFilterFactory;
class NodeCanvasFactory extends _base_factory.BaseCanvasFactory {
  _createCanvas(width, height) {
    const Canvas = __webpack_require__(3414);
    return Canvas.createCanvas(width, height);
  }
}
exports.NodeCanvasFactory = NodeCanvasFactory;
class NodeCMapReaderFactory extends _base_factory.BaseCMapReaderFactory {
  _fetchData(url, compressionType) {
    return fetchData(url).then(data => {
      return {
        cMapData: data,
        compressionType
      };
    });
  }
}
exports.NodeCMapReaderFactory = NodeCMapReaderFactory;
class NodeStandardFontDataFactory extends _base_factory.BaseStandardFontDataFactory {
  _fetchData(url) {
    return fetchData(url);
  }
}
exports.NodeStandardFontDataFactory = NodeStandardFontDataFactory;

/***/ }),
/* 11 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.CanvasGraphics = void 0;
var _util = __w_pdfjs_require__(1);
var _display_utils = __w_pdfjs_require__(6);
var _pattern_helper = __w_pdfjs_require__(12);
var _image_utils = __w_pdfjs_require__(13);
const MIN_FONT_SIZE = 16;
const MAX_FONT_SIZE = 100;
const MAX_GROUP_SIZE = 4096;
const EXECUTION_TIME = 15;
const EXECUTION_STEPS = 10;
const MAX_SIZE_TO_COMPILE = 1000;
const FULL_CHUNK_HEIGHT = 16;
function mirrorContextOperations(ctx, destCtx) {
  if (ctx._removeMirroring) {
    throw new Error("Context is already forwarding operations.");
  }
  ctx.__originalSave = ctx.save;
  ctx.__originalRestore = ctx.restore;
  ctx.__originalRotate = ctx.rotate;
  ctx.__originalScale = ctx.scale;
  ctx.__originalTranslate = ctx.translate;
  ctx.__originalTransform = ctx.transform;
  ctx.__originalSetTransform = ctx.setTransform;
  ctx.__originalResetTransform = ctx.resetTransform;
  ctx.__originalClip = ctx.clip;
  ctx.__originalMoveTo = ctx.moveTo;
  ctx.__originalLineTo = ctx.lineTo;
  ctx.__originalBezierCurveTo = ctx.bezierCurveTo;
  ctx.__originalRect = ctx.rect;
  ctx.__originalClosePath = ctx.closePath;
  ctx.__originalBeginPath = ctx.beginPath;
  ctx._removeMirroring = () => {
    ctx.save = ctx.__originalSave;
    ctx.restore = ctx.__originalRestore;
    ctx.rotate = ctx.__originalRotate;
    ctx.scale = ctx.__originalScale;
    ctx.translate = ctx.__originalTranslate;
    ctx.transform = ctx.__originalTransform;
    ctx.setTransform = ctx.__originalSetTransform;
    ctx.resetTransform = ctx.__originalResetTransform;
    ctx.clip = ctx.__originalClip;
    ctx.moveTo = ctx.__originalMoveTo;
    ctx.lineTo = ctx.__originalLineTo;
    ctx.bezierCurveTo = ctx.__originalBezierCurveTo;
    ctx.rect = ctx.__originalRect;
    ctx.closePath = ctx.__originalClosePath;
    ctx.beginPath = ctx.__originalBeginPath;
    delete ctx._removeMirroring;
  };
  ctx.save = function ctxSave() {
    destCtx.save();
    this.__originalSave();
  };
  ctx.restore = function ctxRestore() {
    destCtx.restore();
    this.__originalRestore();
  };
  ctx.translate = function ctxTranslate(x, y) {
    destCtx.translate(x, y);
    this.__originalTranslate(x, y);
  };
  ctx.scale = function ctxScale(x, y) {
    destCtx.scale(x, y);
    this.__originalScale(x, y);
  };
  ctx.transform = function ctxTransform(a, b, c, d, e, f) {
    destCtx.transform(a, b, c, d, e, f);
    this.__originalTransform(a, b, c, d, e, f);
  };
  ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {
    destCtx.setTransform(a, b, c, d, e, f);
    this.__originalSetTransform(a, b, c, d, e, f);
  };
  ctx.resetTransform = function ctxResetTransform() {
    destCtx.resetTransform();
    this.__originalResetTransform();
  };
  ctx.rotate = function ctxRotate(angle) {
    destCtx.rotate(angle);
    this.__originalRotate(angle);
  };
  ctx.clip = function ctxRotate(rule) {
    destCtx.clip(rule);
    this.__originalClip(rule);
  };
  ctx.moveTo = function (x, y) {
    destCtx.moveTo(x, y);
    this.__originalMoveTo(x, y);
  };
  ctx.lineTo = function (x, y) {
    destCtx.lineTo(x, y);
    this.__originalLineTo(x, y);
  };
  ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) {
    destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
    this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
  };
  ctx.rect = function (x, y, width, height) {
    destCtx.rect(x, y, width, height);
    this.__originalRect(x, y, width, height);
  };
  ctx.closePath = function () {
    destCtx.closePath();
    this.__originalClosePath();
  };
  ctx.beginPath = function () {
    destCtx.beginPath();
    this.__originalBeginPath();
  };
}
class CachedCanvases {
  constructor(canvasFactory) {
    this.canvasFactory = canvasFactory;
    this.cache = Object.create(null);
  }
  getCanvas(id, width, height) {
    let canvasEntry;
    if (this.cache[id] !== undefined) {
      canvasEntry = this.cache[id];
      this.canvasFactory.reset(canvasEntry, width, height);
    } else {
      canvasEntry = this.canvasFactory.create(width, height);
      this.cache[id] = canvasEntry;
    }
    return canvasEntry;
  }
  delete(id) {
    delete this.cache[id];
  }
  clear() {
    for (const id in this.cache) {
      const canvasEntry = this.cache[id];
      this.canvasFactory.destroy(canvasEntry);
      delete this.cache[id];
    }
  }
}
function drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) {
  const [a, b, c, d, tx, ty] = (0, _display_utils.getCurrentTransform)(ctx);
  if (b === 0 && c === 0) {
    const tlX = destX * a + tx;
    const rTlX = Math.round(tlX);
    const tlY = destY * d + ty;
    const rTlY = Math.round(tlY);
    const brX = (destX + destW) * a + tx;
    const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;
    const brY = (destY + destH) * d + ty;
    const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;
    ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY);
    ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight);
    ctx.setTransform(a, b, c, d, tx, ty);
    return [rWidth, rHeight];
  }
  if (a === 0 && d === 0) {
    const tlX = destY * c + tx;
    const rTlX = Math.round(tlX);
    const tlY = destX * b + ty;
    const rTlY = Math.round(tlY);
    const brX = (destY + destH) * c + tx;
    const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;
    const brY = (destX + destW) * b + ty;
    const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;
    ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY);
    ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth);
    ctx.setTransform(a, b, c, d, tx, ty);
    return [rHeight, rWidth];
  }
  ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH);
  const scaleX = Math.hypot(a, b);
  const scaleY = Math.hypot(c, d);
  return [scaleX * destW, scaleY * destH];
}
function compileType3Glyph(imgData) {
  const {
    width,
    height
  } = imgData;
  if (width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE) {
    return null;
  }
  const POINT_TO_PROCESS_LIMIT = 1000;
  const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]);
  const width1 = width + 1;
  let points = new Uint8Array(width1 * (height + 1));
  let i, j, j0;
  const lineSize = width + 7 & ~7;
  let data = new Uint8Array(lineSize * height),
    pos = 0;
  for (const elem of imgData.data) {
    let mask = 128;
    while (mask > 0) {
      data[pos++] = elem & mask ? 0 : 255;
      mask >>= 1;
    }
  }
  let count = 0;
  pos = 0;
  if (data[pos] !== 0) {
    points[0] = 1;
    ++count;
  }
  for (j = 1; j < width; j++) {
    if (data[pos] !== data[pos + 1]) {
      points[j] = data[pos] ? 2 : 1;
      ++count;
    }
    pos++;
  }
  if (data[pos] !== 0) {
    points[j] = 2;
    ++count;
  }
  for (i = 1; i < height; i++) {
    pos = i * lineSize;
    j0 = i * width1;
    if (data[pos - lineSize] !== data[pos]) {
      points[j0] = data[pos] ? 1 : 8;
      ++count;
    }
    let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);
    for (j = 1; j < width; j++) {
      sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0);
      if (POINT_TYPES[sum]) {
        points[j0 + j] = POINT_TYPES[sum];
        ++count;
      }
      pos++;
    }
    if (data[pos - lineSize] !== data[pos]) {
      points[j0 + j] = data[pos] ? 2 : 4;
      ++count;
    }
    if (count > POINT_TO_PROCESS_LIMIT) {
      return null;
    }
  }
  pos = lineSize * (height - 1);
  j0 = i * width1;
  if (data[pos] !== 0) {
    points[j0] = 8;
    ++count;
  }
  for (j = 1; j < width; j++) {
    if (data[pos] !== data[pos + 1]) {
      points[j0 + j] = data[pos] ? 4 : 8;
      ++count;
    }
    pos++;
  }
  if (data[pos] !== 0) {
    points[j0 + j] = 4;
    ++count;
  }
  if (count > POINT_TO_PROCESS_LIMIT) {
    return null;
  }
  const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);
  const path = new Path2D();
  for (i = 0; count && i <= height; i++) {
    let p = i * width1;
    const end = p + width;
    while (p < end && !points[p]) {
      p++;
    }
    if (p === end) {
      continue;
    }
    path.moveTo(p % width1, i);
    const p0 = p;
    let type = points[p];
    do {
      const step = steps[type];
      do {
        p += step;
      } while (!points[p]);
      const pp = points[p];
      if (pp !== 5 && pp !== 10) {
        type = pp;
        points[p] = 0;
      } else {
        type = pp & 0x33 * type >> 4;
        points[p] &= type >> 2 | type << 2;
      }
      path.lineTo(p % width1, p / width1 | 0);
      if (!points[p]) {
        --count;
      }
    } while (p0 !== p);
    --i;
  }
  data = null;
  points = null;
  const drawOutline = function (c) {
    c.save();
    c.scale(1 / width, -1 / height);
    c.translate(0, -height);
    c.fill(path);
    c.beginPath();
    c.restore();
  };
  return drawOutline;
}
class CanvasExtraState {
  constructor(width, height) {
    this.alphaIsShape = false;
    this.fontSize = 0;
    this.fontSizeScale = 1;
    this.textMatrix = _util.IDENTITY_MATRIX;
    this.textMatrixScale = 1;
    this.fontMatrix = _util.FONT_IDENTITY_MATRIX;
    this.leading = 0;
    this.x = 0;
    this.y = 0;
    this.lineX = 0;
    this.lineY = 0;
    this.charSpacing = 0;
    this.wordSpacing = 0;
    this.textHScale = 1;
    this.textRenderingMode = _util.TextRenderingMode.FILL;
    this.textRise = 0;
    this.fillColor = "#000000";
    this.strokeColor = "#000000";
    this.patternFill = false;
    this.fillAlpha = 1;
    this.strokeAlpha = 1;
    this.lineWidth = 1;
    this.activeSMask = null;
    this.transferMaps = "none";
    this.startNewPathAndClipBox([0, 0, width, height]);
  }
  clone() {
    const clone = Object.create(this);
    clone.clipBox = this.clipBox.slice();
    return clone;
  }
  setCurrentPoint(x, y) {
    this.x = x;
    this.y = y;
  }
  updatePathMinMax(transform, x, y) {
    [x, y] = _util.Util.applyTransform([x, y], transform);
    this.minX = Math.min(this.minX, x);
    this.minY = Math.min(this.minY, y);
    this.maxX = Math.max(this.maxX, x);
    this.maxY = Math.max(this.maxY, y);
  }
  updateRectMinMax(transform, rect) {
    const p1 = _util.Util.applyTransform(rect, transform);
    const p2 = _util.Util.applyTransform(rect.slice(2), transform);
    this.minX = Math.min(this.minX, p1[0], p2[0]);
    this.minY = Math.min(this.minY, p1[1], p2[1]);
    this.maxX = Math.max(this.maxX, p1[0], p2[0]);
    this.maxY = Math.max(this.maxY, p1[1], p2[1]);
  }
  updateScalingPathMinMax(transform, minMax) {
    _util.Util.scaleMinMax(transform, minMax);
    this.minX = Math.min(this.minX, minMax[0]);
    this.maxX = Math.max(this.maxX, minMax[1]);
    this.minY = Math.min(this.minY, minMax[2]);
    this.maxY = Math.max(this.maxY, minMax[3]);
  }
  updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3, minMax) {
    const box = _util.Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3);
    if (minMax) {
      minMax[0] = Math.min(minMax[0], box[0], box[2]);
      minMax[1] = Math.max(minMax[1], box[0], box[2]);
      minMax[2] = Math.min(minMax[2], box[1], box[3]);
      minMax[3] = Math.max(minMax[3], box[1], box[3]);
      return;
    }
    this.updateRectMinMax(transform, box);
  }
  getPathBoundingBox(pathType = _pattern_helper.PathType.FILL, transform = null) {
    const box = [this.minX, this.minY, this.maxX, this.maxY];
    if (pathType === _pattern_helper.PathType.STROKE) {
      if (!transform) {
        (0, _util.unreachable)("Stroke bounding box must include transform.");
      }
      const scale = _util.Util.singularValueDecompose2dScale(transform);
      const xStrokePad = scale[0] * this.lineWidth / 2;
      const yStrokePad = scale[1] * this.lineWidth / 2;
      box[0] -= xStrokePad;
      box[1] -= yStrokePad;
      box[2] += xStrokePad;
      box[3] += yStrokePad;
    }
    return box;
  }
  updateClipFromPath() {
    const intersect = _util.Util.intersect(this.clipBox, this.getPathBoundingBox());
    this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]);
  }
  isEmptyClip() {
    return this.minX === Infinity;
  }
  startNewPathAndClipBox(box) {
    this.clipBox = box;
    this.minX = Infinity;
    this.minY = Infinity;
    this.maxX = 0;
    this.maxY = 0;
  }
  getClippedPathBoundingBox(pathType = _pattern_helper.PathType.FILL, transform = null) {
    return _util.Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform));
  }
}
function putBinaryImageData(ctx, imgData) {
  if (typeof ImageData !== "undefined" && imgData instanceof ImageData) {
    ctx.putImageData(imgData, 0, 0);
    return;
  }
  const height = imgData.height,
    width = imgData.width;
  const partialChunkHeight = height % FULL_CHUNK_HEIGHT;
  const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
  const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
  const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
  let srcPos = 0,
    destPos;
  const src = imgData.data;
  const dest = chunkImgData.data;
  let i, j, thisChunkHeight, elemsInThisChunk;
  if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) {
    const srcLength = src.byteLength;
    const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);
    const dest32DataLength = dest32.length;
    const fullSrcDiff = width + 7 >> 3;
    const white = 0xffffffff;
    const black = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;
    for (i = 0; i < totalChunks; i++) {
      thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
      destPos = 0;
      for (j = 0; j < thisChunkHeight; j++) {
        const srcDiff = srcLength - srcPos;
        let k = 0;
        const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;
        const kEndUnrolled = kEnd & ~7;
        let mask = 0;
        let srcByte = 0;
        for (; k < kEndUnrolled; k += 8) {
          srcByte = src[srcPos++];
          dest32[destPos++] = srcByte & 128 ? white : black;
          dest32[destPos++] = srcByte & 64 ? white : black;
          dest32[destPos++] = srcByte & 32 ? white : black;
          dest32[destPos++] = srcByte & 16 ? white : black;
          dest32[destPos++] = srcByte & 8 ? white : black;
          dest32[destPos++] = srcByte & 4 ? white : black;
          dest32[destPos++] = srcByte & 2 ? white : black;
          dest32[destPos++] = srcByte & 1 ? white : black;
        }
        for (; k < kEnd; k++) {
          if (mask === 0) {
            srcByte = src[srcPos++];
            mask = 128;
          }
          dest32[destPos++] = srcByte & mask ? white : black;
          mask >>= 1;
        }
      }
      while (destPos < dest32DataLength) {
        dest32[destPos++] = 0;
      }
      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
    }
  } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) {
    j = 0;
    elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;
    for (i = 0; i < fullChunks; i++) {
      dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
      srcPos += elemsInThisChunk;
      ctx.putImageData(chunkImgData, 0, j);
      j += FULL_CHUNK_HEIGHT;
    }
    if (i < totalChunks) {
      elemsInThisChunk = width * partialChunkHeight * 4;
      dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
      ctx.putImageData(chunkImgData, 0, j);
    }
  } else if (imgData.kind === _util.ImageKind.RGB_24BPP) {
    thisChunkHeight = FULL_CHUNK_HEIGHT;
    elemsInThisChunk = width * thisChunkHeight;
    for (i = 0; i < totalChunks; i++) {
      if (i >= fullChunks) {
        thisChunkHeight = partialChunkHeight;
        elemsInThisChunk = width * thisChunkHeight;
      }
      destPos = 0;
      for (j = elemsInThisChunk; j--;) {
        dest[destPos++] = src[srcPos++];
        dest[destPos++] = src[srcPos++];
        dest[destPos++] = src[srcPos++];
        dest[destPos++] = 255;
      }
      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
    }
  } else {
    throw new Error(`bad image kind: ${imgData.kind}`);
  }
}
function putBinaryImageMask(ctx, imgData) {
  if (imgData.bitmap) {
    ctx.drawImage(imgData.bitmap, 0, 0);
    return;
  }
  const height = imgData.height,
    width = imgData.width;
  const partialChunkHeight = height % FULL_CHUNK_HEIGHT;
  const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
  const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
  const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
  let srcPos = 0;
  const src = imgData.data;
  const dest = chunkImgData.data;
  for (let i = 0; i < totalChunks; i++) {
    const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
    ({
      srcPos
    } = (0, _image_utils.convertBlackAndWhiteToRGBA)({
      src,
      srcPos,
      dest,
      width,
      height: thisChunkHeight,
      nonBlackColor: 0
    }));
    ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
  }
}
function copyCtxState(sourceCtx, destCtx) {
  const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font", "filter"];
  for (const property of properties) {
    if (sourceCtx[property] !== undefined) {
      destCtx[property] = sourceCtx[property];
    }
  }
  if (sourceCtx.setLineDash !== undefined) {
    destCtx.setLineDash(sourceCtx.getLineDash());
    destCtx.lineDashOffset = sourceCtx.lineDashOffset;
  }
}
function resetCtxToDefault(ctx) {
  ctx.strokeStyle = ctx.fillStyle = "#000000";
  ctx.fillRule = "nonzero";
  ctx.globalAlpha = 1;
  ctx.lineWidth = 1;
  ctx.lineCap = "butt";
  ctx.lineJoin = "miter";
  ctx.miterLimit = 10;
  ctx.globalCompositeOperation = "source-over";
  ctx.font = "10px sans-serif";
  if (ctx.setLineDash !== undefined) {
    ctx.setLineDash([]);
    ctx.lineDashOffset = 0;
  }
  if (!_util.isNodeJS) {
    const {
      filter
    } = ctx;
    if (filter !== "none" && filter !== "") {
      ctx.filter = "none";
    }
  }
}
function composeSMaskBackdrop(bytes, r0, g0, b0) {
  const length = bytes.length;
  for (let i = 3; i < length; i += 4) {
    const alpha = bytes[i];
    if (alpha === 0) {
      bytes[i - 3] = r0;
      bytes[i - 2] = g0;
      bytes[i - 1] = b0;
    } else if (alpha < 255) {
      const alpha_ = 255 - alpha;
      bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8;
      bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8;
      bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8;
    }
  }
}
function composeSMaskAlpha(maskData, layerData, transferMap) {
  const length = maskData.length;
  const scale = 1 / 255;
  for (let i = 3; i < length; i += 4) {
    const alpha = transferMap ? transferMap[maskData[i]] : maskData[i];
    layerData[i] = layerData[i] * alpha * scale | 0;
  }
}
function composeSMaskLuminosity(maskData, layerData, transferMap) {
  const length = maskData.length;
  for (let i = 3; i < length; i += 4) {
    const y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28;
    layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16;
  }
}
function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) {
  const hasBackdrop = !!backdrop;
  const r0 = hasBackdrop ? backdrop[0] : 0;
  const g0 = hasBackdrop ? backdrop[1] : 0;
  const b0 = hasBackdrop ? backdrop[2] : 0;
  const composeFn = subtype === "Luminosity" ? composeSMaskLuminosity : composeSMaskAlpha;
  const PIXELS_TO_PROCESS = 1048576;
  const chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width));
  for (let row = 0; row < height; row += chunkSize) {
    const chunkHeight = Math.min(chunkSize, height - row);
    const maskData = maskCtx.getImageData(layerOffsetX - maskOffsetX, row + (layerOffsetY - maskOffsetY), width, chunkHeight);
    const layerData = layerCtx.getImageData(layerOffsetX, row + layerOffsetY, width, chunkHeight);
    if (hasBackdrop) {
      composeSMaskBackdrop(maskData.data, r0, g0, b0);
    }
    composeFn(maskData.data, layerData.data, transferMap);
    layerCtx.putImageData(layerData, layerOffsetX, row + layerOffsetY);
  }
}
function composeSMask(ctx, smask, layerCtx, layerBox) {
  const layerOffsetX = layerBox[0];
  const layerOffsetY = layerBox[1];
  const layerWidth = layerBox[2] - layerOffsetX;
  const layerHeight = layerBox[3] - layerOffsetY;
  if (layerWidth === 0 || layerHeight === 0) {
    return;
  }
  genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY);
  ctx.save();
  ctx.globalAlpha = 1;
  ctx.globalCompositeOperation = "source-over";
  ctx.setTransform(1, 0, 0, 1, 0, 0);
  ctx.drawImage(layerCtx.canvas, 0, 0);
  ctx.restore();
}
function getImageSmoothingEnabled(transform, interpolate) {
  const scale = _util.Util.singularValueDecompose2dScale(transform);
  scale[0] = Math.fround(scale[0]);
  scale[1] = Math.fround(scale[1]);
  const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS);
  if (interpolate !== undefined) {
    return interpolate;
  } else if (scale[0] <= actualScale || scale[1] <= actualScale) {
    return true;
  }
  return false;
}
const LINE_CAP_STYLES = ["butt", "round", "square"];
const LINE_JOIN_STYLES = ["miter", "round", "bevel"];
const NORMAL_CLIP = {};
const EO_CLIP = {};
class CanvasGraphics {
  constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, {
    optionalContentConfig,
    markedContentStack = null
  }, annotationCanvasMap, pageColors) {
    this.ctx = canvasCtx;
    this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);
    this.stateStack = [];
    this.pendingClip = null;
    this.pendingEOFill = false;
    this.res = null;
    this.xobjs = null;
    this.commonObjs = commonObjs;
    this.objs = objs;
    this.canvasFactory = canvasFactory;
    this.filterFactory = filterFactory;
    this.groupStack = [];
    this.processingType3 = null;
    this.baseTransform = null;
    this.baseTransformStack = [];
    this.groupLevel = 0;
    this.smaskStack = [];
    this.smaskCounter = 0;
    this.tempSMask = null;
    this.suspendedCtx = null;
    this.contentVisible = true;
    this.markedContentStack = markedContentStack || [];
    this.optionalContentConfig = optionalContentConfig;
    this.cachedCanvases = new CachedCanvases(this.canvasFactory);
    this.cachedPatterns = new Map();
    this.annotationCanvasMap = annotationCanvasMap;
    this.viewportScale = 1;
    this.outputScaleX = 1;
    this.outputScaleY = 1;
    this.pageColors = pageColors;
    this._cachedScaleForStroking = [-1, 0];
    this._cachedGetSinglePixelWidth = null;
    this._cachedBitmapsMap = new Map();
  }
  getObject(data, fallback = null) {
    if (typeof data === "string") {
      return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data);
    }
    return fallback;
  }
  beginDrawing({
    transform,
    viewport,
    transparency = false,
    background = null
  }) {
    const width = this.ctx.canvas.width;
    const height = this.ctx.canvas.height;
    const savedFillStyle = this.ctx.fillStyle;
    this.ctx.fillStyle = background || "#ffffff";
    this.ctx.fillRect(0, 0, width, height);
    this.ctx.fillStyle = savedFillStyle;
    if (transparency) {
      const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height);
      this.compositeCtx = this.ctx;
      this.transparentCanvas = transparentCanvas.canvas;
      this.ctx = transparentCanvas.context;
      this.ctx.save();
      this.ctx.transform(...(0, _display_utils.getCurrentTransform)(this.compositeCtx));
    }
    this.ctx.save();
    resetCtxToDefault(this.ctx);
    if (transform) {
      this.ctx.transform(...transform);
      this.outputScaleX = transform[0];
      this.outputScaleY = transform[0];
    }
    this.ctx.transform(...viewport.transform);
    this.viewportScale = viewport.scale;
    this.baseTransform = (0, _display_utils.getCurrentTransform)(this.ctx);
  }
  executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) {
    const argsArray = operatorList.argsArray;
    const fnArray = operatorList.fnArray;
    let i = executionStartIdx || 0;
    const argsArrayLen = argsArray.length;
    if (argsArrayLen === i) {
      return i;
    }
    const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function";
    const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;
    let steps = 0;
    const commonObjs = this.commonObjs;
    const objs = this.objs;
    let fnId;
    while (true) {
      if (stepper !== undefined && i === stepper.nextBreakPoint) {
        stepper.breakIt(i, continueCallback);
        return i;
      }
      fnId = fnArray[i];
      if (fnId !== _util.OPS.dependency) {
        this[fnId].apply(this, argsArray[i]);
      } else {
        for (const depObjId of argsArray[i]) {
          const objsPool = depObjId.startsWith("g_") ? commonObjs : objs;
          if (!objsPool.has(depObjId)) {
            objsPool.get(depObjId, continueCallback);
            return i;
          }
        }
      }
      i++;
      if (i === argsArrayLen) {
        return i;
      }
      if (chunkOperations && ++steps > EXECUTION_STEPS) {
        if (Date.now() > endTime) {
          continueCallback();
          return i;
        }
        steps = 0;
      }
    }
  }
  #restoreInitialState() {
    while (this.stateStack.length || this.inSMaskMode) {
      this.restore();
    }
    this.ctx.restore();
    if (this.transparentCanvas) {
      this.ctx = this.compositeCtx;
      this.ctx.save();
      this.ctx.setTransform(1, 0, 0, 1, 0, 0);
      this.ctx.drawImage(this.transparentCanvas, 0, 0);
      this.ctx.restore();
      this.transparentCanvas = null;
    }
  }
  endDrawing() {
    this.#restoreInitialState();
    this.cachedCanvases.clear();
    this.cachedPatterns.clear();
    for (const cache of this._cachedBitmapsMap.values()) {
      for (const canvas of cache.values()) {
        if (typeof HTMLCanvasElement !== "undefined" && canvas instanceof HTMLCanvasElement) {
          canvas.width = canvas.height = 0;
        }
      }
      cache.clear();
    }
    this._cachedBitmapsMap.clear();
    this.#drawFilter();
  }
  #drawFilter() {
    if (this.pageColors) {
      const hcmFilterId = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background);
      if (hcmFilterId !== "none") {
        const savedFilter = this.ctx.filter;
        this.ctx.filter = hcmFilterId;
        this.ctx.drawImage(this.ctx.canvas, 0, 0);
        this.ctx.filter = savedFilter;
      }
    }
  }
  _scaleImage(img, inverseTransform) {
    const width = img.width;
    const height = img.height;
    let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1);
    let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1);
    let paintWidth = width,
      paintHeight = height;
    let tmpCanvasId = "prescale1";
    let tmpCanvas, tmpCtx;
    while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) {
      let newWidth = paintWidth,
        newHeight = paintHeight;
      if (widthScale > 2 && paintWidth > 1) {
        newWidth = paintWidth >= 16384 ? Math.floor(paintWidth / 2) - 1 || 1 : Math.ceil(paintWidth / 2);
        widthScale /= paintWidth / newWidth;
      }
      if (heightScale > 2 && paintHeight > 1) {
        newHeight = paintHeight >= 16384 ? Math.floor(paintHeight / 2) - 1 || 1 : Math.ceil(paintHeight) / 2;
        heightScale /= paintHeight / newHeight;
      }
      tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight);
      tmpCtx = tmpCanvas.context;
      tmpCtx.clearRect(0, 0, newWidth, newHeight);
      tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight);
      img = tmpCanvas.canvas;
      paintWidth = newWidth;
      paintHeight = newHeight;
      tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1";
    }
    return {
      img,
      paintWidth,
      paintHeight
    };
  }
  _createMaskCanvas(img) {
    const ctx = this.ctx;
    const {
      width,
      height
    } = img;
    const fillColor = this.current.fillColor;
    const isPatternFill = this.current.patternFill;
    const currentTransform = (0, _display_utils.getCurrentTransform)(ctx);
    let cache, cacheKey, scaled, maskCanvas;
    if ((img.bitmap || img.data) && img.count > 1) {
      const mainKey = img.bitmap || img.data.buffer;
      cacheKey = JSON.stringify(isPatternFill ? currentTransform : [currentTransform.slice(0, 4), fillColor]);
      cache = this._cachedBitmapsMap.get(mainKey);
      if (!cache) {
        cache = new Map();
        this._cachedBitmapsMap.set(mainKey, cache);
      }
      const cachedImage = cache.get(cacheKey);
      if (cachedImage && !isPatternFill) {
        const offsetX = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]);
        const offsetY = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]);
        return {
          canvas: cachedImage,
          offsetX,
          offsetY
        };
      }
      scaled = cachedImage;
    }
    if (!scaled) {
      maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
      putBinaryImageMask(maskCanvas.context, img);
    }
    let maskToCanvas = _util.Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]);
    maskToCanvas = _util.Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]);
    const cord1 = _util.Util.applyTransform([0, 0], maskToCanvas);
    const cord2 = _util.Util.applyTransform([width, height], maskToCanvas);
    const rect = _util.Util.normalizeRect([cord1[0], cord1[1], cord2[0], cord2[1]]);
    const drawnWidth = Math.round(rect[2] - rect[0]) || 1;
    const drawnHeight = Math.round(rect[3] - rect[1]) || 1;
    const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight);
    const fillCtx = fillCanvas.context;
    const offsetX = Math.min(cord1[0], cord2[0]);
    const offsetY = Math.min(cord1[1], cord2[1]);
    fillCtx.translate(-offsetX, -offsetY);
    fillCtx.transform(...maskToCanvas);
    if (!scaled) {
      scaled = this._scaleImage(maskCanvas.canvas, (0, _display_utils.getCurrentTransformInverse)(fillCtx));
      scaled = scaled.img;
      if (cache && isPatternFill) {
        cache.set(cacheKey, scaled);
      }
    }
    fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled((0, _display_utils.getCurrentTransform)(fillCtx), img.interpolate);
    drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height);
    fillCtx.globalCompositeOperation = "source-in";
    const inverse = _util.Util.transform((0, _display_utils.getCurrentTransformInverse)(fillCtx), [1, 0, 0, 1, -offsetX, -offsetY]);
    fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, _pattern_helper.PathType.FILL) : fillColor;
    fillCtx.fillRect(0, 0, width, height);
    if (cache && !isPatternFill) {
      this.cachedCanvases.delete("fillCanvas");
      cache.set(cacheKey, fillCanvas.canvas);
    }
    return {
      canvas: fillCanvas.canvas,
      offsetX: Math.round(offsetX),
      offsetY: Math.round(offsetY)
    };
  }
  setLineWidth(width) {
    if (width !== this.current.lineWidth) {
      this._cachedScaleForStroking[0] = -1;
    }
    this.current.lineWidth = width;
    this.ctx.lineWidth = width;
  }
  setLineCap(style) {
    this.ctx.lineCap = LINE_CAP_STYLES[style];
  }
  setLineJoin(style) {
    this.ctx.lineJoin = LINE_JOIN_STYLES[style];
  }
  setMiterLimit(limit) {
    this.ctx.miterLimit = limit;
  }
  setDash(dashArray, dashPhase) {
    const ctx = this.ctx;
    if (ctx.setLineDash !== undefined) {
      ctx.setLineDash(dashArray);
      ctx.lineDashOffset = dashPhase;
    }
  }
  setRenderingIntent(intent) {}
  setFlatness(flatness) {}
  setGState(states) {
    for (const [key, value] of states) {
      switch (key) {
        case "LW":
          this.setLineWidth(value);
          break;
        case "LC":
          this.setLineCap(value);
          break;
        case "LJ":
          this.setLineJoin(value);
          break;
        case "ML":
          this.setMiterLimit(value);
          break;
        case "D":
          this.setDash(value[0], value[1]);
          break;
        case "RI":
          this.setRenderingIntent(value);
          break;
        case "FL":
          this.setFlatness(value);
          break;
        case "Font":
          this.setFont(value[0], value[1]);
          break;
        case "CA":
          this.current.strokeAlpha = value;
          break;
        case "ca":
          this.current.fillAlpha = value;
          this.ctx.globalAlpha = value;
          break;
        case "BM":
          this.ctx.globalCompositeOperation = value;
          break;
        case "SMask":
          this.current.activeSMask = value ? this.tempSMask : null;
          this.tempSMask = null;
          this.checkSMaskState();
          break;
        case "TR":
          this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(value);
          break;
      }
    }
  }
  get inSMaskMode() {
    return !!this.suspendedCtx;
  }
  checkSMaskState() {
    const inSMaskMode = this.inSMaskMode;
    if (this.current.activeSMask && !inSMaskMode) {
      this.beginSMaskMode();
    } else if (!this.current.activeSMask && inSMaskMode) {
      this.endSMaskMode();
    }
  }
  beginSMaskMode() {
    if (this.inSMaskMode) {
      throw new Error("beginSMaskMode called while already in smask mode");
    }
    const drawnWidth = this.ctx.canvas.width;
    const drawnHeight = this.ctx.canvas.height;
    const cacheId = "smaskGroupAt" + this.groupLevel;
    const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight);
    this.suspendedCtx = this.ctx;
    this.ctx = scratchCanvas.context;
    const ctx = this.ctx;
    ctx.setTransform(...(0, _display_utils.getCurrentTransform)(this.suspendedCtx));
    copyCtxState(this.suspendedCtx, ctx);
    mirrorContextOperations(ctx, this.suspendedCtx);
    this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]);
  }
  endSMaskMode() {
    if (!this.inSMaskMode) {
      throw new Error("endSMaskMode called while not in smask mode");
    }
    this.ctx._removeMirroring();
    copyCtxState(this.ctx, this.suspendedCtx);
    this.ctx = this.suspendedCtx;
    this.suspendedCtx = null;
  }
  compose(dirtyBox) {
    if (!this.current.activeSMask) {
      return;
    }
    if (!dirtyBox) {
      dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height];
    } else {
      dirtyBox[0] = Math.floor(dirtyBox[0]);
      dirtyBox[1] = Math.floor(dirtyBox[1]);
      dirtyBox[2] = Math.ceil(dirtyBox[2]);
      dirtyBox[3] = Math.ceil(dirtyBox[3]);
    }
    const smask = this.current.activeSMask;
    const suspendedCtx = this.suspendedCtx;
    composeSMask(suspendedCtx, smask, this.ctx, dirtyBox);
    this.ctx.save();
    this.ctx.setTransform(1, 0, 0, 1, 0, 0);
    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);
    this.ctx.restore();
  }
  save() {
    if (this.inSMaskMode) {
      copyCtxState(this.ctx, this.suspendedCtx);
      this.suspendedCtx.save();
    } else {
      this.ctx.save();
    }
    const old = this.current;
    this.stateStack.push(old);
    this.current = old.clone();
  }
  restore() {
    if (this.stateStack.length === 0 && this.inSMaskMode) {
      this.endSMaskMode();
    }
    if (this.stateStack.length !== 0) {
      this.current = this.stateStack.pop();
      if (this.inSMaskMode) {
        this.suspendedCtx.restore();
        copyCtxState(this.suspendedCtx, this.ctx);
      } else {
        this.ctx.restore();
      }
      this.checkSMaskState();
      this.pendingClip = null;
      this._cachedScaleForStroking[0] = -1;
      this._cachedGetSinglePixelWidth = null;
    }
  }
  transform(a, b, c, d, e, f) {
    this.ctx.transform(a, b, c, d, e, f);
    this._cachedScaleForStroking[0] = -1;
    this._cachedGetSinglePixelWidth = null;
  }
  constructPath(ops, args, minMax) {
    const ctx = this.ctx;
    const current = this.current;
    let x = current.x,
      y = current.y;
    let startX, startY;
    const currentTransform = (0, _display_utils.getCurrentTransform)(ctx);
    const isScalingMatrix = currentTransform[0] === 0 && currentTransform[3] === 0 || currentTransform[1] === 0 && currentTransform[2] === 0;
    const minMaxForBezier = isScalingMatrix ? minMax.slice(0) : null;
    for (let i = 0, j = 0, ii = ops.length; i < ii; i++) {
      switch (ops[i] | 0) {
        case _util.OPS.rectangle:
          x = args[j++];
          y = args[j++];
          const width = args[j++];
          const height = args[j++];
          const xw = x + width;
          const yh = y + height;
          ctx.moveTo(x, y);
          if (width === 0 || height === 0) {
            ctx.lineTo(xw, yh);
          } else {
            ctx.lineTo(xw, y);
            ctx.lineTo(xw, yh);
            ctx.lineTo(x, yh);
          }
          if (!isScalingMatrix) {
            current.updateRectMinMax(currentTransform, [x, y, xw, yh]);
          }
          ctx.closePath();
          break;
        case _util.OPS.moveTo:
          x = args[j++];
          y = args[j++];
          ctx.moveTo(x, y);
          if (!isScalingMatrix) {
            current.updatePathMinMax(currentTransform, x, y);
          }
          break;
        case _util.OPS.lineTo:
          x = args[j++];
          y = args[j++];
          ctx.lineTo(x, y);
          if (!isScalingMatrix) {
            current.updatePathMinMax(currentTransform, x, y);
          }
          break;
        case _util.OPS.curveTo:
          startX = x;
          startY = y;
          x = args[j + 4];
          y = args[j + 5];
          ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y);
          current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y, minMaxForBezier);
          j += 6;
          break;
        case _util.OPS.curveTo2:
          startX = x;
          startY = y;
          ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]);
          current.updateCurvePathMinMax(currentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3], minMaxForBezier);
          x = args[j + 2];
          y = args[j + 3];
          j += 4;
          break;
        case _util.OPS.curveTo3:
          startX = x;
          startY = y;
          x = args[j + 2];
          y = args[j + 3];
          ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y);
          current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], x, y, x, y, minMaxForBezier);
          j += 4;
          break;
        case _util.OPS.closePath:
          ctx.closePath();
          break;
      }
    }
    if (isScalingMatrix) {
      current.updateScalingPathMinMax(currentTransform, minMaxForBezier);
    }
    current.setCurrentPoint(x, y);
  }
  closePath() {
    this.ctx.closePath();
  }
  stroke(consumePath = true) {
    const ctx = this.ctx;
    const strokeColor = this.current.strokeColor;
    ctx.globalAlpha = this.current.strokeAlpha;
    if (this.contentVisible) {
      if (typeof strokeColor === "object" && strokeColor?.getPattern) {
        ctx.save();
        ctx.strokeStyle = strokeColor.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.STROKE);
        this.rescaleAndStroke(false);
        ctx.restore();
      } else {
        this.rescaleAndStroke(true);
      }
    }
    if (consumePath) {
      this.consumePath(this.current.getClippedPathBoundingBox());
    }
    ctx.globalAlpha = this.current.fillAlpha;
  }
  closeStroke() {
    this.closePath();
    this.stroke();
  }
  fill(consumePath = true) {
    const ctx = this.ctx;
    const fillColor = this.current.fillColor;
    const isPatternFill = this.current.patternFill;
    let needRestore = false;
    if (isPatternFill) {
      ctx.save();
      ctx.fillStyle = fillColor.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.FILL);
      needRestore = true;
    }
    const intersect = this.current.getClippedPathBoundingBox();
    if (this.contentVisible && intersect !== null) {
      if (this.pendingEOFill) {
        ctx.fill("evenodd");
        this.pendingEOFill = false;
      } else {
        ctx.fill();
      }
    }
    if (needRestore) {
      ctx.restore();
    }
    if (consumePath) {
      this.consumePath(intersect);
    }
  }
  eoFill() {
    this.pendingEOFill = true;
    this.fill();
  }
  fillStroke() {
    this.fill(false);
    this.stroke(false);
    this.consumePath();
  }
  eoFillStroke() {
    this.pendingEOFill = true;
    this.fillStroke();
  }
  closeFillStroke() {
    this.closePath();
    this.fillStroke();
  }
  closeEOFillStroke() {
    this.pendingEOFill = true;
    this.closePath();
    this.fillStroke();
  }
  endPath() {
    this.consumePath();
  }
  clip() {
    this.pendingClip = NORMAL_CLIP;
  }
  eoClip() {
    this.pendingClip = EO_CLIP;
  }
  beginText() {
    this.current.textMatrix = _util.IDENTITY_MATRIX;
    this.current.textMatrixScale = 1;
    this.current.x = this.current.lineX = 0;
    this.current.y = this.current.lineY = 0;
  }
  endText() {
    const paths = this.pendingTextPaths;
    const ctx = this.ctx;
    if (paths === undefined) {
      ctx.beginPath();
      return;
    }
    ctx.save();
    ctx.beginPath();
    for (const path of paths) {
      ctx.setTransform(...path.transform);
      ctx.translate(path.x, path.y);
      path.addToPath(ctx, path.fontSize);
    }
    ctx.restore();
    ctx.clip();
    ctx.beginPath();
    delete this.pendingTextPaths;
  }
  setCharSpacing(spacing) {
    this.current.charSpacing = spacing;
  }
  setWordSpacing(spacing) {
    this.current.wordSpacing = spacing;
  }
  setHScale(scale) {
    this.current.textHScale = scale / 100;
  }
  setLeading(leading) {
    this.current.leading = -leading;
  }
  setFont(fontRefName, size) {
    const fontObj = this.commonObjs.get(fontRefName);
    const current = this.current;
    if (!fontObj) {
      throw new Error(`Can't find font for ${fontRefName}`);
    }
    current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX;
    if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {
      (0, _util.warn)("Invalid font matrix for font " + fontRefName);
    }
    if (size < 0) {
      size = -size;
      current.fontDirection = -1;
    } else {
      current.fontDirection = 1;
    }
    this.current.font = fontObj;
    this.current.fontSize = size;
    if (fontObj.isType3Font) {
      return;
    }
    const name = fontObj.loadedName || "sans-serif";
    const typeface = fontObj.systemFontInfo?.css || `"${name}", ${fontObj.fallbackName}`;
    let bold = "normal";
    if (fontObj.black) {
      bold = "900";
    } else if (fontObj.bold) {
      bold = "bold";
    }
    const italic = fontObj.italic ? "italic" : "normal";
    let browserFontSize = size;
    if (size < MIN_FONT_SIZE) {
      browserFontSize = MIN_FONT_SIZE;
    } else if (size > MAX_FONT_SIZE) {
      browserFontSize = MAX_FONT_SIZE;
    }
    this.current.fontSizeScale = size / browserFontSize;
    this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`;
  }
  setTextRenderingMode(mode) {
    this.current.textRenderingMode = mode;
  }
  setTextRise(rise) {
    this.current.textRise = rise;
  }
  moveText(x, y) {
    this.current.x = this.current.lineX += x;
    this.current.y = this.current.lineY += y;
  }
  setLeadingMoveText(x, y) {
    this.setLeading(-y);
    this.moveText(x, y);
  }
  setTextMatrix(a, b, c, d, e, f) {
    this.current.textMatrix = [a, b, c, d, e, f];
    this.current.textMatrixScale = Math.hypot(a, b);
    this.current.x = this.current.lineX = 0;
    this.current.y = this.current.lineY = 0;
  }
  nextLine() {
    this.moveText(0, this.current.leading);
  }
  paintChar(character, x, y, patternTransform) {
    const ctx = this.ctx;
    const current = this.current;
    const font = current.font;
    const textRenderingMode = current.textRenderingMode;
    const fontSize = current.fontSize / current.fontSizeScale;
    const fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
    const isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);
    const patternFill = current.patternFill && !font.missingFile;
    let addToPath;
    if (font.disableFontFace || isAddToPathSet || patternFill) {
      addToPath = font.getPathGenerator(this.commonObjs, character);
    }
    if (font.disableFontFace || patternFill) {
      ctx.save();
      ctx.translate(x, y);
      ctx.beginPath();
      addToPath(ctx, fontSize);
      if (patternTransform) {
        ctx.setTransform(...patternTransform);
      }
      if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
        ctx.fill();
      }
      if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
        ctx.stroke();
      }
      ctx.restore();
    } else {
      if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
        ctx.fillText(character, x, y);
      }
      if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
        ctx.strokeText(character, x, y);
      }
    }
    if (isAddToPathSet) {
      const paths = this.pendingTextPaths ||= [];
      paths.push({
        transform: (0, _display_utils.getCurrentTransform)(ctx),
        x,
        y,
        fontSize,
        addToPath
      });
    }
  }
  get isFontSubpixelAAEnabled() {
    const {
      context: ctx
    } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10);
    ctx.scale(1.5, 1);
    ctx.fillText("I", 0, 10);
    const data = ctx.getImageData(0, 0, 10, 10).data;
    let enabled = false;
    for (let i = 3; i < data.length; i += 4) {
      if (data[i] > 0 && data[i] < 255) {
        enabled = true;
        break;
      }
    }
    return (0, _util.shadow)(this, "isFontSubpixelAAEnabled", enabled);
  }
  showText(glyphs) {
    const current = this.current;
    const font = current.font;
    if (font.isType3Font) {
      return this.showType3Text(glyphs);
    }
    const fontSize = current.fontSize;
    if (fontSize === 0) {
      return undefined;
    }
    const ctx = this.ctx;
    const fontSizeScale = current.fontSizeScale;
    const charSpacing = current.charSpacing;
    const wordSpacing = current.wordSpacing;
    const fontDirection = current.fontDirection;
    const textHScale = current.textHScale * fontDirection;
    const glyphsLength = glyphs.length;
    const vertical = font.vertical;
    const spacingDir = vertical ? 1 : -1;
    const defaultVMetrics = font.defaultVMetrics;
    const widthAdvanceScale = fontSize * current.fontMatrix[0];
    const simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill;
    ctx.save();
    ctx.transform(...current.textMatrix);
    ctx.translate(current.x, current.y + current.textRise);
    if (fontDirection > 0) {
      ctx.scale(textHScale, -1);
    } else {
      ctx.scale(textHScale, 1);
    }
    let patternTransform;
    if (current.patternFill) {
      ctx.save();
      const pattern = current.fillColor.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.FILL);
      patternTransform = (0, _display_utils.getCurrentTransform)(ctx);
      ctx.restore();
      ctx.fillStyle = pattern;
    }
    let lineWidth = current.lineWidth;
    const scale = current.textMatrixScale;
    if (scale === 0 || lineWidth === 0) {
      const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
      if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
        lineWidth = this.getSinglePixelWidth();
      }
    } else {
      lineWidth /= scale;
    }
    if (fontSizeScale !== 1.0) {
      ctx.scale(fontSizeScale, fontSizeScale);
      lineWidth /= fontSizeScale;
    }
    ctx.lineWidth = lineWidth;
    if (font.isInvalidPDFjsFont) {
      const chars = [];
      let width = 0;
      for (const glyph of glyphs) {
        chars.push(glyph.unicode);
        width += glyph.width;
      }
      ctx.fillText(chars.join(""), 0, 0);
      current.x += width * widthAdvanceScale * textHScale;
      ctx.restore();
      this.compose();
      return undefined;
    }
    let x = 0,
      i;
    for (i = 0; i < glyphsLength; ++i) {
      const glyph = glyphs[i];
      if (typeof glyph === "number") {
        x += spacingDir * glyph * fontSize / 1000;
        continue;
      }
      let restoreNeeded = false;
      const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
      const character = glyph.fontChar;
      const accent = glyph.accent;
      let scaledX, scaledY;
      let width = glyph.width;
      if (vertical) {
        const vmetric = glyph.vmetric || defaultVMetrics;
        const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale;
        const vy = vmetric[2] * widthAdvanceScale;
        width = vmetric ? -vmetric[0] : width;
        scaledX = vx / fontSizeScale;
        scaledY = (x + vy) / fontSizeScale;
      } else {
        scaledX = x / fontSizeScale;
        scaledY = 0;
      }
      if (font.remeasure && width > 0) {
        const measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale;
        if (width < measuredWidth && this.isFontSubpixelAAEnabled) {
          const characterScaleX = width / measuredWidth;
          restoreNeeded = true;
          ctx.save();
          ctx.scale(characterScaleX, 1);
          scaledX /= characterScaleX;
        } else if (width !== measuredWidth) {
          scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale;
        }
      }
      if (this.contentVisible && (glyph.isInFont || font.missingFile)) {
        if (simpleFillText && !accent) {
          ctx.fillText(character, scaledX, scaledY);
        } else {
          this.paintChar(character, scaledX, scaledY, patternTransform);
          if (accent) {
            const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale;
            const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale;
            this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform);
          }
        }
      }
      const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection;
      x += charWidth;
      if (restoreNeeded) {
        ctx.restore();
      }
    }
    if (vertical) {
      current.y -= x;
    } else {
      current.x += x * textHScale;
    }
    ctx.restore();
    this.compose();
    return undefined;
  }
  showType3Text(glyphs) {
    const ctx = this.ctx;
    const current = this.current;
    const font = current.font;
    const fontSize = current.fontSize;
    const fontDirection = current.fontDirection;
    const spacingDir = font.vertical ? 1 : -1;
    const charSpacing = current.charSpacing;
    const wordSpacing = current.wordSpacing;
    const textHScale = current.textHScale * fontDirection;
    const fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX;
    const glyphsLength = glyphs.length;
    const isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE;
    let i, glyph, width, spacingLength;
    if (isTextInvisible || fontSize === 0) {
      return;
    }
    this._cachedScaleForStroking[0] = -1;
    this._cachedGetSinglePixelWidth = null;
    ctx.save();
    ctx.transform(...current.textMatrix);
    ctx.translate(current.x, current.y);
    ctx.scale(textHScale, fontDirection);
    for (i = 0; i < glyphsLength; ++i) {
      glyph = glyphs[i];
      if (typeof glyph === "number") {
        spacingLength = spacingDir * glyph * fontSize / 1000;
        this.ctx.translate(spacingLength, 0);
        current.x += spacingLength * textHScale;
        continue;
      }
      const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
      const operatorList = font.charProcOperatorList[glyph.operatorListId];
      if (!operatorList) {
        (0, _util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`);
        continue;
      }
      if (this.contentVisible) {
        this.processingType3 = glyph;
        this.save();
        ctx.scale(fontSize, fontSize);
        ctx.transform(...fontMatrix);
        this.executeOperatorList(operatorList);
        this.restore();
      }
      const transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix);
      width = transformed[0] * fontSize + spacing;
      ctx.translate(width, 0);
      current.x += width * textHScale;
    }
    ctx.restore();
    this.processingType3 = null;
  }
  setCharWidth(xWidth, yWidth) {}
  setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) {
    this.ctx.rect(llx, lly, urx - llx, ury - lly);
    this.ctx.clip();
    this.endPath();
  }
  getColorN_Pattern(IR) {
    let pattern;
    if (IR[0] === "TilingPattern") {
      const color = IR[1];
      const baseTransform = this.baseTransform || (0, _display_utils.getCurrentTransform)(this.ctx);
      const canvasGraphicsFactory = {
        createCanvasGraphics: ctx => {
          return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {
            optionalContentConfig: this.optionalContentConfig,
            markedContentStack: this.markedContentStack
          });
        }
      };
      pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform);
    } else {
      pattern = this._getPattern(IR[1], IR[2]);
    }
    return pattern;
  }
  setStrokeColorN() {
    this.current.strokeColor = this.getColorN_Pattern(arguments);
  }
  setFillColorN() {
    this.current.fillColor = this.getColorN_Pattern(arguments);
    this.current.patternFill = true;
  }
  setStrokeRGBColor(r, g, b) {
    const color = _util.Util.makeHexColor(r, g, b);
    this.ctx.strokeStyle = color;
    this.current.strokeColor = color;
  }
  setFillRGBColor(r, g, b) {
    const color = _util.Util.makeHexColor(r, g, b);
    this.ctx.fillStyle = color;
    this.current.fillColor = color;
    this.current.patternFill = false;
  }
  _getPattern(objId, matrix = null) {
    let pattern;
    if (this.cachedPatterns.has(objId)) {
      pattern = this.cachedPatterns.get(objId);
    } else {
      pattern = (0, _pattern_helper.getShadingPattern)(this.getObject(objId));
      this.cachedPatterns.set(objId, pattern);
    }
    if (matrix) {
      pattern.matrix = matrix;
    }
    return pattern;
  }
  shadingFill(objId) {
    if (!this.contentVisible) {
      return;
    }
    const ctx = this.ctx;
    this.save();
    const pattern = this._getPattern(objId);
    ctx.fillStyle = pattern.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.SHADING);
    const inv = (0, _display_utils.getCurrentTransformInverse)(ctx);
    if (inv) {
      const {
        width,
        height
      } = ctx.canvas;
      const [x0, y0, x1, y1] = _util.Util.getAxialAlignedBoundingBox([0, 0, width, height], inv);
      this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);
    } else {
      this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);
    }
    this.compose(this.current.getClippedPathBoundingBox());
    this.restore();
  }
  beginInlineImage() {
    (0, _util.unreachable)("Should not call beginInlineImage");
  }
  beginImageData() {
    (0, _util.unreachable)("Should not call beginImageData");
  }
  paintFormXObjectBegin(matrix, bbox) {
    if (!this.contentVisible) {
      return;
    }
    this.save();
    this.baseTransformStack.push(this.baseTransform);
    if (Array.isArray(matrix) && matrix.length === 6) {
      this.transform(...matrix);
    }
    this.baseTransform = (0, _display_utils.getCurrentTransform)(this.ctx);
    if (bbox) {
      const width = bbox[2] - bbox[0];
      const height = bbox[3] - bbox[1];
      this.ctx.rect(bbox[0], bbox[1], width, height);
      this.current.updateRectMinMax((0, _display_utils.getCurrentTransform)(this.ctx), bbox);
      this.clip();
      this.endPath();
    }
  }
  paintFormXObjectEnd() {
    if (!this.contentVisible) {
      return;
    }
    this.restore();
    this.baseTransform = this.baseTransformStack.pop();
  }
  beginGroup(group) {
    if (!this.contentVisible) {
      return;
    }
    this.save();
    if (this.inSMaskMode) {
      this.endSMaskMode();
      this.current.activeSMask = null;
    }
    const currentCtx = this.ctx;
    if (!group.isolated) {
      (0, _util.info)("TODO: Support non-isolated groups.");
    }
    if (group.knockout) {
      (0, _util.warn)("Knockout groups not supported.");
    }
    const currentTransform = (0, _display_utils.getCurrentTransform)(currentCtx);
    if (group.matrix) {
      currentCtx.transform(...group.matrix);
    }
    if (!group.bbox) {
      throw new Error("Bounding box is required.");
    }
    let bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, (0, _display_utils.getCurrentTransform)(currentCtx));
    const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height];
    bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];
    const offsetX = Math.floor(bounds[0]);
    const offsetY = Math.floor(bounds[1]);
    let drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);
    let drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);
    let scaleX = 1,
      scaleY = 1;
    if (drawnWidth > MAX_GROUP_SIZE) {
      scaleX = drawnWidth / MAX_GROUP_SIZE;
      drawnWidth = MAX_GROUP_SIZE;
    }
    if (drawnHeight > MAX_GROUP_SIZE) {
      scaleY = drawnHeight / MAX_GROUP_SIZE;
      drawnHeight = MAX_GROUP_SIZE;
    }
    this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]);
    let cacheId = "groupAt" + this.groupLevel;
    if (group.smask) {
      cacheId += "_smask_" + this.smaskCounter++ % 2;
    }
    const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight);
    const groupCtx = scratchCanvas.context;
    groupCtx.scale(1 / scaleX, 1 / scaleY);
    groupCtx.translate(-offsetX, -offsetY);
    groupCtx.transform(...currentTransform);
    if (group.smask) {
      this.smaskStack.push({
        canvas: scratchCanvas.canvas,
        context: groupCtx,
        offsetX,
        offsetY,
        scaleX,
        scaleY,
        subtype: group.smask.subtype,
        backdrop: group.smask.backdrop,
        transferMap: group.smask.transferMap || null,
        startTransformInverse: null
      });
    } else {
      currentCtx.setTransform(1, 0, 0, 1, 0, 0);
      currentCtx.translate(offsetX, offsetY);
      currentCtx.scale(scaleX, scaleY);
      currentCtx.save();
    }
    copyCtxState(currentCtx, groupCtx);
    this.ctx = groupCtx;
    this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]);
    this.groupStack.push(currentCtx);
    this.groupLevel++;
  }
  endGroup(group) {
    if (!this.contentVisible) {
      return;
    }
    this.groupLevel--;
    const groupCtx = this.ctx;
    const ctx = this.groupStack.pop();
    this.ctx = ctx;
    this.ctx.imageSmoothingEnabled = false;
    if (group.smask) {
      this.tempSMask = this.smaskStack.pop();
      this.restore();
    } else {
      this.ctx.restore();
      const currentMtx = (0, _display_utils.getCurrentTransform)(this.ctx);
      this.restore();
      this.ctx.save();
      this.ctx.setTransform(...currentMtx);
      const dirtyBox = _util.Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx);
      this.ctx.drawImage(groupCtx.canvas, 0, 0);
      this.ctx.restore();
      this.compose(dirtyBox);
    }
  }
  beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) {
    this.#restoreInitialState();
    resetCtxToDefault(this.ctx);
    this.ctx.save();
    this.save();
    if (this.baseTransform) {
      this.ctx.setTransform(...this.baseTransform);
    }
    if (Array.isArray(rect) && rect.length === 4) {
      const width = rect[2] - rect[0];
      const height = rect[3] - rect[1];
      if (hasOwnCanvas && this.annotationCanvasMap) {
        transform = transform.slice();
        transform[4] -= rect[0];
        transform[5] -= rect[1];
        rect = rect.slice();
        rect[0] = rect[1] = 0;
        rect[2] = width;
        rect[3] = height;
        const [scaleX, scaleY] = _util.Util.singularValueDecompose2dScale((0, _display_utils.getCurrentTransform)(this.ctx));
        const {
          viewportScale
        } = this;
        const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale);
        const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale);
        this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight);
        const {
          canvas,
          context
        } = this.annotationCanvas;
        this.annotationCanvasMap.set(id, canvas);
        this.annotationCanvas.savedCtx = this.ctx;
        this.ctx = context;
        this.ctx.save();
        this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY);
        resetCtxToDefault(this.ctx);
      } else {
        resetCtxToDefault(this.ctx);
        this.ctx.rect(rect[0], rect[1], width, height);
        this.ctx.clip();
        this.endPath();
      }
    }
    this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);
    this.transform(...transform);
    this.transform(...matrix);
  }
  endAnnotation() {
    if (this.annotationCanvas) {
      this.ctx.restore();
      this.#drawFilter();
      this.ctx = this.annotationCanvas.savedCtx;
      delete this.annotationCanvas.savedCtx;
      delete this.annotationCanvas;
    }
  }
  paintImageMaskXObject(img) {
    if (!this.contentVisible) {
      return;
    }
    const count = img.count;
    img = this.getObject(img.data, img);
    img.count = count;
    const ctx = this.ctx;
    const glyph = this.processingType3;
    if (glyph) {
      if (glyph.compiled === undefined) {
        glyph.compiled = compileType3Glyph(img);
      }
      if (glyph.compiled) {
        glyph.compiled(ctx);
        return;
      }
    }
    const mask = this._createMaskCanvas(img);
    const maskCanvas = mask.canvas;
    ctx.save();
    ctx.setTransform(1, 0, 0, 1, 0, 0);
    ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY);
    ctx.restore();
    this.compose();
  }
  paintImageMaskXObjectRepeat(img, scaleX, skewX = 0, skewY = 0, scaleY, positions) {
    if (!this.contentVisible) {
      return;
    }
    img = this.getObject(img.data, img);
    const ctx = this.ctx;
    ctx.save();
    const currentTransform = (0, _display_utils.getCurrentTransform)(ctx);
    ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0);
    const mask = this._createMaskCanvas(img);
    ctx.setTransform(1, 0, 0, 1, mask.offsetX - currentTransform[4], mask.offsetY - currentTransform[5]);
    for (let i = 0, ii = positions.length; i < ii; i += 2) {
      const trans = _util.Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]);
      const [x, y] = _util.Util.applyTransform([0, 0], trans);
      ctx.drawImage(mask.canvas, x, y);
    }
    ctx.restore();
    this.compose();
  }
  paintImageMaskXObjectGroup(images) {
    if (!this.contentVisible) {
      return;
    }
    const ctx = this.ctx;
    const fillColor = this.current.fillColor;
    const isPatternFill = this.current.patternFill;
    for (const image of images) {
      const {
        data,
        width,
        height,
        transform
      } = image;
      const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
      const maskCtx = maskCanvas.context;
      maskCtx.save();
      const img = this.getObject(data, image);
      putBinaryImageMask(maskCtx, img);
      maskCtx.globalCompositeOperation = "source-in";
      maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.FILL) : fillColor;
      maskCtx.fillRect(0, 0, width, height);
      maskCtx.restore();
      ctx.save();
      ctx.transform(...transform);
      ctx.scale(1, -1);
      drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);
      ctx.restore();
    }
    this.compose();
  }
  paintImageXObject(objId) {
    if (!this.contentVisible) {
      return;
    }
    const imgData = this.getObject(objId);
    if (!imgData) {
      (0, _util.warn)("Dependent image isn't ready yet");
      return;
    }
    this.paintInlineImageXObject(imgData);
  }
  paintImageXObjectRepeat(objId, scaleX, scaleY, positions) {
    if (!this.contentVisible) {
      return;
    }
    const imgData = this.getObject(objId);
    if (!imgData) {
      (0, _util.warn)("Dependent image isn't ready yet");
      return;
    }
    const width = imgData.width;
    const height = imgData.height;
    const map = [];
    for (let i = 0, ii = positions.length; i < ii; i += 2) {
      map.push({
        transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]],
        x: 0,
        y: 0,
        w: width,
        h: height
      });
    }
    this.paintInlineImageXObjectGroup(imgData, map);
  }
  applyTransferMapsToCanvas(ctx) {
    if (this.current.transferMaps !== "none") {
      ctx.filter = this.current.transferMaps;
      ctx.drawImage(ctx.canvas, 0, 0);
      ctx.filter = "none";
    }
    return ctx.canvas;
  }
  applyTransferMapsToBitmap(imgData) {
    if (this.current.transferMaps === "none") {
      return imgData.bitmap;
    }
    const {
      bitmap,
      width,
      height
    } = imgData;
    const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height);
    const tmpCtx = tmpCanvas.context;
    tmpCtx.filter = this.current.transferMaps;
    tmpCtx.drawImage(bitmap, 0, 0);
    tmpCtx.filter = "none";
    return tmpCanvas.canvas;
  }
  paintInlineImageXObject(imgData) {
    if (!this.contentVisible) {
      return;
    }
    const width = imgData.width;
    const height = imgData.height;
    const ctx = this.ctx;
    this.save();
    if (!_util.isNodeJS) {
      const {
        filter
      } = ctx;
      if (filter !== "none" && filter !== "") {
        ctx.filter = "none";
      }
    }
    ctx.scale(1 / width, -1 / height);
    let imgToPaint;
    if (imgData.bitmap) {
      imgToPaint = this.applyTransferMapsToBitmap(imgData);
    } else if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) {
      imgToPaint = imgData;
    } else {
      const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height);
      const tmpCtx = tmpCanvas.context;
      putBinaryImageData(tmpCtx, imgData);
      imgToPaint = this.applyTransferMapsToCanvas(tmpCtx);
    }
    const scaled = this._scaleImage(imgToPaint, (0, _display_utils.getCurrentTransformInverse)(ctx));
    ctx.imageSmoothingEnabled = getImageSmoothingEnabled((0, _display_utils.getCurrentTransform)(ctx), imgData.interpolate);
    drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height);
    this.compose();
    this.restore();
  }
  paintInlineImageXObjectGroup(imgData, map) {
    if (!this.contentVisible) {
      return;
    }
    const ctx = this.ctx;
    let imgToPaint;
    if (imgData.bitmap) {
      imgToPaint = imgData.bitmap;
    } else {
      const w = imgData.width;
      const h = imgData.height;
      const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h);
      const tmpCtx = tmpCanvas.context;
      putBinaryImageData(tmpCtx, imgData);
      imgToPaint = this.applyTransferMapsToCanvas(tmpCtx);
    }
    for (const entry of map) {
      ctx.save();
      ctx.transform(...entry.transform);
      ctx.scale(1, -1);
      drawImageAtIntegerCoords(ctx, imgToPaint, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1);
      ctx.restore();
    }
    this.compose();
  }
  paintSolidColorImageMask() {
    if (!this.contentVisible) {
      return;
    }
    this.ctx.fillRect(0, 0, 1, 1);
    this.compose();
  }
  markPoint(tag) {}
  markPointProps(tag, properties) {}
  beginMarkedContent(tag) {
    this.markedContentStack.push({
      visible: true
    });
  }
  beginMarkedContentProps(tag, properties) {
    if (tag === "OC") {
      this.markedContentStack.push({
        visible: this.optionalContentConfig.isVisible(properties)
      });
    } else {
      this.markedContentStack.push({
        visible: true
      });
    }
    this.contentVisible = this.isContentVisible();
  }
  endMarkedContent() {
    this.markedContentStack.pop();
    this.contentVisible = this.isContentVisible();
  }
  beginCompat() {}
  endCompat() {}
  consumePath(clipBox) {
    const isEmpty = this.current.isEmptyClip();
    if (this.pendingClip) {
      this.current.updateClipFromPath();
    }
    if (!this.pendingClip) {
      this.compose(clipBox);
    }
    const ctx = this.ctx;
    if (this.pendingClip) {
      if (!isEmpty) {
        if (this.pendingClip === EO_CLIP) {
          ctx.clip("evenodd");
        } else {
          ctx.clip();
        }
      }
      this.pendingClip = null;
    }
    this.current.startNewPathAndClipBox(this.current.clipBox);
    ctx.beginPath();
  }
  getSinglePixelWidth() {
    if (!this._cachedGetSinglePixelWidth) {
      const m = (0, _display_utils.getCurrentTransform)(this.ctx);
      if (m[1] === 0 && m[2] === 0) {
        this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3]));
      } else {
        const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]);
        const normX = Math.hypot(m[0], m[2]);
        const normY = Math.hypot(m[1], m[3]);
        this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet;
      }
    }
    return this._cachedGetSinglePixelWidth;
  }
  getScaleForStroking() {
    if (this._cachedScaleForStroking[0] === -1) {
      const {
        lineWidth
      } = this.current;
      const {
        a,
        b,
        c,
        d
      } = this.ctx.getTransform();
      let scaleX, scaleY;
      if (b === 0 && c === 0) {
        const normX = Math.abs(a);
        const normY = Math.abs(d);
        if (normX === normY) {
          if (lineWidth === 0) {
            scaleX = scaleY = 1 / normX;
          } else {
            const scaledLineWidth = normX * lineWidth;
            scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1;
          }
        } else if (lineWidth === 0) {
          scaleX = 1 / normX;
          scaleY = 1 / normY;
        } else {
          const scaledXLineWidth = normX * lineWidth;
          const scaledYLineWidth = normY * lineWidth;
          scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1;
          scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1;
        }
      } else {
        const absDet = Math.abs(a * d - b * c);
        const normX = Math.hypot(a, b);
        const normY = Math.hypot(c, d);
        if (lineWidth === 0) {
          scaleX = normY / absDet;
          scaleY = normX / absDet;
        } else {
          const baseArea = lineWidth * absDet;
          scaleX = normY > baseArea ? normY / baseArea : 1;
          scaleY = normX > baseArea ? normX / baseArea : 1;
        }
      }
      this._cachedScaleForStroking[0] = scaleX;
      this._cachedScaleForStroking[1] = scaleY;
    }
    return this._cachedScaleForStroking;
  }
  rescaleAndStroke(saveRestore) {
    const {
      ctx
    } = this;
    const {
      lineWidth
    } = this.current;
    const [scaleX, scaleY] = this.getScaleForStroking();
    ctx.lineWidth = lineWidth || 1;
    if (scaleX === 1 && scaleY === 1) {
      ctx.stroke();
      return;
    }
    const dashes = ctx.getLineDash();
    if (saveRestore) {
      ctx.save();
    }
    ctx.scale(scaleX, scaleY);
    if (dashes.length > 0) {
      const scale = Math.max(scaleX, scaleY);
      ctx.setLineDash(dashes.map(x => x / scale));
      ctx.lineDashOffset /= scale;
    }
    ctx.stroke();
    if (saveRestore) {
      ctx.restore();
    }
  }
  isContentVisible() {
    for (let i = this.markedContentStack.length - 1; i >= 0; i--) {
      if (!this.markedContentStack[i].visible) {
        return false;
      }
    }
    return true;
  }
}
exports.CanvasGraphics = CanvasGraphics;
for (const op in _util.OPS) {
  if (CanvasGraphics.prototype[op] !== undefined) {
    CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op];
  }
}

/***/ }),
/* 12 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.TilingPattern = exports.PathType = void 0;
exports.getShadingPattern = getShadingPattern;
var _util = __w_pdfjs_require__(1);
var _display_utils = __w_pdfjs_require__(6);
const PathType = {
  FILL: "Fill",
  STROKE: "Stroke",
  SHADING: "Shading"
};
exports.PathType = PathType;
function applyBoundingBox(ctx, bbox) {
  if (!bbox) {
    return;
  }
  const width = bbox[2] - bbox[0];
  const height = bbox[3] - bbox[1];
  const region = new Path2D();
  region.rect(bbox[0], bbox[1], width, height);
  ctx.clip(region);
}
class BaseShadingPattern {
  constructor() {
    if (this.constructor === BaseShadingPattern) {
      (0, _util.unreachable)("Cannot initialize BaseShadingPattern.");
    }
  }
  getPattern() {
    (0, _util.unreachable)("Abstract method `getPattern` called.");
  }
}
class RadialAxialShadingPattern extends BaseShadingPattern {
  constructor(IR) {
    super();
    this._type = IR[1];
    this._bbox = IR[2];
    this._colorStops = IR[3];
    this._p0 = IR[4];
    this._p1 = IR[5];
    this._r0 = IR[6];
    this._r1 = IR[7];
    this.matrix = null;
  }
  _createGradient(ctx) {
    let grad;
    if (this._type === "axial") {
      grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]);
    } else if (this._type === "radial") {
      grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1);
    }
    for (const colorStop of this._colorStops) {
      grad.addColorStop(colorStop[0], colorStop[1]);
    }
    return grad;
  }
  getPattern(ctx, owner, inverse, pathType) {
    let pattern;
    if (pathType === PathType.STROKE || pathType === PathType.FILL) {
      const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, (0, _display_utils.getCurrentTransform)(ctx)) || [0, 0, 0, 0];
      const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1;
      const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1;
      const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height, true);
      const tmpCtx = tmpCanvas.context;
      tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);
      tmpCtx.beginPath();
      tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);
      tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]);
      inverse = _util.Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]);
      tmpCtx.transform(...owner.baseTransform);
      if (this.matrix) {
        tmpCtx.transform(...this.matrix);
      }
      applyBoundingBox(tmpCtx, this._bbox);
      tmpCtx.fillStyle = this._createGradient(tmpCtx);
      tmpCtx.fill();
      pattern = ctx.createPattern(tmpCanvas.canvas, "no-repeat");
      const domMatrix = new DOMMatrix(inverse);
      pattern.setTransform(domMatrix);
    } else {
      applyBoundingBox(ctx, this._bbox);
      pattern = this._createGradient(ctx);
    }
    return pattern;
  }
}
function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {
  const coords = context.coords,
    colors = context.colors;
  const bytes = data.data,
    rowSize = data.width * 4;
  let tmp;
  if (coords[p1 + 1] > coords[p2 + 1]) {
    tmp = p1;
    p1 = p2;
    p2 = tmp;
    tmp = c1;
    c1 = c2;
    c2 = tmp;
  }
  if (coords[p2 + 1] > coords[p3 + 1]) {
    tmp = p2;
    p2 = p3;
    p3 = tmp;
    tmp = c2;
    c2 = c3;
    c3 = tmp;
  }
  if (coords[p1 + 1] > coords[p2 + 1]) {
    tmp = p1;
    p1 = p2;
    p2 = tmp;
    tmp = c1;
    c1 = c2;
    c2 = tmp;
  }
  const x1 = (coords[p1] + context.offsetX) * context.scaleX;
  const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;
  const x2 = (coords[p2] + context.offsetX) * context.scaleX;
  const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;
  const x3 = (coords[p3] + context.offsetX) * context.scaleX;
  const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;
  if (y1 >= y3) {
    return;
  }
  const c1r = colors[c1],
    c1g = colors[c1 + 1],
    c1b = colors[c1 + 2];
  const c2r = colors[c2],
    c2g = colors[c2 + 1],
    c2b = colors[c2 + 2];
  const c3r = colors[c3],
    c3g = colors[c3 + 1],
    c3b = colors[c3 + 2];
  const minY = Math.round(y1),
    maxY = Math.round(y3);
  let xa, car, cag, cab;
  let xb, cbr, cbg, cbb;
  for (let y = minY; y <= maxY; y++) {
    if (y < y2) {
      const k = y < y1 ? 0 : (y1 - y) / (y1 - y2);
      xa = x1 - (x1 - x2) * k;
      car = c1r - (c1r - c2r) * k;
      cag = c1g - (c1g - c2g) * k;
      cab = c1b - (c1b - c2b) * k;
    } else {
      let k;
      if (y > y3) {
        k = 1;
      } else if (y2 === y3) {
        k = 0;
      } else {
        k = (y2 - y) / (y2 - y3);
      }
      xa = x2 - (x2 - x3) * k;
      car = c2r - (c2r - c3r) * k;
      cag = c2g - (c2g - c3g) * k;
      cab = c2b - (c2b - c3b) * k;
    }
    let k;
    if (y < y1) {
      k = 0;
    } else if (y > y3) {
      k = 1;
    } else {
      k = (y1 - y) / (y1 - y3);
    }
    xb = x1 - (x1 - x3) * k;
    cbr = c1r - (c1r - c3r) * k;
    cbg = c1g - (c1g - c3g) * k;
    cbb = c1b - (c1b - c3b) * k;
    const x1_ = Math.round(Math.min(xa, xb));
    const x2_ = Math.round(Math.max(xa, xb));
    let j = rowSize * y + x1_ * 4;
    for (let x = x1_; x <= x2_; x++) {
      k = (xa - x) / (xa - xb);
      if (k < 0) {
        k = 0;
      } else if (k > 1) {
        k = 1;
      }
      bytes[j++] = car - (car - cbr) * k | 0;
      bytes[j++] = cag - (cag - cbg) * k | 0;
      bytes[j++] = cab - (cab - cbb) * k | 0;
      bytes[j++] = 255;
    }
  }
}
function drawFigure(data, figure, context) {
  const ps = figure.coords;
  const cs = figure.colors;
  let i, ii;
  switch (figure.type) {
    case "lattice":
      const verticesPerRow = figure.verticesPerRow;
      const rows = Math.floor(ps.length / verticesPerRow) - 1;
      const cols = verticesPerRow - 1;
      for (i = 0; i < rows; i++) {
        let q = i * verticesPerRow;
        for (let j = 0; j < cols; j++, q++) {
          drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]);
          drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]);
        }
      }
      break;
    case "triangles":
      for (i = 0, ii = ps.length; i < ii; i += 3) {
        drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]);
      }
      break;
    default:
      throw new Error("illegal figure");
  }
}
class MeshShadingPattern extends BaseShadingPattern {
  constructor(IR) {
    super();
    this._coords = IR[2];
    this._colors = IR[3];
    this._figures = IR[4];
    this._bounds = IR[5];
    this._bbox = IR[7];
    this._background = IR[8];
    this.matrix = null;
  }
  _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) {
    const EXPECTED_SCALE = 1.1;
    const MAX_PATTERN_SIZE = 3000;
    const BORDER_SIZE = 2;
    const offsetX = Math.floor(this._bounds[0]);
    const offsetY = Math.floor(this._bounds[1]);
    const boundsWidth = Math.ceil(this._bounds[2]) - offsetX;
    const boundsHeight = Math.ceil(this._bounds[3]) - offsetY;
    const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);
    const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);
    const scaleX = boundsWidth / width;
    const scaleY = boundsHeight / height;
    const context = {
      coords: this._coords,
      colors: this._colors,
      offsetX: -offsetX,
      offsetY: -offsetY,
      scaleX: 1 / scaleX,
      scaleY: 1 / scaleY
    };
    const paddedWidth = width + BORDER_SIZE * 2;
    const paddedHeight = height + BORDER_SIZE * 2;
    const tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false);
    const tmpCtx = tmpCanvas.context;
    const data = tmpCtx.createImageData(width, height);
    if (backgroundColor) {
      const bytes = data.data;
      for (let i = 0, ii = bytes.length; i < ii; i += 4) {
        bytes[i] = backgroundColor[0];
        bytes[i + 1] = backgroundColor[1];
        bytes[i + 2] = backgroundColor[2];
        bytes[i + 3] = 255;
      }
    }
    for (const figure of this._figures) {
      drawFigure(data, figure, context);
    }
    tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);
    const canvas = tmpCanvas.canvas;
    return {
      canvas,
      offsetX: offsetX - BORDER_SIZE * scaleX,
      offsetY: offsetY - BORDER_SIZE * scaleY,
      scaleX,
      scaleY
    };
  }
  getPattern(ctx, owner, inverse, pathType) {
    applyBoundingBox(ctx, this._bbox);
    let scale;
    if (pathType === PathType.SHADING) {
      scale = _util.Util.singularValueDecompose2dScale((0, _display_utils.getCurrentTransform)(ctx));
    } else {
      scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform);
      if (this.matrix) {
        const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);
        scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]];
      }
    }
    const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases);
    if (pathType !== PathType.SHADING) {
      ctx.setTransform(...owner.baseTransform);
      if (this.matrix) {
        ctx.transform(...this.matrix);
      }
    }
    ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);
    ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);
    return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat");
  }
}
class DummyShadingPattern extends BaseShadingPattern {
  getPattern() {
    return "hotpink";
  }
}
function getShadingPattern(IR) {
  switch (IR[0]) {
    case "RadialAxial":
      return new RadialAxialShadingPattern(IR);
    case "Mesh":
      return new MeshShadingPattern(IR);
    case "Dummy":
      return new DummyShadingPattern();
  }
  throw new Error(`Unknown IR type: ${IR[0]}`);
}
const PaintType = {
  COLORED: 1,
  UNCOLORED: 2
};
class TilingPattern {
  static MAX_PATTERN_SIZE = 3000;
  constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) {
    this.operatorList = IR[2];
    this.matrix = IR[3] || [1, 0, 0, 1, 0, 0];
    this.bbox = IR[4];
    this.xstep = IR[5];
    this.ystep = IR[6];
    this.paintType = IR[7];
    this.tilingType = IR[8];
    this.color = color;
    this.ctx = ctx;
    this.canvasGraphicsFactory = canvasGraphicsFactory;
    this.baseTransform = baseTransform;
  }
  createPatternCanvas(owner) {
    const operatorList = this.operatorList;
    const bbox = this.bbox;
    const xstep = this.xstep;
    const ystep = this.ystep;
    const paintType = this.paintType;
    const tilingType = this.tilingType;
    const color = this.color;
    const canvasGraphicsFactory = this.canvasGraphicsFactory;
    (0, _util.info)("TilingType: " + tilingType);
    const x0 = bbox[0],
      y0 = bbox[1],
      x1 = bbox[2],
      y1 = bbox[3];
    const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);
    const curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform);
    const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]];
    const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]);
    const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]);
    const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true);
    const tmpCtx = tmpCanvas.context;
    const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);
    graphics.groupLevel = owner.groupLevel;
    this.setFillAndStrokeStyleToContext(graphics, paintType, color);
    let adjustedX0 = x0;
    let adjustedY0 = y0;
    let adjustedX1 = x1;
    let adjustedY1 = y1;
    if (x0 < 0) {
      adjustedX0 = 0;
      adjustedX1 += Math.abs(x0);
    }
    if (y0 < 0) {
      adjustedY0 = 0;
      adjustedY1 += Math.abs(y0);
    }
    tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0));
    graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);
    tmpCtx.save();
    this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1);
    graphics.baseTransform = (0, _display_utils.getCurrentTransform)(graphics.ctx);
    graphics.executeOperatorList(operatorList);
    graphics.endDrawing();
    return {
      canvas: tmpCanvas.canvas,
      scaleX: dimx.scale,
      scaleY: dimy.scale,
      offsetX: adjustedX0,
      offsetY: adjustedY0
    };
  }
  getSizeAndScale(step, realOutputSize, scale) {
    step = Math.abs(step);
    const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize);
    let size = Math.ceil(step * scale);
    if (size >= maxSize) {
      size = maxSize;
    } else {
      scale = size / step;
    }
    return {
      scale,
      size
    };
  }
  clipBbox(graphics, x0, y0, x1, y1) {
    const bboxWidth = x1 - x0;
    const bboxHeight = y1 - y0;
    graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);
    graphics.current.updateRectMinMax((0, _display_utils.getCurrentTransform)(graphics.ctx), [x0, y0, x1, y1]);
    graphics.clip();
    graphics.endPath();
  }
  setFillAndStrokeStyleToContext(graphics, paintType, color) {
    const context = graphics.ctx,
      current = graphics.current;
    switch (paintType) {
      case PaintType.COLORED:
        const ctx = this.ctx;
        context.fillStyle = ctx.fillStyle;
        context.strokeStyle = ctx.strokeStyle;
        current.fillColor = ctx.fillStyle;
        current.strokeColor = ctx.strokeStyle;
        break;
      case PaintType.UNCOLORED:
        const cssColor = _util.Util.makeHexColor(color[0], color[1], color[2]);
        context.fillStyle = cssColor;
        context.strokeStyle = cssColor;
        current.fillColor = cssColor;
        current.strokeColor = cssColor;
        break;
      default:
        throw new _util.FormatError(`Unsupported paint type: ${paintType}`);
    }
  }
  getPattern(ctx, owner, inverse, pathType) {
    let matrix = inverse;
    if (pathType !== PathType.SHADING) {
      matrix = _util.Util.transform(matrix, owner.baseTransform);
      if (this.matrix) {
        matrix = _util.Util.transform(matrix, this.matrix);
      }
    }
    const temporaryPatternCanvas = this.createPatternCanvas(owner);
    let domMatrix = new DOMMatrix(matrix);
    domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);
    domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY);
    const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, "repeat");
    pattern.setTransform(domMatrix);
    return pattern;
  }
}
exports.TilingPattern = TilingPattern;

/***/ }),
/* 13 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.convertBlackAndWhiteToRGBA = convertBlackAndWhiteToRGBA;
exports.convertToRGBA = convertToRGBA;
exports.grayToRGBA = grayToRGBA;
var _util = __w_pdfjs_require__(1);
function convertToRGBA(params) {
  switch (params.kind) {
    case _util.ImageKind.GRAYSCALE_1BPP:
      return convertBlackAndWhiteToRGBA(params);
    case _util.ImageKind.RGB_24BPP:
      return convertRGBToRGBA(params);
  }
  return null;
}
function convertBlackAndWhiteToRGBA({
  src,
  srcPos = 0,
  dest,
  width,
  height,
  nonBlackColor = 0xffffffff,
  inverseDecode = false
}) {
  const black = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;
  const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor];
  const widthInSource = width >> 3;
  const widthRemainder = width & 7;
  const srcLength = src.length;
  dest = new Uint32Array(dest.buffer);
  let destPos = 0;
  for (let i = 0; i < height; i++) {
    for (const max = srcPos + widthInSource; srcPos < max; srcPos++) {
      const elem = srcPos < srcLength ? src[srcPos] : 255;
      dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping;
      dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping;
      dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping;
      dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping;
      dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping;
      dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping;
      dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping;
      dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping;
    }
    if (widthRemainder === 0) {
      continue;
    }
    const elem = srcPos < srcLength ? src[srcPos++] : 255;
    for (let j = 0; j < widthRemainder; j++) {
      dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping;
    }
  }
  return {
    srcPos,
    destPos
  };
}
function convertRGBToRGBA({
  src,
  srcPos = 0,
  dest,
  destPos = 0,
  width,
  height
}) {
  let i = 0;
  const len32 = src.length >> 2;
  const src32 = new Uint32Array(src.buffer, srcPos, len32);
  if (_util.FeatureTest.isLittleEndian) {
    for (; i < len32 - 2; i += 3, destPos += 4) {
      const s1 = src32[i];
      const s2 = src32[i + 1];
      const s3 = src32[i + 2];
      dest[destPos] = s1 | 0xff000000;
      dest[destPos + 1] = s1 >>> 24 | s2 << 8 | 0xff000000;
      dest[destPos + 2] = s2 >>> 16 | s3 << 16 | 0xff000000;
      dest[destPos + 3] = s3 >>> 8 | 0xff000000;
    }
    for (let j = i * 4, jj = src.length; j < jj; j += 3) {
      dest[destPos++] = src[j] | src[j + 1] << 8 | src[j + 2] << 16 | 0xff000000;
    }
  } else {
    for (; i < len32 - 2; i += 3, destPos += 4) {
      const s1 = src32[i];
      const s2 = src32[i + 1];
      const s3 = src32[i + 2];
      dest[destPos] = s1 | 0xff;
      dest[destPos + 1] = s1 << 24 | s2 >>> 8 | 0xff;
      dest[destPos + 2] = s2 << 16 | s3 >>> 16 | 0xff;
      dest[destPos + 3] = s3 << 8 | 0xff;
    }
    for (let j = i * 4, jj = src.length; j < jj; j += 3) {
      dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | 0xff;
    }
  }
  return {
    srcPos,
    destPos
  };
}
function grayToRGBA(src, dest) {
  if (_util.FeatureTest.isLittleEndian) {
    for (let i = 0, ii = src.length; i < ii; i++) {
      dest[i] = src[i] * 0x10101 | 0xff000000;
    }
  } else {
    for (let i = 0, ii = src.length; i < ii; i++) {
      dest[i] = src[i] * 0x1010100 | 0x000000ff;
    }
  }
}

/***/ }),
/* 14 */
/***/ ((__unused_webpack_module, exports) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.GlobalWorkerOptions = void 0;
const GlobalWorkerOptions = Object.create(null);
exports.GlobalWorkerOptions = GlobalWorkerOptions;
GlobalWorkerOptions.workerPort = null;
GlobalWorkerOptions.workerSrc = "";

/***/ }),
/* 15 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.MessageHandler = void 0;
var _util = __w_pdfjs_require__(1);
const CallbackKind = {
  UNKNOWN: 0,
  DATA: 1,
  ERROR: 2
};
const StreamKind = {
  UNKNOWN: 0,
  CANCEL: 1,
  CANCEL_COMPLETE: 2,
  CLOSE: 3,
  ENQUEUE: 4,
  ERROR: 5,
  PULL: 6,
  PULL_COMPLETE: 7,
  START_COMPLETE: 8
};
function wrapReason(reason) {
  if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) {
    (0, _util.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.');
  }
  switch (reason.name) {
    case "AbortException":
      return new _util.AbortException(reason.message);
    case "MissingPDFException":
      return new _util.MissingPDFException(reason.message);
    case "PasswordException":
      return new _util.PasswordException(reason.message, reason.code);
    case "UnexpectedResponseException":
      return new _util.UnexpectedResponseException(reason.message, reason.status);
    case "UnknownErrorException":
      return new _util.UnknownErrorException(reason.message, reason.details);
    default:
      return new _util.UnknownErrorException(reason.message, reason.toString());
  }
}
class MessageHandler {
  constructor(sourceName, targetName, comObj) {
    this.sourceName = sourceName;
    this.targetName = targetName;
    this.comObj = comObj;
    this.callbackId = 1;
    this.streamId = 1;
    this.streamSinks = Object.create(null);
    this.streamControllers = Object.create(null);
    this.callbackCapabilities = Object.create(null);
    this.actionHandler = Object.create(null);
    this._onComObjOnMessage = event => {
      const data = event.data;
      if (data.targetName !== this.sourceName) {
        return;
      }
      if (data.stream) {
        this.#processStreamMessage(data);
        return;
      }
      if (data.callback) {
        const callbackId = data.callbackId;
        const capability = this.callbackCapabilities[callbackId];
        if (!capability) {
          throw new Error(`Cannot resolve callback ${callbackId}`);
        }
        delete this.callbackCapabilities[callbackId];
        if (data.callback === CallbackKind.DATA) {
          capability.resolve(data.data);
        } else if (data.callback === CallbackKind.ERROR) {
          capability.reject(wrapReason(data.reason));
        } else {
          throw new Error("Unexpected callback case");
        }
        return;
      }
      const action = this.actionHandler[data.action];
      if (!action) {
        throw new Error(`Unknown action from worker: ${data.action}`);
      }
      if (data.callbackId) {
        const cbSourceName = this.sourceName;
        const cbTargetName = data.sourceName;
        new Promise(function (resolve) {
          resolve(action(data.data));
        }).then(function (result) {
          comObj.postMessage({
            sourceName: cbSourceName,
            targetName: cbTargetName,
            callback: CallbackKind.DATA,
            callbackId: data.callbackId,
            data: result
          });
        }, function (reason) {
          comObj.postMessage({
            sourceName: cbSourceName,
            targetName: cbTargetName,
            callback: CallbackKind.ERROR,
            callbackId: data.callbackId,
            reason: wrapReason(reason)
          });
        });
        return;
      }
      if (data.streamId) {
        this.#createStreamSink(data);
        return;
      }
      action(data.data);
    };
    comObj.addEventListener("message", this._onComObjOnMessage);
  }
  on(actionName, handler) {
    const ah = this.actionHandler;
    if (ah[actionName]) {
      throw new Error(`There is already an actionName called "${actionName}"`);
    }
    ah[actionName] = handler;
  }
  send(actionName, data, transfers) {
    this.comObj.postMessage({
      sourceName: this.sourceName,
      targetName: this.targetName,
      action: actionName,
      data
    }, transfers);
  }
  sendWithPromise(actionName, data, transfers) {
    const callbackId = this.callbackId++;
    const capability = new _util.PromiseCapability();
    this.callbackCapabilities[callbackId] = capability;
    try {
      this.comObj.postMessage({
        sourceName: this.sourceName,
        targetName: this.targetName,
        action: actionName,
        callbackId,
        data
      }, transfers);
    } catch (ex) {
      capability.reject(ex);
    }
    return capability.promise;
  }
  sendWithStream(actionName, data, queueingStrategy, transfers) {
    const streamId = this.streamId++,
      sourceName = this.sourceName,
      targetName = this.targetName,
      comObj = this.comObj;
    return new ReadableStream({
      start: controller => {
        const startCapability = new _util.PromiseCapability();
        this.streamControllers[streamId] = {
          controller,
          startCall: startCapability,
          pullCall: null,
          cancelCall: null,
          isClosed: false
        };
        comObj.postMessage({
          sourceName,
          targetName,
          action: actionName,
          streamId,
          data,
          desiredSize: controller.desiredSize
        }, transfers);
        return startCapability.promise;
      },
      pull: controller => {
        const pullCapability = new _util.PromiseCapability();
        this.streamControllers[streamId].pullCall = pullCapability;
        comObj.postMessage({
          sourceName,
          targetName,
          stream: StreamKind.PULL,
          streamId,
          desiredSize: controller.desiredSize
        });
        return pullCapability.promise;
      },
      cancel: reason => {
        (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason");
        const cancelCapability = new _util.PromiseCapability();
        this.streamControllers[streamId].cancelCall = cancelCapability;
        this.streamControllers[streamId].isClosed = true;
        comObj.postMessage({
          sourceName,
          targetName,
          stream: StreamKind.CANCEL,
          streamId,
          reason: wrapReason(reason)
        });
        return cancelCapability.promise;
      }
    }, queueingStrategy);
  }
  #createStreamSink(data) {
    const streamId = data.streamId,
      sourceName = this.sourceName,
      targetName = data.sourceName,
      comObj = this.comObj;
    const self = this,
      action = this.actionHandler[data.action];
    const streamSink = {
      enqueue(chunk, size = 1, transfers) {
        if (this.isCancelled) {
          return;
        }
        const lastDesiredSize = this.desiredSize;
        this.desiredSize -= size;
        if (lastDesiredSize > 0 && this.desiredSize <= 0) {
          this.sinkCapability = new _util.PromiseCapability();
          this.ready = this.sinkCapability.promise;
        }
        comObj.postMessage({
          sourceName,
          targetName,
          stream: StreamKind.ENQUEUE,
          streamId,
          chunk
        }, transfers);
      },
      close() {
        if (this.isCancelled) {
          return;
        }
        this.isCancelled = true;
        comObj.postMessage({
          sourceName,
          targetName,
          stream: StreamKind.CLOSE,
          streamId
        });
        delete self.streamSinks[streamId];
      },
      error(reason) {
        (0, _util.assert)(reason instanceof Error, "error must have a valid reason");
        if (this.isCancelled) {
          return;
        }
        this.isCancelled = true;
        comObj.postMessage({
          sourceName,
          targetName,
          stream: StreamKind.ERROR,
          streamId,
          reason: wrapReason(reason)
        });
      },
      sinkCapability: new _util.PromiseCapability(),
      onPull: null,
      onCancel: null,
      isCancelled: false,
      desiredSize: data.desiredSize,
      ready: null
    };
    streamSink.sinkCapability.resolve();
    streamSink.ready = streamSink.sinkCapability.promise;
    this.streamSinks[streamId] = streamSink;
    new Promise(function (resolve) {
      resolve(action(data.data, streamSink));
    }).then(function () {
      comObj.postMessage({
        sourceName,
        targetName,
        stream: StreamKind.START_COMPLETE,
        streamId,
        success: true
      });
    }, function (reason) {
      comObj.postMessage({
        sourceName,
        targetName,
        stream: StreamKind.START_COMPLETE,
        streamId,
        reason: wrapReason(reason)
      });
    });
  }
  #processStreamMessage(data) {
    const streamId = data.streamId,
      sourceName = this.sourceName,
      targetName = data.sourceName,
      comObj = this.comObj;
    const streamController = this.streamControllers[streamId],
      streamSink = this.streamSinks[streamId];
    switch (data.stream) {
      case StreamKind.START_COMPLETE:
        if (data.success) {
          streamController.startCall.resolve();
        } else {
          streamController.startCall.reject(wrapReason(data.reason));
        }
        break;
      case StreamKind.PULL_COMPLETE:
        if (data.success) {
          streamController.pullCall.resolve();
        } else {
          streamController.pullCall.reject(wrapReason(data.reason));
        }
        break;
      case StreamKind.PULL:
        if (!streamSink) {
          comObj.postMessage({
            sourceName,
            targetName,
            stream: StreamKind.PULL_COMPLETE,
            streamId,
            success: true
          });
          break;
        }
        if (streamSink.desiredSize <= 0 && data.desiredSize > 0) {
          streamSink.sinkCapability.resolve();
        }
        streamSink.desiredSize = data.desiredSize;
        new Promise(function (resolve) {
          resolve(streamSink.onPull?.());
        }).then(function () {
          comObj.postMessage({
            sourceName,
            targetName,
            stream: StreamKind.PULL_COMPLETE,
            streamId,
            success: true
          });
        }, function (reason) {
          comObj.postMessage({
            sourceName,
            targetName,
            stream: StreamKind.PULL_COMPLETE,
            streamId,
            reason: wrapReason(reason)
          });
        });
        break;
      case StreamKind.ENQUEUE:
        (0, _util.assert)(streamController, "enqueue should have stream controller");
        if (streamController.isClosed) {
          break;
        }
        streamController.controller.enqueue(data.chunk);
        break;
      case StreamKind.CLOSE:
        (0, _util.assert)(streamController, "close should have stream controller");
        if (streamController.isClosed) {
          break;
        }
        streamController.isClosed = true;
        streamController.controller.close();
        this.#deleteStreamController(streamController, streamId);
        break;
      case StreamKind.ERROR:
        (0, _util.assert)(streamController, "error should have stream controller");
        streamController.controller.error(wrapReason(data.reason));
        this.#deleteStreamController(streamController, streamId);
        break;
      case StreamKind.CANCEL_COMPLETE:
        if (data.success) {
          streamController.cancelCall.resolve();
        } else {
          streamController.cancelCall.reject(wrapReason(data.reason));
        }
        this.#deleteStreamController(streamController, streamId);
        break;
      case StreamKind.CANCEL:
        if (!streamSink) {
          break;
        }
        new Promise(function (resolve) {
          resolve(streamSink.onCancel?.(wrapReason(data.reason)));
        }).then(function () {
          comObj.postMessage({
            sourceName,
            targetName,
            stream: StreamKind.CANCEL_COMPLETE,
            streamId,
            success: true
          });
        }, function (reason) {
          comObj.postMessage({
            sourceName,
            targetName,
            stream: StreamKind.CANCEL_COMPLETE,
            streamId,
            reason: wrapReason(reason)
          });
        });
        streamSink.sinkCapability.reject(wrapReason(data.reason));
        streamSink.isCancelled = true;
        delete this.streamSinks[streamId];
        break;
      default:
        throw new Error("Unexpected stream case");
    }
  }
  async #deleteStreamController(streamController, streamId) {
    await Promise.allSettled([streamController.startCall?.promise, streamController.pullCall?.promise, streamController.cancelCall?.promise]);
    delete this.streamControllers[streamId];
  }
  destroy() {
    this.comObj.removeEventListener("message", this._onComObjOnMessage);
  }
}
exports.MessageHandler = MessageHandler;

/***/ }),
/* 16 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.Metadata = void 0;
var _util = __w_pdfjs_require__(1);
class Metadata {
  #metadataMap;
  #data;
  constructor({
    parsedData,
    rawData
  }) {
    this.#metadataMap = parsedData;
    this.#data = rawData;
  }
  getRaw() {
    return this.#data;
  }
  get(name) {
    return this.#metadataMap.get(name) ?? null;
  }
  getAll() {
    return (0, _util.objectFromMap)(this.#metadataMap);
  }
  has(name) {
    return this.#metadataMap.has(name);
  }
}
exports.Metadata = Metadata;

/***/ }),
/* 17 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.OptionalContentConfig = void 0;
var _util = __w_pdfjs_require__(1);
var _murmurhash = __w_pdfjs_require__(8);
const INTERNAL = Symbol("INTERNAL");
class OptionalContentGroup {
  #visible = true;
  constructor(name, intent) {
    this.name = name;
    this.intent = intent;
  }
  get visible() {
    return this.#visible;
  }
  _setVisible(internal, visible) {
    if (internal !== INTERNAL) {
      (0, _util.unreachable)("Internal method `_setVisible` called.");
    }
    this.#visible = visible;
  }
}
class OptionalContentConfig {
  #cachedGetHash = null;
  #groups = new Map();
  #initialHash = null;
  #order = null;
  constructor(data) {
    this.name = null;
    this.creator = null;
    if (data === null) {
      return;
    }
    this.name = data.name;
    this.creator = data.creator;
    this.#order = data.order;
    for (const group of data.groups) {
      this.#groups.set(group.id, new OptionalContentGroup(group.name, group.intent));
    }
    if (data.baseState === "OFF") {
      for (const group of this.#groups.values()) {
        group._setVisible(INTERNAL, false);
      }
    }
    for (const on of data.on) {
      this.#groups.get(on)._setVisible(INTERNAL, true);
    }
    for (const off of data.off) {
      this.#groups.get(off)._setVisible(INTERNAL, false);
    }
    this.#initialHash = this.getHash();
  }
  #evaluateVisibilityExpression(array) {
    const length = array.length;
    if (length < 2) {
      return true;
    }
    const operator = array[0];
    for (let i = 1; i < length; i++) {
      const element = array[i];
      let state;
      if (Array.isArray(element)) {
        state = this.#evaluateVisibilityExpression(element);
      } else if (this.#groups.has(element)) {
        state = this.#groups.get(element).visible;
      } else {
        (0, _util.warn)(`Optional content group not found: ${element}`);
        return true;
      }
      switch (operator) {
        case "And":
          if (!state) {
            return false;
          }
          break;
        case "Or":
          if (state) {
            return true;
          }
          break;
        case "Not":
          return !state;
        default:
          return true;
      }
    }
    return operator === "And";
  }
  isVisible(group) {
    if (this.#groups.size === 0) {
      return true;
    }
    if (!group) {
      (0, _util.warn)("Optional content group not defined.");
      return true;
    }
    if (group.type === "OCG") {
      if (!this.#groups.has(group.id)) {
        (0, _util.warn)(`Optional content group not found: ${group.id}`);
        return true;
      }
      return this.#groups.get(group.id).visible;
    } else if (group.type === "OCMD") {
      if (group.expression) {
        return this.#evaluateVisibilityExpression(group.expression);
      }
      if (!group.policy || group.policy === "AnyOn") {
        for (const id of group.ids) {
          if (!this.#groups.has(id)) {
            (0, _util.warn)(`Optional content group not found: ${id}`);
            return true;
          }
          if (this.#groups.get(id).visible) {
            return true;
          }
        }
        return false;
      } else if (group.policy === "AllOn") {
        for (const id of group.ids) {
          if (!this.#groups.has(id)) {
            (0, _util.warn)(`Optional content group not found: ${id}`);
            return true;
          }
          if (!this.#groups.get(id).visible) {
            return false;
          }
        }
        return true;
      } else if (group.policy === "AnyOff") {
        for (const id of group.ids) {
          if (!this.#groups.has(id)) {
            (0, _util.warn)(`Optional content group not found: ${id}`);
            return true;
          }
          if (!this.#groups.get(id).visible) {
            return true;
          }
        }
        return false;
      } else if (group.policy === "AllOff") {
        for (const id of group.ids) {
          if (!this.#groups.has(id)) {
            (0, _util.warn)(`Optional content group not found: ${id}`);
            return true;
          }
          if (this.#groups.get(id).visible) {
            return false;
          }
        }
        return true;
      }
      (0, _util.warn)(`Unknown optional content policy ${group.policy}.`);
      return true;
    }
    (0, _util.warn)(`Unknown group type ${group.type}.`);
    return true;
  }
  setVisibility(id, visible = true) {
    if (!this.#groups.has(id)) {
      (0, _util.warn)(`Optional content group not found: ${id}`);
      return;
    }
    this.#groups.get(id)._setVisible(INTERNAL, !!visible);
    this.#cachedGetHash = null;
  }
  get hasInitialVisibility() {
    return this.#initialHash === null || this.getHash() === this.#initialHash;
  }
  getOrder() {
    if (!this.#groups.size) {
      return null;
    }
    if (this.#order) {
      return this.#order.slice();
    }
    return [...this.#groups.keys()];
  }
  getGroups() {
    return this.#groups.size > 0 ? (0, _util.objectFromMap)(this.#groups) : null;
  }
  getGroup(id) {
    return this.#groups.get(id) || null;
  }
  getHash() {
    if (this.#cachedGetHash !== null) {
      return this.#cachedGetHash;
    }
    const hash = new _murmurhash.MurmurHash3_64();
    for (const [id, group] of this.#groups) {
      hash.update(`${id}:${group.visible}`);
    }
    return this.#cachedGetHash = hash.hexdigest();
  }
}
exports.OptionalContentConfig = OptionalContentConfig;

/***/ }),
/* 18 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.PDFDataTransportStream = void 0;
var _util = __w_pdfjs_require__(1);
var _display_utils = __w_pdfjs_require__(6);
class PDFDataTransportStream {
  constructor({
    length,
    initialData,
    progressiveDone = false,
    contentDispositionFilename = null,
    disableRange = false,
    disableStream = false
  }, pdfDataRangeTransport) {
    (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.');
    this._queuedChunks = [];
    this._progressiveDone = progressiveDone;
    this._contentDispositionFilename = contentDispositionFilename;
    if (initialData?.length > 0) {
      const buffer = initialData instanceof Uint8Array && initialData.byteLength === initialData.buffer.byteLength ? initialData.buffer : new Uint8Array(initialData).buffer;
      this._queuedChunks.push(buffer);
    }
    this._pdfDataRangeTransport = pdfDataRangeTransport;
    this._isStreamingSupported = !disableStream;
    this._isRangeSupported = !disableRange;
    this._contentLength = length;
    this._fullRequestReader = null;
    this._rangeReaders = [];
    this._pdfDataRangeTransport.addRangeListener((begin, chunk) => {
      this._onReceiveData({
        begin,
        chunk
      });
    });
    this._pdfDataRangeTransport.addProgressListener((loaded, total) => {
      this._onProgress({
        loaded,
        total
      });
    });
    this._pdfDataRangeTransport.addProgressiveReadListener(chunk => {
      this._onReceiveData({
        chunk
      });
    });
    this._pdfDataRangeTransport.addProgressiveDoneListener(() => {
      this._onProgressiveDone();
    });
    this._pdfDataRangeTransport.transportReady();
  }
  _onReceiveData({
    begin,
    chunk
  }) {
    const buffer = chunk instanceof Uint8Array && chunk.byteLength === chunk.buffer.byteLength ? chunk.buffer : new Uint8Array(chunk).buffer;
    if (begin === undefined) {
      if (this._fullRequestReader) {
        this._fullRequestReader._enqueue(buffer);
      } else {
        this._queuedChunks.push(buffer);
      }
    } else {
      const found = this._rangeReaders.some(function (rangeReader) {
        if (rangeReader._begin !== begin) {
          return false;
        }
        rangeReader._enqueue(buffer);
        return true;
      });
      (0, _util.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.");
    }
  }
  get _progressiveDataLength() {
    return this._fullRequestReader?._loaded ?? 0;
  }
  _onProgress(evt) {
    if (evt.total === undefined) {
      this._rangeReaders[0]?.onProgress?.({
        loaded: evt.loaded
      });
    } else {
      this._fullRequestReader?.onProgress?.({
        loaded: evt.loaded,
        total: evt.total
      });
    }
  }
  _onProgressiveDone() {
    this._fullRequestReader?.progressiveDone();
    this._progressiveDone = true;
  }
  _removeRangeReader(reader) {
    const i = this._rangeReaders.indexOf(reader);
    if (i >= 0) {
      this._rangeReaders.splice(i, 1);
    }
  }
  getFullReader() {
    (0, _util.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once.");
    const queuedChunks = this._queuedChunks;
    this._queuedChunks = null;
    return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename);
  }
  getRangeReader(begin, end) {
    if (end <= this._progressiveDataLength) {
      return null;
    }
    const reader = new PDFDataTransportStreamRangeReader(this, begin, end);
    this._pdfDataRangeTransport.requestDataRange(begin, end);
    this._rangeReaders.push(reader);
    return reader;
  }
  cancelAllRequests(reason) {
    this._fullRequestReader?.cancel(reason);
    for (const reader of this._rangeReaders.slice(0)) {
      reader.cancel(reason);
    }
    this._pdfDataRangeTransport.abort();
  }
}
exports.PDFDataTransportStream = PDFDataTransportStream;
class PDFDataTransportStreamReader {
  constructor(stream, queuedChunks, progressiveDone = false, contentDispositionFilename = null) {
    this._stream = stream;
    this._done = progressiveDone || false;
    this._filename = (0, _display_utils.isPdfFile)(contentDispositionFilename) ? contentDispositionFilename : null;
    this._queuedChunks = queuedChunks || [];
    this._loaded = 0;
    for (const chunk of this._queuedChunks) {
      this._loaded += chunk.byteLength;
    }
    this._requests = [];
    this._headersReady = Promise.resolve();
    stream._fullRequestReader = this;
    this.onProgress = null;
  }
  _enqueue(chunk) {
    if (this._done) {
      return;
    }
    if (this._requests.length > 0) {
      const requestCapability = this._requests.shift();
      requestCapability.resolve({
        value: chunk,
        done: false
      });
    } else {
      this._queuedChunks.push(chunk);
    }
    this._loaded += chunk.byteLength;
  }
  get headersReady() {
    return this._headersReady;
  }
  get filename() {
    return this._filename;
  }
  get isRangeSupported() {
    return this._stream._isRangeSupported;
  }
  get isStreamingSupported() {
    return this._stream._isStreamingSupported;
  }
  get contentLength() {
    return this._stream._contentLength;
  }
  async read() {
    if (this._queuedChunks.length > 0) {
      const chunk = this._queuedChunks.shift();
      return {
        value: chunk,
        done: false
      };
    }
    if (this._done) {
      return {
        value: undefined,
        done: true
      };
    }
    const requestCapability = new _util.PromiseCapability();
    this._requests.push(requestCapability);
    return requestCapability.promise;
  }
  cancel(reason) {
    this._done = true;
    for (const requestCapability of this._requests) {
      requestCapability.resolve({
        value: undefined,
        done: true
      });
    }
    this._requests.length = 0;
  }
  progressiveDone() {
    if (this._done) {
      return;
    }
    this._done = true;
  }
}
class PDFDataTransportStreamRangeReader {
  constructor(stream, begin, end) {
    this._stream = stream;
    this._begin = begin;
    this._end = end;
    this._queuedChunk = null;
    this._requests = [];
    this._done = false;
    this.onProgress = null;
  }
  _enqueue(chunk) {
    if (this._done) {
      return;
    }
    if (this._requests.length === 0) {
      this._queuedChunk = chunk;
    } else {
      const requestsCapability = this._requests.shift();
      requestsCapability.resolve({
        value: chunk,
        done: false
      });
      for (const requestCapability of this._requests) {
        requestCapability.resolve({
          value: undefined,
          done: true
        });
      }
      this._requests.length = 0;
    }
    this._done = true;
    this._stream._removeRangeReader(this);
  }
  get isStreamingSupported() {
    return false;
  }
  async read() {
    if (this._queuedChunk) {
      const chunk = this._queuedChunk;
      this._queuedChunk = null;
      return {
        value: chunk,
        done: false
      };
    }
    if (this._done) {
      return {
        value: undefined,
        done: true
      };
    }
    const requestCapability = new _util.PromiseCapability();
    this._requests.push(requestCapability);
    return requestCapability.promise;
  }
  cancel(reason) {
    this._done = true;
    for (const requestCapability of this._requests) {
      requestCapability.resolve({
        value: undefined,
        done: true
      });
    }
    this._requests.length = 0;
    this._stream._removeRangeReader(this);
  }
}

/***/ }),
/* 19 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.PDFFetchStream = void 0;
var _util = __w_pdfjs_require__(1);
var _network_utils = __w_pdfjs_require__(20);
;
function createFetchOptions(headers, withCredentials, abortController) {
  return {
    method: "GET",
    headers,
    signal: abortController.signal,
    mode: "cors",
    credentials: withCredentials ? "include" : "same-origin",
    redirect: "follow"
  };
}
function createHeaders(httpHeaders) {
  const headers = new Headers();
  for (const property in httpHeaders) {
    const value = httpHeaders[property];
    if (value === undefined) {
      continue;
    }
    headers.append(property, value);
  }
  return headers;
}
function getArrayBuffer(val) {
  if (val instanceof Uint8Array) {
    return val.buffer;
  }
  if (val instanceof ArrayBuffer) {
    return val;
  }
  (0, _util.warn)(`getArrayBuffer - unexpected data format: ${val}`);
  return new Uint8Array(val).buffer;
}
class PDFFetchStream {
  constructor(source) {
    this.source = source;
    this.isHttp = /^https?:/i.test(source.url);
    this.httpHeaders = this.isHttp && source.httpHeaders || {};
    this._fullRequestReader = null;
    this._rangeRequestReaders = [];
  }
  get _progressiveDataLength() {
    return this._fullRequestReader?._loaded ?? 0;
  }
  getFullReader() {
    (0, _util.assert)(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once.");
    this._fullRequestReader = new PDFFetchStreamReader(this);
    return this._fullRequestReader;
  }
  getRangeReader(begin, end) {
    if (end <= this._progressiveDataLength) {
      return null;
    }
    const reader = new PDFFetchStreamRangeReader(this, begin, end);
    this._rangeRequestReaders.push(reader);
    return reader;
  }
  cancelAllRequests(reason) {
    this._fullRequestReader?.cancel(reason);
    for (const reader of this._rangeRequestReaders.slice(0)) {
      reader.cancel(reason);
    }
  }
}
exports.PDFFetchStream = PDFFetchStream;
class PDFFetchStreamReader {
  constructor(stream) {
    this._stream = stream;
    this._reader = null;
    this._loaded = 0;
    this._filename = null;
    const source = stream.source;
    this._withCredentials = source.withCredentials || false;
    this._contentLength = source.length;
    this._headersCapability = new _util.PromiseCapability();
    this._disableRange = source.disableRange || false;
    this._rangeChunkSize = source.rangeChunkSize;
    if (!this._rangeChunkSize && !this._disableRange) {
      this._disableRange = true;
    }
    this._abortController = new AbortController();
    this._isStreamingSupported = !source.disableStream;
    this._isRangeSupported = !source.disableRange;
    this._headers = createHeaders(this._stream.httpHeaders);
    const url = source.url;
    fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => {
      if (!(0, _network_utils.validateResponseStatus)(response.status)) {
        throw (0, _network_utils.createResponseStatusError)(response.status, url);
      }
      this._reader = response.body.getReader();
      this._headersCapability.resolve();
      const getResponseHeader = name => {
        return response.headers.get(name);
      };
      const {
        allowRangeRequests,
        suggestedLength
      } = (0, _network_utils.validateRangeRequestCapabilities)({
        getResponseHeader,
        isHttp: this._stream.isHttp,
        rangeChunkSize: this._rangeChunkSize,
        disableRange: this._disableRange
      });
      this._isRangeSupported = allowRangeRequests;
      this._contentLength = suggestedLength || this._contentLength;
      this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);
      if (!this._isStreamingSupported && this._isRangeSupported) {
        this.cancel(new _util.AbortException("Streaming is disabled."));
      }
    }).catch(this._headersCapability.reject);
    this.onProgress = null;
  }
  get headersReady() {
    return this._headersCapability.promise;
  }
  get filename() {
    return this._filename;
  }
  get contentLength() {
    return this._contentLength;
  }
  get isRangeSupported() {
    return this._isRangeSupported;
  }
  get isStreamingSupported() {
    return this._isStreamingSupported;
  }
  async read() {
    await this._headersCapability.promise;
    const {
      value,
      done
    } = await this._reader.read();
    if (done) {
      return {
        value,
        done
      };
    }
    this._loaded += value.byteLength;
    this.onProgress?.({
      loaded: this._loaded,
      total: this._contentLength
    });
    return {
      value: getArrayBuffer(value),
      done: false
    };
  }
  cancel(reason) {
    this._reader?.cancel(reason);
    this._abortController.abort();
  }
}
class PDFFetchStreamRangeReader {
  constructor(stream, begin, end) {
    this._stream = stream;
    this._reader = null;
    this._loaded = 0;
    const source = stream.source;
    this._withCredentials = source.withCredentials || false;
    this._readCapability = new _util.PromiseCapability();
    this._isStreamingSupported = !source.disableStream;
    this._abortController = new AbortController();
    this._headers = createHeaders(this._stream.httpHeaders);
    this._headers.append("Range", `bytes=${begin}-${end - 1}`);
    const url = source.url;
    fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => {
      if (!(0, _network_utils.validateResponseStatus)(response.status)) {
        throw (0, _network_utils.createResponseStatusError)(response.status, url);
      }
      this._readCapability.resolve();
      this._reader = response.body.getReader();
    }).catch(this._readCapability.reject);
    this.onProgress = null;
  }
  get isStreamingSupported() {
    return this._isStreamingSupported;
  }
  async read() {
    await this._readCapability.promise;
    const {
      value,
      done
    } = await this._reader.read();
    if (done) {
      return {
        value,
        done
      };
    }
    this._loaded += value.byteLength;
    this.onProgress?.({
      loaded: this._loaded
    });
    return {
      value: getArrayBuffer(value),
      done: false
    };
  }
  cancel(reason) {
    this._reader?.cancel(reason);
    this._abortController.abort();
  }
}

/***/ }),
/* 20 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.createResponseStatusError = createResponseStatusError;
exports.extractFilenameFromHeader = extractFilenameFromHeader;
exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities;
exports.validateResponseStatus = validateResponseStatus;
var _util = __w_pdfjs_require__(1);
var _content_disposition = __w_pdfjs_require__(21);
var _display_utils = __w_pdfjs_require__(6);
function validateRangeRequestCapabilities({
  getResponseHeader,
  isHttp,
  rangeChunkSize,
  disableRange
}) {
  const returnValues = {
    allowRangeRequests: false,
    suggestedLength: undefined
  };
  const length = parseInt(getResponseHeader("Content-Length"), 10);
  if (!Number.isInteger(length)) {
    return returnValues;
  }
  returnValues.suggestedLength = length;
  if (length <= 2 * rangeChunkSize) {
    return returnValues;
  }
  if (disableRange || !isHttp) {
    return returnValues;
  }
  if (getResponseHeader("Accept-Ranges") !== "bytes") {
    return returnValues;
  }
  const contentEncoding = getResponseHeader("Content-Encoding") || "identity";
  if (contentEncoding !== "identity") {
    return returnValues;
  }
  returnValues.allowRangeRequests = true;
  return returnValues;
}
function extractFilenameFromHeader(getResponseHeader) {
  const contentDisposition = getResponseHeader("Content-Disposition");
  if (contentDisposition) {
    let filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition);
    if (filename.includes("%")) {
      try {
        filename = decodeURIComponent(filename);
      } catch {}
    }
    if ((0, _display_utils.isPdfFile)(filename)) {
      return filename;
    }
  }
  return null;
}
function createResponseStatusError(status, url) {
  if (status === 404 || status === 0 && url.startsWith("file:")) {
    return new _util.MissingPDFException('Missing PDF "' + url + '".');
  }
  return new _util.UnexpectedResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status);
}
function validateResponseStatus(status) {
  return status === 200 || status === 206;
}

/***/ }),
/* 21 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader;
var _util = __w_pdfjs_require__(1);
function getFilenameFromContentDispositionHeader(contentDisposition) {
  let needsEncodingFixup = true;
  let tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition);
  if (tmp) {
    tmp = tmp[1];
    let filename = rfc2616unquote(tmp);
    filename = unescape(filename);
    filename = rfc5987decode(filename);
    filename = rfc2047decode(filename);
    return fixupEncoding(filename);
  }
  tmp = rfc2231getparam(contentDisposition);
  if (tmp) {
    const filename = rfc2047decode(tmp);
    return fixupEncoding(filename);
  }
  tmp = toParamRegExp("filename", "i").exec(contentDisposition);
  if (tmp) {
    tmp = tmp[1];
    let filename = rfc2616unquote(tmp);
    filename = rfc2047decode(filename);
    return fixupEncoding(filename);
  }
  function toParamRegExp(attributePattern, flags) {
    return new RegExp("(?:^|;)\\s*" + attributePattern + "\\s*=\\s*" + "(" + '[^";\\s][^;\\s]*' + "|" + '"(?:[^"\\\\]|\\\\"?)+"?' + ")", flags);
  }
  function textdecode(encoding, value) {
    if (encoding) {
      if (!/^[\x00-\xFF]+$/.test(value)) {
        return value;
      }
      try {
        const decoder = new TextDecoder(encoding, {
          fatal: true
        });
        const buffer = (0, _util.stringToBytes)(value);
        value = decoder.decode(buffer);
        needsEncodingFixup = false;
      } catch {}
    }
    return value;
  }
  function fixupEncoding(value) {
    if (needsEncodingFixup && /[\x80-\xff]/.test(value)) {
      value = textdecode("utf-8", value);
      if (needsEncodingFixup) {
        value = textdecode("iso-8859-1", value);
      }
    }
    return value;
  }
  function rfc2231getparam(contentDispositionStr) {
    const matches = [];
    let match;
    const iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig");
    while ((match = iter.exec(contentDispositionStr)) !== null) {
      let [, n, quot, part] = match;
      n = parseInt(n, 10);
      if (n in matches) {
        if (n === 0) {
          break;
        }
        continue;
      }
      matches[n] = [quot, part];
    }
    const parts = [];
    for (let n = 0; n < matches.length; ++n) {
      if (!(n in matches)) {
        break;
      }
      let [quot, part] = matches[n];
      part = rfc2616unquote(part);
      if (quot) {
        part = unescape(part);
        if (n === 0) {
          part = rfc5987decode(part);
        }
      }
      parts.push(part);
    }
    return parts.join("");
  }
  function rfc2616unquote(value) {
    if (value.startsWith('"')) {
      const parts = value.slice(1).split('\\"');
      for (let i = 0; i < parts.length; ++i) {
        const quotindex = parts[i].indexOf('"');
        if (quotindex !== -1) {
          parts[i] = parts[i].slice(0, quotindex);
          parts.length = i + 1;
        }
        parts[i] = parts[i].replaceAll(/\\(.)/g, "$1");
      }
      value = parts.join('"');
    }
    return value;
  }
  function rfc5987decode(extvalue) {
    const encodingend = extvalue.indexOf("'");
    if (encodingend === -1) {
      return extvalue;
    }
    const encoding = extvalue.slice(0, encodingend);
    const langvalue = extvalue.slice(encodingend + 1);
    const value = langvalue.replace(/^[^']*'/, "");
    return textdecode(encoding, value);
  }
  function rfc2047decode(value) {
    if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) {
      return value;
    }
    return value.replaceAll(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) {
      if (encoding === "q" || encoding === "Q") {
        text = text.replaceAll("_", " ");
        text = text.replaceAll(/=([0-9a-fA-F]{2})/g, function (match, hex) {
          return String.fromCharCode(parseInt(hex, 16));
        });
        return textdecode(charset, text);
      }
      try {
        text = atob(text);
      } catch {}
      return textdecode(charset, text);
    });
  }
  return "";
}

/***/ }),
/* 22 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.PDFNetworkStream = void 0;
var _util = __w_pdfjs_require__(1);
var _network_utils = __w_pdfjs_require__(20);
;
const OK_RESPONSE = 200;
const PARTIAL_CONTENT_RESPONSE = 206;
function getArrayBuffer(xhr) {
  const data = xhr.response;
  if (typeof data !== "string") {
    return data;
  }
  return (0, _util.stringToBytes)(data).buffer;
}
class NetworkManager {
  constructor(url, args = {}) {
    this.url = url;
    this.isHttp = /^https?:/i.test(url);
    this.httpHeaders = this.isHttp && args.httpHeaders || Object.create(null);
    this.withCredentials = args.withCredentials || false;
    this.currXhrId = 0;
    this.pendingRequests = Object.create(null);
  }
  requestRange(begin, end, listeners) {
    const args = {
      begin,
      end
    };
    for (const prop in listeners) {
      args[prop] = listeners[prop];
    }
    return this.request(args);
  }
  requestFull(listeners) {
    return this.request(listeners);
  }
  request(args) {
    const xhr = new XMLHttpRequest();
    const xhrId = this.currXhrId++;
    const pendingRequest = this.pendingRequests[xhrId] = {
      xhr
    };
    xhr.open("GET", this.url);
    xhr.withCredentials = this.withCredentials;
    for (const property in this.httpHeaders) {
      const value = this.httpHeaders[property];
      if (value === undefined) {
        continue;
      }
      xhr.setRequestHeader(property, value);
    }
    if (this.isHttp && "begin" in args && "end" in args) {
      xhr.setRequestHeader("Range", `bytes=${args.begin}-${args.end - 1}`);
      pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE;
    } else {
      pendingRequest.expectedStatus = OK_RESPONSE;
    }
    xhr.responseType = "arraybuffer";
    if (args.onError) {
      xhr.onerror = function (evt) {
        args.onError(xhr.status);
      };
    }
    xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);
    xhr.onprogress = this.onProgress.bind(this, xhrId);
    pendingRequest.onHeadersReceived = args.onHeadersReceived;
    pendingRequest.onDone = args.onDone;
    pendingRequest.onError = args.onError;
    pendingRequest.onProgress = args.onProgress;
    xhr.send(null);
    return xhrId;
  }
  onProgress(xhrId, evt) {
    const pendingRequest = this.pendingRequests[xhrId];
    if (!pendingRequest) {
      return;
    }
    pendingRequest.onProgress?.(evt);
  }
  onStateChange(xhrId, evt) {
    const pendingRequest = this.pendingRequests[xhrId];
    if (!pendingRequest) {
      return;
    }
    const xhr = pendingRequest.xhr;
    if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {
      pendingRequest.onHeadersReceived();
      delete pendingRequest.onHeadersReceived;
    }
    if (xhr.readyState !== 4) {
      return;
    }
    if (!(xhrId in this.pendingRequests)) {
      return;
    }
    delete this.pendingRequests[xhrId];
    if (xhr.status === 0 && this.isHttp) {
      pendingRequest.onError?.(xhr.status);
      return;
    }
    const xhrStatus = xhr.status || OK_RESPONSE;
    const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;
    if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) {
      pendingRequest.onError?.(xhr.status);
      return;
    }
    const chunk = getArrayBuffer(xhr);
    if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {
      const rangeHeader = xhr.getResponseHeader("Content-Range");
      const matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader);
      pendingRequest.onDone({
        begin: parseInt(matches[1], 10),
        chunk
      });
    } else if (chunk) {
      pendingRequest.onDone({
        begin: 0,
        chunk
      });
    } else {
      pendingRequest.onError?.(xhr.status);
    }
  }
  getRequestXhr(xhrId) {
    return this.pendingRequests[xhrId].xhr;
  }
  isPendingRequest(xhrId) {
    return xhrId in this.pendingRequests;
  }
  abortRequest(xhrId) {
    const xhr = this.pendingRequests[xhrId].xhr;
    delete this.pendingRequests[xhrId];
    xhr.abort();
  }
}
class PDFNetworkStream {
  constructor(source) {
    this._source = source;
    this._manager = new NetworkManager(source.url, {
      httpHeaders: source.httpHeaders,
      withCredentials: source.withCredentials
    });
    this._rangeChunkSize = source.rangeChunkSize;
    this._fullRequestReader = null;
    this._rangeRequestReaders = [];
  }
  _onRangeRequestReaderClosed(reader) {
    const i = this._rangeRequestReaders.indexOf(reader);
    if (i >= 0) {
      this._rangeRequestReaders.splice(i, 1);
    }
  }
  getFullReader() {
    (0, _util.assert)(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once.");
    this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source);
    return this._fullRequestReader;
  }
  getRangeReader(begin, end) {
    const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end);
    reader.onClosed = this._onRangeRequestReaderClosed.bind(this);
    this._rangeRequestReaders.push(reader);
    return reader;
  }
  cancelAllRequests(reason) {
    this._fullRequestReader?.cancel(reason);
    for (const reader of this._rangeRequestReaders.slice(0)) {
      reader.cancel(reason);
    }
  }
}
exports.PDFNetworkStream = PDFNetworkStream;
class PDFNetworkStreamFullRequestReader {
  constructor(manager, source) {
    this._manager = manager;
    const args = {
      onHeadersReceived: this._onHeadersReceived.bind(this),
      onDone: this._onDone.bind(this),
      onError: this._onError.bind(this),
      onProgress: this._onProgress.bind(this)
    };
    this._url = source.url;
    this._fullRequestId = manager.requestFull(args);
    this._headersReceivedCapability = new _util.PromiseCapability();
    this._disableRange = source.disableRange || false;
    this._contentLength = source.length;
    this._rangeChunkSize = source.rangeChunkSize;
    if (!this._rangeChunkSize && !this._disableRange) {
      this._disableRange = true;
    }
    this._isStreamingSupported = false;
    this._isRangeSupported = false;
    this._cachedChunks = [];
    this._requests = [];
    this._done = false;
    this._storedError = undefined;
    this._filename = null;
    this.onProgress = null;
  }
  _onHeadersReceived() {
    const fullRequestXhrId = this._fullRequestId;
    const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId);
    const getResponseHeader = name => {
      return fullRequestXhr.getResponseHeader(name);
    };
    const {
      allowRangeRequests,
      suggestedLength
    } = (0, _network_utils.validateRangeRequestCapabilities)({
      getResponseHeader,
      isHttp: this._manager.isHttp,
      rangeChunkSize: this._rangeChunkSize,
      disableRange: this._disableRange
    });
    if (allowRangeRequests) {
      this._isRangeSupported = true;
    }
    this._contentLength = suggestedLength || this._contentLength;
    this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);
    if (this._isRangeSupported) {
      this._manager.abortRequest(fullRequestXhrId);
    }
    this._headersReceivedCapability.resolve();
  }
  _onDone(data) {
    if (data) {
      if (this._requests.length > 0) {
        const requestCapability = this._requests.shift();
        requestCapability.resolve({
          value: data.chunk,
          done: false
        });
      } else {
        this._cachedChunks.push(data.chunk);
      }
    }
    this._done = true;
    if (this._cachedChunks.length > 0) {
      return;
    }
    for (const requestCapability of this._requests) {
      requestCapability.resolve({
        value: undefined,
        done: true
      });
    }
    this._requests.length = 0;
  }
  _onError(status) {
    this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url);
    this._headersReceivedCapability.reject(this._storedError);
    for (const requestCapability of this._requests) {
      requestCapability.reject(this._storedError);
    }
    this._requests.length = 0;
    this._cachedChunks.length = 0;
  }
  _onProgress(evt) {
    this.onProgress?.({
      loaded: evt.loaded,
      total: evt.lengthComputable ? evt.total : this._contentLength
    });
  }
  get filename() {
    return this._filename;
  }
  get isRangeSupported() {
    return this._isRangeSupported;
  }
  get isStreamingSupported() {
    return this._isStreamingSupported;
  }
  get contentLength() {
    return this._contentLength;
  }
  get headersReady() {
    return this._headersReceivedCapability.promise;
  }
  async read() {
    if (this._storedError) {
      throw this._storedError;
    }
    if (this._cachedChunks.length > 0) {
      const chunk = this._cachedChunks.shift();
      return {
        value: chunk,
        done: false
      };
    }
    if (this._done) {
      return {
        value: undefined,
        done: true
      };
    }
    const requestCapability = new _util.PromiseCapability();
    this._requests.push(requestCapability);
    return requestCapability.promise;
  }
  cancel(reason) {
    this._done = true;
    this._headersReceivedCapability.reject(reason);
    for (const requestCapability of this._requests) {
      requestCapability.resolve({
        value: undefined,
        done: true
      });
    }
    this._requests.length = 0;
    if (this._manager.isPendingRequest(this._fullRequestId)) {
      this._manager.abortRequest(this._fullRequestId);
    }
    this._fullRequestReader = null;
  }
}
class PDFNetworkStreamRangeRequestReader {
  constructor(manager, begin, end) {
    this._manager = manager;
    const args = {
      onDone: this._onDone.bind(this),
      onError: this._onError.bind(this),
      onProgress: this._onProgress.bind(this)
    };
    this._url = manager.url;
    this._requestId = manager.requestRange(begin, end, args);
    this._requests = [];
    this._queuedChunk = null;
    this._done = false;
    this._storedError = undefined;
    this.onProgress = null;
    this.onClosed = null;
  }
  _close() {
    this.onClosed?.(this);
  }
  _onDone(data) {
    const chunk = data.chunk;
    if (this._requests.length > 0) {
      const requestCapability = this._requests.shift();
      requestCapability.resolve({
        value: chunk,
        done: false
      });
    } else {
      this._queuedChunk = chunk;
    }
    this._done = true;
    for (const requestCapability of this._requests) {
      requestCapability.resolve({
        value: undefined,
        done: true
      });
    }
    this._requests.length = 0;
    this._close();
  }
  _onError(status) {
    this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url);
    for (const requestCapability of this._requests) {
      requestCapability.reject(this._storedError);
    }
    this._requests.length = 0;
    this._queuedChunk = null;
  }
  _onProgress(evt) {
    if (!this.isStreamingSupported) {
      this.onProgress?.({
        loaded: evt.loaded
      });
    }
  }
  get isStreamingSupported() {
    return false;
  }
  async read() {
    if (this._storedError) {
      throw this._storedError;
    }
    if (this._queuedChunk !== null) {
      const chunk = this._queuedChunk;
      this._queuedChunk = null;
      return {
        value: chunk,
        done: false
      };
    }
    if (this._done) {
      return {
        value: undefined,
        done: true
      };
    }
    const requestCapability = new _util.PromiseCapability();
    this._requests.push(requestCapability);
    return requestCapability.promise;
  }
  cancel(reason) {
    this._done = true;
    for (const requestCapability of this._requests) {
      requestCapability.resolve({
        value: undefined,
        done: true
      });
    }
    this._requests.length = 0;
    if (this._manager.isPendingRequest(this._requestId)) {
      this._manager.abortRequest(this._requestId);
    }
    this._close();
  }
}

/***/ }),
/* 23 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.PDFNodeStream = void 0;
var _util = __w_pdfjs_require__(1);
var _network_utils = __w_pdfjs_require__(20);
;
const fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//;
function parseUrl(sourceUrl) {
  const url = __webpack_require__(6558);
  const parsedUrl = url.parse(sourceUrl);
  if (parsedUrl.protocol === "file:" || parsedUrl.host) {
    return parsedUrl;
  }
  if (/^[a-z]:[/\\]/i.test(sourceUrl)) {
    return url.parse(`file:///${sourceUrl}`);
  }
  if (!parsedUrl.host) {
    parsedUrl.protocol = "file:";
  }
  return parsedUrl;
}
class PDFNodeStream {
  constructor(source) {
    this.source = source;
    this.url = parseUrl(source.url);
    this.isHttp = this.url.protocol === "http:" || this.url.protocol === "https:";
    this.isFsUrl = this.url.protocol === "file:";
    this.httpHeaders = this.isHttp && source.httpHeaders || {};
    this._fullRequestReader = null;
    this._rangeRequestReaders = [];
  }
  get _progressiveDataLength() {
    return this._fullRequestReader?._loaded ?? 0;
  }
  getFullReader() {
    (0, _util.assert)(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once.");
    this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this);
    return this._fullRequestReader;
  }
  getRangeReader(start, end) {
    if (end <= this._progressiveDataLength) {
      return null;
    }
    const rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end);
    this._rangeRequestReaders.push(rangeReader);
    return rangeReader;
  }
  cancelAllRequests(reason) {
    this._fullRequestReader?.cancel(reason);
    for (const reader of this._rangeRequestReaders.slice(0)) {
      reader.cancel(reason);
    }
  }
}
exports.PDFNodeStream = PDFNodeStream;
class BaseFullReader {
  constructor(stream) {
    this._url = stream.url;
    this._done = false;
    this._storedError = null;
    this.onProgress = null;
    const source = stream.source;
    this._contentLength = source.length;
    this._loaded = 0;
    this._filename = null;
    this._disableRange = source.disableRange || false;
    this._rangeChunkSize = source.rangeChunkSize;
    if (!this._rangeChunkSize && !this._disableRange) {
      this._disableRange = true;
    }
    this._isStreamingSupported = !source.disableStream;
    this._isRangeSupported = !source.disableRange;
    this._readableStream = null;
    this._readCapability = new _util.PromiseCapability();
    this._headersCapability = new _util.PromiseCapability();
  }
  get headersReady() {
    return this._headersCapability.promise;
  }
  get filename() {
    return this._filename;
  }
  get contentLength() {
    return this._contentLength;
  }
  get isRangeSupported() {
    return this._isRangeSupported;
  }
  get isStreamingSupported() {
    return this._isStreamingSupported;
  }
  async read() {
    await this._readCapability.promise;
    if (this._done) {
      return {
        value: undefined,
        done: true
      };
    }
    if (this._storedError) {
      throw this._storedError;
    }
    const chunk = this._readableStream.read();
    if (chunk === null) {
      this._readCapability = new _util.PromiseCapability();
      return this.read();
    }
    this._loaded += chunk.length;
    this.onProgress?.({
      loaded: this._loaded,
      total: this._contentLength
    });
    const buffer = new Uint8Array(chunk).buffer;
    return {
      value: buffer,
      done: false
    };
  }
  cancel(reason) {
    if (!this._readableStream) {
      this._error(reason);
      return;
    }
    this._readableStream.destroy(reason);
  }
  _error(reason) {
    this._storedError = reason;
    this._readCapability.resolve();
  }
  _setReadableStream(readableStream) {
    this._readableStream = readableStream;
    readableStream.on("readable", () => {
      this._readCapability.resolve();
    });
    readableStream.on("end", () => {
      readableStream.destroy();
      this._done = true;
      this._readCapability.resolve();
    });
    readableStream.on("error", reason => {
      this._error(reason);
    });
    if (!this._isStreamingSupported && this._isRangeSupported) {
      this._error(new _util.AbortException("streaming is disabled"));
    }
    if (this._storedError) {
      this._readableStream.destroy(this._storedError);
    }
  }
}
class BaseRangeReader {
  constructor(stream) {
    this._url = stream.url;
    this._done = false;
    this._storedError = null;
    this.onProgress = null;
    this._loaded = 0;
    this._readableStream = null;
    this._readCapability = new _util.PromiseCapability();
    const source = stream.source;
    this._isStreamingSupported = !source.disableStream;
  }
  get isStreamingSupported() {
    return this._isStreamingSupported;
  }
  async read() {
    await this._readCapability.promise;
    if (this._done) {
      return {
        value: undefined,
        done: true
      };
    }
    if (this._storedError) {
      throw this._storedError;
    }
    const chunk = this._readableStream.read();
    if (chunk === null) {
      this._readCapability = new _util.PromiseCapability();
      return this.read();
    }
    this._loaded += chunk.length;
    this.onProgress?.({
      loaded: this._loaded
    });
    const buffer = new Uint8Array(chunk).buffer;
    return {
      value: buffer,
      done: false
    };
  }
  cancel(reason) {
    if (!this._readableStream) {
      this._error(reason);
      return;
    }
    this._readableStream.destroy(reason);
  }
  _error(reason) {
    this._storedError = reason;
    this._readCapability.resolve();
  }
  _setReadableStream(readableStream) {
    this._readableStream = readableStream;
    readableStream.on("readable", () => {
      this._readCapability.resolve();
    });
    readableStream.on("end", () => {
      readableStream.destroy();
      this._done = true;
      this._readCapability.resolve();
    });
    readableStream.on("error", reason => {
      this._error(reason);
    });
    if (this._storedError) {
      this._readableStream.destroy(this._storedError);
    }
  }
}
function createRequestOptions(parsedUrl, headers) {
  return {
    protocol: parsedUrl.protocol,
    auth: parsedUrl.auth,
    host: parsedUrl.hostname,
    port: parsedUrl.port,
    path: parsedUrl.path,
    method: "GET",
    headers
  };
}
class PDFNodeStreamFullReader extends BaseFullReader {
  constructor(stream) {
    super(stream);
    const handleResponse = response => {
      if (response.statusCode === 404) {
        const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`);
        this._storedError = error;
        this._headersCapability.reject(error);
        return;
      }
      this._headersCapability.resolve();
      this._setReadableStream(response);
      const getResponseHeader = name => {
        return this._readableStream.headers[name.toLowerCase()];
      };
      const {
        allowRangeRequests,
        suggestedLength
      } = (0, _network_utils.validateRangeRequestCapabilities)({
        getResponseHeader,
        isHttp: stream.isHttp,
        rangeChunkSize: this._rangeChunkSize,
        disableRange: this._disableRange
      });
      this._isRangeSupported = allowRangeRequests;
      this._contentLength = suggestedLength || this._contentLength;
      this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);
    };
    this._request = null;
    if (this._url.protocol === "http:") {
      const http = __webpack_require__(2001);
      this._request = http.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse);
    } else {
      const https = __webpack_require__(3779);
      this._request = https.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse);
    }
    this._request.on("error", reason => {
      this._storedError = reason;
      this._headersCapability.reject(reason);
    });
    this._request.end();
  }
}
class PDFNodeStreamRangeReader extends BaseRangeReader {
  constructor(stream, start, end) {
    super(stream);
    this._httpHeaders = {};
    for (const property in stream.httpHeaders) {
      const value = stream.httpHeaders[property];
      if (value === undefined) {
        continue;
      }
      this._httpHeaders[property] = value;
    }
    this._httpHeaders.Range = `bytes=${start}-${end - 1}`;
    const handleResponse = response => {
      if (response.statusCode === 404) {
        const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`);
        this._storedError = error;
        return;
      }
      this._setReadableStream(response);
    };
    this._request = null;
    if (this._url.protocol === "http:") {
      const http = __webpack_require__(2001);
      this._request = http.request(createRequestOptions(this._url, this._httpHeaders), handleResponse);
    } else {
      const https = __webpack_require__(3779);
      this._request = https.request(createRequestOptions(this._url, this._httpHeaders), handleResponse);
    }
    this._request.on("error", reason => {
      this._storedError = reason;
    });
    this._request.end();
  }
}
class PDFNodeStreamFsFullReader extends BaseFullReader {
  constructor(stream) {
    super(stream);
    let path = decodeURIComponent(this._url.path);
    if (fileUriRegex.test(this._url.href)) {
      path = path.replace(/^\//, "");
    }
    const fs = __webpack_require__(172);
    fs.lstat(path, (error, stat) => {
      if (error) {
        if (error.code === "ENOENT") {
          error = new _util.MissingPDFException(`Missing PDF "${path}".`);
        }
        this._storedError = error;
        this._headersCapability.reject(error);
        return;
      }
      this._contentLength = stat.size;
      this._setReadableStream(fs.createReadStream(path));
      this._headersCapability.resolve();
    });
  }
}
class PDFNodeStreamFsRangeReader extends BaseRangeReader {
  constructor(stream, start, end) {
    super(stream);
    let path = decodeURIComponent(this._url.path);
    if (fileUriRegex.test(this._url.href)) {
      path = path.replace(/^\//, "");
    }
    const fs = __webpack_require__(172);
    this._setReadableStream(fs.createReadStream(path, {
      start,
      end: end - 1
    }));
  }
}

/***/ }),
/* 24 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.SVGGraphics = void 0;
var _display_utils = __w_pdfjs_require__(6);
var _util = __w_pdfjs_require__(1);
;
const SVG_DEFAULTS = {
  fontStyle: "normal",
  fontWeight: "normal",
  fillColor: "#000000"
};
const XML_NS = "http://www.w3.org/XML/1998/namespace";
const XLINK_NS = "http://www.w3.org/1999/xlink";
const LINE_CAP_STYLES = ["butt", "round", "square"];
const LINE_JOIN_STYLES = ["miter", "round", "bevel"];
const createObjectURL = function (data, contentType = "", forceDataSchema = false) {
  if (URL.createObjectURL && typeof Blob !== "undefined" && !forceDataSchema) {
    return URL.createObjectURL(new Blob([data], {
      type: contentType
    }));
  }
  const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  let buffer = `data:${contentType};base64,`;
  for (let i = 0, ii = data.length; i < ii; i += 3) {
    const b1 = data[i] & 0xff;
    const b2 = data[i + 1] & 0xff;
    const b3 = data[i + 2] & 0xff;
    const d1 = b1 >> 2,
      d2 = (b1 & 3) << 4 | b2 >> 4;
    const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;
    const d4 = i + 2 < ii ? b3 & 0x3f : 64;
    buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
  }
  return buffer;
};
const convertImgDataToPng = function () {
  const PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
  const CHUNK_WRAPPER_SIZE = 12;
  const crcTable = new Int32Array(256);
  for (let i = 0; i < 256; i++) {
    let c = i;
    for (let h = 0; h < 8; h++) {
      c = c & 1 ? 0xedb88320 ^ c >> 1 & 0x7fffffff : c >> 1 & 0x7fffffff;
    }
    crcTable[i] = c;
  }
  function crc32(data, start, end) {
    let crc = -1;
    for (let i = start; i < end; i++) {
      const a = (crc ^ data[i]) & 0xff;
      const b = crcTable[a];
      crc = crc >>> 8 ^ b;
    }
    return crc ^ -1;
  }
  function writePngChunk(type, body, data, offset) {
    let p = offset;
    const len = body.length;
    data[p] = len >> 24 & 0xff;
    data[p + 1] = len >> 16 & 0xff;
    data[p + 2] = len >> 8 & 0xff;
    data[p + 3] = len & 0xff;
    p += 4;
    data[p] = type.charCodeAt(0) & 0xff;
    data[p + 1] = type.charCodeAt(1) & 0xff;
    data[p + 2] = type.charCodeAt(2) & 0xff;
    data[p + 3] = type.charCodeAt(3) & 0xff;
    p += 4;
    data.set(body, p);
    p += body.length;
    const crc = crc32(data, offset + 4, p);
    data[p] = crc >> 24 & 0xff;
    data[p + 1] = crc >> 16 & 0xff;
    data[p + 2] = crc >> 8 & 0xff;
    data[p + 3] = crc & 0xff;
  }
  function adler32(data, start, end) {
    let a = 1;
    let b = 0;
    for (let i = start; i < end; ++i) {
      a = (a + (data[i] & 0xff)) % 65521;
      b = (b + a) % 65521;
    }
    return b << 16 | a;
  }
  function deflateSync(literals) {
    if (!_util.isNodeJS) {
      return deflateSyncUncompressed(literals);
    }
    try {
      const input = parseInt(process.versions.node) >= 8 ? literals : Buffer.from(literals);
      const output = (__webpack_require__(2258).deflateSync)(input, {
        level: 9
      });
      return output instanceof Uint8Array ? output : new Uint8Array(output);
    } catch (e) {
      (0, _util.warn)("Not compressing PNG because zlib.deflateSync is unavailable: " + e);
    }
    return deflateSyncUncompressed(literals);
  }
  function deflateSyncUncompressed(literals) {
    let len = literals.length;
    const maxBlockLength = 0xffff;
    const deflateBlocks = Math.ceil(len / maxBlockLength);
    const idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4);
    let pi = 0;
    idat[pi++] = 0x78;
    idat[pi++] = 0x9c;
    let pos = 0;
    while (len > maxBlockLength) {
      idat[pi++] = 0x00;
      idat[pi++] = 0xff;
      idat[pi++] = 0xff;
      idat[pi++] = 0x00;
      idat[pi++] = 0x00;
      idat.set(literals.subarray(pos, pos + maxBlockLength), pi);
      pi += maxBlockLength;
      pos += maxBlockLength;
      len -= maxBlockLength;
    }
    idat[pi++] = 0x01;
    idat[pi++] = len & 0xff;
    idat[pi++] = len >> 8 & 0xff;
    idat[pi++] = ~len & 0xffff & 0xff;
    idat[pi++] = (~len & 0xffff) >> 8 & 0xff;
    idat.set(literals.subarray(pos), pi);
    pi += literals.length - pos;
    const adler = adler32(literals, 0, literals.length);
    idat[pi++] = adler >> 24 & 0xff;
    idat[pi++] = adler >> 16 & 0xff;
    idat[pi++] = adler >> 8 & 0xff;
    idat[pi++] = adler & 0xff;
    return idat;
  }
  function encode(imgData, kind, forceDataSchema, isMask) {
    const width = imgData.width;
    const height = imgData.height;
    let bitDepth, colorType, lineSize;
    const bytes = imgData.data;
    switch (kind) {
      case _util.ImageKind.GRAYSCALE_1BPP:
        colorType = 0;
        bitDepth = 1;
        lineSize = width + 7 >> 3;
        break;
      case _util.ImageKind.RGB_24BPP:
        colorType = 2;
        bitDepth = 8;
        lineSize = width * 3;
        break;
      case _util.ImageKind.RGBA_32BPP:
        colorType = 6;
        bitDepth = 8;
        lineSize = width * 4;
        break;
      default:
        throw new Error("invalid format");
    }
    const literals = new Uint8Array((1 + lineSize) * height);
    let offsetLiterals = 0,
      offsetBytes = 0;
    for (let y = 0; y < height; ++y) {
      literals[offsetLiterals++] = 0;
      literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals);
      offsetBytes += lineSize;
      offsetLiterals += lineSize;
    }
    if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) {
      offsetLiterals = 0;
      for (let y = 0; y < height; y++) {
        offsetLiterals++;
        for (let i = 0; i < lineSize; i++) {
          literals[offsetLiterals++] ^= 0xff;
        }
      }
    }
    const ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]);
    const idat = deflateSync(literals);
    const pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length;
    const data = new Uint8Array(pngLength);
    let offset = 0;
    data.set(PNG_HEADER, offset);
    offset += PNG_HEADER.length;
    writePngChunk("IHDR", ihdr, data, offset);
    offset += CHUNK_WRAPPER_SIZE + ihdr.length;
    writePngChunk("IDATA", idat, data, offset);
    offset += CHUNK_WRAPPER_SIZE + idat.length;
    writePngChunk("IEND", new Uint8Array(0), data, offset);
    return createObjectURL(data, "image/png", forceDataSchema);
  }
  return function convertImgDataToPng(imgData, forceDataSchema, isMask) {
    const kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind;
    return encode(imgData, kind, forceDataSchema, isMask);
  };
}();
class SVGExtraState {
  constructor() {
    this.fontSizeScale = 1;
    this.fontWeight = SVG_DEFAULTS.fontWeight;
    this.fontSize = 0;
    this.textMatrix = _util.IDENTITY_MATRIX;
    this.fontMatrix = _util.FONT_IDENTITY_MATRIX;
    this.leading = 0;
    this.textRenderingMode = _util.TextRenderingMode.FILL;
    this.textMatrixScale = 1;
    this.x = 0;
    this.y = 0;
    this.lineX = 0;
    this.lineY = 0;
    this.charSpacing = 0;
    this.wordSpacing = 0;
    this.textHScale = 1;
    this.textRise = 0;
    this.fillColor = SVG_DEFAULTS.fillColor;
    this.strokeColor = "#000000";
    this.fillAlpha = 1;
    this.strokeAlpha = 1;
    this.lineWidth = 1;
    this.lineJoin = "";
    this.lineCap = "";
    this.miterLimit = 0;
    this.dashArray = [];
    this.dashPhase = 0;
    this.dependencies = [];
    this.activeClipUrl = null;
    this.clipGroup = null;
    this.maskId = "";
  }
  clone() {
    return Object.create(this);
  }
  setCurrentPoint(x, y) {
    this.x = x;
    this.y = y;
  }
}
function opListToTree(opList) {
  let opTree = [];
  const tmp = [];
  for (const opListElement of opList) {
    if (opListElement.fn === "save") {
      opTree.push({
        fnId: 92,
        fn: "group",
        items: []
      });
      tmp.push(opTree);
      opTree = opTree.at(-1).items;
      continue;
    }
    if (opListElement.fn === "restore") {
      opTree = tmp.pop();
    } else {
      opTree.push(opListElement);
    }
  }
  return opTree;
}
function pf(value) {
  if (Number.isInteger(value)) {
    return value.toString();
  }
  const s = value.toFixed(10);
  let i = s.length - 1;
  if (s[i] !== "0") {
    return s;
  }
  do {
    i--;
  } while (s[i] === "0");
  return s.substring(0, s[i] === "." ? i : i + 1);
}
function pm(m) {
  if (m[4] === 0 && m[5] === 0) {
    if (m[1] === 0 && m[2] === 0) {
      if (m[0] === 1 && m[3] === 1) {
        return "";
      }
      return `scale(${pf(m[0])} ${pf(m[3])})`;
    }
    if (m[0] === m[3] && m[1] === -m[2]) {
      const a = Math.acos(m[0]) * 180 / Math.PI;
      return `rotate(${pf(a)})`;
    }
  } else if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) {
    return `translate(${pf(m[4])} ${pf(m[5])})`;
  }
  return `matrix(${pf(m[0])} ${pf(m[1])} ${pf(m[2])} ${pf(m[3])} ${pf(m[4])} ` + `${pf(m[5])})`;
}
let clipCount = 0;
let maskCount = 0;
let shadingCount = 0;
class SVGGraphics {
  constructor(commonObjs, objs, forceDataSchema = false) {
    (0, _display_utils.deprecated)("The SVG back-end is no longer maintained and *may* be removed in the future.");
    this.svgFactory = new _display_utils.DOMSVGFactory();
    this.current = new SVGExtraState();
    this.transformMatrix = _util.IDENTITY_MATRIX;
    this.transformStack = [];
    this.extraStack = [];
    this.commonObjs = commonObjs;
    this.objs = objs;
    this.pendingClip = null;
    this.pendingEOFill = false;
    this.embedFonts = false;
    this.embeddedFonts = Object.create(null);
    this.cssStyle = null;
    this.forceDataSchema = !!forceDataSchema;
    this._operatorIdMapping = [];
    for (const op in _util.OPS) {
      this._operatorIdMapping[_util.OPS[op]] = op;
    }
  }
  getObject(data, fallback = null) {
    if (typeof data === "string") {
      return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data);
    }
    return fallback;
  }
  save() {
    this.transformStack.push(this.transformMatrix);
    const old = this.current;
    this.extraStack.push(old);
    this.current = old.clone();
  }
  restore() {
    this.transformMatrix = this.transformStack.pop();
    this.current = this.extraStack.pop();
    this.pendingClip = null;
    this.tgrp = null;
  }
  group(items) {
    this.save();
    this.executeOpTree(items);
    this.restore();
  }
  loadDependencies(operatorList) {
    const fnArray = operatorList.fnArray;
    const argsArray = operatorList.argsArray;
    for (let i = 0, ii = fnArray.length; i < ii; i++) {
      if (fnArray[i] !== _util.OPS.dependency) {
        continue;
      }
      for (const obj of argsArray[i]) {
        const objsPool = obj.startsWith("g_") ? this.commonObjs : this.objs;
        const promise = new Promise(resolve => {
          objsPool.get(obj, resolve);
        });
        this.current.dependencies.push(promise);
      }
    }
    return Promise.all(this.current.dependencies);
  }
  transform(a, b, c, d, e, f) {
    const transformMatrix = [a, b, c, d, e, f];
    this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix);
    this.tgrp = null;
  }
  getSVG(operatorList, viewport) {
    this.viewport = viewport;
    const svgElement = this._initialize(viewport);
    return this.loadDependencies(operatorList).then(() => {
      this.transformMatrix = _util.IDENTITY_MATRIX;
      this.executeOpTree(this.convertOpList(operatorList));
      return svgElement;
    });
  }
  convertOpList(operatorList) {
    const operatorIdMapping = this._operatorIdMapping;
    const argsArray = operatorList.argsArray;
    const fnArray = operatorList.fnArray;
    const opList = [];
    for (let i = 0, ii = fnArray.length; i < ii; i++) {
      const fnId = fnArray[i];
      opList.push({
        fnId,
        fn: operatorIdMapping[fnId],
        args: argsArray[i]
      });
    }
    return opListToTree(opList);
  }
  executeOpTree(opTree) {
    for (const opTreeElement of opTree) {
      const fn = opTreeElement.fn;
      const fnId = opTreeElement.fnId;
      const args = opTreeElement.args;
      switch (fnId | 0) {
        case _util.OPS.beginText:
          this.beginText();
          break;
        case _util.OPS.dependency:
          break;
        case _util.OPS.setLeading:
          this.setLeading(args);
          break;
        case _util.OPS.setLeadingMoveText:
          this.setLeadingMoveText(args[0], args[1]);
          break;
        case _util.OPS.setFont:
          this.setFont(args);
          break;
        case _util.OPS.showText:
          this.showText(args[0]);
          break;
        case _util.OPS.showSpacedText:
          this.showText(args[0]);
          break;
        case _util.OPS.endText:
          this.endText();
          break;
        case _util.OPS.moveText:
          this.moveText(args[0], args[1]);
          break;
        case _util.OPS.setCharSpacing:
          this.setCharSpacing(args[0]);
          break;
        case _util.OPS.setWordSpacing:
          this.setWordSpacing(args[0]);
          break;
        case _util.OPS.setHScale:
          this.setHScale(args[0]);
          break;
        case _util.OPS.setTextMatrix:
          this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);
          break;
        case _util.OPS.setTextRise:
          this.setTextRise(args[0]);
          break;
        case _util.OPS.setTextRenderingMode:
          this.setTextRenderingMode(args[0]);
          break;
        case _util.OPS.setLineWidth:
          this.setLineWidth(args[0]);
          break;
        case _util.OPS.setLineJoin:
          this.setLineJoin(args[0]);
          break;
        case _util.OPS.setLineCap:
          this.setLineCap(args[0]);
          break;
        case _util.OPS.setMiterLimit:
          this.setMiterLimit(args[0]);
          break;
        case _util.OPS.setFillRGBColor:
          this.setFillRGBColor(args[0], args[1], args[2]);
          break;
        case _util.OPS.setStrokeRGBColor:
          this.setStrokeRGBColor(args[0], args[1], args[2]);
          break;
        case _util.OPS.setStrokeColorN:
          this.setStrokeColorN(args);
          break;
        case _util.OPS.setFillColorN:
          this.setFillColorN(args);
          break;
        case _util.OPS.shadingFill:
          this.shadingFill(args[0]);
          break;
        case _util.OPS.setDash:
          this.setDash(args[0], args[1]);
          break;
        case _util.OPS.setRenderingIntent:
          this.setRenderingIntent(args[0]);
          break;
        case _util.OPS.setFlatness:
          this.setFlatness(args[0]);
          break;
        case _util.OPS.setGState:
          this.setGState(args[0]);
          break;
        case _util.OPS.fill:
          this.fill();
          break;
        case _util.OPS.eoFill:
          this.eoFill();
          break;
        case _util.OPS.stroke:
          this.stroke();
          break;
        case _util.OPS.fillStroke:
          this.fillStroke();
          break;
        case _util.OPS.eoFillStroke:
          this.eoFillStroke();
          break;
        case _util.OPS.clip:
          this.clip("nonzero");
          break;
        case _util.OPS.eoClip:
          this.clip("evenodd");
          break;
        case _util.OPS.paintSolidColorImageMask:
          this.paintSolidColorImageMask();
          break;
        case _util.OPS.paintImageXObject:
          this.paintImageXObject(args[0]);
          break;
        case _util.OPS.paintInlineImageXObject:
          this.paintInlineImageXObject(args[0]);
          break;
        case _util.OPS.paintImageMaskXObject:
          this.paintImageMaskXObject(args[0]);
          break;
        case _util.OPS.paintFormXObjectBegin:
          this.paintFormXObjectBegin(args[0], args[1]);
          break;
        case _util.OPS.paintFormXObjectEnd:
          this.paintFormXObjectEnd();
          break;
        case _util.OPS.closePath:
          this.closePath();
          break;
        case _util.OPS.closeStroke:
          this.closeStroke();
          break;
        case _util.OPS.closeFillStroke:
          this.closeFillStroke();
          break;
        case _util.OPS.closeEOFillStroke:
          this.closeEOFillStroke();
          break;
        case _util.OPS.nextLine:
          this.nextLine();
          break;
        case _util.OPS.transform:
          this.transform(args[0], args[1], args[2], args[3], args[4], args[5]);
          break;
        case _util.OPS.constructPath:
          this.constructPath(args[0], args[1]);
          break;
        case _util.OPS.endPath:
          this.endPath();
          break;
        case 92:
          this.group(opTreeElement.items);
          break;
        default:
          (0, _util.warn)(`Unimplemented operator ${fn}`);
          break;
      }
    }
  }
  setWordSpacing(wordSpacing) {
    this.current.wordSpacing = wordSpacing;
  }
  setCharSpacing(charSpacing) {
    this.current.charSpacing = charSpacing;
  }
  nextLine() {
    this.moveText(0, this.current.leading);
  }
  setTextMatrix(a, b, c, d, e, f) {
    const current = this.current;
    current.textMatrix = current.lineMatrix = [a, b, c, d, e, f];
    current.textMatrixScale = Math.hypot(a, b);
    current.x = current.lineX = 0;
    current.y = current.lineY = 0;
    current.xcoords = [];
    current.ycoords = [];
    current.tspan = this.svgFactory.createElement("svg:tspan");
    current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
    current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
    current.tspan.setAttributeNS(null, "y", pf(-current.y));
    current.txtElement = this.svgFactory.createElement("svg:text");
    current.txtElement.append(current.tspan);
  }
  beginText() {
    const current = this.current;
    current.x = current.lineX = 0;
    current.y = current.lineY = 0;
    current.textMatrix = _util.IDENTITY_MATRIX;
    current.lineMatrix = _util.IDENTITY_MATRIX;
    current.textMatrixScale = 1;
    current.tspan = this.svgFactory.createElement("svg:tspan");
    current.txtElement = this.svgFactory.createElement("svg:text");
    current.txtgrp = this.svgFactory.createElement("svg:g");
    current.xcoords = [];
    current.ycoords = [];
  }
  moveText(x, y) {
    const current = this.current;
    current.x = current.lineX += x;
    current.y = current.lineY += y;
    current.xcoords = [];
    current.ycoords = [];
    current.tspan = this.svgFactory.createElement("svg:tspan");
    current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
    current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
    current.tspan.setAttributeNS(null, "y", pf(-current.y));
  }
  showText(glyphs) {
    const current = this.current;
    const font = current.font;
    const fontSize = current.fontSize;
    if (fontSize === 0) {
      return;
    }
    const fontSizeScale = current.fontSizeScale;
    const charSpacing = current.charSpacing;
    const wordSpacing = current.wordSpacing;
    const fontDirection = current.fontDirection;
    const textHScale = current.textHScale * fontDirection;
    const vertical = font.vertical;
    const spacingDir = vertical ? 1 : -1;
    const defaultVMetrics = font.defaultVMetrics;
    const widthAdvanceScale = fontSize * current.fontMatrix[0];
    let x = 0;
    for (const glyph of glyphs) {
      if (glyph === null) {
        x += fontDirection * wordSpacing;
        continue;
      } else if (typeof glyph === "number") {
        x += spacingDir * glyph * fontSize / 1000;
        continue;
      }
      const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
      const character = glyph.fontChar;
      let scaledX, scaledY;
      let width = glyph.width;
      if (vertical) {
        let vx;
        const vmetric = glyph.vmetric || defaultVMetrics;
        vx = glyph.vmetric ? vmetric[1] : width * 0.5;
        vx = -vx * widthAdvanceScale;
        const vy = vmetric[2] * widthAdvanceScale;
        width = vmetric ? -vmetric[0] : width;
        scaledX = vx / fontSizeScale;
        scaledY = (x + vy) / fontSizeScale;
      } else {
        scaledX = x / fontSizeScale;
        scaledY = 0;
      }
      if (glyph.isInFont || font.missingFile) {
        current.xcoords.push(current.x + scaledX);
        if (vertical) {
          current.ycoords.push(-current.y + scaledY);
        }
        current.tspan.textContent += character;
      } else {}
      const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection;
      x += charWidth;
    }
    current.tspan.setAttributeNS(null, "x", current.xcoords.map(pf).join(" "));
    if (vertical) {
      current.tspan.setAttributeNS(null, "y", current.ycoords.map(pf).join(" "));
    } else {
      current.tspan.setAttributeNS(null, "y", pf(-current.y));
    }
    if (vertical) {
      current.y -= x;
    } else {
      current.x += x * textHScale;
    }
    current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
    current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
    if (current.fontStyle !== SVG_DEFAULTS.fontStyle) {
      current.tspan.setAttributeNS(null, "font-style", current.fontStyle);
    }
    if (current.fontWeight !== SVG_DEFAULTS.fontWeight) {
      current.tspan.setAttributeNS(null, "font-weight", current.fontWeight);
    }
    const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
    if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
      if (current.fillColor !== SVG_DEFAULTS.fillColor) {
        current.tspan.setAttributeNS(null, "fill", current.fillColor);
      }
      if (current.fillAlpha < 1) {
        current.tspan.setAttributeNS(null, "fill-opacity", current.fillAlpha);
      }
    } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) {
      current.tspan.setAttributeNS(null, "fill", "transparent");
    } else {
      current.tspan.setAttributeNS(null, "fill", "none");
    }
    if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
      const lineWidthScale = 1 / (current.textMatrixScale || 1);
      this._setStrokeAttributes(current.tspan, lineWidthScale);
    }
    let textMatrix = current.textMatrix;
    if (current.textRise !== 0) {
      textMatrix = textMatrix.slice();
      textMatrix[5] += current.textRise;
    }
    current.txtElement.setAttributeNS(null, "transform", `${pm(textMatrix)} scale(${pf(textHScale)}, -1)`);
    current.txtElement.setAttributeNS(XML_NS, "xml:space", "preserve");
    current.txtElement.append(current.tspan);
    current.txtgrp.append(current.txtElement);
    this._ensureTransformGroup().append(current.txtElement);
  }
  setLeadingMoveText(x, y) {
    this.setLeading(-y);
    this.moveText(x, y);
  }
  addFontStyle(fontObj) {
    if (!fontObj.data) {
      throw new Error("addFontStyle: No font data available, " + 'ensure that the "fontExtraProperties" API parameter is set.');
    }
    if (!this.cssStyle) {
      this.cssStyle = this.svgFactory.createElement("svg:style");
      this.cssStyle.setAttributeNS(null, "type", "text/css");
      this.defs.append(this.cssStyle);
    }
    const url = createObjectURL(fontObj.data, fontObj.mimetype, this.forceDataSchema);
    this.cssStyle.textContent += `@font-face { font-family: "${fontObj.loadedName}";` + ` src: url(${url}); }\n`;
  }
  setFont(details) {
    const current = this.current;
    const fontObj = this.commonObjs.get(details[0]);
    let size = details[1];
    current.font = fontObj;
    if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) {
      this.addFontStyle(fontObj);
      this.embeddedFonts[fontObj.loadedName] = fontObj;
    }
    current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX;
    let bold = "normal";
    if (fontObj.black) {
      bold = "900";
    } else if (fontObj.bold) {
      bold = "bold";
    }
    const italic = fontObj.italic ? "italic" : "normal";
    if (size < 0) {
      size = -size;
      current.fontDirection = -1;
    } else {
      current.fontDirection = 1;
    }
    current.fontSize = size;
    current.fontFamily = fontObj.loadedName;
    current.fontWeight = bold;
    current.fontStyle = italic;
    current.tspan = this.svgFactory.createElement("svg:tspan");
    current.tspan.setAttributeNS(null, "y", pf(-current.y));
    current.xcoords = [];
    current.ycoords = [];
  }
  endText() {
    const current = this.current;
    if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && current.txtElement?.hasChildNodes()) {
      current.element = current.txtElement;
      this.clip("nonzero");
      this.endPath();
    }
  }
  setLineWidth(width) {
    if (width > 0) {
      this.current.lineWidth = width;
    }
  }
  setLineCap(style) {
    this.current.lineCap = LINE_CAP_STYLES[style];
  }
  setLineJoin(style) {
    this.current.lineJoin = LINE_JOIN_STYLES[style];
  }
  setMiterLimit(limit) {
    this.current.miterLimit = limit;
  }
  setStrokeAlpha(strokeAlpha) {
    this.current.strokeAlpha = strokeAlpha;
  }
  setStrokeRGBColor(r, g, b) {
    this.current.strokeColor = _util.Util.makeHexColor(r, g, b);
  }
  setFillAlpha(fillAlpha) {
    this.current.fillAlpha = fillAlpha;
  }
  setFillRGBColor(r, g, b) {
    this.current.fillColor = _util.Util.makeHexColor(r, g, b);
    this.current.tspan = this.svgFactory.createElement("svg:tspan");
    this.current.xcoords = [];
    this.current.ycoords = [];
  }
  setStrokeColorN(args) {
    this.current.strokeColor = this._makeColorN_Pattern(args);
  }
  setFillColorN(args) {
    this.current.fillColor = this._makeColorN_Pattern(args);
  }
  shadingFill(args) {
    const {
      width,
      height
    } = this.viewport;
    const inv = _util.Util.inverseTransform(this.transformMatrix);
    const [x0, y0, x1, y1] = _util.Util.getAxialAlignedBoundingBox([0, 0, width, height], inv);
    const rect = this.svgFactory.createElement("svg:rect");
    rect.setAttributeNS(null, "x", x0);
    rect.setAttributeNS(null, "y", y0);
    rect.setAttributeNS(null, "width", x1 - x0);
    rect.setAttributeNS(null, "height", y1 - y0);
    rect.setAttributeNS(null, "fill", this._makeShadingPattern(args));
    if (this.current.fillAlpha < 1) {
      rect.setAttributeNS(null, "fill-opacity", this.current.fillAlpha);
    }
    this._ensureTransformGroup().append(rect);
  }
  _makeColorN_Pattern(args) {
    if (args[0] === "TilingPattern") {
      return this._makeTilingPattern(args);
    }
    return this._makeShadingPattern(args);
  }
  _makeTilingPattern(args) {
    const color = args[1];
    const operatorList = args[2];
    const matrix = args[3] || _util.IDENTITY_MATRIX;
    const [x0, y0, x1, y1] = args[4];
    const xstep = args[5];
    const ystep = args[6];
    const paintType = args[7];
    const tilingId = `shading${shadingCount++}`;
    const [tx0, ty0, tx1, ty1] = _util.Util.normalizeRect([..._util.Util.applyTransform([x0, y0], matrix), ..._util.Util.applyTransform([x1, y1], matrix)]);
    const [xscale, yscale] = _util.Util.singularValueDecompose2dScale(matrix);
    const txstep = xstep * xscale;
    const tystep = ystep * yscale;
    const tiling = this.svgFactory.createElement("svg:pattern");
    tiling.setAttributeNS(null, "id", tilingId);
    tiling.setAttributeNS(null, "patternUnits", "userSpaceOnUse");
    tiling.setAttributeNS(null, "width", txstep);
    tiling.setAttributeNS(null, "height", tystep);
    tiling.setAttributeNS(null, "x", `${tx0}`);
    tiling.setAttributeNS(null, "y", `${ty0}`);
    const svg = this.svg;
    const transformMatrix = this.transformMatrix;
    const fillColor = this.current.fillColor;
    const strokeColor = this.current.strokeColor;
    const bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0);
    this.svg = bbox;
    this.transformMatrix = matrix;
    if (paintType === 2) {
      const cssColor = _util.Util.makeHexColor(...color);
      this.current.fillColor = cssColor;
      this.current.strokeColor = cssColor;
    }
    this.executeOpTree(this.convertOpList(operatorList));
    this.svg = svg;
    this.transformMatrix = transformMatrix;
    this.current.fillColor = fillColor;
    this.current.strokeColor = strokeColor;
    tiling.append(bbox.childNodes[0]);
    this.defs.append(tiling);
    return `url(#${tilingId})`;
  }
  _makeShadingPattern(args) {
    if (typeof args === "string") {
      args = this.objs.get(args);
    }
    switch (args[0]) {
      case "RadialAxial":
        const shadingId = `shading${shadingCount++}`;
        const colorStops = args[3];
        let gradient;
        switch (args[1]) {
          case "axial":
            const point0 = args[4];
            const point1 = args[5];
            gradient = this.svgFactory.createElement("svg:linearGradient");
            gradient.setAttributeNS(null, "id", shadingId);
            gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse");
            gradient.setAttributeNS(null, "x1", point0[0]);
            gradient.setAttributeNS(null, "y1", point0[1]);
            gradient.setAttributeNS(null, "x2", point1[0]);
            gradient.setAttributeNS(null, "y2", point1[1]);
            break;
          case "radial":
            const focalPoint = args[4];
            const circlePoint = args[5];
            const focalRadius = args[6];
            const circleRadius = args[7];
            gradient = this.svgFactory.createElement("svg:radialGradient");
            gradient.setAttributeNS(null, "id", shadingId);
            gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse");
            gradient.setAttributeNS(null, "cx", circlePoint[0]);
            gradient.setAttributeNS(null, "cy", circlePoint[1]);
            gradient.setAttributeNS(null, "r", circleRadius);
            gradient.setAttributeNS(null, "fx", focalPoint[0]);
            gradient.setAttributeNS(null, "fy", focalPoint[1]);
            gradient.setAttributeNS(null, "fr", focalRadius);
            break;
          default:
            throw new Error(`Unknown RadialAxial type: ${args[1]}`);
        }
        for (const colorStop of colorStops) {
          const stop = this.svgFactory.createElement("svg:stop");
          stop.setAttributeNS(null, "offset", colorStop[0]);
          stop.setAttributeNS(null, "stop-color", colorStop[1]);
          gradient.append(stop);
        }
        this.defs.append(gradient);
        return `url(#${shadingId})`;
      case "Mesh":
        (0, _util.warn)("Unimplemented pattern Mesh");
        return null;
      case "Dummy":
        return "hotpink";
      default:
        throw new Error(`Unknown IR type: ${args[0]}`);
    }
  }
  setDash(dashArray, dashPhase) {
    this.current.dashArray = dashArray;
    this.current.dashPhase = dashPhase;
  }
  constructPath(ops, args) {
    const current = this.current;
    let x = current.x,
      y = current.y;
    let d = [];
    let j = 0;
    for (const op of ops) {
      switch (op | 0) {
        case _util.OPS.rectangle:
          x = args[j++];
          y = args[j++];
          const width = args[j++];
          const height = args[j++];
          const xw = x + width;
          const yh = y + height;
          d.push("M", pf(x), pf(y), "L", pf(xw), pf(y), "L", pf(xw), pf(yh), "L", pf(x), pf(yh), "Z");
          break;
        case _util.OPS.moveTo:
          x = args[j++];
          y = args[j++];
          d.push("M", pf(x), pf(y));
          break;
        case _util.OPS.lineTo:
          x = args[j++];
          y = args[j++];
          d.push("L", pf(x), pf(y));
          break;
        case _util.OPS.curveTo:
          x = args[j + 4];
          y = args[j + 5];
          d.push("C", pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y));
          j += 6;
          break;
        case _util.OPS.curveTo2:
          d.push("C", pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]));
          x = args[j + 2];
          y = args[j + 3];
          j += 4;
          break;
        case _util.OPS.curveTo3:
          x = args[j + 2];
          y = args[j + 3];
          d.push("C", pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y));
          j += 4;
          break;
        case _util.OPS.closePath:
          d.push("Z");
          break;
      }
    }
    d = d.join(" ");
    if (current.path && ops.length > 0 && ops[0] !== _util.OPS.rectangle && ops[0] !== _util.OPS.moveTo) {
      d = current.path.getAttributeNS(null, "d") + d;
    } else {
      current.path = this.svgFactory.createElement("svg:path");
      this._ensureTransformGroup().append(current.path);
    }
    current.path.setAttributeNS(null, "d", d);
    current.path.setAttributeNS(null, "fill", "none");
    current.element = current.path;
    current.setCurrentPoint(x, y);
  }
  endPath() {
    const current = this.current;
    current.path = null;
    if (!this.pendingClip) {
      return;
    }
    if (!current.element) {
      this.pendingClip = null;
      return;
    }
    const clipId = `clippath${clipCount++}`;
    const clipPath = this.svgFactory.createElement("svg:clipPath");
    clipPath.setAttributeNS(null, "id", clipId);
    clipPath.setAttributeNS(null, "transform", pm(this.transformMatrix));
    const clipElement = current.element.cloneNode(true);
    if (this.pendingClip === "evenodd") {
      clipElement.setAttributeNS(null, "clip-rule", "evenodd");
    } else {
      clipElement.setAttributeNS(null, "clip-rule", "nonzero");
    }
    this.pendingClip = null;
    clipPath.append(clipElement);
    this.defs.append(clipPath);
    if (current.activeClipUrl) {
      current.clipGroup = null;
      for (const prev of this.extraStack) {
        prev.clipGroup = null;
      }
      clipPath.setAttributeNS(null, "clip-path", current.activeClipUrl);
    }
    current.activeClipUrl = `url(#${clipId})`;
    this.tgrp = null;
  }
  clip(type) {
    this.pendingClip = type;
  }
  closePath() {
    const current = this.current;
    if (current.path) {
      const d = `${current.path.getAttributeNS(null, "d")}Z`;
      current.path.setAttributeNS(null, "d", d);
    }
  }
  setLeading(leading) {
    this.current.leading = -leading;
  }
  setTextRise(textRise) {
    this.current.textRise = textRise;
  }
  setTextRenderingMode(textRenderingMode) {
    this.current.textRenderingMode = textRenderingMode;
  }
  setHScale(scale) {
    this.current.textHScale = scale / 100;
  }
  setRenderingIntent(intent) {}
  setFlatness(flatness) {}
  setGState(states) {
    for (const [key, value] of states) {
      switch (key) {
        case "LW":
          this.setLineWidth(value);
          break;
        case "LC":
          this.setLineCap(value);
          break;
        case "LJ":
          this.setLineJoin(value);
          break;
        case "ML":
          this.setMiterLimit(value);
          break;
        case "D":
          this.setDash(value[0], value[1]);
          break;
        case "RI":
          this.setRenderingIntent(value);
          break;
        case "FL":
          this.setFlatness(value);
          break;
        case "Font":
          this.setFont(value);
          break;
        case "CA":
          this.setStrokeAlpha(value);
          break;
        case "ca":
          this.setFillAlpha(value);
          break;
        default:
          (0, _util.warn)(`Unimplemented graphic state operator ${key}`);
          break;
      }
    }
  }
  fill() {
    const current = this.current;
    if (current.element) {
      current.element.setAttributeNS(null, "fill", current.fillColor);
      current.element.setAttributeNS(null, "fill-opacity", current.fillAlpha);
      this.endPath();
    }
  }
  stroke() {
    const current = this.current;
    if (current.element) {
      this._setStrokeAttributes(current.element);
      current.element.setAttributeNS(null, "fill", "none");
      this.endPath();
    }
  }
  _setStrokeAttributes(element, lineWidthScale = 1) {
    const current = this.current;
    let dashArray = current.dashArray;
    if (lineWidthScale !== 1 && dashArray.length > 0) {
      dashArray = dashArray.map(function (value) {
        return lineWidthScale * value;
      });
    }
    element.setAttributeNS(null, "stroke", current.strokeColor);
    element.setAttributeNS(null, "stroke-opacity", current.strokeAlpha);
    element.setAttributeNS(null, "stroke-miterlimit", pf(current.miterLimit));
    element.setAttributeNS(null, "stroke-linecap", current.lineCap);
    element.setAttributeNS(null, "stroke-linejoin", current.lineJoin);
    element.setAttributeNS(null, "stroke-width", pf(lineWidthScale * current.lineWidth) + "px");
    element.setAttributeNS(null, "stroke-dasharray", dashArray.map(pf).join(" "));
    element.setAttributeNS(null, "stroke-dashoffset", pf(lineWidthScale * current.dashPhase) + "px");
  }
  eoFill() {
    this.current.element?.setAttributeNS(null, "fill-rule", "evenodd");
    this.fill();
  }
  fillStroke() {
    this.stroke();
    this.fill();
  }
  eoFillStroke() {
    this.current.element?.setAttributeNS(null, "fill-rule", "evenodd");
    this.fillStroke();
  }
  closeStroke() {
    this.closePath();
    this.stroke();
  }
  closeFillStroke() {
    this.closePath();
    this.fillStroke();
  }
  closeEOFillStroke() {
    this.closePath();
    this.eoFillStroke();
  }
  paintSolidColorImageMask() {
    const rect = this.svgFactory.createElement("svg:rect");
    rect.setAttributeNS(null, "x", "0");
    rect.setAttributeNS(null, "y", "0");
    rect.setAttributeNS(null, "width", "1px");
    rect.setAttributeNS(null, "height", "1px");
    rect.setAttributeNS(null, "fill", this.current.fillColor);
    this._ensureTransformGroup().append(rect);
  }
  paintImageXObject(objId) {
    const imgData = this.getObject(objId);
    if (!imgData) {
      (0, _util.warn)(`Dependent image with object ID ${objId} is not ready yet`);
      return;
    }
    this.paintInlineImageXObject(imgData);
  }
  paintInlineImageXObject(imgData, mask) {
    const width = imgData.width;
    const height = imgData.height;
    const imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask);
    const cliprect = this.svgFactory.createElement("svg:rect");
    cliprect.setAttributeNS(null, "x", "0");
    cliprect.setAttributeNS(null, "y", "0");
    cliprect.setAttributeNS(null, "width", pf(width));
    cliprect.setAttributeNS(null, "height", pf(height));
    this.current.element = cliprect;
    this.clip("nonzero");
    const imgEl = this.svgFactory.createElement("svg:image");
    imgEl.setAttributeNS(XLINK_NS, "xlink:href", imgSrc);
    imgEl.setAttributeNS(null, "x", "0");
    imgEl.setAttributeNS(null, "y", pf(-height));
    imgEl.setAttributeNS(null, "width", pf(width) + "px");
    imgEl.setAttributeNS(null, "height", pf(height) + "px");
    imgEl.setAttributeNS(null, "transform", `scale(${pf(1 / width)} ${pf(-1 / height)})`);
    if (mask) {
      mask.append(imgEl);
    } else {
      this._ensureTransformGroup().append(imgEl);
    }
  }
  paintImageMaskXObject(img) {
    const imgData = this.getObject(img.data, img);
    if (imgData.bitmap) {
      (0, _util.warn)("paintImageMaskXObject: ImageBitmap support is not implemented, " + "ensure that the `isOffscreenCanvasSupported` API parameter is disabled.");
      return;
    }
    const current = this.current;
    const width = imgData.width;
    const height = imgData.height;
    const fillColor = current.fillColor;
    current.maskId = `mask${maskCount++}`;
    const mask = this.svgFactory.createElement("svg:mask");
    mask.setAttributeNS(null, "id", current.maskId);
    const rect = this.svgFactory.createElement("svg:rect");
    rect.setAttributeNS(null, "x", "0");
    rect.setAttributeNS(null, "y", "0");
    rect.setAttributeNS(null, "width", pf(width));
    rect.setAttributeNS(null, "height", pf(height));
    rect.setAttributeNS(null, "fill", fillColor);
    rect.setAttributeNS(null, "mask", `url(#${current.maskId})`);
    this.defs.append(mask);
    this._ensureTransformGroup().append(rect);
    this.paintInlineImageXObject(imgData, mask);
  }
  paintFormXObjectBegin(matrix, bbox) {
    if (Array.isArray(matrix) && matrix.length === 6) {
      this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
    }
    if (bbox) {
      const width = bbox[2] - bbox[0];
      const height = bbox[3] - bbox[1];
      const cliprect = this.svgFactory.createElement("svg:rect");
      cliprect.setAttributeNS(null, "x", bbox[0]);
      cliprect.setAttributeNS(null, "y", bbox[1]);
      cliprect.setAttributeNS(null, "width", pf(width));
      cliprect.setAttributeNS(null, "height", pf(height));
      this.current.element = cliprect;
      this.clip("nonzero");
      this.endPath();
    }
  }
  paintFormXObjectEnd() {}
  _initialize(viewport) {
    const svg = this.svgFactory.create(viewport.width, viewport.height);
    const definitions = this.svgFactory.createElement("svg:defs");
    svg.append(definitions);
    this.defs = definitions;
    const rootGroup = this.svgFactory.createElement("svg:g");
    rootGroup.setAttributeNS(null, "transform", pm(viewport.transform));
    svg.append(rootGroup);
    this.svg = rootGroup;
    return svg;
  }
  _ensureClipGroup() {
    if (!this.current.clipGroup) {
      const clipGroup = this.svgFactory.createElement("svg:g");
      clipGroup.setAttributeNS(null, "clip-path", this.current.activeClipUrl);
      this.svg.append(clipGroup);
      this.current.clipGroup = clipGroup;
    }
    return this.current.clipGroup;
  }
  _ensureTransformGroup() {
    if (!this.tgrp) {
      this.tgrp = this.svgFactory.createElement("svg:g");
      this.tgrp.setAttributeNS(null, "transform", pm(this.transformMatrix));
      if (this.current.activeClipUrl) {
        this._ensureClipGroup().append(this.tgrp);
      } else {
        this.svg.append(this.tgrp);
      }
    }
    return this.tgrp;
  }
}
exports.SVGGraphics = SVGGraphics;

/***/ }),
/* 25 */
/***/ ((__unused_webpack_module, exports) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.XfaText = void 0;
class XfaText {
  static textContent(xfa) {
    const items = [];
    const output = {
      items,
      styles: Object.create(null)
    };
    function walk(node) {
      if (!node) {
        return;
      }
      let str = null;
      const name = node.name;
      if (name === "#text") {
        str = node.value;
      } else if (!XfaText.shouldBuildText(name)) {
        return;
      } else if (node?.attributes?.textContent) {
        str = node.attributes.textContent;
      } else if (node.value) {
        str = node.value;
      }
      if (str !== null) {
        items.push({
          str
        });
      }
      if (!node.children) {
        return;
      }
      for (const child of node.children) {
        walk(child);
      }
    }
    walk(xfa);
    return output;
  }
  static shouldBuildText(name) {
    return !(name === "textarea" || name === "input" || name === "option" || name === "select");
  }
}
exports.XfaText = XfaText;

/***/ }),
/* 26 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.TextLayerRenderTask = void 0;
exports.renderTextLayer = renderTextLayer;
exports.updateTextLayer = updateTextLayer;
var _util = __w_pdfjs_require__(1);
var _display_utils = __w_pdfjs_require__(6);
const MAX_TEXT_DIVS_TO_RENDER = 100000;
const DEFAULT_FONT_SIZE = 30;
const DEFAULT_FONT_ASCENT = 0.8;
const ascentCache = new Map();
function getCtx(size, isOffscreenCanvasSupported) {
  let ctx;
  if (isOffscreenCanvasSupported && _util.FeatureTest.isOffscreenCanvasSupported) {
    ctx = new OffscreenCanvas(size, size).getContext("2d", {
      alpha: false
    });
  } else {
    const canvas = document.createElement("canvas");
    canvas.width = canvas.height = size;
    ctx = canvas.getContext("2d", {
      alpha: false
    });
  }
  return ctx;
}
function getAscent(fontFamily, isOffscreenCanvasSupported) {
  const cachedAscent = ascentCache.get(fontFamily);
  if (cachedAscent) {
    return cachedAscent;
  }
  const ctx = getCtx(DEFAULT_FONT_SIZE, isOffscreenCanvasSupported);
  ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`;
  const metrics = ctx.measureText("");
  let ascent = metrics.fontBoundingBoxAscent;
  let descent = Math.abs(metrics.fontBoundingBoxDescent);
  if (ascent) {
    const ratio = ascent / (ascent + descent);
    ascentCache.set(fontFamily, ratio);
    ctx.canvas.width = ctx.canvas.height = 0;
    return ratio;
  }
  ctx.strokeStyle = "red";
  ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE);
  ctx.strokeText("g", 0, 0);
  let pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data;
  descent = 0;
  for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) {
    if (pixels[i] > 0) {
      descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE);
      break;
    }
  }
  ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE);
  ctx.strokeText("A", 0, DEFAULT_FONT_SIZE);
  pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data;
  ascent = 0;
  for (let i = 0, ii = pixels.length; i < ii; i += 4) {
    if (pixels[i] > 0) {
      ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE);
      break;
    }
  }
  ctx.canvas.width = ctx.canvas.height = 0;
  if (ascent) {
    const ratio = ascent / (ascent + descent);
    ascentCache.set(fontFamily, ratio);
    return ratio;
  }
  ascentCache.set(fontFamily, DEFAULT_FONT_ASCENT);
  return DEFAULT_FONT_ASCENT;
}
function appendText(task, geom, styles) {
  const textDiv = document.createElement("span");
  const textDivProperties = {
    angle: 0,
    canvasWidth: 0,
    hasText: geom.str !== "",
    hasEOL: geom.hasEOL,
    fontSize: 0
  };
  task._textDivs.push(textDiv);
  const tx = _util.Util.transform(task._transform, geom.transform);
  let angle = Math.atan2(tx[1], tx[0]);
  const style = styles[geom.fontName];
  if (style.vertical) {
    angle += Math.PI / 2;
  }
  const fontHeight = Math.hypot(tx[2], tx[3]);
  const fontAscent = fontHeight * getAscent(style.fontFamily, task._isOffscreenCanvasSupported);
  let left, top;
  if (angle === 0) {
    left = tx[4];
    top = tx[5] - fontAscent;
  } else {
    left = tx[4] + fontAscent * Math.sin(angle);
    top = tx[5] - fontAscent * Math.cos(angle);
  }
  const scaleFactorStr = "calc(var(--scale-factor)*";
  const divStyle = textDiv.style;
  if (task._container === task._rootContainer) {
    divStyle.left = `${(100 * left / task._pageWidth).toFixed(2)}%`;
    divStyle.top = `${(100 * top / task._pageHeight).toFixed(2)}%`;
  } else {
    divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`;
    divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`;
  }
  divStyle.fontSize = `${scaleFactorStr}${fontHeight.toFixed(2)}px)`;
  divStyle.fontFamily = style.fontFamily;
  textDivProperties.fontSize = fontHeight;
  textDiv.setAttribute("role", "presentation");
  textDiv.textContent = geom.str;
  textDiv.dir = geom.dir;
  if (task._fontInspectorEnabled) {
    textDiv.dataset.fontName = geom.fontName;
  }
  if (angle !== 0) {
    textDivProperties.angle = angle * (180 / Math.PI);
  }
  let shouldScaleText = false;
  if (geom.str.length > 1) {
    shouldScaleText = true;
  } else if (geom.str !== " " && geom.transform[0] !== geom.transform[3]) {
    const absScaleX = Math.abs(geom.transform[0]),
      absScaleY = Math.abs(geom.transform[3]);
    if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) {
      shouldScaleText = true;
    }
  }
  if (shouldScaleText) {
    textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width;
  }
  task._textDivProperties.set(textDiv, textDivProperties);
  if (task._isReadableStream) {
    task._layoutText(textDiv);
  }
}
function layout(params) {
  const {
    div,
    scale,
    properties,
    ctx,
    prevFontSize,
    prevFontFamily
  } = params;
  const {
    style
  } = div;
  let transform = "";
  if (properties.canvasWidth !== 0 && properties.hasText) {
    const {
      fontFamily
    } = style;
    const {
      canvasWidth,
      fontSize
    } = properties;
    if (prevFontSize !== fontSize || prevFontFamily !== fontFamily) {
      ctx.font = `${fontSize * scale}px ${fontFamily}`;
      params.prevFontSize = fontSize;
      params.prevFontFamily = fontFamily;
    }
    const {
      width
    } = ctx.measureText(div.textContent);
    if (width > 0) {
      transform = `scaleX(${canvasWidth * scale / width})`;
    }
  }
  if (properties.angle !== 0) {
    transform = `rotate(${properties.angle}deg) ${transform}`;
  }
  if (transform.length > 0) {
    style.transform = transform;
  }
}
function render(task) {
  if (task._canceled) {
    return;
  }
  const textDivs = task._textDivs;
  const capability = task._capability;
  const textDivsLength = textDivs.length;
  if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) {
    capability.resolve();
    return;
  }
  if (!task._isReadableStream) {
    for (const textDiv of textDivs) {
      task._layoutText(textDiv);
    }
  }
  capability.resolve();
}
class TextLayerRenderTask {
  constructor({
    textContentSource,
    container,
    viewport,
    textDivs,
    textDivProperties,
    textContentItemsStr,
    isOffscreenCanvasSupported
  }) {
    this._textContentSource = textContentSource;
    this._isReadableStream = textContentSource instanceof ReadableStream;
    this._container = this._rootContainer = container;
    this._textDivs = textDivs || [];
    this._textContentItemsStr = textContentItemsStr || [];
    this._isOffscreenCanvasSupported = isOffscreenCanvasSupported;
    this._fontInspectorEnabled = !!globalThis.FontInspector?.enabled;
    this._reader = null;
    this._textDivProperties = textDivProperties || new WeakMap();
    this._canceled = false;
    this._capability = new _util.PromiseCapability();
    this._layoutTextParams = {
      prevFontSize: null,
      prevFontFamily: null,
      div: null,
      scale: viewport.scale * (globalThis.devicePixelRatio || 1),
      properties: null,
      ctx: getCtx(0, isOffscreenCanvasSupported)
    };
    const {
      pageWidth,
      pageHeight,
      pageX,
      pageY
    } = viewport.rawDims;
    this._transform = [1, 0, 0, -1, -pageX, pageY + pageHeight];
    this._pageWidth = pageWidth;
    this._pageHeight = pageHeight;
    (0, _display_utils.setLayerDimensions)(container, viewport);
    this._capability.promise.finally(() => {
      this._layoutTextParams = null;
    }).catch(() => {});
  }
  get promise() {
    return this._capability.promise;
  }
  cancel() {
    this._canceled = true;
    if (this._reader) {
      this._reader.cancel(new _util.AbortException("TextLayer task cancelled.")).catch(() => {});
      this._reader = null;
    }
    this._capability.reject(new _util.AbortException("TextLayer task cancelled."));
  }
  _processItems(items, styleCache) {
    for (const item of items) {
      if (item.str === undefined) {
        if (item.type === "beginMarkedContentProps" || item.type === "beginMarkedContent") {
          const parent = this._container;
          this._container = document.createElement("span");
          this._container.classList.add("markedContent");
          if (item.id !== null) {
            this._container.setAttribute("id", `${item.id}`);
          }
          parent.append(this._container);
        } else if (item.type === "endMarkedContent") {
          this._container = this._container.parentNode;
        }
        continue;
      }
      this._textContentItemsStr.push(item.str);
      appendText(this, item, styleCache);
    }
  }
  _layoutText(textDiv) {
    const textDivProperties = this._layoutTextParams.properties = this._textDivProperties.get(textDiv);
    this._layoutTextParams.div = textDiv;
    layout(this._layoutTextParams);
    if (textDivProperties.hasText) {
      this._container.append(textDiv);
    }
    if (textDivProperties.hasEOL) {
      const br = document.createElement("br");
      br.setAttribute("role", "presentation");
      this._container.append(br);
    }
  }
  _render() {
    const capability = new _util.PromiseCapability();
    let styleCache = Object.create(null);
    if (this._isReadableStream) {
      const pump = () => {
        this._reader.read().then(({
          value,
          done
        }) => {
          if (done) {
            capability.resolve();
            return;
          }
          Object.assign(styleCache, value.styles);
          this._processItems(value.items, styleCache);
          pump();
        }, capability.reject);
      };
      this._reader = this._textContentSource.getReader();
      pump();
    } else if (this._textContentSource) {
      const {
        items,
        styles
      } = this._textContentSource;
      this._processItems(items, styles);
      capability.resolve();
    } else {
      throw new Error('No "textContentSource" parameter specified.');
    }
    capability.promise.then(() => {
      styleCache = null;
      render(this);
    }, this._capability.reject);
  }
}
exports.TextLayerRenderTask = TextLayerRenderTask;
function renderTextLayer(params) {
  if (!params.textContentSource && (params.textContent || params.textContentStream)) {
    (0, _display_utils.deprecated)("The TextLayerRender `textContent`/`textContentStream` parameters " + "will be removed in the future, please use `textContentSource` instead.");
    params.textContentSource = params.textContent || params.textContentStream;
  }
  const {
    container,
    viewport
  } = params;
  const style = getComputedStyle(container);
  const visibility = style.getPropertyValue("visibility");
  const scaleFactor = parseFloat(style.getPropertyValue("--scale-factor"));
  if (visibility === "visible" && (!scaleFactor || Math.abs(scaleFactor - viewport.scale) > 1e-5)) {
    console.error("The `--scale-factor` CSS-variable must be set, " + "to the same value as `viewport.scale`, " + "either on the `container`-element itself or higher up in the DOM.");
  }
  const task = new TextLayerRenderTask(params);
  task._render();
  return task;
}
function updateTextLayer({
  container,
  viewport,
  textDivs,
  textDivProperties,
  isOffscreenCanvasSupported,
  mustRotate = true,
  mustRescale = true
}) {
  if (mustRotate) {
    (0, _display_utils.setLayerDimensions)(container, {
      rotation: viewport.rotation
    });
  }
  if (mustRescale) {
    const ctx = getCtx(0, isOffscreenCanvasSupported);
    const scale = viewport.scale * (globalThis.devicePixelRatio || 1);
    const params = {
      prevFontSize: null,
      prevFontFamily: null,
      div: null,
      scale,
      properties: null,
      ctx
    };
    for (const div of textDivs) {
      params.properties = textDivProperties.get(div);
      params.div = div;
      layout(params);
    }
  }
}

/***/ }),
/* 27 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.AnnotationEditorLayer = void 0;
var _util = __w_pdfjs_require__(1);
var _editor = __w_pdfjs_require__(4);
var _freetext = __w_pdfjs_require__(28);
var _ink = __w_pdfjs_require__(33);
var _display_utils = __w_pdfjs_require__(6);
var _stamp = __w_pdfjs_require__(34);
class AnnotationEditorLayer {
  #accessibilityManager;
  #allowClick = false;
  #annotationLayer = null;
  #boundPointerup = this.pointerup.bind(this);
  #boundPointerdown = this.pointerdown.bind(this);
  #editors = new Map();
  #hadPointerDown = false;
  #isCleaningUp = false;
  #isDisabling = false;
  #uiManager;
  static _initialized = false;
  constructor({
    uiManager,
    pageIndex,
    div,
    accessibilityManager,
    annotationLayer,
    viewport,
    l10n
  }) {
    const editorTypes = [_freetext.FreeTextEditor, _ink.InkEditor, _stamp.StampEditor];
    if (!AnnotationEditorLayer._initialized) {
      AnnotationEditorLayer._initialized = true;
      for (const editorType of editorTypes) {
        editorType.initialize(l10n);
      }
    }
    uiManager.registerEditorTypes(editorTypes);
    this.#uiManager = uiManager;
    this.pageIndex = pageIndex;
    this.div = div;
    this.#accessibilityManager = accessibilityManager;
    this.#annotationLayer = annotationLayer;
    this.viewport = viewport;
    this.#uiManager.addLayer(this);
  }
  get isEmpty() {
    return this.#editors.size === 0;
  }
  updateToolbar(mode) {
    this.#uiManager.updateToolbar(mode);
  }
  updateMode(mode = this.#uiManager.getMode()) {
    this.#cleanup();
    if (mode === _util.AnnotationEditorType.INK) {
      this.addInkEditorIfNeeded(false);
      this.disableClick();
    } else {
      this.enableClick();
    }
    if (mode !== _util.AnnotationEditorType.NONE) {
      this.div.classList.toggle("freeTextEditing", mode === _util.AnnotationEditorType.FREETEXT);
      this.div.classList.toggle("inkEditing", mode === _util.AnnotationEditorType.INK);
      this.div.classList.toggle("stampEditing", mode === _util.AnnotationEditorType.STAMP);
      this.div.hidden = false;
    }
  }
  addInkEditorIfNeeded(isCommitting) {
    if (!isCommitting && this.#uiManager.getMode() !== _util.AnnotationEditorType.INK) {
      return;
    }
    if (!isCommitting) {
      for (const editor of this.#editors.values()) {
        if (editor.isEmpty()) {
          editor.setInBackground();
          return;
        }
      }
    }
    const editor = this.#createAndAddNewEditor({
      offsetX: 0,
      offsetY: 0
    }, false);
    editor.setInBackground();
  }
  setEditingState(isEditing) {
    this.#uiManager.setEditingState(isEditing);
  }
  addCommands(params) {
    this.#uiManager.addCommands(params);
  }
  enable() {
    this.div.style.pointerEvents = "auto";
    const annotationElementIds = new Set();
    for (const editor of this.#editors.values()) {
      editor.enableEditing();
      if (editor.annotationElementId) {
        annotationElementIds.add(editor.annotationElementId);
      }
    }
    if (!this.#annotationLayer) {
      return;
    }
    const editables = this.#annotationLayer.getEditableAnnotations();
    for (const editable of editables) {
      editable.hide();
      if (this.#uiManager.isDeletedAnnotationElement(editable.data.id)) {
        continue;
      }
      if (annotationElementIds.has(editable.data.id)) {
        continue;
      }
      const editor = this.deserialize(editable);
      if (!editor) {
        continue;
      }
      this.addOrRebuild(editor);
      editor.enableEditing();
    }
  }
  disable() {
    this.#isDisabling = true;
    this.div.style.pointerEvents = "none";
    const hiddenAnnotationIds = new Set();
    for (const editor of this.#editors.values()) {
      editor.disableEditing();
      if (!editor.annotationElementId || editor.serialize() !== null) {
        hiddenAnnotationIds.add(editor.annotationElementId);
        continue;
      }
      this.getEditableAnnotation(editor.annotationElementId)?.show();
      editor.remove();
    }
    if (this.#annotationLayer) {
      const editables = this.#annotationLayer.getEditableAnnotations();
      for (const editable of editables) {
        const {
          id
        } = editable.data;
        if (hiddenAnnotationIds.has(id) || this.#uiManager.isDeletedAnnotationElement(id)) {
          continue;
        }
        editable.show();
      }
    }
    this.#cleanup();
    if (this.isEmpty) {
      this.div.hidden = true;
    }
    this.#isDisabling = false;
  }
  getEditableAnnotation(id) {
    return this.#annotationLayer?.getEditableAnnotation(id) || null;
  }
  setActiveEditor(editor) {
    const currentActive = this.#uiManager.getActive();
    if (currentActive === editor) {
      return;
    }
    this.#uiManager.setActiveEditor(editor);
  }
  enableClick() {
    this.div.addEventListener("pointerdown", this.#boundPointerdown);
    this.div.addEventListener("pointerup", this.#boundPointerup);
  }
  disableClick() {
    this.div.removeEventListener("pointerdown", this.#boundPointerdown);
    this.div.removeEventListener("pointerup", this.#boundPointerup);
  }
  attach(editor) {
    this.#editors.set(editor.id, editor);
    const {
      annotationElementId
    } = editor;
    if (annotationElementId && this.#uiManager.isDeletedAnnotationElement(annotationElementId)) {
      this.#uiManager.removeDeletedAnnotationElement(editor);
    }
  }
  detach(editor) {
    this.#editors.delete(editor.id);
    this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv);
    if (!this.#isDisabling && editor.annotationElementId) {
      this.#uiManager.addDeletedAnnotationElement(editor);
    }
  }
  remove(editor) {
    this.detach(editor);
    this.#uiManager.removeEditor(editor);
    if (editor.div.contains(document.activeElement)) {
      setTimeout(() => {
        this.#uiManager.focusMainContainer();
      }, 0);
    }
    editor.div.remove();
    editor.isAttachedToDOM = false;
    if (!this.#isCleaningUp) {
      this.addInkEditorIfNeeded(false);
    }
  }
  changeParent(editor) {
    if (editor.parent === this) {
      return;
    }
    if (editor.annotationElementId) {
      this.#uiManager.addDeletedAnnotationElement(editor.annotationElementId);
      _editor.AnnotationEditor.deleteAnnotationElement(editor);
      editor.annotationElementId = null;
    }
    this.attach(editor);
    editor.parent?.detach(editor);
    editor.setParent(this);
    if (editor.div && editor.isAttachedToDOM) {
      editor.div.remove();
      this.div.append(editor.div);
    }
  }
  add(editor) {
    this.changeParent(editor);
    this.#uiManager.addEditor(editor);
    this.attach(editor);
    if (!editor.isAttachedToDOM) {
      const div = editor.render();
      this.div.append(div);
      editor.isAttachedToDOM = true;
    }
    editor.fixAndSetPosition();
    editor.onceAdded();
    this.#uiManager.addToAnnotationStorage(editor);
  }
  moveEditorInDOM(editor) {
    if (!editor.isAttachedToDOM) {
      return;
    }
    const {
      activeElement
    } = document;
    if (editor.div.contains(activeElement)) {
      editor._focusEventsAllowed = false;
      setTimeout(() => {
        if (!editor.div.contains(document.activeElement)) {
          editor.div.addEventListener("focusin", () => {
            editor._focusEventsAllowed = true;
          }, {
            once: true
          });
          activeElement.focus();
        } else {
          editor._focusEventsAllowed = true;
        }
      }, 0);
    }
    editor._structTreeParentId = this.#accessibilityManager?.moveElementInDOM(this.div, editor.div, editor.contentDiv, true);
  }
  addOrRebuild(editor) {
    if (editor.needsToBeRebuilt()) {
      editor.rebuild();
    } else {
      this.add(editor);
    }
  }
  addUndoableEditor(editor) {
    const cmd = () => editor._uiManager.rebuild(editor);
    const undo = () => {
      editor.remove();
    };
    this.addCommands({
      cmd,
      undo,
      mustExec: false
    });
  }
  getNextId() {
    return this.#uiManager.getId();
  }
  #createNewEditor(params) {
    switch (this.#uiManager.getMode()) {
      case _util.AnnotationEditorType.FREETEXT:
        return new _freetext.FreeTextEditor(params);
      case _util.AnnotationEditorType.INK:
        return new _ink.InkEditor(params);
      case _util.AnnotationEditorType.STAMP:
        return new _stamp.StampEditor(params);
    }
    return null;
  }
  pasteEditor(mode, params) {
    this.#uiManager.updateToolbar(mode);
    this.#uiManager.updateMode(mode);
    const {
      offsetX,
      offsetY
    } = this.#getCenterPoint();
    const id = this.getNextId();
    const editor = this.#createNewEditor({
      parent: this,
      id,
      x: offsetX,
      y: offsetY,
      uiManager: this.#uiManager,
      isCentered: true,
      ...params
    });
    if (editor) {
      this.add(editor);
    }
  }
  deserialize(data) {
    switch (data.annotationType ?? data.annotationEditorType) {
      case _util.AnnotationEditorType.FREETEXT:
        return _freetext.FreeTextEditor.deserialize(data, this, this.#uiManager);
      case _util.AnnotationEditorType.INK:
        return _ink.InkEditor.deserialize(data, this, this.#uiManager);
      case _util.AnnotationEditorType.STAMP:
        return _stamp.StampEditor.deserialize(data, this, this.#uiManager);
    }
    return null;
  }
  #createAndAddNewEditor(event, isCentered) {
    const id = this.getNextId();
    const editor = this.#createNewEditor({
      parent: this,
      id,
      x: event.offsetX,
      y: event.offsetY,
      uiManager: this.#uiManager,
      isCentered
    });
    if (editor) {
      this.add(editor);
    }
    return editor;
  }
  #getCenterPoint() {
    const {
      x,
      y,
      width,
      height
    } = this.div.getBoundingClientRect();
    const tlX = Math.max(0, x);
    const tlY = Math.max(0, y);
    const brX = Math.min(window.innerWidth, x + width);
    const brY = Math.min(window.innerHeight, y + height);
    const centerX = (tlX + brX) / 2 - x;
    const centerY = (tlY + brY) / 2 - y;
    const [offsetX, offsetY] = this.viewport.rotation % 180 === 0 ? [centerX, centerY] : [centerY, centerX];
    return {
      offsetX,
      offsetY
    };
  }
  addNewEditor() {
    this.#createAndAddNewEditor(this.#getCenterPoint(), true);
  }
  setSelected(editor) {
    this.#uiManager.setSelected(editor);
  }
  toggleSelected(editor) {
    this.#uiManager.toggleSelected(editor);
  }
  isSelected(editor) {
    return this.#uiManager.isSelected(editor);
  }
  unselect(editor) {
    this.#uiManager.unselect(editor);
  }
  pointerup(event) {
    const {
      isMac
    } = _util.FeatureTest.platform;
    if (event.button !== 0 || event.ctrlKey && isMac) {
      return;
    }
    if (event.target !== this.div) {
      return;
    }
    if (!this.#hadPointerDown) {
      return;
    }
    this.#hadPointerDown = false;
    if (!this.#allowClick) {
      this.#allowClick = true;
      return;
    }
    if (this.#uiManager.getMode() === _util.AnnotationEditorType.STAMP) {
      this.#uiManager.unselectAll();
      return;
    }
    this.#createAndAddNewEditor(event, false);
  }
  pointerdown(event) {
    if (this.#hadPointerDown) {
      this.#hadPointerDown = false;
      return;
    }
    const {
      isMac
    } = _util.FeatureTest.platform;
    if (event.button !== 0 || event.ctrlKey && isMac) {
      return;
    }
    if (event.target !== this.div) {
      return;
    }
    this.#hadPointerDown = true;
    const editor = this.#uiManager.getActive();
    this.#allowClick = !editor || editor.isEmpty();
  }
  findNewParent(editor, x, y) {
    const layer = this.#uiManager.findParent(x, y);
    if (layer === null || layer === this) {
      return false;
    }
    layer.changeParent(editor);
    return true;
  }
  destroy() {
    if (this.#uiManager.getActive()?.parent === this) {
      this.#uiManager.commitOrRemove();
      this.#uiManager.setActiveEditor(null);
    }
    for (const editor of this.#editors.values()) {
      this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv);
      editor.setParent(null);
      editor.isAttachedToDOM = false;
      editor.div.remove();
    }
    this.div = null;
    this.#editors.clear();
    this.#uiManager.removeLayer(this);
  }
  #cleanup() {
    this.#isCleaningUp = true;
    for (const editor of this.#editors.values()) {
      if (editor.isEmpty()) {
        editor.remove();
      }
    }
    this.#isCleaningUp = false;
  }
  render({
    viewport
  }) {
    this.viewport = viewport;
    (0, _display_utils.setLayerDimensions)(this.div, viewport);
    for (const editor of this.#uiManager.getEditors(this.pageIndex)) {
      this.add(editor);
    }
    this.updateMode();
  }
  update({
    viewport
  }) {
    this.#uiManager.commitOrRemove();
    this.viewport = viewport;
    (0, _display_utils.setLayerDimensions)(this.div, {
      rotation: viewport.rotation
    });
    this.updateMode();
  }
  get pageDimensions() {
    const {
      pageWidth,
      pageHeight
    } = this.viewport.rawDims;
    return [pageWidth, pageHeight];
  }
}
exports.AnnotationEditorLayer = AnnotationEditorLayer;

/***/ }),
/* 28 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.FreeTextEditor = void 0;
var _util = __w_pdfjs_require__(1);
var _tools = __w_pdfjs_require__(5);
var _editor = __w_pdfjs_require__(4);
var _annotation_layer = __w_pdfjs_require__(29);
class FreeTextEditor extends _editor.AnnotationEditor {
  #boundEditorDivBlur = this.editorDivBlur.bind(this);
  #boundEditorDivFocus = this.editorDivFocus.bind(this);
  #boundEditorDivInput = this.editorDivInput.bind(this);
  #boundEditorDivKeydown = this.editorDivKeydown.bind(this);
  #color;
  #content = "";
  #editorDivId = `${this.id}-editor`;
  #fontSize;
  #initialData = null;
  static _freeTextDefaultContent = "";
  static _internalPadding = 0;
  static _defaultColor = null;
  static _defaultFontSize = 10;
  static get _keyboardManager() {
    const proto = FreeTextEditor.prototype;
    const arrowChecker = self => self.isEmpty();
    const small = _tools.AnnotationEditorUIManager.TRANSLATE_SMALL;
    const big = _tools.AnnotationEditorUIManager.TRANSLATE_BIG;
    return (0, _util.shadow)(this, "_keyboardManager", new _tools.KeyboardManager([[["ctrl+s", "mac+meta+s", "ctrl+p", "mac+meta+p"], proto.commitOrRemove, {
      bubbles: true
    }], [["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"], proto.commitOrRemove], [["ArrowLeft", "mac+ArrowLeft"], proto._translateEmpty, {
      args: [-small, 0],
      checker: arrowChecker
    }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto._translateEmpty, {
      args: [-big, 0],
      checker: arrowChecker
    }], [["ArrowRight", "mac+ArrowRight"], proto._translateEmpty, {
      args: [small, 0],
      checker: arrowChecker
    }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto._translateEmpty, {
      args: [big, 0],
      checker: arrowChecker
    }], [["ArrowUp", "mac+ArrowUp"], proto._translateEmpty, {
      args: [0, -small],
      checker: arrowChecker
    }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto._translateEmpty, {
      args: [0, -big],
      checker: arrowChecker
    }], [["ArrowDown", "mac+ArrowDown"], proto._translateEmpty, {
      args: [0, small],
      checker: arrowChecker
    }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto._translateEmpty, {
      args: [0, big],
      checker: arrowChecker
    }]]));
  }
  static _type = "freetext";
  constructor(params) {
    super({
      ...params,
      name: "freeTextEditor"
    });
    this.#color = params.color || FreeTextEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor;
    this.#fontSize = params.fontSize || FreeTextEditor._defaultFontSize;
  }
  static initialize(l10n) {
    _editor.AnnotationEditor.initialize(l10n, {
      strings: ["free_text2_default_content", "editor_free_text2_aria_label"]
    });
    const style = getComputedStyle(document.documentElement);
    this._internalPadding = parseFloat(style.getPropertyValue("--freetext-padding"));
  }
  static updateDefaultParams(type, value) {
    switch (type) {
      case _util.AnnotationEditorParamsType.FREETEXT_SIZE:
        FreeTextEditor._defaultFontSize = value;
        break;
      case _util.AnnotationEditorParamsType.FREETEXT_COLOR:
        FreeTextEditor._defaultColor = value;
        break;
    }
  }
  updateParams(type, value) {
    switch (type) {
      case _util.AnnotationEditorParamsType.FREETEXT_SIZE:
        this.#updateFontSize(value);
        break;
      case _util.AnnotationEditorParamsType.FREETEXT_COLOR:
        this.#updateColor(value);
        break;
    }
  }
  static get defaultPropertiesToUpdate() {
    return [[_util.AnnotationEditorParamsType.FREETEXT_SIZE, FreeTextEditor._defaultFontSize], [_util.AnnotationEditorParamsType.FREETEXT_COLOR, FreeTextEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor]];
  }
  get propertiesToUpdate() {
    return [[_util.AnnotationEditorParamsType.FREETEXT_SIZE, this.#fontSize], [_util.AnnotationEditorParamsType.FREETEXT_COLOR, this.#color]];
  }
  #updateFontSize(fontSize) {
    const setFontsize = size => {
      this.editorDiv.style.fontSize = `calc(${size}px * var(--scale-factor))`;
      this.translate(0, -(size - this.#fontSize) * this.parentScale);
      this.#fontSize = size;
      this.#setEditorDimensions();
    };
    const savedFontsize = this.#fontSize;
    this.addCommands({
      cmd: () => {
        setFontsize(fontSize);
      },
      undo: () => {
        setFontsize(savedFontsize);
      },
      mustExec: true,
      type: _util.AnnotationEditorParamsType.FREETEXT_SIZE,
      overwriteIfSameType: true,
      keepUndo: true
    });
  }
  #updateColor(color) {
    const savedColor = this.#color;
    this.addCommands({
      cmd: () => {
        this.#color = this.editorDiv.style.color = color;
      },
      undo: () => {
        this.#color = this.editorDiv.style.color = savedColor;
      },
      mustExec: true,
      type: _util.AnnotationEditorParamsType.FREETEXT_COLOR,
      overwriteIfSameType: true,
      keepUndo: true
    });
  }
  _translateEmpty(x, y) {
    this._uiManager.translateSelectedEditors(x, y, true);
  }
  getInitialTranslation() {
    const scale = this.parentScale;
    return [-FreeTextEditor._internalPadding * scale, -(FreeTextEditor._internalPadding + this.#fontSize) * scale];
  }
  rebuild() {
    if (!this.parent) {
      return;
    }
    super.rebuild();
    if (this.div === null) {
      return;
    }
    if (!this.isAttachedToDOM) {
      this.parent.add(this);
    }
  }
  enableEditMode() {
    if (this.isInEditMode()) {
      return;
    }
    this.parent.setEditingState(false);
    this.parent.updateToolbar(_util.AnnotationEditorType.FREETEXT);
    super.enableEditMode();
    this.overlayDiv.classList.remove("enabled");
    this.editorDiv.contentEditable = true;
    this._isDraggable = false;
    this.div.removeAttribute("aria-activedescendant");
    this.editorDiv.addEventListener("keydown", this.#boundEditorDivKeydown);
    this.editorDiv.addEventListener("focus", this.#boundEditorDivFocus);
    this.editorDiv.addEventListener("blur", this.#boundEditorDivBlur);
    this.editorDiv.addEventListener("input", this.#boundEditorDivInput);
  }
  disableEditMode() {
    if (!this.isInEditMode()) {
      return;
    }
    this.parent.setEditingState(true);
    super.disableEditMode();
    this.overlayDiv.classList.add("enabled");
    this.editorDiv.contentEditable = false;
    this.div.setAttribute("aria-activedescendant", this.#editorDivId);
    this._isDraggable = true;
    this.editorDiv.removeEventListener("keydown", this.#boundEditorDivKeydown);
    this.editorDiv.removeEventListener("focus", this.#boundEditorDivFocus);
    this.editorDiv.removeEventListener("blur", this.#boundEditorDivBlur);
    this.editorDiv.removeEventListener("input", this.#boundEditorDivInput);
    this.div.focus({
      preventScroll: true
    });
    this.isEditing = false;
    this.parent.div.classList.add("freeTextEditing");
  }
  focusin(event) {
    if (!this._focusEventsAllowed) {
      return;
    }
    super.focusin(event);
    if (event.target !== this.editorDiv) {
      this.editorDiv.focus();
    }
  }
  onceAdded() {
    if (this.width) {
      this.#cheatInitialRect();
      return;
    }
    this.enableEditMode();
    this.editorDiv.focus();
    if (this._initialOptions?.isCentered) {
      this.center();
    }
    this._initialOptions = null;
  }
  isEmpty() {
    return !this.editorDiv || this.editorDiv.innerText.trim() === "";
  }
  remove() {
    this.isEditing = false;
    if (this.parent) {
      this.parent.setEditingState(true);
      this.parent.div.classList.add("freeTextEditing");
    }
    super.remove();
  }
  #extractText() {
    const divs = this.editorDiv.getElementsByTagName("div");
    if (divs.length === 0) {
      return this.editorDiv.innerText;
    }
    const buffer = [];
    for (const div of divs) {
      buffer.push(div.innerText.replace(/\r\n?|\n/, ""));
    }
    return buffer.join("\n");
  }
  #setEditorDimensions() {
    const [parentWidth, parentHeight] = this.parentDimensions;
    let rect;
    if (this.isAttachedToDOM) {
      rect = this.div.getBoundingClientRect();
    } else {
      const {
        currentLayer,
        div
      } = this;
      const savedDisplay = div.style.display;
      div.style.display = "hidden";
      currentLayer.div.append(this.div);
      rect = div.getBoundingClientRect();
      div.remove();
      div.style.display = savedDisplay;
    }
    if (this.rotation % 180 === this.parentRotation % 180) {
      this.width = rect.width / parentWidth;
      this.height = rect.height / parentHeight;
    } else {
      this.width = rect.height / parentWidth;
      this.height = rect.width / parentHeight;
    }
    this.fixAndSetPosition();
  }
  commit() {
    if (!this.isInEditMode()) {
      return;
    }
    super.commit();
    this.disableEditMode();
    const savedText = this.#content;
    const newText = this.#content = this.#extractText().trimEnd();
    if (savedText === newText) {
      return;
    }
    const setText = text => {
      this.#content = text;
      if (!text) {
        this.remove();
        return;
      }
      this.#setContent();
      this._uiManager.rebuild(this);
      this.#setEditorDimensions();
    };
    this.addCommands({
      cmd: () => {
        setText(newText);
      },
      undo: () => {
        setText(savedText);
      },
      mustExec: false
    });
    this.#setEditorDimensions();
  }
  shouldGetKeyboardEvents() {
    return this.isInEditMode();
  }
  enterInEditMode() {
    this.enableEditMode();
    this.editorDiv.focus();
  }
  dblclick(event) {
    this.enterInEditMode();
  }
  keydown(event) {
    if (event.target === this.div && event.key === "Enter") {
      this.enterInEditMode();
      event.preventDefault();
    }
  }
  editorDivKeydown(event) {
    FreeTextEditor._keyboardManager.exec(this, event);
  }
  editorDivFocus(event) {
    this.isEditing = true;
  }
  editorDivBlur(event) {
    this.isEditing = false;
  }
  editorDivInput(event) {
    this.parent.div.classList.toggle("freeTextEditing", this.isEmpty());
  }
  disableEditing() {
    this.editorDiv.setAttribute("role", "comment");
    this.editorDiv.removeAttribute("aria-multiline");
  }
  enableEditing() {
    this.editorDiv.setAttribute("role", "textbox");
    this.editorDiv.setAttribute("aria-multiline", true);
  }
  render() {
    if (this.div) {
      return this.div;
    }
    let baseX, baseY;
    if (this.width) {
      baseX = this.x;
      baseY = this.y;
    }
    super.render();
    this.editorDiv = document.createElement("div");
    this.editorDiv.className = "internal";
    this.editorDiv.setAttribute("id", this.#editorDivId);
    this.enableEditing();
    _editor.AnnotationEditor._l10nPromise.get("editor_free_text2_aria_label").then(msg => this.editorDiv?.setAttribute("aria-label", msg));
    _editor.AnnotationEditor._l10nPromise.get("free_text2_default_content").then(msg => this.editorDiv?.setAttribute("default-content", msg));
    this.editorDiv.contentEditable = true;
    const {
      style
    } = this.editorDiv;
    style.fontSize = `calc(${this.#fontSize}px * var(--scale-factor))`;
    style.color = this.#color;
    this.div.append(this.editorDiv);
    this.overlayDiv = document.createElement("div");
    this.overlayDiv.classList.add("overlay", "enabled");
    this.div.append(this.overlayDiv);
    (0, _tools.bindEvents)(this, this.div, ["dblclick", "keydown"]);
    if (this.width) {
      const [parentWidth, parentHeight] = this.parentDimensions;
      if (this.annotationElementId) {
        const {
          position
        } = this.#initialData;
        let [tx, ty] = this.getInitialTranslation();
        [tx, ty] = this.pageTranslationToScreen(tx, ty);
        const [pageWidth, pageHeight] = this.pageDimensions;
        const [pageX, pageY] = this.pageTranslation;
        let posX, posY;
        switch (this.rotation) {
          case 0:
            posX = baseX + (position[0] - pageX) / pageWidth;
            posY = baseY + this.height - (position[1] - pageY) / pageHeight;
            break;
          case 90:
            posX = baseX + (position[0] - pageX) / pageWidth;
            posY = baseY - (position[1] - pageY) / pageHeight;
            [tx, ty] = [ty, -tx];
            break;
          case 180:
            posX = baseX - this.width + (position[0] - pageX) / pageWidth;
            posY = baseY - (position[1] - pageY) / pageHeight;
            [tx, ty] = [-tx, -ty];
            break;
          case 270:
            posX = baseX + (position[0] - pageX - this.height * pageHeight) / pageWidth;
            posY = baseY + (position[1] - pageY - this.width * pageWidth) / pageHeight;
            [tx, ty] = [-ty, tx];
            break;
        }
        this.setAt(posX * parentWidth, posY * parentHeight, tx, ty);
      } else {
        this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight);
      }
      this.#setContent();
      this._isDraggable = true;
      this.editorDiv.contentEditable = false;
    } else {
      this._isDraggable = false;
      this.editorDiv.contentEditable = true;
    }
    return this.div;
  }
  #setContent() {
    this.editorDiv.replaceChildren();
    if (!this.#content) {
      return;
    }
    for (const line of this.#content.split("\n")) {
      const div = document.createElement("div");
      div.append(line ? document.createTextNode(line) : document.createElement("br"));
      this.editorDiv.append(div);
    }
  }
  get contentDiv() {
    return this.editorDiv;
  }
  static deserialize(data, parent, uiManager) {
    let initialData = null;
    if (data instanceof _annotation_layer.FreeTextAnnotationElement) {
      const {
        data: {
          defaultAppearanceData: {
            fontSize,
            fontColor
          },
          rect,
          rotation,
          id
        },
        textContent,
        textPosition,
        parent: {
          page: {
            pageNumber
          }
        }
      } = data;
      if (!textContent || textContent.length === 0) {
        return null;
      }
      initialData = data = {
        annotationType: _util.AnnotationEditorType.FREETEXT,
        color: Array.from(fontColor),
        fontSize,
        value: textContent.join("\n"),
        position: textPosition,
        pageIndex: pageNumber - 1,
        rect,
        rotation,
        id,
        deleted: false
      };
    }
    const editor = super.deserialize(data, parent, uiManager);
    editor.#fontSize = data.fontSize;
    editor.#color = _util.Util.makeHexColor(...data.color);
    editor.#content = data.value;
    editor.annotationElementId = data.id || null;
    editor.#initialData = initialData;
    return editor;
  }
  serialize(isForCopying = false) {
    if (this.isEmpty()) {
      return null;
    }
    if (this.deleted) {
      return {
        pageIndex: this.pageIndex,
        id: this.annotationElementId,
        deleted: true
      };
    }
    const padding = FreeTextEditor._internalPadding * this.parentScale;
    const rect = this.getRect(padding, padding);
    const color = _editor.AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : this.#color);
    const serialized = {
      annotationType: _util.AnnotationEditorType.FREETEXT,
      color,
      fontSize: this.#fontSize,
      value: this.#content,
      pageIndex: this.pageIndex,
      rect,
      rotation: this.rotation,
      structTreeParentId: this._structTreeParentId
    };
    if (isForCopying) {
      return serialized;
    }
    if (this.annotationElementId && !this.#hasElementChanged(serialized)) {
      return null;
    }
    serialized.id = this.annotationElementId;
    return serialized;
  }
  #hasElementChanged(serialized) {
    const {
      value,
      fontSize,
      color,
      rect,
      pageIndex
    } = this.#initialData;
    return serialized.value !== value || serialized.fontSize !== fontSize || serialized.rect.some((x, i) => Math.abs(x - rect[i]) >= 1) || serialized.color.some((c, i) => c !== color[i]) || serialized.pageIndex !== pageIndex;
  }
  #cheatInitialRect(delayed = false) {
    if (!this.annotationElementId) {
      return;
    }
    this.#setEditorDimensions();
    if (!delayed && (this.width === 0 || this.height === 0)) {
      setTimeout(() => this.#cheatInitialRect(true), 0);
      return;
    }
    const padding = FreeTextEditor._internalPadding * this.parentScale;
    this.#initialData.rect = this.getRect(padding, padding);
  }
}
exports.FreeTextEditor = FreeTextEditor;

/***/ }),
/* 29 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.StampAnnotationElement = exports.InkAnnotationElement = exports.FreeTextAnnotationElement = exports.AnnotationLayer = void 0;
var _util = __w_pdfjs_require__(1);
var _display_utils = __w_pdfjs_require__(6);
var _annotation_storage = __w_pdfjs_require__(3);
var _scripting_utils = __w_pdfjs_require__(30);
var _displayL10n_utils = __w_pdfjs_require__(31);
var _xfa_layer = __w_pdfjs_require__(32);
const DEFAULT_TAB_INDEX = 1000;
const DEFAULT_FONT_SIZE = 9;
const GetElementsByNameSet = new WeakSet();
function getRectDims(rect) {
  return {
    width: rect[2] - rect[0],
    height: rect[3] - rect[1]
  };
}
class AnnotationElementFactory {
  static create(parameters) {
    const subtype = parameters.data.annotationType;
    switch (subtype) {
      case _util.AnnotationType.LINK:
        return new LinkAnnotationElement(parameters);
      case _util.AnnotationType.TEXT:
        return new TextAnnotationElement(parameters);
      case _util.AnnotationType.WIDGET:
        const fieldType = parameters.data.fieldType;
        switch (fieldType) {
          case "Tx":
            return new TextWidgetAnnotationElement(parameters);
          case "Btn":
            if (parameters.data.radioButton) {
              return new RadioButtonWidgetAnnotationElement(parameters);
            } else if (parameters.data.checkBox) {
              return new CheckboxWidgetAnnotationElement(parameters);
            }
            return new PushButtonWidgetAnnotationElement(parameters);
          case "Ch":
            return new ChoiceWidgetAnnotationElement(parameters);
          case "Sig":
            return new SignatureWidgetAnnotationElement(parameters);
        }
        return new WidgetAnnotationElement(parameters);
      case _util.AnnotationType.POPUP:
        return new PopupAnnotationElement(parameters);
      case _util.AnnotationType.FREETEXT:
        return new FreeTextAnnotationElement(parameters);
      case _util.AnnotationType.LINE:
        return new LineAnnotationElement(parameters);
      case _util.AnnotationType.SQUARE:
        return new SquareAnnotationElement(parameters);
      case _util.AnnotationType.CIRCLE:
        return new CircleAnnotationElement(parameters);
      case _util.AnnotationType.POLYLINE:
        return new PolylineAnnotationElement(parameters);
      case _util.AnnotationType.CARET:
        return new CaretAnnotationElement(parameters);
      case _util.AnnotationType.INK:
        return new InkAnnotationElement(parameters);
      case _util.AnnotationType.POLYGON:
        return new PolygonAnnotationElement(parameters);
      case _util.AnnotationType.HIGHLIGHT:
        return new HighlightAnnotationElement(parameters);
      case _util.AnnotationType.UNDERLINE:
        return new UnderlineAnnotationElement(parameters);
      case _util.AnnotationType.SQUIGGLY:
        return new SquigglyAnnotationElement(parameters);
      case _util.AnnotationType.STRIKEOUT:
        return new StrikeOutAnnotationElement(parameters);
      case _util.AnnotationType.STAMP:
        return new StampAnnotationElement(parameters);
      case _util.AnnotationType.FILEATTACHMENT:
        return new FileAttachmentAnnotationElement(parameters);
      default:
        return new AnnotationElement(parameters);
    }
  }
}
class AnnotationElement {
  #hasBorder = false;
  constructor(parameters, {
    isRenderable = false,
    ignoreBorder = false,
    createQuadrilaterals = false
  } = {}) {
    this.isRenderable = isRenderable;
    this.data = parameters.data;
    this.layer = parameters.layer;
    this.linkService = parameters.linkService;
    this.downloadManager = parameters.downloadManager;
    this.imageResourcesPath = parameters.imageResourcesPath;
    this.renderForms = parameters.renderForms;
    this.svgFactory = parameters.svgFactory;
    this.annotationStorage = parameters.annotationStorage;
    this.enableScripting = parameters.enableScripting;
    this.hasJSActions = parameters.hasJSActions;
    this._fieldObjects = parameters.fieldObjects;
    this.parent = parameters.parent;
    if (isRenderable) {
      this.container = this._createContainer(ignoreBorder);
    }
    if (createQuadrilaterals) {
      this._createQuadrilaterals();
    }
  }
  static _hasPopupData({
    titleObj,
    contentsObj,
    richText
  }) {
    return !!(titleObj?.str || contentsObj?.str || richText?.str);
  }
  get hasPopupData() {
    return AnnotationElement._hasPopupData(this.data);
  }
  _createContainer(ignoreBorder) {
    const {
      data,
      parent: {
        page,
        viewport
      }
    } = this;
    const container = document.createElement("section");
    container.setAttribute("data-annotation-id", data.id);
    if (!(this instanceof WidgetAnnotationElement)) {
      container.tabIndex = DEFAULT_TAB_INDEX;
    }
    container.style.zIndex = this.parent.zIndex++;
    if (this.data.popupRef) {
      container.setAttribute("aria-haspopup", "dialog");
    }
    if (data.noRotate) {
      container.classList.add("norotate");
    }
    const {
      pageWidth,
      pageHeight,
      pageX,
      pageY
    } = viewport.rawDims;
    if (!data.rect || this instanceof PopupAnnotationElement) {
      const {
        rotation
      } = data;
      if (!data.hasOwnCanvas && rotation !== 0) {
        this.setRotation(rotation, container);
      }
      return container;
    }
    const {
      width,
      height
    } = getRectDims(data.rect);
    const rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]);
    if (!ignoreBorder && data.borderStyle.width > 0) {
      container.style.borderWidth = `${data.borderStyle.width}px`;
      const horizontalRadius = data.borderStyle.horizontalCornerRadius;
      const verticalRadius = data.borderStyle.verticalCornerRadius;
      if (horizontalRadius > 0 || verticalRadius > 0) {
        const radius = `calc(${horizontalRadius}px * var(--scale-factor)) / calc(${verticalRadius}px * var(--scale-factor))`;
        container.style.borderRadius = radius;
      } else if (this instanceof RadioButtonWidgetAnnotationElement) {
        const radius = `calc(${width}px * var(--scale-factor)) / calc(${height}px * var(--scale-factor))`;
        container.style.borderRadius = radius;
      }
      switch (data.borderStyle.style) {
        case _util.AnnotationBorderStyleType.SOLID:
          container.style.borderStyle = "solid";
          break;
        case _util.AnnotationBorderStyleType.DASHED:
          container.style.borderStyle = "dashed";
          break;
        case _util.AnnotationBorderStyleType.BEVELED:
          (0, _util.warn)("Unimplemented border style: beveled");
          break;
        case _util.AnnotationBorderStyleType.INSET:
          (0, _util.warn)("Unimplemented border style: inset");
          break;
        case _util.AnnotationBorderStyleType.UNDERLINE:
          container.style.borderBottomStyle = "solid";
          break;
        default:
          break;
      }
      const borderColor = data.borderColor || null;
      if (borderColor) {
        this.#hasBorder = true;
        container.style.borderColor = _util.Util.makeHexColor(borderColor[0] | 0, borderColor[1] | 0, borderColor[2] | 0);
      } else {
        container.style.borderWidth = 0;
      }
    }
    container.style.left = `${100 * (rect[0] - pageX) / pageWidth}%`;
    container.style.top = `${100 * (rect[1] - pageY) / pageHeight}%`;
    const {
      rotation
    } = data;
    if (data.hasOwnCanvas || rotation === 0) {
      container.style.width = `${100 * width / pageWidth}%`;
      container.style.height = `${100 * height / pageHeight}%`;
    } else {
      this.setRotation(rotation, container);
    }
    return container;
  }
  setRotation(angle, container = this.container) {
    if (!this.data.rect) {
      return;
    }
    const {
      pageWidth,
      pageHeight
    } = this.parent.viewport.rawDims;
    const {
      width,
      height
    } = getRectDims(this.data.rect);
    let elementWidth, elementHeight;
    if (angle % 180 === 0) {
      elementWidth = 100 * width / pageWidth;
      elementHeight = 100 * height / pageHeight;
    } else {
      elementWidth = 100 * height / pageWidth;
      elementHeight = 100 * width / pageHeight;
    }
    container.style.width = `${elementWidth}%`;
    container.style.height = `${elementHeight}%`;
    container.setAttribute("data-main-rotation", (360 - angle) % 360);
  }
  get _commonActions() {
    const setColor = (jsName, styleName, event) => {
      const color = event.detail[jsName];
      const colorType = color[0];
      const colorArray = color.slice(1);
      event.target.style[styleName] = _scripting_utils.ColorConverters[`${colorType}_HTML`](colorArray);
      this.annotationStorage.setValue(this.data.id, {
        [styleName]: _scripting_utils.ColorConverters[`${colorType}_rgb`](colorArray)
      });
    };
    return (0, _util.shadow)(this, "_commonActions", {
      display: event => {
        const {
          display
        } = event.detail;
        const hidden = display % 2 === 1;
        this.container.style.visibility = hidden ? "hidden" : "visible";
        this.annotationStorage.setValue(this.data.id, {
          noView: hidden,
          noPrint: display === 1 || display === 2
        });
      },
      print: event => {
        this.annotationStorage.setValue(this.data.id, {
          noPrint: !event.detail.print
        });
      },
      hidden: event => {
        const {
          hidden
        } = event.detail;
        this.container.style.visibility = hidden ? "hidden" : "visible";
        this.annotationStorage.setValue(this.data.id, {
          noPrint: hidden,
          noView: hidden
        });
      },
      focus: event => {
        setTimeout(() => event.target.focus({
          preventScroll: false
        }), 0);
      },
      userName: event => {
        event.target.title = event.detail.userName;
      },
      readonly: event => {
        event.target.disabled = event.detail.readonly;
      },
      required: event => {
        this._setRequired(event.target, event.detail.required);
      },
      bgColor: event => {
        setColor("bgColor", "backgroundColor", event);
      },
      fillColor: event => {
        setColor("fillColor", "backgroundColor", event);
      },
      fgColor: event => {
        setColor("fgColor", "color", event);
      },
      textColor: event => {
        setColor("textColor", "color", event);
      },
      borderColor: event => {
        setColor("borderColor", "borderColor", event);
      },
      strokeColor: event => {
        setColor("strokeColor", "borderColor", event);
      },
      rotation: event => {
        const angle = event.detail.rotation;
        this.setRotation(angle);
        this.annotationStorage.setValue(this.data.id, {
          rotation: angle
        });
      }
    });
  }
  _dispatchEventFromSandbox(actions, jsEvent) {
    const commonActions = this._commonActions;
    for (const name of Object.keys(jsEvent.detail)) {
      const action = actions[name] || commonActions[name];
      action?.(jsEvent);
    }
  }
  _setDefaultPropertiesFromJS(element) {
    if (!this.enableScripting) {
      return;
    }
    const storedData = this.annotationStorage.getRawValue(this.data.id);
    if (!storedData) {
      return;
    }
    const commonActions = this._commonActions;
    for (const [actionName, detail] of Object.entries(storedData)) {
      const action = commonActions[actionName];
      if (action) {
        const eventProxy = {
          detail: {
            [actionName]: detail
          },
          target: element
        };
        action(eventProxy);
        delete storedData[actionName];
      }
    }
  }
  _createQuadrilaterals() {
    if (!this.container) {
      return;
    }
    const {
      quadPoints
    } = this.data;
    if (!quadPoints) {
      return;
    }
    const [rectBlX, rectBlY, rectTrX, rectTrY] = this.data.rect;
    if (quadPoints.length === 1) {
      const [, {
        x: trX,
        y: trY
      }, {
        x: blX,
        y: blY
      }] = quadPoints[0];
      if (rectTrX === trX && rectTrY === trY && rectBlX === blX && rectBlY === blY) {
        return;
      }
    }
    const {
      style
    } = this.container;
    let svgBuffer;
    if (this.#hasBorder) {
      const {
        borderColor,
        borderWidth
      } = style;
      style.borderWidth = 0;
      svgBuffer = ["url('data:image/svg+xml;utf8,", `<svg xmlns="http://www.w3.org/2000/svg"`, ` preserveAspectRatio="none" viewBox="0 0 1 1">`, `<g fill="transparent" stroke="${borderColor}" stroke-width="${borderWidth}">`];
      this.container.classList.add("hasBorder");
    }
    const width = rectTrX - rectBlX;
    const height = rectTrY - rectBlY;
    const {
      svgFactory
    } = this;
    const svg = svgFactory.createElement("svg");
    svg.classList.add("quadrilateralsContainer");
    svg.setAttribute("width", 0);
    svg.setAttribute("height", 0);
    const defs = svgFactory.createElement("defs");
    svg.append(defs);
    const clipPath = svgFactory.createElement("clipPath");
    const id = `clippath_${this.data.id}`;
    clipPath.setAttribute("id", id);
    clipPath.setAttribute("clipPathUnits", "objectBoundingBox");
    defs.append(clipPath);
    for (const [, {
      x: trX,
      y: trY
    }, {
      x: blX,
      y: blY
    }] of quadPoints) {
      const rect = svgFactory.createElement("rect");
      const x = (blX - rectBlX) / width;
      const y = (rectTrY - trY) / height;
      const rectWidth = (trX - blX) / width;
      const rectHeight = (trY - blY) / height;
      rect.setAttribute("x", x);
      rect.setAttribute("y", y);
      rect.setAttribute("width", rectWidth);
      rect.setAttribute("height", rectHeight);
      clipPath.append(rect);
      svgBuffer?.push(`<rect vector-effect="non-scaling-stroke" x="${x}" y="${y}" width="${rectWidth}" height="${rectHeight}"/>`);
    }
    if (this.#hasBorder) {
      svgBuffer.push(`</g></svg>')`);
      style.backgroundImage = svgBuffer.join("");
    }
    this.container.append(svg);
    this.container.style.clipPath = `url(#${id})`;
  }
  _createPopup() {
    const {
      container,
      data
    } = this;
    container.setAttribute("aria-haspopup", "dialog");
    const popup = new PopupAnnotationElement({
      data: {
        color: data.color,
        titleObj: data.titleObj,
        modificationDate: data.modificationDate,
        contentsObj: data.contentsObj,
        richText: data.richText,
        parentRect: data.rect,
        borderStyle: 0,
        id: `popup_${data.id}`,
        rotation: data.rotation
      },
      parent: this.parent,
      elements: [this]
    });
    this.parent.div.append(popup.render());
  }
  render() {
    (0, _util.unreachable)("Abstract method `AnnotationElement.render` called");
  }
  _getElementsByName(name, skipId = null) {
    const fields = [];
    if (this._fieldObjects) {
      const fieldObj = this._fieldObjects[name];
      if (fieldObj) {
        for (const {
          page,
          id,
          exportValues
        } of fieldObj) {
          if (page === -1) {
            continue;
          }
          if (id === skipId) {
            continue;
          }
          const exportValue = typeof exportValues === "string" ? exportValues : null;
          const domElement = document.querySelector(`[data-element-id="${id}"]`);
          if (domElement && !GetElementsByNameSet.has(domElement)) {
            (0, _util.warn)(`_getElementsByName - element not allowed: ${id}`);
            continue;
          }
          fields.push({
            id,
            exportValue,
            domElement
          });
        }
      }
      return fields;
    }
    for (const domElement of document.getElementsByName(name)) {
      const {
        exportValue
      } = domElement;
      const id = domElement.getAttribute("data-element-id");
      if (id === skipId) {
        continue;
      }
      if (!GetElementsByNameSet.has(domElement)) {
        continue;
      }
      fields.push({
        id,
        exportValue,
        domElement
      });
    }
    return fields;
  }
  show() {
    if (this.container) {
      this.container.hidden = false;
    }
    this.popup?.maybeShow();
  }
  hide() {
    if (this.container) {
      this.container.hidden = true;
    }
    this.popup?.forceHide();
  }
  getElementsToTriggerPopup() {
    return this.container;
  }
  addHighlightArea() {
    const triggers = this.getElementsToTriggerPopup();
    if (Array.isArray(triggers)) {
      for (const element of triggers) {
        element.classList.add("highlightArea");
      }
    } else {
      triggers.classList.add("highlightArea");
    }
  }
  _editOnDoubleClick() {
    const {
      annotationEditorType: mode,
      data: {
        id: editId
      }
    } = this;
    this.container.addEventListener("dblclick", () => {
      this.linkService.eventBus?.dispatch("switchannotationeditormode", {
        source: this,
        mode,
        editId
      });
    });
  }
}
class LinkAnnotationElement extends AnnotationElement {
  constructor(parameters, options = null) {
    super(parameters, {
      isRenderable: true,
      ignoreBorder: !!options?.ignoreBorder,
      createQuadrilaterals: true
    });
    this.isTooltipOnly = parameters.data.isTooltipOnly;
  }
  render() {
    const {
      data,
      linkService
    } = this;
    const link = document.createElement("a");
    link.setAttribute("data-element-id", data.id);
    let isBound = false;
    if (data.url) {
      linkService.addLinkAttributes(link, data.url, data.newWindow);
      isBound = true;
    } else if (data.action) {
      this._bindNamedAction(link, data.action);
      isBound = true;
    } else if (data.attachment) {
      this._bindAttachment(link, data.attachment);
      isBound = true;
    } else if (data.setOCGState) {
      this.#bindSetOCGState(link, data.setOCGState);
      isBound = true;
    } else if (data.dest) {
      this._bindLink(link, data.dest);
      isBound = true;
    } else {
      if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) {
        this._bindJSAction(link, data);
        isBound = true;
      }
      if (data.resetForm) {
        this._bindResetFormAction(link, data.resetForm);
        isBound = true;
      } else if (this.isTooltipOnly && !isBound) {
        this._bindLink(link, "");
        isBound = true;
      }
    }
    this.container.classList.add("linkAnnotation");
    if (isBound) {
      this.container.append(link);
    }
    return this.container;
  }
  #setInternalLink() {
    this.container.setAttribute("data-internal-link", "");
  }
  _bindLink(link, destination) {
    link.href = this.linkService.getDestinationHash(destination);
    link.onclick = () => {
      if (destination) {
        this.linkService.goToDestination(destination);
      }
      return false;
    };
    if (destination || destination === "") {
      this.#setInternalLink();
    }
  }
  _bindNamedAction(link, action) {
    link.href = this.linkService.getAnchorUrl("");
    link.onclick = () => {
      this.linkService.executeNamedAction(action);
      return false;
    };
    this.#setInternalLink();
  }
  _bindAttachment(link, attachment) {
    link.href = this.linkService.getAnchorUrl("");
    link.onclick = () => {
      this.downloadManager?.openOrDownloadData(this.container, attachment.content, attachment.filename);
      return false;
    };
    this.#setInternalLink();
  }
  #bindSetOCGState(link, action) {
    link.href = this.linkService.getAnchorUrl("");
    link.onclick = () => {
      this.linkService.executeSetOCGState(action);
      return false;
    };
    this.#setInternalLink();
  }
  _bindJSAction(link, data) {
    link.href = this.linkService.getAnchorUrl("");
    const map = new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]);
    for (const name of Object.keys(data.actions)) {
      const jsName = map.get(name);
      if (!jsName) {
        continue;
      }
      link[jsName] = () => {
        this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
          source: this,
          detail: {
            id: data.id,
            name
          }
        });
        return false;
      };
    }
    if (!link.onclick) {
      link.onclick = () => false;
    }
    this.#setInternalLink();
  }
  _bindResetFormAction(link, resetForm) {
    const otherClickAction = link.onclick;
    if (!otherClickAction) {
      link.href = this.linkService.getAnchorUrl("");
    }
    this.#setInternalLink();
    if (!this._fieldObjects) {
      (0, _util.warn)(`_bindResetFormAction - "resetForm" action not supported, ` + "ensure that the `fieldObjects` parameter is provided.");
      if (!otherClickAction) {
        link.onclick = () => false;
      }
      return;
    }
    link.onclick = () => {
      otherClickAction?.();
      const {
        fields: resetFormFields,
        refs: resetFormRefs,
        include
      } = resetForm;
      const allFields = [];
      if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) {
        const fieldIds = new Set(resetFormRefs);
        for (const fieldName of resetFormFields) {
          const fields = this._fieldObjects[fieldName] || [];
          for (const {
            id
          } of fields) {
            fieldIds.add(id);
          }
        }
        for (const fields of Object.values(this._fieldObjects)) {
          for (const field of fields) {
            if (fieldIds.has(field.id) === include) {
              allFields.push(field);
            }
          }
        }
      } else {
        for (const fields of Object.values(this._fieldObjects)) {
          allFields.push(...fields);
        }
      }
      const storage = this.annotationStorage;
      const allIds = [];
      for (const field of allFields) {
        const {
          id
        } = field;
        allIds.push(id);
        switch (field.type) {
          case "text":
            {
              const value = field.defaultValue || "";
              storage.setValue(id, {
                value
              });
              break;
            }
          case "checkbox":
          case "radiobutton":
            {
              const value = field.defaultValue === field.exportValues;
              storage.setValue(id, {
                value
              });
              break;
            }
          case "combobox":
          case "listbox":
            {
              const value = field.defaultValue || "";
              storage.setValue(id, {
                value
              });
              break;
            }
          default:
            continue;
        }
        const domElement = document.querySelector(`[data-element-id="${id}"]`);
        if (!domElement) {
          continue;
        } else if (!GetElementsByNameSet.has(domElement)) {
          (0, _util.warn)(`_bindResetFormAction - element not allowed: ${id}`);
          continue;
        }
        domElement.dispatchEvent(new Event("resetform"));
      }
      if (this.enableScripting) {
        this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
          source: this,
          detail: {
            id: "app",
            ids: allIds,
            name: "ResetForm"
          }
        });
      }
      return false;
    };
  }
}
class TextAnnotationElement extends AnnotationElement {
  constructor(parameters) {
    super(parameters, {
      isRenderable: true
    });
  }
  render() {
    this.container.classList.add("textAnnotation");
    const image = document.createElement("img");
    image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg";
    image.alt = "[{{type}} Annotation]";
    image.dataset.l10nId = "text_annotation_type";
    image.dataset.l10nArgs = JSON.stringify({
      type: this.data.name
    });
    if (!this.data.popupRef && this.hasPopupData) {
      this._createPopup();
    }
    this.container.append(image);
    return this.container;
  }
}
class WidgetAnnotationElement extends AnnotationElement {
  render() {
    if (this.data.alternativeText) {
      this.container.title = this.data.alternativeText;
    }
    return this.container;
  }
  showElementAndHideCanvas(element) {
    if (this.data.hasOwnCanvas) {
      if (element.previousSibling?.nodeName === "CANVAS") {
        element.previousSibling.hidden = true;
      }
      element.hidden = false;
    }
  }
  _getKeyModifier(event) {
    const {
      isWin,
      isMac
    } = _util.FeatureTest.platform;
    return isWin && event.ctrlKey || isMac && event.metaKey;
  }
  _setEventListener(element, elementData, baseName, eventName, valueGetter) {
    if (baseName.includes("mouse")) {
      element.addEventListener(baseName, event => {
        this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
          source: this,
          detail: {
            id: this.data.id,
            name: eventName,
            value: valueGetter(event),
            shift: event.shiftKey,
            modifier: this._getKeyModifier(event)
          }
        });
      });
    } else {
      element.addEventListener(baseName, event => {
        if (baseName === "blur") {
          if (!elementData.focused || !event.relatedTarget) {
            return;
          }
          elementData.focused = false;
        } else if (baseName === "focus") {
          if (elementData.focused) {
            return;
          }
          elementData.focused = true;
        }
        if (!valueGetter) {
          return;
        }
        this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
          source: this,
          detail: {
            id: this.data.id,
            name: eventName,
            value: valueGetter(event)
          }
        });
      });
    }
  }
  _setEventListeners(element, elementData, names, getter) {
    for (const [baseName, eventName] of names) {
      if (eventName === "Action" || this.data.actions?.[eventName]) {
        if (eventName === "Focus" || eventName === "Blur") {
          elementData ||= {
            focused: false
          };
        }
        this._setEventListener(element, elementData, baseName, eventName, getter);
        if (eventName === "Focus" && !this.data.actions?.Blur) {
          this._setEventListener(element, elementData, "blur", "Blur", null);
        } else if (eventName === "Blur" && !this.data.actions?.Focus) {
          this._setEventListener(element, elementData, "focus", "Focus", null);
        }
      }
    }
  }
  _setBackgroundColor(element) {
    const color = this.data.backgroundColor || null;
    element.style.backgroundColor = color === null ? "transparent" : _util.Util.makeHexColor(color[0], color[1], color[2]);
  }
  _setTextStyle(element) {
    const TEXT_ALIGNMENT = ["left", "center", "right"];
    const {
      fontColor
    } = this.data.defaultAppearanceData;
    const fontSize = this.data.defaultAppearanceData.fontSize || DEFAULT_FONT_SIZE;
    const style = element.style;
    let computedFontSize;
    const BORDER_SIZE = 2;
    const roundToOneDecimal = x => Math.round(10 * x) / 10;
    if (this.data.multiLine) {
      const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE);
      const numberOfLines = Math.round(height / (_util.LINE_FACTOR * fontSize)) || 1;
      const lineHeight = height / numberOfLines;
      computedFontSize = Math.min(fontSize, roundToOneDecimal(lineHeight / _util.LINE_FACTOR));
    } else {
      const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE);
      computedFontSize = Math.min(fontSize, roundToOneDecimal(height / _util.LINE_FACTOR));
    }
    style.fontSize = `calc(${computedFontSize}px * var(--scale-factor))`;
    style.color = _util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]);
    if (this.data.textAlignment !== null) {
      style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];
    }
  }
  _setRequired(element, isRequired) {
    if (isRequired) {
      element.setAttribute("required", true);
    } else {
      element.removeAttribute("required");
    }
    element.setAttribute("aria-required", isRequired);
  }
}
class TextWidgetAnnotationElement extends WidgetAnnotationElement {
  constructor(parameters) {
    const isRenderable = parameters.renderForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue;
    super(parameters, {
      isRenderable
    });
  }
  setPropertyOnSiblings(base, key, value, keyInStorage) {
    const storage = this.annotationStorage;
    for (const element of this._getElementsByName(base.name, base.id)) {
      if (element.domElement) {
        element.domElement[key] = value;
      }
      storage.setValue(element.id, {
        [keyInStorage]: value
      });
    }
  }
  render() {
    const storage = this.annotationStorage;
    const id = this.data.id;
    this.container.classList.add("textWidgetAnnotation");
    let element = null;
    if (this.renderForms) {
      const storedData = storage.getValue(id, {
        value: this.data.fieldValue
      });
      let textContent = storedData.value || "";
      const maxLen = storage.getValue(id, {
        charLimit: this.data.maxLen
      }).charLimit;
      if (maxLen && textContent.length > maxLen) {
        textContent = textContent.slice(0, maxLen);
      }
      let fieldFormattedValues = storedData.formattedValue || this.data.textContent?.join("\n") || null;
      if (fieldFormattedValues && this.data.comb) {
        fieldFormattedValues = fieldFormattedValues.replaceAll(/\s+/g, "");
      }
      const elementData = {
        userValue: textContent,
        formattedValue: fieldFormattedValues,
        lastCommittedValue: null,
        commitKey: 1,
        focused: false
      };
      if (this.data.multiLine) {
        element = document.createElement("textarea");
        element.textContent = fieldFormattedValues ?? textContent;
        if (this.data.doNotScroll) {
          element.style.overflowY = "hidden";
        }
      } else {
        element = document.createElement("input");
        element.type = "text";
        element.setAttribute("value", fieldFormattedValues ?? textContent);
        if (this.data.doNotScroll) {
          element.style.overflowX = "hidden";
        }
      }
      if (this.data.hasOwnCanvas) {
        element.hidden = true;
      }
      GetElementsByNameSet.add(element);
      element.setAttribute("data-element-id", id);
      element.disabled = this.data.readOnly;
      element.name = this.data.fieldName;
      element.tabIndex = DEFAULT_TAB_INDEX;
      this._setRequired(element, this.data.required);
      if (maxLen) {
        element.maxLength = maxLen;
      }
      element.addEventListener("input", event => {
        storage.setValue(id, {
          value: event.target.value
        });
        this.setPropertyOnSiblings(element, "value", event.target.value, "value");
        elementData.formattedValue = null;
      });
      element.addEventListener("resetform", event => {
        const defaultValue = this.data.defaultFieldValue ?? "";
        element.value = elementData.userValue = defaultValue;
        elementData.formattedValue = null;
      });
      let blurListener = event => {
        const {
          formattedValue
        } = elementData;
        if (formattedValue !== null && formattedValue !== undefined) {
          event.target.value = formattedValue;
        }
        event.target.scrollLeft = 0;
      };
      if (this.enableScripting && this.hasJSActions) {
        element.addEventListener("focus", event => {
          if (elementData.focused) {
            return;
          }
          const {
            target
          } = event;
          if (elementData.userValue) {
            target.value = elementData.userValue;
          }
          elementData.lastCommittedValue = target.value;
          elementData.commitKey = 1;
          elementData.focused = true;
        });
        element.addEventListener("updatefromsandbox", jsEvent => {
          this.showElementAndHideCanvas(jsEvent.target);
          const actions = {
            value(event) {
              elementData.userValue = event.detail.value ?? "";
              storage.setValue(id, {
                value: elementData.userValue.toString()
              });
              event.target.value = elementData.userValue;
            },
            formattedValue(event) {
              const {
                formattedValue
              } = event.detail;
              elementData.formattedValue = formattedValue;
              if (formattedValue !== null && formattedValue !== undefined && event.target !== document.activeElement) {
                event.target.value = formattedValue;
              }
              storage.setValue(id, {
                formattedValue
              });
            },
            selRange(event) {
              event.target.setSelectionRange(...event.detail.selRange);
            },
            charLimit: event => {
              const {
                charLimit
              } = event.detail;
              const {
                target
              } = event;
              if (charLimit === 0) {
                target.removeAttribute("maxLength");
                return;
              }
              target.setAttribute("maxLength", charLimit);
              let value = elementData.userValue;
              if (!value || value.length <= charLimit) {
                return;
              }
              value = value.slice(0, charLimit);
              target.value = elementData.userValue = value;
              storage.setValue(id, {
                value
              });
              this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
                source: this,
                detail: {
                  id,
                  name: "Keystroke",
                  value,
                  willCommit: true,
                  commitKey: 1,
                  selStart: target.selectionStart,
                  selEnd: target.selectionEnd
                }
              });
            }
          };
          this._dispatchEventFromSandbox(actions, jsEvent);
        });
        element.addEventListener("keydown", event => {
          elementData.commitKey = 1;
          let commitKey = -1;
          if (event.key === "Escape") {
            commitKey = 0;
          } else if (event.key === "Enter" && !this.data.multiLine) {
            commitKey = 2;
          } else if (event.key === "Tab") {
            elementData.commitKey = 3;
          }
          if (commitKey === -1) {
            return;
          }
          const {
            value
          } = event.target;
          if (elementData.lastCommittedValue === value) {
            return;
          }
          elementData.lastCommittedValue = value;
          elementData.userValue = value;
          this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
            source: this,
            detail: {
              id,
              name: "Keystroke",
              value,
              willCommit: true,
              commitKey,
              selStart: event.target.selectionStart,
              selEnd: event.target.selectionEnd
            }
          });
        });
        const _blurListener = blurListener;
        blurListener = null;
        element.addEventListener("blur", event => {
          if (!elementData.focused || !event.relatedTarget) {
            return;
          }
          elementData.focused = false;
          const {
            value
          } = event.target;
          elementData.userValue = value;
          if (elementData.lastCommittedValue !== value) {
            this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
              source: this,
              detail: {
                id,
                name: "Keystroke",
                value,
                willCommit: true,
                commitKey: elementData.commitKey,
                selStart: event.target.selectionStart,
                selEnd: event.target.selectionEnd
              }
            });
          }
          _blurListener(event);
        });
        if (this.data.actions?.Keystroke) {
          element.addEventListener("beforeinput", event => {
            elementData.lastCommittedValue = null;
            const {
              data,
              target
            } = event;
            const {
              value,
              selectionStart,
              selectionEnd
            } = target;
            let selStart = selectionStart,
              selEnd = selectionEnd;
            switch (event.inputType) {
              case "deleteWordBackward":
                {
                  const match = value.substring(0, selectionStart).match(/\w*[^\w]*$/);
                  if (match) {
                    selStart -= match[0].length;
                  }
                  break;
                }
              case "deleteWordForward":
                {
                  const match = value.substring(selectionStart).match(/^[^\w]*\w*/);
                  if (match) {
                    selEnd += match[0].length;
                  }
                  break;
                }
              case "deleteContentBackward":
                if (selectionStart === selectionEnd) {
                  selStart -= 1;
                }
                break;
              case "deleteContentForward":
                if (selectionStart === selectionEnd) {
                  selEnd += 1;
                }
                break;
            }
            event.preventDefault();
            this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
              source: this,
              detail: {
                id,
                name: "Keystroke",
                value,
                change: data || "",
                willCommit: false,
                selStart,
                selEnd
              }
            });
          });
        }
        this._setEventListeners(element, elementData, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.value);
      }
      if (blurListener) {
        element.addEventListener("blur", blurListener);
      }
      if (this.data.comb) {
        const fieldWidth = this.data.rect[2] - this.data.rect[0];
        const combWidth = fieldWidth / maxLen;
        element.classList.add("comb");
        element.style.letterSpacing = `calc(${combWidth}px * var(--scale-factor) - 1ch)`;
      }
    } else {
      element = document.createElement("div");
      element.textContent = this.data.fieldValue;
      element.style.verticalAlign = "middle";
      element.style.display = "table-cell";
    }
    this._setTextStyle(element);
    this._setBackgroundColor(element);
    this._setDefaultPropertiesFromJS(element);
    this.container.append(element);
    return this.container;
  }
}
class SignatureWidgetAnnotationElement extends WidgetAnnotationElement {
  constructor(parameters) {
    super(parameters, {
      isRenderable: !!parameters.data.hasOwnCanvas
    });
  }
}
class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {
  constructor(parameters) {
    super(parameters, {
      isRenderable: parameters.renderForms
    });
  }
  render() {
    const storage = this.annotationStorage;
    const data = this.data;
    const id = data.id;
    let value = storage.getValue(id, {
      value: data.exportValue === data.fieldValue
    }).value;
    if (typeof value === "string") {
      value = value !== "Off";
      storage.setValue(id, {
        value
      });
    }
    this.container.classList.add("buttonWidgetAnnotation", "checkBox");
    const element = document.createElement("input");
    GetElementsByNameSet.add(element);
    element.setAttribute("data-element-id", id);
    element.disabled = data.readOnly;
    this._setRequired(element, this.data.required);
    element.type = "checkbox";
    element.name = data.fieldName;
    if (value) {
      element.setAttribute("checked", true);
    }
    element.setAttribute("exportValue", data.exportValue);
    element.tabIndex = DEFAULT_TAB_INDEX;
    element.addEventListener("change", event => {
      const {
        name,
        checked
      } = event.target;
      for (const checkbox of this._getElementsByName(name, id)) {
        const curChecked = checked && checkbox.exportValue === data.exportValue;
        if (checkbox.domElement) {
          checkbox.domElement.checked = curChecked;
        }
        storage.setValue(checkbox.id, {
          value: curChecked
        });
      }
      storage.setValue(id, {
        value: checked
      });
    });
    element.addEventListener("resetform", event => {
      const defaultValue = data.defaultFieldValue || "Off";
      event.target.checked = defaultValue === data.exportValue;
    });
    if (this.enableScripting && this.hasJSActions) {
      element.addEventListener("updatefromsandbox", jsEvent => {
        const actions = {
          value(event) {
            event.target.checked = event.detail.value !== "Off";
            storage.setValue(id, {
              value: event.target.checked
            });
          }
        };
        this._dispatchEventFromSandbox(actions, jsEvent);
      });
      this._setEventListeners(element, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked);
    }
    this._setBackgroundColor(element);
    this._setDefaultPropertiesFromJS(element);
    this.container.append(element);
    return this.container;
  }
}
class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {
  constructor(parameters) {
    super(parameters, {
      isRenderable: parameters.renderForms
    });
  }
  render() {
    this.container.classList.add("buttonWidgetAnnotation", "radioButton");
    const storage = this.annotationStorage;
    const data = this.data;
    const id = data.id;
    let value = storage.getValue(id, {
      value: data.fieldValue === data.buttonValue
    }).value;
    if (typeof value === "string") {
      value = value !== data.buttonValue;
      storage.setValue(id, {
        value
      });
    }
    const element = document.createElement("input");
    GetElementsByNameSet.add(element);
    element.setAttribute("data-element-id", id);
    element.disabled = data.readOnly;
    this._setRequired(element, this.data.required);
    element.type = "radio";
    element.name = data.fieldName;
    if (value) {
      element.setAttribute("checked", true);
    }
    element.tabIndex = DEFAULT_TAB_INDEX;
    element.addEventListener("change", event => {
      const {
        name,
        checked
      } = event.target;
      for (const radio of this._getElementsByName(name, id)) {
        storage.setValue(radio.id, {
          value: false
        });
      }
      storage.setValue(id, {
        value: checked
      });
    });
    element.addEventListener("resetform", event => {
      const defaultValue = data.defaultFieldValue;
      event.target.checked = defaultValue !== null && defaultValue !== undefined && defaultValue === data.buttonValue;
    });
    if (this.enableScripting && this.hasJSActions) {
      const pdfButtonValue = data.buttonValue;
      element.addEventListener("updatefromsandbox", jsEvent => {
        const actions = {
          value: event => {
            const checked = pdfButtonValue === event.detail.value;
            for (const radio of this._getElementsByName(event.target.name)) {
              const curChecked = checked && radio.id === id;
              if (radio.domElement) {
                radio.domElement.checked = curChecked;
              }
              storage.setValue(radio.id, {
                value: curChecked
              });
            }
          }
        };
        this._dispatchEventFromSandbox(actions, jsEvent);
      });
      this._setEventListeners(element, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked);
    }
    this._setBackgroundColor(element);
    this._setDefaultPropertiesFromJS(element);
    this.container.append(element);
    return this.container;
  }
}
class PushButtonWidgetAnnotationElement extends LinkAnnotationElement {
  constructor(parameters) {
    super(parameters, {
      ignoreBorder: parameters.data.hasAppearance
    });
  }
  render() {
    const container = super.render();
    container.classList.add("buttonWidgetAnnotation", "pushButton");
    if (this.data.alternativeText) {
      container.title = this.data.alternativeText;
    }
    const linkElement = container.lastChild;
    if (this.enableScripting && this.hasJSActions && linkElement) {
      this._setDefaultPropertiesFromJS(linkElement);
      linkElement.addEventListener("updatefromsandbox", jsEvent => {
        this._dispatchEventFromSandbox({}, jsEvent);
      });
    }
    return container;
  }
}
class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
  constructor(parameters) {
    super(parameters, {
      isRenderable: parameters.renderForms
    });
  }
  render() {
    this.container.classList.add("choiceWidgetAnnotation");
    const storage = this.annotationStorage;
    const id = this.data.id;
    const storedData = storage.getValue(id, {
      value: this.data.fieldValue
    });
    const selectElement = document.createElement("select");
    GetElementsByNameSet.add(selectElement);
    selectElement.setAttribute("data-element-id", id);
    selectElement.disabled = this.data.readOnly;
    this._setRequired(selectElement, this.data.required);
    selectElement.name = this.data.fieldName;
    selectElement.tabIndex = DEFAULT_TAB_INDEX;
    let addAnEmptyEntry = this.data.combo && this.data.options.length > 0;
    if (!this.data.combo) {
      selectElement.size = this.data.options.length;
      if (this.data.multiSelect) {
        selectElement.multiple = true;
      }
    }
    selectElement.addEventListener("resetform", event => {
      const defaultValue = this.data.defaultFieldValue;
      for (const option of selectElement.options) {
        option.selected = option.value === defaultValue;
      }
    });
    for (const option of this.data.options) {
      const optionElement = document.createElement("option");
      optionElement.textContent = option.displayValue;
      optionElement.value = option.exportValue;
      if (storedData.value.includes(option.exportValue)) {
        optionElement.setAttribute("selected", true);
        addAnEmptyEntry = false;
      }
      selectElement.append(optionElement);
    }
    let removeEmptyEntry = null;
    if (addAnEmptyEntry) {
      const noneOptionElement = document.createElement("option");
      noneOptionElement.value = " ";
      noneOptionElement.setAttribute("hidden", true);
      noneOptionElement.setAttribute("selected", true);
      selectElement.prepend(noneOptionElement);
      removeEmptyEntry = () => {
        noneOptionElement.remove();
        selectElement.removeEventListener("input", removeEmptyEntry);
        removeEmptyEntry = null;
      };
      selectElement.addEventListener("input", removeEmptyEntry);
    }
    const getValue = isExport => {
      const name = isExport ? "value" : "textContent";
      const {
        options,
        multiple
      } = selectElement;
      if (!multiple) {
        return options.selectedIndex === -1 ? null : options[options.selectedIndex][name];
      }
      return Array.prototype.filter.call(options, option => option.selected).map(option => option[name]);
    };
    let selectedValues = getValue(false);
    const getItems = event => {
      const options = event.target.options;
      return Array.prototype.map.call(options, option => {
        return {
          displayValue: option.textContent,
          exportValue: option.value
        };
      });
    };
    if (this.enableScripting && this.hasJSActions) {
      selectElement.addEventListener("updatefromsandbox", jsEvent => {
        const actions = {
          value(event) {
            removeEmptyEntry?.();
            const value = event.detail.value;
            const values = new Set(Array.isArray(value) ? value : [value]);
            for (const option of selectElement.options) {
              option.selected = values.has(option.value);
            }
            storage.setValue(id, {
              value: getValue(true)
            });
            selectedValues = getValue(false);
          },
          multipleSelection(event) {
            selectElement.multiple = true;
          },
          remove(event) {
            const options = selectElement.options;
            const index = event.detail.remove;
            options[index].selected = false;
            selectElement.remove(index);
            if (options.length > 0) {
              const i = Array.prototype.findIndex.call(options, option => option.selected);
              if (i === -1) {
                options[0].selected = true;
              }
            }
            storage.setValue(id, {
              value: getValue(true),
              items: getItems(event)
            });
            selectedValues = getValue(false);
          },
          clear(event) {
            while (selectElement.length !== 0) {
              selectElement.remove(0);
            }
            storage.setValue(id, {
              value: null,
              items: []
            });
            selectedValues = getValue(false);
          },
          insert(event) {
            const {
              index,
              displayValue,
              exportValue
            } = event.detail.insert;
            const selectChild = selectElement.children[index];
            const optionElement = document.createElement("option");
            optionElement.textContent = displayValue;
            optionElement.value = exportValue;
            if (selectChild) {
              selectChild.before(optionElement);
            } else {
              selectElement.append(optionElement);
            }
            storage.setValue(id, {
              value: getValue(true),
              items: getItems(event)
            });
            selectedValues = getValue(false);
          },
          items(event) {
            const {
              items
            } = event.detail;
            while (selectElement.length !== 0) {
              selectElement.remove(0);
            }
            for (const item of items) {
              const {
                displayValue,
                exportValue
              } = item;
              const optionElement = document.createElement("option");
              optionElement.textContent = displayValue;
              optionElement.value = exportValue;
              selectElement.append(optionElement);
            }
            if (selectElement.options.length > 0) {
              selectElement.options[0].selected = true;
            }
            storage.setValue(id, {
              value: getValue(true),
              items: getItems(event)
            });
            selectedValues = getValue(false);
          },
          indices(event) {
            const indices = new Set(event.detail.indices);
            for (const option of event.target.options) {
              option.selected = indices.has(option.index);
            }
            storage.setValue(id, {
              value: getValue(true)
            });
            selectedValues = getValue(false);
          },
          editable(event) {
            event.target.disabled = !event.detail.editable;
          }
        };
        this._dispatchEventFromSandbox(actions, jsEvent);
      });
      selectElement.addEventListener("input", event => {
        const exportValue = getValue(true);
        storage.setValue(id, {
          value: exportValue
        });
        event.preventDefault();
        this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
          source: this,
          detail: {
            id,
            name: "Keystroke",
            value: selectedValues,
            changeEx: exportValue,
            willCommit: false,
            commitKey: 1,
            keyDown: false
          }
        });
      });
      this._setEventListeners(selectElement, null, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"], ["input", "Validate"]], event => event.target.value);
    } else {
      selectElement.addEventListener("input", function (event) {
        storage.setValue(id, {
          value: getValue(true)
        });
      });
    }
    if (this.data.combo) {
      this._setTextStyle(selectElement);
    } else {}
    this._setBackgroundColor(selectElement);
    this._setDefaultPropertiesFromJS(selectElement);
    this.container.append(selectElement);
    return this.container;
  }
}
class PopupAnnotationElement extends AnnotationElement {
  constructor(parameters) {
    const {
      data,
      elements
    } = parameters;
    super(parameters, {
      isRenderable: AnnotationElement._hasPopupData(data)
    });
    this.elements = elements;
  }
  render() {
    this.container.classList.add("popupAnnotation");
    const popup = new PopupElement({
      container: this.container,
      color: this.data.color,
      titleObj: this.data.titleObj,
      modificationDate: this.data.modificationDate,
      contentsObj: this.data.contentsObj,
      richText: this.data.richText,
      rect: this.data.rect,
      parentRect: this.data.parentRect || null,
      parent: this.parent,
      elements: this.elements,
      open: this.data.open
    });
    const elementIds = [];
    for (const element of this.elements) {
      element.popup = popup;
      elementIds.push(element.data.id);
      element.addHighlightArea();
    }
    this.container.setAttribute("aria-controls", elementIds.map(id => `${_util.AnnotationPrefix}${id}`).join(","));
    return this.container;
  }
}
class PopupElement {
  #dateTimePromise = null;
  #boundKeyDown = this.#keyDown.bind(this);
  #boundHide = this.#hide.bind(this);
  #boundShow = this.#show.bind(this);
  #boundToggle = this.#toggle.bind(this);
  #color = null;
  #container = null;
  #contentsObj = null;
  #elements = null;
  #parent = null;
  #parentRect = null;
  #pinned = false;
  #popup = null;
  #rect = null;
  #richText = null;
  #titleObj = null;
  #wasVisible = false;
  constructor({
    container,
    color,
    elements,
    titleObj,
    modificationDate,
    contentsObj,
    richText,
    parent,
    rect,
    parentRect,
    open
  }) {
    this.#container = container;
    this.#titleObj = titleObj;
    this.#contentsObj = contentsObj;
    this.#richText = richText;
    this.#parent = parent;
    this.#color = color;
    this.#rect = rect;
    this.#parentRect = parentRect;
    this.#elements = elements;
    const dateObject = _display_utils.PDFDateString.toDateObject(modificationDate);
    if (dateObject) {
      this.#dateTimePromise = parent.l10n.get("annotation_date_string", {
        date: dateObject.toLocaleDateString(),
        time: dateObject.toLocaleTimeString()
      });
    }
    this.trigger = elements.flatMap(e => e.getElementsToTriggerPopup());
    for (const element of this.trigger) {
      element.addEventListener("click", this.#boundToggle);
      element.addEventListener("mouseenter", this.#boundShow);
      element.addEventListener("mouseleave", this.#boundHide);
      element.classList.add("popupTriggerArea");
    }
    for (const element of elements) {
      element.container?.addEventListener("keydown", this.#boundKeyDown);
    }
    this.#container.hidden = true;
    if (open) {
      this.#toggle();
    }
  }
  render() {
    if (this.#popup) {
      return;
    }
    const {
      page: {
        view
      },
      viewport: {
        rawDims: {
          pageWidth,
          pageHeight,
          pageX,
          pageY
        }
      }
    } = this.#parent;
    const popup = this.#popup = document.createElement("div");
    popup.className = "popup";
    if (this.#color) {
      const baseColor = popup.style.outlineColor = _util.Util.makeHexColor(...this.#color);
      if (CSS.supports("background-color", "color-mix(in srgb, red 30%, white)")) {
        popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`;
      } else {
        const BACKGROUND_ENLIGHT = 0.7;
        popup.style.backgroundColor = _util.Util.makeHexColor(...this.#color.map(c => Math.floor(BACKGROUND_ENLIGHT * (255 - c) + c)));
      }
    }
    const header = document.createElement("span");
    header.className = "header";
    const title = document.createElement("h1");
    header.append(title);
    ({
      dir: title.dir,
      str: title.textContent
    } = this.#titleObj);
    popup.append(header);
    if (this.#dateTimePromise) {
      const modificationDate = document.createElement("span");
      modificationDate.classList.add("popupDate");
      this.#dateTimePromise.then(localized => {
        modificationDate.textContent = localized;
      });
      header.append(modificationDate);
    }
    const contentsObj = this.#contentsObj;
    const richText = this.#richText;
    if (richText?.str && (!contentsObj?.str || contentsObj.str === richText.str)) {
      _xfa_layer.XfaLayer.render({
        xfaHtml: richText.html,
        intent: "richText",
        div: popup
      });
      popup.lastChild.classList.add("richText", "popupContent");
    } else {
      const contents = this._formatContents(contentsObj);
      popup.append(contents);
    }
    let useParentRect = !!this.#parentRect;
    let rect = useParentRect ? this.#parentRect : this.#rect;
    for (const element of this.#elements) {
      if (!rect || _util.Util.intersect(element.data.rect, rect) !== null) {
        rect = element.data.rect;
        useParentRect = true;
        break;
      }
    }
    const normalizedRect = _util.Util.normalizeRect([rect[0], view[3] - rect[1] + view[1], rect[2], view[3] - rect[3] + view[1]]);
    const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5;
    const parentWidth = useParentRect ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION : 0;
    const popupLeft = normalizedRect[0] + parentWidth;
    const popupTop = normalizedRect[1];
    const {
      style
    } = this.#container;
    style.left = `${100 * (popupLeft - pageX) / pageWidth}%`;
    style.top = `${100 * (popupTop - pageY) / pageHeight}%`;
    this.#container.append(popup);
  }
  _formatContents({
    str,
    dir
  }) {
    const p = document.createElement("p");
    p.classList.add("popupContent");
    p.dir = dir;
    const lines = str.split(/(?:\r\n?|\n)/);
    for (let i = 0, ii = lines.length; i < ii; ++i) {
      const line = lines[i];
      p.append(document.createTextNode(line));
      if (i < ii - 1) {
        p.append(document.createElement("br"));
      }
    }
    return p;
  }
  #keyDown(event) {
    if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) {
      return;
    }
    if (event.key === "Enter" || event.key === "Escape" && this.#pinned) {
      this.#toggle();
    }
  }
  #toggle() {
    this.#pinned = !this.#pinned;
    if (this.#pinned) {
      this.#show();
      this.#container.addEventListener("click", this.#boundToggle);
      this.#container.addEventListener("keydown", this.#boundKeyDown);
    } else {
      this.#hide();
      this.#container.removeEventListener("click", this.#boundToggle);
      this.#container.removeEventListener("keydown", this.#boundKeyDown);
    }
  }
  #show() {
    if (!this.#popup) {
      this.render();
    }
    if (!this.isVisible) {
      this.#container.hidden = false;
      this.#container.style.zIndex = parseInt(this.#container.style.zIndex) + 1000;
    } else if (this.#pinned) {
      this.#container.classList.add("focused");
    }
  }
  #hide() {
    this.#container.classList.remove("focused");
    if (this.#pinned || !this.isVisible) {
      return;
    }
    this.#container.hidden = true;
    this.#container.style.zIndex = parseInt(this.#container.style.zIndex) - 1000;
  }
  forceHide() {
    this.#wasVisible = this.isVisible;
    if (!this.#wasVisible) {
      return;
    }
    this.#container.hidden = true;
  }
  maybeShow() {
    if (!this.#wasVisible) {
      return;
    }
    this.#wasVisible = false;
    this.#container.hidden = false;
  }
  get isVisible() {
    return this.#container.hidden === false;
  }
}
class FreeTextAnnotationElement extends AnnotationElement {
  constructor(parameters) {
    super(parameters, {
      isRenderable: true,
      ignoreBorder: true
    });
    this.textContent = parameters.data.textContent;
    this.textPosition = parameters.data.textPosition;
    this.annotationEditorType = _util.AnnotationEditorType.FREETEXT;
  }
  render() {
    this.container.classList.add("freeTextAnnotation");
    if (this.textContent) {
      const content = document.createElement("div");
      content.classList.add("annotationTextContent");
      content.setAttribute("role", "comment");
      for (const line of this.textContent) {
        const lineSpan = document.createElement("span");
        lineSpan.textContent = line;
        content.append(lineSpan);
      }
      this.container.append(content);
    }
    if (!this.data.popupRef && this.hasPopupData) {
      this._createPopup();
    }
    this._editOnDoubleClick();
    return this.container;
  }
}
exports.FreeTextAnnotationElement = FreeTextAnnotationElement;
class LineAnnotationElement extends AnnotationElement {
  #line = null;
  constructor(parameters) {
    super(parameters, {
      isRenderable: true,
      ignoreBorder: true
    });
  }
  render() {
    this.container.classList.add("lineAnnotation");
    const data = this.data;
    const {
      width,
      height
    } = getRectDims(data.rect);
    const svg = this.svgFactory.create(width, height, true);
    const line = this.#line = this.svgFactory.createElement("svg:line");
    line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]);
    line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]);
    line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]);
    line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]);
    line.setAttribute("stroke-width", data.borderStyle.width || 1);
    line.setAttribute("stroke", "transparent");
    line.setAttribute("fill", "transparent");
    svg.append(line);
    this.container.append(svg);
    if (!data.popupRef && this.hasPopupData) {
      this._createPopup();
    }
    return this.container;
  }
  getElementsToTriggerPopup() {
    return this.#line;
  }
  addHighlightArea() {
    this.container.classList.add("highlightArea");
  }
}
class SquareAnnotationElement extends AnnotationElement {
  #square = null;
  constructor(parameters) {
    super(parameters, {
      isRenderable: true,
      ignoreBorder: true
    });
  }
  render() {
    this.container.classList.add("squareAnnotation");
    const data = this.data;
    const {
      width,
      height
    } = getRectDims(data.rect);
    const svg = this.svgFactory.create(width, height, true);
    const borderWidth = data.borderStyle.width;
    const square = this.#square = this.svgFactory.createElement("svg:rect");
    square.setAttribute("x", borderWidth / 2);
    square.setAttribute("y", borderWidth / 2);
    square.setAttribute("width", width - borderWidth);
    square.setAttribute("height", height - borderWidth);
    square.setAttribute("stroke-width", borderWidth || 1);
    square.setAttribute("stroke", "transparent");
    square.setAttribute("fill", "transparent");
    svg.append(square);
    this.container.append(svg);
    if (!data.popupRef && this.hasPopupData) {
      this._createPopup();
    }
    return this.container;
  }
  getElementsToTriggerPopup() {
    return this.#square;
  }
  addHighlightArea() {
    this.container.classList.add("highlightArea");
  }
}
class CircleAnnotationElement extends AnnotationElement {
  #circle = null;
  constructor(parameters) {
    super(parameters, {
      isRenderable: true,
      ignoreBorder: true
    });
  }
  render() {
    this.container.classList.add("circleAnnotation");
    const data = this.data;
    const {
      width,
      height
    } = getRectDims(data.rect);
    const svg = this.svgFactory.create(width, height, true);
    const borderWidth = data.borderStyle.width;
    const circle = this.#circle = this.svgFactory.createElement("svg:ellipse");
    circle.setAttribute("cx", width / 2);
    circle.setAttribute("cy", height / 2);
    circle.setAttribute("rx", width / 2 - borderWidth / 2);
    circle.setAttribute("ry", height / 2 - borderWidth / 2);
    circle.setAttribute("stroke-width", borderWidth || 1);
    circle.setAttribute("stroke", "transparent");
    circle.setAttribute("fill", "transparent");
    svg.append(circle);
    this.container.append(svg);
    if (!data.popupRef && this.hasPopupData) {
      this._createPopup();
    }
    return this.container;
  }
  getElementsToTriggerPopup() {
    return this.#circle;
  }
  addHighlightArea() {
    this.container.classList.add("highlightArea");
  }
}
class PolylineAnnotationElement extends AnnotationElement {
  #polyline = null;
  constructor(parameters) {
    super(parameters, {
      isRenderable: true,
      ignoreBorder: true
    });
    this.containerClassName = "polylineAnnotation";
    this.svgElementName = "svg:polyline";
  }
  render() {
    this.container.classList.add(this.containerClassName);
    const data = this.data;
    const {
      width,
      height
    } = getRectDims(data.rect);
    const svg = this.svgFactory.create(width, height, true);
    let points = [];
    for (const coordinate of data.vertices) {
      const x = coordinate.x - data.rect[0];
      const y = data.rect[3] - coordinate.y;
      points.push(x + "," + y);
    }
    points = points.join(" ");
    const polyline = this.#polyline = this.svgFactory.createElement(this.svgElementName);
    polyline.setAttribute("points", points);
    polyline.setAttribute("stroke-width", data.borderStyle.width || 1);
    polyline.setAttribute("stroke", "transparent");
    polyline.setAttribute("fill", "transparent");
    svg.append(polyline);
    this.container.append(svg);
    if (!data.popupRef && this.hasPopupData) {
      this._createPopup();
    }
    return this.container;
  }
  getElementsToTriggerPopup() {
    return this.#polyline;
  }
  addHighlightArea() {
    this.container.classList.add("highlightArea");
  }
}
class PolygonAnnotationElement extends PolylineAnnotationElement {
  constructor(parameters) {
    super(parameters);
    this.containerClassName = "polygonAnnotation";
    this.svgElementName = "svg:polygon";
  }
}
class CaretAnnotationElement extends AnnotationElement {
  constructor(parameters) {
    super(parameters, {
      isRenderable: true,
      ignoreBorder: true
    });
  }
  render() {
    this.container.classList.add("caretAnnotation");
    if (!this.data.popupRef && this.hasPopupData) {
      this._createPopup();
    }
    return this.container;
  }
}
class InkAnnotationElement extends AnnotationElement {
  #polylines = [];
  constructor(parameters) {
    super(parameters, {
      isRenderable: true,
      ignoreBorder: true
    });
    this.containerClassName = "inkAnnotation";
    this.svgElementName = "svg:polyline";
    this.annotationEditorType = _util.AnnotationEditorType.INK;
  }
  render() {
    this.container.classList.add(this.containerClassName);
    const data = this.data;
    const {
      width,
      height
    } = getRectDims(data.rect);
    const svg = this.svgFactory.create(width, height, true);
    for (const inkList of data.inkLists) {
      let points = [];
      for (const coordinate of inkList) {
        const x = coordinate.x - data.rect[0];
        const y = data.rect[3] - coordinate.y;
        points.push(`${x},${y}`);
      }
      points = points.join(" ");
      const polyline = this.svgFactory.createElement(this.svgElementName);
      this.#polylines.push(polyline);
      polyline.setAttribute("points", points);
      polyline.setAttribute("stroke-width", data.borderStyle.width || 1);
      polyline.setAttribute("stroke", "transparent");
      polyline.setAttribute("fill", "transparent");
      if (!data.popupRef && this.hasPopupData) {
        this._createPopup();
      }
      svg.append(polyline);
    }
    this.container.append(svg);
    return this.container;
  }
  getElementsToTriggerPopup() {
    return this.#polylines;
  }
  addHighlightArea() {
    this.container.classList.add("highlightArea");
  }
}
exports.InkAnnotationElement = InkAnnotationElement;
class HighlightAnnotationElement extends AnnotationElement {
  constructor(parameters) {
    super(parameters, {
      isRenderable: true,
      ignoreBorder: true,
      createQuadrilaterals: true
    });
  }
  render() {
    if (!this.data.popupRef && this.hasPopupData) {
      this._createPopup();
    }
    this.container.classList.add("highlightAnnotation");
    return this.container;
  }
}
class UnderlineAnnotationElement extends AnnotationElement {
  constructor(parameters) {
    super(parameters, {
      isRenderable: true,
      ignoreBorder: true,
      createQuadrilaterals: true
    });
  }
  render() {
    if (!this.data.popupRef && this.hasPopupData) {
      this._createPopup();
    }
    this.container.classList.add("underlineAnnotation");
    return this.container;
  }
}
class SquigglyAnnotationElement extends AnnotationElement {
  constructor(parameters) {
    super(parameters, {
      isRenderable: true,
      ignoreBorder: true,
      createQuadrilaterals: true
    });
  }
  render() {
    if (!this.data.popupRef && this.hasPopupData) {
      this._createPopup();
    }
    this.container.classList.add("squigglyAnnotation");
    return this.container;
  }
}
class StrikeOutAnnotationElement extends AnnotationElement {
  constructor(parameters) {
    super(parameters, {
      isRenderable: true,
      ignoreBorder: true,
      createQuadrilaterals: true
    });
  }
  render() {
    if (!this.data.popupRef && this.hasPopupData) {
      this._createPopup();
    }
    this.container.classList.add("strikeoutAnnotation");
    return this.container;
  }
}
class StampAnnotationElement extends AnnotationElement {
  constructor(parameters) {
    super(parameters, {
      isRenderable: true,
      ignoreBorder: true
    });
  }
  render() {
    this.container.classList.add("stampAnnotation");
    if (!this.data.popupRef && this.hasPopupData) {
      this._createPopup();
    }
    return this.container;
  }
}
exports.StampAnnotationElement = StampAnnotationElement;
class FileAttachmentAnnotationElement extends AnnotationElement {
  #trigger = null;
  constructor(parameters) {
    super(parameters, {
      isRenderable: true
    });
    const {
      filename,
      content
    } = this.data.file;
    this.filename = (0, _display_utils.getFilenameFromUrl)(filename, true);
    this.content = content;
    this.linkService.eventBus?.dispatch("fileattachmentannotation", {
      source: this,
      filename,
      content
    });
  }
  render() {
    this.container.classList.add("fileAttachmentAnnotation");
    const {
      container,
      data
    } = this;
    let trigger;
    if (data.hasAppearance || data.fillAlpha === 0) {
      trigger = document.createElement("div");
    } else {
      trigger = document.createElement("img");
      trigger.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(data.name) ? "paperclip" : "pushpin"}.svg`;
      if (data.fillAlpha && data.fillAlpha < 1) {
        trigger.style = `filter: opacity(${Math.round(data.fillAlpha * 100)}%);`;
      }
    }
    trigger.addEventListener("dblclick", this.#download.bind(this));
    this.#trigger = trigger;
    const {
      isMac
    } = _util.FeatureTest.platform;
    container.addEventListener("keydown", evt => {
      if (evt.key === "Enter" && (isMac ? evt.metaKey : evt.ctrlKey)) {
        this.#download();
      }
    });
    if (!data.popupRef && this.hasPopupData) {
      this._createPopup();
    } else {
      trigger.classList.add("popupTriggerArea");
    }
    container.append(trigger);
    return container;
  }
  getElementsToTriggerPopup() {
    return this.#trigger;
  }
  addHighlightArea() {
    this.container.classList.add("highlightArea");
  }
  #download() {
    this.downloadManager?.openOrDownloadData(this.container, this.content, this.filename);
  }
}
class AnnotationLayer {
  #accessibilityManager = null;
  #annotationCanvasMap = null;
  #editableAnnotations = new Map();
  constructor({
    div,
    accessibilityManager,
    annotationCanvasMap,
    l10n,
    page,
    viewport
  }) {
    this.div = div;
    this.#accessibilityManager = accessibilityManager;
    this.#annotationCanvasMap = annotationCanvasMap;
    this.l10n = l10n;
    this.page = page;
    this.viewport = viewport;
    this.zIndex = 0;
    this.l10n ||= _displayL10n_utils.NullL10n;
  }
  #appendElement(element, id) {
    const contentElement = element.firstChild || element;
    contentElement.id = `${_util.AnnotationPrefix}${id}`;
    this.div.append(element);
    this.#accessibilityManager?.moveElementInDOM(this.div, element, contentElement, false);
  }
  async render(params) {
    const {
      annotations
    } = params;
    const layer = this.div;
    (0, _display_utils.setLayerDimensions)(layer, this.viewport);
    const popupToElements = new Map();
    const elementParams = {
      data: null,
      layer,
      linkService: params.linkService,
      downloadManager: params.downloadManager,
      imageResourcesPath: params.imageResourcesPath || "",
      renderForms: params.renderForms !== false,
      svgFactory: new _display_utils.DOMSVGFactory(),
      annotationStorage: params.annotationStorage || new _annotation_storage.AnnotationStorage(),
      enableScripting: params.enableScripting === true,
      hasJSActions: params.hasJSActions,
      fieldObjects: params.fieldObjects,
      parent: this,
      elements: null
    };
    for (const data of annotations) {
      if (data.noHTML) {
        continue;
      }
      const isPopupAnnotation = data.annotationType === _util.AnnotationType.POPUP;
      if (!isPopupAnnotation) {
        const {
          width,
          height
        } = getRectDims(data.rect);
        if (width <= 0 || height <= 0) {
          continue;
        }
      } else {
        const elements = popupToElements.get(data.id);
        if (!elements) {
          continue;
        }
        elementParams.elements = elements;
      }
      elementParams.data = data;
      const element = AnnotationElementFactory.create(elementParams);
      if (!element.isRenderable) {
        continue;
      }
      if (!isPopupAnnotation && data.popupRef) {
        const elements = popupToElements.get(data.popupRef);
        if (!elements) {
          popupToElements.set(data.popupRef, [element]);
        } else {
          elements.push(element);
        }
      }
      if (element.annotationEditorType > 0) {
        this.#editableAnnotations.set(element.data.id, element);
      }
      const rendered = element.render();
      if (data.hidden) {
        rendered.style.visibility = "hidden";
      }
      this.#appendElement(rendered, data.id);
    }
    this.#setAnnotationCanvasMap();
    await this.l10n.translate(layer);
  }
  update({
    viewport
  }) {
    const layer = this.div;
    this.viewport = viewport;
    (0, _display_utils.setLayerDimensions)(layer, {
      rotation: viewport.rotation
    });
    this.#setAnnotationCanvasMap();
    layer.hidden = false;
  }
  #setAnnotationCanvasMap() {
    if (!this.#annotationCanvasMap) {
      return;
    }
    const layer = this.div;
    for (const [id, canvas] of this.#annotationCanvasMap) {
      const element = layer.querySelector(`[data-annotation-id="${id}"]`);
      if (!element) {
        continue;
      }
      const {
        firstChild
      } = element;
      if (!firstChild) {
        element.append(canvas);
      } else if (firstChild.nodeName === "CANVAS") {
        firstChild.replaceWith(canvas);
      } else {
        firstChild.before(canvas);
      }
    }
    this.#annotationCanvasMap.clear();
  }
  getEditableAnnotations() {
    return Array.from(this.#editableAnnotations.values());
  }
  getEditableAnnotation(id) {
    return this.#editableAnnotations.get(id);
  }
}
exports.AnnotationLayer = AnnotationLayer;

/***/ }),
/* 30 */
/***/ ((__unused_webpack_module, exports) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.ColorConverters = void 0;
function makeColorComp(n) {
  return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0");
}
function scaleAndClamp(x) {
  return Math.max(0, Math.min(255, 255 * x));
}
class ColorConverters {
  static CMYK_G([c, y, m, k]) {
    return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)];
  }
  static G_CMYK([g]) {
    return ["CMYK", 0, 0, 0, 1 - g];
  }
  static G_RGB([g]) {
    return ["RGB", g, g, g];
  }
  static G_rgb([g]) {
    g = scaleAndClamp(g);
    return [g, g, g];
  }
  static G_HTML([g]) {
    const G = makeColorComp(g);
    return `#${G}${G}${G}`;
  }
  static RGB_G([r, g, b]) {
    return ["G", 0.3 * r + 0.59 * g + 0.11 * b];
  }
  static RGB_rgb(color) {
    return color.map(scaleAndClamp);
  }
  static RGB_HTML(color) {
    return `#${color.map(makeColorComp).join("")}`;
  }
  static T_HTML() {
    return "#00000000";
  }
  static T_rgb() {
    return [null];
  }
  static CMYK_RGB([c, y, m, k]) {
    return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)];
  }
  static CMYK_rgb([c, y, m, k]) {
    return [scaleAndClamp(1 - Math.min(1, c + k)), scaleAndClamp(1 - Math.min(1, m + k)), scaleAndClamp(1 - Math.min(1, y + k))];
  }
  static CMYK_HTML(components) {
    const rgb = this.CMYK_RGB(components).slice(1);
    return this.RGB_HTML(rgb);
  }
  static RGB_CMYK([r, g, b]) {
    const c = 1 - r;
    const m = 1 - g;
    const y = 1 - b;
    const k = Math.min(c, m, y);
    return ["CMYK", c, m, y, k];
  }
}
exports.ColorConverters = ColorConverters;

/***/ }),
/* 31 */
/***/ ((__unused_webpack_module, exports) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.NullL10n = void 0;
exports.getL10nFallback = getL10nFallback;
const DEFAULT_L10N_STRINGS = {
  of_pages: "of {{pagesCount}}",
  page_of_pages: "({{pageNumber}} of {{pagesCount}})",
  document_properties_kb: "{{size_kb}} KB ({{size_b}} bytes)",
  document_properties_mb: "{{size_mb}} MB ({{size_b}} bytes)",
  document_properties_date_string: "{{date}}, {{time}}",
  document_properties_page_size_unit_inches: "in",
  document_properties_page_size_unit_millimeters: "mm",
  document_properties_page_size_orientation_portrait: "portrait",
  document_properties_page_size_orientation_landscape: "landscape",
  document_properties_page_size_name_a3: "A3",
  document_properties_page_size_name_a4: "A4",
  document_properties_page_size_name_letter: "Letter",
  document_properties_page_size_name_legal: "Legal",
  document_properties_page_size_dimension_string: "{{width}} × {{height}} {{unit}} ({{orientation}})",
  document_properties_page_size_dimension_name_string: "{{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})",
  document_properties_linearized_yes: "Yes",
  document_properties_linearized_no: "No",
  additional_layers: "Additional Layers",
  page_landmark: "Page {{page}}",
  thumb_page_title: "Page {{page}}",
  thumb_page_canvas: "Thumbnail of Page {{page}}",
  find_reached_top: "Reached top of document, continued from bottom",
  find_reached_bottom: "Reached end of document, continued from top",
  "find_match_count[one]": "{{current}} of {{total}} match",
  "find_match_count[other]": "{{current}} of {{total}} matches",
  "find_match_count_limit[one]": "More than {{limit}} match",
  "find_match_count_limit[other]": "More than {{limit}} matches",
  find_not_found: "Phrase not found",
  page_scale_width: "Page Width",
  page_scale_fit: "Page Fit",
  page_scale_auto: "Automatic Zoom",
  page_scale_actual: "Actual Size",
  page_scale_percent: "{{scale}}%",
  loading_error: "An error occurred while loading the PDF.",
  invalid_file_error: "Invalid or corrupted PDF file.",
  missing_file_error: "Missing PDF file.",
  unexpected_response_error: "Unexpected server response.",
  rendering_error: "An error occurred while rendering the page.",
  annotation_date_string: "{{date}}, {{time}}",
  printing_not_supported: "Warning: Printing is not fully supported by this browser.",
  printing_not_ready: "Warning: The PDF is not fully loaded for printing.",
  web_fonts_disabled: "Web fonts are disabled: unable to use embedded PDF fonts.",
  free_text2_default_content: "Start typing…",
  editor_free_text2_aria_label: "Text Editor",
  editor_ink2_aria_label: "Draw Editor",
  editor_ink_canvas_aria_label: "User-created image",
  editor_alt_text_button_label: "Alt text",
  editor_alt_text_edit_button_label: "Edit alt text",
  editor_alt_text_decorative_tooltip: "Marked as decorative"
};
{
  DEFAULT_L10N_STRINGS.print_progress_percent = "{{progress}}%";
}
function getL10nFallback(key, args) {
  switch (key) {
    case "find_match_count":
      key = `find_match_count[${args.total === 1 ? "one" : "other"}]`;
      break;
    case "find_match_count_limit":
      key = `find_match_count_limit[${args.limit === 1 ? "one" : "other"}]`;
      break;
  }
  return DEFAULT_L10N_STRINGS[key] || "";
}
function formatL10nValue(text, args) {
  if (!args) {
    return text;
  }
  return text.replaceAll(/\{\{\s*(\w+)\s*\}\}/g, (all, name) => {
    return name in args ? args[name] : "{{" + name + "}}";
  });
}
const NullL10n = {
  async getLanguage() {
    return "en-us";
  },
  async getDirection() {
    return "ltr";
  },
  async get(key, args = null, fallback = getL10nFallback(key, args)) {
    return formatL10nValue(fallback, args);
  },
  async translate(element) {}
};
exports.NullL10n = NullL10n;

/***/ }),
/* 32 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.XfaLayer = void 0;
var _xfa_text = __w_pdfjs_require__(25);
class XfaLayer {
  static setupStorage(html, id, element, storage, intent) {
    const storedData = storage.getValue(id, {
      value: null
    });
    switch (element.name) {
      case "textarea":
        if (storedData.value !== null) {
          html.textContent = storedData.value;
        }
        if (intent === "print") {
          break;
        }
        html.addEventListener("input", event => {
          storage.setValue(id, {
            value: event.target.value
          });
        });
        break;
      case "input":
        if (element.attributes.type === "radio" || element.attributes.type === "checkbox") {
          if (storedData.value === element.attributes.xfaOn) {
            html.setAttribute("checked", true);
          } else if (storedData.value === element.attributes.xfaOff) {
            html.removeAttribute("checked");
          }
          if (intent === "print") {
            break;
          }
          html.addEventListener("change", event => {
            storage.setValue(id, {
              value: event.target.checked ? event.target.getAttribute("xfaOn") : event.target.getAttribute("xfaOff")
            });
          });
        } else {
          if (storedData.value !== null) {
            html.setAttribute("value", storedData.value);
          }
          if (intent === "print") {
            break;
          }
          html.addEventListener("input", event => {
            storage.setValue(id, {
              value: event.target.value
            });
          });
        }
        break;
      case "select":
        if (storedData.value !== null) {
          html.setAttribute("value", storedData.value);
          for (const option of element.children) {
            if (option.attributes.value === storedData.value) {
              option.attributes.selected = true;
            } else if (option.attributes.hasOwnProperty("selected")) {
              delete option.attributes.selected;
            }
          }
        }
        html.addEventListener("input", event => {
          const options = event.target.options;
          const value = options.selectedIndex === -1 ? "" : options[options.selectedIndex].value;
          storage.setValue(id, {
            value
          });
        });
        break;
    }
  }
  static setAttributes({
    html,
    element,
    storage = null,
    intent,
    linkService
  }) {
    const {
      attributes
    } = element;
    const isHTMLAnchorElement = html instanceof HTMLAnchorElement;
    if (attributes.type === "radio") {
      attributes.name = `${attributes.name}-${intent}`;
    }
    for (const [key, value] of Object.entries(attributes)) {
      if (value === null || value === undefined) {
        continue;
      }
      switch (key) {
        case "class":
          if (value.length) {
            html.setAttribute(key, value.join(" "));
          }
          break;
        case "dataId":
          break;
        case "id":
          html.setAttribute("data-element-id", value);
          break;
        case "style":
          Object.assign(html.style, value);
          break;
        case "textContent":
          html.textContent = value;
          break;
        default:
          if (!isHTMLAnchorElement || key !== "href" && key !== "newWindow") {
            html.setAttribute(key, value);
          }
      }
    }
    if (isHTMLAnchorElement) {
      linkService.addLinkAttributes(html, attributes.href, attributes.newWindow);
    }
    if (storage && attributes.dataId) {
      this.setupStorage(html, attributes.dataId, element, storage);
    }
  }
  static render(parameters) {
    const storage = parameters.annotationStorage;
    const linkService = parameters.linkService;
    const root = parameters.xfaHtml;
    const intent = parameters.intent || "display";
    const rootHtml = document.createElement(root.name);
    if (root.attributes) {
      this.setAttributes({
        html: rootHtml,
        element: root,
        intent,
        linkService
      });
    }
    const stack = [[root, -1, rootHtml]];
    const rootDiv = parameters.div;
    rootDiv.append(rootHtml);
    if (parameters.viewport) {
      const transform = `matrix(${parameters.viewport.transform.join(",")})`;
      rootDiv.style.transform = transform;
    }
    if (intent !== "richText") {
      rootDiv.setAttribute("class", "xfaLayer xfaFont");
    }
    const textDivs = [];
    while (stack.length > 0) {
      const [parent, i, html] = stack.at(-1);
      if (i + 1 === parent.children.length) {
        stack.pop();
        continue;
      }
      const child = parent.children[++stack.at(-1)[1]];
      if (child === null) {
        continue;
      }
      const {
        name
      } = child;
      if (name === "#text") {
        const node = document.createTextNode(child.value);
        textDivs.push(node);
        html.append(node);
        continue;
      }
      const childHtml = child?.attributes?.xmlns ? document.createElementNS(child.attributes.xmlns, name) : document.createElement(name);
      html.append(childHtml);
      if (child.attributes) {
        this.setAttributes({
          html: childHtml,
          element: child,
          storage,
          intent,
          linkService
        });
      }
      if (child.children && child.children.length > 0) {
        stack.push([child, -1, childHtml]);
      } else if (child.value) {
        const node = document.createTextNode(child.value);
        if (_xfa_text.XfaText.shouldBuildText(name)) {
          textDivs.push(node);
        }
        childHtml.append(node);
      }
    }
    for (const el of rootDiv.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea")) {
      el.setAttribute("readOnly", true);
    }
    return {
      textDivs
    };
  }
  static update(parameters) {
    const transform = `matrix(${parameters.viewport.transform.join(",")})`;
    parameters.div.style.transform = transform;
    parameters.div.hidden = false;
  }
}
exports.XfaLayer = XfaLayer;

/***/ }),
/* 33 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.InkEditor = void 0;
var _util = __w_pdfjs_require__(1);
var _editor = __w_pdfjs_require__(4);
var _annotation_layer = __w_pdfjs_require__(29);
var _display_utils = __w_pdfjs_require__(6);
var _tools = __w_pdfjs_require__(5);
class InkEditor extends _editor.AnnotationEditor {
  #baseHeight = 0;
  #baseWidth = 0;
  #boundCanvasPointermove = this.canvasPointermove.bind(this);
  #boundCanvasPointerleave = this.canvasPointerleave.bind(this);
  #boundCanvasPointerup = this.canvasPointerup.bind(this);
  #boundCanvasPointerdown = this.canvasPointerdown.bind(this);
  #currentPath2D = new Path2D();
  #disableEditing = false;
  #hasSomethingToDraw = false;
  #isCanvasInitialized = false;
  #observer = null;
  #realWidth = 0;
  #realHeight = 0;
  #requestFrameCallback = null;
  static _defaultColor = null;
  static _defaultOpacity = 1;
  static _defaultThickness = 1;
  static _type = "ink";
  constructor(params) {
    super({
      ...params,
      name: "inkEditor"
    });
    this.color = params.color || null;
    this.thickness = params.thickness || null;
    this.opacity = params.opacity || null;
    this.paths = [];
    this.bezierPath2D = [];
    this.allRawPaths = [];
    this.currentPath = [];
    this.scaleFactor = 1;
    this.translationX = this.translationY = 0;
    this.x = 0;
    this.y = 0;
    this._willKeepAspectRatio = true;
  }
  static initialize(l10n) {
    _editor.AnnotationEditor.initialize(l10n, {
      strings: ["editor_ink_canvas_aria_label", "editor_ink2_aria_label"]
    });
  }
  static updateDefaultParams(type, value) {
    switch (type) {
      case _util.AnnotationEditorParamsType.INK_THICKNESS:
        InkEditor._defaultThickness = value;
        break;
      case _util.AnnotationEditorParamsType.INK_COLOR:
        InkEditor._defaultColor = value;
        break;
      case _util.AnnotationEditorParamsType.INK_OPACITY:
        InkEditor._defaultOpacity = value / 100;
        break;
    }
  }
  updateParams(type, value) {
    switch (type) {
      case _util.AnnotationEditorParamsType.INK_THICKNESS:
        this.#updateThickness(value);
        break;
      case _util.AnnotationEditorParamsType.INK_COLOR:
        this.#updateColor(value);
        break;
      case _util.AnnotationEditorParamsType.INK_OPACITY:
        this.#updateOpacity(value);
        break;
    }
  }
  static get defaultPropertiesToUpdate() {
    return [[_util.AnnotationEditorParamsType.INK_THICKNESS, InkEditor._defaultThickness], [_util.AnnotationEditorParamsType.INK_COLOR, InkEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor], [_util.AnnotationEditorParamsType.INK_OPACITY, Math.round(InkEditor._defaultOpacity * 100)]];
  }
  get propertiesToUpdate() {
    return [[_util.AnnotationEditorParamsType.INK_THICKNESS, this.thickness || InkEditor._defaultThickness], [_util.AnnotationEditorParamsType.INK_COLOR, this.color || InkEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor], [_util.AnnotationEditorParamsType.INK_OPACITY, Math.round(100 * (this.opacity ?? InkEditor._defaultOpacity))]];
  }
  #updateThickness(thickness) {
    const savedThickness = this.thickness;
    this.addCommands({
      cmd: () => {
        this.thickness = thickness;
        this.#fitToContent();
      },
      undo: () => {
        this.thickness = savedThickness;
        this.#fitToContent();
      },
      mustExec: true,
      type: _util.AnnotationEditorParamsType.INK_THICKNESS,
      overwriteIfSameType: true,
      keepUndo: true
    });
  }
  #updateColor(color) {
    const savedColor = this.color;
    this.addCommands({
      cmd: () => {
        this.color = color;
        this.#redraw();
      },
      undo: () => {
        this.color = savedColor;
        this.#redraw();
      },
      mustExec: true,
      type: _util.AnnotationEditorParamsType.INK_COLOR,
      overwriteIfSameType: true,
      keepUndo: true
    });
  }
  #updateOpacity(opacity) {
    opacity /= 100;
    const savedOpacity = this.opacity;
    this.addCommands({
      cmd: () => {
        this.opacity = opacity;
        this.#redraw();
      },
      undo: () => {
        this.opacity = savedOpacity;
        this.#redraw();
      },
      mustExec: true,
      type: _util.AnnotationEditorParamsType.INK_OPACITY,
      overwriteIfSameType: true,
      keepUndo: true
    });
  }
  rebuild() {
    if (!this.parent) {
      return;
    }
    super.rebuild();
    if (this.div === null) {
      return;
    }
    if (!this.canvas) {
      this.#createCanvas();
      this.#createObserver();
    }
    if (!this.isAttachedToDOM) {
      this.parent.add(this);
      this.#setCanvasDims();
    }
    this.#fitToContent();
  }
  remove() {
    if (this.canvas === null) {
      return;
    }
    if (!this.isEmpty()) {
      this.commit();
    }
    this.canvas.width = this.canvas.height = 0;
    this.canvas.remove();
    this.canvas = null;
    this.#observer.disconnect();
    this.#observer = null;
    super.remove();
  }
  setParent(parent) {
    if (!this.parent && parent) {
      this._uiManager.removeShouldRescale(this);
    } else if (this.parent && parent === null) {
      this._uiManager.addShouldRescale(this);
    }
    super.setParent(parent);
  }
  onScaleChanging() {
    const [parentWidth, parentHeight] = this.parentDimensions;
    const width = this.width * parentWidth;
    const height = this.height * parentHeight;
    this.setDimensions(width, height);
  }
  enableEditMode() {
    if (this.#disableEditing || this.canvas === null) {
      return;
    }
    super.enableEditMode();
    this._isDraggable = false;
    this.canvas.addEventListener("pointerdown", this.#boundCanvasPointerdown);
  }
  disableEditMode() {
    if (!this.isInEditMode() || this.canvas === null) {
      return;
    }
    super.disableEditMode();
    this._isDraggable = !this.isEmpty();
    this.div.classList.remove("editing");
    this.canvas.removeEventListener("pointerdown", this.#boundCanvasPointerdown);
  }
  onceAdded() {
    this._isDraggable = !this.isEmpty();
  }
  isEmpty() {
    return this.paths.length === 0 || this.paths.length === 1 && this.paths[0].length === 0;
  }
  #getInitialBBox() {
    const {
      parentRotation,
      parentDimensions: [width, height]
    } = this;
    switch (parentRotation) {
      case 90:
        return [0, height, height, width];
      case 180:
        return [width, height, width, height];
      case 270:
        return [width, 0, height, width];
      default:
        return [0, 0, width, height];
    }
  }
  #setStroke() {
    const {
      ctx,
      color,
      opacity,
      thickness,
      parentScale,
      scaleFactor
    } = this;
    ctx.lineWidth = thickness * parentScale / scaleFactor;
    ctx.lineCap = "round";
    ctx.lineJoin = "round";
    ctx.miterLimit = 10;
    ctx.strokeStyle = `${color}${(0, _tools.opacityToHex)(opacity)}`;
  }
  #startDrawing(x, y) {
    this.canvas.addEventListener("contextmenu", _display_utils.noContextMenu);
    this.canvas.addEventListener("pointerleave", this.#boundCanvasPointerleave);
    this.canvas.addEventListener("pointermove", this.#boundCanvasPointermove);
    this.canvas.addEventListener("pointerup", this.#boundCanvasPointerup);
    this.canvas.removeEventListener("pointerdown", this.#boundCanvasPointerdown);
    this.isEditing = true;
    if (!this.#isCanvasInitialized) {
      this.#isCanvasInitialized = true;
      this.#setCanvasDims();
      this.thickness ||= InkEditor._defaultThickness;
      this.color ||= InkEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor;
      this.opacity ??= InkEditor._defaultOpacity;
    }
    this.currentPath.push([x, y]);
    this.#hasSomethingToDraw = false;
    this.#setStroke();
    this.#requestFrameCallback = () => {
      this.#drawPoints();
      if (this.#requestFrameCallback) {
        window.requestAnimationFrame(this.#requestFrameCallback);
      }
    };
    window.requestAnimationFrame(this.#requestFrameCallback);
  }
  #draw(x, y) {
    const [lastX, lastY] = this.currentPath.at(-1);
    if (this.currentPath.length > 1 && x === lastX && y === lastY) {
      return;
    }
    const currentPath = this.currentPath;
    let path2D = this.#currentPath2D;
    currentPath.push([x, y]);
    this.#hasSomethingToDraw = true;
    if (currentPath.length <= 2) {
      path2D.moveTo(...currentPath[0]);
      path2D.lineTo(x, y);
      return;
    }
    if (currentPath.length === 3) {
      this.#currentPath2D = path2D = new Path2D();
      path2D.moveTo(...currentPath[0]);
    }
    this.#makeBezierCurve(path2D, ...currentPath.at(-3), ...currentPath.at(-2), x, y);
  }
  #endPath() {
    if (this.currentPath.length === 0) {
      return;
    }
    const lastPoint = this.currentPath.at(-1);
    this.#currentPath2D.lineTo(...lastPoint);
  }
  #stopDrawing(x, y) {
    this.#requestFrameCallback = null;
    x = Math.min(Math.max(x, 0), this.canvas.width);
    y = Math.min(Math.max(y, 0), this.canvas.height);
    this.#draw(x, y);
    this.#endPath();
    let bezier;
    if (this.currentPath.length !== 1) {
      bezier = this.#generateBezierPoints();
    } else {
      const xy = [x, y];
      bezier = [[xy, xy.slice(), xy.slice(), xy]];
    }
    const path2D = this.#currentPath2D;
    const currentPath = this.currentPath;
    this.currentPath = [];
    this.#currentPath2D = new Path2D();
    const cmd = () => {
      this.allRawPaths.push(currentPath);
      this.paths.push(bezier);
      this.bezierPath2D.push(path2D);
      this.rebuild();
    };
    const undo = () => {
      this.allRawPaths.pop();
      this.paths.pop();
      this.bezierPath2D.pop();
      if (this.paths.length === 0) {
        this.remove();
      } else {
        if (!this.canvas) {
          this.#createCanvas();
          this.#createObserver();
        }
        this.#fitToContent();
      }
    };
    this.addCommands({
      cmd,
      undo,
      mustExec: true
    });
  }
  #drawPoints() {
    if (!this.#hasSomethingToDraw) {
      return;
    }
    this.#hasSomethingToDraw = false;
    const thickness = Math.ceil(this.thickness * this.parentScale);
    const lastPoints = this.currentPath.slice(-3);
    const x = lastPoints.map(xy => xy[0]);
    const y = lastPoints.map(xy => xy[1]);
    const xMin = Math.min(...x) - thickness;
    const xMax = Math.max(...x) + thickness;
    const yMin = Math.min(...y) - thickness;
    const yMax = Math.max(...y) + thickness;
    const {
      ctx
    } = this;
    ctx.save();
    ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
    for (const path of this.bezierPath2D) {
      ctx.stroke(path);
    }
    ctx.stroke(this.#currentPath2D);
    ctx.restore();
  }
  #makeBezierCurve(path2D, x0, y0, x1, y1, x2, y2) {
    const prevX = (x0 + x1) / 2;
    const prevY = (y0 + y1) / 2;
    const x3 = (x1 + x2) / 2;
    const y3 = (y1 + y2) / 2;
    path2D.bezierCurveTo(prevX + 2 * (x1 - prevX) / 3, prevY + 2 * (y1 - prevY) / 3, x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3, x3, y3);
  }
  #generateBezierPoints() {
    const path = this.currentPath;
    if (path.length <= 2) {
      return [[path[0], path[0], path.at(-1), path.at(-1)]];
    }
    const bezierPoints = [];
    let i;
    let [x0, y0] = path[0];
    for (i = 1; i < path.length - 2; i++) {
      const [x1, y1] = path[i];
      const [x2, y2] = path[i + 1];
      const x3 = (x1 + x2) / 2;
      const y3 = (y1 + y2) / 2;
      const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3];
      const control2 = [x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3];
      bezierPoints.push([[x0, y0], control1, control2, [x3, y3]]);
      [x0, y0] = [x3, y3];
    }
    const [x1, y1] = path[i];
    const [x2, y2] = path[i + 1];
    const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3];
    const control2 = [x2 + 2 * (x1 - x2) / 3, y2 + 2 * (y1 - y2) / 3];
    bezierPoints.push([[x0, y0], control1, control2, [x2, y2]]);
    return bezierPoints;
  }
  #redraw() {
    if (this.isEmpty()) {
      this.#updateTransform();
      return;
    }
    this.#setStroke();
    const {
      canvas,
      ctx
    } = this;
    ctx.setTransform(1, 0, 0, 1, 0, 0);
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    this.#updateTransform();
    for (const path of this.bezierPath2D) {
      ctx.stroke(path);
    }
  }
  commit() {
    if (this.#disableEditing) {
      return;
    }
    super.commit();
    this.isEditing = false;
    this.disableEditMode();
    this.setInForeground();
    this.#disableEditing = true;
    this.div.classList.add("disabled");
    this.#fitToContent(true);
    this.makeResizable();
    this.parent.addInkEditorIfNeeded(true);
    this.moveInDOM();
    this.div.focus({
      preventScroll: true
    });
  }
  focusin(event) {
    if (!this._focusEventsAllowed) {
      return;
    }
    super.focusin(event);
    this.enableEditMode();
  }
  canvasPointerdown(event) {
    if (event.button !== 0 || !this.isInEditMode() || this.#disableEditing) {
      return;
    }
    this.setInForeground();
    event.preventDefault();
    if (event.type !== "mouse") {
      this.div.focus();
    }
    this.#startDrawing(event.offsetX, event.offsetY);
  }
  canvasPointermove(event) {
    event.preventDefault();
    this.#draw(event.offsetX, event.offsetY);
  }
  canvasPointerup(event) {
    event.preventDefault();
    this.#endDrawing(event);
  }
  canvasPointerleave(event) {
    this.#endDrawing(event);
  }
  #endDrawing(event) {
    this.canvas.removeEventListener("pointerleave", this.#boundCanvasPointerleave);
    this.canvas.removeEventListener("pointermove", this.#boundCanvasPointermove);
    this.canvas.removeEventListener("pointerup", this.#boundCanvasPointerup);
    this.canvas.addEventListener("pointerdown", this.#boundCanvasPointerdown);
    setTimeout(() => {
      this.canvas.removeEventListener("contextmenu", _display_utils.noContextMenu);
    }, 10);
    this.#stopDrawing(event.offsetX, event.offsetY);
    this.addToAnnotationStorage();
    this.setInBackground();
  }
  #createCanvas() {
    this.canvas = document.createElement("canvas");
    this.canvas.width = this.canvas.height = 0;
    this.canvas.className = "inkEditorCanvas";
    _editor.AnnotationEditor._l10nPromise.get("editor_ink_canvas_aria_label").then(msg => this.canvas?.setAttribute("aria-label", msg));
    this.div.append(this.canvas);
    this.ctx = this.canvas.getContext("2d");
  }
  #createObserver() {
    this.#observer = new ResizeObserver(entries => {
      const rect = entries[0].contentRect;
      if (rect.width && rect.height) {
        this.setDimensions(rect.width, rect.height);
      }
    });
    this.#observer.observe(this.div);
  }
  get isResizable() {
    return !this.isEmpty() && this.#disableEditing;
  }
  render() {
    if (this.div) {
      return this.div;
    }
    let baseX, baseY;
    if (this.width) {
      baseX = this.x;
      baseY = this.y;
    }
    super.render();
    _editor.AnnotationEditor._l10nPromise.get("editor_ink2_aria_label").then(msg => this.div?.setAttribute("aria-label", msg));
    const [x, y, w, h] = this.#getInitialBBox();
    this.setAt(x, y, 0, 0);
    this.setDims(w, h);
    this.#createCanvas();
    if (this.width) {
      const [parentWidth, parentHeight] = this.parentDimensions;
      this.setAspectRatio(this.width * parentWidth, this.height * parentHeight);
      this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight);
      this.#isCanvasInitialized = true;
      this.#setCanvasDims();
      this.setDims(this.width * parentWidth, this.height * parentHeight);
      this.#redraw();
      this.div.classList.add("disabled");
    } else {
      this.div.classList.add("editing");
      this.enableEditMode();
    }
    this.#createObserver();
    return this.div;
  }
  #setCanvasDims() {
    if (!this.#isCanvasInitialized) {
      return;
    }
    const [parentWidth, parentHeight] = this.parentDimensions;
    this.canvas.width = Math.ceil(this.width * parentWidth);
    this.canvas.height = Math.ceil(this.height * parentHeight);
    this.#updateTransform();
  }
  setDimensions(width, height) {
    const roundedWidth = Math.round(width);
    const roundedHeight = Math.round(height);
    if (this.#realWidth === roundedWidth && this.#realHeight === roundedHeight) {
      return;
    }
    this.#realWidth = roundedWidth;
    this.#realHeight = roundedHeight;
    this.canvas.style.visibility = "hidden";
    const [parentWidth, parentHeight] = this.parentDimensions;
    this.width = width / parentWidth;
    this.height = height / parentHeight;
    this.fixAndSetPosition();
    if (this.#disableEditing) {
      this.#setScaleFactor(width, height);
    }
    this.#setCanvasDims();
    this.#redraw();
    this.canvas.style.visibility = "visible";
    this.fixDims();
  }
  #setScaleFactor(width, height) {
    const padding = this.#getPadding();
    const scaleFactorW = (width - padding) / this.#baseWidth;
    const scaleFactorH = (height - padding) / this.#baseHeight;
    this.scaleFactor = Math.min(scaleFactorW, scaleFactorH);
  }
  #updateTransform() {
    const padding = this.#getPadding() / 2;
    this.ctx.setTransform(this.scaleFactor, 0, 0, this.scaleFactor, this.translationX * this.scaleFactor + padding, this.translationY * this.scaleFactor + padding);
  }
  static #buildPath2D(bezier) {
    const path2D = new Path2D();
    for (let i = 0, ii = bezier.length; i < ii; i++) {
      const [first, control1, control2, second] = bezier[i];
      if (i === 0) {
        path2D.moveTo(...first);
      }
      path2D.bezierCurveTo(control1[0], control1[1], control2[0], control2[1], second[0], second[1]);
    }
    return path2D;
  }
  static #toPDFCoordinates(points, rect, rotation) {
    const [blX, blY, trX, trY] = rect;
    switch (rotation) {
      case 0:
        for (let i = 0, ii = points.length; i < ii; i += 2) {
          points[i] += blX;
          points[i + 1] = trY - points[i + 1];
        }
        break;
      case 90:
        for (let i = 0, ii = points.length; i < ii; i += 2) {
          const x = points[i];
          points[i] = points[i + 1] + blX;
          points[i + 1] = x + blY;
        }
        break;
      case 180:
        for (let i = 0, ii = points.length; i < ii; i += 2) {
          points[i] = trX - points[i];
          points[i + 1] += blY;
        }
        break;
      case 270:
        for (let i = 0, ii = points.length; i < ii; i += 2) {
          const x = points[i];
          points[i] = trX - points[i + 1];
          points[i + 1] = trY - x;
        }
        break;
      default:
        throw new Error("Invalid rotation");
    }
    return points;
  }
  static #fromPDFCoordinates(points, rect, rotation) {
    const [blX, blY, trX, trY] = rect;
    switch (rotation) {
      case 0:
        for (let i = 0, ii = points.length; i < ii; i += 2) {
          points[i] -= blX;
          points[i + 1] = trY - points[i + 1];
        }
        break;
      case 90:
        for (let i = 0, ii = points.length; i < ii; i += 2) {
          const x = points[i];
          points[i] = points[i + 1] - blY;
          points[i + 1] = x - blX;
        }
        break;
      case 180:
        for (let i = 0, ii = points.length; i < ii; i += 2) {
          points[i] = trX - points[i];
          points[i + 1] -= blY;
        }
        break;
      case 270:
        for (let i = 0, ii = points.length; i < ii; i += 2) {
          const x = points[i];
          points[i] = trY - points[i + 1];
          points[i + 1] = trX - x;
        }
        break;
      default:
        throw new Error("Invalid rotation");
    }
    return points;
  }
  #serializePaths(s, tx, ty, rect) {
    const paths = [];
    const padding = this.thickness / 2;
    const shiftX = s * tx + padding;
    const shiftY = s * ty + padding;
    for (const bezier of this.paths) {
      const buffer = [];
      const points = [];
      for (let j = 0, jj = bezier.length; j < jj; j++) {
        const [first, control1, control2, second] = bezier[j];
        const p10 = s * first[0] + shiftX;
        const p11 = s * first[1] + shiftY;
        const p20 = s * control1[0] + shiftX;
        const p21 = s * control1[1] + shiftY;
        const p30 = s * control2[0] + shiftX;
        const p31 = s * control2[1] + shiftY;
        const p40 = s * second[0] + shiftX;
        const p41 = s * second[1] + shiftY;
        if (j === 0) {
          buffer.push(p10, p11);
          points.push(p10, p11);
        }
        buffer.push(p20, p21, p30, p31, p40, p41);
        points.push(p20, p21);
        if (j === jj - 1) {
          points.push(p40, p41);
        }
      }
      paths.push({
        bezier: InkEditor.#toPDFCoordinates(buffer, rect, this.rotation),
        points: InkEditor.#toPDFCoordinates(points, rect, this.rotation)
      });
    }
    return paths;
  }
  #getBbox() {
    let xMin = Infinity;
    let xMax = -Infinity;
    let yMin = Infinity;
    let yMax = -Infinity;
    for (const path of this.paths) {
      for (const [first, control1, control2, second] of path) {
        const bbox = _util.Util.bezierBoundingBox(...first, ...control1, ...control2, ...second);
        xMin = Math.min(xMin, bbox[0]);
        yMin = Math.min(yMin, bbox[1]);
        xMax = Math.max(xMax, bbox[2]);
        yMax = Math.max(yMax, bbox[3]);
      }
    }
    return [xMin, yMin, xMax, yMax];
  }
  #getPadding() {
    return this.#disableEditing ? Math.ceil(this.thickness * this.parentScale) : 0;
  }
  #fitToContent(firstTime = false) {
    if (this.isEmpty()) {
      return;
    }
    if (!this.#disableEditing) {
      this.#redraw();
      return;
    }
    const bbox = this.#getBbox();
    const padding = this.#getPadding();
    this.#baseWidth = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]);
    this.#baseHeight = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]);
    const width = Math.ceil(padding + this.#baseWidth * this.scaleFactor);
    const height = Math.ceil(padding + this.#baseHeight * this.scaleFactor);
    const [parentWidth, parentHeight] = this.parentDimensions;
    this.width = width / parentWidth;
    this.height = height / parentHeight;
    this.setAspectRatio(width, height);
    const prevTranslationX = this.translationX;
    const prevTranslationY = this.translationY;
    this.translationX = -bbox[0];
    this.translationY = -bbox[1];
    this.#setCanvasDims();
    this.#redraw();
    this.#realWidth = width;
    this.#realHeight = height;
    this.setDims(width, height);
    const unscaledPadding = firstTime ? padding / this.scaleFactor / 2 : 0;
    this.translate(prevTranslationX - this.translationX - unscaledPadding, prevTranslationY - this.translationY - unscaledPadding);
  }
  static deserialize(data, parent, uiManager) {
    if (data instanceof _annotation_layer.InkAnnotationElement) {
      return null;
    }
    const editor = super.deserialize(data, parent, uiManager);
    editor.thickness = data.thickness;
    editor.color = _util.Util.makeHexColor(...data.color);
    editor.opacity = data.opacity;
    const [pageWidth, pageHeight] = editor.pageDimensions;
    const width = editor.width * pageWidth;
    const height = editor.height * pageHeight;
    const scaleFactor = editor.parentScale;
    const padding = data.thickness / 2;
    editor.#disableEditing = true;
    editor.#realWidth = Math.round(width);
    editor.#realHeight = Math.round(height);
    const {
      paths,
      rect,
      rotation
    } = data;
    for (let {
      bezier
    } of paths) {
      bezier = InkEditor.#fromPDFCoordinates(bezier, rect, rotation);
      const path = [];
      editor.paths.push(path);
      let p0 = scaleFactor * (bezier[0] - padding);
      let p1 = scaleFactor * (bezier[1] - padding);
      for (let i = 2, ii = bezier.length; i < ii; i += 6) {
        const p10 = scaleFactor * (bezier[i] - padding);
        const p11 = scaleFactor * (bezier[i + 1] - padding);
        const p20 = scaleFactor * (bezier[i + 2] - padding);
        const p21 = scaleFactor * (bezier[i + 3] - padding);
        const p30 = scaleFactor * (bezier[i + 4] - padding);
        const p31 = scaleFactor * (bezier[i + 5] - padding);
        path.push([[p0, p1], [p10, p11], [p20, p21], [p30, p31]]);
        p0 = p30;
        p1 = p31;
      }
      const path2D = this.#buildPath2D(path);
      editor.bezierPath2D.push(path2D);
    }
    const bbox = editor.#getBbox();
    editor.#baseWidth = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]);
    editor.#baseHeight = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]);
    editor.#setScaleFactor(width, height);
    return editor;
  }
  serialize() {
    if (this.isEmpty()) {
      return null;
    }
    const rect = this.getRect(0, 0);
    const color = _editor.AnnotationEditor._colorManager.convert(this.ctx.strokeStyle);
    return {
      annotationType: _util.AnnotationEditorType.INK,
      color,
      thickness: this.thickness,
      opacity: this.opacity,
      paths: this.#serializePaths(this.scaleFactor / this.parentScale, this.translationX, this.translationY, rect),
      pageIndex: this.pageIndex,
      rect,
      rotation: this.rotation,
      structTreeParentId: this._structTreeParentId
    };
  }
}
exports.InkEditor = InkEditor;

/***/ }),
/* 34 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.StampEditor = void 0;
var _util = __w_pdfjs_require__(1);
var _editor = __w_pdfjs_require__(4);
var _display_utils = __w_pdfjs_require__(6);
var _annotation_layer = __w_pdfjs_require__(29);
class StampEditor extends _editor.AnnotationEditor {
  #bitmap = null;
  #bitmapId = null;
  #bitmapPromise = null;
  #bitmapUrl = null;
  #bitmapFile = null;
  #canvas = null;
  #observer = null;
  #resizeTimeoutId = null;
  #isSvg = false;
  #hasBeenAddedInUndoStack = false;
  static _type = "stamp";
  constructor(params) {
    super({
      ...params,
      name: "stampEditor"
    });
    this.#bitmapUrl = params.bitmapUrl;
    this.#bitmapFile = params.bitmapFile;
  }
  static initialize(l10n) {
    _editor.AnnotationEditor.initialize(l10n);
  }
  static get supportedTypes() {
    const types = ["apng", "avif", "bmp", "gif", "jpeg", "png", "svg+xml", "webp", "x-icon"];
    return (0, _util.shadow)(this, "supportedTypes", types.map(type => `image/${type}`));
  }
  static get supportedTypesStr() {
    return (0, _util.shadow)(this, "supportedTypesStr", this.supportedTypes.join(","));
  }
  static isHandlingMimeForPasting(mime) {
    return this.supportedTypes.includes(mime);
  }
  static paste(item, parent) {
    parent.pasteEditor(_util.AnnotationEditorType.STAMP, {
      bitmapFile: item.getAsFile()
    });
  }
  #getBitmapFetched(data, fromId = false) {
    if (!data) {
      this.remove();
      return;
    }
    this.#bitmap = data.bitmap;
    if (!fromId) {
      this.#bitmapId = data.id;
      this.#isSvg = data.isSvg;
    }
    this.#createCanvas();
  }
  #getBitmapDone() {
    this.#bitmapPromise = null;
    this._uiManager.enableWaiting(false);
    if (this.#canvas) {
      this.div.focus();
    }
  }
  #getBitmap() {
    if (this.#bitmapId) {
      this._uiManager.enableWaiting(true);
      this._uiManager.imageManager.getFromId(this.#bitmapId).then(data => this.#getBitmapFetched(data, true)).finally(() => this.#getBitmapDone());
      return;
    }
    if (this.#bitmapUrl) {
      const url = this.#bitmapUrl;
      this.#bitmapUrl = null;
      this._uiManager.enableWaiting(true);
      this.#bitmapPromise = this._uiManager.imageManager.getFromUrl(url).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone());
      return;
    }
    if (this.#bitmapFile) {
      const file = this.#bitmapFile;
      this.#bitmapFile = null;
      this._uiManager.enableWaiting(true);
      this.#bitmapPromise = this._uiManager.imageManager.getFromFile(file).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone());
      return;
    }
    const input = document.createElement("input");
    input.type = "file";
    input.accept = StampEditor.supportedTypesStr;
    this.#bitmapPromise = new Promise(resolve => {
      input.addEventListener("change", async () => {
        if (!input.files || input.files.length === 0) {
          this.remove();
        } else {
          this._uiManager.enableWaiting(true);
          const data = await this._uiManager.imageManager.getFromFile(input.files[0]);
          this.#getBitmapFetched(data);
        }
        resolve();
      });
      input.addEventListener("cancel", () => {
        this.remove();
        resolve();
      });
    }).finally(() => this.#getBitmapDone());
    input.click();
  }
  remove() {
    if (this.#bitmapId) {
      this.#bitmap = null;
      this._uiManager.imageManager.deleteId(this.#bitmapId);
      this.#canvas?.remove();
      this.#canvas = null;
      this.#observer?.disconnect();
      this.#observer = null;
    }
    super.remove();
  }
  rebuild() {
    if (!this.parent) {
      if (this.#bitmapId) {
        this.#getBitmap();
      }
      return;
    }
    super.rebuild();
    if (this.div === null) {
      return;
    }
    if (this.#bitmapId) {
      this.#getBitmap();
    }
    if (!this.isAttachedToDOM) {
      this.parent.add(this);
    }
  }
  onceAdded() {
    this._isDraggable = true;
    this.div.focus();
  }
  isEmpty() {
    return !(this.#bitmapPromise || this.#bitmap || this.#bitmapUrl || this.#bitmapFile);
  }
  get isResizable() {
    return true;
  }
  render() {
    if (this.div) {
      return this.div;
    }
    let baseX, baseY;
    if (this.width) {
      baseX = this.x;
      baseY = this.y;
    }
    super.render();
    this.div.hidden = true;
    if (this.#bitmap) {
      this.#createCanvas();
    } else {
      this.#getBitmap();
    }
    if (this.width) {
      const [parentWidth, parentHeight] = this.parentDimensions;
      this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight);
    }
    return this.div;
  }
  #createCanvas() {
    const {
      div
    } = this;
    let {
      width,
      height
    } = this.#bitmap;
    const [pageWidth, pageHeight] = this.pageDimensions;
    const MAX_RATIO = 0.75;
    if (this.width) {
      width = this.width * pageWidth;
      height = this.height * pageHeight;
    } else if (width > MAX_RATIO * pageWidth || height > MAX_RATIO * pageHeight) {
      const factor = Math.min(MAX_RATIO * pageWidth / width, MAX_RATIO * pageHeight / height);
      width *= factor;
      height *= factor;
    }
    const [parentWidth, parentHeight] = this.parentDimensions;
    this.setDims(width * parentWidth / pageWidth, height * parentHeight / pageHeight);
    this._uiManager.enableWaiting(false);
    const canvas = this.#canvas = document.createElement("canvas");
    div.append(canvas);
    div.hidden = false;
    this.#drawBitmap(width, height);
    this.#createObserver();
    if (!this.#hasBeenAddedInUndoStack) {
      this.parent.addUndoableEditor(this);
      this.#hasBeenAddedInUndoStack = true;
    }
    this._uiManager._eventBus.dispatch("reporttelemetry", {
      source: this,
      details: {
        type: "editing",
        subtype: this.editorType,
        data: {
          action: "inserted_image"
        }
      }
    });
    this.addAltTextButton();
  }
  #setDimensions(width, height) {
    const [parentWidth, parentHeight] = this.parentDimensions;
    this.width = width / parentWidth;
    this.height = height / parentHeight;
    this.setDims(width, height);
    if (this._initialOptions?.isCentered) {
      this.center();
    } else {
      this.fixAndSetPosition();
    }
    this._initialOptions = null;
    if (this.#resizeTimeoutId !== null) {
      clearTimeout(this.#resizeTimeoutId);
    }
    const TIME_TO_WAIT = 200;
    this.#resizeTimeoutId = setTimeout(() => {
      this.#resizeTimeoutId = null;
      this.#drawBitmap(width, height);
    }, TIME_TO_WAIT);
  }
  #scaleBitmap(width, height) {
    const {
      width: bitmapWidth,
      height: bitmapHeight
    } = this.#bitmap;
    let newWidth = bitmapWidth;
    let newHeight = bitmapHeight;
    let bitmap = this.#bitmap;
    while (newWidth > 2 * width || newHeight > 2 * height) {
      const prevWidth = newWidth;
      const prevHeight = newHeight;
      if (newWidth > 2 * width) {
        newWidth = newWidth >= 16384 ? Math.floor(newWidth / 2) - 1 : Math.ceil(newWidth / 2);
      }
      if (newHeight > 2 * height) {
        newHeight = newHeight >= 16384 ? Math.floor(newHeight / 2) - 1 : Math.ceil(newHeight / 2);
      }
      const offscreen = new OffscreenCanvas(newWidth, newHeight);
      const ctx = offscreen.getContext("2d");
      ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight);
      bitmap = offscreen.transferToImageBitmap();
    }
    return bitmap;
  }
  #drawBitmap(width, height) {
    width = Math.ceil(width);
    height = Math.ceil(height);
    const canvas = this.#canvas;
    if (!canvas || canvas.width === width && canvas.height === height) {
      return;
    }
    canvas.width = width;
    canvas.height = height;
    const bitmap = this.#isSvg ? this.#bitmap : this.#scaleBitmap(width, height);
    const ctx = canvas.getContext("2d");
    ctx.filter = this._uiManager.hcmFilter;
    ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height);
  }
  #serializeBitmap(toUrl) {
    if (toUrl) {
      if (this.#isSvg) {
        const url = this._uiManager.imageManager.getSvgUrl(this.#bitmapId);
        if (url) {
          return url;
        }
      }
      const canvas = document.createElement("canvas");
      ({
        width: canvas.width,
        height: canvas.height
      } = this.#bitmap);
      const ctx = canvas.getContext("2d");
      ctx.drawImage(this.#bitmap, 0, 0);
      return canvas.toDataURL();
    }
    if (this.#isSvg) {
      const [pageWidth, pageHeight] = this.pageDimensions;
      const width = Math.round(this.width * pageWidth * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS);
      const height = Math.round(this.height * pageHeight * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS);
      const offscreen = new OffscreenCanvas(width, height);
      const ctx = offscreen.getContext("2d");
      ctx.drawImage(this.#bitmap, 0, 0, this.#bitmap.width, this.#bitmap.height, 0, 0, width, height);
      return offscreen.transferToImageBitmap();
    }
    return structuredClone(this.#bitmap);
  }
  #createObserver() {
    this.#observer = new ResizeObserver(entries => {
      const rect = entries[0].contentRect;
      if (rect.width && rect.height) {
        this.#setDimensions(rect.width, rect.height);
      }
    });
    this.#observer.observe(this.div);
  }
  static deserialize(data, parent, uiManager) {
    if (data instanceof _annotation_layer.StampAnnotationElement) {
      return null;
    }
    const editor = super.deserialize(data, parent, uiManager);
    const {
      rect,
      bitmapUrl,
      bitmapId,
      isSvg,
      accessibilityData
    } = data;
    if (bitmapId && uiManager.imageManager.isValidId(bitmapId)) {
      editor.#bitmapId = bitmapId;
    } else {
      editor.#bitmapUrl = bitmapUrl;
    }
    editor.#isSvg = isSvg;
    const [parentWidth, parentHeight] = editor.pageDimensions;
    editor.width = (rect[2] - rect[0]) / parentWidth;
    editor.height = (rect[3] - rect[1]) / parentHeight;
    if (accessibilityData) {
      editor.altTextData = accessibilityData;
    }
    return editor;
  }
  serialize(isForCopying = false, context = null) {
    if (this.isEmpty()) {
      return null;
    }
    const serialized = {
      annotationType: _util.AnnotationEditorType.STAMP,
      bitmapId: this.#bitmapId,
      pageIndex: this.pageIndex,
      rect: this.getRect(0, 0),
      rotation: this.rotation,
      isSvg: this.#isSvg,
      structTreeParentId: this._structTreeParentId
    };
    if (isForCopying) {
      serialized.bitmapUrl = this.#serializeBitmap(true);
      serialized.accessibilityData = this.altTextData;
      return serialized;
    }
    const {
      decorative,
      altText
    } = this.altTextData;
    if (!decorative && altText) {
      serialized.accessibilityData = {
        type: "Figure",
        alt: altText
      };
    }
    if (context === null) {
      return serialized;
    }
    context.stamps ||= new Map();
    const area = this.#isSvg ? (serialized.rect[2] - serialized.rect[0]) * (serialized.rect[3] - serialized.rect[1]) : null;
    if (!context.stamps.has(this.#bitmapId)) {
      context.stamps.set(this.#bitmapId, {
        area,
        serialized
      });
      serialized.bitmap = this.#serializeBitmap(false);
    } else if (this.#isSvg) {
      const prevData = context.stamps.get(this.#bitmapId);
      if (area > prevData.area) {
        prevData.area = area;
        prevData.serialized.bitmap.close();
        prevData.serialized.bitmap = this.#serializeBitmap(false);
      }
    }
    return serialized;
  }
}
exports.StampEditor = StampEditor;

/***/ })
/******/ 	]);
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __w_pdfjs_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __w_pdfjs_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
var __nested_webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
(() => {
var exports = __nested_webpack_exports__;


Object.defineProperty(exports, "__esModule", ({
  value: true
}));
Object.defineProperty(exports, "AbortException", ({
  enumerable: true,
  get: function () {
    return _util.AbortException;
  }
}));
Object.defineProperty(exports, "AnnotationEditorLayer", ({
  enumerable: true,
  get: function () {
    return _annotation_editor_layer.AnnotationEditorLayer;
  }
}));
Object.defineProperty(exports, "AnnotationEditorParamsType", ({
  enumerable: true,
  get: function () {
    return _util.AnnotationEditorParamsType;
  }
}));
Object.defineProperty(exports, "AnnotationEditorType", ({
  enumerable: true,
  get: function () {
    return _util.AnnotationEditorType;
  }
}));
Object.defineProperty(exports, "AnnotationEditorUIManager", ({
  enumerable: true,
  get: function () {
    return _tools.AnnotationEditorUIManager;
  }
}));
Object.defineProperty(exports, "AnnotationLayer", ({
  enumerable: true,
  get: function () {
    return _annotation_layer.AnnotationLayer;
  }
}));
Object.defineProperty(exports, "AnnotationMode", ({
  enumerable: true,
  get: function () {
    return _util.AnnotationMode;
  }
}));
Object.defineProperty(exports, "CMapCompressionType", ({
  enumerable: true,
  get: function () {
    return _util.CMapCompressionType;
  }
}));
Object.defineProperty(exports, "DOMSVGFactory", ({
  enumerable: true,
  get: function () {
    return _display_utils.DOMSVGFactory;
  }
}));
Object.defineProperty(exports, "FeatureTest", ({
  enumerable: true,
  get: function () {
    return _util.FeatureTest;
  }
}));
Object.defineProperty(exports, "GlobalWorkerOptions", ({
  enumerable: true,
  get: function () {
    return _worker_options.GlobalWorkerOptions;
  }
}));
Object.defineProperty(exports, "ImageKind", ({
  enumerable: true,
  get: function () {
    return _util.ImageKind;
  }
}));
Object.defineProperty(exports, "InvalidPDFException", ({
  enumerable: true,
  get: function () {
    return _util.InvalidPDFException;
  }
}));
Object.defineProperty(exports, "MissingPDFException", ({
  enumerable: true,
  get: function () {
    return _util.MissingPDFException;
  }
}));
Object.defineProperty(exports, "OPS", ({
  enumerable: true,
  get: function () {
    return _util.OPS;
  }
}));
Object.defineProperty(exports, "PDFDataRangeTransport", ({
  enumerable: true,
  get: function () {
    return _api.PDFDataRangeTransport;
  }
}));
Object.defineProperty(exports, "PDFDateString", ({
  enumerable: true,
  get: function () {
    return _display_utils.PDFDateString;
  }
}));
Object.defineProperty(exports, "PDFWorker", ({
  enumerable: true,
  get: function () {
    return _api.PDFWorker;
  }
}));
Object.defineProperty(exports, "PasswordResponses", ({
  enumerable: true,
  get: function () {
    return _util.PasswordResponses;
  }
}));
Object.defineProperty(exports, "PermissionFlag", ({
  enumerable: true,
  get: function () {
    return _util.PermissionFlag;
  }
}));
Object.defineProperty(exports, "PixelsPerInch", ({
  enumerable: true,
  get: function () {
    return _display_utils.PixelsPerInch;
  }
}));
Object.defineProperty(exports, "PromiseCapability", ({
  enumerable: true,
  get: function () {
    return _util.PromiseCapability;
  }
}));
Object.defineProperty(exports, "RenderingCancelledException", ({
  enumerable: true,
  get: function () {
    return _display_utils.RenderingCancelledException;
  }
}));
Object.defineProperty(exports, "SVGGraphics", ({
  enumerable: true,
  get: function () {
    return _api.SVGGraphics;
  }
}));
Object.defineProperty(exports, "UnexpectedResponseException", ({
  enumerable: true,
  get: function () {
    return _util.UnexpectedResponseException;
  }
}));
Object.defineProperty(exports, "Util", ({
  enumerable: true,
  get: function () {
    return _util.Util;
  }
}));
Object.defineProperty(exports, "VerbosityLevel", ({
  enumerable: true,
  get: function () {
    return _util.VerbosityLevel;
  }
}));
Object.defineProperty(exports, "XfaLayer", ({
  enumerable: true,
  get: function () {
    return _xfa_layer.XfaLayer;
  }
}));
Object.defineProperty(exports, "build", ({
  enumerable: true,
  get: function () {
    return _api.build;
  }
}));
Object.defineProperty(exports, "createValidAbsoluteUrl", ({
  enumerable: true,
  get: function () {
    return _util.createValidAbsoluteUrl;
  }
}));
Object.defineProperty(exports, "getDocument", ({
  enumerable: true,
  get: function () {
    return _api.getDocument;
  }
}));
Object.defineProperty(exports, "getFilenameFromUrl", ({
  enumerable: true,
  get: function () {
    return _display_utils.getFilenameFromUrl;
  }
}));
Object.defineProperty(exports, "getPdfFilenameFromUrl", ({
  enumerable: true,
  get: function () {
    return _display_utils.getPdfFilenameFromUrl;
  }
}));
Object.defineProperty(exports, "getXfaPageViewport", ({
  enumerable: true,
  get: function () {
    return _display_utils.getXfaPageViewport;
  }
}));
Object.defineProperty(exports, "isDataScheme", ({
  enumerable: true,
  get: function () {
    return _display_utils.isDataScheme;
  }
}));
Object.defineProperty(exports, "isPdfFile", ({
  enumerable: true,
  get: function () {
    return _display_utils.isPdfFile;
  }
}));
Object.defineProperty(exports, "loadScript", ({
  enumerable: true,
  get: function () {
    return _display_utils.loadScript;
  }
}));
Object.defineProperty(exports, "noContextMenu", ({
  enumerable: true,
  get: function () {
    return _display_utils.noContextMenu;
  }
}));
Object.defineProperty(exports, "normalizeUnicode", ({
  enumerable: true,
  get: function () {
    return _util.normalizeUnicode;
  }
}));
Object.defineProperty(exports, "renderTextLayer", ({
  enumerable: true,
  get: function () {
    return _text_layer.renderTextLayer;
  }
}));
Object.defineProperty(exports, "setLayerDimensions", ({
  enumerable: true,
  get: function () {
    return _display_utils.setLayerDimensions;
  }
}));
Object.defineProperty(exports, "shadow", ({
  enumerable: true,
  get: function () {
    return _util.shadow;
  }
}));
Object.defineProperty(exports, "updateTextLayer", ({
  enumerable: true,
  get: function () {
    return _text_layer.updateTextLayer;
  }
}));
Object.defineProperty(exports, "version", ({
  enumerable: true,
  get: function () {
    return _api.version;
  }
}));
var _util = __w_pdfjs_require__(1);
var _api = __w_pdfjs_require__(2);
var _display_utils = __w_pdfjs_require__(6);
var _text_layer = __w_pdfjs_require__(26);
var _annotation_editor_layer = __w_pdfjs_require__(27);
var _tools = __w_pdfjs_require__(5);
var _annotation_layer = __w_pdfjs_require__(29);
var _worker_options = __w_pdfjs_require__(14);
var _xfa_layer = __w_pdfjs_require__(32);
const pdfjsVersion = '3.11.174';
const pdfjsBuild = 'ce8716743';
})();

/******/ 	return __nested_webpack_exports__;
/******/ })()
;
});
//# sourceMappingURL=pdf.js.map

/***/ }),

/***/ 7624:
/***/ ((module) => {

/**
 * @licstart The following is the entire license notice for the
 * JavaScript code in this page
 *
 * Copyright 2023 Mozilla Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * @licend The above is the entire license notice for the
 * JavaScript code in this page
 */

(function webpackUniversalModuleDefinition(root, factory) {
	if(true)
		module.exports = root.pdfjsWorker = factory();
	else {}
})(globalThis, () => {
return /******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	var __webpack_modules__ = ([
/* 0 */,
/* 1 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.WorkerTask = exports.WorkerMessageHandler = void 0;
var _util = __w_pdfjs_require__(2);
var _core_utils = __w_pdfjs_require__(3);
var _primitives = __w_pdfjs_require__(4);
var _pdf_manager = __w_pdfjs_require__(6);
var _annotation = __w_pdfjs_require__(10);
var _cleanup_helper = __w_pdfjs_require__(68);
var _writer = __w_pdfjs_require__(73);
var _message_handler = __w_pdfjs_require__(104);
var _worker_stream = __w_pdfjs_require__(105);
var _struct_tree = __w_pdfjs_require__(72);
class WorkerTask {
  constructor(name) {
    this.name = name;
    this.terminated = false;
    this._capability = new _util.PromiseCapability();
  }
  get finished() {
    return this._capability.promise;
  }
  finish() {
    this._capability.resolve();
  }
  terminate() {
    this.terminated = true;
  }
  ensureNotTerminated() {
    if (this.terminated) {
      throw new Error("Worker task was terminated");
    }
  }
}
exports.WorkerTask = WorkerTask;
class WorkerMessageHandler {
  static setup(handler, port) {
    let testMessageProcessed = false;
    handler.on("test", function (data) {
      if (testMessageProcessed) {
        return;
      }
      testMessageProcessed = true;
      handler.send("test", data instanceof Uint8Array);
    });
    handler.on("configure", function (data) {
      (0, _util.setVerbosityLevel)(data.verbosity);
    });
    handler.on("GetDocRequest", function (data) {
      return WorkerMessageHandler.createDocumentHandler(data, port);
    });
  }
  static createDocumentHandler(docParams, port) {
    let pdfManager;
    let terminated = false;
    let cancelXHRs = null;
    const WorkerTasks = new Set();
    const verbosity = (0, _util.getVerbosityLevel)();
    const {
      docId,
      apiVersion
    } = docParams;
    const workerVersion = '3.11.174';
    if (apiVersion !== workerVersion) {
      throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`);
    }
    const enumerableProperties = [];
    for (const property in []) {
      enumerableProperties.push(property);
    }
    if (enumerableProperties.length) {
      throw new Error("The `Array.prototype` contains unexpected enumerable properties: " + enumerableProperties.join(", ") + "; thus breaking e.g. `for...in` iteration of `Array`s.");
    }
    const workerHandlerName = docId + "_worker";
    let handler = new _message_handler.MessageHandler(workerHandlerName, docId, port);
    function ensureNotTerminated() {
      if (terminated) {
        throw new Error("Worker was terminated");
      }
    }
    function startWorkerTask(task) {
      WorkerTasks.add(task);
    }
    function finishWorkerTask(task) {
      task.finish();
      WorkerTasks.delete(task);
    }
    async function loadDocument(recoveryMode) {
      await pdfManager.ensureDoc("checkHeader");
      await pdfManager.ensureDoc("parseStartXRef");
      await pdfManager.ensureDoc("parse", [recoveryMode]);
      await pdfManager.ensureDoc("checkFirstPage", [recoveryMode]);
      await pdfManager.ensureDoc("checkLastPage", [recoveryMode]);
      const isPureXfa = await pdfManager.ensureDoc("isPureXfa");
      if (isPureXfa) {
        const task = new WorkerTask("loadXfaFonts");
        startWorkerTask(task);
        await Promise.all([pdfManager.loadXfaFonts(handler, task).catch(reason => {}).then(() => finishWorkerTask(task)), pdfManager.loadXfaImages()]);
      }
      const [numPages, fingerprints] = await Promise.all([pdfManager.ensureDoc("numPages"), pdfManager.ensureDoc("fingerprints")]);
      const htmlForXfa = isPureXfa ? await pdfManager.ensureDoc("htmlForXfa") : null;
      return {
        numPages,
        fingerprints,
        htmlForXfa
      };
    }
    function getPdfManager({
      data,
      password,
      disableAutoFetch,
      rangeChunkSize,
      length,
      docBaseUrl,
      enableXfa,
      evaluatorOptions
    }) {
      const pdfManagerArgs = {
        source: null,
        disableAutoFetch,
        docBaseUrl,
        docId,
        enableXfa,
        evaluatorOptions,
        handler,
        length,
        password,
        rangeChunkSize
      };
      const pdfManagerCapability = new _util.PromiseCapability();
      let newPdfManager;
      if (data) {
        try {
          pdfManagerArgs.source = data;
          newPdfManager = new _pdf_manager.LocalPdfManager(pdfManagerArgs);
          pdfManagerCapability.resolve(newPdfManager);
        } catch (ex) {
          pdfManagerCapability.reject(ex);
        }
        return pdfManagerCapability.promise;
      }
      let pdfStream,
        cachedChunks = [];
      try {
        pdfStream = new _worker_stream.PDFWorkerStream(handler);
      } catch (ex) {
        pdfManagerCapability.reject(ex);
        return pdfManagerCapability.promise;
      }
      const fullRequest = pdfStream.getFullReader();
      fullRequest.headersReady.then(function () {
        if (!fullRequest.isRangeSupported) {
          return;
        }
        pdfManagerArgs.source = pdfStream;
        pdfManagerArgs.length = fullRequest.contentLength;
        pdfManagerArgs.disableAutoFetch ||= fullRequest.isStreamingSupported;
        newPdfManager = new _pdf_manager.NetworkPdfManager(pdfManagerArgs);
        for (const chunk of cachedChunks) {
          newPdfManager.sendProgressiveData(chunk);
        }
        cachedChunks = [];
        pdfManagerCapability.resolve(newPdfManager);
        cancelXHRs = null;
      }).catch(function (reason) {
        pdfManagerCapability.reject(reason);
        cancelXHRs = null;
      });
      let loaded = 0;
      const flushChunks = function () {
        const pdfFile = (0, _core_utils.arrayBuffersToBytes)(cachedChunks);
        if (length && pdfFile.length !== length) {
          (0, _util.warn)("reported HTTP length is different from actual");
        }
        try {
          pdfManagerArgs.source = pdfFile;
          newPdfManager = new _pdf_manager.LocalPdfManager(pdfManagerArgs);
          pdfManagerCapability.resolve(newPdfManager);
        } catch (ex) {
          pdfManagerCapability.reject(ex);
        }
        cachedChunks = [];
      };
      new Promise(function (resolve, reject) {
        const readChunk = function ({
          value,
          done
        }) {
          try {
            ensureNotTerminated();
            if (done) {
              if (!newPdfManager) {
                flushChunks();
              }
              cancelXHRs = null;
              return;
            }
            loaded += value.byteLength;
            if (!fullRequest.isStreamingSupported) {
              handler.send("DocProgress", {
                loaded,
                total: Math.max(loaded, fullRequest.contentLength || 0)
              });
            }
            if (newPdfManager) {
              newPdfManager.sendProgressiveData(value);
            } else {
              cachedChunks.push(value);
            }
            fullRequest.read().then(readChunk, reject);
          } catch (e) {
            reject(e);
          }
        };
        fullRequest.read().then(readChunk, reject);
      }).catch(function (e) {
        pdfManagerCapability.reject(e);
        cancelXHRs = null;
      });
      cancelXHRs = function (reason) {
        pdfStream.cancelAllRequests(reason);
      };
      return pdfManagerCapability.promise;
    }
    function setupDoc(data) {
      function onSuccess(doc) {
        ensureNotTerminated();
        handler.send("GetDoc", {
          pdfInfo: doc
        });
      }
      function onFailure(ex) {
        ensureNotTerminated();
        if (ex instanceof _util.PasswordException) {
          const task = new WorkerTask(`PasswordException: response ${ex.code}`);
          startWorkerTask(task);
          handler.sendWithPromise("PasswordRequest", ex).then(function ({
            password
          }) {
            finishWorkerTask(task);
            pdfManager.updatePassword(password);
            pdfManagerReady();
          }).catch(function () {
            finishWorkerTask(task);
            handler.send("DocException", ex);
          });
        } else if (ex instanceof _util.InvalidPDFException || ex instanceof _util.MissingPDFException || ex instanceof _util.UnexpectedResponseException || ex instanceof _util.UnknownErrorException) {
          handler.send("DocException", ex);
        } else {
          handler.send("DocException", new _util.UnknownErrorException(ex.message, ex.toString()));
        }
      }
      function pdfManagerReady() {
        ensureNotTerminated();
        loadDocument(false).then(onSuccess, function (reason) {
          ensureNotTerminated();
          if (!(reason instanceof _core_utils.XRefParseException)) {
            onFailure(reason);
            return;
          }
          pdfManager.requestLoadedStream().then(function () {
            ensureNotTerminated();
            loadDocument(true).then(onSuccess, onFailure);
          });
        });
      }
      ensureNotTerminated();
      getPdfManager(data).then(function (newPdfManager) {
        if (terminated) {
          newPdfManager.terminate(new _util.AbortException("Worker was terminated."));
          throw new Error("Worker was terminated");
        }
        pdfManager = newPdfManager;
        pdfManager.requestLoadedStream(true).then(stream => {
          handler.send("DataLoaded", {
            length: stream.bytes.byteLength
          });
        });
      }).then(pdfManagerReady, onFailure);
    }
    handler.on("GetPage", function (data) {
      return pdfManager.getPage(data.pageIndex).then(function (page) {
        return Promise.all([pdfManager.ensure(page, "rotate"), pdfManager.ensure(page, "ref"), pdfManager.ensure(page, "userUnit"), pdfManager.ensure(page, "view")]).then(function ([rotate, ref, userUnit, view]) {
          return {
            rotate,
            ref,
            userUnit,
            view
          };
        });
      });
    });
    handler.on("GetPageIndex", function (data) {
      const pageRef = _primitives.Ref.get(data.num, data.gen);
      return pdfManager.ensureCatalog("getPageIndex", [pageRef]);
    });
    handler.on("GetDestinations", function (data) {
      return pdfManager.ensureCatalog("destinations");
    });
    handler.on("GetDestination", function (data) {
      return pdfManager.ensureCatalog("getDestination", [data.id]);
    });
    handler.on("GetPageLabels", function (data) {
      return pdfManager.ensureCatalog("pageLabels");
    });
    handler.on("GetPageLayout", function (data) {
      return pdfManager.ensureCatalog("pageLayout");
    });
    handler.on("GetPageMode", function (data) {
      return pdfManager.ensureCatalog("pageMode");
    });
    handler.on("GetViewerPreferences", function (data) {
      return pdfManager.ensureCatalog("viewerPreferences");
    });
    handler.on("GetOpenAction", function (data) {
      return pdfManager.ensureCatalog("openAction");
    });
    handler.on("GetAttachments", function (data) {
      return pdfManager.ensureCatalog("attachments");
    });
    handler.on("GetDocJSActions", function (data) {
      return pdfManager.ensureCatalog("jsActions");
    });
    handler.on("GetPageJSActions", function ({
      pageIndex
    }) {
      return pdfManager.getPage(pageIndex).then(function (page) {
        return pdfManager.ensure(page, "jsActions");
      });
    });
    handler.on("GetOutline", function (data) {
      return pdfManager.ensureCatalog("documentOutline");
    });
    handler.on("GetOptionalContentConfig", function (data) {
      return pdfManager.ensureCatalog("optionalContentConfig");
    });
    handler.on("GetPermissions", function (data) {
      return pdfManager.ensureCatalog("permissions");
    });
    handler.on("GetMetadata", function (data) {
      return Promise.all([pdfManager.ensureDoc("documentInfo"), pdfManager.ensureCatalog("metadata")]);
    });
    handler.on("GetMarkInfo", function (data) {
      return pdfManager.ensureCatalog("markInfo");
    });
    handler.on("GetData", function (data) {
      return pdfManager.requestLoadedStream().then(function (stream) {
        return stream.bytes;
      });
    });
    handler.on("GetAnnotations", function ({
      pageIndex,
      intent
    }) {
      return pdfManager.getPage(pageIndex).then(function (page) {
        const task = new WorkerTask(`GetAnnotations: page ${pageIndex}`);
        startWorkerTask(task);
        return page.getAnnotationsData(handler, task, intent).then(data => {
          finishWorkerTask(task);
          return data;
        }, reason => {
          finishWorkerTask(task);
          throw reason;
        });
      });
    });
    handler.on("GetFieldObjects", function (data) {
      return pdfManager.ensureDoc("fieldObjects");
    });
    handler.on("HasJSActions", function (data) {
      return pdfManager.ensureDoc("hasJSActions");
    });
    handler.on("GetCalculationOrderIds", function (data) {
      return pdfManager.ensureDoc("calculationOrderIds");
    });
    handler.on("SaveDocument", async function ({
      isPureXfa,
      numPages,
      annotationStorage,
      filename
    }) {
      const globalPromises = [pdfManager.requestLoadedStream(), pdfManager.ensureCatalog("acroForm"), pdfManager.ensureCatalog("acroFormRef"), pdfManager.ensureDoc("startXRef"), pdfManager.ensureDoc("xref"), pdfManager.ensureDoc("linearization"), pdfManager.ensureCatalog("structTreeRoot")];
      const promises = [];
      const newAnnotationsByPage = !isPureXfa ? (0, _core_utils.getNewAnnotationsMap)(annotationStorage) : null;
      const [stream, acroForm, acroFormRef, startXRef, xref, linearization, _structTreeRoot] = await Promise.all(globalPromises);
      const catalogRef = xref.trailer.getRaw("Root") || null;
      let structTreeRoot;
      if (newAnnotationsByPage) {
        if (!_structTreeRoot) {
          if (await _struct_tree.StructTreeRoot.canCreateStructureTree({
            catalogRef,
            pdfManager,
            newAnnotationsByPage
          })) {
            structTreeRoot = null;
          }
        } else if (await _structTreeRoot.canUpdateStructTree({
          pdfManager,
          newAnnotationsByPage
        })) {
          structTreeRoot = _structTreeRoot;
        }
        const imagePromises = _annotation.AnnotationFactory.generateImages(annotationStorage.values(), xref, pdfManager.evaluatorOptions.isOffscreenCanvasSupported);
        const newAnnotationPromises = structTreeRoot === undefined ? promises : [];
        for (const [pageIndex, annotations] of newAnnotationsByPage) {
          newAnnotationPromises.push(pdfManager.getPage(pageIndex).then(page => {
            const task = new WorkerTask(`Save (editor): page ${pageIndex}`);
            return page.saveNewAnnotations(handler, task, annotations, imagePromises).finally(function () {
              finishWorkerTask(task);
            });
          }));
        }
        if (structTreeRoot === null) {
          promises.push(Promise.all(newAnnotationPromises).then(async newRefs => {
            await _struct_tree.StructTreeRoot.createStructureTree({
              newAnnotationsByPage,
              xref,
              catalogRef,
              pdfManager,
              newRefs
            });
            return newRefs;
          }));
        } else if (structTreeRoot) {
          promises.push(Promise.all(newAnnotationPromises).then(async newRefs => {
            await structTreeRoot.updateStructureTree({
              newAnnotationsByPage,
              pdfManager,
              newRefs
            });
            return newRefs;
          }));
        }
      }
      if (isPureXfa) {
        promises.push(pdfManager.serializeXfaData(annotationStorage));
      } else {
        for (let pageIndex = 0; pageIndex < numPages; pageIndex++) {
          promises.push(pdfManager.getPage(pageIndex).then(function (page) {
            const task = new WorkerTask(`Save: page ${pageIndex}`);
            return page.save(handler, task, annotationStorage).finally(function () {
              finishWorkerTask(task);
            });
          }));
        }
      }
      const refs = await Promise.all(promises);
      let newRefs = [];
      let xfaData = null;
      if (isPureXfa) {
        xfaData = refs[0];
        if (!xfaData) {
          return stream.bytes;
        }
      } else {
        newRefs = refs.flat(2);
        if (newRefs.length === 0) {
          return stream.bytes;
        }
      }
      const needAppearances = acroFormRef && acroForm instanceof _primitives.Dict && newRefs.some(ref => ref.needAppearances);
      const xfa = acroForm instanceof _primitives.Dict && acroForm.get("XFA") || null;
      let xfaDatasetsRef = null;
      let hasXfaDatasetsEntry = false;
      if (Array.isArray(xfa)) {
        for (let i = 0, ii = xfa.length; i < ii; i += 2) {
          if (xfa[i] === "datasets") {
            xfaDatasetsRef = xfa[i + 1];
            hasXfaDatasetsEntry = true;
          }
        }
        if (xfaDatasetsRef === null) {
          xfaDatasetsRef = xref.getNewTemporaryRef();
        }
      } else if (xfa) {
        (0, _util.warn)("Unsupported XFA type.");
      }
      let newXrefInfo = Object.create(null);
      if (xref.trailer) {
        const infoObj = Object.create(null);
        const xrefInfo = xref.trailer.get("Info") || null;
        if (xrefInfo instanceof _primitives.Dict) {
          xrefInfo.forEach((key, value) => {
            if (typeof value === "string") {
              infoObj[key] = (0, _util.stringToPDFString)(value);
            }
          });
        }
        newXrefInfo = {
          rootRef: catalogRef,
          encryptRef: xref.trailer.getRaw("Encrypt") || null,
          newRef: xref.getNewTemporaryRef(),
          infoRef: xref.trailer.getRaw("Info") || null,
          info: infoObj,
          fileIds: xref.trailer.get("ID") || null,
          startXRef: linearization ? startXRef : xref.lastXRefStreamPos ?? startXRef,
          filename
        };
      }
      return (0, _writer.incrementalUpdate)({
        originalData: stream.bytes,
        xrefInfo: newXrefInfo,
        newRefs,
        xref,
        hasXfa: !!xfa,
        xfaDatasetsRef,
        hasXfaDatasetsEntry,
        needAppearances,
        acroFormRef,
        acroForm,
        xfaData
      }).finally(() => {
        xref.resetNewTemporaryRef();
      });
    });
    handler.on("GetOperatorList", function (data, sink) {
      const pageIndex = data.pageIndex;
      pdfManager.getPage(pageIndex).then(function (page) {
        const task = new WorkerTask(`GetOperatorList: page ${pageIndex}`);
        startWorkerTask(task);
        const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0;
        page.getOperatorList({
          handler,
          sink,
          task,
          intent: data.intent,
          cacheKey: data.cacheKey,
          annotationStorage: data.annotationStorage
        }).then(function (operatorListInfo) {
          finishWorkerTask(task);
          if (start) {
            (0, _util.info)(`page=${pageIndex + 1} - getOperatorList: time=` + `${Date.now() - start}ms, len=${operatorListInfo.length}`);
          }
          sink.close();
        }, function (reason) {
          finishWorkerTask(task);
          if (task.terminated) {
            return;
          }
          sink.error(reason);
        });
      });
    });
    handler.on("GetTextContent", function (data, sink) {
      const {
        pageIndex,
        includeMarkedContent,
        disableNormalization
      } = data;
      pdfManager.getPage(pageIndex).then(function (page) {
        const task = new WorkerTask("GetTextContent: page " + pageIndex);
        startWorkerTask(task);
        const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0;
        page.extractTextContent({
          handler,
          task,
          sink,
          includeMarkedContent,
          disableNormalization
        }).then(function () {
          finishWorkerTask(task);
          if (start) {
            (0, _util.info)(`page=${pageIndex + 1} - getTextContent: time=` + `${Date.now() - start}ms`);
          }
          sink.close();
        }, function (reason) {
          finishWorkerTask(task);
          if (task.terminated) {
            return;
          }
          sink.error(reason);
        });
      });
    });
    handler.on("GetStructTree", function (data) {
      return pdfManager.getPage(data.pageIndex).then(function (page) {
        return pdfManager.ensure(page, "getStructTree");
      });
    });
    handler.on("FontFallback", function (data) {
      return pdfManager.fontFallback(data.id, handler);
    });
    handler.on("Cleanup", function (data) {
      return pdfManager.cleanup(true);
    });
    handler.on("Terminate", function (data) {
      terminated = true;
      const waitOn = [];
      if (pdfManager) {
        pdfManager.terminate(new _util.AbortException("Worker was terminated."));
        const cleanupPromise = pdfManager.cleanup();
        waitOn.push(cleanupPromise);
        pdfManager = null;
      } else {
        (0, _cleanup_helper.clearGlobalCaches)();
      }
      if (cancelXHRs) {
        cancelXHRs(new _util.AbortException("Worker was terminated."));
      }
      for (const task of WorkerTasks) {
        waitOn.push(task.finished);
        task.terminate();
      }
      return Promise.all(waitOn).then(function () {
        handler.destroy();
        handler = null;
      });
    });
    handler.on("Ready", function (data) {
      setupDoc(docParams);
      docParams = null;
    });
    return workerHandlerName;
  }
  static initializeFromPort(port) {
    const handler = new _message_handler.MessageHandler("worker", "main", port);
    WorkerMessageHandler.setup(handler, port);
    handler.send("ready", null);
  }
}
exports.WorkerMessageHandler = WorkerMessageHandler;
function isMessagePort(maybePort) {
  return typeof maybePort.postMessage === "function" && "onmessage" in maybePort;
}
if (typeof window === "undefined" && !_util.isNodeJS && typeof self !== "undefined" && isMessagePort(self)) {
  WorkerMessageHandler.initializeFromPort(self);
}

/***/ }),
/* 2 */
/***/ ((__unused_webpack_module, exports) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.RenderingIntentFlag = exports.PromiseCapability = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.MAX_IMAGE_SIZE_TO_CACHE = exports.LINE_FACTOR = exports.LINE_DESCENT_FACTOR = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FeatureTest = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.BASELINE_FACTOR = exports.AnnotationType = exports.AnnotationReplyType = exports.AnnotationPrefix = exports.AnnotationMode = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationEditorType = exports.AnnotationEditorPrefix = exports.AnnotationEditorParamsType = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0;
exports.assert = assert;
exports.bytesToString = bytesToString;
exports.createValidAbsoluteUrl = createValidAbsoluteUrl;
exports.getModificationDate = getModificationDate;
exports.getUuid = getUuid;
exports.getVerbosityLevel = getVerbosityLevel;
exports.info = info;
exports.isArrayBuffer = isArrayBuffer;
exports.isArrayEqual = isArrayEqual;
exports.isNodeJS = void 0;
exports.normalizeUnicode = normalizeUnicode;
exports.objectFromMap = objectFromMap;
exports.objectSize = objectSize;
exports.setVerbosityLevel = setVerbosityLevel;
exports.shadow = shadow;
exports.string32 = string32;
exports.stringToBytes = stringToBytes;
exports.stringToPDFString = stringToPDFString;
exports.stringToUTF8String = stringToUTF8String;
exports.unreachable = unreachable;
exports.utf8StringToString = utf8StringToString;
exports.warn = warn;
const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser");
exports.isNodeJS = isNodeJS;
const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;
const MAX_IMAGE_SIZE_TO_CACHE = 10e6;
exports.MAX_IMAGE_SIZE_TO_CACHE = MAX_IMAGE_SIZE_TO_CACHE;
const LINE_FACTOR = 1.35;
exports.LINE_FACTOR = LINE_FACTOR;
const LINE_DESCENT_FACTOR = 0.35;
exports.LINE_DESCENT_FACTOR = LINE_DESCENT_FACTOR;
const BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR;
exports.BASELINE_FACTOR = BASELINE_FACTOR;
const RenderingIntentFlag = {
  ANY: 0x01,
  DISPLAY: 0x02,
  PRINT: 0x04,
  SAVE: 0x08,
  ANNOTATIONS_FORMS: 0x10,
  ANNOTATIONS_STORAGE: 0x20,
  ANNOTATIONS_DISABLE: 0x40,
  OPLIST: 0x100
};
exports.RenderingIntentFlag = RenderingIntentFlag;
const AnnotationMode = {
  DISABLE: 0,
  ENABLE: 1,
  ENABLE_FORMS: 2,
  ENABLE_STORAGE: 3
};
exports.AnnotationMode = AnnotationMode;
const AnnotationEditorPrefix = "pdfjs_internal_editor_";
exports.AnnotationEditorPrefix = AnnotationEditorPrefix;
const AnnotationEditorType = {
  DISABLE: -1,
  NONE: 0,
  FREETEXT: 3,
  STAMP: 13,
  INK: 15
};
exports.AnnotationEditorType = AnnotationEditorType;
const AnnotationEditorParamsType = {
  RESIZE: 1,
  CREATE: 2,
  FREETEXT_SIZE: 11,
  FREETEXT_COLOR: 12,
  FREETEXT_OPACITY: 13,
  INK_COLOR: 21,
  INK_THICKNESS: 22,
  INK_OPACITY: 23
};
exports.AnnotationEditorParamsType = AnnotationEditorParamsType;
const PermissionFlag = {
  PRINT: 0x04,
  MODIFY_CONTENTS: 0x08,
  COPY: 0x10,
  MODIFY_ANNOTATIONS: 0x20,
  FILL_INTERACTIVE_FORMS: 0x100,
  COPY_FOR_ACCESSIBILITY: 0x200,
  ASSEMBLE: 0x400,
  PRINT_HIGH_QUALITY: 0x800
};
exports.PermissionFlag = PermissionFlag;
const TextRenderingMode = {
  FILL: 0,
  STROKE: 1,
  FILL_STROKE: 2,
  INVISIBLE: 3,
  FILL_ADD_TO_PATH: 4,
  STROKE_ADD_TO_PATH: 5,
  FILL_STROKE_ADD_TO_PATH: 6,
  ADD_TO_PATH: 7,
  FILL_STROKE_MASK: 3,
  ADD_TO_PATH_FLAG: 4
};
exports.TextRenderingMode = TextRenderingMode;
const ImageKind = {
  GRAYSCALE_1BPP: 1,
  RGB_24BPP: 2,
  RGBA_32BPP: 3
};
exports.ImageKind = ImageKind;
const AnnotationType = {
  TEXT: 1,
  LINK: 2,
  FREETEXT: 3,
  LINE: 4,
  SQUARE: 5,
  CIRCLE: 6,
  POLYGON: 7,
  POLYLINE: 8,
  HIGHLIGHT: 9,
  UNDERLINE: 10,
  SQUIGGLY: 11,
  STRIKEOUT: 12,
  STAMP: 13,
  CARET: 14,
  INK: 15,
  POPUP: 16,
  FILEATTACHMENT: 17,
  SOUND: 18,
  MOVIE: 19,
  WIDGET: 20,
  SCREEN: 21,
  PRINTERMARK: 22,
  TRAPNET: 23,
  WATERMARK: 24,
  THREED: 25,
  REDACT: 26
};
exports.AnnotationType = AnnotationType;
const AnnotationReplyType = {
  GROUP: "Group",
  REPLY: "R"
};
exports.AnnotationReplyType = AnnotationReplyType;
const AnnotationFlag = {
  INVISIBLE: 0x01,
  HIDDEN: 0x02,
  PRINT: 0x04,
  NOZOOM: 0x08,
  NOROTATE: 0x10,
  NOVIEW: 0x20,
  READONLY: 0x40,
  LOCKED: 0x80,
  TOGGLENOVIEW: 0x100,
  LOCKEDCONTENTS: 0x200
};
exports.AnnotationFlag = AnnotationFlag;
const AnnotationFieldFlag = {
  READONLY: 0x0000001,
  REQUIRED: 0x0000002,
  NOEXPORT: 0x0000004,
  MULTILINE: 0x0001000,
  PASSWORD: 0x0002000,
  NOTOGGLETOOFF: 0x0004000,
  RADIO: 0x0008000,
  PUSHBUTTON: 0x0010000,
  COMBO: 0x0020000,
  EDIT: 0x0040000,
  SORT: 0x0080000,
  FILESELECT: 0x0100000,
  MULTISELECT: 0x0200000,
  DONOTSPELLCHECK: 0x0400000,
  DONOTSCROLL: 0x0800000,
  COMB: 0x1000000,
  RICHTEXT: 0x2000000,
  RADIOSINUNISON: 0x2000000,
  COMMITONSELCHANGE: 0x4000000
};
exports.AnnotationFieldFlag = AnnotationFieldFlag;
const AnnotationBorderStyleType = {
  SOLID: 1,
  DASHED: 2,
  BEVELED: 3,
  INSET: 4,
  UNDERLINE: 5
};
exports.AnnotationBorderStyleType = AnnotationBorderStyleType;
const AnnotationActionEventType = {
  E: "Mouse Enter",
  X: "Mouse Exit",
  D: "Mouse Down",
  U: "Mouse Up",
  Fo: "Focus",
  Bl: "Blur",
  PO: "PageOpen",
  PC: "PageClose",
  PV: "PageVisible",
  PI: "PageInvisible",
  K: "Keystroke",
  F: "Format",
  V: "Validate",
  C: "Calculate"
};
exports.AnnotationActionEventType = AnnotationActionEventType;
const DocumentActionEventType = {
  WC: "WillClose",
  WS: "WillSave",
  DS: "DidSave",
  WP: "WillPrint",
  DP: "DidPrint"
};
exports.DocumentActionEventType = DocumentActionEventType;
const PageActionEventType = {
  O: "PageOpen",
  C: "PageClose"
};
exports.PageActionEventType = PageActionEventType;
const VerbosityLevel = {
  ERRORS: 0,
  WARNINGS: 1,
  INFOS: 5
};
exports.VerbosityLevel = VerbosityLevel;
const CMapCompressionType = {
  NONE: 0,
  BINARY: 1
};
exports.CMapCompressionType = CMapCompressionType;
const OPS = {
  dependency: 1,
  setLineWidth: 2,
  setLineCap: 3,
  setLineJoin: 4,
  setMiterLimit: 5,
  setDash: 6,
  setRenderingIntent: 7,
  setFlatness: 8,
  setGState: 9,
  save: 10,
  restore: 11,
  transform: 12,
  moveTo: 13,
  lineTo: 14,
  curveTo: 15,
  curveTo2: 16,
  curveTo3: 17,
  closePath: 18,
  rectangle: 19,
  stroke: 20,
  closeStroke: 21,
  fill: 22,
  eoFill: 23,
  fillStroke: 24,
  eoFillStroke: 25,
  closeFillStroke: 26,
  closeEOFillStroke: 27,
  endPath: 28,
  clip: 29,
  eoClip: 30,
  beginText: 31,
  endText: 32,
  setCharSpacing: 33,
  setWordSpacing: 34,
  setHScale: 35,
  setLeading: 36,
  setFont: 37,
  setTextRenderingMode: 38,
  setTextRise: 39,
  moveText: 40,
  setLeadingMoveText: 41,
  setTextMatrix: 42,
  nextLine: 43,
  showText: 44,
  showSpacedText: 45,
  nextLineShowText: 46,
  nextLineSetSpacingShowText: 47,
  setCharWidth: 48,
  setCharWidthAndBounds: 49,
  setStrokeColorSpace: 50,
  setFillColorSpace: 51,
  setStrokeColor: 52,
  setStrokeColorN: 53,
  setFillColor: 54,
  setFillColorN: 55,
  setStrokeGray: 56,
  setFillGray: 57,
  setStrokeRGBColor: 58,
  setFillRGBColor: 59,
  setStrokeCMYKColor: 60,
  setFillCMYKColor: 61,
  shadingFill: 62,
  beginInlineImage: 63,
  beginImageData: 64,
  endInlineImage: 65,
  paintXObject: 66,
  markPoint: 67,
  markPointProps: 68,
  beginMarkedContent: 69,
  beginMarkedContentProps: 70,
  endMarkedContent: 71,
  beginCompat: 72,
  endCompat: 73,
  paintFormXObjectBegin: 74,
  paintFormXObjectEnd: 75,
  beginGroup: 76,
  endGroup: 77,
  beginAnnotation: 80,
  endAnnotation: 81,
  paintImageMaskXObject: 83,
  paintImageMaskXObjectGroup: 84,
  paintImageXObject: 85,
  paintInlineImageXObject: 86,
  paintInlineImageXObjectGroup: 87,
  paintImageXObjectRepeat: 88,
  paintImageMaskXObjectRepeat: 89,
  paintSolidColorImageMask: 90,
  constructPath: 91
};
exports.OPS = OPS;
const PasswordResponses = {
  NEED_PASSWORD: 1,
  INCORRECT_PASSWORD: 2
};
exports.PasswordResponses = PasswordResponses;
let verbosity = VerbosityLevel.WARNINGS;
function setVerbosityLevel(level) {
  if (Number.isInteger(level)) {
    verbosity = level;
  }
}
function getVerbosityLevel() {
  return verbosity;
}
function info(msg) {
  if (verbosity >= VerbosityLevel.INFOS) {
    console.log(`Info: ${msg}`);
  }
}
function warn(msg) {
  if (verbosity >= VerbosityLevel.WARNINGS) {
    console.log(`Warning: ${msg}`);
  }
}
function unreachable(msg) {
  throw new Error(msg);
}
function assert(cond, msg) {
  if (!cond) {
    unreachable(msg);
  }
}
function _isValidProtocol(url) {
  switch (url?.protocol) {
    case "http:":
    case "https:":
    case "ftp:":
    case "mailto:":
    case "tel:":
      return true;
    default:
      return false;
  }
}
function createValidAbsoluteUrl(url, baseUrl = null, options = null) {
  if (!url) {
    return null;
  }
  try {
    if (options && typeof url === "string") {
      if (options.addDefaultProtocol && url.startsWith("www.")) {
        const dots = url.match(/\./g);
        if (dots?.length >= 2) {
          url = `http://${url}`;
        }
      }
      if (options.tryConvertEncoding) {
        try {
          url = stringToUTF8String(url);
        } catch {}
      }
    }
    const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);
    if (_isValidProtocol(absoluteUrl)) {
      return absoluteUrl;
    }
  } catch {}
  return null;
}
function shadow(obj, prop, value, nonSerializable = false) {
  Object.defineProperty(obj, prop, {
    value,
    enumerable: !nonSerializable,
    configurable: true,
    writable: false
  });
  return value;
}
const BaseException = function BaseExceptionClosure() {
  function BaseException(message, name) {
    if (this.constructor === BaseException) {
      unreachable("Cannot initialize BaseException.");
    }
    this.message = message;
    this.name = name;
  }
  BaseException.prototype = new Error();
  BaseException.constructor = BaseException;
  return BaseException;
}();
exports.BaseException = BaseException;
class PasswordException extends BaseException {
  constructor(msg, code) {
    super(msg, "PasswordException");
    this.code = code;
  }
}
exports.PasswordException = PasswordException;
class UnknownErrorException extends BaseException {
  constructor(msg, details) {
    super(msg, "UnknownErrorException");
    this.details = details;
  }
}
exports.UnknownErrorException = UnknownErrorException;
class InvalidPDFException extends BaseException {
  constructor(msg) {
    super(msg, "InvalidPDFException");
  }
}
exports.InvalidPDFException = InvalidPDFException;
class MissingPDFException extends BaseException {
  constructor(msg) {
    super(msg, "MissingPDFException");
  }
}
exports.MissingPDFException = MissingPDFException;
class UnexpectedResponseException extends BaseException {
  constructor(msg, status) {
    super(msg, "UnexpectedResponseException");
    this.status = status;
  }
}
exports.UnexpectedResponseException = UnexpectedResponseException;
class FormatError extends BaseException {
  constructor(msg) {
    super(msg, "FormatError");
  }
}
exports.FormatError = FormatError;
class AbortException extends BaseException {
  constructor(msg) {
    super(msg, "AbortException");
  }
}
exports.AbortException = AbortException;
function bytesToString(bytes) {
  if (typeof bytes !== "object" || bytes?.length === undefined) {
    unreachable("Invalid argument for bytesToString");
  }
  const length = bytes.length;
  const MAX_ARGUMENT_COUNT = 8192;
  if (length < MAX_ARGUMENT_COUNT) {
    return String.fromCharCode.apply(null, bytes);
  }
  const strBuf = [];
  for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {
    const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);
    const chunk = bytes.subarray(i, chunkEnd);
    strBuf.push(String.fromCharCode.apply(null, chunk));
  }
  return strBuf.join("");
}
function stringToBytes(str) {
  if (typeof str !== "string") {
    unreachable("Invalid argument for stringToBytes");
  }
  const length = str.length;
  const bytes = new Uint8Array(length);
  for (let i = 0; i < length; ++i) {
    bytes[i] = str.charCodeAt(i) & 0xff;
  }
  return bytes;
}
function string32(value) {
  return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
}
function objectSize(obj) {
  return Object.keys(obj).length;
}
function objectFromMap(map) {
  const obj = Object.create(null);
  for (const [key, value] of map) {
    obj[key] = value;
  }
  return obj;
}
function isLittleEndian() {
  const buffer8 = new Uint8Array(4);
  buffer8[0] = 1;
  const view32 = new Uint32Array(buffer8.buffer, 0, 1);
  return view32[0] === 1;
}
function isEvalSupported() {
  try {
    new Function("");
    return true;
  } catch {
    return false;
  }
}
class FeatureTest {
  static get isLittleEndian() {
    return shadow(this, "isLittleEndian", isLittleEndian());
  }
  static get isEvalSupported() {
    return shadow(this, "isEvalSupported", isEvalSupported());
  }
  static get isOffscreenCanvasSupported() {
    return shadow(this, "isOffscreenCanvasSupported", typeof OffscreenCanvas !== "undefined");
  }
  static get platform() {
    if (typeof navigator === "undefined") {
      return shadow(this, "platform", {
        isWin: false,
        isMac: false
      });
    }
    return shadow(this, "platform", {
      isWin: navigator.platform.includes("Win"),
      isMac: navigator.platform.includes("Mac")
    });
  }
  static get isCSSRoundSupported() {
    return shadow(this, "isCSSRoundSupported", globalThis.CSS?.supports?.("width: round(1.5px, 1px)"));
  }
}
exports.FeatureTest = FeatureTest;
const hexNumbers = [...Array(256).keys()].map(n => n.toString(16).padStart(2, "0"));
class Util {
  static makeHexColor(r, g, b) {
    return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;
  }
  static scaleMinMax(transform, minMax) {
    let temp;
    if (transform[0]) {
      if (transform[0] < 0) {
        temp = minMax[0];
        minMax[0] = minMax[1];
        minMax[1] = temp;
      }
      minMax[0] *= transform[0];
      minMax[1] *= transform[0];
      if (transform[3] < 0) {
        temp = minMax[2];
        minMax[2] = minMax[3];
        minMax[3] = temp;
      }
      minMax[2] *= transform[3];
      minMax[3] *= transform[3];
    } else {
      temp = minMax[0];
      minMax[0] = minMax[2];
      minMax[2] = temp;
      temp = minMax[1];
      minMax[1] = minMax[3];
      minMax[3] = temp;
      if (transform[1] < 0) {
        temp = minMax[2];
        minMax[2] = minMax[3];
        minMax[3] = temp;
      }
      minMax[2] *= transform[1];
      minMax[3] *= transform[1];
      if (transform[2] < 0) {
        temp = minMax[0];
        minMax[0] = minMax[1];
        minMax[1] = temp;
      }
      minMax[0] *= transform[2];
      minMax[1] *= transform[2];
    }
    minMax[0] += transform[4];
    minMax[1] += transform[4];
    minMax[2] += transform[5];
    minMax[3] += transform[5];
  }
  static transform(m1, m2) {
    return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]];
  }
  static applyTransform(p, m) {
    const xt = p[0] * m[0] + p[1] * m[2] + m[4];
    const yt = p[0] * m[1] + p[1] * m[3] + m[5];
    return [xt, yt];
  }
  static applyInverseTransform(p, m) {
    const d = m[0] * m[3] - m[1] * m[2];
    const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
    const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
    return [xt, yt];
  }
  static getAxialAlignedBoundingBox(r, m) {
    const p1 = this.applyTransform(r, m);
    const p2 = this.applyTransform(r.slice(2, 4), m);
    const p3 = this.applyTransform([r[0], r[3]], m);
    const p4 = this.applyTransform([r[2], r[1]], m);
    return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])];
  }
  static inverseTransform(m) {
    const d = m[0] * m[3] - m[1] * m[2];
    return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];
  }
  static singularValueDecompose2dScale(m) {
    const transpose = [m[0], m[2], m[1], m[3]];
    const a = m[0] * transpose[0] + m[1] * transpose[2];
    const b = m[0] * transpose[1] + m[1] * transpose[3];
    const c = m[2] * transpose[0] + m[3] * transpose[2];
    const d = m[2] * transpose[1] + m[3] * transpose[3];
    const first = (a + d) / 2;
    const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2;
    const sx = first + second || 1;
    const sy = first - second || 1;
    return [Math.sqrt(sx), Math.sqrt(sy)];
  }
  static normalizeRect(rect) {
    const r = rect.slice(0);
    if (rect[0] > rect[2]) {
      r[0] = rect[2];
      r[2] = rect[0];
    }
    if (rect[1] > rect[3]) {
      r[1] = rect[3];
      r[3] = rect[1];
    }
    return r;
  }
  static intersect(rect1, rect2) {
    const xLow = Math.max(Math.min(rect1[0], rect1[2]), Math.min(rect2[0], rect2[2]));
    const xHigh = Math.min(Math.max(rect1[0], rect1[2]), Math.max(rect2[0], rect2[2]));
    if (xLow > xHigh) {
      return null;
    }
    const yLow = Math.max(Math.min(rect1[1], rect1[3]), Math.min(rect2[1], rect2[3]));
    const yHigh = Math.min(Math.max(rect1[1], rect1[3]), Math.max(rect2[1], rect2[3]));
    if (yLow > yHigh) {
      return null;
    }
    return [xLow, yLow, xHigh, yHigh];
  }
  static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) {
    const tvalues = [],
      bounds = [[], []];
    let a, b, c, t, t1, t2, b2ac, sqrtb2ac;
    for (let i = 0; i < 2; ++i) {
      if (i === 0) {
        b = 6 * x0 - 12 * x1 + 6 * x2;
        a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;
        c = 3 * x1 - 3 * x0;
      } else {
        b = 6 * y0 - 12 * y1 + 6 * y2;
        a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;
        c = 3 * y1 - 3 * y0;
      }
      if (Math.abs(a) < 1e-12) {
        if (Math.abs(b) < 1e-12) {
          continue;
        }
        t = -c / b;
        if (0 < t && t < 1) {
          tvalues.push(t);
        }
        continue;
      }
      b2ac = b * b - 4 * c * a;
      sqrtb2ac = Math.sqrt(b2ac);
      if (b2ac < 0) {
        continue;
      }
      t1 = (-b + sqrtb2ac) / (2 * a);
      if (0 < t1 && t1 < 1) {
        tvalues.push(t1);
      }
      t2 = (-b - sqrtb2ac) / (2 * a);
      if (0 < t2 && t2 < 1) {
        tvalues.push(t2);
      }
    }
    let j = tvalues.length,
      mt;
    const jlen = j;
    while (j--) {
      t = tvalues[j];
      mt = 1 - t;
      bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3;
      bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3;
    }
    bounds[0][jlen] = x0;
    bounds[1][jlen] = y0;
    bounds[0][jlen + 1] = x3;
    bounds[1][jlen + 1] = y3;
    bounds[0].length = bounds[1].length = jlen + 2;
    return [Math.min(...bounds[0]), Math.min(...bounds[1]), Math.max(...bounds[0]), Math.max(...bounds[1])];
  }
}
exports.Util = Util;
const PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac];
function stringToPDFString(str) {
  if (str[0] >= "\xEF") {
    let encoding;
    if (str[0] === "\xFE" && str[1] === "\xFF") {
      encoding = "utf-16be";
    } else if (str[0] === "\xFF" && str[1] === "\xFE") {
      encoding = "utf-16le";
    } else if (str[0] === "\xEF" && str[1] === "\xBB" && str[2] === "\xBF") {
      encoding = "utf-8";
    }
    if (encoding) {
      try {
        const decoder = new TextDecoder(encoding, {
          fatal: true
        });
        const buffer = stringToBytes(str);
        return decoder.decode(buffer);
      } catch (ex) {
        warn(`stringToPDFString: "${ex}".`);
      }
    }
  }
  const strBuf = [];
  for (let i = 0, ii = str.length; i < ii; i++) {
    const code = PDFStringTranslateTable[str.charCodeAt(i)];
    strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));
  }
  return strBuf.join("");
}
function stringToUTF8String(str) {
  return decodeURIComponent(escape(str));
}
function utf8StringToString(str) {
  return unescape(encodeURIComponent(str));
}
function isArrayBuffer(v) {
  return typeof v === "object" && v?.byteLength !== undefined;
}
function isArrayEqual(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }
  for (let i = 0, ii = arr1.length; i < ii; i++) {
    if (arr1[i] !== arr2[i]) {
      return false;
    }
  }
  return true;
}
function getModificationDate(date = new Date()) {
  const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")];
  return buffer.join("");
}
class PromiseCapability {
  #settled = false;
  constructor() {
    this.promise = new Promise((resolve, reject) => {
      this.resolve = data => {
        this.#settled = true;
        resolve(data);
      };
      this.reject = reason => {
        this.#settled = true;
        reject(reason);
      };
    });
  }
  get settled() {
    return this.#settled;
  }
}
exports.PromiseCapability = PromiseCapability;
let NormalizeRegex = null;
let NormalizationMap = null;
function normalizeUnicode(str) {
  if (!NormalizeRegex) {
    NormalizeRegex = /([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu;
    NormalizationMap = new Map([["ſt", "ſt"]]);
  }
  return str.replaceAll(NormalizeRegex, (_, p1, p2) => {
    return p1 ? p1.normalize("NFKC") : NormalizationMap.get(p2);
  });
}
function getUuid() {
  if (typeof crypto !== "undefined" && typeof crypto?.randomUUID === "function") {
    return crypto.randomUUID();
  }
  const buf = new Uint8Array(32);
  if (typeof crypto !== "undefined" && typeof crypto?.getRandomValues === "function") {
    crypto.getRandomValues(buf);
  } else {
    for (let i = 0; i < 32; i++) {
      buf[i] = Math.floor(Math.random() * 255);
    }
  }
  return bytesToString(buf);
}
const AnnotationPrefix = "pdfjs_internal_id_";
exports.AnnotationPrefix = AnnotationPrefix;

/***/ }),
/* 3 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.XRefParseException = exports.XRefEntryException = exports.ParserEOFException = exports.PDF_VERSION_REGEXP = exports.MissingDataException = void 0;
exports.arrayBuffersToBytes = arrayBuffersToBytes;
exports.collectActions = collectActions;
exports.encodeToXmlString = encodeToXmlString;
exports.escapePDFName = escapePDFName;
exports.escapeString = escapeString;
exports.getInheritableProperty = getInheritableProperty;
exports.getLookupTableFactory = getLookupTableFactory;
exports.getNewAnnotationsMap = getNewAnnotationsMap;
exports.getRotationMatrix = getRotationMatrix;
exports.isAscii = isAscii;
exports.isWhiteSpace = isWhiteSpace;
exports.log2 = log2;
exports.numberToString = numberToString;
exports.parseXFAPath = parseXFAPath;
exports.readInt8 = readInt8;
exports.readUint16 = readUint16;
exports.readUint32 = readUint32;
exports.recoverJsURL = recoverJsURL;
exports.stringToUTF16HexString = stringToUTF16HexString;
exports.stringToUTF16String = stringToUTF16String;
exports.toRomanNumerals = toRomanNumerals;
exports.validateCSSFont = validateCSSFont;
exports.validateFontName = validateFontName;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(4);
var _base_stream = __w_pdfjs_require__(5);
const PDF_VERSION_REGEXP = /^[1-9]\.\d$/;
exports.PDF_VERSION_REGEXP = PDF_VERSION_REGEXP;
function getLookupTableFactory(initializer) {
  let lookup;
  return function () {
    if (initializer) {
      lookup = Object.create(null);
      initializer(lookup);
      initializer = null;
    }
    return lookup;
  };
}
class MissingDataException extends _util.BaseException {
  constructor(begin, end) {
    super(`Missing data [${begin}, ${end})`, "MissingDataException");
    this.begin = begin;
    this.end = end;
  }
}
exports.MissingDataException = MissingDataException;
class ParserEOFException extends _util.BaseException {
  constructor(msg) {
    super(msg, "ParserEOFException");
  }
}
exports.ParserEOFException = ParserEOFException;
class XRefEntryException extends _util.BaseException {
  constructor(msg) {
    super(msg, "XRefEntryException");
  }
}
exports.XRefEntryException = XRefEntryException;
class XRefParseException extends _util.BaseException {
  constructor(msg) {
    super(msg, "XRefParseException");
  }
}
exports.XRefParseException = XRefParseException;
function arrayBuffersToBytes(arr) {
  const length = arr.length;
  if (length === 0) {
    return new Uint8Array(0);
  }
  if (length === 1) {
    return new Uint8Array(arr[0]);
  }
  let dataLength = 0;
  for (let i = 0; i < length; i++) {
    dataLength += arr[i].byteLength;
  }
  const data = new Uint8Array(dataLength);
  let pos = 0;
  for (let i = 0; i < length; i++) {
    const item = new Uint8Array(arr[i]);
    data.set(item, pos);
    pos += item.byteLength;
  }
  return data;
}
function getInheritableProperty({
  dict,
  key,
  getArray = false,
  stopWhenFound = true
}) {
  let values;
  const visited = new _primitives.RefSet();
  while (dict instanceof _primitives.Dict && !(dict.objId && visited.has(dict.objId))) {
    if (dict.objId) {
      visited.put(dict.objId);
    }
    const value = getArray ? dict.getArray(key) : dict.get(key);
    if (value !== undefined) {
      if (stopWhenFound) {
        return value;
      }
      (values ||= []).push(value);
    }
    dict = dict.get("Parent");
  }
  return values;
}
const ROMAN_NUMBER_MAP = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM", "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC", "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"];
function toRomanNumerals(number, lowerCase = false) {
  (0, _util.assert)(Number.isInteger(number) && number > 0, "The number should be a positive integer.");
  const romanBuf = [];
  let pos;
  while (number >= 1000) {
    number -= 1000;
    romanBuf.push("M");
  }
  pos = number / 100 | 0;
  number %= 100;
  romanBuf.push(ROMAN_NUMBER_MAP[pos]);
  pos = number / 10 | 0;
  number %= 10;
  romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]);
  romanBuf.push(ROMAN_NUMBER_MAP[20 + number]);
  const romanStr = romanBuf.join("");
  return lowerCase ? romanStr.toLowerCase() : romanStr;
}
function log2(x) {
  if (x <= 0) {
    return 0;
  }
  return Math.ceil(Math.log2(x));
}
function readInt8(data, offset) {
  return data[offset] << 24 >> 24;
}
function readUint16(data, offset) {
  return data[offset] << 8 | data[offset + 1];
}
function readUint32(data, offset) {
  return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0;
}
function isWhiteSpace(ch) {
  return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a;
}
function parseXFAPath(path) {
  const positionPattern = /(.+)\[(\d+)\]$/;
  return path.split(".").map(component => {
    const m = component.match(positionPattern);
    if (m) {
      return {
        name: m[1],
        pos: parseInt(m[2], 10)
      };
    }
    return {
      name: component,
      pos: 0
    };
  });
}
function escapePDFName(str) {
  const buffer = [];
  let start = 0;
  for (let i = 0, ii = str.length; i < ii; i++) {
    const char = str.charCodeAt(i);
    if (char < 0x21 || char > 0x7e || char === 0x23 || char === 0x28 || char === 0x29 || char === 0x3c || char === 0x3e || char === 0x5b || char === 0x5d || char === 0x7b || char === 0x7d || char === 0x2f || char === 0x25) {
      if (start < i) {
        buffer.push(str.substring(start, i));
      }
      buffer.push(`#${char.toString(16)}`);
      start = i + 1;
    }
  }
  if (buffer.length === 0) {
    return str;
  }
  if (start < str.length) {
    buffer.push(str.substring(start, str.length));
  }
  return buffer.join("");
}
function escapeString(str) {
  return str.replaceAll(/([()\\\n\r])/g, match => {
    if (match === "\n") {
      return "\\n";
    } else if (match === "\r") {
      return "\\r";
    }
    return `\\${match}`;
  });
}
function _collectJS(entry, xref, list, parents) {
  if (!entry) {
    return;
  }
  let parent = null;
  if (entry instanceof _primitives.Ref) {
    if (parents.has(entry)) {
      return;
    }
    parent = entry;
    parents.put(parent);
    entry = xref.fetch(entry);
  }
  if (Array.isArray(entry)) {
    for (const element of entry) {
      _collectJS(element, xref, list, parents);
    }
  } else if (entry instanceof _primitives.Dict) {
    if ((0, _primitives.isName)(entry.get("S"), "JavaScript")) {
      const js = entry.get("JS");
      let code;
      if (js instanceof _base_stream.BaseStream) {
        code = js.getString();
      } else if (typeof js === "string") {
        code = js;
      }
      code &&= (0, _util.stringToPDFString)(code).replaceAll("\x00", "");
      if (code) {
        list.push(code);
      }
    }
    _collectJS(entry.getRaw("Next"), xref, list, parents);
  }
  if (parent) {
    parents.remove(parent);
  }
}
function collectActions(xref, dict, eventType) {
  const actions = Object.create(null);
  const additionalActionsDicts = getInheritableProperty({
    dict,
    key: "AA",
    stopWhenFound: false
  });
  if (additionalActionsDicts) {
    for (let i = additionalActionsDicts.length - 1; i >= 0; i--) {
      const additionalActions = additionalActionsDicts[i];
      if (!(additionalActions instanceof _primitives.Dict)) {
        continue;
      }
      for (const key of additionalActions.getKeys()) {
        const action = eventType[key];
        if (!action) {
          continue;
        }
        const actionDict = additionalActions.getRaw(key);
        const parents = new _primitives.RefSet();
        const list = [];
        _collectJS(actionDict, xref, list, parents);
        if (list.length > 0) {
          actions[action] = list;
        }
      }
    }
  }
  if (dict.has("A")) {
    const actionDict = dict.get("A");
    const parents = new _primitives.RefSet();
    const list = [];
    _collectJS(actionDict, xref, list, parents);
    if (list.length > 0) {
      actions.Action = list;
    }
  }
  return (0, _util.objectSize)(actions) > 0 ? actions : null;
}
const XMLEntities = {
  0x3c: "&lt;",
  0x3e: "&gt;",
  0x26: "&amp;",
  0x22: "&quot;",
  0x27: "&apos;"
};
function encodeToXmlString(str) {
  const buffer = [];
  let start = 0;
  for (let i = 0, ii = str.length; i < ii; i++) {
    const char = str.codePointAt(i);
    if (0x20 <= char && char <= 0x7e) {
      const entity = XMLEntities[char];
      if (entity) {
        if (start < i) {
          buffer.push(str.substring(start, i));
        }
        buffer.push(entity);
        start = i + 1;
      }
    } else {
      if (start < i) {
        buffer.push(str.substring(start, i));
      }
      buffer.push(`&#x${char.toString(16).toUpperCase()};`);
      if (char > 0xd7ff && (char < 0xe000 || char > 0xfffd)) {
        i++;
      }
      start = i + 1;
    }
  }
  if (buffer.length === 0) {
    return str;
  }
  if (start < str.length) {
    buffer.push(str.substring(start, str.length));
  }
  return buffer.join("");
}
function validateFontName(fontFamily, mustWarn = false) {
  const m = /^("|').*("|')$/.exec(fontFamily);
  if (m && m[1] === m[2]) {
    const re = new RegExp(`[^\\\\]${m[1]}`);
    if (re.test(fontFamily.slice(1, -1))) {
      if (mustWarn) {
        (0, _util.warn)(`FontFamily contains unescaped ${m[1]}: ${fontFamily}.`);
      }
      return false;
    }
  } else {
    for (const ident of fontFamily.split(/[ \t]+/)) {
      if (/^(\d|(-(\d|-)))/.test(ident) || !/^[\w-\\]+$/.test(ident)) {
        if (mustWarn) {
          (0, _util.warn)(`FontFamily contains invalid <custom-ident>: ${fontFamily}.`);
        }
        return false;
      }
    }
  }
  return true;
}
function validateCSSFont(cssFontInfo) {
  const DEFAULT_CSS_FONT_OBLIQUE = "14";
  const DEFAULT_CSS_FONT_WEIGHT = "400";
  const CSS_FONT_WEIGHT_VALUES = new Set(["100", "200", "300", "400", "500", "600", "700", "800", "900", "1000", "normal", "bold", "bolder", "lighter"]);
  const {
    fontFamily,
    fontWeight,
    italicAngle
  } = cssFontInfo;
  if (!validateFontName(fontFamily, true)) {
    return false;
  }
  const weight = fontWeight ? fontWeight.toString() : "";
  cssFontInfo.fontWeight = CSS_FONT_WEIGHT_VALUES.has(weight) ? weight : DEFAULT_CSS_FONT_WEIGHT;
  const angle = parseFloat(italicAngle);
  cssFontInfo.italicAngle = isNaN(angle) || angle < -90 || angle > 90 ? DEFAULT_CSS_FONT_OBLIQUE : italicAngle.toString();
  return true;
}
function recoverJsURL(str) {
  const URL_OPEN_METHODS = ["app.launchURL", "window.open", "xfa.host.gotoURL"];
  const regex = new RegExp("^\\s*(" + URL_OPEN_METHODS.join("|").replaceAll(".", "\\.") + ")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))", "i");
  const jsUrl = regex.exec(str);
  if (jsUrl?.[2]) {
    const url = jsUrl[2];
    let newWindow = false;
    if (jsUrl[3] === "true" && jsUrl[1] === "app.launchURL") {
      newWindow = true;
    }
    return {
      url,
      newWindow
    };
  }
  return null;
}
function numberToString(value) {
  if (Number.isInteger(value)) {
    return value.toString();
  }
  const roundedValue = Math.round(value * 100);
  if (roundedValue % 100 === 0) {
    return (roundedValue / 100).toString();
  }
  if (roundedValue % 10 === 0) {
    return value.toFixed(1);
  }
  return value.toFixed(2);
}
function getNewAnnotationsMap(annotationStorage) {
  if (!annotationStorage) {
    return null;
  }
  const newAnnotationsByPage = new Map();
  for (const [key, value] of annotationStorage) {
    if (!key.startsWith(_util.AnnotationEditorPrefix)) {
      continue;
    }
    let annotations = newAnnotationsByPage.get(value.pageIndex);
    if (!annotations) {
      annotations = [];
      newAnnotationsByPage.set(value.pageIndex, annotations);
    }
    annotations.push(value);
  }
  return newAnnotationsByPage.size > 0 ? newAnnotationsByPage : null;
}
function isAscii(str) {
  return /^[\x00-\x7F]*$/.test(str);
}
function stringToUTF16HexString(str) {
  const buf = [];
  for (let i = 0, ii = str.length; i < ii; i++) {
    const char = str.charCodeAt(i);
    buf.push((char >> 8 & 0xff).toString(16).padStart(2, "0"), (char & 0xff).toString(16).padStart(2, "0"));
  }
  return buf.join("");
}
function stringToUTF16String(str, bigEndian = false) {
  const buf = [];
  if (bigEndian) {
    buf.push("\xFE\xFF");
  }
  for (let i = 0, ii = str.length; i < ii; i++) {
    const char = str.charCodeAt(i);
    buf.push(String.fromCharCode(char >> 8 & 0xff), String.fromCharCode(char & 0xff));
  }
  return buf.join("");
}
function getRotationMatrix(rotation, width, height) {
  switch (rotation) {
    case 90:
      return [0, 1, -1, 0, width, 0];
    case 180:
      return [-1, 0, 0, -1, width, height];
    case 270:
      return [0, -1, 1, 0, 0, height];
    default:
      throw new Error("Invalid rotation");
  }
}

/***/ }),
/* 4 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.RefSetCache = exports.RefSet = exports.Ref = exports.Name = exports.EOF = exports.Dict = exports.Cmd = exports.CIRCULAR_REF = void 0;
exports.clearPrimitiveCaches = clearPrimitiveCaches;
exports.isCmd = isCmd;
exports.isDict = isDict;
exports.isName = isName;
exports.isRefsEqual = isRefsEqual;
var _util = __w_pdfjs_require__(2);
const CIRCULAR_REF = Symbol("CIRCULAR_REF");
exports.CIRCULAR_REF = CIRCULAR_REF;
const EOF = Symbol("EOF");
exports.EOF = EOF;
let CmdCache = Object.create(null);
let NameCache = Object.create(null);
let RefCache = Object.create(null);
function clearPrimitiveCaches() {
  CmdCache = Object.create(null);
  NameCache = Object.create(null);
  RefCache = Object.create(null);
}
class Name {
  constructor(name) {
    this.name = name;
  }
  static get(name) {
    return NameCache[name] ||= new Name(name);
  }
}
exports.Name = Name;
class Cmd {
  constructor(cmd) {
    this.cmd = cmd;
  }
  static get(cmd) {
    return CmdCache[cmd] ||= new Cmd(cmd);
  }
}
exports.Cmd = Cmd;
const nonSerializable = function nonSerializableClosure() {
  return nonSerializable;
};
class Dict {
  constructor(xref = null) {
    this._map = Object.create(null);
    this.xref = xref;
    this.objId = null;
    this.suppressEncryption = false;
    this.__nonSerializable__ = nonSerializable;
  }
  assignXref(newXref) {
    this.xref = newXref;
  }
  get size() {
    return Object.keys(this._map).length;
  }
  get(key1, key2, key3) {
    let value = this._map[key1];
    if (value === undefined && key2 !== undefined) {
      value = this._map[key2];
      if (value === undefined && key3 !== undefined) {
        value = this._map[key3];
      }
    }
    if (value instanceof Ref && this.xref) {
      return this.xref.fetch(value, this.suppressEncryption);
    }
    return value;
  }
  async getAsync(key1, key2, key3) {
    let value = this._map[key1];
    if (value === undefined && key2 !== undefined) {
      value = this._map[key2];
      if (value === undefined && key3 !== undefined) {
        value = this._map[key3];
      }
    }
    if (value instanceof Ref && this.xref) {
      return this.xref.fetchAsync(value, this.suppressEncryption);
    }
    return value;
  }
  getArray(key1, key2, key3) {
    let value = this._map[key1];
    if (value === undefined && key2 !== undefined) {
      value = this._map[key2];
      if (value === undefined && key3 !== undefined) {
        value = this._map[key3];
      }
    }
    if (value instanceof Ref && this.xref) {
      value = this.xref.fetch(value, this.suppressEncryption);
    }
    if (Array.isArray(value)) {
      value = value.slice();
      for (let i = 0, ii = value.length; i < ii; i++) {
        if (value[i] instanceof Ref && this.xref) {
          value[i] = this.xref.fetch(value[i], this.suppressEncryption);
        }
      }
    }
    return value;
  }
  getRaw(key) {
    return this._map[key];
  }
  getKeys() {
    return Object.keys(this._map);
  }
  getRawValues() {
    return Object.values(this._map);
  }
  set(key, value) {
    this._map[key] = value;
  }
  has(key) {
    return this._map[key] !== undefined;
  }
  forEach(callback) {
    for (const key in this._map) {
      callback(key, this.get(key));
    }
  }
  static get empty() {
    const emptyDict = new Dict(null);
    emptyDict.set = (key, value) => {
      (0, _util.unreachable)("Should not call `set` on the empty dictionary.");
    };
    return (0, _util.shadow)(this, "empty", emptyDict);
  }
  static merge({
    xref,
    dictArray,
    mergeSubDicts = false
  }) {
    const mergedDict = new Dict(xref),
      properties = new Map();
    for (const dict of dictArray) {
      if (!(dict instanceof Dict)) {
        continue;
      }
      for (const [key, value] of Object.entries(dict._map)) {
        let property = properties.get(key);
        if (property === undefined) {
          property = [];
          properties.set(key, property);
        } else if (!mergeSubDicts || !(value instanceof Dict)) {
          continue;
        }
        property.push(value);
      }
    }
    for (const [name, values] of properties) {
      if (values.length === 1 || !(values[0] instanceof Dict)) {
        mergedDict._map[name] = values[0];
        continue;
      }
      const subDict = new Dict(xref);
      for (const dict of values) {
        for (const [key, value] of Object.entries(dict._map)) {
          if (subDict._map[key] === undefined) {
            subDict._map[key] = value;
          }
        }
      }
      if (subDict.size > 0) {
        mergedDict._map[name] = subDict;
      }
    }
    properties.clear();
    return mergedDict.size > 0 ? mergedDict : Dict.empty;
  }
  clone() {
    const dict = new Dict(this.xref);
    for (const key of this.getKeys()) {
      dict.set(key, this.getRaw(key));
    }
    return dict;
  }
}
exports.Dict = Dict;
class Ref {
  constructor(num, gen) {
    this.num = num;
    this.gen = gen;
  }
  toString() {
    if (this.gen === 0) {
      return `${this.num}R`;
    }
    return `${this.num}R${this.gen}`;
  }
  static fromString(str) {
    const ref = RefCache[str];
    if (ref) {
      return ref;
    }
    const m = /^(\d+)R(\d*)$/.exec(str);
    if (!m || m[1] === "0") {
      return null;
    }
    return RefCache[str] = new Ref(parseInt(m[1]), !m[2] ? 0 : parseInt(m[2]));
  }
  static get(num, gen) {
    const key = gen === 0 ? `${num}R` : `${num}R${gen}`;
    return RefCache[key] ||= new Ref(num, gen);
  }
}
exports.Ref = Ref;
class RefSet {
  constructor(parent = null) {
    this._set = new Set(parent?._set);
  }
  has(ref) {
    return this._set.has(ref.toString());
  }
  put(ref) {
    this._set.add(ref.toString());
  }
  remove(ref) {
    this._set.delete(ref.toString());
  }
  [Symbol.iterator]() {
    return this._set.values();
  }
  clear() {
    this._set.clear();
  }
}
exports.RefSet = RefSet;
class RefSetCache {
  constructor() {
    this._map = new Map();
  }
  get size() {
    return this._map.size;
  }
  get(ref) {
    return this._map.get(ref.toString());
  }
  has(ref) {
    return this._map.has(ref.toString());
  }
  put(ref, obj) {
    this._map.set(ref.toString(), obj);
  }
  putAlias(ref, aliasRef) {
    this._map.set(ref.toString(), this.get(aliasRef));
  }
  [Symbol.iterator]() {
    return this._map.values();
  }
  clear() {
    this._map.clear();
  }
}
exports.RefSetCache = RefSetCache;
function isName(v, name) {
  return v instanceof Name && (name === undefined || v.name === name);
}
function isCmd(v, cmd) {
  return v instanceof Cmd && (cmd === undefined || v.cmd === cmd);
}
function isDict(v, type) {
  return v instanceof Dict && (type === undefined || isName(v.get("Type"), type));
}
function isRefsEqual(v1, v2) {
  return v1.num === v2.num && v1.gen === v2.gen;
}

/***/ }),
/* 5 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.BaseStream = void 0;
var _util = __w_pdfjs_require__(2);
class BaseStream {
  constructor() {
    if (this.constructor === BaseStream) {
      (0, _util.unreachable)("Cannot initialize BaseStream.");
    }
  }
  get length() {
    (0, _util.unreachable)("Abstract getter `length` accessed");
  }
  get isEmpty() {
    (0, _util.unreachable)("Abstract getter `isEmpty` accessed");
  }
  get isDataLoaded() {
    return (0, _util.shadow)(this, "isDataLoaded", true);
  }
  getByte() {
    (0, _util.unreachable)("Abstract method `getByte` called");
  }
  getBytes(length) {
    (0, _util.unreachable)("Abstract method `getBytes` called");
  }
  peekByte() {
    const peekedByte = this.getByte();
    if (peekedByte !== -1) {
      this.pos--;
    }
    return peekedByte;
  }
  peekBytes(length) {
    const bytes = this.getBytes(length);
    this.pos -= bytes.length;
    return bytes;
  }
  getUint16() {
    const b0 = this.getByte();
    const b1 = this.getByte();
    if (b0 === -1 || b1 === -1) {
      return -1;
    }
    return (b0 << 8) + b1;
  }
  getInt32() {
    const b0 = this.getByte();
    const b1 = this.getByte();
    const b2 = this.getByte();
    const b3 = this.getByte();
    return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
  }
  getByteRange(begin, end) {
    (0, _util.unreachable)("Abstract method `getByteRange` called");
  }
  getString(length) {
    return (0, _util.bytesToString)(this.getBytes(length));
  }
  skip(n) {
    this.pos += n || 1;
  }
  reset() {
    (0, _util.unreachable)("Abstract method `reset` called");
  }
  moveStart() {
    (0, _util.unreachable)("Abstract method `moveStart` called");
  }
  makeSubStream(start, length, dict = null) {
    (0, _util.unreachable)("Abstract method `makeSubStream` called");
  }
  getBaseStreams() {
    return null;
  }
}
exports.BaseStream = BaseStream;

/***/ }),
/* 6 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.NetworkPdfManager = exports.LocalPdfManager = void 0;
var _util = __w_pdfjs_require__(2);
var _chunked_stream = __w_pdfjs_require__(7);
var _core_utils = __w_pdfjs_require__(3);
var _document = __w_pdfjs_require__(9);
var _stream = __w_pdfjs_require__(8);
function parseDocBaseUrl(url) {
  if (url) {
    const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url);
    if (absoluteUrl) {
      return absoluteUrl.href;
    }
    (0, _util.warn)(`Invalid absolute docBaseUrl: "${url}".`);
  }
  return null;
}
class BasePdfManager {
  constructor(args) {
    if (this.constructor === BasePdfManager) {
      (0, _util.unreachable)("Cannot initialize BasePdfManager.");
    }
    this._docBaseUrl = parseDocBaseUrl(args.docBaseUrl);
    this._docId = args.docId;
    this._password = args.password;
    this.enableXfa = args.enableXfa;
    args.evaluatorOptions.isOffscreenCanvasSupported &&= _util.FeatureTest.isOffscreenCanvasSupported;
    this.evaluatorOptions = args.evaluatorOptions;
  }
  get docId() {
    return this._docId;
  }
  get password() {
    return this._password;
  }
  get docBaseUrl() {
    return this._docBaseUrl;
  }
  get catalog() {
    return this.pdfDocument.catalog;
  }
  ensureDoc(prop, args) {
    return this.ensure(this.pdfDocument, prop, args);
  }
  ensureXRef(prop, args) {
    return this.ensure(this.pdfDocument.xref, prop, args);
  }
  ensureCatalog(prop, args) {
    return this.ensure(this.pdfDocument.catalog, prop, args);
  }
  getPage(pageIndex) {
    return this.pdfDocument.getPage(pageIndex);
  }
  fontFallback(id, handler) {
    return this.pdfDocument.fontFallback(id, handler);
  }
  loadXfaFonts(handler, task) {
    return this.pdfDocument.loadXfaFonts(handler, task);
  }
  loadXfaImages() {
    return this.pdfDocument.loadXfaImages();
  }
  serializeXfaData(annotationStorage) {
    return this.pdfDocument.serializeXfaData(annotationStorage);
  }
  cleanup(manuallyTriggered = false) {
    return this.pdfDocument.cleanup(manuallyTriggered);
  }
  async ensure(obj, prop, args) {
    (0, _util.unreachable)("Abstract method `ensure` called");
  }
  requestRange(begin, end) {
    (0, _util.unreachable)("Abstract method `requestRange` called");
  }
  requestLoadedStream(noFetch = false) {
    (0, _util.unreachable)("Abstract method `requestLoadedStream` called");
  }
  sendProgressiveData(chunk) {
    (0, _util.unreachable)("Abstract method `sendProgressiveData` called");
  }
  updatePassword(password) {
    this._password = password;
  }
  terminate(reason) {
    (0, _util.unreachable)("Abstract method `terminate` called");
  }
}
class LocalPdfManager extends BasePdfManager {
  constructor(args) {
    super(args);
    const stream = new _stream.Stream(args.source);
    this.pdfDocument = new _document.PDFDocument(this, stream);
    this._loadedStreamPromise = Promise.resolve(stream);
  }
  async ensure(obj, prop, args) {
    const value = obj[prop];
    if (typeof value === "function") {
      return value.apply(obj, args);
    }
    return value;
  }
  requestRange(begin, end) {
    return Promise.resolve();
  }
  requestLoadedStream(noFetch = false) {
    return this._loadedStreamPromise;
  }
  terminate(reason) {}
}
exports.LocalPdfManager = LocalPdfManager;
class NetworkPdfManager extends BasePdfManager {
  constructor(args) {
    super(args);
    this.streamManager = new _chunked_stream.ChunkedStreamManager(args.source, {
      msgHandler: args.handler,
      length: args.length,
      disableAutoFetch: args.disableAutoFetch,
      rangeChunkSize: args.rangeChunkSize
    });
    this.pdfDocument = new _document.PDFDocument(this, this.streamManager.getStream());
  }
  async ensure(obj, prop, args) {
    try {
      const value = obj[prop];
      if (typeof value === "function") {
        return value.apply(obj, args);
      }
      return value;
    } catch (ex) {
      if (!(ex instanceof _core_utils.MissingDataException)) {
        throw ex;
      }
      await this.requestRange(ex.begin, ex.end);
      return this.ensure(obj, prop, args);
    }
  }
  requestRange(begin, end) {
    return this.streamManager.requestRange(begin, end);
  }
  requestLoadedStream(noFetch = false) {
    return this.streamManager.requestAllChunks(noFetch);
  }
  sendProgressiveData(chunk) {
    this.streamManager.onReceiveData({
      chunk
    });
  }
  terminate(reason) {
    this.streamManager.abort(reason);
  }
}
exports.NetworkPdfManager = NetworkPdfManager;

/***/ }),
/* 7 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.ChunkedStreamManager = exports.ChunkedStream = void 0;
var _core_utils = __w_pdfjs_require__(3);
var _util = __w_pdfjs_require__(2);
var _stream = __w_pdfjs_require__(8);
class ChunkedStream extends _stream.Stream {
  constructor(length, chunkSize, manager) {
    super(new Uint8Array(length), 0, length, null);
    this.chunkSize = chunkSize;
    this._loadedChunks = new Set();
    this.numChunks = Math.ceil(length / chunkSize);
    this.manager = manager;
    this.progressiveDataLength = 0;
    this.lastSuccessfulEnsureByteChunk = -1;
  }
  getMissingChunks() {
    const chunks = [];
    for (let chunk = 0, n = this.numChunks; chunk < n; ++chunk) {
      if (!this._loadedChunks.has(chunk)) {
        chunks.push(chunk);
      }
    }
    return chunks;
  }
  get numChunksLoaded() {
    return this._loadedChunks.size;
  }
  get isDataLoaded() {
    return this.numChunksLoaded === this.numChunks;
  }
  onReceiveData(begin, chunk) {
    const chunkSize = this.chunkSize;
    if (begin % chunkSize !== 0) {
      throw new Error(`Bad begin offset: ${begin}`);
    }
    const end = begin + chunk.byteLength;
    if (end % chunkSize !== 0 && end !== this.bytes.length) {
      throw new Error(`Bad end offset: ${end}`);
    }
    this.bytes.set(new Uint8Array(chunk), begin);
    const beginChunk = Math.floor(begin / chunkSize);
    const endChunk = Math.floor((end - 1) / chunkSize) + 1;
    for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {
      this._loadedChunks.add(curChunk);
    }
  }
  onReceiveProgressiveData(data) {
    let position = this.progressiveDataLength;
    const beginChunk = Math.floor(position / this.chunkSize);
    this.bytes.set(new Uint8Array(data), position);
    position += data.byteLength;
    this.progressiveDataLength = position;
    const endChunk = position >= this.end ? this.numChunks : Math.floor(position / this.chunkSize);
    for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {
      this._loadedChunks.add(curChunk);
    }
  }
  ensureByte(pos) {
    if (pos < this.progressiveDataLength) {
      return;
    }
    const chunk = Math.floor(pos / this.chunkSize);
    if (chunk > this.numChunks) {
      return;
    }
    if (chunk === this.lastSuccessfulEnsureByteChunk) {
      return;
    }
    if (!this._loadedChunks.has(chunk)) {
      throw new _core_utils.MissingDataException(pos, pos + 1);
    }
    this.lastSuccessfulEnsureByteChunk = chunk;
  }
  ensureRange(begin, end) {
    if (begin >= end) {
      return;
    }
    if (end <= this.progressiveDataLength) {
      return;
    }
    const beginChunk = Math.floor(begin / this.chunkSize);
    if (beginChunk > this.numChunks) {
      return;
    }
    const endChunk = Math.min(Math.floor((end - 1) / this.chunkSize) + 1, this.numChunks);
    for (let chunk = beginChunk; chunk < endChunk; ++chunk) {
      if (!this._loadedChunks.has(chunk)) {
        throw new _core_utils.MissingDataException(begin, end);
      }
    }
  }
  nextEmptyChunk(beginChunk) {
    const numChunks = this.numChunks;
    for (let i = 0; i < numChunks; ++i) {
      const chunk = (beginChunk + i) % numChunks;
      if (!this._loadedChunks.has(chunk)) {
        return chunk;
      }
    }
    return null;
  }
  hasChunk(chunk) {
    return this._loadedChunks.has(chunk);
  }
  getByte() {
    const pos = this.pos;
    if (pos >= this.end) {
      return -1;
    }
    if (pos >= this.progressiveDataLength) {
      this.ensureByte(pos);
    }
    return this.bytes[this.pos++];
  }
  getBytes(length) {
    const bytes = this.bytes;
    const pos = this.pos;
    const strEnd = this.end;
    if (!length) {
      if (strEnd > this.progressiveDataLength) {
        this.ensureRange(pos, strEnd);
      }
      return bytes.subarray(pos, strEnd);
    }
    let end = pos + length;
    if (end > strEnd) {
      end = strEnd;
    }
    if (end > this.progressiveDataLength) {
      this.ensureRange(pos, end);
    }
    this.pos = end;
    return bytes.subarray(pos, end);
  }
  getByteRange(begin, end) {
    if (begin < 0) {
      begin = 0;
    }
    if (end > this.end) {
      end = this.end;
    }
    if (end > this.progressiveDataLength) {
      this.ensureRange(begin, end);
    }
    return this.bytes.subarray(begin, end);
  }
  makeSubStream(start, length, dict = null) {
    if (length) {
      if (start + length > this.progressiveDataLength) {
        this.ensureRange(start, start + length);
      }
    } else if (start >= this.progressiveDataLength) {
      this.ensureByte(start);
    }
    function ChunkedStreamSubstream() {}
    ChunkedStreamSubstream.prototype = Object.create(this);
    ChunkedStreamSubstream.prototype.getMissingChunks = function () {
      const chunkSize = this.chunkSize;
      const beginChunk = Math.floor(this.start / chunkSize);
      const endChunk = Math.floor((this.end - 1) / chunkSize) + 1;
      const missingChunks = [];
      for (let chunk = beginChunk; chunk < endChunk; ++chunk) {
        if (!this._loadedChunks.has(chunk)) {
          missingChunks.push(chunk);
        }
      }
      return missingChunks;
    };
    Object.defineProperty(ChunkedStreamSubstream.prototype, "isDataLoaded", {
      get() {
        if (this.numChunksLoaded === this.numChunks) {
          return true;
        }
        return this.getMissingChunks().length === 0;
      },
      configurable: true
    });
    const subStream = new ChunkedStreamSubstream();
    subStream.pos = subStream.start = start;
    subStream.end = start + length || this.end;
    subStream.dict = dict;
    return subStream;
  }
  getBaseStreams() {
    return [this];
  }
}
exports.ChunkedStream = ChunkedStream;
class ChunkedStreamManager {
  constructor(pdfNetworkStream, args) {
    this.length = args.length;
    this.chunkSize = args.rangeChunkSize;
    this.stream = new ChunkedStream(this.length, this.chunkSize, this);
    this.pdfNetworkStream = pdfNetworkStream;
    this.disableAutoFetch = args.disableAutoFetch;
    this.msgHandler = args.msgHandler;
    this.currRequestId = 0;
    this._chunksNeededByRequest = new Map();
    this._requestsByChunk = new Map();
    this._promisesByRequest = new Map();
    this.progressiveDataLength = 0;
    this.aborted = false;
    this._loadedStreamCapability = new _util.PromiseCapability();
  }
  sendRequest(begin, end) {
    const rangeReader = this.pdfNetworkStream.getRangeReader(begin, end);
    if (!rangeReader.isStreamingSupported) {
      rangeReader.onProgress = this.onProgress.bind(this);
    }
    let chunks = [],
      loaded = 0;
    return new Promise((resolve, reject) => {
      const readChunk = ({
        value,
        done
      }) => {
        try {
          if (done) {
            const chunkData = (0, _core_utils.arrayBuffersToBytes)(chunks);
            chunks = null;
            resolve(chunkData);
            return;
          }
          loaded += value.byteLength;
          if (rangeReader.isStreamingSupported) {
            this.onProgress({
              loaded
            });
          }
          chunks.push(value);
          rangeReader.read().then(readChunk, reject);
        } catch (e) {
          reject(e);
        }
      };
      rangeReader.read().then(readChunk, reject);
    }).then(data => {
      if (this.aborted) {
        return;
      }
      this.onReceiveData({
        chunk: data,
        begin
      });
    });
  }
  requestAllChunks(noFetch = false) {
    if (!noFetch) {
      const missingChunks = this.stream.getMissingChunks();
      this._requestChunks(missingChunks);
    }
    return this._loadedStreamCapability.promise;
  }
  _requestChunks(chunks) {
    const requestId = this.currRequestId++;
    const chunksNeeded = new Set();
    this._chunksNeededByRequest.set(requestId, chunksNeeded);
    for (const chunk of chunks) {
      if (!this.stream.hasChunk(chunk)) {
        chunksNeeded.add(chunk);
      }
    }
    if (chunksNeeded.size === 0) {
      return Promise.resolve();
    }
    const capability = new _util.PromiseCapability();
    this._promisesByRequest.set(requestId, capability);
    const chunksToRequest = [];
    for (const chunk of chunksNeeded) {
      let requestIds = this._requestsByChunk.get(chunk);
      if (!requestIds) {
        requestIds = [];
        this._requestsByChunk.set(chunk, requestIds);
        chunksToRequest.push(chunk);
      }
      requestIds.push(requestId);
    }
    if (chunksToRequest.length > 0) {
      const groupedChunksToRequest = this.groupChunks(chunksToRequest);
      for (const groupedChunk of groupedChunksToRequest) {
        const begin = groupedChunk.beginChunk * this.chunkSize;
        const end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length);
        this.sendRequest(begin, end).catch(capability.reject);
      }
    }
    return capability.promise.catch(reason => {
      if (this.aborted) {
        return;
      }
      throw reason;
    });
  }
  getStream() {
    return this.stream;
  }
  requestRange(begin, end) {
    end = Math.min(end, this.length);
    const beginChunk = this.getBeginChunk(begin);
    const endChunk = this.getEndChunk(end);
    const chunks = [];
    for (let chunk = beginChunk; chunk < endChunk; ++chunk) {
      chunks.push(chunk);
    }
    return this._requestChunks(chunks);
  }
  requestRanges(ranges = []) {
    const chunksToRequest = [];
    for (const range of ranges) {
      const beginChunk = this.getBeginChunk(range.begin);
      const endChunk = this.getEndChunk(range.end);
      for (let chunk = beginChunk; chunk < endChunk; ++chunk) {
        if (!chunksToRequest.includes(chunk)) {
          chunksToRequest.push(chunk);
        }
      }
    }
    chunksToRequest.sort(function (a, b) {
      return a - b;
    });
    return this._requestChunks(chunksToRequest);
  }
  groupChunks(chunks) {
    const groupedChunks = [];
    let beginChunk = -1;
    let prevChunk = -1;
    for (let i = 0, ii = chunks.length; i < ii; ++i) {
      const chunk = chunks[i];
      if (beginChunk < 0) {
        beginChunk = chunk;
      }
      if (prevChunk >= 0 && prevChunk + 1 !== chunk) {
        groupedChunks.push({
          beginChunk,
          endChunk: prevChunk + 1
        });
        beginChunk = chunk;
      }
      if (i + 1 === chunks.length) {
        groupedChunks.push({
          beginChunk,
          endChunk: chunk + 1
        });
      }
      prevChunk = chunk;
    }
    return groupedChunks;
  }
  onProgress(args) {
    this.msgHandler.send("DocProgress", {
      loaded: this.stream.numChunksLoaded * this.chunkSize + args.loaded,
      total: this.length
    });
  }
  onReceiveData(args) {
    const chunk = args.chunk;
    const isProgressive = args.begin === undefined;
    const begin = isProgressive ? this.progressiveDataLength : args.begin;
    const end = begin + chunk.byteLength;
    const beginChunk = Math.floor(begin / this.chunkSize);
    const endChunk = end < this.length ? Math.floor(end / this.chunkSize) : Math.ceil(end / this.chunkSize);
    if (isProgressive) {
      this.stream.onReceiveProgressiveData(chunk);
      this.progressiveDataLength = end;
    } else {
      this.stream.onReceiveData(begin, chunk);
    }
    if (this.stream.isDataLoaded) {
      this._loadedStreamCapability.resolve(this.stream);
    }
    const loadedRequests = [];
    for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {
      const requestIds = this._requestsByChunk.get(curChunk);
      if (!requestIds) {
        continue;
      }
      this._requestsByChunk.delete(curChunk);
      for (const requestId of requestIds) {
        const chunksNeeded = this._chunksNeededByRequest.get(requestId);
        if (chunksNeeded.has(curChunk)) {
          chunksNeeded.delete(curChunk);
        }
        if (chunksNeeded.size > 0) {
          continue;
        }
        loadedRequests.push(requestId);
      }
    }
    if (!this.disableAutoFetch && this._requestsByChunk.size === 0) {
      let nextEmptyChunk;
      if (this.stream.numChunksLoaded === 1) {
        const lastChunk = this.stream.numChunks - 1;
        if (!this.stream.hasChunk(lastChunk)) {
          nextEmptyChunk = lastChunk;
        }
      } else {
        nextEmptyChunk = this.stream.nextEmptyChunk(endChunk);
      }
      if (Number.isInteger(nextEmptyChunk)) {
        this._requestChunks([nextEmptyChunk]);
      }
    }
    for (const requestId of loadedRequests) {
      const capability = this._promisesByRequest.get(requestId);
      this._promisesByRequest.delete(requestId);
      capability.resolve();
    }
    this.msgHandler.send("DocProgress", {
      loaded: this.stream.numChunksLoaded * this.chunkSize,
      total: this.length
    });
  }
  onError(err) {
    this._loadedStreamCapability.reject(err);
  }
  getBeginChunk(begin) {
    return Math.floor(begin / this.chunkSize);
  }
  getEndChunk(end) {
    return Math.floor((end - 1) / this.chunkSize) + 1;
  }
  abort(reason) {
    this.aborted = true;
    this.pdfNetworkStream?.cancelAllRequests(reason);
    for (const capability of this._promisesByRequest.values()) {
      capability.reject(reason);
    }
  }
}
exports.ChunkedStreamManager = ChunkedStreamManager;

/***/ }),
/* 8 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.StringStream = exports.Stream = exports.NullStream = void 0;
var _base_stream = __w_pdfjs_require__(5);
var _util = __w_pdfjs_require__(2);
class Stream extends _base_stream.BaseStream {
  constructor(arrayBuffer, start, length, dict) {
    super();
    this.bytes = arrayBuffer instanceof Uint8Array ? arrayBuffer : new Uint8Array(arrayBuffer);
    this.start = start || 0;
    this.pos = this.start;
    this.end = start + length || this.bytes.length;
    this.dict = dict;
  }
  get length() {
    return this.end - this.start;
  }
  get isEmpty() {
    return this.length === 0;
  }
  getByte() {
    if (this.pos >= this.end) {
      return -1;
    }
    return this.bytes[this.pos++];
  }
  getBytes(length) {
    const bytes = this.bytes;
    const pos = this.pos;
    const strEnd = this.end;
    if (!length) {
      return bytes.subarray(pos, strEnd);
    }
    let end = pos + length;
    if (end > strEnd) {
      end = strEnd;
    }
    this.pos = end;
    return bytes.subarray(pos, end);
  }
  getByteRange(begin, end) {
    if (begin < 0) {
      begin = 0;
    }
    if (end > this.end) {
      end = this.end;
    }
    return this.bytes.subarray(begin, end);
  }
  reset() {
    this.pos = this.start;
  }
  moveStart() {
    this.start = this.pos;
  }
  makeSubStream(start, length, dict = null) {
    return new Stream(this.bytes.buffer, start, length, dict);
  }
}
exports.Stream = Stream;
class StringStream extends Stream {
  constructor(str) {
    super((0, _util.stringToBytes)(str));
  }
}
exports.StringStream = StringStream;
class NullStream extends Stream {
  constructor() {
    super(new Uint8Array(0));
  }
}
exports.NullStream = NullStream;

/***/ }),
/* 9 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.Page = exports.PDFDocument = void 0;
var _util = __w_pdfjs_require__(2);
var _annotation = __w_pdfjs_require__(10);
var _core_utils = __w_pdfjs_require__(3);
var _primitives = __w_pdfjs_require__(4);
var _xfa_fonts = __w_pdfjs_require__(51);
var _base_stream = __w_pdfjs_require__(5);
var _crypto = __w_pdfjs_require__(74);
var _catalog = __w_pdfjs_require__(66);
var _cleanup_helper = __w_pdfjs_require__(68);
var _dataset_reader = __w_pdfjs_require__(102);
var _parser = __w_pdfjs_require__(16);
var _stream = __w_pdfjs_require__(8);
var _object_loader = __w_pdfjs_require__(76);
var _operator_list = __w_pdfjs_require__(64);
var _evaluator = __w_pdfjs_require__(13);
var _decode_stream = __w_pdfjs_require__(18);
var _struct_tree = __w_pdfjs_require__(72);
var _writer = __w_pdfjs_require__(73);
var _factory = __w_pdfjs_require__(77);
var _xref = __w_pdfjs_require__(103);
const DEFAULT_USER_UNIT = 1.0;
const LETTER_SIZE_MEDIABOX = [0, 0, 612, 792];
class Page {
  constructor({
    pdfManager,
    xref,
    pageIndex,
    pageDict,
    ref,
    globalIdFactory,
    fontCache,
    builtInCMapCache,
    standardFontDataCache,
    globalImageCache,
    systemFontCache,
    nonBlendModesSet,
    xfaFactory
  }) {
    this.pdfManager = pdfManager;
    this.pageIndex = pageIndex;
    this.pageDict = pageDict;
    this.xref = xref;
    this.ref = ref;
    this.fontCache = fontCache;
    this.builtInCMapCache = builtInCMapCache;
    this.standardFontDataCache = standardFontDataCache;
    this.globalImageCache = globalImageCache;
    this.systemFontCache = systemFontCache;
    this.nonBlendModesSet = nonBlendModesSet;
    this.evaluatorOptions = pdfManager.evaluatorOptions;
    this.resourcesPromise = null;
    this.xfaFactory = xfaFactory;
    const idCounters = {
      obj: 0
    };
    this._localIdFactory = class extends globalIdFactory {
      static createObjId() {
        return `p${pageIndex}_${++idCounters.obj}`;
      }
      static getPageObjId() {
        return `p${ref.toString()}`;
      }
    };
  }
  _getInheritableProperty(key, getArray = false) {
    const value = (0, _core_utils.getInheritableProperty)({
      dict: this.pageDict,
      key,
      getArray,
      stopWhenFound: false
    });
    if (!Array.isArray(value)) {
      return value;
    }
    if (value.length === 1 || !(value[0] instanceof _primitives.Dict)) {
      return value[0];
    }
    return _primitives.Dict.merge({
      xref: this.xref,
      dictArray: value
    });
  }
  get content() {
    return this.pageDict.getArray("Contents");
  }
  get resources() {
    const resources = this._getInheritableProperty("Resources");
    return (0, _util.shadow)(this, "resources", resources instanceof _primitives.Dict ? resources : _primitives.Dict.empty);
  }
  _getBoundingBox(name) {
    if (this.xfaData) {
      return this.xfaData.bbox;
    }
    let box = this._getInheritableProperty(name, true);
    if (Array.isArray(box) && box.length === 4) {
      box = _util.Util.normalizeRect(box);
      if (box[2] - box[0] > 0 && box[3] - box[1] > 0) {
        return box;
      }
      (0, _util.warn)(`Empty, or invalid, /${name} entry.`);
    }
    return null;
  }
  get mediaBox() {
    return (0, _util.shadow)(this, "mediaBox", this._getBoundingBox("MediaBox") || LETTER_SIZE_MEDIABOX);
  }
  get cropBox() {
    return (0, _util.shadow)(this, "cropBox", this._getBoundingBox("CropBox") || this.mediaBox);
  }
  get userUnit() {
    let obj = this.pageDict.get("UserUnit");
    if (typeof obj !== "number" || obj <= 0) {
      obj = DEFAULT_USER_UNIT;
    }
    return (0, _util.shadow)(this, "userUnit", obj);
  }
  get view() {
    const {
      cropBox,
      mediaBox
    } = this;
    if (cropBox !== mediaBox && !(0, _util.isArrayEqual)(cropBox, mediaBox)) {
      const box = _util.Util.intersect(cropBox, mediaBox);
      if (box && box[2] - box[0] > 0 && box[3] - box[1] > 0) {
        return (0, _util.shadow)(this, "view", box);
      }
      (0, _util.warn)("Empty /CropBox and /MediaBox intersection.");
    }
    return (0, _util.shadow)(this, "view", mediaBox);
  }
  get rotate() {
    let rotate = this._getInheritableProperty("Rotate") || 0;
    if (rotate % 90 !== 0) {
      rotate = 0;
    } else if (rotate >= 360) {
      rotate %= 360;
    } else if (rotate < 0) {
      rotate = (rotate % 360 + 360) % 360;
    }
    return (0, _util.shadow)(this, "rotate", rotate);
  }
  _onSubStreamError(reason, objId) {
    if (this.evaluatorOptions.ignoreErrors) {
      (0, _util.warn)(`getContentStream - ignoring sub-stream (${objId}): "${reason}".`);
      return;
    }
    throw reason;
  }
  getContentStream() {
    return this.pdfManager.ensure(this, "content").then(content => {
      if (content instanceof _base_stream.BaseStream) {
        return content;
      }
      if (Array.isArray(content)) {
        return new _decode_stream.StreamsSequenceStream(content, this._onSubStreamError.bind(this));
      }
      return new _stream.NullStream();
    });
  }
  get xfaData() {
    return (0, _util.shadow)(this, "xfaData", this.xfaFactory ? {
      bbox: this.xfaFactory.getBoundingBox(this.pageIndex)
    } : null);
  }
  #replaceIdByRef(annotations, deletedAnnotations, existingAnnotations) {
    for (const annotation of annotations) {
      if (annotation.id) {
        const ref = _primitives.Ref.fromString(annotation.id);
        if (!ref) {
          (0, _util.warn)(`A non-linked annotation cannot be modified: ${annotation.id}`);
          continue;
        }
        if (annotation.deleted) {
          deletedAnnotations.put(ref);
          continue;
        }
        existingAnnotations?.put(ref);
        annotation.ref = ref;
        delete annotation.id;
      }
    }
  }
  async saveNewAnnotations(handler, task, annotations, imagePromises) {
    if (this.xfaFactory) {
      throw new Error("XFA: Cannot save new annotations.");
    }
    const partialEvaluator = new _evaluator.PartialEvaluator({
      xref: this.xref,
      handler,
      pageIndex: this.pageIndex,
      idFactory: this._localIdFactory,
      fontCache: this.fontCache,
      builtInCMapCache: this.builtInCMapCache,
      standardFontDataCache: this.standardFontDataCache,
      globalImageCache: this.globalImageCache,
      systemFontCache: this.systemFontCache,
      options: this.evaluatorOptions
    });
    const deletedAnnotations = new _primitives.RefSet();
    const existingAnnotations = new _primitives.RefSet();
    this.#replaceIdByRef(annotations, deletedAnnotations, existingAnnotations);
    const pageDict = this.pageDict;
    const annotationsArray = this.annotations.filter(a => !(a instanceof _primitives.Ref && deletedAnnotations.has(a)));
    const newData = await _annotation.AnnotationFactory.saveNewAnnotations(partialEvaluator, task, annotations, imagePromises);
    for (const {
      ref
    } of newData.annotations) {
      if (ref instanceof _primitives.Ref && !existingAnnotations.has(ref)) {
        annotationsArray.push(ref);
      }
    }
    const savedDict = pageDict.get("Annots");
    pageDict.set("Annots", annotationsArray);
    const buffer = [];
    await (0, _writer.writeObject)(this.ref, pageDict, buffer, this.xref);
    if (savedDict) {
      pageDict.set("Annots", savedDict);
    }
    const objects = newData.dependencies;
    objects.push({
      ref: this.ref,
      data: buffer.join("")
    }, ...newData.annotations);
    return objects;
  }
  save(handler, task, annotationStorage) {
    const partialEvaluator = new _evaluator.PartialEvaluator({
      xref: this.xref,
      handler,
      pageIndex: this.pageIndex,
      idFactory: this._localIdFactory,
      fontCache: this.fontCache,
      builtInCMapCache: this.builtInCMapCache,
      standardFontDataCache: this.standardFontDataCache,
      globalImageCache: this.globalImageCache,
      systemFontCache: this.systemFontCache,
      options: this.evaluatorOptions
    });
    return this._parsedAnnotations.then(function (annotations) {
      const newRefsPromises = [];
      for (const annotation of annotations) {
        if (!annotation.mustBePrinted(annotationStorage)) {
          continue;
        }
        newRefsPromises.push(annotation.save(partialEvaluator, task, annotationStorage).catch(function (reason) {
          (0, _util.warn)("save - ignoring annotation data during " + `"${task.name}" task: "${reason}".`);
          return null;
        }));
      }
      return Promise.all(newRefsPromises).then(function (newRefs) {
        return newRefs.filter(newRef => !!newRef);
      });
    });
  }
  loadResources(keys) {
    if (!this.resourcesPromise) {
      this.resourcesPromise = this.pdfManager.ensure(this, "resources");
    }
    return this.resourcesPromise.then(() => {
      const objectLoader = new _object_loader.ObjectLoader(this.resources, keys, this.xref);
      return objectLoader.load();
    });
  }
  getOperatorList({
    handler,
    sink,
    task,
    intent,
    cacheKey,
    annotationStorage = null
  }) {
    const contentStreamPromise = this.getContentStream();
    const resourcesPromise = this.loadResources(["ColorSpace", "ExtGState", "Font", "Pattern", "Properties", "Shading", "XObject"]);
    const partialEvaluator = new _evaluator.PartialEvaluator({
      xref: this.xref,
      handler,
      pageIndex: this.pageIndex,
      idFactory: this._localIdFactory,
      fontCache: this.fontCache,
      builtInCMapCache: this.builtInCMapCache,
      standardFontDataCache: this.standardFontDataCache,
      globalImageCache: this.globalImageCache,
      systemFontCache: this.systemFontCache,
      options: this.evaluatorOptions
    });
    const newAnnotationsByPage = !this.xfaFactory ? (0, _core_utils.getNewAnnotationsMap)(annotationStorage) : null;
    let deletedAnnotations = null;
    let newAnnotationsPromise = Promise.resolve(null);
    if (newAnnotationsByPage) {
      const newAnnotations = newAnnotationsByPage.get(this.pageIndex);
      if (newAnnotations) {
        const annotationGlobalsPromise = this.pdfManager.ensureDoc("annotationGlobals");
        let imagePromises;
        const missingBitmaps = new Set();
        for (const {
          bitmapId,
          bitmap
        } of newAnnotations) {
          if (bitmapId && !bitmap && !missingBitmaps.has(bitmapId)) {
            missingBitmaps.add(bitmapId);
          }
        }
        const {
          isOffscreenCanvasSupported
        } = this.evaluatorOptions;
        if (missingBitmaps.size > 0) {
          const annotationWithBitmaps = newAnnotations.slice();
          for (const [key, annotation] of annotationStorage) {
            if (!key.startsWith(_util.AnnotationEditorPrefix)) {
              continue;
            }
            if (annotation.bitmap && missingBitmaps.has(annotation.bitmapId)) {
              annotationWithBitmaps.push(annotation);
            }
          }
          imagePromises = _annotation.AnnotationFactory.generateImages(annotationWithBitmaps, this.xref, isOffscreenCanvasSupported);
        } else {
          imagePromises = _annotation.AnnotationFactory.generateImages(newAnnotations, this.xref, isOffscreenCanvasSupported);
        }
        deletedAnnotations = new _primitives.RefSet();
        this.#replaceIdByRef(newAnnotations, deletedAnnotations, null);
        newAnnotationsPromise = annotationGlobalsPromise.then(annotationGlobals => {
          if (!annotationGlobals) {
            return null;
          }
          return _annotation.AnnotationFactory.printNewAnnotations(annotationGlobals, partialEvaluator, task, newAnnotations, imagePromises);
        });
      }
    }
    const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);
    const pageListPromise = dataPromises.then(([contentStream]) => {
      const opList = new _operator_list.OperatorList(intent, sink);
      handler.send("StartRenderPage", {
        transparency: partialEvaluator.hasBlendModes(this.resources, this.nonBlendModesSet),
        pageIndex: this.pageIndex,
        cacheKey
      });
      return partialEvaluator.getOperatorList({
        stream: contentStream,
        task,
        resources: this.resources,
        operatorList: opList
      }).then(function () {
        return opList;
      });
    });
    return Promise.all([pageListPromise, this._parsedAnnotations, newAnnotationsPromise]).then(function ([pageOpList, annotations, newAnnotations]) {
      if (newAnnotations) {
        annotations = annotations.filter(a => !(a.ref && deletedAnnotations.has(a.ref)));
        for (let i = 0, ii = newAnnotations.length; i < ii; i++) {
          const newAnnotation = newAnnotations[i];
          if (newAnnotation.refToReplace) {
            const j = annotations.findIndex(a => a.ref && (0, _primitives.isRefsEqual)(a.ref, newAnnotation.refToReplace));
            if (j >= 0) {
              annotations.splice(j, 1, newAnnotation);
              newAnnotations.splice(i--, 1);
              ii--;
            }
          }
        }
        annotations = annotations.concat(newAnnotations);
      }
      if (annotations.length === 0 || intent & _util.RenderingIntentFlag.ANNOTATIONS_DISABLE) {
        pageOpList.flush(true);
        return {
          length: pageOpList.totalLength
        };
      }
      const renderForms = !!(intent & _util.RenderingIntentFlag.ANNOTATIONS_FORMS),
        intentAny = !!(intent & _util.RenderingIntentFlag.ANY),
        intentDisplay = !!(intent & _util.RenderingIntentFlag.DISPLAY),
        intentPrint = !!(intent & _util.RenderingIntentFlag.PRINT);
      const opListPromises = [];
      for (const annotation of annotations) {
        if (intentAny || intentDisplay && annotation.mustBeViewed(annotationStorage, renderForms) || intentPrint && annotation.mustBePrinted(annotationStorage)) {
          opListPromises.push(annotation.getOperatorList(partialEvaluator, task, intent, renderForms, annotationStorage).catch(function (reason) {
            (0, _util.warn)("getOperatorList - ignoring annotation data during " + `"${task.name}" task: "${reason}".`);
            return {
              opList: null,
              separateForm: false,
              separateCanvas: false
            };
          }));
        }
      }
      return Promise.all(opListPromises).then(function (opLists) {
        let form = false,
          canvas = false;
        for (const {
          opList,
          separateForm,
          separateCanvas
        } of opLists) {
          pageOpList.addOpList(opList);
          form ||= separateForm;
          canvas ||= separateCanvas;
        }
        pageOpList.flush(true, {
          form,
          canvas
        });
        return {
          length: pageOpList.totalLength
        };
      });
    });
  }
  extractTextContent({
    handler,
    task,
    includeMarkedContent,
    disableNormalization,
    sink
  }) {
    const contentStreamPromise = this.getContentStream();
    const resourcesPromise = this.loadResources(["ExtGState", "Font", "Properties", "XObject"]);
    const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);
    return dataPromises.then(([contentStream]) => {
      const partialEvaluator = new _evaluator.PartialEvaluator({
        xref: this.xref,
        handler,
        pageIndex: this.pageIndex,
        idFactory: this._localIdFactory,
        fontCache: this.fontCache,
        builtInCMapCache: this.builtInCMapCache,
        standardFontDataCache: this.standardFontDataCache,
        globalImageCache: this.globalImageCache,
        systemFontCache: this.systemFontCache,
        options: this.evaluatorOptions
      });
      return partialEvaluator.getTextContent({
        stream: contentStream,
        task,
        resources: this.resources,
        includeMarkedContent,
        disableNormalization,
        sink,
        viewBox: this.view
      });
    });
  }
  async getStructTree() {
    const structTreeRoot = await this.pdfManager.ensureCatalog("structTreeRoot");
    if (!structTreeRoot) {
      return null;
    }
    await this._parsedAnnotations;
    const structTree = await this.pdfManager.ensure(this, "_parseStructTree", [structTreeRoot]);
    return structTree.serializable;
  }
  _parseStructTree(structTreeRoot) {
    const tree = new _struct_tree.StructTreePage(structTreeRoot, this.pageDict);
    tree.parse(this.ref);
    return tree;
  }
  async getAnnotationsData(handler, task, intent) {
    const annotations = await this._parsedAnnotations;
    if (annotations.length === 0) {
      return annotations;
    }
    const annotationsData = [],
      textContentPromises = [];
    let partialEvaluator;
    const intentAny = !!(intent & _util.RenderingIntentFlag.ANY),
      intentDisplay = !!(intent & _util.RenderingIntentFlag.DISPLAY),
      intentPrint = !!(intent & _util.RenderingIntentFlag.PRINT);
    for (const annotation of annotations) {
      const isVisible = intentAny || intentDisplay && annotation.viewable;
      if (isVisible || intentPrint && annotation.printable) {
        annotationsData.push(annotation.data);
      }
      if (annotation.hasTextContent && isVisible) {
        partialEvaluator ||= new _evaluator.PartialEvaluator({
          xref: this.xref,
          handler,
          pageIndex: this.pageIndex,
          idFactory: this._localIdFactory,
          fontCache: this.fontCache,
          builtInCMapCache: this.builtInCMapCache,
          standardFontDataCache: this.standardFontDataCache,
          globalImageCache: this.globalImageCache,
          systemFontCache: this.systemFontCache,
          options: this.evaluatorOptions
        });
        textContentPromises.push(annotation.extractTextContent(partialEvaluator, task, [-Infinity, -Infinity, Infinity, Infinity]).catch(function (reason) {
          (0, _util.warn)(`getAnnotationsData - ignoring textContent during "${task.name}" task: "${reason}".`);
        }));
      }
    }
    await Promise.all(textContentPromises);
    return annotationsData;
  }
  get annotations() {
    const annots = this._getInheritableProperty("Annots");
    return (0, _util.shadow)(this, "annotations", Array.isArray(annots) ? annots : []);
  }
  get _parsedAnnotations() {
    const promise = this.pdfManager.ensure(this, "annotations").then(async annots => {
      if (annots.length === 0) {
        return annots;
      }
      const annotationGlobals = await this.pdfManager.ensureDoc("annotationGlobals");
      if (!annotationGlobals) {
        return [];
      }
      const annotationPromises = [];
      for (const annotationRef of annots) {
        annotationPromises.push(_annotation.AnnotationFactory.create(this.xref, annotationRef, annotationGlobals, this._localIdFactory, false, this.ref).catch(function (reason) {
          (0, _util.warn)(`_parsedAnnotations: "${reason}".`);
          return null;
        }));
      }
      const sortedAnnotations = [];
      let popupAnnotations;
      for (const annotation of await Promise.all(annotationPromises)) {
        if (!annotation) {
          continue;
        }
        if (annotation instanceof _annotation.PopupAnnotation) {
          (popupAnnotations ||= []).push(annotation);
          continue;
        }
        sortedAnnotations.push(annotation);
      }
      if (popupAnnotations) {
        sortedAnnotations.push(...popupAnnotations);
      }
      return sortedAnnotations;
    });
    return (0, _util.shadow)(this, "_parsedAnnotations", promise);
  }
  get jsActions() {
    const actions = (0, _core_utils.collectActions)(this.xref, this.pageDict, _util.PageActionEventType);
    return (0, _util.shadow)(this, "jsActions", actions);
  }
}
exports.Page = Page;
const PDF_HEADER_SIGNATURE = new Uint8Array([0x25, 0x50, 0x44, 0x46, 0x2d]);
const STARTXREF_SIGNATURE = new Uint8Array([0x73, 0x74, 0x61, 0x72, 0x74, 0x78, 0x72, 0x65, 0x66]);
const ENDOBJ_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a]);
const FINGERPRINT_FIRST_BYTES = 1024;
const EMPTY_FINGERPRINT = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
function find(stream, signature, limit = 1024, backwards = false) {
  const signatureLength = signature.length;
  const scanBytes = stream.peekBytes(limit);
  const scanLength = scanBytes.length - signatureLength;
  if (scanLength <= 0) {
    return false;
  }
  if (backwards) {
    const signatureEnd = signatureLength - 1;
    let pos = scanBytes.length - 1;
    while (pos >= signatureEnd) {
      let j = 0;
      while (j < signatureLength && scanBytes[pos - j] === signature[signatureEnd - j]) {
        j++;
      }
      if (j >= signatureLength) {
        stream.pos += pos - signatureEnd;
        return true;
      }
      pos--;
    }
  } else {
    let pos = 0;
    while (pos <= scanLength) {
      let j = 0;
      while (j < signatureLength && scanBytes[pos + j] === signature[j]) {
        j++;
      }
      if (j >= signatureLength) {
        stream.pos += pos;
        return true;
      }
      pos++;
    }
  }
  return false;
}
class PDFDocument {
  constructor(pdfManager, stream) {
    if (stream.length <= 0) {
      throw new _util.InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes.");
    }
    this.pdfManager = pdfManager;
    this.stream = stream;
    this.xref = new _xref.XRef(stream, pdfManager);
    this._pagePromises = new Map();
    this._version = null;
    const idCounters = {
      font: 0
    };
    this._globalIdFactory = class {
      static getDocId() {
        return `g_${pdfManager.docId}`;
      }
      static createFontId() {
        return `f${++idCounters.font}`;
      }
      static createObjId() {
        (0, _util.unreachable)("Abstract method `createObjId` called.");
      }
      static getPageObjId() {
        (0, _util.unreachable)("Abstract method `getPageObjId` called.");
      }
    };
  }
  parse(recoveryMode) {
    this.xref.parse(recoveryMode);
    this.catalog = new _catalog.Catalog(this.pdfManager, this.xref);
  }
  get linearization() {
    let linearization = null;
    try {
      linearization = _parser.Linearization.create(this.stream);
    } catch (err) {
      if (err instanceof _core_utils.MissingDataException) {
        throw err;
      }
      (0, _util.info)(err);
    }
    return (0, _util.shadow)(this, "linearization", linearization);
  }
  get startXRef() {
    const stream = this.stream;
    let startXRef = 0;
    if (this.linearization) {
      stream.reset();
      if (find(stream, ENDOBJ_SIGNATURE)) {
        startXRef = stream.pos + 6 - stream.start;
      }
    } else {
      const step = 1024;
      const startXRefLength = STARTXREF_SIGNATURE.length;
      let found = false,
        pos = stream.end;
      while (!found && pos > 0) {
        pos -= step - startXRefLength;
        if (pos < 0) {
          pos = 0;
        }
        stream.pos = pos;
        found = find(stream, STARTXREF_SIGNATURE, step, true);
      }
      if (found) {
        stream.skip(9);
        let ch;
        do {
          ch = stream.getByte();
        } while ((0, _core_utils.isWhiteSpace)(ch));
        let str = "";
        while (ch >= 0x20 && ch <= 0x39) {
          str += String.fromCharCode(ch);
          ch = stream.getByte();
        }
        startXRef = parseInt(str, 10);
        if (isNaN(startXRef)) {
          startXRef = 0;
        }
      }
    }
    return (0, _util.shadow)(this, "startXRef", startXRef);
  }
  checkHeader() {
    const stream = this.stream;
    stream.reset();
    if (!find(stream, PDF_HEADER_SIGNATURE)) {
      return;
    }
    stream.moveStart();
    stream.skip(PDF_HEADER_SIGNATURE.length);
    let version = "",
      ch;
    while ((ch = stream.getByte()) > 0x20 && version.length < 7) {
      version += String.fromCharCode(ch);
    }
    if (_core_utils.PDF_VERSION_REGEXP.test(version)) {
      this._version = version;
    } else {
      (0, _util.warn)(`Invalid PDF header version: ${version}`);
    }
  }
  parseStartXRef() {
    this.xref.setStartXRef(this.startXRef);
  }
  get numPages() {
    let num = 0;
    if (this.catalog.hasActualNumPages) {
      num = this.catalog.numPages;
    } else if (this.xfaFactory) {
      num = this.xfaFactory.getNumPages();
    } else if (this.linearization) {
      num = this.linearization.numPages;
    } else {
      num = this.catalog.numPages;
    }
    return (0, _util.shadow)(this, "numPages", num);
  }
  _hasOnlyDocumentSignatures(fields, recursionDepth = 0) {
    const RECURSION_LIMIT = 10;
    if (!Array.isArray(fields)) {
      return false;
    }
    return fields.every(field => {
      field = this.xref.fetchIfRef(field);
      if (!(field instanceof _primitives.Dict)) {
        return false;
      }
      if (field.has("Kids")) {
        if (++recursionDepth > RECURSION_LIMIT) {
          (0, _util.warn)("_hasOnlyDocumentSignatures: maximum recursion depth reached");
          return false;
        }
        return this._hasOnlyDocumentSignatures(field.get("Kids"), recursionDepth);
      }
      const isSignature = (0, _primitives.isName)(field.get("FT"), "Sig");
      const rectangle = field.get("Rect");
      const isInvisible = Array.isArray(rectangle) && rectangle.every(value => value === 0);
      return isSignature && isInvisible;
    });
  }
  get _xfaStreams() {
    const acroForm = this.catalog.acroForm;
    if (!acroForm) {
      return null;
    }
    const xfa = acroForm.get("XFA");
    const entries = {
      "xdp:xdp": "",
      template: "",
      datasets: "",
      config: "",
      connectionSet: "",
      localeSet: "",
      stylesheet: "",
      "/xdp:xdp": ""
    };
    if (xfa instanceof _base_stream.BaseStream && !xfa.isEmpty) {
      entries["xdp:xdp"] = xfa;
      return entries;
    }
    if (!Array.isArray(xfa) || xfa.length === 0) {
      return null;
    }
    for (let i = 0, ii = xfa.length; i < ii; i += 2) {
      let name;
      if (i === 0) {
        name = "xdp:xdp";
      } else if (i === ii - 2) {
        name = "/xdp:xdp";
      } else {
        name = xfa[i];
      }
      if (!entries.hasOwnProperty(name)) {
        continue;
      }
      const data = this.xref.fetchIfRef(xfa[i + 1]);
      if (!(data instanceof _base_stream.BaseStream) || data.isEmpty) {
        continue;
      }
      entries[name] = data;
    }
    return entries;
  }
  get xfaDatasets() {
    const streams = this._xfaStreams;
    if (!streams) {
      return (0, _util.shadow)(this, "xfaDatasets", null);
    }
    for (const key of ["datasets", "xdp:xdp"]) {
      const stream = streams[key];
      if (!stream) {
        continue;
      }
      try {
        const str = (0, _util.stringToUTF8String)(stream.getString());
        const data = {
          [key]: str
        };
        return (0, _util.shadow)(this, "xfaDatasets", new _dataset_reader.DatasetReader(data));
      } catch {
        (0, _util.warn)("XFA - Invalid utf-8 string.");
        break;
      }
    }
    return (0, _util.shadow)(this, "xfaDatasets", null);
  }
  get xfaData() {
    const streams = this._xfaStreams;
    if (!streams) {
      return null;
    }
    const data = Object.create(null);
    for (const [key, stream] of Object.entries(streams)) {
      if (!stream) {
        continue;
      }
      try {
        data[key] = (0, _util.stringToUTF8String)(stream.getString());
      } catch {
        (0, _util.warn)("XFA - Invalid utf-8 string.");
        return null;
      }
    }
    return data;
  }
  get xfaFactory() {
    let data;
    if (this.pdfManager.enableXfa && this.catalog.needsRendering && this.formInfo.hasXfa && !this.formInfo.hasAcroForm) {
      data = this.xfaData;
    }
    return (0, _util.shadow)(this, "xfaFactory", data ? new _factory.XFAFactory(data) : null);
  }
  get isPureXfa() {
    return this.xfaFactory ? this.xfaFactory.isValid() : false;
  }
  get htmlForXfa() {
    return this.xfaFactory ? this.xfaFactory.getPages() : null;
  }
  async loadXfaImages() {
    const xfaImagesDict = await this.pdfManager.ensureCatalog("xfaImages");
    if (!xfaImagesDict) {
      return;
    }
    const keys = xfaImagesDict.getKeys();
    const objectLoader = new _object_loader.ObjectLoader(xfaImagesDict, keys, this.xref);
    await objectLoader.load();
    const xfaImages = new Map();
    for (const key of keys) {
      const stream = xfaImagesDict.get(key);
      if (stream instanceof _base_stream.BaseStream) {
        xfaImages.set(key, stream.getBytes());
      }
    }
    this.xfaFactory.setImages(xfaImages);
  }
  async loadXfaFonts(handler, task) {
    const acroForm = await this.pdfManager.ensureCatalog("acroForm");
    if (!acroForm) {
      return;
    }
    const resources = await acroForm.getAsync("DR");
    if (!(resources instanceof _primitives.Dict)) {
      return;
    }
    const objectLoader = new _object_loader.ObjectLoader(resources, ["Font"], this.xref);
    await objectLoader.load();
    const fontRes = resources.get("Font");
    if (!(fontRes instanceof _primitives.Dict)) {
      return;
    }
    const options = Object.assign(Object.create(null), this.pdfManager.evaluatorOptions);
    options.useSystemFonts = false;
    const partialEvaluator = new _evaluator.PartialEvaluator({
      xref: this.xref,
      handler,
      pageIndex: -1,
      idFactory: this._globalIdFactory,
      fontCache: this.catalog.fontCache,
      builtInCMapCache: this.catalog.builtInCMapCache,
      standardFontDataCache: this.catalog.standardFontDataCache,
      options
    });
    const operatorList = new _operator_list.OperatorList();
    const pdfFonts = [];
    const initialState = {
      get font() {
        return pdfFonts.at(-1);
      },
      set font(font) {
        pdfFonts.push(font);
      },
      clone() {
        return this;
      }
    };
    const fonts = new Map();
    fontRes.forEach((fontName, font) => {
      fonts.set(fontName, font);
    });
    const promises = [];
    for (const [fontName, font] of fonts) {
      const descriptor = font.get("FontDescriptor");
      if (!(descriptor instanceof _primitives.Dict)) {
        continue;
      }
      let fontFamily = descriptor.get("FontFamily");
      fontFamily = fontFamily.replaceAll(/[ ]+(\d)/g, "$1");
      const fontWeight = descriptor.get("FontWeight");
      const italicAngle = -descriptor.get("ItalicAngle");
      const cssFontInfo = {
        fontFamily,
        fontWeight,
        italicAngle
      };
      if (!(0, _core_utils.validateCSSFont)(cssFontInfo)) {
        continue;
      }
      promises.push(partialEvaluator.handleSetFont(resources, [_primitives.Name.get(fontName), 1], null, operatorList, task, initialState, null, cssFontInfo).catch(function (reason) {
        (0, _util.warn)(`loadXfaFonts: "${reason}".`);
        return null;
      }));
    }
    await Promise.all(promises);
    const missingFonts = this.xfaFactory.setFonts(pdfFonts);
    if (!missingFonts) {
      return;
    }
    options.ignoreErrors = true;
    promises.length = 0;
    pdfFonts.length = 0;
    const reallyMissingFonts = new Set();
    for (const missing of missingFonts) {
      if (!(0, _xfa_fonts.getXfaFontName)(`${missing}-Regular`)) {
        reallyMissingFonts.add(missing);
      }
    }
    if (reallyMissingFonts.size) {
      missingFonts.push("PdfJS-Fallback");
    }
    for (const missing of missingFonts) {
      if (reallyMissingFonts.has(missing)) {
        continue;
      }
      for (const fontInfo of [{
        name: "Regular",
        fontWeight: 400,
        italicAngle: 0
      }, {
        name: "Bold",
        fontWeight: 700,
        italicAngle: 0
      }, {
        name: "Italic",
        fontWeight: 400,
        italicAngle: 12
      }, {
        name: "BoldItalic",
        fontWeight: 700,
        italicAngle: 12
      }]) {
        const name = `${missing}-${fontInfo.name}`;
        const dict = (0, _xfa_fonts.getXfaFontDict)(name);
        promises.push(partialEvaluator.handleSetFont(resources, [_primitives.Name.get(name), 1], null, operatorList, task, initialState, dict, {
          fontFamily: missing,
          fontWeight: fontInfo.fontWeight,
          italicAngle: fontInfo.italicAngle
        }).catch(function (reason) {
          (0, _util.warn)(`loadXfaFonts: "${reason}".`);
          return null;
        }));
      }
    }
    await Promise.all(promises);
    this.xfaFactory.appendFonts(pdfFonts, reallyMissingFonts);
  }
  async serializeXfaData(annotationStorage) {
    return this.xfaFactory ? this.xfaFactory.serializeData(annotationStorage) : null;
  }
  get version() {
    return this.catalog.version || this._version;
  }
  get formInfo() {
    const formInfo = {
      hasFields: false,
      hasAcroForm: false,
      hasXfa: false,
      hasSignatures: false
    };
    const acroForm = this.catalog.acroForm;
    if (!acroForm) {
      return (0, _util.shadow)(this, "formInfo", formInfo);
    }
    try {
      const fields = acroForm.get("Fields");
      const hasFields = Array.isArray(fields) && fields.length > 0;
      formInfo.hasFields = hasFields;
      const xfa = acroForm.get("XFA");
      formInfo.hasXfa = Array.isArray(xfa) && xfa.length > 0 || xfa instanceof _base_stream.BaseStream && !xfa.isEmpty;
      const sigFlags = acroForm.get("SigFlags");
      const hasSignatures = !!(sigFlags & 0x1);
      const hasOnlyDocumentSignatures = hasSignatures && this._hasOnlyDocumentSignatures(fields);
      formInfo.hasAcroForm = hasFields && !hasOnlyDocumentSignatures;
      formInfo.hasSignatures = hasSignatures;
    } catch (ex) {
      if (ex instanceof _core_utils.MissingDataException) {
        throw ex;
      }
      (0, _util.warn)(`Cannot fetch form information: "${ex}".`);
    }
    return (0, _util.shadow)(this, "formInfo", formInfo);
  }
  get documentInfo() {
    const docInfo = {
      PDFFormatVersion: this.version,
      Language: this.catalog.lang,
      EncryptFilterName: this.xref.encrypt ? this.xref.encrypt.filterName : null,
      IsLinearized: !!this.linearization,
      IsAcroFormPresent: this.formInfo.hasAcroForm,
      IsXFAPresent: this.formInfo.hasXfa,
      IsCollectionPresent: !!this.catalog.collection,
      IsSignaturesPresent: this.formInfo.hasSignatures
    };
    let infoDict;
    try {
      infoDict = this.xref.trailer.get("Info");
    } catch (err) {
      if (err instanceof _core_utils.MissingDataException) {
        throw err;
      }
      (0, _util.info)("The document information dictionary is invalid.");
    }
    if (!(infoDict instanceof _primitives.Dict)) {
      return (0, _util.shadow)(this, "documentInfo", docInfo);
    }
    for (const key of infoDict.getKeys()) {
      const value = infoDict.get(key);
      switch (key) {
        case "Title":
        case "Author":
        case "Subject":
        case "Keywords":
        case "Creator":
        case "Producer":
        case "CreationDate":
        case "ModDate":
          if (typeof value === "string") {
            docInfo[key] = (0, _util.stringToPDFString)(value);
            continue;
          }
          break;
        case "Trapped":
          if (value instanceof _primitives.Name) {
            docInfo[key] = value;
            continue;
          }
          break;
        default:
          let customValue;
          switch (typeof value) {
            case "string":
              customValue = (0, _util.stringToPDFString)(value);
              break;
            case "number":
            case "boolean":
              customValue = value;
              break;
            default:
              if (value instanceof _primitives.Name) {
                customValue = value;
              }
              break;
          }
          if (customValue === undefined) {
            (0, _util.warn)(`Bad value, for custom key "${key}", in Info: ${value}.`);
            continue;
          }
          if (!docInfo.Custom) {
            docInfo.Custom = Object.create(null);
          }
          docInfo.Custom[key] = customValue;
          continue;
      }
      (0, _util.warn)(`Bad value, for key "${key}", in Info: ${value}.`);
    }
    return (0, _util.shadow)(this, "documentInfo", docInfo);
  }
  get fingerprints() {
    function validate(data) {
      return typeof data === "string" && data.length > 0 && data !== EMPTY_FINGERPRINT;
    }
    function hexString(hash) {
      const buf = [];
      for (const num of hash) {
        const hex = num.toString(16);
        buf.push(hex.padStart(2, "0"));
      }
      return buf.join("");
    }
    const idArray = this.xref.trailer.get("ID");
    let hashOriginal, hashModified;
    if (Array.isArray(idArray) && validate(idArray[0])) {
      hashOriginal = (0, _util.stringToBytes)(idArray[0]);
      if (idArray[1] !== idArray[0] && validate(idArray[1])) {
        hashModified = (0, _util.stringToBytes)(idArray[1]);
      }
    } else {
      hashOriginal = (0, _crypto.calculateMD5)(this.stream.getByteRange(0, FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES);
    }
    return (0, _util.shadow)(this, "fingerprints", [hexString(hashOriginal), hashModified ? hexString(hashModified) : null]);
  }
  async _getLinearizationPage(pageIndex) {
    const {
      catalog,
      linearization,
      xref
    } = this;
    const ref = _primitives.Ref.get(linearization.objectNumberFirst, 0);
    try {
      const obj = await xref.fetchAsync(ref);
      if (obj instanceof _primitives.Dict) {
        let type = obj.getRaw("Type");
        if (type instanceof _primitives.Ref) {
          type = await xref.fetchAsync(type);
        }
        if ((0, _primitives.isName)(type, "Page") || !obj.has("Type") && !obj.has("Kids")) {
          if (!catalog.pageKidsCountCache.has(ref)) {
            catalog.pageKidsCountCache.put(ref, 1);
          }
          if (!catalog.pageIndexCache.has(ref)) {
            catalog.pageIndexCache.put(ref, 0);
          }
          return [obj, ref];
        }
      }
      throw new _util.FormatError("The Linearization dictionary doesn't point to a valid Page dictionary.");
    } catch (reason) {
      (0, _util.warn)(`_getLinearizationPage: "${reason.message}".`);
      return catalog.getPageDict(pageIndex);
    }
  }
  getPage(pageIndex) {
    const cachedPromise = this._pagePromises.get(pageIndex);
    if (cachedPromise) {
      return cachedPromise;
    }
    const {
      catalog,
      linearization,
      xfaFactory
    } = this;
    let promise;
    if (xfaFactory) {
      promise = Promise.resolve([_primitives.Dict.empty, null]);
    } else if (linearization?.pageFirst === pageIndex) {
      promise = this._getLinearizationPage(pageIndex);
    } else {
      promise = catalog.getPageDict(pageIndex);
    }
    promise = promise.then(([pageDict, ref]) => {
      return new Page({
        pdfManager: this.pdfManager,
        xref: this.xref,
        pageIndex,
        pageDict,
        ref,
        globalIdFactory: this._globalIdFactory,
        fontCache: catalog.fontCache,
        builtInCMapCache: catalog.builtInCMapCache,
        standardFontDataCache: catalog.standardFontDataCache,
        globalImageCache: catalog.globalImageCache,
        systemFontCache: catalog.systemFontCache,
        nonBlendModesSet: catalog.nonBlendModesSet,
        xfaFactory
      });
    });
    this._pagePromises.set(pageIndex, promise);
    return promise;
  }
  async checkFirstPage(recoveryMode = false) {
    if (recoveryMode) {
      return;
    }
    try {
      await this.getPage(0);
    } catch (reason) {
      if (reason instanceof _core_utils.XRefEntryException) {
        this._pagePromises.delete(0);
        await this.cleanup();
        throw new _core_utils.XRefParseException();
      }
    }
  }
  async checkLastPage(recoveryMode = false) {
    const {
      catalog,
      pdfManager
    } = this;
    catalog.setActualNumPages();
    let numPages;
    try {
      await Promise.all([pdfManager.ensureDoc("xfaFactory"), pdfManager.ensureDoc("linearization"), pdfManager.ensureCatalog("numPages")]);
      if (this.xfaFactory) {
        return;
      } else if (this.linearization) {
        numPages = this.linearization.numPages;
      } else {
        numPages = catalog.numPages;
      }
      if (!Number.isInteger(numPages)) {
        throw new _util.FormatError("Page count is not an integer.");
      } else if (numPages <= 1) {
        return;
      }
      await this.getPage(numPages - 1);
    } catch (reason) {
      this._pagePromises.delete(numPages - 1);
      await this.cleanup();
      if (reason instanceof _core_utils.XRefEntryException && !recoveryMode) {
        throw new _core_utils.XRefParseException();
      }
      (0, _util.warn)(`checkLastPage - invalid /Pages tree /Count: ${numPages}.`);
      let pagesTree;
      try {
        pagesTree = await catalog.getAllPageDicts(recoveryMode);
      } catch (reasonAll) {
        if (reasonAll instanceof _core_utils.XRefEntryException && !recoveryMode) {
          throw new _core_utils.XRefParseException();
        }
        catalog.setActualNumPages(1);
        return;
      }
      for (const [pageIndex, [pageDict, ref]] of pagesTree) {
        let promise;
        if (pageDict instanceof Error) {
          promise = Promise.reject(pageDict);
          promise.catch(() => {});
        } else {
          promise = Promise.resolve(new Page({
            pdfManager,
            xref: this.xref,
            pageIndex,
            pageDict,
            ref,
            globalIdFactory: this._globalIdFactory,
            fontCache: catalog.fontCache,
            builtInCMapCache: catalog.builtInCMapCache,
            standardFontDataCache: catalog.standardFontDataCache,
            globalImageCache: catalog.globalImageCache,
            systemFontCache: catalog.systemFontCache,
            nonBlendModesSet: catalog.nonBlendModesSet,
            xfaFactory: null
          }));
        }
        this._pagePromises.set(pageIndex, promise);
      }
      catalog.setActualNumPages(pagesTree.size);
    }
  }
  fontFallback(id, handler) {
    return this.catalog.fontFallback(id, handler);
  }
  async cleanup(manuallyTriggered = false) {
    return this.catalog ? this.catalog.cleanup(manuallyTriggered) : (0, _cleanup_helper.clearGlobalCaches)();
  }
  #collectFieldObjects(name, fieldRef, promises, annotationGlobals) {
    const field = this.xref.fetchIfRef(fieldRef);
    if (field.has("T")) {
      const partName = (0, _util.stringToPDFString)(field.get("T"));
      name = name === "" ? partName : `${name}.${partName}`;
    }
    if (!promises.has(name)) {
      promises.set(name, []);
    }
    promises.get(name).push(_annotation.AnnotationFactory.create(this.xref, fieldRef, annotationGlobals, this._localIdFactory, true, null).then(annotation => annotation?.getFieldObject()).catch(function (reason) {
      (0, _util.warn)(`#collectFieldObjects: "${reason}".`);
      return null;
    }));
    if (field.has("Kids")) {
      for (const kid of field.get("Kids")) {
        this.#collectFieldObjects(name, kid, promises, annotationGlobals);
      }
    }
  }
  get fieldObjects() {
    if (!this.formInfo.hasFields) {
      return (0, _util.shadow)(this, "fieldObjects", Promise.resolve(null));
    }
    const promise = this.pdfManager.ensureDoc("annotationGlobals").then(async annotationGlobals => {
      if (!annotationGlobals) {
        return null;
      }
      const allFields = Object.create(null);
      const fieldPromises = new Map();
      for (const fieldRef of this.catalog.acroForm.get("Fields")) {
        this.#collectFieldObjects("", fieldRef, fieldPromises, annotationGlobals);
      }
      const allPromises = [];
      for (const [name, promises] of fieldPromises) {
        allPromises.push(Promise.all(promises).then(fields => {
          fields = fields.filter(field => !!field);
          if (fields.length > 0) {
            allFields[name] = fields;
          }
        }));
      }
      await Promise.all(allPromises);
      return allFields;
    });
    return (0, _util.shadow)(this, "fieldObjects", promise);
  }
  get hasJSActions() {
    const promise = this.pdfManager.ensureDoc("_parseHasJSActions");
    return (0, _util.shadow)(this, "hasJSActions", promise);
  }
  async _parseHasJSActions() {
    const [catalogJsActions, fieldObjects] = await Promise.all([this.pdfManager.ensureCatalog("jsActions"), this.pdfManager.ensureDoc("fieldObjects")]);
    if (catalogJsActions) {
      return true;
    }
    if (fieldObjects) {
      return Object.values(fieldObjects).some(fieldObject => fieldObject.some(object => object.actions !== null));
    }
    return false;
  }
  get calculationOrderIds() {
    const acroForm = this.catalog.acroForm;
    if (!acroForm?.has("CO")) {
      return (0, _util.shadow)(this, "calculationOrderIds", null);
    }
    const calculationOrder = acroForm.get("CO");
    if (!Array.isArray(calculationOrder) || calculationOrder.length === 0) {
      return (0, _util.shadow)(this, "calculationOrderIds", null);
    }
    const ids = [];
    for (const id of calculationOrder) {
      if (id instanceof _primitives.Ref) {
        ids.push(id.toString());
      }
    }
    if (ids.length === 0) {
      return (0, _util.shadow)(this, "calculationOrderIds", null);
    }
    return (0, _util.shadow)(this, "calculationOrderIds", ids);
  }
  get annotationGlobals() {
    return (0, _util.shadow)(this, "annotationGlobals", _annotation.AnnotationFactory.createGlobals(this.pdfManager));
  }
}
exports.PDFDocument = PDFDocument;

/***/ }),
/* 10 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.PopupAnnotation = exports.MarkupAnnotation = exports.AnnotationFactory = exports.AnnotationBorderStyle = exports.Annotation = void 0;
exports.getQuadPoints = getQuadPoints;
var _util = __w_pdfjs_require__(2);
var _core_utils = __w_pdfjs_require__(3);
var _default_appearance = __w_pdfjs_require__(11);
var _primitives = __w_pdfjs_require__(4);
var _stream = __w_pdfjs_require__(8);
var _base_stream = __w_pdfjs_require__(5);
var _bidi = __w_pdfjs_require__(60);
var _catalog = __w_pdfjs_require__(66);
var _colorspace = __w_pdfjs_require__(12);
var _file_spec = __w_pdfjs_require__(69);
var _jpeg_stream = __w_pdfjs_require__(26);
var _object_loader = __w_pdfjs_require__(76);
var _operator_list = __w_pdfjs_require__(64);
var _writer = __w_pdfjs_require__(73);
var _factory = __w_pdfjs_require__(77);
class AnnotationFactory {
  static createGlobals(pdfManager) {
    return Promise.all([pdfManager.ensureCatalog("acroForm"), pdfManager.ensureDoc("xfaDatasets"), pdfManager.ensureCatalog("structTreeRoot"), pdfManager.ensureCatalog("baseUrl"), pdfManager.ensureCatalog("attachments")]).then(([acroForm, xfaDatasets, structTreeRoot, baseUrl, attachments]) => {
      return {
        pdfManager,
        acroForm: acroForm instanceof _primitives.Dict ? acroForm : _primitives.Dict.empty,
        xfaDatasets,
        structTreeRoot,
        baseUrl,
        attachments
      };
    }, reason => {
      (0, _util.warn)(`createGlobals: "${reason}".`);
      return null;
    });
  }
  static async create(xref, ref, annotationGlobals, idFactory, collectFields, pageRef) {
    const pageIndex = collectFields ? await this._getPageIndex(xref, ref, annotationGlobals.pdfManager) : null;
    return annotationGlobals.pdfManager.ensure(this, "_create", [xref, ref, annotationGlobals, idFactory, collectFields, pageIndex, pageRef]);
  }
  static _create(xref, ref, annotationGlobals, idFactory, collectFields = false, pageIndex = null, pageRef = null) {
    const dict = xref.fetchIfRef(ref);
    if (!(dict instanceof _primitives.Dict)) {
      return undefined;
    }
    const {
      acroForm,
      pdfManager
    } = annotationGlobals;
    const id = ref instanceof _primitives.Ref ? ref.toString() : `annot_${idFactory.createObjId()}`;
    let subtype = dict.get("Subtype");
    subtype = subtype instanceof _primitives.Name ? subtype.name : null;
    const parameters = {
      xref,
      ref,
      dict,
      subtype,
      id,
      annotationGlobals,
      collectFields,
      needAppearances: !collectFields && acroForm.get("NeedAppearances") === true,
      pageIndex,
      evaluatorOptions: pdfManager.evaluatorOptions,
      pageRef
    };
    switch (subtype) {
      case "Link":
        return new LinkAnnotation(parameters);
      case "Text":
        return new TextAnnotation(parameters);
      case "Widget":
        let fieldType = (0, _core_utils.getInheritableProperty)({
          dict,
          key: "FT"
        });
        fieldType = fieldType instanceof _primitives.Name ? fieldType.name : null;
        switch (fieldType) {
          case "Tx":
            return new TextWidgetAnnotation(parameters);
          case "Btn":
            return new ButtonWidgetAnnotation(parameters);
          case "Ch":
            return new ChoiceWidgetAnnotation(parameters);
          case "Sig":
            return new SignatureWidgetAnnotation(parameters);
        }
        (0, _util.warn)(`Unimplemented widget field type "${fieldType}", ` + "falling back to base field type.");
        return new WidgetAnnotation(parameters);
      case "Popup":
        return new PopupAnnotation(parameters);
      case "FreeText":
        return new FreeTextAnnotation(parameters);
      case "Line":
        return new LineAnnotation(parameters);
      case "Square":
        return new SquareAnnotation(parameters);
      case "Circle":
        return new CircleAnnotation(parameters);
      case "PolyLine":
        return new PolylineAnnotation(parameters);
      case "Polygon":
        return new PolygonAnnotation(parameters);
      case "Caret":
        return new CaretAnnotation(parameters);
      case "Ink":
        return new InkAnnotation(parameters);
      case "Highlight":
        return new HighlightAnnotation(parameters);
      case "Underline":
        return new UnderlineAnnotation(parameters);
      case "Squiggly":
        return new SquigglyAnnotation(parameters);
      case "StrikeOut":
        return new StrikeOutAnnotation(parameters);
      case "Stamp":
        return new StampAnnotation(parameters);
      case "FileAttachment":
        return new FileAttachmentAnnotation(parameters);
      default:
        if (!collectFields) {
          if (!subtype) {
            (0, _util.warn)("Annotation is missing the required /Subtype.");
          } else {
            (0, _util.warn)(`Unimplemented annotation type "${subtype}", ` + "falling back to base annotation.");
          }
        }
        return new Annotation(parameters);
    }
  }
  static async _getPageIndex(xref, ref, pdfManager) {
    try {
      const annotDict = await xref.fetchIfRefAsync(ref);
      if (!(annotDict instanceof _primitives.Dict)) {
        return -1;
      }
      const pageRef = annotDict.getRaw("P");
      if (pageRef instanceof _primitives.Ref) {
        try {
          const pageIndex = await pdfManager.ensureCatalog("getPageIndex", [pageRef]);
          return pageIndex;
        } catch (ex) {
          (0, _util.info)(`_getPageIndex -- not a valid page reference: "${ex}".`);
        }
      }
      if (annotDict.has("Kids")) {
        return -1;
      }
      const numPages = await pdfManager.ensureDoc("numPages");
      for (let pageIndex = 0; pageIndex < numPages; pageIndex++) {
        const page = await pdfManager.getPage(pageIndex);
        const annotations = await pdfManager.ensure(page, "annotations");
        for (const annotRef of annotations) {
          if (annotRef instanceof _primitives.Ref && (0, _primitives.isRefsEqual)(annotRef, ref)) {
            return pageIndex;
          }
        }
      }
    } catch (ex) {
      (0, _util.warn)(`_getPageIndex: "${ex}".`);
    }
    return -1;
  }
  static generateImages(annotations, xref, isOffscreenCanvasSupported) {
    if (!isOffscreenCanvasSupported) {
      (0, _util.warn)("generateImages: OffscreenCanvas is not supported, cannot save or print some annotations with images.");
      return null;
    }
    let imagePromises;
    for (const {
      bitmapId,
      bitmap
    } of annotations) {
      if (!bitmap) {
        continue;
      }
      imagePromises ||= new Map();
      imagePromises.set(bitmapId, StampAnnotation.createImage(bitmap, xref));
    }
    return imagePromises;
  }
  static async saveNewAnnotations(evaluator, task, annotations, imagePromises) {
    const xref = evaluator.xref;
    let baseFontRef;
    const dependencies = [];
    const promises = [];
    const {
      isOffscreenCanvasSupported
    } = evaluator.options;
    for (const annotation of annotations) {
      if (annotation.deleted) {
        continue;
      }
      switch (annotation.annotationType) {
        case _util.AnnotationEditorType.FREETEXT:
          if (!baseFontRef) {
            const baseFont = new _primitives.Dict(xref);
            baseFont.set("BaseFont", _primitives.Name.get("Helvetica"));
            baseFont.set("Type", _primitives.Name.get("Font"));
            baseFont.set("Subtype", _primitives.Name.get("Type1"));
            baseFont.set("Encoding", _primitives.Name.get("WinAnsiEncoding"));
            const buffer = [];
            baseFontRef = xref.getNewTemporaryRef();
            await (0, _writer.writeObject)(baseFontRef, baseFont, buffer, xref);
            dependencies.push({
              ref: baseFontRef,
              data: buffer.join("")
            });
          }
          promises.push(FreeTextAnnotation.createNewAnnotation(xref, annotation, dependencies, {
            evaluator,
            task,
            baseFontRef
          }));
          break;
        case _util.AnnotationEditorType.INK:
          promises.push(InkAnnotation.createNewAnnotation(xref, annotation, dependencies));
          break;
        case _util.AnnotationEditorType.STAMP:
          if (!isOffscreenCanvasSupported) {
            break;
          }
          const image = await imagePromises.get(annotation.bitmapId);
          if (image.imageStream) {
            const {
              imageStream,
              smaskStream
            } = image;
            const buffer = [];
            if (smaskStream) {
              const smaskRef = xref.getNewTemporaryRef();
              await (0, _writer.writeObject)(smaskRef, smaskStream, buffer, xref);
              dependencies.push({
                ref: smaskRef,
                data: buffer.join("")
              });
              imageStream.dict.set("SMask", smaskRef);
              buffer.length = 0;
            }
            const imageRef = image.imageRef = xref.getNewTemporaryRef();
            await (0, _writer.writeObject)(imageRef, imageStream, buffer, xref);
            dependencies.push({
              ref: imageRef,
              data: buffer.join("")
            });
            image.imageStream = image.smaskStream = null;
          }
          promises.push(StampAnnotation.createNewAnnotation(xref, annotation, dependencies, {
            image
          }));
          break;
      }
    }
    return {
      annotations: await Promise.all(promises),
      dependencies
    };
  }
  static async printNewAnnotations(annotationGlobals, evaluator, task, annotations, imagePromises) {
    if (!annotations) {
      return null;
    }
    const {
      options,
      xref
    } = evaluator;
    const promises = [];
    for (const annotation of annotations) {
      if (annotation.deleted) {
        continue;
      }
      switch (annotation.annotationType) {
        case _util.AnnotationEditorType.FREETEXT:
          promises.push(FreeTextAnnotation.createNewPrintAnnotation(annotationGlobals, xref, annotation, {
            evaluator,
            task,
            evaluatorOptions: options
          }));
          break;
        case _util.AnnotationEditorType.INK:
          promises.push(InkAnnotation.createNewPrintAnnotation(annotationGlobals, xref, annotation, {
            evaluatorOptions: options
          }));
          break;
        case _util.AnnotationEditorType.STAMP:
          if (!options.isOffscreenCanvasSupported) {
            break;
          }
          const image = await imagePromises.get(annotation.bitmapId);
          if (image.imageStream) {
            const {
              imageStream,
              smaskStream
            } = image;
            if (smaskStream) {
              imageStream.dict.set("SMask", smaskStream);
            }
            image.imageRef = new _jpeg_stream.JpegStream(imageStream, imageStream.length);
            image.imageStream = image.smaskStream = null;
          }
          promises.push(StampAnnotation.createNewPrintAnnotation(annotationGlobals, xref, annotation, {
            image,
            evaluatorOptions: options
          }));
          break;
      }
    }
    return Promise.all(promises);
  }
}
exports.AnnotationFactory = AnnotationFactory;
function getRgbColor(color, defaultColor = new Uint8ClampedArray(3)) {
  if (!Array.isArray(color)) {
    return defaultColor;
  }
  const rgbColor = defaultColor || new Uint8ClampedArray(3);
  switch (color.length) {
    case 0:
      return null;
    case 1:
      _colorspace.ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0);
      return rgbColor;
    case 3:
      _colorspace.ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0);
      return rgbColor;
    case 4:
      _colorspace.ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0);
      return rgbColor;
    default:
      return defaultColor;
  }
}
function getPdfColorArray(color) {
  return Array.from(color, c => c / 255);
}
function getQuadPoints(dict, rect) {
  const quadPoints = dict.getArray("QuadPoints");
  if (!Array.isArray(quadPoints) || quadPoints.length === 0 || quadPoints.length % 8 > 0) {
    return null;
  }
  const quadPointsLists = [];
  for (let i = 0, ii = quadPoints.length / 8; i < ii; i++) {
    let minX = Infinity,
      maxX = -Infinity,
      minY = Infinity,
      maxY = -Infinity;
    for (let j = i * 8, jj = i * 8 + 8; j < jj; j += 2) {
      const x = quadPoints[j];
      const y = quadPoints[j + 1];
      minX = Math.min(x, minX);
      maxX = Math.max(x, maxX);
      minY = Math.min(y, minY);
      maxY = Math.max(y, maxY);
    }
    if (rect !== null && (minX < rect[0] || maxX > rect[2] || minY < rect[1] || maxY > rect[3])) {
      return null;
    }
    quadPointsLists.push([{
      x: minX,
      y: maxY
    }, {
      x: maxX,
      y: maxY
    }, {
      x: minX,
      y: minY
    }, {
      x: maxX,
      y: minY
    }]);
  }
  return quadPointsLists;
}
function getTransformMatrix(rect, bbox, matrix) {
  const [minX, minY, maxX, maxY] = _util.Util.getAxialAlignedBoundingBox(bbox, matrix);
  if (minX === maxX || minY === maxY) {
    return [1, 0, 0, 1, rect[0], rect[1]];
  }
  const xRatio = (rect[2] - rect[0]) / (maxX - minX);
  const yRatio = (rect[3] - rect[1]) / (maxY - minY);
  return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio];
}
class Annotation {
  constructor(params) {
    const {
      dict,
      xref,
      annotationGlobals
    } = params;
    this.setTitle(dict.get("T"));
    this.setContents(dict.get("Contents"));
    this.setModificationDate(dict.get("M"));
    this.setFlags(dict.get("F"));
    this.setRectangle(dict.getArray("Rect"));
    this.setColor(dict.getArray("C"));
    this.setBorderStyle(dict);
    this.setAppearance(dict);
    this.setOptionalContent(dict);
    const MK = dict.get("MK");
    this.setBorderAndBackgroundColors(MK);
    this.setRotation(MK, dict);
    this.ref = params.ref instanceof _primitives.Ref ? params.ref : null;
    this._streams = [];
    if (this.appearance) {
      this._streams.push(this.appearance);
    }
    const isLocked = !!(this.flags & _util.AnnotationFlag.LOCKED);
    const isContentLocked = !!(this.flags & _util.AnnotationFlag.LOCKEDCONTENTS);
    if (annotationGlobals.structTreeRoot) {
      let structParent = dict.get("StructParent");
      structParent = Number.isInteger(structParent) && structParent >= 0 ? structParent : -1;
      annotationGlobals.structTreeRoot.addAnnotationIdToPage(params.pageRef, structParent);
    }
    this.data = {
      annotationFlags: this.flags,
      borderStyle: this.borderStyle,
      color: this.color,
      backgroundColor: this.backgroundColor,
      borderColor: this.borderColor,
      rotation: this.rotation,
      contentsObj: this._contents,
      hasAppearance: !!this.appearance,
      id: params.id,
      modificationDate: this.modificationDate,
      rect: this.rectangle,
      subtype: params.subtype,
      hasOwnCanvas: false,
      noRotate: !!(this.flags & _util.AnnotationFlag.NOROTATE),
      noHTML: isLocked && isContentLocked
    };
    if (params.collectFields) {
      const kids = dict.get("Kids");
      if (Array.isArray(kids)) {
        const kidIds = [];
        for (const kid of kids) {
          if (kid instanceof _primitives.Ref) {
            kidIds.push(kid.toString());
          }
        }
        if (kidIds.length !== 0) {
          this.data.kidIds = kidIds;
        }
      }
      this.data.actions = (0, _core_utils.collectActions)(xref, dict, _util.AnnotationActionEventType);
      this.data.fieldName = this._constructFieldName(dict);
      this.data.pageIndex = params.pageIndex;
    }
    this._isOffscreenCanvasSupported = params.evaluatorOptions.isOffscreenCanvasSupported;
    this._fallbackFontDict = null;
    this._needAppearances = false;
  }
  _hasFlag(flags, flag) {
    return !!(flags & flag);
  }
  _isViewable(flags) {
    return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.NOVIEW);
  }
  _isPrintable(flags) {
    return this._hasFlag(flags, _util.AnnotationFlag.PRINT) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN) && !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE);
  }
  mustBeViewed(annotationStorage, _renderForms) {
    const noView = annotationStorage?.get(this.data.id)?.noView;
    if (noView !== undefined) {
      return !noView;
    }
    return this.viewable && !this._hasFlag(this.flags, _util.AnnotationFlag.HIDDEN);
  }
  mustBePrinted(annotationStorage) {
    const noPrint = annotationStorage?.get(this.data.id)?.noPrint;
    if (noPrint !== undefined) {
      return !noPrint;
    }
    return this.printable;
  }
  get viewable() {
    if (this.data.quadPoints === null) {
      return false;
    }
    if (this.flags === 0) {
      return true;
    }
    return this._isViewable(this.flags);
  }
  get printable() {
    if (this.data.quadPoints === null) {
      return false;
    }
    if (this.flags === 0) {
      return false;
    }
    return this._isPrintable(this.flags);
  }
  _parseStringHelper(data) {
    const str = typeof data === "string" ? (0, _util.stringToPDFString)(data) : "";
    const dir = str && (0, _bidi.bidi)(str).dir === "rtl" ? "rtl" : "ltr";
    return {
      str,
      dir
    };
  }
  setDefaultAppearance(params) {
    const {
      dict,
      annotationGlobals
    } = params;
    const defaultAppearance = (0, _core_utils.getInheritableProperty)({
      dict,
      key: "DA"
    }) || annotationGlobals.acroForm.get("DA");
    this._defaultAppearance = typeof defaultAppearance === "string" ? defaultAppearance : "";
    this.data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this._defaultAppearance);
  }
  setTitle(title) {
    this._title = this._parseStringHelper(title);
  }
  setContents(contents) {
    this._contents = this._parseStringHelper(contents);
  }
  setModificationDate(modificationDate) {
    this.modificationDate = typeof modificationDate === "string" ? modificationDate : null;
  }
  setFlags(flags) {
    this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0;
  }
  hasFlag(flag) {
    return this._hasFlag(this.flags, flag);
  }
  setRectangle(rectangle) {
    this.rectangle = Array.isArray(rectangle) && rectangle.length === 4 ? _util.Util.normalizeRect(rectangle) : [0, 0, 0, 0];
  }
  setColor(color) {
    this.color = getRgbColor(color);
  }
  setLineEndings(lineEndings) {
    this.lineEndings = ["None", "None"];
    if (Array.isArray(lineEndings) && lineEndings.length === 2) {
      for (let i = 0; i < 2; i++) {
        const obj = lineEndings[i];
        if (obj instanceof _primitives.Name) {
          switch (obj.name) {
            case "None":
              continue;
            case "Square":
            case "Circle":
            case "Diamond":
            case "OpenArrow":
            case "ClosedArrow":
            case "Butt":
            case "ROpenArrow":
            case "RClosedArrow":
            case "Slash":
              this.lineEndings[i] = obj.name;
              continue;
          }
        }
        (0, _util.warn)(`Ignoring invalid lineEnding: ${obj}`);
      }
    }
  }
  setRotation(mk, dict) {
    this.rotation = 0;
    let angle = mk instanceof _primitives.Dict ? mk.get("R") || 0 : dict.get("Rotate") || 0;
    if (Number.isInteger(angle) && angle !== 0) {
      angle %= 360;
      if (angle < 0) {
        angle += 360;
      }
      if (angle % 90 === 0) {
        this.rotation = angle;
      }
    }
  }
  setBorderAndBackgroundColors(mk) {
    if (mk instanceof _primitives.Dict) {
      this.borderColor = getRgbColor(mk.getArray("BC"), null);
      this.backgroundColor = getRgbColor(mk.getArray("BG"), null);
    } else {
      this.borderColor = this.backgroundColor = null;
    }
  }
  setBorderStyle(borderStyle) {
    this.borderStyle = new AnnotationBorderStyle();
    if (!(borderStyle instanceof _primitives.Dict)) {
      return;
    }
    if (borderStyle.has("BS")) {
      const dict = borderStyle.get("BS");
      const dictType = dict.get("Type");
      if (!dictType || (0, _primitives.isName)(dictType, "Border")) {
        this.borderStyle.setWidth(dict.get("W"), this.rectangle);
        this.borderStyle.setStyle(dict.get("S"));
        this.borderStyle.setDashArray(dict.getArray("D"));
      }
    } else if (borderStyle.has("Border")) {
      const array = borderStyle.getArray("Border");
      if (Array.isArray(array) && array.length >= 3) {
        this.borderStyle.setHorizontalCornerRadius(array[0]);
        this.borderStyle.setVerticalCornerRadius(array[1]);
        this.borderStyle.setWidth(array[2], this.rectangle);
        if (array.length === 4) {
          this.borderStyle.setDashArray(array[3], true);
        }
      }
    } else {
      this.borderStyle.setWidth(0);
    }
  }
  setAppearance(dict) {
    this.appearance = null;
    const appearanceStates = dict.get("AP");
    if (!(appearanceStates instanceof _primitives.Dict)) {
      return;
    }
    const normalAppearanceState = appearanceStates.get("N");
    if (normalAppearanceState instanceof _base_stream.BaseStream) {
      this.appearance = normalAppearanceState;
      return;
    }
    if (!(normalAppearanceState instanceof _primitives.Dict)) {
      return;
    }
    const as = dict.get("AS");
    if (!(as instanceof _primitives.Name) || !normalAppearanceState.has(as.name)) {
      return;
    }
    const appearance = normalAppearanceState.get(as.name);
    if (appearance instanceof _base_stream.BaseStream) {
      this.appearance = appearance;
    }
  }
  setOptionalContent(dict) {
    this.oc = null;
    const oc = dict.get("OC");
    if (oc instanceof _primitives.Name) {
      (0, _util.warn)("setOptionalContent: Support for /Name-entry is not implemented.");
    } else if (oc instanceof _primitives.Dict) {
      this.oc = oc;
    }
  }
  loadResources(keys, appearance) {
    return appearance.dict.getAsync("Resources").then(resources => {
      if (!resources) {
        return undefined;
      }
      const objectLoader = new _object_loader.ObjectLoader(resources, keys, resources.xref);
      return objectLoader.load().then(function () {
        return resources;
      });
    });
  }
  async getOperatorList(evaluator, task, intent, renderForms, annotationStorage) {
    const data = this.data;
    let appearance = this.appearance;
    const isUsingOwnCanvas = !!(this.data.hasOwnCanvas && intent & _util.RenderingIntentFlag.DISPLAY);
    if (!appearance) {
      if (!isUsingOwnCanvas) {
        return {
          opList: new _operator_list.OperatorList(),
          separateForm: false,
          separateCanvas: false
        };
      }
      appearance = new _stream.StringStream("");
      appearance.dict = new _primitives.Dict();
    }
    const appearanceDict = appearance.dict;
    const resources = await this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"], appearance);
    const bbox = appearanceDict.getArray("BBox") || [0, 0, 1, 1];
    const matrix = appearanceDict.getArray("Matrix") || [1, 0, 0, 1, 0, 0];
    const transform = getTransformMatrix(data.rect, bbox, matrix);
    const opList = new _operator_list.OperatorList();
    let optionalContent;
    if (this.oc) {
      optionalContent = await evaluator.parseMarkedContentProps(this.oc, null);
    }
    if (optionalContent !== undefined) {
      opList.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]);
    }
    opList.addOp(_util.OPS.beginAnnotation, [data.id, data.rect, transform, matrix, isUsingOwnCanvas]);
    await evaluator.getOperatorList({
      stream: appearance,
      task,
      resources,
      operatorList: opList,
      fallbackFontDict: this._fallbackFontDict
    });
    opList.addOp(_util.OPS.endAnnotation, []);
    if (optionalContent !== undefined) {
      opList.addOp(_util.OPS.endMarkedContent, []);
    }
    this.reset();
    return {
      opList,
      separateForm: false,
      separateCanvas: isUsingOwnCanvas
    };
  }
  async save(evaluator, task, annotationStorage) {
    return null;
  }
  get hasTextContent() {
    return false;
  }
  async extractTextContent(evaluator, task, viewBox) {
    if (!this.appearance) {
      return;
    }
    const resources = await this.loadResources(["ExtGState", "Font", "Properties", "XObject"], this.appearance);
    const text = [];
    const buffer = [];
    let firstPosition = null;
    const sink = {
      desiredSize: Math.Infinity,
      ready: true,
      enqueue(chunk, size) {
        for (const item of chunk.items) {
          if (item.str === undefined) {
            continue;
          }
          firstPosition ||= item.transform.slice(-2);
          buffer.push(item.str);
          if (item.hasEOL) {
            text.push(buffer.join(""));
            buffer.length = 0;
          }
        }
      }
    };
    await evaluator.getTextContent({
      stream: this.appearance,
      task,
      resources,
      includeMarkedContent: true,
      sink,
      viewBox
    });
    this.reset();
    if (buffer.length) {
      text.push(buffer.join(""));
    }
    if (text.length > 1 || text[0]) {
      const appearanceDict = this.appearance.dict;
      const bbox = appearanceDict.getArray("BBox") || [0, 0, 1, 1];
      const matrix = appearanceDict.getArray("Matrix") || [1, 0, 0, 1, 0, 0];
      const rect = this.data.rect;
      const transform = getTransformMatrix(rect, bbox, matrix);
      transform[4] -= rect[0];
      transform[5] -= rect[1];
      firstPosition = _util.Util.applyTransform(firstPosition, transform);
      firstPosition = _util.Util.applyTransform(firstPosition, matrix);
      this.data.textPosition = firstPosition;
      this.data.textContent = text;
    }
  }
  getFieldObject() {
    if (this.data.kidIds) {
      return {
        id: this.data.id,
        actions: this.data.actions,
        name: this.data.fieldName,
        strokeColor: this.data.borderColor,
        fillColor: this.data.backgroundColor,
        type: "",
        kidIds: this.data.kidIds,
        page: this.data.pageIndex,
        rotation: this.rotation
      };
    }
    return null;
  }
  reset() {
    for (const stream of this._streams) {
      stream.reset();
    }
  }
  _constructFieldName(dict) {
    if (!dict.has("T") && !dict.has("Parent")) {
      (0, _util.warn)("Unknown field name, falling back to empty field name.");
      return "";
    }
    if (!dict.has("Parent")) {
      return (0, _util.stringToPDFString)(dict.get("T"));
    }
    const fieldName = [];
    if (dict.has("T")) {
      fieldName.unshift((0, _util.stringToPDFString)(dict.get("T")));
    }
    let loopDict = dict;
    const visited = new _primitives.RefSet();
    if (dict.objId) {
      visited.put(dict.objId);
    }
    while (loopDict.has("Parent")) {
      loopDict = loopDict.get("Parent");
      if (!(loopDict instanceof _primitives.Dict) || loopDict.objId && visited.has(loopDict.objId)) {
        break;
      }
      if (loopDict.objId) {
        visited.put(loopDict.objId);
      }
      if (loopDict.has("T")) {
        fieldName.unshift((0, _util.stringToPDFString)(loopDict.get("T")));
      }
    }
    return fieldName.join(".");
  }
}
exports.Annotation = Annotation;
class AnnotationBorderStyle {
  constructor() {
    this.width = 1;
    this.style = _util.AnnotationBorderStyleType.SOLID;
    this.dashArray = [3];
    this.horizontalCornerRadius = 0;
    this.verticalCornerRadius = 0;
  }
  setWidth(width, rect = [0, 0, 0, 0]) {
    if (width instanceof _primitives.Name) {
      this.width = 0;
      return;
    }
    if (typeof width === "number") {
      if (width > 0) {
        const maxWidth = (rect[2] - rect[0]) / 2;
        const maxHeight = (rect[3] - rect[1]) / 2;
        if (maxWidth > 0 && maxHeight > 0 && (width > maxWidth || width > maxHeight)) {
          (0, _util.warn)(`AnnotationBorderStyle.setWidth - ignoring width: ${width}`);
          width = 1;
        }
      }
      this.width = width;
    }
  }
  setStyle(style) {
    if (!(style instanceof _primitives.Name)) {
      return;
    }
    switch (style.name) {
      case "S":
        this.style = _util.AnnotationBorderStyleType.SOLID;
        break;
      case "D":
        this.style = _util.AnnotationBorderStyleType.DASHED;
        break;
      case "B":
        this.style = _util.AnnotationBorderStyleType.BEVELED;
        break;
      case "I":
        this.style = _util.AnnotationBorderStyleType.INSET;
        break;
      case "U":
        this.style = _util.AnnotationBorderStyleType.UNDERLINE;
        break;
      default:
        break;
    }
  }
  setDashArray(dashArray, forceStyle = false) {
    if (Array.isArray(dashArray) && dashArray.length > 0) {
      let isValid = true;
      let allZeros = true;
      for (const element of dashArray) {
        const validNumber = +element >= 0;
        if (!validNumber) {
          isValid = false;
          break;
        } else if (element > 0) {
          allZeros = false;
        }
      }
      if (isValid && !allZeros) {
        this.dashArray = dashArray;
        if (forceStyle) {
          this.setStyle(_primitives.Name.get("D"));
        }
      } else {
        this.width = 0;
      }
    } else if (dashArray) {
      this.width = 0;
    }
  }
  setHorizontalCornerRadius(radius) {
    if (Number.isInteger(radius)) {
      this.horizontalCornerRadius = radius;
    }
  }
  setVerticalCornerRadius(radius) {
    if (Number.isInteger(radius)) {
      this.verticalCornerRadius = radius;
    }
  }
}
exports.AnnotationBorderStyle = AnnotationBorderStyle;
class MarkupAnnotation extends Annotation {
  constructor(params) {
    super(params);
    const {
      dict
    } = params;
    if (dict.has("IRT")) {
      const rawIRT = dict.getRaw("IRT");
      this.data.inReplyTo = rawIRT instanceof _primitives.Ref ? rawIRT.toString() : null;
      const rt = dict.get("RT");
      this.data.replyType = rt instanceof _primitives.Name ? rt.name : _util.AnnotationReplyType.REPLY;
    }
    let popupRef = null;
    if (this.data.replyType === _util.AnnotationReplyType.GROUP) {
      const parent = dict.get("IRT");
      this.setTitle(parent.get("T"));
      this.data.titleObj = this._title;
      this.setContents(parent.get("Contents"));
      this.data.contentsObj = this._contents;
      if (!parent.has("CreationDate")) {
        this.data.creationDate = null;
      } else {
        this.setCreationDate(parent.get("CreationDate"));
        this.data.creationDate = this.creationDate;
      }
      if (!parent.has("M")) {
        this.data.modificationDate = null;
      } else {
        this.setModificationDate(parent.get("M"));
        this.data.modificationDate = this.modificationDate;
      }
      popupRef = parent.getRaw("Popup");
      if (!parent.has("C")) {
        this.data.color = null;
      } else {
        this.setColor(parent.getArray("C"));
        this.data.color = this.color;
      }
    } else {
      this.data.titleObj = this._title;
      this.setCreationDate(dict.get("CreationDate"));
      this.data.creationDate = this.creationDate;
      popupRef = dict.getRaw("Popup");
      if (!dict.has("C")) {
        this.data.color = null;
      }
    }
    this.data.popupRef = popupRef instanceof _primitives.Ref ? popupRef.toString() : null;
    if (dict.has("RC")) {
      this.data.richText = _factory.XFAFactory.getRichTextAsHtml(dict.get("RC"));
    }
  }
  setCreationDate(creationDate) {
    this.creationDate = typeof creationDate === "string" ? creationDate : null;
  }
  _setDefaultAppearance({
    xref,
    extra,
    strokeColor,
    fillColor,
    blendMode,
    strokeAlpha,
    fillAlpha,
    pointsCallback
  }) {
    let minX = Number.MAX_VALUE;
    let minY = Number.MAX_VALUE;
    let maxX = Number.MIN_VALUE;
    let maxY = Number.MIN_VALUE;
    const buffer = ["q"];
    if (extra) {
      buffer.push(extra);
    }
    if (strokeColor) {
      buffer.push(`${strokeColor[0]} ${strokeColor[1]} ${strokeColor[2]} RG`);
    }
    if (fillColor) {
      buffer.push(`${fillColor[0]} ${fillColor[1]} ${fillColor[2]} rg`);
    }
    let pointsArray = this.data.quadPoints;
    if (!pointsArray) {
      pointsArray = [[{
        x: this.rectangle[0],
        y: this.rectangle[3]
      }, {
        x: this.rectangle[2],
        y: this.rectangle[3]
      }, {
        x: this.rectangle[0],
        y: this.rectangle[1]
      }, {
        x: this.rectangle[2],
        y: this.rectangle[1]
      }]];
    }
    for (const points of pointsArray) {
      const [mX, MX, mY, MY] = pointsCallback(buffer, points);
      minX = Math.min(minX, mX);
      maxX = Math.max(maxX, MX);
      minY = Math.min(minY, mY);
      maxY = Math.max(maxY, MY);
    }
    buffer.push("Q");
    const formDict = new _primitives.Dict(xref);
    const appearanceStreamDict = new _primitives.Dict(xref);
    appearanceStreamDict.set("Subtype", _primitives.Name.get("Form"));
    const appearanceStream = new _stream.StringStream(buffer.join(" "));
    appearanceStream.dict = appearanceStreamDict;
    formDict.set("Fm0", appearanceStream);
    const gsDict = new _primitives.Dict(xref);
    if (blendMode) {
      gsDict.set("BM", _primitives.Name.get(blendMode));
    }
    if (typeof strokeAlpha === "number") {
      gsDict.set("CA", strokeAlpha);
    }
    if (typeof fillAlpha === "number") {
      gsDict.set("ca", fillAlpha);
    }
    const stateDict = new _primitives.Dict(xref);
    stateDict.set("GS0", gsDict);
    const resources = new _primitives.Dict(xref);
    resources.set("ExtGState", stateDict);
    resources.set("XObject", formDict);
    const appearanceDict = new _primitives.Dict(xref);
    appearanceDict.set("Resources", resources);
    const bbox = this.data.rect = [minX, minY, maxX, maxY];
    appearanceDict.set("BBox", bbox);
    this.appearance = new _stream.StringStream("/GS0 gs /Fm0 Do");
    this.appearance.dict = appearanceDict;
    this._streams.push(this.appearance, appearanceStream);
  }
  static async createNewAnnotation(xref, annotation, dependencies, params) {
    const annotationRef = annotation.ref ||= xref.getNewTemporaryRef();
    const ap = await this.createNewAppearanceStream(annotation, xref, params);
    const buffer = [];
    let annotationDict;
    if (ap) {
      const apRef = xref.getNewTemporaryRef();
      annotationDict = this.createNewDict(annotation, xref, {
        apRef
      });
      await (0, _writer.writeObject)(apRef, ap, buffer, xref);
      dependencies.push({
        ref: apRef,
        data: buffer.join("")
      });
    } else {
      annotationDict = this.createNewDict(annotation, xref, {});
    }
    if (Number.isInteger(annotation.parentTreeId)) {
      annotationDict.set("StructParent", annotation.parentTreeId);
    }
    buffer.length = 0;
    await (0, _writer.writeObject)(annotationRef, annotationDict, buffer, xref);
    return {
      ref: annotationRef,
      data: buffer.join("")
    };
  }
  static async createNewPrintAnnotation(annotationGlobals, xref, annotation, params) {
    const ap = await this.createNewAppearanceStream(annotation, xref, params);
    const annotationDict = this.createNewDict(annotation, xref, {
      ap
    });
    const newAnnotation = new this.prototype.constructor({
      dict: annotationDict,
      xref,
      annotationGlobals,
      evaluatorOptions: params.evaluatorOptions
    });
    if (annotation.ref) {
      newAnnotation.ref = newAnnotation.refToReplace = annotation.ref;
    }
    return newAnnotation;
  }
}
exports.MarkupAnnotation = MarkupAnnotation;
class WidgetAnnotation extends Annotation {
  constructor(params) {
    super(params);
    const {
      dict,
      xref,
      annotationGlobals
    } = params;
    const data = this.data;
    this._needAppearances = params.needAppearances;
    data.annotationType = _util.AnnotationType.WIDGET;
    if (data.fieldName === undefined) {
      data.fieldName = this._constructFieldName(dict);
    }
    if (data.actions === undefined) {
      data.actions = (0, _core_utils.collectActions)(xref, dict, _util.AnnotationActionEventType);
    }
    let fieldValue = (0, _core_utils.getInheritableProperty)({
      dict,
      key: "V",
      getArray: true
    });
    data.fieldValue = this._decodeFormValue(fieldValue);
    const defaultFieldValue = (0, _core_utils.getInheritableProperty)({
      dict,
      key: "DV",
      getArray: true
    });
    data.defaultFieldValue = this._decodeFormValue(defaultFieldValue);
    if (fieldValue === undefined && annotationGlobals.xfaDatasets) {
      const path = this._title.str;
      if (path) {
        this._hasValueFromXFA = true;
        data.fieldValue = fieldValue = annotationGlobals.xfaDatasets.getValue(path);
      }
    }
    if (fieldValue === undefined && data.defaultFieldValue !== null) {
      data.fieldValue = data.defaultFieldValue;
    }
    data.alternativeText = (0, _util.stringToPDFString)(dict.get("TU") || "");
    this.setDefaultAppearance(params);
    data.hasAppearance ||= this._needAppearances && data.fieldValue !== undefined && data.fieldValue !== null;
    const fieldType = (0, _core_utils.getInheritableProperty)({
      dict,
      key: "FT"
    });
    data.fieldType = fieldType instanceof _primitives.Name ? fieldType.name : null;
    const localResources = (0, _core_utils.getInheritableProperty)({
      dict,
      key: "DR"
    });
    const acroFormResources = annotationGlobals.acroForm.get("DR");
    const appearanceResources = this.appearance?.dict.get("Resources");
    this._fieldResources = {
      localResources,
      acroFormResources,
      appearanceResources,
      mergedResources: _primitives.Dict.merge({
        xref,
        dictArray: [localResources, appearanceResources, acroFormResources],
        mergeSubDicts: true
      })
    };
    data.fieldFlags = (0, _core_utils.getInheritableProperty)({
      dict,
      key: "Ff"
    });
    if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) {
      data.fieldFlags = 0;
    }
    data.readOnly = this.hasFieldFlag(_util.AnnotationFieldFlag.READONLY);
    data.required = this.hasFieldFlag(_util.AnnotationFieldFlag.REQUIRED);
    data.hidden = this._hasFlag(data.annotationFlags, _util.AnnotationFlag.HIDDEN) || this._hasFlag(data.annotationFlags, _util.AnnotationFlag.NOVIEW);
  }
  _decodeFormValue(formValue) {
    if (Array.isArray(formValue)) {
      return formValue.filter(item => typeof item === "string").map(item => (0, _util.stringToPDFString)(item));
    } else if (formValue instanceof _primitives.Name) {
      return (0, _util.stringToPDFString)(formValue.name);
    } else if (typeof formValue === "string") {
      return (0, _util.stringToPDFString)(formValue);
    }
    return null;
  }
  hasFieldFlag(flag) {
    return !!(this.data.fieldFlags & flag);
  }
  _isViewable(flags) {
    return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE);
  }
  mustBeViewed(annotationStorage, renderForms) {
    if (renderForms) {
      return this.viewable;
    }
    return super.mustBeViewed(annotationStorage, renderForms) && !this._hasFlag(this.flags, _util.AnnotationFlag.NOVIEW);
  }
  getRotationMatrix(annotationStorage) {
    let rotation = annotationStorage?.get(this.data.id)?.rotation;
    if (rotation === undefined) {
      rotation = this.rotation;
    }
    if (rotation === 0) {
      return _util.IDENTITY_MATRIX;
    }
    const width = this.data.rect[2] - this.data.rect[0];
    const height = this.data.rect[3] - this.data.rect[1];
    return (0, _core_utils.getRotationMatrix)(rotation, width, height);
  }
  getBorderAndBackgroundAppearances(annotationStorage) {
    let rotation = annotationStorage?.get(this.data.id)?.rotation;
    if (rotation === undefined) {
      rotation = this.rotation;
    }
    if (!this.backgroundColor && !this.borderColor) {
      return "";
    }
    const width = this.data.rect[2] - this.data.rect[0];
    const height = this.data.rect[3] - this.data.rect[1];
    const rect = rotation === 0 || rotation === 180 ? `0 0 ${width} ${height} re` : `0 0 ${height} ${width} re`;
    let str = "";
    if (this.backgroundColor) {
      str = `${(0, _default_appearance.getPdfColor)(this.backgroundColor, true)} ${rect} f `;
    }
    if (this.borderColor) {
      const borderWidth = this.borderStyle.width || 1;
      str += `${borderWidth} w ${(0, _default_appearance.getPdfColor)(this.borderColor, false)} ${rect} S `;
    }
    return str;
  }
  async getOperatorList(evaluator, task, intent, renderForms, annotationStorage) {
    if (renderForms && !(this instanceof SignatureWidgetAnnotation) && !this.data.noHTML && !this.data.hasOwnCanvas) {
      return {
        opList: new _operator_list.OperatorList(),
        separateForm: true,
        separateCanvas: false
      };
    }
    if (!this._hasText) {
      return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage);
    }
    const content = await this._getAppearance(evaluator, task, intent, annotationStorage);
    if (this.appearance && content === null) {
      return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage);
    }
    const opList = new _operator_list.OperatorList();
    if (!this._defaultAppearance || content === null) {
      return {
        opList,
        separateForm: false,
        separateCanvas: false
      };
    }
    const isUsingOwnCanvas = !!(this.data.hasOwnCanvas && intent & _util.RenderingIntentFlag.DISPLAY);
    const matrix = [1, 0, 0, 1, 0, 0];
    const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]];
    const transform = getTransformMatrix(this.data.rect, bbox, matrix);
    let optionalContent;
    if (this.oc) {
      optionalContent = await evaluator.parseMarkedContentProps(this.oc, null);
    }
    if (optionalContent !== undefined) {
      opList.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]);
    }
    opList.addOp(_util.OPS.beginAnnotation, [this.data.id, this.data.rect, transform, this.getRotationMatrix(annotationStorage), isUsingOwnCanvas]);
    const stream = new _stream.StringStream(content);
    await evaluator.getOperatorList({
      stream,
      task,
      resources: this._fieldResources.mergedResources,
      operatorList: opList
    });
    opList.addOp(_util.OPS.endAnnotation, []);
    if (optionalContent !== undefined) {
      opList.addOp(_util.OPS.endMarkedContent, []);
    }
    return {
      opList,
      separateForm: false,
      separateCanvas: isUsingOwnCanvas
    };
  }
  _getMKDict(rotation) {
    const mk = new _primitives.Dict(null);
    if (rotation) {
      mk.set("R", rotation);
    }
    if (this.borderColor) {
      mk.set("BC", getPdfColorArray(this.borderColor));
    }
    if (this.backgroundColor) {
      mk.set("BG", getPdfColorArray(this.backgroundColor));
    }
    return mk.size > 0 ? mk : null;
  }
  amendSavedDict(annotationStorage, dict) {}
  async save(evaluator, task, annotationStorage) {
    const storageEntry = annotationStorage?.get(this.data.id);
    let value = storageEntry?.value,
      rotation = storageEntry?.rotation;
    if (value === this.data.fieldValue || value === undefined) {
      if (!this._hasValueFromXFA && rotation === undefined) {
        return null;
      }
      value ||= this.data.fieldValue;
    }
    if (rotation === undefined && !this._hasValueFromXFA && Array.isArray(value) && Array.isArray(this.data.fieldValue) && value.length === this.data.fieldValue.length && value.every((x, i) => x === this.data.fieldValue[i])) {
      return null;
    }
    if (rotation === undefined) {
      rotation = this.rotation;
    }
    let appearance = null;
    if (!this._needAppearances) {
      appearance = await this._getAppearance(evaluator, task, _util.RenderingIntentFlag.SAVE, annotationStorage);
      if (appearance === null) {
        return null;
      }
    } else {}
    let needAppearances = false;
    if (appearance?.needAppearances) {
      needAppearances = true;
      appearance = null;
    }
    const {
      xref
    } = evaluator;
    const originalDict = xref.fetchIfRef(this.ref);
    if (!(originalDict instanceof _primitives.Dict)) {
      return null;
    }
    const dict = new _primitives.Dict(xref);
    for (const key of originalDict.getKeys()) {
      if (key !== "AP") {
        dict.set(key, originalDict.getRaw(key));
      }
    }
    const xfa = {
      path: this.data.fieldName,
      value
    };
    const encoder = val => {
      return (0, _core_utils.isAscii)(val) ? val : (0, _core_utils.stringToUTF16String)(val, true);
    };
    dict.set("V", Array.isArray(value) ? value.map(encoder) : encoder(value));
    this.amendSavedDict(annotationStorage, dict);
    const maybeMK = this._getMKDict(rotation);
    if (maybeMK) {
      dict.set("MK", maybeMK);
    }
    const buffer = [];
    const changes = [{
      ref: this.ref,
      data: "",
      xfa,
      needAppearances
    }];
    if (appearance !== null) {
      const newRef = xref.getNewTemporaryRef();
      const AP = new _primitives.Dict(xref);
      dict.set("AP", AP);
      AP.set("N", newRef);
      const resources = this._getSaveFieldResources(xref);
      const appearanceStream = new _stream.StringStream(appearance);
      const appearanceDict = appearanceStream.dict = new _primitives.Dict(xref);
      appearanceDict.set("Subtype", _primitives.Name.get("Form"));
      appearanceDict.set("Resources", resources);
      appearanceDict.set("BBox", [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]]);
      const rotationMatrix = this.getRotationMatrix(annotationStorage);
      if (rotationMatrix !== _util.IDENTITY_MATRIX) {
        appearanceDict.set("Matrix", rotationMatrix);
      }
      await (0, _writer.writeObject)(newRef, appearanceStream, buffer, xref);
      changes.push({
        ref: newRef,
        data: buffer.join(""),
        xfa: null,
        needAppearances: false
      });
      buffer.length = 0;
    }
    dict.set("M", `D:${(0, _util.getModificationDate)()}`);
    await (0, _writer.writeObject)(this.ref, dict, buffer, xref);
    changes[0].data = buffer.join("");
    return changes;
  }
  async _getAppearance(evaluator, task, intent, annotationStorage) {
    const isPassword = this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD);
    if (isPassword) {
      return null;
    }
    const storageEntry = annotationStorage?.get(this.data.id);
    let value, rotation;
    if (storageEntry) {
      value = storageEntry.formattedValue || storageEntry.value;
      rotation = storageEntry.rotation;
    }
    if (rotation === undefined && value === undefined && !this._needAppearances) {
      if (!this._hasValueFromXFA || this.appearance) {
        return null;
      }
    }
    const colors = this.getBorderAndBackgroundAppearances(annotationStorage);
    if (value === undefined) {
      value = this.data.fieldValue;
      if (!value) {
        return `/Tx BMC q ${colors}Q EMC`;
      }
    }
    if (Array.isArray(value) && value.length === 1) {
      value = value[0];
    }
    (0, _util.assert)(typeof value === "string", "Expected `value` to be a string.");
    value = value.trim();
    if (this.data.combo) {
      const option = this.data.options.find(({
        exportValue
      }) => value === exportValue);
      value = option?.displayValue || value;
    }
    if (value === "") {
      return `/Tx BMC q ${colors}Q EMC`;
    }
    if (rotation === undefined) {
      rotation = this.rotation;
    }
    let lineCount = -1;
    let lines;
    if (this.data.multiLine) {
      lines = value.split(/\r\n?|\n/).map(line => line.normalize("NFC"));
      lineCount = lines.length;
    } else {
      lines = [value.replace(/\r\n?|\n/, "").normalize("NFC")];
    }
    const defaultPadding = 1;
    const defaultHPadding = 2;
    let totalHeight = this.data.rect[3] - this.data.rect[1];
    let totalWidth = this.data.rect[2] - this.data.rect[0];
    if (rotation === 90 || rotation === 270) {
      [totalWidth, totalHeight] = [totalHeight, totalWidth];
    }
    if (!this._defaultAppearance) {
      this.data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this._defaultAppearance = "/Helvetica 0 Tf 0 g");
    }
    let font = await WidgetAnnotation._getFontData(evaluator, task, this.data.defaultAppearanceData, this._fieldResources.mergedResources);
    let defaultAppearance, fontSize, lineHeight;
    const encodedLines = [];
    let encodingError = false;
    for (const line of lines) {
      const encodedString = font.encodeString(line);
      if (encodedString.length > 1) {
        encodingError = true;
      }
      encodedLines.push(encodedString.join(""));
    }
    if (encodingError && intent & _util.RenderingIntentFlag.SAVE) {
      return {
        needAppearances: true
      };
    }
    if (encodingError && this._isOffscreenCanvasSupported) {
      const fontFamily = this.data.comb ? "monospace" : "sans-serif";
      const fakeUnicodeFont = new _default_appearance.FakeUnicodeFont(evaluator.xref, fontFamily);
      const resources = fakeUnicodeFont.createFontResources(lines.join(""));
      const newFont = resources.getRaw("Font");
      if (this._fieldResources.mergedResources.has("Font")) {
        const oldFont = this._fieldResources.mergedResources.get("Font");
        for (const key of newFont.getKeys()) {
          oldFont.set(key, newFont.getRaw(key));
        }
      } else {
        this._fieldResources.mergedResources.set("Font", newFont);
      }
      const fontName = fakeUnicodeFont.fontName.name;
      font = await WidgetAnnotation._getFontData(evaluator, task, {
        fontName,
        fontSize: 0
      }, resources);
      for (let i = 0, ii = encodedLines.length; i < ii; i++) {
        encodedLines[i] = (0, _core_utils.stringToUTF16String)(lines[i]);
      }
      const savedDefaultAppearance = Object.assign(Object.create(null), this.data.defaultAppearanceData);
      this.data.defaultAppearanceData.fontSize = 0;
      this.data.defaultAppearanceData.fontName = fontName;
      [defaultAppearance, fontSize, lineHeight] = this._computeFontSize(totalHeight - 2 * defaultPadding, totalWidth - 2 * defaultHPadding, value, font, lineCount);
      this.data.defaultAppearanceData = savedDefaultAppearance;
    } else {
      if (!this._isOffscreenCanvasSupported) {
        (0, _util.warn)("_getAppearance: OffscreenCanvas is not supported, annotation may not render correctly.");
      }
      [defaultAppearance, fontSize, lineHeight] = this._computeFontSize(totalHeight - 2 * defaultPadding, totalWidth - 2 * defaultHPadding, value, font, lineCount);
    }
    let descent = font.descent;
    if (isNaN(descent)) {
      descent = _util.BASELINE_FACTOR * lineHeight;
    } else {
      descent = Math.max(_util.BASELINE_FACTOR * lineHeight, Math.abs(descent) * fontSize);
    }
    const defaultVPadding = Math.min(Math.floor((totalHeight - fontSize) / 2), defaultPadding);
    const alignment = this.data.textAlignment;
    if (this.data.multiLine) {
      return this._getMultilineAppearance(defaultAppearance, encodedLines, font, fontSize, totalWidth, totalHeight, alignment, defaultHPadding, defaultVPadding, descent, lineHeight, annotationStorage);
    }
    if (this.data.comb) {
      return this._getCombAppearance(defaultAppearance, font, encodedLines[0], fontSize, totalWidth, totalHeight, defaultHPadding, defaultVPadding, descent, lineHeight, annotationStorage);
    }
    const bottomPadding = defaultVPadding + descent;
    if (alignment === 0 || alignment > 2) {
      return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 ${(0, _core_utils.numberToString)(defaultHPadding)} ${(0, _core_utils.numberToString)(bottomPadding)} Tm (${(0, _core_utils.escapeString)(encodedLines[0])}) Tj` + " ET Q EMC";
    }
    const prevInfo = {
      shift: 0
    };
    const renderedText = this._renderText(encodedLines[0], font, fontSize, totalWidth, alignment, prevInfo, defaultHPadding, bottomPadding);
    return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 0 0 Tm ${renderedText}` + " ET Q EMC";
  }
  static async _getFontData(evaluator, task, appearanceData, resources) {
    const operatorList = new _operator_list.OperatorList();
    const initialState = {
      font: null,
      clone() {
        return this;
      }
    };
    const {
      fontName,
      fontSize
    } = appearanceData;
    await evaluator.handleSetFont(resources, [fontName && _primitives.Name.get(fontName), fontSize], null, operatorList, task, initialState, null);
    return initialState.font;
  }
  _getTextWidth(text, font) {
    return font.charsToGlyphs(text).reduce((width, glyph) => width + glyph.width, 0) / 1000;
  }
  _computeFontSize(height, width, text, font, lineCount) {
    let {
      fontSize
    } = this.data.defaultAppearanceData;
    let lineHeight = (fontSize || 12) * _util.LINE_FACTOR,
      numberOfLines = Math.round(height / lineHeight);
    if (!fontSize) {
      const roundWithTwoDigits = x => Math.floor(x * 100) / 100;
      if (lineCount === -1) {
        const textWidth = this._getTextWidth(text, font);
        fontSize = roundWithTwoDigits(Math.min(height / _util.LINE_FACTOR, textWidth > width ? width / textWidth : Infinity));
        numberOfLines = 1;
      } else {
        const lines = text.split(/\r\n?|\n/);
        const cachedLines = [];
        for (const line of lines) {
          const encoded = font.encodeString(line).join("");
          const glyphs = font.charsToGlyphs(encoded);
          const positions = font.getCharPositions(encoded);
          cachedLines.push({
            line: encoded,
            glyphs,
            positions
          });
        }
        const isTooBig = fsize => {
          let totalHeight = 0;
          for (const cache of cachedLines) {
            const chunks = this._splitLine(null, font, fsize, width, cache);
            totalHeight += chunks.length * fsize;
            if (totalHeight > height) {
              return true;
            }
          }
          return false;
        };
        numberOfLines = Math.max(numberOfLines, lineCount);
        while (true) {
          lineHeight = height / numberOfLines;
          fontSize = roundWithTwoDigits(lineHeight / _util.LINE_FACTOR);
          if (isTooBig(fontSize)) {
            numberOfLines++;
            continue;
          }
          break;
        }
      }
      const {
        fontName,
        fontColor
      } = this.data.defaultAppearanceData;
      this._defaultAppearance = (0, _default_appearance.createDefaultAppearance)({
        fontSize,
        fontName,
        fontColor
      });
    }
    return [this._defaultAppearance, fontSize, height / numberOfLines];
  }
  _renderText(text, font, fontSize, totalWidth, alignment, prevInfo, hPadding, vPadding) {
    let shift;
    if (alignment === 1) {
      const width = this._getTextWidth(text, font) * fontSize;
      shift = (totalWidth - width) / 2;
    } else if (alignment === 2) {
      const width = this._getTextWidth(text, font) * fontSize;
      shift = totalWidth - width - hPadding;
    } else {
      shift = hPadding;
    }
    const shiftStr = (0, _core_utils.numberToString)(shift - prevInfo.shift);
    prevInfo.shift = shift;
    vPadding = (0, _core_utils.numberToString)(vPadding);
    return `${shiftStr} ${vPadding} Td (${(0, _core_utils.escapeString)(text)}) Tj`;
  }
  _getSaveFieldResources(xref) {
    const {
      localResources,
      appearanceResources,
      acroFormResources
    } = this._fieldResources;
    const fontName = this.data.defaultAppearanceData?.fontName;
    if (!fontName) {
      return localResources || _primitives.Dict.empty;
    }
    for (const resources of [localResources, appearanceResources]) {
      if (resources instanceof _primitives.Dict) {
        const localFont = resources.get("Font");
        if (localFont instanceof _primitives.Dict && localFont.has(fontName)) {
          return resources;
        }
      }
    }
    if (acroFormResources instanceof _primitives.Dict) {
      const acroFormFont = acroFormResources.get("Font");
      if (acroFormFont instanceof _primitives.Dict && acroFormFont.has(fontName)) {
        const subFontDict = new _primitives.Dict(xref);
        subFontDict.set(fontName, acroFormFont.getRaw(fontName));
        const subResourcesDict = new _primitives.Dict(xref);
        subResourcesDict.set("Font", subFontDict);
        return _primitives.Dict.merge({
          xref,
          dictArray: [subResourcesDict, localResources],
          mergeSubDicts: true
        });
      }
    }
    return localResources || _primitives.Dict.empty;
  }
  getFieldObject() {
    return null;
  }
}
class TextWidgetAnnotation extends WidgetAnnotation {
  constructor(params) {
    super(params);
    this.data.hasOwnCanvas = this.data.readOnly && !this.data.noHTML;
    this._hasText = true;
    const dict = params.dict;
    if (typeof this.data.fieldValue !== "string") {
      this.data.fieldValue = "";
    }
    let alignment = (0, _core_utils.getInheritableProperty)({
      dict,
      key: "Q"
    });
    if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) {
      alignment = null;
    }
    this.data.textAlignment = alignment;
    let maximumLength = (0, _core_utils.getInheritableProperty)({
      dict,
      key: "MaxLen"
    });
    if (!Number.isInteger(maximumLength) || maximumLength < 0) {
      maximumLength = 0;
    }
    this.data.maxLen = maximumLength;
    this.data.multiLine = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE);
    this.data.comb = this.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && !this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && !this.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && this.data.maxLen !== 0;
    this.data.doNotScroll = this.hasFieldFlag(_util.AnnotationFieldFlag.DONOTSCROLL);
  }
  get hasTextContent() {
    return !!this.appearance && !this._needAppearances;
  }
  _getCombAppearance(defaultAppearance, font, text, fontSize, width, height, hPadding, vPadding, descent, lineHeight, annotationStorage) {
    const combWidth = width / this.data.maxLen;
    const colors = this.getBorderAndBackgroundAppearances(annotationStorage);
    const buf = [];
    const positions = font.getCharPositions(text);
    for (const [start, end] of positions) {
      buf.push(`(${(0, _core_utils.escapeString)(text.substring(start, end))}) Tj`);
    }
    const renderedComb = buf.join(` ${(0, _core_utils.numberToString)(combWidth)} 0 Td `);
    return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 ${(0, _core_utils.numberToString)(hPadding)} ${(0, _core_utils.numberToString)(vPadding + descent)} Tm ${renderedComb}` + " ET Q EMC";
  }
  _getMultilineAppearance(defaultAppearance, lines, font, fontSize, width, height, alignment, hPadding, vPadding, descent, lineHeight, annotationStorage) {
    const buf = [];
    const totalWidth = width - 2 * hPadding;
    const prevInfo = {
      shift: 0
    };
    for (let i = 0, ii = lines.length; i < ii; i++) {
      const line = lines[i];
      const chunks = this._splitLine(line, font, fontSize, totalWidth);
      for (let j = 0, jj = chunks.length; j < jj; j++) {
        const chunk = chunks[j];
        const vShift = i === 0 && j === 0 ? -vPadding - (lineHeight - descent) : -lineHeight;
        buf.push(this._renderText(chunk, font, fontSize, width, alignment, prevInfo, hPadding, vShift));
      }
    }
    const colors = this.getBorderAndBackgroundAppearances(annotationStorage);
    const renderedText = buf.join("\n");
    return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 0 ${(0, _core_utils.numberToString)(height)} Tm ${renderedText}` + " ET Q EMC";
  }
  _splitLine(line, font, fontSize, width, cache = {}) {
    line = cache.line || line;
    const glyphs = cache.glyphs || font.charsToGlyphs(line);
    if (glyphs.length <= 1) {
      return [line];
    }
    const positions = cache.positions || font.getCharPositions(line);
    const scale = fontSize / 1000;
    const chunks = [];
    let lastSpacePosInStringStart = -1,
      lastSpacePosInStringEnd = -1,
      lastSpacePos = -1,
      startChunk = 0,
      currentWidth = 0;
    for (let i = 0, ii = glyphs.length; i < ii; i++) {
      const [start, end] = positions[i];
      const glyph = glyphs[i];
      const glyphWidth = glyph.width * scale;
      if (glyph.unicode === " ") {
        if (currentWidth + glyphWidth > width) {
          chunks.push(line.substring(startChunk, start));
          startChunk = start;
          currentWidth = glyphWidth;
          lastSpacePosInStringStart = -1;
          lastSpacePos = -1;
        } else {
          currentWidth += glyphWidth;
          lastSpacePosInStringStart = start;
          lastSpacePosInStringEnd = end;
          lastSpacePos = i;
        }
      } else if (currentWidth + glyphWidth > width) {
        if (lastSpacePosInStringStart !== -1) {
          chunks.push(line.substring(startChunk, lastSpacePosInStringEnd));
          startChunk = lastSpacePosInStringEnd;
          i = lastSpacePos + 1;
          lastSpacePosInStringStart = -1;
          currentWidth = 0;
        } else {
          chunks.push(line.substring(startChunk, start));
          startChunk = start;
          currentWidth = glyphWidth;
        }
      } else {
        currentWidth += glyphWidth;
      }
    }
    if (startChunk < line.length) {
      chunks.push(line.substring(startChunk, line.length));
    }
    return chunks;
  }
  getFieldObject() {
    return {
      id: this.data.id,
      value: this.data.fieldValue,
      defaultValue: this.data.defaultFieldValue || "",
      multiline: this.data.multiLine,
      password: this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD),
      charLimit: this.data.maxLen,
      comb: this.data.comb,
      editable: !this.data.readOnly,
      hidden: this.data.hidden,
      name: this.data.fieldName,
      rect: this.data.rect,
      actions: this.data.actions,
      page: this.data.pageIndex,
      strokeColor: this.data.borderColor,
      fillColor: this.data.backgroundColor,
      rotation: this.rotation,
      type: "text"
    };
  }
}
class ButtonWidgetAnnotation extends WidgetAnnotation {
  constructor(params) {
    super(params);
    this.checkedAppearance = null;
    this.uncheckedAppearance = null;
    this.data.checkBox = !this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
    this.data.radioButton = this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
    this.data.pushButton = this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
    this.data.isTooltipOnly = false;
    if (this.data.checkBox) {
      this._processCheckBox(params);
    } else if (this.data.radioButton) {
      this._processRadioButton(params);
    } else if (this.data.pushButton) {
      this.data.hasOwnCanvas = true;
      this._processPushButton(params);
    } else {
      (0, _util.warn)("Invalid field flags for button widget annotation");
    }
  }
  async getOperatorList(evaluator, task, intent, renderForms, annotationStorage) {
    if (this.data.pushButton) {
      return super.getOperatorList(evaluator, task, intent, false, annotationStorage);
    }
    let value = null;
    let rotation = null;
    if (annotationStorage) {
      const storageEntry = annotationStorage.get(this.data.id);
      value = storageEntry ? storageEntry.value : null;
      rotation = storageEntry ? storageEntry.rotation : null;
    }
    if (value === null && this.appearance) {
      return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage);
    }
    if (value === null || value === undefined) {
      value = this.data.checkBox ? this.data.fieldValue === this.data.exportValue : this.data.fieldValue === this.data.buttonValue;
    }
    const appearance = value ? this.checkedAppearance : this.uncheckedAppearance;
    if (appearance) {
      const savedAppearance = this.appearance;
      const savedMatrix = appearance.dict.getArray("Matrix") || _util.IDENTITY_MATRIX;
      if (rotation) {
        appearance.dict.set("Matrix", this.getRotationMatrix(annotationStorage));
      }
      this.appearance = appearance;
      const operatorList = super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage);
      this.appearance = savedAppearance;
      appearance.dict.set("Matrix", savedMatrix);
      return operatorList;
    }
    return {
      opList: new _operator_list.OperatorList(),
      separateForm: false,
      separateCanvas: false
    };
  }
  async save(evaluator, task, annotationStorage) {
    if (this.data.checkBox) {
      return this._saveCheckbox(evaluator, task, annotationStorage);
    }
    if (this.data.radioButton) {
      return this._saveRadioButton(evaluator, task, annotationStorage);
    }
    return null;
  }
  async _saveCheckbox(evaluator, task, annotationStorage) {
    if (!annotationStorage) {
      return null;
    }
    const storageEntry = annotationStorage.get(this.data.id);
    let rotation = storageEntry?.rotation,
      value = storageEntry?.value;
    if (rotation === undefined) {
      if (value === undefined) {
        return null;
      }
      const defaultValue = this.data.fieldValue === this.data.exportValue;
      if (defaultValue === value) {
        return null;
      }
    }
    const dict = evaluator.xref.fetchIfRef(this.ref);
    if (!(dict instanceof _primitives.Dict)) {
      return null;
    }
    if (rotation === undefined) {
      rotation = this.rotation;
    }
    if (value === undefined) {
      value = this.data.fieldValue === this.data.exportValue;
    }
    const xfa = {
      path: this.data.fieldName,
      value: value ? this.data.exportValue : ""
    };
    const name = _primitives.Name.get(value ? this.data.exportValue : "Off");
    dict.set("V", name);
    dict.set("AS", name);
    dict.set("M", `D:${(0, _util.getModificationDate)()}`);
    const maybeMK = this._getMKDict(rotation);
    if (maybeMK) {
      dict.set("MK", maybeMK);
    }
    const buffer = [];
    await (0, _writer.writeObject)(this.ref, dict, buffer, evaluator.xref);
    return [{
      ref: this.ref,
      data: buffer.join(""),
      xfa
    }];
  }
  async _saveRadioButton(evaluator, task, annotationStorage) {
    if (!annotationStorage) {
      return null;
    }
    const storageEntry = annotationStorage.get(this.data.id);
    let rotation = storageEntry?.rotation,
      value = storageEntry?.value;
    if (rotation === undefined) {
      if (value === undefined) {
        return null;
      }
      const defaultValue = this.data.fieldValue === this.data.buttonValue;
      if (defaultValue === value) {
        return null;
      }
    }
    const dict = evaluator.xref.fetchIfRef(this.ref);
    if (!(dict instanceof _primitives.Dict)) {
      return null;
    }
    if (value === undefined) {
      value = this.data.fieldValue === this.data.buttonValue;
    }
    if (rotation === undefined) {
      rotation = this.rotation;
    }
    const xfa = {
      path: this.data.fieldName,
      value: value ? this.data.buttonValue : ""
    };
    const name = _primitives.Name.get(value ? this.data.buttonValue : "Off");
    const buffer = [];
    let parentData = null;
    if (value) {
      if (this.parent instanceof _primitives.Ref) {
        const parent = evaluator.xref.fetch(this.parent);
        parent.set("V", name);
        await (0, _writer.writeObject)(this.parent, parent, buffer, evaluator.xref);
        parentData = buffer.join("");
        buffer.length = 0;
      } else if (this.parent instanceof _primitives.Dict) {
        this.parent.set("V", name);
      }
    }
    dict.set("AS", name);
    dict.set("M", `D:${(0, _util.getModificationDate)()}`);
    const maybeMK = this._getMKDict(rotation);
    if (maybeMK) {
      dict.set("MK", maybeMK);
    }
    await (0, _writer.writeObject)(this.ref, dict, buffer, evaluator.xref);
    const newRefs = [{
      ref: this.ref,
      data: buffer.join(""),
      xfa
    }];
    if (parentData) {
      newRefs.push({
        ref: this.parent,
        data: parentData,
        xfa: null
      });
    }
    return newRefs;
  }
  _getDefaultCheckedAppearance(params, type) {
    const width = this.data.rect[2] - this.data.rect[0];
    const height = this.data.rect[3] - this.data.rect[1];
    const bbox = [0, 0, width, height];
    const FONT_RATIO = 0.8;
    const fontSize = Math.min(width, height) * FONT_RATIO;
    let metrics, char;
    if (type === "check") {
      metrics = {
        width: 0.755 * fontSize,
        height: 0.705 * fontSize
      };
      char = "\x33";
    } else if (type === "disc") {
      metrics = {
        width: 0.791 * fontSize,
        height: 0.705 * fontSize
      };
      char = "\x6C";
    } else {
      (0, _util.unreachable)(`_getDefaultCheckedAppearance - unsupported type: ${type}`);
    }
    const xShift = (0, _core_utils.numberToString)((width - metrics.width) / 2);
    const yShift = (0, _core_utils.numberToString)((height - metrics.height) / 2);
    const appearance = `q BT /PdfJsZaDb ${fontSize} Tf 0 g ${xShift} ${yShift} Td (${char}) Tj ET Q`;
    const appearanceStreamDict = new _primitives.Dict(params.xref);
    appearanceStreamDict.set("FormType", 1);
    appearanceStreamDict.set("Subtype", _primitives.Name.get("Form"));
    appearanceStreamDict.set("Type", _primitives.Name.get("XObject"));
    appearanceStreamDict.set("BBox", bbox);
    appearanceStreamDict.set("Matrix", [1, 0, 0, 1, 0, 0]);
    appearanceStreamDict.set("Length", appearance.length);
    const resources = new _primitives.Dict(params.xref);
    const font = new _primitives.Dict(params.xref);
    font.set("PdfJsZaDb", this.fallbackFontDict);
    resources.set("Font", font);
    appearanceStreamDict.set("Resources", resources);
    this.checkedAppearance = new _stream.StringStream(appearance);
    this.checkedAppearance.dict = appearanceStreamDict;
    this._streams.push(this.checkedAppearance);
  }
  _processCheckBox(params) {
    const customAppearance = params.dict.get("AP");
    if (!(customAppearance instanceof _primitives.Dict)) {
      return;
    }
    const normalAppearance = customAppearance.get("N");
    if (!(normalAppearance instanceof _primitives.Dict)) {
      return;
    }
    const asValue = this._decodeFormValue(params.dict.get("AS"));
    if (typeof asValue === "string") {
      this.data.fieldValue = asValue;
    }
    const yes = this.data.fieldValue !== null && this.data.fieldValue !== "Off" ? this.data.fieldValue : "Yes";
    const exportValues = normalAppearance.getKeys();
    if (exportValues.length === 0) {
      exportValues.push("Off", yes);
    } else if (exportValues.length === 1) {
      if (exportValues[0] === "Off") {
        exportValues.push(yes);
      } else {
        exportValues.unshift("Off");
      }
    } else if (exportValues.includes(yes)) {
      exportValues.length = 0;
      exportValues.push("Off", yes);
    } else {
      const otherYes = exportValues.find(v => v !== "Off");
      exportValues.length = 0;
      exportValues.push("Off", otherYes);
    }
    if (!exportValues.includes(this.data.fieldValue)) {
      this.data.fieldValue = "Off";
    }
    this.data.exportValue = exportValues[1];
    const checkedAppearance = normalAppearance.get(this.data.exportValue);
    this.checkedAppearance = checkedAppearance instanceof _base_stream.BaseStream ? checkedAppearance : null;
    const uncheckedAppearance = normalAppearance.get("Off");
    this.uncheckedAppearance = uncheckedAppearance instanceof _base_stream.BaseStream ? uncheckedAppearance : null;
    if (this.checkedAppearance) {
      this._streams.push(this.checkedAppearance);
    } else {
      this._getDefaultCheckedAppearance(params, "check");
    }
    if (this.uncheckedAppearance) {
      this._streams.push(this.uncheckedAppearance);
    }
    this._fallbackFontDict = this.fallbackFontDict;
    if (this.data.defaultFieldValue === null) {
      this.data.defaultFieldValue = "Off";
    }
  }
  _processRadioButton(params) {
    this.data.fieldValue = this.data.buttonValue = null;
    const fieldParent = params.dict.get("Parent");
    if (fieldParent instanceof _primitives.Dict) {
      this.parent = params.dict.getRaw("Parent");
      const fieldParentValue = fieldParent.get("V");
      if (fieldParentValue instanceof _primitives.Name) {
        this.data.fieldValue = this._decodeFormValue(fieldParentValue);
      }
    }
    const appearanceStates = params.dict.get("AP");
    if (!(appearanceStates instanceof _primitives.Dict)) {
      return;
    }
    const normalAppearance = appearanceStates.get("N");
    if (!(normalAppearance instanceof _primitives.Dict)) {
      return;
    }
    for (const key of normalAppearance.getKeys()) {
      if (key !== "Off") {
        this.data.buttonValue = this._decodeFormValue(key);
        break;
      }
    }
    const checkedAppearance = normalAppearance.get(this.data.buttonValue);
    this.checkedAppearance = checkedAppearance instanceof _base_stream.BaseStream ? checkedAppearance : null;
    const uncheckedAppearance = normalAppearance.get("Off");
    this.uncheckedAppearance = uncheckedAppearance instanceof _base_stream.BaseStream ? uncheckedAppearance : null;
    if (this.checkedAppearance) {
      this._streams.push(this.checkedAppearance);
    } else {
      this._getDefaultCheckedAppearance(params, "disc");
    }
    if (this.uncheckedAppearance) {
      this._streams.push(this.uncheckedAppearance);
    }
    this._fallbackFontDict = this.fallbackFontDict;
    if (this.data.defaultFieldValue === null) {
      this.data.defaultFieldValue = "Off";
    }
  }
  _processPushButton(params) {
    const {
      dict,
      annotationGlobals
    } = params;
    if (!dict.has("A") && !dict.has("AA") && !this.data.alternativeText) {
      (0, _util.warn)("Push buttons without action dictionaries are not supported");
      return;
    }
    this.data.isTooltipOnly = !dict.has("A") && !dict.has("AA");
    _catalog.Catalog.parseDestDictionary({
      destDict: dict,
      resultObj: this.data,
      docBaseUrl: annotationGlobals.baseUrl,
      docAttachments: annotationGlobals.attachments
    });
  }
  getFieldObject() {
    let type = "button";
    let exportValues;
    if (this.data.checkBox) {
      type = "checkbox";
      exportValues = this.data.exportValue;
    } else if (this.data.radioButton) {
      type = "radiobutton";
      exportValues = this.data.buttonValue;
    }
    return {
      id: this.data.id,
      value: this.data.fieldValue || "Off",
      defaultValue: this.data.defaultFieldValue,
      exportValues,
      editable: !this.data.readOnly,
      name: this.data.fieldName,
      rect: this.data.rect,
      hidden: this.data.hidden,
      actions: this.data.actions,
      page: this.data.pageIndex,
      strokeColor: this.data.borderColor,
      fillColor: this.data.backgroundColor,
      rotation: this.rotation,
      type
    };
  }
  get fallbackFontDict() {
    const dict = new _primitives.Dict();
    dict.set("BaseFont", _primitives.Name.get("ZapfDingbats"));
    dict.set("Type", _primitives.Name.get("FallbackType"));
    dict.set("Subtype", _primitives.Name.get("FallbackType"));
    dict.set("Encoding", _primitives.Name.get("ZapfDingbatsEncoding"));
    return (0, _util.shadow)(this, "fallbackFontDict", dict);
  }
}
class ChoiceWidgetAnnotation extends WidgetAnnotation {
  constructor(params) {
    super(params);
    const {
      dict,
      xref
    } = params;
    this.indices = dict.getArray("I");
    this.hasIndices = Array.isArray(this.indices) && this.indices.length > 0;
    this.data.options = [];
    const options = (0, _core_utils.getInheritableProperty)({
      dict,
      key: "Opt"
    });
    if (Array.isArray(options)) {
      for (let i = 0, ii = options.length; i < ii; i++) {
        const option = xref.fetchIfRef(options[i]);
        const isOptionArray = Array.isArray(option);
        this.data.options[i] = {
          exportValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[0]) : option),
          displayValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[1]) : option)
        };
      }
    }
    if (!this.hasIndices) {
      if (typeof this.data.fieldValue === "string") {
        this.data.fieldValue = [this.data.fieldValue];
      } else if (!this.data.fieldValue) {
        this.data.fieldValue = [];
      }
    } else {
      this.data.fieldValue = [];
      const ii = this.data.options.length;
      for (const i of this.indices) {
        if (Number.isInteger(i) && i >= 0 && i < ii) {
          this.data.fieldValue.push(this.data.options[i].exportValue);
        }
      }
    }
    this.data.combo = this.hasFieldFlag(_util.AnnotationFieldFlag.COMBO);
    this.data.multiSelect = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT);
    this._hasText = true;
  }
  getFieldObject() {
    const type = this.data.combo ? "combobox" : "listbox";
    const value = this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : null;
    return {
      id: this.data.id,
      value,
      defaultValue: this.data.defaultFieldValue,
      editable: !this.data.readOnly,
      name: this.data.fieldName,
      rect: this.data.rect,
      numItems: this.data.fieldValue.length,
      multipleSelection: this.data.multiSelect,
      hidden: this.data.hidden,
      actions: this.data.actions,
      items: this.data.options,
      page: this.data.pageIndex,
      strokeColor: this.data.borderColor,
      fillColor: this.data.backgroundColor,
      rotation: this.rotation,
      type
    };
  }
  amendSavedDict(annotationStorage, dict) {
    if (!this.hasIndices) {
      return;
    }
    let values = annotationStorage?.get(this.data.id)?.value;
    if (!Array.isArray(values)) {
      values = [values];
    }
    const indices = [];
    const {
      options
    } = this.data;
    for (let i = 0, j = 0, ii = options.length; i < ii; i++) {
      if (options[i].exportValue === values[j]) {
        indices.push(i);
        j += 1;
      }
    }
    dict.set("I", indices);
  }
  async _getAppearance(evaluator, task, intent, annotationStorage) {
    if (this.data.combo) {
      return super._getAppearance(evaluator, task, intent, annotationStorage);
    }
    let exportedValue, rotation;
    const storageEntry = annotationStorage?.get(this.data.id);
    if (storageEntry) {
      rotation = storageEntry.rotation;
      exportedValue = storageEntry.value;
    }
    if (rotation === undefined && exportedValue === undefined && !this._needAppearances) {
      return null;
    }
    if (exportedValue === undefined) {
      exportedValue = this.data.fieldValue;
    } else if (!Array.isArray(exportedValue)) {
      exportedValue = [exportedValue];
    }
    const defaultPadding = 1;
    const defaultHPadding = 2;
    let totalHeight = this.data.rect[3] - this.data.rect[1];
    let totalWidth = this.data.rect[2] - this.data.rect[0];
    if (rotation === 90 || rotation === 270) {
      [totalWidth, totalHeight] = [totalHeight, totalWidth];
    }
    const lineCount = this.data.options.length;
    const valueIndices = [];
    for (let i = 0; i < lineCount; i++) {
      const {
        exportValue
      } = this.data.options[i];
      if (exportedValue.includes(exportValue)) {
        valueIndices.push(i);
      }
    }
    if (!this._defaultAppearance) {
      this.data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this._defaultAppearance = "/Helvetica 0 Tf 0 g");
    }
    const font = await WidgetAnnotation._getFontData(evaluator, task, this.data.defaultAppearanceData, this._fieldResources.mergedResources);
    let defaultAppearance;
    let {
      fontSize
    } = this.data.defaultAppearanceData;
    if (!fontSize) {
      const lineHeight = (totalHeight - defaultPadding) / lineCount;
      let lineWidth = -1;
      let value;
      for (const {
        displayValue
      } of this.data.options) {
        const width = this._getTextWidth(displayValue, font);
        if (width > lineWidth) {
          lineWidth = width;
          value = displayValue;
        }
      }
      [defaultAppearance, fontSize] = this._computeFontSize(lineHeight, totalWidth - 2 * defaultHPadding, value, font, -1);
    } else {
      defaultAppearance = this._defaultAppearance;
    }
    const lineHeight = fontSize * _util.LINE_FACTOR;
    const vPadding = (lineHeight - fontSize) / 2;
    const numberOfVisibleLines = Math.floor(totalHeight / lineHeight);
    let firstIndex = 0;
    if (valueIndices.length > 0) {
      const minIndex = Math.min(...valueIndices);
      const maxIndex = Math.max(...valueIndices);
      firstIndex = Math.max(0, maxIndex - numberOfVisibleLines + 1);
      if (firstIndex > minIndex) {
        firstIndex = minIndex;
      }
    }
    const end = Math.min(firstIndex + numberOfVisibleLines + 1, lineCount);
    const buf = ["/Tx BMC q", `1 1 ${totalWidth} ${totalHeight} re W n`];
    if (valueIndices.length) {
      buf.push("0.600006 0.756866 0.854904 rg");
      for (const index of valueIndices) {
        if (firstIndex <= index && index < end) {
          buf.push(`1 ${totalHeight - (index - firstIndex + 1) * lineHeight} ${totalWidth} ${lineHeight} re f`);
        }
      }
    }
    buf.push("BT", defaultAppearance, `1 0 0 1 0 ${totalHeight} Tm`);
    const prevInfo = {
      shift: 0
    };
    for (let i = firstIndex; i < end; i++) {
      const {
        displayValue
      } = this.data.options[i];
      const vpadding = i === firstIndex ? vPadding : 0;
      buf.push(this._renderText(displayValue, font, fontSize, totalWidth, 0, prevInfo, defaultHPadding, -lineHeight + vpadding));
    }
    buf.push("ET Q EMC");
    return buf.join("\n");
  }
}
class SignatureWidgetAnnotation extends WidgetAnnotation {
  constructor(params) {
    super(params);
    this.data.fieldValue = null;
    this.data.hasOwnCanvas = this.data.noRotate;
  }
  getFieldObject() {
    return {
      id: this.data.id,
      value: null,
      page: this.data.pageIndex,
      type: "signature"
    };
  }
}
class TextAnnotation extends MarkupAnnotation {
  constructor(params) {
    const DEFAULT_ICON_SIZE = 22;
    super(params);
    this.data.noRotate = true;
    this.data.hasOwnCanvas = this.data.noRotate;
    const {
      dict
    } = params;
    this.data.annotationType = _util.AnnotationType.TEXT;
    if (this.data.hasAppearance) {
      this.data.name = "NoIcon";
    } else {
      this.data.rect[1] = this.data.rect[3] - DEFAULT_ICON_SIZE;
      this.data.rect[2] = this.data.rect[0] + DEFAULT_ICON_SIZE;
      this.data.name = dict.has("Name") ? dict.get("Name").name : "Note";
    }
    if (dict.has("State")) {
      this.data.state = dict.get("State") || null;
      this.data.stateModel = dict.get("StateModel") || null;
    } else {
      this.data.state = null;
      this.data.stateModel = null;
    }
  }
}
class LinkAnnotation extends Annotation {
  constructor(params) {
    super(params);
    const {
      dict,
      annotationGlobals
    } = params;
    this.data.annotationType = _util.AnnotationType.LINK;
    const quadPoints = getQuadPoints(dict, this.rectangle);
    if (quadPoints) {
      this.data.quadPoints = quadPoints;
    }
    this.data.borderColor ||= this.data.color;
    _catalog.Catalog.parseDestDictionary({
      destDict: dict,
      resultObj: this.data,
      docBaseUrl: annotationGlobals.baseUrl,
      docAttachments: annotationGlobals.attachments
    });
  }
}
class PopupAnnotation extends Annotation {
  constructor(params) {
    super(params);
    const {
      dict
    } = params;
    this.data.annotationType = _util.AnnotationType.POPUP;
    if (this.data.rect[0] === this.data.rect[2] || this.data.rect[1] === this.data.rect[3]) {
      this.data.rect = null;
    }
    let parentItem = dict.get("Parent");
    if (!parentItem) {
      (0, _util.warn)("Popup annotation has a missing or invalid parent annotation.");
      return;
    }
    const parentRect = parentItem.getArray("Rect");
    this.data.parentRect = Array.isArray(parentRect) && parentRect.length === 4 ? _util.Util.normalizeRect(parentRect) : null;
    const rt = parentItem.get("RT");
    if ((0, _primitives.isName)(rt, _util.AnnotationReplyType.GROUP)) {
      parentItem = parentItem.get("IRT");
    }
    if (!parentItem.has("M")) {
      this.data.modificationDate = null;
    } else {
      this.setModificationDate(parentItem.get("M"));
      this.data.modificationDate = this.modificationDate;
    }
    if (!parentItem.has("C")) {
      this.data.color = null;
    } else {
      this.setColor(parentItem.getArray("C"));
      this.data.color = this.color;
    }
    if (!this.viewable) {
      const parentFlags = parentItem.get("F");
      if (this._isViewable(parentFlags)) {
        this.setFlags(parentFlags);
      }
    }
    this.setTitle(parentItem.get("T"));
    this.data.titleObj = this._title;
    this.setContents(parentItem.get("Contents"));
    this.data.contentsObj = this._contents;
    if (parentItem.has("RC")) {
      this.data.richText = _factory.XFAFactory.getRichTextAsHtml(parentItem.get("RC"));
    }
    this.data.open = !!dict.get("Open");
  }
}
exports.PopupAnnotation = PopupAnnotation;
class FreeTextAnnotation extends MarkupAnnotation {
  constructor(params) {
    super(params);
    this.data.hasOwnCanvas = true;
    const {
      evaluatorOptions,
      xref
    } = params;
    this.data.annotationType = _util.AnnotationType.FREETEXT;
    this.setDefaultAppearance(params);
    if (this.appearance) {
      const {
        fontColor,
        fontSize
      } = (0, _default_appearance.parseAppearanceStream)(this.appearance, evaluatorOptions, xref);
      this.data.defaultAppearanceData.fontColor = fontColor;
      this.data.defaultAppearanceData.fontSize = fontSize || 10;
    } else if (this._isOffscreenCanvasSupported) {
      const strokeAlpha = params.dict.get("CA");
      const fakeUnicodeFont = new _default_appearance.FakeUnicodeFont(xref, "sans-serif");
      this.data.defaultAppearanceData.fontSize ||= 10;
      const {
        fontColor,
        fontSize
      } = this.data.defaultAppearanceData;
      this.appearance = fakeUnicodeFont.createAppearance(this._contents.str, this.rectangle, this.rotation, fontSize, fontColor, strokeAlpha);
      this._streams.push(this.appearance, _default_appearance.FakeUnicodeFont.toUnicodeStream);
    } else {
      (0, _util.warn)("FreeTextAnnotation: OffscreenCanvas is not supported, annotation may not render correctly.");
    }
  }
  get hasTextContent() {
    return !!this.appearance;
  }
  static createNewDict(annotation, xref, {
    apRef,
    ap
  }) {
    const {
      color,
      fontSize,
      rect,
      rotation,
      user,
      value
    } = annotation;
    const freetext = new _primitives.Dict(xref);
    freetext.set("Type", _primitives.Name.get("Annot"));
    freetext.set("Subtype", _primitives.Name.get("FreeText"));
    freetext.set("CreationDate", `D:${(0, _util.getModificationDate)()}`);
    freetext.set("Rect", rect);
    const da = `/Helv ${fontSize} Tf ${(0, _default_appearance.getPdfColor)(color, true)}`;
    freetext.set("DA", da);
    freetext.set("Contents", (0, _core_utils.isAscii)(value) ? value : (0, _core_utils.stringToUTF16String)(value, true));
    freetext.set("F", 4);
    freetext.set("Border", [0, 0, 0]);
    freetext.set("Rotate", rotation);
    if (user) {
      freetext.set("T", (0, _core_utils.isAscii)(user) ? user : (0, _core_utils.stringToUTF16String)(user, true));
    }
    if (apRef || ap) {
      const n = new _primitives.Dict(xref);
      freetext.set("AP", n);
      if (apRef) {
        n.set("N", apRef);
      } else {
        n.set("N", ap);
      }
    }
    return freetext;
  }
  static async createNewAppearanceStream(annotation, xref, params) {
    const {
      baseFontRef,
      evaluator,
      task
    } = params;
    const {
      color,
      fontSize,
      rect,
      rotation,
      value
    } = annotation;
    const resources = new _primitives.Dict(xref);
    const font = new _primitives.Dict(xref);
    if (baseFontRef) {
      font.set("Helv", baseFontRef);
    } else {
      const baseFont = new _primitives.Dict(xref);
      baseFont.set("BaseFont", _primitives.Name.get("Helvetica"));
      baseFont.set("Type", _primitives.Name.get("Font"));
      baseFont.set("Subtype", _primitives.Name.get("Type1"));
      baseFont.set("Encoding", _primitives.Name.get("WinAnsiEncoding"));
      font.set("Helv", baseFont);
    }
    resources.set("Font", font);
    const helv = await WidgetAnnotation._getFontData(evaluator, task, {
      fontName: "Helv",
      fontSize
    }, resources);
    const [x1, y1, x2, y2] = rect;
    let w = x2 - x1;
    let h = y2 - y1;
    if (rotation % 180 !== 0) {
      [w, h] = [h, w];
    }
    const lines = value.split("\n");
    const scale = fontSize / 1000;
    let totalWidth = -Infinity;
    const encodedLines = [];
    for (let line of lines) {
      const encoded = helv.encodeString(line);
      if (encoded.length > 1) {
        return null;
      }
      line = encoded.join("");
      encodedLines.push(line);
      let lineWidth = 0;
      const glyphs = helv.charsToGlyphs(line);
      for (const glyph of glyphs) {
        lineWidth += glyph.width * scale;
      }
      totalWidth = Math.max(totalWidth, lineWidth);
    }
    let hscale = 1;
    if (totalWidth > w) {
      hscale = w / totalWidth;
    }
    let vscale = 1;
    const lineHeight = _util.LINE_FACTOR * fontSize;
    const lineAscent = (_util.LINE_FACTOR - _util.LINE_DESCENT_FACTOR) * fontSize;
    const totalHeight = lineHeight * lines.length;
    if (totalHeight > h) {
      vscale = h / totalHeight;
    }
    const fscale = Math.min(hscale, vscale);
    const newFontSize = fontSize * fscale;
    let firstPoint, clipBox, matrix;
    switch (rotation) {
      case 0:
        matrix = [1, 0, 0, 1];
        clipBox = [rect[0], rect[1], w, h];
        firstPoint = [rect[0], rect[3] - lineAscent];
        break;
      case 90:
        matrix = [0, 1, -1, 0];
        clipBox = [rect[1], -rect[2], w, h];
        firstPoint = [rect[1], -rect[0] - lineAscent];
        break;
      case 180:
        matrix = [-1, 0, 0, -1];
        clipBox = [-rect[2], -rect[3], w, h];
        firstPoint = [-rect[2], -rect[1] - lineAscent];
        break;
      case 270:
        matrix = [0, -1, 1, 0];
        clipBox = [-rect[3], rect[0], w, h];
        firstPoint = [-rect[3], rect[2] - lineAscent];
        break;
    }
    const buffer = ["q", `${matrix.join(" ")} 0 0 cm`, `${clipBox.join(" ")} re W n`, `BT`, `${(0, _default_appearance.getPdfColor)(color, true)}`, `0 Tc /Helv ${(0, _core_utils.numberToString)(newFontSize)} Tf`];
    buffer.push(`${firstPoint.join(" ")} Td (${(0, _core_utils.escapeString)(encodedLines[0])}) Tj`);
    const vShift = (0, _core_utils.numberToString)(lineHeight);
    for (let i = 1, ii = encodedLines.length; i < ii; i++) {
      const line = encodedLines[i];
      buffer.push(`0 -${vShift} Td (${(0, _core_utils.escapeString)(line)}) Tj`);
    }
    buffer.push("ET", "Q");
    const appearance = buffer.join("\n");
    const appearanceStreamDict = new _primitives.Dict(xref);
    appearanceStreamDict.set("FormType", 1);
    appearanceStreamDict.set("Subtype", _primitives.Name.get("Form"));
    appearanceStreamDict.set("Type", _primitives.Name.get("XObject"));
    appearanceStreamDict.set("BBox", rect);
    appearanceStreamDict.set("Resources", resources);
    appearanceStreamDict.set("Matrix", [1, 0, 0, 1, -rect[0], -rect[1]]);
    const ap = new _stream.StringStream(appearance);
    ap.dict = appearanceStreamDict;
    return ap;
  }
}
class LineAnnotation extends MarkupAnnotation {
  constructor(params) {
    super(params);
    const {
      dict,
      xref
    } = params;
    this.data.annotationType = _util.AnnotationType.LINE;
    this.data.hasOwnCanvas = this.data.noRotate;
    const lineCoordinates = dict.getArray("L");
    this.data.lineCoordinates = _util.Util.normalizeRect(lineCoordinates);
    this.setLineEndings(dict.getArray("LE"));
    this.data.lineEndings = this.lineEndings;
    if (!this.appearance) {
      const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0];
      const strokeAlpha = dict.get("CA");
      const interiorColor = getRgbColor(dict.getArray("IC"), null);
      const fillColor = interiorColor ? getPdfColorArray(interiorColor) : null;
      const fillAlpha = fillColor ? strokeAlpha : null;
      const borderWidth = this.borderStyle.width || 1,
        borderAdjust = 2 * borderWidth;
      const bbox = [this.data.lineCoordinates[0] - borderAdjust, this.data.lineCoordinates[1] - borderAdjust, this.data.lineCoordinates[2] + borderAdjust, this.data.lineCoordinates[3] + borderAdjust];
      if (!_util.Util.intersect(this.rectangle, bbox)) {
        this.rectangle = bbox;
      }
      this._setDefaultAppearance({
        xref,
        extra: `${borderWidth} w`,
        strokeColor,
        fillColor,
        strokeAlpha,
        fillAlpha,
        pointsCallback: (buffer, points) => {
          buffer.push(`${lineCoordinates[0]} ${lineCoordinates[1]} m`, `${lineCoordinates[2]} ${lineCoordinates[3]} l`, "S");
          return [points[0].x - borderWidth, points[1].x + borderWidth, points[3].y - borderWidth, points[1].y + borderWidth];
        }
      });
    }
  }
}
class SquareAnnotation extends MarkupAnnotation {
  constructor(params) {
    super(params);
    const {
      dict,
      xref
    } = params;
    this.data.annotationType = _util.AnnotationType.SQUARE;
    this.data.hasOwnCanvas = this.data.noRotate;
    if (!this.appearance) {
      const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0];
      const strokeAlpha = dict.get("CA");
      const interiorColor = getRgbColor(dict.getArray("IC"), null);
      const fillColor = interiorColor ? getPdfColorArray(interiorColor) : null;
      const fillAlpha = fillColor ? strokeAlpha : null;
      if (this.borderStyle.width === 0 && !fillColor) {
        return;
      }
      this._setDefaultAppearance({
        xref,
        extra: `${this.borderStyle.width} w`,
        strokeColor,
        fillColor,
        strokeAlpha,
        fillAlpha,
        pointsCallback: (buffer, points) => {
          const x = points[2].x + this.borderStyle.width / 2;
          const y = points[2].y + this.borderStyle.width / 2;
          const width = points[3].x - points[2].x - this.borderStyle.width;
          const height = points[1].y - points[3].y - this.borderStyle.width;
          buffer.push(`${x} ${y} ${width} ${height} re`);
          if (fillColor) {
            buffer.push("B");
          } else {
            buffer.push("S");
          }
          return [points[0].x, points[1].x, points[3].y, points[1].y];
        }
      });
    }
  }
}
class CircleAnnotation extends MarkupAnnotation {
  constructor(params) {
    super(params);
    const {
      dict,
      xref
    } = params;
    this.data.annotationType = _util.AnnotationType.CIRCLE;
    if (!this.appearance) {
      const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0];
      const strokeAlpha = dict.get("CA");
      const interiorColor = getRgbColor(dict.getArray("IC"), null);
      const fillColor = interiorColor ? getPdfColorArray(interiorColor) : null;
      const fillAlpha = fillColor ? strokeAlpha : null;
      if (this.borderStyle.width === 0 && !fillColor) {
        return;
      }
      const controlPointsDistance = 4 / 3 * Math.tan(Math.PI / (2 * 4));
      this._setDefaultAppearance({
        xref,
        extra: `${this.borderStyle.width} w`,
        strokeColor,
        fillColor,
        strokeAlpha,
        fillAlpha,
        pointsCallback: (buffer, points) => {
          const x0 = points[0].x + this.borderStyle.width / 2;
          const y0 = points[0].y - this.borderStyle.width / 2;
          const x1 = points[3].x - this.borderStyle.width / 2;
          const y1 = points[3].y + this.borderStyle.width / 2;
          const xMid = x0 + (x1 - x0) / 2;
          const yMid = y0 + (y1 - y0) / 2;
          const xOffset = (x1 - x0) / 2 * controlPointsDistance;
          const yOffset = (y1 - y0) / 2 * controlPointsDistance;
          buffer.push(`${xMid} ${y1} m`, `${xMid + xOffset} ${y1} ${x1} ${yMid + yOffset} ${x1} ${yMid} c`, `${x1} ${yMid - yOffset} ${xMid + xOffset} ${y0} ${xMid} ${y0} c`, `${xMid - xOffset} ${y0} ${x0} ${yMid - yOffset} ${x0} ${yMid} c`, `${x0} ${yMid + yOffset} ${xMid - xOffset} ${y1} ${xMid} ${y1} c`, "h");
          if (fillColor) {
            buffer.push("B");
          } else {
            buffer.push("S");
          }
          return [points[0].x, points[1].x, points[3].y, points[1].y];
        }
      });
    }
  }
}
class PolylineAnnotation extends MarkupAnnotation {
  constructor(params) {
    super(params);
    const {
      dict,
      xref
    } = params;
    this.data.annotationType = _util.AnnotationType.POLYLINE;
    this.data.hasOwnCanvas = this.data.noRotate;
    this.data.vertices = [];
    if (!(this instanceof PolygonAnnotation)) {
      this.setLineEndings(dict.getArray("LE"));
      this.data.lineEndings = this.lineEndings;
    }
    const rawVertices = dict.getArray("Vertices");
    if (!Array.isArray(rawVertices)) {
      return;
    }
    for (let i = 0, ii = rawVertices.length; i < ii; i += 2) {
      this.data.vertices.push({
        x: rawVertices[i],
        y: rawVertices[i + 1]
      });
    }
    if (!this.appearance) {
      const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0];
      const strokeAlpha = dict.get("CA");
      const borderWidth = this.borderStyle.width || 1,
        borderAdjust = 2 * borderWidth;
      const bbox = [Infinity, Infinity, -Infinity, -Infinity];
      for (const vertex of this.data.vertices) {
        bbox[0] = Math.min(bbox[0], vertex.x - borderAdjust);
        bbox[1] = Math.min(bbox[1], vertex.y - borderAdjust);
        bbox[2] = Math.max(bbox[2], vertex.x + borderAdjust);
        bbox[3] = Math.max(bbox[3], vertex.y + borderAdjust);
      }
      if (!_util.Util.intersect(this.rectangle, bbox)) {
        this.rectangle = bbox;
      }
      this._setDefaultAppearance({
        xref,
        extra: `${borderWidth} w`,
        strokeColor,
        strokeAlpha,
        pointsCallback: (buffer, points) => {
          const vertices = this.data.vertices;
          for (let i = 0, ii = vertices.length; i < ii; i++) {
            buffer.push(`${vertices[i].x} ${vertices[i].y} ${i === 0 ? "m" : "l"}`);
          }
          buffer.push("S");
          return [points[0].x, points[1].x, points[3].y, points[1].y];
        }
      });
    }
  }
}
class PolygonAnnotation extends PolylineAnnotation {
  constructor(params) {
    super(params);
    this.data.annotationType = _util.AnnotationType.POLYGON;
  }
}
class CaretAnnotation extends MarkupAnnotation {
  constructor(params) {
    super(params);
    this.data.annotationType = _util.AnnotationType.CARET;
  }
}
class InkAnnotation extends MarkupAnnotation {
  constructor(params) {
    super(params);
    this.data.hasOwnCanvas = this.data.noRotate;
    const {
      dict,
      xref
    } = params;
    this.data.annotationType = _util.AnnotationType.INK;
    this.data.inkLists = [];
    const rawInkLists = dict.getArray("InkList");
    if (!Array.isArray(rawInkLists)) {
      return;
    }
    for (let i = 0, ii = rawInkLists.length; i < ii; ++i) {
      this.data.inkLists.push([]);
      for (let j = 0, jj = rawInkLists[i].length; j < jj; j += 2) {
        this.data.inkLists[i].push({
          x: xref.fetchIfRef(rawInkLists[i][j]),
          y: xref.fetchIfRef(rawInkLists[i][j + 1])
        });
      }
    }
    if (!this.appearance) {
      const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0];
      const strokeAlpha = dict.get("CA");
      const borderWidth = this.borderStyle.width || 1,
        borderAdjust = 2 * borderWidth;
      const bbox = [Infinity, Infinity, -Infinity, -Infinity];
      for (const inkLists of this.data.inkLists) {
        for (const vertex of inkLists) {
          bbox[0] = Math.min(bbox[0], vertex.x - borderAdjust);
          bbox[1] = Math.min(bbox[1], vertex.y - borderAdjust);
          bbox[2] = Math.max(bbox[2], vertex.x + borderAdjust);
          bbox[3] = Math.max(bbox[3], vertex.y + borderAdjust);
        }
      }
      if (!_util.Util.intersect(this.rectangle, bbox)) {
        this.rectangle = bbox;
      }
      this._setDefaultAppearance({
        xref,
        extra: `${borderWidth} w`,
        strokeColor,
        strokeAlpha,
        pointsCallback: (buffer, points) => {
          for (const inkList of this.data.inkLists) {
            for (let i = 0, ii = inkList.length; i < ii; i++) {
              buffer.push(`${inkList[i].x} ${inkList[i].y} ${i === 0 ? "m" : "l"}`);
            }
            buffer.push("S");
          }
          return [points[0].x, points[1].x, points[3].y, points[1].y];
        }
      });
    }
  }
  static createNewDict(annotation, xref, {
    apRef,
    ap
  }) {
    const {
      color,
      opacity,
      paths,
      rect,
      rotation,
      thickness
    } = annotation;
    const ink = new _primitives.Dict(xref);
    ink.set("Type", _primitives.Name.get("Annot"));
    ink.set("Subtype", _primitives.Name.get("Ink"));
    ink.set("CreationDate", `D:${(0, _util.getModificationDate)()}`);
    ink.set("Rect", rect);
    ink.set("InkList", paths.map(p => p.points));
    ink.set("F", 4);
    ink.set("Rotate", rotation);
    const bs = new _primitives.Dict(xref);
    ink.set("BS", bs);
    bs.set("W", thickness);
    ink.set("C", Array.from(color, c => c / 255));
    ink.set("CA", opacity);
    const n = new _primitives.Dict(xref);
    ink.set("AP", n);
    if (apRef) {
      n.set("N", apRef);
    } else {
      n.set("N", ap);
    }
    return ink;
  }
  static async createNewAppearanceStream(annotation, xref, params) {
    const {
      color,
      rect,
      paths,
      thickness,
      opacity
    } = annotation;
    const appearanceBuffer = [`${thickness} w 1 J 1 j`, `${(0, _default_appearance.getPdfColor)(color, false)}`];
    if (opacity !== 1) {
      appearanceBuffer.push("/R0 gs");
    }
    const buffer = [];
    for (const {
      bezier
    } of paths) {
      buffer.length = 0;
      buffer.push(`${(0, _core_utils.numberToString)(bezier[0])} ${(0, _core_utils.numberToString)(bezier[1])} m`);
      for (let i = 2, ii = bezier.length; i < ii; i += 6) {
        const curve = bezier.slice(i, i + 6).map(_core_utils.numberToString).join(" ");
        buffer.push(`${curve} c`);
      }
      buffer.push("S");
      appearanceBuffer.push(buffer.join("\n"));
    }
    const appearance = appearanceBuffer.join("\n");
    const appearanceStreamDict = new _primitives.Dict(xref);
    appearanceStreamDict.set("FormType", 1);
    appearanceStreamDict.set("Subtype", _primitives.Name.get("Form"));
    appearanceStreamDict.set("Type", _primitives.Name.get("XObject"));
    appearanceStreamDict.set("BBox", rect);
    appearanceStreamDict.set("Length", appearance.length);
    if (opacity !== 1) {
      const resources = new _primitives.Dict(xref);
      const extGState = new _primitives.Dict(xref);
      const r0 = new _primitives.Dict(xref);
      r0.set("CA", opacity);
      r0.set("Type", _primitives.Name.get("ExtGState"));
      extGState.set("R0", r0);
      resources.set("ExtGState", extGState);
      appearanceStreamDict.set("Resources", resources);
    }
    const ap = new _stream.StringStream(appearance);
    ap.dict = appearanceStreamDict;
    return ap;
  }
}
class HighlightAnnotation extends MarkupAnnotation {
  constructor(params) {
    super(params);
    const {
      dict,
      xref
    } = params;
    this.data.annotationType = _util.AnnotationType.HIGHLIGHT;
    const quadPoints = this.data.quadPoints = getQuadPoints(dict, null);
    if (quadPoints) {
      const resources = this.appearance?.dict.get("Resources");
      if (!this.appearance || !resources?.has("ExtGState")) {
        if (this.appearance) {
          (0, _util.warn)("HighlightAnnotation - ignoring built-in appearance stream.");
        }
        const fillColor = this.color ? getPdfColorArray(this.color) : [1, 1, 0];
        const fillAlpha = dict.get("CA");
        this._setDefaultAppearance({
          xref,
          fillColor,
          blendMode: "Multiply",
          fillAlpha,
          pointsCallback: (buffer, points) => {
            buffer.push(`${points[0].x} ${points[0].y} m`, `${points[1].x} ${points[1].y} l`, `${points[3].x} ${points[3].y} l`, `${points[2].x} ${points[2].y} l`, "f");
            return [points[0].x, points[1].x, points[3].y, points[1].y];
          }
        });
      }
    } else {
      this.data.popupRef = null;
    }
  }
}
class UnderlineAnnotation extends MarkupAnnotation {
  constructor(params) {
    super(params);
    const {
      dict,
      xref
    } = params;
    this.data.annotationType = _util.AnnotationType.UNDERLINE;
    const quadPoints = this.data.quadPoints = getQuadPoints(dict, null);
    if (quadPoints) {
      if (!this.appearance) {
        const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0];
        const strokeAlpha = dict.get("CA");
        this._setDefaultAppearance({
          xref,
          extra: "[] 0 d 0.571 w",
          strokeColor,
          strokeAlpha,
          pointsCallback: (buffer, points) => {
            buffer.push(`${points[2].x} ${points[2].y + 1.3} m`, `${points[3].x} ${points[3].y + 1.3} l`, "S");
            return [points[0].x, points[1].x, points[3].y, points[1].y];
          }
        });
      }
    } else {
      this.data.popupRef = null;
    }
  }
}
class SquigglyAnnotation extends MarkupAnnotation {
  constructor(params) {
    super(params);
    const {
      dict,
      xref
    } = params;
    this.data.annotationType = _util.AnnotationType.SQUIGGLY;
    const quadPoints = this.data.quadPoints = getQuadPoints(dict, null);
    if (quadPoints) {
      if (!this.appearance) {
        const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0];
        const strokeAlpha = dict.get("CA");
        this._setDefaultAppearance({
          xref,
          extra: "[] 0 d 1 w",
          strokeColor,
          strokeAlpha,
          pointsCallback: (buffer, points) => {
            const dy = (points[0].y - points[2].y) / 6;
            let shift = dy;
            let x = points[2].x;
            const y = points[2].y;
            const xEnd = points[3].x;
            buffer.push(`${x} ${y + shift} m`);
            do {
              x += 2;
              shift = shift === 0 ? dy : 0;
              buffer.push(`${x} ${y + shift} l`);
            } while (x < xEnd);
            buffer.push("S");
            return [points[2].x, xEnd, y - 2 * dy, y + 2 * dy];
          }
        });
      }
    } else {
      this.data.popupRef = null;
    }
  }
}
class StrikeOutAnnotation extends MarkupAnnotation {
  constructor(params) {
    super(params);
    const {
      dict,
      xref
    } = params;
    this.data.annotationType = _util.AnnotationType.STRIKEOUT;
    const quadPoints = this.data.quadPoints = getQuadPoints(dict, null);
    if (quadPoints) {
      if (!this.appearance) {
        const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0];
        const strokeAlpha = dict.get("CA");
        this._setDefaultAppearance({
          xref,
          extra: "[] 0 d 1 w",
          strokeColor,
          strokeAlpha,
          pointsCallback: (buffer, points) => {
            buffer.push(`${(points[0].x + points[2].x) / 2} ` + `${(points[0].y + points[2].y) / 2} m`, `${(points[1].x + points[3].x) / 2} ` + `${(points[1].y + points[3].y) / 2} l`, "S");
            return [points[0].x, points[1].x, points[3].y, points[1].y];
          }
        });
      }
    } else {
      this.data.popupRef = null;
    }
  }
}
class StampAnnotation extends MarkupAnnotation {
  constructor(params) {
    super(params);
    this.data.annotationType = _util.AnnotationType.STAMP;
    this.data.hasOwnCanvas = this.data.noRotate;
  }
  static async createImage(bitmap, xref) {
    const {
      width,
      height
    } = bitmap;
    const canvas = new OffscreenCanvas(width, height);
    const ctx = canvas.getContext("2d", {
      alpha: true
    });
    ctx.drawImage(bitmap, 0, 0);
    const data = ctx.getImageData(0, 0, width, height).data;
    const buf32 = new Uint32Array(data.buffer);
    const hasAlpha = buf32.some(_util.FeatureTest.isLittleEndian ? x => x >>> 24 !== 0xff : x => (x & 0xff) !== 0xff);
    if (hasAlpha) {
      ctx.fillStyle = "white";
      ctx.fillRect(0, 0, width, height);
      ctx.drawImage(bitmap, 0, 0);
    }
    const jpegBufferPromise = canvas.convertToBlob({
      type: "image/jpeg",
      quality: 1
    }).then(blob => {
      return blob.arrayBuffer();
    });
    const xobjectName = _primitives.Name.get("XObject");
    const imageName = _primitives.Name.get("Image");
    const image = new _primitives.Dict(xref);
    image.set("Type", xobjectName);
    image.set("Subtype", imageName);
    image.set("BitsPerComponent", 8);
    image.set("ColorSpace", _primitives.Name.get("DeviceRGB"));
    image.set("Filter", _primitives.Name.get("DCTDecode"));
    image.set("BBox", [0, 0, width, height]);
    image.set("Width", width);
    image.set("Height", height);
    let smaskStream = null;
    if (hasAlpha) {
      const alphaBuffer = new Uint8Array(buf32.length);
      if (_util.FeatureTest.isLittleEndian) {
        for (let i = 0, ii = buf32.length; i < ii; i++) {
          alphaBuffer[i] = buf32[i] >>> 24;
        }
      } else {
        for (let i = 0, ii = buf32.length; i < ii; i++) {
          alphaBuffer[i] = buf32[i] & 0xff;
        }
      }
      const smask = new _primitives.Dict(xref);
      smask.set("Type", xobjectName);
      smask.set("Subtype", imageName);
      smask.set("BitsPerComponent", 8);
      smask.set("ColorSpace", _primitives.Name.get("DeviceGray"));
      smask.set("Width", width);
      smask.set("Height", height);
      smaskStream = new _stream.Stream(alphaBuffer, 0, 0, smask);
    }
    const imageStream = new _stream.Stream(await jpegBufferPromise, 0, 0, image);
    return {
      imageStream,
      smaskStream,
      width,
      height
    };
  }
  static createNewDict(annotation, xref, {
    apRef,
    ap
  }) {
    const {
      rect,
      rotation,
      user
    } = annotation;
    const stamp = new _primitives.Dict(xref);
    stamp.set("Type", _primitives.Name.get("Annot"));
    stamp.set("Subtype", _primitives.Name.get("Stamp"));
    stamp.set("CreationDate", `D:${(0, _util.getModificationDate)()}`);
    stamp.set("Rect", rect);
    stamp.set("F", 4);
    stamp.set("Border", [0, 0, 0]);
    stamp.set("Rotate", rotation);
    if (user) {
      stamp.set("T", (0, _core_utils.isAscii)(user) ? user : (0, _core_utils.stringToUTF16String)(user, true));
    }
    if (apRef || ap) {
      const n = new _primitives.Dict(xref);
      stamp.set("AP", n);
      if (apRef) {
        n.set("N", apRef);
      } else {
        n.set("N", ap);
      }
    }
    return stamp;
  }
  static async createNewAppearanceStream(annotation, xref, params) {
    const {
      rotation
    } = annotation;
    const {
      imageRef,
      width,
      height
    } = params.image;
    const resources = new _primitives.Dict(xref);
    const xobject = new _primitives.Dict(xref);
    resources.set("XObject", xobject);
    xobject.set("Im0", imageRef);
    const appearance = `q ${width} 0 0 ${height} 0 0 cm /Im0 Do Q`;
    const appearanceStreamDict = new _primitives.Dict(xref);
    appearanceStreamDict.set("FormType", 1);
    appearanceStreamDict.set("Subtype", _primitives.Name.get("Form"));
    appearanceStreamDict.set("Type", _primitives.Name.get("XObject"));
    appearanceStreamDict.set("BBox", [0, 0, width, height]);
    appearanceStreamDict.set("Resources", resources);
    if (rotation) {
      const matrix = (0, _core_utils.getRotationMatrix)(rotation, width, height);
      appearanceStreamDict.set("Matrix", matrix);
    }
    const ap = new _stream.StringStream(appearance);
    ap.dict = appearanceStreamDict;
    return ap;
  }
}
class FileAttachmentAnnotation extends MarkupAnnotation {
  constructor(params) {
    super(params);
    const {
      dict,
      xref
    } = params;
    const file = new _file_spec.FileSpec(dict.get("FS"), xref);
    this.data.annotationType = _util.AnnotationType.FILEATTACHMENT;
    this.data.hasOwnCanvas = this.data.noRotate;
    this.data.file = file.serializable;
    const name = dict.get("Name");
    this.data.name = name instanceof _primitives.Name ? (0, _util.stringToPDFString)(name.name) : "PushPin";
    const fillAlpha = dict.get("ca");
    this.data.fillAlpha = typeof fillAlpha === "number" && fillAlpha >= 0 && fillAlpha <= 1 ? fillAlpha : null;
  }
}

/***/ }),
/* 11 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.FakeUnicodeFont = void 0;
exports.createDefaultAppearance = createDefaultAppearance;
exports.getPdfColor = getPdfColor;
exports.parseAppearanceStream = parseAppearanceStream;
exports.parseDefaultAppearance = parseDefaultAppearance;
var _primitives = __w_pdfjs_require__(4);
var _core_utils = __w_pdfjs_require__(3);
var _util = __w_pdfjs_require__(2);
var _colorspace = __w_pdfjs_require__(12);
var _evaluator = __w_pdfjs_require__(13);
var _image_utils = __w_pdfjs_require__(59);
var _function = __w_pdfjs_require__(57);
var _stream = __w_pdfjs_require__(8);
class DefaultAppearanceEvaluator extends _evaluator.EvaluatorPreprocessor {
  constructor(str) {
    super(new _stream.StringStream(str));
  }
  parse() {
    const operation = {
      fn: 0,
      args: []
    };
    const result = {
      fontSize: 0,
      fontName: "",
      fontColor: new Uint8ClampedArray(3)
    };
    try {
      while (true) {
        operation.args.length = 0;
        if (!this.read(operation)) {
          break;
        }
        if (this.savedStatesDepth !== 0) {
          continue;
        }
        const {
          fn,
          args
        } = operation;
        switch (fn | 0) {
          case _util.OPS.setFont:
            const [fontName, fontSize] = args;
            if (fontName instanceof _primitives.Name) {
              result.fontName = fontName.name;
            }
            if (typeof fontSize === "number" && fontSize > 0) {
              result.fontSize = fontSize;
            }
            break;
          case _util.OPS.setFillRGBColor:
            _colorspace.ColorSpace.singletons.rgb.getRgbItem(args, 0, result.fontColor, 0);
            break;
          case _util.OPS.setFillGray:
            _colorspace.ColorSpace.singletons.gray.getRgbItem(args, 0, result.fontColor, 0);
            break;
          case _util.OPS.setFillCMYKColor:
            _colorspace.ColorSpace.singletons.cmyk.getRgbItem(args, 0, result.fontColor, 0);
            break;
        }
      }
    } catch (reason) {
      (0, _util.warn)(`parseDefaultAppearance - ignoring errors: "${reason}".`);
    }
    return result;
  }
}
function parseDefaultAppearance(str) {
  return new DefaultAppearanceEvaluator(str).parse();
}
class AppearanceStreamEvaluator extends _evaluator.EvaluatorPreprocessor {
  constructor(stream, evaluatorOptions, xref) {
    super(stream);
    this.stream = stream;
    this.evaluatorOptions = evaluatorOptions;
    this.xref = xref;
    this.resources = stream.dict?.get("Resources");
  }
  parse() {
    const operation = {
      fn: 0,
      args: []
    };
    let result = {
      scaleFactor: 1,
      fontSize: 0,
      fontName: "",
      fontColor: new Uint8ClampedArray(3),
      fillColorSpace: _colorspace.ColorSpace.singletons.gray
    };
    let breakLoop = false;
    const stack = [];
    try {
      while (true) {
        operation.args.length = 0;
        if (breakLoop || !this.read(operation)) {
          break;
        }
        const {
          fn,
          args
        } = operation;
        switch (fn | 0) {
          case _util.OPS.save:
            stack.push({
              scaleFactor: result.scaleFactor,
              fontSize: result.fontSize,
              fontName: result.fontName,
              fontColor: result.fontColor.slice(),
              fillColorSpace: result.fillColorSpace
            });
            break;
          case _util.OPS.restore:
            result = stack.pop() || result;
            break;
          case _util.OPS.setTextMatrix:
            result.scaleFactor *= Math.hypot(args[0], args[1]);
            break;
          case _util.OPS.setFont:
            const [fontName, fontSize] = args;
            if (fontName instanceof _primitives.Name) {
              result.fontName = fontName.name;
            }
            if (typeof fontSize === "number" && fontSize > 0) {
              result.fontSize = fontSize * result.scaleFactor;
            }
            break;
          case _util.OPS.setFillColorSpace:
            result.fillColorSpace = _colorspace.ColorSpace.parse({
              cs: args[0],
              xref: this.xref,
              resources: this.resources,
              pdfFunctionFactory: this._pdfFunctionFactory,
              localColorSpaceCache: this._localColorSpaceCache
            });
            break;
          case _util.OPS.setFillColor:
            const cs = result.fillColorSpace;
            cs.getRgbItem(args, 0, result.fontColor, 0);
            break;
          case _util.OPS.setFillRGBColor:
            _colorspace.ColorSpace.singletons.rgb.getRgbItem(args, 0, result.fontColor, 0);
            break;
          case _util.OPS.setFillGray:
            _colorspace.ColorSpace.singletons.gray.getRgbItem(args, 0, result.fontColor, 0);
            break;
          case _util.OPS.setFillCMYKColor:
            _colorspace.ColorSpace.singletons.cmyk.getRgbItem(args, 0, result.fontColor, 0);
            break;
          case _util.OPS.showText:
          case _util.OPS.showSpacedText:
          case _util.OPS.nextLineShowText:
          case _util.OPS.nextLineSetSpacingShowText:
            breakLoop = true;
            break;
        }
      }
    } catch (reason) {
      (0, _util.warn)(`parseAppearanceStream - ignoring errors: "${reason}".`);
    }
    this.stream.reset();
    delete result.scaleFactor;
    delete result.fillColorSpace;
    return result;
  }
  get _localColorSpaceCache() {
    return (0, _util.shadow)(this, "_localColorSpaceCache", new _image_utils.LocalColorSpaceCache());
  }
  get _pdfFunctionFactory() {
    const pdfFunctionFactory = new _function.PDFFunctionFactory({
      xref: this.xref,
      isEvalSupported: this.evaluatorOptions.isEvalSupported
    });
    return (0, _util.shadow)(this, "_pdfFunctionFactory", pdfFunctionFactory);
  }
}
function parseAppearanceStream(stream, evaluatorOptions, xref) {
  return new AppearanceStreamEvaluator(stream, evaluatorOptions, xref).parse();
}
function getPdfColor(color, isFill) {
  if (color[0] === color[1] && color[1] === color[2]) {
    const gray = color[0] / 255;
    return `${(0, _core_utils.numberToString)(gray)} ${isFill ? "g" : "G"}`;
  }
  return Array.from(color, c => (0, _core_utils.numberToString)(c / 255)).join(" ") + ` ${isFill ? "rg" : "RG"}`;
}
function createDefaultAppearance({
  fontSize,
  fontName,
  fontColor
}) {
  return `/${(0, _core_utils.escapePDFName)(fontName)} ${fontSize} Tf ${getPdfColor(fontColor, true)}`;
}
class FakeUnicodeFont {
  constructor(xref, fontFamily) {
    this.xref = xref;
    this.widths = null;
    this.firstChar = Infinity;
    this.lastChar = -Infinity;
    this.fontFamily = fontFamily;
    const canvas = new OffscreenCanvas(1, 1);
    this.ctxMeasure = canvas.getContext("2d");
    if (!FakeUnicodeFont._fontNameId) {
      FakeUnicodeFont._fontNameId = 1;
    }
    this.fontName = _primitives.Name.get(`InvalidPDFjsFont_${fontFamily}_${FakeUnicodeFont._fontNameId++}`);
  }
  get toUnicodeRef() {
    if (!FakeUnicodeFont._toUnicodeRef) {
      const toUnicode = `/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<< /Registry (Adobe)
/Ordering (UCS) /Supplement 0 >> def
/CMapName /Adobe-Identity-UCS def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
1 beginbfrange
<0000> <FFFF> <0000>
endbfrange
endcmap CMapName currentdict /CMap defineresource pop end end`;
      const toUnicodeStream = FakeUnicodeFont.toUnicodeStream = new _stream.StringStream(toUnicode);
      const toUnicodeDict = new _primitives.Dict(this.xref);
      toUnicodeStream.dict = toUnicodeDict;
      toUnicodeDict.set("Length", toUnicode.length);
      FakeUnicodeFont._toUnicodeRef = this.xref.getNewPersistentRef(toUnicodeStream);
    }
    return FakeUnicodeFont._toUnicodeRef;
  }
  get fontDescriptorRef() {
    if (!FakeUnicodeFont._fontDescriptorRef) {
      const fontDescriptor = new _primitives.Dict(this.xref);
      fontDescriptor.set("Type", _primitives.Name.get("FontDescriptor"));
      fontDescriptor.set("FontName", this.fontName);
      fontDescriptor.set("FontFamily", "MyriadPro Regular");
      fontDescriptor.set("FontBBox", [0, 0, 0, 0]);
      fontDescriptor.set("FontStretch", _primitives.Name.get("Normal"));
      fontDescriptor.set("FontWeight", 400);
      fontDescriptor.set("ItalicAngle", 0);
      FakeUnicodeFont._fontDescriptorRef = this.xref.getNewPersistentRef(fontDescriptor);
    }
    return FakeUnicodeFont._fontDescriptorRef;
  }
  get descendantFontRef() {
    const descendantFont = new _primitives.Dict(this.xref);
    descendantFont.set("BaseFont", this.fontName);
    descendantFont.set("Type", _primitives.Name.get("Font"));
    descendantFont.set("Subtype", _primitives.Name.get("CIDFontType0"));
    descendantFont.set("CIDToGIDMap", _primitives.Name.get("Identity"));
    descendantFont.set("FirstChar", this.firstChar);
    descendantFont.set("LastChar", this.lastChar);
    descendantFont.set("FontDescriptor", this.fontDescriptorRef);
    descendantFont.set("DW", 1000);
    const widths = [];
    const chars = [...this.widths.entries()].sort();
    let currentChar = null;
    let currentWidths = null;
    for (const [char, width] of chars) {
      if (!currentChar) {
        currentChar = char;
        currentWidths = [width];
        continue;
      }
      if (char === currentChar + currentWidths.length) {
        currentWidths.push(width);
      } else {
        widths.push(currentChar, currentWidths);
        currentChar = char;
        currentWidths = [width];
      }
    }
    if (currentChar) {
      widths.push(currentChar, currentWidths);
    }
    descendantFont.set("W", widths);
    const cidSystemInfo = new _primitives.Dict(this.xref);
    cidSystemInfo.set("Ordering", "Identity");
    cidSystemInfo.set("Registry", "Adobe");
    cidSystemInfo.set("Supplement", 0);
    descendantFont.set("CIDSystemInfo", cidSystemInfo);
    return this.xref.getNewPersistentRef(descendantFont);
  }
  get baseFontRef() {
    const baseFont = new _primitives.Dict(this.xref);
    baseFont.set("BaseFont", this.fontName);
    baseFont.set("Type", _primitives.Name.get("Font"));
    baseFont.set("Subtype", _primitives.Name.get("Type0"));
    baseFont.set("Encoding", _primitives.Name.get("Identity-H"));
    baseFont.set("DescendantFonts", [this.descendantFontRef]);
    baseFont.set("ToUnicode", this.toUnicodeRef);
    return this.xref.getNewPersistentRef(baseFont);
  }
  get resources() {
    const resources = new _primitives.Dict(this.xref);
    const font = new _primitives.Dict(this.xref);
    font.set(this.fontName.name, this.baseFontRef);
    resources.set("Font", font);
    return resources;
  }
  _createContext() {
    this.widths = new Map();
    this.ctxMeasure.font = `1000px ${this.fontFamily}`;
    return this.ctxMeasure;
  }
  createFontResources(text) {
    const ctx = this._createContext();
    for (const line of text.split(/\r\n?|\n/)) {
      for (const char of line.split("")) {
        const code = char.charCodeAt(0);
        if (this.widths.has(code)) {
          continue;
        }
        const metrics = ctx.measureText(char);
        const width = Math.ceil(metrics.width);
        this.widths.set(code, width);
        this.firstChar = Math.min(code, this.firstChar);
        this.lastChar = Math.max(code, this.lastChar);
      }
    }
    return this.resources;
  }
  createAppearance(text, rect, rotation, fontSize, bgColor, strokeAlpha) {
    const ctx = this._createContext();
    const lines = [];
    let maxWidth = -Infinity;
    for (const line of text.split(/\r\n?|\n/)) {
      lines.push(line);
      const lineWidth = ctx.measureText(line).width;
      maxWidth = Math.max(maxWidth, lineWidth);
      for (const char of line.split("")) {
        const code = char.charCodeAt(0);
        let width = this.widths.get(code);
        if (width === undefined) {
          const metrics = ctx.measureText(char);
          width = Math.ceil(metrics.width);
          this.widths.set(code, width);
          this.firstChar = Math.min(code, this.firstChar);
          this.lastChar = Math.max(code, this.lastChar);
        }
      }
    }
    maxWidth *= fontSize / 1000;
    const [x1, y1, x2, y2] = rect;
    let w = x2 - x1;
    let h = y2 - y1;
    if (rotation % 180 !== 0) {
      [w, h] = [h, w];
    }
    let hscale = 1;
    if (maxWidth > w) {
      hscale = w / maxWidth;
    }
    let vscale = 1;
    const lineHeight = _util.LINE_FACTOR * fontSize;
    const lineDescent = _util.LINE_DESCENT_FACTOR * fontSize;
    const maxHeight = lineHeight * lines.length;
    if (maxHeight > h) {
      vscale = h / maxHeight;
    }
    const fscale = Math.min(hscale, vscale);
    const newFontSize = fontSize * fscale;
    const buffer = ["q", `0 0 ${(0, _core_utils.numberToString)(w)} ${(0, _core_utils.numberToString)(h)} re W n`, `BT`, `1 0 0 1 0 ${(0, _core_utils.numberToString)(h + lineDescent)} Tm 0 Tc ${getPdfColor(bgColor, true)}`, `/${this.fontName.name} ${(0, _core_utils.numberToString)(newFontSize)} Tf`];
    const {
      resources
    } = this;
    strokeAlpha = typeof strokeAlpha === "number" && strokeAlpha >= 0 && strokeAlpha <= 1 ? strokeAlpha : 1;
    if (strokeAlpha !== 1) {
      buffer.push("/R0 gs");
      const extGState = new _primitives.Dict(this.xref);
      const r0 = new _primitives.Dict(this.xref);
      r0.set("ca", strokeAlpha);
      r0.set("CA", strokeAlpha);
      r0.set("Type", _primitives.Name.get("ExtGState"));
      extGState.set("R0", r0);
      resources.set("ExtGState", extGState);
    }
    const vShift = (0, _core_utils.numberToString)(lineHeight);
    for (const line of lines) {
      buffer.push(`0 -${vShift} Td <${(0, _core_utils.stringToUTF16HexString)(line)}> Tj`);
    }
    buffer.push("ET", "Q");
    const appearance = buffer.join("\n");
    const appearanceStreamDict = new _primitives.Dict(this.xref);
    appearanceStreamDict.set("Subtype", _primitives.Name.get("Form"));
    appearanceStreamDict.set("Type", _primitives.Name.get("XObject"));
    appearanceStreamDict.set("BBox", [0, 0, w, h]);
    appearanceStreamDict.set("Length", appearance.length);
    appearanceStreamDict.set("Resources", resources);
    if (rotation) {
      const matrix = (0, _core_utils.getRotationMatrix)(rotation, w, h);
      appearanceStreamDict.set("Matrix", matrix);
    }
    const ap = new _stream.StringStream(appearance);
    ap.dict = appearanceStreamDict;
    return ap;
  }
}
exports.FakeUnicodeFont = FakeUnicodeFont;

/***/ }),
/* 12 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.ColorSpace = void 0;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(4);
var _base_stream = __w_pdfjs_require__(5);
var _core_utils = __w_pdfjs_require__(3);
function resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) {
  const COMPONENTS = 3;
  alpha01 = alpha01 !== 1 ? 0 : alpha01;
  const xRatio = w1 / w2;
  const yRatio = h1 / h2;
  let newIndex = 0,
    oldIndex;
  const xScaled = new Uint16Array(w2);
  const w1Scanline = w1 * COMPONENTS;
  for (let i = 0; i < w2; i++) {
    xScaled[i] = Math.floor(i * xRatio) * COMPONENTS;
  }
  for (let i = 0; i < h2; i++) {
    const py = Math.floor(i * yRatio) * w1Scanline;
    for (let j = 0; j < w2; j++) {
      oldIndex = py + xScaled[j];
      dest[newIndex++] = src[oldIndex++];
      dest[newIndex++] = src[oldIndex++];
      dest[newIndex++] = src[oldIndex++];
      newIndex += alpha01;
    }
  }
}
class ColorSpace {
  constructor(name, numComps) {
    if (this.constructor === ColorSpace) {
      (0, _util.unreachable)("Cannot initialize ColorSpace.");
    }
    this.name = name;
    this.numComps = numComps;
  }
  getRgb(src, srcOffset) {
    const rgb = new Uint8ClampedArray(3);
    this.getRgbItem(src, srcOffset, rgb, 0);
    return rgb;
  }
  getRgbItem(src, srcOffset, dest, destOffset) {
    (0, _util.unreachable)("Should not call ColorSpace.getRgbItem");
  }
  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
    (0, _util.unreachable)("Should not call ColorSpace.getRgbBuffer");
  }
  getOutputLength(inputLength, alpha01) {
    (0, _util.unreachable)("Should not call ColorSpace.getOutputLength");
  }
  isPassthrough(bits) {
    return false;
  }
  isDefaultDecode(decodeMap, bpc) {
    return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
  }
  fillRgb(dest, originalWidth, originalHeight, width, height, actualHeight, bpc, comps, alpha01) {
    const count = originalWidth * originalHeight;
    let rgbBuf = null;
    const numComponentColors = 1 << bpc;
    const needsResizing = originalHeight !== height || originalWidth !== width;
    if (this.isPassthrough(bpc)) {
      rgbBuf = comps;
    } else if (this.numComps === 1 && count > numComponentColors && this.name !== "DeviceGray" && this.name !== "DeviceRGB") {
      const allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : new Uint16Array(numComponentColors);
      for (let i = 0; i < numComponentColors; i++) {
        allColors[i] = i;
      }
      const colorMap = new Uint8ClampedArray(numComponentColors * 3);
      this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, 0);
      if (!needsResizing) {
        let destPos = 0;
        for (let i = 0; i < count; ++i) {
          const key = comps[i] * 3;
          dest[destPos++] = colorMap[key];
          dest[destPos++] = colorMap[key + 1];
          dest[destPos++] = colorMap[key + 2];
          destPos += alpha01;
        }
      } else {
        rgbBuf = new Uint8Array(count * 3);
        let rgbPos = 0;
        for (let i = 0; i < count; ++i) {
          const key = comps[i] * 3;
          rgbBuf[rgbPos++] = colorMap[key];
          rgbBuf[rgbPos++] = colorMap[key + 1];
          rgbBuf[rgbPos++] = colorMap[key + 2];
        }
      }
    } else if (!needsResizing) {
      this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc, alpha01);
    } else {
      rgbBuf = new Uint8ClampedArray(count * 3);
      this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc, 0);
    }
    if (rgbBuf) {
      if (needsResizing) {
        resizeRgbImage(rgbBuf, dest, originalWidth, originalHeight, width, height, alpha01);
      } else {
        let destPos = 0,
          rgbPos = 0;
        for (let i = 0, ii = width * actualHeight; i < ii; i++) {
          dest[destPos++] = rgbBuf[rgbPos++];
          dest[destPos++] = rgbBuf[rgbPos++];
          dest[destPos++] = rgbBuf[rgbPos++];
          destPos += alpha01;
        }
      }
    }
  }
  get usesZeroToOneRange() {
    return (0, _util.shadow)(this, "usesZeroToOneRange", true);
  }
  static _cache(cacheKey, xref, localColorSpaceCache, parsedColorSpace) {
    if (!localColorSpaceCache) {
      throw new Error('ColorSpace._cache - expected "localColorSpaceCache" argument.');
    }
    if (!parsedColorSpace) {
      throw new Error('ColorSpace._cache - expected "parsedColorSpace" argument.');
    }
    let csName, csRef;
    if (cacheKey instanceof _primitives.Ref) {
      csRef = cacheKey;
      cacheKey = xref.fetch(cacheKey);
    }
    if (cacheKey instanceof _primitives.Name) {
      csName = cacheKey.name;
    }
    if (csName || csRef) {
      localColorSpaceCache.set(csName, csRef, parsedColorSpace);
    }
  }
  static getCached(cacheKey, xref, localColorSpaceCache) {
    if (!localColorSpaceCache) {
      throw new Error('ColorSpace.getCached - expected "localColorSpaceCache" argument.');
    }
    if (cacheKey instanceof _primitives.Ref) {
      const localColorSpace = localColorSpaceCache.getByRef(cacheKey);
      if (localColorSpace) {
        return localColorSpace;
      }
      try {
        cacheKey = xref.fetch(cacheKey);
      } catch (ex) {
        if (ex instanceof _core_utils.MissingDataException) {
          throw ex;
        }
      }
    }
    if (cacheKey instanceof _primitives.Name) {
      const localColorSpace = localColorSpaceCache.getByName(cacheKey.name);
      if (localColorSpace) {
        return localColorSpace;
      }
    }
    return null;
  }
  static async parseAsync({
    cs,
    xref,
    resources = null,
    pdfFunctionFactory,
    localColorSpaceCache
  }) {
    const parsedColorSpace = this._parse(cs, xref, resources, pdfFunctionFactory);
    this._cache(cs, xref, localColorSpaceCache, parsedColorSpace);
    return parsedColorSpace;
  }
  static parse({
    cs,
    xref,
    resources = null,
    pdfFunctionFactory,
    localColorSpaceCache
  }) {
    const cachedColorSpace = this.getCached(cs, xref, localColorSpaceCache);
    if (cachedColorSpace) {
      return cachedColorSpace;
    }
    const parsedColorSpace = this._parse(cs, xref, resources, pdfFunctionFactory);
    this._cache(cs, xref, localColorSpaceCache, parsedColorSpace);
    return parsedColorSpace;
  }
  static _parse(cs, xref, resources = null, pdfFunctionFactory) {
    cs = xref.fetchIfRef(cs);
    if (cs instanceof _primitives.Name) {
      switch (cs.name) {
        case "G":
        case "DeviceGray":
          return this.singletons.gray;
        case "RGB":
        case "DeviceRGB":
          return this.singletons.rgb;
        case "CMYK":
        case "DeviceCMYK":
          return this.singletons.cmyk;
        case "Pattern":
          return new PatternCS(null);
        default:
          if (resources instanceof _primitives.Dict) {
            const colorSpaces = resources.get("ColorSpace");
            if (colorSpaces instanceof _primitives.Dict) {
              const resourcesCS = colorSpaces.get(cs.name);
              if (resourcesCS) {
                if (resourcesCS instanceof _primitives.Name) {
                  return this._parse(resourcesCS, xref, resources, pdfFunctionFactory);
                }
                cs = resourcesCS;
                break;
              }
            }
          }
          throw new _util.FormatError(`Unrecognized ColorSpace: ${cs.name}`);
      }
    }
    if (Array.isArray(cs)) {
      const mode = xref.fetchIfRef(cs[0]).name;
      let params, numComps, baseCS, whitePoint, blackPoint, gamma;
      switch (mode) {
        case "G":
        case "DeviceGray":
          return this.singletons.gray;
        case "RGB":
        case "DeviceRGB":
          return this.singletons.rgb;
        case "CMYK":
        case "DeviceCMYK":
          return this.singletons.cmyk;
        case "CalGray":
          params = xref.fetchIfRef(cs[1]);
          whitePoint = params.getArray("WhitePoint");
          blackPoint = params.getArray("BlackPoint");
          gamma = params.get("Gamma");
          return new CalGrayCS(whitePoint, blackPoint, gamma);
        case "CalRGB":
          params = xref.fetchIfRef(cs[1]);
          whitePoint = params.getArray("WhitePoint");
          blackPoint = params.getArray("BlackPoint");
          gamma = params.getArray("Gamma");
          const matrix = params.getArray("Matrix");
          return new CalRGBCS(whitePoint, blackPoint, gamma, matrix);
        case "ICCBased":
          const stream = xref.fetchIfRef(cs[1]);
          const dict = stream.dict;
          numComps = dict.get("N");
          const alt = dict.get("Alternate");
          if (alt) {
            const altCS = this._parse(alt, xref, resources, pdfFunctionFactory);
            if (altCS.numComps === numComps) {
              return altCS;
            }
            (0, _util.warn)("ICCBased color space: Ignoring incorrect /Alternate entry.");
          }
          if (numComps === 1) {
            return this.singletons.gray;
          } else if (numComps === 3) {
            return this.singletons.rgb;
          } else if (numComps === 4) {
            return this.singletons.cmyk;
          }
          break;
        case "Pattern":
          baseCS = cs[1] || null;
          if (baseCS) {
            baseCS = this._parse(baseCS, xref, resources, pdfFunctionFactory);
          }
          return new PatternCS(baseCS);
        case "I":
        case "Indexed":
          baseCS = this._parse(cs[1], xref, resources, pdfFunctionFactory);
          const hiVal = xref.fetchIfRef(cs[2]) + 1;
          const lookup = xref.fetchIfRef(cs[3]);
          return new IndexedCS(baseCS, hiVal, lookup);
        case "Separation":
        case "DeviceN":
          const name = xref.fetchIfRef(cs[1]);
          numComps = Array.isArray(name) ? name.length : 1;
          baseCS = this._parse(cs[2], xref, resources, pdfFunctionFactory);
          const tintFn = pdfFunctionFactory.create(cs[3]);
          return new AlternateCS(numComps, baseCS, tintFn);
        case "Lab":
          params = xref.fetchIfRef(cs[1]);
          whitePoint = params.getArray("WhitePoint");
          blackPoint = params.getArray("BlackPoint");
          const range = params.getArray("Range");
          return new LabCS(whitePoint, blackPoint, range);
        default:
          throw new _util.FormatError(`Unimplemented ColorSpace object: ${mode}`);
      }
    }
    throw new _util.FormatError(`Unrecognized ColorSpace object: ${cs}`);
  }
  static isDefaultDecode(decode, numComps) {
    if (!Array.isArray(decode)) {
      return true;
    }
    if (numComps * 2 !== decode.length) {
      (0, _util.warn)("The decode map is not the correct length");
      return true;
    }
    for (let i = 0, ii = decode.length; i < ii; i += 2) {
      if (decode[i] !== 0 || decode[i + 1] !== 1) {
        return false;
      }
    }
    return true;
  }
  static get singletons() {
    return (0, _util.shadow)(this, "singletons", {
      get gray() {
        return (0, _util.shadow)(this, "gray", new DeviceGrayCS());
      },
      get rgb() {
        return (0, _util.shadow)(this, "rgb", new DeviceRgbCS());
      },
      get cmyk() {
        return (0, _util.shadow)(this, "cmyk", new DeviceCmykCS());
      }
    });
  }
}
exports.ColorSpace = ColorSpace;
class AlternateCS extends ColorSpace {
  constructor(numComps, base, tintFn) {
    super("Alternate", numComps);
    this.base = base;
    this.tintFn = tintFn;
    this.tmpBuf = new Float32Array(base.numComps);
  }
  getRgbItem(src, srcOffset, dest, destOffset) {
    const tmpBuf = this.tmpBuf;
    this.tintFn(src, srcOffset, tmpBuf, 0);
    this.base.getRgbItem(tmpBuf, 0, dest, destOffset);
  }
  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
    const tintFn = this.tintFn;
    const base = this.base;
    const scale = 1 / ((1 << bits) - 1);
    const baseNumComps = base.numComps;
    const usesZeroToOneRange = base.usesZeroToOneRange;
    const isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0;
    let pos = isPassthrough ? destOffset : 0;
    const baseBuf = isPassthrough ? dest : new Uint8ClampedArray(baseNumComps * count);
    const numComps = this.numComps;
    const scaled = new Float32Array(numComps);
    const tinted = new Float32Array(baseNumComps);
    let i, j;
    for (i = 0; i < count; i++) {
      for (j = 0; j < numComps; j++) {
        scaled[j] = src[srcOffset++] * scale;
      }
      tintFn(scaled, 0, tinted, 0);
      if (usesZeroToOneRange) {
        for (j = 0; j < baseNumComps; j++) {
          baseBuf[pos++] = tinted[j] * 255;
        }
      } else {
        base.getRgbItem(tinted, 0, baseBuf, pos);
        pos += baseNumComps;
      }
    }
    if (!isPassthrough) {
      base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01);
    }
  }
  getOutputLength(inputLength, alpha01) {
    return this.base.getOutputLength(inputLength * this.base.numComps / this.numComps, alpha01);
  }
}
class PatternCS extends ColorSpace {
  constructor(baseCS) {
    super("Pattern", null);
    this.base = baseCS;
  }
  isDefaultDecode(decodeMap, bpc) {
    (0, _util.unreachable)("Should not call PatternCS.isDefaultDecode");
  }
}
class IndexedCS extends ColorSpace {
  constructor(base, highVal, lookup) {
    super("Indexed", 1);
    this.base = base;
    this.highVal = highVal;
    const length = base.numComps * highVal;
    this.lookup = new Uint8Array(length);
    if (lookup instanceof _base_stream.BaseStream) {
      const bytes = lookup.getBytes(length);
      this.lookup.set(bytes);
    } else if (typeof lookup === "string") {
      for (let i = 0; i < length; ++i) {
        this.lookup[i] = lookup.charCodeAt(i) & 0xff;
      }
    } else {
      throw new _util.FormatError(`IndexedCS - unrecognized lookup table: ${lookup}`);
    }
  }
  getRgbItem(src, srcOffset, dest, destOffset) {
    const numComps = this.base.numComps;
    const start = src[srcOffset] * numComps;
    this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0);
  }
  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
    const base = this.base;
    const numComps = base.numComps;
    const outputDelta = base.getOutputLength(numComps, alpha01);
    const lookup = this.lookup;
    for (let i = 0; i < count; ++i) {
      const lookupPos = src[srcOffset++] * numComps;
      base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01);
      destOffset += outputDelta;
    }
  }
  getOutputLength(inputLength, alpha01) {
    return this.base.getOutputLength(inputLength * this.base.numComps, alpha01);
  }
  isDefaultDecode(decodeMap, bpc) {
    if (!Array.isArray(decodeMap)) {
      return true;
    }
    if (decodeMap.length !== 2) {
      (0, _util.warn)("Decode map length is not correct");
      return true;
    }
    if (!Number.isInteger(bpc) || bpc < 1) {
      (0, _util.warn)("Bits per component is not correct");
      return true;
    }
    return decodeMap[0] === 0 && decodeMap[1] === (1 << bpc) - 1;
  }
}
class DeviceGrayCS extends ColorSpace {
  constructor() {
    super("DeviceGray", 1);
  }
  getRgbItem(src, srcOffset, dest, destOffset) {
    const c = src[srcOffset] * 255;
    dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c;
  }
  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
    const scale = 255 / ((1 << bits) - 1);
    let j = srcOffset,
      q = destOffset;
    for (let i = 0; i < count; ++i) {
      const c = scale * src[j++];
      dest[q++] = c;
      dest[q++] = c;
      dest[q++] = c;
      q += alpha01;
    }
  }
  getOutputLength(inputLength, alpha01) {
    return inputLength * (3 + alpha01);
  }
}
class DeviceRgbCS extends ColorSpace {
  constructor() {
    super("DeviceRGB", 3);
  }
  getRgbItem(src, srcOffset, dest, destOffset) {
    dest[destOffset] = src[srcOffset] * 255;
    dest[destOffset + 1] = src[srcOffset + 1] * 255;
    dest[destOffset + 2] = src[srcOffset + 2] * 255;
  }
  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
    if (bits === 8 && alpha01 === 0) {
      dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset);
      return;
    }
    const scale = 255 / ((1 << bits) - 1);
    let j = srcOffset,
      q = destOffset;
    for (let i = 0; i < count; ++i) {
      dest[q++] = scale * src[j++];
      dest[q++] = scale * src[j++];
      dest[q++] = scale * src[j++];
      q += alpha01;
    }
  }
  getOutputLength(inputLength, alpha01) {
    return inputLength * (3 + alpha01) / 3 | 0;
  }
  isPassthrough(bits) {
    return bits === 8;
  }
}
class DeviceCmykCS extends ColorSpace {
  constructor() {
    super("DeviceCMYK", 4);
  }
  #toRgb(src, srcOffset, srcScale, dest, destOffset) {
    const c = src[srcOffset] * srcScale;
    const m = src[srcOffset + 1] * srcScale;
    const y = src[srcOffset + 2] * srcScale;
    const k = src[srcOffset + 3] * srcScale;
    dest[destOffset] = 255 + c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k + -285.2331026137004) + m * (1.7149763477362134 * m - 5.6096736904047315 * y + -17.873870861415444 * k - 5.497006427196366) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) + k * (-21.86122147463605 * k - 189.48180835922747);
    dest[destOffset + 1] = 255 + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k + -79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) + k * (-20.737325471181034 * k - 187.80453709719578);
    dest[destOffset + 2] = 255 + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k + -14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k + -193.58209356861505) + k * (-22.33816807309886 * k - 180.12613974708367);
  }
  getRgbItem(src, srcOffset, dest, destOffset) {
    this.#toRgb(src, srcOffset, 1, dest, destOffset);
  }
  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
    const scale = 1 / ((1 << bits) - 1);
    for (let i = 0; i < count; i++) {
      this.#toRgb(src, srcOffset, scale, dest, destOffset);
      srcOffset += 4;
      destOffset += 3 + alpha01;
    }
  }
  getOutputLength(inputLength, alpha01) {
    return inputLength / 4 * (3 + alpha01) | 0;
  }
}
class CalGrayCS extends ColorSpace {
  constructor(whitePoint, blackPoint, gamma) {
    super("CalGray", 1);
    if (!whitePoint) {
      throw new _util.FormatError("WhitePoint missing - required for color space CalGray");
    }
    [this.XW, this.YW, this.ZW] = whitePoint;
    [this.XB, this.YB, this.ZB] = blackPoint || [0, 0, 0];
    this.G = gamma || 1;
    if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {
      throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}, no fallback available`);
    }
    if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {
      (0, _util.info)(`Invalid BlackPoint for ${this.name}, falling back to default.`);
      this.XB = this.YB = this.ZB = 0;
    }
    if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) {
      (0, _util.warn)(`${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ` + `ZB: ${this.ZB}, only default values are supported.`);
    }
    if (this.G < 1) {
      (0, _util.info)(`Invalid Gamma: ${this.G} for ${this.name}, falling back to default.`);
      this.G = 1;
    }
  }
  #toRgb(src, srcOffset, dest, destOffset, scale) {
    const A = src[srcOffset] * scale;
    const AG = A ** this.G;
    const L = this.YW * AG;
    const val = Math.max(295.8 * L ** 0.3333333333333333 - 40.8, 0);
    dest[destOffset] = val;
    dest[destOffset + 1] = val;
    dest[destOffset + 2] = val;
  }
  getRgbItem(src, srcOffset, dest, destOffset) {
    this.#toRgb(src, srcOffset, dest, destOffset, 1);
  }
  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
    const scale = 1 / ((1 << bits) - 1);
    for (let i = 0; i < count; ++i) {
      this.#toRgb(src, srcOffset, dest, destOffset, scale);
      srcOffset += 1;
      destOffset += 3 + alpha01;
    }
  }
  getOutputLength(inputLength, alpha01) {
    return inputLength * (3 + alpha01);
  }
}
class CalRGBCS extends ColorSpace {
  static #BRADFORD_SCALE_MATRIX = new Float32Array([0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296]);
  static #BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([0.9869929, -0.1470543, 0.1599627, 0.4323053, 0.5183603, 0.0492912, -0.0085287, 0.0400428, 0.9684867]);
  static #SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([3.2404542, -1.5371385, -0.4985314, -0.9692660, 1.8760108, 0.0415560, 0.0556434, -0.2040259, 1.0572252]);
  static #FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]);
  static #tempNormalizeMatrix = new Float32Array(3);
  static #tempConvertMatrix1 = new Float32Array(3);
  static #tempConvertMatrix2 = new Float32Array(3);
  static #DECODE_L_CONSTANT = ((8 + 16) / 116) ** 3 / 8.0;
  constructor(whitePoint, blackPoint, gamma, matrix) {
    super("CalRGB", 3);
    if (!whitePoint) {
      throw new _util.FormatError("WhitePoint missing - required for color space CalRGB");
    }
    const [XW, YW, ZW] = this.whitePoint = whitePoint;
    const [XB, YB, ZB] = this.blackPoint = blackPoint || new Float32Array(3);
    [this.GR, this.GG, this.GB] = gamma || new Float32Array([1, 1, 1]);
    [this.MXA, this.MYA, this.MZA, this.MXB, this.MYB, this.MZB, this.MXC, this.MYC, this.MZC] = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);
    if (XW < 0 || ZW < 0 || YW !== 1) {
      throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}, no fallback available`);
    }
    if (XB < 0 || YB < 0 || ZB < 0) {
      (0, _util.info)(`Invalid BlackPoint for ${this.name} [${XB}, ${YB}, ${ZB}], ` + "falling back to default.");
      this.blackPoint = new Float32Array(3);
    }
    if (this.GR < 0 || this.GG < 0 || this.GB < 0) {
      (0, _util.info)(`Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ` + `${this.name}, falling back to default.`);
      this.GR = this.GG = this.GB = 1;
    }
  }
  #matrixProduct(a, b, result) {
    result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
    result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2];
    result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2];
  }
  #toFlat(sourceWhitePoint, LMS, result) {
    result[0] = LMS[0] * 1 / sourceWhitePoint[0];
    result[1] = LMS[1] * 1 / sourceWhitePoint[1];
    result[2] = LMS[2] * 1 / sourceWhitePoint[2];
  }
  #toD65(sourceWhitePoint, LMS, result) {
    const D65X = 0.95047;
    const D65Y = 1;
    const D65Z = 1.08883;
    result[0] = LMS[0] * D65X / sourceWhitePoint[0];
    result[1] = LMS[1] * D65Y / sourceWhitePoint[1];
    result[2] = LMS[2] * D65Z / sourceWhitePoint[2];
  }
  #sRGBTransferFunction(color) {
    if (color <= 0.0031308) {
      return this.#adjustToRange(0, 1, 12.92 * color);
    }
    if (color >= 0.99554525) {
      return 1;
    }
    return this.#adjustToRange(0, 1, (1 + 0.055) * color ** (1 / 2.4) - 0.055);
  }
  #adjustToRange(min, max, value) {
    return Math.max(min, Math.min(max, value));
  }
  #decodeL(L) {
    if (L < 0) {
      return -this.#decodeL(-L);
    }
    if (L > 8.0) {
      return ((L + 16) / 116) ** 3;
    }
    return L * CalRGBCS.#DECODE_L_CONSTANT;
  }
  #compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) {
    if (sourceBlackPoint[0] === 0 && sourceBlackPoint[1] === 0 && sourceBlackPoint[2] === 0) {
      result[0] = XYZ_Flat[0];
      result[1] = XYZ_Flat[1];
      result[2] = XYZ_Flat[2];
      return;
    }
    const zeroDecodeL = this.#decodeL(0);
    const X_DST = zeroDecodeL;
    const X_SRC = this.#decodeL(sourceBlackPoint[0]);
    const Y_DST = zeroDecodeL;
    const Y_SRC = this.#decodeL(sourceBlackPoint[1]);
    const Z_DST = zeroDecodeL;
    const Z_SRC = this.#decodeL(sourceBlackPoint[2]);
    const X_Scale = (1 - X_DST) / (1 - X_SRC);
    const X_Offset = 1 - X_Scale;
    const Y_Scale = (1 - Y_DST) / (1 - Y_SRC);
    const Y_Offset = 1 - Y_Scale;
    const Z_Scale = (1 - Z_DST) / (1 - Z_SRC);
    const Z_Offset = 1 - Z_Scale;
    result[0] = XYZ_Flat[0] * X_Scale + X_Offset;
    result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset;
    result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset;
  }
  #normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) {
    if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) {
      result[0] = XYZ_In[0];
      result[1] = XYZ_In[1];
      result[2] = XYZ_In[2];
      return;
    }
    const LMS = result;
    this.#matrixProduct(CalRGBCS.#BRADFORD_SCALE_MATRIX, XYZ_In, LMS);
    const LMS_Flat = CalRGBCS.#tempNormalizeMatrix;
    this.#toFlat(sourceWhitePoint, LMS, LMS_Flat);
    this.#matrixProduct(CalRGBCS.#BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result);
  }
  #normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) {
    const LMS = result;
    this.#matrixProduct(CalRGBCS.#BRADFORD_SCALE_MATRIX, XYZ_In, LMS);
    const LMS_D65 = CalRGBCS.#tempNormalizeMatrix;
    this.#toD65(sourceWhitePoint, LMS, LMS_D65);
    this.#matrixProduct(CalRGBCS.#BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result);
  }
  #toRgb(src, srcOffset, dest, destOffset, scale) {
    const A = this.#adjustToRange(0, 1, src[srcOffset] * scale);
    const B = this.#adjustToRange(0, 1, src[srcOffset + 1] * scale);
    const C = this.#adjustToRange(0, 1, src[srcOffset + 2] * scale);
    const AGR = A === 1 ? 1 : A ** this.GR;
    const BGG = B === 1 ? 1 : B ** this.GG;
    const CGB = C === 1 ? 1 : C ** this.GB;
    const X = this.MXA * AGR + this.MXB * BGG + this.MXC * CGB;
    const Y = this.MYA * AGR + this.MYB * BGG + this.MYC * CGB;
    const Z = this.MZA * AGR + this.MZB * BGG + this.MZC * CGB;
    const XYZ = CalRGBCS.#tempConvertMatrix1;
    XYZ[0] = X;
    XYZ[1] = Y;
    XYZ[2] = Z;
    const XYZ_Flat = CalRGBCS.#tempConvertMatrix2;
    this.#normalizeWhitePointToFlat(this.whitePoint, XYZ, XYZ_Flat);
    const XYZ_Black = CalRGBCS.#tempConvertMatrix1;
    this.#compensateBlackPoint(this.blackPoint, XYZ_Flat, XYZ_Black);
    const XYZ_D65 = CalRGBCS.#tempConvertMatrix2;
    this.#normalizeWhitePointToD65(CalRGBCS.#FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65);
    const SRGB = CalRGBCS.#tempConvertMatrix1;
    this.#matrixProduct(CalRGBCS.#SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB);
    dest[destOffset] = this.#sRGBTransferFunction(SRGB[0]) * 255;
    dest[destOffset + 1] = this.#sRGBTransferFunction(SRGB[1]) * 255;
    dest[destOffset + 2] = this.#sRGBTransferFunction(SRGB[2]) * 255;
  }
  getRgbItem(src, srcOffset, dest, destOffset) {
    this.#toRgb(src, srcOffset, dest, destOffset, 1);
  }
  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
    const scale = 1 / ((1 << bits) - 1);
    for (let i = 0; i < count; ++i) {
      this.#toRgb(src, srcOffset, dest, destOffset, scale);
      srcOffset += 3;
      destOffset += 3 + alpha01;
    }
  }
  getOutputLength(inputLength, alpha01) {
    return inputLength * (3 + alpha01) / 3 | 0;
  }
}
class LabCS extends ColorSpace {
  constructor(whitePoint, blackPoint, range) {
    super("Lab", 3);
    if (!whitePoint) {
      throw new _util.FormatError("WhitePoint missing - required for color space Lab");
    }
    [this.XW, this.YW, this.ZW] = whitePoint;
    [this.amin, this.amax, this.bmin, this.bmax] = range || [-100, 100, -100, 100];
    [this.XB, this.YB, this.ZB] = blackPoint || [0, 0, 0];
    if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {
      throw new _util.FormatError("Invalid WhitePoint components, no fallback available");
    }
    if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {
      (0, _util.info)("Invalid BlackPoint, falling back to default");
      this.XB = this.YB = this.ZB = 0;
    }
    if (this.amin > this.amax || this.bmin > this.bmax) {
      (0, _util.info)("Invalid Range, falling back to defaults");
      this.amin = -100;
      this.amax = 100;
      this.bmin = -100;
      this.bmax = 100;
    }
  }
  #fn_g(x) {
    return x >= 6 / 29 ? x ** 3 : 108 / 841 * (x - 4 / 29);
  }
  #decode(value, high1, low2, high2) {
    return low2 + value * (high2 - low2) / high1;
  }
  #toRgb(src, srcOffset, maxVal, dest, destOffset) {
    let Ls = src[srcOffset];
    let as = src[srcOffset + 1];
    let bs = src[srcOffset + 2];
    if (maxVal !== false) {
      Ls = this.#decode(Ls, maxVal, 0, 100);
      as = this.#decode(as, maxVal, this.amin, this.amax);
      bs = this.#decode(bs, maxVal, this.bmin, this.bmax);
    }
    if (as > this.amax) {
      as = this.amax;
    } else if (as < this.amin) {
      as = this.amin;
    }
    if (bs > this.bmax) {
      bs = this.bmax;
    } else if (bs < this.bmin) {
      bs = this.bmin;
    }
    const M = (Ls + 16) / 116;
    const L = M + as / 500;
    const N = M - bs / 200;
    const X = this.XW * this.#fn_g(L);
    const Y = this.YW * this.#fn_g(M);
    const Z = this.ZW * this.#fn_g(N);
    let r, g, b;
    if (this.ZW < 1) {
      r = X * 3.1339 + Y * -1.617 + Z * -0.4906;
      g = X * -0.9785 + Y * 1.916 + Z * 0.0333;
      b = X * 0.072 + Y * -0.229 + Z * 1.4057;
    } else {
      r = X * 3.2406 + Y * -1.5372 + Z * -0.4986;
      g = X * -0.9689 + Y * 1.8758 + Z * 0.0415;
      b = X * 0.0557 + Y * -0.204 + Z * 1.057;
    }
    dest[destOffset] = Math.sqrt(r) * 255;
    dest[destOffset + 1] = Math.sqrt(g) * 255;
    dest[destOffset + 2] = Math.sqrt(b) * 255;
  }
  getRgbItem(src, srcOffset, dest, destOffset) {
    this.#toRgb(src, srcOffset, false, dest, destOffset);
  }
  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
    const maxVal = (1 << bits) - 1;
    for (let i = 0; i < count; i++) {
      this.#toRgb(src, srcOffset, maxVal, dest, destOffset);
      srcOffset += 3;
      destOffset += 3 + alpha01;
    }
  }
  getOutputLength(inputLength, alpha01) {
    return inputLength * (3 + alpha01) / 3 | 0;
  }
  isDefaultDecode(decodeMap, bpc) {
    return true;
  }
  get usesZeroToOneRange() {
    return (0, _util.shadow)(this, "usesZeroToOneRange", false);
  }
}

/***/ }),
/* 13 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.PartialEvaluator = exports.EvaluatorPreprocessor = void 0;
var _util = __w_pdfjs_require__(2);
var _cmap = __w_pdfjs_require__(14);
var _primitives = __w_pdfjs_require__(4);
var _fonts = __w_pdfjs_require__(34);
var _encodings = __w_pdfjs_require__(37);
var _standard_fonts = __w_pdfjs_require__(41);
var _pattern = __w_pdfjs_require__(50);
var _xfa_fonts = __w_pdfjs_require__(51);
var _to_unicode_map = __w_pdfjs_require__(42);
var _function = __w_pdfjs_require__(57);
var _parser = __w_pdfjs_require__(16);
var _image_utils = __w_pdfjs_require__(59);
var _stream = __w_pdfjs_require__(8);
var _base_stream = __w_pdfjs_require__(5);
var _bidi = __w_pdfjs_require__(60);
var _colorspace = __w_pdfjs_require__(12);
var _decode_stream = __w_pdfjs_require__(18);
var _fonts_utils = __w_pdfjs_require__(38);
var _font_substitutions = __w_pdfjs_require__(61);
var _glyphlist = __w_pdfjs_require__(39);
var _metrics = __w_pdfjs_require__(45);
var _unicode = __w_pdfjs_require__(40);
var _image_resizer = __w_pdfjs_require__(62);
var _murmurhash = __w_pdfjs_require__(63);
var _operator_list = __w_pdfjs_require__(64);
var _image = __w_pdfjs_require__(65);
const DefaultPartialEvaluatorOptions = Object.freeze({
  maxImageSize: -1,
  disableFontFace: false,
  ignoreErrors: false,
  isEvalSupported: true,
  isOffscreenCanvasSupported: false,
  canvasMaxAreaInBytes: -1,
  fontExtraProperties: false,
  useSystemFonts: true,
  cMapUrl: null,
  standardFontDataUrl: null
});
const PatternType = {
  TILING: 1,
  SHADING: 2
};
const TEXT_CHUNK_BATCH_SIZE = 10;
const deferred = Promise.resolve();
function normalizeBlendMode(value, parsingArray = false) {
  if (Array.isArray(value)) {
    for (const val of value) {
      const maybeBM = normalizeBlendMode(val, true);
      if (maybeBM) {
        return maybeBM;
      }
    }
    (0, _util.warn)(`Unsupported blend mode Array: ${value}`);
    return "source-over";
  }
  if (!(value instanceof _primitives.Name)) {
    if (parsingArray) {
      return null;
    }
    return "source-over";
  }
  switch (value.name) {
    case "Normal":
    case "Compatible":
      return "source-over";
    case "Multiply":
      return "multiply";
    case "Screen":
      return "screen";
    case "Overlay":
      return "overlay";
    case "Darken":
      return "darken";
    case "Lighten":
      return "lighten";
    case "ColorDodge":
      return "color-dodge";
    case "ColorBurn":
      return "color-burn";
    case "HardLight":
      return "hard-light";
    case "SoftLight":
      return "soft-light";
    case "Difference":
      return "difference";
    case "Exclusion":
      return "exclusion";
    case "Hue":
      return "hue";
    case "Saturation":
      return "saturation";
    case "Color":
      return "color";
    case "Luminosity":
      return "luminosity";
  }
  if (parsingArray) {
    return null;
  }
  (0, _util.warn)(`Unsupported blend mode: ${value.name}`);
  return "source-over";
}
function incrementCachedImageMaskCount(data) {
  if (data.fn === _util.OPS.paintImageMaskXObject && data.args[0]?.count > 0) {
    data.args[0].count++;
  }
}
class TimeSlotManager {
  static TIME_SLOT_DURATION_MS = 20;
  static CHECK_TIME_EVERY = 100;
  constructor() {
    this.reset();
  }
  check() {
    if (++this.checked < TimeSlotManager.CHECK_TIME_EVERY) {
      return false;
    }
    this.checked = 0;
    return this.endTime <= Date.now();
  }
  reset() {
    this.endTime = Date.now() + TimeSlotManager.TIME_SLOT_DURATION_MS;
    this.checked = 0;
  }
}
class PartialEvaluator {
  constructor({
    xref,
    handler,
    pageIndex,
    idFactory,
    fontCache,
    builtInCMapCache,
    standardFontDataCache,
    globalImageCache,
    systemFontCache,
    options = null
  }) {
    this.xref = xref;
    this.handler = handler;
    this.pageIndex = pageIndex;
    this.idFactory = idFactory;
    this.fontCache = fontCache;
    this.builtInCMapCache = builtInCMapCache;
    this.standardFontDataCache = standardFontDataCache;
    this.globalImageCache = globalImageCache;
    this.systemFontCache = systemFontCache;
    this.options = options || DefaultPartialEvaluatorOptions;
    this.parsingType3Font = false;
    this._regionalImageCache = new _image_utils.RegionalImageCache();
    this._fetchBuiltInCMapBound = this.fetchBuiltInCMap.bind(this);
    _image_resizer.ImageResizer.setMaxArea(this.options.canvasMaxAreaInBytes);
  }
  get _pdfFunctionFactory() {
    const pdfFunctionFactory = new _function.PDFFunctionFactory({
      xref: this.xref,
      isEvalSupported: this.options.isEvalSupported
    });
    return (0, _util.shadow)(this, "_pdfFunctionFactory", pdfFunctionFactory);
  }
  clone(newOptions = null) {
    const newEvaluator = Object.create(this);
    newEvaluator.options = Object.assign(Object.create(null), this.options, newOptions);
    return newEvaluator;
  }
  hasBlendModes(resources, nonBlendModesSet) {
    if (!(resources instanceof _primitives.Dict)) {
      return false;
    }
    if (resources.objId && nonBlendModesSet.has(resources.objId)) {
      return false;
    }
    const processed = new _primitives.RefSet(nonBlendModesSet);
    if (resources.objId) {
      processed.put(resources.objId);
    }
    const nodes = [resources],
      xref = this.xref;
    while (nodes.length) {
      const node = nodes.shift();
      const graphicStates = node.get("ExtGState");
      if (graphicStates instanceof _primitives.Dict) {
        for (let graphicState of graphicStates.getRawValues()) {
          if (graphicState instanceof _primitives.Ref) {
            if (processed.has(graphicState)) {
              continue;
            }
            try {
              graphicState = xref.fetch(graphicState);
            } catch (ex) {
              processed.put(graphicState);
              (0, _util.info)(`hasBlendModes - ignoring ExtGState: "${ex}".`);
              continue;
            }
          }
          if (!(graphicState instanceof _primitives.Dict)) {
            continue;
          }
          if (graphicState.objId) {
            processed.put(graphicState.objId);
          }
          const bm = graphicState.get("BM");
          if (bm instanceof _primitives.Name) {
            if (bm.name !== "Normal") {
              return true;
            }
            continue;
          }
          if (bm !== undefined && Array.isArray(bm)) {
            for (const element of bm) {
              if (element instanceof _primitives.Name && element.name !== "Normal") {
                return true;
              }
            }
          }
        }
      }
      const xObjects = node.get("XObject");
      if (!(xObjects instanceof _primitives.Dict)) {
        continue;
      }
      for (let xObject of xObjects.getRawValues()) {
        if (xObject instanceof _primitives.Ref) {
          if (processed.has(xObject)) {
            continue;
          }
          try {
            xObject = xref.fetch(xObject);
          } catch (ex) {
            processed.put(xObject);
            (0, _util.info)(`hasBlendModes - ignoring XObject: "${ex}".`);
            continue;
          }
        }
        if (!(xObject instanceof _base_stream.BaseStream)) {
          continue;
        }
        if (xObject.dict.objId) {
          processed.put(xObject.dict.objId);
        }
        const xResources = xObject.dict.get("Resources");
        if (!(xResources instanceof _primitives.Dict)) {
          continue;
        }
        if (xResources.objId && processed.has(xResources.objId)) {
          continue;
        }
        nodes.push(xResources);
        if (xResources.objId) {
          processed.put(xResources.objId);
        }
      }
    }
    for (const ref of processed) {
      nonBlendModesSet.put(ref);
    }
    return false;
  }
  async fetchBuiltInCMap(name) {
    const cachedData = this.builtInCMapCache.get(name);
    if (cachedData) {
      return cachedData;
    }
    let data;
    if (this.options.cMapUrl !== null) {
      const url = `${this.options.cMapUrl}${name}.bcmap`;
      const response = await fetch(url);
      if (!response.ok) {
        throw new Error(`fetchBuiltInCMap: failed to fetch file "${url}" with "${response.statusText}".`);
      }
      data = {
        cMapData: new Uint8Array(await response.arrayBuffer()),
        compressionType: _util.CMapCompressionType.BINARY
      };
    } else {
      data = await this.handler.sendWithPromise("FetchBuiltInCMap", {
        name
      });
    }
    if (data.compressionType !== _util.CMapCompressionType.NONE) {
      this.builtInCMapCache.set(name, data);
    }
    return data;
  }
  async fetchStandardFontData(name) {
    const cachedData = this.standardFontDataCache.get(name);
    if (cachedData) {
      return new _stream.Stream(cachedData);
    }
    if (this.options.useSystemFonts && name !== "Symbol" && name !== "ZapfDingbats") {
      return null;
    }
    const standardFontNameToFileName = (0, _standard_fonts.getFontNameToFileMap)(),
      filename = standardFontNameToFileName[name];
    let data;
    if (this.options.standardFontDataUrl !== null) {
      const url = `${this.options.standardFontDataUrl}${filename}`;
      const response = await fetch(url);
      if (!response.ok) {
        (0, _util.warn)(`fetchStandardFontData: failed to fetch file "${url}" with "${response.statusText}".`);
      } else {
        data = await response.arrayBuffer();
      }
    } else {
      try {
        data = await this.handler.sendWithPromise("FetchStandardFontData", {
          filename
        });
      } catch (e) {
        (0, _util.warn)(`fetchStandardFontData: failed to fetch file "${filename}" with "${e}".`);
      }
    }
    if (!data) {
      return null;
    }
    this.standardFontDataCache.set(name, data);
    return new _stream.Stream(data);
  }
  async buildFormXObject(resources, xobj, smask, operatorList, task, initialState, localColorSpaceCache) {
    const dict = xobj.dict;
    const matrix = dict.getArray("Matrix");
    let bbox = dict.getArray("BBox");
    bbox = Array.isArray(bbox) && bbox.length === 4 ? _util.Util.normalizeRect(bbox) : null;
    let optionalContent, groupOptions;
    if (dict.has("OC")) {
      optionalContent = await this.parseMarkedContentProps(dict.get("OC"), resources);
    }
    if (optionalContent !== undefined) {
      operatorList.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]);
    }
    const group = dict.get("Group");
    if (group) {
      groupOptions = {
        matrix,
        bbox,
        smask,
        isolated: false,
        knockout: false
      };
      const groupSubtype = group.get("S");
      let colorSpace = null;
      if ((0, _primitives.isName)(groupSubtype, "Transparency")) {
        groupOptions.isolated = group.get("I") || false;
        groupOptions.knockout = group.get("K") || false;
        if (group.has("CS")) {
          const cs = group.getRaw("CS");
          const cachedColorSpace = _colorspace.ColorSpace.getCached(cs, this.xref, localColorSpaceCache);
          if (cachedColorSpace) {
            colorSpace = cachedColorSpace;
          } else {
            colorSpace = await this.parseColorSpace({
              cs,
              resources,
              localColorSpaceCache
            });
          }
        }
      }
      if (smask?.backdrop) {
        colorSpace ||= _colorspace.ColorSpace.singletons.rgb;
        smask.backdrop = colorSpace.getRgb(smask.backdrop, 0);
      }
      operatorList.addOp(_util.OPS.beginGroup, [groupOptions]);
    }
    const args = group ? [matrix, null] : [matrix, bbox];
    operatorList.addOp(_util.OPS.paintFormXObjectBegin, args);
    return this.getOperatorList({
      stream: xobj,
      task,
      resources: dict.get("Resources") || resources,
      operatorList,
      initialState
    }).then(function () {
      operatorList.addOp(_util.OPS.paintFormXObjectEnd, []);
      if (group) {
        operatorList.addOp(_util.OPS.endGroup, [groupOptions]);
      }
      if (optionalContent !== undefined) {
        operatorList.addOp(_util.OPS.endMarkedContent, []);
      }
    });
  }
  _sendImgData(objId, imgData, cacheGlobally = false) {
    const transfers = imgData ? [imgData.bitmap || imgData.data.buffer] : null;
    if (this.parsingType3Font || cacheGlobally) {
      return this.handler.send("commonobj", [objId, "Image", imgData], transfers);
    }
    return this.handler.send("obj", [objId, this.pageIndex, "Image", imgData], transfers);
  }
  async buildPaintImageXObject({
    resources,
    image,
    isInline = false,
    operatorList,
    cacheKey,
    localImageCache,
    localColorSpaceCache
  }) {
    const dict = image.dict;
    const imageRef = dict.objId;
    const w = dict.get("W", "Width");
    const h = dict.get("H", "Height");
    if (!(w && typeof w === "number") || !(h && typeof h === "number")) {
      (0, _util.warn)("Image dimensions are missing, or not numbers.");
      return;
    }
    const maxImageSize = this.options.maxImageSize;
    if (maxImageSize !== -1 && w * h > maxImageSize) {
      const msg = "Image exceeded maximum allowed size and was removed.";
      if (this.options.ignoreErrors) {
        (0, _util.warn)(msg);
        return;
      }
      throw new Error(msg);
    }
    let optionalContent;
    if (dict.has("OC")) {
      optionalContent = await this.parseMarkedContentProps(dict.get("OC"), resources);
    }
    const imageMask = dict.get("IM", "ImageMask") || false;
    let imgData, args;
    if (imageMask) {
      const interpolate = dict.get("I", "Interpolate");
      const bitStrideLength = w + 7 >> 3;
      const imgArray = image.getBytes(bitStrideLength * h);
      const decode = dict.getArray("D", "Decode");
      if (this.parsingType3Font) {
        imgData = _image.PDFImage.createRawMask({
          imgArray,
          width: w,
          height: h,
          imageIsFromDecodeStream: image instanceof _decode_stream.DecodeStream,
          inverseDecode: decode?.[0] > 0,
          interpolate
        });
        imgData.cached = !!cacheKey;
        args = [imgData];
        operatorList.addImageOps(_util.OPS.paintImageMaskXObject, args, optionalContent);
        if (cacheKey) {
          const cacheData = {
            fn: _util.OPS.paintImageMaskXObject,
            args,
            optionalContent
          };
          localImageCache.set(cacheKey, imageRef, cacheData);
          if (imageRef) {
            this._regionalImageCache.set(null, imageRef, cacheData);
          }
        }
        return;
      }
      imgData = await _image.PDFImage.createMask({
        imgArray,
        width: w,
        height: h,
        imageIsFromDecodeStream: image instanceof _decode_stream.DecodeStream,
        inverseDecode: decode?.[0] > 0,
        interpolate,
        isOffscreenCanvasSupported: this.options.isOffscreenCanvasSupported
      });
      if (imgData.isSingleOpaquePixel) {
        operatorList.addImageOps(_util.OPS.paintSolidColorImageMask, [], optionalContent);
        if (cacheKey) {
          const cacheData = {
            fn: _util.OPS.paintSolidColorImageMask,
            args: [],
            optionalContent
          };
          localImageCache.set(cacheKey, imageRef, cacheData);
          if (imageRef) {
            this._regionalImageCache.set(null, imageRef, cacheData);
          }
        }
        return;
      }
      const objId = `mask_${this.idFactory.createObjId()}`;
      operatorList.addDependency(objId);
      this._sendImgData(objId, imgData);
      args = [{
        data: objId,
        width: imgData.width,
        height: imgData.height,
        interpolate: imgData.interpolate,
        count: 1
      }];
      operatorList.addImageOps(_util.OPS.paintImageMaskXObject, args, optionalContent);
      if (cacheKey) {
        const cacheData = {
          fn: _util.OPS.paintImageMaskXObject,
          args,
          optionalContent
        };
        localImageCache.set(cacheKey, imageRef, cacheData);
        if (imageRef) {
          this._regionalImageCache.set(null, imageRef, cacheData);
        }
      }
      return;
    }
    const SMALL_IMAGE_DIMENSIONS = 200;
    if (isInline && !dict.has("SMask") && !dict.has("Mask") && w + h < SMALL_IMAGE_DIMENSIONS) {
      const imageObj = new _image.PDFImage({
        xref: this.xref,
        res: resources,
        image,
        isInline,
        pdfFunctionFactory: this._pdfFunctionFactory,
        localColorSpaceCache
      });
      imgData = await imageObj.createImageData(true, false);
      operatorList.isOffscreenCanvasSupported = this.options.isOffscreenCanvasSupported;
      operatorList.addImageOps(_util.OPS.paintInlineImageXObject, [imgData], optionalContent);
      return;
    }
    let objId = `img_${this.idFactory.createObjId()}`,
      cacheGlobally = false;
    if (this.parsingType3Font) {
      objId = `${this.idFactory.getDocId()}_type3_${objId}`;
    } else if (imageRef) {
      cacheGlobally = this.globalImageCache.shouldCache(imageRef, this.pageIndex);
      if (cacheGlobally) {
        objId = `${this.idFactory.getDocId()}_${objId}`;
      }
    }
    operatorList.addDependency(objId);
    args = [objId, w, h];
    _image.PDFImage.buildImage({
      xref: this.xref,
      res: resources,
      image,
      isInline,
      pdfFunctionFactory: this._pdfFunctionFactory,
      localColorSpaceCache
    }).then(async imageObj => {
      imgData = await imageObj.createImageData(false, this.options.isOffscreenCanvasSupported);
      if (cacheKey && imageRef && cacheGlobally) {
        const length = imgData.bitmap ? imgData.width * imgData.height * 4 : imgData.data.length;
        this.globalImageCache.addByteSize(imageRef, length);
      }
      return this._sendImgData(objId, imgData, cacheGlobally);
    }).catch(reason => {
      (0, _util.warn)(`Unable to decode image "${objId}": "${reason}".`);
      return this._sendImgData(objId, null, cacheGlobally);
    });
    operatorList.addImageOps(_util.OPS.paintImageXObject, args, optionalContent);
    if (cacheKey) {
      const cacheData = {
        fn: _util.OPS.paintImageXObject,
        args,
        optionalContent
      };
      localImageCache.set(cacheKey, imageRef, cacheData);
      if (imageRef) {
        this._regionalImageCache.set(null, imageRef, cacheData);
        if (cacheGlobally) {
          (0, _util.assert)(!isInline, "Cannot cache an inline image globally.");
          this.globalImageCache.setData(imageRef, {
            objId,
            fn: _util.OPS.paintImageXObject,
            args,
            optionalContent,
            byteSize: 0
          });
        }
      }
    }
  }
  handleSMask(smask, resources, operatorList, task, stateManager, localColorSpaceCache) {
    const smaskContent = smask.get("G");
    const smaskOptions = {
      subtype: smask.get("S").name,
      backdrop: smask.get("BC")
    };
    const transferObj = smask.get("TR");
    if ((0, _function.isPDFFunction)(transferObj)) {
      const transferFn = this._pdfFunctionFactory.create(transferObj);
      const transferMap = new Uint8Array(256);
      const tmp = new Float32Array(1);
      for (let i = 0; i < 256; i++) {
        tmp[0] = i / 255;
        transferFn(tmp, 0, tmp, 0);
        transferMap[i] = tmp[0] * 255 | 0;
      }
      smaskOptions.transferMap = transferMap;
    }
    return this.buildFormXObject(resources, smaskContent, smaskOptions, operatorList, task, stateManager.state.clone(), localColorSpaceCache);
  }
  handleTransferFunction(tr) {
    let transferArray;
    if (Array.isArray(tr)) {
      transferArray = tr;
    } else if ((0, _function.isPDFFunction)(tr)) {
      transferArray = [tr];
    } else {
      return null;
    }
    const transferMaps = [];
    let numFns = 0,
      numEffectfulFns = 0;
    for (const entry of transferArray) {
      const transferObj = this.xref.fetchIfRef(entry);
      numFns++;
      if ((0, _primitives.isName)(transferObj, "Identity")) {
        transferMaps.push(null);
        continue;
      } else if (!(0, _function.isPDFFunction)(transferObj)) {
        return null;
      }
      const transferFn = this._pdfFunctionFactory.create(transferObj);
      const transferMap = new Uint8Array(256),
        tmp = new Float32Array(1);
      for (let j = 0; j < 256; j++) {
        tmp[0] = j / 255;
        transferFn(tmp, 0, tmp, 0);
        transferMap[j] = tmp[0] * 255 | 0;
      }
      transferMaps.push(transferMap);
      numEffectfulFns++;
    }
    if (!(numFns === 1 || numFns === 4)) {
      return null;
    }
    if (numEffectfulFns === 0) {
      return null;
    }
    return transferMaps;
  }
  handleTilingType(fn, color, resources, pattern, patternDict, operatorList, task, localTilingPatternCache) {
    const tilingOpList = new _operator_list.OperatorList();
    const patternResources = _primitives.Dict.merge({
      xref: this.xref,
      dictArray: [patternDict.get("Resources"), resources]
    });
    return this.getOperatorList({
      stream: pattern,
      task,
      resources: patternResources,
      operatorList: tilingOpList
    }).then(function () {
      const operatorListIR = tilingOpList.getIR();
      const tilingPatternIR = (0, _pattern.getTilingPatternIR)(operatorListIR, patternDict, color);
      operatorList.addDependencies(tilingOpList.dependencies);
      operatorList.addOp(fn, tilingPatternIR);
      if (patternDict.objId) {
        localTilingPatternCache.set(null, patternDict.objId, {
          operatorListIR,
          dict: patternDict
        });
      }
    }).catch(reason => {
      if (reason instanceof _util.AbortException) {
        return;
      }
      if (this.options.ignoreErrors) {
        (0, _util.warn)(`handleTilingType - ignoring pattern: "${reason}".`);
        return;
      }
      throw reason;
    });
  }
  handleSetFont(resources, fontArgs, fontRef, operatorList, task, state, fallbackFontDict = null, cssFontInfo = null) {
    const fontName = fontArgs?.[0] instanceof _primitives.Name ? fontArgs[0].name : null;
    return this.loadFont(fontName, fontRef, resources, fallbackFontDict, cssFontInfo).then(translated => {
      if (!translated.font.isType3Font) {
        return translated;
      }
      return translated.loadType3Data(this, resources, task).then(function () {
        operatorList.addDependencies(translated.type3Dependencies);
        return translated;
      }).catch(reason => {
        return new TranslatedFont({
          loadedName: "g_font_error",
          font: new _fonts.ErrorFont(`Type3 font load error: ${reason}`),
          dict: translated.font,
          evaluatorOptions: this.options
        });
      });
    }).then(translated => {
      state.font = translated.font;
      translated.send(this.handler);
      return translated.loadedName;
    });
  }
  handleText(chars, state) {
    const font = state.font;
    const glyphs = font.charsToGlyphs(chars);
    if (font.data) {
      const isAddToPathSet = !!(state.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);
      if (isAddToPathSet || state.fillColorSpace.name === "Pattern" || font.disableFontFace || this.options.disableFontFace) {
        PartialEvaluator.buildFontPaths(font, glyphs, this.handler, this.options);
      }
    }
    return glyphs;
  }
  ensureStateFont(state) {
    if (state.font) {
      return;
    }
    const reason = new _util.FormatError("Missing setFont (Tf) operator before text rendering operator.");
    if (this.options.ignoreErrors) {
      (0, _util.warn)(`ensureStateFont: "${reason}".`);
      return;
    }
    throw reason;
  }
  async setGState({
    resources,
    gState,
    operatorList,
    cacheKey,
    task,
    stateManager,
    localGStateCache,
    localColorSpaceCache
  }) {
    const gStateRef = gState.objId;
    let isSimpleGState = true;
    const gStateObj = [];
    let promise = Promise.resolve();
    for (const key of gState.getKeys()) {
      const value = gState.get(key);
      switch (key) {
        case "Type":
          break;
        case "LW":
        case "LC":
        case "LJ":
        case "ML":
        case "D":
        case "RI":
        case "FL":
        case "CA":
        case "ca":
          gStateObj.push([key, value]);
          break;
        case "Font":
          isSimpleGState = false;
          promise = promise.then(() => {
            return this.handleSetFont(resources, null, value[0], operatorList, task, stateManager.state).then(function (loadedName) {
              operatorList.addDependency(loadedName);
              gStateObj.push([key, [loadedName, value[1]]]);
            });
          });
          break;
        case "BM":
          gStateObj.push([key, normalizeBlendMode(value)]);
          break;
        case "SMask":
          if ((0, _primitives.isName)(value, "None")) {
            gStateObj.push([key, false]);
            break;
          }
          if (value instanceof _primitives.Dict) {
            isSimpleGState = false;
            promise = promise.then(() => {
              return this.handleSMask(value, resources, operatorList, task, stateManager, localColorSpaceCache);
            });
            gStateObj.push([key, true]);
          } else {
            (0, _util.warn)("Unsupported SMask type");
          }
          break;
        case "TR":
          const transferMaps = this.handleTransferFunction(value);
          gStateObj.push([key, transferMaps]);
          break;
        case "OP":
        case "op":
        case "OPM":
        case "BG":
        case "BG2":
        case "UCR":
        case "UCR2":
        case "TR2":
        case "HT":
        case "SM":
        case "SA":
        case "AIS":
        case "TK":
          (0, _util.info)("graphic state operator " + key);
          break;
        default:
          (0, _util.info)("Unknown graphic state operator " + key);
          break;
      }
    }
    return promise.then(function () {
      if (gStateObj.length > 0) {
        operatorList.addOp(_util.OPS.setGState, [gStateObj]);
      }
      if (isSimpleGState) {
        localGStateCache.set(cacheKey, gStateRef, gStateObj);
      }
    });
  }
  loadFont(fontName, font, resources, fallbackFontDict = null, cssFontInfo = null) {
    const errorFont = async () => {
      return new TranslatedFont({
        loadedName: "g_font_error",
        font: new _fonts.ErrorFont(`Font "${fontName}" is not available.`),
        dict: font,
        evaluatorOptions: this.options
      });
    };
    let fontRef;
    if (font) {
      if (font instanceof _primitives.Ref) {
        fontRef = font;
      }
    } else {
      const fontRes = resources.get("Font");
      if (fontRes) {
        fontRef = fontRes.getRaw(fontName);
      }
    }
    if (fontRef) {
      if (this.parsingType3Font && this.type3FontRefs.has(fontRef)) {
        return errorFont();
      }
      if (this.fontCache.has(fontRef)) {
        return this.fontCache.get(fontRef);
      }
      font = this.xref.fetchIfRef(fontRef);
    }
    if (!(font instanceof _primitives.Dict)) {
      if (!this.options.ignoreErrors && !this.parsingType3Font) {
        (0, _util.warn)(`Font "${fontName}" is not available.`);
        return errorFont();
      }
      (0, _util.warn)(`Font "${fontName}" is not available -- attempting to fallback to a default font.`);
      font = fallbackFontDict || PartialEvaluator.fallbackFontDict;
    }
    if (font.cacheKey && this.fontCache.has(font.cacheKey)) {
      return this.fontCache.get(font.cacheKey);
    }
    const fontCapability = new _util.PromiseCapability();
    let preEvaluatedFont;
    try {
      preEvaluatedFont = this.preEvaluateFont(font);
      preEvaluatedFont.cssFontInfo = cssFontInfo;
    } catch (reason) {
      (0, _util.warn)(`loadFont - preEvaluateFont failed: "${reason}".`);
      return errorFont();
    }
    const {
      descriptor,
      hash
    } = preEvaluatedFont;
    const fontRefIsRef = fontRef instanceof _primitives.Ref;
    let fontID;
    if (hash && descriptor instanceof _primitives.Dict) {
      const fontAliases = descriptor.fontAliases ||= Object.create(null);
      if (fontAliases[hash]) {
        const aliasFontRef = fontAliases[hash].aliasRef;
        if (fontRefIsRef && aliasFontRef && this.fontCache.has(aliasFontRef)) {
          this.fontCache.putAlias(fontRef, aliasFontRef);
          return this.fontCache.get(fontRef);
        }
      } else {
        fontAliases[hash] = {
          fontID: this.idFactory.createFontId()
        };
      }
      if (fontRefIsRef) {
        fontAliases[hash].aliasRef = fontRef;
      }
      fontID = fontAliases[hash].fontID;
    } else {
      fontID = this.idFactory.createFontId();
    }
    (0, _util.assert)(fontID?.startsWith("f"), 'The "fontID" must be (correctly) defined.');
    if (fontRefIsRef) {
      this.fontCache.put(fontRef, fontCapability.promise);
    } else {
      font.cacheKey = `cacheKey_${fontID}`;
      this.fontCache.put(font.cacheKey, fontCapability.promise);
    }
    font.loadedName = `${this.idFactory.getDocId()}_${fontID}`;
    this.translateFont(preEvaluatedFont).then(translatedFont => {
      fontCapability.resolve(new TranslatedFont({
        loadedName: font.loadedName,
        font: translatedFont,
        dict: font,
        evaluatorOptions: this.options
      }));
    }).catch(reason => {
      (0, _util.warn)(`loadFont - translateFont failed: "${reason}".`);
      fontCapability.resolve(new TranslatedFont({
        loadedName: font.loadedName,
        font: new _fonts.ErrorFont(reason instanceof Error ? reason.message : reason),
        dict: font,
        evaluatorOptions: this.options
      }));
    });
    return fontCapability.promise;
  }
  buildPath(operatorList, fn, args, parsingText = false) {
    const lastIndex = operatorList.length - 1;
    if (!args) {
      args = [];
    }
    if (lastIndex < 0 || operatorList.fnArray[lastIndex] !== _util.OPS.constructPath) {
      if (parsingText) {
        (0, _util.warn)(`Encountered path operator "${fn}" inside of a text object.`);
        operatorList.addOp(_util.OPS.save, null);
      }
      let minMax;
      switch (fn) {
        case _util.OPS.rectangle:
          const x = args[0] + args[2];
          const y = args[1] + args[3];
          minMax = [Math.min(args[0], x), Math.max(args[0], x), Math.min(args[1], y), Math.max(args[1], y)];
          break;
        case _util.OPS.moveTo:
        case _util.OPS.lineTo:
          minMax = [args[0], args[0], args[1], args[1]];
          break;
        default:
          minMax = [Infinity, -Infinity, Infinity, -Infinity];
          break;
      }
      operatorList.addOp(_util.OPS.constructPath, [[fn], args, minMax]);
      if (parsingText) {
        operatorList.addOp(_util.OPS.restore, null);
      }
    } else {
      const opArgs = operatorList.argsArray[lastIndex];
      opArgs[0].push(fn);
      opArgs[1].push(...args);
      const minMax = opArgs[2];
      switch (fn) {
        case _util.OPS.rectangle:
          const x = args[0] + args[2];
          const y = args[1] + args[3];
          minMax[0] = Math.min(minMax[0], args[0], x);
          minMax[1] = Math.max(minMax[1], args[0], x);
          minMax[2] = Math.min(minMax[2], args[1], y);
          minMax[3] = Math.max(minMax[3], args[1], y);
          break;
        case _util.OPS.moveTo:
        case _util.OPS.lineTo:
          minMax[0] = Math.min(minMax[0], args[0]);
          minMax[1] = Math.max(minMax[1], args[0]);
          minMax[2] = Math.min(minMax[2], args[1]);
          minMax[3] = Math.max(minMax[3], args[1]);
          break;
      }
    }
  }
  parseColorSpace({
    cs,
    resources,
    localColorSpaceCache
  }) {
    return _colorspace.ColorSpace.parseAsync({
      cs,
      xref: this.xref,
      resources,
      pdfFunctionFactory: this._pdfFunctionFactory,
      localColorSpaceCache
    }).catch(reason => {
      if (reason instanceof _util.AbortException) {
        return null;
      }
      if (this.options.ignoreErrors) {
        (0, _util.warn)(`parseColorSpace - ignoring ColorSpace: "${reason}".`);
        return null;
      }
      throw reason;
    });
  }
  parseShading({
    shading,
    resources,
    localColorSpaceCache,
    localShadingPatternCache
  }) {
    let id = localShadingPatternCache.get(shading);
    if (!id) {
      var shadingFill = _pattern.Pattern.parseShading(shading, this.xref, resources, this._pdfFunctionFactory, localColorSpaceCache);
      const patternIR = shadingFill.getIR();
      id = `pattern_${this.idFactory.createObjId()}`;
      if (this.parsingType3Font) {
        id = `${this.idFactory.getDocId()}_type3_${id}`;
      }
      localShadingPatternCache.set(shading, id);
      if (this.parsingType3Font) {
        this.handler.send("commonobj", [id, "Pattern", patternIR]);
      } else {
        this.handler.send("obj", [id, this.pageIndex, "Pattern", patternIR]);
      }
    }
    return id;
  }
  handleColorN(operatorList, fn, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache) {
    const patternName = args.pop();
    if (patternName instanceof _primitives.Name) {
      const rawPattern = patterns.getRaw(patternName.name);
      const localTilingPattern = rawPattern instanceof _primitives.Ref && localTilingPatternCache.getByRef(rawPattern);
      if (localTilingPattern) {
        try {
          const color = cs.base ? cs.base.getRgb(args, 0) : null;
          const tilingPatternIR = (0, _pattern.getTilingPatternIR)(localTilingPattern.operatorListIR, localTilingPattern.dict, color);
          operatorList.addOp(fn, tilingPatternIR);
          return undefined;
        } catch {}
      }
      const pattern = this.xref.fetchIfRef(rawPattern);
      if (pattern) {
        const dict = pattern instanceof _base_stream.BaseStream ? pattern.dict : pattern;
        const typeNum = dict.get("PatternType");
        if (typeNum === PatternType.TILING) {
          const color = cs.base ? cs.base.getRgb(args, 0) : null;
          return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task, localTilingPatternCache);
        } else if (typeNum === PatternType.SHADING) {
          const shading = dict.get("Shading");
          const matrix = dict.getArray("Matrix");
          const objId = this.parseShading({
            shading,
            resources,
            localColorSpaceCache,
            localShadingPatternCache
          });
          operatorList.addOp(fn, ["Shading", objId, matrix]);
          return undefined;
        }
        throw new _util.FormatError(`Unknown PatternType: ${typeNum}`);
      }
    }
    throw new _util.FormatError(`Unknown PatternName: ${patternName}`);
  }
  _parseVisibilityExpression(array, nestingCounter, currentResult) {
    const MAX_NESTING = 10;
    if (++nestingCounter > MAX_NESTING) {
      (0, _util.warn)("Visibility expression is too deeply nested");
      return;
    }
    const length = array.length;
    const operator = this.xref.fetchIfRef(array[0]);
    if (length < 2 || !(operator instanceof _primitives.Name)) {
      (0, _util.warn)("Invalid visibility expression");
      return;
    }
    switch (operator.name) {
      case "And":
      case "Or":
      case "Not":
        currentResult.push(operator.name);
        break;
      default:
        (0, _util.warn)(`Invalid operator ${operator.name} in visibility expression`);
        return;
    }
    for (let i = 1; i < length; i++) {
      const raw = array[i];
      const object = this.xref.fetchIfRef(raw);
      if (Array.isArray(object)) {
        const nestedResult = [];
        currentResult.push(nestedResult);
        this._parseVisibilityExpression(object, nestingCounter, nestedResult);
      } else if (raw instanceof _primitives.Ref) {
        currentResult.push(raw.toString());
      }
    }
  }
  async parseMarkedContentProps(contentProperties, resources) {
    let optionalContent;
    if (contentProperties instanceof _primitives.Name) {
      const properties = resources.get("Properties");
      optionalContent = properties.get(contentProperties.name);
    } else if (contentProperties instanceof _primitives.Dict) {
      optionalContent = contentProperties;
    } else {
      throw new _util.FormatError("Optional content properties malformed.");
    }
    const optionalContentType = optionalContent.get("Type")?.name;
    if (optionalContentType === "OCG") {
      return {
        type: optionalContentType,
        id: optionalContent.objId
      };
    } else if (optionalContentType === "OCMD") {
      const expression = optionalContent.get("VE");
      if (Array.isArray(expression)) {
        const result = [];
        this._parseVisibilityExpression(expression, 0, result);
        if (result.length > 0) {
          return {
            type: "OCMD",
            expression: result
          };
        }
      }
      const optionalContentGroups = optionalContent.get("OCGs");
      if (Array.isArray(optionalContentGroups) || optionalContentGroups instanceof _primitives.Dict) {
        const groupIds = [];
        if (Array.isArray(optionalContentGroups)) {
          for (const ocg of optionalContentGroups) {
            groupIds.push(ocg.toString());
          }
        } else {
          groupIds.push(optionalContentGroups.objId);
        }
        return {
          type: optionalContentType,
          ids: groupIds,
          policy: optionalContent.get("P") instanceof _primitives.Name ? optionalContent.get("P").name : null,
          expression: null
        };
      } else if (optionalContentGroups instanceof _primitives.Ref) {
        return {
          type: optionalContentType,
          id: optionalContentGroups.toString()
        };
      }
    }
    return null;
  }
  getOperatorList({
    stream,
    task,
    resources,
    operatorList,
    initialState = null,
    fallbackFontDict = null
  }) {
    resources ||= _primitives.Dict.empty;
    initialState ||= new EvalState();
    if (!operatorList) {
      throw new Error('getOperatorList: missing "operatorList" parameter');
    }
    const self = this;
    const xref = this.xref;
    let parsingText = false;
    const localImageCache = new _image_utils.LocalImageCache();
    const localColorSpaceCache = new _image_utils.LocalColorSpaceCache();
    const localGStateCache = new _image_utils.LocalGStateCache();
    const localTilingPatternCache = new _image_utils.LocalTilingPatternCache();
    const localShadingPatternCache = new Map();
    const xobjs = resources.get("XObject") || _primitives.Dict.empty;
    const patterns = resources.get("Pattern") || _primitives.Dict.empty;
    const stateManager = new StateManager(initialState);
    const preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);
    const timeSlotManager = new TimeSlotManager();
    function closePendingRestoreOPS(argument) {
      for (let i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) {
        operatorList.addOp(_util.OPS.restore, []);
      }
    }
    return new Promise(function promiseBody(resolve, reject) {
      const next = function (promise) {
        Promise.all([promise, operatorList.ready]).then(function () {
          try {
            promiseBody(resolve, reject);
          } catch (ex) {
            reject(ex);
          }
        }, reject);
      };
      task.ensureNotTerminated();
      timeSlotManager.reset();
      const operation = {};
      let stop, i, ii, cs, name, isValidName;
      while (!(stop = timeSlotManager.check())) {
        operation.args = null;
        if (!preprocessor.read(operation)) {
          break;
        }
        let args = operation.args;
        let fn = operation.fn;
        switch (fn | 0) {
          case _util.OPS.paintXObject:
            isValidName = args[0] instanceof _primitives.Name;
            name = args[0].name;
            if (isValidName) {
              const localImage = localImageCache.getByName(name);
              if (localImage) {
                operatorList.addImageOps(localImage.fn, localImage.args, localImage.optionalContent);
                incrementCachedImageMaskCount(localImage);
                args = null;
                continue;
              }
            }
            next(new Promise(function (resolveXObject, rejectXObject) {
              if (!isValidName) {
                throw new _util.FormatError("XObject must be referred to by name.");
              }
              let xobj = xobjs.getRaw(name);
              if (xobj instanceof _primitives.Ref) {
                const localImage = localImageCache.getByRef(xobj) || self._regionalImageCache.getByRef(xobj);
                if (localImage) {
                  operatorList.addImageOps(localImage.fn, localImage.args, localImage.optionalContent);
                  incrementCachedImageMaskCount(localImage);
                  resolveXObject();
                  return;
                }
                const globalImage = self.globalImageCache.getData(xobj, self.pageIndex);
                if (globalImage) {
                  operatorList.addDependency(globalImage.objId);
                  operatorList.addImageOps(globalImage.fn, globalImage.args, globalImage.optionalContent);
                  resolveXObject();
                  return;
                }
                xobj = xref.fetch(xobj);
              }
              if (!(xobj instanceof _base_stream.BaseStream)) {
                throw new _util.FormatError("XObject should be a stream");
              }
              const type = xobj.dict.get("Subtype");
              if (!(type instanceof _primitives.Name)) {
                throw new _util.FormatError("XObject should have a Name subtype");
              }
              if (type.name === "Form") {
                stateManager.save();
                self.buildFormXObject(resources, xobj, null, operatorList, task, stateManager.state.clone(), localColorSpaceCache).then(function () {
                  stateManager.restore();
                  resolveXObject();
                }, rejectXObject);
                return;
              } else if (type.name === "Image") {
                self.buildPaintImageXObject({
                  resources,
                  image: xobj,
                  operatorList,
                  cacheKey: name,
                  localImageCache,
                  localColorSpaceCache
                }).then(resolveXObject, rejectXObject);
                return;
              } else if (type.name === "PS") {
                (0, _util.info)("Ignored XObject subtype PS");
              } else {
                throw new _util.FormatError(`Unhandled XObject subtype ${type.name}`);
              }
              resolveXObject();
            }).catch(function (reason) {
              if (reason instanceof _util.AbortException) {
                return;
              }
              if (self.options.ignoreErrors) {
                (0, _util.warn)(`getOperatorList - ignoring XObject: "${reason}".`);
                return;
              }
              throw reason;
            }));
            return;
          case _util.OPS.setFont:
            var fontSize = args[1];
            next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state, fallbackFontDict).then(function (loadedName) {
              operatorList.addDependency(loadedName);
              operatorList.addOp(_util.OPS.setFont, [loadedName, fontSize]);
            }));
            return;
          case _util.OPS.beginText:
            parsingText = true;
            break;
          case _util.OPS.endText:
            parsingText = false;
            break;
          case _util.OPS.endInlineImage:
            var cacheKey = args[0].cacheKey;
            if (cacheKey) {
              const localImage = localImageCache.getByName(cacheKey);
              if (localImage) {
                operatorList.addImageOps(localImage.fn, localImage.args, localImage.optionalContent);
                incrementCachedImageMaskCount(localImage);
                args = null;
                continue;
              }
            }
            next(self.buildPaintImageXObject({
              resources,
              image: args[0],
              isInline: true,
              operatorList,
              cacheKey,
              localImageCache,
              localColorSpaceCache
            }));
            return;
          case _util.OPS.showText:
            if (!stateManager.state.font) {
              self.ensureStateFont(stateManager.state);
              continue;
            }
            args[0] = self.handleText(args[0], stateManager.state);
            break;
          case _util.OPS.showSpacedText:
            if (!stateManager.state.font) {
              self.ensureStateFont(stateManager.state);
              continue;
            }
            var combinedGlyphs = [];
            var state = stateManager.state;
            for (const arrItem of args[0]) {
              if (typeof arrItem === "string") {
                combinedGlyphs.push(...self.handleText(arrItem, state));
              } else if (typeof arrItem === "number") {
                combinedGlyphs.push(arrItem);
              }
            }
            args[0] = combinedGlyphs;
            fn = _util.OPS.showText;
            break;
          case _util.OPS.nextLineShowText:
            if (!stateManager.state.font) {
              self.ensureStateFont(stateManager.state);
              continue;
            }
            operatorList.addOp(_util.OPS.nextLine);
            args[0] = self.handleText(args[0], stateManager.state);
            fn = _util.OPS.showText;
            break;
          case _util.OPS.nextLineSetSpacingShowText:
            if (!stateManager.state.font) {
              self.ensureStateFont(stateManager.state);
              continue;
            }
            operatorList.addOp(_util.OPS.nextLine);
            operatorList.addOp(_util.OPS.setWordSpacing, [args.shift()]);
            operatorList.addOp(_util.OPS.setCharSpacing, [args.shift()]);
            args[0] = self.handleText(args[0], stateManager.state);
            fn = _util.OPS.showText;
            break;
          case _util.OPS.setTextRenderingMode:
            stateManager.state.textRenderingMode = args[0];
            break;
          case _util.OPS.setFillColorSpace:
            {
              const cachedColorSpace = _colorspace.ColorSpace.getCached(args[0], xref, localColorSpaceCache);
              if (cachedColorSpace) {
                stateManager.state.fillColorSpace = cachedColorSpace;
                continue;
              }
              next(self.parseColorSpace({
                cs: args[0],
                resources,
                localColorSpaceCache
              }).then(function (colorSpace) {
                if (colorSpace) {
                  stateManager.state.fillColorSpace = colorSpace;
                }
              }));
              return;
            }
          case _util.OPS.setStrokeColorSpace:
            {
              const cachedColorSpace = _colorspace.ColorSpace.getCached(args[0], xref, localColorSpaceCache);
              if (cachedColorSpace) {
                stateManager.state.strokeColorSpace = cachedColorSpace;
                continue;
              }
              next(self.parseColorSpace({
                cs: args[0],
                resources,
                localColorSpaceCache
              }).then(function (colorSpace) {
                if (colorSpace) {
                  stateManager.state.strokeColorSpace = colorSpace;
                }
              }));
              return;
            }
          case _util.OPS.setFillColor:
            cs = stateManager.state.fillColorSpace;
            args = cs.getRgb(args, 0);
            fn = _util.OPS.setFillRGBColor;
            break;
          case _util.OPS.setStrokeColor:
            cs = stateManager.state.strokeColorSpace;
            args = cs.getRgb(args, 0);
            fn = _util.OPS.setStrokeRGBColor;
            break;
          case _util.OPS.setFillGray:
            stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.gray;
            args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0);
            fn = _util.OPS.setFillRGBColor;
            break;
          case _util.OPS.setStrokeGray:
            stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.gray;
            args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0);
            fn = _util.OPS.setStrokeRGBColor;
            break;
          case _util.OPS.setFillCMYKColor:
            stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.cmyk;
            args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0);
            fn = _util.OPS.setFillRGBColor;
            break;
          case _util.OPS.setStrokeCMYKColor:
            stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.cmyk;
            args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0);
            fn = _util.OPS.setStrokeRGBColor;
            break;
          case _util.OPS.setFillRGBColor:
            stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.rgb;
            args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0);
            break;
          case _util.OPS.setStrokeRGBColor:
            stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.rgb;
            args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0);
            break;
          case _util.OPS.setFillColorN:
            cs = stateManager.state.fillColorSpace;
            if (cs.name === "Pattern") {
              next(self.handleColorN(operatorList, _util.OPS.setFillColorN, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache));
              return;
            }
            args = cs.getRgb(args, 0);
            fn = _util.OPS.setFillRGBColor;
            break;
          case _util.OPS.setStrokeColorN:
            cs = stateManager.state.strokeColorSpace;
            if (cs.name === "Pattern") {
              next(self.handleColorN(operatorList, _util.OPS.setStrokeColorN, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache));
              return;
            }
            args = cs.getRgb(args, 0);
            fn = _util.OPS.setStrokeRGBColor;
            break;
          case _util.OPS.shadingFill:
            var shadingRes = resources.get("Shading");
            if (!shadingRes) {
              throw new _util.FormatError("No shading resource found");
            }
            var shading = shadingRes.get(args[0].name);
            if (!shading) {
              throw new _util.FormatError("No shading object found");
            }
            const patternId = self.parseShading({
              shading,
              resources,
              localColorSpaceCache,
              localShadingPatternCache
            });
            args = [patternId];
            fn = _util.OPS.shadingFill;
            break;
          case _util.OPS.setGState:
            isValidName = args[0] instanceof _primitives.Name;
            name = args[0].name;
            if (isValidName) {
              const localGStateObj = localGStateCache.getByName(name);
              if (localGStateObj) {
                if (localGStateObj.length > 0) {
                  operatorList.addOp(_util.OPS.setGState, [localGStateObj]);
                }
                args = null;
                continue;
              }
            }
            next(new Promise(function (resolveGState, rejectGState) {
              if (!isValidName) {
                throw new _util.FormatError("GState must be referred to by name.");
              }
              const extGState = resources.get("ExtGState");
              if (!(extGState instanceof _primitives.Dict)) {
                throw new _util.FormatError("ExtGState should be a dictionary.");
              }
              const gState = extGState.get(name);
              if (!(gState instanceof _primitives.Dict)) {
                throw new _util.FormatError("GState should be a dictionary.");
              }
              self.setGState({
                resources,
                gState,
                operatorList,
                cacheKey: name,
                task,
                stateManager,
                localGStateCache,
                localColorSpaceCache
              }).then(resolveGState, rejectGState);
            }).catch(function (reason) {
              if (reason instanceof _util.AbortException) {
                return;
              }
              if (self.options.ignoreErrors) {
                (0, _util.warn)(`getOperatorList - ignoring ExtGState: "${reason}".`);
                return;
              }
              throw reason;
            }));
            return;
          case _util.OPS.moveTo:
          case _util.OPS.lineTo:
          case _util.OPS.curveTo:
          case _util.OPS.curveTo2:
          case _util.OPS.curveTo3:
          case _util.OPS.closePath:
          case _util.OPS.rectangle:
            self.buildPath(operatorList, fn, args, parsingText);
            continue;
          case _util.OPS.markPoint:
          case _util.OPS.markPointProps:
          case _util.OPS.beginCompat:
          case _util.OPS.endCompat:
            continue;
          case _util.OPS.beginMarkedContentProps:
            if (!(args[0] instanceof _primitives.Name)) {
              (0, _util.warn)(`Expected name for beginMarkedContentProps arg0=${args[0]}`);
              continue;
            }
            if (args[0].name === "OC") {
              next(self.parseMarkedContentProps(args[1], resources).then(data => {
                operatorList.addOp(_util.OPS.beginMarkedContentProps, ["OC", data]);
              }).catch(reason => {
                if (reason instanceof _util.AbortException) {
                  return;
                }
                if (self.options.ignoreErrors) {
                  (0, _util.warn)(`getOperatorList - ignoring beginMarkedContentProps: "${reason}".`);
                  return;
                }
                throw reason;
              }));
              return;
            }
            args = [args[0].name, args[1] instanceof _primitives.Dict ? args[1].get("MCID") : null];
            break;
          case _util.OPS.beginMarkedContent:
          case _util.OPS.endMarkedContent:
          default:
            if (args !== null) {
              for (i = 0, ii = args.length; i < ii; i++) {
                if (args[i] instanceof _primitives.Dict) {
                  break;
                }
              }
              if (i < ii) {
                (0, _util.warn)("getOperatorList - ignoring operator: " + fn);
                continue;
              }
            }
        }
        operatorList.addOp(fn, args);
      }
      if (stop) {
        next(deferred);
        return;
      }
      closePendingRestoreOPS();
      resolve();
    }).catch(reason => {
      if (reason instanceof _util.AbortException) {
        return;
      }
      if (this.options.ignoreErrors) {
        (0, _util.warn)(`getOperatorList - ignoring errors during "${task.name}" ` + `task: "${reason}".`);
        closePendingRestoreOPS();
        return;
      }
      throw reason;
    });
  }
  getTextContent({
    stream,
    task,
    resources,
    stateManager = null,
    includeMarkedContent = false,
    sink,
    seenStyles = new Set(),
    viewBox,
    markedContentData = null,
    disableNormalization = false
  }) {
    resources ||= _primitives.Dict.empty;
    stateManager ||= new StateManager(new TextState());
    if (includeMarkedContent) {
      markedContentData ||= {
        level: 0
      };
    }
    const textContent = {
      items: [],
      styles: Object.create(null)
    };
    const textContentItem = {
      initialized: false,
      str: [],
      totalWidth: 0,
      totalHeight: 0,
      width: 0,
      height: 0,
      vertical: false,
      prevTransform: null,
      textAdvanceScale: 0,
      spaceInFlowMin: 0,
      spaceInFlowMax: 0,
      trackingSpaceMin: Infinity,
      negativeSpaceMax: -Infinity,
      notASpace: -Infinity,
      transform: null,
      fontName: null,
      hasEOL: false
    };
    const twoLastChars = [" ", " "];
    let twoLastCharsPos = 0;
    function saveLastChar(char) {
      const nextPos = (twoLastCharsPos + 1) % 2;
      const ret = twoLastChars[twoLastCharsPos] !== " " && twoLastChars[nextPos] === " ";
      twoLastChars[twoLastCharsPos] = char;
      twoLastCharsPos = nextPos;
      return ret;
    }
    function shouldAddWhitepsace() {
      return twoLastChars[twoLastCharsPos] !== " " && twoLastChars[(twoLastCharsPos + 1) % 2] === " ";
    }
    function resetLastChars() {
      twoLastChars[0] = twoLastChars[1] = " ";
      twoLastCharsPos = 0;
    }
    const TRACKING_SPACE_FACTOR = 0.102;
    const NOT_A_SPACE_FACTOR = 0.03;
    const NEGATIVE_SPACE_FACTOR = -0.2;
    const SPACE_IN_FLOW_MIN_FACTOR = 0.102;
    const SPACE_IN_FLOW_MAX_FACTOR = 0.6;
    const VERTICAL_SHIFT_RATIO = 0.25;
    const self = this;
    const xref = this.xref;
    const showSpacedTextBuffer = [];
    let xobjs = null;
    const emptyXObjectCache = new _image_utils.LocalImageCache();
    const emptyGStateCache = new _image_utils.LocalGStateCache();
    const preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);
    let textState;
    function pushWhitespace({
      width = 0,
      height = 0,
      transform = textContentItem.prevTransform,
      fontName = textContentItem.fontName
    }) {
      textContent.items.push({
        str: " ",
        dir: "ltr",
        width,
        height,
        transform,
        fontName,
        hasEOL: false
      });
    }
    function getCurrentTextTransform() {
      const font = textState.font;
      const tsm = [textState.fontSize * textState.textHScale, 0, 0, textState.fontSize, 0, textState.textRise];
      if (font.isType3Font && (textState.fontSize <= 1 || font.isCharBBox) && !(0, _util.isArrayEqual)(textState.fontMatrix, _util.FONT_IDENTITY_MATRIX)) {
        const glyphHeight = font.bbox[3] - font.bbox[1];
        if (glyphHeight > 0) {
          tsm[3] *= glyphHeight * textState.fontMatrix[3];
        }
      }
      return _util.Util.transform(textState.ctm, _util.Util.transform(textState.textMatrix, tsm));
    }
    function ensureTextContentItem() {
      if (textContentItem.initialized) {
        return textContentItem;
      }
      const {
        font,
        loadedName
      } = textState;
      if (!seenStyles.has(loadedName)) {
        seenStyles.add(loadedName);
        textContent.styles[loadedName] = {
          fontFamily: font.fallbackName,
          ascent: font.ascent,
          descent: font.descent,
          vertical: font.vertical
        };
      }
      textContentItem.fontName = loadedName;
      const trm = textContentItem.transform = getCurrentTextTransform();
      if (!font.vertical) {
        textContentItem.width = textContentItem.totalWidth = 0;
        textContentItem.height = textContentItem.totalHeight = Math.hypot(trm[2], trm[3]);
        textContentItem.vertical = false;
      } else {
        textContentItem.width = textContentItem.totalWidth = Math.hypot(trm[0], trm[1]);
        textContentItem.height = textContentItem.totalHeight = 0;
        textContentItem.vertical = true;
      }
      const scaleLineX = Math.hypot(textState.textLineMatrix[0], textState.textLineMatrix[1]);
      const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]);
      textContentItem.textAdvanceScale = scaleCtmX * scaleLineX;
      const {
        fontSize
      } = textState;
      textContentItem.trackingSpaceMin = fontSize * TRACKING_SPACE_FACTOR;
      textContentItem.notASpace = fontSize * NOT_A_SPACE_FACTOR;
      textContentItem.negativeSpaceMax = fontSize * NEGATIVE_SPACE_FACTOR;
      textContentItem.spaceInFlowMin = fontSize * SPACE_IN_FLOW_MIN_FACTOR;
      textContentItem.spaceInFlowMax = fontSize * SPACE_IN_FLOW_MAX_FACTOR;
      textContentItem.hasEOL = false;
      textContentItem.initialized = true;
      return textContentItem;
    }
    function updateAdvanceScale() {
      if (!textContentItem.initialized) {
        return;
      }
      const scaleLineX = Math.hypot(textState.textLineMatrix[0], textState.textLineMatrix[1]);
      const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]);
      const scaleFactor = scaleCtmX * scaleLineX;
      if (scaleFactor === textContentItem.textAdvanceScale) {
        return;
      }
      if (!textContentItem.vertical) {
        textContentItem.totalWidth += textContentItem.width * textContentItem.textAdvanceScale;
        textContentItem.width = 0;
      } else {
        textContentItem.totalHeight += textContentItem.height * textContentItem.textAdvanceScale;
        textContentItem.height = 0;
      }
      textContentItem.textAdvanceScale = scaleFactor;
    }
    function runBidiTransform(textChunk) {
      let text = textChunk.str.join("");
      if (!disableNormalization) {
        text = (0, _util.normalizeUnicode)(text);
      }
      const bidiResult = (0, _bidi.bidi)(text, -1, textChunk.vertical);
      return {
        str: bidiResult.str,
        dir: bidiResult.dir,
        width: Math.abs(textChunk.totalWidth),
        height: Math.abs(textChunk.totalHeight),
        transform: textChunk.transform,
        fontName: textChunk.fontName,
        hasEOL: textChunk.hasEOL
      };
    }
    function handleSetFont(fontName, fontRef) {
      return self.loadFont(fontName, fontRef, resources).then(function (translated) {
        if (!translated.font.isType3Font) {
          return translated;
        }
        return translated.loadType3Data(self, resources, task).catch(function () {}).then(function () {
          return translated;
        });
      }).then(function (translated) {
        textState.loadedName = translated.loadedName;
        textState.font = translated.font;
        textState.fontMatrix = translated.font.fontMatrix || _util.FONT_IDENTITY_MATRIX;
      });
    }
    function applyInverseRotation(x, y, matrix) {
      const scale = Math.hypot(matrix[0], matrix[1]);
      return [(matrix[0] * x + matrix[1] * y) / scale, (matrix[2] * x + matrix[3] * y) / scale];
    }
    function compareWithLastPosition(glyphWidth) {
      const currentTransform = getCurrentTextTransform();
      let posX = currentTransform[4];
      let posY = currentTransform[5];
      if (textState.font?.vertical) {
        if (posX < viewBox[0] || posX > viewBox[2] || posY + glyphWidth < viewBox[1] || posY > viewBox[3]) {
          return false;
        }
      } else if (posX + glyphWidth < viewBox[0] || posX > viewBox[2] || posY < viewBox[1] || posY > viewBox[3]) {
        return false;
      }
      if (!textState.font || !textContentItem.prevTransform) {
        return true;
      }
      let lastPosX = textContentItem.prevTransform[4];
      let lastPosY = textContentItem.prevTransform[5];
      if (lastPosX === posX && lastPosY === posY) {
        return true;
      }
      let rotate = -1;
      if (currentTransform[0] && currentTransform[1] === 0 && currentTransform[2] === 0) {
        rotate = currentTransform[0] > 0 ? 0 : 180;
      } else if (currentTransform[1] && currentTransform[0] === 0 && currentTransform[3] === 0) {
        rotate = currentTransform[1] > 0 ? 90 : 270;
      }
      switch (rotate) {
        case 0:
          break;
        case 90:
          [posX, posY] = [posY, posX];
          [lastPosX, lastPosY] = [lastPosY, lastPosX];
          break;
        case 180:
          [posX, posY, lastPosX, lastPosY] = [-posX, -posY, -lastPosX, -lastPosY];
          break;
        case 270:
          [posX, posY] = [-posY, -posX];
          [lastPosX, lastPosY] = [-lastPosY, -lastPosX];
          break;
        default:
          [posX, posY] = applyInverseRotation(posX, posY, currentTransform);
          [lastPosX, lastPosY] = applyInverseRotation(lastPosX, lastPosY, textContentItem.prevTransform);
      }
      if (textState.font.vertical) {
        const advanceY = (lastPosY - posY) / textContentItem.textAdvanceScale;
        const advanceX = posX - lastPosX;
        const textOrientation = Math.sign(textContentItem.height);
        if (advanceY < textOrientation * textContentItem.negativeSpaceMax) {
          if (Math.abs(advanceX) > 0.5 * textContentItem.width) {
            appendEOL();
            return true;
          }
          resetLastChars();
          flushTextContentItem();
          return true;
        }
        if (Math.abs(advanceX) > textContentItem.width) {
          appendEOL();
          return true;
        }
        if (advanceY <= textOrientation * textContentItem.notASpace) {
          resetLastChars();
        }
        if (advanceY <= textOrientation * textContentItem.trackingSpaceMin) {
          if (shouldAddWhitepsace()) {
            resetLastChars();
            flushTextContentItem();
            pushWhitespace({
              height: Math.abs(advanceY)
            });
          } else {
            textContentItem.height += advanceY;
          }
        } else if (!addFakeSpaces(advanceY, textContentItem.prevTransform, textOrientation)) {
          if (textContentItem.str.length === 0) {
            resetLastChars();
            pushWhitespace({
              height: Math.abs(advanceY)
            });
          } else {
            textContentItem.height += advanceY;
          }
        }
        if (Math.abs(advanceX) > textContentItem.width * VERTICAL_SHIFT_RATIO) {
          flushTextContentItem();
        }
        return true;
      }
      const advanceX = (posX - lastPosX) / textContentItem.textAdvanceScale;
      const advanceY = posY - lastPosY;
      const textOrientation = Math.sign(textContentItem.width);
      if (advanceX < textOrientation * textContentItem.negativeSpaceMax) {
        if (Math.abs(advanceY) > 0.5 * textContentItem.height) {
          appendEOL();
          return true;
        }
        resetLastChars();
        flushTextContentItem();
        return true;
      }
      if (Math.abs(advanceY) > textContentItem.height) {
        appendEOL();
        return true;
      }
      if (advanceX <= textOrientation * textContentItem.notASpace) {
        resetLastChars();
      }
      if (advanceX <= textOrientation * textContentItem.trackingSpaceMin) {
        if (shouldAddWhitepsace()) {
          resetLastChars();
          flushTextContentItem();
          pushWhitespace({
            width: Math.abs(advanceX)
          });
        } else {
          textContentItem.width += advanceX;
        }
      } else if (!addFakeSpaces(advanceX, textContentItem.prevTransform, textOrientation)) {
        if (textContentItem.str.length === 0) {
          resetLastChars();
          pushWhitespace({
            width: Math.abs(advanceX)
          });
        } else {
          textContentItem.width += advanceX;
        }
      }
      if (Math.abs(advanceY) > textContentItem.height * VERTICAL_SHIFT_RATIO) {
        flushTextContentItem();
      }
      return true;
    }
    function buildTextContentItem({
      chars,
      extraSpacing
    }) {
      const font = textState.font;
      if (!chars) {
        const charSpacing = textState.charSpacing + extraSpacing;
        if (charSpacing) {
          if (!font.vertical) {
            textState.translateTextMatrix(charSpacing * textState.textHScale, 0);
          } else {
            textState.translateTextMatrix(0, -charSpacing);
          }
        }
        return;
      }
      const glyphs = font.charsToGlyphs(chars);
      const scale = textState.fontMatrix[0] * textState.fontSize;
      for (let i = 0, ii = glyphs.length; i < ii; i++) {
        const glyph = glyphs[i];
        const {
          category
        } = glyph;
        if (category.isInvisibleFormatMark) {
          continue;
        }
        let charSpacing = textState.charSpacing + (i + 1 === ii ? extraSpacing : 0);
        let glyphWidth = glyph.width;
        if (font.vertical) {
          glyphWidth = glyph.vmetric ? glyph.vmetric[0] : -glyphWidth;
        }
        let scaledDim = glyphWidth * scale;
        if (category.isWhitespace) {
          if (!font.vertical) {
            charSpacing += scaledDim + textState.wordSpacing;
            textState.translateTextMatrix(charSpacing * textState.textHScale, 0);
          } else {
            charSpacing += -scaledDim + textState.wordSpacing;
            textState.translateTextMatrix(0, -charSpacing);
          }
          saveLastChar(" ");
          continue;
        }
        if (!category.isZeroWidthDiacritic && !compareWithLastPosition(scaledDim)) {
          if (!font.vertical) {
            textState.translateTextMatrix(scaledDim * textState.textHScale, 0);
          } else {
            textState.translateTextMatrix(0, scaledDim);
          }
          continue;
        }
        const textChunk = ensureTextContentItem();
        if (category.isZeroWidthDiacritic) {
          scaledDim = 0;
        }
        if (!font.vertical) {
          scaledDim *= textState.textHScale;
          textState.translateTextMatrix(scaledDim, 0);
          textChunk.width += scaledDim;
        } else {
          textState.translateTextMatrix(0, scaledDim);
          scaledDim = Math.abs(scaledDim);
          textChunk.height += scaledDim;
        }
        if (scaledDim) {
          textChunk.prevTransform = getCurrentTextTransform();
        }
        const glyphUnicode = glyph.unicode;
        if (saveLastChar(glyphUnicode)) {
          textChunk.str.push(" ");
        }
        textChunk.str.push(glyphUnicode);
        if (charSpacing) {
          if (!font.vertical) {
            textState.translateTextMatrix(charSpacing * textState.textHScale, 0);
          } else {
            textState.translateTextMatrix(0, -charSpacing);
          }
        }
      }
    }
    function appendEOL() {
      resetLastChars();
      if (textContentItem.initialized) {
        textContentItem.hasEOL = true;
        flushTextContentItem();
      } else {
        textContent.items.push({
          str: "",
          dir: "ltr",
          width: 0,
          height: 0,
          transform: getCurrentTextTransform(),
          fontName: textState.loadedName,
          hasEOL: true
        });
      }
    }
    function addFakeSpaces(width, transf, textOrientation) {
      if (textOrientation * textContentItem.spaceInFlowMin <= width && width <= textOrientation * textContentItem.spaceInFlowMax) {
        if (textContentItem.initialized) {
          resetLastChars();
          textContentItem.str.push(" ");
        }
        return false;
      }
      const fontName = textContentItem.fontName;
      let height = 0;
      if (textContentItem.vertical) {
        height = width;
        width = 0;
      }
      flushTextContentItem();
      resetLastChars();
      pushWhitespace({
        width: Math.abs(width),
        height: Math.abs(height),
        transform: transf || getCurrentTextTransform(),
        fontName
      });
      return true;
    }
    function flushTextContentItem() {
      if (!textContentItem.initialized || !textContentItem.str) {
        return;
      }
      if (!textContentItem.vertical) {
        textContentItem.totalWidth += textContentItem.width * textContentItem.textAdvanceScale;
      } else {
        textContentItem.totalHeight += textContentItem.height * textContentItem.textAdvanceScale;
      }
      textContent.items.push(runBidiTransform(textContentItem));
      textContentItem.initialized = false;
      textContentItem.str.length = 0;
    }
    function enqueueChunk(batch = false) {
      const length = textContent.items.length;
      if (length === 0) {
        return;
      }
      if (batch && length < TEXT_CHUNK_BATCH_SIZE) {
        return;
      }
      sink.enqueue(textContent, length);
      textContent.items = [];
      textContent.styles = Object.create(null);
    }
    const timeSlotManager = new TimeSlotManager();
    return new Promise(function promiseBody(resolve, reject) {
      const next = function (promise) {
        enqueueChunk(true);
        Promise.all([promise, sink.ready]).then(function () {
          try {
            promiseBody(resolve, reject);
          } catch (ex) {
            reject(ex);
          }
        }, reject);
      };
      task.ensureNotTerminated();
      timeSlotManager.reset();
      const operation = {};
      let stop,
        args = [];
      while (!(stop = timeSlotManager.check())) {
        args.length = 0;
        operation.args = args;
        if (!preprocessor.read(operation)) {
          break;
        }
        const previousState = textState;
        textState = stateManager.state;
        const fn = operation.fn;
        args = operation.args;
        switch (fn | 0) {
          case _util.OPS.setFont:
            var fontNameArg = args[0].name,
              fontSizeArg = args[1];
            if (textState.font && fontNameArg === textState.fontName && fontSizeArg === textState.fontSize) {
              break;
            }
            flushTextContentItem();
            textState.fontName = fontNameArg;
            textState.fontSize = fontSizeArg;
            next(handleSetFont(fontNameArg, null));
            return;
          case _util.OPS.setTextRise:
            textState.textRise = args[0];
            break;
          case _util.OPS.setHScale:
            textState.textHScale = args[0] / 100;
            break;
          case _util.OPS.setLeading:
            textState.leading = args[0];
            break;
          case _util.OPS.moveText:
            textState.translateTextLineMatrix(args[0], args[1]);
            textState.textMatrix = textState.textLineMatrix.slice();
            break;
          case _util.OPS.setLeadingMoveText:
            textState.leading = -args[1];
            textState.translateTextLineMatrix(args[0], args[1]);
            textState.textMatrix = textState.textLineMatrix.slice();
            break;
          case _util.OPS.nextLine:
            textState.carriageReturn();
            break;
          case _util.OPS.setTextMatrix:
            textState.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);
            textState.setTextLineMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);
            updateAdvanceScale();
            break;
          case _util.OPS.setCharSpacing:
            textState.charSpacing = args[0];
            break;
          case _util.OPS.setWordSpacing:
            textState.wordSpacing = args[0];
            break;
          case _util.OPS.beginText:
            textState.textMatrix = _util.IDENTITY_MATRIX.slice();
            textState.textLineMatrix = _util.IDENTITY_MATRIX.slice();
            break;
          case _util.OPS.showSpacedText:
            if (!stateManager.state.font) {
              self.ensureStateFont(stateManager.state);
              continue;
            }
            const spaceFactor = (textState.font.vertical ? 1 : -1) * textState.fontSize / 1000;
            const elements = args[0];
            for (let i = 0, ii = elements.length; i < ii; i++) {
              const item = elements[i];
              if (typeof item === "string") {
                showSpacedTextBuffer.push(item);
              } else if (typeof item === "number" && item !== 0) {
                const str = showSpacedTextBuffer.join("");
                showSpacedTextBuffer.length = 0;
                buildTextContentItem({
                  chars: str,
                  extraSpacing: item * spaceFactor
                });
              }
            }
            if (showSpacedTextBuffer.length > 0) {
              const str = showSpacedTextBuffer.join("");
              showSpacedTextBuffer.length = 0;
              buildTextContentItem({
                chars: str,
                extraSpacing: 0
              });
            }
            break;
          case _util.OPS.showText:
            if (!stateManager.state.font) {
              self.ensureStateFont(stateManager.state);
              continue;
            }
            buildTextContentItem({
              chars: args[0],
              extraSpacing: 0
            });
            break;
          case _util.OPS.nextLineShowText:
            if (!stateManager.state.font) {
              self.ensureStateFont(stateManager.state);
              continue;
            }
            textState.carriageReturn();
            buildTextContentItem({
              chars: args[0],
              extraSpacing: 0
            });
            break;
          case _util.OPS.nextLineSetSpacingShowText:
            if (!stateManager.state.font) {
              self.ensureStateFont(stateManager.state);
              continue;
            }
            textState.wordSpacing = args[0];
            textState.charSpacing = args[1];
            textState.carriageReturn();
            buildTextContentItem({
              chars: args[2],
              extraSpacing: 0
            });
            break;
          case _util.OPS.paintXObject:
            flushTextContentItem();
            if (!xobjs) {
              xobjs = resources.get("XObject") || _primitives.Dict.empty;
            }
            var isValidName = args[0] instanceof _primitives.Name;
            var name = args[0].name;
            if (isValidName && emptyXObjectCache.getByName(name)) {
              break;
            }
            next(new Promise(function (resolveXObject, rejectXObject) {
              if (!isValidName) {
                throw new _util.FormatError("XObject must be referred to by name.");
              }
              let xobj = xobjs.getRaw(name);
              if (xobj instanceof _primitives.Ref) {
                if (emptyXObjectCache.getByRef(xobj)) {
                  resolveXObject();
                  return;
                }
                const globalImage = self.globalImageCache.getData(xobj, self.pageIndex);
                if (globalImage) {
                  resolveXObject();
                  return;
                }
                xobj = xref.fetch(xobj);
              }
              if (!(xobj instanceof _base_stream.BaseStream)) {
                throw new _util.FormatError("XObject should be a stream");
              }
              const type = xobj.dict.get("Subtype");
              if (!(type instanceof _primitives.Name)) {
                throw new _util.FormatError("XObject should have a Name subtype");
              }
              if (type.name !== "Form") {
                emptyXObjectCache.set(name, xobj.dict.objId, true);
                resolveXObject();
                return;
              }
              const currentState = stateManager.state.clone();
              const xObjStateManager = new StateManager(currentState);
              const matrix = xobj.dict.getArray("Matrix");
              if (Array.isArray(matrix) && matrix.length === 6) {
                xObjStateManager.transform(matrix);
              }
              enqueueChunk();
              const sinkWrapper = {
                enqueueInvoked: false,
                enqueue(chunk, size) {
                  this.enqueueInvoked = true;
                  sink.enqueue(chunk, size);
                },
                get desiredSize() {
                  return sink.desiredSize;
                },
                get ready() {
                  return sink.ready;
                }
              };
              self.getTextContent({
                stream: xobj,
                task,
                resources: xobj.dict.get("Resources") || resources,
                stateManager: xObjStateManager,
                includeMarkedContent,
                sink: sinkWrapper,
                seenStyles,
                viewBox,
                markedContentData,
                disableNormalization
              }).then(function () {
                if (!sinkWrapper.enqueueInvoked) {
                  emptyXObjectCache.set(name, xobj.dict.objId, true);
                }
                resolveXObject();
              }, rejectXObject);
            }).catch(function (reason) {
              if (reason instanceof _util.AbortException) {
                return;
              }
              if (self.options.ignoreErrors) {
                (0, _util.warn)(`getTextContent - ignoring XObject: "${reason}".`);
                return;
              }
              throw reason;
            }));
            return;
          case _util.OPS.setGState:
            isValidName = args[0] instanceof _primitives.Name;
            name = args[0].name;
            if (isValidName && emptyGStateCache.getByName(name)) {
              break;
            }
            next(new Promise(function (resolveGState, rejectGState) {
              if (!isValidName) {
                throw new _util.FormatError("GState must be referred to by name.");
              }
              const extGState = resources.get("ExtGState");
              if (!(extGState instanceof _primitives.Dict)) {
                throw new _util.FormatError("ExtGState should be a dictionary.");
              }
              const gState = extGState.get(name);
              if (!(gState instanceof _primitives.Dict)) {
                throw new _util.FormatError("GState should be a dictionary.");
              }
              const gStateFont = gState.get("Font");
              if (!gStateFont) {
                emptyGStateCache.set(name, gState.objId, true);
                resolveGState();
                return;
              }
              flushTextContentItem();
              textState.fontName = null;
              textState.fontSize = gStateFont[1];
              handleSetFont(null, gStateFont[0]).then(resolveGState, rejectGState);
            }).catch(function (reason) {
              if (reason instanceof _util.AbortException) {
                return;
              }
              if (self.options.ignoreErrors) {
                (0, _util.warn)(`getTextContent - ignoring ExtGState: "${reason}".`);
                return;
              }
              throw reason;
            }));
            return;
          case _util.OPS.beginMarkedContent:
            flushTextContentItem();
            if (includeMarkedContent) {
              markedContentData.level++;
              textContent.items.push({
                type: "beginMarkedContent",
                tag: args[0] instanceof _primitives.Name ? args[0].name : null
              });
            }
            break;
          case _util.OPS.beginMarkedContentProps:
            flushTextContentItem();
            if (includeMarkedContent) {
              markedContentData.level++;
              let mcid = null;
              if (args[1] instanceof _primitives.Dict) {
                mcid = args[1].get("MCID");
              }
              textContent.items.push({
                type: "beginMarkedContentProps",
                id: Number.isInteger(mcid) ? `${self.idFactory.getPageObjId()}_mc${mcid}` : null,
                tag: args[0] instanceof _primitives.Name ? args[0].name : null
              });
            }
            break;
          case _util.OPS.endMarkedContent:
            flushTextContentItem();
            if (includeMarkedContent) {
              if (markedContentData.level === 0) {
                break;
              }
              markedContentData.level--;
              textContent.items.push({
                type: "endMarkedContent"
              });
            }
            break;
          case _util.OPS.restore:
            if (previousState && (previousState.font !== textState.font || previousState.fontSize !== textState.fontSize || previousState.fontName !== textState.fontName)) {
              flushTextContentItem();
            }
            break;
        }
        if (textContent.items.length >= sink.desiredSize) {
          stop = true;
          break;
        }
      }
      if (stop) {
        next(deferred);
        return;
      }
      flushTextContentItem();
      enqueueChunk();
      resolve();
    }).catch(reason => {
      if (reason instanceof _util.AbortException) {
        return;
      }
      if (this.options.ignoreErrors) {
        (0, _util.warn)(`getTextContent - ignoring errors during "${task.name}" ` + `task: "${reason}".`);
        flushTextContentItem();
        enqueueChunk();
        return;
      }
      throw reason;
    });
  }
  extractDataStructures(dict, baseDict, properties) {
    const xref = this.xref;
    let cidToGidBytes;
    const toUnicodePromise = this.readToUnicode(properties.toUnicode || dict.get("ToUnicode") || baseDict.get("ToUnicode"));
    if (properties.composite) {
      const cidSystemInfo = dict.get("CIDSystemInfo");
      if (cidSystemInfo instanceof _primitives.Dict) {
        properties.cidSystemInfo = {
          registry: (0, _util.stringToPDFString)(cidSystemInfo.get("Registry")),
          ordering: (0, _util.stringToPDFString)(cidSystemInfo.get("Ordering")),
          supplement: cidSystemInfo.get("Supplement")
        };
      }
      try {
        const cidToGidMap = dict.get("CIDToGIDMap");
        if (cidToGidMap instanceof _base_stream.BaseStream) {
          cidToGidBytes = cidToGidMap.getBytes();
        }
      } catch (ex) {
        if (!this.options.ignoreErrors) {
          throw ex;
        }
        (0, _util.warn)(`extractDataStructures - ignoring CIDToGIDMap data: "${ex}".`);
      }
    }
    const differences = [];
    let baseEncodingName = null;
    let encoding;
    if (dict.has("Encoding")) {
      encoding = dict.get("Encoding");
      if (encoding instanceof _primitives.Dict) {
        baseEncodingName = encoding.get("BaseEncoding");
        baseEncodingName = baseEncodingName instanceof _primitives.Name ? baseEncodingName.name : null;
        if (encoding.has("Differences")) {
          const diffEncoding = encoding.get("Differences");
          let index = 0;
          for (const entry of diffEncoding) {
            const data = xref.fetchIfRef(entry);
            if (typeof data === "number") {
              index = data;
            } else if (data instanceof _primitives.Name) {
              differences[index++] = data.name;
            } else {
              throw new _util.FormatError(`Invalid entry in 'Differences' array: ${data}`);
            }
          }
        }
      } else if (encoding instanceof _primitives.Name) {
        baseEncodingName = encoding.name;
      } else {
        const msg = "Encoding is not a Name nor a Dict";
        if (!this.options.ignoreErrors) {
          throw new _util.FormatError(msg);
        }
        (0, _util.warn)(msg);
      }
      if (baseEncodingName !== "MacRomanEncoding" && baseEncodingName !== "MacExpertEncoding" && baseEncodingName !== "WinAnsiEncoding") {
        baseEncodingName = null;
      }
    }
    const nonEmbeddedFont = !properties.file || properties.isInternalFont,
      isSymbolsFontName = (0, _standard_fonts.getSymbolsFonts)()[properties.name];
    if (baseEncodingName && nonEmbeddedFont && isSymbolsFontName) {
      baseEncodingName = null;
    }
    if (baseEncodingName) {
      properties.defaultEncoding = (0, _encodings.getEncoding)(baseEncodingName);
    } else {
      const isSymbolicFont = !!(properties.flags & _fonts_utils.FontFlags.Symbolic);
      const isNonsymbolicFont = !!(properties.flags & _fonts_utils.FontFlags.Nonsymbolic);
      encoding = _encodings.StandardEncoding;
      if (properties.type === "TrueType" && !isNonsymbolicFont) {
        encoding = _encodings.WinAnsiEncoding;
      }
      if (isSymbolicFont || isSymbolsFontName) {
        encoding = _encodings.MacRomanEncoding;
        if (nonEmbeddedFont) {
          if (/Symbol/i.test(properties.name)) {
            encoding = _encodings.SymbolSetEncoding;
          } else if (/Dingbats/i.test(properties.name)) {
            encoding = _encodings.ZapfDingbatsEncoding;
          } else if (/Wingdings/i.test(properties.name)) {
            encoding = _encodings.WinAnsiEncoding;
          }
        }
      }
      properties.defaultEncoding = encoding;
    }
    properties.differences = differences;
    properties.baseEncodingName = baseEncodingName;
    properties.hasEncoding = !!baseEncodingName || differences.length > 0;
    properties.dict = dict;
    return toUnicodePromise.then(readToUnicode => {
      properties.toUnicode = readToUnicode;
      return this.buildToUnicode(properties);
    }).then(builtToUnicode => {
      properties.toUnicode = builtToUnicode;
      if (cidToGidBytes) {
        properties.cidToGidMap = this.readCidToGidMap(cidToGidBytes, builtToUnicode);
      }
      return properties;
    });
  }
  _simpleFontToUnicode(properties, forceGlyphs = false) {
    (0, _util.assert)(!properties.composite, "Must be a simple font.");
    const toUnicode = [];
    const encoding = properties.defaultEncoding.slice();
    const baseEncodingName = properties.baseEncodingName;
    const differences = properties.differences;
    for (const charcode in differences) {
      const glyphName = differences[charcode];
      if (glyphName === ".notdef") {
        continue;
      }
      encoding[charcode] = glyphName;
    }
    const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
    for (const charcode in encoding) {
      let glyphName = encoding[charcode];
      if (glyphName === "") {
        continue;
      }
      let unicode = glyphsUnicodeMap[glyphName];
      if (unicode !== undefined) {
        toUnicode[charcode] = String.fromCharCode(unicode);
        continue;
      }
      let code = 0;
      switch (glyphName[0]) {
        case "G":
          if (glyphName.length === 3) {
            code = parseInt(glyphName.substring(1), 16);
          }
          break;
        case "g":
          if (glyphName.length === 5) {
            code = parseInt(glyphName.substring(1), 16);
          }
          break;
        case "C":
        case "c":
          if (glyphName.length >= 3 && glyphName.length <= 4) {
            const codeStr = glyphName.substring(1);
            if (forceGlyphs) {
              code = parseInt(codeStr, 16);
              break;
            }
            code = +codeStr;
            if (Number.isNaN(code) && Number.isInteger(parseInt(codeStr, 16))) {
              return this._simpleFontToUnicode(properties, true);
            }
          }
          break;
        case "u":
          unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);
          if (unicode !== -1) {
            code = unicode;
          }
          break;
        default:
          switch (glyphName) {
            case "f_h":
            case "f_t":
            case "T_h":
              toUnicode[charcode] = glyphName.replaceAll("_", "");
              continue;
          }
          break;
      }
      if (code > 0 && code <= 0x10ffff && Number.isInteger(code)) {
        if (baseEncodingName && code === +charcode) {
          const baseEncoding = (0, _encodings.getEncoding)(baseEncodingName);
          if (baseEncoding && (glyphName = baseEncoding[charcode])) {
            toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]);
            continue;
          }
        }
        toUnicode[charcode] = String.fromCodePoint(code);
      }
    }
    return toUnicode;
  }
  async buildToUnicode(properties) {
    properties.hasIncludedToUnicodeMap = properties.toUnicode?.length > 0;
    if (properties.hasIncludedToUnicodeMap) {
      if (!properties.composite && properties.hasEncoding) {
        properties.fallbackToUnicode = this._simpleFontToUnicode(properties);
      }
      return properties.toUnicode;
    }
    if (!properties.composite) {
      return new _to_unicode_map.ToUnicodeMap(this._simpleFontToUnicode(properties));
    }
    if (properties.composite && (properties.cMap.builtInCMap && !(properties.cMap instanceof _cmap.IdentityCMap) || properties.cidSystemInfo.registry === "Adobe" && (properties.cidSystemInfo.ordering === "GB1" || properties.cidSystemInfo.ordering === "CNS1" || properties.cidSystemInfo.ordering === "Japan1" || properties.cidSystemInfo.ordering === "Korea1"))) {
      const {
        registry,
        ordering
      } = properties.cidSystemInfo;
      const ucs2CMapName = _primitives.Name.get(`${registry}-${ordering}-UCS2`);
      const ucs2CMap = await _cmap.CMapFactory.create({
        encoding: ucs2CMapName,
        fetchBuiltInCMap: this._fetchBuiltInCMapBound,
        useCMap: null
      });
      const toUnicode = [],
        buf = [];
      properties.cMap.forEach(function (charcode, cid) {
        if (cid > 0xffff) {
          throw new _util.FormatError("Max size of CID is 65,535");
        }
        const ucs2 = ucs2CMap.lookup(cid);
        if (ucs2) {
          buf.length = 0;
          for (let i = 0, ii = ucs2.length; i < ii; i += 2) {
            buf.push((ucs2.charCodeAt(i) << 8) + ucs2.charCodeAt(i + 1));
          }
          toUnicode[charcode] = String.fromCharCode(...buf);
        }
      });
      return new _to_unicode_map.ToUnicodeMap(toUnicode);
    }
    return new _to_unicode_map.IdentityToUnicodeMap(properties.firstChar, properties.lastChar);
  }
  readToUnicode(cmapObj) {
    if (!cmapObj) {
      return Promise.resolve(null);
    }
    if (cmapObj instanceof _primitives.Name) {
      return _cmap.CMapFactory.create({
        encoding: cmapObj,
        fetchBuiltInCMap: this._fetchBuiltInCMapBound,
        useCMap: null
      }).then(function (cmap) {
        if (cmap instanceof _cmap.IdentityCMap) {
          return new _to_unicode_map.IdentityToUnicodeMap(0, 0xffff);
        }
        return new _to_unicode_map.ToUnicodeMap(cmap.getMap());
      });
    } else if (cmapObj instanceof _base_stream.BaseStream) {
      return _cmap.CMapFactory.create({
        encoding: cmapObj,
        fetchBuiltInCMap: this._fetchBuiltInCMapBound,
        useCMap: null
      }).then(function (cmap) {
        if (cmap instanceof _cmap.IdentityCMap) {
          return new _to_unicode_map.IdentityToUnicodeMap(0, 0xffff);
        }
        const map = new Array(cmap.length);
        cmap.forEach(function (charCode, token) {
          if (typeof token === "number") {
            map[charCode] = String.fromCodePoint(token);
            return;
          }
          const str = [];
          for (let k = 0; k < token.length; k += 2) {
            const w1 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1);
            if ((w1 & 0xf800) !== 0xd800) {
              str.push(w1);
              continue;
            }
            k += 2;
            const w2 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1);
            str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000);
          }
          map[charCode] = String.fromCodePoint(...str);
        });
        return new _to_unicode_map.ToUnicodeMap(map);
      }, reason => {
        if (reason instanceof _util.AbortException) {
          return null;
        }
        if (this.options.ignoreErrors) {
          (0, _util.warn)(`readToUnicode - ignoring ToUnicode data: "${reason}".`);
          return null;
        }
        throw reason;
      });
    }
    return Promise.resolve(null);
  }
  readCidToGidMap(glyphsData, toUnicode) {
    const result = [];
    for (let j = 0, jj = glyphsData.length; j < jj; j++) {
      const glyphID = glyphsData[j++] << 8 | glyphsData[j];
      const code = j >> 1;
      if (glyphID === 0 && !toUnicode.has(code)) {
        continue;
      }
      result[code] = glyphID;
    }
    return result;
  }
  extractWidths(dict, descriptor, properties) {
    const xref = this.xref;
    let glyphsWidths = [];
    let defaultWidth = 0;
    const glyphsVMetrics = [];
    let defaultVMetrics;
    let i, ii, j, jj, start, code, widths;
    if (properties.composite) {
      defaultWidth = dict.has("DW") ? dict.get("DW") : 1000;
      widths = dict.get("W");
      if (widths) {
        for (i = 0, ii = widths.length; i < ii; i++) {
          start = xref.fetchIfRef(widths[i++]);
          code = xref.fetchIfRef(widths[i]);
          if (Array.isArray(code)) {
            for (j = 0, jj = code.length; j < jj; j++) {
              glyphsWidths[start++] = xref.fetchIfRef(code[j]);
            }
          } else {
            const width = xref.fetchIfRef(widths[++i]);
            for (j = start; j <= code; j++) {
              glyphsWidths[j] = width;
            }
          }
        }
      }
      if (properties.vertical) {
        let vmetrics = dict.getArray("DW2") || [880, -1000];
        defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]];
        vmetrics = dict.get("W2");
        if (vmetrics) {
          for (i = 0, ii = vmetrics.length; i < ii; i++) {
            start = xref.fetchIfRef(vmetrics[i++]);
            code = xref.fetchIfRef(vmetrics[i]);
            if (Array.isArray(code)) {
              for (j = 0, jj = code.length; j < jj; j++) {
                glyphsVMetrics[start++] = [xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j])];
              }
            } else {
              const vmetric = [xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i])];
              for (j = start; j <= code; j++) {
                glyphsVMetrics[j] = vmetric;
              }
            }
          }
        }
      }
    } else {
      const firstChar = properties.firstChar;
      widths = dict.get("Widths");
      if (widths) {
        j = firstChar;
        for (i = 0, ii = widths.length; i < ii; i++) {
          glyphsWidths[j++] = xref.fetchIfRef(widths[i]);
        }
        defaultWidth = parseFloat(descriptor.get("MissingWidth")) || 0;
      } else {
        const baseFontName = dict.get("BaseFont");
        if (baseFontName instanceof _primitives.Name) {
          const metrics = this.getBaseFontMetrics(baseFontName.name);
          glyphsWidths = this.buildCharCodeToWidth(metrics.widths, properties);
          defaultWidth = metrics.defaultWidth;
        }
      }
    }
    let isMonospace = true;
    let firstWidth = defaultWidth;
    for (const glyph in glyphsWidths) {
      const glyphWidth = glyphsWidths[glyph];
      if (!glyphWidth) {
        continue;
      }
      if (!firstWidth) {
        firstWidth = glyphWidth;
        continue;
      }
      if (firstWidth !== glyphWidth) {
        isMonospace = false;
        break;
      }
    }
    if (isMonospace) {
      properties.flags |= _fonts_utils.FontFlags.FixedPitch;
    } else {
      properties.flags &= ~_fonts_utils.FontFlags.FixedPitch;
    }
    properties.defaultWidth = defaultWidth;
    properties.widths = glyphsWidths;
    properties.defaultVMetrics = defaultVMetrics;
    properties.vmetrics = glyphsVMetrics;
  }
  isSerifFont(baseFontName) {
    const fontNameWoStyle = baseFontName.split("-")[0];
    return fontNameWoStyle in (0, _standard_fonts.getSerifFonts)() || /serif/gi.test(fontNameWoStyle);
  }
  getBaseFontMetrics(name) {
    let defaultWidth = 0;
    let widths = Object.create(null);
    let monospace = false;
    const stdFontMap = (0, _standard_fonts.getStdFontMap)();
    let lookupName = stdFontMap[name] || name;
    const Metrics = (0, _metrics.getMetrics)();
    if (!(lookupName in Metrics)) {
      lookupName = this.isSerifFont(name) ? "Times-Roman" : "Helvetica";
    }
    const glyphWidths = Metrics[lookupName];
    if (typeof glyphWidths === "number") {
      defaultWidth = glyphWidths;
      monospace = true;
    } else {
      widths = glyphWidths();
    }
    return {
      defaultWidth,
      monospace,
      widths
    };
  }
  buildCharCodeToWidth(widthsByGlyphName, properties) {
    const widths = Object.create(null);
    const differences = properties.differences;
    const encoding = properties.defaultEncoding;
    for (let charCode = 0; charCode < 256; charCode++) {
      if (charCode in differences && widthsByGlyphName[differences[charCode]]) {
        widths[charCode] = widthsByGlyphName[differences[charCode]];
        continue;
      }
      if (charCode in encoding && widthsByGlyphName[encoding[charCode]]) {
        widths[charCode] = widthsByGlyphName[encoding[charCode]];
        continue;
      }
    }
    return widths;
  }
  preEvaluateFont(dict) {
    const baseDict = dict;
    let type = dict.get("Subtype");
    if (!(type instanceof _primitives.Name)) {
      throw new _util.FormatError("invalid font Subtype");
    }
    let composite = false;
    let hash, toUnicode;
    if (type.name === "Type0") {
      const df = dict.get("DescendantFonts");
      if (!df) {
        throw new _util.FormatError("Descendant fonts are not specified");
      }
      dict = Array.isArray(df) ? this.xref.fetchIfRef(df[0]) : df;
      if (!(dict instanceof _primitives.Dict)) {
        throw new _util.FormatError("Descendant font is not a dictionary.");
      }
      type = dict.get("Subtype");
      if (!(type instanceof _primitives.Name)) {
        throw new _util.FormatError("invalid font Subtype");
      }
      composite = true;
    }
    const firstChar = dict.get("FirstChar") || 0,
      lastChar = dict.get("LastChar") || (composite ? 0xffff : 0xff);
    const descriptor = dict.get("FontDescriptor");
    if (descriptor) {
      hash = new _murmurhash.MurmurHash3_64();
      const encoding = baseDict.getRaw("Encoding");
      if (encoding instanceof _primitives.Name) {
        hash.update(encoding.name);
      } else if (encoding instanceof _primitives.Ref) {
        hash.update(encoding.toString());
      } else if (encoding instanceof _primitives.Dict) {
        for (const entry of encoding.getRawValues()) {
          if (entry instanceof _primitives.Name) {
            hash.update(entry.name);
          } else if (entry instanceof _primitives.Ref) {
            hash.update(entry.toString());
          } else if (Array.isArray(entry)) {
            const diffLength = entry.length,
              diffBuf = new Array(diffLength);
            for (let j = 0; j < diffLength; j++) {
              const diffEntry = entry[j];
              if (diffEntry instanceof _primitives.Name) {
                diffBuf[j] = diffEntry.name;
              } else if (typeof diffEntry === "number" || diffEntry instanceof _primitives.Ref) {
                diffBuf[j] = diffEntry.toString();
              }
            }
            hash.update(diffBuf.join());
          }
        }
      }
      hash.update(`${firstChar}-${lastChar}`);
      toUnicode = dict.get("ToUnicode") || baseDict.get("ToUnicode");
      if (toUnicode instanceof _base_stream.BaseStream) {
        const stream = toUnicode.str || toUnicode;
        const uint8array = stream.buffer ? new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) : new Uint8Array(stream.bytes.buffer, stream.start, stream.end - stream.start);
        hash.update(uint8array);
      } else if (toUnicode instanceof _primitives.Name) {
        hash.update(toUnicode.name);
      }
      const widths = dict.get("Widths") || baseDict.get("Widths");
      if (Array.isArray(widths)) {
        const widthsBuf = [];
        for (const entry of widths) {
          if (typeof entry === "number" || entry instanceof _primitives.Ref) {
            widthsBuf.push(entry.toString());
          }
        }
        hash.update(widthsBuf.join());
      }
      if (composite) {
        hash.update("compositeFont");
        const compositeWidths = dict.get("W") || baseDict.get("W");
        if (Array.isArray(compositeWidths)) {
          const widthsBuf = [];
          for (const entry of compositeWidths) {
            if (typeof entry === "number" || entry instanceof _primitives.Ref) {
              widthsBuf.push(entry.toString());
            } else if (Array.isArray(entry)) {
              const subWidthsBuf = [];
              for (const element of entry) {
                if (typeof element === "number" || element instanceof _primitives.Ref) {
                  subWidthsBuf.push(element.toString());
                }
              }
              widthsBuf.push(`[${subWidthsBuf.join()}]`);
            }
          }
          hash.update(widthsBuf.join());
        }
        const cidToGidMap = dict.getRaw("CIDToGIDMap") || baseDict.getRaw("CIDToGIDMap");
        if (cidToGidMap instanceof _primitives.Name) {
          hash.update(cidToGidMap.name);
        } else if (cidToGidMap instanceof _primitives.Ref) {
          hash.update(cidToGidMap.toString());
        } else if (cidToGidMap instanceof _base_stream.BaseStream) {
          hash.update(cidToGidMap.peekBytes());
        }
      }
    }
    return {
      descriptor,
      dict,
      baseDict,
      composite,
      type: type.name,
      firstChar,
      lastChar,
      toUnicode,
      hash: hash ? hash.hexdigest() : ""
    };
  }
  async translateFont({
    descriptor,
    dict,
    baseDict,
    composite,
    type,
    firstChar,
    lastChar,
    toUnicode,
    cssFontInfo
  }) {
    const isType3Font = type === "Type3";
    let properties;
    if (!descriptor) {
      if (isType3Font) {
        descriptor = new _primitives.Dict(null);
        descriptor.set("FontName", _primitives.Name.get(type));
        descriptor.set("FontBBox", dict.getArray("FontBBox") || [0, 0, 0, 0]);
      } else {
        let baseFontName = dict.get("BaseFont");
        if (!(baseFontName instanceof _primitives.Name)) {
          throw new _util.FormatError("Base font is not specified");
        }
        baseFontName = baseFontName.name.replaceAll(/[,_]/g, "-");
        const metrics = this.getBaseFontMetrics(baseFontName);
        const fontNameWoStyle = baseFontName.split("-")[0];
        const flags = (this.isSerifFont(fontNameWoStyle) ? _fonts_utils.FontFlags.Serif : 0) | (metrics.monospace ? _fonts_utils.FontFlags.FixedPitch : 0) | ((0, _standard_fonts.getSymbolsFonts)()[fontNameWoStyle] ? _fonts_utils.FontFlags.Symbolic : _fonts_utils.FontFlags.Nonsymbolic);
        properties = {
          type,
          name: baseFontName,
          loadedName: baseDict.loadedName,
          systemFontInfo: null,
          widths: metrics.widths,
          defaultWidth: metrics.defaultWidth,
          isSimulatedFlags: true,
          flags,
          firstChar,
          lastChar,
          toUnicode,
          xHeight: 0,
          capHeight: 0,
          italicAngle: 0,
          isType3Font
        };
        const widths = dict.get("Widths");
        const standardFontName = (0, _standard_fonts.getStandardFontName)(baseFontName);
        let file = null;
        if (standardFontName) {
          file = await this.fetchStandardFontData(standardFontName);
          properties.isInternalFont = !!file;
        }
        if (!properties.isInternalFont && this.options.useSystemFonts) {
          properties.systemFontInfo = (0, _font_substitutions.getFontSubstitution)(this.systemFontCache, this.idFactory, this.options.standardFontDataUrl, baseFontName, standardFontName);
        }
        return this.extractDataStructures(dict, dict, properties).then(newProperties => {
          if (widths) {
            const glyphWidths = [];
            let j = firstChar;
            for (const width of widths) {
              glyphWidths[j++] = this.xref.fetchIfRef(width);
            }
            newProperties.widths = glyphWidths;
          } else {
            newProperties.widths = this.buildCharCodeToWidth(metrics.widths, newProperties);
          }
          return new _fonts.Font(baseFontName, file, newProperties);
        });
      }
    }
    let fontName = descriptor.get("FontName");
    let baseFont = dict.get("BaseFont");
    if (typeof fontName === "string") {
      fontName = _primitives.Name.get(fontName);
    }
    if (typeof baseFont === "string") {
      baseFont = _primitives.Name.get(baseFont);
    }
    const fontNameStr = fontName?.name;
    const baseFontStr = baseFont?.name;
    if (!isType3Font && fontNameStr !== baseFontStr) {
      (0, _util.info)(`The FontDescriptor's FontName is "${fontNameStr}" but ` + `should be the same as the Font's BaseFont "${baseFontStr}".`);
      if (fontNameStr && baseFontStr && (baseFontStr.startsWith(fontNameStr) || !(0, _standard_fonts.isKnownFontName)(fontNameStr) && (0, _standard_fonts.isKnownFontName)(baseFontStr))) {
        fontName = null;
      }
    }
    fontName ||= baseFont;
    if (!(fontName instanceof _primitives.Name)) {
      throw new _util.FormatError("invalid font name");
    }
    let fontFile, subtype, length1, length2, length3;
    try {
      fontFile = descriptor.get("FontFile", "FontFile2", "FontFile3");
    } catch (ex) {
      if (!this.options.ignoreErrors) {
        throw ex;
      }
      (0, _util.warn)(`translateFont - fetching "${fontName.name}" font file: "${ex}".`);
      fontFile = new _stream.NullStream();
    }
    let isInternalFont = false;
    let glyphScaleFactors = null;
    let systemFontInfo = null;
    if (fontFile) {
      if (fontFile.dict) {
        const subtypeEntry = fontFile.dict.get("Subtype");
        if (subtypeEntry instanceof _primitives.Name) {
          subtype = subtypeEntry.name;
        }
        length1 = fontFile.dict.get("Length1");
        length2 = fontFile.dict.get("Length2");
        length3 = fontFile.dict.get("Length3");
      }
    } else if (cssFontInfo) {
      const standardFontName = (0, _xfa_fonts.getXfaFontName)(fontName.name);
      if (standardFontName) {
        cssFontInfo.fontFamily = `${cssFontInfo.fontFamily}-PdfJS-XFA`;
        cssFontInfo.metrics = standardFontName.metrics || null;
        glyphScaleFactors = standardFontName.factors || null;
        fontFile = await this.fetchStandardFontData(standardFontName.name);
        isInternalFont = !!fontFile;
        baseDict = dict = (0, _xfa_fonts.getXfaFontDict)(fontName.name);
        composite = true;
      }
    } else if (!isType3Font) {
      const standardFontName = (0, _standard_fonts.getStandardFontName)(fontName.name);
      if (standardFontName) {
        fontFile = await this.fetchStandardFontData(standardFontName);
        isInternalFont = !!fontFile;
      }
      if (!isInternalFont && this.options.useSystemFonts) {
        systemFontInfo = (0, _font_substitutions.getFontSubstitution)(this.systemFontCache, this.idFactory, this.options.standardFontDataUrl, fontName.name, standardFontName);
      }
    }
    properties = {
      type,
      name: fontName.name,
      subtype,
      file: fontFile,
      length1,
      length2,
      length3,
      isInternalFont,
      loadedName: baseDict.loadedName,
      composite,
      fixedPitch: false,
      fontMatrix: dict.getArray("FontMatrix") || _util.FONT_IDENTITY_MATRIX,
      firstChar,
      lastChar,
      toUnicode,
      bbox: descriptor.getArray("FontBBox") || dict.getArray("FontBBox"),
      ascent: descriptor.get("Ascent"),
      descent: descriptor.get("Descent"),
      xHeight: descriptor.get("XHeight") || 0,
      capHeight: descriptor.get("CapHeight") || 0,
      flags: descriptor.get("Flags"),
      italicAngle: descriptor.get("ItalicAngle") || 0,
      isType3Font,
      cssFontInfo,
      scaleFactors: glyphScaleFactors,
      systemFontInfo
    };
    if (composite) {
      const cidEncoding = baseDict.get("Encoding");
      if (cidEncoding instanceof _primitives.Name) {
        properties.cidEncoding = cidEncoding.name;
      }
      const cMap = await _cmap.CMapFactory.create({
        encoding: cidEncoding,
        fetchBuiltInCMap: this._fetchBuiltInCMapBound,
        useCMap: null
      });
      properties.cMap = cMap;
      properties.vertical = properties.cMap.vertical;
    }
    return this.extractDataStructures(dict, baseDict, properties).then(newProperties => {
      this.extractWidths(dict, descriptor, newProperties);
      return new _fonts.Font(fontName.name, fontFile, newProperties);
    });
  }
  static buildFontPaths(font, glyphs, handler, evaluatorOptions) {
    function buildPath(fontChar) {
      const glyphName = `${font.loadedName}_path_${fontChar}`;
      try {
        if (font.renderer.hasBuiltPath(fontChar)) {
          return;
        }
        handler.send("commonobj", [glyphName, "FontPath", font.renderer.getPathJs(fontChar)]);
      } catch (reason) {
        if (evaluatorOptions.ignoreErrors) {
          (0, _util.warn)(`buildFontPaths - ignoring ${glyphName} glyph: "${reason}".`);
          return;
        }
        throw reason;
      }
    }
    for (const glyph of glyphs) {
      buildPath(glyph.fontChar);
      const accent = glyph.accent;
      if (accent?.fontChar) {
        buildPath(accent.fontChar);
      }
    }
  }
  static get fallbackFontDict() {
    const dict = new _primitives.Dict();
    dict.set("BaseFont", _primitives.Name.get("Helvetica"));
    dict.set("Type", _primitives.Name.get("FallbackType"));
    dict.set("Subtype", _primitives.Name.get("FallbackType"));
    dict.set("Encoding", _primitives.Name.get("WinAnsiEncoding"));
    return (0, _util.shadow)(this, "fallbackFontDict", dict);
  }
}
exports.PartialEvaluator = PartialEvaluator;
class TranslatedFont {
  constructor({
    loadedName,
    font,
    dict,
    evaluatorOptions
  }) {
    this.loadedName = loadedName;
    this.font = font;
    this.dict = dict;
    this._evaluatorOptions = evaluatorOptions || DefaultPartialEvaluatorOptions;
    this.type3Loaded = null;
    this.type3Dependencies = font.isType3Font ? new Set() : null;
    this.sent = false;
  }
  send(handler) {
    if (this.sent) {
      return;
    }
    this.sent = true;
    handler.send("commonobj", [this.loadedName, "Font", this.font.exportData(this._evaluatorOptions.fontExtraProperties)]);
  }
  fallback(handler) {
    if (!this.font.data) {
      return;
    }
    this.font.disableFontFace = true;
    PartialEvaluator.buildFontPaths(this.font, this.font.glyphCacheValues, handler, this._evaluatorOptions);
  }
  loadType3Data(evaluator, resources, task) {
    if (this.type3Loaded) {
      return this.type3Loaded;
    }
    if (!this.font.isType3Font) {
      throw new Error("Must be a Type3 font.");
    }
    const type3Evaluator = evaluator.clone({
      ignoreErrors: false
    });
    type3Evaluator.parsingType3Font = true;
    const type3FontRefs = new _primitives.RefSet(evaluator.type3FontRefs);
    if (this.dict.objId && !type3FontRefs.has(this.dict.objId)) {
      type3FontRefs.put(this.dict.objId);
    }
    type3Evaluator.type3FontRefs = type3FontRefs;
    const translatedFont = this.font,
      type3Dependencies = this.type3Dependencies;
    let loadCharProcsPromise = Promise.resolve();
    const charProcs = this.dict.get("CharProcs");
    const fontResources = this.dict.get("Resources") || resources;
    const charProcOperatorList = Object.create(null);
    const fontBBox = _util.Util.normalizeRect(translatedFont.bbox || [0, 0, 0, 0]),
      width = fontBBox[2] - fontBBox[0],
      height = fontBBox[3] - fontBBox[1];
    const fontBBoxSize = Math.hypot(width, height);
    for (const key of charProcs.getKeys()) {
      loadCharProcsPromise = loadCharProcsPromise.then(() => {
        const glyphStream = charProcs.get(key);
        const operatorList = new _operator_list.OperatorList();
        return type3Evaluator.getOperatorList({
          stream: glyphStream,
          task,
          resources: fontResources,
          operatorList
        }).then(() => {
          if (operatorList.fnArray[0] === _util.OPS.setCharWidthAndBounds) {
            this._removeType3ColorOperators(operatorList, fontBBoxSize);
          }
          charProcOperatorList[key] = operatorList.getIR();
          for (const dependency of operatorList.dependencies) {
            type3Dependencies.add(dependency);
          }
        }).catch(function (reason) {
          (0, _util.warn)(`Type3 font resource "${key}" is not available.`);
          const dummyOperatorList = new _operator_list.OperatorList();
          charProcOperatorList[key] = dummyOperatorList.getIR();
        });
      });
    }
    this.type3Loaded = loadCharProcsPromise.then(() => {
      translatedFont.charProcOperatorList = charProcOperatorList;
      if (this._bbox) {
        translatedFont.isCharBBox = true;
        translatedFont.bbox = this._bbox;
      }
    });
    return this.type3Loaded;
  }
  _removeType3ColorOperators(operatorList, fontBBoxSize = NaN) {
    const charBBox = _util.Util.normalizeRect(operatorList.argsArray[0].slice(2)),
      width = charBBox[2] - charBBox[0],
      height = charBBox[3] - charBBox[1];
    const charBBoxSize = Math.hypot(width, height);
    if (width === 0 || height === 0) {
      operatorList.fnArray.splice(0, 1);
      operatorList.argsArray.splice(0, 1);
    } else if (fontBBoxSize === 0 || Math.round(charBBoxSize / fontBBoxSize) >= 10) {
      if (!this._bbox) {
        this._bbox = [Infinity, Infinity, -Infinity, -Infinity];
      }
      this._bbox[0] = Math.min(this._bbox[0], charBBox[0]);
      this._bbox[1] = Math.min(this._bbox[1], charBBox[1]);
      this._bbox[2] = Math.max(this._bbox[2], charBBox[2]);
      this._bbox[3] = Math.max(this._bbox[3], charBBox[3]);
    }
    let i = 0,
      ii = operatorList.length;
    while (i < ii) {
      switch (operatorList.fnArray[i]) {
        case _util.OPS.setCharWidthAndBounds:
          break;
        case _util.OPS.setStrokeColorSpace:
        case _util.OPS.setFillColorSpace:
        case _util.OPS.setStrokeColor:
        case _util.OPS.setStrokeColorN:
        case _util.OPS.setFillColor:
        case _util.OPS.setFillColorN:
        case _util.OPS.setStrokeGray:
        case _util.OPS.setFillGray:
        case _util.OPS.setStrokeRGBColor:
        case _util.OPS.setFillRGBColor:
        case _util.OPS.setStrokeCMYKColor:
        case _util.OPS.setFillCMYKColor:
        case _util.OPS.shadingFill:
        case _util.OPS.setRenderingIntent:
          operatorList.fnArray.splice(i, 1);
          operatorList.argsArray.splice(i, 1);
          ii--;
          continue;
        case _util.OPS.setGState:
          const [gStateObj] = operatorList.argsArray[i];
          let j = 0,
            jj = gStateObj.length;
          while (j < jj) {
            const [gStateKey] = gStateObj[j];
            switch (gStateKey) {
              case "TR":
              case "TR2":
              case "HT":
              case "BG":
              case "BG2":
              case "UCR":
              case "UCR2":
                gStateObj.splice(j, 1);
                jj--;
                continue;
            }
            j++;
          }
          break;
      }
      i++;
    }
  }
}
class StateManager {
  constructor(initialState = new EvalState()) {
    this.state = initialState;
    this.stateStack = [];
  }
  save() {
    const old = this.state;
    this.stateStack.push(this.state);
    this.state = old.clone();
  }
  restore() {
    const prev = this.stateStack.pop();
    if (prev) {
      this.state = prev;
    }
  }
  transform(args) {
    this.state.ctm = _util.Util.transform(this.state.ctm, args);
  }
}
class TextState {
  constructor() {
    this.ctm = new Float32Array(_util.IDENTITY_MATRIX);
    this.fontName = null;
    this.fontSize = 0;
    this.loadedName = null;
    this.font = null;
    this.fontMatrix = _util.FONT_IDENTITY_MATRIX;
    this.textMatrix = _util.IDENTITY_MATRIX.slice();
    this.textLineMatrix = _util.IDENTITY_MATRIX.slice();
    this.charSpacing = 0;
    this.wordSpacing = 0;
    this.leading = 0;
    this.textHScale = 1;
    this.textRise = 0;
  }
  setTextMatrix(a, b, c, d, e, f) {
    const m = this.textMatrix;
    m[0] = a;
    m[1] = b;
    m[2] = c;
    m[3] = d;
    m[4] = e;
    m[5] = f;
  }
  setTextLineMatrix(a, b, c, d, e, f) {
    const m = this.textLineMatrix;
    m[0] = a;
    m[1] = b;
    m[2] = c;
    m[3] = d;
    m[4] = e;
    m[5] = f;
  }
  translateTextMatrix(x, y) {
    const m = this.textMatrix;
    m[4] = m[0] * x + m[2] * y + m[4];
    m[5] = m[1] * x + m[3] * y + m[5];
  }
  translateTextLineMatrix(x, y) {
    const m = this.textLineMatrix;
    m[4] = m[0] * x + m[2] * y + m[4];
    m[5] = m[1] * x + m[3] * y + m[5];
  }
  carriageReturn() {
    this.translateTextLineMatrix(0, -this.leading);
    this.textMatrix = this.textLineMatrix.slice();
  }
  clone() {
    const clone = Object.create(this);
    clone.textMatrix = this.textMatrix.slice();
    clone.textLineMatrix = this.textLineMatrix.slice();
    clone.fontMatrix = this.fontMatrix.slice();
    return clone;
  }
}
class EvalState {
  constructor() {
    this.ctm = new Float32Array(_util.IDENTITY_MATRIX);
    this.font = null;
    this.textRenderingMode = _util.TextRenderingMode.FILL;
    this.fillColorSpace = _colorspace.ColorSpace.singletons.gray;
    this.strokeColorSpace = _colorspace.ColorSpace.singletons.gray;
  }
  clone() {
    return Object.create(this);
  }
}
class EvaluatorPreprocessor {
  static get opMap() {
    return (0, _util.shadow)(this, "opMap", {
      w: {
        id: _util.OPS.setLineWidth,
        numArgs: 1,
        variableArgs: false
      },
      J: {
        id: _util.OPS.setLineCap,
        numArgs: 1,
        variableArgs: false
      },
      j: {
        id: _util.OPS.setLineJoin,
        numArgs: 1,
        variableArgs: false
      },
      M: {
        id: _util.OPS.setMiterLimit,
        numArgs: 1,
        variableArgs: false
      },
      d: {
        id: _util.OPS.setDash,
        numArgs: 2,
        variableArgs: false
      },
      ri: {
        id: _util.OPS.setRenderingIntent,
        numArgs: 1,
        variableArgs: false
      },
      i: {
        id: _util.OPS.setFlatness,
        numArgs: 1,
        variableArgs: false
      },
      gs: {
        id: _util.OPS.setGState,
        numArgs: 1,
        variableArgs: false
      },
      q: {
        id: _util.OPS.save,
        numArgs: 0,
        variableArgs: false
      },
      Q: {
        id: _util.OPS.restore,
        numArgs: 0,
        variableArgs: false
      },
      cm: {
        id: _util.OPS.transform,
        numArgs: 6,
        variableArgs: false
      },
      m: {
        id: _util.OPS.moveTo,
        numArgs: 2,
        variableArgs: false
      },
      l: {
        id: _util.OPS.lineTo,
        numArgs: 2,
        variableArgs: false
      },
      c: {
        id: _util.OPS.curveTo,
        numArgs: 6,
        variableArgs: false
      },
      v: {
        id: _util.OPS.curveTo2,
        numArgs: 4,
        variableArgs: false
      },
      y: {
        id: _util.OPS.curveTo3,
        numArgs: 4,
        variableArgs: false
      },
      h: {
        id: _util.OPS.closePath,
        numArgs: 0,
        variableArgs: false
      },
      re: {
        id: _util.OPS.rectangle,
        numArgs: 4,
        variableArgs: false
      },
      S: {
        id: _util.OPS.stroke,
        numArgs: 0,
        variableArgs: false
      },
      s: {
        id: _util.OPS.closeStroke,
        numArgs: 0,
        variableArgs: false
      },
      f: {
        id: _util.OPS.fill,
        numArgs: 0,
        variableArgs: false
      },
      F: {
        id: _util.OPS.fill,
        numArgs: 0,
        variableArgs: false
      },
      "f*": {
        id: _util.OPS.eoFill,
        numArgs: 0,
        variableArgs: false
      },
      B: {
        id: _util.OPS.fillStroke,
        numArgs: 0,
        variableArgs: false
      },
      "B*": {
        id: _util.OPS.eoFillStroke,
        numArgs: 0,
        variableArgs: false
      },
      b: {
        id: _util.OPS.closeFillStroke,
        numArgs: 0,
        variableArgs: false
      },
      "b*": {
        id: _util.OPS.closeEOFillStroke,
        numArgs: 0,
        variableArgs: false
      },
      n: {
        id: _util.OPS.endPath,
        numArgs: 0,
        variableArgs: false
      },
      W: {
        id: _util.OPS.clip,
        numArgs: 0,
        variableArgs: false
      },
      "W*": {
        id: _util.OPS.eoClip,
        numArgs: 0,
        variableArgs: false
      },
      BT: {
        id: _util.OPS.beginText,
        numArgs: 0,
        variableArgs: false
      },
      ET: {
        id: _util.OPS.endText,
        numArgs: 0,
        variableArgs: false
      },
      Tc: {
        id: _util.OPS.setCharSpacing,
        numArgs: 1,
        variableArgs: false
      },
      Tw: {
        id: _util.OPS.setWordSpacing,
        numArgs: 1,
        variableArgs: false
      },
      Tz: {
        id: _util.OPS.setHScale,
        numArgs: 1,
        variableArgs: false
      },
      TL: {
        id: _util.OPS.setLeading,
        numArgs: 1,
        variableArgs: false
      },
      Tf: {
        id: _util.OPS.setFont,
        numArgs: 2,
        variableArgs: false
      },
      Tr: {
        id: _util.OPS.setTextRenderingMode,
        numArgs: 1,
        variableArgs: false
      },
      Ts: {
        id: _util.OPS.setTextRise,
        numArgs: 1,
        variableArgs: false
      },
      Td: {
        id: _util.OPS.moveText,
        numArgs: 2,
        variableArgs: false
      },
      TD: {
        id: _util.OPS.setLeadingMoveText,
        numArgs: 2,
        variableArgs: false
      },
      Tm: {
        id: _util.OPS.setTextMatrix,
        numArgs: 6,
        variableArgs: false
      },
      "T*": {
        id: _util.OPS.nextLine,
        numArgs: 0,
        variableArgs: false
      },
      Tj: {
        id: _util.OPS.showText,
        numArgs: 1,
        variableArgs: false
      },
      TJ: {
        id: _util.OPS.showSpacedText,
        numArgs: 1,
        variableArgs: false
      },
      "'": {
        id: _util.OPS.nextLineShowText,
        numArgs: 1,
        variableArgs: false
      },
      '"': {
        id: _util.OPS.nextLineSetSpacingShowText,
        numArgs: 3,
        variableArgs: false
      },
      d0: {
        id: _util.OPS.setCharWidth,
        numArgs: 2,
        variableArgs: false
      },
      d1: {
        id: _util.OPS.setCharWidthAndBounds,
        numArgs: 6,
        variableArgs: false
      },
      CS: {
        id: _util.OPS.setStrokeColorSpace,
        numArgs: 1,
        variableArgs: false
      },
      cs: {
        id: _util.OPS.setFillColorSpace,
        numArgs: 1,
        variableArgs: false
      },
      SC: {
        id: _util.OPS.setStrokeColor,
        numArgs: 4,
        variableArgs: true
      },
      SCN: {
        id: _util.OPS.setStrokeColorN,
        numArgs: 33,
        variableArgs: true
      },
      sc: {
        id: _util.OPS.setFillColor,
        numArgs: 4,
        variableArgs: true
      },
      scn: {
        id: _util.OPS.setFillColorN,
        numArgs: 33,
        variableArgs: true
      },
      G: {
        id: _util.OPS.setStrokeGray,
        numArgs: 1,
        variableArgs: false
      },
      g: {
        id: _util.OPS.setFillGray,
        numArgs: 1,
        variableArgs: false
      },
      RG: {
        id: _util.OPS.setStrokeRGBColor,
        numArgs: 3,
        variableArgs: false
      },
      rg: {
        id: _util.OPS.setFillRGBColor,
        numArgs: 3,
        variableArgs: false
      },
      K: {
        id: _util.OPS.setStrokeCMYKColor,
        numArgs: 4,
        variableArgs: false
      },
      k: {
        id: _util.OPS.setFillCMYKColor,
        numArgs: 4,
        variableArgs: false
      },
      sh: {
        id: _util.OPS.shadingFill,
        numArgs: 1,
        variableArgs: false
      },
      BI: {
        id: _util.OPS.beginInlineImage,
        numArgs: 0,
        variableArgs: false
      },
      ID: {
        id: _util.OPS.beginImageData,
        numArgs: 0,
        variableArgs: false
      },
      EI: {
        id: _util.OPS.endInlineImage,
        numArgs: 1,
        variableArgs: false
      },
      Do: {
        id: _util.OPS.paintXObject,
        numArgs: 1,
        variableArgs: false
      },
      MP: {
        id: _util.OPS.markPoint,
        numArgs: 1,
        variableArgs: false
      },
      DP: {
        id: _util.OPS.markPointProps,
        numArgs: 2,
        variableArgs: false
      },
      BMC: {
        id: _util.OPS.beginMarkedContent,
        numArgs: 1,
        variableArgs: false
      },
      BDC: {
        id: _util.OPS.beginMarkedContentProps,
        numArgs: 2,
        variableArgs: false
      },
      EMC: {
        id: _util.OPS.endMarkedContent,
        numArgs: 0,
        variableArgs: false
      },
      BX: {
        id: _util.OPS.beginCompat,
        numArgs: 0,
        variableArgs: false
      },
      EX: {
        id: _util.OPS.endCompat,
        numArgs: 0,
        variableArgs: false
      },
      BM: null,
      BD: null,
      true: null,
      fa: null,
      fal: null,
      fals: null,
      false: null,
      nu: null,
      nul: null,
      null: null
    });
  }
  static MAX_INVALID_PATH_OPS = 10;
  constructor(stream, xref, stateManager = new StateManager()) {
    this.parser = new _parser.Parser({
      lexer: new _parser.Lexer(stream, EvaluatorPreprocessor.opMap),
      xref
    });
    this.stateManager = stateManager;
    this.nonProcessedArgs = [];
    this._isPathOp = false;
    this._numInvalidPathOPS = 0;
  }
  get savedStatesDepth() {
    return this.stateManager.stateStack.length;
  }
  read(operation) {
    let args = operation.args;
    while (true) {
      const obj = this.parser.getObj();
      if (obj instanceof _primitives.Cmd) {
        const cmd = obj.cmd;
        const opSpec = EvaluatorPreprocessor.opMap[cmd];
        if (!opSpec) {
          (0, _util.warn)(`Unknown command "${cmd}".`);
          continue;
        }
        const fn = opSpec.id;
        const numArgs = opSpec.numArgs;
        let argsLength = args !== null ? args.length : 0;
        if (!this._isPathOp) {
          this._numInvalidPathOPS = 0;
        }
        this._isPathOp = fn >= _util.OPS.moveTo && fn <= _util.OPS.endPath;
        if (!opSpec.variableArgs) {
          if (argsLength !== numArgs) {
            const nonProcessedArgs = this.nonProcessedArgs;
            while (argsLength > numArgs) {
              nonProcessedArgs.push(args.shift());
              argsLength--;
            }
            while (argsLength < numArgs && nonProcessedArgs.length !== 0) {
              if (args === null) {
                args = [];
              }
              args.unshift(nonProcessedArgs.pop());
              argsLength++;
            }
          }
          if (argsLength < numArgs) {
            const partialMsg = `command ${cmd}: expected ${numArgs} args, ` + `but received ${argsLength} args.`;
            if (this._isPathOp && ++this._numInvalidPathOPS > EvaluatorPreprocessor.MAX_INVALID_PATH_OPS) {
              throw new _util.FormatError(`Invalid ${partialMsg}`);
            }
            (0, _util.warn)(`Skipping ${partialMsg}`);
            if (args !== null) {
              args.length = 0;
            }
            continue;
          }
        } else if (argsLength > numArgs) {
          (0, _util.info)(`Command ${cmd}: expected [0, ${numArgs}] args, ` + `but received ${argsLength} args.`);
        }
        this.preprocessCommand(fn, args);
        operation.fn = fn;
        operation.args = args;
        return true;
      }
      if (obj === _primitives.EOF) {
        return false;
      }
      if (obj !== null) {
        if (args === null) {
          args = [];
        }
        args.push(obj);
        if (args.length > 33) {
          throw new _util.FormatError("Too many arguments");
        }
      }
    }
  }
  preprocessCommand(fn, args) {
    switch (fn | 0) {
      case _util.OPS.save:
        this.stateManager.save();
        break;
      case _util.OPS.restore:
        this.stateManager.restore();
        break;
      case _util.OPS.transform:
        this.stateManager.transform(args);
        break;
    }
  }
}
exports.EvaluatorPreprocessor = EvaluatorPreprocessor;

/***/ }),
/* 14 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.IdentityCMap = exports.CMapFactory = exports.CMap = void 0;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(4);
var _base_stream = __w_pdfjs_require__(5);
var _binary_cmap = __w_pdfjs_require__(15);
var _parser = __w_pdfjs_require__(16);
var _core_utils = __w_pdfjs_require__(3);
var _stream = __w_pdfjs_require__(8);
const BUILT_IN_CMAPS = ["Adobe-GB1-UCS2", "Adobe-CNS1-UCS2", "Adobe-Japan1-UCS2", "Adobe-Korea1-UCS2", "78-EUC-H", "78-EUC-V", "78-H", "78-RKSJ-H", "78-RKSJ-V", "78-V", "78ms-RKSJ-H", "78ms-RKSJ-V", "83pv-RKSJ-H", "90ms-RKSJ-H", "90ms-RKSJ-V", "90msp-RKSJ-H", "90msp-RKSJ-V", "90pv-RKSJ-H", "90pv-RKSJ-V", "Add-H", "Add-RKSJ-H", "Add-RKSJ-V", "Add-V", "Adobe-CNS1-0", "Adobe-CNS1-1", "Adobe-CNS1-2", "Adobe-CNS1-3", "Adobe-CNS1-4", "Adobe-CNS1-5", "Adobe-CNS1-6", "Adobe-GB1-0", "Adobe-GB1-1", "Adobe-GB1-2", "Adobe-GB1-3", "Adobe-GB1-4", "Adobe-GB1-5", "Adobe-Japan1-0", "Adobe-Japan1-1", "Adobe-Japan1-2", "Adobe-Japan1-3", "Adobe-Japan1-4", "Adobe-Japan1-5", "Adobe-Japan1-6", "Adobe-Korea1-0", "Adobe-Korea1-1", "Adobe-Korea1-2", "B5-H", "B5-V", "B5pc-H", "B5pc-V", "CNS-EUC-H", "CNS-EUC-V", "CNS1-H", "CNS1-V", "CNS2-H", "CNS2-V", "ETHK-B5-H", "ETHK-B5-V", "ETen-B5-H", "ETen-B5-V", "ETenms-B5-H", "ETenms-B5-V", "EUC-H", "EUC-V", "Ext-H", "Ext-RKSJ-H", "Ext-RKSJ-V", "Ext-V", "GB-EUC-H", "GB-EUC-V", "GB-H", "GB-V", "GBK-EUC-H", "GBK-EUC-V", "GBK2K-H", "GBK2K-V", "GBKp-EUC-H", "GBKp-EUC-V", "GBT-EUC-H", "GBT-EUC-V", "GBT-H", "GBT-V", "GBTpc-EUC-H", "GBTpc-EUC-V", "GBpc-EUC-H", "GBpc-EUC-V", "H", "HKdla-B5-H", "HKdla-B5-V", "HKdlb-B5-H", "HKdlb-B5-V", "HKgccs-B5-H", "HKgccs-B5-V", "HKm314-B5-H", "HKm314-B5-V", "HKm471-B5-H", "HKm471-B5-V", "HKscs-B5-H", "HKscs-B5-V", "Hankaku", "Hiragana", "KSC-EUC-H", "KSC-EUC-V", "KSC-H", "KSC-Johab-H", "KSC-Johab-V", "KSC-V", "KSCms-UHC-H", "KSCms-UHC-HW-H", "KSCms-UHC-HW-V", "KSCms-UHC-V", "KSCpc-EUC-H", "KSCpc-EUC-V", "Katakana", "NWP-H", "NWP-V", "RKSJ-H", "RKSJ-V", "Roman", "UniCNS-UCS2-H", "UniCNS-UCS2-V", "UniCNS-UTF16-H", "UniCNS-UTF16-V", "UniCNS-UTF32-H", "UniCNS-UTF32-V", "UniCNS-UTF8-H", "UniCNS-UTF8-V", "UniGB-UCS2-H", "UniGB-UCS2-V", "UniGB-UTF16-H", "UniGB-UTF16-V", "UniGB-UTF32-H", "UniGB-UTF32-V", "UniGB-UTF8-H", "UniGB-UTF8-V", "UniJIS-UCS2-H", "UniJIS-UCS2-HW-H", "UniJIS-UCS2-HW-V", "UniJIS-UCS2-V", "UniJIS-UTF16-H", "UniJIS-UTF16-V", "UniJIS-UTF32-H", "UniJIS-UTF32-V", "UniJIS-UTF8-H", "UniJIS-UTF8-V", "UniJIS2004-UTF16-H", "UniJIS2004-UTF16-V", "UniJIS2004-UTF32-H", "UniJIS2004-UTF32-V", "UniJIS2004-UTF8-H", "UniJIS2004-UTF8-V", "UniJISPro-UCS2-HW-V", "UniJISPro-UCS2-V", "UniJISPro-UTF8-V", "UniJISX0213-UTF32-H", "UniJISX0213-UTF32-V", "UniJISX02132004-UTF32-H", "UniJISX02132004-UTF32-V", "UniKS-UCS2-H", "UniKS-UCS2-V", "UniKS-UTF16-H", "UniKS-UTF16-V", "UniKS-UTF32-H", "UniKS-UTF32-V", "UniKS-UTF8-H", "UniKS-UTF8-V", "V", "WP-Symbol"];
const MAX_MAP_RANGE = 2 ** 24 - 1;
class CMap {
  constructor(builtInCMap = false) {
    this.codespaceRanges = [[], [], [], []];
    this.numCodespaceRanges = 0;
    this._map = [];
    this.name = "";
    this.vertical = false;
    this.useCMap = null;
    this.builtInCMap = builtInCMap;
  }
  addCodespaceRange(n, low, high) {
    this.codespaceRanges[n - 1].push(low, high);
    this.numCodespaceRanges++;
  }
  mapCidRange(low, high, dstLow) {
    if (high - low > MAX_MAP_RANGE) {
      throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE.");
    }
    while (low <= high) {
      this._map[low++] = dstLow++;
    }
  }
  mapBfRange(low, high, dstLow) {
    if (high - low > MAX_MAP_RANGE) {
      throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE.");
    }
    const lastByte = dstLow.length - 1;
    while (low <= high) {
      this._map[low++] = dstLow;
      const nextCharCode = dstLow.charCodeAt(lastByte) + 1;
      if (nextCharCode > 0xff) {
        dstLow = dstLow.substring(0, lastByte - 1) + String.fromCharCode(dstLow.charCodeAt(lastByte - 1) + 1) + "\x00";
        continue;
      }
      dstLow = dstLow.substring(0, lastByte) + String.fromCharCode(nextCharCode);
    }
  }
  mapBfRangeToArray(low, high, array) {
    if (high - low > MAX_MAP_RANGE) {
      throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.");
    }
    const ii = array.length;
    let i = 0;
    while (low <= high && i < ii) {
      this._map[low] = array[i++];
      ++low;
    }
  }
  mapOne(src, dst) {
    this._map[src] = dst;
  }
  lookup(code) {
    return this._map[code];
  }
  contains(code) {
    return this._map[code] !== undefined;
  }
  forEach(callback) {
    const map = this._map;
    const length = map.length;
    if (length <= 0x10000) {
      for (let i = 0; i < length; i++) {
        if (map[i] !== undefined) {
          callback(i, map[i]);
        }
      }
    } else {
      for (const i in map) {
        callback(i, map[i]);
      }
    }
  }
  charCodeOf(value) {
    const map = this._map;
    if (map.length <= 0x10000) {
      return map.indexOf(value);
    }
    for (const charCode in map) {
      if (map[charCode] === value) {
        return charCode | 0;
      }
    }
    return -1;
  }
  getMap() {
    return this._map;
  }
  readCharCode(str, offset, out) {
    let c = 0;
    const codespaceRanges = this.codespaceRanges;
    for (let n = 0, nn = codespaceRanges.length; n < nn; n++) {
      c = (c << 8 | str.charCodeAt(offset + n)) >>> 0;
      const codespaceRange = codespaceRanges[n];
      for (let k = 0, kk = codespaceRange.length; k < kk;) {
        const low = codespaceRange[k++];
        const high = codespaceRange[k++];
        if (c >= low && c <= high) {
          out.charcode = c;
          out.length = n + 1;
          return;
        }
      }
    }
    out.charcode = 0;
    out.length = 1;
  }
  getCharCodeLength(charCode) {
    const codespaceRanges = this.codespaceRanges;
    for (let n = 0, nn = codespaceRanges.length; n < nn; n++) {
      const codespaceRange = codespaceRanges[n];
      for (let k = 0, kk = codespaceRange.length; k < kk;) {
        const low = codespaceRange[k++];
        const high = codespaceRange[k++];
        if (charCode >= low && charCode <= high) {
          return n + 1;
        }
      }
    }
    return 1;
  }
  get length() {
    return this._map.length;
  }
  get isIdentityCMap() {
    if (!(this.name === "Identity-H" || this.name === "Identity-V")) {
      return false;
    }
    if (this._map.length !== 0x10000) {
      return false;
    }
    for (let i = 0; i < 0x10000; i++) {
      if (this._map[i] !== i) {
        return false;
      }
    }
    return true;
  }
}
exports.CMap = CMap;
class IdentityCMap extends CMap {
  constructor(vertical, n) {
    super();
    this.vertical = vertical;
    this.addCodespaceRange(n, 0, 0xffff);
  }
  mapCidRange(low, high, dstLow) {
    (0, _util.unreachable)("should not call mapCidRange");
  }
  mapBfRange(low, high, dstLow) {
    (0, _util.unreachable)("should not call mapBfRange");
  }
  mapBfRangeToArray(low, high, array) {
    (0, _util.unreachable)("should not call mapBfRangeToArray");
  }
  mapOne(src, dst) {
    (0, _util.unreachable)("should not call mapCidOne");
  }
  lookup(code) {
    return Number.isInteger(code) && code <= 0xffff ? code : undefined;
  }
  contains(code) {
    return Number.isInteger(code) && code <= 0xffff;
  }
  forEach(callback) {
    for (let i = 0; i <= 0xffff; i++) {
      callback(i, i);
    }
  }
  charCodeOf(value) {
    return Number.isInteger(value) && value <= 0xffff ? value : -1;
  }
  getMap() {
    const map = new Array(0x10000);
    for (let i = 0; i <= 0xffff; i++) {
      map[i] = i;
    }
    return map;
  }
  get length() {
    return 0x10000;
  }
  get isIdentityCMap() {
    (0, _util.unreachable)("should not access .isIdentityCMap");
  }
}
exports.IdentityCMap = IdentityCMap;
function strToInt(str) {
  let a = 0;
  for (let i = 0; i < str.length; i++) {
    a = a << 8 | str.charCodeAt(i);
  }
  return a >>> 0;
}
function expectString(obj) {
  if (typeof obj !== "string") {
    throw new _util.FormatError("Malformed CMap: expected string.");
  }
}
function expectInt(obj) {
  if (!Number.isInteger(obj)) {
    throw new _util.FormatError("Malformed CMap: expected int.");
  }
}
function parseBfChar(cMap, lexer) {
  while (true) {
    let obj = lexer.getObj();
    if (obj === _primitives.EOF) {
      break;
    }
    if ((0, _primitives.isCmd)(obj, "endbfchar")) {
      return;
    }
    expectString(obj);
    const src = strToInt(obj);
    obj = lexer.getObj();
    expectString(obj);
    const dst = obj;
    cMap.mapOne(src, dst);
  }
}
function parseBfRange(cMap, lexer) {
  while (true) {
    let obj = lexer.getObj();
    if (obj === _primitives.EOF) {
      break;
    }
    if ((0, _primitives.isCmd)(obj, "endbfrange")) {
      return;
    }
    expectString(obj);
    const low = strToInt(obj);
    obj = lexer.getObj();
    expectString(obj);
    const high = strToInt(obj);
    obj = lexer.getObj();
    if (Number.isInteger(obj) || typeof obj === "string") {
      const dstLow = Number.isInteger(obj) ? String.fromCharCode(obj) : obj;
      cMap.mapBfRange(low, high, dstLow);
    } else if ((0, _primitives.isCmd)(obj, "[")) {
      obj = lexer.getObj();
      const array = [];
      while (!(0, _primitives.isCmd)(obj, "]") && obj !== _primitives.EOF) {
        array.push(obj);
        obj = lexer.getObj();
      }
      cMap.mapBfRangeToArray(low, high, array);
    } else {
      break;
    }
  }
  throw new _util.FormatError("Invalid bf range.");
}
function parseCidChar(cMap, lexer) {
  while (true) {
    let obj = lexer.getObj();
    if (obj === _primitives.EOF) {
      break;
    }
    if ((0, _primitives.isCmd)(obj, "endcidchar")) {
      return;
    }
    expectString(obj);
    const src = strToInt(obj);
    obj = lexer.getObj();
    expectInt(obj);
    const dst = obj;
    cMap.mapOne(src, dst);
  }
}
function parseCidRange(cMap, lexer) {
  while (true) {
    let obj = lexer.getObj();
    if (obj === _primitives.EOF) {
      break;
    }
    if ((0, _primitives.isCmd)(obj, "endcidrange")) {
      return;
    }
    expectString(obj);
    const low = strToInt(obj);
    obj = lexer.getObj();
    expectString(obj);
    const high = strToInt(obj);
    obj = lexer.getObj();
    expectInt(obj);
    const dstLow = obj;
    cMap.mapCidRange(low, high, dstLow);
  }
}
function parseCodespaceRange(cMap, lexer) {
  while (true) {
    let obj = lexer.getObj();
    if (obj === _primitives.EOF) {
      break;
    }
    if ((0, _primitives.isCmd)(obj, "endcodespacerange")) {
      return;
    }
    if (typeof obj !== "string") {
      break;
    }
    const low = strToInt(obj);
    obj = lexer.getObj();
    if (typeof obj !== "string") {
      break;
    }
    const high = strToInt(obj);
    cMap.addCodespaceRange(obj.length, low, high);
  }
  throw new _util.FormatError("Invalid codespace range.");
}
function parseWMode(cMap, lexer) {
  const obj = lexer.getObj();
  if (Number.isInteger(obj)) {
    cMap.vertical = !!obj;
  }
}
function parseCMapName(cMap, lexer) {
  const obj = lexer.getObj();
  if (obj instanceof _primitives.Name) {
    cMap.name = obj.name;
  }
}
async function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) {
  let previous, embeddedUseCMap;
  objLoop: while (true) {
    try {
      const obj = lexer.getObj();
      if (obj === _primitives.EOF) {
        break;
      } else if (obj instanceof _primitives.Name) {
        if (obj.name === "WMode") {
          parseWMode(cMap, lexer);
        } else if (obj.name === "CMapName") {
          parseCMapName(cMap, lexer);
        }
        previous = obj;
      } else if (obj instanceof _primitives.Cmd) {
        switch (obj.cmd) {
          case "endcmap":
            break objLoop;
          case "usecmap":
            if (previous instanceof _primitives.Name) {
              embeddedUseCMap = previous.name;
            }
            break;
          case "begincodespacerange":
            parseCodespaceRange(cMap, lexer);
            break;
          case "beginbfchar":
            parseBfChar(cMap, lexer);
            break;
          case "begincidchar":
            parseCidChar(cMap, lexer);
            break;
          case "beginbfrange":
            parseBfRange(cMap, lexer);
            break;
          case "begincidrange":
            parseCidRange(cMap, lexer);
            break;
        }
      }
    } catch (ex) {
      if (ex instanceof _core_utils.MissingDataException) {
        throw ex;
      }
      (0, _util.warn)("Invalid cMap data: " + ex);
      continue;
    }
  }
  if (!useCMap && embeddedUseCMap) {
    useCMap = embeddedUseCMap;
  }
  if (useCMap) {
    return extendCMap(cMap, fetchBuiltInCMap, useCMap);
  }
  return cMap;
}
async function extendCMap(cMap, fetchBuiltInCMap, useCMap) {
  cMap.useCMap = await createBuiltInCMap(useCMap, fetchBuiltInCMap);
  if (cMap.numCodespaceRanges === 0) {
    const useCodespaceRanges = cMap.useCMap.codespaceRanges;
    for (let i = 0; i < useCodespaceRanges.length; i++) {
      cMap.codespaceRanges[i] = useCodespaceRanges[i].slice();
    }
    cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges;
  }
  cMap.useCMap.forEach(function (key, value) {
    if (!cMap.contains(key)) {
      cMap.mapOne(key, cMap.useCMap.lookup(key));
    }
  });
  return cMap;
}
async function createBuiltInCMap(name, fetchBuiltInCMap) {
  if (name === "Identity-H") {
    return new IdentityCMap(false, 2);
  } else if (name === "Identity-V") {
    return new IdentityCMap(true, 2);
  }
  if (!BUILT_IN_CMAPS.includes(name)) {
    throw new Error("Unknown CMap name: " + name);
  }
  if (!fetchBuiltInCMap) {
    throw new Error("Built-in CMap parameters are not provided.");
  }
  const {
    cMapData,
    compressionType
  } = await fetchBuiltInCMap(name);
  const cMap = new CMap(true);
  if (compressionType === _util.CMapCompressionType.BINARY) {
    return new _binary_cmap.BinaryCMapReader().process(cMapData, cMap, useCMap => {
      return extendCMap(cMap, fetchBuiltInCMap, useCMap);
    });
  }
  if (compressionType === _util.CMapCompressionType.NONE) {
    const lexer = new _parser.Lexer(new _stream.Stream(cMapData));
    return parseCMap(cMap, lexer, fetchBuiltInCMap, null);
  }
  throw new Error(`Invalid CMap "compressionType" value: ${compressionType}`);
}
class CMapFactory {
  static async create({
    encoding,
    fetchBuiltInCMap,
    useCMap
  }) {
    if (encoding instanceof _primitives.Name) {
      return createBuiltInCMap(encoding.name, fetchBuiltInCMap);
    } else if (encoding instanceof _base_stream.BaseStream) {
      const parsedCMap = await parseCMap(new CMap(), new _parser.Lexer(encoding), fetchBuiltInCMap, useCMap);
      if (parsedCMap.isIdentityCMap) {
        return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap);
      }
      return parsedCMap;
    }
    throw new Error("Encoding required.");
  }
}
exports.CMapFactory = CMapFactory;

/***/ }),
/* 15 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.BinaryCMapReader = void 0;
var _util = __w_pdfjs_require__(2);
function hexToInt(a, size) {
  let n = 0;
  for (let i = 0; i <= size; i++) {
    n = n << 8 | a[i];
  }
  return n >>> 0;
}
function hexToStr(a, size) {
  if (size === 1) {
    return String.fromCharCode(a[0], a[1]);
  }
  if (size === 3) {
    return String.fromCharCode(a[0], a[1], a[2], a[3]);
  }
  return String.fromCharCode(...a.subarray(0, size + 1));
}
function addHex(a, b, size) {
  let c = 0;
  for (let i = size; i >= 0; i--) {
    c += a[i] + b[i];
    a[i] = c & 255;
    c >>= 8;
  }
}
function incHex(a, size) {
  let c = 1;
  for (let i = size; i >= 0 && c > 0; i--) {
    c += a[i];
    a[i] = c & 255;
    c >>= 8;
  }
}
const MAX_NUM_SIZE = 16;
const MAX_ENCODED_NUM_SIZE = 19;
class BinaryCMapStream {
  constructor(data) {
    this.buffer = data;
    this.pos = 0;
    this.end = data.length;
    this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE);
  }
  readByte() {
    if (this.pos >= this.end) {
      return -1;
    }
    return this.buffer[this.pos++];
  }
  readNumber() {
    let n = 0;
    let last;
    do {
      const b = this.readByte();
      if (b < 0) {
        throw new _util.FormatError("unexpected EOF in bcmap");
      }
      last = !(b & 0x80);
      n = n << 7 | b & 0x7f;
    } while (!last);
    return n;
  }
  readSigned() {
    const n = this.readNumber();
    return n & 1 ? ~(n >>> 1) : n >>> 1;
  }
  readHex(num, size) {
    num.set(this.buffer.subarray(this.pos, this.pos + size + 1));
    this.pos += size + 1;
  }
  readHexNumber(num, size) {
    let last;
    const stack = this.tmpBuf;
    let sp = 0;
    do {
      const b = this.readByte();
      if (b < 0) {
        throw new _util.FormatError("unexpected EOF in bcmap");
      }
      last = !(b & 0x80);
      stack[sp++] = b & 0x7f;
    } while (!last);
    let i = size,
      buffer = 0,
      bufferSize = 0;
    while (i >= 0) {
      while (bufferSize < 8 && stack.length > 0) {
        buffer |= stack[--sp] << bufferSize;
        bufferSize += 7;
      }
      num[i] = buffer & 255;
      i--;
      buffer >>= 8;
      bufferSize -= 8;
    }
  }
  readHexSigned(num, size) {
    this.readHexNumber(num, size);
    const sign = num[size] & 1 ? 255 : 0;
    let c = 0;
    for (let i = 0; i <= size; i++) {
      c = (c & 1) << 8 | num[i];
      num[i] = c >> 1 ^ sign;
    }
  }
  readString() {
    const len = this.readNumber(),
      buf = new Array(len);
    for (let i = 0; i < len; i++) {
      buf[i] = this.readNumber();
    }
    return String.fromCharCode(...buf);
  }
}
class BinaryCMapReader {
  async process(data, cMap, extend) {
    const stream = new BinaryCMapStream(data);
    const header = stream.readByte();
    cMap.vertical = !!(header & 1);
    let useCMap = null;
    const start = new Uint8Array(MAX_NUM_SIZE);
    const end = new Uint8Array(MAX_NUM_SIZE);
    const char = new Uint8Array(MAX_NUM_SIZE);
    const charCode = new Uint8Array(MAX_NUM_SIZE);
    const tmp = new Uint8Array(MAX_NUM_SIZE);
    let code;
    let b;
    while ((b = stream.readByte()) >= 0) {
      const type = b >> 5;
      if (type === 7) {
        switch (b & 0x1f) {
          case 0:
            stream.readString();
            break;
          case 1:
            useCMap = stream.readString();
            break;
        }
        continue;
      }
      const sequence = !!(b & 0x10);
      const dataSize = b & 15;
      if (dataSize + 1 > MAX_NUM_SIZE) {
        throw new Error("BinaryCMapReader.process: Invalid dataSize.");
      }
      const ucs2DataSize = 1;
      const subitemsCount = stream.readNumber();
      switch (type) {
        case 0:
          stream.readHex(start, dataSize);
          stream.readHexNumber(end, dataSize);
          addHex(end, start, dataSize);
          cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize));
          for (let i = 1; i < subitemsCount; i++) {
            incHex(end, dataSize);
            stream.readHexNumber(start, dataSize);
            addHex(start, end, dataSize);
            stream.readHexNumber(end, dataSize);
            addHex(end, start, dataSize);
            cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize));
          }
          break;
        case 1:
          stream.readHex(start, dataSize);
          stream.readHexNumber(end, dataSize);
          addHex(end, start, dataSize);
          stream.readNumber();
          for (let i = 1; i < subitemsCount; i++) {
            incHex(end, dataSize);
            stream.readHexNumber(start, dataSize);
            addHex(start, end, dataSize);
            stream.readHexNumber(end, dataSize);
            addHex(end, start, dataSize);
            stream.readNumber();
          }
          break;
        case 2:
          stream.readHex(char, dataSize);
          code = stream.readNumber();
          cMap.mapOne(hexToInt(char, dataSize), code);
          for (let i = 1; i < subitemsCount; i++) {
            incHex(char, dataSize);
            if (!sequence) {
              stream.readHexNumber(tmp, dataSize);
              addHex(char, tmp, dataSize);
            }
            code = stream.readSigned() + (code + 1);
            cMap.mapOne(hexToInt(char, dataSize), code);
          }
          break;
        case 3:
          stream.readHex(start, dataSize);
          stream.readHexNumber(end, dataSize);
          addHex(end, start, dataSize);
          code = stream.readNumber();
          cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code);
          for (let i = 1; i < subitemsCount; i++) {
            incHex(end, dataSize);
            if (!sequence) {
              stream.readHexNumber(start, dataSize);
              addHex(start, end, dataSize);
            } else {
              start.set(end);
            }
            stream.readHexNumber(end, dataSize);
            addHex(end, start, dataSize);
            code = stream.readNumber();
            cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code);
          }
          break;
        case 4:
          stream.readHex(char, ucs2DataSize);
          stream.readHex(charCode, dataSize);
          cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize));
          for (let i = 1; i < subitemsCount; i++) {
            incHex(char, ucs2DataSize);
            if (!sequence) {
              stream.readHexNumber(tmp, ucs2DataSize);
              addHex(char, tmp, ucs2DataSize);
            }
            incHex(charCode, dataSize);
            stream.readHexSigned(tmp, dataSize);
            addHex(charCode, tmp, dataSize);
            cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize));
          }
          break;
        case 5:
          stream.readHex(start, ucs2DataSize);
          stream.readHexNumber(end, ucs2DataSize);
          addHex(end, start, ucs2DataSize);
          stream.readHex(charCode, dataSize);
          cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize));
          for (let i = 1; i < subitemsCount; i++) {
            incHex(end, ucs2DataSize);
            if (!sequence) {
              stream.readHexNumber(start, ucs2DataSize);
              addHex(start, end, ucs2DataSize);
            } else {
              start.set(end);
            }
            stream.readHexNumber(end, ucs2DataSize);
            addHex(end, start, ucs2DataSize);
            stream.readHex(charCode, dataSize);
            cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize));
          }
          break;
        default:
          throw new Error(`BinaryCMapReader.process - unknown type: ${type}`);
      }
    }
    if (useCMap) {
      return extend(useCMap);
    }
    return cMap;
  }
}
exports.BinaryCMapReader = BinaryCMapReader;

/***/ }),
/* 16 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.Parser = exports.Linearization = exports.Lexer = void 0;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(4);
var _core_utils = __w_pdfjs_require__(3);
var _stream = __w_pdfjs_require__(8);
var _ascii_85_stream = __w_pdfjs_require__(17);
var _ascii_hex_stream = __w_pdfjs_require__(19);
var _ccitt_stream = __w_pdfjs_require__(20);
var _flate_stream = __w_pdfjs_require__(22);
var _jbig2_stream = __w_pdfjs_require__(23);
var _jpeg_stream = __w_pdfjs_require__(26);
var _jpx_stream = __w_pdfjs_require__(29);
var _lzw_stream = __w_pdfjs_require__(31);
var _predictor_stream = __w_pdfjs_require__(32);
var _run_length_stream = __w_pdfjs_require__(33);
const MAX_LENGTH_TO_CACHE = 1000;
function getInlineImageCacheKey(bytes) {
  const strBuf = [],
    ii = bytes.length;
  let i = 0;
  while (i < ii - 1) {
    strBuf.push(bytes[i++] << 8 | bytes[i++]);
  }
  if (i < ii) {
    strBuf.push(bytes[i]);
  }
  return ii + "_" + String.fromCharCode.apply(null, strBuf);
}
class Parser {
  constructor({
    lexer,
    xref,
    allowStreams = false,
    recoveryMode = false
  }) {
    this.lexer = lexer;
    this.xref = xref;
    this.allowStreams = allowStreams;
    this.recoveryMode = recoveryMode;
    this.imageCache = Object.create(null);
    this._imageId = 0;
    this.refill();
  }
  refill() {
    this.buf1 = this.lexer.getObj();
    this.buf2 = this.lexer.getObj();
  }
  shift() {
    if (this.buf2 instanceof _primitives.Cmd && this.buf2.cmd === "ID") {
      this.buf1 = this.buf2;
      this.buf2 = null;
    } else {
      this.buf1 = this.buf2;
      this.buf2 = this.lexer.getObj();
    }
  }
  tryShift() {
    try {
      this.shift();
      return true;
    } catch (e) {
      if (e instanceof _core_utils.MissingDataException) {
        throw e;
      }
      return false;
    }
  }
  getObj(cipherTransform = null) {
    const buf1 = this.buf1;
    this.shift();
    if (buf1 instanceof _primitives.Cmd) {
      switch (buf1.cmd) {
        case "BI":
          return this.makeInlineImage(cipherTransform);
        case "[":
          const array = [];
          while (!(0, _primitives.isCmd)(this.buf1, "]") && this.buf1 !== _primitives.EOF) {
            array.push(this.getObj(cipherTransform));
          }
          if (this.buf1 === _primitives.EOF) {
            if (this.recoveryMode) {
              return array;
            }
            throw new _core_utils.ParserEOFException("End of file inside array.");
          }
          this.shift();
          return array;
        case "<<":
          const dict = new _primitives.Dict(this.xref);
          while (!(0, _primitives.isCmd)(this.buf1, ">>") && this.buf1 !== _primitives.EOF) {
            if (!(this.buf1 instanceof _primitives.Name)) {
              (0, _util.info)("Malformed dictionary: key must be a name object");
              this.shift();
              continue;
            }
            const key = this.buf1.name;
            this.shift();
            if (this.buf1 === _primitives.EOF) {
              break;
            }
            dict.set(key, this.getObj(cipherTransform));
          }
          if (this.buf1 === _primitives.EOF) {
            if (this.recoveryMode) {
              return dict;
            }
            throw new _core_utils.ParserEOFException("End of file inside dictionary.");
          }
          if ((0, _primitives.isCmd)(this.buf2, "stream")) {
            return this.allowStreams ? this.makeStream(dict, cipherTransform) : dict;
          }
          this.shift();
          return dict;
        default:
          return buf1;
      }
    }
    if (Number.isInteger(buf1)) {
      if (Number.isInteger(this.buf1) && (0, _primitives.isCmd)(this.buf2, "R")) {
        const ref = _primitives.Ref.get(buf1, this.buf1);
        this.shift();
        this.shift();
        return ref;
      }
      return buf1;
    }
    if (typeof buf1 === "string") {
      if (cipherTransform) {
        return cipherTransform.decryptString(buf1);
      }
      return buf1;
    }
    return buf1;
  }
  findDefaultInlineStreamEnd(stream) {
    const E = 0x45,
      I = 0x49,
      SPACE = 0x20,
      LF = 0xa,
      CR = 0xd,
      NUL = 0x0;
    const {
        knownCommands
      } = this.lexer,
      startPos = stream.pos,
      n = 15;
    let state = 0,
      ch,
      maybeEIPos;
    while ((ch = stream.getByte()) !== -1) {
      if (state === 0) {
        state = ch === E ? 1 : 0;
      } else if (state === 1) {
        state = ch === I ? 2 : 0;
      } else {
        if (ch === SPACE || ch === LF || ch === CR) {
          maybeEIPos = stream.pos;
          const followingBytes = stream.peekBytes(n);
          const ii = followingBytes.length;
          if (ii === 0) {
            break;
          }
          for (let i = 0; i < ii; i++) {
            ch = followingBytes[i];
            if (ch === NUL && followingBytes[i + 1] !== NUL) {
              continue;
            }
            if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7f)) {
              state = 0;
              break;
            }
          }
          if (state !== 2) {
            continue;
          }
          if (!knownCommands) {
            (0, _util.warn)("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.");
            continue;
          }
          const tmpLexer = new Lexer(new _stream.Stream(followingBytes.slice()), knownCommands);
          tmpLexer._hexStringWarn = () => {};
          let numArgs = 0;
          while (true) {
            const nextObj = tmpLexer.getObj();
            if (nextObj === _primitives.EOF) {
              state = 0;
              break;
            }
            if (nextObj instanceof _primitives.Cmd) {
              const knownCommand = knownCommands[nextObj.cmd];
              if (!knownCommand) {
                state = 0;
                break;
              } else if (knownCommand.variableArgs ? numArgs <= knownCommand.numArgs : numArgs === knownCommand.numArgs) {
                break;
              }
              numArgs = 0;
              continue;
            }
            numArgs++;
          }
          if (state === 2) {
            break;
          }
        } else {
          state = 0;
        }
      }
    }
    if (ch === -1) {
      (0, _util.warn)("findDefaultInlineStreamEnd: " + "Reached the end of the stream without finding a valid EI marker");
      if (maybeEIPos) {
        (0, _util.warn)('... trying to recover by using the last "EI" occurrence.');
        stream.skip(-(stream.pos - maybeEIPos));
      }
    }
    let endOffset = 4;
    stream.skip(-endOffset);
    ch = stream.peekByte();
    stream.skip(endOffset);
    if (!(0, _core_utils.isWhiteSpace)(ch)) {
      endOffset--;
    }
    return stream.pos - endOffset - startPos;
  }
  findDCTDecodeInlineStreamEnd(stream) {
    const startPos = stream.pos;
    let foundEOI = false,
      b,
      markerLength;
    while ((b = stream.getByte()) !== -1) {
      if (b !== 0xff) {
        continue;
      }
      switch (stream.getByte()) {
        case 0x00:
          break;
        case 0xff:
          stream.skip(-1);
          break;
        case 0xd9:
          foundEOI = true;
          break;
        case 0xc0:
        case 0xc1:
        case 0xc2:
        case 0xc3:
        case 0xc5:
        case 0xc6:
        case 0xc7:
        case 0xc9:
        case 0xca:
        case 0xcb:
        case 0xcd:
        case 0xce:
        case 0xcf:
        case 0xc4:
        case 0xcc:
        case 0xda:
        case 0xdb:
        case 0xdc:
        case 0xdd:
        case 0xde:
        case 0xdf:
        case 0xe0:
        case 0xe1:
        case 0xe2:
        case 0xe3:
        case 0xe4:
        case 0xe5:
        case 0xe6:
        case 0xe7:
        case 0xe8:
        case 0xe9:
        case 0xea:
        case 0xeb:
        case 0xec:
        case 0xed:
        case 0xee:
        case 0xef:
        case 0xfe:
          markerLength = stream.getUint16();
          if (markerLength > 2) {
            stream.skip(markerLength - 2);
          } else {
            stream.skip(-2);
          }
          break;
      }
      if (foundEOI) {
        break;
      }
    }
    const length = stream.pos - startPos;
    if (b === -1) {
      (0, _util.warn)("Inline DCTDecode image stream: " + "EOI marker not found, searching for /EI/ instead.");
      stream.skip(-length);
      return this.findDefaultInlineStreamEnd(stream);
    }
    this.inlineStreamSkipEI(stream);
    return length;
  }
  findASCII85DecodeInlineStreamEnd(stream) {
    const TILDE = 0x7e,
      GT = 0x3e;
    const startPos = stream.pos;
    let ch;
    while ((ch = stream.getByte()) !== -1) {
      if (ch === TILDE) {
        const tildePos = stream.pos;
        ch = stream.peekByte();
        while ((0, _core_utils.isWhiteSpace)(ch)) {
          stream.skip();
          ch = stream.peekByte();
        }
        if (ch === GT) {
          stream.skip();
          break;
        }
        if (stream.pos > tildePos) {
          const maybeEI = stream.peekBytes(2);
          if (maybeEI[0] === 0x45 && maybeEI[1] === 0x49) {
            break;
          }
        }
      }
    }
    const length = stream.pos - startPos;
    if (ch === -1) {
      (0, _util.warn)("Inline ASCII85Decode image stream: " + "EOD marker not found, searching for /EI/ instead.");
      stream.skip(-length);
      return this.findDefaultInlineStreamEnd(stream);
    }
    this.inlineStreamSkipEI(stream);
    return length;
  }
  findASCIIHexDecodeInlineStreamEnd(stream) {
    const GT = 0x3e;
    const startPos = stream.pos;
    let ch;
    while ((ch = stream.getByte()) !== -1) {
      if (ch === GT) {
        break;
      }
    }
    const length = stream.pos - startPos;
    if (ch === -1) {
      (0, _util.warn)("Inline ASCIIHexDecode image stream: " + "EOD marker not found, searching for /EI/ instead.");
      stream.skip(-length);
      return this.findDefaultInlineStreamEnd(stream);
    }
    this.inlineStreamSkipEI(stream);
    return length;
  }
  inlineStreamSkipEI(stream) {
    const E = 0x45,
      I = 0x49;
    let state = 0,
      ch;
    while ((ch = stream.getByte()) !== -1) {
      if (state === 0) {
        state = ch === E ? 1 : 0;
      } else if (state === 1) {
        state = ch === I ? 2 : 0;
      } else if (state === 2) {
        break;
      }
    }
  }
  makeInlineImage(cipherTransform) {
    const lexer = this.lexer;
    const stream = lexer.stream;
    const dictMap = Object.create(null);
    let dictLength;
    while (!(0, _primitives.isCmd)(this.buf1, "ID") && this.buf1 !== _primitives.EOF) {
      if (!(this.buf1 instanceof _primitives.Name)) {
        throw new _util.FormatError("Dictionary key must be a name object");
      }
      const key = this.buf1.name;
      this.shift();
      if (this.buf1 === _primitives.EOF) {
        break;
      }
      dictMap[key] = this.getObj(cipherTransform);
    }
    if (lexer.beginInlineImagePos !== -1) {
      dictLength = stream.pos - lexer.beginInlineImagePos;
    }
    const filter = this.xref.fetchIfRef(dictMap.F || dictMap.Filter);
    let filterName;
    if (filter instanceof _primitives.Name) {
      filterName = filter.name;
    } else if (Array.isArray(filter)) {
      const filterZero = this.xref.fetchIfRef(filter[0]);
      if (filterZero instanceof _primitives.Name) {
        filterName = filterZero.name;
      }
    }
    const startPos = stream.pos;
    let length;
    switch (filterName) {
      case "DCT":
      case "DCTDecode":
        length = this.findDCTDecodeInlineStreamEnd(stream);
        break;
      case "A85":
      case "ASCII85Decode":
        length = this.findASCII85DecodeInlineStreamEnd(stream);
        break;
      case "AHx":
      case "ASCIIHexDecode":
        length = this.findASCIIHexDecodeInlineStreamEnd(stream);
        break;
      default:
        length = this.findDefaultInlineStreamEnd(stream);
    }
    let cacheKey;
    if (length < MAX_LENGTH_TO_CACHE && dictLength > 0) {
      const initialStreamPos = stream.pos;
      stream.pos = lexer.beginInlineImagePos;
      cacheKey = getInlineImageCacheKey(stream.getBytes(dictLength + length));
      stream.pos = initialStreamPos;
      const cacheEntry = this.imageCache[cacheKey];
      if (cacheEntry !== undefined) {
        this.buf2 = _primitives.Cmd.get("EI");
        this.shift();
        cacheEntry.reset();
        return cacheEntry;
      }
    }
    const dict = new _primitives.Dict(this.xref);
    for (const key in dictMap) {
      dict.set(key, dictMap[key]);
    }
    let imageStream = stream.makeSubStream(startPos, length, dict);
    if (cipherTransform) {
      imageStream = cipherTransform.createStream(imageStream, length);
    }
    imageStream = this.filter(imageStream, dict, length);
    imageStream.dict = dict;
    if (cacheKey !== undefined) {
      imageStream.cacheKey = `inline_img_${++this._imageId}`;
      this.imageCache[cacheKey] = imageStream;
    }
    this.buf2 = _primitives.Cmd.get("EI");
    this.shift();
    return imageStream;
  }
  _findStreamLength(startPos, signature) {
    const {
      stream
    } = this.lexer;
    stream.pos = startPos;
    const SCAN_BLOCK_LENGTH = 2048;
    const signatureLength = signature.length;
    while (stream.pos < stream.end) {
      const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);
      const scanLength = scanBytes.length - signatureLength;
      if (scanLength <= 0) {
        break;
      }
      let pos = 0;
      while (pos < scanLength) {
        let j = 0;
        while (j < signatureLength && scanBytes[pos + j] === signature[j]) {
          j++;
        }
        if (j >= signatureLength) {
          stream.pos += pos;
          return stream.pos - startPos;
        }
        pos++;
      }
      stream.pos += scanLength;
    }
    return -1;
  }
  makeStream(dict, cipherTransform) {
    const lexer = this.lexer;
    let stream = lexer.stream;
    lexer.skipToNextLine();
    const startPos = stream.pos - 1;
    let length = dict.get("Length");
    if (!Number.isInteger(length)) {
      (0, _util.info)(`Bad length "${length && length.toString()}" in stream.`);
      length = 0;
    }
    stream.pos = startPos + length;
    lexer.nextChar();
    if (this.tryShift() && (0, _primitives.isCmd)(this.buf2, "endstream")) {
      this.shift();
    } else {
      const ENDSTREAM_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d]);
      let actualLength = this._findStreamLength(startPos, ENDSTREAM_SIGNATURE);
      if (actualLength < 0) {
        const MAX_TRUNCATION = 1;
        for (let i = 1; i <= MAX_TRUNCATION; i++) {
          const end = ENDSTREAM_SIGNATURE.length - i;
          const TRUNCATED_SIGNATURE = ENDSTREAM_SIGNATURE.slice(0, end);
          const maybeLength = this._findStreamLength(startPos, TRUNCATED_SIGNATURE);
          if (maybeLength >= 0) {
            const lastByte = stream.peekBytes(end + 1)[end];
            if (!(0, _core_utils.isWhiteSpace)(lastByte)) {
              break;
            }
            (0, _util.info)(`Found "${(0, _util.bytesToString)(TRUNCATED_SIGNATURE)}" when ` + "searching for endstream command.");
            actualLength = maybeLength;
            break;
          }
        }
        if (actualLength < 0) {
          throw new _util.FormatError("Missing endstream command.");
        }
      }
      length = actualLength;
      lexer.nextChar();
      this.shift();
      this.shift();
    }
    this.shift();
    stream = stream.makeSubStream(startPos, length, dict);
    if (cipherTransform) {
      stream = cipherTransform.createStream(stream, length);
    }
    stream = this.filter(stream, dict, length);
    stream.dict = dict;
    return stream;
  }
  filter(stream, dict, length) {
    let filter = dict.get("F", "Filter");
    let params = dict.get("DP", "DecodeParms");
    if (filter instanceof _primitives.Name) {
      if (Array.isArray(params)) {
        (0, _util.warn)("/DecodeParms should not be an Array, when /Filter is a Name.");
      }
      return this.makeFilter(stream, filter.name, length, params);
    }
    let maybeLength = length;
    if (Array.isArray(filter)) {
      const filterArray = filter;
      const paramsArray = params;
      for (let i = 0, ii = filterArray.length; i < ii; ++i) {
        filter = this.xref.fetchIfRef(filterArray[i]);
        if (!(filter instanceof _primitives.Name)) {
          throw new _util.FormatError(`Bad filter name "${filter}"`);
        }
        params = null;
        if (Array.isArray(paramsArray) && i in paramsArray) {
          params = this.xref.fetchIfRef(paramsArray[i]);
        }
        stream = this.makeFilter(stream, filter.name, maybeLength, params);
        maybeLength = null;
      }
    }
    return stream;
  }
  makeFilter(stream, name, maybeLength, params) {
    if (maybeLength === 0) {
      (0, _util.warn)(`Empty "${name}" stream.`);
      return new _stream.NullStream();
    }
    try {
      switch (name) {
        case "Fl":
        case "FlateDecode":
          if (params) {
            return new _predictor_stream.PredictorStream(new _flate_stream.FlateStream(stream, maybeLength), maybeLength, params);
          }
          return new _flate_stream.FlateStream(stream, maybeLength);
        case "LZW":
        case "LZWDecode":
          let earlyChange = 1;
          if (params) {
            if (params.has("EarlyChange")) {
              earlyChange = params.get("EarlyChange");
            }
            return new _predictor_stream.PredictorStream(new _lzw_stream.LZWStream(stream, maybeLength, earlyChange), maybeLength, params);
          }
          return new _lzw_stream.LZWStream(stream, maybeLength, earlyChange);
        case "DCT":
        case "DCTDecode":
          return new _jpeg_stream.JpegStream(stream, maybeLength, params);
        case "JPX":
        case "JPXDecode":
          return new _jpx_stream.JpxStream(stream, maybeLength, params);
        case "A85":
        case "ASCII85Decode":
          return new _ascii_85_stream.Ascii85Stream(stream, maybeLength);
        case "AHx":
        case "ASCIIHexDecode":
          return new _ascii_hex_stream.AsciiHexStream(stream, maybeLength);
        case "CCF":
        case "CCITTFaxDecode":
          return new _ccitt_stream.CCITTFaxStream(stream, maybeLength, params);
        case "RL":
        case "RunLengthDecode":
          return new _run_length_stream.RunLengthStream(stream, maybeLength);
        case "JBIG2Decode":
          return new _jbig2_stream.Jbig2Stream(stream, maybeLength, params);
      }
      (0, _util.warn)(`Filter "${name}" is not supported.`);
      return stream;
    } catch (ex) {
      if (ex instanceof _core_utils.MissingDataException) {
        throw ex;
      }
      (0, _util.warn)(`Invalid stream: "${ex}"`);
      return new _stream.NullStream();
    }
  }
}
exports.Parser = Parser;
const specialChars = [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
function toHexDigit(ch) {
  if (ch >= 0x30 && ch <= 0x39) {
    return ch & 0x0f;
  }
  if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) {
    return (ch & 0x0f) + 9;
  }
  return -1;
}
class Lexer {
  constructor(stream, knownCommands = null) {
    this.stream = stream;
    this.nextChar();
    this.strBuf = [];
    this.knownCommands = knownCommands;
    this._hexStringNumWarn = 0;
    this.beginInlineImagePos = -1;
  }
  nextChar() {
    return this.currentChar = this.stream.getByte();
  }
  peekChar() {
    return this.stream.peekByte();
  }
  getNumber() {
    let ch = this.currentChar;
    let eNotation = false;
    let divideBy = 0;
    let sign = 1;
    if (ch === 0x2d) {
      sign = -1;
      ch = this.nextChar();
      if (ch === 0x2d) {
        ch = this.nextChar();
      }
    } else if (ch === 0x2b) {
      ch = this.nextChar();
    }
    if (ch === 0x0a || ch === 0x0d) {
      do {
        ch = this.nextChar();
      } while (ch === 0x0a || ch === 0x0d);
    }
    if (ch === 0x2e) {
      divideBy = 10;
      ch = this.nextChar();
    }
    if (ch < 0x30 || ch > 0x39) {
      const msg = `Invalid number: ${String.fromCharCode(ch)} (charCode ${ch})`;
      if ((0, _core_utils.isWhiteSpace)(ch) || ch === -1) {
        (0, _util.info)(`Lexer.getNumber - "${msg}".`);
        return 0;
      }
      throw new _util.FormatError(msg);
    }
    let baseValue = ch - 0x30;
    let powerValue = 0;
    let powerValueSign = 1;
    while ((ch = this.nextChar()) >= 0) {
      if (ch >= 0x30 && ch <= 0x39) {
        const currentDigit = ch - 0x30;
        if (eNotation) {
          powerValue = powerValue * 10 + currentDigit;
        } else {
          if (divideBy !== 0) {
            divideBy *= 10;
          }
          baseValue = baseValue * 10 + currentDigit;
        }
      } else if (ch === 0x2e) {
        if (divideBy === 0) {
          divideBy = 1;
        } else {
          break;
        }
      } else if (ch === 0x2d) {
        (0, _util.warn)("Badly formatted number: minus sign in the middle");
      } else if (ch === 0x45 || ch === 0x65) {
        ch = this.peekChar();
        if (ch === 0x2b || ch === 0x2d) {
          powerValueSign = ch === 0x2d ? -1 : 1;
          this.nextChar();
        } else if (ch < 0x30 || ch > 0x39) {
          break;
        }
        eNotation = true;
      } else {
        break;
      }
    }
    if (divideBy !== 0) {
      baseValue /= divideBy;
    }
    if (eNotation) {
      baseValue *= 10 ** (powerValueSign * powerValue);
    }
    return sign * baseValue;
  }
  getString() {
    let numParen = 1;
    let done = false;
    const strBuf = this.strBuf;
    strBuf.length = 0;
    let ch = this.nextChar();
    while (true) {
      let charBuffered = false;
      switch (ch | 0) {
        case -1:
          (0, _util.warn)("Unterminated string");
          done = true;
          break;
        case 0x28:
          ++numParen;
          strBuf.push("(");
          break;
        case 0x29:
          if (--numParen === 0) {
            this.nextChar();
            done = true;
          } else {
            strBuf.push(")");
          }
          break;
        case 0x5c:
          ch = this.nextChar();
          switch (ch) {
            case -1:
              (0, _util.warn)("Unterminated string");
              done = true;
              break;
            case 0x6e:
              strBuf.push("\n");
              break;
            case 0x72:
              strBuf.push("\r");
              break;
            case 0x74:
              strBuf.push("\t");
              break;
            case 0x62:
              strBuf.push("\b");
              break;
            case 0x66:
              strBuf.push("\f");
              break;
            case 0x5c:
            case 0x28:
            case 0x29:
              strBuf.push(String.fromCharCode(ch));
              break;
            case 0x30:
            case 0x31:
            case 0x32:
            case 0x33:
            case 0x34:
            case 0x35:
            case 0x36:
            case 0x37:
              let x = ch & 0x0f;
              ch = this.nextChar();
              charBuffered = true;
              if (ch >= 0x30 && ch <= 0x37) {
                x = (x << 3) + (ch & 0x0f);
                ch = this.nextChar();
                if (ch >= 0x30 && ch <= 0x37) {
                  charBuffered = false;
                  x = (x << 3) + (ch & 0x0f);
                }
              }
              strBuf.push(String.fromCharCode(x));
              break;
            case 0x0d:
              if (this.peekChar() === 0x0a) {
                this.nextChar();
              }
              break;
            case 0x0a:
              break;
            default:
              strBuf.push(String.fromCharCode(ch));
              break;
          }
          break;
        default:
          strBuf.push(String.fromCharCode(ch));
          break;
      }
      if (done) {
        break;
      }
      if (!charBuffered) {
        ch = this.nextChar();
      }
    }
    return strBuf.join("");
  }
  getName() {
    let ch, previousCh;
    const strBuf = this.strBuf;
    strBuf.length = 0;
    while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {
      if (ch === 0x23) {
        ch = this.nextChar();
        if (specialChars[ch]) {
          (0, _util.warn)("Lexer_getName: " + "NUMBER SIGN (#) should be followed by a hexadecimal number.");
          strBuf.push("#");
          break;
        }
        const x = toHexDigit(ch);
        if (x !== -1) {
          previousCh = ch;
          ch = this.nextChar();
          const x2 = toHexDigit(ch);
          if (x2 === -1) {
            (0, _util.warn)(`Lexer_getName: Illegal digit (${String.fromCharCode(ch)}) ` + "in hexadecimal number.");
            strBuf.push("#", String.fromCharCode(previousCh));
            if (specialChars[ch]) {
              break;
            }
            strBuf.push(String.fromCharCode(ch));
            continue;
          }
          strBuf.push(String.fromCharCode(x << 4 | x2));
        } else {
          strBuf.push("#", String.fromCharCode(ch));
        }
      } else {
        strBuf.push(String.fromCharCode(ch));
      }
    }
    if (strBuf.length > 127) {
      (0, _util.warn)(`Name token is longer than allowed by the spec: ${strBuf.length}`);
    }
    return _primitives.Name.get(strBuf.join(""));
  }
  _hexStringWarn(ch) {
    const MAX_HEX_STRING_NUM_WARN = 5;
    if (this._hexStringNumWarn++ === MAX_HEX_STRING_NUM_WARN) {
      (0, _util.warn)("getHexString - ignoring additional invalid characters.");
      return;
    }
    if (this._hexStringNumWarn > MAX_HEX_STRING_NUM_WARN) {
      return;
    }
    (0, _util.warn)(`getHexString - ignoring invalid character: ${ch}`);
  }
  getHexString() {
    const strBuf = this.strBuf;
    strBuf.length = 0;
    let ch = this.currentChar;
    let isFirstHex = true;
    let firstDigit, secondDigit;
    this._hexStringNumWarn = 0;
    while (true) {
      if (ch < 0) {
        (0, _util.warn)("Unterminated hex string");
        break;
      } else if (ch === 0x3e) {
        this.nextChar();
        break;
      } else if (specialChars[ch] === 1) {
        ch = this.nextChar();
        continue;
      } else {
        if (isFirstHex) {
          firstDigit = toHexDigit(ch);
          if (firstDigit === -1) {
            this._hexStringWarn(ch);
            ch = this.nextChar();
            continue;
          }
        } else {
          secondDigit = toHexDigit(ch);
          if (secondDigit === -1) {
            this._hexStringWarn(ch);
            ch = this.nextChar();
            continue;
          }
          strBuf.push(String.fromCharCode(firstDigit << 4 | secondDigit));
        }
        isFirstHex = !isFirstHex;
        ch = this.nextChar();
      }
    }
    return strBuf.join("");
  }
  getObj() {
    let comment = false;
    let ch = this.currentChar;
    while (true) {
      if (ch < 0) {
        return _primitives.EOF;
      }
      if (comment) {
        if (ch === 0x0a || ch === 0x0d) {
          comment = false;
        }
      } else if (ch === 0x25) {
        comment = true;
      } else if (specialChars[ch] !== 1) {
        break;
      }
      ch = this.nextChar();
    }
    switch (ch | 0) {
      case 0x30:
      case 0x31:
      case 0x32:
      case 0x33:
      case 0x34:
      case 0x35:
      case 0x36:
      case 0x37:
      case 0x38:
      case 0x39:
      case 0x2b:
      case 0x2d:
      case 0x2e:
        return this.getNumber();
      case 0x28:
        return this.getString();
      case 0x2f:
        return this.getName();
      case 0x5b:
        this.nextChar();
        return _primitives.Cmd.get("[");
      case 0x5d:
        this.nextChar();
        return _primitives.Cmd.get("]");
      case 0x3c:
        ch = this.nextChar();
        if (ch === 0x3c) {
          this.nextChar();
          return _primitives.Cmd.get("<<");
        }
        return this.getHexString();
      case 0x3e:
        ch = this.nextChar();
        if (ch === 0x3e) {
          this.nextChar();
          return _primitives.Cmd.get(">>");
        }
        return _primitives.Cmd.get(">");
      case 0x7b:
        this.nextChar();
        return _primitives.Cmd.get("{");
      case 0x7d:
        this.nextChar();
        return _primitives.Cmd.get("}");
      case 0x29:
        this.nextChar();
        throw new _util.FormatError(`Illegal character: ${ch}`);
    }
    let str = String.fromCharCode(ch);
    if (ch < 0x20 || ch > 0x7f) {
      const nextCh = this.peekChar();
      if (nextCh >= 0x20 && nextCh <= 0x7f) {
        this.nextChar();
        return _primitives.Cmd.get(str);
      }
    }
    const knownCommands = this.knownCommands;
    let knownCommandFound = knownCommands?.[str] !== undefined;
    while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {
      const possibleCommand = str + String.fromCharCode(ch);
      if (knownCommandFound && knownCommands[possibleCommand] === undefined) {
        break;
      }
      if (str.length === 128) {
        throw new _util.FormatError(`Command token too long: ${str.length}`);
      }
      str = possibleCommand;
      knownCommandFound = knownCommands?.[str] !== undefined;
    }
    if (str === "true") {
      return true;
    }
    if (str === "false") {
      return false;
    }
    if (str === "null") {
      return null;
    }
    if (str === "BI") {
      this.beginInlineImagePos = this.stream.pos;
    }
    return _primitives.Cmd.get(str);
  }
  skipToNextLine() {
    let ch = this.currentChar;
    while (ch >= 0) {
      if (ch === 0x0d) {
        ch = this.nextChar();
        if (ch === 0x0a) {
          this.nextChar();
        }
        break;
      } else if (ch === 0x0a) {
        this.nextChar();
        break;
      }
      ch = this.nextChar();
    }
  }
}
exports.Lexer = Lexer;
class Linearization {
  static create(stream) {
    function getInt(linDict, name, allowZeroValue = false) {
      const obj = linDict.get(name);
      if (Number.isInteger(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) {
        return obj;
      }
      throw new Error(`The "${name}" parameter in the linearization ` + "dictionary is invalid.");
    }
    function getHints(linDict) {
      const hints = linDict.get("H");
      let hintsLength;
      if (Array.isArray(hints) && ((hintsLength = hints.length) === 2 || hintsLength === 4)) {
        for (let index = 0; index < hintsLength; index++) {
          const hint = hints[index];
          if (!(Number.isInteger(hint) && hint > 0)) {
            throw new Error(`Hint (${index}) in the linearization dictionary is invalid.`);
          }
        }
        return hints;
      }
      throw new Error("Hint array in the linearization dictionary is invalid.");
    }
    const parser = new Parser({
      lexer: new Lexer(stream),
      xref: null
    });
    const obj1 = parser.getObj();
    const obj2 = parser.getObj();
    const obj3 = parser.getObj();
    const linDict = parser.getObj();
    let obj, length;
    if (!(Number.isInteger(obj1) && Number.isInteger(obj2) && (0, _primitives.isCmd)(obj3, "obj") && linDict instanceof _primitives.Dict && typeof (obj = linDict.get("Linearized")) === "number" && obj > 0)) {
      return null;
    } else if ((length = getInt(linDict, "L")) !== stream.length) {
      throw new Error('The "L" parameter in the linearization dictionary ' + "does not equal the stream length.");
    }
    return {
      length,
      hints: getHints(linDict),
      objectNumberFirst: getInt(linDict, "O"),
      endFirst: getInt(linDict, "E"),
      numPages: getInt(linDict, "N"),
      mainXRefEntriesOffset: getInt(linDict, "T"),
      pageFirst: linDict.has("P") ? getInt(linDict, "P", true) : 0
    };
  }
}
exports.Linearization = Linearization;

/***/ }),
/* 17 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.Ascii85Stream = void 0;
var _decode_stream = __w_pdfjs_require__(18);
var _core_utils = __w_pdfjs_require__(3);
class Ascii85Stream extends _decode_stream.DecodeStream {
  constructor(str, maybeLength) {
    if (maybeLength) {
      maybeLength *= 0.8;
    }
    super(maybeLength);
    this.str = str;
    this.dict = str.dict;
    this.input = new Uint8Array(5);
  }
  readBlock() {
    const TILDA_CHAR = 0x7e;
    const Z_LOWER_CHAR = 0x7a;
    const EOF = -1;
    const str = this.str;
    let c = str.getByte();
    while ((0, _core_utils.isWhiteSpace)(c)) {
      c = str.getByte();
    }
    if (c === EOF || c === TILDA_CHAR) {
      this.eof = true;
      return;
    }
    const bufferLength = this.bufferLength;
    let buffer, i;
    if (c === Z_LOWER_CHAR) {
      buffer = this.ensureBuffer(bufferLength + 4);
      for (i = 0; i < 4; ++i) {
        buffer[bufferLength + i] = 0;
      }
      this.bufferLength += 4;
    } else {
      const input = this.input;
      input[0] = c;
      for (i = 1; i < 5; ++i) {
        c = str.getByte();
        while ((0, _core_utils.isWhiteSpace)(c)) {
          c = str.getByte();
        }
        input[i] = c;
        if (c === EOF || c === TILDA_CHAR) {
          break;
        }
      }
      buffer = this.ensureBuffer(bufferLength + i - 1);
      this.bufferLength += i - 1;
      if (i < 5) {
        for (; i < 5; ++i) {
          input[i] = 0x21 + 84;
        }
        this.eof = true;
      }
      let t = 0;
      for (i = 0; i < 5; ++i) {
        t = t * 85 + (input[i] - 0x21);
      }
      for (i = 3; i >= 0; --i) {
        buffer[bufferLength + i] = t & 0xff;
        t >>= 8;
      }
    }
  }
}
exports.Ascii85Stream = Ascii85Stream;

/***/ }),
/* 18 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.StreamsSequenceStream = exports.DecodeStream = void 0;
var _base_stream = __w_pdfjs_require__(5);
var _stream = __w_pdfjs_require__(8);
const emptyBuffer = new Uint8Array(0);
class DecodeStream extends _base_stream.BaseStream {
  constructor(maybeMinBufferLength) {
    super();
    this._rawMinBufferLength = maybeMinBufferLength || 0;
    this.pos = 0;
    this.bufferLength = 0;
    this.eof = false;
    this.buffer = emptyBuffer;
    this.minBufferLength = 512;
    if (maybeMinBufferLength) {
      while (this.minBufferLength < maybeMinBufferLength) {
        this.minBufferLength *= 2;
      }
    }
  }
  get isEmpty() {
    while (!this.eof && this.bufferLength === 0) {
      this.readBlock();
    }
    return this.bufferLength === 0;
  }
  ensureBuffer(requested) {
    const buffer = this.buffer;
    if (requested <= buffer.byteLength) {
      return buffer;
    }
    let size = this.minBufferLength;
    while (size < requested) {
      size *= 2;
    }
    const buffer2 = new Uint8Array(size);
    buffer2.set(buffer);
    return this.buffer = buffer2;
  }
  getByte() {
    const pos = this.pos;
    while (this.bufferLength <= pos) {
      if (this.eof) {
        return -1;
      }
      this.readBlock();
    }
    return this.buffer[this.pos++];
  }
  getBytes(length) {
    const pos = this.pos;
    let end;
    if (length) {
      this.ensureBuffer(pos + length);
      end = pos + length;
      while (!this.eof && this.bufferLength < end) {
        this.readBlock();
      }
      const bufEnd = this.bufferLength;
      if (end > bufEnd) {
        end = bufEnd;
      }
    } else {
      while (!this.eof) {
        this.readBlock();
      }
      end = this.bufferLength;
    }
    this.pos = end;
    return this.buffer.subarray(pos, end);
  }
  reset() {
    this.pos = 0;
  }
  makeSubStream(start, length, dict = null) {
    if (length === undefined) {
      while (!this.eof) {
        this.readBlock();
      }
    } else {
      const end = start + length;
      while (this.bufferLength <= end && !this.eof) {
        this.readBlock();
      }
    }
    return new _stream.Stream(this.buffer, start, length, dict);
  }
  getBaseStreams() {
    return this.str ? this.str.getBaseStreams() : null;
  }
}
exports.DecodeStream = DecodeStream;
class StreamsSequenceStream extends DecodeStream {
  constructor(streams, onError = null) {
    let maybeLength = 0;
    for (const stream of streams) {
      maybeLength += stream instanceof DecodeStream ? stream._rawMinBufferLength : stream.length;
    }
    super(maybeLength);
    this.streams = streams;
    this._onError = onError;
  }
  readBlock() {
    const streams = this.streams;
    if (streams.length === 0) {
      this.eof = true;
      return;
    }
    const stream = streams.shift();
    let chunk;
    try {
      chunk = stream.getBytes();
    } catch (reason) {
      if (this._onError) {
        this._onError(reason, stream.dict?.objId);
        return;
      }
      throw reason;
    }
    const bufferLength = this.bufferLength;
    const newLength = bufferLength + chunk.length;
    const buffer = this.ensureBuffer(newLength);
    buffer.set(chunk, bufferLength);
    this.bufferLength = newLength;
  }
  getBaseStreams() {
    const baseStreamsBuf = [];
    for (const stream of this.streams) {
      const baseStreams = stream.getBaseStreams();
      if (baseStreams) {
        baseStreamsBuf.push(...baseStreams);
      }
    }
    return baseStreamsBuf.length > 0 ? baseStreamsBuf : null;
  }
}
exports.StreamsSequenceStream = StreamsSequenceStream;

/***/ }),
/* 19 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.AsciiHexStream = void 0;
var _decode_stream = __w_pdfjs_require__(18);
class AsciiHexStream extends _decode_stream.DecodeStream {
  constructor(str, maybeLength) {
    if (maybeLength) {
      maybeLength *= 0.5;
    }
    super(maybeLength);
    this.str = str;
    this.dict = str.dict;
    this.firstDigit = -1;
  }
  readBlock() {
    const UPSTREAM_BLOCK_SIZE = 8000;
    const bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE);
    if (!bytes.length) {
      this.eof = true;
      return;
    }
    const maxDecodeLength = bytes.length + 1 >> 1;
    const buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength);
    let bufferLength = this.bufferLength;
    let firstDigit = this.firstDigit;
    for (const ch of bytes) {
      let digit;
      if (ch >= 0x30 && ch <= 0x39) {
        digit = ch & 0x0f;
      } else if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) {
        digit = (ch & 0x0f) + 9;
      } else if (ch === 0x3e) {
        this.eof = true;
        break;
      } else {
        continue;
      }
      if (firstDigit < 0) {
        firstDigit = digit;
      } else {
        buffer[bufferLength++] = firstDigit << 4 | digit;
        firstDigit = -1;
      }
    }
    if (firstDigit >= 0 && this.eof) {
      buffer[bufferLength++] = firstDigit << 4;
      firstDigit = -1;
    }
    this.firstDigit = firstDigit;
    this.bufferLength = bufferLength;
  }
}
exports.AsciiHexStream = AsciiHexStream;

/***/ }),
/* 20 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.CCITTFaxStream = void 0;
var _ccitt = __w_pdfjs_require__(21);
var _decode_stream = __w_pdfjs_require__(18);
var _primitives = __w_pdfjs_require__(4);
class CCITTFaxStream extends _decode_stream.DecodeStream {
  constructor(str, maybeLength, params) {
    super(maybeLength);
    this.str = str;
    this.dict = str.dict;
    if (!(params instanceof _primitives.Dict)) {
      params = _primitives.Dict.empty;
    }
    const source = {
      next() {
        return str.getByte();
      }
    };
    this.ccittFaxDecoder = new _ccitt.CCITTFaxDecoder(source, {
      K: params.get("K"),
      EndOfLine: params.get("EndOfLine"),
      EncodedByteAlign: params.get("EncodedByteAlign"),
      Columns: params.get("Columns"),
      Rows: params.get("Rows"),
      EndOfBlock: params.get("EndOfBlock"),
      BlackIs1: params.get("BlackIs1")
    });
  }
  readBlock() {
    while (!this.eof) {
      const c = this.ccittFaxDecoder.readNextChar();
      if (c === -1) {
        this.eof = true;
        return;
      }
      this.ensureBuffer(this.bufferLength + 1);
      this.buffer[this.bufferLength++] = c;
    }
  }
}
exports.CCITTFaxStream = CCITTFaxStream;

/***/ }),
/* 21 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.CCITTFaxDecoder = void 0;
var _util = __w_pdfjs_require__(2);
const ccittEOL = -2;
const ccittEOF = -1;
const twoDimPass = 0;
const twoDimHoriz = 1;
const twoDimVert0 = 2;
const twoDimVertR1 = 3;
const twoDimVertL1 = 4;
const twoDimVertR2 = 5;
const twoDimVertL2 = 6;
const twoDimVertR3 = 7;
const twoDimVertL3 = 8;
const twoDimTable = [[-1, -1], [-1, -1], [7, twoDimVertL3], [7, twoDimVertR3], [6, twoDimVertL2], [6, twoDimVertL2], [6, twoDimVertR2], [6, twoDimVertR2], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0]];
const whiteTable1 = [[-1, -1], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [12, 1984], [12, 2048], [12, 2112], [12, 2176], [12, 2240], [12, 2304], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [12, 2368], [12, 2432], [12, 2496], [12, 2560]];
const whiteTable2 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 29], [8, 29], [8, 30], [8, 30], [8, 45], [8, 45], [8, 46], [8, 46], [7, 22], [7, 22], [7, 22], [7, 22], [7, 23], [7, 23], [7, 23], [7, 23], [8, 47], [8, 47], [8, 48], [8, 48], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [7, 20], [7, 20], [7, 20], [7, 20], [8, 33], [8, 33], [8, 34], [8, 34], [8, 35], [8, 35], [8, 36], [8, 36], [8, 37], [8, 37], [8, 38], [8, 38], [7, 19], [7, 19], [7, 19], [7, 19], [8, 31], [8, 31], [8, 32], [8, 32], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [8, 53], [8, 53], [8, 54], [8, 54], [7, 26], [7, 26], [7, 26], [7, 26], [8, 39], [8, 39], [8, 40], [8, 40], [8, 41], [8, 41], [8, 42], [8, 42], [8, 43], [8, 43], [8, 44], [8, 44], [7, 21], [7, 21], [7, 21], [7, 21], [7, 28], [7, 28], [7, 28], [7, 28], [8, 61], [8, 61], [8, 62], [8, 62], [8, 63], [8, 63], [8, 0], [8, 0], [8, 320], [8, 320], [8, 384], [8, 384], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [7, 27], [7, 27], [7, 27], [7, 27], [8, 59], [8, 59], [8, 60], [8, 60], [9, 1472], [9, 1536], [9, 1600], [9, 1728], [7, 18], [7, 18], [7, 18], [7, 18], [7, 24], [7, 24], [7, 24], [7, 24], [8, 49], [8, 49], [8, 50], [8, 50], [8, 51], [8, 51], [8, 52], [8, 52], [7, 25], [7, 25], [7, 25], [7, 25], [8, 55], [8, 55], [8, 56], [8, 56], [8, 57], [8, 57], [8, 58], [8, 58], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [8, 448], [8, 448], [8, 512], [8, 512], [9, 704], [9, 768], [8, 640], [8, 640], [8, 576], [8, 576], [9, 832], [9, 896], [9, 960], [9, 1024], [9, 1088], [9, 1152], [9, 1216], [9, 1280], [9, 1344], [9, 1408], [7, 256], [7, 256], [7, 256], [7, 256], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7]];
const blackTable1 = [[-1, -1], [-1, -1], [12, ccittEOL], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [11, 1792], [11, 1792], [12, 1984], [12, 1984], [12, 2048], [12, 2048], [12, 2112], [12, 2112], [12, 2176], [12, 2176], [12, 2240], [12, 2240], [12, 2304], [12, 2304], [11, 1856], [11, 1856], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [11, 1920], [11, 1920], [12, 2368], [12, 2368], [12, 2432], [12, 2432], [12, 2496], [12, 2496], [12, 2560], [12, 2560], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [12, 52], [12, 52], [13, 640], [13, 704], [13, 768], [13, 832], [12, 55], [12, 55], [12, 56], [12, 56], [13, 1280], [13, 1344], [13, 1408], [13, 1472], [12, 59], [12, 59], [12, 60], [12, 60], [13, 1536], [13, 1600], [11, 24], [11, 24], [11, 24], [11, 24], [11, 25], [11, 25], [11, 25], [11, 25], [13, 1664], [13, 1728], [12, 320], [12, 320], [12, 384], [12, 384], [12, 448], [12, 448], [13, 512], [13, 576], [12, 53], [12, 53], [12, 54], [12, 54], [13, 896], [13, 960], [13, 1024], [13, 1088], [13, 1152], [13, 1216], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64]];
const blackTable2 = [[8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [11, 23], [11, 23], [12, 50], [12, 51], [12, 44], [12, 45], [12, 46], [12, 47], [12, 57], [12, 58], [12, 61], [12, 256], [10, 16], [10, 16], [10, 16], [10, 16], [10, 17], [10, 17], [10, 17], [10, 17], [12, 48], [12, 49], [12, 62], [12, 63], [12, 30], [12, 31], [12, 32], [12, 33], [12, 40], [12, 41], [11, 22], [11, 22], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [12, 128], [12, 192], [12, 26], [12, 27], [12, 28], [12, 29], [11, 19], [11, 19], [11, 20], [11, 20], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [11, 21], [11, 21], [12, 42], [12, 43], [10, 0], [10, 0], [10, 0], [10, 0], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12]];
const blackTable3 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [6, 9], [6, 8], [5, 7], [5, 7], [4, 6], [4, 6], [4, 6], [4, 6], [4, 5], [4, 5], [4, 5], [4, 5], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2]];
class CCITTFaxDecoder {
  constructor(source, options = {}) {
    if (!source || typeof source.next !== "function") {
      throw new Error('CCITTFaxDecoder - invalid "source" parameter.');
    }
    this.source = source;
    this.eof = false;
    this.encoding = options.K || 0;
    this.eoline = options.EndOfLine || false;
    this.byteAlign = options.EncodedByteAlign || false;
    this.columns = options.Columns || 1728;
    this.rows = options.Rows || 0;
    this.eoblock = options.EndOfBlock ?? true;
    this.black = options.BlackIs1 || false;
    this.codingLine = new Uint32Array(this.columns + 1);
    this.refLine = new Uint32Array(this.columns + 2);
    this.codingLine[0] = this.columns;
    this.codingPos = 0;
    this.row = 0;
    this.nextLine2D = this.encoding < 0;
    this.inputBits = 0;
    this.inputBuf = 0;
    this.outputBits = 0;
    this.rowsDone = false;
    let code1;
    while ((code1 = this._lookBits(12)) === 0) {
      this._eatBits(1);
    }
    if (code1 === 1) {
      this._eatBits(12);
    }
    if (this.encoding > 0) {
      this.nextLine2D = !this._lookBits(1);
      this._eatBits(1);
    }
  }
  readNextChar() {
    if (this.eof) {
      return -1;
    }
    const refLine = this.refLine;
    const codingLine = this.codingLine;
    const columns = this.columns;
    let refPos, blackPixels, bits, i;
    if (this.outputBits === 0) {
      if (this.rowsDone) {
        this.eof = true;
      }
      if (this.eof) {
        return -1;
      }
      this.err = false;
      let code1, code2, code3;
      if (this.nextLine2D) {
        for (i = 0; codingLine[i] < columns; ++i) {
          refLine[i] = codingLine[i];
        }
        refLine[i++] = columns;
        refLine[i] = columns;
        codingLine[0] = 0;
        this.codingPos = 0;
        refPos = 0;
        blackPixels = 0;
        while (codingLine[this.codingPos] < columns) {
          code1 = this._getTwoDimCode();
          switch (code1) {
            case twoDimPass:
              this._addPixels(refLine[refPos + 1], blackPixels);
              if (refLine[refPos + 1] < columns) {
                refPos += 2;
              }
              break;
            case twoDimHoriz:
              code1 = code2 = 0;
              if (blackPixels) {
                do {
                  code1 += code3 = this._getBlackCode();
                } while (code3 >= 64);
                do {
                  code2 += code3 = this._getWhiteCode();
                } while (code3 >= 64);
              } else {
                do {
                  code1 += code3 = this._getWhiteCode();
                } while (code3 >= 64);
                do {
                  code2 += code3 = this._getBlackCode();
                } while (code3 >= 64);
              }
              this._addPixels(codingLine[this.codingPos] + code1, blackPixels);
              if (codingLine[this.codingPos] < columns) {
                this._addPixels(codingLine[this.codingPos] + code2, blackPixels ^ 1);
              }
              while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
                refPos += 2;
              }
              break;
            case twoDimVertR3:
              this._addPixels(refLine[refPos] + 3, blackPixels);
              blackPixels ^= 1;
              if (codingLine[this.codingPos] < columns) {
                ++refPos;
                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
                  refPos += 2;
                }
              }
              break;
            case twoDimVertR2:
              this._addPixels(refLine[refPos] + 2, blackPixels);
              blackPixels ^= 1;
              if (codingLine[this.codingPos] < columns) {
                ++refPos;
                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
                  refPos += 2;
                }
              }
              break;
            case twoDimVertR1:
              this._addPixels(refLine[refPos] + 1, blackPixels);
              blackPixels ^= 1;
              if (codingLine[this.codingPos] < columns) {
                ++refPos;
                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
                  refPos += 2;
                }
              }
              break;
            case twoDimVert0:
              this._addPixels(refLine[refPos], blackPixels);
              blackPixels ^= 1;
              if (codingLine[this.codingPos] < columns) {
                ++refPos;
                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
                  refPos += 2;
                }
              }
              break;
            case twoDimVertL3:
              this._addPixelsNeg(refLine[refPos] - 3, blackPixels);
              blackPixels ^= 1;
              if (codingLine[this.codingPos] < columns) {
                if (refPos > 0) {
                  --refPos;
                } else {
                  ++refPos;
                }
                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
                  refPos += 2;
                }
              }
              break;
            case twoDimVertL2:
              this._addPixelsNeg(refLine[refPos] - 2, blackPixels);
              blackPixels ^= 1;
              if (codingLine[this.codingPos] < columns) {
                if (refPos > 0) {
                  --refPos;
                } else {
                  ++refPos;
                }
                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
                  refPos += 2;
                }
              }
              break;
            case twoDimVertL1:
              this._addPixelsNeg(refLine[refPos] - 1, blackPixels);
              blackPixels ^= 1;
              if (codingLine[this.codingPos] < columns) {
                if (refPos > 0) {
                  --refPos;
                } else {
                  ++refPos;
                }
                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
                  refPos += 2;
                }
              }
              break;
            case ccittEOF:
              this._addPixels(columns, 0);
              this.eof = true;
              break;
            default:
              (0, _util.info)("bad 2d code");
              this._addPixels(columns, 0);
              this.err = true;
          }
        }
      } else {
        codingLine[0] = 0;
        this.codingPos = 0;
        blackPixels = 0;
        while (codingLine[this.codingPos] < columns) {
          code1 = 0;
          if (blackPixels) {
            do {
              code1 += code3 = this._getBlackCode();
            } while (code3 >= 64);
          } else {
            do {
              code1 += code3 = this._getWhiteCode();
            } while (code3 >= 64);
          }
          this._addPixels(codingLine[this.codingPos] + code1, blackPixels);
          blackPixels ^= 1;
        }
      }
      let gotEOL = false;
      if (this.byteAlign) {
        this.inputBits &= ~7;
      }
      if (!this.eoblock && this.row === this.rows - 1) {
        this.rowsDone = true;
      } else {
        code1 = this._lookBits(12);
        if (this.eoline) {
          while (code1 !== ccittEOF && code1 !== 1) {
            this._eatBits(1);
            code1 = this._lookBits(12);
          }
        } else {
          while (code1 === 0) {
            this._eatBits(1);
            code1 = this._lookBits(12);
          }
        }
        if (code1 === 1) {
          this._eatBits(12);
          gotEOL = true;
        } else if (code1 === ccittEOF) {
          this.eof = true;
        }
      }
      if (!this.eof && this.encoding > 0 && !this.rowsDone) {
        this.nextLine2D = !this._lookBits(1);
        this._eatBits(1);
      }
      if (this.eoblock && gotEOL && this.byteAlign) {
        code1 = this._lookBits(12);
        if (code1 === 1) {
          this._eatBits(12);
          if (this.encoding > 0) {
            this._lookBits(1);
            this._eatBits(1);
          }
          if (this.encoding >= 0) {
            for (i = 0; i < 4; ++i) {
              code1 = this._lookBits(12);
              if (code1 !== 1) {
                (0, _util.info)("bad rtc code: " + code1);
              }
              this._eatBits(12);
              if (this.encoding > 0) {
                this._lookBits(1);
                this._eatBits(1);
              }
            }
          }
          this.eof = true;
        }
      } else if (this.err && this.eoline) {
        while (true) {
          code1 = this._lookBits(13);
          if (code1 === ccittEOF) {
            this.eof = true;
            return -1;
          }
          if (code1 >> 1 === 1) {
            break;
          }
          this._eatBits(1);
        }
        this._eatBits(12);
        if (this.encoding > 0) {
          this._eatBits(1);
          this.nextLine2D = !(code1 & 1);
        }
      }
      this.outputBits = codingLine[0] > 0 ? codingLine[this.codingPos = 0] : codingLine[this.codingPos = 1];
      this.row++;
    }
    let c;
    if (this.outputBits >= 8) {
      c = this.codingPos & 1 ? 0 : 0xff;
      this.outputBits -= 8;
      if (this.outputBits === 0 && codingLine[this.codingPos] < columns) {
        this.codingPos++;
        this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1];
      }
    } else {
      bits = 8;
      c = 0;
      do {
        if (typeof this.outputBits !== "number") {
          throw new _util.FormatError('Invalid /CCITTFaxDecode data, "outputBits" must be a number.');
        }
        if (this.outputBits > bits) {
          c <<= bits;
          if (!(this.codingPos & 1)) {
            c |= 0xff >> 8 - bits;
          }
          this.outputBits -= bits;
          bits = 0;
        } else {
          c <<= this.outputBits;
          if (!(this.codingPos & 1)) {
            c |= 0xff >> 8 - this.outputBits;
          }
          bits -= this.outputBits;
          this.outputBits = 0;
          if (codingLine[this.codingPos] < columns) {
            this.codingPos++;
            this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1];
          } else if (bits > 0) {
            c <<= bits;
            bits = 0;
          }
        }
      } while (bits);
    }
    if (this.black) {
      c ^= 0xff;
    }
    return c;
  }
  _addPixels(a1, blackPixels) {
    const codingLine = this.codingLine;
    let codingPos = this.codingPos;
    if (a1 > codingLine[codingPos]) {
      if (a1 > this.columns) {
        (0, _util.info)("row is wrong length");
        this.err = true;
        a1 = this.columns;
      }
      if (codingPos & 1 ^ blackPixels) {
        ++codingPos;
      }
      codingLine[codingPos] = a1;
    }
    this.codingPos = codingPos;
  }
  _addPixelsNeg(a1, blackPixels) {
    const codingLine = this.codingLine;
    let codingPos = this.codingPos;
    if (a1 > codingLine[codingPos]) {
      if (a1 > this.columns) {
        (0, _util.info)("row is wrong length");
        this.err = true;
        a1 = this.columns;
      }
      if (codingPos & 1 ^ blackPixels) {
        ++codingPos;
      }
      codingLine[codingPos] = a1;
    } else if (a1 < codingLine[codingPos]) {
      if (a1 < 0) {
        (0, _util.info)("invalid code");
        this.err = true;
        a1 = 0;
      }
      while (codingPos > 0 && a1 < codingLine[codingPos - 1]) {
        --codingPos;
      }
      codingLine[codingPos] = a1;
    }
    this.codingPos = codingPos;
  }
  _findTableCode(start, end, table, limit) {
    const limitValue = limit || 0;
    for (let i = start; i <= end; ++i) {
      let code = this._lookBits(i);
      if (code === ccittEOF) {
        return [true, 1, false];
      }
      if (i < end) {
        code <<= end - i;
      }
      if (!limitValue || code >= limitValue) {
        const p = table[code - limitValue];
        if (p[0] === i) {
          this._eatBits(i);
          return [true, p[1], true];
        }
      }
    }
    return [false, 0, false];
  }
  _getTwoDimCode() {
    let code = 0;
    let p;
    if (this.eoblock) {
      code = this._lookBits(7);
      p = twoDimTable[code];
      if (p?.[0] > 0) {
        this._eatBits(p[0]);
        return p[1];
      }
    } else {
      const result = this._findTableCode(1, 7, twoDimTable);
      if (result[0] && result[2]) {
        return result[1];
      }
    }
    (0, _util.info)("Bad two dim code");
    return ccittEOF;
  }
  _getWhiteCode() {
    let code = 0;
    let p;
    if (this.eoblock) {
      code = this._lookBits(12);
      if (code === ccittEOF) {
        return 1;
      }
      p = code >> 5 === 0 ? whiteTable1[code] : whiteTable2[code >> 3];
      if (p[0] > 0) {
        this._eatBits(p[0]);
        return p[1];
      }
    } else {
      let result = this._findTableCode(1, 9, whiteTable2);
      if (result[0]) {
        return result[1];
      }
      result = this._findTableCode(11, 12, whiteTable1);
      if (result[0]) {
        return result[1];
      }
    }
    (0, _util.info)("bad white code");
    this._eatBits(1);
    return 1;
  }
  _getBlackCode() {
    let code, p;
    if (this.eoblock) {
      code = this._lookBits(13);
      if (code === ccittEOF) {
        return 1;
      }
      if (code >> 7 === 0) {
        p = blackTable1[code];
      } else if (code >> 9 === 0 && code >> 7 !== 0) {
        p = blackTable2[(code >> 1) - 64];
      } else {
        p = blackTable3[code >> 7];
      }
      if (p[0] > 0) {
        this._eatBits(p[0]);
        return p[1];
      }
    } else {
      let result = this._findTableCode(2, 6, blackTable3);
      if (result[0]) {
        return result[1];
      }
      result = this._findTableCode(7, 12, blackTable2, 64);
      if (result[0]) {
        return result[1];
      }
      result = this._findTableCode(10, 13, blackTable1);
      if (result[0]) {
        return result[1];
      }
    }
    (0, _util.info)("bad black code");
    this._eatBits(1);
    return 1;
  }
  _lookBits(n) {
    let c;
    while (this.inputBits < n) {
      if ((c = this.source.next()) === -1) {
        if (this.inputBits === 0) {
          return ccittEOF;
        }
        return this.inputBuf << n - this.inputBits & 0xffff >> 16 - n;
      }
      this.inputBuf = this.inputBuf << 8 | c;
      this.inputBits += 8;
    }
    return this.inputBuf >> this.inputBits - n & 0xffff >> 16 - n;
  }
  _eatBits(n) {
    if ((this.inputBits -= n) < 0) {
      this.inputBits = 0;
    }
  }
}
exports.CCITTFaxDecoder = CCITTFaxDecoder;

/***/ }),
/* 22 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.FlateStream = void 0;
var _decode_stream = __w_pdfjs_require__(18);
var _util = __w_pdfjs_require__(2);
const codeLenCodeMap = new Int32Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
const lengthDecode = new Int32Array([0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a, 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f, 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073, 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102]);
const distDecode = new Int32Array([0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d, 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1, 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01, 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001]);
const fixedLitCodeTab = [new Int32Array([0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0, 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0, 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0, 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8, 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8, 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8, 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4, 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4, 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4, 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc, 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec, 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc, 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2, 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2, 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2, 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca, 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea, 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da, 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6, 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6, 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6, 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce, 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee, 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de, 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe, 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1, 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1, 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1, 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9, 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9, 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9, 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5, 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5, 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5, 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd, 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed, 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd, 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3, 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3, 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3, 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb, 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb, 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db, 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7, 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7, 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7, 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf, 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef, 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df, 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff]), 9];
const fixedDistCodeTab = [new Int32Array([0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c, 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000, 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d, 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000]), 5];
class FlateStream extends _decode_stream.DecodeStream {
  constructor(str, maybeLength) {
    super(maybeLength);
    this.str = str;
    this.dict = str.dict;
    const cmf = str.getByte();
    const flg = str.getByte();
    if (cmf === -1 || flg === -1) {
      throw new _util.FormatError(`Invalid header in flate stream: ${cmf}, ${flg}`);
    }
    if ((cmf & 0x0f) !== 0x08) {
      throw new _util.FormatError(`Unknown compression method in flate stream: ${cmf}, ${flg}`);
    }
    if (((cmf << 8) + flg) % 31 !== 0) {
      throw new _util.FormatError(`Bad FCHECK in flate stream: ${cmf}, ${flg}`);
    }
    if (flg & 0x20) {
      throw new _util.FormatError(`FDICT bit set in flate stream: ${cmf}, ${flg}`);
    }
    this.codeSize = 0;
    this.codeBuf = 0;
  }
  getBits(bits) {
    const str = this.str;
    let codeSize = this.codeSize;
    let codeBuf = this.codeBuf;
    let b;
    while (codeSize < bits) {
      if ((b = str.getByte()) === -1) {
        throw new _util.FormatError("Bad encoding in flate stream");
      }
      codeBuf |= b << codeSize;
      codeSize += 8;
    }
    b = codeBuf & (1 << bits) - 1;
    this.codeBuf = codeBuf >> bits;
    this.codeSize = codeSize -= bits;
    return b;
  }
  getCode(table) {
    const str = this.str;
    const codes = table[0];
    const maxLen = table[1];
    let codeSize = this.codeSize;
    let codeBuf = this.codeBuf;
    let b;
    while (codeSize < maxLen) {
      if ((b = str.getByte()) === -1) {
        break;
      }
      codeBuf |= b << codeSize;
      codeSize += 8;
    }
    const code = codes[codeBuf & (1 << maxLen) - 1];
    const codeLen = code >> 16;
    const codeVal = code & 0xffff;
    if (codeLen < 1 || codeSize < codeLen) {
      throw new _util.FormatError("Bad encoding in flate stream");
    }
    this.codeBuf = codeBuf >> codeLen;
    this.codeSize = codeSize - codeLen;
    return codeVal;
  }
  generateHuffmanTable(lengths) {
    const n = lengths.length;
    let maxLen = 0;
    let i;
    for (i = 0; i < n; ++i) {
      if (lengths[i] > maxLen) {
        maxLen = lengths[i];
      }
    }
    const size = 1 << maxLen;
    const codes = new Int32Array(size);
    for (let len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) {
      for (let val = 0; val < n; ++val) {
        if (lengths[val] === len) {
          let code2 = 0;
          let t = code;
          for (i = 0; i < len; ++i) {
            code2 = code2 << 1 | t & 1;
            t >>= 1;
          }
          for (i = code2; i < size; i += skip) {
            codes[i] = len << 16 | val;
          }
          ++code;
        }
      }
    }
    return [codes, maxLen];
  }
  readBlock() {
    let buffer, len;
    const str = this.str;
    let hdr = this.getBits(3);
    if (hdr & 1) {
      this.eof = true;
    }
    hdr >>= 1;
    if (hdr === 0) {
      let b;
      if ((b = str.getByte()) === -1) {
        throw new _util.FormatError("Bad block header in flate stream");
      }
      let blockLen = b;
      if ((b = str.getByte()) === -1) {
        throw new _util.FormatError("Bad block header in flate stream");
      }
      blockLen |= b << 8;
      if ((b = str.getByte()) === -1) {
        throw new _util.FormatError("Bad block header in flate stream");
      }
      let check = b;
      if ((b = str.getByte()) === -1) {
        throw new _util.FormatError("Bad block header in flate stream");
      }
      check |= b << 8;
      if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) {
        throw new _util.FormatError("Bad uncompressed block length in flate stream");
      }
      this.codeBuf = 0;
      this.codeSize = 0;
      const bufferLength = this.bufferLength,
        end = bufferLength + blockLen;
      buffer = this.ensureBuffer(end);
      this.bufferLength = end;
      if (blockLen === 0) {
        if (str.peekByte() === -1) {
          this.eof = true;
        }
      } else {
        const block = str.getBytes(blockLen);
        buffer.set(block, bufferLength);
        if (block.length < blockLen) {
          this.eof = true;
        }
      }
      return;
    }
    let litCodeTable;
    let distCodeTable;
    if (hdr === 1) {
      litCodeTable = fixedLitCodeTab;
      distCodeTable = fixedDistCodeTab;
    } else if (hdr === 2) {
      const numLitCodes = this.getBits(5) + 257;
      const numDistCodes = this.getBits(5) + 1;
      const numCodeLenCodes = this.getBits(4) + 4;
      const codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length);
      let i;
      for (i = 0; i < numCodeLenCodes; ++i) {
        codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3);
      }
      const codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);
      len = 0;
      i = 0;
      const codes = numLitCodes + numDistCodes;
      const codeLengths = new Uint8Array(codes);
      let bitsLength, bitsOffset, what;
      while (i < codes) {
        const code = this.getCode(codeLenCodeTab);
        if (code === 16) {
          bitsLength = 2;
          bitsOffset = 3;
          what = len;
        } else if (code === 17) {
          bitsLength = 3;
          bitsOffset = 3;
          what = len = 0;
        } else if (code === 18) {
          bitsLength = 7;
          bitsOffset = 11;
          what = len = 0;
        } else {
          codeLengths[i++] = len = code;
          continue;
        }
        let repeatLength = this.getBits(bitsLength) + bitsOffset;
        while (repeatLength-- > 0) {
          codeLengths[i++] = what;
        }
      }
      litCodeTable = this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes));
      distCodeTable = this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes));
    } else {
      throw new _util.FormatError("Unknown block type in flate stream");
    }
    buffer = this.buffer;
    let limit = buffer ? buffer.length : 0;
    let pos = this.bufferLength;
    while (true) {
      let code1 = this.getCode(litCodeTable);
      if (code1 < 256) {
        if (pos + 1 >= limit) {
          buffer = this.ensureBuffer(pos + 1);
          limit = buffer.length;
        }
        buffer[pos++] = code1;
        continue;
      }
      if (code1 === 256) {
        this.bufferLength = pos;
        return;
      }
      code1 -= 257;
      code1 = lengthDecode[code1];
      let code2 = code1 >> 16;
      if (code2 > 0) {
        code2 = this.getBits(code2);
      }
      len = (code1 & 0xffff) + code2;
      code1 = this.getCode(distCodeTable);
      code1 = distDecode[code1];
      code2 = code1 >> 16;
      if (code2 > 0) {
        code2 = this.getBits(code2);
      }
      const dist = (code1 & 0xffff) + code2;
      if (pos + len >= limit) {
        buffer = this.ensureBuffer(pos + len);
        limit = buffer.length;
      }
      for (let k = 0; k < len; ++k, ++pos) {
        buffer[pos] = buffer[pos - dist];
      }
    }
  }
}
exports.FlateStream = FlateStream;

/***/ }),
/* 23 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.Jbig2Stream = void 0;
var _base_stream = __w_pdfjs_require__(5);
var _decode_stream = __w_pdfjs_require__(18);
var _primitives = __w_pdfjs_require__(4);
var _jbig = __w_pdfjs_require__(24);
var _util = __w_pdfjs_require__(2);
class Jbig2Stream extends _decode_stream.DecodeStream {
  constructor(stream, maybeLength, params) {
    super(maybeLength);
    this.stream = stream;
    this.dict = stream.dict;
    this.maybeLength = maybeLength;
    this.params = params;
  }
  get bytes() {
    return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength));
  }
  ensureBuffer(requested) {}
  readBlock() {
    if (this.eof) {
      return;
    }
    const jbig2Image = new _jbig.Jbig2Image();
    const chunks = [];
    if (this.params instanceof _primitives.Dict) {
      const globalsStream = this.params.get("JBIG2Globals");
      if (globalsStream instanceof _base_stream.BaseStream) {
        const globals = globalsStream.getBytes();
        chunks.push({
          data: globals,
          start: 0,
          end: globals.length
        });
      }
    }
    chunks.push({
      data: this.bytes,
      start: 0,
      end: this.bytes.length
    });
    const data = jbig2Image.parseChunks(chunks);
    const dataLength = data.length;
    for (let i = 0; i < dataLength; i++) {
      data[i] ^= 0xff;
    }
    this.buffer = data;
    this.bufferLength = dataLength;
    this.eof = true;
  }
}
exports.Jbig2Stream = Jbig2Stream;

/***/ }),
/* 24 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.Jbig2Image = void 0;
var _util = __w_pdfjs_require__(2);
var _core_utils = __w_pdfjs_require__(3);
var _arithmetic_decoder = __w_pdfjs_require__(25);
var _ccitt = __w_pdfjs_require__(21);
class Jbig2Error extends _util.BaseException {
  constructor(msg) {
    super(`JBIG2 error: ${msg}`, "Jbig2Error");
  }
}
class ContextCache {
  getContexts(id) {
    if (id in this) {
      return this[id];
    }
    return this[id] = new Int8Array(1 << 16);
  }
}
class DecodingContext {
  constructor(data, start, end) {
    this.data = data;
    this.start = start;
    this.end = end;
  }
  get decoder() {
    const decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end);
    return (0, _util.shadow)(this, "decoder", decoder);
  }
  get contextCache() {
    const cache = new ContextCache();
    return (0, _util.shadow)(this, "contextCache", cache);
  }
}
const MAX_INT_32 = 2 ** 31 - 1;
const MIN_INT_32 = -(2 ** 31);
function decodeInteger(contextCache, procedure, decoder) {
  const contexts = contextCache.getContexts(procedure);
  let prev = 1;
  function readBits(length) {
    let v = 0;
    for (let i = 0; i < length; i++) {
      const bit = decoder.readBit(contexts, prev);
      prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256;
      v = v << 1 | bit;
    }
    return v >>> 0;
  }
  const sign = readBits(1);
  const value = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2);
  let signedValue;
  if (sign === 0) {
    signedValue = value;
  } else if (value > 0) {
    signedValue = -value;
  }
  if (signedValue >= MIN_INT_32 && signedValue <= MAX_INT_32) {
    return signedValue;
  }
  return null;
}
function decodeIAID(contextCache, decoder, codeLength) {
  const contexts = contextCache.getContexts("IAID");
  let prev = 1;
  for (let i = 0; i < codeLength; i++) {
    const bit = decoder.readBit(contexts, prev);
    prev = prev << 1 | bit;
  }
  if (codeLength < 31) {
    return prev & (1 << codeLength) - 1;
  }
  return prev & 0x7fffffff;
}
const SegmentTypes = ["SymbolDictionary", null, null, null, "IntermediateTextRegion", null, "ImmediateTextRegion", "ImmediateLosslessTextRegion", null, null, null, null, null, null, null, null, "PatternDictionary", null, null, null, "IntermediateHalftoneRegion", null, "ImmediateHalftoneRegion", "ImmediateLosslessHalftoneRegion", null, null, null, null, null, null, null, null, null, null, null, null, "IntermediateGenericRegion", null, "ImmediateGenericRegion", "ImmediateLosslessGenericRegion", "IntermediateGenericRefinementRegion", null, "ImmediateGenericRefinementRegion", "ImmediateLosslessGenericRefinementRegion", null, null, null, null, "PageInformation", "EndOfPage", "EndOfStripe", "EndOfFile", "Profiles", "Tables", null, null, null, null, null, null, null, null, "Extension"];
const CodingTemplates = [[{
  x: -1,
  y: -2
}, {
  x: 0,
  y: -2
}, {
  x: 1,
  y: -2
}, {
  x: -2,
  y: -1
}, {
  x: -1,
  y: -1
}, {
  x: 0,
  y: -1
}, {
  x: 1,
  y: -1
}, {
  x: 2,
  y: -1
}, {
  x: -4,
  y: 0
}, {
  x: -3,
  y: 0
}, {
  x: -2,
  y: 0
}, {
  x: -1,
  y: 0
}], [{
  x: -1,
  y: -2
}, {
  x: 0,
  y: -2
}, {
  x: 1,
  y: -2
}, {
  x: 2,
  y: -2
}, {
  x: -2,
  y: -1
}, {
  x: -1,
  y: -1
}, {
  x: 0,
  y: -1
}, {
  x: 1,
  y: -1
}, {
  x: 2,
  y: -1
}, {
  x: -3,
  y: 0
}, {
  x: -2,
  y: 0
}, {
  x: -1,
  y: 0
}], [{
  x: -1,
  y: -2
}, {
  x: 0,
  y: -2
}, {
  x: 1,
  y: -2
}, {
  x: -2,
  y: -1
}, {
  x: -1,
  y: -1
}, {
  x: 0,
  y: -1
}, {
  x: 1,
  y: -1
}, {
  x: -2,
  y: 0
}, {
  x: -1,
  y: 0
}], [{
  x: -3,
  y: -1
}, {
  x: -2,
  y: -1
}, {
  x: -1,
  y: -1
}, {
  x: 0,
  y: -1
}, {
  x: 1,
  y: -1
}, {
  x: -4,
  y: 0
}, {
  x: -3,
  y: 0
}, {
  x: -2,
  y: 0
}, {
  x: -1,
  y: 0
}]];
const RefinementTemplates = [{
  coding: [{
    x: 0,
    y: -1
  }, {
    x: 1,
    y: -1
  }, {
    x: -1,
    y: 0
  }],
  reference: [{
    x: 0,
    y: -1
  }, {
    x: 1,
    y: -1
  }, {
    x: -1,
    y: 0
  }, {
    x: 0,
    y: 0
  }, {
    x: 1,
    y: 0
  }, {
    x: -1,
    y: 1
  }, {
    x: 0,
    y: 1
  }, {
    x: 1,
    y: 1
  }]
}, {
  coding: [{
    x: -1,
    y: -1
  }, {
    x: 0,
    y: -1
  }, {
    x: 1,
    y: -1
  }, {
    x: -1,
    y: 0
  }],
  reference: [{
    x: 0,
    y: -1
  }, {
    x: -1,
    y: 0
  }, {
    x: 0,
    y: 0
  }, {
    x: 1,
    y: 0
  }, {
    x: 0,
    y: 1
  }, {
    x: 1,
    y: 1
  }]
}];
const ReusedContexts = [0x9b25, 0x0795, 0x00e5, 0x0195];
const RefinementReusedContexts = [0x0020, 0x0008];
function decodeBitmapTemplate0(width, height, decodingContext) {
  const decoder = decodingContext.decoder;
  const contexts = decodingContext.contextCache.getContexts("GB");
  const bitmap = [];
  let contextLabel, i, j, pixel, row, row1, row2;
  const OLD_PIXEL_MASK = 0x7bf7;
  for (i = 0; i < height; i++) {
    row = bitmap[i] = new Uint8Array(width);
    row1 = i < 1 ? row : bitmap[i - 1];
    row2 = i < 2 ? row : bitmap[i - 2];
    contextLabel = row2[0] << 13 | row2[1] << 12 | row2[2] << 11 | row1[0] << 7 | row1[1] << 6 | row1[2] << 5 | row1[3] << 4;
    for (j = 0; j < width; j++) {
      row[j] = pixel = decoder.readBit(contexts, contextLabel);
      contextLabel = (contextLabel & OLD_PIXEL_MASK) << 1 | (j + 3 < width ? row2[j + 3] << 11 : 0) | (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel;
    }
  }
  return bitmap;
}
function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) {
  if (mmr) {
    const input = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);
    return decodeMMRBitmap(input, width, height, false);
  }
  if (templateIndex === 0 && !skip && !prediction && at.length === 4 && at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) {
    return decodeBitmapTemplate0(width, height, decodingContext);
  }
  const useskip = !!skip;
  const template = CodingTemplates[templateIndex].concat(at);
  template.sort(function (a, b) {
    return a.y - b.y || a.x - b.x;
  });
  const templateLength = template.length;
  const templateX = new Int8Array(templateLength);
  const templateY = new Int8Array(templateLength);
  const changingTemplateEntries = [];
  let reuseMask = 0,
    minX = 0,
    maxX = 0,
    minY = 0;
  let c, k;
  for (k = 0; k < templateLength; k++) {
    templateX[k] = template[k].x;
    templateY[k] = template[k].y;
    minX = Math.min(minX, template[k].x);
    maxX = Math.max(maxX, template[k].x);
    minY = Math.min(minY, template[k].y);
    if (k < templateLength - 1 && template[k].y === template[k + 1].y && template[k].x === template[k + 1].x - 1) {
      reuseMask |= 1 << templateLength - 1 - k;
    } else {
      changingTemplateEntries.push(k);
    }
  }
  const changingEntriesLength = changingTemplateEntries.length;
  const changingTemplateX = new Int8Array(changingEntriesLength);
  const changingTemplateY = new Int8Array(changingEntriesLength);
  const changingTemplateBit = new Uint16Array(changingEntriesLength);
  for (c = 0; c < changingEntriesLength; c++) {
    k = changingTemplateEntries[c];
    changingTemplateX[c] = template[k].x;
    changingTemplateY[c] = template[k].y;
    changingTemplateBit[c] = 1 << templateLength - 1 - k;
  }
  const sbb_left = -minX;
  const sbb_top = -minY;
  const sbb_right = width - maxX;
  const pseudoPixelContext = ReusedContexts[templateIndex];
  let row = new Uint8Array(width);
  const bitmap = [];
  const decoder = decodingContext.decoder;
  const contexts = decodingContext.contextCache.getContexts("GB");
  let ltp = 0,
    j,
    i0,
    j0,
    contextLabel = 0,
    bit,
    shift;
  for (let i = 0; i < height; i++) {
    if (prediction) {
      const sltp = decoder.readBit(contexts, pseudoPixelContext);
      ltp ^= sltp;
      if (ltp) {
        bitmap.push(row);
        continue;
      }
    }
    row = new Uint8Array(row);
    bitmap.push(row);
    for (j = 0; j < width; j++) {
      if (useskip && skip[i][j]) {
        row[j] = 0;
        continue;
      }
      if (j >= sbb_left && j < sbb_right && i >= sbb_top) {
        contextLabel = contextLabel << 1 & reuseMask;
        for (k = 0; k < changingEntriesLength; k++) {
          i0 = i + changingTemplateY[k];
          j0 = j + changingTemplateX[k];
          bit = bitmap[i0][j0];
          if (bit) {
            bit = changingTemplateBit[k];
            contextLabel |= bit;
          }
        }
      } else {
        contextLabel = 0;
        shift = templateLength - 1;
        for (k = 0; k < templateLength; k++, shift--) {
          j0 = j + templateX[k];
          if (j0 >= 0 && j0 < width) {
            i0 = i + templateY[k];
            if (i0 >= 0) {
              bit = bitmap[i0][j0];
              if (bit) {
                contextLabel |= bit << shift;
              }
            }
          }
        }
      }
      const pixel = decoder.readBit(contexts, contextLabel);
      row[j] = pixel;
    }
  }
  return bitmap;
}
function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) {
  let codingTemplate = RefinementTemplates[templateIndex].coding;
  if (templateIndex === 0) {
    codingTemplate = codingTemplate.concat([at[0]]);
  }
  const codingTemplateLength = codingTemplate.length;
  const codingTemplateX = new Int32Array(codingTemplateLength);
  const codingTemplateY = new Int32Array(codingTemplateLength);
  let k;
  for (k = 0; k < codingTemplateLength; k++) {
    codingTemplateX[k] = codingTemplate[k].x;
    codingTemplateY[k] = codingTemplate[k].y;
  }
  let referenceTemplate = RefinementTemplates[templateIndex].reference;
  if (templateIndex === 0) {
    referenceTemplate = referenceTemplate.concat([at[1]]);
  }
  const referenceTemplateLength = referenceTemplate.length;
  const referenceTemplateX = new Int32Array(referenceTemplateLength);
  const referenceTemplateY = new Int32Array(referenceTemplateLength);
  for (k = 0; k < referenceTemplateLength; k++) {
    referenceTemplateX[k] = referenceTemplate[k].x;
    referenceTemplateY[k] = referenceTemplate[k].y;
  }
  const referenceWidth = referenceBitmap[0].length;
  const referenceHeight = referenceBitmap.length;
  const pseudoPixelContext = RefinementReusedContexts[templateIndex];
  const bitmap = [];
  const decoder = decodingContext.decoder;
  const contexts = decodingContext.contextCache.getContexts("GR");
  let ltp = 0;
  for (let i = 0; i < height; i++) {
    if (prediction) {
      const sltp = decoder.readBit(contexts, pseudoPixelContext);
      ltp ^= sltp;
      if (ltp) {
        throw new Jbig2Error("prediction is not supported");
      }
    }
    const row = new Uint8Array(width);
    bitmap.push(row);
    for (let j = 0; j < width; j++) {
      let i0, j0;
      let contextLabel = 0;
      for (k = 0; k < codingTemplateLength; k++) {
        i0 = i + codingTemplateY[k];
        j0 = j + codingTemplateX[k];
        if (i0 < 0 || j0 < 0 || j0 >= width) {
          contextLabel <<= 1;
        } else {
          contextLabel = contextLabel << 1 | bitmap[i0][j0];
        }
      }
      for (k = 0; k < referenceTemplateLength; k++) {
        i0 = i + referenceTemplateY[k] - offsetY;
        j0 = j + referenceTemplateX[k] - offsetX;
        if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth) {
          contextLabel <<= 1;
        } else {
          contextLabel = contextLabel << 1 | referenceBitmap[i0][j0];
        }
      }
      const pixel = decoder.readBit(contexts, contextLabel);
      row[j] = pixel;
    }
  }
  return bitmap;
}
function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext, huffmanInput) {
  if (huffman && refinement) {
    throw new Jbig2Error("symbol refinement with Huffman is not supported");
  }
  const newSymbols = [];
  let currentHeight = 0;
  let symbolCodeLength = (0, _core_utils.log2)(symbols.length + numberOfNewSymbols);
  const decoder = decodingContext.decoder;
  const contextCache = decodingContext.contextCache;
  let tableB1, symbolWidths;
  if (huffman) {
    tableB1 = getStandardTable(1);
    symbolWidths = [];
    symbolCodeLength = Math.max(symbolCodeLength, 1);
  }
  while (newSymbols.length < numberOfNewSymbols) {
    const deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, "IADH", decoder);
    currentHeight += deltaHeight;
    let currentWidth = 0,
      totalWidth = 0;
    const firstSymbol = huffman ? symbolWidths.length : 0;
    while (true) {
      const deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, "IADW", decoder);
      if (deltaWidth === null) {
        break;
      }
      currentWidth += deltaWidth;
      totalWidth += currentWidth;
      let bitmap;
      if (refinement) {
        const numberOfInstances = decodeInteger(contextCache, "IAAI", decoder);
        if (numberOfInstances > 1) {
          bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, 0, huffmanInput);
        } else {
          const symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);
          const rdx = decodeInteger(contextCache, "IARDX", decoder);
          const rdy = decodeInteger(contextCache, "IARDY", decoder);
          const symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length];
          bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext);
        }
        newSymbols.push(bitmap);
      } else if (huffman) {
        symbolWidths.push(currentWidth);
      } else {
        bitmap = decodeBitmap(false, currentWidth, currentHeight, templateIndex, false, null, at, decodingContext);
        newSymbols.push(bitmap);
      }
    }
    if (huffman && !refinement) {
      const bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput);
      huffmanInput.byteAlign();
      let collectiveBitmap;
      if (bitmapSize === 0) {
        collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight);
      } else {
        const originalEnd = huffmanInput.end;
        const bitmapEnd = huffmanInput.position + bitmapSize;
        huffmanInput.end = bitmapEnd;
        collectiveBitmap = decodeMMRBitmap(huffmanInput, totalWidth, currentHeight, false);
        huffmanInput.end = originalEnd;
        huffmanInput.position = bitmapEnd;
      }
      const numberOfSymbolsDecoded = symbolWidths.length;
      if (firstSymbol === numberOfSymbolsDecoded - 1) {
        newSymbols.push(collectiveBitmap);
      } else {
        let i,
          y,
          xMin = 0,
          xMax,
          bitmapWidth,
          symbolBitmap;
        for (i = firstSymbol; i < numberOfSymbolsDecoded; i++) {
          bitmapWidth = symbolWidths[i];
          xMax = xMin + bitmapWidth;
          symbolBitmap = [];
          for (y = 0; y < currentHeight; y++) {
            symbolBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));
          }
          newSymbols.push(symbolBitmap);
          xMin = xMax;
        }
      }
    }
  }
  const exportedSymbols = [],
    flags = [];
  let currentFlag = false,
    i,
    ii;
  const totalSymbolsLength = symbols.length + numberOfNewSymbols;
  while (flags.length < totalSymbolsLength) {
    let runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, "IAEX", decoder);
    while (runLength--) {
      flags.push(currentFlag);
    }
    currentFlag = !currentFlag;
  }
  for (i = 0, ii = symbols.length; i < ii; i++) {
    if (flags[i]) {
      exportedSymbols.push(symbols[i]);
    }
  }
  for (let j = 0; j < numberOfNewSymbols; i++, j++) {
    if (flags[i]) {
      exportedSymbols.push(newSymbols[j]);
    }
  }
  return exportedSymbols;
}
function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, logStripSize, huffmanInput) {
  if (huffman && refinement) {
    throw new Jbig2Error("refinement with Huffman is not supported");
  }
  const bitmap = [];
  let i, row;
  for (i = 0; i < height; i++) {
    row = new Uint8Array(width);
    if (defaultPixelValue) {
      for (let j = 0; j < width; j++) {
        row[j] = defaultPixelValue;
      }
    }
    bitmap.push(row);
  }
  const decoder = decodingContext.decoder;
  const contextCache = decodingContext.contextCache;
  let stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, "IADT", decoder);
  let firstS = 0;
  i = 0;
  while (i < numberOfSymbolInstances) {
    const deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, "IADT", decoder);
    stripT += deltaT;
    const deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, "IAFS", decoder);
    firstS += deltaFirstS;
    let currentS = firstS;
    do {
      let currentT = 0;
      if (stripSize > 1) {
        currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, "IAIT", decoder);
      }
      const t = stripSize * stripT + currentT;
      const symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength);
      const applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, "IARI", decoder));
      let symbolBitmap = inputSymbols[symbolId];
      let symbolWidth = symbolBitmap[0].length;
      let symbolHeight = symbolBitmap.length;
      if (applyRefinement) {
        const rdw = decodeInteger(contextCache, "IARDW", decoder);
        const rdh = decodeInteger(contextCache, "IARDH", decoder);
        const rdx = decodeInteger(contextCache, "IARDX", decoder);
        const rdy = decodeInteger(contextCache, "IARDY", decoder);
        symbolWidth += rdw;
        symbolHeight += rdh;
        symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext);
      }
      const offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1);
      const offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0);
      let s2, t2, symbolRow;
      if (transposed) {
        for (s2 = 0; s2 < symbolHeight; s2++) {
          row = bitmap[offsetS + s2];
          if (!row) {
            continue;
          }
          symbolRow = symbolBitmap[s2];
          const maxWidth = Math.min(width - offsetT, symbolWidth);
          switch (combinationOperator) {
            case 0:
              for (t2 = 0; t2 < maxWidth; t2++) {
                row[offsetT + t2] |= symbolRow[t2];
              }
              break;
            case 2:
              for (t2 = 0; t2 < maxWidth; t2++) {
                row[offsetT + t2] ^= symbolRow[t2];
              }
              break;
            default:
              throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
          }
        }
        currentS += symbolHeight - 1;
      } else {
        for (t2 = 0; t2 < symbolHeight; t2++) {
          row = bitmap[offsetT + t2];
          if (!row) {
            continue;
          }
          symbolRow = symbolBitmap[t2];
          switch (combinationOperator) {
            case 0:
              for (s2 = 0; s2 < symbolWidth; s2++) {
                row[offsetS + s2] |= symbolRow[s2];
              }
              break;
            case 2:
              for (s2 = 0; s2 < symbolWidth; s2++) {
                row[offsetS + s2] ^= symbolRow[s2];
              }
              break;
            default:
              throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
          }
        }
        currentS += symbolWidth - 1;
      }
      i++;
      const deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, "IADS", decoder);
      if (deltaS === null) {
        break;
      }
      currentS += deltaS + dsOffset;
    } while (true);
  }
  return bitmap;
}
function decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) {
  const at = [];
  if (!mmr) {
    at.push({
      x: -patternWidth,
      y: 0
    });
    if (template === 0) {
      at.push({
        x: -3,
        y: -1
      }, {
        x: 2,
        y: -2
      }, {
        x: -2,
        y: -2
      });
    }
  }
  const collectiveWidth = (maxPatternIndex + 1) * patternWidth;
  const collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext);
  const patterns = [];
  for (let i = 0; i <= maxPatternIndex; i++) {
    const patternBitmap = [];
    const xMin = patternWidth * i;
    const xMax = xMin + patternWidth;
    for (let y = 0; y < patternHeight; y++) {
      patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));
    }
    patterns.push(patternBitmap);
  }
  return patterns;
}
function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) {
  const skip = null;
  if (enableSkip) {
    throw new Jbig2Error("skip is not supported");
  }
  if (combinationOperator !== 0) {
    throw new Jbig2Error(`operator "${combinationOperator}" is not supported in halftone region`);
  }
  const regionBitmap = [];
  let i, j, row;
  for (i = 0; i < regionHeight; i++) {
    row = new Uint8Array(regionWidth);
    if (defaultPixelValue) {
      for (j = 0; j < regionWidth; j++) {
        row[j] = defaultPixelValue;
      }
    }
    regionBitmap.push(row);
  }
  const numberOfPatterns = patterns.length;
  const pattern0 = patterns[0];
  const patternWidth = pattern0[0].length,
    patternHeight = pattern0.length;
  const bitsPerValue = (0, _core_utils.log2)(numberOfPatterns);
  const at = [];
  if (!mmr) {
    at.push({
      x: template <= 1 ? 3 : 2,
      y: -1
    });
    if (template === 0) {
      at.push({
        x: -3,
        y: -1
      }, {
        x: 2,
        y: -2
      }, {
        x: -2,
        y: -2
      });
    }
  }
  const grayScaleBitPlanes = [];
  let mmrInput, bitmap;
  if (mmr) {
    mmrInput = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);
  }
  for (i = bitsPerValue - 1; i >= 0; i--) {
    if (mmr) {
      bitmap = decodeMMRBitmap(mmrInput, gridWidth, gridHeight, true);
    } else {
      bitmap = decodeBitmap(false, gridWidth, gridHeight, template, false, skip, at, decodingContext);
    }
    grayScaleBitPlanes[i] = bitmap;
  }
  let mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow;
  for (mg = 0; mg < gridHeight; mg++) {
    for (ng = 0; ng < gridWidth; ng++) {
      bit = 0;
      patternIndex = 0;
      for (j = bitsPerValue - 1; j >= 0; j--) {
        bit ^= grayScaleBitPlanes[j][mg][ng];
        patternIndex |= bit << j;
      }
      patternBitmap = patterns[patternIndex];
      x = gridOffsetX + mg * gridVectorY + ng * gridVectorX >> 8;
      y = gridOffsetY + mg * gridVectorX - ng * gridVectorY >> 8;
      if (x >= 0 && x + patternWidth <= regionWidth && y >= 0 && y + patternHeight <= regionHeight) {
        for (i = 0; i < patternHeight; i++) {
          regionRow = regionBitmap[y + i];
          patternRow = patternBitmap[i];
          for (j = 0; j < patternWidth; j++) {
            regionRow[x + j] |= patternRow[j];
          }
        }
      } else {
        let regionX, regionY;
        for (i = 0; i < patternHeight; i++) {
          regionY = y + i;
          if (regionY < 0 || regionY >= regionHeight) {
            continue;
          }
          regionRow = regionBitmap[regionY];
          patternRow = patternBitmap[i];
          for (j = 0; j < patternWidth; j++) {
            regionX = x + j;
            if (regionX >= 0 && regionX < regionWidth) {
              regionRow[regionX] |= patternRow[j];
            }
          }
        }
      }
    }
  }
  return regionBitmap;
}
function readSegmentHeader(data, start) {
  const segmentHeader = {};
  segmentHeader.number = (0, _core_utils.readUint32)(data, start);
  const flags = data[start + 4];
  const segmentType = flags & 0x3f;
  if (!SegmentTypes[segmentType]) {
    throw new Jbig2Error("invalid segment type: " + segmentType);
  }
  segmentHeader.type = segmentType;
  segmentHeader.typeName = SegmentTypes[segmentType];
  segmentHeader.deferredNonRetain = !!(flags & 0x80);
  const pageAssociationFieldSize = !!(flags & 0x40);
  const referredFlags = data[start + 5];
  let referredToCount = referredFlags >> 5 & 7;
  const retainBits = [referredFlags & 31];
  let position = start + 6;
  if (referredFlags === 7) {
    referredToCount = (0, _core_utils.readUint32)(data, position - 1) & 0x1fffffff;
    position += 3;
    let bytes = referredToCount + 7 >> 3;
    retainBits[0] = data[position++];
    while (--bytes > 0) {
      retainBits.push(data[position++]);
    }
  } else if (referredFlags === 5 || referredFlags === 6) {
    throw new Jbig2Error("invalid referred-to flags");
  }
  segmentHeader.retainBits = retainBits;
  let referredToSegmentNumberSize = 4;
  if (segmentHeader.number <= 256) {
    referredToSegmentNumberSize = 1;
  } else if (segmentHeader.number <= 65536) {
    referredToSegmentNumberSize = 2;
  }
  const referredTo = [];
  let i, ii;
  for (i = 0; i < referredToCount; i++) {
    let number;
    if (referredToSegmentNumberSize === 1) {
      number = data[position];
    } else if (referredToSegmentNumberSize === 2) {
      number = (0, _core_utils.readUint16)(data, position);
    } else {
      number = (0, _core_utils.readUint32)(data, position);
    }
    referredTo.push(number);
    position += referredToSegmentNumberSize;
  }
  segmentHeader.referredTo = referredTo;
  if (!pageAssociationFieldSize) {
    segmentHeader.pageAssociation = data[position++];
  } else {
    segmentHeader.pageAssociation = (0, _core_utils.readUint32)(data, position);
    position += 4;
  }
  segmentHeader.length = (0, _core_utils.readUint32)(data, position);
  position += 4;
  if (segmentHeader.length === 0xffffffff) {
    if (segmentType === 38) {
      const genericRegionInfo = readRegionSegmentInformation(data, position);
      const genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength];
      const genericRegionMmr = !!(genericRegionSegmentFlags & 1);
      const searchPatternLength = 6;
      const searchPattern = new Uint8Array(searchPatternLength);
      if (!genericRegionMmr) {
        searchPattern[0] = 0xff;
        searchPattern[1] = 0xac;
      }
      searchPattern[2] = genericRegionInfo.height >>> 24 & 0xff;
      searchPattern[3] = genericRegionInfo.height >> 16 & 0xff;
      searchPattern[4] = genericRegionInfo.height >> 8 & 0xff;
      searchPattern[5] = genericRegionInfo.height & 0xff;
      for (i = position, ii = data.length; i < ii; i++) {
        let j = 0;
        while (j < searchPatternLength && searchPattern[j] === data[i + j]) {
          j++;
        }
        if (j === searchPatternLength) {
          segmentHeader.length = i + searchPatternLength;
          break;
        }
      }
      if (segmentHeader.length === 0xffffffff) {
        throw new Jbig2Error("segment end was not found");
      }
    } else {
      throw new Jbig2Error("invalid unknown segment length");
    }
  }
  segmentHeader.headerEnd = position;
  return segmentHeader;
}
function readSegments(header, data, start, end) {
  const segments = [];
  let position = start;
  while (position < end) {
    const segmentHeader = readSegmentHeader(data, position);
    position = segmentHeader.headerEnd;
    const segment = {
      header: segmentHeader,
      data
    };
    if (!header.randomAccess) {
      segment.start = position;
      position += segmentHeader.length;
      segment.end = position;
    }
    segments.push(segment);
    if (segmentHeader.type === 51) {
      break;
    }
  }
  if (header.randomAccess) {
    for (let i = 0, ii = segments.length; i < ii; i++) {
      segments[i].start = position;
      position += segments[i].header.length;
      segments[i].end = position;
    }
  }
  return segments;
}
function readRegionSegmentInformation(data, start) {
  return {
    width: (0, _core_utils.readUint32)(data, start),
    height: (0, _core_utils.readUint32)(data, start + 4),
    x: (0, _core_utils.readUint32)(data, start + 8),
    y: (0, _core_utils.readUint32)(data, start + 12),
    combinationOperator: data[start + 16] & 7
  };
}
const RegionSegmentInformationFieldLength = 17;
function processSegment(segment, visitor) {
  const header = segment.header;
  const data = segment.data,
    end = segment.end;
  let position = segment.start;
  let args, at, i, atLength;
  switch (header.type) {
    case 0:
      const dictionary = {};
      const dictionaryFlags = (0, _core_utils.readUint16)(data, position);
      dictionary.huffman = !!(dictionaryFlags & 1);
      dictionary.refinement = !!(dictionaryFlags & 2);
      dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3;
      dictionary.huffmanDWSelector = dictionaryFlags >> 4 & 3;
      dictionary.bitmapSizeSelector = dictionaryFlags >> 6 & 1;
      dictionary.aggregationInstancesSelector = dictionaryFlags >> 7 & 1;
      dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256);
      dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512);
      dictionary.template = dictionaryFlags >> 10 & 3;
      dictionary.refinementTemplate = dictionaryFlags >> 12 & 1;
      position += 2;
      if (!dictionary.huffman) {
        atLength = dictionary.template === 0 ? 4 : 1;
        at = [];
        for (i = 0; i < atLength; i++) {
          at.push({
            x: (0, _core_utils.readInt8)(data, position),
            y: (0, _core_utils.readInt8)(data, position + 1)
          });
          position += 2;
        }
        dictionary.at = at;
      }
      if (dictionary.refinement && !dictionary.refinementTemplate) {
        at = [];
        for (i = 0; i < 2; i++) {
          at.push({
            x: (0, _core_utils.readInt8)(data, position),
            y: (0, _core_utils.readInt8)(data, position + 1)
          });
          position += 2;
        }
        dictionary.refinementAt = at;
      }
      dictionary.numberOfExportedSymbols = (0, _core_utils.readUint32)(data, position);
      position += 4;
      dictionary.numberOfNewSymbols = (0, _core_utils.readUint32)(data, position);
      position += 4;
      args = [dictionary, header.number, header.referredTo, data, position, end];
      break;
    case 6:
    case 7:
      const textRegion = {};
      textRegion.info = readRegionSegmentInformation(data, position);
      position += RegionSegmentInformationFieldLength;
      const textRegionSegmentFlags = (0, _core_utils.readUint16)(data, position);
      position += 2;
      textRegion.huffman = !!(textRegionSegmentFlags & 1);
      textRegion.refinement = !!(textRegionSegmentFlags & 2);
      textRegion.logStripSize = textRegionSegmentFlags >> 2 & 3;
      textRegion.stripSize = 1 << textRegion.logStripSize;
      textRegion.referenceCorner = textRegionSegmentFlags >> 4 & 3;
      textRegion.transposed = !!(textRegionSegmentFlags & 64);
      textRegion.combinationOperator = textRegionSegmentFlags >> 7 & 3;
      textRegion.defaultPixelValue = textRegionSegmentFlags >> 9 & 1;
      textRegion.dsOffset = textRegionSegmentFlags << 17 >> 27;
      textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1;
      if (textRegion.huffman) {
        const textRegionHuffmanFlags = (0, _core_utils.readUint16)(data, position);
        position += 2;
        textRegion.huffmanFS = textRegionHuffmanFlags & 3;
        textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3;
        textRegion.huffmanDT = textRegionHuffmanFlags >> 4 & 3;
        textRegion.huffmanRefinementDW = textRegionHuffmanFlags >> 6 & 3;
        textRegion.huffmanRefinementDH = textRegionHuffmanFlags >> 8 & 3;
        textRegion.huffmanRefinementDX = textRegionHuffmanFlags >> 10 & 3;
        textRegion.huffmanRefinementDY = textRegionHuffmanFlags >> 12 & 3;
        textRegion.huffmanRefinementSizeSelector = !!(textRegionHuffmanFlags & 0x4000);
      }
      if (textRegion.refinement && !textRegion.refinementTemplate) {
        at = [];
        for (i = 0; i < 2; i++) {
          at.push({
            x: (0, _core_utils.readInt8)(data, position),
            y: (0, _core_utils.readInt8)(data, position + 1)
          });
          position += 2;
        }
        textRegion.refinementAt = at;
      }
      textRegion.numberOfSymbolInstances = (0, _core_utils.readUint32)(data, position);
      position += 4;
      args = [textRegion, header.referredTo, data, position, end];
      break;
    case 16:
      const patternDictionary = {};
      const patternDictionaryFlags = data[position++];
      patternDictionary.mmr = !!(patternDictionaryFlags & 1);
      patternDictionary.template = patternDictionaryFlags >> 1 & 3;
      patternDictionary.patternWidth = data[position++];
      patternDictionary.patternHeight = data[position++];
      patternDictionary.maxPatternIndex = (0, _core_utils.readUint32)(data, position);
      position += 4;
      args = [patternDictionary, header.number, data, position, end];
      break;
    case 22:
    case 23:
      const halftoneRegion = {};
      halftoneRegion.info = readRegionSegmentInformation(data, position);
      position += RegionSegmentInformationFieldLength;
      const halftoneRegionFlags = data[position++];
      halftoneRegion.mmr = !!(halftoneRegionFlags & 1);
      halftoneRegion.template = halftoneRegionFlags >> 1 & 3;
      halftoneRegion.enableSkip = !!(halftoneRegionFlags & 8);
      halftoneRegion.combinationOperator = halftoneRegionFlags >> 4 & 7;
      halftoneRegion.defaultPixelValue = halftoneRegionFlags >> 7 & 1;
      halftoneRegion.gridWidth = (0, _core_utils.readUint32)(data, position);
      position += 4;
      halftoneRegion.gridHeight = (0, _core_utils.readUint32)(data, position);
      position += 4;
      halftoneRegion.gridOffsetX = (0, _core_utils.readUint32)(data, position) & 0xffffffff;
      position += 4;
      halftoneRegion.gridOffsetY = (0, _core_utils.readUint32)(data, position) & 0xffffffff;
      position += 4;
      halftoneRegion.gridVectorX = (0, _core_utils.readUint16)(data, position);
      position += 2;
      halftoneRegion.gridVectorY = (0, _core_utils.readUint16)(data, position);
      position += 2;
      args = [halftoneRegion, header.referredTo, data, position, end];
      break;
    case 38:
    case 39:
      const genericRegion = {};
      genericRegion.info = readRegionSegmentInformation(data, position);
      position += RegionSegmentInformationFieldLength;
      const genericRegionSegmentFlags = data[position++];
      genericRegion.mmr = !!(genericRegionSegmentFlags & 1);
      genericRegion.template = genericRegionSegmentFlags >> 1 & 3;
      genericRegion.prediction = !!(genericRegionSegmentFlags & 8);
      if (!genericRegion.mmr) {
        atLength = genericRegion.template === 0 ? 4 : 1;
        at = [];
        for (i = 0; i < atLength; i++) {
          at.push({
            x: (0, _core_utils.readInt8)(data, position),
            y: (0, _core_utils.readInt8)(data, position + 1)
          });
          position += 2;
        }
        genericRegion.at = at;
      }
      args = [genericRegion, data, position, end];
      break;
    case 48:
      const pageInfo = {
        width: (0, _core_utils.readUint32)(data, position),
        height: (0, _core_utils.readUint32)(data, position + 4),
        resolutionX: (0, _core_utils.readUint32)(data, position + 8),
        resolutionY: (0, _core_utils.readUint32)(data, position + 12)
      };
      if (pageInfo.height === 0xffffffff) {
        delete pageInfo.height;
      }
      const pageSegmentFlags = data[position + 16];
      (0, _core_utils.readUint16)(data, position + 17);
      pageInfo.lossless = !!(pageSegmentFlags & 1);
      pageInfo.refinement = !!(pageSegmentFlags & 2);
      pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1;
      pageInfo.combinationOperator = pageSegmentFlags >> 3 & 3;
      pageInfo.requiresBuffer = !!(pageSegmentFlags & 32);
      pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64);
      args = [pageInfo];
      break;
    case 49:
      break;
    case 50:
      break;
    case 51:
      break;
    case 53:
      args = [header.number, data, position, end];
      break;
    case 62:
      break;
    default:
      throw new Jbig2Error(`segment type ${header.typeName}(${header.type}) is not implemented`);
  }
  const callbackName = "on" + header.typeName;
  if (callbackName in visitor) {
    visitor[callbackName].apply(visitor, args);
  }
}
function processSegments(segments, visitor) {
  for (let i = 0, ii = segments.length; i < ii; i++) {
    processSegment(segments[i], visitor);
  }
}
function parseJbig2Chunks(chunks) {
  const visitor = new SimpleSegmentVisitor();
  for (let i = 0, ii = chunks.length; i < ii; i++) {
    const chunk = chunks[i];
    const segments = readSegments({}, chunk.data, chunk.start, chunk.end);
    processSegments(segments, visitor);
  }
  return visitor.buffer;
}
function parseJbig2(data) {
  throw new Error("Not implemented: parseJbig2");
}
class SimpleSegmentVisitor {
  onPageInformation(info) {
    this.currentPageInfo = info;
    const rowSize = info.width + 7 >> 3;
    const buffer = new Uint8ClampedArray(rowSize * info.height);
    if (info.defaultPixelValue) {
      buffer.fill(0xff);
    }
    this.buffer = buffer;
  }
  drawBitmap(regionInfo, bitmap) {
    const pageInfo = this.currentPageInfo;
    const width = regionInfo.width,
      height = regionInfo.height;
    const rowSize = pageInfo.width + 7 >> 3;
    const combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator;
    const buffer = this.buffer;
    const mask0 = 128 >> (regionInfo.x & 7);
    let offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3);
    let i, j, mask, offset;
    switch (combinationOperator) {
      case 0:
        for (i = 0; i < height; i++) {
          mask = mask0;
          offset = offset0;
          for (j = 0; j < width; j++) {
            if (bitmap[i][j]) {
              buffer[offset] |= mask;
            }
            mask >>= 1;
            if (!mask) {
              mask = 128;
              offset++;
            }
          }
          offset0 += rowSize;
        }
        break;
      case 2:
        for (i = 0; i < height; i++) {
          mask = mask0;
          offset = offset0;
          for (j = 0; j < width; j++) {
            if (bitmap[i][j]) {
              buffer[offset] ^= mask;
            }
            mask >>= 1;
            if (!mask) {
              mask = 128;
              offset++;
            }
          }
          offset0 += rowSize;
        }
        break;
      default:
        throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
    }
  }
  onImmediateGenericRegion(region, data, start, end) {
    const regionInfo = region.info;
    const decodingContext = new DecodingContext(data, start, end);
    const bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext);
    this.drawBitmap(regionInfo, bitmap);
  }
  onImmediateLosslessGenericRegion() {
    this.onImmediateGenericRegion(...arguments);
  }
  onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) {
    let huffmanTables, huffmanInput;
    if (dictionary.huffman) {
      huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables);
      huffmanInput = new Reader(data, start, end);
    }
    let symbols = this.symbols;
    if (!symbols) {
      this.symbols = symbols = {};
    }
    const inputSymbols = [];
    for (const referredSegment of referredSegments) {
      const referredSymbols = symbols[referredSegment];
      if (referredSymbols) {
        inputSymbols.push(...referredSymbols);
      }
    }
    const decodingContext = new DecodingContext(data, start, end);
    symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, dictionary.numberOfExportedSymbols, huffmanTables, dictionary.template, dictionary.at, dictionary.refinementTemplate, dictionary.refinementAt, decodingContext, huffmanInput);
  }
  onImmediateTextRegion(region, referredSegments, data, start, end) {
    const regionInfo = region.info;
    let huffmanTables, huffmanInput;
    const symbols = this.symbols;
    const inputSymbols = [];
    for (const referredSegment of referredSegments) {
      const referredSymbols = symbols[referredSegment];
      if (referredSymbols) {
        inputSymbols.push(...referredSymbols);
      }
    }
    const symbolCodeLength = (0, _core_utils.log2)(inputSymbols.length);
    if (region.huffman) {
      huffmanInput = new Reader(data, start, end);
      huffmanTables = getTextRegionHuffmanTables(region, referredSegments, this.customTables, inputSymbols.length, huffmanInput);
    }
    const decodingContext = new DecodingContext(data, start, end);
    const bitmap = decodeTextRegion(region.huffman, region.refinement, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.numberOfSymbolInstances, region.stripSize, inputSymbols, symbolCodeLength, region.transposed, region.dsOffset, region.referenceCorner, region.combinationOperator, huffmanTables, region.refinementTemplate, region.refinementAt, decodingContext, region.logStripSize, huffmanInput);
    this.drawBitmap(regionInfo, bitmap);
  }
  onImmediateLosslessTextRegion() {
    this.onImmediateTextRegion(...arguments);
  }
  onPatternDictionary(dictionary, currentSegment, data, start, end) {
    let patterns = this.patterns;
    if (!patterns) {
      this.patterns = patterns = {};
    }
    const decodingContext = new DecodingContext(data, start, end);
    patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext);
  }
  onImmediateHalftoneRegion(region, referredSegments, data, start, end) {
    const patterns = this.patterns[referredSegments[0]];
    const regionInfo = region.info;
    const decodingContext = new DecodingContext(data, start, end);
    const bitmap = decodeHalftoneRegion(region.mmr, patterns, region.template, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.enableSkip, region.combinationOperator, region.gridWidth, region.gridHeight, region.gridOffsetX, region.gridOffsetY, region.gridVectorX, region.gridVectorY, decodingContext);
    this.drawBitmap(regionInfo, bitmap);
  }
  onImmediateLosslessHalftoneRegion() {
    this.onImmediateHalftoneRegion(...arguments);
  }
  onTables(currentSegment, data, start, end) {
    let customTables = this.customTables;
    if (!customTables) {
      this.customTables = customTables = {};
    }
    customTables[currentSegment] = decodeTablesSegment(data, start, end);
  }
}
class HuffmanLine {
  constructor(lineData) {
    if (lineData.length === 2) {
      this.isOOB = true;
      this.rangeLow = 0;
      this.prefixLength = lineData[0];
      this.rangeLength = 0;
      this.prefixCode = lineData[1];
      this.isLowerRange = false;
    } else {
      this.isOOB = false;
      this.rangeLow = lineData[0];
      this.prefixLength = lineData[1];
      this.rangeLength = lineData[2];
      this.prefixCode = lineData[3];
      this.isLowerRange = lineData[4] === "lower";
    }
  }
}
class HuffmanTreeNode {
  constructor(line) {
    this.children = [];
    if (line) {
      this.isLeaf = true;
      this.rangeLength = line.rangeLength;
      this.rangeLow = line.rangeLow;
      this.isLowerRange = line.isLowerRange;
      this.isOOB = line.isOOB;
    } else {
      this.isLeaf = false;
    }
  }
  buildTree(line, shift) {
    const bit = line.prefixCode >> shift & 1;
    if (shift <= 0) {
      this.children[bit] = new HuffmanTreeNode(line);
    } else {
      let node = this.children[bit];
      if (!node) {
        this.children[bit] = node = new HuffmanTreeNode(null);
      }
      node.buildTree(line, shift - 1);
    }
  }
  decodeNode(reader) {
    if (this.isLeaf) {
      if (this.isOOB) {
        return null;
      }
      const htOffset = reader.readBits(this.rangeLength);
      return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset);
    }
    const node = this.children[reader.readBit()];
    if (!node) {
      throw new Jbig2Error("invalid Huffman data");
    }
    return node.decodeNode(reader);
  }
}
class HuffmanTable {
  constructor(lines, prefixCodesDone) {
    if (!prefixCodesDone) {
      this.assignPrefixCodes(lines);
    }
    this.rootNode = new HuffmanTreeNode(null);
    for (let i = 0, ii = lines.length; i < ii; i++) {
      const line = lines[i];
      if (line.prefixLength > 0) {
        this.rootNode.buildTree(line, line.prefixLength - 1);
      }
    }
  }
  decode(reader) {
    return this.rootNode.decodeNode(reader);
  }
  assignPrefixCodes(lines) {
    const linesLength = lines.length;
    let prefixLengthMax = 0;
    for (let i = 0; i < linesLength; i++) {
      prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength);
    }
    const histogram = new Uint32Array(prefixLengthMax + 1);
    for (let i = 0; i < linesLength; i++) {
      histogram[lines[i].prefixLength]++;
    }
    let currentLength = 1,
      firstCode = 0,
      currentCode,
      currentTemp,
      line;
    histogram[0] = 0;
    while (currentLength <= prefixLengthMax) {
      firstCode = firstCode + histogram[currentLength - 1] << 1;
      currentCode = firstCode;
      currentTemp = 0;
      while (currentTemp < linesLength) {
        line = lines[currentTemp];
        if (line.prefixLength === currentLength) {
          line.prefixCode = currentCode;
          currentCode++;
        }
        currentTemp++;
      }
      currentLength++;
    }
  }
}
function decodeTablesSegment(data, start, end) {
  const flags = data[start];
  const lowestValue = (0, _core_utils.readUint32)(data, start + 1) & 0xffffffff;
  const highestValue = (0, _core_utils.readUint32)(data, start + 5) & 0xffffffff;
  const reader = new Reader(data, start + 9, end);
  const prefixSizeBits = (flags >> 1 & 7) + 1;
  const rangeSizeBits = (flags >> 4 & 7) + 1;
  const lines = [];
  let prefixLength,
    rangeLength,
    currentRangeLow = lowestValue;
  do {
    prefixLength = reader.readBits(prefixSizeBits);
    rangeLength = reader.readBits(rangeSizeBits);
    lines.push(new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0]));
    currentRangeLow += 1 << rangeLength;
  } while (currentRangeLow < highestValue);
  prefixLength = reader.readBits(prefixSizeBits);
  lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, "lower"]));
  prefixLength = reader.readBits(prefixSizeBits);
  lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0]));
  if (flags & 1) {
    prefixLength = reader.readBits(prefixSizeBits);
    lines.push(new HuffmanLine([prefixLength, 0]));
  }
  return new HuffmanTable(lines, false);
}
const standardTablesCache = {};
function getStandardTable(number) {
  let table = standardTablesCache[number];
  if (table) {
    return table;
  }
  let lines;
  switch (number) {
    case 1:
      lines = [[0, 1, 4, 0x0], [16, 2, 8, 0x2], [272, 3, 16, 0x6], [65808, 3, 32, 0x7]];
      break;
    case 2:
      lines = [[0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [75, 6, 32, 0x3e], [6, 0x3f]];
      break;
    case 3:
      lines = [[-256, 8, 8, 0xfe], [0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [-257, 8, 32, 0xff, "lower"], [75, 7, 32, 0x7e], [6, 0x3e]];
      break;
    case 4:
      lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [76, 5, 32, 0x1f]];
      break;
    case 5:
      lines = [[-255, 7, 8, 0x7e], [1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [-256, 7, 32, 0x7f, "lower"], [76, 6, 32, 0x3e]];
      break;
    case 6:
      lines = [[-2048, 5, 10, 0x1c], [-1024, 4, 9, 0x8], [-512, 4, 8, 0x9], [-256, 4, 7, 0xa], [-128, 5, 6, 0x1d], [-64, 5, 5, 0x1e], [-32, 4, 5, 0xb], [0, 2, 7, 0x0], [128, 3, 7, 0x2], [256, 3, 8, 0x3], [512, 4, 9, 0xc], [1024, 4, 10, 0xd], [-2049, 6, 32, 0x3e, "lower"], [2048, 6, 32, 0x3f]];
      break;
    case 7:
      lines = [[-1024, 4, 9, 0x8], [-512, 3, 8, 0x0], [-256, 4, 7, 0x9], [-128, 5, 6, 0x1a], [-64, 5, 5, 0x1b], [-32, 4, 5, 0xa], [0, 4, 5, 0xb], [32, 5, 5, 0x1c], [64, 5, 6, 0x1d], [128, 4, 7, 0xc], [256, 3, 8, 0x1], [512, 3, 9, 0x2], [1024, 3, 10, 0x3], [-1025, 5, 32, 0x1e, "lower"], [2048, 5, 32, 0x1f]];
      break;
    case 8:
      lines = [[-15, 8, 3, 0xfc], [-7, 9, 1, 0x1fc], [-5, 8, 1, 0xfd], [-3, 9, 0, 0x1fd], [-2, 7, 0, 0x7c], [-1, 4, 0, 0xa], [0, 2, 1, 0x0], [2, 5, 0, 0x1a], [3, 6, 0, 0x3a], [4, 3, 4, 0x4], [20, 6, 1, 0x3b], [22, 4, 4, 0xb], [38, 4, 5, 0xc], [70, 5, 6, 0x1b], [134, 5, 7, 0x1c], [262, 6, 7, 0x3c], [390, 7, 8, 0x7d], [646, 6, 10, 0x3d], [-16, 9, 32, 0x1fe, "lower"], [1670, 9, 32, 0x1ff], [2, 0x1]];
      break;
    case 9:
      lines = [[-31, 8, 4, 0xfc], [-15, 9, 2, 0x1fc], [-11, 8, 2, 0xfd], [-7, 9, 1, 0x1fd], [-5, 7, 1, 0x7c], [-3, 4, 1, 0xa], [-1, 3, 1, 0x2], [1, 3, 1, 0x3], [3, 5, 1, 0x1a], [5, 6, 1, 0x3a], [7, 3, 5, 0x4], [39, 6, 2, 0x3b], [43, 4, 5, 0xb], [75, 4, 6, 0xc], [139, 5, 7, 0x1b], [267, 5, 8, 0x1c], [523, 6, 8, 0x3c], [779, 7, 9, 0x7d], [1291, 6, 11, 0x3d], [-32, 9, 32, 0x1fe, "lower"], [3339, 9, 32, 0x1ff], [2, 0x0]];
      break;
    case 10:
      lines = [[-21, 7, 4, 0x7a], [-5, 8, 0, 0xfc], [-4, 7, 0, 0x7b], [-3, 5, 0, 0x18], [-2, 2, 2, 0x0], [2, 5, 0, 0x19], [3, 6, 0, 0x36], [4, 7, 0, 0x7c], [5, 8, 0, 0xfd], [6, 2, 6, 0x1], [70, 5, 5, 0x1a], [102, 6, 5, 0x37], [134, 6, 6, 0x38], [198, 6, 7, 0x39], [326, 6, 8, 0x3a], [582, 6, 9, 0x3b], [1094, 6, 10, 0x3c], [2118, 7, 11, 0x7d], [-22, 8, 32, 0xfe, "lower"], [4166, 8, 32, 0xff], [2, 0x2]];
      break;
    case 11:
      lines = [[1, 1, 0, 0x0], [2, 2, 1, 0x2], [4, 4, 0, 0xc], [5, 4, 1, 0xd], [7, 5, 1, 0x1c], [9, 5, 2, 0x1d], [13, 6, 2, 0x3c], [17, 7, 2, 0x7a], [21, 7, 3, 0x7b], [29, 7, 4, 0x7c], [45, 7, 5, 0x7d], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]];
      break;
    case 12:
      lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 1, 0x6], [5, 5, 0, 0x1c], [6, 5, 1, 0x1d], [8, 6, 1, 0x3c], [10, 7, 0, 0x7a], [11, 7, 1, 0x7b], [13, 7, 2, 0x7c], [17, 7, 3, 0x7d], [25, 7, 4, 0x7e], [41, 8, 5, 0xfe], [73, 8, 32, 0xff]];
      break;
    case 13:
      lines = [[1, 1, 0, 0x0], [2, 3, 0, 0x4], [3, 4, 0, 0xc], [4, 5, 0, 0x1c], [5, 4, 1, 0xd], [7, 3, 3, 0x5], [15, 6, 1, 0x3a], [17, 6, 2, 0x3b], [21, 6, 3, 0x3c], [29, 6, 4, 0x3d], [45, 6, 5, 0x3e], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]];
      break;
    case 14:
      lines = [[-2, 3, 0, 0x4], [-1, 3, 0, 0x5], [0, 1, 0, 0x0], [1, 3, 0, 0x6], [2, 3, 0, 0x7]];
      break;
    case 15:
      lines = [[-24, 7, 4, 0x7c], [-8, 6, 2, 0x3c], [-4, 5, 1, 0x1c], [-2, 4, 0, 0xc], [-1, 3, 0, 0x4], [0, 1, 0, 0x0], [1, 3, 0, 0x5], [2, 4, 0, 0xd], [3, 5, 1, 0x1d], [5, 6, 2, 0x3d], [9, 7, 4, 0x7d], [-25, 7, 32, 0x7e, "lower"], [25, 7, 32, 0x7f]];
      break;
    default:
      throw new Jbig2Error(`standard table B.${number} does not exist`);
  }
  for (let i = 0, ii = lines.length; i < ii; i++) {
    lines[i] = new HuffmanLine(lines[i]);
  }
  table = new HuffmanTable(lines, true);
  standardTablesCache[number] = table;
  return table;
}
class Reader {
  constructor(data, start, end) {
    this.data = data;
    this.start = start;
    this.end = end;
    this.position = start;
    this.shift = -1;
    this.currentByte = 0;
  }
  readBit() {
    if (this.shift < 0) {
      if (this.position >= this.end) {
        throw new Jbig2Error("end of data while reading bit");
      }
      this.currentByte = this.data[this.position++];
      this.shift = 7;
    }
    const bit = this.currentByte >> this.shift & 1;
    this.shift--;
    return bit;
  }
  readBits(numBits) {
    let result = 0,
      i;
    for (i = numBits - 1; i >= 0; i--) {
      result |= this.readBit() << i;
    }
    return result;
  }
  byteAlign() {
    this.shift = -1;
  }
  next() {
    if (this.position >= this.end) {
      return -1;
    }
    return this.data[this.position++];
  }
}
function getCustomHuffmanTable(index, referredTo, customTables) {
  let currentIndex = 0;
  for (let i = 0, ii = referredTo.length; i < ii; i++) {
    const table = customTables[referredTo[i]];
    if (table) {
      if (index === currentIndex) {
        return table;
      }
      currentIndex++;
    }
  }
  throw new Jbig2Error("can't find custom Huffman table");
}
function getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) {
  const codes = [];
  for (let i = 0; i <= 34; i++) {
    const codeLength = reader.readBits(4);
    codes.push(new HuffmanLine([i, codeLength, 0, 0]));
  }
  const runCodesTable = new HuffmanTable(codes, false);
  codes.length = 0;
  for (let i = 0; i < numberOfSymbols;) {
    const codeLength = runCodesTable.decode(reader);
    if (codeLength >= 32) {
      let repeatedLength, numberOfRepeats, j;
      switch (codeLength) {
        case 32:
          if (i === 0) {
            throw new Jbig2Error("no previous value in symbol ID table");
          }
          numberOfRepeats = reader.readBits(2) + 3;
          repeatedLength = codes[i - 1].prefixLength;
          break;
        case 33:
          numberOfRepeats = reader.readBits(3) + 3;
          repeatedLength = 0;
          break;
        case 34:
          numberOfRepeats = reader.readBits(7) + 11;
          repeatedLength = 0;
          break;
        default:
          throw new Jbig2Error("invalid code length in symbol ID table");
      }
      for (j = 0; j < numberOfRepeats; j++) {
        codes.push(new HuffmanLine([i, repeatedLength, 0, 0]));
        i++;
      }
    } else {
      codes.push(new HuffmanLine([i, codeLength, 0, 0]));
      i++;
    }
  }
  reader.byteAlign();
  const symbolIDTable = new HuffmanTable(codes, false);
  let customIndex = 0,
    tableFirstS,
    tableDeltaS,
    tableDeltaT;
  switch (textRegion.huffmanFS) {
    case 0:
    case 1:
      tableFirstS = getStandardTable(textRegion.huffmanFS + 6);
      break;
    case 3:
      tableFirstS = getCustomHuffmanTable(customIndex, referredTo, customTables);
      customIndex++;
      break;
    default:
      throw new Jbig2Error("invalid Huffman FS selector");
  }
  switch (textRegion.huffmanDS) {
    case 0:
    case 1:
    case 2:
      tableDeltaS = getStandardTable(textRegion.huffmanDS + 8);
      break;
    case 3:
      tableDeltaS = getCustomHuffmanTable(customIndex, referredTo, customTables);
      customIndex++;
      break;
    default:
      throw new Jbig2Error("invalid Huffman DS selector");
  }
  switch (textRegion.huffmanDT) {
    case 0:
    case 1:
    case 2:
      tableDeltaT = getStandardTable(textRegion.huffmanDT + 11);
      break;
    case 3:
      tableDeltaT = getCustomHuffmanTable(customIndex, referredTo, customTables);
      customIndex++;
      break;
    default:
      throw new Jbig2Error("invalid Huffman DT selector");
  }
  if (textRegion.refinement) {
    throw new Jbig2Error("refinement with Huffman is not supported");
  }
  return {
    symbolIDTable,
    tableFirstS,
    tableDeltaS,
    tableDeltaT
  };
}
function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) {
  let customIndex = 0,
    tableDeltaHeight,
    tableDeltaWidth;
  switch (dictionary.huffmanDHSelector) {
    case 0:
    case 1:
      tableDeltaHeight = getStandardTable(dictionary.huffmanDHSelector + 4);
      break;
    case 3:
      tableDeltaHeight = getCustomHuffmanTable(customIndex, referredTo, customTables);
      customIndex++;
      break;
    default:
      throw new Jbig2Error("invalid Huffman DH selector");
  }
  switch (dictionary.huffmanDWSelector) {
    case 0:
    case 1:
      tableDeltaWidth = getStandardTable(dictionary.huffmanDWSelector + 2);
      break;
    case 3:
      tableDeltaWidth = getCustomHuffmanTable(customIndex, referredTo, customTables);
      customIndex++;
      break;
    default:
      throw new Jbig2Error("invalid Huffman DW selector");
  }
  let tableBitmapSize, tableAggregateInstances;
  if (dictionary.bitmapSizeSelector) {
    tableBitmapSize = getCustomHuffmanTable(customIndex, referredTo, customTables);
    customIndex++;
  } else {
    tableBitmapSize = getStandardTable(1);
  }
  if (dictionary.aggregationInstancesSelector) {
    tableAggregateInstances = getCustomHuffmanTable(customIndex, referredTo, customTables);
  } else {
    tableAggregateInstances = getStandardTable(1);
  }
  return {
    tableDeltaHeight,
    tableDeltaWidth,
    tableBitmapSize,
    tableAggregateInstances
  };
}
function readUncompressedBitmap(reader, width, height) {
  const bitmap = [];
  for (let y = 0; y < height; y++) {
    const row = new Uint8Array(width);
    bitmap.push(row);
    for (let x = 0; x < width; x++) {
      row[x] = reader.readBit();
    }
    reader.byteAlign();
  }
  return bitmap;
}
function decodeMMRBitmap(input, width, height, endOfBlock) {
  const params = {
    K: -1,
    Columns: width,
    Rows: height,
    BlackIs1: true,
    EndOfBlock: endOfBlock
  };
  const decoder = new _ccitt.CCITTFaxDecoder(input, params);
  const bitmap = [];
  let currentByte,
    eof = false;
  for (let y = 0; y < height; y++) {
    const row = new Uint8Array(width);
    bitmap.push(row);
    let shift = -1;
    for (let x = 0; x < width; x++) {
      if (shift < 0) {
        currentByte = decoder.readNextChar();
        if (currentByte === -1) {
          currentByte = 0;
          eof = true;
        }
        shift = 7;
      }
      row[x] = currentByte >> shift & 1;
      shift--;
    }
  }
  if (endOfBlock && !eof) {
    const lookForEOFLimit = 5;
    for (let i = 0; i < lookForEOFLimit; i++) {
      if (decoder.readNextChar() === -1) {
        break;
      }
    }
  }
  return bitmap;
}
class Jbig2Image {
  parseChunks(chunks) {
    return parseJbig2Chunks(chunks);
  }
  parse(data) {
    throw new Error("Not implemented: Jbig2Image.parse");
  }
}
exports.Jbig2Image = Jbig2Image;

/***/ }),
/* 25 */
/***/ ((__unused_webpack_module, exports) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.ArithmeticDecoder = void 0;
const QeTable = [{
  qe: 0x5601,
  nmps: 1,
  nlps: 1,
  switchFlag: 1
}, {
  qe: 0x3401,
  nmps: 2,
  nlps: 6,
  switchFlag: 0
}, {
  qe: 0x1801,
  nmps: 3,
  nlps: 9,
  switchFlag: 0
}, {
  qe: 0x0ac1,
  nmps: 4,
  nlps: 12,
  switchFlag: 0
}, {
  qe: 0x0521,
  nmps: 5,
  nlps: 29,
  switchFlag: 0
}, {
  qe: 0x0221,
  nmps: 38,
  nlps: 33,
  switchFlag: 0
}, {
  qe: 0x5601,
  nmps: 7,
  nlps: 6,
  switchFlag: 1
}, {
  qe: 0x5401,
  nmps: 8,
  nlps: 14,
  switchFlag: 0
}, {
  qe: 0x4801,
  nmps: 9,
  nlps: 14,
  switchFlag: 0
}, {
  qe: 0x3801,
  nmps: 10,
  nlps: 14,
  switchFlag: 0
}, {
  qe: 0x3001,
  nmps: 11,
  nlps: 17,
  switchFlag: 0
}, {
  qe: 0x2401,
  nmps: 12,
  nlps: 18,
  switchFlag: 0
}, {
  qe: 0x1c01,
  nmps: 13,
  nlps: 20,
  switchFlag: 0
}, {
  qe: 0x1601,
  nmps: 29,
  nlps: 21,
  switchFlag: 0
}, {
  qe: 0x5601,
  nmps: 15,
  nlps: 14,
  switchFlag: 1
}, {
  qe: 0x5401,
  nmps: 16,
  nlps: 14,
  switchFlag: 0
}, {
  qe: 0x5101,
  nmps: 17,
  nlps: 15,
  switchFlag: 0
}, {
  qe: 0x4801,
  nmps: 18,
  nlps: 16,
  switchFlag: 0
}, {
  qe: 0x3801,
  nmps: 19,
  nlps: 17,
  switchFlag: 0
}, {
  qe: 0x3401,
  nmps: 20,
  nlps: 18,
  switchFlag: 0
}, {
  qe: 0x3001,
  nmps: 21,
  nlps: 19,
  switchFlag: 0
}, {
  qe: 0x2801,
  nmps: 22,
  nlps: 19,
  switchFlag: 0
}, {
  qe: 0x2401,
  nmps: 23,
  nlps: 20,
  switchFlag: 0
}, {
  qe: 0x2201,
  nmps: 24,
  nlps: 21,
  switchFlag: 0
}, {
  qe: 0x1c01,
  nmps: 25,
  nlps: 22,
  switchFlag: 0
}, {
  qe: 0x1801,
  nmps: 26,
  nlps: 23,
  switchFlag: 0
}, {
  qe: 0x1601,
  nmps: 27,
  nlps: 24,
  switchFlag: 0
}, {
  qe: 0x1401,
  nmps: 28,
  nlps: 25,
  switchFlag: 0
}, {
  qe: 0x1201,
  nmps: 29,
  nlps: 26,
  switchFlag: 0
}, {
  qe: 0x1101,
  nmps: 30,
  nlps: 27,
  switchFlag: 0
}, {
  qe: 0x0ac1,
  nmps: 31,
  nlps: 28,
  switchFlag: 0
}, {
  qe: 0x09c1,
  nmps: 32,
  nlps: 29,
  switchFlag: 0
}, {
  qe: 0x08a1,
  nmps: 33,
  nlps: 30,
  switchFlag: 0
}, {
  qe: 0x0521,
  nmps: 34,
  nlps: 31,
  switchFlag: 0
}, {
  qe: 0x0441,
  nmps: 35,
  nlps: 32,
  switchFlag: 0
}, {
  qe: 0x02a1,
  nmps: 36,
  nlps: 33,
  switchFlag: 0
}, {
  qe: 0x0221,
  nmps: 37,
  nlps: 34,
  switchFlag: 0
}, {
  qe: 0x0141,
  nmps: 38,
  nlps: 35,
  switchFlag: 0
}, {
  qe: 0x0111,
  nmps: 39,
  nlps: 36,
  switchFlag: 0
}, {
  qe: 0x0085,
  nmps: 40,
  nlps: 37,
  switchFlag: 0
}, {
  qe: 0x0049,
  nmps: 41,
  nlps: 38,
  switchFlag: 0
}, {
  qe: 0x0025,
  nmps: 42,
  nlps: 39,
  switchFlag: 0
}, {
  qe: 0x0015,
  nmps: 43,
  nlps: 40,
  switchFlag: 0
}, {
  qe: 0x0009,
  nmps: 44,
  nlps: 41,
  switchFlag: 0
}, {
  qe: 0x0005,
  nmps: 45,
  nlps: 42,
  switchFlag: 0
}, {
  qe: 0x0001,
  nmps: 45,
  nlps: 43,
  switchFlag: 0
}, {
  qe: 0x5601,
  nmps: 46,
  nlps: 46,
  switchFlag: 0
}];
class ArithmeticDecoder {
  constructor(data, start, end) {
    this.data = data;
    this.bp = start;
    this.dataEnd = end;
    this.chigh = data[start];
    this.clow = 0;
    this.byteIn();
    this.chigh = this.chigh << 7 & 0xffff | this.clow >> 9 & 0x7f;
    this.clow = this.clow << 7 & 0xffff;
    this.ct -= 7;
    this.a = 0x8000;
  }
  byteIn() {
    const data = this.data;
    let bp = this.bp;
    if (data[bp] === 0xff) {
      if (data[bp + 1] > 0x8f) {
        this.clow += 0xff00;
        this.ct = 8;
      } else {
        bp++;
        this.clow += data[bp] << 9;
        this.ct = 7;
        this.bp = bp;
      }
    } else {
      bp++;
      this.clow += bp < this.dataEnd ? data[bp] << 8 : 0xff00;
      this.ct = 8;
      this.bp = bp;
    }
    if (this.clow > 0xffff) {
      this.chigh += this.clow >> 16;
      this.clow &= 0xffff;
    }
  }
  readBit(contexts, pos) {
    let cx_index = contexts[pos] >> 1,
      cx_mps = contexts[pos] & 1;
    const qeTableIcx = QeTable[cx_index];
    const qeIcx = qeTableIcx.qe;
    let d;
    let a = this.a - qeIcx;
    if (this.chigh < qeIcx) {
      if (a < qeIcx) {
        a = qeIcx;
        d = cx_mps;
        cx_index = qeTableIcx.nmps;
      } else {
        a = qeIcx;
        d = 1 ^ cx_mps;
        if (qeTableIcx.switchFlag === 1) {
          cx_mps = d;
        }
        cx_index = qeTableIcx.nlps;
      }
    } else {
      this.chigh -= qeIcx;
      if ((a & 0x8000) !== 0) {
        this.a = a;
        return cx_mps;
      }
      if (a < qeIcx) {
        d = 1 ^ cx_mps;
        if (qeTableIcx.switchFlag === 1) {
          cx_mps = d;
        }
        cx_index = qeTableIcx.nlps;
      } else {
        d = cx_mps;
        cx_index = qeTableIcx.nmps;
      }
    }
    do {
      if (this.ct === 0) {
        this.byteIn();
      }
      a <<= 1;
      this.chigh = this.chigh << 1 & 0xffff | this.clow >> 15 & 1;
      this.clow = this.clow << 1 & 0xffff;
      this.ct--;
    } while ((a & 0x8000) === 0);
    this.a = a;
    contexts[pos] = cx_index << 1 | cx_mps;
    return d;
  }
}
exports.ArithmeticDecoder = ArithmeticDecoder;

/***/ }),
/* 26 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.JpegStream = void 0;
var _decode_stream = __w_pdfjs_require__(18);
var _primitives = __w_pdfjs_require__(4);
var _jpg = __w_pdfjs_require__(27);
var _util = __w_pdfjs_require__(2);
class JpegStream extends _decode_stream.DecodeStream {
  constructor(stream, maybeLength, params) {
    let ch;
    while ((ch = stream.getByte()) !== -1) {
      if (ch === 0xff) {
        stream.skip(-1);
        break;
      }
    }
    super(maybeLength);
    this.stream = stream;
    this.dict = stream.dict;
    this.maybeLength = maybeLength;
    this.params = params;
  }
  get bytes() {
    return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength));
  }
  ensureBuffer(requested) {}
  readBlock() {
    if (this.eof) {
      return;
    }
    const jpegOptions = {
      decodeTransform: undefined,
      colorTransform: undefined
    };
    const decodeArr = this.dict.getArray("D", "Decode");
    if ((this.forceRGBA || this.forceRGB) && Array.isArray(decodeArr)) {
      const bitsPerComponent = this.dict.get("BPC", "BitsPerComponent") || 8;
      const decodeArrLength = decodeArr.length;
      const transform = new Int32Array(decodeArrLength);
      let transformNeeded = false;
      const maxValue = (1 << bitsPerComponent) - 1;
      for (let i = 0; i < decodeArrLength; i += 2) {
        transform[i] = (decodeArr[i + 1] - decodeArr[i]) * 256 | 0;
        transform[i + 1] = decodeArr[i] * maxValue | 0;
        if (transform[i] !== 256 || transform[i + 1] !== 0) {
          transformNeeded = true;
        }
      }
      if (transformNeeded) {
        jpegOptions.decodeTransform = transform;
      }
    }
    if (this.params instanceof _primitives.Dict) {
      const colorTransform = this.params.get("ColorTransform");
      if (Number.isInteger(colorTransform)) {
        jpegOptions.colorTransform = colorTransform;
      }
    }
    const jpegImage = new _jpg.JpegImage(jpegOptions);
    jpegImage.parse(this.bytes);
    const data = jpegImage.getData({
      width: this.drawWidth,
      height: this.drawHeight,
      forceRGBA: this.forceRGBA,
      forceRGB: this.forceRGB,
      isSourcePDF: true
    });
    this.buffer = data;
    this.bufferLength = data.length;
    this.eof = true;
  }
}
exports.JpegStream = JpegStream;

/***/ }),
/* 27 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.JpegImage = void 0;
var _util = __w_pdfjs_require__(2);
var _image_utils = __w_pdfjs_require__(28);
var _core_utils = __w_pdfjs_require__(3);
class JpegError extends _util.BaseException {
  constructor(msg) {
    super(`JPEG error: ${msg}`, "JpegError");
  }
}
class DNLMarkerError extends _util.BaseException {
  constructor(message, scanLines) {
    super(message, "DNLMarkerError");
    this.scanLines = scanLines;
  }
}
class EOIMarkerError extends _util.BaseException {
  constructor(msg) {
    super(msg, "EOIMarkerError");
  }
}
const dctZigZag = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]);
const dctCos1 = 4017;
const dctSin1 = 799;
const dctCos3 = 3406;
const dctSin3 = 2276;
const dctCos6 = 1567;
const dctSin6 = 3784;
const dctSqrt2 = 5793;
const dctSqrt1d2 = 2896;
function buildHuffmanTable(codeLengths, values) {
  let k = 0,
    i,
    j,
    length = 16;
  while (length > 0 && !codeLengths[length - 1]) {
    length--;
  }
  const code = [{
    children: [],
    index: 0
  }];
  let p = code[0],
    q;
  for (i = 0; i < length; i++) {
    for (j = 0; j < codeLengths[i]; j++) {
      p = code.pop();
      p.children[p.index] = values[k];
      while (p.index > 0) {
        p = code.pop();
      }
      p.index++;
      code.push(p);
      while (code.length <= i) {
        code.push(q = {
          children: [],
          index: 0
        });
        p.children[p.index] = q.children;
        p = q;
      }
      k++;
    }
    if (i + 1 < length) {
      code.push(q = {
        children: [],
        index: 0
      });
      p.children[p.index] = q.children;
      p = q;
    }
  }
  return code[0].children;
}
function getBlockBufferOffset(component, row, col) {
  return 64 * ((component.blocksPerLine + 1) * row + col);
}
function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, parseDNLMarker = false) {
  const mcusPerLine = frame.mcusPerLine;
  const progressive = frame.progressive;
  const startOffset = offset;
  let bitsData = 0,
    bitsCount = 0;
  function readBit() {
    if (bitsCount > 0) {
      bitsCount--;
      return bitsData >> bitsCount & 1;
    }
    bitsData = data[offset++];
    if (bitsData === 0xff) {
      const nextByte = data[offset++];
      if (nextByte) {
        if (nextByte === 0xdc && parseDNLMarker) {
          offset += 2;
          const scanLines = (0, _core_utils.readUint16)(data, offset);
          offset += 2;
          if (scanLines > 0 && scanLines !== frame.scanLines) {
            throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data", scanLines);
          }
        } else if (nextByte === 0xd9) {
          if (parseDNLMarker) {
            const maybeScanLines = blockRow * (frame.precision === 8 ? 8 : 0);
            if (maybeScanLines > 0 && Math.round(frame.scanLines / maybeScanLines) >= 5) {
              throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, " + "possibly caused by incorrect `scanLines` parameter", maybeScanLines);
            }
          }
          throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data");
        }
        throw new JpegError(`unexpected marker ${(bitsData << 8 | nextByte).toString(16)}`);
      }
    }
    bitsCount = 7;
    return bitsData >>> 7;
  }
  function decodeHuffman(tree) {
    let node = tree;
    while (true) {
      node = node[readBit()];
      switch (typeof node) {
        case "number":
          return node;
        case "object":
          continue;
      }
      throw new JpegError("invalid huffman sequence");
    }
  }
  function receive(length) {
    let n = 0;
    while (length > 0) {
      n = n << 1 | readBit();
      length--;
    }
    return n;
  }
  function receiveAndExtend(length) {
    if (length === 1) {
      return readBit() === 1 ? 1 : -1;
    }
    const n = receive(length);
    if (n >= 1 << length - 1) {
      return n;
    }
    return n + (-1 << length) + 1;
  }
  function decodeBaseline(component, blockOffset) {
    const t = decodeHuffman(component.huffmanTableDC);
    const diff = t === 0 ? 0 : receiveAndExtend(t);
    component.blockData[blockOffset] = component.pred += diff;
    let k = 1;
    while (k < 64) {
      const rs = decodeHuffman(component.huffmanTableAC);
      const s = rs & 15,
        r = rs >> 4;
      if (s === 0) {
        if (r < 15) {
          break;
        }
        k += 16;
        continue;
      }
      k += r;
      const z = dctZigZag[k];
      component.blockData[blockOffset + z] = receiveAndExtend(s);
      k++;
    }
  }
  function decodeDCFirst(component, blockOffset) {
    const t = decodeHuffman(component.huffmanTableDC);
    const diff = t === 0 ? 0 : receiveAndExtend(t) << successive;
    component.blockData[blockOffset] = component.pred += diff;
  }
  function decodeDCSuccessive(component, blockOffset) {
    component.blockData[blockOffset] |= readBit() << successive;
  }
  let eobrun = 0;
  function decodeACFirst(component, blockOffset) {
    if (eobrun > 0) {
      eobrun--;
      return;
    }
    let k = spectralStart;
    const e = spectralEnd;
    while (k <= e) {
      const rs = decodeHuffman(component.huffmanTableAC);
      const s = rs & 15,
        r = rs >> 4;
      if (s === 0) {
        if (r < 15) {
          eobrun = receive(r) + (1 << r) - 1;
          break;
        }
        k += 16;
        continue;
      }
      k += r;
      const z = dctZigZag[k];
      component.blockData[blockOffset + z] = receiveAndExtend(s) * (1 << successive);
      k++;
    }
  }
  let successiveACState = 0,
    successiveACNextValue;
  function decodeACSuccessive(component, blockOffset) {
    let k = spectralStart;
    const e = spectralEnd;
    let r = 0;
    let s;
    let rs;
    while (k <= e) {
      const offsetZ = blockOffset + dctZigZag[k];
      const sign = component.blockData[offsetZ] < 0 ? -1 : 1;
      switch (successiveACState) {
        case 0:
          rs = decodeHuffman(component.huffmanTableAC);
          s = rs & 15;
          r = rs >> 4;
          if (s === 0) {
            if (r < 15) {
              eobrun = receive(r) + (1 << r);
              successiveACState = 4;
            } else {
              r = 16;
              successiveACState = 1;
            }
          } else {
            if (s !== 1) {
              throw new JpegError("invalid ACn encoding");
            }
            successiveACNextValue = receiveAndExtend(s);
            successiveACState = r ? 2 : 3;
          }
          continue;
        case 1:
        case 2:
          if (component.blockData[offsetZ]) {
            component.blockData[offsetZ] += sign * (readBit() << successive);
          } else {
            r--;
            if (r === 0) {
              successiveACState = successiveACState === 2 ? 3 : 0;
            }
          }
          break;
        case 3:
          if (component.blockData[offsetZ]) {
            component.blockData[offsetZ] += sign * (readBit() << successive);
          } else {
            component.blockData[offsetZ] = successiveACNextValue << successive;
            successiveACState = 0;
          }
          break;
        case 4:
          if (component.blockData[offsetZ]) {
            component.blockData[offsetZ] += sign * (readBit() << successive);
          }
          break;
      }
      k++;
    }
    if (successiveACState === 4) {
      eobrun--;
      if (eobrun === 0) {
        successiveACState = 0;
      }
    }
  }
  let blockRow = 0;
  function decodeMcu(component, decode, mcu, row, col) {
    const mcuRow = mcu / mcusPerLine | 0;
    const mcuCol = mcu % mcusPerLine;
    blockRow = mcuRow * component.v + row;
    const blockCol = mcuCol * component.h + col;
    const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);
    decode(component, blockOffset);
  }
  function decodeBlock(component, decode, mcu) {
    blockRow = mcu / component.blocksPerLine | 0;
    const blockCol = mcu % component.blocksPerLine;
    const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);
    decode(component, blockOffset);
  }
  const componentsLength = components.length;
  let component, i, j, k, n;
  let decodeFn;
  if (progressive) {
    if (spectralStart === 0) {
      decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;
    } else {
      decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;
    }
  } else {
    decodeFn = decodeBaseline;
  }
  let mcu = 0,
    fileMarker;
  const mcuExpected = componentsLength === 1 ? components[0].blocksPerLine * components[0].blocksPerColumn : mcusPerLine * frame.mcusPerColumn;
  let h, v;
  while (mcu <= mcuExpected) {
    const mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected;
    if (mcuToRead > 0) {
      for (i = 0; i < componentsLength; i++) {
        components[i].pred = 0;
      }
      eobrun = 0;
      if (componentsLength === 1) {
        component = components[0];
        for (n = 0; n < mcuToRead; n++) {
          decodeBlock(component, decodeFn, mcu);
          mcu++;
        }
      } else {
        for (n = 0; n < mcuToRead; n++) {
          for (i = 0; i < componentsLength; i++) {
            component = components[i];
            h = component.h;
            v = component.v;
            for (j = 0; j < v; j++) {
              for (k = 0; k < h; k++) {
                decodeMcu(component, decodeFn, mcu, j, k);
              }
            }
          }
          mcu++;
        }
      }
    }
    bitsCount = 0;
    fileMarker = findNextFileMarker(data, offset);
    if (!fileMarker) {
      break;
    }
    if (fileMarker.invalid) {
      const partialMsg = mcuToRead > 0 ? "unexpected" : "excessive";
      (0, _util.warn)(`decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`);
      offset = fileMarker.offset;
    }
    if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) {
      offset += 2;
    } else {
      break;
    }
  }
  return offset - startOffset;
}
function quantizeAndInverse(component, blockBufferOffset, p) {
  const qt = component.quantizationTable,
    blockData = component.blockData;
  let v0, v1, v2, v3, v4, v5, v6, v7;
  let p0, p1, p2, p3, p4, p5, p6, p7;
  let t;
  if (!qt) {
    throw new JpegError("missing required Quantization Table.");
  }
  for (let row = 0; row < 64; row += 8) {
    p0 = blockData[blockBufferOffset + row];
    p1 = blockData[blockBufferOffset + row + 1];
    p2 = blockData[blockBufferOffset + row + 2];
    p3 = blockData[blockBufferOffset + row + 3];
    p4 = blockData[blockBufferOffset + row + 4];
    p5 = blockData[blockBufferOffset + row + 5];
    p6 = blockData[blockBufferOffset + row + 6];
    p7 = blockData[blockBufferOffset + row + 7];
    p0 *= qt[row];
    if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {
      t = dctSqrt2 * p0 + 512 >> 10;
      p[row] = t;
      p[row + 1] = t;
      p[row + 2] = t;
      p[row + 3] = t;
      p[row + 4] = t;
      p[row + 5] = t;
      p[row + 6] = t;
      p[row + 7] = t;
      continue;
    }
    p1 *= qt[row + 1];
    p2 *= qt[row + 2];
    p3 *= qt[row + 3];
    p4 *= qt[row + 4];
    p5 *= qt[row + 5];
    p6 *= qt[row + 6];
    p7 *= qt[row + 7];
    v0 = dctSqrt2 * p0 + 128 >> 8;
    v1 = dctSqrt2 * p4 + 128 >> 8;
    v2 = p2;
    v3 = p6;
    v4 = dctSqrt1d2 * (p1 - p7) + 128 >> 8;
    v7 = dctSqrt1d2 * (p1 + p7) + 128 >> 8;
    v5 = p3 << 4;
    v6 = p5 << 4;
    v0 = v0 + v1 + 1 >> 1;
    v1 = v0 - v1;
    t = v2 * dctSin6 + v3 * dctCos6 + 128 >> 8;
    v2 = v2 * dctCos6 - v3 * dctSin6 + 128 >> 8;
    v3 = t;
    v4 = v4 + v6 + 1 >> 1;
    v6 = v4 - v6;
    v7 = v7 + v5 + 1 >> 1;
    v5 = v7 - v5;
    v0 = v0 + v3 + 1 >> 1;
    v3 = v0 - v3;
    v1 = v1 + v2 + 1 >> 1;
    v2 = v1 - v2;
    t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;
    v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;
    v7 = t;
    t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;
    v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;
    v6 = t;
    p[row] = v0 + v7;
    p[row + 7] = v0 - v7;
    p[row + 1] = v1 + v6;
    p[row + 6] = v1 - v6;
    p[row + 2] = v2 + v5;
    p[row + 5] = v2 - v5;
    p[row + 3] = v3 + v4;
    p[row + 4] = v3 - v4;
  }
  for (let col = 0; col < 8; ++col) {
    p0 = p[col];
    p1 = p[col + 8];
    p2 = p[col + 16];
    p3 = p[col + 24];
    p4 = p[col + 32];
    p5 = p[col + 40];
    p6 = p[col + 48];
    p7 = p[col + 56];
    if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {
      t = dctSqrt2 * p0 + 8192 >> 14;
      if (t < -2040) {
        t = 0;
      } else if (t >= 2024) {
        t = 255;
      } else {
        t = t + 2056 >> 4;
      }
      blockData[blockBufferOffset + col] = t;
      blockData[blockBufferOffset + col + 8] = t;
      blockData[blockBufferOffset + col + 16] = t;
      blockData[blockBufferOffset + col + 24] = t;
      blockData[blockBufferOffset + col + 32] = t;
      blockData[blockBufferOffset + col + 40] = t;
      blockData[blockBufferOffset + col + 48] = t;
      blockData[blockBufferOffset + col + 56] = t;
      continue;
    }
    v0 = dctSqrt2 * p0 + 2048 >> 12;
    v1 = dctSqrt2 * p4 + 2048 >> 12;
    v2 = p2;
    v3 = p6;
    v4 = dctSqrt1d2 * (p1 - p7) + 2048 >> 12;
    v7 = dctSqrt1d2 * (p1 + p7) + 2048 >> 12;
    v5 = p3;
    v6 = p5;
    v0 = (v0 + v1 + 1 >> 1) + 4112;
    v1 = v0 - v1;
    t = v2 * dctSin6 + v3 * dctCos6 + 2048 >> 12;
    v2 = v2 * dctCos6 - v3 * dctSin6 + 2048 >> 12;
    v3 = t;
    v4 = v4 + v6 + 1 >> 1;
    v6 = v4 - v6;
    v7 = v7 + v5 + 1 >> 1;
    v5 = v7 - v5;
    v0 = v0 + v3 + 1 >> 1;
    v3 = v0 - v3;
    v1 = v1 + v2 + 1 >> 1;
    v2 = v1 - v2;
    t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;
    v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;
    v7 = t;
    t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;
    v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;
    v6 = t;
    p0 = v0 + v7;
    p7 = v0 - v7;
    p1 = v1 + v6;
    p6 = v1 - v6;
    p2 = v2 + v5;
    p5 = v2 - v5;
    p3 = v3 + v4;
    p4 = v3 - v4;
    if (p0 < 16) {
      p0 = 0;
    } else if (p0 >= 4080) {
      p0 = 255;
    } else {
      p0 >>= 4;
    }
    if (p1 < 16) {
      p1 = 0;
    } else if (p1 >= 4080) {
      p1 = 255;
    } else {
      p1 >>= 4;
    }
    if (p2 < 16) {
      p2 = 0;
    } else if (p2 >= 4080) {
      p2 = 255;
    } else {
      p2 >>= 4;
    }
    if (p3 < 16) {
      p3 = 0;
    } else if (p3 >= 4080) {
      p3 = 255;
    } else {
      p3 >>= 4;
    }
    if (p4 < 16) {
      p4 = 0;
    } else if (p4 >= 4080) {
      p4 = 255;
    } else {
      p4 >>= 4;
    }
    if (p5 < 16) {
      p5 = 0;
    } else if (p5 >= 4080) {
      p5 = 255;
    } else {
      p5 >>= 4;
    }
    if (p6 < 16) {
      p6 = 0;
    } else if (p6 >= 4080) {
      p6 = 255;
    } else {
      p6 >>= 4;
    }
    if (p7 < 16) {
      p7 = 0;
    } else if (p7 >= 4080) {
      p7 = 255;
    } else {
      p7 >>= 4;
    }
    blockData[blockBufferOffset + col] = p0;
    blockData[blockBufferOffset + col + 8] = p1;
    blockData[blockBufferOffset + col + 16] = p2;
    blockData[blockBufferOffset + col + 24] = p3;
    blockData[blockBufferOffset + col + 32] = p4;
    blockData[blockBufferOffset + col + 40] = p5;
    blockData[blockBufferOffset + col + 48] = p6;
    blockData[blockBufferOffset + col + 56] = p7;
  }
}
function buildComponentData(frame, component) {
  const blocksPerLine = component.blocksPerLine;
  const blocksPerColumn = component.blocksPerColumn;
  const computationBuffer = new Int16Array(64);
  for (let blockRow = 0; blockRow < blocksPerColumn; blockRow++) {
    for (let blockCol = 0; blockCol < blocksPerLine; blockCol++) {
      const offset = getBlockBufferOffset(component, blockRow, blockCol);
      quantizeAndInverse(component, offset, computationBuffer);
    }
  }
  return component.blockData;
}
function findNextFileMarker(data, currentPos, startPos = currentPos) {
  const maxPos = data.length - 1;
  let newPos = startPos < currentPos ? startPos : currentPos;
  if (currentPos >= maxPos) {
    return null;
  }
  const currentMarker = (0, _core_utils.readUint16)(data, currentPos);
  if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) {
    return {
      invalid: null,
      marker: currentMarker,
      offset: currentPos
    };
  }
  let newMarker = (0, _core_utils.readUint16)(data, newPos);
  while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) {
    if (++newPos >= maxPos) {
      return null;
    }
    newMarker = (0, _core_utils.readUint16)(data, newPos);
  }
  return {
    invalid: currentMarker.toString(16),
    marker: newMarker,
    offset: newPos
  };
}
class JpegImage {
  constructor({
    decodeTransform = null,
    colorTransform = -1
  } = {}) {
    this._decodeTransform = decodeTransform;
    this._colorTransform = colorTransform;
  }
  parse(data, {
    dnlScanLines = null
  } = {}) {
    function readDataBlock() {
      const length = (0, _core_utils.readUint16)(data, offset);
      offset += 2;
      let endOffset = offset + length - 2;
      const fileMarker = findNextFileMarker(data, endOffset, offset);
      if (fileMarker?.invalid) {
        (0, _util.warn)("readDataBlock - incorrect length, current marker is: " + fileMarker.invalid);
        endOffset = fileMarker.offset;
      }
      const array = data.subarray(offset, endOffset);
      offset += array.length;
      return array;
    }
    function prepareComponents(frame) {
      const mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);
      const mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);
      for (const component of frame.components) {
        const blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH);
        const blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV);
        const blocksPerLineForMcu = mcusPerLine * component.h;
        const blocksPerColumnForMcu = mcusPerColumn * component.v;
        const blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);
        component.blockData = new Int16Array(blocksBufferSize);
        component.blocksPerLine = blocksPerLine;
        component.blocksPerColumn = blocksPerColumn;
      }
      frame.mcusPerLine = mcusPerLine;
      frame.mcusPerColumn = mcusPerColumn;
    }
    let offset = 0;
    let jfif = null;
    let adobe = null;
    let frame, resetInterval;
    let numSOSMarkers = 0;
    const quantizationTables = [];
    const huffmanTablesAC = [],
      huffmanTablesDC = [];
    let fileMarker = (0, _core_utils.readUint16)(data, offset);
    offset += 2;
    if (fileMarker !== 0xffd8) {
      throw new JpegError("SOI not found");
    }
    fileMarker = (0, _core_utils.readUint16)(data, offset);
    offset += 2;
    markerLoop: while (fileMarker !== 0xffd9) {
      let i, j, l;
      switch (fileMarker) {
        case 0xffe0:
        case 0xffe1:
        case 0xffe2:
        case 0xffe3:
        case 0xffe4:
        case 0xffe5:
        case 0xffe6:
        case 0xffe7:
        case 0xffe8:
        case 0xffe9:
        case 0xffea:
        case 0xffeb:
        case 0xffec:
        case 0xffed:
        case 0xffee:
        case 0xffef:
        case 0xfffe:
          const appData = readDataBlock();
          if (fileMarker === 0xffe0) {
            if (appData[0] === 0x4a && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) {
              jfif = {
                version: {
                  major: appData[5],
                  minor: appData[6]
                },
                densityUnits: appData[7],
                xDensity: appData[8] << 8 | appData[9],
                yDensity: appData[10] << 8 | appData[11],
                thumbWidth: appData[12],
                thumbHeight: appData[13],
                thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13])
              };
            }
          }
          if (fileMarker === 0xffee) {
            if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6f && appData[3] === 0x62 && appData[4] === 0x65) {
              adobe = {
                version: appData[5] << 8 | appData[6],
                flags0: appData[7] << 8 | appData[8],
                flags1: appData[9] << 8 | appData[10],
                transformCode: appData[11]
              };
            }
          }
          break;
        case 0xffdb:
          const quantizationTablesLength = (0, _core_utils.readUint16)(data, offset);
          offset += 2;
          const quantizationTablesEnd = quantizationTablesLength + offset - 2;
          let z;
          while (offset < quantizationTablesEnd) {
            const quantizationTableSpec = data[offset++];
            const tableData = new Uint16Array(64);
            if (quantizationTableSpec >> 4 === 0) {
              for (j = 0; j < 64; j++) {
                z = dctZigZag[j];
                tableData[z] = data[offset++];
              }
            } else if (quantizationTableSpec >> 4 === 1) {
              for (j = 0; j < 64; j++) {
                z = dctZigZag[j];
                tableData[z] = (0, _core_utils.readUint16)(data, offset);
                offset += 2;
              }
            } else {
              throw new JpegError("DQT - invalid table spec");
            }
            quantizationTables[quantizationTableSpec & 15] = tableData;
          }
          break;
        case 0xffc0:
        case 0xffc1:
        case 0xffc2:
          if (frame) {
            throw new JpegError("Only single frame JPEGs supported");
          }
          offset += 2;
          frame = {};
          frame.extended = fileMarker === 0xffc1;
          frame.progressive = fileMarker === 0xffc2;
          frame.precision = data[offset++];
          const sofScanLines = (0, _core_utils.readUint16)(data, offset);
          offset += 2;
          frame.scanLines = dnlScanLines || sofScanLines;
          frame.samplesPerLine = (0, _core_utils.readUint16)(data, offset);
          offset += 2;
          frame.components = [];
          frame.componentIds = {};
          const componentsCount = data[offset++];
          let maxH = 0,
            maxV = 0;
          for (i = 0; i < componentsCount; i++) {
            const componentId = data[offset];
            const h = data[offset + 1] >> 4;
            const v = data[offset + 1] & 15;
            if (maxH < h) {
              maxH = h;
            }
            if (maxV < v) {
              maxV = v;
            }
            const qId = data[offset + 2];
            l = frame.components.push({
              h,
              v,
              quantizationId: qId,
              quantizationTable: null
            });
            frame.componentIds[componentId] = l - 1;
            offset += 3;
          }
          frame.maxH = maxH;
          frame.maxV = maxV;
          prepareComponents(frame);
          break;
        case 0xffc4:
          const huffmanLength = (0, _core_utils.readUint16)(data, offset);
          offset += 2;
          for (i = 2; i < huffmanLength;) {
            const huffmanTableSpec = data[offset++];
            const codeLengths = new Uint8Array(16);
            let codeLengthSum = 0;
            for (j = 0; j < 16; j++, offset++) {
              codeLengthSum += codeLengths[j] = data[offset];
            }
            const huffmanValues = new Uint8Array(codeLengthSum);
            for (j = 0; j < codeLengthSum; j++, offset++) {
              huffmanValues[j] = data[offset];
            }
            i += 17 + codeLengthSum;
            (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues);
          }
          break;
        case 0xffdd:
          offset += 2;
          resetInterval = (0, _core_utils.readUint16)(data, offset);
          offset += 2;
          break;
        case 0xffda:
          const parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines;
          offset += 2;
          const selectorsCount = data[offset++],
            components = [];
          for (i = 0; i < selectorsCount; i++) {
            const index = data[offset++];
            const componentIndex = frame.componentIds[index];
            const component = frame.components[componentIndex];
            component.index = index;
            const tableSpec = data[offset++];
            component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];
            component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];
            components.push(component);
          }
          const spectralStart = data[offset++],
            spectralEnd = data[offset++],
            successiveApproximation = data[offset++];
          try {
            const processed = decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successiveApproximation >> 4, successiveApproximation & 15, parseDNLMarker);
            offset += processed;
          } catch (ex) {
            if (ex instanceof DNLMarkerError) {
              (0, _util.warn)(`${ex.message} -- attempting to re-parse the JPEG image.`);
              return this.parse(data, {
                dnlScanLines: ex.scanLines
              });
            } else if (ex instanceof EOIMarkerError) {
              (0, _util.warn)(`${ex.message} -- ignoring the rest of the image data.`);
              break markerLoop;
            }
            throw ex;
          }
          break;
        case 0xffdc:
          offset += 4;
          break;
        case 0xffff:
          if (data[offset] !== 0xff) {
            offset--;
          }
          break;
        default:
          const nextFileMarker = findNextFileMarker(data, offset - 2, offset - 3);
          if (nextFileMarker?.invalid) {
            (0, _util.warn)("JpegImage.parse - unexpected data, current marker is: " + nextFileMarker.invalid);
            offset = nextFileMarker.offset;
            break;
          }
          if (!nextFileMarker || offset >= data.length - 1) {
            (0, _util.warn)("JpegImage.parse - reached the end of the image data " + "without finding an EOI marker (0xFFD9).");
            break markerLoop;
          }
          throw new JpegError("JpegImage.parse - unknown marker: " + fileMarker.toString(16));
      }
      fileMarker = (0, _core_utils.readUint16)(data, offset);
      offset += 2;
    }
    this.width = frame.samplesPerLine;
    this.height = frame.scanLines;
    this.jfif = jfif;
    this.adobe = adobe;
    this.components = [];
    for (const component of frame.components) {
      const quantizationTable = quantizationTables[component.quantizationId];
      if (quantizationTable) {
        component.quantizationTable = quantizationTable;
      }
      this.components.push({
        index: component.index,
        output: buildComponentData(frame, component),
        scaleX: component.h / frame.maxH,
        scaleY: component.v / frame.maxV,
        blocksPerLine: component.blocksPerLine,
        blocksPerColumn: component.blocksPerColumn
      });
    }
    this.numComponents = this.components.length;
    return undefined;
  }
  _getLinearizedBlockData(width, height, isSourcePDF = false) {
    const scaleX = this.width / width,
      scaleY = this.height / height;
    let component, componentScaleX, componentScaleY, blocksPerScanline;
    let x, y, i, j, k;
    let index;
    let offset = 0;
    let output;
    const numComponents = this.components.length;
    const dataLength = width * height * numComponents;
    const data = new Uint8ClampedArray(dataLength);
    const xScaleBlockOffset = new Uint32Array(width);
    const mask3LSB = 0xfffffff8;
    let lastComponentScaleX;
    for (i = 0; i < numComponents; i++) {
      component = this.components[i];
      componentScaleX = component.scaleX * scaleX;
      componentScaleY = component.scaleY * scaleY;
      offset = i;
      output = component.output;
      blocksPerScanline = component.blocksPerLine + 1 << 3;
      if (componentScaleX !== lastComponentScaleX) {
        for (x = 0; x < width; x++) {
          j = 0 | x * componentScaleX;
          xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7;
        }
        lastComponentScaleX = componentScaleX;
      }
      for (y = 0; y < height; y++) {
        j = 0 | y * componentScaleY;
        index = blocksPerScanline * (j & mask3LSB) | (j & 7) << 3;
        for (x = 0; x < width; x++) {
          data[offset] = output[index + xScaleBlockOffset[x]];
          offset += numComponents;
        }
      }
    }
    let transform = this._decodeTransform;
    if (!isSourcePDF && numComponents === 4 && !transform) {
      transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]);
    }
    if (transform) {
      for (i = 0; i < dataLength;) {
        for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) {
          data[i] = (data[i] * transform[k] >> 8) + transform[k + 1];
        }
      }
    }
    return data;
  }
  get _isColorConversionNeeded() {
    if (this.adobe) {
      return !!this.adobe.transformCode;
    }
    if (this.numComponents === 3) {
      if (this._colorTransform === 0) {
        return false;
      } else if (this.components[0].index === 0x52 && this.components[1].index === 0x47 && this.components[2].index === 0x42) {
        return false;
      }
      return true;
    }
    if (this._colorTransform === 1) {
      return true;
    }
    return false;
  }
  _convertYccToRgb(data) {
    let Y, Cb, Cr;
    for (let i = 0, length = data.length; i < length; i += 3) {
      Y = data[i];
      Cb = data[i + 1];
      Cr = data[i + 2];
      data[i] = Y - 179.456 + 1.402 * Cr;
      data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr;
      data[i + 2] = Y - 226.816 + 1.772 * Cb;
    }
    return data;
  }
  _convertYccToRgba(data, out) {
    for (let i = 0, j = 0, length = data.length; i < length; i += 3, j += 4) {
      const Y = data[i];
      const Cb = data[i + 1];
      const Cr = data[i + 2];
      out[j] = Y - 179.456 + 1.402 * Cr;
      out[j + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr;
      out[j + 2] = Y - 226.816 + 1.772 * Cb;
      out[j + 3] = 255;
    }
    return out;
  }
  _convertYcckToRgb(data) {
    let Y, Cb, Cr, k;
    let offset = 0;
    for (let i = 0, length = data.length; i < length; i += 4) {
      Y = data[i];
      Cb = data[i + 1];
      Cr = data[i + 2];
      k = data[i + 3];
      data[offset++] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776);
      data[offset++] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665);
      data[offset++] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407);
    }
    return data.subarray(0, offset);
  }
  _convertYcckToRgba(data) {
    for (let i = 0, length = data.length; i < length; i += 4) {
      const Y = data[i];
      const Cb = data[i + 1];
      const Cr = data[i + 2];
      const k = data[i + 3];
      data[i] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776);
      data[i + 1] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665);
      data[i + 2] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407);
      data[i + 3] = 255;
    }
    return data;
  }
  _convertYcckToCmyk(data) {
    let Y, Cb, Cr;
    for (let i = 0, length = data.length; i < length; i += 4) {
      Y = data[i];
      Cb = data[i + 1];
      Cr = data[i + 2];
      data[i] = 434.456 - Y - 1.402 * Cr;
      data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr;
      data[i + 2] = 481.816 - Y - 1.772 * Cb;
    }
    return data;
  }
  _convertCmykToRgb(data) {
    let c, m, y, k;
    let offset = 0;
    for (let i = 0, length = data.length; i < length; i += 4) {
      c = data[i];
      m = data[i + 1];
      y = data[i + 2];
      k = data[i + 3];
      data[offset++] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254);
      data[offset++] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.0003189131175883281 * k + 0.7364883807733168);
      data[offset++] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144);
    }
    return data.subarray(0, offset);
  }
  _convertCmykToRgba(data) {
    for (let i = 0, length = data.length; i < length; i += 4) {
      const c = data[i];
      const m = data[i + 1];
      const y = data[i + 2];
      const k = data[i + 3];
      data[i] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254);
      data[i + 1] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.0003189131175883281 * k + 0.7364883807733168);
      data[i + 2] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144);
      data[i + 3] = 255;
    }
    return data;
  }
  getData({
    width,
    height,
    forceRGBA = false,
    forceRGB = false,
    isSourcePDF = false
  }) {
    if (this.numComponents > 4) {
      throw new JpegError("Unsupported color mode");
    }
    const data = this._getLinearizedBlockData(width, height, isSourcePDF);
    if (this.numComponents === 1 && (forceRGBA || forceRGB)) {
      const len = data.length * (forceRGBA ? 4 : 3);
      const rgbaData = new Uint8ClampedArray(len);
      let offset = 0;
      if (forceRGBA) {
        (0, _image_utils.grayToRGBA)(data, new Uint32Array(rgbaData.buffer));
      } else {
        for (const grayColor of data) {
          rgbaData[offset++] = grayColor;
          rgbaData[offset++] = grayColor;
          rgbaData[offset++] = grayColor;
        }
      }
      return rgbaData;
    } else if (this.numComponents === 3 && this._isColorConversionNeeded) {
      if (forceRGBA) {
        const rgbaData = new Uint8ClampedArray(data.length / 3 * 4);
        return this._convertYccToRgba(data, rgbaData);
      }
      return this._convertYccToRgb(data);
    } else if (this.numComponents === 4) {
      if (this._isColorConversionNeeded) {
        if (forceRGBA) {
          return this._convertYcckToRgba(data);
        }
        if (forceRGB) {
          return this._convertYcckToRgb(data);
        }
        return this._convertYcckToCmyk(data);
      } else if (forceRGBA) {
        return this._convertCmykToRgba(data);
      } else if (forceRGB) {
        return this._convertCmykToRgb(data);
      }
    }
    return data;
  }
}
exports.JpegImage = JpegImage;

/***/ }),
/* 28 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.convertBlackAndWhiteToRGBA = convertBlackAndWhiteToRGBA;
exports.convertToRGBA = convertToRGBA;
exports.grayToRGBA = grayToRGBA;
var _util = __w_pdfjs_require__(2);
function convertToRGBA(params) {
  switch (params.kind) {
    case _util.ImageKind.GRAYSCALE_1BPP:
      return convertBlackAndWhiteToRGBA(params);
    case _util.ImageKind.RGB_24BPP:
      return convertRGBToRGBA(params);
  }
  return null;
}
function convertBlackAndWhiteToRGBA({
  src,
  srcPos = 0,
  dest,
  width,
  height,
  nonBlackColor = 0xffffffff,
  inverseDecode = false
}) {
  const black = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;
  const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor];
  const widthInSource = width >> 3;
  const widthRemainder = width & 7;
  const srcLength = src.length;
  dest = new Uint32Array(dest.buffer);
  let destPos = 0;
  for (let i = 0; i < height; i++) {
    for (const max = srcPos + widthInSource; srcPos < max; srcPos++) {
      const elem = srcPos < srcLength ? src[srcPos] : 255;
      dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping;
      dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping;
      dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping;
      dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping;
      dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping;
      dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping;
      dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping;
      dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping;
    }
    if (widthRemainder === 0) {
      continue;
    }
    const elem = srcPos < srcLength ? src[srcPos++] : 255;
    for (let j = 0; j < widthRemainder; j++) {
      dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping;
    }
  }
  return {
    srcPos,
    destPos
  };
}
function convertRGBToRGBA({
  src,
  srcPos = 0,
  dest,
  destPos = 0,
  width,
  height
}) {
  let i = 0;
  const len32 = src.length >> 2;
  const src32 = new Uint32Array(src.buffer, srcPos, len32);
  if (_util.FeatureTest.isLittleEndian) {
    for (; i < len32 - 2; i += 3, destPos += 4) {
      const s1 = src32[i];
      const s2 = src32[i + 1];
      const s3 = src32[i + 2];
      dest[destPos] = s1 | 0xff000000;
      dest[destPos + 1] = s1 >>> 24 | s2 << 8 | 0xff000000;
      dest[destPos + 2] = s2 >>> 16 | s3 << 16 | 0xff000000;
      dest[destPos + 3] = s3 >>> 8 | 0xff000000;
    }
    for (let j = i * 4, jj = src.length; j < jj; j += 3) {
      dest[destPos++] = src[j] | src[j + 1] << 8 | src[j + 2] << 16 | 0xff000000;
    }
  } else {
    for (; i < len32 - 2; i += 3, destPos += 4) {
      const s1 = src32[i];
      const s2 = src32[i + 1];
      const s3 = src32[i + 2];
      dest[destPos] = s1 | 0xff;
      dest[destPos + 1] = s1 << 24 | s2 >>> 8 | 0xff;
      dest[destPos + 2] = s2 << 16 | s3 >>> 16 | 0xff;
      dest[destPos + 3] = s3 << 8 | 0xff;
    }
    for (let j = i * 4, jj = src.length; j < jj; j += 3) {
      dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | 0xff;
    }
  }
  return {
    srcPos,
    destPos
  };
}
function grayToRGBA(src, dest) {
  if (_util.FeatureTest.isLittleEndian) {
    for (let i = 0, ii = src.length; i < ii; i++) {
      dest[i] = src[i] * 0x10101 | 0xff000000;
    }
  } else {
    for (let i = 0, ii = src.length; i < ii; i++) {
      dest[i] = src[i] * 0x1010100 | 0x000000ff;
    }
  }
}

/***/ }),
/* 29 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.JpxStream = void 0;
var _decode_stream = __w_pdfjs_require__(18);
var _jpx = __w_pdfjs_require__(30);
var _util = __w_pdfjs_require__(2);
class JpxStream extends _decode_stream.DecodeStream {
  constructor(stream, maybeLength, params) {
    super(maybeLength);
    this.stream = stream;
    this.dict = stream.dict;
    this.maybeLength = maybeLength;
    this.params = params;
  }
  get bytes() {
    return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength));
  }
  ensureBuffer(requested) {}
  readBlock() {
    if (this.eof) {
      return;
    }
    const jpxImage = new _jpx.JpxImage();
    jpxImage.parse(this.bytes);
    const width = jpxImage.width;
    const height = jpxImage.height;
    const componentsCount = jpxImage.componentsCount;
    const tileCount = jpxImage.tiles.length;
    if (tileCount === 1) {
      this.buffer = jpxImage.tiles[0].items;
    } else {
      const data = new Uint8ClampedArray(width * height * componentsCount);
      for (let k = 0; k < tileCount; k++) {
        const tileComponents = jpxImage.tiles[k];
        const tileWidth = tileComponents.width;
        const tileHeight = tileComponents.height;
        const tileLeft = tileComponents.left;
        const tileTop = tileComponents.top;
        const src = tileComponents.items;
        let srcPosition = 0;
        let dataPosition = (width * tileTop + tileLeft) * componentsCount;
        const imgRowSize = width * componentsCount;
        const tileRowSize = tileWidth * componentsCount;
        for (let j = 0; j < tileHeight; j++) {
          const rowBytes = src.subarray(srcPosition, srcPosition + tileRowSize);
          data.set(rowBytes, dataPosition);
          srcPosition += tileRowSize;
          dataPosition += imgRowSize;
        }
      }
      this.buffer = data;
    }
    this.bufferLength = this.buffer.length;
    this.eof = true;
  }
}
exports.JpxStream = JpxStream;

/***/ }),
/* 30 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.JpxImage = void 0;
var _util = __w_pdfjs_require__(2);
var _core_utils = __w_pdfjs_require__(3);
var _arithmetic_decoder = __w_pdfjs_require__(25);
class JpxError extends _util.BaseException {
  constructor(msg) {
    super(`JPX error: ${msg}`, "JpxError");
  }
}
const SubbandsGainLog2 = {
  LL: 0,
  LH: 1,
  HL: 1,
  HH: 2
};
class JpxImage {
  constructor() {
    this.failOnCorruptedImage = false;
  }
  parse(data) {
    const head = (0, _core_utils.readUint16)(data, 0);
    if (head === 0xff4f) {
      this.parseCodestream(data, 0, data.length);
      return;
    }
    const length = data.length;
    let position = 0;
    while (position < length) {
      let headerSize = 8;
      let lbox = (0, _core_utils.readUint32)(data, position);
      const tbox = (0, _core_utils.readUint32)(data, position + 4);
      position += headerSize;
      if (lbox === 1) {
        lbox = (0, _core_utils.readUint32)(data, position) * 4294967296 + (0, _core_utils.readUint32)(data, position + 4);
        position += 8;
        headerSize += 8;
      }
      if (lbox === 0) {
        lbox = length - position + headerSize;
      }
      if (lbox < headerSize) {
        throw new JpxError("Invalid box field size");
      }
      const dataLength = lbox - headerSize;
      let jumpDataLength = true;
      switch (tbox) {
        case 0x6a703268:
          jumpDataLength = false;
          break;
        case 0x636f6c72:
          const method = data[position];
          if (method === 1) {
            const colorspace = (0, _core_utils.readUint32)(data, position + 3);
            switch (colorspace) {
              case 16:
              case 17:
              case 18:
                break;
              default:
                (0, _util.warn)("Unknown colorspace " + colorspace);
                break;
            }
          } else if (method === 2) {
            (0, _util.info)("ICC profile not supported");
          }
          break;
        case 0x6a703263:
          this.parseCodestream(data, position, position + dataLength);
          break;
        case 0x6a502020:
          if ((0, _core_utils.readUint32)(data, position) !== 0x0d0a870a) {
            (0, _util.warn)("Invalid JP2 signature");
          }
          break;
        case 0x6a501a1a:
        case 0x66747970:
        case 0x72726571:
        case 0x72657320:
        case 0x69686472:
          break;
        default:
          const headerType = String.fromCharCode(tbox >> 24 & 0xff, tbox >> 16 & 0xff, tbox >> 8 & 0xff, tbox & 0xff);
          (0, _util.warn)(`Unsupported header type ${tbox} (${headerType}).`);
          break;
      }
      if (jumpDataLength) {
        position += dataLength;
      }
    }
  }
  parseImageProperties(stream) {
    let newByte = stream.getByte();
    while (newByte >= 0) {
      const oldByte = newByte;
      newByte = stream.getByte();
      const code = oldByte << 8 | newByte;
      if (code === 0xff51) {
        stream.skip(4);
        const Xsiz = stream.getInt32() >>> 0;
        const Ysiz = stream.getInt32() >>> 0;
        const XOsiz = stream.getInt32() >>> 0;
        const YOsiz = stream.getInt32() >>> 0;
        stream.skip(16);
        const Csiz = stream.getUint16();
        this.width = Xsiz - XOsiz;
        this.height = Ysiz - YOsiz;
        this.componentsCount = Csiz;
        this.bitsPerComponent = 8;
        return;
      }
    }
    throw new JpxError("No size marker found in JPX stream");
  }
  parseCodestream(data, start, end) {
    const context = {};
    let doNotRecover = false;
    try {
      let position = start;
      while (position + 1 < end) {
        const code = (0, _core_utils.readUint16)(data, position);
        position += 2;
        let length = 0,
          j,
          sqcd,
          spqcds,
          spqcdSize,
          scalarExpounded,
          tile;
        switch (code) {
          case 0xff4f:
            context.mainHeader = true;
            break;
          case 0xffd9:
            break;
          case 0xff51:
            length = (0, _core_utils.readUint16)(data, position);
            const siz = {};
            siz.Xsiz = (0, _core_utils.readUint32)(data, position + 4);
            siz.Ysiz = (0, _core_utils.readUint32)(data, position + 8);
            siz.XOsiz = (0, _core_utils.readUint32)(data, position + 12);
            siz.YOsiz = (0, _core_utils.readUint32)(data, position + 16);
            siz.XTsiz = (0, _core_utils.readUint32)(data, position + 20);
            siz.YTsiz = (0, _core_utils.readUint32)(data, position + 24);
            siz.XTOsiz = (0, _core_utils.readUint32)(data, position + 28);
            siz.YTOsiz = (0, _core_utils.readUint32)(data, position + 32);
            const componentsCount = (0, _core_utils.readUint16)(data, position + 36);
            siz.Csiz = componentsCount;
            const components = [];
            j = position + 38;
            for (let i = 0; i < componentsCount; i++) {
              const component = {
                precision: (data[j] & 0x7f) + 1,
                isSigned: !!(data[j] & 0x80),
                XRsiz: data[j + 1],
                YRsiz: data[j + 2]
              };
              j += 3;
              calculateComponentDimensions(component, siz);
              components.push(component);
            }
            context.SIZ = siz;
            context.components = components;
            calculateTileGrids(context, components);
            context.QCC = [];
            context.COC = [];
            break;
          case 0xff5c:
            length = (0, _core_utils.readUint16)(data, position);
            const qcd = {};
            j = position + 2;
            sqcd = data[j++];
            switch (sqcd & 0x1f) {
              case 0:
                spqcdSize = 8;
                scalarExpounded = true;
                break;
              case 1:
                spqcdSize = 16;
                scalarExpounded = false;
                break;
              case 2:
                spqcdSize = 16;
                scalarExpounded = true;
                break;
              default:
                throw new Error("Invalid SQcd value " + sqcd);
            }
            qcd.noQuantization = spqcdSize === 8;
            qcd.scalarExpounded = scalarExpounded;
            qcd.guardBits = sqcd >> 5;
            spqcds = [];
            while (j < length + position) {
              const spqcd = {};
              if (spqcdSize === 8) {
                spqcd.epsilon = data[j++] >> 3;
                spqcd.mu = 0;
              } else {
                spqcd.epsilon = data[j] >> 3;
                spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1];
                j += 2;
              }
              spqcds.push(spqcd);
            }
            qcd.SPqcds = spqcds;
            if (context.mainHeader) {
              context.QCD = qcd;
            } else {
              context.currentTile.QCD = qcd;
              context.currentTile.QCC = [];
            }
            break;
          case 0xff5d:
            length = (0, _core_utils.readUint16)(data, position);
            const qcc = {};
            j = position + 2;
            let cqcc;
            if (context.SIZ.Csiz < 257) {
              cqcc = data[j++];
            } else {
              cqcc = (0, _core_utils.readUint16)(data, j);
              j += 2;
            }
            sqcd = data[j++];
            switch (sqcd & 0x1f) {
              case 0:
                spqcdSize = 8;
                scalarExpounded = true;
                break;
              case 1:
                spqcdSize = 16;
                scalarExpounded = false;
                break;
              case 2:
                spqcdSize = 16;
                scalarExpounded = true;
                break;
              default:
                throw new Error("Invalid SQcd value " + sqcd);
            }
            qcc.noQuantization = spqcdSize === 8;
            qcc.scalarExpounded = scalarExpounded;
            qcc.guardBits = sqcd >> 5;
            spqcds = [];
            while (j < length + position) {
              const spqcd = {};
              if (spqcdSize === 8) {
                spqcd.epsilon = data[j++] >> 3;
                spqcd.mu = 0;
              } else {
                spqcd.epsilon = data[j] >> 3;
                spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1];
                j += 2;
              }
              spqcds.push(spqcd);
            }
            qcc.SPqcds = spqcds;
            if (context.mainHeader) {
              context.QCC[cqcc] = qcc;
            } else {
              context.currentTile.QCC[cqcc] = qcc;
            }
            break;
          case 0xff52:
            length = (0, _core_utils.readUint16)(data, position);
            const cod = {};
            j = position + 2;
            const scod = data[j++];
            cod.entropyCoderWithCustomPrecincts = !!(scod & 1);
            cod.sopMarkerUsed = !!(scod & 2);
            cod.ephMarkerUsed = !!(scod & 4);
            cod.progressionOrder = data[j++];
            cod.layersCount = (0, _core_utils.readUint16)(data, j);
            j += 2;
            cod.multipleComponentTransform = data[j++];
            cod.decompositionLevelsCount = data[j++];
            cod.xcb = (data[j++] & 0xf) + 2;
            cod.ycb = (data[j++] & 0xf) + 2;
            const blockStyle = data[j++];
            cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1);
            cod.resetContextProbabilities = !!(blockStyle & 2);
            cod.terminationOnEachCodingPass = !!(blockStyle & 4);
            cod.verticallyStripe = !!(blockStyle & 8);
            cod.predictableTermination = !!(blockStyle & 16);
            cod.segmentationSymbolUsed = !!(blockStyle & 32);
            cod.reversibleTransformation = data[j++];
            if (cod.entropyCoderWithCustomPrecincts) {
              const precinctsSizes = [];
              while (j < length + position) {
                const precinctsSize = data[j++];
                precinctsSizes.push({
                  PPx: precinctsSize & 0xf,
                  PPy: precinctsSize >> 4
                });
              }
              cod.precinctsSizes = precinctsSizes;
            }
            const unsupported = [];
            if (cod.selectiveArithmeticCodingBypass) {
              unsupported.push("selectiveArithmeticCodingBypass");
            }
            if (cod.terminationOnEachCodingPass) {
              unsupported.push("terminationOnEachCodingPass");
            }
            if (cod.verticallyStripe) {
              unsupported.push("verticallyStripe");
            }
            if (cod.predictableTermination) {
              unsupported.push("predictableTermination");
            }
            if (unsupported.length > 0) {
              doNotRecover = true;
              (0, _util.warn)(`JPX: Unsupported COD options (${unsupported.join(", ")}).`);
            }
            if (context.mainHeader) {
              context.COD = cod;
            } else {
              context.currentTile.COD = cod;
              context.currentTile.COC = [];
            }
            break;
          case 0xff90:
            length = (0, _core_utils.readUint16)(data, position);
            tile = {};
            tile.index = (0, _core_utils.readUint16)(data, position + 2);
            tile.length = (0, _core_utils.readUint32)(data, position + 4);
            tile.dataEnd = tile.length + position - 2;
            tile.partIndex = data[position + 8];
            tile.partsCount = data[position + 9];
            context.mainHeader = false;
            if (tile.partIndex === 0) {
              tile.COD = context.COD;
              tile.COC = context.COC.slice(0);
              tile.QCD = context.QCD;
              tile.QCC = context.QCC.slice(0);
            }
            context.currentTile = tile;
            break;
          case 0xff93:
            tile = context.currentTile;
            if (tile.partIndex === 0) {
              initializeTile(context, tile.index);
              buildPackets(context);
            }
            length = tile.dataEnd - position;
            parseTilePackets(context, data, position, length);
            break;
          case 0xff53:
            (0, _util.warn)("JPX: Codestream code 0xFF53 (COC) is not implemented.");
          case 0xff55:
          case 0xff57:
          case 0xff58:
          case 0xff64:
            length = (0, _core_utils.readUint16)(data, position);
            break;
          default:
            throw new Error("Unknown codestream code: " + code.toString(16));
        }
        position += length;
      }
    } catch (e) {
      if (doNotRecover || this.failOnCorruptedImage) {
        throw new JpxError(e.message);
      } else {
        (0, _util.warn)(`JPX: Trying to recover from: "${e.message}".`);
      }
    }
    this.tiles = transformComponents(context);
    this.width = context.SIZ.Xsiz - context.SIZ.XOsiz;
    this.height = context.SIZ.Ysiz - context.SIZ.YOsiz;
    this.componentsCount = context.SIZ.Csiz;
  }
}
exports.JpxImage = JpxImage;
function calculateComponentDimensions(component, siz) {
  component.x0 = Math.ceil(siz.XOsiz / component.XRsiz);
  component.x1 = Math.ceil(siz.Xsiz / component.XRsiz);
  component.y0 = Math.ceil(siz.YOsiz / component.YRsiz);
  component.y1 = Math.ceil(siz.Ysiz / component.YRsiz);
  component.width = component.x1 - component.x0;
  component.height = component.y1 - component.y0;
}
function calculateTileGrids(context, components) {
  const siz = context.SIZ;
  const tiles = [];
  let tile;
  const numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz);
  const numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz);
  for (let q = 0; q < numYtiles; q++) {
    for (let p = 0; p < numXtiles; p++) {
      tile = {};
      tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz);
      tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz);
      tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz);
      tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz);
      tile.width = tile.tx1 - tile.tx0;
      tile.height = tile.ty1 - tile.ty0;
      tile.components = [];
      tiles.push(tile);
    }
  }
  context.tiles = tiles;
  const componentsCount = siz.Csiz;
  for (let i = 0, ii = componentsCount; i < ii; i++) {
    const component = components[i];
    for (let j = 0, jj = tiles.length; j < jj; j++) {
      const tileComponent = {};
      tile = tiles[j];
      tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz);
      tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz);
      tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz);
      tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz);
      tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0;
      tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0;
      tile.components[i] = tileComponent;
    }
  }
}
function getBlocksDimensions(context, component, r) {
  const codOrCoc = component.codingStyleParameters;
  const result = {};
  if (!codOrCoc.entropyCoderWithCustomPrecincts) {
    result.PPx = 15;
    result.PPy = 15;
  } else {
    result.PPx = codOrCoc.precinctsSizes[r].PPx;
    result.PPy = codOrCoc.precinctsSizes[r].PPy;
  }
  result.xcb_ = r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : Math.min(codOrCoc.xcb, result.PPx);
  result.ycb_ = r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : Math.min(codOrCoc.ycb, result.PPy);
  return result;
}
function buildPrecincts(context, resolution, dimensions) {
  const precinctWidth = 1 << dimensions.PPx;
  const precinctHeight = 1 << dimensions.PPy;
  const isZeroRes = resolution.resLevel === 0;
  const precinctWidthInSubband = 1 << dimensions.PPx + (isZeroRes ? 0 : -1);
  const precinctHeightInSubband = 1 << dimensions.PPy + (isZeroRes ? 0 : -1);
  const numprecinctswide = resolution.trx1 > resolution.trx0 ? Math.ceil(resolution.trx1 / precinctWidth) - Math.floor(resolution.trx0 / precinctWidth) : 0;
  const numprecinctshigh = resolution.try1 > resolution.try0 ? Math.ceil(resolution.try1 / precinctHeight) - Math.floor(resolution.try0 / precinctHeight) : 0;
  const numprecincts = numprecinctswide * numprecinctshigh;
  resolution.precinctParameters = {
    precinctWidth,
    precinctHeight,
    numprecinctswide,
    numprecinctshigh,
    numprecincts,
    precinctWidthInSubband,
    precinctHeightInSubband
  };
}
function buildCodeblocks(context, subband, dimensions) {
  const xcb_ = dimensions.xcb_;
  const ycb_ = dimensions.ycb_;
  const codeblockWidth = 1 << xcb_;
  const codeblockHeight = 1 << ycb_;
  const cbx0 = subband.tbx0 >> xcb_;
  const cby0 = subband.tby0 >> ycb_;
  const cbx1 = subband.tbx1 + codeblockWidth - 1 >> xcb_;
  const cby1 = subband.tby1 + codeblockHeight - 1 >> ycb_;
  const precinctParameters = subband.resolution.precinctParameters;
  const codeblocks = [];
  const precincts = [];
  let i, j, codeblock, precinctNumber;
  for (j = cby0; j < cby1; j++) {
    for (i = cbx0; i < cbx1; i++) {
      codeblock = {
        cbx: i,
        cby: j,
        tbx0: codeblockWidth * i,
        tby0: codeblockHeight * j,
        tbx1: codeblockWidth * (i + 1),
        tby1: codeblockHeight * (j + 1)
      };
      codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0);
      codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0);
      codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1);
      codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1);
      const pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / precinctParameters.precinctWidthInSubband);
      const pj = Math.floor((codeblock.tby0_ - subband.tby0) / precinctParameters.precinctHeightInSubband);
      precinctNumber = pi + pj * precinctParameters.numprecinctswide;
      codeblock.precinctNumber = precinctNumber;
      codeblock.subbandType = subband.type;
      codeblock.Lblock = 3;
      if (codeblock.tbx1_ <= codeblock.tbx0_ || codeblock.tby1_ <= codeblock.tby0_) {
        continue;
      }
      codeblocks.push(codeblock);
      let precinct = precincts[precinctNumber];
      if (precinct !== undefined) {
        if (i < precinct.cbxMin) {
          precinct.cbxMin = i;
        } else if (i > precinct.cbxMax) {
          precinct.cbxMax = i;
        }
        if (j < precinct.cbyMin) {
          precinct.cbxMin = j;
        } else if (j > precinct.cbyMax) {
          precinct.cbyMax = j;
        }
      } else {
        precincts[precinctNumber] = precinct = {
          cbxMin: i,
          cbyMin: j,
          cbxMax: i,
          cbyMax: j
        };
      }
      codeblock.precinct = precinct;
    }
  }
  subband.codeblockParameters = {
    codeblockWidth: xcb_,
    codeblockHeight: ycb_,
    numcodeblockwide: cbx1 - cbx0 + 1,
    numcodeblockhigh: cby1 - cby0 + 1
  };
  subband.codeblocks = codeblocks;
  subband.precincts = precincts;
}
function createPacket(resolution, precinctNumber, layerNumber) {
  const precinctCodeblocks = [];
  const subbands = resolution.subbands;
  for (let i = 0, ii = subbands.length; i < ii; i++) {
    const subband = subbands[i];
    const codeblocks = subband.codeblocks;
    for (let j = 0, jj = codeblocks.length; j < jj; j++) {
      const codeblock = codeblocks[j];
      if (codeblock.precinctNumber !== precinctNumber) {
        continue;
      }
      precinctCodeblocks.push(codeblock);
    }
  }
  return {
    layerNumber,
    codeblocks: precinctCodeblocks
  };
}
function LayerResolutionComponentPositionIterator(context) {
  const siz = context.SIZ;
  const tileIndex = context.currentTile.index;
  const tile = context.tiles[tileIndex];
  const layersCount = tile.codingStyleDefaultParameters.layersCount;
  const componentsCount = siz.Csiz;
  let maxDecompositionLevelsCount = 0;
  for (let q = 0; q < componentsCount; q++) {
    maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount);
  }
  let l = 0,
    r = 0,
    i = 0,
    k = 0;
  this.nextPacket = function JpxImage_nextPacket() {
    for (; l < layersCount; l++) {
      for (; r <= maxDecompositionLevelsCount; r++) {
        for (; i < componentsCount; i++) {
          const component = tile.components[i];
          if (r > component.codingStyleParameters.decompositionLevelsCount) {
            continue;
          }
          const resolution = component.resolutions[r];
          const numprecincts = resolution.precinctParameters.numprecincts;
          for (; k < numprecincts;) {
            const packet = createPacket(resolution, k, l);
            k++;
            return packet;
          }
          k = 0;
        }
        i = 0;
      }
      r = 0;
    }
    throw new JpxError("Out of packets");
  };
}
function ResolutionLayerComponentPositionIterator(context) {
  const siz = context.SIZ;
  const tileIndex = context.currentTile.index;
  const tile = context.tiles[tileIndex];
  const layersCount = tile.codingStyleDefaultParameters.layersCount;
  const componentsCount = siz.Csiz;
  let maxDecompositionLevelsCount = 0;
  for (let q = 0; q < componentsCount; q++) {
    maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount);
  }
  let r = 0,
    l = 0,
    i = 0,
    k = 0;
  this.nextPacket = function JpxImage_nextPacket() {
    for (; r <= maxDecompositionLevelsCount; r++) {
      for (; l < layersCount; l++) {
        for (; i < componentsCount; i++) {
          const component = tile.components[i];
          if (r > component.codingStyleParameters.decompositionLevelsCount) {
            continue;
          }
          const resolution = component.resolutions[r];
          const numprecincts = resolution.precinctParameters.numprecincts;
          for (; k < numprecincts;) {
            const packet = createPacket(resolution, k, l);
            k++;
            return packet;
          }
          k = 0;
        }
        i = 0;
      }
      l = 0;
    }
    throw new JpxError("Out of packets");
  };
}
function ResolutionPositionComponentLayerIterator(context) {
  const siz = context.SIZ;
  const tileIndex = context.currentTile.index;
  const tile = context.tiles[tileIndex];
  const layersCount = tile.codingStyleDefaultParameters.layersCount;
  const componentsCount = siz.Csiz;
  let l, r, c, p;
  let maxDecompositionLevelsCount = 0;
  for (c = 0; c < componentsCount; c++) {
    const component = tile.components[c];
    maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount);
  }
  const maxNumPrecinctsInLevel = new Int32Array(maxDecompositionLevelsCount + 1);
  for (r = 0; r <= maxDecompositionLevelsCount; ++r) {
    let maxNumPrecincts = 0;
    for (c = 0; c < componentsCount; ++c) {
      const resolutions = tile.components[c].resolutions;
      if (r < resolutions.length) {
        maxNumPrecincts = Math.max(maxNumPrecincts, resolutions[r].precinctParameters.numprecincts);
      }
    }
    maxNumPrecinctsInLevel[r] = maxNumPrecincts;
  }
  l = 0;
  r = 0;
  c = 0;
  p = 0;
  this.nextPacket = function JpxImage_nextPacket() {
    for (; r <= maxDecompositionLevelsCount; r++) {
      for (; p < maxNumPrecinctsInLevel[r]; p++) {
        for (; c < componentsCount; c++) {
          const component = tile.components[c];
          if (r > component.codingStyleParameters.decompositionLevelsCount) {
            continue;
          }
          const resolution = component.resolutions[r];
          const numprecincts = resolution.precinctParameters.numprecincts;
          if (p >= numprecincts) {
            continue;
          }
          for (; l < layersCount;) {
            const packet = createPacket(resolution, p, l);
            l++;
            return packet;
          }
          l = 0;
        }
        c = 0;
      }
      p = 0;
    }
    throw new JpxError("Out of packets");
  };
}
function PositionComponentResolutionLayerIterator(context) {
  const siz = context.SIZ;
  const tileIndex = context.currentTile.index;
  const tile = context.tiles[tileIndex];
  const layersCount = tile.codingStyleDefaultParameters.layersCount;
  const componentsCount = siz.Csiz;
  const precinctsSizes = getPrecinctSizesInImageScale(tile);
  const precinctsIterationSizes = precinctsSizes;
  let l = 0,
    r = 0,
    c = 0,
    px = 0,
    py = 0;
  this.nextPacket = function JpxImage_nextPacket() {
    for (; py < precinctsIterationSizes.maxNumHigh; py++) {
      for (; px < precinctsIterationSizes.maxNumWide; px++) {
        for (; c < componentsCount; c++) {
          const component = tile.components[c];
          const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
          for (; r <= decompositionLevelsCount; r++) {
            const resolution = component.resolutions[r];
            const sizeInImageScale = precinctsSizes.components[c].resolutions[r];
            const k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution);
            if (k === null) {
              continue;
            }
            for (; l < layersCount;) {
              const packet = createPacket(resolution, k, l);
              l++;
              return packet;
            }
            l = 0;
          }
          r = 0;
        }
        c = 0;
      }
      px = 0;
    }
    throw new JpxError("Out of packets");
  };
}
function ComponentPositionResolutionLayerIterator(context) {
  const siz = context.SIZ;
  const tileIndex = context.currentTile.index;
  const tile = context.tiles[tileIndex];
  const layersCount = tile.codingStyleDefaultParameters.layersCount;
  const componentsCount = siz.Csiz;
  const precinctsSizes = getPrecinctSizesInImageScale(tile);
  let l = 0,
    r = 0,
    c = 0,
    px = 0,
    py = 0;
  this.nextPacket = function JpxImage_nextPacket() {
    for (; c < componentsCount; ++c) {
      const component = tile.components[c];
      const precinctsIterationSizes = precinctsSizes.components[c];
      const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
      for (; py < precinctsIterationSizes.maxNumHigh; py++) {
        for (; px < precinctsIterationSizes.maxNumWide; px++) {
          for (; r <= decompositionLevelsCount; r++) {
            const resolution = component.resolutions[r];
            const sizeInImageScale = precinctsIterationSizes.resolutions[r];
            const k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution);
            if (k === null) {
              continue;
            }
            for (; l < layersCount;) {
              const packet = createPacket(resolution, k, l);
              l++;
              return packet;
            }
            l = 0;
          }
          r = 0;
        }
        px = 0;
      }
      py = 0;
    }
    throw new JpxError("Out of packets");
  };
}
function getPrecinctIndexIfExist(pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) {
  const posX = pxIndex * precinctIterationSizes.minWidth;
  const posY = pyIndex * precinctIterationSizes.minHeight;
  if (posX % sizeInImageScale.width !== 0 || posY % sizeInImageScale.height !== 0) {
    return null;
  }
  const startPrecinctRowIndex = posY / sizeInImageScale.width * resolution.precinctParameters.numprecinctswide;
  return posX / sizeInImageScale.height + startPrecinctRowIndex;
}
function getPrecinctSizesInImageScale(tile) {
  const componentsCount = tile.components.length;
  let minWidth = Number.MAX_VALUE;
  let minHeight = Number.MAX_VALUE;
  let maxNumWide = 0;
  let maxNumHigh = 0;
  const sizePerComponent = new Array(componentsCount);
  for (let c = 0; c < componentsCount; c++) {
    const component = tile.components[c];
    const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
    const sizePerResolution = new Array(decompositionLevelsCount + 1);
    let minWidthCurrentComponent = Number.MAX_VALUE;
    let minHeightCurrentComponent = Number.MAX_VALUE;
    let maxNumWideCurrentComponent = 0;
    let maxNumHighCurrentComponent = 0;
    let scale = 1;
    for (let r = decompositionLevelsCount; r >= 0; --r) {
      const resolution = component.resolutions[r];
      const widthCurrentResolution = scale * resolution.precinctParameters.precinctWidth;
      const heightCurrentResolution = scale * resolution.precinctParameters.precinctHeight;
      minWidthCurrentComponent = Math.min(minWidthCurrentComponent, widthCurrentResolution);
      minHeightCurrentComponent = Math.min(minHeightCurrentComponent, heightCurrentResolution);
      maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, resolution.precinctParameters.numprecinctswide);
      maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, resolution.precinctParameters.numprecinctshigh);
      sizePerResolution[r] = {
        width: widthCurrentResolution,
        height: heightCurrentResolution
      };
      scale <<= 1;
    }
    minWidth = Math.min(minWidth, minWidthCurrentComponent);
    minHeight = Math.min(minHeight, minHeightCurrentComponent);
    maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent);
    maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent);
    sizePerComponent[c] = {
      resolutions: sizePerResolution,
      minWidth: minWidthCurrentComponent,
      minHeight: minHeightCurrentComponent,
      maxNumWide: maxNumWideCurrentComponent,
      maxNumHigh: maxNumHighCurrentComponent
    };
  }
  return {
    components: sizePerComponent,
    minWidth,
    minHeight,
    maxNumWide,
    maxNumHigh
  };
}
function buildPackets(context) {
  const siz = context.SIZ;
  const tileIndex = context.currentTile.index;
  const tile = context.tiles[tileIndex];
  const componentsCount = siz.Csiz;
  for (let c = 0; c < componentsCount; c++) {
    const component = tile.components[c];
    const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
    const resolutions = [];
    const subbands = [];
    for (let r = 0; r <= decompositionLevelsCount; r++) {
      const blocksDimensions = getBlocksDimensions(context, component, r);
      const resolution = {};
      const scale = 1 << decompositionLevelsCount - r;
      resolution.trx0 = Math.ceil(component.tcx0 / scale);
      resolution.try0 = Math.ceil(component.tcy0 / scale);
      resolution.trx1 = Math.ceil(component.tcx1 / scale);
      resolution.try1 = Math.ceil(component.tcy1 / scale);
      resolution.resLevel = r;
      buildPrecincts(context, resolution, blocksDimensions);
      resolutions.push(resolution);
      let subband;
      if (r === 0) {
        subband = {};
        subband.type = "LL";
        subband.tbx0 = Math.ceil(component.tcx0 / scale);
        subband.tby0 = Math.ceil(component.tcy0 / scale);
        subband.tbx1 = Math.ceil(component.tcx1 / scale);
        subband.tby1 = Math.ceil(component.tcy1 / scale);
        subband.resolution = resolution;
        buildCodeblocks(context, subband, blocksDimensions);
        subbands.push(subband);
        resolution.subbands = [subband];
      } else {
        const bscale = 1 << decompositionLevelsCount - r + 1;
        const resolutionSubbands = [];
        subband = {};
        subband.type = "HL";
        subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);
        subband.tby0 = Math.ceil(component.tcy0 / bscale);
        subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);
        subband.tby1 = Math.ceil(component.tcy1 / bscale);
        subband.resolution = resolution;
        buildCodeblocks(context, subband, blocksDimensions);
        subbands.push(subband);
        resolutionSubbands.push(subband);
        subband = {};
        subband.type = "LH";
        subband.tbx0 = Math.ceil(component.tcx0 / bscale);
        subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);
        subband.tbx1 = Math.ceil(component.tcx1 / bscale);
        subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);
        subband.resolution = resolution;
        buildCodeblocks(context, subband, blocksDimensions);
        subbands.push(subband);
        resolutionSubbands.push(subband);
        subband = {};
        subband.type = "HH";
        subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);
        subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);
        subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);
        subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);
        subband.resolution = resolution;
        buildCodeblocks(context, subband, blocksDimensions);
        subbands.push(subband);
        resolutionSubbands.push(subband);
        resolution.subbands = resolutionSubbands;
      }
    }
    component.resolutions = resolutions;
    component.subbands = subbands;
  }
  const progressionOrder = tile.codingStyleDefaultParameters.progressionOrder;
  switch (progressionOrder) {
    case 0:
      tile.packetsIterator = new LayerResolutionComponentPositionIterator(context);
      break;
    case 1:
      tile.packetsIterator = new ResolutionLayerComponentPositionIterator(context);
      break;
    case 2:
      tile.packetsIterator = new ResolutionPositionComponentLayerIterator(context);
      break;
    case 3:
      tile.packetsIterator = new PositionComponentResolutionLayerIterator(context);
      break;
    case 4:
      tile.packetsIterator = new ComponentPositionResolutionLayerIterator(context);
      break;
    default:
      throw new JpxError(`Unsupported progression order ${progressionOrder}`);
  }
}
function parseTilePackets(context, data, offset, dataLength) {
  let position = 0;
  let buffer,
    bufferSize = 0,
    skipNextBit = false;
  function readBits(count) {
    while (bufferSize < count) {
      const b = data[offset + position];
      position++;
      if (skipNextBit) {
        buffer = buffer << 7 | b;
        bufferSize += 7;
        skipNextBit = false;
      } else {
        buffer = buffer << 8 | b;
        bufferSize += 8;
      }
      if (b === 0xff) {
        skipNextBit = true;
      }
    }
    bufferSize -= count;
    return buffer >>> bufferSize & (1 << count) - 1;
  }
  function skipMarkerIfEqual(value) {
    if (data[offset + position - 1] === 0xff && data[offset + position] === value) {
      skipBytes(1);
      return true;
    } else if (data[offset + position] === 0xff && data[offset + position + 1] === value) {
      skipBytes(2);
      return true;
    }
    return false;
  }
  function skipBytes(count) {
    position += count;
  }
  function alignToByte() {
    bufferSize = 0;
    if (skipNextBit) {
      position++;
      skipNextBit = false;
    }
  }
  function readCodingpasses() {
    if (readBits(1) === 0) {
      return 1;
    }
    if (readBits(1) === 0) {
      return 2;
    }
    let value = readBits(2);
    if (value < 3) {
      return value + 3;
    }
    value = readBits(5);
    if (value < 31) {
      return value + 6;
    }
    value = readBits(7);
    return value + 37;
  }
  const tileIndex = context.currentTile.index;
  const tile = context.tiles[tileIndex];
  const sopMarkerUsed = context.COD.sopMarkerUsed;
  const ephMarkerUsed = context.COD.ephMarkerUsed;
  const packetsIterator = tile.packetsIterator;
  while (position < dataLength) {
    alignToByte();
    if (sopMarkerUsed && skipMarkerIfEqual(0x91)) {
      skipBytes(4);
    }
    const packet = packetsIterator.nextPacket();
    if (!readBits(1)) {
      continue;
    }
    const layerNumber = packet.layerNumber,
      queue = [];
    let codeblock;
    for (let i = 0, ii = packet.codeblocks.length; i < ii; i++) {
      codeblock = packet.codeblocks[i];
      let precinct = codeblock.precinct;
      const codeblockColumn = codeblock.cbx - precinct.cbxMin;
      const codeblockRow = codeblock.cby - precinct.cbyMin;
      let codeblockIncluded = false;
      let firstTimeInclusion = false;
      let valueReady, zeroBitPlanesTree;
      if (codeblock.included !== undefined) {
        codeblockIncluded = !!readBits(1);
      } else {
        precinct = codeblock.precinct;
        let inclusionTree;
        if (precinct.inclusionTree !== undefined) {
          inclusionTree = precinct.inclusionTree;
        } else {
          const width = precinct.cbxMax - precinct.cbxMin + 1;
          const height = precinct.cbyMax - precinct.cbyMin + 1;
          inclusionTree = new InclusionTree(width, height, layerNumber);
          zeroBitPlanesTree = new TagTree(width, height);
          precinct.inclusionTree = inclusionTree;
          precinct.zeroBitPlanesTree = zeroBitPlanesTree;
          for (let l = 0; l < layerNumber; l++) {
            if (readBits(1) !== 0) {
              throw new JpxError("Invalid tag tree");
            }
          }
        }
        if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) {
          while (true) {
            if (readBits(1)) {
              valueReady = !inclusionTree.nextLevel();
              if (valueReady) {
                codeblock.included = true;
                codeblockIncluded = firstTimeInclusion = true;
                break;
              }
            } else {
              inclusionTree.incrementValue(layerNumber);
              break;
            }
          }
        }
      }
      if (!codeblockIncluded) {
        continue;
      }
      if (firstTimeInclusion) {
        zeroBitPlanesTree = precinct.zeroBitPlanesTree;
        zeroBitPlanesTree.reset(codeblockColumn, codeblockRow);
        while (true) {
          if (readBits(1)) {
            valueReady = !zeroBitPlanesTree.nextLevel();
            if (valueReady) {
              break;
            }
          } else {
            zeroBitPlanesTree.incrementValue();
          }
        }
        codeblock.zeroBitPlanes = zeroBitPlanesTree.value;
      }
      const codingpasses = readCodingpasses();
      while (readBits(1)) {
        codeblock.Lblock++;
      }
      const codingpassesLog2 = (0, _core_utils.log2)(codingpasses);
      const bits = (codingpasses < 1 << codingpassesLog2 ? codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock;
      const codedDataLength = readBits(bits);
      queue.push({
        codeblock,
        codingpasses,
        dataLength: codedDataLength
      });
    }
    alignToByte();
    if (ephMarkerUsed) {
      skipMarkerIfEqual(0x92);
    }
    while (queue.length > 0) {
      const packetItem = queue.shift();
      codeblock = packetItem.codeblock;
      if (codeblock.data === undefined) {
        codeblock.data = [];
      }
      codeblock.data.push({
        data,
        start: offset + position,
        end: offset + position + packetItem.dataLength,
        codingpasses: packetItem.codingpasses
      });
      position += packetItem.dataLength;
    }
  }
  return position;
}
function copyCoefficients(coefficients, levelWidth, levelHeight, subband, delta, mb, reversible, segmentationSymbolUsed, resetContextProbabilities) {
  const x0 = subband.tbx0;
  const y0 = subband.tby0;
  const width = subband.tbx1 - subband.tbx0;
  const codeblocks = subband.codeblocks;
  const right = subband.type.charAt(0) === "H" ? 1 : 0;
  const bottom = subband.type.charAt(1) === "H" ? levelWidth : 0;
  for (let i = 0, ii = codeblocks.length; i < ii; ++i) {
    const codeblock = codeblocks[i];
    const blockWidth = codeblock.tbx1_ - codeblock.tbx0_;
    const blockHeight = codeblock.tby1_ - codeblock.tby0_;
    if (blockWidth === 0 || blockHeight === 0) {
      continue;
    }
    if (codeblock.data === undefined) {
      continue;
    }
    const bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, codeblock.zeroBitPlanes, mb);
    let currentCodingpassType = 2;
    const data = codeblock.data;
    let totalLength = 0,
      codingpasses = 0;
    let j, jj, dataItem;
    for (j = 0, jj = data.length; j < jj; j++) {
      dataItem = data[j];
      totalLength += dataItem.end - dataItem.start;
      codingpasses += dataItem.codingpasses;
    }
    const encodedData = new Uint8Array(totalLength);
    let position = 0;
    for (j = 0, jj = data.length; j < jj; j++) {
      dataItem = data[j];
      const chunk = dataItem.data.subarray(dataItem.start, dataItem.end);
      encodedData.set(chunk, position);
      position += chunk.length;
    }
    const decoder = new _arithmetic_decoder.ArithmeticDecoder(encodedData, 0, totalLength);
    bitModel.setDecoder(decoder);
    for (j = 0; j < codingpasses; j++) {
      switch (currentCodingpassType) {
        case 0:
          bitModel.runSignificancePropagationPass();
          break;
        case 1:
          bitModel.runMagnitudeRefinementPass();
          break;
        case 2:
          bitModel.runCleanupPass();
          if (segmentationSymbolUsed) {
            bitModel.checkSegmentationSymbol();
          }
          break;
      }
      if (resetContextProbabilities) {
        bitModel.reset();
      }
      currentCodingpassType = (currentCodingpassType + 1) % 3;
    }
    let offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width;
    const sign = bitModel.coefficentsSign;
    const magnitude = bitModel.coefficentsMagnitude;
    const bitsDecoded = bitModel.bitsDecoded;
    const magnitudeCorrection = reversible ? 0 : 0.5;
    let k, n, nb;
    position = 0;
    const interleave = subband.type !== "LL";
    for (j = 0; j < blockHeight; j++) {
      const row = offset / width | 0;
      const levelOffset = 2 * row * (levelWidth - width) + right + bottom;
      for (k = 0; k < blockWidth; k++) {
        n = magnitude[position];
        if (n !== 0) {
          n = (n + magnitudeCorrection) * delta;
          if (sign[position] !== 0) {
            n = -n;
          }
          nb = bitsDecoded[position];
          const pos = interleave ? levelOffset + (offset << 1) : offset;
          coefficients[pos] = reversible && nb >= mb ? n : n * (1 << mb - nb);
        }
        offset++;
        position++;
      }
      offset += width - blockWidth;
    }
  }
}
function transformTile(context, tile, c) {
  const component = tile.components[c];
  const codingStyleParameters = component.codingStyleParameters;
  const quantizationParameters = component.quantizationParameters;
  const decompositionLevelsCount = codingStyleParameters.decompositionLevelsCount;
  const spqcds = quantizationParameters.SPqcds;
  const scalarExpounded = quantizationParameters.scalarExpounded;
  const guardBits = quantizationParameters.guardBits;
  const segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed;
  const resetContextProbabilities = codingStyleParameters.resetContextProbabilities;
  const precision = context.components[c].precision;
  const reversible = codingStyleParameters.reversibleTransformation;
  const transform = reversible ? new ReversibleTransform() : new IrreversibleTransform();
  const subbandCoefficients = [];
  let b = 0;
  for (let i = 0; i <= decompositionLevelsCount; i++) {
    const resolution = component.resolutions[i];
    const width = resolution.trx1 - resolution.trx0;
    const height = resolution.try1 - resolution.try0;
    const coefficients = new Float32Array(width * height);
    for (let j = 0, jj = resolution.subbands.length; j < jj; j++) {
      let mu, epsilon;
      if (!scalarExpounded) {
        mu = spqcds[0].mu;
        epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0);
      } else {
        mu = spqcds[b].mu;
        epsilon = spqcds[b].epsilon;
        b++;
      }
      const subband = resolution.subbands[j];
      const gainLog2 = SubbandsGainLog2[subband.type];
      const delta = reversible ? 1 : 2 ** (precision + gainLog2 - epsilon) * (1 + mu / 2048);
      const mb = guardBits + epsilon - 1;
      copyCoefficients(coefficients, width, height, subband, delta, mb, reversible, segmentationSymbolUsed, resetContextProbabilities);
    }
    subbandCoefficients.push({
      width,
      height,
      items: coefficients
    });
  }
  const result = transform.calculate(subbandCoefficients, component.tcx0, component.tcy0);
  return {
    left: component.tcx0,
    top: component.tcy0,
    width: result.width,
    height: result.height,
    items: result.items
  };
}
function transformComponents(context) {
  const siz = context.SIZ;
  const components = context.components;
  const componentsCount = siz.Csiz;
  const resultImages = [];
  for (let i = 0, ii = context.tiles.length; i < ii; i++) {
    const tile = context.tiles[i];
    const transformedTiles = [];
    for (let c = 0; c < componentsCount; c++) {
      transformedTiles[c] = transformTile(context, tile, c);
    }
    const tile0 = transformedTiles[0];
    const out = new Uint8ClampedArray(tile0.items.length * componentsCount);
    const result = {
      left: tile0.left,
      top: tile0.top,
      width: tile0.width,
      height: tile0.height,
      items: out
    };
    let shift, offset;
    let pos = 0,
      j,
      jj,
      y0,
      y1,
      y2;
    if (tile.codingStyleDefaultParameters.multipleComponentTransform) {
      const fourComponents = componentsCount === 4;
      const y0items = transformedTiles[0].items;
      const y1items = transformedTiles[1].items;
      const y2items = transformedTiles[2].items;
      const y3items = fourComponents ? transformedTiles[3].items : null;
      shift = components[0].precision - 8;
      offset = (128 << shift) + 0.5;
      const component0 = tile.components[0];
      const alpha01 = componentsCount - 3;
      jj = y0items.length;
      if (!component0.codingStyleParameters.reversibleTransformation) {
        for (j = 0; j < jj; j++, pos += alpha01) {
          y0 = y0items[j] + offset;
          y1 = y1items[j];
          y2 = y2items[j];
          out[pos++] = y0 + 1.402 * y2 >> shift;
          out[pos++] = y0 - 0.34413 * y1 - 0.71414 * y2 >> shift;
          out[pos++] = y0 + 1.772 * y1 >> shift;
        }
      } else {
        for (j = 0; j < jj; j++, pos += alpha01) {
          y0 = y0items[j] + offset;
          y1 = y1items[j];
          y2 = y2items[j];
          const g = y0 - (y2 + y1 >> 2);
          out[pos++] = g + y2 >> shift;
          out[pos++] = g >> shift;
          out[pos++] = g + y1 >> shift;
        }
      }
      if (fourComponents) {
        for (j = 0, pos = 3; j < jj; j++, pos += 4) {
          out[pos] = y3items[j] + offset >> shift;
        }
      }
    } else {
      for (let c = 0; c < componentsCount; c++) {
        const items = transformedTiles[c].items;
        shift = components[c].precision - 8;
        offset = (128 << shift) + 0.5;
        for (pos = c, j = 0, jj = items.length; j < jj; j++) {
          out[pos] = items[j] + offset >> shift;
          pos += componentsCount;
        }
      }
    }
    resultImages.push(result);
  }
  return resultImages;
}
function initializeTile(context, tileIndex) {
  const siz = context.SIZ;
  const componentsCount = siz.Csiz;
  const tile = context.tiles[tileIndex];
  for (let c = 0; c < componentsCount; c++) {
    const component = tile.components[c];
    const qcdOrQcc = context.currentTile.QCC[c] !== undefined ? context.currentTile.QCC[c] : context.currentTile.QCD;
    component.quantizationParameters = qcdOrQcc;
    const codOrCoc = context.currentTile.COC[c] !== undefined ? context.currentTile.COC[c] : context.currentTile.COD;
    component.codingStyleParameters = codOrCoc;
  }
  tile.codingStyleDefaultParameters = context.currentTile.COD;
}
class TagTree {
  constructor(width, height) {
    const levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1;
    this.levels = [];
    for (let i = 0; i < levelsLength; i++) {
      const level = {
        width,
        height,
        items: []
      };
      this.levels.push(level);
      width = Math.ceil(width / 2);
      height = Math.ceil(height / 2);
    }
  }
  reset(i, j) {
    let currentLevel = 0,
      value = 0,
      level;
    while (currentLevel < this.levels.length) {
      level = this.levels[currentLevel];
      const index = i + j * level.width;
      if (level.items[index] !== undefined) {
        value = level.items[index];
        break;
      }
      level.index = index;
      i >>= 1;
      j >>= 1;
      currentLevel++;
    }
    currentLevel--;
    level = this.levels[currentLevel];
    level.items[level.index] = value;
    this.currentLevel = currentLevel;
    delete this.value;
  }
  incrementValue() {
    const level = this.levels[this.currentLevel];
    level.items[level.index]++;
  }
  nextLevel() {
    let currentLevel = this.currentLevel;
    let level = this.levels[currentLevel];
    const value = level.items[level.index];
    currentLevel--;
    if (currentLevel < 0) {
      this.value = value;
      return false;
    }
    this.currentLevel = currentLevel;
    level = this.levels[currentLevel];
    level.items[level.index] = value;
    return true;
  }
}
class InclusionTree {
  constructor(width, height, defaultValue) {
    const levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1;
    this.levels = [];
    for (let i = 0; i < levelsLength; i++) {
      const items = new Uint8Array(width * height);
      for (let j = 0, jj = items.length; j < jj; j++) {
        items[j] = defaultValue;
      }
      const level = {
        width,
        height,
        items
      };
      this.levels.push(level);
      width = Math.ceil(width / 2);
      height = Math.ceil(height / 2);
    }
  }
  reset(i, j, stopValue) {
    let currentLevel = 0;
    while (currentLevel < this.levels.length) {
      const level = this.levels[currentLevel];
      const index = i + j * level.width;
      level.index = index;
      const value = level.items[index];
      if (value === 0xff) {
        break;
      }
      if (value > stopValue) {
        this.currentLevel = currentLevel;
        this.propagateValues();
        return false;
      }
      i >>= 1;
      j >>= 1;
      currentLevel++;
    }
    this.currentLevel = currentLevel - 1;
    return true;
  }
  incrementValue(stopValue) {
    const level = this.levels[this.currentLevel];
    level.items[level.index] = stopValue + 1;
    this.propagateValues();
  }
  propagateValues() {
    let levelIndex = this.currentLevel;
    let level = this.levels[levelIndex];
    const currentValue = level.items[level.index];
    while (--levelIndex >= 0) {
      level = this.levels[levelIndex];
      level.items[level.index] = currentValue;
    }
  }
  nextLevel() {
    let currentLevel = this.currentLevel;
    let level = this.levels[currentLevel];
    const value = level.items[level.index];
    level.items[level.index] = 0xff;
    currentLevel--;
    if (currentLevel < 0) {
      return false;
    }
    this.currentLevel = currentLevel;
    level = this.levels[currentLevel];
    level.items[level.index] = value;
    return true;
  }
}
class BitModel {
  static UNIFORM_CONTEXT = 17;
  static RUNLENGTH_CONTEXT = 18;
  static LLAndLHContextsLabel = new Uint8Array([0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8]);
  static HLContextLabel = new Uint8Array([0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8]);
  static HHContextLabel = new Uint8Array([0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8]);
  constructor(width, height, subband, zeroBitPlanes, mb) {
    this.width = width;
    this.height = height;
    let contextLabelTable;
    if (subband === "HH") {
      contextLabelTable = BitModel.HHContextLabel;
    } else if (subband === "HL") {
      contextLabelTable = BitModel.HLContextLabel;
    } else {
      contextLabelTable = BitModel.LLAndLHContextsLabel;
    }
    this.contextLabelTable = contextLabelTable;
    const coefficientCount = width * height;
    this.neighborsSignificance = new Uint8Array(coefficientCount);
    this.coefficentsSign = new Uint8Array(coefficientCount);
    let coefficentsMagnitude;
    if (mb > 14) {
      coefficentsMagnitude = new Uint32Array(coefficientCount);
    } else if (mb > 6) {
      coefficentsMagnitude = new Uint16Array(coefficientCount);
    } else {
      coefficentsMagnitude = new Uint8Array(coefficientCount);
    }
    this.coefficentsMagnitude = coefficentsMagnitude;
    this.processingFlags = new Uint8Array(coefficientCount);
    const bitsDecoded = new Uint8Array(coefficientCount);
    if (zeroBitPlanes !== 0) {
      for (let i = 0; i < coefficientCount; i++) {
        bitsDecoded[i] = zeroBitPlanes;
      }
    }
    this.bitsDecoded = bitsDecoded;
    this.reset();
  }
  setDecoder(decoder) {
    this.decoder = decoder;
  }
  reset() {
    this.contexts = new Int8Array(19);
    this.contexts[0] = 4 << 1 | 0;
    this.contexts[BitModel.UNIFORM_CONTEXT] = 46 << 1 | 0;
    this.contexts[BitModel.RUNLENGTH_CONTEXT] = 3 << 1 | 0;
  }
  setNeighborsSignificance(row, column, index) {
    const neighborsSignificance = this.neighborsSignificance;
    const width = this.width,
      height = this.height;
    const left = column > 0;
    const right = column + 1 < width;
    let i;
    if (row > 0) {
      i = index - width;
      if (left) {
        neighborsSignificance[i - 1] += 0x10;
      }
      if (right) {
        neighborsSignificance[i + 1] += 0x10;
      }
      neighborsSignificance[i] += 0x04;
    }
    if (row + 1 < height) {
      i = index + width;
      if (left) {
        neighborsSignificance[i - 1] += 0x10;
      }
      if (right) {
        neighborsSignificance[i + 1] += 0x10;
      }
      neighborsSignificance[i] += 0x04;
    }
    if (left) {
      neighborsSignificance[index - 1] += 0x01;
    }
    if (right) {
      neighborsSignificance[index + 1] += 0x01;
    }
    neighborsSignificance[index] |= 0x80;
  }
  runSignificancePropagationPass() {
    const decoder = this.decoder;
    const width = this.width,
      height = this.height;
    const coefficentsMagnitude = this.coefficentsMagnitude;
    const coefficentsSign = this.coefficentsSign;
    const neighborsSignificance = this.neighborsSignificance;
    const processingFlags = this.processingFlags;
    const contexts = this.contexts;
    const labels = this.contextLabelTable;
    const bitsDecoded = this.bitsDecoded;
    const processedInverseMask = ~1;
    const processedMask = 1;
    const firstMagnitudeBitMask = 2;
    for (let i0 = 0; i0 < height; i0 += 4) {
      for (let j = 0; j < width; j++) {
        let index = i0 * width + j;
        for (let i1 = 0; i1 < 4; i1++, index += width) {
          const i = i0 + i1;
          if (i >= height) {
            break;
          }
          processingFlags[index] &= processedInverseMask;
          if (coefficentsMagnitude[index] || !neighborsSignificance[index]) {
            continue;
          }
          const contextLabel = labels[neighborsSignificance[index]];
          const decision = decoder.readBit(contexts, contextLabel);
          if (decision) {
            const sign = this.decodeSignBit(i, j, index);
            coefficentsSign[index] = sign;
            coefficentsMagnitude[index] = 1;
            this.setNeighborsSignificance(i, j, index);
            processingFlags[index] |= firstMagnitudeBitMask;
          }
          bitsDecoded[index]++;
          processingFlags[index] |= processedMask;
        }
      }
    }
  }
  decodeSignBit(row, column, index) {
    const width = this.width,
      height = this.height;
    const coefficentsMagnitude = this.coefficentsMagnitude;
    const coefficentsSign = this.coefficentsSign;
    let contribution, sign0, sign1, significance1;
    let contextLabel, decoded;
    significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0;
    if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) {
      sign1 = coefficentsSign[index + 1];
      if (significance1) {
        sign0 = coefficentsSign[index - 1];
        contribution = 1 - sign1 - sign0;
      } else {
        contribution = 1 - sign1 - sign1;
      }
    } else if (significance1) {
      sign0 = coefficentsSign[index - 1];
      contribution = 1 - sign0 - sign0;
    } else {
      contribution = 0;
    }
    const horizontalContribution = 3 * contribution;
    significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0;
    if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) {
      sign1 = coefficentsSign[index + width];
      if (significance1) {
        sign0 = coefficentsSign[index - width];
        contribution = 1 - sign1 - sign0 + horizontalContribution;
      } else {
        contribution = 1 - sign1 - sign1 + horizontalContribution;
      }
    } else if (significance1) {
      sign0 = coefficentsSign[index - width];
      contribution = 1 - sign0 - sign0 + horizontalContribution;
    } else {
      contribution = horizontalContribution;
    }
    if (contribution >= 0) {
      contextLabel = 9 + contribution;
      decoded = this.decoder.readBit(this.contexts, contextLabel);
    } else {
      contextLabel = 9 - contribution;
      decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1;
    }
    return decoded;
  }
  runMagnitudeRefinementPass() {
    const decoder = this.decoder;
    const width = this.width,
      height = this.height;
    const coefficentsMagnitude = this.coefficentsMagnitude;
    const neighborsSignificance = this.neighborsSignificance;
    const contexts = this.contexts;
    const bitsDecoded = this.bitsDecoded;
    const processingFlags = this.processingFlags;
    const processedMask = 1;
    const firstMagnitudeBitMask = 2;
    const length = width * height;
    const width4 = width * 4;
    for (let index0 = 0, indexNext; index0 < length; index0 = indexNext) {
      indexNext = Math.min(length, index0 + width4);
      for (let j = 0; j < width; j++) {
        for (let index = index0 + j; index < indexNext; index += width) {
          if (!coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) {
            continue;
          }
          let contextLabel = 16;
          if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) {
            processingFlags[index] ^= firstMagnitudeBitMask;
            const significance = neighborsSignificance[index] & 127;
            contextLabel = significance === 0 ? 15 : 14;
          }
          const bit = decoder.readBit(contexts, contextLabel);
          coefficentsMagnitude[index] = coefficentsMagnitude[index] << 1 | bit;
          bitsDecoded[index]++;
          processingFlags[index] |= processedMask;
        }
      }
    }
  }
  runCleanupPass() {
    const decoder = this.decoder;
    const width = this.width,
      height = this.height;
    const neighborsSignificance = this.neighborsSignificance;
    const coefficentsMagnitude = this.coefficentsMagnitude;
    const coefficentsSign = this.coefficentsSign;
    const contexts = this.contexts;
    const labels = this.contextLabelTable;
    const bitsDecoded = this.bitsDecoded;
    const processingFlags = this.processingFlags;
    const processedMask = 1;
    const firstMagnitudeBitMask = 2;
    const oneRowDown = width;
    const twoRowsDown = width * 2;
    const threeRowsDown = width * 3;
    let iNext;
    for (let i0 = 0; i0 < height; i0 = iNext) {
      iNext = Math.min(i0 + 4, height);
      const indexBase = i0 * width;
      const checkAllEmpty = i0 + 3 < height;
      for (let j = 0; j < width; j++) {
        const index0 = indexBase + j;
        const allEmpty = checkAllEmpty && processingFlags[index0] === 0 && processingFlags[index0 + oneRowDown] === 0 && processingFlags[index0 + twoRowsDown] === 0 && processingFlags[index0 + threeRowsDown] === 0 && neighborsSignificance[index0] === 0 && neighborsSignificance[index0 + oneRowDown] === 0 && neighborsSignificance[index0 + twoRowsDown] === 0 && neighborsSignificance[index0 + threeRowsDown] === 0;
        let i1 = 0,
          index = index0;
        let i = i0,
          sign;
        if (allEmpty) {
          const hasSignificantCoefficent = decoder.readBit(contexts, BitModel.RUNLENGTH_CONTEXT);
          if (!hasSignificantCoefficent) {
            bitsDecoded[index0]++;
            bitsDecoded[index0 + oneRowDown]++;
            bitsDecoded[index0 + twoRowsDown]++;
            bitsDecoded[index0 + threeRowsDown]++;
            continue;
          }
          i1 = decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT);
          if (i1 !== 0) {
            i = i0 + i1;
            index += i1 * width;
          }
          sign = this.decodeSignBit(i, j, index);
          coefficentsSign[index] = sign;
          coefficentsMagnitude[index] = 1;
          this.setNeighborsSignificance(i, j, index);
          processingFlags[index] |= firstMagnitudeBitMask;
          index = index0;
          for (let i2 = i0; i2 <= i; i2++, index += width) {
            bitsDecoded[index]++;
          }
          i1++;
        }
        for (i = i0 + i1; i < iNext; i++, index += width) {
          if (coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) {
            continue;
          }
          const contextLabel = labels[neighborsSignificance[index]];
          const decision = decoder.readBit(contexts, contextLabel);
          if (decision === 1) {
            sign = this.decodeSignBit(i, j, index);
            coefficentsSign[index] = sign;
            coefficentsMagnitude[index] = 1;
            this.setNeighborsSignificance(i, j, index);
            processingFlags[index] |= firstMagnitudeBitMask;
          }
          bitsDecoded[index]++;
        }
      }
    }
  }
  checkSegmentationSymbol() {
    const decoder = this.decoder;
    const contexts = this.contexts;
    const symbol = decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 3 | decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 2 | decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT);
    if (symbol !== 0xa) {
      throw new JpxError("Invalid segmentation symbol");
    }
  }
}
class Transform {
  constructor() {
    if (this.constructor === Transform) {
      (0, _util.unreachable)("Cannot initialize Transform.");
    }
  }
  calculate(subbands, u0, v0) {
    let ll = subbands[0];
    for (let i = 1, ii = subbands.length; i < ii; i++) {
      ll = this.iterate(ll, subbands[i], u0, v0);
    }
    return ll;
  }
  extend(buffer, offset, size) {
    let i1 = offset - 1,
      j1 = offset + 1;
    let i2 = offset + size - 2,
      j2 = offset + size;
    buffer[i1--] = buffer[j1++];
    buffer[j2++] = buffer[i2--];
    buffer[i1--] = buffer[j1++];
    buffer[j2++] = buffer[i2--];
    buffer[i1--] = buffer[j1++];
    buffer[j2++] = buffer[i2--];
    buffer[i1] = buffer[j1];
    buffer[j2] = buffer[i2];
  }
  filter(x, offset, length) {
    (0, _util.unreachable)("Abstract method `filter` called");
  }
  iterate(ll, hl_lh_hh, u0, v0) {
    const llWidth = ll.width,
      llHeight = ll.height;
    let llItems = ll.items;
    const width = hl_lh_hh.width;
    const height = hl_lh_hh.height;
    const items = hl_lh_hh.items;
    let i, j, k, l, u, v;
    for (k = 0, i = 0; i < llHeight; i++) {
      l = i * 2 * width;
      for (j = 0; j < llWidth; j++, k++, l += 2) {
        items[l] = llItems[k];
      }
    }
    llItems = ll.items = null;
    const bufferPadding = 4;
    const rowBuffer = new Float32Array(width + 2 * bufferPadding);
    if (width === 1) {
      if ((u0 & 1) !== 0) {
        for (v = 0, k = 0; v < height; v++, k += width) {
          items[k] *= 0.5;
        }
      }
    } else {
      for (v = 0, k = 0; v < height; v++, k += width) {
        rowBuffer.set(items.subarray(k, k + width), bufferPadding);
        this.extend(rowBuffer, bufferPadding, width);
        this.filter(rowBuffer, bufferPadding, width);
        items.set(rowBuffer.subarray(bufferPadding, bufferPadding + width), k);
      }
    }
    let numBuffers = 16;
    const colBuffers = [];
    for (i = 0; i < numBuffers; i++) {
      colBuffers.push(new Float32Array(height + 2 * bufferPadding));
    }
    let b,
      currentBuffer = 0;
    ll = bufferPadding + height;
    if (height === 1) {
      if ((v0 & 1) !== 0) {
        for (u = 0; u < width; u++) {
          items[u] *= 0.5;
        }
      }
    } else {
      for (u = 0; u < width; u++) {
        if (currentBuffer === 0) {
          numBuffers = Math.min(width - u, numBuffers);
          for (k = u, l = bufferPadding; l < ll; k += width, l++) {
            for (b = 0; b < numBuffers; b++) {
              colBuffers[b][l] = items[k + b];
            }
          }
          currentBuffer = numBuffers;
        }
        currentBuffer--;
        const buffer = colBuffers[currentBuffer];
        this.extend(buffer, bufferPadding, height);
        this.filter(buffer, bufferPadding, height);
        if (currentBuffer === 0) {
          k = u - numBuffers + 1;
          for (l = bufferPadding; l < ll; k += width, l++) {
            for (b = 0; b < numBuffers; b++) {
              items[k + b] = colBuffers[b][l];
            }
          }
        }
      }
    }
    return {
      width,
      height,
      items
    };
  }
}
class IrreversibleTransform extends Transform {
  filter(x, offset, length) {
    const len = length >> 1;
    offset |= 0;
    let j, n, current, next;
    const alpha = -1.586134342059924;
    const beta = -0.052980118572961;
    const gamma = 0.882911075530934;
    const delta = 0.443506852043971;
    const K = 1.230174104914001;
    const K_ = 1 / K;
    j = offset - 3;
    for (n = len + 4; n--; j += 2) {
      x[j] *= K_;
    }
    j = offset - 2;
    current = delta * x[j - 1];
    for (n = len + 3; n--; j += 2) {
      next = delta * x[j + 1];
      x[j] = K * x[j] - current - next;
      if (n--) {
        j += 2;
        current = delta * x[j + 1];
        x[j] = K * x[j] - current - next;
      } else {
        break;
      }
    }
    j = offset - 1;
    current = gamma * x[j - 1];
    for (n = len + 2; n--; j += 2) {
      next = gamma * x[j + 1];
      x[j] -= current + next;
      if (n--) {
        j += 2;
        current = gamma * x[j + 1];
        x[j] -= current + next;
      } else {
        break;
      }
    }
    j = offset;
    current = beta * x[j - 1];
    for (n = len + 1; n--; j += 2) {
      next = beta * x[j + 1];
      x[j] -= current + next;
      if (n--) {
        j += 2;
        current = beta * x[j + 1];
        x[j] -= current + next;
      } else {
        break;
      }
    }
    if (len !== 0) {
      j = offset + 1;
      current = alpha * x[j - 1];
      for (n = len; n--; j += 2) {
        next = alpha * x[j + 1];
        x[j] -= current + next;
        if (n--) {
          j += 2;
          current = alpha * x[j + 1];
          x[j] -= current + next;
        } else {
          break;
        }
      }
    }
  }
}
class ReversibleTransform extends Transform {
  filter(x, offset, length) {
    const len = length >> 1;
    offset |= 0;
    let j, n;
    for (j = offset, n = len + 1; n--; j += 2) {
      x[j] -= x[j - 1] + x[j + 1] + 2 >> 2;
    }
    for (j = offset + 1, n = len; n--; j += 2) {
      x[j] += x[j - 1] + x[j + 1] >> 1;
    }
  }
}

/***/ }),
/* 31 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.LZWStream = void 0;
var _decode_stream = __w_pdfjs_require__(18);
class LZWStream extends _decode_stream.DecodeStream {
  constructor(str, maybeLength, earlyChange) {
    super(maybeLength);
    this.str = str;
    this.dict = str.dict;
    this.cachedData = 0;
    this.bitsCached = 0;
    const maxLzwDictionarySize = 4096;
    const lzwState = {
      earlyChange,
      codeLength: 9,
      nextCode: 258,
      dictionaryValues: new Uint8Array(maxLzwDictionarySize),
      dictionaryLengths: new Uint16Array(maxLzwDictionarySize),
      dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize),
      currentSequence: new Uint8Array(maxLzwDictionarySize),
      currentSequenceLength: 0
    };
    for (let i = 0; i < 256; ++i) {
      lzwState.dictionaryValues[i] = i;
      lzwState.dictionaryLengths[i] = 1;
    }
    this.lzwState = lzwState;
  }
  readBits(n) {
    let bitsCached = this.bitsCached;
    let cachedData = this.cachedData;
    while (bitsCached < n) {
      const c = this.str.getByte();
      if (c === -1) {
        this.eof = true;
        return null;
      }
      cachedData = cachedData << 8 | c;
      bitsCached += 8;
    }
    this.bitsCached = bitsCached -= n;
    this.cachedData = cachedData;
    this.lastCode = null;
    return cachedData >>> bitsCached & (1 << n) - 1;
  }
  readBlock() {
    const blockSize = 512,
      decodedSizeDelta = blockSize;
    let estimatedDecodedSize = blockSize * 2;
    let i, j, q;
    const lzwState = this.lzwState;
    if (!lzwState) {
      return;
    }
    const earlyChange = lzwState.earlyChange;
    let nextCode = lzwState.nextCode;
    const dictionaryValues = lzwState.dictionaryValues;
    const dictionaryLengths = lzwState.dictionaryLengths;
    const dictionaryPrevCodes = lzwState.dictionaryPrevCodes;
    let codeLength = lzwState.codeLength;
    let prevCode = lzwState.prevCode;
    const currentSequence = lzwState.currentSequence;
    let currentSequenceLength = lzwState.currentSequenceLength;
    let decodedLength = 0;
    let currentBufferLength = this.bufferLength;
    let buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);
    for (i = 0; i < blockSize; i++) {
      const code = this.readBits(codeLength);
      const hasPrev = currentSequenceLength > 0;
      if (code < 256) {
        currentSequence[0] = code;
        currentSequenceLength = 1;
      } else if (code >= 258) {
        if (code < nextCode) {
          currentSequenceLength = dictionaryLengths[code];
          for (j = currentSequenceLength - 1, q = code; j >= 0; j--) {
            currentSequence[j] = dictionaryValues[q];
            q = dictionaryPrevCodes[q];
          }
        } else {
          currentSequence[currentSequenceLength++] = currentSequence[0];
        }
      } else if (code === 256) {
        codeLength = 9;
        nextCode = 258;
        currentSequenceLength = 0;
        continue;
      } else {
        this.eof = true;
        delete this.lzwState;
        break;
      }
      if (hasPrev) {
        dictionaryPrevCodes[nextCode] = prevCode;
        dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1;
        dictionaryValues[nextCode] = currentSequence[0];
        nextCode++;
        codeLength = nextCode + earlyChange & nextCode + earlyChange - 1 ? codeLength : Math.min(Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, 12) | 0;
      }
      prevCode = code;
      decodedLength += currentSequenceLength;
      if (estimatedDecodedSize < decodedLength) {
        do {
          estimatedDecodedSize += decodedSizeDelta;
        } while (estimatedDecodedSize < decodedLength);
        buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);
      }
      for (j = 0; j < currentSequenceLength; j++) {
        buffer[currentBufferLength++] = currentSequence[j];
      }
    }
    lzwState.nextCode = nextCode;
    lzwState.codeLength = codeLength;
    lzwState.prevCode = prevCode;
    lzwState.currentSequenceLength = currentSequenceLength;
    this.bufferLength = currentBufferLength;
  }
}
exports.LZWStream = LZWStream;

/***/ }),
/* 32 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.PredictorStream = void 0;
var _decode_stream = __w_pdfjs_require__(18);
var _primitives = __w_pdfjs_require__(4);
var _util = __w_pdfjs_require__(2);
class PredictorStream extends _decode_stream.DecodeStream {
  constructor(str, maybeLength, params) {
    super(maybeLength);
    if (!(params instanceof _primitives.Dict)) {
      return str;
    }
    const predictor = this.predictor = params.get("Predictor") || 1;
    if (predictor <= 1) {
      return str;
    }
    if (predictor !== 2 && (predictor < 10 || predictor > 15)) {
      throw new _util.FormatError(`Unsupported predictor: ${predictor}`);
    }
    this.readBlock = predictor === 2 ? this.readBlockTiff : this.readBlockPng;
    this.str = str;
    this.dict = str.dict;
    const colors = this.colors = params.get("Colors") || 1;
    const bits = this.bits = params.get("BPC", "BitsPerComponent") || 8;
    const columns = this.columns = params.get("Columns") || 1;
    this.pixBytes = colors * bits + 7 >> 3;
    this.rowBytes = columns * colors * bits + 7 >> 3;
    return this;
  }
  readBlockTiff() {
    const rowBytes = this.rowBytes;
    const bufferLength = this.bufferLength;
    const buffer = this.ensureBuffer(bufferLength + rowBytes);
    const bits = this.bits;
    const colors = this.colors;
    const rawBytes = this.str.getBytes(rowBytes);
    this.eof = !rawBytes.length;
    if (this.eof) {
      return;
    }
    let inbuf = 0,
      outbuf = 0;
    let inbits = 0,
      outbits = 0;
    let pos = bufferLength;
    let i;
    if (bits === 1 && colors === 1) {
      for (i = 0; i < rowBytes; ++i) {
        let c = rawBytes[i] ^ inbuf;
        c ^= c >> 1;
        c ^= c >> 2;
        c ^= c >> 4;
        inbuf = (c & 1) << 7;
        buffer[pos++] = c;
      }
    } else if (bits === 8) {
      for (i = 0; i < colors; ++i) {
        buffer[pos++] = rawBytes[i];
      }
      for (; i < rowBytes; ++i) {
        buffer[pos] = buffer[pos - colors] + rawBytes[i];
        pos++;
      }
    } else if (bits === 16) {
      const bytesPerPixel = colors * 2;
      for (i = 0; i < bytesPerPixel; ++i) {
        buffer[pos++] = rawBytes[i];
      }
      for (; i < rowBytes; i += 2) {
        const sum = ((rawBytes[i] & 0xff) << 8) + (rawBytes[i + 1] & 0xff) + ((buffer[pos - bytesPerPixel] & 0xff) << 8) + (buffer[pos - bytesPerPixel + 1] & 0xff);
        buffer[pos++] = sum >> 8 & 0xff;
        buffer[pos++] = sum & 0xff;
      }
    } else {
      const compArray = new Uint8Array(colors + 1);
      const bitMask = (1 << bits) - 1;
      let j = 0,
        k = bufferLength;
      const columns = this.columns;
      for (i = 0; i < columns; ++i) {
        for (let kk = 0; kk < colors; ++kk) {
          if (inbits < bits) {
            inbuf = inbuf << 8 | rawBytes[j++] & 0xff;
            inbits += 8;
          }
          compArray[kk] = compArray[kk] + (inbuf >> inbits - bits) & bitMask;
          inbits -= bits;
          outbuf = outbuf << bits | compArray[kk];
          outbits += bits;
          if (outbits >= 8) {
            buffer[k++] = outbuf >> outbits - 8 & 0xff;
            outbits -= 8;
          }
        }
      }
      if (outbits > 0) {
        buffer[k++] = (outbuf << 8 - outbits) + (inbuf & (1 << 8 - outbits) - 1);
      }
    }
    this.bufferLength += rowBytes;
  }
  readBlockPng() {
    const rowBytes = this.rowBytes;
    const pixBytes = this.pixBytes;
    const predictor = this.str.getByte();
    const rawBytes = this.str.getBytes(rowBytes);
    this.eof = !rawBytes.length;
    if (this.eof) {
      return;
    }
    const bufferLength = this.bufferLength;
    const buffer = this.ensureBuffer(bufferLength + rowBytes);
    let prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength);
    if (prevRow.length === 0) {
      prevRow = new Uint8Array(rowBytes);
    }
    let i,
      j = bufferLength,
      up,
      c;
    switch (predictor) {
      case 0:
        for (i = 0; i < rowBytes; ++i) {
          buffer[j++] = rawBytes[i];
        }
        break;
      case 1:
        for (i = 0; i < pixBytes; ++i) {
          buffer[j++] = rawBytes[i];
        }
        for (; i < rowBytes; ++i) {
          buffer[j] = buffer[j - pixBytes] + rawBytes[i] & 0xff;
          j++;
        }
        break;
      case 2:
        for (i = 0; i < rowBytes; ++i) {
          buffer[j++] = prevRow[i] + rawBytes[i] & 0xff;
        }
        break;
      case 3:
        for (i = 0; i < pixBytes; ++i) {
          buffer[j++] = (prevRow[i] >> 1) + rawBytes[i];
        }
        for (; i < rowBytes; ++i) {
          buffer[j] = (prevRow[i] + buffer[j - pixBytes] >> 1) + rawBytes[i] & 0xff;
          j++;
        }
        break;
      case 4:
        for (i = 0; i < pixBytes; ++i) {
          up = prevRow[i];
          c = rawBytes[i];
          buffer[j++] = up + c;
        }
        for (; i < rowBytes; ++i) {
          up = prevRow[i];
          const upLeft = prevRow[i - pixBytes];
          const left = buffer[j - pixBytes];
          const p = left + up - upLeft;
          let pa = p - left;
          if (pa < 0) {
            pa = -pa;
          }
          let pb = p - up;
          if (pb < 0) {
            pb = -pb;
          }
          let pc = p - upLeft;
          if (pc < 0) {
            pc = -pc;
          }
          c = rawBytes[i];
          if (pa <= pb && pa <= pc) {
            buffer[j++] = left + c;
          } else if (pb <= pc) {
            buffer[j++] = up + c;
          } else {
            buffer[j++] = upLeft + c;
          }
        }
        break;
      default:
        throw new _util.FormatError(`Unsupported predictor: ${predictor}`);
    }
    this.bufferLength += rowBytes;
  }
}
exports.PredictorStream = PredictorStream;

/***/ }),
/* 33 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.RunLengthStream = void 0;
var _decode_stream = __w_pdfjs_require__(18);
class RunLengthStream extends _decode_stream.DecodeStream {
  constructor(str, maybeLength) {
    super(maybeLength);
    this.str = str;
    this.dict = str.dict;
  }
  readBlock() {
    const repeatHeader = this.str.getBytes(2);
    if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) {
      this.eof = true;
      return;
    }
    let buffer;
    let bufferLength = this.bufferLength;
    let n = repeatHeader[0];
    if (n < 128) {
      buffer = this.ensureBuffer(bufferLength + n + 1);
      buffer[bufferLength++] = repeatHeader[1];
      if (n > 0) {
        const source = this.str.getBytes(n);
        buffer.set(source, bufferLength);
        bufferLength += n;
      }
    } else {
      n = 257 - n;
      const b = repeatHeader[1];
      buffer = this.ensureBuffer(bufferLength + n + 1);
      for (let i = 0; i < n; i++) {
        buffer[bufferLength++] = b;
      }
    }
    this.bufferLength = bufferLength;
  }
}
exports.RunLengthStream = RunLengthStream;

/***/ }),
/* 34 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.Font = exports.ErrorFont = void 0;
var _util = __w_pdfjs_require__(2);
var _cff_parser = __w_pdfjs_require__(35);
var _fonts_utils = __w_pdfjs_require__(38);
var _unicode = __w_pdfjs_require__(40);
var _glyphlist = __w_pdfjs_require__(39);
var _encodings = __w_pdfjs_require__(37);
var _standard_fonts = __w_pdfjs_require__(41);
var _to_unicode_map = __w_pdfjs_require__(42);
var _cff_font = __w_pdfjs_require__(43);
var _font_renderer = __w_pdfjs_require__(44);
var _metrics = __w_pdfjs_require__(45);
var _glyf = __w_pdfjs_require__(46);
var _cmap = __w_pdfjs_require__(14);
var _opentype_file_builder = __w_pdfjs_require__(47);
var _core_utils = __w_pdfjs_require__(3);
var _stream = __w_pdfjs_require__(8);
var _type1_font = __w_pdfjs_require__(48);
const PRIVATE_USE_AREAS = [[0xe000, 0xf8ff], [0x100000, 0x10fffd]];
const PDF_GLYPH_SPACE_UNITS = 1000;
const EXPORT_DATA_PROPERTIES = ["ascent", "bbox", "black", "bold", "charProcOperatorList", "composite", "cssFontInfo", "data", "defaultVMetrics", "defaultWidth", "descent", "fallbackName", "fontMatrix", "isInvalidPDFjsFont", "isType3Font", "italic", "loadedName", "mimetype", "missingFile", "name", "remeasure", "subtype", "systemFontInfo", "type", "vertical"];
const EXPORT_DATA_EXTRA_PROPERTIES = ["cMap", "defaultEncoding", "differences", "isMonospace", "isSerifFont", "isSymbolicFont", "seacMap", "toFontChar", "toUnicode", "vmetrics", "widths"];
function adjustWidths(properties) {
  if (!properties.fontMatrix) {
    return;
  }
  if (properties.fontMatrix[0] === _util.FONT_IDENTITY_MATRIX[0]) {
    return;
  }
  const scale = 0.001 / properties.fontMatrix[0];
  const glyphsWidths = properties.widths;
  for (const glyph in glyphsWidths) {
    glyphsWidths[glyph] *= scale;
  }
  properties.defaultWidth *= scale;
}
function adjustTrueTypeToUnicode(properties, isSymbolicFont, nameRecords) {
  if (properties.isInternalFont) {
    return;
  }
  if (properties.hasIncludedToUnicodeMap) {
    return;
  }
  if (properties.hasEncoding) {
    return;
  }
  if (properties.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) {
    return;
  }
  if (!isSymbolicFont) {
    return;
  }
  if (nameRecords.length === 0) {
    return;
  }
  if (properties.defaultEncoding === _encodings.WinAnsiEncoding) {
    return;
  }
  for (const r of nameRecords) {
    if (!isWinNameRecord(r)) {
      return;
    }
  }
  const encoding = _encodings.WinAnsiEncoding;
  const toUnicode = [],
    glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
  for (const charCode in encoding) {
    const glyphName = encoding[charCode];
    if (glyphName === "") {
      continue;
    }
    const unicode = glyphsUnicodeMap[glyphName];
    if (unicode === undefined) {
      continue;
    }
    toUnicode[charCode] = String.fromCharCode(unicode);
  }
  if (toUnicode.length > 0) {
    properties.toUnicode.amend(toUnicode);
  }
}
function adjustType1ToUnicode(properties, builtInEncoding) {
  if (properties.isInternalFont) {
    return;
  }
  if (properties.hasIncludedToUnicodeMap) {
    return;
  }
  if (builtInEncoding === properties.defaultEncoding) {
    return;
  }
  if (properties.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) {
    return;
  }
  const toUnicode = [],
    glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
  for (const charCode in builtInEncoding) {
    if (properties.hasEncoding) {
      if (properties.baseEncodingName || properties.differences[charCode] !== undefined) {
        continue;
      }
    }
    const glyphName = builtInEncoding[charCode];
    const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);
    if (unicode !== -1) {
      toUnicode[charCode] = String.fromCharCode(unicode);
    }
  }
  if (toUnicode.length > 0) {
    properties.toUnicode.amend(toUnicode);
  }
}
function amendFallbackToUnicode(properties) {
  if (!properties.fallbackToUnicode) {
    return;
  }
  if (properties.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) {
    return;
  }
  const toUnicode = [];
  for (const charCode in properties.fallbackToUnicode) {
    if (properties.toUnicode.has(charCode)) {
      continue;
    }
    toUnicode[charCode] = properties.fallbackToUnicode[charCode];
  }
  if (toUnicode.length > 0) {
    properties.toUnicode.amend(toUnicode);
  }
}
class Glyph {
  constructor(originalCharCode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) {
    this.originalCharCode = originalCharCode;
    this.fontChar = fontChar;
    this.unicode = unicode;
    this.accent = accent;
    this.width = width;
    this.vmetric = vmetric;
    this.operatorListId = operatorListId;
    this.isSpace = isSpace;
    this.isInFont = isInFont;
  }
  get category() {
    return (0, _util.shadow)(this, "category", (0, _unicode.getCharUnicodeCategory)(this.unicode), true);
  }
}
function int16(b0, b1) {
  return (b0 << 8) + b1;
}
function writeSignedInt16(bytes, index, value) {
  bytes[index + 1] = value;
  bytes[index] = value >>> 8;
}
function signedInt16(b0, b1) {
  const value = (b0 << 8) + b1;
  return value & 1 << 15 ? value - 0x10000 : value;
}
function int32(b0, b1, b2, b3) {
  return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
}
function string16(value) {
  return String.fromCharCode(value >> 8 & 0xff, value & 0xff);
}
function safeString16(value) {
  if (value > 0x7fff) {
    value = 0x7fff;
  } else if (value < -0x8000) {
    value = -0x8000;
  }
  return String.fromCharCode(value >> 8 & 0xff, value & 0xff);
}
function isTrueTypeFile(file) {
  const header = file.peekBytes(4);
  return (0, _core_utils.readUint32)(header, 0) === 0x00010000 || (0, _util.bytesToString)(header) === "true";
}
function isTrueTypeCollectionFile(file) {
  const header = file.peekBytes(4);
  return (0, _util.bytesToString)(header) === "ttcf";
}
function isOpenTypeFile(file) {
  const header = file.peekBytes(4);
  return (0, _util.bytesToString)(header) === "OTTO";
}
function isType1File(file) {
  const header = file.peekBytes(2);
  if (header[0] === 0x25 && header[1] === 0x21) {
    return true;
  }
  if (header[0] === 0x80 && header[1] === 0x01) {
    return true;
  }
  return false;
}
function isCFFFile(file) {
  const header = file.peekBytes(4);
  if (header[0] >= 1 && header[3] >= 1 && header[3] <= 4) {
    return true;
  }
  return false;
}
function getFontFileType(file, {
  type,
  subtype,
  composite
}) {
  let fileType, fileSubtype;
  if (isTrueTypeFile(file) || isTrueTypeCollectionFile(file)) {
    fileType = composite ? "CIDFontType2" : "TrueType";
  } else if (isOpenTypeFile(file)) {
    fileType = composite ? "CIDFontType2" : "OpenType";
  } else if (isType1File(file)) {
    if (composite) {
      fileType = "CIDFontType0";
    } else {
      fileType = type === "MMType1" ? "MMType1" : "Type1";
    }
  } else if (isCFFFile(file)) {
    if (composite) {
      fileType = "CIDFontType0";
      fileSubtype = "CIDFontType0C";
    } else {
      fileType = type === "MMType1" ? "MMType1" : "Type1";
      fileSubtype = "Type1C";
    }
  } else {
    (0, _util.warn)("getFontFileType: Unable to detect correct font file Type/Subtype.");
    fileType = type;
    fileSubtype = subtype;
  }
  return [fileType, fileSubtype];
}
function applyStandardFontGlyphMap(map, glyphMap) {
  for (const charCode in glyphMap) {
    map[+charCode] = glyphMap[charCode];
  }
}
function buildToFontChar(encoding, glyphsUnicodeMap, differences) {
  const toFontChar = [];
  let unicode;
  for (let i = 0, ii = encoding.length; i < ii; i++) {
    unicode = (0, _unicode.getUnicodeForGlyph)(encoding[i], glyphsUnicodeMap);
    if (unicode !== -1) {
      toFontChar[i] = unicode;
    }
  }
  for (const charCode in differences) {
    unicode = (0, _unicode.getUnicodeForGlyph)(differences[charCode], glyphsUnicodeMap);
    if (unicode !== -1) {
      toFontChar[+charCode] = unicode;
    }
  }
  return toFontChar;
}
function isMacNameRecord(r) {
  return r.platform === 1 && r.encoding === 0 && r.language === 0;
}
function isWinNameRecord(r) {
  return r.platform === 3 && r.encoding === 1 && r.language === 0x409;
}
function convertCidString(charCode, cid, shouldThrow = false) {
  switch (cid.length) {
    case 1:
      return cid.charCodeAt(0);
    case 2:
      return cid.charCodeAt(0) << 8 | cid.charCodeAt(1);
  }
  const msg = `Unsupported CID string (charCode ${charCode}): "${cid}".`;
  if (shouldThrow) {
    throw new _util.FormatError(msg);
  }
  (0, _util.warn)(msg);
  return cid;
}
function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId, toUnicode) {
  const newMap = Object.create(null);
  const toUnicodeExtraMap = new Map();
  const toFontChar = [];
  const usedGlyphIds = new Set();
  let privateUseAreaIndex = 0;
  const privateUseOffetStart = PRIVATE_USE_AREAS[privateUseAreaIndex][0];
  let nextAvailableFontCharCode = privateUseOffetStart;
  let privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];
  const isInPrivateArea = code => PRIVATE_USE_AREAS[0][0] <= code && code <= PRIVATE_USE_AREAS[0][1] || PRIVATE_USE_AREAS[1][0] <= code && code <= PRIVATE_USE_AREAS[1][1];
  for (let originalCharCode in charCodeToGlyphId) {
    originalCharCode |= 0;
    let glyphId = charCodeToGlyphId[originalCharCode];
    if (!hasGlyph(glyphId)) {
      continue;
    }
    if (nextAvailableFontCharCode > privateUseOffetEnd) {
      privateUseAreaIndex++;
      if (privateUseAreaIndex >= PRIVATE_USE_AREAS.length) {
        (0, _util.warn)("Ran out of space in font private use area.");
        break;
      }
      nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0];
      privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];
    }
    const fontCharCode = nextAvailableFontCharCode++;
    if (glyphId === 0) {
      glyphId = newGlyphZeroId;
    }
    let unicode = toUnicode.get(originalCharCode);
    if (typeof unicode === "string") {
      unicode = unicode.codePointAt(0);
    }
    if (unicode && !isInPrivateArea(unicode) && !usedGlyphIds.has(glyphId)) {
      toUnicodeExtraMap.set(unicode, glyphId);
      usedGlyphIds.add(glyphId);
    }
    newMap[fontCharCode] = glyphId;
    toFontChar[originalCharCode] = fontCharCode;
  }
  return {
    toFontChar,
    charCodeToGlyphId: newMap,
    toUnicodeExtraMap,
    nextAvailableFontCharCode
  };
}
function getRanges(glyphs, toUnicodeExtraMap, numGlyphs) {
  const codes = [];
  for (const charCode in glyphs) {
    if (glyphs[charCode] >= numGlyphs) {
      continue;
    }
    codes.push({
      fontCharCode: charCode | 0,
      glyphId: glyphs[charCode]
    });
  }
  if (toUnicodeExtraMap) {
    for (const [unicode, glyphId] of toUnicodeExtraMap) {
      if (glyphId >= numGlyphs) {
        continue;
      }
      codes.push({
        fontCharCode: unicode,
        glyphId
      });
    }
  }
  if (codes.length === 0) {
    codes.push({
      fontCharCode: 0,
      glyphId: 0
    });
  }
  codes.sort(function fontGetRangesSort(a, b) {
    return a.fontCharCode - b.fontCharCode;
  });
  const ranges = [];
  const length = codes.length;
  for (let n = 0; n < length;) {
    const start = codes[n].fontCharCode;
    const codeIndices = [codes[n].glyphId];
    ++n;
    let end = start;
    while (n < length && end + 1 === codes[n].fontCharCode) {
      codeIndices.push(codes[n].glyphId);
      ++end;
      ++n;
      if (end === 0xffff) {
        break;
      }
    }
    ranges.push([start, end, codeIndices]);
  }
  return ranges;
}
function createCmapTable(glyphs, toUnicodeExtraMap, numGlyphs) {
  const ranges = getRanges(glyphs, toUnicodeExtraMap, numGlyphs);
  const numTables = ranges.at(-1)[1] > 0xffff ? 2 : 1;
  let cmap = "\x00\x00" + string16(numTables) + "\x00\x03" + "\x00\x01" + (0, _util.string32)(4 + numTables * 8);
  let i, ii, j, jj;
  for (i = ranges.length - 1; i >= 0; --i) {
    if (ranges[i][0] <= 0xffff) {
      break;
    }
  }
  const bmpLength = i + 1;
  if (ranges[i][0] < 0xffff && ranges[i][1] === 0xffff) {
    ranges[i][1] = 0xfffe;
  }
  const trailingRangesCount = ranges[i][1] < 0xffff ? 1 : 0;
  const segCount = bmpLength + trailingRangesCount;
  const searchParams = _opentype_file_builder.OpenTypeFileBuilder.getSearchParams(segCount, 2);
  let startCount = "";
  let endCount = "";
  let idDeltas = "";
  let idRangeOffsets = "";
  let glyphsIds = "";
  let bias = 0;
  let range, start, end, codes;
  for (i = 0, ii = bmpLength; i < ii; i++) {
    range = ranges[i];
    start = range[0];
    end = range[1];
    startCount += string16(start);
    endCount += string16(end);
    codes = range[2];
    let contiguous = true;
    for (j = 1, jj = codes.length; j < jj; ++j) {
      if (codes[j] !== codes[j - 1] + 1) {
        contiguous = false;
        break;
      }
    }
    if (!contiguous) {
      const offset = (segCount - i) * 2 + bias * 2;
      bias += end - start + 1;
      idDeltas += string16(0);
      idRangeOffsets += string16(offset);
      for (j = 0, jj = codes.length; j < jj; ++j) {
        glyphsIds += string16(codes[j]);
      }
    } else {
      const startCode = codes[0];
      idDeltas += string16(startCode - start & 0xffff);
      idRangeOffsets += string16(0);
    }
  }
  if (trailingRangesCount > 0) {
    endCount += "\xFF\xFF";
    startCount += "\xFF\xFF";
    idDeltas += "\x00\x01";
    idRangeOffsets += "\x00\x00";
  }
  const format314 = "\x00\x00" + string16(2 * segCount) + string16(searchParams.range) + string16(searchParams.entry) + string16(searchParams.rangeShift) + endCount + "\x00\x00" + startCount + idDeltas + idRangeOffsets + glyphsIds;
  let format31012 = "";
  let header31012 = "";
  if (numTables > 1) {
    cmap += "\x00\x03" + "\x00\x0A" + (0, _util.string32)(4 + numTables * 8 + 4 + format314.length);
    format31012 = "";
    for (i = 0, ii = ranges.length; i < ii; i++) {
      range = ranges[i];
      start = range[0];
      codes = range[2];
      let code = codes[0];
      for (j = 1, jj = codes.length; j < jj; ++j) {
        if (codes[j] !== codes[j - 1] + 1) {
          end = range[0] + j - 1;
          format31012 += (0, _util.string32)(start) + (0, _util.string32)(end) + (0, _util.string32)(code);
          start = end + 1;
          code = codes[j];
        }
      }
      format31012 += (0, _util.string32)(start) + (0, _util.string32)(range[1]) + (0, _util.string32)(code);
    }
    header31012 = "\x00\x0C" + "\x00\x00" + (0, _util.string32)(format31012.length + 16) + "\x00\x00\x00\x00" + (0, _util.string32)(format31012.length / 12);
  }
  return cmap + "\x00\x04" + string16(format314.length + 4) + format314 + header31012 + format31012;
}
function validateOS2Table(os2, file) {
  file.pos = (file.start || 0) + os2.offset;
  const version = file.getUint16();
  file.skip(60);
  const selection = file.getUint16();
  if (version < 4 && selection & 0x0300) {
    return false;
  }
  const firstChar = file.getUint16();
  const lastChar = file.getUint16();
  if (firstChar > lastChar) {
    return false;
  }
  file.skip(6);
  const usWinAscent = file.getUint16();
  if (usWinAscent === 0) {
    return false;
  }
  os2.data[8] = os2.data[9] = 0;
  return true;
}
function createOS2Table(properties, charstrings, override) {
  override ||= {
    unitsPerEm: 0,
    yMax: 0,
    yMin: 0,
    ascent: 0,
    descent: 0
  };
  let ulUnicodeRange1 = 0;
  let ulUnicodeRange2 = 0;
  let ulUnicodeRange3 = 0;
  let ulUnicodeRange4 = 0;
  let firstCharIndex = null;
  let lastCharIndex = 0;
  let position = -1;
  if (charstrings) {
    for (let code in charstrings) {
      code |= 0;
      if (firstCharIndex > code || !firstCharIndex) {
        firstCharIndex = code;
      }
      if (lastCharIndex < code) {
        lastCharIndex = code;
      }
      position = (0, _unicode.getUnicodeRangeFor)(code, position);
      if (position < 32) {
        ulUnicodeRange1 |= 1 << position;
      } else if (position < 64) {
        ulUnicodeRange2 |= 1 << position - 32;
      } else if (position < 96) {
        ulUnicodeRange3 |= 1 << position - 64;
      } else if (position < 123) {
        ulUnicodeRange4 |= 1 << position - 96;
      } else {
        throw new _util.FormatError("Unicode ranges Bits > 123 are reserved for internal usage");
      }
    }
    if (lastCharIndex > 0xffff) {
      lastCharIndex = 0xffff;
    }
  } else {
    firstCharIndex = 0;
    lastCharIndex = 255;
  }
  const bbox = properties.bbox || [0, 0, 0, 0];
  const unitsPerEm = override.unitsPerEm || 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0];
  const scale = properties.ascentScaled ? 1.0 : unitsPerEm / PDF_GLYPH_SPACE_UNITS;
  const typoAscent = override.ascent || Math.round(scale * (properties.ascent || bbox[3]));
  let typoDescent = override.descent || Math.round(scale * (properties.descent || bbox[1]));
  if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) {
    typoDescent = -typoDescent;
  }
  const winAscent = override.yMax || typoAscent;
  const winDescent = -override.yMin || -typoDescent;
  return "\x00\x03" + "\x02\x24" + "\x01\xF4" + "\x00\x05" + "\x00\x00" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x00\x8C" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x01\xDF" + "\x00\x31" + "\x01\x02" + "\x00\x00" + "\x00\x00\x06" + String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) + "\x00\x00\x00\x00\x00\x00" + (0, _util.string32)(ulUnicodeRange1) + (0, _util.string32)(ulUnicodeRange2) + (0, _util.string32)(ulUnicodeRange3) + (0, _util.string32)(ulUnicodeRange4) + "\x2A\x32\x31\x2A" + string16(properties.italicAngle ? 1 : 0) + string16(firstCharIndex || properties.firstChar) + string16(lastCharIndex || properties.lastChar) + string16(typoAscent) + string16(typoDescent) + "\x00\x64" + string16(winAscent) + string16(winDescent) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + string16(properties.xHeight) + string16(properties.capHeight) + string16(0) + string16(firstCharIndex || properties.firstChar) + "\x00\x03";
}
function createPostTable(properties) {
  const angle = Math.floor(properties.italicAngle * 2 ** 16);
  return "\x00\x03\x00\x00" + (0, _util.string32)(angle) + "\x00\x00" + "\x00\x00" + (0, _util.string32)(properties.fixedPitch ? 1 : 0) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00";
}
function createPostscriptName(name) {
  return name.replaceAll(/[^\x21-\x7E]|[[\](){}<>/%]/g, "").slice(0, 63);
}
function createNameTable(name, proto) {
  if (!proto) {
    proto = [[], []];
  }
  const strings = [proto[0][0] || "Original licence", proto[0][1] || name, proto[0][2] || "Unknown", proto[0][3] || "uniqueID", proto[0][4] || name, proto[0][5] || "Version 0.11", proto[0][6] || createPostscriptName(name), proto[0][7] || "Unknown", proto[0][8] || "Unknown", proto[0][9] || "Unknown"];
  const stringsUnicode = [];
  let i, ii, j, jj, str;
  for (i = 0, ii = strings.length; i < ii; i++) {
    str = proto[1][i] || strings[i];
    const strBufUnicode = [];
    for (j = 0, jj = str.length; j < jj; j++) {
      strBufUnicode.push(string16(str.charCodeAt(j)));
    }
    stringsUnicode.push(strBufUnicode.join(""));
  }
  const names = [strings, stringsUnicode];
  const platforms = ["\x00\x01", "\x00\x03"];
  const encodings = ["\x00\x00", "\x00\x01"];
  const languages = ["\x00\x00", "\x04\x09"];
  const namesRecordCount = strings.length * platforms.length;
  let nameTable = "\x00\x00" + string16(namesRecordCount) + string16(namesRecordCount * 12 + 6);
  let strOffset = 0;
  for (i = 0, ii = platforms.length; i < ii; i++) {
    const strs = names[i];
    for (j = 0, jj = strs.length; j < jj; j++) {
      str = strs[j];
      const nameRecord = platforms[i] + encodings[i] + languages[i] + string16(j) + string16(str.length) + string16(strOffset);
      nameTable += nameRecord;
      strOffset += str.length;
    }
  }
  nameTable += strings.join("") + stringsUnicode.join("");
  return nameTable;
}
class Font {
  constructor(name, file, properties) {
    this.name = name;
    this.psName = null;
    this.mimetype = null;
    this.disableFontFace = false;
    this.loadedName = properties.loadedName;
    this.isType3Font = properties.isType3Font;
    this.missingFile = false;
    this.cssFontInfo = properties.cssFontInfo;
    this._charsCache = Object.create(null);
    this._glyphCache = Object.create(null);
    let isSerifFont = !!(properties.flags & _fonts_utils.FontFlags.Serif);
    if (!isSerifFont && !properties.isSimulatedFlags) {
      const baseName = name.replaceAll(/[,_]/g, "-").split("-")[0],
        serifFonts = (0, _standard_fonts.getSerifFonts)();
      for (const namePart of baseName.split("+")) {
        if (serifFonts[namePart]) {
          isSerifFont = true;
          break;
        }
      }
    }
    this.isSerifFont = isSerifFont;
    this.isSymbolicFont = !!(properties.flags & _fonts_utils.FontFlags.Symbolic);
    this.isMonospace = !!(properties.flags & _fonts_utils.FontFlags.FixedPitch);
    let {
      type,
      subtype
    } = properties;
    this.type = type;
    this.subtype = subtype;
    this.systemFontInfo = properties.systemFontInfo;
    const matches = name.match(/^InvalidPDFjsFont_(.*)_\d+$/);
    this.isInvalidPDFjsFont = !!matches;
    if (this.isInvalidPDFjsFont) {
      this.fallbackName = matches[1];
    } else if (this.isMonospace) {
      this.fallbackName = "monospace";
    } else if (this.isSerifFont) {
      this.fallbackName = "serif";
    } else {
      this.fallbackName = "sans-serif";
    }
    if (this.systemFontInfo?.guessFallback) {
      this.systemFontInfo.guessFallback = false;
      this.systemFontInfo.css += `,${this.fallbackName}`;
    }
    this.differences = properties.differences;
    this.widths = properties.widths;
    this.defaultWidth = properties.defaultWidth;
    this.composite = properties.composite;
    this.cMap = properties.cMap;
    this.capHeight = properties.capHeight / PDF_GLYPH_SPACE_UNITS;
    this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS;
    this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS;
    this.lineHeight = this.ascent - this.descent;
    this.fontMatrix = properties.fontMatrix;
    this.bbox = properties.bbox;
    this.defaultEncoding = properties.defaultEncoding;
    this.toUnicode = properties.toUnicode;
    this.toFontChar = [];
    if (properties.type === "Type3") {
      for (let charCode = 0; charCode < 256; charCode++) {
        this.toFontChar[charCode] = this.differences[charCode] || properties.defaultEncoding[charCode];
      }
      return;
    }
    this.cidEncoding = properties.cidEncoding || "";
    this.vertical = !!properties.vertical;
    if (this.vertical) {
      this.vmetrics = properties.vmetrics;
      this.defaultVMetrics = properties.defaultVMetrics;
    }
    if (!file || file.isEmpty) {
      if (file) {
        (0, _util.warn)('Font file is empty in "' + name + '" (' + this.loadedName + ")");
      }
      this.fallbackToSystemFont(properties);
      return;
    }
    [type, subtype] = getFontFileType(file, properties);
    if (type !== this.type || subtype !== this.subtype) {
      (0, _util.info)("Inconsistent font file Type/SubType, expected: " + `${this.type}/${this.subtype} but found: ${type}/${subtype}.`);
    }
    let data;
    try {
      switch (type) {
        case "MMType1":
          (0, _util.info)("MMType1 font (" + name + "), falling back to Type1.");
        case "Type1":
        case "CIDFontType0":
          this.mimetype = "font/opentype";
          const cff = subtype === "Type1C" || subtype === "CIDFontType0C" ? new _cff_font.CFFFont(file, properties) : new _type1_font.Type1Font(name, file, properties);
          adjustWidths(properties);
          data = this.convert(name, cff, properties);
          break;
        case "OpenType":
        case "TrueType":
        case "CIDFontType2":
          this.mimetype = "font/opentype";
          data = this.checkAndRepair(name, file, properties);
          if (this.isOpenType) {
            adjustWidths(properties);
            type = "OpenType";
          }
          break;
        default:
          throw new _util.FormatError(`Font ${type} is not supported`);
      }
    } catch (e) {
      (0, _util.warn)(e);
      this.fallbackToSystemFont(properties);
      return;
    }
    amendFallbackToUnicode(properties);
    this.data = data;
    this.type = type;
    this.subtype = subtype;
    this.fontMatrix = properties.fontMatrix;
    this.widths = properties.widths;
    this.defaultWidth = properties.defaultWidth;
    this.toUnicode = properties.toUnicode;
    this.seacMap = properties.seacMap;
  }
  get renderer() {
    const renderer = _font_renderer.FontRendererFactory.create(this, _fonts_utils.SEAC_ANALYSIS_ENABLED);
    return (0, _util.shadow)(this, "renderer", renderer);
  }
  exportData(extraProperties = false) {
    const exportDataProperties = extraProperties ? [...EXPORT_DATA_PROPERTIES, ...EXPORT_DATA_EXTRA_PROPERTIES] : EXPORT_DATA_PROPERTIES;
    const data = Object.create(null);
    let property, value;
    for (property of exportDataProperties) {
      value = this[property];
      if (value !== undefined) {
        data[property] = value;
      }
    }
    return data;
  }
  fallbackToSystemFont(properties) {
    this.missingFile = true;
    const {
      name,
      type
    } = this;
    let fontName = (0, _fonts_utils.normalizeFontName)(name);
    const stdFontMap = (0, _standard_fonts.getStdFontMap)(),
      nonStdFontMap = (0, _standard_fonts.getNonStdFontMap)();
    const isStandardFont = !!stdFontMap[fontName];
    const isMappedToStandardFont = !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]);
    fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName;
    const fontBasicMetricsMap = (0, _metrics.getFontBasicMetrics)();
    const metrics = fontBasicMetricsMap[fontName];
    if (metrics) {
      if (isNaN(this.ascent)) {
        this.ascent = metrics.ascent / PDF_GLYPH_SPACE_UNITS;
      }
      if (isNaN(this.descent)) {
        this.descent = metrics.descent / PDF_GLYPH_SPACE_UNITS;
      }
      if (isNaN(this.capHeight)) {
        this.capHeight = metrics.capHeight / PDF_GLYPH_SPACE_UNITS;
      }
    }
    this.bold = /bold/gi.test(fontName);
    this.italic = /oblique|italic/gi.test(fontName);
    this.black = /Black/g.test(name);
    const isNarrow = /Narrow/g.test(name);
    this.remeasure = (!isStandardFont || isNarrow) && Object.keys(this.widths).length > 0;
    if ((isStandardFont || isMappedToStandardFont) && type === "CIDFontType2" && this.cidEncoding.startsWith("Identity-")) {
      const cidToGidMap = properties.cidToGidMap;
      const map = [];
      applyStandardFontGlyphMap(map, (0, _standard_fonts.getGlyphMapForStandardFonts)());
      if (/Arial-?Black/i.test(name)) {
        applyStandardFontGlyphMap(map, (0, _standard_fonts.getSupplementalGlyphMapForArialBlack)());
      } else if (/Calibri/i.test(name)) {
        applyStandardFontGlyphMap(map, (0, _standard_fonts.getSupplementalGlyphMapForCalibri)());
      }
      if (cidToGidMap) {
        for (const charCode in map) {
          const cid = map[charCode];
          if (cidToGidMap[cid] !== undefined) {
            map[+charCode] = cidToGidMap[cid];
          }
        }
        if (cidToGidMap.length !== this.toUnicode.length && properties.hasIncludedToUnicodeMap && this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) {
          this.toUnicode.forEach(function (charCode, unicodeCharCode) {
            const cid = map[charCode];
            if (cidToGidMap[cid] === undefined) {
              map[+charCode] = unicodeCharCode;
            }
          });
        }
      }
      if (!(this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap)) {
        this.toUnicode.forEach(function (charCode, unicodeCharCode) {
          map[+charCode] = unicodeCharCode;
        });
      }
      this.toFontChar = map;
      this.toUnicode = new _to_unicode_map.ToUnicodeMap(map);
    } else if (/Symbol/i.test(fontName)) {
      this.toFontChar = buildToFontChar(_encodings.SymbolSetEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences);
    } else if (/Dingbats/i.test(fontName)) {
      this.toFontChar = buildToFontChar(_encodings.ZapfDingbatsEncoding, (0, _glyphlist.getDingbatsGlyphsUnicode)(), this.differences);
    } else if (isStandardFont) {
      const map = buildToFontChar(this.defaultEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences);
      if (type === "CIDFontType2" && !this.cidEncoding.startsWith("Identity-") && !(this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap)) {
        this.toUnicode.forEach(function (charCode, unicodeCharCode) {
          map[+charCode] = unicodeCharCode;
        });
      }
      this.toFontChar = map;
    } else {
      const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
      const map = [];
      this.toUnicode.forEach((charCode, unicodeCharCode) => {
        if (!this.composite) {
          const glyphName = this.differences[charCode] || this.defaultEncoding[charCode];
          const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);
          if (unicode !== -1) {
            unicodeCharCode = unicode;
          }
        }
        map[+charCode] = unicodeCharCode;
      });
      if (this.composite && this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) {
        if (/Tahoma|Verdana/i.test(name)) {
          applyStandardFontGlyphMap(map, (0, _standard_fonts.getGlyphMapForStandardFonts)());
        }
      }
      this.toFontChar = map;
    }
    amendFallbackToUnicode(properties);
    this.loadedName = fontName.split("-")[0];
  }
  checkAndRepair(name, font, properties) {
    const VALID_TABLES = ["OS/2", "cmap", "head", "hhea", "hmtx", "maxp", "name", "post", "loca", "glyf", "fpgm", "prep", "cvt ", "CFF "];
    function readTables(file, numTables) {
      const tables = Object.create(null);
      tables["OS/2"] = null;
      tables.cmap = null;
      tables.head = null;
      tables.hhea = null;
      tables.hmtx = null;
      tables.maxp = null;
      tables.name = null;
      tables.post = null;
      for (let i = 0; i < numTables; i++) {
        const table = readTableEntry(file);
        if (!VALID_TABLES.includes(table.tag)) {
          continue;
        }
        if (table.length === 0) {
          continue;
        }
        tables[table.tag] = table;
      }
      return tables;
    }
    function readTableEntry(file) {
      const tag = file.getString(4);
      const checksum = file.getInt32() >>> 0;
      const offset = file.getInt32() >>> 0;
      const length = file.getInt32() >>> 0;
      const previousPosition = file.pos;
      file.pos = file.start || 0;
      file.skip(offset);
      const data = file.getBytes(length);
      file.pos = previousPosition;
      if (tag === "head") {
        data[8] = data[9] = data[10] = data[11] = 0;
        data[17] |= 0x20;
      }
      return {
        tag,
        checksum,
        length,
        offset,
        data
      };
    }
    function readOpenTypeHeader(ttf) {
      return {
        version: ttf.getString(4),
        numTables: ttf.getUint16(),
        searchRange: ttf.getUint16(),
        entrySelector: ttf.getUint16(),
        rangeShift: ttf.getUint16()
      };
    }
    function readTrueTypeCollectionHeader(ttc) {
      const ttcTag = ttc.getString(4);
      (0, _util.assert)(ttcTag === "ttcf", "Must be a TrueType Collection font.");
      const majorVersion = ttc.getUint16();
      const minorVersion = ttc.getUint16();
      const numFonts = ttc.getInt32() >>> 0;
      const offsetTable = [];
      for (let i = 0; i < numFonts; i++) {
        offsetTable.push(ttc.getInt32() >>> 0);
      }
      const header = {
        ttcTag,
        majorVersion,
        minorVersion,
        numFonts,
        offsetTable
      };
      switch (majorVersion) {
        case 1:
          return header;
        case 2:
          header.dsigTag = ttc.getInt32() >>> 0;
          header.dsigLength = ttc.getInt32() >>> 0;
          header.dsigOffset = ttc.getInt32() >>> 0;
          return header;
      }
      throw new _util.FormatError(`Invalid TrueType Collection majorVersion: ${majorVersion}.`);
    }
    function readTrueTypeCollectionData(ttc, fontName) {
      const {
        numFonts,
        offsetTable
      } = readTrueTypeCollectionHeader(ttc);
      const fontNameParts = fontName.split("+");
      let fallbackData;
      for (let i = 0; i < numFonts; i++) {
        ttc.pos = (ttc.start || 0) + offsetTable[i];
        const potentialHeader = readOpenTypeHeader(ttc);
        const potentialTables = readTables(ttc, potentialHeader.numTables);
        if (!potentialTables.name) {
          throw new _util.FormatError('TrueType Collection font must contain a "name" table.');
        }
        const [nameTable] = readNameTable(potentialTables.name);
        for (let j = 0, jj = nameTable.length; j < jj; j++) {
          for (let k = 0, kk = nameTable[j].length; k < kk; k++) {
            const nameEntry = nameTable[j][k]?.replaceAll(/\s/g, "");
            if (!nameEntry) {
              continue;
            }
            if (nameEntry === fontName) {
              return {
                header: potentialHeader,
                tables: potentialTables
              };
            }
            if (fontNameParts.length < 2) {
              continue;
            }
            for (const part of fontNameParts) {
              if (nameEntry === part) {
                fallbackData = {
                  name: part,
                  header: potentialHeader,
                  tables: potentialTables
                };
              }
            }
          }
        }
      }
      if (fallbackData) {
        (0, _util.warn)(`TrueType Collection does not contain "${fontName}" font, ` + `falling back to "${fallbackData.name}" font instead.`);
        return {
          header: fallbackData.header,
          tables: fallbackData.tables
        };
      }
      throw new _util.FormatError(`TrueType Collection does not contain "${fontName}" font.`);
    }
    function readCmapTable(cmap, file, isSymbolicFont, hasEncoding) {
      if (!cmap) {
        (0, _util.warn)("No cmap table available.");
        return {
          platformId: -1,
          encodingId: -1,
          mappings: [],
          hasShortCmap: false
        };
      }
      let segment;
      let start = (file.start || 0) + cmap.offset;
      file.pos = start;
      file.skip(2);
      const numTables = file.getUint16();
      let potentialTable;
      let canBreak = false;
      for (let i = 0; i < numTables; i++) {
        const platformId = file.getUint16();
        const encodingId = file.getUint16();
        const offset = file.getInt32() >>> 0;
        let useTable = false;
        if (potentialTable?.platformId === platformId && potentialTable?.encodingId === encodingId) {
          continue;
        }
        if (platformId === 0 && (encodingId === 0 || encodingId === 1 || encodingId === 3)) {
          useTable = true;
        } else if (platformId === 1 && encodingId === 0) {
          useTable = true;
        } else if (platformId === 3 && encodingId === 1 && (hasEncoding || !potentialTable)) {
          useTable = true;
          if (!isSymbolicFont) {
            canBreak = true;
          }
        } else if (isSymbolicFont && platformId === 3 && encodingId === 0) {
          useTable = true;
          let correctlySorted = true;
          if (i < numTables - 1) {
            const nextBytes = file.peekBytes(2),
              nextPlatformId = int16(nextBytes[0], nextBytes[1]);
            if (nextPlatformId < platformId) {
              correctlySorted = false;
            }
          }
          if (correctlySorted) {
            canBreak = true;
          }
        }
        if (useTable) {
          potentialTable = {
            platformId,
            encodingId,
            offset
          };
        }
        if (canBreak) {
          break;
        }
      }
      if (potentialTable) {
        file.pos = start + potentialTable.offset;
      }
      if (!potentialTable || file.peekByte() === -1) {
        (0, _util.warn)("Could not find a preferred cmap table.");
        return {
          platformId: -1,
          encodingId: -1,
          mappings: [],
          hasShortCmap: false
        };
      }
      const format = file.getUint16();
      let hasShortCmap = false;
      const mappings = [];
      let j, glyphId;
      if (format === 0) {
        file.skip(2 + 2);
        for (j = 0; j < 256; j++) {
          const index = file.getByte();
          if (!index) {
            continue;
          }
          mappings.push({
            charCode: j,
            glyphId: index
          });
        }
        hasShortCmap = true;
      } else if (format === 2) {
        file.skip(2 + 2);
        const subHeaderKeys = [];
        let maxSubHeaderKey = 0;
        for (let i = 0; i < 256; i++) {
          const subHeaderKey = file.getUint16() >> 3;
          subHeaderKeys.push(subHeaderKey);
          maxSubHeaderKey = Math.max(subHeaderKey, maxSubHeaderKey);
        }
        const subHeaders = [];
        for (let i = 0; i <= maxSubHeaderKey; i++) {
          subHeaders.push({
            firstCode: file.getUint16(),
            entryCount: file.getUint16(),
            idDelta: signedInt16(file.getByte(), file.getByte()),
            idRangePos: file.pos + file.getUint16()
          });
        }
        for (let i = 0; i < 256; i++) {
          if (subHeaderKeys[i] === 0) {
            file.pos = subHeaders[0].idRangePos + 2 * i;
            glyphId = file.getUint16();
            mappings.push({
              charCode: i,
              glyphId
            });
          } else {
            const s = subHeaders[subHeaderKeys[i]];
            for (j = 0; j < s.entryCount; j++) {
              const charCode = (i << 8) + j + s.firstCode;
              file.pos = s.idRangePos + 2 * j;
              glyphId = file.getUint16();
              if (glyphId !== 0) {
                glyphId = (glyphId + s.idDelta) % 65536;
              }
              mappings.push({
                charCode,
                glyphId
              });
            }
          }
        }
      } else if (format === 4) {
        file.skip(2 + 2);
        const segCount = file.getUint16() >> 1;
        file.skip(6);
        const segments = [];
        let segIndex;
        for (segIndex = 0; segIndex < segCount; segIndex++) {
          segments.push({
            end: file.getUint16()
          });
        }
        file.skip(2);
        for (segIndex = 0; segIndex < segCount; segIndex++) {
          segments[segIndex].start = file.getUint16();
        }
        for (segIndex = 0; segIndex < segCount; segIndex++) {
          segments[segIndex].delta = file.getUint16();
        }
        let offsetsCount = 0,
          offsetIndex;
        for (segIndex = 0; segIndex < segCount; segIndex++) {
          segment = segments[segIndex];
          const rangeOffset = file.getUint16();
          if (!rangeOffset) {
            segment.offsetIndex = -1;
            continue;
          }
          offsetIndex = (rangeOffset >> 1) - (segCount - segIndex);
          segment.offsetIndex = offsetIndex;
          offsetsCount = Math.max(offsetsCount, offsetIndex + segment.end - segment.start + 1);
        }
        const offsets = [];
        for (j = 0; j < offsetsCount; j++) {
          offsets.push(file.getUint16());
        }
        for (segIndex = 0; segIndex < segCount; segIndex++) {
          segment = segments[segIndex];
          start = segment.start;
          const end = segment.end;
          const delta = segment.delta;
          offsetIndex = segment.offsetIndex;
          for (j = start; j <= end; j++) {
            if (j === 0xffff) {
              continue;
            }
            glyphId = offsetIndex < 0 ? j : offsets[offsetIndex + j - start];
            glyphId = glyphId + delta & 0xffff;
            mappings.push({
              charCode: j,
              glyphId
            });
          }
        }
      } else if (format === 6) {
        file.skip(2 + 2);
        const firstCode = file.getUint16();
        const entryCount = file.getUint16();
        for (j = 0; j < entryCount; j++) {
          glyphId = file.getUint16();
          const charCode = firstCode + j;
          mappings.push({
            charCode,
            glyphId
          });
        }
      } else if (format === 12) {
        file.skip(2 + 4 + 4);
        const nGroups = file.getInt32() >>> 0;
        for (j = 0; j < nGroups; j++) {
          const startCharCode = file.getInt32() >>> 0;
          const endCharCode = file.getInt32() >>> 0;
          let glyphCode = file.getInt32() >>> 0;
          for (let charCode = startCharCode; charCode <= endCharCode; charCode++) {
            mappings.push({
              charCode,
              glyphId: glyphCode++
            });
          }
        }
      } else {
        (0, _util.warn)("cmap table has unsupported format: " + format);
        return {
          platformId: -1,
          encodingId: -1,
          mappings: [],
          hasShortCmap: false
        };
      }
      mappings.sort(function (a, b) {
        return a.charCode - b.charCode;
      });
      for (let i = 1; i < mappings.length; i++) {
        if (mappings[i - 1].charCode === mappings[i].charCode) {
          mappings.splice(i, 1);
          i--;
        }
      }
      return {
        platformId: potentialTable.platformId,
        encodingId: potentialTable.encodingId,
        mappings,
        hasShortCmap
      };
    }
    function sanitizeMetrics(file, header, metrics, headTable, numGlyphs, dupFirstEntry) {
      if (!header) {
        if (metrics) {
          metrics.data = null;
        }
        return;
      }
      file.pos = (file.start || 0) + header.offset;
      file.pos += 4;
      file.pos += 2;
      file.pos += 2;
      file.pos += 2;
      file.pos += 2;
      file.pos += 2;
      file.pos += 2;
      file.pos += 2;
      file.pos += 2;
      file.pos += 2;
      const caretOffset = file.getUint16();
      file.pos += 8;
      file.pos += 2;
      let numOfMetrics = file.getUint16();
      if (caretOffset !== 0) {
        const macStyle = int16(headTable.data[44], headTable.data[45]);
        if (!(macStyle & 2)) {
          header.data[22] = 0;
          header.data[23] = 0;
        }
      }
      if (numOfMetrics > numGlyphs) {
        (0, _util.info)(`The numOfMetrics (${numOfMetrics}) should not be ` + `greater than the numGlyphs (${numGlyphs}).`);
        numOfMetrics = numGlyphs;
        header.data[34] = (numOfMetrics & 0xff00) >> 8;
        header.data[35] = numOfMetrics & 0x00ff;
      }
      const numOfSidebearings = numGlyphs - numOfMetrics;
      const numMissing = numOfSidebearings - (metrics.length - numOfMetrics * 4 >> 1);
      if (numMissing > 0) {
        const entries = new Uint8Array(metrics.length + numMissing * 2);
        entries.set(metrics.data);
        if (dupFirstEntry) {
          entries[metrics.length] = metrics.data[2];
          entries[metrics.length + 1] = metrics.data[3];
        }
        metrics.data = entries;
      }
    }
    function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, hintsValid) {
      const glyphProfile = {
        length: 0,
        sizeOfInstructions: 0
      };
      if (sourceStart < 0 || sourceStart >= source.length || sourceEnd > source.length || sourceEnd - sourceStart <= 12) {
        return glyphProfile;
      }
      const glyf = source.subarray(sourceStart, sourceEnd);
      const xMin = signedInt16(glyf[2], glyf[3]);
      const yMin = signedInt16(glyf[4], glyf[5]);
      const xMax = signedInt16(glyf[6], glyf[7]);
      const yMax = signedInt16(glyf[8], glyf[9]);
      if (xMin > xMax) {
        writeSignedInt16(glyf, 2, xMax);
        writeSignedInt16(glyf, 6, xMin);
      }
      if (yMin > yMax) {
        writeSignedInt16(glyf, 4, yMax);
        writeSignedInt16(glyf, 8, yMin);
      }
      const contoursCount = signedInt16(glyf[0], glyf[1]);
      if (contoursCount < 0) {
        if (contoursCount < -1) {
          return glyphProfile;
        }
        dest.set(glyf, destStart);
        glyphProfile.length = glyf.length;
        return glyphProfile;
      }
      let i,
        j = 10,
        flagsCount = 0;
      for (i = 0; i < contoursCount; i++) {
        const endPoint = glyf[j] << 8 | glyf[j + 1];
        flagsCount = endPoint + 1;
        j += 2;
      }
      const instructionsStart = j;
      const instructionsLength = glyf[j] << 8 | glyf[j + 1];
      glyphProfile.sizeOfInstructions = instructionsLength;
      j += 2 + instructionsLength;
      const instructionsEnd = j;
      let coordinatesLength = 0;
      for (i = 0; i < flagsCount; i++) {
        const flag = glyf[j++];
        if (flag & 0xc0) {
          glyf[j - 1] = flag & 0x3f;
        }
        let xLength = 2;
        if (flag & 2) {
          xLength = 1;
        } else if (flag & 16) {
          xLength = 0;
        }
        let yLength = 2;
        if (flag & 4) {
          yLength = 1;
        } else if (flag & 32) {
          yLength = 0;
        }
        const xyLength = xLength + yLength;
        coordinatesLength += xyLength;
        if (flag & 8) {
          const repeat = glyf[j++];
          if (repeat === 0) {
            glyf[j - 1] ^= 8;
          }
          i += repeat;
          coordinatesLength += repeat * xyLength;
        }
      }
      if (coordinatesLength === 0) {
        return glyphProfile;
      }
      let glyphDataLength = j + coordinatesLength;
      if (glyphDataLength > glyf.length) {
        return glyphProfile;
      }
      if (!hintsValid && instructionsLength > 0) {
        dest.set(glyf.subarray(0, instructionsStart), destStart);
        dest.set([0, 0], destStart + instructionsStart);
        dest.set(glyf.subarray(instructionsEnd, glyphDataLength), destStart + instructionsStart + 2);
        glyphDataLength -= instructionsLength;
        if (glyf.length - glyphDataLength > 3) {
          glyphDataLength = glyphDataLength + 3 & ~3;
        }
        glyphProfile.length = glyphDataLength;
        return glyphProfile;
      }
      if (glyf.length - glyphDataLength > 3) {
        glyphDataLength = glyphDataLength + 3 & ~3;
        dest.set(glyf.subarray(0, glyphDataLength), destStart);
        glyphProfile.length = glyphDataLength;
        return glyphProfile;
      }
      dest.set(glyf, destStart);
      glyphProfile.length = glyf.length;
      return glyphProfile;
    }
    function sanitizeHead(head, numGlyphs, locaLength) {
      const data = head.data;
      const version = int32(data[0], data[1], data[2], data[3]);
      if (version >> 16 !== 1) {
        (0, _util.info)("Attempting to fix invalid version in head table: " + version);
        data[0] = 0;
        data[1] = 1;
        data[2] = 0;
        data[3] = 0;
      }
      const indexToLocFormat = int16(data[50], data[51]);
      if (indexToLocFormat < 0 || indexToLocFormat > 1) {
        (0, _util.info)("Attempting to fix invalid indexToLocFormat in head table: " + indexToLocFormat);
        const numGlyphsPlusOne = numGlyphs + 1;
        if (locaLength === numGlyphsPlusOne << 1) {
          data[50] = 0;
          data[51] = 0;
        } else if (locaLength === numGlyphsPlusOne << 2) {
          data[50] = 0;
          data[51] = 1;
        } else {
          throw new _util.FormatError("Could not fix indexToLocFormat: " + indexToLocFormat);
        }
      }
    }
    function sanitizeGlyphLocations(loca, glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions) {
      let itemSize, itemDecode, itemEncode;
      if (isGlyphLocationsLong) {
        itemSize = 4;
        itemDecode = function fontItemDecodeLong(data, offset) {
          return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];
        };
        itemEncode = function fontItemEncodeLong(data, offset, value) {
          data[offset] = value >>> 24 & 0xff;
          data[offset + 1] = value >> 16 & 0xff;
          data[offset + 2] = value >> 8 & 0xff;
          data[offset + 3] = value & 0xff;
        };
      } else {
        itemSize = 2;
        itemDecode = function fontItemDecode(data, offset) {
          return data[offset] << 9 | data[offset + 1] << 1;
        };
        itemEncode = function fontItemEncode(data, offset, value) {
          data[offset] = value >> 9 & 0xff;
          data[offset + 1] = value >> 1 & 0xff;
        };
      }
      const numGlyphsOut = dupFirstEntry ? numGlyphs + 1 : numGlyphs;
      const locaDataSize = itemSize * (1 + numGlyphsOut);
      const locaData = new Uint8Array(locaDataSize);
      locaData.set(loca.data.subarray(0, locaDataSize));
      loca.data = locaData;
      const oldGlyfData = glyf.data;
      const oldGlyfDataLength = oldGlyfData.length;
      const newGlyfData = new Uint8Array(oldGlyfDataLength);
      let i, j;
      const locaEntries = [];
      for (i = 0, j = 0; i < numGlyphs + 1; i++, j += itemSize) {
        let offset = itemDecode(locaData, j);
        if (offset > oldGlyfDataLength) {
          offset = oldGlyfDataLength;
        }
        locaEntries.push({
          index: i,
          offset,
          endOffset: 0
        });
      }
      locaEntries.sort((a, b) => {
        return a.offset - b.offset;
      });
      for (i = 0; i < numGlyphs; i++) {
        locaEntries[i].endOffset = locaEntries[i + 1].offset;
      }
      locaEntries.sort((a, b) => {
        return a.index - b.index;
      });
      for (i = 0; i < numGlyphs; i++) {
        const {
          offset,
          endOffset
        } = locaEntries[i];
        if (offset !== 0 || endOffset !== 0) {
          break;
        }
        const nextOffset = locaEntries[i + 1].offset;
        if (nextOffset === 0) {
          continue;
        }
        locaEntries[i].endOffset = nextOffset;
        break;
      }
      const missingGlyphs = Object.create(null);
      let writeOffset = 0;
      itemEncode(locaData, 0, writeOffset);
      for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) {
        const glyphProfile = sanitizeGlyph(oldGlyfData, locaEntries[i].offset, locaEntries[i].endOffset, newGlyfData, writeOffset, hintsValid);
        const newLength = glyphProfile.length;
        if (newLength === 0) {
          missingGlyphs[i] = true;
        }
        if (glyphProfile.sizeOfInstructions > maxSizeOfInstructions) {
          maxSizeOfInstructions = glyphProfile.sizeOfInstructions;
        }
        writeOffset += newLength;
        itemEncode(locaData, j, writeOffset);
      }
      if (writeOffset === 0) {
        const simpleGlyph = new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]);
        for (i = 0, j = itemSize; i < numGlyphsOut; i++, j += itemSize) {
          itemEncode(locaData, j, simpleGlyph.length);
        }
        glyf.data = simpleGlyph;
      } else if (dupFirstEntry) {
        const firstEntryLength = itemDecode(locaData, itemSize);
        if (newGlyfData.length > firstEntryLength + writeOffset) {
          glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset);
        } else {
          glyf.data = new Uint8Array(firstEntryLength + writeOffset);
          glyf.data.set(newGlyfData.subarray(0, writeOffset));
        }
        glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset);
        itemEncode(loca.data, locaData.length - itemSize, writeOffset + firstEntryLength);
      } else {
        glyf.data = newGlyfData.subarray(0, writeOffset);
      }
      return {
        missingGlyphs,
        maxSizeOfInstructions
      };
    }
    function readPostScriptTable(post, propertiesObj, maxpNumGlyphs) {
      const start = (font.start || 0) + post.offset;
      font.pos = start;
      const length = post.length,
        end = start + length;
      const version = font.getInt32();
      font.skip(28);
      let glyphNames;
      let valid = true;
      let i;
      switch (version) {
        case 0x00010000:
          glyphNames = _fonts_utils.MacStandardGlyphOrdering;
          break;
        case 0x00020000:
          const numGlyphs = font.getUint16();
          if (numGlyphs !== maxpNumGlyphs) {
            valid = false;
            break;
          }
          const glyphNameIndexes = [];
          for (i = 0; i < numGlyphs; ++i) {
            const index = font.getUint16();
            if (index >= 32768) {
              valid = false;
              break;
            }
            glyphNameIndexes.push(index);
          }
          if (!valid) {
            break;
          }
          const customNames = [],
            strBuf = [];
          while (font.pos < end) {
            const stringLength = font.getByte();
            strBuf.length = stringLength;
            for (i = 0; i < stringLength; ++i) {
              strBuf[i] = String.fromCharCode(font.getByte());
            }
            customNames.push(strBuf.join(""));
          }
          glyphNames = [];
          for (i = 0; i < numGlyphs; ++i) {
            const j = glyphNameIndexes[i];
            if (j < 258) {
              glyphNames.push(_fonts_utils.MacStandardGlyphOrdering[j]);
              continue;
            }
            glyphNames.push(customNames[j - 258]);
          }
          break;
        case 0x00030000:
          break;
        default:
          (0, _util.warn)("Unknown/unsupported post table version " + version);
          valid = false;
          if (propertiesObj.defaultEncoding) {
            glyphNames = propertiesObj.defaultEncoding;
          }
          break;
      }
      propertiesObj.glyphNames = glyphNames;
      return valid;
    }
    function readNameTable(nameTable) {
      const start = (font.start || 0) + nameTable.offset;
      font.pos = start;
      const names = [[], []],
        records = [];
      const length = nameTable.length,
        end = start + length;
      const format = font.getUint16();
      const FORMAT_0_HEADER_LENGTH = 6;
      if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) {
        return [names, records];
      }
      const numRecords = font.getUint16();
      const stringsStart = font.getUint16();
      const NAME_RECORD_LENGTH = 12;
      let i, ii;
      for (i = 0; i < numRecords && font.pos + NAME_RECORD_LENGTH <= end; i++) {
        const r = {
          platform: font.getUint16(),
          encoding: font.getUint16(),
          language: font.getUint16(),
          name: font.getUint16(),
          length: font.getUint16(),
          offset: font.getUint16()
        };
        if (isMacNameRecord(r) || isWinNameRecord(r)) {
          records.push(r);
        }
      }
      for (i = 0, ii = records.length; i < ii; i++) {
        const record = records[i];
        if (record.length <= 0) {
          continue;
        }
        const pos = start + stringsStart + record.offset;
        if (pos + record.length > end) {
          continue;
        }
        font.pos = pos;
        const nameIndex = record.name;
        if (record.encoding) {
          let str = "";
          for (let j = 0, jj = record.length; j < jj; j += 2) {
            str += String.fromCharCode(font.getUint16());
          }
          names[1][nameIndex] = str;
        } else {
          names[0][nameIndex] = font.getString(record.length);
        }
      }
      return [names, records];
    }
    const TTOpsStackDeltas = [0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, 1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1, 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2, 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2];
    function sanitizeTTProgram(table, ttContext) {
      let data = table.data;
      let i = 0,
        j,
        n,
        b,
        funcId,
        pc,
        lastEndf = 0,
        lastDeff = 0;
      const stack = [];
      const callstack = [];
      const functionsCalled = [];
      let tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions;
      let inFDEF = false,
        ifLevel = 0,
        inELSE = 0;
      for (let ii = data.length; i < ii;) {
        const op = data[i++];
        if (op === 0x40) {
          n = data[i++];
          if (inFDEF || inELSE) {
            i += n;
          } else {
            for (j = 0; j < n; j++) {
              stack.push(data[i++]);
            }
          }
        } else if (op === 0x41) {
          n = data[i++];
          if (inFDEF || inELSE) {
            i += n * 2;
          } else {
            for (j = 0; j < n; j++) {
              b = data[i++];
              stack.push(b << 8 | data[i++]);
            }
          }
        } else if ((op & 0xf8) === 0xb0) {
          n = op - 0xb0 + 1;
          if (inFDEF || inELSE) {
            i += n;
          } else {
            for (j = 0; j < n; j++) {
              stack.push(data[i++]);
            }
          }
        } else if ((op & 0xf8) === 0xb8) {
          n = op - 0xb8 + 1;
          if (inFDEF || inELSE) {
            i += n * 2;
          } else {
            for (j = 0; j < n; j++) {
              b = data[i++];
              stack.push(b << 8 | data[i++]);
            }
          }
        } else if (op === 0x2b && !tooComplexToFollowFunctions) {
          if (!inFDEF && !inELSE) {
            funcId = stack.at(-1);
            if (isNaN(funcId)) {
              (0, _util.info)("TT: CALL empty stack (or invalid entry).");
            } else {
              ttContext.functionsUsed[funcId] = true;
              if (funcId in ttContext.functionsStackDeltas) {
                const newStackLength = stack.length + ttContext.functionsStackDeltas[funcId];
                if (newStackLength < 0) {
                  (0, _util.warn)("TT: CALL invalid functions stack delta.");
                  ttContext.hintsValid = false;
                  return;
                }
                stack.length = newStackLength;
              } else if (funcId in ttContext.functionsDefined && !functionsCalled.includes(funcId)) {
                callstack.push({
                  data,
                  i,
                  stackTop: stack.length - 1
                });
                functionsCalled.push(funcId);
                pc = ttContext.functionsDefined[funcId];
                if (!pc) {
                  (0, _util.warn)("TT: CALL non-existent function");
                  ttContext.hintsValid = false;
                  return;
                }
                data = pc.data;
                i = pc.i;
              }
            }
          }
        } else if (op === 0x2c && !tooComplexToFollowFunctions) {
          if (inFDEF || inELSE) {
            (0, _util.warn)("TT: nested FDEFs not allowed");
            tooComplexToFollowFunctions = true;
          }
          inFDEF = true;
          lastDeff = i;
          funcId = stack.pop();
          ttContext.functionsDefined[funcId] = {
            data,
            i
          };
        } else if (op === 0x2d) {
          if (inFDEF) {
            inFDEF = false;
            lastEndf = i;
          } else {
            pc = callstack.pop();
            if (!pc) {
              (0, _util.warn)("TT: ENDF bad stack");
              ttContext.hintsValid = false;
              return;
            }
            funcId = functionsCalled.pop();
            data = pc.data;
            i = pc.i;
            ttContext.functionsStackDeltas[funcId] = stack.length - pc.stackTop;
          }
        } else if (op === 0x89) {
          if (inFDEF || inELSE) {
            (0, _util.warn)("TT: nested IDEFs not allowed");
            tooComplexToFollowFunctions = true;
          }
          inFDEF = true;
          lastDeff = i;
        } else if (op === 0x58) {
          ++ifLevel;
        } else if (op === 0x1b) {
          inELSE = ifLevel;
        } else if (op === 0x59) {
          if (inELSE === ifLevel) {
            inELSE = 0;
          }
          --ifLevel;
        } else if (op === 0x1c) {
          if (!inFDEF && !inELSE) {
            const offset = stack.at(-1);
            if (offset > 0) {
              i += offset - 1;
            }
          }
        }
        if (!inFDEF && !inELSE) {
          let stackDelta = 0;
          if (op <= 0x8e) {
            stackDelta = TTOpsStackDeltas[op];
          } else if (op >= 0xc0 && op <= 0xdf) {
            stackDelta = -1;
          } else if (op >= 0xe0) {
            stackDelta = -2;
          }
          if (op >= 0x71 && op <= 0x75) {
            n = stack.pop();
            if (!isNaN(n)) {
              stackDelta = -n * 2;
            }
          }
          while (stackDelta < 0 && stack.length > 0) {
            stack.pop();
            stackDelta++;
          }
          while (stackDelta > 0) {
            stack.push(NaN);
            stackDelta--;
          }
        }
      }
      ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions;
      const content = [data];
      if (i > data.length) {
        content.push(new Uint8Array(i - data.length));
      }
      if (lastDeff > lastEndf) {
        (0, _util.warn)("TT: complementing a missing function tail");
        content.push(new Uint8Array([0x22, 0x2d]));
      }
      foldTTTable(table, content);
    }
    function checkInvalidFunctions(ttContext, maxFunctionDefs) {
      if (ttContext.tooComplexToFollowFunctions) {
        return;
      }
      if (ttContext.functionsDefined.length > maxFunctionDefs) {
        (0, _util.warn)("TT: more functions defined than expected");
        ttContext.hintsValid = false;
        return;
      }
      for (let j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) {
        if (j > maxFunctionDefs) {
          (0, _util.warn)("TT: invalid function id: " + j);
          ttContext.hintsValid = false;
          return;
        }
        if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) {
          (0, _util.warn)("TT: undefined function: " + j);
          ttContext.hintsValid = false;
          return;
        }
      }
    }
    function foldTTTable(table, content) {
      if (content.length > 1) {
        let newLength = 0;
        let j, jj;
        for (j = 0, jj = content.length; j < jj; j++) {
          newLength += content[j].length;
        }
        newLength = newLength + 3 & ~3;
        const result = new Uint8Array(newLength);
        let pos = 0;
        for (j = 0, jj = content.length; j < jj; j++) {
          result.set(content[j], pos);
          pos += content[j].length;
        }
        table.data = result;
        table.length = newLength;
      }
    }
    function sanitizeTTPrograms(fpgm, prep, cvt, maxFunctionDefs) {
      const ttContext = {
        functionsDefined: [],
        functionsUsed: [],
        functionsStackDeltas: [],
        tooComplexToFollowFunctions: false,
        hintsValid: true
      };
      if (fpgm) {
        sanitizeTTProgram(fpgm, ttContext);
      }
      if (prep) {
        sanitizeTTProgram(prep, ttContext);
      }
      if (fpgm) {
        checkInvalidFunctions(ttContext, maxFunctionDefs);
      }
      if (cvt && cvt.length & 1) {
        const cvtData = new Uint8Array(cvt.length + 1);
        cvtData.set(cvt.data);
        cvt.data = cvtData;
      }
      return ttContext.hintsValid;
    }
    font = new _stream.Stream(new Uint8Array(font.getBytes()));
    let header, tables;
    if (isTrueTypeCollectionFile(font)) {
      const ttcData = readTrueTypeCollectionData(font, this.name);
      header = ttcData.header;
      tables = ttcData.tables;
    } else {
      header = readOpenTypeHeader(font);
      tables = readTables(font, header.numTables);
    }
    let cff, cffFile;
    const isTrueType = !tables["CFF "];
    if (!isTrueType) {
      const isComposite = properties.composite && (properties.cidToGidMap?.length > 0 || !(properties.cMap instanceof _cmap.IdentityCMap));
      if (header.version === "OTTO" && !isComposite || !tables.head || !tables.hhea || !tables.maxp || !tables.post) {
        cffFile = new _stream.Stream(tables["CFF "].data);
        cff = new _cff_font.CFFFont(cffFile, properties);
        adjustWidths(properties);
        return this.convert(name, cff, properties);
      }
      delete tables.glyf;
      delete tables.loca;
      delete tables.fpgm;
      delete tables.prep;
      delete tables["cvt "];
      this.isOpenType = true;
    } else {
      if (!tables.loca) {
        throw new _util.FormatError('Required "loca" table is not found');
      }
      if (!tables.glyf) {
        (0, _util.warn)('Required "glyf" table is not found -- trying to recover.');
        tables.glyf = {
          tag: "glyf",
          data: new Uint8Array(0)
        };
      }
      this.isOpenType = false;
    }
    if (!tables.maxp) {
      throw new _util.FormatError('Required "maxp" table is not found');
    }
    font.pos = (font.start || 0) + tables.maxp.offset;
    const version = font.getInt32();
    const numGlyphs = font.getUint16();
    if (properties.scaleFactors?.length === numGlyphs && isTrueType) {
      const {
        scaleFactors
      } = properties;
      const isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]);
      const glyphs = new _glyf.GlyfTable({
        glyfTable: tables.glyf.data,
        isGlyphLocationsLong,
        locaTable: tables.loca.data,
        numGlyphs
      });
      glyphs.scale(scaleFactors);
      const {
        glyf,
        loca,
        isLocationLong
      } = glyphs.write();
      tables.glyf.data = glyf;
      tables.loca.data = loca;
      if (isLocationLong !== !!isGlyphLocationsLong) {
        tables.head.data[50] = 0;
        tables.head.data[51] = isLocationLong ? 1 : 0;
      }
      const metrics = tables.hmtx.data;
      for (let i = 0; i < numGlyphs; i++) {
        const j = 4 * i;
        const advanceWidth = Math.round(scaleFactors[i] * int16(metrics[j], metrics[j + 1]));
        metrics[j] = advanceWidth >> 8 & 0xff;
        metrics[j + 1] = advanceWidth & 0xff;
        const lsb = Math.round(scaleFactors[i] * signedInt16(metrics[j + 2], metrics[j + 3]));
        writeSignedInt16(metrics, j + 2, lsb);
      }
    }
    let numGlyphsOut = numGlyphs + 1;
    let dupFirstEntry = true;
    if (numGlyphsOut > 0xffff) {
      dupFirstEntry = false;
      numGlyphsOut = numGlyphs;
      (0, _util.warn)("Not enough space in glyfs to duplicate first glyph.");
    }
    let maxFunctionDefs = 0;
    let maxSizeOfInstructions = 0;
    if (version >= 0x00010000 && tables.maxp.length >= 22) {
      font.pos += 8;
      const maxZones = font.getUint16();
      if (maxZones > 2) {
        tables.maxp.data[14] = 0;
        tables.maxp.data[15] = 2;
      }
      font.pos += 4;
      maxFunctionDefs = font.getUint16();
      font.pos += 4;
      maxSizeOfInstructions = font.getUint16();
    }
    tables.maxp.data[4] = numGlyphsOut >> 8;
    tables.maxp.data[5] = numGlyphsOut & 255;
    const hintsValid = sanitizeTTPrograms(tables.fpgm, tables.prep, tables["cvt "], maxFunctionDefs);
    if (!hintsValid) {
      delete tables.fpgm;
      delete tables.prep;
      delete tables["cvt "];
    }
    sanitizeMetrics(font, tables.hhea, tables.hmtx, tables.head, numGlyphsOut, dupFirstEntry);
    if (!tables.head) {
      throw new _util.FormatError('Required "head" table is not found');
    }
    sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0);
    let missingGlyphs = Object.create(null);
    if (isTrueType) {
      const isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]);
      const glyphsInfo = sanitizeGlyphLocations(tables.loca, tables.glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions);
      missingGlyphs = glyphsInfo.missingGlyphs;
      if (version >= 0x00010000 && tables.maxp.length >= 22) {
        tables.maxp.data[26] = glyphsInfo.maxSizeOfInstructions >> 8;
        tables.maxp.data[27] = glyphsInfo.maxSizeOfInstructions & 255;
      }
    }
    if (!tables.hhea) {
      throw new _util.FormatError('Required "hhea" table is not found');
    }
    if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) {
      tables.hhea.data[10] = 0xff;
      tables.hhea.data[11] = 0xff;
    }
    const metricsOverride = {
      unitsPerEm: int16(tables.head.data[18], tables.head.data[19]),
      yMax: signedInt16(tables.head.data[42], tables.head.data[43]),
      yMin: signedInt16(tables.head.data[38], tables.head.data[39]),
      ascent: signedInt16(tables.hhea.data[4], tables.hhea.data[5]),
      descent: signedInt16(tables.hhea.data[6], tables.hhea.data[7]),
      lineGap: signedInt16(tables.hhea.data[8], tables.hhea.data[9])
    };
    this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm;
    this.descent = metricsOverride.descent / metricsOverride.unitsPerEm;
    this.lineGap = metricsOverride.lineGap / metricsOverride.unitsPerEm;
    if (this.cssFontInfo?.lineHeight) {
      this.lineHeight = this.cssFontInfo.metrics.lineHeight;
      this.lineGap = this.cssFontInfo.metrics.lineGap;
    } else {
      this.lineHeight = this.ascent - this.descent + this.lineGap;
    }
    if (tables.post) {
      readPostScriptTable(tables.post, properties, numGlyphs);
    }
    tables.post = {
      tag: "post",
      data: createPostTable(properties)
    };
    const charCodeToGlyphId = [];
    function hasGlyph(glyphId) {
      return !missingGlyphs[glyphId];
    }
    if (properties.composite) {
      const cidToGidMap = properties.cidToGidMap || [];
      const isCidToGidMapEmpty = cidToGidMap.length === 0;
      properties.cMap.forEach(function (charCode, cid) {
        if (typeof cid === "string") {
          cid = convertCidString(charCode, cid, true);
        }
        if (cid > 0xffff) {
          throw new _util.FormatError("Max size of CID is 65,535");
        }
        let glyphId = -1;
        if (isCidToGidMapEmpty) {
          glyphId = cid;
        } else if (cidToGidMap[cid] !== undefined) {
          glyphId = cidToGidMap[cid];
        }
        if (glyphId >= 0 && glyphId < numGlyphs && hasGlyph(glyphId)) {
          charCodeToGlyphId[charCode] = glyphId;
        }
      });
    } else {
      const cmapTable = readCmapTable(tables.cmap, font, this.isSymbolicFont, properties.hasEncoding);
      const cmapPlatformId = cmapTable.platformId;
      const cmapEncodingId = cmapTable.encodingId;
      const cmapMappings = cmapTable.mappings;
      let baseEncoding = [],
        forcePostTable = false;
      if (properties.hasEncoding && (properties.baseEncodingName === "MacRomanEncoding" || properties.baseEncodingName === "WinAnsiEncoding")) {
        baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName);
      }
      if (properties.hasEncoding && !this.isSymbolicFont && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0)) {
        const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
        for (let charCode = 0; charCode < 256; charCode++) {
          let glyphName;
          if (this.differences[charCode] !== undefined) {
            glyphName = this.differences[charCode];
          } else if (baseEncoding.length && baseEncoding[charCode] !== "") {
            glyphName = baseEncoding[charCode];
          } else {
            glyphName = _encodings.StandardEncoding[charCode];
          }
          if (!glyphName) {
            continue;
          }
          const standardGlyphName = (0, _fonts_utils.recoverGlyphName)(glyphName, glyphsUnicodeMap);
          let unicodeOrCharCode;
          if (cmapPlatformId === 3 && cmapEncodingId === 1) {
            unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName];
          } else if (cmapPlatformId === 1 && cmapEncodingId === 0) {
            unicodeOrCharCode = _encodings.MacRomanEncoding.indexOf(standardGlyphName);
          }
          if (unicodeOrCharCode === undefined) {
            if (!properties.glyphNames && properties.hasIncludedToUnicodeMap && !(this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap)) {
              const unicode = this.toUnicode.get(charCode);
              if (unicode) {
                unicodeOrCharCode = unicode.codePointAt(0);
              }
            }
            if (unicodeOrCharCode === undefined) {
              continue;
            }
          }
          for (const mapping of cmapMappings) {
            if (mapping.charCode !== unicodeOrCharCode) {
              continue;
            }
            charCodeToGlyphId[charCode] = mapping.glyphId;
            break;
          }
        }
      } else if (cmapPlatformId === 0) {
        for (const mapping of cmapMappings) {
          charCodeToGlyphId[mapping.charCode] = mapping.glyphId;
        }
        forcePostTable = true;
      } else {
        for (const mapping of cmapMappings) {
          let charCode = mapping.charCode;
          if (cmapPlatformId === 3 && charCode >= 0xf000 && charCode <= 0xf0ff) {
            charCode &= 0xff;
          }
          charCodeToGlyphId[charCode] = mapping.glyphId;
        }
      }
      if (properties.glyphNames && (baseEncoding.length || this.differences.length)) {
        for (let i = 0; i < 256; ++i) {
          if (!forcePostTable && charCodeToGlyphId[i] !== undefined) {
            continue;
          }
          const glyphName = this.differences[i] || baseEncoding[i];
          if (!glyphName) {
            continue;
          }
          const glyphId = properties.glyphNames.indexOf(glyphName);
          if (glyphId > 0 && hasGlyph(glyphId)) {
            charCodeToGlyphId[i] = glyphId;
          }
        }
      }
    }
    if (charCodeToGlyphId.length === 0) {
      charCodeToGlyphId[0] = 0;
    }
    let glyphZeroId = numGlyphsOut - 1;
    if (!dupFirstEntry) {
      glyphZeroId = 0;
    }
    if (!properties.cssFontInfo) {
      const newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId, this.toUnicode);
      this.toFontChar = newMapping.toFontChar;
      tables.cmap = {
        tag: "cmap",
        data: createCmapTable(newMapping.charCodeToGlyphId, newMapping.toUnicodeExtraMap, numGlyphsOut)
      };
      if (!tables["OS/2"] || !validateOS2Table(tables["OS/2"], font)) {
        tables["OS/2"] = {
          tag: "OS/2",
          data: createOS2Table(properties, newMapping.charCodeToGlyphId, metricsOverride)
        };
      }
    }
    if (!isTrueType) {
      try {
        cffFile = new _stream.Stream(tables["CFF "].data);
        const parser = new _cff_parser.CFFParser(cffFile, properties, _fonts_utils.SEAC_ANALYSIS_ENABLED);
        cff = parser.parse();
        cff.duplicateFirstGlyph();
        const compiler = new _cff_parser.CFFCompiler(cff);
        tables["CFF "].data = compiler.compile();
      } catch {
        (0, _util.warn)("Failed to compile font " + properties.loadedName);
      }
    }
    if (!tables.name) {
      tables.name = {
        tag: "name",
        data: createNameTable(this.name)
      };
    } else {
      const [namePrototype, nameRecords] = readNameTable(tables.name);
      tables.name.data = createNameTable(name, namePrototype);
      this.psName = namePrototype[0][6] || null;
      if (!properties.composite) {
        adjustTrueTypeToUnicode(properties, this.isSymbolicFont, nameRecords);
      }
    }
    const builder = new _opentype_file_builder.OpenTypeFileBuilder(header.version);
    for (const tableTag in tables) {
      builder.addTable(tableTag, tables[tableTag].data);
    }
    return builder.toArray();
  }
  convert(fontName, font, properties) {
    properties.fixedPitch = false;
    if (properties.builtInEncoding) {
      adjustType1ToUnicode(properties, properties.builtInEncoding);
    }
    let glyphZeroId = 1;
    if (font instanceof _cff_font.CFFFont) {
      glyphZeroId = font.numGlyphs - 1;
    }
    const mapping = font.getGlyphMapping(properties);
    let newMapping = null;
    let newCharCodeToGlyphId = mapping;
    let toUnicodeExtraMap = null;
    if (!properties.cssFontInfo) {
      newMapping = adjustMapping(mapping, font.hasGlyphId.bind(font), glyphZeroId, this.toUnicode);
      this.toFontChar = newMapping.toFontChar;
      newCharCodeToGlyphId = newMapping.charCodeToGlyphId;
      toUnicodeExtraMap = newMapping.toUnicodeExtraMap;
    }
    const numGlyphs = font.numGlyphs;
    function getCharCodes(charCodeToGlyphId, glyphId) {
      let charCodes = null;
      for (const charCode in charCodeToGlyphId) {
        if (glyphId === charCodeToGlyphId[charCode]) {
          (charCodes ||= []).push(charCode | 0);
        }
      }
      return charCodes;
    }
    function createCharCode(charCodeToGlyphId, glyphId) {
      for (const charCode in charCodeToGlyphId) {
        if (glyphId === charCodeToGlyphId[charCode]) {
          return charCode | 0;
        }
      }
      newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] = glyphId;
      return newMapping.nextAvailableFontCharCode++;
    }
    const seacs = font.seacs;
    if (newMapping && _fonts_utils.SEAC_ANALYSIS_ENABLED && seacs?.length) {
      const matrix = properties.fontMatrix || _util.FONT_IDENTITY_MATRIX;
      const charset = font.getCharset();
      const seacMap = Object.create(null);
      for (let glyphId in seacs) {
        glyphId |= 0;
        const seac = seacs[glyphId];
        const baseGlyphName = _encodings.StandardEncoding[seac[2]];
        const accentGlyphName = _encodings.StandardEncoding[seac[3]];
        const baseGlyphId = charset.indexOf(baseGlyphName);
        const accentGlyphId = charset.indexOf(accentGlyphName);
        if (baseGlyphId < 0 || accentGlyphId < 0) {
          continue;
        }
        const accentOffset = {
          x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4],
          y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5]
        };
        const charCodes = getCharCodes(mapping, glyphId);
        if (!charCodes) {
          continue;
        }
        for (const charCode of charCodes) {
          const charCodeToGlyphId = newMapping.charCodeToGlyphId;
          const baseFontCharCode = createCharCode(charCodeToGlyphId, baseGlyphId);
          const accentFontCharCode = createCharCode(charCodeToGlyphId, accentGlyphId);
          seacMap[charCode] = {
            baseFontCharCode,
            accentFontCharCode,
            accentOffset
          };
        }
      }
      properties.seacMap = seacMap;
    }
    const unitsPerEm = 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0];
    const builder = new _opentype_file_builder.OpenTypeFileBuilder("\x4F\x54\x54\x4F");
    builder.addTable("CFF ", font.data);
    builder.addTable("OS/2", createOS2Table(properties, newCharCodeToGlyphId));
    builder.addTable("cmap", createCmapTable(newCharCodeToGlyphId, toUnicodeExtraMap, numGlyphs));
    builder.addTable("head", "\x00\x01\x00\x00" + "\x00\x00\x10\x00" + "\x00\x00\x00\x00" + "\x5F\x0F\x3C\xF5" + "\x00\x00" + safeString16(unitsPerEm) + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00" + safeString16(properties.descent) + "\x0F\xFF" + safeString16(properties.ascent) + string16(properties.italicAngle ? 2 : 0) + "\x00\x11" + "\x00\x00" + "\x00\x00" + "\x00\x00");
    builder.addTable("hhea", "\x00\x01\x00\x00" + safeString16(properties.ascent) + safeString16(properties.descent) + "\x00\x00" + "\xFF\xFF" + "\x00\x00" + "\x00\x00" + "\x00\x00" + safeString16(properties.capHeight) + safeString16(Math.tan(properties.italicAngle) * properties.xHeight) + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + string16(numGlyphs));
    builder.addTable("hmtx", function fontFieldsHmtx() {
      const charstrings = font.charstrings;
      const cffWidths = font.cff ? font.cff.widths : null;
      let hmtx = "\x00\x00\x00\x00";
      for (let i = 1, ii = numGlyphs; i < ii; i++) {
        let width = 0;
        if (charstrings) {
          const charstring = charstrings[i - 1];
          width = "width" in charstring ? charstring.width : 0;
        } else if (cffWidths) {
          width = Math.ceil(cffWidths[i] || 0);
        }
        hmtx += string16(width) + string16(0);
      }
      return hmtx;
    }());
    builder.addTable("maxp", "\x00\x00\x50\x00" + string16(numGlyphs));
    builder.addTable("name", createNameTable(fontName));
    builder.addTable("post", createPostTable(properties));
    return builder.toArray();
  }
  get spaceWidth() {
    const possibleSpaceReplacements = ["space", "minus", "one", "i", "I"];
    let width;
    for (const glyphName of possibleSpaceReplacements) {
      if (glyphName in this.widths) {
        width = this.widths[glyphName];
        break;
      }
      const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
      const glyphUnicode = glyphsUnicodeMap[glyphName];
      let charcode = 0;
      if (this.composite && this.cMap.contains(glyphUnicode)) {
        charcode = this.cMap.lookup(glyphUnicode);
        if (typeof charcode === "string") {
          charcode = convertCidString(glyphUnicode, charcode);
        }
      }
      if (!charcode && this.toUnicode) {
        charcode = this.toUnicode.charCodeOf(glyphUnicode);
      }
      if (charcode <= 0) {
        charcode = glyphUnicode;
      }
      width = this.widths[charcode];
      if (width) {
        break;
      }
    }
    return (0, _util.shadow)(this, "spaceWidth", width || this.defaultWidth);
  }
  _charToGlyph(charcode, isSpace = false) {
    let glyph = this._glyphCache[charcode];
    if (glyph?.isSpace === isSpace) {
      return glyph;
    }
    let fontCharCode, width, operatorListId;
    let widthCode = charcode;
    if (this.cMap?.contains(charcode)) {
      widthCode = this.cMap.lookup(charcode);
      if (typeof widthCode === "string") {
        widthCode = convertCidString(charcode, widthCode);
      }
    }
    width = this.widths[widthCode];
    if (typeof width !== "number") {
      width = this.defaultWidth;
    }
    const vmetric = this.vmetrics?.[widthCode];
    let unicode = this.toUnicode.get(charcode) || charcode;
    if (typeof unicode === "number") {
      unicode = String.fromCharCode(unicode);
    }
    let isInFont = this.toFontChar[charcode] !== undefined;
    fontCharCode = this.toFontChar[charcode] || charcode;
    if (this.missingFile) {
      const glyphName = this.differences[charcode] || this.defaultEncoding[charcode];
      if ((glyphName === ".notdef" || glyphName === "") && this.type === "Type1") {
        fontCharCode = 0x20;
      }
      fontCharCode = (0, _unicode.mapSpecialUnicodeValues)(fontCharCode);
    }
    if (this.isType3Font) {
      operatorListId = fontCharCode;
    }
    let accent = null;
    if (this.seacMap?.[charcode]) {
      isInFont = true;
      const seac = this.seacMap[charcode];
      fontCharCode = seac.baseFontCharCode;
      accent = {
        fontChar: String.fromCodePoint(seac.accentFontCharCode),
        offset: seac.accentOffset
      };
    }
    let fontChar = "";
    if (typeof fontCharCode === "number") {
      if (fontCharCode <= 0x10ffff) {
        fontChar = String.fromCodePoint(fontCharCode);
      } else {
        (0, _util.warn)(`charToGlyph - invalid fontCharCode: ${fontCharCode}`);
      }
    }
    glyph = new Glyph(charcode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont);
    return this._glyphCache[charcode] = glyph;
  }
  charsToGlyphs(chars) {
    let glyphs = this._charsCache[chars];
    if (glyphs) {
      return glyphs;
    }
    glyphs = [];
    if (this.cMap) {
      const c = Object.create(null),
        ii = chars.length;
      let i = 0;
      while (i < ii) {
        this.cMap.readCharCode(chars, i, c);
        const {
          charcode,
          length
        } = c;
        i += length;
        const glyph = this._charToGlyph(charcode, length === 1 && chars.charCodeAt(i - 1) === 0x20);
        glyphs.push(glyph);
      }
    } else {
      for (let i = 0, ii = chars.length; i < ii; ++i) {
        const charcode = chars.charCodeAt(i);
        const glyph = this._charToGlyph(charcode, charcode === 0x20);
        glyphs.push(glyph);
      }
    }
    return this._charsCache[chars] = glyphs;
  }
  getCharPositions(chars) {
    const positions = [];
    if (this.cMap) {
      const c = Object.create(null);
      let i = 0;
      while (i < chars.length) {
        this.cMap.readCharCode(chars, i, c);
        const length = c.length;
        positions.push([i, i + length]);
        i += length;
      }
    } else {
      for (let i = 0, ii = chars.length; i < ii; ++i) {
        positions.push([i, i + 1]);
      }
    }
    return positions;
  }
  get glyphCacheValues() {
    return Object.values(this._glyphCache);
  }
  encodeString(str) {
    const buffers = [];
    const currentBuf = [];
    const hasCurrentBufErrors = () => buffers.length % 2 === 1;
    const getCharCode = this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap ? unicode => this.toUnicode.charCodeOf(unicode) : unicode => this.toUnicode.charCodeOf(String.fromCodePoint(unicode));
    for (let i = 0, ii = str.length; i < ii; i++) {
      const unicode = str.codePointAt(i);
      if (unicode > 0xd7ff && (unicode < 0xe000 || unicode > 0xfffd)) {
        i++;
      }
      if (this.toUnicode) {
        const charCode = getCharCode(unicode);
        if (charCode !== -1) {
          if (hasCurrentBufErrors()) {
            buffers.push(currentBuf.join(""));
            currentBuf.length = 0;
          }
          const charCodeLength = this.cMap ? this.cMap.getCharCodeLength(charCode) : 1;
          for (let j = charCodeLength - 1; j >= 0; j--) {
            currentBuf.push(String.fromCharCode(charCode >> 8 * j & 0xff));
          }
          continue;
        }
      }
      if (!hasCurrentBufErrors()) {
        buffers.push(currentBuf.join(""));
        currentBuf.length = 0;
      }
      currentBuf.push(String.fromCodePoint(unicode));
    }
    buffers.push(currentBuf.join(""));
    return buffers;
  }
}
exports.Font = Font;
class ErrorFont {
  constructor(error) {
    this.error = error;
    this.loadedName = "g_font_error";
    this.missingFile = true;
  }
  charsToGlyphs() {
    return [];
  }
  encodeString(chars) {
    return [chars];
  }
  exportData(extraProperties = false) {
    return {
      error: this.error
    };
  }
}
exports.ErrorFont = ErrorFont;

/***/ }),
/* 35 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.CFFTopDict = exports.CFFStrings = exports.CFFStandardStrings = exports.CFFPrivateDict = exports.CFFParser = exports.CFFIndex = exports.CFFHeader = exports.CFFFDSelect = exports.CFFCompiler = exports.CFFCharset = exports.CFF = void 0;
var _util = __w_pdfjs_require__(2);
var _charsets = __w_pdfjs_require__(36);
var _encodings = __w_pdfjs_require__(37);
const MAX_SUBR_NESTING = 10;
const CFFStandardStrings = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall", "001.000", "001.001", "001.002", "001.003", "Black", "Bold", "Book", "Light", "Medium", "Regular", "Roman", "Semibold"];
exports.CFFStandardStrings = CFFStandardStrings;
const NUM_STANDARD_CFF_STRINGS = 391;
const CharstringValidationData = [null, {
  id: "hstem",
  min: 2,
  stackClearing: true,
  stem: true
}, null, {
  id: "vstem",
  min: 2,
  stackClearing: true,
  stem: true
}, {
  id: "vmoveto",
  min: 1,
  stackClearing: true
}, {
  id: "rlineto",
  min: 2,
  resetStack: true
}, {
  id: "hlineto",
  min: 1,
  resetStack: true
}, {
  id: "vlineto",
  min: 1,
  resetStack: true
}, {
  id: "rrcurveto",
  min: 6,
  resetStack: true
}, null, {
  id: "callsubr",
  min: 1,
  undefStack: true
}, {
  id: "return",
  min: 0,
  undefStack: true
}, null, null, {
  id: "endchar",
  min: 0,
  stackClearing: true
}, null, null, null, {
  id: "hstemhm",
  min: 2,
  stackClearing: true,
  stem: true
}, {
  id: "hintmask",
  min: 0,
  stackClearing: true
}, {
  id: "cntrmask",
  min: 0,
  stackClearing: true
}, {
  id: "rmoveto",
  min: 2,
  stackClearing: true
}, {
  id: "hmoveto",
  min: 1,
  stackClearing: true
}, {
  id: "vstemhm",
  min: 2,
  stackClearing: true,
  stem: true
}, {
  id: "rcurveline",
  min: 8,
  resetStack: true
}, {
  id: "rlinecurve",
  min: 8,
  resetStack: true
}, {
  id: "vvcurveto",
  min: 4,
  resetStack: true
}, {
  id: "hhcurveto",
  min: 4,
  resetStack: true
}, null, {
  id: "callgsubr",
  min: 1,
  undefStack: true
}, {
  id: "vhcurveto",
  min: 4,
  resetStack: true
}, {
  id: "hvcurveto",
  min: 4,
  resetStack: true
}];
const CharstringValidationData12 = [null, null, null, {
  id: "and",
  min: 2,
  stackDelta: -1
}, {
  id: "or",
  min: 2,
  stackDelta: -1
}, {
  id: "not",
  min: 1,
  stackDelta: 0
}, null, null, null, {
  id: "abs",
  min: 1,
  stackDelta: 0
}, {
  id: "add",
  min: 2,
  stackDelta: -1,
  stackFn(stack, index) {
    stack[index - 2] = stack[index - 2] + stack[index - 1];
  }
}, {
  id: "sub",
  min: 2,
  stackDelta: -1,
  stackFn(stack, index) {
    stack[index - 2] = stack[index - 2] - stack[index - 1];
  }
}, {
  id: "div",
  min: 2,
  stackDelta: -1,
  stackFn(stack, index) {
    stack[index - 2] = stack[index - 2] / stack[index - 1];
  }
}, null, {
  id: "neg",
  min: 1,
  stackDelta: 0,
  stackFn(stack, index) {
    stack[index - 1] = -stack[index - 1];
  }
}, {
  id: "eq",
  min: 2,
  stackDelta: -1
}, null, null, {
  id: "drop",
  min: 1,
  stackDelta: -1
}, null, {
  id: "put",
  min: 2,
  stackDelta: -2
}, {
  id: "get",
  min: 1,
  stackDelta: 0
}, {
  id: "ifelse",
  min: 4,
  stackDelta: -3
}, {
  id: "random",
  min: 0,
  stackDelta: 1
}, {
  id: "mul",
  min: 2,
  stackDelta: -1,
  stackFn(stack, index) {
    stack[index - 2] = stack[index - 2] * stack[index - 1];
  }
}, null, {
  id: "sqrt",
  min: 1,
  stackDelta: 0
}, {
  id: "dup",
  min: 1,
  stackDelta: 1
}, {
  id: "exch",
  min: 2,
  stackDelta: 0
}, {
  id: "index",
  min: 2,
  stackDelta: 0
}, {
  id: "roll",
  min: 3,
  stackDelta: -2
}, null, null, null, {
  id: "hflex",
  min: 7,
  resetStack: true
}, {
  id: "flex",
  min: 13,
  resetStack: true
}, {
  id: "hflex1",
  min: 9,
  resetStack: true
}, {
  id: "flex1",
  min: 11,
  resetStack: true
}];
class CFFParser {
  constructor(file, properties, seacAnalysisEnabled) {
    this.bytes = file.getBytes();
    this.properties = properties;
    this.seacAnalysisEnabled = !!seacAnalysisEnabled;
  }
  parse() {
    const properties = this.properties;
    const cff = new CFF();
    this.cff = cff;
    const header = this.parseHeader();
    const nameIndex = this.parseIndex(header.endPos);
    const topDictIndex = this.parseIndex(nameIndex.endPos);
    const stringIndex = this.parseIndex(topDictIndex.endPos);
    const globalSubrIndex = this.parseIndex(stringIndex.endPos);
    const topDictParsed = this.parseDict(topDictIndex.obj.get(0));
    const topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings);
    cff.header = header.obj;
    cff.names = this.parseNameIndex(nameIndex.obj);
    cff.strings = this.parseStringIndex(stringIndex.obj);
    cff.topDict = topDict;
    cff.globalSubrIndex = globalSubrIndex.obj;
    this.parsePrivateDict(cff.topDict);
    cff.isCIDFont = topDict.hasName("ROS");
    const charStringOffset = topDict.getByName("CharStrings");
    const charStringIndex = this.parseIndex(charStringOffset).obj;
    const fontMatrix = topDict.getByName("FontMatrix");
    if (fontMatrix) {
      properties.fontMatrix = fontMatrix;
    }
    const fontBBox = topDict.getByName("FontBBox");
    if (fontBBox) {
      properties.ascent = Math.max(fontBBox[3], fontBBox[1]);
      properties.descent = Math.min(fontBBox[1], fontBBox[3]);
      properties.ascentScaled = true;
    }
    let charset, encoding;
    if (cff.isCIDFont) {
      const fdArrayIndex = this.parseIndex(topDict.getByName("FDArray")).obj;
      for (let i = 0, ii = fdArrayIndex.count; i < ii; ++i) {
        const dictRaw = fdArrayIndex.get(i);
        const fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), cff.strings);
        this.parsePrivateDict(fontDict);
        cff.fdArray.push(fontDict);
      }
      encoding = null;
      charset = this.parseCharsets(topDict.getByName("charset"), charStringIndex.count, cff.strings, true);
      cff.fdSelect = this.parseFDSelect(topDict.getByName("FDSelect"), charStringIndex.count);
    } else {
      charset = this.parseCharsets(topDict.getByName("charset"), charStringIndex.count, cff.strings, false);
      encoding = this.parseEncoding(topDict.getByName("Encoding"), properties, cff.strings, charset.charset);
    }
    cff.charset = charset;
    cff.encoding = encoding;
    const charStringsAndSeacs = this.parseCharStrings({
      charStrings: charStringIndex,
      localSubrIndex: topDict.privateDict.subrsIndex,
      globalSubrIndex: globalSubrIndex.obj,
      fdSelect: cff.fdSelect,
      fdArray: cff.fdArray,
      privateDict: topDict.privateDict
    });
    cff.charStrings = charStringsAndSeacs.charStrings;
    cff.seacs = charStringsAndSeacs.seacs;
    cff.widths = charStringsAndSeacs.widths;
    return cff;
  }
  parseHeader() {
    let bytes = this.bytes;
    const bytesLength = bytes.length;
    let offset = 0;
    while (offset < bytesLength && bytes[offset] !== 1) {
      ++offset;
    }
    if (offset >= bytesLength) {
      throw new _util.FormatError("Invalid CFF header");
    }
    if (offset !== 0) {
      (0, _util.info)("cff data is shifted");
      bytes = bytes.subarray(offset);
      this.bytes = bytes;
    }
    const major = bytes[0];
    const minor = bytes[1];
    const hdrSize = bytes[2];
    const offSize = bytes[3];
    const header = new CFFHeader(major, minor, hdrSize, offSize);
    return {
      obj: header,
      endPos: hdrSize
    };
  }
  parseDict(dict) {
    let pos = 0;
    function parseOperand() {
      let value = dict[pos++];
      if (value === 30) {
        return parseFloatOperand();
      } else if (value === 28) {
        value = dict[pos++];
        value = (value << 24 | dict[pos++] << 16) >> 16;
        return value;
      } else if (value === 29) {
        value = dict[pos++];
        value = value << 8 | dict[pos++];
        value = value << 8 | dict[pos++];
        value = value << 8 | dict[pos++];
        return value;
      } else if (value >= 32 && value <= 246) {
        return value - 139;
      } else if (value >= 247 && value <= 250) {
        return (value - 247) * 256 + dict[pos++] + 108;
      } else if (value >= 251 && value <= 254) {
        return -((value - 251) * 256) - dict[pos++] - 108;
      }
      (0, _util.warn)('CFFParser_parseDict: "' + value + '" is a reserved command.');
      return NaN;
    }
    function parseFloatOperand() {
      let str = "";
      const eof = 15;
      const lookup = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "E", "E-", null, "-"];
      const length = dict.length;
      while (pos < length) {
        const b = dict[pos++];
        const b1 = b >> 4;
        const b2 = b & 15;
        if (b1 === eof) {
          break;
        }
        str += lookup[b1];
        if (b2 === eof) {
          break;
        }
        str += lookup[b2];
      }
      return parseFloat(str);
    }
    let operands = [];
    const entries = [];
    pos = 0;
    const end = dict.length;
    while (pos < end) {
      let b = dict[pos];
      if (b <= 21) {
        if (b === 12) {
          b = b << 8 | dict[++pos];
        }
        entries.push([b, operands]);
        operands = [];
        ++pos;
      } else {
        operands.push(parseOperand());
      }
    }
    return entries;
  }
  parseIndex(pos) {
    const cffIndex = new CFFIndex();
    const bytes = this.bytes;
    const count = bytes[pos++] << 8 | bytes[pos++];
    const offsets = [];
    let end = pos;
    let i, ii;
    if (count !== 0) {
      const offsetSize = bytes[pos++];
      const startPos = pos + (count + 1) * offsetSize - 1;
      for (i = 0, ii = count + 1; i < ii; ++i) {
        let offset = 0;
        for (let j = 0; j < offsetSize; ++j) {
          offset <<= 8;
          offset += bytes[pos++];
        }
        offsets.push(startPos + offset);
      }
      end = offsets[count];
    }
    for (i = 0, ii = offsets.length - 1; i < ii; ++i) {
      const offsetStart = offsets[i];
      const offsetEnd = offsets[i + 1];
      cffIndex.add(bytes.subarray(offsetStart, offsetEnd));
    }
    return {
      obj: cffIndex,
      endPos: end
    };
  }
  parseNameIndex(index) {
    const names = [];
    for (let i = 0, ii = index.count; i < ii; ++i) {
      const name = index.get(i);
      names.push((0, _util.bytesToString)(name));
    }
    return names;
  }
  parseStringIndex(index) {
    const strings = new CFFStrings();
    for (let i = 0, ii = index.count; i < ii; ++i) {
      const data = index.get(i);
      strings.add((0, _util.bytesToString)(data));
    }
    return strings;
  }
  createDict(Type, dict, strings) {
    const cffDict = new Type(strings);
    for (const [key, value] of dict) {
      cffDict.setByKey(key, value);
    }
    return cffDict;
  }
  parseCharString(state, data, localSubrIndex, globalSubrIndex) {
    if (!data || state.callDepth > MAX_SUBR_NESTING) {
      return false;
    }
    let stackSize = state.stackSize;
    const stack = state.stack;
    let length = data.length;
    for (let j = 0; j < length;) {
      const value = data[j++];
      let validationCommand = null;
      if (value === 12) {
        const q = data[j++];
        if (q === 0) {
          data[j - 2] = 139;
          data[j - 1] = 22;
          stackSize = 0;
        } else {
          validationCommand = CharstringValidationData12[q];
        }
      } else if (value === 28) {
        stack[stackSize] = (data[j] << 24 | data[j + 1] << 16) >> 16;
        j += 2;
        stackSize++;
      } else if (value === 14) {
        if (stackSize >= 4) {
          stackSize -= 4;
          if (this.seacAnalysisEnabled) {
            state.seac = stack.slice(stackSize, stackSize + 4);
            return false;
          }
        }
        validationCommand = CharstringValidationData[value];
      } else if (value >= 32 && value <= 246) {
        stack[stackSize] = value - 139;
        stackSize++;
      } else if (value >= 247 && value <= 254) {
        stack[stackSize] = value < 251 ? (value - 247 << 8) + data[j] + 108 : -(value - 251 << 8) - data[j] - 108;
        j++;
        stackSize++;
      } else if (value === 255) {
        stack[stackSize] = (data[j] << 24 | data[j + 1] << 16 | data[j + 2] << 8 | data[j + 3]) / 65536;
        j += 4;
        stackSize++;
      } else if (value === 19 || value === 20) {
        state.hints += stackSize >> 1;
        if (state.hints === 0) {
          data.copyWithin(j - 1, j, -1);
          j -= 1;
          length -= 1;
          continue;
        }
        j += state.hints + 7 >> 3;
        stackSize %= 2;
        validationCommand = CharstringValidationData[value];
      } else if (value === 10 || value === 29) {
        const subrsIndex = value === 10 ? localSubrIndex : globalSubrIndex;
        if (!subrsIndex) {
          validationCommand = CharstringValidationData[value];
          (0, _util.warn)("Missing subrsIndex for " + validationCommand.id);
          return false;
        }
        let bias = 32768;
        if (subrsIndex.count < 1240) {
          bias = 107;
        } else if (subrsIndex.count < 33900) {
          bias = 1131;
        }
        const subrNumber = stack[--stackSize] + bias;
        if (subrNumber < 0 || subrNumber >= subrsIndex.count || isNaN(subrNumber)) {
          validationCommand = CharstringValidationData[value];
          (0, _util.warn)("Out of bounds subrIndex for " + validationCommand.id);
          return false;
        }
        state.stackSize = stackSize;
        state.callDepth++;
        const valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, globalSubrIndex);
        if (!valid) {
          return false;
        }
        state.callDepth--;
        stackSize = state.stackSize;
        continue;
      } else if (value === 11) {
        state.stackSize = stackSize;
        return true;
      } else if (value === 0 && j === data.length) {
        data[j - 1] = 14;
        validationCommand = CharstringValidationData[14];
      } else if (value === 9) {
        data.copyWithin(j - 1, j, -1);
        j -= 1;
        length -= 1;
        continue;
      } else {
        validationCommand = CharstringValidationData[value];
      }
      if (validationCommand) {
        if (validationCommand.stem) {
          state.hints += stackSize >> 1;
          if (value === 3 || value === 23) {
            state.hasVStems = true;
          } else if (state.hasVStems && (value === 1 || value === 18)) {
            (0, _util.warn)("CFF stem hints are in wrong order");
            data[j - 1] = value === 1 ? 3 : 23;
          }
        }
        if ("min" in validationCommand) {
          if (!state.undefStack && stackSize < validationCommand.min) {
            (0, _util.warn)("Not enough parameters for " + validationCommand.id + "; actual: " + stackSize + ", expected: " + validationCommand.min);
            if (stackSize === 0) {
              data[j - 1] = 14;
              return true;
            }
            return false;
          }
        }
        if (state.firstStackClearing && validationCommand.stackClearing) {
          state.firstStackClearing = false;
          stackSize -= validationCommand.min;
          if (stackSize >= 2 && validationCommand.stem) {
            stackSize %= 2;
          } else if (stackSize > 1) {
            (0, _util.warn)("Found too many parameters for stack-clearing command");
          }
          if (stackSize > 0) {
            state.width = stack[stackSize - 1];
          }
        }
        if ("stackDelta" in validationCommand) {
          if ("stackFn" in validationCommand) {
            validationCommand.stackFn(stack, stackSize);
          }
          stackSize += validationCommand.stackDelta;
        } else if (validationCommand.stackClearing) {
          stackSize = 0;
        } else if (validationCommand.resetStack) {
          stackSize = 0;
          state.undefStack = false;
        } else if (validationCommand.undefStack) {
          stackSize = 0;
          state.undefStack = true;
          state.firstStackClearing = false;
        }
      }
    }
    if (length < data.length) {
      data.fill(14, length);
    }
    state.stackSize = stackSize;
    return true;
  }
  parseCharStrings({
    charStrings,
    localSubrIndex,
    globalSubrIndex,
    fdSelect,
    fdArray,
    privateDict
  }) {
    const seacs = [];
    const widths = [];
    const count = charStrings.count;
    for (let i = 0; i < count; i++) {
      const charstring = charStrings.get(i);
      const state = {
        callDepth: 0,
        stackSize: 0,
        stack: [],
        undefStack: true,
        hints: 0,
        firstStackClearing: true,
        seac: null,
        width: null,
        hasVStems: false
      };
      let valid = true;
      let localSubrToUse = null;
      let privateDictToUse = privateDict;
      if (fdSelect && fdArray.length) {
        const fdIndex = fdSelect.getFDIndex(i);
        if (fdIndex === -1) {
          (0, _util.warn)("Glyph index is not in fd select.");
          valid = false;
        }
        if (fdIndex >= fdArray.length) {
          (0, _util.warn)("Invalid fd index for glyph index.");
          valid = false;
        }
        if (valid) {
          privateDictToUse = fdArray[fdIndex].privateDict;
          localSubrToUse = privateDictToUse.subrsIndex;
        }
      } else if (localSubrIndex) {
        localSubrToUse = localSubrIndex;
      }
      if (valid) {
        valid = this.parseCharString(state, charstring, localSubrToUse, globalSubrIndex);
      }
      if (state.width !== null) {
        const nominalWidth = privateDictToUse.getByName("nominalWidthX");
        widths[i] = nominalWidth + state.width;
      } else {
        const defaultWidth = privateDictToUse.getByName("defaultWidthX");
        widths[i] = defaultWidth;
      }
      if (state.seac !== null) {
        seacs[i] = state.seac;
      }
      if (!valid) {
        charStrings.set(i, new Uint8Array([14]));
      }
    }
    return {
      charStrings,
      seacs,
      widths
    };
  }
  emptyPrivateDictionary(parentDict) {
    const privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings);
    parentDict.setByKey(18, [0, 0]);
    parentDict.privateDict = privateDict;
  }
  parsePrivateDict(parentDict) {
    if (!parentDict.hasName("Private")) {
      this.emptyPrivateDictionary(parentDict);
      return;
    }
    const privateOffset = parentDict.getByName("Private");
    if (!Array.isArray(privateOffset) || privateOffset.length !== 2) {
      parentDict.removeByName("Private");
      return;
    }
    const size = privateOffset[0];
    const offset = privateOffset[1];
    if (size === 0 || offset >= this.bytes.length) {
      this.emptyPrivateDictionary(parentDict);
      return;
    }
    const privateDictEnd = offset + size;
    const dictData = this.bytes.subarray(offset, privateDictEnd);
    const dict = this.parseDict(dictData);
    const privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings);
    parentDict.privateDict = privateDict;
    if (privateDict.getByName("ExpansionFactor") === 0) {
      privateDict.setByName("ExpansionFactor", 0.06);
    }
    if (!privateDict.getByName("Subrs")) {
      return;
    }
    const subrsOffset = privateDict.getByName("Subrs");
    const relativeOffset = offset + subrsOffset;
    if (subrsOffset === 0 || relativeOffset >= this.bytes.length) {
      this.emptyPrivateDictionary(parentDict);
      return;
    }
    const subrsIndex = this.parseIndex(relativeOffset);
    privateDict.subrsIndex = subrsIndex.obj;
  }
  parseCharsets(pos, length, strings, cid) {
    if (pos === 0) {
      return new CFFCharset(true, CFFCharsetPredefinedTypes.ISO_ADOBE, _charsets.ISOAdobeCharset);
    } else if (pos === 1) {
      return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT, _charsets.ExpertCharset);
    } else if (pos === 2) {
      return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, _charsets.ExpertSubsetCharset);
    }
    const bytes = this.bytes;
    const start = pos;
    const format = bytes[pos++];
    const charset = [cid ? 0 : ".notdef"];
    let id, count, i;
    length -= 1;
    switch (format) {
      case 0:
        for (i = 0; i < length; i++) {
          id = bytes[pos++] << 8 | bytes[pos++];
          charset.push(cid ? id : strings.get(id));
        }
        break;
      case 1:
        while (charset.length <= length) {
          id = bytes[pos++] << 8 | bytes[pos++];
          count = bytes[pos++];
          for (i = 0; i <= count; i++) {
            charset.push(cid ? id++ : strings.get(id++));
          }
        }
        break;
      case 2:
        while (charset.length <= length) {
          id = bytes[pos++] << 8 | bytes[pos++];
          count = bytes[pos++] << 8 | bytes[pos++];
          for (i = 0; i <= count; i++) {
            charset.push(cid ? id++ : strings.get(id++));
          }
        }
        break;
      default:
        throw new _util.FormatError("Unknown charset format");
    }
    const end = pos;
    const raw = bytes.subarray(start, end);
    return new CFFCharset(false, format, charset, raw);
  }
  parseEncoding(pos, properties, strings, charset) {
    const encoding = Object.create(null);
    const bytes = this.bytes;
    let predefined = false;
    let format, i, ii;
    let raw = null;
    function readSupplement() {
      const supplementsCount = bytes[pos++];
      for (i = 0; i < supplementsCount; i++) {
        const code = bytes[pos++];
        const sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff);
        encoding[code] = charset.indexOf(strings.get(sid));
      }
    }
    if (pos === 0 || pos === 1) {
      predefined = true;
      format = pos;
      const baseEncoding = pos ? _encodings.ExpertEncoding : _encodings.StandardEncoding;
      for (i = 0, ii = charset.length; i < ii; i++) {
        const index = baseEncoding.indexOf(charset[i]);
        if (index !== -1) {
          encoding[index] = i;
        }
      }
    } else {
      const dataStart = pos;
      format = bytes[pos++];
      switch (format & 0x7f) {
        case 0:
          const glyphsCount = bytes[pos++];
          for (i = 1; i <= glyphsCount; i++) {
            encoding[bytes[pos++]] = i;
          }
          break;
        case 1:
          const rangesCount = bytes[pos++];
          let gid = 1;
          for (i = 0; i < rangesCount; i++) {
            const start = bytes[pos++];
            const left = bytes[pos++];
            for (let j = start; j <= start + left; j++) {
              encoding[j] = gid++;
            }
          }
          break;
        default:
          throw new _util.FormatError(`Unknown encoding format: ${format} in CFF`);
      }
      const dataEnd = pos;
      if (format & 0x80) {
        bytes[dataStart] &= 0x7f;
        readSupplement();
      }
      raw = bytes.subarray(dataStart, dataEnd);
    }
    format &= 0x7f;
    return new CFFEncoding(predefined, format, encoding, raw);
  }
  parseFDSelect(pos, length) {
    const bytes = this.bytes;
    const format = bytes[pos++];
    const fdSelect = [];
    let i;
    switch (format) {
      case 0:
        for (i = 0; i < length; ++i) {
          const id = bytes[pos++];
          fdSelect.push(id);
        }
        break;
      case 3:
        const rangesCount = bytes[pos++] << 8 | bytes[pos++];
        for (i = 0; i < rangesCount; ++i) {
          let first = bytes[pos++] << 8 | bytes[pos++];
          if (i === 0 && first !== 0) {
            (0, _util.warn)("parseFDSelect: The first range must have a first GID of 0" + " -- trying to recover.");
            first = 0;
          }
          const fdIndex = bytes[pos++];
          const next = bytes[pos] << 8 | bytes[pos + 1];
          for (let j = first; j < next; ++j) {
            fdSelect.push(fdIndex);
          }
        }
        pos += 2;
        break;
      default:
        throw new _util.FormatError(`parseFDSelect: Unknown format "${format}".`);
    }
    if (fdSelect.length !== length) {
      throw new _util.FormatError("parseFDSelect: Invalid font data.");
    }
    return new CFFFDSelect(format, fdSelect);
  }
}
exports.CFFParser = CFFParser;
class CFF {
  constructor() {
    this.header = null;
    this.names = [];
    this.topDict = null;
    this.strings = new CFFStrings();
    this.globalSubrIndex = null;
    this.encoding = null;
    this.charset = null;
    this.charStrings = null;
    this.fdArray = [];
    this.fdSelect = null;
    this.isCIDFont = false;
  }
  duplicateFirstGlyph() {
    if (this.charStrings.count >= 65535) {
      (0, _util.warn)("Not enough space in charstrings to duplicate first glyph.");
      return;
    }
    const glyphZero = this.charStrings.get(0);
    this.charStrings.add(glyphZero);
    if (this.isCIDFont) {
      this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]);
    }
  }
  hasGlyphId(id) {
    if (id < 0 || id >= this.charStrings.count) {
      return false;
    }
    const glyph = this.charStrings.get(id);
    return glyph.length > 0;
  }
}
exports.CFF = CFF;
class CFFHeader {
  constructor(major, minor, hdrSize, offSize) {
    this.major = major;
    this.minor = minor;
    this.hdrSize = hdrSize;
    this.offSize = offSize;
  }
}
exports.CFFHeader = CFFHeader;
class CFFStrings {
  constructor() {
    this.strings = [];
  }
  get(index) {
    if (index >= 0 && index <= NUM_STANDARD_CFF_STRINGS - 1) {
      return CFFStandardStrings[index];
    }
    if (index - NUM_STANDARD_CFF_STRINGS <= this.strings.length) {
      return this.strings[index - NUM_STANDARD_CFF_STRINGS];
    }
    return CFFStandardStrings[0];
  }
  getSID(str) {
    let index = CFFStandardStrings.indexOf(str);
    if (index !== -1) {
      return index;
    }
    index = this.strings.indexOf(str);
    if (index !== -1) {
      return index + NUM_STANDARD_CFF_STRINGS;
    }
    return -1;
  }
  add(value) {
    this.strings.push(value);
  }
  get count() {
    return this.strings.length;
  }
}
exports.CFFStrings = CFFStrings;
class CFFIndex {
  constructor() {
    this.objects = [];
    this.length = 0;
  }
  add(data) {
    this.length += data.length;
    this.objects.push(data);
  }
  set(index, data) {
    this.length += data.length - this.objects[index].length;
    this.objects[index] = data;
  }
  get(index) {
    return this.objects[index];
  }
  get count() {
    return this.objects.length;
  }
}
exports.CFFIndex = CFFIndex;
class CFFDict {
  constructor(tables, strings) {
    this.keyToNameMap = tables.keyToNameMap;
    this.nameToKeyMap = tables.nameToKeyMap;
    this.defaults = tables.defaults;
    this.types = tables.types;
    this.opcodes = tables.opcodes;
    this.order = tables.order;
    this.strings = strings;
    this.values = Object.create(null);
  }
  setByKey(key, value) {
    if (!(key in this.keyToNameMap)) {
      return false;
    }
    if (value.length === 0) {
      return true;
    }
    for (const val of value) {
      if (isNaN(val)) {
        (0, _util.warn)(`Invalid CFFDict value: "${value}" for key "${key}".`);
        return true;
      }
    }
    const type = this.types[key];
    if (type === "num" || type === "sid" || type === "offset") {
      value = value[0];
    }
    this.values[key] = value;
    return true;
  }
  setByName(name, value) {
    if (!(name in this.nameToKeyMap)) {
      throw new _util.FormatError(`Invalid dictionary name "${name}"`);
    }
    this.values[this.nameToKeyMap[name]] = value;
  }
  hasName(name) {
    return this.nameToKeyMap[name] in this.values;
  }
  getByName(name) {
    if (!(name in this.nameToKeyMap)) {
      throw new _util.FormatError(`Invalid dictionary name ${name}"`);
    }
    const key = this.nameToKeyMap[name];
    if (!(key in this.values)) {
      return this.defaults[key];
    }
    return this.values[key];
  }
  removeByName(name) {
    delete this.values[this.nameToKeyMap[name]];
  }
  static createTables(layout) {
    const tables = {
      keyToNameMap: {},
      nameToKeyMap: {},
      defaults: {},
      types: {},
      opcodes: {},
      order: []
    };
    for (const entry of layout) {
      const key = Array.isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0];
      tables.keyToNameMap[key] = entry[1];
      tables.nameToKeyMap[entry[1]] = key;
      tables.types[key] = entry[2];
      tables.defaults[key] = entry[3];
      tables.opcodes[key] = Array.isArray(entry[0]) ? entry[0] : [entry[0]];
      tables.order.push(key);
    }
    return tables;
  }
}
const CFFTopDictLayout = [[[12, 30], "ROS", ["sid", "sid", "num"], null], [[12, 20], "SyntheticBase", "num", null], [0, "version", "sid", null], [1, "Notice", "sid", null], [[12, 0], "Copyright", "sid", null], [2, "FullName", "sid", null], [3, "FamilyName", "sid", null], [4, "Weight", "sid", null], [[12, 1], "isFixedPitch", "num", 0], [[12, 2], "ItalicAngle", "num", 0], [[12, 3], "UnderlinePosition", "num", -100], [[12, 4], "UnderlineThickness", "num", 50], [[12, 5], "PaintType", "num", 0], [[12, 6], "CharstringType", "num", 2], [[12, 7], "FontMatrix", ["num", "num", "num", "num", "num", "num"], [0.001, 0, 0, 0.001, 0, 0]], [13, "UniqueID", "num", null], [5, "FontBBox", ["num", "num", "num", "num"], [0, 0, 0, 0]], [[12, 8], "StrokeWidth", "num", 0], [14, "XUID", "array", null], [15, "charset", "offset", 0], [16, "Encoding", "offset", 0], [17, "CharStrings", "offset", 0], [18, "Private", ["offset", "offset"], null], [[12, 21], "PostScript", "sid", null], [[12, 22], "BaseFontName", "sid", null], [[12, 23], "BaseFontBlend", "delta", null], [[12, 31], "CIDFontVersion", "num", 0], [[12, 32], "CIDFontRevision", "num", 0], [[12, 33], "CIDFontType", "num", 0], [[12, 34], "CIDCount", "num", 8720], [[12, 35], "UIDBase", "num", null], [[12, 37], "FDSelect", "offset", null], [[12, 36], "FDArray", "offset", null], [[12, 38], "FontName", "sid", null]];
class CFFTopDict extends CFFDict {
  static get tables() {
    return (0, _util.shadow)(this, "tables", this.createTables(CFFTopDictLayout));
  }
  constructor(strings) {
    super(CFFTopDict.tables, strings);
    this.privateDict = null;
  }
}
exports.CFFTopDict = CFFTopDict;
const CFFPrivateDictLayout = [[6, "BlueValues", "delta", null], [7, "OtherBlues", "delta", null], [8, "FamilyBlues", "delta", null], [9, "FamilyOtherBlues", "delta", null], [[12, 9], "BlueScale", "num", 0.039625], [[12, 10], "BlueShift", "num", 7], [[12, 11], "BlueFuzz", "num", 1], [10, "StdHW", "num", null], [11, "StdVW", "num", null], [[12, 12], "StemSnapH", "delta", null], [[12, 13], "StemSnapV", "delta", null], [[12, 14], "ForceBold", "num", 0], [[12, 17], "LanguageGroup", "num", 0], [[12, 18], "ExpansionFactor", "num", 0.06], [[12, 19], "initialRandomSeed", "num", 0], [20, "defaultWidthX", "num", 0], [21, "nominalWidthX", "num", 0], [19, "Subrs", "offset", null]];
class CFFPrivateDict extends CFFDict {
  static get tables() {
    return (0, _util.shadow)(this, "tables", this.createTables(CFFPrivateDictLayout));
  }
  constructor(strings) {
    super(CFFPrivateDict.tables, strings);
    this.subrsIndex = null;
  }
}
exports.CFFPrivateDict = CFFPrivateDict;
const CFFCharsetPredefinedTypes = {
  ISO_ADOBE: 0,
  EXPERT: 1,
  EXPERT_SUBSET: 2
};
class CFFCharset {
  constructor(predefined, format, charset, raw) {
    this.predefined = predefined;
    this.format = format;
    this.charset = charset;
    this.raw = raw;
  }
}
exports.CFFCharset = CFFCharset;
class CFFEncoding {
  constructor(predefined, format, encoding, raw) {
    this.predefined = predefined;
    this.format = format;
    this.encoding = encoding;
    this.raw = raw;
  }
}
class CFFFDSelect {
  constructor(format, fdSelect) {
    this.format = format;
    this.fdSelect = fdSelect;
  }
  getFDIndex(glyphIndex) {
    if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) {
      return -1;
    }
    return this.fdSelect[glyphIndex];
  }
}
exports.CFFFDSelect = CFFFDSelect;
class CFFOffsetTracker {
  constructor() {
    this.offsets = Object.create(null);
  }
  isTracking(key) {
    return key in this.offsets;
  }
  track(key, location) {
    if (key in this.offsets) {
      throw new _util.FormatError(`Already tracking location of ${key}`);
    }
    this.offsets[key] = location;
  }
  offset(value) {
    for (const key in this.offsets) {
      this.offsets[key] += value;
    }
  }
  setEntryLocation(key, values, output) {
    if (!(key in this.offsets)) {
      throw new _util.FormatError(`Not tracking location of ${key}`);
    }
    const data = output.data;
    const dataOffset = this.offsets[key];
    const size = 5;
    for (let i = 0, ii = values.length; i < ii; ++i) {
      const offset0 = i * size + dataOffset;
      const offset1 = offset0 + 1;
      const offset2 = offset0 + 2;
      const offset3 = offset0 + 3;
      const offset4 = offset0 + 4;
      if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) {
        throw new _util.FormatError("writing to an offset that is not empty");
      }
      const value = values[i];
      data[offset0] = 0x1d;
      data[offset1] = value >> 24 & 0xff;
      data[offset2] = value >> 16 & 0xff;
      data[offset3] = value >> 8 & 0xff;
      data[offset4] = value & 0xff;
    }
  }
}
class CFFCompiler {
  constructor(cff) {
    this.cff = cff;
  }
  compile() {
    const cff = this.cff;
    const output = {
      data: [],
      length: 0,
      add(data) {
        try {
          this.data.push(...data);
        } catch {
          this.data = this.data.concat(data);
        }
        this.length = this.data.length;
      }
    };
    const header = this.compileHeader(cff.header);
    output.add(header);
    const nameIndex = this.compileNameIndex(cff.names);
    output.add(nameIndex);
    if (cff.isCIDFont) {
      if (cff.topDict.hasName("FontMatrix")) {
        const base = cff.topDict.getByName("FontMatrix");
        cff.topDict.removeByName("FontMatrix");
        for (const subDict of cff.fdArray) {
          let matrix = base.slice(0);
          if (subDict.hasName("FontMatrix")) {
            matrix = _util.Util.transform(matrix, subDict.getByName("FontMatrix"));
          }
          subDict.setByName("FontMatrix", matrix);
        }
      }
    }
    const xuid = cff.topDict.getByName("XUID");
    if (xuid?.length > 16) {
      cff.topDict.removeByName("XUID");
    }
    cff.topDict.setByName("charset", 0);
    let compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont);
    output.add(compiled.output);
    const topDictTracker = compiled.trackers[0];
    const stringIndex = this.compileStringIndex(cff.strings.strings);
    output.add(stringIndex);
    const globalSubrIndex = this.compileIndex(cff.globalSubrIndex);
    output.add(globalSubrIndex);
    if (cff.encoding && cff.topDict.hasName("Encoding")) {
      if (cff.encoding.predefined) {
        topDictTracker.setEntryLocation("Encoding", [cff.encoding.format], output);
      } else {
        const encoding = this.compileEncoding(cff.encoding);
        topDictTracker.setEntryLocation("Encoding", [output.length], output);
        output.add(encoding);
      }
    }
    const charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont);
    topDictTracker.setEntryLocation("charset", [output.length], output);
    output.add(charset);
    const charStrings = this.compileCharStrings(cff.charStrings);
    topDictTracker.setEntryLocation("CharStrings", [output.length], output);
    output.add(charStrings);
    if (cff.isCIDFont) {
      topDictTracker.setEntryLocation("FDSelect", [output.length], output);
      const fdSelect = this.compileFDSelect(cff.fdSelect);
      output.add(fdSelect);
      compiled = this.compileTopDicts(cff.fdArray, output.length, true);
      topDictTracker.setEntryLocation("FDArray", [output.length], output);
      output.add(compiled.output);
      const fontDictTrackers = compiled.trackers;
      this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output);
    }
    this.compilePrivateDicts([cff.topDict], [topDictTracker], output);
    output.add([0]);
    return output.data;
  }
  encodeNumber(value) {
    if (Number.isInteger(value)) {
      return this.encodeInteger(value);
    }
    return this.encodeFloat(value);
  }
  static get EncodeFloatRegExp() {
    return (0, _util.shadow)(this, "EncodeFloatRegExp", /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/);
  }
  encodeFloat(num) {
    let value = num.toString();
    const m = CFFCompiler.EncodeFloatRegExp.exec(value);
    if (m) {
      const epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length));
      value = (Math.round(num * epsilon) / epsilon).toString();
    }
    let nibbles = "";
    let i, ii;
    for (i = 0, ii = value.length; i < ii; ++i) {
      const a = value[i];
      if (a === "e") {
        nibbles += value[++i] === "-" ? "c" : "b";
      } else if (a === ".") {
        nibbles += "a";
      } else if (a === "-") {
        nibbles += "e";
      } else {
        nibbles += a;
      }
    }
    nibbles += nibbles.length & 1 ? "f" : "ff";
    const out = [30];
    for (i = 0, ii = nibbles.length; i < ii; i += 2) {
      out.push(parseInt(nibbles.substring(i, i + 2), 16));
    }
    return out;
  }
  encodeInteger(value) {
    let code;
    if (value >= -107 && value <= 107) {
      code = [value + 139];
    } else if (value >= 108 && value <= 1131) {
      value -= 108;
      code = [(value >> 8) + 247, value & 0xff];
    } else if (value >= -1131 && value <= -108) {
      value = -value - 108;
      code = [(value >> 8) + 251, value & 0xff];
    } else if (value >= -32768 && value <= 32767) {
      code = [0x1c, value >> 8 & 0xff, value & 0xff];
    } else {
      code = [0x1d, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff];
    }
    return code;
  }
  compileHeader(header) {
    return [header.major, header.minor, 4, header.offSize];
  }
  compileNameIndex(names) {
    const nameIndex = new CFFIndex();
    for (const name of names) {
      const length = Math.min(name.length, 127);
      let sanitizedName = new Array(length);
      for (let j = 0; j < length; j++) {
        let char = name[j];
        if (char < "!" || char > "~" || char === "[" || char === "]" || char === "(" || char === ")" || char === "{" || char === "}" || char === "<" || char === ">" || char === "/" || char === "%") {
          char = "_";
        }
        sanitizedName[j] = char;
      }
      sanitizedName = sanitizedName.join("");
      if (sanitizedName === "") {
        sanitizedName = "Bad_Font_Name";
      }
      nameIndex.add((0, _util.stringToBytes)(sanitizedName));
    }
    return this.compileIndex(nameIndex);
  }
  compileTopDicts(dicts, length, removeCidKeys) {
    const fontDictTrackers = [];
    let fdArrayIndex = new CFFIndex();
    for (const fontDict of dicts) {
      if (removeCidKeys) {
        fontDict.removeByName("CIDFontVersion");
        fontDict.removeByName("CIDFontRevision");
        fontDict.removeByName("CIDFontType");
        fontDict.removeByName("CIDCount");
        fontDict.removeByName("UIDBase");
      }
      const fontDictTracker = new CFFOffsetTracker();
      const fontDictData = this.compileDict(fontDict, fontDictTracker);
      fontDictTrackers.push(fontDictTracker);
      fdArrayIndex.add(fontDictData);
      fontDictTracker.offset(length);
    }
    fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers);
    return {
      trackers: fontDictTrackers,
      output: fdArrayIndex
    };
  }
  compilePrivateDicts(dicts, trackers, output) {
    for (let i = 0, ii = dicts.length; i < ii; ++i) {
      const fontDict = dicts[i];
      const privateDict = fontDict.privateDict;
      if (!privateDict || !fontDict.hasName("Private")) {
        throw new _util.FormatError("There must be a private dictionary.");
      }
      const privateDictTracker = new CFFOffsetTracker();
      const privateDictData = this.compileDict(privateDict, privateDictTracker);
      let outputLength = output.length;
      privateDictTracker.offset(outputLength);
      if (!privateDictData.length) {
        outputLength = 0;
      }
      trackers[i].setEntryLocation("Private", [privateDictData.length, outputLength], output);
      output.add(privateDictData);
      if (privateDict.subrsIndex && privateDict.hasName("Subrs")) {
        const subrs = this.compileIndex(privateDict.subrsIndex);
        privateDictTracker.setEntryLocation("Subrs", [privateDictData.length], output);
        output.add(subrs);
      }
    }
  }
  compileDict(dict, offsetTracker) {
    const out = [];
    for (const key of dict.order) {
      if (!(key in dict.values)) {
        continue;
      }
      let values = dict.values[key];
      let types = dict.types[key];
      if (!Array.isArray(types)) {
        types = [types];
      }
      if (!Array.isArray(values)) {
        values = [values];
      }
      if (values.length === 0) {
        continue;
      }
      for (let j = 0, jj = types.length; j < jj; ++j) {
        const type = types[j];
        const value = values[j];
        switch (type) {
          case "num":
          case "sid":
            out.push(...this.encodeNumber(value));
            break;
          case "offset":
            const name = dict.keyToNameMap[key];
            if (!offsetTracker.isTracking(name)) {
              offsetTracker.track(name, out.length);
            }
            out.push(0x1d, 0, 0, 0, 0);
            break;
          case "array":
          case "delta":
            out.push(...this.encodeNumber(value));
            for (let k = 1, kk = values.length; k < kk; ++k) {
              out.push(...this.encodeNumber(values[k]));
            }
            break;
          default:
            throw new _util.FormatError(`Unknown data type of ${type}`);
        }
      }
      out.push(...dict.opcodes[key]);
    }
    return out;
  }
  compileStringIndex(strings) {
    const stringIndex = new CFFIndex();
    for (const string of strings) {
      stringIndex.add((0, _util.stringToBytes)(string));
    }
    return this.compileIndex(stringIndex);
  }
  compileCharStrings(charStrings) {
    const charStringsIndex = new CFFIndex();
    for (let i = 0; i < charStrings.count; i++) {
      const glyph = charStrings.get(i);
      if (glyph.length === 0) {
        charStringsIndex.add(new Uint8Array([0x8b, 0x0e]));
        continue;
      }
      charStringsIndex.add(glyph);
    }
    return this.compileIndex(charStringsIndex);
  }
  compileCharset(charset, numGlyphs, strings, isCIDFont) {
    let out;
    const numGlyphsLessNotDef = numGlyphs - 1;
    if (isCIDFont) {
      out = new Uint8Array([2, 0, 0, numGlyphsLessNotDef >> 8 & 0xff, numGlyphsLessNotDef & 0xff]);
    } else {
      const length = 1 + numGlyphsLessNotDef * 2;
      out = new Uint8Array(length);
      out[0] = 0;
      let charsetIndex = 0;
      const numCharsets = charset.charset.length;
      let warned = false;
      for (let i = 1; i < out.length; i += 2) {
        let sid = 0;
        if (charsetIndex < numCharsets) {
          const name = charset.charset[charsetIndex++];
          sid = strings.getSID(name);
          if (sid === -1) {
            sid = 0;
            if (!warned) {
              warned = true;
              (0, _util.warn)(`Couldn't find ${name} in CFF strings`);
            }
          }
        }
        out[i] = sid >> 8 & 0xff;
        out[i + 1] = sid & 0xff;
      }
    }
    return this.compileTypedArray(out);
  }
  compileEncoding(encoding) {
    return this.compileTypedArray(encoding.raw);
  }
  compileFDSelect(fdSelect) {
    const format = fdSelect.format;
    let out, i;
    switch (format) {
      case 0:
        out = new Uint8Array(1 + fdSelect.fdSelect.length);
        out[0] = format;
        for (i = 0; i < fdSelect.fdSelect.length; i++) {
          out[i + 1] = fdSelect.fdSelect[i];
        }
        break;
      case 3:
        const start = 0;
        let lastFD = fdSelect.fdSelect[0];
        const ranges = [format, 0, 0, start >> 8 & 0xff, start & 0xff, lastFD];
        for (i = 1; i < fdSelect.fdSelect.length; i++) {
          const currentFD = fdSelect.fdSelect[i];
          if (currentFD !== lastFD) {
            ranges.push(i >> 8 & 0xff, i & 0xff, currentFD);
            lastFD = currentFD;
          }
        }
        const numRanges = (ranges.length - 3) / 3;
        ranges[1] = numRanges >> 8 & 0xff;
        ranges[2] = numRanges & 0xff;
        ranges.push(i >> 8 & 0xff, i & 0xff);
        out = new Uint8Array(ranges);
        break;
    }
    return this.compileTypedArray(out);
  }
  compileTypedArray(data) {
    return Array.from(data);
  }
  compileIndex(index, trackers = []) {
    const objects = index.objects;
    const count = objects.length;
    if (count === 0) {
      return [0, 0];
    }
    const data = [count >> 8 & 0xff, count & 0xff];
    let lastOffset = 1,
      i;
    for (i = 0; i < count; ++i) {
      lastOffset += objects[i].length;
    }
    let offsetSize;
    if (lastOffset < 0x100) {
      offsetSize = 1;
    } else if (lastOffset < 0x10000) {
      offsetSize = 2;
    } else if (lastOffset < 0x1000000) {
      offsetSize = 3;
    } else {
      offsetSize = 4;
    }
    data.push(offsetSize);
    let relativeOffset = 1;
    for (i = 0; i < count + 1; i++) {
      if (offsetSize === 1) {
        data.push(relativeOffset & 0xff);
      } else if (offsetSize === 2) {
        data.push(relativeOffset >> 8 & 0xff, relativeOffset & 0xff);
      } else if (offsetSize === 3) {
        data.push(relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff);
      } else {
        data.push(relativeOffset >>> 24 & 0xff, relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff);
      }
      if (objects[i]) {
        relativeOffset += objects[i].length;
      }
    }
    for (i = 0; i < count; i++) {
      if (trackers[i]) {
        trackers[i].offset(data.length);
      }
      data.push(...objects[i]);
    }
    return data;
  }
}
exports.CFFCompiler = CFFCompiler;

/***/ }),
/* 36 */
/***/ ((__unused_webpack_module, exports) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.ISOAdobeCharset = exports.ExpertSubsetCharset = exports.ExpertCharset = void 0;
const ISOAdobeCharset = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron"];
exports.ISOAdobeCharset = ISOAdobeCharset;
const ExpertCharset = [".notdef", "space", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"];
exports.ExpertCharset = ExpertCharset;
const ExpertSubsetCharset = [".notdef", "space", "dollaroldstyle", "dollarsuperior", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "hyphensuperior", "colonmonetary", "onefitted", "rupiah", "centoldstyle", "figuredash", "hypheninferior", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior"];
exports.ExpertSubsetCharset = ExpertSubsetCharset;

/***/ }),
/* 37 */
/***/ ((__unused_webpack_module, exports) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.ZapfDingbatsEncoding = exports.WinAnsiEncoding = exports.SymbolSetEncoding = exports.StandardEncoding = exports.MacRomanEncoding = exports.ExpertEncoding = void 0;
exports.getEncoding = getEncoding;
const ExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "", "", "", "isuperior", "", "", "lsuperior", "msuperior", "nsuperior", "osuperior", "", "", "rsuperior", "ssuperior", "tsuperior", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdownsmall", "centoldstyle", "Lslashsmall", "", "", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "", "Dotaccentsmall", "", "", "Macronsmall", "", "", "figuredash", "hypheninferior", "", "", "Ogoneksmall", "Ringsmall", "Cedillasmall", "", "", "", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"];
exports.ExpertEncoding = ExpertEncoding;
const MacExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "centoldstyle", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "", "threequartersemdash", "", "questionsmall", "", "", "", "", "Ethsmall", "", "", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "", "", "", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hypheninferior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "asuperior", "centsuperior", "", "", "", "", "Aacutesmall", "Agravesmall", "Acircumflexsmall", "Adieresissmall", "Atildesmall", "Aringsmall", "Ccedillasmall", "Eacutesmall", "Egravesmall", "Ecircumflexsmall", "Edieresissmall", "Iacutesmall", "Igravesmall", "Icircumflexsmall", "Idieresissmall", "Ntildesmall", "Oacutesmall", "Ogravesmall", "Ocircumflexsmall", "Odieresissmall", "Otildesmall", "Uacutesmall", "Ugravesmall", "Ucircumflexsmall", "Udieresissmall", "", "eightsuperior", "fourinferior", "threeinferior", "sixinferior", "eightinferior", "seveninferior", "Scaronsmall", "", "centinferior", "twoinferior", "", "Dieresissmall", "", "Caronsmall", "osuperior", "fiveinferior", "", "commainferior", "periodinferior", "Yacutesmall", "", "dollarinferior", "", "", "Thornsmall", "", "nineinferior", "zeroinferior", "Zcaronsmall", "AEsmall", "Oslashsmall", "questiondownsmall", "oneinferior", "Lslashsmall", "", "", "", "", "", "", "Cedillasmall", "", "", "", "", "", "OEsmall", "figuredash", "hyphensuperior", "", "", "", "", "exclamdownsmall", "", "Ydieresissmall", "", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "ninesuperior", "zerosuperior", "", "esuperior", "rsuperior", "tsuperior", "", "", "isuperior", "ssuperior", "dsuperior", "", "", "", "", "", "lsuperior", "Ogoneksmall", "Brevesmall", "Macronsmall", "bsuperior", "nsuperior", "msuperior", "commasuperior", "periodsuperior", "Dotaccentsmall", "Ringsmall", "", "", "", ""];
const MacRomanEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "space", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron"];
exports.MacRomanEncoding = MacRomanEncoding;
const StandardEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "", "endash", "dagger", "daggerdbl", "periodcentered", "", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "", "questiondown", "", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "", "ring", "cedilla", "", "hungarumlaut", "ogonek", "caron", "emdash", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "AE", "", "ordfeminine", "", "", "", "", "Lslash", "Oslash", "OE", "ordmasculine", "", "", "", "", "", "ae", "", "", "", "dotlessi", "", "", "lslash", "oslash", "oe", "germandbls", "", "", "", ""];
exports.StandardEncoding = StandardEncoding;
const WinAnsiEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "bullet", "Euro", "bullet", "quotesinglbase", "florin", "quotedblbase", "ellipsis", "dagger", "daggerdbl", "circumflex", "perthousand", "Scaron", "guilsinglleft", "OE", "bullet", "Zcaron", "bullet", "bullet", "quoteleft", "quoteright", "quotedblleft", "quotedblright", "bullet", "endash", "emdash", "tilde", "trademark", "scaron", "guilsinglright", "oe", "bullet", "zcaron", "Ydieresis", "space", "exclamdown", "cent", "sterling", "currency", "yen", "brokenbar", "section", "dieresis", "copyright", "ordfeminine", "guillemotleft", "logicalnot", "hyphen", "registered", "macron", "degree", "plusminus", "twosuperior", "threesuperior", "acute", "mu", "paragraph", "periodcentered", "cedilla", "onesuperior", "ordmasculine", "guillemotright", "onequarter", "onehalf", "threequarters", "questiondown", "Agrave", "Aacute", "Acircumflex", "Atilde", "Adieresis", "Aring", "AE", "Ccedilla", "Egrave", "Eacute", "Ecircumflex", "Edieresis", "Igrave", "Iacute", "Icircumflex", "Idieresis", "Eth", "Ntilde", "Ograve", "Oacute", "Ocircumflex", "Otilde", "Odieresis", "multiply", "Oslash", "Ugrave", "Uacute", "Ucircumflex", "Udieresis", "Yacute", "Thorn", "germandbls", "agrave", "aacute", "acircumflex", "atilde", "adieresis", "aring", "ae", "ccedilla", "egrave", "eacute", "ecircumflex", "edieresis", "igrave", "iacute", "icircumflex", "idieresis", "eth", "ntilde", "ograve", "oacute", "ocircumflex", "otilde", "odieresis", "divide", "oslash", "ugrave", "uacute", "ucircumflex", "udieresis", "yacute", "thorn", "ydieresis"];
exports.WinAnsiEncoding = WinAnsiEncoding;
const SymbolSetEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "universal", "numbersign", "existential", "percent", "ampersand", "suchthat", "parenleft", "parenright", "asteriskmath", "plus", "comma", "minus", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "congruent", "Alpha", "Beta", "Chi", "Delta", "Epsilon", "Phi", "Gamma", "Eta", "Iota", "theta1", "Kappa", "Lambda", "Mu", "Nu", "Omicron", "Pi", "Theta", "Rho", "Sigma", "Tau", "Upsilon", "sigma1", "Omega", "Xi", "Psi", "Zeta", "bracketleft", "therefore", "bracketright", "perpendicular", "underscore", "radicalex", "alpha", "beta", "chi", "delta", "epsilon", "phi", "gamma", "eta", "iota", "phi1", "kappa", "lambda", "mu", "nu", "omicron", "pi", "theta", "rho", "sigma", "tau", "upsilon", "omega1", "omega", "xi", "psi", "zeta", "braceleft", "bar", "braceright", "similar", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Euro", "Upsilon1", "minute", "lessequal", "fraction", "infinity", "florin", "club", "diamond", "heart", "spade", "arrowboth", "arrowleft", "arrowup", "arrowright", "arrowdown", "degree", "plusminus", "second", "greaterequal", "multiply", "proportional", "partialdiff", "bullet", "divide", "notequal", "equivalence", "approxequal", "ellipsis", "arrowvertex", "arrowhorizex", "carriagereturn", "aleph", "Ifraktur", "Rfraktur", "weierstrass", "circlemultiply", "circleplus", "emptyset", "intersection", "union", "propersuperset", "reflexsuperset", "notsubset", "propersubset", "reflexsubset", "element", "notelement", "angle", "gradient", "registerserif", "copyrightserif", "trademarkserif", "product", "radical", "dotmath", "logicalnot", "logicaland", "logicalor", "arrowdblboth", "arrowdblleft", "arrowdblup", "arrowdblright", "arrowdbldown", "lozenge", "angleleft", "registersans", "copyrightsans", "trademarksans", "summation", "parenlefttp", "parenleftex", "parenleftbt", "bracketlefttp", "bracketleftex", "bracketleftbt", "bracelefttp", "braceleftmid", "braceleftbt", "braceex", "", "angleright", "integral", "integraltp", "integralex", "integralbt", "parenrighttp", "parenrightex", "parenrightbt", "bracketrighttp", "bracketrightex", "bracketrightbt", "bracerighttp", "bracerightmid", "bracerightbt", ""];
exports.SymbolSetEncoding = SymbolSetEncoding;
const ZapfDingbatsEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "a1", "a2", "a202", "a3", "a4", "a5", "a119", "a118", "a117", "a11", "a12", "a13", "a14", "a15", "a16", "a105", "a17", "a18", "a19", "a20", "a21", "a22", "a23", "a24", "a25", "a26", "a27", "a28", "a6", "a7", "a8", "a9", "a10", "a29", "a30", "a31", "a32", "a33", "a34", "a35", "a36", "a37", "a38", "a39", "a40", "a41", "a42", "a43", "a44", "a45", "a46", "a47", "a48", "a49", "a50", "a51", "a52", "a53", "a54", "a55", "a56", "a57", "a58", "a59", "a60", "a61", "a62", "a63", "a64", "a65", "a66", "a67", "a68", "a69", "a70", "a71", "a72", "a73", "a74", "a203", "a75", "a204", "a76", "a77", "a78", "a79", "a81", "a82", "a83", "a84", "a97", "a98", "a99", "a100", "", "a89", "a90", "a93", "a94", "a91", "a92", "a205", "a85", "a206", "a86", "a87", "a88", "a95", "a96", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "a101", "a102", "a103", "a104", "a106", "a107", "a108", "a112", "a111", "a110", "a109", "a120", "a121", "a122", "a123", "a124", "a125", "a126", "a127", "a128", "a129", "a130", "a131", "a132", "a133", "a134", "a135", "a136", "a137", "a138", "a139", "a140", "a141", "a142", "a143", "a144", "a145", "a146", "a147", "a148", "a149", "a150", "a151", "a152", "a153", "a154", "a155", "a156", "a157", "a158", "a159", "a160", "a161", "a163", "a164", "a196", "a165", "a192", "a166", "a167", "a168", "a169", "a170", "a171", "a172", "a173", "a162", "a174", "a175", "a176", "a177", "a178", "a179", "a193", "a180", "a199", "a181", "a200", "a182", "", "a201", "a183", "a184", "a197", "a185", "a194", "a198", "a186", "a195", "a187", "a188", "a189", "a190", "a191", ""];
exports.ZapfDingbatsEncoding = ZapfDingbatsEncoding;
function getEncoding(encodingName) {
  switch (encodingName) {
    case "WinAnsiEncoding":
      return WinAnsiEncoding;
    case "StandardEncoding":
      return StandardEncoding;
    case "MacRomanEncoding":
      return MacRomanEncoding;
    case "SymbolSetEncoding":
      return SymbolSetEncoding;
    case "ZapfDingbatsEncoding":
      return ZapfDingbatsEncoding;
    case "ExpertEncoding":
      return ExpertEncoding;
    case "MacExpertEncoding":
      return MacExpertEncoding;
    default:
      return null;
  }
}

/***/ }),
/* 38 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.SEAC_ANALYSIS_ENABLED = exports.MacStandardGlyphOrdering = exports.FontFlags = void 0;
exports.normalizeFontName = normalizeFontName;
exports.recoverGlyphName = recoverGlyphName;
exports.type1FontGlyphMapping = type1FontGlyphMapping;
var _encodings = __w_pdfjs_require__(37);
var _glyphlist = __w_pdfjs_require__(39);
var _unicode = __w_pdfjs_require__(40);
var _util = __w_pdfjs_require__(2);
const SEAC_ANALYSIS_ENABLED = true;
exports.SEAC_ANALYSIS_ENABLED = SEAC_ANALYSIS_ENABLED;
const FontFlags = {
  FixedPitch: 1,
  Serif: 2,
  Symbolic: 4,
  Script: 8,
  Nonsymbolic: 32,
  Italic: 64,
  AllCap: 65536,
  SmallCap: 131072,
  ForceBold: 262144
};
exports.FontFlags = FontFlags;
const MacStandardGlyphOrdering = [".notdef", ".null", "nonmarkingreturn", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "nonbreakingspace", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "Lslash", "lslash", "Scaron", "scaron", "Zcaron", "zcaron", "brokenbar", "Eth", "eth", "Yacute", "yacute", "Thorn", "thorn", "minus", "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf", "onequarter", "threequarters", "franc", "Gbreve", "gbreve", "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute", "Ccaron", "ccaron", "dcroat"];
exports.MacStandardGlyphOrdering = MacStandardGlyphOrdering;
function recoverGlyphName(name, glyphsUnicodeMap) {
  if (glyphsUnicodeMap[name] !== undefined) {
    return name;
  }
  const unicode = (0, _unicode.getUnicodeForGlyph)(name, glyphsUnicodeMap);
  if (unicode !== -1) {
    for (const key in glyphsUnicodeMap) {
      if (glyphsUnicodeMap[key] === unicode) {
        return key;
      }
    }
  }
  (0, _util.info)("Unable to recover a standard glyph name for: " + name);
  return name;
}
function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) {
  const charCodeToGlyphId = Object.create(null);
  let glyphId, charCode, baseEncoding;
  const isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);
  if (properties.isInternalFont) {
    baseEncoding = builtInEncoding;
    for (charCode = 0; charCode < baseEncoding.length; charCode++) {
      glyphId = glyphNames.indexOf(baseEncoding[charCode]);
      charCodeToGlyphId[charCode] = glyphId >= 0 ? glyphId : 0;
    }
  } else if (properties.baseEncodingName) {
    baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName);
    for (charCode = 0; charCode < baseEncoding.length; charCode++) {
      glyphId = glyphNames.indexOf(baseEncoding[charCode]);
      charCodeToGlyphId[charCode] = glyphId >= 0 ? glyphId : 0;
    }
  } else if (isSymbolicFont) {
    for (charCode in builtInEncoding) {
      charCodeToGlyphId[charCode] = builtInEncoding[charCode];
    }
  } else {
    baseEncoding = _encodings.StandardEncoding;
    for (charCode = 0; charCode < baseEncoding.length; charCode++) {
      glyphId = glyphNames.indexOf(baseEncoding[charCode]);
      charCodeToGlyphId[charCode] = glyphId >= 0 ? glyphId : 0;
    }
  }
  const differences = properties.differences;
  let glyphsUnicodeMap;
  if (differences) {
    for (charCode in differences) {
      const glyphName = differences[charCode];
      glyphId = glyphNames.indexOf(glyphName);
      if (glyphId === -1) {
        if (!glyphsUnicodeMap) {
          glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
        }
        const standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);
        if (standardGlyphName !== glyphName) {
          glyphId = glyphNames.indexOf(standardGlyphName);
        }
      }
      charCodeToGlyphId[charCode] = glyphId >= 0 ? glyphId : 0;
    }
  }
  return charCodeToGlyphId;
}
function normalizeFontName(name) {
  return name.replaceAll(/[,_]/g, "-").replaceAll(/\s/g, "");
}

/***/ }),
/* 39 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.getGlyphsUnicode = exports.getDingbatsGlyphsUnicode = void 0;
var _core_utils = __w_pdfjs_require__(3);
const getGlyphsUnicode = (0, _core_utils.getLookupTableFactory)(function (t) {
  t.A = 0x0041;
  t.AE = 0x00c6;
  t.AEacute = 0x01fc;
  t.AEmacron = 0x01e2;
  t.AEsmall = 0xf7e6;
  t.Aacute = 0x00c1;
  t.Aacutesmall = 0xf7e1;
  t.Abreve = 0x0102;
  t.Abreveacute = 0x1eae;
  t.Abrevecyrillic = 0x04d0;
  t.Abrevedotbelow = 0x1eb6;
  t.Abrevegrave = 0x1eb0;
  t.Abrevehookabove = 0x1eb2;
  t.Abrevetilde = 0x1eb4;
  t.Acaron = 0x01cd;
  t.Acircle = 0x24b6;
  t.Acircumflex = 0x00c2;
  t.Acircumflexacute = 0x1ea4;
  t.Acircumflexdotbelow = 0x1eac;
  t.Acircumflexgrave = 0x1ea6;
  t.Acircumflexhookabove = 0x1ea8;
  t.Acircumflexsmall = 0xf7e2;
  t.Acircumflextilde = 0x1eaa;
  t.Acute = 0xf6c9;
  t.Acutesmall = 0xf7b4;
  t.Acyrillic = 0x0410;
  t.Adblgrave = 0x0200;
  t.Adieresis = 0x00c4;
  t.Adieresiscyrillic = 0x04d2;
  t.Adieresismacron = 0x01de;
  t.Adieresissmall = 0xf7e4;
  t.Adotbelow = 0x1ea0;
  t.Adotmacron = 0x01e0;
  t.Agrave = 0x00c0;
  t.Agravesmall = 0xf7e0;
  t.Ahookabove = 0x1ea2;
  t.Aiecyrillic = 0x04d4;
  t.Ainvertedbreve = 0x0202;
  t.Alpha = 0x0391;
  t.Alphatonos = 0x0386;
  t.Amacron = 0x0100;
  t.Amonospace = 0xff21;
  t.Aogonek = 0x0104;
  t.Aring = 0x00c5;
  t.Aringacute = 0x01fa;
  t.Aringbelow = 0x1e00;
  t.Aringsmall = 0xf7e5;
  t.Asmall = 0xf761;
  t.Atilde = 0x00c3;
  t.Atildesmall = 0xf7e3;
  t.Aybarmenian = 0x0531;
  t.B = 0x0042;
  t.Bcircle = 0x24b7;
  t.Bdotaccent = 0x1e02;
  t.Bdotbelow = 0x1e04;
  t.Becyrillic = 0x0411;
  t.Benarmenian = 0x0532;
  t.Beta = 0x0392;
  t.Bhook = 0x0181;
  t.Blinebelow = 0x1e06;
  t.Bmonospace = 0xff22;
  t.Brevesmall = 0xf6f4;
  t.Bsmall = 0xf762;
  t.Btopbar = 0x0182;
  t.C = 0x0043;
  t.Caarmenian = 0x053e;
  t.Cacute = 0x0106;
  t.Caron = 0xf6ca;
  t.Caronsmall = 0xf6f5;
  t.Ccaron = 0x010c;
  t.Ccedilla = 0x00c7;
  t.Ccedillaacute = 0x1e08;
  t.Ccedillasmall = 0xf7e7;
  t.Ccircle = 0x24b8;
  t.Ccircumflex = 0x0108;
  t.Cdot = 0x010a;
  t.Cdotaccent = 0x010a;
  t.Cedillasmall = 0xf7b8;
  t.Chaarmenian = 0x0549;
  t.Cheabkhasiancyrillic = 0x04bc;
  t.Checyrillic = 0x0427;
  t.Chedescenderabkhasiancyrillic = 0x04be;
  t.Chedescendercyrillic = 0x04b6;
  t.Chedieresiscyrillic = 0x04f4;
  t.Cheharmenian = 0x0543;
  t.Chekhakassiancyrillic = 0x04cb;
  t.Cheverticalstrokecyrillic = 0x04b8;
  t.Chi = 0x03a7;
  t.Chook = 0x0187;
  t.Circumflexsmall = 0xf6f6;
  t.Cmonospace = 0xff23;
  t.Coarmenian = 0x0551;
  t.Csmall = 0xf763;
  t.D = 0x0044;
  t.DZ = 0x01f1;
  t.DZcaron = 0x01c4;
  t.Daarmenian = 0x0534;
  t.Dafrican = 0x0189;
  t.Dcaron = 0x010e;
  t.Dcedilla = 0x1e10;
  t.Dcircle = 0x24b9;
  t.Dcircumflexbelow = 0x1e12;
  t.Dcroat = 0x0110;
  t.Ddotaccent = 0x1e0a;
  t.Ddotbelow = 0x1e0c;
  t.Decyrillic = 0x0414;
  t.Deicoptic = 0x03ee;
  t.Delta = 0x2206;
  t.Deltagreek = 0x0394;
  t.Dhook = 0x018a;
  t.Dieresis = 0xf6cb;
  t.DieresisAcute = 0xf6cc;
  t.DieresisGrave = 0xf6cd;
  t.Dieresissmall = 0xf7a8;
  t.Digammagreek = 0x03dc;
  t.Djecyrillic = 0x0402;
  t.Dlinebelow = 0x1e0e;
  t.Dmonospace = 0xff24;
  t.Dotaccentsmall = 0xf6f7;
  t.Dslash = 0x0110;
  t.Dsmall = 0xf764;
  t.Dtopbar = 0x018b;
  t.Dz = 0x01f2;
  t.Dzcaron = 0x01c5;
  t.Dzeabkhasiancyrillic = 0x04e0;
  t.Dzecyrillic = 0x0405;
  t.Dzhecyrillic = 0x040f;
  t.E = 0x0045;
  t.Eacute = 0x00c9;
  t.Eacutesmall = 0xf7e9;
  t.Ebreve = 0x0114;
  t.Ecaron = 0x011a;
  t.Ecedillabreve = 0x1e1c;
  t.Echarmenian = 0x0535;
  t.Ecircle = 0x24ba;
  t.Ecircumflex = 0x00ca;
  t.Ecircumflexacute = 0x1ebe;
  t.Ecircumflexbelow = 0x1e18;
  t.Ecircumflexdotbelow = 0x1ec6;
  t.Ecircumflexgrave = 0x1ec0;
  t.Ecircumflexhookabove = 0x1ec2;
  t.Ecircumflexsmall = 0xf7ea;
  t.Ecircumflextilde = 0x1ec4;
  t.Ecyrillic = 0x0404;
  t.Edblgrave = 0x0204;
  t.Edieresis = 0x00cb;
  t.Edieresissmall = 0xf7eb;
  t.Edot = 0x0116;
  t.Edotaccent = 0x0116;
  t.Edotbelow = 0x1eb8;
  t.Efcyrillic = 0x0424;
  t.Egrave = 0x00c8;
  t.Egravesmall = 0xf7e8;
  t.Eharmenian = 0x0537;
  t.Ehookabove = 0x1eba;
  t.Eightroman = 0x2167;
  t.Einvertedbreve = 0x0206;
  t.Eiotifiedcyrillic = 0x0464;
  t.Elcyrillic = 0x041b;
  t.Elevenroman = 0x216a;
  t.Emacron = 0x0112;
  t.Emacronacute = 0x1e16;
  t.Emacrongrave = 0x1e14;
  t.Emcyrillic = 0x041c;
  t.Emonospace = 0xff25;
  t.Encyrillic = 0x041d;
  t.Endescendercyrillic = 0x04a2;
  t.Eng = 0x014a;
  t.Enghecyrillic = 0x04a4;
  t.Enhookcyrillic = 0x04c7;
  t.Eogonek = 0x0118;
  t.Eopen = 0x0190;
  t.Epsilon = 0x0395;
  t.Epsilontonos = 0x0388;
  t.Ercyrillic = 0x0420;
  t.Ereversed = 0x018e;
  t.Ereversedcyrillic = 0x042d;
  t.Escyrillic = 0x0421;
  t.Esdescendercyrillic = 0x04aa;
  t.Esh = 0x01a9;
  t.Esmall = 0xf765;
  t.Eta = 0x0397;
  t.Etarmenian = 0x0538;
  t.Etatonos = 0x0389;
  t.Eth = 0x00d0;
  t.Ethsmall = 0xf7f0;
  t.Etilde = 0x1ebc;
  t.Etildebelow = 0x1e1a;
  t.Euro = 0x20ac;
  t.Ezh = 0x01b7;
  t.Ezhcaron = 0x01ee;
  t.Ezhreversed = 0x01b8;
  t.F = 0x0046;
  t.Fcircle = 0x24bb;
  t.Fdotaccent = 0x1e1e;
  t.Feharmenian = 0x0556;
  t.Feicoptic = 0x03e4;
  t.Fhook = 0x0191;
  t.Fitacyrillic = 0x0472;
  t.Fiveroman = 0x2164;
  t.Fmonospace = 0xff26;
  t.Fourroman = 0x2163;
  t.Fsmall = 0xf766;
  t.G = 0x0047;
  t.GBsquare = 0x3387;
  t.Gacute = 0x01f4;
  t.Gamma = 0x0393;
  t.Gammaafrican = 0x0194;
  t.Gangiacoptic = 0x03ea;
  t.Gbreve = 0x011e;
  t.Gcaron = 0x01e6;
  t.Gcedilla = 0x0122;
  t.Gcircle = 0x24bc;
  t.Gcircumflex = 0x011c;
  t.Gcommaaccent = 0x0122;
  t.Gdot = 0x0120;
  t.Gdotaccent = 0x0120;
  t.Gecyrillic = 0x0413;
  t.Ghadarmenian = 0x0542;
  t.Ghemiddlehookcyrillic = 0x0494;
  t.Ghestrokecyrillic = 0x0492;
  t.Gheupturncyrillic = 0x0490;
  t.Ghook = 0x0193;
  t.Gimarmenian = 0x0533;
  t.Gjecyrillic = 0x0403;
  t.Gmacron = 0x1e20;
  t.Gmonospace = 0xff27;
  t.Grave = 0xf6ce;
  t.Gravesmall = 0xf760;
  t.Gsmall = 0xf767;
  t.Gsmallhook = 0x029b;
  t.Gstroke = 0x01e4;
  t.H = 0x0048;
  t.H18533 = 0x25cf;
  t.H18543 = 0x25aa;
  t.H18551 = 0x25ab;
  t.H22073 = 0x25a1;
  t.HPsquare = 0x33cb;
  t.Haabkhasiancyrillic = 0x04a8;
  t.Hadescendercyrillic = 0x04b2;
  t.Hardsigncyrillic = 0x042a;
  t.Hbar = 0x0126;
  t.Hbrevebelow = 0x1e2a;
  t.Hcedilla = 0x1e28;
  t.Hcircle = 0x24bd;
  t.Hcircumflex = 0x0124;
  t.Hdieresis = 0x1e26;
  t.Hdotaccent = 0x1e22;
  t.Hdotbelow = 0x1e24;
  t.Hmonospace = 0xff28;
  t.Hoarmenian = 0x0540;
  t.Horicoptic = 0x03e8;
  t.Hsmall = 0xf768;
  t.Hungarumlaut = 0xf6cf;
  t.Hungarumlautsmall = 0xf6f8;
  t.Hzsquare = 0x3390;
  t.I = 0x0049;
  t.IAcyrillic = 0x042f;
  t.IJ = 0x0132;
  t.IUcyrillic = 0x042e;
  t.Iacute = 0x00cd;
  t.Iacutesmall = 0xf7ed;
  t.Ibreve = 0x012c;
  t.Icaron = 0x01cf;
  t.Icircle = 0x24be;
  t.Icircumflex = 0x00ce;
  t.Icircumflexsmall = 0xf7ee;
  t.Icyrillic = 0x0406;
  t.Idblgrave = 0x0208;
  t.Idieresis = 0x00cf;
  t.Idieresisacute = 0x1e2e;
  t.Idieresiscyrillic = 0x04e4;
  t.Idieresissmall = 0xf7ef;
  t.Idot = 0x0130;
  t.Idotaccent = 0x0130;
  t.Idotbelow = 0x1eca;
  t.Iebrevecyrillic = 0x04d6;
  t.Iecyrillic = 0x0415;
  t.Ifraktur = 0x2111;
  t.Igrave = 0x00cc;
  t.Igravesmall = 0xf7ec;
  t.Ihookabove = 0x1ec8;
  t.Iicyrillic = 0x0418;
  t.Iinvertedbreve = 0x020a;
  t.Iishortcyrillic = 0x0419;
  t.Imacron = 0x012a;
  t.Imacroncyrillic = 0x04e2;
  t.Imonospace = 0xff29;
  t.Iniarmenian = 0x053b;
  t.Iocyrillic = 0x0401;
  t.Iogonek = 0x012e;
  t.Iota = 0x0399;
  t.Iotaafrican = 0x0196;
  t.Iotadieresis = 0x03aa;
  t.Iotatonos = 0x038a;
  t.Ismall = 0xf769;
  t.Istroke = 0x0197;
  t.Itilde = 0x0128;
  t.Itildebelow = 0x1e2c;
  t.Izhitsacyrillic = 0x0474;
  t.Izhitsadblgravecyrillic = 0x0476;
  t.J = 0x004a;
  t.Jaarmenian = 0x0541;
  t.Jcircle = 0x24bf;
  t.Jcircumflex = 0x0134;
  t.Jecyrillic = 0x0408;
  t.Jheharmenian = 0x054b;
  t.Jmonospace = 0xff2a;
  t.Jsmall = 0xf76a;
  t.K = 0x004b;
  t.KBsquare = 0x3385;
  t.KKsquare = 0x33cd;
  t.Kabashkircyrillic = 0x04a0;
  t.Kacute = 0x1e30;
  t.Kacyrillic = 0x041a;
  t.Kadescendercyrillic = 0x049a;
  t.Kahookcyrillic = 0x04c3;
  t.Kappa = 0x039a;
  t.Kastrokecyrillic = 0x049e;
  t.Kaverticalstrokecyrillic = 0x049c;
  t.Kcaron = 0x01e8;
  t.Kcedilla = 0x0136;
  t.Kcircle = 0x24c0;
  t.Kcommaaccent = 0x0136;
  t.Kdotbelow = 0x1e32;
  t.Keharmenian = 0x0554;
  t.Kenarmenian = 0x053f;
  t.Khacyrillic = 0x0425;
  t.Kheicoptic = 0x03e6;
  t.Khook = 0x0198;
  t.Kjecyrillic = 0x040c;
  t.Klinebelow = 0x1e34;
  t.Kmonospace = 0xff2b;
  t.Koppacyrillic = 0x0480;
  t.Koppagreek = 0x03de;
  t.Ksicyrillic = 0x046e;
  t.Ksmall = 0xf76b;
  t.L = 0x004c;
  t.LJ = 0x01c7;
  t.LL = 0xf6bf;
  t.Lacute = 0x0139;
  t.Lambda = 0x039b;
  t.Lcaron = 0x013d;
  t.Lcedilla = 0x013b;
  t.Lcircle = 0x24c1;
  t.Lcircumflexbelow = 0x1e3c;
  t.Lcommaaccent = 0x013b;
  t.Ldot = 0x013f;
  t.Ldotaccent = 0x013f;
  t.Ldotbelow = 0x1e36;
  t.Ldotbelowmacron = 0x1e38;
  t.Liwnarmenian = 0x053c;
  t.Lj = 0x01c8;
  t.Ljecyrillic = 0x0409;
  t.Llinebelow = 0x1e3a;
  t.Lmonospace = 0xff2c;
  t.Lslash = 0x0141;
  t.Lslashsmall = 0xf6f9;
  t.Lsmall = 0xf76c;
  t.M = 0x004d;
  t.MBsquare = 0x3386;
  t.Macron = 0xf6d0;
  t.Macronsmall = 0xf7af;
  t.Macute = 0x1e3e;
  t.Mcircle = 0x24c2;
  t.Mdotaccent = 0x1e40;
  t.Mdotbelow = 0x1e42;
  t.Menarmenian = 0x0544;
  t.Mmonospace = 0xff2d;
  t.Msmall = 0xf76d;
  t.Mturned = 0x019c;
  t.Mu = 0x039c;
  t.N = 0x004e;
  t.NJ = 0x01ca;
  t.Nacute = 0x0143;
  t.Ncaron = 0x0147;
  t.Ncedilla = 0x0145;
  t.Ncircle = 0x24c3;
  t.Ncircumflexbelow = 0x1e4a;
  t.Ncommaaccent = 0x0145;
  t.Ndotaccent = 0x1e44;
  t.Ndotbelow = 0x1e46;
  t.Nhookleft = 0x019d;
  t.Nineroman = 0x2168;
  t.Nj = 0x01cb;
  t.Njecyrillic = 0x040a;
  t.Nlinebelow = 0x1e48;
  t.Nmonospace = 0xff2e;
  t.Nowarmenian = 0x0546;
  t.Nsmall = 0xf76e;
  t.Ntilde = 0x00d1;
  t.Ntildesmall = 0xf7f1;
  t.Nu = 0x039d;
  t.O = 0x004f;
  t.OE = 0x0152;
  t.OEsmall = 0xf6fa;
  t.Oacute = 0x00d3;
  t.Oacutesmall = 0xf7f3;
  t.Obarredcyrillic = 0x04e8;
  t.Obarreddieresiscyrillic = 0x04ea;
  t.Obreve = 0x014e;
  t.Ocaron = 0x01d1;
  t.Ocenteredtilde = 0x019f;
  t.Ocircle = 0x24c4;
  t.Ocircumflex = 0x00d4;
  t.Ocircumflexacute = 0x1ed0;
  t.Ocircumflexdotbelow = 0x1ed8;
  t.Ocircumflexgrave = 0x1ed2;
  t.Ocircumflexhookabove = 0x1ed4;
  t.Ocircumflexsmall = 0xf7f4;
  t.Ocircumflextilde = 0x1ed6;
  t.Ocyrillic = 0x041e;
  t.Odblacute = 0x0150;
  t.Odblgrave = 0x020c;
  t.Odieresis = 0x00d6;
  t.Odieresiscyrillic = 0x04e6;
  t.Odieresissmall = 0xf7f6;
  t.Odotbelow = 0x1ecc;
  t.Ogoneksmall = 0xf6fb;
  t.Ograve = 0x00d2;
  t.Ogravesmall = 0xf7f2;
  t.Oharmenian = 0x0555;
  t.Ohm = 0x2126;
  t.Ohookabove = 0x1ece;
  t.Ohorn = 0x01a0;
  t.Ohornacute = 0x1eda;
  t.Ohorndotbelow = 0x1ee2;
  t.Ohorngrave = 0x1edc;
  t.Ohornhookabove = 0x1ede;
  t.Ohorntilde = 0x1ee0;
  t.Ohungarumlaut = 0x0150;
  t.Oi = 0x01a2;
  t.Oinvertedbreve = 0x020e;
  t.Omacron = 0x014c;
  t.Omacronacute = 0x1e52;
  t.Omacrongrave = 0x1e50;
  t.Omega = 0x2126;
  t.Omegacyrillic = 0x0460;
  t.Omegagreek = 0x03a9;
  t.Omegaroundcyrillic = 0x047a;
  t.Omegatitlocyrillic = 0x047c;
  t.Omegatonos = 0x038f;
  t.Omicron = 0x039f;
  t.Omicrontonos = 0x038c;
  t.Omonospace = 0xff2f;
  t.Oneroman = 0x2160;
  t.Oogonek = 0x01ea;
  t.Oogonekmacron = 0x01ec;
  t.Oopen = 0x0186;
  t.Oslash = 0x00d8;
  t.Oslashacute = 0x01fe;
  t.Oslashsmall = 0xf7f8;
  t.Osmall = 0xf76f;
  t.Ostrokeacute = 0x01fe;
  t.Otcyrillic = 0x047e;
  t.Otilde = 0x00d5;
  t.Otildeacute = 0x1e4c;
  t.Otildedieresis = 0x1e4e;
  t.Otildesmall = 0xf7f5;
  t.P = 0x0050;
  t.Pacute = 0x1e54;
  t.Pcircle = 0x24c5;
  t.Pdotaccent = 0x1e56;
  t.Pecyrillic = 0x041f;
  t.Peharmenian = 0x054a;
  t.Pemiddlehookcyrillic = 0x04a6;
  t.Phi = 0x03a6;
  t.Phook = 0x01a4;
  t.Pi = 0x03a0;
  t.Piwrarmenian = 0x0553;
  t.Pmonospace = 0xff30;
  t.Psi = 0x03a8;
  t.Psicyrillic = 0x0470;
  t.Psmall = 0xf770;
  t.Q = 0x0051;
  t.Qcircle = 0x24c6;
  t.Qmonospace = 0xff31;
  t.Qsmall = 0xf771;
  t.R = 0x0052;
  t.Raarmenian = 0x054c;
  t.Racute = 0x0154;
  t.Rcaron = 0x0158;
  t.Rcedilla = 0x0156;
  t.Rcircle = 0x24c7;
  t.Rcommaaccent = 0x0156;
  t.Rdblgrave = 0x0210;
  t.Rdotaccent = 0x1e58;
  t.Rdotbelow = 0x1e5a;
  t.Rdotbelowmacron = 0x1e5c;
  t.Reharmenian = 0x0550;
  t.Rfraktur = 0x211c;
  t.Rho = 0x03a1;
  t.Ringsmall = 0xf6fc;
  t.Rinvertedbreve = 0x0212;
  t.Rlinebelow = 0x1e5e;
  t.Rmonospace = 0xff32;
  t.Rsmall = 0xf772;
  t.Rsmallinverted = 0x0281;
  t.Rsmallinvertedsuperior = 0x02b6;
  t.S = 0x0053;
  t.SF010000 = 0x250c;
  t.SF020000 = 0x2514;
  t.SF030000 = 0x2510;
  t.SF040000 = 0x2518;
  t.SF050000 = 0x253c;
  t.SF060000 = 0x252c;
  t.SF070000 = 0x2534;
  t.SF080000 = 0x251c;
  t.SF090000 = 0x2524;
  t.SF100000 = 0x2500;
  t.SF110000 = 0x2502;
  t.SF190000 = 0x2561;
  t.SF200000 = 0x2562;
  t.SF210000 = 0x2556;
  t.SF220000 = 0x2555;
  t.SF230000 = 0x2563;
  t.SF240000 = 0x2551;
  t.SF250000 = 0x2557;
  t.SF260000 = 0x255d;
  t.SF270000 = 0x255c;
  t.SF280000 = 0x255b;
  t.SF360000 = 0x255e;
  t.SF370000 = 0x255f;
  t.SF380000 = 0x255a;
  t.SF390000 = 0x2554;
  t.SF400000 = 0x2569;
  t.SF410000 = 0x2566;
  t.SF420000 = 0x2560;
  t.SF430000 = 0x2550;
  t.SF440000 = 0x256c;
  t.SF450000 = 0x2567;
  t.SF460000 = 0x2568;
  t.SF470000 = 0x2564;
  t.SF480000 = 0x2565;
  t.SF490000 = 0x2559;
  t.SF500000 = 0x2558;
  t.SF510000 = 0x2552;
  t.SF520000 = 0x2553;
  t.SF530000 = 0x256b;
  t.SF540000 = 0x256a;
  t.Sacute = 0x015a;
  t.Sacutedotaccent = 0x1e64;
  t.Sampigreek = 0x03e0;
  t.Scaron = 0x0160;
  t.Scarondotaccent = 0x1e66;
  t.Scaronsmall = 0xf6fd;
  t.Scedilla = 0x015e;
  t.Schwa = 0x018f;
  t.Schwacyrillic = 0x04d8;
  t.Schwadieresiscyrillic = 0x04da;
  t.Scircle = 0x24c8;
  t.Scircumflex = 0x015c;
  t.Scommaaccent = 0x0218;
  t.Sdotaccent = 0x1e60;
  t.Sdotbelow = 0x1e62;
  t.Sdotbelowdotaccent = 0x1e68;
  t.Seharmenian = 0x054d;
  t.Sevenroman = 0x2166;
  t.Shaarmenian = 0x0547;
  t.Shacyrillic = 0x0428;
  t.Shchacyrillic = 0x0429;
  t.Sheicoptic = 0x03e2;
  t.Shhacyrillic = 0x04ba;
  t.Shimacoptic = 0x03ec;
  t.Sigma = 0x03a3;
  t.Sixroman = 0x2165;
  t.Smonospace = 0xff33;
  t.Softsigncyrillic = 0x042c;
  t.Ssmall = 0xf773;
  t.Stigmagreek = 0x03da;
  t.T = 0x0054;
  t.Tau = 0x03a4;
  t.Tbar = 0x0166;
  t.Tcaron = 0x0164;
  t.Tcedilla = 0x0162;
  t.Tcircle = 0x24c9;
  t.Tcircumflexbelow = 0x1e70;
  t.Tcommaaccent = 0x0162;
  t.Tdotaccent = 0x1e6a;
  t.Tdotbelow = 0x1e6c;
  t.Tecyrillic = 0x0422;
  t.Tedescendercyrillic = 0x04ac;
  t.Tenroman = 0x2169;
  t.Tetsecyrillic = 0x04b4;
  t.Theta = 0x0398;
  t.Thook = 0x01ac;
  t.Thorn = 0x00de;
  t.Thornsmall = 0xf7fe;
  t.Threeroman = 0x2162;
  t.Tildesmall = 0xf6fe;
  t.Tiwnarmenian = 0x054f;
  t.Tlinebelow = 0x1e6e;
  t.Tmonospace = 0xff34;
  t.Toarmenian = 0x0539;
  t.Tonefive = 0x01bc;
  t.Tonesix = 0x0184;
  t.Tonetwo = 0x01a7;
  t.Tretroflexhook = 0x01ae;
  t.Tsecyrillic = 0x0426;
  t.Tshecyrillic = 0x040b;
  t.Tsmall = 0xf774;
  t.Twelveroman = 0x216b;
  t.Tworoman = 0x2161;
  t.U = 0x0055;
  t.Uacute = 0x00da;
  t.Uacutesmall = 0xf7fa;
  t.Ubreve = 0x016c;
  t.Ucaron = 0x01d3;
  t.Ucircle = 0x24ca;
  t.Ucircumflex = 0x00db;
  t.Ucircumflexbelow = 0x1e76;
  t.Ucircumflexsmall = 0xf7fb;
  t.Ucyrillic = 0x0423;
  t.Udblacute = 0x0170;
  t.Udblgrave = 0x0214;
  t.Udieresis = 0x00dc;
  t.Udieresisacute = 0x01d7;
  t.Udieresisbelow = 0x1e72;
  t.Udieresiscaron = 0x01d9;
  t.Udieresiscyrillic = 0x04f0;
  t.Udieresisgrave = 0x01db;
  t.Udieresismacron = 0x01d5;
  t.Udieresissmall = 0xf7fc;
  t.Udotbelow = 0x1ee4;
  t.Ugrave = 0x00d9;
  t.Ugravesmall = 0xf7f9;
  t.Uhookabove = 0x1ee6;
  t.Uhorn = 0x01af;
  t.Uhornacute = 0x1ee8;
  t.Uhorndotbelow = 0x1ef0;
  t.Uhorngrave = 0x1eea;
  t.Uhornhookabove = 0x1eec;
  t.Uhorntilde = 0x1eee;
  t.Uhungarumlaut = 0x0170;
  t.Uhungarumlautcyrillic = 0x04f2;
  t.Uinvertedbreve = 0x0216;
  t.Ukcyrillic = 0x0478;
  t.Umacron = 0x016a;
  t.Umacroncyrillic = 0x04ee;
  t.Umacrondieresis = 0x1e7a;
  t.Umonospace = 0xff35;
  t.Uogonek = 0x0172;
  t.Upsilon = 0x03a5;
  t.Upsilon1 = 0x03d2;
  t.Upsilonacutehooksymbolgreek = 0x03d3;
  t.Upsilonafrican = 0x01b1;
  t.Upsilondieresis = 0x03ab;
  t.Upsilondieresishooksymbolgreek = 0x03d4;
  t.Upsilonhooksymbol = 0x03d2;
  t.Upsilontonos = 0x038e;
  t.Uring = 0x016e;
  t.Ushortcyrillic = 0x040e;
  t.Usmall = 0xf775;
  t.Ustraightcyrillic = 0x04ae;
  t.Ustraightstrokecyrillic = 0x04b0;
  t.Utilde = 0x0168;
  t.Utildeacute = 0x1e78;
  t.Utildebelow = 0x1e74;
  t.V = 0x0056;
  t.Vcircle = 0x24cb;
  t.Vdotbelow = 0x1e7e;
  t.Vecyrillic = 0x0412;
  t.Vewarmenian = 0x054e;
  t.Vhook = 0x01b2;
  t.Vmonospace = 0xff36;
  t.Voarmenian = 0x0548;
  t.Vsmall = 0xf776;
  t.Vtilde = 0x1e7c;
  t.W = 0x0057;
  t.Wacute = 0x1e82;
  t.Wcircle = 0x24cc;
  t.Wcircumflex = 0x0174;
  t.Wdieresis = 0x1e84;
  t.Wdotaccent = 0x1e86;
  t.Wdotbelow = 0x1e88;
  t.Wgrave = 0x1e80;
  t.Wmonospace = 0xff37;
  t.Wsmall = 0xf777;
  t.X = 0x0058;
  t.Xcircle = 0x24cd;
  t.Xdieresis = 0x1e8c;
  t.Xdotaccent = 0x1e8a;
  t.Xeharmenian = 0x053d;
  t.Xi = 0x039e;
  t.Xmonospace = 0xff38;
  t.Xsmall = 0xf778;
  t.Y = 0x0059;
  t.Yacute = 0x00dd;
  t.Yacutesmall = 0xf7fd;
  t.Yatcyrillic = 0x0462;
  t.Ycircle = 0x24ce;
  t.Ycircumflex = 0x0176;
  t.Ydieresis = 0x0178;
  t.Ydieresissmall = 0xf7ff;
  t.Ydotaccent = 0x1e8e;
  t.Ydotbelow = 0x1ef4;
  t.Yericyrillic = 0x042b;
  t.Yerudieresiscyrillic = 0x04f8;
  t.Ygrave = 0x1ef2;
  t.Yhook = 0x01b3;
  t.Yhookabove = 0x1ef6;
  t.Yiarmenian = 0x0545;
  t.Yicyrillic = 0x0407;
  t.Yiwnarmenian = 0x0552;
  t.Ymonospace = 0xff39;
  t.Ysmall = 0xf779;
  t.Ytilde = 0x1ef8;
  t.Yusbigcyrillic = 0x046a;
  t.Yusbigiotifiedcyrillic = 0x046c;
  t.Yuslittlecyrillic = 0x0466;
  t.Yuslittleiotifiedcyrillic = 0x0468;
  t.Z = 0x005a;
  t.Zaarmenian = 0x0536;
  t.Zacute = 0x0179;
  t.Zcaron = 0x017d;
  t.Zcaronsmall = 0xf6ff;
  t.Zcircle = 0x24cf;
  t.Zcircumflex = 0x1e90;
  t.Zdot = 0x017b;
  t.Zdotaccent = 0x017b;
  t.Zdotbelow = 0x1e92;
  t.Zecyrillic = 0x0417;
  t.Zedescendercyrillic = 0x0498;
  t.Zedieresiscyrillic = 0x04de;
  t.Zeta = 0x0396;
  t.Zhearmenian = 0x053a;
  t.Zhebrevecyrillic = 0x04c1;
  t.Zhecyrillic = 0x0416;
  t.Zhedescendercyrillic = 0x0496;
  t.Zhedieresiscyrillic = 0x04dc;
  t.Zlinebelow = 0x1e94;
  t.Zmonospace = 0xff3a;
  t.Zsmall = 0xf77a;
  t.Zstroke = 0x01b5;
  t.a = 0x0061;
  t.aabengali = 0x0986;
  t.aacute = 0x00e1;
  t.aadeva = 0x0906;
  t.aagujarati = 0x0a86;
  t.aagurmukhi = 0x0a06;
  t.aamatragurmukhi = 0x0a3e;
  t.aarusquare = 0x3303;
  t.aavowelsignbengali = 0x09be;
  t.aavowelsigndeva = 0x093e;
  t.aavowelsigngujarati = 0x0abe;
  t.abbreviationmarkarmenian = 0x055f;
  t.abbreviationsigndeva = 0x0970;
  t.abengali = 0x0985;
  t.abopomofo = 0x311a;
  t.abreve = 0x0103;
  t.abreveacute = 0x1eaf;
  t.abrevecyrillic = 0x04d1;
  t.abrevedotbelow = 0x1eb7;
  t.abrevegrave = 0x1eb1;
  t.abrevehookabove = 0x1eb3;
  t.abrevetilde = 0x1eb5;
  t.acaron = 0x01ce;
  t.acircle = 0x24d0;
  t.acircumflex = 0x00e2;
  t.acircumflexacute = 0x1ea5;
  t.acircumflexdotbelow = 0x1ead;
  t.acircumflexgrave = 0x1ea7;
  t.acircumflexhookabove = 0x1ea9;
  t.acircumflextilde = 0x1eab;
  t.acute = 0x00b4;
  t.acutebelowcmb = 0x0317;
  t.acutecmb = 0x0301;
  t.acutecomb = 0x0301;
  t.acutedeva = 0x0954;
  t.acutelowmod = 0x02cf;
  t.acutetonecmb = 0x0341;
  t.acyrillic = 0x0430;
  t.adblgrave = 0x0201;
  t.addakgurmukhi = 0x0a71;
  t.adeva = 0x0905;
  t.adieresis = 0x00e4;
  t.adieresiscyrillic = 0x04d3;
  t.adieresismacron = 0x01df;
  t.adotbelow = 0x1ea1;
  t.adotmacron = 0x01e1;
  t.ae = 0x00e6;
  t.aeacute = 0x01fd;
  t.aekorean = 0x3150;
  t.aemacron = 0x01e3;
  t.afii00208 = 0x2015;
  t.afii08941 = 0x20a4;
  t.afii10017 = 0x0410;
  t.afii10018 = 0x0411;
  t.afii10019 = 0x0412;
  t.afii10020 = 0x0413;
  t.afii10021 = 0x0414;
  t.afii10022 = 0x0415;
  t.afii10023 = 0x0401;
  t.afii10024 = 0x0416;
  t.afii10025 = 0x0417;
  t.afii10026 = 0x0418;
  t.afii10027 = 0x0419;
  t.afii10028 = 0x041a;
  t.afii10029 = 0x041b;
  t.afii10030 = 0x041c;
  t.afii10031 = 0x041d;
  t.afii10032 = 0x041e;
  t.afii10033 = 0x041f;
  t.afii10034 = 0x0420;
  t.afii10035 = 0x0421;
  t.afii10036 = 0x0422;
  t.afii10037 = 0x0423;
  t.afii10038 = 0x0424;
  t.afii10039 = 0x0425;
  t.afii10040 = 0x0426;
  t.afii10041 = 0x0427;
  t.afii10042 = 0x0428;
  t.afii10043 = 0x0429;
  t.afii10044 = 0x042a;
  t.afii10045 = 0x042b;
  t.afii10046 = 0x042c;
  t.afii10047 = 0x042d;
  t.afii10048 = 0x042e;
  t.afii10049 = 0x042f;
  t.afii10050 = 0x0490;
  t.afii10051 = 0x0402;
  t.afii10052 = 0x0403;
  t.afii10053 = 0x0404;
  t.afii10054 = 0x0405;
  t.afii10055 = 0x0406;
  t.afii10056 = 0x0407;
  t.afii10057 = 0x0408;
  t.afii10058 = 0x0409;
  t.afii10059 = 0x040a;
  t.afii10060 = 0x040b;
  t.afii10061 = 0x040c;
  t.afii10062 = 0x040e;
  t.afii10063 = 0xf6c4;
  t.afii10064 = 0xf6c5;
  t.afii10065 = 0x0430;
  t.afii10066 = 0x0431;
  t.afii10067 = 0x0432;
  t.afii10068 = 0x0433;
  t.afii10069 = 0x0434;
  t.afii10070 = 0x0435;
  t.afii10071 = 0x0451;
  t.afii10072 = 0x0436;
  t.afii10073 = 0x0437;
  t.afii10074 = 0x0438;
  t.afii10075 = 0x0439;
  t.afii10076 = 0x043a;
  t.afii10077 = 0x043b;
  t.afii10078 = 0x043c;
  t.afii10079 = 0x043d;
  t.afii10080 = 0x043e;
  t.afii10081 = 0x043f;
  t.afii10082 = 0x0440;
  t.afii10083 = 0x0441;
  t.afii10084 = 0x0442;
  t.afii10085 = 0x0443;
  t.afii10086 = 0x0444;
  t.afii10087 = 0x0445;
  t.afii10088 = 0x0446;
  t.afii10089 = 0x0447;
  t.afii10090 = 0x0448;
  t.afii10091 = 0x0449;
  t.afii10092 = 0x044a;
  t.afii10093 = 0x044b;
  t.afii10094 = 0x044c;
  t.afii10095 = 0x044d;
  t.afii10096 = 0x044e;
  t.afii10097 = 0x044f;
  t.afii10098 = 0x0491;
  t.afii10099 = 0x0452;
  t.afii10100 = 0x0453;
  t.afii10101 = 0x0454;
  t.afii10102 = 0x0455;
  t.afii10103 = 0x0456;
  t.afii10104 = 0x0457;
  t.afii10105 = 0x0458;
  t.afii10106 = 0x0459;
  t.afii10107 = 0x045a;
  t.afii10108 = 0x045b;
  t.afii10109 = 0x045c;
  t.afii10110 = 0x045e;
  t.afii10145 = 0x040f;
  t.afii10146 = 0x0462;
  t.afii10147 = 0x0472;
  t.afii10148 = 0x0474;
  t.afii10192 = 0xf6c6;
  t.afii10193 = 0x045f;
  t.afii10194 = 0x0463;
  t.afii10195 = 0x0473;
  t.afii10196 = 0x0475;
  t.afii10831 = 0xf6c7;
  t.afii10832 = 0xf6c8;
  t.afii10846 = 0x04d9;
  t.afii299 = 0x200e;
  t.afii300 = 0x200f;
  t.afii301 = 0x200d;
  t.afii57381 = 0x066a;
  t.afii57388 = 0x060c;
  t.afii57392 = 0x0660;
  t.afii57393 = 0x0661;
  t.afii57394 = 0x0662;
  t.afii57395 = 0x0663;
  t.afii57396 = 0x0664;
  t.afii57397 = 0x0665;
  t.afii57398 = 0x0666;
  t.afii57399 = 0x0667;
  t.afii57400 = 0x0668;
  t.afii57401 = 0x0669;
  t.afii57403 = 0x061b;
  t.afii57407 = 0x061f;
  t.afii57409 = 0x0621;
  t.afii57410 = 0x0622;
  t.afii57411 = 0x0623;
  t.afii57412 = 0x0624;
  t.afii57413 = 0x0625;
  t.afii57414 = 0x0626;
  t.afii57415 = 0x0627;
  t.afii57416 = 0x0628;
  t.afii57417 = 0x0629;
  t.afii57418 = 0x062a;
  t.afii57419 = 0x062b;
  t.afii57420 = 0x062c;
  t.afii57421 = 0x062d;
  t.afii57422 = 0x062e;
  t.afii57423 = 0x062f;
  t.afii57424 = 0x0630;
  t.afii57425 = 0x0631;
  t.afii57426 = 0x0632;
  t.afii57427 = 0x0633;
  t.afii57428 = 0x0634;
  t.afii57429 = 0x0635;
  t.afii57430 = 0x0636;
  t.afii57431 = 0x0637;
  t.afii57432 = 0x0638;
  t.afii57433 = 0x0639;
  t.afii57434 = 0x063a;
  t.afii57440 = 0x0640;
  t.afii57441 = 0x0641;
  t.afii57442 = 0x0642;
  t.afii57443 = 0x0643;
  t.afii57444 = 0x0644;
  t.afii57445 = 0x0645;
  t.afii57446 = 0x0646;
  t.afii57448 = 0x0648;
  t.afii57449 = 0x0649;
  t.afii57450 = 0x064a;
  t.afii57451 = 0x064b;
  t.afii57452 = 0x064c;
  t.afii57453 = 0x064d;
  t.afii57454 = 0x064e;
  t.afii57455 = 0x064f;
  t.afii57456 = 0x0650;
  t.afii57457 = 0x0651;
  t.afii57458 = 0x0652;
  t.afii57470 = 0x0647;
  t.afii57505 = 0x06a4;
  t.afii57506 = 0x067e;
  t.afii57507 = 0x0686;
  t.afii57508 = 0x0698;
  t.afii57509 = 0x06af;
  t.afii57511 = 0x0679;
  t.afii57512 = 0x0688;
  t.afii57513 = 0x0691;
  t.afii57514 = 0x06ba;
  t.afii57519 = 0x06d2;
  t.afii57534 = 0x06d5;
  t.afii57636 = 0x20aa;
  t.afii57645 = 0x05be;
  t.afii57658 = 0x05c3;
  t.afii57664 = 0x05d0;
  t.afii57665 = 0x05d1;
  t.afii57666 = 0x05d2;
  t.afii57667 = 0x05d3;
  t.afii57668 = 0x05d4;
  t.afii57669 = 0x05d5;
  t.afii57670 = 0x05d6;
  t.afii57671 = 0x05d7;
  t.afii57672 = 0x05d8;
  t.afii57673 = 0x05d9;
  t.afii57674 = 0x05da;
  t.afii57675 = 0x05db;
  t.afii57676 = 0x05dc;
  t.afii57677 = 0x05dd;
  t.afii57678 = 0x05de;
  t.afii57679 = 0x05df;
  t.afii57680 = 0x05e0;
  t.afii57681 = 0x05e1;
  t.afii57682 = 0x05e2;
  t.afii57683 = 0x05e3;
  t.afii57684 = 0x05e4;
  t.afii57685 = 0x05e5;
  t.afii57686 = 0x05e6;
  t.afii57687 = 0x05e7;
  t.afii57688 = 0x05e8;
  t.afii57689 = 0x05e9;
  t.afii57690 = 0x05ea;
  t.afii57694 = 0xfb2a;
  t.afii57695 = 0xfb2b;
  t.afii57700 = 0xfb4b;
  t.afii57705 = 0xfb1f;
  t.afii57716 = 0x05f0;
  t.afii57717 = 0x05f1;
  t.afii57718 = 0x05f2;
  t.afii57723 = 0xfb35;
  t.afii57793 = 0x05b4;
  t.afii57794 = 0x05b5;
  t.afii57795 = 0x05b6;
  t.afii57796 = 0x05bb;
  t.afii57797 = 0x05b8;
  t.afii57798 = 0x05b7;
  t.afii57799 = 0x05b0;
  t.afii57800 = 0x05b2;
  t.afii57801 = 0x05b1;
  t.afii57802 = 0x05b3;
  t.afii57803 = 0x05c2;
  t.afii57804 = 0x05c1;
  t.afii57806 = 0x05b9;
  t.afii57807 = 0x05bc;
  t.afii57839 = 0x05bd;
  t.afii57841 = 0x05bf;
  t.afii57842 = 0x05c0;
  t.afii57929 = 0x02bc;
  t.afii61248 = 0x2105;
  t.afii61289 = 0x2113;
  t.afii61352 = 0x2116;
  t.afii61573 = 0x202c;
  t.afii61574 = 0x202d;
  t.afii61575 = 0x202e;
  t.afii61664 = 0x200c;
  t.afii63167 = 0x066d;
  t.afii64937 = 0x02bd;
  t.agrave = 0x00e0;
  t.agujarati = 0x0a85;
  t.agurmukhi = 0x0a05;
  t.ahiragana = 0x3042;
  t.ahookabove = 0x1ea3;
  t.aibengali = 0x0990;
  t.aibopomofo = 0x311e;
  t.aideva = 0x0910;
  t.aiecyrillic = 0x04d5;
  t.aigujarati = 0x0a90;
  t.aigurmukhi = 0x0a10;
  t.aimatragurmukhi = 0x0a48;
  t.ainarabic = 0x0639;
  t.ainfinalarabic = 0xfeca;
  t.aininitialarabic = 0xfecb;
  t.ainmedialarabic = 0xfecc;
  t.ainvertedbreve = 0x0203;
  t.aivowelsignbengali = 0x09c8;
  t.aivowelsigndeva = 0x0948;
  t.aivowelsigngujarati = 0x0ac8;
  t.akatakana = 0x30a2;
  t.akatakanahalfwidth = 0xff71;
  t.akorean = 0x314f;
  t.alef = 0x05d0;
  t.alefarabic = 0x0627;
  t.alefdageshhebrew = 0xfb30;
  t.aleffinalarabic = 0xfe8e;
  t.alefhamzaabovearabic = 0x0623;
  t.alefhamzaabovefinalarabic = 0xfe84;
  t.alefhamzabelowarabic = 0x0625;
  t.alefhamzabelowfinalarabic = 0xfe88;
  t.alefhebrew = 0x05d0;
  t.aleflamedhebrew = 0xfb4f;
  t.alefmaddaabovearabic = 0x0622;
  t.alefmaddaabovefinalarabic = 0xfe82;
  t.alefmaksuraarabic = 0x0649;
  t.alefmaksurafinalarabic = 0xfef0;
  t.alefmaksurainitialarabic = 0xfef3;
  t.alefmaksuramedialarabic = 0xfef4;
  t.alefpatahhebrew = 0xfb2e;
  t.alefqamatshebrew = 0xfb2f;
  t.aleph = 0x2135;
  t.allequal = 0x224c;
  t.alpha = 0x03b1;
  t.alphatonos = 0x03ac;
  t.amacron = 0x0101;
  t.amonospace = 0xff41;
  t.ampersand = 0x0026;
  t.ampersandmonospace = 0xff06;
  t.ampersandsmall = 0xf726;
  t.amsquare = 0x33c2;
  t.anbopomofo = 0x3122;
  t.angbopomofo = 0x3124;
  t.angbracketleft = 0x3008;
  t.angbracketright = 0x3009;
  t.angkhankhuthai = 0x0e5a;
  t.angle = 0x2220;
  t.anglebracketleft = 0x3008;
  t.anglebracketleftvertical = 0xfe3f;
  t.anglebracketright = 0x3009;
  t.anglebracketrightvertical = 0xfe40;
  t.angleleft = 0x2329;
  t.angleright = 0x232a;
  t.angstrom = 0x212b;
  t.anoteleia = 0x0387;
  t.anudattadeva = 0x0952;
  t.anusvarabengali = 0x0982;
  t.anusvaradeva = 0x0902;
  t.anusvaragujarati = 0x0a82;
  t.aogonek = 0x0105;
  t.apaatosquare = 0x3300;
  t.aparen = 0x249c;
  t.apostrophearmenian = 0x055a;
  t.apostrophemod = 0x02bc;
  t.apple = 0xf8ff;
  t.approaches = 0x2250;
  t.approxequal = 0x2248;
  t.approxequalorimage = 0x2252;
  t.approximatelyequal = 0x2245;
  t.araeaekorean = 0x318e;
  t.araeakorean = 0x318d;
  t.arc = 0x2312;
  t.arighthalfring = 0x1e9a;
  t.aring = 0x00e5;
  t.aringacute = 0x01fb;
  t.aringbelow = 0x1e01;
  t.arrowboth = 0x2194;
  t.arrowdashdown = 0x21e3;
  t.arrowdashleft = 0x21e0;
  t.arrowdashright = 0x21e2;
  t.arrowdashup = 0x21e1;
  t.arrowdblboth = 0x21d4;
  t.arrowdbldown = 0x21d3;
  t.arrowdblleft = 0x21d0;
  t.arrowdblright = 0x21d2;
  t.arrowdblup = 0x21d1;
  t.arrowdown = 0x2193;
  t.arrowdownleft = 0x2199;
  t.arrowdownright = 0x2198;
  t.arrowdownwhite = 0x21e9;
  t.arrowheaddownmod = 0x02c5;
  t.arrowheadleftmod = 0x02c2;
  t.arrowheadrightmod = 0x02c3;
  t.arrowheadupmod = 0x02c4;
  t.arrowhorizex = 0xf8e7;
  t.arrowleft = 0x2190;
  t.arrowleftdbl = 0x21d0;
  t.arrowleftdblstroke = 0x21cd;
  t.arrowleftoverright = 0x21c6;
  t.arrowleftwhite = 0x21e6;
  t.arrowright = 0x2192;
  t.arrowrightdblstroke = 0x21cf;
  t.arrowrightheavy = 0x279e;
  t.arrowrightoverleft = 0x21c4;
  t.arrowrightwhite = 0x21e8;
  t.arrowtableft = 0x21e4;
  t.arrowtabright = 0x21e5;
  t.arrowup = 0x2191;
  t.arrowupdn = 0x2195;
  t.arrowupdnbse = 0x21a8;
  t.arrowupdownbase = 0x21a8;
  t.arrowupleft = 0x2196;
  t.arrowupleftofdown = 0x21c5;
  t.arrowupright = 0x2197;
  t.arrowupwhite = 0x21e7;
  t.arrowvertex = 0xf8e6;
  t.asciicircum = 0x005e;
  t.asciicircummonospace = 0xff3e;
  t.asciitilde = 0x007e;
  t.asciitildemonospace = 0xff5e;
  t.ascript = 0x0251;
  t.ascriptturned = 0x0252;
  t.asmallhiragana = 0x3041;
  t.asmallkatakana = 0x30a1;
  t.asmallkatakanahalfwidth = 0xff67;
  t.asterisk = 0x002a;
  t.asteriskaltonearabic = 0x066d;
  t.asteriskarabic = 0x066d;
  t.asteriskmath = 0x2217;
  t.asteriskmonospace = 0xff0a;
  t.asterisksmall = 0xfe61;
  t.asterism = 0x2042;
  t.asuperior = 0xf6e9;
  t.asymptoticallyequal = 0x2243;
  t.at = 0x0040;
  t.atilde = 0x00e3;
  t.atmonospace = 0xff20;
  t.atsmall = 0xfe6b;
  t.aturned = 0x0250;
  t.aubengali = 0x0994;
  t.aubopomofo = 0x3120;
  t.audeva = 0x0914;
  t.augujarati = 0x0a94;
  t.augurmukhi = 0x0a14;
  t.aulengthmarkbengali = 0x09d7;
  t.aumatragurmukhi = 0x0a4c;
  t.auvowelsignbengali = 0x09cc;
  t.auvowelsigndeva = 0x094c;
  t.auvowelsigngujarati = 0x0acc;
  t.avagrahadeva = 0x093d;
  t.aybarmenian = 0x0561;
  t.ayin = 0x05e2;
  t.ayinaltonehebrew = 0xfb20;
  t.ayinhebrew = 0x05e2;
  t.b = 0x0062;
  t.babengali = 0x09ac;
  t.backslash = 0x005c;
  t.backslashmonospace = 0xff3c;
  t.badeva = 0x092c;
  t.bagujarati = 0x0aac;
  t.bagurmukhi = 0x0a2c;
  t.bahiragana = 0x3070;
  t.bahtthai = 0x0e3f;
  t.bakatakana = 0x30d0;
  t.bar = 0x007c;
  t.barmonospace = 0xff5c;
  t.bbopomofo = 0x3105;
  t.bcircle = 0x24d1;
  t.bdotaccent = 0x1e03;
  t.bdotbelow = 0x1e05;
  t.beamedsixteenthnotes = 0x266c;
  t.because = 0x2235;
  t.becyrillic = 0x0431;
  t.beharabic = 0x0628;
  t.behfinalarabic = 0xfe90;
  t.behinitialarabic = 0xfe91;
  t.behiragana = 0x3079;
  t.behmedialarabic = 0xfe92;
  t.behmeeminitialarabic = 0xfc9f;
  t.behmeemisolatedarabic = 0xfc08;
  t.behnoonfinalarabic = 0xfc6d;
  t.bekatakana = 0x30d9;
  t.benarmenian = 0x0562;
  t.bet = 0x05d1;
  t.beta = 0x03b2;
  t.betasymbolgreek = 0x03d0;
  t.betdagesh = 0xfb31;
  t.betdageshhebrew = 0xfb31;
  t.bethebrew = 0x05d1;
  t.betrafehebrew = 0xfb4c;
  t.bhabengali = 0x09ad;
  t.bhadeva = 0x092d;
  t.bhagujarati = 0x0aad;
  t.bhagurmukhi = 0x0a2d;
  t.bhook = 0x0253;
  t.bihiragana = 0x3073;
  t.bikatakana = 0x30d3;
  t.bilabialclick = 0x0298;
  t.bindigurmukhi = 0x0a02;
  t.birusquare = 0x3331;
  t.blackcircle = 0x25cf;
  t.blackdiamond = 0x25c6;
  t.blackdownpointingtriangle = 0x25bc;
  t.blackleftpointingpointer = 0x25c4;
  t.blackleftpointingtriangle = 0x25c0;
  t.blacklenticularbracketleft = 0x3010;
  t.blacklenticularbracketleftvertical = 0xfe3b;
  t.blacklenticularbracketright = 0x3011;
  t.blacklenticularbracketrightvertical = 0xfe3c;
  t.blacklowerlefttriangle = 0x25e3;
  t.blacklowerrighttriangle = 0x25e2;
  t.blackrectangle = 0x25ac;
  t.blackrightpointingpointer = 0x25ba;
  t.blackrightpointingtriangle = 0x25b6;
  t.blacksmallsquare = 0x25aa;
  t.blacksmilingface = 0x263b;
  t.blacksquare = 0x25a0;
  t.blackstar = 0x2605;
  t.blackupperlefttriangle = 0x25e4;
  t.blackupperrighttriangle = 0x25e5;
  t.blackuppointingsmalltriangle = 0x25b4;
  t.blackuppointingtriangle = 0x25b2;
  t.blank = 0x2423;
  t.blinebelow = 0x1e07;
  t.block = 0x2588;
  t.bmonospace = 0xff42;
  t.bobaimaithai = 0x0e1a;
  t.bohiragana = 0x307c;
  t.bokatakana = 0x30dc;
  t.bparen = 0x249d;
  t.bqsquare = 0x33c3;
  t.braceex = 0xf8f4;
  t.braceleft = 0x007b;
  t.braceleftbt = 0xf8f3;
  t.braceleftmid = 0xf8f2;
  t.braceleftmonospace = 0xff5b;
  t.braceleftsmall = 0xfe5b;
  t.bracelefttp = 0xf8f1;
  t.braceleftvertical = 0xfe37;
  t.braceright = 0x007d;
  t.bracerightbt = 0xf8fe;
  t.bracerightmid = 0xf8fd;
  t.bracerightmonospace = 0xff5d;
  t.bracerightsmall = 0xfe5c;
  t.bracerighttp = 0xf8fc;
  t.bracerightvertical = 0xfe38;
  t.bracketleft = 0x005b;
  t.bracketleftbt = 0xf8f0;
  t.bracketleftex = 0xf8ef;
  t.bracketleftmonospace = 0xff3b;
  t.bracketlefttp = 0xf8ee;
  t.bracketright = 0x005d;
  t.bracketrightbt = 0xf8fb;
  t.bracketrightex = 0xf8fa;
  t.bracketrightmonospace = 0xff3d;
  t.bracketrighttp = 0xf8f9;
  t.breve = 0x02d8;
  t.brevebelowcmb = 0x032e;
  t.brevecmb = 0x0306;
  t.breveinvertedbelowcmb = 0x032f;
  t.breveinvertedcmb = 0x0311;
  t.breveinverteddoublecmb = 0x0361;
  t.bridgebelowcmb = 0x032a;
  t.bridgeinvertedbelowcmb = 0x033a;
  t.brokenbar = 0x00a6;
  t.bstroke = 0x0180;
  t.bsuperior = 0xf6ea;
  t.btopbar = 0x0183;
  t.buhiragana = 0x3076;
  t.bukatakana = 0x30d6;
  t.bullet = 0x2022;
  t.bulletinverse = 0x25d8;
  t.bulletoperator = 0x2219;
  t.bullseye = 0x25ce;
  t.c = 0x0063;
  t.caarmenian = 0x056e;
  t.cabengali = 0x099a;
  t.cacute = 0x0107;
  t.cadeva = 0x091a;
  t.cagujarati = 0x0a9a;
  t.cagurmukhi = 0x0a1a;
  t.calsquare = 0x3388;
  t.candrabindubengali = 0x0981;
  t.candrabinducmb = 0x0310;
  t.candrabindudeva = 0x0901;
  t.candrabindugujarati = 0x0a81;
  t.capslock = 0x21ea;
  t.careof = 0x2105;
  t.caron = 0x02c7;
  t.caronbelowcmb = 0x032c;
  t.caroncmb = 0x030c;
  t.carriagereturn = 0x21b5;
  t.cbopomofo = 0x3118;
  t.ccaron = 0x010d;
  t.ccedilla = 0x00e7;
  t.ccedillaacute = 0x1e09;
  t.ccircle = 0x24d2;
  t.ccircumflex = 0x0109;
  t.ccurl = 0x0255;
  t.cdot = 0x010b;
  t.cdotaccent = 0x010b;
  t.cdsquare = 0x33c5;
  t.cedilla = 0x00b8;
  t.cedillacmb = 0x0327;
  t.cent = 0x00a2;
  t.centigrade = 0x2103;
  t.centinferior = 0xf6df;
  t.centmonospace = 0xffe0;
  t.centoldstyle = 0xf7a2;
  t.centsuperior = 0xf6e0;
  t.chaarmenian = 0x0579;
  t.chabengali = 0x099b;
  t.chadeva = 0x091b;
  t.chagujarati = 0x0a9b;
  t.chagurmukhi = 0x0a1b;
  t.chbopomofo = 0x3114;
  t.cheabkhasiancyrillic = 0x04bd;
  t.checkmark = 0x2713;
  t.checyrillic = 0x0447;
  t.chedescenderabkhasiancyrillic = 0x04bf;
  t.chedescendercyrillic = 0x04b7;
  t.chedieresiscyrillic = 0x04f5;
  t.cheharmenian = 0x0573;
  t.chekhakassiancyrillic = 0x04cc;
  t.cheverticalstrokecyrillic = 0x04b9;
  t.chi = 0x03c7;
  t.chieuchacirclekorean = 0x3277;
  t.chieuchaparenkorean = 0x3217;
  t.chieuchcirclekorean = 0x3269;
  t.chieuchkorean = 0x314a;
  t.chieuchparenkorean = 0x3209;
  t.chochangthai = 0x0e0a;
  t.chochanthai = 0x0e08;
  t.chochingthai = 0x0e09;
  t.chochoethai = 0x0e0c;
  t.chook = 0x0188;
  t.cieucacirclekorean = 0x3276;
  t.cieucaparenkorean = 0x3216;
  t.cieuccirclekorean = 0x3268;
  t.cieuckorean = 0x3148;
  t.cieucparenkorean = 0x3208;
  t.cieucuparenkorean = 0x321c;
  t.circle = 0x25cb;
  t.circlecopyrt = 0x00a9;
  t.circlemultiply = 0x2297;
  t.circleot = 0x2299;
  t.circleplus = 0x2295;
  t.circlepostalmark = 0x3036;
  t.circlewithlefthalfblack = 0x25d0;
  t.circlewithrighthalfblack = 0x25d1;
  t.circumflex = 0x02c6;
  t.circumflexbelowcmb = 0x032d;
  t.circumflexcmb = 0x0302;
  t.clear = 0x2327;
  t.clickalveolar = 0x01c2;
  t.clickdental = 0x01c0;
  t.clicklateral = 0x01c1;
  t.clickretroflex = 0x01c3;
  t.club = 0x2663;
  t.clubsuitblack = 0x2663;
  t.clubsuitwhite = 0x2667;
  t.cmcubedsquare = 0x33a4;
  t.cmonospace = 0xff43;
  t.cmsquaredsquare = 0x33a0;
  t.coarmenian = 0x0581;
  t.colon = 0x003a;
  t.colonmonetary = 0x20a1;
  t.colonmonospace = 0xff1a;
  t.colonsign = 0x20a1;
  t.colonsmall = 0xfe55;
  t.colontriangularhalfmod = 0x02d1;
  t.colontriangularmod = 0x02d0;
  t.comma = 0x002c;
  t.commaabovecmb = 0x0313;
  t.commaaboverightcmb = 0x0315;
  t.commaaccent = 0xf6c3;
  t.commaarabic = 0x060c;
  t.commaarmenian = 0x055d;
  t.commainferior = 0xf6e1;
  t.commamonospace = 0xff0c;
  t.commareversedabovecmb = 0x0314;
  t.commareversedmod = 0x02bd;
  t.commasmall = 0xfe50;
  t.commasuperior = 0xf6e2;
  t.commaturnedabovecmb = 0x0312;
  t.commaturnedmod = 0x02bb;
  t.compass = 0x263c;
  t.congruent = 0x2245;
  t.contourintegral = 0x222e;
  t.control = 0x2303;
  t.controlACK = 0x0006;
  t.controlBEL = 0x0007;
  t.controlBS = 0x0008;
  t.controlCAN = 0x0018;
  t.controlCR = 0x000d;
  t.controlDC1 = 0x0011;
  t.controlDC2 = 0x0012;
  t.controlDC3 = 0x0013;
  t.controlDC4 = 0x0014;
  t.controlDEL = 0x007f;
  t.controlDLE = 0x0010;
  t.controlEM = 0x0019;
  t.controlENQ = 0x0005;
  t.controlEOT = 0x0004;
  t.controlESC = 0x001b;
  t.controlETB = 0x0017;
  t.controlETX = 0x0003;
  t.controlFF = 0x000c;
  t.controlFS = 0x001c;
  t.controlGS = 0x001d;
  t.controlHT = 0x0009;
  t.controlLF = 0x000a;
  t.controlNAK = 0x0015;
  t.controlNULL = 0x0000;
  t.controlRS = 0x001e;
  t.controlSI = 0x000f;
  t.controlSO = 0x000e;
  t.controlSOT = 0x0002;
  t.controlSTX = 0x0001;
  t.controlSUB = 0x001a;
  t.controlSYN = 0x0016;
  t.controlUS = 0x001f;
  t.controlVT = 0x000b;
  t.copyright = 0x00a9;
  t.copyrightsans = 0xf8e9;
  t.copyrightserif = 0xf6d9;
  t.cornerbracketleft = 0x300c;
  t.cornerbracketlefthalfwidth = 0xff62;
  t.cornerbracketleftvertical = 0xfe41;
  t.cornerbracketright = 0x300d;
  t.cornerbracketrighthalfwidth = 0xff63;
  t.cornerbracketrightvertical = 0xfe42;
  t.corporationsquare = 0x337f;
  t.cosquare = 0x33c7;
  t.coverkgsquare = 0x33c6;
  t.cparen = 0x249e;
  t.cruzeiro = 0x20a2;
  t.cstretched = 0x0297;
  t.curlyand = 0x22cf;
  t.curlyor = 0x22ce;
  t.currency = 0x00a4;
  t.cyrBreve = 0xf6d1;
  t.cyrFlex = 0xf6d2;
  t.cyrbreve = 0xf6d4;
  t.cyrflex = 0xf6d5;
  t.d = 0x0064;
  t.daarmenian = 0x0564;
  t.dabengali = 0x09a6;
  t.dadarabic = 0x0636;
  t.dadeva = 0x0926;
  t.dadfinalarabic = 0xfebe;
  t.dadinitialarabic = 0xfebf;
  t.dadmedialarabic = 0xfec0;
  t.dagesh = 0x05bc;
  t.dageshhebrew = 0x05bc;
  t.dagger = 0x2020;
  t.daggerdbl = 0x2021;
  t.dagujarati = 0x0aa6;
  t.dagurmukhi = 0x0a26;
  t.dahiragana = 0x3060;
  t.dakatakana = 0x30c0;
  t.dalarabic = 0x062f;
  t.dalet = 0x05d3;
  t.daletdagesh = 0xfb33;
  t.daletdageshhebrew = 0xfb33;
  t.dalethebrew = 0x05d3;
  t.dalfinalarabic = 0xfeaa;
  t.dammaarabic = 0x064f;
  t.dammalowarabic = 0x064f;
  t.dammatanaltonearabic = 0x064c;
  t.dammatanarabic = 0x064c;
  t.danda = 0x0964;
  t.dargahebrew = 0x05a7;
  t.dargalefthebrew = 0x05a7;
  t.dasiapneumatacyrilliccmb = 0x0485;
  t.dblGrave = 0xf6d3;
  t.dblanglebracketleft = 0x300a;
  t.dblanglebracketleftvertical = 0xfe3d;
  t.dblanglebracketright = 0x300b;
  t.dblanglebracketrightvertical = 0xfe3e;
  t.dblarchinvertedbelowcmb = 0x032b;
  t.dblarrowleft = 0x21d4;
  t.dblarrowright = 0x21d2;
  t.dbldanda = 0x0965;
  t.dblgrave = 0xf6d6;
  t.dblgravecmb = 0x030f;
  t.dblintegral = 0x222c;
  t.dbllowline = 0x2017;
  t.dbllowlinecmb = 0x0333;
  t.dbloverlinecmb = 0x033f;
  t.dblprimemod = 0x02ba;
  t.dblverticalbar = 0x2016;
  t.dblverticallineabovecmb = 0x030e;
  t.dbopomofo = 0x3109;
  t.dbsquare = 0x33c8;
  t.dcaron = 0x010f;
  t.dcedilla = 0x1e11;
  t.dcircle = 0x24d3;
  t.dcircumflexbelow = 0x1e13;
  t.dcroat = 0x0111;
  t.ddabengali = 0x09a1;
  t.ddadeva = 0x0921;
  t.ddagujarati = 0x0aa1;
  t.ddagurmukhi = 0x0a21;
  t.ddalarabic = 0x0688;
  t.ddalfinalarabic = 0xfb89;
  t.dddhadeva = 0x095c;
  t.ddhabengali = 0x09a2;
  t.ddhadeva = 0x0922;
  t.ddhagujarati = 0x0aa2;
  t.ddhagurmukhi = 0x0a22;
  t.ddotaccent = 0x1e0b;
  t.ddotbelow = 0x1e0d;
  t.decimalseparatorarabic = 0x066b;
  t.decimalseparatorpersian = 0x066b;
  t.decyrillic = 0x0434;
  t.degree = 0x00b0;
  t.dehihebrew = 0x05ad;
  t.dehiragana = 0x3067;
  t.deicoptic = 0x03ef;
  t.dekatakana = 0x30c7;
  t.deleteleft = 0x232b;
  t.deleteright = 0x2326;
  t.delta = 0x03b4;
  t.deltaturned = 0x018d;
  t.denominatorminusonenumeratorbengali = 0x09f8;
  t.dezh = 0x02a4;
  t.dhabengali = 0x09a7;
  t.dhadeva = 0x0927;
  t.dhagujarati = 0x0aa7;
  t.dhagurmukhi = 0x0a27;
  t.dhook = 0x0257;
  t.dialytikatonos = 0x0385;
  t.dialytikatonoscmb = 0x0344;
  t.diamond = 0x2666;
  t.diamondsuitwhite = 0x2662;
  t.dieresis = 0x00a8;
  t.dieresisacute = 0xf6d7;
  t.dieresisbelowcmb = 0x0324;
  t.dieresiscmb = 0x0308;
  t.dieresisgrave = 0xf6d8;
  t.dieresistonos = 0x0385;
  t.dihiragana = 0x3062;
  t.dikatakana = 0x30c2;
  t.dittomark = 0x3003;
  t.divide = 0x00f7;
  t.divides = 0x2223;
  t.divisionslash = 0x2215;
  t.djecyrillic = 0x0452;
  t.dkshade = 0x2593;
  t.dlinebelow = 0x1e0f;
  t.dlsquare = 0x3397;
  t.dmacron = 0x0111;
  t.dmonospace = 0xff44;
  t.dnblock = 0x2584;
  t.dochadathai = 0x0e0e;
  t.dodekthai = 0x0e14;
  t.dohiragana = 0x3069;
  t.dokatakana = 0x30c9;
  t.dollar = 0x0024;
  t.dollarinferior = 0xf6e3;
  t.dollarmonospace = 0xff04;
  t.dollaroldstyle = 0xf724;
  t.dollarsmall = 0xfe69;
  t.dollarsuperior = 0xf6e4;
  t.dong = 0x20ab;
  t.dorusquare = 0x3326;
  t.dotaccent = 0x02d9;
  t.dotaccentcmb = 0x0307;
  t.dotbelowcmb = 0x0323;
  t.dotbelowcomb = 0x0323;
  t.dotkatakana = 0x30fb;
  t.dotlessi = 0x0131;
  t.dotlessj = 0xf6be;
  t.dotlessjstrokehook = 0x0284;
  t.dotmath = 0x22c5;
  t.dottedcircle = 0x25cc;
  t.doubleyodpatah = 0xfb1f;
  t.doubleyodpatahhebrew = 0xfb1f;
  t.downtackbelowcmb = 0x031e;
  t.downtackmod = 0x02d5;
  t.dparen = 0x249f;
  t.dsuperior = 0xf6eb;
  t.dtail = 0x0256;
  t.dtopbar = 0x018c;
  t.duhiragana = 0x3065;
  t.dukatakana = 0x30c5;
  t.dz = 0x01f3;
  t.dzaltone = 0x02a3;
  t.dzcaron = 0x01c6;
  t.dzcurl = 0x02a5;
  t.dzeabkhasiancyrillic = 0x04e1;
  t.dzecyrillic = 0x0455;
  t.dzhecyrillic = 0x045f;
  t.e = 0x0065;
  t.eacute = 0x00e9;
  t.earth = 0x2641;
  t.ebengali = 0x098f;
  t.ebopomofo = 0x311c;
  t.ebreve = 0x0115;
  t.ecandradeva = 0x090d;
  t.ecandragujarati = 0x0a8d;
  t.ecandravowelsigndeva = 0x0945;
  t.ecandravowelsigngujarati = 0x0ac5;
  t.ecaron = 0x011b;
  t.ecedillabreve = 0x1e1d;
  t.echarmenian = 0x0565;
  t.echyiwnarmenian = 0x0587;
  t.ecircle = 0x24d4;
  t.ecircumflex = 0x00ea;
  t.ecircumflexacute = 0x1ebf;
  t.ecircumflexbelow = 0x1e19;
  t.ecircumflexdotbelow = 0x1ec7;
  t.ecircumflexgrave = 0x1ec1;
  t.ecircumflexhookabove = 0x1ec3;
  t.ecircumflextilde = 0x1ec5;
  t.ecyrillic = 0x0454;
  t.edblgrave = 0x0205;
  t.edeva = 0x090f;
  t.edieresis = 0x00eb;
  t.edot = 0x0117;
  t.edotaccent = 0x0117;
  t.edotbelow = 0x1eb9;
  t.eegurmukhi = 0x0a0f;
  t.eematragurmukhi = 0x0a47;
  t.efcyrillic = 0x0444;
  t.egrave = 0x00e8;
  t.egujarati = 0x0a8f;
  t.eharmenian = 0x0567;
  t.ehbopomofo = 0x311d;
  t.ehiragana = 0x3048;
  t.ehookabove = 0x1ebb;
  t.eibopomofo = 0x311f;
  t.eight = 0x0038;
  t.eightarabic = 0x0668;
  t.eightbengali = 0x09ee;
  t.eightcircle = 0x2467;
  t.eightcircleinversesansserif = 0x2791;
  t.eightdeva = 0x096e;
  t.eighteencircle = 0x2471;
  t.eighteenparen = 0x2485;
  t.eighteenperiod = 0x2499;
  t.eightgujarati = 0x0aee;
  t.eightgurmukhi = 0x0a6e;
  t.eighthackarabic = 0x0668;
  t.eighthangzhou = 0x3028;
  t.eighthnotebeamed = 0x266b;
  t.eightideographicparen = 0x3227;
  t.eightinferior = 0x2088;
  t.eightmonospace = 0xff18;
  t.eightoldstyle = 0xf738;
  t.eightparen = 0x247b;
  t.eightperiod = 0x248f;
  t.eightpersian = 0x06f8;
  t.eightroman = 0x2177;
  t.eightsuperior = 0x2078;
  t.eightthai = 0x0e58;
  t.einvertedbreve = 0x0207;
  t.eiotifiedcyrillic = 0x0465;
  t.ekatakana = 0x30a8;
  t.ekatakanahalfwidth = 0xff74;
  t.ekonkargurmukhi = 0x0a74;
  t.ekorean = 0x3154;
  t.elcyrillic = 0x043b;
  t.element = 0x2208;
  t.elevencircle = 0x246a;
  t.elevenparen = 0x247e;
  t.elevenperiod = 0x2492;
  t.elevenroman = 0x217a;
  t.ellipsis = 0x2026;
  t.ellipsisvertical = 0x22ee;
  t.emacron = 0x0113;
  t.emacronacute = 0x1e17;
  t.emacrongrave = 0x1e15;
  t.emcyrillic = 0x043c;
  t.emdash = 0x2014;
  t.emdashvertical = 0xfe31;
  t.emonospace = 0xff45;
  t.emphasismarkarmenian = 0x055b;
  t.emptyset = 0x2205;
  t.enbopomofo = 0x3123;
  t.encyrillic = 0x043d;
  t.endash = 0x2013;
  t.endashvertical = 0xfe32;
  t.endescendercyrillic = 0x04a3;
  t.eng = 0x014b;
  t.engbopomofo = 0x3125;
  t.enghecyrillic = 0x04a5;
  t.enhookcyrillic = 0x04c8;
  t.enspace = 0x2002;
  t.eogonek = 0x0119;
  t.eokorean = 0x3153;
  t.eopen = 0x025b;
  t.eopenclosed = 0x029a;
  t.eopenreversed = 0x025c;
  t.eopenreversedclosed = 0x025e;
  t.eopenreversedhook = 0x025d;
  t.eparen = 0x24a0;
  t.epsilon = 0x03b5;
  t.epsilontonos = 0x03ad;
  t.equal = 0x003d;
  t.equalmonospace = 0xff1d;
  t.equalsmall = 0xfe66;
  t.equalsuperior = 0x207c;
  t.equivalence = 0x2261;
  t.erbopomofo = 0x3126;
  t.ercyrillic = 0x0440;
  t.ereversed = 0x0258;
  t.ereversedcyrillic = 0x044d;
  t.escyrillic = 0x0441;
  t.esdescendercyrillic = 0x04ab;
  t.esh = 0x0283;
  t.eshcurl = 0x0286;
  t.eshortdeva = 0x090e;
  t.eshortvowelsigndeva = 0x0946;
  t.eshreversedloop = 0x01aa;
  t.eshsquatreversed = 0x0285;
  t.esmallhiragana = 0x3047;
  t.esmallkatakana = 0x30a7;
  t.esmallkatakanahalfwidth = 0xff6a;
  t.estimated = 0x212e;
  t.esuperior = 0xf6ec;
  t.eta = 0x03b7;
  t.etarmenian = 0x0568;
  t.etatonos = 0x03ae;
  t.eth = 0x00f0;
  t.etilde = 0x1ebd;
  t.etildebelow = 0x1e1b;
  t.etnahtafoukhhebrew = 0x0591;
  t.etnahtafoukhlefthebrew = 0x0591;
  t.etnahtahebrew = 0x0591;
  t.etnahtalefthebrew = 0x0591;
  t.eturned = 0x01dd;
  t.eukorean = 0x3161;
  t.euro = 0x20ac;
  t.evowelsignbengali = 0x09c7;
  t.evowelsigndeva = 0x0947;
  t.evowelsigngujarati = 0x0ac7;
  t.exclam = 0x0021;
  t.exclamarmenian = 0x055c;
  t.exclamdbl = 0x203c;
  t.exclamdown = 0x00a1;
  t.exclamdownsmall = 0xf7a1;
  t.exclammonospace = 0xff01;
  t.exclamsmall = 0xf721;
  t.existential = 0x2203;
  t.ezh = 0x0292;
  t.ezhcaron = 0x01ef;
  t.ezhcurl = 0x0293;
  t.ezhreversed = 0x01b9;
  t.ezhtail = 0x01ba;
  t.f = 0x0066;
  t.fadeva = 0x095e;
  t.fagurmukhi = 0x0a5e;
  t.fahrenheit = 0x2109;
  t.fathaarabic = 0x064e;
  t.fathalowarabic = 0x064e;
  t.fathatanarabic = 0x064b;
  t.fbopomofo = 0x3108;
  t.fcircle = 0x24d5;
  t.fdotaccent = 0x1e1f;
  t.feharabic = 0x0641;
  t.feharmenian = 0x0586;
  t.fehfinalarabic = 0xfed2;
  t.fehinitialarabic = 0xfed3;
  t.fehmedialarabic = 0xfed4;
  t.feicoptic = 0x03e5;
  t.female = 0x2640;
  t.ff = 0xfb00;
  t.f_f = 0xfb00;
  t.ffi = 0xfb03;
  t.f_f_i = 0xfb03;
  t.ffl = 0xfb04;
  t.f_f_l = 0xfb04;
  t.fi = 0xfb01;
  t.f_i = 0xfb01;
  t.fifteencircle = 0x246e;
  t.fifteenparen = 0x2482;
  t.fifteenperiod = 0x2496;
  t.figuredash = 0x2012;
  t.filledbox = 0x25a0;
  t.filledrect = 0x25ac;
  t.finalkaf = 0x05da;
  t.finalkafdagesh = 0xfb3a;
  t.finalkafdageshhebrew = 0xfb3a;
  t.finalkafhebrew = 0x05da;
  t.finalmem = 0x05dd;
  t.finalmemhebrew = 0x05dd;
  t.finalnun = 0x05df;
  t.finalnunhebrew = 0x05df;
  t.finalpe = 0x05e3;
  t.finalpehebrew = 0x05e3;
  t.finaltsadi = 0x05e5;
  t.finaltsadihebrew = 0x05e5;
  t.firsttonechinese = 0x02c9;
  t.fisheye = 0x25c9;
  t.fitacyrillic = 0x0473;
  t.five = 0x0035;
  t.fivearabic = 0x0665;
  t.fivebengali = 0x09eb;
  t.fivecircle = 0x2464;
  t.fivecircleinversesansserif = 0x278e;
  t.fivedeva = 0x096b;
  t.fiveeighths = 0x215d;
  t.fivegujarati = 0x0aeb;
  t.fivegurmukhi = 0x0a6b;
  t.fivehackarabic = 0x0665;
  t.fivehangzhou = 0x3025;
  t.fiveideographicparen = 0x3224;
  t.fiveinferior = 0x2085;
  t.fivemonospace = 0xff15;
  t.fiveoldstyle = 0xf735;
  t.fiveparen = 0x2478;
  t.fiveperiod = 0x248c;
  t.fivepersian = 0x06f5;
  t.fiveroman = 0x2174;
  t.fivesuperior = 0x2075;
  t.fivethai = 0x0e55;
  t.fl = 0xfb02;
  t.f_l = 0xfb02;
  t.florin = 0x0192;
  t.fmonospace = 0xff46;
  t.fmsquare = 0x3399;
  t.fofanthai = 0x0e1f;
  t.fofathai = 0x0e1d;
  t.fongmanthai = 0x0e4f;
  t.forall = 0x2200;
  t.four = 0x0034;
  t.fourarabic = 0x0664;
  t.fourbengali = 0x09ea;
  t.fourcircle = 0x2463;
  t.fourcircleinversesansserif = 0x278d;
  t.fourdeva = 0x096a;
  t.fourgujarati = 0x0aea;
  t.fourgurmukhi = 0x0a6a;
  t.fourhackarabic = 0x0664;
  t.fourhangzhou = 0x3024;
  t.fourideographicparen = 0x3223;
  t.fourinferior = 0x2084;
  t.fourmonospace = 0xff14;
  t.fournumeratorbengali = 0x09f7;
  t.fouroldstyle = 0xf734;
  t.fourparen = 0x2477;
  t.fourperiod = 0x248b;
  t.fourpersian = 0x06f4;
  t.fourroman = 0x2173;
  t.foursuperior = 0x2074;
  t.fourteencircle = 0x246d;
  t.fourteenparen = 0x2481;
  t.fourteenperiod = 0x2495;
  t.fourthai = 0x0e54;
  t.fourthtonechinese = 0x02cb;
  t.fparen = 0x24a1;
  t.fraction = 0x2044;
  t.franc = 0x20a3;
  t.g = 0x0067;
  t.gabengali = 0x0997;
  t.gacute = 0x01f5;
  t.gadeva = 0x0917;
  t.gafarabic = 0x06af;
  t.gaffinalarabic = 0xfb93;
  t.gafinitialarabic = 0xfb94;
  t.gafmedialarabic = 0xfb95;
  t.gagujarati = 0x0a97;
  t.gagurmukhi = 0x0a17;
  t.gahiragana = 0x304c;
  t.gakatakana = 0x30ac;
  t.gamma = 0x03b3;
  t.gammalatinsmall = 0x0263;
  t.gammasuperior = 0x02e0;
  t.gangiacoptic = 0x03eb;
  t.gbopomofo = 0x310d;
  t.gbreve = 0x011f;
  t.gcaron = 0x01e7;
  t.gcedilla = 0x0123;
  t.gcircle = 0x24d6;
  t.gcircumflex = 0x011d;
  t.gcommaaccent = 0x0123;
  t.gdot = 0x0121;
  t.gdotaccent = 0x0121;
  t.gecyrillic = 0x0433;
  t.gehiragana = 0x3052;
  t.gekatakana = 0x30b2;
  t.geometricallyequal = 0x2251;
  t.gereshaccenthebrew = 0x059c;
  t.gereshhebrew = 0x05f3;
  t.gereshmuqdamhebrew = 0x059d;
  t.germandbls = 0x00df;
  t.gershayimaccenthebrew = 0x059e;
  t.gershayimhebrew = 0x05f4;
  t.getamark = 0x3013;
  t.ghabengali = 0x0998;
  t.ghadarmenian = 0x0572;
  t.ghadeva = 0x0918;
  t.ghagujarati = 0x0a98;
  t.ghagurmukhi = 0x0a18;
  t.ghainarabic = 0x063a;
  t.ghainfinalarabic = 0xfece;
  t.ghaininitialarabic = 0xfecf;
  t.ghainmedialarabic = 0xfed0;
  t.ghemiddlehookcyrillic = 0x0495;
  t.ghestrokecyrillic = 0x0493;
  t.gheupturncyrillic = 0x0491;
  t.ghhadeva = 0x095a;
  t.ghhagurmukhi = 0x0a5a;
  t.ghook = 0x0260;
  t.ghzsquare = 0x3393;
  t.gihiragana = 0x304e;
  t.gikatakana = 0x30ae;
  t.gimarmenian = 0x0563;
  t.gimel = 0x05d2;
  t.gimeldagesh = 0xfb32;
  t.gimeldageshhebrew = 0xfb32;
  t.gimelhebrew = 0x05d2;
  t.gjecyrillic = 0x0453;
  t.glottalinvertedstroke = 0x01be;
  t.glottalstop = 0x0294;
  t.glottalstopinverted = 0x0296;
  t.glottalstopmod = 0x02c0;
  t.glottalstopreversed = 0x0295;
  t.glottalstopreversedmod = 0x02c1;
  t.glottalstopreversedsuperior = 0x02e4;
  t.glottalstopstroke = 0x02a1;
  t.glottalstopstrokereversed = 0x02a2;
  t.gmacron = 0x1e21;
  t.gmonospace = 0xff47;
  t.gohiragana = 0x3054;
  t.gokatakana = 0x30b4;
  t.gparen = 0x24a2;
  t.gpasquare = 0x33ac;
  t.gradient = 0x2207;
  t.grave = 0x0060;
  t.gravebelowcmb = 0x0316;
  t.gravecmb = 0x0300;
  t.gravecomb = 0x0300;
  t.gravedeva = 0x0953;
  t.gravelowmod = 0x02ce;
  t.gravemonospace = 0xff40;
  t.gravetonecmb = 0x0340;
  t.greater = 0x003e;
  t.greaterequal = 0x2265;
  t.greaterequalorless = 0x22db;
  t.greatermonospace = 0xff1e;
  t.greaterorequivalent = 0x2273;
  t.greaterorless = 0x2277;
  t.greateroverequal = 0x2267;
  t.greatersmall = 0xfe65;
  t.gscript = 0x0261;
  t.gstroke = 0x01e5;
  t.guhiragana = 0x3050;
  t.guillemotleft = 0x00ab;
  t.guillemotright = 0x00bb;
  t.guilsinglleft = 0x2039;
  t.guilsinglright = 0x203a;
  t.gukatakana = 0x30b0;
  t.guramusquare = 0x3318;
  t.gysquare = 0x33c9;
  t.h = 0x0068;
  t.haabkhasiancyrillic = 0x04a9;
  t.haaltonearabic = 0x06c1;
  t.habengali = 0x09b9;
  t.hadescendercyrillic = 0x04b3;
  t.hadeva = 0x0939;
  t.hagujarati = 0x0ab9;
  t.hagurmukhi = 0x0a39;
  t.haharabic = 0x062d;
  t.hahfinalarabic = 0xfea2;
  t.hahinitialarabic = 0xfea3;
  t.hahiragana = 0x306f;
  t.hahmedialarabic = 0xfea4;
  t.haitusquare = 0x332a;
  t.hakatakana = 0x30cf;
  t.hakatakanahalfwidth = 0xff8a;
  t.halantgurmukhi = 0x0a4d;
  t.hamzaarabic = 0x0621;
  t.hamzalowarabic = 0x0621;
  t.hangulfiller = 0x3164;
  t.hardsigncyrillic = 0x044a;
  t.harpoonleftbarbup = 0x21bc;
  t.harpoonrightbarbup = 0x21c0;
  t.hasquare = 0x33ca;
  t.hatafpatah = 0x05b2;
  t.hatafpatah16 = 0x05b2;
  t.hatafpatah23 = 0x05b2;
  t.hatafpatah2f = 0x05b2;
  t.hatafpatahhebrew = 0x05b2;
  t.hatafpatahnarrowhebrew = 0x05b2;
  t.hatafpatahquarterhebrew = 0x05b2;
  t.hatafpatahwidehebrew = 0x05b2;
  t.hatafqamats = 0x05b3;
  t.hatafqamats1b = 0x05b3;
  t.hatafqamats28 = 0x05b3;
  t.hatafqamats34 = 0x05b3;
  t.hatafqamatshebrew = 0x05b3;
  t.hatafqamatsnarrowhebrew = 0x05b3;
  t.hatafqamatsquarterhebrew = 0x05b3;
  t.hatafqamatswidehebrew = 0x05b3;
  t.hatafsegol = 0x05b1;
  t.hatafsegol17 = 0x05b1;
  t.hatafsegol24 = 0x05b1;
  t.hatafsegol30 = 0x05b1;
  t.hatafsegolhebrew = 0x05b1;
  t.hatafsegolnarrowhebrew = 0x05b1;
  t.hatafsegolquarterhebrew = 0x05b1;
  t.hatafsegolwidehebrew = 0x05b1;
  t.hbar = 0x0127;
  t.hbopomofo = 0x310f;
  t.hbrevebelow = 0x1e2b;
  t.hcedilla = 0x1e29;
  t.hcircle = 0x24d7;
  t.hcircumflex = 0x0125;
  t.hdieresis = 0x1e27;
  t.hdotaccent = 0x1e23;
  t.hdotbelow = 0x1e25;
  t.he = 0x05d4;
  t.heart = 0x2665;
  t.heartsuitblack = 0x2665;
  t.heartsuitwhite = 0x2661;
  t.hedagesh = 0xfb34;
  t.hedageshhebrew = 0xfb34;
  t.hehaltonearabic = 0x06c1;
  t.heharabic = 0x0647;
  t.hehebrew = 0x05d4;
  t.hehfinalaltonearabic = 0xfba7;
  t.hehfinalalttwoarabic = 0xfeea;
  t.hehfinalarabic = 0xfeea;
  t.hehhamzaabovefinalarabic = 0xfba5;
  t.hehhamzaaboveisolatedarabic = 0xfba4;
  t.hehinitialaltonearabic = 0xfba8;
  t.hehinitialarabic = 0xfeeb;
  t.hehiragana = 0x3078;
  t.hehmedialaltonearabic = 0xfba9;
  t.hehmedialarabic = 0xfeec;
  t.heiseierasquare = 0x337b;
  t.hekatakana = 0x30d8;
  t.hekatakanahalfwidth = 0xff8d;
  t.hekutaarusquare = 0x3336;
  t.henghook = 0x0267;
  t.herutusquare = 0x3339;
  t.het = 0x05d7;
  t.hethebrew = 0x05d7;
  t.hhook = 0x0266;
  t.hhooksuperior = 0x02b1;
  t.hieuhacirclekorean = 0x327b;
  t.hieuhaparenkorean = 0x321b;
  t.hieuhcirclekorean = 0x326d;
  t.hieuhkorean = 0x314e;
  t.hieuhparenkorean = 0x320d;
  t.hihiragana = 0x3072;
  t.hikatakana = 0x30d2;
  t.hikatakanahalfwidth = 0xff8b;
  t.hiriq = 0x05b4;
  t.hiriq14 = 0x05b4;
  t.hiriq21 = 0x05b4;
  t.hiriq2d = 0x05b4;
  t.hiriqhebrew = 0x05b4;
  t.hiriqnarrowhebrew = 0x05b4;
  t.hiriqquarterhebrew = 0x05b4;
  t.hiriqwidehebrew = 0x05b4;
  t.hlinebelow = 0x1e96;
  t.hmonospace = 0xff48;
  t.hoarmenian = 0x0570;
  t.hohipthai = 0x0e2b;
  t.hohiragana = 0x307b;
  t.hokatakana = 0x30db;
  t.hokatakanahalfwidth = 0xff8e;
  t.holam = 0x05b9;
  t.holam19 = 0x05b9;
  t.holam26 = 0x05b9;
  t.holam32 = 0x05b9;
  t.holamhebrew = 0x05b9;
  t.holamnarrowhebrew = 0x05b9;
  t.holamquarterhebrew = 0x05b9;
  t.holamwidehebrew = 0x05b9;
  t.honokhukthai = 0x0e2e;
  t.hookabovecomb = 0x0309;
  t.hookcmb = 0x0309;
  t.hookpalatalizedbelowcmb = 0x0321;
  t.hookretroflexbelowcmb = 0x0322;
  t.hoonsquare = 0x3342;
  t.horicoptic = 0x03e9;
  t.horizontalbar = 0x2015;
  t.horncmb = 0x031b;
  t.hotsprings = 0x2668;
  t.house = 0x2302;
  t.hparen = 0x24a3;
  t.hsuperior = 0x02b0;
  t.hturned = 0x0265;
  t.huhiragana = 0x3075;
  t.huiitosquare = 0x3333;
  t.hukatakana = 0x30d5;
  t.hukatakanahalfwidth = 0xff8c;
  t.hungarumlaut = 0x02dd;
  t.hungarumlautcmb = 0x030b;
  t.hv = 0x0195;
  t.hyphen = 0x002d;
  t.hypheninferior = 0xf6e5;
  t.hyphenmonospace = 0xff0d;
  t.hyphensmall = 0xfe63;
  t.hyphensuperior = 0xf6e6;
  t.hyphentwo = 0x2010;
  t.i = 0x0069;
  t.iacute = 0x00ed;
  t.iacyrillic = 0x044f;
  t.ibengali = 0x0987;
  t.ibopomofo = 0x3127;
  t.ibreve = 0x012d;
  t.icaron = 0x01d0;
  t.icircle = 0x24d8;
  t.icircumflex = 0x00ee;
  t.icyrillic = 0x0456;
  t.idblgrave = 0x0209;
  t.ideographearthcircle = 0x328f;
  t.ideographfirecircle = 0x328b;
  t.ideographicallianceparen = 0x323f;
  t.ideographiccallparen = 0x323a;
  t.ideographiccentrecircle = 0x32a5;
  t.ideographicclose = 0x3006;
  t.ideographiccomma = 0x3001;
  t.ideographiccommaleft = 0xff64;
  t.ideographiccongratulationparen = 0x3237;
  t.ideographiccorrectcircle = 0x32a3;
  t.ideographicearthparen = 0x322f;
  t.ideographicenterpriseparen = 0x323d;
  t.ideographicexcellentcircle = 0x329d;
  t.ideographicfestivalparen = 0x3240;
  t.ideographicfinancialcircle = 0x3296;
  t.ideographicfinancialparen = 0x3236;
  t.ideographicfireparen = 0x322b;
  t.ideographichaveparen = 0x3232;
  t.ideographichighcircle = 0x32a4;
  t.ideographiciterationmark = 0x3005;
  t.ideographiclaborcircle = 0x3298;
  t.ideographiclaborparen = 0x3238;
  t.ideographicleftcircle = 0x32a7;
  t.ideographiclowcircle = 0x32a6;
  t.ideographicmedicinecircle = 0x32a9;
  t.ideographicmetalparen = 0x322e;
  t.ideographicmoonparen = 0x322a;
  t.ideographicnameparen = 0x3234;
  t.ideographicperiod = 0x3002;
  t.ideographicprintcircle = 0x329e;
  t.ideographicreachparen = 0x3243;
  t.ideographicrepresentparen = 0x3239;
  t.ideographicresourceparen = 0x323e;
  t.ideographicrightcircle = 0x32a8;
  t.ideographicsecretcircle = 0x3299;
  t.ideographicselfparen = 0x3242;
  t.ideographicsocietyparen = 0x3233;
  t.ideographicspace = 0x3000;
  t.ideographicspecialparen = 0x3235;
  t.ideographicstockparen = 0x3231;
  t.ideographicstudyparen = 0x323b;
  t.ideographicsunparen = 0x3230;
  t.ideographicsuperviseparen = 0x323c;
  t.ideographicwaterparen = 0x322c;
  t.ideographicwoodparen = 0x322d;
  t.ideographiczero = 0x3007;
  t.ideographmetalcircle = 0x328e;
  t.ideographmooncircle = 0x328a;
  t.ideographnamecircle = 0x3294;
  t.ideographsuncircle = 0x3290;
  t.ideographwatercircle = 0x328c;
  t.ideographwoodcircle = 0x328d;
  t.ideva = 0x0907;
  t.idieresis = 0x00ef;
  t.idieresisacute = 0x1e2f;
  t.idieresiscyrillic = 0x04e5;
  t.idotbelow = 0x1ecb;
  t.iebrevecyrillic = 0x04d7;
  t.iecyrillic = 0x0435;
  t.ieungacirclekorean = 0x3275;
  t.ieungaparenkorean = 0x3215;
  t.ieungcirclekorean = 0x3267;
  t.ieungkorean = 0x3147;
  t.ieungparenkorean = 0x3207;
  t.igrave = 0x00ec;
  t.igujarati = 0x0a87;
  t.igurmukhi = 0x0a07;
  t.ihiragana = 0x3044;
  t.ihookabove = 0x1ec9;
  t.iibengali = 0x0988;
  t.iicyrillic = 0x0438;
  t.iideva = 0x0908;
  t.iigujarati = 0x0a88;
  t.iigurmukhi = 0x0a08;
  t.iimatragurmukhi = 0x0a40;
  t.iinvertedbreve = 0x020b;
  t.iishortcyrillic = 0x0439;
  t.iivowelsignbengali = 0x09c0;
  t.iivowelsigndeva = 0x0940;
  t.iivowelsigngujarati = 0x0ac0;
  t.ij = 0x0133;
  t.ikatakana = 0x30a4;
  t.ikatakanahalfwidth = 0xff72;
  t.ikorean = 0x3163;
  t.ilde = 0x02dc;
  t.iluyhebrew = 0x05ac;
  t.imacron = 0x012b;
  t.imacroncyrillic = 0x04e3;
  t.imageorapproximatelyequal = 0x2253;
  t.imatragurmukhi = 0x0a3f;
  t.imonospace = 0xff49;
  t.increment = 0x2206;
  t.infinity = 0x221e;
  t.iniarmenian = 0x056b;
  t.integral = 0x222b;
  t.integralbottom = 0x2321;
  t.integralbt = 0x2321;
  t.integralex = 0xf8f5;
  t.integraltop = 0x2320;
  t.integraltp = 0x2320;
  t.intersection = 0x2229;
  t.intisquare = 0x3305;
  t.invbullet = 0x25d8;
  t.invcircle = 0x25d9;
  t.invsmileface = 0x263b;
  t.iocyrillic = 0x0451;
  t.iogonek = 0x012f;
  t.iota = 0x03b9;
  t.iotadieresis = 0x03ca;
  t.iotadieresistonos = 0x0390;
  t.iotalatin = 0x0269;
  t.iotatonos = 0x03af;
  t.iparen = 0x24a4;
  t.irigurmukhi = 0x0a72;
  t.ismallhiragana = 0x3043;
  t.ismallkatakana = 0x30a3;
  t.ismallkatakanahalfwidth = 0xff68;
  t.issharbengali = 0x09fa;
  t.istroke = 0x0268;
  t.isuperior = 0xf6ed;
  t.iterationhiragana = 0x309d;
  t.iterationkatakana = 0x30fd;
  t.itilde = 0x0129;
  t.itildebelow = 0x1e2d;
  t.iubopomofo = 0x3129;
  t.iucyrillic = 0x044e;
  t.ivowelsignbengali = 0x09bf;
  t.ivowelsigndeva = 0x093f;
  t.ivowelsigngujarati = 0x0abf;
  t.izhitsacyrillic = 0x0475;
  t.izhitsadblgravecyrillic = 0x0477;
  t.j = 0x006a;
  t.jaarmenian = 0x0571;
  t.jabengali = 0x099c;
  t.jadeva = 0x091c;
  t.jagujarati = 0x0a9c;
  t.jagurmukhi = 0x0a1c;
  t.jbopomofo = 0x3110;
  t.jcaron = 0x01f0;
  t.jcircle = 0x24d9;
  t.jcircumflex = 0x0135;
  t.jcrossedtail = 0x029d;
  t.jdotlessstroke = 0x025f;
  t.jecyrillic = 0x0458;
  t.jeemarabic = 0x062c;
  t.jeemfinalarabic = 0xfe9e;
  t.jeeminitialarabic = 0xfe9f;
  t.jeemmedialarabic = 0xfea0;
  t.jeharabic = 0x0698;
  t.jehfinalarabic = 0xfb8b;
  t.jhabengali = 0x099d;
  t.jhadeva = 0x091d;
  t.jhagujarati = 0x0a9d;
  t.jhagurmukhi = 0x0a1d;
  t.jheharmenian = 0x057b;
  t.jis = 0x3004;
  t.jmonospace = 0xff4a;
  t.jparen = 0x24a5;
  t.jsuperior = 0x02b2;
  t.k = 0x006b;
  t.kabashkircyrillic = 0x04a1;
  t.kabengali = 0x0995;
  t.kacute = 0x1e31;
  t.kacyrillic = 0x043a;
  t.kadescendercyrillic = 0x049b;
  t.kadeva = 0x0915;
  t.kaf = 0x05db;
  t.kafarabic = 0x0643;
  t.kafdagesh = 0xfb3b;
  t.kafdageshhebrew = 0xfb3b;
  t.kaffinalarabic = 0xfeda;
  t.kafhebrew = 0x05db;
  t.kafinitialarabic = 0xfedb;
  t.kafmedialarabic = 0xfedc;
  t.kafrafehebrew = 0xfb4d;
  t.kagujarati = 0x0a95;
  t.kagurmukhi = 0x0a15;
  t.kahiragana = 0x304b;
  t.kahookcyrillic = 0x04c4;
  t.kakatakana = 0x30ab;
  t.kakatakanahalfwidth = 0xff76;
  t.kappa = 0x03ba;
  t.kappasymbolgreek = 0x03f0;
  t.kapyeounmieumkorean = 0x3171;
  t.kapyeounphieuphkorean = 0x3184;
  t.kapyeounpieupkorean = 0x3178;
  t.kapyeounssangpieupkorean = 0x3179;
  t.karoriisquare = 0x330d;
  t.kashidaautoarabic = 0x0640;
  t.kashidaautonosidebearingarabic = 0x0640;
  t.kasmallkatakana = 0x30f5;
  t.kasquare = 0x3384;
  t.kasraarabic = 0x0650;
  t.kasratanarabic = 0x064d;
  t.kastrokecyrillic = 0x049f;
  t.katahiraprolongmarkhalfwidth = 0xff70;
  t.kaverticalstrokecyrillic = 0x049d;
  t.kbopomofo = 0x310e;
  t.kcalsquare = 0x3389;
  t.kcaron = 0x01e9;
  t.kcedilla = 0x0137;
  t.kcircle = 0x24da;
  t.kcommaaccent = 0x0137;
  t.kdotbelow = 0x1e33;
  t.keharmenian = 0x0584;
  t.kehiragana = 0x3051;
  t.kekatakana = 0x30b1;
  t.kekatakanahalfwidth = 0xff79;
  t.kenarmenian = 0x056f;
  t.kesmallkatakana = 0x30f6;
  t.kgreenlandic = 0x0138;
  t.khabengali = 0x0996;
  t.khacyrillic = 0x0445;
  t.khadeva = 0x0916;
  t.khagujarati = 0x0a96;
  t.khagurmukhi = 0x0a16;
  t.khaharabic = 0x062e;
  t.khahfinalarabic = 0xfea6;
  t.khahinitialarabic = 0xfea7;
  t.khahmedialarabic = 0xfea8;
  t.kheicoptic = 0x03e7;
  t.khhadeva = 0x0959;
  t.khhagurmukhi = 0x0a59;
  t.khieukhacirclekorean = 0x3278;
  t.khieukhaparenkorean = 0x3218;
  t.khieukhcirclekorean = 0x326a;
  t.khieukhkorean = 0x314b;
  t.khieukhparenkorean = 0x320a;
  t.khokhaithai = 0x0e02;
  t.khokhonthai = 0x0e05;
  t.khokhuatthai = 0x0e03;
  t.khokhwaithai = 0x0e04;
  t.khomutthai = 0x0e5b;
  t.khook = 0x0199;
  t.khorakhangthai = 0x0e06;
  t.khzsquare = 0x3391;
  t.kihiragana = 0x304d;
  t.kikatakana = 0x30ad;
  t.kikatakanahalfwidth = 0xff77;
  t.kiroguramusquare = 0x3315;
  t.kiromeetorusquare = 0x3316;
  t.kirosquare = 0x3314;
  t.kiyeokacirclekorean = 0x326e;
  t.kiyeokaparenkorean = 0x320e;
  t.kiyeokcirclekorean = 0x3260;
  t.kiyeokkorean = 0x3131;
  t.kiyeokparenkorean = 0x3200;
  t.kiyeoksioskorean = 0x3133;
  t.kjecyrillic = 0x045c;
  t.klinebelow = 0x1e35;
  t.klsquare = 0x3398;
  t.kmcubedsquare = 0x33a6;
  t.kmonospace = 0xff4b;
  t.kmsquaredsquare = 0x33a2;
  t.kohiragana = 0x3053;
  t.kohmsquare = 0x33c0;
  t.kokaithai = 0x0e01;
  t.kokatakana = 0x30b3;
  t.kokatakanahalfwidth = 0xff7a;
  t.kooposquare = 0x331e;
  t.koppacyrillic = 0x0481;
  t.koreanstandardsymbol = 0x327f;
  t.koroniscmb = 0x0343;
  t.kparen = 0x24a6;
  t.kpasquare = 0x33aa;
  t.ksicyrillic = 0x046f;
  t.ktsquare = 0x33cf;
  t.kturned = 0x029e;
  t.kuhiragana = 0x304f;
  t.kukatakana = 0x30af;
  t.kukatakanahalfwidth = 0xff78;
  t.kvsquare = 0x33b8;
  t.kwsquare = 0x33be;
  t.l = 0x006c;
  t.labengali = 0x09b2;
  t.lacute = 0x013a;
  t.ladeva = 0x0932;
  t.lagujarati = 0x0ab2;
  t.lagurmukhi = 0x0a32;
  t.lakkhangyaothai = 0x0e45;
  t.lamaleffinalarabic = 0xfefc;
  t.lamalefhamzaabovefinalarabic = 0xfef8;
  t.lamalefhamzaaboveisolatedarabic = 0xfef7;
  t.lamalefhamzabelowfinalarabic = 0xfefa;
  t.lamalefhamzabelowisolatedarabic = 0xfef9;
  t.lamalefisolatedarabic = 0xfefb;
  t.lamalefmaddaabovefinalarabic = 0xfef6;
  t.lamalefmaddaaboveisolatedarabic = 0xfef5;
  t.lamarabic = 0x0644;
  t.lambda = 0x03bb;
  t.lambdastroke = 0x019b;
  t.lamed = 0x05dc;
  t.lameddagesh = 0xfb3c;
  t.lameddageshhebrew = 0xfb3c;
  t.lamedhebrew = 0x05dc;
  t.lamfinalarabic = 0xfede;
  t.lamhahinitialarabic = 0xfcca;
  t.laminitialarabic = 0xfedf;
  t.lamjeeminitialarabic = 0xfcc9;
  t.lamkhahinitialarabic = 0xfccb;
  t.lamlamhehisolatedarabic = 0xfdf2;
  t.lammedialarabic = 0xfee0;
  t.lammeemhahinitialarabic = 0xfd88;
  t.lammeeminitialarabic = 0xfccc;
  t.largecircle = 0x25ef;
  t.lbar = 0x019a;
  t.lbelt = 0x026c;
  t.lbopomofo = 0x310c;
  t.lcaron = 0x013e;
  t.lcedilla = 0x013c;
  t.lcircle = 0x24db;
  t.lcircumflexbelow = 0x1e3d;
  t.lcommaaccent = 0x013c;
  t.ldot = 0x0140;
  t.ldotaccent = 0x0140;
  t.ldotbelow = 0x1e37;
  t.ldotbelowmacron = 0x1e39;
  t.leftangleabovecmb = 0x031a;
  t.lefttackbelowcmb = 0x0318;
  t.less = 0x003c;
  t.lessequal = 0x2264;
  t.lessequalorgreater = 0x22da;
  t.lessmonospace = 0xff1c;
  t.lessorequivalent = 0x2272;
  t.lessorgreater = 0x2276;
  t.lessoverequal = 0x2266;
  t.lesssmall = 0xfe64;
  t.lezh = 0x026e;
  t.lfblock = 0x258c;
  t.lhookretroflex = 0x026d;
  t.lira = 0x20a4;
  t.liwnarmenian = 0x056c;
  t.lj = 0x01c9;
  t.ljecyrillic = 0x0459;
  t.ll = 0xf6c0;
  t.lladeva = 0x0933;
  t.llagujarati = 0x0ab3;
  t.llinebelow = 0x1e3b;
  t.llladeva = 0x0934;
  t.llvocalicbengali = 0x09e1;
  t.llvocalicdeva = 0x0961;
  t.llvocalicvowelsignbengali = 0x09e3;
  t.llvocalicvowelsigndeva = 0x0963;
  t.lmiddletilde = 0x026b;
  t.lmonospace = 0xff4c;
  t.lmsquare = 0x33d0;
  t.lochulathai = 0x0e2c;
  t.logicaland = 0x2227;
  t.logicalnot = 0x00ac;
  t.logicalnotreversed = 0x2310;
  t.logicalor = 0x2228;
  t.lolingthai = 0x0e25;
  t.longs = 0x017f;
  t.lowlinecenterline = 0xfe4e;
  t.lowlinecmb = 0x0332;
  t.lowlinedashed = 0xfe4d;
  t.lozenge = 0x25ca;
  t.lparen = 0x24a7;
  t.lslash = 0x0142;
  t.lsquare = 0x2113;
  t.lsuperior = 0xf6ee;
  t.ltshade = 0x2591;
  t.luthai = 0x0e26;
  t.lvocalicbengali = 0x098c;
  t.lvocalicdeva = 0x090c;
  t.lvocalicvowelsignbengali = 0x09e2;
  t.lvocalicvowelsigndeva = 0x0962;
  t.lxsquare = 0x33d3;
  t.m = 0x006d;
  t.mabengali = 0x09ae;
  t.macron = 0x00af;
  t.macronbelowcmb = 0x0331;
  t.macroncmb = 0x0304;
  t.macronlowmod = 0x02cd;
  t.macronmonospace = 0xffe3;
  t.macute = 0x1e3f;
  t.madeva = 0x092e;
  t.magujarati = 0x0aae;
  t.magurmukhi = 0x0a2e;
  t.mahapakhhebrew = 0x05a4;
  t.mahapakhlefthebrew = 0x05a4;
  t.mahiragana = 0x307e;
  t.maichattawalowleftthai = 0xf895;
  t.maichattawalowrightthai = 0xf894;
  t.maichattawathai = 0x0e4b;
  t.maichattawaupperleftthai = 0xf893;
  t.maieklowleftthai = 0xf88c;
  t.maieklowrightthai = 0xf88b;
  t.maiekthai = 0x0e48;
  t.maiekupperleftthai = 0xf88a;
  t.maihanakatleftthai = 0xf884;
  t.maihanakatthai = 0x0e31;
  t.maitaikhuleftthai = 0xf889;
  t.maitaikhuthai = 0x0e47;
  t.maitholowleftthai = 0xf88f;
  t.maitholowrightthai = 0xf88e;
  t.maithothai = 0x0e49;
  t.maithoupperleftthai = 0xf88d;
  t.maitrilowleftthai = 0xf892;
  t.maitrilowrightthai = 0xf891;
  t.maitrithai = 0x0e4a;
  t.maitriupperleftthai = 0xf890;
  t.maiyamokthai = 0x0e46;
  t.makatakana = 0x30de;
  t.makatakanahalfwidth = 0xff8f;
  t.male = 0x2642;
  t.mansyonsquare = 0x3347;
  t.maqafhebrew = 0x05be;
  t.mars = 0x2642;
  t.masoracirclehebrew = 0x05af;
  t.masquare = 0x3383;
  t.mbopomofo = 0x3107;
  t.mbsquare = 0x33d4;
  t.mcircle = 0x24dc;
  t.mcubedsquare = 0x33a5;
  t.mdotaccent = 0x1e41;
  t.mdotbelow = 0x1e43;
  t.meemarabic = 0x0645;
  t.meemfinalarabic = 0xfee2;
  t.meeminitialarabic = 0xfee3;
  t.meemmedialarabic = 0xfee4;
  t.meemmeeminitialarabic = 0xfcd1;
  t.meemmeemisolatedarabic = 0xfc48;
  t.meetorusquare = 0x334d;
  t.mehiragana = 0x3081;
  t.meizierasquare = 0x337e;
  t.mekatakana = 0x30e1;
  t.mekatakanahalfwidth = 0xff92;
  t.mem = 0x05de;
  t.memdagesh = 0xfb3e;
  t.memdageshhebrew = 0xfb3e;
  t.memhebrew = 0x05de;
  t.menarmenian = 0x0574;
  t.merkhahebrew = 0x05a5;
  t.merkhakefulahebrew = 0x05a6;
  t.merkhakefulalefthebrew = 0x05a6;
  t.merkhalefthebrew = 0x05a5;
  t.mhook = 0x0271;
  t.mhzsquare = 0x3392;
  t.middledotkatakanahalfwidth = 0xff65;
  t.middot = 0x00b7;
  t.mieumacirclekorean = 0x3272;
  t.mieumaparenkorean = 0x3212;
  t.mieumcirclekorean = 0x3264;
  t.mieumkorean = 0x3141;
  t.mieumpansioskorean = 0x3170;
  t.mieumparenkorean = 0x3204;
  t.mieumpieupkorean = 0x316e;
  t.mieumsioskorean = 0x316f;
  t.mihiragana = 0x307f;
  t.mikatakana = 0x30df;
  t.mikatakanahalfwidth = 0xff90;
  t.minus = 0x2212;
  t.minusbelowcmb = 0x0320;
  t.minuscircle = 0x2296;
  t.minusmod = 0x02d7;
  t.minusplus = 0x2213;
  t.minute = 0x2032;
  t.miribaarusquare = 0x334a;
  t.mirisquare = 0x3349;
  t.mlonglegturned = 0x0270;
  t.mlsquare = 0x3396;
  t.mmcubedsquare = 0x33a3;
  t.mmonospace = 0xff4d;
  t.mmsquaredsquare = 0x339f;
  t.mohiragana = 0x3082;
  t.mohmsquare = 0x33c1;
  t.mokatakana = 0x30e2;
  t.mokatakanahalfwidth = 0xff93;
  t.molsquare = 0x33d6;
  t.momathai = 0x0e21;
  t.moverssquare = 0x33a7;
  t.moverssquaredsquare = 0x33a8;
  t.mparen = 0x24a8;
  t.mpasquare = 0x33ab;
  t.mssquare = 0x33b3;
  t.msuperior = 0xf6ef;
  t.mturned = 0x026f;
  t.mu = 0x00b5;
  t.mu1 = 0x00b5;
  t.muasquare = 0x3382;
  t.muchgreater = 0x226b;
  t.muchless = 0x226a;
  t.mufsquare = 0x338c;
  t.mugreek = 0x03bc;
  t.mugsquare = 0x338d;
  t.muhiragana = 0x3080;
  t.mukatakana = 0x30e0;
  t.mukatakanahalfwidth = 0xff91;
  t.mulsquare = 0x3395;
  t.multiply = 0x00d7;
  t.mumsquare = 0x339b;
  t.munahhebrew = 0x05a3;
  t.munahlefthebrew = 0x05a3;
  t.musicalnote = 0x266a;
  t.musicalnotedbl = 0x266b;
  t.musicflatsign = 0x266d;
  t.musicsharpsign = 0x266f;
  t.mussquare = 0x33b2;
  t.muvsquare = 0x33b6;
  t.muwsquare = 0x33bc;
  t.mvmegasquare = 0x33b9;
  t.mvsquare = 0x33b7;
  t.mwmegasquare = 0x33bf;
  t.mwsquare = 0x33bd;
  t.n = 0x006e;
  t.nabengali = 0x09a8;
  t.nabla = 0x2207;
  t.nacute = 0x0144;
  t.nadeva = 0x0928;
  t.nagujarati = 0x0aa8;
  t.nagurmukhi = 0x0a28;
  t.nahiragana = 0x306a;
  t.nakatakana = 0x30ca;
  t.nakatakanahalfwidth = 0xff85;
  t.napostrophe = 0x0149;
  t.nasquare = 0x3381;
  t.nbopomofo = 0x310b;
  t.nbspace = 0x00a0;
  t.ncaron = 0x0148;
  t.ncedilla = 0x0146;
  t.ncircle = 0x24dd;
  t.ncircumflexbelow = 0x1e4b;
  t.ncommaaccent = 0x0146;
  t.ndotaccent = 0x1e45;
  t.ndotbelow = 0x1e47;
  t.nehiragana = 0x306d;
  t.nekatakana = 0x30cd;
  t.nekatakanahalfwidth = 0xff88;
  t.newsheqelsign = 0x20aa;
  t.nfsquare = 0x338b;
  t.ngabengali = 0x0999;
  t.ngadeva = 0x0919;
  t.ngagujarati = 0x0a99;
  t.ngagurmukhi = 0x0a19;
  t.ngonguthai = 0x0e07;
  t.nhiragana = 0x3093;
  t.nhookleft = 0x0272;
  t.nhookretroflex = 0x0273;
  t.nieunacirclekorean = 0x326f;
  t.nieunaparenkorean = 0x320f;
  t.nieuncieuckorean = 0x3135;
  t.nieuncirclekorean = 0x3261;
  t.nieunhieuhkorean = 0x3136;
  t.nieunkorean = 0x3134;
  t.nieunpansioskorean = 0x3168;
  t.nieunparenkorean = 0x3201;
  t.nieunsioskorean = 0x3167;
  t.nieuntikeutkorean = 0x3166;
  t.nihiragana = 0x306b;
  t.nikatakana = 0x30cb;
  t.nikatakanahalfwidth = 0xff86;
  t.nikhahitleftthai = 0xf899;
  t.nikhahitthai = 0x0e4d;
  t.nine = 0x0039;
  t.ninearabic = 0x0669;
  t.ninebengali = 0x09ef;
  t.ninecircle = 0x2468;
  t.ninecircleinversesansserif = 0x2792;
  t.ninedeva = 0x096f;
  t.ninegujarati = 0x0aef;
  t.ninegurmukhi = 0x0a6f;
  t.ninehackarabic = 0x0669;
  t.ninehangzhou = 0x3029;
  t.nineideographicparen = 0x3228;
  t.nineinferior = 0x2089;
  t.ninemonospace = 0xff19;
  t.nineoldstyle = 0xf739;
  t.nineparen = 0x247c;
  t.nineperiod = 0x2490;
  t.ninepersian = 0x06f9;
  t.nineroman = 0x2178;
  t.ninesuperior = 0x2079;
  t.nineteencircle = 0x2472;
  t.nineteenparen = 0x2486;
  t.nineteenperiod = 0x249a;
  t.ninethai = 0x0e59;
  t.nj = 0x01cc;
  t.njecyrillic = 0x045a;
  t.nkatakana = 0x30f3;
  t.nkatakanahalfwidth = 0xff9d;
  t.nlegrightlong = 0x019e;
  t.nlinebelow = 0x1e49;
  t.nmonospace = 0xff4e;
  t.nmsquare = 0x339a;
  t.nnabengali = 0x09a3;
  t.nnadeva = 0x0923;
  t.nnagujarati = 0x0aa3;
  t.nnagurmukhi = 0x0a23;
  t.nnnadeva = 0x0929;
  t.nohiragana = 0x306e;
  t.nokatakana = 0x30ce;
  t.nokatakanahalfwidth = 0xff89;
  t.nonbreakingspace = 0x00a0;
  t.nonenthai = 0x0e13;
  t.nonuthai = 0x0e19;
  t.noonarabic = 0x0646;
  t.noonfinalarabic = 0xfee6;
  t.noonghunnaarabic = 0x06ba;
  t.noonghunnafinalarabic = 0xfb9f;
  t.nooninitialarabic = 0xfee7;
  t.noonjeeminitialarabic = 0xfcd2;
  t.noonjeemisolatedarabic = 0xfc4b;
  t.noonmedialarabic = 0xfee8;
  t.noonmeeminitialarabic = 0xfcd5;
  t.noonmeemisolatedarabic = 0xfc4e;
  t.noonnoonfinalarabic = 0xfc8d;
  t.notcontains = 0x220c;
  t.notelement = 0x2209;
  t.notelementof = 0x2209;
  t.notequal = 0x2260;
  t.notgreater = 0x226f;
  t.notgreaternorequal = 0x2271;
  t.notgreaternorless = 0x2279;
  t.notidentical = 0x2262;
  t.notless = 0x226e;
  t.notlessnorequal = 0x2270;
  t.notparallel = 0x2226;
  t.notprecedes = 0x2280;
  t.notsubset = 0x2284;
  t.notsucceeds = 0x2281;
  t.notsuperset = 0x2285;
  t.nowarmenian = 0x0576;
  t.nparen = 0x24a9;
  t.nssquare = 0x33b1;
  t.nsuperior = 0x207f;
  t.ntilde = 0x00f1;
  t.nu = 0x03bd;
  t.nuhiragana = 0x306c;
  t.nukatakana = 0x30cc;
  t.nukatakanahalfwidth = 0xff87;
  t.nuktabengali = 0x09bc;
  t.nuktadeva = 0x093c;
  t.nuktagujarati = 0x0abc;
  t.nuktagurmukhi = 0x0a3c;
  t.numbersign = 0x0023;
  t.numbersignmonospace = 0xff03;
  t.numbersignsmall = 0xfe5f;
  t.numeralsigngreek = 0x0374;
  t.numeralsignlowergreek = 0x0375;
  t.numero = 0x2116;
  t.nun = 0x05e0;
  t.nundagesh = 0xfb40;
  t.nundageshhebrew = 0xfb40;
  t.nunhebrew = 0x05e0;
  t.nvsquare = 0x33b5;
  t.nwsquare = 0x33bb;
  t.nyabengali = 0x099e;
  t.nyadeva = 0x091e;
  t.nyagujarati = 0x0a9e;
  t.nyagurmukhi = 0x0a1e;
  t.o = 0x006f;
  t.oacute = 0x00f3;
  t.oangthai = 0x0e2d;
  t.obarred = 0x0275;
  t.obarredcyrillic = 0x04e9;
  t.obarreddieresiscyrillic = 0x04eb;
  t.obengali = 0x0993;
  t.obopomofo = 0x311b;
  t.obreve = 0x014f;
  t.ocandradeva = 0x0911;
  t.ocandragujarati = 0x0a91;
  t.ocandravowelsigndeva = 0x0949;
  t.ocandravowelsigngujarati = 0x0ac9;
  t.ocaron = 0x01d2;
  t.ocircle = 0x24de;
  t.ocircumflex = 0x00f4;
  t.ocircumflexacute = 0x1ed1;
  t.ocircumflexdotbelow = 0x1ed9;
  t.ocircumflexgrave = 0x1ed3;
  t.ocircumflexhookabove = 0x1ed5;
  t.ocircumflextilde = 0x1ed7;
  t.ocyrillic = 0x043e;
  t.odblacute = 0x0151;
  t.odblgrave = 0x020d;
  t.odeva = 0x0913;
  t.odieresis = 0x00f6;
  t.odieresiscyrillic = 0x04e7;
  t.odotbelow = 0x1ecd;
  t.oe = 0x0153;
  t.oekorean = 0x315a;
  t.ogonek = 0x02db;
  t.ogonekcmb = 0x0328;
  t.ograve = 0x00f2;
  t.ogujarati = 0x0a93;
  t.oharmenian = 0x0585;
  t.ohiragana = 0x304a;
  t.ohookabove = 0x1ecf;
  t.ohorn = 0x01a1;
  t.ohornacute = 0x1edb;
  t.ohorndotbelow = 0x1ee3;
  t.ohorngrave = 0x1edd;
  t.ohornhookabove = 0x1edf;
  t.ohorntilde = 0x1ee1;
  t.ohungarumlaut = 0x0151;
  t.oi = 0x01a3;
  t.oinvertedbreve = 0x020f;
  t.okatakana = 0x30aa;
  t.okatakanahalfwidth = 0xff75;
  t.okorean = 0x3157;
  t.olehebrew = 0x05ab;
  t.omacron = 0x014d;
  t.omacronacute = 0x1e53;
  t.omacrongrave = 0x1e51;
  t.omdeva = 0x0950;
  t.omega = 0x03c9;
  t.omega1 = 0x03d6;
  t.omegacyrillic = 0x0461;
  t.omegalatinclosed = 0x0277;
  t.omegaroundcyrillic = 0x047b;
  t.omegatitlocyrillic = 0x047d;
  t.omegatonos = 0x03ce;
  t.omgujarati = 0x0ad0;
  t.omicron = 0x03bf;
  t.omicrontonos = 0x03cc;
  t.omonospace = 0xff4f;
  t.one = 0x0031;
  t.onearabic = 0x0661;
  t.onebengali = 0x09e7;
  t.onecircle = 0x2460;
  t.onecircleinversesansserif = 0x278a;
  t.onedeva = 0x0967;
  t.onedotenleader = 0x2024;
  t.oneeighth = 0x215b;
  t.onefitted = 0xf6dc;
  t.onegujarati = 0x0ae7;
  t.onegurmukhi = 0x0a67;
  t.onehackarabic = 0x0661;
  t.onehalf = 0x00bd;
  t.onehangzhou = 0x3021;
  t.oneideographicparen = 0x3220;
  t.oneinferior = 0x2081;
  t.onemonospace = 0xff11;
  t.onenumeratorbengali = 0x09f4;
  t.oneoldstyle = 0xf731;
  t.oneparen = 0x2474;
  t.oneperiod = 0x2488;
  t.onepersian = 0x06f1;
  t.onequarter = 0x00bc;
  t.oneroman = 0x2170;
  t.onesuperior = 0x00b9;
  t.onethai = 0x0e51;
  t.onethird = 0x2153;
  t.oogonek = 0x01eb;
  t.oogonekmacron = 0x01ed;
  t.oogurmukhi = 0x0a13;
  t.oomatragurmukhi = 0x0a4b;
  t.oopen = 0x0254;
  t.oparen = 0x24aa;
  t.openbullet = 0x25e6;
  t.option = 0x2325;
  t.ordfeminine = 0x00aa;
  t.ordmasculine = 0x00ba;
  t.orthogonal = 0x221f;
  t.oshortdeva = 0x0912;
  t.oshortvowelsigndeva = 0x094a;
  t.oslash = 0x00f8;
  t.oslashacute = 0x01ff;
  t.osmallhiragana = 0x3049;
  t.osmallkatakana = 0x30a9;
  t.osmallkatakanahalfwidth = 0xff6b;
  t.ostrokeacute = 0x01ff;
  t.osuperior = 0xf6f0;
  t.otcyrillic = 0x047f;
  t.otilde = 0x00f5;
  t.otildeacute = 0x1e4d;
  t.otildedieresis = 0x1e4f;
  t.oubopomofo = 0x3121;
  t.overline = 0x203e;
  t.overlinecenterline = 0xfe4a;
  t.overlinecmb = 0x0305;
  t.overlinedashed = 0xfe49;
  t.overlinedblwavy = 0xfe4c;
  t.overlinewavy = 0xfe4b;
  t.overscore = 0x00af;
  t.ovowelsignbengali = 0x09cb;
  t.ovowelsigndeva = 0x094b;
  t.ovowelsigngujarati = 0x0acb;
  t.p = 0x0070;
  t.paampssquare = 0x3380;
  t.paasentosquare = 0x332b;
  t.pabengali = 0x09aa;
  t.pacute = 0x1e55;
  t.padeva = 0x092a;
  t.pagedown = 0x21df;
  t.pageup = 0x21de;
  t.pagujarati = 0x0aaa;
  t.pagurmukhi = 0x0a2a;
  t.pahiragana = 0x3071;
  t.paiyannoithai = 0x0e2f;
  t.pakatakana = 0x30d1;
  t.palatalizationcyrilliccmb = 0x0484;
  t.palochkacyrillic = 0x04c0;
  t.pansioskorean = 0x317f;
  t.paragraph = 0x00b6;
  t.parallel = 0x2225;
  t.parenleft = 0x0028;
  t.parenleftaltonearabic = 0xfd3e;
  t.parenleftbt = 0xf8ed;
  t.parenleftex = 0xf8ec;
  t.parenleftinferior = 0x208d;
  t.parenleftmonospace = 0xff08;
  t.parenleftsmall = 0xfe59;
  t.parenleftsuperior = 0x207d;
  t.parenlefttp = 0xf8eb;
  t.parenleftvertical = 0xfe35;
  t.parenright = 0x0029;
  t.parenrightaltonearabic = 0xfd3f;
  t.parenrightbt = 0xf8f8;
  t.parenrightex = 0xf8f7;
  t.parenrightinferior = 0x208e;
  t.parenrightmonospace = 0xff09;
  t.parenrightsmall = 0xfe5a;
  t.parenrightsuperior = 0x207e;
  t.parenrighttp = 0xf8f6;
  t.parenrightvertical = 0xfe36;
  t.partialdiff = 0x2202;
  t.paseqhebrew = 0x05c0;
  t.pashtahebrew = 0x0599;
  t.pasquare = 0x33a9;
  t.patah = 0x05b7;
  t.patah11 = 0x05b7;
  t.patah1d = 0x05b7;
  t.patah2a = 0x05b7;
  t.patahhebrew = 0x05b7;
  t.patahnarrowhebrew = 0x05b7;
  t.patahquarterhebrew = 0x05b7;
  t.patahwidehebrew = 0x05b7;
  t.pazerhebrew = 0x05a1;
  t.pbopomofo = 0x3106;
  t.pcircle = 0x24df;
  t.pdotaccent = 0x1e57;
  t.pe = 0x05e4;
  t.pecyrillic = 0x043f;
  t.pedagesh = 0xfb44;
  t.pedageshhebrew = 0xfb44;
  t.peezisquare = 0x333b;
  t.pefinaldageshhebrew = 0xfb43;
  t.peharabic = 0x067e;
  t.peharmenian = 0x057a;
  t.pehebrew = 0x05e4;
  t.pehfinalarabic = 0xfb57;
  t.pehinitialarabic = 0xfb58;
  t.pehiragana = 0x307a;
  t.pehmedialarabic = 0xfb59;
  t.pekatakana = 0x30da;
  t.pemiddlehookcyrillic = 0x04a7;
  t.perafehebrew = 0xfb4e;
  t.percent = 0x0025;
  t.percentarabic = 0x066a;
  t.percentmonospace = 0xff05;
  t.percentsmall = 0xfe6a;
  t.period = 0x002e;
  t.periodarmenian = 0x0589;
  t.periodcentered = 0x00b7;
  t.periodhalfwidth = 0xff61;
  t.periodinferior = 0xf6e7;
  t.periodmonospace = 0xff0e;
  t.periodsmall = 0xfe52;
  t.periodsuperior = 0xf6e8;
  t.perispomenigreekcmb = 0x0342;
  t.perpendicular = 0x22a5;
  t.perthousand = 0x2030;
  t.peseta = 0x20a7;
  t.pfsquare = 0x338a;
  t.phabengali = 0x09ab;
  t.phadeva = 0x092b;
  t.phagujarati = 0x0aab;
  t.phagurmukhi = 0x0a2b;
  t.phi = 0x03c6;
  t.phi1 = 0x03d5;
  t.phieuphacirclekorean = 0x327a;
  t.phieuphaparenkorean = 0x321a;
  t.phieuphcirclekorean = 0x326c;
  t.phieuphkorean = 0x314d;
  t.phieuphparenkorean = 0x320c;
  t.philatin = 0x0278;
  t.phinthuthai = 0x0e3a;
  t.phisymbolgreek = 0x03d5;
  t.phook = 0x01a5;
  t.phophanthai = 0x0e1e;
  t.phophungthai = 0x0e1c;
  t.phosamphaothai = 0x0e20;
  t.pi = 0x03c0;
  t.pieupacirclekorean = 0x3273;
  t.pieupaparenkorean = 0x3213;
  t.pieupcieuckorean = 0x3176;
  t.pieupcirclekorean = 0x3265;
  t.pieupkiyeokkorean = 0x3172;
  t.pieupkorean = 0x3142;
  t.pieupparenkorean = 0x3205;
  t.pieupsioskiyeokkorean = 0x3174;
  t.pieupsioskorean = 0x3144;
  t.pieupsiostikeutkorean = 0x3175;
  t.pieupthieuthkorean = 0x3177;
  t.pieuptikeutkorean = 0x3173;
  t.pihiragana = 0x3074;
  t.pikatakana = 0x30d4;
  t.pisymbolgreek = 0x03d6;
  t.piwrarmenian = 0x0583;
  t.planckover2pi = 0x210f;
  t.planckover2pi1 = 0x210f;
  t.plus = 0x002b;
  t.plusbelowcmb = 0x031f;
  t.pluscircle = 0x2295;
  t.plusminus = 0x00b1;
  t.plusmod = 0x02d6;
  t.plusmonospace = 0xff0b;
  t.plussmall = 0xfe62;
  t.plussuperior = 0x207a;
  t.pmonospace = 0xff50;
  t.pmsquare = 0x33d8;
  t.pohiragana = 0x307d;
  t.pointingindexdownwhite = 0x261f;
  t.pointingindexleftwhite = 0x261c;
  t.pointingindexrightwhite = 0x261e;
  t.pointingindexupwhite = 0x261d;
  t.pokatakana = 0x30dd;
  t.poplathai = 0x0e1b;
  t.postalmark = 0x3012;
  t.postalmarkface = 0x3020;
  t.pparen = 0x24ab;
  t.precedes = 0x227a;
  t.prescription = 0x211e;
  t.primemod = 0x02b9;
  t.primereversed = 0x2035;
  t.product = 0x220f;
  t.projective = 0x2305;
  t.prolongedkana = 0x30fc;
  t.propellor = 0x2318;
  t.propersubset = 0x2282;
  t.propersuperset = 0x2283;
  t.proportion = 0x2237;
  t.proportional = 0x221d;
  t.psi = 0x03c8;
  t.psicyrillic = 0x0471;
  t.psilipneumatacyrilliccmb = 0x0486;
  t.pssquare = 0x33b0;
  t.puhiragana = 0x3077;
  t.pukatakana = 0x30d7;
  t.pvsquare = 0x33b4;
  t.pwsquare = 0x33ba;
  t.q = 0x0071;
  t.qadeva = 0x0958;
  t.qadmahebrew = 0x05a8;
  t.qafarabic = 0x0642;
  t.qaffinalarabic = 0xfed6;
  t.qafinitialarabic = 0xfed7;
  t.qafmedialarabic = 0xfed8;
  t.qamats = 0x05b8;
  t.qamats10 = 0x05b8;
  t.qamats1a = 0x05b8;
  t.qamats1c = 0x05b8;
  t.qamats27 = 0x05b8;
  t.qamats29 = 0x05b8;
  t.qamats33 = 0x05b8;
  t.qamatsde = 0x05b8;
  t.qamatshebrew = 0x05b8;
  t.qamatsnarrowhebrew = 0x05b8;
  t.qamatsqatanhebrew = 0x05b8;
  t.qamatsqatannarrowhebrew = 0x05b8;
  t.qamatsqatanquarterhebrew = 0x05b8;
  t.qamatsqatanwidehebrew = 0x05b8;
  t.qamatsquarterhebrew = 0x05b8;
  t.qamatswidehebrew = 0x05b8;
  t.qarneyparahebrew = 0x059f;
  t.qbopomofo = 0x3111;
  t.qcircle = 0x24e0;
  t.qhook = 0x02a0;
  t.qmonospace = 0xff51;
  t.qof = 0x05e7;
  t.qofdagesh = 0xfb47;
  t.qofdageshhebrew = 0xfb47;
  t.qofhebrew = 0x05e7;
  t.qparen = 0x24ac;
  t.quarternote = 0x2669;
  t.qubuts = 0x05bb;
  t.qubuts18 = 0x05bb;
  t.qubuts25 = 0x05bb;
  t.qubuts31 = 0x05bb;
  t.qubutshebrew = 0x05bb;
  t.qubutsnarrowhebrew = 0x05bb;
  t.qubutsquarterhebrew = 0x05bb;
  t.qubutswidehebrew = 0x05bb;
  t.question = 0x003f;
  t.questionarabic = 0x061f;
  t.questionarmenian = 0x055e;
  t.questiondown = 0x00bf;
  t.questiondownsmall = 0xf7bf;
  t.questiongreek = 0x037e;
  t.questionmonospace = 0xff1f;
  t.questionsmall = 0xf73f;
  t.quotedbl = 0x0022;
  t.quotedblbase = 0x201e;
  t.quotedblleft = 0x201c;
  t.quotedblmonospace = 0xff02;
  t.quotedblprime = 0x301e;
  t.quotedblprimereversed = 0x301d;
  t.quotedblright = 0x201d;
  t.quoteleft = 0x2018;
  t.quoteleftreversed = 0x201b;
  t.quotereversed = 0x201b;
  t.quoteright = 0x2019;
  t.quoterightn = 0x0149;
  t.quotesinglbase = 0x201a;
  t.quotesingle = 0x0027;
  t.quotesinglemonospace = 0xff07;
  t.r = 0x0072;
  t.raarmenian = 0x057c;
  t.rabengali = 0x09b0;
  t.racute = 0x0155;
  t.radeva = 0x0930;
  t.radical = 0x221a;
  t.radicalex = 0xf8e5;
  t.radoverssquare = 0x33ae;
  t.radoverssquaredsquare = 0x33af;
  t.radsquare = 0x33ad;
  t.rafe = 0x05bf;
  t.rafehebrew = 0x05bf;
  t.ragujarati = 0x0ab0;
  t.ragurmukhi = 0x0a30;
  t.rahiragana = 0x3089;
  t.rakatakana = 0x30e9;
  t.rakatakanahalfwidth = 0xff97;
  t.ralowerdiagonalbengali = 0x09f1;
  t.ramiddlediagonalbengali = 0x09f0;
  t.ramshorn = 0x0264;
  t.ratio = 0x2236;
  t.rbopomofo = 0x3116;
  t.rcaron = 0x0159;
  t.rcedilla = 0x0157;
  t.rcircle = 0x24e1;
  t.rcommaaccent = 0x0157;
  t.rdblgrave = 0x0211;
  t.rdotaccent = 0x1e59;
  t.rdotbelow = 0x1e5b;
  t.rdotbelowmacron = 0x1e5d;
  t.referencemark = 0x203b;
  t.reflexsubset = 0x2286;
  t.reflexsuperset = 0x2287;
  t.registered = 0x00ae;
  t.registersans = 0xf8e8;
  t.registerserif = 0xf6da;
  t.reharabic = 0x0631;
  t.reharmenian = 0x0580;
  t.rehfinalarabic = 0xfeae;
  t.rehiragana = 0x308c;
  t.rekatakana = 0x30ec;
  t.rekatakanahalfwidth = 0xff9a;
  t.resh = 0x05e8;
  t.reshdageshhebrew = 0xfb48;
  t.reshhebrew = 0x05e8;
  t.reversedtilde = 0x223d;
  t.reviahebrew = 0x0597;
  t.reviamugrashhebrew = 0x0597;
  t.revlogicalnot = 0x2310;
  t.rfishhook = 0x027e;
  t.rfishhookreversed = 0x027f;
  t.rhabengali = 0x09dd;
  t.rhadeva = 0x095d;
  t.rho = 0x03c1;
  t.rhook = 0x027d;
  t.rhookturned = 0x027b;
  t.rhookturnedsuperior = 0x02b5;
  t.rhosymbolgreek = 0x03f1;
  t.rhotichookmod = 0x02de;
  t.rieulacirclekorean = 0x3271;
  t.rieulaparenkorean = 0x3211;
  t.rieulcirclekorean = 0x3263;
  t.rieulhieuhkorean = 0x3140;
  t.rieulkiyeokkorean = 0x313a;
  t.rieulkiyeoksioskorean = 0x3169;
  t.rieulkorean = 0x3139;
  t.rieulmieumkorean = 0x313b;
  t.rieulpansioskorean = 0x316c;
  t.rieulparenkorean = 0x3203;
  t.rieulphieuphkorean = 0x313f;
  t.rieulpieupkorean = 0x313c;
  t.rieulpieupsioskorean = 0x316b;
  t.rieulsioskorean = 0x313d;
  t.rieulthieuthkorean = 0x313e;
  t.rieultikeutkorean = 0x316a;
  t.rieulyeorinhieuhkorean = 0x316d;
  t.rightangle = 0x221f;
  t.righttackbelowcmb = 0x0319;
  t.righttriangle = 0x22bf;
  t.rihiragana = 0x308a;
  t.rikatakana = 0x30ea;
  t.rikatakanahalfwidth = 0xff98;
  t.ring = 0x02da;
  t.ringbelowcmb = 0x0325;
  t.ringcmb = 0x030a;
  t.ringhalfleft = 0x02bf;
  t.ringhalfleftarmenian = 0x0559;
  t.ringhalfleftbelowcmb = 0x031c;
  t.ringhalfleftcentered = 0x02d3;
  t.ringhalfright = 0x02be;
  t.ringhalfrightbelowcmb = 0x0339;
  t.ringhalfrightcentered = 0x02d2;
  t.rinvertedbreve = 0x0213;
  t.rittorusquare = 0x3351;
  t.rlinebelow = 0x1e5f;
  t.rlongleg = 0x027c;
  t.rlonglegturned = 0x027a;
  t.rmonospace = 0xff52;
  t.rohiragana = 0x308d;
  t.rokatakana = 0x30ed;
  t.rokatakanahalfwidth = 0xff9b;
  t.roruathai = 0x0e23;
  t.rparen = 0x24ad;
  t.rrabengali = 0x09dc;
  t.rradeva = 0x0931;
  t.rragurmukhi = 0x0a5c;
  t.rreharabic = 0x0691;
  t.rrehfinalarabic = 0xfb8d;
  t.rrvocalicbengali = 0x09e0;
  t.rrvocalicdeva = 0x0960;
  t.rrvocalicgujarati = 0x0ae0;
  t.rrvocalicvowelsignbengali = 0x09c4;
  t.rrvocalicvowelsigndeva = 0x0944;
  t.rrvocalicvowelsigngujarati = 0x0ac4;
  t.rsuperior = 0xf6f1;
  t.rtblock = 0x2590;
  t.rturned = 0x0279;
  t.rturnedsuperior = 0x02b4;
  t.ruhiragana = 0x308b;
  t.rukatakana = 0x30eb;
  t.rukatakanahalfwidth = 0xff99;
  t.rupeemarkbengali = 0x09f2;
  t.rupeesignbengali = 0x09f3;
  t.rupiah = 0xf6dd;
  t.ruthai = 0x0e24;
  t.rvocalicbengali = 0x098b;
  t.rvocalicdeva = 0x090b;
  t.rvocalicgujarati = 0x0a8b;
  t.rvocalicvowelsignbengali = 0x09c3;
  t.rvocalicvowelsigndeva = 0x0943;
  t.rvocalicvowelsigngujarati = 0x0ac3;
  t.s = 0x0073;
  t.sabengali = 0x09b8;
  t.sacute = 0x015b;
  t.sacutedotaccent = 0x1e65;
  t.sadarabic = 0x0635;
  t.sadeva = 0x0938;
  t.sadfinalarabic = 0xfeba;
  t.sadinitialarabic = 0xfebb;
  t.sadmedialarabic = 0xfebc;
  t.sagujarati = 0x0ab8;
  t.sagurmukhi = 0x0a38;
  t.sahiragana = 0x3055;
  t.sakatakana = 0x30b5;
  t.sakatakanahalfwidth = 0xff7b;
  t.sallallahoualayhewasallamarabic = 0xfdfa;
  t.samekh = 0x05e1;
  t.samekhdagesh = 0xfb41;
  t.samekhdageshhebrew = 0xfb41;
  t.samekhhebrew = 0x05e1;
  t.saraaathai = 0x0e32;
  t.saraaethai = 0x0e41;
  t.saraaimaimalaithai = 0x0e44;
  t.saraaimaimuanthai = 0x0e43;
  t.saraamthai = 0x0e33;
  t.saraathai = 0x0e30;
  t.saraethai = 0x0e40;
  t.saraiileftthai = 0xf886;
  t.saraiithai = 0x0e35;
  t.saraileftthai = 0xf885;
  t.saraithai = 0x0e34;
  t.saraothai = 0x0e42;
  t.saraueeleftthai = 0xf888;
  t.saraueethai = 0x0e37;
  t.saraueleftthai = 0xf887;
  t.sarauethai = 0x0e36;
  t.sarauthai = 0x0e38;
  t.sarauuthai = 0x0e39;
  t.sbopomofo = 0x3119;
  t.scaron = 0x0161;
  t.scarondotaccent = 0x1e67;
  t.scedilla = 0x015f;
  t.schwa = 0x0259;
  t.schwacyrillic = 0x04d9;
  t.schwadieresiscyrillic = 0x04db;
  t.schwahook = 0x025a;
  t.scircle = 0x24e2;
  t.scircumflex = 0x015d;
  t.scommaaccent = 0x0219;
  t.sdotaccent = 0x1e61;
  t.sdotbelow = 0x1e63;
  t.sdotbelowdotaccent = 0x1e69;
  t.seagullbelowcmb = 0x033c;
  t.second = 0x2033;
  t.secondtonechinese = 0x02ca;
  t.section = 0x00a7;
  t.seenarabic = 0x0633;
  t.seenfinalarabic = 0xfeb2;
  t.seeninitialarabic = 0xfeb3;
  t.seenmedialarabic = 0xfeb4;
  t.segol = 0x05b6;
  t.segol13 = 0x05b6;
  t.segol1f = 0x05b6;
  t.segol2c = 0x05b6;
  t.segolhebrew = 0x05b6;
  t.segolnarrowhebrew = 0x05b6;
  t.segolquarterhebrew = 0x05b6;
  t.segoltahebrew = 0x0592;
  t.segolwidehebrew = 0x05b6;
  t.seharmenian = 0x057d;
  t.sehiragana = 0x305b;
  t.sekatakana = 0x30bb;
  t.sekatakanahalfwidth = 0xff7e;
  t.semicolon = 0x003b;
  t.semicolonarabic = 0x061b;
  t.semicolonmonospace = 0xff1b;
  t.semicolonsmall = 0xfe54;
  t.semivoicedmarkkana = 0x309c;
  t.semivoicedmarkkanahalfwidth = 0xff9f;
  t.sentisquare = 0x3322;
  t.sentosquare = 0x3323;
  t.seven = 0x0037;
  t.sevenarabic = 0x0667;
  t.sevenbengali = 0x09ed;
  t.sevencircle = 0x2466;
  t.sevencircleinversesansserif = 0x2790;
  t.sevendeva = 0x096d;
  t.seveneighths = 0x215e;
  t.sevengujarati = 0x0aed;
  t.sevengurmukhi = 0x0a6d;
  t.sevenhackarabic = 0x0667;
  t.sevenhangzhou = 0x3027;
  t.sevenideographicparen = 0x3226;
  t.seveninferior = 0x2087;
  t.sevenmonospace = 0xff17;
  t.sevenoldstyle = 0xf737;
  t.sevenparen = 0x247a;
  t.sevenperiod = 0x248e;
  t.sevenpersian = 0x06f7;
  t.sevenroman = 0x2176;
  t.sevensuperior = 0x2077;
  t.seventeencircle = 0x2470;
  t.seventeenparen = 0x2484;
  t.seventeenperiod = 0x2498;
  t.seventhai = 0x0e57;
  t.sfthyphen = 0x00ad;
  t.shaarmenian = 0x0577;
  t.shabengali = 0x09b6;
  t.shacyrillic = 0x0448;
  t.shaddaarabic = 0x0651;
  t.shaddadammaarabic = 0xfc61;
  t.shaddadammatanarabic = 0xfc5e;
  t.shaddafathaarabic = 0xfc60;
  t.shaddakasraarabic = 0xfc62;
  t.shaddakasratanarabic = 0xfc5f;
  t.shade = 0x2592;
  t.shadedark = 0x2593;
  t.shadelight = 0x2591;
  t.shademedium = 0x2592;
  t.shadeva = 0x0936;
  t.shagujarati = 0x0ab6;
  t.shagurmukhi = 0x0a36;
  t.shalshelethebrew = 0x0593;
  t.shbopomofo = 0x3115;
  t.shchacyrillic = 0x0449;
  t.sheenarabic = 0x0634;
  t.sheenfinalarabic = 0xfeb6;
  t.sheeninitialarabic = 0xfeb7;
  t.sheenmedialarabic = 0xfeb8;
  t.sheicoptic = 0x03e3;
  t.sheqel = 0x20aa;
  t.sheqelhebrew = 0x20aa;
  t.sheva = 0x05b0;
  t.sheva115 = 0x05b0;
  t.sheva15 = 0x05b0;
  t.sheva22 = 0x05b0;
  t.sheva2e = 0x05b0;
  t.shevahebrew = 0x05b0;
  t.shevanarrowhebrew = 0x05b0;
  t.shevaquarterhebrew = 0x05b0;
  t.shevawidehebrew = 0x05b0;
  t.shhacyrillic = 0x04bb;
  t.shimacoptic = 0x03ed;
  t.shin = 0x05e9;
  t.shindagesh = 0xfb49;
  t.shindageshhebrew = 0xfb49;
  t.shindageshshindot = 0xfb2c;
  t.shindageshshindothebrew = 0xfb2c;
  t.shindageshsindot = 0xfb2d;
  t.shindageshsindothebrew = 0xfb2d;
  t.shindothebrew = 0x05c1;
  t.shinhebrew = 0x05e9;
  t.shinshindot = 0xfb2a;
  t.shinshindothebrew = 0xfb2a;
  t.shinsindot = 0xfb2b;
  t.shinsindothebrew = 0xfb2b;
  t.shook = 0x0282;
  t.sigma = 0x03c3;
  t.sigma1 = 0x03c2;
  t.sigmafinal = 0x03c2;
  t.sigmalunatesymbolgreek = 0x03f2;
  t.sihiragana = 0x3057;
  t.sikatakana = 0x30b7;
  t.sikatakanahalfwidth = 0xff7c;
  t.siluqhebrew = 0x05bd;
  t.siluqlefthebrew = 0x05bd;
  t.similar = 0x223c;
  t.sindothebrew = 0x05c2;
  t.siosacirclekorean = 0x3274;
  t.siosaparenkorean = 0x3214;
  t.sioscieuckorean = 0x317e;
  t.sioscirclekorean = 0x3266;
  t.sioskiyeokkorean = 0x317a;
  t.sioskorean = 0x3145;
  t.siosnieunkorean = 0x317b;
  t.siosparenkorean = 0x3206;
  t.siospieupkorean = 0x317d;
  t.siostikeutkorean = 0x317c;
  t.six = 0x0036;
  t.sixarabic = 0x0666;
  t.sixbengali = 0x09ec;
  t.sixcircle = 0x2465;
  t.sixcircleinversesansserif = 0x278f;
  t.sixdeva = 0x096c;
  t.sixgujarati = 0x0aec;
  t.sixgurmukhi = 0x0a6c;
  t.sixhackarabic = 0x0666;
  t.sixhangzhou = 0x3026;
  t.sixideographicparen = 0x3225;
  t.sixinferior = 0x2086;
  t.sixmonospace = 0xff16;
  t.sixoldstyle = 0xf736;
  t.sixparen = 0x2479;
  t.sixperiod = 0x248d;
  t.sixpersian = 0x06f6;
  t.sixroman = 0x2175;
  t.sixsuperior = 0x2076;
  t.sixteencircle = 0x246f;
  t.sixteencurrencydenominatorbengali = 0x09f9;
  t.sixteenparen = 0x2483;
  t.sixteenperiod = 0x2497;
  t.sixthai = 0x0e56;
  t.slash = 0x002f;
  t.slashmonospace = 0xff0f;
  t.slong = 0x017f;
  t.slongdotaccent = 0x1e9b;
  t.smileface = 0x263a;
  t.smonospace = 0xff53;
  t.sofpasuqhebrew = 0x05c3;
  t.softhyphen = 0x00ad;
  t.softsigncyrillic = 0x044c;
  t.sohiragana = 0x305d;
  t.sokatakana = 0x30bd;
  t.sokatakanahalfwidth = 0xff7f;
  t.soliduslongoverlaycmb = 0x0338;
  t.solidusshortoverlaycmb = 0x0337;
  t.sorusithai = 0x0e29;
  t.sosalathai = 0x0e28;
  t.sosothai = 0x0e0b;
  t.sosuathai = 0x0e2a;
  t.space = 0x0020;
  t.spacehackarabic = 0x0020;
  t.spade = 0x2660;
  t.spadesuitblack = 0x2660;
  t.spadesuitwhite = 0x2664;
  t.sparen = 0x24ae;
  t.squarebelowcmb = 0x033b;
  t.squarecc = 0x33c4;
  t.squarecm = 0x339d;
  t.squarediagonalcrosshatchfill = 0x25a9;
  t.squarehorizontalfill = 0x25a4;
  t.squarekg = 0x338f;
  t.squarekm = 0x339e;
  t.squarekmcapital = 0x33ce;
  t.squareln = 0x33d1;
  t.squarelog = 0x33d2;
  t.squaremg = 0x338e;
  t.squaremil = 0x33d5;
  t.squaremm = 0x339c;
  t.squaremsquared = 0x33a1;
  t.squareorthogonalcrosshatchfill = 0x25a6;
  t.squareupperlefttolowerrightfill = 0x25a7;
  t.squareupperrighttolowerleftfill = 0x25a8;
  t.squareverticalfill = 0x25a5;
  t.squarewhitewithsmallblack = 0x25a3;
  t.srsquare = 0x33db;
  t.ssabengali = 0x09b7;
  t.ssadeva = 0x0937;
  t.ssagujarati = 0x0ab7;
  t.ssangcieuckorean = 0x3149;
  t.ssanghieuhkorean = 0x3185;
  t.ssangieungkorean = 0x3180;
  t.ssangkiyeokkorean = 0x3132;
  t.ssangnieunkorean = 0x3165;
  t.ssangpieupkorean = 0x3143;
  t.ssangsioskorean = 0x3146;
  t.ssangtikeutkorean = 0x3138;
  t.ssuperior = 0xf6f2;
  t.sterling = 0x00a3;
  t.sterlingmonospace = 0xffe1;
  t.strokelongoverlaycmb = 0x0336;
  t.strokeshortoverlaycmb = 0x0335;
  t.subset = 0x2282;
  t.subsetnotequal = 0x228a;
  t.subsetorequal = 0x2286;
  t.succeeds = 0x227b;
  t.suchthat = 0x220b;
  t.suhiragana = 0x3059;
  t.sukatakana = 0x30b9;
  t.sukatakanahalfwidth = 0xff7d;
  t.sukunarabic = 0x0652;
  t.summation = 0x2211;
  t.sun = 0x263c;
  t.superset = 0x2283;
  t.supersetnotequal = 0x228b;
  t.supersetorequal = 0x2287;
  t.svsquare = 0x33dc;
  t.syouwaerasquare = 0x337c;
  t.t = 0x0074;
  t.tabengali = 0x09a4;
  t.tackdown = 0x22a4;
  t.tackleft = 0x22a3;
  t.tadeva = 0x0924;
  t.tagujarati = 0x0aa4;
  t.tagurmukhi = 0x0a24;
  t.taharabic = 0x0637;
  t.tahfinalarabic = 0xfec2;
  t.tahinitialarabic = 0xfec3;
  t.tahiragana = 0x305f;
  t.tahmedialarabic = 0xfec4;
  t.taisyouerasquare = 0x337d;
  t.takatakana = 0x30bf;
  t.takatakanahalfwidth = 0xff80;
  t.tatweelarabic = 0x0640;
  t.tau = 0x03c4;
  t.tav = 0x05ea;
  t.tavdages = 0xfb4a;
  t.tavdagesh = 0xfb4a;
  t.tavdageshhebrew = 0xfb4a;
  t.tavhebrew = 0x05ea;
  t.tbar = 0x0167;
  t.tbopomofo = 0x310a;
  t.tcaron = 0x0165;
  t.tccurl = 0x02a8;
  t.tcedilla = 0x0163;
  t.tcheharabic = 0x0686;
  t.tchehfinalarabic = 0xfb7b;
  t.tchehinitialarabic = 0xfb7c;
  t.tchehmedialarabic = 0xfb7d;
  t.tcircle = 0x24e3;
  t.tcircumflexbelow = 0x1e71;
  t.tcommaaccent = 0x0163;
  t.tdieresis = 0x1e97;
  t.tdotaccent = 0x1e6b;
  t.tdotbelow = 0x1e6d;
  t.tecyrillic = 0x0442;
  t.tedescendercyrillic = 0x04ad;
  t.teharabic = 0x062a;
  t.tehfinalarabic = 0xfe96;
  t.tehhahinitialarabic = 0xfca2;
  t.tehhahisolatedarabic = 0xfc0c;
  t.tehinitialarabic = 0xfe97;
  t.tehiragana = 0x3066;
  t.tehjeeminitialarabic = 0xfca1;
  t.tehjeemisolatedarabic = 0xfc0b;
  t.tehmarbutaarabic = 0x0629;
  t.tehmarbutafinalarabic = 0xfe94;
  t.tehmedialarabic = 0xfe98;
  t.tehmeeminitialarabic = 0xfca4;
  t.tehmeemisolatedarabic = 0xfc0e;
  t.tehnoonfinalarabic = 0xfc73;
  t.tekatakana = 0x30c6;
  t.tekatakanahalfwidth = 0xff83;
  t.telephone = 0x2121;
  t.telephoneblack = 0x260e;
  t.telishagedolahebrew = 0x05a0;
  t.telishaqetanahebrew = 0x05a9;
  t.tencircle = 0x2469;
  t.tenideographicparen = 0x3229;
  t.tenparen = 0x247d;
  t.tenperiod = 0x2491;
  t.tenroman = 0x2179;
  t.tesh = 0x02a7;
  t.tet = 0x05d8;
  t.tetdagesh = 0xfb38;
  t.tetdageshhebrew = 0xfb38;
  t.tethebrew = 0x05d8;
  t.tetsecyrillic = 0x04b5;
  t.tevirhebrew = 0x059b;
  t.tevirlefthebrew = 0x059b;
  t.thabengali = 0x09a5;
  t.thadeva = 0x0925;
  t.thagujarati = 0x0aa5;
  t.thagurmukhi = 0x0a25;
  t.thalarabic = 0x0630;
  t.thalfinalarabic = 0xfeac;
  t.thanthakhatlowleftthai = 0xf898;
  t.thanthakhatlowrightthai = 0xf897;
  t.thanthakhatthai = 0x0e4c;
  t.thanthakhatupperleftthai = 0xf896;
  t.theharabic = 0x062b;
  t.thehfinalarabic = 0xfe9a;
  t.thehinitialarabic = 0xfe9b;
  t.thehmedialarabic = 0xfe9c;
  t.thereexists = 0x2203;
  t.therefore = 0x2234;
  t.theta = 0x03b8;
  t.theta1 = 0x03d1;
  t.thetasymbolgreek = 0x03d1;
  t.thieuthacirclekorean = 0x3279;
  t.thieuthaparenkorean = 0x3219;
  t.thieuthcirclekorean = 0x326b;
  t.thieuthkorean = 0x314c;
  t.thieuthparenkorean = 0x320b;
  t.thirteencircle = 0x246c;
  t.thirteenparen = 0x2480;
  t.thirteenperiod = 0x2494;
  t.thonangmonthothai = 0x0e11;
  t.thook = 0x01ad;
  t.thophuthaothai = 0x0e12;
  t.thorn = 0x00fe;
  t.thothahanthai = 0x0e17;
  t.thothanthai = 0x0e10;
  t.thothongthai = 0x0e18;
  t.thothungthai = 0x0e16;
  t.thousandcyrillic = 0x0482;
  t.thousandsseparatorarabic = 0x066c;
  t.thousandsseparatorpersian = 0x066c;
  t.three = 0x0033;
  t.threearabic = 0x0663;
  t.threebengali = 0x09e9;
  t.threecircle = 0x2462;
  t.threecircleinversesansserif = 0x278c;
  t.threedeva = 0x0969;
  t.threeeighths = 0x215c;
  t.threegujarati = 0x0ae9;
  t.threegurmukhi = 0x0a69;
  t.threehackarabic = 0x0663;
  t.threehangzhou = 0x3023;
  t.threeideographicparen = 0x3222;
  t.threeinferior = 0x2083;
  t.threemonospace = 0xff13;
  t.threenumeratorbengali = 0x09f6;
  t.threeoldstyle = 0xf733;
  t.threeparen = 0x2476;
  t.threeperiod = 0x248a;
  t.threepersian = 0x06f3;
  t.threequarters = 0x00be;
  t.threequartersemdash = 0xf6de;
  t.threeroman = 0x2172;
  t.threesuperior = 0x00b3;
  t.threethai = 0x0e53;
  t.thzsquare = 0x3394;
  t.tihiragana = 0x3061;
  t.tikatakana = 0x30c1;
  t.tikatakanahalfwidth = 0xff81;
  t.tikeutacirclekorean = 0x3270;
  t.tikeutaparenkorean = 0x3210;
  t.tikeutcirclekorean = 0x3262;
  t.tikeutkorean = 0x3137;
  t.tikeutparenkorean = 0x3202;
  t.tilde = 0x02dc;
  t.tildebelowcmb = 0x0330;
  t.tildecmb = 0x0303;
  t.tildecomb = 0x0303;
  t.tildedoublecmb = 0x0360;
  t.tildeoperator = 0x223c;
  t.tildeoverlaycmb = 0x0334;
  t.tildeverticalcmb = 0x033e;
  t.timescircle = 0x2297;
  t.tipehahebrew = 0x0596;
  t.tipehalefthebrew = 0x0596;
  t.tippigurmukhi = 0x0a70;
  t.titlocyrilliccmb = 0x0483;
  t.tiwnarmenian = 0x057f;
  t.tlinebelow = 0x1e6f;
  t.tmonospace = 0xff54;
  t.toarmenian = 0x0569;
  t.tohiragana = 0x3068;
  t.tokatakana = 0x30c8;
  t.tokatakanahalfwidth = 0xff84;
  t.tonebarextrahighmod = 0x02e5;
  t.tonebarextralowmod = 0x02e9;
  t.tonebarhighmod = 0x02e6;
  t.tonebarlowmod = 0x02e8;
  t.tonebarmidmod = 0x02e7;
  t.tonefive = 0x01bd;
  t.tonesix = 0x0185;
  t.tonetwo = 0x01a8;
  t.tonos = 0x0384;
  t.tonsquare = 0x3327;
  t.topatakthai = 0x0e0f;
  t.tortoiseshellbracketleft = 0x3014;
  t.tortoiseshellbracketleftsmall = 0xfe5d;
  t.tortoiseshellbracketleftvertical = 0xfe39;
  t.tortoiseshellbracketright = 0x3015;
  t.tortoiseshellbracketrightsmall = 0xfe5e;
  t.tortoiseshellbracketrightvertical = 0xfe3a;
  t.totaothai = 0x0e15;
  t.tpalatalhook = 0x01ab;
  t.tparen = 0x24af;
  t.trademark = 0x2122;
  t.trademarksans = 0xf8ea;
  t.trademarkserif = 0xf6db;
  t.tretroflexhook = 0x0288;
  t.triagdn = 0x25bc;
  t.triaglf = 0x25c4;
  t.triagrt = 0x25ba;
  t.triagup = 0x25b2;
  t.ts = 0x02a6;
  t.tsadi = 0x05e6;
  t.tsadidagesh = 0xfb46;
  t.tsadidageshhebrew = 0xfb46;
  t.tsadihebrew = 0x05e6;
  t.tsecyrillic = 0x0446;
  t.tsere = 0x05b5;
  t.tsere12 = 0x05b5;
  t.tsere1e = 0x05b5;
  t.tsere2b = 0x05b5;
  t.tserehebrew = 0x05b5;
  t.tserenarrowhebrew = 0x05b5;
  t.tserequarterhebrew = 0x05b5;
  t.tserewidehebrew = 0x05b5;
  t.tshecyrillic = 0x045b;
  t.tsuperior = 0xf6f3;
  t.ttabengali = 0x099f;
  t.ttadeva = 0x091f;
  t.ttagujarati = 0x0a9f;
  t.ttagurmukhi = 0x0a1f;
  t.tteharabic = 0x0679;
  t.ttehfinalarabic = 0xfb67;
  t.ttehinitialarabic = 0xfb68;
  t.ttehmedialarabic = 0xfb69;
  t.tthabengali = 0x09a0;
  t.tthadeva = 0x0920;
  t.tthagujarati = 0x0aa0;
  t.tthagurmukhi = 0x0a20;
  t.tturned = 0x0287;
  t.tuhiragana = 0x3064;
  t.tukatakana = 0x30c4;
  t.tukatakanahalfwidth = 0xff82;
  t.tusmallhiragana = 0x3063;
  t.tusmallkatakana = 0x30c3;
  t.tusmallkatakanahalfwidth = 0xff6f;
  t.twelvecircle = 0x246b;
  t.twelveparen = 0x247f;
  t.twelveperiod = 0x2493;
  t.twelveroman = 0x217b;
  t.twentycircle = 0x2473;
  t.twentyhangzhou = 0x5344;
  t.twentyparen = 0x2487;
  t.twentyperiod = 0x249b;
  t.two = 0x0032;
  t.twoarabic = 0x0662;
  t.twobengali = 0x09e8;
  t.twocircle = 0x2461;
  t.twocircleinversesansserif = 0x278b;
  t.twodeva = 0x0968;
  t.twodotenleader = 0x2025;
  t.twodotleader = 0x2025;
  t.twodotleadervertical = 0xfe30;
  t.twogujarati = 0x0ae8;
  t.twogurmukhi = 0x0a68;
  t.twohackarabic = 0x0662;
  t.twohangzhou = 0x3022;
  t.twoideographicparen = 0x3221;
  t.twoinferior = 0x2082;
  t.twomonospace = 0xff12;
  t.twonumeratorbengali = 0x09f5;
  t.twooldstyle = 0xf732;
  t.twoparen = 0x2475;
  t.twoperiod = 0x2489;
  t.twopersian = 0x06f2;
  t.tworoman = 0x2171;
  t.twostroke = 0x01bb;
  t.twosuperior = 0x00b2;
  t.twothai = 0x0e52;
  t.twothirds = 0x2154;
  t.u = 0x0075;
  t.uacute = 0x00fa;
  t.ubar = 0x0289;
  t.ubengali = 0x0989;
  t.ubopomofo = 0x3128;
  t.ubreve = 0x016d;
  t.ucaron = 0x01d4;
  t.ucircle = 0x24e4;
  t.ucircumflex = 0x00fb;
  t.ucircumflexbelow = 0x1e77;
  t.ucyrillic = 0x0443;
  t.udattadeva = 0x0951;
  t.udblacute = 0x0171;
  t.udblgrave = 0x0215;
  t.udeva = 0x0909;
  t.udieresis = 0x00fc;
  t.udieresisacute = 0x01d8;
  t.udieresisbelow = 0x1e73;
  t.udieresiscaron = 0x01da;
  t.udieresiscyrillic = 0x04f1;
  t.udieresisgrave = 0x01dc;
  t.udieresismacron = 0x01d6;
  t.udotbelow = 0x1ee5;
  t.ugrave = 0x00f9;
  t.ugujarati = 0x0a89;
  t.ugurmukhi = 0x0a09;
  t.uhiragana = 0x3046;
  t.uhookabove = 0x1ee7;
  t.uhorn = 0x01b0;
  t.uhornacute = 0x1ee9;
  t.uhorndotbelow = 0x1ef1;
  t.uhorngrave = 0x1eeb;
  t.uhornhookabove = 0x1eed;
  t.uhorntilde = 0x1eef;
  t.uhungarumlaut = 0x0171;
  t.uhungarumlautcyrillic = 0x04f3;
  t.uinvertedbreve = 0x0217;
  t.ukatakana = 0x30a6;
  t.ukatakanahalfwidth = 0xff73;
  t.ukcyrillic = 0x0479;
  t.ukorean = 0x315c;
  t.umacron = 0x016b;
  t.umacroncyrillic = 0x04ef;
  t.umacrondieresis = 0x1e7b;
  t.umatragurmukhi = 0x0a41;
  t.umonospace = 0xff55;
  t.underscore = 0x005f;
  t.underscoredbl = 0x2017;
  t.underscoremonospace = 0xff3f;
  t.underscorevertical = 0xfe33;
  t.underscorewavy = 0xfe4f;
  t.union = 0x222a;
  t.universal = 0x2200;
  t.uogonek = 0x0173;
  t.uparen = 0x24b0;
  t.upblock = 0x2580;
  t.upperdothebrew = 0x05c4;
  t.upsilon = 0x03c5;
  t.upsilondieresis = 0x03cb;
  t.upsilondieresistonos = 0x03b0;
  t.upsilonlatin = 0x028a;
  t.upsilontonos = 0x03cd;
  t.uptackbelowcmb = 0x031d;
  t.uptackmod = 0x02d4;
  t.uragurmukhi = 0x0a73;
  t.uring = 0x016f;
  t.ushortcyrillic = 0x045e;
  t.usmallhiragana = 0x3045;
  t.usmallkatakana = 0x30a5;
  t.usmallkatakanahalfwidth = 0xff69;
  t.ustraightcyrillic = 0x04af;
  t.ustraightstrokecyrillic = 0x04b1;
  t.utilde = 0x0169;
  t.utildeacute = 0x1e79;
  t.utildebelow = 0x1e75;
  t.uubengali = 0x098a;
  t.uudeva = 0x090a;
  t.uugujarati = 0x0a8a;
  t.uugurmukhi = 0x0a0a;
  t.uumatragurmukhi = 0x0a42;
  t.uuvowelsignbengali = 0x09c2;
  t.uuvowelsigndeva = 0x0942;
  t.uuvowelsigngujarati = 0x0ac2;
  t.uvowelsignbengali = 0x09c1;
  t.uvowelsigndeva = 0x0941;
  t.uvowelsigngujarati = 0x0ac1;
  t.v = 0x0076;
  t.vadeva = 0x0935;
  t.vagujarati = 0x0ab5;
  t.vagurmukhi = 0x0a35;
  t.vakatakana = 0x30f7;
  t.vav = 0x05d5;
  t.vavdagesh = 0xfb35;
  t.vavdagesh65 = 0xfb35;
  t.vavdageshhebrew = 0xfb35;
  t.vavhebrew = 0x05d5;
  t.vavholam = 0xfb4b;
  t.vavholamhebrew = 0xfb4b;
  t.vavvavhebrew = 0x05f0;
  t.vavyodhebrew = 0x05f1;
  t.vcircle = 0x24e5;
  t.vdotbelow = 0x1e7f;
  t.vecyrillic = 0x0432;
  t.veharabic = 0x06a4;
  t.vehfinalarabic = 0xfb6b;
  t.vehinitialarabic = 0xfb6c;
  t.vehmedialarabic = 0xfb6d;
  t.vekatakana = 0x30f9;
  t.venus = 0x2640;
  t.verticalbar = 0x007c;
  t.verticallineabovecmb = 0x030d;
  t.verticallinebelowcmb = 0x0329;
  t.verticallinelowmod = 0x02cc;
  t.verticallinemod = 0x02c8;
  t.vewarmenian = 0x057e;
  t.vhook = 0x028b;
  t.vikatakana = 0x30f8;
  t.viramabengali = 0x09cd;
  t.viramadeva = 0x094d;
  t.viramagujarati = 0x0acd;
  t.visargabengali = 0x0983;
  t.visargadeva = 0x0903;
  t.visargagujarati = 0x0a83;
  t.vmonospace = 0xff56;
  t.voarmenian = 0x0578;
  t.voicediterationhiragana = 0x309e;
  t.voicediterationkatakana = 0x30fe;
  t.voicedmarkkana = 0x309b;
  t.voicedmarkkanahalfwidth = 0xff9e;
  t.vokatakana = 0x30fa;
  t.vparen = 0x24b1;
  t.vtilde = 0x1e7d;
  t.vturned = 0x028c;
  t.vuhiragana = 0x3094;
  t.vukatakana = 0x30f4;
  t.w = 0x0077;
  t.wacute = 0x1e83;
  t.waekorean = 0x3159;
  t.wahiragana = 0x308f;
  t.wakatakana = 0x30ef;
  t.wakatakanahalfwidth = 0xff9c;
  t.wakorean = 0x3158;
  t.wasmallhiragana = 0x308e;
  t.wasmallkatakana = 0x30ee;
  t.wattosquare = 0x3357;
  t.wavedash = 0x301c;
  t.wavyunderscorevertical = 0xfe34;
  t.wawarabic = 0x0648;
  t.wawfinalarabic = 0xfeee;
  t.wawhamzaabovearabic = 0x0624;
  t.wawhamzaabovefinalarabic = 0xfe86;
  t.wbsquare = 0x33dd;
  t.wcircle = 0x24e6;
  t.wcircumflex = 0x0175;
  t.wdieresis = 0x1e85;
  t.wdotaccent = 0x1e87;
  t.wdotbelow = 0x1e89;
  t.wehiragana = 0x3091;
  t.weierstrass = 0x2118;
  t.wekatakana = 0x30f1;
  t.wekorean = 0x315e;
  t.weokorean = 0x315d;
  t.wgrave = 0x1e81;
  t.whitebullet = 0x25e6;
  t.whitecircle = 0x25cb;
  t.whitecircleinverse = 0x25d9;
  t.whitecornerbracketleft = 0x300e;
  t.whitecornerbracketleftvertical = 0xfe43;
  t.whitecornerbracketright = 0x300f;
  t.whitecornerbracketrightvertical = 0xfe44;
  t.whitediamond = 0x25c7;
  t.whitediamondcontainingblacksmalldiamond = 0x25c8;
  t.whitedownpointingsmalltriangle = 0x25bf;
  t.whitedownpointingtriangle = 0x25bd;
  t.whiteleftpointingsmalltriangle = 0x25c3;
  t.whiteleftpointingtriangle = 0x25c1;
  t.whitelenticularbracketleft = 0x3016;
  t.whitelenticularbracketright = 0x3017;
  t.whiterightpointingsmalltriangle = 0x25b9;
  t.whiterightpointingtriangle = 0x25b7;
  t.whitesmallsquare = 0x25ab;
  t.whitesmilingface = 0x263a;
  t.whitesquare = 0x25a1;
  t.whitestar = 0x2606;
  t.whitetelephone = 0x260f;
  t.whitetortoiseshellbracketleft = 0x3018;
  t.whitetortoiseshellbracketright = 0x3019;
  t.whiteuppointingsmalltriangle = 0x25b5;
  t.whiteuppointingtriangle = 0x25b3;
  t.wihiragana = 0x3090;
  t.wikatakana = 0x30f0;
  t.wikorean = 0x315f;
  t.wmonospace = 0xff57;
  t.wohiragana = 0x3092;
  t.wokatakana = 0x30f2;
  t.wokatakanahalfwidth = 0xff66;
  t.won = 0x20a9;
  t.wonmonospace = 0xffe6;
  t.wowaenthai = 0x0e27;
  t.wparen = 0x24b2;
  t.wring = 0x1e98;
  t.wsuperior = 0x02b7;
  t.wturned = 0x028d;
  t.wynn = 0x01bf;
  t.x = 0x0078;
  t.xabovecmb = 0x033d;
  t.xbopomofo = 0x3112;
  t.xcircle = 0x24e7;
  t.xdieresis = 0x1e8d;
  t.xdotaccent = 0x1e8b;
  t.xeharmenian = 0x056d;
  t.xi = 0x03be;
  t.xmonospace = 0xff58;
  t.xparen = 0x24b3;
  t.xsuperior = 0x02e3;
  t.y = 0x0079;
  t.yaadosquare = 0x334e;
  t.yabengali = 0x09af;
  t.yacute = 0x00fd;
  t.yadeva = 0x092f;
  t.yaekorean = 0x3152;
  t.yagujarati = 0x0aaf;
  t.yagurmukhi = 0x0a2f;
  t.yahiragana = 0x3084;
  t.yakatakana = 0x30e4;
  t.yakatakanahalfwidth = 0xff94;
  t.yakorean = 0x3151;
  t.yamakkanthai = 0x0e4e;
  t.yasmallhiragana = 0x3083;
  t.yasmallkatakana = 0x30e3;
  t.yasmallkatakanahalfwidth = 0xff6c;
  t.yatcyrillic = 0x0463;
  t.ycircle = 0x24e8;
  t.ycircumflex = 0x0177;
  t.ydieresis = 0x00ff;
  t.ydotaccent = 0x1e8f;
  t.ydotbelow = 0x1ef5;
  t.yeharabic = 0x064a;
  t.yehbarreearabic = 0x06d2;
  t.yehbarreefinalarabic = 0xfbaf;
  t.yehfinalarabic = 0xfef2;
  t.yehhamzaabovearabic = 0x0626;
  t.yehhamzaabovefinalarabic = 0xfe8a;
  t.yehhamzaaboveinitialarabic = 0xfe8b;
  t.yehhamzaabovemedialarabic = 0xfe8c;
  t.yehinitialarabic = 0xfef3;
  t.yehmedialarabic = 0xfef4;
  t.yehmeeminitialarabic = 0xfcdd;
  t.yehmeemisolatedarabic = 0xfc58;
  t.yehnoonfinalarabic = 0xfc94;
  t.yehthreedotsbelowarabic = 0x06d1;
  t.yekorean = 0x3156;
  t.yen = 0x00a5;
  t.yenmonospace = 0xffe5;
  t.yeokorean = 0x3155;
  t.yeorinhieuhkorean = 0x3186;
  t.yerahbenyomohebrew = 0x05aa;
  t.yerahbenyomolefthebrew = 0x05aa;
  t.yericyrillic = 0x044b;
  t.yerudieresiscyrillic = 0x04f9;
  t.yesieungkorean = 0x3181;
  t.yesieungpansioskorean = 0x3183;
  t.yesieungsioskorean = 0x3182;
  t.yetivhebrew = 0x059a;
  t.ygrave = 0x1ef3;
  t.yhook = 0x01b4;
  t.yhookabove = 0x1ef7;
  t.yiarmenian = 0x0575;
  t.yicyrillic = 0x0457;
  t.yikorean = 0x3162;
  t.yinyang = 0x262f;
  t.yiwnarmenian = 0x0582;
  t.ymonospace = 0xff59;
  t.yod = 0x05d9;
  t.yoddagesh = 0xfb39;
  t.yoddageshhebrew = 0xfb39;
  t.yodhebrew = 0x05d9;
  t.yodyodhebrew = 0x05f2;
  t.yodyodpatahhebrew = 0xfb1f;
  t.yohiragana = 0x3088;
  t.yoikorean = 0x3189;
  t.yokatakana = 0x30e8;
  t.yokatakanahalfwidth = 0xff96;
  t.yokorean = 0x315b;
  t.yosmallhiragana = 0x3087;
  t.yosmallkatakana = 0x30e7;
  t.yosmallkatakanahalfwidth = 0xff6e;
  t.yotgreek = 0x03f3;
  t.yoyaekorean = 0x3188;
  t.yoyakorean = 0x3187;
  t.yoyakthai = 0x0e22;
  t.yoyingthai = 0x0e0d;
  t.yparen = 0x24b4;
  t.ypogegrammeni = 0x037a;
  t.ypogegrammenigreekcmb = 0x0345;
  t.yr = 0x01a6;
  t.yring = 0x1e99;
  t.ysuperior = 0x02b8;
  t.ytilde = 0x1ef9;
  t.yturned = 0x028e;
  t.yuhiragana = 0x3086;
  t.yuikorean = 0x318c;
  t.yukatakana = 0x30e6;
  t.yukatakanahalfwidth = 0xff95;
  t.yukorean = 0x3160;
  t.yusbigcyrillic = 0x046b;
  t.yusbigiotifiedcyrillic = 0x046d;
  t.yuslittlecyrillic = 0x0467;
  t.yuslittleiotifiedcyrillic = 0x0469;
  t.yusmallhiragana = 0x3085;
  t.yusmallkatakana = 0x30e5;
  t.yusmallkatakanahalfwidth = 0xff6d;
  t.yuyekorean = 0x318b;
  t.yuyeokorean = 0x318a;
  t.yyabengali = 0x09df;
  t.yyadeva = 0x095f;
  t.z = 0x007a;
  t.zaarmenian = 0x0566;
  t.zacute = 0x017a;
  t.zadeva = 0x095b;
  t.zagurmukhi = 0x0a5b;
  t.zaharabic = 0x0638;
  t.zahfinalarabic = 0xfec6;
  t.zahinitialarabic = 0xfec7;
  t.zahiragana = 0x3056;
  t.zahmedialarabic = 0xfec8;
  t.zainarabic = 0x0632;
  t.zainfinalarabic = 0xfeb0;
  t.zakatakana = 0x30b6;
  t.zaqefgadolhebrew = 0x0595;
  t.zaqefqatanhebrew = 0x0594;
  t.zarqahebrew = 0x0598;
  t.zayin = 0x05d6;
  t.zayindagesh = 0xfb36;
  t.zayindageshhebrew = 0xfb36;
  t.zayinhebrew = 0x05d6;
  t.zbopomofo = 0x3117;
  t.zcaron = 0x017e;
  t.zcircle = 0x24e9;
  t.zcircumflex = 0x1e91;
  t.zcurl = 0x0291;
  t.zdot = 0x017c;
  t.zdotaccent = 0x017c;
  t.zdotbelow = 0x1e93;
  t.zecyrillic = 0x0437;
  t.zedescendercyrillic = 0x0499;
  t.zedieresiscyrillic = 0x04df;
  t.zehiragana = 0x305c;
  t.zekatakana = 0x30bc;
  t.zero = 0x0030;
  t.zeroarabic = 0x0660;
  t.zerobengali = 0x09e6;
  t.zerodeva = 0x0966;
  t.zerogujarati = 0x0ae6;
  t.zerogurmukhi = 0x0a66;
  t.zerohackarabic = 0x0660;
  t.zeroinferior = 0x2080;
  t.zeromonospace = 0xff10;
  t.zerooldstyle = 0xf730;
  t.zeropersian = 0x06f0;
  t.zerosuperior = 0x2070;
  t.zerothai = 0x0e50;
  t.zerowidthjoiner = 0xfeff;
  t.zerowidthnonjoiner = 0x200c;
  t.zerowidthspace = 0x200b;
  t.zeta = 0x03b6;
  t.zhbopomofo = 0x3113;
  t.zhearmenian = 0x056a;
  t.zhebrevecyrillic = 0x04c2;
  t.zhecyrillic = 0x0436;
  t.zhedescendercyrillic = 0x0497;
  t.zhedieresiscyrillic = 0x04dd;
  t.zihiragana = 0x3058;
  t.zikatakana = 0x30b8;
  t.zinorhebrew = 0x05ae;
  t.zlinebelow = 0x1e95;
  t.zmonospace = 0xff5a;
  t.zohiragana = 0x305e;
  t.zokatakana = 0x30be;
  t.zparen = 0x24b5;
  t.zretroflexhook = 0x0290;
  t.zstroke = 0x01b6;
  t.zuhiragana = 0x305a;
  t.zukatakana = 0x30ba;
  t[".notdef"] = 0x0000;
  t.angbracketleftbig = 0x2329;
  t.angbracketleftBig = 0x2329;
  t.angbracketleftbigg = 0x2329;
  t.angbracketleftBigg = 0x2329;
  t.angbracketrightBig = 0x232a;
  t.angbracketrightbig = 0x232a;
  t.angbracketrightBigg = 0x232a;
  t.angbracketrightbigg = 0x232a;
  t.arrowhookleft = 0x21aa;
  t.arrowhookright = 0x21a9;
  t.arrowlefttophalf = 0x21bc;
  t.arrowleftbothalf = 0x21bd;
  t.arrownortheast = 0x2197;
  t.arrownorthwest = 0x2196;
  t.arrowrighttophalf = 0x21c0;
  t.arrowrightbothalf = 0x21c1;
  t.arrowsoutheast = 0x2198;
  t.arrowsouthwest = 0x2199;
  t.backslashbig = 0x2216;
  t.backslashBig = 0x2216;
  t.backslashBigg = 0x2216;
  t.backslashbigg = 0x2216;
  t.bardbl = 0x2016;
  t.bracehtipdownleft = 0xfe37;
  t.bracehtipdownright = 0xfe37;
  t.bracehtipupleft = 0xfe38;
  t.bracehtipupright = 0xfe38;
  t.braceleftBig = 0x007b;
  t.braceleftbig = 0x007b;
  t.braceleftbigg = 0x007b;
  t.braceleftBigg = 0x007b;
  t.bracerightBig = 0x007d;
  t.bracerightbig = 0x007d;
  t.bracerightbigg = 0x007d;
  t.bracerightBigg = 0x007d;
  t.bracketleftbig = 0x005b;
  t.bracketleftBig = 0x005b;
  t.bracketleftbigg = 0x005b;
  t.bracketleftBigg = 0x005b;
  t.bracketrightBig = 0x005d;
  t.bracketrightbig = 0x005d;
  t.bracketrightbigg = 0x005d;
  t.bracketrightBigg = 0x005d;
  t.ceilingleftbig = 0x2308;
  t.ceilingleftBig = 0x2308;
  t.ceilingleftBigg = 0x2308;
  t.ceilingleftbigg = 0x2308;
  t.ceilingrightbig = 0x2309;
  t.ceilingrightBig = 0x2309;
  t.ceilingrightbigg = 0x2309;
  t.ceilingrightBigg = 0x2309;
  t.circledotdisplay = 0x2299;
  t.circledottext = 0x2299;
  t.circlemultiplydisplay = 0x2297;
  t.circlemultiplytext = 0x2297;
  t.circleplusdisplay = 0x2295;
  t.circleplustext = 0x2295;
  t.contintegraldisplay = 0x222e;
  t.contintegraltext = 0x222e;
  t.coproductdisplay = 0x2210;
  t.coproducttext = 0x2210;
  t.floorleftBig = 0x230a;
  t.floorleftbig = 0x230a;
  t.floorleftbigg = 0x230a;
  t.floorleftBigg = 0x230a;
  t.floorrightbig = 0x230b;
  t.floorrightBig = 0x230b;
  t.floorrightBigg = 0x230b;
  t.floorrightbigg = 0x230b;
  t.hatwide = 0x0302;
  t.hatwider = 0x0302;
  t.hatwidest = 0x0302;
  t.intercal = 0x1d40;
  t.integraldisplay = 0x222b;
  t.integraltext = 0x222b;
  t.intersectiondisplay = 0x22c2;
  t.intersectiontext = 0x22c2;
  t.logicalanddisplay = 0x2227;
  t.logicalandtext = 0x2227;
  t.logicalordisplay = 0x2228;
  t.logicalortext = 0x2228;
  t.parenleftBig = 0x0028;
  t.parenleftbig = 0x0028;
  t.parenleftBigg = 0x0028;
  t.parenleftbigg = 0x0028;
  t.parenrightBig = 0x0029;
  t.parenrightbig = 0x0029;
  t.parenrightBigg = 0x0029;
  t.parenrightbigg = 0x0029;
  t.prime = 0x2032;
  t.productdisplay = 0x220f;
  t.producttext = 0x220f;
  t.radicalbig = 0x221a;
  t.radicalBig = 0x221a;
  t.radicalBigg = 0x221a;
  t.radicalbigg = 0x221a;
  t.radicalbt = 0x221a;
  t.radicaltp = 0x221a;
  t.radicalvertex = 0x221a;
  t.slashbig = 0x002f;
  t.slashBig = 0x002f;
  t.slashBigg = 0x002f;
  t.slashbigg = 0x002f;
  t.summationdisplay = 0x2211;
  t.summationtext = 0x2211;
  t.tildewide = 0x02dc;
  t.tildewider = 0x02dc;
  t.tildewidest = 0x02dc;
  t.uniondisplay = 0x22c3;
  t.unionmultidisplay = 0x228e;
  t.unionmultitext = 0x228e;
  t.unionsqdisplay = 0x2294;
  t.unionsqtext = 0x2294;
  t.uniontext = 0x22c3;
  t.vextenddouble = 0x2225;
  t.vextendsingle = 0x2223;
});
exports.getGlyphsUnicode = getGlyphsUnicode;
const getDingbatsGlyphsUnicode = (0, _core_utils.getLookupTableFactory)(function (t) {
  t.space = 0x0020;
  t.a1 = 0x2701;
  t.a2 = 0x2702;
  t.a202 = 0x2703;
  t.a3 = 0x2704;
  t.a4 = 0x260e;
  t.a5 = 0x2706;
  t.a119 = 0x2707;
  t.a118 = 0x2708;
  t.a117 = 0x2709;
  t.a11 = 0x261b;
  t.a12 = 0x261e;
  t.a13 = 0x270c;
  t.a14 = 0x270d;
  t.a15 = 0x270e;
  t.a16 = 0x270f;
  t.a105 = 0x2710;
  t.a17 = 0x2711;
  t.a18 = 0x2712;
  t.a19 = 0x2713;
  t.a20 = 0x2714;
  t.a21 = 0x2715;
  t.a22 = 0x2716;
  t.a23 = 0x2717;
  t.a24 = 0x2718;
  t.a25 = 0x2719;
  t.a26 = 0x271a;
  t.a27 = 0x271b;
  t.a28 = 0x271c;
  t.a6 = 0x271d;
  t.a7 = 0x271e;
  t.a8 = 0x271f;
  t.a9 = 0x2720;
  t.a10 = 0x2721;
  t.a29 = 0x2722;
  t.a30 = 0x2723;
  t.a31 = 0x2724;
  t.a32 = 0x2725;
  t.a33 = 0x2726;
  t.a34 = 0x2727;
  t.a35 = 0x2605;
  t.a36 = 0x2729;
  t.a37 = 0x272a;
  t.a38 = 0x272b;
  t.a39 = 0x272c;
  t.a40 = 0x272d;
  t.a41 = 0x272e;
  t.a42 = 0x272f;
  t.a43 = 0x2730;
  t.a44 = 0x2731;
  t.a45 = 0x2732;
  t.a46 = 0x2733;
  t.a47 = 0x2734;
  t.a48 = 0x2735;
  t.a49 = 0x2736;
  t.a50 = 0x2737;
  t.a51 = 0x2738;
  t.a52 = 0x2739;
  t.a53 = 0x273a;
  t.a54 = 0x273b;
  t.a55 = 0x273c;
  t.a56 = 0x273d;
  t.a57 = 0x273e;
  t.a58 = 0x273f;
  t.a59 = 0x2740;
  t.a60 = 0x2741;
  t.a61 = 0x2742;
  t.a62 = 0x2743;
  t.a63 = 0x2744;
  t.a64 = 0x2745;
  t.a65 = 0x2746;
  t.a66 = 0x2747;
  t.a67 = 0x2748;
  t.a68 = 0x2749;
  t.a69 = 0x274a;
  t.a70 = 0x274b;
  t.a71 = 0x25cf;
  t.a72 = 0x274d;
  t.a73 = 0x25a0;
  t.a74 = 0x274f;
  t.a203 = 0x2750;
  t.a75 = 0x2751;
  t.a204 = 0x2752;
  t.a76 = 0x25b2;
  t.a77 = 0x25bc;
  t.a78 = 0x25c6;
  t.a79 = 0x2756;
  t.a81 = 0x25d7;
  t.a82 = 0x2758;
  t.a83 = 0x2759;
  t.a84 = 0x275a;
  t.a97 = 0x275b;
  t.a98 = 0x275c;
  t.a99 = 0x275d;
  t.a100 = 0x275e;
  t.a101 = 0x2761;
  t.a102 = 0x2762;
  t.a103 = 0x2763;
  t.a104 = 0x2764;
  t.a106 = 0x2765;
  t.a107 = 0x2766;
  t.a108 = 0x2767;
  t.a112 = 0x2663;
  t.a111 = 0x2666;
  t.a110 = 0x2665;
  t.a109 = 0x2660;
  t.a120 = 0x2460;
  t.a121 = 0x2461;
  t.a122 = 0x2462;
  t.a123 = 0x2463;
  t.a124 = 0x2464;
  t.a125 = 0x2465;
  t.a126 = 0x2466;
  t.a127 = 0x2467;
  t.a128 = 0x2468;
  t.a129 = 0x2469;
  t.a130 = 0x2776;
  t.a131 = 0x2777;
  t.a132 = 0x2778;
  t.a133 = 0x2779;
  t.a134 = 0x277a;
  t.a135 = 0x277b;
  t.a136 = 0x277c;
  t.a137 = 0x277d;
  t.a138 = 0x277e;
  t.a139 = 0x277f;
  t.a140 = 0x2780;
  t.a141 = 0x2781;
  t.a142 = 0x2782;
  t.a143 = 0x2783;
  t.a144 = 0x2784;
  t.a145 = 0x2785;
  t.a146 = 0x2786;
  t.a147 = 0x2787;
  t.a148 = 0x2788;
  t.a149 = 0x2789;
  t.a150 = 0x278a;
  t.a151 = 0x278b;
  t.a152 = 0x278c;
  t.a153 = 0x278d;
  t.a154 = 0x278e;
  t.a155 = 0x278f;
  t.a156 = 0x2790;
  t.a157 = 0x2791;
  t.a158 = 0x2792;
  t.a159 = 0x2793;
  t.a160 = 0x2794;
  t.a161 = 0x2192;
  t.a163 = 0x2194;
  t.a164 = 0x2195;
  t.a196 = 0x2798;
  t.a165 = 0x2799;
  t.a192 = 0x279a;
  t.a166 = 0x279b;
  t.a167 = 0x279c;
  t.a168 = 0x279d;
  t.a169 = 0x279e;
  t.a170 = 0x279f;
  t.a171 = 0x27a0;
  t.a172 = 0x27a1;
  t.a173 = 0x27a2;
  t.a162 = 0x27a3;
  t.a174 = 0x27a4;
  t.a175 = 0x27a5;
  t.a176 = 0x27a6;
  t.a177 = 0x27a7;
  t.a178 = 0x27a8;
  t.a179 = 0x27a9;
  t.a193 = 0x27aa;
  t.a180 = 0x27ab;
  t.a199 = 0x27ac;
  t.a181 = 0x27ad;
  t.a200 = 0x27ae;
  t.a182 = 0x27af;
  t.a201 = 0x27b1;
  t.a183 = 0x27b2;
  t.a184 = 0x27b3;
  t.a197 = 0x27b4;
  t.a185 = 0x27b5;
  t.a194 = 0x27b6;
  t.a198 = 0x27b7;
  t.a186 = 0x27b8;
  t.a195 = 0x27b9;
  t.a187 = 0x27ba;
  t.a188 = 0x27bb;
  t.a189 = 0x27bc;
  t.a190 = 0x27bd;
  t.a191 = 0x27be;
  t.a89 = 0x2768;
  t.a90 = 0x2769;
  t.a93 = 0x276a;
  t.a94 = 0x276b;
  t.a91 = 0x276c;
  t.a92 = 0x276d;
  t.a205 = 0x276e;
  t.a85 = 0x276f;
  t.a206 = 0x2770;
  t.a86 = 0x2771;
  t.a87 = 0x2772;
  t.a88 = 0x2773;
  t.a95 = 0x2774;
  t.a96 = 0x2775;
  t[".notdef"] = 0x0000;
});
exports.getDingbatsGlyphsUnicode = getDingbatsGlyphsUnicode;

/***/ }),
/* 40 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.clearUnicodeCaches = clearUnicodeCaches;
exports.getCharUnicodeCategory = getCharUnicodeCategory;
exports.getUnicodeForGlyph = getUnicodeForGlyph;
exports.getUnicodeRangeFor = getUnicodeRangeFor;
exports.mapSpecialUnicodeValues = mapSpecialUnicodeValues;
var _core_utils = __w_pdfjs_require__(3);
const getSpecialPUASymbols = (0, _core_utils.getLookupTableFactory)(function (t) {
  t[63721] = 0x00a9;
  t[63193] = 0x00a9;
  t[63720] = 0x00ae;
  t[63194] = 0x00ae;
  t[63722] = 0x2122;
  t[63195] = 0x2122;
  t[63729] = 0x23a7;
  t[63730] = 0x23a8;
  t[63731] = 0x23a9;
  t[63740] = 0x23ab;
  t[63741] = 0x23ac;
  t[63742] = 0x23ad;
  t[63726] = 0x23a1;
  t[63727] = 0x23a2;
  t[63728] = 0x23a3;
  t[63737] = 0x23a4;
  t[63738] = 0x23a5;
  t[63739] = 0x23a6;
  t[63723] = 0x239b;
  t[63724] = 0x239c;
  t[63725] = 0x239d;
  t[63734] = 0x239e;
  t[63735] = 0x239f;
  t[63736] = 0x23a0;
});
function mapSpecialUnicodeValues(code) {
  if (code >= 0xfff0 && code <= 0xffff) {
    return 0;
  } else if (code >= 0xf600 && code <= 0xf8ff) {
    return getSpecialPUASymbols()[code] || code;
  } else if (code === 0x00ad) {
    return 0x002d;
  }
  return code;
}
function getUnicodeForGlyph(name, glyphsUnicodeMap) {
  let unicode = glyphsUnicodeMap[name];
  if (unicode !== undefined) {
    return unicode;
  }
  if (!name) {
    return -1;
  }
  if (name[0] === "u") {
    const nameLen = name.length;
    let hexStr;
    if (nameLen === 7 && name[1] === "n" && name[2] === "i") {
      hexStr = name.substring(3);
    } else if (nameLen >= 5 && nameLen <= 7) {
      hexStr = name.substring(1);
    } else {
      return -1;
    }
    if (hexStr === hexStr.toUpperCase()) {
      unicode = parseInt(hexStr, 16);
      if (unicode >= 0) {
        return unicode;
      }
    }
  }
  return -1;
}
const UnicodeRanges = [[0x0000, 0x007f], [0x0080, 0x00ff], [0x0100, 0x017f], [0x0180, 0x024f], [0x0250, 0x02af, 0x1d00, 0x1d7f, 0x1d80, 0x1dbf], [0x02b0, 0x02ff, 0xa700, 0xa71f], [0x0300, 0x036f, 0x1dc0, 0x1dff], [0x0370, 0x03ff], [0x2c80, 0x2cff], [0x0400, 0x04ff, 0x0500, 0x052f, 0x2de0, 0x2dff, 0xa640, 0xa69f], [0x0530, 0x058f], [0x0590, 0x05ff], [0xa500, 0xa63f], [0x0600, 0x06ff, 0x0750, 0x077f], [0x07c0, 0x07ff], [0x0900, 0x097f], [0x0980, 0x09ff], [0x0a00, 0x0a7f], [0x0a80, 0x0aff], [0x0b00, 0x0b7f], [0x0b80, 0x0bff], [0x0c00, 0x0c7f], [0x0c80, 0x0cff], [0x0d00, 0x0d7f], [0x0e00, 0x0e7f], [0x0e80, 0x0eff], [0x10a0, 0x10ff, 0x2d00, 0x2d2f], [0x1b00, 0x1b7f], [0x1100, 0x11ff], [0x1e00, 0x1eff, 0x2c60, 0x2c7f, 0xa720, 0xa7ff], [0x1f00, 0x1fff], [0x2000, 0x206f, 0x2e00, 0x2e7f], [0x2070, 0x209f], [0x20a0, 0x20cf], [0x20d0, 0x20ff], [0x2100, 0x214f], [0x2150, 0x218f], [0x2190, 0x21ff, 0x27f0, 0x27ff, 0x2900, 0x297f, 0x2b00, 0x2bff], [0x2200, 0x22ff, 0x2a00, 0x2aff, 0x27c0, 0x27ef, 0x2980, 0x29ff], [0x2300, 0x23ff], [0x2400, 0x243f], [0x2440, 0x245f], [0x2460, 0x24ff], [0x2500, 0x257f], [0x2580, 0x259f], [0x25a0, 0x25ff], [0x2600, 0x26ff], [0x2700, 0x27bf], [0x3000, 0x303f], [0x3040, 0x309f], [0x30a0, 0x30ff, 0x31f0, 0x31ff], [0x3100, 0x312f, 0x31a0, 0x31bf], [0x3130, 0x318f], [0xa840, 0xa87f], [0x3200, 0x32ff], [0x3300, 0x33ff], [0xac00, 0xd7af], [0xd800, 0xdfff], [0x10900, 0x1091f], [0x4e00, 0x9fff, 0x2e80, 0x2eff, 0x2f00, 0x2fdf, 0x2ff0, 0x2fff, 0x3400, 0x4dbf, 0x20000, 0x2a6df, 0x3190, 0x319f], [0xe000, 0xf8ff], [0x31c0, 0x31ef, 0xf900, 0xfaff, 0x2f800, 0x2fa1f], [0xfb00, 0xfb4f], [0xfb50, 0xfdff], [0xfe20, 0xfe2f], [0xfe10, 0xfe1f], [0xfe50, 0xfe6f], [0xfe70, 0xfeff], [0xff00, 0xffef], [0xfff0, 0xffff], [0x0f00, 0x0fff], [0x0700, 0x074f], [0x0780, 0x07bf], [0x0d80, 0x0dff], [0x1000, 0x109f], [0x1200, 0x137f, 0x1380, 0x139f, 0x2d80, 0x2ddf], [0x13a0, 0x13ff], [0x1400, 0x167f], [0x1680, 0x169f], [0x16a0, 0x16ff], [0x1780, 0x17ff], [0x1800, 0x18af], [0x2800, 0x28ff], [0xa000, 0xa48f], [0x1700, 0x171f, 0x1720, 0x173f, 0x1740, 0x175f, 0x1760, 0x177f], [0x10300, 0x1032f], [0x10330, 0x1034f], [0x10400, 0x1044f], [0x1d000, 0x1d0ff, 0x1d100, 0x1d1ff, 0x1d200, 0x1d24f], [0x1d400, 0x1d7ff], [0xff000, 0xffffd], [0xfe00, 0xfe0f, 0xe0100, 0xe01ef], [0xe0000, 0xe007f], [0x1900, 0x194f], [0x1950, 0x197f], [0x1980, 0x19df], [0x1a00, 0x1a1f], [0x2c00, 0x2c5f], [0x2d30, 0x2d7f], [0x4dc0, 0x4dff], [0xa800, 0xa82f], [0x10000, 0x1007f, 0x10080, 0x100ff, 0x10100, 0x1013f], [0x10140, 0x1018f], [0x10380, 0x1039f], [0x103a0, 0x103df], [0x10450, 0x1047f], [0x10480, 0x104af], [0x10800, 0x1083f], [0x10a00, 0x10a5f], [0x1d300, 0x1d35f], [0x12000, 0x123ff, 0x12400, 0x1247f], [0x1d360, 0x1d37f], [0x1b80, 0x1bbf], [0x1c00, 0x1c4f], [0x1c50, 0x1c7f], [0xa880, 0xa8df], [0xa900, 0xa92f], [0xa930, 0xa95f], [0xaa00, 0xaa5f], [0x10190, 0x101cf], [0x101d0, 0x101ff], [0x102a0, 0x102df, 0x10280, 0x1029f, 0x10920, 0x1093f], [0x1f030, 0x1f09f, 0x1f000, 0x1f02f]];
function getUnicodeRangeFor(value, lastPosition = -1) {
  if (lastPosition !== -1) {
    const range = UnicodeRanges[lastPosition];
    for (let i = 0, ii = range.length; i < ii; i += 2) {
      if (value >= range[i] && value <= range[i + 1]) {
        return lastPosition;
      }
    }
  }
  for (let i = 0, ii = UnicodeRanges.length; i < ii; i++) {
    const range = UnicodeRanges[i];
    for (let j = 0, jj = range.length; j < jj; j += 2) {
      if (value >= range[j] && value <= range[j + 1]) {
        return i;
      }
    }
  }
  return -1;
}
const SpecialCharRegExp = new RegExp("^(\\s)|(\\p{Mn})|(\\p{Cf})$", "u");
const CategoryCache = new Map();
function getCharUnicodeCategory(char) {
  const cachedCategory = CategoryCache.get(char);
  if (cachedCategory) {
    return cachedCategory;
  }
  const groups = char.match(SpecialCharRegExp);
  const category = {
    isWhitespace: !!groups?.[1],
    isZeroWidthDiacritic: !!groups?.[2],
    isInvisibleFormatMark: !!groups?.[3]
  };
  CategoryCache.set(char, category);
  return category;
}
function clearUnicodeCaches() {
  CategoryCache.clear();
}

/***/ }),
/* 41 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.getSerifFonts = exports.getNonStdFontMap = exports.getGlyphMapForStandardFonts = exports.getFontNameToFileMap = void 0;
exports.getStandardFontName = getStandardFontName;
exports.getSymbolsFonts = exports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForArialBlack = exports.getStdFontMap = void 0;
exports.isKnownFontName = isKnownFontName;
var _core_utils = __w_pdfjs_require__(3);
var _fonts_utils = __w_pdfjs_require__(38);
const getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
  t["Times-Roman"] = "Times-Roman";
  t.Helvetica = "Helvetica";
  t.Courier = "Courier";
  t.Symbol = "Symbol";
  t["Times-Bold"] = "Times-Bold";
  t["Helvetica-Bold"] = "Helvetica-Bold";
  t["Courier-Bold"] = "Courier-Bold";
  t.ZapfDingbats = "ZapfDingbats";
  t["Times-Italic"] = "Times-Italic";
  t["Helvetica-Oblique"] = "Helvetica-Oblique";
  t["Courier-Oblique"] = "Courier-Oblique";
  t["Times-BoldItalic"] = "Times-BoldItalic";
  t["Helvetica-BoldOblique"] = "Helvetica-BoldOblique";
  t["Courier-BoldOblique"] = "Courier-BoldOblique";
  t.ArialNarrow = "Helvetica";
  t["ArialNarrow-Bold"] = "Helvetica-Bold";
  t["ArialNarrow-BoldItalic"] = "Helvetica-BoldOblique";
  t["ArialNarrow-Italic"] = "Helvetica-Oblique";
  t.ArialBlack = "Helvetica";
  t["ArialBlack-Bold"] = "Helvetica-Bold";
  t["ArialBlack-BoldItalic"] = "Helvetica-BoldOblique";
  t["ArialBlack-Italic"] = "Helvetica-Oblique";
  t["Arial-Black"] = "Helvetica";
  t["Arial-Black-Bold"] = "Helvetica-Bold";
  t["Arial-Black-BoldItalic"] = "Helvetica-BoldOblique";
  t["Arial-Black-Italic"] = "Helvetica-Oblique";
  t.Arial = "Helvetica";
  t["Arial-Bold"] = "Helvetica-Bold";
  t["Arial-BoldItalic"] = "Helvetica-BoldOblique";
  t["Arial-Italic"] = "Helvetica-Oblique";
  t.ArialMT = "Helvetica";
  t["Arial-BoldItalicMT"] = "Helvetica-BoldOblique";
  t["Arial-BoldMT"] = "Helvetica-Bold";
  t["Arial-ItalicMT"] = "Helvetica-Oblique";
  t["Arial-BoldItalicMT-BoldItalic"] = "Helvetica-BoldOblique";
  t["Arial-BoldMT-Bold"] = "Helvetica-Bold";
  t["Arial-ItalicMT-Italic"] = "Helvetica-Oblique";
  t.ArialUnicodeMS = "Helvetica";
  t["ArialUnicodeMS-Bold"] = "Helvetica-Bold";
  t["ArialUnicodeMS-BoldItalic"] = "Helvetica-BoldOblique";
  t["ArialUnicodeMS-Italic"] = "Helvetica-Oblique";
  t["Courier-BoldItalic"] = "Courier-BoldOblique";
  t["Courier-Italic"] = "Courier-Oblique";
  t.CourierNew = "Courier";
  t["CourierNew-Bold"] = "Courier-Bold";
  t["CourierNew-BoldItalic"] = "Courier-BoldOblique";
  t["CourierNew-Italic"] = "Courier-Oblique";
  t["CourierNewPS-BoldItalicMT"] = "Courier-BoldOblique";
  t["CourierNewPS-BoldMT"] = "Courier-Bold";
  t["CourierNewPS-ItalicMT"] = "Courier-Oblique";
  t.CourierNewPSMT = "Courier";
  t["Helvetica-BoldItalic"] = "Helvetica-BoldOblique";
  t["Helvetica-Italic"] = "Helvetica-Oblique";
  t["Symbol-Bold"] = "Symbol";
  t["Symbol-BoldItalic"] = "Symbol";
  t["Symbol-Italic"] = "Symbol";
  t.TimesNewRoman = "Times-Roman";
  t["TimesNewRoman-Bold"] = "Times-Bold";
  t["TimesNewRoman-BoldItalic"] = "Times-BoldItalic";
  t["TimesNewRoman-Italic"] = "Times-Italic";
  t.TimesNewRomanPS = "Times-Roman";
  t["TimesNewRomanPS-Bold"] = "Times-Bold";
  t["TimesNewRomanPS-BoldItalic"] = "Times-BoldItalic";
  t["TimesNewRomanPS-BoldItalicMT"] = "Times-BoldItalic";
  t["TimesNewRomanPS-BoldMT"] = "Times-Bold";
  t["TimesNewRomanPS-Italic"] = "Times-Italic";
  t["TimesNewRomanPS-ItalicMT"] = "Times-Italic";
  t.TimesNewRomanPSMT = "Times-Roman";
  t["TimesNewRomanPSMT-Bold"] = "Times-Bold";
  t["TimesNewRomanPSMT-BoldItalic"] = "Times-BoldItalic";
  t["TimesNewRomanPSMT-Italic"] = "Times-Italic";
});
exports.getStdFontMap = getStdFontMap;
const getFontNameToFileMap = (0, _core_utils.getLookupTableFactory)(function (t) {
  t.Courier = "FoxitFixed.pfb";
  t["Courier-Bold"] = "FoxitFixedBold.pfb";
  t["Courier-BoldOblique"] = "FoxitFixedBoldItalic.pfb";
  t["Courier-Oblique"] = "FoxitFixedItalic.pfb";
  t.Helvetica = "LiberationSans-Regular.ttf";
  t["Helvetica-Bold"] = "LiberationSans-Bold.ttf";
  t["Helvetica-BoldOblique"] = "LiberationSans-BoldItalic.ttf";
  t["Helvetica-Oblique"] = "LiberationSans-Italic.ttf";
  t["Times-Roman"] = "FoxitSerif.pfb";
  t["Times-Bold"] = "FoxitSerifBold.pfb";
  t["Times-BoldItalic"] = "FoxitSerifBoldItalic.pfb";
  t["Times-Italic"] = "FoxitSerifItalic.pfb";
  t.Symbol = "FoxitSymbol.pfb";
  t.ZapfDingbats = "FoxitDingbats.pfb";
  t["LiberationSans-Regular"] = "LiberationSans-Regular.ttf";
  t["LiberationSans-Bold"] = "LiberationSans-Bold.ttf";
  t["LiberationSans-Italic"] = "LiberationSans-Italic.ttf";
  t["LiberationSans-BoldItalic"] = "LiberationSans-BoldItalic.ttf";
});
exports.getFontNameToFileMap = getFontNameToFileMap;
const getNonStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
  t.Calibri = "Helvetica";
  t["Calibri-Bold"] = "Helvetica-Bold";
  t["Calibri-BoldItalic"] = "Helvetica-BoldOblique";
  t["Calibri-Italic"] = "Helvetica-Oblique";
  t.CenturyGothic = "Helvetica";
  t["CenturyGothic-Bold"] = "Helvetica-Bold";
  t["CenturyGothic-BoldItalic"] = "Helvetica-BoldOblique";
  t["CenturyGothic-Italic"] = "Helvetica-Oblique";
  t.ComicSansMS = "Comic Sans MS";
  t["ComicSansMS-Bold"] = "Comic Sans MS-Bold";
  t["ComicSansMS-BoldItalic"] = "Comic Sans MS-BoldItalic";
  t["ComicSansMS-Italic"] = "Comic Sans MS-Italic";
  t.Impact = "Helvetica";
  t["ItcSymbol-Bold"] = "Helvetica-Bold";
  t["ItcSymbol-BoldItalic"] = "Helvetica-BoldOblique";
  t["ItcSymbol-Book"] = "Helvetica";
  t["ItcSymbol-BookItalic"] = "Helvetica-Oblique";
  t["ItcSymbol-Medium"] = "Helvetica";
  t["ItcSymbol-MediumItalic"] = "Helvetica-Oblique";
  t.LucidaConsole = "Courier";
  t["LucidaConsole-Bold"] = "Courier-Bold";
  t["LucidaConsole-BoldItalic"] = "Courier-BoldOblique";
  t["LucidaConsole-Italic"] = "Courier-Oblique";
  t["LucidaSans-Demi"] = "Helvetica-Bold";
  t["MS-Gothic"] = "MS Gothic";
  t["MS-Gothic-Bold"] = "MS Gothic-Bold";
  t["MS-Gothic-BoldItalic"] = "MS Gothic-BoldItalic";
  t["MS-Gothic-Italic"] = "MS Gothic-Italic";
  t["MS-Mincho"] = "MS Mincho";
  t["MS-Mincho-Bold"] = "MS Mincho-Bold";
  t["MS-Mincho-BoldItalic"] = "MS Mincho-BoldItalic";
  t["MS-Mincho-Italic"] = "MS Mincho-Italic";
  t["MS-PGothic"] = "MS PGothic";
  t["MS-PGothic-Bold"] = "MS PGothic-Bold";
  t["MS-PGothic-BoldItalic"] = "MS PGothic-BoldItalic";
  t["MS-PGothic-Italic"] = "MS PGothic-Italic";
  t["MS-PMincho"] = "MS PMincho";
  t["MS-PMincho-Bold"] = "MS PMincho-Bold";
  t["MS-PMincho-BoldItalic"] = "MS PMincho-BoldItalic";
  t["MS-PMincho-Italic"] = "MS PMincho-Italic";
  t.NuptialScript = "Times-Italic";
  t.SegoeUISymbol = "Helvetica";
});
exports.getNonStdFontMap = getNonStdFontMap;
const getSerifFonts = (0, _core_utils.getLookupTableFactory)(function (t) {
  t["Adobe Jenson"] = true;
  t["Adobe Text"] = true;
  t.Albertus = true;
  t.Aldus = true;
  t.Alexandria = true;
  t.Algerian = true;
  t["American Typewriter"] = true;
  t.Antiqua = true;
  t.Apex = true;
  t.Arno = true;
  t.Aster = true;
  t.Aurora = true;
  t.Baskerville = true;
  t.Bell = true;
  t.Bembo = true;
  t["Bembo Schoolbook"] = true;
  t.Benguiat = true;
  t["Berkeley Old Style"] = true;
  t["Bernhard Modern"] = true;
  t["Berthold City"] = true;
  t.Bodoni = true;
  t["Bauer Bodoni"] = true;
  t["Book Antiqua"] = true;
  t.Bookman = true;
  t["Bordeaux Roman"] = true;
  t["Californian FB"] = true;
  t.Calisto = true;
  t.Calvert = true;
  t.Capitals = true;
  t.Cambria = true;
  t.Cartier = true;
  t.Caslon = true;
  t.Catull = true;
  t.Centaur = true;
  t["Century Old Style"] = true;
  t["Century Schoolbook"] = true;
  t.Chaparral = true;
  t["Charis SIL"] = true;
  t.Cheltenham = true;
  t["Cholla Slab"] = true;
  t.Clarendon = true;
  t.Clearface = true;
  t.Cochin = true;
  t.Colonna = true;
  t["Computer Modern"] = true;
  t["Concrete Roman"] = true;
  t.Constantia = true;
  t["Cooper Black"] = true;
  t.Corona = true;
  t.Ecotype = true;
  t.Egyptienne = true;
  t.Elephant = true;
  t.Excelsior = true;
  t.Fairfield = true;
  t["FF Scala"] = true;
  t.Folkard = true;
  t.Footlight = true;
  t.FreeSerif = true;
  t["Friz Quadrata"] = true;
  t.Garamond = true;
  t.Gentium = true;
  t.Georgia = true;
  t.Gloucester = true;
  t["Goudy Old Style"] = true;
  t["Goudy Schoolbook"] = true;
  t["Goudy Pro Font"] = true;
  t.Granjon = true;
  t["Guardian Egyptian"] = true;
  t.Heather = true;
  t.Hercules = true;
  t["High Tower Text"] = true;
  t.Hiroshige = true;
  t["Hoefler Text"] = true;
  t["Humana Serif"] = true;
  t.Imprint = true;
  t["Ionic No. 5"] = true;
  t.Janson = true;
  t.Joanna = true;
  t.Korinna = true;
  t.Lexicon = true;
  t.LiberationSerif = true;
  t["Liberation Serif"] = true;
  t["Linux Libertine"] = true;
  t.Literaturnaya = true;
  t.Lucida = true;
  t["Lucida Bright"] = true;
  t.Melior = true;
  t.Memphis = true;
  t.Miller = true;
  t.Minion = true;
  t.Modern = true;
  t["Mona Lisa"] = true;
  t["Mrs Eaves"] = true;
  t["MS Serif"] = true;
  t["Museo Slab"] = true;
  t["New York"] = true;
  t["Nimbus Roman"] = true;
  t["NPS Rawlinson Roadway"] = true;
  t.NuptialScript = true;
  t.Palatino = true;
  t.Perpetua = true;
  t.Plantin = true;
  t["Plantin Schoolbook"] = true;
  t.Playbill = true;
  t["Poor Richard"] = true;
  t["Rawlinson Roadway"] = true;
  t.Renault = true;
  t.Requiem = true;
  t.Rockwell = true;
  t.Roman = true;
  t["Rotis Serif"] = true;
  t.Sabon = true;
  t.Scala = true;
  t.Seagull = true;
  t.Sistina = true;
  t.Souvenir = true;
  t.STIX = true;
  t["Stone Informal"] = true;
  t["Stone Serif"] = true;
  t.Sylfaen = true;
  t.Times = true;
  t.Trajan = true;
  t["Trinité"] = true;
  t["Trump Mediaeval"] = true;
  t.Utopia = true;
  t["Vale Type"] = true;
  t["Bitstream Vera"] = true;
  t["Vera Serif"] = true;
  t.Versailles = true;
  t.Wanted = true;
  t.Weiss = true;
  t["Wide Latin"] = true;
  t.Windsor = true;
  t.XITS = true;
});
exports.getSerifFonts = getSerifFonts;
const getSymbolsFonts = (0, _core_utils.getLookupTableFactory)(function (t) {
  t.Dingbats = true;
  t.Symbol = true;
  t.ZapfDingbats = true;
  t.Wingdings = true;
  t["Wingdings-Bold"] = true;
  t["Wingdings-Regular"] = true;
});
exports.getSymbolsFonts = getSymbolsFonts;
const getGlyphMapForStandardFonts = (0, _core_utils.getLookupTableFactory)(function (t) {
  t[2] = 10;
  t[3] = 32;
  t[4] = 33;
  t[5] = 34;
  t[6] = 35;
  t[7] = 36;
  t[8] = 37;
  t[9] = 38;
  t[10] = 39;
  t[11] = 40;
  t[12] = 41;
  t[13] = 42;
  t[14] = 43;
  t[15] = 44;
  t[16] = 45;
  t[17] = 46;
  t[18] = 47;
  t[19] = 48;
  t[20] = 49;
  t[21] = 50;
  t[22] = 51;
  t[23] = 52;
  t[24] = 53;
  t[25] = 54;
  t[26] = 55;
  t[27] = 56;
  t[28] = 57;
  t[29] = 58;
  t[30] = 894;
  t[31] = 60;
  t[32] = 61;
  t[33] = 62;
  t[34] = 63;
  t[35] = 64;
  t[36] = 65;
  t[37] = 66;
  t[38] = 67;
  t[39] = 68;
  t[40] = 69;
  t[41] = 70;
  t[42] = 71;
  t[43] = 72;
  t[44] = 73;
  t[45] = 74;
  t[46] = 75;
  t[47] = 76;
  t[48] = 77;
  t[49] = 78;
  t[50] = 79;
  t[51] = 80;
  t[52] = 81;
  t[53] = 82;
  t[54] = 83;
  t[55] = 84;
  t[56] = 85;
  t[57] = 86;
  t[58] = 87;
  t[59] = 88;
  t[60] = 89;
  t[61] = 90;
  t[62] = 91;
  t[63] = 92;
  t[64] = 93;
  t[65] = 94;
  t[66] = 95;
  t[67] = 96;
  t[68] = 97;
  t[69] = 98;
  t[70] = 99;
  t[71] = 100;
  t[72] = 101;
  t[73] = 102;
  t[74] = 103;
  t[75] = 104;
  t[76] = 105;
  t[77] = 106;
  t[78] = 107;
  t[79] = 108;
  t[80] = 109;
  t[81] = 110;
  t[82] = 111;
  t[83] = 112;
  t[84] = 113;
  t[85] = 114;
  t[86] = 115;
  t[87] = 116;
  t[88] = 117;
  t[89] = 118;
  t[90] = 119;
  t[91] = 120;
  t[92] = 121;
  t[93] = 122;
  t[94] = 123;
  t[95] = 124;
  t[96] = 125;
  t[97] = 126;
  t[98] = 196;
  t[99] = 197;
  t[100] = 199;
  t[101] = 201;
  t[102] = 209;
  t[103] = 214;
  t[104] = 220;
  t[105] = 225;
  t[106] = 224;
  t[107] = 226;
  t[108] = 228;
  t[109] = 227;
  t[110] = 229;
  t[111] = 231;
  t[112] = 233;
  t[113] = 232;
  t[114] = 234;
  t[115] = 235;
  t[116] = 237;
  t[117] = 236;
  t[118] = 238;
  t[119] = 239;
  t[120] = 241;
  t[121] = 243;
  t[122] = 242;
  t[123] = 244;
  t[124] = 246;
  t[125] = 245;
  t[126] = 250;
  t[127] = 249;
  t[128] = 251;
  t[129] = 252;
  t[130] = 8224;
  t[131] = 176;
  t[132] = 162;
  t[133] = 163;
  t[134] = 167;
  t[135] = 8226;
  t[136] = 182;
  t[137] = 223;
  t[138] = 174;
  t[139] = 169;
  t[140] = 8482;
  t[141] = 180;
  t[142] = 168;
  t[143] = 8800;
  t[144] = 198;
  t[145] = 216;
  t[146] = 8734;
  t[147] = 177;
  t[148] = 8804;
  t[149] = 8805;
  t[150] = 165;
  t[151] = 181;
  t[152] = 8706;
  t[153] = 8721;
  t[154] = 8719;
  t[156] = 8747;
  t[157] = 170;
  t[158] = 186;
  t[159] = 8486;
  t[160] = 230;
  t[161] = 248;
  t[162] = 191;
  t[163] = 161;
  t[164] = 172;
  t[165] = 8730;
  t[166] = 402;
  t[167] = 8776;
  t[168] = 8710;
  t[169] = 171;
  t[170] = 187;
  t[171] = 8230;
  t[179] = 8220;
  t[180] = 8221;
  t[181] = 8216;
  t[182] = 8217;
  t[200] = 193;
  t[203] = 205;
  t[207] = 211;
  t[210] = 218;
  t[223] = 711;
  t[224] = 321;
  t[225] = 322;
  t[226] = 352;
  t[227] = 353;
  t[228] = 381;
  t[229] = 382;
  t[233] = 221;
  t[234] = 253;
  t[252] = 263;
  t[253] = 268;
  t[254] = 269;
  t[258] = 258;
  t[260] = 260;
  t[261] = 261;
  t[265] = 280;
  t[266] = 281;
  t[267] = 282;
  t[268] = 283;
  t[269] = 313;
  t[275] = 323;
  t[276] = 324;
  t[278] = 328;
  t[283] = 344;
  t[284] = 345;
  t[285] = 346;
  t[286] = 347;
  t[292] = 367;
  t[295] = 377;
  t[296] = 378;
  t[298] = 380;
  t[305] = 963;
  t[306] = 964;
  t[307] = 966;
  t[308] = 8215;
  t[309] = 8252;
  t[310] = 8319;
  t[311] = 8359;
  t[312] = 8592;
  t[313] = 8593;
  t[337] = 9552;
  t[493] = 1039;
  t[494] = 1040;
  t[672] = 1488;
  t[673] = 1489;
  t[674] = 1490;
  t[675] = 1491;
  t[676] = 1492;
  t[677] = 1493;
  t[678] = 1494;
  t[679] = 1495;
  t[680] = 1496;
  t[681] = 1497;
  t[682] = 1498;
  t[683] = 1499;
  t[684] = 1500;
  t[685] = 1501;
  t[686] = 1502;
  t[687] = 1503;
  t[688] = 1504;
  t[689] = 1505;
  t[690] = 1506;
  t[691] = 1507;
  t[692] = 1508;
  t[693] = 1509;
  t[694] = 1510;
  t[695] = 1511;
  t[696] = 1512;
  t[697] = 1513;
  t[698] = 1514;
  t[705] = 1524;
  t[706] = 8362;
  t[710] = 64288;
  t[711] = 64298;
  t[759] = 1617;
  t[761] = 1776;
  t[763] = 1778;
  t[775] = 1652;
  t[777] = 1764;
  t[778] = 1780;
  t[779] = 1781;
  t[780] = 1782;
  t[782] = 771;
  t[783] = 64726;
  t[786] = 8363;
  t[788] = 8532;
  t[790] = 768;
  t[791] = 769;
  t[792] = 768;
  t[795] = 803;
  t[797] = 64336;
  t[798] = 64337;
  t[799] = 64342;
  t[800] = 64343;
  t[801] = 64344;
  t[802] = 64345;
  t[803] = 64362;
  t[804] = 64363;
  t[805] = 64364;
  t[2424] = 7821;
  t[2425] = 7822;
  t[2426] = 7823;
  t[2427] = 7824;
  t[2428] = 7825;
  t[2429] = 7826;
  t[2430] = 7827;
  t[2433] = 7682;
  t[2678] = 8045;
  t[2679] = 8046;
  t[2830] = 1552;
  t[2838] = 686;
  t[2840] = 751;
  t[2842] = 753;
  t[2843] = 754;
  t[2844] = 755;
  t[2846] = 757;
  t[2856] = 767;
  t[2857] = 848;
  t[2858] = 849;
  t[2862] = 853;
  t[2863] = 854;
  t[2864] = 855;
  t[2865] = 861;
  t[2866] = 862;
  t[2906] = 7460;
  t[2908] = 7462;
  t[2909] = 7463;
  t[2910] = 7464;
  t[2912] = 7466;
  t[2913] = 7467;
  t[2914] = 7468;
  t[2916] = 7470;
  t[2917] = 7471;
  t[2918] = 7472;
  t[2920] = 7474;
  t[2921] = 7475;
  t[2922] = 7476;
  t[2924] = 7478;
  t[2925] = 7479;
  t[2926] = 7480;
  t[2928] = 7482;
  t[2929] = 7483;
  t[2930] = 7484;
  t[2932] = 7486;
  t[2933] = 7487;
  t[2934] = 7488;
  t[2936] = 7490;
  t[2937] = 7491;
  t[2938] = 7492;
  t[2940] = 7494;
  t[2941] = 7495;
  t[2942] = 7496;
  t[2944] = 7498;
  t[2946] = 7500;
  t[2948] = 7502;
  t[2950] = 7504;
  t[2951] = 7505;
  t[2952] = 7506;
  t[2954] = 7508;
  t[2955] = 7509;
  t[2956] = 7510;
  t[2958] = 7512;
  t[2959] = 7513;
  t[2960] = 7514;
  t[2962] = 7516;
  t[2963] = 7517;
  t[2964] = 7518;
  t[2966] = 7520;
  t[2967] = 7521;
  t[2968] = 7522;
  t[2970] = 7524;
  t[2971] = 7525;
  t[2972] = 7526;
  t[2974] = 7528;
  t[2975] = 7529;
  t[2976] = 7530;
  t[2978] = 1537;
  t[2979] = 1538;
  t[2980] = 1539;
  t[2982] = 1549;
  t[2983] = 1551;
  t[2984] = 1552;
  t[2986] = 1554;
  t[2987] = 1555;
  t[2988] = 1556;
  t[2990] = 1623;
  t[2991] = 1624;
  t[2995] = 1775;
  t[2999] = 1791;
  t[3002] = 64290;
  t[3003] = 64291;
  t[3004] = 64292;
  t[3006] = 64294;
  t[3007] = 64295;
  t[3008] = 64296;
  t[3011] = 1900;
  t[3014] = 8223;
  t[3015] = 8244;
  t[3017] = 7532;
  t[3018] = 7533;
  t[3019] = 7534;
  t[3075] = 7590;
  t[3076] = 7591;
  t[3079] = 7594;
  t[3080] = 7595;
  t[3083] = 7598;
  t[3084] = 7599;
  t[3087] = 7602;
  t[3088] = 7603;
  t[3091] = 7606;
  t[3092] = 7607;
  t[3095] = 7610;
  t[3096] = 7611;
  t[3099] = 7614;
  t[3100] = 7615;
  t[3103] = 7618;
  t[3104] = 7619;
  t[3107] = 8337;
  t[3108] = 8338;
  t[3116] = 1884;
  t[3119] = 1885;
  t[3120] = 1885;
  t[3123] = 1886;
  t[3124] = 1886;
  t[3127] = 1887;
  t[3128] = 1887;
  t[3131] = 1888;
  t[3132] = 1888;
  t[3135] = 1889;
  t[3136] = 1889;
  t[3139] = 1890;
  t[3140] = 1890;
  t[3143] = 1891;
  t[3144] = 1891;
  t[3147] = 1892;
  t[3148] = 1892;
  t[3153] = 580;
  t[3154] = 581;
  t[3157] = 584;
  t[3158] = 585;
  t[3161] = 588;
  t[3162] = 589;
  t[3165] = 891;
  t[3166] = 892;
  t[3169] = 1274;
  t[3170] = 1275;
  t[3173] = 1278;
  t[3174] = 1279;
  t[3181] = 7622;
  t[3182] = 7623;
  t[3282] = 11799;
  t[3316] = 578;
  t[3379] = 42785;
  t[3393] = 1159;
  t[3416] = 8377;
});
exports.getGlyphMapForStandardFonts = getGlyphMapForStandardFonts;
const getSupplementalGlyphMapForArialBlack = (0, _core_utils.getLookupTableFactory)(function (t) {
  t[227] = 322;
  t[264] = 261;
  t[291] = 346;
});
exports.getSupplementalGlyphMapForArialBlack = getSupplementalGlyphMapForArialBlack;
const getSupplementalGlyphMapForCalibri = (0, _core_utils.getLookupTableFactory)(function (t) {
  t[1] = 32;
  t[4] = 65;
  t[5] = 192;
  t[6] = 193;
  t[9] = 196;
  t[17] = 66;
  t[18] = 67;
  t[21] = 268;
  t[24] = 68;
  t[28] = 69;
  t[29] = 200;
  t[30] = 201;
  t[32] = 282;
  t[38] = 70;
  t[39] = 71;
  t[44] = 72;
  t[47] = 73;
  t[48] = 204;
  t[49] = 205;
  t[58] = 74;
  t[60] = 75;
  t[62] = 76;
  t[68] = 77;
  t[69] = 78;
  t[75] = 79;
  t[76] = 210;
  t[80] = 214;
  t[87] = 80;
  t[89] = 81;
  t[90] = 82;
  t[92] = 344;
  t[94] = 83;
  t[97] = 352;
  t[100] = 84;
  t[104] = 85;
  t[109] = 220;
  t[115] = 86;
  t[116] = 87;
  t[121] = 88;
  t[122] = 89;
  t[124] = 221;
  t[127] = 90;
  t[129] = 381;
  t[258] = 97;
  t[259] = 224;
  t[260] = 225;
  t[263] = 228;
  t[268] = 261;
  t[271] = 98;
  t[272] = 99;
  t[273] = 263;
  t[275] = 269;
  t[282] = 100;
  t[286] = 101;
  t[287] = 232;
  t[288] = 233;
  t[290] = 283;
  t[295] = 281;
  t[296] = 102;
  t[336] = 103;
  t[346] = 104;
  t[349] = 105;
  t[350] = 236;
  t[351] = 237;
  t[361] = 106;
  t[364] = 107;
  t[367] = 108;
  t[371] = 322;
  t[373] = 109;
  t[374] = 110;
  t[381] = 111;
  t[382] = 242;
  t[383] = 243;
  t[386] = 246;
  t[393] = 112;
  t[395] = 113;
  t[396] = 114;
  t[398] = 345;
  t[400] = 115;
  t[401] = 347;
  t[403] = 353;
  t[410] = 116;
  t[437] = 117;
  t[442] = 252;
  t[448] = 118;
  t[449] = 119;
  t[454] = 120;
  t[455] = 121;
  t[457] = 253;
  t[460] = 122;
  t[462] = 382;
  t[463] = 380;
  t[853] = 44;
  t[855] = 58;
  t[856] = 46;
  t[876] = 47;
  t[878] = 45;
  t[882] = 45;
  t[894] = 40;
  t[895] = 41;
  t[896] = 91;
  t[897] = 93;
  t[923] = 64;
  t[1004] = 48;
  t[1005] = 49;
  t[1006] = 50;
  t[1007] = 51;
  t[1008] = 52;
  t[1009] = 53;
  t[1010] = 54;
  t[1011] = 55;
  t[1012] = 56;
  t[1013] = 57;
  t[1081] = 37;
  t[1085] = 43;
  t[1086] = 45;
});
exports.getSupplementalGlyphMapForCalibri = getSupplementalGlyphMapForCalibri;
function getStandardFontName(name) {
  const fontName = (0, _fonts_utils.normalizeFontName)(name);
  const stdFontMap = getStdFontMap();
  return stdFontMap[fontName];
}
function isKnownFontName(name) {
  const fontName = (0, _fonts_utils.normalizeFontName)(name);
  return !!(getStdFontMap()[fontName] || getNonStdFontMap()[fontName] || getSerifFonts()[fontName] || getSymbolsFonts()[fontName]);
}

/***/ }),
/* 42 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.ToUnicodeMap = exports.IdentityToUnicodeMap = void 0;
var _util = __w_pdfjs_require__(2);
class ToUnicodeMap {
  constructor(cmap = []) {
    this._map = cmap;
  }
  get length() {
    return this._map.length;
  }
  forEach(callback) {
    for (const charCode in this._map) {
      callback(charCode, this._map[charCode].charCodeAt(0));
    }
  }
  has(i) {
    return this._map[i] !== undefined;
  }
  get(i) {
    return this._map[i];
  }
  charCodeOf(value) {
    const map = this._map;
    if (map.length <= 0x10000) {
      return map.indexOf(value);
    }
    for (const charCode in map) {
      if (map[charCode] === value) {
        return charCode | 0;
      }
    }
    return -1;
  }
  amend(map) {
    for (const charCode in map) {
      this._map[charCode] = map[charCode];
    }
  }
}
exports.ToUnicodeMap = ToUnicodeMap;
class IdentityToUnicodeMap {
  constructor(firstChar, lastChar) {
    this.firstChar = firstChar;
    this.lastChar = lastChar;
  }
  get length() {
    return this.lastChar + 1 - this.firstChar;
  }
  forEach(callback) {
    for (let i = this.firstChar, ii = this.lastChar; i <= ii; i++) {
      callback(i, i);
    }
  }
  has(i) {
    return this.firstChar <= i && i <= this.lastChar;
  }
  get(i) {
    if (this.firstChar <= i && i <= this.lastChar) {
      return String.fromCharCode(i);
    }
    return undefined;
  }
  charCodeOf(v) {
    return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar ? v : -1;
  }
  amend(map) {
    (0, _util.unreachable)("Should not call amend()");
  }
}
exports.IdentityToUnicodeMap = IdentityToUnicodeMap;

/***/ }),
/* 43 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.CFFFont = void 0;
var _cff_parser = __w_pdfjs_require__(35);
var _fonts_utils = __w_pdfjs_require__(38);
var _util = __w_pdfjs_require__(2);
class CFFFont {
  constructor(file, properties) {
    this.properties = properties;
    const parser = new _cff_parser.CFFParser(file, properties, _fonts_utils.SEAC_ANALYSIS_ENABLED);
    this.cff = parser.parse();
    this.cff.duplicateFirstGlyph();
    const compiler = new _cff_parser.CFFCompiler(this.cff);
    this.seacs = this.cff.seacs;
    try {
      this.data = compiler.compile();
    } catch {
      (0, _util.warn)("Failed to compile font " + properties.loadedName);
      this.data = file;
    }
    this._createBuiltInEncoding();
  }
  get numGlyphs() {
    return this.cff.charStrings.count;
  }
  getCharset() {
    return this.cff.charset.charset;
  }
  getGlyphMapping() {
    const cff = this.cff;
    const properties = this.properties;
    const {
      cidToGidMap,
      cMap
    } = properties;
    const charsets = cff.charset.charset;
    let charCodeToGlyphId;
    let glyphId;
    if (properties.composite) {
      let invCidToGidMap;
      if (cidToGidMap?.length > 0) {
        invCidToGidMap = Object.create(null);
        for (let i = 0, ii = cidToGidMap.length; i < ii; i++) {
          const gid = cidToGidMap[i];
          if (gid !== undefined) {
            invCidToGidMap[gid] = i;
          }
        }
      }
      charCodeToGlyphId = Object.create(null);
      let charCode;
      if (cff.isCIDFont) {
        for (glyphId = 0; glyphId < charsets.length; glyphId++) {
          const cid = charsets[glyphId];
          charCode = cMap.charCodeOf(cid);
          if (invCidToGidMap?.[charCode] !== undefined) {
            charCode = invCidToGidMap[charCode];
          }
          charCodeToGlyphId[charCode] = glyphId;
        }
      } else {
        for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) {
          charCode = cMap.charCodeOf(glyphId);
          charCodeToGlyphId[charCode] = glyphId;
        }
      }
      return charCodeToGlyphId;
    }
    let encoding = cff.encoding ? cff.encoding.encoding : null;
    if (properties.isInternalFont) {
      encoding = properties.defaultEncoding;
    }
    charCodeToGlyphId = (0, _fonts_utils.type1FontGlyphMapping)(properties, encoding, charsets);
    return charCodeToGlyphId;
  }
  hasGlyphId(id) {
    return this.cff.hasGlyphId(id);
  }
  _createBuiltInEncoding() {
    const {
      charset,
      encoding
    } = this.cff;
    if (!charset || !encoding) {
      return;
    }
    const charsets = charset.charset,
      encodings = encoding.encoding;
    const map = [];
    for (const charCode in encodings) {
      const glyphId = encodings[charCode];
      if (glyphId >= 0) {
        const glyphName = charsets[glyphId];
        if (glyphName) {
          map[charCode] = glyphName;
        }
      }
    }
    if (map.length > 0) {
      this.properties.builtInEncoding = map;
    }
  }
}
exports.CFFFont = CFFFont;

/***/ }),
/* 44 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.FontRendererFactory = void 0;
var _util = __w_pdfjs_require__(2);
var _cff_parser = __w_pdfjs_require__(35);
var _glyphlist = __w_pdfjs_require__(39);
var _encodings = __w_pdfjs_require__(37);
var _stream = __w_pdfjs_require__(8);
function getUint32(data, offset) {
  return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0;
}
function getUint16(data, offset) {
  return data[offset] << 8 | data[offset + 1];
}
function getInt16(data, offset) {
  return (data[offset] << 24 | data[offset + 1] << 16) >> 16;
}
function getInt8(data, offset) {
  return data[offset] << 24 >> 24;
}
function getFloat214(data, offset) {
  return getInt16(data, offset) / 16384;
}
function getSubroutineBias(subrs) {
  const numSubrs = subrs.length;
  let bias = 32768;
  if (numSubrs < 1240) {
    bias = 107;
  } else if (numSubrs < 33900) {
    bias = 1131;
  }
  return bias;
}
function parseCmap(data, start, end) {
  const offset = getUint16(data, start + 2) === 1 ? getUint32(data, start + 8) : getUint32(data, start + 16);
  const format = getUint16(data, start + offset);
  let ranges, p, i;
  if (format === 4) {
    getUint16(data, start + offset + 2);
    const segCount = getUint16(data, start + offset + 6) >> 1;
    p = start + offset + 14;
    ranges = [];
    for (i = 0; i < segCount; i++, p += 2) {
      ranges[i] = {
        end: getUint16(data, p)
      };
    }
    p += 2;
    for (i = 0; i < segCount; i++, p += 2) {
      ranges[i].start = getUint16(data, p);
    }
    for (i = 0; i < segCount; i++, p += 2) {
      ranges[i].idDelta = getUint16(data, p);
    }
    for (i = 0; i < segCount; i++, p += 2) {
      let idOffset = getUint16(data, p);
      if (idOffset === 0) {
        continue;
      }
      ranges[i].ids = [];
      for (let j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) {
        ranges[i].ids[j] = getUint16(data, p + idOffset);
        idOffset += 2;
      }
    }
    return ranges;
  } else if (format === 12) {
    const groups = getUint32(data, start + offset + 12);
    p = start + offset + 16;
    ranges = [];
    for (i = 0; i < groups; i++) {
      start = getUint32(data, p);
      ranges.push({
        start,
        end: getUint32(data, p + 4),
        idDelta: getUint32(data, p + 8) - start
      });
      p += 12;
    }
    return ranges;
  }
  throw new _util.FormatError(`unsupported cmap: ${format}`);
}
function parseCff(data, start, end, seacAnalysisEnabled) {
  const properties = {};
  const parser = new _cff_parser.CFFParser(new _stream.Stream(data, start, end - start), properties, seacAnalysisEnabled);
  const cff = parser.parse();
  return {
    glyphs: cff.charStrings.objects,
    subrs: cff.topDict.privateDict?.subrsIndex?.objects,
    gsubrs: cff.globalSubrIndex?.objects,
    isCFFCIDFont: cff.isCIDFont,
    fdSelect: cff.fdSelect,
    fdArray: cff.fdArray
  };
}
function parseGlyfTable(glyf, loca, isGlyphLocationsLong) {
  let itemSize, itemDecode;
  if (isGlyphLocationsLong) {
    itemSize = 4;
    itemDecode = getUint32;
  } else {
    itemSize = 2;
    itemDecode = (data, offset) => 2 * getUint16(data, offset);
  }
  const glyphs = [];
  let startOffset = itemDecode(loca, 0);
  for (let j = itemSize; j < loca.length; j += itemSize) {
    const endOffset = itemDecode(loca, j);
    glyphs.push(glyf.subarray(startOffset, endOffset));
    startOffset = endOffset;
  }
  return glyphs;
}
function lookupCmap(ranges, unicode) {
  const code = unicode.codePointAt(0);
  let gid = 0,
    l = 0,
    r = ranges.length - 1;
  while (l < r) {
    const c = l + r + 1 >> 1;
    if (code < ranges[c].start) {
      r = c - 1;
    } else {
      l = c;
    }
  }
  if (ranges[l].start <= code && code <= ranges[l].end) {
    gid = ranges[l].idDelta + (ranges[l].ids ? ranges[l].ids[code - ranges[l].start] : code) & 0xffff;
  }
  return {
    charCode: code,
    glyphId: gid
  };
}
function compileGlyf(code, cmds, font) {
  function moveTo(x, y) {
    cmds.push({
      cmd: "moveTo",
      args: [x, y]
    });
  }
  function lineTo(x, y) {
    cmds.push({
      cmd: "lineTo",
      args: [x, y]
    });
  }
  function quadraticCurveTo(xa, ya, x, y) {
    cmds.push({
      cmd: "quadraticCurveTo",
      args: [xa, ya, x, y]
    });
  }
  let i = 0;
  const numberOfContours = getInt16(code, i);
  let flags;
  let x = 0,
    y = 0;
  i += 10;
  if (numberOfContours < 0) {
    do {
      flags = getUint16(code, i);
      const glyphIndex = getUint16(code, i + 2);
      i += 4;
      let arg1, arg2;
      if (flags & 0x01) {
        if (flags & 0x02) {
          arg1 = getInt16(code, i);
          arg2 = getInt16(code, i + 2);
        } else {
          arg1 = getUint16(code, i);
          arg2 = getUint16(code, i + 2);
        }
        i += 4;
      } else if (flags & 0x02) {
        arg1 = getInt8(code, i++);
        arg2 = getInt8(code, i++);
      } else {
        arg1 = code[i++];
        arg2 = code[i++];
      }
      if (flags & 0x02) {
        x = arg1;
        y = arg2;
      } else {
        x = 0;
        y = 0;
      }
      let scaleX = 1,
        scaleY = 1,
        scale01 = 0,
        scale10 = 0;
      if (flags & 0x08) {
        scaleX = scaleY = getFloat214(code, i);
        i += 2;
      } else if (flags & 0x40) {
        scaleX = getFloat214(code, i);
        scaleY = getFloat214(code, i + 2);
        i += 4;
      } else if (flags & 0x80) {
        scaleX = getFloat214(code, i);
        scale01 = getFloat214(code, i + 2);
        scale10 = getFloat214(code, i + 4);
        scaleY = getFloat214(code, i + 6);
        i += 8;
      }
      const subglyph = font.glyphs[glyphIndex];
      if (subglyph) {
        cmds.push({
          cmd: "save"
        }, {
          cmd: "transform",
          args: [scaleX, scale01, scale10, scaleY, x, y]
        });
        if (!(flags & 0x02)) {}
        compileGlyf(subglyph, cmds, font);
        cmds.push({
          cmd: "restore"
        });
      }
    } while (flags & 0x20);
  } else {
    const endPtsOfContours = [];
    let j, jj;
    for (j = 0; j < numberOfContours; j++) {
      endPtsOfContours.push(getUint16(code, i));
      i += 2;
    }
    const instructionLength = getUint16(code, i);
    i += 2 + instructionLength;
    const numberOfPoints = endPtsOfContours.at(-1) + 1;
    const points = [];
    while (points.length < numberOfPoints) {
      flags = code[i++];
      let repeat = 1;
      if (flags & 0x08) {
        repeat += code[i++];
      }
      while (repeat-- > 0) {
        points.push({
          flags
        });
      }
    }
    for (j = 0; j < numberOfPoints; j++) {
      switch (points[j].flags & 0x12) {
        case 0x00:
          x += getInt16(code, i);
          i += 2;
          break;
        case 0x02:
          x -= code[i++];
          break;
        case 0x12:
          x += code[i++];
          break;
      }
      points[j].x = x;
    }
    for (j = 0; j < numberOfPoints; j++) {
      switch (points[j].flags & 0x24) {
        case 0x00:
          y += getInt16(code, i);
          i += 2;
          break;
        case 0x04:
          y -= code[i++];
          break;
        case 0x24:
          y += code[i++];
          break;
      }
      points[j].y = y;
    }
    let startPoint = 0;
    for (i = 0; i < numberOfContours; i++) {
      const endPoint = endPtsOfContours[i];
      const contour = points.slice(startPoint, endPoint + 1);
      if (contour[0].flags & 1) {
        contour.push(contour[0]);
      } else if (contour.at(-1).flags & 1) {
        contour.unshift(contour.at(-1));
      } else {
        const p = {
          flags: 1,
          x: (contour[0].x + contour.at(-1).x) / 2,
          y: (contour[0].y + contour.at(-1).y) / 2
        };
        contour.unshift(p);
        contour.push(p);
      }
      moveTo(contour[0].x, contour[0].y);
      for (j = 1, jj = contour.length; j < jj; j++) {
        if (contour[j].flags & 1) {
          lineTo(contour[j].x, contour[j].y);
        } else if (contour[j + 1].flags & 1) {
          quadraticCurveTo(contour[j].x, contour[j].y, contour[j + 1].x, contour[j + 1].y);
          j++;
        } else {
          quadraticCurveTo(contour[j].x, contour[j].y, (contour[j].x + contour[j + 1].x) / 2, (contour[j].y + contour[j + 1].y) / 2);
        }
      }
      startPoint = endPoint + 1;
    }
  }
}
function compileCharString(charStringCode, cmds, font, glyphId) {
  function moveTo(x, y) {
    cmds.push({
      cmd: "moveTo",
      args: [x, y]
    });
  }
  function lineTo(x, y) {
    cmds.push({
      cmd: "lineTo",
      args: [x, y]
    });
  }
  function bezierCurveTo(x1, y1, x2, y2, x, y) {
    cmds.push({
      cmd: "bezierCurveTo",
      args: [x1, y1, x2, y2, x, y]
    });
  }
  const stack = [];
  let x = 0,
    y = 0;
  let stems = 0;
  function parse(code) {
    let i = 0;
    while (i < code.length) {
      let stackClean = false;
      let v = code[i++];
      let xa, xb, ya, yb, y1, y2, y3, n, subrCode;
      switch (v) {
        case 1:
          stems += stack.length >> 1;
          stackClean = true;
          break;
        case 3:
          stems += stack.length >> 1;
          stackClean = true;
          break;
        case 4:
          y += stack.pop();
          moveTo(x, y);
          stackClean = true;
          break;
        case 5:
          while (stack.length > 0) {
            x += stack.shift();
            y += stack.shift();
            lineTo(x, y);
          }
          break;
        case 6:
          while (stack.length > 0) {
            x += stack.shift();
            lineTo(x, y);
            if (stack.length === 0) {
              break;
            }
            y += stack.shift();
            lineTo(x, y);
          }
          break;
        case 7:
          while (stack.length > 0) {
            y += stack.shift();
            lineTo(x, y);
            if (stack.length === 0) {
              break;
            }
            x += stack.shift();
            lineTo(x, y);
          }
          break;
        case 8:
          while (stack.length > 0) {
            xa = x + stack.shift();
            ya = y + stack.shift();
            xb = xa + stack.shift();
            yb = ya + stack.shift();
            x = xb + stack.shift();
            y = yb + stack.shift();
            bezierCurveTo(xa, ya, xb, yb, x, y);
          }
          break;
        case 10:
          n = stack.pop();
          subrCode = null;
          if (font.isCFFCIDFont) {
            const fdIndex = font.fdSelect.getFDIndex(glyphId);
            if (fdIndex >= 0 && fdIndex < font.fdArray.length) {
              const fontDict = font.fdArray[fdIndex];
              let subrs;
              if (fontDict.privateDict?.subrsIndex) {
                subrs = fontDict.privateDict.subrsIndex.objects;
              }
              if (subrs) {
                n += getSubroutineBias(subrs);
                subrCode = subrs[n];
              }
            } else {
              (0, _util.warn)("Invalid fd index for glyph index.");
            }
          } else {
            subrCode = font.subrs[n + font.subrsBias];
          }
          if (subrCode) {
            parse(subrCode);
          }
          break;
        case 11:
          return;
        case 12:
          v = code[i++];
          switch (v) {
            case 34:
              xa = x + stack.shift();
              xb = xa + stack.shift();
              y1 = y + stack.shift();
              x = xb + stack.shift();
              bezierCurveTo(xa, y, xb, y1, x, y1);
              xa = x + stack.shift();
              xb = xa + stack.shift();
              x = xb + stack.shift();
              bezierCurveTo(xa, y1, xb, y, x, y);
              break;
            case 35:
              xa = x + stack.shift();
              ya = y + stack.shift();
              xb = xa + stack.shift();
              yb = ya + stack.shift();
              x = xb + stack.shift();
              y = yb + stack.shift();
              bezierCurveTo(xa, ya, xb, yb, x, y);
              xa = x + stack.shift();
              ya = y + stack.shift();
              xb = xa + stack.shift();
              yb = ya + stack.shift();
              x = xb + stack.shift();
              y = yb + stack.shift();
              bezierCurveTo(xa, ya, xb, yb, x, y);
              stack.pop();
              break;
            case 36:
              xa = x + stack.shift();
              y1 = y + stack.shift();
              xb = xa + stack.shift();
              y2 = y1 + stack.shift();
              x = xb + stack.shift();
              bezierCurveTo(xa, y1, xb, y2, x, y2);
              xa = x + stack.shift();
              xb = xa + stack.shift();
              y3 = y2 + stack.shift();
              x = xb + stack.shift();
              bezierCurveTo(xa, y2, xb, y3, x, y);
              break;
            case 37:
              const x0 = x,
                y0 = y;
              xa = x + stack.shift();
              ya = y + stack.shift();
              xb = xa + stack.shift();
              yb = ya + stack.shift();
              x = xb + stack.shift();
              y = yb + stack.shift();
              bezierCurveTo(xa, ya, xb, yb, x, y);
              xa = x + stack.shift();
              ya = y + stack.shift();
              xb = xa + stack.shift();
              yb = ya + stack.shift();
              x = xb;
              y = yb;
              if (Math.abs(x - x0) > Math.abs(y - y0)) {
                x += stack.shift();
              } else {
                y += stack.shift();
              }
              bezierCurveTo(xa, ya, xb, yb, x, y);
              break;
            default:
              throw new _util.FormatError(`unknown operator: 12 ${v}`);
          }
          break;
        case 14:
          if (stack.length >= 4) {
            const achar = stack.pop();
            const bchar = stack.pop();
            y = stack.pop();
            x = stack.pop();
            cmds.push({
              cmd: "save"
            }, {
              cmd: "translate",
              args: [x, y]
            });
            let cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[achar]]));
            compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId);
            cmds.push({
              cmd: "restore"
            });
            cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[bchar]]));
            compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId);
          }
          return;
        case 18:
          stems += stack.length >> 1;
          stackClean = true;
          break;
        case 19:
          stems += stack.length >> 1;
          i += stems + 7 >> 3;
          stackClean = true;
          break;
        case 20:
          stems += stack.length >> 1;
          i += stems + 7 >> 3;
          stackClean = true;
          break;
        case 21:
          y += stack.pop();
          x += stack.pop();
          moveTo(x, y);
          stackClean = true;
          break;
        case 22:
          x += stack.pop();
          moveTo(x, y);
          stackClean = true;
          break;
        case 23:
          stems += stack.length >> 1;
          stackClean = true;
          break;
        case 24:
          while (stack.length > 2) {
            xa = x + stack.shift();
            ya = y + stack.shift();
            xb = xa + stack.shift();
            yb = ya + stack.shift();
            x = xb + stack.shift();
            y = yb + stack.shift();
            bezierCurveTo(xa, ya, xb, yb, x, y);
          }
          x += stack.shift();
          y += stack.shift();
          lineTo(x, y);
          break;
        case 25:
          while (stack.length > 6) {
            x += stack.shift();
            y += stack.shift();
            lineTo(x, y);
          }
          xa = x + stack.shift();
          ya = y + stack.shift();
          xb = xa + stack.shift();
          yb = ya + stack.shift();
          x = xb + stack.shift();
          y = yb + stack.shift();
          bezierCurveTo(xa, ya, xb, yb, x, y);
          break;
        case 26:
          if (stack.length % 2) {
            x += stack.shift();
          }
          while (stack.length > 0) {
            xa = x;
            ya = y + stack.shift();
            xb = xa + stack.shift();
            yb = ya + stack.shift();
            x = xb;
            y = yb + stack.shift();
            bezierCurveTo(xa, ya, xb, yb, x, y);
          }
          break;
        case 27:
          if (stack.length % 2) {
            y += stack.shift();
          }
          while (stack.length > 0) {
            xa = x + stack.shift();
            ya = y;
            xb = xa + stack.shift();
            yb = ya + stack.shift();
            x = xb + stack.shift();
            y = yb;
            bezierCurveTo(xa, ya, xb, yb, x, y);
          }
          break;
        case 28:
          stack.push((code[i] << 24 | code[i + 1] << 16) >> 16);
          i += 2;
          break;
        case 29:
          n = stack.pop() + font.gsubrsBias;
          subrCode = font.gsubrs[n];
          if (subrCode) {
            parse(subrCode);
          }
          break;
        case 30:
          while (stack.length > 0) {
            xa = x;
            ya = y + stack.shift();
            xb = xa + stack.shift();
            yb = ya + stack.shift();
            x = xb + stack.shift();
            y = yb + (stack.length === 1 ? stack.shift() : 0);
            bezierCurveTo(xa, ya, xb, yb, x, y);
            if (stack.length === 0) {
              break;
            }
            xa = x + stack.shift();
            ya = y;
            xb = xa + stack.shift();
            yb = ya + stack.shift();
            y = yb + stack.shift();
            x = xb + (stack.length === 1 ? stack.shift() : 0);
            bezierCurveTo(xa, ya, xb, yb, x, y);
          }
          break;
        case 31:
          while (stack.length > 0) {
            xa = x + stack.shift();
            ya = y;
            xb = xa + stack.shift();
            yb = ya + stack.shift();
            y = yb + stack.shift();
            x = xb + (stack.length === 1 ? stack.shift() : 0);
            bezierCurveTo(xa, ya, xb, yb, x, y);
            if (stack.length === 0) {
              break;
            }
            xa = x;
            ya = y + stack.shift();
            xb = xa + stack.shift();
            yb = ya + stack.shift();
            x = xb + stack.shift();
            y = yb + (stack.length === 1 ? stack.shift() : 0);
            bezierCurveTo(xa, ya, xb, yb, x, y);
          }
          break;
        default:
          if (v < 32) {
            throw new _util.FormatError(`unknown operator: ${v}`);
          }
          if (v < 247) {
            stack.push(v - 139);
          } else if (v < 251) {
            stack.push((v - 247) * 256 + code[i++] + 108);
          } else if (v < 255) {
            stack.push(-(v - 251) * 256 - code[i++] - 108);
          } else {
            stack.push((code[i] << 24 | code[i + 1] << 16 | code[i + 2] << 8 | code[i + 3]) / 65536);
            i += 4;
          }
          break;
      }
      if (stackClean) {
        stack.length = 0;
      }
    }
  }
  parse(charStringCode);
}
const NOOP = [];
class CompiledFont {
  constructor(fontMatrix) {
    if (this.constructor === CompiledFont) {
      (0, _util.unreachable)("Cannot initialize CompiledFont.");
    }
    this.fontMatrix = fontMatrix;
    this.compiledGlyphs = Object.create(null);
    this.compiledCharCodeToGlyphId = Object.create(null);
  }
  getPathJs(unicode) {
    const {
      charCode,
      glyphId
    } = lookupCmap(this.cmap, unicode);
    let fn = this.compiledGlyphs[glyphId];
    if (!fn) {
      try {
        fn = this.compileGlyph(this.glyphs[glyphId], glyphId);
        this.compiledGlyphs[glyphId] = fn;
      } catch (ex) {
        this.compiledGlyphs[glyphId] = NOOP;
        if (this.compiledCharCodeToGlyphId[charCode] === undefined) {
          this.compiledCharCodeToGlyphId[charCode] = glyphId;
        }
        throw ex;
      }
    }
    if (this.compiledCharCodeToGlyphId[charCode] === undefined) {
      this.compiledCharCodeToGlyphId[charCode] = glyphId;
    }
    return fn;
  }
  compileGlyph(code, glyphId) {
    if (!code || code.length === 0 || code[0] === 14) {
      return NOOP;
    }
    let fontMatrix = this.fontMatrix;
    if (this.isCFFCIDFont) {
      const fdIndex = this.fdSelect.getFDIndex(glyphId);
      if (fdIndex >= 0 && fdIndex < this.fdArray.length) {
        const fontDict = this.fdArray[fdIndex];
        fontMatrix = fontDict.getByName("FontMatrix") || _util.FONT_IDENTITY_MATRIX;
      } else {
        (0, _util.warn)("Invalid fd index for glyph index.");
      }
    }
    const cmds = [{
      cmd: "save"
    }, {
      cmd: "transform",
      args: fontMatrix.slice()
    }, {
      cmd: "scale",
      args: ["size", "-size"]
    }];
    this.compileGlyphImpl(code, cmds, glyphId);
    cmds.push({
      cmd: "restore"
    });
    return cmds;
  }
  compileGlyphImpl() {
    (0, _util.unreachable)("Children classes should implement this.");
  }
  hasBuiltPath(unicode) {
    const {
      charCode,
      glyphId
    } = lookupCmap(this.cmap, unicode);
    return this.compiledGlyphs[glyphId] !== undefined && this.compiledCharCodeToGlyphId[charCode] !== undefined;
  }
}
class TrueTypeCompiled extends CompiledFont {
  constructor(glyphs, cmap, fontMatrix) {
    super(fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0]);
    this.glyphs = glyphs;
    this.cmap = cmap;
  }
  compileGlyphImpl(code, cmds) {
    compileGlyf(code, cmds, this);
  }
}
class Type2Compiled extends CompiledFont {
  constructor(cffInfo, cmap, fontMatrix, glyphNameMap) {
    super(fontMatrix || [0.001, 0, 0, 0.001, 0, 0]);
    this.glyphs = cffInfo.glyphs;
    this.gsubrs = cffInfo.gsubrs || [];
    this.subrs = cffInfo.subrs || [];
    this.cmap = cmap;
    this.glyphNameMap = glyphNameMap || (0, _glyphlist.getGlyphsUnicode)();
    this.gsubrsBias = getSubroutineBias(this.gsubrs);
    this.subrsBias = getSubroutineBias(this.subrs);
    this.isCFFCIDFont = cffInfo.isCFFCIDFont;
    this.fdSelect = cffInfo.fdSelect;
    this.fdArray = cffInfo.fdArray;
  }
  compileGlyphImpl(code, cmds, glyphId) {
    compileCharString(code, cmds, this, glyphId);
  }
}
class FontRendererFactory {
  static create(font, seacAnalysisEnabled) {
    const data = new Uint8Array(font.data);
    let cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm;
    const numTables = getUint16(data, 4);
    for (let i = 0, p = 12; i < numTables; i++, p += 16) {
      const tag = (0, _util.bytesToString)(data.subarray(p, p + 4));
      const offset = getUint32(data, p + 8);
      const length = getUint32(data, p + 12);
      switch (tag) {
        case "cmap":
          cmap = parseCmap(data, offset, offset + length);
          break;
        case "glyf":
          glyf = data.subarray(offset, offset + length);
          break;
        case "loca":
          loca = data.subarray(offset, offset + length);
          break;
        case "head":
          unitsPerEm = getUint16(data, offset + 18);
          indexToLocFormat = getUint16(data, offset + 50);
          break;
        case "CFF ":
          cff = parseCff(data, offset, offset + length, seacAnalysisEnabled);
          break;
      }
    }
    if (glyf) {
      const fontMatrix = !unitsPerEm ? font.fontMatrix : [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0];
      return new TrueTypeCompiled(parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix);
    }
    return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap);
  }
}
exports.FontRendererFactory = FontRendererFactory;

/***/ }),
/* 45 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.getMetrics = exports.getFontBasicMetrics = void 0;
var _core_utils = __w_pdfjs_require__(3);
const getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) {
  t.Courier = 600;
  t["Courier-Bold"] = 600;
  t["Courier-BoldOblique"] = 600;
  t["Courier-Oblique"] = 600;
  t.Helvetica = (0, _core_utils.getLookupTableFactory)(function (t) {
    t.space = 278;
    t.exclam = 278;
    t.quotedbl = 355;
    t.numbersign = 556;
    t.dollar = 556;
    t.percent = 889;
    t.ampersand = 667;
    t.quoteright = 222;
    t.parenleft = 333;
    t.parenright = 333;
    t.asterisk = 389;
    t.plus = 584;
    t.comma = 278;
    t.hyphen = 333;
    t.period = 278;
    t.slash = 278;
    t.zero = 556;
    t.one = 556;
    t.two = 556;
    t.three = 556;
    t.four = 556;
    t.five = 556;
    t.six = 556;
    t.seven = 556;
    t.eight = 556;
    t.nine = 556;
    t.colon = 278;
    t.semicolon = 278;
    t.less = 584;
    t.equal = 584;
    t.greater = 584;
    t.question = 556;
    t.at = 1015;
    t.A = 667;
    t.B = 667;
    t.C = 722;
    t.D = 722;
    t.E = 667;
    t.F = 611;
    t.G = 778;
    t.H = 722;
    t.I = 278;
    t.J = 500;
    t.K = 667;
    t.L = 556;
    t.M = 833;
    t.N = 722;
    t.O = 778;
    t.P = 667;
    t.Q = 778;
    t.R = 722;
    t.S = 667;
    t.T = 611;
    t.U = 722;
    t.V = 667;
    t.W = 944;
    t.X = 667;
    t.Y = 667;
    t.Z = 611;
    t.bracketleft = 278;
    t.backslash = 278;
    t.bracketright = 278;
    t.asciicircum = 469;
    t.underscore = 556;
    t.quoteleft = 222;
    t.a = 556;
    t.b = 556;
    t.c = 500;
    t.d = 556;
    t.e = 556;
    t.f = 278;
    t.g = 556;
    t.h = 556;
    t.i = 222;
    t.j = 222;
    t.k = 500;
    t.l = 222;
    t.m = 833;
    t.n = 556;
    t.o = 556;
    t.p = 556;
    t.q = 556;
    t.r = 333;
    t.s = 500;
    t.t = 278;
    t.u = 556;
    t.v = 500;
    t.w = 722;
    t.x = 500;
    t.y = 500;
    t.z = 500;
    t.braceleft = 334;
    t.bar = 260;
    t.braceright = 334;
    t.asciitilde = 584;
    t.exclamdown = 333;
    t.cent = 556;
    t.sterling = 556;
    t.fraction = 167;
    t.yen = 556;
    t.florin = 556;
    t.section = 556;
    t.currency = 556;
    t.quotesingle = 191;
    t.quotedblleft = 333;
    t.guillemotleft = 556;
    t.guilsinglleft = 333;
    t.guilsinglright = 333;
    t.fi = 500;
    t.fl = 500;
    t.endash = 556;
    t.dagger = 556;
    t.daggerdbl = 556;
    t.periodcentered = 278;
    t.paragraph = 537;
    t.bullet = 350;
    t.quotesinglbase = 222;
    t.quotedblbase = 333;
    t.quotedblright = 333;
    t.guillemotright = 556;
    t.ellipsis = 1000;
    t.perthousand = 1000;
    t.questiondown = 611;
    t.grave = 333;
    t.acute = 333;
    t.circumflex = 333;
    t.tilde = 333;
    t.macron = 333;
    t.breve = 333;
    t.dotaccent = 333;
    t.dieresis = 333;
    t.ring = 333;
    t.cedilla = 333;
    t.hungarumlaut = 333;
    t.ogonek = 333;
    t.caron = 333;
    t.emdash = 1000;
    t.AE = 1000;
    t.ordfeminine = 370;
    t.Lslash = 556;
    t.Oslash = 778;
    t.OE = 1000;
    t.ordmasculine = 365;
    t.ae = 889;
    t.dotlessi = 278;
    t.lslash = 222;
    t.oslash = 611;
    t.oe = 944;
    t.germandbls = 611;
    t.Idieresis = 278;
    t.eacute = 556;
    t.abreve = 556;
    t.uhungarumlaut = 556;
    t.ecaron = 556;
    t.Ydieresis = 667;
    t.divide = 584;
    t.Yacute = 667;
    t.Acircumflex = 667;
    t.aacute = 556;
    t.Ucircumflex = 722;
    t.yacute = 500;
    t.scommaaccent = 500;
    t.ecircumflex = 556;
    t.Uring = 722;
    t.Udieresis = 722;
    t.aogonek = 556;
    t.Uacute = 722;
    t.uogonek = 556;
    t.Edieresis = 667;
    t.Dcroat = 722;
    t.commaaccent = 250;
    t.copyright = 737;
    t.Emacron = 667;
    t.ccaron = 500;
    t.aring = 556;
    t.Ncommaaccent = 722;
    t.lacute = 222;
    t.agrave = 556;
    t.Tcommaaccent = 611;
    t.Cacute = 722;
    t.atilde = 556;
    t.Edotaccent = 667;
    t.scaron = 500;
    t.scedilla = 500;
    t.iacute = 278;
    t.lozenge = 471;
    t.Rcaron = 722;
    t.Gcommaaccent = 778;
    t.ucircumflex = 556;
    t.acircumflex = 556;
    t.Amacron = 667;
    t.rcaron = 333;
    t.ccedilla = 500;
    t.Zdotaccent = 611;
    t.Thorn = 667;
    t.Omacron = 778;
    t.Racute = 722;
    t.Sacute = 667;
    t.dcaron = 643;
    t.Umacron = 722;
    t.uring = 556;
    t.threesuperior = 333;
    t.Ograve = 778;
    t.Agrave = 667;
    t.Abreve = 667;
    t.multiply = 584;
    t.uacute = 556;
    t.Tcaron = 611;
    t.partialdiff = 476;
    t.ydieresis = 500;
    t.Nacute = 722;
    t.icircumflex = 278;
    t.Ecircumflex = 667;
    t.adieresis = 556;
    t.edieresis = 556;
    t.cacute = 500;
    t.nacute = 556;
    t.umacron = 556;
    t.Ncaron = 722;
    t.Iacute = 278;
    t.plusminus = 584;
    t.brokenbar = 260;
    t.registered = 737;
    t.Gbreve = 778;
    t.Idotaccent = 278;
    t.summation = 600;
    t.Egrave = 667;
    t.racute = 333;
    t.omacron = 556;
    t.Zacute = 611;
    t.Zcaron = 611;
    t.greaterequal = 549;
    t.Eth = 722;
    t.Ccedilla = 722;
    t.lcommaaccent = 222;
    t.tcaron = 317;
    t.eogonek = 556;
    t.Uogonek = 722;
    t.Aacute = 667;
    t.Adieresis = 667;
    t.egrave = 556;
    t.zacute = 500;
    t.iogonek = 222;
    t.Oacute = 778;
    t.oacute = 556;
    t.amacron = 556;
    t.sacute = 500;
    t.idieresis = 278;
    t.Ocircumflex = 778;
    t.Ugrave = 722;
    t.Delta = 612;
    t.thorn = 556;
    t.twosuperior = 333;
    t.Odieresis = 778;
    t.mu = 556;
    t.igrave = 278;
    t.ohungarumlaut = 556;
    t.Eogonek = 667;
    t.dcroat = 556;
    t.threequarters = 834;
    t.Scedilla = 667;
    t.lcaron = 299;
    t.Kcommaaccent = 667;
    t.Lacute = 556;
    t.trademark = 1000;
    t.edotaccent = 556;
    t.Igrave = 278;
    t.Imacron = 278;
    t.Lcaron = 556;
    t.onehalf = 834;
    t.lessequal = 549;
    t.ocircumflex = 556;
    t.ntilde = 556;
    t.Uhungarumlaut = 722;
    t.Eacute = 667;
    t.emacron = 556;
    t.gbreve = 556;
    t.onequarter = 834;
    t.Scaron = 667;
    t.Scommaaccent = 667;
    t.Ohungarumlaut = 778;
    t.degree = 400;
    t.ograve = 556;
    t.Ccaron = 722;
    t.ugrave = 556;
    t.radical = 453;
    t.Dcaron = 722;
    t.rcommaaccent = 333;
    t.Ntilde = 722;
    t.otilde = 556;
    t.Rcommaaccent = 722;
    t.Lcommaaccent = 556;
    t.Atilde = 667;
    t.Aogonek = 667;
    t.Aring = 667;
    t.Otilde = 778;
    t.zdotaccent = 500;
    t.Ecaron = 667;
    t.Iogonek = 278;
    t.kcommaaccent = 500;
    t.minus = 584;
    t.Icircumflex = 278;
    t.ncaron = 556;
    t.tcommaaccent = 278;
    t.logicalnot = 584;
    t.odieresis = 556;
    t.udieresis = 556;
    t.notequal = 549;
    t.gcommaaccent = 556;
    t.eth = 556;
    t.zcaron = 500;
    t.ncommaaccent = 556;
    t.onesuperior = 333;
    t.imacron = 278;
    t.Euro = 556;
  });
  t["Helvetica-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) {
    t.space = 278;
    t.exclam = 333;
    t.quotedbl = 474;
    t.numbersign = 556;
    t.dollar = 556;
    t.percent = 889;
    t.ampersand = 722;
    t.quoteright = 278;
    t.parenleft = 333;
    t.parenright = 333;
    t.asterisk = 389;
    t.plus = 584;
    t.comma = 278;
    t.hyphen = 333;
    t.period = 278;
    t.slash = 278;
    t.zero = 556;
    t.one = 556;
    t.two = 556;
    t.three = 556;
    t.four = 556;
    t.five = 556;
    t.six = 556;
    t.seven = 556;
    t.eight = 556;
    t.nine = 556;
    t.colon = 333;
    t.semicolon = 333;
    t.less = 584;
    t.equal = 584;
    t.greater = 584;
    t.question = 611;
    t.at = 975;
    t.A = 722;
    t.B = 722;
    t.C = 722;
    t.D = 722;
    t.E = 667;
    t.F = 611;
    t.G = 778;
    t.H = 722;
    t.I = 278;
    t.J = 556;
    t.K = 722;
    t.L = 611;
    t.M = 833;
    t.N = 722;
    t.O = 778;
    t.P = 667;
    t.Q = 778;
    t.R = 722;
    t.S = 667;
    t.T = 611;
    t.U = 722;
    t.V = 667;
    t.W = 944;
    t.X = 667;
    t.Y = 667;
    t.Z = 611;
    t.bracketleft = 333;
    t.backslash = 278;
    t.bracketright = 333;
    t.asciicircum = 584;
    t.underscore = 556;
    t.quoteleft = 278;
    t.a = 556;
    t.b = 611;
    t.c = 556;
    t.d = 611;
    t.e = 556;
    t.f = 333;
    t.g = 611;
    t.h = 611;
    t.i = 278;
    t.j = 278;
    t.k = 556;
    t.l = 278;
    t.m = 889;
    t.n = 611;
    t.o = 611;
    t.p = 611;
    t.q = 611;
    t.r = 389;
    t.s = 556;
    t.t = 333;
    t.u = 611;
    t.v = 556;
    t.w = 778;
    t.x = 556;
    t.y = 556;
    t.z = 500;
    t.braceleft = 389;
    t.bar = 280;
    t.braceright = 389;
    t.asciitilde = 584;
    t.exclamdown = 333;
    t.cent = 556;
    t.sterling = 556;
    t.fraction = 167;
    t.yen = 556;
    t.florin = 556;
    t.section = 556;
    t.currency = 556;
    t.quotesingle = 238;
    t.quotedblleft = 500;
    t.guillemotleft = 556;
    t.guilsinglleft = 333;
    t.guilsinglright = 333;
    t.fi = 611;
    t.fl = 611;
    t.endash = 556;
    t.dagger = 556;
    t.daggerdbl = 556;
    t.periodcentered = 278;
    t.paragraph = 556;
    t.bullet = 350;
    t.quotesinglbase = 278;
    t.quotedblbase = 500;
    t.quotedblright = 500;
    t.guillemotright = 556;
    t.ellipsis = 1000;
    t.perthousand = 1000;
    t.questiondown = 611;
    t.grave = 333;
    t.acute = 333;
    t.circumflex = 333;
    t.tilde = 333;
    t.macron = 333;
    t.breve = 333;
    t.dotaccent = 333;
    t.dieresis = 333;
    t.ring = 333;
    t.cedilla = 333;
    t.hungarumlaut = 333;
    t.ogonek = 333;
    t.caron = 333;
    t.emdash = 1000;
    t.AE = 1000;
    t.ordfeminine = 370;
    t.Lslash = 611;
    t.Oslash = 778;
    t.OE = 1000;
    t.ordmasculine = 365;
    t.ae = 889;
    t.dotlessi = 278;
    t.lslash = 278;
    t.oslash = 611;
    t.oe = 944;
    t.germandbls = 611;
    t.Idieresis = 278;
    t.eacute = 556;
    t.abreve = 556;
    t.uhungarumlaut = 611;
    t.ecaron = 556;
    t.Ydieresis = 667;
    t.divide = 584;
    t.Yacute = 667;
    t.Acircumflex = 722;
    t.aacute = 556;
    t.Ucircumflex = 722;
    t.yacute = 556;
    t.scommaaccent = 556;
    t.ecircumflex = 556;
    t.Uring = 722;
    t.Udieresis = 722;
    t.aogonek = 556;
    t.Uacute = 722;
    t.uogonek = 611;
    t.Edieresis = 667;
    t.Dcroat = 722;
    t.commaaccent = 250;
    t.copyright = 737;
    t.Emacron = 667;
    t.ccaron = 556;
    t.aring = 556;
    t.Ncommaaccent = 722;
    t.lacute = 278;
    t.agrave = 556;
    t.Tcommaaccent = 611;
    t.Cacute = 722;
    t.atilde = 556;
    t.Edotaccent = 667;
    t.scaron = 556;
    t.scedilla = 556;
    t.iacute = 278;
    t.lozenge = 494;
    t.Rcaron = 722;
    t.Gcommaaccent = 778;
    t.ucircumflex = 611;
    t.acircumflex = 556;
    t.Amacron = 722;
    t.rcaron = 389;
    t.ccedilla = 556;
    t.Zdotaccent = 611;
    t.Thorn = 667;
    t.Omacron = 778;
    t.Racute = 722;
    t.Sacute = 667;
    t.dcaron = 743;
    t.Umacron = 722;
    t.uring = 611;
    t.threesuperior = 333;
    t.Ograve = 778;
    t.Agrave = 722;
    t.Abreve = 722;
    t.multiply = 584;
    t.uacute = 611;
    t.Tcaron = 611;
    t.partialdiff = 494;
    t.ydieresis = 556;
    t.Nacute = 722;
    t.icircumflex = 278;
    t.Ecircumflex = 667;
    t.adieresis = 556;
    t.edieresis = 556;
    t.cacute = 556;
    t.nacute = 611;
    t.umacron = 611;
    t.Ncaron = 722;
    t.Iacute = 278;
    t.plusminus = 584;
    t.brokenbar = 280;
    t.registered = 737;
    t.Gbreve = 778;
    t.Idotaccent = 278;
    t.summation = 600;
    t.Egrave = 667;
    t.racute = 389;
    t.omacron = 611;
    t.Zacute = 611;
    t.Zcaron = 611;
    t.greaterequal = 549;
    t.Eth = 722;
    t.Ccedilla = 722;
    t.lcommaaccent = 278;
    t.tcaron = 389;
    t.eogonek = 556;
    t.Uogonek = 722;
    t.Aacute = 722;
    t.Adieresis = 722;
    t.egrave = 556;
    t.zacute = 500;
    t.iogonek = 278;
    t.Oacute = 778;
    t.oacute = 611;
    t.amacron = 556;
    t.sacute = 556;
    t.idieresis = 278;
    t.Ocircumflex = 778;
    t.Ugrave = 722;
    t.Delta = 612;
    t.thorn = 611;
    t.twosuperior = 333;
    t.Odieresis = 778;
    t.mu = 611;
    t.igrave = 278;
    t.ohungarumlaut = 611;
    t.Eogonek = 667;
    t.dcroat = 611;
    t.threequarters = 834;
    t.Scedilla = 667;
    t.lcaron = 400;
    t.Kcommaaccent = 722;
    t.Lacute = 611;
    t.trademark = 1000;
    t.edotaccent = 556;
    t.Igrave = 278;
    t.Imacron = 278;
    t.Lcaron = 611;
    t.onehalf = 834;
    t.lessequal = 549;
    t.ocircumflex = 611;
    t.ntilde = 611;
    t.Uhungarumlaut = 722;
    t.Eacute = 667;
    t.emacron = 556;
    t.gbreve = 611;
    t.onequarter = 834;
    t.Scaron = 667;
    t.Scommaaccent = 667;
    t.Ohungarumlaut = 778;
    t.degree = 400;
    t.ograve = 611;
    t.Ccaron = 722;
    t.ugrave = 611;
    t.radical = 549;
    t.Dcaron = 722;
    t.rcommaaccent = 389;
    t.Ntilde = 722;
    t.otilde = 611;
    t.Rcommaaccent = 722;
    t.Lcommaaccent = 611;
    t.Atilde = 722;
    t.Aogonek = 722;
    t.Aring = 722;
    t.Otilde = 778;
    t.zdotaccent = 500;
    t.Ecaron = 667;
    t.Iogonek = 278;
    t.kcommaaccent = 556;
    t.minus = 584;
    t.Icircumflex = 278;
    t.ncaron = 611;
    t.tcommaaccent = 333;
    t.logicalnot = 584;
    t.odieresis = 611;
    t.udieresis = 611;
    t.notequal = 549;
    t.gcommaaccent = 611;
    t.eth = 611;
    t.zcaron = 500;
    t.ncommaaccent = 611;
    t.onesuperior = 333;
    t.imacron = 278;
    t.Euro = 556;
  });
  t["Helvetica-BoldOblique"] = (0, _core_utils.getLookupTableFactory)(function (t) {
    t.space = 278;
    t.exclam = 333;
    t.quotedbl = 474;
    t.numbersign = 556;
    t.dollar = 556;
    t.percent = 889;
    t.ampersand = 722;
    t.quoteright = 278;
    t.parenleft = 333;
    t.parenright = 333;
    t.asterisk = 389;
    t.plus = 584;
    t.comma = 278;
    t.hyphen = 333;
    t.period = 278;
    t.slash = 278;
    t.zero = 556;
    t.one = 556;
    t.two = 556;
    t.three = 556;
    t.four = 556;
    t.five = 556;
    t.six = 556;
    t.seven = 556;
    t.eight = 556;
    t.nine = 556;
    t.colon = 333;
    t.semicolon = 333;
    t.less = 584;
    t.equal = 584;
    t.greater = 584;
    t.question = 611;
    t.at = 975;
    t.A = 722;
    t.B = 722;
    t.C = 722;
    t.D = 722;
    t.E = 667;
    t.F = 611;
    t.G = 778;
    t.H = 722;
    t.I = 278;
    t.J = 556;
    t.K = 722;
    t.L = 611;
    t.M = 833;
    t.N = 722;
    t.O = 778;
    t.P = 667;
    t.Q = 778;
    t.R = 722;
    t.S = 667;
    t.T = 611;
    t.U = 722;
    t.V = 667;
    t.W = 944;
    t.X = 667;
    t.Y = 667;
    t.Z = 611;
    t.bracketleft = 333;
    t.backslash = 278;
    t.bracketright = 333;
    t.asciicircum = 584;
    t.underscore = 556;
    t.quoteleft = 278;
    t.a = 556;
    t.b = 611;
    t.c = 556;
    t.d = 611;
    t.e = 556;
    t.f = 333;
    t.g = 611;
    t.h = 611;
    t.i = 278;
    t.j = 278;
    t.k = 556;
    t.l = 278;
    t.m = 889;
    t.n = 611;
    t.o = 611;
    t.p = 611;
    t.q = 611;
    t.r = 389;
    t.s = 556;
    t.t = 333;
    t.u = 611;
    t.v = 556;
    t.w = 778;
    t.x = 556;
    t.y = 556;
    t.z = 500;
    t.braceleft = 389;
    t.bar = 280;
    t.braceright = 389;
    t.asciitilde = 584;
    t.exclamdown = 333;
    t.cent = 556;
    t.sterling = 556;
    t.fraction = 167;
    t.yen = 556;
    t.florin = 556;
    t.section = 556;
    t.currency = 556;
    t.quotesingle = 238;
    t.quotedblleft = 500;
    t.guillemotleft = 556;
    t.guilsinglleft = 333;
    t.guilsinglright = 333;
    t.fi = 611;
    t.fl = 611;
    t.endash = 556;
    t.dagger = 556;
    t.daggerdbl = 556;
    t.periodcentered = 278;
    t.paragraph = 556;
    t.bullet = 350;
    t.quotesinglbase = 278;
    t.quotedblbase = 500;
    t.quotedblright = 500;
    t.guillemotright = 556;
    t.ellipsis = 1000;
    t.perthousand = 1000;
    t.questiondown = 611;
    t.grave = 333;
    t.acute = 333;
    t.circumflex = 333;
    t.tilde = 333;
    t.macron = 333;
    t.breve = 333;
    t.dotaccent = 333;
    t.dieresis = 333;
    t.ring = 333;
    t.cedilla = 333;
    t.hungarumlaut = 333;
    t.ogonek = 333;
    t.caron = 333;
    t.emdash = 1000;
    t.AE = 1000;
    t.ordfeminine = 370;
    t.Lslash = 611;
    t.Oslash = 778;
    t.OE = 1000;
    t.ordmasculine = 365;
    t.ae = 889;
    t.dotlessi = 278;
    t.lslash = 278;
    t.oslash = 611;
    t.oe = 944;
    t.germandbls = 611;
    t.Idieresis = 278;
    t.eacute = 556;
    t.abreve = 556;
    t.uhungarumlaut = 611;
    t.ecaron = 556;
    t.Ydieresis = 667;
    t.divide = 584;
    t.Yacute = 667;
    t.Acircumflex = 722;
    t.aacute = 556;
    t.Ucircumflex = 722;
    t.yacute = 556;
    t.scommaaccent = 556;
    t.ecircumflex = 556;
    t.Uring = 722;
    t.Udieresis = 722;
    t.aogonek = 556;
    t.Uacute = 722;
    t.uogonek = 611;
    t.Edieresis = 667;
    t.Dcroat = 722;
    t.commaaccent = 250;
    t.copyright = 737;
    t.Emacron = 667;
    t.ccaron = 556;
    t.aring = 556;
    t.Ncommaaccent = 722;
    t.lacute = 278;
    t.agrave = 556;
    t.Tcommaaccent = 611;
    t.Cacute = 722;
    t.atilde = 556;
    t.Edotaccent = 667;
    t.scaron = 556;
    t.scedilla = 556;
    t.iacute = 278;
    t.lozenge = 494;
    t.Rcaron = 722;
    t.Gcommaaccent = 778;
    t.ucircumflex = 611;
    t.acircumflex = 556;
    t.Amacron = 722;
    t.rcaron = 389;
    t.ccedilla = 556;
    t.Zdotaccent = 611;
    t.Thorn = 667;
    t.Omacron = 778;
    t.Racute = 722;
    t.Sacute = 667;
    t.dcaron = 743;
    t.Umacron = 722;
    t.uring = 611;
    t.threesuperior = 333;
    t.Ograve = 778;
    t.Agrave = 722;
    t.Abreve = 722;
    t.multiply = 584;
    t.uacute = 611;
    t.Tcaron = 611;
    t.partialdiff = 494;
    t.ydieresis = 556;
    t.Nacute = 722;
    t.icircumflex = 278;
    t.Ecircumflex = 667;
    t.adieresis = 556;
    t.edieresis = 556;
    t.cacute = 556;
    t.nacute = 611;
    t.umacron = 611;
    t.Ncaron = 722;
    t.Iacute = 278;
    t.plusminus = 584;
    t.brokenbar = 280;
    t.registered = 737;
    t.Gbreve = 778;
    t.Idotaccent = 278;
    t.summation = 600;
    t.Egrave = 667;
    t.racute = 389;
    t.omacron = 611;
    t.Zacute = 611;
    t.Zcaron = 611;
    t.greaterequal = 549;
    t.Eth = 722;
    t.Ccedilla = 722;
    t.lcommaaccent = 278;
    t.tcaron = 389;
    t.eogonek = 556;
    t.Uogonek = 722;
    t.Aacute = 722;
    t.Adieresis = 722;
    t.egrave = 556;
    t.zacute = 500;
    t.iogonek = 278;
    t.Oacute = 778;
    t.oacute = 611;
    t.amacron = 556;
    t.sacute = 556;
    t.idieresis = 278;
    t.Ocircumflex = 778;
    t.Ugrave = 722;
    t.Delta = 612;
    t.thorn = 611;
    t.twosuperior = 333;
    t.Odieresis = 778;
    t.mu = 611;
    t.igrave = 278;
    t.ohungarumlaut = 611;
    t.Eogonek = 667;
    t.dcroat = 611;
    t.threequarters = 834;
    t.Scedilla = 667;
    t.lcaron = 400;
    t.Kcommaaccent = 722;
    t.Lacute = 611;
    t.trademark = 1000;
    t.edotaccent = 556;
    t.Igrave = 278;
    t.Imacron = 278;
    t.Lcaron = 611;
    t.onehalf = 834;
    t.lessequal = 549;
    t.ocircumflex = 611;
    t.ntilde = 611;
    t.Uhungarumlaut = 722;
    t.Eacute = 667;
    t.emacron = 556;
    t.gbreve = 611;
    t.onequarter = 834;
    t.Scaron = 667;
    t.Scommaaccent = 667;
    t.Ohungarumlaut = 778;
    t.degree = 400;
    t.ograve = 611;
    t.Ccaron = 722;
    t.ugrave = 611;
    t.radical = 549;
    t.Dcaron = 722;
    t.rcommaaccent = 389;
    t.Ntilde = 722;
    t.otilde = 611;
    t.Rcommaaccent = 722;
    t.Lcommaaccent = 611;
    t.Atilde = 722;
    t.Aogonek = 722;
    t.Aring = 722;
    t.Otilde = 778;
    t.zdotaccent = 500;
    t.Ecaron = 667;
    t.Iogonek = 278;
    t.kcommaaccent = 556;
    t.minus = 584;
    t.Icircumflex = 278;
    t.ncaron = 611;
    t.tcommaaccent = 333;
    t.logicalnot = 584;
    t.odieresis = 611;
    t.udieresis = 611;
    t.notequal = 549;
    t.gcommaaccent = 611;
    t.eth = 611;
    t.zcaron = 500;
    t.ncommaaccent = 611;
    t.onesuperior = 333;
    t.imacron = 278;
    t.Euro = 556;
  });
  t["Helvetica-Oblique"] = (0, _core_utils.getLookupTableFactory)(function (t) {
    t.space = 278;
    t.exclam = 278;
    t.quotedbl = 355;
    t.numbersign = 556;
    t.dollar = 556;
    t.percent = 889;
    t.ampersand = 667;
    t.quoteright = 222;
    t.parenleft = 333;
    t.parenright = 333;
    t.asterisk = 389;
    t.plus = 584;
    t.comma = 278;
    t.hyphen = 333;
    t.period = 278;
    t.slash = 278;
    t.zero = 556;
    t.one = 556;
    t.two = 556;
    t.three = 556;
    t.four = 556;
    t.five = 556;
    t.six = 556;
    t.seven = 556;
    t.eight = 556;
    t.nine = 556;
    t.colon = 278;
    t.semicolon = 278;
    t.less = 584;
    t.equal = 584;
    t.greater = 584;
    t.question = 556;
    t.at = 1015;
    t.A = 667;
    t.B = 667;
    t.C = 722;
    t.D = 722;
    t.E = 667;
    t.F = 611;
    t.G = 778;
    t.H = 722;
    t.I = 278;
    t.J = 500;
    t.K = 667;
    t.L = 556;
    t.M = 833;
    t.N = 722;
    t.O = 778;
    t.P = 667;
    t.Q = 778;
    t.R = 722;
    t.S = 667;
    t.T = 611;
    t.U = 722;
    t.V = 667;
    t.W = 944;
    t.X = 667;
    t.Y = 667;
    t.Z = 611;
    t.bracketleft = 278;
    t.backslash = 278;
    t.bracketright = 278;
    t.asciicircum = 469;
    t.underscore = 556;
    t.quoteleft = 222;
    t.a = 556;
    t.b = 556;
    t.c = 500;
    t.d = 556;
    t.e = 556;
    t.f = 278;
    t.g = 556;
    t.h = 556;
    t.i = 222;
    t.j = 222;
    t.k = 500;
    t.l = 222;
    t.m = 833;
    t.n = 556;
    t.o = 556;
    t.p = 556;
    t.q = 556;
    t.r = 333;
    t.s = 500;
    t.t = 278;
    t.u = 556;
    t.v = 500;
    t.w = 722;
    t.x = 500;
    t.y = 500;
    t.z = 500;
    t.braceleft = 334;
    t.bar = 260;
    t.braceright = 334;
    t.asciitilde = 584;
    t.exclamdown = 333;
    t.cent = 556;
    t.sterling = 556;
    t.fraction = 167;
    t.yen = 556;
    t.florin = 556;
    t.section = 556;
    t.currency = 556;
    t.quotesingle = 191;
    t.quotedblleft = 333;
    t.guillemotleft = 556;
    t.guilsinglleft = 333;
    t.guilsinglright = 333;
    t.fi = 500;
    t.fl = 500;
    t.endash = 556;
    t.dagger = 556;
    t.daggerdbl = 556;
    t.periodcentered = 278;
    t.paragraph = 537;
    t.bullet = 350;
    t.quotesinglbase = 222;
    t.quotedblbase = 333;
    t.quotedblright = 333;
    t.guillemotright = 556;
    t.ellipsis = 1000;
    t.perthousand = 1000;
    t.questiondown = 611;
    t.grave = 333;
    t.acute = 333;
    t.circumflex = 333;
    t.tilde = 333;
    t.macron = 333;
    t.breve = 333;
    t.dotaccent = 333;
    t.dieresis = 333;
    t.ring = 333;
    t.cedilla = 333;
    t.hungarumlaut = 333;
    t.ogonek = 333;
    t.caron = 333;
    t.emdash = 1000;
    t.AE = 1000;
    t.ordfeminine = 370;
    t.Lslash = 556;
    t.Oslash = 778;
    t.OE = 1000;
    t.ordmasculine = 365;
    t.ae = 889;
    t.dotlessi = 278;
    t.lslash = 222;
    t.oslash = 611;
    t.oe = 944;
    t.germandbls = 611;
    t.Idieresis = 278;
    t.eacute = 556;
    t.abreve = 556;
    t.uhungarumlaut = 556;
    t.ecaron = 556;
    t.Ydieresis = 667;
    t.divide = 584;
    t.Yacute = 667;
    t.Acircumflex = 667;
    t.aacute = 556;
    t.Ucircumflex = 722;
    t.yacute = 500;
    t.scommaaccent = 500;
    t.ecircumflex = 556;
    t.Uring = 722;
    t.Udieresis = 722;
    t.aogonek = 556;
    t.Uacute = 722;
    t.uogonek = 556;
    t.Edieresis = 667;
    t.Dcroat = 722;
    t.commaaccent = 250;
    t.copyright = 737;
    t.Emacron = 667;
    t.ccaron = 500;
    t.aring = 556;
    t.Ncommaaccent = 722;
    t.lacute = 222;
    t.agrave = 556;
    t.Tcommaaccent = 611;
    t.Cacute = 722;
    t.atilde = 556;
    t.Edotaccent = 667;
    t.scaron = 500;
    t.scedilla = 500;
    t.iacute = 278;
    t.lozenge = 471;
    t.Rcaron = 722;
    t.Gcommaaccent = 778;
    t.ucircumflex = 556;
    t.acircumflex = 556;
    t.Amacron = 667;
    t.rcaron = 333;
    t.ccedilla = 500;
    t.Zdotaccent = 611;
    t.Thorn = 667;
    t.Omacron = 778;
    t.Racute = 722;
    t.Sacute = 667;
    t.dcaron = 643;
    t.Umacron = 722;
    t.uring = 556;
    t.threesuperior = 333;
    t.Ograve = 778;
    t.Agrave = 667;
    t.Abreve = 667;
    t.multiply = 584;
    t.uacute = 556;
    t.Tcaron = 611;
    t.partialdiff = 476;
    t.ydieresis = 500;
    t.Nacute = 722;
    t.icircumflex = 278;
    t.Ecircumflex = 667;
    t.adieresis = 556;
    t.edieresis = 556;
    t.cacute = 500;
    t.nacute = 556;
    t.umacron = 556;
    t.Ncaron = 722;
    t.Iacute = 278;
    t.plusminus = 584;
    t.brokenbar = 260;
    t.registered = 737;
    t.Gbreve = 778;
    t.Idotaccent = 278;
    t.summation = 600;
    t.Egrave = 667;
    t.racute = 333;
    t.omacron = 556;
    t.Zacute = 611;
    t.Zcaron = 611;
    t.greaterequal = 549;
    t.Eth = 722;
    t.Ccedilla = 722;
    t.lcommaaccent = 222;
    t.tcaron = 317;
    t.eogonek = 556;
    t.Uogonek = 722;
    t.Aacute = 667;
    t.Adieresis = 667;
    t.egrave = 556;
    t.zacute = 500;
    t.iogonek = 222;
    t.Oacute = 778;
    t.oacute = 556;
    t.amacron = 556;
    t.sacute = 500;
    t.idieresis = 278;
    t.Ocircumflex = 778;
    t.Ugrave = 722;
    t.Delta = 612;
    t.thorn = 556;
    t.twosuperior = 333;
    t.Odieresis = 778;
    t.mu = 556;
    t.igrave = 278;
    t.ohungarumlaut = 556;
    t.Eogonek = 667;
    t.dcroat = 556;
    t.threequarters = 834;
    t.Scedilla = 667;
    t.lcaron = 299;
    t.Kcommaaccent = 667;
    t.Lacute = 556;
    t.trademark = 1000;
    t.edotaccent = 556;
    t.Igrave = 278;
    t.Imacron = 278;
    t.Lcaron = 556;
    t.onehalf = 834;
    t.lessequal = 549;
    t.ocircumflex = 556;
    t.ntilde = 556;
    t.Uhungarumlaut = 722;
    t.Eacute = 667;
    t.emacron = 556;
    t.gbreve = 556;
    t.onequarter = 834;
    t.Scaron = 667;
    t.Scommaaccent = 667;
    t.Ohungarumlaut = 778;
    t.degree = 400;
    t.ograve = 556;
    t.Ccaron = 722;
    t.ugrave = 556;
    t.radical = 453;
    t.Dcaron = 722;
    t.rcommaaccent = 333;
    t.Ntilde = 722;
    t.otilde = 556;
    t.Rcommaaccent = 722;
    t.Lcommaaccent = 556;
    t.Atilde = 667;
    t.Aogonek = 667;
    t.Aring = 667;
    t.Otilde = 778;
    t.zdotaccent = 500;
    t.Ecaron = 667;
    t.Iogonek = 278;
    t.kcommaaccent = 500;
    t.minus = 584;
    t.Icircumflex = 278;
    t.ncaron = 556;
    t.tcommaaccent = 278;
    t.logicalnot = 584;
    t.odieresis = 556;
    t.udieresis = 556;
    t.notequal = 549;
    t.gcommaaccent = 556;
    t.eth = 556;
    t.zcaron = 500;
    t.ncommaaccent = 556;
    t.onesuperior = 333;
    t.imacron = 278;
    t.Euro = 556;
  });
  t.Symbol = (0, _core_utils.getLookupTableFactory)(function (t) {
    t.space = 250;
    t.exclam = 333;
    t.universal = 713;
    t.numbersign = 500;
    t.existential = 549;
    t.percent = 833;
    t.ampersand = 778;
    t.suchthat = 439;
    t.parenleft = 333;
    t.parenright = 333;
    t.asteriskmath = 500;
    t.plus = 549;
    t.comma = 250;
    t.minus = 549;
    t.period = 250;
    t.slash = 278;
    t.zero = 500;
    t.one = 500;
    t.two = 500;
    t.three = 500;
    t.four = 500;
    t.five = 500;
    t.six = 500;
    t.seven = 500;
    t.eight = 500;
    t.nine = 500;
    t.colon = 278;
    t.semicolon = 278;
    t.less = 549;
    t.equal = 549;
    t.greater = 549;
    t.question = 444;
    t.congruent = 549;
    t.Alpha = 722;
    t.Beta = 667;
    t.Chi = 722;
    t.Delta = 612;
    t.Epsilon = 611;
    t.Phi = 763;
    t.Gamma = 603;
    t.Eta = 722;
    t.Iota = 333;
    t.theta1 = 631;
    t.Kappa = 722;
    t.Lambda = 686;
    t.Mu = 889;
    t.Nu = 722;
    t.Omicron = 722;
    t.Pi = 768;
    t.Theta = 741;
    t.Rho = 556;
    t.Sigma = 592;
    t.Tau = 611;
    t.Upsilon = 690;
    t.sigma1 = 439;
    t.Omega = 768;
    t.Xi = 645;
    t.Psi = 795;
    t.Zeta = 611;
    t.bracketleft = 333;
    t.therefore = 863;
    t.bracketright = 333;
    t.perpendicular = 658;
    t.underscore = 500;
    t.radicalex = 500;
    t.alpha = 631;
    t.beta = 549;
    t.chi = 549;
    t.delta = 494;
    t.epsilon = 439;
    t.phi = 521;
    t.gamma = 411;
    t.eta = 603;
    t.iota = 329;
    t.phi1 = 603;
    t.kappa = 549;
    t.lambda = 549;
    t.mu = 576;
    t.nu = 521;
    t.omicron = 549;
    t.pi = 549;
    t.theta = 521;
    t.rho = 549;
    t.sigma = 603;
    t.tau = 439;
    t.upsilon = 576;
    t.omega1 = 713;
    t.omega = 686;
    t.xi = 493;
    t.psi = 686;
    t.zeta = 494;
    t.braceleft = 480;
    t.bar = 200;
    t.braceright = 480;
    t.similar = 549;
    t.Euro = 750;
    t.Upsilon1 = 620;
    t.minute = 247;
    t.lessequal = 549;
    t.fraction = 167;
    t.infinity = 713;
    t.florin = 500;
    t.club = 753;
    t.diamond = 753;
    t.heart = 753;
    t.spade = 753;
    t.arrowboth = 1042;
    t.arrowleft = 987;
    t.arrowup = 603;
    t.arrowright = 987;
    t.arrowdown = 603;
    t.degree = 400;
    t.plusminus = 549;
    t.second = 411;
    t.greaterequal = 549;
    t.multiply = 549;
    t.proportional = 713;
    t.partialdiff = 494;
    t.bullet = 460;
    t.divide = 549;
    t.notequal = 549;
    t.equivalence = 549;
    t.approxequal = 549;
    t.ellipsis = 1000;
    t.arrowvertex = 603;
    t.arrowhorizex = 1000;
    t.carriagereturn = 658;
    t.aleph = 823;
    t.Ifraktur = 686;
    t.Rfraktur = 795;
    t.weierstrass = 987;
    t.circlemultiply = 768;
    t.circleplus = 768;
    t.emptyset = 823;
    t.intersection = 768;
    t.union = 768;
    t.propersuperset = 713;
    t.reflexsuperset = 713;
    t.notsubset = 713;
    t.propersubset = 713;
    t.reflexsubset = 713;
    t.element = 713;
    t.notelement = 713;
    t.angle = 768;
    t.gradient = 713;
    t.registerserif = 790;
    t.copyrightserif = 790;
    t.trademarkserif = 890;
    t.product = 823;
    t.radical = 549;
    t.dotmath = 250;
    t.logicalnot = 713;
    t.logicaland = 603;
    t.logicalor = 603;
    t.arrowdblboth = 1042;
    t.arrowdblleft = 987;
    t.arrowdblup = 603;
    t.arrowdblright = 987;
    t.arrowdbldown = 603;
    t.lozenge = 494;
    t.angleleft = 329;
    t.registersans = 790;
    t.copyrightsans = 790;
    t.trademarksans = 786;
    t.summation = 713;
    t.parenlefttp = 384;
    t.parenleftex = 384;
    t.parenleftbt = 384;
    t.bracketlefttp = 384;
    t.bracketleftex = 384;
    t.bracketleftbt = 384;
    t.bracelefttp = 494;
    t.braceleftmid = 494;
    t.braceleftbt = 494;
    t.braceex = 494;
    t.angleright = 329;
    t.integral = 274;
    t.integraltp = 686;
    t.integralex = 686;
    t.integralbt = 686;
    t.parenrighttp = 384;
    t.parenrightex = 384;
    t.parenrightbt = 384;
    t.bracketrighttp = 384;
    t.bracketrightex = 384;
    t.bracketrightbt = 384;
    t.bracerighttp = 494;
    t.bracerightmid = 494;
    t.bracerightbt = 494;
    t.apple = 790;
  });
  t["Times-Roman"] = (0, _core_utils.getLookupTableFactory)(function (t) {
    t.space = 250;
    t.exclam = 333;
    t.quotedbl = 408;
    t.numbersign = 500;
    t.dollar = 500;
    t.percent = 833;
    t.ampersand = 778;
    t.quoteright = 333;
    t.parenleft = 333;
    t.parenright = 333;
    t.asterisk = 500;
    t.plus = 564;
    t.comma = 250;
    t.hyphen = 333;
    t.period = 250;
    t.slash = 278;
    t.zero = 500;
    t.one = 500;
    t.two = 500;
    t.three = 500;
    t.four = 500;
    t.five = 500;
    t.six = 500;
    t.seven = 500;
    t.eight = 500;
    t.nine = 500;
    t.colon = 278;
    t.semicolon = 278;
    t.less = 564;
    t.equal = 564;
    t.greater = 564;
    t.question = 444;
    t.at = 921;
    t.A = 722;
    t.B = 667;
    t.C = 667;
    t.D = 722;
    t.E = 611;
    t.F = 556;
    t.G = 722;
    t.H = 722;
    t.I = 333;
    t.J = 389;
    t.K = 722;
    t.L = 611;
    t.M = 889;
    t.N = 722;
    t.O = 722;
    t.P = 556;
    t.Q = 722;
    t.R = 667;
    t.S = 556;
    t.T = 611;
    t.U = 722;
    t.V = 722;
    t.W = 944;
    t.X = 722;
    t.Y = 722;
    t.Z = 611;
    t.bracketleft = 333;
    t.backslash = 278;
    t.bracketright = 333;
    t.asciicircum = 469;
    t.underscore = 500;
    t.quoteleft = 333;
    t.a = 444;
    t.b = 500;
    t.c = 444;
    t.d = 500;
    t.e = 444;
    t.f = 333;
    t.g = 500;
    t.h = 500;
    t.i = 278;
    t.j = 278;
    t.k = 500;
    t.l = 278;
    t.m = 778;
    t.n = 500;
    t.o = 500;
    t.p = 500;
    t.q = 500;
    t.r = 333;
    t.s = 389;
    t.t = 278;
    t.u = 500;
    t.v = 500;
    t.w = 722;
    t.x = 500;
    t.y = 500;
    t.z = 444;
    t.braceleft = 480;
    t.bar = 200;
    t.braceright = 480;
    t.asciitilde = 541;
    t.exclamdown = 333;
    t.cent = 500;
    t.sterling = 500;
    t.fraction = 167;
    t.yen = 500;
    t.florin = 500;
    t.section = 500;
    t.currency = 500;
    t.quotesingle = 180;
    t.quotedblleft = 444;
    t.guillemotleft = 500;
    t.guilsinglleft = 333;
    t.guilsinglright = 333;
    t.fi = 556;
    t.fl = 556;
    t.endash = 500;
    t.dagger = 500;
    t.daggerdbl = 500;
    t.periodcentered = 250;
    t.paragraph = 453;
    t.bullet = 350;
    t.quotesinglbase = 333;
    t.quotedblbase = 444;
    t.quotedblright = 444;
    t.guillemotright = 500;
    t.ellipsis = 1000;
    t.perthousand = 1000;
    t.questiondown = 444;
    t.grave = 333;
    t.acute = 333;
    t.circumflex = 333;
    t.tilde = 333;
    t.macron = 333;
    t.breve = 333;
    t.dotaccent = 333;
    t.dieresis = 333;
    t.ring = 333;
    t.cedilla = 333;
    t.hungarumlaut = 333;
    t.ogonek = 333;
    t.caron = 333;
    t.emdash = 1000;
    t.AE = 889;
    t.ordfeminine = 276;
    t.Lslash = 611;
    t.Oslash = 722;
    t.OE = 889;
    t.ordmasculine = 310;
    t.ae = 667;
    t.dotlessi = 278;
    t.lslash = 278;
    t.oslash = 500;
    t.oe = 722;
    t.germandbls = 500;
    t.Idieresis = 333;
    t.eacute = 444;
    t.abreve = 444;
    t.uhungarumlaut = 500;
    t.ecaron = 444;
    t.Ydieresis = 722;
    t.divide = 564;
    t.Yacute = 722;
    t.Acircumflex = 722;
    t.aacute = 444;
    t.Ucircumflex = 722;
    t.yacute = 500;
    t.scommaaccent = 389;
    t.ecircumflex = 444;
    t.Uring = 722;
    t.Udieresis = 722;
    t.aogonek = 444;
    t.Uacute = 722;
    t.uogonek = 500;
    t.Edieresis = 611;
    t.Dcroat = 722;
    t.commaaccent = 250;
    t.copyright = 760;
    t.Emacron = 611;
    t.ccaron = 444;
    t.aring = 444;
    t.Ncommaaccent = 722;
    t.lacute = 278;
    t.agrave = 444;
    t.Tcommaaccent = 611;
    t.Cacute = 667;
    t.atilde = 444;
    t.Edotaccent = 611;
    t.scaron = 389;
    t.scedilla = 389;
    t.iacute = 278;
    t.lozenge = 471;
    t.Rcaron = 667;
    t.Gcommaaccent = 722;
    t.ucircumflex = 500;
    t.acircumflex = 444;
    t.Amacron = 722;
    t.rcaron = 333;
    t.ccedilla = 444;
    t.Zdotaccent = 611;
    t.Thorn = 556;
    t.Omacron = 722;
    t.Racute = 667;
    t.Sacute = 556;
    t.dcaron = 588;
    t.Umacron = 722;
    t.uring = 500;
    t.threesuperior = 300;
    t.Ograve = 722;
    t.Agrave = 722;
    t.Abreve = 722;
    t.multiply = 564;
    t.uacute = 500;
    t.Tcaron = 611;
    t.partialdiff = 476;
    t.ydieresis = 500;
    t.Nacute = 722;
    t.icircumflex = 278;
    t.Ecircumflex = 611;
    t.adieresis = 444;
    t.edieresis = 444;
    t.cacute = 444;
    t.nacute = 500;
    t.umacron = 500;
    t.Ncaron = 722;
    t.Iacute = 333;
    t.plusminus = 564;
    t.brokenbar = 200;
    t.registered = 760;
    t.Gbreve = 722;
    t.Idotaccent = 333;
    t.summation = 600;
    t.Egrave = 611;
    t.racute = 333;
    t.omacron = 500;
    t.Zacute = 611;
    t.Zcaron = 611;
    t.greaterequal = 549;
    t.Eth = 722;
    t.Ccedilla = 667;
    t.lcommaaccent = 278;
    t.tcaron = 326;
    t.eogonek = 444;
    t.Uogonek = 722;
    t.Aacute = 722;
    t.Adieresis = 722;
    t.egrave = 444;
    t.zacute = 444;
    t.iogonek = 278;
    t.Oacute = 722;
    t.oacute = 500;
    t.amacron = 444;
    t.sacute = 389;
    t.idieresis = 278;
    t.Ocircumflex = 722;
    t.Ugrave = 722;
    t.Delta = 612;
    t.thorn = 500;
    t.twosuperior = 300;
    t.Odieresis = 722;
    t.mu = 500;
    t.igrave = 278;
    t.ohungarumlaut = 500;
    t.Eogonek = 611;
    t.dcroat = 500;
    t.threequarters = 750;
    t.Scedilla = 556;
    t.lcaron = 344;
    t.Kcommaaccent = 722;
    t.Lacute = 611;
    t.trademark = 980;
    t.edotaccent = 444;
    t.Igrave = 333;
    t.Imacron = 333;
    t.Lcaron = 611;
    t.onehalf = 750;
    t.lessequal = 549;
    t.ocircumflex = 500;
    t.ntilde = 500;
    t.Uhungarumlaut = 722;
    t.Eacute = 611;
    t.emacron = 444;
    t.gbreve = 500;
    t.onequarter = 750;
    t.Scaron = 556;
    t.Scommaaccent = 556;
    t.Ohungarumlaut = 722;
    t.degree = 400;
    t.ograve = 500;
    t.Ccaron = 667;
    t.ugrave = 500;
    t.radical = 453;
    t.Dcaron = 722;
    t.rcommaaccent = 333;
    t.Ntilde = 722;
    t.otilde = 500;
    t.Rcommaaccent = 667;
    t.Lcommaaccent = 611;
    t.Atilde = 722;
    t.Aogonek = 722;
    t.Aring = 722;
    t.Otilde = 722;
    t.zdotaccent = 444;
    t.Ecaron = 611;
    t.Iogonek = 333;
    t.kcommaaccent = 500;
    t.minus = 564;
    t.Icircumflex = 333;
    t.ncaron = 500;
    t.tcommaaccent = 278;
    t.logicalnot = 564;
    t.odieresis = 500;
    t.udieresis = 500;
    t.notequal = 549;
    t.gcommaaccent = 500;
    t.eth = 500;
    t.zcaron = 444;
    t.ncommaaccent = 500;
    t.onesuperior = 300;
    t.imacron = 278;
    t.Euro = 500;
  });
  t["Times-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) {
    t.space = 250;
    t.exclam = 333;
    t.quotedbl = 555;
    t.numbersign = 500;
    t.dollar = 500;
    t.percent = 1000;
    t.ampersand = 833;
    t.quoteright = 333;
    t.parenleft = 333;
    t.parenright = 333;
    t.asterisk = 500;
    t.plus = 570;
    t.comma = 250;
    t.hyphen = 333;
    t.period = 250;
    t.slash = 278;
    t.zero = 500;
    t.one = 500;
    t.two = 500;
    t.three = 500;
    t.four = 500;
    t.five = 500;
    t.six = 500;
    t.seven = 500;
    t.eight = 500;
    t.nine = 500;
    t.colon = 333;
    t.semicolon = 333;
    t.less = 570;
    t.equal = 570;
    t.greater = 570;
    t.question = 500;
    t.at = 930;
    t.A = 722;
    t.B = 667;
    t.C = 722;
    t.D = 722;
    t.E = 667;
    t.F = 611;
    t.G = 778;
    t.H = 778;
    t.I = 389;
    t.J = 500;
    t.K = 778;
    t.L = 667;
    t.M = 944;
    t.N = 722;
    t.O = 778;
    t.P = 611;
    t.Q = 778;
    t.R = 722;
    t.S = 556;
    t.T = 667;
    t.U = 722;
    t.V = 722;
    t.W = 1000;
    t.X = 722;
    t.Y = 722;
    t.Z = 667;
    t.bracketleft = 333;
    t.backslash = 278;
    t.bracketright = 333;
    t.asciicircum = 581;
    t.underscore = 500;
    t.quoteleft = 333;
    t.a = 500;
    t.b = 556;
    t.c = 444;
    t.d = 556;
    t.e = 444;
    t.f = 333;
    t.g = 500;
    t.h = 556;
    t.i = 278;
    t.j = 333;
    t.k = 556;
    t.l = 278;
    t.m = 833;
    t.n = 556;
    t.o = 500;
    t.p = 556;
    t.q = 556;
    t.r = 444;
    t.s = 389;
    t.t = 333;
    t.u = 556;
    t.v = 500;
    t.w = 722;
    t.x = 500;
    t.y = 500;
    t.z = 444;
    t.braceleft = 394;
    t.bar = 220;
    t.braceright = 394;
    t.asciitilde = 520;
    t.exclamdown = 333;
    t.cent = 500;
    t.sterling = 500;
    t.fraction = 167;
    t.yen = 500;
    t.florin = 500;
    t.section = 500;
    t.currency = 500;
    t.quotesingle = 278;
    t.quotedblleft = 500;
    t.guillemotleft = 500;
    t.guilsinglleft = 333;
    t.guilsinglright = 333;
    t.fi = 556;
    t.fl = 556;
    t.endash = 500;
    t.dagger = 500;
    t.daggerdbl = 500;
    t.periodcentered = 250;
    t.paragraph = 540;
    t.bullet = 350;
    t.quotesinglbase = 333;
    t.quotedblbase = 500;
    t.quotedblright = 500;
    t.guillemotright = 500;
    t.ellipsis = 1000;
    t.perthousand = 1000;
    t.questiondown = 500;
    t.grave = 333;
    t.acute = 333;
    t.circumflex = 333;
    t.tilde = 333;
    t.macron = 333;
    t.breve = 333;
    t.dotaccent = 333;
    t.dieresis = 333;
    t.ring = 333;
    t.cedilla = 333;
    t.hungarumlaut = 333;
    t.ogonek = 333;
    t.caron = 333;
    t.emdash = 1000;
    t.AE = 1000;
    t.ordfeminine = 300;
    t.Lslash = 667;
    t.Oslash = 778;
    t.OE = 1000;
    t.ordmasculine = 330;
    t.ae = 722;
    t.dotlessi = 278;
    t.lslash = 278;
    t.oslash = 500;
    t.oe = 722;
    t.germandbls = 556;
    t.Idieresis = 389;
    t.eacute = 444;
    t.abreve = 500;
    t.uhungarumlaut = 556;
    t.ecaron = 444;
    t.Ydieresis = 722;
    t.divide = 570;
    t.Yacute = 722;
    t.Acircumflex = 722;
    t.aacute = 500;
    t.Ucircumflex = 722;
    t.yacute = 500;
    t.scommaaccent = 389;
    t.ecircumflex = 444;
    t.Uring = 722;
    t.Udieresis = 722;
    t.aogonek = 500;
    t.Uacute = 722;
    t.uogonek = 556;
    t.Edieresis = 667;
    t.Dcroat = 722;
    t.commaaccent = 250;
    t.copyright = 747;
    t.Emacron = 667;
    t.ccaron = 444;
    t.aring = 500;
    t.Ncommaaccent = 722;
    t.lacute = 278;
    t.agrave = 500;
    t.Tcommaaccent = 667;
    t.Cacute = 722;
    t.atilde = 500;
    t.Edotaccent = 667;
    t.scaron = 389;
    t.scedilla = 389;
    t.iacute = 278;
    t.lozenge = 494;
    t.Rcaron = 722;
    t.Gcommaaccent = 778;
    t.ucircumflex = 556;
    t.acircumflex = 500;
    t.Amacron = 722;
    t.rcaron = 444;
    t.ccedilla = 444;
    t.Zdotaccent = 667;
    t.Thorn = 611;
    t.Omacron = 778;
    t.Racute = 722;
    t.Sacute = 556;
    t.dcaron = 672;
    t.Umacron = 722;
    t.uring = 556;
    t.threesuperior = 300;
    t.Ograve = 778;
    t.Agrave = 722;
    t.Abreve = 722;
    t.multiply = 570;
    t.uacute = 556;
    t.Tcaron = 667;
    t.partialdiff = 494;
    t.ydieresis = 500;
    t.Nacute = 722;
    t.icircumflex = 278;
    t.Ecircumflex = 667;
    t.adieresis = 500;
    t.edieresis = 444;
    t.cacute = 444;
    t.nacute = 556;
    t.umacron = 556;
    t.Ncaron = 722;
    t.Iacute = 389;
    t.plusminus = 570;
    t.brokenbar = 220;
    t.registered = 747;
    t.Gbreve = 778;
    t.Idotaccent = 389;
    t.summation = 600;
    t.Egrave = 667;
    t.racute = 444;
    t.omacron = 500;
    t.Zacute = 667;
    t.Zcaron = 667;
    t.greaterequal = 549;
    t.Eth = 722;
    t.Ccedilla = 722;
    t.lcommaaccent = 278;
    t.tcaron = 416;
    t.eogonek = 444;
    t.Uogonek = 722;
    t.Aacute = 722;
    t.Adieresis = 722;
    t.egrave = 444;
    t.zacute = 444;
    t.iogonek = 278;
    t.Oacute = 778;
    t.oacute = 500;
    t.amacron = 500;
    t.sacute = 389;
    t.idieresis = 278;
    t.Ocircumflex = 778;
    t.Ugrave = 722;
    t.Delta = 612;
    t.thorn = 556;
    t.twosuperior = 300;
    t.Odieresis = 778;
    t.mu = 556;
    t.igrave = 278;
    t.ohungarumlaut = 500;
    t.Eogonek = 667;
    t.dcroat = 556;
    t.threequarters = 750;
    t.Scedilla = 556;
    t.lcaron = 394;
    t.Kcommaaccent = 778;
    t.Lacute = 667;
    t.trademark = 1000;
    t.edotaccent = 444;
    t.Igrave = 389;
    t.Imacron = 389;
    t.Lcaron = 667;
    t.onehalf = 750;
    t.lessequal = 549;
    t.ocircumflex = 500;
    t.ntilde = 556;
    t.Uhungarumlaut = 722;
    t.Eacute = 667;
    t.emacron = 444;
    t.gbreve = 500;
    t.onequarter = 750;
    t.Scaron = 556;
    t.Scommaaccent = 556;
    t.Ohungarumlaut = 778;
    t.degree = 400;
    t.ograve = 500;
    t.Ccaron = 722;
    t.ugrave = 556;
    t.radical = 549;
    t.Dcaron = 722;
    t.rcommaaccent = 444;
    t.Ntilde = 722;
    t.otilde = 500;
    t.Rcommaaccent = 722;
    t.Lcommaaccent = 667;
    t.Atilde = 722;
    t.Aogonek = 722;
    t.Aring = 722;
    t.Otilde = 778;
    t.zdotaccent = 444;
    t.Ecaron = 667;
    t.Iogonek = 389;
    t.kcommaaccent = 556;
    t.minus = 570;
    t.Icircumflex = 389;
    t.ncaron = 556;
    t.tcommaaccent = 333;
    t.logicalnot = 570;
    t.odieresis = 500;
    t.udieresis = 556;
    t.notequal = 549;
    t.gcommaaccent = 500;
    t.eth = 500;
    t.zcaron = 444;
    t.ncommaaccent = 556;
    t.onesuperior = 300;
    t.imacron = 278;
    t.Euro = 500;
  });
  t["Times-BoldItalic"] = (0, _core_utils.getLookupTableFactory)(function (t) {
    t.space = 250;
    t.exclam = 389;
    t.quotedbl = 555;
    t.numbersign = 500;
    t.dollar = 500;
    t.percent = 833;
    t.ampersand = 778;
    t.quoteright = 333;
    t.parenleft = 333;
    t.parenright = 333;
    t.asterisk = 500;
    t.plus = 570;
    t.comma = 250;
    t.hyphen = 333;
    t.period = 250;
    t.slash = 278;
    t.zero = 500;
    t.one = 500;
    t.two = 500;
    t.three = 500;
    t.four = 500;
    t.five = 500;
    t.six = 500;
    t.seven = 500;
    t.eight = 500;
    t.nine = 500;
    t.colon = 333;
    t.semicolon = 333;
    t.less = 570;
    t.equal = 570;
    t.greater = 570;
    t.question = 500;
    t.at = 832;
    t.A = 667;
    t.B = 667;
    t.C = 667;
    t.D = 722;
    t.E = 667;
    t.F = 667;
    t.G = 722;
    t.H = 778;
    t.I = 389;
    t.J = 500;
    t.K = 667;
    t.L = 611;
    t.M = 889;
    t.N = 722;
    t.O = 722;
    t.P = 611;
    t.Q = 722;
    t.R = 667;
    t.S = 556;
    t.T = 611;
    t.U = 722;
    t.V = 667;
    t.W = 889;
    t.X = 667;
    t.Y = 611;
    t.Z = 611;
    t.bracketleft = 333;
    t.backslash = 278;
    t.bracketright = 333;
    t.asciicircum = 570;
    t.underscore = 500;
    t.quoteleft = 333;
    t.a = 500;
    t.b = 500;
    t.c = 444;
    t.d = 500;
    t.e = 444;
    t.f = 333;
    t.g = 500;
    t.h = 556;
    t.i = 278;
    t.j = 278;
    t.k = 500;
    t.l = 278;
    t.m = 778;
    t.n = 556;
    t.o = 500;
    t.p = 500;
    t.q = 500;
    t.r = 389;
    t.s = 389;
    t.t = 278;
    t.u = 556;
    t.v = 444;
    t.w = 667;
    t.x = 500;
    t.y = 444;
    t.z = 389;
    t.braceleft = 348;
    t.bar = 220;
    t.braceright = 348;
    t.asciitilde = 570;
    t.exclamdown = 389;
    t.cent = 500;
    t.sterling = 500;
    t.fraction = 167;
    t.yen = 500;
    t.florin = 500;
    t.section = 500;
    t.currency = 500;
    t.quotesingle = 278;
    t.quotedblleft = 500;
    t.guillemotleft = 500;
    t.guilsinglleft = 333;
    t.guilsinglright = 333;
    t.fi = 556;
    t.fl = 556;
    t.endash = 500;
    t.dagger = 500;
    t.daggerdbl = 500;
    t.periodcentered = 250;
    t.paragraph = 500;
    t.bullet = 350;
    t.quotesinglbase = 333;
    t.quotedblbase = 500;
    t.quotedblright = 500;
    t.guillemotright = 500;
    t.ellipsis = 1000;
    t.perthousand = 1000;
    t.questiondown = 500;
    t.grave = 333;
    t.acute = 333;
    t.circumflex = 333;
    t.tilde = 333;
    t.macron = 333;
    t.breve = 333;
    t.dotaccent = 333;
    t.dieresis = 333;
    t.ring = 333;
    t.cedilla = 333;
    t.hungarumlaut = 333;
    t.ogonek = 333;
    t.caron = 333;
    t.emdash = 1000;
    t.AE = 944;
    t.ordfeminine = 266;
    t.Lslash = 611;
    t.Oslash = 722;
    t.OE = 944;
    t.ordmasculine = 300;
    t.ae = 722;
    t.dotlessi = 278;
    t.lslash = 278;
    t.oslash = 500;
    t.oe = 722;
    t.germandbls = 500;
    t.Idieresis = 389;
    t.eacute = 444;
    t.abreve = 500;
    t.uhungarumlaut = 556;
    t.ecaron = 444;
    t.Ydieresis = 611;
    t.divide = 570;
    t.Yacute = 611;
    t.Acircumflex = 667;
    t.aacute = 500;
    t.Ucircumflex = 722;
    t.yacute = 444;
    t.scommaaccent = 389;
    t.ecircumflex = 444;
    t.Uring = 722;
    t.Udieresis = 722;
    t.aogonek = 500;
    t.Uacute = 722;
    t.uogonek = 556;
    t.Edieresis = 667;
    t.Dcroat = 722;
    t.commaaccent = 250;
    t.copyright = 747;
    t.Emacron = 667;
    t.ccaron = 444;
    t.aring = 500;
    t.Ncommaaccent = 722;
    t.lacute = 278;
    t.agrave = 500;
    t.Tcommaaccent = 611;
    t.Cacute = 667;
    t.atilde = 500;
    t.Edotaccent = 667;
    t.scaron = 389;
    t.scedilla = 389;
    t.iacute = 278;
    t.lozenge = 494;
    t.Rcaron = 667;
    t.Gcommaaccent = 722;
    t.ucircumflex = 556;
    t.acircumflex = 500;
    t.Amacron = 667;
    t.rcaron = 389;
    t.ccedilla = 444;
    t.Zdotaccent = 611;
    t.Thorn = 611;
    t.Omacron = 722;
    t.Racute = 667;
    t.Sacute = 556;
    t.dcaron = 608;
    t.Umacron = 722;
    t.uring = 556;
    t.threesuperior = 300;
    t.Ograve = 722;
    t.Agrave = 667;
    t.Abreve = 667;
    t.multiply = 570;
    t.uacute = 556;
    t.Tcaron = 611;
    t.partialdiff = 494;
    t.ydieresis = 444;
    t.Nacute = 722;
    t.icircumflex = 278;
    t.Ecircumflex = 667;
    t.adieresis = 500;
    t.edieresis = 444;
    t.cacute = 444;
    t.nacute = 556;
    t.umacron = 556;
    t.Ncaron = 722;
    t.Iacute = 389;
    t.plusminus = 570;
    t.brokenbar = 220;
    t.registered = 747;
    t.Gbreve = 722;
    t.Idotaccent = 389;
    t.summation = 600;
    t.Egrave = 667;
    t.racute = 389;
    t.omacron = 500;
    t.Zacute = 611;
    t.Zcaron = 611;
    t.greaterequal = 549;
    t.Eth = 722;
    t.Ccedilla = 667;
    t.lcommaaccent = 278;
    t.tcaron = 366;
    t.eogonek = 444;
    t.Uogonek = 722;
    t.Aacute = 667;
    t.Adieresis = 667;
    t.egrave = 444;
    t.zacute = 389;
    t.iogonek = 278;
    t.Oacute = 722;
    t.oacute = 500;
    t.amacron = 500;
    t.sacute = 389;
    t.idieresis = 278;
    t.Ocircumflex = 722;
    t.Ugrave = 722;
    t.Delta = 612;
    t.thorn = 500;
    t.twosuperior = 300;
    t.Odieresis = 722;
    t.mu = 576;
    t.igrave = 278;
    t.ohungarumlaut = 500;
    t.Eogonek = 667;
    t.dcroat = 500;
    t.threequarters = 750;
    t.Scedilla = 556;
    t.lcaron = 382;
    t.Kcommaaccent = 667;
    t.Lacute = 611;
    t.trademark = 1000;
    t.edotaccent = 444;
    t.Igrave = 389;
    t.Imacron = 389;
    t.Lcaron = 611;
    t.onehalf = 750;
    t.lessequal = 549;
    t.ocircumflex = 500;
    t.ntilde = 556;
    t.Uhungarumlaut = 722;
    t.Eacute = 667;
    t.emacron = 444;
    t.gbreve = 500;
    t.onequarter = 750;
    t.Scaron = 556;
    t.Scommaaccent = 556;
    t.Ohungarumlaut = 722;
    t.degree = 400;
    t.ograve = 500;
    t.Ccaron = 667;
    t.ugrave = 556;
    t.radical = 549;
    t.Dcaron = 722;
    t.rcommaaccent = 389;
    t.Ntilde = 722;
    t.otilde = 500;
    t.Rcommaaccent = 667;
    t.Lcommaaccent = 611;
    t.Atilde = 667;
    t.Aogonek = 667;
    t.Aring = 667;
    t.Otilde = 722;
    t.zdotaccent = 389;
    t.Ecaron = 667;
    t.Iogonek = 389;
    t.kcommaaccent = 500;
    t.minus = 606;
    t.Icircumflex = 389;
    t.ncaron = 556;
    t.tcommaaccent = 278;
    t.logicalnot = 606;
    t.odieresis = 500;
    t.udieresis = 556;
    t.notequal = 549;
    t.gcommaaccent = 500;
    t.eth = 500;
    t.zcaron = 389;
    t.ncommaaccent = 556;
    t.onesuperior = 300;
    t.imacron = 278;
    t.Euro = 500;
  });
  t["Times-Italic"] = (0, _core_utils.getLookupTableFactory)(function (t) {
    t.space = 250;
    t.exclam = 333;
    t.quotedbl = 420;
    t.numbersign = 500;
    t.dollar = 500;
    t.percent = 833;
    t.ampersand = 778;
    t.quoteright = 333;
    t.parenleft = 333;
    t.parenright = 333;
    t.asterisk = 500;
    t.plus = 675;
    t.comma = 250;
    t.hyphen = 333;
    t.period = 250;
    t.slash = 278;
    t.zero = 500;
    t.one = 500;
    t.two = 500;
    t.three = 500;
    t.four = 500;
    t.five = 500;
    t.six = 500;
    t.seven = 500;
    t.eight = 500;
    t.nine = 500;
    t.colon = 333;
    t.semicolon = 333;
    t.less = 675;
    t.equal = 675;
    t.greater = 675;
    t.question = 500;
    t.at = 920;
    t.A = 611;
    t.B = 611;
    t.C = 667;
    t.D = 722;
    t.E = 611;
    t.F = 611;
    t.G = 722;
    t.H = 722;
    t.I = 333;
    t.J = 444;
    t.K = 667;
    t.L = 556;
    t.M = 833;
    t.N = 667;
    t.O = 722;
    t.P = 611;
    t.Q = 722;
    t.R = 611;
    t.S = 500;
    t.T = 556;
    t.U = 722;
    t.V = 611;
    t.W = 833;
    t.X = 611;
    t.Y = 556;
    t.Z = 556;
    t.bracketleft = 389;
    t.backslash = 278;
    t.bracketright = 389;
    t.asciicircum = 422;
    t.underscore = 500;
    t.quoteleft = 333;
    t.a = 500;
    t.b = 500;
    t.c = 444;
    t.d = 500;
    t.e = 444;
    t.f = 278;
    t.g = 500;
    t.h = 500;
    t.i = 278;
    t.j = 278;
    t.k = 444;
    t.l = 278;
    t.m = 722;
    t.n = 500;
    t.o = 500;
    t.p = 500;
    t.q = 500;
    t.r = 389;
    t.s = 389;
    t.t = 278;
    t.u = 500;
    t.v = 444;
    t.w = 667;
    t.x = 444;
    t.y = 444;
    t.z = 389;
    t.braceleft = 400;
    t.bar = 275;
    t.braceright = 400;
    t.asciitilde = 541;
    t.exclamdown = 389;
    t.cent = 500;
    t.sterling = 500;
    t.fraction = 167;
    t.yen = 500;
    t.florin = 500;
    t.section = 500;
    t.currency = 500;
    t.quotesingle = 214;
    t.quotedblleft = 556;
    t.guillemotleft = 500;
    t.guilsinglleft = 333;
    t.guilsinglright = 333;
    t.fi = 500;
    t.fl = 500;
    t.endash = 500;
    t.dagger = 500;
    t.daggerdbl = 500;
    t.periodcentered = 250;
    t.paragraph = 523;
    t.bullet = 350;
    t.quotesinglbase = 333;
    t.quotedblbase = 556;
    t.quotedblright = 556;
    t.guillemotright = 500;
    t.ellipsis = 889;
    t.perthousand = 1000;
    t.questiondown = 500;
    t.grave = 333;
    t.acute = 333;
    t.circumflex = 333;
    t.tilde = 333;
    t.macron = 333;
    t.breve = 333;
    t.dotaccent = 333;
    t.dieresis = 333;
    t.ring = 333;
    t.cedilla = 333;
    t.hungarumlaut = 333;
    t.ogonek = 333;
    t.caron = 333;
    t.emdash = 889;
    t.AE = 889;
    t.ordfeminine = 276;
    t.Lslash = 556;
    t.Oslash = 722;
    t.OE = 944;
    t.ordmasculine = 310;
    t.ae = 667;
    t.dotlessi = 278;
    t.lslash = 278;
    t.oslash = 500;
    t.oe = 667;
    t.germandbls = 500;
    t.Idieresis = 333;
    t.eacute = 444;
    t.abreve = 500;
    t.uhungarumlaut = 500;
    t.ecaron = 444;
    t.Ydieresis = 556;
    t.divide = 675;
    t.Yacute = 556;
    t.Acircumflex = 611;
    t.aacute = 500;
    t.Ucircumflex = 722;
    t.yacute = 444;
    t.scommaaccent = 389;
    t.ecircumflex = 444;
    t.Uring = 722;
    t.Udieresis = 722;
    t.aogonek = 500;
    t.Uacute = 722;
    t.uogonek = 500;
    t.Edieresis = 611;
    t.Dcroat = 722;
    t.commaaccent = 250;
    t.copyright = 760;
    t.Emacron = 611;
    t.ccaron = 444;
    t.aring = 500;
    t.Ncommaaccent = 667;
    t.lacute = 278;
    t.agrave = 500;
    t.Tcommaaccent = 556;
    t.Cacute = 667;
    t.atilde = 500;
    t.Edotaccent = 611;
    t.scaron = 389;
    t.scedilla = 389;
    t.iacute = 278;
    t.lozenge = 471;
    t.Rcaron = 611;
    t.Gcommaaccent = 722;
    t.ucircumflex = 500;
    t.acircumflex = 500;
    t.Amacron = 611;
    t.rcaron = 389;
    t.ccedilla = 444;
    t.Zdotaccent = 556;
    t.Thorn = 611;
    t.Omacron = 722;
    t.Racute = 611;
    t.Sacute = 500;
    t.dcaron = 544;
    t.Umacron = 722;
    t.uring = 500;
    t.threesuperior = 300;
    t.Ograve = 722;
    t.Agrave = 611;
    t.Abreve = 611;
    t.multiply = 675;
    t.uacute = 500;
    t.Tcaron = 556;
    t.partialdiff = 476;
    t.ydieresis = 444;
    t.Nacute = 667;
    t.icircumflex = 278;
    t.Ecircumflex = 611;
    t.adieresis = 500;
    t.edieresis = 444;
    t.cacute = 444;
    t.nacute = 500;
    t.umacron = 500;
    t.Ncaron = 667;
    t.Iacute = 333;
    t.plusminus = 675;
    t.brokenbar = 275;
    t.registered = 760;
    t.Gbreve = 722;
    t.Idotaccent = 333;
    t.summation = 600;
    t.Egrave = 611;
    t.racute = 389;
    t.omacron = 500;
    t.Zacute = 556;
    t.Zcaron = 556;
    t.greaterequal = 549;
    t.Eth = 722;
    t.Ccedilla = 667;
    t.lcommaaccent = 278;
    t.tcaron = 300;
    t.eogonek = 444;
    t.Uogonek = 722;
    t.Aacute = 611;
    t.Adieresis = 611;
    t.egrave = 444;
    t.zacute = 389;
    t.iogonek = 278;
    t.Oacute = 722;
    t.oacute = 500;
    t.amacron = 500;
    t.sacute = 389;
    t.idieresis = 278;
    t.Ocircumflex = 722;
    t.Ugrave = 722;
    t.Delta = 612;
    t.thorn = 500;
    t.twosuperior = 300;
    t.Odieresis = 722;
    t.mu = 500;
    t.igrave = 278;
    t.ohungarumlaut = 500;
    t.Eogonek = 611;
    t.dcroat = 500;
    t.threequarters = 750;
    t.Scedilla = 500;
    t.lcaron = 300;
    t.Kcommaaccent = 667;
    t.Lacute = 556;
    t.trademark = 980;
    t.edotaccent = 444;
    t.Igrave = 333;
    t.Imacron = 333;
    t.Lcaron = 611;
    t.onehalf = 750;
    t.lessequal = 549;
    t.ocircumflex = 500;
    t.ntilde = 500;
    t.Uhungarumlaut = 722;
    t.Eacute = 611;
    t.emacron = 444;
    t.gbreve = 500;
    t.onequarter = 750;
    t.Scaron = 500;
    t.Scommaaccent = 500;
    t.Ohungarumlaut = 722;
    t.degree = 400;
    t.ograve = 500;
    t.Ccaron = 667;
    t.ugrave = 500;
    t.radical = 453;
    t.Dcaron = 722;
    t.rcommaaccent = 389;
    t.Ntilde = 667;
    t.otilde = 500;
    t.Rcommaaccent = 611;
    t.Lcommaaccent = 556;
    t.Atilde = 611;
    t.Aogonek = 611;
    t.Aring = 611;
    t.Otilde = 722;
    t.zdotaccent = 389;
    t.Ecaron = 611;
    t.Iogonek = 333;
    t.kcommaaccent = 444;
    t.minus = 675;
    t.Icircumflex = 333;
    t.ncaron = 500;
    t.tcommaaccent = 278;
    t.logicalnot = 675;
    t.odieresis = 500;
    t.udieresis = 500;
    t.notequal = 549;
    t.gcommaaccent = 500;
    t.eth = 500;
    t.zcaron = 389;
    t.ncommaaccent = 500;
    t.onesuperior = 300;
    t.imacron = 278;
    t.Euro = 500;
  });
  t.ZapfDingbats = (0, _core_utils.getLookupTableFactory)(function (t) {
    t.space = 278;
    t.a1 = 974;
    t.a2 = 961;
    t.a202 = 974;
    t.a3 = 980;
    t.a4 = 719;
    t.a5 = 789;
    t.a119 = 790;
    t.a118 = 791;
    t.a117 = 690;
    t.a11 = 960;
    t.a12 = 939;
    t.a13 = 549;
    t.a14 = 855;
    t.a15 = 911;
    t.a16 = 933;
    t.a105 = 911;
    t.a17 = 945;
    t.a18 = 974;
    t.a19 = 755;
    t.a20 = 846;
    t.a21 = 762;
    t.a22 = 761;
    t.a23 = 571;
    t.a24 = 677;
    t.a25 = 763;
    t.a26 = 760;
    t.a27 = 759;
    t.a28 = 754;
    t.a6 = 494;
    t.a7 = 552;
    t.a8 = 537;
    t.a9 = 577;
    t.a10 = 692;
    t.a29 = 786;
    t.a30 = 788;
    t.a31 = 788;
    t.a32 = 790;
    t.a33 = 793;
    t.a34 = 794;
    t.a35 = 816;
    t.a36 = 823;
    t.a37 = 789;
    t.a38 = 841;
    t.a39 = 823;
    t.a40 = 833;
    t.a41 = 816;
    t.a42 = 831;
    t.a43 = 923;
    t.a44 = 744;
    t.a45 = 723;
    t.a46 = 749;
    t.a47 = 790;
    t.a48 = 792;
    t.a49 = 695;
    t.a50 = 776;
    t.a51 = 768;
    t.a52 = 792;
    t.a53 = 759;
    t.a54 = 707;
    t.a55 = 708;
    t.a56 = 682;
    t.a57 = 701;
    t.a58 = 826;
    t.a59 = 815;
    t.a60 = 789;
    t.a61 = 789;
    t.a62 = 707;
    t.a63 = 687;
    t.a64 = 696;
    t.a65 = 689;
    t.a66 = 786;
    t.a67 = 787;
    t.a68 = 713;
    t.a69 = 791;
    t.a70 = 785;
    t.a71 = 791;
    t.a72 = 873;
    t.a73 = 761;
    t.a74 = 762;
    t.a203 = 762;
    t.a75 = 759;
    t.a204 = 759;
    t.a76 = 892;
    t.a77 = 892;
    t.a78 = 788;
    t.a79 = 784;
    t.a81 = 438;
    t.a82 = 138;
    t.a83 = 277;
    t.a84 = 415;
    t.a97 = 392;
    t.a98 = 392;
    t.a99 = 668;
    t.a100 = 668;
    t.a89 = 390;
    t.a90 = 390;
    t.a93 = 317;
    t.a94 = 317;
    t.a91 = 276;
    t.a92 = 276;
    t.a205 = 509;
    t.a85 = 509;
    t.a206 = 410;
    t.a86 = 410;
    t.a87 = 234;
    t.a88 = 234;
    t.a95 = 334;
    t.a96 = 334;
    t.a101 = 732;
    t.a102 = 544;
    t.a103 = 544;
    t.a104 = 910;
    t.a106 = 667;
    t.a107 = 760;
    t.a108 = 760;
    t.a112 = 776;
    t.a111 = 595;
    t.a110 = 694;
    t.a109 = 626;
    t.a120 = 788;
    t.a121 = 788;
    t.a122 = 788;
    t.a123 = 788;
    t.a124 = 788;
    t.a125 = 788;
    t.a126 = 788;
    t.a127 = 788;
    t.a128 = 788;
    t.a129 = 788;
    t.a130 = 788;
    t.a131 = 788;
    t.a132 = 788;
    t.a133 = 788;
    t.a134 = 788;
    t.a135 = 788;
    t.a136 = 788;
    t.a137 = 788;
    t.a138 = 788;
    t.a139 = 788;
    t.a140 = 788;
    t.a141 = 788;
    t.a142 = 788;
    t.a143 = 788;
    t.a144 = 788;
    t.a145 = 788;
    t.a146 = 788;
    t.a147 = 788;
    t.a148 = 788;
    t.a149 = 788;
    t.a150 = 788;
    t.a151 = 788;
    t.a152 = 788;
    t.a153 = 788;
    t.a154 = 788;
    t.a155 = 788;
    t.a156 = 788;
    t.a157 = 788;
    t.a158 = 788;
    t.a159 = 788;
    t.a160 = 894;
    t.a161 = 838;
    t.a163 = 1016;
    t.a164 = 458;
    t.a196 = 748;
    t.a165 = 924;
    t.a192 = 748;
    t.a166 = 918;
    t.a167 = 927;
    t.a168 = 928;
    t.a169 = 928;
    t.a170 = 834;
    t.a171 = 873;
    t.a172 = 828;
    t.a173 = 924;
    t.a162 = 924;
    t.a174 = 917;
    t.a175 = 930;
    t.a176 = 931;
    t.a177 = 463;
    t.a178 = 883;
    t.a179 = 836;
    t.a193 = 836;
    t.a180 = 867;
    t.a199 = 867;
    t.a181 = 696;
    t.a200 = 696;
    t.a182 = 874;
    t.a201 = 874;
    t.a183 = 760;
    t.a184 = 946;
    t.a197 = 771;
    t.a185 = 865;
    t.a194 = 771;
    t.a198 = 888;
    t.a186 = 967;
    t.a195 = 888;
    t.a187 = 831;
    t.a188 = 873;
    t.a189 = 927;
    t.a190 = 970;
    t.a191 = 918;
  });
});
exports.getMetrics = getMetrics;
const getFontBasicMetrics = (0, _core_utils.getLookupTableFactory)(function (t) {
  t.Courier = {
    ascent: 629,
    descent: -157,
    capHeight: 562,
    xHeight: -426
  };
  t["Courier-Bold"] = {
    ascent: 629,
    descent: -157,
    capHeight: 562,
    xHeight: 439
  };
  t["Courier-Oblique"] = {
    ascent: 629,
    descent: -157,
    capHeight: 562,
    xHeight: 426
  };
  t["Courier-BoldOblique"] = {
    ascent: 629,
    descent: -157,
    capHeight: 562,
    xHeight: 426
  };
  t.Helvetica = {
    ascent: 718,
    descent: -207,
    capHeight: 718,
    xHeight: 523
  };
  t["Helvetica-Bold"] = {
    ascent: 718,
    descent: -207,
    capHeight: 718,
    xHeight: 532
  };
  t["Helvetica-Oblique"] = {
    ascent: 718,
    descent: -207,
    capHeight: 718,
    xHeight: 523
  };
  t["Helvetica-BoldOblique"] = {
    ascent: 718,
    descent: -207,
    capHeight: 718,
    xHeight: 532
  };
  t["Times-Roman"] = {
    ascent: 683,
    descent: -217,
    capHeight: 662,
    xHeight: 450
  };
  t["Times-Bold"] = {
    ascent: 683,
    descent: -217,
    capHeight: 676,
    xHeight: 461
  };
  t["Times-Italic"] = {
    ascent: 683,
    descent: -217,
    capHeight: 653,
    xHeight: 441
  };
  t["Times-BoldItalic"] = {
    ascent: 683,
    descent: -217,
    capHeight: 669,
    xHeight: 462
  };
  t.Symbol = {
    ascent: Math.NaN,
    descent: Math.NaN,
    capHeight: Math.NaN,
    xHeight: Math.NaN
  };
  t.ZapfDingbats = {
    ascent: Math.NaN,
    descent: Math.NaN,
    capHeight: Math.NaN,
    xHeight: Math.NaN
  };
});
exports.getFontBasicMetrics = getFontBasicMetrics;

/***/ }),
/* 46 */
/***/ ((__unused_webpack_module, exports) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.GlyfTable = void 0;
const ON_CURVE_POINT = 1 << 0;
const X_SHORT_VECTOR = 1 << 1;
const Y_SHORT_VECTOR = 1 << 2;
const REPEAT_FLAG = 1 << 3;
const X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR = 1 << 4;
const Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR = 1 << 5;
const OVERLAP_SIMPLE = 1 << 6;
const ARG_1_AND_2_ARE_WORDS = 1 << 0;
const ARGS_ARE_XY_VALUES = 1 << 1;
const WE_HAVE_A_SCALE = 1 << 3;
const MORE_COMPONENTS = 1 << 5;
const WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;
const WE_HAVE_A_TWO_BY_TWO = 1 << 7;
const WE_HAVE_INSTRUCTIONS = 1 << 8;
class GlyfTable {
  constructor({
    glyfTable,
    isGlyphLocationsLong,
    locaTable,
    numGlyphs
  }) {
    this.glyphs = [];
    const loca = new DataView(locaTable.buffer, locaTable.byteOffset, locaTable.byteLength);
    const glyf = new DataView(glyfTable.buffer, glyfTable.byteOffset, glyfTable.byteLength);
    const offsetSize = isGlyphLocationsLong ? 4 : 2;
    let prev = isGlyphLocationsLong ? loca.getUint32(0) : 2 * loca.getUint16(0);
    let pos = 0;
    for (let i = 0; i < numGlyphs; i++) {
      pos += offsetSize;
      const next = isGlyphLocationsLong ? loca.getUint32(pos) : 2 * loca.getUint16(pos);
      if (next === prev) {
        this.glyphs.push(new Glyph({}));
        continue;
      }
      const glyph = Glyph.parse(prev, glyf);
      this.glyphs.push(glyph);
      prev = next;
    }
  }
  getSize() {
    return this.glyphs.reduce((a, g) => {
      const size = g.getSize();
      return a + (size + 3 & ~3);
    }, 0);
  }
  write() {
    const totalSize = this.getSize();
    const glyfTable = new DataView(new ArrayBuffer(totalSize));
    const isLocationLong = totalSize > 0x1fffe;
    const offsetSize = isLocationLong ? 4 : 2;
    const locaTable = new DataView(new ArrayBuffer((this.glyphs.length + 1) * offsetSize));
    if (isLocationLong) {
      locaTable.setUint32(0, 0);
    } else {
      locaTable.setUint16(0, 0);
    }
    let pos = 0;
    let locaIndex = 0;
    for (const glyph of this.glyphs) {
      pos += glyph.write(pos, glyfTable);
      pos = pos + 3 & ~3;
      locaIndex += offsetSize;
      if (isLocationLong) {
        locaTable.setUint32(locaIndex, pos);
      } else {
        locaTable.setUint16(locaIndex, pos >> 1);
      }
    }
    return {
      isLocationLong,
      loca: new Uint8Array(locaTable.buffer),
      glyf: new Uint8Array(glyfTable.buffer)
    };
  }
  scale(factors) {
    for (let i = 0, ii = this.glyphs.length; i < ii; i++) {
      this.glyphs[i].scale(factors[i]);
    }
  }
}
exports.GlyfTable = GlyfTable;
class Glyph {
  constructor({
    header = null,
    simple = null,
    composites = null
  }) {
    this.header = header;
    this.simple = simple;
    this.composites = composites;
  }
  static parse(pos, glyf) {
    const [read, header] = GlyphHeader.parse(pos, glyf);
    pos += read;
    if (header.numberOfContours < 0) {
      const composites = [];
      while (true) {
        const [n, composite] = CompositeGlyph.parse(pos, glyf);
        pos += n;
        composites.push(composite);
        if (!(composite.flags & MORE_COMPONENTS)) {
          break;
        }
      }
      return new Glyph({
        header,
        composites
      });
    }
    const simple = SimpleGlyph.parse(pos, glyf, header.numberOfContours);
    return new Glyph({
      header,
      simple
    });
  }
  getSize() {
    if (!this.header) {
      return 0;
    }
    const size = this.simple ? this.simple.getSize() : this.composites.reduce((a, c) => a + c.getSize(), 0);
    return this.header.getSize() + size;
  }
  write(pos, buf) {
    if (!this.header) {
      return 0;
    }
    const spos = pos;
    pos += this.header.write(pos, buf);
    if (this.simple) {
      pos += this.simple.write(pos, buf);
    } else {
      for (const composite of this.composites) {
        pos += composite.write(pos, buf);
      }
    }
    return pos - spos;
  }
  scale(factor) {
    if (!this.header) {
      return;
    }
    const xMiddle = (this.header.xMin + this.header.xMax) / 2;
    this.header.scale(xMiddle, factor);
    if (this.simple) {
      this.simple.scale(xMiddle, factor);
    } else {
      for (const composite of this.composites) {
        composite.scale(xMiddle, factor);
      }
    }
  }
}
class GlyphHeader {
  constructor({
    numberOfContours,
    xMin,
    yMin,
    xMax,
    yMax
  }) {
    this.numberOfContours = numberOfContours;
    this.xMin = xMin;
    this.yMin = yMin;
    this.xMax = xMax;
    this.yMax = yMax;
  }
  static parse(pos, glyf) {
    return [10, new GlyphHeader({
      numberOfContours: glyf.getInt16(pos),
      xMin: glyf.getInt16(pos + 2),
      yMin: glyf.getInt16(pos + 4),
      xMax: glyf.getInt16(pos + 6),
      yMax: glyf.getInt16(pos + 8)
    })];
  }
  getSize() {
    return 10;
  }
  write(pos, buf) {
    buf.setInt16(pos, this.numberOfContours);
    buf.setInt16(pos + 2, this.xMin);
    buf.setInt16(pos + 4, this.yMin);
    buf.setInt16(pos + 6, this.xMax);
    buf.setInt16(pos + 8, this.yMax);
    return 10;
  }
  scale(x, factor) {
    this.xMin = Math.round(x + (this.xMin - x) * factor);
    this.xMax = Math.round(x + (this.xMax - x) * factor);
  }
}
class Contour {
  constructor({
    flags,
    xCoordinates,
    yCoordinates
  }) {
    this.xCoordinates = xCoordinates;
    this.yCoordinates = yCoordinates;
    this.flags = flags;
  }
}
class SimpleGlyph {
  constructor({
    contours,
    instructions
  }) {
    this.contours = contours;
    this.instructions = instructions;
  }
  static parse(pos, glyf, numberOfContours) {
    const endPtsOfContours = [];
    for (let i = 0; i < numberOfContours; i++) {
      const endPt = glyf.getUint16(pos);
      pos += 2;
      endPtsOfContours.push(endPt);
    }
    const numberOfPt = endPtsOfContours[numberOfContours - 1] + 1;
    const instructionLength = glyf.getUint16(pos);
    pos += 2;
    const instructions = new Uint8Array(glyf).slice(pos, pos + instructionLength);
    pos += instructionLength;
    const flags = [];
    for (let i = 0; i < numberOfPt; pos++, i++) {
      let flag = glyf.getUint8(pos);
      flags.push(flag);
      if (flag & REPEAT_FLAG) {
        const count = glyf.getUint8(++pos);
        flag ^= REPEAT_FLAG;
        for (let m = 0; m < count; m++) {
          flags.push(flag);
        }
        i += count;
      }
    }
    const allXCoordinates = [];
    let xCoordinates = [];
    let yCoordinates = [];
    let pointFlags = [];
    const contours = [];
    let endPtsOfContoursIndex = 0;
    let lastCoordinate = 0;
    for (let i = 0; i < numberOfPt; i++) {
      const flag = flags[i];
      if (flag & X_SHORT_VECTOR) {
        const x = glyf.getUint8(pos++);
        lastCoordinate += flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR ? x : -x;
        xCoordinates.push(lastCoordinate);
      } else if (flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR) {
        xCoordinates.push(lastCoordinate);
      } else {
        lastCoordinate += glyf.getInt16(pos);
        pos += 2;
        xCoordinates.push(lastCoordinate);
      }
      if (endPtsOfContours[endPtsOfContoursIndex] === i) {
        endPtsOfContoursIndex++;
        allXCoordinates.push(xCoordinates);
        xCoordinates = [];
      }
    }
    lastCoordinate = 0;
    endPtsOfContoursIndex = 0;
    for (let i = 0; i < numberOfPt; i++) {
      const flag = flags[i];
      if (flag & Y_SHORT_VECTOR) {
        const y = glyf.getUint8(pos++);
        lastCoordinate += flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR ? y : -y;
        yCoordinates.push(lastCoordinate);
      } else if (flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR) {
        yCoordinates.push(lastCoordinate);
      } else {
        lastCoordinate += glyf.getInt16(pos);
        pos += 2;
        yCoordinates.push(lastCoordinate);
      }
      pointFlags.push(flag & ON_CURVE_POINT | flag & OVERLAP_SIMPLE);
      if (endPtsOfContours[endPtsOfContoursIndex] === i) {
        xCoordinates = allXCoordinates[endPtsOfContoursIndex];
        endPtsOfContoursIndex++;
        contours.push(new Contour({
          flags: pointFlags,
          xCoordinates,
          yCoordinates
        }));
        yCoordinates = [];
        pointFlags = [];
      }
    }
    return new SimpleGlyph({
      contours,
      instructions
    });
  }
  getSize() {
    let size = this.contours.length * 2 + 2 + this.instructions.length;
    let lastX = 0;
    let lastY = 0;
    for (const contour of this.contours) {
      size += contour.flags.length;
      for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) {
        const x = contour.xCoordinates[i];
        const y = contour.yCoordinates[i];
        let abs = Math.abs(x - lastX);
        if (abs > 255) {
          size += 2;
        } else if (abs > 0) {
          size += 1;
        }
        lastX = x;
        abs = Math.abs(y - lastY);
        if (abs > 255) {
          size += 2;
        } else if (abs > 0) {
          size += 1;
        }
        lastY = y;
      }
    }
    return size;
  }
  write(pos, buf) {
    const spos = pos;
    const xCoordinates = [];
    const yCoordinates = [];
    const flags = [];
    let lastX = 0;
    let lastY = 0;
    for (const contour of this.contours) {
      for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) {
        let flag = contour.flags[i];
        const x = contour.xCoordinates[i];
        let delta = x - lastX;
        if (delta === 0) {
          flag |= X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR;
          xCoordinates.push(0);
        } else {
          const abs = Math.abs(delta);
          if (abs <= 255) {
            flag |= delta >= 0 ? X_SHORT_VECTOR | X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR : X_SHORT_VECTOR;
            xCoordinates.push(abs);
          } else {
            xCoordinates.push(delta);
          }
        }
        lastX = x;
        const y = contour.yCoordinates[i];
        delta = y - lastY;
        if (delta === 0) {
          flag |= Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR;
          yCoordinates.push(0);
        } else {
          const abs = Math.abs(delta);
          if (abs <= 255) {
            flag |= delta >= 0 ? Y_SHORT_VECTOR | Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR : Y_SHORT_VECTOR;
            yCoordinates.push(abs);
          } else {
            yCoordinates.push(delta);
          }
        }
        lastY = y;
        flags.push(flag);
      }
      buf.setUint16(pos, xCoordinates.length - 1);
      pos += 2;
    }
    buf.setUint16(pos, this.instructions.length);
    pos += 2;
    if (this.instructions.length) {
      new Uint8Array(buf.buffer, 0, buf.buffer.byteLength).set(this.instructions, pos);
      pos += this.instructions.length;
    }
    for (const flag of flags) {
      buf.setUint8(pos++, flag);
    }
    for (let i = 0, ii = xCoordinates.length; i < ii; i++) {
      const x = xCoordinates[i];
      const flag = flags[i];
      if (flag & X_SHORT_VECTOR) {
        buf.setUint8(pos++, x);
      } else if (!(flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR)) {
        buf.setInt16(pos, x);
        pos += 2;
      }
    }
    for (let i = 0, ii = yCoordinates.length; i < ii; i++) {
      const y = yCoordinates[i];
      const flag = flags[i];
      if (flag & Y_SHORT_VECTOR) {
        buf.setUint8(pos++, y);
      } else if (!(flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR)) {
        buf.setInt16(pos, y);
        pos += 2;
      }
    }
    return pos - spos;
  }
  scale(x, factor) {
    for (const contour of this.contours) {
      if (contour.xCoordinates.length === 0) {
        continue;
      }
      for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) {
        contour.xCoordinates[i] = Math.round(x + (contour.xCoordinates[i] - x) * factor);
      }
    }
  }
}
class CompositeGlyph {
  constructor({
    flags,
    glyphIndex,
    argument1,
    argument2,
    transf,
    instructions
  }) {
    this.flags = flags;
    this.glyphIndex = glyphIndex;
    this.argument1 = argument1;
    this.argument2 = argument2;
    this.transf = transf;
    this.instructions = instructions;
  }
  static parse(pos, glyf) {
    const spos = pos;
    const transf = [];
    let flags = glyf.getUint16(pos);
    const glyphIndex = glyf.getUint16(pos + 2);
    pos += 4;
    let argument1, argument2;
    if (flags & ARG_1_AND_2_ARE_WORDS) {
      if (flags & ARGS_ARE_XY_VALUES) {
        argument1 = glyf.getInt16(pos);
        argument2 = glyf.getInt16(pos + 2);
      } else {
        argument1 = glyf.getUint16(pos);
        argument2 = glyf.getUint16(pos + 2);
      }
      pos += 4;
      flags ^= ARG_1_AND_2_ARE_WORDS;
    } else {
      if (flags & ARGS_ARE_XY_VALUES) {
        argument1 = glyf.getInt8(pos);
        argument2 = glyf.getInt8(pos + 1);
      } else {
        argument1 = glyf.getUint8(pos);
        argument2 = glyf.getUint8(pos + 1);
      }
      pos += 2;
    }
    if (flags & WE_HAVE_A_SCALE) {
      transf.push(glyf.getUint16(pos));
      pos += 2;
    } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {
      transf.push(glyf.getUint16(pos), glyf.getUint16(pos + 2));
      pos += 4;
    } else if (flags & WE_HAVE_A_TWO_BY_TWO) {
      transf.push(glyf.getUint16(pos), glyf.getUint16(pos + 2), glyf.getUint16(pos + 4), glyf.getUint16(pos + 6));
      pos += 8;
    }
    let instructions = null;
    if (flags & WE_HAVE_INSTRUCTIONS) {
      const instructionLength = glyf.getUint16(pos);
      pos += 2;
      instructions = new Uint8Array(glyf).slice(pos, pos + instructionLength);
      pos += instructionLength;
    }
    return [pos - spos, new CompositeGlyph({
      flags,
      glyphIndex,
      argument1,
      argument2,
      transf,
      instructions
    })];
  }
  getSize() {
    let size = 2 + 2 + this.transf.length * 2;
    if (this.flags & WE_HAVE_INSTRUCTIONS) {
      size += 2 + this.instructions.length;
    }
    size += 2;
    if (this.flags & 2) {
      if (!(this.argument1 >= -128 && this.argument1 <= 127 && this.argument2 >= -128 && this.argument2 <= 127)) {
        size += 2;
      }
    } else if (!(this.argument1 >= 0 && this.argument1 <= 255 && this.argument2 >= 0 && this.argument2 <= 255)) {
      size += 2;
    }
    return size;
  }
  write(pos, buf) {
    const spos = pos;
    if (this.flags & ARGS_ARE_XY_VALUES) {
      if (!(this.argument1 >= -128 && this.argument1 <= 127 && this.argument2 >= -128 && this.argument2 <= 127)) {
        this.flags |= ARG_1_AND_2_ARE_WORDS;
      }
    } else if (!(this.argument1 >= 0 && this.argument1 <= 255 && this.argument2 >= 0 && this.argument2 <= 255)) {
      this.flags |= ARG_1_AND_2_ARE_WORDS;
    }
    buf.setUint16(pos, this.flags);
    buf.setUint16(pos + 2, this.glyphIndex);
    pos += 4;
    if (this.flags & ARG_1_AND_2_ARE_WORDS) {
      if (this.flags & ARGS_ARE_XY_VALUES) {
        buf.setInt16(pos, this.argument1);
        buf.setInt16(pos + 2, this.argument2);
      } else {
        buf.setUint16(pos, this.argument1);
        buf.setUint16(pos + 2, this.argument2);
      }
      pos += 4;
    } else {
      buf.setUint8(pos, this.argument1);
      buf.setUint8(pos + 1, this.argument2);
      pos += 2;
    }
    if (this.flags & WE_HAVE_INSTRUCTIONS) {
      buf.setUint16(pos, this.instructions.length);
      pos += 2;
      if (this.instructions.length) {
        new Uint8Array(buf.buffer, 0, buf.buffer.byteLength).set(this.instructions, pos);
        pos += this.instructions.length;
      }
    }
    return pos - spos;
  }
  scale(x, factor) {}
}

/***/ }),
/* 47 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.OpenTypeFileBuilder = void 0;
var _core_utils = __w_pdfjs_require__(3);
var _util = __w_pdfjs_require__(2);
function writeInt16(dest, offset, num) {
  dest[offset] = num >> 8 & 0xff;
  dest[offset + 1] = num & 0xff;
}
function writeInt32(dest, offset, num) {
  dest[offset] = num >> 24 & 0xff;
  dest[offset + 1] = num >> 16 & 0xff;
  dest[offset + 2] = num >> 8 & 0xff;
  dest[offset + 3] = num & 0xff;
}
function writeData(dest, offset, data) {
  if (data instanceof Uint8Array) {
    dest.set(data, offset);
  } else if (typeof data === "string") {
    for (let i = 0, ii = data.length; i < ii; i++) {
      dest[offset++] = data.charCodeAt(i) & 0xff;
    }
  } else {
    for (const num of data) {
      dest[offset++] = num & 0xff;
    }
  }
}
const OTF_HEADER_SIZE = 12;
const OTF_TABLE_ENTRY_SIZE = 16;
class OpenTypeFileBuilder {
  constructor(sfnt) {
    this.sfnt = sfnt;
    this.tables = Object.create(null);
  }
  static getSearchParams(entriesCount, entrySize) {
    let maxPower2 = 1,
      log2 = 0;
    while ((maxPower2 ^ entriesCount) > maxPower2) {
      maxPower2 <<= 1;
      log2++;
    }
    const searchRange = maxPower2 * entrySize;
    return {
      range: searchRange,
      entry: log2,
      rangeShift: entrySize * entriesCount - searchRange
    };
  }
  toArray() {
    let sfnt = this.sfnt;
    const tables = this.tables;
    const tablesNames = Object.keys(tables);
    tablesNames.sort();
    const numTables = tablesNames.length;
    let i, j, jj, table, tableName;
    let offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE;
    const tableOffsets = [offset];
    for (i = 0; i < numTables; i++) {
      table = tables[tablesNames[i]];
      const paddedLength = (table.length + 3 & ~3) >>> 0;
      offset += paddedLength;
      tableOffsets.push(offset);
    }
    const file = new Uint8Array(offset);
    for (i = 0; i < numTables; i++) {
      table = tables[tablesNames[i]];
      writeData(file, tableOffsets[i], table);
    }
    if (sfnt === "true") {
      sfnt = (0, _util.string32)(0x00010000);
    }
    file[0] = sfnt.charCodeAt(0) & 0xff;
    file[1] = sfnt.charCodeAt(1) & 0xff;
    file[2] = sfnt.charCodeAt(2) & 0xff;
    file[3] = sfnt.charCodeAt(3) & 0xff;
    writeInt16(file, 4, numTables);
    const searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16);
    writeInt16(file, 6, searchParams.range);
    writeInt16(file, 8, searchParams.entry);
    writeInt16(file, 10, searchParams.rangeShift);
    offset = OTF_HEADER_SIZE;
    for (i = 0; i < numTables; i++) {
      tableName = tablesNames[i];
      file[offset] = tableName.charCodeAt(0) & 0xff;
      file[offset + 1] = tableName.charCodeAt(1) & 0xff;
      file[offset + 2] = tableName.charCodeAt(2) & 0xff;
      file[offset + 3] = tableName.charCodeAt(3) & 0xff;
      let checksum = 0;
      for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) {
        const quad = (0, _core_utils.readUint32)(file, j);
        checksum = checksum + quad >>> 0;
      }
      writeInt32(file, offset + 4, checksum);
      writeInt32(file, offset + 8, tableOffsets[i]);
      writeInt32(file, offset + 12, tables[tableName].length);
      offset += OTF_TABLE_ENTRY_SIZE;
    }
    return file;
  }
  addTable(tag, data) {
    if (tag in this.tables) {
      throw new Error("Table " + tag + " already exists");
    }
    this.tables[tag] = data;
  }
}
exports.OpenTypeFileBuilder = OpenTypeFileBuilder;

/***/ }),
/* 48 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.Type1Font = void 0;
var _cff_parser = __w_pdfjs_require__(35);
var _util = __w_pdfjs_require__(2);
var _fonts_utils = __w_pdfjs_require__(38);
var _core_utils = __w_pdfjs_require__(3);
var _stream = __w_pdfjs_require__(8);
var _type1_parser = __w_pdfjs_require__(49);
function findBlock(streamBytes, signature, startIndex) {
  const streamBytesLength = streamBytes.length;
  const signatureLength = signature.length;
  const scanLength = streamBytesLength - signatureLength;
  let i = startIndex,
    found = false;
  while (i < scanLength) {
    let j = 0;
    while (j < signatureLength && streamBytes[i + j] === signature[j]) {
      j++;
    }
    if (j >= signatureLength) {
      i += j;
      while (i < streamBytesLength && (0, _core_utils.isWhiteSpace)(streamBytes[i])) {
        i++;
      }
      found = true;
      break;
    }
    i++;
  }
  return {
    found,
    length: i
  };
}
function getHeaderBlock(stream, suggestedLength) {
  const EEXEC_SIGNATURE = [0x65, 0x65, 0x78, 0x65, 0x63];
  const streamStartPos = stream.pos;
  let headerBytes, headerBytesLength, block;
  try {
    headerBytes = stream.getBytes(suggestedLength);
    headerBytesLength = headerBytes.length;
  } catch {}
  if (headerBytesLength === suggestedLength) {
    block = findBlock(headerBytes, EEXEC_SIGNATURE, suggestedLength - 2 * EEXEC_SIGNATURE.length);
    if (block.found && block.length === suggestedLength) {
      return {
        stream: new _stream.Stream(headerBytes),
        length: suggestedLength
      };
    }
  }
  (0, _util.warn)('Invalid "Length1" property in Type1 font -- trying to recover.');
  stream.pos = streamStartPos;
  const SCAN_BLOCK_LENGTH = 2048;
  let actualLength;
  while (true) {
    const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);
    block = findBlock(scanBytes, EEXEC_SIGNATURE, 0);
    if (block.length === 0) {
      break;
    }
    stream.pos += block.length;
    if (block.found) {
      actualLength = stream.pos - streamStartPos;
      break;
    }
  }
  stream.pos = streamStartPos;
  if (actualLength) {
    return {
      stream: new _stream.Stream(stream.getBytes(actualLength)),
      length: actualLength
    };
  }
  (0, _util.warn)('Unable to recover "Length1" property in Type1 font -- using as is.');
  return {
    stream: new _stream.Stream(stream.getBytes(suggestedLength)),
    length: suggestedLength
  };
}
function getEexecBlock(stream, suggestedLength) {
  const eexecBytes = stream.getBytes();
  if (eexecBytes.length === 0) {
    throw new _util.FormatError("getEexecBlock - no font program found.");
  }
  return {
    stream: new _stream.Stream(eexecBytes),
    length: eexecBytes.length
  };
}
class Type1Font {
  constructor(name, file, properties) {
    const PFB_HEADER_SIZE = 6;
    let headerBlockLength = properties.length1;
    let eexecBlockLength = properties.length2;
    let pfbHeader = file.peekBytes(PFB_HEADER_SIZE);
    const pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01;
    if (pfbHeaderPresent) {
      file.skip(PFB_HEADER_SIZE);
      headerBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2];
    }
    const headerBlock = getHeaderBlock(file, headerBlockLength);
    const headerBlockParser = new _type1_parser.Type1Parser(headerBlock.stream, false, _fonts_utils.SEAC_ANALYSIS_ENABLED);
    headerBlockParser.extractFontHeader(properties);
    if (pfbHeaderPresent) {
      pfbHeader = file.getBytes(PFB_HEADER_SIZE);
      eexecBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2];
    }
    const eexecBlock = getEexecBlock(file, eexecBlockLength);
    const eexecBlockParser = new _type1_parser.Type1Parser(eexecBlock.stream, true, _fonts_utils.SEAC_ANALYSIS_ENABLED);
    const data = eexecBlockParser.extractFontProgram(properties);
    for (const key in data.properties) {
      properties[key] = data.properties[key];
    }
    const charstrings = data.charstrings;
    const type2Charstrings = this.getType2Charstrings(charstrings);
    const subrs = this.getType2Subrs(data.subrs);
    this.charstrings = charstrings;
    this.data = this.wrap(name, type2Charstrings, this.charstrings, subrs, properties);
    this.seacs = this.getSeacs(data.charstrings);
  }
  get numGlyphs() {
    return this.charstrings.length + 1;
  }
  getCharset() {
    const charset = [".notdef"];
    for (const {
      glyphName
    } of this.charstrings) {
      charset.push(glyphName);
    }
    return charset;
  }
  getGlyphMapping(properties) {
    const charstrings = this.charstrings;
    if (properties.composite) {
      const charCodeToGlyphId = Object.create(null);
      for (let glyphId = 0, charstringsLen = charstrings.length; glyphId < charstringsLen; glyphId++) {
        const charCode = properties.cMap.charCodeOf(glyphId);
        charCodeToGlyphId[charCode] = glyphId + 1;
      }
      return charCodeToGlyphId;
    }
    const glyphNames = [".notdef"];
    let builtInEncoding, glyphId;
    for (glyphId = 0; glyphId < charstrings.length; glyphId++) {
      glyphNames.push(charstrings[glyphId].glyphName);
    }
    const encoding = properties.builtInEncoding;
    if (encoding) {
      builtInEncoding = Object.create(null);
      for (const charCode in encoding) {
        glyphId = glyphNames.indexOf(encoding[charCode]);
        if (glyphId >= 0) {
          builtInEncoding[charCode] = glyphId;
        }
      }
    }
    return (0, _fonts_utils.type1FontGlyphMapping)(properties, builtInEncoding, glyphNames);
  }
  hasGlyphId(id) {
    if (id < 0 || id >= this.numGlyphs) {
      return false;
    }
    if (id === 0) {
      return true;
    }
    const glyph = this.charstrings[id - 1];
    return glyph.charstring.length > 0;
  }
  getSeacs(charstrings) {
    const seacMap = [];
    for (let i = 0, ii = charstrings.length; i < ii; i++) {
      const charstring = charstrings[i];
      if (charstring.seac) {
        seacMap[i + 1] = charstring.seac;
      }
    }
    return seacMap;
  }
  getType2Charstrings(type1Charstrings) {
    const type2Charstrings = [];
    for (const type1Charstring of type1Charstrings) {
      type2Charstrings.push(type1Charstring.charstring);
    }
    return type2Charstrings;
  }
  getType2Subrs(type1Subrs) {
    let bias = 0;
    const count = type1Subrs.length;
    if (count < 1133) {
      bias = 107;
    } else if (count < 33769) {
      bias = 1131;
    } else {
      bias = 32768;
    }
    const type2Subrs = [];
    let i;
    for (i = 0; i < bias; i++) {
      type2Subrs.push([0x0b]);
    }
    for (i = 0; i < count; i++) {
      type2Subrs.push(type1Subrs[i]);
    }
    return type2Subrs;
  }
  wrap(name, glyphs, charstrings, subrs, properties) {
    const cff = new _cff_parser.CFF();
    cff.header = new _cff_parser.CFFHeader(1, 0, 4, 4);
    cff.names = [name];
    const topDict = new _cff_parser.CFFTopDict();
    topDict.setByName("version", 391);
    topDict.setByName("Notice", 392);
    topDict.setByName("FullName", 393);
    topDict.setByName("FamilyName", 394);
    topDict.setByName("Weight", 395);
    topDict.setByName("Encoding", null);
    topDict.setByName("FontMatrix", properties.fontMatrix);
    topDict.setByName("FontBBox", properties.bbox);
    topDict.setByName("charset", null);
    topDict.setByName("CharStrings", null);
    topDict.setByName("Private", null);
    cff.topDict = topDict;
    const strings = new _cff_parser.CFFStrings();
    strings.add("Version 0.11");
    strings.add("See original notice");
    strings.add(name);
    strings.add(name);
    strings.add("Medium");
    cff.strings = strings;
    cff.globalSubrIndex = new _cff_parser.CFFIndex();
    const count = glyphs.length;
    const charsetArray = [".notdef"];
    let i, ii;
    for (i = 0; i < count; i++) {
      const glyphName = charstrings[i].glyphName;
      const index = _cff_parser.CFFStandardStrings.indexOf(glyphName);
      if (index === -1) {
        strings.add(glyphName);
      }
      charsetArray.push(glyphName);
    }
    cff.charset = new _cff_parser.CFFCharset(false, 0, charsetArray);
    const charStringsIndex = new _cff_parser.CFFIndex();
    charStringsIndex.add([0x8b, 0x0e]);
    for (i = 0; i < count; i++) {
      charStringsIndex.add(glyphs[i]);
    }
    cff.charStrings = charStringsIndex;
    const privateDict = new _cff_parser.CFFPrivateDict();
    privateDict.setByName("Subrs", null);
    const fields = ["BlueValues", "OtherBlues", "FamilyBlues", "FamilyOtherBlues", "StemSnapH", "StemSnapV", "BlueShift", "BlueFuzz", "BlueScale", "LanguageGroup", "ExpansionFactor", "ForceBold", "StdHW", "StdVW"];
    for (i = 0, ii = fields.length; i < ii; i++) {
      const field = fields[i];
      if (!(field in properties.privateData)) {
        continue;
      }
      const value = properties.privateData[field];
      if (Array.isArray(value)) {
        for (let j = value.length - 1; j > 0; j--) {
          value[j] -= value[j - 1];
        }
      }
      privateDict.setByName(field, value);
    }
    cff.topDict.privateDict = privateDict;
    const subrIndex = new _cff_parser.CFFIndex();
    for (i = 0, ii = subrs.length; i < ii; i++) {
      subrIndex.add(subrs[i]);
    }
    privateDict.subrsIndex = subrIndex;
    const compiler = new _cff_parser.CFFCompiler(cff);
    return compiler.compile();
  }
}
exports.Type1Font = Type1Font;

/***/ }),
/* 49 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.Type1Parser = void 0;
var _encodings = __w_pdfjs_require__(37);
var _core_utils = __w_pdfjs_require__(3);
var _stream = __w_pdfjs_require__(8);
var _util = __w_pdfjs_require__(2);
const HINTING_ENABLED = false;
const COMMAND_MAP = {
  hstem: [1],
  vstem: [3],
  vmoveto: [4],
  rlineto: [5],
  hlineto: [6],
  vlineto: [7],
  rrcurveto: [8],
  callsubr: [10],
  flex: [12, 35],
  drop: [12, 18],
  endchar: [14],
  rmoveto: [21],
  hmoveto: [22],
  vhcurveto: [30],
  hvcurveto: [31]
};
class Type1CharString {
  constructor() {
    this.width = 0;
    this.lsb = 0;
    this.flexing = false;
    this.output = [];
    this.stack = [];
  }
  convert(encoded, subrs, seacAnalysisEnabled) {
    const count = encoded.length;
    let error = false;
    let wx, sbx, subrNumber;
    for (let i = 0; i < count; i++) {
      let value = encoded[i];
      if (value < 32) {
        if (value === 12) {
          value = (value << 8) + encoded[++i];
        }
        switch (value) {
          case 1:
            if (!HINTING_ENABLED) {
              this.stack = [];
              break;
            }
            error = this.executeCommand(2, COMMAND_MAP.hstem);
            break;
          case 3:
            if (!HINTING_ENABLED) {
              this.stack = [];
              break;
            }
            error = this.executeCommand(2, COMMAND_MAP.vstem);
            break;
          case 4:
            if (this.flexing) {
              if (this.stack.length < 1) {
                error = true;
                break;
              }
              const dy = this.stack.pop();
              this.stack.push(0, dy);
              break;
            }
            error = this.executeCommand(1, COMMAND_MAP.vmoveto);
            break;
          case 5:
            error = this.executeCommand(2, COMMAND_MAP.rlineto);
            break;
          case 6:
            error = this.executeCommand(1, COMMAND_MAP.hlineto);
            break;
          case 7:
            error = this.executeCommand(1, COMMAND_MAP.vlineto);
            break;
          case 8:
            error = this.executeCommand(6, COMMAND_MAP.rrcurveto);
            break;
          case 9:
            this.stack = [];
            break;
          case 10:
            if (this.stack.length < 1) {
              error = true;
              break;
            }
            subrNumber = this.stack.pop();
            if (!subrs[subrNumber]) {
              error = true;
              break;
            }
            error = this.convert(subrs[subrNumber], subrs, seacAnalysisEnabled);
            break;
          case 11:
            return error;
          case 13:
            if (this.stack.length < 2) {
              error = true;
              break;
            }
            wx = this.stack.pop();
            sbx = this.stack.pop();
            this.lsb = sbx;
            this.width = wx;
            this.stack.push(wx, sbx);
            error = this.executeCommand(2, COMMAND_MAP.hmoveto);
            break;
          case 14:
            this.output.push(COMMAND_MAP.endchar[0]);
            break;
          case 21:
            if (this.flexing) {
              break;
            }
            error = this.executeCommand(2, COMMAND_MAP.rmoveto);
            break;
          case 22:
            if (this.flexing) {
              this.stack.push(0);
              break;
            }
            error = this.executeCommand(1, COMMAND_MAP.hmoveto);
            break;
          case 30:
            error = this.executeCommand(4, COMMAND_MAP.vhcurveto);
            break;
          case 31:
            error = this.executeCommand(4, COMMAND_MAP.hvcurveto);
            break;
          case (12 << 8) + 0:
            this.stack = [];
            break;
          case (12 << 8) + 1:
            if (!HINTING_ENABLED) {
              this.stack = [];
              break;
            }
            error = this.executeCommand(2, COMMAND_MAP.vstem);
            break;
          case (12 << 8) + 2:
            if (!HINTING_ENABLED) {
              this.stack = [];
              break;
            }
            error = this.executeCommand(2, COMMAND_MAP.hstem);
            break;
          case (12 << 8) + 6:
            if (seacAnalysisEnabled) {
              const asb = this.stack.at(-5);
              this.seac = this.stack.splice(-4, 4);
              this.seac[0] += this.lsb - asb;
              error = this.executeCommand(0, COMMAND_MAP.endchar);
            } else {
              error = this.executeCommand(4, COMMAND_MAP.endchar);
            }
            break;
          case (12 << 8) + 7:
            if (this.stack.length < 4) {
              error = true;
              break;
            }
            this.stack.pop();
            wx = this.stack.pop();
            const sby = this.stack.pop();
            sbx = this.stack.pop();
            this.lsb = sbx;
            this.width = wx;
            this.stack.push(wx, sbx, sby);
            error = this.executeCommand(3, COMMAND_MAP.rmoveto);
            break;
          case (12 << 8) + 12:
            if (this.stack.length < 2) {
              error = true;
              break;
            }
            const num2 = this.stack.pop();
            const num1 = this.stack.pop();
            this.stack.push(num1 / num2);
            break;
          case (12 << 8) + 16:
            if (this.stack.length < 2) {
              error = true;
              break;
            }
            subrNumber = this.stack.pop();
            const numArgs = this.stack.pop();
            if (subrNumber === 0 && numArgs === 3) {
              const flexArgs = this.stack.splice(-17, 17);
              this.stack.push(flexArgs[2] + flexArgs[0], flexArgs[3] + flexArgs[1], flexArgs[4], flexArgs[5], flexArgs[6], flexArgs[7], flexArgs[8], flexArgs[9], flexArgs[10], flexArgs[11], flexArgs[12], flexArgs[13], flexArgs[14]);
              error = this.executeCommand(13, COMMAND_MAP.flex, true);
              this.flexing = false;
              this.stack.push(flexArgs[15], flexArgs[16]);
            } else if (subrNumber === 1 && numArgs === 0) {
              this.flexing = true;
            }
            break;
          case (12 << 8) + 17:
            break;
          case (12 << 8) + 33:
            this.stack = [];
            break;
          default:
            (0, _util.warn)('Unknown type 1 charstring command of "' + value + '"');
            break;
        }
        if (error) {
          break;
        }
        continue;
      } else if (value <= 246) {
        value -= 139;
      } else if (value <= 250) {
        value = (value - 247) * 256 + encoded[++i] + 108;
      } else if (value <= 254) {
        value = -((value - 251) * 256) - encoded[++i] - 108;
      } else {
        value = (encoded[++i] & 0xff) << 24 | (encoded[++i] & 0xff) << 16 | (encoded[++i] & 0xff) << 8 | (encoded[++i] & 0xff) << 0;
      }
      this.stack.push(value);
    }
    return error;
  }
  executeCommand(howManyArgs, command, keepStack) {
    const stackLength = this.stack.length;
    if (howManyArgs > stackLength) {
      return true;
    }
    const start = stackLength - howManyArgs;
    for (let i = start; i < stackLength; i++) {
      let value = this.stack[i];
      if (Number.isInteger(value)) {
        this.output.push(28, value >> 8 & 0xff, value & 0xff);
      } else {
        value = 65536 * value | 0;
        this.output.push(255, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
      }
    }
    this.output.push(...command);
    if (keepStack) {
      this.stack.splice(start, howManyArgs);
    } else {
      this.stack.length = 0;
    }
    return false;
  }
}
const EEXEC_ENCRYPT_KEY = 55665;
const CHAR_STRS_ENCRYPT_KEY = 4330;
function isHexDigit(code) {
  return code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102;
}
function decrypt(data, key, discardNumber) {
  if (discardNumber >= data.length) {
    return new Uint8Array(0);
  }
  const c1 = 52845,
    c2 = 22719;
  let r = key | 0,
    i,
    j;
  for (i = 0; i < discardNumber; i++) {
    r = (data[i] + r) * c1 + c2 & (1 << 16) - 1;
  }
  const count = data.length - discardNumber;
  const decrypted = new Uint8Array(count);
  for (i = discardNumber, j = 0; j < count; i++, j++) {
    const value = data[i];
    decrypted[j] = value ^ r >> 8;
    r = (value + r) * c1 + c2 & (1 << 16) - 1;
  }
  return decrypted;
}
function decryptAscii(data, key, discardNumber) {
  const c1 = 52845,
    c2 = 22719;
  let r = key | 0;
  const count = data.length,
    maybeLength = count >>> 1;
  const decrypted = new Uint8Array(maybeLength);
  let i, j;
  for (i = 0, j = 0; i < count; i++) {
    const digit1 = data[i];
    if (!isHexDigit(digit1)) {
      continue;
    }
    i++;
    let digit2;
    while (i < count && !isHexDigit(digit2 = data[i])) {
      i++;
    }
    if (i < count) {
      const value = parseInt(String.fromCharCode(digit1, digit2), 16);
      decrypted[j++] = value ^ r >> 8;
      r = (value + r) * c1 + c2 & (1 << 16) - 1;
    }
  }
  return decrypted.slice(discardNumber, j);
}
function isSpecial(c) {
  return c === 0x2f || c === 0x5b || c === 0x5d || c === 0x7b || c === 0x7d || c === 0x28 || c === 0x29;
}
class Type1Parser {
  constructor(stream, encrypted, seacAnalysisEnabled) {
    if (encrypted) {
      const data = stream.getBytes();
      const isBinary = !((isHexDigit(data[0]) || (0, _core_utils.isWhiteSpace)(data[0])) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]) && isHexDigit(data[4]) && isHexDigit(data[5]) && isHexDigit(data[6]) && isHexDigit(data[7]));
      stream = new _stream.Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4));
    }
    this.seacAnalysisEnabled = !!seacAnalysisEnabled;
    this.stream = stream;
    this.nextChar();
  }
  readNumberArray() {
    this.getToken();
    const array = [];
    while (true) {
      const token = this.getToken();
      if (token === null || token === "]" || token === "}") {
        break;
      }
      array.push(parseFloat(token || 0));
    }
    return array;
  }
  readNumber() {
    const token = this.getToken();
    return parseFloat(token || 0);
  }
  readInt() {
    const token = this.getToken();
    return parseInt(token || 0, 10) | 0;
  }
  readBoolean() {
    const token = this.getToken();
    return token === "true" ? 1 : 0;
  }
  nextChar() {
    return this.currentChar = this.stream.getByte();
  }
  prevChar() {
    this.stream.skip(-2);
    return this.currentChar = this.stream.getByte();
  }
  getToken() {
    let comment = false;
    let ch = this.currentChar;
    while (true) {
      if (ch === -1) {
        return null;
      }
      if (comment) {
        if (ch === 0x0a || ch === 0x0d) {
          comment = false;
        }
      } else if (ch === 0x25) {
        comment = true;
      } else if (!(0, _core_utils.isWhiteSpace)(ch)) {
        break;
      }
      ch = this.nextChar();
    }
    if (isSpecial(ch)) {
      this.nextChar();
      return String.fromCharCode(ch);
    }
    let token = "";
    do {
      token += String.fromCharCode(ch);
      ch = this.nextChar();
    } while (ch >= 0 && !(0, _core_utils.isWhiteSpace)(ch) && !isSpecial(ch));
    return token;
  }
  readCharStrings(bytes, lenIV) {
    if (lenIV === -1) {
      return bytes;
    }
    return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV);
  }
  extractFontProgram(properties) {
    const stream = this.stream;
    const subrs = [],
      charstrings = [];
    const privateData = Object.create(null);
    privateData.lenIV = 4;
    const program = {
      subrs: [],
      charstrings: [],
      properties: {
        privateData
      }
    };
    let token, length, data, lenIV;
    while ((token = this.getToken()) !== null) {
      if (token !== "/") {
        continue;
      }
      token = this.getToken();
      switch (token) {
        case "CharStrings":
          this.getToken();
          this.getToken();
          this.getToken();
          this.getToken();
          while (true) {
            token = this.getToken();
            if (token === null || token === "end") {
              break;
            }
            if (token !== "/") {
              continue;
            }
            const glyph = this.getToken();
            length = this.readInt();
            this.getToken();
            data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);
            lenIV = program.properties.privateData.lenIV;
            const encoded = this.readCharStrings(data, lenIV);
            this.nextChar();
            token = this.getToken();
            if (token === "noaccess") {
              this.getToken();
            } else if (token === "/") {
              this.prevChar();
            }
            charstrings.push({
              glyph,
              encoded
            });
          }
          break;
        case "Subrs":
          this.readInt();
          this.getToken();
          while (this.getToken() === "dup") {
            const index = this.readInt();
            length = this.readInt();
            this.getToken();
            data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);
            lenIV = program.properties.privateData.lenIV;
            const encoded = this.readCharStrings(data, lenIV);
            this.nextChar();
            token = this.getToken();
            if (token === "noaccess") {
              this.getToken();
            }
            subrs[index] = encoded;
          }
          break;
        case "BlueValues":
        case "OtherBlues":
        case "FamilyBlues":
        case "FamilyOtherBlues":
          const blueArray = this.readNumberArray();
          if (blueArray.length > 0 && blueArray.length % 2 === 0 && HINTING_ENABLED) {
            program.properties.privateData[token] = blueArray;
          }
          break;
        case "StemSnapH":
        case "StemSnapV":
          program.properties.privateData[token] = this.readNumberArray();
          break;
        case "StdHW":
        case "StdVW":
          program.properties.privateData[token] = this.readNumberArray()[0];
          break;
        case "BlueShift":
        case "lenIV":
        case "BlueFuzz":
        case "BlueScale":
        case "LanguageGroup":
          program.properties.privateData[token] = this.readNumber();
          break;
        case "ExpansionFactor":
          program.properties.privateData[token] = this.readNumber() || 0.06;
          break;
        case "ForceBold":
          program.properties.privateData[token] = this.readBoolean();
          break;
      }
    }
    for (const {
      encoded,
      glyph
    } of charstrings) {
      const charString = new Type1CharString();
      const error = charString.convert(encoded, subrs, this.seacAnalysisEnabled);
      let output = charString.output;
      if (error) {
        output = [14];
      }
      const charStringObject = {
        glyphName: glyph,
        charstring: output,
        width: charString.width,
        lsb: charString.lsb,
        seac: charString.seac
      };
      if (glyph === ".notdef") {
        program.charstrings.unshift(charStringObject);
      } else {
        program.charstrings.push(charStringObject);
      }
      if (properties.builtInEncoding) {
        const index = properties.builtInEncoding.indexOf(glyph);
        if (index > -1 && properties.widths[index] === undefined && index >= properties.firstChar && index <= properties.lastChar) {
          properties.widths[index] = charString.width;
        }
      }
    }
    return program;
  }
  extractFontHeader(properties) {
    let token;
    while ((token = this.getToken()) !== null) {
      if (token !== "/") {
        continue;
      }
      token = this.getToken();
      switch (token) {
        case "FontMatrix":
          const matrix = this.readNumberArray();
          properties.fontMatrix = matrix;
          break;
        case "Encoding":
          const encodingArg = this.getToken();
          let encoding;
          if (!/^\d+$/.test(encodingArg)) {
            encoding = (0, _encodings.getEncoding)(encodingArg);
          } else {
            encoding = [];
            const size = parseInt(encodingArg, 10) | 0;
            this.getToken();
            for (let j = 0; j < size; j++) {
              token = this.getToken();
              while (token !== "dup" && token !== "def") {
                token = this.getToken();
                if (token === null) {
                  return;
                }
              }
              if (token === "def") {
                break;
              }
              const index = this.readInt();
              this.getToken();
              const glyph = this.getToken();
              encoding[index] = glyph;
              this.getToken();
            }
          }
          properties.builtInEncoding = encoding;
          break;
        case "FontBBox":
          const fontBBox = this.readNumberArray();
          properties.ascent = Math.max(fontBBox[3], fontBBox[1]);
          properties.descent = Math.min(fontBBox[1], fontBBox[3]);
          properties.ascentScaled = true;
          break;
      }
    }
  }
}
exports.Type1Parser = Type1Parser;

/***/ }),
/* 50 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.Pattern = void 0;
exports.clearPatternCaches = clearPatternCaches;
exports.getTilingPatternIR = getTilingPatternIR;
var _util = __w_pdfjs_require__(2);
var _base_stream = __w_pdfjs_require__(5);
var _colorspace = __w_pdfjs_require__(12);
var _core_utils = __w_pdfjs_require__(3);
const ShadingType = {
  FUNCTION_BASED: 1,
  AXIAL: 2,
  RADIAL: 3,
  FREE_FORM_MESH: 4,
  LATTICE_FORM_MESH: 5,
  COONS_PATCH_MESH: 6,
  TENSOR_PATCH_MESH: 7
};
class Pattern {
  constructor() {
    (0, _util.unreachable)("Cannot initialize Pattern.");
  }
  static parseShading(shading, xref, res, pdfFunctionFactory, localColorSpaceCache) {
    const dict = shading instanceof _base_stream.BaseStream ? shading.dict : shading;
    const type = dict.get("ShadingType");
    try {
      switch (type) {
        case ShadingType.AXIAL:
        case ShadingType.RADIAL:
          return new RadialAxialShading(dict, xref, res, pdfFunctionFactory, localColorSpaceCache);
        case ShadingType.FREE_FORM_MESH:
        case ShadingType.LATTICE_FORM_MESH:
        case ShadingType.COONS_PATCH_MESH:
        case ShadingType.TENSOR_PATCH_MESH:
          return new MeshShading(shading, xref, res, pdfFunctionFactory, localColorSpaceCache);
        default:
          throw new _util.FormatError("Unsupported ShadingType: " + type);
      }
    } catch (ex) {
      if (ex instanceof _core_utils.MissingDataException) {
        throw ex;
      }
      (0, _util.warn)(ex);
      return new DummyShading();
    }
  }
}
exports.Pattern = Pattern;
class BaseShading {
  static SMALL_NUMBER = 1e-6;
  constructor() {
    if (this.constructor === BaseShading) {
      (0, _util.unreachable)("Cannot initialize BaseShading.");
    }
  }
  getIR() {
    (0, _util.unreachable)("Abstract method `getIR` called.");
  }
}
class RadialAxialShading extends BaseShading {
  constructor(dict, xref, resources, pdfFunctionFactory, localColorSpaceCache) {
    super();
    this.coordsArr = dict.getArray("Coords");
    this.shadingType = dict.get("ShadingType");
    const cs = _colorspace.ColorSpace.parse({
      cs: dict.getRaw("CS") || dict.getRaw("ColorSpace"),
      xref,
      resources,
      pdfFunctionFactory,
      localColorSpaceCache
    });
    const bbox = dict.getArray("BBox");
    this.bbox = Array.isArray(bbox) && bbox.length === 4 ? _util.Util.normalizeRect(bbox) : null;
    let t0 = 0.0,
      t1 = 1.0;
    if (dict.has("Domain")) {
      const domainArr = dict.getArray("Domain");
      t0 = domainArr[0];
      t1 = domainArr[1];
    }
    let extendStart = false,
      extendEnd = false;
    if (dict.has("Extend")) {
      const extendArr = dict.getArray("Extend");
      extendStart = extendArr[0];
      extendEnd = extendArr[1];
    }
    if (this.shadingType === ShadingType.RADIAL && (!extendStart || !extendEnd)) {
      const [x1, y1, r1, x2, y2, r2] = this.coordsArr;
      const distance = Math.hypot(x1 - x2, y1 - y2);
      if (r1 <= r2 + distance && r2 <= r1 + distance) {
        (0, _util.warn)("Unsupported radial gradient.");
      }
    }
    this.extendStart = extendStart;
    this.extendEnd = extendEnd;
    const fnObj = dict.getRaw("Function");
    const fn = pdfFunctionFactory.createFromArray(fnObj);
    const NUMBER_OF_SAMPLES = 840;
    const step = (t1 - t0) / NUMBER_OF_SAMPLES;
    const colorStops = this.colorStops = [];
    if (t0 >= t1 || step <= 0) {
      (0, _util.info)("Bad shading domain.");
      return;
    }
    const color = new Float32Array(cs.numComps),
      ratio = new Float32Array(1);
    let rgbColor;
    let iBase = 0;
    ratio[0] = t0;
    fn(ratio, 0, color, 0);
    let rgbBase = cs.getRgb(color, 0);
    const cssColorBase = _util.Util.makeHexColor(rgbBase[0], rgbBase[1], rgbBase[2]);
    colorStops.push([0, cssColorBase]);
    let iPrev = 1;
    ratio[0] = t0 + step;
    fn(ratio, 0, color, 0);
    let rgbPrev = cs.getRgb(color, 0);
    let maxSlopeR = rgbPrev[0] - rgbBase[0] + 1;
    let maxSlopeG = rgbPrev[1] - rgbBase[1] + 1;
    let maxSlopeB = rgbPrev[2] - rgbBase[2] + 1;
    let minSlopeR = rgbPrev[0] - rgbBase[0] - 1;
    let minSlopeG = rgbPrev[1] - rgbBase[1] - 1;
    let minSlopeB = rgbPrev[2] - rgbBase[2] - 1;
    for (let i = 2; i < NUMBER_OF_SAMPLES; i++) {
      ratio[0] = t0 + i * step;
      fn(ratio, 0, color, 0);
      rgbColor = cs.getRgb(color, 0);
      const run = i - iBase;
      maxSlopeR = Math.min(maxSlopeR, (rgbColor[0] - rgbBase[0] + 1) / run);
      maxSlopeG = Math.min(maxSlopeG, (rgbColor[1] - rgbBase[1] + 1) / run);
      maxSlopeB = Math.min(maxSlopeB, (rgbColor[2] - rgbBase[2] + 1) / run);
      minSlopeR = Math.max(minSlopeR, (rgbColor[0] - rgbBase[0] - 1) / run);
      minSlopeG = Math.max(minSlopeG, (rgbColor[1] - rgbBase[1] - 1) / run);
      minSlopeB = Math.max(minSlopeB, (rgbColor[2] - rgbBase[2] - 1) / run);
      const slopesExist = minSlopeR <= maxSlopeR && minSlopeG <= maxSlopeG && minSlopeB <= maxSlopeB;
      if (!slopesExist) {
        const cssColor = _util.Util.makeHexColor(rgbPrev[0], rgbPrev[1], rgbPrev[2]);
        colorStops.push([iPrev / NUMBER_OF_SAMPLES, cssColor]);
        maxSlopeR = rgbColor[0] - rgbPrev[0] + 1;
        maxSlopeG = rgbColor[1] - rgbPrev[1] + 1;
        maxSlopeB = rgbColor[2] - rgbPrev[2] + 1;
        minSlopeR = rgbColor[0] - rgbPrev[0] - 1;
        minSlopeG = rgbColor[1] - rgbPrev[1] - 1;
        minSlopeB = rgbColor[2] - rgbPrev[2] - 1;
        iBase = iPrev;
        rgbBase = rgbPrev;
      }
      iPrev = i;
      rgbPrev = rgbColor;
    }
    const cssColor = _util.Util.makeHexColor(rgbPrev[0], rgbPrev[1], rgbPrev[2]);
    colorStops.push([1, cssColor]);
    let background = "transparent";
    if (dict.has("Background")) {
      rgbColor = cs.getRgb(dict.get("Background"), 0);
      background = _util.Util.makeHexColor(rgbColor[0], rgbColor[1], rgbColor[2]);
    }
    if (!extendStart) {
      colorStops.unshift([0, background]);
      colorStops[1][0] += BaseShading.SMALL_NUMBER;
    }
    if (!extendEnd) {
      colorStops.at(-1)[0] -= BaseShading.SMALL_NUMBER;
      colorStops.push([1, background]);
    }
    this.colorStops = colorStops;
  }
  getIR() {
    const coordsArr = this.coordsArr;
    const shadingType = this.shadingType;
    let type, p0, p1, r0, r1;
    if (shadingType === ShadingType.AXIAL) {
      p0 = [coordsArr[0], coordsArr[1]];
      p1 = [coordsArr[2], coordsArr[3]];
      r0 = null;
      r1 = null;
      type = "axial";
    } else if (shadingType === ShadingType.RADIAL) {
      p0 = [coordsArr[0], coordsArr[1]];
      p1 = [coordsArr[3], coordsArr[4]];
      r0 = coordsArr[2];
      r1 = coordsArr[5];
      type = "radial";
    } else {
      (0, _util.unreachable)(`getPattern type unknown: ${shadingType}`);
    }
    return ["RadialAxial", type, this.bbox, this.colorStops, p0, p1, r0, r1];
  }
}
class MeshStreamReader {
  constructor(stream, context) {
    this.stream = stream;
    this.context = context;
    this.buffer = 0;
    this.bufferLength = 0;
    const numComps = context.numComps;
    this.tmpCompsBuf = new Float32Array(numComps);
    const csNumComps = context.colorSpace.numComps;
    this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : this.tmpCompsBuf;
  }
  get hasData() {
    if (this.stream.end) {
      return this.stream.pos < this.stream.end;
    }
    if (this.bufferLength > 0) {
      return true;
    }
    const nextByte = this.stream.getByte();
    if (nextByte < 0) {
      return false;
    }
    this.buffer = nextByte;
    this.bufferLength = 8;
    return true;
  }
  readBits(n) {
    let buffer = this.buffer;
    let bufferLength = this.bufferLength;
    if (n === 32) {
      if (bufferLength === 0) {
        return (this.stream.getByte() << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte()) >>> 0;
      }
      buffer = buffer << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte();
      const nextByte = this.stream.getByte();
      this.buffer = nextByte & (1 << bufferLength) - 1;
      return (buffer << 8 - bufferLength | (nextByte & 0xff) >> bufferLength) >>> 0;
    }
    if (n === 8 && bufferLength === 0) {
      return this.stream.getByte();
    }
    while (bufferLength < n) {
      buffer = buffer << 8 | this.stream.getByte();
      bufferLength += 8;
    }
    bufferLength -= n;
    this.bufferLength = bufferLength;
    this.buffer = buffer & (1 << bufferLength) - 1;
    return buffer >> bufferLength;
  }
  align() {
    this.buffer = 0;
    this.bufferLength = 0;
  }
  readFlag() {
    return this.readBits(this.context.bitsPerFlag);
  }
  readCoordinate() {
    const bitsPerCoordinate = this.context.bitsPerCoordinate;
    const xi = this.readBits(bitsPerCoordinate);
    const yi = this.readBits(bitsPerCoordinate);
    const decode = this.context.decode;
    const scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) : 2.3283064365386963e-10;
    return [xi * scale * (decode[1] - decode[0]) + decode[0], yi * scale * (decode[3] - decode[2]) + decode[2]];
  }
  readComponents() {
    const numComps = this.context.numComps;
    const bitsPerComponent = this.context.bitsPerComponent;
    const scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10;
    const decode = this.context.decode;
    const components = this.tmpCompsBuf;
    for (let i = 0, j = 4; i < numComps; i++, j += 2) {
      const ci = this.readBits(bitsPerComponent);
      components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j];
    }
    const color = this.tmpCsCompsBuf;
    if (this.context.colorFn) {
      this.context.colorFn(components, 0, color, 0);
    }
    return this.context.colorSpace.getRgb(color, 0);
  }
}
let bCache = Object.create(null);
function buildB(count) {
  const lut = [];
  for (let i = 0; i <= count; i++) {
    const t = i / count,
      t_ = 1 - t;
    lut.push(new Float32Array([t_ ** 3, 3 * t * t_ ** 2, 3 * t ** 2 * t_, t ** 3]));
  }
  return lut;
}
function getB(count) {
  return bCache[count] ||= buildB(count);
}
function clearPatternCaches() {
  bCache = Object.create(null);
}
class MeshShading extends BaseShading {
  static MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3;
  static MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20;
  static TRIANGLE_DENSITY = 20;
  constructor(stream, xref, resources, pdfFunctionFactory, localColorSpaceCache) {
    super();
    if (!(stream instanceof _base_stream.BaseStream)) {
      throw new _util.FormatError("Mesh data is not a stream");
    }
    const dict = stream.dict;
    this.shadingType = dict.get("ShadingType");
    const bbox = dict.getArray("BBox");
    this.bbox = Array.isArray(bbox) && bbox.length === 4 ? _util.Util.normalizeRect(bbox) : null;
    const cs = _colorspace.ColorSpace.parse({
      cs: dict.getRaw("CS") || dict.getRaw("ColorSpace"),
      xref,
      resources,
      pdfFunctionFactory,
      localColorSpaceCache
    });
    this.background = dict.has("Background") ? cs.getRgb(dict.get("Background"), 0) : null;
    const fnObj = dict.getRaw("Function");
    const fn = fnObj ? pdfFunctionFactory.createFromArray(fnObj) : null;
    this.coords = [];
    this.colors = [];
    this.figures = [];
    const decodeContext = {
      bitsPerCoordinate: dict.get("BitsPerCoordinate"),
      bitsPerComponent: dict.get("BitsPerComponent"),
      bitsPerFlag: dict.get("BitsPerFlag"),
      decode: dict.getArray("Decode"),
      colorFn: fn,
      colorSpace: cs,
      numComps: fn ? 1 : cs.numComps
    };
    const reader = new MeshStreamReader(stream, decodeContext);
    let patchMesh = false;
    switch (this.shadingType) {
      case ShadingType.FREE_FORM_MESH:
        this._decodeType4Shading(reader);
        break;
      case ShadingType.LATTICE_FORM_MESH:
        const verticesPerRow = dict.get("VerticesPerRow") | 0;
        if (verticesPerRow < 2) {
          throw new _util.FormatError("Invalid VerticesPerRow");
        }
        this._decodeType5Shading(reader, verticesPerRow);
        break;
      case ShadingType.COONS_PATCH_MESH:
        this._decodeType6Shading(reader);
        patchMesh = true;
        break;
      case ShadingType.TENSOR_PATCH_MESH:
        this._decodeType7Shading(reader);
        patchMesh = true;
        break;
      default:
        (0, _util.unreachable)("Unsupported mesh type.");
        break;
    }
    if (patchMesh) {
      this._updateBounds();
      for (let i = 0, ii = this.figures.length; i < ii; i++) {
        this._buildFigureFromPatch(i);
      }
    }
    this._updateBounds();
    this._packData();
  }
  _decodeType4Shading(reader) {
    const coords = this.coords;
    const colors = this.colors;
    const operators = [];
    const ps = [];
    let verticesLeft = 0;
    while (reader.hasData) {
      const f = reader.readFlag();
      const coord = reader.readCoordinate();
      const color = reader.readComponents();
      if (verticesLeft === 0) {
        if (!(0 <= f && f <= 2)) {
          throw new _util.FormatError("Unknown type4 flag");
        }
        switch (f) {
          case 0:
            verticesLeft = 3;
            break;
          case 1:
            ps.push(ps.at(-2), ps.at(-1));
            verticesLeft = 1;
            break;
          case 2:
            ps.push(ps.at(-3), ps.at(-1));
            verticesLeft = 1;
            break;
        }
        operators.push(f);
      }
      ps.push(coords.length);
      coords.push(coord);
      colors.push(color);
      verticesLeft--;
      reader.align();
    }
    this.figures.push({
      type: "triangles",
      coords: new Int32Array(ps),
      colors: new Int32Array(ps)
    });
  }
  _decodeType5Shading(reader, verticesPerRow) {
    const coords = this.coords;
    const colors = this.colors;
    const ps = [];
    while (reader.hasData) {
      const coord = reader.readCoordinate();
      const color = reader.readComponents();
      ps.push(coords.length);
      coords.push(coord);
      colors.push(color);
    }
    this.figures.push({
      type: "lattice",
      coords: new Int32Array(ps),
      colors: new Int32Array(ps),
      verticesPerRow
    });
  }
  _decodeType6Shading(reader) {
    const coords = this.coords;
    const colors = this.colors;
    const ps = new Int32Array(16);
    const cs = new Int32Array(4);
    while (reader.hasData) {
      const f = reader.readFlag();
      if (!(0 <= f && f <= 3)) {
        throw new _util.FormatError("Unknown type6 flag");
      }
      const pi = coords.length;
      for (let i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) {
        coords.push(reader.readCoordinate());
      }
      const ci = colors.length;
      for (let i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {
        colors.push(reader.readComponents());
      }
      let tmp1, tmp2, tmp3, tmp4;
      switch (f) {
        case 0:
          ps[12] = pi + 3;
          ps[13] = pi + 4;
          ps[14] = pi + 5;
          ps[15] = pi + 6;
          ps[8] = pi + 2;
          ps[11] = pi + 7;
          ps[4] = pi + 1;
          ps[7] = pi + 8;
          ps[0] = pi;
          ps[1] = pi + 11;
          ps[2] = pi + 10;
          ps[3] = pi + 9;
          cs[2] = ci + 1;
          cs[3] = ci + 2;
          cs[0] = ci;
          cs[1] = ci + 3;
          break;
        case 1:
          tmp1 = ps[12];
          tmp2 = ps[13];
          tmp3 = ps[14];
          tmp4 = ps[15];
          ps[12] = tmp4;
          ps[13] = pi + 0;
          ps[14] = pi + 1;
          ps[15] = pi + 2;
          ps[8] = tmp3;
          ps[11] = pi + 3;
          ps[4] = tmp2;
          ps[7] = pi + 4;
          ps[0] = tmp1;
          ps[1] = pi + 7;
          ps[2] = pi + 6;
          ps[3] = pi + 5;
          tmp1 = cs[2];
          tmp2 = cs[3];
          cs[2] = tmp2;
          cs[3] = ci;
          cs[0] = tmp1;
          cs[1] = ci + 1;
          break;
        case 2:
          tmp1 = ps[15];
          tmp2 = ps[11];
          ps[12] = ps[3];
          ps[13] = pi + 0;
          ps[14] = pi + 1;
          ps[15] = pi + 2;
          ps[8] = ps[7];
          ps[11] = pi + 3;
          ps[4] = tmp2;
          ps[7] = pi + 4;
          ps[0] = tmp1;
          ps[1] = pi + 7;
          ps[2] = pi + 6;
          ps[3] = pi + 5;
          tmp1 = cs[3];
          cs[2] = cs[1];
          cs[3] = ci;
          cs[0] = tmp1;
          cs[1] = ci + 1;
          break;
        case 3:
          ps[12] = ps[0];
          ps[13] = pi + 0;
          ps[14] = pi + 1;
          ps[15] = pi + 2;
          ps[8] = ps[1];
          ps[11] = pi + 3;
          ps[4] = ps[2];
          ps[7] = pi + 4;
          ps[0] = ps[3];
          ps[1] = pi + 7;
          ps[2] = pi + 6;
          ps[3] = pi + 5;
          cs[2] = cs[0];
          cs[3] = ci;
          cs[0] = cs[1];
          cs[1] = ci + 1;
          break;
      }
      ps[5] = coords.length;
      coords.push([(-4 * coords[ps[0]][0] - coords[ps[15]][0] + 6 * (coords[ps[4]][0] + coords[ps[1]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[13]][0] + coords[ps[7]][0])) / 9, (-4 * coords[ps[0]][1] - coords[ps[15]][1] + 6 * (coords[ps[4]][1] + coords[ps[1]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[13]][1] + coords[ps[7]][1])) / 9]);
      ps[6] = coords.length;
      coords.push([(-4 * coords[ps[3]][0] - coords[ps[12]][0] + 6 * (coords[ps[2]][0] + coords[ps[7]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[4]][0] + coords[ps[14]][0])) / 9, (-4 * coords[ps[3]][1] - coords[ps[12]][1] + 6 * (coords[ps[2]][1] + coords[ps[7]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[4]][1] + coords[ps[14]][1])) / 9]);
      ps[9] = coords.length;
      coords.push([(-4 * coords[ps[12]][0] - coords[ps[3]][0] + 6 * (coords[ps[8]][0] + coords[ps[13]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[11]][0] + coords[ps[1]][0])) / 9, (-4 * coords[ps[12]][1] - coords[ps[3]][1] + 6 * (coords[ps[8]][1] + coords[ps[13]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[11]][1] + coords[ps[1]][1])) / 9]);
      ps[10] = coords.length;
      coords.push([(-4 * coords[ps[15]][0] - coords[ps[0]][0] + 6 * (coords[ps[11]][0] + coords[ps[14]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[2]][0] + coords[ps[8]][0])) / 9, (-4 * coords[ps[15]][1] - coords[ps[0]][1] + 6 * (coords[ps[11]][1] + coords[ps[14]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[2]][1] + coords[ps[8]][1])) / 9]);
      this.figures.push({
        type: "patch",
        coords: new Int32Array(ps),
        colors: new Int32Array(cs)
      });
    }
  }
  _decodeType7Shading(reader) {
    const coords = this.coords;
    const colors = this.colors;
    const ps = new Int32Array(16);
    const cs = new Int32Array(4);
    while (reader.hasData) {
      const f = reader.readFlag();
      if (!(0 <= f && f <= 3)) {
        throw new _util.FormatError("Unknown type7 flag");
      }
      const pi = coords.length;
      for (let i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) {
        coords.push(reader.readCoordinate());
      }
      const ci = colors.length;
      for (let i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {
        colors.push(reader.readComponents());
      }
      let tmp1, tmp2, tmp3, tmp4;
      switch (f) {
        case 0:
          ps[12] = pi + 3;
          ps[13] = pi + 4;
          ps[14] = pi + 5;
          ps[15] = pi + 6;
          ps[8] = pi + 2;
          ps[9] = pi + 13;
          ps[10] = pi + 14;
          ps[11] = pi + 7;
          ps[4] = pi + 1;
          ps[5] = pi + 12;
          ps[6] = pi + 15;
          ps[7] = pi + 8;
          ps[0] = pi;
          ps[1] = pi + 11;
          ps[2] = pi + 10;
          ps[3] = pi + 9;
          cs[2] = ci + 1;
          cs[3] = ci + 2;
          cs[0] = ci;
          cs[1] = ci + 3;
          break;
        case 1:
          tmp1 = ps[12];
          tmp2 = ps[13];
          tmp3 = ps[14];
          tmp4 = ps[15];
          ps[12] = tmp4;
          ps[13] = pi + 0;
          ps[14] = pi + 1;
          ps[15] = pi + 2;
          ps[8] = tmp3;
          ps[9] = pi + 9;
          ps[10] = pi + 10;
          ps[11] = pi + 3;
          ps[4] = tmp2;
          ps[5] = pi + 8;
          ps[6] = pi + 11;
          ps[7] = pi + 4;
          ps[0] = tmp1;
          ps[1] = pi + 7;
          ps[2] = pi + 6;
          ps[3] = pi + 5;
          tmp1 = cs[2];
          tmp2 = cs[3];
          cs[2] = tmp2;
          cs[3] = ci;
          cs[0] = tmp1;
          cs[1] = ci + 1;
          break;
        case 2:
          tmp1 = ps[15];
          tmp2 = ps[11];
          ps[12] = ps[3];
          ps[13] = pi + 0;
          ps[14] = pi + 1;
          ps[15] = pi + 2;
          ps[8] = ps[7];
          ps[9] = pi + 9;
          ps[10] = pi + 10;
          ps[11] = pi + 3;
          ps[4] = tmp2;
          ps[5] = pi + 8;
          ps[6] = pi + 11;
          ps[7] = pi + 4;
          ps[0] = tmp1;
          ps[1] = pi + 7;
          ps[2] = pi + 6;
          ps[3] = pi + 5;
          tmp1 = cs[3];
          cs[2] = cs[1];
          cs[3] = ci;
          cs[0] = tmp1;
          cs[1] = ci + 1;
          break;
        case 3:
          ps[12] = ps[0];
          ps[13] = pi + 0;
          ps[14] = pi + 1;
          ps[15] = pi + 2;
          ps[8] = ps[1];
          ps[9] = pi + 9;
          ps[10] = pi + 10;
          ps[11] = pi + 3;
          ps[4] = ps[2];
          ps[5] = pi + 8;
          ps[6] = pi + 11;
          ps[7] = pi + 4;
          ps[0] = ps[3];
          ps[1] = pi + 7;
          ps[2] = pi + 6;
          ps[3] = pi + 5;
          cs[2] = cs[0];
          cs[3] = ci;
          cs[0] = cs[1];
          cs[1] = ci + 1;
          break;
      }
      this.figures.push({
        type: "patch",
        coords: new Int32Array(ps),
        colors: new Int32Array(cs)
      });
    }
  }
  _buildFigureFromPatch(index) {
    const figure = this.figures[index];
    (0, _util.assert)(figure.type === "patch", "Unexpected patch mesh figure");
    const coords = this.coords,
      colors = this.colors;
    const pi = figure.coords;
    const ci = figure.colors;
    const figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]);
    const figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]);
    const figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]);
    const figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]);
    let splitXBy = Math.ceil((figureMaxX - figureMinX) * MeshShading.TRIANGLE_DENSITY / (this.bounds[2] - this.bounds[0]));
    splitXBy = Math.max(MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy));
    let splitYBy = Math.ceil((figureMaxY - figureMinY) * MeshShading.TRIANGLE_DENSITY / (this.bounds[3] - this.bounds[1]));
    splitYBy = Math.max(MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy));
    const verticesPerRow = splitXBy + 1;
    const figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow);
    const figureColors = new Int32Array((splitYBy + 1) * verticesPerRow);
    let k = 0;
    const cl = new Uint8Array(3),
      cr = new Uint8Array(3);
    const c0 = colors[ci[0]],
      c1 = colors[ci[1]],
      c2 = colors[ci[2]],
      c3 = colors[ci[3]];
    const bRow = getB(splitYBy),
      bCol = getB(splitXBy);
    for (let row = 0; row <= splitYBy; row++) {
      cl[0] = (c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy | 0;
      cl[1] = (c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy | 0;
      cl[2] = (c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy | 0;
      cr[0] = (c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy | 0;
      cr[1] = (c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy | 0;
      cr[2] = (c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy | 0;
      for (let col = 0; col <= splitXBy; col++, k++) {
        if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) {
          continue;
        }
        let x = 0,
          y = 0;
        let q = 0;
        for (let i = 0; i <= 3; i++) {
          for (let j = 0; j <= 3; j++, q++) {
            const m = bRow[row][i] * bCol[col][j];
            x += coords[pi[q]][0] * m;
            y += coords[pi[q]][1] * m;
          }
        }
        figureCoords[k] = coords.length;
        coords.push([x, y]);
        figureColors[k] = colors.length;
        const newColor = new Uint8Array(3);
        newColor[0] = (cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy | 0;
        newColor[1] = (cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy | 0;
        newColor[2] = (cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy | 0;
        colors.push(newColor);
      }
    }
    figureCoords[0] = pi[0];
    figureColors[0] = ci[0];
    figureCoords[splitXBy] = pi[3];
    figureColors[splitXBy] = ci[1];
    figureCoords[verticesPerRow * splitYBy] = pi[12];
    figureColors[verticesPerRow * splitYBy] = ci[2];
    figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15];
    figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3];
    this.figures[index] = {
      type: "lattice",
      coords: figureCoords,
      colors: figureColors,
      verticesPerRow
    };
  }
  _updateBounds() {
    let minX = this.coords[0][0],
      minY = this.coords[0][1],
      maxX = minX,
      maxY = minY;
    for (let i = 1, ii = this.coords.length; i < ii; i++) {
      const x = this.coords[i][0],
        y = this.coords[i][1];
      minX = minX > x ? x : minX;
      minY = minY > y ? y : minY;
      maxX = maxX < x ? x : maxX;
      maxY = maxY < y ? y : maxY;
    }
    this.bounds = [minX, minY, maxX, maxY];
  }
  _packData() {
    let i, ii, j, jj;
    const coords = this.coords;
    const coordsPacked = new Float32Array(coords.length * 2);
    for (i = 0, j = 0, ii = coords.length; i < ii; i++) {
      const xy = coords[i];
      coordsPacked[j++] = xy[0];
      coordsPacked[j++] = xy[1];
    }
    this.coords = coordsPacked;
    const colors = this.colors;
    const colorsPacked = new Uint8Array(colors.length * 3);
    for (i = 0, j = 0, ii = colors.length; i < ii; i++) {
      const c = colors[i];
      colorsPacked[j++] = c[0];
      colorsPacked[j++] = c[1];
      colorsPacked[j++] = c[2];
    }
    this.colors = colorsPacked;
    const figures = this.figures;
    for (i = 0, ii = figures.length; i < ii; i++) {
      const figure = figures[i],
        ps = figure.coords,
        cs = figure.colors;
      for (j = 0, jj = ps.length; j < jj; j++) {
        ps[j] *= 2;
        cs[j] *= 3;
      }
    }
  }
  getIR() {
    return ["Mesh", this.shadingType, this.coords, this.colors, this.figures, this.bounds, this.bbox, this.background];
  }
}
class DummyShading extends BaseShading {
  getIR() {
    return ["Dummy"];
  }
}
function getTilingPatternIR(operatorList, dict, color) {
  const matrix = dict.getArray("Matrix");
  const bbox = _util.Util.normalizeRect(dict.getArray("BBox"));
  const xstep = dict.get("XStep");
  const ystep = dict.get("YStep");
  const paintType = dict.get("PaintType");
  const tilingType = dict.get("TilingType");
  if (bbox[2] - bbox[0] === 0 || bbox[3] - bbox[1] === 0) {
    throw new _util.FormatError(`Invalid getTilingPatternIR /BBox array: [${bbox}].`);
  }
  return ["TilingPattern", color, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType];
}

/***/ }),
/* 51 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.getXfaFontDict = getXfaFontDict;
exports.getXfaFontName = getXfaFontName;
var _calibri_factors = __w_pdfjs_require__(52);
var _primitives = __w_pdfjs_require__(4);
var _helvetica_factors = __w_pdfjs_require__(53);
var _liberationsans_widths = __w_pdfjs_require__(54);
var _myriadpro_factors = __w_pdfjs_require__(55);
var _segoeui_factors = __w_pdfjs_require__(56);
var _core_utils = __w_pdfjs_require__(3);
var _fonts_utils = __w_pdfjs_require__(38);
const getXFAFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
  t["MyriadPro-Regular"] = t["PdfJS-Fallback-Regular"] = {
    name: "LiberationSans-Regular",
    factors: _myriadpro_factors.MyriadProRegularFactors,
    baseWidths: _liberationsans_widths.LiberationSansRegularWidths,
    baseMapping: _liberationsans_widths.LiberationSansRegularMapping,
    metrics: _myriadpro_factors.MyriadProRegularMetrics
  };
  t["MyriadPro-Bold"] = t["PdfJS-Fallback-Bold"] = {
    name: "LiberationSans-Bold",
    factors: _myriadpro_factors.MyriadProBoldFactors,
    baseWidths: _liberationsans_widths.LiberationSansBoldWidths,
    baseMapping: _liberationsans_widths.LiberationSansBoldMapping,
    metrics: _myriadpro_factors.MyriadProBoldMetrics
  };
  t["MyriadPro-It"] = t["MyriadPro-Italic"] = t["PdfJS-Fallback-Italic"] = {
    name: "LiberationSans-Italic",
    factors: _myriadpro_factors.MyriadProItalicFactors,
    baseWidths: _liberationsans_widths.LiberationSansItalicWidths,
    baseMapping: _liberationsans_widths.LiberationSansItalicMapping,
    metrics: _myriadpro_factors.MyriadProItalicMetrics
  };
  t["MyriadPro-BoldIt"] = t["MyriadPro-BoldItalic"] = t["PdfJS-Fallback-BoldItalic"] = {
    name: "LiberationSans-BoldItalic",
    factors: _myriadpro_factors.MyriadProBoldItalicFactors,
    baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths,
    baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping,
    metrics: _myriadpro_factors.MyriadProBoldItalicMetrics
  };
  t.ArialMT = t.Arial = t["Arial-Regular"] = {
    name: "LiberationSans-Regular",
    baseWidths: _liberationsans_widths.LiberationSansRegularWidths,
    baseMapping: _liberationsans_widths.LiberationSansRegularMapping
  };
  t["Arial-BoldMT"] = t["Arial-Bold"] = {
    name: "LiberationSans-Bold",
    baseWidths: _liberationsans_widths.LiberationSansBoldWidths,
    baseMapping: _liberationsans_widths.LiberationSansBoldMapping
  };
  t["Arial-ItalicMT"] = t["Arial-Italic"] = {
    name: "LiberationSans-Italic",
    baseWidths: _liberationsans_widths.LiberationSansItalicWidths,
    baseMapping: _liberationsans_widths.LiberationSansItalicMapping
  };
  t["Arial-BoldItalicMT"] = t["Arial-BoldItalic"] = {
    name: "LiberationSans-BoldItalic",
    baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths,
    baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping
  };
  t["Calibri-Regular"] = {
    name: "LiberationSans-Regular",
    factors: _calibri_factors.CalibriRegularFactors,
    baseWidths: _liberationsans_widths.LiberationSansRegularWidths,
    baseMapping: _liberationsans_widths.LiberationSansRegularMapping,
    metrics: _calibri_factors.CalibriRegularMetrics
  };
  t["Calibri-Bold"] = {
    name: "LiberationSans-Bold",
    factors: _calibri_factors.CalibriBoldFactors,
    baseWidths: _liberationsans_widths.LiberationSansBoldWidths,
    baseMapping: _liberationsans_widths.LiberationSansBoldMapping,
    metrics: _calibri_factors.CalibriBoldMetrics
  };
  t["Calibri-Italic"] = {
    name: "LiberationSans-Italic",
    factors: _calibri_factors.CalibriItalicFactors,
    baseWidths: _liberationsans_widths.LiberationSansItalicWidths,
    baseMapping: _liberationsans_widths.LiberationSansItalicMapping,
    metrics: _calibri_factors.CalibriItalicMetrics
  };
  t["Calibri-BoldItalic"] = {
    name: "LiberationSans-BoldItalic",
    factors: _calibri_factors.CalibriBoldItalicFactors,
    baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths,
    baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping,
    metrics: _calibri_factors.CalibriBoldItalicMetrics
  };
  t["Segoeui-Regular"] = {
    name: "LiberationSans-Regular",
    factors: _segoeui_factors.SegoeuiRegularFactors,
    baseWidths: _liberationsans_widths.LiberationSansRegularWidths,
    baseMapping: _liberationsans_widths.LiberationSansRegularMapping,
    metrics: _segoeui_factors.SegoeuiRegularMetrics
  };
  t["Segoeui-Bold"] = {
    name: "LiberationSans-Bold",
    factors: _segoeui_factors.SegoeuiBoldFactors,
    baseWidths: _liberationsans_widths.LiberationSansBoldWidths,
    baseMapping: _liberationsans_widths.LiberationSansBoldMapping,
    metrics: _segoeui_factors.SegoeuiBoldMetrics
  };
  t["Segoeui-Italic"] = {
    name: "LiberationSans-Italic",
    factors: _segoeui_factors.SegoeuiItalicFactors,
    baseWidths: _liberationsans_widths.LiberationSansItalicWidths,
    baseMapping: _liberationsans_widths.LiberationSansItalicMapping,
    metrics: _segoeui_factors.SegoeuiItalicMetrics
  };
  t["Segoeui-BoldItalic"] = {
    name: "LiberationSans-BoldItalic",
    factors: _segoeui_factors.SegoeuiBoldItalicFactors,
    baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths,
    baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping,
    metrics: _segoeui_factors.SegoeuiBoldItalicMetrics
  };
  t["Helvetica-Regular"] = t.Helvetica = {
    name: "LiberationSans-Regular",
    factors: _helvetica_factors.HelveticaRegularFactors,
    baseWidths: _liberationsans_widths.LiberationSansRegularWidths,
    baseMapping: _liberationsans_widths.LiberationSansRegularMapping,
    metrics: _helvetica_factors.HelveticaRegularMetrics
  };
  t["Helvetica-Bold"] = {
    name: "LiberationSans-Bold",
    factors: _helvetica_factors.HelveticaBoldFactors,
    baseWidths: _liberationsans_widths.LiberationSansBoldWidths,
    baseMapping: _liberationsans_widths.LiberationSansBoldMapping,
    metrics: _helvetica_factors.HelveticaBoldMetrics
  };
  t["Helvetica-Italic"] = {
    name: "LiberationSans-Italic",
    factors: _helvetica_factors.HelveticaItalicFactors,
    baseWidths: _liberationsans_widths.LiberationSansItalicWidths,
    baseMapping: _liberationsans_widths.LiberationSansItalicMapping,
    metrics: _helvetica_factors.HelveticaItalicMetrics
  };
  t["Helvetica-BoldItalic"] = {
    name: "LiberationSans-BoldItalic",
    factors: _helvetica_factors.HelveticaBoldItalicFactors,
    baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths,
    baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping,
    metrics: _helvetica_factors.HelveticaBoldItalicMetrics
  };
});
function getXfaFontName(name) {
  const fontName = (0, _fonts_utils.normalizeFontName)(name);
  const fontMap = getXFAFontMap();
  return fontMap[fontName];
}
function getXfaFontWidths(name) {
  const info = getXfaFontName(name);
  if (!info) {
    return null;
  }
  const {
    baseWidths,
    baseMapping,
    factors
  } = info;
  const rescaledBaseWidths = !factors ? baseWidths : baseWidths.map((w, i) => w * factors[i]);
  let currentCode = -2;
  let currentArray;
  const newWidths = [];
  for (const [unicode, glyphIndex] of baseMapping.map((charUnicode, index) => [charUnicode, index]).sort(([unicode1], [unicode2]) => unicode1 - unicode2)) {
    if (unicode === -1) {
      continue;
    }
    if (unicode === currentCode + 1) {
      currentArray.push(rescaledBaseWidths[glyphIndex]);
      currentCode += 1;
    } else {
      currentCode = unicode;
      currentArray = [rescaledBaseWidths[glyphIndex]];
      newWidths.push(unicode, currentArray);
    }
  }
  return newWidths;
}
function getXfaFontDict(name) {
  const widths = getXfaFontWidths(name);
  const dict = new _primitives.Dict(null);
  dict.set("BaseFont", _primitives.Name.get(name));
  dict.set("Type", _primitives.Name.get("Font"));
  dict.set("Subtype", _primitives.Name.get("CIDFontType2"));
  dict.set("Encoding", _primitives.Name.get("Identity-H"));
  dict.set("CIDToGIDMap", _primitives.Name.get("Identity"));
  dict.set("W", widths);
  dict.set("FirstChar", widths[0]);
  dict.set("LastChar", widths.at(-2) + widths.at(-1).length - 1);
  const descriptor = new _primitives.Dict(null);
  dict.set("FontDescriptor", descriptor);
  const systemInfo = new _primitives.Dict(null);
  systemInfo.set("Ordering", "Identity");
  systemInfo.set("Registry", "Adobe");
  systemInfo.set("Supplement", 0);
  dict.set("CIDSystemInfo", systemInfo);
  return dict;
}

/***/ }),
/* 52 */
/***/ ((__unused_webpack_module, exports) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.CalibriRegularMetrics = exports.CalibriRegularFactors = exports.CalibriItalicMetrics = exports.CalibriItalicFactors = exports.CalibriBoldMetrics = exports.CalibriBoldItalicMetrics = exports.CalibriBoldItalicFactors = exports.CalibriBoldFactors = void 0;
const CalibriBoldFactors = [1.3877, 1, 1, 1, 0.97801, 0.92482, 0.89552, 0.91133, 0.81988, 0.97566, 0.98152, 0.93548, 0.93548, 1.2798, 0.85284, 0.92794, 1, 0.96134, 1.54657, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.82845, 0.82845, 0.85284, 0.85284, 0.85284, 0.75859, 0.92138, 0.83908, 0.7762, 0.73293, 0.87289, 0.73133, 0.7514, 0.81921, 0.87356, 0.95958, 0.59526, 0.75727, 0.69225, 1.04924, 0.9121, 0.86943, 0.79795, 0.88198, 0.77958, 0.70864, 0.81055, 0.90399, 0.88653, 0.96017, 0.82577, 0.77892, 0.78257, 0.97507, 1.54657, 0.97507, 0.85284, 0.89552, 0.90176, 0.88762, 0.8785, 0.75241, 0.8785, 0.90518, 0.95015, 0.77618, 0.8785, 0.88401, 0.91916, 0.86304, 0.88401, 0.91488, 0.8785, 0.8801, 0.8785, 0.8785, 0.91343, 0.7173, 1.04106, 0.8785, 0.85075, 0.95794, 0.82616, 0.85162, 0.79492, 0.88331, 1.69808, 0.88331, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.7801, 0.89552, 1.24487, 1.13254, 1.12401, 0.96839, 0.85284, 0.68787, 0.70645, 0.85592, 0.90747, 1.01466, 1.0088, 0.90323, 1, 1.07463, 1, 0.91056, 0.75806, 1.19118, 0.96839, 0.78864, 0.82845, 0.84133, 0.75859, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.77539, 0.73293, 0.73133, 0.73133, 0.73133, 0.73133, 0.95958, 0.95958, 0.95958, 0.95958, 0.88506, 0.9121, 0.86943, 0.86943, 0.86943, 0.86943, 0.86943, 0.85284, 0.87508, 0.90399, 0.90399, 0.90399, 0.90399, 0.77892, 0.79795, 0.90807, 0.88762, 0.88762, 0.88762, 0.88762, 0.88762, 0.88762, 0.8715, 0.75241, 0.90518, 0.90518, 0.90518, 0.90518, 0.88401, 0.88401, 0.88401, 0.88401, 0.8785, 0.8785, 0.8801, 0.8801, 0.8801, 0.8801, 0.8801, 0.90747, 0.89049, 0.8785, 0.8785, 0.8785, 0.8785, 0.85162, 0.8785, 0.85162, 0.83908, 0.88762, 0.83908, 0.88762, 0.83908, 0.88762, 0.73293, 0.75241, 0.73293, 0.75241, 0.73293, 0.75241, 0.73293, 0.75241, 0.87289, 0.83016, 0.88506, 0.93125, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.81921, 0.77618, 0.81921, 0.77618, 0.81921, 0.77618, 1, 1, 0.87356, 0.8785, 0.91075, 0.89608, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.76229, 0.90167, 0.59526, 0.91916, 1, 1, 0.86304, 0.69225, 0.88401, 1, 1, 0.70424, 0.79468, 0.91926, 0.88175, 0.70823, 0.94903, 0.9121, 0.8785, 1, 1, 0.9121, 0.8785, 0.87802, 0.88656, 0.8785, 0.86943, 0.8801, 0.86943, 0.8801, 0.86943, 0.8801, 0.87402, 0.89291, 0.77958, 0.91343, 1, 1, 0.77958, 0.91343, 0.70864, 0.7173, 0.70864, 0.7173, 0.70864, 0.7173, 0.70864, 0.7173, 1, 1, 0.81055, 0.75841, 0.81055, 1.06452, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.96017, 0.95794, 0.77892, 0.85162, 0.77892, 0.78257, 0.79492, 0.78257, 0.79492, 0.78257, 0.79492, 0.9297, 0.56892, 0.83908, 0.88762, 0.77539, 0.8715, 0.87508, 0.89049, 1, 1, 0.81055, 1.04106, 1.20528, 1.20528, 1, 1.15543, 0.70674, 0.98387, 0.94721, 1.33431, 1.45894, 0.95161, 1.06303, 0.83908, 0.80352, 0.57184, 0.6965, 0.56289, 0.82001, 0.56029, 0.81235, 1.02988, 0.83908, 0.7762, 0.68156, 0.80367, 0.73133, 0.78257, 0.87356, 0.86943, 0.95958, 0.75727, 0.89019, 1.04924, 0.9121, 0.7648, 0.86943, 0.87356, 0.79795, 0.78275, 0.81055, 0.77892, 0.9762, 0.82577, 0.99819, 0.84896, 0.95958, 0.77892, 0.96108, 1.01407, 0.89049, 1.02988, 0.94211, 0.96108, 0.8936, 0.84021, 0.87842, 0.96399, 0.79109, 0.89049, 1.00813, 1.02988, 0.86077, 0.87445, 0.92099, 0.84723, 0.86513, 0.8801, 0.75638, 0.85714, 0.78216, 0.79586, 0.87965, 0.94211, 0.97747, 0.78287, 0.97926, 0.84971, 1.02988, 0.94211, 0.8801, 0.94211, 0.84971, 0.73133, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90264, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90518, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90548, 1, 1, 1, 1, 1, 1, 0.96017, 0.95794, 0.96017, 0.95794, 0.96017, 0.95794, 0.77892, 0.85162, 1, 1, 0.89552, 0.90527, 1, 0.90363, 0.92794, 0.92794, 0.92794, 0.92794, 0.87012, 0.87012, 0.87012, 0.89552, 0.89552, 1.42259, 0.71143, 1.06152, 1, 1, 1.03372, 1.03372, 0.97171, 1.4956, 2.2807, 0.93835, 0.83406, 0.91133, 0.84107, 0.91133, 1, 1, 1, 0.72021, 1, 1.23108, 0.83489, 0.88525, 0.88525, 0.81499, 0.90527, 1.81055, 0.90527, 1.81055, 1.31006, 1.53711, 0.94434, 1.08696, 1, 0.95018, 0.77192, 0.85284, 0.90747, 1.17534, 0.69825, 0.9716, 1.37077, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.08004, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90727, 0.90727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
exports.CalibriBoldFactors = CalibriBoldFactors;
const CalibriBoldMetrics = {
  lineHeight: 1.2207,
  lineGap: 0.2207
};
exports.CalibriBoldMetrics = CalibriBoldMetrics;
const CalibriBoldItalicFactors = [1.3877, 1, 1, 1, 0.97801, 0.92482, 0.89552, 0.91133, 0.81988, 0.97566, 0.98152, 0.93548, 0.93548, 1.2798, 0.85284, 0.92794, 1, 0.96134, 1.56239, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.82845, 0.82845, 0.85284, 0.85284, 0.85284, 0.75859, 0.92138, 0.83908, 0.7762, 0.71805, 0.87289, 0.73133, 0.7514, 0.81921, 0.87356, 0.95958, 0.59526, 0.75727, 0.69225, 1.04924, 0.90872, 0.85938, 0.79795, 0.87068, 0.77958, 0.69766, 0.81055, 0.90399, 0.88653, 0.96068, 0.82577, 0.77892, 0.78257, 0.97507, 1.529, 0.97507, 0.85284, 0.89552, 0.90176, 0.94908, 0.86411, 0.74012, 0.86411, 0.88323, 0.95015, 0.86411, 0.86331, 0.88401, 0.91916, 0.86304, 0.88401, 0.9039, 0.86331, 0.86331, 0.86411, 0.86411, 0.90464, 0.70852, 1.04106, 0.86331, 0.84372, 0.95794, 0.82616, 0.84548, 0.79492, 0.88331, 1.69808, 0.88331, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.7801, 0.89552, 1.24487, 1.13254, 1.19129, 0.96839, 0.85284, 0.68787, 0.70645, 0.85592, 0.90747, 1.01466, 1.0088, 0.90323, 1, 1.07463, 1, 0.91056, 0.75806, 1.19118, 0.96839, 0.78864, 0.82845, 0.84133, 0.75859, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.77539, 0.71805, 0.73133, 0.73133, 0.73133, 0.73133, 0.95958, 0.95958, 0.95958, 0.95958, 0.88506, 0.90872, 0.85938, 0.85938, 0.85938, 0.85938, 0.85938, 0.85284, 0.87068, 0.90399, 0.90399, 0.90399, 0.90399, 0.77892, 0.79795, 0.90807, 0.94908, 0.94908, 0.94908, 0.94908, 0.94908, 0.94908, 0.85887, 0.74012, 0.88323, 0.88323, 0.88323, 0.88323, 0.88401, 0.88401, 0.88401, 0.88401, 0.8785, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.90747, 0.89049, 0.86331, 0.86331, 0.86331, 0.86331, 0.84548, 0.86411, 0.84548, 0.83908, 0.94908, 0.83908, 0.94908, 0.83908, 0.94908, 0.71805, 0.74012, 0.71805, 0.74012, 0.71805, 0.74012, 0.71805, 0.74012, 0.87289, 0.79538, 0.88506, 0.92726, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.81921, 0.86411, 0.81921, 0.86411, 0.81921, 0.86411, 1, 1, 0.87356, 0.86331, 0.91075, 0.8777, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.76467, 0.90167, 0.59526, 0.91916, 1, 1, 0.86304, 0.69225, 0.88401, 1, 1, 0.70424, 0.77312, 0.91926, 0.88175, 0.70823, 0.94903, 0.90872, 0.86331, 1, 1, 0.90872, 0.86331, 0.86906, 0.88116, 0.86331, 0.85938, 0.86331, 0.85938, 0.86331, 0.85938, 0.86331, 0.87402, 0.86549, 0.77958, 0.90464, 1, 1, 0.77958, 0.90464, 0.69766, 0.70852, 0.69766, 0.70852, 0.69766, 0.70852, 0.69766, 0.70852, 1, 1, 0.81055, 0.75841, 0.81055, 1.06452, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.96068, 0.95794, 0.77892, 0.84548, 0.77892, 0.78257, 0.79492, 0.78257, 0.79492, 0.78257, 0.79492, 0.9297, 0.56892, 0.83908, 0.94908, 0.77539, 0.85887, 0.87068, 0.89049, 1, 1, 0.81055, 1.04106, 1.20528, 1.20528, 1, 1.15543, 0.70088, 0.98387, 0.94721, 1.33431, 1.45894, 0.95161, 1.48387, 0.83908, 0.80352, 0.57118, 0.6965, 0.56347, 0.79179, 0.55853, 0.80346, 1.02988, 0.83908, 0.7762, 0.67174, 0.86036, 0.73133, 0.78257, 0.87356, 0.86441, 0.95958, 0.75727, 0.89019, 1.04924, 0.90872, 0.74889, 0.85938, 0.87891, 0.79795, 0.7957, 0.81055, 0.77892, 0.97447, 0.82577, 0.97466, 0.87179, 0.95958, 0.77892, 0.94252, 0.95612, 0.8753, 1.02988, 0.92733, 0.94252, 0.87411, 0.84021, 0.8728, 0.95612, 0.74081, 0.8753, 1.02189, 1.02988, 0.84814, 0.87445, 0.91822, 0.84723, 0.85668, 0.86331, 0.81344, 0.87581, 0.76422, 0.82046, 0.96057, 0.92733, 0.99375, 0.78022, 0.95452, 0.86015, 1.02988, 0.92733, 0.86331, 0.92733, 0.86015, 0.73133, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90631, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.88323, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.85174, 1, 1, 1, 1, 1, 1, 0.96068, 0.95794, 0.96068, 0.95794, 0.96068, 0.95794, 0.77892, 0.84548, 1, 1, 0.89552, 0.90527, 1, 0.90363, 0.92794, 0.92794, 0.92794, 0.89807, 0.87012, 0.87012, 0.87012, 0.89552, 0.89552, 1.42259, 0.71094, 1.06152, 1, 1, 1.03372, 1.03372, 0.97171, 1.4956, 2.2807, 0.92972, 0.83406, 0.91133, 0.83326, 0.91133, 1, 1, 1, 0.72021, 1, 1.23108, 0.83489, 0.88525, 0.88525, 0.81499, 0.90616, 1.81055, 0.90527, 1.81055, 1.3107, 1.53711, 0.94434, 1.08696, 1, 0.95018, 0.77192, 0.85284, 0.90747, 1.17534, 0.69825, 0.9716, 1.37077, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.08004, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90727, 0.90727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
exports.CalibriBoldItalicFactors = CalibriBoldItalicFactors;
const CalibriBoldItalicMetrics = {
  lineHeight: 1.2207,
  lineGap: 0.2207
};
exports.CalibriBoldItalicMetrics = CalibriBoldItalicMetrics;
const CalibriItalicFactors = [1.3877, 1, 1, 1, 1.17223, 1.1293, 0.89552, 0.91133, 0.80395, 1.02269, 1.15601, 0.91056, 0.91056, 1.2798, 0.85284, 0.89807, 1, 0.90861, 1.39543, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.96309, 0.96309, 0.85284, 0.85284, 0.85284, 0.83319, 0.88071, 0.8675, 0.81552, 0.72346, 0.85193, 0.73206, 0.7522, 0.81105, 0.86275, 0.90685, 0.6377, 0.77892, 0.75593, 1.02638, 0.89249, 0.84118, 0.77452, 0.85374, 0.75186, 0.67789, 0.79776, 0.88844, 0.85066, 0.94309, 0.77818, 0.7306, 0.76659, 1.10369, 1.38313, 1.10369, 1.06139, 0.89552, 0.8739, 0.9245, 0.9245, 0.83203, 0.9245, 0.85865, 1.09842, 0.9245, 0.9245, 1.03297, 1.07692, 0.90918, 1.03297, 0.94959, 0.9245, 0.92274, 0.9245, 0.9245, 1.02933, 0.77832, 1.20562, 0.9245, 0.8916, 0.98986, 0.86621, 0.89453, 0.79004, 0.94152, 1.77256, 0.94152, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.91729, 0.89552, 1.17889, 1.13254, 1.16359, 0.92098, 0.85284, 0.68787, 0.71353, 0.84737, 0.90747, 1.0088, 1.0044, 0.87683, 1, 1.09091, 1, 0.92229, 0.739, 1.15642, 0.92098, 0.76288, 0.80504, 0.80972, 0.75859, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.76318, 0.72346, 0.73206, 0.73206, 0.73206, 0.73206, 0.90685, 0.90685, 0.90685, 0.90685, 0.86477, 0.89249, 0.84118, 0.84118, 0.84118, 0.84118, 0.84118, 0.85284, 0.84557, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, 0.77452, 0.86331, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.84843, 0.83203, 0.85865, 0.85865, 0.85865, 0.85865, 0.82601, 0.82601, 0.82601, 0.82601, 0.94469, 0.9245, 0.92274, 0.92274, 0.92274, 0.92274, 0.92274, 0.90747, 0.86651, 0.9245, 0.9245, 0.9245, 0.9245, 0.89453, 0.9245, 0.89453, 0.8675, 0.9245, 0.8675, 0.9245, 0.8675, 0.9245, 0.72346, 0.83203, 0.72346, 0.83203, 0.72346, 0.83203, 0.72346, 0.83203, 0.85193, 0.8875, 0.86477, 0.99034, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.81105, 0.9245, 0.81105, 0.9245, 0.81105, 0.9245, 1, 1, 0.86275, 0.9245, 0.90872, 0.93591, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 1.03297, 0.90685, 0.82601, 0.77896, 1.05611, 0.6377, 1.07692, 1, 1, 0.90918, 0.75593, 1.03297, 1, 1, 0.76032, 0.9375, 0.98156, 0.93407, 0.77261, 1.11429, 0.89249, 0.9245, 1, 1, 0.89249, 0.9245, 0.92534, 0.86698, 0.9245, 0.84118, 0.92274, 0.84118, 0.92274, 0.84118, 0.92274, 0.8667, 0.86291, 0.75186, 1.02933, 1, 1, 0.75186, 1.02933, 0.67789, 0.77832, 0.67789, 0.77832, 0.67789, 0.77832, 0.67789, 0.77832, 1, 1, 0.79776, 0.97655, 0.79776, 1.23023, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.94309, 0.98986, 0.7306, 0.89453, 0.7306, 0.76659, 0.79004, 0.76659, 0.79004, 0.76659, 0.79004, 1.09231, 0.54873, 0.8675, 0.9245, 0.76318, 0.84843, 0.84557, 0.86651, 1, 1, 0.79776, 1.20562, 1.18622, 1.18622, 1, 1.1437, 0.67009, 0.96334, 0.93695, 1.35191, 1.40909, 0.95161, 1.48387, 0.8675, 0.90861, 0.6192, 0.7363, 0.64824, 0.82411, 0.56321, 0.85696, 1.23516, 0.8675, 0.81552, 0.7286, 0.84134, 0.73206, 0.76659, 0.86275, 0.84369, 0.90685, 0.77892, 0.85871, 1.02638, 0.89249, 0.75828, 0.84118, 0.85984, 0.77452, 0.76466, 0.79776, 0.7306, 0.90782, 0.77818, 0.903, 0.87291, 0.90685, 0.7306, 0.99058, 1.03667, 0.94635, 1.23516, 0.9849, 0.99058, 0.92393, 0.8916, 0.942, 1.03667, 0.75026, 0.94635, 1.0297, 1.23516, 0.90918, 0.94048, 0.98217, 0.89746, 0.84153, 0.92274, 0.82507, 0.88832, 0.84438, 0.88178, 1.03525, 0.9849, 1.00225, 0.78086, 0.97248, 0.89404, 1.23516, 0.9849, 0.92274, 0.9849, 0.89404, 0.73206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89693, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.85865, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90933, 1, 1, 1, 1, 1, 1, 0.94309, 0.98986, 0.94309, 0.98986, 0.94309, 0.98986, 0.7306, 0.89453, 1, 1, 0.89552, 0.90527, 1, 0.90186, 1.12308, 1.12308, 1.12308, 1.12308, 1.2566, 1.2566, 1.2566, 0.89552, 0.89552, 1.42259, 0.68994, 1.03809, 1, 1, 1.0176, 1.0176, 1.11523, 1.4956, 2.01462, 0.97858, 0.82616, 0.91133, 0.83437, 0.91133, 1, 1, 1, 0.70508, 1, 1.23108, 0.79801, 0.84426, 0.84426, 0.774, 0.90572, 1.81055, 0.90749, 1.81055, 1.28809, 1.55469, 0.94434, 1.07806, 1, 0.97094, 0.7589, 0.85284, 0.90747, 1.19658, 0.69825, 0.97622, 1.33512, 0.90747, 0.90747, 0.85284, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.0336, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05859, 1.05859, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
exports.CalibriItalicFactors = CalibriItalicFactors;
const CalibriItalicMetrics = {
  lineHeight: 1.2207,
  lineGap: 0.2207
};
exports.CalibriItalicMetrics = CalibriItalicMetrics;
const CalibriRegularFactors = [1.3877, 1, 1, 1, 1.17223, 1.1293, 0.89552, 0.91133, 0.80395, 1.02269, 1.15601, 0.91056, 0.91056, 1.2798, 0.85284, 0.89807, 1, 0.90861, 1.39016, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.96309, 0.96309, 0.85284, 0.85284, 0.85284, 0.83319, 0.88071, 0.8675, 0.81552, 0.73834, 0.85193, 0.73206, 0.7522, 0.81105, 0.86275, 0.90685, 0.6377, 0.77892, 0.75593, 1.02638, 0.89385, 0.85122, 0.77452, 0.86503, 0.75186, 0.68887, 0.79776, 0.88844, 0.85066, 0.94258, 0.77818, 0.7306, 0.76659, 1.10369, 1.39016, 1.10369, 1.06139, 0.89552, 0.8739, 0.86128, 0.94469, 0.8457, 0.94469, 0.89464, 1.09842, 0.84636, 0.94469, 1.03297, 1.07692, 0.90918, 1.03297, 0.95897, 0.94469, 0.9482, 0.94469, 0.94469, 1.04692, 0.78223, 1.20562, 0.94469, 0.90332, 0.98986, 0.86621, 0.90527, 0.79004, 0.94152, 1.77256, 0.94152, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.91729, 0.89552, 1.17889, 1.13254, 1.08707, 0.92098, 0.85284, 0.68787, 0.71353, 0.84737, 0.90747, 1.0088, 1.0044, 0.87683, 1, 1.09091, 1, 0.92229, 0.739, 1.15642, 0.92098, 0.76288, 0.80504, 0.80972, 0.75859, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.76318, 0.73834, 0.73206, 0.73206, 0.73206, 0.73206, 0.90685, 0.90685, 0.90685, 0.90685, 0.86477, 0.89385, 0.85122, 0.85122, 0.85122, 0.85122, 0.85122, 0.85284, 0.85311, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, 0.77452, 0.86331, 0.86128, 0.86128, 0.86128, 0.86128, 0.86128, 0.86128, 0.8693, 0.8457, 0.89464, 0.89464, 0.89464, 0.89464, 0.82601, 0.82601, 0.82601, 0.82601, 0.94469, 0.94469, 0.9482, 0.9482, 0.9482, 0.9482, 0.9482, 0.90747, 0.86651, 0.94469, 0.94469, 0.94469, 0.94469, 0.90527, 0.94469, 0.90527, 0.8675, 0.86128, 0.8675, 0.86128, 0.8675, 0.86128, 0.73834, 0.8457, 0.73834, 0.8457, 0.73834, 0.8457, 0.73834, 0.8457, 0.85193, 0.92454, 0.86477, 0.9921, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.81105, 0.84636, 0.81105, 0.84636, 0.81105, 0.84636, 1, 1, 0.86275, 0.94469, 0.90872, 0.95786, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 1.03297, 0.90685, 0.82601, 0.77741, 1.05611, 0.6377, 1.07692, 1, 1, 0.90918, 0.75593, 1.03297, 1, 1, 0.76032, 0.90452, 0.98156, 1.11842, 0.77261, 1.11429, 0.89385, 0.94469, 1, 1, 0.89385, 0.94469, 0.95877, 0.86901, 0.94469, 0.85122, 0.9482, 0.85122, 0.9482, 0.85122, 0.9482, 0.8667, 0.90016, 0.75186, 1.04692, 1, 1, 0.75186, 1.04692, 0.68887, 0.78223, 0.68887, 0.78223, 0.68887, 0.78223, 0.68887, 0.78223, 1, 1, 0.79776, 0.92188, 0.79776, 1.23023, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.94258, 0.98986, 0.7306, 0.90527, 0.7306, 0.76659, 0.79004, 0.76659, 0.79004, 0.76659, 0.79004, 1.09231, 0.54873, 0.8675, 0.86128, 0.76318, 0.8693, 0.85311, 0.86651, 1, 1, 0.79776, 1.20562, 1.18622, 1.18622, 1, 1.1437, 0.67742, 0.96334, 0.93695, 1.35191, 1.40909, 0.95161, 1.48387, 0.86686, 0.90861, 0.62267, 0.74359, 0.65649, 0.85498, 0.56963, 0.88254, 1.23516, 0.8675, 0.81552, 0.75443, 0.84503, 0.73206, 0.76659, 0.86275, 0.85122, 0.90685, 0.77892, 0.85746, 1.02638, 0.89385, 0.75657, 0.85122, 0.86275, 0.77452, 0.74171, 0.79776, 0.7306, 0.95165, 0.77818, 0.89772, 0.88831, 0.90685, 0.7306, 0.98142, 1.02191, 0.96576, 1.23516, 0.99018, 0.98142, 0.9236, 0.89258, 0.94035, 1.02191, 0.78848, 0.96576, 0.9561, 1.23516, 0.90918, 0.92578, 0.95424, 0.89746, 0.83969, 0.9482, 0.80113, 0.89442, 0.85208, 0.86155, 0.98022, 0.99018, 1.00452, 0.81209, 0.99247, 0.89181, 1.23516, 0.99018, 0.9482, 0.99018, 0.89181, 0.73206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.88844, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89464, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.96766, 1, 1, 1, 1, 1, 1, 0.94258, 0.98986, 0.94258, 0.98986, 0.94258, 0.98986, 0.7306, 0.90527, 1, 1, 0.89552, 0.90527, 1, 0.90186, 1.12308, 1.12308, 1.12308, 1.12308, 1.2566, 1.2566, 1.2566, 0.89552, 0.89552, 1.42259, 0.69043, 1.03809, 1, 1, 1.0176, 1.0176, 1.11523, 1.4956, 2.01462, 0.99331, 0.82616, 0.91133, 0.84286, 0.91133, 1, 1, 1, 0.70508, 1, 1.23108, 0.79801, 0.84426, 0.84426, 0.774, 0.90527, 1.81055, 0.90527, 1.81055, 1.28809, 1.55469, 0.94434, 1.07806, 1, 0.97094, 0.7589, 0.85284, 0.90747, 1.19658, 0.69825, 0.97622, 1.33512, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.0336, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05859, 1.05859, 1, 1, 1, 1.07185, 0.99413, 0.96334, 1.08065, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
exports.CalibriRegularFactors = CalibriRegularFactors;
const CalibriRegularMetrics = {
  lineHeight: 1.2207,
  lineGap: 0.2207
};
exports.CalibriRegularMetrics = CalibriRegularMetrics;

/***/ }),
/* 53 */
/***/ ((__unused_webpack_module, exports) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.HelveticaRegularMetrics = exports.HelveticaRegularFactors = exports.HelveticaItalicMetrics = exports.HelveticaItalicFactors = exports.HelveticaBoldMetrics = exports.HelveticaBoldItalicMetrics = exports.HelveticaBoldItalicFactors = exports.HelveticaBoldFactors = void 0;
const HelveticaBoldFactors = [0.76116, 1, 1, 1.0006, 0.99998, 0.99974, 0.99973, 0.99973, 0.99982, 0.99977, 1.00087, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.00003, 1.00003, 1.00003, 1.00026, 0.9999, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 0.99973, 0.99977, 1.00026, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 0.99998, 1.0006, 0.99998, 1.00003, 0.99973, 0.99998, 0.99973, 1.00026, 0.99973, 1.00026, 0.99973, 0.99998, 1.00026, 1.00026, 1.0006, 1.0006, 0.99973, 1.0006, 0.99982, 1.00026, 1.00026, 1.00026, 1.00026, 0.99959, 0.99973, 0.99998, 1.00026, 0.99973, 1.00022, 0.99973, 0.99973, 1, 0.99959, 1.00077, 0.99959, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.00077, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.99973, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.06409, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 1.00026, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 1.03374, 0.99977, 1.00026, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.00042, 0.99973, 0.99973, 1.0006, 0.99977, 0.99973, 0.99973, 1.00026, 1.0006, 1.00026, 1.0006, 1.00026, 1.03828, 1.00026, 0.99999, 1.00026, 1.0006, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.9993, 0.9998, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1, 1.00016, 0.99977, 0.99959, 0.99977, 0.99959, 0.99977, 0.99959, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00026, 0.99998, 1.00026, 0.8121, 1.00026, 0.99998, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.00016, 1.00022, 1.00001, 0.99973, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 1.0006, 0.99973, 0.99977, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 0.99973, 1.00026, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 1.00034, 0.99977, 1, 0.99997, 1.00026, 1.00078, 1.00036, 0.99973, 1.00013, 1.0006, 0.99977, 0.99977, 0.99988, 0.85148, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 0.99977, 1.00001, 0.99999, 0.99977, 1.00069, 1.00022, 0.99977, 1.00001, 0.99984, 1.00026, 1.00001, 1.00024, 1.00001, 0.9999, 1, 1.0006, 1.00001, 1.00041, 0.99962, 1.00026, 1.0006, 0.99995, 1.00041, 0.99942, 0.99973, 0.99927, 1.00082, 0.99902, 1.00026, 1.00087, 1.0006, 1.00069, 0.99973, 0.99867, 0.99973, 0.9993, 1.00026, 1.00049, 1.00056, 1, 0.99988, 0.99935, 0.99995, 0.99954, 1.00055, 0.99945, 1.00032, 1.0006, 0.99995, 1.00026, 0.99995, 1.00032, 1.00001, 1.00008, 0.99971, 1.00019, 0.9994, 1.00001, 1.0006, 1.00044, 0.99973, 1.00023, 1.00047, 1, 0.99942, 0.99561, 0.99989, 1.00035, 0.99977, 1.00035, 0.99977, 1.00019, 0.99944, 1.00001, 1.00021, 0.99926, 1.00035, 1.00035, 0.99942, 1.00048, 0.99999, 0.99977, 1.00022, 1.00035, 1.00001, 0.99977, 1.00026, 0.99989, 1.00057, 1.00001, 0.99936, 1.00052, 1.00012, 0.99996, 1.00043, 1, 1.00035, 0.9994, 0.99976, 1.00035, 0.99973, 1.00052, 1.00041, 1.00119, 1.00037, 0.99973, 1.00002, 0.99986, 1.00041, 1.00041, 0.99902, 0.9996, 1.00034, 0.99999, 1.00026, 0.99999, 1.00026, 0.99973, 1.00052, 0.99973, 1, 0.99973, 1.00041, 1.00075, 0.9994, 1.0003, 0.99999, 1, 1.00041, 0.99955, 1, 0.99915, 0.99973, 0.99973, 1.00026, 1.00119, 0.99955, 0.99973, 1.0006, 0.99911, 1.0006, 1.00026, 0.99972, 1.00026, 0.99902, 1.00041, 0.99973, 0.99999, 1, 1, 1.00038, 1.0005, 1.00016, 1.00022, 1.00016, 1.00022, 1.00016, 1.00022, 1.00001, 0.99973, 1, 1, 0.99973, 1, 1, 0.99955, 1.0006, 1.0006, 1.0006, 1.0006, 1, 1, 1, 0.99973, 0.99973, 0.99972, 1, 1, 1.00106, 0.99999, 0.99998, 0.99998, 0.99999, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 0.99971, 1.00047, 1.00023, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1, 1, 1, 1, 1, 1, 1, 0.99972, 1, 1.20985, 1.39713, 1.00003, 1.00031, 1.00015, 1, 0.99561, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99972, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
exports.HelveticaBoldFactors = HelveticaBoldFactors;
const HelveticaBoldMetrics = {
  lineHeight: 1.2,
  lineGap: 0.2
};
exports.HelveticaBoldMetrics = HelveticaBoldMetrics;
const HelveticaBoldItalicFactors = [0.76116, 1, 1, 1.0006, 0.99998, 0.99974, 0.99973, 0.99973, 0.99982, 0.99977, 1.00087, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.00003, 1.00003, 1.00003, 1.00026, 0.9999, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 0.99973, 0.99977, 1.00026, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 0.99998, 1.0006, 0.99998, 1.00003, 0.99973, 0.99998, 0.99973, 1.00026, 0.99973, 1.00026, 0.99973, 0.99998, 1.00026, 1.00026, 1.0006, 1.0006, 0.99973, 1.0006, 0.99982, 1.00026, 1.00026, 1.00026, 1.00026, 0.99959, 0.99973, 0.99998, 1.00026, 0.99973, 1.00022, 0.99973, 0.99973, 1, 0.99959, 1.00077, 0.99959, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.00077, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.99973, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.06409, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 1.00026, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 1.0044, 0.99977, 1.00026, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99971, 0.99973, 0.99973, 1.0006, 0.99977, 0.99973, 0.99973, 1.00026, 1.0006, 1.00026, 1.0006, 1.00026, 1.01011, 1.00026, 0.99999, 1.00026, 1.0006, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.9993, 0.9998, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1, 1.00016, 0.99977, 0.99959, 0.99977, 0.99959, 0.99977, 0.99959, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00026, 0.99998, 1.00026, 0.8121, 1.00026, 0.99998, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.00016, 1.00022, 1.00001, 0.99973, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 1.0006, 0.99973, 0.99977, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 0.99973, 1.00026, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99977, 1, 1, 1.00026, 0.99969, 0.99972, 0.99981, 0.9998, 1.0006, 0.99977, 0.99977, 1.00022, 0.91155, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 0.99977, 1.00001, 0.99999, 0.99977, 0.99966, 1.00022, 1.00032, 1.00001, 0.99944, 1.00026, 1.00001, 0.99968, 1.00001, 1.00047, 1, 1.0006, 1.00001, 0.99981, 1.00101, 1.00026, 1.0006, 0.99948, 0.99981, 1.00064, 0.99973, 0.99942, 1.00101, 1.00061, 1.00026, 1.00069, 1.0006, 1.00014, 0.99973, 1.01322, 0.99973, 1.00065, 1.00026, 1.00012, 0.99923, 1, 1.00064, 1.00076, 0.99948, 1.00055, 1.00063, 1.00007, 0.99943, 1.0006, 0.99948, 1.00026, 0.99948, 0.99943, 1.00001, 1.00001, 1.00029, 1.00038, 1.00035, 1.00001, 1.0006, 1.0006, 0.99973, 0.99978, 1.00001, 1.00057, 0.99989, 0.99967, 0.99964, 0.99967, 0.99977, 0.99999, 0.99977, 1.00038, 0.99977, 1.00001, 0.99973, 1.00066, 0.99967, 0.99967, 1.00041, 0.99998, 0.99999, 0.99977, 1.00022, 0.99967, 1.00001, 0.99977, 1.00026, 0.99964, 1.00031, 1.00001, 0.99999, 0.99999, 1, 1.00023, 1, 1, 0.99999, 1.00035, 1.00001, 0.99999, 0.99973, 0.99977, 0.99999, 1.00058, 0.99973, 0.99973, 0.99955, 0.9995, 1.00026, 1.00026, 1.00032, 0.99989, 1.00034, 0.99999, 1.00026, 1.00026, 1.00026, 0.99973, 0.45998, 0.99973, 1.00026, 0.99973, 1.00001, 0.99999, 0.99982, 0.99994, 0.99996, 1, 1.00042, 1.00044, 1.00029, 1.00023, 0.99973, 0.99973, 1.00026, 0.99949, 1.00002, 0.99973, 1.0006, 1.0006, 1.0006, 0.99975, 1.00026, 1.00026, 1.00032, 0.98685, 0.99973, 1.00026, 1, 1, 0.99966, 1.00044, 1.00016, 1.00022, 1.00016, 1.00022, 1.00016, 1.00022, 1.00001, 0.99973, 1, 1, 0.99973, 1, 1, 0.99955, 1.0006, 1.0006, 1.0006, 1.0006, 1, 1, 1, 0.99973, 0.99973, 0.99972, 1, 1, 1.00106, 0.99999, 0.99998, 0.99998, 0.99999, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1, 0.99973, 0.99971, 0.99978, 1, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1.00098, 1, 1, 1, 1.00049, 1, 1, 0.99972, 1, 1.20985, 1.39713, 1.00003, 1.00031, 1.00015, 1, 0.99561, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99972, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
exports.HelveticaBoldItalicFactors = HelveticaBoldItalicFactors;
const HelveticaBoldItalicMetrics = {
  lineHeight: 1.35,
  lineGap: 0.2
};
exports.HelveticaBoldItalicMetrics = HelveticaBoldItalicMetrics;
const HelveticaItalicFactors = [0.76116, 1, 1, 1.0006, 1.0006, 1.00006, 0.99973, 0.99973, 0.99982, 1.00001, 1.00043, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1, 1.00003, 1.00003, 1.00003, 0.99973, 0.99987, 1.00001, 1.00001, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 1, 1.00001, 0.99973, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 1.0006, 1.0006, 1.0006, 0.99949, 0.99973, 0.99998, 0.99973, 0.99973, 1, 0.99973, 0.99973, 1.0006, 0.99973, 0.99973, 0.99924, 0.99924, 1, 0.99924, 0.99999, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.0006, 0.99973, 1, 0.99977, 1, 1, 1, 1.00005, 1.0009, 1.00005, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.0009, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.9998, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 1, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.06409, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 1, 0.99973, 1, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1.0288, 0.99977, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99924, 1.0006, 1.0006, 0.99946, 1.00034, 1, 0.99924, 1.00001, 1, 1, 0.99973, 0.99924, 0.99973, 0.99924, 0.99973, 1.06311, 0.99973, 1.00024, 0.99973, 0.99924, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00041, 0.9998, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1, 1.00016, 0.99977, 0.99998, 0.99977, 0.99998, 0.99977, 0.99998, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00026, 1.0006, 1.00026, 0.89547, 1.00026, 1.0006, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00016, 0.99977, 1.00001, 1, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 0.99924, 0.99973, 1.00001, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 1, 1.00026, 1.0006, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 1.00001, 1, 1.00054, 0.99977, 1.00084, 1.00007, 0.99973, 1.00013, 0.99924, 1.00001, 1.00001, 0.99945, 0.91221, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 1.00001, 1.00001, 0.99999, 0.99977, 0.99933, 1.00022, 1.00054, 1.00001, 1.00065, 1.00026, 1.00001, 1.0001, 1.00001, 1.00052, 1, 1.0006, 1.00001, 0.99945, 0.99897, 0.99968, 0.99924, 1.00036, 0.99945, 0.99949, 1, 1.0006, 0.99897, 0.99918, 0.99968, 0.99911, 0.99924, 1, 0.99962, 1.01487, 1, 1.0005, 0.99973, 1.00012, 1.00043, 1, 0.99995, 0.99994, 1.00036, 0.99947, 1.00019, 1.00063, 1.00025, 0.99924, 1.00036, 0.99973, 1.00036, 1.00025, 1.00001, 1.00001, 1.00027, 1.0001, 1.00068, 1.00001, 1.0006, 1.0006, 1, 1.00008, 0.99957, 0.99972, 0.9994, 0.99954, 0.99975, 1.00051, 1.00001, 1.00019, 1.00001, 1.0001, 0.99986, 1.00001, 1.00001, 1.00038, 0.99954, 0.99954, 0.9994, 1.00066, 0.99999, 0.99977, 1.00022, 1.00054, 1.00001, 0.99977, 1.00026, 0.99975, 1.0001, 1.00001, 0.99993, 0.9995, 0.99955, 1.00016, 0.99978, 0.99974, 1.00019, 1.00022, 0.99955, 1.00053, 0.99973, 1.00089, 1.00005, 0.99967, 1.00048, 0.99973, 1.00002, 1.00034, 0.99973, 0.99973, 0.99964, 1.00006, 1.00066, 0.99947, 0.99973, 0.98894, 0.99973, 1, 0.44898, 1, 0.99946, 1, 1.00039, 1.00082, 0.99991, 0.99991, 0.99985, 1.00022, 1.00023, 1.00061, 1.00006, 0.99966, 0.99973, 0.99973, 0.99973, 1.00019, 1.0008, 1, 0.99924, 0.99924, 0.99924, 0.99983, 1.00044, 0.99973, 0.99964, 0.98332, 1, 0.99973, 1, 1, 0.99962, 0.99895, 1.00016, 0.99977, 1.00016, 0.99977, 1.00016, 0.99977, 1.00001, 1, 1, 1, 0.99973, 1, 1, 0.99955, 0.99924, 0.99924, 0.99924, 0.99924, 0.99998, 0.99998, 0.99998, 0.99973, 0.99973, 0.99972, 1, 1, 1.00267, 0.99999, 0.99998, 0.99998, 1, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 1.00423, 0.99925, 0.99999, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1.00049, 1, 1.00245, 1, 1, 1, 1, 0.96329, 1, 1.20985, 1.39713, 1.00003, 0.8254, 1.00015, 1, 1.00035, 1.00027, 1.00031, 1.00031, 1.00003, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.95317, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
exports.HelveticaItalicFactors = HelveticaItalicFactors;
const HelveticaItalicMetrics = {
  lineHeight: 1.35,
  lineGap: 0.2
};
exports.HelveticaItalicMetrics = HelveticaItalicMetrics;
const HelveticaRegularFactors = [0.76116, 1, 1, 1.0006, 1.0006, 1.00006, 0.99973, 0.99973, 0.99982, 1.00001, 1.00043, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1, 1.00003, 1.00003, 1.00003, 0.99973, 0.99987, 1.00001, 1.00001, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 1, 1.00001, 0.99973, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 1.0006, 1.0006, 1.0006, 0.99949, 0.99973, 0.99998, 0.99973, 0.99973, 1, 0.99973, 0.99973, 1.0006, 0.99973, 0.99973, 0.99924, 0.99924, 1, 0.99924, 0.99999, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.0006, 0.99973, 1, 0.99977, 1, 1, 1, 1.00005, 1.0009, 1.00005, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.0009, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.9998, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 1, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.06409, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 1, 0.99973, 1, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1.04596, 0.99977, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99924, 1.0006, 1.0006, 1.00019, 1.00034, 1, 0.99924, 1.00001, 1, 1, 0.99973, 0.99924, 0.99973, 0.99924, 0.99973, 1.02572, 0.99973, 1.00005, 0.99973, 0.99924, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99999, 0.9998, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1, 1.00016, 0.99977, 0.99998, 0.99977, 0.99998, 0.99977, 0.99998, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00026, 1.0006, 1.00026, 0.84533, 1.00026, 1.0006, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00016, 0.99977, 1.00001, 1, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 0.99924, 0.99973, 1.00001, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 1, 1.00026, 1.0006, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99928, 1, 0.99977, 1.00013, 1.00055, 0.99947, 0.99945, 0.99941, 0.99924, 1.00001, 1.00001, 1.0004, 0.91621, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 1.00001, 1.00005, 0.99999, 0.99977, 1.00015, 1.00022, 0.99977, 1.00001, 0.99973, 1.00026, 1.00001, 1.00019, 1.00001, 0.99946, 1, 1.0006, 1.00001, 0.99978, 1.00045, 0.99973, 0.99924, 1.00023, 0.99978, 0.99966, 1, 1.00065, 1.00045, 1.00019, 0.99973, 0.99973, 0.99924, 1, 1, 0.96499, 1, 1.00055, 0.99973, 1.00008, 1.00027, 1, 0.9997, 0.99995, 1.00023, 0.99933, 1.00019, 1.00015, 1.00031, 0.99924, 1.00023, 0.99973, 1.00023, 1.00031, 1.00001, 0.99928, 1.00029, 1.00092, 1.00035, 1.00001, 1.0006, 1.0006, 1, 0.99988, 0.99975, 1, 1.00082, 0.99561, 0.9996, 1.00035, 1.00001, 0.99962, 1.00001, 1.00092, 0.99964, 1.00001, 0.99963, 0.99999, 1.00035, 1.00035, 1.00082, 0.99962, 0.99999, 0.99977, 1.00022, 1.00035, 1.00001, 0.99977, 1.00026, 0.9996, 0.99967, 1.00001, 1.00034, 1.00074, 1.00054, 1.00053, 1.00063, 0.99971, 0.99962, 1.00035, 0.99975, 0.99977, 0.99973, 1.00043, 0.99953, 1.0007, 0.99915, 0.99973, 1.00008, 0.99892, 1.00073, 1.00073, 1.00114, 0.99915, 1.00073, 0.99955, 0.99973, 1.00092, 0.99973, 1, 0.99998, 1, 1.0003, 1, 1.00043, 1.00001, 0.99969, 1.0003, 1, 1.00035, 1.00001, 0.9995, 1, 1.00092, 0.99973, 0.99973, 0.99973, 1.0007, 0.9995, 1, 0.99924, 1.0006, 0.99924, 0.99972, 1.00062, 0.99973, 1.00114, 1.00073, 1, 0.99955, 1, 1, 1.00047, 0.99968, 1.00016, 0.99977, 1.00016, 0.99977, 1.00016, 0.99977, 1.00001, 1, 1, 1, 0.99973, 1, 1, 0.99955, 0.99924, 0.99924, 0.99924, 0.99924, 0.99998, 0.99998, 0.99998, 0.99973, 0.99973, 0.99972, 1, 1, 1.00267, 0.99999, 0.99998, 0.99998, 1, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 0.99971, 0.99925, 1.00023, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1, 1, 1, 1, 1, 1, 1, 0.96329, 1, 1.20985, 1.39713, 1.00003, 0.8254, 1.00015, 1, 1.00035, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.95317, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
exports.HelveticaRegularFactors = HelveticaRegularFactors;
const HelveticaRegularMetrics = {
  lineHeight: 1.2,
  lineGap: 0.2
};
exports.HelveticaRegularMetrics = HelveticaRegularMetrics;

/***/ }),
/* 54 */
/***/ ((__unused_webpack_module, exports) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.LiberationSansRegularWidths = exports.LiberationSansRegularMapping = exports.LiberationSansItalicWidths = exports.LiberationSansItalicMapping = exports.LiberationSansBoldWidths = exports.LiberationSansBoldMapping = exports.LiberationSansBoldItalicWidths = exports.LiberationSansBoldItalicMapping = void 0;
const LiberationSansBoldWidths = [365, 0, 333, 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 719, 722, 611, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 611, 778, 611, 778, 611, 778, 611, 722, 611, 722, 611, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 785, 556, 556, 278, 722, 556, 556, 611, 278, 611, 278, 611, 385, 611, 479, 611, 278, 722, 611, 722, 611, 722, 611, 708, 723, 611, 778, 611, 778, 611, 778, 611, 1000, 944, 722, 389, 722, 389, 722, 389, 667, 556, 667, 556, 667, 556, 667, 556, 611, 333, 611, 479, 611, 333, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 944, 778, 667, 556, 667, 611, 500, 611, 500, 611, 500, 278, 556, 722, 556, 1000, 889, 778, 611, 667, 556, 611, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 465, 722, 333, 853, 906, 474, 825, 927, 838, 278, 722, 722, 601, 719, 667, 611, 722, 778, 278, 722, 667, 833, 722, 644, 778, 722, 667, 600, 611, 667, 821, 667, 809, 802, 278, 667, 615, 451, 611, 278, 582, 615, 610, 556, 606, 475, 460, 611, 541, 278, 558, 556, 612, 556, 445, 611, 766, 619, 520, 684, 446, 582, 715, 576, 753, 845, 278, 582, 611, 582, 845, 667, 669, 885, 567, 711, 667, 278, 276, 556, 1094, 1062, 875, 610, 722, 622, 719, 722, 719, 722, 567, 712, 667, 904, 626, 719, 719, 610, 702, 833, 722, 778, 719, 667, 722, 611, 622, 854, 667, 730, 703, 1005, 1019, 870, 979, 719, 711, 1031, 719, 556, 618, 615, 417, 635, 556, 709, 497, 615, 615, 500, 635, 740, 604, 611, 604, 611, 556, 490, 556, 875, 556, 615, 581, 833, 844, 729, 854, 615, 552, 854, 583, 556, 556, 611, 417, 552, 556, 278, 281, 278, 969, 906, 611, 500, 615, 556, 604, 778, 611, 487, 447, 944, 778, 944, 778, 944, 778, 667, 556, 333, 333, 556, 1000, 1000, 552, 278, 278, 278, 278, 500, 500, 500, 556, 556, 350, 1000, 1000, 240, 479, 333, 333, 604, 333, 167, 396, 556, 556, 1094, 556, 885, 489, 1115, 1000, 768, 600, 834, 834, 834, 834, 1000, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 722, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 611, 611, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 333, 333, 333, 333, 333, 333, 333, 333];
exports.LiberationSansBoldWidths = LiberationSansBoldWidths;
const LiberationSansBoldMapping = [-1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1];
exports.LiberationSansBoldMapping = LiberationSansBoldMapping;
const LiberationSansBoldItalicWidths = [365, 0, 333, 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 740, 722, 611, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 611, 778, 611, 778, 611, 778, 611, 722, 611, 722, 611, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 782, 556, 556, 278, 722, 556, 556, 611, 278, 611, 278, 611, 396, 611, 479, 611, 278, 722, 611, 722, 611, 722, 611, 708, 723, 611, 778, 611, 778, 611, 778, 611, 1000, 944, 722, 389, 722, 389, 722, 389, 667, 556, 667, 556, 667, 556, 667, 556, 611, 333, 611, 479, 611, 333, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 944, 778, 667, 556, 667, 611, 500, 611, 500, 611, 500, 278, 556, 722, 556, 1000, 889, 778, 611, 667, 556, 611, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 722, 333, 854, 906, 473, 844, 930, 847, 278, 722, 722, 610, 671, 667, 611, 722, 778, 278, 722, 667, 833, 722, 657, 778, 718, 667, 590, 611, 667, 822, 667, 829, 781, 278, 667, 620, 479, 611, 278, 591, 620, 621, 556, 610, 479, 492, 611, 558, 278, 566, 556, 603, 556, 450, 611, 712, 605, 532, 664, 409, 591, 704, 578, 773, 834, 278, 591, 611, 591, 834, 667, 667, 886, 614, 719, 667, 278, 278, 556, 1094, 1042, 854, 622, 719, 677, 719, 722, 708, 722, 614, 722, 667, 927, 643, 719, 719, 615, 687, 833, 722, 778, 719, 667, 722, 611, 677, 781, 667, 729, 708, 979, 989, 854, 1000, 708, 719, 1042, 729, 556, 619, 604, 534, 618, 556, 736, 510, 611, 611, 507, 622, 740, 604, 611, 611, 611, 556, 889, 556, 885, 556, 646, 583, 889, 935, 707, 854, 594, 552, 865, 589, 556, 556, 611, 469, 563, 556, 278, 278, 278, 969, 906, 611, 507, 619, 556, 611, 778, 611, 575, 467, 944, 778, 944, 778, 944, 778, 667, 556, 333, 333, 556, 1000, 1000, 552, 278, 278, 278, 278, 500, 500, 500, 556, 556, 350, 1000, 1000, 240, 479, 333, 333, 604, 333, 167, 396, 556, 556, 1104, 556, 885, 516, 1146, 1000, 768, 600, 834, 834, 834, 834, 999, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 722, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 611, 611, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 333, 333, 333, 333, 333, 333, 333, 333];
exports.LiberationSansBoldItalicWidths = LiberationSansBoldItalicWidths;
const LiberationSansBoldItalicMapping = [-1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1];
exports.LiberationSansBoldItalicMapping = LiberationSansBoldItalicMapping;
const LiberationSansItalicWidths = [365, 0, 333, 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 549, 611, 556, 556, 556, 556, 500, 556, 500, 667, 556, 667, 556, 667, 556, 722, 500, 722, 500, 722, 500, 722, 500, 722, 625, 722, 556, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 556, 778, 556, 778, 556, 778, 556, 722, 556, 722, 556, 278, 278, 278, 278, 278, 278, 278, 222, 278, 278, 733, 444, 500, 222, 667, 500, 500, 556, 222, 556, 222, 556, 281, 556, 400, 556, 222, 722, 556, 722, 556, 722, 556, 615, 723, 556, 778, 556, 778, 556, 778, 556, 1000, 944, 722, 333, 722, 333, 722, 333, 667, 500, 667, 500, 667, 500, 667, 500, 611, 278, 611, 354, 611, 278, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 944, 722, 667, 500, 667, 611, 500, 611, 500, 611, 500, 222, 556, 667, 556, 1000, 889, 778, 611, 667, 500, 611, 278, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 667, 278, 789, 846, 389, 794, 865, 775, 222, 667, 667, 570, 671, 667, 611, 722, 778, 278, 667, 667, 833, 722, 648, 778, 725, 667, 600, 611, 667, 837, 667, 831, 761, 278, 667, 570, 439, 555, 222, 550, 570, 571, 500, 556, 439, 463, 555, 542, 222, 500, 492, 548, 500, 447, 556, 670, 573, 486, 603, 374, 550, 652, 546, 728, 779, 222, 550, 556, 550, 779, 667, 667, 843, 544, 708, 667, 278, 278, 500, 1066, 982, 844, 589, 715, 639, 724, 667, 651, 667, 544, 704, 667, 917, 614, 715, 715, 589, 686, 833, 722, 778, 725, 667, 722, 611, 639, 795, 667, 727, 673, 920, 923, 805, 886, 651, 694, 1022, 682, 556, 562, 522, 493, 553, 556, 688, 465, 556, 556, 472, 564, 686, 550, 556, 556, 556, 500, 833, 500, 835, 500, 572, 518, 830, 851, 621, 736, 526, 492, 752, 534, 556, 556, 556, 378, 496, 500, 222, 222, 222, 910, 828, 556, 472, 565, 500, 556, 778, 556, 492, 339, 944, 722, 944, 722, 944, 722, 667, 500, 333, 333, 556, 1000, 1000, 552, 222, 222, 222, 222, 333, 333, 333, 556, 556, 350, 1000, 1000, 188, 354, 333, 333, 500, 333, 167, 365, 556, 556, 1094, 556, 885, 323, 1083, 1000, 768, 600, 834, 834, 834, 834, 1000, 500, 998, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 719, 274, 549, 549, 584, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 500, 500, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 294, 294, 324, 324, 316, 328, 398, 285];
exports.LiberationSansItalicWidths = LiberationSansItalicWidths;
const LiberationSansItalicMapping = [-1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1];
exports.LiberationSansItalicMapping = LiberationSansItalicMapping;
const LiberationSansRegularWidths = [365, 0, 333, 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 549, 611, 556, 556, 556, 556, 500, 556, 500, 667, 556, 667, 556, 667, 556, 722, 500, 722, 500, 722, 500, 722, 500, 722, 615, 722, 556, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 556, 778, 556, 778, 556, 778, 556, 722, 556, 722, 556, 278, 278, 278, 278, 278, 278, 278, 222, 278, 278, 735, 444, 500, 222, 667, 500, 500, 556, 222, 556, 222, 556, 292, 556, 334, 556, 222, 722, 556, 722, 556, 722, 556, 604, 723, 556, 778, 556, 778, 556, 778, 556, 1000, 944, 722, 333, 722, 333, 722, 333, 667, 500, 667, 500, 667, 500, 667, 500, 611, 278, 611, 375, 611, 278, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 944, 722, 667, 500, 667, 611, 500, 611, 500, 611, 500, 222, 556, 667, 556, 1000, 889, 778, 611, 667, 500, 611, 278, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 667, 278, 784, 838, 384, 774, 855, 752, 222, 667, 667, 551, 668, 667, 611, 722, 778, 278, 667, 668, 833, 722, 650, 778, 722, 667, 618, 611, 667, 798, 667, 835, 748, 278, 667, 578, 446, 556, 222, 547, 578, 575, 500, 557, 446, 441, 556, 556, 222, 500, 500, 576, 500, 448, 556, 690, 569, 482, 617, 395, 547, 648, 525, 713, 781, 222, 547, 556, 547, 781, 667, 667, 865, 542, 719, 667, 278, 278, 500, 1057, 1010, 854, 583, 722, 635, 719, 667, 656, 667, 542, 677, 667, 923, 604, 719, 719, 583, 656, 833, 722, 778, 719, 667, 722, 611, 635, 760, 667, 740, 667, 917, 938, 792, 885, 656, 719, 1010, 722, 556, 573, 531, 365, 583, 556, 669, 458, 559, 559, 438, 583, 688, 552, 556, 542, 556, 500, 458, 500, 823, 500, 573, 521, 802, 823, 625, 719, 521, 510, 750, 542, 556, 556, 556, 365, 510, 500, 222, 278, 222, 906, 812, 556, 438, 559, 500, 552, 778, 556, 489, 411, 944, 722, 944, 722, 944, 722, 667, 500, 333, 333, 556, 1000, 1000, 552, 222, 222, 222, 222, 333, 333, 333, 556, 556, 350, 1000, 1000, 188, 354, 333, 333, 500, 333, 167, 365, 556, 556, 1094, 556, 885, 323, 1073, 1000, 768, 600, 834, 834, 834, 834, 1000, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 719, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 500, 500, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 294, 294, 324, 324, 316, 328, 398, 285];
exports.LiberationSansRegularWidths = LiberationSansRegularWidths;
const LiberationSansRegularMapping = [-1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1];
exports.LiberationSansRegularMapping = LiberationSansRegularMapping;

/***/ }),
/* 55 */
/***/ ((__unused_webpack_module, exports) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.MyriadProRegularMetrics = exports.MyriadProRegularFactors = exports.MyriadProItalicMetrics = exports.MyriadProItalicFactors = exports.MyriadProBoldMetrics = exports.MyriadProBoldItalicMetrics = exports.MyriadProBoldItalicFactors = exports.MyriadProBoldFactors = void 0;
const MyriadProBoldFactors = [1.36898, 1, 1, 0.72706, 0.80479, 0.83734, 0.98894, 0.99793, 0.9897, 0.93884, 0.86209, 0.94292, 0.94292, 1.16661, 1.02058, 0.93582, 0.96694, 0.93582, 1.19137, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.78076, 0.78076, 1.02058, 1.02058, 1.02058, 0.72851, 0.78966, 0.90838, 0.83637, 0.82391, 0.96376, 0.80061, 0.86275, 0.8768, 0.95407, 1.0258, 0.73901, 0.85022, 0.83655, 1.0156, 0.95546, 0.92179, 0.87107, 0.92179, 0.82114, 0.8096, 0.89713, 0.94438, 0.95353, 0.94083, 0.91905, 0.90406, 0.9446, 0.94292, 1.18777, 0.94292, 1.02058, 0.89903, 0.90088, 0.94938, 0.97898, 0.81093, 0.97571, 0.94938, 1.024, 0.9577, 0.95933, 0.98621, 1.0474, 0.97455, 0.98981, 0.9672, 0.95933, 0.9446, 0.97898, 0.97407, 0.97646, 0.78036, 1.10208, 0.95442, 0.95298, 0.97579, 0.9332, 0.94039, 0.938, 0.80687, 1.01149, 0.80687, 1.02058, 0.80479, 0.99793, 0.99793, 0.99793, 0.99793, 1.01149, 1.00872, 0.90088, 0.91882, 1.0213, 0.8361, 1.02058, 0.62295, 0.54324, 0.89022, 1.08595, 1, 1, 0.90088, 1, 0.97455, 0.93582, 0.90088, 1, 1.05686, 0.8361, 0.99642, 0.99642, 0.99642, 0.72851, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.868, 0.82391, 0.80061, 0.80061, 0.80061, 0.80061, 1.0258, 1.0258, 1.0258, 1.0258, 0.97484, 0.95546, 0.92179, 0.92179, 0.92179, 0.92179, 0.92179, 1.02058, 0.92179, 0.94438, 0.94438, 0.94438, 0.94438, 0.90406, 0.86958, 0.98225, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.9031, 0.81093, 0.94938, 0.94938, 0.94938, 0.94938, 0.98621, 0.98621, 0.98621, 0.98621, 0.93969, 0.95933, 0.9446, 0.9446, 0.9446, 0.9446, 0.9446, 1.08595, 0.9446, 0.95442, 0.95442, 0.95442, 0.95442, 0.94039, 0.97898, 0.94039, 0.90838, 0.94938, 0.90838, 0.94938, 0.90838, 0.94938, 0.82391, 0.81093, 0.82391, 0.81093, 0.82391, 0.81093, 0.82391, 0.81093, 0.96376, 0.84313, 0.97484, 0.97571, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.8768, 0.9577, 0.8768, 0.9577, 0.8768, 0.9577, 1, 1, 0.95407, 0.95933, 0.97069, 0.95933, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 0.887, 1.01591, 0.73901, 1.0474, 1, 1, 0.97455, 0.83655, 0.98981, 1, 1, 0.83655, 0.73977, 0.83655, 0.73903, 0.84638, 1.033, 0.95546, 0.95933, 1, 1, 0.95546, 0.95933, 0.8271, 0.95417, 0.95933, 0.92179, 0.9446, 0.92179, 0.9446, 0.92179, 0.9446, 0.936, 0.91964, 0.82114, 0.97646, 1, 1, 0.82114, 0.97646, 0.8096, 0.78036, 0.8096, 0.78036, 1, 1, 0.8096, 0.78036, 1, 1, 0.89713, 0.77452, 0.89713, 1.10208, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94083, 0.97579, 0.90406, 0.94039, 0.90406, 0.9446, 0.938, 0.9446, 0.938, 0.9446, 0.938, 1, 0.99793, 0.90838, 0.94938, 0.868, 0.9031, 0.92179, 0.9446, 1, 1, 0.89713, 1.10208, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90989, 0.9358, 0.91945, 0.83181, 0.75261, 0.87992, 0.82976, 0.96034, 0.83689, 0.97268, 1.0078, 0.90838, 0.83637, 0.8019, 0.90157, 0.80061, 0.9446, 0.95407, 0.92436, 1.0258, 0.85022, 0.97153, 1.0156, 0.95546, 0.89192, 0.92179, 0.92361, 0.87107, 0.96318, 0.89713, 0.93704, 0.95638, 0.91905, 0.91709, 0.92796, 1.0258, 0.93704, 0.94836, 1.0373, 0.95933, 1.0078, 0.95871, 0.94836, 0.96174, 0.92601, 0.9498, 0.98607, 0.95776, 0.95933, 1.05453, 1.0078, 0.98275, 0.9314, 0.95617, 0.91701, 1.05993, 0.9446, 0.78367, 0.9553, 1, 0.86832, 1.0128, 0.95871, 0.99394, 0.87548, 0.96361, 0.86774, 1.0078, 0.95871, 0.9446, 0.95871, 0.86774, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.94083, 0.97579, 0.94083, 0.97579, 0.94083, 0.97579, 0.90406, 0.94039, 0.96694, 1, 0.89903, 1, 1, 1, 0.93582, 0.93582, 0.93582, 1, 0.908, 0.908, 0.918, 0.94219, 0.94219, 0.96544, 1, 1.285, 1, 1, 0.81079, 0.81079, 1, 1, 0.74854, 1, 1, 1, 1, 0.99793, 1, 1, 1, 0.65, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.17173, 1, 0.80535, 0.76169, 1.02058, 1.0732, 1.05486, 1, 1, 1.30692, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.16161, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
exports.MyriadProBoldFactors = MyriadProBoldFactors;
const MyriadProBoldMetrics = {
  lineHeight: 1.2,
  lineGap: 0.2
};
exports.MyriadProBoldMetrics = MyriadProBoldMetrics;
const MyriadProBoldItalicFactors = [1.36898, 1, 1, 0.66227, 0.80779, 0.81625, 0.97276, 0.97276, 0.97733, 0.92222, 0.83266, 0.94292, 0.94292, 1.16148, 1.02058, 0.93582, 0.96694, 0.93582, 1.17337, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.78076, 0.78076, 1.02058, 1.02058, 1.02058, 0.71541, 0.76813, 0.85576, 0.80591, 0.80729, 0.94299, 0.77512, 0.83655, 0.86523, 0.92222, 0.98621, 0.71743, 0.81698, 0.79726, 0.98558, 0.92222, 0.90637, 0.83809, 0.90637, 0.80729, 0.76463, 0.86275, 0.90699, 0.91605, 0.9154, 0.85308, 0.85458, 0.90531, 0.94292, 1.21296, 0.94292, 1.02058, 0.89903, 1.18616, 0.99613, 0.91677, 0.78216, 0.91677, 0.90083, 0.98796, 0.9135, 0.92168, 0.95381, 0.98981, 0.95298, 0.95381, 0.93459, 0.92168, 0.91513, 0.92004, 0.91677, 0.95077, 0.748, 1.04502, 0.91677, 0.92061, 0.94236, 0.89544, 0.89364, 0.9, 0.80687, 0.8578, 0.80687, 1.02058, 0.80779, 0.97276, 0.97276, 0.97276, 0.97276, 0.8578, 0.99973, 1.18616, 0.91339, 1.08074, 0.82891, 1.02058, 0.55509, 0.71526, 0.89022, 1.08595, 1, 1, 1.18616, 1, 0.96736, 0.93582, 1.18616, 1, 1.04864, 0.82711, 0.99043, 0.99043, 0.99043, 0.71541, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.845, 0.80729, 0.77512, 0.77512, 0.77512, 0.77512, 0.98621, 0.98621, 0.98621, 0.98621, 0.95961, 0.92222, 0.90637, 0.90637, 0.90637, 0.90637, 0.90637, 1.02058, 0.90251, 0.90699, 0.90699, 0.90699, 0.90699, 0.85458, 0.83659, 0.94951, 0.99613, 0.99613, 0.99613, 0.99613, 0.99613, 0.99613, 0.85811, 0.78216, 0.90083, 0.90083, 0.90083, 0.90083, 0.95381, 0.95381, 0.95381, 0.95381, 0.9135, 0.92168, 0.91513, 0.91513, 0.91513, 0.91513, 0.91513, 1.08595, 0.91677, 0.91677, 0.91677, 0.91677, 0.91677, 0.89364, 0.92332, 0.89364, 0.85576, 0.99613, 0.85576, 0.99613, 0.85576, 0.99613, 0.80729, 0.78216, 0.80729, 0.78216, 0.80729, 0.78216, 0.80729, 0.78216, 0.94299, 0.76783, 0.95961, 0.91677, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.86523, 0.9135, 0.86523, 0.9135, 0.86523, 0.9135, 1, 1, 0.92222, 0.92168, 0.92222, 0.92168, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.86036, 0.97096, 0.71743, 0.98981, 1, 1, 0.95298, 0.79726, 0.95381, 1, 1, 0.79726, 0.6894, 0.79726, 0.74321, 0.81691, 1.0006, 0.92222, 0.92168, 1, 1, 0.92222, 0.92168, 0.79464, 0.92098, 0.92168, 0.90637, 0.91513, 0.90637, 0.91513, 0.90637, 0.91513, 0.909, 0.87514, 0.80729, 0.95077, 1, 1, 0.80729, 0.95077, 0.76463, 0.748, 0.76463, 0.748, 1, 1, 0.76463, 0.748, 1, 1, 0.86275, 0.72651, 0.86275, 1.04502, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.9154, 0.94236, 0.85458, 0.89364, 0.85458, 0.90531, 0.9, 0.90531, 0.9, 0.90531, 0.9, 1, 0.97276, 0.85576, 0.99613, 0.845, 0.85811, 0.90251, 0.91677, 1, 1, 0.86275, 1.04502, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.00899, 1.30628, 0.85576, 0.80178, 0.66862, 0.7927, 0.69323, 0.88127, 0.72459, 0.89711, 0.95381, 0.85576, 0.80591, 0.7805, 0.94729, 0.77512, 0.90531, 0.92222, 0.90637, 0.98621, 0.81698, 0.92655, 0.98558, 0.92222, 0.85359, 0.90637, 0.90976, 0.83809, 0.94523, 0.86275, 0.83509, 0.93157, 0.85308, 0.83392, 0.92346, 0.98621, 0.83509, 0.92886, 0.91324, 0.92168, 0.95381, 0.90646, 0.92886, 0.90557, 0.86847, 0.90276, 0.91324, 0.86842, 0.92168, 0.99531, 0.95381, 0.9224, 0.85408, 0.92699, 0.86847, 1.0051, 0.91513, 0.80487, 0.93481, 1, 0.88159, 1.05214, 0.90646, 0.97355, 0.81539, 0.89398, 0.85923, 0.95381, 0.90646, 0.91513, 0.90646, 0.85923, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9154, 0.94236, 0.9154, 0.94236, 0.9154, 0.94236, 0.85458, 0.89364, 0.96694, 1, 0.89903, 1, 1, 1, 0.91782, 0.91782, 0.91782, 1, 0.896, 0.896, 0.896, 0.9332, 0.9332, 0.95973, 1, 1.26, 1, 1, 0.80479, 0.80178, 1, 1, 0.85633, 1, 1, 1, 1, 0.97276, 1, 1, 1, 0.698, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.14542, 1, 0.79199, 0.78694, 1.02058, 1.03493, 1.05486, 1, 1, 1.23026, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.20006, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
exports.MyriadProBoldItalicFactors = MyriadProBoldItalicFactors;
const MyriadProBoldItalicMetrics = {
  lineHeight: 1.2,
  lineGap: 0.2
};
exports.MyriadProBoldItalicMetrics = MyriadProBoldItalicMetrics;
const MyriadProItalicFactors = [1.36898, 1, 1, 0.65507, 0.84943, 0.85639, 0.88465, 0.88465, 0.86936, 0.88307, 0.86948, 0.85283, 0.85283, 1.06383, 1.02058, 0.75945, 0.9219, 0.75945, 1.17337, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.75945, 0.75945, 1.02058, 1.02058, 1.02058, 0.69046, 0.70926, 0.85158, 0.77812, 0.76852, 0.89591, 0.70466, 0.76125, 0.80094, 0.86822, 0.83864, 0.728, 0.77212, 0.79475, 0.93637, 0.87514, 0.8588, 0.76013, 0.8588, 0.72421, 0.69866, 0.77598, 0.85991, 0.80811, 0.87832, 0.78112, 0.77512, 0.8562, 1.0222, 1.18417, 1.0222, 1.27014, 0.89903, 1.15012, 0.93859, 0.94399, 0.846, 0.94399, 0.81453, 1.0186, 0.94219, 0.96017, 1.03075, 1.02175, 0.912, 1.03075, 0.96998, 0.96017, 0.93859, 0.94399, 0.94399, 0.95493, 0.746, 1.12658, 0.94578, 0.91, 0.979, 0.882, 0.882, 0.83, 0.85034, 0.83537, 0.85034, 1.02058, 0.70869, 0.88465, 0.88465, 0.88465, 0.88465, 0.83537, 0.90083, 1.15012, 0.9161, 0.94565, 0.73541, 1.02058, 0.53609, 0.69353, 0.79519, 1.08595, 1, 1, 1.15012, 1, 0.91974, 0.75945, 1.15012, 1, 0.9446, 0.73361, 0.9005, 0.9005, 0.9005, 0.62864, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.773, 0.76852, 0.70466, 0.70466, 0.70466, 0.70466, 0.83864, 0.83864, 0.83864, 0.83864, 0.90561, 0.87514, 0.8588, 0.8588, 0.8588, 0.8588, 0.8588, 1.02058, 0.85751, 0.85991, 0.85991, 0.85991, 0.85991, 0.77512, 0.76013, 0.88075, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 0.8075, 0.846, 0.81453, 0.81453, 0.81453, 0.81453, 0.82424, 0.82424, 0.82424, 0.82424, 0.9278, 0.96017, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 1.08595, 0.8562, 0.94578, 0.94578, 0.94578, 0.94578, 0.882, 0.94578, 0.882, 0.85158, 0.93859, 0.85158, 0.93859, 0.85158, 0.93859, 0.76852, 0.846, 0.76852, 0.846, 0.76852, 0.846, 0.76852, 0.846, 0.89591, 0.8544, 0.90561, 0.94399, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.80094, 0.94219, 0.80094, 0.94219, 0.80094, 0.94219, 1, 1, 0.86822, 0.96017, 0.86822, 0.96017, 0.83864, 0.82424, 0.83864, 0.82424, 0.83864, 0.82424, 0.83864, 1.03075, 0.83864, 0.82424, 0.81402, 1.02738, 0.728, 1.02175, 1, 1, 0.912, 0.79475, 1.03075, 1, 1, 0.79475, 0.83911, 0.79475, 0.66266, 0.80553, 1.06676, 0.87514, 0.96017, 1, 1, 0.87514, 0.96017, 0.86865, 0.87396, 0.96017, 0.8588, 0.93859, 0.8588, 0.93859, 0.8588, 0.93859, 0.867, 0.84759, 0.72421, 0.95493, 1, 1, 0.72421, 0.95493, 0.69866, 0.746, 0.69866, 0.746, 1, 1, 0.69866, 0.746, 1, 1, 0.77598, 0.88417, 0.77598, 1.12658, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.87832, 0.979, 0.77512, 0.882, 0.77512, 0.8562, 0.83, 0.8562, 0.83, 0.8562, 0.83, 1, 0.88465, 0.85158, 0.93859, 0.773, 0.8075, 0.85751, 0.8562, 1, 1, 0.77598, 1.12658, 1.15012, 1.15012, 1.15012, 1.15012, 1.15012, 1.15313, 1.15012, 1.15012, 1.15012, 1.08106, 1.03901, 0.85158, 0.77025, 0.62264, 0.7646, 0.65351, 0.86026, 0.69461, 0.89947, 1.03075, 0.85158, 0.77812, 0.76449, 0.88836, 0.70466, 0.8562, 0.86822, 0.8588, 0.83864, 0.77212, 0.85308, 0.93637, 0.87514, 0.82352, 0.8588, 0.85701, 0.76013, 0.89058, 0.77598, 0.8156, 0.82565, 0.78112, 0.77899, 0.89386, 0.83864, 0.8156, 0.9486, 0.92388, 0.96186, 1.03075, 0.91123, 0.9486, 0.93298, 0.878, 0.93942, 0.92388, 0.84596, 0.96186, 0.95119, 1.03075, 0.922, 0.88787, 0.95829, 0.88, 0.93559, 0.93859, 0.78815, 0.93758, 1, 0.89217, 1.03737, 0.91123, 0.93969, 0.77487, 0.85769, 0.86799, 1.03075, 0.91123, 0.93859, 0.91123, 0.86799, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.87832, 0.979, 0.87832, 0.979, 0.87832, 0.979, 0.77512, 0.882, 0.9219, 1, 0.89903, 1, 1, 1, 0.87321, 0.87321, 0.87321, 1, 1.027, 1.027, 1.027, 0.86847, 0.86847, 0.79121, 1, 1.124, 1, 1, 0.73572, 0.73572, 1, 1, 0.85034, 1, 1, 1, 1, 0.88465, 1, 1, 1, 0.669, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.04828, 1, 0.74948, 0.75187, 1.02058, 0.98391, 1.02119, 1, 1, 1.06233, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05233, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
exports.MyriadProItalicFactors = MyriadProItalicFactors;
const MyriadProItalicMetrics = {
  lineHeight: 1.2,
  lineGap: 0.2
};
exports.MyriadProItalicMetrics = MyriadProItalicMetrics;
const MyriadProRegularFactors = [1.36898, 1, 1, 0.76305, 0.82784, 0.94935, 0.89364, 0.92241, 0.89073, 0.90706, 0.98472, 0.85283, 0.85283, 1.0664, 1.02058, 0.74505, 0.9219, 0.74505, 1.23456, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.74505, 0.74505, 1.02058, 1.02058, 1.02058, 0.73002, 0.72601, 0.91755, 0.8126, 0.80314, 0.92222, 0.73764, 0.79726, 0.83051, 0.90284, 0.86023, 0.74, 0.8126, 0.84869, 0.96518, 0.91115, 0.8858, 0.79761, 0.8858, 0.74498, 0.73914, 0.81363, 0.89591, 0.83659, 0.89633, 0.85608, 0.8111, 0.90531, 1.0222, 1.22736, 1.0222, 1.27014, 0.89903, 0.90088, 0.86667, 1.0231, 0.896, 1.01411, 0.90083, 1.05099, 1.00512, 0.99793, 1.05326, 1.09377, 0.938, 1.06226, 1.00119, 0.99793, 0.98714, 1.0231, 1.01231, 0.98196, 0.792, 1.19137, 0.99074, 0.962, 1.01915, 0.926, 0.942, 0.856, 0.85034, 0.92006, 0.85034, 1.02058, 0.69067, 0.92241, 0.92241, 0.92241, 0.92241, 0.92006, 0.9332, 0.90088, 0.91882, 0.93484, 0.75339, 1.02058, 0.56866, 0.54324, 0.79519, 1.08595, 1, 1, 0.90088, 1, 0.95325, 0.74505, 0.90088, 1, 0.97198, 0.75339, 0.91009, 0.91009, 0.91009, 0.66466, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.788, 0.80314, 0.73764, 0.73764, 0.73764, 0.73764, 0.86023, 0.86023, 0.86023, 0.86023, 0.92915, 0.91115, 0.8858, 0.8858, 0.8858, 0.8858, 0.8858, 1.02058, 0.8858, 0.89591, 0.89591, 0.89591, 0.89591, 0.8111, 0.79611, 0.89713, 0.86667, 0.86667, 0.86667, 0.86667, 0.86667, 0.86667, 0.86936, 0.896, 0.90083, 0.90083, 0.90083, 0.90083, 0.84224, 0.84224, 0.84224, 0.84224, 0.97276, 0.99793, 0.98714, 0.98714, 0.98714, 0.98714, 0.98714, 1.08595, 0.89876, 0.99074, 0.99074, 0.99074, 0.99074, 0.942, 1.0231, 0.942, 0.91755, 0.86667, 0.91755, 0.86667, 0.91755, 0.86667, 0.80314, 0.896, 0.80314, 0.896, 0.80314, 0.896, 0.80314, 0.896, 0.92222, 0.93372, 0.92915, 1.01411, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.83051, 1.00512, 0.83051, 1.00512, 0.83051, 1.00512, 1, 1, 0.90284, 0.99793, 0.90976, 0.99793, 0.86023, 0.84224, 0.86023, 0.84224, 0.86023, 0.84224, 0.86023, 1.05326, 0.86023, 0.84224, 0.82873, 1.07469, 0.74, 1.09377, 1, 1, 0.938, 0.84869, 1.06226, 1, 1, 0.84869, 0.83704, 0.84869, 0.81441, 0.85588, 1.08927, 0.91115, 0.99793, 1, 1, 0.91115, 0.99793, 0.91887, 0.90991, 0.99793, 0.8858, 0.98714, 0.8858, 0.98714, 0.8858, 0.98714, 0.894, 0.91434, 0.74498, 0.98196, 1, 1, 0.74498, 0.98196, 0.73914, 0.792, 0.73914, 0.792, 1, 1, 0.73914, 0.792, 1, 1, 0.81363, 0.904, 0.81363, 1.19137, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89633, 1.01915, 0.8111, 0.942, 0.8111, 0.90531, 0.856, 0.90531, 0.856, 0.90531, 0.856, 1, 0.92241, 0.91755, 0.86667, 0.788, 0.86936, 0.8858, 0.89876, 1, 1, 0.81363, 1.19137, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90388, 1.03901, 0.92138, 0.78105, 0.7154, 0.86169, 0.80513, 0.94007, 0.82528, 0.98612, 1.06226, 0.91755, 0.8126, 0.81884, 0.92819, 0.73764, 0.90531, 0.90284, 0.8858, 0.86023, 0.8126, 0.91172, 0.96518, 0.91115, 0.83089, 0.8858, 0.87791, 0.79761, 0.89297, 0.81363, 0.88157, 0.89992, 0.85608, 0.81992, 0.94307, 0.86023, 0.88157, 0.95308, 0.98699, 0.99793, 1.06226, 0.95817, 0.95308, 0.97358, 0.928, 0.98088, 0.98699, 0.92761, 0.99793, 0.96017, 1.06226, 0.986, 0.944, 0.95978, 0.938, 0.96705, 0.98714, 0.80442, 0.98972, 1, 0.89762, 1.04552, 0.95817, 0.99007, 0.87064, 0.91879, 0.88888, 1.06226, 0.95817, 0.98714, 0.95817, 0.88888, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89633, 1.01915, 0.89633, 1.01915, 0.89633, 1.01915, 0.8111, 0.942, 0.9219, 1, 0.89903, 1, 1, 1, 0.93173, 0.93173, 0.93173, 1, 1.06304, 1.06304, 1.06904, 0.89903, 0.89903, 0.80549, 1, 1.156, 1, 1, 0.76575, 0.76575, 1, 1, 0.72458, 1, 1, 1, 1, 0.92241, 1, 1, 1, 0.619, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.07257, 1, 0.74705, 0.71119, 1.02058, 1.024, 1.02119, 1, 1, 1.1536, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05638, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
exports.MyriadProRegularFactors = MyriadProRegularFactors;
const MyriadProRegularMetrics = {
  lineHeight: 1.2,
  lineGap: 0.2
};
exports.MyriadProRegularMetrics = MyriadProRegularMetrics;

/***/ }),
/* 56 */
/***/ ((__unused_webpack_module, exports) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.SegoeuiRegularMetrics = exports.SegoeuiRegularFactors = exports.SegoeuiItalicMetrics = exports.SegoeuiItalicFactors = exports.SegoeuiBoldMetrics = exports.SegoeuiBoldItalicMetrics = exports.SegoeuiBoldItalicFactors = exports.SegoeuiBoldFactors = void 0;
const SegoeuiBoldFactors = [1.76738, 1, 1, 0.99297, 0.9824, 1.04016, 1.06497, 1.03424, 0.97529, 1.17647, 1.23203, 1.1085, 1.1085, 1.16939, 1.2107, 0.9754, 1.21408, 0.9754, 1.59578, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 0.81378, 0.81378, 1.2107, 1.2107, 1.2107, 0.71703, 0.97847, 0.97363, 0.88776, 0.8641, 1.02096, 0.79795, 0.85132, 0.914, 1.06085, 1.1406, 0.8007, 0.89858, 0.83693, 1.14889, 1.09398, 0.97489, 0.92094, 0.97489, 0.90399, 0.84041, 0.95923, 1.00135, 1, 1.06467, 0.98243, 0.90996, 0.99361, 1.1085, 1.56942, 1.1085, 1.2107, 0.74627, 0.94282, 0.96752, 1.01519, 0.86304, 1.01359, 0.97278, 1.15103, 1.01359, 0.98561, 1.02285, 1.02285, 1.00527, 1.02285, 1.0302, 0.99041, 1.0008, 1.01519, 1.01359, 1.02258, 0.79104, 1.16862, 0.99041, 0.97454, 1.02511, 0.99298, 0.96752, 0.95801, 0.94856, 1.16579, 0.94856, 1.2107, 0.9824, 1.03424, 1.03424, 1, 1.03424, 1.16579, 0.8727, 1.3871, 1.18622, 1.10818, 1.04478, 1.2107, 1.18622, 0.75155, 0.94994, 1.28826, 1.21408, 1.21408, 0.91056, 1, 0.91572, 0.9754, 0.64663, 1.18328, 1.24866, 1.04478, 1.14169, 1.15749, 1.17389, 0.71703, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.93506, 0.8641, 0.79795, 0.79795, 0.79795, 0.79795, 1.1406, 1.1406, 1.1406, 1.1406, 1.02096, 1.09398, 0.97426, 0.97426, 0.97426, 0.97426, 0.97426, 1.2107, 0.97489, 1.00135, 1.00135, 1.00135, 1.00135, 0.90996, 0.92094, 1.02798, 0.96752, 0.96752, 0.96752, 0.96752, 0.96752, 0.96752, 0.93136, 0.86304, 0.97278, 0.97278, 0.97278, 0.97278, 1.02285, 1.02285, 1.02285, 1.02285, 0.97122, 0.99041, 1, 1, 1, 1, 1, 1.28826, 1.0008, 0.99041, 0.99041, 0.99041, 0.99041, 0.96752, 1.01519, 0.96752, 0.97363, 0.96752, 0.97363, 0.96752, 0.97363, 0.96752, 0.8641, 0.86304, 0.8641, 0.86304, 0.8641, 0.86304, 0.8641, 0.86304, 1.02096, 1.03057, 1.02096, 1.03517, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.914, 1.01359, 0.914, 1.01359, 0.914, 1.01359, 1, 1, 1.06085, 0.98561, 1.06085, 1.00879, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 0.97138, 1.08692, 0.8007, 1.02285, 1, 1, 1.00527, 0.83693, 1.02285, 1, 1, 0.83693, 0.9455, 0.83693, 0.90418, 0.83693, 1.13005, 1.09398, 0.99041, 1, 1, 1.09398, 0.99041, 0.96692, 1.09251, 0.99041, 0.97489, 1.0008, 0.97489, 1.0008, 0.97489, 1.0008, 0.93994, 0.97931, 0.90399, 1.02258, 1, 1, 0.90399, 1.02258, 0.84041, 0.79104, 0.84041, 0.79104, 0.84041, 0.79104, 0.84041, 0.79104, 1, 1, 0.95923, 1.07034, 0.95923, 1.16862, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.06467, 1.02511, 0.90996, 0.96752, 0.90996, 0.99361, 0.95801, 0.99361, 0.95801, 0.99361, 0.95801, 1.07733, 1.03424, 0.97363, 0.96752, 0.93506, 0.93136, 0.97489, 1.0008, 1, 1, 0.95923, 1.16862, 1.15103, 1.15103, 1.01173, 1.03959, 0.75953, 0.81378, 0.79912, 1.15103, 1.21994, 0.95161, 0.87815, 1.01149, 0.81525, 0.7676, 0.98167, 1.01134, 1.02546, 0.84097, 1.03089, 1.18102, 0.97363, 0.88776, 0.85134, 0.97826, 0.79795, 0.99361, 1.06085, 0.97489, 1.1406, 0.89858, 1.0388, 1.14889, 1.09398, 0.86039, 0.97489, 1.0595, 0.92094, 0.94793, 0.95923, 0.90996, 0.99346, 0.98243, 1.02112, 0.95493, 1.1406, 0.90996, 1.03574, 1.02597, 1.0008, 1.18102, 1.06628, 1.03574, 1.0192, 1.01932, 1.00886, 0.97531, 1.0106, 1.0008, 1.13189, 1.18102, 1.02277, 0.98683, 1.0016, 0.99561, 1.07237, 1.0008, 0.90434, 0.99921, 0.93803, 0.8965, 1.23085, 1.06628, 1.04983, 0.96268, 1.0499, 0.98439, 1.18102, 1.06628, 1.0008, 1.06628, 0.98439, 0.79795, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.09466, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.97278, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.02065, 1, 1, 1, 1, 1, 1, 1.06467, 1.02511, 1.06467, 1.02511, 1.06467, 1.02511, 0.90996, 0.96752, 1, 1.21408, 0.89903, 1, 1, 0.75155, 1.04394, 1.04394, 1.04394, 1.04394, 0.98633, 0.98633, 0.98633, 0.73047, 0.73047, 1.20642, 0.91211, 1.25635, 1.222, 1.02956, 1.03372, 1.03372, 0.96039, 1.24633, 1, 1.12454, 0.93503, 1.03424, 1.19687, 1.03424, 1, 1, 1, 0.771, 1, 1, 1.15749, 1.15749, 1.15749, 1.10948, 0.86279, 0.94434, 0.86279, 0.94434, 0.86182, 1, 1, 1.16897, 1, 0.96085, 0.90137, 1.2107, 1.18416, 1.13973, 0.69825, 0.9716, 2.10339, 1.29004, 1.29004, 1.21172, 1.29004, 1.29004, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18874, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.09193, 1.09193, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
exports.SegoeuiBoldFactors = SegoeuiBoldFactors;
const SegoeuiBoldMetrics = {
  lineHeight: 1.33008,
  lineGap: 0
};
exports.SegoeuiBoldMetrics = SegoeuiBoldMetrics;
const SegoeuiBoldItalicFactors = [1.76738, 1, 1, 0.98946, 1.03959, 1.04016, 1.02809, 1.036, 0.97639, 1.10953, 1.23203, 1.11144, 1.11144, 1.16939, 1.21237, 0.9754, 1.21261, 0.9754, 1.59754, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 0.81378, 0.81378, 1.21237, 1.21237, 1.21237, 0.73541, 0.97847, 0.97363, 0.89723, 0.87897, 1.0426, 0.79429, 0.85292, 0.91149, 1.05815, 1.1406, 0.79631, 0.90128, 0.83853, 1.04396, 1.10615, 0.97552, 0.94436, 0.97552, 0.88641, 0.80527, 0.96083, 1.00135, 1, 1.06777, 0.9817, 0.91142, 0.99361, 1.11144, 1.57293, 1.11144, 1.21237, 0.74627, 1.31818, 1.06585, 0.97042, 0.83055, 0.97042, 0.93503, 1.1261, 0.97042, 0.97922, 1.14236, 0.94552, 1.01054, 1.14236, 1.02471, 0.97922, 0.94165, 0.97042, 0.97042, 1.0276, 0.78929, 1.1261, 0.97922, 0.95874, 1.02197, 0.98507, 0.96752, 0.97168, 0.95107, 1.16579, 0.95107, 1.21237, 1.03959, 1.036, 1.036, 1, 1.036, 1.16579, 0.87357, 1.31818, 1.18754, 1.26781, 1.05356, 1.21237, 1.18622, 0.79487, 0.94994, 1.29004, 1.24047, 1.24047, 1.31818, 1, 0.91484, 0.9754, 1.31818, 1.1349, 1.24866, 1.05356, 1.13934, 1.15574, 1.17389, 0.73541, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.94385, 0.87897, 0.79429, 0.79429, 0.79429, 0.79429, 1.1406, 1.1406, 1.1406, 1.1406, 1.0426, 1.10615, 0.97552, 0.97552, 0.97552, 0.97552, 0.97552, 1.21237, 0.97552, 1.00135, 1.00135, 1.00135, 1.00135, 0.91142, 0.94436, 0.98721, 1.06585, 1.06585, 1.06585, 1.06585, 1.06585, 1.06585, 0.96705, 0.83055, 0.93503, 0.93503, 0.93503, 0.93503, 1.14236, 1.14236, 1.14236, 1.14236, 0.93125, 0.97922, 0.94165, 0.94165, 0.94165, 0.94165, 0.94165, 1.29004, 0.94165, 0.97922, 0.97922, 0.97922, 0.97922, 0.96752, 0.97042, 0.96752, 0.97363, 1.06585, 0.97363, 1.06585, 0.97363, 1.06585, 0.87897, 0.83055, 0.87897, 0.83055, 0.87897, 0.83055, 0.87897, 0.83055, 1.0426, 1.0033, 1.0426, 0.97042, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.91149, 0.97042, 0.91149, 0.97042, 0.91149, 0.97042, 1, 1, 1.05815, 0.97922, 1.05815, 0.97922, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 0.97441, 1.04302, 0.79631, 1.01582, 1, 1, 1.01054, 0.83853, 1.14236, 1, 1, 0.83853, 1.09125, 0.83853, 0.90418, 0.83853, 1.19508, 1.10615, 0.97922, 1, 1, 1.10615, 0.97922, 1.01034, 1.10466, 0.97922, 0.97552, 0.94165, 0.97552, 0.94165, 0.97552, 0.94165, 0.91602, 0.91981, 0.88641, 1.0276, 1, 1, 0.88641, 1.0276, 0.80527, 0.78929, 0.80527, 0.78929, 0.80527, 0.78929, 0.80527, 0.78929, 1, 1, 0.96083, 1.05403, 0.95923, 1.16862, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.06777, 1.02197, 0.91142, 0.96752, 0.91142, 0.99361, 0.97168, 0.99361, 0.97168, 0.99361, 0.97168, 1.23199, 1.036, 0.97363, 1.06585, 0.94385, 0.96705, 0.97552, 0.94165, 1, 1, 0.96083, 1.1261, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 0.95161, 1.27126, 1.00811, 0.83284, 0.77702, 0.99137, 0.95253, 1.0347, 0.86142, 1.07205, 1.14236, 0.97363, 0.89723, 0.86869, 1.09818, 0.79429, 0.99361, 1.05815, 0.97552, 1.1406, 0.90128, 1.06662, 1.04396, 1.10615, 0.84918, 0.97552, 1.04694, 0.94436, 0.98015, 0.96083, 0.91142, 1.00356, 0.9817, 1.01945, 0.98999, 1.1406, 0.91142, 1.04961, 0.9898, 1.00639, 1.14236, 1.07514, 1.04961, 0.99607, 1.02897, 1.008, 0.9898, 0.95134, 1.00639, 1.11121, 1.14236, 1.00518, 0.97981, 1.02186, 1, 1.08578, 0.94165, 0.99314, 0.98387, 0.93028, 0.93377, 1.35125, 1.07514, 1.10687, 0.93491, 1.04232, 1.00351, 1.14236, 1.07514, 0.94165, 1.07514, 1.00351, 0.79429, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.09097, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.93503, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.96609, 1, 1, 1, 1, 1, 1, 1.06777, 1.02197, 1.06777, 1.02197, 1.06777, 1.02197, 0.91142, 0.96752, 1, 1.21261, 0.89903, 1, 1, 0.75155, 1.04745, 1.04745, 1.04745, 1.04394, 0.98633, 0.98633, 0.98633, 0.72959, 0.72959, 1.20502, 0.91406, 1.26514, 1.222, 1.02956, 1.03372, 1.03372, 0.96039, 1.24633, 1, 1.09125, 0.93327, 1.03336, 1.16541, 1.036, 1, 1, 1, 0.771, 1, 1, 1.15574, 1.15574, 1.15574, 1.15574, 0.86364, 0.94434, 0.86279, 0.94434, 0.86224, 1, 1, 1.16798, 1, 0.96085, 0.90068, 1.21237, 1.18416, 1.13904, 0.69825, 0.9716, 2.10339, 1.29004, 1.29004, 1.21339, 1.29004, 1.29004, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18775, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.13269, 1.13269, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
exports.SegoeuiBoldItalicFactors = SegoeuiBoldItalicFactors;
const SegoeuiBoldItalicMetrics = {
  lineHeight: 1.33008,
  lineGap: 0
};
exports.SegoeuiBoldItalicMetrics = SegoeuiBoldItalicMetrics;
const SegoeuiItalicFactors = [1.76738, 1, 1, 0.98946, 1.14763, 1.05365, 1.06234, 0.96927, 0.92586, 1.15373, 1.18414, 0.91349, 0.91349, 1.07403, 1.17308, 0.78383, 1.20088, 0.78383, 1.42531, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.78383, 0.78383, 1.17308, 1.17308, 1.17308, 0.77349, 0.94565, 0.94729, 0.85944, 0.88506, 0.9858, 0.74817, 0.80016, 0.88449, 0.98039, 0.95782, 0.69238, 0.89898, 0.83231, 0.98183, 1.03989, 0.96924, 0.86237, 0.96924, 0.80595, 0.74524, 0.86091, 0.95402, 0.94143, 0.98448, 0.8858, 0.83089, 0.93285, 1.0949, 1.39016, 1.0949, 1.45994, 0.74627, 1.04839, 0.97454, 0.97454, 0.87207, 0.97454, 0.87533, 1.06151, 0.97454, 1.00176, 1.16484, 1.08132, 0.98047, 1.16484, 1.02989, 1.01054, 0.96225, 0.97454, 0.97454, 1.06598, 0.79004, 1.16344, 1.00351, 0.94629, 0.9973, 0.91016, 0.96777, 0.9043, 0.91082, 0.92481, 0.91082, 1.17308, 0.95748, 0.96927, 0.96927, 1, 0.96927, 0.92481, 0.80597, 1.04839, 1.23393, 1.1781, 0.9245, 1.17308, 1.20808, 0.63218, 0.94261, 1.24822, 1.09971, 1.09971, 1.04839, 1, 0.85273, 0.78032, 1.04839, 1.09971, 1.22326, 0.9245, 1.09836, 1.13525, 1.15222, 0.70424, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.85498, 0.88506, 0.74817, 0.74817, 0.74817, 0.74817, 0.95782, 0.95782, 0.95782, 0.95782, 0.9858, 1.03989, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 1.17308, 0.96924, 0.95402, 0.95402, 0.95402, 0.95402, 0.83089, 0.86237, 0.88409, 0.97454, 0.97454, 0.97454, 0.97454, 0.97454, 0.97454, 0.92916, 0.87207, 0.87533, 0.87533, 0.87533, 0.87533, 0.93146, 0.93146, 0.93146, 0.93146, 0.93854, 1.01054, 0.96225, 0.96225, 0.96225, 0.96225, 0.96225, 1.24822, 0.8761, 1.00351, 1.00351, 1.00351, 1.00351, 0.96777, 0.97454, 0.96777, 0.94729, 0.97454, 0.94729, 0.97454, 0.94729, 0.97454, 0.88506, 0.87207, 0.88506, 0.87207, 0.88506, 0.87207, 0.88506, 0.87207, 0.9858, 0.95391, 0.9858, 0.97454, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.88449, 0.97454, 0.88449, 0.97454, 0.88449, 0.97454, 1, 1, 0.98039, 1.00176, 0.98039, 1.00176, 0.95782, 0.93146, 0.95782, 0.93146, 0.95782, 0.93146, 0.95782, 1.16484, 0.95782, 0.93146, 0.84421, 1.12761, 0.69238, 1.08132, 1, 1, 0.98047, 0.83231, 1.16484, 1, 1, 0.84723, 1.04861, 0.84723, 0.78755, 0.83231, 1.23736, 1.03989, 1.01054, 1, 1, 1.03989, 1.01054, 0.9857, 1.03849, 1.01054, 0.96924, 0.96225, 0.96924, 0.96225, 0.96924, 0.96225, 0.92383, 0.90171, 0.80595, 1.06598, 1, 1, 0.80595, 1.06598, 0.74524, 0.79004, 0.74524, 0.79004, 0.74524, 0.79004, 0.74524, 0.79004, 1, 1, 0.86091, 1.02759, 0.85771, 1.16344, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.98448, 0.9973, 0.83089, 0.96777, 0.83089, 0.93285, 0.9043, 0.93285, 0.9043, 0.93285, 0.9043, 1.31868, 0.96927, 0.94729, 0.97454, 0.85498, 0.92916, 0.96924, 0.8761, 1, 1, 0.86091, 1.16344, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 0.81965, 0.81965, 0.94729, 0.78032, 0.71022, 0.90883, 0.84171, 0.99877, 0.77596, 1.05734, 1.2, 0.94729, 0.85944, 0.82791, 0.9607, 0.74817, 0.93285, 0.98039, 0.96924, 0.95782, 0.89898, 0.98316, 0.98183, 1.03989, 0.78614, 0.96924, 0.97642, 0.86237, 0.86075, 0.86091, 0.83089, 0.90082, 0.8858, 0.97296, 1.01284, 0.95782, 0.83089, 1.0976, 1.04, 1.03342, 1.2, 1.0675, 1.0976, 0.98205, 1.03809, 1.05097, 1.04, 0.95364, 1.03342, 1.05401, 1.2, 1.02148, 1.0119, 1.04724, 1.0127, 1.02732, 0.96225, 0.8965, 0.97783, 0.93574, 0.94818, 1.30679, 1.0675, 1.11826, 0.99821, 1.0557, 1.0326, 1.2, 1.0675, 0.96225, 1.0675, 1.0326, 0.74817, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.03754, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.87533, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.98705, 1, 1, 1, 1, 1, 1, 0.98448, 0.9973, 0.98448, 0.9973, 0.98448, 0.9973, 0.83089, 0.96777, 1, 1.20088, 0.89903, 1, 1, 0.75155, 0.94945, 0.94945, 0.94945, 0.94945, 1.12317, 1.12317, 1.12317, 0.67603, 0.67603, 1.15621, 0.73584, 1.21191, 1.22135, 1.06483, 0.94868, 0.94868, 0.95996, 1.24633, 1, 1.07497, 0.87709, 0.96927, 1.01473, 0.96927, 1, 1, 1, 0.77295, 1, 1, 1.09836, 1.09836, 1.09836, 1.01522, 0.86321, 0.94434, 0.8649, 0.94434, 0.86182, 1, 1, 1.083, 1, 0.91578, 0.86438, 1.17308, 1.18416, 1.14589, 0.69825, 0.97622, 1.96791, 1.24822, 1.24822, 1.17308, 1.24822, 1.24822, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.17984, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.10742, 1.10742, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
exports.SegoeuiItalicFactors = SegoeuiItalicFactors;
const SegoeuiItalicMetrics = {
  lineHeight: 1.33008,
  lineGap: 0
};
exports.SegoeuiItalicMetrics = SegoeuiItalicMetrics;
const SegoeuiRegularFactors = [1.76738, 1, 1, 0.98594, 1.02285, 1.10454, 1.06234, 0.96927, 0.92037, 1.19985, 1.2046, 0.90616, 0.90616, 1.07152, 1.1714, 0.78032, 1.20088, 0.78032, 1.40246, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.78032, 0.78032, 1.1714, 1.1714, 1.1714, 0.80597, 0.94084, 0.96706, 0.85944, 0.85734, 0.97093, 0.75842, 0.79936, 0.88198, 0.9831, 0.95782, 0.71387, 0.86969, 0.84636, 1.07796, 1.03584, 0.96924, 0.83968, 0.96924, 0.82826, 0.79649, 0.85771, 0.95132, 0.93119, 0.98965, 0.88433, 0.8287, 0.93365, 1.08612, 1.3638, 1.08612, 1.45786, 0.74627, 0.80499, 0.91484, 1.05707, 0.92383, 1.05882, 0.9403, 1.12654, 1.05882, 1.01756, 1.09011, 1.09011, 0.99414, 1.09011, 1.034, 1.01756, 1.05356, 1.05707, 1.05882, 1.04399, 0.84863, 1.21968, 1.01756, 0.95801, 1.00068, 0.91797, 0.96777, 0.9043, 0.90351, 0.92105, 0.90351, 1.1714, 0.85337, 0.96927, 0.96927, 0.99912, 0.96927, 0.92105, 0.80597, 1.2434, 1.20808, 1.05937, 0.90957, 1.1714, 1.20808, 0.75155, 0.94261, 1.24644, 1.09971, 1.09971, 0.84751, 1, 0.85273, 0.78032, 0.61584, 1.05425, 1.17914, 0.90957, 1.08665, 1.11593, 1.14169, 0.73381, 0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.86035, 0.85734, 0.75842, 0.75842, 0.75842, 0.75842, 0.95782, 0.95782, 0.95782, 0.95782, 0.97093, 1.03584, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 1.1714, 0.96924, 0.95132, 0.95132, 0.95132, 0.95132, 0.8287, 0.83968, 0.89049, 0.91484, 0.91484, 0.91484, 0.91484, 0.91484, 0.91484, 0.93575, 0.92383, 0.9403, 0.9403, 0.9403, 0.9403, 0.8717, 0.8717, 0.8717, 0.8717, 1.00527, 1.01756, 1.05356, 1.05356, 1.05356, 1.05356, 1.05356, 1.24644, 0.95923, 1.01756, 1.01756, 1.01756, 1.01756, 0.96777, 1.05707, 0.96777, 0.96706, 0.91484, 0.96706, 0.91484, 0.96706, 0.91484, 0.85734, 0.92383, 0.85734, 0.92383, 0.85734, 0.92383, 0.85734, 0.92383, 0.97093, 1.0969, 0.97093, 1.05882, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.88198, 1.05882, 0.88198, 1.05882, 0.88198, 1.05882, 1, 1, 0.9831, 1.01756, 0.9831, 1.01756, 0.95782, 0.8717, 0.95782, 0.8717, 0.95782, 0.8717, 0.95782, 1.09011, 0.95782, 0.8717, 0.84784, 1.11551, 0.71387, 1.09011, 1, 1, 0.99414, 0.84636, 1.09011, 1, 1, 0.84636, 1.0536, 0.84636, 0.94298, 0.84636, 1.23297, 1.03584, 1.01756, 1, 1, 1.03584, 1.01756, 1.00323, 1.03444, 1.01756, 0.96924, 1.05356, 0.96924, 1.05356, 0.96924, 1.05356, 0.93066, 0.98293, 0.82826, 1.04399, 1, 1, 0.82826, 1.04399, 0.79649, 0.84863, 0.79649, 0.84863, 0.79649, 0.84863, 0.79649, 0.84863, 1, 1, 0.85771, 1.17318, 0.85771, 1.21968, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.98965, 1.00068, 0.8287, 0.96777, 0.8287, 0.93365, 0.9043, 0.93365, 0.9043, 0.93365, 0.9043, 1.08571, 0.96927, 0.96706, 0.91484, 0.86035, 0.93575, 0.96924, 0.95923, 1, 1, 0.85771, 1.21968, 1.11437, 1.11437, 0.93109, 0.91202, 0.60411, 0.84164, 0.55572, 1.01173, 0.97361, 0.81818, 0.81818, 0.96635, 0.78032, 0.72727, 0.92366, 0.98601, 1.03405, 0.77968, 1.09799, 1.2, 0.96706, 0.85944, 0.85638, 0.96491, 0.75842, 0.93365, 0.9831, 0.96924, 0.95782, 0.86969, 0.94152, 1.07796, 1.03584, 0.78437, 0.96924, 0.98715, 0.83968, 0.83491, 0.85771, 0.8287, 0.94492, 0.88433, 0.9287, 1.0098, 0.95782, 0.8287, 1.0625, 0.98248, 1.03424, 1.2, 1.01071, 1.0625, 0.95246, 1.03809, 1.04912, 0.98248, 1.00221, 1.03424, 1.05443, 1.2, 1.04785, 0.99609, 1.00169, 1.05176, 0.99346, 1.05356, 0.9087, 1.03004, 0.95542, 0.93117, 1.23362, 1.01071, 1.07831, 1.02512, 1.05205, 1.03502, 1.2, 1.01071, 1.05356, 1.01071, 1.03502, 0.75842, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.03719, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9403, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.04021, 1, 1, 1, 1, 1, 1, 0.98965, 1.00068, 0.98965, 1.00068, 0.98965, 1.00068, 0.8287, 0.96777, 1, 1.20088, 0.89903, 1, 1, 0.75155, 1.03077, 1.03077, 1.03077, 1.03077, 1.13196, 1.13196, 1.13196, 0.67428, 0.67428, 1.16039, 0.73291, 1.20996, 1.22135, 1.06483, 0.94868, 0.94868, 0.95996, 1.24633, 1, 1.07497, 0.87796, 0.96927, 1.01518, 0.96927, 1, 1, 1, 0.77295, 1, 1, 1.10539, 1.10539, 1.11358, 1.06967, 0.86279, 0.94434, 0.86279, 0.94434, 0.86182, 1, 1, 1.083, 1, 0.91578, 0.86507, 1.1714, 1.18416, 1.14589, 0.69825, 0.97622, 1.9697, 1.24822, 1.24822, 1.17238, 1.24822, 1.24822, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18083, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.10938, 1.10938, 1, 1, 1, 1.05425, 1.09971, 1.09971, 1.09971, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
exports.SegoeuiRegularFactors = SegoeuiRegularFactors;
const SegoeuiRegularMetrics = {
  lineHeight: 1.33008,
  lineGap: 0
};
exports.SegoeuiRegularMetrics = SegoeuiRegularMetrics;

/***/ }),
/* 57 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.PostScriptEvaluator = exports.PostScriptCompiler = exports.PDFFunctionFactory = void 0;
exports.isPDFFunction = isPDFFunction;
var _primitives = __w_pdfjs_require__(4);
var _util = __w_pdfjs_require__(2);
var _ps_parser = __w_pdfjs_require__(58);
var _base_stream = __w_pdfjs_require__(5);
var _image_utils = __w_pdfjs_require__(59);
class PDFFunctionFactory {
  constructor({
    xref,
    isEvalSupported = true
  }) {
    this.xref = xref;
    this.isEvalSupported = isEvalSupported !== false;
  }
  create(fn) {
    const cachedFunction = this.getCached(fn);
    if (cachedFunction) {
      return cachedFunction;
    }
    const parsedFunction = PDFFunction.parse({
      xref: this.xref,
      isEvalSupported: this.isEvalSupported,
      fn: fn instanceof _primitives.Ref ? this.xref.fetch(fn) : fn
    });
    this._cache(fn, parsedFunction);
    return parsedFunction;
  }
  createFromArray(fnObj) {
    const cachedFunction = this.getCached(fnObj);
    if (cachedFunction) {
      return cachedFunction;
    }
    const parsedFunction = PDFFunction.parseArray({
      xref: this.xref,
      isEvalSupported: this.isEvalSupported,
      fnObj: fnObj instanceof _primitives.Ref ? this.xref.fetch(fnObj) : fnObj
    });
    this._cache(fnObj, parsedFunction);
    return parsedFunction;
  }
  getCached(cacheKey) {
    let fnRef;
    if (cacheKey instanceof _primitives.Ref) {
      fnRef = cacheKey;
    } else if (cacheKey instanceof _primitives.Dict) {
      fnRef = cacheKey.objId;
    } else if (cacheKey instanceof _base_stream.BaseStream) {
      fnRef = cacheKey.dict?.objId;
    }
    if (fnRef) {
      const localFunction = this._localFunctionCache.getByRef(fnRef);
      if (localFunction) {
        return localFunction;
      }
    }
    return null;
  }
  _cache(cacheKey, parsedFunction) {
    if (!parsedFunction) {
      throw new Error('PDFFunctionFactory._cache - expected "parsedFunction" argument.');
    }
    let fnRef;
    if (cacheKey instanceof _primitives.Ref) {
      fnRef = cacheKey;
    } else if (cacheKey instanceof _primitives.Dict) {
      fnRef = cacheKey.objId;
    } else if (cacheKey instanceof _base_stream.BaseStream) {
      fnRef = cacheKey.dict?.objId;
    }
    if (fnRef) {
      this._localFunctionCache.set(null, fnRef, parsedFunction);
    }
  }
  get _localFunctionCache() {
    return (0, _util.shadow)(this, "_localFunctionCache", new _image_utils.LocalFunctionCache());
  }
}
exports.PDFFunctionFactory = PDFFunctionFactory;
function toNumberArray(arr) {
  if (!Array.isArray(arr)) {
    return null;
  }
  const length = arr.length;
  for (let i = 0; i < length; i++) {
    if (typeof arr[i] !== "number") {
      const result = new Array(length);
      for (let j = 0; j < length; j++) {
        result[j] = +arr[j];
      }
      return result;
    }
  }
  return arr;
}
class PDFFunction {
  static getSampleArray(size, outputSize, bps, stream) {
    let i, ii;
    let length = 1;
    for (i = 0, ii = size.length; i < ii; i++) {
      length *= size[i];
    }
    length *= outputSize;
    const array = new Array(length);
    let codeSize = 0;
    let codeBuf = 0;
    const sampleMul = 1.0 / (2.0 ** bps - 1);
    const strBytes = stream.getBytes((length * bps + 7) / 8);
    let strIdx = 0;
    for (i = 0; i < length; i++) {
      while (codeSize < bps) {
        codeBuf <<= 8;
        codeBuf |= strBytes[strIdx++];
        codeSize += 8;
      }
      codeSize -= bps;
      array[i] = (codeBuf >> codeSize) * sampleMul;
      codeBuf &= (1 << codeSize) - 1;
    }
    return array;
  }
  static parse({
    xref,
    isEvalSupported,
    fn
  }) {
    const dict = fn.dict || fn;
    const typeNum = dict.get("FunctionType");
    switch (typeNum) {
      case 0:
        return this.constructSampled({
          xref,
          isEvalSupported,
          fn,
          dict
        });
      case 1:
        break;
      case 2:
        return this.constructInterpolated({
          xref,
          isEvalSupported,
          dict
        });
      case 3:
        return this.constructStiched({
          xref,
          isEvalSupported,
          dict
        });
      case 4:
        return this.constructPostScript({
          xref,
          isEvalSupported,
          fn,
          dict
        });
    }
    throw new _util.FormatError("Unknown type of function");
  }
  static parseArray({
    xref,
    isEvalSupported,
    fnObj
  }) {
    if (!Array.isArray(fnObj)) {
      return this.parse({
        xref,
        isEvalSupported,
        fn: fnObj
      });
    }
    const fnArray = [];
    for (const fn of fnObj) {
      fnArray.push(this.parse({
        xref,
        isEvalSupported,
        fn: xref.fetchIfRef(fn)
      }));
    }
    return function (src, srcOffset, dest, destOffset) {
      for (let i = 0, ii = fnArray.length; i < ii; i++) {
        fnArray[i](src, srcOffset, dest, destOffset + i);
      }
    };
  }
  static constructSampled({
    xref,
    isEvalSupported,
    fn,
    dict
  }) {
    function toMultiArray(arr) {
      const inputLength = arr.length;
      const out = [];
      let index = 0;
      for (let i = 0; i < inputLength; i += 2) {
        out[index++] = [arr[i], arr[i + 1]];
      }
      return out;
    }
    function interpolate(x, xmin, xmax, ymin, ymax) {
      return ymin + (x - xmin) * ((ymax - ymin) / (xmax - xmin));
    }
    let domain = toNumberArray(dict.getArray("Domain"));
    let range = toNumberArray(dict.getArray("Range"));
    if (!domain || !range) {
      throw new _util.FormatError("No domain or range");
    }
    const inputSize = domain.length / 2;
    const outputSize = range.length / 2;
    domain = toMultiArray(domain);
    range = toMultiArray(range);
    const size = toNumberArray(dict.getArray("Size"));
    const bps = dict.get("BitsPerSample");
    const order = dict.get("Order") || 1;
    if (order !== 1) {
      (0, _util.info)("No support for cubic spline interpolation: " + order);
    }
    let encode = toNumberArray(dict.getArray("Encode"));
    if (!encode) {
      encode = [];
      for (let i = 0; i < inputSize; ++i) {
        encode.push([0, size[i] - 1]);
      }
    } else {
      encode = toMultiArray(encode);
    }
    let decode = toNumberArray(dict.getArray("Decode"));
    decode = !decode ? range : toMultiArray(decode);
    const samples = this.getSampleArray(size, outputSize, bps, fn);
    return function constructSampledFn(src, srcOffset, dest, destOffset) {
      const cubeVertices = 1 << inputSize;
      const cubeN = new Float64Array(cubeVertices);
      const cubeVertex = new Uint32Array(cubeVertices);
      let i, j;
      for (j = 0; j < cubeVertices; j++) {
        cubeN[j] = 1;
      }
      let k = outputSize,
        pos = 1;
      for (i = 0; i < inputSize; ++i) {
        const domain_2i = domain[i][0];
        const domain_2i_1 = domain[i][1];
        const xi = Math.min(Math.max(src[srcOffset + i], domain_2i), domain_2i_1);
        let e = interpolate(xi, domain_2i, domain_2i_1, encode[i][0], encode[i][1]);
        const size_i = size[i];
        e = Math.min(Math.max(e, 0), size_i - 1);
        const e0 = e < size_i - 1 ? Math.floor(e) : e - 1;
        const n0 = e0 + 1 - e;
        const n1 = e - e0;
        const offset0 = e0 * k;
        const offset1 = offset0 + k;
        for (j = 0; j < cubeVertices; j++) {
          if (j & pos) {
            cubeN[j] *= n1;
            cubeVertex[j] += offset1;
          } else {
            cubeN[j] *= n0;
            cubeVertex[j] += offset0;
          }
        }
        k *= size_i;
        pos <<= 1;
      }
      for (j = 0; j < outputSize; ++j) {
        let rj = 0;
        for (i = 0; i < cubeVertices; i++) {
          rj += samples[cubeVertex[i] + j] * cubeN[i];
        }
        rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]);
        dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]), range[j][1]);
      }
    };
  }
  static constructInterpolated({
    xref,
    isEvalSupported,
    dict
  }) {
    const c0 = toNumberArray(dict.getArray("C0")) || [0];
    const c1 = toNumberArray(dict.getArray("C1")) || [1];
    const n = dict.get("N");
    const diff = [];
    for (let i = 0, ii = c0.length; i < ii; ++i) {
      diff.push(c1[i] - c0[i]);
    }
    const length = diff.length;
    return function constructInterpolatedFn(src, srcOffset, dest, destOffset) {
      const x = n === 1 ? src[srcOffset] : src[srcOffset] ** n;
      for (let j = 0; j < length; ++j) {
        dest[destOffset + j] = c0[j] + x * diff[j];
      }
    };
  }
  static constructStiched({
    xref,
    isEvalSupported,
    dict
  }) {
    const domain = toNumberArray(dict.getArray("Domain"));
    if (!domain) {
      throw new _util.FormatError("No domain");
    }
    const inputSize = domain.length / 2;
    if (inputSize !== 1) {
      throw new _util.FormatError("Bad domain for stiched function");
    }
    const fns = [];
    for (const fn of dict.get("Functions")) {
      fns.push(this.parse({
        xref,
        isEvalSupported,
        fn: xref.fetchIfRef(fn)
      }));
    }
    const bounds = toNumberArray(dict.getArray("Bounds"));
    const encode = toNumberArray(dict.getArray("Encode"));
    const tmpBuf = new Float32Array(1);
    return function constructStichedFn(src, srcOffset, dest, destOffset) {
      const clip = function constructStichedFromIRClip(v, min, max) {
        if (v > max) {
          v = max;
        } else if (v < min) {
          v = min;
        }
        return v;
      };
      const v = clip(src[srcOffset], domain[0], domain[1]);
      const length = bounds.length;
      let i;
      for (i = 0; i < length; ++i) {
        if (v < bounds[i]) {
          break;
        }
      }
      let dmin = domain[0];
      if (i > 0) {
        dmin = bounds[i - 1];
      }
      let dmax = domain[1];
      if (i < bounds.length) {
        dmax = bounds[i];
      }
      const rmin = encode[2 * i];
      const rmax = encode[2 * i + 1];
      tmpBuf[0] = dmin === dmax ? rmin : rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin);
      fns[i](tmpBuf, 0, dest, destOffset);
    };
  }
  static constructPostScript({
    xref,
    isEvalSupported,
    fn,
    dict
  }) {
    const domain = toNumberArray(dict.getArray("Domain"));
    const range = toNumberArray(dict.getArray("Range"));
    if (!domain) {
      throw new _util.FormatError("No domain.");
    }
    if (!range) {
      throw new _util.FormatError("No range.");
    }
    const lexer = new _ps_parser.PostScriptLexer(fn);
    const parser = new _ps_parser.PostScriptParser(lexer);
    const code = parser.parse();
    if (isEvalSupported && _util.FeatureTest.isEvalSupported) {
      const compiled = new PostScriptCompiler().compile(code, domain, range);
      if (compiled) {
        return new Function("src", "srcOffset", "dest", "destOffset", compiled);
      }
    }
    (0, _util.info)("Unable to compile PS function");
    const numOutputs = range.length >> 1;
    const numInputs = domain.length >> 1;
    const evaluator = new PostScriptEvaluator(code);
    const cache = Object.create(null);
    const MAX_CACHE_SIZE = 2048 * 4;
    let cache_available = MAX_CACHE_SIZE;
    const tmpBuf = new Float32Array(numInputs);
    return function constructPostScriptFn(src, srcOffset, dest, destOffset) {
      let i, value;
      let key = "";
      const input = tmpBuf;
      for (i = 0; i < numInputs; i++) {
        value = src[srcOffset + i];
        input[i] = value;
        key += value + "_";
      }
      const cachedValue = cache[key];
      if (cachedValue !== undefined) {
        dest.set(cachedValue, destOffset);
        return;
      }
      const output = new Float32Array(numOutputs);
      const stack = evaluator.execute(input);
      const stackIndex = stack.length - numOutputs;
      for (i = 0; i < numOutputs; i++) {
        value = stack[stackIndex + i];
        let bound = range[i * 2];
        if (value < bound) {
          value = bound;
        } else {
          bound = range[i * 2 + 1];
          if (value > bound) {
            value = bound;
          }
        }
        output[i] = value;
      }
      if (cache_available > 0) {
        cache_available--;
        cache[key] = output;
      }
      dest.set(output, destOffset);
    };
  }
}
function isPDFFunction(v) {
  let fnDict;
  if (v instanceof _primitives.Dict) {
    fnDict = v;
  } else if (v instanceof _base_stream.BaseStream) {
    fnDict = v.dict;
  } else {
    return false;
  }
  return fnDict.has("FunctionType");
}
class PostScriptStack {
  static MAX_STACK_SIZE = 100;
  constructor(initialStack) {
    this.stack = initialStack ? Array.from(initialStack) : [];
  }
  push(value) {
    if (this.stack.length >= PostScriptStack.MAX_STACK_SIZE) {
      throw new Error("PostScript function stack overflow.");
    }
    this.stack.push(value);
  }
  pop() {
    if (this.stack.length <= 0) {
      throw new Error("PostScript function stack underflow.");
    }
    return this.stack.pop();
  }
  copy(n) {
    if (this.stack.length + n >= PostScriptStack.MAX_STACK_SIZE) {
      throw new Error("PostScript function stack overflow.");
    }
    const stack = this.stack;
    for (let i = stack.length - n, j = n - 1; j >= 0; j--, i++) {
      stack.push(stack[i]);
    }
  }
  index(n) {
    this.push(this.stack[this.stack.length - n - 1]);
  }
  roll(n, p) {
    const stack = this.stack;
    const l = stack.length - n;
    const r = stack.length - 1;
    const c = l + (p - Math.floor(p / n) * n);
    for (let i = l, j = r; i < j; i++, j--) {
      const t = stack[i];
      stack[i] = stack[j];
      stack[j] = t;
    }
    for (let i = l, j = c - 1; i < j; i++, j--) {
      const t = stack[i];
      stack[i] = stack[j];
      stack[j] = t;
    }
    for (let i = c, j = r; i < j; i++, j--) {
      const t = stack[i];
      stack[i] = stack[j];
      stack[j] = t;
    }
  }
}
class PostScriptEvaluator {
  constructor(operators) {
    this.operators = operators;
  }
  execute(initialStack) {
    const stack = new PostScriptStack(initialStack);
    let counter = 0;
    const operators = this.operators;
    const length = operators.length;
    let operator, a, b;
    while (counter < length) {
      operator = operators[counter++];
      if (typeof operator === "number") {
        stack.push(operator);
        continue;
      }
      switch (operator) {
        case "jz":
          b = stack.pop();
          a = stack.pop();
          if (!a) {
            counter = b;
          }
          break;
        case "j":
          a = stack.pop();
          counter = a;
          break;
        case "abs":
          a = stack.pop();
          stack.push(Math.abs(a));
          break;
        case "add":
          b = stack.pop();
          a = stack.pop();
          stack.push(a + b);
          break;
        case "and":
          b = stack.pop();
          a = stack.pop();
          if (typeof a === "boolean" && typeof b === "boolean") {
            stack.push(a && b);
          } else {
            stack.push(a & b);
          }
          break;
        case "atan":
          b = stack.pop();
          a = stack.pop();
          a = Math.atan2(a, b) / Math.PI * 180;
          if (a < 0) {
            a += 360;
          }
          stack.push(a);
          break;
        case "bitshift":
          b = stack.pop();
          a = stack.pop();
          if (a > 0) {
            stack.push(a << b);
          } else {
            stack.push(a >> b);
          }
          break;
        case "ceiling":
          a = stack.pop();
          stack.push(Math.ceil(a));
          break;
        case "copy":
          a = stack.pop();
          stack.copy(a);
          break;
        case "cos":
          a = stack.pop();
          stack.push(Math.cos(a % 360 / 180 * Math.PI));
          break;
        case "cvi":
          a = stack.pop() | 0;
          stack.push(a);
          break;
        case "cvr":
          break;
        case "div":
          b = stack.pop();
          a = stack.pop();
          stack.push(a / b);
          break;
        case "dup":
          stack.copy(1);
          break;
        case "eq":
          b = stack.pop();
          a = stack.pop();
          stack.push(a === b);
          break;
        case "exch":
          stack.roll(2, 1);
          break;
        case "exp":
          b = stack.pop();
          a = stack.pop();
          stack.push(a ** b);
          break;
        case "false":
          stack.push(false);
          break;
        case "floor":
          a = stack.pop();
          stack.push(Math.floor(a));
          break;
        case "ge":
          b = stack.pop();
          a = stack.pop();
          stack.push(a >= b);
          break;
        case "gt":
          b = stack.pop();
          a = stack.pop();
          stack.push(a > b);
          break;
        case "idiv":
          b = stack.pop();
          a = stack.pop();
          stack.push(a / b | 0);
          break;
        case "index":
          a = stack.pop();
          stack.index(a);
          break;
        case "le":
          b = stack.pop();
          a = stack.pop();
          stack.push(a <= b);
          break;
        case "ln":
          a = stack.pop();
          stack.push(Math.log(a));
          break;
        case "log":
          a = stack.pop();
          stack.push(Math.log10(a));
          break;
        case "lt":
          b = stack.pop();
          a = stack.pop();
          stack.push(a < b);
          break;
        case "mod":
          b = stack.pop();
          a = stack.pop();
          stack.push(a % b);
          break;
        case "mul":
          b = stack.pop();
          a = stack.pop();
          stack.push(a * b);
          break;
        case "ne":
          b = stack.pop();
          a = stack.pop();
          stack.push(a !== b);
          break;
        case "neg":
          a = stack.pop();
          stack.push(-a);
          break;
        case "not":
          a = stack.pop();
          if (typeof a === "boolean") {
            stack.push(!a);
          } else {
            stack.push(~a);
          }
          break;
        case "or":
          b = stack.pop();
          a = stack.pop();
          if (typeof a === "boolean" && typeof b === "boolean") {
            stack.push(a || b);
          } else {
            stack.push(a | b);
          }
          break;
        case "pop":
          stack.pop();
          break;
        case "roll":
          b = stack.pop();
          a = stack.pop();
          stack.roll(a, b);
          break;
        case "round":
          a = stack.pop();
          stack.push(Math.round(a));
          break;
        case "sin":
          a = stack.pop();
          stack.push(Math.sin(a % 360 / 180 * Math.PI));
          break;
        case "sqrt":
          a = stack.pop();
          stack.push(Math.sqrt(a));
          break;
        case "sub":
          b = stack.pop();
          a = stack.pop();
          stack.push(a - b);
          break;
        case "true":
          stack.push(true);
          break;
        case "truncate":
          a = stack.pop();
          a = a < 0 ? Math.ceil(a) : Math.floor(a);
          stack.push(a);
          break;
        case "xor":
          b = stack.pop();
          a = stack.pop();
          if (typeof a === "boolean" && typeof b === "boolean") {
            stack.push(a !== b);
          } else {
            stack.push(a ^ b);
          }
          break;
        default:
          throw new _util.FormatError(`Unknown operator ${operator}`);
      }
    }
    return stack.stack;
  }
}
exports.PostScriptEvaluator = PostScriptEvaluator;
class AstNode {
  constructor(type) {
    this.type = type;
  }
  visit(visitor) {
    (0, _util.unreachable)("abstract method");
  }
}
class AstArgument extends AstNode {
  constructor(index, min, max) {
    super("args");
    this.index = index;
    this.min = min;
    this.max = max;
  }
  visit(visitor) {
    visitor.visitArgument(this);
  }
}
class AstLiteral extends AstNode {
  constructor(number) {
    super("literal");
    this.number = number;
    this.min = number;
    this.max = number;
  }
  visit(visitor) {
    visitor.visitLiteral(this);
  }
}
class AstBinaryOperation extends AstNode {
  constructor(op, arg1, arg2, min, max) {
    super("binary");
    this.op = op;
    this.arg1 = arg1;
    this.arg2 = arg2;
    this.min = min;
    this.max = max;
  }
  visit(visitor) {
    visitor.visitBinaryOperation(this);
  }
}
class AstMin extends AstNode {
  constructor(arg, max) {
    super("max");
    this.arg = arg;
    this.min = arg.min;
    this.max = max;
  }
  visit(visitor) {
    visitor.visitMin(this);
  }
}
class AstVariable extends AstNode {
  constructor(index, min, max) {
    super("var");
    this.index = index;
    this.min = min;
    this.max = max;
  }
  visit(visitor) {
    visitor.visitVariable(this);
  }
}
class AstVariableDefinition extends AstNode {
  constructor(variable, arg) {
    super("definition");
    this.variable = variable;
    this.arg = arg;
  }
  visit(visitor) {
    visitor.visitVariableDefinition(this);
  }
}
class ExpressionBuilderVisitor {
  constructor() {
    this.parts = [];
  }
  visitArgument(arg) {
    this.parts.push("Math.max(", arg.min, ", Math.min(", arg.max, ", src[srcOffset + ", arg.index, "]))");
  }
  visitVariable(variable) {
    this.parts.push("v", variable.index);
  }
  visitLiteral(literal) {
    this.parts.push(literal.number);
  }
  visitBinaryOperation(operation) {
    this.parts.push("(");
    operation.arg1.visit(this);
    this.parts.push(" ", operation.op, " ");
    operation.arg2.visit(this);
    this.parts.push(")");
  }
  visitVariableDefinition(definition) {
    this.parts.push("var ");
    definition.variable.visit(this);
    this.parts.push(" = ");
    definition.arg.visit(this);
    this.parts.push(";");
  }
  visitMin(max) {
    this.parts.push("Math.min(");
    max.arg.visit(this);
    this.parts.push(", ", max.max, ")");
  }
  toString() {
    return this.parts.join("");
  }
}
function buildAddOperation(num1, num2) {
  if (num2.type === "literal" && num2.number === 0) {
    return num1;
  }
  if (num1.type === "literal" && num1.number === 0) {
    return num2;
  }
  if (num2.type === "literal" && num1.type === "literal") {
    return new AstLiteral(num1.number + num2.number);
  }
  return new AstBinaryOperation("+", num1, num2, num1.min + num2.min, num1.max + num2.max);
}
function buildMulOperation(num1, num2) {
  if (num2.type === "literal") {
    if (num2.number === 0) {
      return new AstLiteral(0);
    } else if (num2.number === 1) {
      return num1;
    } else if (num1.type === "literal") {
      return new AstLiteral(num1.number * num2.number);
    }
  }
  if (num1.type === "literal") {
    if (num1.number === 0) {
      return new AstLiteral(0);
    } else if (num1.number === 1) {
      return num2;
    }
  }
  const min = Math.min(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max);
  const max = Math.max(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max);
  return new AstBinaryOperation("*", num1, num2, min, max);
}
function buildSubOperation(num1, num2) {
  if (num2.type === "literal") {
    if (num2.number === 0) {
      return num1;
    } else if (num1.type === "literal") {
      return new AstLiteral(num1.number - num2.number);
    }
  }
  if (num2.type === "binary" && num2.op === "-" && num1.type === "literal" && num1.number === 1 && num2.arg1.type === "literal" && num2.arg1.number === 1) {
    return num2.arg2;
  }
  return new AstBinaryOperation("-", num1, num2, num1.min - num2.max, num1.max - num2.min);
}
function buildMinOperation(num1, max) {
  if (num1.min >= max) {
    return new AstLiteral(max);
  } else if (num1.max <= max) {
    return num1;
  }
  return new AstMin(num1, max);
}
class PostScriptCompiler {
  compile(code, domain, range) {
    const stack = [];
    const instructions = [];
    const inputSize = domain.length >> 1,
      outputSize = range.length >> 1;
    let lastRegister = 0;
    let n, j;
    let num1, num2, ast1, ast2, tmpVar, item;
    for (let i = 0; i < inputSize; i++) {
      stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1]));
    }
    for (let i = 0, ii = code.length; i < ii; i++) {
      item = code[i];
      if (typeof item === "number") {
        stack.push(new AstLiteral(item));
        continue;
      }
      switch (item) {
        case "add":
          if (stack.length < 2) {
            return null;
          }
          num2 = stack.pop();
          num1 = stack.pop();
          stack.push(buildAddOperation(num1, num2));
          break;
        case "cvr":
          if (stack.length < 1) {
            return null;
          }
          break;
        case "mul":
          if (stack.length < 2) {
            return null;
          }
          num2 = stack.pop();
          num1 = stack.pop();
          stack.push(buildMulOperation(num1, num2));
          break;
        case "sub":
          if (stack.length < 2) {
            return null;
          }
          num2 = stack.pop();
          num1 = stack.pop();
          stack.push(buildSubOperation(num1, num2));
          break;
        case "exch":
          if (stack.length < 2) {
            return null;
          }
          ast1 = stack.pop();
          ast2 = stack.pop();
          stack.push(ast1, ast2);
          break;
        case "pop":
          if (stack.length < 1) {
            return null;
          }
          stack.pop();
          break;
        case "index":
          if (stack.length < 1) {
            return null;
          }
          num1 = stack.pop();
          if (num1.type !== "literal") {
            return null;
          }
          n = num1.number;
          if (n < 0 || !Number.isInteger(n) || stack.length < n) {
            return null;
          }
          ast1 = stack[stack.length - n - 1];
          if (ast1.type === "literal" || ast1.type === "var") {
            stack.push(ast1);
            break;
          }
          tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max);
          stack[stack.length - n - 1] = tmpVar;
          stack.push(tmpVar);
          instructions.push(new AstVariableDefinition(tmpVar, ast1));
          break;
        case "dup":
          if (stack.length < 1) {
            return null;
          }
          if (typeof code[i + 1] === "number" && code[i + 2] === "gt" && code[i + 3] === i + 7 && code[i + 4] === "jz" && code[i + 5] === "pop" && code[i + 6] === code[i + 1]) {
            num1 = stack.pop();
            stack.push(buildMinOperation(num1, code[i + 1]));
            i += 6;
            break;
          }
          ast1 = stack.at(-1);
          if (ast1.type === "literal" || ast1.type === "var") {
            stack.push(ast1);
            break;
          }
          tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max);
          stack[stack.length - 1] = tmpVar;
          stack.push(tmpVar);
          instructions.push(new AstVariableDefinition(tmpVar, ast1));
          break;
        case "roll":
          if (stack.length < 2) {
            return null;
          }
          num2 = stack.pop();
          num1 = stack.pop();
          if (num2.type !== "literal" || num1.type !== "literal") {
            return null;
          }
          j = num2.number;
          n = num1.number;
          if (n <= 0 || !Number.isInteger(n) || !Number.isInteger(j) || stack.length < n) {
            return null;
          }
          j = (j % n + n) % n;
          if (j === 0) {
            break;
          }
          stack.push(...stack.splice(stack.length - n, n - j));
          break;
        default:
          return null;
      }
    }
    if (stack.length !== outputSize) {
      return null;
    }
    const result = [];
    for (const instruction of instructions) {
      const statementBuilder = new ExpressionBuilderVisitor();
      instruction.visit(statementBuilder);
      result.push(statementBuilder.toString());
    }
    for (let i = 0, ii = stack.length; i < ii; i++) {
      const expr = stack[i],
        statementBuilder = new ExpressionBuilderVisitor();
      expr.visit(statementBuilder);
      const min = range[i * 2],
        max = range[i * 2 + 1];
      const out = [statementBuilder.toString()];
      if (min > expr.min) {
        out.unshift("Math.max(", min, ", ");
        out.push(")");
      }
      if (max < expr.max) {
        out.unshift("Math.min(", max, ", ");
        out.push(")");
      }
      out.unshift("dest[destOffset + ", i, "] = ");
      out.push(";");
      result.push(out.join(""));
    }
    return result.join("\n");
  }
}
exports.PostScriptCompiler = PostScriptCompiler;

/***/ }),
/* 58 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.PostScriptParser = exports.PostScriptLexer = void 0;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(4);
var _core_utils = __w_pdfjs_require__(3);
class PostScriptParser {
  constructor(lexer) {
    this.lexer = lexer;
    this.operators = [];
    this.token = null;
    this.prev = null;
  }
  nextToken() {
    this.prev = this.token;
    this.token = this.lexer.getToken();
  }
  accept(type) {
    if (this.token.type === type) {
      this.nextToken();
      return true;
    }
    return false;
  }
  expect(type) {
    if (this.accept(type)) {
      return true;
    }
    throw new _util.FormatError(`Unexpected symbol: found ${this.token.type} expected ${type}.`);
  }
  parse() {
    this.nextToken();
    this.expect(PostScriptTokenTypes.LBRACE);
    this.parseBlock();
    this.expect(PostScriptTokenTypes.RBRACE);
    return this.operators;
  }
  parseBlock() {
    while (true) {
      if (this.accept(PostScriptTokenTypes.NUMBER)) {
        this.operators.push(this.prev.value);
      } else if (this.accept(PostScriptTokenTypes.OPERATOR)) {
        this.operators.push(this.prev.value);
      } else if (this.accept(PostScriptTokenTypes.LBRACE)) {
        this.parseCondition();
      } else {
        return;
      }
    }
  }
  parseCondition() {
    const conditionLocation = this.operators.length;
    this.operators.push(null, null);
    this.parseBlock();
    this.expect(PostScriptTokenTypes.RBRACE);
    if (this.accept(PostScriptTokenTypes.IF)) {
      this.operators[conditionLocation] = this.operators.length;
      this.operators[conditionLocation + 1] = "jz";
    } else if (this.accept(PostScriptTokenTypes.LBRACE)) {
      const jumpLocation = this.operators.length;
      this.operators.push(null, null);
      const endOfTrue = this.operators.length;
      this.parseBlock();
      this.expect(PostScriptTokenTypes.RBRACE);
      this.expect(PostScriptTokenTypes.IFELSE);
      this.operators[jumpLocation] = this.operators.length;
      this.operators[jumpLocation + 1] = "j";
      this.operators[conditionLocation] = endOfTrue;
      this.operators[conditionLocation + 1] = "jz";
    } else {
      throw new _util.FormatError("PS Function: error parsing conditional.");
    }
  }
}
exports.PostScriptParser = PostScriptParser;
const PostScriptTokenTypes = {
  LBRACE: 0,
  RBRACE: 1,
  NUMBER: 2,
  OPERATOR: 3,
  IF: 4,
  IFELSE: 5
};
class PostScriptToken {
  static get opCache() {
    return (0, _util.shadow)(this, "opCache", Object.create(null));
  }
  constructor(type, value) {
    this.type = type;
    this.value = value;
  }
  static getOperator(op) {
    return PostScriptToken.opCache[op] ||= new PostScriptToken(PostScriptTokenTypes.OPERATOR, op);
  }
  static get LBRACE() {
    return (0, _util.shadow)(this, "LBRACE", new PostScriptToken(PostScriptTokenTypes.LBRACE, "{"));
  }
  static get RBRACE() {
    return (0, _util.shadow)(this, "RBRACE", new PostScriptToken(PostScriptTokenTypes.RBRACE, "}"));
  }
  static get IF() {
    return (0, _util.shadow)(this, "IF", new PostScriptToken(PostScriptTokenTypes.IF, "IF"));
  }
  static get IFELSE() {
    return (0, _util.shadow)(this, "IFELSE", new PostScriptToken(PostScriptTokenTypes.IFELSE, "IFELSE"));
  }
}
class PostScriptLexer {
  constructor(stream) {
    this.stream = stream;
    this.nextChar();
    this.strBuf = [];
  }
  nextChar() {
    return this.currentChar = this.stream.getByte();
  }
  getToken() {
    let comment = false;
    let ch = this.currentChar;
    while (true) {
      if (ch < 0) {
        return _primitives.EOF;
      }
      if (comment) {
        if (ch === 0x0a || ch === 0x0d) {
          comment = false;
        }
      } else if (ch === 0x25) {
        comment = true;
      } else if (!(0, _core_utils.isWhiteSpace)(ch)) {
        break;
      }
      ch = this.nextChar();
    }
    switch (ch | 0) {
      case 0x30:
      case 0x31:
      case 0x32:
      case 0x33:
      case 0x34:
      case 0x35:
      case 0x36:
      case 0x37:
      case 0x38:
      case 0x39:
      case 0x2b:
      case 0x2d:
      case 0x2e:
        return new PostScriptToken(PostScriptTokenTypes.NUMBER, this.getNumber());
      case 0x7b:
        this.nextChar();
        return PostScriptToken.LBRACE;
      case 0x7d:
        this.nextChar();
        return PostScriptToken.RBRACE;
    }
    const strBuf = this.strBuf;
    strBuf.length = 0;
    strBuf[0] = String.fromCharCode(ch);
    while ((ch = this.nextChar()) >= 0 && (ch >= 0x41 && ch <= 0x5a || ch >= 0x61 && ch <= 0x7a)) {
      strBuf.push(String.fromCharCode(ch));
    }
    const str = strBuf.join("");
    switch (str.toLowerCase()) {
      case "if":
        return PostScriptToken.IF;
      case "ifelse":
        return PostScriptToken.IFELSE;
      default:
        return PostScriptToken.getOperator(str);
    }
  }
  getNumber() {
    let ch = this.currentChar;
    const strBuf = this.strBuf;
    strBuf.length = 0;
    strBuf[0] = String.fromCharCode(ch);
    while ((ch = this.nextChar()) >= 0) {
      if (ch >= 0x30 && ch <= 0x39 || ch === 0x2d || ch === 0x2e) {
        strBuf.push(String.fromCharCode(ch));
      } else {
        break;
      }
    }
    const value = parseFloat(strBuf.join(""));
    if (isNaN(value)) {
      throw new _util.FormatError(`Invalid floating point number: ${value}`);
    }
    return value;
  }
}
exports.PostScriptLexer = PostScriptLexer;

/***/ }),
/* 59 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.RegionalImageCache = exports.LocalTilingPatternCache = exports.LocalImageCache = exports.LocalGStateCache = exports.LocalFunctionCache = exports.LocalColorSpaceCache = exports.GlobalImageCache = void 0;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(4);
class BaseLocalCache {
  constructor(options) {
    if (this.constructor === BaseLocalCache) {
      (0, _util.unreachable)("Cannot initialize BaseLocalCache.");
    }
    this._onlyRefs = options?.onlyRefs === true;
    if (!this._onlyRefs) {
      this._nameRefMap = new Map();
      this._imageMap = new Map();
    }
    this._imageCache = new _primitives.RefSetCache();
  }
  getByName(name) {
    if (this._onlyRefs) {
      (0, _util.unreachable)("Should not call `getByName` method.");
    }
    const ref = this._nameRefMap.get(name);
    if (ref) {
      return this.getByRef(ref);
    }
    return this._imageMap.get(name) || null;
  }
  getByRef(ref) {
    return this._imageCache.get(ref) || null;
  }
  set(name, ref, data) {
    (0, _util.unreachable)("Abstract method `set` called.");
  }
}
class LocalImageCache extends BaseLocalCache {
  set(name, ref = null, data) {
    if (typeof name !== "string") {
      throw new Error('LocalImageCache.set - expected "name" argument.');
    }
    if (ref) {
      if (this._imageCache.has(ref)) {
        return;
      }
      this._nameRefMap.set(name, ref);
      this._imageCache.put(ref, data);
      return;
    }
    if (this._imageMap.has(name)) {
      return;
    }
    this._imageMap.set(name, data);
  }
}
exports.LocalImageCache = LocalImageCache;
class LocalColorSpaceCache extends BaseLocalCache {
  set(name = null, ref = null, data) {
    if (typeof name !== "string" && !ref) {
      throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.');
    }
    if (ref) {
      if (this._imageCache.has(ref)) {
        return;
      }
      if (name !== null) {
        this._nameRefMap.set(name, ref);
      }
      this._imageCache.put(ref, data);
      return;
    }
    if (this._imageMap.has(name)) {
      return;
    }
    this._imageMap.set(name, data);
  }
}
exports.LocalColorSpaceCache = LocalColorSpaceCache;
class LocalFunctionCache extends BaseLocalCache {
  constructor(options) {
    super({
      onlyRefs: true
    });
  }
  set(name = null, ref, data) {
    if (!ref) {
      throw new Error('LocalFunctionCache.set - expected "ref" argument.');
    }
    if (this._imageCache.has(ref)) {
      return;
    }
    this._imageCache.put(ref, data);
  }
}
exports.LocalFunctionCache = LocalFunctionCache;
class LocalGStateCache extends BaseLocalCache {
  set(name, ref = null, data) {
    if (typeof name !== "string") {
      throw new Error('LocalGStateCache.set - expected "name" argument.');
    }
    if (ref) {
      if (this._imageCache.has(ref)) {
        return;
      }
      this._nameRefMap.set(name, ref);
      this._imageCache.put(ref, data);
      return;
    }
    if (this._imageMap.has(name)) {
      return;
    }
    this._imageMap.set(name, data);
  }
}
exports.LocalGStateCache = LocalGStateCache;
class LocalTilingPatternCache extends BaseLocalCache {
  constructor(options) {
    super({
      onlyRefs: true
    });
  }
  set(name = null, ref, data) {
    if (!ref) {
      throw new Error('LocalTilingPatternCache.set - expected "ref" argument.');
    }
    if (this._imageCache.has(ref)) {
      return;
    }
    this._imageCache.put(ref, data);
  }
}
exports.LocalTilingPatternCache = LocalTilingPatternCache;
class RegionalImageCache extends BaseLocalCache {
  constructor(options) {
    super({
      onlyRefs: true
    });
  }
  set(name = null, ref, data) {
    if (!ref) {
      throw new Error('RegionalImageCache.set - expected "ref" argument.');
    }
    if (this._imageCache.has(ref)) {
      return;
    }
    this._imageCache.put(ref, data);
  }
}
exports.RegionalImageCache = RegionalImageCache;
class GlobalImageCache {
  static NUM_PAGES_THRESHOLD = 2;
  static MIN_IMAGES_TO_CACHE = 10;
  static MAX_BYTE_SIZE = 5 * _util.MAX_IMAGE_SIZE_TO_CACHE;
  constructor() {
    this._refCache = new _primitives.RefSetCache();
    this._imageCache = new _primitives.RefSetCache();
  }
  get _byteSize() {
    let byteSize = 0;
    for (const imageData of this._imageCache) {
      byteSize += imageData.byteSize;
    }
    return byteSize;
  }
  get _cacheLimitReached() {
    if (this._imageCache.size < GlobalImageCache.MIN_IMAGES_TO_CACHE) {
      return false;
    }
    if (this._byteSize < GlobalImageCache.MAX_BYTE_SIZE) {
      return false;
    }
    return true;
  }
  shouldCache(ref, pageIndex) {
    let pageIndexSet = this._refCache.get(ref);
    if (!pageIndexSet) {
      pageIndexSet = new Set();
      this._refCache.put(ref, pageIndexSet);
    }
    pageIndexSet.add(pageIndex);
    if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) {
      return false;
    }
    if (!this._imageCache.has(ref) && this._cacheLimitReached) {
      return false;
    }
    return true;
  }
  addByteSize(ref, byteSize) {
    const imageData = this._imageCache.get(ref);
    if (!imageData) {
      return;
    }
    if (imageData.byteSize) {
      return;
    }
    imageData.byteSize = byteSize;
  }
  getData(ref, pageIndex) {
    const pageIndexSet = this._refCache.get(ref);
    if (!pageIndexSet) {
      return null;
    }
    if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) {
      return null;
    }
    const imageData = this._imageCache.get(ref);
    if (!imageData) {
      return null;
    }
    pageIndexSet.add(pageIndex);
    return imageData;
  }
  setData(ref, data) {
    if (!this._refCache.has(ref)) {
      throw new Error('GlobalImageCache.setData - expected "shouldCache" to have been called.');
    }
    if (this._imageCache.has(ref)) {
      return;
    }
    if (this._cacheLimitReached) {
      (0, _util.warn)("GlobalImageCache.setData - cache limit reached.");
      return;
    }
    this._imageCache.put(ref, data);
  }
  clear(onlyData = false) {
    if (!onlyData) {
      this._refCache.clear();
    }
    this._imageCache.clear();
  }
}
exports.GlobalImageCache = GlobalImageCache;

/***/ }),
/* 60 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.bidi = bidi;
var _util = __w_pdfjs_require__(2);
const baseTypes = ["BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "S", "B", "S", "WS", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "B", "B", "B", "S", "WS", "ON", "ON", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "ON", "ES", "CS", "ES", "CS", "CS", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "CS", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "BN", "BN", "BN", "BN", "BN", "BN", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "CS", "ON", "ET", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "L", "ON", "ON", "BN", "ON", "ON", "ET", "ET", "EN", "EN", "ON", "L", "ON", "ON", "ON", "EN", "L", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L"];
const arabicTypes = ["AN", "AN", "AN", "AN", "AN", "AN", "ON", "ON", "AL", "ET", "ET", "AL", "CS", "AL", "ON", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "ET", "AN", "AN", "AL", "AL", "AL", "NSM", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "NSM", "NSM", "ON", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "AL", "AL", "AL", "AL", "AL", "AL"];
function isOdd(i) {
  return (i & 1) !== 0;
}
function isEven(i) {
  return (i & 1) === 0;
}
function findUnequal(arr, start, value) {
  let j, jj;
  for (j = start, jj = arr.length; j < jj; ++j) {
    if (arr[j] !== value) {
      return j;
    }
  }
  return j;
}
function setValues(arr, start, end, value) {
  for (let j = start; j < end; ++j) {
    arr[j] = value;
  }
}
function reverseValues(arr, start, end) {
  for (let i = start, j = end - 1; i < j; ++i, --j) {
    const temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
  }
}
function createBidiText(str, isLTR, vertical = false) {
  let dir = "ltr";
  if (vertical) {
    dir = "ttb";
  } else if (!isLTR) {
    dir = "rtl";
  }
  return {
    str,
    dir
  };
}
const chars = [];
const types = [];
function bidi(str, startLevel = -1, vertical = false) {
  let isLTR = true;
  const strLength = str.length;
  if (strLength === 0 || vertical) {
    return createBidiText(str, isLTR, vertical);
  }
  chars.length = strLength;
  types.length = strLength;
  let numBidi = 0;
  let i, ii;
  for (i = 0; i < strLength; ++i) {
    chars[i] = str.charAt(i);
    const charCode = str.charCodeAt(i);
    let charType = "L";
    if (charCode <= 0x00ff) {
      charType = baseTypes[charCode];
    } else if (0x0590 <= charCode && charCode <= 0x05f4) {
      charType = "R";
    } else if (0x0600 <= charCode && charCode <= 0x06ff) {
      charType = arabicTypes[charCode & 0xff];
      if (!charType) {
        (0, _util.warn)("Bidi: invalid Unicode character " + charCode.toString(16));
      }
    } else if (0x0700 <= charCode && charCode <= 0x08ac || 0xfb50 <= charCode && charCode <= 0xfdff || 0xfe70 <= charCode && charCode <= 0xfeff) {
      charType = "AL";
    }
    if (charType === "R" || charType === "AL" || charType === "AN") {
      numBidi++;
    }
    types[i] = charType;
  }
  if (numBidi === 0) {
    isLTR = true;
    return createBidiText(str, isLTR);
  }
  if (startLevel === -1) {
    if (numBidi / strLength < 0.3 && strLength > 4) {
      isLTR = true;
      startLevel = 0;
    } else {
      isLTR = false;
      startLevel = 1;
    }
  }
  const levels = [];
  for (i = 0; i < strLength; ++i) {
    levels[i] = startLevel;
  }
  const e = isOdd(startLevel) ? "R" : "L";
  const sor = e;
  const eor = sor;
  let lastType = sor;
  for (i = 0; i < strLength; ++i) {
    if (types[i] === "NSM") {
      types[i] = lastType;
    } else {
      lastType = types[i];
    }
  }
  lastType = sor;
  let t;
  for (i = 0; i < strLength; ++i) {
    t = types[i];
    if (t === "EN") {
      types[i] = lastType === "AL" ? "AN" : "EN";
    } else if (t === "R" || t === "L" || t === "AL") {
      lastType = t;
    }
  }
  for (i = 0; i < strLength; ++i) {
    t = types[i];
    if (t === "AL") {
      types[i] = "R";
    }
  }
  for (i = 1; i < strLength - 1; ++i) {
    if (types[i] === "ES" && types[i - 1] === "EN" && types[i + 1] === "EN") {
      types[i] = "EN";
    }
    if (types[i] === "CS" && (types[i - 1] === "EN" || types[i - 1] === "AN") && types[i + 1] === types[i - 1]) {
      types[i] = types[i - 1];
    }
  }
  for (i = 0; i < strLength; ++i) {
    if (types[i] === "EN") {
      for (let j = i - 1; j >= 0; --j) {
        if (types[j] !== "ET") {
          break;
        }
        types[j] = "EN";
      }
      for (let j = i + 1; j < strLength; ++j) {
        if (types[j] !== "ET") {
          break;
        }
        types[j] = "EN";
      }
    }
  }
  for (i = 0; i < strLength; ++i) {
    t = types[i];
    if (t === "WS" || t === "ES" || t === "ET" || t === "CS") {
      types[i] = "ON";
    }
  }
  lastType = sor;
  for (i = 0; i < strLength; ++i) {
    t = types[i];
    if (t === "EN") {
      types[i] = lastType === "L" ? "L" : "EN";
    } else if (t === "R" || t === "L") {
      lastType = t;
    }
  }
  for (i = 0; i < strLength; ++i) {
    if (types[i] === "ON") {
      const end = findUnequal(types, i + 1, "ON");
      let before = sor;
      if (i > 0) {
        before = types[i - 1];
      }
      let after = eor;
      if (end + 1 < strLength) {
        after = types[end + 1];
      }
      if (before !== "L") {
        before = "R";
      }
      if (after !== "L") {
        after = "R";
      }
      if (before === after) {
        setValues(types, i, end, before);
      }
      i = end - 1;
    }
  }
  for (i = 0; i < strLength; ++i) {
    if (types[i] === "ON") {
      types[i] = e;
    }
  }
  for (i = 0; i < strLength; ++i) {
    t = types[i];
    if (isEven(levels[i])) {
      if (t === "R") {
        levels[i] += 1;
      } else if (t === "AN" || t === "EN") {
        levels[i] += 2;
      }
    } else if (t === "L" || t === "AN" || t === "EN") {
      levels[i] += 1;
    }
  }
  let highestLevel = -1;
  let lowestOddLevel = 99;
  let level;
  for (i = 0, ii = levels.length; i < ii; ++i) {
    level = levels[i];
    if (highestLevel < level) {
      highestLevel = level;
    }
    if (lowestOddLevel > level && isOdd(level)) {
      lowestOddLevel = level;
    }
  }
  for (level = highestLevel; level >= lowestOddLevel; --level) {
    let start = -1;
    for (i = 0, ii = levels.length; i < ii; ++i) {
      if (levels[i] < level) {
        if (start >= 0) {
          reverseValues(chars, start, i);
          start = -1;
        }
      } else if (start < 0) {
        start = i;
      }
    }
    if (start >= 0) {
      reverseValues(chars, start, levels.length);
    }
  }
  for (i = 0, ii = chars.length; i < ii; ++i) {
    const ch = chars[i];
    if (ch === "<" || ch === ">") {
      chars[i] = "";
    }
  }
  return createBidiText(chars.join(""), isLTR);
}

/***/ }),
/* 61 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.getFontSubstitution = getFontSubstitution;
var _fonts_utils = __w_pdfjs_require__(38);
var _core_utils = __w_pdfjs_require__(3);
const NORMAL = {
  style: "normal",
  weight: "normal"
};
const BOLD = {
  style: "normal",
  weight: "bold"
};
const ITALIC = {
  style: "italic",
  weight: "normal"
};
const BOLDITALIC = {
  style: "italic",
  weight: "bold"
};
const substitutionMap = new Map([["Times-Roman", {
  local: ["Times New Roman", "Times-Roman", "Times", "Liberation Serif", "Nimbus Roman", "Nimbus Roman L", "Tinos", "Thorndale", "TeX Gyre Termes", "FreeSerif", "DejaVu Serif", "Bitstream Vera Serif", "Ubuntu"],
  style: NORMAL,
  ultimate: "serif"
}], ["Times-Bold", {
  alias: "Times-Roman",
  style: BOLD,
  ultimate: "serif"
}], ["Times-Italic", {
  alias: "Times-Roman",
  style: ITALIC,
  ultimate: "serif"
}], ["Times-BoldItalic", {
  alias: "Times-Roman",
  style: BOLDITALIC,
  ultimate: "serif"
}], ["Helvetica", {
  local: ["Helvetica", "Helvetica Neue", "Arial", "Arial Nova", "Liberation Sans", "Arimo", "Nimbus Sans", "Nimbus Sans L", "A030", "TeX Gyre Heros", "FreeSans", "DejaVu Sans", "Albany", "Bitstream Vera Sans", "Arial Unicode MS", "Microsoft Sans Serif", "Apple Symbols", "Cantarell"],
  path: "LiberationSans-Regular.ttf",
  style: NORMAL,
  ultimate: "sans-serif"
}], ["Helvetica-Bold", {
  alias: "Helvetica",
  path: "LiberationSans-Bold.ttf",
  style: BOLD,
  ultimate: "sans-serif"
}], ["Helvetica-Oblique", {
  alias: "Helvetica",
  path: "LiberationSans-Italic.ttf",
  style: ITALIC,
  ultimate: "sans-serif"
}], ["Helvetica-BoldOblique", {
  alias: "Helvetica",
  path: "LiberationSans-BoldItalic.ttf",
  style: BOLDITALIC,
  ultimate: "sans-serif"
}], ["Courier", {
  local: ["Courier", "Courier New", "Liberation Mono", "Nimbus Mono", "Nimbus Mono L", "Cousine", "Cumberland", "TeX Gyre Cursor", "FreeMono"],
  style: NORMAL,
  ultimate: "monospace"
}], ["Courier-Bold", {
  alias: "Courier",
  style: BOLD,
  ultimate: "monospace"
}], ["Courier-Oblique", {
  alias: "Courier",
  style: ITALIC,
  ultimate: "monospace"
}], ["Courier-BoldOblique", {
  alias: "Courier",
  style: BOLDITALIC,
  ultimate: "monospace"
}], ["ArialBlack", {
  local: ["Arial Black"],
  style: {
    style: "normal",
    weight: "900"
  },
  fallback: "Helvetica-Bold"
}], ["ArialBlack-Bold", {
  alias: "ArialBlack"
}], ["ArialBlack-Italic", {
  alias: "ArialBlack",
  style: {
    style: "italic",
    weight: "900"
  },
  fallback: "Helvetica-BoldOblique"
}], ["ArialBlack-BoldItalic", {
  alias: "ArialBlack-Italic"
}], ["ArialNarrow", {
  local: ["Arial Narrow", "Liberation Sans Narrow", "Helvetica Condensed", "Nimbus Sans Narrow", "TeX Gyre Heros Cn"],
  style: NORMAL,
  fallback: "Helvetica"
}], ["ArialNarrow-Bold", {
  alias: "ArialNarrow",
  style: BOLD,
  fallback: "Helvetica-Bold"
}], ["ArialNarrow-Italic", {
  alias: "ArialNarrow",
  style: ITALIC,
  fallback: "Helvetica-Oblique"
}], ["ArialNarrow-BoldItalic", {
  alias: "ArialNarrow",
  style: BOLDITALIC,
  fallback: "Helvetica-BoldOblique"
}], ["Calibri", {
  local: ["Calibri", "Carlito"],
  style: NORMAL,
  fallback: "Helvetica"
}], ["Calibri-Bold", {
  alias: "Calibri",
  style: BOLD,
  fallback: "Helvetica-Bold"
}], ["Calibri-Italic", {
  alias: "Calibri",
  style: ITALIC,
  fallback: "Helvetica-Oblique"
}], ["Calibri-BoldItalic", {
  alias: "Calibri",
  style: BOLDITALIC,
  fallback: "Helvetica-BoldOblique"
}], ["Wingdings", {
  local: ["Wingdings", "URW Dingbats"],
  style: NORMAL
}], ["Wingdings-Regular", {
  alias: "Wingdings"
}], ["Wingdings-Bold", {
  alias: "Wingdings"
}]]);
const fontAliases = new Map([["Arial-Black", "ArialBlack"]]);
function getStyleToAppend(style) {
  switch (style) {
    case BOLD:
      return "Bold";
    case ITALIC:
      return "Italic";
    case BOLDITALIC:
      return "Bold Italic";
    default:
      if (style?.weight === "bold") {
        return "Bold";
      }
      if (style?.style === "italic") {
        return "Italic";
      }
  }
  return "";
}
function generateFont({
  alias,
  local,
  path,
  fallback,
  style,
  ultimate
}, src, localFontPath, useFallback = true, usePath = true, append = "") {
  const result = {
    style: null,
    ultimate: null
  };
  if (local) {
    const extra = append ? ` ${append}` : "";
    for (const name of local) {
      src.push(`local(${name}${extra})`);
    }
  }
  if (alias) {
    const substitution = substitutionMap.get(alias);
    const aliasAppend = append || getStyleToAppend(style);
    Object.assign(result, generateFont(substitution, src, localFontPath, useFallback && !fallback, usePath && !path, aliasAppend));
  }
  if (style) {
    result.style = style;
  }
  if (ultimate) {
    result.ultimate = ultimate;
  }
  if (useFallback && fallback) {
    const fallbackInfo = substitutionMap.get(fallback);
    const {
      ultimate: fallbackUltimate
    } = generateFont(fallbackInfo, src, localFontPath, useFallback, usePath && !path, append);
    result.ultimate ||= fallbackUltimate;
  }
  if (usePath && path && localFontPath) {
    src.push(`url(${localFontPath}${path})`);
  }
  return result;
}
function getFontSubstitution(systemFontCache, idFactory, localFontPath, baseFontName, standardFontName) {
  baseFontName = (0, _fonts_utils.normalizeFontName)(baseFontName);
  const key = baseFontName;
  let substitutionInfo = systemFontCache.get(key);
  if (substitutionInfo) {
    return substitutionInfo;
  }
  let substitution = substitutionMap.get(baseFontName);
  if (!substitution) {
    for (const [alias, subst] of fontAliases) {
      if (baseFontName.startsWith(alias)) {
        baseFontName = `${subst}${baseFontName.substring(alias.length)}`;
        substitution = substitutionMap.get(baseFontName);
        break;
      }
    }
  }
  let mustAddBaseFont = false;
  if (!substitution) {
    substitution = substitutionMap.get(standardFontName);
    mustAddBaseFont = true;
  }
  const loadedName = `${idFactory.getDocId()}_s${idFactory.createFontId()}`;
  if (!substitution) {
    if (!(0, _core_utils.validateFontName)(baseFontName)) {
      systemFontCache.set(key, null);
      return null;
    }
    const bold = /bold/gi.test(baseFontName);
    const italic = /oblique|italic/gi.test(baseFontName);
    const style = bold && italic && BOLDITALIC || bold && BOLD || italic && ITALIC || NORMAL;
    substitutionInfo = {
      css: loadedName,
      guessFallback: true,
      loadedName,
      baseFontName,
      src: `local(${baseFontName})`,
      style
    };
    systemFontCache.set(key, substitutionInfo);
    return substitutionInfo;
  }
  const src = [];
  if (mustAddBaseFont && (0, _core_utils.validateFontName)(baseFontName)) {
    src.push(`local(${baseFontName})`);
  }
  const {
    style,
    ultimate
  } = generateFont(substitution, src, localFontPath);
  const guessFallback = ultimate === null;
  const fallback = guessFallback ? "" : `,${ultimate}`;
  substitutionInfo = {
    css: `${loadedName}${fallback}`,
    guessFallback,
    loadedName,
    baseFontName,
    src: src.join(","),
    style
  };
  systemFontCache.set(key, substitutionInfo);
  return substitutionInfo;
}

/***/ }),
/* 62 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.ImageResizer = void 0;
var _util = __w_pdfjs_require__(2);
const MIN_IMAGE_DIM = 2048;
const MAX_IMAGE_DIM = 65537;
const MAX_ERROR = 128;
class ImageResizer {
  constructor(imgData, isMask) {
    this._imgData = imgData;
    this._isMask = isMask;
  }
  static needsToBeResized(width, height) {
    if (width <= this._goodSquareLength && height <= this._goodSquareLength) {
      return false;
    }
    const {
      MAX_DIM
    } = this;
    if (width > MAX_DIM || height > MAX_DIM) {
      return true;
    }
    const area = width * height;
    if (this._hasMaxArea) {
      return area > this.MAX_AREA;
    }
    if (area < this._goodSquareLength ** 2) {
      return false;
    }
    if (this._areGoodDims(width, height)) {
      this._goodSquareLength = Math.max(this._goodSquareLength, Math.floor(Math.sqrt(width * height)));
      return false;
    }
    this._goodSquareLength = this._guessMax(this._goodSquareLength, MAX_DIM, MAX_ERROR, 0);
    const maxArea = this.MAX_AREA = this._goodSquareLength ** 2;
    return area > maxArea;
  }
  static get MAX_DIM() {
    return (0, _util.shadow)(this, "MAX_DIM", this._guessMax(MIN_IMAGE_DIM, MAX_IMAGE_DIM, 0, 1));
  }
  static get MAX_AREA() {
    this._hasMaxArea = true;
    return (0, _util.shadow)(this, "MAX_AREA", this._guessMax(ImageResizer._goodSquareLength, this.MAX_DIM, MAX_ERROR, 0) ** 2);
  }
  static set MAX_AREA(area) {
    if (area >= 0) {
      this._hasMaxArea = true;
      (0, _util.shadow)(this, "MAX_AREA", area);
    }
  }
  static setMaxArea(area) {
    if (!this._hasMaxArea) {
      this.MAX_AREA = area >> 2;
    }
  }
  static _areGoodDims(width, height) {
    try {
      const canvas = new OffscreenCanvas(width, height);
      const ctx = canvas.getContext("2d");
      ctx.fillRect(0, 0, 1, 1);
      const opacity = ctx.getImageData(0, 0, 1, 1).data[3];
      canvas.width = canvas.height = 1;
      return opacity !== 0;
    } catch {
      return false;
    }
  }
  static _guessMax(start, end, tolerance, defaultHeight) {
    while (start + tolerance + 1 < end) {
      const middle = Math.floor((start + end) / 2);
      const height = defaultHeight || middle;
      if (this._areGoodDims(middle, height)) {
        start = middle;
      } else {
        end = middle;
      }
    }
    return start;
  }
  static async createImage(imgData, isMask = false) {
    return new ImageResizer(imgData, isMask)._createImage();
  }
  async _createImage() {
    const data = this._encodeBMP();
    const blob = new Blob([data.buffer], {
      type: "image/bmp"
    });
    const bitmapPromise = createImageBitmap(blob);
    const {
      MAX_AREA,
      MAX_DIM
    } = ImageResizer;
    const {
      _imgData: imgData
    } = this;
    const {
      width,
      height
    } = imgData;
    const minFactor = Math.max(width / MAX_DIM, height / MAX_DIM, Math.sqrt(width * height / MAX_AREA));
    const firstFactor = Math.max(minFactor, 2);
    const factor = Math.round(10 * (minFactor + 1.25)) / 10 / firstFactor;
    const N = Math.floor(Math.log2(factor));
    const steps = new Array(N + 2).fill(2);
    steps[0] = firstFactor;
    steps.splice(-1, 1, factor / (1 << N));
    let newWidth = width;
    let newHeight = height;
    let bitmap = await bitmapPromise;
    for (const step of steps) {
      const prevWidth = newWidth;
      const prevHeight = newHeight;
      newWidth = Math.floor(newWidth / step) - 1;
      newHeight = Math.floor(newHeight / step) - 1;
      const canvas = new OffscreenCanvas(newWidth, newHeight);
      const ctx = canvas.getContext("2d");
      ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight);
      bitmap = canvas.transferToImageBitmap();
    }
    imgData.data = null;
    imgData.bitmap = bitmap;
    imgData.width = newWidth;
    imgData.height = newHeight;
    return imgData;
  }
  _encodeBMP() {
    const {
      width,
      height,
      kind
    } = this._imgData;
    let data = this._imgData.data;
    let bitPerPixel;
    let colorTable = new Uint8Array(0);
    let maskTable = colorTable;
    let compression = 0;
    switch (kind) {
      case _util.ImageKind.GRAYSCALE_1BPP:
        {
          bitPerPixel = 1;
          colorTable = new Uint8Array(this._isMask ? [255, 255, 255, 255, 0, 0, 0, 0] : [0, 0, 0, 0, 255, 255, 255, 255]);
          const rowLen = width + 7 >> 3;
          const rowSize = rowLen + 3 & -4;
          if (rowLen !== rowSize) {
            const newData = new Uint8Array(rowSize * height);
            let k = 0;
            for (let i = 0, ii = height * rowLen; i < ii; i += rowLen, k += rowSize) {
              newData.set(data.subarray(i, i + rowLen), k);
            }
            data = newData;
          }
          break;
        }
      case _util.ImageKind.RGB_24BPP:
        {
          bitPerPixel = 24;
          if (width & 3) {
            const rowLen = 3 * width;
            const rowSize = rowLen + 3 & -4;
            const extraLen = rowSize - rowLen;
            const newData = new Uint8Array(rowSize * height);
            let k = 0;
            for (let i = 0, ii = height * rowLen; i < ii; i += rowLen) {
              const row = data.subarray(i, i + rowLen);
              for (let j = 0; j < rowLen; j += 3) {
                newData[k++] = row[j + 2];
                newData[k++] = row[j + 1];
                newData[k++] = row[j];
              }
              k += extraLen;
            }
            data = newData;
          } else {
            for (let i = 0, ii = data.length; i < ii; i += 3) {
              const tmp = data[i];
              data[i] = data[i + 2];
              data[i + 2] = tmp;
            }
          }
          break;
        }
      case _util.ImageKind.RGBA_32BPP:
        bitPerPixel = 32;
        compression = 3;
        maskTable = new Uint8Array(4 + 4 + 4 + 4 + 52);
        const view = new DataView(maskTable.buffer);
        if (_util.FeatureTest.isLittleEndian) {
          view.setUint32(0, 0x000000ff, true);
          view.setUint32(4, 0x0000ff00, true);
          view.setUint32(8, 0x00ff0000, true);
          view.setUint32(12, 0xff000000, true);
        } else {
          view.setUint32(0, 0xff000000, true);
          view.setUint32(4, 0x00ff0000, true);
          view.setUint32(8, 0x0000ff00, true);
          view.setUint32(12, 0x000000ff, true);
        }
        break;
      default:
        throw new Error("invalid format");
    }
    let i = 0;
    const headerLength = 40 + maskTable.length;
    const fileLength = 14 + headerLength + colorTable.length + data.length;
    const bmpData = new Uint8Array(fileLength);
    const view = new DataView(bmpData.buffer);
    view.setUint16(i, 0x4d42, true);
    i += 2;
    view.setUint32(i, fileLength, true);
    i += 4;
    view.setUint32(i, 0, true);
    i += 4;
    view.setUint32(i, 14 + headerLength + colorTable.length, true);
    i += 4;
    view.setUint32(i, headerLength, true);
    i += 4;
    view.setInt32(i, width, true);
    i += 4;
    view.setInt32(i, -height, true);
    i += 4;
    view.setUint16(i, 1, true);
    i += 2;
    view.setUint16(i, bitPerPixel, true);
    i += 2;
    view.setUint32(i, compression, true);
    i += 4;
    view.setUint32(i, 0, true);
    i += 4;
    view.setInt32(i, 0, true);
    i += 4;
    view.setInt32(i, 0, true);
    i += 4;
    view.setUint32(i, colorTable.length / 4, true);
    i += 4;
    view.setUint32(i, 0, true);
    i += 4;
    bmpData.set(maskTable, i);
    i += maskTable.length;
    bmpData.set(colorTable, i);
    i += colorTable.length;
    bmpData.set(data, i);
    return bmpData;
  }
}
exports.ImageResizer = ImageResizer;
ImageResizer._goodSquareLength = MIN_IMAGE_DIM;

/***/ }),
/* 63 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.MurmurHash3_64 = void 0;
var _util = __w_pdfjs_require__(2);
const SEED = 0xc3d2e1f0;
const MASK_HIGH = 0xffff0000;
const MASK_LOW = 0xffff;
class MurmurHash3_64 {
  constructor(seed) {
    this.h1 = seed ? seed & 0xffffffff : SEED;
    this.h2 = seed ? seed & 0xffffffff : SEED;
  }
  update(input) {
    let data, length;
    if (typeof input === "string") {
      data = new Uint8Array(input.length * 2);
      length = 0;
      for (let i = 0, ii = input.length; i < ii; i++) {
        const code = input.charCodeAt(i);
        if (code <= 0xff) {
          data[length++] = code;
        } else {
          data[length++] = code >>> 8;
          data[length++] = code & 0xff;
        }
      }
    } else if ((0, _util.isArrayBuffer)(input)) {
      data = input.slice();
      length = data.byteLength;
    } else {
      throw new Error("Wrong data format in MurmurHash3_64_update. " + "Input must be a string or array.");
    }
    const blockCounts = length >> 2;
    const tailLength = length - blockCounts * 4;
    const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts);
    let k1 = 0,
      k2 = 0;
    let h1 = this.h1,
      h2 = this.h2;
    const C1 = 0xcc9e2d51,
      C2 = 0x1b873593;
    const C1_LOW = C1 & MASK_LOW,
      C2_LOW = C2 & MASK_LOW;
    for (let i = 0; i < blockCounts; i++) {
      if (i & 1) {
        k1 = dataUint32[i];
        k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;
        k1 = k1 << 15 | k1 >>> 17;
        k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;
        h1 ^= k1;
        h1 = h1 << 13 | h1 >>> 19;
        h1 = h1 * 5 + 0xe6546b64;
      } else {
        k2 = dataUint32[i];
        k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW;
        k2 = k2 << 15 | k2 >>> 17;
        k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW;
        h2 ^= k2;
        h2 = h2 << 13 | h2 >>> 19;
        h2 = h2 * 5 + 0xe6546b64;
      }
    }
    k1 = 0;
    switch (tailLength) {
      case 3:
        k1 ^= data[blockCounts * 4 + 2] << 16;
      case 2:
        k1 ^= data[blockCounts * 4 + 1] << 8;
      case 1:
        k1 ^= data[blockCounts * 4];
        k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;
        k1 = k1 << 15 | k1 >>> 17;
        k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;
        if (blockCounts & 1) {
          h1 ^= k1;
        } else {
          h2 ^= k1;
        }
    }
    this.h1 = h1;
    this.h2 = h2;
  }
  hexdigest() {
    let h1 = this.h1,
      h2 = this.h2;
    h1 ^= h2 >>> 1;
    h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW;
    h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16;
    h1 ^= h2 >>> 1;
    h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW;
    h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16;
    h1 ^= h2 >>> 1;
    return (h1 >>> 0).toString(16).padStart(8, "0") + (h2 >>> 0).toString(16).padStart(8, "0");
  }
}
exports.MurmurHash3_64 = MurmurHash3_64;

/***/ }),
/* 64 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.OperatorList = void 0;
var _util = __w_pdfjs_require__(2);
function addState(parentState, pattern, checkFn, iterateFn, processFn) {
  let state = parentState;
  for (let i = 0, ii = pattern.length - 1; i < ii; i++) {
    const item = pattern[i];
    state = state[item] ||= [];
  }
  state[pattern.at(-1)] = {
    checkFn,
    iterateFn,
    processFn
  };
}
const InitialState = [];
addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, _util.OPS.restore], null, function iterateInlineImageGroup(context, i) {
  const fnArray = context.fnArray;
  const iFirstSave = context.iCurr - 3;
  const pos = (i - iFirstSave) % 4;
  switch (pos) {
    case 0:
      return fnArray[i] === _util.OPS.save;
    case 1:
      return fnArray[i] === _util.OPS.transform;
    case 2:
      return fnArray[i] === _util.OPS.paintInlineImageXObject;
    case 3:
      return fnArray[i] === _util.OPS.restore;
  }
  throw new Error(`iterateInlineImageGroup - invalid pos: ${pos}`);
}, function foundInlineImageGroup(context, i) {
  const MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10;
  const MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200;
  const MAX_WIDTH = 1000;
  const IMAGE_PADDING = 1;
  const fnArray = context.fnArray,
    argsArray = context.argsArray;
  const curr = context.iCurr;
  const iFirstSave = curr - 3;
  const iFirstTransform = curr - 2;
  const iFirstPIIXO = curr - 1;
  const count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK);
  if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) {
    return i - (i - iFirstSave) % 4;
  }
  let maxX = 0;
  const map = [];
  let maxLineHeight = 0;
  let currentX = IMAGE_PADDING,
    currentY = IMAGE_PADDING;
  for (let q = 0; q < count; q++) {
    const transform = argsArray[iFirstTransform + (q << 2)];
    const img = argsArray[iFirstPIIXO + (q << 2)][0];
    if (currentX + img.width > MAX_WIDTH) {
      maxX = Math.max(maxX, currentX);
      currentY += maxLineHeight + 2 * IMAGE_PADDING;
      currentX = 0;
      maxLineHeight = 0;
    }
    map.push({
      transform,
      x: currentX,
      y: currentY,
      w: img.width,
      h: img.height
    });
    currentX += img.width + 2 * IMAGE_PADDING;
    maxLineHeight = Math.max(maxLineHeight, img.height);
  }
  const imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING;
  const imgHeight = currentY + maxLineHeight + IMAGE_PADDING;
  const imgData = new Uint8Array(imgWidth * imgHeight * 4);
  const imgRowSize = imgWidth << 2;
  for (let q = 0; q < count; q++) {
    const data = argsArray[iFirstPIIXO + (q << 2)][0].data;
    const rowSize = map[q].w << 2;
    let dataOffset = 0;
    let offset = map[q].x + map[q].y * imgWidth << 2;
    imgData.set(data.subarray(0, rowSize), offset - imgRowSize);
    for (let k = 0, kk = map[q].h; k < kk; k++) {
      imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset);
      dataOffset += rowSize;
      offset += imgRowSize;
    }
    imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset);
    while (offset >= 0) {
      data[offset - 4] = data[offset];
      data[offset - 3] = data[offset + 1];
      data[offset - 2] = data[offset + 2];
      data[offset - 1] = data[offset + 3];
      data[offset + rowSize] = data[offset + rowSize - 4];
      data[offset + rowSize + 1] = data[offset + rowSize - 3];
      data[offset + rowSize + 2] = data[offset + rowSize - 2];
      data[offset + rowSize + 3] = data[offset + rowSize - 1];
      offset -= imgRowSize;
    }
  }
  const img = {
    width: imgWidth,
    height: imgHeight
  };
  if (context.isOffscreenCanvasSupported) {
    const canvas = new OffscreenCanvas(imgWidth, imgHeight);
    const ctx = canvas.getContext("2d");
    ctx.putImageData(new ImageData(new Uint8ClampedArray(imgData.buffer), imgWidth, imgHeight), 0, 0);
    img.bitmap = canvas.transferToImageBitmap();
    img.data = null;
  } else {
    img.kind = _util.ImageKind.RGBA_32BPP;
    img.data = imgData;
  }
  fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup);
  argsArray.splice(iFirstSave, count * 4, [img, map]);
  return iFirstSave + 1;
});
addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageMaskXObject, _util.OPS.restore], null, function iterateImageMaskGroup(context, i) {
  const fnArray = context.fnArray;
  const iFirstSave = context.iCurr - 3;
  const pos = (i - iFirstSave) % 4;
  switch (pos) {
    case 0:
      return fnArray[i] === _util.OPS.save;
    case 1:
      return fnArray[i] === _util.OPS.transform;
    case 2:
      return fnArray[i] === _util.OPS.paintImageMaskXObject;
    case 3:
      return fnArray[i] === _util.OPS.restore;
  }
  throw new Error(`iterateImageMaskGroup - invalid pos: ${pos}`);
}, function foundImageMaskGroup(context, i) {
  const MIN_IMAGES_IN_MASKS_BLOCK = 10;
  const MAX_IMAGES_IN_MASKS_BLOCK = 100;
  const MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000;
  const fnArray = context.fnArray,
    argsArray = context.argsArray;
  const curr = context.iCurr;
  const iFirstSave = curr - 3;
  const iFirstTransform = curr - 2;
  const iFirstPIMXO = curr - 1;
  let count = Math.floor((i - iFirstSave) / 4);
  if (count < MIN_IMAGES_IN_MASKS_BLOCK) {
    return i - (i - iFirstSave) % 4;
  }
  let isSameImage = false;
  let iTransform, transformArgs;
  const firstPIMXOArg0 = argsArray[iFirstPIMXO][0];
  const firstTransformArg0 = argsArray[iFirstTransform][0],
    firstTransformArg1 = argsArray[iFirstTransform][1],
    firstTransformArg2 = argsArray[iFirstTransform][2],
    firstTransformArg3 = argsArray[iFirstTransform][3];
  if (firstTransformArg1 === firstTransformArg2) {
    isSameImage = true;
    iTransform = iFirstTransform + 4;
    let iPIMXO = iFirstPIMXO + 4;
    for (let q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {
      transformArgs = argsArray[iTransform];
      if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== firstTransformArg1 || transformArgs[2] !== firstTransformArg2 || transformArgs[3] !== firstTransformArg3) {
        if (q < MIN_IMAGES_IN_MASKS_BLOCK) {
          isSameImage = false;
        } else {
          count = q;
        }
        break;
      }
    }
  }
  if (isSameImage) {
    count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK);
    const positions = new Float32Array(count * 2);
    iTransform = iFirstTransform;
    for (let q = 0; q < count; q++, iTransform += 4) {
      transformArgs = argsArray[iTransform];
      positions[q << 1] = transformArgs[4];
      positions[(q << 1) + 1] = transformArgs[5];
    }
    fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat);
    argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg1, firstTransformArg2, firstTransformArg3, positions]);
  } else {
    count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK);
    const images = [];
    for (let q = 0; q < count; q++) {
      transformArgs = argsArray[iFirstTransform + (q << 2)];
      const maskParams = argsArray[iFirstPIMXO + (q << 2)][0];
      images.push({
        data: maskParams.data,
        width: maskParams.width,
        height: maskParams.height,
        interpolate: maskParams.interpolate,
        count: maskParams.count,
        transform: transformArgs
      });
    }
    fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup);
    argsArray.splice(iFirstSave, count * 4, [images]);
  }
  return iFirstSave + 1;
});
addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, _util.OPS.restore], function (context) {
  const argsArray = context.argsArray;
  const iFirstTransform = context.iCurr - 2;
  return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0;
}, function iterateImageGroup(context, i) {
  const fnArray = context.fnArray,
    argsArray = context.argsArray;
  const iFirstSave = context.iCurr - 3;
  const pos = (i - iFirstSave) % 4;
  switch (pos) {
    case 0:
      return fnArray[i] === _util.OPS.save;
    case 1:
      if (fnArray[i] !== _util.OPS.transform) {
        return false;
      }
      const iFirstTransform = context.iCurr - 2;
      const firstTransformArg0 = argsArray[iFirstTransform][0];
      const firstTransformArg3 = argsArray[iFirstTransform][3];
      if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || argsArray[i][3] !== firstTransformArg3) {
        return false;
      }
      return true;
    case 2:
      if (fnArray[i] !== _util.OPS.paintImageXObject) {
        return false;
      }
      const iFirstPIXO = context.iCurr - 1;
      const firstPIXOArg0 = argsArray[iFirstPIXO][0];
      if (argsArray[i][0] !== firstPIXOArg0) {
        return false;
      }
      return true;
    case 3:
      return fnArray[i] === _util.OPS.restore;
  }
  throw new Error(`iterateImageGroup - invalid pos: ${pos}`);
}, function (context, i) {
  const MIN_IMAGES_IN_BLOCK = 3;
  const MAX_IMAGES_IN_BLOCK = 1000;
  const fnArray = context.fnArray,
    argsArray = context.argsArray;
  const curr = context.iCurr;
  const iFirstSave = curr - 3;
  const iFirstTransform = curr - 2;
  const iFirstPIXO = curr - 1;
  const firstPIXOArg0 = argsArray[iFirstPIXO][0];
  const firstTransformArg0 = argsArray[iFirstTransform][0];
  const firstTransformArg3 = argsArray[iFirstTransform][3];
  const count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK);
  if (count < MIN_IMAGES_IN_BLOCK) {
    return i - (i - iFirstSave) % 4;
  }
  const positions = new Float32Array(count * 2);
  let iTransform = iFirstTransform;
  for (let q = 0; q < count; q++, iTransform += 4) {
    const transformArgs = argsArray[iTransform];
    positions[q << 1] = transformArgs[4];
    positions[(q << 1) + 1] = transformArgs[5];
  }
  const args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions];
  fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat);
  argsArray.splice(iFirstSave, count * 4, args);
  return iFirstSave + 1;
});
addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function iterateShowTextGroup(context, i) {
  const fnArray = context.fnArray,
    argsArray = context.argsArray;
  const iFirstSave = context.iCurr - 4;
  const pos = (i - iFirstSave) % 5;
  switch (pos) {
    case 0:
      return fnArray[i] === _util.OPS.beginText;
    case 1:
      return fnArray[i] === _util.OPS.setFont;
    case 2:
      return fnArray[i] === _util.OPS.setTextMatrix;
    case 3:
      if (fnArray[i] !== _util.OPS.showText) {
        return false;
      }
      const iFirstSetFont = context.iCurr - 3;
      const firstSetFontArg0 = argsArray[iFirstSetFont][0];
      const firstSetFontArg1 = argsArray[iFirstSetFont][1];
      if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) {
        return false;
      }
      return true;
    case 4:
      return fnArray[i] === _util.OPS.endText;
  }
  throw new Error(`iterateShowTextGroup - invalid pos: ${pos}`);
}, function (context, i) {
  const MIN_CHARS_IN_BLOCK = 3;
  const MAX_CHARS_IN_BLOCK = 1000;
  const fnArray = context.fnArray,
    argsArray = context.argsArray;
  const curr = context.iCurr;
  const iFirstBeginText = curr - 4;
  const iFirstSetFont = curr - 3;
  const iFirstSetTextMatrix = curr - 2;
  const iFirstShowText = curr - 1;
  const iFirstEndText = curr;
  const firstSetFontArg0 = argsArray[iFirstSetFont][0];
  const firstSetFontArg1 = argsArray[iFirstSetFont][1];
  let count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK);
  if (count < MIN_CHARS_IN_BLOCK) {
    return i - (i - iFirstBeginText) % 5;
  }
  let iFirst = iFirstBeginText;
  if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) {
    count++;
    iFirst -= 5;
  }
  let iEndText = iFirst + 4;
  for (let q = 1; q < count; q++) {
    fnArray.splice(iEndText, 3);
    argsArray.splice(iEndText, 3);
    iEndText += 2;
  }
  return iEndText + 1;
});
class NullOptimizer {
  constructor(queue) {
    this.queue = queue;
  }
  _optimize() {}
  push(fn, args) {
    this.queue.fnArray.push(fn);
    this.queue.argsArray.push(args);
    this._optimize();
  }
  flush() {}
  reset() {}
}
class QueueOptimizer extends NullOptimizer {
  constructor(queue) {
    super(queue);
    this.state = null;
    this.context = {
      iCurr: 0,
      fnArray: queue.fnArray,
      argsArray: queue.argsArray,
      isOffscreenCanvasSupported: false
    };
    this.match = null;
    this.lastProcessed = 0;
  }
  set isOffscreenCanvasSupported(value) {
    this.context.isOffscreenCanvasSupported = value;
  }
  _optimize() {
    const fnArray = this.queue.fnArray;
    let i = this.lastProcessed,
      ii = fnArray.length;
    let state = this.state;
    let match = this.match;
    if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) {
      this.lastProcessed = ii;
      return;
    }
    const context = this.context;
    while (i < ii) {
      if (match) {
        const iterate = (0, match.iterateFn)(context, i);
        if (iterate) {
          i++;
          continue;
        }
        i = (0, match.processFn)(context, i + 1);
        ii = fnArray.length;
        match = null;
        state = null;
        if (i >= ii) {
          break;
        }
      }
      state = (state || InitialState)[fnArray[i]];
      if (!state || Array.isArray(state)) {
        i++;
        continue;
      }
      context.iCurr = i;
      i++;
      if (state.checkFn && !(0, state.checkFn)(context)) {
        state = null;
        continue;
      }
      match = state;
      state = null;
    }
    this.state = state;
    this.match = match;
    this.lastProcessed = i;
  }
  flush() {
    while (this.match) {
      const length = this.queue.fnArray.length;
      this.lastProcessed = (0, this.match.processFn)(this.context, length);
      this.match = null;
      this.state = null;
      this._optimize();
    }
  }
  reset() {
    this.state = null;
    this.match = null;
    this.lastProcessed = 0;
  }
}
class OperatorList {
  static CHUNK_SIZE = 1000;
  static CHUNK_SIZE_ABOUT = this.CHUNK_SIZE - 5;
  constructor(intent = 0, streamSink) {
    this._streamSink = streamSink;
    this.fnArray = [];
    this.argsArray = [];
    this.optimizer = streamSink && !(intent & _util.RenderingIntentFlag.OPLIST) ? new QueueOptimizer(this) : new NullOptimizer(this);
    this.dependencies = new Set();
    this._totalLength = 0;
    this.weight = 0;
    this._resolved = streamSink ? null : Promise.resolve();
  }
  set isOffscreenCanvasSupported(value) {
    this.optimizer.isOffscreenCanvasSupported = value;
  }
  get length() {
    return this.argsArray.length;
  }
  get ready() {
    return this._resolved || this._streamSink.ready;
  }
  get totalLength() {
    return this._totalLength + this.length;
  }
  addOp(fn, args) {
    this.optimizer.push(fn, args);
    this.weight++;
    if (this._streamSink) {
      if (this.weight >= OperatorList.CHUNK_SIZE) {
        this.flush();
      } else if (this.weight >= OperatorList.CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) {
        this.flush();
      }
    }
  }
  addImageOps(fn, args, optionalContent) {
    if (optionalContent !== undefined) {
      this.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]);
    }
    this.addOp(fn, args);
    if (optionalContent !== undefined) {
      this.addOp(_util.OPS.endMarkedContent, []);
    }
  }
  addDependency(dependency) {
    if (this.dependencies.has(dependency)) {
      return;
    }
    this.dependencies.add(dependency);
    this.addOp(_util.OPS.dependency, [dependency]);
  }
  addDependencies(dependencies) {
    for (const dependency of dependencies) {
      this.addDependency(dependency);
    }
  }
  addOpList(opList) {
    if (!(opList instanceof OperatorList)) {
      (0, _util.warn)('addOpList - ignoring invalid "opList" parameter.');
      return;
    }
    for (const dependency of opList.dependencies) {
      this.dependencies.add(dependency);
    }
    for (let i = 0, ii = opList.length; i < ii; i++) {
      this.addOp(opList.fnArray[i], opList.argsArray[i]);
    }
  }
  getIR() {
    return {
      fnArray: this.fnArray,
      argsArray: this.argsArray,
      length: this.length
    };
  }
  get _transfers() {
    const transfers = [];
    const {
      fnArray,
      argsArray,
      length
    } = this;
    for (let i = 0; i < length; i++) {
      switch (fnArray[i]) {
        case _util.OPS.paintInlineImageXObject:
        case _util.OPS.paintInlineImageXObjectGroup:
        case _util.OPS.paintImageMaskXObject:
          const arg = argsArray[i][0];
          if (!arg.cached && arg.data?.buffer instanceof ArrayBuffer) {
            transfers.push(arg.data.buffer);
          }
          break;
      }
    }
    return transfers;
  }
  flush(lastChunk = false, separateAnnots = null) {
    this.optimizer.flush();
    const length = this.length;
    this._totalLength += length;
    this._streamSink.enqueue({
      fnArray: this.fnArray,
      argsArray: this.argsArray,
      lastChunk,
      separateAnnots,
      length
    }, 1, this._transfers);
    this.dependencies.clear();
    this.fnArray.length = 0;
    this.argsArray.length = 0;
    this.weight = 0;
    this.optimizer.reset();
  }
}
exports.OperatorList = OperatorList;

/***/ }),
/* 65 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.PDFImage = void 0;
var _util = __w_pdfjs_require__(2);
var _image_utils = __w_pdfjs_require__(28);
var _base_stream = __w_pdfjs_require__(5);
var _colorspace = __w_pdfjs_require__(12);
var _decode_stream = __w_pdfjs_require__(18);
var _image_resizer = __w_pdfjs_require__(62);
var _jpeg_stream = __w_pdfjs_require__(26);
var _jpx = __w_pdfjs_require__(30);
var _primitives = __w_pdfjs_require__(4);
function decodeAndClamp(value, addend, coefficient, max) {
  value = addend + value * coefficient;
  if (value < 0) {
    value = 0;
  } else if (value > max) {
    value = max;
  }
  return value;
}
function resizeImageMask(src, bpc, w1, h1, w2, h2) {
  const length = w2 * h2;
  let dest;
  if (bpc <= 8) {
    dest = new Uint8Array(length);
  } else if (bpc <= 16) {
    dest = new Uint16Array(length);
  } else {
    dest = new Uint32Array(length);
  }
  const xRatio = w1 / w2;
  const yRatio = h1 / h2;
  let i,
    j,
    py,
    newIndex = 0,
    oldIndex;
  const xScaled = new Uint16Array(w2);
  const w1Scanline = w1;
  for (i = 0; i < w2; i++) {
    xScaled[i] = Math.floor(i * xRatio);
  }
  for (i = 0; i < h2; i++) {
    py = Math.floor(i * yRatio) * w1Scanline;
    for (j = 0; j < w2; j++) {
      oldIndex = py + xScaled[j];
      dest[newIndex++] = src[oldIndex];
    }
  }
  return dest;
}
class PDFImage {
  constructor({
    xref,
    res,
    image,
    isInline = false,
    smask = null,
    mask = null,
    isMask = false,
    pdfFunctionFactory,
    localColorSpaceCache
  }) {
    this.image = image;
    const dict = image.dict;
    const filter = dict.get("F", "Filter");
    let filterName;
    if (filter instanceof _primitives.Name) {
      filterName = filter.name;
    } else if (Array.isArray(filter)) {
      const filterZero = xref.fetchIfRef(filter[0]);
      if (filterZero instanceof _primitives.Name) {
        filterName = filterZero.name;
      }
    }
    switch (filterName) {
      case "JPXDecode":
        const jpxImage = new _jpx.JpxImage();
        jpxImage.parseImageProperties(image.stream);
        image.stream.reset();
        image.width = jpxImage.width;
        image.height = jpxImage.height;
        image.bitsPerComponent = jpxImage.bitsPerComponent;
        image.numComps = jpxImage.componentsCount;
        break;
      case "JBIG2Decode":
        image.bitsPerComponent = 1;
        image.numComps = 1;
        break;
    }
    let width = dict.get("W", "Width");
    let height = dict.get("H", "Height");
    if (Number.isInteger(image.width) && image.width > 0 && Number.isInteger(image.height) && image.height > 0 && (image.width !== width || image.height !== height)) {
      (0, _util.warn)("PDFImage - using the Width/Height of the image data, " + "rather than the image dictionary.");
      width = image.width;
      height = image.height;
    }
    if (width < 1 || height < 1) {
      throw new _util.FormatError(`Invalid image width: ${width} or height: ${height}`);
    }
    this.width = width;
    this.height = height;
    this.interpolate = dict.get("I", "Interpolate");
    this.imageMask = dict.get("IM", "ImageMask") || false;
    this.matte = dict.get("Matte") || false;
    let bitsPerComponent = image.bitsPerComponent;
    if (!bitsPerComponent) {
      bitsPerComponent = dict.get("BPC", "BitsPerComponent");
      if (!bitsPerComponent) {
        if (this.imageMask) {
          bitsPerComponent = 1;
        } else {
          throw new _util.FormatError(`Bits per component missing in image: ${this.imageMask}`);
        }
      }
    }
    this.bpc = bitsPerComponent;
    if (!this.imageMask) {
      let colorSpace = dict.getRaw("CS") || dict.getRaw("ColorSpace");
      if (!colorSpace) {
        (0, _util.info)("JPX images (which do not require color spaces)");
        switch (image.numComps) {
          case 1:
            colorSpace = _primitives.Name.get("DeviceGray");
            break;
          case 3:
            colorSpace = _primitives.Name.get("DeviceRGB");
            break;
          case 4:
            colorSpace = _primitives.Name.get("DeviceCMYK");
            break;
          default:
            throw new Error(`JPX images with ${image.numComps} color components not supported.`);
        }
      }
      this.colorSpace = _colorspace.ColorSpace.parse({
        cs: colorSpace,
        xref,
        resources: isInline ? res : null,
        pdfFunctionFactory,
        localColorSpaceCache
      });
      this.numComps = this.colorSpace.numComps;
    }
    this.decode = dict.getArray("D", "Decode");
    this.needsDecode = false;
    if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) || isMask && !_colorspace.ColorSpace.isDefaultDecode(this.decode, 1))) {
      this.needsDecode = true;
      const max = (1 << bitsPerComponent) - 1;
      this.decodeCoefficients = [];
      this.decodeAddends = [];
      const isIndexed = this.colorSpace?.name === "Indexed";
      for (let i = 0, j = 0; i < this.decode.length; i += 2, ++j) {
        const dmin = this.decode[i];
        const dmax = this.decode[i + 1];
        this.decodeCoefficients[j] = isIndexed ? (dmax - dmin) / max : dmax - dmin;
        this.decodeAddends[j] = isIndexed ? dmin : max * dmin;
      }
    }
    if (smask) {
      this.smask = new PDFImage({
        xref,
        res,
        image: smask,
        isInline,
        pdfFunctionFactory,
        localColorSpaceCache
      });
    } else if (mask) {
      if (mask instanceof _base_stream.BaseStream) {
        const maskDict = mask.dict,
          imageMask = maskDict.get("IM", "ImageMask");
        if (!imageMask) {
          (0, _util.warn)("Ignoring /Mask in image without /ImageMask.");
        } else {
          this.mask = new PDFImage({
            xref,
            res,
            image: mask,
            isInline,
            isMask: true,
            pdfFunctionFactory,
            localColorSpaceCache
          });
        }
      } else {
        this.mask = mask;
      }
    }
  }
  static async buildImage({
    xref,
    res,
    image,
    isInline = false,
    pdfFunctionFactory,
    localColorSpaceCache
  }) {
    const imageData = image;
    let smaskData = null;
    let maskData = null;
    const smask = image.dict.get("SMask");
    const mask = image.dict.get("Mask");
    if (smask) {
      if (smask instanceof _base_stream.BaseStream) {
        smaskData = smask;
      } else {
        (0, _util.warn)("Unsupported /SMask format.");
      }
    } else if (mask) {
      if (mask instanceof _base_stream.BaseStream || Array.isArray(mask)) {
        maskData = mask;
      } else {
        (0, _util.warn)("Unsupported /Mask format.");
      }
    }
    return new PDFImage({
      xref,
      res,
      image: imageData,
      isInline,
      smask: smaskData,
      mask: maskData,
      pdfFunctionFactory,
      localColorSpaceCache
    });
  }
  static createRawMask({
    imgArray,
    width,
    height,
    imageIsFromDecodeStream,
    inverseDecode,
    interpolate
  }) {
    const computedLength = (width + 7 >> 3) * height;
    const actualLength = imgArray.byteLength;
    const haveFullData = computedLength === actualLength;
    let data, i;
    if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) {
      data = imgArray;
    } else if (!inverseDecode) {
      data = new Uint8Array(imgArray);
    } else {
      data = new Uint8Array(computedLength);
      data.set(imgArray);
      data.fill(0xff, actualLength);
    }
    if (inverseDecode) {
      for (i = 0; i < actualLength; i++) {
        data[i] ^= 0xff;
      }
    }
    return {
      data,
      width,
      height,
      interpolate
    };
  }
  static async createMask({
    imgArray,
    width,
    height,
    imageIsFromDecodeStream,
    inverseDecode,
    interpolate,
    isOffscreenCanvasSupported = false
  }) {
    const isSingleOpaquePixel = width === 1 && height === 1 && inverseDecode === (imgArray.length === 0 || !!(imgArray[0] & 128));
    if (isSingleOpaquePixel) {
      return {
        isSingleOpaquePixel
      };
    }
    if (isOffscreenCanvasSupported) {
      if (_image_resizer.ImageResizer.needsToBeResized(width, height)) {
        const data = new Uint8ClampedArray(width * height * 4);
        (0, _image_utils.convertBlackAndWhiteToRGBA)({
          src: imgArray,
          dest: data,
          width,
          height,
          nonBlackColor: 0,
          inverseDecode
        });
        return _image_resizer.ImageResizer.createImage({
          kind: _util.ImageKind.RGBA_32BPP,
          data,
          width,
          height,
          interpolate
        });
      }
      const canvas = new OffscreenCanvas(width, height);
      const ctx = canvas.getContext("2d");
      const imgData = ctx.createImageData(width, height);
      (0, _image_utils.convertBlackAndWhiteToRGBA)({
        src: imgArray,
        dest: imgData.data,
        width,
        height,
        nonBlackColor: 0,
        inverseDecode
      });
      ctx.putImageData(imgData, 0, 0);
      const bitmap = canvas.transferToImageBitmap();
      return {
        data: null,
        width,
        height,
        interpolate,
        bitmap
      };
    }
    return this.createRawMask({
      imgArray,
      width,
      height,
      inverseDecode,
      imageIsFromDecodeStream,
      interpolate
    });
  }
  get drawWidth() {
    return Math.max(this.width, this.smask?.width || 0, this.mask?.width || 0);
  }
  get drawHeight() {
    return Math.max(this.height, this.smask?.height || 0, this.mask?.height || 0);
  }
  decodeBuffer(buffer) {
    const bpc = this.bpc;
    const numComps = this.numComps;
    const decodeAddends = this.decodeAddends;
    const decodeCoefficients = this.decodeCoefficients;
    const max = (1 << bpc) - 1;
    let i, ii;
    if (bpc === 1) {
      for (i = 0, ii = buffer.length; i < ii; i++) {
        buffer[i] = +!buffer[i];
      }
      return;
    }
    let index = 0;
    for (i = 0, ii = this.width * this.height; i < ii; i++) {
      for (let j = 0; j < numComps; j++) {
        buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j], decodeCoefficients[j], max);
        index++;
      }
    }
  }
  getComponents(buffer) {
    const bpc = this.bpc;
    if (bpc === 8) {
      return buffer;
    }
    const width = this.width;
    const height = this.height;
    const numComps = this.numComps;
    const length = width * height * numComps;
    let bufferPos = 0;
    let output;
    if (bpc <= 8) {
      output = new Uint8Array(length);
    } else if (bpc <= 16) {
      output = new Uint16Array(length);
    } else {
      output = new Uint32Array(length);
    }
    const rowComps = width * numComps;
    const max = (1 << bpc) - 1;
    let i = 0,
      ii,
      buf;
    if (bpc === 1) {
      let mask, loop1End, loop2End;
      for (let j = 0; j < height; j++) {
        loop1End = i + (rowComps & ~7);
        loop2End = i + rowComps;
        while (i < loop1End) {
          buf = buffer[bufferPos++];
          output[i] = buf >> 7 & 1;
          output[i + 1] = buf >> 6 & 1;
          output[i + 2] = buf >> 5 & 1;
          output[i + 3] = buf >> 4 & 1;
          output[i + 4] = buf >> 3 & 1;
          output[i + 5] = buf >> 2 & 1;
          output[i + 6] = buf >> 1 & 1;
          output[i + 7] = buf & 1;
          i += 8;
        }
        if (i < loop2End) {
          buf = buffer[bufferPos++];
          mask = 128;
          while (i < loop2End) {
            output[i++] = +!!(buf & mask);
            mask >>= 1;
          }
        }
      }
    } else {
      let bits = 0;
      buf = 0;
      for (i = 0, ii = length; i < ii; ++i) {
        if (i % rowComps === 0) {
          buf = 0;
          bits = 0;
        }
        while (bits < bpc) {
          buf = buf << 8 | buffer[bufferPos++];
          bits += 8;
        }
        const remainingBits = bits - bpc;
        let value = buf >> remainingBits;
        if (value < 0) {
          value = 0;
        } else if (value > max) {
          value = max;
        }
        output[i] = value;
        buf &= (1 << remainingBits) - 1;
        bits = remainingBits;
      }
    }
    return output;
  }
  fillOpacity(rgbaBuf, width, height, actualHeight, image) {
    const smask = this.smask;
    const mask = this.mask;
    let alphaBuf, sw, sh, i, ii, j;
    if (smask) {
      sw = smask.width;
      sh = smask.height;
      alphaBuf = new Uint8ClampedArray(sw * sh);
      smask.fillGrayBuffer(alphaBuf);
      if (sw !== width || sh !== height) {
        alphaBuf = resizeImageMask(alphaBuf, smask.bpc, sw, sh, width, height);
      }
    } else if (mask) {
      if (mask instanceof PDFImage) {
        sw = mask.width;
        sh = mask.height;
        alphaBuf = new Uint8ClampedArray(sw * sh);
        mask.numComps = 1;
        mask.fillGrayBuffer(alphaBuf);
        for (i = 0, ii = sw * sh; i < ii; ++i) {
          alphaBuf[i] = 255 - alphaBuf[i];
        }
        if (sw !== width || sh !== height) {
          alphaBuf = resizeImageMask(alphaBuf, mask.bpc, sw, sh, width, height);
        }
      } else if (Array.isArray(mask)) {
        alphaBuf = new Uint8ClampedArray(width * height);
        const numComps = this.numComps;
        for (i = 0, ii = width * height; i < ii; ++i) {
          let opacity = 0;
          const imageOffset = i * numComps;
          for (j = 0; j < numComps; ++j) {
            const color = image[imageOffset + j];
            const maskOffset = j * 2;
            if (color < mask[maskOffset] || color > mask[maskOffset + 1]) {
              opacity = 255;
              break;
            }
          }
          alphaBuf[i] = opacity;
        }
      } else {
        throw new _util.FormatError("Unknown mask format.");
      }
    }
    if (alphaBuf) {
      for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {
        rgbaBuf[j] = alphaBuf[i];
      }
    } else {
      for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {
        rgbaBuf[j] = 255;
      }
    }
  }
  undoPreblend(buffer, width, height) {
    const matte = this.smask?.matte;
    if (!matte) {
      return;
    }
    const matteRgb = this.colorSpace.getRgb(matte, 0);
    const matteR = matteRgb[0];
    const matteG = matteRgb[1];
    const matteB = matteRgb[2];
    const length = width * height * 4;
    for (let i = 0; i < length; i += 4) {
      const alpha = buffer[i + 3];
      if (alpha === 0) {
        buffer[i] = 255;
        buffer[i + 1] = 255;
        buffer[i + 2] = 255;
        continue;
      }
      const k = 255 / alpha;
      buffer[i] = (buffer[i] - matteR) * k + matteR;
      buffer[i + 1] = (buffer[i + 1] - matteG) * k + matteG;
      buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB;
    }
  }
  async createImageData(forceRGBA = false, isOffscreenCanvasSupported = false) {
    const drawWidth = this.drawWidth;
    const drawHeight = this.drawHeight;
    const imgData = {
      width: drawWidth,
      height: drawHeight,
      interpolate: this.interpolate,
      kind: 0,
      data: null
    };
    const numComps = this.numComps;
    const originalWidth = this.width;
    const originalHeight = this.height;
    const bpc = this.bpc;
    const rowBytes = originalWidth * numComps * bpc + 7 >> 3;
    const mustBeResized = isOffscreenCanvasSupported && _image_resizer.ImageResizer.needsToBeResized(drawWidth, drawHeight);
    if (!forceRGBA) {
      let kind;
      if (this.colorSpace.name === "DeviceGray" && bpc === 1) {
        kind = _util.ImageKind.GRAYSCALE_1BPP;
      } else if (this.colorSpace.name === "DeviceRGB" && bpc === 8 && !this.needsDecode) {
        kind = _util.ImageKind.RGB_24BPP;
      }
      if (kind && !this.smask && !this.mask && drawWidth === originalWidth && drawHeight === originalHeight) {
        const data = this.getImageBytes(originalHeight * rowBytes, {});
        if (isOffscreenCanvasSupported) {
          if (mustBeResized) {
            return _image_resizer.ImageResizer.createImage({
              data,
              kind,
              width: drawWidth,
              height: drawHeight,
              interpolate: this.interpolate
            }, this.needsDecode);
          }
          return this.createBitmap(kind, originalWidth, originalHeight, data);
        }
        imgData.kind = kind;
        imgData.data = data;
        if (this.needsDecode) {
          (0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP, "PDFImage.createImageData: The image must be grayscale.");
          const buffer = imgData.data;
          for (let i = 0, ii = buffer.length; i < ii; i++) {
            buffer[i] ^= 0xff;
          }
        }
        return imgData;
      }
      if (this.image instanceof _jpeg_stream.JpegStream && !this.smask && !this.mask && !this.needsDecode) {
        let imageLength = originalHeight * rowBytes;
        if (isOffscreenCanvasSupported && !mustBeResized) {
          let isHandled = false;
          switch (this.colorSpace.name) {
            case "DeviceGray":
              imageLength *= 4;
              isHandled = true;
              break;
            case "DeviceRGB":
              imageLength = imageLength / 3 * 4;
              isHandled = true;
              break;
            case "DeviceCMYK":
              isHandled = true;
              break;
          }
          if (isHandled) {
            const rgba = this.getImageBytes(imageLength, {
              drawWidth,
              drawHeight,
              forceRGBA: true
            });
            return this.createBitmap(_util.ImageKind.RGBA_32BPP, drawWidth, drawHeight, rgba);
          }
        } else {
          switch (this.colorSpace.name) {
            case "DeviceGray":
              imageLength *= 3;
            case "DeviceRGB":
            case "DeviceCMYK":
              imgData.kind = _util.ImageKind.RGB_24BPP;
              imgData.data = this.getImageBytes(imageLength, {
                drawWidth,
                drawHeight,
                forceRGB: true
              });
              if (mustBeResized) {
                return _image_resizer.ImageResizer.createImage(imgData);
              }
              return imgData;
          }
        }
      }
    }
    const imgArray = this.getImageBytes(originalHeight * rowBytes, {
      internal: true
    });
    const actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight;
    const comps = this.getComponents(imgArray);
    let alpha01, maybeUndoPreblend;
    let canvas, ctx, canvasImgData, data;
    if (isOffscreenCanvasSupported && !mustBeResized) {
      canvas = new OffscreenCanvas(drawWidth, drawHeight);
      ctx = canvas.getContext("2d");
      canvasImgData = ctx.createImageData(drawWidth, drawHeight);
      data = canvasImgData.data;
    }
    imgData.kind = _util.ImageKind.RGBA_32BPP;
    if (!forceRGBA && !this.smask && !this.mask) {
      if (!isOffscreenCanvasSupported || mustBeResized) {
        imgData.kind = _util.ImageKind.RGB_24BPP;
        data = new Uint8ClampedArray(drawWidth * drawHeight * 3);
        alpha01 = 0;
      } else {
        const arr = new Uint32Array(data.buffer);
        arr.fill(_util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff);
        alpha01 = 1;
      }
      maybeUndoPreblend = false;
    } else {
      if (!isOffscreenCanvasSupported || mustBeResized) {
        data = new Uint8ClampedArray(drawWidth * drawHeight * 4);
      }
      alpha01 = 1;
      maybeUndoPreblend = true;
      this.fillOpacity(data, drawWidth, drawHeight, actualHeight, comps);
    }
    if (this.needsDecode) {
      this.decodeBuffer(comps);
    }
    this.colorSpace.fillRgb(data, originalWidth, originalHeight, drawWidth, drawHeight, actualHeight, bpc, comps, alpha01);
    if (maybeUndoPreblend) {
      this.undoPreblend(data, drawWidth, actualHeight);
    }
    if (isOffscreenCanvasSupported && !mustBeResized) {
      ctx.putImageData(canvasImgData, 0, 0);
      const bitmap = canvas.transferToImageBitmap();
      return {
        data: null,
        width: drawWidth,
        height: drawHeight,
        bitmap,
        interpolate: this.interpolate
      };
    }
    imgData.data = data;
    if (mustBeResized) {
      return _image_resizer.ImageResizer.createImage(imgData);
    }
    return imgData;
  }
  fillGrayBuffer(buffer) {
    const numComps = this.numComps;
    if (numComps !== 1) {
      throw new _util.FormatError(`Reading gray scale from a color image: ${numComps}`);
    }
    const width = this.width;
    const height = this.height;
    const bpc = this.bpc;
    const rowBytes = width * numComps * bpc + 7 >> 3;
    const imgArray = this.getImageBytes(height * rowBytes, {
      internal: true
    });
    const comps = this.getComponents(imgArray);
    let i, length;
    if (bpc === 1) {
      length = width * height;
      if (this.needsDecode) {
        for (i = 0; i < length; ++i) {
          buffer[i] = comps[i] - 1 & 255;
        }
      } else {
        for (i = 0; i < length; ++i) {
          buffer[i] = -comps[i] & 255;
        }
      }
      return;
    }
    if (this.needsDecode) {
      this.decodeBuffer(comps);
    }
    length = width * height;
    const scale = 255 / ((1 << bpc) - 1);
    for (i = 0; i < length; ++i) {
      buffer[i] = scale * comps[i];
    }
  }
  createBitmap(kind, width, height, src) {
    const canvas = new OffscreenCanvas(width, height);
    const ctx = canvas.getContext("2d");
    let imgData;
    if (kind === _util.ImageKind.RGBA_32BPP) {
      imgData = new ImageData(src, width, height);
    } else {
      imgData = ctx.createImageData(width, height);
      (0, _image_utils.convertToRGBA)({
        kind,
        src,
        dest: new Uint32Array(imgData.data.buffer),
        width,
        height,
        inverseDecode: this.needsDecode
      });
    }
    ctx.putImageData(imgData, 0, 0);
    const bitmap = canvas.transferToImageBitmap();
    return {
      data: null,
      width,
      height,
      bitmap,
      interpolate: this.interpolate
    };
  }
  getImageBytes(length, {
    drawWidth,
    drawHeight,
    forceRGBA = false,
    forceRGB = false,
    internal = false
  }) {
    this.image.reset();
    this.image.drawWidth = drawWidth || this.width;
    this.image.drawHeight = drawHeight || this.height;
    this.image.forceRGBA = !!forceRGBA;
    this.image.forceRGB = !!forceRGB;
    const imageBytes = this.image.getBytes(length);
    if (internal || this.image instanceof _decode_stream.DecodeStream) {
      return imageBytes;
    }
    (0, _util.assert)(imageBytes instanceof Uint8Array, 'PDFImage.getImageBytes: Unsupported "imageBytes" type.');
    return new Uint8Array(imageBytes);
  }
}
exports.PDFImage = PDFImage;

/***/ }),
/* 66 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.Catalog = void 0;
var _core_utils = __w_pdfjs_require__(3);
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(4);
var _name_number_tree = __w_pdfjs_require__(67);
var _base_stream = __w_pdfjs_require__(5);
var _cleanup_helper = __w_pdfjs_require__(68);
var _colorspace = __w_pdfjs_require__(12);
var _file_spec = __w_pdfjs_require__(69);
var _image_utils = __w_pdfjs_require__(59);
var _metadata_parser = __w_pdfjs_require__(70);
var _struct_tree = __w_pdfjs_require__(72);
function fetchDestination(dest) {
  if (dest instanceof _primitives.Dict) {
    dest = dest.get("D");
  }
  return Array.isArray(dest) ? dest : null;
}
class Catalog {
  constructor(pdfManager, xref) {
    this.pdfManager = pdfManager;
    this.xref = xref;
    this._catDict = xref.getCatalogObj();
    if (!(this._catDict instanceof _primitives.Dict)) {
      throw new _util.FormatError("Catalog object is not a dictionary.");
    }
    this.toplevelPagesDict;
    this._actualNumPages = null;
    this.fontCache = new _primitives.RefSetCache();
    this.builtInCMapCache = new Map();
    this.standardFontDataCache = new Map();
    this.globalImageCache = new _image_utils.GlobalImageCache();
    this.pageKidsCountCache = new _primitives.RefSetCache();
    this.pageIndexCache = new _primitives.RefSetCache();
    this.nonBlendModesSet = new _primitives.RefSet();
    this.systemFontCache = new Map();
  }
  cloneDict() {
    return this._catDict.clone();
  }
  get version() {
    const version = this._catDict.get("Version");
    if (version instanceof _primitives.Name) {
      if (_core_utils.PDF_VERSION_REGEXP.test(version.name)) {
        return (0, _util.shadow)(this, "version", version.name);
      }
      (0, _util.warn)(`Invalid PDF catalog version: ${version.name}`);
    }
    return (0, _util.shadow)(this, "version", null);
  }
  get lang() {
    const lang = this._catDict.get("Lang");
    return (0, _util.shadow)(this, "lang", typeof lang === "string" ? (0, _util.stringToPDFString)(lang) : null);
  }
  get needsRendering() {
    const needsRendering = this._catDict.get("NeedsRendering");
    return (0, _util.shadow)(this, "needsRendering", typeof needsRendering === "boolean" ? needsRendering : false);
  }
  get collection() {
    let collection = null;
    try {
      const obj = this._catDict.get("Collection");
      if (obj instanceof _primitives.Dict && obj.size > 0) {
        collection = obj;
      }
    } catch (ex) {
      if (ex instanceof _core_utils.MissingDataException) {
        throw ex;
      }
      (0, _util.info)("Cannot fetch Collection entry; assuming no collection is present.");
    }
    return (0, _util.shadow)(this, "collection", collection);
  }
  get acroForm() {
    let acroForm = null;
    try {
      const obj = this._catDict.get("AcroForm");
      if (obj instanceof _primitives.Dict && obj.size > 0) {
        acroForm = obj;
      }
    } catch (ex) {
      if (ex instanceof _core_utils.MissingDataException) {
        throw ex;
      }
      (0, _util.info)("Cannot fetch AcroForm entry; assuming no forms are present.");
    }
    return (0, _util.shadow)(this, "acroForm", acroForm);
  }
  get acroFormRef() {
    const value = this._catDict.getRaw("AcroForm");
    return (0, _util.shadow)(this, "acroFormRef", value instanceof _primitives.Ref ? value : null);
  }
  get metadata() {
    const streamRef = this._catDict.getRaw("Metadata");
    if (!(streamRef instanceof _primitives.Ref)) {
      return (0, _util.shadow)(this, "metadata", null);
    }
    let metadata = null;
    try {
      const stream = this.xref.fetch(streamRef, !this.xref.encrypt?.encryptMetadata);
      if (stream instanceof _base_stream.BaseStream && stream.dict instanceof _primitives.Dict) {
        const type = stream.dict.get("Type");
        const subtype = stream.dict.get("Subtype");
        if ((0, _primitives.isName)(type, "Metadata") && (0, _primitives.isName)(subtype, "XML")) {
          const data = (0, _util.stringToUTF8String)(stream.getString());
          if (data) {
            metadata = new _metadata_parser.MetadataParser(data).serializable;
          }
        }
      }
    } catch (ex) {
      if (ex instanceof _core_utils.MissingDataException) {
        throw ex;
      }
      (0, _util.info)(`Skipping invalid Metadata: "${ex}".`);
    }
    return (0, _util.shadow)(this, "metadata", metadata);
  }
  get markInfo() {
    let markInfo = null;
    try {
      markInfo = this._readMarkInfo();
    } catch (ex) {
      if (ex instanceof _core_utils.MissingDataException) {
        throw ex;
      }
      (0, _util.warn)("Unable to read mark info.");
    }
    return (0, _util.shadow)(this, "markInfo", markInfo);
  }
  _readMarkInfo() {
    const obj = this._catDict.get("MarkInfo");
    if (!(obj instanceof _primitives.Dict)) {
      return null;
    }
    const markInfo = {
      Marked: false,
      UserProperties: false,
      Suspects: false
    };
    for (const key in markInfo) {
      const value = obj.get(key);
      if (typeof value === "boolean") {
        markInfo[key] = value;
      }
    }
    return markInfo;
  }
  get structTreeRoot() {
    let structTree = null;
    try {
      structTree = this._readStructTreeRoot();
    } catch (ex) {
      if (ex instanceof _core_utils.MissingDataException) {
        throw ex;
      }
      (0, _util.warn)("Unable read to structTreeRoot info.");
    }
    return (0, _util.shadow)(this, "structTreeRoot", structTree);
  }
  _readStructTreeRoot() {
    const rawObj = this._catDict.getRaw("StructTreeRoot");
    const obj = this.xref.fetchIfRef(rawObj);
    if (!(obj instanceof _primitives.Dict)) {
      return null;
    }
    const root = new _struct_tree.StructTreeRoot(obj, rawObj);
    root.init();
    return root;
  }
  get toplevelPagesDict() {
    const pagesObj = this._catDict.get("Pages");
    if (!(pagesObj instanceof _primitives.Dict)) {
      throw new _util.FormatError("Invalid top-level pages dictionary.");
    }
    return (0, _util.shadow)(this, "toplevelPagesDict", pagesObj);
  }
  get documentOutline() {
    let obj = null;
    try {
      obj = this._readDocumentOutline();
    } catch (ex) {
      if (ex instanceof _core_utils.MissingDataException) {
        throw ex;
      }
      (0, _util.warn)("Unable to read document outline.");
    }
    return (0, _util.shadow)(this, "documentOutline", obj);
  }
  _readDocumentOutline() {
    let obj = this._catDict.get("Outlines");
    if (!(obj instanceof _primitives.Dict)) {
      return null;
    }
    obj = obj.getRaw("First");
    if (!(obj instanceof _primitives.Ref)) {
      return null;
    }
    const root = {
      items: []
    };
    const queue = [{
      obj,
      parent: root
    }];
    const processed = new _primitives.RefSet();
    processed.put(obj);
    const xref = this.xref,
      blackColor = new Uint8ClampedArray(3);
    while (queue.length > 0) {
      const i = queue.shift();
      const outlineDict = xref.fetchIfRef(i.obj);
      if (outlineDict === null) {
        continue;
      }
      if (!outlineDict.has("Title")) {
        throw new _util.FormatError("Invalid outline item encountered.");
      }
      const data = {
        url: null,
        dest: null,
        action: null
      };
      Catalog.parseDestDictionary({
        destDict: outlineDict,
        resultObj: data,
        docBaseUrl: this.baseUrl,
        docAttachments: this.attachments
      });
      const title = outlineDict.get("Title");
      const flags = outlineDict.get("F") || 0;
      const color = outlineDict.getArray("C");
      const count = outlineDict.get("Count");
      let rgbColor = blackColor;
      if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) {
        rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0);
      }
      const outlineItem = {
        action: data.action,
        attachment: data.attachment,
        dest: data.dest,
        url: data.url,
        unsafeUrl: data.unsafeUrl,
        newWindow: data.newWindow,
        setOCGState: data.setOCGState,
        title: (0, _util.stringToPDFString)(title),
        color: rgbColor,
        count: Number.isInteger(count) ? count : undefined,
        bold: !!(flags & 2),
        italic: !!(flags & 1),
        items: []
      };
      i.parent.items.push(outlineItem);
      obj = outlineDict.getRaw("First");
      if (obj instanceof _primitives.Ref && !processed.has(obj)) {
        queue.push({
          obj,
          parent: outlineItem
        });
        processed.put(obj);
      }
      obj = outlineDict.getRaw("Next");
      if (obj instanceof _primitives.Ref && !processed.has(obj)) {
        queue.push({
          obj,
          parent: i.parent
        });
        processed.put(obj);
      }
    }
    return root.items.length > 0 ? root.items : null;
  }
  get permissions() {
    let permissions = null;
    try {
      permissions = this._readPermissions();
    } catch (ex) {
      if (ex instanceof _core_utils.MissingDataException) {
        throw ex;
      }
      (0, _util.warn)("Unable to read permissions.");
    }
    return (0, _util.shadow)(this, "permissions", permissions);
  }
  _readPermissions() {
    const encrypt = this.xref.trailer.get("Encrypt");
    if (!(encrypt instanceof _primitives.Dict)) {
      return null;
    }
    let flags = encrypt.get("P");
    if (typeof flags !== "number") {
      return null;
    }
    flags += 2 ** 32;
    const permissions = [];
    for (const key in _util.PermissionFlag) {
      const value = _util.PermissionFlag[key];
      if (flags & value) {
        permissions.push(value);
      }
    }
    return permissions;
  }
  get optionalContentConfig() {
    let config = null;
    try {
      const properties = this._catDict.get("OCProperties");
      if (!properties) {
        return (0, _util.shadow)(this, "optionalContentConfig", null);
      }
      const defaultConfig = properties.get("D");
      if (!defaultConfig) {
        return (0, _util.shadow)(this, "optionalContentConfig", null);
      }
      const groupsData = properties.get("OCGs");
      if (!Array.isArray(groupsData)) {
        return (0, _util.shadow)(this, "optionalContentConfig", null);
      }
      const groups = [];
      const groupRefs = [];
      for (const groupRef of groupsData) {
        if (!(groupRef instanceof _primitives.Ref)) {
          continue;
        }
        groupRefs.push(groupRef);
        const group = this.xref.fetchIfRef(groupRef);
        groups.push({
          id: groupRef.toString(),
          name: typeof group.get("Name") === "string" ? (0, _util.stringToPDFString)(group.get("Name")) : null,
          intent: typeof group.get("Intent") === "string" ? (0, _util.stringToPDFString)(group.get("Intent")) : null
        });
      }
      config = this._readOptionalContentConfig(defaultConfig, groupRefs);
      config.groups = groups;
    } catch (ex) {
      if (ex instanceof _core_utils.MissingDataException) {
        throw ex;
      }
      (0, _util.warn)(`Unable to read optional content config: ${ex}`);
    }
    return (0, _util.shadow)(this, "optionalContentConfig", config);
  }
  _readOptionalContentConfig(config, contentGroupRefs) {
    function parseOnOff(refs) {
      const onParsed = [];
      if (Array.isArray(refs)) {
        for (const value of refs) {
          if (!(value instanceof _primitives.Ref)) {
            continue;
          }
          if (contentGroupRefs.includes(value)) {
            onParsed.push(value.toString());
          }
        }
      }
      return onParsed;
    }
    function parseOrder(refs, nestedLevels = 0) {
      if (!Array.isArray(refs)) {
        return null;
      }
      const order = [];
      for (const value of refs) {
        if (value instanceof _primitives.Ref && contentGroupRefs.includes(value)) {
          parsedOrderRefs.put(value);
          order.push(value.toString());
          continue;
        }
        const nestedOrder = parseNestedOrder(value, nestedLevels);
        if (nestedOrder) {
          order.push(nestedOrder);
        }
      }
      if (nestedLevels > 0) {
        return order;
      }
      const hiddenGroups = [];
      for (const groupRef of contentGroupRefs) {
        if (parsedOrderRefs.has(groupRef)) {
          continue;
        }
        hiddenGroups.push(groupRef.toString());
      }
      if (hiddenGroups.length) {
        order.push({
          name: null,
          order: hiddenGroups
        });
      }
      return order;
    }
    function parseNestedOrder(ref, nestedLevels) {
      if (++nestedLevels > MAX_NESTED_LEVELS) {
        (0, _util.warn)("parseNestedOrder - reached MAX_NESTED_LEVELS.");
        return null;
      }
      const value = xref.fetchIfRef(ref);
      if (!Array.isArray(value)) {
        return null;
      }
      const nestedName = xref.fetchIfRef(value[0]);
      if (typeof nestedName !== "string") {
        return null;
      }
      const nestedOrder = parseOrder(value.slice(1), nestedLevels);
      if (!nestedOrder || !nestedOrder.length) {
        return null;
      }
      return {
        name: (0, _util.stringToPDFString)(nestedName),
        order: nestedOrder
      };
    }
    const xref = this.xref,
      parsedOrderRefs = new _primitives.RefSet(),
      MAX_NESTED_LEVELS = 10;
    return {
      name: typeof config.get("Name") === "string" ? (0, _util.stringToPDFString)(config.get("Name")) : null,
      creator: typeof config.get("Creator") === "string" ? (0, _util.stringToPDFString)(config.get("Creator")) : null,
      baseState: config.get("BaseState") instanceof _primitives.Name ? config.get("BaseState").name : null,
      on: parseOnOff(config.get("ON")),
      off: parseOnOff(config.get("OFF")),
      order: parseOrder(config.get("Order")),
      groups: null
    };
  }
  setActualNumPages(num = null) {
    this._actualNumPages = num;
  }
  get hasActualNumPages() {
    return this._actualNumPages !== null;
  }
  get _pagesCount() {
    const obj = this.toplevelPagesDict.get("Count");
    if (!Number.isInteger(obj)) {
      throw new _util.FormatError("Page count in top-level pages dictionary is not an integer.");
    }
    return (0, _util.shadow)(this, "_pagesCount", obj);
  }
  get numPages() {
    return this.hasActualNumPages ? this._actualNumPages : this._pagesCount;
  }
  get destinations() {
    const obj = this._readDests(),
      dests = Object.create(null);
    if (obj instanceof _name_number_tree.NameTree) {
      for (const [key, value] of obj.getAll()) {
        const dest = fetchDestination(value);
        if (dest) {
          dests[(0, _util.stringToPDFString)(key)] = dest;
        }
      }
    } else if (obj instanceof _primitives.Dict) {
      obj.forEach(function (key, value) {
        const dest = fetchDestination(value);
        if (dest) {
          dests[key] = dest;
        }
      });
    }
    return (0, _util.shadow)(this, "destinations", dests);
  }
  getDestination(id) {
    const obj = this._readDests();
    if (obj instanceof _name_number_tree.NameTree) {
      const dest = fetchDestination(obj.get(id));
      if (dest) {
        return dest;
      }
      const allDest = this.destinations[id];
      if (allDest) {
        (0, _util.warn)(`Found "${id}" at an incorrect position in the NameTree.`);
        return allDest;
      }
    } else if (obj instanceof _primitives.Dict) {
      const dest = fetchDestination(obj.get(id));
      if (dest) {
        return dest;
      }
    }
    return null;
  }
  _readDests() {
    const obj = this._catDict.get("Names");
    if (obj?.has("Dests")) {
      return new _name_number_tree.NameTree(obj.getRaw("Dests"), this.xref);
    } else if (this._catDict.has("Dests")) {
      return this._catDict.get("Dests");
    }
    return undefined;
  }
  get pageLabels() {
    let obj = null;
    try {
      obj = this._readPageLabels();
    } catch (ex) {
      if (ex instanceof _core_utils.MissingDataException) {
        throw ex;
      }
      (0, _util.warn)("Unable to read page labels.");
    }
    return (0, _util.shadow)(this, "pageLabels", obj);
  }
  _readPageLabels() {
    const obj = this._catDict.getRaw("PageLabels");
    if (!obj) {
      return null;
    }
    const pageLabels = new Array(this.numPages);
    let style = null,
      prefix = "";
    const numberTree = new _name_number_tree.NumberTree(obj, this.xref);
    const nums = numberTree.getAll();
    let currentLabel = "",
      currentIndex = 1;
    for (let i = 0, ii = this.numPages; i < ii; i++) {
      const labelDict = nums.get(i);
      if (labelDict !== undefined) {
        if (!(labelDict instanceof _primitives.Dict)) {
          throw new _util.FormatError("PageLabel is not a dictionary.");
        }
        if (labelDict.has("Type") && !(0, _primitives.isName)(labelDict.get("Type"), "PageLabel")) {
          throw new _util.FormatError("Invalid type in PageLabel dictionary.");
        }
        if (labelDict.has("S")) {
          const s = labelDict.get("S");
          if (!(s instanceof _primitives.Name)) {
            throw new _util.FormatError("Invalid style in PageLabel dictionary.");
          }
          style = s.name;
        } else {
          style = null;
        }
        if (labelDict.has("P")) {
          const p = labelDict.get("P");
          if (typeof p !== "string") {
            throw new _util.FormatError("Invalid prefix in PageLabel dictionary.");
          }
          prefix = (0, _util.stringToPDFString)(p);
        } else {
          prefix = "";
        }
        if (labelDict.has("St")) {
          const st = labelDict.get("St");
          if (!(Number.isInteger(st) && st >= 1)) {
            throw new _util.FormatError("Invalid start in PageLabel dictionary.");
          }
          currentIndex = st;
        } else {
          currentIndex = 1;
        }
      }
      switch (style) {
        case "D":
          currentLabel = currentIndex;
          break;
        case "R":
        case "r":
          currentLabel = (0, _core_utils.toRomanNumerals)(currentIndex, style === "r");
          break;
        case "A":
        case "a":
          const LIMIT = 26;
          const A_UPPER_CASE = 0x41,
            A_LOWER_CASE = 0x61;
          const baseCharCode = style === "a" ? A_LOWER_CASE : A_UPPER_CASE;
          const letterIndex = currentIndex - 1;
          const character = String.fromCharCode(baseCharCode + letterIndex % LIMIT);
          currentLabel = character.repeat(Math.floor(letterIndex / LIMIT) + 1);
          break;
        default:
          if (style) {
            throw new _util.FormatError(`Invalid style "${style}" in PageLabel dictionary.`);
          }
          currentLabel = "";
      }
      pageLabels[i] = prefix + currentLabel;
      currentIndex++;
    }
    return pageLabels;
  }
  get pageLayout() {
    const obj = this._catDict.get("PageLayout");
    let pageLayout = "";
    if (obj instanceof _primitives.Name) {
      switch (obj.name) {
        case "SinglePage":
        case "OneColumn":
        case "TwoColumnLeft":
        case "TwoColumnRight":
        case "TwoPageLeft":
        case "TwoPageRight":
          pageLayout = obj.name;
      }
    }
    return (0, _util.shadow)(this, "pageLayout", pageLayout);
  }
  get pageMode() {
    const obj = this._catDict.get("PageMode");
    let pageMode = "UseNone";
    if (obj instanceof _primitives.Name) {
      switch (obj.name) {
        case "UseNone":
        case "UseOutlines":
        case "UseThumbs":
        case "FullScreen":
        case "UseOC":
        case "UseAttachments":
          pageMode = obj.name;
      }
    }
    return (0, _util.shadow)(this, "pageMode", pageMode);
  }
  get viewerPreferences() {
    const obj = this._catDict.get("ViewerPreferences");
    if (!(obj instanceof _primitives.Dict)) {
      return (0, _util.shadow)(this, "viewerPreferences", null);
    }
    let prefs = null;
    for (const key of obj.getKeys()) {
      const value = obj.get(key);
      let prefValue;
      switch (key) {
        case "HideToolbar":
        case "HideMenubar":
        case "HideWindowUI":
        case "FitWindow":
        case "CenterWindow":
        case "DisplayDocTitle":
        case "PickTrayByPDFSize":
          if (typeof value === "boolean") {
            prefValue = value;
          }
          break;
        case "NonFullScreenPageMode":
          if (value instanceof _primitives.Name) {
            switch (value.name) {
              case "UseNone":
              case "UseOutlines":
              case "UseThumbs":
              case "UseOC":
                prefValue = value.name;
                break;
              default:
                prefValue = "UseNone";
            }
          }
          break;
        case "Direction":
          if (value instanceof _primitives.Name) {
            switch (value.name) {
              case "L2R":
              case "R2L":
                prefValue = value.name;
                break;
              default:
                prefValue = "L2R";
            }
          }
          break;
        case "ViewArea":
        case "ViewClip":
        case "PrintArea":
        case "PrintClip":
          if (value instanceof _primitives.Name) {
            switch (value.name) {
              case "MediaBox":
              case "CropBox":
              case "BleedBox":
              case "TrimBox":
              case "ArtBox":
                prefValue = value.name;
                break;
              default:
                prefValue = "CropBox";
            }
          }
          break;
        case "PrintScaling":
          if (value instanceof _primitives.Name) {
            switch (value.name) {
              case "None":
              case "AppDefault":
                prefValue = value.name;
                break;
              default:
                prefValue = "AppDefault";
            }
          }
          break;
        case "Duplex":
          if (value instanceof _primitives.Name) {
            switch (value.name) {
              case "Simplex":
              case "DuplexFlipShortEdge":
              case "DuplexFlipLongEdge":
                prefValue = value.name;
                break;
              default:
                prefValue = "None";
            }
          }
          break;
        case "PrintPageRange":
          if (Array.isArray(value) && value.length % 2 === 0) {
            const isValid = value.every((page, i, arr) => {
              return Number.isInteger(page) && page > 0 && (i === 0 || page >= arr[i - 1]) && page <= this.numPages;
            });
            if (isValid) {
              prefValue = value;
            }
          }
          break;
        case "NumCopies":
          if (Number.isInteger(value) && value > 0) {
            prefValue = value;
          }
          break;
        default:
          (0, _util.warn)(`Ignoring non-standard key in ViewerPreferences: ${key}.`);
          continue;
      }
      if (prefValue === undefined) {
        (0, _util.warn)(`Bad value, for key "${key}", in ViewerPreferences: ${value}.`);
        continue;
      }
      if (!prefs) {
        prefs = Object.create(null);
      }
      prefs[key] = prefValue;
    }
    return (0, _util.shadow)(this, "viewerPreferences", prefs);
  }
  get openAction() {
    const obj = this._catDict.get("OpenAction");
    const openAction = Object.create(null);
    if (obj instanceof _primitives.Dict) {
      const destDict = new _primitives.Dict(this.xref);
      destDict.set("A", obj);
      const resultObj = {
        url: null,
        dest: null,
        action: null
      };
      Catalog.parseDestDictionary({
        destDict,
        resultObj
      });
      if (Array.isArray(resultObj.dest)) {
        openAction.dest = resultObj.dest;
      } else if (resultObj.action) {
        openAction.action = resultObj.action;
      }
    } else if (Array.isArray(obj)) {
      openAction.dest = obj;
    }
    return (0, _util.shadow)(this, "openAction", (0, _util.objectSize)(openAction) > 0 ? openAction : null);
  }
  get attachments() {
    const obj = this._catDict.get("Names");
    let attachments = null;
    if (obj instanceof _primitives.Dict && obj.has("EmbeddedFiles")) {
      const nameTree = new _name_number_tree.NameTree(obj.getRaw("EmbeddedFiles"), this.xref);
      for (const [key, value] of nameTree.getAll()) {
        const fs = new _file_spec.FileSpec(value, this.xref);
        if (!attachments) {
          attachments = Object.create(null);
        }
        attachments[(0, _util.stringToPDFString)(key)] = fs.serializable;
      }
    }
    return (0, _util.shadow)(this, "attachments", attachments);
  }
  get xfaImages() {
    const obj = this._catDict.get("Names");
    let xfaImages = null;
    if (obj instanceof _primitives.Dict && obj.has("XFAImages")) {
      const nameTree = new _name_number_tree.NameTree(obj.getRaw("XFAImages"), this.xref);
      for (const [key, value] of nameTree.getAll()) {
        if (!xfaImages) {
          xfaImages = new _primitives.Dict(this.xref);
        }
        xfaImages.set((0, _util.stringToPDFString)(key), value);
      }
    }
    return (0, _util.shadow)(this, "xfaImages", xfaImages);
  }
  _collectJavaScript() {
    const obj = this._catDict.get("Names");
    let javaScript = null;
    function appendIfJavaScriptDict(name, jsDict) {
      if (!(jsDict instanceof _primitives.Dict)) {
        return;
      }
      if (!(0, _primitives.isName)(jsDict.get("S"), "JavaScript")) {
        return;
      }
      let js = jsDict.get("JS");
      if (js instanceof _base_stream.BaseStream) {
        js = js.getString();
      } else if (typeof js !== "string") {
        return;
      }
      js = (0, _util.stringToPDFString)(js).replaceAll("\x00", "");
      if (js) {
        (javaScript ||= new Map()).set(name, js);
      }
    }
    if (obj instanceof _primitives.Dict && obj.has("JavaScript")) {
      const nameTree = new _name_number_tree.NameTree(obj.getRaw("JavaScript"), this.xref);
      for (const [key, value] of nameTree.getAll()) {
        appendIfJavaScriptDict((0, _util.stringToPDFString)(key), value);
      }
    }
    const openAction = this._catDict.get("OpenAction");
    if (openAction) {
      appendIfJavaScriptDict("OpenAction", openAction);
    }
    return javaScript;
  }
  get jsActions() {
    const javaScript = this._collectJavaScript();
    let actions = (0, _core_utils.collectActions)(this.xref, this._catDict, _util.DocumentActionEventType);
    if (javaScript) {
      actions ||= Object.create(null);
      for (const [key, val] of javaScript) {
        if (key in actions) {
          actions[key].push(val);
        } else {
          actions[key] = [val];
        }
      }
    }
    return (0, _util.shadow)(this, "jsActions", actions);
  }
  async fontFallback(id, handler) {
    const translatedFonts = await Promise.all(this.fontCache);
    for (const translatedFont of translatedFonts) {
      if (translatedFont.loadedName === id) {
        translatedFont.fallback(handler);
        return;
      }
    }
  }
  async cleanup(manuallyTriggered = false) {
    (0, _cleanup_helper.clearGlobalCaches)();
    this.globalImageCache.clear(manuallyTriggered);
    this.pageKidsCountCache.clear();
    this.pageIndexCache.clear();
    this.nonBlendModesSet.clear();
    const translatedFonts = await Promise.all(this.fontCache);
    for (const {
      dict
    } of translatedFonts) {
      delete dict.cacheKey;
    }
    this.fontCache.clear();
    this.builtInCMapCache.clear();
    this.standardFontDataCache.clear();
    this.systemFontCache.clear();
  }
  async getPageDict(pageIndex) {
    const nodesToVisit = [this.toplevelPagesDict];
    const visitedNodes = new _primitives.RefSet();
    const pagesRef = this._catDict.getRaw("Pages");
    if (pagesRef instanceof _primitives.Ref) {
      visitedNodes.put(pagesRef);
    }
    const xref = this.xref,
      pageKidsCountCache = this.pageKidsCountCache,
      pageIndexCache = this.pageIndexCache;
    let currentPageIndex = 0;
    while (nodesToVisit.length) {
      const currentNode = nodesToVisit.pop();
      if (currentNode instanceof _primitives.Ref) {
        const count = pageKidsCountCache.get(currentNode);
        if (count >= 0 && currentPageIndex + count <= pageIndex) {
          currentPageIndex += count;
          continue;
        }
        if (visitedNodes.has(currentNode)) {
          throw new _util.FormatError("Pages tree contains circular reference.");
        }
        visitedNodes.put(currentNode);
        const obj = await xref.fetchAsync(currentNode);
        if (obj instanceof _primitives.Dict) {
          let type = obj.getRaw("Type");
          if (type instanceof _primitives.Ref) {
            type = await xref.fetchAsync(type);
          }
          if ((0, _primitives.isName)(type, "Page") || !obj.has("Kids")) {
            if (!pageKidsCountCache.has(currentNode)) {
              pageKidsCountCache.put(currentNode, 1);
            }
            if (!pageIndexCache.has(currentNode)) {
              pageIndexCache.put(currentNode, currentPageIndex);
            }
            if (currentPageIndex === pageIndex) {
              return [obj, currentNode];
            }
            currentPageIndex++;
            continue;
          }
        }
        nodesToVisit.push(obj);
        continue;
      }
      if (!(currentNode instanceof _primitives.Dict)) {
        throw new _util.FormatError("Page dictionary kid reference points to wrong type of object.");
      }
      const {
        objId
      } = currentNode;
      let count = currentNode.getRaw("Count");
      if (count instanceof _primitives.Ref) {
        count = await xref.fetchAsync(count);
      }
      if (Number.isInteger(count) && count >= 0) {
        if (objId && !pageKidsCountCache.has(objId)) {
          pageKidsCountCache.put(objId, count);
        }
        if (currentPageIndex + count <= pageIndex) {
          currentPageIndex += count;
          continue;
        }
      }
      let kids = currentNode.getRaw("Kids");
      if (kids instanceof _primitives.Ref) {
        kids = await xref.fetchAsync(kids);
      }
      if (!Array.isArray(kids)) {
        let type = currentNode.getRaw("Type");
        if (type instanceof _primitives.Ref) {
          type = await xref.fetchAsync(type);
        }
        if ((0, _primitives.isName)(type, "Page") || !currentNode.has("Kids")) {
          if (currentPageIndex === pageIndex) {
            return [currentNode, null];
          }
          currentPageIndex++;
          continue;
        }
        throw new _util.FormatError("Page dictionary kids object is not an array.");
      }
      for (let last = kids.length - 1; last >= 0; last--) {
        nodesToVisit.push(kids[last]);
      }
    }
    throw new Error(`Page index ${pageIndex} not found.`);
  }
  async getAllPageDicts(recoveryMode = false) {
    const {
      ignoreErrors
    } = this.pdfManager.evaluatorOptions;
    const queue = [{
      currentNode: this.toplevelPagesDict,
      posInKids: 0
    }];
    const visitedNodes = new _primitives.RefSet();
    const pagesRef = this._catDict.getRaw("Pages");
    if (pagesRef instanceof _primitives.Ref) {
      visitedNodes.put(pagesRef);
    }
    const map = new Map(),
      xref = this.xref,
      pageIndexCache = this.pageIndexCache;
    let pageIndex = 0;
    function addPageDict(pageDict, pageRef) {
      if (pageRef && !pageIndexCache.has(pageRef)) {
        pageIndexCache.put(pageRef, pageIndex);
      }
      map.set(pageIndex++, [pageDict, pageRef]);
    }
    function addPageError(error) {
      if (error instanceof _core_utils.XRefEntryException && !recoveryMode) {
        throw error;
      }
      if (recoveryMode && ignoreErrors && pageIndex === 0) {
        (0, _util.warn)(`getAllPageDicts - Skipping invalid first page: "${error}".`);
        error = _primitives.Dict.empty;
      }
      map.set(pageIndex++, [error, null]);
    }
    while (queue.length > 0) {
      const queueItem = queue.at(-1);
      const {
        currentNode,
        posInKids
      } = queueItem;
      let kids = currentNode.getRaw("Kids");
      if (kids instanceof _primitives.Ref) {
        try {
          kids = await xref.fetchAsync(kids);
        } catch (ex) {
          addPageError(ex);
          break;
        }
      }
      if (!Array.isArray(kids)) {
        addPageError(new _util.FormatError("Page dictionary kids object is not an array."));
        break;
      }
      if (posInKids >= kids.length) {
        queue.pop();
        continue;
      }
      const kidObj = kids[posInKids];
      let obj;
      if (kidObj instanceof _primitives.Ref) {
        if (visitedNodes.has(kidObj)) {
          addPageError(new _util.FormatError("Pages tree contains circular reference."));
          break;
        }
        visitedNodes.put(kidObj);
        try {
          obj = await xref.fetchAsync(kidObj);
        } catch (ex) {
          addPageError(ex);
          break;
        }
      } else {
        obj = kidObj;
      }
      if (!(obj instanceof _primitives.Dict)) {
        addPageError(new _util.FormatError("Page dictionary kid reference points to wrong type of object."));
        break;
      }
      let type = obj.getRaw("Type");
      if (type instanceof _primitives.Ref) {
        try {
          type = await xref.fetchAsync(type);
        } catch (ex) {
          addPageError(ex);
          break;
        }
      }
      if ((0, _primitives.isName)(type, "Page") || !obj.has("Kids")) {
        addPageDict(obj, kidObj instanceof _primitives.Ref ? kidObj : null);
      } else {
        queue.push({
          currentNode: obj,
          posInKids: 0
        });
      }
      queueItem.posInKids++;
    }
    return map;
  }
  getPageIndex(pageRef) {
    const cachedPageIndex = this.pageIndexCache.get(pageRef);
    if (cachedPageIndex !== undefined) {
      return Promise.resolve(cachedPageIndex);
    }
    const xref = this.xref;
    function pagesBeforeRef(kidRef) {
      let total = 0,
        parentRef;
      return xref.fetchAsync(kidRef).then(function (node) {
        if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, "Page") && !(node instanceof _primitives.Dict && !node.has("Type") && node.has("Contents"))) {
          throw new _util.FormatError("The reference does not point to a /Page dictionary.");
        }
        if (!node) {
          return null;
        }
        if (!(node instanceof _primitives.Dict)) {
          throw new _util.FormatError("Node must be a dictionary.");
        }
        parentRef = node.getRaw("Parent");
        return node.getAsync("Parent");
      }).then(function (parent) {
        if (!parent) {
          return null;
        }
        if (!(parent instanceof _primitives.Dict)) {
          throw new _util.FormatError("Parent must be a dictionary.");
        }
        return parent.getAsync("Kids");
      }).then(function (kids) {
        if (!kids) {
          return null;
        }
        const kidPromises = [];
        let found = false;
        for (const kid of kids) {
          if (!(kid instanceof _primitives.Ref)) {
            throw new _util.FormatError("Kid must be a reference.");
          }
          if ((0, _primitives.isRefsEqual)(kid, kidRef)) {
            found = true;
            break;
          }
          kidPromises.push(xref.fetchAsync(kid).then(function (obj) {
            if (!(obj instanceof _primitives.Dict)) {
              throw new _util.FormatError("Kid node must be a dictionary.");
            }
            if (obj.has("Count")) {
              total += obj.get("Count");
            } else {
              total++;
            }
          }));
        }
        if (!found) {
          throw new _util.FormatError("Kid reference not found in parent's kids.");
        }
        return Promise.all(kidPromises).then(function () {
          return [total, parentRef];
        });
      });
    }
    let total = 0;
    const next = ref => pagesBeforeRef(ref).then(args => {
      if (!args) {
        this.pageIndexCache.put(pageRef, total);
        return total;
      }
      const [count, parentRef] = args;
      total += count;
      return next(parentRef);
    });
    return next(pageRef);
  }
  get baseUrl() {
    const uri = this._catDict.get("URI");
    if (uri instanceof _primitives.Dict) {
      const base = uri.get("Base");
      if (typeof base === "string") {
        const absoluteUrl = (0, _util.createValidAbsoluteUrl)(base, null, {
          tryConvertEncoding: true
        });
        if (absoluteUrl) {
          return (0, _util.shadow)(this, "baseUrl", absoluteUrl.href);
        }
      }
    }
    return (0, _util.shadow)(this, "baseUrl", this.pdfManager.docBaseUrl);
  }
  static parseDestDictionary({
    destDict,
    resultObj,
    docBaseUrl = null,
    docAttachments = null
  }) {
    if (!(destDict instanceof _primitives.Dict)) {
      (0, _util.warn)("parseDestDictionary: `destDict` must be a dictionary.");
      return;
    }
    let action = destDict.get("A"),
      url,
      dest;
    if (!(action instanceof _primitives.Dict)) {
      if (destDict.has("Dest")) {
        action = destDict.get("Dest");
      } else {
        action = destDict.get("AA");
        if (action instanceof _primitives.Dict) {
          if (action.has("D")) {
            action = action.get("D");
          } else if (action.has("U")) {
            action = action.get("U");
          }
        }
      }
    }
    if (action instanceof _primitives.Dict) {
      const actionType = action.get("S");
      if (!(actionType instanceof _primitives.Name)) {
        (0, _util.warn)("parseDestDictionary: Invalid type in Action dictionary.");
        return;
      }
      const actionName = actionType.name;
      switch (actionName) {
        case "ResetForm":
          const flags = action.get("Flags");
          const include = ((typeof flags === "number" ? flags : 0) & 1) === 0;
          const fields = [];
          const refs = [];
          for (const obj of action.get("Fields") || []) {
            if (obj instanceof _primitives.Ref) {
              refs.push(obj.toString());
            } else if (typeof obj === "string") {
              fields.push((0, _util.stringToPDFString)(obj));
            }
          }
          resultObj.resetForm = {
            fields,
            refs,
            include
          };
          break;
        case "URI":
          url = action.get("URI");
          if (url instanceof _primitives.Name) {
            url = "/" + url.name;
          }
          break;
        case "GoTo":
          dest = action.get("D");
          break;
        case "Launch":
        case "GoToR":
          const urlDict = action.get("F");
          if (urlDict instanceof _primitives.Dict) {
            url = urlDict.get("F") || null;
          } else if (typeof urlDict === "string") {
            url = urlDict;
          }
          let remoteDest = action.get("D");
          if (remoteDest) {
            if (remoteDest instanceof _primitives.Name) {
              remoteDest = remoteDest.name;
            }
            if (typeof url === "string") {
              const baseUrl = url.split("#")[0];
              if (typeof remoteDest === "string") {
                url = baseUrl + "#" + remoteDest;
              } else if (Array.isArray(remoteDest)) {
                url = baseUrl + "#" + JSON.stringify(remoteDest);
              }
            }
          }
          const newWindow = action.get("NewWindow");
          if (typeof newWindow === "boolean") {
            resultObj.newWindow = newWindow;
          }
          break;
        case "GoToE":
          const target = action.get("T");
          let attachment;
          if (docAttachments && target instanceof _primitives.Dict) {
            const relationship = target.get("R");
            const name = target.get("N");
            if ((0, _primitives.isName)(relationship, "C") && typeof name === "string") {
              attachment = docAttachments[(0, _util.stringToPDFString)(name)];
            }
          }
          if (attachment) {
            resultObj.attachment = attachment;
          } else {
            (0, _util.warn)(`parseDestDictionary - unimplemented "GoToE" action.`);
          }
          break;
        case "Named":
          const namedAction = action.get("N");
          if (namedAction instanceof _primitives.Name) {
            resultObj.action = namedAction.name;
          }
          break;
        case "SetOCGState":
          const state = action.get("State");
          const preserveRB = action.get("PreserveRB");
          if (!Array.isArray(state) || state.length === 0) {
            break;
          }
          const stateArr = [];
          for (const elem of state) {
            if (elem instanceof _primitives.Name) {
              switch (elem.name) {
                case "ON":
                case "OFF":
                case "Toggle":
                  stateArr.push(elem.name);
                  break;
              }
            } else if (elem instanceof _primitives.Ref) {
              stateArr.push(elem.toString());
            }
          }
          if (stateArr.length !== state.length) {
            break;
          }
          resultObj.setOCGState = {
            state: stateArr,
            preserveRB: typeof preserveRB === "boolean" ? preserveRB : true
          };
          break;
        case "JavaScript":
          const jsAction = action.get("JS");
          let js;
          if (jsAction instanceof _base_stream.BaseStream) {
            js = jsAction.getString();
          } else if (typeof jsAction === "string") {
            js = jsAction;
          }
          const jsURL = js && (0, _core_utils.recoverJsURL)((0, _util.stringToPDFString)(js));
          if (jsURL) {
            url = jsURL.url;
            resultObj.newWindow = jsURL.newWindow;
            break;
          }
        default:
          if (actionName === "JavaScript" || actionName === "SubmitForm") {
            break;
          }
          (0, _util.warn)(`parseDestDictionary - unsupported action: "${actionName}".`);
          break;
      }
    } else if (destDict.has("Dest")) {
      dest = destDict.get("Dest");
    }
    if (typeof url === "string") {
      const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl, {
        addDefaultProtocol: true,
        tryConvertEncoding: true
      });
      if (absoluteUrl) {
        resultObj.url = absoluteUrl.href;
      }
      resultObj.unsafeUrl = url;
    }
    if (dest) {
      if (dest instanceof _primitives.Name) {
        dest = dest.name;
      }
      if (typeof dest === "string") {
        resultObj.dest = (0, _util.stringToPDFString)(dest);
      } else if (Array.isArray(dest)) {
        resultObj.dest = dest;
      }
    }
  }
}
exports.Catalog = Catalog;

/***/ }),
/* 67 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.NumberTree = exports.NameTree = void 0;
var _primitives = __w_pdfjs_require__(4);
var _util = __w_pdfjs_require__(2);
class NameOrNumberTree {
  constructor(root, xref, type) {
    if (this.constructor === NameOrNumberTree) {
      (0, _util.unreachable)("Cannot initialize NameOrNumberTree.");
    }
    this.root = root;
    this.xref = xref;
    this._type = type;
  }
  getAll() {
    const map = new Map();
    if (!this.root) {
      return map;
    }
    const xref = this.xref;
    const processed = new _primitives.RefSet();
    processed.put(this.root);
    const queue = [this.root];
    while (queue.length > 0) {
      const obj = xref.fetchIfRef(queue.shift());
      if (!(obj instanceof _primitives.Dict)) {
        continue;
      }
      if (obj.has("Kids")) {
        const kids = obj.get("Kids");
        if (!Array.isArray(kids)) {
          continue;
        }
        for (const kid of kids) {
          if (processed.has(kid)) {
            throw new _util.FormatError(`Duplicate entry in "${this._type}" tree.`);
          }
          queue.push(kid);
          processed.put(kid);
        }
        continue;
      }
      const entries = obj.get(this._type);
      if (!Array.isArray(entries)) {
        continue;
      }
      for (let i = 0, ii = entries.length; i < ii; i += 2) {
        map.set(xref.fetchIfRef(entries[i]), xref.fetchIfRef(entries[i + 1]));
      }
    }
    return map;
  }
  get(key) {
    if (!this.root) {
      return null;
    }
    const xref = this.xref;
    let kidsOrEntries = xref.fetchIfRef(this.root);
    let loopCount = 0;
    const MAX_LEVELS = 10;
    while (kidsOrEntries.has("Kids")) {
      if (++loopCount > MAX_LEVELS) {
        (0, _util.warn)(`Search depth limit reached for "${this._type}" tree.`);
        return null;
      }
      const kids = kidsOrEntries.get("Kids");
      if (!Array.isArray(kids)) {
        return null;
      }
      let l = 0,
        r = kids.length - 1;
      while (l <= r) {
        const m = l + r >> 1;
        const kid = xref.fetchIfRef(kids[m]);
        const limits = kid.get("Limits");
        if (key < xref.fetchIfRef(limits[0])) {
          r = m - 1;
        } else if (key > xref.fetchIfRef(limits[1])) {
          l = m + 1;
        } else {
          kidsOrEntries = kid;
          break;
        }
      }
      if (l > r) {
        return null;
      }
    }
    const entries = kidsOrEntries.get(this._type);
    if (Array.isArray(entries)) {
      let l = 0,
        r = entries.length - 2;
      while (l <= r) {
        const tmp = l + r >> 1,
          m = tmp + (tmp & 1);
        const currentKey = xref.fetchIfRef(entries[m]);
        if (key < currentKey) {
          r = m - 2;
        } else if (key > currentKey) {
          l = m + 2;
        } else {
          return xref.fetchIfRef(entries[m + 1]);
        }
      }
    }
    return null;
  }
}
class NameTree extends NameOrNumberTree {
  constructor(root, xref) {
    super(root, xref, "Names");
  }
}
exports.NameTree = NameTree;
class NumberTree extends NameOrNumberTree {
  constructor(root, xref) {
    super(root, xref, "Nums");
  }
}
exports.NumberTree = NumberTree;

/***/ }),
/* 68 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.clearGlobalCaches = clearGlobalCaches;
var _pattern = __w_pdfjs_require__(50);
var _primitives = __w_pdfjs_require__(4);
var _unicode = __w_pdfjs_require__(40);
function clearGlobalCaches() {
  (0, _pattern.clearPatternCaches)();
  (0, _primitives.clearPrimitiveCaches)();
  (0, _unicode.clearUnicodeCaches)();
}

/***/ }),
/* 69 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.FileSpec = void 0;
var _util = __w_pdfjs_require__(2);
var _base_stream = __w_pdfjs_require__(5);
var _primitives = __w_pdfjs_require__(4);
function pickPlatformItem(dict) {
  if (dict.has("UF")) {
    return dict.get("UF");
  } else if (dict.has("F")) {
    return dict.get("F");
  } else if (dict.has("Unix")) {
    return dict.get("Unix");
  } else if (dict.has("Mac")) {
    return dict.get("Mac");
  } else if (dict.has("DOS")) {
    return dict.get("DOS");
  }
  return null;
}
class FileSpec {
  constructor(root, xref) {
    if (!(root instanceof _primitives.Dict)) {
      return;
    }
    this.xref = xref;
    this.root = root;
    if (root.has("FS")) {
      this.fs = root.get("FS");
    }
    this.description = root.has("Desc") ? (0, _util.stringToPDFString)(root.get("Desc")) : "";
    if (root.has("RF")) {
      (0, _util.warn)("Related file specifications are not supported");
    }
    this.contentAvailable = true;
    if (!root.has("EF")) {
      this.contentAvailable = false;
      (0, _util.warn)("Non-embedded file specifications are not supported");
    }
  }
  get filename() {
    if (!this._filename && this.root) {
      const filename = pickPlatformItem(this.root) || "unnamed";
      this._filename = (0, _util.stringToPDFString)(filename).replaceAll("\\\\", "\\").replaceAll("\\/", "/").replaceAll("\\", "/");
    }
    return this._filename;
  }
  get content() {
    if (!this.contentAvailable) {
      return null;
    }
    if (!this.contentRef && this.root) {
      this.contentRef = pickPlatformItem(this.root.get("EF"));
    }
    let content = null;
    if (this.contentRef) {
      const fileObj = this.xref.fetchIfRef(this.contentRef);
      if (fileObj instanceof _base_stream.BaseStream) {
        content = fileObj.getBytes();
      } else {
        (0, _util.warn)("Embedded file specification points to non-existing/invalid content");
      }
    } else {
      (0, _util.warn)("Embedded file specification does not have a content");
    }
    return content;
  }
  get serializable() {
    return {
      filename: this.filename,
      content: this.content
    };
  }
}
exports.FileSpec = FileSpec;

/***/ }),
/* 70 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.MetadataParser = void 0;
var _xml_parser = __w_pdfjs_require__(71);
class MetadataParser {
  constructor(data) {
    data = this._repair(data);
    const parser = new _xml_parser.SimpleXMLParser({
      lowerCaseName: true
    });
    const xmlDocument = parser.parseFromString(data);
    this._metadataMap = new Map();
    this._data = data;
    if (xmlDocument) {
      this._parse(xmlDocument);
    }
  }
  _repair(data) {
    return data.replace(/^[^<]+/, "").replaceAll(/>\\376\\377([^<]+)/g, function (all, codes) {
      const bytes = codes.replaceAll(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) {
        return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1);
      }).replaceAll(/&(amp|apos|gt|lt|quot);/g, function (str, name) {
        switch (name) {
          case "amp":
            return "&";
          case "apos":
            return "'";
          case "gt":
            return ">";
          case "lt":
            return "<";
          case "quot":
            return '"';
        }
        throw new Error(`_repair: ${name} isn't defined.`);
      });
      const charBuf = [">"];
      for (let i = 0, ii = bytes.length; i < ii; i += 2) {
        const code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1);
        if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) {
          charBuf.push(String.fromCharCode(code));
        } else {
          charBuf.push("&#x" + (0x10000 + code).toString(16).substring(1) + ";");
        }
      }
      return charBuf.join("");
    });
  }
  _getSequence(entry) {
    const name = entry.nodeName;
    if (name !== "rdf:bag" && name !== "rdf:seq" && name !== "rdf:alt") {
      return null;
    }
    return entry.childNodes.filter(node => node.nodeName === "rdf:li");
  }
  _parseArray(entry) {
    if (!entry.hasChildNodes()) {
      return;
    }
    const [seqNode] = entry.childNodes;
    const sequence = this._getSequence(seqNode) || [];
    this._metadataMap.set(entry.nodeName, sequence.map(node => node.textContent.trim()));
  }
  _parse(xmlDocument) {
    let rdf = xmlDocument.documentElement;
    if (rdf.nodeName !== "rdf:rdf") {
      rdf = rdf.firstChild;
      while (rdf && rdf.nodeName !== "rdf:rdf") {
        rdf = rdf.nextSibling;
      }
    }
    if (!rdf || rdf.nodeName !== "rdf:rdf" || !rdf.hasChildNodes()) {
      return;
    }
    for (const desc of rdf.childNodes) {
      if (desc.nodeName !== "rdf:description") {
        continue;
      }
      for (const entry of desc.childNodes) {
        const name = entry.nodeName;
        switch (name) {
          case "#text":
            continue;
          case "dc:creator":
          case "dc:subject":
            this._parseArray(entry);
            continue;
        }
        this._metadataMap.set(name, entry.textContent.trim());
      }
    }
  }
  get serializable() {
    return {
      parsedData: this._metadataMap,
      rawData: this._data
    };
  }
}
exports.MetadataParser = MetadataParser;

/***/ }),
/* 71 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.XMLParserErrorCode = exports.XMLParserBase = exports.SimpleXMLParser = exports.SimpleDOMNode = void 0;
var _core_utils = __w_pdfjs_require__(3);
const XMLParserErrorCode = {
  NoError: 0,
  EndOfDocument: -1,
  UnterminatedCdat: -2,
  UnterminatedXmlDeclaration: -3,
  UnterminatedDoctypeDeclaration: -4,
  UnterminatedComment: -5,
  MalformedElement: -6,
  OutOfMemory: -7,
  UnterminatedAttributeValue: -8,
  UnterminatedElement: -9,
  ElementNeverBegun: -10
};
exports.XMLParserErrorCode = XMLParserErrorCode;
function isWhitespace(s, index) {
  const ch = s[index];
  return ch === " " || ch === "\n" || ch === "\r" || ch === "\t";
}
function isWhitespaceString(s) {
  for (let i = 0, ii = s.length; i < ii; i++) {
    if (!isWhitespace(s, i)) {
      return false;
    }
  }
  return true;
}
class XMLParserBase {
  _resolveEntities(s) {
    return s.replaceAll(/&([^;]+);/g, (all, entity) => {
      if (entity.substring(0, 2) === "#x") {
        return String.fromCodePoint(parseInt(entity.substring(2), 16));
      } else if (entity.substring(0, 1) === "#") {
        return String.fromCodePoint(parseInt(entity.substring(1), 10));
      }
      switch (entity) {
        case "lt":
          return "<";
        case "gt":
          return ">";
        case "amp":
          return "&";
        case "quot":
          return '"';
        case "apos":
          return "'";
      }
      return this.onResolveEntity(entity);
    });
  }
  _parseContent(s, start) {
    const attributes = [];
    let pos = start;
    function skipWs() {
      while (pos < s.length && isWhitespace(s, pos)) {
        ++pos;
      }
    }
    while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") {
      ++pos;
    }
    const name = s.substring(start, pos);
    skipWs();
    while (pos < s.length && s[pos] !== ">" && s[pos] !== "/" && s[pos] !== "?") {
      skipWs();
      let attrName = "",
        attrValue = "";
      while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== "=") {
        attrName += s[pos];
        ++pos;
      }
      skipWs();
      if (s[pos] !== "=") {
        return null;
      }
      ++pos;
      skipWs();
      const attrEndChar = s[pos];
      if (attrEndChar !== '"' && attrEndChar !== "'") {
        return null;
      }
      const attrEndIndex = s.indexOf(attrEndChar, ++pos);
      if (attrEndIndex < 0) {
        return null;
      }
      attrValue = s.substring(pos, attrEndIndex);
      attributes.push({
        name: attrName,
        value: this._resolveEntities(attrValue)
      });
      pos = attrEndIndex + 1;
      skipWs();
    }
    return {
      name,
      attributes,
      parsed: pos - start
    };
  }
  _parseProcessingInstruction(s, start) {
    let pos = start;
    function skipWs() {
      while (pos < s.length && isWhitespace(s, pos)) {
        ++pos;
      }
    }
    while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "?" && s[pos] !== "/") {
      ++pos;
    }
    const name = s.substring(start, pos);
    skipWs();
    const attrStart = pos;
    while (pos < s.length && (s[pos] !== "?" || s[pos + 1] !== ">")) {
      ++pos;
    }
    const value = s.substring(attrStart, pos);
    return {
      name,
      value,
      parsed: pos - start
    };
  }
  parseXml(s) {
    let i = 0;
    while (i < s.length) {
      const ch = s[i];
      let j = i;
      if (ch === "<") {
        ++j;
        const ch2 = s[j];
        let q;
        switch (ch2) {
          case "/":
            ++j;
            q = s.indexOf(">", j);
            if (q < 0) {
              this.onError(XMLParserErrorCode.UnterminatedElement);
              return;
            }
            this.onEndElement(s.substring(j, q));
            j = q + 1;
            break;
          case "?":
            ++j;
            const pi = this._parseProcessingInstruction(s, j);
            if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== "?>") {
              this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration);
              return;
            }
            this.onPi(pi.name, pi.value);
            j += pi.parsed + 2;
            break;
          case "!":
            if (s.substring(j + 1, j + 3) === "--") {
              q = s.indexOf("-->", j + 3);
              if (q < 0) {
                this.onError(XMLParserErrorCode.UnterminatedComment);
                return;
              }
              this.onComment(s.substring(j + 3, q));
              j = q + 3;
            } else if (s.substring(j + 1, j + 8) === "[CDATA[") {
              q = s.indexOf("]]>", j + 8);
              if (q < 0) {
                this.onError(XMLParserErrorCode.UnterminatedCdat);
                return;
              }
              this.onCdata(s.substring(j + 8, q));
              j = q + 3;
            } else if (s.substring(j + 1, j + 8) === "DOCTYPE") {
              const q2 = s.indexOf("[", j + 8);
              let complexDoctype = false;
              q = s.indexOf(">", j + 8);
              if (q < 0) {
                this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);
                return;
              }
              if (q2 > 0 && q > q2) {
                q = s.indexOf("]>", j + 8);
                if (q < 0) {
                  this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);
                  return;
                }
                complexDoctype = true;
              }
              const doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0));
              this.onDoctype(doctypeContent);
              j = q + (complexDoctype ? 2 : 1);
            } else {
              this.onError(XMLParserErrorCode.MalformedElement);
              return;
            }
            break;
          default:
            const content = this._parseContent(s, j);
            if (content === null) {
              this.onError(XMLParserErrorCode.MalformedElement);
              return;
            }
            let isClosed = false;
            if (s.substring(j + content.parsed, j + content.parsed + 2) === "/>") {
              isClosed = true;
            } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== ">") {
              this.onError(XMLParserErrorCode.UnterminatedElement);
              return;
            }
            this.onBeginElement(content.name, content.attributes, isClosed);
            j += content.parsed + (isClosed ? 2 : 1);
            break;
        }
      } else {
        while (j < s.length && s[j] !== "<") {
          j++;
        }
        const text = s.substring(i, j);
        this.onText(this._resolveEntities(text));
      }
      i = j;
    }
  }
  onResolveEntity(name) {
    return `&${name};`;
  }
  onPi(name, value) {}
  onComment(text) {}
  onCdata(text) {}
  onDoctype(doctypeContent) {}
  onText(text) {}
  onBeginElement(name, attributes, isEmpty) {}
  onEndElement(name) {}
  onError(code) {}
}
exports.XMLParserBase = XMLParserBase;
class SimpleDOMNode {
  constructor(nodeName, nodeValue) {
    this.nodeName = nodeName;
    this.nodeValue = nodeValue;
    Object.defineProperty(this, "parentNode", {
      value: null,
      writable: true
    });
  }
  get firstChild() {
    return this.childNodes?.[0];
  }
  get nextSibling() {
    const childNodes = this.parentNode.childNodes;
    if (!childNodes) {
      return undefined;
    }
    const index = childNodes.indexOf(this);
    if (index === -1) {
      return undefined;
    }
    return childNodes[index + 1];
  }
  get textContent() {
    if (!this.childNodes) {
      return this.nodeValue || "";
    }
    return this.childNodes.map(function (child) {
      return child.textContent;
    }).join("");
  }
  get children() {
    return this.childNodes || [];
  }
  hasChildNodes() {
    return this.childNodes?.length > 0;
  }
  searchNode(paths, pos) {
    if (pos >= paths.length) {
      return this;
    }
    const component = paths[pos];
    if (component.name.startsWith("#") && pos < paths.length - 1) {
      return this.searchNode(paths, pos + 1);
    }
    const stack = [];
    let node = this;
    while (true) {
      if (component.name === node.nodeName) {
        if (component.pos === 0) {
          const res = node.searchNode(paths, pos + 1);
          if (res !== null) {
            return res;
          }
        } else if (stack.length === 0) {
          return null;
        } else {
          const [parent] = stack.pop();
          let siblingPos = 0;
          for (const child of parent.childNodes) {
            if (component.name === child.nodeName) {
              if (siblingPos === component.pos) {
                return child.searchNode(paths, pos + 1);
              }
              siblingPos++;
            }
          }
          return node.searchNode(paths, pos + 1);
        }
      }
      if (node.childNodes?.length > 0) {
        stack.push([node, 0]);
        node = node.childNodes[0];
      } else if (stack.length === 0) {
        return null;
      } else {
        while (stack.length !== 0) {
          const [parent, currentPos] = stack.pop();
          const newPos = currentPos + 1;
          if (newPos < parent.childNodes.length) {
            stack.push([parent, newPos]);
            node = parent.childNodes[newPos];
            break;
          }
        }
        if (stack.length === 0) {
          return null;
        }
      }
    }
  }
  dump(buffer) {
    if (this.nodeName === "#text") {
      buffer.push((0, _core_utils.encodeToXmlString)(this.nodeValue));
      return;
    }
    buffer.push(`<${this.nodeName}`);
    if (this.attributes) {
      for (const attribute of this.attributes) {
        buffer.push(` ${attribute.name}="${(0, _core_utils.encodeToXmlString)(attribute.value)}"`);
      }
    }
    if (this.hasChildNodes()) {
      buffer.push(">");
      for (const child of this.childNodes) {
        child.dump(buffer);
      }
      buffer.push(`</${this.nodeName}>`);
    } else if (this.nodeValue) {
      buffer.push(`>${(0, _core_utils.encodeToXmlString)(this.nodeValue)}</${this.nodeName}>`);
    } else {
      buffer.push("/>");
    }
  }
}
exports.SimpleDOMNode = SimpleDOMNode;
class SimpleXMLParser extends XMLParserBase {
  constructor({
    hasAttributes = false,
    lowerCaseName = false
  }) {
    super();
    this._currentFragment = null;
    this._stack = null;
    this._errorCode = XMLParserErrorCode.NoError;
    this._hasAttributes = hasAttributes;
    this._lowerCaseName = lowerCaseName;
  }
  parseFromString(data) {
    this._currentFragment = [];
    this._stack = [];
    this._errorCode = XMLParserErrorCode.NoError;
    this.parseXml(data);
    if (this._errorCode !== XMLParserErrorCode.NoError) {
      return undefined;
    }
    const [documentElement] = this._currentFragment;
    if (!documentElement) {
      return undefined;
    }
    return {
      documentElement
    };
  }
  onText(text) {
    if (isWhitespaceString(text)) {
      return;
    }
    const node = new SimpleDOMNode("#text", text);
    this._currentFragment.push(node);
  }
  onCdata(text) {
    const node = new SimpleDOMNode("#text", text);
    this._currentFragment.push(node);
  }
  onBeginElement(name, attributes, isEmpty) {
    if (this._lowerCaseName) {
      name = name.toLowerCase();
    }
    const node = new SimpleDOMNode(name);
    node.childNodes = [];
    if (this._hasAttributes) {
      node.attributes = attributes;
    }
    this._currentFragment.push(node);
    if (isEmpty) {
      return;
    }
    this._stack.push(this._currentFragment);
    this._currentFragment = node.childNodes;
  }
  onEndElement(name) {
    this._currentFragment = this._stack.pop() || [];
    const lastElement = this._currentFragment.at(-1);
    if (!lastElement) {
      return null;
    }
    for (const childNode of lastElement.childNodes) {
      childNode.parentNode = lastElement;
    }
    return lastElement;
  }
  onError(code) {
    this._errorCode = code;
  }
}
exports.SimpleXMLParser = SimpleXMLParser;

/***/ }),
/* 72 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.StructTreeRoot = exports.StructTreePage = void 0;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(4);
var _name_number_tree = __w_pdfjs_require__(67);
var _writer = __w_pdfjs_require__(73);
const MAX_DEPTH = 40;
const StructElementType = {
  PAGE_CONTENT: 1,
  STREAM_CONTENT: 2,
  OBJECT: 3,
  ANNOTATION: 4,
  ELEMENT: 5
};
class StructTreeRoot {
  constructor(rootDict, rootRef) {
    this.dict = rootDict;
    this.ref = rootRef instanceof _primitives.Ref ? rootRef : null;
    this.roleMap = new Map();
    this.structParentIds = null;
  }
  init() {
    this.readRoleMap();
  }
  #addIdToPage(pageRef, id, type) {
    if (!(pageRef instanceof _primitives.Ref) || id < 0) {
      return;
    }
    this.structParentIds ||= new _primitives.RefSetCache();
    let ids = this.structParentIds.get(pageRef);
    if (!ids) {
      ids = [];
      this.structParentIds.put(pageRef, ids);
    }
    ids.push([id, type]);
  }
  addAnnotationIdToPage(pageRef, id) {
    this.#addIdToPage(pageRef, id, StructElementType.ANNOTATION);
  }
  readRoleMap() {
    const roleMapDict = this.dict.get("RoleMap");
    if (!(roleMapDict instanceof _primitives.Dict)) {
      return;
    }
    roleMapDict.forEach((key, value) => {
      if (!(value instanceof _primitives.Name)) {
        return;
      }
      this.roleMap.set(key, value.name);
    });
  }
  static async canCreateStructureTree({
    catalogRef,
    pdfManager,
    newAnnotationsByPage
  }) {
    if (!(catalogRef instanceof _primitives.Ref)) {
      (0, _util.warn)("Cannot save the struct tree: no catalog reference.");
      return false;
    }
    let nextKey = 0;
    let hasNothingToUpdate = true;
    for (const [pageIndex, elements] of newAnnotationsByPage) {
      const {
        ref: pageRef
      } = await pdfManager.getPage(pageIndex);
      if (!(pageRef instanceof _primitives.Ref)) {
        (0, _util.warn)(`Cannot save the struct tree: page ${pageIndex} has no ref.`);
        hasNothingToUpdate = true;
        break;
      }
      for (const element of elements) {
        if (element.accessibilityData?.type) {
          element.parentTreeId = nextKey++;
          hasNothingToUpdate = false;
        }
      }
    }
    if (hasNothingToUpdate) {
      for (const elements of newAnnotationsByPage.values()) {
        for (const element of elements) {
          delete element.parentTreeId;
        }
      }
      return false;
    }
    return true;
  }
  static async createStructureTree({
    newAnnotationsByPage,
    xref,
    catalogRef,
    pdfManager,
    newRefs
  }) {
    const root = pdfManager.catalog.cloneDict();
    const structTreeRootRef = xref.getNewTemporaryRef();
    root.set("StructTreeRoot", structTreeRootRef);
    const buffer = [];
    await (0, _writer.writeObject)(catalogRef, root, buffer, xref);
    newRefs.push({
      ref: catalogRef,
      data: buffer.join("")
    });
    const structTreeRoot = new _primitives.Dict(xref);
    structTreeRoot.set("Type", _primitives.Name.get("StructTreeRoot"));
    const parentTreeRef = xref.getNewTemporaryRef();
    structTreeRoot.set("ParentTree", parentTreeRef);
    const kids = [];
    structTreeRoot.set("K", kids);
    const parentTree = new _primitives.Dict(xref);
    const nums = [];
    parentTree.set("Nums", nums);
    const nextKey = await this.#writeKids({
      newAnnotationsByPage,
      structTreeRootRef,
      kids,
      nums,
      xref,
      pdfManager,
      newRefs,
      buffer
    });
    structTreeRoot.set("ParentTreeNextKey", nextKey);
    buffer.length = 0;
    await (0, _writer.writeObject)(parentTreeRef, parentTree, buffer, xref);
    newRefs.push({
      ref: parentTreeRef,
      data: buffer.join("")
    });
    buffer.length = 0;
    await (0, _writer.writeObject)(structTreeRootRef, structTreeRoot, buffer, xref);
    newRefs.push({
      ref: structTreeRootRef,
      data: buffer.join("")
    });
  }
  async canUpdateStructTree({
    pdfManager,
    newAnnotationsByPage
  }) {
    if (!this.ref) {
      (0, _util.warn)("Cannot update the struct tree: no root reference.");
      return false;
    }
    let nextKey = this.dict.get("ParentTreeNextKey");
    if (!Number.isInteger(nextKey) || nextKey < 0) {
      (0, _util.warn)("Cannot update the struct tree: invalid next key.");
      return false;
    }
    const parentTree = this.dict.get("ParentTree");
    if (!(parentTree instanceof _primitives.Dict)) {
      (0, _util.warn)("Cannot update the struct tree: ParentTree isn't a dict.");
      return false;
    }
    const nums = parentTree.get("Nums");
    if (!Array.isArray(nums)) {
      (0, _util.warn)("Cannot update the struct tree: nums isn't an array.");
      return false;
    }
    const {
      numPages
    } = pdfManager.catalog;
    for (const pageIndex of newAnnotationsByPage.keys()) {
      const {
        pageDict,
        ref: pageRef
      } = await pdfManager.getPage(pageIndex);
      if (!(pageRef instanceof _primitives.Ref)) {
        (0, _util.warn)(`Cannot save the struct tree: page ${pageIndex} has no ref.`);
        return false;
      }
      const id = pageDict.get("StructParents");
      if (!Number.isInteger(id) || id < 0 || id >= numPages) {
        (0, _util.warn)(`Cannot save the struct tree: page ${pageIndex} has no id.`);
        return false;
      }
    }
    let hasNothingToUpdate = true;
    for (const [pageIndex, elements] of newAnnotationsByPage) {
      const {
        pageDict
      } = await pdfManager.getPage(pageIndex);
      StructTreeRoot.#collectParents({
        elements,
        xref: this.dict.xref,
        pageDict,
        parentTree
      });
      for (const element of elements) {
        if (element.accessibilityData?.type) {
          element.parentTreeId = nextKey++;
          hasNothingToUpdate = false;
        }
      }
    }
    if (hasNothingToUpdate) {
      for (const elements of newAnnotationsByPage.values()) {
        for (const element of elements) {
          delete element.parentTreeId;
          delete element.structTreeParent;
        }
      }
      return false;
    }
    return true;
  }
  async updateStructureTree({
    newAnnotationsByPage,
    pdfManager,
    newRefs
  }) {
    const xref = this.dict.xref;
    const structTreeRoot = this.dict.clone();
    const structTreeRootRef = this.ref;
    let parentTreeRef = structTreeRoot.getRaw("ParentTree");
    let parentTree;
    if (parentTreeRef instanceof _primitives.Ref) {
      parentTree = xref.fetch(parentTreeRef);
    } else {
      parentTree = parentTreeRef;
      parentTreeRef = xref.getNewTemporaryRef();
      structTreeRoot.set("ParentTree", parentTreeRef);
    }
    parentTree = parentTree.clone();
    let nums = parentTree.getRaw("Nums");
    let numsRef = null;
    if (nums instanceof _primitives.Ref) {
      numsRef = nums;
      nums = xref.fetch(numsRef);
    }
    nums = nums.slice();
    if (!numsRef) {
      parentTree.set("Nums", nums);
    }
    let kids = structTreeRoot.getRaw("K");
    let kidsRef = null;
    if (kids instanceof _primitives.Ref) {
      kidsRef = kids;
      kids = xref.fetch(kidsRef);
    } else {
      kidsRef = xref.getNewTemporaryRef();
      structTreeRoot.set("K", kidsRef);
    }
    kids = Array.isArray(kids) ? kids.slice() : [kids];
    const buffer = [];
    const newNextkey = await StructTreeRoot.#writeKids({
      newAnnotationsByPage,
      structTreeRootRef,
      kids,
      nums,
      xref,
      pdfManager,
      newRefs,
      buffer
    });
    structTreeRoot.set("ParentTreeNextKey", newNextkey);
    buffer.length = 0;
    await (0, _writer.writeObject)(kidsRef, kids, buffer, xref);
    newRefs.push({
      ref: kidsRef,
      data: buffer.join("")
    });
    if (numsRef) {
      buffer.length = 0;
      await (0, _writer.writeObject)(numsRef, nums, buffer, xref);
      newRefs.push({
        ref: numsRef,
        data: buffer.join("")
      });
    }
    buffer.length = 0;
    await (0, _writer.writeObject)(parentTreeRef, parentTree, buffer, xref);
    newRefs.push({
      ref: parentTreeRef,
      data: buffer.join("")
    });
    buffer.length = 0;
    await (0, _writer.writeObject)(structTreeRootRef, structTreeRoot, buffer, xref);
    newRefs.push({
      ref: structTreeRootRef,
      data: buffer.join("")
    });
  }
  static async #writeKids({
    newAnnotationsByPage,
    structTreeRootRef,
    kids,
    nums,
    xref,
    pdfManager,
    newRefs,
    buffer
  }) {
    const objr = _primitives.Name.get("OBJR");
    let nextKey = -Infinity;
    for (const [pageIndex, elements] of newAnnotationsByPage) {
      const {
        ref: pageRef
      } = await pdfManager.getPage(pageIndex);
      for (const {
        accessibilityData: {
          type,
          title,
          lang,
          alt,
          expanded,
          actualText
        },
        ref,
        parentTreeId,
        structTreeParent
      } of elements) {
        nextKey = Math.max(nextKey, parentTreeId);
        const tagRef = xref.getNewTemporaryRef();
        const tagDict = new _primitives.Dict(xref);
        tagDict.set("S", _primitives.Name.get(type));
        if (title) {
          tagDict.set("T", title);
        }
        if (lang) {
          tagDict.set("Lang", lang);
        }
        if (alt) {
          tagDict.set("Alt", alt);
        }
        if (expanded) {
          tagDict.set("E", expanded);
        }
        if (actualText) {
          tagDict.set("ActualText", actualText);
        }
        if (structTreeParent) {
          await this.#updateParentTag({
            structTreeParent,
            tagDict,
            newTagRef: tagRef,
            fallbackRef: structTreeRootRef,
            xref,
            newRefs,
            buffer
          });
        } else {
          tagDict.set("P", structTreeRootRef);
        }
        const objDict = new _primitives.Dict(xref);
        tagDict.set("K", objDict);
        objDict.set("Type", objr);
        objDict.set("Pg", pageRef);
        objDict.set("Obj", ref);
        buffer.length = 0;
        await (0, _writer.writeObject)(tagRef, tagDict, buffer, xref);
        newRefs.push({
          ref: tagRef,
          data: buffer.join("")
        });
        nums.push(parentTreeId, tagRef);
        kids.push(tagRef);
      }
    }
    return nextKey + 1;
  }
  static #collectParents({
    elements,
    xref,
    pageDict,
    parentTree
  }) {
    const idToElement = new Map();
    for (const element of elements) {
      if (element.structTreeParentId) {
        const id = parseInt(element.structTreeParentId.split("_mc")[1], 10);
        idToElement.set(id, element);
      }
    }
    const id = pageDict.get("StructParents");
    const numberTree = new _name_number_tree.NumberTree(parentTree, xref);
    const parentArray = numberTree.get(id);
    if (!Array.isArray(parentArray)) {
      return;
    }
    const updateElement = (kid, pageKid, kidRef) => {
      const element = idToElement.get(kid);
      if (element) {
        const parentRef = pageKid.getRaw("P");
        const parentDict = xref.fetchIfRef(parentRef);
        if (parentRef instanceof _primitives.Ref && parentDict instanceof _primitives.Dict) {
          element.structTreeParent = {
            ref: kidRef,
            dict: pageKid
          };
        }
        return true;
      }
      return false;
    };
    for (const kidRef of parentArray) {
      if (!(kidRef instanceof _primitives.Ref)) {
        continue;
      }
      const pageKid = xref.fetch(kidRef);
      const k = pageKid.get("K");
      if (Number.isInteger(k)) {
        updateElement(k, pageKid, kidRef);
        continue;
      }
      if (!Array.isArray(k)) {
        continue;
      }
      for (let kid of k) {
        kid = xref.fetchIfRef(kid);
        if (Number.isInteger(kid) && updateElement(kid, pageKid, kidRef)) {
          break;
        }
      }
    }
  }
  static async #updateParentTag({
    structTreeParent: {
      ref,
      dict
    },
    tagDict,
    newTagRef,
    fallbackRef,
    xref,
    newRefs,
    buffer
  }) {
    const parentRef = dict.getRaw("P");
    let parentDict = xref.fetchIfRef(parentRef);
    tagDict.set("P", parentRef);
    let saveParentDict = false;
    let parentKids;
    let parentKidsRef = parentDict.getRaw("K");
    if (!(parentKidsRef instanceof _primitives.Ref)) {
      parentKids = parentKidsRef;
      parentKidsRef = xref.getNewTemporaryRef();
      parentDict = parentDict.clone();
      parentDict.set("K", parentKidsRef);
      saveParentDict = true;
    } else {
      parentKids = xref.fetch(parentKidsRef);
    }
    if (Array.isArray(parentKids)) {
      const index = parentKids.indexOf(ref);
      if (index >= 0) {
        parentKids = parentKids.slice();
        parentKids.splice(index + 1, 0, newTagRef);
      } else {
        (0, _util.warn)("Cannot update the struct tree: parent kid not found.");
        tagDict.set("P", fallbackRef);
        return;
      }
    } else if (parentKids instanceof _primitives.Dict) {
      parentKids = [parentKidsRef, newTagRef];
      parentKidsRef = xref.getNewTemporaryRef();
      parentDict.set("K", parentKidsRef);
      saveParentDict = true;
    }
    buffer.length = 0;
    await (0, _writer.writeObject)(parentKidsRef, parentKids, buffer, xref);
    newRefs.push({
      ref: parentKidsRef,
      data: buffer.join("")
    });
    if (!saveParentDict) {
      return;
    }
    buffer.length = 0;
    await (0, _writer.writeObject)(parentRef, parentDict, buffer, xref);
    newRefs.push({
      ref: parentRef,
      data: buffer.join("")
    });
  }
}
exports.StructTreeRoot = StructTreeRoot;
class StructElementNode {
  constructor(tree, dict) {
    this.tree = tree;
    this.dict = dict;
    this.kids = [];
    this.parseKids();
  }
  get role() {
    const nameObj = this.dict.get("S");
    const name = nameObj instanceof _primitives.Name ? nameObj.name : "";
    const {
      root
    } = this.tree;
    if (root.roleMap.has(name)) {
      return root.roleMap.get(name);
    }
    return name;
  }
  parseKids() {
    let pageObjId = null;
    const objRef = this.dict.getRaw("Pg");
    if (objRef instanceof _primitives.Ref) {
      pageObjId = objRef.toString();
    }
    const kids = this.dict.get("K");
    if (Array.isArray(kids)) {
      for (const kid of kids) {
        const element = this.parseKid(pageObjId, kid);
        if (element) {
          this.kids.push(element);
        }
      }
    } else {
      const element = this.parseKid(pageObjId, kids);
      if (element) {
        this.kids.push(element);
      }
    }
  }
  parseKid(pageObjId, kid) {
    if (Number.isInteger(kid)) {
      if (this.tree.pageDict.objId !== pageObjId) {
        return null;
      }
      return new StructElement({
        type: StructElementType.PAGE_CONTENT,
        mcid: kid,
        pageObjId
      });
    }
    let kidDict = null;
    if (kid instanceof _primitives.Ref) {
      kidDict = this.dict.xref.fetch(kid);
    } else if (kid instanceof _primitives.Dict) {
      kidDict = kid;
    }
    if (!kidDict) {
      return null;
    }
    const pageRef = kidDict.getRaw("Pg");
    if (pageRef instanceof _primitives.Ref) {
      pageObjId = pageRef.toString();
    }
    const type = kidDict.get("Type") instanceof _primitives.Name ? kidDict.get("Type").name : null;
    if (type === "MCR") {
      if (this.tree.pageDict.objId !== pageObjId) {
        return null;
      }
      const kidRef = kidDict.getRaw("Stm");
      return new StructElement({
        type: StructElementType.STREAM_CONTENT,
        refObjId: kidRef instanceof _primitives.Ref ? kidRef.toString() : null,
        pageObjId,
        mcid: kidDict.get("MCID")
      });
    }
    if (type === "OBJR") {
      if (this.tree.pageDict.objId !== pageObjId) {
        return null;
      }
      const kidRef = kidDict.getRaw("Obj");
      return new StructElement({
        type: StructElementType.OBJECT,
        refObjId: kidRef instanceof _primitives.Ref ? kidRef.toString() : null,
        pageObjId
      });
    }
    return new StructElement({
      type: StructElementType.ELEMENT,
      dict: kidDict
    });
  }
}
class StructElement {
  constructor({
    type,
    dict = null,
    mcid = null,
    pageObjId = null,
    refObjId = null
  }) {
    this.type = type;
    this.dict = dict;
    this.mcid = mcid;
    this.pageObjId = pageObjId;
    this.refObjId = refObjId;
    this.parentNode = null;
  }
}
class StructTreePage {
  constructor(structTreeRoot, pageDict) {
    this.root = structTreeRoot;
    this.rootDict = structTreeRoot ? structTreeRoot.dict : null;
    this.pageDict = pageDict;
    this.nodes = [];
  }
  parse(pageRef) {
    if (!this.root || !this.rootDict) {
      return;
    }
    const parentTree = this.rootDict.get("ParentTree");
    if (!parentTree) {
      return;
    }
    const id = this.pageDict.get("StructParents");
    const ids = pageRef instanceof _primitives.Ref && this.root.structParentIds?.get(pageRef);
    if (!Number.isInteger(id) && !ids) {
      return;
    }
    const map = new Map();
    const numberTree = new _name_number_tree.NumberTree(parentTree, this.rootDict.xref);
    if (Number.isInteger(id)) {
      const parentArray = numberTree.get(id);
      if (Array.isArray(parentArray)) {
        for (const ref of parentArray) {
          if (ref instanceof _primitives.Ref) {
            this.addNode(this.rootDict.xref.fetch(ref), map);
          }
        }
      }
    }
    if (!ids) {
      return;
    }
    for (const [elemId, type] of ids) {
      const obj = numberTree.get(elemId);
      if (obj) {
        const elem = this.addNode(this.rootDict.xref.fetchIfRef(obj), map);
        if (elem?.kids?.length === 1 && elem.kids[0].type === StructElementType.OBJECT) {
          elem.kids[0].type = type;
        }
      }
    }
  }
  addNode(dict, map, level = 0) {
    if (level > MAX_DEPTH) {
      (0, _util.warn)("StructTree MAX_DEPTH reached.");
      return null;
    }
    if (map.has(dict)) {
      return map.get(dict);
    }
    const element = new StructElementNode(this, dict);
    map.set(dict, element);
    const parent = dict.get("P");
    if (!parent || (0, _primitives.isName)(parent.get("Type"), "StructTreeRoot")) {
      if (!this.addTopLevelNode(dict, element)) {
        map.delete(dict);
      }
      return element;
    }
    const parentNode = this.addNode(parent, map, level + 1);
    if (!parentNode) {
      return element;
    }
    let save = false;
    for (const kid of parentNode.kids) {
      if (kid.type === StructElementType.ELEMENT && kid.dict === dict) {
        kid.parentNode = element;
        save = true;
      }
    }
    if (!save) {
      map.delete(dict);
    }
    return element;
  }
  addTopLevelNode(dict, element) {
    const obj = this.rootDict.get("K");
    if (!obj) {
      return false;
    }
    if (obj instanceof _primitives.Dict) {
      if (obj.objId !== dict.objId) {
        return false;
      }
      this.nodes[0] = element;
      return true;
    }
    if (!Array.isArray(obj)) {
      return true;
    }
    let save = false;
    for (let i = 0; i < obj.length; i++) {
      const kidRef = obj[i];
      if (kidRef?.toString() === dict.objId) {
        this.nodes[i] = element;
        save = true;
      }
    }
    return save;
  }
  get serializable() {
    function nodeToSerializable(node, parent, level = 0) {
      if (level > MAX_DEPTH) {
        (0, _util.warn)("StructTree too deep to be fully serialized.");
        return;
      }
      const obj = Object.create(null);
      obj.role = node.role;
      obj.children = [];
      parent.children.push(obj);
      const alt = node.dict.get("Alt");
      if (typeof alt === "string") {
        obj.alt = (0, _util.stringToPDFString)(alt);
      }
      const lang = node.dict.get("Lang");
      if (typeof lang === "string") {
        obj.lang = (0, _util.stringToPDFString)(lang);
      }
      for (const kid of node.kids) {
        const kidElement = kid.type === StructElementType.ELEMENT ? kid.parentNode : null;
        if (kidElement) {
          nodeToSerializable(kidElement, obj, level + 1);
          continue;
        } else if (kid.type === StructElementType.PAGE_CONTENT || kid.type === StructElementType.STREAM_CONTENT) {
          obj.children.push({
            type: "content",
            id: `p${kid.pageObjId}_mc${kid.mcid}`
          });
        } else if (kid.type === StructElementType.OBJECT) {
          obj.children.push({
            type: "object",
            id: kid.refObjId
          });
        } else if (kid.type === StructElementType.ANNOTATION) {
          obj.children.push({
            type: "annotation",
            id: `${_util.AnnotationPrefix}${kid.refObjId}`
          });
        }
      }
    }
    const root = Object.create(null);
    root.children = [];
    root.role = "Root";
    for (const child of this.nodes) {
      if (!child) {
        continue;
      }
      nodeToSerializable(child, root);
    }
    return root;
  }
}
exports.StructTreePage = StructTreePage;

/***/ }),
/* 73 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.incrementalUpdate = incrementalUpdate;
exports.writeDict = writeDict;
exports.writeObject = writeObject;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(4);
var _core_utils = __w_pdfjs_require__(3);
var _xml_parser = __w_pdfjs_require__(71);
var _base_stream = __w_pdfjs_require__(5);
var _crypto = __w_pdfjs_require__(74);
async function writeObject(ref, obj, buffer, {
  encrypt = null
}) {
  const transform = encrypt?.createCipherTransform(ref.num, ref.gen);
  buffer.push(`${ref.num} ${ref.gen} obj\n`);
  if (obj instanceof _primitives.Dict) {
    await writeDict(obj, buffer, transform);
  } else if (obj instanceof _base_stream.BaseStream) {
    await writeStream(obj, buffer, transform);
  } else if (Array.isArray(obj)) {
    await writeArray(obj, buffer, transform);
  }
  buffer.push("\nendobj\n");
}
async function writeDict(dict, buffer, transform) {
  buffer.push("<<");
  for (const key of dict.getKeys()) {
    buffer.push(` /${(0, _core_utils.escapePDFName)(key)} `);
    await writeValue(dict.getRaw(key), buffer, transform);
  }
  buffer.push(">>");
}
async function writeStream(stream, buffer, transform) {
  let string = stream.getString();
  const {
    dict
  } = stream;
  const [filter, params] = await Promise.all([dict.getAsync("Filter"), dict.getAsync("DecodeParms")]);
  const filterZero = Array.isArray(filter) ? await dict.xref.fetchIfRefAsync(filter[0]) : filter;
  const isFilterZeroFlateDecode = (0, _primitives.isName)(filterZero, "FlateDecode");
  const MIN_LENGTH_FOR_COMPRESSING = 256;
  if (typeof CompressionStream !== "undefined" && (string.length >= MIN_LENGTH_FOR_COMPRESSING || isFilterZeroFlateDecode)) {
    try {
      const byteArray = (0, _util.stringToBytes)(string);
      const cs = new CompressionStream("deflate");
      const writer = cs.writable.getWriter();
      writer.write(byteArray);
      writer.close();
      const buf = await new Response(cs.readable).arrayBuffer();
      string = (0, _util.bytesToString)(new Uint8Array(buf));
      let newFilter, newParams;
      if (!filter) {
        newFilter = _primitives.Name.get("FlateDecode");
      } else if (!isFilterZeroFlateDecode) {
        newFilter = Array.isArray(filter) ? [_primitives.Name.get("FlateDecode"), ...filter] : [_primitives.Name.get("FlateDecode"), filter];
        if (params) {
          newParams = Array.isArray(params) ? [null, ...params] : [null, params];
        }
      }
      if (newFilter) {
        dict.set("Filter", newFilter);
      }
      if (newParams) {
        dict.set("DecodeParms", newParams);
      }
    } catch (ex) {
      (0, _util.info)(`writeStream - cannot compress data: "${ex}".`);
    }
  }
  if (transform) {
    string = transform.encryptString(string);
  }
  dict.set("Length", string.length);
  await writeDict(dict, buffer, transform);
  buffer.push(" stream\n", string, "\nendstream");
}
async function writeArray(array, buffer, transform) {
  buffer.push("[");
  let first = true;
  for (const val of array) {
    if (!first) {
      buffer.push(" ");
    } else {
      first = false;
    }
    await writeValue(val, buffer, transform);
  }
  buffer.push("]");
}
async function writeValue(value, buffer, transform) {
  if (value instanceof _primitives.Name) {
    buffer.push(`/${(0, _core_utils.escapePDFName)(value.name)}`);
  } else if (value instanceof _primitives.Ref) {
    buffer.push(`${value.num} ${value.gen} R`);
  } else if (Array.isArray(value)) {
    await writeArray(value, buffer, transform);
  } else if (typeof value === "string") {
    if (transform) {
      value = transform.encryptString(value);
    }
    buffer.push(`(${(0, _core_utils.escapeString)(value)})`);
  } else if (typeof value === "number") {
    buffer.push((0, _core_utils.numberToString)(value));
  } else if (typeof value === "boolean") {
    buffer.push(value.toString());
  } else if (value instanceof _primitives.Dict) {
    await writeDict(value, buffer, transform);
  } else if (value instanceof _base_stream.BaseStream) {
    await writeStream(value, buffer, transform);
  } else if (value === null) {
    buffer.push("null");
  } else {
    (0, _util.warn)(`Unhandled value in writer: ${typeof value}, please file a bug.`);
  }
}
function writeInt(number, size, offset, buffer) {
  for (let i = size + offset - 1; i > offset - 1; i--) {
    buffer[i] = number & 0xff;
    number >>= 8;
  }
  return offset + size;
}
function writeString(string, offset, buffer) {
  for (let i = 0, len = string.length; i < len; i++) {
    buffer[offset + i] = string.charCodeAt(i) & 0xff;
  }
}
function computeMD5(filesize, xrefInfo) {
  const time = Math.floor(Date.now() / 1000);
  const filename = xrefInfo.filename || "";
  const md5Buffer = [time.toString(), filename, filesize.toString()];
  let md5BufferLen = md5Buffer.reduce((a, str) => a + str.length, 0);
  for (const value of Object.values(xrefInfo.info)) {
    md5Buffer.push(value);
    md5BufferLen += value.length;
  }
  const array = new Uint8Array(md5BufferLen);
  let offset = 0;
  for (const str of md5Buffer) {
    writeString(str, offset, array);
    offset += str.length;
  }
  return (0, _util.bytesToString)((0, _crypto.calculateMD5)(array));
}
function writeXFADataForAcroform(str, newRefs) {
  const xml = new _xml_parser.SimpleXMLParser({
    hasAttributes: true
  }).parseFromString(str);
  for (const {
    xfa
  } of newRefs) {
    if (!xfa) {
      continue;
    }
    const {
      path,
      value
    } = xfa;
    if (!path) {
      continue;
    }
    const nodePath = (0, _core_utils.parseXFAPath)(path);
    let node = xml.documentElement.searchNode(nodePath, 0);
    if (!node && nodePath.length > 1) {
      node = xml.documentElement.searchNode([nodePath.at(-1)], 0);
    }
    if (node) {
      node.childNodes = Array.isArray(value) ? value.map(val => new _xml_parser.SimpleDOMNode("value", val)) : [new _xml_parser.SimpleDOMNode("#text", value)];
    } else {
      (0, _util.warn)(`Node not found for path: ${path}`);
    }
  }
  const buffer = [];
  xml.documentElement.dump(buffer);
  return buffer.join("");
}
async function updateAcroform({
  xref,
  acroForm,
  acroFormRef,
  hasXfa,
  hasXfaDatasetsEntry,
  xfaDatasetsRef,
  needAppearances,
  newRefs
}) {
  if (hasXfa && !hasXfaDatasetsEntry && !xfaDatasetsRef) {
    (0, _util.warn)("XFA - Cannot save it");
  }
  if (!needAppearances && (!hasXfa || !xfaDatasetsRef || hasXfaDatasetsEntry)) {
    return;
  }
  const dict = acroForm.clone();
  if (hasXfa && !hasXfaDatasetsEntry) {
    const newXfa = acroForm.get("XFA").slice();
    newXfa.splice(2, 0, "datasets");
    newXfa.splice(3, 0, xfaDatasetsRef);
    dict.set("XFA", newXfa);
  }
  if (needAppearances) {
    dict.set("NeedAppearances", true);
  }
  const buffer = [];
  await writeObject(acroFormRef, dict, buffer, xref);
  newRefs.push({
    ref: acroFormRef,
    data: buffer.join("")
  });
}
function updateXFA({
  xfaData,
  xfaDatasetsRef,
  newRefs,
  xref
}) {
  if (xfaData === null) {
    const datasets = xref.fetchIfRef(xfaDatasetsRef);
    xfaData = writeXFADataForAcroform(datasets.getString(), newRefs);
  }
  const encrypt = xref.encrypt;
  if (encrypt) {
    const transform = encrypt.createCipherTransform(xfaDatasetsRef.num, xfaDatasetsRef.gen);
    xfaData = transform.encryptString(xfaData);
  }
  const data = `${xfaDatasetsRef.num} ${xfaDatasetsRef.gen} obj\n` + `<< /Type /EmbeddedFile /Length ${xfaData.length}>>\nstream\n` + xfaData + "\nendstream\nendobj\n";
  newRefs.push({
    ref: xfaDatasetsRef,
    data
  });
}
async function incrementalUpdate({
  originalData,
  xrefInfo,
  newRefs,
  xref = null,
  hasXfa = false,
  xfaDatasetsRef = null,
  hasXfaDatasetsEntry = false,
  needAppearances,
  acroFormRef = null,
  acroForm = null,
  xfaData = null
}) {
  await updateAcroform({
    xref,
    acroForm,
    acroFormRef,
    hasXfa,
    hasXfaDatasetsEntry,
    xfaDatasetsRef,
    needAppearances,
    newRefs
  });
  if (hasXfa) {
    updateXFA({
      xfaData,
      xfaDatasetsRef,
      newRefs,
      xref
    });
  }
  const newXref = new _primitives.Dict(null);
  const refForXrefTable = xrefInfo.newRef;
  let buffer, baseOffset;
  const lastByte = originalData.at(-1);
  if (lastByte === 0x0a || lastByte === 0x0d) {
    buffer = [];
    baseOffset = originalData.length;
  } else {
    buffer = ["\n"];
    baseOffset = originalData.length + 1;
  }
  newXref.set("Size", refForXrefTable.num + 1);
  newXref.set("Prev", xrefInfo.startXRef);
  newXref.set("Type", _primitives.Name.get("XRef"));
  if (xrefInfo.rootRef !== null) {
    newXref.set("Root", xrefInfo.rootRef);
  }
  if (xrefInfo.infoRef !== null) {
    newXref.set("Info", xrefInfo.infoRef);
  }
  if (xrefInfo.encryptRef !== null) {
    newXref.set("Encrypt", xrefInfo.encryptRef);
  }
  newRefs.push({
    ref: refForXrefTable,
    data: ""
  });
  newRefs = newRefs.sort((a, b) => {
    return a.ref.num - b.ref.num;
  });
  const xrefTableData = [[0, 1, 0xffff]];
  const indexes = [0, 1];
  let maxOffset = 0;
  for (const {
    ref,
    data
  } of newRefs) {
    maxOffset = Math.max(maxOffset, baseOffset);
    xrefTableData.push([1, baseOffset, Math.min(ref.gen, 0xffff)]);
    baseOffset += data.length;
    indexes.push(ref.num, 1);
    buffer.push(data);
  }
  newXref.set("Index", indexes);
  if (Array.isArray(xrefInfo.fileIds) && xrefInfo.fileIds.length > 0) {
    const md5 = computeMD5(baseOffset, xrefInfo);
    newXref.set("ID", [xrefInfo.fileIds[0], md5]);
  }
  const offsetSize = Math.ceil(Math.log2(maxOffset) / 8);
  const sizes = [1, offsetSize, 2];
  const structSize = sizes[0] + sizes[1] + sizes[2];
  const tableLength = structSize * xrefTableData.length;
  newXref.set("W", sizes);
  newXref.set("Length", tableLength);
  buffer.push(`${refForXrefTable.num} ${refForXrefTable.gen} obj\n`);
  await writeDict(newXref, buffer, null);
  buffer.push(" stream\n");
  const bufferLen = buffer.reduce((a, str) => a + str.length, 0);
  const footer = `\nendstream\nendobj\nstartxref\n${baseOffset}\n%%EOF\n`;
  const array = new Uint8Array(originalData.length + bufferLen + tableLength + footer.length);
  array.set(originalData);
  let offset = originalData.length;
  for (const str of buffer) {
    writeString(str, offset, array);
    offset += str.length;
  }
  for (const [type, objOffset, gen] of xrefTableData) {
    offset = writeInt(type, sizes[0], offset, array);
    offset = writeInt(objOffset, sizes[1], offset, array);
    offset = writeInt(gen, sizes[2], offset, array);
  }
  writeString(footer, offset, array);
  return array;
}

/***/ }),
/* 74 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.calculateSHA256 = exports.calculateMD5 = exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.ARCFourCipher = exports.AES256Cipher = exports.AES128Cipher = void 0;
exports.calculateSHA384 = calculateSHA384;
exports.calculateSHA512 = void 0;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(4);
var _decrypt_stream = __w_pdfjs_require__(75);
class ARCFourCipher {
  constructor(key) {
    this.a = 0;
    this.b = 0;
    const s = new Uint8Array(256);
    const keyLength = key.length;
    for (let i = 0; i < 256; ++i) {
      s[i] = i;
    }
    for (let i = 0, j = 0; i < 256; ++i) {
      const tmp = s[i];
      j = j + tmp + key[i % keyLength] & 0xff;
      s[i] = s[j];
      s[j] = tmp;
    }
    this.s = s;
  }
  encryptBlock(data) {
    let a = this.a,
      b = this.b;
    const s = this.s;
    const n = data.length;
    const output = new Uint8Array(n);
    for (let i = 0; i < n; ++i) {
      a = a + 1 & 0xff;
      const tmp = s[a];
      b = b + tmp & 0xff;
      const tmp2 = s[b];
      s[a] = tmp2;
      s[b] = tmp;
      output[i] = data[i] ^ s[tmp + tmp2 & 0xff];
    }
    this.a = a;
    this.b = b;
    return output;
  }
  decryptBlock(data) {
    return this.encryptBlock(data);
  }
  encrypt(data) {
    return this.encryptBlock(data);
  }
}
exports.ARCFourCipher = ARCFourCipher;
const calculateMD5 = function calculateMD5Closure() {
  const r = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]);
  const k = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551]);
  function hash(data, offset, length) {
    let h0 = 1732584193,
      h1 = -271733879,
      h2 = -1732584194,
      h3 = 271733878;
    const paddedLength = length + 72 & ~63;
    const padded = new Uint8Array(paddedLength);
    let i, j;
    for (i = 0; i < length; ++i) {
      padded[i] = data[offset++];
    }
    padded[i++] = 0x80;
    const n = paddedLength - 8;
    while (i < n) {
      padded[i++] = 0;
    }
    padded[i++] = length << 3 & 0xff;
    padded[i++] = length >> 5 & 0xff;
    padded[i++] = length >> 13 & 0xff;
    padded[i++] = length >> 21 & 0xff;
    padded[i++] = length >>> 29 & 0xff;
    padded[i++] = 0;
    padded[i++] = 0;
    padded[i++] = 0;
    const w = new Int32Array(16);
    for (i = 0; i < paddedLength;) {
      for (j = 0; j < 16; ++j, i += 4) {
        w[j] = padded[i] | padded[i + 1] << 8 | padded[i + 2] << 16 | padded[i + 3] << 24;
      }
      let a = h0,
        b = h1,
        c = h2,
        d = h3,
        f,
        g;
      for (j = 0; j < 64; ++j) {
        if (j < 16) {
          f = b & c | ~b & d;
          g = j;
        } else if (j < 32) {
          f = d & b | ~d & c;
          g = 5 * j + 1 & 15;
        } else if (j < 48) {
          f = b ^ c ^ d;
          g = 3 * j + 5 & 15;
        } else {
          f = c ^ (b | ~d);
          g = 7 * j & 15;
        }
        const tmp = d,
          rotateArg = a + f + k[j] + w[g] | 0,
          rotate = r[j];
        d = c;
        c = b;
        b = b + (rotateArg << rotate | rotateArg >>> 32 - rotate) | 0;
        a = tmp;
      }
      h0 = h0 + a | 0;
      h1 = h1 + b | 0;
      h2 = h2 + c | 0;
      h3 = h3 + d | 0;
    }
    return new Uint8Array([h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >>> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >>> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >>> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >>> 24 & 0xFF]);
  }
  return hash;
}();
exports.calculateMD5 = calculateMD5;
class Word64 {
  constructor(highInteger, lowInteger) {
    this.high = highInteger | 0;
    this.low = lowInteger | 0;
  }
  and(word) {
    this.high &= word.high;
    this.low &= word.low;
  }
  xor(word) {
    this.high ^= word.high;
    this.low ^= word.low;
  }
  or(word) {
    this.high |= word.high;
    this.low |= word.low;
  }
  shiftRight(places) {
    if (places >= 32) {
      this.low = this.high >>> places - 32 | 0;
      this.high = 0;
    } else {
      this.low = this.low >>> places | this.high << 32 - places;
      this.high = this.high >>> places | 0;
    }
  }
  shiftLeft(places) {
    if (places >= 32) {
      this.high = this.low << places - 32;
      this.low = 0;
    } else {
      this.high = this.high << places | this.low >>> 32 - places;
      this.low <<= places;
    }
  }
  rotateRight(places) {
    let low, high;
    if (places & 32) {
      high = this.low;
      low = this.high;
    } else {
      low = this.low;
      high = this.high;
    }
    places &= 31;
    this.low = low >>> places | high << 32 - places;
    this.high = high >>> places | low << 32 - places;
  }
  not() {
    this.high = ~this.high;
    this.low = ~this.low;
  }
  add(word) {
    const lowAdd = (this.low >>> 0) + (word.low >>> 0);
    let highAdd = (this.high >>> 0) + (word.high >>> 0);
    if (lowAdd > 0xffffffff) {
      highAdd += 1;
    }
    this.low = lowAdd | 0;
    this.high = highAdd | 0;
  }
  copyTo(bytes, offset) {
    bytes[offset] = this.high >>> 24 & 0xff;
    bytes[offset + 1] = this.high >> 16 & 0xff;
    bytes[offset + 2] = this.high >> 8 & 0xff;
    bytes[offset + 3] = this.high & 0xff;
    bytes[offset + 4] = this.low >>> 24 & 0xff;
    bytes[offset + 5] = this.low >> 16 & 0xff;
    bytes[offset + 6] = this.low >> 8 & 0xff;
    bytes[offset + 7] = this.low & 0xff;
  }
  assign(word) {
    this.high = word.high;
    this.low = word.low;
  }
}
const calculateSHA256 = function calculateSHA256Closure() {
  function rotr(x, n) {
    return x >>> n | x << 32 - n;
  }
  function ch(x, y, z) {
    return x & y ^ ~x & z;
  }
  function maj(x, y, z) {
    return x & y ^ x & z ^ y & z;
  }
  function sigma(x) {
    return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22);
  }
  function sigmaPrime(x) {
    return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25);
  }
  function littleSigma(x) {
    return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3;
  }
  function littleSigmaPrime(x) {
    return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10;
  }
  const k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
  function hash(data, offset, length) {
    let h0 = 0x6a09e667,
      h1 = 0xbb67ae85,
      h2 = 0x3c6ef372,
      h3 = 0xa54ff53a,
      h4 = 0x510e527f,
      h5 = 0x9b05688c,
      h6 = 0x1f83d9ab,
      h7 = 0x5be0cd19;
    const paddedLength = Math.ceil((length + 9) / 64) * 64;
    const padded = new Uint8Array(paddedLength);
    let i, j;
    for (i = 0; i < length; ++i) {
      padded[i] = data[offset++];
    }
    padded[i++] = 0x80;
    const n = paddedLength - 8;
    while (i < n) {
      padded[i++] = 0;
    }
    padded[i++] = 0;
    padded[i++] = 0;
    padded[i++] = 0;
    padded[i++] = length >>> 29 & 0xff;
    padded[i++] = length >> 21 & 0xff;
    padded[i++] = length >> 13 & 0xff;
    padded[i++] = length >> 5 & 0xff;
    padded[i++] = length << 3 & 0xff;
    const w = new Uint32Array(64);
    for (i = 0; i < paddedLength;) {
      for (j = 0; j < 16; ++j) {
        w[j] = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3];
        i += 4;
      }
      for (j = 16; j < 64; ++j) {
        w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + littleSigma(w[j - 15]) + w[j - 16] | 0;
      }
      let a = h0,
        b = h1,
        c = h2,
        d = h3,
        e = h4,
        f = h5,
        g = h6,
        h = h7,
        t1,
        t2;
      for (j = 0; j < 64; ++j) {
        t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j];
        t2 = sigma(a) + maj(a, b, c);
        h = g;
        g = f;
        f = e;
        e = d + t1 | 0;
        d = c;
        c = b;
        b = a;
        a = t1 + t2 | 0;
      }
      h0 = h0 + a | 0;
      h1 = h1 + b | 0;
      h2 = h2 + c | 0;
      h3 = h3 + d | 0;
      h4 = h4 + e | 0;
      h5 = h5 + f | 0;
      h6 = h6 + g | 0;
      h7 = h7 + h | 0;
    }
    return new Uint8Array([h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF, h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 >> 8 & 0xFF, h7 & 0xFF]);
  }
  return hash;
}();
exports.calculateSHA256 = calculateSHA256;
const calculateSHA512 = function calculateSHA512Closure() {
  function ch(result, x, y, z, tmp) {
    result.assign(x);
    result.and(y);
    tmp.assign(x);
    tmp.not();
    tmp.and(z);
    result.xor(tmp);
  }
  function maj(result, x, y, z, tmp) {
    result.assign(x);
    result.and(y);
    tmp.assign(x);
    tmp.and(z);
    result.xor(tmp);
    tmp.assign(y);
    tmp.and(z);
    result.xor(tmp);
  }
  function sigma(result, x, tmp) {
    result.assign(x);
    result.rotateRight(28);
    tmp.assign(x);
    tmp.rotateRight(34);
    result.xor(tmp);
    tmp.assign(x);
    tmp.rotateRight(39);
    result.xor(tmp);
  }
  function sigmaPrime(result, x, tmp) {
    result.assign(x);
    result.rotateRight(14);
    tmp.assign(x);
    tmp.rotateRight(18);
    result.xor(tmp);
    tmp.assign(x);
    tmp.rotateRight(41);
    result.xor(tmp);
  }
  function littleSigma(result, x, tmp) {
    result.assign(x);
    result.rotateRight(1);
    tmp.assign(x);
    tmp.rotateRight(8);
    result.xor(tmp);
    tmp.assign(x);
    tmp.shiftRight(7);
    result.xor(tmp);
  }
  function littleSigmaPrime(result, x, tmp) {
    result.assign(x);
    result.rotateRight(19);
    tmp.assign(x);
    tmp.rotateRight(61);
    result.xor(tmp);
    tmp.assign(x);
    tmp.shiftRight(6);
    result.xor(tmp);
  }
  const k = [new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd), new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc), new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019), new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118), new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe), new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2), new Word64(0x72be5d74, 0xf27b896f), new Word64(0x80deb1fe, 0x3b1696b1), new Word64(0x9bdc06a7, 0x25c71235), new Word64(0xc19bf174, 0xcf692694), new Word64(0xe49b69c1, 0x9ef14ad2), new Word64(0xefbe4786, 0x384f25e3), new Word64(0x0fc19dc6, 0x8b8cd5b5), new Word64(0x240ca1cc, 0x77ac9c65), new Word64(0x2de92c6f, 0x592b0275), new Word64(0x4a7484aa, 0x6ea6e483), new Word64(0x5cb0a9dc, 0xbd41fbd4), new Word64(0x76f988da, 0x831153b5), new Word64(0x983e5152, 0xee66dfab), new Word64(0xa831c66d, 0x2db43210), new Word64(0xb00327c8, 0x98fb213f), new Word64(0xbf597fc7, 0xbeef0ee4), new Word64(0xc6e00bf3, 0x3da88fc2), new Word64(0xd5a79147, 0x930aa725), new Word64(0x06ca6351, 0xe003826f), new Word64(0x14292967, 0x0a0e6e70), new Word64(0x27b70a85, 0x46d22ffc), new Word64(0x2e1b2138, 0x5c26c926), new Word64(0x4d2c6dfc, 0x5ac42aed), new Word64(0x53380d13, 0x9d95b3df), new Word64(0x650a7354, 0x8baf63de), new Word64(0x766a0abb, 0x3c77b2a8), new Word64(0x81c2c92e, 0x47edaee6), new Word64(0x92722c85, 0x1482353b), new Word64(0xa2bfe8a1, 0x4cf10364), new Word64(0xa81a664b, 0xbc423001), new Word64(0xc24b8b70, 0xd0f89791), new Word64(0xc76c51a3, 0x0654be30), new Word64(0xd192e819, 0xd6ef5218), new Word64(0xd6990624, 0x5565a910), new Word64(0xf40e3585, 0x5771202a), new Word64(0x106aa070, 0x32bbd1b8), new Word64(0x19a4c116, 0xb8d2d0c8), new Word64(0x1e376c08, 0x5141ab53), new Word64(0x2748774c, 0xdf8eeb99), new Word64(0x34b0bcb5, 0xe19b48a8), new Word64(0x391c0cb3, 0xc5c95a63), new Word64(0x4ed8aa4a, 0xe3418acb), new Word64(0x5b9cca4f, 0x7763e373), new Word64(0x682e6ff3, 0xd6b2b8a3), new Word64(0x748f82ee, 0x5defb2fc), new Word64(0x78a5636f, 0x43172f60), new Word64(0x84c87814, 0xa1f0ab72), new Word64(0x8cc70208, 0x1a6439ec), new Word64(0x90befffa, 0x23631e28), new Word64(0xa4506ceb, 0xde82bde9), new Word64(0xbef9a3f7, 0xb2c67915), new Word64(0xc67178f2, 0xe372532b), new Word64(0xca273ece, 0xea26619c), new Word64(0xd186b8c7, 0x21c0c207), new Word64(0xeada7dd6, 0xcde0eb1e), new Word64(0xf57d4f7f, 0xee6ed178), new Word64(0x06f067aa, 0x72176fba), new Word64(0x0a637dc5, 0xa2c898a6), new Word64(0x113f9804, 0xbef90dae), new Word64(0x1b710b35, 0x131c471b), new Word64(0x28db77f5, 0x23047d84), new Word64(0x32caab7b, 0x40c72493), new Word64(0x3c9ebe0a, 0x15c9bebc), new Word64(0x431d67c4, 0x9c100d4c), new Word64(0x4cc5d4be, 0xcb3e42b6), new Word64(0x597f299c, 0xfc657e2a), new Word64(0x5fcb6fab, 0x3ad6faec), new Word64(0x6c44198c, 0x4a475817)];
  function hash(data, offset, length, mode384 = false) {
    let h0, h1, h2, h3, h4, h5, h6, h7;
    if (!mode384) {
      h0 = new Word64(0x6a09e667, 0xf3bcc908);
      h1 = new Word64(0xbb67ae85, 0x84caa73b);
      h2 = new Word64(0x3c6ef372, 0xfe94f82b);
      h3 = new Word64(0xa54ff53a, 0x5f1d36f1);
      h4 = new Word64(0x510e527f, 0xade682d1);
      h5 = new Word64(0x9b05688c, 0x2b3e6c1f);
      h6 = new Word64(0x1f83d9ab, 0xfb41bd6b);
      h7 = new Word64(0x5be0cd19, 0x137e2179);
    } else {
      h0 = new Word64(0xcbbb9d5d, 0xc1059ed8);
      h1 = new Word64(0x629a292a, 0x367cd507);
      h2 = new Word64(0x9159015a, 0x3070dd17);
      h3 = new Word64(0x152fecd8, 0xf70e5939);
      h4 = new Word64(0x67332667, 0xffc00b31);
      h5 = new Word64(0x8eb44a87, 0x68581511);
      h6 = new Word64(0xdb0c2e0d, 0x64f98fa7);
      h7 = new Word64(0x47b5481d, 0xbefa4fa4);
    }
    const paddedLength = Math.ceil((length + 17) / 128) * 128;
    const padded = new Uint8Array(paddedLength);
    let i, j;
    for (i = 0; i < length; ++i) {
      padded[i] = data[offset++];
    }
    padded[i++] = 0x80;
    const n = paddedLength - 16;
    while (i < n) {
      padded[i++] = 0;
    }
    padded[i++] = 0;
    padded[i++] = 0;
    padded[i++] = 0;
    padded[i++] = 0;
    padded[i++] = 0;
    padded[i++] = 0;
    padded[i++] = 0;
    padded[i++] = 0;
    padded[i++] = 0;
    padded[i++] = 0;
    padded[i++] = 0;
    padded[i++] = length >>> 29 & 0xff;
    padded[i++] = length >> 21 & 0xff;
    padded[i++] = length >> 13 & 0xff;
    padded[i++] = length >> 5 & 0xff;
    padded[i++] = length << 3 & 0xff;
    const w = new Array(80);
    for (i = 0; i < 80; i++) {
      w[i] = new Word64(0, 0);
    }
    let a = new Word64(0, 0),
      b = new Word64(0, 0),
      c = new Word64(0, 0);
    let d = new Word64(0, 0),
      e = new Word64(0, 0),
      f = new Word64(0, 0);
    let g = new Word64(0, 0),
      h = new Word64(0, 0);
    const t1 = new Word64(0, 0),
      t2 = new Word64(0, 0);
    const tmp1 = new Word64(0, 0),
      tmp2 = new Word64(0, 0);
    let tmp3;
    for (i = 0; i < paddedLength;) {
      for (j = 0; j < 16; ++j) {
        w[j].high = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3];
        w[j].low = padded[i + 4] << 24 | padded[i + 5] << 16 | padded[i + 6] << 8 | padded[i + 7];
        i += 8;
      }
      for (j = 16; j < 80; ++j) {
        tmp3 = w[j];
        littleSigmaPrime(tmp3, w[j - 2], tmp2);
        tmp3.add(w[j - 7]);
        littleSigma(tmp1, w[j - 15], tmp2);
        tmp3.add(tmp1);
        tmp3.add(w[j - 16]);
      }
      a.assign(h0);
      b.assign(h1);
      c.assign(h2);
      d.assign(h3);
      e.assign(h4);
      f.assign(h5);
      g.assign(h6);
      h.assign(h7);
      for (j = 0; j < 80; ++j) {
        t1.assign(h);
        sigmaPrime(tmp1, e, tmp2);
        t1.add(tmp1);
        ch(tmp1, e, f, g, tmp2);
        t1.add(tmp1);
        t1.add(k[j]);
        t1.add(w[j]);
        sigma(t2, a, tmp2);
        maj(tmp1, a, b, c, tmp2);
        t2.add(tmp1);
        tmp3 = h;
        h = g;
        g = f;
        f = e;
        d.add(t1);
        e = d;
        d = c;
        c = b;
        b = a;
        tmp3.assign(t1);
        tmp3.add(t2);
        a = tmp3;
      }
      h0.add(a);
      h1.add(b);
      h2.add(c);
      h3.add(d);
      h4.add(e);
      h5.add(f);
      h6.add(g);
      h7.add(h);
    }
    let result;
    if (!mode384) {
      result = new Uint8Array(64);
      h0.copyTo(result, 0);
      h1.copyTo(result, 8);
      h2.copyTo(result, 16);
      h3.copyTo(result, 24);
      h4.copyTo(result, 32);
      h5.copyTo(result, 40);
      h6.copyTo(result, 48);
      h7.copyTo(result, 56);
    } else {
      result = new Uint8Array(48);
      h0.copyTo(result, 0);
      h1.copyTo(result, 8);
      h2.copyTo(result, 16);
      h3.copyTo(result, 24);
      h4.copyTo(result, 32);
      h5.copyTo(result, 40);
    }
    return result;
  }
  return hash;
}();
exports.calculateSHA512 = calculateSHA512;
function calculateSHA384(data, offset, length) {
  return calculateSHA512(data, offset, length, true);
}
class NullCipher {
  decryptBlock(data) {
    return data;
  }
  encrypt(data) {
    return data;
  }
}
class AESBaseCipher {
  constructor() {
    if (this.constructor === AESBaseCipher) {
      (0, _util.unreachable)("Cannot initialize AESBaseCipher.");
    }
    this._s = new Uint8Array([0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]);
    this._inv_s = new Uint8Array([0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]);
    this._mix = new Uint32Array([0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]);
    this._mixCol = new Uint8Array(256);
    for (let i = 0; i < 256; i++) {
      this._mixCol[i] = i < 128 ? i << 1 : i << 1 ^ 0x1b;
    }
    this.buffer = new Uint8Array(16);
    this.bufferPosition = 0;
  }
  _expandKey(cipherKey) {
    (0, _util.unreachable)("Cannot call `_expandKey` on the base class");
  }
  _decrypt(input, key) {
    let t, u, v;
    const state = new Uint8Array(16);
    state.set(input);
    for (let j = 0, k = this._keySize; j < 16; ++j, ++k) {
      state[j] ^= key[k];
    }
    for (let i = this._cyclesOfRepetition - 1; i >= 1; --i) {
      t = state[13];
      state[13] = state[9];
      state[9] = state[5];
      state[5] = state[1];
      state[1] = t;
      t = state[14];
      u = state[10];
      state[14] = state[6];
      state[10] = state[2];
      state[6] = t;
      state[2] = u;
      t = state[15];
      u = state[11];
      v = state[7];
      state[15] = state[3];
      state[11] = t;
      state[7] = u;
      state[3] = v;
      for (let j = 0; j < 16; ++j) {
        state[j] = this._inv_s[state[j]];
      }
      for (let j = 0, k = i * 16; j < 16; ++j, ++k) {
        state[j] ^= key[k];
      }
      for (let j = 0; j < 16; j += 4) {
        const s0 = this._mix[state[j]];
        const s1 = this._mix[state[j + 1]];
        const s2 = this._mix[state[j + 2]];
        const s3 = this._mix[state[j + 3]];
        t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8;
        state[j] = t >>> 24 & 0xff;
        state[j + 1] = t >> 16 & 0xff;
        state[j + 2] = t >> 8 & 0xff;
        state[j + 3] = t & 0xff;
      }
    }
    t = state[13];
    state[13] = state[9];
    state[9] = state[5];
    state[5] = state[1];
    state[1] = t;
    t = state[14];
    u = state[10];
    state[14] = state[6];
    state[10] = state[2];
    state[6] = t;
    state[2] = u;
    t = state[15];
    u = state[11];
    v = state[7];
    state[15] = state[3];
    state[11] = t;
    state[7] = u;
    state[3] = v;
    for (let j = 0; j < 16; ++j) {
      state[j] = this._inv_s[state[j]];
      state[j] ^= key[j];
    }
    return state;
  }
  _encrypt(input, key) {
    const s = this._s;
    let t, u, v;
    const state = new Uint8Array(16);
    state.set(input);
    for (let j = 0; j < 16; ++j) {
      state[j] ^= key[j];
    }
    for (let i = 1; i < this._cyclesOfRepetition; i++) {
      for (let j = 0; j < 16; ++j) {
        state[j] = s[state[j]];
      }
      v = state[1];
      state[1] = state[5];
      state[5] = state[9];
      state[9] = state[13];
      state[13] = v;
      v = state[2];
      u = state[6];
      state[2] = state[10];
      state[6] = state[14];
      state[10] = v;
      state[14] = u;
      v = state[3];
      u = state[7];
      t = state[11];
      state[3] = state[15];
      state[7] = v;
      state[11] = u;
      state[15] = t;
      for (let j = 0; j < 16; j += 4) {
        const s0 = state[j + 0];
        const s1 = state[j + 1];
        const s2 = state[j + 2];
        const s3 = state[j + 3];
        t = s0 ^ s1 ^ s2 ^ s3;
        state[j + 0] ^= t ^ this._mixCol[s0 ^ s1];
        state[j + 1] ^= t ^ this._mixCol[s1 ^ s2];
        state[j + 2] ^= t ^ this._mixCol[s2 ^ s3];
        state[j + 3] ^= t ^ this._mixCol[s3 ^ s0];
      }
      for (let j = 0, k = i * 16; j < 16; ++j, ++k) {
        state[j] ^= key[k];
      }
    }
    for (let j = 0; j < 16; ++j) {
      state[j] = s[state[j]];
    }
    v = state[1];
    state[1] = state[5];
    state[5] = state[9];
    state[9] = state[13];
    state[13] = v;
    v = state[2];
    u = state[6];
    state[2] = state[10];
    state[6] = state[14];
    state[10] = v;
    state[14] = u;
    v = state[3];
    u = state[7];
    t = state[11];
    state[3] = state[15];
    state[7] = v;
    state[11] = u;
    state[15] = t;
    for (let j = 0, k = this._keySize; j < 16; ++j, ++k) {
      state[j] ^= key[k];
    }
    return state;
  }
  _decryptBlock2(data, finalize) {
    const sourceLength = data.length;
    let buffer = this.buffer,
      bufferLength = this.bufferPosition;
    const result = [];
    let iv = this.iv;
    for (let i = 0; i < sourceLength; ++i) {
      buffer[bufferLength] = data[i];
      ++bufferLength;
      if (bufferLength < 16) {
        continue;
      }
      const plain = this._decrypt(buffer, this._key);
      for (let j = 0; j < 16; ++j) {
        plain[j] ^= iv[j];
      }
      iv = buffer;
      result.push(plain);
      buffer = new Uint8Array(16);
      bufferLength = 0;
    }
    this.buffer = buffer;
    this.bufferLength = bufferLength;
    this.iv = iv;
    if (result.length === 0) {
      return new Uint8Array(0);
    }
    let outputLength = 16 * result.length;
    if (finalize) {
      const lastBlock = result.at(-1);
      let psLen = lastBlock[15];
      if (psLen <= 16) {
        for (let i = 15, ii = 16 - psLen; i >= ii; --i) {
          if (lastBlock[i] !== psLen) {
            psLen = 0;
            break;
          }
        }
        outputLength -= psLen;
        result[result.length - 1] = lastBlock.subarray(0, 16 - psLen);
      }
    }
    const output = new Uint8Array(outputLength);
    for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {
      output.set(result[i], j);
    }
    return output;
  }
  decryptBlock(data, finalize, iv = null) {
    const sourceLength = data.length;
    const buffer = this.buffer;
    let bufferLength = this.bufferPosition;
    if (iv) {
      this.iv = iv;
    } else {
      for (let i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) {
        buffer[bufferLength] = data[i];
      }
      if (bufferLength < 16) {
        this.bufferLength = bufferLength;
        return new Uint8Array(0);
      }
      this.iv = buffer;
      data = data.subarray(16);
    }
    this.buffer = new Uint8Array(16);
    this.bufferLength = 0;
    this.decryptBlock = this._decryptBlock2;
    return this.decryptBlock(data, finalize);
  }
  encrypt(data, iv) {
    const sourceLength = data.length;
    let buffer = this.buffer,
      bufferLength = this.bufferPosition;
    const result = [];
    if (!iv) {
      iv = new Uint8Array(16);
    }
    for (let i = 0; i < sourceLength; ++i) {
      buffer[bufferLength] = data[i];
      ++bufferLength;
      if (bufferLength < 16) {
        continue;
      }
      for (let j = 0; j < 16; ++j) {
        buffer[j] ^= iv[j];
      }
      const cipher = this._encrypt(buffer, this._key);
      iv = cipher;
      result.push(cipher);
      buffer = new Uint8Array(16);
      bufferLength = 0;
    }
    this.buffer = buffer;
    this.bufferLength = bufferLength;
    this.iv = iv;
    if (result.length === 0) {
      return new Uint8Array(0);
    }
    const outputLength = 16 * result.length;
    const output = new Uint8Array(outputLength);
    for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {
      output.set(result[i], j);
    }
    return output;
  }
}
class AES128Cipher extends AESBaseCipher {
  constructor(key) {
    super();
    this._cyclesOfRepetition = 10;
    this._keySize = 160;
    this._rcon = new Uint8Array([0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d]);
    this._key = this._expandKey(key);
  }
  _expandKey(cipherKey) {
    const b = 176;
    const s = this._s;
    const rcon = this._rcon;
    const result = new Uint8Array(b);
    result.set(cipherKey);
    for (let j = 16, i = 1; j < b; ++i) {
      let t1 = result[j - 3];
      let t2 = result[j - 2];
      let t3 = result[j - 1];
      let t4 = result[j - 4];
      t1 = s[t1];
      t2 = s[t2];
      t3 = s[t3];
      t4 = s[t4];
      t1 ^= rcon[i];
      for (let n = 0; n < 4; ++n) {
        result[j] = t1 ^= result[j - 16];
        j++;
        result[j] = t2 ^= result[j - 16];
        j++;
        result[j] = t3 ^= result[j - 16];
        j++;
        result[j] = t4 ^= result[j - 16];
        j++;
      }
    }
    return result;
  }
}
exports.AES128Cipher = AES128Cipher;
class AES256Cipher extends AESBaseCipher {
  constructor(key) {
    super();
    this._cyclesOfRepetition = 14;
    this._keySize = 224;
    this._key = this._expandKey(key);
  }
  _expandKey(cipherKey) {
    const b = 240;
    const s = this._s;
    const result = new Uint8Array(b);
    result.set(cipherKey);
    let r = 1;
    let t1, t2, t3, t4;
    for (let j = 32, i = 1; j < b; ++i) {
      if (j % 32 === 16) {
        t1 = s[t1];
        t2 = s[t2];
        t3 = s[t3];
        t4 = s[t4];
      } else if (j % 32 === 0) {
        t1 = result[j - 3];
        t2 = result[j - 2];
        t3 = result[j - 1];
        t4 = result[j - 4];
        t1 = s[t1];
        t2 = s[t2];
        t3 = s[t3];
        t4 = s[t4];
        t1 ^= r;
        if ((r <<= 1) >= 256) {
          r = (r ^ 0x1b) & 0xff;
        }
      }
      for (let n = 0; n < 4; ++n) {
        result[j] = t1 ^= result[j - 32];
        j++;
        result[j] = t2 ^= result[j - 32];
        j++;
        result[j] = t3 ^= result[j - 32];
        j++;
        result[j] = t4 ^= result[j - 32];
        j++;
      }
    }
    return result;
  }
}
exports.AES256Cipher = AES256Cipher;
class PDF17 {
  checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {
    const hashData = new Uint8Array(password.length + 56);
    hashData.set(password, 0);
    hashData.set(ownerValidationSalt, password.length);
    hashData.set(userBytes, password.length + ownerValidationSalt.length);
    const result = calculateSHA256(hashData, 0, hashData.length);
    return (0, _util.isArrayEqual)(result, ownerPassword);
  }
  checkUserPassword(password, userValidationSalt, userPassword) {
    const hashData = new Uint8Array(password.length + 8);
    hashData.set(password, 0);
    hashData.set(userValidationSalt, password.length);
    const result = calculateSHA256(hashData, 0, hashData.length);
    return (0, _util.isArrayEqual)(result, userPassword);
  }
  getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {
    const hashData = new Uint8Array(password.length + 56);
    hashData.set(password, 0);
    hashData.set(ownerKeySalt, password.length);
    hashData.set(userBytes, password.length + ownerKeySalt.length);
    const key = calculateSHA256(hashData, 0, hashData.length);
    const cipher = new AES256Cipher(key);
    return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));
  }
  getUserKey(password, userKeySalt, userEncryption) {
    const hashData = new Uint8Array(password.length + 8);
    hashData.set(password, 0);
    hashData.set(userKeySalt, password.length);
    const key = calculateSHA256(hashData, 0, hashData.length);
    const cipher = new AES256Cipher(key);
    return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));
  }
}
exports.PDF17 = PDF17;
class PDF20 {
  _hash(password, input, userBytes) {
    let k = calculateSHA256(input, 0, input.length).subarray(0, 32);
    let e = [0];
    let i = 0;
    while (i < 64 || e.at(-1) > i - 32) {
      const combinedLength = password.length + k.length + userBytes.length,
        combinedArray = new Uint8Array(combinedLength);
      let writeOffset = 0;
      combinedArray.set(password, writeOffset);
      writeOffset += password.length;
      combinedArray.set(k, writeOffset);
      writeOffset += k.length;
      combinedArray.set(userBytes, writeOffset);
      const k1 = new Uint8Array(combinedLength * 64);
      for (let j = 0, pos = 0; j < 64; j++, pos += combinedLength) {
        k1.set(combinedArray, pos);
      }
      const cipher = new AES128Cipher(k.subarray(0, 16));
      e = cipher.encrypt(k1, k.subarray(16, 32));
      const remainder = e.slice(0, 16).reduce((a, b) => a + b, 0) % 3;
      if (remainder === 0) {
        k = calculateSHA256(e, 0, e.length);
      } else if (remainder === 1) {
        k = calculateSHA384(e, 0, e.length);
      } else if (remainder === 2) {
        k = calculateSHA512(e, 0, e.length);
      }
      i++;
    }
    return k.subarray(0, 32);
  }
  checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {
    const hashData = new Uint8Array(password.length + 56);
    hashData.set(password, 0);
    hashData.set(ownerValidationSalt, password.length);
    hashData.set(userBytes, password.length + ownerValidationSalt.length);
    const result = this._hash(password, hashData, userBytes);
    return (0, _util.isArrayEqual)(result, ownerPassword);
  }
  checkUserPassword(password, userValidationSalt, userPassword) {
    const hashData = new Uint8Array(password.length + 8);
    hashData.set(password, 0);
    hashData.set(userValidationSalt, password.length);
    const result = this._hash(password, hashData, []);
    return (0, _util.isArrayEqual)(result, userPassword);
  }
  getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {
    const hashData = new Uint8Array(password.length + 56);
    hashData.set(password, 0);
    hashData.set(ownerKeySalt, password.length);
    hashData.set(userBytes, password.length + ownerKeySalt.length);
    const key = this._hash(password, hashData, userBytes);
    const cipher = new AES256Cipher(key);
    return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));
  }
  getUserKey(password, userKeySalt, userEncryption) {
    const hashData = new Uint8Array(password.length + 8);
    hashData.set(password, 0);
    hashData.set(userKeySalt, password.length);
    const key = this._hash(password, hashData, []);
    const cipher = new AES256Cipher(key);
    return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));
  }
}
exports.PDF20 = PDF20;
class CipherTransform {
  constructor(stringCipherConstructor, streamCipherConstructor) {
    this.StringCipherConstructor = stringCipherConstructor;
    this.StreamCipherConstructor = streamCipherConstructor;
  }
  createStream(stream, length) {
    const cipher = new this.StreamCipherConstructor();
    return new _decrypt_stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) {
      return cipher.decryptBlock(data, finalize);
    });
  }
  decryptString(s) {
    const cipher = new this.StringCipherConstructor();
    let data = (0, _util.stringToBytes)(s);
    data = cipher.decryptBlock(data, true);
    return (0, _util.bytesToString)(data);
  }
  encryptString(s) {
    const cipher = new this.StringCipherConstructor();
    if (cipher instanceof AESBaseCipher) {
      const strLen = s.length;
      const pad = 16 - strLen % 16;
      s += String.fromCharCode(pad).repeat(pad);
      const iv = new Uint8Array(16);
      if (typeof crypto !== "undefined") {
        crypto.getRandomValues(iv);
      } else {
        for (let i = 0; i < 16; i++) {
          iv[i] = Math.floor(256 * Math.random());
        }
      }
      let data = (0, _util.stringToBytes)(s);
      data = cipher.encrypt(data, iv);
      const buf = new Uint8Array(16 + data.length);
      buf.set(iv);
      buf.set(data, 16);
      return (0, _util.bytesToString)(buf);
    }
    let data = (0, _util.stringToBytes)(s);
    data = cipher.encrypt(data);
    return (0, _util.bytesToString)(data);
  }
}
class CipherTransformFactory {
  static #defaultPasswordBytes = new Uint8Array([0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a]);
  #createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) {
    if (password) {
      const passwordLength = Math.min(127, password.length);
      password = password.subarray(0, passwordLength);
    } else {
      password = [];
    }
    const pdfAlgorithm = revision === 6 ? new PDF20() : new PDF17();
    if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)) {
      return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption);
    } else if (password.length && pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, uBytes, ownerPassword)) {
      return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, ownerEncryption);
    }
    return null;
  }
  #prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) {
    const hashDataSize = 40 + ownerPassword.length + fileId.length;
    const hashData = new Uint8Array(hashDataSize);
    let i = 0,
      j,
      n;
    if (password) {
      n = Math.min(32, password.length);
      for (; i < n; ++i) {
        hashData[i] = password[i];
      }
    }
    j = 0;
    while (i < 32) {
      hashData[i++] = CipherTransformFactory.#defaultPasswordBytes[j++];
    }
    for (j = 0, n = ownerPassword.length; j < n; ++j) {
      hashData[i++] = ownerPassword[j];
    }
    hashData[i++] = flags & 0xff;
    hashData[i++] = flags >> 8 & 0xff;
    hashData[i++] = flags >> 16 & 0xff;
    hashData[i++] = flags >>> 24 & 0xff;
    for (j = 0, n = fileId.length; j < n; ++j) {
      hashData[i++] = fileId[j];
    }
    if (revision >= 4 && !encryptMetadata) {
      hashData[i++] = 0xff;
      hashData[i++] = 0xff;
      hashData[i++] = 0xff;
      hashData[i++] = 0xff;
    }
    let hash = calculateMD5(hashData, 0, i);
    const keyLengthInBytes = keyLength >> 3;
    if (revision >= 3) {
      for (j = 0; j < 50; ++j) {
        hash = calculateMD5(hash, 0, keyLengthInBytes);
      }
    }
    const encryptionKey = hash.subarray(0, keyLengthInBytes);
    let cipher, checkData;
    if (revision >= 3) {
      for (i = 0; i < 32; ++i) {
        hashData[i] = CipherTransformFactory.#defaultPasswordBytes[i];
      }
      for (j = 0, n = fileId.length; j < n; ++j) {
        hashData[i++] = fileId[j];
      }
      cipher = new ARCFourCipher(encryptionKey);
      checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i));
      n = encryptionKey.length;
      const derivedKey = new Uint8Array(n);
      for (j = 1; j <= 19; ++j) {
        for (let k = 0; k < n; ++k) {
          derivedKey[k] = encryptionKey[k] ^ j;
        }
        cipher = new ARCFourCipher(derivedKey);
        checkData = cipher.encryptBlock(checkData);
      }
      for (j = 0, n = checkData.length; j < n; ++j) {
        if (userPassword[j] !== checkData[j]) {
          return null;
        }
      }
    } else {
      cipher = new ARCFourCipher(encryptionKey);
      checkData = cipher.encryptBlock(CipherTransformFactory.#defaultPasswordBytes);
      for (j = 0, n = checkData.length; j < n; ++j) {
        if (userPassword[j] !== checkData[j]) {
          return null;
        }
      }
    }
    return encryptionKey;
  }
  #decodeUserPassword(password, ownerPassword, revision, keyLength) {
    const hashData = new Uint8Array(32);
    let i = 0;
    const n = Math.min(32, password.length);
    for (; i < n; ++i) {
      hashData[i] = password[i];
    }
    let j = 0;
    while (i < 32) {
      hashData[i++] = CipherTransformFactory.#defaultPasswordBytes[j++];
    }
    let hash = calculateMD5(hashData, 0, i);
    const keyLengthInBytes = keyLength >> 3;
    if (revision >= 3) {
      for (j = 0; j < 50; ++j) {
        hash = calculateMD5(hash, 0, hash.length);
      }
    }
    let cipher, userPassword;
    if (revision >= 3) {
      userPassword = ownerPassword;
      const derivedKey = new Uint8Array(keyLengthInBytes);
      for (j = 19; j >= 0; j--) {
        for (let k = 0; k < keyLengthInBytes; ++k) {
          derivedKey[k] = hash[k] ^ j;
        }
        cipher = new ARCFourCipher(derivedKey);
        userPassword = cipher.encryptBlock(userPassword);
      }
    } else {
      cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes));
      userPassword = cipher.encryptBlock(ownerPassword);
    }
    return userPassword;
  }
  #buildObjectKey(num, gen, encryptionKey, isAes = false) {
    const key = new Uint8Array(encryptionKey.length + 9);
    const n = encryptionKey.length;
    let i;
    for (i = 0; i < n; ++i) {
      key[i] = encryptionKey[i];
    }
    key[i++] = num & 0xff;
    key[i++] = num >> 8 & 0xff;
    key[i++] = num >> 16 & 0xff;
    key[i++] = gen & 0xff;
    key[i++] = gen >> 8 & 0xff;
    if (isAes) {
      key[i++] = 0x73;
      key[i++] = 0x41;
      key[i++] = 0x6c;
      key[i++] = 0x54;
    }
    const hash = calculateMD5(key, 0, i);
    return hash.subarray(0, Math.min(encryptionKey.length + 5, 16));
  }
  #buildCipherConstructor(cf, name, num, gen, key) {
    if (!(name instanceof _primitives.Name)) {
      throw new _util.FormatError("Invalid crypt filter name.");
    }
    const self = this;
    const cryptFilter = cf.get(name.name);
    const cfm = cryptFilter?.get("CFM");
    if (!cfm || cfm.name === "None") {
      return function () {
        return new NullCipher();
      };
    }
    if (cfm.name === "V2") {
      return function () {
        return new ARCFourCipher(self.#buildObjectKey(num, gen, key, false));
      };
    }
    if (cfm.name === "AESV2") {
      return function () {
        return new AES128Cipher(self.#buildObjectKey(num, gen, key, true));
      };
    }
    if (cfm.name === "AESV3") {
      return function () {
        return new AES256Cipher(key);
      };
    }
    throw new _util.FormatError("Unknown crypto method");
  }
  constructor(dict, fileId, password) {
    const filter = dict.get("Filter");
    if (!(0, _primitives.isName)(filter, "Standard")) {
      throw new _util.FormatError("unknown encryption method");
    }
    this.filterName = filter.name;
    this.dict = dict;
    const algorithm = dict.get("V");
    if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) {
      throw new _util.FormatError("unsupported encryption algorithm");
    }
    this.algorithm = algorithm;
    let keyLength = dict.get("Length");
    if (!keyLength) {
      if (algorithm <= 3) {
        keyLength = 40;
      } else {
        const cfDict = dict.get("CF");
        const streamCryptoName = dict.get("StmF");
        if (cfDict instanceof _primitives.Dict && streamCryptoName instanceof _primitives.Name) {
          cfDict.suppressEncryption = true;
          const handlerDict = cfDict.get(streamCryptoName.name);
          keyLength = handlerDict?.get("Length") || 128;
          if (keyLength < 40) {
            keyLength <<= 3;
          }
        }
      }
    }
    if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) {
      throw new _util.FormatError("invalid key length");
    }
    const ownerBytes = (0, _util.stringToBytes)(dict.get("O")),
      userBytes = (0, _util.stringToBytes)(dict.get("U"));
    const ownerPassword = ownerBytes.subarray(0, 32);
    const userPassword = userBytes.subarray(0, 32);
    const flags = dict.get("P");
    const revision = dict.get("R");
    const encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get("EncryptMetadata") !== false;
    this.encryptMetadata = encryptMetadata;
    const fileIdBytes = (0, _util.stringToBytes)(fileId);
    let passwordBytes;
    if (password) {
      if (revision === 6) {
        try {
          password = (0, _util.utf8StringToString)(password);
        } catch {
          (0, _util.warn)("CipherTransformFactory: Unable to convert UTF8 encoded password.");
        }
      }
      passwordBytes = (0, _util.stringToBytes)(password);
    }
    let encryptionKey;
    if (algorithm !== 5) {
      encryptionKey = this.#prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata);
    } else {
      const ownerValidationSalt = ownerBytes.subarray(32, 40);
      const ownerKeySalt = ownerBytes.subarray(40, 48);
      const uBytes = userBytes.subarray(0, 48);
      const userValidationSalt = userBytes.subarray(32, 40);
      const userKeySalt = userBytes.subarray(40, 48);
      const ownerEncryption = (0, _util.stringToBytes)(dict.get("OE"));
      const userEncryption = (0, _util.stringToBytes)(dict.get("UE"));
      const perms = (0, _util.stringToBytes)(dict.get("Perms"));
      encryptionKey = this.#createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms);
    }
    if (!encryptionKey && !password) {
      throw new _util.PasswordException("No password given", _util.PasswordResponses.NEED_PASSWORD);
    } else if (!encryptionKey && password) {
      const decodedPassword = this.#decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength);
      encryptionKey = this.#prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata);
    }
    if (!encryptionKey) {
      throw new _util.PasswordException("Incorrect Password", _util.PasswordResponses.INCORRECT_PASSWORD);
    }
    this.encryptionKey = encryptionKey;
    if (algorithm >= 4) {
      const cf = dict.get("CF");
      if (cf instanceof _primitives.Dict) {
        cf.suppressEncryption = true;
      }
      this.cf = cf;
      this.stmf = dict.get("StmF") || _primitives.Name.get("Identity");
      this.strf = dict.get("StrF") || _primitives.Name.get("Identity");
      this.eff = dict.get("EFF") || this.stmf;
    }
  }
  createCipherTransform(num, gen) {
    if (this.algorithm === 4 || this.algorithm === 5) {
      return new CipherTransform(this.#buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey), this.#buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey));
    }
    const key = this.#buildObjectKey(num, gen, this.encryptionKey, false);
    const cipherConstructor = function () {
      return new ARCFourCipher(key);
    };
    return new CipherTransform(cipherConstructor, cipherConstructor);
  }
}
exports.CipherTransformFactory = CipherTransformFactory;

/***/ }),
/* 75 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.DecryptStream = void 0;
var _decode_stream = __w_pdfjs_require__(18);
const chunkSize = 512;
class DecryptStream extends _decode_stream.DecodeStream {
  constructor(str, maybeLength, decrypt) {
    super(maybeLength);
    this.str = str;
    this.dict = str.dict;
    this.decrypt = decrypt;
    this.nextChunk = null;
    this.initialized = false;
  }
  readBlock() {
    let chunk;
    if (this.initialized) {
      chunk = this.nextChunk;
    } else {
      chunk = this.str.getBytes(chunkSize);
      this.initialized = true;
    }
    if (!chunk || chunk.length === 0) {
      this.eof = true;
      return;
    }
    this.nextChunk = this.str.getBytes(chunkSize);
    const hasMoreData = this.nextChunk?.length > 0;
    const decrypt = this.decrypt;
    chunk = decrypt(chunk, !hasMoreData);
    const bufferLength = this.bufferLength,
      newLength = bufferLength + chunk.length,
      buffer = this.ensureBuffer(newLength);
    buffer.set(chunk, bufferLength);
    this.bufferLength = newLength;
  }
}
exports.DecryptStream = DecryptStream;

/***/ }),
/* 76 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.ObjectLoader = void 0;
var _primitives = __w_pdfjs_require__(4);
var _base_stream = __w_pdfjs_require__(5);
var _core_utils = __w_pdfjs_require__(3);
var _util = __w_pdfjs_require__(2);
function mayHaveChildren(value) {
  return value instanceof _primitives.Ref || value instanceof _primitives.Dict || value instanceof _base_stream.BaseStream || Array.isArray(value);
}
function addChildren(node, nodesToVisit) {
  if (node instanceof _primitives.Dict) {
    node = node.getRawValues();
  } else if (node instanceof _base_stream.BaseStream) {
    node = node.dict.getRawValues();
  } else if (!Array.isArray(node)) {
    return;
  }
  for (const rawValue of node) {
    if (mayHaveChildren(rawValue)) {
      nodesToVisit.push(rawValue);
    }
  }
}
class ObjectLoader {
  constructor(dict, keys, xref) {
    this.dict = dict;
    this.keys = keys;
    this.xref = xref;
    this.refSet = null;
  }
  async load() {
    if (this.xref.stream.isDataLoaded) {
      return undefined;
    }
    const {
      keys,
      dict
    } = this;
    this.refSet = new _primitives.RefSet();
    const nodesToVisit = [];
    for (const key of keys) {
      const rawValue = dict.getRaw(key);
      if (rawValue !== undefined) {
        nodesToVisit.push(rawValue);
      }
    }
    return this._walk(nodesToVisit);
  }
  async _walk(nodesToVisit) {
    const nodesToRevisit = [];
    const pendingRequests = [];
    while (nodesToVisit.length) {
      let currentNode = nodesToVisit.pop();
      if (currentNode instanceof _primitives.Ref) {
        if (this.refSet.has(currentNode)) {
          continue;
        }
        try {
          this.refSet.put(currentNode);
          currentNode = this.xref.fetch(currentNode);
        } catch (ex) {
          if (!(ex instanceof _core_utils.MissingDataException)) {
            (0, _util.warn)(`ObjectLoader._walk - requesting all data: "${ex}".`);
            this.refSet = null;
            const {
              manager
            } = this.xref.stream;
            return manager.requestAllChunks();
          }
          nodesToRevisit.push(currentNode);
          pendingRequests.push({
            begin: ex.begin,
            end: ex.end
          });
        }
      }
      if (currentNode instanceof _base_stream.BaseStream) {
        const baseStreams = currentNode.getBaseStreams();
        if (baseStreams) {
          let foundMissingData = false;
          for (const stream of baseStreams) {
            if (stream.isDataLoaded) {
              continue;
            }
            foundMissingData = true;
            pendingRequests.push({
              begin: stream.start,
              end: stream.end
            });
          }
          if (foundMissingData) {
            nodesToRevisit.push(currentNode);
          }
        }
      }
      addChildren(currentNode, nodesToVisit);
    }
    if (pendingRequests.length) {
      await this.xref.stream.manager.requestRanges(pendingRequests);
      for (const node of nodesToRevisit) {
        if (node instanceof _primitives.Ref) {
          this.refSet.remove(node);
        }
      }
      return this._walk(nodesToRevisit);
    }
    this.refSet = null;
    return undefined;
  }
}
exports.ObjectLoader = ObjectLoader;

/***/ }),
/* 77 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.XFAFactory = void 0;
var _symbol_utils = __w_pdfjs_require__(78);
var _bind = __w_pdfjs_require__(79);
var _data = __w_pdfjs_require__(89);
var _fonts = __w_pdfjs_require__(85);
var _utils = __w_pdfjs_require__(84);
var _util = __w_pdfjs_require__(2);
var _parser = __w_pdfjs_require__(90);
var _xhtml = __w_pdfjs_require__(100);
class XFAFactory {
  constructor(data) {
    try {
      this.root = new _parser.XFAParser().parse(XFAFactory._createDocument(data));
      const binder = new _bind.Binder(this.root);
      this.form = binder.bind();
      this.dataHandler = new _data.DataHandler(this.root, binder.getData());
      this.form[_symbol_utils.$globalData].template = this.form;
    } catch (e) {
      (0, _util.warn)(`XFA - an error occurred during parsing and binding: ${e}`);
    }
  }
  isValid() {
    return this.root && this.form;
  }
  _createPagesHelper() {
    const iterator = this.form[_symbol_utils.$toPages]();
    return new Promise((resolve, reject) => {
      const nextIteration = () => {
        try {
          const value = iterator.next();
          if (value.done) {
            resolve(value.value);
          } else {
            setTimeout(nextIteration, 0);
          }
        } catch (e) {
          reject(e);
        }
      };
      setTimeout(nextIteration, 0);
    });
  }
  async _createPages() {
    try {
      this.pages = await this._createPagesHelper();
      this.dims = this.pages.children.map(c => {
        const {
          width,
          height
        } = c.attributes.style;
        return [0, 0, parseInt(width), parseInt(height)];
      });
    } catch (e) {
      (0, _util.warn)(`XFA - an error occurred during layout: ${e}`);
    }
  }
  getBoundingBox(pageIndex) {
    return this.dims[pageIndex];
  }
  async getNumPages() {
    if (!this.pages) {
      await this._createPages();
    }
    return this.dims.length;
  }
  setImages(images) {
    this.form[_symbol_utils.$globalData].images = images;
  }
  setFonts(fonts) {
    this.form[_symbol_utils.$globalData].fontFinder = new _fonts.FontFinder(fonts);
    const missingFonts = [];
    for (let typeface of this.form[_symbol_utils.$globalData].usedTypefaces) {
      typeface = (0, _utils.stripQuotes)(typeface);
      const font = this.form[_symbol_utils.$globalData].fontFinder.find(typeface);
      if (!font) {
        missingFonts.push(typeface);
      }
    }
    if (missingFonts.length > 0) {
      return missingFonts;
    }
    return null;
  }
  appendFonts(fonts, reallyMissingFonts) {
    this.form[_symbol_utils.$globalData].fontFinder.add(fonts, reallyMissingFonts);
  }
  async getPages() {
    if (!this.pages) {
      await this._createPages();
    }
    const pages = this.pages;
    this.pages = null;
    return pages;
  }
  serializeData(storage) {
    return this.dataHandler.serialize(storage);
  }
  static _createDocument(data) {
    if (!data["/xdp:xdp"]) {
      return data["xdp:xdp"];
    }
    return Object.values(data).join("");
  }
  static getRichTextAsHtml(rc) {
    if (!rc || typeof rc !== "string") {
      return null;
    }
    try {
      let root = new _parser.XFAParser(_xhtml.XhtmlNamespace, true).parse(rc);
      if (!["body", "xhtml"].includes(root[_symbol_utils.$nodeName])) {
        const newRoot = _xhtml.XhtmlNamespace.body({});
        newRoot[_symbol_utils.$appendChild](root);
        root = newRoot;
      }
      const result = root[_symbol_utils.$toHTML]();
      if (!result.success) {
        return null;
      }
      const {
        html
      } = result;
      const {
        attributes
      } = html;
      if (attributes) {
        if (attributes.class) {
          attributes.class = attributes.class.filter(attr => !attr.startsWith("xfa"));
        }
        attributes.dir = "auto";
      }
      return {
        html,
        str: root[_symbol_utils.$text]()
      };
    } catch (e) {
      (0, _util.warn)(`XFA - an error occurred during parsing of rich text: ${e}`);
    }
    return null;
  }
}
exports.XFAFactory = XFAFactory;

/***/ }),
/* 78 */
/***/ ((__unused_webpack_module, exports) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.$uid = exports.$toStyle = exports.$toString = exports.$toPages = exports.$toHTML = exports.$text = exports.$tabIndex = exports.$setValue = exports.$setSetAttributes = exports.$setId = exports.$searchNode = exports.$root = exports.$resolvePrototypes = exports.$removeChild = exports.$pushPara = exports.$pushGlyphs = exports.$popPara = exports.$onText = exports.$onChildCheck = exports.$onChild = exports.$nsAttributes = exports.$nodeName = exports.$namespaceId = exports.$lastAttribute = exports.$isUsable = exports.$isTransparent = exports.$isThereMoreWidth = exports.$isSplittable = exports.$isNsAgnostic = exports.$isDescendent = exports.$isDataValue = exports.$isCDATAXml = exports.$isBindable = exports.$insertAt = exports.$indexOf = exports.$ids = exports.$hasSettableValue = exports.$globalData = exports.$getTemplateRoot = exports.$getSubformParent = exports.$getRealChildrenByNameIt = exports.$getParent = exports.$getNextPage = exports.$getExtra = exports.$getDataValue = exports.$getContainedChildren = exports.$getChildrenByNameIt = exports.$getChildrenByName = exports.$getChildrenByClass = exports.$getChildren = exports.$getAvailableSpace = exports.$getAttributes = exports.$getAttributeIt = exports.$flushHTML = exports.$finalize = exports.$extra = exports.$dump = exports.$data = exports.$content = exports.$consumed = exports.$clone = exports.$cleanup = exports.$cleanPage = exports.$clean = exports.$childrenToHTML = exports.$appendChild = exports.$addHTML = exports.$acceptWhitespace = void 0;
const $acceptWhitespace = Symbol();
exports.$acceptWhitespace = $acceptWhitespace;
const $addHTML = Symbol();
exports.$addHTML = $addHTML;
const $appendChild = Symbol();
exports.$appendChild = $appendChild;
const $childrenToHTML = Symbol();
exports.$childrenToHTML = $childrenToHTML;
const $clean = Symbol();
exports.$clean = $clean;
const $cleanPage = Symbol();
exports.$cleanPage = $cleanPage;
const $cleanup = Symbol();
exports.$cleanup = $cleanup;
const $clone = Symbol();
exports.$clone = $clone;
const $consumed = Symbol();
exports.$consumed = $consumed;
const $content = Symbol("content");
exports.$content = $content;
const $data = Symbol("data");
exports.$data = $data;
const $dump = Symbol();
exports.$dump = $dump;
const $extra = Symbol("extra");
exports.$extra = $extra;
const $finalize = Symbol();
exports.$finalize = $finalize;
const $flushHTML = Symbol();
exports.$flushHTML = $flushHTML;
const $getAttributeIt = Symbol();
exports.$getAttributeIt = $getAttributeIt;
const $getAttributes = Symbol();
exports.$getAttributes = $getAttributes;
const $getAvailableSpace = Symbol();
exports.$getAvailableSpace = $getAvailableSpace;
const $getChildrenByClass = Symbol();
exports.$getChildrenByClass = $getChildrenByClass;
const $getChildrenByName = Symbol();
exports.$getChildrenByName = $getChildrenByName;
const $getChildrenByNameIt = Symbol();
exports.$getChildrenByNameIt = $getChildrenByNameIt;
const $getDataValue = Symbol();
exports.$getDataValue = $getDataValue;
const $getExtra = Symbol();
exports.$getExtra = $getExtra;
const $getRealChildrenByNameIt = Symbol();
exports.$getRealChildrenByNameIt = $getRealChildrenByNameIt;
const $getChildren = Symbol();
exports.$getChildren = $getChildren;
const $getContainedChildren = Symbol();
exports.$getContainedChildren = $getContainedChildren;
const $getNextPage = Symbol();
exports.$getNextPage = $getNextPage;
const $getSubformParent = Symbol();
exports.$getSubformParent = $getSubformParent;
const $getParent = Symbol();
exports.$getParent = $getParent;
const $getTemplateRoot = Symbol();
exports.$getTemplateRoot = $getTemplateRoot;
const $globalData = Symbol();
exports.$globalData = $globalData;
const $hasSettableValue = Symbol();
exports.$hasSettableValue = $hasSettableValue;
const $ids = Symbol();
exports.$ids = $ids;
const $indexOf = Symbol();
exports.$indexOf = $indexOf;
const $insertAt = Symbol();
exports.$insertAt = $insertAt;
const $isCDATAXml = Symbol();
exports.$isCDATAXml = $isCDATAXml;
const $isBindable = Symbol();
exports.$isBindable = $isBindable;
const $isDataValue = Symbol();
exports.$isDataValue = $isDataValue;
const $isDescendent = Symbol();
exports.$isDescendent = $isDescendent;
const $isNsAgnostic = Symbol();
exports.$isNsAgnostic = $isNsAgnostic;
const $isSplittable = Symbol();
exports.$isSplittable = $isSplittable;
const $isThereMoreWidth = Symbol();
exports.$isThereMoreWidth = $isThereMoreWidth;
const $isTransparent = Symbol();
exports.$isTransparent = $isTransparent;
const $isUsable = Symbol();
exports.$isUsable = $isUsable;
const $lastAttribute = Symbol();
exports.$lastAttribute = $lastAttribute;
const $namespaceId = Symbol("namespaceId");
exports.$namespaceId = $namespaceId;
const $nodeName = Symbol("nodeName");
exports.$nodeName = $nodeName;
const $nsAttributes = Symbol();
exports.$nsAttributes = $nsAttributes;
const $onChild = Symbol();
exports.$onChild = $onChild;
const $onChildCheck = Symbol();
exports.$onChildCheck = $onChildCheck;
const $onText = Symbol();
exports.$onText = $onText;
const $pushGlyphs = Symbol();
exports.$pushGlyphs = $pushGlyphs;
const $popPara = Symbol();
exports.$popPara = $popPara;
const $pushPara = Symbol();
exports.$pushPara = $pushPara;
const $removeChild = Symbol();
exports.$removeChild = $removeChild;
const $root = Symbol("root");
exports.$root = $root;
const $resolvePrototypes = Symbol();
exports.$resolvePrototypes = $resolvePrototypes;
const $searchNode = Symbol();
exports.$searchNode = $searchNode;
const $setId = Symbol();
exports.$setId = $setId;
const $setSetAttributes = Symbol();
exports.$setSetAttributes = $setSetAttributes;
const $setValue = Symbol();
exports.$setValue = $setValue;
const $tabIndex = Symbol();
exports.$tabIndex = $tabIndex;
const $text = Symbol();
exports.$text = $text;
const $toPages = Symbol();
exports.$toPages = $toPages;
const $toHTML = Symbol();
exports.$toHTML = $toHTML;
const $toString = Symbol();
exports.$toString = $toString;
const $toStyle = Symbol();
exports.$toStyle = $toStyle;
const $uid = Symbol("uid");
exports.$uid = $uid;

/***/ }),
/* 79 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.Binder = void 0;
var _symbol_utils = __w_pdfjs_require__(78);
var _template = __w_pdfjs_require__(80);
var _som = __w_pdfjs_require__(88);
var _xfa_object = __w_pdfjs_require__(87);
var _namespaces = __w_pdfjs_require__(81);
var _util = __w_pdfjs_require__(2);
const NS_DATASETS = _namespaces.NamespaceIds.datasets.id;
function createText(content) {
  const node = new _template.Text({});
  node[_symbol_utils.$content] = content;
  return node;
}
class Binder {
  constructor(root) {
    this.root = root;
    this.datasets = root.datasets;
    this.data = root.datasets?.data || new _xfa_object.XmlObject(_namespaces.NamespaceIds.datasets.id, "data");
    this.emptyMerge = this.data[_symbol_utils.$getChildren]().length === 0;
    this.root.form = this.form = root.template[_symbol_utils.$clone]();
  }
  _isConsumeData() {
    return !this.emptyMerge && this._mergeMode;
  }
  _isMatchTemplate() {
    return !this._isConsumeData();
  }
  bind() {
    this._bindElement(this.form, this.data);
    return this.form;
  }
  getData() {
    return this.data;
  }
  _bindValue(formNode, data, picture) {
    formNode[_symbol_utils.$data] = data;
    if (formNode[_symbol_utils.$hasSettableValue]()) {
      if (data[_symbol_utils.$isDataValue]()) {
        const value = data[_symbol_utils.$getDataValue]();
        formNode[_symbol_utils.$setValue](createText(value));
      } else if (formNode instanceof _template.Field && formNode.ui?.choiceList?.open === "multiSelect") {
        const value = data[_symbol_utils.$getChildren]().map(child => child[_symbol_utils.$content].trim()).join("\n");
        formNode[_symbol_utils.$setValue](createText(value));
      } else if (this._isConsumeData()) {
        (0, _util.warn)(`XFA - Nodes haven't the same type.`);
      }
    } else if (!data[_symbol_utils.$isDataValue]() || this._isMatchTemplate()) {
      this._bindElement(formNode, data);
    } else {
      (0, _util.warn)(`XFA - Nodes haven't the same type.`);
    }
  }
  _findDataByNameToConsume(name, isValue, dataNode, global) {
    if (!name) {
      return null;
    }
    let generator, match;
    for (let i = 0; i < 3; i++) {
      generator = dataNode[_symbol_utils.$getRealChildrenByNameIt](name, false, true);
      while (true) {
        match = generator.next().value;
        if (!match) {
          break;
        }
        if (isValue === match[_symbol_utils.$isDataValue]()) {
          return match;
        }
      }
      if (dataNode[_symbol_utils.$namespaceId] === _namespaces.NamespaceIds.datasets.id && dataNode[_symbol_utils.$nodeName] === "data") {
        break;
      }
      dataNode = dataNode[_symbol_utils.$getParent]();
    }
    if (!global) {
      return null;
    }
    generator = this.data[_symbol_utils.$getRealChildrenByNameIt](name, true, false);
    match = generator.next().value;
    if (match) {
      return match;
    }
    generator = this.data[_symbol_utils.$getAttributeIt](name, true);
    match = generator.next().value;
    if (match?.[_symbol_utils.$isDataValue]()) {
      return match;
    }
    return null;
  }
  _setProperties(formNode, dataNode) {
    if (!formNode.hasOwnProperty("setProperty")) {
      return;
    }
    for (const {
      ref,
      target,
      connection
    } of formNode.setProperty.children) {
      if (connection) {
        continue;
      }
      if (!ref) {
        continue;
      }
      const nodes = (0, _som.searchNode)(this.root, dataNode, ref, false, false);
      if (!nodes) {
        (0, _util.warn)(`XFA - Invalid reference: ${ref}.`);
        continue;
      }
      const [node] = nodes;
      if (!node[_symbol_utils.$isDescendent](this.data)) {
        (0, _util.warn)(`XFA - Invalid node: must be a data node.`);
        continue;
      }
      const targetNodes = (0, _som.searchNode)(this.root, formNode, target, false, false);
      if (!targetNodes) {
        (0, _util.warn)(`XFA - Invalid target: ${target}.`);
        continue;
      }
      const [targetNode] = targetNodes;
      if (!targetNode[_symbol_utils.$isDescendent](formNode)) {
        (0, _util.warn)(`XFA - Invalid target: must be a property or subproperty.`);
        continue;
      }
      const targetParent = targetNode[_symbol_utils.$getParent]();
      if (targetNode instanceof _template.SetProperty || targetParent instanceof _template.SetProperty) {
        (0, _util.warn)(`XFA - Invalid target: cannot be a setProperty or one of its properties.`);
        continue;
      }
      if (targetNode instanceof _template.BindItems || targetParent instanceof _template.BindItems) {
        (0, _util.warn)(`XFA - Invalid target: cannot be a bindItems or one of its properties.`);
        continue;
      }
      const content = node[_symbol_utils.$text]();
      const name = targetNode[_symbol_utils.$nodeName];
      if (targetNode instanceof _xfa_object.XFAAttribute) {
        const attrs = Object.create(null);
        attrs[name] = content;
        const obj = Reflect.construct(Object.getPrototypeOf(targetParent).constructor, [attrs]);
        targetParent[name] = obj[name];
        continue;
      }
      if (!targetNode.hasOwnProperty(_symbol_utils.$content)) {
        (0, _util.warn)(`XFA - Invalid node to use in setProperty`);
        continue;
      }
      targetNode[_symbol_utils.$data] = node;
      targetNode[_symbol_utils.$content] = content;
      targetNode[_symbol_utils.$finalize]();
    }
  }
  _bindItems(formNode, dataNode) {
    if (!formNode.hasOwnProperty("items") || !formNode.hasOwnProperty("bindItems") || formNode.bindItems.isEmpty()) {
      return;
    }
    for (const item of formNode.items.children) {
      formNode[_symbol_utils.$removeChild](item);
    }
    formNode.items.clear();
    const labels = new _template.Items({});
    const values = new _template.Items({});
    formNode[_symbol_utils.$appendChild](labels);
    formNode.items.push(labels);
    formNode[_symbol_utils.$appendChild](values);
    formNode.items.push(values);
    for (const {
      ref,
      labelRef,
      valueRef,
      connection
    } of formNode.bindItems.children) {
      if (connection) {
        continue;
      }
      if (!ref) {
        continue;
      }
      const nodes = (0, _som.searchNode)(this.root, dataNode, ref, false, false);
      if (!nodes) {
        (0, _util.warn)(`XFA - Invalid reference: ${ref}.`);
        continue;
      }
      for (const node of nodes) {
        if (!node[_symbol_utils.$isDescendent](this.datasets)) {
          (0, _util.warn)(`XFA - Invalid ref (${ref}): must be a datasets child.`);
          continue;
        }
        const labelNodes = (0, _som.searchNode)(this.root, node, labelRef, true, false);
        if (!labelNodes) {
          (0, _util.warn)(`XFA - Invalid label: ${labelRef}.`);
          continue;
        }
        const [labelNode] = labelNodes;
        if (!labelNode[_symbol_utils.$isDescendent](this.datasets)) {
          (0, _util.warn)(`XFA - Invalid label: must be a datasets child.`);
          continue;
        }
        const valueNodes = (0, _som.searchNode)(this.root, node, valueRef, true, false);
        if (!valueNodes) {
          (0, _util.warn)(`XFA - Invalid value: ${valueRef}.`);
          continue;
        }
        const [valueNode] = valueNodes;
        if (!valueNode[_symbol_utils.$isDescendent](this.datasets)) {
          (0, _util.warn)(`XFA - Invalid value: must be a datasets child.`);
          continue;
        }
        const label = createText(labelNode[_symbol_utils.$text]());
        const value = createText(valueNode[_symbol_utils.$text]());
        labels[_symbol_utils.$appendChild](label);
        labels.text.push(label);
        values[_symbol_utils.$appendChild](value);
        values.text.push(value);
      }
    }
  }
  _bindOccurrences(formNode, matches, picture) {
    let baseClone;
    if (matches.length > 1) {
      baseClone = formNode[_symbol_utils.$clone]();
      baseClone[_symbol_utils.$removeChild](baseClone.occur);
      baseClone.occur = null;
    }
    this._bindValue(formNode, matches[0], picture);
    this._setProperties(formNode, matches[0]);
    this._bindItems(formNode, matches[0]);
    if (matches.length === 1) {
      return;
    }
    const parent = formNode[_symbol_utils.$getParent]();
    const name = formNode[_symbol_utils.$nodeName];
    const pos = parent[_symbol_utils.$indexOf](formNode);
    for (let i = 1, ii = matches.length; i < ii; i++) {
      const match = matches[i];
      const clone = baseClone[_symbol_utils.$clone]();
      parent[name].push(clone);
      parent[_symbol_utils.$insertAt](pos + i, clone);
      this._bindValue(clone, match, picture);
      this._setProperties(clone, match);
      this._bindItems(clone, match);
    }
  }
  _createOccurrences(formNode) {
    if (!this.emptyMerge) {
      return;
    }
    const {
      occur
    } = formNode;
    if (!occur || occur.initial <= 1) {
      return;
    }
    const parent = formNode[_symbol_utils.$getParent]();
    const name = formNode[_symbol_utils.$nodeName];
    if (!(parent[name] instanceof _xfa_object.XFAObjectArray)) {
      return;
    }
    let currentNumber;
    if (formNode.name) {
      currentNumber = parent[name].children.filter(e => e.name === formNode.name).length;
    } else {
      currentNumber = parent[name].children.length;
    }
    const pos = parent[_symbol_utils.$indexOf](formNode) + 1;
    const ii = occur.initial - currentNumber;
    if (ii) {
      const nodeClone = formNode[_symbol_utils.$clone]();
      nodeClone[_symbol_utils.$removeChild](nodeClone.occur);
      nodeClone.occur = null;
      parent[name].push(nodeClone);
      parent[_symbol_utils.$insertAt](pos, nodeClone);
      for (let i = 1; i < ii; i++) {
        const clone = nodeClone[_symbol_utils.$clone]();
        parent[name].push(clone);
        parent[_symbol_utils.$insertAt](pos + i, clone);
      }
    }
  }
  _getOccurInfo(formNode) {
    const {
      name,
      occur
    } = formNode;
    if (!occur || !name) {
      return [1, 1];
    }
    const max = occur.max === -1 ? Infinity : occur.max;
    return [occur.min, max];
  }
  _setAndBind(formNode, dataNode) {
    this._setProperties(formNode, dataNode);
    this._bindItems(formNode, dataNode);
    this._bindElement(formNode, dataNode);
  }
  _bindElement(formNode, dataNode) {
    const uselessNodes = [];
    this._createOccurrences(formNode);
    for (const child of formNode[_symbol_utils.$getChildren]()) {
      if (child[_symbol_utils.$data]) {
        continue;
      }
      if (this._mergeMode === undefined && child[_symbol_utils.$nodeName] === "subform") {
        this._mergeMode = child.mergeMode === "consumeData";
        const dataChildren = dataNode[_symbol_utils.$getChildren]();
        if (dataChildren.length > 0) {
          this._bindOccurrences(child, [dataChildren[0]], null);
        } else if (this.emptyMerge) {
          const nsId = dataNode[_symbol_utils.$namespaceId] === NS_DATASETS ? -1 : dataNode[_symbol_utils.$namespaceId];
          const dataChild = child[_symbol_utils.$data] = new _xfa_object.XmlObject(nsId, child.name || "root");
          dataNode[_symbol_utils.$appendChild](dataChild);
          this._bindElement(child, dataChild);
        }
        continue;
      }
      if (!child[_symbol_utils.$isBindable]()) {
        continue;
      }
      let global = false;
      let picture = null;
      let ref = null;
      let match = null;
      if (child.bind) {
        switch (child.bind.match) {
          case "none":
            this._setAndBind(child, dataNode);
            continue;
          case "global":
            global = true;
            break;
          case "dataRef":
            if (!child.bind.ref) {
              (0, _util.warn)(`XFA - ref is empty in node ${child[_symbol_utils.$nodeName]}.`);
              this._setAndBind(child, dataNode);
              continue;
            }
            ref = child.bind.ref;
            break;
          default:
            break;
        }
        if (child.bind.picture) {
          picture = child.bind.picture[_symbol_utils.$content];
        }
      }
      const [min, max] = this._getOccurInfo(child);
      if (ref) {
        match = (0, _som.searchNode)(this.root, dataNode, ref, true, false);
        if (match === null) {
          match = (0, _som.createDataNode)(this.data, dataNode, ref);
          if (!match) {
            continue;
          }
          if (this._isConsumeData()) {
            match[_symbol_utils.$consumed] = true;
          }
          this._setAndBind(child, match);
          continue;
        } else {
          if (this._isConsumeData()) {
            match = match.filter(node => !node[_symbol_utils.$consumed]);
          }
          if (match.length > max) {
            match = match.slice(0, max);
          } else if (match.length === 0) {
            match = null;
          }
          if (match && this._isConsumeData()) {
            match.forEach(node => {
              node[_symbol_utils.$consumed] = true;
            });
          }
        }
      } else {
        if (!child.name) {
          this._setAndBind(child, dataNode);
          continue;
        }
        if (this._isConsumeData()) {
          const matches = [];
          while (matches.length < max) {
            const found = this._findDataByNameToConsume(child.name, child[_symbol_utils.$hasSettableValue](), dataNode, global);
            if (!found) {
              break;
            }
            found[_symbol_utils.$consumed] = true;
            matches.push(found);
          }
          match = matches.length > 0 ? matches : null;
        } else {
          match = dataNode[_symbol_utils.$getRealChildrenByNameIt](child.name, false, this.emptyMerge).next().value;
          if (!match) {
            if (min === 0) {
              uselessNodes.push(child);
              continue;
            }
            const nsId = dataNode[_symbol_utils.$namespaceId] === NS_DATASETS ? -1 : dataNode[_symbol_utils.$namespaceId];
            match = child[_symbol_utils.$data] = new _xfa_object.XmlObject(nsId, child.name);
            if (this.emptyMerge) {
              match[_symbol_utils.$consumed] = true;
            }
            dataNode[_symbol_utils.$appendChild](match);
            this._setAndBind(child, match);
            continue;
          }
          if (this.emptyMerge) {
            match[_symbol_utils.$consumed] = true;
          }
          match = [match];
        }
      }
      if (match) {
        this._bindOccurrences(child, match, picture);
      } else if (min > 0) {
        this._setAndBind(child, dataNode);
      } else {
        uselessNodes.push(child);
      }
    }
    uselessNodes.forEach(node => node[_symbol_utils.$getParent]()[_symbol_utils.$removeChild](node));
  }
}
exports.Binder = Binder;

/***/ }),
/* 80 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.Value = exports.Text = exports.TemplateNamespace = exports.Template = exports.SetProperty = exports.Items = exports.Field = exports.BindItems = void 0;
var _symbol_utils = __w_pdfjs_require__(78);
var _namespaces = __w_pdfjs_require__(81);
var _layout = __w_pdfjs_require__(82);
var _html_utils = __w_pdfjs_require__(83);
var _xfa_object = __w_pdfjs_require__(87);
var _utils = __w_pdfjs_require__(84);
var _util = __w_pdfjs_require__(2);
var _fonts = __w_pdfjs_require__(85);
var _core_utils = __w_pdfjs_require__(3);
var _som = __w_pdfjs_require__(88);
const TEMPLATE_NS_ID = _namespaces.NamespaceIds.template.id;
const SVG_NS = "http://www.w3.org/2000/svg";
const MAX_ATTEMPTS_FOR_LRTB_LAYOUT = 2;
const MAX_EMPTY_PAGES = 3;
const DEFAULT_TAB_INDEX = 5000;
const HEADING_PATTERN = /^H(\d+)$/;
const MIMES = new Set(["image/gif", "image/jpeg", "image/jpg", "image/pjpeg", "image/png", "image/apng", "image/x-png", "image/bmp", "image/x-ms-bmp", "image/tiff", "image/tif", "application/octet-stream"]);
const IMAGES_HEADERS = [[[0x42, 0x4d], "image/bmp"], [[0xff, 0xd8, 0xff], "image/jpeg"], [[0x49, 0x49, 0x2a, 0x00], "image/tiff"], [[0x4d, 0x4d, 0x00, 0x2a], "image/tiff"], [[0x47, 0x49, 0x46, 0x38, 0x39, 0x61], "image/gif"], [[0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a], "image/png"]];
function getBorderDims(node) {
  if (!node || !node.border) {
    return {
      w: 0,
      h: 0
    };
  }
  const borderExtra = node.border[_symbol_utils.$getExtra]();
  if (!borderExtra) {
    return {
      w: 0,
      h: 0
    };
  }
  return {
    w: borderExtra.widths[0] + borderExtra.widths[2] + borderExtra.insets[0] + borderExtra.insets[2],
    h: borderExtra.widths[1] + borderExtra.widths[3] + borderExtra.insets[1] + borderExtra.insets[3]
  };
}
function hasMargin(node) {
  return node.margin && (node.margin.topInset || node.margin.rightInset || node.margin.bottomInset || node.margin.leftInset);
}
function _setValue(templateNode, value) {
  if (!templateNode.value) {
    const nodeValue = new Value({});
    templateNode[_symbol_utils.$appendChild](nodeValue);
    templateNode.value = nodeValue;
  }
  templateNode.value[_symbol_utils.$setValue](value);
}
function* getContainedChildren(node) {
  for (const child of node[_symbol_utils.$getChildren]()) {
    if (child instanceof SubformSet) {
      yield* child[_symbol_utils.$getContainedChildren]();
      continue;
    }
    yield child;
  }
}
function isRequired(node) {
  return node.validate?.nullTest === "error";
}
function setTabIndex(node) {
  while (node) {
    if (!node.traversal) {
      node[_symbol_utils.$tabIndex] = node[_symbol_utils.$getParent]()[_symbol_utils.$tabIndex];
      return;
    }
    if (node[_symbol_utils.$tabIndex]) {
      return;
    }
    let next = null;
    for (const child of node.traversal[_symbol_utils.$getChildren]()) {
      if (child.operation === "next") {
        next = child;
        break;
      }
    }
    if (!next || !next.ref) {
      node[_symbol_utils.$tabIndex] = node[_symbol_utils.$getParent]()[_symbol_utils.$tabIndex];
      return;
    }
    const root = node[_symbol_utils.$getTemplateRoot]();
    node[_symbol_utils.$tabIndex] = ++root[_symbol_utils.$tabIndex];
    const ref = root[_symbol_utils.$searchNode](next.ref, node);
    if (!ref) {
      return;
    }
    node = ref[0];
  }
}
function applyAssist(obj, attributes) {
  const assist = obj.assist;
  if (assist) {
    const assistTitle = assist[_symbol_utils.$toHTML]();
    if (assistTitle) {
      attributes.title = assistTitle;
    }
    const role = assist.role;
    const match = role.match(HEADING_PATTERN);
    if (match) {
      const ariaRole = "heading";
      const ariaLevel = match[1];
      attributes.role = ariaRole;
      attributes["aria-level"] = ariaLevel;
    }
  }
  if (obj.layout === "table") {
    attributes.role = "table";
  } else if (obj.layout === "row") {
    attributes.role = "row";
  } else {
    const parent = obj[_symbol_utils.$getParent]();
    if (parent.layout === "row") {
      attributes.role = parent.assist?.role === "TH" ? "columnheader" : "cell";
    }
  }
}
function ariaLabel(obj) {
  if (!obj.assist) {
    return null;
  }
  const assist = obj.assist;
  if (assist.speak && assist.speak[_symbol_utils.$content] !== "") {
    return assist.speak[_symbol_utils.$content];
  }
  if (assist.toolTip) {
    return assist.toolTip[_symbol_utils.$content];
  }
  return null;
}
function valueToHtml(value) {
  return _utils.HTMLResult.success({
    name: "div",
    attributes: {
      class: ["xfaRich"],
      style: Object.create(null)
    },
    children: [{
      name: "span",
      attributes: {
        style: Object.create(null)
      },
      value
    }]
  });
}
function setFirstUnsplittable(node) {
  const root = node[_symbol_utils.$getTemplateRoot]();
  if (root[_symbol_utils.$extra].firstUnsplittable === null) {
    root[_symbol_utils.$extra].firstUnsplittable = node;
    root[_symbol_utils.$extra].noLayoutFailure = true;
  }
}
function unsetFirstUnsplittable(node) {
  const root = node[_symbol_utils.$getTemplateRoot]();
  if (root[_symbol_utils.$extra].firstUnsplittable === node) {
    root[_symbol_utils.$extra].noLayoutFailure = false;
  }
}
function handleBreak(node) {
  if (node[_symbol_utils.$extra]) {
    return false;
  }
  node[_symbol_utils.$extra] = Object.create(null);
  if (node.targetType === "auto") {
    return false;
  }
  const root = node[_symbol_utils.$getTemplateRoot]();
  let target = null;
  if (node.target) {
    target = root[_symbol_utils.$searchNode](node.target, node[_symbol_utils.$getParent]());
    if (!target) {
      return false;
    }
    target = target[0];
  }
  const {
    currentPageArea,
    currentContentArea
  } = root[_symbol_utils.$extra];
  if (node.targetType === "pageArea") {
    if (!(target instanceof PageArea)) {
      target = null;
    }
    if (node.startNew) {
      node[_symbol_utils.$extra].target = target || currentPageArea;
      return true;
    } else if (target && target !== currentPageArea) {
      node[_symbol_utils.$extra].target = target;
      return true;
    }
    return false;
  }
  if (!(target instanceof ContentArea)) {
    target = null;
  }
  const pageArea = target && target[_symbol_utils.$getParent]();
  let index;
  let nextPageArea = pageArea;
  if (node.startNew) {
    if (target) {
      const contentAreas = pageArea.contentArea.children;
      const indexForCurrent = contentAreas.indexOf(currentContentArea);
      const indexForTarget = contentAreas.indexOf(target);
      if (indexForCurrent !== -1 && indexForCurrent < indexForTarget) {
        nextPageArea = null;
      }
      index = indexForTarget - 1;
    } else {
      index = currentPageArea.contentArea.children.indexOf(currentContentArea);
    }
  } else if (target && target !== currentContentArea) {
    const contentAreas = pageArea.contentArea.children;
    index = contentAreas.indexOf(target) - 1;
    nextPageArea = pageArea === currentPageArea ? null : pageArea;
  } else {
    return false;
  }
  node[_symbol_utils.$extra].target = nextPageArea;
  node[_symbol_utils.$extra].index = index;
  return true;
}
function handleOverflow(node, extraNode, space) {
  const root = node[_symbol_utils.$getTemplateRoot]();
  const saved = root[_symbol_utils.$extra].noLayoutFailure;
  const savedMethod = extraNode[_symbol_utils.$getSubformParent];
  extraNode[_symbol_utils.$getSubformParent] = () => node;
  root[_symbol_utils.$extra].noLayoutFailure = true;
  const res = extraNode[_symbol_utils.$toHTML](space);
  node[_symbol_utils.$addHTML](res.html, res.bbox);
  root[_symbol_utils.$extra].noLayoutFailure = saved;
  extraNode[_symbol_utils.$getSubformParent] = savedMethod;
}
class AppearanceFilter extends _xfa_object.StringObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "appearanceFilter");
    this.id = attributes.id || "";
    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class Arc extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "arc", true);
    this.circular = (0, _utils.getInteger)({
      data: attributes.circular,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]);
    this.id = attributes.id || "";
    this.startAngle = (0, _utils.getFloat)({
      data: attributes.startAngle,
      defaultValue: 0,
      validate: x => true
    });
    this.sweepAngle = (0, _utils.getFloat)({
      data: attributes.sweepAngle,
      defaultValue: 360,
      validate: x => true
    });
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.edge = null;
    this.fill = null;
  }
  [_symbol_utils.$toHTML]() {
    const edge = this.edge || new Edge({});
    const edgeStyle = edge[_symbol_utils.$toStyle]();
    const style = Object.create(null);
    if (this.fill?.presence === "visible") {
      Object.assign(style, this.fill[_symbol_utils.$toStyle]());
    } else {
      style.fill = "transparent";
    }
    style.strokeWidth = (0, _html_utils.measureToString)(edge.presence === "visible" ? edge.thickness : 0);
    style.stroke = edgeStyle.color;
    let arc;
    const attributes = {
      xmlns: SVG_NS,
      style: {
        width: "100%",
        height: "100%",
        overflow: "visible"
      }
    };
    if (this.sweepAngle === 360) {
      arc = {
        name: "ellipse",
        attributes: {
          xmlns: SVG_NS,
          cx: "50%",
          cy: "50%",
          rx: "50%",
          ry: "50%",
          style
        }
      };
    } else {
      const startAngle = this.startAngle * Math.PI / 180;
      const sweepAngle = this.sweepAngle * Math.PI / 180;
      const largeArc = this.sweepAngle > 180 ? 1 : 0;
      const [x1, y1, x2, y2] = [50 * (1 + Math.cos(startAngle)), 50 * (1 - Math.sin(startAngle)), 50 * (1 + Math.cos(startAngle + sweepAngle)), 50 * (1 - Math.sin(startAngle + sweepAngle))];
      arc = {
        name: "path",
        attributes: {
          xmlns: SVG_NS,
          d: `M ${x1} ${y1} A 50 50 0 ${largeArc} 0 ${x2} ${y2}`,
          vectorEffect: "non-scaling-stroke",
          style
        }
      };
      Object.assign(attributes, {
        viewBox: "0 0 100 100",
        preserveAspectRatio: "none"
      });
    }
    const svg = {
      name: "svg",
      children: [arc],
      attributes
    };
    const parent = this[_symbol_utils.$getParent]()[_symbol_utils.$getParent]();
    if (hasMargin(parent)) {
      return _utils.HTMLResult.success({
        name: "div",
        attributes: {
          style: {
            display: "inline",
            width: "100%",
            height: "100%"
          }
        },
        children: [svg]
      });
    }
    svg.attributes.style.position = "absolute";
    return _utils.HTMLResult.success(svg);
  }
}
class Area extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "area", true);
    this.colSpan = (0, _utils.getInteger)({
      data: attributes.colSpan,
      defaultValue: 1,
      validate: n => n >= 1 || n === -1
    });
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.x = (0, _utils.getMeasurement)(attributes.x, "0pt");
    this.y = (0, _utils.getMeasurement)(attributes.y, "0pt");
    this.desc = null;
    this.extras = null;
    this.area = new _xfa_object.XFAObjectArray();
    this.draw = new _xfa_object.XFAObjectArray();
    this.exObject = new _xfa_object.XFAObjectArray();
    this.exclGroup = new _xfa_object.XFAObjectArray();
    this.field = new _xfa_object.XFAObjectArray();
    this.subform = new _xfa_object.XFAObjectArray();
    this.subformSet = new _xfa_object.XFAObjectArray();
  }
  *[_symbol_utils.$getContainedChildren]() {
    yield* getContainedChildren(this);
  }
  [_symbol_utils.$isTransparent]() {
    return true;
  }
  [_symbol_utils.$isBindable]() {
    return true;
  }
  [_symbol_utils.$addHTML](html, bbox) {
    const [x, y, w, h] = bbox;
    this[_symbol_utils.$extra].width = Math.max(this[_symbol_utils.$extra].width, x + w);
    this[_symbol_utils.$extra].height = Math.max(this[_symbol_utils.$extra].height, y + h);
    this[_symbol_utils.$extra].children.push(html);
  }
  [_symbol_utils.$getAvailableSpace]() {
    return this[_symbol_utils.$extra].availableSpace;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    const style = (0, _html_utils.toStyle)(this, "position");
    const attributes = {
      style,
      id: this[_symbol_utils.$uid],
      class: ["xfaArea"]
    };
    if ((0, _html_utils.isPrintOnly)(this)) {
      attributes.class.push("xfaPrintOnly");
    }
    if (this.name) {
      attributes.xfaName = this.name;
    }
    const children = [];
    this[_symbol_utils.$extra] = {
      children,
      width: 0,
      height: 0,
      availableSpace
    };
    const result = this[_symbol_utils.$childrenToHTML]({
      filter: new Set(["area", "draw", "field", "exclGroup", "subform", "subformSet"]),
      include: true
    });
    if (!result.success) {
      if (result.isBreak()) {
        return result;
      }
      delete this[_symbol_utils.$extra];
      return _utils.HTMLResult.FAILURE;
    }
    style.width = (0, _html_utils.measureToString)(this[_symbol_utils.$extra].width);
    style.height = (0, _html_utils.measureToString)(this[_symbol_utils.$extra].height);
    const html = {
      name: "div",
      attributes,
      children
    };
    const bbox = [this.x, this.y, this[_symbol_utils.$extra].width, this[_symbol_utils.$extra].height];
    delete this[_symbol_utils.$extra];
    return _utils.HTMLResult.success(html, bbox);
  }
}
class Assist extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "assist", true);
    this.id = attributes.id || "";
    this.role = attributes.role || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.speak = null;
    this.toolTip = null;
  }
  [_symbol_utils.$toHTML]() {
    return this.toolTip?.[_symbol_utils.$content] || null;
  }
}
class Barcode extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "barcode", true);
    this.charEncoding = (0, _utils.getKeyword)({
      data: attributes.charEncoding ? attributes.charEncoding.toLowerCase() : "",
      defaultValue: "",
      validate: k => ["utf-8", "big-five", "fontspecific", "gbk", "gb-18030", "gb-2312", "ksc-5601", "none", "shift-jis", "ucs-2", "utf-16"].includes(k) || k.match(/iso-8859-\d{2}/)
    });
    this.checksum = (0, _utils.getStringOption)(attributes.checksum, ["none", "1mod10", "1mod10_1mod11", "2mod10", "auto"]);
    this.dataColumnCount = (0, _utils.getInteger)({
      data: attributes.dataColumnCount,
      defaultValue: -1,
      validate: x => x >= 0
    });
    this.dataLength = (0, _utils.getInteger)({
      data: attributes.dataLength,
      defaultValue: -1,
      validate: x => x >= 0
    });
    this.dataPrep = (0, _utils.getStringOption)(attributes.dataPrep, ["none", "flateCompress"]);
    this.dataRowCount = (0, _utils.getInteger)({
      data: attributes.dataRowCount,
      defaultValue: -1,
      validate: x => x >= 0
    });
    this.endChar = attributes.endChar || "";
    this.errorCorrectionLevel = (0, _utils.getInteger)({
      data: attributes.errorCorrectionLevel,
      defaultValue: -1,
      validate: x => x >= 0 && x <= 8
    });
    this.id = attributes.id || "";
    this.moduleHeight = (0, _utils.getMeasurement)(attributes.moduleHeight, "5mm");
    this.moduleWidth = (0, _utils.getMeasurement)(attributes.moduleWidth, "0.25mm");
    this.printCheckDigit = (0, _utils.getInteger)({
      data: attributes.printCheckDigit,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.rowColumnRatio = (0, _utils.getRatio)(attributes.rowColumnRatio);
    this.startChar = attributes.startChar || "";
    this.textLocation = (0, _utils.getStringOption)(attributes.textLocation, ["below", "above", "aboveEmbedded", "belowEmbedded", "none"]);
    this.truncate = (0, _utils.getInteger)({
      data: attributes.truncate,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.type = (0, _utils.getStringOption)(attributes.type ? attributes.type.toLowerCase() : "", ["aztec", "codabar", "code2of5industrial", "code2of5interleaved", "code2of5matrix", "code2of5standard", "code3of9", "code3of9extended", "code11", "code49", "code93", "code128", "code128a", "code128b", "code128c", "code128sscc", "datamatrix", "ean8", "ean8add2", "ean8add5", "ean13", "ean13add2", "ean13add5", "ean13pwcd", "fim", "logmars", "maxicode", "msi", "pdf417", "pdf417macro", "plessey", "postauscust2", "postauscust3", "postausreplypaid", "postausstandard", "postukrm4scc", "postusdpbc", "postusimb", "postusstandard", "postus5zip", "qrcode", "rfid", "rss14", "rss14expanded", "rss14limited", "rss14stacked", "rss14stackedomni", "rss14truncated", "telepen", "ucc128", "ucc128random", "ucc128sscc", "upca", "upcaadd2", "upcaadd5", "upcapwcd", "upce", "upceadd2", "upceadd5", "upcean2", "upcean5", "upsmaxicode"]);
    this.upsMode = (0, _utils.getStringOption)(attributes.upsMode, ["usCarrier", "internationalCarrier", "secureSymbol", "standardSymbol"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.wideNarrowRatio = (0, _utils.getRatio)(attributes.wideNarrowRatio);
    this.encrypt = null;
    this.extras = null;
  }
}
class Bind extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "bind", true);
    this.match = (0, _utils.getStringOption)(attributes.match, ["once", "dataRef", "global", "none"]);
    this.ref = attributes.ref || "";
    this.picture = null;
  }
}
class BindItems extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "bindItems");
    this.connection = attributes.connection || "";
    this.labelRef = attributes.labelRef || "";
    this.ref = attributes.ref || "";
    this.valueRef = attributes.valueRef || "";
  }
}
exports.BindItems = BindItems;
class Bookend extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "bookend");
    this.id = attributes.id || "";
    this.leader = attributes.leader || "";
    this.trailer = attributes.trailer || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class BooleanElement extends _xfa_object.Option01 {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "boolean");
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
  [_symbol_utils.$toHTML](availableSpace) {
    return valueToHtml(this[_symbol_utils.$content] === 1 ? "1" : "0");
  }
}
class Border extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "border", true);
    this.break = (0, _utils.getStringOption)(attributes.break, ["close", "open"]);
    this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]);
    this.id = attributes.id || "";
    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.corner = new _xfa_object.XFAObjectArray(4);
    this.edge = new _xfa_object.XFAObjectArray(4);
    this.extras = null;
    this.fill = null;
    this.margin = null;
  }
  [_symbol_utils.$getExtra]() {
    if (!this[_symbol_utils.$extra]) {
      const edges = this.edge.children.slice();
      if (edges.length < 4) {
        const defaultEdge = edges.at(-1) || new Edge({});
        for (let i = edges.length; i < 4; i++) {
          edges.push(defaultEdge);
        }
      }
      const widths = edges.map(edge => edge.thickness);
      const insets = [0, 0, 0, 0];
      if (this.margin) {
        insets[0] = this.margin.topInset;
        insets[1] = this.margin.rightInset;
        insets[2] = this.margin.bottomInset;
        insets[3] = this.margin.leftInset;
      }
      this[_symbol_utils.$extra] = {
        widths,
        insets,
        edges
      };
    }
    return this[_symbol_utils.$extra];
  }
  [_symbol_utils.$toStyle]() {
    const {
      edges
    } = this[_symbol_utils.$getExtra]();
    const edgeStyles = edges.map(node => {
      const style = node[_symbol_utils.$toStyle]();
      style.color ||= "#000000";
      return style;
    });
    const style = Object.create(null);
    if (this.margin) {
      Object.assign(style, this.margin[_symbol_utils.$toStyle]());
    }
    if (this.fill?.presence === "visible") {
      Object.assign(style, this.fill[_symbol_utils.$toStyle]());
    }
    if (this.corner.children.some(node => node.radius !== 0)) {
      const cornerStyles = this.corner.children.map(node => node[_symbol_utils.$toStyle]());
      if (cornerStyles.length === 2 || cornerStyles.length === 3) {
        const last = cornerStyles.at(-1);
        for (let i = cornerStyles.length; i < 4; i++) {
          cornerStyles.push(last);
        }
      }
      style.borderRadius = cornerStyles.map(s => s.radius).join(" ");
    }
    switch (this.presence) {
      case "invisible":
      case "hidden":
        style.borderStyle = "";
        break;
      case "inactive":
        style.borderStyle = "none";
        break;
      default:
        style.borderStyle = edgeStyles.map(s => s.style).join(" ");
        break;
    }
    style.borderWidth = edgeStyles.map(s => s.width).join(" ");
    style.borderColor = edgeStyles.map(s => s.color).join(" ");
    return style;
  }
}
class Break extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "break", true);
    this.after = (0, _utils.getStringOption)(attributes.after, ["auto", "contentArea", "pageArea", "pageEven", "pageOdd"]);
    this.afterTarget = attributes.afterTarget || "";
    this.before = (0, _utils.getStringOption)(attributes.before, ["auto", "contentArea", "pageArea", "pageEven", "pageOdd"]);
    this.beforeTarget = attributes.beforeTarget || "";
    this.bookendLeader = attributes.bookendLeader || "";
    this.bookendTrailer = attributes.bookendTrailer || "";
    this.id = attributes.id || "";
    this.overflowLeader = attributes.overflowLeader || "";
    this.overflowTarget = attributes.overflowTarget || "";
    this.overflowTrailer = attributes.overflowTrailer || "";
    this.startNew = (0, _utils.getInteger)({
      data: attributes.startNew,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.extras = null;
  }
}
class BreakAfter extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "breakAfter", true);
    this.id = attributes.id || "";
    this.leader = attributes.leader || "";
    this.startNew = (0, _utils.getInteger)({
      data: attributes.startNew,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.target = attributes.target || "";
    this.targetType = (0, _utils.getStringOption)(attributes.targetType, ["auto", "contentArea", "pageArea"]);
    this.trailer = attributes.trailer || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.script = null;
  }
}
class BreakBefore extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "breakBefore", true);
    this.id = attributes.id || "";
    this.leader = attributes.leader || "";
    this.startNew = (0, _utils.getInteger)({
      data: attributes.startNew,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.target = attributes.target || "";
    this.targetType = (0, _utils.getStringOption)(attributes.targetType, ["auto", "contentArea", "pageArea"]);
    this.trailer = attributes.trailer || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.script = null;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    this[_symbol_utils.$extra] = {};
    return _utils.HTMLResult.FAILURE;
  }
}
class Button extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "button", true);
    this.highlight = (0, _utils.getStringOption)(attributes.highlight, ["inverted", "none", "outline", "push"]);
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.extras = null;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    const parent = this[_symbol_utils.$getParent]();
    const grandpa = parent[_symbol_utils.$getParent]();
    const htmlButton = {
      name: "button",
      attributes: {
        id: this[_symbol_utils.$uid],
        class: ["xfaButton"],
        style: {}
      },
      children: []
    };
    for (const event of grandpa.event.children) {
      if (event.activity !== "click" || !event.script) {
        continue;
      }
      const jsURL = (0, _core_utils.recoverJsURL)(event.script[_symbol_utils.$content]);
      if (!jsURL) {
        continue;
      }
      const href = (0, _html_utils.fixURL)(jsURL.url);
      if (!href) {
        continue;
      }
      htmlButton.children.push({
        name: "a",
        attributes: {
          id: "link" + this[_symbol_utils.$uid],
          href,
          newWindow: jsURL.newWindow,
          class: ["xfaLink"],
          style: {}
        },
        children: []
      });
    }
    return _utils.HTMLResult.success(htmlButton);
  }
}
class Calculate extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "calculate", true);
    this.id = attributes.id || "";
    this.override = (0, _utils.getStringOption)(attributes.override, ["disabled", "error", "ignore", "warning"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.extras = null;
    this.message = null;
    this.script = null;
  }
}
class Caption extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "caption", true);
    this.id = attributes.id || "";
    this.placement = (0, _utils.getStringOption)(attributes.placement, ["left", "bottom", "inline", "right", "top"]);
    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
    this.reserve = Math.ceil((0, _utils.getMeasurement)(attributes.reserve));
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.extras = null;
    this.font = null;
    this.margin = null;
    this.para = null;
    this.value = null;
  }
  [_symbol_utils.$setValue](value) {
    _setValue(this, value);
  }
  [_symbol_utils.$getExtra](availableSpace) {
    if (!this[_symbol_utils.$extra]) {
      let {
        width,
        height
      } = availableSpace;
      switch (this.placement) {
        case "left":
        case "right":
        case "inline":
          width = this.reserve <= 0 ? width : this.reserve;
          break;
        case "top":
        case "bottom":
          height = this.reserve <= 0 ? height : this.reserve;
          break;
      }
      this[_symbol_utils.$extra] = (0, _html_utils.layoutNode)(this, {
        width,
        height
      });
    }
    return this[_symbol_utils.$extra];
  }
  [_symbol_utils.$toHTML](availableSpace) {
    if (!this.value) {
      return _utils.HTMLResult.EMPTY;
    }
    this[_symbol_utils.$pushPara]();
    const value = this.value[_symbol_utils.$toHTML](availableSpace).html;
    if (!value) {
      this[_symbol_utils.$popPara]();
      return _utils.HTMLResult.EMPTY;
    }
    const savedReserve = this.reserve;
    if (this.reserve <= 0) {
      const {
        w,
        h
      } = this[_symbol_utils.$getExtra](availableSpace);
      switch (this.placement) {
        case "left":
        case "right":
        case "inline":
          this.reserve = w;
          break;
        case "top":
        case "bottom":
          this.reserve = h;
          break;
      }
    }
    const children = [];
    if (typeof value === "string") {
      children.push({
        name: "#text",
        value
      });
    } else {
      children.push(value);
    }
    const style = (0, _html_utils.toStyle)(this, "font", "margin", "visibility");
    switch (this.placement) {
      case "left":
      case "right":
        if (this.reserve > 0) {
          style.width = (0, _html_utils.measureToString)(this.reserve);
        }
        break;
      case "top":
      case "bottom":
        if (this.reserve > 0) {
          style.height = (0, _html_utils.measureToString)(this.reserve);
        }
        break;
    }
    (0, _html_utils.setPara)(this, null, value);
    this[_symbol_utils.$popPara]();
    this.reserve = savedReserve;
    return _utils.HTMLResult.success({
      name: "div",
      attributes: {
        style,
        class: ["xfaCaption"]
      },
      children
    });
  }
}
class Certificate extends _xfa_object.StringObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "certificate");
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class Certificates extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "certificates", true);
    this.credentialServerPolicy = (0, _utils.getStringOption)(attributes.credentialServerPolicy, ["optional", "required"]);
    this.id = attributes.id || "";
    this.url = attributes.url || "";
    this.urlPolicy = attributes.urlPolicy || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.encryption = null;
    this.issuers = null;
    this.keyUsage = null;
    this.oids = null;
    this.signing = null;
    this.subjectDNs = null;
  }
}
class CheckButton extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "checkButton", true);
    this.id = attributes.id || "";
    this.mark = (0, _utils.getStringOption)(attributes.mark, ["default", "check", "circle", "cross", "diamond", "square", "star"]);
    this.shape = (0, _utils.getStringOption)(attributes.shape, ["square", "round"]);
    this.size = (0, _utils.getMeasurement)(attributes.size, "10pt");
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.border = null;
    this.extras = null;
    this.margin = null;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    const style = (0, _html_utils.toStyle)("margin");
    const size = (0, _html_utils.measureToString)(this.size);
    style.width = style.height = size;
    let type;
    let className;
    let groupId;
    const field = this[_symbol_utils.$getParent]()[_symbol_utils.$getParent]();
    const items = field.items.children.length && field.items.children[0][_symbol_utils.$toHTML]().html || [];
    const exportedValue = {
      on: (items[0] !== undefined ? items[0] : "on").toString(),
      off: (items[1] !== undefined ? items[1] : "off").toString()
    };
    const value = field.value?.[_symbol_utils.$text]() || "off";
    const checked = value === exportedValue.on || undefined;
    const container = field[_symbol_utils.$getSubformParent]();
    const fieldId = field[_symbol_utils.$uid];
    let dataId;
    if (container instanceof ExclGroup) {
      groupId = container[_symbol_utils.$uid];
      type = "radio";
      className = "xfaRadio";
      dataId = container[_symbol_utils.$data]?.[_symbol_utils.$uid] || container[_symbol_utils.$uid];
    } else {
      type = "checkbox";
      className = "xfaCheckbox";
      dataId = field[_symbol_utils.$data]?.[_symbol_utils.$uid] || field[_symbol_utils.$uid];
    }
    const input = {
      name: "input",
      attributes: {
        class: [className],
        style,
        fieldId,
        dataId,
        type,
        checked,
        xfaOn: exportedValue.on,
        xfaOff: exportedValue.off,
        "aria-label": ariaLabel(field),
        "aria-required": false
      }
    };
    if (groupId) {
      input.attributes.name = groupId;
    }
    if (isRequired(field)) {
      input.attributes["aria-required"] = true;
      input.attributes.required = true;
    }
    return _utils.HTMLResult.success({
      name: "label",
      attributes: {
        class: ["xfaLabel"]
      },
      children: [input]
    });
  }
}
class ChoiceList extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "choiceList", true);
    this.commitOn = (0, _utils.getStringOption)(attributes.commitOn, ["select", "exit"]);
    this.id = attributes.id || "";
    this.open = (0, _utils.getStringOption)(attributes.open, ["userControl", "always", "multiSelect", "onEntry"]);
    this.textEntry = (0, _utils.getInteger)({
      data: attributes.textEntry,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.border = null;
    this.extras = null;
    this.margin = null;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    const style = (0, _html_utils.toStyle)(this, "border", "margin");
    const ui = this[_symbol_utils.$getParent]();
    const field = ui[_symbol_utils.$getParent]();
    const fontSize = field.font?.size || 10;
    const optionStyle = {
      fontSize: `calc(${fontSize}px * var(--scale-factor))`
    };
    const children = [];
    if (field.items.children.length > 0) {
      const items = field.items;
      let displayedIndex = 0;
      let saveIndex = 0;
      if (items.children.length === 2) {
        displayedIndex = items.children[0].save;
        saveIndex = 1 - displayedIndex;
      }
      const displayed = items.children[displayedIndex][_symbol_utils.$toHTML]().html;
      const values = items.children[saveIndex][_symbol_utils.$toHTML]().html;
      let selected = false;
      const value = field.value?.[_symbol_utils.$text]() || "";
      for (let i = 0, ii = displayed.length; i < ii; i++) {
        const option = {
          name: "option",
          attributes: {
            value: values[i] || displayed[i],
            style: optionStyle
          },
          value: displayed[i]
        };
        if (values[i] === value) {
          option.attributes.selected = selected = true;
        }
        children.push(option);
      }
      if (!selected) {
        children.splice(0, 0, {
          name: "option",
          attributes: {
            hidden: true,
            selected: true
          },
          value: " "
        });
      }
    }
    const selectAttributes = {
      class: ["xfaSelect"],
      fieldId: field[_symbol_utils.$uid],
      dataId: field[_symbol_utils.$data]?.[_symbol_utils.$uid] || field[_symbol_utils.$uid],
      style,
      "aria-label": ariaLabel(field),
      "aria-required": false
    };
    if (isRequired(field)) {
      selectAttributes["aria-required"] = true;
      selectAttributes.required = true;
    }
    if (this.open === "multiSelect") {
      selectAttributes.multiple = true;
    }
    return _utils.HTMLResult.success({
      name: "label",
      attributes: {
        class: ["xfaLabel"]
      },
      children: [{
        name: "select",
        children,
        attributes: selectAttributes
      }]
    });
  }
}
class Color extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "color", true);
    this.cSpace = (0, _utils.getStringOption)(attributes.cSpace, ["SRGB"]);
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.value = attributes.value ? (0, _utils.getColor)(attributes.value) : "";
    this.extras = null;
  }
  [_symbol_utils.$hasSettableValue]() {
    return false;
  }
  [_symbol_utils.$toStyle]() {
    return this.value ? _util.Util.makeHexColor(this.value.r, this.value.g, this.value.b) : null;
  }
}
class Comb extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "comb");
    this.id = attributes.id || "";
    this.numberOfCells = (0, _utils.getInteger)({
      data: attributes.numberOfCells,
      defaultValue: 0,
      validate: x => x >= 0
    });
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class Connect extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "connect", true);
    this.connection = attributes.connection || "";
    this.id = attributes.id || "";
    this.ref = attributes.ref || "";
    this.usage = (0, _utils.getStringOption)(attributes.usage, ["exportAndImport", "exportOnly", "importOnly"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.picture = null;
  }
}
class ContentArea extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "contentArea", true);
    this.h = (0, _utils.getMeasurement)(attributes.h);
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.w = (0, _utils.getMeasurement)(attributes.w);
    this.x = (0, _utils.getMeasurement)(attributes.x, "0pt");
    this.y = (0, _utils.getMeasurement)(attributes.y, "0pt");
    this.desc = null;
    this.extras = null;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    const left = (0, _html_utils.measureToString)(this.x);
    const top = (0, _html_utils.measureToString)(this.y);
    const style = {
      left,
      top,
      width: (0, _html_utils.measureToString)(this.w),
      height: (0, _html_utils.measureToString)(this.h)
    };
    const classNames = ["xfaContentarea"];
    if ((0, _html_utils.isPrintOnly)(this)) {
      classNames.push("xfaPrintOnly");
    }
    return _utils.HTMLResult.success({
      name: "div",
      children: [],
      attributes: {
        style,
        class: classNames,
        id: this[_symbol_utils.$uid]
      }
    });
  }
}
class Corner extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "corner", true);
    this.id = attributes.id || "";
    this.inverted = (0, _utils.getInteger)({
      data: attributes.inverted,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.join = (0, _utils.getStringOption)(attributes.join, ["square", "round"]);
    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
    this.radius = (0, _utils.getMeasurement)(attributes.radius);
    this.stroke = (0, _utils.getStringOption)(attributes.stroke, ["solid", "dashDot", "dashDotDot", "dashed", "dotted", "embossed", "etched", "lowered", "raised"]);
    this.thickness = (0, _utils.getMeasurement)(attributes.thickness, "0.5pt");
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.color = null;
    this.extras = null;
  }
  [_symbol_utils.$toStyle]() {
    const style = (0, _html_utils.toStyle)(this, "visibility");
    style.radius = (0, _html_utils.measureToString)(this.join === "square" ? 0 : this.radius);
    return style;
  }
}
class DateElement extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "date");
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
  [_symbol_utils.$finalize]() {
    const date = this[_symbol_utils.$content].trim();
    this[_symbol_utils.$content] = date ? new Date(date) : null;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    return valueToHtml(this[_symbol_utils.$content] ? this[_symbol_utils.$content].toString() : "");
  }
}
class DateTime extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "dateTime");
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
  [_symbol_utils.$finalize]() {
    const date = this[_symbol_utils.$content].trim();
    this[_symbol_utils.$content] = date ? new Date(date) : null;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    return valueToHtml(this[_symbol_utils.$content] ? this[_symbol_utils.$content].toString() : "");
  }
}
class DateTimeEdit extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "dateTimeEdit", true);
    this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]);
    this.id = attributes.id || "";
    this.picker = (0, _utils.getStringOption)(attributes.picker, ["host", "none"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.border = null;
    this.comb = null;
    this.extras = null;
    this.margin = null;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    const style = (0, _html_utils.toStyle)(this, "border", "font", "margin");
    const field = this[_symbol_utils.$getParent]()[_symbol_utils.$getParent]();
    const html = {
      name: "input",
      attributes: {
        type: "text",
        fieldId: field[_symbol_utils.$uid],
        dataId: field[_symbol_utils.$data]?.[_symbol_utils.$uid] || field[_symbol_utils.$uid],
        class: ["xfaTextfield"],
        style,
        "aria-label": ariaLabel(field),
        "aria-required": false
      }
    };
    if (isRequired(field)) {
      html.attributes["aria-required"] = true;
      html.attributes.required = true;
    }
    return _utils.HTMLResult.success({
      name: "label",
      attributes: {
        class: ["xfaLabel"]
      },
      children: [html]
    });
  }
}
class Decimal extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "decimal");
    this.fracDigits = (0, _utils.getInteger)({
      data: attributes.fracDigits,
      defaultValue: 2,
      validate: x => true
    });
    this.id = attributes.id || "";
    this.leadDigits = (0, _utils.getInteger)({
      data: attributes.leadDigits,
      defaultValue: -1,
      validate: x => true
    });
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
  [_symbol_utils.$finalize]() {
    const number = parseFloat(this[_symbol_utils.$content].trim());
    this[_symbol_utils.$content] = isNaN(number) ? null : number;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    return valueToHtml(this[_symbol_utils.$content] !== null ? this[_symbol_utils.$content].toString() : "");
  }
}
class DefaultUi extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "defaultUi", true);
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.extras = null;
  }
}
class Desc extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "desc", true);
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.boolean = new _xfa_object.XFAObjectArray();
    this.date = new _xfa_object.XFAObjectArray();
    this.dateTime = new _xfa_object.XFAObjectArray();
    this.decimal = new _xfa_object.XFAObjectArray();
    this.exData = new _xfa_object.XFAObjectArray();
    this.float = new _xfa_object.XFAObjectArray();
    this.image = new _xfa_object.XFAObjectArray();
    this.integer = new _xfa_object.XFAObjectArray();
    this.text = new _xfa_object.XFAObjectArray();
    this.time = new _xfa_object.XFAObjectArray();
  }
}
class DigestMethod extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "digestMethod", ["", "SHA1", "SHA256", "SHA512", "RIPEMD160"]);
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class DigestMethods extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "digestMethods", true);
    this.id = attributes.id || "";
    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.digestMethod = new _xfa_object.XFAObjectArray();
  }
}
class Draw extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "draw", true);
    this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]);
    this.colSpan = (0, _utils.getInteger)({
      data: attributes.colSpan,
      defaultValue: 1,
      validate: n => n >= 1 || n === -1
    });
    this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : "";
    this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]);
    this.id = attributes.id || "";
    this.locale = attributes.locale || "";
    this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt");
    this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt");
    this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt");
    this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt");
    this.name = attributes.name || "";
    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
    this.rotate = (0, _utils.getInteger)({
      data: attributes.rotate,
      defaultValue: 0,
      validate: x => x % 90 === 0
    });
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : "";
    this.x = (0, _utils.getMeasurement)(attributes.x, "0pt");
    this.y = (0, _utils.getMeasurement)(attributes.y, "0pt");
    this.assist = null;
    this.border = null;
    this.caption = null;
    this.desc = null;
    this.extras = null;
    this.font = null;
    this.keep = null;
    this.margin = null;
    this.para = null;
    this.traversal = null;
    this.ui = null;
    this.value = null;
    this.setProperty = new _xfa_object.XFAObjectArray();
  }
  [_symbol_utils.$setValue](value) {
    _setValue(this, value);
  }
  [_symbol_utils.$toHTML](availableSpace) {
    setTabIndex(this);
    if (this.presence === "hidden" || this.presence === "inactive") {
      return _utils.HTMLResult.EMPTY;
    }
    (0, _html_utils.fixDimensions)(this);
    this[_symbol_utils.$pushPara]();
    const savedW = this.w;
    const savedH = this.h;
    const {
      w,
      h,
      isBroken
    } = (0, _html_utils.layoutNode)(this, availableSpace);
    if (w && this.w === "") {
      if (isBroken && this[_symbol_utils.$getSubformParent]()[_symbol_utils.$isThereMoreWidth]()) {
        this[_symbol_utils.$popPara]();
        return _utils.HTMLResult.FAILURE;
      }
      this.w = w;
    }
    if (h && this.h === "") {
      this.h = h;
    }
    setFirstUnsplittable(this);
    if (!(0, _layout.checkDimensions)(this, availableSpace)) {
      this.w = savedW;
      this.h = savedH;
      this[_symbol_utils.$popPara]();
      return _utils.HTMLResult.FAILURE;
    }
    unsetFirstUnsplittable(this);
    const style = (0, _html_utils.toStyle)(this, "font", "hAlign", "dimensions", "position", "presence", "rotate", "anchorType", "border", "margin");
    (0, _html_utils.setMinMaxDimensions)(this, style);
    if (style.margin) {
      style.padding = style.margin;
      delete style.margin;
    }
    const classNames = ["xfaDraw"];
    if (this.font) {
      classNames.push("xfaFont");
    }
    if ((0, _html_utils.isPrintOnly)(this)) {
      classNames.push("xfaPrintOnly");
    }
    const attributes = {
      style,
      id: this[_symbol_utils.$uid],
      class: classNames
    };
    if (this.name) {
      attributes.xfaName = this.name;
    }
    const html = {
      name: "div",
      attributes,
      children: []
    };
    applyAssist(this, attributes);
    const bbox = (0, _html_utils.computeBbox)(this, html, availableSpace);
    const value = this.value ? this.value[_symbol_utils.$toHTML](availableSpace).html : null;
    if (value === null) {
      this.w = savedW;
      this.h = savedH;
      this[_symbol_utils.$popPara]();
      return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox);
    }
    html.children.push(value);
    (0, _html_utils.setPara)(this, style, value);
    this.w = savedW;
    this.h = savedH;
    this[_symbol_utils.$popPara]();
    return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox);
  }
}
class Edge extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "edge", true);
    this.cap = (0, _utils.getStringOption)(attributes.cap, ["square", "butt", "round"]);
    this.id = attributes.id || "";
    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
    this.stroke = (0, _utils.getStringOption)(attributes.stroke, ["solid", "dashDot", "dashDotDot", "dashed", "dotted", "embossed", "etched", "lowered", "raised"]);
    this.thickness = (0, _utils.getMeasurement)(attributes.thickness, "0.5pt");
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.color = null;
    this.extras = null;
  }
  [_symbol_utils.$toStyle]() {
    const style = (0, _html_utils.toStyle)(this, "visibility");
    Object.assign(style, {
      linecap: this.cap,
      width: (0, _html_utils.measureToString)(this.thickness),
      color: this.color ? this.color[_symbol_utils.$toStyle]() : "#000000",
      style: ""
    });
    if (this.presence !== "visible") {
      style.style = "none";
    } else {
      switch (this.stroke) {
        case "solid":
          style.style = "solid";
          break;
        case "dashDot":
          style.style = "dashed";
          break;
        case "dashDotDot":
          style.style = "dashed";
          break;
        case "dashed":
          style.style = "dashed";
          break;
        case "dotted":
          style.style = "dotted";
          break;
        case "embossed":
          style.style = "ridge";
          break;
        case "etched":
          style.style = "groove";
          break;
        case "lowered":
          style.style = "inset";
          break;
        case "raised":
          style.style = "outset";
          break;
      }
    }
    return style;
  }
}
class Encoding extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "encoding", ["adbe.x509.rsa_sha1", "adbe.pkcs7.detached", "adbe.pkcs7.sha1"]);
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class Encodings extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "encodings", true);
    this.id = attributes.id || "";
    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.encoding = new _xfa_object.XFAObjectArray();
  }
}
class Encrypt extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "encrypt", true);
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.certificate = null;
  }
}
class EncryptData extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "encryptData", true);
    this.id = attributes.id || "";
    this.operation = (0, _utils.getStringOption)(attributes.operation, ["encrypt", "decrypt"]);
    this.target = attributes.target || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.filter = null;
    this.manifest = null;
  }
}
class Encryption extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "encryption", true);
    this.id = attributes.id || "";
    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.certificate = new _xfa_object.XFAObjectArray();
  }
}
class EncryptionMethod extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "encryptionMethod", ["", "AES256-CBC", "TRIPLEDES-CBC", "AES128-CBC", "AES192-CBC"]);
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class EncryptionMethods extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "encryptionMethods", true);
    this.id = attributes.id || "";
    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.encryptionMethod = new _xfa_object.XFAObjectArray();
  }
}
class Event extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "event", true);
    this.activity = (0, _utils.getStringOption)(attributes.activity, ["click", "change", "docClose", "docReady", "enter", "exit", "full", "indexChange", "initialize", "mouseDown", "mouseEnter", "mouseExit", "mouseUp", "postExecute", "postOpen", "postPrint", "postSave", "postSign", "postSubmit", "preExecute", "preOpen", "prePrint", "preSave", "preSign", "preSubmit", "ready", "validationState"]);
    this.id = attributes.id || "";
    this.listen = (0, _utils.getStringOption)(attributes.listen, ["refOnly", "refAndDescendents"]);
    this.name = attributes.name || "";
    this.ref = attributes.ref || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.extras = null;
    this.encryptData = null;
    this.execute = null;
    this.script = null;
    this.signData = null;
    this.submit = null;
  }
}
class ExData extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "exData");
    this.contentType = attributes.contentType || "";
    this.href = attributes.href || "";
    this.id = attributes.id || "";
    this.maxLength = (0, _utils.getInteger)({
      data: attributes.maxLength,
      defaultValue: -1,
      validate: x => x >= -1
    });
    this.name = attributes.name || "";
    this.rid = attributes.rid || "";
    this.transferEncoding = (0, _utils.getStringOption)(attributes.transferEncoding, ["none", "base64", "package"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
  [_symbol_utils.$isCDATAXml]() {
    return this.contentType === "text/html";
  }
  [_symbol_utils.$onChild](child) {
    if (this.contentType === "text/html" && child[_symbol_utils.$namespaceId] === _namespaces.NamespaceIds.xhtml.id) {
      this[_symbol_utils.$content] = child;
      return true;
    }
    if (this.contentType === "text/xml") {
      this[_symbol_utils.$content] = child;
      return true;
    }
    return false;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    if (this.contentType !== "text/html" || !this[_symbol_utils.$content]) {
      return _utils.HTMLResult.EMPTY;
    }
    return this[_symbol_utils.$content][_symbol_utils.$toHTML](availableSpace);
  }
}
class ExObject extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "exObject", true);
    this.archive = attributes.archive || "";
    this.classId = attributes.classId || "";
    this.codeBase = attributes.codeBase || "";
    this.codeType = attributes.codeType || "";
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.extras = null;
    this.boolean = new _xfa_object.XFAObjectArray();
    this.date = new _xfa_object.XFAObjectArray();
    this.dateTime = new _xfa_object.XFAObjectArray();
    this.decimal = new _xfa_object.XFAObjectArray();
    this.exData = new _xfa_object.XFAObjectArray();
    this.exObject = new _xfa_object.XFAObjectArray();
    this.float = new _xfa_object.XFAObjectArray();
    this.image = new _xfa_object.XFAObjectArray();
    this.integer = new _xfa_object.XFAObjectArray();
    this.text = new _xfa_object.XFAObjectArray();
    this.time = new _xfa_object.XFAObjectArray();
  }
}
class ExclGroup extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "exclGroup", true);
    this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", "readOnly"]);
    this.accessKey = attributes.accessKey || "";
    this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]);
    this.colSpan = (0, _utils.getInteger)({
      data: attributes.colSpan,
      defaultValue: 1,
      validate: n => n >= 1 || n === -1
    });
    this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : "";
    this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]);
    this.id = attributes.id || "";
    this.layout = (0, _utils.getStringOption)(attributes.layout, ["position", "lr-tb", "rl-row", "rl-tb", "row", "table", "tb"]);
    this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt");
    this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt");
    this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt");
    this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt");
    this.name = attributes.name || "";
    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : "";
    this.x = (0, _utils.getMeasurement)(attributes.x, "0pt");
    this.y = (0, _utils.getMeasurement)(attributes.y, "0pt");
    this.assist = null;
    this.bind = null;
    this.border = null;
    this.calculate = null;
    this.caption = null;
    this.desc = null;
    this.extras = null;
    this.margin = null;
    this.para = null;
    this.traversal = null;
    this.validate = null;
    this.connect = new _xfa_object.XFAObjectArray();
    this.event = new _xfa_object.XFAObjectArray();
    this.field = new _xfa_object.XFAObjectArray();
    this.setProperty = new _xfa_object.XFAObjectArray();
  }
  [_symbol_utils.$isBindable]() {
    return true;
  }
  [_symbol_utils.$hasSettableValue]() {
    return true;
  }
  [_symbol_utils.$setValue](value) {
    for (const field of this.field.children) {
      if (!field.value) {
        const nodeValue = new Value({});
        field[_symbol_utils.$appendChild](nodeValue);
        field.value = nodeValue;
      }
      field.value[_symbol_utils.$setValue](value);
    }
  }
  [_symbol_utils.$isThereMoreWidth]() {
    return this.layout.endsWith("-tb") && this[_symbol_utils.$extra].attempt === 0 && this[_symbol_utils.$extra].numberInLine > 0 || this[_symbol_utils.$getParent]()[_symbol_utils.$isThereMoreWidth]();
  }
  [_symbol_utils.$isSplittable]() {
    const parent = this[_symbol_utils.$getSubformParent]();
    if (!parent[_symbol_utils.$isSplittable]()) {
      return false;
    }
    if (this[_symbol_utils.$extra]._isSplittable !== undefined) {
      return this[_symbol_utils.$extra]._isSplittable;
    }
    if (this.layout === "position" || this.layout.includes("row")) {
      this[_symbol_utils.$extra]._isSplittable = false;
      return false;
    }
    if (parent.layout?.endsWith("-tb") && parent[_symbol_utils.$extra].numberInLine !== 0) {
      return false;
    }
    this[_symbol_utils.$extra]._isSplittable = true;
    return true;
  }
  [_symbol_utils.$flushHTML]() {
    return (0, _layout.flushHTML)(this);
  }
  [_symbol_utils.$addHTML](html, bbox) {
    (0, _layout.addHTML)(this, html, bbox);
  }
  [_symbol_utils.$getAvailableSpace]() {
    return (0, _layout.getAvailableSpace)(this);
  }
  [_symbol_utils.$toHTML](availableSpace) {
    setTabIndex(this);
    if (this.presence === "hidden" || this.presence === "inactive" || this.h === 0 || this.w === 0) {
      return _utils.HTMLResult.EMPTY;
    }
    (0, _html_utils.fixDimensions)(this);
    const children = [];
    const attributes = {
      id: this[_symbol_utils.$uid],
      class: []
    };
    (0, _html_utils.setAccess)(this, attributes.class);
    if (!this[_symbol_utils.$extra]) {
      this[_symbol_utils.$extra] = Object.create(null);
    }
    Object.assign(this[_symbol_utils.$extra], {
      children,
      attributes,
      attempt: 0,
      line: null,
      numberInLine: 0,
      availableSpace: {
        width: Math.min(this.w || Infinity, availableSpace.width),
        height: Math.min(this.h || Infinity, availableSpace.height)
      },
      width: 0,
      height: 0,
      prevHeight: 0,
      currentWidth: 0
    });
    const isSplittable = this[_symbol_utils.$isSplittable]();
    if (!isSplittable) {
      setFirstUnsplittable(this);
    }
    if (!(0, _layout.checkDimensions)(this, availableSpace)) {
      return _utils.HTMLResult.FAILURE;
    }
    const filter = new Set(["field"]);
    if (this.layout.includes("row")) {
      const columnWidths = this[_symbol_utils.$getSubformParent]().columnWidths;
      if (Array.isArray(columnWidths) && columnWidths.length > 0) {
        this[_symbol_utils.$extra].columnWidths = columnWidths;
        this[_symbol_utils.$extra].currentColumn = 0;
      }
    }
    const style = (0, _html_utils.toStyle)(this, "anchorType", "dimensions", "position", "presence", "border", "margin", "hAlign");
    const classNames = ["xfaExclgroup"];
    const cl = (0, _html_utils.layoutClass)(this);
    if (cl) {
      classNames.push(cl);
    }
    if ((0, _html_utils.isPrintOnly)(this)) {
      classNames.push("xfaPrintOnly");
    }
    attributes.style = style;
    attributes.class = classNames;
    if (this.name) {
      attributes.xfaName = this.name;
    }
    this[_symbol_utils.$pushPara]();
    const isLrTb = this.layout === "lr-tb" || this.layout === "rl-tb";
    const maxRun = isLrTb ? MAX_ATTEMPTS_FOR_LRTB_LAYOUT : 1;
    for (; this[_symbol_utils.$extra].attempt < maxRun; this[_symbol_utils.$extra].attempt++) {
      if (isLrTb && this[_symbol_utils.$extra].attempt === MAX_ATTEMPTS_FOR_LRTB_LAYOUT - 1) {
        this[_symbol_utils.$extra].numberInLine = 0;
      }
      const result = this[_symbol_utils.$childrenToHTML]({
        filter,
        include: true
      });
      if (result.success) {
        break;
      }
      if (result.isBreak()) {
        this[_symbol_utils.$popPara]();
        return result;
      }
      if (isLrTb && this[_symbol_utils.$extra].attempt === 0 && this[_symbol_utils.$extra].numberInLine === 0 && !this[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].noLayoutFailure) {
        this[_symbol_utils.$extra].attempt = maxRun;
        break;
      }
    }
    this[_symbol_utils.$popPara]();
    if (!isSplittable) {
      unsetFirstUnsplittable(this);
    }
    if (this[_symbol_utils.$extra].attempt === maxRun) {
      if (!isSplittable) {
        delete this[_symbol_utils.$extra];
      }
      return _utils.HTMLResult.FAILURE;
    }
    let marginH = 0;
    let marginV = 0;
    if (this.margin) {
      marginH = this.margin.leftInset + this.margin.rightInset;
      marginV = this.margin.topInset + this.margin.bottomInset;
    }
    const width = Math.max(this[_symbol_utils.$extra].width + marginH, this.w || 0);
    const height = Math.max(this[_symbol_utils.$extra].height + marginV, this.h || 0);
    const bbox = [this.x, this.y, width, height];
    if (this.w === "") {
      style.width = (0, _html_utils.measureToString)(width);
    }
    if (this.h === "") {
      style.height = (0, _html_utils.measureToString)(height);
    }
    const html = {
      name: "div",
      attributes,
      children
    };
    applyAssist(this, attributes);
    delete this[_symbol_utils.$extra];
    return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox);
  }
}
class Execute extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "execute");
    this.connection = attributes.connection || "";
    this.executeType = (0, _utils.getStringOption)(attributes.executeType, ["import", "remerge"]);
    this.id = attributes.id || "";
    this.runAt = (0, _utils.getStringOption)(attributes.runAt, ["client", "both", "server"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class Extras extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "extras", true);
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.boolean = new _xfa_object.XFAObjectArray();
    this.date = new _xfa_object.XFAObjectArray();
    this.dateTime = new _xfa_object.XFAObjectArray();
    this.decimal = new _xfa_object.XFAObjectArray();
    this.exData = new _xfa_object.XFAObjectArray();
    this.extras = new _xfa_object.XFAObjectArray();
    this.float = new _xfa_object.XFAObjectArray();
    this.image = new _xfa_object.XFAObjectArray();
    this.integer = new _xfa_object.XFAObjectArray();
    this.text = new _xfa_object.XFAObjectArray();
    this.time = new _xfa_object.XFAObjectArray();
  }
}
class Field extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "field", true);
    this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", "readOnly"]);
    this.accessKey = attributes.accessKey || "";
    this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]);
    this.colSpan = (0, _utils.getInteger)({
      data: attributes.colSpan,
      defaultValue: 1,
      validate: n => n >= 1 || n === -1
    });
    this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : "";
    this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]);
    this.id = attributes.id || "";
    this.locale = attributes.locale || "";
    this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt");
    this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt");
    this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt");
    this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt");
    this.name = attributes.name || "";
    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
    this.rotate = (0, _utils.getInteger)({
      data: attributes.rotate,
      defaultValue: 0,
      validate: x => x % 90 === 0
    });
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : "";
    this.x = (0, _utils.getMeasurement)(attributes.x, "0pt");
    this.y = (0, _utils.getMeasurement)(attributes.y, "0pt");
    this.assist = null;
    this.bind = null;
    this.border = null;
    this.calculate = null;
    this.caption = null;
    this.desc = null;
    this.extras = null;
    this.font = null;
    this.format = null;
    this.items = new _xfa_object.XFAObjectArray(2);
    this.keep = null;
    this.margin = null;
    this.para = null;
    this.traversal = null;
    this.ui = null;
    this.validate = null;
    this.value = null;
    this.bindItems = new _xfa_object.XFAObjectArray();
    this.connect = new _xfa_object.XFAObjectArray();
    this.event = new _xfa_object.XFAObjectArray();
    this.setProperty = new _xfa_object.XFAObjectArray();
  }
  [_symbol_utils.$isBindable]() {
    return true;
  }
  [_symbol_utils.$setValue](value) {
    _setValue(this, value);
  }
  [_symbol_utils.$toHTML](availableSpace) {
    setTabIndex(this);
    if (!this.ui) {
      this.ui = new Ui({});
      this.ui[_symbol_utils.$globalData] = this[_symbol_utils.$globalData];
      this[_symbol_utils.$appendChild](this.ui);
      let node;
      switch (this.items.children.length) {
        case 0:
          node = new TextEdit({});
          this.ui.textEdit = node;
          break;
        case 1:
          node = new CheckButton({});
          this.ui.checkButton = node;
          break;
        case 2:
          node = new ChoiceList({});
          this.ui.choiceList = node;
          break;
      }
      this.ui[_symbol_utils.$appendChild](node);
    }
    if (!this.ui || this.presence === "hidden" || this.presence === "inactive" || this.h === 0 || this.w === 0) {
      return _utils.HTMLResult.EMPTY;
    }
    if (this.caption) {
      delete this.caption[_symbol_utils.$extra];
    }
    this[_symbol_utils.$pushPara]();
    const caption = this.caption ? this.caption[_symbol_utils.$toHTML](availableSpace).html : null;
    const savedW = this.w;
    const savedH = this.h;
    let marginH = 0;
    let marginV = 0;
    if (this.margin) {
      marginH = this.margin.leftInset + this.margin.rightInset;
      marginV = this.margin.topInset + this.margin.bottomInset;
    }
    let borderDims = null;
    if (this.w === "" || this.h === "") {
      let width = null;
      let height = null;
      let uiW = 0;
      let uiH = 0;
      if (this.ui.checkButton) {
        uiW = uiH = this.ui.checkButton.size;
      } else {
        const {
          w,
          h
        } = (0, _html_utils.layoutNode)(this, availableSpace);
        if (w !== null) {
          uiW = w;
          uiH = h;
        } else {
          uiH = (0, _fonts.getMetrics)(this.font, true).lineNoGap;
        }
      }
      borderDims = getBorderDims(this.ui[_symbol_utils.$getExtra]());
      uiW += borderDims.w;
      uiH += borderDims.h;
      if (this.caption) {
        const {
          w,
          h,
          isBroken
        } = this.caption[_symbol_utils.$getExtra](availableSpace);
        if (isBroken && this[_symbol_utils.$getSubformParent]()[_symbol_utils.$isThereMoreWidth]()) {
          this[_symbol_utils.$popPara]();
          return _utils.HTMLResult.FAILURE;
        }
        width = w;
        height = h;
        switch (this.caption.placement) {
          case "left":
          case "right":
          case "inline":
            width += uiW;
            break;
          case "top":
          case "bottom":
            height += uiH;
            break;
        }
      } else {
        width = uiW;
        height = uiH;
      }
      if (width && this.w === "") {
        width += marginH;
        this.w = Math.min(this.maxW <= 0 ? Infinity : this.maxW, this.minW + 1 < width ? width : this.minW);
      }
      if (height && this.h === "") {
        height += marginV;
        this.h = Math.min(this.maxH <= 0 ? Infinity : this.maxH, this.minH + 1 < height ? height : this.minH);
      }
    }
    this[_symbol_utils.$popPara]();
    (0, _html_utils.fixDimensions)(this);
    setFirstUnsplittable(this);
    if (!(0, _layout.checkDimensions)(this, availableSpace)) {
      this.w = savedW;
      this.h = savedH;
      this[_symbol_utils.$popPara]();
      return _utils.HTMLResult.FAILURE;
    }
    unsetFirstUnsplittable(this);
    const style = (0, _html_utils.toStyle)(this, "font", "dimensions", "position", "rotate", "anchorType", "presence", "margin", "hAlign");
    (0, _html_utils.setMinMaxDimensions)(this, style);
    const classNames = ["xfaField"];
    if (this.font) {
      classNames.push("xfaFont");
    }
    if ((0, _html_utils.isPrintOnly)(this)) {
      classNames.push("xfaPrintOnly");
    }
    const attributes = {
      style,
      id: this[_symbol_utils.$uid],
      class: classNames
    };
    if (style.margin) {
      style.padding = style.margin;
      delete style.margin;
    }
    (0, _html_utils.setAccess)(this, classNames);
    if (this.name) {
      attributes.xfaName = this.name;
    }
    const children = [];
    const html = {
      name: "div",
      attributes,
      children
    };
    applyAssist(this, attributes);
    const borderStyle = this.border ? this.border[_symbol_utils.$toStyle]() : null;
    const bbox = (0, _html_utils.computeBbox)(this, html, availableSpace);
    const ui = this.ui[_symbol_utils.$toHTML]().html;
    if (!ui) {
      Object.assign(style, borderStyle);
      return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox);
    }
    if (this[_symbol_utils.$tabIndex]) {
      if (ui.children?.[0]) {
        ui.children[0].attributes.tabindex = this[_symbol_utils.$tabIndex];
      } else {
        ui.attributes.tabindex = this[_symbol_utils.$tabIndex];
      }
    }
    if (!ui.attributes.style) {
      ui.attributes.style = Object.create(null);
    }
    let aElement = null;
    if (this.ui.button) {
      if (ui.children.length === 1) {
        [aElement] = ui.children.splice(0, 1);
      }
      Object.assign(ui.attributes.style, borderStyle);
    } else {
      Object.assign(style, borderStyle);
    }
    children.push(ui);
    if (this.value) {
      if (this.ui.imageEdit) {
        ui.children.push(this.value[_symbol_utils.$toHTML]().html);
      } else if (!this.ui.button) {
        let value = "";
        if (this.value.exData) {
          value = this.value.exData[_symbol_utils.$text]();
        } else if (this.value.text) {
          value = this.value.text[_symbol_utils.$getExtra]();
        } else {
          const htmlValue = this.value[_symbol_utils.$toHTML]().html;
          if (htmlValue !== null) {
            value = htmlValue.children[0].value;
          }
        }
        if (this.ui.textEdit && this.value.text?.maxChars) {
          ui.children[0].attributes.maxLength = this.value.text.maxChars;
        }
        if (value) {
          if (this.ui.numericEdit) {
            value = parseFloat(value);
            value = isNaN(value) ? "" : value.toString();
          }
          if (ui.children[0].name === "textarea") {
            ui.children[0].attributes.textContent = value;
          } else {
            ui.children[0].attributes.value = value;
          }
        }
      }
    }
    if (!this.ui.imageEdit && ui.children?.[0] && this.h) {
      borderDims = borderDims || getBorderDims(this.ui[_symbol_utils.$getExtra]());
      let captionHeight = 0;
      if (this.caption && ["top", "bottom"].includes(this.caption.placement)) {
        captionHeight = this.caption.reserve;
        if (captionHeight <= 0) {
          captionHeight = this.caption[_symbol_utils.$getExtra](availableSpace).h;
        }
        const inputHeight = this.h - captionHeight - marginV - borderDims.h;
        ui.children[0].attributes.style.height = (0, _html_utils.measureToString)(inputHeight);
      } else {
        ui.children[0].attributes.style.height = "100%";
      }
    }
    if (aElement) {
      ui.children.push(aElement);
    }
    if (!caption) {
      if (ui.attributes.class) {
        ui.attributes.class.push("xfaLeft");
      }
      this.w = savedW;
      this.h = savedH;
      return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox);
    }
    if (this.ui.button) {
      if (style.padding) {
        delete style.padding;
      }
      if (caption.name === "div") {
        caption.name = "span";
      }
      ui.children.push(caption);
      return _utils.HTMLResult.success(html, bbox);
    } else if (this.ui.checkButton) {
      caption.attributes.class[0] = "xfaCaptionForCheckButton";
    }
    if (!ui.attributes.class) {
      ui.attributes.class = [];
    }
    ui.children.splice(0, 0, caption);
    switch (this.caption.placement) {
      case "left":
        ui.attributes.class.push("xfaLeft");
        break;
      case "right":
        ui.attributes.class.push("xfaRight");
        break;
      case "top":
        ui.attributes.class.push("xfaTop");
        break;
      case "bottom":
        ui.attributes.class.push("xfaBottom");
        break;
      case "inline":
        ui.attributes.class.push("xfaLeft");
        break;
    }
    this.w = savedW;
    this.h = savedH;
    return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox);
  }
}
exports.Field = Field;
class Fill extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "fill", true);
    this.id = attributes.id || "";
    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.color = null;
    this.extras = null;
    this.linear = null;
    this.pattern = null;
    this.radial = null;
    this.solid = null;
    this.stipple = null;
  }
  [_symbol_utils.$toStyle]() {
    const parent = this[_symbol_utils.$getParent]();
    const grandpa = parent[_symbol_utils.$getParent]();
    const ggrandpa = grandpa[_symbol_utils.$getParent]();
    const style = Object.create(null);
    let propName = "color";
    let altPropName = propName;
    if (parent instanceof Border) {
      propName = "background-color";
      altPropName = "background";
      if (ggrandpa instanceof Ui) {
        style.backgroundColor = "white";
      }
    }
    if (parent instanceof Rectangle || parent instanceof Arc) {
      propName = altPropName = "fill";
      style.fill = "white";
    }
    for (const name of Object.getOwnPropertyNames(this)) {
      if (name === "extras" || name === "color") {
        continue;
      }
      const obj = this[name];
      if (!(obj instanceof _xfa_object.XFAObject)) {
        continue;
      }
      const color = obj[_symbol_utils.$toStyle](this.color);
      if (color) {
        style[color.startsWith("#") ? propName : altPropName] = color;
      }
      return style;
    }
    if (this.color?.value) {
      const color = this.color[_symbol_utils.$toStyle]();
      style[color.startsWith("#") ? propName : altPropName] = color;
    }
    return style;
  }
}
class Filter extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "filter", true);
    this.addRevocationInfo = (0, _utils.getStringOption)(attributes.addRevocationInfo, ["", "required", "optional", "none"]);
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.version = (0, _utils.getInteger)({
      data: this.version,
      defaultValue: 5,
      validate: x => x >= 1 && x <= 5
    });
    this.appearanceFilter = null;
    this.certificates = null;
    this.digestMethods = null;
    this.encodings = null;
    this.encryptionMethods = null;
    this.handler = null;
    this.lockDocument = null;
    this.mdp = null;
    this.reasons = null;
    this.timeStamp = null;
  }
}
class Float extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "float");
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
  [_symbol_utils.$finalize]() {
    const number = parseFloat(this[_symbol_utils.$content].trim());
    this[_symbol_utils.$content] = isNaN(number) ? null : number;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    return valueToHtml(this[_symbol_utils.$content] !== null ? this[_symbol_utils.$content].toString() : "");
  }
}
class Font extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "font", true);
    this.baselineShift = (0, _utils.getMeasurement)(attributes.baselineShift);
    this.fontHorizontalScale = (0, _utils.getFloat)({
      data: attributes.fontHorizontalScale,
      defaultValue: 100,
      validate: x => x >= 0
    });
    this.fontVerticalScale = (0, _utils.getFloat)({
      data: attributes.fontVerticalScale,
      defaultValue: 100,
      validate: x => x >= 0
    });
    this.id = attributes.id || "";
    this.kerningMode = (0, _utils.getStringOption)(attributes.kerningMode, ["none", "pair"]);
    this.letterSpacing = (0, _utils.getMeasurement)(attributes.letterSpacing, "0");
    this.lineThrough = (0, _utils.getInteger)({
      data: attributes.lineThrough,
      defaultValue: 0,
      validate: x => x === 1 || x === 2
    });
    this.lineThroughPeriod = (0, _utils.getStringOption)(attributes.lineThroughPeriod, ["all", "word"]);
    this.overline = (0, _utils.getInteger)({
      data: attributes.overline,
      defaultValue: 0,
      validate: x => x === 1 || x === 2
    });
    this.overlinePeriod = (0, _utils.getStringOption)(attributes.overlinePeriod, ["all", "word"]);
    this.posture = (0, _utils.getStringOption)(attributes.posture, ["normal", "italic"]);
    this.size = (0, _utils.getMeasurement)(attributes.size, "10pt");
    this.typeface = attributes.typeface || "Courier";
    this.underline = (0, _utils.getInteger)({
      data: attributes.underline,
      defaultValue: 0,
      validate: x => x === 1 || x === 2
    });
    this.underlinePeriod = (0, _utils.getStringOption)(attributes.underlinePeriod, ["all", "word"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.weight = (0, _utils.getStringOption)(attributes.weight, ["normal", "bold"]);
    this.extras = null;
    this.fill = null;
  }
  [_symbol_utils.$clean](builder) {
    super[_symbol_utils.$clean](builder);
    this[_symbol_utils.$globalData].usedTypefaces.add(this.typeface);
  }
  [_symbol_utils.$toStyle]() {
    const style = (0, _html_utils.toStyle)(this, "fill");
    const color = style.color;
    if (color) {
      if (color === "#000000") {
        delete style.color;
      } else if (!color.startsWith("#")) {
        style.background = color;
        style.backgroundClip = "text";
        style.color = "transparent";
      }
    }
    if (this.baselineShift) {
      style.verticalAlign = (0, _html_utils.measureToString)(this.baselineShift);
    }
    style.fontKerning = this.kerningMode === "none" ? "none" : "normal";
    style.letterSpacing = (0, _html_utils.measureToString)(this.letterSpacing);
    if (this.lineThrough !== 0) {
      style.textDecoration = "line-through";
      if (this.lineThrough === 2) {
        style.textDecorationStyle = "double";
      }
    }
    if (this.overline !== 0) {
      style.textDecoration = "overline";
      if (this.overline === 2) {
        style.textDecorationStyle = "double";
      }
    }
    style.fontStyle = this.posture;
    style.fontSize = (0, _html_utils.measureToString)(0.99 * this.size);
    (0, _html_utils.setFontFamily)(this, this, this[_symbol_utils.$globalData].fontFinder, style);
    if (this.underline !== 0) {
      style.textDecoration = "underline";
      if (this.underline === 2) {
        style.textDecorationStyle = "double";
      }
    }
    style.fontWeight = this.weight;
    return style;
  }
}
class Format extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "format", true);
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.extras = null;
    this.picture = null;
  }
}
class Handler extends _xfa_object.StringObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "handler");
    this.id = attributes.id || "";
    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class Hyphenation extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "hyphenation");
    this.excludeAllCaps = (0, _utils.getInteger)({
      data: attributes.excludeAllCaps,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.excludeInitialCap = (0, _utils.getInteger)({
      data: attributes.excludeInitialCap,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.hyphenate = (0, _utils.getInteger)({
      data: attributes.hyphenate,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.id = attributes.id || "";
    this.pushCharacterCount = (0, _utils.getInteger)({
      data: attributes.pushCharacterCount,
      defaultValue: 3,
      validate: x => x >= 0
    });
    this.remainCharacterCount = (0, _utils.getInteger)({
      data: attributes.remainCharacterCount,
      defaultValue: 3,
      validate: x => x >= 0
    });
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.wordCharacterCount = (0, _utils.getInteger)({
      data: attributes.wordCharacterCount,
      defaultValue: 7,
      validate: x => x >= 0
    });
  }
}
class Image extends _xfa_object.StringObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "image");
    this.aspect = (0, _utils.getStringOption)(attributes.aspect, ["fit", "actual", "height", "none", "width"]);
    this.contentType = attributes.contentType || "";
    this.href = attributes.href || "";
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.transferEncoding = (0, _utils.getStringOption)(attributes.transferEncoding, ["base64", "none", "package"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
  [_symbol_utils.$toHTML]() {
    if (this.contentType && !MIMES.has(this.contentType.toLowerCase())) {
      return _utils.HTMLResult.EMPTY;
    }
    let buffer = this[_symbol_utils.$globalData].images && this[_symbol_utils.$globalData].images.get(this.href);
    if (!buffer && (this.href || !this[_symbol_utils.$content])) {
      return _utils.HTMLResult.EMPTY;
    }
    if (!buffer && this.transferEncoding === "base64") {
      buffer = (0, _util.stringToBytes)(atob(this[_symbol_utils.$content]));
    }
    if (!buffer) {
      return _utils.HTMLResult.EMPTY;
    }
    if (!this.contentType) {
      for (const [header, type] of IMAGES_HEADERS) {
        if (buffer.length > header.length && header.every((x, i) => x === buffer[i])) {
          this.contentType = type;
          break;
        }
      }
      if (!this.contentType) {
        return _utils.HTMLResult.EMPTY;
      }
    }
    const blob = new Blob([buffer], {
      type: this.contentType
    });
    let style;
    switch (this.aspect) {
      case "fit":
      case "actual":
        break;
      case "height":
        style = {
          height: "100%",
          objectFit: "fill"
        };
        break;
      case "none":
        style = {
          width: "100%",
          height: "100%",
          objectFit: "fill"
        };
        break;
      case "width":
        style = {
          width: "100%",
          objectFit: "fill"
        };
        break;
    }
    const parent = this[_symbol_utils.$getParent]();
    return _utils.HTMLResult.success({
      name: "img",
      attributes: {
        class: ["xfaImage"],
        style,
        src: URL.createObjectURL(blob),
        alt: parent ? ariaLabel(parent[_symbol_utils.$getParent]()) : null
      }
    });
  }
}
class ImageEdit extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "imageEdit", true);
    this.data = (0, _utils.getStringOption)(attributes.data, ["link", "embed"]);
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.border = null;
    this.extras = null;
    this.margin = null;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    if (this.data === "embed") {
      return _utils.HTMLResult.success({
        name: "div",
        children: [],
        attributes: {}
      });
    }
    return _utils.HTMLResult.EMPTY;
  }
}
class Integer extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "integer");
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
  [_symbol_utils.$finalize]() {
    const number = parseInt(this[_symbol_utils.$content].trim(), 10);
    this[_symbol_utils.$content] = isNaN(number) ? null : number;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    return valueToHtml(this[_symbol_utils.$content] !== null ? this[_symbol_utils.$content].toString() : "");
  }
}
class Issuers extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "issuers", true);
    this.id = attributes.id || "";
    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.certificate = new _xfa_object.XFAObjectArray();
  }
}
class Items extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "items", true);
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
    this.ref = attributes.ref || "";
    this.save = (0, _utils.getInteger)({
      data: attributes.save,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.boolean = new _xfa_object.XFAObjectArray();
    this.date = new _xfa_object.XFAObjectArray();
    this.dateTime = new _xfa_object.XFAObjectArray();
    this.decimal = new _xfa_object.XFAObjectArray();
    this.exData = new _xfa_object.XFAObjectArray();
    this.float = new _xfa_object.XFAObjectArray();
    this.image = new _xfa_object.XFAObjectArray();
    this.integer = new _xfa_object.XFAObjectArray();
    this.text = new _xfa_object.XFAObjectArray();
    this.time = new _xfa_object.XFAObjectArray();
  }
  [_symbol_utils.$toHTML]() {
    const output = [];
    for (const child of this[_symbol_utils.$getChildren]()) {
      output.push(child[_symbol_utils.$text]());
    }
    return _utils.HTMLResult.success(output);
  }
}
exports.Items = Items;
class Keep extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "keep", true);
    this.id = attributes.id || "";
    const options = ["none", "contentArea", "pageArea"];
    this.intact = (0, _utils.getStringOption)(attributes.intact, options);
    this.next = (0, _utils.getStringOption)(attributes.next, options);
    this.previous = (0, _utils.getStringOption)(attributes.previous, options);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.extras = null;
  }
}
class KeyUsage extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "keyUsage");
    const options = ["", "yes", "no"];
    this.crlSign = (0, _utils.getStringOption)(attributes.crlSign, options);
    this.dataEncipherment = (0, _utils.getStringOption)(attributes.dataEncipherment, options);
    this.decipherOnly = (0, _utils.getStringOption)(attributes.decipherOnly, options);
    this.digitalSignature = (0, _utils.getStringOption)(attributes.digitalSignature, options);
    this.encipherOnly = (0, _utils.getStringOption)(attributes.encipherOnly, options);
    this.id = attributes.id || "";
    this.keyAgreement = (0, _utils.getStringOption)(attributes.keyAgreement, options);
    this.keyCertSign = (0, _utils.getStringOption)(attributes.keyCertSign, options);
    this.keyEncipherment = (0, _utils.getStringOption)(attributes.keyEncipherment, options);
    this.nonRepudiation = (0, _utils.getStringOption)(attributes.nonRepudiation, options);
    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class Line extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "line", true);
    this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]);
    this.id = attributes.id || "";
    this.slope = (0, _utils.getStringOption)(attributes.slope, ["\\", "/"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.edge = null;
  }
  [_symbol_utils.$toHTML]() {
    const parent = this[_symbol_utils.$getParent]()[_symbol_utils.$getParent]();
    const edge = this.edge || new Edge({});
    const edgeStyle = edge[_symbol_utils.$toStyle]();
    const style = Object.create(null);
    const thickness = edge.presence === "visible" ? edge.thickness : 0;
    style.strokeWidth = (0, _html_utils.measureToString)(thickness);
    style.stroke = edgeStyle.color;
    let x1, y1, x2, y2;
    let width = "100%";
    let height = "100%";
    if (parent.w <= thickness) {
      [x1, y1, x2, y2] = ["50%", 0, "50%", "100%"];
      width = style.strokeWidth;
    } else if (parent.h <= thickness) {
      [x1, y1, x2, y2] = [0, "50%", "100%", "50%"];
      height = style.strokeWidth;
    } else if (this.slope === "\\") {
      [x1, y1, x2, y2] = [0, 0, "100%", "100%"];
    } else {
      [x1, y1, x2, y2] = [0, "100%", "100%", 0];
    }
    const line = {
      name: "line",
      attributes: {
        xmlns: SVG_NS,
        x1,
        y1,
        x2,
        y2,
        style
      }
    };
    const svg = {
      name: "svg",
      children: [line],
      attributes: {
        xmlns: SVG_NS,
        width,
        height,
        style: {
          overflow: "visible"
        }
      }
    };
    if (hasMargin(parent)) {
      return _utils.HTMLResult.success({
        name: "div",
        attributes: {
          style: {
            display: "inline",
            width: "100%",
            height: "100%"
          }
        },
        children: [svg]
      });
    }
    svg.attributes.style.position = "absolute";
    return _utils.HTMLResult.success(svg);
  }
}
class Linear extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "linear", true);
    this.id = attributes.id || "";
    this.type = (0, _utils.getStringOption)(attributes.type, ["toRight", "toBottom", "toLeft", "toTop"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.color = null;
    this.extras = null;
  }
  [_symbol_utils.$toStyle](startColor) {
    startColor = startColor ? startColor[_symbol_utils.$toStyle]() : "#FFFFFF";
    const transf = this.type.replace(/([RBLT])/, " $1").toLowerCase();
    const endColor = this.color ? this.color[_symbol_utils.$toStyle]() : "#000000";
    return `linear-gradient(${transf}, ${startColor}, ${endColor})`;
  }
}
class LockDocument extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "lockDocument");
    this.id = attributes.id || "";
    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
  [_symbol_utils.$finalize]() {
    this[_symbol_utils.$content] = (0, _utils.getStringOption)(this[_symbol_utils.$content], ["auto", "0", "1"]);
  }
}
class Manifest extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "manifest", true);
    this.action = (0, _utils.getStringOption)(attributes.action, ["include", "all", "exclude"]);
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.extras = null;
    this.ref = new _xfa_object.XFAObjectArray();
  }
}
class Margin extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "margin", true);
    this.bottomInset = (0, _utils.getMeasurement)(attributes.bottomInset, "0");
    this.id = attributes.id || "";
    this.leftInset = (0, _utils.getMeasurement)(attributes.leftInset, "0");
    this.rightInset = (0, _utils.getMeasurement)(attributes.rightInset, "0");
    this.topInset = (0, _utils.getMeasurement)(attributes.topInset, "0");
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.extras = null;
  }
  [_symbol_utils.$toStyle]() {
    return {
      margin: (0, _html_utils.measureToString)(this.topInset) + " " + (0, _html_utils.measureToString)(this.rightInset) + " " + (0, _html_utils.measureToString)(this.bottomInset) + " " + (0, _html_utils.measureToString)(this.leftInset)
    };
  }
}
class Mdp extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "mdp");
    this.id = attributes.id || "";
    this.permissions = (0, _utils.getInteger)({
      data: attributes.permissions,
      defaultValue: 2,
      validate: x => x === 1 || x === 3
    });
    this.signatureType = (0, _utils.getStringOption)(attributes.signatureType, ["filler", "author"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class Medium extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "medium");
    this.id = attributes.id || "";
    this.imagingBBox = (0, _utils.getBBox)(attributes.imagingBBox);
    this.long = (0, _utils.getMeasurement)(attributes.long);
    this.orientation = (0, _utils.getStringOption)(attributes.orientation, ["portrait", "landscape"]);
    this.short = (0, _utils.getMeasurement)(attributes.short);
    this.stock = attributes.stock || "";
    this.trayIn = (0, _utils.getStringOption)(attributes.trayIn, ["auto", "delegate", "pageFront"]);
    this.trayOut = (0, _utils.getStringOption)(attributes.trayOut, ["auto", "delegate"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class Message extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "message", true);
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.text = new _xfa_object.XFAObjectArray();
  }
}
class NumericEdit extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "numericEdit", true);
    this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]);
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.border = null;
    this.comb = null;
    this.extras = null;
    this.margin = null;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    const style = (0, _html_utils.toStyle)(this, "border", "font", "margin");
    const field = this[_symbol_utils.$getParent]()[_symbol_utils.$getParent]();
    const html = {
      name: "input",
      attributes: {
        type: "text",
        fieldId: field[_symbol_utils.$uid],
        dataId: field[_symbol_utils.$data]?.[_symbol_utils.$uid] || field[_symbol_utils.$uid],
        class: ["xfaTextfield"],
        style,
        "aria-label": ariaLabel(field),
        "aria-required": false
      }
    };
    if (isRequired(field)) {
      html.attributes["aria-required"] = true;
      html.attributes.required = true;
    }
    return _utils.HTMLResult.success({
      name: "label",
      attributes: {
        class: ["xfaLabel"]
      },
      children: [html]
    });
  }
}
class Occur extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "occur", true);
    this.id = attributes.id || "";
    this.initial = attributes.initial !== "" ? (0, _utils.getInteger)({
      data: attributes.initial,
      defaultValue: "",
      validate: x => true
    }) : "";
    this.max = attributes.max !== "" ? (0, _utils.getInteger)({
      data: attributes.max,
      defaultValue: 1,
      validate: x => true
    }) : "";
    this.min = attributes.min !== "" ? (0, _utils.getInteger)({
      data: attributes.min,
      defaultValue: 1,
      validate: x => true
    }) : "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.extras = null;
  }
  [_symbol_utils.$clean]() {
    const parent = this[_symbol_utils.$getParent]();
    const originalMin = this.min;
    if (this.min === "") {
      this.min = parent instanceof PageArea || parent instanceof PageSet ? 0 : 1;
    }
    if (this.max === "") {
      if (originalMin === "") {
        this.max = parent instanceof PageArea || parent instanceof PageSet ? -1 : 1;
      } else {
        this.max = this.min;
      }
    }
    if (this.max !== -1 && this.max < this.min) {
      this.max = this.min;
    }
    if (this.initial === "") {
      this.initial = parent instanceof Template ? 1 : this.min;
    }
  }
}
class Oid extends _xfa_object.StringObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "oid");
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class Oids extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "oids", true);
    this.id = attributes.id || "";
    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.oid = new _xfa_object.XFAObjectArray();
  }
}
class Overflow extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "overflow");
    this.id = attributes.id || "";
    this.leader = attributes.leader || "";
    this.target = attributes.target || "";
    this.trailer = attributes.trailer || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
  [_symbol_utils.$getExtra]() {
    if (!this[_symbol_utils.$extra]) {
      const parent = this[_symbol_utils.$getParent]();
      const root = this[_symbol_utils.$getTemplateRoot]();
      const target = root[_symbol_utils.$searchNode](this.target, parent);
      const leader = root[_symbol_utils.$searchNode](this.leader, parent);
      const trailer = root[_symbol_utils.$searchNode](this.trailer, parent);
      this[_symbol_utils.$extra] = {
        target: target?.[0] || null,
        leader: leader?.[0] || null,
        trailer: trailer?.[0] || null,
        addLeader: false,
        addTrailer: false
      };
    }
    return this[_symbol_utils.$extra];
  }
}
class PageArea extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "pageArea", true);
    this.blankOrNotBlank = (0, _utils.getStringOption)(attributes.blankOrNotBlank, ["any", "blank", "notBlank"]);
    this.id = attributes.id || "";
    this.initialNumber = (0, _utils.getInteger)({
      data: attributes.initialNumber,
      defaultValue: 1,
      validate: x => true
    });
    this.name = attributes.name || "";
    this.numbered = (0, _utils.getInteger)({
      data: attributes.numbered,
      defaultValue: 1,
      validate: x => true
    });
    this.oddOrEven = (0, _utils.getStringOption)(attributes.oddOrEven, ["any", "even", "odd"]);
    this.pagePosition = (0, _utils.getStringOption)(attributes.pagePosition, ["any", "first", "last", "only", "rest"]);
    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.desc = null;
    this.extras = null;
    this.medium = null;
    this.occur = null;
    this.area = new _xfa_object.XFAObjectArray();
    this.contentArea = new _xfa_object.XFAObjectArray();
    this.draw = new _xfa_object.XFAObjectArray();
    this.exclGroup = new _xfa_object.XFAObjectArray();
    this.field = new _xfa_object.XFAObjectArray();
    this.subform = new _xfa_object.XFAObjectArray();
  }
  [_symbol_utils.$isUsable]() {
    if (!this[_symbol_utils.$extra]) {
      this[_symbol_utils.$extra] = {
        numberOfUse: 0
      };
      return true;
    }
    return !this.occur || this.occur.max === -1 || this[_symbol_utils.$extra].numberOfUse < this.occur.max;
  }
  [_symbol_utils.$cleanPage]() {
    delete this[_symbol_utils.$extra];
  }
  [_symbol_utils.$getNextPage]() {
    if (!this[_symbol_utils.$extra]) {
      this[_symbol_utils.$extra] = {
        numberOfUse: 0
      };
    }
    const parent = this[_symbol_utils.$getParent]();
    if (parent.relation === "orderedOccurrence") {
      if (this[_symbol_utils.$isUsable]()) {
        this[_symbol_utils.$extra].numberOfUse += 1;
        return this;
      }
    }
    return parent[_symbol_utils.$getNextPage]();
  }
  [_symbol_utils.$getAvailableSpace]() {
    return this[_symbol_utils.$extra].space || {
      width: 0,
      height: 0
    };
  }
  [_symbol_utils.$toHTML]() {
    if (!this[_symbol_utils.$extra]) {
      this[_symbol_utils.$extra] = {
        numberOfUse: 1
      };
    }
    const children = [];
    this[_symbol_utils.$extra].children = children;
    const style = Object.create(null);
    if (this.medium && this.medium.short && this.medium.long) {
      style.width = (0, _html_utils.measureToString)(this.medium.short);
      style.height = (0, _html_utils.measureToString)(this.medium.long);
      this[_symbol_utils.$extra].space = {
        width: this.medium.short,
        height: this.medium.long
      };
      if (this.medium.orientation === "landscape") {
        const x = style.width;
        style.width = style.height;
        style.height = x;
        this[_symbol_utils.$extra].space = {
          width: this.medium.long,
          height: this.medium.short
        };
      }
    } else {
      (0, _util.warn)("XFA - No medium specified in pageArea: please file a bug.");
    }
    this[_symbol_utils.$childrenToHTML]({
      filter: new Set(["area", "draw", "field", "subform"]),
      include: true
    });
    this[_symbol_utils.$childrenToHTML]({
      filter: new Set(["contentArea"]),
      include: true
    });
    return _utils.HTMLResult.success({
      name: "div",
      children,
      attributes: {
        class: ["xfaPage"],
        id: this[_symbol_utils.$uid],
        style,
        xfaName: this.name
      }
    });
  }
}
class PageSet extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "pageSet", true);
    this.duplexImposition = (0, _utils.getStringOption)(attributes.duplexImposition, ["longEdge", "shortEdge"]);
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.relation = (0, _utils.getStringOption)(attributes.relation, ["orderedOccurrence", "duplexPaginated", "simplexPaginated"]);
    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.extras = null;
    this.occur = null;
    this.pageArea = new _xfa_object.XFAObjectArray();
    this.pageSet = new _xfa_object.XFAObjectArray();
  }
  [_symbol_utils.$cleanPage]() {
    for (const page of this.pageArea.children) {
      page[_symbol_utils.$cleanPage]();
    }
    for (const page of this.pageSet.children) {
      page[_symbol_utils.$cleanPage]();
    }
  }
  [_symbol_utils.$isUsable]() {
    return !this.occur || this.occur.max === -1 || this[_symbol_utils.$extra].numberOfUse < this.occur.max;
  }
  [_symbol_utils.$getNextPage]() {
    if (!this[_symbol_utils.$extra]) {
      this[_symbol_utils.$extra] = {
        numberOfUse: 1,
        pageIndex: -1,
        pageSetIndex: -1
      };
    }
    if (this.relation === "orderedOccurrence") {
      if (this[_symbol_utils.$extra].pageIndex + 1 < this.pageArea.children.length) {
        this[_symbol_utils.$extra].pageIndex += 1;
        const pageArea = this.pageArea.children[this[_symbol_utils.$extra].pageIndex];
        return pageArea[_symbol_utils.$getNextPage]();
      }
      if (this[_symbol_utils.$extra].pageSetIndex + 1 < this.pageSet.children.length) {
        this[_symbol_utils.$extra].pageSetIndex += 1;
        return this.pageSet.children[this[_symbol_utils.$extra].pageSetIndex][_symbol_utils.$getNextPage]();
      }
      if (this[_symbol_utils.$isUsable]()) {
        this[_symbol_utils.$extra].numberOfUse += 1;
        this[_symbol_utils.$extra].pageIndex = -1;
        this[_symbol_utils.$extra].pageSetIndex = -1;
        return this[_symbol_utils.$getNextPage]();
      }
      const parent = this[_symbol_utils.$getParent]();
      if (parent instanceof PageSet) {
        return parent[_symbol_utils.$getNextPage]();
      }
      this[_symbol_utils.$cleanPage]();
      return this[_symbol_utils.$getNextPage]();
    }
    const pageNumber = this[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].pageNumber;
    const parity = pageNumber % 2 === 0 ? "even" : "odd";
    const position = pageNumber === 0 ? "first" : "rest";
    let page = this.pageArea.children.find(p => p.oddOrEven === parity && p.pagePosition === position);
    if (page) {
      return page;
    }
    page = this.pageArea.children.find(p => p.oddOrEven === "any" && p.pagePosition === position);
    if (page) {
      return page;
    }
    page = this.pageArea.children.find(p => p.oddOrEven === "any" && p.pagePosition === "any");
    if (page) {
      return page;
    }
    return this.pageArea.children[0];
  }
}
class Para extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "para", true);
    this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]);
    this.id = attributes.id || "";
    this.lineHeight = attributes.lineHeight ? (0, _utils.getMeasurement)(attributes.lineHeight, "0pt") : "";
    this.marginLeft = attributes.marginLeft ? (0, _utils.getMeasurement)(attributes.marginLeft, "0pt") : "";
    this.marginRight = attributes.marginRight ? (0, _utils.getMeasurement)(attributes.marginRight, "0pt") : "";
    this.orphans = (0, _utils.getInteger)({
      data: attributes.orphans,
      defaultValue: 0,
      validate: x => x >= 0
    });
    this.preserve = attributes.preserve || "";
    this.radixOffset = attributes.radixOffset ? (0, _utils.getMeasurement)(attributes.radixOffset, "0pt") : "";
    this.spaceAbove = attributes.spaceAbove ? (0, _utils.getMeasurement)(attributes.spaceAbove, "0pt") : "";
    this.spaceBelow = attributes.spaceBelow ? (0, _utils.getMeasurement)(attributes.spaceBelow, "0pt") : "";
    this.tabDefault = attributes.tabDefault ? (0, _utils.getMeasurement)(this.tabDefault) : "";
    this.tabStops = (attributes.tabStops || "").trim().split(/\s+/).map((x, i) => i % 2 === 1 ? (0, _utils.getMeasurement)(x) : x);
    this.textIndent = attributes.textIndent ? (0, _utils.getMeasurement)(attributes.textIndent, "0pt") : "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.vAlign = (0, _utils.getStringOption)(attributes.vAlign, ["top", "bottom", "middle"]);
    this.widows = (0, _utils.getInteger)({
      data: attributes.widows,
      defaultValue: 0,
      validate: x => x >= 0
    });
    this.hyphenation = null;
  }
  [_symbol_utils.$toStyle]() {
    const style = (0, _html_utils.toStyle)(this, "hAlign");
    if (this.marginLeft !== "") {
      style.paddingLeft = (0, _html_utils.measureToString)(this.marginLeft);
    }
    if (this.marginRight !== "") {
      style.paddingight = (0, _html_utils.measureToString)(this.marginRight);
    }
    if (this.spaceAbove !== "") {
      style.paddingTop = (0, _html_utils.measureToString)(this.spaceAbove);
    }
    if (this.spaceBelow !== "") {
      style.paddingBottom = (0, _html_utils.measureToString)(this.spaceBelow);
    }
    if (this.textIndent !== "") {
      style.textIndent = (0, _html_utils.measureToString)(this.textIndent);
      (0, _html_utils.fixTextIndent)(style);
    }
    if (this.lineHeight > 0) {
      style.lineHeight = (0, _html_utils.measureToString)(this.lineHeight);
    }
    if (this.tabDefault !== "") {
      style.tabSize = (0, _html_utils.measureToString)(this.tabDefault);
    }
    if (this.tabStops.length > 0) {}
    if (this.hyphenatation) {
      Object.assign(style, this.hyphenatation[_symbol_utils.$toStyle]());
    }
    return style;
  }
}
class PasswordEdit extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "passwordEdit", true);
    this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]);
    this.id = attributes.id || "";
    this.passwordChar = attributes.passwordChar || "*";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.border = null;
    this.extras = null;
    this.margin = null;
  }
}
class Pattern extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "pattern", true);
    this.id = attributes.id || "";
    this.type = (0, _utils.getStringOption)(attributes.type, ["crossHatch", "crossDiagonal", "diagonalLeft", "diagonalRight", "horizontal", "vertical"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.color = null;
    this.extras = null;
  }
  [_symbol_utils.$toStyle](startColor) {
    startColor = startColor ? startColor[_symbol_utils.$toStyle]() : "#FFFFFF";
    const endColor = this.color ? this.color[_symbol_utils.$toStyle]() : "#000000";
    const width = 5;
    const cmd = "repeating-linear-gradient";
    const colors = `${startColor},${startColor} ${width}px,${endColor} ${width}px,${endColor} ${2 * width}px`;
    switch (this.type) {
      case "crossHatch":
        return `${cmd}(to top,${colors}) ${cmd}(to right,${colors})`;
      case "crossDiagonal":
        return `${cmd}(45deg,${colors}) ${cmd}(-45deg,${colors})`;
      case "diagonalLeft":
        return `${cmd}(45deg,${colors})`;
      case "diagonalRight":
        return `${cmd}(-45deg,${colors})`;
      case "horizontal":
        return `${cmd}(to top,${colors})`;
      case "vertical":
        return `${cmd}(to right,${colors})`;
    }
    return "";
  }
}
class Picture extends _xfa_object.StringObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "picture");
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class Proto extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "proto", true);
    this.appearanceFilter = new _xfa_object.XFAObjectArray();
    this.arc = new _xfa_object.XFAObjectArray();
    this.area = new _xfa_object.XFAObjectArray();
    this.assist = new _xfa_object.XFAObjectArray();
    this.barcode = new _xfa_object.XFAObjectArray();
    this.bindItems = new _xfa_object.XFAObjectArray();
    this.bookend = new _xfa_object.XFAObjectArray();
    this.boolean = new _xfa_object.XFAObjectArray();
    this.border = new _xfa_object.XFAObjectArray();
    this.break = new _xfa_object.XFAObjectArray();
    this.breakAfter = new _xfa_object.XFAObjectArray();
    this.breakBefore = new _xfa_object.XFAObjectArray();
    this.button = new _xfa_object.XFAObjectArray();
    this.calculate = new _xfa_object.XFAObjectArray();
    this.caption = new _xfa_object.XFAObjectArray();
    this.certificate = new _xfa_object.XFAObjectArray();
    this.certificates = new _xfa_object.XFAObjectArray();
    this.checkButton = new _xfa_object.XFAObjectArray();
    this.choiceList = new _xfa_object.XFAObjectArray();
    this.color = new _xfa_object.XFAObjectArray();
    this.comb = new _xfa_object.XFAObjectArray();
    this.connect = new _xfa_object.XFAObjectArray();
    this.contentArea = new _xfa_object.XFAObjectArray();
    this.corner = new _xfa_object.XFAObjectArray();
    this.date = new _xfa_object.XFAObjectArray();
    this.dateTime = new _xfa_object.XFAObjectArray();
    this.dateTimeEdit = new _xfa_object.XFAObjectArray();
    this.decimal = new _xfa_object.XFAObjectArray();
    this.defaultUi = new _xfa_object.XFAObjectArray();
    this.desc = new _xfa_object.XFAObjectArray();
    this.digestMethod = new _xfa_object.XFAObjectArray();
    this.digestMethods = new _xfa_object.XFAObjectArray();
    this.draw = new _xfa_object.XFAObjectArray();
    this.edge = new _xfa_object.XFAObjectArray();
    this.encoding = new _xfa_object.XFAObjectArray();
    this.encodings = new _xfa_object.XFAObjectArray();
    this.encrypt = new _xfa_object.XFAObjectArray();
    this.encryptData = new _xfa_object.XFAObjectArray();
    this.encryption = new _xfa_object.XFAObjectArray();
    this.encryptionMethod = new _xfa_object.XFAObjectArray();
    this.encryptionMethods = new _xfa_object.XFAObjectArray();
    this.event = new _xfa_object.XFAObjectArray();
    this.exData = new _xfa_object.XFAObjectArray();
    this.exObject = new _xfa_object.XFAObjectArray();
    this.exclGroup = new _xfa_object.XFAObjectArray();
    this.execute = new _xfa_object.XFAObjectArray();
    this.extras = new _xfa_object.XFAObjectArray();
    this.field = new _xfa_object.XFAObjectArray();
    this.fill = new _xfa_object.XFAObjectArray();
    this.filter = new _xfa_object.XFAObjectArray();
    this.float = new _xfa_object.XFAObjectArray();
    this.font = new _xfa_object.XFAObjectArray();
    this.format = new _xfa_object.XFAObjectArray();
    this.handler = new _xfa_object.XFAObjectArray();
    this.hyphenation = new _xfa_object.XFAObjectArray();
    this.image = new _xfa_object.XFAObjectArray();
    this.imageEdit = new _xfa_object.XFAObjectArray();
    this.integer = new _xfa_object.XFAObjectArray();
    this.issuers = new _xfa_object.XFAObjectArray();
    this.items = new _xfa_object.XFAObjectArray();
    this.keep = new _xfa_object.XFAObjectArray();
    this.keyUsage = new _xfa_object.XFAObjectArray();
    this.line = new _xfa_object.XFAObjectArray();
    this.linear = new _xfa_object.XFAObjectArray();
    this.lockDocument = new _xfa_object.XFAObjectArray();
    this.manifest = new _xfa_object.XFAObjectArray();
    this.margin = new _xfa_object.XFAObjectArray();
    this.mdp = new _xfa_object.XFAObjectArray();
    this.medium = new _xfa_object.XFAObjectArray();
    this.message = new _xfa_object.XFAObjectArray();
    this.numericEdit = new _xfa_object.XFAObjectArray();
    this.occur = new _xfa_object.XFAObjectArray();
    this.oid = new _xfa_object.XFAObjectArray();
    this.oids = new _xfa_object.XFAObjectArray();
    this.overflow = new _xfa_object.XFAObjectArray();
    this.pageArea = new _xfa_object.XFAObjectArray();
    this.pageSet = new _xfa_object.XFAObjectArray();
    this.para = new _xfa_object.XFAObjectArray();
    this.passwordEdit = new _xfa_object.XFAObjectArray();
    this.pattern = new _xfa_object.XFAObjectArray();
    this.picture = new _xfa_object.XFAObjectArray();
    this.radial = new _xfa_object.XFAObjectArray();
    this.reason = new _xfa_object.XFAObjectArray();
    this.reasons = new _xfa_object.XFAObjectArray();
    this.rectangle = new _xfa_object.XFAObjectArray();
    this.ref = new _xfa_object.XFAObjectArray();
    this.script = new _xfa_object.XFAObjectArray();
    this.setProperty = new _xfa_object.XFAObjectArray();
    this.signData = new _xfa_object.XFAObjectArray();
    this.signature = new _xfa_object.XFAObjectArray();
    this.signing = new _xfa_object.XFAObjectArray();
    this.solid = new _xfa_object.XFAObjectArray();
    this.speak = new _xfa_object.XFAObjectArray();
    this.stipple = new _xfa_object.XFAObjectArray();
    this.subform = new _xfa_object.XFAObjectArray();
    this.subformSet = new _xfa_object.XFAObjectArray();
    this.subjectDN = new _xfa_object.XFAObjectArray();
    this.subjectDNs = new _xfa_object.XFAObjectArray();
    this.submit = new _xfa_object.XFAObjectArray();
    this.text = new _xfa_object.XFAObjectArray();
    this.textEdit = new _xfa_object.XFAObjectArray();
    this.time = new _xfa_object.XFAObjectArray();
    this.timeStamp = new _xfa_object.XFAObjectArray();
    this.toolTip = new _xfa_object.XFAObjectArray();
    this.traversal = new _xfa_object.XFAObjectArray();
    this.traverse = new _xfa_object.XFAObjectArray();
    this.ui = new _xfa_object.XFAObjectArray();
    this.validate = new _xfa_object.XFAObjectArray();
    this.value = new _xfa_object.XFAObjectArray();
    this.variables = new _xfa_object.XFAObjectArray();
  }
}
class Radial extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "radial", true);
    this.id = attributes.id || "";
    this.type = (0, _utils.getStringOption)(attributes.type, ["toEdge", "toCenter"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.color = null;
    this.extras = null;
  }
  [_symbol_utils.$toStyle](startColor) {
    startColor = startColor ? startColor[_symbol_utils.$toStyle]() : "#FFFFFF";
    const endColor = this.color ? this.color[_symbol_utils.$toStyle]() : "#000000";
    const colors = this.type === "toEdge" ? `${startColor},${endColor}` : `${endColor},${startColor}`;
    return `radial-gradient(circle at center, ${colors})`;
  }
}
class Reason extends _xfa_object.StringObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "reason");
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class Reasons extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "reasons", true);
    this.id = attributes.id || "";
    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.reason = new _xfa_object.XFAObjectArray();
  }
}
class Rectangle extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "rectangle", true);
    this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]);
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.corner = new _xfa_object.XFAObjectArray(4);
    this.edge = new _xfa_object.XFAObjectArray(4);
    this.fill = null;
  }
  [_symbol_utils.$toHTML]() {
    const edge = this.edge.children.length ? this.edge.children[0] : new Edge({});
    const edgeStyle = edge[_symbol_utils.$toStyle]();
    const style = Object.create(null);
    if (this.fill?.presence === "visible") {
      Object.assign(style, this.fill[_symbol_utils.$toStyle]());
    } else {
      style.fill = "transparent";
    }
    style.strokeWidth = (0, _html_utils.measureToString)(edge.presence === "visible" ? edge.thickness : 0);
    style.stroke = edgeStyle.color;
    const corner = this.corner.children.length ? this.corner.children[0] : new Corner({});
    const cornerStyle = corner[_symbol_utils.$toStyle]();
    const rect = {
      name: "rect",
      attributes: {
        xmlns: SVG_NS,
        width: "100%",
        height: "100%",
        x: 0,
        y: 0,
        rx: cornerStyle.radius,
        ry: cornerStyle.radius,
        style
      }
    };
    const svg = {
      name: "svg",
      children: [rect],
      attributes: {
        xmlns: SVG_NS,
        style: {
          overflow: "visible"
        },
        width: "100%",
        height: "100%"
      }
    };
    const parent = this[_symbol_utils.$getParent]()[_symbol_utils.$getParent]();
    if (hasMargin(parent)) {
      return _utils.HTMLResult.success({
        name: "div",
        attributes: {
          style: {
            display: "inline",
            width: "100%",
            height: "100%"
          }
        },
        children: [svg]
      });
    }
    svg.attributes.style.position = "absolute";
    return _utils.HTMLResult.success(svg);
  }
}
class RefElement extends _xfa_object.StringObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "ref");
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class Script extends _xfa_object.StringObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "script");
    this.binding = attributes.binding || "";
    this.contentType = attributes.contentType || "";
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.runAt = (0, _utils.getStringOption)(attributes.runAt, ["client", "both", "server"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class SetProperty extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "setProperty");
    this.connection = attributes.connection || "";
    this.ref = attributes.ref || "";
    this.target = attributes.target || "";
  }
}
exports.SetProperty = SetProperty;
class SignData extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "signData", true);
    this.id = attributes.id || "";
    this.operation = (0, _utils.getStringOption)(attributes.operation, ["sign", "clear", "verify"]);
    this.ref = attributes.ref || "";
    this.target = attributes.target || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.filter = null;
    this.manifest = null;
  }
}
class Signature extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "signature", true);
    this.id = attributes.id || "";
    this.type = (0, _utils.getStringOption)(attributes.type, ["PDF1.3", "PDF1.6"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.border = null;
    this.extras = null;
    this.filter = null;
    this.manifest = null;
    this.margin = null;
  }
}
class Signing extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "signing", true);
    this.id = attributes.id || "";
    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.certificate = new _xfa_object.XFAObjectArray();
  }
}
class Solid extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "solid", true);
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.extras = null;
  }
  [_symbol_utils.$toStyle](startColor) {
    return startColor ? startColor[_symbol_utils.$toStyle]() : "#FFFFFF";
  }
}
class Speak extends _xfa_object.StringObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "speak");
    this.disable = (0, _utils.getInteger)({
      data: attributes.disable,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.id = attributes.id || "";
    this.priority = (0, _utils.getStringOption)(attributes.priority, ["custom", "caption", "name", "toolTip"]);
    this.rid = attributes.rid || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class Stipple extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "stipple", true);
    this.id = attributes.id || "";
    this.rate = (0, _utils.getInteger)({
      data: attributes.rate,
      defaultValue: 50,
      validate: x => x >= 0 && x <= 100
    });
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.color = null;
    this.extras = null;
  }
  [_symbol_utils.$toStyle](bgColor) {
    const alpha = this.rate / 100;
    return _util.Util.makeHexColor(Math.round(bgColor.value.r * (1 - alpha) + this.value.r * alpha), Math.round(bgColor.value.g * (1 - alpha) + this.value.g * alpha), Math.round(bgColor.value.b * (1 - alpha) + this.value.b * alpha));
  }
}
class Subform extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "subform", true);
    this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", "readOnly"]);
    this.allowMacro = (0, _utils.getInteger)({
      data: attributes.allowMacro,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]);
    this.colSpan = (0, _utils.getInteger)({
      data: attributes.colSpan,
      defaultValue: 1,
      validate: n => n >= 1 || n === -1
    });
    this.columnWidths = (attributes.columnWidths || "").trim().split(/\s+/).map(x => x === "-1" ? -1 : (0, _utils.getMeasurement)(x));
    this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : "";
    this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]);
    this.id = attributes.id || "";
    this.layout = (0, _utils.getStringOption)(attributes.layout, ["position", "lr-tb", "rl-row", "rl-tb", "row", "table", "tb"]);
    this.locale = attributes.locale || "";
    this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt");
    this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt");
    this.mergeMode = (0, _utils.getStringOption)(attributes.mergeMode, ["consumeData", "matchTemplate"]);
    this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt");
    this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt");
    this.name = attributes.name || "";
    this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
    this.restoreState = (0, _utils.getStringOption)(attributes.restoreState, ["manual", "auto"]);
    this.scope = (0, _utils.getStringOption)(attributes.scope, ["name", "none"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : "";
    this.x = (0, _utils.getMeasurement)(attributes.x, "0pt");
    this.y = (0, _utils.getMeasurement)(attributes.y, "0pt");
    this.assist = null;
    this.bind = null;
    this.bookend = null;
    this.border = null;
    this.break = null;
    this.calculate = null;
    this.desc = null;
    this.extras = null;
    this.keep = null;
    this.margin = null;
    this.occur = null;
    this.overflow = null;
    this.pageSet = null;
    this.para = null;
    this.traversal = null;
    this.validate = null;
    this.variables = null;
    this.area = new _xfa_object.XFAObjectArray();
    this.breakAfter = new _xfa_object.XFAObjectArray();
    this.breakBefore = new _xfa_object.XFAObjectArray();
    this.connect = new _xfa_object.XFAObjectArray();
    this.draw = new _xfa_object.XFAObjectArray();
    this.event = new _xfa_object.XFAObjectArray();
    this.exObject = new _xfa_object.XFAObjectArray();
    this.exclGroup = new _xfa_object.XFAObjectArray();
    this.field = new _xfa_object.XFAObjectArray();
    this.proto = new _xfa_object.XFAObjectArray();
    this.setProperty = new _xfa_object.XFAObjectArray();
    this.subform = new _xfa_object.XFAObjectArray();
    this.subformSet = new _xfa_object.XFAObjectArray();
  }
  [_symbol_utils.$getSubformParent]() {
    const parent = this[_symbol_utils.$getParent]();
    if (parent instanceof SubformSet) {
      return parent[_symbol_utils.$getSubformParent]();
    }
    return parent;
  }
  [_symbol_utils.$isBindable]() {
    return true;
  }
  [_symbol_utils.$isThereMoreWidth]() {
    return this.layout.endsWith("-tb") && this[_symbol_utils.$extra].attempt === 0 && this[_symbol_utils.$extra].numberInLine > 0 || this[_symbol_utils.$getParent]()[_symbol_utils.$isThereMoreWidth]();
  }
  *[_symbol_utils.$getContainedChildren]() {
    yield* getContainedChildren(this);
  }
  [_symbol_utils.$flushHTML]() {
    return (0, _layout.flushHTML)(this);
  }
  [_symbol_utils.$addHTML](html, bbox) {
    (0, _layout.addHTML)(this, html, bbox);
  }
  [_symbol_utils.$getAvailableSpace]() {
    return (0, _layout.getAvailableSpace)(this);
  }
  [_symbol_utils.$isSplittable]() {
    const parent = this[_symbol_utils.$getSubformParent]();
    if (!parent[_symbol_utils.$isSplittable]()) {
      return false;
    }
    if (this[_symbol_utils.$extra]._isSplittable !== undefined) {
      return this[_symbol_utils.$extra]._isSplittable;
    }
    if (this.layout === "position" || this.layout.includes("row")) {
      this[_symbol_utils.$extra]._isSplittable = false;
      return false;
    }
    if (this.keep && this.keep.intact !== "none") {
      this[_symbol_utils.$extra]._isSplittable = false;
      return false;
    }
    if (parent.layout?.endsWith("-tb") && parent[_symbol_utils.$extra].numberInLine !== 0) {
      return false;
    }
    this[_symbol_utils.$extra]._isSplittable = true;
    return true;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    setTabIndex(this);
    if (this.break) {
      if (this.break.after !== "auto" || this.break.afterTarget !== "") {
        const node = new BreakAfter({
          targetType: this.break.after,
          target: this.break.afterTarget,
          startNew: this.break.startNew.toString()
        });
        node[_symbol_utils.$globalData] = this[_symbol_utils.$globalData];
        this[_symbol_utils.$appendChild](node);
        this.breakAfter.push(node);
      }
      if (this.break.before !== "auto" || this.break.beforeTarget !== "") {
        const node = new BreakBefore({
          targetType: this.break.before,
          target: this.break.beforeTarget,
          startNew: this.break.startNew.toString()
        });
        node[_symbol_utils.$globalData] = this[_symbol_utils.$globalData];
        this[_symbol_utils.$appendChild](node);
        this.breakBefore.push(node);
      }
      if (this.break.overflowTarget !== "") {
        const node = new Overflow({
          target: this.break.overflowTarget,
          leader: this.break.overflowLeader,
          trailer: this.break.overflowTrailer
        });
        node[_symbol_utils.$globalData] = this[_symbol_utils.$globalData];
        this[_symbol_utils.$appendChild](node);
        this.overflow.push(node);
      }
      this[_symbol_utils.$removeChild](this.break);
      this.break = null;
    }
    if (this.presence === "hidden" || this.presence === "inactive") {
      return _utils.HTMLResult.EMPTY;
    }
    if (this.breakBefore.children.length > 1 || this.breakAfter.children.length > 1) {
      (0, _util.warn)("XFA - Several breakBefore or breakAfter in subforms: please file a bug.");
    }
    if (this.breakBefore.children.length >= 1) {
      const breakBefore = this.breakBefore.children[0];
      if (handleBreak(breakBefore)) {
        return _utils.HTMLResult.breakNode(breakBefore);
      }
    }
    if (this[_symbol_utils.$extra]?.afterBreakAfter) {
      return _utils.HTMLResult.EMPTY;
    }
    (0, _html_utils.fixDimensions)(this);
    const children = [];
    const attributes = {
      id: this[_symbol_utils.$uid],
      class: []
    };
    (0, _html_utils.setAccess)(this, attributes.class);
    if (!this[_symbol_utils.$extra]) {
      this[_symbol_utils.$extra] = Object.create(null);
    }
    Object.assign(this[_symbol_utils.$extra], {
      children,
      line: null,
      attributes,
      attempt: 0,
      numberInLine: 0,
      availableSpace: {
        width: Math.min(this.w || Infinity, availableSpace.width),
        height: Math.min(this.h || Infinity, availableSpace.height)
      },
      width: 0,
      height: 0,
      prevHeight: 0,
      currentWidth: 0
    });
    const root = this[_symbol_utils.$getTemplateRoot]();
    const savedNoLayoutFailure = root[_symbol_utils.$extra].noLayoutFailure;
    const isSplittable = this[_symbol_utils.$isSplittable]();
    if (!isSplittable) {
      setFirstUnsplittable(this);
    }
    if (!(0, _layout.checkDimensions)(this, availableSpace)) {
      return _utils.HTMLResult.FAILURE;
    }
    const filter = new Set(["area", "draw", "exclGroup", "field", "subform", "subformSet"]);
    if (this.layout.includes("row")) {
      const columnWidths = this[_symbol_utils.$getSubformParent]().columnWidths;
      if (Array.isArray(columnWidths) && columnWidths.length > 0) {
        this[_symbol_utils.$extra].columnWidths = columnWidths;
        this[_symbol_utils.$extra].currentColumn = 0;
      }
    }
    const style = (0, _html_utils.toStyle)(this, "anchorType", "dimensions", "position", "presence", "border", "margin", "hAlign");
    const classNames = ["xfaSubform"];
    const cl = (0, _html_utils.layoutClass)(this);
    if (cl) {
      classNames.push(cl);
    }
    attributes.style = style;
    attributes.class = classNames;
    if (this.name) {
      attributes.xfaName = this.name;
    }
    if (this.overflow) {
      const overflowExtra = this.overflow[_symbol_utils.$getExtra]();
      if (overflowExtra.addLeader) {
        overflowExtra.addLeader = false;
        handleOverflow(this, overflowExtra.leader, availableSpace);
      }
    }
    this[_symbol_utils.$pushPara]();
    const isLrTb = this.layout === "lr-tb" || this.layout === "rl-tb";
    const maxRun = isLrTb ? MAX_ATTEMPTS_FOR_LRTB_LAYOUT : 1;
    for (; this[_symbol_utils.$extra].attempt < maxRun; this[_symbol_utils.$extra].attempt++) {
      if (isLrTb && this[_symbol_utils.$extra].attempt === MAX_ATTEMPTS_FOR_LRTB_LAYOUT - 1) {
        this[_symbol_utils.$extra].numberInLine = 0;
      }
      const result = this[_symbol_utils.$childrenToHTML]({
        filter,
        include: true
      });
      if (result.success) {
        break;
      }
      if (result.isBreak()) {
        this[_symbol_utils.$popPara]();
        return result;
      }
      if (isLrTb && this[_symbol_utils.$extra].attempt === 0 && this[_symbol_utils.$extra].numberInLine === 0 && !root[_symbol_utils.$extra].noLayoutFailure) {
        this[_symbol_utils.$extra].attempt = maxRun;
        break;
      }
    }
    this[_symbol_utils.$popPara]();
    if (!isSplittable) {
      unsetFirstUnsplittable(this);
    }
    root[_symbol_utils.$extra].noLayoutFailure = savedNoLayoutFailure;
    if (this[_symbol_utils.$extra].attempt === maxRun) {
      if (this.overflow) {
        this[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].overflowNode = this.overflow;
      }
      if (!isSplittable) {
        delete this[_symbol_utils.$extra];
      }
      return _utils.HTMLResult.FAILURE;
    }
    if (this.overflow) {
      const overflowExtra = this.overflow[_symbol_utils.$getExtra]();
      if (overflowExtra.addTrailer) {
        overflowExtra.addTrailer = false;
        handleOverflow(this, overflowExtra.trailer, availableSpace);
      }
    }
    let marginH = 0;
    let marginV = 0;
    if (this.margin) {
      marginH = this.margin.leftInset + this.margin.rightInset;
      marginV = this.margin.topInset + this.margin.bottomInset;
    }
    const width = Math.max(this[_symbol_utils.$extra].width + marginH, this.w || 0);
    const height = Math.max(this[_symbol_utils.$extra].height + marginV, this.h || 0);
    const bbox = [this.x, this.y, width, height];
    if (this.w === "") {
      style.width = (0, _html_utils.measureToString)(width);
    }
    if (this.h === "") {
      style.height = (0, _html_utils.measureToString)(height);
    }
    if ((style.width === "0px" || style.height === "0px") && children.length === 0) {
      return _utils.HTMLResult.EMPTY;
    }
    const html = {
      name: "div",
      attributes,
      children
    };
    applyAssist(this, attributes);
    const result = _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox);
    if (this.breakAfter.children.length >= 1) {
      const breakAfter = this.breakAfter.children[0];
      if (handleBreak(breakAfter)) {
        this[_symbol_utils.$extra].afterBreakAfter = result;
        return _utils.HTMLResult.breakNode(breakAfter);
      }
    }
    delete this[_symbol_utils.$extra];
    return result;
  }
}
class SubformSet extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "subformSet", true);
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.relation = (0, _utils.getStringOption)(attributes.relation, ["ordered", "choice", "unordered"]);
    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.bookend = null;
    this.break = null;
    this.desc = null;
    this.extras = null;
    this.occur = null;
    this.overflow = null;
    this.breakAfter = new _xfa_object.XFAObjectArray();
    this.breakBefore = new _xfa_object.XFAObjectArray();
    this.subform = new _xfa_object.XFAObjectArray();
    this.subformSet = new _xfa_object.XFAObjectArray();
  }
  *[_symbol_utils.$getContainedChildren]() {
    yield* getContainedChildren(this);
  }
  [_symbol_utils.$getSubformParent]() {
    let parent = this[_symbol_utils.$getParent]();
    while (!(parent instanceof Subform)) {
      parent = parent[_symbol_utils.$getParent]();
    }
    return parent;
  }
  [_symbol_utils.$isBindable]() {
    return true;
  }
}
class SubjectDN extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "subjectDN");
    this.delimiter = attributes.delimiter || ",";
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
  [_symbol_utils.$finalize]() {
    this[_symbol_utils.$content] = new Map(this[_symbol_utils.$content].split(this.delimiter).map(kv => {
      kv = kv.split("=", 2);
      kv[0] = kv[0].trim();
      return kv;
    }));
  }
}
class SubjectDNs extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "subjectDNs", true);
    this.id = attributes.id || "";
    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.subjectDN = new _xfa_object.XFAObjectArray();
  }
}
class Submit extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "submit", true);
    this.embedPDF = (0, _utils.getInteger)({
      data: attributes.embedPDF,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.format = (0, _utils.getStringOption)(attributes.format, ["xdp", "formdata", "pdf", "urlencoded", "xfd", "xml"]);
    this.id = attributes.id || "";
    this.target = attributes.target || "";
    this.textEncoding = (0, _utils.getKeyword)({
      data: attributes.textEncoding ? attributes.textEncoding.toLowerCase() : "",
      defaultValue: "",
      validate: k => ["utf-8", "big-five", "fontspecific", "gbk", "gb-18030", "gb-2312", "ksc-5601", "none", "shift-jis", "ucs-2", "utf-16"].includes(k) || k.match(/iso-8859-\d{2}/)
    });
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.xdpContent = attributes.xdpContent || "";
    this.encrypt = null;
    this.encryptData = new _xfa_object.XFAObjectArray();
    this.signData = new _xfa_object.XFAObjectArray();
  }
}
class Template extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "template", true);
    this.baseProfile = (0, _utils.getStringOption)(attributes.baseProfile, ["full", "interactiveForms"]);
    this.extras = null;
    this.subform = new _xfa_object.XFAObjectArray();
  }
  [_symbol_utils.$finalize]() {
    if (this.subform.children.length === 0) {
      (0, _util.warn)("XFA - No subforms in template node.");
    }
    if (this.subform.children.length >= 2) {
      (0, _util.warn)("XFA - Several subforms in template node: please file a bug.");
    }
    this[_symbol_utils.$tabIndex] = DEFAULT_TAB_INDEX;
  }
  [_symbol_utils.$isSplittable]() {
    return true;
  }
  [_symbol_utils.$searchNode](expr, container) {
    if (expr.startsWith("#")) {
      return [this[_symbol_utils.$ids].get(expr.slice(1))];
    }
    return (0, _som.searchNode)(this, container, expr, true, true);
  }
  *[_symbol_utils.$toPages]() {
    if (!this.subform.children.length) {
      return _utils.HTMLResult.success({
        name: "div",
        children: []
      });
    }
    this[_symbol_utils.$extra] = {
      overflowNode: null,
      firstUnsplittable: null,
      currentContentArea: null,
      currentPageArea: null,
      noLayoutFailure: false,
      pageNumber: 1,
      pagePosition: "first",
      oddOrEven: "odd",
      blankOrNotBlank: "nonBlank",
      paraStack: []
    };
    const root = this.subform.children[0];
    root.pageSet[_symbol_utils.$cleanPage]();
    const pageAreas = root.pageSet.pageArea.children;
    const mainHtml = {
      name: "div",
      children: []
    };
    let pageArea = null;
    let breakBefore = null;
    let breakBeforeTarget = null;
    if (root.breakBefore.children.length >= 1) {
      breakBefore = root.breakBefore.children[0];
      breakBeforeTarget = breakBefore.target;
    } else if (root.subform.children.length >= 1 && root.subform.children[0].breakBefore.children.length >= 1) {
      breakBefore = root.subform.children[0].breakBefore.children[0];
      breakBeforeTarget = breakBefore.target;
    } else if (root.break?.beforeTarget) {
      breakBefore = root.break;
      breakBeforeTarget = breakBefore.beforeTarget;
    } else if (root.subform.children.length >= 1 && root.subform.children[0].break?.beforeTarget) {
      breakBefore = root.subform.children[0].break;
      breakBeforeTarget = breakBefore.beforeTarget;
    }
    if (breakBefore) {
      const target = this[_symbol_utils.$searchNode](breakBeforeTarget, breakBefore[_symbol_utils.$getParent]());
      if (target instanceof PageArea) {
        pageArea = target;
        breakBefore[_symbol_utils.$extra] = {};
      }
    }
    if (!pageArea) {
      pageArea = pageAreas[0];
    }
    pageArea[_symbol_utils.$extra] = {
      numberOfUse: 1
    };
    const pageAreaParent = pageArea[_symbol_utils.$getParent]();
    pageAreaParent[_symbol_utils.$extra] = {
      numberOfUse: 1,
      pageIndex: pageAreaParent.pageArea.children.indexOf(pageArea),
      pageSetIndex: 0
    };
    let targetPageArea;
    let leader = null;
    let trailer = null;
    let hasSomething = true;
    let hasSomethingCounter = 0;
    let startIndex = 0;
    while (true) {
      if (!hasSomething) {
        mainHtml.children.pop();
        if (++hasSomethingCounter === MAX_EMPTY_PAGES) {
          (0, _util.warn)("XFA - Something goes wrong: please file a bug.");
          return mainHtml;
        }
      } else {
        hasSomethingCounter = 0;
      }
      targetPageArea = null;
      this[_symbol_utils.$extra].currentPageArea = pageArea;
      const page = pageArea[_symbol_utils.$toHTML]().html;
      mainHtml.children.push(page);
      if (leader) {
        this[_symbol_utils.$extra].noLayoutFailure = true;
        page.children.push(leader[_symbol_utils.$toHTML](pageArea[_symbol_utils.$extra].space).html);
        leader = null;
      }
      if (trailer) {
        this[_symbol_utils.$extra].noLayoutFailure = true;
        page.children.push(trailer[_symbol_utils.$toHTML](pageArea[_symbol_utils.$extra].space).html);
        trailer = null;
      }
      const contentAreas = pageArea.contentArea.children;
      const htmlContentAreas = page.children.filter(node => node.attributes.class.includes("xfaContentarea"));
      hasSomething = false;
      this[_symbol_utils.$extra].firstUnsplittable = null;
      this[_symbol_utils.$extra].noLayoutFailure = false;
      const flush = index => {
        const html = root[_symbol_utils.$flushHTML]();
        if (html) {
          hasSomething ||= html.children?.length > 0;
          htmlContentAreas[index].children.push(html);
        }
      };
      for (let i = startIndex, ii = contentAreas.length; i < ii; i++) {
        const contentArea = this[_symbol_utils.$extra].currentContentArea = contentAreas[i];
        const space = {
          width: contentArea.w,
          height: contentArea.h
        };
        startIndex = 0;
        if (leader) {
          htmlContentAreas[i].children.push(leader[_symbol_utils.$toHTML](space).html);
          leader = null;
        }
        if (trailer) {
          htmlContentAreas[i].children.push(trailer[_symbol_utils.$toHTML](space).html);
          trailer = null;
        }
        const html = root[_symbol_utils.$toHTML](space);
        if (html.success) {
          if (html.html) {
            hasSomething ||= html.html.children?.length > 0;
            htmlContentAreas[i].children.push(html.html);
          } else if (!hasSomething && mainHtml.children.length > 1) {
            mainHtml.children.pop();
          }
          return mainHtml;
        }
        if (html.isBreak()) {
          const node = html.breakNode;
          flush(i);
          if (node.targetType === "auto") {
            continue;
          }
          if (node.leader) {
            leader = this[_symbol_utils.$searchNode](node.leader, node[_symbol_utils.$getParent]());
            leader = leader ? leader[0] : null;
          }
          if (node.trailer) {
            trailer = this[_symbol_utils.$searchNode](node.trailer, node[_symbol_utils.$getParent]());
            trailer = trailer ? trailer[0] : null;
          }
          if (node.targetType === "pageArea") {
            targetPageArea = node[_symbol_utils.$extra].target;
            i = Infinity;
          } else if (!node[_symbol_utils.$extra].target) {
            i = node[_symbol_utils.$extra].index;
          } else {
            targetPageArea = node[_symbol_utils.$extra].target;
            startIndex = node[_symbol_utils.$extra].index + 1;
            i = Infinity;
          }
          continue;
        }
        if (this[_symbol_utils.$extra].overflowNode) {
          const node = this[_symbol_utils.$extra].overflowNode;
          this[_symbol_utils.$extra].overflowNode = null;
          const overflowExtra = node[_symbol_utils.$getExtra]();
          const target = overflowExtra.target;
          overflowExtra.addLeader = overflowExtra.leader !== null;
          overflowExtra.addTrailer = overflowExtra.trailer !== null;
          flush(i);
          const currentIndex = i;
          i = Infinity;
          if (target instanceof PageArea) {
            targetPageArea = target;
          } else if (target instanceof ContentArea) {
            const index = contentAreas.indexOf(target);
            if (index !== -1) {
              if (index > currentIndex) {
                i = index - 1;
              } else {
                startIndex = index;
              }
            } else {
              targetPageArea = target[_symbol_utils.$getParent]();
              startIndex = targetPageArea.contentArea.children.indexOf(target);
            }
          }
          continue;
        }
        flush(i);
      }
      this[_symbol_utils.$extra].pageNumber += 1;
      if (targetPageArea) {
        if (targetPageArea[_symbol_utils.$isUsable]()) {
          targetPageArea[_symbol_utils.$extra].numberOfUse += 1;
        } else {
          targetPageArea = null;
        }
      }
      pageArea = targetPageArea || pageArea[_symbol_utils.$getNextPage]();
      yield null;
    }
  }
}
exports.Template = Template;
class Text extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "text");
    this.id = attributes.id || "";
    this.maxChars = (0, _utils.getInteger)({
      data: attributes.maxChars,
      defaultValue: 0,
      validate: x => x >= 0
    });
    this.name = attributes.name || "";
    this.rid = attributes.rid || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
  [_symbol_utils.$acceptWhitespace]() {
    return true;
  }
  [_symbol_utils.$onChild](child) {
    if (child[_symbol_utils.$namespaceId] === _namespaces.NamespaceIds.xhtml.id) {
      this[_symbol_utils.$content] = child;
      return true;
    }
    (0, _util.warn)(`XFA - Invalid content in Text: ${child[_symbol_utils.$nodeName]}.`);
    return false;
  }
  [_symbol_utils.$onText](str) {
    if (this[_symbol_utils.$content] instanceof _xfa_object.XFAObject) {
      return;
    }
    super[_symbol_utils.$onText](str);
  }
  [_symbol_utils.$finalize]() {
    if (typeof this[_symbol_utils.$content] === "string") {
      this[_symbol_utils.$content] = this[_symbol_utils.$content].replaceAll("\r\n", "\n");
    }
  }
  [_symbol_utils.$getExtra]() {
    if (typeof this[_symbol_utils.$content] === "string") {
      return this[_symbol_utils.$content].split(/[\u2029\u2028\n]/).reduce((acc, line) => {
        if (line) {
          acc.push(line);
        }
        return acc;
      }, []).join("\n");
    }
    return this[_symbol_utils.$content][_symbol_utils.$text]();
  }
  [_symbol_utils.$toHTML](availableSpace) {
    if (typeof this[_symbol_utils.$content] === "string") {
      const html = valueToHtml(this[_symbol_utils.$content]).html;
      if (this[_symbol_utils.$content].includes("\u2029")) {
        html.name = "div";
        html.children = [];
        this[_symbol_utils.$content].split("\u2029").map(para => para.split(/[\u2028\n]/).reduce((acc, line) => {
          acc.push({
            name: "span",
            value: line
          }, {
            name: "br"
          });
          return acc;
        }, [])).forEach(lines => {
          html.children.push({
            name: "p",
            children: lines
          });
        });
      } else if (/[\u2028\n]/.test(this[_symbol_utils.$content])) {
        html.name = "div";
        html.children = [];
        this[_symbol_utils.$content].split(/[\u2028\n]/).forEach(line => {
          html.children.push({
            name: "span",
            value: line
          }, {
            name: "br"
          });
        });
      }
      return _utils.HTMLResult.success(html);
    }
    return this[_symbol_utils.$content][_symbol_utils.$toHTML](availableSpace);
  }
}
exports.Text = Text;
class TextEdit extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "textEdit", true);
    this.allowRichText = (0, _utils.getInteger)({
      data: attributes.allowRichText,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]);
    this.id = attributes.id || "";
    this.multiLine = (0, _utils.getInteger)({
      data: attributes.multiLine,
      defaultValue: "",
      validate: x => x === 0 || x === 1
    });
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.vScrollPolicy = (0, _utils.getStringOption)(attributes.vScrollPolicy, ["auto", "off", "on"]);
    this.border = null;
    this.comb = null;
    this.extras = null;
    this.margin = null;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    const style = (0, _html_utils.toStyle)(this, "border", "font", "margin");
    let html;
    const field = this[_symbol_utils.$getParent]()[_symbol_utils.$getParent]();
    if (this.multiLine === "") {
      this.multiLine = field instanceof Draw ? 1 : 0;
    }
    if (this.multiLine === 1) {
      html = {
        name: "textarea",
        attributes: {
          dataId: field[_symbol_utils.$data]?.[_symbol_utils.$uid] || field[_symbol_utils.$uid],
          fieldId: field[_symbol_utils.$uid],
          class: ["xfaTextfield"],
          style,
          "aria-label": ariaLabel(field),
          "aria-required": false
        }
      };
    } else {
      html = {
        name: "input",
        attributes: {
          type: "text",
          dataId: field[_symbol_utils.$data]?.[_symbol_utils.$uid] || field[_symbol_utils.$uid],
          fieldId: field[_symbol_utils.$uid],
          class: ["xfaTextfield"],
          style,
          "aria-label": ariaLabel(field),
          "aria-required": false
        }
      };
    }
    if (isRequired(field)) {
      html.attributes["aria-required"] = true;
      html.attributes.required = true;
    }
    return _utils.HTMLResult.success({
      name: "label",
      attributes: {
        class: ["xfaLabel"]
      },
      children: [html]
    });
  }
}
class Time extends _xfa_object.StringObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "time");
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
  [_symbol_utils.$finalize]() {
    const date = this[_symbol_utils.$content].trim();
    this[_symbol_utils.$content] = date ? new Date(date) : null;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    return valueToHtml(this[_symbol_utils.$content] ? this[_symbol_utils.$content].toString() : "");
  }
}
class TimeStamp extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "timeStamp");
    this.id = attributes.id || "";
    this.server = attributes.server || "";
    this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class ToolTip extends _xfa_object.StringObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "toolTip");
    this.id = attributes.id || "";
    this.rid = attributes.rid || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class Traversal extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "traversal", true);
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.extras = null;
    this.traverse = new _xfa_object.XFAObjectArray();
  }
}
class Traverse extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "traverse", true);
    this.id = attributes.id || "";
    this.operation = (0, _utils.getStringOption)(attributes.operation, ["next", "back", "down", "first", "left", "right", "up"]);
    this.ref = attributes.ref || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.extras = null;
    this.script = null;
  }
  get name() {
    return this.operation;
  }
  [_symbol_utils.$isTransparent]() {
    return false;
  }
}
class Ui extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "ui", true);
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.extras = null;
    this.picture = null;
    this.barcode = null;
    this.button = null;
    this.checkButton = null;
    this.choiceList = null;
    this.dateTimeEdit = null;
    this.defaultUi = null;
    this.imageEdit = null;
    this.numericEdit = null;
    this.passwordEdit = null;
    this.signature = null;
    this.textEdit = null;
  }
  [_symbol_utils.$getExtra]() {
    if (this[_symbol_utils.$extra] === undefined) {
      for (const name of Object.getOwnPropertyNames(this)) {
        if (name === "extras" || name === "picture") {
          continue;
        }
        const obj = this[name];
        if (!(obj instanceof _xfa_object.XFAObject)) {
          continue;
        }
        this[_symbol_utils.$extra] = obj;
        return obj;
      }
      this[_symbol_utils.$extra] = null;
    }
    return this[_symbol_utils.$extra];
  }
  [_symbol_utils.$toHTML](availableSpace) {
    const obj = this[_symbol_utils.$getExtra]();
    if (obj) {
      return obj[_symbol_utils.$toHTML](availableSpace);
    }
    return _utils.HTMLResult.EMPTY;
  }
}
class Validate extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "validate", true);
    this.formatTest = (0, _utils.getStringOption)(attributes.formatTest, ["warning", "disabled", "error"]);
    this.id = attributes.id || "";
    this.nullTest = (0, _utils.getStringOption)(attributes.nullTest, ["disabled", "error", "warning"]);
    this.scriptTest = (0, _utils.getStringOption)(attributes.scriptTest, ["error", "disabled", "warning"]);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.extras = null;
    this.message = null;
    this.picture = null;
    this.script = null;
  }
}
class Value extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "value", true);
    this.id = attributes.id || "";
    this.override = (0, _utils.getInteger)({
      data: attributes.override,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.relevant = (0, _utils.getRelevant)(attributes.relevant);
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.arc = null;
    this.boolean = null;
    this.date = null;
    this.dateTime = null;
    this.decimal = null;
    this.exData = null;
    this.float = null;
    this.image = null;
    this.integer = null;
    this.line = null;
    this.rectangle = null;
    this.text = null;
    this.time = null;
  }
  [_symbol_utils.$setValue](value) {
    const parent = this[_symbol_utils.$getParent]();
    if (parent instanceof Field) {
      if (parent.ui?.imageEdit) {
        if (!this.image) {
          this.image = new Image({});
          this[_symbol_utils.$appendChild](this.image);
        }
        this.image[_symbol_utils.$content] = value[_symbol_utils.$content];
        return;
      }
    }
    const valueName = value[_symbol_utils.$nodeName];
    if (this[valueName] !== null) {
      this[valueName][_symbol_utils.$content] = value[_symbol_utils.$content];
      return;
    }
    for (const name of Object.getOwnPropertyNames(this)) {
      const obj = this[name];
      if (obj instanceof _xfa_object.XFAObject) {
        this[name] = null;
        this[_symbol_utils.$removeChild](obj);
      }
    }
    this[value[_symbol_utils.$nodeName]] = value;
    this[_symbol_utils.$appendChild](value);
  }
  [_symbol_utils.$text]() {
    if (this.exData) {
      if (typeof this.exData[_symbol_utils.$content] === "string") {
        return this.exData[_symbol_utils.$content].trim();
      }
      return this.exData[_symbol_utils.$content][_symbol_utils.$text]().trim();
    }
    for (const name of Object.getOwnPropertyNames(this)) {
      if (name === "image") {
        continue;
      }
      const obj = this[name];
      if (obj instanceof _xfa_object.XFAObject) {
        return (obj[_symbol_utils.$content] || "").toString().trim();
      }
    }
    return null;
  }
  [_symbol_utils.$toHTML](availableSpace) {
    for (const name of Object.getOwnPropertyNames(this)) {
      const obj = this[name];
      if (!(obj instanceof _xfa_object.XFAObject)) {
        continue;
      }
      return obj[_symbol_utils.$toHTML](availableSpace);
    }
    return _utils.HTMLResult.EMPTY;
  }
}
exports.Value = Value;
class Variables extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(TEMPLATE_NS_ID, "variables", true);
    this.id = attributes.id || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
    this.boolean = new _xfa_object.XFAObjectArray();
    this.date = new _xfa_object.XFAObjectArray();
    this.dateTime = new _xfa_object.XFAObjectArray();
    this.decimal = new _xfa_object.XFAObjectArray();
    this.exData = new _xfa_object.XFAObjectArray();
    this.float = new _xfa_object.XFAObjectArray();
    this.image = new _xfa_object.XFAObjectArray();
    this.integer = new _xfa_object.XFAObjectArray();
    this.manifest = new _xfa_object.XFAObjectArray();
    this.script = new _xfa_object.XFAObjectArray();
    this.text = new _xfa_object.XFAObjectArray();
    this.time = new _xfa_object.XFAObjectArray();
  }
  [_symbol_utils.$isTransparent]() {
    return true;
  }
}
class TemplateNamespace {
  static [_namespaces.$buildXFAObject](name, attributes) {
    if (TemplateNamespace.hasOwnProperty(name)) {
      const node = TemplateNamespace[name](attributes);
      node[_symbol_utils.$setSetAttributes](attributes);
      return node;
    }
    return undefined;
  }
  static appearanceFilter(attrs) {
    return new AppearanceFilter(attrs);
  }
  static arc(attrs) {
    return new Arc(attrs);
  }
  static area(attrs) {
    return new Area(attrs);
  }
  static assist(attrs) {
    return new Assist(attrs);
  }
  static barcode(attrs) {
    return new Barcode(attrs);
  }
  static bind(attrs) {
    return new Bind(attrs);
  }
  static bindItems(attrs) {
    return new BindItems(attrs);
  }
  static bookend(attrs) {
    return new Bookend(attrs);
  }
  static boolean(attrs) {
    return new BooleanElement(attrs);
  }
  static border(attrs) {
    return new Border(attrs);
  }
  static break(attrs) {
    return new Break(attrs);
  }
  static breakAfter(attrs) {
    return new BreakAfter(attrs);
  }
  static breakBefore(attrs) {
    return new BreakBefore(attrs);
  }
  static button(attrs) {
    return new Button(attrs);
  }
  static calculate(attrs) {
    return new Calculate(attrs);
  }
  static caption(attrs) {
    return new Caption(attrs);
  }
  static certificate(attrs) {
    return new Certificate(attrs);
  }
  static certificates(attrs) {
    return new Certificates(attrs);
  }
  static checkButton(attrs) {
    return new CheckButton(attrs);
  }
  static choiceList(attrs) {
    return new ChoiceList(attrs);
  }
  static color(attrs) {
    return new Color(attrs);
  }
  static comb(attrs) {
    return new Comb(attrs);
  }
  static connect(attrs) {
    return new Connect(attrs);
  }
  static contentArea(attrs) {
    return new ContentArea(attrs);
  }
  static corner(attrs) {
    return new Corner(attrs);
  }
  static date(attrs) {
    return new DateElement(attrs);
  }
  static dateTime(attrs) {
    return new DateTime(attrs);
  }
  static dateTimeEdit(attrs) {
    return new DateTimeEdit(attrs);
  }
  static decimal(attrs) {
    return new Decimal(attrs);
  }
  static defaultUi(attrs) {
    return new DefaultUi(attrs);
  }
  static desc(attrs) {
    return new Desc(attrs);
  }
  static digestMethod(attrs) {
    return new DigestMethod(attrs);
  }
  static digestMethods(attrs) {
    return new DigestMethods(attrs);
  }
  static draw(attrs) {
    return new Draw(attrs);
  }
  static edge(attrs) {
    return new Edge(attrs);
  }
  static encoding(attrs) {
    return new Encoding(attrs);
  }
  static encodings(attrs) {
    return new Encodings(attrs);
  }
  static encrypt(attrs) {
    return new Encrypt(attrs);
  }
  static encryptData(attrs) {
    return new EncryptData(attrs);
  }
  static encryption(attrs) {
    return new Encryption(attrs);
  }
  static encryptionMethod(attrs) {
    return new EncryptionMethod(attrs);
  }
  static encryptionMethods(attrs) {
    return new EncryptionMethods(attrs);
  }
  static event(attrs) {
    return new Event(attrs);
  }
  static exData(attrs) {
    return new ExData(attrs);
  }
  static exObject(attrs) {
    return new ExObject(attrs);
  }
  static exclGroup(attrs) {
    return new ExclGroup(attrs);
  }
  static execute(attrs) {
    return new Execute(attrs);
  }
  static extras(attrs) {
    return new Extras(attrs);
  }
  static field(attrs) {
    return new Field(attrs);
  }
  static fill(attrs) {
    return new Fill(attrs);
  }
  static filter(attrs) {
    return new Filter(attrs);
  }
  static float(attrs) {
    return new Float(attrs);
  }
  static font(attrs) {
    return new Font(attrs);
  }
  static format(attrs) {
    return new Format(attrs);
  }
  static handler(attrs) {
    return new Handler(attrs);
  }
  static hyphenation(attrs) {
    return new Hyphenation(attrs);
  }
  static image(attrs) {
    return new Image(attrs);
  }
  static imageEdit(attrs) {
    return new ImageEdit(attrs);
  }
  static integer(attrs) {
    return new Integer(attrs);
  }
  static issuers(attrs) {
    return new Issuers(attrs);
  }
  static items(attrs) {
    return new Items(attrs);
  }
  static keep(attrs) {
    return new Keep(attrs);
  }
  static keyUsage(attrs) {
    return new KeyUsage(attrs);
  }
  static line(attrs) {
    return new Line(attrs);
  }
  static linear(attrs) {
    return new Linear(attrs);
  }
  static lockDocument(attrs) {
    return new LockDocument(attrs);
  }
  static manifest(attrs) {
    return new Manifest(attrs);
  }
  static margin(attrs) {
    return new Margin(attrs);
  }
  static mdp(attrs) {
    return new Mdp(attrs);
  }
  static medium(attrs) {
    return new Medium(attrs);
  }
  static message(attrs) {
    return new Message(attrs);
  }
  static numericEdit(attrs) {
    return new NumericEdit(attrs);
  }
  static occur(attrs) {
    return new Occur(attrs);
  }
  static oid(attrs) {
    return new Oid(attrs);
  }
  static oids(attrs) {
    return new Oids(attrs);
  }
  static overflow(attrs) {
    return new Overflow(attrs);
  }
  static pageArea(attrs) {
    return new PageArea(attrs);
  }
  static pageSet(attrs) {
    return new PageSet(attrs);
  }
  static para(attrs) {
    return new Para(attrs);
  }
  static passwordEdit(attrs) {
    return new PasswordEdit(attrs);
  }
  static pattern(attrs) {
    return new Pattern(attrs);
  }
  static picture(attrs) {
    return new Picture(attrs);
  }
  static proto(attrs) {
    return new Proto(attrs);
  }
  static radial(attrs) {
    return new Radial(attrs);
  }
  static reason(attrs) {
    return new Reason(attrs);
  }
  static reasons(attrs) {
    return new Reasons(attrs);
  }
  static rectangle(attrs) {
    return new Rectangle(attrs);
  }
  static ref(attrs) {
    return new RefElement(attrs);
  }
  static script(attrs) {
    return new Script(attrs);
  }
  static setProperty(attrs) {
    return new SetProperty(attrs);
  }
  static signData(attrs) {
    return new SignData(attrs);
  }
  static signature(attrs) {
    return new Signature(attrs);
  }
  static signing(attrs) {
    return new Signing(attrs);
  }
  static solid(attrs) {
    return new Solid(attrs);
  }
  static speak(attrs) {
    return new Speak(attrs);
  }
  static stipple(attrs) {
    return new Stipple(attrs);
  }
  static subform(attrs) {
    return new Subform(attrs);
  }
  static subformSet(attrs) {
    return new SubformSet(attrs);
  }
  static subjectDN(attrs) {
    return new SubjectDN(attrs);
  }
  static subjectDNs(attrs) {
    return new SubjectDNs(attrs);
  }
  static submit(attrs) {
    return new Submit(attrs);
  }
  static template(attrs) {
    return new Template(attrs);
  }
  static text(attrs) {
    return new Text(attrs);
  }
  static textEdit(attrs) {
    return new TextEdit(attrs);
  }
  static time(attrs) {
    return new Time(attrs);
  }
  static timeStamp(attrs) {
    return new TimeStamp(attrs);
  }
  static toolTip(attrs) {
    return new ToolTip(attrs);
  }
  static traversal(attrs) {
    return new Traversal(attrs);
  }
  static traverse(attrs) {
    return new Traverse(attrs);
  }
  static ui(attrs) {
    return new Ui(attrs);
  }
  static validate(attrs) {
    return new Validate(attrs);
  }
  static value(attrs) {
    return new Value(attrs);
  }
  static variables(attrs) {
    return new Variables(attrs);
  }
}
exports.TemplateNamespace = TemplateNamespace;

/***/ }),
/* 81 */
/***/ ((__unused_webpack_module, exports) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.NamespaceIds = exports.$buildXFAObject = void 0;
const $buildXFAObject = Symbol();
exports.$buildXFAObject = $buildXFAObject;
const NamespaceIds = {
  config: {
    id: 0,
    check: ns => ns.startsWith("http://www.xfa.org/schema/xci/")
  },
  connectionSet: {
    id: 1,
    check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-connection-set/")
  },
  datasets: {
    id: 2,
    check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-data/")
  },
  form: {
    id: 3,
    check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-form/")
  },
  localeSet: {
    id: 4,
    check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-locale-set/")
  },
  pdf: {
    id: 5,
    check: ns => ns === "http://ns.adobe.com/xdp/pdf/"
  },
  signature: {
    id: 6,
    check: ns => ns === "http://www.w3.org/2000/09/xmldsig#"
  },
  sourceSet: {
    id: 7,
    check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-source-set/")
  },
  stylesheet: {
    id: 8,
    check: ns => ns === "http://www.w3.org/1999/XSL/Transform"
  },
  template: {
    id: 9,
    check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-template/")
  },
  xdc: {
    id: 10,
    check: ns => ns.startsWith("http://www.xfa.org/schema/xdc/")
  },
  xdp: {
    id: 11,
    check: ns => ns === "http://ns.adobe.com/xdp/"
  },
  xfdf: {
    id: 12,
    check: ns => ns === "http://ns.adobe.com/xfdf/"
  },
  xhtml: {
    id: 13,
    check: ns => ns === "http://www.w3.org/1999/xhtml"
  },
  xmpmeta: {
    id: 14,
    check: ns => ns === "http://ns.adobe.com/xmpmeta/"
  }
};
exports.NamespaceIds = NamespaceIds;

/***/ }),
/* 82 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.addHTML = addHTML;
exports.checkDimensions = checkDimensions;
exports.flushHTML = flushHTML;
exports.getAvailableSpace = getAvailableSpace;
var _symbol_utils = __w_pdfjs_require__(78);
var _html_utils = __w_pdfjs_require__(83);
function createLine(node, children) {
  return {
    name: "div",
    attributes: {
      class: [node.layout === "lr-tb" ? "xfaLr" : "xfaRl"]
    },
    children
  };
}
function flushHTML(node) {
  if (!node[_symbol_utils.$extra]) {
    return null;
  }
  const attributes = node[_symbol_utils.$extra].attributes;
  const html = {
    name: "div",
    attributes,
    children: node[_symbol_utils.$extra].children
  };
  if (node[_symbol_utils.$extra].failingNode) {
    const htmlFromFailing = node[_symbol_utils.$extra].failingNode[_symbol_utils.$flushHTML]();
    if (htmlFromFailing) {
      if (node.layout.endsWith("-tb")) {
        html.children.push(createLine(node, [htmlFromFailing]));
      } else {
        html.children.push(htmlFromFailing);
      }
    }
  }
  if (html.children.length === 0) {
    return null;
  }
  return html;
}
function addHTML(node, html, bbox) {
  const extra = node[_symbol_utils.$extra];
  const availableSpace = extra.availableSpace;
  const [x, y, w, h] = bbox;
  switch (node.layout) {
    case "position":
      {
        extra.width = Math.max(extra.width, x + w);
        extra.height = Math.max(extra.height, y + h);
        extra.children.push(html);
        break;
      }
    case "lr-tb":
    case "rl-tb":
      if (!extra.line || extra.attempt === 1) {
        extra.line = createLine(node, []);
        extra.children.push(extra.line);
        extra.numberInLine = 0;
      }
      extra.numberInLine += 1;
      extra.line.children.push(html);
      if (extra.attempt === 0) {
        extra.currentWidth += w;
        extra.height = Math.max(extra.height, extra.prevHeight + h);
      } else {
        extra.currentWidth = w;
        extra.prevHeight = extra.height;
        extra.height += h;
        extra.attempt = 0;
      }
      extra.width = Math.max(extra.width, extra.currentWidth);
      break;
    case "rl-row":
    case "row":
      {
        extra.children.push(html);
        extra.width += w;
        extra.height = Math.max(extra.height, h);
        const height = (0, _html_utils.measureToString)(extra.height);
        for (const child of extra.children) {
          child.attributes.style.height = height;
        }
        break;
      }
    case "table":
      {
        extra.width = Math.min(availableSpace.width, Math.max(extra.width, w));
        extra.height += h;
        extra.children.push(html);
        break;
      }
    case "tb":
      {
        extra.width = Math.min(availableSpace.width, Math.max(extra.width, w));
        extra.height += h;
        extra.children.push(html);
        break;
      }
  }
}
function getAvailableSpace(node) {
  const availableSpace = node[_symbol_utils.$extra].availableSpace;
  const marginV = node.margin ? node.margin.topInset + node.margin.bottomInset : 0;
  const marginH = node.margin ? node.margin.leftInset + node.margin.rightInset : 0;
  switch (node.layout) {
    case "lr-tb":
    case "rl-tb":
      if (node[_symbol_utils.$extra].attempt === 0) {
        return {
          width: availableSpace.width - marginH - node[_symbol_utils.$extra].currentWidth,
          height: availableSpace.height - marginV - node[_symbol_utils.$extra].prevHeight
        };
      }
      return {
        width: availableSpace.width - marginH,
        height: availableSpace.height - marginV - node[_symbol_utils.$extra].height
      };
    case "rl-row":
    case "row":
      const width = node[_symbol_utils.$extra].columnWidths.slice(node[_symbol_utils.$extra].currentColumn).reduce((a, x) => a + x);
      return {
        width,
        height: availableSpace.height - marginH
      };
    case "table":
    case "tb":
      return {
        width: availableSpace.width - marginH,
        height: availableSpace.height - marginV - node[_symbol_utils.$extra].height
      };
    case "position":
    default:
      return availableSpace;
  }
}
function getTransformedBBox(node) {
  let w = node.w === "" ? NaN : node.w;
  let h = node.h === "" ? NaN : node.h;
  let [centerX, centerY] = [0, 0];
  switch (node.anchorType || "") {
    case "bottomCenter":
      [centerX, centerY] = [w / 2, h];
      break;
    case "bottomLeft":
      [centerX, centerY] = [0, h];
      break;
    case "bottomRight":
      [centerX, centerY] = [w, h];
      break;
    case "middleCenter":
      [centerX, centerY] = [w / 2, h / 2];
      break;
    case "middleLeft":
      [centerX, centerY] = [0, h / 2];
      break;
    case "middleRight":
      [centerX, centerY] = [w, h / 2];
      break;
    case "topCenter":
      [centerX, centerY] = [w / 2, 0];
      break;
    case "topRight":
      [centerX, centerY] = [w, 0];
      break;
  }
  let x, y;
  switch (node.rotate || 0) {
    case 0:
      [x, y] = [-centerX, -centerY];
      break;
    case 90:
      [x, y] = [-centerY, centerX];
      [w, h] = [h, -w];
      break;
    case 180:
      [x, y] = [centerX, centerY];
      [w, h] = [-w, -h];
      break;
    case 270:
      [x, y] = [centerY, -centerX];
      [w, h] = [-h, w];
      break;
  }
  return [node.x + x + Math.min(0, w), node.y + y + Math.min(0, h), Math.abs(w), Math.abs(h)];
}
function checkDimensions(node, space) {
  if (node[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].firstUnsplittable === null) {
    return true;
  }
  if (node.w === 0 || node.h === 0) {
    return true;
  }
  const ERROR = 2;
  const parent = node[_symbol_utils.$getSubformParent]();
  const attempt = parent[_symbol_utils.$extra]?.attempt || 0;
  const [, y, w, h] = getTransformedBBox(node);
  switch (parent.layout) {
    case "lr-tb":
    case "rl-tb":
      if (attempt === 0) {
        if (!node[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].noLayoutFailure) {
          if (node.h !== "" && Math.round(h - space.height) > ERROR) {
            return false;
          }
          if (node.w !== "") {
            if (Math.round(w - space.width) <= ERROR) {
              return true;
            }
            if (parent[_symbol_utils.$extra].numberInLine === 0) {
              return space.height > ERROR;
            }
            return false;
          }
          return space.width > ERROR;
        }
        if (node.w !== "") {
          return Math.round(w - space.width) <= ERROR;
        }
        return space.width > ERROR;
      }
      if (node[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].noLayoutFailure) {
        return true;
      }
      if (node.h !== "" && Math.round(h - space.height) > ERROR) {
        return false;
      }
      if (node.w === "" || Math.round(w - space.width) <= ERROR) {
        return space.height > ERROR;
      }
      if (parent[_symbol_utils.$isThereMoreWidth]()) {
        return false;
      }
      return space.height > ERROR;
    case "table":
    case "tb":
      if (node[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].noLayoutFailure) {
        return true;
      }
      if (node.h !== "" && !node[_symbol_utils.$isSplittable]()) {
        return Math.round(h - space.height) <= ERROR;
      }
      if (node.w === "" || Math.round(w - space.width) <= ERROR) {
        return space.height > ERROR;
      }
      if (parent[_symbol_utils.$isThereMoreWidth]()) {
        return false;
      }
      return space.height > ERROR;
    case "position":
      if (node[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].noLayoutFailure) {
        return true;
      }
      if (node.h === "" || Math.round(h + y - space.height) <= ERROR) {
        return true;
      }
      const area = node[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].currentContentArea;
      return h + y > area.h;
    case "rl-row":
    case "row":
      if (node[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].noLayoutFailure) {
        return true;
      }
      if (node.h !== "") {
        return Math.round(h - space.height) <= ERROR;
      }
      return true;
    default:
      return true;
  }
}

/***/ }),
/* 83 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.computeBbox = computeBbox;
exports.createWrapper = createWrapper;
exports.fixDimensions = fixDimensions;
exports.fixTextIndent = fixTextIndent;
exports.fixURL = fixURL;
exports.isPrintOnly = isPrintOnly;
exports.layoutClass = layoutClass;
exports.layoutNode = layoutNode;
exports.measureToString = measureToString;
exports.setAccess = setAccess;
exports.setFontFamily = setFontFamily;
exports.setMinMaxDimensions = setMinMaxDimensions;
exports.setPara = setPara;
exports.toStyle = toStyle;
var _symbol_utils = __w_pdfjs_require__(78);
var _util = __w_pdfjs_require__(2);
var _utils = __w_pdfjs_require__(84);
var _fonts = __w_pdfjs_require__(85);
var _text = __w_pdfjs_require__(86);
var _xfa_object = __w_pdfjs_require__(87);
function measureToString(m) {
  if (typeof m === "string") {
    return "0px";
  }
  return Number.isInteger(m) ? `${m}px` : `${m.toFixed(2)}px`;
}
const converters = {
  anchorType(node, style) {
    const parent = node[_symbol_utils.$getSubformParent]();
    if (!parent || parent.layout && parent.layout !== "position") {
      return;
    }
    if (!("transform" in style)) {
      style.transform = "";
    }
    switch (node.anchorType) {
      case "bottomCenter":
        style.transform += "translate(-50%, -100%)";
        break;
      case "bottomLeft":
        style.transform += "translate(0,-100%)";
        break;
      case "bottomRight":
        style.transform += "translate(-100%,-100%)";
        break;
      case "middleCenter":
        style.transform += "translate(-50%,-50%)";
        break;
      case "middleLeft":
        style.transform += "translate(0,-50%)";
        break;
      case "middleRight":
        style.transform += "translate(-100%,-50%)";
        break;
      case "topCenter":
        style.transform += "translate(-50%,0)";
        break;
      case "topRight":
        style.transform += "translate(-100%,0)";
        break;
    }
  },
  dimensions(node, style) {
    const parent = node[_symbol_utils.$getSubformParent]();
    let width = node.w;
    const height = node.h;
    if (parent.layout?.includes("row")) {
      const extra = parent[_symbol_utils.$extra];
      const colSpan = node.colSpan;
      let w;
      if (colSpan === -1) {
        w = extra.columnWidths.slice(extra.currentColumn).reduce((a, x) => a + x, 0);
        extra.currentColumn = 0;
      } else {
        w = extra.columnWidths.slice(extra.currentColumn, extra.currentColumn + colSpan).reduce((a, x) => a + x, 0);
        extra.currentColumn = (extra.currentColumn + node.colSpan) % extra.columnWidths.length;
      }
      if (!isNaN(w)) {
        width = node.w = w;
      }
    }
    style.width = width !== "" ? measureToString(width) : "auto";
    style.height = height !== "" ? measureToString(height) : "auto";
  },
  position(node, style) {
    const parent = node[_symbol_utils.$getSubformParent]();
    if (parent?.layout && parent.layout !== "position") {
      return;
    }
    style.position = "absolute";
    style.left = measureToString(node.x);
    style.top = measureToString(node.y);
  },
  rotate(node, style) {
    if (node.rotate) {
      if (!("transform" in style)) {
        style.transform = "";
      }
      style.transform += `rotate(-${node.rotate}deg)`;
      style.transformOrigin = "top left";
    }
  },
  presence(node, style) {
    switch (node.presence) {
      case "invisible":
        style.visibility = "hidden";
        break;
      case "hidden":
      case "inactive":
        style.display = "none";
        break;
    }
  },
  hAlign(node, style) {
    if (node[_symbol_utils.$nodeName] === "para") {
      switch (node.hAlign) {
        case "justifyAll":
          style.textAlign = "justify-all";
          break;
        case "radix":
          style.textAlign = "left";
          break;
        default:
          style.textAlign = node.hAlign;
      }
    } else {
      switch (node.hAlign) {
        case "left":
          style.alignSelf = "start";
          break;
        case "center":
          style.alignSelf = "center";
          break;
        case "right":
          style.alignSelf = "end";
          break;
      }
    }
  },
  margin(node, style) {
    if (node.margin) {
      style.margin = node.margin[_symbol_utils.$toStyle]().margin;
    }
  }
};
function setMinMaxDimensions(node, style) {
  const parent = node[_symbol_utils.$getSubformParent]();
  if (parent.layout === "position") {
    if (node.minW > 0) {
      style.minWidth = measureToString(node.minW);
    }
    if (node.maxW > 0) {
      style.maxWidth = measureToString(node.maxW);
    }
    if (node.minH > 0) {
      style.minHeight = measureToString(node.minH);
    }
    if (node.maxH > 0) {
      style.maxHeight = measureToString(node.maxH);
    }
  }
}
function layoutText(text, xfaFont, margin, lineHeight, fontFinder, width) {
  const measure = new _text.TextMeasure(xfaFont, margin, lineHeight, fontFinder);
  if (typeof text === "string") {
    measure.addString(text);
  } else {
    text[_symbol_utils.$pushGlyphs](measure);
  }
  return measure.compute(width);
}
function layoutNode(node, availableSpace) {
  let height = null;
  let width = null;
  let isBroken = false;
  if ((!node.w || !node.h) && node.value) {
    let marginH = 0;
    let marginV = 0;
    if (node.margin) {
      marginH = node.margin.leftInset + node.margin.rightInset;
      marginV = node.margin.topInset + node.margin.bottomInset;
    }
    let lineHeight = null;
    let margin = null;
    if (node.para) {
      margin = Object.create(null);
      lineHeight = node.para.lineHeight === "" ? null : node.para.lineHeight;
      margin.top = node.para.spaceAbove === "" ? 0 : node.para.spaceAbove;
      margin.bottom = node.para.spaceBelow === "" ? 0 : node.para.spaceBelow;
      margin.left = node.para.marginLeft === "" ? 0 : node.para.marginLeft;
      margin.right = node.para.marginRight === "" ? 0 : node.para.marginRight;
    }
    let font = node.font;
    if (!font) {
      const root = node[_symbol_utils.$getTemplateRoot]();
      let parent = node[_symbol_utils.$getParent]();
      while (parent && parent !== root) {
        if (parent.font) {
          font = parent.font;
          break;
        }
        parent = parent[_symbol_utils.$getParent]();
      }
    }
    const maxWidth = (node.w || availableSpace.width) - marginH;
    const fontFinder = node[_symbol_utils.$globalData].fontFinder;
    if (node.value.exData && node.value.exData[_symbol_utils.$content] && node.value.exData.contentType === "text/html") {
      const res = layoutText(node.value.exData[_symbol_utils.$content], font, margin, lineHeight, fontFinder, maxWidth);
      width = res.width;
      height = res.height;
      isBroken = res.isBroken;
    } else {
      const text = node.value[_symbol_utils.$text]();
      if (text) {
        const res = layoutText(text, font, margin, lineHeight, fontFinder, maxWidth);
        width = res.width;
        height = res.height;
        isBroken = res.isBroken;
      }
    }
    if (width !== null && !node.w) {
      width += marginH;
    }
    if (height !== null && !node.h) {
      height += marginV;
    }
  }
  return {
    w: width,
    h: height,
    isBroken
  };
}
function computeBbox(node, html, availableSpace) {
  let bbox;
  if (node.w !== "" && node.h !== "") {
    bbox = [node.x, node.y, node.w, node.h];
  } else {
    if (!availableSpace) {
      return null;
    }
    let width = node.w;
    if (width === "") {
      if (node.maxW === 0) {
        const parent = node[_symbol_utils.$getSubformParent]();
        width = parent.layout === "position" && parent.w !== "" ? 0 : node.minW;
      } else {
        width = Math.min(node.maxW, availableSpace.width);
      }
      html.attributes.style.width = measureToString(width);
    }
    let height = node.h;
    if (height === "") {
      if (node.maxH === 0) {
        const parent = node[_symbol_utils.$getSubformParent]();
        height = parent.layout === "position" && parent.h !== "" ? 0 : node.minH;
      } else {
        height = Math.min(node.maxH, availableSpace.height);
      }
      html.attributes.style.height = measureToString(height);
    }
    bbox = [node.x, node.y, width, height];
  }
  return bbox;
}
function fixDimensions(node) {
  const parent = node[_symbol_utils.$getSubformParent]();
  if (parent.layout?.includes("row")) {
    const extra = parent[_symbol_utils.$extra];
    const colSpan = node.colSpan;
    let width;
    if (colSpan === -1) {
      width = extra.columnWidths.slice(extra.currentColumn).reduce((a, w) => a + w, 0);
    } else {
      width = extra.columnWidths.slice(extra.currentColumn, extra.currentColumn + colSpan).reduce((a, w) => a + w, 0);
    }
    if (!isNaN(width)) {
      node.w = width;
    }
  }
  if (parent.layout && parent.layout !== "position") {
    node.x = node.y = 0;
  }
  if (node.layout === "table") {
    if (node.w === "" && Array.isArray(node.columnWidths)) {
      node.w = node.columnWidths.reduce((a, x) => a + x, 0);
    }
  }
}
function layoutClass(node) {
  switch (node.layout) {
    case "position":
      return "xfaPosition";
    case "lr-tb":
      return "xfaLrTb";
    case "rl-row":
      return "xfaRlRow";
    case "rl-tb":
      return "xfaRlTb";
    case "row":
      return "xfaRow";
    case "table":
      return "xfaTable";
    case "tb":
      return "xfaTb";
    default:
      return "xfaPosition";
  }
}
function toStyle(node, ...names) {
  const style = Object.create(null);
  for (const name of names) {
    const value = node[name];
    if (value === null) {
      continue;
    }
    if (converters.hasOwnProperty(name)) {
      converters[name](node, style);
      continue;
    }
    if (value instanceof _xfa_object.XFAObject) {
      const newStyle = value[_symbol_utils.$toStyle]();
      if (newStyle) {
        Object.assign(style, newStyle);
      } else {
        (0, _util.warn)(`(DEBUG) - XFA - style for ${name} not implemented yet`);
      }
    }
  }
  return style;
}
function createWrapper(node, html) {
  const {
    attributes
  } = html;
  const {
    style
  } = attributes;
  const wrapper = {
    name: "div",
    attributes: {
      class: ["xfaWrapper"],
      style: Object.create(null)
    },
    children: []
  };
  attributes.class.push("xfaWrapped");
  if (node.border) {
    const {
      widths,
      insets
    } = node.border[_symbol_utils.$extra];
    let width, height;
    let top = insets[0];
    let left = insets[3];
    const insetsH = insets[0] + insets[2];
    const insetsW = insets[1] + insets[3];
    switch (node.border.hand) {
      case "even":
        top -= widths[0] / 2;
        left -= widths[3] / 2;
        width = `calc(100% + ${(widths[1] + widths[3]) / 2 - insetsW}px)`;
        height = `calc(100% + ${(widths[0] + widths[2]) / 2 - insetsH}px)`;
        break;
      case "left":
        top -= widths[0];
        left -= widths[3];
        width = `calc(100% + ${widths[1] + widths[3] - insetsW}px)`;
        height = `calc(100% + ${widths[0] + widths[2] - insetsH}px)`;
        break;
      case "right":
        width = insetsW ? `calc(100% - ${insetsW}px)` : "100%";
        height = insetsH ? `calc(100% - ${insetsH}px)` : "100%";
        break;
    }
    const classNames = ["xfaBorder"];
    if (isPrintOnly(node.border)) {
      classNames.push("xfaPrintOnly");
    }
    const border = {
      name: "div",
      attributes: {
        class: classNames,
        style: {
          top: `${top}px`,
          left: `${left}px`,
          width,
          height
        }
      },
      children: []
    };
    for (const key of ["border", "borderWidth", "borderColor", "borderRadius", "borderStyle"]) {
      if (style[key] !== undefined) {
        border.attributes.style[key] = style[key];
        delete style[key];
      }
    }
    wrapper.children.push(border, html);
  } else {
    wrapper.children.push(html);
  }
  for (const key of ["background", "backgroundClip", "top", "left", "width", "height", "minWidth", "minHeight", "maxWidth", "maxHeight", "transform", "transformOrigin", "visibility"]) {
    if (style[key] !== undefined) {
      wrapper.attributes.style[key] = style[key];
      delete style[key];
    }
  }
  wrapper.attributes.style.position = style.position === "absolute" ? "absolute" : "relative";
  delete style.position;
  if (style.alignSelf) {
    wrapper.attributes.style.alignSelf = style.alignSelf;
    delete style.alignSelf;
  }
  return wrapper;
}
function fixTextIndent(styles) {
  const indent = (0, _utils.getMeasurement)(styles.textIndent, "0px");
  if (indent >= 0) {
    return;
  }
  const align = styles.textAlign === "right" ? "right" : "left";
  const name = "padding" + (align === "left" ? "Left" : "Right");
  const padding = (0, _utils.getMeasurement)(styles[name], "0px");
  styles[name] = `${padding - indent}px`;
}
function setAccess(node, classNames) {
  switch (node.access) {
    case "nonInteractive":
      classNames.push("xfaNonInteractive");
      break;
    case "readOnly":
      classNames.push("xfaReadOnly");
      break;
    case "protected":
      classNames.push("xfaDisabled");
      break;
  }
}
function isPrintOnly(node) {
  return node.relevant.length > 0 && !node.relevant[0].excluded && node.relevant[0].viewname === "print";
}
function getCurrentPara(node) {
  const stack = node[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].paraStack;
  return stack.length ? stack.at(-1) : null;
}
function setPara(node, nodeStyle, value) {
  if (value.attributes.class?.includes("xfaRich")) {
    if (nodeStyle) {
      if (node.h === "") {
        nodeStyle.height = "auto";
      }
      if (node.w === "") {
        nodeStyle.width = "auto";
      }
    }
    const para = getCurrentPara(node);
    if (para) {
      const valueStyle = value.attributes.style;
      valueStyle.display = "flex";
      valueStyle.flexDirection = "column";
      switch (para.vAlign) {
        case "top":
          valueStyle.justifyContent = "start";
          break;
        case "bottom":
          valueStyle.justifyContent = "end";
          break;
        case "middle":
          valueStyle.justifyContent = "center";
          break;
      }
      const paraStyle = para[_symbol_utils.$toStyle]();
      for (const [key, val] of Object.entries(paraStyle)) {
        if (!(key in valueStyle)) {
          valueStyle[key] = val;
        }
      }
    }
  }
}
function setFontFamily(xfaFont, node, fontFinder, style) {
  if (!fontFinder) {
    delete style.fontFamily;
    return;
  }
  const name = (0, _utils.stripQuotes)(xfaFont.typeface);
  style.fontFamily = `"${name}"`;
  const typeface = fontFinder.find(name);
  if (typeface) {
    const {
      fontFamily
    } = typeface.regular.cssFontInfo;
    if (fontFamily !== name) {
      style.fontFamily = `"${fontFamily}"`;
    }
    const para = getCurrentPara(node);
    if (para && para.lineHeight !== "") {
      return;
    }
    if (style.lineHeight) {
      return;
    }
    const pdfFont = (0, _fonts.selectFont)(xfaFont, typeface);
    if (pdfFont) {
      style.lineHeight = Math.max(1.2, pdfFont.lineHeight);
    }
  }
}
function fixURL(str) {
  const absoluteUrl = (0, _util.createValidAbsoluteUrl)(str, null, {
    addDefaultProtocol: true,
    tryConvertEncoding: true
  });
  return absoluteUrl ? absoluteUrl.href : null;
}

/***/ }),
/* 84 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.HTMLResult = void 0;
exports.getBBox = getBBox;
exports.getColor = getColor;
exports.getFloat = getFloat;
exports.getInteger = getInteger;
exports.getKeyword = getKeyword;
exports.getMeasurement = getMeasurement;
exports.getRatio = getRatio;
exports.getRelevant = getRelevant;
exports.getStringOption = getStringOption;
exports.stripQuotes = stripQuotes;
var _util = __w_pdfjs_require__(2);
const dimConverters = {
  pt: x => x,
  cm: x => x / 2.54 * 72,
  mm: x => x / (10 * 2.54) * 72,
  in: x => x * 72,
  px: x => x
};
const measurementPattern = /([+-]?\d+\.?\d*)(.*)/;
function stripQuotes(str) {
  if (str.startsWith("'") || str.startsWith('"')) {
    return str.slice(1, -1);
  }
  return str;
}
function getInteger({
  data,
  defaultValue,
  validate
}) {
  if (!data) {
    return defaultValue;
  }
  data = data.trim();
  const n = parseInt(data, 10);
  if (!isNaN(n) && validate(n)) {
    return n;
  }
  return defaultValue;
}
function getFloat({
  data,
  defaultValue,
  validate
}) {
  if (!data) {
    return defaultValue;
  }
  data = data.trim();
  const n = parseFloat(data);
  if (!isNaN(n) && validate(n)) {
    return n;
  }
  return defaultValue;
}
function getKeyword({
  data,
  defaultValue,
  validate
}) {
  if (!data) {
    return defaultValue;
  }
  data = data.trim();
  if (validate(data)) {
    return data;
  }
  return defaultValue;
}
function getStringOption(data, options) {
  return getKeyword({
    data,
    defaultValue: options[0],
    validate: k => options.includes(k)
  });
}
function getMeasurement(str, def = "0") {
  def ||= "0";
  if (!str) {
    return getMeasurement(def);
  }
  const match = str.trim().match(measurementPattern);
  if (!match) {
    return getMeasurement(def);
  }
  const [, valueStr, unit] = match;
  const value = parseFloat(valueStr);
  if (isNaN(value)) {
    return getMeasurement(def);
  }
  if (value === 0) {
    return 0;
  }
  const conv = dimConverters[unit];
  if (conv) {
    return conv(value);
  }
  return value;
}
function getRatio(data) {
  if (!data) {
    return {
      num: 1,
      den: 1
    };
  }
  const ratio = data.trim().split(/\s*:\s*/).map(x => parseFloat(x)).filter(x => !isNaN(x));
  if (ratio.length === 1) {
    ratio.push(1);
  }
  if (ratio.length === 0) {
    return {
      num: 1,
      den: 1
    };
  }
  const [num, den] = ratio;
  return {
    num,
    den
  };
}
function getRelevant(data) {
  if (!data) {
    return [];
  }
  return data.trim().split(/\s+/).map(e => {
    return {
      excluded: e[0] === "-",
      viewname: e.substring(1)
    };
  });
}
function getColor(data, def = [0, 0, 0]) {
  let [r, g, b] = def;
  if (!data) {
    return {
      r,
      g,
      b
    };
  }
  const color = data.trim().split(/\s*,\s*/).map(c => Math.min(Math.max(0, parseInt(c.trim(), 10)), 255)).map(c => isNaN(c) ? 0 : c);
  if (color.length < 3) {
    return {
      r,
      g,
      b
    };
  }
  [r, g, b] = color;
  return {
    r,
    g,
    b
  };
}
function getBBox(data) {
  const def = -1;
  if (!data) {
    return {
      x: def,
      y: def,
      width: def,
      height: def
    };
  }
  const bbox = data.trim().split(/\s*,\s*/).map(m => getMeasurement(m, "-1"));
  if (bbox.length < 4 || bbox[2] < 0 || bbox[3] < 0) {
    return {
      x: def,
      y: def,
      width: def,
      height: def
    };
  }
  const [x, y, width, height] = bbox;
  return {
    x,
    y,
    width,
    height
  };
}
class HTMLResult {
  static get FAILURE() {
    return (0, _util.shadow)(this, "FAILURE", new HTMLResult(false, null, null, null));
  }
  static get EMPTY() {
    return (0, _util.shadow)(this, "EMPTY", new HTMLResult(true, null, null, null));
  }
  constructor(success, html, bbox, breakNode) {
    this.success = success;
    this.html = html;
    this.bbox = bbox;
    this.breakNode = breakNode;
  }
  isBreak() {
    return !!this.breakNode;
  }
  static breakNode(node) {
    return new HTMLResult(false, null, null, node);
  }
  static success(html, bbox = null) {
    return new HTMLResult(true, html, bbox, null);
  }
}
exports.HTMLResult = HTMLResult;

/***/ }),
/* 85 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.FontFinder = void 0;
exports.getMetrics = getMetrics;
exports.selectFont = selectFont;
var _symbol_utils = __w_pdfjs_require__(78);
var _utils = __w_pdfjs_require__(84);
var _util = __w_pdfjs_require__(2);
class FontFinder {
  constructor(pdfFonts) {
    this.fonts = new Map();
    this.cache = new Map();
    this.warned = new Set();
    this.defaultFont = null;
    this.add(pdfFonts);
  }
  add(pdfFonts, reallyMissingFonts = null) {
    for (const pdfFont of pdfFonts) {
      this.addPdfFont(pdfFont);
    }
    for (const pdfFont of this.fonts.values()) {
      if (!pdfFont.regular) {
        pdfFont.regular = pdfFont.italic || pdfFont.bold || pdfFont.bolditalic;
      }
    }
    if (!reallyMissingFonts || reallyMissingFonts.size === 0) {
      return;
    }
    const myriad = this.fonts.get("PdfJS-Fallback-PdfJS-XFA");
    for (const missing of reallyMissingFonts) {
      this.fonts.set(missing, myriad);
    }
  }
  addPdfFont(pdfFont) {
    const cssFontInfo = pdfFont.cssFontInfo;
    const name = cssFontInfo.fontFamily;
    let font = this.fonts.get(name);
    if (!font) {
      font = Object.create(null);
      this.fonts.set(name, font);
      if (!this.defaultFont) {
        this.defaultFont = font;
      }
    }
    let property = "";
    const fontWeight = parseFloat(cssFontInfo.fontWeight);
    if (parseFloat(cssFontInfo.italicAngle) !== 0) {
      property = fontWeight >= 700 ? "bolditalic" : "italic";
    } else if (fontWeight >= 700) {
      property = "bold";
    }
    if (!property) {
      if (pdfFont.name.includes("Bold") || pdfFont.psName?.includes("Bold")) {
        property = "bold";
      }
      if (pdfFont.name.includes("Italic") || pdfFont.name.endsWith("It") || pdfFont.psName?.includes("Italic") || pdfFont.psName?.endsWith("It")) {
        property += "italic";
      }
    }
    if (!property) {
      property = "regular";
    }
    font[property] = pdfFont;
  }
  getDefault() {
    return this.defaultFont;
  }
  find(fontName, mustWarn = true) {
    let font = this.fonts.get(fontName) || this.cache.get(fontName);
    if (font) {
      return font;
    }
    const pattern = /,|-|_| |bolditalic|bold|italic|regular|it/gi;
    let name = fontName.replaceAll(pattern, "");
    font = this.fonts.get(name);
    if (font) {
      this.cache.set(fontName, font);
      return font;
    }
    name = name.toLowerCase();
    const maybe = [];
    for (const [family, pdfFont] of this.fonts.entries()) {
      if (family.replaceAll(pattern, "").toLowerCase().startsWith(name)) {
        maybe.push(pdfFont);
      }
    }
    if (maybe.length === 0) {
      for (const [, pdfFont] of this.fonts.entries()) {
        if (pdfFont.regular.name?.replaceAll(pattern, "").toLowerCase().startsWith(name)) {
          maybe.push(pdfFont);
        }
      }
    }
    if (maybe.length === 0) {
      name = name.replaceAll(/psmt|mt/gi, "");
      for (const [family, pdfFont] of this.fonts.entries()) {
        if (family.replaceAll(pattern, "").toLowerCase().startsWith(name)) {
          maybe.push(pdfFont);
        }
      }
    }
    if (maybe.length === 0) {
      for (const pdfFont of this.fonts.values()) {
        if (pdfFont.regular.name?.replaceAll(pattern, "").toLowerCase().startsWith(name)) {
          maybe.push(pdfFont);
        }
      }
    }
    if (maybe.length >= 1) {
      if (maybe.length !== 1 && mustWarn) {
        (0, _util.warn)(`XFA - Too many choices to guess the correct font: ${fontName}`);
      }
      this.cache.set(fontName, maybe[0]);
      return maybe[0];
    }
    if (mustWarn && !this.warned.has(fontName)) {
      this.warned.add(fontName);
      (0, _util.warn)(`XFA - Cannot find the font: ${fontName}`);
    }
    return null;
  }
}
exports.FontFinder = FontFinder;
function selectFont(xfaFont, typeface) {
  if (xfaFont.posture === "italic") {
    if (xfaFont.weight === "bold") {
      return typeface.bolditalic;
    }
    return typeface.italic;
  } else if (xfaFont.weight === "bold") {
    return typeface.bold;
  }
  return typeface.regular;
}
function getMetrics(xfaFont, real = false) {
  let pdfFont = null;
  if (xfaFont) {
    const name = (0, _utils.stripQuotes)(xfaFont.typeface);
    const typeface = xfaFont[_symbol_utils.$globalData].fontFinder.find(name);
    pdfFont = selectFont(xfaFont, typeface);
  }
  if (!pdfFont) {
    return {
      lineHeight: 12,
      lineGap: 2,
      lineNoGap: 10
    };
  }
  const size = xfaFont.size || 10;
  const lineHeight = pdfFont.lineHeight ? Math.max(real ? 0 : 1.2, pdfFont.lineHeight) : 1.2;
  const lineGap = pdfFont.lineGap === undefined ? 0.2 : pdfFont.lineGap;
  return {
    lineHeight: lineHeight * size,
    lineGap: lineGap * size,
    lineNoGap: Math.max(1, lineHeight - lineGap) * size
  };
}

/***/ }),
/* 86 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.TextMeasure = void 0;
var _fonts = __w_pdfjs_require__(85);
const WIDTH_FACTOR = 1.02;
class FontInfo {
  constructor(xfaFont, margin, lineHeight, fontFinder) {
    this.lineHeight = lineHeight;
    this.paraMargin = margin || {
      top: 0,
      bottom: 0,
      left: 0,
      right: 0
    };
    if (!xfaFont) {
      [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder);
      return;
    }
    this.xfaFont = {
      typeface: xfaFont.typeface,
      posture: xfaFont.posture,
      weight: xfaFont.weight,
      size: xfaFont.size,
      letterSpacing: xfaFont.letterSpacing
    };
    const typeface = fontFinder.find(xfaFont.typeface);
    if (!typeface) {
      [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder);
      return;
    }
    this.pdfFont = (0, _fonts.selectFont)(xfaFont, typeface);
    if (!this.pdfFont) {
      [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder);
    }
  }
  defaultFont(fontFinder) {
    const font = fontFinder.find("Helvetica", false) || fontFinder.find("Myriad Pro", false) || fontFinder.find("Arial", false) || fontFinder.getDefault();
    if (font?.regular) {
      const pdfFont = font.regular;
      const info = pdfFont.cssFontInfo;
      const xfaFont = {
        typeface: info.fontFamily,
        posture: "normal",
        weight: "normal",
        size: 10,
        letterSpacing: 0
      };
      return [pdfFont, xfaFont];
    }
    const xfaFont = {
      typeface: "Courier",
      posture: "normal",
      weight: "normal",
      size: 10,
      letterSpacing: 0
    };
    return [null, xfaFont];
  }
}
class FontSelector {
  constructor(defaultXfaFont, defaultParaMargin, defaultLineHeight, fontFinder) {
    this.fontFinder = fontFinder;
    this.stack = [new FontInfo(defaultXfaFont, defaultParaMargin, defaultLineHeight, fontFinder)];
  }
  pushData(xfaFont, margin, lineHeight) {
    const lastFont = this.stack.at(-1);
    for (const name of ["typeface", "posture", "weight", "size", "letterSpacing"]) {
      if (!xfaFont[name]) {
        xfaFont[name] = lastFont.xfaFont[name];
      }
    }
    for (const name of ["top", "bottom", "left", "right"]) {
      if (isNaN(margin[name])) {
        margin[name] = lastFont.paraMargin[name];
      }
    }
    const fontInfo = new FontInfo(xfaFont, margin, lineHeight || lastFont.lineHeight, this.fontFinder);
    if (!fontInfo.pdfFont) {
      fontInfo.pdfFont = lastFont.pdfFont;
    }
    this.stack.push(fontInfo);
  }
  popFont() {
    this.stack.pop();
  }
  topFont() {
    return this.stack.at(-1);
  }
}
class TextMeasure {
  constructor(defaultXfaFont, defaultParaMargin, defaultLineHeight, fonts) {
    this.glyphs = [];
    this.fontSelector = new FontSelector(defaultXfaFont, defaultParaMargin, defaultLineHeight, fonts);
    this.extraHeight = 0;
  }
  pushData(xfaFont, margin, lineHeight) {
    this.fontSelector.pushData(xfaFont, margin, lineHeight);
  }
  popFont(xfaFont) {
    return this.fontSelector.popFont();
  }
  addPara() {
    const lastFont = this.fontSelector.topFont();
    this.extraHeight += lastFont.paraMargin.top + lastFont.paraMargin.bottom;
  }
  addString(str) {
    if (!str) {
      return;
    }
    const lastFont = this.fontSelector.topFont();
    const fontSize = lastFont.xfaFont.size;
    if (lastFont.pdfFont) {
      const letterSpacing = lastFont.xfaFont.letterSpacing;
      const pdfFont = lastFont.pdfFont;
      const fontLineHeight = pdfFont.lineHeight || 1.2;
      const lineHeight = lastFont.lineHeight || Math.max(1.2, fontLineHeight) * fontSize;
      const lineGap = pdfFont.lineGap === undefined ? 0.2 : pdfFont.lineGap;
      const noGap = fontLineHeight - lineGap;
      const firstLineHeight = Math.max(1, noGap) * fontSize;
      const scale = fontSize / 1000;
      const fallbackWidth = pdfFont.defaultWidth || pdfFont.charsToGlyphs(" ")[0].width;
      for (const line of str.split(/[\u2029\n]/)) {
        const encodedLine = pdfFont.encodeString(line).join("");
        const glyphs = pdfFont.charsToGlyphs(encodedLine);
        for (const glyph of glyphs) {
          const width = glyph.width || fallbackWidth;
          this.glyphs.push([width * scale + letterSpacing, lineHeight, firstLineHeight, glyph.unicode, false]);
        }
        this.glyphs.push([0, 0, 0, "\n", true]);
      }
      this.glyphs.pop();
      return;
    }
    for (const line of str.split(/[\u2029\n]/)) {
      for (const char of line.split("")) {
        this.glyphs.push([fontSize, 1.2 * fontSize, fontSize, char, false]);
      }
      this.glyphs.push([0, 0, 0, "\n", true]);
    }
    this.glyphs.pop();
  }
  compute(maxWidth) {
    let lastSpacePos = -1,
      lastSpaceWidth = 0,
      width = 0,
      height = 0,
      currentLineWidth = 0,
      currentLineHeight = 0;
    let isBroken = false;
    let isFirstLine = true;
    for (let i = 0, ii = this.glyphs.length; i < ii; i++) {
      const [glyphWidth, lineHeight, firstLineHeight, char, isEOL] = this.glyphs[i];
      const isSpace = char === " ";
      const glyphHeight = isFirstLine ? firstLineHeight : lineHeight;
      if (isEOL) {
        width = Math.max(width, currentLineWidth);
        currentLineWidth = 0;
        height += currentLineHeight;
        currentLineHeight = glyphHeight;
        lastSpacePos = -1;
        lastSpaceWidth = 0;
        isFirstLine = false;
        continue;
      }
      if (isSpace) {
        if (currentLineWidth + glyphWidth > maxWidth) {
          width = Math.max(width, currentLineWidth);
          currentLineWidth = 0;
          height += currentLineHeight;
          currentLineHeight = glyphHeight;
          lastSpacePos = -1;
          lastSpaceWidth = 0;
          isBroken = true;
          isFirstLine = false;
        } else {
          currentLineHeight = Math.max(glyphHeight, currentLineHeight);
          lastSpaceWidth = currentLineWidth;
          currentLineWidth += glyphWidth;
          lastSpacePos = i;
        }
        continue;
      }
      if (currentLineWidth + glyphWidth > maxWidth) {
        height += currentLineHeight;
        currentLineHeight = glyphHeight;
        if (lastSpacePos !== -1) {
          i = lastSpacePos;
          width = Math.max(width, lastSpaceWidth);
          currentLineWidth = 0;
          lastSpacePos = -1;
          lastSpaceWidth = 0;
        } else {
          width = Math.max(width, currentLineWidth);
          currentLineWidth = glyphWidth;
        }
        isBroken = true;
        isFirstLine = false;
        continue;
      }
      currentLineWidth += glyphWidth;
      currentLineHeight = Math.max(glyphHeight, currentLineHeight);
    }
    width = Math.max(width, currentLineWidth);
    height += currentLineHeight + this.extraHeight;
    return {
      width: WIDTH_FACTOR * width,
      height,
      isBroken
    };
  }
}
exports.TextMeasure = TextMeasure;

/***/ }),
/* 87 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.XmlObject = exports.XFAObjectArray = exports.XFAObject = exports.XFAAttribute = exports.StringObject = exports.OptionObject = exports.Option10 = exports.Option01 = exports.IntegerObject = exports.ContentObject = void 0;
var _symbol_utils = __w_pdfjs_require__(78);
var _utils = __w_pdfjs_require__(84);
var _util = __w_pdfjs_require__(2);
var _core_utils = __w_pdfjs_require__(3);
var _namespaces = __w_pdfjs_require__(81);
var _som = __w_pdfjs_require__(88);
const _applyPrototype = Symbol();
const _attributes = Symbol();
const _attributeNames = Symbol();
const _children = Symbol("_children");
const _cloneAttribute = Symbol();
const _dataValue = Symbol();
const _defaultValue = Symbol();
const _filteredChildrenGenerator = Symbol();
const _getPrototype = Symbol();
const _getUnsetAttributes = Symbol();
const _hasChildren = Symbol();
const _max = Symbol();
const _options = Symbol();
const _parent = Symbol("parent");
const _resolvePrototypesHelper = Symbol();
const _setAttributes = Symbol();
const _validator = Symbol();
let uid = 0;
const NS_DATASETS = _namespaces.NamespaceIds.datasets.id;
class XFAObject {
  constructor(nsId, name, hasChildren = false) {
    this[_symbol_utils.$namespaceId] = nsId;
    this[_symbol_utils.$nodeName] = name;
    this[_hasChildren] = hasChildren;
    this[_parent] = null;
    this[_children] = [];
    this[_symbol_utils.$uid] = `${name}${uid++}`;
    this[_symbol_utils.$globalData] = null;
  }
  get isXFAObject() {
    return true;
  }
  get isXFAObjectArray() {
    return false;
  }
  createNodes(path) {
    let root = this,
      node = null;
    for (const {
      name,
      index
    } of path) {
      for (let i = 0, ii = isFinite(index) ? index : 0; i <= ii; i++) {
        const nsId = root[_symbol_utils.$namespaceId] === NS_DATASETS ? -1 : root[_symbol_utils.$namespaceId];
        node = new XmlObject(nsId, name);
        root[_symbol_utils.$appendChild](node);
      }
      root = node;
    }
    return node;
  }
  [_symbol_utils.$onChild](child) {
    if (!this[_hasChildren] || !this[_symbol_utils.$onChildCheck](child)) {
      return false;
    }
    const name = child[_symbol_utils.$nodeName];
    const node = this[name];
    if (node instanceof XFAObjectArray) {
      if (node.push(child)) {
        this[_symbol_utils.$appendChild](child);
        return true;
      }
    } else {
      if (node !== null) {
        this[_symbol_utils.$removeChild](node);
      }
      this[name] = child;
      this[_symbol_utils.$appendChild](child);
      return true;
    }
    let id = "";
    if (this.id) {
      id = ` (id: ${this.id})`;
    } else if (this.name) {
      id = ` (name: ${this.name} ${this.h.value})`;
    }
    (0, _util.warn)(`XFA - node "${this[_symbol_utils.$nodeName]}"${id} has already enough "${name}"!`);
    return false;
  }
  [_symbol_utils.$onChildCheck](child) {
    return this.hasOwnProperty(child[_symbol_utils.$nodeName]) && child[_symbol_utils.$namespaceId] === this[_symbol_utils.$namespaceId];
  }
  [_symbol_utils.$isNsAgnostic]() {
    return false;
  }
  [_symbol_utils.$acceptWhitespace]() {
    return false;
  }
  [_symbol_utils.$isCDATAXml]() {
    return false;
  }
  [_symbol_utils.$isBindable]() {
    return false;
  }
  [_symbol_utils.$popPara]() {
    if (this.para) {
      this[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].paraStack.pop();
    }
  }
  [_symbol_utils.$pushPara]() {
    this[_symbol_utils.$getTemplateRoot]()[_symbol_utils.$extra].paraStack.push(this.para);
  }
  [_symbol_utils.$setId](ids) {
    if (this.id && this[_symbol_utils.$namespaceId] === _namespaces.NamespaceIds.template.id) {
      ids.set(this.id, this);
    }
  }
  [_symbol_utils.$getTemplateRoot]() {
    return this[_symbol_utils.$globalData].template;
  }
  [_symbol_utils.$isSplittable]() {
    return false;
  }
  [_symbol_utils.$isThereMoreWidth]() {
    return false;
  }
  [_symbol_utils.$appendChild](child) {
    child[_parent] = this;
    this[_children].push(child);
    if (!child[_symbol_utils.$globalData] && this[_symbol_utils.$globalData]) {
      child[_symbol_utils.$globalData] = this[_symbol_utils.$globalData];
    }
  }
  [_symbol_utils.$removeChild](child) {
    const i = this[_children].indexOf(child);
    this[_children].splice(i, 1);
  }
  [_symbol_utils.$hasSettableValue]() {
    return this.hasOwnProperty("value");
  }
  [_symbol_utils.$setValue](_) {}
  [_symbol_utils.$onText](_) {}
  [_symbol_utils.$finalize]() {}
  [_symbol_utils.$clean](builder) {
    delete this[_hasChildren];
    if (this[_symbol_utils.$cleanup]) {
      builder.clean(this[_symbol_utils.$cleanup]);
      delete this[_symbol_utils.$cleanup];
    }
  }
  [_symbol_utils.$indexOf](child) {
    return this[_children].indexOf(child);
  }
  [_symbol_utils.$insertAt](i, child) {
    child[_parent] = this;
    this[_children].splice(i, 0, child);
    if (!child[_symbol_utils.$globalData] && this[_symbol_utils.$globalData]) {
      child[_symbol_utils.$globalData] = this[_symbol_utils.$globalData];
    }
  }
  [_symbol_utils.$isTransparent]() {
    return !this.name;
  }
  [_symbol_utils.$lastAttribute]() {
    return "";
  }
  [_symbol_utils.$text]() {
    if (this[_children].length === 0) {
      return this[_symbol_utils.$content];
    }
    return this[_children].map(c => c[_symbol_utils.$text]()).join("");
  }
  get [_attributeNames]() {
    const proto = Object.getPrototypeOf(this);
    if (!proto._attributes) {
      const attributes = proto._attributes = new Set();
      for (const name of Object.getOwnPropertyNames(this)) {
        if (this[name] === null || this[name] instanceof XFAObject || this[name] instanceof XFAObjectArray) {
          break;
        }
        attributes.add(name);
      }
    }
    return (0, _util.shadow)(this, _attributeNames, proto._attributes);
  }
  [_symbol_utils.$isDescendent](parent) {
    let node = this;
    while (node) {
      if (node === parent) {
        return true;
      }
      node = node[_symbol_utils.$getParent]();
    }
    return false;
  }
  [_symbol_utils.$getParent]() {
    return this[_parent];
  }
  [_symbol_utils.$getSubformParent]() {
    return this[_symbol_utils.$getParent]();
  }
  [_symbol_utils.$getChildren](name = null) {
    if (!name) {
      return this[_children];
    }
    return this[name];
  }
  [_symbol_utils.$dump]() {
    const dumped = Object.create(null);
    if (this[_symbol_utils.$content]) {
      dumped.$content = this[_symbol_utils.$content];
    }
    for (const name of Object.getOwnPropertyNames(this)) {
      const value = this[name];
      if (value === null) {
        continue;
      }
      if (value instanceof XFAObject) {
        dumped[name] = value[_symbol_utils.$dump]();
      } else if (value instanceof XFAObjectArray) {
        if (!value.isEmpty()) {
          dumped[name] = value.dump();
        }
      } else {
        dumped[name] = value;
      }
    }
    return dumped;
  }
  [_symbol_utils.$toStyle]() {
    return null;
  }
  [_symbol_utils.$toHTML]() {
    return _utils.HTMLResult.EMPTY;
  }
  *[_symbol_utils.$getContainedChildren]() {
    for (const node of this[_symbol_utils.$getChildren]()) {
      yield node;
    }
  }
  *[_filteredChildrenGenerator](filter, include) {
    for (const node of this[_symbol_utils.$getContainedChildren]()) {
      if (!filter || include === filter.has(node[_symbol_utils.$nodeName])) {
        const availableSpace = this[_symbol_utils.$getAvailableSpace]();
        const res = node[_symbol_utils.$toHTML](availableSpace);
        if (!res.success) {
          this[_symbol_utils.$extra].failingNode = node;
        }
        yield res;
      }
    }
  }
  [_symbol_utils.$flushHTML]() {
    return null;
  }
  [_symbol_utils.$addHTML](html, bbox) {
    this[_symbol_utils.$extra].children.push(html);
  }
  [_symbol_utils.$getAvailableSpace]() {}
  [_symbol_utils.$childrenToHTML]({
    filter = null,
    include = true
  }) {
    if (!this[_symbol_utils.$extra].generator) {
      this[_symbol_utils.$extra].generator = this[_filteredChildrenGenerator](filter, include);
    } else {
      const availableSpace = this[_symbol_utils.$getAvailableSpace]();
      const res = this[_symbol_utils.$extra].failingNode[_symbol_utils.$toHTML](availableSpace);
      if (!res.success) {
        return res;
      }
      if (res.html) {
        this[_symbol_utils.$addHTML](res.html, res.bbox);
      }
      delete this[_symbol_utils.$extra].failingNode;
    }
    while (true) {
      const gen = this[_symbol_utils.$extra].generator.next();
      if (gen.done) {
        break;
      }
      const res = gen.value;
      if (!res.success) {
        return res;
      }
      if (res.html) {
        this[_symbol_utils.$addHTML](res.html, res.bbox);
      }
    }
    this[_symbol_utils.$extra].generator = null;
    return _utils.HTMLResult.EMPTY;
  }
  [_symbol_utils.$setSetAttributes](attributes) {
    this[_setAttributes] = new Set(Object.keys(attributes));
  }
  [_getUnsetAttributes](protoAttributes) {
    const allAttr = this[_attributeNames];
    const setAttr = this[_setAttributes];
    return [...protoAttributes].filter(x => allAttr.has(x) && !setAttr.has(x));
  }
  [_symbol_utils.$resolvePrototypes](ids, ancestors = new Set()) {
    for (const child of this[_children]) {
      child[_resolvePrototypesHelper](ids, ancestors);
    }
  }
  [_resolvePrototypesHelper](ids, ancestors) {
    const proto = this[_getPrototype](ids, ancestors);
    if (proto) {
      this[_applyPrototype](proto, ids, ancestors);
    } else {
      this[_symbol_utils.$resolvePrototypes](ids, ancestors);
    }
  }
  [_getPrototype](ids, ancestors) {
    const {
      use,
      usehref
    } = this;
    if (!use && !usehref) {
      return null;
    }
    let proto = null;
    let somExpression = null;
    let id = null;
    let ref = use;
    if (usehref) {
      ref = usehref;
      if (usehref.startsWith("#som(") && usehref.endsWith(")")) {
        somExpression = usehref.slice("#som(".length, -1);
      } else if (usehref.startsWith(".#som(") && usehref.endsWith(")")) {
        somExpression = usehref.slice(".#som(".length, -1);
      } else if (usehref.startsWith("#")) {
        id = usehref.slice(1);
      } else if (usehref.startsWith(".#")) {
        id = usehref.slice(2);
      }
    } else if (use.startsWith("#")) {
      id = use.slice(1);
    } else {
      somExpression = use;
    }
    this.use = this.usehref = "";
    if (id) {
      proto = ids.get(id);
    } else {
      proto = (0, _som.searchNode)(ids.get(_symbol_utils.$root), this, somExpression, true, false);
      if (proto) {
        proto = proto[0];
      }
    }
    if (!proto) {
      (0, _util.warn)(`XFA - Invalid prototype reference: ${ref}.`);
      return null;
    }
    if (proto[_symbol_utils.$nodeName] !== this[_symbol_utils.$nodeName]) {
      (0, _util.warn)(`XFA - Incompatible prototype: ${proto[_symbol_utils.$nodeName]} !== ${this[_symbol_utils.$nodeName]}.`);
      return null;
    }
    if (ancestors.has(proto)) {
      (0, _util.warn)(`XFA - Cycle detected in prototypes use.`);
      return null;
    }
    ancestors.add(proto);
    const protoProto = proto[_getPrototype](ids, ancestors);
    if (protoProto) {
      proto[_applyPrototype](protoProto, ids, ancestors);
    }
    proto[_symbol_utils.$resolvePrototypes](ids, ancestors);
    ancestors.delete(proto);
    return proto;
  }
  [_applyPrototype](proto, ids, ancestors) {
    if (ancestors.has(proto)) {
      (0, _util.warn)(`XFA - Cycle detected in prototypes use.`);
      return;
    }
    if (!this[_symbol_utils.$content] && proto[_symbol_utils.$content]) {
      this[_symbol_utils.$content] = proto[_symbol_utils.$content];
    }
    const newAncestors = new Set(ancestors);
    newAncestors.add(proto);
    for (const unsetAttrName of this[_getUnsetAttributes](proto[_setAttributes])) {
      this[unsetAttrName] = proto[unsetAttrName];
      if (this[_setAttributes]) {
        this[_setAttributes].add(unsetAttrName);
      }
    }
    for (const name of Object.getOwnPropertyNames(this)) {
      if (this[_attributeNames].has(name)) {
        continue;
      }
      const value = this[name];
      const protoValue = proto[name];
      if (value instanceof XFAObjectArray) {
        for (const child of value[_children]) {
          child[_resolvePrototypesHelper](ids, ancestors);
        }
        for (let i = value[_children].length, ii = protoValue[_children].length; i < ii; i++) {
          const child = proto[_children][i][_symbol_utils.$clone]();
          if (value.push(child)) {
            child[_parent] = this;
            this[_children].push(child);
            child[_resolvePrototypesHelper](ids, ancestors);
          } else {
            break;
          }
        }
        continue;
      }
      if (value !== null) {
        value[_symbol_utils.$resolvePrototypes](ids, ancestors);
        if (protoValue) {
          value[_applyPrototype](protoValue, ids, ancestors);
        }
        continue;
      }
      if (protoValue !== null) {
        const child = protoValue[_symbol_utils.$clone]();
        child[_parent] = this;
        this[name] = child;
        this[_children].push(child);
        child[_resolvePrototypesHelper](ids, ancestors);
      }
    }
  }
  static [_cloneAttribute](obj) {
    if (Array.isArray(obj)) {
      return obj.map(x => XFAObject[_cloneAttribute](x));
    }
    if (typeof obj === "object" && obj !== null) {
      return Object.assign({}, obj);
    }
    return obj;
  }
  [_symbol_utils.$clone]() {
    const clone = Object.create(Object.getPrototypeOf(this));
    for (const $symbol of Object.getOwnPropertySymbols(this)) {
      try {
        clone[$symbol] = this[$symbol];
      } catch {
        (0, _util.shadow)(clone, $symbol, this[$symbol]);
      }
    }
    clone[_symbol_utils.$uid] = `${clone[_symbol_utils.$nodeName]}${uid++}`;
    clone[_children] = [];
    for (const name of Object.getOwnPropertyNames(this)) {
      if (this[_attributeNames].has(name)) {
        clone[name] = XFAObject[_cloneAttribute](this[name]);
        continue;
      }
      const value = this[name];
      clone[name] = value instanceof XFAObjectArray ? new XFAObjectArray(value[_max]) : null;
    }
    for (const child of this[_children]) {
      const name = child[_symbol_utils.$nodeName];
      const clonedChild = child[_symbol_utils.$clone]();
      clone[_children].push(clonedChild);
      clonedChild[_parent] = clone;
      if (clone[name] === null) {
        clone[name] = clonedChild;
      } else {
        clone[name][_children].push(clonedChild);
      }
    }
    return clone;
  }
  [_symbol_utils.$getChildren](name = null) {
    if (!name) {
      return this[_children];
    }
    return this[_children].filter(c => c[_symbol_utils.$nodeName] === name);
  }
  [_symbol_utils.$getChildrenByClass](name) {
    return this[name];
  }
  [_symbol_utils.$getChildrenByName](name, allTransparent, first = true) {
    return Array.from(this[_symbol_utils.$getChildrenByNameIt](name, allTransparent, first));
  }
  *[_symbol_utils.$getChildrenByNameIt](name, allTransparent, first = true) {
    if (name === "parent") {
      yield this[_parent];
      return;
    }
    for (const child of this[_children]) {
      if (child[_symbol_utils.$nodeName] === name) {
        yield child;
      }
      if (child.name === name) {
        yield child;
      }
      if (allTransparent || child[_symbol_utils.$isTransparent]()) {
        yield* child[_symbol_utils.$getChildrenByNameIt](name, allTransparent, false);
      }
    }
    if (first && this[_attributeNames].has(name)) {
      yield new XFAAttribute(this, name, this[name]);
    }
  }
}
exports.XFAObject = XFAObject;
class XFAObjectArray {
  constructor(max = Infinity) {
    this[_max] = max;
    this[_children] = [];
  }
  get isXFAObject() {
    return false;
  }
  get isXFAObjectArray() {
    return true;
  }
  push(child) {
    const len = this[_children].length;
    if (len <= this[_max]) {
      this[_children].push(child);
      return true;
    }
    (0, _util.warn)(`XFA - node "${child[_symbol_utils.$nodeName]}" accepts no more than ${this[_max]} children`);
    return false;
  }
  isEmpty() {
    return this[_children].length === 0;
  }
  dump() {
    return this[_children].length === 1 ? this[_children][0][_symbol_utils.$dump]() : this[_children].map(x => x[_symbol_utils.$dump]());
  }
  [_symbol_utils.$clone]() {
    const clone = new XFAObjectArray(this[_max]);
    clone[_children] = this[_children].map(c => c[_symbol_utils.$clone]());
    return clone;
  }
  get children() {
    return this[_children];
  }
  clear() {
    this[_children].length = 0;
  }
}
exports.XFAObjectArray = XFAObjectArray;
class XFAAttribute {
  constructor(node, name, value) {
    this[_parent] = node;
    this[_symbol_utils.$nodeName] = name;
    this[_symbol_utils.$content] = value;
    this[_symbol_utils.$consumed] = false;
    this[_symbol_utils.$uid] = `attribute${uid++}`;
  }
  [_symbol_utils.$getParent]() {
    return this[_parent];
  }
  [_symbol_utils.$isDataValue]() {
    return true;
  }
  [_symbol_utils.$getDataValue]() {
    return this[_symbol_utils.$content].trim();
  }
  [_symbol_utils.$setValue](value) {
    value = value.value || "";
    this[_symbol_utils.$content] = value.toString();
  }
  [_symbol_utils.$text]() {
    return this[_symbol_utils.$content];
  }
  [_symbol_utils.$isDescendent](parent) {
    return this[_parent] === parent || this[_parent][_symbol_utils.$isDescendent](parent);
  }
}
exports.XFAAttribute = XFAAttribute;
class XmlObject extends XFAObject {
  constructor(nsId, name, attributes = {}) {
    super(nsId, name);
    this[_symbol_utils.$content] = "";
    this[_dataValue] = null;
    if (name !== "#text") {
      const map = new Map();
      this[_attributes] = map;
      for (const [attrName, value] of Object.entries(attributes)) {
        map.set(attrName, new XFAAttribute(this, attrName, value));
      }
      if (attributes.hasOwnProperty(_symbol_utils.$nsAttributes)) {
        const dataNode = attributes[_symbol_utils.$nsAttributes].xfa.dataNode;
        if (dataNode !== undefined) {
          if (dataNode === "dataGroup") {
            this[_dataValue] = false;
          } else if (dataNode === "dataValue") {
            this[_dataValue] = true;
          }
        }
      }
    }
    this[_symbol_utils.$consumed] = false;
  }
  [_symbol_utils.$toString](buf) {
    const tagName = this[_symbol_utils.$nodeName];
    if (tagName === "#text") {
      buf.push((0, _core_utils.encodeToXmlString)(this[_symbol_utils.$content]));
      return;
    }
    const utf8TagName = (0, _util.utf8StringToString)(tagName);
    const prefix = this[_symbol_utils.$namespaceId] === NS_DATASETS ? "xfa:" : "";
    buf.push(`<${prefix}${utf8TagName}`);
    for (const [name, value] of this[_attributes].entries()) {
      const utf8Name = (0, _util.utf8StringToString)(name);
      buf.push(` ${utf8Name}="${(0, _core_utils.encodeToXmlString)(value[_symbol_utils.$content])}"`);
    }
    if (this[_dataValue] !== null) {
      if (this[_dataValue]) {
        buf.push(` xfa:dataNode="dataValue"`);
      } else {
        buf.push(` xfa:dataNode="dataGroup"`);
      }
    }
    if (!this[_symbol_utils.$content] && this[_children].length === 0) {
      buf.push("/>");
      return;
    }
    buf.push(">");
    if (this[_symbol_utils.$content]) {
      if (typeof this[_symbol_utils.$content] === "string") {
        buf.push((0, _core_utils.encodeToXmlString)(this[_symbol_utils.$content]));
      } else {
        this[_symbol_utils.$content][_symbol_utils.$toString](buf);
      }
    } else {
      for (const child of this[_children]) {
        child[_symbol_utils.$toString](buf);
      }
    }
    buf.push(`</${prefix}${utf8TagName}>`);
  }
  [_symbol_utils.$onChild](child) {
    if (this[_symbol_utils.$content]) {
      const node = new XmlObject(this[_symbol_utils.$namespaceId], "#text");
      this[_symbol_utils.$appendChild](node);
      node[_symbol_utils.$content] = this[_symbol_utils.$content];
      this[_symbol_utils.$content] = "";
    }
    this[_symbol_utils.$appendChild](child);
    return true;
  }
  [_symbol_utils.$onText](str) {
    this[_symbol_utils.$content] += str;
  }
  [_symbol_utils.$finalize]() {
    if (this[_symbol_utils.$content] && this[_children].length > 0) {
      const node = new XmlObject(this[_symbol_utils.$namespaceId], "#text");
      this[_symbol_utils.$appendChild](node);
      node[_symbol_utils.$content] = this[_symbol_utils.$content];
      delete this[_symbol_utils.$content];
    }
  }
  [_symbol_utils.$toHTML]() {
    if (this[_symbol_utils.$nodeName] === "#text") {
      return _utils.HTMLResult.success({
        name: "#text",
        value: this[_symbol_utils.$content]
      });
    }
    return _utils.HTMLResult.EMPTY;
  }
  [_symbol_utils.$getChildren](name = null) {
    if (!name) {
      return this[_children];
    }
    return this[_children].filter(c => c[_symbol_utils.$nodeName] === name);
  }
  [_symbol_utils.$getAttributes]() {
    return this[_attributes];
  }
  [_symbol_utils.$getChildrenByClass](name) {
    const value = this[_attributes].get(name);
    if (value !== undefined) {
      return value;
    }
    return this[_symbol_utils.$getChildren](name);
  }
  *[_symbol_utils.$getChildrenByNameIt](name, allTransparent) {
    const value = this[_attributes].get(name);
    if (value) {
      yield value;
    }
    for (const child of this[_children]) {
      if (child[_symbol_utils.$nodeName] === name) {
        yield child;
      }
      if (allTransparent) {
        yield* child[_symbol_utils.$getChildrenByNameIt](name, allTransparent);
      }
    }
  }
  *[_symbol_utils.$getAttributeIt](name, skipConsumed) {
    const value = this[_attributes].get(name);
    if (value && (!skipConsumed || !value[_symbol_utils.$consumed])) {
      yield value;
    }
    for (const child of this[_children]) {
      yield* child[_symbol_utils.$getAttributeIt](name, skipConsumed);
    }
  }
  *[_symbol_utils.$getRealChildrenByNameIt](name, allTransparent, skipConsumed) {
    for (const child of this[_children]) {
      if (child[_symbol_utils.$nodeName] === name && (!skipConsumed || !child[_symbol_utils.$consumed])) {
        yield child;
      }
      if (allTransparent) {
        yield* child[_symbol_utils.$getRealChildrenByNameIt](name, allTransparent, skipConsumed);
      }
    }
  }
  [_symbol_utils.$isDataValue]() {
    if (this[_dataValue] === null) {
      return this[_children].length === 0 || this[_children][0][_symbol_utils.$namespaceId] === _namespaces.NamespaceIds.xhtml.id;
    }
    return this[_dataValue];
  }
  [_symbol_utils.$getDataValue]() {
    if (this[_dataValue] === null) {
      if (this[_children].length === 0) {
        return this[_symbol_utils.$content].trim();
      }
      if (this[_children][0][_symbol_utils.$namespaceId] === _namespaces.NamespaceIds.xhtml.id) {
        return this[_children][0][_symbol_utils.$text]().trim();
      }
      return null;
    }
    return this[_symbol_utils.$content].trim();
  }
  [_symbol_utils.$setValue](value) {
    value = value.value || "";
    this[_symbol_utils.$content] = value.toString();
  }
  [_symbol_utils.$dump](hasNS = false) {
    const dumped = Object.create(null);
    if (hasNS) {
      dumped.$ns = this[_symbol_utils.$namespaceId];
    }
    if (this[_symbol_utils.$content]) {
      dumped.$content = this[_symbol_utils.$content];
    }
    dumped.$name = this[_symbol_utils.$nodeName];
    dumped.children = [];
    for (const child of this[_children]) {
      dumped.children.push(child[_symbol_utils.$dump](hasNS));
    }
    dumped.attributes = Object.create(null);
    for (const [name, value] of this[_attributes]) {
      dumped.attributes[name] = value[_symbol_utils.$content];
    }
    return dumped;
  }
}
exports.XmlObject = XmlObject;
class ContentObject extends XFAObject {
  constructor(nsId, name) {
    super(nsId, name);
    this[_symbol_utils.$content] = "";
  }
  [_symbol_utils.$onText](text) {
    this[_symbol_utils.$content] += text;
  }
  [_symbol_utils.$finalize]() {}
}
exports.ContentObject = ContentObject;
class OptionObject extends ContentObject {
  constructor(nsId, name, options) {
    super(nsId, name);
    this[_options] = options;
  }
  [_symbol_utils.$finalize]() {
    this[_symbol_utils.$content] = (0, _utils.getKeyword)({
      data: this[_symbol_utils.$content],
      defaultValue: this[_options][0],
      validate: k => this[_options].includes(k)
    });
  }
  [_symbol_utils.$clean](builder) {
    super[_symbol_utils.$clean](builder);
    delete this[_options];
  }
}
exports.OptionObject = OptionObject;
class StringObject extends ContentObject {
  [_symbol_utils.$finalize]() {
    this[_symbol_utils.$content] = this[_symbol_utils.$content].trim();
  }
}
exports.StringObject = StringObject;
class IntegerObject extends ContentObject {
  constructor(nsId, name, defaultValue, validator) {
    super(nsId, name);
    this[_defaultValue] = defaultValue;
    this[_validator] = validator;
  }
  [_symbol_utils.$finalize]() {
    this[_symbol_utils.$content] = (0, _utils.getInteger)({
      data: this[_symbol_utils.$content],
      defaultValue: this[_defaultValue],
      validate: this[_validator]
    });
  }
  [_symbol_utils.$clean](builder) {
    super[_symbol_utils.$clean](builder);
    delete this[_defaultValue];
    delete this[_validator];
  }
}
exports.IntegerObject = IntegerObject;
class Option01 extends IntegerObject {
  constructor(nsId, name) {
    super(nsId, name, 0, n => n === 1);
  }
}
exports.Option01 = Option01;
class Option10 extends IntegerObject {
  constructor(nsId, name) {
    super(nsId, name, 1, n => n === 0);
  }
}
exports.Option10 = Option10;

/***/ }),
/* 88 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.createDataNode = createDataNode;
exports.searchNode = searchNode;
var _symbol_utils = __w_pdfjs_require__(78);
var _util = __w_pdfjs_require__(2);
const namePattern = /^[^.[]+/;
const indexPattern = /^[^\]]+/;
const operators = {
  dot: 0,
  dotDot: 1,
  dotHash: 2,
  dotBracket: 3,
  dotParen: 4
};
const shortcuts = new Map([["$data", (root, current) => root.datasets ? root.datasets.data : root], ["$record", (root, current) => (root.datasets ? root.datasets.data : root)[_symbol_utils.$getChildren]()[0]], ["$template", (root, current) => root.template], ["$connectionSet", (root, current) => root.connectionSet], ["$form", (root, current) => root.form], ["$layout", (root, current) => root.layout], ["$host", (root, current) => root.host], ["$dataWindow", (root, current) => root.dataWindow], ["$event", (root, current) => root.event], ["!", (root, current) => root.datasets], ["$xfa", (root, current) => root], ["xfa", (root, current) => root], ["$", (root, current) => current]]);
const somCache = new WeakMap();
function parseIndex(index) {
  index = index.trim();
  if (index === "*") {
    return Infinity;
  }
  return parseInt(index, 10) || 0;
}
function parseExpression(expr, dotDotAllowed, noExpr = true) {
  let match = expr.match(namePattern);
  if (!match) {
    return null;
  }
  let [name] = match;
  const parsed = [{
    name,
    cacheName: "." + name,
    index: 0,
    js: null,
    formCalc: null,
    operator: operators.dot
  }];
  let pos = name.length;
  while (pos < expr.length) {
    const spos = pos;
    const char = expr.charAt(pos++);
    if (char === "[") {
      match = expr.slice(pos).match(indexPattern);
      if (!match) {
        (0, _util.warn)("XFA - Invalid index in SOM expression");
        return null;
      }
      parsed.at(-1).index = parseIndex(match[0]);
      pos += match[0].length + 1;
      continue;
    }
    let operator;
    switch (expr.charAt(pos)) {
      case ".":
        if (!dotDotAllowed) {
          return null;
        }
        pos++;
        operator = operators.dotDot;
        break;
      case "#":
        pos++;
        operator = operators.dotHash;
        break;
      case "[":
        if (noExpr) {
          (0, _util.warn)("XFA - SOM expression contains a FormCalc subexpression which is not supported for now.");
          return null;
        }
        operator = operators.dotBracket;
        break;
      case "(":
        if (noExpr) {
          (0, _util.warn)("XFA - SOM expression contains a JavaScript subexpression which is not supported for now.");
          return null;
        }
        operator = operators.dotParen;
        break;
      default:
        operator = operators.dot;
        break;
    }
    match = expr.slice(pos).match(namePattern);
    if (!match) {
      break;
    }
    [name] = match;
    pos += name.length;
    parsed.push({
      name,
      cacheName: expr.slice(spos, pos),
      operator,
      index: 0,
      js: null,
      formCalc: null
    });
  }
  return parsed;
}
function searchNode(root, container, expr, dotDotAllowed = true, useCache = true) {
  const parsed = parseExpression(expr, dotDotAllowed);
  if (!parsed) {
    return null;
  }
  const fn = shortcuts.get(parsed[0].name);
  let i = 0;
  let isQualified;
  if (fn) {
    isQualified = true;
    root = [fn(root, container)];
    i = 1;
  } else {
    isQualified = container === null;
    root = [container || root];
  }
  for (let ii = parsed.length; i < ii; i++) {
    const {
      name,
      cacheName,
      operator,
      index
    } = parsed[i];
    const nodes = [];
    for (const node of root) {
      if (!node.isXFAObject) {
        continue;
      }
      let children, cached;
      if (useCache) {
        cached = somCache.get(node);
        if (!cached) {
          cached = new Map();
          somCache.set(node, cached);
        }
        children = cached.get(cacheName);
      }
      if (!children) {
        switch (operator) {
          case operators.dot:
            children = node[_symbol_utils.$getChildrenByName](name, false);
            break;
          case operators.dotDot:
            children = node[_symbol_utils.$getChildrenByName](name, true);
            break;
          case operators.dotHash:
            children = node[_symbol_utils.$getChildrenByClass](name);
            children = children.isXFAObjectArray ? children.children : [children];
            break;
          default:
            break;
        }
        if (useCache) {
          cached.set(cacheName, children);
        }
      }
      if (children.length > 0) {
        nodes.push(children);
      }
    }
    if (nodes.length === 0 && !isQualified && i === 0) {
      const parent = container[_symbol_utils.$getParent]();
      container = parent;
      if (!container) {
        return null;
      }
      i = -1;
      root = [container];
      continue;
    }
    root = isFinite(index) ? nodes.filter(node => index < node.length).map(node => node[index]) : nodes.flat();
  }
  if (root.length === 0) {
    return null;
  }
  return root;
}
function createDataNode(root, container, expr) {
  const parsed = parseExpression(expr);
  if (!parsed) {
    return null;
  }
  if (parsed.some(x => x.operator === operators.dotDot)) {
    return null;
  }
  const fn = shortcuts.get(parsed[0].name);
  let i = 0;
  if (fn) {
    root = fn(root, container);
    i = 1;
  } else {
    root = container || root;
  }
  for (let ii = parsed.length; i < ii; i++) {
    const {
      name,
      operator,
      index
    } = parsed[i];
    if (!isFinite(index)) {
      parsed[i].index = 0;
      return root.createNodes(parsed.slice(i));
    }
    let children;
    switch (operator) {
      case operators.dot:
        children = root[_symbol_utils.$getChildrenByName](name, false);
        break;
      case operators.dotDot:
        children = root[_symbol_utils.$getChildrenByName](name, true);
        break;
      case operators.dotHash:
        children = root[_symbol_utils.$getChildrenByClass](name);
        children = children.isXFAObjectArray ? children.children : [children];
        break;
      default:
        break;
    }
    if (children.length === 0) {
      return root.createNodes(parsed.slice(i));
    }
    if (index < children.length) {
      const child = children[index];
      if (!child.isXFAObject) {
        (0, _util.warn)(`XFA - Cannot create a node.`);
        return null;
      }
      root = child;
    } else {
      parsed[i].index = index - children.length;
      return root.createNodes(parsed.slice(i));
    }
  }
  return null;
}

/***/ }),
/* 89 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.DataHandler = void 0;
var _symbol_utils = __w_pdfjs_require__(78);
class DataHandler {
  constructor(root, data) {
    this.data = data;
    this.dataset = root.datasets || null;
  }
  serialize(storage) {
    const stack = [[-1, this.data[_symbol_utils.$getChildren]()]];
    while (stack.length > 0) {
      const last = stack.at(-1);
      const [i, children] = last;
      if (i + 1 === children.length) {
        stack.pop();
        continue;
      }
      const child = children[++last[0]];
      const storageEntry = storage.get(child[_symbol_utils.$uid]);
      if (storageEntry) {
        child[_symbol_utils.$setValue](storageEntry);
      } else {
        const attributes = child[_symbol_utils.$getAttributes]();
        for (const value of attributes.values()) {
          const entry = storage.get(value[_symbol_utils.$uid]);
          if (entry) {
            value[_symbol_utils.$setValue](entry);
            break;
          }
        }
      }
      const nodes = child[_symbol_utils.$getChildren]();
      if (nodes.length > 0) {
        stack.push([-1, nodes]);
      }
    }
    const buf = [`<xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">`];
    if (this.dataset) {
      for (const child of this.dataset[_symbol_utils.$getChildren]()) {
        if (child[_symbol_utils.$nodeName] !== "data") {
          child[_symbol_utils.$toString](buf);
        }
      }
    }
    this.data[_symbol_utils.$toString](buf);
    buf.push("</xfa:datasets>");
    return buf.join("");
  }
}
exports.DataHandler = DataHandler;

/***/ }),
/* 90 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.XFAParser = void 0;
var _symbol_utils = __w_pdfjs_require__(78);
var _xml_parser = __w_pdfjs_require__(71);
var _builder = __w_pdfjs_require__(91);
var _util = __w_pdfjs_require__(2);
class XFAParser extends _xml_parser.XMLParserBase {
  constructor(rootNameSpace = null, richText = false) {
    super();
    this._builder = new _builder.Builder(rootNameSpace);
    this._stack = [];
    this._globalData = {
      usedTypefaces: new Set()
    };
    this._ids = new Map();
    this._current = this._builder.buildRoot(this._ids);
    this._errorCode = _xml_parser.XMLParserErrorCode.NoError;
    this._whiteRegex = /^\s+$/;
    this._nbsps = /\xa0+/g;
    this._richText = richText;
  }
  parse(data) {
    this.parseXml(data);
    if (this._errorCode !== _xml_parser.XMLParserErrorCode.NoError) {
      return undefined;
    }
    this._current[_symbol_utils.$finalize]();
    return this._current.element;
  }
  onText(text) {
    text = text.replace(this._nbsps, match => match.slice(1) + " ");
    if (this._richText || this._current[_symbol_utils.$acceptWhitespace]()) {
      this._current[_symbol_utils.$onText](text, this._richText);
      return;
    }
    if (this._whiteRegex.test(text)) {
      return;
    }
    this._current[_symbol_utils.$onText](text.trim());
  }
  onCdata(text) {
    this._current[_symbol_utils.$onText](text);
  }
  _mkAttributes(attributes, tagName) {
    let namespace = null;
    let prefixes = null;
    const attributeObj = Object.create({});
    for (const {
      name,
      value
    } of attributes) {
      if (name === "xmlns") {
        if (!namespace) {
          namespace = value;
        } else {
          (0, _util.warn)(`XFA - multiple namespace definition in <${tagName}>`);
        }
      } else if (name.startsWith("xmlns:")) {
        const prefix = name.substring("xmlns:".length);
        if (!prefixes) {
          prefixes = [];
        }
        prefixes.push({
          prefix,
          value
        });
      } else {
        const i = name.indexOf(":");
        if (i === -1) {
          attributeObj[name] = value;
        } else {
          let nsAttrs = attributeObj[_symbol_utils.$nsAttributes];
          if (!nsAttrs) {
            nsAttrs = attributeObj[_symbol_utils.$nsAttributes] = Object.create(null);
          }
          const [ns, attrName] = [name.slice(0, i), name.slice(i + 1)];
          const attrs = nsAttrs[ns] ||= Object.create(null);
          attrs[attrName] = value;
        }
      }
    }
    return [namespace, prefixes, attributeObj];
  }
  _getNameAndPrefix(name, nsAgnostic) {
    const i = name.indexOf(":");
    if (i === -1) {
      return [name, null];
    }
    return [name.substring(i + 1), nsAgnostic ? "" : name.substring(0, i)];
  }
  onBeginElement(tagName, attributes, isEmpty) {
    const [namespace, prefixes, attributesObj] = this._mkAttributes(attributes, tagName);
    const [name, nsPrefix] = this._getNameAndPrefix(tagName, this._builder.isNsAgnostic());
    const node = this._builder.build({
      nsPrefix,
      name,
      attributes: attributesObj,
      namespace,
      prefixes
    });
    node[_symbol_utils.$globalData] = this._globalData;
    if (isEmpty) {
      node[_symbol_utils.$finalize]();
      if (this._current[_symbol_utils.$onChild](node)) {
        node[_symbol_utils.$setId](this._ids);
      }
      node[_symbol_utils.$clean](this._builder);
      return;
    }
    this._stack.push(this._current);
    this._current = node;
  }
  onEndElement(name) {
    const node = this._current;
    if (node[_symbol_utils.$isCDATAXml]() && typeof node[_symbol_utils.$content] === "string") {
      const parser = new XFAParser();
      parser._globalData = this._globalData;
      const root = parser.parse(node[_symbol_utils.$content]);
      node[_symbol_utils.$content] = null;
      node[_symbol_utils.$onChild](root);
    }
    node[_symbol_utils.$finalize]();
    this._current = this._stack.pop();
    if (this._current[_symbol_utils.$onChild](node)) {
      node[_symbol_utils.$setId](this._ids);
    }
    node[_symbol_utils.$clean](this._builder);
  }
  onError(code) {
    this._errorCode = code;
  }
}
exports.XFAParser = XFAParser;

/***/ }),
/* 91 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.Builder = void 0;
var _namespaces = __w_pdfjs_require__(81);
var _symbol_utils = __w_pdfjs_require__(78);
var _setup = __w_pdfjs_require__(92);
var _template = __w_pdfjs_require__(80);
var _unknown = __w_pdfjs_require__(101);
var _util = __w_pdfjs_require__(2);
var _xfa_object = __w_pdfjs_require__(87);
class Root extends _xfa_object.XFAObject {
  constructor(ids) {
    super(-1, "root", Object.create(null));
    this.element = null;
    this[_symbol_utils.$ids] = ids;
  }
  [_symbol_utils.$onChild](child) {
    this.element = child;
    return true;
  }
  [_symbol_utils.$finalize]() {
    super[_symbol_utils.$finalize]();
    if (this.element.template instanceof _template.Template) {
      this[_symbol_utils.$ids].set(_symbol_utils.$root, this.element);
      this.element.template[_symbol_utils.$resolvePrototypes](this[_symbol_utils.$ids]);
      this.element.template[_symbol_utils.$ids] = this[_symbol_utils.$ids];
    }
  }
}
class Empty extends _xfa_object.XFAObject {
  constructor() {
    super(-1, "", Object.create(null));
  }
  [_symbol_utils.$onChild](_) {
    return false;
  }
}
class Builder {
  constructor(rootNameSpace = null) {
    this._namespaceStack = [];
    this._nsAgnosticLevel = 0;
    this._namespacePrefixes = new Map();
    this._namespaces = new Map();
    this._nextNsId = Math.max(...Object.values(_namespaces.NamespaceIds).map(({
      id
    }) => id));
    this._currentNamespace = rootNameSpace || new _unknown.UnknownNamespace(++this._nextNsId);
  }
  buildRoot(ids) {
    return new Root(ids);
  }
  build({
    nsPrefix,
    name,
    attributes,
    namespace,
    prefixes
  }) {
    const hasNamespaceDef = namespace !== null;
    if (hasNamespaceDef) {
      this._namespaceStack.push(this._currentNamespace);
      this._currentNamespace = this._searchNamespace(namespace);
    }
    if (prefixes) {
      this._addNamespacePrefix(prefixes);
    }
    if (attributes.hasOwnProperty(_symbol_utils.$nsAttributes)) {
      const dataTemplate = _setup.NamespaceSetUp.datasets;
      const nsAttrs = attributes[_symbol_utils.$nsAttributes];
      let xfaAttrs = null;
      for (const [ns, attrs] of Object.entries(nsAttrs)) {
        const nsToUse = this._getNamespaceToUse(ns);
        if (nsToUse === dataTemplate) {
          xfaAttrs = {
            xfa: attrs
          };
          break;
        }
      }
      if (xfaAttrs) {
        attributes[_symbol_utils.$nsAttributes] = xfaAttrs;
      } else {
        delete attributes[_symbol_utils.$nsAttributes];
      }
    }
    const namespaceToUse = this._getNamespaceToUse(nsPrefix);
    const node = namespaceToUse?.[_namespaces.$buildXFAObject](name, attributes) || new Empty();
    if (node[_symbol_utils.$isNsAgnostic]()) {
      this._nsAgnosticLevel++;
    }
    if (hasNamespaceDef || prefixes || node[_symbol_utils.$isNsAgnostic]()) {
      node[_symbol_utils.$cleanup] = {
        hasNamespace: hasNamespaceDef,
        prefixes,
        nsAgnostic: node[_symbol_utils.$isNsAgnostic]()
      };
    }
    return node;
  }
  isNsAgnostic() {
    return this._nsAgnosticLevel > 0;
  }
  _searchNamespace(nsName) {
    let ns = this._namespaces.get(nsName);
    if (ns) {
      return ns;
    }
    for (const [name, {
      check
    }] of Object.entries(_namespaces.NamespaceIds)) {
      if (check(nsName)) {
        ns = _setup.NamespaceSetUp[name];
        if (ns) {
          this._namespaces.set(nsName, ns);
          return ns;
        }
        break;
      }
    }
    ns = new _unknown.UnknownNamespace(++this._nextNsId);
    this._namespaces.set(nsName, ns);
    return ns;
  }
  _addNamespacePrefix(prefixes) {
    for (const {
      prefix,
      value
    } of prefixes) {
      const namespace = this._searchNamespace(value);
      let prefixStack = this._namespacePrefixes.get(prefix);
      if (!prefixStack) {
        prefixStack = [];
        this._namespacePrefixes.set(prefix, prefixStack);
      }
      prefixStack.push(namespace);
    }
  }
  _getNamespaceToUse(prefix) {
    if (!prefix) {
      return this._currentNamespace;
    }
    const prefixStack = this._namespacePrefixes.get(prefix);
    if (prefixStack?.length > 0) {
      return prefixStack.at(-1);
    }
    (0, _util.warn)(`Unknown namespace prefix: ${prefix}.`);
    return null;
  }
  clean(data) {
    const {
      hasNamespace,
      prefixes,
      nsAgnostic
    } = data;
    if (hasNamespace) {
      this._currentNamespace = this._namespaceStack.pop();
    }
    if (prefixes) {
      prefixes.forEach(({
        prefix
      }) => {
        this._namespacePrefixes.get(prefix).pop();
      });
    }
    if (nsAgnostic) {
      this._nsAgnosticLevel--;
    }
  }
}
exports.Builder = Builder;

/***/ }),
/* 92 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.NamespaceSetUp = void 0;
var _config = __w_pdfjs_require__(93);
var _connection_set = __w_pdfjs_require__(94);
var _datasets = __w_pdfjs_require__(95);
var _locale_set = __w_pdfjs_require__(96);
var _signature = __w_pdfjs_require__(97);
var _stylesheet = __w_pdfjs_require__(98);
var _template = __w_pdfjs_require__(80);
var _xdp = __w_pdfjs_require__(99);
var _xhtml = __w_pdfjs_require__(100);
const NamespaceSetUp = {
  config: _config.ConfigNamespace,
  connection: _connection_set.ConnectionSetNamespace,
  datasets: _datasets.DatasetsNamespace,
  localeSet: _locale_set.LocaleSetNamespace,
  signature: _signature.SignatureNamespace,
  stylesheet: _stylesheet.StylesheetNamespace,
  template: _template.TemplateNamespace,
  xdp: _xdp.XdpNamespace,
  xhtml: _xhtml.XhtmlNamespace
};
exports.NamespaceSetUp = NamespaceSetUp;

/***/ }),
/* 93 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.ConfigNamespace = void 0;
var _namespaces = __w_pdfjs_require__(81);
var _symbol_utils = __w_pdfjs_require__(78);
var _xfa_object = __w_pdfjs_require__(87);
var _utils = __w_pdfjs_require__(84);
var _util = __w_pdfjs_require__(2);
const CONFIG_NS_ID = _namespaces.NamespaceIds.config.id;
class Acrobat extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "acrobat", true);
    this.acrobat7 = null;
    this.autoSave = null;
    this.common = null;
    this.validate = null;
    this.validateApprovalSignatures = null;
    this.submitUrl = new _xfa_object.XFAObjectArray();
  }
}
class Acrobat7 extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "acrobat7", true);
    this.dynamicRender = null;
  }
}
class ADBE_JSConsole extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "ADBE_JSConsole", ["delegate", "Enable", "Disable"]);
  }
}
class ADBE_JSDebugger extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "ADBE_JSDebugger", ["delegate", "Enable", "Disable"]);
  }
}
class AddSilentPrint extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "addSilentPrint");
  }
}
class AddViewerPreferences extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "addViewerPreferences");
  }
}
class AdjustData extends _xfa_object.Option10 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "adjustData");
  }
}
class AdobeExtensionLevel extends _xfa_object.IntegerObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "adobeExtensionLevel", 0, n => n >= 1 && n <= 8);
  }
}
class Agent extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "agent", true);
    this.name = attributes.name ? attributes.name.trim() : "";
    this.common = new _xfa_object.XFAObjectArray();
  }
}
class AlwaysEmbed extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "alwaysEmbed");
  }
}
class Amd extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "amd");
  }
}
class Area extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "area");
    this.level = (0, _utils.getInteger)({
      data: attributes.level,
      defaultValue: 0,
      validate: n => n >= 1 && n <= 3
    });
    this.name = (0, _utils.getStringOption)(attributes.name, ["", "barcode", "coreinit", "deviceDriver", "font", "general", "layout", "merge", "script", "signature", "sourceSet", "templateCache"]);
  }
}
class Attributes extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "attributes", ["preserve", "delegate", "ignore"]);
  }
}
class AutoSave extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "autoSave", ["disabled", "enabled"]);
  }
}
class Base extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "base");
  }
}
class BatchOutput extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "batchOutput");
    this.format = (0, _utils.getStringOption)(attributes.format, ["none", "concat", "zip", "zipCompress"]);
  }
}
class BehaviorOverride extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "behaviorOverride");
  }
  [_symbol_utils.$finalize]() {
    this[_symbol_utils.$content] = new Map(this[_symbol_utils.$content].trim().split(/\s+/).filter(x => x.includes(":")).map(x => x.split(":", 2)));
  }
}
class Cache extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "cache", true);
    this.templateCache = null;
  }
}
class Change extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "change");
  }
}
class Common extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "common", true);
    this.data = null;
    this.locale = null;
    this.localeSet = null;
    this.messaging = null;
    this.suppressBanner = null;
    this.template = null;
    this.validationMessaging = null;
    this.versionControl = null;
    this.log = new _xfa_object.XFAObjectArray();
  }
}
class Compress extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "compress");
    this.scope = (0, _utils.getStringOption)(attributes.scope, ["imageOnly", "document"]);
  }
}
class CompressLogicalStructure extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "compressLogicalStructure");
  }
}
class CompressObjectStream extends _xfa_object.Option10 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "compressObjectStream");
  }
}
class Compression extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "compression", true);
    this.compressLogicalStructure = null;
    this.compressObjectStream = null;
    this.level = null;
    this.type = null;
  }
}
class Config extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "config", true);
    this.acrobat = null;
    this.present = null;
    this.trace = null;
    this.agent = new _xfa_object.XFAObjectArray();
  }
}
class Conformance extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "conformance", ["A", "B"]);
  }
}
class ContentCopy extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "contentCopy");
  }
}
class Copies extends _xfa_object.IntegerObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "copies", 1, n => n >= 1);
  }
}
class Creator extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "creator");
  }
}
class CurrentPage extends _xfa_object.IntegerObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "currentPage", 0, n => n >= 0);
  }
}
class Data extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "data", true);
    this.adjustData = null;
    this.attributes = null;
    this.incrementalLoad = null;
    this.outputXSL = null;
    this.range = null;
    this.record = null;
    this.startNode = null;
    this.uri = null;
    this.window = null;
    this.xsl = null;
    this.excludeNS = new _xfa_object.XFAObjectArray();
    this.transform = new _xfa_object.XFAObjectArray();
  }
}
class Debug extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "debug", true);
    this.uri = null;
  }
}
class DefaultTypeface extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "defaultTypeface");
    this.writingScript = (0, _utils.getStringOption)(attributes.writingScript, ["*", "Arabic", "Cyrillic", "EastEuropeanRoman", "Greek", "Hebrew", "Japanese", "Korean", "Roman", "SimplifiedChinese", "Thai", "TraditionalChinese", "Vietnamese"]);
  }
}
class Destination extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "destination", ["pdf", "pcl", "ps", "webClient", "zpl"]);
  }
}
class DocumentAssembly extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "documentAssembly");
  }
}
class Driver extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "driver", true);
    this.name = attributes.name ? attributes.name.trim() : "";
    this.fontInfo = null;
    this.xdc = null;
  }
}
class DuplexOption extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "duplexOption", ["simplex", "duplexFlipLongEdge", "duplexFlipShortEdge"]);
  }
}
class DynamicRender extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "dynamicRender", ["forbidden", "required"]);
  }
}
class Embed extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "embed");
  }
}
class Encrypt extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "encrypt");
  }
}
class Encryption extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "encryption", true);
    this.encrypt = null;
    this.encryptionLevel = null;
    this.permissions = null;
  }
}
class EncryptionLevel extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "encryptionLevel", ["40bit", "128bit"]);
  }
}
class Enforce extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "enforce");
  }
}
class Equate extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "equate");
    this.force = (0, _utils.getInteger)({
      data: attributes.force,
      defaultValue: 1,
      validate: n => n === 0
    });
    this.from = attributes.from || "";
    this.to = attributes.to || "";
  }
}
class EquateRange extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "equateRange");
    this.from = attributes.from || "";
    this.to = attributes.to || "";
    this._unicodeRange = attributes.unicodeRange || "";
  }
  get unicodeRange() {
    const ranges = [];
    const unicodeRegex = /U\+([0-9a-fA-F]+)/;
    const unicodeRange = this._unicodeRange;
    for (let range of unicodeRange.split(",").map(x => x.trim()).filter(x => !!x)) {
      range = range.split("-", 2).map(x => {
        const found = x.match(unicodeRegex);
        if (!found) {
          return 0;
        }
        return parseInt(found[1], 16);
      });
      if (range.length === 1) {
        range.push(range[0]);
      }
      ranges.push(range);
    }
    return (0, _util.shadow)(this, "unicodeRange", ranges);
  }
}
class Exclude extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "exclude");
  }
  [_symbol_utils.$finalize]() {
    this[_symbol_utils.$content] = this[_symbol_utils.$content].trim().split(/\s+/).filter(x => x && ["calculate", "close", "enter", "exit", "initialize", "ready", "validate"].includes(x));
  }
}
class ExcludeNS extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "excludeNS");
  }
}
class FlipLabel extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "flipLabel", ["usePrinterSetting", "on", "off"]);
  }
}
class FontInfo extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "fontInfo", true);
    this.embed = null;
    this.map = null;
    this.subsetBelow = null;
    this.alwaysEmbed = new _xfa_object.XFAObjectArray();
    this.defaultTypeface = new _xfa_object.XFAObjectArray();
    this.neverEmbed = new _xfa_object.XFAObjectArray();
  }
}
class FormFieldFilling extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "formFieldFilling");
  }
}
class GroupParent extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "groupParent");
  }
}
class IfEmpty extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "ifEmpty", ["dataValue", "dataGroup", "ignore", "remove"]);
  }
}
class IncludeXDPContent extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "includeXDPContent");
  }
}
class IncrementalLoad extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "incrementalLoad", ["none", "forwardOnly"]);
  }
}
class IncrementalMerge extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "incrementalMerge");
  }
}
class Interactive extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "interactive");
  }
}
class Jog extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "jog", ["usePrinterSetting", "none", "pageSet"]);
  }
}
class LabelPrinter extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "labelPrinter", true);
    this.name = (0, _utils.getStringOption)(attributes.name, ["zpl", "dpl", "ipl", "tcpl"]);
    this.batchOutput = null;
    this.flipLabel = null;
    this.fontInfo = null;
    this.xdc = null;
  }
}
class Layout extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "layout", ["paginate", "panel"]);
  }
}
class Level extends _xfa_object.IntegerObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "level", 0, n => n > 0);
  }
}
class Linearized extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "linearized");
  }
}
class Locale extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "locale");
  }
}
class LocaleSet extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "localeSet");
  }
}
class Log extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "log", true);
    this.mode = null;
    this.threshold = null;
    this.to = null;
    this.uri = null;
  }
}
class MapElement extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "map", true);
    this.equate = new _xfa_object.XFAObjectArray();
    this.equateRange = new _xfa_object.XFAObjectArray();
  }
}
class MediumInfo extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "mediumInfo", true);
    this.map = null;
  }
}
class Message extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "message", true);
    this.msgId = null;
    this.severity = null;
  }
}
class Messaging extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "messaging", true);
    this.message = new _xfa_object.XFAObjectArray();
  }
}
class Mode extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "mode", ["append", "overwrite"]);
  }
}
class ModifyAnnots extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "modifyAnnots");
  }
}
class MsgId extends _xfa_object.IntegerObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "msgId", 1, n => n >= 1);
  }
}
class NameAttr extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "nameAttr");
  }
}
class NeverEmbed extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "neverEmbed");
  }
}
class NumberOfCopies extends _xfa_object.IntegerObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "numberOfCopies", null, n => n >= 2 && n <= 5);
  }
}
class OpenAction extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "openAction", true);
    this.destination = null;
  }
}
class Output extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "output", true);
    this.to = null;
    this.type = null;
    this.uri = null;
  }
}
class OutputBin extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "outputBin");
  }
}
class OutputXSL extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "outputXSL", true);
    this.uri = null;
  }
}
class Overprint extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "overprint", ["none", "both", "draw", "field"]);
  }
}
class Packets extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "packets");
  }
  [_symbol_utils.$finalize]() {
    if (this[_symbol_utils.$content] === "*") {
      return;
    }
    this[_symbol_utils.$content] = this[_symbol_utils.$content].trim().split(/\s+/).filter(x => ["config", "datasets", "template", "xfdf", "xslt"].includes(x));
  }
}
class PageOffset extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "pageOffset");
    this.x = (0, _utils.getInteger)({
      data: attributes.x,
      defaultValue: "useXDCSetting",
      validate: n => true
    });
    this.y = (0, _utils.getInteger)({
      data: attributes.y,
      defaultValue: "useXDCSetting",
      validate: n => true
    });
  }
}
class PageRange extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "pageRange");
  }
  [_symbol_utils.$finalize]() {
    const numbers = this[_symbol_utils.$content].trim().split(/\s+/).map(x => parseInt(x, 10));
    const ranges = [];
    for (let i = 0, ii = numbers.length; i < ii; i += 2) {
      ranges.push(numbers.slice(i, i + 2));
    }
    this[_symbol_utils.$content] = ranges;
  }
}
class Pagination extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "pagination", ["simplex", "duplexShortEdge", "duplexLongEdge"]);
  }
}
class PaginationOverride extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "paginationOverride", ["none", "forceDuplex", "forceDuplexLongEdge", "forceDuplexShortEdge", "forceSimplex"]);
  }
}
class Part extends _xfa_object.IntegerObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "part", 1, n => false);
  }
}
class Pcl extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "pcl", true);
    this.name = attributes.name || "";
    this.batchOutput = null;
    this.fontInfo = null;
    this.jog = null;
    this.mediumInfo = null;
    this.outputBin = null;
    this.pageOffset = null;
    this.staple = null;
    this.xdc = null;
  }
}
class Pdf extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "pdf", true);
    this.name = attributes.name || "";
    this.adobeExtensionLevel = null;
    this.batchOutput = null;
    this.compression = null;
    this.creator = null;
    this.encryption = null;
    this.fontInfo = null;
    this.interactive = null;
    this.linearized = null;
    this.openAction = null;
    this.pdfa = null;
    this.producer = null;
    this.renderPolicy = null;
    this.scriptModel = null;
    this.silentPrint = null;
    this.submitFormat = null;
    this.tagged = null;
    this.version = null;
    this.viewerPreferences = null;
    this.xdc = null;
  }
}
class Pdfa extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "pdfa", true);
    this.amd = null;
    this.conformance = null;
    this.includeXDPContent = null;
    this.part = null;
  }
}
class Permissions extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "permissions", true);
    this.accessibleContent = null;
    this.change = null;
    this.contentCopy = null;
    this.documentAssembly = null;
    this.formFieldFilling = null;
    this.modifyAnnots = null;
    this.plaintextMetadata = null;
    this.print = null;
    this.printHighQuality = null;
  }
}
class PickTrayByPDFSize extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "pickTrayByPDFSize");
  }
}
class Picture extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "picture");
  }
}
class PlaintextMetadata extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "plaintextMetadata");
  }
}
class Presence extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "presence", ["preserve", "dissolve", "dissolveStructure", "ignore", "remove"]);
  }
}
class Present extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "present", true);
    this.behaviorOverride = null;
    this.cache = null;
    this.common = null;
    this.copies = null;
    this.destination = null;
    this.incrementalMerge = null;
    this.layout = null;
    this.output = null;
    this.overprint = null;
    this.pagination = null;
    this.paginationOverride = null;
    this.script = null;
    this.validate = null;
    this.xdp = null;
    this.driver = new _xfa_object.XFAObjectArray();
    this.labelPrinter = new _xfa_object.XFAObjectArray();
    this.pcl = new _xfa_object.XFAObjectArray();
    this.pdf = new _xfa_object.XFAObjectArray();
    this.ps = new _xfa_object.XFAObjectArray();
    this.submitUrl = new _xfa_object.XFAObjectArray();
    this.webClient = new _xfa_object.XFAObjectArray();
    this.zpl = new _xfa_object.XFAObjectArray();
  }
}
class Print extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "print");
  }
}
class PrintHighQuality extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "printHighQuality");
  }
}
class PrintScaling extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "printScaling", ["appdefault", "noScaling"]);
  }
}
class PrinterName extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "printerName");
  }
}
class Producer extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "producer");
  }
}
class Ps extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "ps", true);
    this.name = attributes.name || "";
    this.batchOutput = null;
    this.fontInfo = null;
    this.jog = null;
    this.mediumInfo = null;
    this.outputBin = null;
    this.staple = null;
    this.xdc = null;
  }
}
class Range extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "range");
  }
  [_symbol_utils.$finalize]() {
    this[_symbol_utils.$content] = this[_symbol_utils.$content].trim().split(/\s*,\s*/, 2).map(range => range.split("-").map(x => parseInt(x.trim(), 10))).filter(range => range.every(x => !isNaN(x))).map(range => {
      if (range.length === 1) {
        range.push(range[0]);
      }
      return range;
    });
  }
}
class Record extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "record");
  }
  [_symbol_utils.$finalize]() {
    this[_symbol_utils.$content] = this[_symbol_utils.$content].trim();
    const n = parseInt(this[_symbol_utils.$content], 10);
    if (!isNaN(n) && n >= 0) {
      this[_symbol_utils.$content] = n;
    }
  }
}
class Relevant extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "relevant");
  }
  [_symbol_utils.$finalize]() {
    this[_symbol_utils.$content] = this[_symbol_utils.$content].trim().split(/\s+/);
  }
}
class Rename extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "rename");
  }
  [_symbol_utils.$finalize]() {
    this[_symbol_utils.$content] = this[_symbol_utils.$content].trim();
    if (this[_symbol_utils.$content].toLowerCase().startsWith("xml") || new RegExp("[\\p{L}_][\\p{L}\\d._\\p{M}-]*", "u").test(this[_symbol_utils.$content])) {
      (0, _util.warn)("XFA - Rename: invalid XFA name");
    }
  }
}
class RenderPolicy extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "renderPolicy", ["server", "client"]);
  }
}
class RunScripts extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "runScripts", ["both", "client", "none", "server"]);
  }
}
class Script extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "script", true);
    this.currentPage = null;
    this.exclude = null;
    this.runScripts = null;
  }
}
class ScriptModel extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "scriptModel", ["XFA", "none"]);
  }
}
class Severity extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "severity", ["ignore", "error", "information", "trace", "warning"]);
  }
}
class SilentPrint extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "silentPrint", true);
    this.addSilentPrint = null;
    this.printerName = null;
  }
}
class Staple extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "staple");
    this.mode = (0, _utils.getStringOption)(attributes.mode, ["usePrinterSetting", "on", "off"]);
  }
}
class StartNode extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "startNode");
  }
}
class StartPage extends _xfa_object.IntegerObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "startPage", 0, n => true);
  }
}
class SubmitFormat extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "submitFormat", ["html", "delegate", "fdf", "xml", "pdf"]);
  }
}
class SubmitUrl extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "submitUrl");
  }
}
class SubsetBelow extends _xfa_object.IntegerObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "subsetBelow", 100, n => n >= 0 && n <= 100);
  }
}
class SuppressBanner extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "suppressBanner");
  }
}
class Tagged extends _xfa_object.Option01 {
  constructor(attributes) {
    super(CONFIG_NS_ID, "tagged");
  }
}
class Template extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "template", true);
    this.base = null;
    this.relevant = null;
    this.startPage = null;
    this.uri = null;
    this.xsl = null;
  }
}
class Threshold extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "threshold", ["trace", "error", "information", "warning"]);
  }
}
class To extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "to", ["null", "memory", "stderr", "stdout", "system", "uri"]);
  }
}
class TemplateCache extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "templateCache");
    this.maxEntries = (0, _utils.getInteger)({
      data: attributes.maxEntries,
      defaultValue: 5,
      validate: n => n >= 0
    });
  }
}
class Trace extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "trace", true);
    this.area = new _xfa_object.XFAObjectArray();
  }
}
class Transform extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "transform", true);
    this.groupParent = null;
    this.ifEmpty = null;
    this.nameAttr = null;
    this.picture = null;
    this.presence = null;
    this.rename = null;
    this.whitespace = null;
  }
}
class Type extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "type", ["none", "ascii85", "asciiHex", "ccittfax", "flate", "lzw", "runLength", "native", "xdp", "mergedXDP"]);
  }
}
class Uri extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "uri");
  }
}
class Validate extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "validate", ["preSubmit", "prePrint", "preExecute", "preSave"]);
  }
}
class ValidateApprovalSignatures extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "validateApprovalSignatures");
  }
  [_symbol_utils.$finalize]() {
    this[_symbol_utils.$content] = this[_symbol_utils.$content].trim().split(/\s+/).filter(x => ["docReady", "postSign"].includes(x));
  }
}
class ValidationMessaging extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "validationMessaging", ["allMessagesIndividually", "allMessagesTogether", "firstMessageOnly", "noMessages"]);
  }
}
class Version extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "version", ["1.7", "1.6", "1.5", "1.4", "1.3", "1.2"]);
  }
}
class VersionControl extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "VersionControl");
    this.outputBelow = (0, _utils.getStringOption)(attributes.outputBelow, ["warn", "error", "update"]);
    this.sourceAbove = (0, _utils.getStringOption)(attributes.sourceAbove, ["warn", "error"]);
    this.sourceBelow = (0, _utils.getStringOption)(attributes.sourceBelow, ["update", "maintain"]);
  }
}
class ViewerPreferences extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "viewerPreferences", true);
    this.ADBE_JSConsole = null;
    this.ADBE_JSDebugger = null;
    this.addViewerPreferences = null;
    this.duplexOption = null;
    this.enforce = null;
    this.numberOfCopies = null;
    this.pageRange = null;
    this.pickTrayByPDFSize = null;
    this.printScaling = null;
  }
}
class WebClient extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "webClient", true);
    this.name = attributes.name ? attributes.name.trim() : "";
    this.fontInfo = null;
    this.xdc = null;
  }
}
class Whitespace extends _xfa_object.OptionObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "whitespace", ["preserve", "ltrim", "normalize", "rtrim", "trim"]);
  }
}
class Window extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "window");
  }
  [_symbol_utils.$finalize]() {
    const pair = this[_symbol_utils.$content].trim().split(/\s*,\s*/, 2).map(x => parseInt(x, 10));
    if (pair.some(x => isNaN(x))) {
      this[_symbol_utils.$content] = [0, 0];
      return;
    }
    if (pair.length === 1) {
      pair.push(pair[0]);
    }
    this[_symbol_utils.$content] = pair;
  }
}
class Xdc extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "xdc", true);
    this.uri = new _xfa_object.XFAObjectArray();
    this.xsl = new _xfa_object.XFAObjectArray();
  }
}
class Xdp extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "xdp", true);
    this.packets = null;
  }
}
class Xsl extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "xsl", true);
    this.debug = null;
    this.uri = null;
  }
}
class Zpl extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONFIG_NS_ID, "zpl", true);
    this.name = attributes.name ? attributes.name.trim() : "";
    this.batchOutput = null;
    this.flipLabel = null;
    this.fontInfo = null;
    this.xdc = null;
  }
}
class ConfigNamespace {
  static [_namespaces.$buildXFAObject](name, attributes) {
    if (ConfigNamespace.hasOwnProperty(name)) {
      return ConfigNamespace[name](attributes);
    }
    return undefined;
  }
  static acrobat(attrs) {
    return new Acrobat(attrs);
  }
  static acrobat7(attrs) {
    return new Acrobat7(attrs);
  }
  static ADBE_JSConsole(attrs) {
    return new ADBE_JSConsole(attrs);
  }
  static ADBE_JSDebugger(attrs) {
    return new ADBE_JSDebugger(attrs);
  }
  static addSilentPrint(attrs) {
    return new AddSilentPrint(attrs);
  }
  static addViewerPreferences(attrs) {
    return new AddViewerPreferences(attrs);
  }
  static adjustData(attrs) {
    return new AdjustData(attrs);
  }
  static adobeExtensionLevel(attrs) {
    return new AdobeExtensionLevel(attrs);
  }
  static agent(attrs) {
    return new Agent(attrs);
  }
  static alwaysEmbed(attrs) {
    return new AlwaysEmbed(attrs);
  }
  static amd(attrs) {
    return new Amd(attrs);
  }
  static area(attrs) {
    return new Area(attrs);
  }
  static attributes(attrs) {
    return new Attributes(attrs);
  }
  static autoSave(attrs) {
    return new AutoSave(attrs);
  }
  static base(attrs) {
    return new Base(attrs);
  }
  static batchOutput(attrs) {
    return new BatchOutput(attrs);
  }
  static behaviorOverride(attrs) {
    return new BehaviorOverride(attrs);
  }
  static cache(attrs) {
    return new Cache(attrs);
  }
  static change(attrs) {
    return new Change(attrs);
  }
  static common(attrs) {
    return new Common(attrs);
  }
  static compress(attrs) {
    return new Compress(attrs);
  }
  static compressLogicalStructure(attrs) {
    return new CompressLogicalStructure(attrs);
  }
  static compressObjectStream(attrs) {
    return new CompressObjectStream(attrs);
  }
  static compression(attrs) {
    return new Compression(attrs);
  }
  static config(attrs) {
    return new Config(attrs);
  }
  static conformance(attrs) {
    return new Conformance(attrs);
  }
  static contentCopy(attrs) {
    return new ContentCopy(attrs);
  }
  static copies(attrs) {
    return new Copies(attrs);
  }
  static creator(attrs) {
    return new Creator(attrs);
  }
  static currentPage(attrs) {
    return new CurrentPage(attrs);
  }
  static data(attrs) {
    return new Data(attrs);
  }
  static debug(attrs) {
    return new Debug(attrs);
  }
  static defaultTypeface(attrs) {
    return new DefaultTypeface(attrs);
  }
  static destination(attrs) {
    return new Destination(attrs);
  }
  static documentAssembly(attrs) {
    return new DocumentAssembly(attrs);
  }
  static driver(attrs) {
    return new Driver(attrs);
  }
  static duplexOption(attrs) {
    return new DuplexOption(attrs);
  }
  static dynamicRender(attrs) {
    return new DynamicRender(attrs);
  }
  static embed(attrs) {
    return new Embed(attrs);
  }
  static encrypt(attrs) {
    return new Encrypt(attrs);
  }
  static encryption(attrs) {
    return new Encryption(attrs);
  }
  static encryptionLevel(attrs) {
    return new EncryptionLevel(attrs);
  }
  static enforce(attrs) {
    return new Enforce(attrs);
  }
  static equate(attrs) {
    return new Equate(attrs);
  }
  static equateRange(attrs) {
    return new EquateRange(attrs);
  }
  static exclude(attrs) {
    return new Exclude(attrs);
  }
  static excludeNS(attrs) {
    return new ExcludeNS(attrs);
  }
  static flipLabel(attrs) {
    return new FlipLabel(attrs);
  }
  static fontInfo(attrs) {
    return new FontInfo(attrs);
  }
  static formFieldFilling(attrs) {
    return new FormFieldFilling(attrs);
  }
  static groupParent(attrs) {
    return new GroupParent(attrs);
  }
  static ifEmpty(attrs) {
    return new IfEmpty(attrs);
  }
  static includeXDPContent(attrs) {
    return new IncludeXDPContent(attrs);
  }
  static incrementalLoad(attrs) {
    return new IncrementalLoad(attrs);
  }
  static incrementalMerge(attrs) {
    return new IncrementalMerge(attrs);
  }
  static interactive(attrs) {
    return new Interactive(attrs);
  }
  static jog(attrs) {
    return new Jog(attrs);
  }
  static labelPrinter(attrs) {
    return new LabelPrinter(attrs);
  }
  static layout(attrs) {
    return new Layout(attrs);
  }
  static level(attrs) {
    return new Level(attrs);
  }
  static linearized(attrs) {
    return new Linearized(attrs);
  }
  static locale(attrs) {
    return new Locale(attrs);
  }
  static localeSet(attrs) {
    return new LocaleSet(attrs);
  }
  static log(attrs) {
    return new Log(attrs);
  }
  static map(attrs) {
    return new MapElement(attrs);
  }
  static mediumInfo(attrs) {
    return new MediumInfo(attrs);
  }
  static message(attrs) {
    return new Message(attrs);
  }
  static messaging(attrs) {
    return new Messaging(attrs);
  }
  static mode(attrs) {
    return new Mode(attrs);
  }
  static modifyAnnots(attrs) {
    return new ModifyAnnots(attrs);
  }
  static msgId(attrs) {
    return new MsgId(attrs);
  }
  static nameAttr(attrs) {
    return new NameAttr(attrs);
  }
  static neverEmbed(attrs) {
    return new NeverEmbed(attrs);
  }
  static numberOfCopies(attrs) {
    return new NumberOfCopies(attrs);
  }
  static openAction(attrs) {
    return new OpenAction(attrs);
  }
  static output(attrs) {
    return new Output(attrs);
  }
  static outputBin(attrs) {
    return new OutputBin(attrs);
  }
  static outputXSL(attrs) {
    return new OutputXSL(attrs);
  }
  static overprint(attrs) {
    return new Overprint(attrs);
  }
  static packets(attrs) {
    return new Packets(attrs);
  }
  static pageOffset(attrs) {
    return new PageOffset(attrs);
  }
  static pageRange(attrs) {
    return new PageRange(attrs);
  }
  static pagination(attrs) {
    return new Pagination(attrs);
  }
  static paginationOverride(attrs) {
    return new PaginationOverride(attrs);
  }
  static part(attrs) {
    return new Part(attrs);
  }
  static pcl(attrs) {
    return new Pcl(attrs);
  }
  static pdf(attrs) {
    return new Pdf(attrs);
  }
  static pdfa(attrs) {
    return new Pdfa(attrs);
  }
  static permissions(attrs) {
    return new Permissions(attrs);
  }
  static pickTrayByPDFSize(attrs) {
    return new PickTrayByPDFSize(attrs);
  }
  static picture(attrs) {
    return new Picture(attrs);
  }
  static plaintextMetadata(attrs) {
    return new PlaintextMetadata(attrs);
  }
  static presence(attrs) {
    return new Presence(attrs);
  }
  static present(attrs) {
    return new Present(attrs);
  }
  static print(attrs) {
    return new Print(attrs);
  }
  static printHighQuality(attrs) {
    return new PrintHighQuality(attrs);
  }
  static printScaling(attrs) {
    return new PrintScaling(attrs);
  }
  static printerName(attrs) {
    return new PrinterName(attrs);
  }
  static producer(attrs) {
    return new Producer(attrs);
  }
  static ps(attrs) {
    return new Ps(attrs);
  }
  static range(attrs) {
    return new Range(attrs);
  }
  static record(attrs) {
    return new Record(attrs);
  }
  static relevant(attrs) {
    return new Relevant(attrs);
  }
  static rename(attrs) {
    return new Rename(attrs);
  }
  static renderPolicy(attrs) {
    return new RenderPolicy(attrs);
  }
  static runScripts(attrs) {
    return new RunScripts(attrs);
  }
  static script(attrs) {
    return new Script(attrs);
  }
  static scriptModel(attrs) {
    return new ScriptModel(attrs);
  }
  static severity(attrs) {
    return new Severity(attrs);
  }
  static silentPrint(attrs) {
    return new SilentPrint(attrs);
  }
  static staple(attrs) {
    return new Staple(attrs);
  }
  static startNode(attrs) {
    return new StartNode(attrs);
  }
  static startPage(attrs) {
    return new StartPage(attrs);
  }
  static submitFormat(attrs) {
    return new SubmitFormat(attrs);
  }
  static submitUrl(attrs) {
    return new SubmitUrl(attrs);
  }
  static subsetBelow(attrs) {
    return new SubsetBelow(attrs);
  }
  static suppressBanner(attrs) {
    return new SuppressBanner(attrs);
  }
  static tagged(attrs) {
    return new Tagged(attrs);
  }
  static template(attrs) {
    return new Template(attrs);
  }
  static templateCache(attrs) {
    return new TemplateCache(attrs);
  }
  static threshold(attrs) {
    return new Threshold(attrs);
  }
  static to(attrs) {
    return new To(attrs);
  }
  static trace(attrs) {
    return new Trace(attrs);
  }
  static transform(attrs) {
    return new Transform(attrs);
  }
  static type(attrs) {
    return new Type(attrs);
  }
  static uri(attrs) {
    return new Uri(attrs);
  }
  static validate(attrs) {
    return new Validate(attrs);
  }
  static validateApprovalSignatures(attrs) {
    return new ValidateApprovalSignatures(attrs);
  }
  static validationMessaging(attrs) {
    return new ValidationMessaging(attrs);
  }
  static version(attrs) {
    return new Version(attrs);
  }
  static versionControl(attrs) {
    return new VersionControl(attrs);
  }
  static viewerPreferences(attrs) {
    return new ViewerPreferences(attrs);
  }
  static webClient(attrs) {
    return new WebClient(attrs);
  }
  static whitespace(attrs) {
    return new Whitespace(attrs);
  }
  static window(attrs) {
    return new Window(attrs);
  }
  static xdc(attrs) {
    return new Xdc(attrs);
  }
  static xdp(attrs) {
    return new Xdp(attrs);
  }
  static xsl(attrs) {
    return new Xsl(attrs);
  }
  static zpl(attrs) {
    return new Zpl(attrs);
  }
}
exports.ConfigNamespace = ConfigNamespace;

/***/ }),
/* 94 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.ConnectionSetNamespace = void 0;
var _namespaces = __w_pdfjs_require__(81);
var _xfa_object = __w_pdfjs_require__(87);
const CONNECTION_SET_NS_ID = _namespaces.NamespaceIds.connectionSet.id;
class ConnectionSet extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONNECTION_SET_NS_ID, "connectionSet", true);
    this.wsdlConnection = new _xfa_object.XFAObjectArray();
    this.xmlConnection = new _xfa_object.XFAObjectArray();
    this.xsdConnection = new _xfa_object.XFAObjectArray();
  }
}
class EffectiveInputPolicy extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONNECTION_SET_NS_ID, "effectiveInputPolicy");
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class EffectiveOutputPolicy extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONNECTION_SET_NS_ID, "effectiveOutputPolicy");
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class Operation extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONNECTION_SET_NS_ID, "operation");
    this.id = attributes.id || "";
    this.input = attributes.input || "";
    this.name = attributes.name || "";
    this.output = attributes.output || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class RootElement extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONNECTION_SET_NS_ID, "rootElement");
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class SoapAction extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONNECTION_SET_NS_ID, "soapAction");
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class SoapAddress extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONNECTION_SET_NS_ID, "soapAddress");
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class Uri extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONNECTION_SET_NS_ID, "uri");
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class WsdlAddress extends _xfa_object.StringObject {
  constructor(attributes) {
    super(CONNECTION_SET_NS_ID, "wsdlAddress");
    this.id = attributes.id || "";
    this.name = attributes.name || "";
    this.use = attributes.use || "";
    this.usehref = attributes.usehref || "";
  }
}
class WsdlConnection extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONNECTION_SET_NS_ID, "wsdlConnection", true);
    this.dataDescription = attributes.dataDescription || "";
    this.name = attributes.name || "";
    this.effectiveInputPolicy = null;
    this.effectiveOutputPolicy = null;
    this.operation = null;
    this.soapAction = null;
    this.soapAddress = null;
    this.wsdlAddress = null;
  }
}
class XmlConnection extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONNECTION_SET_NS_ID, "xmlConnection", true);
    this.dataDescription = attributes.dataDescription || "";
    this.name = attributes.name || "";
    this.uri = null;
  }
}
class XsdConnection extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(CONNECTION_SET_NS_ID, "xsdConnection", true);
    this.dataDescription = attributes.dataDescription || "";
    this.name = attributes.name || "";
    this.rootElement = null;
    this.uri = null;
  }
}
class ConnectionSetNamespace {
  static [_namespaces.$buildXFAObject](name, attributes) {
    if (ConnectionSetNamespace.hasOwnProperty(name)) {
      return ConnectionSetNamespace[name](attributes);
    }
    return undefined;
  }
  static connectionSet(attrs) {
    return new ConnectionSet(attrs);
  }
  static effectiveInputPolicy(attrs) {
    return new EffectiveInputPolicy(attrs);
  }
  static effectiveOutputPolicy(attrs) {
    return new EffectiveOutputPolicy(attrs);
  }
  static operation(attrs) {
    return new Operation(attrs);
  }
  static rootElement(attrs) {
    return new RootElement(attrs);
  }
  static soapAction(attrs) {
    return new SoapAction(attrs);
  }
  static soapAddress(attrs) {
    return new SoapAddress(attrs);
  }
  static uri(attrs) {
    return new Uri(attrs);
  }
  static wsdlAddress(attrs) {
    return new WsdlAddress(attrs);
  }
  static wsdlConnection(attrs) {
    return new WsdlConnection(attrs);
  }
  static xmlConnection(attrs) {
    return new XmlConnection(attrs);
  }
  static xsdConnection(attrs) {
    return new XsdConnection(attrs);
  }
}
exports.ConnectionSetNamespace = ConnectionSetNamespace;

/***/ }),
/* 95 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.DatasetsNamespace = void 0;
var _symbol_utils = __w_pdfjs_require__(78);
var _namespaces = __w_pdfjs_require__(81);
var _xfa_object = __w_pdfjs_require__(87);
const DATASETS_NS_ID = _namespaces.NamespaceIds.datasets.id;
class Data extends _xfa_object.XmlObject {
  constructor(attributes) {
    super(DATASETS_NS_ID, "data", attributes);
  }
  [_symbol_utils.$isNsAgnostic]() {
    return true;
  }
}
class Datasets extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(DATASETS_NS_ID, "datasets", true);
    this.data = null;
    this.Signature = null;
  }
  [_symbol_utils.$onChild](child) {
    const name = child[_symbol_utils.$nodeName];
    if (name === "data" && child[_symbol_utils.$namespaceId] === DATASETS_NS_ID || name === "Signature" && child[_symbol_utils.$namespaceId] === _namespaces.NamespaceIds.signature.id) {
      this[name] = child;
    }
    this[_symbol_utils.$appendChild](child);
  }
}
class DatasetsNamespace {
  static [_namespaces.$buildXFAObject](name, attributes) {
    if (DatasetsNamespace.hasOwnProperty(name)) {
      return DatasetsNamespace[name](attributes);
    }
    return undefined;
  }
  static datasets(attributes) {
    return new Datasets(attributes);
  }
  static data(attributes) {
    return new Data(attributes);
  }
}
exports.DatasetsNamespace = DatasetsNamespace;

/***/ }),
/* 96 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.LocaleSetNamespace = void 0;
var _namespaces = __w_pdfjs_require__(81);
var _xfa_object = __w_pdfjs_require__(87);
var _utils = __w_pdfjs_require__(84);
const LOCALE_SET_NS_ID = _namespaces.NamespaceIds.localeSet.id;
class CalendarSymbols extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "calendarSymbols", true);
    this.name = "gregorian";
    this.dayNames = new _xfa_object.XFAObjectArray(2);
    this.eraNames = null;
    this.meridiemNames = null;
    this.monthNames = new _xfa_object.XFAObjectArray(2);
  }
}
class CurrencySymbol extends _xfa_object.StringObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "currencySymbol");
    this.name = (0, _utils.getStringOption)(attributes.name, ["symbol", "isoname", "decimal"]);
  }
}
class CurrencySymbols extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "currencySymbols", true);
    this.currencySymbol = new _xfa_object.XFAObjectArray(3);
  }
}
class DatePattern extends _xfa_object.StringObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "datePattern");
    this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]);
  }
}
class DatePatterns extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "datePatterns", true);
    this.datePattern = new _xfa_object.XFAObjectArray(4);
  }
}
class DateTimeSymbols extends _xfa_object.ContentObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "dateTimeSymbols");
  }
}
class Day extends _xfa_object.StringObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "day");
  }
}
class DayNames extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "dayNames", true);
    this.abbr = (0, _utils.getInteger)({
      data: attributes.abbr,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.day = new _xfa_object.XFAObjectArray(7);
  }
}
class Era extends _xfa_object.StringObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "era");
  }
}
class EraNames extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "eraNames", true);
    this.era = new _xfa_object.XFAObjectArray(2);
  }
}
class Locale extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "locale", true);
    this.desc = attributes.desc || "";
    this.name = "isoname";
    this.calendarSymbols = null;
    this.currencySymbols = null;
    this.datePatterns = null;
    this.dateTimeSymbols = null;
    this.numberPatterns = null;
    this.numberSymbols = null;
    this.timePatterns = null;
    this.typeFaces = null;
  }
}
class LocaleSet extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "localeSet", true);
    this.locale = new _xfa_object.XFAObjectArray();
  }
}
class Meridiem extends _xfa_object.StringObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "meridiem");
  }
}
class MeridiemNames extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "meridiemNames", true);
    this.meridiem = new _xfa_object.XFAObjectArray(2);
  }
}
class Month extends _xfa_object.StringObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "month");
  }
}
class MonthNames extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "monthNames", true);
    this.abbr = (0, _utils.getInteger)({
      data: attributes.abbr,
      defaultValue: 0,
      validate: x => x === 1
    });
    this.month = new _xfa_object.XFAObjectArray(12);
  }
}
class NumberPattern extends _xfa_object.StringObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "numberPattern");
    this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]);
  }
}
class NumberPatterns extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "numberPatterns", true);
    this.numberPattern = new _xfa_object.XFAObjectArray(4);
  }
}
class NumberSymbol extends _xfa_object.StringObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "numberSymbol");
    this.name = (0, _utils.getStringOption)(attributes.name, ["decimal", "grouping", "percent", "minus", "zero"]);
  }
}
class NumberSymbols extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "numberSymbols", true);
    this.numberSymbol = new _xfa_object.XFAObjectArray(5);
  }
}
class TimePattern extends _xfa_object.StringObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "timePattern");
    this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]);
  }
}
class TimePatterns extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "timePatterns", true);
    this.timePattern = new _xfa_object.XFAObjectArray(4);
  }
}
class TypeFace extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "typeFace", true);
    this.name = attributes.name | "";
  }
}
class TypeFaces extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(LOCALE_SET_NS_ID, "typeFaces", true);
    this.typeFace = new _xfa_object.XFAObjectArray();
  }
}
class LocaleSetNamespace {
  static [_namespaces.$buildXFAObject](name, attributes) {
    if (LocaleSetNamespace.hasOwnProperty(name)) {
      return LocaleSetNamespace[name](attributes);
    }
    return undefined;
  }
  static calendarSymbols(attrs) {
    return new CalendarSymbols(attrs);
  }
  static currencySymbol(attrs) {
    return new CurrencySymbol(attrs);
  }
  static currencySymbols(attrs) {
    return new CurrencySymbols(attrs);
  }
  static datePattern(attrs) {
    return new DatePattern(attrs);
  }
  static datePatterns(attrs) {
    return new DatePatterns(attrs);
  }
  static dateTimeSymbols(attrs) {
    return new DateTimeSymbols(attrs);
  }
  static day(attrs) {
    return new Day(attrs);
  }
  static dayNames(attrs) {
    return new DayNames(attrs);
  }
  static era(attrs) {
    return new Era(attrs);
  }
  static eraNames(attrs) {
    return new EraNames(attrs);
  }
  static locale(attrs) {
    return new Locale(attrs);
  }
  static localeSet(attrs) {
    return new LocaleSet(attrs);
  }
  static meridiem(attrs) {
    return new Meridiem(attrs);
  }
  static meridiemNames(attrs) {
    return new MeridiemNames(attrs);
  }
  static month(attrs) {
    return new Month(attrs);
  }
  static monthNames(attrs) {
    return new MonthNames(attrs);
  }
  static numberPattern(attrs) {
    return new NumberPattern(attrs);
  }
  static numberPatterns(attrs) {
    return new NumberPatterns(attrs);
  }
  static numberSymbol(attrs) {
    return new NumberSymbol(attrs);
  }
  static numberSymbols(attrs) {
    return new NumberSymbols(attrs);
  }
  static timePattern(attrs) {
    return new TimePattern(attrs);
  }
  static timePatterns(attrs) {
    return new TimePatterns(attrs);
  }
  static typeFace(attrs) {
    return new TypeFace(attrs);
  }
  static typeFaces(attrs) {
    return new TypeFaces(attrs);
  }
}
exports.LocaleSetNamespace = LocaleSetNamespace;

/***/ }),
/* 97 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.SignatureNamespace = void 0;
var _namespaces = __w_pdfjs_require__(81);
var _xfa_object = __w_pdfjs_require__(87);
const SIGNATURE_NS_ID = _namespaces.NamespaceIds.signature.id;
class Signature extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(SIGNATURE_NS_ID, "signature", true);
  }
}
class SignatureNamespace {
  static [_namespaces.$buildXFAObject](name, attributes) {
    if (SignatureNamespace.hasOwnProperty(name)) {
      return SignatureNamespace[name](attributes);
    }
    return undefined;
  }
  static signature(attributes) {
    return new Signature(attributes);
  }
}
exports.SignatureNamespace = SignatureNamespace;

/***/ }),
/* 98 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.StylesheetNamespace = void 0;
var _namespaces = __w_pdfjs_require__(81);
var _xfa_object = __w_pdfjs_require__(87);
const STYLESHEET_NS_ID = _namespaces.NamespaceIds.stylesheet.id;
class Stylesheet extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(STYLESHEET_NS_ID, "stylesheet", true);
  }
}
class StylesheetNamespace {
  static [_namespaces.$buildXFAObject](name, attributes) {
    if (StylesheetNamespace.hasOwnProperty(name)) {
      return StylesheetNamespace[name](attributes);
    }
    return undefined;
  }
  static stylesheet(attributes) {
    return new Stylesheet(attributes);
  }
}
exports.StylesheetNamespace = StylesheetNamespace;

/***/ }),
/* 99 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.XdpNamespace = void 0;
var _namespaces = __w_pdfjs_require__(81);
var _symbol_utils = __w_pdfjs_require__(78);
var _xfa_object = __w_pdfjs_require__(87);
const XDP_NS_ID = _namespaces.NamespaceIds.xdp.id;
class Xdp extends _xfa_object.XFAObject {
  constructor(attributes) {
    super(XDP_NS_ID, "xdp", true);
    this.uuid = attributes.uuid || "";
    this.timeStamp = attributes.timeStamp || "";
    this.config = null;
    this.connectionSet = null;
    this.datasets = null;
    this.localeSet = null;
    this.stylesheet = new _xfa_object.XFAObjectArray();
    this.template = null;
  }
  [_symbol_utils.$onChildCheck](child) {
    const ns = _namespaces.NamespaceIds[child[_symbol_utils.$nodeName]];
    return ns && child[_symbol_utils.$namespaceId] === ns.id;
  }
}
class XdpNamespace {
  static [_namespaces.$buildXFAObject](name, attributes) {
    if (XdpNamespace.hasOwnProperty(name)) {
      return XdpNamespace[name](attributes);
    }
    return undefined;
  }
  static xdp(attributes) {
    return new Xdp(attributes);
  }
}
exports.XdpNamespace = XdpNamespace;

/***/ }),
/* 100 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.XhtmlNamespace = void 0;
var _symbol_utils = __w_pdfjs_require__(78);
var _namespaces = __w_pdfjs_require__(81);
var _html_utils = __w_pdfjs_require__(83);
var _utils = __w_pdfjs_require__(84);
var _xfa_object = __w_pdfjs_require__(87);
const XHTML_NS_ID = _namespaces.NamespaceIds.xhtml.id;
const $richText = Symbol();
const VALID_STYLES = new Set(["color", "font", "font-family", "font-size", "font-stretch", "font-style", "font-weight", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "letter-spacing", "line-height", "orphans", "page-break-after", "page-break-before", "page-break-inside", "tab-interval", "tab-stop", "text-align", "text-decoration", "text-indent", "vertical-align", "widows", "kerning-mode", "xfa-font-horizontal-scale", "xfa-font-vertical-scale", "xfa-spacerun", "xfa-tab-stops"]);
const StyleMapping = new Map([["page-break-after", "breakAfter"], ["page-break-before", "breakBefore"], ["page-break-inside", "breakInside"], ["kerning-mode", value => value === "none" ? "none" : "normal"], ["xfa-font-horizontal-scale", value => `scaleX(${Math.max(0, Math.min(parseInt(value) / 100)).toFixed(2)})`], ["xfa-font-vertical-scale", value => `scaleY(${Math.max(0, Math.min(parseInt(value) / 100)).toFixed(2)})`], ["xfa-spacerun", ""], ["xfa-tab-stops", ""], ["font-size", (value, original) => {
  value = original.fontSize = (0, _utils.getMeasurement)(value);
  return (0, _html_utils.measureToString)(0.99 * value);
}], ["letter-spacing", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["line-height", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-bottom", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-left", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-right", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-top", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["text-indent", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["font-family", value => value], ["vertical-align", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))]]);
const spacesRegExp = /\s+/g;
const crlfRegExp = /[\r\n]+/g;
const crlfForRichTextRegExp = /\r\n?/g;
function mapStyle(styleStr, node, richText) {
  const style = Object.create(null);
  if (!styleStr) {
    return style;
  }
  const original = Object.create(null);
  for (const [key, value] of styleStr.split(";").map(s => s.split(":", 2))) {
    const mapping = StyleMapping.get(key);
    if (mapping === "") {
      continue;
    }
    let newValue = value;
    if (mapping) {
      newValue = typeof mapping === "string" ? mapping : mapping(value, original);
    }
    if (key.endsWith("scale")) {
      style.transform = style.transform ? `${style[key]} ${newValue}` : newValue;
    } else {
      style[key.replaceAll(/-([a-zA-Z])/g, (_, x) => x.toUpperCase())] = newValue;
    }
  }
  if (style.fontFamily) {
    (0, _html_utils.setFontFamily)({
      typeface: style.fontFamily,
      weight: style.fontWeight || "normal",
      posture: style.fontStyle || "normal",
      size: original.fontSize || 0
    }, node, node[_symbol_utils.$globalData].fontFinder, style);
  }
  if (richText && style.verticalAlign && style.verticalAlign !== "0px" && style.fontSize) {
    const SUB_SUPER_SCRIPT_FACTOR = 0.583;
    const VERTICAL_FACTOR = 0.333;
    const fontSize = (0, _utils.getMeasurement)(style.fontSize);
    style.fontSize = (0, _html_utils.measureToString)(fontSize * SUB_SUPER_SCRIPT_FACTOR);
    style.verticalAlign = (0, _html_utils.measureToString)(Math.sign((0, _utils.getMeasurement)(style.verticalAlign)) * fontSize * VERTICAL_FACTOR);
  }
  if (richText && style.fontSize) {
    style.fontSize = `calc(${style.fontSize} * var(--scale-factor))`;
  }
  (0, _html_utils.fixTextIndent)(style);
  return style;
}
function checkStyle(node) {
  if (!node.style) {
    return "";
  }
  return node.style.trim().split(/\s*;\s*/).filter(s => !!s).map(s => s.split(/\s*:\s*/, 2)).filter(([key, value]) => {
    if (key === "font-family") {
      node[_symbol_utils.$globalData].usedTypefaces.add(value);
    }
    return VALID_STYLES.has(key);
  }).map(kv => kv.join(":")).join(";");
}
const NoWhites = new Set(["body", "html"]);
class XhtmlObject extends _xfa_object.XmlObject {
  constructor(attributes, name) {
    super(XHTML_NS_ID, name);
    this[$richText] = false;
    this.style = attributes.style || "";
  }
  [_symbol_utils.$clean](builder) {
    super[_symbol_utils.$clean](builder);
    this.style = checkStyle(this);
  }
  [_symbol_utils.$acceptWhitespace]() {
    return !NoWhites.has(this[_symbol_utils.$nodeName]);
  }
  [_symbol_utils.$onText](str, richText = false) {
    if (!richText) {
      str = str.replaceAll(crlfRegExp, "");
      if (!this.style.includes("xfa-spacerun:yes")) {
        str = str.replaceAll(spacesRegExp, " ");
      }
    } else {
      this[$richText] = true;
    }
    if (str) {
      this[_symbol_utils.$content] += str;
    }
  }
  [_symbol_utils.$pushGlyphs](measure, mustPop = true) {
    const xfaFont = Object.create(null);
    const margin = {
      top: NaN,
      bottom: NaN,
      left: NaN,
      right: NaN
    };
    let lineHeight = null;
    for (const [key, value] of this.style.split(";").map(s => s.split(":", 2))) {
      switch (key) {
        case "font-family":
          xfaFont.typeface = (0, _utils.stripQuotes)(value);
          break;
        case "font-size":
          xfaFont.size = (0, _utils.getMeasurement)(value);
          break;
        case "font-weight":
          xfaFont.weight = value;
          break;
        case "font-style":
          xfaFont.posture = value;
          break;
        case "letter-spacing":
          xfaFont.letterSpacing = (0, _utils.getMeasurement)(value);
          break;
        case "margin":
          const values = value.split(/ \t/).map(x => (0, _utils.getMeasurement)(x));
          switch (values.length) {
            case 1:
              margin.top = margin.bottom = margin.left = margin.right = values[0];
              break;
            case 2:
              margin.top = margin.bottom = values[0];
              margin.left = margin.right = values[1];
              break;
            case 3:
              margin.top = values[0];
              margin.bottom = values[2];
              margin.left = margin.right = values[1];
              break;
            case 4:
              margin.top = values[0];
              margin.left = values[1];
              margin.bottom = values[2];
              margin.right = values[3];
              break;
          }
          break;
        case "margin-top":
          margin.top = (0, _utils.getMeasurement)(value);
          break;
        case "margin-bottom":
          margin.bottom = (0, _utils.getMeasurement)(value);
          break;
        case "margin-left":
          margin.left = (0, _utils.getMeasurement)(value);
          break;
        case "margin-right":
          margin.right = (0, _utils.getMeasurement)(value);
          break;
        case "line-height":
          lineHeight = (0, _utils.getMeasurement)(value);
          break;
      }
    }
    measure.pushData(xfaFont, margin, lineHeight);
    if (this[_symbol_utils.$content]) {
      measure.addString(this[_symbol_utils.$content]);
    } else {
      for (const child of this[_symbol_utils.$getChildren]()) {
        if (child[_symbol_utils.$nodeName] === "#text") {
          measure.addString(child[_symbol_utils.$content]);
          continue;
        }
        child[_symbol_utils.$pushGlyphs](measure);
      }
    }
    if (mustPop) {
      measure.popFont();
    }
  }
  [_symbol_utils.$toHTML](availableSpace) {
    const children = [];
    this[_symbol_utils.$extra] = {
      children
    };
    this[_symbol_utils.$childrenToHTML]({});
    if (children.length === 0 && !this[_symbol_utils.$content]) {
      return _utils.HTMLResult.EMPTY;
    }
    let value;
    if (this[$richText]) {
      value = this[_symbol_utils.$content] ? this[_symbol_utils.$content].replaceAll(crlfForRichTextRegExp, "\n") : undefined;
    } else {
      value = this[_symbol_utils.$content] || undefined;
    }
    return _utils.HTMLResult.success({
      name: this[_symbol_utils.$nodeName],
      attributes: {
        href: this.href,
        style: mapStyle(this.style, this, this[$richText])
      },
      children,
      value
    });
  }
}
class A extends XhtmlObject {
  constructor(attributes) {
    super(attributes, "a");
    this.href = (0, _html_utils.fixURL)(attributes.href) || "";
  }
}
class B extends XhtmlObject {
  constructor(attributes) {
    super(attributes, "b");
  }
  [_symbol_utils.$pushGlyphs](measure) {
    measure.pushFont({
      weight: "bold"
    });
    super[_symbol_utils.$pushGlyphs](measure);
    measure.popFont();
  }
}
class Body extends XhtmlObject {
  constructor(attributes) {
    super(attributes, "body");
  }
  [_symbol_utils.$toHTML](availableSpace) {
    const res = super[_symbol_utils.$toHTML](availableSpace);
    const {
      html
    } = res;
    if (!html) {
      return _utils.HTMLResult.EMPTY;
    }
    html.name = "div";
    html.attributes.class = ["xfaRich"];
    return res;
  }
}
class Br extends XhtmlObject {
  constructor(attributes) {
    super(attributes, "br");
  }
  [_symbol_utils.$text]() {
    return "\n";
  }
  [_symbol_utils.$pushGlyphs](measure) {
    measure.addString("\n");
  }
  [_symbol_utils.$toHTML](availableSpace) {
    return _utils.HTMLResult.success({
      name: "br"
    });
  }
}
class Html extends XhtmlObject {
  constructor(attributes) {
    super(attributes, "html");
  }
  [_symbol_utils.$toHTML](availableSpace) {
    const children = [];
    this[_symbol_utils.$extra] = {
      children
    };
    this[_symbol_utils.$childrenToHTML]({});
    if (children.length === 0) {
      return _utils.HTMLResult.success({
        name: "div",
        attributes: {
          class: ["xfaRich"],
          style: {}
        },
        value: this[_symbol_utils.$content] || ""
      });
    }
    if (children.length === 1) {
      const child = children[0];
      if (child.attributes?.class.includes("xfaRich")) {
        return _utils.HTMLResult.success(child);
      }
    }
    return _utils.HTMLResult.success({
      name: "div",
      attributes: {
        class: ["xfaRich"],
        style: {}
      },
      children
    });
  }
}
class I extends XhtmlObject {
  constructor(attributes) {
    super(attributes, "i");
  }
  [_symbol_utils.$pushGlyphs](measure) {
    measure.pushFont({
      posture: "italic"
    });
    super[_symbol_utils.$pushGlyphs](measure);
    measure.popFont();
  }
}
class Li extends XhtmlObject {
  constructor(attributes) {
    super(attributes, "li");
  }
}
class Ol extends XhtmlObject {
  constructor(attributes) {
    super(attributes, "ol");
  }
}
class P extends XhtmlObject {
  constructor(attributes) {
    super(attributes, "p");
  }
  [_symbol_utils.$pushGlyphs](measure) {
    super[_symbol_utils.$pushGlyphs](measure, false);
    measure.addString("\n");
    measure.addPara();
    measure.popFont();
  }
  [_symbol_utils.$text]() {
    const siblings = this[_symbol_utils.$getParent]()[_symbol_utils.$getChildren]();
    if (siblings.at(-1) === this) {
      return super[_symbol_utils.$text]();
    }
    return super[_symbol_utils.$text]() + "\n";
  }
}
class Span extends XhtmlObject {
  constructor(attributes) {
    super(attributes, "span");
  }
}
class Sub extends XhtmlObject {
  constructor(attributes) {
    super(attributes, "sub");
  }
}
class Sup extends XhtmlObject {
  constructor(attributes) {
    super(attributes, "sup");
  }
}
class Ul extends XhtmlObject {
  constructor(attributes) {
    super(attributes, "ul");
  }
}
class XhtmlNamespace {
  static [_namespaces.$buildXFAObject](name, attributes) {
    if (XhtmlNamespace.hasOwnProperty(name)) {
      return XhtmlNamespace[name](attributes);
    }
    return undefined;
  }
  static a(attributes) {
    return new A(attributes);
  }
  static b(attributes) {
    return new B(attributes);
  }
  static body(attributes) {
    return new Body(attributes);
  }
  static br(attributes) {
    return new Br(attributes);
  }
  static html(attributes) {
    return new Html(attributes);
  }
  static i(attributes) {
    return new I(attributes);
  }
  static li(attributes) {
    return new Li(attributes);
  }
  static ol(attributes) {
    return new Ol(attributes);
  }
  static p(attributes) {
    return new P(attributes);
  }
  static span(attributes) {
    return new Span(attributes);
  }
  static sub(attributes) {
    return new Sub(attributes);
  }
  static sup(attributes) {
    return new Sup(attributes);
  }
  static ul(attributes) {
    return new Ul(attributes);
  }
}
exports.XhtmlNamespace = XhtmlNamespace;

/***/ }),
/* 101 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.UnknownNamespace = void 0;
var _namespaces = __w_pdfjs_require__(81);
var _xfa_object = __w_pdfjs_require__(87);
class UnknownNamespace {
  constructor(nsId) {
    this.namespaceId = nsId;
  }
  [_namespaces.$buildXFAObject](name, attributes) {
    return new _xfa_object.XmlObject(this.namespaceId, name, attributes);
  }
}
exports.UnknownNamespace = UnknownNamespace;

/***/ }),
/* 102 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.DatasetReader = void 0;
var _util = __w_pdfjs_require__(2);
var _core_utils = __w_pdfjs_require__(3);
var _xml_parser = __w_pdfjs_require__(71);
function decodeString(str) {
  try {
    return (0, _util.stringToUTF8String)(str);
  } catch (ex) {
    (0, _util.warn)(`UTF-8 decoding failed: "${ex}".`);
    return str;
  }
}
class DatasetXMLParser extends _xml_parser.SimpleXMLParser {
  constructor(options) {
    super(options);
    this.node = null;
  }
  onEndElement(name) {
    const node = super.onEndElement(name);
    if (node && name === "xfa:datasets") {
      this.node = node;
      throw new Error("Aborting DatasetXMLParser.");
    }
  }
}
class DatasetReader {
  constructor(data) {
    if (data.datasets) {
      this.node = new _xml_parser.SimpleXMLParser({
        hasAttributes: true
      }).parseFromString(data.datasets).documentElement;
    } else {
      const parser = new DatasetXMLParser({
        hasAttributes: true
      });
      try {
        parser.parseFromString(data["xdp:xdp"]);
      } catch {}
      this.node = parser.node;
    }
  }
  getValue(path) {
    if (!this.node || !path) {
      return "";
    }
    const node = this.node.searchNode((0, _core_utils.parseXFAPath)(path), 0);
    if (!node) {
      return "";
    }
    const first = node.firstChild;
    if (first?.nodeName === "value") {
      return node.children.map(child => decodeString(child.textContent));
    }
    return decodeString(node.textContent);
  }
}
exports.DatasetReader = DatasetReader;

/***/ }),
/* 103 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.XRef = void 0;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(4);
var _parser = __w_pdfjs_require__(16);
var _core_utils = __w_pdfjs_require__(3);
var _base_stream = __w_pdfjs_require__(5);
var _crypto = __w_pdfjs_require__(74);
class XRef {
  #firstXRefStmPos = null;
  constructor(stream, pdfManager) {
    this.stream = stream;
    this.pdfManager = pdfManager;
    this.entries = [];
    this._xrefStms = new Set();
    this._cacheMap = new Map();
    this._pendingRefs = new _primitives.RefSet();
    this._newPersistentRefNum = null;
    this._newTemporaryRefNum = null;
  }
  getNewPersistentRef(obj) {
    if (this._newPersistentRefNum === null) {
      this._newPersistentRefNum = this.entries.length || 1;
    }
    const num = this._newPersistentRefNum++;
    this._cacheMap.set(num, obj);
    return _primitives.Ref.get(num, 0);
  }
  getNewTemporaryRef() {
    if (this._newTemporaryRefNum === null) {
      this._newTemporaryRefNum = this.entries.length || 1;
    }
    return _primitives.Ref.get(this._newTemporaryRefNum++, 0);
  }
  resetNewTemporaryRef() {
    this._newTemporaryRefNum = null;
  }
  setStartXRef(startXRef) {
    this.startXRefQueue = [startXRef];
  }
  parse(recoveryMode = false) {
    let trailerDict;
    if (!recoveryMode) {
      trailerDict = this.readXRef();
    } else {
      (0, _util.warn)("Indexing all PDF objects");
      trailerDict = this.indexObjects();
    }
    trailerDict.assignXref(this);
    this.trailer = trailerDict;
    let encrypt;
    try {
      encrypt = trailerDict.get("Encrypt");
    } catch (ex) {
      if (ex instanceof _core_utils.MissingDataException) {
        throw ex;
      }
      (0, _util.warn)(`XRef.parse - Invalid "Encrypt" reference: "${ex}".`);
    }
    if (encrypt instanceof _primitives.Dict) {
      const ids = trailerDict.get("ID");
      const fileId = ids?.length ? ids[0] : "";
      encrypt.suppressEncryption = true;
      this.encrypt = new _crypto.CipherTransformFactory(encrypt, fileId, this.pdfManager.password);
    }
    let root;
    try {
      root = trailerDict.get("Root");
    } catch (ex) {
      if (ex instanceof _core_utils.MissingDataException) {
        throw ex;
      }
      (0, _util.warn)(`XRef.parse - Invalid "Root" reference: "${ex}".`);
    }
    if (root instanceof _primitives.Dict) {
      try {
        const pages = root.get("Pages");
        if (pages instanceof _primitives.Dict) {
          this.root = root;
          return;
        }
      } catch (ex) {
        if (ex instanceof _core_utils.MissingDataException) {
          throw ex;
        }
        (0, _util.warn)(`XRef.parse - Invalid "Pages" reference: "${ex}".`);
      }
    }
    if (!recoveryMode) {
      throw new _core_utils.XRefParseException();
    }
    throw new _util.InvalidPDFException("Invalid Root reference.");
  }
  processXRefTable(parser) {
    if (!("tableState" in this)) {
      this.tableState = {
        entryNum: 0,
        streamPos: parser.lexer.stream.pos,
        parserBuf1: parser.buf1,
        parserBuf2: parser.buf2
      };
    }
    const obj = this.readXRefTable(parser);
    if (!(0, _primitives.isCmd)(obj, "trailer")) {
      throw new _util.FormatError("Invalid XRef table: could not find trailer dictionary");
    }
    let dict = parser.getObj();
    if (!(dict instanceof _primitives.Dict) && dict.dict) {
      dict = dict.dict;
    }
    if (!(dict instanceof _primitives.Dict)) {
      throw new _util.FormatError("Invalid XRef table: could not parse trailer dictionary");
    }
    delete this.tableState;
    return dict;
  }
  readXRefTable(parser) {
    const stream = parser.lexer.stream;
    const tableState = this.tableState;
    stream.pos = tableState.streamPos;
    parser.buf1 = tableState.parserBuf1;
    parser.buf2 = tableState.parserBuf2;
    let obj;
    while (true) {
      if (!("firstEntryNum" in tableState) || !("entryCount" in tableState)) {
        if ((0, _primitives.isCmd)(obj = parser.getObj(), "trailer")) {
          break;
        }
        tableState.firstEntryNum = obj;
        tableState.entryCount = parser.getObj();
      }
      let first = tableState.firstEntryNum;
      const count = tableState.entryCount;
      if (!Number.isInteger(first) || !Number.isInteger(count)) {
        throw new _util.FormatError("Invalid XRef table: wrong types in subsection header");
      }
      for (let i = tableState.entryNum; i < count; i++) {
        tableState.streamPos = stream.pos;
        tableState.entryNum = i;
        tableState.parserBuf1 = parser.buf1;
        tableState.parserBuf2 = parser.buf2;
        const entry = {};
        entry.offset = parser.getObj();
        entry.gen = parser.getObj();
        const type = parser.getObj();
        if (type instanceof _primitives.Cmd) {
          switch (type.cmd) {
            case "f":
              entry.free = true;
              break;
            case "n":
              entry.uncompressed = true;
              break;
          }
        }
        if (!Number.isInteger(entry.offset) || !Number.isInteger(entry.gen) || !(entry.free || entry.uncompressed)) {
          throw new _util.FormatError(`Invalid entry in XRef subsection: ${first}, ${count}`);
        }
        if (i === 0 && entry.free && first === 1) {
          first = 0;
        }
        if (!this.entries[i + first]) {
          this.entries[i + first] = entry;
        }
      }
      tableState.entryNum = 0;
      tableState.streamPos = stream.pos;
      tableState.parserBuf1 = parser.buf1;
      tableState.parserBuf2 = parser.buf2;
      delete tableState.firstEntryNum;
      delete tableState.entryCount;
    }
    if (this.entries[0] && !this.entries[0].free) {
      throw new _util.FormatError("Invalid XRef table: unexpected first object");
    }
    return obj;
  }
  processXRefStream(stream) {
    if (!("streamState" in this)) {
      const streamParameters = stream.dict;
      const byteWidths = streamParameters.get("W");
      let range = streamParameters.get("Index");
      if (!range) {
        range = [0, streamParameters.get("Size")];
      }
      this.streamState = {
        entryRanges: range,
        byteWidths,
        entryNum: 0,
        streamPos: stream.pos
      };
    }
    this.readXRefStream(stream);
    delete this.streamState;
    return stream.dict;
  }
  readXRefStream(stream) {
    const streamState = this.streamState;
    stream.pos = streamState.streamPos;
    const [typeFieldWidth, offsetFieldWidth, generationFieldWidth] = streamState.byteWidths;
    const entryRanges = streamState.entryRanges;
    while (entryRanges.length > 0) {
      const [first, n] = entryRanges;
      if (!Number.isInteger(first) || !Number.isInteger(n)) {
        throw new _util.FormatError(`Invalid XRef range fields: ${first}, ${n}`);
      }
      if (!Number.isInteger(typeFieldWidth) || !Number.isInteger(offsetFieldWidth) || !Number.isInteger(generationFieldWidth)) {
        throw new _util.FormatError(`Invalid XRef entry fields length: ${first}, ${n}`);
      }
      for (let i = streamState.entryNum; i < n; ++i) {
        streamState.entryNum = i;
        streamState.streamPos = stream.pos;
        let type = 0,
          offset = 0,
          generation = 0;
        for (let j = 0; j < typeFieldWidth; ++j) {
          const typeByte = stream.getByte();
          if (typeByte === -1) {
            throw new _util.FormatError("Invalid XRef byteWidths 'type'.");
          }
          type = type << 8 | typeByte;
        }
        if (typeFieldWidth === 0) {
          type = 1;
        }
        for (let j = 0; j < offsetFieldWidth; ++j) {
          const offsetByte = stream.getByte();
          if (offsetByte === -1) {
            throw new _util.FormatError("Invalid XRef byteWidths 'offset'.");
          }
          offset = offset << 8 | offsetByte;
        }
        for (let j = 0; j < generationFieldWidth; ++j) {
          const generationByte = stream.getByte();
          if (generationByte === -1) {
            throw new _util.FormatError("Invalid XRef byteWidths 'generation'.");
          }
          generation = generation << 8 | generationByte;
        }
        const entry = {};
        entry.offset = offset;
        entry.gen = generation;
        switch (type) {
          case 0:
            entry.free = true;
            break;
          case 1:
            entry.uncompressed = true;
            break;
          case 2:
            break;
          default:
            throw new _util.FormatError(`Invalid XRef entry type: ${type}`);
        }
        if (!this.entries[first + i]) {
          this.entries[first + i] = entry;
        }
      }
      streamState.entryNum = 0;
      streamState.streamPos = stream.pos;
      entryRanges.splice(0, 2);
    }
  }
  indexObjects() {
    const TAB = 0x9,
      LF = 0xa,
      CR = 0xd,
      SPACE = 0x20;
    const PERCENT = 0x25,
      LT = 0x3c;
    function readToken(data, offset) {
      let token = "",
        ch = data[offset];
      while (ch !== LF && ch !== CR && ch !== LT) {
        if (++offset >= data.length) {
          break;
        }
        token += String.fromCharCode(ch);
        ch = data[offset];
      }
      return token;
    }
    function skipUntil(data, offset, what) {
      const length = what.length,
        dataLength = data.length;
      let skipped = 0;
      while (offset < dataLength) {
        let i = 0;
        while (i < length && data[offset + i] === what[i]) {
          ++i;
        }
        if (i >= length) {
          break;
        }
        offset++;
        skipped++;
      }
      return skipped;
    }
    const gEndobjRegExp = /\b(endobj|\d+\s+\d+\s+obj|xref|trailer\s*<<)\b/g;
    const gStartxrefRegExp = /\b(startxref|\d+\s+\d+\s+obj)\b/g;
    const objRegExp = /^(\d+)\s+(\d+)\s+obj\b/;
    const trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]);
    const startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]);
    const xrefBytes = new Uint8Array([47, 88, 82, 101, 102]);
    this.entries.length = 0;
    this._cacheMap.clear();
    const stream = this.stream;
    stream.pos = 0;
    const buffer = stream.getBytes(),
      bufferStr = (0, _util.bytesToString)(buffer),
      length = buffer.length;
    let position = stream.start;
    const trailers = [],
      xrefStms = [];
    while (position < length) {
      let ch = buffer[position];
      if (ch === TAB || ch === LF || ch === CR || ch === SPACE) {
        ++position;
        continue;
      }
      if (ch === PERCENT) {
        do {
          ++position;
          if (position >= length) {
            break;
          }
          ch = buffer[position];
        } while (ch !== LF && ch !== CR);
        continue;
      }
      const token = readToken(buffer, position);
      let m;
      if (token.startsWith("xref") && (token.length === 4 || /\s/.test(token[4]))) {
        position += skipUntil(buffer, position, trailerBytes);
        trailers.push(position);
        position += skipUntil(buffer, position, startxrefBytes);
      } else if (m = objRegExp.exec(token)) {
        const num = m[1] | 0,
          gen = m[2] | 0;
        const startPos = position + token.length;
        let contentLength,
          updateEntries = false;
        if (!this.entries[num]) {
          updateEntries = true;
        } else if (this.entries[num].gen === gen) {
          try {
            const parser = new _parser.Parser({
              lexer: new _parser.Lexer(stream.makeSubStream(startPos))
            });
            parser.getObj();
            updateEntries = true;
          } catch (ex) {
            if (ex instanceof _core_utils.ParserEOFException) {
              (0, _util.warn)(`indexObjects -- checking object (${token}): "${ex}".`);
            } else {
              updateEntries = true;
            }
          }
        }
        if (updateEntries) {
          this.entries[num] = {
            offset: position - stream.start,
            gen,
            uncompressed: true
          };
        }
        gEndobjRegExp.lastIndex = startPos;
        const match = gEndobjRegExp.exec(bufferStr);
        if (match) {
          const endPos = gEndobjRegExp.lastIndex + 1;
          contentLength = endPos - position;
          if (match[1] !== "endobj") {
            (0, _util.warn)(`indexObjects: Found "${match[1]}" inside of another "obj", ` + 'caused by missing "endobj" -- trying to recover.');
            contentLength -= match[1].length + 1;
          }
        } else {
          contentLength = length - position;
        }
        const content = buffer.subarray(position, position + contentLength);
        const xrefTagOffset = skipUntil(content, 0, xrefBytes);
        if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) {
          xrefStms.push(position - stream.start);
          this._xrefStms.add(position - stream.start);
        }
        position += contentLength;
      } else if (token.startsWith("trailer") && (token.length === 7 || /\s/.test(token[7]))) {
        trailers.push(position);
        const startPos = position + token.length;
        let contentLength;
        gStartxrefRegExp.lastIndex = startPos;
        const match = gStartxrefRegExp.exec(bufferStr);
        if (match) {
          const endPos = gStartxrefRegExp.lastIndex + 1;
          contentLength = endPos - position;
          if (match[1] !== "startxref") {
            (0, _util.warn)(`indexObjects: Found "${match[1]}" after "trailer", ` + 'caused by missing "startxref" -- trying to recover.');
            contentLength -= match[1].length + 1;
          }
        } else {
          contentLength = length - position;
        }
        position += contentLength;
      } else {
        position += token.length + 1;
      }
    }
    for (const xrefStm of xrefStms) {
      this.startXRefQueue.push(xrefStm);
      this.readXRef(true);
    }
    const trailerDicts = [];
    let isEncrypted = false;
    for (const trailer of trailers) {
      stream.pos = trailer;
      const parser = new _parser.Parser({
        lexer: new _parser.Lexer(stream),
        xref: this,
        allowStreams: true,
        recoveryMode: true
      });
      const obj = parser.getObj();
      if (!(0, _primitives.isCmd)(obj, "trailer")) {
        continue;
      }
      const dict = parser.getObj();
      if (!(dict instanceof _primitives.Dict)) {
        continue;
      }
      trailerDicts.push(dict);
      if (dict.has("Encrypt")) {
        isEncrypted = true;
      }
    }
    let trailerDict, trailerError;
    for (const dict of [...trailerDicts, "genFallback", ...trailerDicts]) {
      if (dict === "genFallback") {
        if (!trailerError) {
          break;
        }
        this._generationFallback = true;
        continue;
      }
      let validPagesDict = false;
      try {
        const rootDict = dict.get("Root");
        if (!(rootDict instanceof _primitives.Dict)) {
          continue;
        }
        const pagesDict = rootDict.get("Pages");
        if (!(pagesDict instanceof _primitives.Dict)) {
          continue;
        }
        const pagesCount = pagesDict.get("Count");
        if (Number.isInteger(pagesCount)) {
          validPagesDict = true;
        }
      } catch (ex) {
        trailerError = ex;
        continue;
      }
      if (validPagesDict && (!isEncrypted || dict.has("Encrypt")) && dict.has("ID")) {
        return dict;
      }
      trailerDict = dict;
    }
    if (trailerDict) {
      return trailerDict;
    }
    if (this.topDict) {
      return this.topDict;
    }
    throw new _util.InvalidPDFException("Invalid PDF structure.");
  }
  readXRef(recoveryMode = false) {
    const stream = this.stream;
    const startXRefParsedCache = new Set();
    while (this.startXRefQueue.length) {
      try {
        const startXRef = this.startXRefQueue[0];
        if (startXRefParsedCache.has(startXRef)) {
          (0, _util.warn)("readXRef - skipping XRef table since it was already parsed.");
          this.startXRefQueue.shift();
          continue;
        }
        startXRefParsedCache.add(startXRef);
        stream.pos = startXRef + stream.start;
        const parser = new _parser.Parser({
          lexer: new _parser.Lexer(stream),
          xref: this,
          allowStreams: true
        });
        let obj = parser.getObj();
        let dict;
        if ((0, _primitives.isCmd)(obj, "xref")) {
          dict = this.processXRefTable(parser);
          if (!this.topDict) {
            this.topDict = dict;
          }
          obj = dict.get("XRefStm");
          if (Number.isInteger(obj) && !this._xrefStms.has(obj)) {
            this._xrefStms.add(obj);
            this.startXRefQueue.push(obj);
            this.#firstXRefStmPos ??= obj;
          }
        } else if (Number.isInteger(obj)) {
          if (!Number.isInteger(parser.getObj()) || !(0, _primitives.isCmd)(parser.getObj(), "obj") || !((obj = parser.getObj()) instanceof _base_stream.BaseStream)) {
            throw new _util.FormatError("Invalid XRef stream");
          }
          dict = this.processXRefStream(obj);
          if (!this.topDict) {
            this.topDict = dict;
          }
          if (!dict) {
            throw new _util.FormatError("Failed to read XRef stream");
          }
        } else {
          throw new _util.FormatError("Invalid XRef stream header");
        }
        obj = dict.get("Prev");
        if (Number.isInteger(obj)) {
          this.startXRefQueue.push(obj);
        } else if (obj instanceof _primitives.Ref) {
          this.startXRefQueue.push(obj.num);
        }
      } catch (e) {
        if (e instanceof _core_utils.MissingDataException) {
          throw e;
        }
        (0, _util.info)("(while reading XRef): " + e);
      }
      this.startXRefQueue.shift();
    }
    if (this.topDict) {
      return this.topDict;
    }
    if (recoveryMode) {
      return undefined;
    }
    throw new _core_utils.XRefParseException();
  }
  get lastXRefStreamPos() {
    return this.#firstXRefStmPos ?? (this._xrefStms.size > 0 ? Math.max(...this._xrefStms) : null);
  }
  getEntry(i) {
    const xrefEntry = this.entries[i];
    if (xrefEntry && !xrefEntry.free && xrefEntry.offset) {
      return xrefEntry;
    }
    return null;
  }
  fetchIfRef(obj, suppressEncryption = false) {
    if (obj instanceof _primitives.Ref) {
      return this.fetch(obj, suppressEncryption);
    }
    return obj;
  }
  fetch(ref, suppressEncryption = false) {
    if (!(ref instanceof _primitives.Ref)) {
      throw new Error("ref object is not a reference");
    }
    const num = ref.num;
    const cacheEntry = this._cacheMap.get(num);
    if (cacheEntry !== undefined) {
      if (cacheEntry instanceof _primitives.Dict && !cacheEntry.objId) {
        cacheEntry.objId = ref.toString();
      }
      return cacheEntry;
    }
    let xrefEntry = this.getEntry(num);
    if (xrefEntry === null) {
      this._cacheMap.set(num, xrefEntry);
      return xrefEntry;
    }
    if (this._pendingRefs.has(ref)) {
      this._pendingRefs.remove(ref);
      (0, _util.warn)(`Ignoring circular reference: ${ref}.`);
      return _primitives.CIRCULAR_REF;
    }
    this._pendingRefs.put(ref);
    try {
      xrefEntry = xrefEntry.uncompressed ? this.fetchUncompressed(ref, xrefEntry, suppressEncryption) : this.fetchCompressed(ref, xrefEntry, suppressEncryption);
      this._pendingRefs.remove(ref);
    } catch (ex) {
      this._pendingRefs.remove(ref);
      throw ex;
    }
    if (xrefEntry instanceof _primitives.Dict) {
      xrefEntry.objId = ref.toString();
    } else if (xrefEntry instanceof _base_stream.BaseStream) {
      xrefEntry.dict.objId = ref.toString();
    }
    return xrefEntry;
  }
  fetchUncompressed(ref, xrefEntry, suppressEncryption = false) {
    const gen = ref.gen;
    let num = ref.num;
    if (xrefEntry.gen !== gen) {
      const msg = `Inconsistent generation in XRef: ${ref}`;
      if (this._generationFallback && xrefEntry.gen < gen) {
        (0, _util.warn)(msg);
        return this.fetchUncompressed(_primitives.Ref.get(num, xrefEntry.gen), xrefEntry, suppressEncryption);
      }
      throw new _core_utils.XRefEntryException(msg);
    }
    const stream = this.stream.makeSubStream(xrefEntry.offset + this.stream.start);
    const parser = new _parser.Parser({
      lexer: new _parser.Lexer(stream),
      xref: this,
      allowStreams: true
    });
    const obj1 = parser.getObj();
    const obj2 = parser.getObj();
    const obj3 = parser.getObj();
    if (obj1 !== num || obj2 !== gen || !(obj3 instanceof _primitives.Cmd)) {
      throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`);
    }
    if (obj3.cmd !== "obj") {
      if (obj3.cmd.startsWith("obj")) {
        num = parseInt(obj3.cmd.substring(3), 10);
        if (!Number.isNaN(num)) {
          return num;
        }
      }
      throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`);
    }
    xrefEntry = this.encrypt && !suppressEncryption ? parser.getObj(this.encrypt.createCipherTransform(num, gen)) : parser.getObj();
    if (!(xrefEntry instanceof _base_stream.BaseStream)) {
      this._cacheMap.set(num, xrefEntry);
    }
    return xrefEntry;
  }
  fetchCompressed(ref, xrefEntry, suppressEncryption = false) {
    const tableOffset = xrefEntry.offset;
    const stream = this.fetch(_primitives.Ref.get(tableOffset, 0));
    if (!(stream instanceof _base_stream.BaseStream)) {
      throw new _util.FormatError("bad ObjStm stream");
    }
    const first = stream.dict.get("First");
    const n = stream.dict.get("N");
    if (!Number.isInteger(first) || !Number.isInteger(n)) {
      throw new _util.FormatError("invalid first and n parameters for ObjStm stream");
    }
    let parser = new _parser.Parser({
      lexer: new _parser.Lexer(stream),
      xref: this,
      allowStreams: true
    });
    const nums = new Array(n);
    const offsets = new Array(n);
    for (let i = 0; i < n; ++i) {
      const num = parser.getObj();
      if (!Number.isInteger(num)) {
        throw new _util.FormatError(`invalid object number in the ObjStm stream: ${num}`);
      }
      const offset = parser.getObj();
      if (!Number.isInteger(offset)) {
        throw new _util.FormatError(`invalid object offset in the ObjStm stream: ${offset}`);
      }
      nums[i] = num;
      offsets[i] = offset;
    }
    const start = (stream.start || 0) + first;
    const entries = new Array(n);
    for (let i = 0; i < n; ++i) {
      const length = i < n - 1 ? offsets[i + 1] - offsets[i] : undefined;
      if (length < 0) {
        throw new _util.FormatError("Invalid offset in the ObjStm stream.");
      }
      parser = new _parser.Parser({
        lexer: new _parser.Lexer(stream.makeSubStream(start + offsets[i], length, stream.dict)),
        xref: this,
        allowStreams: true
      });
      const obj = parser.getObj();
      entries[i] = obj;
      if (obj instanceof _base_stream.BaseStream) {
        continue;
      }
      const num = nums[i],
        entry = this.entries[num];
      if (entry && entry.offset === tableOffset && entry.gen === i) {
        this._cacheMap.set(num, obj);
      }
    }
    xrefEntry = entries[xrefEntry.gen];
    if (xrefEntry === undefined) {
      throw new _core_utils.XRefEntryException(`Bad (compressed) XRef entry: ${ref}`);
    }
    return xrefEntry;
  }
  async fetchIfRefAsync(obj, suppressEncryption) {
    if (obj instanceof _primitives.Ref) {
      return this.fetchAsync(obj, suppressEncryption);
    }
    return obj;
  }
  async fetchAsync(ref, suppressEncryption) {
    try {
      return this.fetch(ref, suppressEncryption);
    } catch (ex) {
      if (!(ex instanceof _core_utils.MissingDataException)) {
        throw ex;
      }
      await this.pdfManager.requestRange(ex.begin, ex.end);
      return this.fetchAsync(ref, suppressEncryption);
    }
  }
  getCatalogObj() {
    return this.root;
  }
}
exports.XRef = XRef;

/***/ }),
/* 104 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.MessageHandler = void 0;
var _util = __w_pdfjs_require__(2);
const CallbackKind = {
  UNKNOWN: 0,
  DATA: 1,
  ERROR: 2
};
const StreamKind = {
  UNKNOWN: 0,
  CANCEL: 1,
  CANCEL_COMPLETE: 2,
  CLOSE: 3,
  ENQUEUE: 4,
  ERROR: 5,
  PULL: 6,
  PULL_COMPLETE: 7,
  START_COMPLETE: 8
};
function wrapReason(reason) {
  if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) {
    (0, _util.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.');
  }
  switch (reason.name) {
    case "AbortException":
      return new _util.AbortException(reason.message);
    case "MissingPDFException":
      return new _util.MissingPDFException(reason.message);
    case "PasswordException":
      return new _util.PasswordException(reason.message, reason.code);
    case "UnexpectedResponseException":
      return new _util.UnexpectedResponseException(reason.message, reason.status);
    case "UnknownErrorException":
      return new _util.UnknownErrorException(reason.message, reason.details);
    default:
      return new _util.UnknownErrorException(reason.message, reason.toString());
  }
}
class MessageHandler {
  constructor(sourceName, targetName, comObj) {
    this.sourceName = sourceName;
    this.targetName = targetName;
    this.comObj = comObj;
    this.callbackId = 1;
    this.streamId = 1;
    this.streamSinks = Object.create(null);
    this.streamControllers = Object.create(null);
    this.callbackCapabilities = Object.create(null);
    this.actionHandler = Object.create(null);
    this._onComObjOnMessage = event => {
      const data = event.data;
      if (data.targetName !== this.sourceName) {
        return;
      }
      if (data.stream) {
        this.#processStreamMessage(data);
        return;
      }
      if (data.callback) {
        const callbackId = data.callbackId;
        const capability = this.callbackCapabilities[callbackId];
        if (!capability) {
          throw new Error(`Cannot resolve callback ${callbackId}`);
        }
        delete this.callbackCapabilities[callbackId];
        if (data.callback === CallbackKind.DATA) {
          capability.resolve(data.data);
        } else if (data.callback === CallbackKind.ERROR) {
          capability.reject(wrapReason(data.reason));
        } else {
          throw new Error("Unexpected callback case");
        }
        return;
      }
      const action = this.actionHandler[data.action];
      if (!action) {
        throw new Error(`Unknown action from worker: ${data.action}`);
      }
      if (data.callbackId) {
        const cbSourceName = this.sourceName;
        const cbTargetName = data.sourceName;
        new Promise(function (resolve) {
          resolve(action(data.data));
        }).then(function (result) {
          comObj.postMessage({
            sourceName: cbSourceName,
            targetName: cbTargetName,
            callback: CallbackKind.DATA,
            callbackId: data.callbackId,
            data: result
          });
        }, function (reason) {
          comObj.postMessage({
            sourceName: cbSourceName,
            targetName: cbTargetName,
            callback: CallbackKind.ERROR,
            callbackId: data.callbackId,
            reason: wrapReason(reason)
          });
        });
        return;
      }
      if (data.streamId) {
        this.#createStreamSink(data);
        return;
      }
      action(data.data);
    };
    comObj.addEventListener("message", this._onComObjOnMessage);
  }
  on(actionName, handler) {
    const ah = this.actionHandler;
    if (ah[actionName]) {
      throw new Error(`There is already an actionName called "${actionName}"`);
    }
    ah[actionName] = handler;
  }
  send(actionName, data, transfers) {
    this.comObj.postMessage({
      sourceName: this.sourceName,
      targetName: this.targetName,
      action: actionName,
      data
    }, transfers);
  }
  sendWithPromise(actionName, data, transfers) {
    const callbackId = this.callbackId++;
    const capability = new _util.PromiseCapability();
    this.callbackCapabilities[callbackId] = capability;
    try {
      this.comObj.postMessage({
        sourceName: this.sourceName,
        targetName: this.targetName,
        action: actionName,
        callbackId,
        data
      }, transfers);
    } catch (ex) {
      capability.reject(ex);
    }
    return capability.promise;
  }
  sendWithStream(actionName, data, queueingStrategy, transfers) {
    const streamId = this.streamId++,
      sourceName = this.sourceName,
      targetName = this.targetName,
      comObj = this.comObj;
    return new ReadableStream({
      start: controller => {
        const startCapability = new _util.PromiseCapability();
        this.streamControllers[streamId] = {
          controller,
          startCall: startCapability,
          pullCall: null,
          cancelCall: null,
          isClosed: false
        };
        comObj.postMessage({
          sourceName,
          targetName,
          action: actionName,
          streamId,
          data,
          desiredSize: controller.desiredSize
        }, transfers);
        return startCapability.promise;
      },
      pull: controller => {
        const pullCapability = new _util.PromiseCapability();
        this.streamControllers[streamId].pullCall = pullCapability;
        comObj.postMessage({
          sourceName,
          targetName,
          stream: StreamKind.PULL,
          streamId,
          desiredSize: controller.desiredSize
        });
        return pullCapability.promise;
      },
      cancel: reason => {
        (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason");
        const cancelCapability = new _util.PromiseCapability();
        this.streamControllers[streamId].cancelCall = cancelCapability;
        this.streamControllers[streamId].isClosed = true;
        comObj.postMessage({
          sourceName,
          targetName,
          stream: StreamKind.CANCEL,
          streamId,
          reason: wrapReason(reason)
        });
        return cancelCapability.promise;
      }
    }, queueingStrategy);
  }
  #createStreamSink(data) {
    const streamId = data.streamId,
      sourceName = this.sourceName,
      targetName = data.sourceName,
      comObj = this.comObj;
    const self = this,
      action = this.actionHandler[data.action];
    const streamSink = {
      enqueue(chunk, size = 1, transfers) {
        if (this.isCancelled) {
          return;
        }
        const lastDesiredSize = this.desiredSize;
        this.desiredSize -= size;
        if (lastDesiredSize > 0 && this.desiredSize <= 0) {
          this.sinkCapability = new _util.PromiseCapability();
          this.ready = this.sinkCapability.promise;
        }
        comObj.postMessage({
          sourceName,
          targetName,
          stream: StreamKind.ENQUEUE,
          streamId,
          chunk
        }, transfers);
      },
      close() {
        if (this.isCancelled) {
          return;
        }
        this.isCancelled = true;
        comObj.postMessage({
          sourceName,
          targetName,
          stream: StreamKind.CLOSE,
          streamId
        });
        delete self.streamSinks[streamId];
      },
      error(reason) {
        (0, _util.assert)(reason instanceof Error, "error must have a valid reason");
        if (this.isCancelled) {
          return;
        }
        this.isCancelled = true;
        comObj.postMessage({
          sourceName,
          targetName,
          stream: StreamKind.ERROR,
          streamId,
          reason: wrapReason(reason)
        });
      },
      sinkCapability: new _util.PromiseCapability(),
      onPull: null,
      onCancel: null,
      isCancelled: false,
      desiredSize: data.desiredSize,
      ready: null
    };
    streamSink.sinkCapability.resolve();
    streamSink.ready = streamSink.sinkCapability.promise;
    this.streamSinks[streamId] = streamSink;
    new Promise(function (resolve) {
      resolve(action(data.data, streamSink));
    }).then(function () {
      comObj.postMessage({
        sourceName,
        targetName,
        stream: StreamKind.START_COMPLETE,
        streamId,
        success: true
      });
    }, function (reason) {
      comObj.postMessage({
        sourceName,
        targetName,
        stream: StreamKind.START_COMPLETE,
        streamId,
        reason: wrapReason(reason)
      });
    });
  }
  #processStreamMessage(data) {
    const streamId = data.streamId,
      sourceName = this.sourceName,
      targetName = data.sourceName,
      comObj = this.comObj;
    const streamController = this.streamControllers[streamId],
      streamSink = this.streamSinks[streamId];
    switch (data.stream) {
      case StreamKind.START_COMPLETE:
        if (data.success) {
          streamController.startCall.resolve();
        } else {
          streamController.startCall.reject(wrapReason(data.reason));
        }
        break;
      case StreamKind.PULL_COMPLETE:
        if (data.success) {
          streamController.pullCall.resolve();
        } else {
          streamController.pullCall.reject(wrapReason(data.reason));
        }
        break;
      case StreamKind.PULL:
        if (!streamSink) {
          comObj.postMessage({
            sourceName,
            targetName,
            stream: StreamKind.PULL_COMPLETE,
            streamId,
            success: true
          });
          break;
        }
        if (streamSink.desiredSize <= 0 && data.desiredSize > 0) {
          streamSink.sinkCapability.resolve();
        }
        streamSink.desiredSize = data.desiredSize;
        new Promise(function (resolve) {
          resolve(streamSink.onPull?.());
        }).then(function () {
          comObj.postMessage({
            sourceName,
            targetName,
            stream: StreamKind.PULL_COMPLETE,
            streamId,
            success: true
          });
        }, function (reason) {
          comObj.postMessage({
            sourceName,
            targetName,
            stream: StreamKind.PULL_COMPLETE,
            streamId,
            reason: wrapReason(reason)
          });
        });
        break;
      case StreamKind.ENQUEUE:
        (0, _util.assert)(streamController, "enqueue should have stream controller");
        if (streamController.isClosed) {
          break;
        }
        streamController.controller.enqueue(data.chunk);
        break;
      case StreamKind.CLOSE:
        (0, _util.assert)(streamController, "close should have stream controller");
        if (streamController.isClosed) {
          break;
        }
        streamController.isClosed = true;
        streamController.controller.close();
        this.#deleteStreamController(streamController, streamId);
        break;
      case StreamKind.ERROR:
        (0, _util.assert)(streamController, "error should have stream controller");
        streamController.controller.error(wrapReason(data.reason));
        this.#deleteStreamController(streamController, streamId);
        break;
      case StreamKind.CANCEL_COMPLETE:
        if (data.success) {
          streamController.cancelCall.resolve();
        } else {
          streamController.cancelCall.reject(wrapReason(data.reason));
        }
        this.#deleteStreamController(streamController, streamId);
        break;
      case StreamKind.CANCEL:
        if (!streamSink) {
          break;
        }
        new Promise(function (resolve) {
          resolve(streamSink.onCancel?.(wrapReason(data.reason)));
        }).then(function () {
          comObj.postMessage({
            sourceName,
            targetName,
            stream: StreamKind.CANCEL_COMPLETE,
            streamId,
            success: true
          });
        }, function (reason) {
          comObj.postMessage({
            sourceName,
            targetName,
            stream: StreamKind.CANCEL_COMPLETE,
            streamId,
            reason: wrapReason(reason)
          });
        });
        streamSink.sinkCapability.reject(wrapReason(data.reason));
        streamSink.isCancelled = true;
        delete this.streamSinks[streamId];
        break;
      default:
        throw new Error("Unexpected stream case");
    }
  }
  async #deleteStreamController(streamController, streamId) {
    await Promise.allSettled([streamController.startCall?.promise, streamController.pullCall?.promise, streamController.cancelCall?.promise]);
    delete this.streamControllers[streamId];
  }
  destroy() {
    this.comObj.removeEventListener("message", this._onComObjOnMessage);
  }
}
exports.MessageHandler = MessageHandler;

/***/ }),
/* 105 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {



Object.defineProperty(exports, "__esModule", ({
  value: true
}));
exports.PDFWorkerStream = void 0;
var _util = __w_pdfjs_require__(2);
class PDFWorkerStream {
  constructor(msgHandler) {
    this._msgHandler = msgHandler;
    this._contentLength = null;
    this._fullRequestReader = null;
    this._rangeRequestReaders = [];
  }
  getFullReader() {
    (0, _util.assert)(!this._fullRequestReader, "PDFWorkerStream.getFullReader can only be called once.");
    this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler);
    return this._fullRequestReader;
  }
  getRangeReader(begin, end) {
    const reader = new PDFWorkerStreamRangeReader(begin, end, this._msgHandler);
    this._rangeRequestReaders.push(reader);
    return reader;
  }
  cancelAllRequests(reason) {
    this._fullRequestReader?.cancel(reason);
    for (const reader of this._rangeRequestReaders.slice(0)) {
      reader.cancel(reason);
    }
  }
}
exports.PDFWorkerStream = PDFWorkerStream;
class PDFWorkerStreamReader {
  constructor(msgHandler) {
    this._msgHandler = msgHandler;
    this.onProgress = null;
    this._contentLength = null;
    this._isRangeSupported = false;
    this._isStreamingSupported = false;
    const readableStream = this._msgHandler.sendWithStream("GetReader");
    this._reader = readableStream.getReader();
    this._headersReady = this._msgHandler.sendWithPromise("ReaderHeadersReady").then(data => {
      this._isStreamingSupported = data.isStreamingSupported;
      this._isRangeSupported = data.isRangeSupported;
      this._contentLength = data.contentLength;
    });
  }
  get headersReady() {
    return this._headersReady;
  }
  get contentLength() {
    return this._contentLength;
  }
  get isStreamingSupported() {
    return this._isStreamingSupported;
  }
  get isRangeSupported() {
    return this._isRangeSupported;
  }
  async read() {
    const {
      value,
      done
    } = await this._reader.read();
    if (done) {
      return {
        value: undefined,
        done: true
      };
    }
    return {
      value: value.buffer,
      done: false
    };
  }
  cancel(reason) {
    this._reader.cancel(reason);
  }
}
class PDFWorkerStreamRangeReader {
  constructor(begin, end, msgHandler) {
    this._msgHandler = msgHandler;
    this.onProgress = null;
    const readableStream = this._msgHandler.sendWithStream("GetRangeReader", {
      begin,
      end
    });
    this._reader = readableStream.getReader();
  }
  get isStreamingSupported() {
    return false;
  }
  async read() {
    const {
      value,
      done
    } = await this._reader.read();
    if (done) {
      return {
        value: undefined,
        done: true
      };
    }
    return {
      value: value.buffer,
      done: false
    };
  }
  cancel(reason) {
    this._reader.cancel(reason);
  }
}

/***/ })
/******/ 	]);
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __w_pdfjs_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __w_pdfjs_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
var __nested_webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
(() => {
var exports = __nested_webpack_exports__;


Object.defineProperty(exports, "__esModule", ({
  value: true
}));
Object.defineProperty(exports, "WorkerMessageHandler", ({
  enumerable: true,
  get: function () {
    return _worker.WorkerMessageHandler;
  }
}));
var _worker = __w_pdfjs_require__(1);
const pdfjsVersion = '3.11.174';
const pdfjsBuild = 'ce8716743';
})();

/******/ 	return __nested_webpack_exports__;
/******/ })()
;
});
//# sourceMappingURL=pdf.worker.js.map

/***/ }),

/***/ 2479:
/***/ ((module) => {

/**
* plotly.js v2.27.1
* Copyright 2012-2023, Plotly, Inc.
* All rights reserved.
* Licensed under the MIT license
*/
/*! For license information please see plotly.min.js.LICENSE.txt */
!function(t,e){ true?module.exports=e():0}(self,(function(){return function(){var t={98847:function(t,e,r){"use strict";var n=r(71828),i={"X,X div":'direction:ltr;font-family:"Open Sans",verdana,arial,sans-serif;margin:0;padding:0;',"X input,X button":'font-family:"Open Sans",verdana,arial,sans-serif;',"X input:focus,X button:focus":"outline:none;","X a":"text-decoration:none;","X a:hover":"text-decoration:none;","X .crisp":"shape-rendering:crispEdges;","X .user-select-none":"-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;","X svg":"overflow:hidden;","X svg a":"fill:#447adb;","X svg a:hover":"fill:#3c6dc5;","X .main-svg":"position:absolute;top:0;left:0;pointer-events:none;","X .main-svg .draglayer":"pointer-events:all;","X .cursor-default":"cursor:default;","X .cursor-pointer":"cursor:pointer;","X .cursor-crosshair":"cursor:crosshair;","X .cursor-move":"cursor:move;","X .cursor-col-resize":"cursor:col-resize;","X .cursor-row-resize":"cursor:row-resize;","X .cursor-ns-resize":"cursor:ns-resize;","X .cursor-ew-resize":"cursor:ew-resize;","X .cursor-sw-resize":"cursor:sw-resize;","X .cursor-s-resize":"cursor:s-resize;","X .cursor-se-resize":"cursor:se-resize;","X .cursor-w-resize":"cursor:w-resize;","X .cursor-e-resize":"cursor:e-resize;","X .cursor-nw-resize":"cursor:nw-resize;","X .cursor-n-resize":"cursor:n-resize;","X .cursor-ne-resize":"cursor:ne-resize;","X .cursor-grab":"cursor:-webkit-grab;cursor:grab;","X .modebar":"position:absolute;top:2px;right:2px;","X .ease-bg":"-webkit-transition:background-color .3s ease 0s;-moz-transition:background-color .3s ease 0s;-ms-transition:background-color .3s ease 0s;-o-transition:background-color .3s ease 0s;transition:background-color .3s ease 0s;","X .modebar--hover>:not(.watermark)":"opacity:0;-webkit-transition:opacity .3s ease 0s;-moz-transition:opacity .3s ease 0s;-ms-transition:opacity .3s ease 0s;-o-transition:opacity .3s ease 0s;transition:opacity .3s ease 0s;","X:hover .modebar--hover .modebar-group":"opacity:1;","X .modebar-group":"float:left;display:inline-block;box-sizing:border-box;padding-left:8px;position:relative;vertical-align:middle;white-space:nowrap;","X .modebar-btn":"position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;","X .modebar-btn svg":"position:relative;top:2px;","X .modebar.vertical":"display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;","X .modebar.vertical svg":"top:-1px;","X .modebar.vertical .modebar-group":"display:block;float:none;padding-left:0px;padding-bottom:8px;","X .modebar.vertical .modebar-group .modebar-btn":"display:block;text-align:center;","X [data-title]:before,X [data-title]:after":"position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;","X [data-title]:hover:before,X [data-title]:hover:after":"display:block;opacity:1;","X [data-title]:before":'content:"";position:absolute;background:rgba(0,0,0,0);border:6px solid rgba(0,0,0,0);z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;',"X [data-title]:after":"content:attr(data-title);background:#69738a;color:#fff;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;","X .vertical [data-title]:before,X .vertical [data-title]:after":"top:0%;right:200%;","X .vertical [data-title]:before":"border:6px solid rgba(0,0,0,0);border-left-color:#69738a;margin-top:8px;margin-right:-30px;",Y:'font-family:"Open Sans",verdana,arial,sans-serif;position:fixed;top:50px;right:20px;z-index:10000;font-size:10pt;max-width:180px;',"Y p":"margin:0;","Y .notifier-note":"min-width:180px;max-width:250px;border:1px solid #fff;z-index:3000;margin:0;background-color:#8c97af;background-color:rgba(140,151,175,.9);color:#fff;padding:10px;overflow-wrap:break-word;word-wrap:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;","Y .notifier-close":"color:#fff;opacity:.8;float:right;padding:0 5px;background:none;border:none;font-size:20px;font-weight:bold;line-height:20px;","Y .notifier-close:hover":"color:#444;text-decoration:none;cursor:pointer;"};for(var a in i){var o=a.replace(/^,/," ,").replace(/X/g,".js-plotly-plot .plotly").replace(/Y/g,".plotly-notifier");n.addStyleRule(o,i[a])}},98222:function(t,e,r){"use strict";t.exports=r(82887)},27206:function(t,e,r){"use strict";t.exports=r(60822)},59893:function(t,e,r){"use strict";t.exports=r(23381)},5224:function(t,e,r){"use strict";t.exports=r(83832)},59509:function(t,e,r){"use strict";t.exports=r(72201)},75557:function(t,e,r){"use strict";t.exports=r(91815)},40338:function(t,e,r){"use strict";t.exports=r(21462)},35080:function(t,e,r){"use strict";t.exports=r(51319)},61396:function(t,e,r){"use strict";t.exports=r(57516)},40549:function(t,e,r){"use strict";t.exports=r(98128)},49866:function(t,e,r){"use strict";t.exports=r(99442)},36089:function(t,e,r){"use strict";t.exports=r(93740)},19548:function(t,e,r){"use strict";t.exports=r(8729)},35831:function(t,e,r){"use strict";t.exports=r(93814)},61039:function(t,e,r){"use strict";t.exports=r(14382)},97040:function(t,e,r){"use strict";t.exports=r(51759)},77986:function(t,e,r){"use strict";t.exports=r(10421)},24296:function(t,e,r){"use strict";t.exports=r(43102)},58872:function(t,e,r){"use strict";t.exports=r(92165)},29626:function(t,e,r){"use strict";t.exports=r(3325)},65591:function(t,e,r){"use strict";t.exports=r(36071)},69738:function(t,e,r){"use strict";t.exports=r(43905)},92650:function(t,e,r){"use strict";t.exports=r(35902)},35630:function(t,e,r){"use strict";t.exports=r(69816)},73434:function(t,e,r){"use strict";t.exports=r(94507)},27909:function(t,e,r){"use strict";var n=r(19548);n.register([r(27206),r(5224),r(58872),r(65591),r(69738),r(92650),r(49866),r(25743),r(6197),r(97040),r(85461),r(73434),r(54201),r(81299),r(47645),r(35630),r(77986),r(83043),r(93005),r(96881),r(4534),r(50581),r(40549),r(77900),r(47582),r(35080),r(21641),r(17280),r(5861),r(29626),r(10021),r(65317),r(96268),r(61396),r(35831),r(16122),r(46163),r(40344),r(40338),r(48131),r(36089),r(55334),r(75557),r(19440),r(99488),r(59893),r(97393),r(98222),r(61039),r(24296),r(66398),r(59509)]),t.exports=n},46163:function(t,e,r){"use strict";t.exports=r(15154)},96881:function(t,e,r){"use strict";t.exports=r(64943)},50581:function(t,e,r){"use strict";t.exports=r(21164)},55334:function(t,e,r){"use strict";t.exports=r(54186)},65317:function(t,e,r){"use strict";t.exports=r(94873)},10021:function(t,e,r){"use strict";t.exports=r(67618)},54201:function(t,e,r){"use strict";t.exports=r(58810)},5861:function(t,e,r){"use strict";t.exports=r(20593)},16122:function(t,e,r){"use strict";t.exports=r(29396)},83043:function(t,e,r){"use strict";t.exports=r(13551)},48131:function(t,e,r){"use strict";t.exports=r(46858)},47582:function(t,e,r){"use strict";t.exports=r(17988)},21641:function(t,e,r){"use strict";t.exports=r(68868)},96268:function(t,e,r){"use strict";t.exports=r(20467)},19440:function(t,e,r){"use strict";t.exports=r(91271)},99488:function(t,e,r){"use strict";t.exports=r(21461)},97393:function(t,e,r){"use strict";t.exports=r(85956)},25743:function(t,e,r){"use strict";t.exports=r(52979)},66398:function(t,e,r){"use strict";t.exports=r(32275)},17280:function(t,e,r){"use strict";t.exports=r(6419)},77900:function(t,e,r){"use strict";t.exports=r(61510)},81299:function(t,e,r){"use strict";t.exports=r(87619)},93005:function(t,e,r){"use strict";t.exports=r(93601)},40344:function(t,e,r){"use strict";t.exports=r(96595)},47645:function(t,e,r){"use strict";t.exports=r(70954)},6197:function(t,e,r){"use strict";t.exports=r(47462)},4534:function(t,e,r){"use strict";t.exports=r(17659)},85461:function(t,e,r){"use strict";t.exports=r(19990)},82884:function(t){"use strict";t.exports=[{path:"",backoff:0},{path:"M-2.4,-3V3L0.6,0Z",backoff:.6},{path:"M-3.7,-2.5V2.5L1.3,0Z",backoff:1.3},{path:"M-4.45,-3L-1.65,-0.2V0.2L-4.45,3L1.55,0Z",backoff:1.55},{path:"M-2.2,-2.2L-0.2,-0.2V0.2L-2.2,2.2L-1.4,3L1.6,0L-1.4,-3Z",backoff:1.6},{path:"M-4.4,-2.1L-0.6,-0.2V0.2L-4.4,2.1L-4,3L2,0L-4,-3Z",backoff:2},{path:"M2,0A2,2 0 1,1 0,-2A2,2 0 0,1 2,0Z",backoff:0,noRotate:!0},{path:"M2,2V-2H-2V2Z",backoff:0,noRotate:!0}]},50215:function(t,e,r){"use strict";var n=r(82884),i=r(41940),a=r(85555),o=r(44467).templatedArray;r(24695),t.exports=o("annotation",{visible:{valType:"boolean",dflt:!0,editType:"calc+arraydraw"},text:{valType:"string",editType:"calc+arraydraw"},textangle:{valType:"angle",dflt:0,editType:"calc+arraydraw"},font:i({editType:"calc+arraydraw",colorEditType:"arraydraw"}),width:{valType:"number",min:1,dflt:null,editType:"calc+arraydraw"},height:{valType:"number",min:1,dflt:null,editType:"calc+arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},align:{valType:"enumerated",values:["left","center","right"],dflt:"center",editType:"arraydraw"},valign:{valType:"enumerated",values:["top","middle","bottom"],dflt:"middle",editType:"arraydraw"},bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},bordercolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},borderpad:{valType:"number",min:0,dflt:1,editType:"calc+arraydraw"},borderwidth:{valType:"number",min:0,dflt:1,editType:"calc+arraydraw"},showarrow:{valType:"boolean",dflt:!0,editType:"calc+arraydraw"},arrowcolor:{valType:"color",editType:"arraydraw"},arrowhead:{valType:"integer",min:0,max:n.length,dflt:1,editType:"arraydraw"},startarrowhead:{valType:"integer",min:0,max:n.length,dflt:1,editType:"arraydraw"},arrowside:{valType:"flaglist",flags:["end","start"],extras:["none"],dflt:"end",editType:"arraydraw"},arrowsize:{valType:"number",min:.3,dflt:1,editType:"calc+arraydraw"},startarrowsize:{valType:"number",min:.3,dflt:1,editType:"calc+arraydraw"},arrowwidth:{valType:"number",min:.1,editType:"calc+arraydraw"},standoff:{valType:"number",min:0,dflt:0,editType:"calc+arraydraw"},startstandoff:{valType:"number",min:0,dflt:0,editType:"calc+arraydraw"},ax:{valType:"any",editType:"calc+arraydraw"},ay:{valType:"any",editType:"calc+arraydraw"},axref:{valType:"enumerated",dflt:"pixel",values:["pixel",a.idRegex.x.toString()],editType:"calc"},ayref:{valType:"enumerated",dflt:"pixel",values:["pixel",a.idRegex.y.toString()],editType:"calc"},xref:{valType:"enumerated",values:["paper",a.idRegex.x.toString()],editType:"calc"},x:{valType:"any",editType:"calc+arraydraw"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"auto",editType:"calc+arraydraw"},xshift:{valType:"number",dflt:0,editType:"calc+arraydraw"},yref:{valType:"enumerated",values:["paper",a.idRegex.y.toString()],editType:"calc"},y:{valType:"any",editType:"calc+arraydraw"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"auto",editType:"calc+arraydraw"},yshift:{valType:"number",dflt:0,editType:"calc+arraydraw"},clicktoshow:{valType:"enumerated",values:[!1,"onoff","onout"],dflt:!1,editType:"arraydraw"},xclick:{valType:"any",editType:"arraydraw"},yclick:{valType:"any",editType:"arraydraw"},hovertext:{valType:"string",editType:"arraydraw"},hoverlabel:{bgcolor:{valType:"color",editType:"arraydraw"},bordercolor:{valType:"color",editType:"arraydraw"},font:i({editType:"arraydraw"}),editType:"arraydraw"},captureevents:{valType:"boolean",editType:"arraydraw"},editType:"calc",_deprecated:{ref:{valType:"string",editType:"calc"}}})},3749:function(t,e,r){"use strict";var n=r(71828),i=r(89298),a=r(92605).draw;function o(t){var e=t._fullLayout;n.filterVisible(e.annotations).forEach((function(e){var r=i.getFromId(t,e.xref),n=i.getFromId(t,e.yref),a=i.getRefType(e.xref),o=i.getRefType(e.yref);e._extremes={},"range"===a&&s(e,r),"range"===o&&s(e,n)}))}function s(t,e){var r,n=e._id,a=n.charAt(0),o=t[a],s=t["a"+a],l=t[a+"ref"],u=t["a"+a+"ref"],c=t["_"+a+"padplus"],f=t["_"+a+"padminus"],h={x:1,y:-1}[a]*t[a+"shift"],p=3*t.arrowsize*t.arrowwidth||0,d=p+h,v=p-h,g=3*t.startarrowsize*t.arrowwidth||0,y=g+h,m=g-h;if(u===l){var x=i.findExtremes(e,[e.r2c(o)],{ppadplus:d,ppadminus:v}),b=i.findExtremes(e,[e.r2c(s)],{ppadplus:Math.max(c,y),ppadminus:Math.max(f,m)});r={min:[x.min[0],b.min[0]],max:[x.max[0],b.max[0]]}}else y=s?y+s:y,m=s?m-s:m,r=i.findExtremes(e,[e.r2c(o)],{ppadplus:Math.max(c,d,y),ppadminus:Math.max(f,v,m)});t._extremes[n]=r}t.exports=function(t){var e=t._fullLayout;if(n.filterVisible(e.annotations).length&&t._fullData.length)return n.syncOrAsync([a,o],t)}},44317:function(t,e,r){"use strict";var n=r(71828),i=r(73972),a=r(44467).arrayEditor;function o(t,e){var r,n,i,a,o,l,u,c=t._fullLayout.annotations,f=[],h=[],p=[],d=(e||[]).length;for(r=0;r<c.length;r++)if(a=(i=c[r]).clicktoshow){for(n=0;n<d;n++)if(l=(o=e[n]).xaxis,u=o.yaxis,l._id===i.xref&&u._id===i.yref&&l.d2r(o.x)===s(i._xclick,l)&&u.d2r(o.y)===s(i._yclick,u)){(i.visible?"onout"===a?h:p:f).push(r);break}n===d&&i.visible&&"onout"===a&&h.push(r)}return{on:f,off:h,explicitOff:p}}function s(t,e){return"log"===e.type?e.l2r(t):e.d2r(t)}t.exports={hasClickToShow:function(t,e){var r=o(t,e);return r.on.length>0||r.explicitOff.length>0},onClick:function(t,e){var r,s,l=o(t,e),u=l.on,c=l.off.concat(l.explicitOff),f={},h=t._fullLayout.annotations;if(u.length||c.length){for(r=0;r<u.length;r++)(s=a(t.layout,"annotations",h[u[r]])).modifyItem("visible",!0),n.extendFlat(f,s.getUpdateObj());for(r=0;r<c.length;r++)(s=a(t.layout,"annotations",h[c[r]])).modifyItem("visible",!1),n.extendFlat(f,s.getUpdateObj());return i.call("update",t,{},f)}}}},25625:function(t,e,r){"use strict";var n=r(71828),i=r(7901);t.exports=function(t,e,r,a){a("opacity");var o=a("bgcolor"),s=a("bordercolor"),l=i.opacity(s);a("borderpad");var u=a("borderwidth"),c=a("showarrow");if(a("text",c?" ":r._dfltTitle.annotation),a("textangle"),n.coerceFont(a,"font",r.font),a("width"),a("align"),a("height")&&a("valign"),c){var f,h,p=a("arrowside");-1!==p.indexOf("end")&&(f=a("arrowhead"),h=a("arrowsize")),-1!==p.indexOf("start")&&(a("startarrowhead",f),a("startarrowsize",h)),a("arrowcolor",l?e.bordercolor:i.defaultLine),a("arrowwidth",2*(l&&u||1)),a("standoff"),a("startstandoff")}var d=a("hovertext"),v=r.hoverlabel||{};if(d){var g=a("hoverlabel.bgcolor",v.bgcolor||(i.opacity(o)?i.rgb(o):i.defaultLine)),y=a("hoverlabel.bordercolor",v.bordercolor||i.contrast(g));n.coerceFont(a,"hoverlabel.font",{family:v.font.family,size:v.font.size,color:v.font.color||y})}a("captureevents",!!d)}},94128:function(t,e,r){"use strict";var n=r(92770),i=r(58163);t.exports=function(t,e,r,a){e=e||{};var o="log"===r&&"linear"===e.type,s="linear"===r&&"log"===e.type;if(o||s)for(var l,u,c=t._fullLayout.annotations,f=e._id.charAt(0),h=0;h<c.length;h++)l=c[h],u="annotations["+h+"].",l[f+"ref"]===e._id&&p(f),l["a"+f+"ref"]===e._id&&p("a"+f);function p(t){var r=l[t],s=null;s=o?i(r,e.range):Math.pow(10,r),n(s)||(s=null),a(u+t,s)}}},84046:function(t,e,r){"use strict";var n=r(71828),i=r(89298),a=r(85501),o=r(25625),s=r(50215);function l(t,e,r){function a(r,i){return n.coerce(t,e,s,r,i)}var l=a("visible"),u=a("clicktoshow");if(l||u){o(t,e,r,a);for(var c=e.showarrow,f=["x","y"],h=[-10,-30],p={_fullLayout:r},d=0;d<2;d++){var v=f[d],g=i.coerceRef(t,e,p,v,"","paper");if("paper"!==g&&i.getFromId(p,g)._annIndices.push(e._index),i.coercePosition(e,p,a,g,v,.5),c){var y="a"+v,m=i.coerceRef(t,e,p,y,"pixel",["pixel","paper"]);"pixel"!==m&&m!==g&&(m=e[y]="pixel");var x="pixel"===m?h[d]:.4;i.coercePosition(e,p,a,m,y,x)}a(v+"anchor"),a(v+"shift")}if(n.noneOrAll(t,e,["x","y"]),c&&n.noneOrAll(t,e,["ax","ay"]),u){var b=a("xclick"),_=a("yclick");e._xclick=void 0===b?e.x:i.cleanPosition(b,p,e.xref),e._yclick=void 0===_?e.y:i.cleanPosition(_,p,e.yref)}}}t.exports=function(t,e){a(t,e,{name:"annotations",handleItemDefaults:l})}},92605:function(t,e,r){"use strict";var n=r(39898),i=r(73972),a=r(74875),o=r(71828),s=o.strTranslate,l=r(89298),u=r(7901),c=r(91424),f=r(30211),h=r(63893),p=r(6964),d=r(28569),v=r(44467).arrayEditor,g=r(13011);function y(t,e){var r=t._fullLayout.annotations[e]||{},n=l.getFromId(t,r.xref),i=l.getFromId(t,r.yref);n&&n.setScale(),i&&i.setScale(),x(t,r,e,!1,n,i)}function m(t,e,r,n,i){var a=i[r],o=i[r+"ref"],s=-1!==r.indexOf("y"),u="domain"===l.getRefType(o),c=s?n.h:n.w;return t?u?a+(s?-e:e)/t._length:t.p2r(t.r2p(a)+e):a+(s?-e:e)/c}function x(t,e,r,a,y,x){var b,_,w=t._fullLayout,T=t._fullLayout._size,k=t._context.edits;a?(b="annotation-"+a,_=a+".annotations"):(b="annotation",_="annotations");var A=v(t.layout,_,e),M=A.modifyBase,S=A.modifyItem,E=A.getUpdateObj;w._infolayer.selectAll("."+b+'[data-index="'+r+'"]').remove();var L="clip"+w._uid+"_ann"+r;if(e._input&&!1!==e.visible){var C={x:{},y:{}},P=+e.textangle||0,O=w._infolayer.append("g").classed(b,!0).attr("data-index",String(r)).style("opacity",e.opacity),I=O.append("g").classed("annotation-text-g",!0),D=k[e.showarrow?"annotationTail":"annotationPosition"],z=e.captureevents||k.annotationText||D,R=I.append("g").style("pointer-events",z?"all":null).call(p,"pointer").on("click",(function(){t._dragging=!1,t.emit("plotly_clickannotation",Z(n.event))}));e.hovertext&&R.on("mouseover",(function(){var r=e.hoverlabel,n=r.font,i=this.getBoundingClientRect(),a=t.getBoundingClientRect();f.loneHover({x0:i.left-a.left,x1:i.right-a.left,y:(i.top+i.bottom)/2-a.top,text:e.hovertext,color:r.bgcolor,borderColor:r.bordercolor,fontFamily:n.family,fontSize:n.size,fontColor:n.color},{container:w._hoverlayer.node(),outerContainer:w._paper.node(),gd:t})})).on("mouseout",(function(){f.loneUnhover(w._hoverlayer.node())}));var F=e.borderwidth,B=e.borderpad,N=F+B,j=R.append("rect").attr("class","bg").style("stroke-width",F+"px").call(u.stroke,e.bordercolor).call(u.fill,e.bgcolor),U=e.width||e.height,V=w._topclips.selectAll("#"+L).data(U?[0]:[]);V.enter().append("clipPath").classed("annclip",!0).attr("id",L).append("rect"),V.exit().remove();var H=e.font,q=w._meta?o.templateString(e.text,w._meta):e.text,G=R.append("text").classed("annotation-text",!0).text(q);k.annotationText?G.call(h.makeEditable,{delegate:R,gd:t}).call(Y).on("edit",(function(r){e.text=r,this.call(Y),S("text",r),y&&y.autorange&&M(y._name+".autorange",!0),x&&x.autorange&&M(x._name+".autorange",!0),i.call("_guiRelayout",t,E())})):G.call(Y)}else n.selectAll("#"+L).remove();function Z(t){var n={index:r,annotation:e._input,fullAnnotation:e,event:t};return a&&(n.subplotId=a),n}function Y(r){return r.call(c.font,H).attr({"text-anchor":{left:"start",right:"end"}[e.align]||"middle"}),h.convertToTspans(r,t,W),r}function W(){var r=G.selectAll("a");1===r.size()&&r.text()===G.text()&&R.insert("a",":first-child").attr({"xlink:xlink:href":r.attr("xlink:href"),"xlink:xlink:show":r.attr("xlink:show")}).style({cursor:"pointer"}).node().appendChild(j.node());var n=R.select(".annotation-text-math-group"),f=!n.empty(),v=c.bBox((f?n:G).node()),b=v.width,_=v.height,A=e.width||b,z=e.height||_,B=Math.round(A+2*N),H=Math.round(z+2*N);function q(t,e){return"auto"===e&&(e=t<1/3?"left":t>2/3?"right":"center"),{center:0,middle:0,left:.5,bottom:-.5,right:-.5,top:.5}[e]}for(var Y=!1,W=["x","y"],X=0;X<W.length;X++){var J,K,$,Q,tt,et=W[X],rt=e[et+"ref"]||et,nt=e["a"+et+"ref"],it={x:y,y:x}[et],at=(P+("x"===et?0:-90))*Math.PI/180,ot=B*Math.cos(at),st=H*Math.sin(at),lt=Math.abs(ot)+Math.abs(st),ut=e[et+"anchor"],ct=e[et+"shift"]*("x"===et?1:-1),ft=C[et],ht=l.getRefType(rt);if(it&&"domain"!==ht){var pt=it.r2fraction(e[et]);(pt<0||pt>1)&&(nt===rt?((pt=it.r2fraction(e["a"+et]))<0||pt>1)&&(Y=!0):Y=!0),J=it._offset+it.r2p(e[et]),Q=.5}else{var dt="domain"===ht;"x"===et?($=e[et],J=dt?it._offset+it._length*$:J=T.l+T.w*$):($=1-e[et],J=dt?it._offset+it._length*$:J=T.t+T.h*$),Q=e.showarrow?.5:$}if(e.showarrow){ft.head=J;var vt=e["a"+et];if(tt=ot*q(.5,e.xanchor)-st*q(.5,e.yanchor),nt===rt){var gt=l.getRefType(nt);"domain"===gt?("y"===et&&(vt=1-vt),ft.tail=it._offset+it._length*vt):"paper"===gt?"y"===et?(vt=1-vt,ft.tail=T.t+T.h*vt):ft.tail=T.l+T.w*vt:ft.tail=it._offset+it.r2p(vt),K=tt}else ft.tail=J+vt,K=tt+vt;ft.text=ft.tail+tt;var yt=w["x"===et?"width":"height"];if("paper"===rt&&(ft.head=o.constrain(ft.head,1,yt-1)),"pixel"===nt){var mt=-Math.max(ft.tail-3,ft.text),xt=Math.min(ft.tail+3,ft.text)-yt;mt>0?(ft.tail+=mt,ft.text+=mt):xt>0&&(ft.tail-=xt,ft.text-=xt)}ft.tail+=ct,ft.head+=ct}else K=tt=lt*q(Q,ut),ft.text=J+tt;ft.text+=ct,tt+=ct,K+=ct,e["_"+et+"padplus"]=lt/2+K,e["_"+et+"padminus"]=lt/2-K,e["_"+et+"size"]=lt,e["_"+et+"shift"]=tt}if(Y)R.remove();else{var bt=0,_t=0;if("left"!==e.align&&(bt=(A-b)*("center"===e.align?.5:1)),"top"!==e.valign&&(_t=(z-_)*("middle"===e.valign?.5:1)),f)n.select("svg").attr({x:N+bt-1,y:N+_t}).call(c.setClipUrl,U?L:null,t);else{var wt=N+_t-v.top,Tt=N+bt-v.left;G.call(h.positionText,Tt,wt).call(c.setClipUrl,U?L:null,t)}V.select("rect").call(c.setRect,N,N,A,z),j.call(c.setRect,F/2,F/2,B-F,H-F),R.call(c.setTranslate,Math.round(C.x.text-B/2),Math.round(C.y.text-H/2)),I.attr({transform:"rotate("+P+","+C.x.text+","+C.y.text+")"});var kt,At=function(r,n){O.selectAll(".annotation-arrow-g").remove();var l=C.x.head,f=C.y.head,h=C.x.tail+r,p=C.y.tail+n,v=C.x.text+r,b=C.y.text+n,_=o.rotationXYMatrix(P,v,b),w=o.apply2DTransform(_),A=o.apply2DTransform2(_),L=+j.attr("width"),D=+j.attr("height"),z=v-.5*L,F=z+L,B=b-.5*D,N=B+D,U=[[z,B,z,N],[z,N,F,N],[F,N,F,B],[F,B,z,B]].map(A);if(!U.reduce((function(t,e){return t^!!o.segmentsIntersect(l,f,l+1e6,f+1e6,e[0],e[1],e[2],e[3])}),!1)){U.forEach((function(t){var e=o.segmentsIntersect(h,p,l,f,t[0],t[1],t[2],t[3]);e&&(h=e.x,p=e.y)}));var V=e.arrowwidth,H=e.arrowcolor,q=e.arrowside,G=O.append("g").style({opacity:u.opacity(H)}).classed("annotation-arrow-g",!0),Z=G.append("path").attr("d","M"+h+","+p+"L"+l+","+f).style("stroke-width",V+"px").call(u.stroke,u.rgb(H));if(g(Z,q,e),k.annotationPosition&&Z.node().parentNode&&!a){var Y=l,W=f;if(e.standoff){var X=Math.sqrt(Math.pow(l-h,2)+Math.pow(f-p,2));Y+=e.standoff*(h-l)/X,W+=e.standoff*(p-f)/X}var J,K,$=G.append("path").classed("annotation-arrow",!0).classed("anndrag",!0).classed("cursor-move",!0).attr({d:"M3,3H-3V-3H3ZM0,0L"+(h-Y)+","+(p-W),transform:s(Y,W)}).style("stroke-width",V+6+"px").call(u.stroke,"rgba(0,0,0,0)").call(u.fill,"rgba(0,0,0,0)");d.init({element:$.node(),gd:t,prepFn:function(){var t=c.getTranslate(R);J=t.x,K=t.y,y&&y.autorange&&M(y._name+".autorange",!0),x&&x.autorange&&M(x._name+".autorange",!0)},moveFn:function(t,r){var n=w(J,K),i=n[0]+t,a=n[1]+r;R.call(c.setTranslate,i,a),S("x",m(y,t,"x",T,e)),S("y",m(x,r,"y",T,e)),e.axref===e.xref&&S("ax",m(y,t,"ax",T,e)),e.ayref===e.yref&&S("ay",m(x,r,"ay",T,e)),G.attr("transform",s(t,r)),I.attr({transform:"rotate("+P+","+i+","+a+")"})},doneFn:function(){i.call("_guiRelayout",t,E());var e=document.querySelector(".js-notes-box-panel");e&&e.redraw(e.selectedObj)}})}}};e.showarrow&&At(0,0),D&&d.init({element:R.node(),gd:t,prepFn:function(){kt=I.attr("transform")},moveFn:function(t,r){var n="pointer";if(e.showarrow)e.axref===e.xref?S("ax",m(y,t,"ax",T,e)):S("ax",e.ax+t),e.ayref===e.yref?S("ay",m(x,r,"ay",T.w,e)):S("ay",e.ay+r),At(t,r);else{if(a)return;var i,o;if(y)i=m(y,t,"x",T,e);else{var l=e._xsize/T.w,u=e.x+(e._xshift-e.xshift)/T.w-l/2;i=d.align(u+t/T.w,l,0,1,e.xanchor)}if(x)o=m(x,r,"y",T,e);else{var c=e._ysize/T.h,f=e.y-(e._yshift+e.yshift)/T.h-c/2;o=d.align(f-r/T.h,c,0,1,e.yanchor)}S("x",i),S("y",o),y&&x||(n=d.getCursor(y?.5:i,x?.5:o,e.xanchor,e.yanchor))}I.attr({transform:s(t,r)+kt}),p(R,n)},clickFn:function(r,n){e.captureevents&&t.emit("plotly_clickannotation",Z(n))},doneFn:function(){p(R),i.call("_guiRelayout",t,E());var e=document.querySelector(".js-notes-box-panel");e&&e.redraw(e.selectedObj)}})}}}t.exports={draw:function(t){var e=t._fullLayout;e._infolayer.selectAll(".annotation").remove();for(var r=0;r<e.annotations.length;r++)e.annotations[r].visible&&y(t,r);return a.previousPromises(t)},drawOne:y,drawRaw:x}},13011:function(t,e,r){"use strict";var n=r(39898),i=r(7901),a=r(82884),o=r(71828),s=o.strScale,l=o.strRotate,u=o.strTranslate;t.exports=function(t,e,r){var o,c,f,h,p=t.node(),d=a[r.arrowhead||0],v=a[r.startarrowhead||0],g=(r.arrowwidth||1)*(r.arrowsize||1),y=(r.arrowwidth||1)*(r.startarrowsize||1),m=e.indexOf("start")>=0,x=e.indexOf("end")>=0,b=d.backoff*g+r.standoff,_=v.backoff*y+r.startstandoff;if("line"===p.nodeName){o={x:+t.attr("x1"),y:+t.attr("y1")},c={x:+t.attr("x2"),y:+t.attr("y2")};var w=o.x-c.x,T=o.y-c.y;if(h=(f=Math.atan2(T,w))+Math.PI,b&&_&&b+_>Math.sqrt(w*w+T*T))return void D();if(b){if(b*b>w*w+T*T)return void D();var k=b*Math.cos(f),A=b*Math.sin(f);c.x+=k,c.y+=A,t.attr({x2:c.x,y2:c.y})}if(_){if(_*_>w*w+T*T)return void D();var M=_*Math.cos(f),S=_*Math.sin(f);o.x-=M,o.y-=S,t.attr({x1:o.x,y1:o.y})}}else if("path"===p.nodeName){var E=p.getTotalLength(),L="";if(E<b+_)return void D();var C=p.getPointAtLength(0),P=p.getPointAtLength(.1);f=Math.atan2(C.y-P.y,C.x-P.x),o=p.getPointAtLength(Math.min(_,E)),L="0px,"+_+"px,";var O=p.getPointAtLength(E),I=p.getPointAtLength(E-.1);h=Math.atan2(O.y-I.y,O.x-I.x),c=p.getPointAtLength(Math.max(0,E-b)),L+=E-(L?_+b:b)+"px,"+E+"px",t.style("stroke-dasharray",L)}function D(){t.style("stroke-dasharray","0px,100px")}function z(e,a,o,c){e.path&&(e.noRotate&&(o=0),n.select(p.parentNode).append("path").attr({class:t.attr("class"),d:e.path,transform:u(a.x,a.y)+l(180*o/Math.PI)+s(c)}).style({fill:i.rgb(r.arrowcolor),"stroke-width":0}))}m&&z(v,o,f,y),x&&z(d,c,h,g)}},32745:function(t,e,r){"use strict";var n=r(92605),i=r(44317);t.exports={moduleType:"component",name:"annotations",layoutAttributes:r(50215),supplyLayoutDefaults:r(84046),includeBasePlot:r(76325)("annotations"),calcAutorange:r(3749),draw:n.draw,drawOne:n.drawOne,drawRaw:n.drawRaw,hasClickToShow:i.hasClickToShow,onClick:i.onClick,convertCoords:r(94128)}},26997:function(t,e,r){"use strict";var n=r(50215),i=r(30962).overrideAll,a=r(44467).templatedArray;t.exports=i(a("annotation",{visible:n.visible,x:{valType:"any"},y:{valType:"any"},z:{valType:"any"},ax:{valType:"number"},ay:{valType:"number"},xanchor:n.xanchor,xshift:n.xshift,yanchor:n.yanchor,yshift:n.yshift,text:n.text,textangle:n.textangle,font:n.font,width:n.width,height:n.height,opacity:n.opacity,align:n.align,valign:n.valign,bgcolor:n.bgcolor,bordercolor:n.bordercolor,borderpad:n.borderpad,borderwidth:n.borderwidth,showarrow:n.showarrow,arrowcolor:n.arrowcolor,arrowhead:n.arrowhead,startarrowhead:n.startarrowhead,arrowside:n.arrowside,arrowsize:n.arrowsize,startarrowsize:n.startarrowsize,arrowwidth:n.arrowwidth,standoff:n.standoff,startstandoff:n.startstandoff,hovertext:n.hovertext,hoverlabel:n.hoverlabel,captureevents:n.captureevents}),"calc","from-root")},5485:function(t,e,r){"use strict";var n=r(71828),i=r(89298);function a(t,e){var r=e.fullSceneLayout.domain,a=e.fullLayout._size,o={pdata:null,type:"linear",autorange:!1,range:[-1/0,1/0]};t._xa={},n.extendFlat(t._xa,o),i.setConvert(t._xa),t._xa._offset=a.l+r.x[0]*a.w,t._xa.l2p=function(){return.5*(1+t._pdata[0]/t._pdata[3])*a.w*(r.x[1]-r.x[0])},t._ya={},n.extendFlat(t._ya,o),i.setConvert(t._ya),t._ya._offset=a.t+(1-r.y[1])*a.h,t._ya.l2p=function(){return.5*(1-t._pdata[1]/t._pdata[3])*a.h*(r.y[1]-r.y[0])}}t.exports=function(t){for(var e=t.fullSceneLayout.annotations,r=0;r<e.length;r++)a(e[r],t);t.fullLayout._infolayer.selectAll(".annotation-"+t.id).remove()}},20226:function(t,e,r){"use strict";var n=r(71828),i=r(89298),a=r(85501),o=r(25625),s=r(26997);function l(t,e,r,a){function l(r,i){return n.coerce(t,e,s,r,i)}function u(t){var n=t+"axis",a={_fullLayout:{}};return a._fullLayout[n]=r[n],i.coercePosition(e,a,l,t,t,.5)}l("visible")&&(o(t,e,a.fullLayout,l),u("x"),u("y"),u("z"),n.noneOrAll(t,e,["x","y","z"]),e.xref="x",e.yref="y",e.zref="z",l("xanchor"),l("yanchor"),l("xshift"),l("yshift"),e.showarrow&&(e.axref="pixel",e.ayref="pixel",l("ax",-10),l("ay",-30),n.noneOrAll(t,e,["ax","ay"])))}t.exports=function(t,e,r){a(t,e,{name:"annotations",handleItemDefaults:l,fullLayout:r.fullLayout})}},82188:function(t,e,r){"use strict";var n=r(92605).drawRaw,i=r(63538),a=["x","y","z"];t.exports=function(t){for(var e=t.fullSceneLayout,r=t.dataScale,o=e.annotations,s=0;s<o.length;s++){for(var l=o[s],u=!1,c=0;c<3;c++){var f=a[c],h=l[f],p=e[f+"axis"].r2fraction(h);if(p<0||p>1){u=!0;break}}u?t.fullLayout._infolayer.select(".annotation-"+t.id+'[data-index="'+s+'"]').remove():(l._pdata=i(t.glplot.cameraParams,[e.xaxis.r2l(l.x)*r[0],e.yaxis.r2l(l.y)*r[1],e.zaxis.r2l(l.z)*r[2]]),n(t.graphDiv,l,s,t.id,l._xa,l._ya))}}},2468:function(t,e,r){"use strict";var n=r(73972),i=r(71828);t.exports={moduleType:"component",name:"annotations3d",schema:{subplots:{scene:{annotations:r(26997)}}},layoutAttributes:r(26997),handleDefaults:r(20226),includeBasePlot:function(t,e){var r=n.subplotsRegistry.gl3d;if(r)for(var a=r.attrRegex,o=Object.keys(t),s=0;s<o.length;s++){var l=o[s];a.test(l)&&(t[l].annotations||[]).length&&(i.pushUnique(e._basePlotModules,r),i.pushUnique(e._subplots.gl3d,l))}},convert:r(5485),draw:r(82188)}},7561:function(t,e,r){"use strict";t.exports=r(63489),r(94338),r(3961),r(38751),r(86825),r(37715),r(99384),r(43805),r(88874),r(83290),r(29108),r(55422),r(94320),r(31320),r(51367),r(21457)},72201:function(t,e,r){"use strict";var n=r(7561),i=r(71828),a=r(50606),o=a.EPOCHJD,s=a.ONEDAY,l={valType:"enumerated",values:i.sortObjectKeys(n.calendars),editType:"calc",dflt:"gregorian"},u=function(t,e,r,n){var a={};return a[r]=l,i.coerce(t,e,a,r,n)},c="##",f={d:{0:"dd","-":"d"},e:{0:"d","-":"d"},a:{0:"D","-":"D"},A:{0:"DD","-":"DD"},j:{0:"oo","-":"o"},W:{0:"ww","-":"w"},m:{0:"mm","-":"m"},b:{0:"M","-":"M"},B:{0:"MM","-":"MM"},y:{0:"yy","-":"yy"},Y:{0:"yyyy","-":"yyyy"},U:c,w:c,c:{0:"D M d %X yyyy","-":"D M d %X yyyy"},x:{0:"mm/dd/yyyy","-":"mm/dd/yyyy"}},h={};function p(t){var e=h[t];return e||(h[t]=n.instance(t))}function d(t){return i.extendFlat({},l,{description:t})}function v(t){return"Sets the calendar system to use with `"+t+"` date data."}var g={xcalendar:d(v("x"))},y=i.extendFlat({},g,{ycalendar:d(v("y"))}),m=i.extendFlat({},y,{zcalendar:d(v("z"))}),x=d(["Sets the calendar system to use for `range` and `tick0`","if this is a date axis. This does not set the calendar for","interpreting data on this axis, that's specified in the trace","or via the global `layout.calendar`"].join(" "));t.exports={moduleType:"component",name:"calendars",schema:{traces:{scatter:y,bar:y,box:y,heatmap:y,contour:y,histogram:y,histogram2d:y,histogram2dcontour:y,scatter3d:m,surface:m,mesh3d:m,scattergl:y,ohlc:g,candlestick:g},layout:{calendar:d(["Sets the default calendar system to use for interpreting and","displaying dates throughout the plot."].join(" "))},subplots:{xaxis:{calendar:x},yaxis:{calendar:x},scene:{xaxis:{calendar:x},yaxis:{calendar:x},zaxis:{calendar:x}},polar:{radialaxis:{calendar:x}}},transforms:{filter:{valuecalendar:d(["WARNING: All transforms are deprecated and may be removed from the API in next major version.","Sets the calendar system to use for `value`, if it is a date."].join(" ")),targetcalendar:d(["WARNING: All transforms are deprecated and may be removed from the API in next major version.","Sets the calendar system to use for `target`, if it is an","array of dates. If `target` is a string (eg *x*) we use the","corresponding trace attribute (eg `xcalendar`) if it exists,","even if `targetcalendar` is provided."].join(" "))}}},layoutAttributes:l,handleDefaults:u,handleTraceDefaults:function(t,e,r,n){for(var i=0;i<r.length;i++)u(t,e,r[i]+"calendar",n.calendar)},CANONICAL_SUNDAY:{chinese:"2000-01-02",coptic:"2000-01-03",discworld:"2000-01-03",ethiopian:"2000-01-05",hebrew:"5000-01-01",islamic:"1000-01-02",julian:"2000-01-03",mayan:"5000-01-01",nanakshahi:"1000-01-05",nepali:"2000-01-05",persian:"1000-01-01",jalali:"1000-01-01",taiwan:"1000-01-04",thai:"2000-01-04",ummalqura:"1400-01-06"},CANONICAL_TICK:{chinese:"2000-01-01",coptic:"2000-01-01",discworld:"2000-01-01",ethiopian:"2000-01-01",hebrew:"5000-01-01",islamic:"1000-01-01",julian:"2000-01-01",mayan:"5000-01-01",nanakshahi:"1000-01-01",nepali:"2000-01-01",persian:"1000-01-01",jalali:"1000-01-01",taiwan:"1000-01-01",thai:"2000-01-01",ummalqura:"1400-01-01"},DFLTRANGE:{chinese:["2000-01-01","2001-01-01"],coptic:["1700-01-01","1701-01-01"],discworld:["1800-01-01","1801-01-01"],ethiopian:["2000-01-01","2001-01-01"],hebrew:["5700-01-01","5701-01-01"],islamic:["1400-01-01","1401-01-01"],julian:["2000-01-01","2001-01-01"],mayan:["5200-01-01","5201-01-01"],nanakshahi:["0500-01-01","0501-01-01"],nepali:["2000-01-01","2001-01-01"],persian:["1400-01-01","1401-01-01"],jalali:["1400-01-01","1401-01-01"],taiwan:["0100-01-01","0101-01-01"],thai:["2500-01-01","2501-01-01"],ummalqura:["1400-01-01","1401-01-01"]},getCal:p,worldCalFmt:function(t,e,r){for(var n,i,a,l,u,h=Math.floor((e+.05)/s)+o,d=p(r).fromJD(h),v=0;-1!==(v=t.indexOf("%",v));)"0"===(n=t.charAt(v+1))||"-"===n||"_"===n?(a=3,i=t.charAt(v+2),"_"===n&&(n="-")):(i=n,n="0",a=2),(l=f[i])?(u=l===c?c:d.formatDate(l[n]),t=t.substr(0,v)+u+t.substr(v+a),v+=u.length):v+=a;return t}}},22399:function(t,e){"use strict";e.defaults=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],e.defaultLine="#444",e.lightLine="#eee",e.background="#fff",e.borderLine="#BEC8D9",e.lightFraction=1e3/11},7901:function(t,e,r){"use strict";var n=r(84267),i=r(92770),a=r(73627).isTypedArray,o=t.exports={},s=r(22399);o.defaults=s.defaults;var l=o.defaultLine=s.defaultLine;o.lightLine=s.lightLine;var u=o.background=s.background;function c(t){if(i(t)||"string"!=typeof t)return t;var e=t.trim();if("rgb"!==e.substr(0,3))return t;var r=e.match(/^rgba?\s*\(([^()]*)\)$/);if(!r)return t;var n=r[1].trim().split(/\s*[\s,]\s*/),a="a"===e.charAt(3)&&4===n.length;if(!a&&3!==n.length)return t;for(var o=0;o<n.length;o++){if(!n[o].length)return t;if(n[o]=Number(n[o]),!(n[o]>=0))return t;if(3===o)n[o]>1&&(n[o]=1);else if(n[o]>=1)return t}var s=Math.round(255*n[0])+", "+Math.round(255*n[1])+", "+Math.round(255*n[2]);return a?"rgba("+s+", "+n[3]+")":"rgb("+s+")"}o.tinyRGB=function(t){var e=t.toRgb();return"rgb("+Math.round(e.r)+", "+Math.round(e.g)+", "+Math.round(e.b)+")"},o.rgb=function(t){return o.tinyRGB(n(t))},o.opacity=function(t){return t?n(t).getAlpha():0},o.addOpacity=function(t,e){var r=n(t).toRgb();return"rgba("+Math.round(r.r)+", "+Math.round(r.g)+", "+Math.round(r.b)+", "+e+")"},o.combine=function(t,e){var r=n(t).toRgb();if(1===r.a)return n(t).toRgbString();var i=n(e||u).toRgb(),a=1===i.a?i:{r:255*(1-i.a)+i.r*i.a,g:255*(1-i.a)+i.g*i.a,b:255*(1-i.a)+i.b*i.a},o={r:a.r*(1-r.a)+r.r*r.a,g:a.g*(1-r.a)+r.g*r.a,b:a.b*(1-r.a)+r.b*r.a};return n(o).toRgbString()},o.contrast=function(t,e,r){var i=n(t);return 1!==i.getAlpha()&&(i=n(o.combine(t,u))),(i.isDark()?e?i.lighten(e):u:r?i.darken(r):l).toString()},o.stroke=function(t,e){var r=n(e);t.style({stroke:o.tinyRGB(r),"stroke-opacity":r.getAlpha()})},o.fill=function(t,e){var r=n(e);t.style({fill:o.tinyRGB(r),"fill-opacity":r.getAlpha()})},o.clean=function(t){if(t&&"object"==typeof t){var e,r,n,i,s=Object.keys(t);for(e=0;e<s.length;e++)if(i=t[n=s[e]],"color"===n.substr(n.length-5))if(Array.isArray(i))for(r=0;r<i.length;r++)i[r]=c(i[r]);else t[n]=c(i);else if("colorscale"===n.substr(n.length-10)&&Array.isArray(i))for(r=0;r<i.length;r++)Array.isArray(i[r])&&(i[r][1]=c(i[r][1]));else if(Array.isArray(i)){var l=i[0];if(!Array.isArray(l)&&l&&"object"==typeof l)for(r=0;r<i.length;r++)o.clean(i[r])}else i&&"object"==typeof i&&!a(i)&&o.clean(i)}}},63583:function(t,e,r){"use strict";var n=r(13838),i=r(41940),a=r(1426).extendFlat,o=r(30962).overrideAll;t.exports=o({orientation:{valType:"enumerated",values:["h","v"],dflt:"v"},thicknessmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"pixels"},thickness:{valType:"number",min:0,dflt:30},lenmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"fraction"},len:{valType:"number",min:0,dflt:1},x:{valType:"number"},xref:{valType:"enumerated",dflt:"paper",values:["container","paper"],editType:"layoutstyle"},xanchor:{valType:"enumerated",values:["left","center","right"]},xpad:{valType:"number",min:0,dflt:10},y:{valType:"number"},yref:{valType:"enumerated",dflt:"paper",values:["container","paper"],editType:"layoutstyle"},yanchor:{valType:"enumerated",values:["top","middle","bottom"]},ypad:{valType:"number",min:0,dflt:10},outlinecolor:n.linecolor,outlinewidth:n.linewidth,bordercolor:n.linecolor,borderwidth:{valType:"number",min:0,dflt:0},bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)"},tickmode:n.minor.tickmode,nticks:n.nticks,tick0:n.tick0,dtick:n.dtick,tickvals:n.tickvals,ticktext:n.ticktext,ticks:a({},n.ticks,{dflt:""}),ticklabeloverflow:a({},n.ticklabeloverflow,{}),ticklabelposition:{valType:"enumerated",values:["outside","inside","outside top","inside top","outside left","inside left","outside right","inside right","outside bottom","inside bottom"],dflt:"outside"},ticklen:n.ticklen,tickwidth:n.tickwidth,tickcolor:n.tickcolor,ticklabelstep:n.ticklabelstep,showticklabels:n.showticklabels,labelalias:n.labelalias,tickfont:i({}),tickangle:n.tickangle,tickformat:n.tickformat,tickformatstops:n.tickformatstops,tickprefix:n.tickprefix,showtickprefix:n.showtickprefix,ticksuffix:n.ticksuffix,showticksuffix:n.showticksuffix,separatethousands:n.separatethousands,exponentformat:n.exponentformat,minexponent:n.minexponent,showexponent:n.showexponent,title:{text:{valType:"string"},font:i({}),side:{valType:"enumerated",values:["right","top","bottom"]}},_deprecated:{title:{valType:"string"},titlefont:i({}),titleside:{valType:"enumerated",values:["right","top","bottom"],dflt:"top"}}},"colorbars","from-root")},30939:function(t){"use strict";t.exports={cn:{colorbar:"colorbar",cbbg:"cbbg",cbfill:"cbfill",cbfills:"cbfills",cbline:"cbline",cblines:"cblines",cbaxis:"cbaxis",cbtitleunshift:"cbtitleunshift",cbtitle:"cbtitle",cboutline:"cboutline",crisp:"crisp",jsPlaceholder:"js-placeholder"}}},62499:function(t,e,r){"use strict";var n=r(71828),i=r(44467),a=r(26218),o=r(38701),s=r(96115),l=r(89426),u=r(63583);t.exports=function(t,e,r){var c=i.newContainer(e,"colorbar"),f=t.colorbar||{};function h(t,e){return n.coerce(f,c,u,t,e)}var p=r.margin||{t:0,b:0,l:0,r:0},d=r.width-p.l-p.r,v=r.height-p.t-p.b,g="v"===h("orientation"),y=h("thicknessmode");h("thickness","fraction"===y?30/(g?d:v):30);var m=h("lenmode");h("len","fraction"===m?1:g?v:d);var x,b,_,w="paper"===h("yref"),T="paper"===h("xref"),k="left";g?(_="middle",k=T?"left":"right",x=T?1.02:1,b=.5):(_=w?"bottom":"top",k="center",x=.5,b=w?1.02:1),n.coerce(f,c,{x:{valType:"number",min:T?-2:0,max:T?3:1,dflt:x}},"x"),n.coerce(f,c,{y:{valType:"number",min:w?-2:0,max:w?3:1,dflt:b}},"y"),h("xanchor",k),h("xpad"),h("yanchor",_),h("ypad"),n.noneOrAll(f,c,["x","y"]),h("outlinecolor"),h("outlinewidth"),h("bordercolor"),h("borderwidth"),h("bgcolor");var A=n.coerce(f,c,{ticklabelposition:{valType:"enumerated",dflt:"outside",values:g?["outside","inside","outside top","inside top","outside bottom","inside bottom"]:["outside","inside","outside left","inside left","outside right","inside right"]}},"ticklabelposition");h("ticklabeloverflow",-1!==A.indexOf("inside")?"hide past domain":"hide past div"),a(f,c,h,"linear");var M=r.font,S={outerTicks:!1,font:M};-1!==A.indexOf("inside")&&(S.bgColor="black"),l(f,c,h,"linear",S),s(f,c,h,"linear",S),o(f,c,h,"linear",S),h("title.text",r._dfltTitle.colorbar);var E=c.showticklabels?c.tickfont:M,L=n.extendFlat({},E,{color:M.color,size:n.bigFont(E.size)});n.coerceFont(h,"title.font",L),h("title.side",g?"top":"right")}},98981:function(t,e,r){"use strict";var n=r(39898),i=r(84267),a=r(74875),o=r(73972),s=r(89298),l=r(28569),u=r(71828),c=u.strTranslate,f=r(1426).extendFlat,h=r(6964),p=r(91424),d=r(7901),v=r(92998),g=r(63893),y=r(52075).flipScale,m=r(71453),x=r(52830),b=r(13838),_=r(18783),w=_.LINE_SPACING,T=_.FROM_TL,k=_.FROM_BR,A=r(30939).cn;t.exports={draw:function(t){var e=t._fullLayout._infolayer.selectAll("g."+A.colorbar).data(function(t){var e,r,n,i,a=t._fullLayout,o=t.calcdata,s=[];function l(t){return f(t,{_fillcolor:null,_line:{color:null,width:null,dash:null},_levels:{start:null,end:null,size:null},_filllevels:null,_fillgradient:null,_zrange:null})}function u(){"function"==typeof i.calc?i.calc(t,n,e):(e._fillgradient=r.reversescale?y(r.colorscale):r.colorscale,e._zrange=[r[i.min],r[i.max]])}for(var c=0;c<o.length;c++){var h=o[c];if((n=h[0].trace)._module){var p=n._module.colorbar;if(!0===n.visible&&p)for(var d=Array.isArray(p),v=d?p:[p],g=0;g<v.length;g++){var m=(i=v[g]).container;(r=m?n[m]:n)&&r.showscale&&((e=l(r.colorbar))._id="cb"+n.uid+(d&&m?"-"+m:""),e._traceIndex=n.index,e._propPrefix=(m?m+".":"")+"colorbar.",e._meta=n._meta,u(),s.push(e))}}}for(var x in a._colorAxes)if((r=a[x]).showscale){var b=a._colorAxes[x];(e=l(r.colorbar))._id="cb"+x,e._propPrefix=x+".colorbar.",e._meta=a._meta,i={min:"cmin",max:"cmax"},"heatmap"!==b[0]&&(n=b[1],i.calc=n._module.colorbar.calc),u(),s.push(e)}return s}(t),(function(t){return t._id}));e.enter().append("g").attr("class",(function(t){return t._id})).classed(A.colorbar,!0),e.each((function(e){var r=n.select(this);u.ensureSingle(r,"rect",A.cbbg),u.ensureSingle(r,"g",A.cbfills),u.ensureSingle(r,"g",A.cblines),u.ensureSingle(r,"g",A.cbaxis,(function(t){t.classed(A.crisp,!0)})),u.ensureSingle(r,"g",A.cbtitleunshift,(function(t){t.append("g").classed(A.cbtitle,!0)})),u.ensureSingle(r,"rect",A.cboutline);var y=function(t,e,r){var o="v"===e.orientation,l=e.len,h=e.lenmode,y=e.thickness,_=e.thicknessmode,M=e.outlinewidth,S=e.borderwidth,E=e.bgcolor,L=e.xanchor,C=e.yanchor,P=e.xpad,O=e.ypad,I=e.x,D=o?e.y:1-e.y,z="paper"===e.yref,R="paper"===e.xref,F=r._fullLayout,B=F._size,N=e._fillcolor,j=e._line,U=e.title,V=U.side,H=e._zrange||n.extent(("function"==typeof N?N:j.color).domain()),q="function"==typeof j.color?j.color:function(){return j.color},G="function"==typeof N?N:function(){return N},Z=e._levels,Y=function(t,e,r){var n,i,a=e._levels,o=[],s=[],l=a.end+a.size/100,u=a.size,c=1.001*r[0]-.001*r[1],f=1.001*r[1]-.001*r[0];for(i=0;i<1e5&&(n=a.start+i*u,!(u>0?n>=l:n<=l));i++)n>c&&n<f&&o.push(n);if(e._fillgradient)s=[0];else if("function"==typeof e._fillcolor){var h=e._filllevels;if(h)for(l=h.end+h.size/100,u=h.size,i=0;i<1e5&&(n=h.start+i*u,!(u>0?n>=l:n<=l));i++)n>r[0]&&n<r[1]&&s.push(n);else(s=o.map((function(t){return t-a.size/2}))).push(s[s.length-1]+a.size)}else e._fillcolor&&"string"==typeof e._fillcolor&&(s=[0]);return a.size<0&&(o.reverse(),s.reverse()),{line:o,fill:s}}(0,e,H),W=Y.fill,X=Y.line,J=Math.round(y*("fraction"===_?o?B.w:B.h:1)),K=J/(o?B.w:B.h),$=Math.round(l*("fraction"===h?o?B.h:B.w:1)),Q=$/(o?B.h:B.w),tt=R?B.w:r._fullLayout.width,et=z?B.h:r._fullLayout.height,rt=Math.round(o?I*tt+P:D*et+O),nt={center:.5,right:1}[L]||0,it={top:1,middle:.5}[C]||0,at=o?I-nt*K:D-it*K,ot=o?D-it*Q:I-nt*Q,st=Math.round(o?et*(1-ot):tt*ot);e._lenFrac=Q,e._thickFrac=K,e._uFrac=at,e._vFrac=ot;var lt=e._axis=function(t,e,r){var n=t._fullLayout,i="v"===e.orientation,a={type:"linear",range:r,tickmode:e.tickmode,nticks:e.nticks,tick0:e.tick0,dtick:e.dtick,tickvals:e.tickvals,ticktext:e.ticktext,ticks:e.ticks,ticklen:e.ticklen,tickwidth:e.tickwidth,tickcolor:e.tickcolor,showticklabels:e.showticklabels,labelalias:e.labelalias,ticklabelposition:e.ticklabelposition,ticklabeloverflow:e.ticklabeloverflow,ticklabelstep:e.ticklabelstep,tickfont:e.tickfont,tickangle:e.tickangle,tickformat:e.tickformat,exponentformat:e.exponentformat,minexponent:e.minexponent,separatethousands:e.separatethousands,showexponent:e.showexponent,showtickprefix:e.showtickprefix,tickprefix:e.tickprefix,showticksuffix:e.showticksuffix,ticksuffix:e.ticksuffix,title:e.title,showline:!0,anchor:"free",side:i?"right":"bottom",position:1},o=i?"y":"x",s={type:"linear",_id:o+e._id},l={letter:o,font:n.font,noHover:!0,noTickson:!0,noTicklabelmode:!0,noInsideRange:!0,calendar:n.calendar};function c(t,e){return u.coerce(a,s,b,t,e)}return m(a,s,c,l,n),x(a,s,c,l),s}(r,e,H);lt.position=K+(o?I+P/B.w:D+O/B.h);var ut=-1!==["top","bottom"].indexOf(V);if(o&&ut&&(lt.title.side=V,lt.titlex=I+P/B.w,lt.titley=ot+("top"===U.side?Q-O/B.h:O/B.h)),o||ut||(lt.title.side=V,lt.titley=D+O/B.h,lt.titlex=ot+P/B.w),j.color&&"auto"===e.tickmode){lt.tickmode="linear",lt.tick0=Z.start;var ct=Z.size,ft=u.constrain($/50,4,15)+1,ht=(H[1]-H[0])/((e.nticks||ft)*ct);if(ht>1){var pt=Math.pow(10,Math.floor(Math.log(ht)/Math.LN10));ct*=pt*u.roundUp(ht/pt,[2,5,10]),(Math.abs(Z.start)/Z.size+1e-6)%1<2e-6&&(lt.tick0=0)}lt.dtick=ct}lt.domain=o?[ot+O/B.h,ot+Q-O/B.h]:[ot+P/B.w,ot+Q-P/B.w],lt.setScale(),t.attr("transform",c(Math.round(B.l),Math.round(B.t)));var dt,vt=t.select("."+A.cbtitleunshift).attr("transform",c(-Math.round(B.l),-Math.round(B.t))),gt=lt.ticklabelposition,yt=lt.title.font.size,mt=t.select("."+A.cbaxis),xt=0,bt=0;function _t(n,i){var a={propContainer:lt,propName:e._propPrefix+"title",traceIndex:e._traceIndex,_meta:e._meta,placeholder:F._dfltTitle.colorbar,containerGroup:t.select("."+A.cbtitle)},o="h"===n.charAt(0)?n.substr(1):"h"+n;t.selectAll("."+o+",."+o+"-math-group").remove(),v.draw(r,n,f(a,i||{}))}return u.syncOrAsync([a.previousPromises,function(){var t,e;(o&&ut||!o&&!ut)&&("top"===V&&(t=P+B.l+tt*I,e=O+B.t+et*(1-ot-Q)+3+.75*yt),"bottom"===V&&(t=P+B.l+tt*I,e=O+B.t+et*(1-ot)-3-.25*yt),"right"===V&&(e=O+B.t+et*D+3+.75*yt,t=P+B.l+tt*ot),_t(lt._id+"title",{attributes:{x:t,y:e,"text-anchor":o?"start":"middle"}}))},function(){if(!o&&!ut||o&&ut){var a,l=t.select("."+A.cbtitle),f=l.select("text"),h=[-M/2,M/2],d=l.select(".h"+lt._id+"title-math-group").node(),v=15.6;if(f.node()&&(v=parseInt(f.node().style.fontSize,10)*w),d?(a=p.bBox(d),bt=a.width,(xt=a.height)>v&&(h[1]-=(xt-v)/2)):f.node()&&!f.classed(A.jsPlaceholder)&&(a=p.bBox(f.node()),bt=a.width,xt=a.height),o){if(xt){if(xt+=5,"top"===V)lt.domain[1]-=xt/B.h,h[1]*=-1;else{lt.domain[0]+=xt/B.h;var y=g.lineCount(f);h[1]+=(1-y)*v}l.attr("transform",c(h[0],h[1])),lt.setScale()}}else bt&&("right"===V&&(lt.domain[0]+=(bt+yt/2)/B.w),l.attr("transform",c(h[0],h[1])),lt.setScale())}t.selectAll("."+A.cbfills+",."+A.cblines).attr("transform",o?c(0,Math.round(B.h*(1-lt.domain[1]))):c(Math.round(B.w*lt.domain[0]),0)),mt.attr("transform",o?c(0,Math.round(-B.t)):c(Math.round(-B.l),0));var m=t.select("."+A.cbfills).selectAll("rect."+A.cbfill).attr("style","").data(W);m.enter().append("rect").classed(A.cbfill,!0).attr("style",""),m.exit().remove();var x=H.map(lt.c2p).map(Math.round).sort((function(t,e){return t-e}));m.each((function(t,a){var s=[0===a?H[0]:(W[a]+W[a-1])/2,a===W.length-1?H[1]:(W[a]+W[a+1])/2].map(lt.c2p).map(Math.round);o&&(s[1]=u.constrain(s[1]+(s[1]>s[0])?1:-1,x[0],x[1]));var l=n.select(this).attr(o?"x":"y",rt).attr(o?"y":"x",n.min(s)).attr(o?"width":"height",Math.max(J,2)).attr(o?"height":"width",Math.max(n.max(s)-n.min(s),2));if(e._fillgradient)p.gradient(l,r,e._id,o?"vertical":"horizontalreversed",e._fillgradient,"fill");else{var c=G(t).replace("e-","");l.attr("fill",i(c).toHexString())}}));var b=t.select("."+A.cblines).selectAll("path."+A.cbline).data(j.color&&j.width?X:[]);b.enter().append("path").classed(A.cbline,!0),b.exit().remove(),b.each((function(t){var e=rt,r=Math.round(lt.c2p(t))+j.width/2%1;n.select(this).attr("d","M"+(o?e+","+r:r+","+e)+(o?"h":"v")+J).call(p.lineGroupStyle,j.width,q(t),j.dash)})),mt.selectAll("g."+lt._id+"tick,path").remove();var _=rt+J+(M||0)/2-("outside"===e.ticks?1:0),T=s.calcTicks(lt),k=s.getTickSigns(lt)[2];return s.drawTicks(r,lt,{vals:"inside"===lt.ticks?s.clipEnds(lt,T):T,layer:mt,path:s.makeTickPath(lt,_,k),transFn:s.makeTransTickFn(lt)}),s.drawLabels(r,lt,{vals:T,layer:mt,transFn:s.makeTransTickLabelFn(lt),labelFns:s.makeLabelFns(lt,_)})},function(){if(o&&!ut||!o&&ut){var t,i,a=lt.position||0,s=lt._offset+lt._length/2;if("right"===V)i=s,t=B.l+tt*a+10+yt*(lt.showticklabels?1:.5);else if(t=s,"bottom"===V&&(i=B.t+et*a+10+(-1===gt.indexOf("inside")?lt.tickfont.size:0)+("intside"!==lt.ticks&&e.ticklen||0)),"top"===V){var l=U.text.split("<br>").length;i=B.t+et*a+10-J-w*yt*l}_t((o?"h":"v")+lt._id+"title",{avoid:{selection:n.select(r).selectAll("g."+lt._id+"tick"),side:V,offsetTop:o?0:B.t,offsetLeft:o?B.l:0,maxShift:o?F.width:F.height},attributes:{x:t,y:i,"text-anchor":"middle"},transform:{rotate:o?-90:0,offset:0}})}},a.previousPromises,function(){var n,s=J+M/2;-1===gt.indexOf("inside")&&(n=p.bBox(mt.node()),s+=o?n.width:n.height),dt=vt.select("text");var u=0,f=o&&"top"===V,v=!o&&"right"===V,g=0;if(dt.node()&&!dt.classed(A.jsPlaceholder)){var m,x=vt.select(".h"+lt._id+"title-math-group").node();x&&(o&&ut||!o&&!ut)?(u=(n=p.bBox(x)).width,m=n.height):(u=(n=p.bBox(vt.node())).right-B.l-(o?rt:st),m=n.bottom-B.t-(o?st:rt),o||"top"!==V||(s+=n.height,g=n.height)),v&&(dt.attr("transform",c(u/2+yt/2,0)),u*=2),s=Math.max(s,o?u:m)}var b=2*(o?P:O)+s+S+M/2,w=0;!o&&U.text&&"bottom"===C&&D<=0&&(b+=w=b/2,g+=w),F._hColorbarMoveTitle=w,F._hColorbarMoveCBTitle=g;var N=S+M,j=(o?rt:st)-N/2-(o?P:0),H=(o?st:rt)-(o?$:O+g-w);t.select("."+A.cbbg).attr("x",j).attr("y",H).attr(o?"width":"height",Math.max(b-w,2)).attr(o?"height":"width",Math.max($+N,2)).call(d.fill,E).call(d.stroke,e.bordercolor).style("stroke-width",S);var q=v?Math.max(u-10,0):0;t.selectAll("."+A.cboutline).attr("x",(o?rt:st+P)+q).attr("y",(o?st+O-$:rt)+(f?xt:0)).attr(o?"width":"height",Math.max(J,2)).attr(o?"height":"width",Math.max($-(o?2*O+xt:2*P+q),2)).call(d.stroke,e.outlinecolor).style({fill:"none","stroke-width":M});var G=o?nt*b:0,Z=o?0:(1-it)*b-g;if(G=R?B.l-G:-G,Z=z?B.t-Z:-Z,t.attr("transform",c(G,Z)),!o&&(S||i(E).getAlpha()&&!i.equals(F.paper_bgcolor,E))){var Y=mt.selectAll("text"),W=Y[0].length,X=t.select("."+A.cbbg).node(),K=p.bBox(X),Q=p.getTranslate(t);Y.each((function(t,e){var r=W-1;if(0===e||e===r){var n,i=p.bBox(this),a=p.getTranslate(this);if(e===r){var o=i.right+a.x;(n=K.right+Q.x+st-S-2+I-o)>0&&(n=0)}else if(0===e){var s=i.left+a.x;(n=K.left+Q.x+st+S+2-s)<0&&(n=0)}n&&(W<3?this.setAttribute("transform","translate("+n+",0) "+this.getAttribute("transform")):this.setAttribute("visibility","hidden"))}}))}var tt={},et=T[L],at=k[L],ot=T[C],ct=k[C],ft=b-J;o?("pixels"===h?(tt.y=D,tt.t=$*ot,tt.b=$*ct):(tt.t=tt.b=0,tt.yt=D+l*ot,tt.yb=D-l*ct),"pixels"===_?(tt.x=I,tt.l=b*et,tt.r=b*at):(tt.l=ft*et,tt.r=ft*at,tt.xl=I-y*et,tt.xr=I+y*at)):("pixels"===h?(tt.x=I,tt.l=$*et,tt.r=$*at):(tt.l=tt.r=0,tt.xl=I+l*et,tt.xr=I-l*at),"pixels"===_?(tt.y=1-D,tt.t=b*ot,tt.b=b*ct):(tt.t=ft*ot,tt.b=ft*ct,tt.yt=D-y*ot,tt.yb=D+y*ct));var ht=e.y<.5?"b":"t",pt=e.x<.5?"l":"r";r._fullLayout._reservedMargin[e._id]={};var bt={r:F.width-j-G,l:j+tt.r,b:F.height-H-Z,t:H+tt.b};R&&z?a.autoMargin(r,e._id,tt):R?r._fullLayout._reservedMargin[e._id][ht]=bt[ht]:z||o?r._fullLayout._reservedMargin[e._id][pt]=bt[pt]:r._fullLayout._reservedMargin[e._id][ht]=bt[ht]}],r)}(r,e,t);y&&y.then&&(t._promises||[]).push(y),t._context.edits.colorbarPosition&&function(t,e,r){var n,i,a,s="v"===e.orientation,u=r._fullLayout._size;l.init({element:t.node(),gd:r,prepFn:function(){n=t.attr("transform"),h(t)},moveFn:function(r,o){t.attr("transform",n+c(r,o)),i=l.align((s?e._uFrac:e._vFrac)+r/u.w,s?e._thickFrac:e._lenFrac,0,1,e.xanchor),a=l.align((s?e._vFrac:1-e._uFrac)-o/u.h,s?e._lenFrac:e._thickFrac,0,1,e.yanchor);var f=l.getCursor(i,a,e.xanchor,e.yanchor);h(t,f)},doneFn:function(){if(h(t),void 0!==i&&void 0!==a){var n={};n[e._propPrefix+"x"]=i,n[e._propPrefix+"y"]=a,void 0!==e._traceIndex?o.call("_guiRestyle",r,n,e._traceIndex):o.call("_guiRelayout",r,n)}}})}(r,e,t)})),e.exit().each((function(e){a.autoMargin(t,e._id)})).remove(),e.order()}}},76228:function(t,e,r){"use strict";var n=r(71828);t.exports=function(t){return n.isPlainObject(t.colorbar)}},12311:function(t,e,r){"use strict";t.exports={moduleType:"component",name:"colorbar",attributes:r(63583),supplyDefaults:r(62499),draw:r(98981).draw,hasColorbar:r(76228)}},50693:function(t,e,r){"use strict";var n=r(63583),i=r(30587).counter,a=r(78607),o=r(63282).scales;function s(t){return"`"+t+"`"}a(o),t.exports=function(t,e){t=t||"";var r,a=(e=e||{}).cLetter||"c",l=("onlyIfNumerical"in e?e.onlyIfNumerical:Boolean(t),"noScale"in e?e.noScale:"marker.line"===t),u="showScaleDflt"in e?e.showScaleDflt:"z"===a,c="string"==typeof e.colorscaleDflt?o[e.colorscaleDflt]:null,f=e.editTypeOverride||"",h=t?t+".":"";"colorAttr"in e?(r=e.colorAttr,e.colorAttr):s(h+(r={z:"z",c:"color"}[a]));var p=a+"auto",d=a+"min",v=a+"max",g=a+"mid",y=(s(h+p),s(h+d),s(h+v),{});y[d]=y[v]=void 0;var m={};m[p]=!1;var x={};return"color"===r&&(x.color={valType:"color",arrayOk:!0,editType:f||"style"},e.anim&&(x.color.anim=!0)),x[p]={valType:"boolean",dflt:!0,editType:"calc",impliedEdits:y},x[d]={valType:"number",dflt:null,editType:f||"plot",impliedEdits:m},x[v]={valType:"number",dflt:null,editType:f||"plot",impliedEdits:m},x[g]={valType:"number",dflt:null,editType:"calc",impliedEdits:y},x.colorscale={valType:"colorscale",editType:"calc",dflt:c,impliedEdits:{autocolorscale:!1}},x.autocolorscale={valType:"boolean",dflt:!1!==e.autoColorDflt,editType:"calc",impliedEdits:{colorscale:void 0}},x.reversescale={valType:"boolean",dflt:!1,editType:"plot"},l||(x.showscale={valType:"boolean",dflt:u,editType:"calc"},x.colorbar=n),e.noColorAxis||(x.coloraxis={valType:"subplotid",regex:i("coloraxis"),dflt:null,editType:"calc"}),x}},78803:function(t,e,r){"use strict";var n=r(92770),i=r(71828),a=r(52075).extractOpts;t.exports=function(t,e,r){var o,s=t._fullLayout,l=r.vals,u=r.containerStr,c=u?i.nestedProperty(e,u).get():e,f=a(c),h=!1!==f.auto,p=f.min,d=f.max,v=f.mid,g=function(){return i.aggNums(Math.min,null,l)},y=function(){return i.aggNums(Math.max,null,l)};void 0===p?p=g():h&&(p=c._colorAx&&n(p)?Math.min(p,g()):g()),void 0===d?d=y():h&&(d=c._colorAx&&n(d)?Math.max(d,y()):y()),h&&void 0!==v&&(d-v>v-p?p=v-(d-v):d-v<v-p&&(d=v+(v-p))),p===d&&(p-=.5,d+=.5),f._sync("min",p),f._sync("max",d),f.autocolorscale&&(o=p*d<0?s.colorscale.diverging:p>=0?s.colorscale.sequential:s.colorscale.sequentialminus,f._sync("colorscale",o))}},33046:function(t,e,r){"use strict";var n=r(71828),i=r(52075).hasColorscale,a=r(52075).extractOpts;t.exports=function(t,e){function r(t,e){var r=t["_"+e];void 0!==r&&(t[e]=r)}function o(t,i){var o=i.container?n.nestedProperty(t,i.container).get():t;if(o)if(o.coloraxis)o._colorAx=e[o.coloraxis];else{var s=a(o),l=s.auto;(l||void 0===s.min)&&r(o,i.min),(l||void 0===s.max)&&r(o,i.max),s.autocolorscale&&r(o,"colorscale")}}for(var s=0;s<t.length;s++){var l=t[s],u=l._module.colorbar;if(u)if(Array.isArray(u))for(var c=0;c<u.length;c++)o(l,u[c]);else o(l,u);i(l,"marker.line")&&o(l,{container:"marker.line",min:"cmin",max:"cmax"})}for(var f in e._colorAxes)o(e[f],{min:"cmin",max:"cmax"})}},1586:function(t,e,r){"use strict";var n=r(92770),i=r(71828),a=r(76228),o=r(62499),s=r(63282).isValid,l=r(73972).traceIs;function u(t,e){var r=e.slice(0,e.length-1);return e?i.nestedProperty(t,r).get()||{}:t}t.exports=function t(e,r,c,f,h){var p=h.prefix,d=h.cLetter,v="_module"in r,g=u(e,p),y=u(r,p),m=u(r._template||{},p)||{},x=function(){return delete e.coloraxis,delete r.coloraxis,t(e,r,c,f,h)};if(v){var b=c._colorAxes||{},_=f(p+"coloraxis");if(_){var w=l(r,"contour")&&i.nestedProperty(r,"contours.coloring").get()||"heatmap",T=b[_];return void(T?(T[2].push(x),T[0]!==w&&(T[0]=!1,i.warn(["Ignoring coloraxis:",_,"setting","as it is linked to incompatible colorscales."].join(" ")))):b[_]=[w,r,[x]])}}var k=g[d+"min"],A=g[d+"max"],M=n(k)&&n(A)&&k<A;f(p+d+"auto",!M)?f(p+d+"mid"):(f(p+d+"min"),f(p+d+"max"));var S,E,L=g.colorscale,C=m.colorscale;void 0!==L&&(S=!s(L)),void 0!==C&&(S=!s(C)),f(p+"autocolorscale",S),f(p+"colorscale"),f(p+"reversescale"),"marker.line."!==p&&(p&&v&&(E=a(g)),f(p+"showscale",E)&&(p&&m&&(y._template=m),o(g,y,c)))}},52075:function(t,e,r){"use strict";var n=r(39898),i=r(84267),a=r(92770),o=r(71828),s=r(7901),l=r(63282).isValid,u=["showscale","autocolorscale","colorscale","reversescale","colorbar"],c=["min","max","mid","auto"];function f(t){var e,r,n,i=t._colorAx,a=i||t,o={};for(r=0;r<u.length;r++)o[n=u[r]]=a[n];if(i)for(e="c",r=0;r<c.length;r++)o[n=c[r]]=a["c"+n];else{var s;for(r=0;r<c.length;r++)((s="c"+(n=c[r]))in a||(s="z"+n)in a)&&(o[n]=a[s]);e=s.charAt(0)}return o._sync=function(t,r){var n=-1!==c.indexOf(t)?e+t:t;a[n]=a["_"+n]=r},o}function h(t){for(var e=f(t),r=e.min,n=e.max,i=e.reversescale?p(e.colorscale):e.colorscale,a=i.length,o=new Array(a),s=new Array(a),l=0;l<a;l++){var u=i[l];o[l]=r+u[0]*(n-r),s[l]=u[1]}return{domain:o,range:s}}function p(t){for(var e=t.length,r=new Array(e),n=e-1,i=0;n>=0;n--,i++){var a=t[n];r[i]=[1-a[0],a[1]]}return r}function d(t,e){e=e||{};for(var r=t.domain,o=t.range,l=o.length,u=new Array(l),c=0;c<l;c++){var f=i(o[c]).toRgb();u[c]=[f.r,f.g,f.b,f.a]}var h,p=n.scale.linear().domain(r).range(u).clamp(!0),d=e.noNumericCheck,g=e.returnArray;return(h=d&&g?p:d?function(t){return v(p(t))}:g?function(t){return a(t)?p(t):i(t).isValid()?t:s.defaultLine}:function(t){return a(t)?v(p(t)):i(t).isValid()?t:s.defaultLine}).domain=p.domain,h.range=function(){return o},h}function v(t){var e={r:t[0],g:t[1],b:t[2],a:t[3]};return i(e).toRgbString()}t.exports={hasColorscale:function(t,e,r){var n=e?o.nestedProperty(t,e).get()||{}:t,i=n[r||"color"],s=!1;if(o.isArrayOrTypedArray(i))for(var u=0;u<i.length;u++)if(a(i[u])){s=!0;break}return o.isPlainObject(n)&&(s||!0===n.showscale||a(n.cmin)&&a(n.cmax)||l(n.colorscale)||o.isPlainObject(n.colorbar))},extractOpts:f,extractScale:h,flipScale:p,makeColorScaleFunc:d,makeColorScaleFuncFromTrace:function(t,e){return d(h(t),e)}}},21081:function(t,e,r){"use strict";var n=r(63282),i=r(52075);t.exports={moduleType:"component",name:"colorscale",attributes:r(50693),layoutAttributes:r(72673),supplyLayoutDefaults:r(30959),handleDefaults:r(1586),crossTraceDefaults:r(33046),calc:r(78803),scales:n.scales,defaultScale:n.defaultScale,getScale:n.get,isValidScale:n.isValid,hasColorscale:i.hasColorscale,extractOpts:i.extractOpts,extractScale:i.extractScale,flipScale:i.flipScale,makeColorScaleFunc:i.makeColorScaleFunc,makeColorScaleFuncFromTrace:i.makeColorScaleFuncFromTrace}},72673:function(t,e,r){"use strict";var n=r(1426).extendFlat,i=r(50693),a=r(63282).scales;t.exports={editType:"calc",colorscale:{editType:"calc",sequential:{valType:"colorscale",dflt:a.Reds,editType:"calc"},sequentialminus:{valType:"colorscale",dflt:a.Blues,editType:"calc"},diverging:{valType:"colorscale",dflt:a.RdBu,editType:"calc"}},coloraxis:n({_isSubplotObj:!0,editType:"calc"},i("",{colorAttr:"corresponding trace color array(s)",noColorAxis:!0,showScaleDflt:!0}))}},30959:function(t,e,r){"use strict";var n=r(71828),i=r(44467),a=r(72673),o=r(1586);t.exports=function(t,e){function r(r,i){return n.coerce(t,e,a,r,i)}r("colorscale.sequential"),r("colorscale.sequentialminus"),r("colorscale.diverging");var s,l,u=e._colorAxes;function c(t,e){return n.coerce(s,l,a.coloraxis,t,e)}for(var f in u){var h=u[f];if(h[0])s=t[f]||{},(l=i.newContainer(e,f,"coloraxis"))._name=f,o(s,l,e,c,{prefix:"",cLetter:"c"});else{for(var p=0;p<h[2].length;p++)h[2][p]();delete e._colorAxes[f]}}}},63282:function(t,e,r){"use strict";var n=r(84267),i={Greys:[[0,"rgb(0,0,0)"],[1,"rgb(255,255,255)"]],YlGnBu:[[0,"rgb(8,29,88)"],[.125,"rgb(37,52,148)"],[.25,"rgb(34,94,168)"],[.375,"rgb(29,145,192)"],[.5,"rgb(65,182,196)"],[.625,"rgb(127,205,187)"],[.75,"rgb(199,233,180)"],[.875,"rgb(237,248,217)"],[1,"rgb(255,255,217)"]],Greens:[[0,"rgb(0,68,27)"],[.125,"rgb(0,109,44)"],[.25,"rgb(35,139,69)"],[.375,"rgb(65,171,93)"],[.5,"rgb(116,196,118)"],[.625,"rgb(161,217,155)"],[.75,"rgb(199,233,192)"],[.875,"rgb(229,245,224)"],[1,"rgb(247,252,245)"]],YlOrRd:[[0,"rgb(128,0,38)"],[.125,"rgb(189,0,38)"],[.25,"rgb(227,26,28)"],[.375,"rgb(252,78,42)"],[.5,"rgb(253,141,60)"],[.625,"rgb(254,178,76)"],[.75,"rgb(254,217,118)"],[.875,"rgb(255,237,160)"],[1,"rgb(255,255,204)"]],Bluered:[[0,"rgb(0,0,255)"],[1,"rgb(255,0,0)"]],RdBu:[[0,"rgb(5,10,172)"],[.35,"rgb(106,137,247)"],[.5,"rgb(190,190,190)"],[.6,"rgb(220,170,132)"],[.7,"rgb(230,145,90)"],[1,"rgb(178,10,28)"]],Reds:[[0,"rgb(220,220,220)"],[.2,"rgb(245,195,157)"],[.4,"rgb(245,160,105)"],[1,"rgb(178,10,28)"]],Blues:[[0,"rgb(5,10,172)"],[.35,"rgb(40,60,190)"],[.5,"rgb(70,100,245)"],[.6,"rgb(90,120,245)"],[.7,"rgb(106,137,247)"],[1,"rgb(220,220,220)"]],Picnic:[[0,"rgb(0,0,255)"],[.1,"rgb(51,153,255)"],[.2,"rgb(102,204,255)"],[.3,"rgb(153,204,255)"],[.4,"rgb(204,204,255)"],[.5,"rgb(255,255,255)"],[.6,"rgb(255,204,255)"],[.7,"rgb(255,153,255)"],[.8,"rgb(255,102,204)"],[.9,"rgb(255,102,102)"],[1,"rgb(255,0,0)"]],Rainbow:[[0,"rgb(150,0,90)"],[.125,"rgb(0,0,200)"],[.25,"rgb(0,25,255)"],[.375,"rgb(0,152,255)"],[.5,"rgb(44,255,150)"],[.625,"rgb(151,255,0)"],[.75,"rgb(255,234,0)"],[.875,"rgb(255,111,0)"],[1,"rgb(255,0,0)"]],Portland:[[0,"rgb(12,51,131)"],[.25,"rgb(10,136,186)"],[.5,"rgb(242,211,56)"],[.75,"rgb(242,143,56)"],[1,"rgb(217,30,30)"]],Jet:[[0,"rgb(0,0,131)"],[.125,"rgb(0,60,170)"],[.375,"rgb(5,255,255)"],[.625,"rgb(255,255,0)"],[.875,"rgb(250,0,0)"],[1,"rgb(128,0,0)"]],Hot:[[0,"rgb(0,0,0)"],[.3,"rgb(230,0,0)"],[.6,"rgb(255,210,0)"],[1,"rgb(255,255,255)"]],Blackbody:[[0,"rgb(0,0,0)"],[.2,"rgb(230,0,0)"],[.4,"rgb(230,210,0)"],[.7,"rgb(255,255,255)"],[1,"rgb(160,200,255)"]],Earth:[[0,"rgb(0,0,130)"],[.1,"rgb(0,180,180)"],[.2,"rgb(40,210,40)"],[.4,"rgb(230,230,50)"],[.6,"rgb(120,70,20)"],[1,"rgb(255,255,255)"]],Electric:[[0,"rgb(0,0,0)"],[.15,"rgb(30,0,100)"],[.4,"rgb(120,0,100)"],[.6,"rgb(160,90,0)"],[.8,"rgb(230,200,0)"],[1,"rgb(255,250,220)"]],Viridis:[[0,"#440154"],[.06274509803921569,"#48186a"],[.12549019607843137,"#472d7b"],[.18823529411764706,"#424086"],[.25098039215686274,"#3b528b"],[.3137254901960784,"#33638d"],[.3764705882352941,"#2c728e"],[.4392156862745098,"#26828e"],[.5019607843137255,"#21918c"],[.5647058823529412,"#1fa088"],[.6274509803921569,"#28ae80"],[.6901960784313725,"#3fbc73"],[.7529411764705882,"#5ec962"],[.8156862745098039,"#84d44b"],[.8784313725490196,"#addc30"],[.9411764705882353,"#d8e219"],[1,"#fde725"]],Cividis:[[0,"rgb(0,32,76)"],[.058824,"rgb(0,42,102)"],[.117647,"rgb(0,52,110)"],[.176471,"rgb(39,63,108)"],[.235294,"rgb(60,74,107)"],[.294118,"rgb(76,85,107)"],[.352941,"rgb(91,95,109)"],[.411765,"rgb(104,106,112)"],[.470588,"rgb(117,117,117)"],[.529412,"rgb(131,129,120)"],[.588235,"rgb(146,140,120)"],[.647059,"rgb(161,152,118)"],[.705882,"rgb(176,165,114)"],[.764706,"rgb(192,177,109)"],[.823529,"rgb(209,191,102)"],[.882353,"rgb(225,204,92)"],[.941176,"rgb(243,219,79)"],[1,"rgb(255,233,69)"]]},a=i.RdBu;function o(t){var e=0;if(!Array.isArray(t)||t.length<2)return!1;if(!t[0]||!t[t.length-1])return!1;if(0!=+t[0][0]||1!=+t[t.length-1][0])return!1;for(var r=0;r<t.length;r++){var i=t[r];if(2!==i.length||+i[0]<e||!n(i[1]).isValid())return!1;e=+i[0]}return!0}t.exports={scales:i,defaultScale:a,get:function(t,e){if(e||(e=a),!t)return e;function r(){try{t=i[t]||JSON.parse(t)}catch(r){t=e}}return"string"==typeof t&&(r(),"string"==typeof t&&r()),o(t)?t:e},isValid:function(t){return void 0!==i[t]||o(t)}}},92807:function(t){"use strict";t.exports=function(t,e,r,n,i){var a=(t-r)/(n-r),o=a+e/(n-r),s=(a+o)/2;return"left"===i||"bottom"===i?a:"center"===i||"middle"===i?s:"right"===i||"top"===i?o:a<2/3-s?a:o>4/3-s?o:s}},70461:function(t,e,r){"use strict";var n=r(71828),i=[["sw-resize","s-resize","se-resize"],["w-resize","move","e-resize"],["nw-resize","n-resize","ne-resize"]];t.exports=function(t,e,r,a){return t="left"===r?0:"center"===r?1:"right"===r?2:n.constrain(Math.floor(3*t),0,2),e="bottom"===a?0:"middle"===a?1:"top"===a?2:n.constrain(Math.floor(3*e),0,2),i[e][t]}},64505:function(t,e){"use strict";e.selectMode=function(t){return"lasso"===t||"select"===t},e.drawMode=function(t){return"drawclosedpath"===t||"drawopenpath"===t||"drawline"===t||"drawrect"===t||"drawcircle"===t},e.openMode=function(t){return"drawline"===t||"drawopenpath"===t},e.rectMode=function(t){return"select"===t||"drawline"===t||"drawrect"===t||"drawcircle"===t},e.freeMode=function(t){return"lasso"===t||"drawclosedpath"===t||"drawopenpath"===t},e.selectingOrDrawing=function(t){return e.freeMode(t)||e.rectMode(t)}},28569:function(t,e,r){"use strict";var n=r(48956),i=r(57035),a=r(38520),o=r(71828).removeElement,s=r(85555),l=t.exports={};l.align=r(92807),l.getCursor=r(70461);var u=r(26041);function c(){var t=document.createElement("div");t.className="dragcover";var e=t.style;return e.position="fixed",e.left=0,e.right=0,e.top=0,e.bottom=0,e.zIndex=999999999,e.background="none",document.body.appendChild(t),t}function f(t){return n(t.changedTouches?t.changedTouches[0]:t,document.body)}l.unhover=u.wrapped,l.unhoverRaw=u.raw,l.init=function(t){var e,r,n,u,h,p,d,v,g=t.gd,y=1,m=g._context.doubleClickDelay,x=t.element;g._mouseDownTime||(g._mouseDownTime=0),x.style.pointerEvents="all",x.onmousedown=_,a?(x._ontouchstart&&x.removeEventListener("touchstart",x._ontouchstart),x._ontouchstart=_,x.addEventListener("touchstart",_,{passive:!1})):x.ontouchstart=_;var b=t.clampFn||function(t,e,r){return Math.abs(t)<r&&(t=0),Math.abs(e)<r&&(e=0),[t,e]};function _(a){g._dragged=!1,g._dragging=!0;var o=f(a);e=o[0],r=o[1],d=a.target,p=a,v=2===a.buttons||a.ctrlKey,void 0===a.clientX&&void 0===a.clientY&&(a.clientX=e,a.clientY=r),(n=(new Date).getTime())-g._mouseDownTime<m?y+=1:(y=1,g._mouseDownTime=n),t.prepFn&&t.prepFn(a,e,r),i&&!v?(h=c()).style.cursor=window.getComputedStyle(x).cursor:i||(h=document,u=window.getComputedStyle(document.documentElement).cursor,document.documentElement.style.cursor=window.getComputedStyle(x).cursor),document.addEventListener("mouseup",T),document.addEventListener("touchend",T),!1!==t.dragmode&&(a.preventDefault(),document.addEventListener("mousemove",w),document.addEventListener("touchmove",w,{passive:!1}))}function w(n){n.preventDefault();var i=f(n),a=t.minDrag||s.MINDRAG,o=b(i[0]-e,i[1]-r,a),u=o[0],c=o[1];(u||c)&&(g._dragged=!0,l.unhover(g,n)),g._dragged&&t.moveFn&&!v&&(g._dragdata={element:x,dx:u,dy:c},t.moveFn(u,c))}function T(e){if(delete g._dragdata,!1!==t.dragmode&&(e.preventDefault(),document.removeEventListener("mousemove",w),document.removeEventListener("touchmove",w)),document.removeEventListener("mouseup",T),document.removeEventListener("touchend",T),i?o(h):u&&(h.documentElement.style.cursor=u,u=null),g._dragging){if(g._dragging=!1,(new Date).getTime()-g._mouseDownTime>m&&(y=Math.max(y-1,1)),g._dragged)t.doneFn&&t.doneFn();else if(t.clickFn&&t.clickFn(y,p),!v){var r;try{r=new MouseEvent("click",e)}catch(t){var n=f(e);(r=document.createEvent("MouseEvents")).initMouseEvent("click",e.bubbles,e.cancelable,e.view,e.detail,e.screenX,e.screenY,n[0],n[1],e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,e.relatedTarget)}d.dispatchEvent(r)}g._dragging=!1,g._dragged=!1}else g._dragged=!1}},l.coverSlip=c},26041:function(t,e,r){"use strict";var n=r(11086),i=r(79990),a=r(24401).getGraphDiv,o=r(26675),s=t.exports={};s.wrapped=function(t,e,r){(t=a(t))._fullLayout&&i.clear(t._fullLayout._uid+o.HOVERID),s.raw(t,e,r)},s.raw=function(t,e){var r=t._fullLayout,i=t._hoverdata;e||(e={}),e.target&&!t._dragged&&!1===n.triggerHandler(t,"plotly_beforehover",e)||(r._hoverlayer.selectAll("g").remove(),r._hoverlayer.selectAll("line").remove(),r._hoverlayer.selectAll("circle").remove(),t._hoverdata=void 0,e.target&&i&&t.emit("plotly_unhover",{event:e,points:i}))}},79952:function(t,e){"use strict";e.P={valType:"string",values:["solid","dot","dash","longdash","dashdot","longdashdot"],dflt:"solid",editType:"style"},e.u={shape:{valType:"enumerated",values:["","/","\\","x","-","|","+","."],dflt:"",arrayOk:!0,editType:"style"},fillmode:{valType:"enumerated",values:["replace","overlay"],dflt:"replace",editType:"style"},bgcolor:{valType:"color",arrayOk:!0,editType:"style"},fgcolor:{valType:"color",arrayOk:!0,editType:"style"},fgopacity:{valType:"number",editType:"style",min:0,max:1},size:{valType:"number",min:0,dflt:8,arrayOk:!0,editType:"style"},solidity:{valType:"number",min:0,max:1,dflt:.3,arrayOk:!0,editType:"style"},editType:"style"}},91424:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=i.numberFormat,o=r(92770),s=r(84267),l=r(73972),u=r(7901),c=r(21081),f=i.strTranslate,h=r(63893),p=r(77922),d=r(18783).LINE_SPACING,v=r(37822).DESELECTDIM,g=r(34098),y=r(39984),m=r(23469).appendArrayPointValue,x=t.exports={};function b(t,e,r){var n=e.fillpattern,i=n&&x.getPatternAttr(n.shape,0,"");if(i){var a=x.getPatternAttr(n.bgcolor,0,null),o=x.getPatternAttr(n.fgcolor,0,null),s=n.fgopacity,l=x.getPatternAttr(n.size,0,8),c=x.getPatternAttr(n.solidity,0,.3),f=e.uid;x.pattern(t,"point",r,f,i,l,c,void 0,n.fillmode,a,o,s)}else e.fillcolor&&t.call(u.fill,e.fillcolor)}x.font=function(t,e,r,n){i.isPlainObject(e)&&(n=e.color,r=e.size,e=e.family),e&&t.style("font-family",e),r+1&&t.style("font-size",r+"px"),n&&t.call(u.fill,n)},x.setPosition=function(t,e,r){t.attr("x",e).attr("y",r)},x.setSize=function(t,e,r){t.attr("width",e).attr("height",r)},x.setRect=function(t,e,r,n,i){t.call(x.setPosition,e,r).call(x.setSize,n,i)},x.translatePoint=function(t,e,r,n){var i=r.c2p(t.x),a=n.c2p(t.y);return!!(o(i)&&o(a)&&e.node())&&("text"===e.node().nodeName?e.attr("x",i).attr("y",a):e.attr("transform",f(i,a)),!0)},x.translatePoints=function(t,e,r){t.each((function(t){var i=n.select(this);x.translatePoint(t,i,e,r)}))},x.hideOutsideRangePoint=function(t,e,r,n,i,a){e.attr("display",r.isPtWithinRange(t,i)&&n.isPtWithinRange(t,a)?null:"none")},x.hideOutsideRangePoints=function(t,e){if(e._hasClipOnAxisFalse){var r=e.xaxis,i=e.yaxis;t.each((function(e){var a=e[0].trace,o=a.xcalendar,s=a.ycalendar,u=l.traceIs(a,"bar-like")?".bartext":".point,.textpoint";t.selectAll(u).each((function(t){x.hideOutsideRangePoint(t,n.select(this),r,i,o,s)}))}))}},x.crispRound=function(t,e,r){return e&&o(e)?t._context.staticPlot?e:e<1?1:Math.round(e):r||0},x.singleLineStyle=function(t,e,r,n,i){e.style("fill","none");var a=(((t||[])[0]||{}).trace||{}).line||{},o=r||a.width||0,s=i||a.dash||"";u.stroke(e,n||a.color),x.dashLine(e,s,o)},x.lineGroupStyle=function(t,e,r,i){t.style("fill","none").each((function(t){var a=(((t||[])[0]||{}).trace||{}).line||{},o=e||a.width||0,s=i||a.dash||"";n.select(this).call(u.stroke,r||a.color).call(x.dashLine,s,o)}))},x.dashLine=function(t,e,r){r=+r||0,e=x.dashStyle(e,r),t.style({"stroke-dasharray":e,"stroke-width":r+"px"})},x.dashStyle=function(t,e){e=+e||1;var r=Math.max(e,3);return"solid"===t?t="":"dot"===t?t=r+"px,"+r+"px":"dash"===t?t=3*r+"px,"+3*r+"px":"longdash"===t?t=5*r+"px,"+5*r+"px":"dashdot"===t?t=3*r+"px,"+r+"px,"+r+"px,"+r+"px":"longdashdot"===t&&(t=5*r+"px,"+2*r+"px,"+r+"px,"+2*r+"px"),t},x.singleFillStyle=function(t,e){var r=n.select(t.node());b(t,((r.data()[0]||[])[0]||{}).trace||{},e)},x.fillGroupStyle=function(t,e){t.style("stroke-width",0).each((function(t){var r=n.select(this);t[0].trace&&b(r,t[0].trace,e)}))};var _=r(90998);x.symbolNames=[],x.symbolFuncs=[],x.symbolBackOffs=[],x.symbolNeedLines={},x.symbolNoDot={},x.symbolNoFill={},x.symbolList=[],Object.keys(_).forEach((function(t){var e=_[t],r=e.n;x.symbolList.push(r,String(r),t,r+100,String(r+100),t+"-open"),x.symbolNames[r]=t,x.symbolFuncs[r]=e.f,x.symbolBackOffs[r]=e.backoff||0,e.needLine&&(x.symbolNeedLines[r]=!0),e.noDot?x.symbolNoDot[r]=!0:x.symbolList.push(r+200,String(r+200),t+"-dot",r+300,String(r+300),t+"-open-dot"),e.noFill&&(x.symbolNoFill[r]=!0)}));var w=x.symbolNames.length;function T(t,e,r,n){var i=t%100;return x.symbolFuncs[i](e,r,n)+(t>=200?"M0,0.5L0.5,0L0,-0.5L-0.5,0Z":"")}x.symbolNumber=function(t){if(o(t))t=+t;else if("string"==typeof t){var e=0;t.indexOf("-open")>0&&(e=100,t=t.replace("-open","")),t.indexOf("-dot")>0&&(e+=200,t=t.replace("-dot","")),(t=x.symbolNames.indexOf(t))>=0&&(t+=e)}return t%100>=w||t>=400?0:Math.floor(Math.max(t,0))};var k={x1:1,x2:0,y1:0,y2:0},A={x1:0,x2:0,y1:1,y2:0},M=a("~f"),S={radial:{node:"radialGradient"},radialreversed:{node:"radialGradient",reversed:!0},horizontal:{node:"linearGradient",attrs:k},horizontalreversed:{node:"linearGradient",attrs:k,reversed:!0},vertical:{node:"linearGradient",attrs:A},verticalreversed:{node:"linearGradient",attrs:A,reversed:!0}};x.gradient=function(t,e,r,a,o,l){for(var c=o.length,f=S[a],h=new Array(c),p=0;p<c;p++)f.reversed?h[c-1-p]=[M(100*(1-o[p][0])),o[p][1]]:h[p]=[M(100*o[p][0]),o[p][1]];var d=e._fullLayout,v="g"+d._uid+"-"+r,g=d._defs.select(".gradients").selectAll("#"+v).data([a+h.join(";")],i.identity);g.exit().remove(),g.enter().append(f.node).each((function(){var t=n.select(this);f.attrs&&t.attr(f.attrs),t.attr("id",v);var e=t.selectAll("stop").data(h);e.exit().remove(),e.enter().append("stop"),e.each((function(t){var e=s(t[1]);n.select(this).attr({offset:t[0]+"%","stop-color":u.tinyRGB(e),"stop-opacity":e.getAlpha()})}))})),t.style(l,V(v,e)).style(l+"-opacity",null),t.classed("gradient_filled",!0)},x.pattern=function(t,e,r,a,o,l,c,f,h,p,d,v){var g="legend"===e;f&&("overlay"===h?(p=f,d=u.contrast(p)):(p=void 0,d=f));var y,m,x,b,_,w,T,k,A,M=r._fullLayout,S="p"+M._uid+"-"+a,E={},L=s(d),C=u.tinyRGB(L),P=v*L.getAlpha();switch(o){case"/":y=l*Math.sqrt(2),m=l*Math.sqrt(2),w="path",E={d:x="M-"+y/4+","+m/4+"l"+y/2+",-"+m/2+"M0,"+m+"L"+y+",0M"+y/4*3+","+m/4*5+"l"+y/2+",-"+m/2,opacity:P,stroke:C,"stroke-width":(b=c*l)+"px"};break;case"\\":y=l*Math.sqrt(2),m=l*Math.sqrt(2),w="path",E={d:x="M"+y/4*3+",-"+m/4+"l"+y/2+","+m/2+"M0,0L"+y+","+m+"M-"+y/4+","+m/4*3+"l"+y/2+","+m/2,opacity:P,stroke:C,"stroke-width":(b=c*l)+"px"};break;case"x":y=l*Math.sqrt(2),m=l*Math.sqrt(2),x="M-"+y/4+","+m/4+"l"+y/2+",-"+m/2+"M0,"+m+"L"+y+",0M"+y/4*3+","+m/4*5+"l"+y/2+",-"+m/2+"M"+y/4*3+",-"+m/4+"l"+y/2+","+m/2+"M0,0L"+y+","+m+"M-"+y/4+","+m/4*3+"l"+y/2+","+m/2,b=l-l*Math.sqrt(1-c),w="path",E={d:x,opacity:P,stroke:C,"stroke-width":b+"px"};break;case"|":w="path",w="path",E={d:x="M"+(y=l)/2+",0L"+y/2+","+(m=l),opacity:P,stroke:C,"stroke-width":(b=c*l)+"px"};break;case"-":w="path",w="path",E={d:x="M0,"+(m=l)/2+"L"+(y=l)+","+m/2,opacity:P,stroke:C,"stroke-width":(b=c*l)+"px"};break;case"+":w="path",x="M"+(y=l)/2+",0L"+y/2+","+(m=l)+"M0,"+m/2+"L"+y+","+m/2,b=l-l*Math.sqrt(1-c),w="path",E={d:x,opacity:P,stroke:C,"stroke-width":b+"px"};break;case".":y=l,m=l,c<Math.PI/4?_=Math.sqrt(c*l*l/Math.PI):(T=c,k=Math.PI/4,1,_=(A=l/2)+(l/Math.sqrt(2)-A)*(T-k)/(1-k)),w="circle",E={cx:y/2,cy:m/2,r:_,opacity:P,fill:C}}var O=[o||"noSh",p||"noBg",d||"noFg",l,c].join(";"),I=M._defs.select(".patterns").selectAll("#"+S).data([O],i.identity);I.exit().remove(),I.enter().append("pattern").each((function(){var t=n.select(this);if(t.attr({id:S,width:y+"px",height:m+"px",patternUnits:"userSpaceOnUse",patternTransform:g?"scale(0.8)":""}),p){var e=s(p),r=u.tinyRGB(e),i=e.getAlpha(),a=t.selectAll("rect").data([0]);a.exit().remove(),a.enter().append("rect").attr({width:y+"px",height:m+"px",fill:r,"fill-opacity":i})}var o=t.selectAll(w).data([0]);o.exit().remove(),o.enter().append(w).attr(E)})),t.style("fill",V(S,r)).style("fill-opacity",null),t.classed("pattern_filled",!0)},x.initGradients=function(t){var e=t._fullLayout;i.ensureSingle(e._defs,"g","gradients").selectAll("linearGradient,radialGradient").remove(),n.select(t).selectAll(".gradient_filled").classed("gradient_filled",!1)},x.initPatterns=function(t){var e=t._fullLayout;i.ensureSingle(e._defs,"g","patterns").selectAll("pattern").remove(),n.select(t).selectAll(".pattern_filled").classed("pattern_filled",!1)},x.getPatternAttr=function(t,e,r){return t&&i.isArrayOrTypedArray(t)?e<t.length?t[e]:r:t},x.pointStyle=function(t,e,r,i){if(t.size()){var a=x.makePointStyleFns(e);t.each((function(t){x.singlePointStyle(t,n.select(this),e,a,r,i)}))}},x.singlePointStyle=function(t,e,r,n,a,o){var s=r.marker,l=s.line;if(o&&o.i>=0&&void 0===t.i&&(t.i=o.i),e.style("opacity",n.selectedOpacityFn?n.selectedOpacityFn(t):void 0===t.mo?s.opacity:t.mo),n.ms2mrc){var c;c="various"===t.ms||"various"===s.size?3:n.ms2mrc(t.ms),t.mrc=c,n.selectedSizeFn&&(c=t.mrc=n.selectedSizeFn(t));var f=x.symbolNumber(t.mx||s.symbol)||0;t.om=f%200>=100;var h=rt(t,r),p=G(t,r);e.attr("d",T(f,c,h,p))}var d,v,g,y=!1;if(t.so)g=l.outlierwidth,v=l.outliercolor,d=s.outliercolor;else{var m=(l||{}).width;g=(t.mlw+1||m+1||(t.trace?(t.trace.marker.line||{}).width:0)+1)-1||0,v="mlc"in t?t.mlcc=n.lineScale(t.mlc):i.isArrayOrTypedArray(l.color)?u.defaultLine:l.color,i.isArrayOrTypedArray(s.color)&&(d=u.defaultLine,y=!0),d="mc"in t?t.mcc=n.markerScale(t.mc):s.color||s.colors||"rgba(0,0,0,0)",n.selectedColorFn&&(d=n.selectedColorFn(t))}if(t.om)e.call(u.stroke,d).style({"stroke-width":(g||1)+"px",fill:"none"});else{e.style("stroke-width",(t.isBlank?0:g)+"px");var b=s.gradient,_=t.mgt;_?y=!0:_=b&&b.type,i.isArrayOrTypedArray(_)&&(_=_[0],S[_]||(_=0));var w=s.pattern,k=w&&x.getPatternAttr(w.shape,t.i,"");if(_&&"none"!==_){var A=t.mgc;A?y=!0:A=b.color;var M=r.uid;y&&(M+="-"+t.i),x.gradient(e,a,M,_,[[0,A],[1,d]],"fill")}else if(k){var E=!1,L=w.fgcolor;!L&&o&&o.color&&(L=o.color,E=!0);var C=x.getPatternAttr(L,t.i,o&&o.color||null),P=x.getPatternAttr(w.bgcolor,t.i,null),O=w.fgopacity,I=x.getPatternAttr(w.size,t.i,8),D=x.getPatternAttr(w.solidity,t.i,.3);E=E||t.mcc||i.isArrayOrTypedArray(w.shape)||i.isArrayOrTypedArray(w.bgcolor)||i.isArrayOrTypedArray(w.fgcolor)||i.isArrayOrTypedArray(w.size)||i.isArrayOrTypedArray(w.solidity);var z=r.uid;E&&(z+="-"+t.i),x.pattern(e,"point",a,z,k,I,D,t.mcc,w.fillmode,P,C,O)}else i.isArrayOrTypedArray(d)?u.fill(e,d[t.i]):u.fill(e,d);g&&u.stroke(e,v)}},x.makePointStyleFns=function(t){var e={},r=t.marker;return e.markerScale=x.tryColorscale(r,""),e.lineScale=x.tryColorscale(r,"line"),l.traceIs(t,"symbols")&&(e.ms2mrc=g.isBubble(t)?y(t):function(){return(r.size||6)/2}),t.selectedpoints&&i.extendFlat(e,x.makeSelectedPointStyleFns(t)),e},x.makeSelectedPointStyleFns=function(t){var e={},r=t.selected||{},n=t.unselected||{},a=t.marker||{},o=r.marker||{},s=n.marker||{},u=a.opacity,c=o.opacity,f=s.opacity,h=void 0!==c,p=void 0!==f;(i.isArrayOrTypedArray(u)||h||p)&&(e.selectedOpacityFn=function(t){var e=void 0===t.mo?a.opacity:t.mo;return t.selected?h?c:e:p?f:v*e});var d=a.color,g=o.color,y=s.color;(g||y)&&(e.selectedColorFn=function(t){var e=t.mcc||d;return t.selected?g||e:y||e});var m=a.size,x=o.size,b=s.size,_=void 0!==x,w=void 0!==b;return l.traceIs(t,"symbols")&&(_||w)&&(e.selectedSizeFn=function(t){var e=t.mrc||m/2;return t.selected?_?x/2:e:w?b/2:e}),e},x.makeSelectedTextStyleFns=function(t){var e={},r=t.selected||{},n=t.unselected||{},i=t.textfont||{},a=r.textfont||{},o=n.textfont||{},s=i.color,l=a.color,c=o.color;return e.selectedTextColorFn=function(t){var e=t.tc||s;return t.selected?l||e:c||(l?e:u.addOpacity(e,v))},e},x.selectedPointStyle=function(t,e){if(t.size()&&e.selectedpoints){var r=x.makeSelectedPointStyleFns(e),i=e.marker||{},a=[];r.selectedOpacityFn&&a.push((function(t,e){t.style("opacity",r.selectedOpacityFn(e))})),r.selectedColorFn&&a.push((function(t,e){u.fill(t,r.selectedColorFn(e))})),r.selectedSizeFn&&a.push((function(t,n){var a=n.mx||i.symbol||0,o=r.selectedSizeFn(n);t.attr("d",T(x.symbolNumber(a),o,rt(n,e),G(n,e))),n.mrc2=o})),a.length&&t.each((function(t){for(var e=n.select(this),r=0;r<a.length;r++)a[r](e,t)}))}},x.tryColorscale=function(t,e){var r=e?i.nestedProperty(t,e).get():t;if(r){var n=r.color;if((r.colorscale||r._colorAx)&&i.isArrayOrTypedArray(n))return c.makeColorScaleFuncFromTrace(r)}return i.identity};var E,L,C={start:1,end:-1,middle:0,bottom:1,top:-1};function P(t,e,r,i,a){var o=n.select(t.node().parentNode),s=-1!==e.indexOf("top")?"top":-1!==e.indexOf("bottom")?"bottom":"middle",l=-1!==e.indexOf("left")?"end":-1!==e.indexOf("right")?"start":"middle",u=i?i/.8+1:0,c=(h.lineCount(t)-1)*d+1,p=C[l]*u,v=.75*r+C[s]*u+(C[s]-1)*c*r/2;t.attr("text-anchor",l),a||o.attr("transform",f(p,v))}function O(t,e){var r=t.ts||e.textfont.size;return o(r)&&r>0?r:0}function I(t,e,r){return r&&(t=N(t)),e?z(t[1]):D(t[0])}function D(t){var e=n.round(t,2);return E=e,e}function z(t){var e=n.round(t,2);return L=e,e}function R(t,e,r,n){var i=t[0]-e[0],a=t[1]-e[1],o=r[0]-e[0],s=r[1]-e[1],l=Math.pow(i*i+a*a,.25),u=Math.pow(o*o+s*s,.25),c=(u*u*i-l*l*o)*n,f=(u*u*a-l*l*s)*n,h=3*u*(l+u),p=3*l*(l+u);return[[D(e[0]+(h&&c/h)),z(e[1]+(h&&f/h))],[D(e[0]-(p&&c/p)),z(e[1]-(p&&f/p))]]}x.textPointStyle=function(t,e,r){if(t.size()){var a;if(e.selectedpoints){var o=x.makeSelectedTextStyleFns(e);a=o.selectedTextColorFn}var s=e.texttemplate,l=r._fullLayout;t.each((function(t){var o=n.select(this),u=s?i.extractOption(t,e,"txt","texttemplate"):i.extractOption(t,e,"tx","text");if(u||0===u){if(s){var c=e._module.formatLabels,f=c?c(t,e,l):{},p={};m(p,e,t.i);var d=e._meta||{};u=i.texttemplateString(u,f,l._d3locale,p,t,d)}var v=t.tp||e.textposition,g=O(t,e),y=a?a(t):t.tc||e.textfont.color;o.call(x.font,t.tf||e.textfont.family,g,y).text(u).call(h.convertToTspans,r).call(P,v,g,t.mrc)}else o.remove()}))}},x.selectedTextStyle=function(t,e){if(t.size()&&e.selectedpoints){var r=x.makeSelectedTextStyleFns(e);t.each((function(t){var i=n.select(this),a=r.selectedTextColorFn(t),o=t.tp||e.textposition,s=O(t,e);u.fill(i,a);var c=l.traceIs(e,"bar-like");P(i,o,s,t.mrc2||t.mrc,c)}))}},x.smoothopen=function(t,e){if(t.length<3)return"M"+t.join("L");var r,n="M"+t[0],i=[];for(r=1;r<t.length-1;r++)i.push(R(t[r-1],t[r],t[r+1],e));for(n+="Q"+i[0][0]+" "+t[1],r=2;r<t.length-1;r++)n+="C"+i[r-2][1]+" "+i[r-1][0]+" "+t[r];return n+"Q"+i[t.length-3][1]+" "+t[t.length-1]},x.smoothclosed=function(t,e){if(t.length<3)return"M"+t.join("L")+"Z";var r,n="M"+t[0],i=t.length-1,a=[R(t[i],t[0],t[1],e)];for(r=1;r<i;r++)a.push(R(t[r-1],t[r],t[r+1],e));for(a.push(R(t[i-1],t[i],t[0],e)),r=1;r<=i;r++)n+="C"+a[r-1][1]+" "+a[r][0]+" "+t[r];return n+"C"+a[i][1]+" "+a[0][0]+" "+t[0]+"Z"};var F={hv:function(t,e,r){return"H"+D(e[0])+"V"+I(e,1,r)},vh:function(t,e,r){return"V"+z(e[1])+"H"+I(e,0,r)},hvh:function(t,e,r){return"H"+D((t[0]+e[0])/2)+"V"+z(e[1])+"H"+I(e,0,r)},vhv:function(t,e,r){return"V"+z((t[1]+e[1])/2)+"H"+D(e[0])+"V"+I(e,1,r)}},B=function(t,e,r){return"L"+I(e,0,r)+","+I(e,1,r)};function N(t,e){var r=t.backoff,n=t.trace,a=t.d,o=t.i;if(r&&n&&n.marker&&n.marker.angle%360==0&&n.line&&"spline"!==n.line.shape){var s=i.isArrayOrTypedArray(r),l=t,u=e?e[0]:E||0,c=e?e[1]:L||0,f=l[0],h=l[1],p=f-u,d=h-c,v=Math.atan2(d,p),g=s?r[o]:r;if("auto"===g){var y=l.i;"scatter"===n.type&&y--;var m=l.marker,b=m.symbol;i.isArrayOrTypedArray(b)&&(b=b[y]);var _=m.size;i.isArrayOrTypedArray(_)&&(_=_[y]),g=m?x.symbolBackOffs[x.symbolNumber(b)]*_:0,g+=x.getMarkerStandoff(a[y],n)||0}var w=f-g*Math.cos(v),T=h-g*Math.sin(v);(w<=f&&w>=u||w>=f&&w<=u)&&(T<=h&&T>=c||T>=h&&T<=c)&&(t=[w,T])}return t}x.steps=function(t){var e=F[t]||B;return function(t){for(var r="M"+D(t[0][0])+","+z(t[0][1]),n=t.length,i=1;i<n;i++)r+=e(t[i-1],t[i],i===n-1);return r}},x.applyBackoff=N,x.makeTester=function(){var t=i.ensureSingleById(n.select("body"),"svg","js-plotly-tester",(function(t){t.attr(p.svgAttrs).style({position:"absolute",left:"-10000px",top:"-10000px",width:"9000px",height:"9000px","z-index":"1"})})),e=i.ensureSingle(t,"path","js-reference-point",(function(t){t.attr("d","M0,0H1V1H0Z").style({"stroke-width":0,fill:"black"})}));x.tester=t,x.testref=e},x.savedBBoxes={};var j=0;function U(t){var e=t.getAttribute("data-unformatted");if(null!==e)return e+t.getAttribute("data-math")+t.getAttribute("text-anchor")+t.getAttribute("style")}function V(t,e){if(!t)return null;var r=e._context,n=r._exportedPlot?"":r._baseUrl||"";return n?"url('"+n+"#"+t+"')":"url(#"+t+")"}x.bBox=function(t,e,r){var a,o,s;if(r||(r=U(t)),r){if(a=x.savedBBoxes[r])return i.extendFlat({},a)}else if(1===t.childNodes.length){var l=t.childNodes[0];if(r=U(l)){var u=+l.getAttribute("x")||0,c=+l.getAttribute("y")||0,f=l.getAttribute("transform");if(!f){var p=x.bBox(l,!1,r);return u&&(p.left+=u,p.right+=u),c&&(p.top+=c,p.bottom+=c),p}if(r+="~"+u+"~"+c+"~"+f,a=x.savedBBoxes[r])return i.extendFlat({},a)}}e?o=t:(s=x.tester.node(),o=t.cloneNode(!0),s.appendChild(o)),n.select(o).attr("transform",null).call(h.positionText,0,0);var d=o.getBoundingClientRect(),v=x.testref.node().getBoundingClientRect();e||s.removeChild(o);var g={height:d.height,width:d.width,left:d.left-v.left,top:d.top-v.top,right:d.right-v.left,bottom:d.bottom-v.top};return j>=1e4&&(x.savedBBoxes={},j=0),r&&(x.savedBBoxes[r]=g),j++,i.extendFlat({},g)},x.setClipUrl=function(t,e,r){t.attr("clip-path",V(e,r))},x.getTranslate=function(t){var e=(t[t.attr?"attr":"getAttribute"]("transform")||"").replace(/.*\btranslate\((-?\d*\.?\d*)[^-\d]*(-?\d*\.?\d*)[^\d].*/,(function(t,e,r){return[e,r].join(" ")})).split(" ");return{x:+e[0]||0,y:+e[1]||0}},x.setTranslate=function(t,e,r){var n=t.attr?"attr":"getAttribute",i=t.attr?"attr":"setAttribute",a=t[n]("transform")||"";return e=e||0,r=r||0,a=a.replace(/(\btranslate\(.*?\);?)/,"").trim(),a=(a+=f(e,r)).trim(),t[i]("transform",a),a},x.getScale=function(t){var e=(t[t.attr?"attr":"getAttribute"]("transform")||"").replace(/.*\bscale\((\d*\.?\d*)[^\d]*(\d*\.?\d*)[^\d].*/,(function(t,e,r){return[e,r].join(" ")})).split(" ");return{x:+e[0]||1,y:+e[1]||1}},x.setScale=function(t,e,r){var n=t.attr?"attr":"getAttribute",i=t.attr?"attr":"setAttribute",a=t[n]("transform")||"";return e=e||1,r=r||1,a=a.replace(/(\bscale\(.*?\);?)/,"").trim(),a=(a+="scale("+e+","+r+")").trim(),t[i]("transform",a),a};var H=/\s*sc.*/;x.setPointGroupScale=function(t,e,r){if(e=e||1,r=r||1,t){var n=1===e&&1===r?"":"scale("+e+","+r+")";t.each((function(){var t=(this.getAttribute("transform")||"").replace(H,"");t=(t+=n).trim(),this.setAttribute("transform",t)}))}};var q=/translate\([^)]*\)\s*$/;function G(t,e){var r;return t&&(r=t.mf),void 0===r&&(r=e.marker&&e.marker.standoff||0),e._geo||e._xA?r:-r}x.setTextPointsScale=function(t,e,r){t&&t.each((function(){var t,i=n.select(this),a=i.select("text");if(a.node()){var o=parseFloat(a.attr("x")||0),s=parseFloat(a.attr("y")||0),l=(i.attr("transform")||"").match(q);t=1===e&&1===r?[]:[f(o,s),"scale("+e+","+r+")",f(-o,-s)],l&&t.push(l),i.attr("transform",t.join(""))}}))},x.getMarkerStandoff=G;var Z,Y,W,X,J,K,$=Math.atan2,Q=Math.cos,tt=Math.sin;function et(t,e){var r=e[0],n=e[1];return[r*Q(t)-n*tt(t),r*tt(t)+n*Q(t)]}function rt(t,e){var r,n,i=t.ma;void 0===i&&(i=e.marker.angle||0);var a=e.marker.angleref;if("previous"===a||"north"===a){if(e._geo){var s=e._geo.project(t.lonlat);r=s[0],n=s[1]}else{var l=e._xA,u=e._yA;if(!l||!u)return 90;r=l.c2p(t.x),n=u.c2p(t.y)}if(e._geo){var c,f=t.lonlat[0],h=t.lonlat[1],p=e._geo.project([f,h+1e-5]),d=e._geo.project([f+1e-5,h]),v=$(d[1]-n,d[0]-r),g=$(p[1]-n,p[0]-r);if("north"===a)c=i/180*Math.PI;else if("previous"===a){var y=f/180*Math.PI,m=h/180*Math.PI,x=Z/180*Math.PI,b=Y/180*Math.PI,_=x-y,w=Q(b)*tt(_),T=tt(b)*Q(m)-Q(b)*tt(m)*Q(_);c=-$(w,T)-Math.PI,Z=f,Y=h}var k=et(v,[Q(c),0]),A=et(g,[tt(c),0]);i=$(k[1]+A[1],k[0]+A[0])/Math.PI*180,"previous"!==a||K===e.uid&&t.i===J+1||(i=null)}if("previous"===a&&!e._geo)if(K===e.uid&&t.i===J+1&&o(r)&&o(n)){var M=r-W,S=n-X,E=e.line&&e.line.shape||"",L=E.slice(E.length-1);"h"===L&&(S=0),"v"===L&&(M=0),i+=$(S,M)/Math.PI*180+90}else i=null}return W=r,X=n,J=t.i,K=e.uid,i}x.getMarkerAngle=rt},90998:function(t,e,r){"use strict";var n,i,a,o,s=r(95616),l=r(39898).round,u="M0,0Z",c=Math.sqrt(2),f=Math.sqrt(3),h=Math.PI,p=Math.cos,d=Math.sin;function v(t){return null===t}function g(t,e,r){if(!(t&&t%360!=0||e))return r;if(a===t&&o===e&&n===r)return i;function l(t,r){var n=p(t),i=d(t),a=r[0],o=r[1]+(e||0);return[a*n-o*i,a*i+o*n]}a=t,o=e,n=r;for(var u=t/180*h,c=0,f=0,v=s(r),g="",y=0;y<v.length;y++){var m=v[y],x=m[0],b=c,_=f;if("M"===x||"L"===x)c=+m[1],f=+m[2];else if("m"===x||"l"===x)c+=+m[1],f+=+m[2];else if("H"===x)c=+m[1];else if("h"===x)c+=+m[1];else if("V"===x)f=+m[1];else if("v"===x)f+=+m[1];else if("A"===x){c=+m[1],f=+m[2];var w=l(u,[+m[6],+m[7]]);m[6]=w[0],m[7]=w[1],m[3]=+m[3]+t}"H"!==x&&"V"!==x||(x="L"),"h"!==x&&"v"!==x||(x="l"),"m"!==x&&"l"!==x||(c-=b,f-=_);var T=l(u,[c,f]);"H"!==x&&"V"!==x||(x="L"),"M"!==x&&"L"!==x&&"m"!==x&&"l"!==x||(m[1]=T[0],m[2]=T[1]),m[0]=x,g+=m[0]+m.slice(1).join(",")}return i=g,g}t.exports={circle:{n:0,f:function(t,e,r){if(v(e))return u;var n=l(t,2),i="M"+n+",0A"+n+","+n+" 0 1,1 0,-"+n+"A"+n+","+n+" 0 0,1 "+n+",0Z";return r?g(e,r,i):i}},square:{n:1,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,"M"+n+","+n+"H-"+n+"V-"+n+"H"+n+"Z")}},diamond:{n:2,f:function(t,e,r){if(v(e))return u;var n=l(1.3*t,2);return g(e,r,"M"+n+",0L0,"+n+"L-"+n+",0L0,-"+n+"Z")}},cross:{n:3,f:function(t,e,r){if(v(e))return u;var n=l(.4*t,2),i=l(1.2*t,2);return g(e,r,"M"+i+","+n+"H"+n+"V"+i+"H-"+n+"V"+n+"H-"+i+"V-"+n+"H-"+n+"V-"+i+"H"+n+"V-"+n+"H"+i+"Z")}},x:{n:4,f:function(t,e,r){if(v(e))return u;var n=l(.8*t/c,2),i="l"+n+","+n,a="l"+n+",-"+n,o="l-"+n+",-"+n,s="l-"+n+","+n;return g(e,r,"M0,"+n+i+a+o+a+o+s+o+s+i+s+i+"Z")}},"triangle-up":{n:5,f:function(t,e,r){if(v(e))return u;var n=l(2*t/f,2);return g(e,r,"M-"+n+","+l(t/2,2)+"H"+n+"L0,-"+l(t,2)+"Z")}},"triangle-down":{n:6,f:function(t,e,r){if(v(e))return u;var n=l(2*t/f,2);return g(e,r,"M-"+n+",-"+l(t/2,2)+"H"+n+"L0,"+l(t,2)+"Z")}},"triangle-left":{n:7,f:function(t,e,r){if(v(e))return u;var n=l(2*t/f,2);return g(e,r,"M"+l(t/2,2)+",-"+n+"V"+n+"L-"+l(t,2)+",0Z")}},"triangle-right":{n:8,f:function(t,e,r){if(v(e))return u;var n=l(2*t/f,2);return g(e,r,"M-"+l(t/2,2)+",-"+n+"V"+n+"L"+l(t,2)+",0Z")}},"triangle-ne":{n:9,f:function(t,e,r){if(v(e))return u;var n=l(.6*t,2),i=l(1.2*t,2);return g(e,r,"M-"+i+",-"+n+"H"+n+"V"+i+"Z")}},"triangle-se":{n:10,f:function(t,e,r){if(v(e))return u;var n=l(.6*t,2),i=l(1.2*t,2);return g(e,r,"M"+n+",-"+i+"V"+n+"H-"+i+"Z")}},"triangle-sw":{n:11,f:function(t,e,r){if(v(e))return u;var n=l(.6*t,2),i=l(1.2*t,2);return g(e,r,"M"+i+","+n+"H-"+n+"V-"+i+"Z")}},"triangle-nw":{n:12,f:function(t,e,r){if(v(e))return u;var n=l(.6*t,2),i=l(1.2*t,2);return g(e,r,"M-"+n+","+i+"V-"+n+"H"+i+"Z")}},pentagon:{n:13,f:function(t,e,r){if(v(e))return u;var n=l(.951*t,2),i=l(.588*t,2),a=l(-t,2),o=l(-.309*t,2);return g(e,r,"M"+n+","+o+"L"+i+","+l(.809*t,2)+"H-"+i+"L-"+n+","+o+"L0,"+a+"Z")}},hexagon:{n:14,f:function(t,e,r){if(v(e))return u;var n=l(t,2),i=l(t/2,2),a=l(t*f/2,2);return g(e,r,"M"+a+",-"+i+"V"+i+"L0,"+n+"L-"+a+","+i+"V-"+i+"L0,-"+n+"Z")}},hexagon2:{n:15,f:function(t,e,r){if(v(e))return u;var n=l(t,2),i=l(t/2,2),a=l(t*f/2,2);return g(e,r,"M-"+i+","+a+"H"+i+"L"+n+",0L"+i+",-"+a+"H-"+i+"L-"+n+",0Z")}},octagon:{n:16,f:function(t,e,r){if(v(e))return u;var n=l(.924*t,2),i=l(.383*t,2);return g(e,r,"M-"+i+",-"+n+"H"+i+"L"+n+",-"+i+"V"+i+"L"+i+","+n+"H-"+i+"L-"+n+","+i+"V-"+i+"Z")}},star:{n:17,f:function(t,e,r){if(v(e))return u;var n=1.4*t,i=l(.225*n,2),a=l(.951*n,2),o=l(.363*n,2),s=l(.588*n,2),c=l(-n,2),f=l(-.309*n,2),h=l(.118*n,2),p=l(.809*n,2);return g(e,r,"M"+i+","+f+"H"+a+"L"+o+","+h+"L"+s+","+p+"L0,"+l(.382*n,2)+"L-"+s+","+p+"L-"+o+","+h+"L-"+a+","+f+"H-"+i+"L0,"+c+"Z")}},hexagram:{n:18,f:function(t,e,r){if(v(e))return u;var n=l(.66*t,2),i=l(.38*t,2),a=l(.76*t,2);return g(e,r,"M-"+a+",0l-"+i+",-"+n+"h"+a+"l"+i+",-"+n+"l"+i+","+n+"h"+a+"l-"+i+","+n+"l"+i+","+n+"h-"+a+"l-"+i+","+n+"l-"+i+",-"+n+"h-"+a+"Z")}},"star-triangle-up":{n:19,f:function(t,e,r){if(v(e))return u;var n=l(t*f*.8,2),i=l(.8*t,2),a=l(1.6*t,2),o=l(4*t,2),s="A "+o+","+o+" 0 0 1 ";return g(e,r,"M-"+n+","+i+s+n+","+i+s+"0,-"+a+s+"-"+n+","+i+"Z")}},"star-triangle-down":{n:20,f:function(t,e,r){if(v(e))return u;var n=l(t*f*.8,2),i=l(.8*t,2),a=l(1.6*t,2),o=l(4*t,2),s="A "+o+","+o+" 0 0 1 ";return g(e,r,"M"+n+",-"+i+s+"-"+n+",-"+i+s+"0,"+a+s+n+",-"+i+"Z")}},"star-square":{n:21,f:function(t,e,r){if(v(e))return u;var n=l(1.1*t,2),i=l(2*t,2),a="A "+i+","+i+" 0 0 1 ";return g(e,r,"M-"+n+",-"+n+a+"-"+n+","+n+a+n+","+n+a+n+",-"+n+a+"-"+n+",-"+n+"Z")}},"star-diamond":{n:22,f:function(t,e,r){if(v(e))return u;var n=l(1.4*t,2),i=l(1.9*t,2),a="A "+i+","+i+" 0 0 1 ";return g(e,r,"M-"+n+",0"+a+"0,"+n+a+n+",0"+a+"0,-"+n+a+"-"+n+",0Z")}},"diamond-tall":{n:23,f:function(t,e,r){if(v(e))return u;var n=l(.7*t,2),i=l(1.4*t,2);return g(e,r,"M0,"+i+"L"+n+",0L0,-"+i+"L-"+n+",0Z")}},"diamond-wide":{n:24,f:function(t,e,r){if(v(e))return u;var n=l(1.4*t,2),i=l(.7*t,2);return g(e,r,"M0,"+i+"L"+n+",0L0,-"+i+"L-"+n+",0Z")}},hourglass:{n:25,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,"M"+n+","+n+"H-"+n+"L"+n+",-"+n+"H-"+n+"Z")},noDot:!0},bowtie:{n:26,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,"M"+n+","+n+"V-"+n+"L-"+n+","+n+"V-"+n+"Z")},noDot:!0},"circle-cross":{n:27,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,"M0,"+n+"V-"+n+"M"+n+",0H-"+n+"M"+n+",0A"+n+","+n+" 0 1,1 0,-"+n+"A"+n+","+n+" 0 0,1 "+n+",0Z")},needLine:!0,noDot:!0},"circle-x":{n:28,f:function(t,e,r){if(v(e))return u;var n=l(t,2),i=l(t/c,2);return g(e,r,"M"+i+","+i+"L-"+i+",-"+i+"M"+i+",-"+i+"L-"+i+","+i+"M"+n+",0A"+n+","+n+" 0 1,1 0,-"+n+"A"+n+","+n+" 0 0,1 "+n+",0Z")},needLine:!0,noDot:!0},"square-cross":{n:29,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,"M0,"+n+"V-"+n+"M"+n+",0H-"+n+"M"+n+","+n+"H-"+n+"V-"+n+"H"+n+"Z")},needLine:!0,noDot:!0},"square-x":{n:30,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,"M"+n+","+n+"L-"+n+",-"+n+"M"+n+",-"+n+"L-"+n+","+n+"M"+n+","+n+"H-"+n+"V-"+n+"H"+n+"Z")},needLine:!0,noDot:!0},"diamond-cross":{n:31,f:function(t,e,r){if(v(e))return u;var n=l(1.3*t,2);return g(e,r,"M"+n+",0L0,"+n+"L-"+n+",0L0,-"+n+"ZM0,-"+n+"V"+n+"M-"+n+",0H"+n)},needLine:!0,noDot:!0},"diamond-x":{n:32,f:function(t,e,r){if(v(e))return u;var n=l(1.3*t,2),i=l(.65*t,2);return g(e,r,"M"+n+",0L0,"+n+"L-"+n+",0L0,-"+n+"ZM-"+i+",-"+i+"L"+i+","+i+"M-"+i+","+i+"L"+i+",-"+i)},needLine:!0,noDot:!0},"cross-thin":{n:33,f:function(t,e,r){if(v(e))return u;var n=l(1.4*t,2);return g(e,r,"M0,"+n+"V-"+n+"M"+n+",0H-"+n)},needLine:!0,noDot:!0,noFill:!0},"x-thin":{n:34,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,"M"+n+","+n+"L-"+n+",-"+n+"M"+n+",-"+n+"L-"+n+","+n)},needLine:!0,noDot:!0,noFill:!0},asterisk:{n:35,f:function(t,e,r){if(v(e))return u;var n=l(1.2*t,2),i=l(.85*t,2);return g(e,r,"M0,"+n+"V-"+n+"M"+n+",0H-"+n+"M"+i+","+i+"L-"+i+",-"+i+"M"+i+",-"+i+"L-"+i+","+i)},needLine:!0,noDot:!0,noFill:!0},hash:{n:36,f:function(t,e,r){if(v(e))return u;var n=l(t/2,2),i=l(t,2);return g(e,r,"M"+n+","+i+"V-"+i+"M"+(n-i)+",-"+i+"V"+i+"M"+i+","+n+"H-"+i+"M-"+i+","+(n-i)+"H"+i)},needLine:!0,noFill:!0},"y-up":{n:37,f:function(t,e,r){if(v(e))return u;var n=l(1.2*t,2),i=l(1.6*t,2),a=l(.8*t,2);return g(e,r,"M-"+n+","+a+"L0,0M"+n+","+a+"L0,0M0,-"+i+"L0,0")},needLine:!0,noDot:!0,noFill:!0},"y-down":{n:38,f:function(t,e,r){if(v(e))return u;var n=l(1.2*t,2),i=l(1.6*t,2),a=l(.8*t,2);return g(e,r,"M-"+n+",-"+a+"L0,0M"+n+",-"+a+"L0,0M0,"+i+"L0,0")},needLine:!0,noDot:!0,noFill:!0},"y-left":{n:39,f:function(t,e,r){if(v(e))return u;var n=l(1.2*t,2),i=l(1.6*t,2),a=l(.8*t,2);return g(e,r,"M"+a+","+n+"L0,0M"+a+",-"+n+"L0,0M-"+i+",0L0,0")},needLine:!0,noDot:!0,noFill:!0},"y-right":{n:40,f:function(t,e,r){if(v(e))return u;var n=l(1.2*t,2),i=l(1.6*t,2),a=l(.8*t,2);return g(e,r,"M-"+a+","+n+"L0,0M-"+a+",-"+n+"L0,0M"+i+",0L0,0")},needLine:!0,noDot:!0,noFill:!0},"line-ew":{n:41,f:function(t,e,r){if(v(e))return u;var n=l(1.4*t,2);return g(e,r,"M"+n+",0H-"+n)},needLine:!0,noDot:!0,noFill:!0},"line-ns":{n:42,f:function(t,e,r){if(v(e))return u;var n=l(1.4*t,2);return g(e,r,"M0,"+n+"V-"+n)},needLine:!0,noDot:!0,noFill:!0},"line-ne":{n:43,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,"M"+n+",-"+n+"L-"+n+","+n)},needLine:!0,noDot:!0,noFill:!0},"line-nw":{n:44,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,"M"+n+","+n+"L-"+n+",-"+n)},needLine:!0,noDot:!0,noFill:!0},"arrow-up":{n:45,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,"M0,0L-"+n+","+l(2*t,2)+"H"+n+"Z")},backoff:1,noDot:!0},"arrow-down":{n:46,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,"M0,0L-"+n+",-"+l(2*t,2)+"H"+n+"Z")},noDot:!0},"arrow-left":{n:47,f:function(t,e,r){if(v(e))return u;var n=l(2*t,2),i=l(t,2);return g(e,r,"M0,0L"+n+",-"+i+"V"+i+"Z")},noDot:!0},"arrow-right":{n:48,f:function(t,e,r){if(v(e))return u;var n=l(2*t,2),i=l(t,2);return g(e,r,"M0,0L-"+n+",-"+i+"V"+i+"Z")},noDot:!0},"arrow-bar-up":{n:49,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,"M-"+n+",0H"+n+"M0,0L-"+n+","+l(2*t,2)+"H"+n+"Z")},backoff:1,needLine:!0,noDot:!0},"arrow-bar-down":{n:50,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,"M-"+n+",0H"+n+"M0,0L-"+n+",-"+l(2*t,2)+"H"+n+"Z")},needLine:!0,noDot:!0},"arrow-bar-left":{n:51,f:function(t,e,r){if(v(e))return u;var n=l(2*t,2),i=l(t,2);return g(e,r,"M0,-"+i+"V"+i+"M0,0L"+n+",-"+i+"V"+i+"Z")},needLine:!0,noDot:!0},"arrow-bar-right":{n:52,f:function(t,e,r){if(v(e))return u;var n=l(2*t,2),i=l(t,2);return g(e,r,"M0,-"+i+"V"+i+"M0,0L-"+n+",-"+i+"V"+i+"Z")},needLine:!0,noDot:!0},arrow:{n:53,f:function(t,e,r){if(v(e))return u;var n=h/2.5,i=2*t*p(n),a=2*t*d(n);return g(e,r,"M0,0L"+-i+","+a+"L"+i+","+a+"Z")},backoff:.9,noDot:!0},"arrow-wide":{n:54,f:function(t,e,r){if(v(e))return u;var n=h/4,i=2*t*p(n),a=2*t*d(n);return g(e,r,"M0,0L"+-i+","+a+"A "+2*t+","+2*t+" 0 0 1 "+i+","+a+"Z")},backoff:.4,noDot:!0}}},25673:function(t){"use strict";t.exports={visible:{valType:"boolean",editType:"calc"},type:{valType:"enumerated",values:["percent","constant","sqrt","data"],editType:"calc"},symmetric:{valType:"boolean",editType:"calc"},array:{valType:"data_array",editType:"calc"},arrayminus:{valType:"data_array",editType:"calc"},value:{valType:"number",min:0,dflt:10,editType:"calc"},valueminus:{valType:"number",min:0,dflt:10,editType:"calc"},traceref:{valType:"integer",min:0,dflt:0,editType:"style"},tracerefminus:{valType:"integer",min:0,dflt:0,editType:"style"},copy_ystyle:{valType:"boolean",editType:"plot"},copy_zstyle:{valType:"boolean",editType:"style"},color:{valType:"color",editType:"style"},thickness:{valType:"number",min:0,dflt:2,editType:"style"},width:{valType:"number",min:0,editType:"plot"},editType:"calc",_deprecated:{opacity:{valType:"number",editType:"style"}}}},84532:function(t,e,r){"use strict";var n=r(92770),i=r(73972),a=r(89298),o=r(71828),s=r(45827);function l(t,e,r,i){var l=e["error_"+i]||{},u=[];if(l.visible&&-1!==["linear","log"].indexOf(r.type)){for(var c=s(l),f=0;f<t.length;f++){var h=t[f],p=h.i;if(void 0===p)p=f;else if(null===p)continue;var d=h[i];if(n(r.c2l(d))){var v=c(d,p);if(n(v[0])&&n(v[1])){var g=h[i+"s"]=d-v[0],y=h[i+"h"]=d+v[1];u.push(g,y)}}}var m=r._id,x=e._extremes[m],b=a.findExtremes(r,u,o.extendFlat({tozero:x.opts.tozero},{padded:!0}));x.min=x.min.concat(b.min),x.max=x.max.concat(b.max)}}t.exports=function(t){for(var e=t.calcdata,r=0;r<e.length;r++){var n=e[r],o=n[0].trace;if(!0===o.visible&&i.traceIs(o,"errorBarsOK")){var s=a.getFromId(t,o.xaxis),u=a.getFromId(t,o.yaxis);l(n,o,s,"x"),l(n,o,u,"y")}}}},45827:function(t){"use strict";function e(t,e){return"percent"===t?function(t){return Math.abs(t*e/100)}:"constant"===t?function(){return Math.abs(e)}:"sqrt"===t?function(t){return Math.sqrt(Math.abs(t))}:void 0}t.exports=function(t){var r=t.type,n=t.symmetric;if("data"===r){var i=t.array||[];if(n)return function(t,e){var r=+i[e];return[r,r]};var a=t.arrayminus||[];return function(t,e){var r=+i[e],n=+a[e];return isNaN(r)&&isNaN(n)?[NaN,NaN]:[n||0,r||0]}}var o=e(r,t.value),s=e(r,t.valueminus);return n||void 0===t.valueminus?function(t){var e=o(t);return[e,e]}:function(t){return[s(t),o(t)]}}},97587:function(t,e,r){"use strict";var n=r(92770),i=r(73972),a=r(71828),o=r(44467),s=r(25673);t.exports=function(t,e,r,l){var u="error_"+l.axis,c=o.newContainer(e,u),f=t[u]||{};function h(t,e){return a.coerce(f,c,s,t,e)}if(!1!==h("visible",void 0!==f.array||void 0!==f.value||"sqrt"===f.type)){var p=h("type","array"in f?"data":"percent"),d=!0;"sqrt"!==p&&(d=h("symmetric",!(("data"===p?"arrayminus":"valueminus")in f))),"data"===p?(h("array"),h("traceref"),d||(h("arrayminus"),h("tracerefminus"))):"percent"!==p&&"constant"!==p||(h("value"),d||h("valueminus"));var v="copy_"+l.inherit+"style";l.inherit&&(e["error_"+l.inherit]||{}).visible&&h(v,!(f.color||n(f.thickness)||n(f.width))),l.inherit&&c[v]||(h("color",r),h("thickness"),h("width",i.traceIs(e,"gl3d")?0:4))}}},37369:function(t,e,r){"use strict";var n=r(71828),i=r(30962).overrideAll,a=r(25673),o={error_x:n.extendFlat({},a),error_y:n.extendFlat({},a)};delete o.error_x.copy_zstyle,delete o.error_y.copy_zstyle,delete o.error_y.copy_ystyle;var s={error_x:n.extendFlat({},a),error_y:n.extendFlat({},a),error_z:n.extendFlat({},a)};delete s.error_x.copy_ystyle,delete s.error_y.copy_ystyle,delete s.error_z.copy_ystyle,delete s.error_z.copy_zstyle,t.exports={moduleType:"component",name:"errorbars",schema:{traces:{scatter:o,bar:o,histogram:o,scatter3d:i(s,"calc","nested"),scattergl:i(o,"calc","nested")}},supplyDefaults:r(97587),calc:r(84532),makeComputeError:r(45827),plot:r(19398),style:r(62662),hoverInfo:function(t,e,r){(e.error_y||{}).visible&&(r.yerr=t.yh-t.y,e.error_y.symmetric||(r.yerrneg=t.y-t.ys)),(e.error_x||{}).visible&&(r.xerr=t.xh-t.x,e.error_x.symmetric||(r.xerrneg=t.x-t.xs))}}},19398:function(t,e,r){"use strict";var n=r(39898),i=r(92770),a=r(91424),o=r(34098);t.exports=function(t,e,r,s){var l=r.xaxis,u=r.yaxis,c=s&&s.duration>0,f=t._context.staticPlot;e.each((function(e){var h,p=e[0].trace,d=p.error_x||{},v=p.error_y||{};p.ids&&(h=function(t){return t.id});var g=o.hasMarkers(p)&&p.marker.maxdisplayed>0;v.visible||d.visible||(e=[]);var y=n.select(this).selectAll("g.errorbar").data(e,h);if(y.exit().remove(),e.length){d.visible||y.selectAll("path.xerror").remove(),v.visible||y.selectAll("path.yerror").remove(),y.style("opacity",1);var m=y.enter().append("g").classed("errorbar",!0);c&&m.style("opacity",0).transition().duration(s.duration).style("opacity",1),a.setClipUrl(y,r.layerClipId,t),y.each((function(t){var e=n.select(this),r=function(t,e,r){var n={x:e.c2p(t.x),y:r.c2p(t.y)};return void 0!==t.yh&&(n.yh=r.c2p(t.yh),n.ys=r.c2p(t.ys),i(n.ys)||(n.noYS=!0,n.ys=r.c2p(t.ys,!0))),void 0!==t.xh&&(n.xh=e.c2p(t.xh),n.xs=e.c2p(t.xs),i(n.xs)||(n.noXS=!0,n.xs=e.c2p(t.xs,!0))),n}(t,l,u);if(!g||t.vis){var a,o=e.select("path.yerror");if(v.visible&&i(r.x)&&i(r.yh)&&i(r.ys)){var h=v.width;a="M"+(r.x-h)+","+r.yh+"h"+2*h+"m-"+h+",0V"+r.ys,r.noYS||(a+="m-"+h+",0h"+2*h),o.size()?c&&(o=o.transition().duration(s.duration).ease(s.easing)):o=e.append("path").style("vector-effect",f?"none":"non-scaling-stroke").classed("yerror",!0),o.attr("d",a)}else o.remove();var p=e.select("path.xerror");if(d.visible&&i(r.y)&&i(r.xh)&&i(r.xs)){var y=(d.copy_ystyle?v:d).width;a="M"+r.xh+","+(r.y-y)+"v"+2*y+"m0,-"+y+"H"+r.xs,r.noXS||(a+="m0,-"+y+"v"+2*y),p.size()?c&&(p=p.transition().duration(s.duration).ease(s.easing)):p=e.append("path").style("vector-effect",f?"none":"non-scaling-stroke").classed("xerror",!0),p.attr("d",a)}else p.remove()}}))}}))}},62662:function(t,e,r){"use strict";var n=r(39898),i=r(7901);t.exports=function(t){t.each((function(t){var e=t[0].trace,r=e.error_y||{},a=e.error_x||{},o=n.select(this);o.selectAll("path.yerror").style("stroke-width",r.thickness+"px").call(i.stroke,r.color),a.copy_ystyle&&(a=r),o.selectAll("path.xerror").style("stroke-width",a.thickness+"px").call(i.stroke,a.color)}))}},77914:function(t,e,r){"use strict";var n=r(41940),i=r(528).hoverlabel,a=r(1426).extendFlat;t.exports={hoverlabel:{bgcolor:a({},i.bgcolor,{arrayOk:!0}),bordercolor:a({},i.bordercolor,{arrayOk:!0}),font:n({arrayOk:!0,editType:"none"}),align:a({},i.align,{arrayOk:!0}),namelength:a({},i.namelength,{arrayOk:!0}),editType:"none"}}},30732:function(t,e,r){"use strict";var n=r(71828),i=r(73972);function a(t,e,r,i){i=i||n.identity,Array.isArray(t)&&(e[0][r]=i(t))}t.exports=function(t){var e=t.calcdata,r=t._fullLayout;function o(t){return function(e){return n.coerceHoverinfo({hoverinfo:e},{_module:t._module},r)}}for(var s=0;s<e.length;s++){var l=e[s],u=l[0].trace;if(!i.traceIs(u,"pie-like")){var c=i.traceIs(u,"2dMap")?a:n.fillArray;c(u.hoverinfo,l,"hi",o(u)),u.hovertemplate&&c(u.hovertemplate,l,"ht"),u.hoverlabel&&(c(u.hoverlabel.bgcolor,l,"hbg"),c(u.hoverlabel.bordercolor,l,"hbc"),c(u.hoverlabel.font.size,l,"hts"),c(u.hoverlabel.font.color,l,"htc"),c(u.hoverlabel.font.family,l,"htf"),c(u.hoverlabel.namelength,l,"hnl"),c(u.hoverlabel.align,l,"hta"))}}}},75914:function(t,e,r){"use strict";var n=r(73972),i=r(88335).hover;t.exports=function(t,e,r){var a=n.getComponentMethod("annotations","onClick")(t,t._hoverdata);function o(){t.emit("plotly_click",{points:t._hoverdata,event:e})}void 0!==r&&i(t,e,r,!0),t._hoverdata&&e&&e.target&&(a&&a.then?a.then(o):o(),e.stopImmediatePropagation&&e.stopImmediatePropagation())}},26675:function(t){"use strict";t.exports={YANGLE:60,HOVERARROWSIZE:6,HOVERTEXTPAD:3,HOVERFONTSIZE:13,HOVERFONT:"Arial, sans-serif",HOVERMINTIME:50,HOVERID:"-hover"}},54268:function(t,e,r){"use strict";var n=r(71828),i=r(77914),a=r(38048);t.exports=function(t,e,r,o){var s=n.extendFlat({},o.hoverlabel);e.hovertemplate&&(s.namelength=-1),a(t,e,(function(r,a){return n.coerce(t,e,i,r,a)}),s)}},23469:function(t,e,r){"use strict";var n=r(71828);e.getSubplot=function(t){return t.subplot||t.xaxis+t.yaxis||t.geo},e.isTraceInSubplots=function(t,r){if("splom"===t.type){for(var n=t.xaxes||[],i=t.yaxes||[],a=0;a<n.length;a++)for(var o=0;o<i.length;o++)if(-1!==r.indexOf(n[a]+i[o]))return!0;return!1}return-1!==r.indexOf(e.getSubplot(t))},e.flat=function(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)r[n]=e;return r},e.p2c=function(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)r[n]=t[n].p2c(e);return r},e.getDistanceFunction=function(t,r,n,i){return"closest"===t?i||e.quadrature(r,n):"x"===t.charAt(0)?r:n},e.getClosest=function(t,e,r){if(!1!==r.index)r.index>=0&&r.index<t.length?r.distance=0:r.index=!1;else for(var n=0;n<t.length;n++){var i=e(t[n]);i<=r.distance&&(r.index=n,r.distance=i)}return r},e.inbox=function(t,e,r){return t*e<0||0===t?r:1/0},e.quadrature=function(t,e){return function(r){var n=t(r),i=e(r);return Math.sqrt(n*n+i*i)}},e.makeEventData=function(t,r,n){var i="index"in t?t.index:t.pointNumber,a={data:r._input,fullData:r,curveNumber:r.index,pointNumber:i};if(r._indexToPoints){var o=r._indexToPoints[i];1===o.length?a.pointIndex=o[0]:a.pointIndices=o}else a.pointIndex=i;return r._module.eventData?a=r._module.eventData(a,t,r,n,i):("xVal"in t?a.x=t.xVal:"x"in t&&(a.x=t.x),"yVal"in t?a.y=t.yVal:"y"in t&&(a.y=t.y),t.xa&&(a.xaxis=t.xa),t.ya&&(a.yaxis=t.ya),void 0!==t.zLabelVal&&(a.z=t.zLabelVal)),e.appendArrayPointValue(a,r,i),a},e.appendArrayPointValue=function(t,e,r){var i=e._arrayAttrs;if(i)for(var s=0;s<i.length;s++){var l=i[s],u=a(l);if(void 0===t[u]){var c=o(n.nestedProperty(e,l).get(),r);void 0!==c&&(t[u]=c)}}},e.appendArrayMultiPointValues=function(t,e,r){var i=e._arrayAttrs;if(i)for(var s=0;s<i.length;s++){var l=i[s],u=a(l);if(void 0===t[u]){for(var c=n.nestedProperty(e,l).get(),f=new Array(r.length),h=0;h<r.length;h++)f[h]=o(c,r[h]);t[u]=f}}};var i={ids:"id",locations:"location",labels:"label",values:"value","marker.colors":"color",parents:"parent"};function a(t){return i[t]||t}function o(t,e){return Array.isArray(e)?Array.isArray(t)&&Array.isArray(t[e[0]])?t[e[0]][e[1]]:void 0:t[e]}var s={x:!0,y:!0},l={"x unified":!0,"y unified":!0};e.isUnifiedHover=function(t){return"string"==typeof t&&!!l[t]},e.isXYhover=function(t){return"string"==typeof t&&!!s[t]}},88335:function(t,e,r){"use strict";var n=r(39898),i=r(92770),a=r(84267),o=r(71828),s=o.strTranslate,l=o.strRotate,u=r(11086),c=r(63893),f=r(39918),h=r(91424),p=r(7901),d=r(28569),v=r(89298),g=r(73972),y=r(23469),m=r(26675),x=r(99017),b=r(43969),_=m.YANGLE,w=Math.PI*_/180,T=1/Math.sin(w),k=Math.cos(w),A=Math.sin(w),M=m.HOVERARROWSIZE,S=m.HOVERTEXTPAD,E={box:!0,ohlc:!0,violin:!0,candlestick:!0},L={scatter:!0,scattergl:!0,splom:!0};function C(t){return[t.trace.index,t.index,t.x0,t.y0,t.name,t.attr,t.xa?t.xa._id:"",t.ya?t.ya._id:""].join(",")}e.hover=function(t,e,r,a){t=o.getGraphDiv(t);var s=e.target;o.throttle(t._fullLayout._uid+m.HOVERID,m.HOVERMINTIME,(function(){!function(t,e,r,a,s){r||(r="xy");var l=Array.isArray(r)?r:[r],c=t._fullLayout,h=c._plots||[],v=h[r],m=c._has("cartesian");if(v){var x=v.overlays.map((function(t){return t.id}));l=l.concat(x)}for(var b=l.length,_=new Array(b),w=new Array(b),k=!1,A=0;A<b;A++){var S=l[A];if(h[S])k=!0,_[A]=h[S].xaxis,w[A]=h[S].yaxis;else{if(!c[S]||!c[S]._subplot)return void o.warn("Unrecognized subplot: "+S);var P=c[S]._subplot;_[A]=P.xaxis,w[A]=P.yaxis}}var I=e.hovermode||c.hovermode;if(I&&!k&&(I="closest"),-1===["x","y","closest","x unified","y unified"].indexOf(I)||!t.calcdata||t.querySelector(".zoombox")||t._dragging)return d.unhoverRaw(t,e);var N=c.hoverdistance;-1===N&&(N=1/0);var H=c.spikedistance;-1===H&&(H=1/0);var q,G,Z,Y,W,X,J,K,$,Q,tt,et,rt,nt=[],it=[],at={hLinePoint:null,vLinePoint:null},ot=!1;if(Array.isArray(e))for(I="array",Z=0;Z<e.length;Z++)(W=t.calcdata[e[Z].curveNumber||0])&&(X=W[0].trace,"skip"!==W[0].trace.hoverinfo&&(it.push(W),"h"===X.orientation&&(ot=!0)));else{for(Y=0;Y<t.calcdata.length;Y++)W=t.calcdata[Y],"skip"!==(X=W[0].trace).hoverinfo&&y.isTraceInSubplots(X,l)&&(it.push(W),"h"===X.orientation&&(ot=!0));var st,lt;if(s){if(!1===u.triggerHandler(t,"plotly_beforehover",e))return;var ut=s.getBoundingClientRect();st=e.clientX-ut.left,lt=e.clientY-ut.top,c._calcInverseTransform(t);var ct=o.apply3DTransform(c._invTransform)(st,lt);if(st=ct[0],lt=ct[1],st<0||st>_[0]._length||lt<0||lt>w[0]._length)return d.unhoverRaw(t,e)}else st="xpx"in e?e.xpx:_[0]._length/2,lt="ypx"in e?e.ypx:w[0]._length/2;if(e.pointerX=st+_[0]._offset,e.pointerY=lt+w[0]._offset,q="xval"in e?y.flat(l,e.xval):y.p2c(_,st),G="yval"in e?y.flat(l,e.yval):y.p2c(w,lt),!i(q[0])||!i(G[0]))return o.warn("Fx.hover failed",e,t),d.unhoverRaw(t,e)}var ft=1/0;function ht(t,r){for(Y=0;Y<it.length;Y++)if((W=it[Y])&&W[0]&&W[0].trace&&!0===(X=W[0].trace).visible&&0!==X._length&&-1===["carpet","contourcarpet"].indexOf(X._module.name)){if("splom"===X.type?J=l[K=0]:(J=y.getSubplot(X),K=l.indexOf(J)),$=I,y.isUnifiedHover($)&&($=$.charAt(0)),et={cd:W,trace:X,xa:_[K],ya:w[K],maxHoverDistance:N,maxSpikeDistance:H,index:!1,distance:Math.min(ft,N),spikeDistance:1/0,xSpike:void 0,ySpike:void 0,color:p.defaultLine,name:X.name,x0:void 0,x1:void 0,y0:void 0,y1:void 0,xLabelVal:void 0,yLabelVal:void 0,zLabelVal:void 0,text:void 0},c[J]&&(et.subplot=c[J]._subplot),c._splomScenes&&c._splomScenes[X.uid]&&(et.scene=c._splomScenes[X.uid]),rt=nt.length,"array"===$){var n=e[Y];"pointNumber"in n?(et.index=n.pointNumber,$="closest"):($="","xval"in n&&(Q=n.xval,$="x"),"yval"in n&&(tt=n.yval,$=$?"closest":"y"))}else void 0!==t&&void 0!==r?(Q=t,tt=r):(Q=q[K],tt=G[K]);if(0!==N)if(X._module&&X._module.hoverPoints){var a=X._module.hoverPoints(et,Q,tt,$,{finiteRange:!0,hoverLayer:c._hoverlayer});if(a)for(var s,u=0;u<a.length;u++)s=a[u],i(s.x0)&&i(s.y0)&&nt.push(R(s,I))}else o.log("Unrecognized trace type in hover:",X);if("closest"===I&&nt.length>rt&&(nt.splice(0,rt),ft=nt[0].distance),m&&0!==H&&0===nt.length){et.distance=H,et.index=!1;var f=X._module.hoverPoints(et,Q,tt,"closest",{hoverLayer:c._hoverlayer});if(f&&(f=f.filter((function(t){return t.spikeDistance<=H}))),f&&f.length){var h,d=f.filter((function(t){return t.xa.showspikes&&"hovered data"!==t.xa.spikesnap}));if(d.length){var v=d[0];i(v.x0)&&i(v.y0)&&(h=dt(v),(!at.vLinePoint||at.vLinePoint.spikeDistance>h.spikeDistance)&&(at.vLinePoint=h))}var g=f.filter((function(t){return t.ya.showspikes&&"hovered data"!==t.ya.spikesnap}));if(g.length){var x=g[0];i(x.x0)&&i(x.y0)&&(h=dt(x),(!at.hLinePoint||at.hLinePoint.spikeDistance>h.spikeDistance)&&(at.hLinePoint=h))}}}}}function pt(t,e,r){for(var n,i=null,a=1/0,o=0;o<t.length;o++)n=t[o].spikeDistance,r&&0===o&&(n=-1/0),n<=a&&n<=e&&(i=t[o],a=n);return i}function dt(t){return t?{xa:t.xa,ya:t.ya,x:void 0!==t.xSpike?t.xSpike:(t.x0+t.x1)/2,y:void 0!==t.ySpike?t.ySpike:(t.y0+t.y1)/2,distance:t.distance,spikeDistance:t.spikeDistance,curveNumber:t.trace.index,color:t.color,pointNumber:t.index}:null}ht();var vt={fullLayout:c,container:c._hoverlayer,event:e},gt=t._spikepoints,yt={vLinePoint:at.vLinePoint,hLinePoint:at.hLinePoint};t._spikepoints=yt;var mt=function(){nt.sort((function(t,e){return t.distance-e.distance})),nt=function(t,e){for(var r=e.charAt(0),n=[],i=[],a=[],o=0;o<t.length;o++){var s=t[o];g.traceIs(s.trace,"bar-like")||g.traceIs(s.trace,"box-violin")?a.push(s):s.trace[r+"period"]?i.push(s):n.push(s)}return n.concat(i).concat(a)}(nt,I)};mt();var xt=I.charAt(0),bt=("x"===xt||"y"===xt)&&nt[0]&&L[nt[0].trace.type];if(m&&0!==H&&0!==nt.length){var _t=pt(nt.filter((function(t){return t.ya.showspikes})),H,bt);at.hLinePoint=dt(_t);var wt=pt(nt.filter((function(t){return t.xa.showspikes})),H,bt);at.vLinePoint=dt(wt)}if(0===nt.length){var Tt=d.unhoverRaw(t,e);return!m||null===at.hLinePoint&&null===at.vLinePoint||B(gt)&&F(t,at,vt),Tt}if(m&&B(gt)&&F(t,at,vt),y.isXYhover($)&&0!==nt[0].length&&"splom"!==nt[0].trace.type){var kt=nt[0],At=(nt=E[kt.trace.type]?nt.filter((function(t){return t.trace.index===kt.trace.index})):[kt]).length;ht(j("x",kt,c),j("y",kt,c));var Mt,St=[],Et={},Lt=0,Ct=function(t){var e=E[t.trace.type]?C(t):t.trace.index;if(Et[e]){var r=Et[e]-1,n=St[r];r>0&&Math.abs(t.distance)<Math.abs(n.distance)&&(St[r]=t)}else Lt++,Et[e]=Lt,St.push(t)};for(Mt=0;Mt<At;Mt++)Ct(nt[Mt]);for(Mt=nt.length-1;Mt>At-1;Mt--)Ct(nt[Mt]);nt=St,mt()}var Pt=t._hoverdata,Ot=[],It=U(t),Dt=V(t);for(Z=0;Z<nt.length;Z++){var zt=nt[Z],Rt=y.makeEventData(zt,zt.trace,zt.cd);if(!1!==zt.hovertemplate){var Ft=!1;zt.cd[zt.index]&&zt.cd[zt.index].ht&&(Ft=zt.cd[zt.index].ht),zt.hovertemplate=Ft||zt.trace.hovertemplate||!1}if(zt.xa&&zt.ya){var Bt=zt.x0+zt.xa._offset,Nt=zt.x1+zt.xa._offset,jt=zt.y0+zt.ya._offset,Ut=zt.y1+zt.ya._offset,Vt=Math.min(Bt,Nt),Ht=Math.max(Bt,Nt),qt=Math.min(jt,Ut),Gt=Math.max(jt,Ut);Rt.bbox={x0:Vt+Dt,x1:Ht+Dt,y0:qt+It,y1:Gt+It}}zt.eventData=[Rt],Ot.push(Rt)}t._hoverdata=Ot;var Zt="y"===I&&(it.length>1||nt.length>1)||"closest"===I&&ot&&nt.length>1,Yt=p.combine(c.plot_bgcolor||p.background,c.paper_bgcolor),Wt=O(nt,{gd:t,hovermode:I,rotateLabels:Zt,bgColor:Yt,container:c._hoverlayer,outerContainer:c._paper.node(),commonLabelOpts:c.hoverlabel,hoverdistance:c.hoverdistance}),Xt=Wt.hoverLabels;if(y.isUnifiedHover(I)||(function(t,e,r,n){var i,a,o,s,l,u,c,f=e?"xa":"ya",h=e?"ya":"xa",p=0,d=1,v=t.size(),g=new Array(v),y=0,m=n.minX,x=n.maxX,b=n.minY,_=n.maxY,w=function(t){return t*r._invScaleX},k=function(t){return t*r._invScaleY};function A(t){var e=t[0],r=t[t.length-1];if(a=e.pmin-e.pos-e.dp+e.size,o=r.pos+r.dp+r.size-e.pmax,a>.01){for(l=t.length-1;l>=0;l--)t[l].dp+=a;i=!1}if(!(o<.01)){if(a<-.01){for(l=t.length-1;l>=0;l--)t[l].dp-=o;i=!1}if(i){var n=0;for(s=0;s<t.length;s++)(u=t[s]).pos+u.dp+u.size>e.pmax&&n++;for(s=t.length-1;s>=0&&!(n<=0);s--)(u=t[s]).pos>e.pmax-1&&(u.del=!0,n--);for(s=0;s<t.length&&!(n<=0);s++)if((u=t[s]).pos<e.pmin+1)for(u.del=!0,n--,o=2*u.size,l=t.length-1;l>=0;l--)t[l].dp-=o;for(s=t.length-1;s>=0&&!(n<=0);s--)(u=t[s]).pos+u.dp+u.size>e.pmax&&(u.del=!0,n--)}}}for(t.each((function(t){var n=t[f],i=t[h],a="x"===n._id.charAt(0),o=n.range;0===y&&o&&o[0]>o[1]!==a&&(d=-1);var s=0,l=a?r.width:r.height;if("x"===r.hovermode||"y"===r.hovermode){var u,c,p=D(t,e),v=t.anchor,A="end"===v?-1:1;if("middle"===v)c=(u=t.crossPos+(a?k(p.y-t.by/2):w(t.bx/2+t.tx2width/2)))+(a?k(t.by):w(t.bx));else if(a)c=(u=t.crossPos+k(M+p.y)-k(t.by/2-M))+k(t.by);else{var S=w(A*M+p.x),E=S+w(A*t.bx);u=t.crossPos+Math.min(S,E),c=t.crossPos+Math.max(S,E)}a?void 0!==b&&void 0!==_&&Math.min(c,_)-Math.max(u,b)>1&&("left"===i.side?(s=i._mainLinePosition,l=r.width):l=i._mainLinePosition):void 0!==m&&void 0!==x&&Math.min(c,x)-Math.max(u,m)>1&&("top"===i.side?(s=i._mainLinePosition,l=r.height):l=i._mainLinePosition)}g[y++]=[{datum:t,traceIndex:t.trace.index,dp:0,pos:t.pos,posref:t.posref,size:t.by*(a?T:1)/2,pmin:s,pmax:l}]})),g.sort((function(t,e){return t[0].posref-e[0].posref||d*(e[0].traceIndex-t[0].traceIndex)}));!i&&p<=v;){for(p++,i=!0,s=0;s<g.length-1;){var S=g[s],E=g[s+1],L=S[S.length-1],C=E[0];if((a=L.pos+L.dp+L.size-C.pos-C.dp+C.size)>.01&&L.pmin===C.pmin&&L.pmax===C.pmax){for(l=E.length-1;l>=0;l--)E[l].dp+=a;for(S.push.apply(S,E),g.splice(s+1,1),c=0,l=S.length-1;l>=0;l--)c+=S[l].dp;for(o=c/S.length,l=S.length-1;l>=0;l--)S[l].dp-=o;i=!1}else s++}g.forEach(A)}for(s=g.length-1;s>=0;s--){var P=g[s];for(l=P.length-1;l>=0;l--){var O=P[l],I=O.datum;I.offset=O.dp,I.del=O.del}}}(Xt,Zt,c,Wt.commonLabelBoundingBox),z(Xt,Zt,c._invScaleX,c._invScaleY)),s&&s.tagName){var Jt=g.getComponentMethod("annotations","hasClickToShow")(t,Ot);f(n.select(s),Jt?"pointer":"")}s&&!a&&function(t,e,r){if(!r||r.length!==t._hoverdata.length)return!0;for(var n=r.length-1;n>=0;n--){var i=r[n],a=t._hoverdata[n];if(i.curveNumber!==a.curveNumber||String(i.pointNumber)!==String(a.pointNumber)||String(i.pointNumbers)!==String(a.pointNumbers))return!0}return!1}(t,0,Pt)&&(Pt&&t.emit("plotly_unhover",{event:e,points:Pt}),t.emit("plotly_hover",{event:e,points:t._hoverdata,xaxes:_,yaxes:w,xvals:q,yvals:G}))}(t,e,r,a,s)}))},e.loneHover=function(t,e){var r=!0;Array.isArray(t)||(r=!1,t=[t]);var i=e.gd,a=U(i),o=V(i),s=O(t.map((function(t){var r=t._x0||t.x0||t.x||0,n=t._x1||t.x1||t.x||0,s=t._y0||t.y0||t.y||0,l=t._y1||t.y1||t.y||0,u=t.eventData;if(u){var c=Math.min(r,n),f=Math.max(r,n),h=Math.min(s,l),d=Math.max(s,l),v=t.trace;if(g.traceIs(v,"gl3d")){var y=i._fullLayout[v.scene]._scene.container,m=y.offsetLeft,x=y.offsetTop;c+=m,f+=m,h+=x,d+=x}u.bbox={x0:c+o,x1:f+o,y0:h+a,y1:d+a},e.inOut_bbox&&e.inOut_bbox.push(u.bbox)}else u=!1;return{color:t.color||p.defaultLine,x0:t.x0||t.x||0,x1:t.x1||t.x||0,y0:t.y0||t.y||0,y1:t.y1||t.y||0,xLabel:t.xLabel,yLabel:t.yLabel,zLabel:t.zLabel,text:t.text,name:t.name,idealAlign:t.idealAlign,borderColor:t.borderColor,fontFamily:t.fontFamily,fontSize:t.fontSize,fontColor:t.fontColor,nameLength:t.nameLength,textAlign:t.textAlign,trace:t.trace||{index:0,hoverinfo:""},xa:{_offset:0},ya:{_offset:0},index:0,hovertemplate:t.hovertemplate||!1,hovertemplateLabels:t.hovertemplateLabels||!1,eventData:u}})),{gd:i,hovermode:"closest",rotateLabels:!1,bgColor:e.bgColor||p.background,container:n.select(e.container),outerContainer:e.outerContainer||e.container}).hoverLabels,l=0,u=0;return s.sort((function(t,e){return t.y0-e.y0})).each((function(t,r){var n=t.y0-t.by/2;t.offset=n-5<l?l-n+5:0,l=n+t.by+t.offset,r===e.anchorIndex&&(u=t.offset)})).each((function(t){t.offset-=u})),z(s,!1,i._fullLayout._invScaleX,i._fullLayout._invScaleY),r?s:s.node()};var P=/<extra>([\s\S]*)<\/extra>/;function O(t,e){var r=e.gd,i=r._fullLayout,a=e.hovermode,u=e.rotateLabels,f=e.bgColor,d=e.container,v=e.outerContainer,w=e.commonLabelOpts||{};if(0===t.length)return[[]];var T=e.fontFamily||m.HOVERFONT,k=e.fontSize||m.HOVERFONTSIZE,A=t[0],E=A.xa,L=A.ya,P=a.charAt(0),O=P+"Label",D=A[O];if(void 0===D&&"multicategory"===E.type)for(var z=0;z<t.length&&void 0===(D=t[z][O]);z++);var R=H(r,v),F=R.top,B=R.width,N=R.height,j=void 0!==D&&A.distance<=e.hoverdistance&&("x"===a||"y"===a);if(j){var U,V,q=!0;for(U=0;U<t.length;U++)if(q&&void 0===t[U].zLabel&&(q=!1),V=t[U].hoverinfo||t[U].trace.hoverinfo){var G=Array.isArray(V)?V:V.split("+");if(-1===G.indexOf("all")&&-1===G.indexOf(a)){j=!1;break}}q&&(j=!1)}var Z=d.selectAll("g.axistext").data(j?[0]:[]);Z.enter().append("g").classed("axistext",!0),Z.exit().remove();var Y={minX:0,maxX:0,minY:0,maxY:0};if(Z.each((function(){var t=n.select(this),e=o.ensureSingle(t,"path","",(function(t){t.style({"stroke-width":"1px"})})),l=o.ensureSingle(t,"text","",(function(t){t.attr("data-notex",1)})),u=w.bgcolor||p.defaultLine,f=w.bordercolor||p.contrast(u),d=p.contrast(u),v={family:w.font.family||T,size:w.font.size||k,color:w.font.color||d};e.style({fill:u,stroke:f}),l.text(D).call(h.font,v).call(c.positionText,0,0).call(c.convertToTspans,r),t.attr("transform","");var g,y,m=H(r,l.node());if("x"===a){var x="top"===E.side?"-":"";l.attr("text-anchor","middle").call(c.positionText,0,"top"===E.side?F-m.bottom-M-S:F-m.top+M+S),g=E._offset+(A.x0+A.x1)/2,y=L._offset+("top"===E.side?0:L._length);var b=m.width/2+S;g<b?(g=b,e.attr("d","M-"+(b-M)+",0L-"+(b-2*M)+","+x+M+"H"+b+"v"+x+(2*S+m.height)+"H-"+b+"V"+x+M+"Z")):g>i.width-b?(g=i.width-b,e.attr("d","M"+(b-M)+",0L"+b+","+x+M+"v"+x+(2*S+m.height)+"H-"+b+"V"+x+M+"H"+(b-2*M)+"Z")):e.attr("d","M0,0L"+M+","+x+M+"H"+b+"v"+x+(2*S+m.height)+"H-"+b+"V"+x+M+"H-"+M+"Z"),Y.minX=g-b,Y.maxX=g+b,"top"===E.side?(Y.minY=y-(2*S+m.height),Y.maxY=y-S):(Y.minY=y+S,Y.maxY=y+(2*S+m.height))}else{var _,C,P;"right"===L.side?(_="start",C=1,P="",g=E._offset+E._length):(_="end",C=-1,P="-",g=E._offset),y=L._offset+(A.y0+A.y1)/2,l.attr("text-anchor",_),e.attr("d","M0,0L"+P+M+","+M+"V"+(S+m.height/2)+"h"+P+(2*S+m.width)+"V-"+(S+m.height/2)+"H"+P+M+"V-"+M+"Z"),Y.minY=y-(S+m.height/2),Y.maxY=y+(S+m.height/2),"right"===L.side?(Y.minX=g+M,Y.maxX=g+M+(2*S+m.width)):(Y.minX=g-M-(2*S+m.width),Y.maxX=g-M);var O,I=m.height/2,z=F-m.top-I,R="clip"+i._uid+"commonlabel"+L._id;if(g<m.width+2*S+M){O="M-"+(M+S)+"-"+I+"h-"+(m.width-S)+"V"+I+"h"+(m.width-S)+"Z";var B=m.width-g+S;c.positionText(l,B,z),"end"===_&&l.selectAll("tspan").each((function(){var t=n.select(this),e=h.tester.append("text").text(t.text()).call(h.font,v),i=H(r,e.node());Math.round(i.width)<Math.round(m.width)&&t.attr("x",B-i.width),e.remove()}))}else c.positionText(l,C*(S+M),z),O=null;var N=i._topclips.selectAll("#"+R).data(O?[0]:[]);N.enter().append("clipPath").attr("id",R).append("path"),N.exit().remove(),N.select("path").attr("d",O),h.setClipUrl(l,O?R:null,r)}t.attr("transform",s(g,y))})),y.isUnifiedHover(a)){d.selectAll("g.hovertext").remove();var W=t.filter((function(t){return"none"!==t.hoverinfo}));if(0===W.length)return[];var X=i.hoverlabel,J=X.font,K={showlegend:!0,legend:{title:{text:D,font:J},font:J,bgcolor:X.bgcolor,bordercolor:X.bordercolor,borderwidth:1,tracegroupgap:7,traceorder:i.legend?i.legend.traceorder:void 0,orientation:"v"}},$={font:J};x(K,$,r._fullData);var Q=$.legend;Q.entries=[];for(var tt=0;tt<W.length;tt++){var et=W[tt];if("none"!==et.hoverinfo){var rt=I(et,!0,a,i,D),nt=rt[0],it=rt[1];et.name=it,et.text=""!==it?it+" : "+nt:nt;var at=et.cd[et.index];at&&(at.mc&&(et.mc=at.mc),at.mcc&&(et.mc=at.mcc),at.mlc&&(et.mlc=at.mlc),at.mlcc&&(et.mlc=at.mlcc),at.mlw&&(et.mlw=at.mlw),at.mrc&&(et.mrc=at.mrc),at.dir&&(et.dir=at.dir)),et._distinct=!0,Q.entries.push([et])}}Q.entries.sort((function(t,e){return t[0].trace.index-e[0].trace.index})),Q.layer=d,Q._inHover=!0,Q._groupTitleFont=X.grouptitlefont,b(r,Q);var ot,st,lt,ut,ct=d.select("g.legend"),ft=H(r,ct.node()),ht=ft.width+2*S,pt=ft.height+2*S,dt=W[0],vt=(dt.x0+dt.x1)/2,gt=(dt.y0+dt.y1)/2,yt=!(g.traceIs(dt.trace,"bar-like")||g.traceIs(dt.trace,"box-violin"));"y"===P?yt?(st=gt-S,ot=gt+S):(st=Math.min.apply(null,W.map((function(t){return Math.min(t.y0,t.y1)}))),ot=Math.max.apply(null,W.map((function(t){return Math.max(t.y0,t.y1)})))):st=ot=o.mean(W.map((function(t){return(t.y0+t.y1)/2})))-pt/2,"x"===P?yt?(lt=vt+S,ut=vt-S):(lt=Math.max.apply(null,W.map((function(t){return Math.max(t.x0,t.x1)}))),ut=Math.min.apply(null,W.map((function(t){return Math.min(t.x0,t.x1)})))):lt=ut=o.mean(W.map((function(t){return(t.x0+t.x1)/2})))-ht/2;var mt,xt,bt=E._offset,_t=L._offset;return ut+=bt-ht,st+=_t-pt,mt=(lt+=bt)+ht<B&&lt>=0?lt:ut+ht<B&&ut>=0?ut:bt+ht<B?bt:lt-vt<vt-ut+ht?B-ht:0,mt+=S,xt=(ot+=_t)+pt<N&&ot>=0?ot:st+pt<N&&st>=0?st:_t+pt<N?_t:ot-gt<gt-st+pt?N-pt:0,xt+=S,ct.attr("transform",s(mt-1,xt-1)),ct}var wt=d.selectAll("g.hovertext").data(t,(function(t){return C(t)}));return wt.enter().append("g").classed("hovertext",!0).each((function(){var t=n.select(this);t.append("rect").call(p.fill,p.addOpacity(f,.8)),t.append("text").classed("name",!0),t.append("path").style("stroke-width","1px"),t.append("text").classed("nums",!0).call(h.font,T,k)})),wt.exit().remove(),wt.each((function(t){var e=n.select(this).attr("transform",""),o=t.color;Array.isArray(o)&&(o=o[t.eventData[0].pointNumber]);var d=t.bgcolor||o,v=p.combine(p.opacity(d)?d:p.defaultLine,f),g=p.combine(p.opacity(o)?o:p.defaultLine,f),y=t.borderColor||p.contrast(v),m=I(t,j,a,i,D,e),x=m[0],b=m[1],w=e.select("text.nums").call(h.font,t.fontFamily||T,t.fontSize||k,t.fontColor||y).text(x).attr("data-notex",1).call(c.positionText,0,0).call(c.convertToTspans,r),A=e.select("text.name"),E=0,L=0;if(b&&b!==x){A.call(h.font,t.fontFamily||T,t.fontSize||k,g).text(b).attr("data-notex",1).call(c.positionText,0,0).call(c.convertToTspans,r);var C=H(r,A.node());E=C.width+2*S,L=C.height+2*S}else A.remove(),e.select("rect").remove();e.select("path").style({fill:v,stroke:y});var P=t.xa._offset+(t.x0+t.x1)/2,O=t.ya._offset+(t.y0+t.y1)/2,z=Math.abs(t.x1-t.x0),R=Math.abs(t.y1-t.y0),U=H(r,w.node()),V=U.width/i._invScaleX,q=U.height/i._invScaleY;t.ty0=(F-U.top)/i._invScaleY,t.bx=V+2*S,t.by=Math.max(q+2*S,L),t.anchor="start",t.txwidth=V,t.tx2width=E,t.offset=0;var G,Z,Y=(V+M+S+E)*i._invScaleX;if(u)t.pos=P,G=O+R/2+Y<=N,Z=O-R/2-Y>=0,"top"!==t.idealAlign&&G||!Z?G?(O+=R/2,t.anchor="start"):t.anchor="middle":(O-=R/2,t.anchor="end"),t.crossPos=O;else{if(t.pos=O,G=P+z/2+Y<=B,Z=P-z/2-Y>=0,"left"!==t.idealAlign&&G||!Z)if(G)P+=z/2,t.anchor="start";else{t.anchor="middle";var W=Y/2,X=P+W-B,J=P-W;X>0&&(P-=X),J<0&&(P+=-J)}else P-=z/2,t.anchor="end";t.crossPos=P}w.attr("text-anchor",t.anchor),E&&A.attr("text-anchor",t.anchor),e.attr("transform",s(P,O)+(u?l(_):""))})),{hoverLabels:wt,commonLabelBoundingBox:Y}}function I(t,e,r,n,i,a){var s="",l="";void 0!==t.nameOverride&&(t.name=t.nameOverride),t.name&&(t.trace._meta&&(t.name=o.templateString(t.name,t.trace._meta)),s=N(t.name,t.nameLength));var u=r.charAt(0),c="x"===u?"y":"x";void 0!==t.zLabel?(void 0!==t.xLabel&&(l+="x: "+t.xLabel+"<br>"),void 0!==t.yLabel&&(l+="y: "+t.yLabel+"<br>"),"choropleth"!==t.trace.type&&"choroplethmapbox"!==t.trace.type&&(l+=(l?"z: ":"")+t.zLabel)):e&&t[u+"Label"]===i?l=t[c+"Label"]||"":void 0===t.xLabel?void 0!==t.yLabel&&"scattercarpet"!==t.trace.type&&(l=t.yLabel):l=void 0===t.yLabel?t.xLabel:"("+t.xLabel+", "+t.yLabel+")",!t.text&&0!==t.text||Array.isArray(t.text)||(l+=(l?"<br>":"")+t.text),void 0!==t.extraText&&(l+=(l?"<br>":"")+t.extraText),a&&""===l&&!t.hovertemplate&&(""===s&&a.remove(),l=s);var f=t.hovertemplate||!1;if(f){var h=t.hovertemplateLabels||t;t[u+"Label"]!==i&&(h[u+"other"]=h[u+"Val"],h[u+"otherLabel"]=h[u+"Label"]),l=(l=o.hovertemplateString(f,h,n._d3locale,t.eventData[0]||{},t.trace._meta)).replace(P,(function(e,r){return s=N(r,t.nameLength),""}))}return[l,s]}function D(t,e){var r=0,n=t.offset;return e&&(n*=-A,r=t.offset*k),{x:r,y:n}}function z(t,e,r,i){var a=function(t){return t*r},o=function(t){return t*i};t.each((function(t){var r=n.select(this);if(t.del)return r.remove();var i,s,l,u,f=r.select("text.nums"),p=t.anchor,d="end"===p?-1:1,v=(u=(l=(s={start:1,end:-1,middle:0}[(i=t).anchor])*(M+S))+s*(i.txwidth+S),"middle"===i.anchor&&(l-=i.tx2width/2,u+=i.txwidth/2+S),{alignShift:s,textShiftX:l,text2ShiftX:u}),g=D(t,e),y=g.x,m=g.y,x="middle"===p;r.select("path").attr("d",x?"M-"+a(t.bx/2+t.tx2width/2)+","+o(m-t.by/2)+"h"+a(t.bx)+"v"+o(t.by)+"h-"+a(t.bx)+"Z":"M0,0L"+a(d*M+y)+","+o(M+m)+"v"+o(t.by/2-M)+"h"+a(d*t.bx)+"v-"+o(t.by)+"H"+a(d*M+y)+"V"+o(m-M)+"Z");var b=y+v.textShiftX,_=m+t.ty0-t.by/2+S,w=t.textAlign||"auto";"auto"!==w&&("left"===w&&"start"!==p?(f.attr("text-anchor","start"),b=x?-t.bx/2-t.tx2width/2+S:-t.bx-S):"right"===w&&"end"!==p&&(f.attr("text-anchor","end"),b=x?t.bx/2-t.tx2width/2-S:t.bx+S)),f.call(c.positionText,a(b),o(_)),t.tx2width&&(r.select("text.name").call(c.positionText,a(v.text2ShiftX+v.alignShift*S+y),o(m+t.ty0-t.by/2+S)),r.select("rect").call(h.setRect,a(v.text2ShiftX+(v.alignShift-1)*t.tx2width/2+y),o(m-t.by/2-1),a(t.tx2width),o(t.by+2)))}))}function R(t,e){var r=t.index,n=t.trace||{},a=t.cd[0],s=t.cd[r]||{};function l(t){return t||i(t)&&0===t}var u=Array.isArray(r)?function(t,e){var i=o.castOption(a,r,t);return l(i)?i:o.extractOption({},n,"",e)}:function(t,e){return o.extractOption(s,n,t,e)};function c(e,r,n){var i=u(r,n);l(i)&&(t[e]=i)}if(c("hoverinfo","hi","hoverinfo"),c("bgcolor","hbg","hoverlabel.bgcolor"),c("borderColor","hbc","hoverlabel.bordercolor"),c("fontFamily","htf","hoverlabel.font.family"),c("fontSize","hts","hoverlabel.font.size"),c("fontColor","htc","hoverlabel.font.color"),c("nameLength","hnl","hoverlabel.namelength"),c("textAlign","hta","hoverlabel.align"),t.posref="y"===e||"closest"===e&&"h"===n.orientation?t.xa._offset+(t.x0+t.x1)/2:t.ya._offset+(t.y0+t.y1)/2,t.x0=o.constrain(t.x0,0,t.xa._length),t.x1=o.constrain(t.x1,0,t.xa._length),t.y0=o.constrain(t.y0,0,t.ya._length),t.y1=o.constrain(t.y1,0,t.ya._length),void 0!==t.xLabelVal&&(t.xLabel="xLabel"in t?t.xLabel:v.hoverLabelText(t.xa,t.xLabelVal,n.xhoverformat),t.xVal=t.xa.c2d(t.xLabelVal)),void 0!==t.yLabelVal&&(t.yLabel="yLabel"in t?t.yLabel:v.hoverLabelText(t.ya,t.yLabelVal,n.yhoverformat),t.yVal=t.ya.c2d(t.yLabelVal)),void 0!==t.zLabelVal&&void 0===t.zLabel&&(t.zLabel=String(t.zLabelVal)),!(isNaN(t.xerr)||"log"===t.xa.type&&t.xerr<=0)){var f=v.tickText(t.xa,t.xa.c2l(t.xerr),"hover").text;void 0!==t.xerrneg?t.xLabel+=" +"+f+" / -"+v.tickText(t.xa,t.xa.c2l(t.xerrneg),"hover").text:t.xLabel+=" ± "+f,"x"===e&&(t.distance+=1)}if(!(isNaN(t.yerr)||"log"===t.ya.type&&t.yerr<=0)){var h=v.tickText(t.ya,t.ya.c2l(t.yerr),"hover").text;void 0!==t.yerrneg?t.yLabel+=" +"+h+" / -"+v.tickText(t.ya,t.ya.c2l(t.yerrneg),"hover").text:t.yLabel+=" ± "+h,"y"===e&&(t.distance+=1)}var p=t.hoverinfo||t.trace.hoverinfo;return p&&"all"!==p&&(-1===(p=Array.isArray(p)?p:p.split("+")).indexOf("x")&&(t.xLabel=void 0),-1===p.indexOf("y")&&(t.yLabel=void 0),-1===p.indexOf("z")&&(t.zLabel=void 0),-1===p.indexOf("text")&&(t.text=void 0),-1===p.indexOf("name")&&(t.name=void 0)),t}function F(t,e,r){var n,i,o=r.container,s=r.fullLayout,l=s._size,u=r.event,c=!!e.hLinePoint,f=!!e.vLinePoint;if(o.selectAll(".spikeline").remove(),f||c){var d=p.combine(s.plot_bgcolor,s.paper_bgcolor);if(c){var g,y,m=e.hLinePoint;n=m&&m.xa,"cursor"===(i=m&&m.ya).spikesnap?(g=u.pointerX,y=u.pointerY):(g=n._offset+m.x,y=i._offset+m.y);var x,b,_=a.readability(m.color,d)<1.5?p.contrast(d):m.color,w=i.spikemode,T=i.spikethickness,k=i.spikecolor||_,A=v.getPxPosition(t,i);if(-1!==w.indexOf("toaxis")||-1!==w.indexOf("across")){if(-1!==w.indexOf("toaxis")&&(x=A,b=g),-1!==w.indexOf("across")){var M=i._counterDomainMin,S=i._counterDomainMax;"free"===i.anchor&&(M=Math.min(M,i.position),S=Math.max(S,i.position)),x=l.l+M*l.w,b=l.l+S*l.w}o.insert("line",":first-child").attr({x1:x,x2:b,y1:y,y2:y,"stroke-width":T,stroke:k,"stroke-dasharray":h.dashStyle(i.spikedash,T)}).classed("spikeline",!0).classed("crisp",!0),o.insert("line",":first-child").attr({x1:x,x2:b,y1:y,y2:y,"stroke-width":T+2,stroke:d}).classed("spikeline",!0).classed("crisp",!0)}-1!==w.indexOf("marker")&&o.insert("circle",":first-child").attr({cx:A+("right"!==i.side?T:-T),cy:y,r:T,fill:k}).classed("spikeline",!0)}if(f){var E,L,C=e.vLinePoint;n=C&&C.xa,i=C&&C.ya,"cursor"===n.spikesnap?(E=u.pointerX,L=u.pointerY):(E=n._offset+C.x,L=i._offset+C.y);var P,O,I=a.readability(C.color,d)<1.5?p.contrast(d):C.color,D=n.spikemode,z=n.spikethickness,R=n.spikecolor||I,F=v.getPxPosition(t,n);if(-1!==D.indexOf("toaxis")||-1!==D.indexOf("across")){if(-1!==D.indexOf("toaxis")&&(P=F,O=L),-1!==D.indexOf("across")){var B=n._counterDomainMin,N=n._counterDomainMax;"free"===n.anchor&&(B=Math.min(B,n.position),N=Math.max(N,n.position)),P=l.t+(1-N)*l.h,O=l.t+(1-B)*l.h}o.insert("line",":first-child").attr({x1:E,x2:E,y1:P,y2:O,"stroke-width":z,stroke:R,"stroke-dasharray":h.dashStyle(n.spikedash,z)}).classed("spikeline",!0).classed("crisp",!0),o.insert("line",":first-child").attr({x1:E,x2:E,y1:P,y2:O,"stroke-width":z+2,stroke:d}).classed("spikeline",!0).classed("crisp",!0)}-1!==D.indexOf("marker")&&o.insert("circle",":first-child").attr({cx:E,cy:F-("top"!==n.side?z:-z),r:z,fill:R}).classed("spikeline",!0)}}}function B(t,e){return!e||e.vLinePoint!==t._spikepoints.vLinePoint||e.hLinePoint!==t._spikepoints.hLinePoint}function N(t,e){return c.plainText(t||"",{len:e,allowedTags:["br","sub","sup","b","i","em"]})}function j(t,e,r){var n=e[t+"a"],i=e[t+"Val"],a=e.cd[0];if("category"===n.type||"multicategory"===n.type)i=n._categoriesMap[i];else if("date"===n.type){var o=e.trace[t+"periodalignment"];if(o){var s=e.cd[e.index],l=s[t+"Start"];void 0===l&&(l=s[t]);var u=s[t+"End"];void 0===u&&(u=s[t]);var c=u-l;"end"===o?i+=c:"middle"===o&&(i+=c/2)}i=n.d2c(i)}return a&&a.t&&a.t.posLetter===n._id&&("group"!==r.boxmode&&"group"!==r.violinmode||(i+=a.t.dPos)),i}function U(t){return t.offsetTop+t.clientTop}function V(t){return t.offsetLeft+t.clientLeft}function H(t,e){var r=t._fullLayout,n=e.getBoundingClientRect(),i=n.left,a=n.top,s=i+n.width,l=a+n.height,u=o.apply3DTransform(r._invTransform)(i,a),c=o.apply3DTransform(r._invTransform)(s,l),f=u[0],h=u[1],p=c[0],d=c[1];return{x:f,y:h,width:p-f,height:d-h,top:Math.min(h,d),left:Math.min(f,p),right:Math.max(f,p),bottom:Math.max(h,d)}}},38048:function(t,e,r){"use strict";var n=r(71828),i=r(7901),a=r(23469).isUnifiedHover;t.exports=function(t,e,r,o){o=o||{};var s=e.legend;function l(t){o.font[t]||(o.font[t]=s?e.legend.font[t]:e.font[t])}e&&a(e.hovermode)&&(o.font||(o.font={}),l("size"),l("family"),l("color"),s?(o.bgcolor||(o.bgcolor=i.combine(e.legend.bgcolor,e.paper_bgcolor)),o.bordercolor||(o.bordercolor=e.legend.bordercolor)):o.bgcolor||(o.bgcolor=e.paper_bgcolor)),r("hoverlabel.bgcolor",o.bgcolor),r("hoverlabel.bordercolor",o.bordercolor),r("hoverlabel.namelength",o.namelength),n.coerceFont(r,"hoverlabel.font",o.font),r("hoverlabel.align",o.align)}},98212:function(t,e,r){"use strict";var n=r(71828),i=r(528);t.exports=function(t,e){function r(r,a){return void 0!==e[r]?e[r]:n.coerce(t,e,i,r,a)}return r("clickmode"),r("hovermode")}},30211:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=r(28569),o=r(23469),s=r(528),l=r(88335);t.exports={moduleType:"component",name:"fx",constants:r(26675),schema:{layout:s},attributes:r(77914),layoutAttributes:s,supplyLayoutGlobalDefaults:r(22774),supplyDefaults:r(54268),supplyLayoutDefaults:r(34938),calc:r(30732),getDistanceFunction:o.getDistanceFunction,getClosest:o.getClosest,inbox:o.inbox,quadrature:o.quadrature,appendArrayPointValue:o.appendArrayPointValue,castHoverOption:function(t,e,r){return i.castOption(t,e,"hoverlabel."+r)},castHoverinfo:function(t,e,r){return i.castOption(t,r,"hoverinfo",(function(r){return i.coerceHoverinfo({hoverinfo:r},{_module:t._module},e)}))},hover:l.hover,unhover:a.unhover,loneHover:l.loneHover,loneUnhover:function(t){var e=i.isD3Selection(t)?t:n.select(t);e.selectAll("g.hovertext").remove(),e.selectAll(".spikeline").remove()},click:r(75914)}},528:function(t,e,r){"use strict";var n=r(26675),i=r(41940),a=i({editType:"none"});a.family.dflt=n.HOVERFONT,a.size.dflt=n.HOVERFONTSIZE,t.exports={clickmode:{valType:"flaglist",flags:["event","select"],dflt:"event",editType:"plot",extras:["none"]},dragmode:{valType:"enumerated",values:["zoom","pan","select","lasso","drawclosedpath","drawopenpath","drawline","drawrect","drawcircle","orbit","turntable",!1],dflt:"zoom",editType:"modebar"},hovermode:{valType:"enumerated",values:["x","y","closest",!1,"x unified","y unified"],dflt:"closest",editType:"modebar"},hoverdistance:{valType:"integer",min:-1,dflt:20,editType:"none"},spikedistance:{valType:"integer",min:-1,dflt:-1,editType:"none"},hoverlabel:{bgcolor:{valType:"color",editType:"none"},bordercolor:{valType:"color",editType:"none"},font:a,grouptitlefont:i({editType:"none"}),align:{valType:"enumerated",values:["left","right","auto"],dflt:"auto",editType:"none"},namelength:{valType:"integer",min:-1,dflt:15,editType:"none"},editType:"none"},selectdirection:{valType:"enumerated",values:["h","v","d","any"],dflt:"any",editType:"none"}}},34938:function(t,e,r){"use strict";var n=r(71828),i=r(528),a=r(98212),o=r(38048);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}a(t,e)&&(r("hoverdistance"),r("spikedistance")),"select"===r("dragmode")&&r("selectdirection");var s=e._has("mapbox"),l=e._has("geo"),u=e._basePlotModules.length;"zoom"===e.dragmode&&((s||l)&&1===u||s&&l&&2===u)&&(e.dragmode="pan"),o(t,e,r),n.coerceFont(r,"hoverlabel.grouptitlefont",e.hoverlabel.font)}},22774:function(t,e,r){"use strict";var n=r(71828),i=r(38048),a=r(528);t.exports=function(t,e){i(t,e,(function(r,i){return n.coerce(t,e,a,r,i)}))}},83312:function(t,e,r){"use strict";var n=r(71828),i=r(30587).counter,a=r(27670).Y,o=r(85555).idRegex,s=r(44467),l={rows:{valType:"integer",min:1,editType:"plot"},roworder:{valType:"enumerated",values:["top to bottom","bottom to top"],dflt:"top to bottom",editType:"plot"},columns:{valType:"integer",min:1,editType:"plot"},subplots:{valType:"info_array",freeLength:!0,dimensions:2,items:{valType:"enumerated",values:[i("xy").toString(),""],editType:"plot"},editType:"plot"},xaxes:{valType:"info_array",freeLength:!0,items:{valType:"enumerated",values:[o.x.toString(),""],editType:"plot"},editType:"plot"},yaxes:{valType:"info_array",freeLength:!0,items:{valType:"enumerated",values:[o.y.toString(),""],editType:"plot"},editType:"plot"},pattern:{valType:"enumerated",values:["independent","coupled"],dflt:"coupled",editType:"plot"},xgap:{valType:"number",min:0,max:1,editType:"plot"},ygap:{valType:"number",min:0,max:1,editType:"plot"},domain:a({name:"grid",editType:"plot",noGridCell:!0},{}),xside:{valType:"enumerated",values:["bottom","bottom plot","top plot","top"],dflt:"bottom plot",editType:"plot"},yside:{valType:"enumerated",values:["left","left plot","right plot","right"],dflt:"left plot",editType:"plot"},editType:"plot"};function u(t,e,r){var n=e[r+"axes"],i=Object.keys((t._splomAxes||{})[r]||{});return Array.isArray(n)?n:i.length?i:void 0}function c(t,e,r,n,i,a){var o=e(t+"gap",r),s=e("domain."+t);e(t+"side",n);for(var l=new Array(i),u=s[0],c=(s[1]-u)/(i-o),f=c*(1-o),h=0;h<i;h++){var p=u+c*h;l[a?i-1-h:h]=[p,p+f]}return l}function f(t,e,r,n,i){var a,o=new Array(r);function s(t,r){-1!==e.indexOf(r)&&void 0===n[r]?(o[t]=r,n[r]=t):o[t]=""}if(Array.isArray(t))for(a=0;a<r;a++)s(a,t[a]);else for(s(0,i),a=1;a<r;a++)s(a,i+(a+1));return o}t.exports={moduleType:"component",name:"grid",schema:{layout:{grid:l}},layoutAttributes:l,sizeDefaults:function(t,e){var r=t.grid||{},i=u(e,r,"x"),a=u(e,r,"y");if(t.grid||i||a){var o,f,h=Array.isArray(r.subplots)&&Array.isArray(r.subplots[0]),p=Array.isArray(i),d=Array.isArray(a),v=p&&i!==r.xaxes&&d&&a!==r.yaxes;h?(o=r.subplots.length,f=r.subplots[0].length):(d&&(o=a.length),p&&(f=i.length));var g=s.newContainer(e,"grid"),y=k("rows",o),m=k("columns",f);if(y*m>1){h||p||d||"independent"===k("pattern")&&(h=!0),g._hasSubplotGrid=h;var x,b,_="top to bottom"===k("roworder"),w=h?.2:.1,T=h?.3:.1;v&&e._splomGridDflt&&(x=e._splomGridDflt.xside,b=e._splomGridDflt.yside),g._domains={x:c("x",k,w,x,m),y:c("y",k,T,b,y,_)}}else delete e.grid}function k(t,e){return n.coerce(r,g,l,t,e)}},contentDefaults:function(t,e){var r=e.grid;if(r&&r._domains){var n,i,a,o,s,l,c,h=t.grid||{},p=e._subplots,d=r._hasSubplotGrid,v=r.rows,g=r.columns,y="independent"===r.pattern,m=r._axisMap={};if(d){var x=h.subplots||[];l=r.subplots=new Array(v);var b=1;for(n=0;n<v;n++){var _=l[n]=new Array(g),w=x[n]||[];for(i=0;i<g;i++)if(y?(s=1===b?"xy":"x"+b+"y"+b,b++):s=w[i],_[i]="",-1!==p.cartesian.indexOf(s)){if(c=s.indexOf("y"),a=s.slice(0,c),o=s.slice(c),void 0!==m[a]&&m[a]!==i||void 0!==m[o]&&m[o]!==n)continue;_[i]=s,m[a]=i,m[o]=n}}}else{var T=u(e,h,"x"),k=u(e,h,"y");r.xaxes=f(T,p.xaxis,g,m,"x"),r.yaxes=f(k,p.yaxis,v,m,"y")}var A=r._anchors={},M="top to bottom"===r.roworder;for(var S in m){var E,L,C,P=S.charAt(0),O=r[P+"side"];if(O.length<8)A[S]="free";else if("x"===P){if("t"===O.charAt(0)===M?(E=0,L=1,C=v):(E=v-1,L=-1,C=-1),d){var I=m[S];for(n=E;n!==C;n+=L)if((s=l[n][I])&&(c=s.indexOf("y"),s.slice(0,c)===S)){A[S]=s.slice(c);break}}else for(n=E;n!==C;n+=L)if(o=r.yaxes[n],-1!==p.cartesian.indexOf(S+o)){A[S]=o;break}}else if("l"===O.charAt(0)?(E=0,L=1,C=g):(E=g-1,L=-1,C=-1),d){var D=m[S];for(n=E;n!==C;n+=L)if((s=l[D][n])&&(c=s.indexOf("y"),s.slice(c)===S)){A[S]=s.slice(0,c);break}}else for(n=E;n!==C;n+=L)if(a=r.xaxes[n],-1!==p.cartesian.indexOf(a+S)){A[S]=a;break}}}}}},69819:function(t,e,r){"use strict";var n=r(85555),i=r(44467).templatedArray;r(24695),t.exports=i("image",{visible:{valType:"boolean",dflt:!0,editType:"arraydraw"},source:{valType:"string",editType:"arraydraw"},layer:{valType:"enumerated",values:["below","above"],dflt:"above",editType:"arraydraw"},sizex:{valType:"number",dflt:0,editType:"arraydraw"},sizey:{valType:"number",dflt:0,editType:"arraydraw"},sizing:{valType:"enumerated",values:["fill","contain","stretch"],dflt:"contain",editType:"arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},x:{valType:"any",dflt:0,editType:"arraydraw"},y:{valType:"any",dflt:0,editType:"arraydraw"},xanchor:{valType:"enumerated",values:["left","center","right"],dflt:"left",editType:"arraydraw"},yanchor:{valType:"enumerated",values:["top","middle","bottom"],dflt:"top",editType:"arraydraw"},xref:{valType:"enumerated",values:["paper",n.idRegex.x.toString()],dflt:"paper",editType:"arraydraw"},yref:{valType:"enumerated",values:["paper",n.idRegex.y.toString()],dflt:"paper",editType:"arraydraw"},editType:"arraydraw"})},75378:function(t,e,r){"use strict";var n=r(92770),i=r(58163);t.exports=function(t,e,r,a){e=e||{};var o="log"===r&&"linear"===e.type,s="linear"===r&&"log"===e.type;if(o||s)for(var l,u,c=t._fullLayout.images,f=e._id.charAt(0),h=0;h<c.length;h++)if(u="images["+h+"].",(l=c[h])[f+"ref"]===e._id){var p=l[f],d=l["size"+f],v=null,g=null;if(o){v=i(p,e.range);var y=d/Math.pow(10,v)/2;g=2*Math.log(y+Math.sqrt(1+y*y))/Math.LN10}else g=(v=Math.pow(10,p))*(Math.pow(10,d/2)-Math.pow(10,-d/2));n(v)?n(g)||(g=null):(v=null,g=null),a(u+f,v),a(u+"size"+f,g)}}},81603:function(t,e,r){"use strict";var n=r(71828),i=r(89298),a=r(85501),o=r(69819);function s(t,e,r){function a(r,i){return n.coerce(t,e,o,r,i)}var s=a("source");if(!a("visible",!!s))return e;a("layer"),a("xanchor"),a("yanchor"),a("sizex"),a("sizey"),a("sizing"),a("opacity");for(var l={_fullLayout:r},u=["x","y"],c=0;c<2;c++){var f=u[c],h=i.coerceRef(t,e,l,f,"paper",void 0);"paper"!==h&&i.getFromId(l,h)._imgIndices.push(e._index),i.coercePosition(e,l,a,h,f,0)}return e}t.exports=function(t,e){a(t,e,{name:"images",handleItemDefaults:s})}},80750:function(t,e,r){"use strict";var n=r(39898),i=r(91424),a=r(89298),o=r(41675),s=r(77922);t.exports=function(t){var e,r,l=t._fullLayout,u=[],c={},f=[];for(r=0;r<l.images.length;r++){var h=l.images[r];if(h.visible)if("below"===h.layer&&"paper"!==h.xref&&"paper"!==h.yref){e=o.ref2id(h.xref)+o.ref2id(h.yref);var p=l._plots[e];if(!p){f.push(h);continue}p.mainplot&&(e=p.mainplot.id),c[e]||(c[e]=[]),c[e].push(h)}else"above"===h.layer?u.push(h):f.push(h)}var d={left:{sizing:"xMin",offset:0},center:{sizing:"xMid",offset:-.5},right:{sizing:"xMax",offset:-1}},v={top:{sizing:"YMin",offset:0},middle:{sizing:"YMid",offset:-.5},bottom:{sizing:"YMax",offset:-1}};function g(e){var r=n.select(this);if(this._imgSrc!==e.source)if(r.attr("xmlns",s.svg),e.source&&"data:"===e.source.slice(0,5))r.attr("xlink:href",e.source),this._imgSrc=e.source;else{var i=new Promise(function(t){var n=new Image;function i(){r.remove(),t()}this.img=n,n.setAttribute("crossOrigin","anonymous"),n.onerror=i,n.onload=function(){var e=document.createElement("canvas");e.width=this.width,e.height=this.height,e.getContext("2d",{willReadFrequently:!0}).drawImage(this,0,0);var n=e.toDataURL("image/png");r.attr("xlink:href",n),t()},r.on("error",i),n.src=e.source,this._imgSrc=e.source}.bind(this));t._promises.push(i)}}function y(e){var r,o,s=n.select(this),u=a.getFromId(t,e.xref),c=a.getFromId(t,e.yref),f="domain"===a.getRefType(e.xref),h="domain"===a.getRefType(e.yref),p=l._size;r=void 0!==u?"string"==typeof e.xref&&f?u._length*e.sizex:Math.abs(u.l2p(e.sizex)-u.l2p(0)):e.sizex*p.w,o=void 0!==c?"string"==typeof e.yref&&h?c._length*e.sizey:Math.abs(c.l2p(e.sizey)-c.l2p(0)):e.sizey*p.h;var g,y,m=r*d[e.xanchor].offset,x=o*v[e.yanchor].offset,b=d[e.xanchor].sizing+v[e.yanchor].sizing;switch(g=void 0!==u?"string"==typeof e.xref&&f?u._length*e.x+u._offset:u.r2p(e.x)+u._offset:e.x*p.w+p.l,g+=m,y=void 0!==c?"string"==typeof e.yref&&h?c._length*(1-e.y)+c._offset:c.r2p(e.y)+c._offset:p.h-e.y*p.h+p.t,y+=x,e.sizing){case"fill":b+=" slice";break;case"stretch":b="none"}s.attr({x:g,y:y,width:r,height:o,preserveAspectRatio:b,opacity:e.opacity});var _=(u&&"domain"!==a.getRefType(e.xref)?u._id:"")+(c&&"domain"!==a.getRefType(e.yref)?c._id:"");i.setClipUrl(s,_?"clip"+l._uid+_:null,t)}var m=l._imageLowerLayer.selectAll("image").data(f),x=l._imageUpperLayer.selectAll("image").data(u);m.enter().append("image"),x.enter().append("image"),m.exit().remove(),x.exit().remove(),m.each((function(t){g.bind(this)(t),y.bind(this)(t)})),x.each((function(t){g.bind(this)(t),y.bind(this)(t)}));var b=Object.keys(l._plots);for(r=0;r<b.length;r++){e=b[r];var _=l._plots[e];if(_.imagelayer){var w=_.imagelayer.selectAll("image").data(c[e]||[]);w.enter().append("image"),w.exit().remove(),w.each((function(t){g.bind(this)(t),y.bind(this)(t)}))}}}},68804:function(t,e,r){"use strict";t.exports={moduleType:"component",name:"images",layoutAttributes:r(69819),supplyLayoutDefaults:r(81603),includeBasePlot:r(76325)("images"),draw:r(80750),convertCoords:r(75378)}},33030:function(t,e,r){"use strict";var n=r(41940),i=r(22399);t.exports={_isSubplotObj:!0,visible:{valType:"boolean",dflt:!0,editType:"legend"},bgcolor:{valType:"color",editType:"legend"},bordercolor:{valType:"color",dflt:i.defaultLine,editType:"legend"},borderwidth:{valType:"number",min:0,dflt:0,editType:"legend"},font:n({editType:"legend"}),grouptitlefont:n({editType:"legend"}),orientation:{valType:"enumerated",values:["v","h"],dflt:"v",editType:"legend"},traceorder:{valType:"flaglist",flags:["reversed","grouped"],extras:["normal"],editType:"legend"},tracegroupgap:{valType:"number",min:0,dflt:10,editType:"legend"},entrywidth:{valType:"number",min:0,editType:"legend"},entrywidthmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"pixels",editType:"legend"},itemsizing:{valType:"enumerated",values:["trace","constant"],dflt:"trace",editType:"legend"},itemwidth:{valType:"number",min:30,dflt:30,editType:"legend"},itemclick:{valType:"enumerated",values:["toggle","toggleothers",!1],dflt:"toggle",editType:"legend"},itemdoubleclick:{valType:"enumerated",values:["toggle","toggleothers",!1],dflt:"toggleothers",editType:"legend"},groupclick:{valType:"enumerated",values:["toggleitem","togglegroup"],dflt:"togglegroup",editType:"legend"},x:{valType:"number",editType:"legend"},xref:{valType:"enumerated",dflt:"paper",values:["container","paper"],editType:"layoutstyle"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"left",editType:"legend"},y:{valType:"number",editType:"legend"},yref:{valType:"enumerated",dflt:"paper",values:["container","paper"],editType:"layoutstyle"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],editType:"legend"},uirevision:{valType:"any",editType:"none"},valign:{valType:"enumerated",values:["top","middle","bottom"],dflt:"middle",editType:"legend"},title:{text:{valType:"string",dflt:"",editType:"legend"},font:n({editType:"legend"}),side:{valType:"enumerated",values:["top","left","top left","top center","top right"],editType:"legend"},editType:"legend"},editType:"legend"}},14928:function(t){"use strict";t.exports={scrollBarWidth:6,scrollBarMinHeight:20,scrollBarColor:"#808BA4",scrollBarMargin:4,scrollBarEnterAttrs:{rx:20,ry:3,width:0,height:0},titlePad:2,itemGap:5}},99017:function(t,e,r){"use strict";var n=r(73972),i=r(71828),a=r(44467),o=r(9012),s=r(33030),l=r(10820),u=r(10130);function c(t,e,r,c){var f=e[t]||{},h=a.newContainer(r,t);function p(t,e){return i.coerce(f,h,s,t,e)}var d=i.coerceFont(p,"font",r.font);if(p("bgcolor",r.paper_bgcolor),p("bordercolor"),p("visible")){for(var v,g=function(t,e){var r=v._input,n=v;return i.coerce(r,n,o,t,e)},y=r.font||{},m=i.coerceFont(p,"grouptitlefont",i.extendFlat({},y,{size:Math.round(1.1*y.size)})),x=0,b=!1,_="normal",w=(r.shapes||[]).filter((function(t){return t.showlegend})),T=c.concat(w).filter((function(e){return t===(e.legend||"legend")})),k=0;k<T.length;k++)if((v=T[k]).visible){var A=v._isShape;(v.showlegend||v._dfltShowLegend&&!(v._module&&v._module.attributes&&v._module.attributes.showlegend&&!1===v._module.attributes.showlegend.dflt))&&(x++,v.showlegend&&(b=!0,(!A&&n.traceIs(v,"pie-like")||!0===v._input.showlegend)&&x++),i.coerceFont(g,"legendgrouptitle.font",m)),(!A&&n.traceIs(v,"bar")&&"stack"===r.barmode||-1!==["tonextx","tonexty"].indexOf(v.fill))&&(_=u.isGrouped({traceorder:_})?"grouped+reversed":"reversed"),void 0!==v.legendgroup&&""!==v.legendgroup&&(_=u.isReversed({traceorder:_})?"reversed+grouped":"grouped")}var M=i.coerce(e,r,l,"showlegend",b&&x>("legend"===t?1:0));if(!1===M&&(r[t]=void 0),(!1!==M||f.uirevision)&&(p("uirevision",r.uirevision),!1!==M)){p("borderwidth");var S,E,L,C="h"===p("orientation"),P="paper"===p("yref"),O="paper"===p("xref"),I="left";if(C?(S=0,n.getComponentMethod("rangeslider","isVisible")(e.xaxis)?P?(E=1.1,L="bottom"):(E=1,L="top"):P?(E=-.1,L="top"):(E=0,L="bottom")):(E=1,L="auto",O?S=1.02:(S=1,I="right")),i.coerce(f,h,{x:{valType:"number",editType:"legend",min:O?-2:0,max:O?3:1,dflt:S}},"x"),i.coerce(f,h,{y:{valType:"number",editType:"legend",min:P?-2:0,max:P?3:1,dflt:E}},"y"),p("traceorder",_),u.isGrouped(r[t])&&p("tracegroupgap"),p("entrywidth"),p("entrywidthmode"),p("itemsizing"),p("itemwidth"),p("itemclick"),p("itemdoubleclick"),p("groupclick"),p("xanchor",I),p("yanchor",L),p("valign"),i.noneOrAll(f,h,["x","y"]),p("title.text")){p("title.side",C?"left":"top");var D=i.extendFlat({},d,{size:i.bigFont(d.size)});i.coerceFont(p,"title.font",D)}}}}t.exports=function(t,e,r){var n,a=r.slice(),o=e.shapes;if(o)for(n=0;n<o.length;n++){var s=o[n];if(s.showlegend){var l={_input:s._input,visible:s.visible,showlegend:s.showlegend,legend:s.legend};a.push(l)}}var u=["legend"];for(n=0;n<a.length;n++)i.pushUnique(u,a[n].legend);for(e._legends=[],n=0;n<u.length;n++){var f=u[n];c(f,t,e,a),e[f]&&e[f].visible&&(e[f]._id=f),e._legends.push(f)}}},43969:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=r(74875),o=r(73972),s=r(11086),l=r(28569),u=r(91424),c=r(7901),f=r(63893),h=r(85167),p=r(14928),d=r(18783),v=d.LINE_SPACING,g=d.FROM_TL,y=d.FROM_BR,m=r(82424),x=r(53630),b=r(10130),_=1,w=/^legend[0-9]*$/;function T(t,e){var r,s,h=e||{},d=t._fullLayout,w=O(h),T=h._inHover;if(T?(s=h.layer,r="hover"):(s=d._infolayer,r=w),s){var S;if(r+=d._uid,t._legendMouseDownTime||(t._legendMouseDownTime=0),T){if(!h.entries)return;S=m(h.entries,h)}else{for(var I=(t.calcdata||[]).slice(),D=d.shapes,z=0;z<D.length;z++){var R=D[z];if(R.showlegend){var F={_isShape:!0,_fullInput:R,index:R._index,name:R.name||R.label.text||"shape "+R._index,legend:R.legend,legendgroup:R.legendgroup,legendgrouptitle:R.legendgrouptitle,legendrank:R.legendrank,legendwidth:R.legendwidth,showlegend:R.showlegend,visible:R.visible,opacity:R.opacity,mode:"line"===R.type?"lines":"markers",line:R.line,marker:{line:R.line,color:R.fillcolor,size:12,symbol:"rect"===R.type?"square":"circle"===R.type?"circle":"hexagon2"}};I.push([{trace:F}])}}S=d.showlegend&&m(I,h,d._legends.length>1)}var B=d.hiddenlabels||[];if(!(T||d.showlegend&&S.length))return s.selectAll("."+w).remove(),d._topdefs.select("#"+r).remove(),a.autoMargin(t,w);var N=i.ensureSingle(s,"g",w,(function(t){T||t.attr("pointer-events","all")})),j=i.ensureSingleById(d._topdefs,"clipPath",r,(function(t){t.append("rect")})),U=i.ensureSingle(N,"rect","bg",(function(t){t.attr("shape-rendering","crispEdges")}));U.call(c.stroke,h.bordercolor).call(c.fill,h.bgcolor).style("stroke-width",h.borderwidth+"px");var V,H=i.ensureSingle(N,"g","scrollbox"),q=h.title;h._titleWidth=0,h._titleHeight=0,q.text?((V=i.ensureSingle(H,"text",w+"titletext")).attr("text-anchor","start").call(u.font,q.font).text(q.text),L(V,H,t,h,_)):H.selectAll("."+w+"titletext").remove();var G=i.ensureSingle(N,"rect","scrollbar",(function(t){t.attr(p.scrollBarEnterAttrs).call(c.fill,p.scrollBarColor)})),Z=H.selectAll("g.groups").data(S);Z.enter().append("g").attr("class","groups"),Z.exit().remove();var Y=Z.selectAll("g.traces").data(i.identity);Y.enter().append("g").attr("class","traces"),Y.exit().remove(),Y.style("opacity",(function(t){var e=t[0].trace;return o.traceIs(e,"pie-like")?-1!==B.indexOf(t[0].label)?.5:1:"legendonly"===e.visible?.5:1})).each((function(){n.select(this).call(M,t,h)})).call(x,t,h).each((function(){T||n.select(this).call(E,t,w)})),i.syncOrAsync([a.previousPromises,function(){return function(t,e,r,i){var a=t._fullLayout,o=O(i);i||(i=a[o]);var s=a._size,l=b.isVertical(i),c=b.isGrouped(i),f="fraction"===i.entrywidthmode,h=i.borderwidth,d=2*h,v=p.itemGap,g=i.itemwidth+2*v,y=2*(h+v),m=P(i),x=i.y<0||0===i.y&&"top"===m,_=i.y>1||1===i.y&&"bottom"===m,w=i.tracegroupgap,T={};i._maxHeight=Math.max(x||_?a.height/2:s.h,30);var A=0;i._width=0,i._height=0;var M=function(t){var e=0,r=0,n=t.title.side;return n&&(-1!==n.indexOf("left")&&(e=t._titleWidth),-1!==n.indexOf("top")&&(r=t._titleHeight)),[e,r]}(i);if(l)r.each((function(t){var e=t[0].height;u.setTranslate(this,h+M[0],h+M[1]+i._height+e/2+v),i._height+=e,i._width=Math.max(i._width,t[0].width)})),A=g+i._width,i._width+=v+g+d,i._height+=y,c&&(e.each((function(t,e){u.setTranslate(this,0,e*i.tracegroupgap)})),i._height+=(i._lgroupsLength-1)*i.tracegroupgap);else{var S=C(i),E=i.x<0||0===i.x&&"right"===S,L=i.x>1||1===i.x&&"left"===S,I=_||x,D=a.width/2;i._maxWidth=Math.max(E?I&&"left"===S?s.l+s.w:D:L?I&&"right"===S?s.r+s.w:D:s.w,2*g);var z=0,R=0;r.each((function(t){var e=k(t,i,g);z=Math.max(z,e),R+=e})),A=null;var F=0;if(c){var B=0,N=0,j=0;e.each((function(){var t=0,e=0;n.select(this).selectAll("g.traces").each((function(r){var n=k(r,i,g),a=r[0].height;u.setTranslate(this,M[0],M[1]+h+v+a/2+e),e+=a,t=Math.max(t,n),T[r[0].trace.legendgroup]=t}));var r=t+v;N>0&&r+h+N>i._maxWidth?(F=Math.max(F,N),N=0,j+=B+w,B=e):B=Math.max(B,e),u.setTranslate(this,N,j),N+=r})),i._width=Math.max(F,N)+h,i._height=j+B+y}else{var U=r.size(),V=R+d+(U-1)*v<i._maxWidth,H=0,q=0,G=0,Z=0;r.each((function(t){var e=t[0].height,r=k(t,i,g),n=V?r:z;f||(n+=v),n+h+q-v>=i._maxWidth&&(F=Math.max(F,Z),q=0,G+=H,i._height+=H,H=0),u.setTranslate(this,M[0]+h+q,M[1]+h+G+e/2+v),Z=q+r+v,q+=n,H=Math.max(H,e)})),V?(i._width=q+d,i._height=H+y):(i._width=Math.max(F,Z)+d,i._height+=H+y)}}i._width=Math.ceil(Math.max(i._width+M[0],i._titleWidth+2*(h+p.titlePad))),i._height=Math.ceil(Math.max(i._height+M[1],i._titleHeight+2*(h+p.itemGap))),i._effHeight=Math.min(i._height,i._maxHeight);var Y=t._context.edits,W=Y.legendText||Y.legendPosition;r.each((function(t){var e=n.select(this).select("."+o+"toggle"),r=t[0].height,a=t[0].trace.legendgroup,s=k(t,i,g);c&&""!==a&&(s=T[a]);var h=W?g:A||s;l||f||(h+=v/2),u.setRect(e,0,-r/2,h,r)}))}(t,Z,Y,h)},function(){var e,c,m,x,b=d._size,_=h.borderwidth,k="paper"===h.xref,M="paper"===h.yref;if(q.text&&function(t,e,r){if("top center"===e.title.side||"top right"===e.title.side){var n=e.title.font.size*v,i=0,a=t.node(),o=u.bBox(a).width;"top center"===e.title.side?i=.5*(e._width-2*r-2*p.titlePad-o):"top right"===e.title.side&&(i=e._width-2*r-2*p.titlePad-o),f.positionText(t,r+p.titlePad+i,r+n)}}(V,h,_),!T){var S,E;S=k?b.l+b.w*h.x-g[C(h)]*h._width:d.width*h.x-g[C(h)]*h._width,E=M?b.t+b.h*(1-h.y)-g[P(h)]*h._effHeight:d.height*(1-h.y)-g[P(h)]*h._effHeight;var L=function(t,e,r,n){var i=t._fullLayout,o=i[e],s=C(o),l=P(o),u="paper"===o.xref,c="paper"===o.yref;t._fullLayout._reservedMargin[e]={};var f=o.y<.5?"b":"t",h=o.x<.5?"l":"r",p={r:i.width-r,l:r+o._width,b:i.height-n,t:n+o._effHeight};if(u&&c)return a.autoMargin(t,e,{x:o.x,y:o.y,l:o._width*g[s],r:o._width*y[s],b:o._effHeight*y[l],t:o._effHeight*g[l]});u?t._fullLayout._reservedMargin[e][f]=p[f]:c||"v"===o.orientation?t._fullLayout._reservedMargin[e][h]=p[h]:t._fullLayout._reservedMargin[e][f]=p[f]}(t,w,S,E);if(L)return;if(d.margin.autoexpand){var O=S,I=E;S=k?i.constrain(S,0,d.width-h._width):O,E=M?i.constrain(E,0,d.height-h._effHeight):I,S!==O&&i.log("Constrain "+w+".x to make legend fit inside graph"),E!==I&&i.log("Constrain "+w+".y to make legend fit inside graph")}u.setTranslate(N,S,E)}if(G.on(".drag",null),N.on("wheel",null),T||h._height<=h._maxHeight||t._context.staticPlot){var D=h._effHeight;T&&(D=h._height),U.attr({width:h._width-_,height:D-_,x:_/2,y:_/2}),u.setTranslate(H,0,0),j.select("rect").attr({width:h._width-2*_,height:D-2*_,x:_,y:_}),u.setClipUrl(H,r,t),u.setRect(G,0,0,0,0),delete h._scrollY}else{var z,R,F,B=Math.max(p.scrollBarMinHeight,h._effHeight*h._effHeight/h._height),Z=h._effHeight-B-2*p.scrollBarMargin,Y=h._height-h._effHeight,W=Z/Y,X=Math.min(h._scrollY||0,Y);U.attr({width:h._width-2*_+p.scrollBarWidth+p.scrollBarMargin,height:h._effHeight-_,x:_/2,y:_/2}),j.select("rect").attr({width:h._width-2*_+p.scrollBarWidth+p.scrollBarMargin,height:h._effHeight-2*_,x:_,y:_+X}),u.setClipUrl(H,r,t),$(X,B,W),N.on("wheel",(function(){$(X=i.constrain(h._scrollY+n.event.deltaY/Z*Y,0,Y),B,W),0!==X&&X!==Y&&n.event.preventDefault()}));var J=n.behavior.drag().on("dragstart",(function(){var t=n.event.sourceEvent;z="touchstart"===t.type?t.changedTouches[0].clientY:t.clientY,F=X})).on("drag",(function(){var t=n.event.sourceEvent;2===t.buttons||t.ctrlKey||(R="touchmove"===t.type?t.changedTouches[0].clientY:t.clientY,X=function(t,e,r){var n=(r-e)/W+t;return i.constrain(n,0,Y)}(F,z,R),$(X,B,W))}));G.call(J);var K=n.behavior.drag().on("dragstart",(function(){var t=n.event.sourceEvent;"touchstart"===t.type&&(z=t.changedTouches[0].clientY,F=X)})).on("drag",(function(){var t=n.event.sourceEvent;"touchmove"===t.type&&(R=t.changedTouches[0].clientY,X=function(t,e,r){var n=(e-r)/W+t;return i.constrain(n,0,Y)}(F,z,R),$(X,B,W))}));H.call(K)}function $(e,r,n){h._scrollY=t._fullLayout[w]._scrollY=e,u.setTranslate(H,0,-e),u.setRect(G,h._width,p.scrollBarMargin+e*n,p.scrollBarWidth,r),j.select("rect").attr("y",_+e)}t._context.edits.legendPosition&&(N.classed("cursor-move",!0),l.init({element:N.node(),gd:t,prepFn:function(){var t=u.getTranslate(N);m=t.x,x=t.y},moveFn:function(t,r){var n=m+t,i=x+r;u.setTranslate(N,n,i),e=l.align(n,h._width,b.l,b.l+b.w,h.xanchor),c=l.align(i+h._height,-h._height,b.t+b.h,b.t,h.yanchor)},doneFn:function(){if(void 0!==e&&void 0!==c){var r={};r[w+".x"]=e,r[w+".y"]=c,o.call("_guiRelayout",t,r)}},clickFn:function(e,r){var n=s.selectAll("g.traces").filter((function(){var t=this.getBoundingClientRect();return r.clientX>=t.left&&r.clientX<=t.right&&r.clientY>=t.top&&r.clientY<=t.bottom}));n.size()>0&&A(t,N,n,e,r)}}))}],t)}}function k(t,e,r){var n=t[0],i=n.width,a=e.entrywidthmode,o=n.trace.legendwidth||e.entrywidth;return"fraction"===a?e._maxWidth*o:r+(o||i)}function A(t,e,r,n,i){var a=r.data()[0][0].trace,l={event:i,node:r.node(),curveNumber:a.index,expandedIndex:a._expandedIndex,data:t.data,layout:t.layout,frames:t._transitionData._frames,config:t._context,fullData:t._fullData,fullLayout:t._fullLayout};a._group&&(l.group=a._group),o.traceIs(a,"pie-like")&&(l.label=r.datum()[0].label);var u=s.triggerHandler(t,"plotly_legendclick",l);if(1===n){if(!1===u)return;e._clickTimeout=setTimeout((function(){t._fullLayout&&h(r,t,n)}),t._context.doubleClickDelay)}else 2===n&&(e._clickTimeout&&clearTimeout(e._clickTimeout),t._legendMouseDownTime=0,!1!==s.triggerHandler(t,"plotly_legenddoubleclick",l)&&!1!==u&&h(r,t,n))}function M(t,e,r){var n,a,s=O(r),l=t.data()[0][0],c=l.trace,h=o.traceIs(c,"pie-like"),d=!r._inHover&&e._context.edits.legendText&&!h,v=r._maxNameLength;l.groupTitle?(n=l.groupTitle.text,a=l.groupTitle.font):(a=r.font,r.entries?n=l.text:(n=h?l.label:c.name,c._meta&&(n=i.templateString(n,c._meta))));var g=i.ensureSingle(t,"text",s+"text");g.attr("text-anchor","start").call(u.font,a).text(d?S(n,v):n);var y=r.itemwidth+2*p.itemGap;f.positionText(g,y,0),d?g.call(f.makeEditable,{gd:e,text:n}).call(L,t,e,r).on("edit",(function(n){this.text(S(n,v)).call(L,t,e,r);var a=l.trace._fullInput||{},s={};if(o.hasTransform(a,"groupby")){var u=o.getTransformIndices(a,"groupby"),f=u[u.length-1],h=i.keyedContainer(a,"transforms["+f+"].styles","target","value.name");h.set(l.trace._group,n),s=h.constructUpdate()}else s.name=n;return a._isShape?o.call("_guiRelayout",e,"shapes["+c.index+"].name",s.name):o.call("_guiRestyle",e,s,c.index)})):L(g,t,e,r)}function S(t,e){var r=Math.max(4,e);if(t&&t.trim().length>=r/2)return t;for(var n=r-(t=t||"").length;n>0;n--)t+=" ";return t}function E(t,e,r){var a,o=e._context.doubleClickDelay,s=1,l=i.ensureSingle(t,"rect",r+"toggle",(function(t){e._context.staticPlot||t.style("cursor","pointer").attr("pointer-events","all"),t.call(c.fill,"rgba(0,0,0,0)")}));e._context.staticPlot||(l.on("mousedown",(function(){(a=(new Date).getTime())-e._legendMouseDownTime<o?s+=1:(s=1,e._legendMouseDownTime=a)})),l.on("mouseup",(function(){if(!e._dragged&&!e._editing){var i=e._fullLayout[r];(new Date).getTime()-e._legendMouseDownTime>o&&(s=Math.max(s-1,1)),A(e,i,t,s,n.event)}})))}function L(t,e,r,n,i){n._inHover&&t.attr("data-notex",!0),f.convertToTspans(t,r,(function(){!function(t,e,r,n){var i=t.data()[0][0];if(r._inHover||!i||i.trace.showlegend){var a=t.select("g[class*=math-group]"),o=a.node(),s=O(r);r||(r=e._fullLayout[s]);var l,c,h=r.borderwidth,d=(n===_?r.title.font:i.groupTitle?i.groupTitle.font:r.font).size*v;if(o){var g=u.bBox(o);l=g.height,c=g.width,n===_?u.setTranslate(a,h,h+.75*l):u.setTranslate(a,0,.25*l)}else{var y="."+s+(n===_?"title":"")+"text",m=t.select(y),x=f.lineCount(m),b=m.node();if(l=d*x,c=b?u.bBox(b).width:0,n===_)"left"===r.title.side&&(c+=2*p.itemGap),f.positionText(m,h+p.titlePad,h+d);else{var w=2*p.itemGap+r.itemwidth;i.groupTitle&&(w=p.itemGap,c-=r.itemwidth),f.positionText(m,w,-d*((x-1)/2-.3))}}n===_?(r._titleWidth=c,r._titleHeight=l):(i.lineHeight=d,i.height=Math.max(l,16)+3,i.width=c)}else t.remove()}(e,r,n,i)}))}function C(t){return i.isRightAnchor(t)?"right":i.isCenterAnchor(t)?"center":"left"}function P(t){return i.isBottomAnchor(t)?"bottom":i.isMiddleAnchor(t)?"middle":"top"}function O(t){return t._id||"legend"}t.exports=function(t,e){if(e)T(t,e);else{var r=t._fullLayout,i=r._legends;r._infolayer.selectAll('[class^="legend"]').each((function(){var t=n.select(this),e=t.attr("class").split(" ")[0];e.match(w)&&-1===i.indexOf(e)&&t.remove()}));for(var a=0;a<i.length;a++){var o=i[a];T(t,t._fullLayout[o])}}}},82424:function(t,e,r){"use strict";var n=r(73972),i=r(10130);t.exports=function(t,e,r){var a,o,s=e._inHover,l=i.isGrouped(e),u=i.isReversed(e),c={},f=[],h=!1,p={},d=0,v=0;function g(t,n,a){if(!1!==e.visible&&(!r||t===e._id))if(""!==n&&i.isGrouped(e))-1===f.indexOf(n)?(f.push(n),h=!0,c[n]=[a]):c[n].push(a);else{var o="~~i"+d;f.push(o),c[o]=[a],d++}}for(a=0;a<t.length;a++){var y=t[a],m=y[0],x=m.trace,b=x.legend,_=x.legendgroup;if(s||x.visible&&x.showlegend)if(n.traceIs(x,"pie-like"))for(p[_]||(p[_]={}),o=0;o<y.length;o++){var w=y[o].label;p[_][w]||(g(b,_,{label:w,color:y[o].color,i:y[o].i,trace:x,pts:y[o].pts}),p[_][w]=!0,v=Math.max(v,(w||"").length))}else g(b,_,m),v=Math.max(v,(x.name||"").length)}if(!f.length)return[];var T=!h||!l,k=[];for(a=0;a<f.length;a++){var A=c[f[a]];T?k.push(A[0]):k.push(A)}for(T&&(k=[k]),a=0;a<k.length;a++){var M=1/0;for(o=0;o<k[a].length;o++){var S=k[a][o].trace.legendrank;M>S&&(M=S)}k[a][0]._groupMinRank=M,k[a][0]._preGroupSort=a}var E=function(t,e){return t.trace.legendrank-e.trace.legendrank||t._preSort-e._preSort};for(k.forEach((function(t,e){t[0]._preGroupSort=e})),k.sort((function(t,e){return t[0]._groupMinRank-e[0]._groupMinRank||t[0]._preGroupSort-e[0]._preGroupSort})),a=0;a<k.length;a++){k[a].forEach((function(t,e){t._preSort=e})),k[a].sort(E);var L=k[a][0].trace,C=null;for(o=0;o<k[a].length;o++){var P=k[a][o].trace.legendgrouptitle;if(P&&P.text){C=P,s&&(P.font=e._groupTitleFont);break}}if(u&&k[a].reverse(),C){var O=!1;for(o=0;o<k[a].length;o++)if(n.traceIs(k[a][o].trace,"pie-like")){O=!0;break}k[a].unshift({i:-1,groupTitle:C,noClick:O,trace:{showlegend:L.showlegend,legendgroup:L.legendgroup,visible:"toggleitem"===e.groupclick||L.visible}})}for(o=0;o<k[a].length;o++)k[a][o]=[k[a][o]]}return e._lgroupsLength=k.length,e._maxNameLength=v,k}},85167:function(t,e,r){"use strict";var n=r(73972),i=r(71828),a=i.pushUnique,o=!0;t.exports=function(t,e,r){var s=e._fullLayout;if(!e._dragged&&!e._editing){var l,u=s.legend.itemclick,c=s.legend.itemdoubleclick,f=s.legend.groupclick;if(1===r&&"toggle"===u&&"toggleothers"===c&&o&&e.data&&e._context.showTips?(i.notifier(i._(e,"Double-click on legend to isolate one trace"),"long"),o=!1):o=!1,1===r?l=u:2===r&&(l=c),l){var h="togglegroup"===f,p=s.hiddenlabels?s.hiddenlabels.slice():[],d=t.data()[0][0];if(!d.groupTitle||!d.noClick){var v=e._fullData,g=(s.shapes||[]).filter((function(t){return t.showlegend})),y=v.concat(g),m=d.trace;m._isShape&&(m=m._fullInput);var x,b,_,w,T,k=m.legendgroup,A={},M=[],S=[],E=[],L=(s.shapes||[]).map((function(t){return t._input})),C=!1,P=m.legend,O=m._fullInput;if(O&&O._isShape||!n.traceIs(m,"pie-like")){var I,D=k&&k.length,z=[];if(D)for(x=0;x<y.length;x++)(I=y[x]).visible&&I.legendgroup===k&&z.push(x);if("toggle"===l){var R;switch(m.visible){case!0:R="legendonly";break;case!1:R=!1;break;case"legendonly":R=!0}if(D)if(h)for(x=0;x<y.length;x++){var F=y[x];!1!==F.visible&&F.legendgroup===k&&tt(F,R)}else tt(m,R);else tt(m,R)}else if("toggleothers"===l){var B,N,j,U,V=!0;for(x=0;x<y.length;x++)if(B=(U=y[x])===m,N=!0!==U.showlegend,!(B||N||D&&U.legendgroup===k||U.legend!==P||!0!==U.visible||n.traceIs(U,"notLegendIsolatable"))){V=!1;break}for(x=0;x<y.length;x++)if(!1!==(U=y[x]).visible&&U.legend===P&&!n.traceIs(U,"notLegendIsolatable"))switch(m.visible){case"legendonly":tt(U,!0);break;case!0:j=!!V||"legendonly",B=U===m,N=!0!==U.showlegend&&!U.legendgroup,tt(U,!!(B||D&&U.legendgroup===k||N)||j)}}for(x=0;x<S.length;x++)if(_=S[x]){var H=_.constructUpdate(),q=Object.keys(H);for(b=0;b<q.length;b++)w=q[b],(A[w]=A[w]||[])[E[x]]=H[w]}for(T=Object.keys(A),x=0;x<T.length;x++)for(w=T[x],b=0;b<M.length;b++)A[w].hasOwnProperty(b)||(A[w][b]=void 0);C?n.call("_guiUpdate",e,A,{shapes:L},M):n.call("_guiRestyle",e,A,M)}else{var G=d.label,Z=p.indexOf(G);if("toggle"===l)-1===Z?p.push(G):p.splice(Z,1);else if("toggleothers"===l){var Y=-1!==Z,W=[];for(x=0;x<e.calcdata.length;x++){var X=e.calcdata[x];for(b=0;b<X.length;b++){var J=X[b].label;P===X[0].trace.legend&&G!==J&&(-1===p.indexOf(J)&&(Y=!0),a(p,J),W.push(J))}}if(!Y)for(var K=0;K<W.length;K++){var $=p.indexOf(W[K]);-1!==$&&p.splice($,1)}}n.call("_guiRelayout",e,"hiddenlabels",p)}}}}function Q(t,e){var r=M.indexOf(t),n=A.visible;return n||(n=A.visible=[]),-1===M.indexOf(t)&&(M.push(t),r=M.length-1),n[r]=e,r}function tt(t,e){if(!d.groupTitle||h){var r,a=t._fullInput||t,o=a._isShape,s=a.index;if(void 0===s&&(s=a._index),n.hasTransform(a,"groupby")){var l=S[s];if(!l){var u=n.getTransformIndices(a,"groupby"),c=u[u.length-1];l=i.keyedContainer(a,"transforms["+c+"].styles","target","value.visible"),S[s]=l}var f=l.get(t._group);void 0===f&&(f=!0),!1!==f&&l.set(t._group,e),E[s]=Q(s,!1!==a.visible)}else{var p=!1!==a.visible&&e;o?(r=p,L[s].visible=r,C=!0):Q(s,p)}}}}},10130:function(t,e){"use strict";e.isGrouped=function(t){return-1!==(t.traceorder||"").indexOf("grouped")},e.isVertical=function(t){return"h"!==t.orientation},e.isReversed=function(t){return-1!==(t.traceorder||"").indexOf("reversed")}},2199:function(t,e,r){"use strict";t.exports={moduleType:"component",name:"legend",layoutAttributes:r(33030),supplyLayoutDefaults:r(99017),draw:r(43969),style:r(53630)}},53630:function(t,e,r){"use strict";var n=r(39898),i=r(73972),a=r(71828),o=a.strTranslate,s=r(91424),l=r(7901),u=r(52075).extractOpts,c=r(34098),f=r(63463),h=r(53581).castOption,p=r(14928);function d(t,e){return(e?"radial":"horizontal")+(t?"":"reversed")}function v(t){var e=t[0].trace,r=e.contours,n=c.hasLines(e),i=c.hasMarkers(e),a=e.visible&&e.fill&&"none"!==e.fill,o=!1,s=!1;if(r){var l=r.coloring;"lines"===l?o=!0:n="none"===l||"heatmap"===l||r.showlines,"constraint"===r.type?a="="!==r._operation:"fill"!==l&&"heatmap"!==l||(s=!0)}return{showMarker:i,showLine:n,showFill:a,showGradientLine:o,showGradientFill:s,anyLine:n||o,anyFill:a||s}}function g(t,e,r){return t&&a.isArrayOrTypedArray(t)?e:t>r?r:t}t.exports=function(t,e,r){var y=e._fullLayout;r||(r=y.legend);var m="constant"===r.itemsizing,x=r.itemwidth,b=(x+2*p.itemGap)/2,_=o(b,0),w=function(t,e,r,n){var i;if(t+1)i=t;else{if(!(e&&e.width>0))return 0;i=e.width}return m?n:Math.min(i,r)};function T(t,a,o){var c=t[0].trace,f=c.marker||{},h=f.line||{},p=o?c.visible&&c.type===o:i.traceIs(c,"bar"),d=n.select(a).select("g.legendpoints").selectAll("path.legend"+o).data(p?[t]:[]);d.enter().append("path").classed("legend"+o,!0).attr("d","M6,6H-6V-6H6Z").attr("transform",_),d.exit().remove(),d.each((function(t){var i=n.select(this),a=t[0],o=w(a.mlw,f.line,5,2);i.style("stroke-width",o+"px");var p=a.mcc;if(!r._inHover&&"mc"in a){var d=u(f),v=d.mid;void 0===v&&(v=(d.max+d.min)/2),p=s.tryColorscale(f,"")(v)}var y=p||a.mc||f.color,m=f.pattern,x=m&&s.getPatternAttr(m.shape,0,"");if(x){var b=s.getPatternAttr(m.bgcolor,0,null),_=s.getPatternAttr(m.fgcolor,0,null),T=m.fgopacity,k=g(m.size,8,10),A=g(m.solidity,.5,1),M="legend-"+c.uid;i.call(s.pattern,"legend",e,M,x,k,A,p,m.fillmode,b,_,T)}else i.call(l.fill,y);o&&l.stroke(i,a.mlc||h.color)}))}function k(t,r,o){var s=t[0],l=s.trace,u=o?l.visible&&l.type===o:i.traceIs(l,o),c=n.select(r).select("g.legendpoints").selectAll("path.legend"+o).data(u?[t]:[]);if(c.enter().append("path").classed("legend"+o,!0).attr("d","M6,6H-6V-6H6Z").attr("transform",_),c.exit().remove(),c.size()){var p=l.marker||{},d=w(h(p.line.width,s.pts),p.line,5,2),v="pieLike",g=a.minExtend(l,{marker:{line:{width:d}}},v),y=a.minExtend(s,{trace:g},v);f(c,y,g,e)}}t.each((function(t){var e=n.select(this),i=a.ensureSingle(e,"g","layers");i.style("opacity",t[0].trace.opacity);var s=r.valign,l=t[0].lineHeight,u=t[0].height;if("middle"!==s&&l&&u){var c={top:1,bottom:-1}[s]*(.5*(l-u+3));i.attr("transform",o(0,c))}else i.attr("transform",null);i.selectAll("g.legendfill").data([t]).enter().append("g").classed("legendfill",!0),i.selectAll("g.legendlines").data([t]).enter().append("g").classed("legendlines",!0);var f=i.selectAll("g.legendsymbols").data([t]);f.enter().append("g").classed("legendsymbols",!0),f.selectAll("g.legendpoints").data([t]).enter().append("g").classed("legendpoints",!0)})).each((function(t){var r,i=t[0].trace,o=[];if(i.visible)switch(i.type){case"histogram2d":case"heatmap":o=[["M-15,-2V4H15V-2Z"]],r=!0;break;case"choropleth":case"choroplethmapbox":o=[["M-6,-6V6H6V-6Z"]],r=!0;break;case"densitymapbox":o=[["M-6,0 a6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0"]],r="radial";break;case"cone":o=[["M-6,2 A2,2 0 0,0 -6,6 V6L6,4Z"],["M-6,-6 A2,2 0 0,0 -6,-2 L6,-4Z"],["M-6,-2 A2,2 0 0,0 -6,2 L6,0Z"]],r=!1;break;case"streamtube":o=[["M-6,2 A2,2 0 0,0 -6,6 H6 A2,2 0 0,1 6,2 Z"],["M-6,-6 A2,2 0 0,0 -6,-2 H6 A2,2 0 0,1 6,-6 Z"],["M-6,-2 A2,2 0 0,0 -6,2 H6 A2,2 0 0,1 6,-2 Z"]],r=!1;break;case"surface":o=[["M-6,-6 A2,3 0 0,0 -6,0 H6 A2,3 0 0,1 6,-6 Z"],["M-6,1 A2,3 0 0,1 -6,6 H6 A2,3 0 0,0 6,0 Z"]],r=!0;break;case"mesh3d":o=[["M-6,6H0L-6,-6Z"],["M6,6H0L6,-6Z"],["M-6,-6H6L0,6Z"]],r=!1;break;case"volume":o=[["M-6,6H0L-6,-6Z"],["M6,6H0L6,-6Z"],["M-6,-6H6L0,6Z"]],r=!0;break;case"isosurface":o=[["M-6,6H0L-6,-6Z"],["M6,6H0L6,-6Z"],["M-6,-6 A12,24 0 0,0 6,-6 L0,6Z"]],r=!1}var c=n.select(this).select("g.legendpoints").selectAll("path.legend3dandfriends").data(o);c.enter().append("path").classed("legend3dandfriends",!0).attr("transform",_).style("stroke-miterlimit",1),c.exit().remove(),c.each((function(t,o){var c,f=n.select(this),h=u(i),p=h.colorscale,v=h.reversescale;if(p){if(!r){var g=p.length;c=0===o?p[v?g-1:0][1]:1===o?p[v?0:g-1][1]:p[Math.floor((g-1)/2)][1]}}else{var y=i.vertexcolor||i.facecolor||i.color;c=a.isArrayOrTypedArray(y)?y[o]||y[0]:y}f.attr("d",t[0]),c?f.call(l.fill,c):f.call((function(t){if(t.size()){var n="legendfill-"+i.uid;s.gradient(t,e,n,d(v,"radial"===r),p,"fill")}}))}))})).each((function(t){var e=t[0].trace,r="waterfall"===e.type;if(t[0]._distinct&&r){var i=t[0].trace[t[0].dir].marker;return t[0].mc=i.color,t[0].mlw=i.line.width,t[0].mlc=i.line.color,T(t,this,"waterfall")}var a=[];e.visible&&r&&(a=t[0].hasTotals?[["increasing","M-6,-6V6H0Z"],["totals","M6,6H0L-6,-6H-0Z"],["decreasing","M6,6V-6H0Z"]]:[["increasing","M-6,-6V6H6Z"],["decreasing","M6,6V-6H-6Z"]]);var o=n.select(this).select("g.legendpoints").selectAll("path.legendwaterfall").data(a);o.enter().append("path").classed("legendwaterfall",!0).attr("transform",_).style("stroke-miterlimit",1),o.exit().remove(),o.each((function(t){var r=n.select(this),i=e[t[0]].marker,a=w(void 0,i.line,5,2);r.attr("d",t[1]).style("stroke-width",a+"px").call(l.fill,i.color),a&&r.call(l.stroke,i.line.color)}))})).each((function(t){T(t,this,"funnel")})).each((function(t){T(t,this)})).each((function(t){var r=t[0].trace,o=n.select(this).select("g.legendpoints").selectAll("path.legendbox").data(r.visible&&i.traceIs(r,"box-violin")?[t]:[]);o.enter().append("path").classed("legendbox",!0).attr("d","M6,6H-6V-6H6Z").attr("transform",_),o.exit().remove(),o.each((function(){var t=n.select(this);if("all"!==r.boxpoints&&"all"!==r.points||0!==l.opacity(r.fillcolor)||0!==l.opacity((r.line||{}).color)){var i=w(void 0,r.line,5,2);t.style("stroke-width",i+"px").call(l.fill,r.fillcolor),i&&l.stroke(t,r.line.color)}else{var u=a.minExtend(r,{marker:{size:m?12:a.constrain(r.marker.size,2,16),sizeref:1,sizemin:1,sizemode:"diameter"}});o.call(s.pointStyle,u,e)}}))})).each((function(t){k(t,this,"funnelarea")})).each((function(t){k(t,this,"pie")})).each((function(t){var r,i,o=v(t),l=o.showFill,f=o.showLine,h=o.showGradientLine,p=o.showGradientFill,g=o.anyFill,y=o.anyLine,m=t[0],b=m.trace,_=u(b),T=_.colorscale,k=_.reversescale,A=c.hasMarkers(b)||!g?"M5,0":y?"M5,-2":"M5,-3",M=n.select(this),S=M.select(".legendfill").selectAll("path").data(l||p?[t]:[]);if(S.enter().append("path").classed("js-fill",!0),S.exit().remove(),S.attr("d",A+"h"+x+"v6h-"+x+"z").call((function(t){if(t.size())if(l)s.fillGroupStyle(t,e);else{var r="legendfill-"+b.uid;s.gradient(t,e,r,d(k),T,"fill")}})),f||h){var E=w(void 0,b.line,10,5);i=a.minExtend(b,{line:{width:E}}),r=[a.minExtend(m,{trace:i})]}var L=M.select(".legendlines").selectAll("path").data(f||h?[r]:[]);L.enter().append("path").classed("js-line",!0),L.exit().remove(),L.attr("d",A+(h?"l"+x+",0.0001":"h"+x)).call(f?s.lineGroupStyle:function(t){if(t.size()){var r="legendline-"+b.uid;s.lineGroupStyle(t),s.gradient(t,e,r,d(k),T,"stroke")}})})).each((function(t){var r,i,o=v(t),l=o.anyFill,u=o.anyLine,f=o.showLine,h=o.showMarker,p=t[0],d=p.trace,g=!h&&!u&&!l&&c.hasText(d);function y(t,e,r,n){var i=a.nestedProperty(d,t).get(),o=a.isArrayOrTypedArray(i)&&e?e(i):i;if(m&&o&&void 0!==n&&(o=n),r){if(o<r[0])return r[0];if(o>r[1])return r[1]}return o}function x(t){return p._distinct&&p.index&&t[p.index]?t[p.index]:t[0]}if(h||g||f){var b={},w={};if(h){b.mc=y("marker.color",x),b.mx=y("marker.symbol",x),b.mo=y("marker.opacity",a.mean,[.2,1]),b.mlc=y("marker.line.color",x),b.mlw=y("marker.line.width",a.mean,[0,5],2),w.marker={sizeref:1,sizemin:1,sizemode:"diameter"};var T=y("marker.size",a.mean,[2,16],12);b.ms=T,w.marker.size=T}f&&(w.line={width:y("line.width",x,[0,10],5)}),g&&(b.tx="Aa",b.tp=y("textposition",x),b.ts=10,b.tc=y("textfont.color",x),b.tf=y("textfont.family",x)),r=[a.minExtend(p,b)],(i=a.minExtend(d,w)).selectedpoints=null,i.texttemplate=null}var k=n.select(this).select("g.legendpoints"),A=k.selectAll("path.scatterpts").data(h?r:[]);A.enter().insert("path",":first-child").classed("scatterpts",!0).attr("transform",_),A.exit().remove(),A.call(s.pointStyle,i,e),h&&(r[0].mrc=3);var M=k.selectAll("g.pointtext").data(g?r:[]);M.enter().append("g").classed("pointtext",!0).append("text").attr("transform",_),M.exit().remove(),M.selectAll("text").call(s.textPointStyle,i,e)})).each((function(t){var e=t[0].trace,r=n.select(this).select("g.legendpoints").selectAll("path.legendcandle").data(e.visible&&"candlestick"===e.type?[t,t]:[]);r.enter().append("path").classed("legendcandle",!0).attr("d",(function(t,e){return e?"M-15,0H-8M-8,6V-6H8Z":"M15,0H8M8,-6V6H-8Z"})).attr("transform",_).style("stroke-miterlimit",1),r.exit().remove(),r.each((function(t,r){var i=n.select(this),a=e[r?"increasing":"decreasing"],o=w(void 0,a.line,5,2);i.style("stroke-width",o+"px").call(l.fill,a.fillcolor),o&&l.stroke(i,a.line.color)}))})).each((function(t){var e=t[0].trace,r=n.select(this).select("g.legendpoints").selectAll("path.legendohlc").data(e.visible&&"ohlc"===e.type?[t,t]:[]);r.enter().append("path").classed("legendohlc",!0).attr("d",(function(t,e){return e?"M-15,0H0M-8,-6V0":"M15,0H0M8,6V0"})).attr("transform",_).style("stroke-miterlimit",1),r.exit().remove(),r.each((function(t,r){var i=n.select(this),a=e[r?"increasing":"decreasing"],o=w(void 0,a.line,5,2);i.style("fill","none").call(s.dashLine,a.line.dash,o),o&&l.stroke(i,a.line.color)}))}))}},42068:function(t,e,r){"use strict";r(93348),t.exports={editType:"modebar",orientation:{valType:"enumerated",values:["v","h"],dflt:"h",editType:"modebar"},bgcolor:{valType:"color",editType:"modebar"},color:{valType:"color",editType:"modebar"},activecolor:{valType:"color",editType:"modebar"},uirevision:{valType:"any",editType:"none"},add:{valType:"string",arrayOk:!0,dflt:"",editType:"modebar"},remove:{valType:"string",arrayOk:!0,dflt:"",editType:"modebar"}}},26023:function(t,e,r){"use strict";var n=r(73972),i=r(74875),a=r(41675),o=r(24255),s=r(34031).eraseActiveShape,l=r(71828),u=l._,c=t.exports={};function f(t,e){var r,i,o=e.currentTarget,s=o.getAttribute("data-attr"),l=o.getAttribute("data-val")||!0,u=t._fullLayout,c={},f=a.list(t,null,!0),h=u._cartesianSpikesEnabled;if("zoom"===s){var p,d="in"===l?.5:2,v=(1+d)/2,g=(1-d)/2;for(i=0;i<f.length;i++)if(!(r=f[i]).fixedrange)if(p=r._name,"auto"===l)c[p+".autorange"]=!0;else if("reset"===l)void 0===r._rangeInitial0&&void 0===r._rangeInitial1?c[p+".autorange"]=!0:void 0===r._rangeInitial0?(c[p+".autorange"]=r._autorangeInitial,c[p+".range"]=[null,r._rangeInitial1]):void 0===r._rangeInitial1?(c[p+".range"]=[r._rangeInitial0,null],c[p+".autorange"]=r._autorangeInitial):c[p+".range"]=[r._rangeInitial0,r._rangeInitial1],void 0!==r._showSpikeInitial&&(c[p+".showspikes"]=r._showSpikeInitial,"on"!==h||r._showSpikeInitial||(h="off"));else{var y=[r.r2l(r.range[0]),r.r2l(r.range[1])],m=[v*y[0]+g*y[1],v*y[1]+g*y[0]];c[p+".range[0]"]=r.l2r(m[0]),c[p+".range[1]"]=r.l2r(m[1])}}else"hovermode"!==s||"x"!==l&&"y"!==l||(l=u._isHoriz?"y":"x",o.setAttribute("data-val",l)),c[s]=l;u._cartesianSpikesEnabled=h,n.call("_guiRelayout",t,c)}function h(t,e){for(var r=e.currentTarget,i=r.getAttribute("data-attr"),a=r.getAttribute("data-val")||!0,o=t._fullLayout._subplots.gl3d||[],s={},l=i.split("."),u=0;u<o.length;u++)s[o[u]+"."+l[1]]=a;var c="pan"===a?a:"zoom";s.dragmode=c,n.call("_guiRelayout",t,s)}function p(t,e){for(var r=e.currentTarget.getAttribute("data-attr"),i="resetLastSave"===r,a="resetDefault"===r,o=t._fullLayout,s=o._subplots.gl3d||[],l={},u=0;u<s.length;u++){var c,f=s[u],h=f+".camera",p=f+".aspectratio",d=f+".aspectmode",v=o[f]._scene;i?(l[h+".up"]=v.viewInitial.up,l[h+".eye"]=v.viewInitial.eye,l[h+".center"]=v.viewInitial.center,c=!0):a&&(l[h+".up"]=null,l[h+".eye"]=null,l[h+".center"]=null,c=!0),c&&(l[p+".x"]=v.viewInitial.aspectratio.x,l[p+".y"]=v.viewInitial.aspectratio.y,l[p+".z"]=v.viewInitial.aspectratio.z,l[d]=v.viewInitial.aspectmode)}n.call("_guiRelayout",t,l)}function d(t,e){var r=e.currentTarget,n=r._previousVal,i=t._fullLayout,a=i._subplots.gl3d||[],o=["xaxis","yaxis","zaxis"],s={},l={};if(n)l=n,r._previousVal=null;else{for(var u=0;u<a.length;u++){var c=a[u],f=i[c],h=c+".hovermode";s[h]=f.hovermode,l[h]=!1;for(var p=0;p<3;p++){var d=o[p],v=c+"."+d+".showspikes";l[v]=!1,s[v]=f[d].showspikes}}r._previousVal=s}return l}function v(t,e){for(var r=e.currentTarget,i=r.getAttribute("data-attr"),a=r.getAttribute("data-val")||!0,o=t._fullLayout,s=o._subplots.geo||[],l=0;l<s.length;l++){var u=s[l],c=o[u];if("zoom"===i){var f=c.projection.scale,h="in"===a?2*f:.5*f;n.call("_guiRelayout",t,u+".projection.scale",h)}}"reset"===i&&x(t,"geo")}function g(t){var e=t._fullLayout;return!e.hovermode&&(e._has("cartesian")?e._isHoriz?"y":"x":"closest")}function y(t){var e=g(t);n.call("_guiRelayout",t,"hovermode",e)}function m(t,e){for(var r=e.currentTarget.getAttribute("data-val"),i=t._fullLayout,a=i._subplots.mapbox||[],o={},s=0;s<a.length;s++){var l=a[s],u=i[l].zoom,c="in"===r?1.05*u:u/1.05;o[l+".zoom"]=c}n.call("_guiRelayout",t,o)}function x(t,e){for(var r=t._fullLayout,i=r._subplots[e]||[],a={},o=0;o<i.length;o++)for(var s=i[o],l=r[s]._subplot.viewInitial,u=Object.keys(l),c=0;c<u.length;c++){var f=u[c];a[s+"."+f]=l[f]}n.call("_guiRelayout",t,a)}c.toImage={name:"toImage",title:function(t){var e=(t._context.toImageButtonOptions||{}).format||"png";return u(t,"png"===e?"Download plot as a png":"Download plot")},icon:o.camera,click:function(t){var e=t._context.toImageButtonOptions,r={format:e.format||"png"};l.notifier(u(t,"Taking snapshot - this may take a few seconds"),"long"),"svg"!==r.format&&l.isIE()&&(l.notifier(u(t,"IE only supports svg.  Changing format to svg."),"long"),r.format="svg"),["filename","width","height","scale"].forEach((function(t){t in e&&(r[t]=e[t])})),n.call("downloadImage",t,r).then((function(e){l.notifier(u(t,"Snapshot succeeded")+" - "+e,"long")})).catch((function(){l.notifier(u(t,"Sorry, there was a problem downloading your snapshot!"),"long")}))}},c.sendDataToCloud={name:"sendDataToCloud",title:function(t){return u(t,"Edit in Chart Studio")},icon:o.disk,click:function(t){i.sendDataToCloud(t)}},c.editInChartStudio={name:"editInChartStudio",title:function(t){return u(t,"Edit in Chart Studio")},icon:o.pencil,click:function(t){i.sendDataToCloud(t)}},c.zoom2d={name:"zoom2d",_cat:"zoom",title:function(t){return u(t,"Zoom")},attr:"dragmode",val:"zoom",icon:o.zoombox,click:f},c.pan2d={name:"pan2d",_cat:"pan",title:function(t){return u(t,"Pan")},attr:"dragmode",val:"pan",icon:o.pan,click:f},c.select2d={name:"select2d",_cat:"select",title:function(t){return u(t,"Box Select")},attr:"dragmode",val:"select",icon:o.selectbox,click:f},c.lasso2d={name:"lasso2d",_cat:"lasso",title:function(t){return u(t,"Lasso Select")},attr:"dragmode",val:"lasso",icon:o.lasso,click:f},c.drawclosedpath={name:"drawclosedpath",title:function(t){return u(t,"Draw closed freeform")},attr:"dragmode",val:"drawclosedpath",icon:o.drawclosedpath,click:f},c.drawopenpath={name:"drawopenpath",title:function(t){return u(t,"Draw open freeform")},attr:"dragmode",val:"drawopenpath",icon:o.drawopenpath,click:f},c.drawline={name:"drawline",title:function(t){return u(t,"Draw line")},attr:"dragmode",val:"drawline",icon:o.drawline,click:f},c.drawrect={name:"drawrect",title:function(t){return u(t,"Draw rectangle")},attr:"dragmode",val:"drawrect",icon:o.drawrect,click:f},c.drawcircle={name:"drawcircle",title:function(t){return u(t,"Draw circle")},attr:"dragmode",val:"drawcircle",icon:o.drawcircle,click:f},c.eraseshape={name:"eraseshape",title:function(t){return u(t,"Erase active shape")},icon:o.eraseshape,click:s},c.zoomIn2d={name:"zoomIn2d",_cat:"zoomin",title:function(t){return u(t,"Zoom in")},attr:"zoom",val:"in",icon:o.zoom_plus,click:f},c.zoomOut2d={name:"zoomOut2d",_cat:"zoomout",title:function(t){return u(t,"Zoom out")},attr:"zoom",val:"out",icon:o.zoom_minus,click:f},c.autoScale2d={name:"autoScale2d",_cat:"autoscale",title:function(t){return u(t,"Autoscale")},attr:"zoom",val:"auto",icon:o.autoscale,click:f},c.resetScale2d={name:"resetScale2d",_cat:"resetscale",title:function(t){return u(t,"Reset axes")},attr:"zoom",val:"reset",icon:o.home,click:f},c.hoverClosestCartesian={name:"hoverClosestCartesian",_cat:"hoverclosest",title:function(t){return u(t,"Show closest data on hover")},attr:"hovermode",val:"closest",icon:o.tooltip_basic,gravity:"ne",click:f},c.hoverCompareCartesian={name:"hoverCompareCartesian",_cat:"hoverCompare",title:function(t){return u(t,"Compare data on hover")},attr:"hovermode",val:function(t){return t._fullLayout._isHoriz?"y":"x"},icon:o.tooltip_compare,gravity:"ne",click:f},c.zoom3d={name:"zoom3d",_cat:"zoom",title:function(t){return u(t,"Zoom")},attr:"scene.dragmode",val:"zoom",icon:o.zoombox,click:h},c.pan3d={name:"pan3d",_cat:"pan",title:function(t){return u(t,"Pan")},attr:"scene.dragmode",val:"pan",icon:o.pan,click:h},c.orbitRotation={name:"orbitRotation",title:function(t){return u(t,"Orbital rotation")},attr:"scene.dragmode",val:"orbit",icon:o["3d_rotate"],click:h},c.tableRotation={name:"tableRotation",title:function(t){return u(t,"Turntable rotation")},attr:"scene.dragmode",val:"turntable",icon:o["z-axis"],click:h},c.resetCameraDefault3d={name:"resetCameraDefault3d",_cat:"resetCameraDefault",title:function(t){return u(t,"Reset camera to default")},attr:"resetDefault",icon:o.home,click:p},c.resetCameraLastSave3d={name:"resetCameraLastSave3d",_cat:"resetCameraLastSave",title:function(t){return u(t,"Reset camera to last save")},attr:"resetLastSave",icon:o.movie,click:p},c.hoverClosest3d={name:"hoverClosest3d",_cat:"hoverclosest",title:function(t){return u(t,"Toggle show closest data on hover")},attr:"hovermode",val:null,toggle:!0,icon:o.tooltip_basic,gravity:"ne",click:function(t,e){var r=d(t,e);n.call("_guiRelayout",t,r)}},c.zoomInGeo={name:"zoomInGeo",_cat:"zoomin",title:function(t){return u(t,"Zoom in")},attr:"zoom",val:"in",icon:o.zoom_plus,click:v},c.zoomOutGeo={name:"zoomOutGeo",_cat:"zoomout",title:function(t){return u(t,"Zoom out")},attr:"zoom",val:"out",icon:o.zoom_minus,click:v},c.resetGeo={name:"resetGeo",_cat:"reset",title:function(t){return u(t,"Reset")},attr:"reset",val:null,icon:o.autoscale,click:v},c.hoverClosestGeo={name:"hoverClosestGeo",_cat:"hoverclosest",title:function(t){return u(t,"Toggle show closest data on hover")},attr:"hovermode",val:null,toggle:!0,icon:o.tooltip_basic,gravity:"ne",click:y},c.hoverClosestGl2d={name:"hoverClosestGl2d",_cat:"hoverclosest",title:function(t){return u(t,"Toggle show closest data on hover")},attr:"hovermode",val:null,toggle:!0,icon:o.tooltip_basic,gravity:"ne",click:y},c.hoverClosestPie={name:"hoverClosestPie",_cat:"hoverclosest",title:function(t){return u(t,"Toggle show closest data on hover")},attr:"hovermode",val:"closest",icon:o.tooltip_basic,gravity:"ne",click:y},c.resetViewSankey={name:"resetSankeyGroup",title:function(t){return u(t,"Reset view")},icon:o.home,click:function(t){for(var e={"node.groups":[],"node.x":[],"node.y":[]},r=0;r<t._fullData.length;r++){var i=t._fullData[r]._viewInitial;e["node.groups"].push(i.node.groups.slice()),e["node.x"].push(i.node.x.slice()),e["node.y"].push(i.node.y.slice())}n.call("restyle",t,e)}},c.toggleHover={name:"toggleHover",title:function(t){return u(t,"Toggle show closest data on hover")},attr:"hovermode",val:null,toggle:!0,icon:o.tooltip_basic,gravity:"ne",click:function(t,e){var r=d(t,e);r.hovermode=g(t),n.call("_guiRelayout",t,r)}},c.resetViews={name:"resetViews",title:function(t){return u(t,"Reset views")},icon:o.home,click:function(t,e){var r=e.currentTarget;r.setAttribute("data-attr","zoom"),r.setAttribute("data-val","reset"),f(t,e),r.setAttribute("data-attr","resetLastSave"),p(t,e),x(t,"geo"),x(t,"mapbox")}},c.toggleSpikelines={name:"toggleSpikelines",title:function(t){return u(t,"Toggle Spike Lines")},icon:o.spikeline,attr:"_cartesianSpikesEnabled",val:"on",click:function(t){var e=t._fullLayout,r=e._cartesianSpikesEnabled;e._cartesianSpikesEnabled="on"===r?"off":"on",n.call("_guiRelayout",t,function(t){for(var e="on"===t._fullLayout._cartesianSpikesEnabled,r=a.list(t,null,!0),n={},i=0;i<r.length;i++){var o=r[i];n[o._name+".showspikes"]=!!e||o._showSpikeInitial}return n}(t))}},c.resetViewMapbox={name:"resetViewMapbox",_cat:"resetView",title:function(t){return u(t,"Reset view")},attr:"reset",icon:o.home,click:function(t){x(t,"mapbox")}},c.zoomInMapbox={name:"zoomInMapbox",_cat:"zoomin",title:function(t){return u(t,"Zoom in")},attr:"zoom",val:"in",icon:o.zoom_plus,click:m},c.zoomOutMapbox={name:"zoomOutMapbox",_cat:"zoomout",title:function(t){return u(t,"Zoom out")},attr:"zoom",val:"out",icon:o.zoom_minus,click:m}},93348:function(t,e,r){"use strict";var n=r(26023),i=Object.keys(n),a=["drawline","drawopenpath","drawclosedpath","drawcircle","drawrect","eraseshape"],o=["v1hovermode","hoverclosest","hovercompare","togglehover","togglespikelines"].concat(a),s=[];i.forEach((function(t){!function(t){if(-1===o.indexOf(t._cat||t.name)){var e=t.name,r=(t._cat||t.name).toLowerCase();-1===s.indexOf(e)&&s.push(e),-1===s.indexOf(r)&&s.push(r)}}(n[t])})),s.sort(),t.exports={DRAW_MODES:a,backButtons:o,foreButtons:s}},35750:function(t,e,r){"use strict";var n=r(71828),i=r(7901),a=r(44467),o=r(42068);t.exports=function(t,e){var r=t.modebar||{},s=a.newContainer(e,"modebar");function l(t,e){return n.coerce(r,s,o,t,e)}l("orientation"),l("bgcolor",i.addOpacity(e.paper_bgcolor,.5));var u=i.contrast(i.rgb(e.modebar.bgcolor));l("color",i.addOpacity(u,.3)),l("activecolor",i.addOpacity(u,.7)),l("uirevision",e.uirevision),l("add"),l("remove")}},64168:function(t,e,r){"use strict";t.exports={moduleType:"component",name:"modebar",layoutAttributes:r(42068),supplyLayoutDefaults:r(35750),manage:r(14192)}},14192:function(t,e,r){"use strict";var n=r(41675),i=r(34098),a=r(73972),o=r(23469).isUnifiedHover,s=r(37676),l=r(26023),u=r(93348).DRAW_MODES,c=r(71828).extendDeep;t.exports=function(t){var e=t._fullLayout,r=t._context,f=e._modeBar;if(r.displayModeBar||r.watermark){if(!Array.isArray(r.modeBarButtonsToRemove))throw new Error(["*modeBarButtonsToRemove* configuration options","must be an array."].join(" "));if(!Array.isArray(r.modeBarButtonsToAdd))throw new Error(["*modeBarButtonsToAdd* configuration options","must be an array."].join(" "));var h,p=r.modeBarButtons;h=Array.isArray(p)&&p.length?function(t){for(var e=c([],t),r=0;r<e.length;r++)for(var n=e[r],i=0;i<n.length;i++){var a=n[i];if("string"==typeof a){if(void 0===l[a])throw new Error(["*modeBarButtons* configuration options","invalid button name"].join(" "));e[r][i]=l[a]}}return e}(p):!r.displayModeBar&&r.watermark?[]:function(t){var e=t._fullLayout,r=t._fullData,s=t._context;function c(t,e){if("string"==typeof e){if(e.toLowerCase()===t.toLowerCase())return!0}else{var r=e.name,n=e._cat||e.name;if(r===t||n===t.toLowerCase())return!0}return!1}var f=e.modebar.add;"string"==typeof f&&(f=[f]);var h=e.modebar.remove;"string"==typeof h&&(h=[h]);var p=s.modeBarButtonsToAdd.concat(f.filter((function(t){for(var e=0;e<s.modeBarButtonsToRemove.length;e++)if(c(t,s.modeBarButtonsToRemove[e]))return!1;return!0}))),d=s.modeBarButtonsToRemove.concat(h.filter((function(t){for(var e=0;e<s.modeBarButtonsToAdd.length;e++)if(c(t,s.modeBarButtonsToAdd[e]))return!1;return!0}))),v=e._has("cartesian"),g=e._has("gl3d"),y=e._has("geo"),m=e._has("pie"),x=e._has("funnelarea"),b=e._has("gl2d"),_=e._has("ternary"),w=e._has("mapbox"),T=e._has("polar"),k=e._has("smith"),A=e._has("sankey"),M=function(t){for(var e=n.list({_fullLayout:t},null,!0),r=0;r<e.length;r++)if(!e[r].fixedrange)return!1;return!0}(e),S=o(e.hovermode),E=[];function L(t){if(t.length){for(var e=[],r=0;r<t.length;r++){for(var n=t[r],i=l[n],a=i.name.toLowerCase(),o=(i._cat||i.name).toLowerCase(),s=!1,u=0;u<d.length;u++){var c=d[u].toLowerCase();if(c===a||c===o){s=!0;break}}s||e.push(l[n])}E.push(e)}}var C=["toImage"];s.showEditInChartStudio?C.push("editInChartStudio"):s.showSendToCloud&&C.push("sendDataToCloud"),L(C);var P=[],O=[],I=[],D=[];(v||b||m||x||_)+y+g+w+T+k>1?(O=["toggleHover"],I=["resetViews"]):y?(P=["zoomInGeo","zoomOutGeo"],O=["hoverClosestGeo"],I=["resetGeo"]):g?(O=["hoverClosest3d"],I=["resetCameraDefault3d","resetCameraLastSave3d"]):w?(P=["zoomInMapbox","zoomOutMapbox"],O=["toggleHover"],I=["resetViewMapbox"]):b?O=["hoverClosestGl2d"]:m?O=["hoverClosestPie"]:A?(O=["hoverClosestCartesian","hoverCompareCartesian"],I=["resetViewSankey"]):O=["toggleHover"],v&&(O=["toggleSpikelines","hoverClosestCartesian","hoverCompareCartesian"]),(function(t){for(var e=0;e<t.length;e++)if(!a.traceIs(t[e],"noHover"))return!1;return!0}(r)||S)&&(O=[]),!v&&!b||M||(P=["zoomIn2d","zoomOut2d","autoScale2d"],"resetViews"!==I[0]&&(I=["resetScale2d"])),g?D=["zoom3d","pan3d","orbitRotation","tableRotation"]:(v||b)&&!M||_?D=["zoom2d","pan2d"]:w||y?D=["pan2d"]:T&&(D=["zoom2d"]),function(t){for(var e=!1,r=0;r<t.length&&!e;r++){var n=t[r];n._module&&n._module.selectPoints&&(a.traceIs(n,"scatter-like")?(i.hasMarkers(n)||i.hasText(n))&&(e=!0):a.traceIs(n,"box-violin")&&"all"!==n.boxpoints&&"all"!==n.points||(e=!0))}return e}(r)&&D.push("select2d","lasso2d");var z=[],R=function(t){-1===z.indexOf(t)&&-1!==O.indexOf(t)&&z.push(t)};if(Array.isArray(p)){for(var F=[],B=0;B<p.length;B++){var N=p[B];"string"==typeof N?(N=N.toLowerCase(),-1!==u.indexOf(N)?(e._has("mapbox")||e._has("cartesian"))&&D.push(N):"togglespikelines"===N?R("toggleSpikelines"):"togglehover"===N?R("toggleHover"):"hovercompare"===N?R("hoverCompareCartesian"):"hoverclosest"===N?(R("hoverClosestCartesian"),R("hoverClosestGeo"),R("hoverClosest3d"),R("hoverClosestGl2d"),R("hoverClosestPie")):"v1hovermode"===N&&(R("toggleHover"),R("hoverClosestCartesian"),R("hoverCompareCartesian"),R("hoverClosestGeo"),R("hoverClosest3d"),R("hoverClosestGl2d"),R("hoverClosestPie"))):F.push(N)}p=F}return L(D),L(P.concat(I)),L(z),function(t,e){if(e.length)if(Array.isArray(e[0]))for(var r=0;r<e.length;r++)t.push(e[r]);else t.push(e);return t}(E,p)}(t),f?f.update(t,h):e._modeBar=s(t,h)}else f&&(f.destroy(),delete e._modeBar)}},37676:function(t,e,r){"use strict";var n=r(39898),i=r(92770),a=r(71828),o=r(24255),s=r(11506).version,l=new DOMParser;function u(t){this.container=t.container,this.element=document.createElement("div"),this.update(t.graphInfo,t.buttons),this.container.appendChild(this.element)}var c=u.prototype;c.update=function(t,e){this.graphInfo=t;var r=this.graphInfo._context,n=this.graphInfo._fullLayout,i="modebar-"+n._uid;this.element.setAttribute("id",i),this._uid=i,this.element.className="modebar","hover"===r.displayModeBar&&(this.element.className+=" modebar--hover ease-bg"),"v"===n.modebar.orientation&&(this.element.className+=" vertical",e=e.reverse());var o=n.modebar,s="hover"===r.displayModeBar?".js-plotly-plot .plotly:hover ":"";a.deleteRelatedStyleRule(i),a.addRelatedStyleRule(i,s+"#"+i+" .modebar-group","background-color: "+o.bgcolor),a.addRelatedStyleRule(i,"#"+i+" .modebar-btn .icon path","fill: "+o.color),a.addRelatedStyleRule(i,"#"+i+" .modebar-btn:hover .icon path","fill: "+o.activecolor),a.addRelatedStyleRule(i,"#"+i+" .modebar-btn.active .icon path","fill: "+o.activecolor);var l=!this.hasButtons(e),u=this.hasLogo!==r.displaylogo,c=this.locale!==r.locale;if(this.locale=r.locale,(l||u||c)&&(this.removeAllButtons(),this.updateButtons(e),r.watermark||r.displaylogo)){var f=this.getLogo();r.watermark&&(f.className=f.className+" watermark"),"v"===n.modebar.orientation?this.element.insertBefore(f,this.element.childNodes[0]):this.element.appendChild(f),this.hasLogo=!0}this.updateActiveButton()},c.updateButtons=function(t){var e=this;this.buttons=t,this.buttonElements=[],this.buttonsNames=[],this.buttons.forEach((function(t){var r=e.createGroup();t.forEach((function(t){var n=t.name;if(!n)throw new Error("must provide button 'name' in button config");if(-1!==e.buttonsNames.indexOf(n))throw new Error("button name '"+n+"' is taken");e.buttonsNames.push(n);var i=e.createButton(t);e.buttonElements.push(i),r.appendChild(i)})),e.element.appendChild(r)}))},c.createGroup=function(){var t=document.createElement("div");return t.className="modebar-group",t},c.createButton=function(t){var e=this,r=document.createElement("a");r.setAttribute("rel","tooltip"),r.className="modebar-btn";var i=t.title;void 0===i?i=t.name:"function"==typeof i&&(i=i(this.graphInfo)),(i||0===i)&&r.setAttribute("data-title",i),void 0!==t.attr&&r.setAttribute("data-attr",t.attr);var a=t.val;if(void 0!==a&&("function"==typeof a&&(a=a(this.graphInfo)),r.setAttribute("data-val",a)),"function"!=typeof t.click)throw new Error("must provide button 'click' function in button config");r.addEventListener("click",(function(r){t.click(e.graphInfo,r),e.updateActiveButton(r.currentTarget)})),r.setAttribute("data-toggle",t.toggle||!1),t.toggle&&n.select(r).classed("active",!0);var s=t.icon;return"function"==typeof s?r.appendChild(s()):r.appendChild(this.createIcon(s||o.question)),r.setAttribute("data-gravity",t.gravity||"n"),r},c.createIcon=function(t){var e,r=i(t.height)?Number(t.height):t.ascent-t.descent,n="http://www.w3.org/2000/svg";if(t.path){(e=document.createElementNS(n,"svg")).setAttribute("viewBox",[0,0,t.width,r].join(" ")),e.setAttribute("class","icon");var a=document.createElementNS(n,"path");a.setAttribute("d",t.path),t.transform?a.setAttribute("transform",t.transform):void 0!==t.ascent&&a.setAttribute("transform","matrix(1 0 0 -1 0 "+t.ascent+")"),e.appendChild(a)}return t.svg&&(e=l.parseFromString(t.svg,"application/xml").childNodes[0]),e.setAttribute("height","1em"),e.setAttribute("width","1em"),e},c.updateActiveButton=function(t){var e=this.graphInfo._fullLayout,r=void 0!==t?t.getAttribute("data-attr"):null;this.buttonElements.forEach((function(t){var i=t.getAttribute("data-val")||!0,o=t.getAttribute("data-attr"),s="true"===t.getAttribute("data-toggle"),l=n.select(t);if(s)o===r&&l.classed("active",!l.classed("active"));else{var u=null===o?o:a.nestedProperty(e,o).get();l.classed("active",u===i)}}))},c.hasButtons=function(t){var e=this.buttons;if(!e)return!1;if(t.length!==e.length)return!1;for(var r=0;r<t.length;++r){if(t[r].length!==e[r].length)return!1;for(var n=0;n<t[r].length;n++)if(t[r][n].name!==e[r][n].name)return!1}return!0},c.getLogo=function(){var t=this.createGroup(),e=document.createElement("a");return e.href="https://plotly.com/",e.target="_blank",e.setAttribute("data-title",a._(this.graphInfo,"Produced with Plotly.js")+" (v"+s+")"),e.className="modebar-btn plotlyjsicon modebar-btn--logo",e.appendChild(this.createIcon(o.newplotlylogo)),t.appendChild(e),t},c.removeAllButtons=function(){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.hasLogo=!1},c.destroy=function(){a.removeElement(this.container.querySelector(".modebar")),a.deleteRelatedStyleRule(this._uid)},t.exports=function(t,e){var r=t._fullLayout,i=new u({graphInfo:t,container:r._modebardiv.node(),buttons:e});return r._privateplot&&n.select(i.element).append("span").classed("badge-private float--left",!0).text("PRIVATE"),i}},37113:function(t,e,r){"use strict";var n=r(41940),i=r(22399),a=(0,r(44467).templatedArray)("button",{visible:{valType:"boolean",dflt:!0,editType:"plot"},step:{valType:"enumerated",values:["month","year","day","hour","minute","second","all"],dflt:"month",editType:"plot"},stepmode:{valType:"enumerated",values:["backward","todate"],dflt:"backward",editType:"plot"},count:{valType:"number",min:0,dflt:1,editType:"plot"},label:{valType:"string",editType:"plot"},editType:"plot"});t.exports={visible:{valType:"boolean",editType:"plot"},buttons:a,x:{valType:"number",min:-2,max:3,editType:"plot"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"left",editType:"plot"},y:{valType:"number",min:-2,max:3,editType:"plot"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"bottom",editType:"plot"},font:n({editType:"plot"}),bgcolor:{valType:"color",dflt:i.lightLine,editType:"plot"},activecolor:{valType:"color",editType:"plot"},bordercolor:{valType:"color",dflt:i.defaultLine,editType:"plot"},borderwidth:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"plot"}},89573:function(t){"use strict";t.exports={yPad:.02,minButtonWidth:30,rx:3,ry:3,lightAmount:25,darkAmount:10}},28674:function(t,e,r){"use strict";var n=r(71828),i=r(7901),a=r(44467),o=r(85501),s=r(37113),l=r(89573);function u(t,e,r,i){var a=i.calendar;function o(r,i){return n.coerce(t,e,s.buttons,r,i)}if(o("visible")){var l=o("step");"all"!==l&&(!a||"gregorian"===a||"month"!==l&&"year"!==l?o("stepmode"):e.stepmode="backward",o("count")),o("label")}}t.exports=function(t,e,r,c,f){var h=t.rangeselector||{},p=a.newContainer(e,"rangeselector");function d(t,e){return n.coerce(h,p,s,t,e)}if(d("visible",o(h,p,{name:"buttons",handleItemDefaults:u,calendar:f}).length>0)){var v=function(t,e,r){for(var n=r.filter((function(r){return e[r].anchor===t._id})),i=0,a=0;a<n.length;a++){var o=e[n[a]].domain;o&&(i=Math.max(o[1],i))}return[t.domain[0],i+l.yPad]}(e,r,c);d("x",v[0]),d("y",v[1]),n.noneOrAll(t,e,["x","y"]),d("xanchor"),d("yanchor"),n.coerceFont(d,"font",r.font);var g=d("bgcolor");d("activecolor",i.contrast(g,l.lightAmount,l.darkAmount)),d("bordercolor"),d("borderwidth")}}},21598:function(t,e,r){"use strict";var n=r(39898),i=r(73972),a=r(74875),o=r(7901),s=r(91424),l=r(71828),u=l.strTranslate,c=r(63893),f=r(41675),h=r(18783),p=h.LINE_SPACING,d=h.FROM_TL,v=h.FROM_BR,g=r(89573),y=r(70565);function m(t){return t._id}function x(t,e,r){var n=l.ensureSingle(t,"rect","selector-rect",(function(t){t.attr("shape-rendering","crispEdges")}));n.attr({rx:g.rx,ry:g.ry}),n.call(o.stroke,e.bordercolor).call(o.fill,function(t,e){return e._isActive||e._isHovered?t.activecolor:t.bgcolor}(e,r)).style("stroke-width",e.borderwidth+"px")}function b(t,e,r,n){var i,a;l.ensureSingle(t,"text","selector-text",(function(t){t.attr("text-anchor","middle")})).call(s.font,e.font).text((i=r,a=n._fullLayout._meta,i.label?a?l.templateString(i.label,a):i.label:"all"===i.step?"all":i.count+i.step.charAt(0))).call((function(t){c.convertToTspans(t,n)}))}t.exports=function(t){var e=t._fullLayout._infolayer.selectAll(".rangeselector").data(function(t){for(var e=f.list(t,"x",!0),r=[],n=0;n<e.length;n++){var i=e[n];i.rangeselector&&i.rangeselector.visible&&r.push(i)}return r}(t),m);e.enter().append("g").classed("rangeselector",!0),e.exit().remove(),e.style({cursor:"pointer","pointer-events":"all"}),e.each((function(e){var r=n.select(this),o=e,f=o.rangeselector,h=r.selectAll("g.button").data(l.filterVisible(f.buttons));h.enter().append("g").classed("button",!0),h.exit().remove(),h.each((function(e){var r=n.select(this),a=y(o,e);e._isActive=function(t,e,r){if("all"===e.step)return!0===t.autorange;var n=Object.keys(r);return t.range[0]===r[n[0]]&&t.range[1]===r[n[1]]}(o,e,a),r.call(x,f,e),r.call(b,f,e,t),r.on("click",(function(){t._dragged||i.call("_guiRelayout",t,a)})),r.on("mouseover",(function(){e._isHovered=!0,r.call(x,f,e)})),r.on("mouseout",(function(){e._isHovered=!1,r.call(x,f,e)}))})),function(t,e,r,i,o){var f=0,h=0,y=r.borderwidth;e.each((function(){var t=n.select(this).select(".selector-text"),e=r.font.size*p,i=Math.max(e*c.lineCount(t),16)+3;h=Math.max(h,i)})),e.each((function(){var t=n.select(this),e=t.select(".selector-rect"),i=t.select(".selector-text"),a=i.node()&&s.bBox(i.node()).width,o=r.font.size*p,l=c.lineCount(i),d=Math.max(a+10,g.minButtonWidth);t.attr("transform",u(y+f,y)),e.attr({x:0,y:0,width:d,height:h}),c.positionText(i,d/2,h/2-(l-1)*o/2+3),f+=d+5}));var m=t._fullLayout._size,x=m.l+m.w*r.x,b=m.t+m.h*(1-r.y),_="left";l.isRightAnchor(r)&&(x-=f,_="right"),l.isCenterAnchor(r)&&(x-=f/2,_="center");var w="top";l.isBottomAnchor(r)&&(b-=h,w="bottom"),l.isMiddleAnchor(r)&&(b-=h/2,w="middle"),f=Math.ceil(f),h=Math.ceil(h),x=Math.round(x),b=Math.round(b),a.autoMargin(t,i+"-range-selector",{x:r.x,y:r.y,l:f*d[_],r:f*v[_],b:h*v[w],t:h*d[w]}),o.attr("transform",u(x,b))}(t,h,f,o._name,r)}))}},70565:function(t,e,r){"use strict";var n=r(81041),i=r(71828).titleCase;t.exports=function(t,e){var r=t._name,a={};if("all"===e.step)a[r+".autorange"]=!0;else{var o=function(t,e){var r,a=t.range,o=new Date(t.r2l(a[1])),s=e.step,l=n["utc"+i(s)],u=e.count;switch(e.stepmode){case"backward":r=t.l2r(+l.offset(o,-u));break;case"todate":var c=l.offset(o,-u);r=t.l2r(+l.ceil(c))}return[r,a[1]]}(t,e);a[r+".range[0]"]=o[0],a[r+".range[1]"]=o[1]}return a}},97218:function(t,e,r){"use strict";t.exports={moduleType:"component",name:"rangeselector",schema:{subplots:{xaxis:{rangeselector:r(37113)}}},layoutAttributes:r(37113),handleDefaults:r(28674),draw:r(21598)}},75148:function(t,e,r){"use strict";var n=r(22399);t.exports={bgcolor:{valType:"color",dflt:n.background,editType:"plot"},bordercolor:{valType:"color",dflt:n.defaultLine,editType:"plot"},borderwidth:{valType:"integer",dflt:0,min:0,editType:"plot"},autorange:{valType:"boolean",dflt:!0,editType:"calc",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},range:{valType:"info_array",items:[{valType:"any",editType:"calc",impliedEdits:{"^autorange":!1}},{valType:"any",editType:"calc",impliedEdits:{"^autorange":!1}}],editType:"calc",impliedEdits:{autorange:!1}},thickness:{valType:"number",dflt:.15,min:0,max:1,editType:"plot"},visible:{valType:"boolean",dflt:!0,editType:"calc"},editType:"calc"}},88443:function(t,e,r){"use strict";var n=r(41675).list,i=r(71739).getAutoRange,a=r(73251);t.exports=function(t){for(var e=n(t,"x",!0),r=0;r<e.length;r++){var o=e[r],s=o[a.name];s&&s.visible&&s.autorange&&(s._input.autorange=!0,s._input.range=s.range=i(t,o))}}},73251:function(t){"use strict";t.exports={name:"rangeslider",containerClassName:"rangeslider-container",bgClassName:"rangeslider-bg",rangePlotClassName:"rangeslider-rangeplot",maskMinClassName:"rangeslider-mask-min",maskMaxClassName:"rangeslider-mask-max",slideBoxClassName:"rangeslider-slidebox",grabberMinClassName:"rangeslider-grabber-min",grabAreaMinClassName:"rangeslider-grabarea-min",handleMinClassName:"rangeslider-handle-min",grabberMaxClassName:"rangeslider-grabber-max",grabAreaMaxClassName:"rangeslider-grabarea-max",handleMaxClassName:"rangeslider-handle-max",maskMinOppAxisClassName:"rangeslider-mask-min-opp-axis",maskMaxOppAxisClassName:"rangeslider-mask-max-opp-axis",maskColor:"rgba(0,0,0,0.4)",maskOppAxisColor:"rgba(0,0,0,0.2)",slideBoxFill:"transparent",slideBoxCursor:"ew-resize",grabAreaFill:"transparent",grabAreaCursor:"col-resize",grabAreaWidth:10,handleWidth:4,handleRadius:1,handleStrokeWidth:1,extraPad:15}},26377:function(t,e,r){"use strict";var n=r(71828),i=r(44467),a=r(41675),o=r(75148),s=r(47850);t.exports=function(t,e,r){var l=t[r],u=e[r];if(l.rangeslider||e._requestRangeslider[u._id]){n.isPlainObject(l.rangeslider)||(l.rangeslider={});var c,f,h=l.rangeslider,p=i.newContainer(u,"rangeslider");if(_("visible")){_("bgcolor",e.plot_bgcolor),_("bordercolor"),_("borderwidth"),_("thickness"),_("autorange",!u.isValidRange(h.range)),_("range");var d=e._subplots;if(d)for(var v=d.cartesian.filter((function(t){return t.substr(0,t.indexOf("y"))===a.name2id(r)})).map((function(t){return t.substr(t.indexOf("y"),t.length)})),g=n.simpleMap(v,a.id2name),y=0;y<g.length;y++){var m=g[y];c=h[m]||{},f=i.newContainer(p,m,"yaxis");var x,b=e[m];c.range&&b.isValidRange(c.range)&&(x="fixed"),"match"!==w("rangemode",x)&&w("range",b.range.slice())}p._input=h}}function _(t,e){return n.coerce(h,p,o,t,e)}function w(t,e){return n.coerce(c,f,s,t,e)}}},72413:function(t,e,r){"use strict";var n=r(39898),i=r(73972),a=r(74875),o=r(71828),s=o.strTranslate,l=r(91424),u=r(7901),c=r(92998),f=r(93612),h=r(41675),p=r(28569),d=r(6964),v=r(73251);function g(t,e,r,n){var i=o.ensureSingle(t,"rect",v.bgClassName,(function(t){t.attr({x:0,y:0,"shape-rendering":"crispEdges"})})),a=n.borderwidth%2==0?n.borderwidth:n.borderwidth-1,c=-n._offsetShift,f=l.crispRound(e,n.borderwidth);i.attr({width:n._width+a,height:n._height+a,transform:s(c,c),"stroke-width":f}).call(u.stroke,n.bordercolor).call(u.fill,n.bgcolor)}function y(t,e,r,n){var i=e._fullLayout;o.ensureSingleById(i._topdefs,"clipPath",n._clipId,(function(t){t.append("rect").attr({x:0,y:0})})).select("rect").attr({width:n._width,height:n._height})}function m(t,e,r,i){var s,u=e.calcdata,c=t.selectAll("g."+v.rangePlotClassName).data(r._subplotsWith,o.identity);c.enter().append("g").attr("class",(function(t){return v.rangePlotClassName+" "+t})).call(l.setClipUrl,i._clipId,e),c.order(),c.exit().remove(),c.each((function(t,o){var l=n.select(this),c=0===o,p=h.getFromId(e,t,"y"),d=p._name,v=i[d],g={data:[],layout:{xaxis:{type:r.type,domain:[0,1],range:i.range.slice(),calendar:r.calendar},width:i._width,height:i._height,margin:{t:0,b:0,l:0,r:0}},_context:e._context};r.rangebreaks&&(g.layout.xaxis.rangebreaks=r.rangebreaks),g.layout[d]={type:p.type,domain:[0,1],range:"match"!==v.rangemode?v.range.slice():p.range.slice(),calendar:p.calendar},p.rangebreaks&&(g.layout[d].rangebreaks=p.rangebreaks),a.supplyDefaults(g);var y=g._fullLayout.xaxis,m=g._fullLayout[d];y.clearCalc(),y.setScale(),m.clearCalc(),m.setScale();var x={id:t,plotgroup:l,xaxis:y,yaxis:m,isRangePlot:!0};c?s=x:(x.mainplot="xy",x.mainplotinfo=s),f.rangePlot(e,x,function(t,e){for(var r=[],n=0;n<t.length;n++){var i=t[n],a=i[0].trace;a.xaxis+a.yaxis===e&&r.push(i)}return r}(u,t))}))}function x(t,e,r,n,i){o.ensureSingle(t,"rect",v.maskMinClassName,(function(t){t.attr({x:0,y:0,"shape-rendering":"crispEdges"})})).attr("height",n._height).call(u.fill,v.maskColor),o.ensureSingle(t,"rect",v.maskMaxClassName,(function(t){t.attr({y:0,"shape-rendering":"crispEdges"})})).attr("height",n._height).call(u.fill,v.maskColor),"match"!==i.rangemode&&(o.ensureSingle(t,"rect",v.maskMinOppAxisClassName,(function(t){t.attr({y:0,"shape-rendering":"crispEdges"})})).attr("width",n._width).call(u.fill,v.maskOppAxisColor),o.ensureSingle(t,"rect",v.maskMaxOppAxisClassName,(function(t){t.attr({y:0,"shape-rendering":"crispEdges"})})).attr("width",n._width).style("border-top",v.maskOppBorder).call(u.fill,v.maskOppAxisColor))}function b(t,e,r,n){e._context.staticPlot||o.ensureSingle(t,"rect",v.slideBoxClassName,(function(t){t.attr({y:0,cursor:v.slideBoxCursor,"shape-rendering":"crispEdges"})})).attr({height:n._height,fill:v.slideBoxFill})}function _(t,e,r,n){var i=o.ensureSingle(t,"g",v.grabberMinClassName),a=o.ensureSingle(t,"g",v.grabberMaxClassName),s={x:0,width:v.handleWidth,rx:v.handleRadius,fill:u.background,stroke:u.defaultLine,"stroke-width":v.handleStrokeWidth,"shape-rendering":"crispEdges"},l={y:Math.round(n._height/4),height:Math.round(n._height/2)};o.ensureSingle(i,"rect",v.handleMinClassName,(function(t){t.attr(s)})).attr(l),o.ensureSingle(a,"rect",v.handleMaxClassName,(function(t){t.attr(s)})).attr(l);var c={width:v.grabAreaWidth,x:0,y:0,fill:v.grabAreaFill,cursor:e._context.staticPlot?void 0:v.grabAreaCursor};o.ensureSingle(i,"rect",v.grabAreaMinClassName,(function(t){t.attr(c)})).attr("height",n._height),o.ensureSingle(a,"rect",v.grabAreaMaxClassName,(function(t){t.attr(c)})).attr("height",n._height)}t.exports=function(t){for(var e=t._fullLayout,r=e._rangeSliderData,a=0;a<r.length;a++){var l=r[a][v.name];l._clipId=l._id+"-"+e._uid}var u=e._infolayer.selectAll("g."+v.containerClassName).data(r,(function(t){return t._name}));u.exit().each((function(t){var r=t[v.name];e._topdefs.select("#"+r._clipId).remove()})).remove(),0!==r.length&&(u.enter().append("g").classed(v.containerClassName,!0).attr("pointer-events","all"),u.each((function(r){var a=n.select(this),l=r[v.name],u=e[h.id2name(r.anchor)],f=l[h.id2name(r.anchor)];if(l.range){var w,T=o.simpleMap(l.range,r.r2l),k=o.simpleMap(r.range,r.r2l);w=k[0]<k[1]?[Math.min(T[0],k[0]),Math.max(T[1],k[1])]:[Math.max(T[0],k[0]),Math.min(T[1],k[1])],l.range=l._input.range=o.simpleMap(w,r.l2r)}r.cleanRange("rangeslider.range");var A=e._size,M=r.domain;l._width=A.w*(M[1]-M[0]);var S=Math.round(A.l+A.w*M[0]),E=Math.round(A.t+A.h*(1-r._counterDomainMin)+("bottom"===r.side?r._depth:0)+l._offsetShift+v.extraPad);a.attr("transform",s(S,E)),l._rl=o.simpleMap(l.range,r.r2l);var L=l._rl[0],C=l._rl[1],P=C-L;if(l.p2d=function(t){return t/l._width*P+L},l.d2p=function(t){return(t-L)/P*l._width},r.rangebreaks){var O=r.locateBreaks(L,C);if(O.length){var I,D,z=0;for(I=0;I<O.length;I++)z+=(D=O[I]).max-D.min;var R=l._width/(C-L-z),F=[-R*L];for(I=0;I<O.length;I++)D=O[I],F.push(F[F.length-1]-R*(D.max-D.min));for(l.d2p=function(t){for(var e=F[0],r=0;r<O.length;r++){var n=O[r];if(t>=n.max)e=F[r+1];else if(t<n.min)break}return e+R*t},I=0;I<O.length;I++)(D=O[I]).pmin=l.d2p(D.min),D.pmax=l.d2p(D.max);l.p2d=function(t){for(var e=F[0],r=0;r<O.length;r++){var n=O[r];if(t>=n.pmax)e=F[r+1];else if(t<n.pmin)break}return(t-e)/R}}}if("match"!==f.rangemode){var B=u.r2l(f.range[0]),N=u.r2l(f.range[1])-B;l.d2pOppAxis=function(t){return(t-B)/N*l._height}}a.call(g,t,r,l).call(y,t,r,l).call(m,t,r,l).call(x,t,r,l,f).call(b,t,r,l).call(_,t,r,l),function(t,e,r,a){if(!e._context.staticPlot){var s=t.select("rect."+v.slideBoxClassName).node(),l=t.select("rect."+v.grabAreaMinClassName).node(),u=t.select("rect."+v.grabAreaMaxClassName).node();t.on("mousedown",c),t.on("touchstart",c)}function c(){var c=n.event,f=c.target,h=c.clientX||c.touches[0].clientX,v=h-t.node().getBoundingClientRect().left,g=a.d2p(r._rl[0]),y=a.d2p(r._rl[1]),m=p.coverSlip();function x(t){var c,p,x,b=+(t.clientX||t.touches[0].clientX)-h;switch(f){case s:if(x="ew-resize",g+b>r._length||y+b<0)return;c=g+b,p=y+b;break;case l:if(x="col-resize",g+b>r._length)return;c=g+b,p=y;break;case u:if(x="col-resize",y+b<0)return;c=g,p=y+b;break;default:x="ew-resize",c=v,p=v+b}if(p<c){var _=p;p=c,c=_}a._pixelMin=c,a._pixelMax=p,d(n.select(m),x),function(t,e,r,n){function a(t){return r.l2r(o.constrain(t,n._rl[0],n._rl[1]))}var s=a(n.p2d(n._pixelMin)),l=a(n.p2d(n._pixelMax));window.requestAnimationFrame((function(){i.call("_guiRelayout",e,r._name+".range",[s,l])}))}(0,e,r,a)}function b(){m.removeEventListener("mousemove",x),m.removeEventListener("mouseup",b),this.removeEventListener("touchmove",x),this.removeEventListener("touchend",b),o.removeElement(m)}this.addEventListener("touchmove",x),this.addEventListener("touchend",b),m.addEventListener("mousemove",x),m.addEventListener("mouseup",b)}}(a,t,r,l),function(t,e,r,n,i,a){var l=v.handleWidth/2;function u(t){return o.constrain(t,0,n._width)}function c(t){return o.constrain(t,0,n._height)}function f(t){return o.constrain(t,-l,n._width+l)}var h=u(n.d2p(r._rl[0])),p=u(n.d2p(r._rl[1]));if(t.select("rect."+v.slideBoxClassName).attr("x",h).attr("width",p-h),t.select("rect."+v.maskMinClassName).attr("width",h),t.select("rect."+v.maskMaxClassName).attr("x",p).attr("width",n._width-p),"match"!==a.rangemode){var d=n._height-c(n.d2pOppAxis(i._rl[1])),g=n._height-c(n.d2pOppAxis(i._rl[0]));t.select("rect."+v.maskMinOppAxisClassName).attr("x",h).attr("height",d).attr("width",p-h),t.select("rect."+v.maskMaxOppAxisClassName).attr("x",h).attr("y",g).attr("height",n._height-g).attr("width",p-h),t.select("rect."+v.slideBoxClassName).attr("y",d).attr("height",g-d)}var y=.5,m=Math.round(f(h-l))-y,x=Math.round(f(p-l))+y;t.select("g."+v.grabberMinClassName).attr("transform",s(m,y)),t.select("g."+v.grabberMaxClassName).attr("transform",s(x,y))}(a,0,r,l,u,f),"bottom"===r.side&&c.draw(t,r._id+"title",{propContainer:r,propName:r._name+".title",placeholder:e._dfltTitle.x,attributes:{x:r._offset+r._length/2,y:E+l._height+l._offsetShift+10+1.5*r.title.font.size,"text-anchor":"middle"}})})))}},549:function(t,e,r){"use strict";var n=r(41675),i=r(63893),a=r(73251),o=r(18783).LINE_SPACING,s=a.name;function l(t){var e=t&&t[s];return e&&e.visible}e.isVisible=l,e.makeData=function(t){var e=n.list({_fullLayout:t},"x",!0),r=t.margin,i=[];if(!t._has("gl2d"))for(var a=0;a<e.length;a++){var o=e[a];if(l(o)){i.push(o);var u=o[s];u._id=s+o._id,u._height=(t.height-r.b-r.t)*u.thickness,u._offsetShift=Math.floor(u.borderwidth/2)}}t._rangeSliderData=i},e.autoMarginOpts=function(t,e){var r=t._fullLayout,n=e[s],l=e._id.charAt(0),u=0,c=0;return"bottom"===e.side&&(u=e._depth,e.title.text!==r._dfltTitle[l]&&(c=1.5*e.title.font.size+10+n._offsetShift,c+=(e.title.text.match(i.BR_TAG_ALL)||[]).length*e.title.font.size*o)),{x:0,y:e._counterDomainMin,l:0,r:0,t:0,b:n._height+u+Math.max(r.margin.b,c),pad:a.extraPad+2*n._offsetShift}}},13137:function(t,e,r){"use strict";var n=r(71828),i=r(75148),a=r(47850),o=r(549);t.exports={moduleType:"component",name:"rangeslider",schema:{subplots:{xaxis:{rangeslider:n.extendFlat({},i,{yaxis:a})}}},layoutAttributes:r(75148),handleDefaults:r(26377),calcAutorange:r(88443),draw:r(72413),isVisible:o.isVisible,makeData:o.makeData,autoMarginOpts:o.autoMarginOpts}},47850:function(t){"use strict";t.exports={_isSubplotObj:!0,rangemode:{valType:"enumerated",values:["auto","fixed","match"],dflt:"match",editType:"calc"},range:{valType:"info_array",items:[{valType:"any",editType:"plot"},{valType:"any",editType:"plot"}],editType:"plot"},editType:"calc"}},8389:function(t,e,r){"use strict";var n=r(50215),i=r(82196).line,a=r(79952).P,o=r(1426).extendFlat,s=r(30962).overrideAll,l=r(44467).templatedArray;r(24695),t.exports=s(l("selection",{type:{valType:"enumerated",values:["rect","path"]},xref:o({},n.xref,{}),yref:o({},n.yref,{}),x0:{valType:"any"},x1:{valType:"any"},y0:{valType:"any"},y1:{valType:"any"},path:{valType:"string",editType:"arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:.7,editType:"arraydraw"},line:{color:i.color,width:o({},i.width,{min:1,dflt:1}),dash:o({},a,{dflt:"dot"})}}),"arraydraw","from-root")},34122:function(t){"use strict";t.exports={BENDPX:1.5,MINSELECT:12,SELECTDELAY:100,SELECTID:"-select"}},59402:function(t,e,r){"use strict";var n=r(71828),i=r(89298),a=r(85501),o=r(8389),s=r(30477);function l(t,e,r){function a(r,i){return n.coerce(t,e,o,r,i)}var l=a("path"),u="path"!==a("type",l?"path":"rect");u&&delete e.path,a("opacity"),a("line.color"),a("line.width"),a("line.dash");for(var c=["x","y"],f=0;f<2;f++){var h,p,d,v=c[f],g={_fullLayout:r},y=i.coerceRef(t,e,g,v);if((h=i.getFromId(g,y))._selectionIndices.push(e._index),d=s.rangeToShapePosition(h),p=s.shapePositionToRange(h),u){var m=v+"0",x=v+"1",b=t[m],_=t[x];t[m]=p(t[m],!0),t[x]=p(t[x],!0),i.coercePosition(e,g,a,y,m),i.coercePosition(e,g,a,y,x);var w=e[m],T=e[x];void 0!==w&&void 0!==T&&(e[m]=d(w),e[x]=d(T),t[m]=b,t[x]=_)}}u&&n.noneOrAll(t,e,["x0","x1","y0","y1"])}t.exports=function(t,e){a(t,e,{name:"selections",handleItemDefaults:l});for(var r=e.selections,n=0;n<r.length;n++){var i=r[n];i&&void 0===i.path&&(void 0!==i.x0&&void 0!==i.x1&&void 0!==i.y0&&void 0!==i.y1||(e.selections[n]=null))}}},32485:function(t,e,r){"use strict";var n=r(60165).readPaths,i=r(42359),a=r(51873).clearOutlineControllers,o=r(7901),s=r(91424),l=r(44467).arrayEditor,u=r(30477),c=u.getPathString;function f(t){var e=t._fullLayout;for(var r in a(t),e._selectionLayer.selectAll("path").remove(),e._plots){var n=e._plots[r].selectionLayer;n&&n.selectAll("path").remove()}for(var i=0;i<e.selections.length;i++)p(t,i)}function h(t){return t._context.editSelection}function p(t,e){t._fullLayout._paperdiv.selectAll('.selectionlayer [data-index="'+e+'"]').remove();var r=u.makeSelectionsOptionsAndPlotinfo(t,e),a=r.options,p=r.plotinfo;a._input&&function(r){var u=c(t,a),g={"data-index":e,"fill-rule":"evenodd",d:u},y=a.opacity,m="rgba(0,0,0,0)",x=a.line.color||o.contrast(t._fullLayout.plot_bgcolor),b=a.line.width,_=a.line.dash;b||(b=5,_="solid");var w=h(t)&&t._fullLayout._activeSelectionIndex===e;w&&(m=t._fullLayout.activeselection.fillcolor,y=t._fullLayout.activeselection.opacity);for(var T=[],k=1;k>=0;k--){var A=r.append("path").attr(g).style("opacity",k?.1:y).call(o.stroke,x).call(o.fill,m).call(s.dashLine,k?"solid":_,k?4+b:b);if(d(A,t,a),w){var M=l(t.layout,"selections",a);A.style({cursor:"move"});var S={element:A.node(),plotinfo:p,gd:t,editHelpers:M,isActiveSelection:!0},E=n(u,t);i(E,A,S)}else A.style("pointer-events",k?"all":"none");T[k]=A}var L=T[0];T[1].node().addEventListener("click",(function(){return function(t,e){if(h(t)){var r=+e.node().getAttribute("data-index");if(r>=0){if(r===t._fullLayout._activeSelectionIndex)return void v(t);t._fullLayout._activeSelectionIndex=r,t._fullLayout._deactivateSelection=v,f(t)}}}(t,L)}))}(t._fullLayout._selectionLayer)}function d(t,e,r){var n=r.xref+r.yref;s.setClipUrl(t,"clip"+e._fullLayout._uid+n,e)}function v(t){h(t)&&t._fullLayout._activeSelectionIndex>=0&&(a(t),delete t._fullLayout._activeSelectionIndex,f(t))}t.exports={draw:f,drawOne:p,activateLastSelection:function(t){if(h(t)){var e=t._fullLayout.selections.length-1;t._fullLayout._activeSelectionIndex=e,t._fullLayout._deactivateSelection=v,f(t)}}}},53777:function(t,e,r){"use strict";var n=r(79952).P,i=r(1426).extendFlat;t.exports={newselection:{mode:{valType:"enumerated",values:["immediate","gradual"],dflt:"immediate",editType:"none"},line:{color:{valType:"color",editType:"none"},width:{valType:"number",min:1,dflt:1,editType:"none"},dash:i({},n,{dflt:"dot",editType:"none"}),editType:"none"},editType:"none"},activeselection:{fillcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"none"},opacity:{valType:"number",min:0,max:1,dflt:.5,editType:"none"},editType:"none"}}},90849:function(t){"use strict";t.exports=function(t,e,r){r("newselection.mode"),r("newselection.line.width")&&(r("newselection.line.color"),r("newselection.line.dash")),r("activeselection.fillcolor"),r("activeselection.opacity")}},35855:function(t,e,r){"use strict";var n=r(64505).selectMode,i=r(51873).clearOutline,a=r(60165),o=a.readPaths,s=a.writePaths,l=a.fixDatesForPaths;t.exports=function(t,e){if(t.length){var r=t[0][0];if(r){var a=r.getAttribute("d"),u=e.gd,c=u._fullLayout.newselection,f=e.plotinfo,h=f.xaxis,p=f.yaxis,d=e.isActiveSelection,v=e.dragmode,g=(u.layout||{}).selections||[];if(!n(v)&&void 0!==d){var y=u._fullLayout._activeSelectionIndex;if(y<g.length)switch(u._fullLayout.selections[y].type){case"rect":v="select";break;case"path":v="lasso"}}var m,x=o(a,u,f,d),b={xref:h._id,yref:p._id,opacity:c.opacity,line:{color:c.line.color,width:c.line.width,dash:c.line.dash}};1===x.length&&(m=x[0]),m&&5===m.length&&"select"===v?(b.type="rect",b.x0=m[0][1],b.y0=m[0][2],b.x1=m[2][1],b.y1=m[2][2]):(b.type="path",h&&p&&l(x,h,p),b.path=s(x),m=null),i(u);for(var _=e.editHelpers,w=(_||{}).modifyItem,T=[],k=0;k<g.length;k++){var A=u._fullLayout.selections[k];if(A){if(T[k]=A._input,void 0!==d&&k===u._fullLayout._activeSelectionIndex){var M=b;switch(A.type){case"rect":w("x0",M.x0),w("x1",M.x1),w("y0",M.y0),w("y1",M.y1);break;case"path":w("path",M.path)}}}else T[k]=A}return void 0===d?(T.push(b),T):_?_.getUpdateObj():{}}}}},75549:function(t,e,r){"use strict";var n=r(71828).strTranslate;function i(t,e){switch(t.type){case"log":return t.p2d(e);case"date":return t.p2r(e,0,t.calendar);default:return t.p2r(e)}}t.exports={p2r:i,r2p:function(t,e){switch(t.type){case"log":return t.d2p(e);case"date":return t.r2p(e,0,t.calendar);default:return t.r2p(e)}},axValue:function(t){var e="y"===t._id.charAt(0)?1:0;return function(r){return i(t,r[e])}},getTransform:function(t){return n(t.xaxis._offset,t.yaxis._offset)}}},47322:function(t,e,r){"use strict";var n=r(32485),i=r(3937);t.exports={moduleType:"component",name:"selections",layoutAttributes:r(8389),supplyLayoutDefaults:r(59402),supplyDrawNewSelectionDefaults:r(90849),includeBasePlot:r(76325)("selections"),draw:n.draw,drawOne:n.drawOne,reselect:i.reselect,prepSelect:i.prepSelect,clearOutline:i.clearOutline,clearSelectionsCache:i.clearSelectionsCache,selectOnClick:i.selectOnClick}},3937:function(t,e,r){"use strict";var n=r(52142),i=r(38258),a=r(73972),o=r(91424).dashStyle,s=r(7901),l=r(30211),u=r(23469).makeEventData,c=r(64505),f=c.freeMode,h=c.rectMode,p=c.drawMode,d=c.openMode,v=c.selectMode,g=r(30477),y=r(21459),m=r(42359),x=r(51873).clearOutline,b=r(60165),_=b.handleEllipse,w=b.readPaths,T=r(90551).newShapes,k=r(35855),A=r(32485).activateLastSelection,M=r(71828),S=M.sorterAsc,E=r(61082),L=r(79990),C=r(41675).getFromId,P=r(33306),O=r(61549).redrawReglTraces,I=r(34122),D=I.MINSELECT,z=E.filter,R=E.tester,F=r(75549),B=F.p2r,N=F.axValue,j=F.getTransform;function U(t){return void 0!==t.subplot}function V(t,e,r,n,i,a,o){var s,l,u,c,f,h,p,v,g,y=e._hoverdata,x=e._fullLayout.clickmode.indexOf("event")>-1,b=[];if(function(t){return t&&Array.isArray(t)&&!0!==t[0].hoverOnBox}(y)){Z(t,e,a);var _=function(t,e){var r,n,i=t[0],a=-1,o=[];for(n=0;n<e.length;n++)if(r=e[n],i.fullData._expandedIndex===r.cd[0].trace._expandedIndex){if(!0===i.hoverOnBox)break;void 0!==i.pointNumber?a=i.pointNumber:void 0!==i.binNumber&&(a=i.binNumber,o=i.pointNumbers);break}return{pointNumber:a,pointNumbers:o,searchInfo:r}}(y,s=X(e,r,n,i));if(_.pointNumbers.length>0?function(t,e){var r,n,i,a=[];for(i=0;i<t.length;i++)(r=t[i]).cd[0].trace.selectedpoints&&r.cd[0].trace.selectedpoints.length>0&&a.push(r);if(1===a.length&&a[0]===e.searchInfo&&(n=e.searchInfo.cd[0].trace).selectedpoints.length===e.pointNumbers.length){for(i=0;i<e.pointNumbers.length;i++)if(n.selectedpoints.indexOf(e.pointNumbers[i])<0)return!1;return!0}return!1}(s,_):function(t){var e,r,n=0;for(r=0;r<t.length;r++)if((e=t[r].cd[0].trace).selectedpoints){if(e.selectedpoints.length>1)return!1;if((n+=e.selectedpoints.length)>1)return!1}return 1===n}(s)&&(h=K(_))){for(o&&o.remove(),g=0;g<s.length;g++)(l=s[g])._module.selectPoints(l,!1);$(e,s),Y(a),x&&ht(e)}else{for(p=t.shiftKey&&(void 0!==h?h:K(_)),u=function(t,e,r){return{pointNumber:t,searchInfo:e,subtract:!!r}}(_.pointNumber,_.searchInfo,p),c=G(a.selectionDefs.concat([u])),g=0;g<s.length;g++)if(f=tt(s[g]._module.selectPoints(s[g],c),s[g]),b.length)for(var w=0;w<f.length;w++)b.push(f[w]);else b=f;if($(e,s,v={points:b}),u&&a&&a.selectionDefs.push(u),o){var T=a.mergedPolygons,k=d(a.dragmode);m(et(T,k),o,a)}x&&ft(e,v)}}}function H(t){return"pointNumber"in t&&"searchInfo"in t}function q(t){return{xmin:0,xmax:0,ymin:0,ymax:0,pts:[],contains:function(e,r,n,i){var a=t.searchInfo.cd[0].trace._expandedIndex;return i.cd[0].trace._expandedIndex===a&&n===t.pointNumber},isRect:!1,degenerate:!1,subtract:!!t.subtract}}function G(t){if(t.length){for(var e=[],r=H(t[0])?0:t[0][0][0],n=r,i=H(t[0])?0:t[0][0][1],a=i,o=0;o<t.length;o++)if(H(t[o]))e.push(q(t[o]));else{var s=R(t[o]);s.subtract=!!t[o].subtract,e.push(s),r=Math.min(r,s.xmin),n=Math.max(n,s.xmax),i=Math.min(i,s.ymin),a=Math.max(a,s.ymax)}return{xmin:r,xmax:n,ymin:i,ymax:a,pts:[],contains:function(t,r,n,i){for(var a=!1,o=0;o<e.length;o++)e[o].contains(t,r,n,i)&&(a=!e[o].subtract);return a},isRect:!1,degenerate:!1}}}function Z(t,e,r){var n=e._fullLayout,i=r.plotinfo,a=r.dragmode,o=n._lastSelectedSubplot&&n._lastSelectedSubplot===i.id,s=(t.shiftKey||t.altKey)&&!(p(a)&&d(a));o&&s&&i.selection&&i.selection.selectionDefs&&!r.selectionDefs?(r.selectionDefs=i.selection.selectionDefs,r.mergedPolygons=i.selection.mergedPolygons):s&&i.selection||Y(r),o||(x(e),n._lastSelectedSubplot=i.id)}function Y(t,e){var r=t.dragmode,n=t.plotinfo,i=t.gd;(function(t){return t._fullLayout._activeShapeIndex>=0})(i)&&i._fullLayout._deactivateShape(i),function(t){return t._fullLayout._activeSelectionIndex>=0}(i)&&i._fullLayout._deactivateSelection(i);var o=i._fullLayout._zoomlayer,s=p(r),l=v(r);if(s||l){var u,c,f=o.selectAll(".select-outline-"+n.id);f&&i._fullLayout._outlining&&(s&&(u=T(f,t)),u&&a.call("_guiRelayout",i,{shapes:u}),l&&!U(t)&&(c=k(f,t)),c&&(i._fullLayout._noEmitSelectedAtStart=!0,a.call("_guiRelayout",i,{selections:c}).then((function(){e&&A(i)}))),i._fullLayout._outlining=!1)}n.selection={},n.selection.selectionDefs=t.selectionDefs=[],n.selection.mergedPolygons=t.mergedPolygons=[]}function W(t){return t._id}function X(t,e,r,n){if(!t.calcdata)return[];var i,a,o,s=[],l=e.map(W),u=r.map(W);for(o=0;o<t.calcdata.length;o++)if(!0===(a=(i=t.calcdata[o])[0].trace).visible&&a._module&&a._module.selectPoints)if(!U({subplot:n})||a.subplot!==n&&a.geo!==n)if("splom"===a.type){if(a._xaxes[l[0]]&&a._yaxes[u[0]]){var c=J(a._module,i,e[0],r[0]);c.scene=t._fullLayout._splomScenes[a.uid],s.push(c)}}else if("sankey"===a.type){var f=J(a._module,i,e[0],r[0]);s.push(f)}else{if(-1===l.indexOf(a.xaxis))continue;if(-1===u.indexOf(a.yaxis))continue;s.push(J(a._module,i,C(t,a.xaxis),C(t,a.yaxis)))}else s.push(J(a._module,i,e[0],r[0]));return s}function J(t,e,r,n){return{_module:t,cd:e,xaxis:r,yaxis:n}}function K(t){var e=t.searchInfo.cd[0].trace,r=t.pointNumber,n=t.pointNumbers,i=n.length>0?n[0]:r;return!!e.selectedpoints&&e.selectedpoints.indexOf(i)>-1}function $(t,e,r){var n,i;for(n=0;n<e.length;n++){var o=e[n].cd[0].trace._fullInput,s=t._fullLayout._tracePreGUI[o.uid]||{};void 0===s.selectedpoints&&(s.selectedpoints=o._input.selectedpoints||null)}if(r){var l=r.points||[];for(n=0;n<e.length;n++)(i=e[n].cd[0].trace)._input.selectedpoints=i._fullInput.selectedpoints=[],i._fullInput!==i&&(i.selectedpoints=[]);for(var u=0;u<l.length;u++){var c=l[u],f=c.data,h=c.fullData,p=c.pointIndex,d=c.pointIndices;d?([].push.apply(f.selectedpoints,d),i._fullInput!==i&&[].push.apply(h.selectedpoints,d)):(f.selectedpoints.push(p),i._fullInput!==i&&h.selectedpoints.push(p))}}else for(n=0;n<e.length;n++)delete(i=e[n].cd[0].trace).selectedpoints,delete i._input.selectedpoints,i._fullInput!==i&&delete i._fullInput.selectedpoints;!function(t,e){for(var r=!1,n=0;n<e.length;n++){var i=e[n],o=i.cd;a.traceIs(o[0].trace,"regl")&&(r=!0);var s=i._module,l=s.styleOnSelect||s.style;l&&(l(t,o,o[0].node3),o[0].nodeRangePlot3&&l(t,o,o[0].nodeRangePlot3))}r&&(P(t),O(t))}(t,e)}function Q(t,e,r){for(var i=(r?n.difference:n.union)({regions:t},{regions:[e]}).regions.reverse(),a=0;a<i.length;a++){var o=i[a];o.subtract=st(o,i.slice(0,a))}return i}function tt(t,e){if(Array.isArray(t))for(var r=e.cd,n=e.cd[0].trace,i=0;i<t.length;i++)t[i]=u(t[i],n,r);return t}function et(t,e){for(var r=[],n=0;n<t.length;n++){r[n]=[];for(var i=0;i<t[n].length;i++){r[n][i]=[],r[n][i][0]=i?"L":"M";for(var a=0;a<t[n][i].length;a++)r[n][i].push(t[n][i][a])}e||r[n].push(["Z",r[n][0][1],r[n][0][2]])}return r}function rt(t,e){for(var r,n,i=[],a=[],o=0;o<e.length;o++){var s=e[o];n=s._module.selectPoints(s,t),a.push(n),r=tt(n,s),i=i.concat(r)}return i}function nt(t,e,r,n,i){var a,o,s,l=!!n;i&&(a=i.plotinfo,o=i.xaxes[0]._id,s=i.yaxes[0]._id);var u=[],c=[],f=ot(t),h=t._fullLayout;if(a){var d=h._zoomlayer,g=h.dragmode,y=p(g),m=v(g);if(y||m){var x=C(t,o,"x"),b=C(t,s,"y");if(x&&b){var _=d.selectAll(".select-outline-"+a.id);if(_&&t._fullLayout._outlining&&_.length){for(var T=_[0][0].getAttribute("d"),k=w(T,t,a),A=[],M=0;M<k.length;M++){for(var S=k[M],E=[],L=0;L<S.length;L++)E.push([lt(x,S[L][1]),lt(b,S[L][2])]);E.xref=o,E.yref=s,E.subtract=st(E,A),A.push(E)}f=f.concat(A)}}}}var P=o&&s?[o+s]:h._subplots.cartesian;!function(t){var e=t.calcdata;if(e)for(var r=0;r<e.length;r++){var n=e[r][0].trace,i=t._fullLayout._splomScenes;if(i){var a=i[n.uid];a&&(a.selectBatch=[])}}}(t);for(var O={},I=0;I<P.length;I++){var D=P[I],z=D.indexOf("y"),R=D.slice(0,z),F=D.slice(z),B=o&&s?r:void 0;if(B=at(f,R,F,B)){var N=n;if(!l){var j=C(t,R,"x"),U=C(t,F,"y");N=X(t,[j],[U],D);for(var V=0;V<N.length;V++){var H=N[V],q=H.cd[0],G=q.trace;if("scattergl"===H._module.name&&!q.t.xpx){var Z=G.x,Y=G.y,W=G._length;q.t.xpx=[],q.t.ypx=[];for(var J=0;J<W;J++)q.t.xpx[J]=j.c2p(Z[J]),q.t.ypx[J]=U.c2p(Y[J])}"splom"===H._module.name&&(O[G.uid]||(O[G.uid]=!0))}}var K=rt(B,N);u=u.concat(K),c=c.concat(N)}}var Q={points:u};$(t,c,Q);var tt=h.clickmode.indexOf("event")>-1&&e;if(!a&&e){var et=ot(t,!0);if(et.length){var nt=et[0].xref,pt=et[0].yref;if(nt&&pt){var dt=ut(et);ct([C(t,nt,"x"),C(t,pt,"y")])(Q,dt)}}t._fullLayout._noEmitSelectedAtStart?t._fullLayout._noEmitSelectedAtStart=!1:tt&&ft(t,Q),h._reselect=!1}if(!a&&h._deselect){var vt=h._deselect;(function(t,e,r){for(var n=0;n<r.length;n++){var i=r[n];if(i.xaxis&&i.xaxis._id===t&&i.yaxis&&i.yaxis._id===e)return!0}return!1})(o=vt.xref,s=vt.yref,c)||it(t,o,s,n),tt&&(Q.points.length?ft(t,Q):ht(t)),h._deselect=!1}return{eventData:Q,selectionTesters:r}}function it(t,e,r,n){n=X(t,[C(t,e,"x")],[C(t,r,"y")],e+r);for(var i=0;i<n.length;i++){var a=n[i];a._module.selectPoints(a,!1)}$(t,n)}function at(t,e,r,n){for(var i,a=0;a<t.length;a++){var o=t[a];e===o.xref&&r===o.yref&&(i?n=G(i=Q(i,o,!!o.subtract)):(i=[o],n=R(o)))}return n}function ot(t,e){for(var r=[],n=t._fullLayout,i=n.selections,a=i.length,o=0;o<a;o++)if(!e||o===n._activeSelectionIndex){var s=i[o];if(s){var l,u,c,f,h,p=s.xref,d=s.yref,v=C(t,p,"x"),m=C(t,d,"y");if("rect"===s.type){h=[];var x=lt(v,s.x0),b=lt(v,s.x1),_=lt(m,s.y0),w=lt(m,s.y1);h=[[x,_],[x,w],[b,w],[b,_]],l=Math.min(x,b),u=Math.max(x,b),c=Math.min(_,w),f=Math.max(_,w),h.xmin=l,h.xmax=u,h.ymin=c,h.ymax=f,h.xref=p,h.yref=d,h.subtract=!1,h.isRect=!0,r.push(h)}else if("path"===s.type)for(var T=s.path.split("Z"),k=[],A=0;A<T.length;A++){var M=T[A];if(M){M+="Z";var S=g.extractPathCoords(M,y.paramIsX,"raw"),E=g.extractPathCoords(M,y.paramIsY,"raw");l=1/0,u=-1/0,c=1/0,f=-1/0,h=[];for(var L=0;L<S.length;L++){var P=lt(v,S[L]),O=lt(m,E[L]);h.push([P,O]),l=Math.min(P,l),u=Math.max(P,u),c=Math.min(O,c),f=Math.max(O,f)}h.xmin=l,h.xmax=u,h.ymin=c,h.ymax=f,h.xref=p,h.yref=d,h.subtract=st(h,k),k.push(h),r.push(h)}}}}return r}function st(t,e){for(var r=!1,n=0;n<e.length;n++)for(var a=e[n],o=0;o<t.length;o++)if(i(t[o],a)){r=!r;break}return r}function lt(t,e){return"date"===t.type&&(e=e.replace("_"," ")),"log"===t.type?t.c2p(e):t.r2p(e,null,t.calendar)}function ut(t){for(var e=t.length,r=[],n=0;n<e;n++){var i=t[n];r=(r=r.concat(i)).concat([i[0]])}return(a=r).isRect=5===a.length&&a[0][0]===a[4][0]&&a[0][1]===a[4][1]&&a[0][0]===a[1][0]&&a[2][0]===a[3][0]&&a[0][1]===a[3][1]&&a[1][1]===a[2][1]||a[0][1]===a[1][1]&&a[2][1]===a[3][1]&&a[0][0]===a[3][0]&&a[1][0]===a[2][0],a.isRect&&(a.xmin=Math.min(a[0][0],a[2][0]),a.xmax=Math.max(a[0][0],a[2][0]),a.ymin=Math.min(a[0][1],a[2][1]),a.ymax=Math.max(a[0][1],a[2][1])),a;var a}function ct(t){return function(e,r){for(var n,i,a=0;a<t.length;a++){var o=t[a],s=o._id,l=s.charAt(0);if(r.isRect){n||(n={});var u=r[l+"min"],c=r[l+"max"];void 0!==u&&void 0!==c&&(n[s]=[B(o,u),B(o,c)].sort(S))}else i||(i={}),i[s]=r.map(N(o))}n&&(e.range=n),i&&(e.lassoPoints=i)}}function ft(t,e){e&&(e.selections=(t.layout||{}).selections||[]),t.emit("plotly_selected",e)}function ht(t){t.emit("plotly_deselect",null)}t.exports={reselect:nt,prepSelect:function(t,e,r,n,i){var u=!U(n),c=f(i),g=h(i),y=d(i),x=p(i),b=v(i),w="drawcircle"===i,T="drawline"===i||w,k=n.gd,A=k._fullLayout,S=b&&"immediate"===A.newselection.mode&&u,E=A._zoomlayer,C=n.element.getBoundingClientRect(),P=n.plotinfo,O=j(P),F=e-C.left,B=r-C.top;A._calcInverseTransform(k);var N=M.apply3DTransform(A._invTransform)(F,B);F=N[0],B=N[1];var H,q,W,J,K,tt,at,ot=A._invScaleX,st=A._invScaleY,lt=F,pt=B,dt="M"+F+","+B,vt=n.xaxes[0],gt=n.yaxes[0],yt=vt._length,mt=gt._length,xt=t.altKey&&!(p(i)&&y);Z(t,k,n),c&&(H=z([[F,B]],I.BENDPX));var bt=E.selectAll("path.select-outline-"+P.id).data([1]),_t=x?A.newshape:A.newselection;x&&(n.hasText=_t.label.text||_t.label.texttemplate);var wt=x&&!y?_t.fillcolor:"rgba(0,0,0,0)",Tt=_t.line.color||(u?s.contrast(k._fullLayout.plot_bgcolor):"#7f7f7f");bt.enter().append("path").attr("class","select-outline select-outline-"+P.id).style({opacity:x?_t.opacity/2:1,"stroke-dasharray":o(_t.line.dash,_t.line.width),"stroke-width":_t.line.width+"px","shape-rendering":"crispEdges"}).call(s.stroke,Tt).call(s.fill,wt).attr("fill-rule","evenodd").classed("cursor-move",!!x).attr("transform",O).attr("d",dt+"Z");var kt=E.append("path").attr("class","zoombox-corners").style({fill:s.background,stroke:s.defaultLine,"stroke-width":1}).attr("transform",O).attr("d","M0,0Z");if(x&&n.hasText){var At=E.select(".label-temp");At.empty()&&(At=E.append("g").classed("label-temp",!0).classed("select-outline",!0).style({opacity:.8}))}var Mt=A._uid+I.SELECTID,St=[],Et=X(k,n.xaxes,n.yaxes,n.subplot);S&&!t.shiftKey&&(n._clearSubplotSelections=function(){if(u){var t=vt._id,e=gt._id;it(k,t,e,Et);for(var r=(k.layout||{}).selections||[],n=[],i=!1,o=0;o<r.length;o++){var s=A.selections[o];s.xref!==t||s.yref!==e?n.push(r[o]):i=!0}i&&(k._fullLayout._noEmitSelectedAtStart=!0,a.call("_guiRelayout",k,{selections:n}))}});var Lt=function(t){return t.plotinfo.fillRangeItems||ct(t.xaxes.concat(t.yaxes))}(n);n.moveFn=function(t,e){n._clearSubplotSelections&&(n._clearSubplotSelections(),n._clearSubplotSelections=void 0),lt=Math.max(0,Math.min(yt,ot*t+F)),pt=Math.max(0,Math.min(mt,st*e+B));var r=Math.abs(lt-F),i=Math.abs(pt-B);if(g){var a,o,s;if(b){var l=A.selectdirection;switch(a="any"===l?i<Math.min(.6*r,D)?"h":r<Math.min(.6*i,D)?"v":"d":l){case"h":o=w?mt/2:0,s=mt;break;case"v":o=w?yt/2:0,s=yt}}if(x)switch(A.newshape.drawdirection){case"vertical":a="h",o=w?mt/2:0,s=mt;break;case"horizontal":a="v",o=w?yt/2:0,s=yt;break;case"ortho":r<i?(a="h",o=B,s=pt):(a="v",o=F,s=lt);break;default:a="d"}"h"===a?((J=T?_(w,[lt,o],[lt,s]):[[F,o],[F,s],[lt,s],[lt,o]]).xmin=T?lt:Math.min(F,lt),J.xmax=T?lt:Math.max(F,lt),J.ymin=Math.min(o,s),J.ymax=Math.max(o,s),kt.attr("d","M"+J.xmin+","+(B-D)+"h-4v"+2*D+"h4ZM"+(J.xmax-1)+","+(B-D)+"h4v"+2*D+"h-4Z")):"v"===a?((J=T?_(w,[o,pt],[s,pt]):[[o,B],[o,pt],[s,pt],[s,B]]).xmin=Math.min(o,s),J.xmax=Math.max(o,s),J.ymin=T?pt:Math.min(B,pt),J.ymax=T?pt:Math.max(B,pt),kt.attr("d","M"+(F-D)+","+J.ymin+"v-4h"+2*D+"v4ZM"+(F-D)+","+(J.ymax-1)+"v4h"+2*D+"v-4Z")):"d"===a&&((J=T?_(w,[F,B],[lt,pt]):[[F,B],[F,pt],[lt,pt],[lt,B]]).xmin=Math.min(F,lt),J.xmax=Math.max(F,lt),J.ymin=Math.min(B,pt),J.ymax=Math.max(B,pt),kt.attr("d","M0,0Z"))}else c&&(H.addPt([lt,pt]),J=H.filtered);if(n.selectionDefs&&n.selectionDefs.length?(W=Q(n.mergedPolygons,J,xt),J.subtract=xt,q=G(n.selectionDefs.concat([J]))):(W=[J],q=R(J)),m(et(W,y),bt,n),b){var u,f=nt(k,!1),h=f.eventData?f.eventData.points.slice():[];f=nt(k,!1,q,Et,n),q=f.selectionTesters,at=f.eventData,u=H?H.filtered:ut(W),L.throttle(Mt,I.SELECTDELAY,(function(){for(var t=(St=rt(q,Et)).slice(),e=0;e<h.length;e++){for(var r=h[e],n=!1,i=0;i<t.length;i++)if(t[i].curveNumber===r.curveNumber&&t[i].pointNumber===r.pointNumber){n=!0;break}n||t.push(r)}t.length&&(at||(at={}),at.points=t),Lt(at,u),function(t,e){t.emit("plotly_selecting",e)}(k,at)}))}},n.clickFn=function(t,e){if(kt.remove(),k._fullLayout._activeShapeIndex>=0)k._fullLayout._deactivateShape(k);else if(!x){var r=A.clickmode;L.done(Mt).then((function(){if(L.clear(Mt),2===t){for(bt.remove(),K=0;K<Et.length;K++)(tt=Et[K])._module.selectPoints(tt,!1);if($(k,Et),Y(n),ht(k),Et.length){var i=Et[0].xaxis,o=Et[0].yaxis;if(i&&o){for(var s=[],u=k._fullLayout.selections,c=0;c<u.length;c++){var f=u[c];f&&(f.xref===i._id&&f.yref===o._id||s.push(f))}s.length<u.length&&(k._fullLayout._noEmitSelectedAtStart=!0,a.call("_guiRelayout",k,{selections:s}))}}}else r.indexOf("select")>-1&&V(e,k,n.xaxes,n.yaxes,n.subplot,n,bt),"event"===r&&ft(k,void 0);l.click(k,e,P.id)})).catch(M.error)}},n.doneFn=function(){kt.remove(),L.done(Mt).then((function(){L.clear(Mt),!S&&J&&n.selectionDefs&&(J.subtract=xt,n.selectionDefs.push(J),n.mergedPolygons.length=0,[].push.apply(n.mergedPolygons,W)),(S||x)&&Y(n,S),n.doneFnCompleted&&n.doneFnCompleted(St),b&&ft(k,at)})).catch(M.error)}},clearOutline:x,clearSelectionsCache:Y,selectOnClick:V}},89827:function(t,e,r){"use strict";var n=r(50215),i=r(41940),a=r(82196).line,o=r(79952).P,s=r(1426).extendFlat,l=r(44467).templatedArray,u=(r(24695),r(9012)),c=r(5386).R,f=r(37281);t.exports=l("shape",{visible:s({},u.visible,{editType:"calc+arraydraw"}),showlegend:{valType:"boolean",dflt:!1,editType:"calc+arraydraw"},legend:s({},u.legend,{editType:"calc+arraydraw"}),legendgroup:s({},u.legendgroup,{editType:"calc+arraydraw"}),legendgrouptitle:{text:s({},u.legendgrouptitle.text,{editType:"calc+arraydraw"}),font:i({editType:"calc+arraydraw"}),editType:"calc+arraydraw"},legendrank:s({},u.legendrank,{editType:"calc+arraydraw"}),legendwidth:s({},u.legendwidth,{editType:"calc+arraydraw"}),type:{valType:"enumerated",values:["circle","rect","path","line"],editType:"calc+arraydraw"},layer:{valType:"enumerated",values:["below","above"],dflt:"above",editType:"arraydraw"},xref:s({},n.xref,{}),xsizemode:{valType:"enumerated",values:["scaled","pixel"],dflt:"scaled",editType:"calc+arraydraw"},xanchor:{valType:"any",editType:"calc+arraydraw"},x0:{valType:"any",editType:"calc+arraydraw"},x1:{valType:"any",editType:"calc+arraydraw"},yref:s({},n.yref,{}),ysizemode:{valType:"enumerated",values:["scaled","pixel"],dflt:"scaled",editType:"calc+arraydraw"},yanchor:{valType:"any",editType:"calc+arraydraw"},y0:{valType:"any",editType:"calc+arraydraw"},y1:{valType:"any",editType:"calc+arraydraw"},path:{valType:"string",editType:"calc+arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},line:{color:s({},a.color,{editType:"arraydraw"}),width:s({},a.width,{editType:"calc+arraydraw"}),dash:s({},o,{editType:"arraydraw"}),editType:"calc+arraydraw"},fillcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},fillrule:{valType:"enumerated",values:["evenodd","nonzero"],dflt:"evenodd",editType:"arraydraw"},editable:{valType:"boolean",dflt:!1,editType:"calc+arraydraw"},label:{text:{valType:"string",dflt:"",editType:"arraydraw"},texttemplate:c({},{keys:Object.keys(f)}),font:i({editType:"calc+arraydraw",colorEditType:"arraydraw"}),textposition:{valType:"enumerated",values:["top left","top center","top right","middle left","middle center","middle right","bottom left","bottom center","bottom right","start","middle","end"],editType:"arraydraw"},textangle:{valType:"angle",dflt:"auto",editType:"calc+arraydraw"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"auto",editType:"calc+arraydraw"},yanchor:{valType:"enumerated",values:["top","middle","bottom"],editType:"calc+arraydraw"},padding:{valType:"number",dflt:3,min:0,editType:"arraydraw"},editType:"arraydraw"},editType:"arraydraw"})},5627:function(t,e,r){"use strict";var n=r(71828),i=r(89298),a=r(21459),o=r(30477);function s(t){return u(t.line.width,t.xsizemode,t.x0,t.x1,t.path,!1)}function l(t){return u(t.line.width,t.ysizemode,t.y0,t.y1,t.path,!0)}function u(t,e,r,i,s,l){var u=t/2,c=l;if("pixel"===e){var f=s?o.extractPathCoords(s,l?a.paramIsY:a.paramIsX):[r,i],h=n.aggNums(Math.max,null,f),p=n.aggNums(Math.min,null,f),d=p<0?Math.abs(p)+u:u,v=h>0?h+u:u;return{ppad:u,ppadplus:c?d:v,ppadminus:c?v:d}}return{ppad:u}}function c(t,e,r,n,i){var s="category"===t.type||"multicategory"===t.type?t.r2c:t.d2c;if(void 0!==e)return[s(e),s(r)];if(n){var l,u,c,f,h=1/0,p=-1/0,d=n.match(a.segmentRE);for("date"===t.type&&(s=o.decodeDate(s)),l=0;l<d.length;l++)void 0!==(u=i[d[l].charAt(0)].drawn)&&(!(c=d[l].substr(1).match(a.paramRE))||c.length<u||((f=s(c[u]))<h&&(h=f),f>p&&(p=f)));return p>=h?[h,p]:void 0}}t.exports=function(t){var e=t._fullLayout,r=n.filterVisible(e.shapes);if(r.length&&t._fullData.length)for(var o=0;o<r.length;o++){var u,f,h=r[o];h._extremes={};var p=i.getRefType(h.xref),d=i.getRefType(h.yref);if("paper"!==h.xref&&"domain"!==p){var v="pixel"===h.xsizemode?h.xanchor:h.x0,g="pixel"===h.xsizemode?h.xanchor:h.x1;(f=c(u=i.getFromId(t,h.xref),v,g,h.path,a.paramIsX))&&(h._extremes[u._id]=i.findExtremes(u,f,s(h)))}if("paper"!==h.yref&&"domain"!==d){var y="pixel"===h.ysizemode?h.yanchor:h.y0,m="pixel"===h.ysizemode?h.yanchor:h.y1;(f=c(u=i.getFromId(t,h.yref),y,m,h.path,a.paramIsY))&&(h._extremes[u._id]=i.findExtremes(u,f,l(h)))}}}},21459:function(t){"use strict";t.exports={segmentRE:/[MLHVQCTSZ][^MLHVQCTSZ]*/g,paramRE:/[^\s,]+/g,paramIsX:{M:{0:!0,drawn:0},L:{0:!0,drawn:0},H:{0:!0,drawn:0},V:{},Q:{0:!0,2:!0,drawn:2},C:{0:!0,2:!0,4:!0,drawn:4},T:{0:!0,drawn:0},S:{0:!0,2:!0,drawn:2},Z:{}},paramIsY:{M:{1:!0,drawn:1},L:{1:!0,drawn:1},H:{},V:{0:!0,drawn:0},Q:{1:!0,3:!0,drawn:3},C:{1:!0,3:!0,5:!0,drawn:5},T:{1:!0,drawn:1},S:{1:!0,3:!0,drawn:5},Z:{}},numParams:{M:2,L:2,H:1,V:1,Q:4,C:6,T:2,S:4,Z:0}}},84726:function(t,e,r){"use strict";var n=r(71828),i=r(89298),a=r(85501),o=r(89827),s=r(30477);function l(t,e,r){function a(r,i){return n.coerce(t,e,o,r,i)}if(e._isShape=!0,a("visible")){a("showlegend")&&(a("legend"),a("legendwidth"),a("legendgroup"),a("legendgrouptitle.text"),n.coerceFont(a,"legendgrouptitle.font"),a("legendrank"));var l=a("path"),u=a("type",l?"path":"rect"),c="path"!==u;c&&delete e.path,a("editable"),a("layer"),a("opacity"),a("fillcolor"),a("fillrule"),a("line.width")&&(a("line.color"),a("line.dash"));for(var f=a("xsizemode"),h=a("ysizemode"),p=["x","y"],d=0;d<2;d++){var v,g,y,m=p[d],x=m+"anchor",b="x"===m?f:h,_={_fullLayout:r},w=i.coerceRef(t,e,_,m,void 0,"paper");if("range"===i.getRefType(w)?((v=i.getFromId(_,w))._shapeIndices.push(e._index),y=s.rangeToShapePosition(v),g=s.shapePositionToRange(v)):g=y=n.identity,c){var T=m+"0",k=m+"1",A=t[T],M=t[k];t[T]=g(t[T],!0),t[k]=g(t[k],!0),"pixel"===b?(a(T,0),a(k,10)):(i.coercePosition(e,_,a,w,T,.25),i.coercePosition(e,_,a,w,k,.75)),e[T]=y(e[T]),e[k]=y(e[k]),t[T]=A,t[k]=M}if("pixel"===b){var S=t[x];t[x]=g(t[x],!0),i.coercePosition(e,_,a,w,x,.25),e[x]=y(e[x]),t[x]=S}}c&&n.noneOrAll(t,e,["x0","x1","y0","y1"]);var E,L,C="line"===u;if(c&&(E=a("label.texttemplate")),E||(L=a("label.text")),L||E){a("label.textangle");var P=a("label.textposition",C?"middle":"middle center");a("label.xanchor"),a("label.yanchor",function(t,e){return t?"bottom":-1!==e.indexOf("top")?"top":-1!==e.indexOf("bottom")?"bottom":"middle"}(C,P)),a("label.padding"),n.coerceFont(a,"label.font",r.font)}}}t.exports=function(t,e){a(t,e,{name:"shapes",handleItemDefaults:l})}},48100:function(t,e,r){"use strict";var n=r(71828),i=r(89298),a=r(63893),o=r(91424),s=r(60165).readPaths,l=r(30477),u=l.getPathString,c=r(37281),f=r(18783).FROM_TL;t.exports=function(t,e,r,h){if(h.selectAll(".shape-label").remove(),r.label.text||r.label.texttemplate){var p;if(r.label.texttemplate){var d={};if("path"!==r.type){var v=i.getFromId(t,r.xref),g=i.getFromId(t,r.yref);for(var y in c){var m=c[y](r,v,g);void 0!==m&&(d[y]=m)}}p=n.texttemplateStringForShapes(r.label.texttemplate,{},t._fullLayout._d3locale,d)}else p=r.label.text;var x,b,_,w,T={"data-index":e},k=r.label.font,A=h.append("g").attr(T).classed("shape-label",!0).append("text").attr({"data-notex":1}).classed("shape-label-text",!0).text(p);if(r.path){var M=u(t,r),S=s(M,t);x=1/0,_=1/0,b=-1/0,w=-1/0;for(var E=0;E<S.length;E++)for(var L=0;L<S[E].length;L++)for(var C=S[E][L],P=1;P<C.length;P+=2){var O=C[P],I=C[P+1];x=Math.min(x,O),b=Math.max(b,O),_=Math.min(_,I),w=Math.max(w,I)}}else{var D=i.getFromId(t,r.xref),z=i.getRefType(r.xref),R=i.getFromId(t,r.yref),F=i.getRefType(r.yref),B=l.getDataToPixel(t,D,!1,z),N=l.getDataToPixel(t,R,!0,F);x=B(r.x0),b=B(r.x1),_=N(r.y0),w=N(r.y1)}var j=r.label.textangle;"auto"===j&&(j="line"===r.type?function(t,e,r,n){var i,a;return a=Math.abs(r-t),i=r>=t?e-n:n-e,-180/Math.PI*Math.atan2(i,a)}(x,_,b,w):0),A.call((function(e){return e.call(o.font,k).attr({}),a.convertToTspans(e,t),e}));var U=function(t,e,r,n,i,a,o){var s,l,u,c,h=i.label.textposition,p=i.label.textangle,d=i.label.padding,v=i.type,g=Math.PI/180*a,y=Math.sin(g),m=Math.cos(g),x=i.label.xanchor,b=i.label.yanchor;if("line"===v){"start"===h?(s=t,l=e):"end"===h?(s=r,l=n):(s=(t+r)/2,l=(e+n)/2),"auto"===x&&(x="start"===h?"auto"===p?r>t?"left":r<t?"right":"center":r>t?"right":r<t?"left":"center":"end"===h?"auto"===p?r>t?"right":r<t?"left":"center":r>t?"left":r<t?"right":"center":"center");var _={bottom:-1,middle:0,top:1};if("auto"===p){var w=_[b];u=-d*y*w,c=d*m*w}else u=d*{left:1,center:0,right:-1}[x],c=d*_[b];s+=u,l+=c}else u=d+3,-1!==h.indexOf("right")?(s=Math.max(t,r)-u,"auto"===x&&(x="right")):-1!==h.indexOf("left")?(s=Math.min(t,r)+u,"auto"===x&&(x="left")):(s=(t+r)/2,"auto"===x&&(x="center")),l=-1!==h.indexOf("top")?Math.min(e,n):-1!==h.indexOf("bottom")?Math.max(e,n):(e+n)/2,c=d,"bottom"===b?l-=c:"top"===b&&(l+=c);var T=f[b],k=i.label.font.size,A=o.height;return{textx:s+(A*T-k)*y,texty:l+-(A*T-k)*m,xanchor:x}}(x,_,b,w,r,j,o.bBox(A.node())),V=U.textx,H=U.texty,q=U.xanchor;A.attr({"text-anchor":{left:"start",center:"middle",right:"end"}[q],y:H,x:V,transform:"rotate("+j+","+V+","+H+")"}).call(a.positionText,V,H)}}},42359:function(t,e,r){"use strict";var n=r(71828).strTranslate,i=r(28569),a=r(64505),o=a.drawMode,s=a.selectMode,l=r(73972),u=r(7901),c=r(89995),f=c.i000,h=c.i090,p=c.i180,d=c.i270,v=r(51873).clearOutlineControllers,g=r(60165),y=g.pointsOnRectangle,m=g.pointsOnEllipse,x=g.writePaths,b=r(90551).newShapes,_=r(90551).createShapeObj,w=r(35855),T=r(48100);function k(t,e){var r,n,i,a=t[e][1],o=t[e][2],s=t.length;return n=t[r=(e+1)%s][1],i=t[r][2],n===a&&i===o&&(n=t[r=(e+2)%s][1],i=t[r][2]),[r,n,i]}t.exports=function t(e,r,a,c){c||(c=0);var g=a.gd;function A(){t(e,r,a,c++),(m(e[0])||a.hasText)&&M({redrawing:!0})}function M(t){var e={};void 0!==a.isActiveShape&&(a.isActiveShape=!1,e=b(r,a)),void 0!==a.isActiveSelection&&(a.isActiveSelection=!1,e=w(r,a),g._fullLayout._reselect=!0),Object.keys(e).length&&l.call((t||{}).redrawing?"relayout":"_guiRelayout",g,e)}var S,E,L,C,P,O=g._fullLayout._zoomlayer,I=a.dragmode,D=o(I),z=s(I);if((D||z)&&(g._fullLayout._outlining=!0),v(g),r.attr("d",x(e)),c||!a.isActiveShape&&!a.isActiveSelection||(P=function(t,e){for(var r=0;r<e.length;r++){var n=e[r];t[r]=[];for(var i=0;i<n.length;i++){t[r][i]=[];for(var a=0;a<n[i].length;a++)t[r][i][a]=n[i][a]}}return t}([],e),function(t){S=[];for(var r=0;r<e.length;r++){var o=e[r],s=y(o),l=!s&&m(o);S[r]=[];for(var c=o.length,v=0;v<c;v++)if("Z"!==o[v][0]&&(!l||v===f||v===h||v===p||v===d)){var x,b=s&&a.isActiveSelection;b&&(x=k(o,v));var _=o[v][1],w=o[v][2],T=t.append(b?"rect":"circle").attr("data-i",r).attr("data-j",v).style({fill:u.background,stroke:u.defaultLine,"stroke-width":1,"shape-rendering":"crispEdges"});if(b){var A=x[1]-_,M=x[2]-w,E=M?5:Math.max(Math.min(25,Math.abs(A)-5),5),L=A?5:Math.max(Math.min(25,Math.abs(M)-5),5);T.classed(M?"cursor-ew-resize":"cursor-ns-resize",!0).attr("width",E).attr("height",L).attr("x",_-E/2).attr("y",w-L/2).attr("transform",n(A/2,M/2))}else T.classed("cursor-grab",!0).attr("r",5).attr("cx",_).attr("cy",w);S[r][v]={element:T.node(),gd:g,prepFn:B,doneFn:j,clickFn:U},i.init(S[r][v])}}}(O.append("g").attr("class","outline-controllers")),function(){if(E=[],e.length){E[0]={element:r[0][0],gd:g,prepFn:H,doneFn:q,clickFn:G},i.init(E[0])}}()),D&&a.hasText){var R=O.select(".label-temp"),F=_(r,a,a.dragmode);T(g,"label-temp",F,R)}function B(t){L=+t.srcElement.getAttribute("data-i"),C=+t.srcElement.getAttribute("data-j"),S[L][C].moveFn=N}function N(t,r){if(e.length){var n=P[L][C][1],i=P[L][C][2],o=e[L],s=o.length;if(y(o)){var l=t,u=r;a.isActiveSelection&&(k(o,C)[1]===o[C][1]?u=0:l=0);for(var c=0;c<s;c++)if(c!==C){var f=o[c];f[1]===o[C][1]&&(f[1]=n+l),f[2]===o[C][2]&&(f[2]=i+u)}if(o[C][1]=n+l,o[C][2]=i+u,!y(o))for(var h=0;h<s;h++)for(var p=0;p<o[h].length;p++)o[h][p]=P[L][h][p]}else o[C][1]=n+t,o[C][2]=i+r;A()}}function j(){M()}function U(t,r){if(2===t){L=+r.srcElement.getAttribute("data-i"),C=+r.srcElement.getAttribute("data-j");var n=e[L];y(n)||m(n)||function(){if(e.length&&e[L]&&e[L].length){for(var t=[],r=0;r<e[L].length;r++)r!==C&&t.push(e[L][r]);t.length>1&&(2!==t.length||"Z"!==t[1][0])&&(0===C&&(t[0][0]="M"),e[L]=t,A(),M())}}()}}function V(t,r){!function(t,r){if(e.length)for(var n=0;n<e.length;n++)for(var i=0;i<e[n].length;i++)for(var a=0;a+2<e[n][i].length;a+=2)e[n][i][a+1]=P[n][i][a+1]+t,e[n][i][a+2]=P[n][i][a+2]+r}(t,r),A()}function H(t){(L=+t.srcElement.getAttribute("data-i"))||(L=0),E[L].moveFn=V}function q(){M()}function G(t){2===t&&function(t){if(s(t._fullLayout.dragmode)){v(t);var e=t._fullLayout._activeSelectionIndex,r=(t.layout||{}).selections||[];if(e<r.length){for(var n=[],i=0;i<r.length;i++)i!==e&&n.push(r[i]);delete t._fullLayout._activeSelectionIndex;var a=t._fullLayout.selections[e];t._fullLayout._deselect={xref:a.xref,yref:a.yref},l.call("_guiRelayout",t,{selections:n})}}}(g)}}},34031:function(t,e,r){"use strict";var n=r(39898),i=r(73972),a=r(71828),o=r(89298),s=r(60165).readPaths,l=r(42359),u=r(48100),c=r(51873).clearOutlineControllers,f=r(7901),h=r(91424),p=r(44467).arrayEditor,d=r(28569),v=r(6964),g=r(21459),y=r(30477),m=y.getPathString;function x(t){var e=t._fullLayout;for(var r in e._shapeUpperLayer.selectAll("path").remove(),e._shapeLowerLayer.selectAll("path").remove(),e._shapeUpperLayer.selectAll("text").remove(),e._shapeLowerLayer.selectAll("text").remove(),e._plots){var n=e._plots[r].shapelayer;n&&(n.selectAll("path").remove(),n.selectAll("text").remove())}for(var i=0;i<e.shapes.length;i++)!0===e.shapes[i].visible&&w(t,i)}function b(t){return!!t._fullLayout._outlining}function _(t){return!t._context.edits.shapePosition}function w(t,e){t._fullLayout._paperdiv.selectAll('.shapelayer [data-index="'+e+'"]').remove();var r=y.makeShapesOptionsAndPlotinfo(t,e),c=r.options,w=r.plotinfo;function M(r){var M=m(t,c),S={"data-index":e,"fill-rule":c.fillrule,d:M},E=c.opacity,L=c.fillcolor,C=c.line.width?c.line.color:"rgba(0,0,0,0)",P=c.line.width,O=c.line.dash;P||!0!==c.editable||(P=5,O="solid");var I="Z"!==M[M.length-1],D=_(t)&&c.editable&&t._fullLayout._activeShapeIndex===e;D&&(L=I?"rgba(0,0,0,0)":t._fullLayout.activeshape.fillcolor,E=t._fullLayout.activeshape.opacity);var z,R=r.append("g").classed("shape-group",!0).attr({"data-index":e}),F=R.append("path").attr(S).style("opacity",E).call(f.stroke,C).call(f.fill,L).call(h.dashLine,O,P);if(T(R,t,c),u(t,e,c,R),(D||t._context.edits.shapePosition)&&(z=p(t.layout,"shapes",c)),D){F.style({cursor:"move"});var B={element:F.node(),plotinfo:w,gd:t,editHelpers:z,hasText:c.label.text||c.label.texttemplate,isActiveShape:!0},N=s(M,t);l(N,F,B)}else t._context.edits.shapePosition?function(t,e,r,s,l,c){var f,p,x,_,w,A,M,S,E,L,C,P,O,I,D,z,R=10,F=10,B="pixel"===r.xsizemode,N="pixel"===r.ysizemode,j="line"===r.type,U="path"===r.type,V=c.modifyItem,H=n.select(e.node().parentNode),q=o.getFromId(t,r.xref),G=o.getRefType(r.xref),Z=o.getFromId(t,r.yref),Y=o.getRefType(r.yref),W=y.getDataToPixel(t,q,!1,G),X=y.getDataToPixel(t,Z,!0,Y),J=y.getPixelToData(t,q,!1,G),K=y.getPixelToData(t,Z,!0,Y),$=j?function(){var t=10,n=Math.max(r.line.width,t),i=l.append("g").attr("data-index",s).attr("drag-helper",!0);i.append("path").attr("d",e.attr("d")).style({cursor:"move","stroke-width":n,"stroke-opacity":"0"});var a={"fill-opacity":"0"},o=Math.max(n/2,t);return i.append("circle").attr({"data-line-point":"start-point",cx:B?W(r.xanchor)+r.x0:W(r.x0),cy:N?X(r.yanchor)-r.y0:X(r.y0),r:o}).style(a).classed("cursor-grab",!0),i.append("circle").attr({"data-line-point":"end-point",cx:B?W(r.xanchor)+r.x1:W(r.x1),cy:N?X(r.yanchor)-r.y1:X(r.y1),r:o}).style(a).classed("cursor-grab",!0),i}():e,Q={element:$.node(),gd:t,prepFn:function(n){b(t)||(B&&(w=W(r.xanchor)),N&&(A=X(r.yanchor)),"path"===r.type?D=r.path:(f=B?r.x0:W(r.x0),p=N?r.y0:X(r.y0),x=B?r.x1:W(r.x1),_=N?r.y1:X(r.y1)),f<x?(E=f,O="x0",L=x,I="x1"):(E=x,O="x1",L=f,I="x0"),!N&&p<_||N&&p>_?(M=p,C="y0",S=_,P="y1"):(M=_,C="y1",S=p,P="y0"),tt(n),nt(l,r),function(t,e,r){var n=e.xref,i=e.yref,a=o.getFromId(r,n),s=o.getFromId(r,i),l="";"paper"===n||a.autorange||(l+=n),"paper"===i||s.autorange||(l+=i),h.setClipUrl(t,l?"clip"+r._fullLayout._uid+l:null,r)}(e,r,t),Q.moveFn="move"===z?et:rt,Q.altKey=n.altKey)},doneFn:function(){b(t)||(v(e),it(l),T(e,t,r),i.call("_guiRelayout",t,c.getUpdateObj()))},clickFn:function(){b(t)||it(l)}};function tt(r){if(b(t))z=null;else if(j)z="path"===r.target.tagName?"move":"start-point"===r.target.attributes["data-line-point"].value?"resize-over-start-point":"resize-over-end-point";else{var n=Q.element.getBoundingClientRect(),i=n.right-n.left,a=n.bottom-n.top,o=r.clientX-n.left,s=r.clientY-n.top,l=!U&&i>R&&a>F&&!r.shiftKey?d.getCursor(o/i,1-s/a):"move";v(e,l),z=l.split("-")[0]}}function et(n,i){if("path"===r.type){var a=function(t){return t},o=a,c=a;B?V("xanchor",r.xanchor=J(w+n)):(o=function(t){return J(W(t)+n)},q&&"date"===q.type&&(o=y.encodeDate(o))),N?V("yanchor",r.yanchor=K(A+i)):(c=function(t){return K(X(t)+i)},Z&&"date"===Z.type&&(c=y.encodeDate(c))),V("path",r.path=k(D,o,c))}else B?V("xanchor",r.xanchor=J(w+n)):(V("x0",r.x0=J(f+n)),V("x1",r.x1=J(x+n))),N?V("yanchor",r.yanchor=K(A+i)):(V("y0",r.y0=K(p+i)),V("y1",r.y1=K(_+i)));e.attr("d",m(t,r)),nt(l,r),u(t,s,r,H)}function rt(n,i){if(U){var a=function(t){return t},o=a,c=a;B?V("xanchor",r.xanchor=J(w+n)):(o=function(t){return J(W(t)+n)},q&&"date"===q.type&&(o=y.encodeDate(o))),N?V("yanchor",r.yanchor=K(A+i)):(c=function(t){return K(X(t)+i)},Z&&"date"===Z.type&&(c=y.encodeDate(c))),V("path",r.path=k(D,o,c))}else if(j){if("resize-over-start-point"===z){var h=f+n,d=N?p-i:p+i;V("x0",r.x0=B?h:J(h)),V("y0",r.y0=N?d:K(d))}else if("resize-over-end-point"===z){var v=x+n,g=N?_-i:_+i;V("x1",r.x1=B?v:J(v)),V("y1",r.y1=N?g:K(g))}}else{var b=function(t){return-1!==z.indexOf(t)},T=b("n"),G=b("s"),Y=b("w"),$=b("e"),Q=T?M+i:M,tt=G?S+i:S,et=Y?E+n:E,rt=$?L+n:L;N&&(T&&(Q=M-i),G&&(tt=S-i)),(!N&&tt-Q>F||N&&Q-tt>F)&&(V(C,r[C]=N?Q:K(Q)),V(P,r[P]=N?tt:K(tt))),rt-et>R&&(V(O,r[O]=B?et:J(et)),V(I,r[I]=B?rt:J(rt)))}e.attr("d",m(t,r)),nt(l,r),u(t,s,r,H)}function nt(t,e){(B||N)&&function(){var r="path"!==e.type,n=t.selectAll(".visual-cue").data([0]);n.enter().append("path").attr({fill:"#fff","fill-rule":"evenodd",stroke:"#000","stroke-width":1}).classed("visual-cue",!0);var i=W(B?e.xanchor:a.midRange(r?[e.x0,e.x1]:y.extractPathCoords(e.path,g.paramIsX))),o=X(N?e.yanchor:a.midRange(r?[e.y0,e.y1]:y.extractPathCoords(e.path,g.paramIsY)));if(i=y.roundPositionForSharpStrokeRendering(i,1),o=y.roundPositionForSharpStrokeRendering(o,1),B&&N){var s="M"+(i-1-1)+","+(o-1-1)+"h-8v2h8 v8h2v-8 h8v-2h-8 v-8h-2 Z";n.attr("d",s)}else if(B){var l="M"+(i-1-1)+","+(o-9-1)+"v18 h2 v-18 Z";n.attr("d",l)}else{var u="M"+(i-9-1)+","+(o-1-1)+"h18 v2 h-18 Z";n.attr("d",u)}}()}function it(t){t.selectAll(".visual-cue").remove()}d.init(Q),$.node().onmousemove=tt}(t,F,c,e,r,z):!0===c.editable&&F.style("pointer-events",I||f.opacity(L)*E<=.5?"stroke":"all");F.node().addEventListener("click",(function(){return function(t,e){if(_(t)){var r=+e.node().getAttribute("data-index");if(r>=0){if(r===t._fullLayout._activeShapeIndex)return void A(t);t._fullLayout._activeShapeIndex=r,t._fullLayout._deactivateShape=A,x(t)}}}(t,F)}))}c._input&&!0===c.visible&&("below"!==c.layer?M(t._fullLayout._shapeUpperLayer):"paper"===c.xref||"paper"===c.yref?M(t._fullLayout._shapeLowerLayer):w._hadPlotinfo?M((w.mainplotinfo||w).shapelayer):M(t._fullLayout._shapeLowerLayer))}function T(t,e,r){var n=(r.xref+r.yref).replace(/paper/g,"").replace(/[xyz][1-9]* *domain/g,"");h.setClipUrl(t,n?"clip"+e._fullLayout._uid+n:null,e)}function k(t,e,r){return t.replace(g.segmentRE,(function(t){var n=0,i=t.charAt(0),a=g.paramIsX[i],o=g.paramIsY[i],s=g.numParams[i];return i+t.substr(1).replace(g.paramRE,(function(t){return n>=s||(a[n]?t=e(t):o[n]&&(t=r(t)),n++),t}))}))}function A(t){_(t)&&t._fullLayout._activeShapeIndex>=0&&(c(t),delete t._fullLayout._activeShapeIndex,x(t))}t.exports={draw:x,drawOne:w,eraseActiveShape:function(t){if(_(t)){c(t);var e=t._fullLayout._activeShapeIndex,r=(t.layout||{}).shapes||[];if(e<r.length){for(var n=[],a=0;a<r.length;a++)a!==e&&n.push(r[a]);return delete t._fullLayout._activeShapeIndex,i.call("_guiRelayout",t,{shapes:n})}}},drawLabel:u}},29241:function(t,e,r){"use strict";var n=r(30962).overrideAll,i=r(9012),a=r(41940),o=r(79952).P,s=r(1426).extendFlat,l=r(5386).R,u=r(37281);t.exports=n({newshape:{visible:s({},i.visible,{}),showlegend:{valType:"boolean",dflt:!1},legend:s({},i.legend,{}),legendgroup:s({},i.legendgroup,{}),legendgrouptitle:{text:s({},i.legendgrouptitle.text,{}),font:a({})},legendrank:s({},i.legendrank,{}),legendwidth:s({},i.legendwidth,{}),line:{color:{valType:"color"},width:{valType:"number",min:0,dflt:4},dash:s({},o,{dflt:"solid"})},fillcolor:{valType:"color",dflt:"rgba(0,0,0,0)"},fillrule:{valType:"enumerated",values:["evenodd","nonzero"],dflt:"evenodd"},opacity:{valType:"number",min:0,max:1,dflt:1},layer:{valType:"enumerated",values:["below","above"],dflt:"above"},drawdirection:{valType:"enumerated",values:["ortho","horizontal","vertical","diagonal"],dflt:"diagonal"},name:s({},i.name,{}),label:{text:{valType:"string",dflt:""},texttemplate:l({newshape:!0},{keys:Object.keys(u)}),font:a({}),textposition:{valType:"enumerated",values:["top left","top center","top right","middle left","middle center","middle right","bottom left","bottom center","bottom right","start","middle","end"]},textangle:{valType:"angle",dflt:"auto"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"auto"},yanchor:{valType:"enumerated",values:["top","middle","bottom"]},padding:{valType:"number",dflt:3,min:0}}},activeshape:{fillcolor:{valType:"color",dflt:"rgb(255,0,255)"},opacity:{valType:"number",min:0,max:1,dflt:.5}}},"none","from-root")},89995:function(t){"use strict";t.exports={CIRCLE_SIDES:32,i000:0,i090:8,i180:16,i270:24,cos45:Math.cos(Math.PI/4),sin45:Math.sin(Math.PI/4),SQRT2:Math.sqrt(2)}},45547:function(t,e,r){"use strict";var n=r(7901),i=r(71828);t.exports=function(t,e,r){if(r("newshape.visible"),r("newshape.name"),r("newshape.showlegend"),r("newshape.legend"),r("newshape.legendwidth"),r("newshape.legendgroup"),r("newshape.legendgrouptitle.text"),i.coerceFont(r,"newshape.legendgrouptitle.font"),r("newshape.legendrank"),r("newshape.drawdirection"),r("newshape.layer"),r("newshape.fillcolor"),r("newshape.fillrule"),r("newshape.opacity"),r("newshape.line.width")){var a=(t||{}).plot_bgcolor||"#FFF";r("newshape.line.color",n.contrast(a)),r("newshape.line.dash")}var o="drawline"===t.dragmode,s=r("newshape.label.text"),l=r("newshape.label.texttemplate");if(s||l){r("newshape.label.textangle");var u=r("newshape.label.textposition",o?"middle":"middle center");r("newshape.label.xanchor"),r("newshape.label.yanchor",function(t,e){return t?"bottom":-1!==e.indexOf("top")?"top":-1!==e.indexOf("bottom")?"bottom":"middle"}(o,u)),r("newshape.label.padding"),i.coerceFont(r,"newshape.label.font",e.font)}r("activeshape.fillcolor"),r("activeshape.opacity")}},60165:function(t,e,r){"use strict";var n=r(95616),i=r(89995),a=i.CIRCLE_SIDES,o=i.SQRT2,s=r(75549),l=s.p2r,u=s.r2p,c=[0,3,4,5,6,1,2],f=[0,3,4,1,2];function h(t,e){return Math.abs(t-e)<=1e-6}function p(t,e){var r=e[1]-t[1],n=e[2]-t[2];return Math.sqrt(r*r+n*n)}e.writePaths=function(t){var e=t.length;if(!e)return"M0,0Z";for(var r="",n=0;n<e;n++)for(var i=t[n].length,a=0;a<i;a++){var o=t[n][a][0];if("Z"===o)r+="Z";else for(var s=t[n][a].length,l=0;l<s;l++){var u=l;"Q"===o||"S"===o?u=f[l]:"C"===o&&(u=c[l]),r+=t[n][a][u],l>0&&l<s-1&&(r+=",")}}return r},e.readPaths=function(t,e,r,i){var o,s,c,f=n(t),h=[],p=-1,d=0,v=0,g=function(){s=d,c=v};g();for(var y=0;y<f.length;y++){var m,x,b,_,w=[],T=f[y][0],k=T;switch(T){case"M":h[++p]=[],d=+f[y][1],v=+f[y][2],w.push([k,d,v]),g();break;case"Q":case"S":m=+f[y][1],b=+f[y][2],d=+f[y][3],v=+f[y][4],w.push([k,d,v,m,b]);break;case"C":m=+f[y][1],b=+f[y][2],x=+f[y][3],_=+f[y][4],d=+f[y][5],v=+f[y][6],w.push([k,d,v,m,b,x,_]);break;case"T":case"L":d=+f[y][1],v=+f[y][2],w.push([k,d,v]);break;case"H":k="L",d=+f[y][1],w.push([k,d,v]);break;case"V":k="L",v=+f[y][1],w.push([k,d,v]);break;case"A":k="L";var A=+f[y][1],M=+f[y][2];+f[y][4]||(A=-A,M=-M);var S=d-A,E=v;for(o=1;o<=a/2;o++){var L=2*Math.PI*o/a;w.push([k,S+A*Math.cos(L),E+M*Math.sin(L)])}break;case"Z":d===s&&v===c||(d=s,v=c,w.push([k,d,v]))}for(var C=(r||{}).domain,P=e._fullLayout._size,O=r&&"pixel"===r.xsizemode,I=r&&"pixel"===r.ysizemode,D=!1===i,z=0;z<w.length;z++){for(o=0;o+2<7;o+=2){var R=w[z][o+1],F=w[z][o+2];void 0!==R&&void 0!==F&&(d=R,v=F,r&&(r.xaxis&&r.xaxis.p2r?(D&&(R-=r.xaxis._offset),R=O?u(r.xaxis,r.xanchor)+R:l(r.xaxis,R)):(D&&(R-=P.l),C?R=C.x[0]+R/P.w:R/=P.w),r.yaxis&&r.yaxis.p2r?(D&&(F-=r.yaxis._offset),F=I?u(r.yaxis,r.yanchor)-F:l(r.yaxis,F)):(D&&(F-=P.t),F=C?C.y[1]-F/P.h:1-F/P.h)),w[z][o+1]=R,w[z][o+2]=F)}h[p].push(w[z].slice())}}return h},e.pointsOnRectangle=function(t){if(5!==t.length)return!1;for(var e=1;e<3;e++){if(!h(t[0][e]-t[1][e],t[3][e]-t[2][e]))return!1;if(!h(t[0][e]-t[3][e],t[1][e]-t[2][e]))return!1}return!(!h(t[0][1],t[1][1])&&!h(t[0][1],t[3][1])||!(p(t[0],t[1])*p(t[0],t[3])))},e.pointsOnEllipse=function(t){var e=t.length;if(e!==a+1)return!1;e=a;for(var r=0;r<e;r++){var n=(2*e-r)%e,i=(e/2+n)%e,o=(e/2+r)%e;if(!h(p(t[r],t[o]),p(t[n],t[i])))return!1}return!0},e.handleEllipse=function(t,r,n){if(!t)return[r,n];var i=e.ellipseOver({x0:r[0],y0:r[1],x1:n[0],y1:n[1]}),s=(i.x1+i.x0)/2,l=(i.y1+i.y0)/2,u=(i.x1-i.x0)/2,c=(i.y1-i.y0)/2;u||(u=c/=o),c||(c=u/=o);for(var f=[],h=0;h<a;h++){var p=2*h*Math.PI/a;f.push([s+u*Math.cos(p),l+c*Math.sin(p)])}return f},e.ellipseOver=function(t){var e=t.x0,r=t.y0,n=t.x1,i=t.y1,a=n-e,s=i-r,l=((e-=a)+n)/2,u=((r-=s)+i)/2;return{x0:l-(a*=o),y0:u-(s*=o),x1:l+a,y1:u+s}},e.fixDatesForPaths=function(t,e,r){var n="date"===e.type,i="date"===r.type;if(!n&&!i)return t;for(var a=0;a<t.length;a++)for(var o=0;o<t[a].length;o++)for(var s=0;s+2<t[a][o].length;s+=2)n&&(t[a][o][s+1]=t[a][o][s+1].replace(" ","_")),i&&(t[a][o][s+2]=t[a][o][s+2].replace(" ","_"));return t}},90551:function(t,e,r){"use strict";var n=r(64505),i=n.drawMode,a=n.openMode,o=r(89995),s=o.i000,l=o.i090,u=o.i180,c=o.i270,f=o.cos45,h=o.sin45,p=r(75549),d=p.p2r,v=p.r2p,g=r(51873).clearOutline,y=r(60165),m=y.readPaths,x=y.writePaths,b=y.ellipseOver,_=y.fixDatesForPaths;function w(t,e,r){var n,i=t[0][0],o=e.gd,p=i.getAttribute("d"),g=o._fullLayout.newshape,y=e.plotinfo,w=e.isActiveShape,T=y.xaxis,k=y.yaxis,A=!!y.domain||!y.xaxis,M=!!y.domain||!y.yaxis,S=a(r),E=m(p,o,y,w),L={editable:!0,visible:g.visible,name:g.name,showlegend:g.showlegend,legend:g.legend,legendwidth:g.legendwidth,legendgroup:g.legendgroup,legendgrouptitle:{text:g.legendgrouptitle.text,font:g.legendgrouptitle.font},legendrank:g.legendrank,label:g.label,xref:A?"paper":T._id,yref:M?"paper":k._id,layer:g.layer,opacity:g.opacity,line:{color:g.line.color,width:g.line.width,dash:g.line.dash}};if(S||(L.fillcolor=g.fillcolor,L.fillrule=g.fillrule),1===E.length&&(n=E[0]),n&&5===n.length&&"drawrect"===r)L.type="rect",L.x0=n[0][1],L.y0=n[0][2],L.x1=n[2][1],L.y1=n[2][2];else if(n&&"drawline"===r)L.type="line",L.x0=n[0][1],L.y0=n[0][2],L.x1=n[1][1],L.y1=n[1][2];else if(n&&"drawcircle"===r){L.type="circle";var C=n[s][1],P=n[l][1],O=n[u][1],I=n[c][1],D=n[s][2],z=n[l][2],R=n[u][2],F=n[c][2],B=y.xaxis&&("date"===y.xaxis.type||"log"===y.xaxis.type),N=y.yaxis&&("date"===y.yaxis.type||"log"===y.yaxis.type);B&&(C=v(y.xaxis,C),P=v(y.xaxis,P),O=v(y.xaxis,O),I=v(y.xaxis,I)),N&&(D=v(y.yaxis,D),z=v(y.yaxis,z),R=v(y.yaxis,R),F=v(y.yaxis,F));var j=(P+I)/2,U=(D+R)/2,V=b({x0:j,y0:U,x1:j+(I-P+O-C)/2*f,y1:U+(F-z+R-D)/2*h});B&&(V.x0=d(y.xaxis,V.x0),V.x1=d(y.xaxis,V.x1)),N&&(V.y0=d(y.yaxis,V.y0),V.y1=d(y.yaxis,V.y1)),L.x0=V.x0,L.y0=V.y0,L.x1=V.x1,L.y1=V.y1}else L.type="path",T&&k&&_(E,T,k),L.path=x(E),n=null;return L}t.exports={newShapes:function(t,e){if(t.length&&t[0][0]){var r=e.gd,n=e.isActiveShape,a=e.dragmode,o=(r.layout||{}).shapes||[];if(!i(a)&&void 0!==n){var s=r._fullLayout._activeShapeIndex;if(s<o.length)switch(r._fullLayout.shapes[s].type){case"rect":a="drawrect";break;case"circle":a="drawcircle";break;case"line":a="drawline";break;case"path":var l=o[s].path||"";a="Z"===l[l.length-1]?"drawclosedpath":"drawopenpath"}}var u=w(t,e,a);g(r);for(var c=e.editHelpers,f=(c||{}).modifyItem,h=[],p=0;p<o.length;p++){var d=r._fullLayout.shapes[p];if(h[p]=d._input,void 0!==n&&p===r._fullLayout._activeShapeIndex){var v=u;switch(d.type){case"line":case"rect":case"circle":f("x0",v.x0),f("x1",v.x1),f("y0",v.y0),f("y1",v.y1);break;case"path":f("path",v.path)}}}return void 0===n?(h.push(u),h):c?c.getUpdateObj():{}}},createShapeObj:w}},51873:function(t){"use strict";t.exports={clearOutlineControllers:function(t){var e=t._fullLayout._zoomlayer;e&&e.selectAll(".outline-controllers").remove()},clearOutline:function(t){var e=t._fullLayout._zoomlayer;e&&e.selectAll(".select-outline").remove(),t._fullLayout._outlining=!1}}},30477:function(t,e,r){"use strict";var n=r(21459),i=r(71828),a=r(89298);e.rangeToShapePosition=function(t){return"log"===t.type?t.r2d:function(t){return t}},e.shapePositionToRange=function(t){return"log"===t.type?t.d2r:function(t){return t}},e.decodeDate=function(t){return function(e){return e.replace&&(e=e.replace("_"," ")),t(e)}},e.encodeDate=function(t){return function(e){return t(e).replace(" ","_")}},e.extractPathCoords=function(t,e,r){var a=[];return t.match(n.segmentRE).forEach((function(t){var o=e[t.charAt(0)].drawn;if(void 0!==o){var s=t.substr(1).match(n.paramRE);if(s&&!(s.length<o)){var l=s[o],u=r?l:i.cleanNumber(l);a.push(u)}}})),a},e.getDataToPixel=function(t,r,n,i){var a,o=t._fullLayout._size;if(r)if("domain"===i)a=function(t){return r._length*(n?1-t:t)+r._offset};else{var s=e.shapePositionToRange(r);a=function(t){return r._offset+r.r2p(s(t,!0))},"date"===r.type&&(a=e.decodeDate(a))}else a=n?function(t){return o.t+o.h*(1-t)}:function(t){return o.l+o.w*t};return a},e.getPixelToData=function(t,r,n,i){var a,o=t._fullLayout._size;if(r)if("domain"===i)a=function(t){var e=(t-r._offset)/r._length;return n?1-e:e};else{var s=e.rangeToShapePosition(r);a=function(t){return s(r.p2r(t-r._offset))}}else a=n?function(t){return 1-(t-o.t)/o.h}:function(t){return(t-o.l)/o.w};return a},e.roundPositionForSharpStrokeRendering=function(t,e){var r=1===Math.round(e%2),n=Math.round(t);return r?n+.5:n},e.makeShapesOptionsAndPlotinfo=function(t,e){var r=t._fullLayout.shapes[e]||{},n=t._fullLayout._plots[r.xref+r.yref];return n?n._hadPlotinfo=!0:(n={},r.xref&&"paper"!==r.xref&&(n.xaxis=t._fullLayout[r.xref+"axis"]),r.yref&&"paper"!==r.yref&&(n.yaxis=t._fullLayout[r.yref+"axis"])),n.xsizemode=r.xsizemode,n.ysizemode=r.ysizemode,n.xanchor=r.xanchor,n.yanchor=r.yanchor,{options:r,plotinfo:n}},e.makeSelectionsOptionsAndPlotinfo=function(t,e){var r=t._fullLayout.selections[e]||{},n=t._fullLayout._plots[r.xref+r.yref];return n?n._hadPlotinfo=!0:(n={},r.xref&&(n.xaxis=t._fullLayout[r.xref+"axis"]),r.yref&&(n.yaxis=t._fullLayout[r.yref+"axis"])),{options:r,plotinfo:n}},e.getPathString=function(t,r){var o,s,l,u,c,f,h,p,d=r.type,v=a.getRefType(r.xref),g=a.getRefType(r.yref),y=a.getFromId(t,r.xref),m=a.getFromId(t,r.yref),x=t._fullLayout._size;if(y?"domain"===v?s=function(t){return y._offset+y._length*t}:(o=e.shapePositionToRange(y),s=function(t){return y._offset+y.r2p(o(t,!0))}):s=function(t){return x.l+x.w*t},m?"domain"===g?u=function(t){return m._offset+m._length*(1-t)}:(l=e.shapePositionToRange(m),u=function(t){return m._offset+m.r2p(l(t,!0))}):u=function(t){return x.t+x.h*(1-t)},"path"===d)return y&&"date"===y.type&&(s=e.decodeDate(s)),m&&"date"===m.type&&(u=e.decodeDate(u)),function(t,e,r){var a=t.path,o=t.xsizemode,s=t.ysizemode,l=t.xanchor,u=t.yanchor;return a.replace(n.segmentRE,(function(t){var a=0,c=t.charAt(0),f=n.paramIsX[c],h=n.paramIsY[c],p=n.numParams[c],d=t.substr(1).replace(n.paramRE,(function(t){return f[a]?t="pixel"===o?e(l)+Number(t):e(t):h[a]&&(t="pixel"===s?r(u)-Number(t):r(t)),++a>p&&(t="X"),t}));return a>p&&(d=d.replace(/[\s,]*X.*/,""),i.log("Ignoring extra params in segment "+t)),c+d}))}(r,s,u);if("pixel"===r.xsizemode){var b=s(r.xanchor);c=b+r.x0,f=b+r.x1}else c=s(r.x0),f=s(r.x1);if("pixel"===r.ysizemode){var _=u(r.yanchor);h=_-r.y0,p=_-r.y1}else h=u(r.y0),p=u(r.y1);if("line"===d)return"M"+c+","+h+"L"+f+","+p;if("rect"===d)return"M"+c+","+h+"H"+f+"V"+p+"H"+c+"Z";var w=(c+f)/2,T=(h+p)/2,k=Math.abs(w-c),A=Math.abs(T-h),M="A"+k+","+A,S=w+k+","+T;return"M"+S+M+" 0 1,1 "+w+","+(T-A)+M+" 0 0,1 "+S+"Z"}},89853:function(t,e,r){"use strict";var n=r(34031);t.exports={moduleType:"component",name:"shapes",layoutAttributes:r(89827),supplyLayoutDefaults:r(84726),supplyDrawNewShapeDefaults:r(45547),includeBasePlot:r(76325)("shapes"),calcAutorange:r(5627),draw:n.draw,drawOne:n.drawOne}},37281:function(t){"use strict";function e(t,e){return e?e.d2l(t):t}function r(t,e){return e?e.l2d(t):t}function n(t,r){return e(t.x1,r)-e(t.x0,r)}function i(t,r,n){return e(t.y1,n)-e(t.y0,n)}t.exports={x0:function(t){return t.x0},x1:function(t){return t.x1},y0:function(t){return t.y0},y1:function(t){return t.y1},slope:function(t,e,r){return"line"!==t.type?void 0:i(t,0,r)/n(t,e)},dx:n,dy:i,width:function(t,e){return Math.abs(n(t,e))},height:function(t,e,r){return Math.abs(i(t,0,r))},length:function(t,e,r){return"line"!==t.type?void 0:Math.sqrt(Math.pow(n(t,e),2)+Math.pow(i(t,0,r),2))},xcenter:function(t,n){return r((e(t.x1,n)+e(t.x0,n))/2,n)},ycenter:function(t,n,i){return r((e(t.y1,i)+e(t.y0,i))/2,i)}}},75067:function(t,e,r){"use strict";var n=r(41940),i=r(35025),a=r(1426).extendDeepAll,o=r(30962).overrideAll,s=r(85594),l=r(44467).templatedArray,u=r(98292),c=l("step",{visible:{valType:"boolean",dflt:!0},method:{valType:"enumerated",values:["restyle","relayout","animate","update","skip"],dflt:"restyle"},args:{valType:"info_array",freeLength:!0,items:[{valType:"any"},{valType:"any"},{valType:"any"}]},label:{valType:"string"},value:{valType:"string"},execute:{valType:"boolean",dflt:!0}});t.exports=o(l("slider",{visible:{valType:"boolean",dflt:!0},active:{valType:"number",min:0,dflt:0},steps:c,lenmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"fraction"},len:{valType:"number",min:0,dflt:1},x:{valType:"number",min:-2,max:3,dflt:0},pad:a(i({editType:"arraydraw"}),{},{t:{dflt:20}}),xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"left"},y:{valType:"number",min:-2,max:3,dflt:0},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"top"},transition:{duration:{valType:"number",min:0,dflt:150},easing:{valType:"enumerated",values:s.transition.easing.values,dflt:"cubic-in-out"}},currentvalue:{visible:{valType:"boolean",dflt:!0},xanchor:{valType:"enumerated",values:["left","center","right"],dflt:"left"},offset:{valType:"number",dflt:10},prefix:{valType:"string"},suffix:{valType:"string"},font:n({})},font:n({}),activebgcolor:{valType:"color",dflt:u.gripBgActiveColor},bgcolor:{valType:"color",dflt:u.railBgColor},bordercolor:{valType:"color",dflt:u.railBorderColor},borderwidth:{valType:"number",min:0,dflt:u.railBorderWidth},ticklen:{valType:"number",min:0,dflt:u.tickLength},tickcolor:{valType:"color",dflt:u.tickColor},tickwidth:{valType:"number",min:0,dflt:1},minorticklen:{valType:"number",min:0,dflt:u.minorTickLength}}),"arraydraw","from-root")},98292:function(t){"use strict";t.exports={name:"sliders",containerClassName:"slider-container",groupClassName:"slider-group",inputAreaClass:"slider-input-area",railRectClass:"slider-rail-rect",railTouchRectClass:"slider-rail-touch-rect",gripRectClass:"slider-grip-rect",tickRectClass:"slider-tick-rect",inputProxyClass:"slider-input-proxy",labelsClass:"slider-labels",labelGroupClass:"slider-label-group",labelClass:"slider-label",currentValueClass:"slider-current-value",railHeight:5,menuIndexAttrName:"slider-active-index",autoMarginIdRoot:"slider-",minWidth:30,minHeight:30,textPadX:40,arrowOffsetX:4,railRadius:2,railWidth:5,railBorder:4,railBorderWidth:1,railBorderColor:"#bec8d9",railBgColor:"#f8fafc",railInset:8,stepInset:10,gripRadius:10,gripWidth:20,gripHeight:20,gripBorder:20,gripBorderWidth:1,gripBorderColor:"#bec8d9",gripBgColor:"#f6f8fa",gripBgActiveColor:"#dbdde0",labelPadding:8,labelOffset:0,tickWidth:1,tickColor:"#333",tickOffset:25,tickLength:7,minorTickOffset:25,minorTickColor:"#333",minorTickLength:4,currentValuePadding:8,currentValueInset:0}},12343:function(t,e,r){"use strict";var n=r(71828),i=r(85501),a=r(75067),o=r(98292).name,s=a.steps;function l(t,e,r){function o(r,i){return n.coerce(t,e,a,r,i)}for(var s=i(t,e,{name:"steps",handleItemDefaults:u}),l=0,c=0;c<s.length;c++)s[c].visible&&l++;if(l<2?e.visible=!1:o("visible")){e._stepCount=l;var f=e._visibleSteps=n.filterVisible(s);(s[o("active")]||{}).visible||(e.active=f[0]._index),o("x"),o("y"),n.noneOrAll(t,e,["x","y"]),o("xanchor"),o("yanchor"),o("len"),o("lenmode"),o("pad.t"),o("pad.r"),o("pad.b"),o("pad.l"),n.coerceFont(o,"font",r.font),o("currentvalue.visible")&&(o("currentvalue.xanchor"),o("currentvalue.prefix"),o("currentvalue.suffix"),o("currentvalue.offset"),n.coerceFont(o,"currentvalue.font",e.font)),o("transition.duration"),o("transition.easing"),o("bgcolor"),o("activebgcolor"),o("bordercolor"),o("borderwidth"),o("ticklen"),o("tickwidth"),o("tickcolor"),o("minorticklen")}}function u(t,e){function r(r,i){return n.coerce(t,e,s,r,i)}if("skip"===t.method||Array.isArray(t.args)?r("visible"):e.visible=!1){r("method"),r("args");var i=r("label","step-"+e._index);r("value",i),r("execute")}}t.exports=function(t,e){i(t,e,{name:o,handleItemDefaults:l})}},44504:function(t,e,r){"use strict";var n=r(39898),i=r(74875),a=r(7901),o=r(91424),s=r(71828),l=s.strTranslate,u=r(63893),c=r(44467).arrayEditor,f=r(98292),h=r(18783),p=h.LINE_SPACING,d=h.FROM_TL,v=h.FROM_BR;function g(t){return f.autoMarginIdRoot+t._index}function y(t){return t._index}function m(t,e){var r=o.tester.selectAll("g."+f.labelGroupClass).data(e._visibleSteps);r.enter().append("g").classed(f.labelGroupClass,!0);var a=0,l=0;r.each((function(t){var r=_(n.select(this),{step:t},e).node();if(r){var i=o.bBox(r);l=Math.max(l,i.height),a=Math.max(a,i.width)}})),r.remove();var c=e._dims={};c.inputAreaWidth=Math.max(f.railWidth,f.gripHeight);var h=t._fullLayout._size;c.lx=h.l+h.w*e.x,c.ly=h.t+h.h*(1-e.y),"fraction"===e.lenmode?c.outerLength=Math.round(h.w*e.len):c.outerLength=e.len,c.inputAreaStart=0,c.inputAreaLength=Math.round(c.outerLength-e.pad.l-e.pad.r);var p=(c.inputAreaLength-2*f.stepInset)/(e._stepCount-1),y=a+f.labelPadding;if(c.labelStride=Math.max(1,Math.ceil(y/p)),c.labelHeight=l,c.currentValueMaxWidth=0,c.currentValueHeight=0,c.currentValueTotalHeight=0,c.currentValueMaxLines=1,e.currentvalue.visible){var m=o.tester.append("g");r.each((function(t){var r=x(m,e,t.label),n=r.node()&&o.bBox(r.node())||{width:0,height:0},i=u.lineCount(r);c.currentValueMaxWidth=Math.max(c.currentValueMaxWidth,Math.ceil(n.width)),c.currentValueHeight=Math.max(c.currentValueHeight,Math.ceil(n.height)),c.currentValueMaxLines=Math.max(c.currentValueMaxLines,i)})),c.currentValueTotalHeight=c.currentValueHeight+e.currentvalue.offset,m.remove()}c.height=c.currentValueTotalHeight+f.tickOffset+e.ticklen+f.labelOffset+c.labelHeight+e.pad.t+e.pad.b;var b="left";s.isRightAnchor(e)&&(c.lx-=c.outerLength,b="right"),s.isCenterAnchor(e)&&(c.lx-=c.outerLength/2,b="center");var w="top";s.isBottomAnchor(e)&&(c.ly-=c.height,w="bottom"),s.isMiddleAnchor(e)&&(c.ly-=c.height/2,w="middle"),c.outerLength=Math.ceil(c.outerLength),c.height=Math.ceil(c.height),c.lx=Math.round(c.lx),c.ly=Math.round(c.ly);var T={y:e.y,b:c.height*v[w],t:c.height*d[w]};"fraction"===e.lenmode?(T.l=0,T.xl=e.x-e.len*d[b],T.r=0,T.xr=e.x+e.len*v[b]):(T.x=e.x,T.l=c.outerLength*d[b],T.r=c.outerLength*v[b]),i.autoMargin(t,g(e),T)}function x(t,e,r){if(e.currentvalue.visible){var n,i,a=e._dims;switch(e.currentvalue.xanchor){case"right":n=a.inputAreaLength-f.currentValueInset-a.currentValueMaxWidth,i="left";break;case"center":n=.5*a.inputAreaLength,i="middle";break;default:n=f.currentValueInset,i="left"}var l=s.ensureSingle(t,"text",f.labelClass,(function(t){t.attr({"text-anchor":i,"data-notex":1})})),c=e.currentvalue.prefix?e.currentvalue.prefix:"";if("string"==typeof r)c+=r;else{var h=e.steps[e.active].label,d=e._gd._fullLayout._meta;d&&(h=s.templateString(h,d)),c+=h}e.currentvalue.suffix&&(c+=e.currentvalue.suffix),l.call(o.font,e.currentvalue.font).text(c).call(u.convertToTspans,e._gd);var v=u.lineCount(l),g=(a.currentValueMaxLines+1-v)*e.currentvalue.font.size*p;return u.positionText(l,n,g),l}}function b(t,e,r){s.ensureSingle(t,"rect",f.gripRectClass,(function(n){n.call(A,e,t,r).style("pointer-events","all")})).attr({width:f.gripWidth,height:f.gripHeight,rx:f.gripRadius,ry:f.gripRadius}).call(a.stroke,r.bordercolor).call(a.fill,r.bgcolor).style("stroke-width",r.borderwidth+"px")}function _(t,e,r){var n=s.ensureSingle(t,"text",f.labelClass,(function(t){t.attr({"text-anchor":"middle","data-notex":1})})),i=e.step.label,a=r._gd._fullLayout._meta;return a&&(i=s.templateString(i,a)),n.call(o.font,r.font).text(i).call(u.convertToTspans,r._gd),n}function w(t,e){var r=s.ensureSingle(t,"g",f.labelsClass),i=e._dims,a=r.selectAll("g."+f.labelGroupClass).data(i.labelSteps);a.enter().append("g").classed(f.labelGroupClass,!0),a.exit().remove(),a.each((function(t){var r=n.select(this);r.call(_,t,e),o.setTranslate(r,E(e,t.fraction),f.tickOffset+e.ticklen+e.font.size*p+f.labelOffset+i.currentValueTotalHeight)}))}function T(t,e,r,n,i){var a=Math.round(n*(r._stepCount-1)),o=r._visibleSteps[a]._index;o!==r.active&&k(t,e,r,o,!0,i)}function k(t,e,r,n,a,o){var s=r.active;r.active=n,c(t.layout,f.name,r).applyUpdate("active",n);var l=r.steps[r.active];e.call(S,r,o),e.call(x,r),t.emit("plotly_sliderchange",{slider:r,step:r.steps[r.active],interaction:a,previousActive:s}),l&&l.method&&a&&(e._nextMethod?(e._nextMethod.step=l,e._nextMethod.doCallback=a,e._nextMethod.doTransition=o):(e._nextMethod={step:l,doCallback:a,doTransition:o},e._nextMethodRaf=window.requestAnimationFrame((function(){var r=e._nextMethod.step;r.method&&(r.execute&&i.executeAPICommand(t,r.method,r.args),e._nextMethod=null,e._nextMethodRaf=null)}))))}function A(t,e,r){if(!e._context.staticPlot){var i=r.node(),o=n.select(e);t.on("mousedown",l),t.on("touchstart",l)}function s(){return r.data()[0]}function l(){var t=s();e.emit("plotly_sliderstart",{slider:t});var l=r.select("."+f.gripRectClass);n.event.stopPropagation(),n.event.preventDefault(),l.call(a.fill,t.activebgcolor);var u=L(t,n.mouse(i)[0]);function c(){var t=s(),a=L(t,n.mouse(i)[0]);T(e,r,t,a,!1)}function h(){var t=s();t._dragging=!1,l.call(a.fill,t.bgcolor),o.on("mouseup",null),o.on("mousemove",null),o.on("touchend",null),o.on("touchmove",null),e.emit("plotly_sliderend",{slider:t,step:t.steps[t.active]})}T(e,r,t,u,!0),t._dragging=!0,o.on("mousemove",c),o.on("touchmove",c),o.on("mouseup",h),o.on("touchend",h)}}function M(t,e){var r=t.selectAll("rect."+f.tickRectClass).data(e._visibleSteps),i=e._dims;r.enter().append("rect").classed(f.tickRectClass,!0),r.exit().remove(),r.attr({width:e.tickwidth+"px","shape-rendering":"crispEdges"}),r.each((function(t,r){var s=r%i.labelStride==0,l=n.select(this);l.attr({height:s?e.ticklen:e.minorticklen}).call(a.fill,e.tickcolor),o.setTranslate(l,E(e,r/(e._stepCount-1))-.5*e.tickwidth,(s?f.tickOffset:f.minorTickOffset)+i.currentValueTotalHeight)}))}function S(t,e,r){for(var n=t.select("rect."+f.gripRectClass),i=0,a=0;a<e._stepCount;a++)if(e._visibleSteps[a]._index===e.active){i=a;break}var o=E(e,i/(e._stepCount-1));if(!e._invokingCommand){var s=n;r&&e.transition.duration>0&&(s=s.transition().duration(e.transition.duration).ease(e.transition.easing)),s.attr("transform",l(o-.5*f.gripWidth,e._dims.currentValueTotalHeight))}}function E(t,e){var r=t._dims;return r.inputAreaStart+f.stepInset+(r.inputAreaLength-2*f.stepInset)*Math.min(1,Math.max(0,e))}function L(t,e){var r=t._dims;return Math.min(1,Math.max(0,(e-f.stepInset-r.inputAreaStart)/(r.inputAreaLength-2*f.stepInset-2*r.inputAreaStart)))}function C(t,e,r){var n=r._dims,i=s.ensureSingle(t,"rect",f.railTouchRectClass,(function(n){n.call(A,e,t,r).style("pointer-events","all")}));i.attr({width:n.inputAreaLength,height:Math.max(n.inputAreaWidth,f.tickOffset+r.ticklen+n.labelHeight)}).call(a.fill,r.bgcolor).attr("opacity",0),o.setTranslate(i,0,n.currentValueTotalHeight)}function P(t,e){var r=e._dims,n=r.inputAreaLength-2*f.railInset,i=s.ensureSingle(t,"rect",f.railRectClass);i.attr({width:n,height:f.railWidth,rx:f.railRadius,ry:f.railRadius,"shape-rendering":"crispEdges"}).call(a.stroke,e.bordercolor).call(a.fill,e.bgcolor).style("stroke-width",e.borderwidth+"px"),o.setTranslate(i,f.railInset,.5*(r.inputAreaWidth-f.railWidth)+r.currentValueTotalHeight)}t.exports=function(t){var e=t._context.staticPlot,r=t._fullLayout,a=function(t,e){for(var r=t[f.name],n=[],i=0;i<r.length;i++){var a=r[i];a.visible&&(a._gd=e,n.push(a))}return n}(r,t),s=r._infolayer.selectAll("g."+f.containerClassName).data(a.length>0?[0]:[]);function l(e){e._commandObserver&&(e._commandObserver.remove(),delete e._commandObserver),i.autoMargin(t,g(e))}if(s.enter().append("g").classed(f.containerClassName,!0).style("cursor",e?null:"ew-resize"),s.exit().each((function(){n.select(this).selectAll("g."+f.groupClassName).each(l)})).remove(),0!==a.length){var u=s.selectAll("g."+f.groupClassName).data(a,y);u.enter().append("g").classed(f.groupClassName,!0),u.exit().each(l).remove();for(var c=0;c<a.length;c++){var h=a[c];m(t,h)}u.each((function(e){var r=n.select(this);!function(t){var e=t._dims;e.labelSteps=[];for(var r=t._stepCount,n=0;n<r;n+=e.labelStride)e.labelSteps.push({fraction:n/(r-1),step:t._visibleSteps[n]})}(e),i.manageCommandObserver(t,e,e._visibleSteps,(function(e){var n=r.data()[0];n.active!==e.index&&(n._dragging||k(t,r,n,e.index,!1,!0))})),function(t,e,r){(r.steps[r.active]||{}).visible||(r.active=r._visibleSteps[0]._index),e.call(x,r).call(P,r).call(w,r).call(M,r).call(C,t,r).call(b,t,r);var n=r._dims;o.setTranslate(e,n.lx+r.pad.l,n.ly+r.pad.t),e.call(S,r,!1),e.call(x,r)}(t,n.select(this),e)}))}}},23243:function(t,e,r){"use strict";var n=r(98292);t.exports={moduleType:"component",name:n.name,layoutAttributes:r(75067),supplyLayoutDefaults:r(12343),draw:r(44504)}},92998:function(t,e,r){"use strict";var n=r(39898),i=r(92770),a=r(74875),o=r(73972),s=r(71828),l=s.strTranslate,u=r(91424),c=r(7901),f=r(63893),h=r(37822),p=r(18783).OPPOSITE_SIDE,d=/ [XY][0-9]* /;t.exports={draw:function(t,e,r){var v,g=r.propContainer,y=r.propName,m=r.placeholder,x=r.traceIndex,b=r.avoid||{},_=r.attributes,w=r.transform,T=r.containerGroup,k=t._fullLayout,A=1,M=!1,S=g.title,E=(S&&S.text?S.text:"").trim(),L=S&&S.font?S.font:{},C=L.family,P=L.size,O=L.color;"title.text"===y?v="titleText":-1!==y.indexOf("axis")?v="axisTitleText":y.indexOf(!0)&&(v="colorbarTitleText");var I=t._context.edits[v];""===E?A=0:E.replace(d," % ")===m.replace(d," % ")&&(A=.2,M=!0,I||(E="")),r._meta?E=s.templateString(E,r._meta):k._meta&&(E=s.templateString(E,k._meta));var D,z=E||I;T||(T=s.ensureSingle(k._infolayer,"g","g-"+e),D=k._hColorbarMoveTitle);var R=T.selectAll("text").data(z?[0]:[]);if(R.enter().append("text"),R.text(E).attr("class",e),R.exit().remove(),!z)return T;function F(t){s.syncOrAsync([B,N],t)}function B(e){var r;return!w&&D&&(w={}),w?(r="",w.rotate&&(r+="rotate("+[w.rotate,_.x,_.y]+")"),(w.offset||D)&&(r+=l(0,(w.offset||0)-(D||0)))):r=null,e.attr("transform",r),e.style({"font-family":C,"font-size":n.round(P,2)+"px",fill:c.rgb(O),opacity:A*c.opacity(O),"font-weight":a.fontWeight}).attr(_).call(f.convertToTspans,t),a.previousPromises(t)}function N(e){var r=n.select(e.node().parentNode);if(b&&b.selection&&b.side&&E){r.attr("transform",null);var a=p[b.side],o="left"===b.side||"top"===b.side?-1:1,c=i(b.pad)?b.pad:2,f=u.bBox(r.node()),h={t:0,b:0,l:0,r:0},d=t._fullLayout._reservedMargin;for(var v in d)for(var y in d[v]){var m=d[v][y];h[y]=Math.max(h[y],m)}var x={left:h.l,top:h.t,right:k.width-h.r,bottom:k.height-h.b},_=b.maxShift||o*(x[b.side]-f[b.side]),w=0;if(_<0)w=_;else{var T=b.offsetLeft||0,A=b.offsetTop||0;f.left-=T,f.right-=T,f.top-=A,f.bottom-=A,b.selection.each((function(){var t=u.bBox(this);s.bBoxIntersect(f,t,c)&&(w=Math.max(w,o*(t[b.side]-f[a])+c))})),w=Math.min(_,w),g._titleScoot=Math.abs(w)}if(w>0||_<0){var M={left:[-w,0],right:[w,0],top:[0,-w],bottom:[0,w]}[b.side];r.attr("transform",l(M[0],M[1]))}}}return R.call(F),I&&(E?R.on(".opacity",null):(A=0,M=!0,R.text(m).on("mouseover.opacity",(function(){n.select(this).transition().duration(h.SHOW_PLACEHOLDER).style("opacity",1)})).on("mouseout.opacity",(function(){n.select(this).transition().duration(h.HIDE_PLACEHOLDER).style("opacity",0)}))),R.call(f.makeEditable,{gd:t}).on("edit",(function(e){void 0!==x?o.call("_guiRestyle",t,y,e,x):o.call("_guiRelayout",t,y,e)})).on("cancel",(function(){this.text(this.attr("data-unformatted")).call(F)})).on("input",(function(t){this.text(t||" ").call(f.positionText,_.x,_.y)}))),R.classed("js-placeholder",M),T}}},7163:function(t,e,r){"use strict";var n=r(41940),i=r(22399),a=r(1426).extendFlat,o=r(30962).overrideAll,s=r(35025),l=r(44467).templatedArray,u=l("button",{visible:{valType:"boolean"},method:{valType:"enumerated",values:["restyle","relayout","animate","update","skip"],dflt:"restyle"},args:{valType:"info_array",freeLength:!0,items:[{valType:"any"},{valType:"any"},{valType:"any"}]},args2:{valType:"info_array",freeLength:!0,items:[{valType:"any"},{valType:"any"},{valType:"any"}]},label:{valType:"string",dflt:""},execute:{valType:"boolean",dflt:!0}});t.exports=o(l("updatemenu",{_arrayAttrRegexps:[/^updatemenus\[(0|[1-9][0-9]+)\]\.buttons/],visible:{valType:"boolean"},type:{valType:"enumerated",values:["dropdown","buttons"],dflt:"dropdown"},direction:{valType:"enumerated",values:["left","right","up","down"],dflt:"down"},active:{valType:"integer",min:-1,dflt:0},showactive:{valType:"boolean",dflt:!0},buttons:u,x:{valType:"number",min:-2,max:3,dflt:-.05},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"right"},y:{valType:"number",min:-2,max:3,dflt:1},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"top"},pad:a(s({editType:"arraydraw"}),{}),font:n({}),bgcolor:{valType:"color"},bordercolor:{valType:"color",dflt:i.borderLine},borderwidth:{valType:"number",min:0,dflt:1,editType:"arraydraw"}}),"arraydraw","from-root")},75909:function(t){"use strict";t.exports={name:"updatemenus",containerClassName:"updatemenu-container",headerGroupClassName:"updatemenu-header-group",headerClassName:"updatemenu-header",headerArrowClassName:"updatemenu-header-arrow",dropdownButtonGroupClassName:"updatemenu-dropdown-button-group",dropdownButtonClassName:"updatemenu-dropdown-button",buttonClassName:"updatemenu-button",itemRectClassName:"updatemenu-item-rect",itemTextClassName:"updatemenu-item-text",menuIndexAttrName:"updatemenu-active-index",autoMarginIdRoot:"updatemenu-",blankHeaderOpts:{label:"  "},minWidth:30,minHeight:30,textPadX:24,arrowPadX:16,rx:2,ry:2,textOffsetX:12,textOffsetY:3,arrowOffsetX:4,gapButtonHeader:5,gapButton:2,activeColor:"#F4FAFF",hoverColor:"#F4FAFF",arrowSymbol:{left:"◄",right:"►",up:"▲",down:"▼"}}},64897:function(t,e,r){"use strict";var n=r(71828),i=r(85501),a=r(7163),o=r(75909).name,s=a.buttons;function l(t,e,r){function o(r,i){return n.coerce(t,e,a,r,i)}o("visible",i(t,e,{name:"buttons",handleItemDefaults:u}).length>0)&&(o("active"),o("direction"),o("type"),o("showactive"),o("x"),o("y"),n.noneOrAll(t,e,["x","y"]),o("xanchor"),o("yanchor"),o("pad.t"),o("pad.r"),o("pad.b"),o("pad.l"),n.coerceFont(o,"font",r.font),o("bgcolor",r.paper_bgcolor),o("bordercolor"),o("borderwidth"))}function u(t,e){function r(r,i){return n.coerce(t,e,s,r,i)}r("visible","skip"===t.method||Array.isArray(t.args))&&(r("method"),r("args"),r("args2"),r("label"),r("execute"))}t.exports=function(t,e){i(t,e,{name:o,handleItemDefaults:l})}},13689:function(t,e,r){"use strict";var n=r(39898),i=r(74875),a=r(7901),o=r(91424),s=r(71828),l=r(63893),u=r(44467).arrayEditor,c=r(18783).LINE_SPACING,f=r(75909),h=r(25849);function p(t){return t._index}function d(t,e){return+t.attr(f.menuIndexAttrName)===e._index}function v(t,e,r,n,i,a,o,s){e.active=o,u(t.layout,f.name,e).applyUpdate("active",o),"buttons"===e.type?y(t,n,null,null,e):"dropdown"===e.type&&(i.attr(f.menuIndexAttrName,"-1"),g(t,n,i,a,e),s||y(t,n,i,a,e))}function g(t,e,r,n,i){var a=s.ensureSingle(e,"g",f.headerClassName,(function(t){t.style("pointer-events","all")})),l=i._dims,u=i.active,c=i.buttons[u]||f.blankHeaderOpts,h={y:i.pad.t,yPad:0,x:i.pad.l,xPad:0,index:0},p={width:l.headerWidth,height:l.headerHeight};a.call(m,i,c,t).call(M,i,h,p),s.ensureSingle(e,"text",f.headerArrowClassName,(function(t){t.attr("text-anchor","end").call(o.font,i.font).text(f.arrowSymbol[i.direction])})).attr({x:l.headerWidth-f.arrowOffsetX+i.pad.l,y:l.headerHeight/2+f.textOffsetY+i.pad.t}),a.on("click",(function(){r.call(S,String(d(r,i)?-1:i._index)),y(t,e,r,n,i)})),a.on("mouseover",(function(){a.call(w)})),a.on("mouseout",(function(){a.call(T,i)})),o.setTranslate(e,l.lx,l.ly)}function y(t,e,r,a,o){r||(r=e).attr("pointer-events","all");var l=function(t){return-1==+t.attr(f.menuIndexAttrName)}(r)&&"buttons"!==o.type?[]:o.buttons,u="dropdown"===o.type?f.dropdownButtonClassName:f.buttonClassName,c=r.selectAll("g."+u).data(s.filterVisible(l)),h=c.enter().append("g").classed(u,!0),p=c.exit();"dropdown"===o.type?(h.attr("opacity","0").transition().attr("opacity","1"),p.transition().attr("opacity","0").remove()):p.remove();var d=0,g=0,y=o._dims,x=-1!==["up","down"].indexOf(o.direction);"dropdown"===o.type&&(x?g=y.headerHeight+f.gapButtonHeader:d=y.headerWidth+f.gapButtonHeader),"dropdown"===o.type&&"up"===o.direction&&(g=-f.gapButtonHeader+f.gapButton-y.openHeight),"dropdown"===o.type&&"left"===o.direction&&(d=-f.gapButtonHeader+f.gapButton-y.openWidth);var b={x:y.lx+d+o.pad.l,y:y.ly+g+o.pad.t,yPad:f.gapButton,xPad:f.gapButton,index:0},k={l:b.x+o.borderwidth,t:b.y+o.borderwidth};c.each((function(s,l){var u=n.select(this);u.call(m,o,s,t).call(M,o,b),u.on("click",(function(){n.event.defaultPrevented||(s.execute&&(s.args2&&o.active===l?(v(t,o,0,e,r,a,-1),i.executeAPICommand(t,s.method,s.args2)):(v(t,o,0,e,r,a,l),i.executeAPICommand(t,s.method,s.args))),t.emit("plotly_buttonclicked",{menu:o,button:s,active:o.active}))})),u.on("mouseover",(function(){u.call(w)})),u.on("mouseout",(function(){u.call(T,o),c.call(_,o)}))})),c.call(_,o),x?(k.w=Math.max(y.openWidth,y.headerWidth),k.h=b.y-k.t):(k.w=b.x-k.l,k.h=Math.max(y.openHeight,y.headerHeight)),k.direction=o.direction,a&&(c.size()?function(t,e,r,n,i,a){var o,s,l,u=i.direction,c="up"===u||"down"===u,h=i._dims,p=i.active;if(c)for(s=0,l=0;l<p;l++)s+=h.heights[l]+f.gapButton;else for(o=0,l=0;l<p;l++)o+=h.widths[l]+f.gapButton;n.enable(a,o,s),n.hbar&&n.hbar.attr("opacity","0").transition().attr("opacity","1"),n.vbar&&n.vbar.attr("opacity","0").transition().attr("opacity","1")}(0,0,0,a,o,k):function(t){var e=!!t.hbar,r=!!t.vbar;e&&t.hbar.transition().attr("opacity","0").each("end",(function(){e=!1,r||t.disable()})),r&&t.vbar.transition().attr("opacity","0").each("end",(function(){r=!1,e||t.disable()}))}(a))}function m(t,e,r,n){t.call(x,e).call(b,e,r,n)}function x(t,e){s.ensureSingle(t,"rect",f.itemRectClassName,(function(t){t.attr({rx:f.rx,ry:f.ry,"shape-rendering":"crispEdges"})})).call(a.stroke,e.bordercolor).call(a.fill,e.bgcolor).style("stroke-width",e.borderwidth+"px")}function b(t,e,r,n){var i=s.ensureSingle(t,"text",f.itemTextClassName,(function(t){t.attr({"text-anchor":"start","data-notex":1})})),a=r.label,u=n._fullLayout._meta;u&&(a=s.templateString(a,u)),i.call(o.font,e.font).text(a).call(l.convertToTspans,n)}function _(t,e){var r=e.active;t.each((function(t,i){var o=n.select(this);i===r&&e.showactive&&o.select("rect."+f.itemRectClassName).call(a.fill,f.activeColor)}))}function w(t){t.select("rect."+f.itemRectClassName).call(a.fill,f.hoverColor)}function T(t,e){t.select("rect."+f.itemRectClassName).call(a.fill,e.bgcolor)}function k(t,e){var r=e._dims={width1:0,height1:0,heights:[],widths:[],totalWidth:0,totalHeight:0,openWidth:0,openHeight:0,lx:0,ly:0},a=o.tester.selectAll("g."+f.dropdownButtonClassName).data(s.filterVisible(e.buttons));a.enter().append("g").classed(f.dropdownButtonClassName,!0);var u=-1!==["up","down"].indexOf(e.direction);a.each((function(i,a){var s=n.select(this);s.call(m,e,i,t);var h=s.select("."+f.itemTextClassName),p=h.node()&&o.bBox(h.node()).width,d=Math.max(p+f.textPadX,f.minWidth),v=e.font.size*c,g=l.lineCount(h),y=Math.max(v*g,f.minHeight)+f.textOffsetY;y=Math.ceil(y),d=Math.ceil(d),r.widths[a]=d,r.heights[a]=y,r.height1=Math.max(r.height1,y),r.width1=Math.max(r.width1,d),u?(r.totalWidth=Math.max(r.totalWidth,d),r.openWidth=r.totalWidth,r.totalHeight+=y+f.gapButton,r.openHeight+=y+f.gapButton):(r.totalWidth+=d+f.gapButton,r.openWidth+=d+f.gapButton,r.totalHeight=Math.max(r.totalHeight,y),r.openHeight=r.totalHeight)})),u?r.totalHeight-=f.gapButton:r.totalWidth-=f.gapButton,r.headerWidth=r.width1+f.arrowPadX,r.headerHeight=r.height1,"dropdown"===e.type&&(u?(r.width1+=f.arrowPadX,r.totalHeight=r.height1):r.totalWidth=r.width1,r.totalWidth+=f.arrowPadX),a.remove();var h=r.totalWidth+e.pad.l+e.pad.r,p=r.totalHeight+e.pad.t+e.pad.b,d=t._fullLayout._size;r.lx=d.l+d.w*e.x,r.ly=d.t+d.h*(1-e.y);var v="left";s.isRightAnchor(e)&&(r.lx-=h,v="right"),s.isCenterAnchor(e)&&(r.lx-=h/2,v="center");var g="top";s.isBottomAnchor(e)&&(r.ly-=p,g="bottom"),s.isMiddleAnchor(e)&&(r.ly-=p/2,g="middle"),r.totalWidth=Math.ceil(r.totalWidth),r.totalHeight=Math.ceil(r.totalHeight),r.lx=Math.round(r.lx),r.ly=Math.round(r.ly),i.autoMargin(t,A(e),{x:e.x,y:e.y,l:h*({right:1,center:.5}[v]||0),r:h*({left:1,center:.5}[v]||0),b:p*({top:1,middle:.5}[g]||0),t:p*({bottom:1,middle:.5}[g]||0)})}function A(t){return f.autoMarginIdRoot+t._index}function M(t,e,r,n){n=n||{};var i=t.select("."+f.itemRectClassName),a=t.select("."+f.itemTextClassName),s=e.borderwidth,u=r.index,h=e._dims;o.setTranslate(t,s+r.x,s+r.y);var p=-1!==["up","down"].indexOf(e.direction),d=n.height||(p?h.heights[u]:h.height1);i.attr({x:0,y:0,width:n.width||(p?h.width1:h.widths[u]),height:d});var v=e.font.size*c,g=(l.lineCount(a)-1)*v/2;l.positionText(a,f.textOffsetX,d/2-g+f.textOffsetY),p?r.y+=h.heights[u]+r.yPad:r.x+=h.widths[u]+r.xPad,r.index++}function S(t,e){t.attr(f.menuIndexAttrName,e||"-1").selectAll("g."+f.dropdownButtonClassName).remove()}t.exports=function(t){var e=t._fullLayout,r=s.filterVisible(e[f.name]);function a(e){i.autoMargin(t,A(e))}var o=e._menulayer.selectAll("g."+f.containerClassName).data(r.length>0?[0]:[]);if(o.enter().append("g").classed(f.containerClassName,!0).style("cursor","pointer"),o.exit().each((function(){n.select(this).selectAll("g."+f.headerGroupClassName).each(a)})).remove(),0!==r.length){var l=o.selectAll("g."+f.headerGroupClassName).data(r,p);l.enter().append("g").classed(f.headerGroupClassName,!0);for(var u=s.ensureSingle(o,"g",f.dropdownButtonGroupClassName,(function(t){t.style("pointer-events","all")})),c=0;c<r.length;c++){var m=r[c];k(t,m)}var x="updatemenus"+e._uid,b=new h(t,u,x);l.enter().size()&&(u.node().parentNode.appendChild(u.node()),u.call(S)),l.exit().each((function(t){u.call(S),a(t)})).remove(),l.each((function(e){var r=n.select(this),a="dropdown"===e.type?u:null;i.manageCommandObserver(t,e,e.buttons,(function(n){v(t,e,e.buttons[n.index],r,a,b,n.index,!0)})),"dropdown"===e.type?(g(t,r,u,b,e),d(u,e)&&y(t,r,u,b,e)):y(t,r,null,null,e)}))}}},20763:function(t,e,r){"use strict";var n=r(75909);t.exports={moduleType:"component",name:n.name,layoutAttributes:r(7163),supplyLayoutDefaults:r(64897),draw:r(13689)}},25849:function(t,e,r){"use strict";t.exports=s;var n=r(39898),i=r(7901),a=r(91424),o=r(71828);function s(t,e,r){this.gd=t,this.container=e,this.id=r,this.position=null,this.translateX=null,this.translateY=null,this.hbar=null,this.vbar=null,this.bg=this.container.selectAll("rect.scrollbox-bg").data([0]),this.bg.exit().on(".drag",null).on("wheel",null).remove(),this.bg.enter().append("rect").classed("scrollbox-bg",!0).style("pointer-events","all").attr({opacity:0,x:0,y:0,width:0,height:0})}s.barWidth=2,s.barLength=20,s.barRadius=2,s.barPad=1,s.barColor="#808BA4",s.prototype.enable=function(t,e,r){var o=this.gd._fullLayout,l=o.width,u=o.height;this.position=t;var c,f,h,p,d=this.position.l,v=this.position.w,g=this.position.t,y=this.position.h,m=this.position.direction,x="down"===m,b="left"===m,_="up"===m,w=v,T=y;x||b||"right"===m||_||(this.position.direction="down",x=!0),x||_?(f=(c=d)+w,x?(h=g,T=(p=Math.min(h+T,u))-h):T=(p=g+T)-(h=Math.max(p-T,0))):(p=(h=g)+T,b?w=(f=d+w)-(c=Math.max(f-w,0)):(c=d,w=(f=Math.min(c+w,l))-c)),this._box={l:c,t:h,w:w,h:T};var k=v>w,A=s.barLength+2*s.barPad,M=s.barWidth+2*s.barPad,S=d,E=g+y;E+M>u&&(E=u-M);var L=this.container.selectAll("rect.scrollbar-horizontal").data(k?[0]:[]);L.exit().on(".drag",null).remove(),L.enter().append("rect").classed("scrollbar-horizontal",!0).call(i.fill,s.barColor),k?(this.hbar=L.attr({rx:s.barRadius,ry:s.barRadius,x:S,y:E,width:A,height:M}),this._hbarXMin=S+A/2,this._hbarTranslateMax=w-A):(delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax);var C=y>T,P=s.barWidth+2*s.barPad,O=s.barLength+2*s.barPad,I=d+v,D=g;I+P>l&&(I=l-P);var z=this.container.selectAll("rect.scrollbar-vertical").data(C?[0]:[]);z.exit().on(".drag",null).remove(),z.enter().append("rect").classed("scrollbar-vertical",!0).call(i.fill,s.barColor),C?(this.vbar=z.attr({rx:s.barRadius,ry:s.barRadius,x:I,y:D,width:P,height:O}),this._vbarYMin=D+O/2,this._vbarTranslateMax=T-O):(delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax);var R=this.id,F=c-.5,B=C?f+P+.5:f+.5,N=h-.5,j=k?p+M+.5:p+.5,U=o._topdefs.selectAll("#"+R).data(k||C?[0]:[]);if(U.exit().remove(),U.enter().append("clipPath").attr("id",R).append("rect"),k||C?(this._clipRect=U.select("rect").attr({x:Math.floor(F),y:Math.floor(N),width:Math.ceil(B)-Math.floor(F),height:Math.ceil(j)-Math.floor(N)}),this.container.call(a.setClipUrl,R,this.gd),this.bg.attr({x:d,y:g,width:v,height:y})):(this.bg.attr({width:0,height:0}),this.container.on("wheel",null).on(".drag",null).call(a.setClipUrl,null),delete this._clipRect),k||C){var V=n.behavior.drag().on("dragstart",(function(){n.event.sourceEvent.preventDefault()})).on("drag",this._onBoxDrag.bind(this));this.container.on("wheel",null).on("wheel",this._onBoxWheel.bind(this)).on(".drag",null).call(V);var H=n.behavior.drag().on("dragstart",(function(){n.event.sourceEvent.preventDefault(),n.event.sourceEvent.stopPropagation()})).on("drag",this._onBarDrag.bind(this));k&&this.hbar.on(".drag",null).call(H),C&&this.vbar.on(".drag",null).call(H)}this.setTranslate(e,r)},s.prototype.disable=function(){(this.hbar||this.vbar)&&(this.bg.attr({width:0,height:0}),this.container.on("wheel",null).on(".drag",null).call(a.setClipUrl,null),delete this._clipRect),this.hbar&&(this.hbar.on(".drag",null),this.hbar.remove(),delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax),this.vbar&&(this.vbar.on(".drag",null),this.vbar.remove(),delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax)},s.prototype._onBoxDrag=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t-=n.event.dx),this.vbar&&(e-=n.event.dy),this.setTranslate(t,e)},s.prototype._onBoxWheel=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t+=n.event.deltaY),this.vbar&&(e+=n.event.deltaY),this.setTranslate(t,e)},s.prototype._onBarDrag=function(){var t=this.translateX,e=this.translateY;if(this.hbar){var r=t+this._hbarXMin,i=r+this._hbarTranslateMax;t=(o.constrain(n.event.x,r,i)-r)/(i-r)*(this.position.w-this._box.w)}if(this.vbar){var a=e+this._vbarYMin,s=a+this._vbarTranslateMax;e=(o.constrain(n.event.y,a,s)-a)/(s-a)*(this.position.h-this._box.h)}this.setTranslate(t,e)},s.prototype.setTranslate=function(t,e){var r=this.position.w-this._box.w,n=this.position.h-this._box.h;if(t=o.constrain(t||0,0,r),e=o.constrain(e||0,0,n),this.translateX=t,this.translateY=e,this.container.call(a.setTranslate,this._box.l-this.position.l-t,this._box.t-this.position.t-e),this._clipRect&&this._clipRect.attr({x:Math.floor(this.position.l+t-.5),y:Math.floor(this.position.t+e-.5)}),this.hbar){var i=t/r;this.hbar.call(a.setTranslate,t+i*this._hbarTranslateMax,e)}if(this.vbar){var s=e/n;this.vbar.call(a.setTranslate,t,e+s*this._vbarTranslateMax)}}},18783:function(t){"use strict";t.exports={FROM_BL:{left:0,center:.5,right:1,bottom:0,middle:.5,top:1},FROM_TL:{left:0,center:.5,right:1,bottom:1,middle:.5,top:0},FROM_BR:{left:1,center:.5,right:0,bottom:0,middle:.5,top:1},LINE_SPACING:1.3,CAP_SHIFT:.7,MID_SHIFT:.35,OPPOSITE_SIDE:{left:"right",right:"left",top:"bottom",bottom:"top"}}},24695:function(t){"use strict";t.exports={axisRefDescription:function(t,e,r){return["If set to a",t,"axis id (e.g. *"+t+"* or","*"+t+"2*), the `"+t+"` position refers to a",t,"coordinate. If set to *paper*, the `"+t+"`","position refers to the distance from the",e,"of the plotting","area in normalized coordinates where *0* (*1*) corresponds to the",e,"("+r+"). If set to a",t,"axis ID followed by","*domain* (separated by a space), the position behaves like for","*paper*, but refers to the distance in fractions of the domain","length from the",e,"of the domain of that axis: e.g.,","*"+t+"2 domain* refers to the domain of the second",t," axis and a",t,"position of 0.5 refers to the","point between the",e,"and the",r,"of the domain of the","second",t,"axis."].join(" ")}}},22372:function(t){"use strict";t.exports={INCREASING:{COLOR:"#3D9970",SYMBOL:"▲"},DECREASING:{COLOR:"#FF4136",SYMBOL:"▼"}}},31562:function(t){"use strict";t.exports={FORMAT_LINK:"https://github.com/d3/d3-format/tree/v1.4.5#d3-format",DATE_FORMAT_LINK:"https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format"}},74808:function(t){"use strict";t.exports={COMPARISON_OPS:["=","!=","<",">=",">","<="],COMPARISON_OPS2:["=","<",">=",">","<="],INTERVAL_OPS:["[]","()","[)","(]","][",")(","](",")["],SET_OPS:["{}","}{"],CONSTRAINT_REDUCTION:{"=":"=","<":"<","<=":"<",">":">",">=":">","[]":"[]","()":"[]","[)":"[]","(]":"[]","][":"][",")(":"][","](":"][",")[":"]["}}},29659:function(t){"use strict";t.exports={solid:[[],0],dot:[[.5,1],200],dash:[[.5,1],50],longdash:[[.5,1],10],dashdot:[[.5,.625,.875,1],50],longdashdot:[[.5,.7,.8,1],10]}},87381:function(t){"use strict";t.exports={circle:"●","circle-open":"○",square:"■","square-open":"□",diamond:"◆","diamond-open":"◇",cross:"+",x:"❌"}},37822:function(t){"use strict";t.exports={SHOW_PLACEHOLDER:100,HIDE_PLACEHOLDER:1e3,DESELECTDIM:.2}},50606:function(t){"use strict";t.exports={BADNUM:void 0,FP_SAFE:1e-4*Number.MAX_VALUE,ONEMAXYEAR:316224e5,ONEAVGYEAR:315576e5,ONEMINYEAR:31536e6,ONEMAXQUARTER:79488e5,ONEAVGQUARTER:78894e5,ONEMINQUARTER:76896e5,ONEMAXMONTH:26784e5,ONEAVGMONTH:26298e5,ONEMINMONTH:24192e5,ONEWEEK:6048e5,ONEDAY:864e5,ONEHOUR:36e5,ONEMIN:6e4,ONESEC:1e3,EPOCHJD:2440587.5,ALMOST_EQUAL:.999999,LOG_CLIP:10,MINUS_SIGN:"−"}},32396:function(t,e){"use strict";e.CSS_DECLARATIONS=[["image-rendering","optimizeSpeed"],["image-rendering","-moz-crisp-edges"],["image-rendering","-o-crisp-edges"],["image-rendering","-webkit-optimize-contrast"],["image-rendering","optimize-contrast"],["image-rendering","crisp-edges"],["image-rendering","pixelated"]],e.STYLE=e.CSS_DECLARATIONS.map((function(t){return t.join(": ")+"; "})).join("")},77922:function(t,e){"use strict";e.xmlns="http://www.w3.org/2000/xmlns/",e.svg="http://www.w3.org/2000/svg",e.xlink="http://www.w3.org/1999/xlink",e.svgAttrs={xmlns:e.svg,"xmlns:xlink":e.xlink}},8729:function(t,e,r){"use strict";e.version=r(11506).version,r(7417),r(98847);for(var n=r(73972),i=e.register=n.register,a=r(10641),o=Object.keys(a),s=0;s<o.length;s++){var l=o[s];"_"!==l.charAt(0)&&(e[l]=a[l]),i({moduleType:"apiMethod",name:l,fn:a[l]})}i(r(67368)),i([r(32745),r(2468),r(47322),r(89853),r(68804),r(20763),r(23243),r(13137),r(97218),r(83312),r(37369),r(21081),r(12311),r(2199),r(30211),r(64168)]),i([r(92177),r(37815)]),window.PlotlyLocales&&Array.isArray(window.PlotlyLocales)&&(i(window.PlotlyLocales),delete window.PlotlyLocales),e.Icons=r(24255);var u=r(30211),c=r(74875);e.Plots={resize:c.resize,graphJson:c.graphJson,sendDataToCloud:c.sendDataToCloud},e.Fx={hover:u.hover,unhover:u.unhover,loneHover:u.loneHover,loneUnhover:u.loneUnhover},e.Snapshot=r(44511),e.PlotSchema=r(86281)},24255:function(t){"use strict";t.exports={undo:{width:857.1,height:1e3,path:"m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z",transform:"matrix(1 0 0 -1 0 850)"},home:{width:928.6,height:1e3,path:"m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z",transform:"matrix(1 0 0 -1 0 850)"},"camera-retro":{width:1e3,height:1e3,path:"m518 386q0 8-5 13t-13 5q-37 0-63-27t-26-63q0-8 5-13t13-5 12 5 5 13q0 23 16 38t38 16q8 0 13 5t5 13z m125-73q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m-572-320h858v71h-858v-71z m643 320q0 89-62 152t-152 62-151-62-63-152 63-151 151-63 152 63 62 151z m-571 358h214v72h-214v-72z m-72-107h858v143h-462l-36-71h-360v-72z m929 143v-714q0-30-21-51t-50-21h-858q-29 0-50 21t-21 51v714q0 30 21 51t50 21h858q29 0 50-21t21-51z",transform:"matrix(1 0 0 -1 0 850)"},zoombox:{width:1e3,height:1e3,path:"m1000-25l-250 251c40 63 63 138 63 218 0 224-182 406-407 406-224 0-406-182-406-406s183-406 407-406c80 0 155 22 218 62l250-250 125 125z m-812 250l0 438 437 0 0-438-437 0z m62 375l313 0 0-312-313 0 0 312z",transform:"matrix(1 0 0 -1 0 850)"},pan:{width:1e3,height:1e3,path:"m1000 350l-187 188 0-125-250 0 0 250 125 0-188 187-187-187 125 0 0-250-250 0 0 125-188-188 186-187 0 125 252 0 0-250-125 0 187-188 188 188-125 0 0 250 250 0 0-126 187 188z",transform:"matrix(1 0 0 -1 0 850)"},zoom_plus:{width:875,height:1e3,path:"m1 787l0-875 875 0 0 875-875 0z m687-500l-187 0 0-187-125 0 0 187-188 0 0 125 188 0 0 187 125 0 0-187 187 0 0-125z",transform:"matrix(1 0 0 -1 0 850)"},zoom_minus:{width:875,height:1e3,path:"m0 788l0-876 875 0 0 876-875 0z m688-500l-500 0 0 125 500 0 0-125z",transform:"matrix(1 0 0 -1 0 850)"},autoscale:{width:1e3,height:1e3,path:"m250 850l-187 0-63 0 0-62 0-188 63 0 0 188 187 0 0 62z m688 0l-188 0 0-62 188 0 0-188 62 0 0 188 0 62-62 0z m-875-938l0 188-63 0 0-188 0-62 63 0 187 0 0 62-187 0z m875 188l0-188-188 0 0-62 188 0 62 0 0 62 0 188-62 0z m-125 188l-1 0-93-94-156 156 156 156 92-93 2 0 0 250-250 0 0-2 93-92-156-156-156 156 94 92 0 2-250 0 0-250 0 0 93 93 157-156-157-156-93 94 0 0 0-250 250 0 0 0-94 93 156 157 156-157-93-93 0 0 250 0 0 250z",transform:"matrix(1 0 0 -1 0 850)"},tooltip_basic:{width:1500,height:1e3,path:"m375 725l0 0-375-375 375-374 0-1 1125 0 0 750-1125 0z",transform:"matrix(1 0 0 -1 0 850)"},tooltip_compare:{width:1125,height:1e3,path:"m187 786l0 2-187-188 188-187 0 0 937 0 0 373-938 0z m0-499l0 1-187-188 188-188 0 0 937 0 0 376-938-1z",transform:"matrix(1 0 0 -1 0 850)"},plotlylogo:{width:1542,height:1e3,path:"m0-10h182v-140h-182v140z m228 146h183v-286h-183v286z m225 714h182v-1000h-182v1000z m225-285h182v-715h-182v715z m225 142h183v-857h-183v857z m231-428h182v-429h-182v429z m225-291h183v-138h-183v138z",transform:"matrix(1 0 0 -1 0 850)"},"z-axis":{width:1e3,height:1e3,path:"m833 5l-17 108v41l-130-65 130-66c0 0 0 38 0 39 0-1 36-14 39-25 4-15-6-22-16-30-15-12-39-16-56-20-90-22-187-23-279-23-261 0-341 34-353 59 3 60 228 110 228 110-140-8-351-35-351-116 0-120 293-142 474-142 155 0 477 22 477 142 0 50-74 79-163 96z m-374 94c-58-5-99-21-99-40 0-24 65-43 144-43 79 0 143 19 143 43 0 19-42 34-98 40v216h87l-132 135-133-135h88v-216z m167 515h-136v1c16 16 31 34 46 52l84 109v54h-230v-71h124v-1c-16-17-28-32-44-51l-89-114v-51h245v72z",transform:"matrix(1 0 0 -1 0 850)"},"3d_rotate":{width:1e3,height:1e3,path:"m922 660c-5 4-9 7-14 11-359 263-580-31-580-31l-102 28 58-400c0 1 1 1 2 2 118 108 351 249 351 249s-62 27-100 42c88 83 222 183 347 122 16-8 30-17 44-27-2 1-4 2-6 4z m36-329c0 0 64 229-88 296-62 27-124 14-175-11 157-78 225-208 249-266 8-19 11-31 11-31 2 5 6 15 11 32-5-13-8-20-8-20z m-775-239c70-31 117-50 198-32-121 80-199 346-199 346l-96-15-58-12c0 0 55-226 155-287z m603 133l-317-139c0 0 4-4 19-14 7-5 24-15 24-15s-177-147-389 4c235-287 536-112 536-112l31-22 100 299-4-1z m-298-153c6-4 14-9 24-15 0 0-17 10-24 15z",transform:"matrix(1 0 0 -1 0 850)"},camera:{width:1e3,height:1e3,path:"m500 450c-83 0-150-67-150-150 0-83 67-150 150-150 83 0 150 67 150 150 0 83-67 150-150 150z m400 150h-120c-16 0-34 13-39 29l-31 93c-6 15-23 28-40 28h-340c-16 0-34-13-39-28l-31-94c-6-15-23-28-40-28h-120c-55 0-100-45-100-100v-450c0-55 45-100 100-100h800c55 0 100 45 100 100v450c0 55-45 100-100 100z m-400-550c-138 0-250 112-250 250 0 138 112 250 250 250 138 0 250-112 250-250 0-138-112-250-250-250z m365 380c-19 0-35 16-35 35 0 19 16 35 35 35 19 0 35-16 35-35 0-19-16-35-35-35z",transform:"matrix(1 0 0 -1 0 850)"},movie:{width:1e3,height:1e3,path:"m938 413l-188-125c0 37-17 71-44 94 64 38 107 107 107 187 0 121-98 219-219 219-121 0-219-98-219-219 0-61 25-117 66-156h-115c30 33 49 76 49 125 0 103-84 187-187 187s-188-84-188-187c0-57 26-107 65-141-38-22-65-62-65-109v-250c0-70 56-126 125-126h500c69 0 125 56 125 126l188-126c34 0 62 28 62 63v375c0 35-28 63-62 63z m-750 0c-69 0-125 56-125 125s56 125 125 125 125-56 125-125-56-125-125-125z m406-1c-87 0-157 70-157 157 0 86 70 156 157 156s156-70 156-156-70-157-156-157z",transform:"matrix(1 0 0 -1 0 850)"},question:{width:857.1,height:1e3,path:"m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z",transform:"matrix(1 0 0 -1 0 850)"},disk:{width:857.1,height:1e3,path:"m214-7h429v214h-429v-214z m500 0h72v500q0 8-6 21t-11 20l-157 156q-5 6-19 12t-22 5v-232q0-22-15-38t-38-16h-322q-22 0-37 16t-16 38v232h-72v-714h72v232q0 22 16 38t37 16h465q22 0 38-16t15-38v-232z m-214 518v178q0 8-5 13t-13 5h-107q-7 0-13-5t-5-13v-178q0-8 5-13t13-5h107q7 0 13 5t5 13z m357-18v-518q0-22-15-38t-38-16h-750q-23 0-38 16t-16 38v750q0 22 16 38t38 16h517q23 0 50-12t42-26l156-157q16-15 27-42t11-49z",transform:"matrix(1 0 0 -1 0 850)"},drawopenpath:{width:70,height:70,path:"M33.21,85.65a7.31,7.31,0,0,1-2.59-.48c-8.16-3.11-9.27-19.8-9.88-41.3-.1-3.58-.19-6.68-.35-9-.15-2.1-.67-3.48-1.43-3.79-2.13-.88-7.91,2.32-12,5.86L3,32.38c1.87-1.64,11.55-9.66,18.27-6.9,2.13.87,4.75,3.14,5.17,9,.17,2.43.26,5.59.36,9.25a224.17,224.17,0,0,0,1.5,23.4c1.54,10.76,4,12.22,4.48,12.4.84.32,2.79-.46,5.76-3.59L43,80.07C41.53,81.57,37.68,85.64,33.21,85.65ZM74.81,69a11.34,11.34,0,0,0,6.09-6.72L87.26,44.5,74.72,32,56.9,38.35c-2.37.86-5.57,3.42-6.61,6L38.65,72.14l8.42,8.43ZM55,46.27a7.91,7.91,0,0,1,3.64-3.17l14.8-5.3,8,8L76.11,60.6l-.06.19a6.37,6.37,0,0,1-3,3.43L48.25,74.59,44.62,71Zm16.57,7.82A6.9,6.9,0,1,0,64.64,61,6.91,6.91,0,0,0,71.54,54.09Zm-4.05,0a2.85,2.85,0,1,1-2.85-2.85A2.86,2.86,0,0,1,67.49,54.09Zm-4.13,5.22L60.5,56.45,44.26,72.7l2.86,2.86ZM97.83,35.67,84.14,22l-8.57,8.57L89.26,44.24Zm-13.69-8,8,8-2.85,2.85-8-8Z",transform:"matrix(1 0 0 1 -15 -15)"},drawclosedpath:{width:90,height:90,path:"M88.41,21.12a26.56,26.56,0,0,0-36.18,0l-2.07,2-2.07-2a26.57,26.57,0,0,0-36.18,0,23.74,23.74,0,0,0,0,34.8L48,90.12a3.22,3.22,0,0,0,4.42,0l36-34.21a23.73,23.73,0,0,0,0-34.79ZM84,51.24,50.16,83.35,16.35,51.25a17.28,17.28,0,0,1,0-25.47,20,20,0,0,1,27.3,0l4.29,4.07a3.23,3.23,0,0,0,4.44,0l4.29-4.07a20,20,0,0,1,27.3,0,17.27,17.27,0,0,1,0,25.46ZM66.76,47.68h-33v6.91h33ZM53.35,35H46.44V68h6.91Z",transform:"matrix(1 0 0 1 -5 -5)"},lasso:{width:1031,height:1e3,path:"m1018 538c-36 207-290 336-568 286-277-48-473-256-436-463 10-57 36-108 76-151-13-66 11-137 68-183 34-28 75-41 114-42l-55-70 0 0c-2-1-3-2-4-3-10-14-8-34 5-45 14-11 34-8 45 4 1 1 2 3 2 5l0 0 113 140c16 11 31 24 45 40 4 3 6 7 8 11 48-3 100 0 151 9 278 48 473 255 436 462z m-624-379c-80 14-149 48-197 96 42 42 109 47 156 9 33-26 47-66 41-105z m-187-74c-19 16-33 37-39 60 50-32 109-55 174-68-42-25-95-24-135 8z m360 75c-34-7-69-9-102-8 8 62-16 128-68 170-73 59-175 54-244-5-9 20-16 40-20 61-28 159 121 317 333 354s407-60 434-217c28-159-121-318-333-355z",transform:"matrix(1 0 0 -1 0 850)"},selectbox:{width:1e3,height:1e3,path:"m0 850l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-285l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z",transform:"matrix(1 0 0 -1 0 850)"},drawline:{width:70,height:70,path:"M60.64,62.3a11.29,11.29,0,0,0,6.09-6.72l6.35-17.72L60.54,25.31l-17.82,6.4c-2.36.86-5.57,3.41-6.6,6L24.48,65.5l8.42,8.42ZM40.79,39.63a7.89,7.89,0,0,1,3.65-3.17l14.79-5.31,8,8L61.94,54l-.06.19a6.44,6.44,0,0,1-3,3.43L34.07,68l-3.62-3.63Zm16.57,7.81a6.9,6.9,0,1,0-6.89,6.9A6.9,6.9,0,0,0,57.36,47.44Zm-4,0a2.86,2.86,0,1,1-2.85-2.85A2.86,2.86,0,0,1,53.32,47.44Zm-4.13,5.22L46.33,49.8,30.08,66.05l2.86,2.86ZM83.65,29,70,15.34,61.4,23.9,75.09,37.59ZM70,21.06l8,8-2.84,2.85-8-8ZM87,80.49H10.67V87H87Z",transform:"matrix(1 0 0 1 -15 -15)"},drawrect:{width:80,height:80,path:"M78,22V79H21V22H78m9-9H12V88H87V13ZM68,46.22H31V54H68ZM53,32H45.22V69H53Z",transform:"matrix(1 0 0 1 -10 -10)"},drawcircle:{width:80,height:80,path:"M50,84.72C26.84,84.72,8,69.28,8,50.3S26.84,15.87,50,15.87,92,31.31,92,50.3,73.16,84.72,50,84.72Zm0-60.59c-18.6,0-33.74,11.74-33.74,26.17S31.4,76.46,50,76.46,83.74,64.72,83.74,50.3,68.6,24.13,50,24.13Zm17.15,22h-34v7.11h34Zm-13.8-13H46.24v34h7.11Z",transform:"matrix(1 0 0 1 -10 -10)"},eraseshape:{width:80,height:80,path:"M82.77,78H31.85L6,49.57,31.85,21.14H82.77a8.72,8.72,0,0,1,8.65,8.77V69.24A8.72,8.72,0,0,1,82.77,78ZM35.46,69.84H82.77a.57.57,0,0,0,.49-.6V29.91a.57.57,0,0,0-.49-.61H35.46L17,49.57Zm32.68-34.7-24,24,5,5,24-24Zm-19,.53-5,5,24,24,5-5Z",transform:"matrix(1 0 0 1 -10 -10)"},spikeline:{width:1e3,height:1e3,path:"M512 409c0-57-46-104-103-104-57 0-104 47-104 104 0 57 47 103 104 103 57 0 103-46 103-103z m-327-39l92 0 0 92-92 0z m-185 0l92 0 0 92-92 0z m370-186l92 0 0 93-92 0z m0-184l92 0 0 92-92 0z",transform:"matrix(1.5 0 0 -1.5 0 850)"},pencil:{width:1792,height:1792,path:"M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z",transform:"matrix(1 0 0 1 0 1)"},newplotlylogo:{name:"newplotlylogo",svg:["<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 132 132'>","<defs>"," <style>","  .cls-0{fill:#000;}","  .cls-1{fill:#FFF;}","  .cls-2{fill:#F26;}","  .cls-3{fill:#D69;}","  .cls-4{fill:#BAC;}","  .cls-5{fill:#9EF;}"," </style>","</defs>"," <title>plotly-logomark</title>"," <g id='symbol'>","  <rect class='cls-0' x='0' y='0' width='132' height='132' rx='18' ry='18'/>","  <circle class='cls-5' cx='102' cy='30' r='6'/>","  <circle class='cls-4' cx='78' cy='30' r='6'/>","  <circle class='cls-4' cx='78' cy='54' r='6'/>","  <circle class='cls-3' cx='54' cy='30' r='6'/>","  <circle class='cls-2' cx='30' cy='30' r='6'/>","  <circle class='cls-2' cx='30' cy='54' r='6'/>","  <path class='cls-1' d='M30,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,30,72Z'/>","  <path class='cls-1' d='M78,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,78,72Z'/>","  <path class='cls-1' d='M54,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,54,48Z'/>","  <path class='cls-1' d='M102,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,102,48Z'/>"," </g>","</svg>"].join("")}}},99863:function(t,e){"use strict";e.isLeftAnchor=function(t){return"left"===t.xanchor||"auto"===t.xanchor&&t.x<=1/3},e.isCenterAnchor=function(t){return"center"===t.xanchor||"auto"===t.xanchor&&t.x>1/3&&t.x<2/3},e.isRightAnchor=function(t){return"right"===t.xanchor||"auto"===t.xanchor&&t.x>=2/3},e.isTopAnchor=function(t){return"top"===t.yanchor||"auto"===t.yanchor&&t.y>=2/3},e.isMiddleAnchor=function(t){return"middle"===t.yanchor||"auto"===t.yanchor&&t.y>1/3&&t.y<2/3},e.isBottomAnchor=function(t){return"bottom"===t.yanchor||"auto"===t.yanchor&&t.y<=1/3}},26348:function(t,e,r){"use strict";var n=r(64872),i=n.mod,a=n.modHalf,o=Math.PI,s=2*o;function l(t){return Math.abs(t[1]-t[0])>s-1e-14}function u(t,e){return a(e-t,s)}function c(t,e){if(l(e))return!0;var r,n;e[0]<e[1]?(r=e[0],n=e[1]):(r=e[1],n=e[0]),(r=i(r,s))>(n=i(n,s))&&(n+=s);var a=i(t,s),o=a+s;return a>=r&&a<=n||o>=r&&o<=n}function f(t,e,r,n,i,a,u){i=i||0,a=a||0;var c,f,h,p,d,v=l([r,n]);function g(t,e){return[t*Math.cos(e)+i,a-t*Math.sin(e)]}v?(c=0,f=o,h=s):r<n?(c=r,h=n):(c=n,h=r),t<e?(p=t,d=e):(p=e,d=t);var y,m=Math.abs(h-c)<=o?0:1;function x(t,e,r){return"A"+[t,t]+" "+[0,m,r]+" "+g(t,e)}return v?y=null===p?"M"+g(d,c)+x(d,f,0)+x(d,h,0)+"Z":"M"+g(p,c)+x(p,f,0)+x(p,h,0)+"ZM"+g(d,c)+x(d,f,1)+x(d,h,1)+"Z":null===p?(y="M"+g(d,c)+x(d,h,0),u&&(y+="L0,0Z")):y="M"+g(p,c)+"L"+g(d,c)+x(d,h,0)+"L"+g(p,h)+x(p,c,1)+"Z",y}t.exports={deg2rad:function(t){return t/180*o},rad2deg:function(t){return t/o*180},angleDelta:u,angleDist:function(t,e){return Math.abs(u(t,e))},isFullCircle:l,isAngleInsideSector:c,isPtInsideSector:function(t,e,r,n){return!!c(e,n)&&(r[0]<r[1]?(i=r[0],a=r[1]):(i=r[1],a=r[0]),t>=i&&t<=a);var i,a},pathArc:function(t,e,r,n,i){return f(null,t,e,r,n,i,0)},pathSector:function(t,e,r,n,i){return f(null,t,e,r,n,i,1)},pathAnnulus:function(t,e,r,n,i,a){return f(t,e,r,n,i,a,1)}}},73627:function(t,e){"use strict";var r=Array.isArray,n=ArrayBuffer,i=DataView;function a(t){return n.isView(t)&&!(t instanceof i)}function o(t){return r(t)||a(t)}function s(t,e,r){if(o(t)){if(o(t[0])){for(var n=r,i=0;i<t.length;i++)n=e(n,t[i].length);return n}return t.length}return 0}e.isTypedArray=a,e.isArrayOrTypedArray=o,e.isArray1D=function(t){return!o(t[0])},e.ensureArray=function(t,e){return r(t)||(t=[]),t.length=e,t},e.concat=function(){var t,e,n,i,a,o,s,l,u=[],c=!0,f=0;for(n=0;n<arguments.length;n++)(o=(i=arguments[n]).length)&&(e?u.push(i):(e=i,a=o),r(i)?t=!1:(c=!1,f?t!==i.constructor&&(t=!1):t=i.constructor),f+=o);if(!f)return[];if(!u.length)return e;if(c)return e.concat.apply(e,u);if(t){for((s=new t(f)).set(e),n=0;n<u.length;n++)i=u[n],s.set(i,a),a+=i.length;return s}for(s=new Array(f),l=0;l<e.length;l++)s[l]=e[l];for(n=0;n<u.length;n++){for(i=u[n],l=0;l<i.length;l++)s[a+l]=i[l];a+=l}return s},e.maxRowLength=function(t){return s(t,Math.max,0)},e.minRowLength=function(t){return s(t,Math.min,1/0)}},95218:function(t,e,r){"use strict";var n=r(92770),i=r(50606).BADNUM,a=/^['"%,$#\s']+|[, ]|['"%,$#\s']+$/g;t.exports=function(t){return"string"==typeof t&&(t=t.replace(a,"")),n(t)?Number(t):i}},33306:function(t){"use strict";t.exports=function(t){var e=t._fullLayout;e._glcanvas&&e._glcanvas.size()&&e._glcanvas.each((function(t){t.regl&&t.regl.clear({color:!0,depth:!0})}))}},86367:function(t){"use strict";t.exports=function(t){t._responsiveChartHandler&&(window.removeEventListener("resize",t._responsiveChartHandler),delete t._responsiveChartHandler)}},96554:function(t,e,r){"use strict";var n=r(92770),i=r(84267),a=r(9012),o=r(63282),s=r(7901),l=r(37822).DESELECTDIM,u=r(65487),c=r(30587).counter,f=r(64872).modHalf,h=r(73627).isArrayOrTypedArray;function p(t,r){var n=e.valObjectMeta[r.valType];if(r.arrayOk&&h(t))return!0;if(n.validateFunction)return n.validateFunction(t,r);var i={},a=i,o={set:function(t){a=t}};return n.coerceFunction(t,o,i,r),a!==i}e.valObjectMeta={data_array:{coerceFunction:function(t,e,r){h(t)?e.set(t):void 0!==r&&e.set(r)}},enumerated:{coerceFunction:function(t,e,r,n){n.coerceNumber&&(t=+t),-1===n.values.indexOf(t)?e.set(r):e.set(t)},validateFunction:function(t,e){e.coerceNumber&&(t=+t);for(var r=e.values,n=0;n<r.length;n++){var i=String(r[n]);if("/"===i.charAt(0)&&"/"===i.charAt(i.length-1)){if(new RegExp(i.substr(1,i.length-2)).test(t))return!0}else if(t===r[n])return!0}return!1}},boolean:{coerceFunction:function(t,e,r){!0===t||!1===t?e.set(t):e.set(r)}},number:{coerceFunction:function(t,e,r,i){!n(t)||void 0!==i.min&&t<i.min||void 0!==i.max&&t>i.max?e.set(r):e.set(+t)}},integer:{coerceFunction:function(t,e,r,i){t%1||!n(t)||void 0!==i.min&&t<i.min||void 0!==i.max&&t>i.max?e.set(r):e.set(+t)}},string:{coerceFunction:function(t,e,r,n){if("string"!=typeof t){var i="number"==typeof t;!0!==n.strict&&i?e.set(String(t)):e.set(r)}else n.noBlank&&!t?e.set(r):e.set(t)}},color:{coerceFunction:function(t,e,r){i(t).isValid()?e.set(t):e.set(r)}},colorlist:{coerceFunction:function(t,e,r){Array.isArray(t)&&t.length&&t.every((function(t){return i(t).isValid()}))?e.set(t):e.set(r)}},colorscale:{coerceFunction:function(t,e,r){e.set(o.get(t,r))}},angle:{coerceFunction:function(t,e,r){"auto"===t?e.set("auto"):n(t)?e.set(f(+t,360)):e.set(r)}},subplotid:{coerceFunction:function(t,e,r,n){var i=n.regex||c(r);"string"==typeof t&&i.test(t)?e.set(t):e.set(r)},validateFunction:function(t,e){var r=e.dflt;return t===r||"string"==typeof t&&!!c(r).test(t)}},flaglist:{coerceFunction:function(t,e,r,n){if(-1===(n.extras||[]).indexOf(t))if("string"==typeof t){for(var i=t.split("+"),a=0;a<i.length;){var o=i[a];-1===n.flags.indexOf(o)||i.indexOf(o)<a?i.splice(a,1):a++}i.length?e.set(i.join("+")):e.set(r)}else e.set(r);else e.set(t)}},any:{coerceFunction:function(t,e,r){void 0===t?e.set(r):e.set(t)}},info_array:{coerceFunction:function(t,r,n,i){function a(t,r,n){var i,a={set:function(t){i=t}};return void 0===n&&(n=r.dflt),e.valObjectMeta[r.valType].coerceFunction(t,a,n,r),i}var o=2===i.dimensions||"1-2"===i.dimensions&&Array.isArray(t)&&Array.isArray(t[0]);if(Array.isArray(t)){var s,l,u,c,f,h,p=i.items,d=[],v=Array.isArray(p),g=v&&o&&Array.isArray(p[0]),y=o&&v&&!g,m=v&&!y?p.length:t.length;if(n=Array.isArray(n)?n:[],o)for(s=0;s<m;s++)for(d[s]=[],u=Array.isArray(t[s])?t[s]:[],f=y?p.length:v?p[s].length:u.length,l=0;l<f;l++)c=y?p[l]:v?p[s][l]:p,void 0!==(h=a(u[l],c,(n[s]||[])[l]))&&(d[s][l]=h);else for(s=0;s<m;s++)void 0!==(h=a(t[s],v?p[s]:p,n[s]))&&(d[s]=h);r.set(d)}else r.set(n)},validateFunction:function(t,e){if(!Array.isArray(t))return!1;var r=e.items,n=Array.isArray(r),i=2===e.dimensions;if(!e.freeLength&&t.length!==r.length)return!1;for(var a=0;a<t.length;a++)if(i){if(!Array.isArray(t[a])||!e.freeLength&&t[a].length!==r[a].length)return!1;for(var o=0;o<t[a].length;o++)if(!p(t[a][o],n?r[a][o]:r))return!1}else if(!p(t[a],n?r[a]:r))return!1;return!0}}},e.coerce=function(t,r,n,i,a){var o=u(n,i).get(),s=u(t,i),l=u(r,i),c=s.get(),f=r._template;if(void 0===c&&f&&(c=u(f,i).get(),f=0),void 0===a&&(a=o.dflt),o.arrayOk&&h(c))return l.set(c),c;var d=e.valObjectMeta[o.valType].coerceFunction;d(c,l,a,o);var v=l.get();return f&&v===a&&!p(c,o)&&(d(c=u(f,i).get(),l,a,o),v=l.get()),v},e.coerce2=function(t,r,n,i,a){var o=u(t,i),s=e.coerce(t,r,n,i,a);return null!=o.get()&&s},e.coerceFont=function(t,e,r){var n={};return r=r||{},n.family=t(e+".family",r.family),n.size=t(e+".size",r.size),n.color=t(e+".color",r.color),n},e.coercePattern=function(t,e,r,n){if(t(e+".shape")){t(e+".solidity"),t(e+".size");var i="overlay"===t(e+".fillmode");if(!n){var a=t(e+".bgcolor",i?r:void 0);t(e+".fgcolor",i?s.contrast(a):r)}t(e+".fgopacity",i?.5:1)}},e.coerceHoverinfo=function(t,r,n){var i,o=r._module.attributes,s=o.hoverinfo?o:a,l=s.hoverinfo;if(1===n._dataLength){var u="all"===l.dflt?l.flags.slice():l.dflt.split("+");u.splice(u.indexOf("name"),1),i=u.join("+")}return e.coerce(t,r,s,"hoverinfo",i)},e.coerceSelectionMarkerOpacity=function(t,e){if(t.marker){var r,n,i=t.marker.opacity;void 0!==i&&(h(i)||t.selected||t.unselected||(r=i,n=l*i),e("selected.marker.opacity",r),e("unselected.marker.opacity",n))}},e.validate=p},41631:function(t,e,r){"use strict";var n,i,a=r(84096).i$,o=r(92770),s=r(47769),l=r(64872).mod,u=r(50606),c=u.BADNUM,f=u.ONEDAY,h=u.ONEHOUR,p=u.ONEMIN,d=u.ONESEC,v=u.EPOCHJD,g=r(73972),y=r(84096).g0,m=/^\s*(-?\d\d\d\d|\d\d)(-(\d?\d)(-(\d?\d)([ Tt]([01]?\d|2[0-3])(:([0-5]\d)(:([0-5]\d(\.\d+)?))?(Z|z|[+\-]\d\d(:?\d\d)?)?)?)?)?)?\s*$/m,x=/^\s*(-?\d\d\d\d|\d\d)(-(\d?\di?)(-(\d?\d)([ Tt]([01]?\d|2[0-3])(:([0-5]\d)(:([0-5]\d(\.\d+)?))?(Z|z|[+\-]\d\d(:?\d\d)?)?)?)?)?)?\s*$/m,b=(new Date).getFullYear()-70;function _(t){return t&&g.componentsRegistry.calendars&&"string"==typeof t&&"gregorian"!==t}function w(t,e){return String(t+Math.pow(10,e)).substr(1)}e.dateTick0=function(t,r){var n=function(t,e){return _(t)?e?g.getComponentMethod("calendars","CANONICAL_SUNDAY")[t]:g.getComponentMethod("calendars","CANONICAL_TICK")[t]:e?"2000-01-02":"2000-01-01"}(t,!!r);if(r<2)return n;var i=e.dateTime2ms(n,t);return i+=f*(r-1),e.ms2DateTime(i,0,t)},e.dfltRange=function(t){return _(t)?g.getComponentMethod("calendars","DFLTRANGE")[t]:["2000-01-01","2001-01-01"]},e.isJSDate=function(t){return"object"==typeof t&&null!==t&&"function"==typeof t.getTime},e.dateTime2ms=function(t,r){if(e.isJSDate(t)){var a=t.getTimezoneOffset()*p,o=(t.getUTCMinutes()-t.getMinutes())*p+(t.getUTCSeconds()-t.getSeconds())*d+(t.getUTCMilliseconds()-t.getMilliseconds());if(o){var s=3*p;a=a-s/2+l(o-a+s/2,s)}return(t=Number(t)-a)>=n&&t<=i?t:c}if("string"!=typeof t&&"number"!=typeof t)return c;t=String(t);var u=_(r),y=t.charAt(0);!u||"G"!==y&&"g"!==y||(t=t.substr(1),r="");var w=u&&"chinese"===r.substr(0,7),T=t.match(w?x:m);if(!T)return c;var k=T[1],A=T[3]||"1",M=Number(T[5]||1),S=Number(T[7]||0),E=Number(T[9]||0),L=Number(T[11]||0);if(u){if(2===k.length)return c;var C;k=Number(k);try{var P=g.getComponentMethod("calendars","getCal")(r);if(w){var O="i"===A.charAt(A.length-1);A=parseInt(A,10),C=P.newDate(k,P.toMonthIndex(k,A,O),M)}else C=P.newDate(k,Number(A),M)}catch(t){return c}return C?(C.toJD()-v)*f+S*h+E*p+L*d:c}k=2===k.length?(Number(k)+2e3-b)%100+b:Number(k),A-=1;var I=new Date(Date.UTC(2e3,A,M,S,E));return I.setUTCFullYear(k),I.getUTCMonth()!==A||I.getUTCDate()!==M?c:I.getTime()+L*d},n=e.MIN_MS=e.dateTime2ms("-9999"),i=e.MAX_MS=e.dateTime2ms("9999-12-31 23:59:59.9999"),e.isDateTime=function(t,r){return e.dateTime2ms(t,r)!==c};var T=90*f,k=3*h,A=5*p;function M(t,e,r,n,i){if((e||r||n||i)&&(t+=" "+w(e,2)+":"+w(r,2),(n||i)&&(t+=":"+w(n,2),i))){for(var a=4;i%10==0;)a-=1,i/=10;t+="."+w(i,a)}return t}e.ms2DateTime=function(t,e,r){if("number"!=typeof t||!(t>=n&&t<=i))return c;e||(e=0);var a,o,s,u,m,x,b=Math.floor(10*l(t+.05,1)),w=Math.round(t-b/10);if(_(r)){var S=Math.floor(w/f)+v,E=Math.floor(l(t,f));try{a=g.getComponentMethod("calendars","getCal")(r).fromJD(S).formatDate("yyyy-mm-dd")}catch(t){a=y("G%Y-%m-%d")(new Date(w))}if("-"===a.charAt(0))for(;a.length<11;)a="-0"+a.substr(1);else for(;a.length<10;)a="0"+a;o=e<T?Math.floor(E/h):0,s=e<T?Math.floor(E%h/p):0,u=e<k?Math.floor(E%p/d):0,m=e<A?E%d*10+b:0}else x=new Date(w),a=y("%Y-%m-%d")(x),o=e<T?x.getUTCHours():0,s=e<T?x.getUTCMinutes():0,u=e<k?x.getUTCSeconds():0,m=e<A?10*x.getUTCMilliseconds()+b:0;return M(a,o,s,u,m)},e.ms2DateTimeLocal=function(t){if(!(t>=n+f&&t<=i-f))return c;var e=Math.floor(10*l(t+.05,1)),r=new Date(Math.round(t-e/10));return M(a("%Y-%m-%d")(r),r.getHours(),r.getMinutes(),r.getSeconds(),10*r.getUTCMilliseconds()+e)},e.cleanDate=function(t,r,n){if(t===c)return r;if(e.isJSDate(t)||"number"==typeof t&&isFinite(t)){if(_(n))return s.error("JS Dates and milliseconds are incompatible with world calendars",t),r;if(!(t=e.ms2DateTimeLocal(+t))&&void 0!==r)return r}else if(!e.isDateTime(t,n))return s.error("unrecognized date",t),r;return t};var S=/%\d?f/g,E=/%h/g,L={1:"1",2:"1",3:"2",4:"2"};function C(t,e,r,n){t=t.replace(S,(function(t){var r=Math.min(+t.charAt(1)||6,6);return(e/1e3%1+2).toFixed(r).substr(2).replace(/0+$/,"")||"0"}));var i=new Date(Math.floor(e+.05));if(t=t.replace(E,(function(){return L[r("%q")(i)]})),_(n))try{t=g.getComponentMethod("calendars","worldCalFmt")(t,e,n)}catch(t){return"Invalid"}return r(t)(i)}var P=[59,59.9,59.99,59.999,59.9999];e.formatDate=function(t,e,r,n,i,a){if(i=_(i)&&i,!e)if("y"===r)e=a.year;else if("m"===r)e=a.month;else{if("d"!==r)return function(t,e){var r=l(t+.05,f),n=w(Math.floor(r/h),2)+":"+w(l(Math.floor(r/p),60),2);if("M"!==e){o(e)||(e=0);var i=(100+Math.min(l(t/d,60),P[e])).toFixed(e).substr(1);e>0&&(i=i.replace(/0+$/,"").replace(/[\.]$/,"")),n+=":"+i}return n}(t,r)+"\n"+C(a.dayMonthYear,t,n,i);e=a.dayMonth+"\n"+a.year}return C(e,t,n,i)};var O=3*f;e.incrementMonth=function(t,e,r){r=_(r)&&r;var n=l(t,f);if(t=Math.round(t-n),r)try{var i=Math.round(t/f)+v,a=g.getComponentMethod("calendars","getCal")(r),o=a.fromJD(i);return e%12?a.add(o,e,"m"):a.add(o,e/12,"y"),(o.toJD()-v)*f+n}catch(e){s.error("invalid ms "+t+" in calendar "+r)}var u=new Date(t+O);return u.setUTCMonth(u.getUTCMonth()+e)+n-O},e.findExactDates=function(t,e){for(var r,n,i=0,a=0,s=0,l=0,u=_(e)&&g.getComponentMethod("calendars","getCal")(e),c=0;c<t.length;c++)if(n=t[c],o(n)){if(!(n%f))if(u)try{1===(r=u.fromJD(n/f+v)).day()?1===r.month()?i++:a++:s++}catch(t){}else 1===(r=new Date(n)).getUTCDate()?0===r.getUTCMonth()?i++:a++:s++}else l++;s+=a+=i;var h=t.length-l;return{exactYears:i/h,exactMonths:a/h,exactDays:s/h}}},24401:function(t,e,r){"use strict";var n=r(39898),i=r(47769),a=r(35657),o=r(79576);function s(t){var e=t&&t.parentNode;e&&e.removeChild(t)}function l(t,e,r){var n="plotly.js-style-"+t,a=document.getElementById(n);a||((a=document.createElement("style")).setAttribute("id",n),a.appendChild(document.createTextNode("")),document.head.appendChild(a));var o=a.sheet;o.insertRule?o.insertRule(e+"{"+r+"}",0):o.addRule?o.addRule(e,r,0):i.warn("addStyleRule failed")}function u(t){var e=window.getComputedStyle(t,null),r=e.getPropertyValue("-webkit-transform")||e.getPropertyValue("-moz-transform")||e.getPropertyValue("-ms-transform")||e.getPropertyValue("-o-transform")||e.getPropertyValue("transform");return"none"===r?null:r.replace("matrix","").replace("3d","").slice(1,-1).split(",").map((function(t){return+t}))}function c(t){for(var e=[];f(t);)e.push(t),t=t.parentNode;return e}function f(t){return t&&(t instanceof Element||t instanceof HTMLElement)}t.exports={getGraphDiv:function(t){var e;if("string"==typeof t){if(null===(e=document.getElementById(t)))throw new Error("No DOM element with id '"+t+"' exists on the page.");return e}if(null==t)throw new Error("DOM element provided is null or undefined");return t},isPlotDiv:function(t){var e=n.select(t);return e.node()instanceof HTMLElement&&e.size()&&e.classed("js-plotly-plot")},removeElement:s,addStyleRule:function(t,e){l("global",t,e)},addRelatedStyleRule:l,deleteRelatedStyleRule:function(t){var e="plotly.js-style-"+t,r=document.getElementById(e);r&&s(r)},getFullTransformMatrix:function(t){var e=c(t),r=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];return e.forEach((function(t){var e=u(t);if(e){var n=a.convertCssMatrix(e);r=o.multiply(r,r,n)}})),r},getElementTransformMatrix:u,getElementAndAncestors:c,equalDomRects:function(t,e){return t&&e&&t.top===e.top&&t.left===e.left&&t.right===e.right&&t.bottom===e.bottom}}},11086:function(t,e,r){"use strict";var n=r(15398).EventEmitter,i={init:function(t){if(t._ev instanceof n)return t;var e=new n,r=new n;return t._ev=e,t._internalEv=r,t.on=e.on.bind(e),t.once=e.once.bind(e),t.removeListener=e.removeListener.bind(e),t.removeAllListeners=e.removeAllListeners.bind(e),t._internalOn=r.on.bind(r),t._internalOnce=r.once.bind(r),t._removeInternalListener=r.removeListener.bind(r),t._removeAllInternalListeners=r.removeAllListeners.bind(r),t.emit=function(n,i){"undefined"!=typeof jQuery&&jQuery(t).trigger(n,i),e.emit(n,i),r.emit(n,i)},t},triggerHandler:function(t,e,r){var n,i;"undefined"!=typeof jQuery&&(n=jQuery(t).triggerHandler(e,r));var a=t._ev;if(!a)return n;var o,s=a._events[e];if(!s)return n;function l(t){return t.listener?(a.removeListener(e,t.listener),t.fired?void 0:(t.fired=!0,t.listener.apply(a,[r]))):t.apply(a,[r])}for(s=Array.isArray(s)?s:[s],o=0;o<s.length-1;o++)l(s[o]);return i=l(s[o]),void 0!==n?n:i},purge:function(t){return delete t._ev,delete t.on,delete t.once,delete t.removeListener,delete t.removeAllListeners,delete t.emit,delete t._ev,delete t._internalEv,delete t._internalOn,delete t._internalOnce,delete t._removeInternalListener,delete t._removeAllInternalListeners,t}};t.exports=i},1426:function(t,e,r){"use strict";var n=r(41965),i=Array.isArray;function a(t,e,r,o){var s,l,u,c,f,h,p,d=t[0],v=t.length;if(2===v&&i(d)&&i(t[1])&&0===d.length){if(p=function(t,e){var r,n;for(r=0;r<t.length;r++){if(null!==(n=t[r])&&"object"==typeof n)return!1;void 0!==n&&(e[r]=n)}return!0}(t[1],d),p)return d;d.splice(0,d.length)}for(var g=1;g<v;g++)for(l in s=t[g])u=d[l],c=s[l],o&&i(c)?d[l]=c:e&&c&&(n(c)||(f=i(c)))?(f?(f=!1,h=u&&i(u)?u:[]):h=u&&n(u)?u:{},d[l]=a([h,c],e,r,o)):(void 0!==c||r)&&(d[l]=c);return d}e.extendFlat=function(){return a(arguments,!1,!1,!1)},e.extendDeep=function(){return a(arguments,!0,!1,!1)},e.extendDeepAll=function(){return a(arguments,!0,!0,!1)},e.extendDeepNoArrays=function(){return a(arguments,!0,!1,!0)}},75744:function(t){"use strict";t.exports=function(t){for(var e={},r=[],n=0,i=0;i<t.length;i++){var a=t[i];1!==e[a]&&(e[a]=1,r[n++]=a)}return r}},76756:function(t){"use strict";function e(t){return!0===t.visible}function r(t){var e=t[0].trace;return!0===e.visible&&0!==e._length}t.exports=function(t){for(var n,i=(n=t,Array.isArray(n)&&Array.isArray(n[0])&&n[0][0]&&n[0][0].trace?r:e),a=[],o=0;o<t.length;o++){var s=t[o];i(s)&&a.push(s)}return a}},41327:function(t,e,r){"use strict";var n=r(39898),i=r(24138),a=r(30774),o=r(29261),s=r(85268),l=r(23389),u=r(47769),c=r(41965),f=r(65487),h=r(61082),p=Object.keys(i),d={"ISO-3":l,"USA-states":l,"country names":function(t){for(var e=0;e<p.length;e++){var r=p[e];if(new RegExp(i[r]).test(t.trim().toLowerCase()))return r}return u.log("Unrecognized country name: "+t+"."),!1}};function v(t){var e=t.geojson,r=window.PlotlyGeoAssets||{},n="string"==typeof e?r[e]:e;return c(n)?n:(u.error("Oops ... something went wrong when fetching "+e),!1)}t.exports={locationToFeature:function(t,e,r){if(!e||"string"!=typeof e)return!1;var n,i,a,o=d[t](e);if(o){if("USA-states"===t)for(n=[],a=0;a<r.length;a++)(i=r[a]).properties&&i.properties.gu&&"USA"===i.properties.gu&&n.push(i);else n=r;for(a=0;a<n.length;a++)if((i=n[a]).id===o)return i;u.log(["Location with id",o,"does not have a matching topojson feature at this resolution."].join(" "))}return!1},feature2polygons:function(t){var e,r,n,i,a=t.geometry,o=a.coordinates,s=t.id,l=[];function u(t){for(var e=0;e<t.length-1;e++)if(t[e][0]>0&&t[e+1][0]<0)return e;return null}switch(e="RUS"===s||"FJI"===s?function(t){var e;if(null===u(t))e=t;else for(e=new Array(t.length),i=0;i<t.length;i++)e[i]=[t[i][0]<0?t[i][0]+360:t[i][0],t[i][1]];l.push(h.tester(e))}:"ATA"===s?function(t){var e=u(t);if(null===e)return l.push(h.tester(t));var r=new Array(t.length+1),n=0;for(i=0;i<t.length;i++)i>e?r[n++]=[t[i][0]+360,t[i][1]]:i===e?(r[n++]=t[i],r[n++]=[t[i][0],-90]):r[n++]=t[i];var a=h.tester(r);a.pts.pop(),l.push(a)}:function(t){l.push(h.tester(t))},a.type){case"MultiPolygon":for(r=0;r<o.length;r++)for(n=0;n<o[r].length;n++)e(o[r][n]);break;case"Polygon":for(r=0;r<o.length;r++)e(o[r])}return l},getTraceGeojson:v,extractTraceFeature:function(t){var e=t[0].trace,r=v(e);if(!r)return!1;var n,i={},s=[];for(n=0;n<e._length;n++){var l=t[n];(l.loc||0===l.loc)&&(i[l.loc]=l)}function c(t){var r=f(t,e.featureidkey||"id").get(),n=i[r];if(n){var l=t.geometry;if("Polygon"===l.type||"MultiPolygon"===l.type){var c={type:"Feature",id:r,geometry:l,properties:{}};c.properties.ct=function(t){var e,r=t.geometry;if("MultiPolygon"===r.type)for(var n=r.coordinates,i=0,s=0;s<n.length;s++){var l={type:"Polygon",coordinates:n[s]},u=a.default(l);u>i&&(i=u,e=l)}else e=r;return o.default(e).geometry.coordinates}(c),n.fIn=t,n.fOut=c,s.push(c)}else u.log(["Location",n.loc,"does not have a valid GeoJSON geometry.","Traces with locationmode *geojson-id* only support","*Polygon* and *MultiPolygon* geometries."].join(" "))}delete i[r]}switch(r.type){case"FeatureCollection":var h=r.features;for(n=0;n<h.length;n++)c(h[n]);break;case"Feature":c(r);break;default:return u.warn(["Invalid GeoJSON type",(r.type||"none")+".","Traces with locationmode *geojson-id* only support","*FeatureCollection* and *Feature* types."].join(" ")),!1}for(var p in i)u.log(["Location *"+p+"*","does not have a matching feature with id-key","*"+e.featureidkey+"*."].join(" "));return s},fetchTraceGeoData:function(t){var e=window.PlotlyGeoAssets||{},r=[];function i(t){return new Promise((function(r,i){n.json(t,(function(n,a){if(n){delete e[t];var o=404===n.status?'GeoJSON at URL "'+t+'" does not exist.':"Unexpected error while fetching from "+t;return i(new Error(o))}return e[t]=a,r(a)}))}))}function a(t){return new Promise((function(r,n){var i=0,a=setInterval((function(){return e[t]&&"pending"!==e[t]?(clearInterval(a),r(e[t])):i>100?(clearInterval(a),n("Unexpected error while fetching from "+t)):void i++}),50)}))}for(var o=0;o<t.length;o++){var s=t[o][0].trace.geojson;"string"==typeof s&&(e[s]?"pending"===e[s]&&r.push(a(s)):(e[s]="pending",r.push(i(s))))}return r},computeBbox:function(t){return s.default(t)}}},18214:function(t,e,r){"use strict";var n=r(50606).BADNUM;e.calcTraceToLineCoords=function(t){for(var e=t[0].trace.connectgaps,r=[],i=[],a=0;a<t.length;a++){var o=t[a].lonlat;o[0]!==n?i.push(o):!e&&i.length>0&&(r.push(i),i=[])}return i.length>0&&r.push(i),r},e.makeLine=function(t){return 1===t.length?{type:"LineString",coordinates:t[0]}:{type:"MultiLineString",coordinates:t}},e.makePolygon=function(t){if(1===t.length)return{type:"Polygon",coordinates:t};for(var e=new Array(t.length),r=0;r<t.length;r++)e[r]=[t[r]];return{type:"MultiPolygon",coordinates:e}},e.makeBlank=function(){return{type:"Point",coordinates:[]}}},87642:function(t,e,r){"use strict";var n,i,a,o=r(64872).mod;function s(t,e,r,n,i,a,o,s){var l=r-t,u=i-t,c=o-i,f=n-e,h=a-e,p=s-a,d=l*p-c*f;if(0===d)return null;var v=(u*p-c*h)/d,g=(u*f-l*h)/d;return g<0||g>1||v<0||v>1?null:{x:t+l*v,y:e+f*v}}function l(t,e,r,n,i){var a=n*t+i*e;if(a<0)return n*n+i*i;if(a>r){var o=n-t,s=i-e;return o*o+s*s}var l=n*e-i*t;return l*l/r}e.segmentsIntersect=s,e.segmentDistance=function(t,e,r,n,i,a,o,u){if(s(t,e,r,n,i,a,o,u))return 0;var c=r-t,f=n-e,h=o-i,p=u-a,d=c*c+f*f,v=h*h+p*p,g=Math.min(l(c,f,d,i-t,a-e),l(c,f,d,o-t,u-e),l(h,p,v,t-i,e-a),l(h,p,v,r-i,n-a));return Math.sqrt(g)},e.getTextLocation=function(t,e,r,s){if(t===i&&s===a||(n={},i=t,a=s),n[r])return n[r];var l=t.getPointAtLength(o(r-s/2,e)),u=t.getPointAtLength(o(r+s/2,e)),c=Math.atan((u.y-l.y)/(u.x-l.x)),f=t.getPointAtLength(o(r,e)),h={x:(4*f.x+l.x+u.x)/6,y:(4*f.y+l.y+u.y)/6,theta:c};return n[r]=h,h},e.clearLocationCache=function(){i=null},e.getVisibleSegment=function(t,e,r){var n,i,a=e.left,o=e.right,s=e.top,l=e.bottom,u=0,c=t.getTotalLength(),f=c;function h(e){var r=t.getPointAtLength(e);0===e?n=r:e===c&&(i=r);var u=r.x<a?a-r.x:r.x>o?r.x-o:0,f=r.y<s?s-r.y:r.y>l?r.y-l:0;return Math.sqrt(u*u+f*f)}for(var p=h(u);p;){if((u+=p+r)>f)return;p=h(u)}for(p=h(f);p;){if(u>(f-=p+r))return;p=h(f)}return{min:u,max:f,len:f-u,total:c,isClosed:0===u&&f===c&&Math.abs(n.x-i.x)<.1&&Math.abs(n.y-i.y)<.1}},e.findPointOnPath=function(t,e,r,n){for(var i,a,o,s=(n=n||{}).pathLength||t.getTotalLength(),l=n.tolerance||.001,u=n.iterationLimit||30,c=t.getPointAtLength(0)[r]>t.getPointAtLength(s)[r]?-1:1,f=0,h=0,p=s;f<u;){if(i=(h+p)/2,o=(a=t.getPointAtLength(i))[r]-e,Math.abs(o)<l)return a;c*o>0?p=i:h=i,f++}return a}},81697:function(t,e,r){"use strict";var n=r(92770),i=r(84267),a=r(25075),o=r(21081),s=r(22399).defaultLine,l=r(73627).isArrayOrTypedArray,u=a(s);function c(t,e){var r=t;return r[3]*=e,r}function f(t){if(n(t))return u;var e=a(t);return e.length?e:u}function h(t){return n(t)?t:1}t.exports={formatColor:function(t,e,r){var n,i,s,p,d,v=t.color,g=l(v),y=l(e),m=o.extractOpts(t),x=[];if(n=void 0!==m.colorscale?o.makeColorScaleFuncFromTrace(t):f,i=g?function(t,e){return void 0===t[e]?u:a(n(t[e]))}:f,s=y?function(t,e){return void 0===t[e]?1:h(t[e])}:h,g||y)for(var b=0;b<r;b++)p=i(v,b),d=s(e,b),x[b]=c(p,d);else x=c(a(v),e);return x},parseColorScale:function(t){var e=o.extractOpts(t),r=e.colorscale;return e.reversescale&&(r=o.flipScale(e.colorscale)),r.map((function(t){var e=t[0],r=i(t[1]).toRgb();return{index:e,rgb:[r.r,r.g,r.b,r.a]}}))}}},28984:function(t,e,r){"use strict";var n=r(23389);function i(t){return[t]}t.exports={keyFun:function(t){return t.key},repeat:i,descend:n,wrap:i,unwrap:function(t){return t[0]}}},23389:function(t){"use strict";t.exports=function(t){return t}},39240:function(t){"use strict";t.exports=function(t,e){if(!e)return t;var r=1/Math.abs(e),n=r>1?(r*t+r*e)/r:t+e,i=String(n).length;if(i>16){var a=String(e).length;if(i>=String(t).length+a){var o=parseFloat(n).toPrecision(12);-1===o.indexOf("e+")&&(n=+o)}}return n}},71828:function(t,e,r){"use strict";var n=r(39898),i=r(84096).g0,a=r(60721).WU,o=r(92770),s=r(50606),l=s.FP_SAFE,u=-l,c=s.BADNUM,f=t.exports={};f.adjustFormat=function(t){return!t||/^\d[.]\df/.test(t)||/[.]\d%/.test(t)?t:"0.f"===t?"~f":/^\d%/.test(t)?"~%":/^\ds/.test(t)?"~s":!/^[~,.0$]/.test(t)&&/[&fps]/.test(t)?"~"+t:t};var h={};f.warnBadFormat=function(t){var e=String(t);h[e]||(h[e]=1,f.warn('encountered bad format: "'+e+'"'))},f.noFormat=function(t){return String(t)},f.numberFormat=function(t){var e;try{e=a(f.adjustFormat(t))}catch(e){return f.warnBadFormat(t),f.noFormat}return e},f.nestedProperty=r(65487),f.keyedContainer=r(66636),f.relativeAttr=r(6962),f.isPlainObject=r(41965),f.toLogRange=r(58163),f.relinkPrivateKeys=r(51332);var p=r(73627);f.isTypedArray=p.isTypedArray,f.isArrayOrTypedArray=p.isArrayOrTypedArray,f.isArray1D=p.isArray1D,f.ensureArray=p.ensureArray,f.concat=p.concat,f.maxRowLength=p.maxRowLength,f.minRowLength=p.minRowLength;var d=r(64872);f.mod=d.mod,f.modHalf=d.modHalf;var v=r(96554);f.valObjectMeta=v.valObjectMeta,f.coerce=v.coerce,f.coerce2=v.coerce2,f.coerceFont=v.coerceFont,f.coercePattern=v.coercePattern,f.coerceHoverinfo=v.coerceHoverinfo,f.coerceSelectionMarkerOpacity=v.coerceSelectionMarkerOpacity,f.validate=v.validate;var g=r(41631);f.dateTime2ms=g.dateTime2ms,f.isDateTime=g.isDateTime,f.ms2DateTime=g.ms2DateTime,f.ms2DateTimeLocal=g.ms2DateTimeLocal,f.cleanDate=g.cleanDate,f.isJSDate=g.isJSDate,f.formatDate=g.formatDate,f.incrementMonth=g.incrementMonth,f.dateTick0=g.dateTick0,f.dfltRange=g.dfltRange,f.findExactDates=g.findExactDates,f.MIN_MS=g.MIN_MS,f.MAX_MS=g.MAX_MS;var y=r(65888);f.findBin=y.findBin,f.sorterAsc=y.sorterAsc,f.sorterDes=y.sorterDes,f.distinctVals=y.distinctVals,f.roundUp=y.roundUp,f.sort=y.sort,f.findIndexOfMin=y.findIndexOfMin,f.sortObjectKeys=r(78607);var m=r(80038);f.aggNums=m.aggNums,f.len=m.len,f.mean=m.mean,f.median=m.median,f.midRange=m.midRange,f.variance=m.variance,f.stdev=m.stdev,f.interp=m.interp;var x=r(35657);f.init2dArray=x.init2dArray,f.transposeRagged=x.transposeRagged,f.dot=x.dot,f.translationMatrix=x.translationMatrix,f.rotationMatrix=x.rotationMatrix,f.rotationXYMatrix=x.rotationXYMatrix,f.apply3DTransform=x.apply3DTransform,f.apply2DTransform=x.apply2DTransform,f.apply2DTransform2=x.apply2DTransform2,f.convertCssMatrix=x.convertCssMatrix,f.inverseTransformMatrix=x.inverseTransformMatrix;var b=r(26348);f.deg2rad=b.deg2rad,f.rad2deg=b.rad2deg,f.angleDelta=b.angleDelta,f.angleDist=b.angleDist,f.isFullCircle=b.isFullCircle,f.isAngleInsideSector=b.isAngleInsideSector,f.isPtInsideSector=b.isPtInsideSector,f.pathArc=b.pathArc,f.pathSector=b.pathSector,f.pathAnnulus=b.pathAnnulus;var _=r(99863);f.isLeftAnchor=_.isLeftAnchor,f.isCenterAnchor=_.isCenterAnchor,f.isRightAnchor=_.isRightAnchor,f.isTopAnchor=_.isTopAnchor,f.isMiddleAnchor=_.isMiddleAnchor,f.isBottomAnchor=_.isBottomAnchor;var w=r(87642);f.segmentsIntersect=w.segmentsIntersect,f.segmentDistance=w.segmentDistance,f.getTextLocation=w.getTextLocation,f.clearLocationCache=w.clearLocationCache,f.getVisibleSegment=w.getVisibleSegment,f.findPointOnPath=w.findPointOnPath;var T=r(1426);f.extendFlat=T.extendFlat,f.extendDeep=T.extendDeep,f.extendDeepAll=T.extendDeepAll,f.extendDeepNoArrays=T.extendDeepNoArrays;var k=r(47769);f.log=k.log,f.warn=k.warn,f.error=k.error;var A=r(30587);f.counterRegex=A.counter;var M=r(79990);f.throttle=M.throttle,f.throttleDone=M.done,f.clearThrottle=M.clear;var S=r(24401);function E(t){var e={};for(var r in t)for(var n=t[r],i=0;i<n.length;i++)e[n[i]]=+r;return e}f.getGraphDiv=S.getGraphDiv,f.isPlotDiv=S.isPlotDiv,f.removeElement=S.removeElement,f.addStyleRule=S.addStyleRule,f.addRelatedStyleRule=S.addRelatedStyleRule,f.deleteRelatedStyleRule=S.deleteRelatedStyleRule,f.getFullTransformMatrix=S.getFullTransformMatrix,f.getElementTransformMatrix=S.getElementTransformMatrix,f.getElementAndAncestors=S.getElementAndAncestors,f.equalDomRects=S.equalDomRects,f.clearResponsive=r(86367),f.preserveDrawingBuffer=r(45142),f.makeTraceGroups=r(77310),f._=r(15867),f.notifier=r(75046),f.filterUnique=r(75744),f.filterVisible=r(76756),f.pushUnique=r(75138),f.increment=r(39240),f.cleanNumber=r(95218),f.ensureNumber=function(t){return o(t)?(t=Number(t))>l||t<u?c:t:c},f.isIndex=function(t,e){return!(void 0!==e&&t>=e)&&o(t)&&t>=0&&t%1==0},f.noop=r(64213),f.identity=r(23389),f.repeat=function(t,e){for(var r=new Array(e),n=0;n<e;n++)r[n]=t;return r},f.swapAttrs=function(t,e,r,n){r||(r="x"),n||(n="y");for(var i=0;i<e.length;i++){var a=e[i],o=f.nestedProperty(t,a.replace("?",r)),s=f.nestedProperty(t,a.replace("?",n)),l=o.get();o.set(s.get()),s.set(l)}},f.raiseToTop=function(t){t.parentNode.appendChild(t)},f.cancelTransition=function(t){return t.transition().duration(0)},f.constrain=function(t,e,r){return e>r?Math.max(r,Math.min(e,t)):Math.max(e,Math.min(r,t))},f.bBoxIntersect=function(t,e,r){return r=r||0,t.left<=e.right+r&&e.left<=t.right+r&&t.top<=e.bottom+r&&e.top<=t.bottom+r},f.simpleMap=function(t,e,r,n,i){for(var a=t.length,o=new Array(a),s=0;s<a;s++)o[s]=e(t[s],r,n,i);return o},f.randstr=function t(e,r,n,i){if(n||(n=16),void 0===r&&(r=24),r<=0)return"0";var a,o,s=Math.log(Math.pow(2,r))/Math.log(n),l="";for(a=2;s===1/0;a*=2)s=Math.log(Math.pow(2,r/a))/Math.log(n)*a;var u=s-Math.floor(s);for(a=0;a<Math.floor(s);a++)l=Math.floor(Math.random()*n).toString(n)+l;u&&(o=Math.pow(n,u),l=Math.floor(Math.random()*o).toString(n)+l);var c=parseInt(l,n);return e&&e[l]||c!==1/0&&c>=Math.pow(2,r)?i>10?(f.warn("randstr failed uniqueness"),l):t(e,r,n,(i||0)+1):l},f.OptionControl=function(t,e){t||(t={}),e||(e="opt");var r={optionList:[],_newoption:function(n){n[e]=t,r[n.name]=n,r.optionList.push(n)}};return r["_"+e]=t,r},f.smooth=function(t,e){if((e=Math.round(e)||0)<2)return t;var r,n,i,a,o=t.length,s=2*o,l=2*e-1,u=new Array(l),c=new Array(o);for(r=0;r<l;r++)u[r]=(1-Math.cos(Math.PI*(r+1)/e))/(2*e);for(r=0;r<o;r++){for(a=0,n=0;n<l;n++)(i=r+n+1-e)<-o?i-=s*Math.round(i/s):i>=s&&(i-=s*Math.floor(i/s)),i<0?i=-1-i:i>=o&&(i=s-1-i),a+=t[i]*u[n];c[r]=a}return c},f.syncOrAsync=function(t,e,r){var n;function i(){return f.syncOrAsync(t,e,r)}for(;t.length;)if((n=(0,t.splice(0,1)[0])(e))&&n.then)return n.then(i);return r&&r(e)},f.stripTrailingSlash=function(t){return"/"===t.substr(-1)?t.substr(0,t.length-1):t},f.noneOrAll=function(t,e,r){if(t){var n,i=!1,a=!0;for(n=0;n<r.length;n++)null!=t[r[n]]?i=!0:a=!1;if(i&&!a)for(n=0;n<r.length;n++)t[r[n]]=e[r[n]]}},f.mergeArray=function(t,e,r,n){var i="function"==typeof n;if(f.isArrayOrTypedArray(t))for(var a=Math.min(t.length,e.length),o=0;o<a;o++){var s=t[o];e[o][r]=i?n(s):s}},f.mergeArrayCastPositive=function(t,e,r){return f.mergeArray(t,e,r,(function(t){var e=+t;return isFinite(e)&&e>0?e:0}))},f.fillArray=function(t,e,r,n){if(n=n||f.identity,f.isArrayOrTypedArray(t))for(var i=0;i<e.length;i++)e[i][r]=n(t[i])},f.castOption=function(t,e,r,n){n=n||f.identity;var i=f.nestedProperty(t,r).get();return f.isArrayOrTypedArray(i)?Array.isArray(e)&&f.isArrayOrTypedArray(i[e[0]])?n(i[e[0]][e[1]]):n(i[e]):i},f.extractOption=function(t,e,r,n){if(r in t)return t[r];var i=f.nestedProperty(e,n).get();return Array.isArray(i)?void 0:i},f.tagSelected=function(t,e,r){var n,i,a=e.selectedpoints,o=e._indexToPoints;o&&(n=E(o));for(var s=0;s<a.length;s++){var l=a[s];if(f.isIndex(l)||f.isArrayOrTypedArray(l)&&f.isIndex(l[0])&&f.isIndex(l[1])){var u=n?n[l]:l,c=r?r[u]:u;void 0!==(i=c)&&i<t.length&&(t[c].selected=1)}}},f.selIndices2selPoints=function(t){var e=t.selectedpoints,r=t._indexToPoints;if(r){for(var n=E(r),i=[],a=0;a<e.length;a++){var o=e[a];if(f.isIndex(o)){var s=n[o];f.isIndex(s)&&i.push(s)}}return i}return e},f.getTargetArray=function(t,e){var r=e.target;if("string"==typeof r&&r){var n=f.nestedProperty(t,r).get();return!!Array.isArray(n)&&n}return!!Array.isArray(r)&&r},f.minExtend=function t(e,r,n){var i={};"object"!=typeof r&&(r={});var a,o,s,l="pieLike"===n?-1:3,u=Object.keys(e);for(a=0;a<u.length;a++)s=e[o=u[a]],"_"!==o.charAt(0)&&"function"!=typeof s&&("module"===o?i[o]=s:Array.isArray(s)?i[o]="colorscale"===o||-1===l?s.slice():s.slice(0,l):f.isTypedArray(s)?i[o]=-1===l?s.subarray():s.subarray(0,l):i[o]=s&&"object"==typeof s?t(e[o],r[o],n):s);for(u=Object.keys(r),a=0;a<u.length;a++)"object"==typeof(s=r[o=u[a]])&&o in i&&"object"==typeof i[o]||(i[o]=s);return i},f.titleCase=function(t){return t.charAt(0).toUpperCase()+t.substr(1)},f.containsAny=function(t,e){for(var r=0;r<e.length;r++)if(-1!==t.indexOf(e[r]))return!0;return!1},f.isIE=function(){return void 0!==window.navigator.msSaveBlob};var L=/Version\/[\d\.]+.*Safari/;f.isSafari=function(){return L.test(window.navigator.userAgent)};var C=/iPad|iPhone|iPod/;f.isIOS=function(){return C.test(window.navigator.userAgent)};var P=/Firefox\/(\d+)\.\d+/;f.getFirefoxVersion=function(){var t=P.exec(window.navigator.userAgent);if(t&&2===t.length){var e=parseInt(t[1]);if(!isNaN(e))return e}return null},f.isD3Selection=function(t){return t instanceof n.selection},f.ensureSingle=function(t,e,r,n){var i=t.select(e+(r?"."+r:""));if(i.size())return i;var a=t.append(e);return r&&a.classed(r,!0),n&&a.call(n),a},f.ensureSingleById=function(t,e,r,n){var i=t.select(e+"#"+r);if(i.size())return i;var a=t.append(e).attr("id",r);return n&&a.call(n),a},f.objectFromPath=function(t,e){for(var r,n=t.split("."),i=r={},a=0;a<n.length;a++){var o=n[a],s=null,l=n[a].match(/(.*)\[([0-9]+)\]/);l?(o=l[1],s=l[2],r=r[o]=[],a===n.length-1?r[s]=e:r[s]={},r=r[s]):(a===n.length-1?r[o]=e:r[o]={},r=r[o])}return i};var O=/^([^\[\.]+)\.(.+)?/,I=/^([^\.]+)\[([0-9]+)\](\.)?(.+)?/;function D(t){return"__"===t.slice(0,2)}f.expandObjectPaths=function(t){var e,r,n,i,a,o,s;if("object"==typeof t&&!Array.isArray(t))for(r in t)if(t.hasOwnProperty(r))if(e=r.match(O)){if(i=t[r],D(n=e[1]))continue;delete t[r],t[n]=f.extendDeepNoArrays(t[n]||{},f.objectFromPath(r,f.expandObjectPaths(i))[n])}else if(e=r.match(I)){if(i=t[r],D(n=e[1]))continue;if(a=parseInt(e[2]),delete t[r],t[n]=t[n]||[],"."===e[3])s=e[4],o=t[n][a]=t[n][a]||{},f.extendDeepNoArrays(o,f.objectFromPath(s,f.expandObjectPaths(i)));else{if(D(n))continue;t[n][a]=f.expandObjectPaths(i)}}else{if(D(r))continue;t[r]=f.expandObjectPaths(t[r])}return t},f.numSeparate=function(t,e,r){if(r||(r=!1),"string"!=typeof e||0===e.length)throw new Error("Separator string required for formatting!");"number"==typeof t&&(t=String(t));var n=/(\d+)(\d{3})/,i=e.charAt(0),a=e.charAt(1),o=t.split("."),s=o[0],l=o.length>1?i+o[1]:"";if(a&&(o.length>1||s.length>4||r))for(;n.test(s);)s=s.replace(n,"$1"+a+"$2");return s+l},f.TEMPLATE_STRING_REGEX=/%{([^\s%{}:]*)([:|\|][^}]*)?}/g;var z=/^\w*$/;f.templateString=function(t,e){var r={};return t.replace(f.TEMPLATE_STRING_REGEX,(function(t,n){var i;return z.test(n)?i=e[n]:(r[n]=r[n]||f.nestedProperty(e,n).get,i=r[n]()),f.isValidTextValue(i)?i:""}))};var R={max:10,count:0,name:"hovertemplate"};f.hovertemplateString=function(){return U.apply(R,arguments)};var F={max:10,count:0,name:"texttemplate"};f.texttemplateString=function(){return U.apply(F,arguments)};var B=/^(\S+)([\*\/])(-?\d+(\.\d+)?)$/,N={max:10,count:0,name:"texttemplate",parseMultDiv:!0};f.texttemplateStringForShapes=function(){return U.apply(N,arguments)};var j=/^[:|\|]/;function U(t,e,r){var n=this,a=arguments;e||(e={});var o={};return t.replace(f.TEMPLATE_STRING_REGEX,(function(t,s,l){var u="_xother"===s||"_yother"===s,c="_xother_"===s||"_yother_"===s,h="xother_"===s||"yother_"===s,p="xother"===s||"yother"===s||u||h||c,d=s;(u||c)&&(d=d.substring(1)),(h||c)&&(d=d.substring(0,d.length-1));var v,g,y,m=null,x=null;if(n.parseMultDiv){var b=function(t){var e=t.match(B);return e?{key:e[1],op:e[2],number:Number(e[3])}:{key:t,op:null,number:null}}(d);d=b.key,m=b.op,x=b.number}if(p){if(void 0===(v=e[d]))return""}else for(y=3;y<a.length;y++)if(g=a[y]){if(g.hasOwnProperty(d)){v=g[d];break}if(z.test(d)||(v=f.nestedProperty(g,d).get(),(v=o[d]||f.nestedProperty(g,d).get())&&(o[d]=v)),void 0!==v)break}if(void 0!==v&&("*"===m&&(v*=x),"/"===m&&(v/=x)),void 0===v&&n)return n.count<n.max&&(f.warn("Variable '"+d+"' in "+n.name+" could not be found!"),v=t),n.count===n.max&&f.warn("Too many "+n.name+" warnings - additional warnings will be suppressed"),n.count++,t;if(l){var _;if(":"===l[0]&&(v=(_=r?r.numberFormat:f.numberFormat)(l.replace(j,""))(v)),"|"===l[0]){_=r?r.timeFormat:i;var w=f.dateTime2ms(v);v=f.formatDate(w,l.replace(j,""),!1,_)}}else{var T=d+"Label";e.hasOwnProperty(T)&&(v=e[T])}return p&&(v="("+v+")",(u||c)&&(v=" "+v),(h||c)&&(v+=" ")),v}))}f.subplotSort=function(t,e){for(var r=Math.min(t.length,e.length)+1,n=0,i=0,a=0;a<r;a++){var o=t.charCodeAt(a)||0,s=e.charCodeAt(a)||0,l=o>=48&&o<=57,u=s>=48&&s<=57;if(l&&(n=10*n+o-48),u&&(i=10*i+s-48),!l||!u){if(n!==i)return n-i;if(o!==s)return o-s}}return i-n};var V=2e9;f.seedPseudoRandom=function(){V=2e9},f.pseudoRandom=function(){var t=V;return V=(69069*V+1)%4294967296,Math.abs(V-t)<429496729?f.pseudoRandom():V/4294967296},f.fillText=function(t,e,r){var n=Array.isArray(r)?function(t){r.push(t)}:function(t){r.text=t},i=f.extractOption(t,e,"htx","hovertext");if(f.isValidTextValue(i))return n(i);var a=f.extractOption(t,e,"tx","text");return f.isValidTextValue(a)?n(a):void 0},f.isValidTextValue=function(t){return t||0===t},f.formatPercent=function(t,e){e=e||0;for(var r=(Math.round(100*t*Math.pow(10,e))*Math.pow(.1,e)).toFixed(e)+"%",n=0;n<e;n++)-1!==r.indexOf(".")&&(r=(r=r.replace("0%","%")).replace(".%","%"));return r},f.isHidden=function(t){var e=window.getComputedStyle(t).display;return!e||"none"===e},f.strTranslate=function(t,e){return t||e?"translate("+t+","+e+")":""},f.strRotate=function(t){return t?"rotate("+t+")":""},f.strScale=function(t){return 1!==t?"scale("+t+")":""},f.getTextTransform=function(t){var e=t.noCenter,r=t.textX,n=t.textY,i=t.targetX,a=t.targetY,o=t.anchorX||0,s=t.anchorY||0,l=t.rotate,u=t.scale;return u?u>1&&(u=1):u=0,f.strTranslate(i-u*(r+o),a-u*(n+s))+f.strScale(u)+(l?"rotate("+l+(e?"":" "+r+" "+n)+")":"")},f.setTransormAndDisplay=function(t,e){t.attr("transform",f.getTextTransform(e)),t.style("display",e.scale?null:"none")},f.ensureUniformFontSize=function(t,e){var r=f.extendFlat({},e);return r.size=Math.max(e.size,t._fullLayout.uniformtext.minsize||0),r},f.join2=function(t,e,r){var n=t.length;return n>1?t.slice(0,-1).join(e)+r+t[n-1]:t.join(e)},f.bigFont=function(t){return Math.round(1.2*t)};var H=f.getFirefoxVersion(),q=null!==H&&H<86;f.getPositionFromD3Event=function(){return q?[n.event.layerX,n.event.layerY]:[n.event.offsetX,n.event.offsetY]}},41965:function(t){"use strict";t.exports=function(t){return window&&window.process&&window.process.versions?"[object Object]"===Object.prototype.toString.call(t):"[object Object]"===Object.prototype.toString.call(t)&&Object.getPrototypeOf(t).hasOwnProperty("hasOwnProperty")}},66636:function(t,e,r){"use strict";var n=r(65487),i=/^\w*$/;t.exports=function(t,e,r,a){var o,s,l;r=r||"name",a=a||"value";var u={};e&&e.length?(l=n(t,e),s=l.get()):s=t,e=e||"";var c={};if(s)for(o=0;o<s.length;o++)c[s[o][r]]=o;var f=i.test(a),h={set:function(t,e){var i=null===e?4:0;if(!s){if(!l||4===i)return;s=[],l.set(s)}var o=c[t];if(void 0===o){if(4===i)return;i|=3,o=s.length,c[t]=o}else e!==(f?s[o][a]:n(s[o],a).get())&&(i|=2);var p=s[o]=s[o]||{};return p[r]=t,f?p[a]=e:n(p,a).set(e),null!==e&&(i&=-5),u[o]=u[o]|i,h},get:function(t){if(s){var e=c[t];return void 0===e?void 0:f?s[e][a]:n(s[e],a).get()}},rename:function(t,e){var n=c[t];return void 0===n||(u[n]=1|u[n],c[e]=n,delete c[t],s[n][r]=e),h},remove:function(t){var e=c[t];if(void 0===e)return h;var i=s[e];if(Object.keys(i).length>2)return u[e]=2|u[e],h.set(t,null);if(f){for(o=e;o<s.length;o++)u[o]=3|u[o];for(o=e;o<s.length;o++)c[s[o][r]]--;s.splice(e,1),delete c[t]}else n(i,a).set(null),u[e]=6|u[e];return h},constructUpdate:function(){for(var t,i,o={},l=Object.keys(u),c=0;c<l.length;c++)i=l[c],t=e+"["+i+"]",s[i]?(1&u[i]&&(o[t+"."+r]=s[i][r]),2&u[i]&&(o[t+"."+a]=f?4&u[i]?null:s[i][a]:4&u[i]?null:n(s[i],a).get())):o[t]=null;return o}};return h}},15867:function(t,e,r){"use strict";var n=r(73972);t.exports=function(t,e){for(var r=t._context.locale,i=0;i<2;i++){for(var a=t._context.locales,o=0;o<2;o++){var s=(a[r]||{}).dictionary;if(s){var l=s[e];if(l)return l}a=n.localeRegistry}var u=r.split("-")[0];if(u===r)break;r=u}return e}},47769:function(t,e,r){"use strict";var n=r(72075).dfltConfig,i=r(75046),a=t.exports={};a.log=function(){var t;if(n.logging>1){var e=["LOG:"];for(t=0;t<arguments.length;t++)e.push(arguments[t]);console.trace.apply(console,e)}if(n.notifyOnLogging>1){var r=[];for(t=0;t<arguments.length;t++)r.push(arguments[t]);i(r.join("<br>"),"long")}},a.warn=function(){var t;if(n.logging>0){var e=["WARN:"];for(t=0;t<arguments.length;t++)e.push(arguments[t]);console.trace.apply(console,e)}if(n.notifyOnLogging>0){var r=[];for(t=0;t<arguments.length;t++)r.push(arguments[t]);i(r.join("<br>"),"stick")}},a.error=function(){var t;if(n.logging>0){var e=["ERROR:"];for(t=0;t<arguments.length;t++)e.push(arguments[t]);console.error.apply(console,e)}if(n.notifyOnLogging>0){var r=[];for(t=0;t<arguments.length;t++)r.push(arguments[t]);i(r.join("<br>"),"stick")}}},77310:function(t,e,r){"use strict";var n=r(39898);t.exports=function(t,e,r){var i=t.selectAll("g."+r.replace(/\s/g,".")).data(e,(function(t){return t[0].trace.uid}));i.exit().remove(),i.enter().append("g").attr("class",r),i.order();var a=t.classed("rangeplot")?"nodeRangePlot3":"node3";return i.each((function(t){t[0][a]=n.select(this)})),i}},35657:function(t,e,r){"use strict";var n=r(79576);e.init2dArray=function(t,e){for(var r=new Array(t),n=0;n<t;n++)r[n]=new Array(e);return r},e.transposeRagged=function(t){var e,r,n=0,i=t.length;for(e=0;e<i;e++)n=Math.max(n,t[e].length);var a=new Array(n);for(e=0;e<n;e++)for(a[e]=new Array(i),r=0;r<i;r++)a[e][r]=t[r][e];return a},e.dot=function(t,r){if(!t.length||!r.length||t.length!==r.length)return null;var n,i,a=t.length;if(t[0].length)for(n=new Array(a),i=0;i<a;i++)n[i]=e.dot(t[i],r);else if(r[0].length){var o=e.transposeRagged(r);for(n=new Array(o.length),i=0;i<o.length;i++)n[i]=e.dot(t,o[i])}else for(n=0,i=0;i<a;i++)n+=t[i]*r[i];return n},e.translationMatrix=function(t,e){return[[1,0,t],[0,1,e],[0,0,1]]},e.rotationMatrix=function(t){var e=t*Math.PI/180;return[[Math.cos(e),-Math.sin(e),0],[Math.sin(e),Math.cos(e),0],[0,0,1]]},e.rotationXYMatrix=function(t,r,n){return e.dot(e.dot(e.translationMatrix(r,n),e.rotationMatrix(t)),e.translationMatrix(-r,-n))},e.apply3DTransform=function(t){return function(){var r=arguments,n=1===arguments.length?r[0]:[r[0],r[1],r[2]||0];return e.dot(t,[n[0],n[1],n[2],1]).slice(0,3)}},e.apply2DTransform=function(t){return function(){var r=arguments;3===r.length&&(r=r[0]);var n=1===arguments.length?r[0]:[r[0],r[1]];return e.dot(t,[n[0],n[1],1]).slice(0,2)}},e.apply2DTransform2=function(t){var r=e.apply2DTransform(t);return function(t){return r(t.slice(0,2)).concat(r(t.slice(2,4)))}},e.convertCssMatrix=function(t){if(t){var e=t.length;if(16===e)return t;if(6===e)return[t[0],t[1],0,0,t[2],t[3],0,0,0,0,1,0,t[4],t[5],0,1]}return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]},e.inverseTransformMatrix=function(t){var e=[];return n.invert(e,t),[[e[0],e[1],e[2],e[3]],[e[4],e[5],e[6],e[7]],[e[8],e[9],e[10],e[11]],[e[12],e[13],e[14],e[15]]]}},64872:function(t){"use strict";t.exports={mod:function(t,e){var r=t%e;return r<0?r+e:r},modHalf:function(t,e){return Math.abs(t)>e/2?t-Math.round(t/e)*e:t}}},65487:function(t,e,r){"use strict";var n=r(92770),i=r(73627).isArrayOrTypedArray;function a(t,e){return function(){var r,n,o,s,l,u=t;for(s=0;s<e.length-1;s++){if(-1===(r=e[s])){for(n=!0,o=[],l=0;l<u.length;l++)o[l]=a(u[l],e.slice(s+1))(),o[l]!==o[0]&&(n=!1);return n?o[0]:o}if("number"==typeof r&&!i(u))return;if("object"!=typeof(u=u[r])||null===u)return}if("object"==typeof u&&null!==u&&null!==(o=u[e[s]]))return o}}t.exports=function(t,e){if(n(e))e=String(e);else if("string"!=typeof e||"[-1]"===e.substr(e.length-4))throw"bad property string";var r,i,o,s,u=e.split(".");for(s=0;s<u.length;s++)if("__"===String(u[s]).slice(0,2))throw"bad property string";for(s=0;s<u.length;){if(r=String(u[s]).match(/^([^\[\]]*)((\[\-?[0-9]*\])+)$/)){if(r[1])u[s]=r[1];else{if(0!==s)throw"bad property string";u.splice(0,1)}for(i=r[2].substr(1,r[2].length-2).split("]["),o=0;o<i.length;o++)s++,u.splice(s,0,Number(i[o]))}s++}return"object"!=typeof t?function(t,e,r){return{set:function(){throw"bad container"},get:function(){},astr:e,parts:r,obj:t}}(t,e,u):{set:l(t,u,e),get:a(t,u),astr:e,parts:u,obj:t}};var o=/(^|\.)args\[/;function s(t,e){return void 0===t||null===t&&!e.match(o)}function l(t,e,r){return function(n){var a,o,l=t,h="",p=[[t,h]],d=s(n,r);for(o=0;o<e.length-1;o++){if("number"==typeof(a=e[o])&&!i(l))throw"array index but container is not an array";if(-1===a){if(d=!c(l,e.slice(o+1),n,r))break;return}if(!f(l,a,e[o+1],d))break;if("object"!=typeof(l=l[a])||null===l)throw"container is not an object";h=u(h,a),p.push([l,h])}if(d){if(o===e.length-1&&(delete l[e[o]],Array.isArray(l)&&+e[o]==l.length-1))for(;l.length&&void 0===l[l.length-1];)l.pop()}else l[e[o]]=n}}function u(t,e){var r=e;return n(e)?r="["+e+"]":t&&(r="."+e),t+r}function c(t,e,r,n){var a,o=i(r),u=!0,c=r,h=n.replace("-1",0),p=!o&&s(r,h),d=e[0];for(a=0;a<t.length;a++)h=n.replace("-1",a),o&&(p=s(c=r[a%r.length],h)),p&&(u=!1),f(t,a,d,p)&&l(t[a],e,n.replace("-1",a))(c);return u}function f(t,e,r,n){if(void 0===t[e]){if(n)return!1;t[e]="number"==typeof r?[]:{}}return!0}},64213:function(t){"use strict";t.exports=function(){}},75046:function(t,e,r){"use strict";var n=r(39898),i=r(92770),a=[];t.exports=function(t,e){if(-1===a.indexOf(t)){a.push(t);var r=1e3;i(e)?r=e:"long"===e&&(r=3e3);var o=n.select("body").selectAll(".plotly-notifier").data([0]);o.enter().append("div").classed("plotly-notifier",!0),o.selectAll(".notifier-note").data(a).enter().append("div").classed("notifier-note",!0).style("opacity",0).each((function(t){var i=n.select(this);i.append("button").classed("notifier-close",!0).html("&times;").on("click",(function(){i.transition().call(s)}));for(var a=i.append("p"),o=t.split(/<br\s*\/?>/g),l=0;l<o.length;l++)l&&a.append("br"),a.append("span").text(o[l]);"stick"===e?i.transition().duration(350).style("opacity",1):i.transition().duration(700).style("opacity",1).transition().delay(r).call(s)}))}function s(t){t.duration(700).style("opacity",0).each("end",(function(t){var e=a.indexOf(t);-1!==e&&a.splice(e,1),n.select(this).remove()}))}}},39918:function(t,e,r){"use strict";var n=r(6964),i="data-savedcursor";t.exports=function(t,e){var r=t.attr(i);if(e){if(!r){for(var a=(t.attr("class")||"").split(" "),o=0;o<a.length;o++){var s=a[o];0===s.indexOf("cursor-")&&t.attr(i,s.substr(7)).classed(s,!1)}t.attr(i)||t.attr(i,"!!")}n(t,e)}else r&&(t.attr(i,null),"!!"===r?n(t):n(t,r))}},61082:function(t,e,r){"use strict";var n=r(35657).dot,i=r(50606).BADNUM,a=t.exports={};a.tester=function(t){var e,r=t.slice(),n=r[0][0],a=n,o=r[0][1],s=o;for(r[r.length-1][0]===r[0][0]&&r[r.length-1][1]===r[0][1]||r.push(r[0]),e=1;e<r.length;e++)n=Math.min(n,r[e][0]),a=Math.max(a,r[e][0]),o=Math.min(o,r[e][1]),s=Math.max(s,r[e][1]);var l,u=!1;5===r.length&&(r[0][0]===r[1][0]?r[2][0]===r[3][0]&&r[0][1]===r[3][1]&&r[1][1]===r[2][1]&&(u=!0,l=function(t){return t[0]===r[0][0]}):r[0][1]===r[1][1]&&r[2][1]===r[3][1]&&r[0][0]===r[3][0]&&r[1][0]===r[2][0]&&(u=!0,l=function(t){return t[1]===r[0][1]}));var c=!0,f=r[0];for(e=1;e<r.length;e++)if(f[0]!==r[e][0]||f[1]!==r[e][1]){c=!1;break}return{xmin:n,xmax:a,ymin:o,ymax:s,pts:r,contains:u?function(t,e){var r=t[0],u=t[1];return!(r===i||r<n||r>a||u===i||u<o||u>s||e&&l(t))}:function(t,e){var l=t[0],u=t[1];if(l===i||l<n||l>a||u===i||u<o||u>s)return!1;var c,f,h,p,d,v=r.length,g=r[0][0],y=r[0][1],m=0;for(c=1;c<v;c++)if(f=g,h=y,g=r[c][0],y=r[c][1],!(l<(p=Math.min(f,g))||l>Math.max(f,g)||u>Math.max(h,y)))if(u<Math.min(h,y))l!==p&&m++;else{if(u===(d=g===f?u:h+(l-f)*(y-h)/(g-f)))return 1!==c||!e;u<=d&&l!==p&&m++}return m%2==1},isRect:u,degenerate:c}},a.isSegmentBent=function(t,e,r,i){var a,o,s,l=t[e],u=[t[r][0]-l[0],t[r][1]-l[1]],c=n(u,u),f=Math.sqrt(c),h=[-u[1]/f,u[0]/f];for(a=e+1;a<r;a++)if(o=[t[a][0]-l[0],t[a][1]-l[1]],(s=n(o,u))<0||s>c||Math.abs(n(o,h))>i)return!0;return!1},a.filter=function(t,e){var r=[t[0]],n=0,i=0;function o(o){t.push(o);var s=r.length,l=n;r.splice(i+1);for(var u=l+1;u<t.length;u++)(u===t.length-1||a.isSegmentBent(t,l,u+1,e))&&(r.push(t[u]),r.length<s-2&&(n=u,i=r.length-1),l=u)}return t.length>1&&o(t.pop()),{addPt:o,raw:t,filtered:r}}},79749:function(t,e,r){"use strict";var n=r(58617),i=r(98580);t.exports=function(t,e,a){var o=t._fullLayout,s=!0;return o._glcanvas.each((function(n){if(n.regl)n.regl.preloadCachedCode(a);else if(!n.pick||o._has("parcoords")){try{n.regl=i({canvas:this,attributes:{antialias:!n.pick,preserveDrawingBuffer:!0},pixelRatio:t._context.plotGlPixelRatio||r.g.devicePixelRatio,extensions:e||[],cachedCode:a||{}})}catch(t){s=!1}n.regl||(s=!1),s&&this.addEventListener("webglcontextlost",(function(e){t&&t.emit&&t.emit("plotly_webglcontextlost",{event:e,layer:n.key})}),!1)}})),s||n({container:o._glcontainer.node()}),s}},45142:function(t,e,r){"use strict";var n=r(92770),i=r(35791);t.exports=function(t){var e;if("string"!=typeof(e=t&&t.hasOwnProperty("userAgent")?t.userAgent:function(){var t;return"undefined"!=typeof navigator&&(t=navigator.userAgent),t&&t.headers&&"string"==typeof t.headers["user-agent"]&&(t=t.headers["user-agent"]),t}()))return!0;var r=i({ua:{headers:{"user-agent":e}},tablet:!0,featureDetect:!1});if(!r)for(var a=e.split(" "),o=1;o<a.length;o++)if(-1!==a[o].indexOf("Safari"))for(var s=o-1;s>-1;s--){var l=a[s];if("Version/"===l.substr(0,8)){var u=l.substr(8).split(".")[0];if(n(u)&&(u=+u),u>=13)return!0}}return r}},75138:function(t){"use strict";t.exports=function(t,e){if(e instanceof RegExp){for(var r=e.toString(),n=0;n<t.length;n++)if(t[n]instanceof RegExp&&t[n].toString()===r)return t;t.push(e)}else!e&&0!==e||-1!==t.indexOf(e)||t.push(e);return t}},10847:function(t,e,r){"use strict";var n=r(71828),i=r(72075).dfltConfig,a={add:function(t,e,r,n,a){var o,s;t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},s=t.undoQueue.index,t.autoplay?t.undoQueue.inSequence||(t.autoplay=!1):(!t.undoQueue.sequence||t.undoQueue.beginSequence?(o={undo:{calls:[],args:[]},redo:{calls:[],args:[]}},t.undoQueue.queue.splice(s,t.undoQueue.queue.length-s,o),t.undoQueue.index+=1):o=t.undoQueue.queue[s-1],t.undoQueue.beginSequence=!1,o&&(o.undo.calls.unshift(e),o.undo.args.unshift(r),o.redo.calls.push(n),o.redo.args.push(a)),t.undoQueue.queue.length>i.queueLength&&(t.undoQueue.queue.shift(),t.undoQueue.index--))},startSequence:function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!0,t.undoQueue.beginSequence=!0},stopSequence:function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!1,t.undoQueue.beginSequence=!1},undo:function(t){var e,r;if(!(void 0===t.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index<=0)){for(t.undoQueue.index--,e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,r=0;r<e.undo.calls.length;r++)a.plotDo(t,e.undo.calls[r],e.undo.args[r]);t.undoQueue.inSequence=!1,t.autoplay=!1}},redo:function(t){var e,r;if(!(void 0===t.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index>=t.undoQueue.queue.length)){for(e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,r=0;r<e.redo.calls.length;r++)a.plotDo(t,e.redo.calls[r],e.redo.args[r]);t.undoQueue.inSequence=!1,t.autoplay=!1,t.undoQueue.index++}},plotDo:function(t,e,r){t.autoplay=!0,r=function(t,e){for(var r,i=[],a=0;a<e.length;a++)r=e[a],i[a]=r===t?r:"object"==typeof r?Array.isArray(r)?n.extendDeep([],r):n.extendDeepAll({},r):r;return i}(t,r),e.apply(null,r)}};t.exports=a},30587:function(t,e){"use strict";e.counter=function(t,e,r,n){var i=(e||"")+(r?"":"$"),a=!1===n?"":"^";return"xy"===t?new RegExp(a+"x([2-9]|[1-9][0-9]+)?y([2-9]|[1-9][0-9]+)?"+i):new RegExp(a+t+"([2-9]|[1-9][0-9]+)?"+i)}},6962:function(t){"use strict";var e=/^(.*)(\.[^\.\[\]]+|\[\d\])$/,r=/^[^\.\[\]]+$/;t.exports=function(t,n){for(;n;){var i=t.match(e);if(i)t=i[1];else{if(!t.match(r))throw new Error("bad relativeAttr call:"+[t,n]);t=""}if("^"!==n.charAt(0))break;n=n.slice(1)}return t&&"["!==n.charAt(0)?t+"."+n:t+n}},51332:function(t,e,r){"use strict";var n=r(73627).isArrayOrTypedArray,i=r(41965);t.exports=function t(e,r){for(var a in r){var o=r[a],s=e[a];if(s!==o)if("_"===a.charAt(0)||"function"==typeof o){if(a in e)continue;e[a]=o}else if(n(o)&&n(s)&&i(o[0])){if("customdata"===a||"ids"===a)continue;for(var l=Math.min(o.length,s.length),u=0;u<l;u++)s[u]!==o[u]&&i(o[u])&&i(s[u])&&t(s[u],o[u])}else i(o)&&i(s)&&(t(s,o),Object.keys(s).length||delete e[a])}}},65888:function(t,e,r){"use strict";var n=r(92770),i=r(47769),a=r(23389),o=r(50606).BADNUM,s=1e-9;function l(t,e){return t<e}function u(t,e){return t<=e}function c(t,e){return t>e}function f(t,e){return t>=e}e.findBin=function(t,e,r){if(n(e.start))return r?Math.ceil((t-e.start)/e.size-s)-1:Math.floor((t-e.start)/e.size+s);var a,o,h=0,p=e.length,d=0,v=p>1?(e[p-1]-e[0])/(p-1):1;for(o=v>=0?r?l:u:r?f:c,t+=v*s*(r?-1:1)*(v>=0?1:-1);h<p&&d++<100;)o(e[a=Math.floor((h+p)/2)],t)?h=a+1:p=a;return d>90&&i.log("Long binary search..."),h-1},e.sorterAsc=function(t,e){return t-e},e.sorterDes=function(t,e){return e-t},e.distinctVals=function(t){var r,n=t.slice();for(n.sort(e.sorterAsc),r=n.length-1;r>-1&&n[r]===o;r--);for(var i,a=n[r]-n[0]||1,s=a/(r||1)/1e4,l=[],u=0;u<=r;u++){var c=n[u],f=c-i;void 0===i?(l.push(c),i=c):f>s&&(a=Math.min(a,f),l.push(c),i=c)}return{vals:l,minDiff:a}},e.roundUp=function(t,e,r){for(var n,i=0,a=e.length-1,o=0,s=r?0:1,l=r?1:0,u=r?Math.ceil:Math.floor;i<a&&o++<100;)e[n=u((i+a)/2)]<=t?i=n+s:a=n-l;return e[i]},e.sort=function(t,e){for(var r=0,n=0,i=1;i<t.length;i++){var a=e(t[i],t[i-1]);if(a<0?r=1:a>0&&(n=1),r&&n)return t.sort(e)}return n?t:t.reverse()},e.findIndexOfMin=function(t,e){e=e||a;for(var r,n=1/0,i=0;i<t.length;i++){var o=e(t[i]);o<n&&(n=o,r=i)}return r}},6964:function(t){"use strict";t.exports=function(t,e){(t.attr("class")||"").split(" ").forEach((function(e){0===e.indexOf("cursor-")&&t.classed(e,!1)})),e&&t.classed("cursor-"+e,!0)}},58617:function(t,e,r){"use strict";var n=r(7901),i=function(){};t.exports=function(t){for(var e in t)"function"==typeof t[e]&&(t[e]=i);t.destroy=function(){t.container.parentNode.removeChild(t.container)};var r=document.createElement("div");r.className="no-webgl",r.style.cursor="pointer",r.style.fontSize="24px",r.style.color=n.defaults[0],r.style.position="absolute",r.style.left=r.style.top="0px",r.style.width=r.style.height="100%",r.style["background-color"]=n.lightLine,r.style["z-index"]=30;var a=document.createElement("p");return a.textContent="WebGL is not supported by your browser - visit https://get.webgl.org for more info",a.style.position="relative",a.style.top="50%",a.style.left="50%",a.style.height="30%",a.style.width="50%",a.style.margin="-15% 0 0 -25%",r.appendChild(a),t.container.appendChild(r),t.container.style.background="#FFFFFF",t.container.onclick=function(){window.open("https://get.webgl.org")},!1}},78607:function(t){"use strict";t.exports=function(t){return Object.keys(t).sort()}},80038:function(t,e,r){"use strict";var n=r(92770),i=r(73627).isArrayOrTypedArray;e.aggNums=function(t,r,a,o){var s,l;if((!o||o>a.length)&&(o=a.length),n(r)||(r=!1),i(a[0])){for(l=new Array(o),s=0;s<o;s++)l[s]=e.aggNums(t,r,a[s]);a=l}for(s=0;s<o;s++)n(r)?n(a[s])&&(r=t(+r,+a[s])):r=a[s];return r},e.len=function(t){return e.aggNums((function(t){return t+1}),0,t)},e.mean=function(t,r){return r||(r=e.len(t)),e.aggNums((function(t,e){return t+e}),0,t)/r},e.midRange=function(t){if(void 0!==t&&0!==t.length)return(e.aggNums(Math.max,null,t)+e.aggNums(Math.min,null,t))/2},e.variance=function(t,r,i){return r||(r=e.len(t)),n(i)||(i=e.mean(t,r)),e.aggNums((function(t,e){return t+Math.pow(e-i,2)}),0,t)/r},e.stdev=function(t,r,n){return Math.sqrt(e.variance(t,r,n))},e.median=function(t){var r=t.slice().sort();return e.interp(r,.5)},e.interp=function(t,e){if(!n(e))throw"n should be a finite number";if((e=e*t.length-.5)<0)return t[0];if(e>t.length-1)return t[t.length-1];var r=e%1;return r*t[Math.ceil(e)]+(1-r)*t[Math.floor(e)]}},78614:function(t,e,r){"use strict";var n=r(25075);t.exports=function(t){return t?n(t):[0,0,0,1]}},3883:function(t,e,r){"use strict";var n=r(32396),i=r(91424),a=r(71828),o=null;t.exports=function(){if(null!==o)return o;o=!1;var t=a.isIE()||a.isSafari()||a.isIOS();if(window.navigator.userAgent&&!t){var e=Array.from(n.CSS_DECLARATIONS).reverse(),r=window.CSS&&window.CSS.supports||window.supportsCSS;if("function"==typeof r)o=e.some((function(t){return r.apply(null,t)}));else{var s=i.tester.append("image").attr("style",n.STYLE),l=window.getComputedStyle(s.node()).imageRendering;o=e.some((function(t){var e=t[1];return l===e||l===e.toLowerCase()})),s.remove()}}return o}},63893:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=i.strTranslate,o=r(77922),s=r(18783).LINE_SPACING,l=/([^$]*)([$]+[^$]*[$]+)([^$]*)/;e.convertToTspans=function(t,r,g){var S=t.text(),E=!t.attr("data-notex")&&r&&r._context.typesetMath&&"undefined"!=typeof MathJax&&S.match(l),P=n.select(t.node().parentNode);if(!P.empty()){var O=t.attr("class")?t.attr("class").split(" ")[0]:"text";return O+="-math",P.selectAll("svg."+O).remove(),P.selectAll("g."+O+"-group").remove(),t.style("display",null).attr({"data-unformatted":S,"data-math":"N"}),E?(r&&r._promises||[]).push(new Promise((function(e){t.style("display","none");var r=parseInt(t.node().style.fontSize,10),o={fontSize:r};!function(t,e,r){var a,o,s,l,h=parseInt((MathJax.version||"").split(".")[0]);if(2===h||3===h){var p=function(){var r="math-output-"+i.randstr({},64),a=(l=n.select("body").append("div").attr({id:r}).style({visibility:"hidden",position:"absolute","font-size":e.fontSize+"px"}).text(t.replace(u,"\\lt ").replace(c,"\\gt "))).node();return 2===h?MathJax.Hub.Typeset(a):MathJax.typeset([a])},d=function(){var e=l.select(2===h?".MathJax_SVG":".MathJax"),a=!e.empty()&&l.select("svg").node();if(a){var o,s=a.getBoundingClientRect();o=2===h?n.select("body").select("#MathJax_SVG_glyphs"):e.select("defs"),r(e,o,s)}else i.log("There was an error in the tex syntax.",t),r();l.remove()};2===h?MathJax.Hub.Queue((function(){return o=i.extendDeepAll({},MathJax.Hub.config),s=MathJax.Hub.processSectionDelay,void 0!==MathJax.Hub.processSectionDelay&&(MathJax.Hub.processSectionDelay=0),MathJax.Hub.Config({messageStyle:"none",tex2jax:{inlineMath:f},displayAlign:"left"})}),(function(){if("SVG"!==(a=MathJax.Hub.config.menuSettings.renderer))return MathJax.Hub.setRenderer("SVG")}),p,d,(function(){if("SVG"!==a)return MathJax.Hub.setRenderer(a)}),(function(){return void 0!==s&&(MathJax.Hub.processSectionDelay=s),MathJax.Hub.Config(o)})):3===h&&(o=i.extendDeepAll({},MathJax.config),MathJax.config.tex||(MathJax.config.tex={}),MathJax.config.tex.inlineMath=f,"svg"!==(a=MathJax.config.startup.output)&&(MathJax.config.startup.output="svg"),MathJax.startup.defaultReady(),MathJax.startup.promise.then((function(){p(),d(),"svg"!==a&&(MathJax.config.startup.output=a),MathJax.config=o})))}else i.warn("No MathJax version:",MathJax.version)}(E[2],o,(function(n,i,o){P.selectAll("svg."+O).remove(),P.selectAll("g."+O+"-group").remove();var s=n&&n.select("svg");if(!s||!s.node())return I(),void e();var l=P.append("g").classed(O+"-group",!0).attr({"pointer-events":"none","data-unformatted":S,"data-math":"Y"});l.node().appendChild(s.node()),i&&i.node()&&s.node().insertBefore(i.node().cloneNode(!0),s.node().firstChild);var u=o.width,c=o.height;s.attr({class:O,height:c,preserveAspectRatio:"xMinYMin meet"}).style({overflow:"visible","pointer-events":"none"});var f=t.node().style.fill||"black",h=s.select("g");h.attr({fill:f,stroke:f});var p=h.node().getBoundingClientRect(),d=p.width,v=p.height;(d>u||v>c)&&(s.style("overflow","hidden"),d=(p=s.node().getBoundingClientRect()).width,v=p.height);var y=+t.attr("x"),m=+t.attr("y"),x=-(r||t.node().getBoundingClientRect().height)/4;if("y"===O[0])l.attr({transform:"rotate("+[-90,y,m]+")"+a(-d/2,x-v/2)});else if("l"===O[0])m=x-v/2;else if("a"===O[0]&&0!==O.indexOf("atitle"))y=0,m=x;else{var b=t.attr("text-anchor");y-=d*("middle"===b?.5:"end"===b?1:0),m=m+x-v/2}s.attr({x:y,y:m}),g&&g.call(t,l),e(l)}))}))):I(),t}function I(){P.empty()||(O=t.attr("class")+"-math",P.select("svg."+O).remove()),t.text("").style("white-space","pre");var r=function(t,e){e=e.replace(y," ");var r,a=!1,l=[],u=-1;function c(){u++;var e=document.createElementNS(o.svg,"tspan");n.select(e).attr({class:"line",dy:u*s+"em"}),t.appendChild(e),r=e;var i=l;if(l=[{node:e}],i.length>1)for(var a=1;a<i.length;a++)f(i[a])}function f(t){var e,i=t.type,a={};if("a"===i){e="a";var s=t.target,u=t.href,c=t.popup;u&&(a={"xlink:xlink:show":"_blank"===s||"_"!==s.charAt(0)?"new":"replace",target:s,"xlink:xlink:href":u},c&&(a.onclick='window.open(this.href.baseVal,this.target.baseVal,"'+c+'");return false;'))}else e="tspan";t.style&&(a.style=t.style);var f=document.createElementNS(o.svg,e);if("sup"===i||"sub"===i){g(r,v),r.appendChild(f);var h=document.createElementNS(o.svg,"tspan");g(h,v),n.select(h).attr("dy",d[i]),a.dy=p[i],r.appendChild(f),r.appendChild(h)}else r.appendChild(f);n.select(f).attr(a),r=t.node=f,l.push(t)}function g(t,e){t.appendChild(document.createTextNode(e))}function S(t){if(1!==l.length){var n=l.pop();t!==n.type&&i.log("Start tag <"+n.type+"> doesnt match end tag <"+t+">. Pretending it did match.",e),r=l[l.length-1].node}else i.log("Ignoring unexpected end tag </"+t+">.",e)}b.test(e)?c():(r=t,l=[{node:t}]);for(var E=e.split(m),P=0;P<E.length;P++){var O=E[P],I=O.match(x),D=I&&I[2].toLowerCase(),z=h[D];if("br"===D)c();else if(void 0===z)g(r,L(O));else if(I[1])S(D);else{var R=I[4],F={type:D},B=A(R,_);if(B?(B=B.replace(M,"$1 fill:"),z&&(B+=";"+z)):z&&(B=z),B&&(F.style=B),"a"===D){a=!0;var N=A(R,w);if(N){var j=C(N);j&&(F.href=j,F.target=A(R,T)||"_blank",F.popup=A(R,k))}}f(F)}}return a}(t.node(),S);r&&t.style("pointer-events","all"),e.positionText(t),g&&g.call(t)}};var u=/(<|&lt;|&#60;)/g,c=/(>|&gt;|&#62;)/g,f=[["$","$"],["\\(","\\)"]],h={sup:"font-size:70%",sub:"font-size:70%",b:"font-weight:bold",i:"font-style:italic",a:"cursor:pointer",span:"",em:"font-style:italic;font-weight:bold"},p={sub:"0.3em",sup:"-0.6em"},d={sub:"-0.21em",sup:"0.42em"},v="​",g=["http:","https:","mailto:","",void 0,":"],y=e.NEWLINES=/(\r\n?|\n)/g,m=/(<[^<>]*>)/,x=/<(\/?)([^ >]*)(\s+(.*))?>/i,b=/<br(\s+.*)?>/i;e.BR_TAG_ALL=/<br(\s+.*)?>/gi;var _=/(^|[\s"'])style\s*=\s*("([^"]*);?"|'([^']*);?')/i,w=/(^|[\s"'])href\s*=\s*("([^"]*)"|'([^']*)')/i,T=/(^|[\s"'])target\s*=\s*("([^"\s]*)"|'([^'\s]*)')/i,k=/(^|[\s"'])popup\s*=\s*("([\w=,]*)"|'([\w=,]*)')/i;function A(t,e){if(!t)return null;var r=t.match(e),n=r&&(r[3]||r[4]);return n&&L(n)}var M=/(^|;)\s*color:/;e.plainText=function(t,e){for(var r=void 0!==(e=e||{}).len&&-1!==e.len?e.len:1/0,n=void 0!==e.allowedTags?e.allowedTags:["br"],i=t.split(m),a=[],o="",s=0,l=0;l<i.length;l++){var u=i[l],c=u.match(x),f=c&&c[2].toLowerCase();if(f)-1!==n.indexOf(f)&&(a.push(u),o=f);else{var h=u.length;if(s+h<r)a.push(u),s+=h;else if(s<r){var p=r-s;o&&("br"!==o||p<=3||h<=3)&&a.pop(),r>3?a.push(u.substr(0,p-3)+"..."):a.push(u.substr(0,p));break}o=""}}return a.join("")};var S={mu:"μ",amp:"&",lt:"<",gt:">",nbsp:" ",times:"×",plusmn:"±",deg:"°"},E=/&(#\d+|#x[\da-fA-F]+|[a-z]+);/g;function L(t){return t.replace(E,(function(t,e){return("#"===e.charAt(0)?function(t){if(!(t>1114111)){var e=String.fromCodePoint;if(e)return e(t);var r=String.fromCharCode;return t<=65535?r(t):r(55232+(t>>10),t%1024+56320)}}("x"===e.charAt(1)?parseInt(e.substr(2),16):parseInt(e.substr(1),10)):S[e])||t}))}function C(t){var e=encodeURI(decodeURI(t)),r=document.createElement("a"),n=document.createElement("a");r.href=t,n.href=e;var i=r.protocol,a=n.protocol;return-1!==g.indexOf(i)&&-1!==g.indexOf(a)?e:""}function P(t,e,r){var n,a,o,s=r.horizontalAlign,l=r.verticalAlign||"top",u=t.node().getBoundingClientRect(),c=e.node().getBoundingClientRect();return a="bottom"===l?function(){return u.bottom-n.height}:"middle"===l?function(){return u.top+(u.height-n.height)/2}:function(){return u.top},o="right"===s?function(){return u.right-n.width}:"center"===s?function(){return u.left+(u.width-n.width)/2}:function(){return u.left},function(){n=this.node().getBoundingClientRect();var t=o()-c.left,e=a()-c.top,s=r.gd||{};if(r.gd){s._fullLayout._calcInverseTransform(s);var l=i.apply3DTransform(s._fullLayout._invTransform)(t,e);t=l[0],e=l[1]}return this.style({top:e+"px",left:t+"px","z-index":1e3}),this}}e.convertEntities=L,e.sanitizeHTML=function(t){t=t.replace(y," ");for(var e=document.createElement("p"),r=e,i=[],a=t.split(m),o=0;o<a.length;o++){var s=a[o],l=s.match(x),u=l&&l[2].toLowerCase();if(u in h)if(l[1])i.length&&(r=i.pop());else{var c=l[4],f=A(c,_),p=f?{style:f}:{};if("a"===u){var d=A(c,w);if(d){var v=C(d);if(v){p.href=v;var g=A(c,T);g&&(p.target=g)}}}var b=document.createElement(u);r.appendChild(b),n.select(b).attr(p),r=b,i.push(b)}else r.appendChild(document.createTextNode(L(s)))}return e.innerHTML},e.lineCount=function(t){return t.selectAll("tspan.line").size()||1},e.positionText=function(t,e,r){return t.each((function(){var t=n.select(this);function i(e,r){return void 0===r?null===(r=t.attr(e))&&(t.attr(e,0),r=0):t.attr(e,r),r}var a=i("x",e),o=i("y",r);"text"===this.nodeName&&t.selectAll("tspan.line").attr({x:a,y:o})}))};var O="1px ";e.makeTextShadow=function(t){return O+O+O+t+", -"+O+"-"+O+O+t+", "+O+"-"+O+O+t+", -"+O+O+O+t},e.makeEditable=function(t,e){var r=e.gd,i=e.delegate,a=n.dispatch("edit","input","cancel"),o=i||t;if(t.style({"pointer-events":i?"none":"all"}),1!==t.size())throw new Error("boo");function s(){var i,s,u,c,f;i=n.select(r).select(".svg-container"),s=i.append("div"),u=t.node().style,c=parseFloat(u.fontSize||12),void 0===(f=e.text)&&(f=t.attr("data-unformatted")),s.classed("plugin-editable editable",!0).style({position:"absolute","font-family":u.fontFamily||"Arial","font-size":c,color:e.fill||u.fill||"black",opacity:1,"background-color":e.background||"transparent",outline:"#ffffff33 1px solid",margin:[-c/8+1,0,0,-1].join("px ")+"px",padding:"0","box-sizing":"border-box"}).attr({contenteditable:!0}).text(f).call(P(t,i,e)).on("blur",(function(){r._editing=!1,t.text(this.textContent).style({opacity:1});var e,i=n.select(this).attr("class");(e=i?"."+i.split(" ")[0]+"-math-group":"[class*=-math-group]")&&n.select(t.node().parentNode).select(e).style({opacity:0});var o=this.textContent;n.select(this).transition().duration(0).remove(),n.select(document).on("mouseup",null),a.edit.call(t,o)})).on("focus",(function(){var t=this;r._editing=!0,n.select(document).on("mouseup",(function(){if(n.event.target===t)return!1;document.activeElement===s.node()&&s.node().blur()}))})).on("keyup",(function(){27===n.event.which?(r._editing=!1,t.style({opacity:1}),n.select(this).style({opacity:0}).on("blur",(function(){return!1})).transition().remove(),a.cancel.call(t,this.textContent)):(a.input.call(t,this.textContent),n.select(this).call(P(t,i,e)))})).on("keydown",(function(){13===n.event.which&&this.blur()})).call(l),t.style({opacity:0});var h,p=o.attr("class");(h=p?"."+p.split(" ")[0]+"-math-group":"[class*=-math-group]")&&n.select(t.node().parentNode).select(h).style({opacity:0})}function l(t){var e=t.node(),r=document.createRange();r.selectNodeContents(e);var n=window.getSelection();n.removeAllRanges(),n.addRange(r),e.focus()}return e.immediate?s():o.on("click",s),n.rebind(t,a,"on")}},79990:function(t,e){"use strict";var r={};function n(t){t&&null!==t.timer&&(clearTimeout(t.timer),t.timer=null)}e.throttle=function(t,e,i){var a=r[t],o=Date.now();if(!a){for(var s in r)r[s].ts<o-6e4&&delete r[s];a=r[t]={ts:0,timer:null}}function l(){i(),a.ts=Date.now(),a.onDone&&(a.onDone(),a.onDone=null)}n(a),o>a.ts+e?l():a.timer=setTimeout((function(){l(),a.timer=null}),e)},e.done=function(t){var e=r[t];return e&&e.timer?new Promise((function(t){var r=e.onDone;e.onDone=function(){r&&r(),t(),e.onDone=null}})):Promise.resolve()},e.clear=function(t){if(t)n(r[t]),delete r[t];else for(var i in r)e.clear(i)}},58163:function(t,e,r){"use strict";var n=r(92770);t.exports=function(t,e){if(t>0)return Math.log(t)/Math.LN10;var r=Math.log(Math.min(e[0],e[1]))/Math.LN10;return n(r)||(r=Math.log(Math.max(e[0],e[1]))/Math.LN10-6),r}},90973:function(t,e,r){"use strict";var n=t.exports={},i=r(78776).locationmodeToLayer,a=r(96892).zL;n.getTopojsonName=function(t){return[t.scope.replace(/ /g,"-"),"_",t.resolution.toString(),"m"].join("")},n.getTopojsonPath=function(t,e){return t+e+".json"},n.getTopojsonFeatures=function(t,e){var r=i[t.locationmode],n=e.objects[r];return a(e,n).features}},37815:function(t){"use strict";t.exports={moduleType:"locale",name:"en-US",dictionary:{"Click to enter Colorscale title":"Click to enter Colorscale title"},format:{date:"%m/%d/%Y"}}},92177:function(t){"use strict";t.exports={moduleType:"locale",name:"en",dictionary:{"Click to enter Colorscale title":"Click to enter Colourscale title"},format:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],periods:["AM","PM"],dateTime:"%a %b %e %X %Y",date:"%d/%m/%Y",time:"%H:%M:%S",decimal:".",thousands:",",grouping:[3],currency:["$",""],year:"%Y",month:"%b %Y",dayMonth:"%b %-d",dayMonthYear:"%b %-d, %Y"}}},14458:function(t,e,r){"use strict";var n=r(73972);t.exports=function(t){for(var e,r,i=n.layoutArrayContainers,a=n.layoutArrayRegexes,o=t.split("[")[0],s=0;s<a.length;s++)if((r=t.match(a[s]))&&0===r.index){e=r[0];break}if(e||(e=i[i.indexOf(o)]),!e)return!1;var l=t.substr(e.length);return l?!!(r=l.match(/^\[(0|[1-9][0-9]*)\](\.(.+))?$/))&&{array:e,index:Number(r[1]),property:r[3]||""}:{array:e,index:"",property:""}}},30962:function(t,e,r){"use strict";var n=r(1426).extendFlat,i=r(41965),a={valType:"flaglist",extras:["none"],flags:["calc","clearAxisTypes","plot","style","markerSize","colorbars"]},o={valType:"flaglist",extras:["none"],flags:["calc","plot","legend","ticks","axrange","layoutstyle","modebar","camera","arraydraw","colorbars"]},s=a.flags.slice().concat(["fullReplot"]),l=o.flags.slice().concat("layoutReplot");function u(t){for(var e={},r=0;r<t.length;r++)e[t[r]]=!1;return e}function c(t,e,r){var a=n({},t);for(var o in a){var s=a[o];i(s)&&(a[o]=f(s,e,0,o))}return"from-root"===r&&(a.editType=e),a}function f(t,e,r,i){if(t.valType){var a=n({},t);if(a.editType=e,Array.isArray(t.items)){a.items=new Array(t.items.length);for(var o=0;o<t.items.length;o++)a.items[o]=f(t.items[o],e)}return a}return c(t,e,"_"===i.charAt(0)?"nested":"from-root")}t.exports={traces:a,layout:o,traceFlags:function(){return u(s)},layoutFlags:function(){return u(l)},update:function(t,e){var r=e.editType;if(r&&"none"!==r)for(var n=r.split("+"),i=0;i<n.length;i++)t[n[i]]=!0},overrideAll:c}},58377:function(t,e,r){"use strict";var n=r(92770),i=r(27812),a=r(73972),o=r(71828),s=r(74875),l=r(41675),u=r(7901),c=l.cleanId,f=l.getFromTrace,h=a.traceIs;function p(t,e){var r=t[e],n=e.charAt(0);r&&"paper"!==r&&(t[e]=c(r,n,!0))}function d(t){function e(e,r){var n=t[e],i=t.title&&t.title[r];n&&!i&&(t.title||(t.title={}),t.title[r]=t[e],delete t[e])}t&&("string"!=typeof t.title&&"number"!=typeof t.title||(t.title={text:t.title}),e("titlefont","font"),e("titleposition","position"),e("titleside","side"),e("titleoffset","offset"))}function v(t){if(!o.isPlainObject(t))return!1;var e=t.name;return delete t.name,delete t.showlegend,("string"==typeof e||"number"==typeof e)&&String(e)}function g(t,e,r,n){if(r&&!n)return t;if(n&&!r)return e;if(!t.trim())return e;if(!e.trim())return t;var i,a=Math.min(t.length,e.length);for(i=0;i<a&&t.charAt(i)===e.charAt(i);i++);return t.substr(0,i).trim()}function y(t){var e="middle",r="center";return"string"==typeof t&&(-1!==t.indexOf("top")?e="top":-1!==t.indexOf("bottom")&&(e="bottom"),-1!==t.indexOf("left")?r="left":-1!==t.indexOf("right")&&(r="right")),e+" "+r}function m(t,e){return e in t&&"object"==typeof t[e]&&0===Object.keys(t[e]).length}e.clearPromiseQueue=function(t){Array.isArray(t._promises)&&t._promises.length>0&&o.log("Clearing previous rejected promises from queue."),t._promises=[]},e.cleanLayout=function(t){var r,n;t||(t={}),t.xaxis1&&(t.xaxis||(t.xaxis=t.xaxis1),delete t.xaxis1),t.yaxis1&&(t.yaxis||(t.yaxis=t.yaxis1),delete t.yaxis1),t.scene1&&(t.scene||(t.scene=t.scene1),delete t.scene1);var a=(s.subplotsRegistry.cartesian||{}).attrRegex,l=(s.subplotsRegistry.polar||{}).attrRegex,f=(s.subplotsRegistry.ternary||{}).attrRegex,h=(s.subplotsRegistry.gl3d||{}).attrRegex,v=Object.keys(t);for(r=0;r<v.length;r++){var g=v[r];if(a&&a.test(g)){var y=t[g];y.anchor&&"free"!==y.anchor&&(y.anchor=c(y.anchor)),y.overlaying&&(y.overlaying=c(y.overlaying)),y.type||(y.isdate?y.type="date":y.islog?y.type="log":!1===y.isdate&&!1===y.islog&&(y.type="linear")),"withzero"!==y.autorange&&"tozero"!==y.autorange||(y.autorange=!0,y.rangemode="tozero"),y.insiderange&&delete y.range,delete y.islog,delete y.isdate,delete y.categories,m(y,"domain")&&delete y.domain,void 0!==y.autotick&&(void 0===y.tickmode&&(y.tickmode=y.autotick?"auto":"linear"),delete y.autotick),d(y)}else if(l&&l.test(g))d(t[g].radialaxis);else if(f&&f.test(g)){var x=t[g];d(x.aaxis),d(x.baxis),d(x.caxis)}else if(h&&h.test(g)){var b=t[g],_=b.cameraposition;if(Array.isArray(_)&&4===_[0].length){var w=_[0],T=_[1],k=_[2],A=i([],w),M=[];for(n=0;n<3;++n)M[n]=T[n]+k*A[2+4*n];b.camera={eye:{x:M[0],y:M[1],z:M[2]},center:{x:T[0],y:T[1],z:T[2]},up:{x:0,y:0,z:1}},delete b.cameraposition}d(b.xaxis),d(b.yaxis),d(b.zaxis)}}var S=Array.isArray(t.annotations)?t.annotations.length:0;for(r=0;r<S;r++){var E=t.annotations[r];o.isPlainObject(E)&&(E.ref&&("paper"===E.ref?(E.xref="paper",E.yref="paper"):"data"===E.ref&&(E.xref="x",E.yref="y"),delete E.ref),p(E,"xref"),p(E,"yref"))}var L=Array.isArray(t.shapes)?t.shapes.length:0;for(r=0;r<L;r++){var C=t.shapes[r];o.isPlainObject(C)&&(p(C,"xref"),p(C,"yref"))}var P=Array.isArray(t.images)?t.images.length:0;for(r=0;r<P;r++){var O=t.images[r];o.isPlainObject(O)&&(p(O,"xref"),p(O,"yref"))}var I=t.legend;return I&&(I.x>3?(I.x=1.02,I.xanchor="left"):I.x<-2&&(I.x=-.02,I.xanchor="right"),I.y>3?(I.y=1.02,I.yanchor="bottom"):I.y<-2&&(I.y=-.02,I.yanchor="top")),d(t),"rotate"===t.dragmode&&(t.dragmode="orbit"),u.clean(t),t.template&&t.template.layout&&e.cleanLayout(t.template.layout),t},e.cleanData=function(t){for(var r=0;r<t.length;r++){var n,i=t[r];if("histogramy"===i.type&&"xbins"in i&&!("ybins"in i)&&(i.ybins=i.xbins,delete i.xbins),i.error_y&&"opacity"in i.error_y){var l=u.defaults,f=i.error_y.color||(h(i,"bar")?u.defaultLine:l[r%l.length]);i.error_y.color=u.addOpacity(u.rgb(f),u.opacity(f)*i.error_y.opacity),delete i.error_y.opacity}if("bardir"in i&&("h"!==i.bardir||!h(i,"bar")&&"histogram"!==i.type.substr(0,9)||(i.orientation="h",e.swapXYData(i)),delete i.bardir),"histogramy"===i.type&&e.swapXYData(i),"histogramx"!==i.type&&"histogramy"!==i.type||(i.type="histogram"),"scl"in i&&!("colorscale"in i)&&(i.colorscale=i.scl,delete i.scl),"reversescl"in i&&!("reversescale"in i)&&(i.reversescale=i.reversescl,delete i.reversescl),i.xaxis&&(i.xaxis=c(i.xaxis,"x")),i.yaxis&&(i.yaxis=c(i.yaxis,"y")),h(i,"gl3d")&&i.scene&&(i.scene=s.subplotsRegistry.gl3d.cleanId(i.scene)),!h(i,"pie-like")&&!h(i,"bar-like"))if(Array.isArray(i.textposition))for(n=0;n<i.textposition.length;n++)i.textposition[n]=y(i.textposition[n]);else i.textposition&&(i.textposition=y(i.textposition));var p=a.getModule(i);if(p&&p.colorbar){var x=p.colorbar.container,b=x?i[x]:i;b&&b.colorscale&&("YIGnBu"===b.colorscale&&(b.colorscale="YlGnBu"),"YIOrRd"===b.colorscale&&(b.colorscale="YlOrRd"))}if("surface"===i.type&&o.isPlainObject(i.contours)){var _=["x","y","z"];for(n=0;n<_.length;n++){var w=i.contours[_[n]];o.isPlainObject(w)&&(w.highlightColor&&(w.highlightcolor=w.highlightColor,delete w.highlightColor),w.highlightWidth&&(w.highlightwidth=w.highlightWidth,delete w.highlightWidth))}}if("candlestick"===i.type||"ohlc"===i.type){var T=!1!==(i.increasing||{}).showlegend,k=!1!==(i.decreasing||{}).showlegend,A=v(i.increasing),M=v(i.decreasing);if(!1!==A&&!1!==M){var S=g(A,M,T,k);S&&(i.name=S)}else!A&&!M||i.name||(i.name=A||M)}if(Array.isArray(i.transforms)){var E=i.transforms;for(n=0;n<E.length;n++){var L=E[n];if(o.isPlainObject(L))switch(L.type){case"filter":L.filtersrc&&(L.target=L.filtersrc,delete L.filtersrc),L.calendar&&(L.valuecalendar||(L.valuecalendar=L.calendar),delete L.calendar);break;case"groupby":if(L.styles=L.styles||L.style,L.styles&&!Array.isArray(L.styles)){var C=L.styles,P=Object.keys(C);L.styles=[];for(var O=0;O<P.length;O++)L.styles.push({target:P[O],value:C[P[O]]})}}}}m(i,"line")&&delete i.line,"marker"in i&&(m(i.marker,"line")&&delete i.marker.line,m(i,"marker")&&delete i.marker),u.clean(i),i.autobinx&&(delete i.autobinx,delete i.xbins),i.autobiny&&(delete i.autobiny,delete i.ybins),d(i),i.colorbar&&d(i.colorbar),i.marker&&i.marker.colorbar&&d(i.marker.colorbar),i.line&&i.line.colorbar&&d(i.line.colorbar),i.aaxis&&d(i.aaxis),i.baxis&&d(i.baxis)}},e.swapXYData=function(t){var e;if(o.swapAttrs(t,["?","?0","d?","?bins","nbins?","autobin?","?src","error_?"]),Array.isArray(t.z)&&Array.isArray(t.z[0])&&(t.transpose?delete t.transpose:t.transpose=!0),t.error_x&&t.error_y){var r=t.error_y,n="copy_ystyle"in r?r.copy_ystyle:!(r.color||r.thickness||r.width);o.swapAttrs(t,["error_?.copy_ystyle"]),n&&o.swapAttrs(t,["error_?.color","error_?.thickness","error_?.width"])}if("string"==typeof t.hoverinfo){var i=t.hoverinfo.split("+");for(e=0;e<i.length;e++)"x"===i[e]?i[e]="y":"y"===i[e]&&(i[e]="x");t.hoverinfo=i.join("+")}},e.coerceTraceIndices=function(t,e){if(n(e))return[e];if(!Array.isArray(e)||!e.length)return t.data.map((function(t,e){return e}));if(Array.isArray(e)){for(var r=[],i=0;i<e.length;i++)o.isIndex(e[i],t.data.length)?r.push(e[i]):o.warn("trace index (",e[i],") is not a number or is out of bounds");return r}return e},e.manageArrayContainers=function(t,e,r){var i=t.obj,a=t.parts,s=a.length,l=a[s-1],u=n(l);if(u&&null===e){var c=a.slice(0,s-1).join(".");o.nestedProperty(i,c).get().splice(l,1)}else u&&void 0===t.get()?(void 0===t.get()&&(r[t.astr]=null),t.set(e)):t.set(e)};var x=/(\.[^\[\]\.]+|\[[^\[\]\.]+\])$/;function b(t){var e=t.search(x);if(e>0)return t.substr(0,e)}e.hasParent=function(t,e){for(var r=b(e);r;){if(r in t)return!0;r=b(r)}return!1};var _=["x","y","z"];e.clearAxisTypes=function(t,e,r){for(var n=0;n<e.length;n++)for(var i=t._fullData[n],a=0;a<3;a++){var s=f(t,i,_[a]);if(s&&"log"!==s.type){var l=s._name,u=s._id.substr(1);if("scene"===u.substr(0,5)){if(void 0!==r[u])continue;l=u+"."+l}var c=l+".type";void 0===r[l]&&void 0===r[c]&&o.nestedProperty(t.layout,c).set(null)}}}},10641:function(t,e,r){"use strict";var n=r(72391);e._doPlot=n._doPlot,e.newPlot=n.newPlot,e.restyle=n.restyle,e.relayout=n.relayout,e.redraw=n.redraw,e.update=n.update,e._guiRestyle=n._guiRestyle,e._guiRelayout=n._guiRelayout,e._guiUpdate=n._guiUpdate,e._storeDirectGUIEdit=n._storeDirectGUIEdit,e.react=n.react,e.extendTraces=n.extendTraces,e.prependTraces=n.prependTraces,e.addTraces=n.addTraces,e.deleteTraces=n.deleteTraces,e.moveTraces=n.moveTraces,e.purge=n.purge,e.addFrames=n.addFrames,e.deleteFrames=n.deleteFrames,e.animate=n.animate,e.setPlotConfig=n.setPlotConfig;var i=r(24401).getGraphDiv,a=r(34031).eraseActiveShape;e.deleteActiveShape=function(t){return a(i(t))},e.toImage=r(403),e.validate=r(84936),e.downloadImage=r(7239);var o=r(96318);e.makeTemplate=o.makeTemplate,e.validateTemplate=o.validateTemplate},6611:function(t,e,r){"use strict";var n=r(41965),i=r(64213),a=r(47769),o=r(65888).sorterAsc,s=r(73972);e.containerArrayMatch=r(14458);var l=e.isAddVal=function(t){return"add"===t||n(t)},u=e.isRemoveVal=function(t){return null===t||"remove"===t};e.applyContainerArrayChanges=function(t,e,r,n,c){var f=e.astr,h=s.getComponentMethod(f,"supplyLayoutDefaults"),p=s.getComponentMethod(f,"draw"),d=s.getComponentMethod(f,"drawOne"),v=n.replot||n.recalc||h===i||p===i,g=t.layout,y=t._fullLayout;if(r[""]){Object.keys(r).length>1&&a.warn("Full array edits are incompatible with other edits",f);var m=r[""][""];if(u(m))e.set(null);else{if(!Array.isArray(m))return a.warn("Unrecognized full array edit value",f,m),!0;e.set(m)}return!v&&(h(g,y),p(t),!0)}var x,b,_,w,T,k,A,M,S=Object.keys(r).map(Number).sort(o),E=e.get(),L=E||[],C=c(y,f).get(),P=[],O=-1,I=L.length;for(x=0;x<S.length;x++)if(w=r[_=S[x]],T=Object.keys(w),k=w[""],A=l(k),_<0||_>L.length-(A?0:1))a.warn("index out of range",f,_);else if(void 0!==k)T.length>1&&a.warn("Insertion & removal are incompatible with edits to the same index.",f,_),u(k)?P.push(_):A?("add"===k&&(k={}),L.splice(_,0,k),C&&C.splice(_,0,{})):a.warn("Unrecognized full object edit value",f,_,k),-1===O&&(O=_);else for(b=0;b<T.length;b++)M=f+"["+_+"].",c(L[_],T[b],M).set(w[T[b]]);for(x=P.length-1;x>=0;x--)L.splice(P[x],1),C&&C.splice(P[x],1);if(L.length?E||e.set(L):e.set(null),v)return!1;if(h(g,y),d!==i){var D;if(-1===O)D=S;else{for(I=Math.max(L.length,I),D=[],x=0;x<S.length&&!((_=S[x])>=O);x++)D.push(_);for(x=O;x<I;x++)D.push(x)}for(x=0;x<D.length;x++)d(t,D[x])}else p(t);return!0}},72391:function(t,e,r){"use strict";var n=r(39898),i=r(92770),a=r(57035),o=r(71828),s=o.nestedProperty,l=r(11086),u=r(10847),c=r(73972),f=r(86281),h=r(74875),p=r(89298),d=r(23608),v=r(13838),g=r(91424),y=r(7901),m=r(4305).initInteractions,x=r(77922),b=r(47322).clearOutline,_=r(72075).dfltConfig,w=r(6611),T=r(58377),k=r(61549),A=r(30962),M=r(85555).AX_NAME_PATTERN,S=0;function E(t){var e=t._fullLayout;e._redrawFromAutoMarginCount?e._redrawFromAutoMarginCount--:t.emit("plotly_afterplot")}function L(t,e){try{t._fullLayout._paper.style("background",e)}catch(t){o.error(t)}}function C(t,e){L(t,y.combine(e,"white"))}function P(t,e){if(!t._context){t._context=o.extendDeep({},_);var r=n.select("base");t._context._baseUrl=r.size()&&r.attr("href")?window.location.href.split("#")[0]:""}var i,s,l,u=t._context;if(e){for(s=Object.keys(e),i=0;i<s.length;i++)"editable"!==(l=s[i])&&"edits"!==l&&l in u&&("setBackground"===l&&"opaque"===e[l]?u[l]=C:u[l]=e[l]);e.plot3dPixelRatio&&!u.plotGlPixelRatio&&(u.plotGlPixelRatio=u.plot3dPixelRatio);var c=e.editable;if(void 0!==c)for(u.editable=c,s=Object.keys(u.edits),i=0;i<s.length;i++)u.edits[s[i]]=c;if(e.edits)for(s=Object.keys(e.edits),i=0;i<s.length;i++)(l=s[i])in u.edits&&(u.edits[l]=e.edits[l]);u._exportedPlot=e._exportedPlot}u.staticPlot&&(u.editable=!1,u.edits={},u.autosizable=!1,u.scrollZoom=!1,u.doubleClick=!1,u.showTips=!1,u.showLink=!1,u.displayModeBar=!1),"hover"!==u.displayModeBar||a||(u.displayModeBar=!0),"transparent"!==u.setBackground&&"function"==typeof u.setBackground||(u.setBackground=L),u._hasZeroHeight=u._hasZeroHeight||0===t.clientHeight,u._hasZeroWidth=u._hasZeroWidth||0===t.clientWidth;var f=u.scrollZoom,h=u._scrollZoom={};if(!0===f)h.cartesian=1,h.gl3d=1,h.geo=1,h.mapbox=1;else if("string"==typeof f){var p=f.split("+");for(i=0;i<p.length;i++)h[p[i]]=1}else!1!==f&&(h.gl3d=1,h.geo=1,h.mapbox=1)}function O(t,e){var r,n,i=e+1,a=[];for(r=0;r<t.length;r++)(n=t[r])<0?a.push(i+n):a.push(n);return a}function I(t,e,r){var n,i;for(n=0;n<e.length;n++){if((i=e[n])!==parseInt(i,10))throw new Error("all values in "+r+" must be integers");if(i>=t.data.length||i<-t.data.length)throw new Error(r+" must be valid indices for gd.data.");if(e.indexOf(i,n+1)>-1||i>=0&&e.indexOf(-t.data.length+i)>-1||i<0&&e.indexOf(t.data.length+i)>-1)throw new Error("each index in "+r+" must be unique.")}}function D(t,e,r){if(!Array.isArray(t.data))throw new Error("gd.data must be an array.");if(void 0===e)throw new Error("currentIndices is a required argument.");if(Array.isArray(e)||(e=[e]),I(t,e,"currentIndices"),void 0===r||Array.isArray(r)||(r=[r]),void 0!==r&&I(t,r,"newIndices"),void 0!==r&&e.length!==r.length)throw new Error("current and new indices must be of equal length.")}function z(t,e,r,n,a){!function(t,e,r,n){var i=o.isPlainObject(n);if(!Array.isArray(t.data))throw new Error("gd.data must be an array");if(!o.isPlainObject(e))throw new Error("update must be a key:value object");if(void 0===r)throw new Error("indices must be an integer or array of integers");for(var a in I(t,r,"indices"),e){if(!Array.isArray(e[a])||e[a].length!==r.length)throw new Error("attribute "+a+" must be an array of length equal to indices array length");if(i&&(!(a in n)||!Array.isArray(n[a])||n[a].length!==e[a].length))throw new Error("when maxPoints is set as a key:value object it must contain a 1:1 corrispondence with the keys and number of traces in the update object")}}(t,e,r,n);for(var l=function(t,e,r,n){var a,l,u,c,f,h=o.isPlainObject(n),p=[];for(var d in Array.isArray(r)||(r=[r]),r=O(r,t.data.length-1),e)for(var v=0;v<r.length;v++){if(a=t.data[r[v]],l=(u=s(a,d)).get(),c=e[d][v],!o.isArrayOrTypedArray(c))throw new Error("attribute: "+d+" index: "+v+" must be an array");if(!o.isArrayOrTypedArray(l))throw new Error("cannot extend missing or non-array attribute: "+d);if(l.constructor!==c.constructor)throw new Error("cannot extend array with an array of a different type: "+d);f=h?n[d][v]:n,i(f)||(f=-1),p.push({prop:u,target:l,insert:c,maxp:Math.floor(f)})}return p}(t,e,r,n),u={},c={},f=0;f<l.length;f++){var h=l[f].prop,p=l[f].maxp,d=a(l[f].target,l[f].insert,p);h.set(d[0]),Array.isArray(u[h.astr])||(u[h.astr]=[]),u[h.astr].push(d[1]),Array.isArray(c[h.astr])||(c[h.astr]=[]),c[h.astr].push(l[f].target.length)}return{update:u,maxPoints:c}}function R(t,e){var r=new t.constructor(t.length+e.length);return r.set(t),r.set(e,t.length),r}function F(t,r,n,i){t=o.getGraphDiv(t),T.clearPromiseQueue(t);var a={};if("string"==typeof r)a[r]=n;else{if(!o.isPlainObject(r))return o.warn("Restyle fail.",r,n,i),Promise.reject();a=o.extendFlat({},r),void 0===i&&(i=n)}Object.keys(a).length&&(t.changed=!0);var s=T.coerceTraceIndices(t,i),l=U(t,a,s),c=l.flags;c.calc&&(t.calcdata=void 0),c.clearAxisTypes&&T.clearAxisTypes(t,s,{});var f=[];c.fullReplot?f.push(e._doPlot):(f.push(h.previousPromises),h.supplyDefaults(t),c.markerSize&&(h.doCalcdata(t),G(f)),c.style&&f.push(k.doTraceStyle),c.colorbars&&f.push(k.doColorBars),f.push(E)),f.push(h.rehover,h.redrag,h.reselect),u.add(t,F,[t,l.undoit,l.traces],F,[t,l.redoit,l.traces]);var p=o.syncOrAsync(f,t);return p&&p.then||(p=Promise.resolve()),p.then((function(){return t.emit("plotly_restyle",l.eventData),t}))}function B(t){return void 0===t?null:t}function N(t,e){return e?function(e,r,n){var i=s(e,r),a=i.set;return i.set=function(e){j((n||"")+r,i.get(),e,t),a(e)},i}:s}function j(t,e,r,n){if(Array.isArray(e)||Array.isArray(r))for(var i=Array.isArray(e)?e:[],a=Array.isArray(r)?r:[],s=Math.max(i.length,a.length),l=0;l<s;l++)j(t+"["+l+"]",i[l],a[l],n);else if(o.isPlainObject(e)||o.isPlainObject(r)){var u=o.isPlainObject(e)?e:{},c=o.isPlainObject(r)?r:{},f=o.extendFlat({},u,c);for(var h in f)j(t+"."+h,u[h],c[h],n)}else void 0===n[t]&&(n[t]=B(e))}function U(t,e,r){var n,i=t._fullLayout,a=t._fullData,l=t.data,u=i._guiEditing,d=N(i._preGUI,u),v=o.extendDeepAll({},e);V(e);var g,y=A.traceFlags(),m={},x={};function b(){return r.map((function(){}))}function _(t){var e=p.id2name(t);-1===g.indexOf(e)&&g.push(e)}function w(t){return"LAYOUT"+t+".autorange"}function k(t){return"LAYOUT"+t+".range"}function M(t){for(var e=t;e<a.length;e++)if(a[e]._input===l[t])return a[e]}function S(n,a,o){if(Array.isArray(n))n.forEach((function(t){S(t,a,o)}));else if(!(n in e)&&!T.hasParent(e,n)){var s;if("LAYOUT"===n.substr(0,6))s=d(t.layout,n.replace("LAYOUT",""));else{var c=r[o];s=N(i._tracePreGUI[M(c)._fullInput.uid],u)(l[c],n)}n in x||(x[n]=b()),void 0===x[n][o]&&(x[n][o]=B(s.get())),void 0!==a&&s.set(a)}}function E(t){return function(e){return a[e][t]}}function L(t){return function(e,n){return!1===e?a[r[n]][t]:null}}for(var C in e){if(T.hasParent(e,C))throw new Error("cannot set "+C+" and a parent attribute simultaneously");var P,O,I,D,z,R,F=e[C];if("autobinx"!==C&&"autobiny"!==C||(C=C.charAt(C.length-1)+"bins",F=Array.isArray(F)?F.map(L(C)):!1===F?r.map(E(C)):null),m[C]=F,"LAYOUT"!==C.substr(0,6)){for(x[C]=b(),n=0;n<r.length;n++)if(P=l[r[n]],O=M(r[n]),D=(I=N(i._tracePreGUI[O._fullInput.uid],u)(P,C)).get(),void 0!==(z=Array.isArray(F)?F[n%F.length]:F)){var j=I.parts[I.parts.length-1],U=C.substr(0,C.length-j.length-1),H=U?U+".":"",q=U?s(O,U).get():O;if((R=f.getTraceValObject(O,I.parts))&&R.impliedEdits&&null!==z)for(var G in R.impliedEdits)S(o.relativeAttr(C,G),R.impliedEdits[G],n);else if("thicknessmode"!==j&&"lenmode"!==j||D===z||"fraction"!==z&&"pixels"!==z||!q){if("type"===C&&("pie"===z!=("pie"===D)||"funnelarea"===z!=("funnelarea"===D))){var Z="x",Y="y";"bar"!==z&&"bar"!==D||"h"!==P.orientation||(Z="y",Y="x"),o.swapAttrs(P,["?","?src"],"labels",Z),o.swapAttrs(P,["d?","?0"],"label",Z),o.swapAttrs(P,["?","?src"],"values",Y),"pie"===D||"funnelarea"===D?(s(P,"marker.color").set(s(P,"marker.colors").get()),i._pielayer.selectAll("g.trace").remove()):c.traceIs(P,"cartesian")&&s(P,"marker.colors").set(s(P,"marker.color").get())}}else{var W=i._size,X=q.orient,J="top"===X||"bottom"===X;if("thicknessmode"===j){var K=J?W.h:W.w;S(H+"thickness",q.thickness*("fraction"===z?1/K:K),n)}else{var $=J?W.w:W.h;S(H+"len",q.len*("fraction"===z?1/$:$),n)}}if(x[C][n]=B(D),-1!==["swapxy","swapxyaxes","orientation","orientationaxes"].indexOf(C)){if("orientation"===C){I.set(z);var Q=P.x&&!P.y?"h":"v";if((I.get()||Q)===O.orientation)continue}else"orientationaxes"===C&&(P.orientation={v:"h",h:"v"}[O.orientation]);T.swapXYData(P),y.calc=y.clearAxisTypes=!0}else-1!==h.dataArrayContainers.indexOf(I.parts[0])?(T.manageArrayContainers(I,z,x),y.calc=!0):(R?R.arrayOk&&!c.traceIs(O,"regl")&&(o.isArrayOrTypedArray(z)||o.isArrayOrTypedArray(D))?y.calc=!0:A.update(y,R):y.calc=!0,I.set(z))}if(-1!==["swapxyaxes","orientationaxes"].indexOf(C)&&p.swap(t,r),"orientationaxes"===C){var tt=s(t.layout,"hovermode"),et=tt.get();"x"===et?tt.set("y"):"y"===et?tt.set("x"):"x unified"===et?tt.set("y unified"):"y unified"===et&&tt.set("x unified")}if(-1!==["orientation","type"].indexOf(C)){for(g=[],n=0;n<r.length;n++){var rt=l[r[n]];c.traceIs(rt,"cartesian")&&(_(rt.xaxis||"x"),_(rt.yaxis||"y"))}S(g.map(w),!0,0),S(g.map(k),[0,1],0)}}else I=d(t.layout,C.replace("LAYOUT","")),x[C]=[B(I.get())],I.set(Array.isArray(F)?F[0]:F),y.calc=!0}return(y.calc||y.plot)&&(y.fullReplot=!0),{flags:y,undoit:x,redoit:m,traces:r,eventData:o.extendDeepNoArrays([],[v,r])}}function V(t){var e,r,n,i=o.counterRegex("axis",".title",!1,!1),a=/colorbar\.title$/,s=Object.keys(t);for(e=0;e<s.length;e++)r=s[e],n=t[r],"title"!==r&&!i.test(r)&&!a.test(r)||"string"!=typeof n&&"number"!=typeof n?r.indexOf("titlefont")>-1&&-1===r.indexOf("grouptitlefont")?l(r,r.replace("titlefont","title.font")):r.indexOf("titleposition")>-1?l(r,r.replace("titleposition","title.position")):r.indexOf("titleside")>-1?l(r,r.replace("titleside","title.side")):r.indexOf("titleoffset")>-1&&l(r,r.replace("titleoffset","title.offset")):l(r,r.replace("title","title.text"));function l(e,r){t[r]=t[e],delete t[e]}}function H(t,e,r){t=o.getGraphDiv(t),T.clearPromiseQueue(t);var n={};if("string"==typeof e)n[e]=r;else{if(!o.isPlainObject(e))return o.warn("Relayout fail.",e,r),Promise.reject();n=o.extendFlat({},e)}Object.keys(n).length&&(t.changed=!0);var i=X(t,n),a=i.flags;a.calc&&(t.calcdata=void 0);var s=[h.previousPromises];a.layoutReplot?s.push(k.layoutReplot):Object.keys(n).length&&(q(t,a,i)||h.supplyDefaults(t),a.legend&&s.push(k.doLegend),a.layoutstyle&&s.push(k.layoutStyles),a.axrange&&G(s,i.rangesAltered),a.ticks&&s.push(k.doTicksRelayout),a.modebar&&s.push(k.doModeBar),a.camera&&s.push(k.doCamera),a.colorbars&&s.push(k.doColorBars),s.push(E)),s.push(h.rehover,h.redrag,h.reselect),u.add(t,H,[t,i.undoit],H,[t,i.redoit]);var l=o.syncOrAsync(s,t);return l&&l.then||(l=Promise.resolve(t)),l.then((function(){return t.emit("plotly_relayout",i.eventData),t}))}function q(t,e,r){var n,i,a=t._fullLayout;if(!e.axrange)return!1;for(var s in e)if("axrange"!==s&&e[s])return!1;var l=function(t,e){return o.coerce(n,i,v,t,e)},u={};for(var c in r.rangesAltered){var f=p.id2name(c);if(n=t.layout[f],i=a[f],d(n,i,l,u),i._matchGroup)for(var h in i._matchGroup)if(h!==c){var g=a[p.id2name(h)];g.autorange=i.autorange,g.range=i.range.slice(),g._input.range=i.range.slice()}}return!0}function G(t,e){var r=e?function(t){var r=[];for(var n in e){var i=p.getFromId(t,n);if(r.push(n),-1!==(i.ticklabelposition||"").indexOf("inside")&&i._anchorAxis&&r.push(i._anchorAxis._id),i._matchGroup)for(var a in i._matchGroup)e[a]||r.push(a)}return p.draw(t,r,{skipTitle:!0})}:function(t){return p.draw(t,"redraw")};t.push(b,k.doAutoRangeAndConstraints,r,k.drawData,k.finalDraw)}var Z=/^[xyz]axis[0-9]*\.range(\[[0|1]\])?$/,Y=/^[xyz]axis[0-9]*\.autorange$/,W=/^[xyz]axis[0-9]*\.domain(\[[0|1]\])?$/;function X(t,e){var r,n,i,a=t.layout,l=t._fullLayout,u=l._guiEditing,h=N(l._preGUI,u),d=Object.keys(e),v=p.list(t),g=o.extendDeepAll({},e),y={};for(V(e),d=Object.keys(e),n=0;n<d.length;n++)if(0===d[n].indexOf("allaxes")){for(i=0;i<v.length;i++){var m=v[i]._id.substr(1),x=-1!==m.indexOf("scene")?m+".":"",b=d[n].replace("allaxes",x+v[i]._name);e[b]||(e[b]=e[d[n]])}delete e[d[n]]}var _=A.layoutFlags(),k={},S={};function E(t,r){if(Array.isArray(t))t.forEach((function(t){E(t,r)}));else if(!(t in e)&&!T.hasParent(e,t)){var n=h(a,t);t in S||(S[t]=B(n.get())),void 0!==r&&n.set(r)}}var L,C={};function P(t){var e=p.name2id(t.split(".")[0]);return C[e]=1,e}for(var O in e){if(T.hasParent(e,O))throw new Error("cannot set "+O+" and a parent attribute simultaneously");for(var I=h(a,O),D=e[O],z=I.parts.length-1;z>0&&"string"!=typeof I.parts[z];)z--;var R=I.parts[z],F=I.parts[z-1]+"."+R,j=I.parts.slice(0,z).join("."),U=s(t.layout,j).get(),H=s(l,j).get(),q=I.get();if(void 0!==D){k[O]=D,S[O]="reverse"===R?D:B(q);var G=f.getLayoutValObject(l,I.parts);if(G&&G.impliedEdits&&null!==D)for(var X in G.impliedEdits)E(o.relativeAttr(O,X),G.impliedEdits[X]);if(-1!==["width","height"].indexOf(O))if(D){E("autosize",null);var K="height"===O?"width":"height";E(K,l[K])}else l[O]=t._initialAutoSize[O];else if("autosize"===O)E("width",D?null:l.width),E("height",D?null:l.height);else if(F.match(Z))P(F),s(l,j+"._inputRange").set(null);else if(F.match(Y)){P(F),s(l,j+"._inputRange").set(null);var $=s(l,j).get();$._inputDomain&&($._input.domain=$._inputDomain.slice())}else F.match(W)&&s(l,j+"._inputDomain").set(null);if("type"===R){L=U;var Q="linear"===H.type&&"log"===D,tt="log"===H.type&&"linear"===D;if(Q||tt){if(L&&L.range)if(H.autorange)Q&&(L.range=L.range[1]>L.range[0]?[1,2]:[2,1]);else{var et=L.range[0],rt=L.range[1];Q?(et<=0&&rt<=0&&E(j+".autorange",!0),et<=0?et=rt/1e6:rt<=0&&(rt=et/1e6),E(j+".range[0]",Math.log(et)/Math.LN10),E(j+".range[1]",Math.log(rt)/Math.LN10)):(E(j+".range[0]",Math.pow(10,et)),E(j+".range[1]",Math.pow(10,rt)))}else E(j+".autorange",!0);Array.isArray(l._subplots.polar)&&l._subplots.polar.length&&l[I.parts[0]]&&"radialaxis"===I.parts[1]&&delete l[I.parts[0]]._subplot.viewInitial["radialaxis.range"],c.getComponentMethod("annotations","convertCoords")(t,H,D,E),c.getComponentMethod("images","convertCoords")(t,H,D,E)}else E(j+".autorange",!0),E(j+".range",null);s(l,j+"._inputRange").set(null)}else if(R.match(M)){var nt=s(l,O).get(),it=(D||{}).type;it&&"-"!==it||(it="linear"),c.getComponentMethod("annotations","convertCoords")(t,nt,it,E),c.getComponentMethod("images","convertCoords")(t,nt,it,E)}var at=w.containerArrayMatch(O);if(at){r=at.array,n=at.index;var ot=at.property,st=G||{editType:"calc"};""!==n&&""===ot&&(w.isAddVal(D)?S[O]=null:w.isRemoveVal(D)?S[O]=(s(a,r).get()||[])[n]:o.warn("unrecognized full object value",e)),A.update(_,st),y[r]||(y[r]={});var lt=y[r][n];lt||(lt=y[r][n]={}),lt[ot]=D,delete e[O]}else"reverse"===R?(U.range?U.range.reverse():(E(j+".autorange",!0),U.range=[1,0]),H.autorange?_.calc=!0:_.plot=!0):("dragmode"===O&&(!1===D&&!1!==q||!1!==D&&!1===q)||l._has("scatter-like")&&l._has("regl")&&"dragmode"===O&&("lasso"===D||"select"===D)&&"lasso"!==q&&"select"!==q||l._has("gl2d")?_.plot=!0:G?A.update(_,G):_.calc=!0,I.set(D))}}for(r in y)w.applyContainerArrayChanges(t,h(a,r),y[r],_,h)||(_.plot=!0);for(var ut in C){var ct=(L=p.getFromId(t,ut))&&L._constraintGroup;if(ct)for(var ft in _.calc=!0,ct)C[ft]||(p.getFromId(t,ft)._constraintShrinkable=!0)}(J(t)||e.height||e.width)&&(_.plot=!0);var ht=l.shapes;for(n=0;n<ht.length;n++)if(ht[n].showlegend){_.calc=!0;break}return(_.plot||_.calc)&&(_.layoutReplot=!0),{flags:_,rangesAltered:C,undoit:S,redoit:k,eventData:g}}function J(t){var e=t._fullLayout,r=e.width,n=e.height;return t.layout.autosize&&h.plotAutoSize(t,t.layout,e),e.width!==r||e.height!==n}function K(t,r,n,i){t=o.getGraphDiv(t),T.clearPromiseQueue(t),o.isPlainObject(r)||(r={}),o.isPlainObject(n)||(n={}),Object.keys(r).length&&(t.changed=!0),Object.keys(n).length&&(t.changed=!0);var a=T.coerceTraceIndices(t,i),s=U(t,o.extendFlat({},r),a),l=s.flags,c=X(t,o.extendFlat({},n)),f=c.flags;(l.calc||f.calc)&&(t.calcdata=void 0),l.clearAxisTypes&&T.clearAxisTypes(t,a,n);var p=[];f.layoutReplot?p.push(k.layoutReplot):l.fullReplot?p.push(e._doPlot):(p.push(h.previousPromises),q(t,f,c)||h.supplyDefaults(t),l.style&&p.push(k.doTraceStyle),(l.colorbars||f.colorbars)&&p.push(k.doColorBars),f.legend&&p.push(k.doLegend),f.layoutstyle&&p.push(k.layoutStyles),f.axrange&&G(p,c.rangesAltered),f.ticks&&p.push(k.doTicksRelayout),f.modebar&&p.push(k.doModeBar),f.camera&&p.push(k.doCamera),p.push(E)),p.push(h.rehover,h.redrag,h.reselect),u.add(t,K,[t,s.undoit,c.undoit,s.traces],K,[t,s.redoit,c.redoit,s.traces]);var d=o.syncOrAsync(p,t);return d&&d.then||(d=Promise.resolve(t)),d.then((function(){return t.emit("plotly_update",{data:s.eventData,layout:c.eventData}),t}))}function $(t){return function(e){e._fullLayout._guiEditing=!0;var r=t.apply(null,arguments);return e._fullLayout._guiEditing=!1,r}}var Q=[{pattern:/^hiddenlabels/,attr:"legend.uirevision"},{pattern:/^((x|y)axis\d*)\.((auto)?range|title\.text)/},{pattern:/axis\d*\.showspikes$/,attr:"modebar.uirevision"},{pattern:/(hover|drag)mode$/,attr:"modebar.uirevision"},{pattern:/^(scene\d*)\.camera/},{pattern:/^(geo\d*)\.(projection|center|fitbounds)/},{pattern:/^(ternary\d*\.[abc]axis)\.(min|title\.text)$/},{pattern:/^(polar\d*\.radialaxis)\.((auto)?range|angle|title\.text)/},{pattern:/^(polar\d*\.angularaxis)\.rotation/},{pattern:/^(mapbox\d*)\.(center|zoom|bearing|pitch)/},{pattern:/^legend\.(x|y)$/,attr:"editrevision"},{pattern:/^(shapes|annotations)/,attr:"editrevision"},{pattern:/^title\.text$/,attr:"editrevision"}],tt=[{pattern:/^selectedpoints$/,attr:"selectionrevision"},{pattern:/(^|value\.)visible$/,attr:"legend.uirevision"},{pattern:/^dimensions\[\d+\]\.constraintrange/},{pattern:/^node\.(x|y|groups)/},{pattern:/^level$/},{pattern:/(^|value\.)name$/},{pattern:/colorbar\.title\.text$/},{pattern:/colorbar\.(x|y)$/,attr:"editrevision"}];function et(t,e){for(var r=0;r<e.length;r++){var n=e[r],i=t.match(n.pattern);if(i){var a=i[1]||"";return{head:a,tail:t.substr(a.length+1),attr:n.attr}}}}function rt(t,e){var r=s(e,t).get();if(void 0!==r)return r;var n=t.split(".");for(n.pop();n.length>1;)if(n.pop(),void 0!==(r=s(e,n.join(".")+".uirevision").get()))return r;return e.uirevision}function nt(t,e){for(var r=0;r<e.length;r++)if(e[r]._fullInput.uid===t)return r;return-1}function it(t,e,r){for(var n=0;n<e.length;n++)if(e[n].uid===t)return n;return!e[r]||e[r].uid?-1:r}function at(t,e){var r=o.isPlainObject(t),n=Array.isArray(t);return r||n?(r&&o.isPlainObject(e)||n&&Array.isArray(e))&&JSON.stringify(t)===JSON.stringify(e):t===e}function ot(t,e,r,n){var i,a,l,u=n.getValObject,c=n.flags,f=n.immutable,h=n.inArray,p=n.arrayIndex;function d(){var t=i.editType;h&&-1!==t.indexOf("arraydraw")?o.pushUnique(c.arrays[h],p):(A.update(c,i),"none"!==t&&c.nChanges++,n.transition&&i.anim&&c.nChangesAnim++,(Z.test(l)||Y.test(l))&&(c.rangesAltered[r[0]]=1),W.test(l)&&s(e,"_inputDomain").set(null),"datarevision"===a&&(c.newDataRevision=1))}function v(t){return"data_array"===t.valType||t.arrayOk}for(a in t){if(c.calc&&!n.transition)return;var g=t[a],y=e[a],m=r.concat(a);if(l=m.join("."),"_"!==a.charAt(0)&&"function"!=typeof g&&g!==y){if(("tick0"===a||"dtick"===a)&&"geo"!==r[0]){var x=e.tickmode;if("auto"===x||"array"===x||!x)continue}if(("range"!==a||!e.autorange)&&("zmin"!==a&&"zmax"!==a||"contourcarpet"!==e.type)&&(i=u(m))&&(!i._compareAsJSON||JSON.stringify(g)!==JSON.stringify(y))){var b,_=i.valType,w=v(i),T=Array.isArray(g),k=Array.isArray(y);if(T&&k){var M="_input_"+a,S=t[M],E=e[M];if(Array.isArray(S)&&S===E)continue}if(void 0===y)w&&T?c.calc=!0:d();else if(i._isLinkedToArray){var L=[],C=!1;h||(c.arrays[a]=L);var P=Math.min(g.length,y.length),O=Math.max(g.length,y.length);if(P!==O){if("arraydraw"!==i.editType){d();continue}C=!0}for(b=0;b<P;b++)ot(g[b],y[b],m.concat(b),o.extendFlat({inArray:a,arrayIndex:b},n));if(C)for(b=P;b<O;b++)L.push(b)}else!_&&o.isPlainObject(g)?ot(g,y,m,n):w?T&&k?(f&&(c.calc=!0),(f||n.newDataRevision)&&d()):T!==k?c.calc=!0:d():T&&k&&g.length===y.length&&String(g)===String(y)||d()}}}for(a in e)if(!(a in t)&&"_"!==a.charAt(0)&&"function"!=typeof e[a]){if(v(i=u(r.concat(a)))&&Array.isArray(e[a]))return void(c.calc=!0);d()}}function st(t,e){var r;for(r in t)if("_"!==r.charAt(0)){var n=t[r],i=e[r];if(n!==i)if(o.isPlainObject(n)&&o.isPlainObject(i)){if(st(n,i))return!0}else{if(!Array.isArray(n)||!Array.isArray(i))return!0;if(n.length!==i.length)return!0;for(var a=0;a<n.length;a++)if(n[a]!==i[a]){if(!o.isPlainObject(n[a])||!o.isPlainObject(i[a]))return!0;if(st(n[a],i[a]))return!0}}}}function lt(t){var e=t._fullLayout,r=t.getBoundingClientRect();if(!o.equalDomRects(r,e._lastBBox)){var n=e._invTransform=o.inverseTransformMatrix(o.getFullTransformMatrix(t));e._invScaleX=Math.sqrt(n[0][0]*n[0][0]+n[0][1]*n[0][1]+n[0][2]*n[0][2]),e._invScaleY=Math.sqrt(n[1][0]*n[1][0]+n[1][1]*n[1][1]+n[1][2]*n[1][2]),e._lastBBox=r}}e.animate=function(t,e,r){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error("This element is not a Plotly plot: "+t+". It's likely that you've failed to create a plot before animating it. For more details, see https://plotly.com/javascript/animations/");var n=t._transitionData;n._frameQueue||(n._frameQueue=[]);var i=(r=h.supplyAnimationDefaults(r)).transition,a=r.frame;function s(t){return Array.isArray(i)?t>=i.length?i[0]:i[t]:i}function l(t){return Array.isArray(a)?t>=a.length?a[0]:a[t]:a}function u(t,e){var r=0;return function(){if(t&&++r===e)return t()}}return void 0===n._frameWaitingCnt&&(n._frameWaitingCnt=0),new Promise((function(a,c){function f(){t.emit("plotly_animating"),n._lastFrameAt=-1/0,n._timeToNext=0,n._runningTransitions=0,n._currentFrame=null;var e=function(){n._animationRaf=window.requestAnimationFrame(e),Date.now()-n._lastFrameAt>n._timeToNext&&function(){n._currentFrame&&n._currentFrame.onComplete&&n._currentFrame.onComplete();var e=n._currentFrame=n._frameQueue.shift();if(e){var r=e.name?e.name.toString():null;t._fullLayout._currentFrame=r,n._lastFrameAt=Date.now(),n._timeToNext=e.frameOpts.duration,h.transition(t,e.frame.data,e.frame.layout,T.coerceTraceIndices(t,e.frame.traces),e.frameOpts,e.transitionOpts).then((function(){e.onComplete&&e.onComplete()})),t.emit("plotly_animatingframe",{name:r,frame:e.frame,animation:{frame:e.frameOpts,transition:e.transitionOpts}})}else t.emit("plotly_animated"),window.cancelAnimationFrame(n._animationRaf),n._animationRaf=null}()};e()}var p,d,v=0;function g(t){return Array.isArray(i)?v>=i.length?t.transitionOpts=i[v]:t.transitionOpts=i[0]:t.transitionOpts=i,v++,t}var y=[],m=null==e,x=Array.isArray(e);if(m||x||!o.isPlainObject(e)){if(m||-1!==["string","number"].indexOf(typeof e))for(p=0;p<n._frames.length;p++)(d=n._frames[p])&&(m||String(d.group)===String(e))&&y.push({type:"byname",name:String(d.name),data:g({name:d.name})});else if(x)for(p=0;p<e.length;p++){var b=e[p];-1!==["number","string"].indexOf(typeof b)?(b=String(b),y.push({type:"byname",name:b,data:g({name:b})})):o.isPlainObject(b)&&y.push({type:"object",data:g(o.extendFlat({},b))})}}else y.push({type:"object",data:g(o.extendFlat({},e))});for(p=0;p<y.length;p++)if("byname"===(d=y[p]).type&&!n._frameHash[d.data.name])return o.warn('animate failure: frame not found: "'+d.data.name+'"'),void c();-1!==["next","immediate"].indexOf(r.mode)&&function(){if(0!==n._frameQueue.length){for(;n._frameQueue.length;){var e=n._frameQueue.pop();e.onInterrupt&&e.onInterrupt()}t.emit("plotly_animationinterrupted",[])}}(),"reverse"===r.direction&&y.reverse();var _=t._fullLayout._currentFrame;if(_&&r.fromcurrent){var w=-1;for(p=0;p<y.length;p++)if("byname"===(d=y[p]).type&&d.name===_){w=p;break}if(w>0&&w<y.length-1){var k=[];for(p=0;p<y.length;p++)d=y[p],("byname"!==y[p].type||p>w)&&k.push(d);y=k}}y.length>0?function(e){if(0!==e.length){for(var i=0;i<e.length;i++){var o;o="byname"===e[i].type?h.computeFrame(t,e[i].name):e[i].data;var p=l(i),d=s(i);d.duration=Math.min(d.duration,p.duration);var v={frame:o,name:e[i].name,frameOpts:p,transitionOpts:d};i===e.length-1&&(v.onComplete=u(a,2),v.onInterrupt=c),n._frameQueue.push(v)}"immediate"===r.mode&&(n._lastFrameAt=-1/0),n._animationRaf||f()}}(y):(t.emit("plotly_animated"),a())}))},e.addFrames=function(t,e,r){if(t=o.getGraphDiv(t),null==e)return Promise.resolve();if(!o.isPlotDiv(t))throw new Error("This element is not a Plotly plot: "+t+". It's likely that you've failed to create a plot before adding frames. For more details, see https://plotly.com/javascript/animations/");var n,i,a,s,l=t._transitionData._frames,c=t._transitionData._frameHash;if(!Array.isArray(e))throw new Error("addFrames failure: frameList must be an Array of frame definitions"+e);var f=l.length+2*e.length,p=[],d={};for(n=e.length-1;n>=0;n--)if(o.isPlainObject(e[n])){var v=e[n].name,g=(c[v]||d[v]||{}).name,y=e[n].name,m=c[g]||d[g];g&&y&&"number"==typeof y&&m&&S<5&&(S++,o.warn('addFrames: overwriting frame "'+(c[g]||d[g]).name+'" with a frame whose name of type "number" also equates to "'+g+'". This is valid but may potentially lead to unexpected behavior since all plotly.js frame names are stored internally as strings.'),5===S&&o.warn("addFrames: This API call has yielded too many of these warnings. For the rest of this call, further warnings about numeric frame names will be suppressed.")),d[v]={name:v},p.push({frame:h.supplyFrameDefaults(e[n]),index:r&&void 0!==r[n]&&null!==r[n]?r[n]:f+n})}p.sort((function(t,e){return t.index>e.index?-1:t.index<e.index?1:0}));var x=[],b=[],_=l.length;for(n=p.length-1;n>=0;n--){if("number"==typeof(i=p[n].frame).name&&o.warn("Warning: addFrames accepts frames with numeric names, but the numbers areimplicitly cast to strings"),!i.name)for(;c[i.name="frame "+t._transitionData._counter++];);if(c[i.name]){for(a=0;a<l.length&&(l[a]||{}).name!==i.name;a++);x.push({type:"replace",index:a,value:i}),b.unshift({type:"replace",index:a,value:l[a]})}else s=Math.max(0,Math.min(p[n].index,_)),x.push({type:"insert",index:s,value:i}),b.unshift({type:"delete",index:s}),_++}var w=h.modifyFrames,T=h.modifyFrames,k=[t,b],A=[t,x];return u&&u.add(t,w,k,T,A),h.modifyFrames(t,x)},e.deleteFrames=function(t,e){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error("This element is not a Plotly plot: "+t);var r,n,i=t._transitionData._frames,a=[],s=[];if(!e)for(e=[],r=0;r<i.length;r++)e.push(r);for((e=e.slice()).sort(),r=e.length-1;r>=0;r--)n=e[r],a.push({type:"delete",index:n}),s.unshift({type:"insert",index:n,value:i[n]});var l=h.modifyFrames,c=h.modifyFrames,f=[t,s],p=[t,a];return u&&u.add(t,l,f,c,p),h.modifyFrames(t,a)},e.addTraces=function t(r,n,i){r=o.getGraphDiv(r);var a,s,l=[],c=e.deleteTraces,f=t,h=[r,l],p=[r,n];for(function(t,e,r){var n,i;if(!Array.isArray(t.data))throw new Error("gd.data must be an array.");if(void 0===e)throw new Error("traces must be defined.");for(Array.isArray(e)||(e=[e]),n=0;n<e.length;n++)if("object"!=typeof(i=e[n])||Array.isArray(i)||null===i)throw new Error("all values in traces array must be non-array objects");if(void 0===r||Array.isArray(r)||(r=[r]),void 0!==r&&r.length!==e.length)throw new Error("if indices is specified, traces.length must equal indices.length")}(r,n,i),Array.isArray(n)||(n=[n]),n=n.map((function(t){return o.extendFlat({},t)})),T.cleanData(n),a=0;a<n.length;a++)r.data.push(n[a]);for(a=0;a<n.length;a++)l.push(-n.length+a);if(void 0===i)return s=e.redraw(r),u.add(r,c,h,f,p),s;Array.isArray(i)||(i=[i]);try{D(r,l,i)}catch(t){throw r.data.splice(r.data.length-n.length,n.length),t}return u.startSequence(r),u.add(r,c,h,f,p),s=e.moveTraces(r,l,i),u.stopSequence(r),s},e.deleteTraces=function t(r,n){r=o.getGraphDiv(r);var i,a,s=[],l=e.addTraces,c=t,f=[r,s,n],h=[r,n];if(void 0===n)throw new Error("indices must be an integer or array of integers.");for(Array.isArray(n)||(n=[n]),I(r,n,"indices"),(n=O(n,r.data.length-1)).sort(o.sorterDes),i=0;i<n.length;i+=1)a=r.data.splice(n[i],1)[0],s.push(a);var p=e.redraw(r);return u.add(r,l,f,c,h),p},e.extendTraces=function t(r,n,i,a){var s=z(r=o.getGraphDiv(r),n,i,a,(function(t,e,r){var n,i;if(o.isTypedArray(t))if(r<0){var a=new t.constructor(0),s=R(t,e);r<0?(n=s,i=a):(n=a,i=s)}else if(n=new t.constructor(r),i=new t.constructor(t.length+e.length-r),r===e.length)n.set(e),i.set(t);else if(r<e.length){var l=e.length-r;n.set(e.subarray(l)),i.set(t),i.set(e.subarray(0,l),t.length)}else{var u=r-e.length,c=t.length-u;n.set(t.subarray(c)),n.set(e,u),i.set(t.subarray(0,c))}else n=t.concat(e),i=r>=0&&r<n.length?n.splice(0,n.length-r):[];return[n,i]})),l=e.redraw(r),c=[r,s.update,i,s.maxPoints];return u.add(r,e.prependTraces,c,t,arguments),l},e.moveTraces=function t(r,n,i){var a,s=[],l=[],c=t,f=t,h=[r=o.getGraphDiv(r),i,n],p=[r,n,i];if(D(r,n,i),n=Array.isArray(n)?n:[n],void 0===i)for(i=[],a=0;a<n.length;a++)i.push(-n.length+a);for(i=Array.isArray(i)?i:[i],n=O(n,r.data.length-1),i=O(i,r.data.length-1),a=0;a<r.data.length;a++)-1===n.indexOf(a)&&s.push(r.data[a]);for(a=0;a<n.length;a++)l.push({newIndex:i[a],trace:r.data[n[a]]});for(l.sort((function(t,e){return t.newIndex-e.newIndex})),a=0;a<l.length;a+=1)s.splice(l[a].newIndex,0,l[a].trace);r.data=s;var d=e.redraw(r);return u.add(r,c,h,f,p),d},e.prependTraces=function t(r,n,i,a){var s=z(r=o.getGraphDiv(r),n,i,a,(function(t,e,r){var n,i;if(o.isTypedArray(t))if(r<=0){var a=new t.constructor(0),s=R(e,t);r<0?(n=s,i=a):(n=a,i=s)}else if(n=new t.constructor(r),i=new t.constructor(t.length+e.length-r),r===e.length)n.set(e),i.set(t);else if(r<e.length){var l=e.length-r;n.set(e.subarray(0,l)),i.set(e.subarray(l)),i.set(t,l)}else{var u=r-e.length;n.set(e),n.set(t.subarray(0,u),e.length),i.set(t.subarray(u))}else n=e.concat(t),i=r>=0&&r<n.length?n.splice(r,n.length):[];return[n,i]})),l=e.redraw(r),c=[r,s.update,i,s.maxPoints];return u.add(r,e.extendTraces,c,t,arguments),l},e.newPlot=function(t,r,n,i){return t=o.getGraphDiv(t),h.cleanPlot([],{},t._fullData||[],t._fullLayout||{}),h.purge(t),e._doPlot(t,r,n,i)},e._doPlot=function(t,r,i,a){var s;if(t=o.getGraphDiv(t),l.init(t),o.isPlainObject(r)){var u=r;r=u.data,i=u.layout,a=u.config,s=u.frames}if(!1===l.triggerHandler(t,"plotly_beforeplot",[r,i,a]))return Promise.reject();r||i||o.isPlotDiv(t)||o.warn("Calling _doPlot as if redrawing but this container doesn't yet have a plot.",t),P(t,a),i||(i={}),n.select(t).classed("js-plotly-plot",!0),g.makeTester(),Array.isArray(t._promises)||(t._promises=[]);var f=0===(t.data||[]).length&&Array.isArray(r);Array.isArray(r)&&(T.cleanData(r),f?t.data=r:t.data.push.apply(t.data,r),t.empty=!1),t.layout&&!f||(t.layout=T.cleanLayout(i)),h.supplyDefaults(t);var d=t._fullLayout,v=d._has("cartesian");d._replotting=!0,(f||d._shouldCreateBgLayer)&&(function(t){var e=n.select(t),r=t._fullLayout;if(r._calcInverseTransform=lt,r._calcInverseTransform(t),r._container=e.selectAll(".plot-container").data([0]),r._container.enter().insert("div",":first-child").classed("plot-container",!0).classed("plotly",!0),r._paperdiv=r._container.selectAll(".svg-container").data([0]),r._paperdiv.enter().append("div").classed("user-select-none",!0).classed("svg-container",!0).style("position","relative"),r._glcontainer=r._paperdiv.selectAll(".gl-container").data([{}]),r._glcontainer.enter().append("div").classed("gl-container",!0),r._paperdiv.selectAll(".main-svg").remove(),r._paperdiv.select(".modebar-container").remove(),r._paper=r._paperdiv.insert("svg",":first-child").classed("main-svg",!0),r._toppaper=r._paperdiv.append("svg").classed("main-svg",!0),r._modebardiv=r._paperdiv.append("div"),delete r._modeBar,r._hoverpaper=r._paperdiv.append("svg").classed("main-svg",!0),!r._uid){var i={};n.selectAll("defs").each((function(){this.id&&(i[this.id.split("-")[1]]=1)})),r._uid=o.randstr(i)}r._paperdiv.selectAll(".main-svg").attr(x.svgAttrs),r._defs=r._paper.append("defs").attr("id","defs-"+r._uid),r._clips=r._defs.append("g").classed("clips",!0),r._topdefs=r._toppaper.append("defs").attr("id","topdefs-"+r._uid),r._topclips=r._topdefs.append("g").classed("clips",!0),r._bgLayer=r._paper.append("g").classed("bglayer",!0),r._draggers=r._paper.append("g").classed("draglayer",!0);var a=r._paper.append("g").classed("layer-below",!0);r._imageLowerLayer=a.append("g").classed("imagelayer",!0),r._shapeLowerLayer=a.append("g").classed("shapelayer",!0),r._cartesianlayer=r._paper.append("g").classed("cartesianlayer",!0),r._polarlayer=r._paper.append("g").classed("polarlayer",!0),r._smithlayer=r._paper.append("g").classed("smithlayer",!0),r._ternarylayer=r._paper.append("g").classed("ternarylayer",!0),r._geolayer=r._paper.append("g").classed("geolayer",!0),r._funnelarealayer=r._paper.append("g").classed("funnelarealayer",!0),r._pielayer=r._paper.append("g").classed("pielayer",!0),r._iciclelayer=r._paper.append("g").classed("iciclelayer",!0),r._treemaplayer=r._paper.append("g").classed("treemaplayer",!0),r._sunburstlayer=r._paper.append("g").classed("sunburstlayer",!0),r._indicatorlayer=r._toppaper.append("g").classed("indicatorlayer",!0),r._glimages=r._paper.append("g").classed("glimages",!0);var s=r._toppaper.append("g").classed("layer-above",!0);r._imageUpperLayer=s.append("g").classed("imagelayer",!0),r._shapeUpperLayer=s.append("g").classed("shapelayer",!0),r._selectionLayer=r._toppaper.append("g").classed("selectionlayer",!0),r._infolayer=r._toppaper.append("g").classed("infolayer",!0),r._menulayer=r._toppaper.append("g").classed("menulayer",!0),r._zoomlayer=r._toppaper.append("g").classed("zoomlayer",!0),r._hoverlayer=r._hoverpaper.append("g").classed("hoverlayer",!0),r._modebardiv.classed("modebar-container",!0).style("position","absolute").style("top","0px").style("right","0px"),t.emit("plotly_framework")}(t),d._shouldCreateBgLayer&&delete d._shouldCreateBgLayer),g.initGradients(t),g.initPatterns(t),f&&p.saveShowSpikeInitial(t);var y=!t.calcdata||t.calcdata.length!==(t._fullData||[]).length;y&&h.doCalcdata(t);for(var b=0;b<t.calcdata.length;b++)t.calcdata[b][0].trace=t._fullData[b];t._context.responsive?t._responsiveChartHandler||(t._responsiveChartHandler=function(){o.isHidden(t)||h.resize(t)},window.addEventListener("resize",t._responsiveChartHandler)):o.clearResponsive(t);var _=o.extendFlat({},d._size),w=0;function A(){if(h.clearAutoMarginIds(t),k.drawMarginPushers(t),p.allowAutoMargin(t),t._fullLayout.title.text&&t._fullLayout.title.automargin&&h.allowAutoMargin(t,"title.automargin"),d._has("pie"))for(var e=t._fullData,r=0;r<e.length;r++){var n=e[r];"pie"===n.type&&n.automargin&&h.allowAutoMargin(t,"pie."+n.uid+".automargin")}return h.doAutoMargin(t),h.previousPromises(t)}function M(){t._transitioning||(k.doAutoRangeAndConstraints(t),f&&p.saveRangeInitial(t),c.getComponentMethod("rangeslider","calcAutorange")(t))}var S=[h.previousPromises,function(){if(s)return e.addFrames(t,s)},function e(){for(var r=d._basePlotModules,n=0;n<r.length;n++)r[n].drawFramework&&r[n].drawFramework(t);!d._glcanvas&&d._has("gl")&&(d._glcanvas=d._glcontainer.selectAll(".gl-canvas").data([{key:"contextLayer",context:!0,pick:!1},{key:"focusLayer",context:!1,pick:!1},{key:"pickLayer",context:!1,pick:!0}],(function(t){return t.key})),d._glcanvas.enter().append("canvas").attr("class",(function(t){return"gl-canvas gl-canvas-"+t.key.replace("Layer","")})).style({position:"absolute",top:0,left:0,overflow:"visible","pointer-events":"none"}));var i=t._context.plotGlPixelRatio;if(d._glcanvas){d._glcanvas.attr("width",d.width*i).attr("height",d.height*i).style("width",d.width+"px").style("height",d.height+"px");var a=d._glcanvas.data()[0].regl;if(a&&(Math.floor(d.width*i)!==a._gl.drawingBufferWidth||Math.floor(d.height*i)!==a._gl.drawingBufferHeight)){var s="WebGL context buffer and canvas dimensions do not match due to browser/WebGL bug.";if(!w)return o.log(s+" Clearing graph and plotting again."),h.cleanPlot([],{},t._fullData,d),h.supplyDefaults(t),d=t._fullLayout,h.doCalcdata(t),w++,e();o.error(s)}}return"h"===d.modebar.orientation?d._modebardiv.style("height",null).style("width","100%"):d._modebardiv.style("width",null).style("height",d.height+"px"),h.previousPromises(t)},A,function(){if(h.didMarginChange(_,d._size))return o.syncOrAsync([A,k.layoutStyles],t)}];v&&S.push((function(){if(y)return o.syncOrAsync([c.getComponentMethod("shapes","calcAutorange"),c.getComponentMethod("annotations","calcAutorange"),M],t);M()})),S.push(k.layoutStyles),v&&S.push((function(){return p.draw(t,f?"":"redraw")}),(function(t){var e=t._fullLayout._insideTickLabelsUpdaterange;if(e)return t._fullLayout._insideTickLabelsUpdaterange=void 0,H(t,e).then((function(){p.saveRangeInitial(t,!0)}))})),S.push(k.drawData,k.finalDraw,m,h.addLinks,h.rehover,h.redrag,h.reselect,h.doAutoMargin,h.previousPromises);var L=o.syncOrAsync(S,t);return L&&L.then||(L=Promise.resolve()),L.then((function(){return E(t),t}))},e.purge=function(t){var e=(t=o.getGraphDiv(t))._fullLayout||{},r=t._fullData||[];return h.cleanPlot([],{},r,e),h.purge(t),l.purge(t),e._container&&e._container.remove(),delete t._context,t},e.react=function(t,r,n,i){var a,l;t=o.getGraphDiv(t),T.clearPromiseQueue(t);var u=t._fullData,p=t._fullLayout;if(o.isPlotDiv(t)&&u&&p){if(o.isPlainObject(r)){var d=r;r=d.data,n=d.layout,i=d.config,a=d.frames}var v=!1;if(i){var g=o.extendDeep({},t._context);t._context=void 0,P(t,i),v=st(g,t._context)}t.data=r||[],T.cleanData(t.data),t.layout=n||{},T.cleanLayout(t.layout),function(t,e,r,n){var i,a,l,u,c,f,h,p,d,v,g=n._preGUI,y=[],m={},x={};for(i in g){if(c=et(i,Q)){if(d=c.head,v=c.tail,a=c.attr||d+".uirevision",(u=(l=s(n,a).get())&&rt(a,e))&&u===l){if(null===(f=g[i])&&(f=void 0),at(p=(h=s(e,i)).get(),f)){void 0===p&&"autorange"===v&&y.push(d),h.set(B(s(n,i).get()));continue}if("autorange"===v||"range["===v.substr(0,6)){var b=g[d+".range[0]"],_=g[d+".range[1]"],w=g[d+".autorange"];if(w||null===w&&null===b&&null===_){if(!(d in m)){var T=s(e,d).get();m[d]=T&&(T.autorange||!1!==T.autorange&&(!T.range||2!==T.range.length))}if(m[d]){h.set(B(s(n,i).get()));continue}}}}}else o.warn("unrecognized GUI edit: "+i);delete g[i],c&&"range["===c.tail.substr(0,6)&&(x[c.head]=1)}for(var k=0;k<y.length;k++){var A=y[k];if(x[A]){var M=s(e,A).get();M&&delete M.autorange}}var S=n._tracePreGUI;for(var E in S){var L,C=S[E],P=null;for(i in C){if(!P){var O=nt(E,r);if(O<0){delete S[E];break}var I=it(E,t,(L=r[O]._fullInput).index);if(I<0){delete S[E];break}P=t[I]}if(c=et(i,tt)){if(c.attr?u=(l=s(n,c.attr).get())&&rt(c.attr,e):(l=L.uirevision,void 0===(u=P.uirevision)&&(u=e.uirevision)),u&&u===l&&(null===(f=C[i])&&(f=void 0),at(p=(h=s(P,i)).get(),f))){h.set(B(s(L,i).get()));continue}}else o.warn("unrecognized GUI edit: "+i+" in trace uid "+E);delete C[i]}}}(t.data,t.layout,u,p),h.supplyDefaults(t,{skipUpdateCalc:!0});var y=t._fullData,m=t._fullLayout,x=void 0===m.datarevision,b=m.transition,_=function(t,e,r,n,i){var a=A.layoutFlags();return a.arrays={},a.rangesAltered={},a.nChanges=0,a.nChangesAnim=0,ot(e,r,[],{getValObject:function(t){return f.getLayoutValObject(r,t)},flags:a,immutable:n,transition:i,gd:t}),(a.plot||a.calc)&&(a.layoutReplot=!0),i&&a.nChanges&&a.nChangesAnim&&(a.anim=a.nChanges===a.nChangesAnim?"all":"some"),a}(t,p,m,x,b),w=_.newDataRevision,M=function(t,e,r,n,i,a){var o=e.length===r.length;if(!i&&!o)return{fullReplot:!0,calc:!0};var s,l,u=A.traceFlags();u.arrays={},u.nChanges=0,u.nChangesAnim=0;var c={getValObject:function(t){var e=f.getTraceValObject(l,t);return!l._module.animatable&&e.anim&&(e.anim=!1),e},flags:u,immutable:n,transition:i,newDataRevision:a,gd:t},p={};for(s=0;s<e.length;s++)if(r[s]){if(l=r[s]._fullInput,h.hasMakesDataTransform(l)&&(l=r[s]),p[l.uid])continue;p[l.uid]=1,ot(e[s]._fullInput,l,[],c)}return(u.calc||u.plot)&&(u.fullReplot=!0),i&&u.nChanges&&u.nChangesAnim&&(u.anim=u.nChanges===u.nChangesAnim&&o?"all":"some"),u}(t,u,y,x,b,w);if(J(t)&&(_.layoutReplot=!0),M.calc||_.calc){t.calcdata=void 0;for(var S=Object.getOwnPropertyNames(m),L=0;L<S.length;L++){var C=S[L],O=C.substring(0,5);if("xaxis"===O||"yaxis"===O){var I=m[C]._emptyCategories;I&&I()}}}else h.supplyDefaultsUpdateCalc(t.calcdata,y);var D=[];if(a&&(t._transitionData={},h.createTransitionData(t),D.push((function(){return e.addFrames(t,a)}))),m.transition&&!v&&(M.anim||_.anim))_.ticks&&D.push(k.doTicksRelayout),h.doCalcdata(t),k.doAutoRangeAndConstraints(t),D.push((function(){return h.transitionFromReact(t,M,_,p)}));else if(M.fullReplot||_.layoutReplot||v)t._fullLayout._skipDefaults=!0,D.push(e._doPlot);else{for(var z in _.arrays){var R=_.arrays[z];if(R.length){var F=c.getComponentMethod(z,"drawOne");if(F!==o.noop)for(var N=0;N<R.length;N++)F(t,R[N]);else{var j=c.getComponentMethod(z,"draw");if(j===o.noop)throw new Error("cannot draw components: "+z);j(t)}}}D.push(h.previousPromises),M.style&&D.push(k.doTraceStyle),(M.colorbars||_.colorbars)&&D.push(k.doColorBars),_.legend&&D.push(k.doLegend),_.layoutstyle&&D.push(k.layoutStyles),_.axrange&&G(D),_.ticks&&D.push(k.doTicksRelayout),_.modebar&&D.push(k.doModeBar),_.camera&&D.push(k.doCamera),D.push(E)}D.push(h.rehover,h.redrag,h.reselect),(l=o.syncOrAsync(D,t))&&l.then||(l=Promise.resolve(t))}else l=e.newPlot(t,r,n,i);return l.then((function(){return t.emit("plotly_react",{data:r,layout:n}),t}))},e.redraw=function(t){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error("This element is not a Plotly plot: "+t);return T.cleanData(t.data),T.cleanLayout(t.layout),t.calcdata=void 0,e._doPlot(t).then((function(){return t.emit("plotly_redraw"),t}))},e.relayout=H,e.restyle=F,e.setPlotConfig=function(t){return o.extendFlat(_,t)},e.update=K,e._guiRelayout=$(H),e._guiRestyle=$(F),e._guiUpdate=$(K),e._storeDirectGUIEdit=function(t,e,r){for(var n in r)j(n,s(t,n).get(),r[n],e)}},72075:function(t){"use strict";var e={staticPlot:{valType:"boolean",dflt:!1},typesetMath:{valType:"boolean",dflt:!0},plotlyServerURL:{valType:"string",dflt:""},editable:{valType:"boolean",dflt:!1},edits:{annotationPosition:{valType:"boolean",dflt:!1},annotationTail:{valType:"boolean",dflt:!1},annotationText:{valType:"boolean",dflt:!1},axisTitleText:{valType:"boolean",dflt:!1},colorbarPosition:{valType:"boolean",dflt:!1},colorbarTitleText:{valType:"boolean",dflt:!1},legendPosition:{valType:"boolean",dflt:!1},legendText:{valType:"boolean",dflt:!1},shapePosition:{valType:"boolean",dflt:!1},titleText:{valType:"boolean",dflt:!1}},editSelection:{valType:"boolean",dflt:!0},autosizable:{valType:"boolean",dflt:!1},responsive:{valType:"boolean",dflt:!1},fillFrame:{valType:"boolean",dflt:!1},frameMargins:{valType:"number",dflt:0,min:0,max:.5},scrollZoom:{valType:"flaglist",flags:["cartesian","gl3d","geo","mapbox"],extras:[!0,!1],dflt:"gl3d+geo+mapbox"},doubleClick:{valType:"enumerated",values:[!1,"reset","autosize","reset+autosize"],dflt:"reset+autosize"},doubleClickDelay:{valType:"number",dflt:300,min:0},showAxisDragHandles:{valType:"boolean",dflt:!0},showAxisRangeEntryBoxes:{valType:"boolean",dflt:!0},showTips:{valType:"boolean",dflt:!0},showLink:{valType:"boolean",dflt:!1},linkText:{valType:"string",dflt:"Edit chart",noBlank:!0},sendData:{valType:"boolean",dflt:!0},showSources:{valType:"any",dflt:!1},displayModeBar:{valType:"enumerated",values:["hover",!0,!1],dflt:"hover"},showSendToCloud:{valType:"boolean",dflt:!1},showEditInChartStudio:{valType:"boolean",dflt:!1},modeBarButtonsToRemove:{valType:"any",dflt:[]},modeBarButtonsToAdd:{valType:"any",dflt:[]},modeBarButtons:{valType:"any",dflt:!1},toImageButtonOptions:{valType:"any",dflt:{}},displaylogo:{valType:"boolean",dflt:!0},watermark:{valType:"boolean",dflt:!1},plotGlPixelRatio:{valType:"number",dflt:2,min:1,max:4},setBackground:{valType:"any",dflt:"transparent"},topojsonURL:{valType:"string",noBlank:!0,dflt:"https://cdn.plot.ly/"},mapboxAccessToken:{valType:"string",dflt:null},logging:{valType:"integer",min:0,max:2,dflt:1},notifyOnLogging:{valType:"integer",min:0,max:2,dflt:0},queueLength:{valType:"integer",min:0,dflt:0},globalTransforms:{valType:"any",dflt:[]},locale:{valType:"string",dflt:"en-US"},locales:{valType:"any",dflt:{}}},r={};!function t(e,r){for(var n in e){var i=e[n];i.valType?r[n]=i.dflt:(r[n]||(r[n]={}),t(i,r[n]))}}(e,r),t.exports={configAttributes:e,dfltConfig:r}},86281:function(t,e,r){"use strict";var n=r(73972),i=r(71828),a=r(9012),o=r(10820),s=r(31391),l=r(85594),u=r(72075).configAttributes,c=r(30962),f=i.extendDeepAll,h=i.isPlainObject,p=i.isArrayOrTypedArray,d=i.nestedProperty,v=i.valObjectMeta,g="_isSubplotObj",y="_isLinkedToArray",m="_deprecated",x=[g,y,"_arrayAttrRegexps",m];function b(t,e,r){if(!t)return!1;if(t._isLinkedToArray)if(_(e[r]))r++;else if(r<e.length)return!1;for(;r<e.length;r++){var n=t[e[r]];if(!h(n))break;if(t=n,r===e.length-1)break;if(t._isLinkedToArray){if(!_(e[++r]))return!1}else if("info_array"===t.valType){var i=e[++r];if(!_(i))return!1;var a=t.items;if(Array.isArray(a)){if(i>=a.length)return!1;if(2===t.dimensions){if(r++,e.length===r)return t;var o=e[r];if(!_(o))return!1;t=a[i][o]}else t=a[i]}else t=a}}return t}function _(t){return t===Math.round(t)&&t>=0}function w(){var t,e,r={};for(t in f(r,o),n.subplotsRegistry)if((e=n.subplotsRegistry[t]).layoutAttributes)if(Array.isArray(e.attr))for(var i=0;i<e.attr.length;i++)k(r,e,e.attr[i]);else k(r,e,"subplot"===e.attr?e.name:e.attr);for(t in n.componentsRegistry){var a=(e=n.componentsRegistry[t]).schema;if(a&&(a.subplots||a.layout)){var s=a.subplots;if(s&&s.xaxis&&!s.yaxis)for(var l in s.xaxis)delete r.yaxis[l];delete r.xaxis.shift,delete r.xaxis.autoshift}else"colorscale"===e.name?f(r,e.layoutAttributes):e.layoutAttributes&&A(r,e.layoutAttributes,e.name)}return{layoutAttributes:T(r)}}function T(t){return function(t){e.crawl(t,(function(t,r,n){e.isValObject(t)?!0!==t.arrayOk&&"data_array"!==t.valType||(n[r+"src"]={valType:"string",editType:"none"}):h(t)&&(t.role="object")}))}(t),function(t){e.crawl(t,(function(t,e,r){if(t){var n=t[y];n&&(delete t[y],r[e]={items:{}},r[e].items[n]=t,r[e].role="object")}}))}(t),function(t){!function t(e){for(var r in e)if(h(e[r]))t(e[r]);else if(Array.isArray(e[r]))for(var n=0;n<e[r].length;n++)t(e[r][n]);else e[r]instanceof RegExp&&(e[r]=e[r].toString())}(t)}(t),t}function k(t,e,r){var n=d(t,r),i=f({},e.layoutAttributes);i[g]=!0,n.set(i)}function A(t,e,r){var n=d(t,r);n.set(f(n.get()||{},e))}e.IS_SUBPLOT_OBJ=g,e.IS_LINKED_TO_ARRAY=y,e.DEPRECATED=m,e.UNDERSCORE_ATTRS=x,e.get=function(){var t={};n.allTypes.forEach((function(r){t[r]=function(t){var r,i;i=(r=n.modules[t]._module).basePlotModule;var o={type:null},s=f({},a),l=f({},r.attributes);e.crawl(l,(function(t,e,r,n,i){d(s,i).set(void 0),void 0===t&&d(l,i).set(void 0)})),f(o,s),n.traceIs(t,"noOpacity")&&delete o.opacity,n.traceIs(t,"showLegend")||(delete o.showlegend,delete o.legendgroup),n.traceIs(t,"noHover")&&(delete o.hoverinfo,delete o.hoverlabel),r.selectPoints||delete o.selectedpoints,f(o,l),i.attributes&&f(o,i.attributes),o.type=t;var u={meta:r.meta||{},categories:r.categories||{},animatable:Boolean(r.animatable),type:t,attributes:T(o)};if(r.layoutAttributes){var c={};f(c,r.layoutAttributes),u.layoutAttributes=T(c)}return r.animatable||e.crawl(u,(function(t){e.isValObject(t)&&"anim"in t&&delete t.anim})),u}(r)}));var r,i={};return Object.keys(n.transformsRegistry).forEach((function(t){i[t]=function(t){var e=n.transformsRegistry[t],r=f({},e.attributes);return Object.keys(n.componentsRegistry).forEach((function(e){var i=n.componentsRegistry[e];i.schema&&i.schema.transforms&&i.schema.transforms[t]&&Object.keys(i.schema.transforms[t]).forEach((function(e){A(r,i.schema.transforms[t][e],e)}))})),{attributes:T(r)}}(t)})),{defs:{valObjects:v,metaKeys:x.concat(["description","role","editType","impliedEdits"]),editType:{traces:c.traces,layout:c.layout},impliedEdits:{}},traces:t,layout:w(),transforms:i,frames:(r={frames:f({},s)},T(r),r.frames),animation:T(l),config:T(u)}},e.crawl=function(t,r,n,i){var a=n||0;i=i||"",Object.keys(t).forEach((function(n){var o=t[n];if(-1===x.indexOf(n)){var s=(i?i+".":"")+n;r(o,n,t,a,s),e.isValObject(o)||h(o)&&"impliedEdits"!==n&&e.crawl(o,r,a+1,s)}}))},e.isValObject=function(t){return t&&void 0!==t.valType},e.findArrayAttributes=function(t){var r,n,i=[],o=[],s=[];function l(t,e,n,i){o=o.slice(0,i).concat([e]),s=s.slice(0,i).concat([t&&t._isLinkedToArray]),t&&("data_array"===t.valType||!0===t.arrayOk)&&("colorbar"!==o[i-1]||"ticktext"!==e&&"tickvals"!==e)&&u(r,0,"")}function u(t,e,r){var a=t[o[e]],l=r+o[e];if(e===o.length-1)p(a)&&i.push(n+l);else if(s[e]){if(Array.isArray(a))for(var c=0;c<a.length;c++)h(a[c])&&u(a[c],e+1,l+"["+c+"].")}else h(a)&&u(a,e+1,l+".")}r=t,n="",e.crawl(a,l),t._module&&t._module.attributes&&e.crawl(t._module.attributes,l);var c=t.transforms;if(c)for(var f=0;f<c.length;f++){var d=c[f],v=d._module;v&&(n="transforms["+f+"].",r=d,e.crawl(v.attributes,l))}return i},e.getTraceValObject=function(t,e){var r,i,o=e[0],s=1;if("transforms"===o){if(1===e.length)return a.transforms;var l=t.transforms;if(!Array.isArray(l)||!l.length)return!1;var u=e[1];if(!_(u)||u>=l.length)return!1;i=(r=(n.transformsRegistry[l[u].type]||{}).attributes)&&r[e[2]],s=3}else{var c=t._module;if(c||(c=(n.modules[t.type||a.type.dflt]||{})._module),!c)return!1;if(!(i=(r=c.attributes)&&r[o])){var f=c.basePlotModule;f&&f.attributes&&(i=f.attributes[o])}i||(i=a[o])}return b(i,e,s)},e.getLayoutValObject=function(t,e){var r=function(t,e){var r,i,a,s,l=t._basePlotModules;if(l){var u;for(r=0;r<l.length;r++){if((a=l[r]).attrRegex&&a.attrRegex.test(e)){if(a.layoutAttrOverrides)return a.layoutAttrOverrides;!u&&a.layoutAttributes&&(u=a.layoutAttributes)}var c=a.baseLayoutAttrOverrides;if(c&&e in c)return c[e]}if(u)return u}var f=t._modules;if(f)for(r=0;r<f.length;r++)if((s=f[r].layoutAttributes)&&e in s)return s[e];for(i in n.componentsRegistry){if("colorscale"===(a=n.componentsRegistry[i]).name&&0===e.indexOf("coloraxis"))return a.layoutAttributes[e];if(!a.schema&&e===a.name)return a.layoutAttributes}return e in o&&o[e]}(t,e[0]);return b(r,e,1)}},44467:function(t,e,r){"use strict";var n=r(71828),i=r(9012),a="templateitemname",o={name:{valType:"string",editType:"none"}};function s(t){return t&&"string"==typeof t}function l(t){var e=t.length-1;return"s"!==t.charAt(e)&&n.warn("bad argument to arrayDefaultKey: "+t),t.substr(0,t.length-1)+"defaults"}o[a]={valType:"string",editType:"calc"},e.templatedArray=function(t,e){return e._isLinkedToArray=t,e.name=o.name,e[a]=o[a],e},e.traceTemplater=function(t){var e,r,a={};for(e in t)r=t[e],Array.isArray(r)&&r.length&&(a[e]=0);return{newTrace:function(o){var s={type:e=n.coerce(o,{},i,"type"),_template:null};if(e in a){r=t[e];var l=a[e]%r.length;a[e]++,s._template=r[l]}return s}}},e.newContainer=function(t,e,r){var i=t._template,a=i&&(i[e]||r&&i[r]);return n.isPlainObject(a)||(a=null),t[e]={_template:a}},e.arrayTemplater=function(t,e,r){var n=t._template,i=n&&n[l(e)],o=n&&n[e];Array.isArray(o)&&o.length||(o=[]);var u={};return{newItem:function(t){var e={name:t.name,_input:t},n=e[a]=t[a];if(!s(n))return e._template=i,e;for(var l=0;l<o.length;l++){var c=o[l];if(c.name===n)return u[n]=1,e._template=c,e}return e[r]=t[r]||!1,e._template=!1,e},defaultItems:function(){for(var t=[],e=0;e<o.length;e++){var r=o[e],n=r.name;if(s(n)&&!u[n]){var i={_template:r,name:n,_input:{_templateitemname:n}};i[a]=r[a],t.push(i),u[n]=1}}return t}}},e.arrayDefaultKey=l,e.arrayEditor=function(t,e,r){var i=(n.nestedProperty(t,e).get()||[]).length,o=r._index,s=o>=i&&(r._input||{})._templateitemname;s&&(o=i);var l,u=e+"["+o+"]";function c(){l={},s&&(l[u]={},l[u][a]=s)}function f(t,e){s?n.nestedProperty(l[u],t).set(e):l[u+"."+t]=e}function h(){var t=l;return c(),t}return c(),{modifyBase:function(t,e){l[t]=e},modifyItem:f,getUpdateObj:h,applyUpdate:function(e,r){e&&f(e,r);var i=h();for(var a in i)n.nestedProperty(t,a).set(i[a])}}}},61549:function(t,e,r){"use strict";var n=r(39898),i=r(73972),a=r(74875),o=r(71828),s=r(63893),l=r(33306),u=r(7901),c=r(91424),f=r(92998),h=r(64168),p=r(89298),d=r(18783),v=r(99082),g=v.enforce,y=v.clean,m=r(71739).doAutoRange,x="start";function b(t,e,r){for(var n=0;n<r.length;n++){var i=r[n][0],a=r[n][1];if(!(i[0]>=t[1]||i[1]<=t[0])&&a[0]<e[1]&&a[1]>e[0])return!0}return!1}function _(t){var r,i,s,l,f,v,g=t._fullLayout,y=g._size,m=y.p,x=p.list(t,"",!0);if(g._paperdiv.style({width:t._context.responsive&&g.autosize&&!t._context._hasZeroWidth&&!t.layout.width?"100%":g.width+"px",height:t._context.responsive&&g.autosize&&!t._context._hasZeroHeight&&!t.layout.height?"100%":g.height+"px"}).selectAll(".main-svg").call(c.setSize,g.width,g.height),t._context.setBackground(t,g.paper_bgcolor),e.drawMainTitle(t),h.manage(t),!g._has("cartesian"))return a.previousPromises(t);function _(t,e,r){var n=t._lw/2;return"x"===t._id.charAt(0)?e?"top"===r?e._offset-m-n:e._offset+e._length+m+n:y.t+y.h*(1-(t.position||0))+n%1:e?"right"===r?e._offset+e._length+m+n:e._offset-m-n:y.l+y.w*(t.position||0)+n%1}for(r=0;r<x.length;r++){var T=(l=x[r])._anchorAxis;l._linepositions={},l._lw=c.crispRound(t,l.linewidth,1),l._mainLinePosition=_(l,T,l.side),l._mainMirrorPosition=l.mirror&&T?_(l,T,d.OPPOSITE_SIDE[l.side]):null}var A=[],M=[],S=[],E=1===u.opacity(g.paper_bgcolor)&&1===u.opacity(g.plot_bgcolor)&&g.paper_bgcolor===g.plot_bgcolor;for(i in g._plots)if((s=g._plots[i]).mainplot)s.bg&&s.bg.remove(),s.bg=void 0;else{var L=s.xaxis.domain,C=s.yaxis.domain,P=s.plotgroup;if(b(L,C,S)){var O=P.node(),I=s.bg=o.ensureSingle(P,"rect","bg");O.insertBefore(I.node(),O.childNodes[0]),M.push(i)}else P.select("rect.bg").remove(),S.push([L,C]),E||(A.push(i),M.push(i))}var D,z,R,F,B,N,j,U,V,H,q,G,Z,Y=g._bgLayer.selectAll(".bg").data(A);for(Y.enter().append("rect").classed("bg",!0),Y.exit().remove(),Y.each((function(t){g._plots[t].bg=n.select(this)})),r=0;r<M.length;r++)s=g._plots[M[r]],f=s.xaxis,v=s.yaxis,s.bg&&void 0!==f._offset&&void 0!==v._offset&&s.bg.call(c.setRect,f._offset-m,v._offset-m,f._length+2*m,v._length+2*m).call(u.fill,g.plot_bgcolor).style("stroke-width",0);if(!g._hasOnlyLargeSploms)for(i in g._plots){s=g._plots[i],f=s.xaxis,v=s.yaxis;var W,X,J=s.clipId="clip"+g._uid+i+"plot",K=o.ensureSingleById(g._clips,"clipPath",J,(function(t){t.classed("plotclip",!0).append("rect")}));s.clipRect=K.select("rect").attr({width:f._length,height:v._length}),c.setTranslate(s.plot,f._offset,v._offset),s._hasClipOnAxisFalse?(W=null,X=J):(W=J,X=null),c.setClipUrl(s.plot,W,t),s.layerClipId=X}function $(t){return"M"+D+","+t+"H"+z}function Q(t){return"M"+f._offset+","+t+"h"+f._length}function tt(t){return"M"+t+","+U+"V"+j}function et(t){return void 0!==v._shift&&(t+=v._shift),"M"+t+","+v._offset+"v"+v._length}function rt(t,e,r){if(!t.showline||i!==t._mainSubplot)return"";if(!t._anchorAxis)return r(t._mainLinePosition);var n=e(t._mainLinePosition);return t.mirror&&(n+=e(t._mainMirrorPosition)),n}for(i in g._plots){s=g._plots[i],f=s.xaxis,v=s.yaxis;var nt="M0,0";w(f,i)&&(B=k(f,"left",v,x),D=f._offset-(B?m+B:0),N=k(f,"right",v,x),z=f._offset+f._length+(N?m+N:0),R=_(f,v,"bottom"),F=_(f,v,"top"),!(Z=!f._anchorAxis||i!==f._mainSubplot)||"allticks"!==f.mirror&&"all"!==f.mirror||(f._linepositions[i]=[R,F]),nt=rt(f,$,Q),Z&&f.showline&&("all"===f.mirror||"allticks"===f.mirror)&&(nt+=$(R)+$(F)),s.xlines.style("stroke-width",f._lw+"px").call(u.stroke,f.showline?f.linecolor:"rgba(0,0,0,0)")),s.xlines.attr("d",nt);var it="M0,0";w(v,i)&&(q=k(v,"bottom",f,x),j=v._offset+v._length+(q?m:0),G=k(v,"top",f,x),U=v._offset-(G?m:0),V=_(v,f,"left"),H=_(v,f,"right"),!(Z=!v._anchorAxis||i!==v._mainSubplot)||"allticks"!==v.mirror&&"all"!==v.mirror||(v._linepositions[i]=[V,H]),it=rt(v,tt,et),Z&&v.showline&&("all"===v.mirror||"allticks"===v.mirror)&&(it+=tt(V)+tt(H)),s.ylines.style("stroke-width",v._lw+"px").call(u.stroke,v.showline?v.linecolor:"rgba(0,0,0,0)")),s.ylines.attr("d",it)}return p.makeClipPaths(t),a.previousPromises(t)}function w(t,e){return(t.ticks||t.showline)&&(e===t._mainSubplot||"all"===t.mirror||"allticks"===t.mirror)}function T(t,e,r){if(!r.showline||!r._lw)return!1;if("all"===r.mirror||"allticks"===r.mirror)return!0;var n=r._anchorAxis;if(!n)return!1;var i=d.FROM_BL[e];return r.side===e?n.domain[i]===t.domain[i]:r.mirror&&n.domain[1-i]===t.domain[1-i]}function k(t,e,r,n){if(T(t,e,r))return r._lw;for(var i=0;i<n.length;i++){var a=n[i];if(a._mainAxis===r._mainAxis&&T(t,e,a))return a._lw}return 0}e.layoutStyles=function(t){return o.syncOrAsync([a.doAutoMargin,_],t)},e.drawMainTitle=function(t){var e,r=t._fullLayout.title,i=t._fullLayout,l=function(t){var e=t.title,r="middle";return o.isRightAnchor(e)?r="end":o.isLeftAnchor(e)&&(r=x),r}(i),u=function(t){var e=t.title,r="0em";return o.isTopAnchor(e)?r=d.CAP_SHIFT+"em":o.isMiddleAnchor(e)&&(r=d.MID_SHIFT+"em"),r}(i),h=function(t,e){var r=t.title,n=t._size,i=0;return"0em"!==e&&e?e===d.CAP_SHIFT+"em"&&(i=r.pad.t):i=-r.pad.b,"auto"===r.y?n.t/2:"paper"===r.yref?n.t+n.h-n.h*r.y+i:t.height-t.height*r.y+i}(i,u),p=function(t,e){var r=t.title,n=t._size,i=0;return e===x?i=r.pad.l:"end"===e&&(i=-r.pad.r),"paper"===r.xref?n.l+n.w*r.x+i:t.width*r.x+i}(i,l);if(f.draw(t,"gtitle",{propContainer:i,propName:"title.text",placeholder:i._dfltTitle.plot,attributes:{x:p,y:h,"text-anchor":l,dy:u}}),r.text&&r.automargin){var v=n.selectAll(".gtitle"),g=c.bBox(v.node()).height,y=function(t,e,r){var n=e.y,i=e.yanchor,a=n>.5?"t":"b",o=t._fullLayout.margin[a],s=0;return"paper"===e.yref?s=r+e.pad.t+e.pad.b:"container"===e.yref&&(s=function(t,e,r,n,i){var a=0;return"middle"===r&&(a+=i/2),"t"===t?("top"===r&&(a+=i),a+=n-e*n):("bottom"===r&&(a+=i),a+=e*n),a}(a,n,i,t._fullLayout.height,r)+e.pad.t+e.pad.b),s>o?s:0}(t,r,g);if(y>0){!function(t,e,r,n){var i="title.automargin",s=t._fullLayout.title,l=s.y>.5?"t":"b",u={x:s.x,y:s.y,t:0,b:0},c={};"paper"===s.yref&&function(t,e,r,n,i){var a="paper"===e.yref?t._fullLayout._size.h:t._fullLayout.height,s=o.isTopAnchor(e)?n:n-i,l="b"===r?a-s:s;return!(o.isTopAnchor(e)&&"t"===r||o.isBottomAnchor(e)&&"b"===r)&&l<i}(t,s,l,e,n)?u[l]=r:"container"===s.yref&&(c[l]=r,t._fullLayout._reservedMargin[i]=c),a.allowAutoMargin(t,i),a.autoMargin(t,i,u)}(t,h,y,g),v.attr({x:p,y:h,"text-anchor":l,dy:(e=r.yanchor,"top"===e?d.CAP_SHIFT+.3+"em":"bottom"===e?"-0.3em":d.MID_SHIFT+"em")}).call(s.positionText,p,h);var m=(r.text.match(s.BR_TAG_ALL)||[]).length;if(m){var b=d.LINE_SPACING*m+d.MID_SHIFT;0===r.y&&(b=-b),v.selectAll(".line").each((function(){var t=+this.getAttribute("dy").slice(0,-2)-b+"em";this.setAttribute("dy",t)}))}}}},e.doTraceStyle=function(t){var r,n=t.calcdata,o=[];for(r=0;r<n.length;r++){var s=n[r],u=s[0]||{},c=u.trace||{},f=c._module||{},h=f.arraysToCalcdata;h&&h(s,c);var p=f.editStyle;p&&o.push({fn:p,cd0:u})}if(o.length){for(r=0;r<o.length;r++){var d=o[r];d.fn(t,d.cd0)}l(t),e.redrawReglTraces(t)}return a.style(t),i.getComponentMethod("legend","draw")(t),a.previousPromises(t)},e.doColorBars=function(t){return i.getComponentMethod("colorbar","draw")(t),a.previousPromises(t)},e.layoutReplot=function(t){var e=t.layout;return t.layout=void 0,i.call("_doPlot",t,"",e)},e.doLegend=function(t){return i.getComponentMethod("legend","draw")(t),a.previousPromises(t)},e.doTicksRelayout=function(t){return p.draw(t,"redraw"),t._fullLayout._hasOnlyLargeSploms&&(i.subplotsRegistry.splom.updateGrid(t),l(t),e.redrawReglTraces(t)),e.drawMainTitle(t),a.previousPromises(t)},e.doModeBar=function(t){var e=t._fullLayout;h.manage(t);for(var r=0;r<e._basePlotModules.length;r++){var n=e._basePlotModules[r].updateFx;n&&n(t)}return a.previousPromises(t)},e.doCamera=function(t){for(var e=t._fullLayout,r=e._subplots.gl3d,n=0;n<r.length;n++){var i=e[r[n]];i._scene.setViewport(i)}},e.drawData=function(t){var r=t._fullLayout;l(t);for(var n=r._basePlotModules,o=0;o<n.length;o++)n[o].plot(t);return e.redrawReglTraces(t),a.style(t),i.getComponentMethod("selections","draw")(t),i.getComponentMethod("shapes","draw")(t),i.getComponentMethod("annotations","draw")(t),i.getComponentMethod("images","draw")(t),r._replotting=!1,a.previousPromises(t)},e.redrawReglTraces=function(t){var e=t._fullLayout;if(e._has("regl")){var r,n,i=t._fullData,a=[],s=[];for(e._hasOnlyLargeSploms&&e._splomGrid.draw(),r=0;r<i.length;r++){var l=i[r];!0===l.visible&&0!==l._length&&("splom"===l.type?e._splomScenes[l.uid].draw():"scattergl"===l.type?o.pushUnique(a,l.xaxis+l.yaxis):"scatterpolargl"===l.type&&o.pushUnique(s,l.subplot))}for(r=0;r<a.length;r++)(n=e._plots[a[r]])._scene&&n._scene.draw();for(r=0;r<s.length;r++)(n=e[s[r]]._subplot)._scene&&n._scene.draw()}},e.doAutoRangeAndConstraints=function(t){for(var e,r=p.list(t,"",!0),n={},i=0;i<r.length;i++)if(!n[(e=r[i])._id]){n[e._id]=1,y(t,e),m(t,e);var a=e._matchGroup;if(a)for(var o in a){var s=p.getFromId(t,o);m(t,s,e.range),n[o]=1}}g(t)},e.finalDraw=function(t){i.getComponentMethod("rangeslider","draw")(t),i.getComponentMethod("rangeselector","draw")(t)},e.drawMarginPushers=function(t){i.getComponentMethod("legend","draw")(t),i.getComponentMethod("rangeselector","draw")(t),i.getComponentMethod("sliders","draw")(t),i.getComponentMethod("updatemenus","draw")(t),i.getComponentMethod("colorbar","draw")(t)}},96318:function(t,e,r){"use strict";var n=r(71828),i=n.isPlainObject,a=r(86281),o=r(74875),s=r(9012),l=r(44467),u=r(72075).dfltConfig;function c(t,e){t=n.extendDeep({},t);var r,a,o=Object.keys(t).sort();function s(e,r,n){if(i(r)&&i(e))c(e,r);else if(Array.isArray(r)&&Array.isArray(e)){var o=l.arrayTemplater({_template:t},n);for(a=0;a<r.length;a++){var s=r[a],u=o.newItem(s)._template;u&&c(u,s)}var f=o.defaultItems();for(a=0;a<f.length;a++)r.push(f[a]._template);for(a=0;a<r.length;a++)delete r[a].templateitemname}}for(r=0;r<o.length;r++){var u=o[r],h=t[u];if(u in e?s(h,e[u],u):e[u]=h,f(u)===u)for(var p in e){var d=f(p);p===d||d!==u||p in t||s(h,e[p],u)}}}function f(t){return t.replace(/[0-9]+$/,"")}function h(t,e,r,a,o){var s=o&&r(o);for(var u in t){var c=t[u],p=v(t,u,a),d=v(t,u,o),g=r(d);if(!g){var y=f(u);y!==u&&(g=r(d=v(t,y,o)))}if(!(s&&s===g||!g||g._noTemplating||"data_array"===g.valType||g.arrayOk&&Array.isArray(c)))if(!g.valType&&i(c))h(c,e,r,p,d);else if(g._isLinkedToArray&&Array.isArray(c))for(var m=!1,x=0,b={},_=0;_<c.length;_++){var w=c[_];if(i(w)){var T=w.name;if(T)b[T]||(h(w,e,r,v(c,x,p),v(c,x,d)),x++,b[T]=1);else if(!m){var k=v(t,l.arrayDefaultKey(u),a),A=v(c,x,p);h(w,e,r,A,v(c,x,d));var M=n.nestedProperty(e,A);n.nestedProperty(e,k).set(M.get()),M.set(null),m=!0}}}else n.nestedProperty(e,p).set(c)}}function p(t,e){return a.getLayoutValObject(t,n.nestedProperty({},e).parts)}function d(t,e){return a.getTraceValObject(t,n.nestedProperty({},e).parts)}function v(t,e,r){return r?Array.isArray(t)?r+"["+e+"]":r+"."+e:e}function g(t){for(var e=0;e<t.length;e++)if(i(t[e]))return!0}function y(t){var e;switch(t.code){case"data":e="The template has no key data.";break;case"layout":e="The template has no key layout.";break;case"missing":e=t.path?"There are no templates for item "+t.path+" with name "+t.templateitemname:"There are no templates for trace "+t.index+", of type "+t.traceType+".";break;case"unused":e=t.path?"The template item at "+t.path+" was not used in constructing the plot.":t.dataCount?"Some of the templates of type "+t.traceType+" were not used. The template has "+t.templateCount+" traces, the data only has "+t.dataCount+" of this type.":"The template has "+t.templateCount+" traces of type "+t.traceType+" but there are none in the data.";break;case"reused":e="Some of the templates of type "+t.traceType+" were used more than once. The template has "+t.templateCount+" traces, the data has "+t.dataCount+" of this type."}return t.msg=e,t}e.makeTemplate=function(t){t=n.isPlainObject(t)?t:n.getGraphDiv(t),t=n.extendDeep({_context:u},{data:t.data,layout:t.layout}),o.supplyDefaults(t);var e=t.data||[],r=t.layout||{};r._basePlotModules=t._fullLayout._basePlotModules,r._modules=t._fullLayout._modules;var a={data:{},layout:{}};e.forEach((function(t){var e={};h(t,e,d.bind(null,t));var r=n.coerce(t,{},s,"type"),i=a.data[r];i||(i=a.data[r]=[]),i.push(e)})),h(r,a.layout,p.bind(null,r)),delete a.layout.template;var l=r.template;if(i(l)){var f,v,g,y,m,x,b=l.layout;i(b)&&c(b,a.layout);var _=l.data;if(i(_)){for(v in a.data)if(g=_[v],Array.isArray(g)){for(x=(m=a.data[v]).length,y=g.length,f=0;f<x;f++)c(g[f%y],m[f]);for(f=x;f<y;f++)m.push(n.extendDeep({},g[f]))}for(v in _)v in a.data||(a.data[v]=n.extendDeep([],_[v]))}}return a},e.validateTemplate=function(t,e){var r=n.extendDeep({},{_context:u,data:t.data,layout:t.layout}),a=r.layout||{};i(e)||(e=a.template||{});var s=e.layout,l=e.data,c=[];r.layout=a,r.layout.template=e,o.supplyDefaults(r);var h=r._fullLayout,p=r._fullData,d={};if(i(s)?(function t(e,r){for(var n in e)if("_"!==n.charAt(0)&&i(e[n])){var a,o=f(n),s=[];for(a=0;a<r.length;a++)s.push(v(e,n,r[a])),o!==n&&s.push(v(e,o,r[a]));for(a=0;a<s.length;a++)d[s[a]]=1;t(e[n],s)}}(h,["layout"]),function t(e,r){for(var n in e)if(-1===n.indexOf("defaults")&&i(e[n])){var a=v(e,n,r);d[a]?t(e[n],a):c.push({code:"unused",path:a})}}(s,"layout")):c.push({code:"layout"}),i(l)){for(var m,x={},b=0;b<p.length;b++){var _=p[b];x[m=_.type]=(x[m]||0)+1,_._fullInput._template||c.push({code:"missing",index:_._fullInput.index,traceType:m})}for(m in l){var w=l[m].length,T=x[m]||0;w>T?c.push({code:"unused",traceType:m,templateCount:w,dataCount:T}):T>w&&c.push({code:"reused",traceType:m,templateCount:w,dataCount:T})}}else c.push({code:"data"});if(function t(e,r){for(var n in e)if("_"!==n.charAt(0)){var a=e[n],o=v(e,n,r);i(a)?(Array.isArray(e)&&!1===a._template&&a.templateitemname&&c.push({code:"missing",path:o,templateitemname:a.templateitemname}),t(a,o)):Array.isArray(a)&&g(a)&&t(a,o)}}({data:p,layout:h},""),c.length)return c.map(y)}},403:function(t,e,r){"use strict";var n=r(92770),i=r(72391),a=r(74875),o=r(71828),s=r(25095),l=r(5900),u=r(70942),c=r(11506).version,f={format:{valType:"enumerated",values:["png","jpeg","webp","svg","full-json"],dflt:"png"},width:{valType:"number",min:1},height:{valType:"number",min:1},scale:{valType:"number",min:0,dflt:1},setBackground:{valType:"any",dflt:!1},imageDataOnly:{valType:"boolean",dflt:!1}};t.exports=function(t,e){var r,h,p,d;function v(t){return!(t in e)||o.validate(e[t],f[t])}if(e=e||{},o.isPlainObject(t)?(r=t.data||[],h=t.layout||{},p=t.config||{},d={}):(t=o.getGraphDiv(t),r=o.extendDeep([],t.data),h=o.extendDeep({},t.layout),p=t._context,d=t._fullLayout||{}),!v("width")&&null!==e.width||!v("height")&&null!==e.height)throw new Error("Height and width should be pixel values.");if(!v("format"))throw new Error("Export format is not "+o.join2(f.format.values,", "," or ")+".");var g={};function y(t,r){return o.coerce(e,g,f,t,r)}var m=y("format"),x=y("width"),b=y("height"),_=y("scale"),w=y("setBackground"),T=y("imageDataOnly"),k=document.createElement("div");k.style.position="absolute",k.style.left="-5000px",document.body.appendChild(k);var A=o.extendFlat({},h);x?A.width=x:null===e.width&&n(d.width)&&(A.width=d.width),b?A.height=b:null===e.height&&n(d.height)&&(A.height=d.height);var M=o.extendFlat({},p,{_exportedPlot:!0,staticPlot:!0,setBackground:w}),S=s.getRedrawFunc(k);function E(){return new Promise((function(t){setTimeout(t,s.getDelay(k._fullLayout))}))}function L(){return new Promise((function(t,e){var r=l(k,m,_),n=k._fullLayout.width,f=k._fullLayout.height;function h(){i.purge(k),document.body.removeChild(k)}if("full-json"===m){var p=a.graphJson(k,!1,"keepdata","object",!0,!0);return p.version=c,p=JSON.stringify(p),h(),t(T?p:s.encodeJSON(p))}if(h(),"svg"===m)return t(T?r:s.encodeSVG(r));var d=document.createElement("canvas");d.id=o.randstr(),u({format:m,width:n,height:f,scale:_,canvas:d,svg:r,promise:!0}).then(t).catch(e)}))}return new Promise((function(t,e){i.newPlot(k,r,A,M).then(S).then(E).then(L).then((function(e){t(function(t){return T?t.replace(s.IMAGE_URL_PREFIX,""):t}(e))})).catch((function(t){e(t)}))}))}},84936:function(t,e,r){"use strict";var n=r(71828),i=r(74875),a=r(86281),o=r(72075).dfltConfig,s=n.isPlainObject,l=Array.isArray,u=n.isArrayOrTypedArray;function c(t,e,r,i,a,o){o=o||[];for(var f=Object.keys(t),h=0;h<f.length;h++){var g=f[h];if("transforms"!==g){var y=o.slice();y.push(g);var m=t[g],x=e[g],b=v(r,g),_=(b||{}).valType,w="info_array"===_,T="colorscale"===_,k=(b||{}).items;if(d(r,g))if(s(m)&&s(x)&&"any"!==_)c(m,x,b,i,a,y);else if(w&&l(m)){m.length>x.length&&i.push(p("unused",a,y.concat(x.length)));var A,M,S,E,L,C=x.length,P=Array.isArray(k);if(P&&(C=Math.min(C,k.length)),2===b.dimensions)for(M=0;M<C;M++)if(l(m[M])){m[M].length>x[M].length&&i.push(p("unused",a,y.concat(M,x[M].length)));var O=x[M].length;for(A=0;A<(P?Math.min(O,k[M].length):O);A++)S=P?k[M][A]:k,E=m[M][A],L=x[M][A],n.validate(E,S)?L!==E&&L!==+E&&i.push(p("dynamic",a,y.concat(M,A),E,L)):i.push(p("value",a,y.concat(M,A),E))}else i.push(p("array",a,y.concat(M),m[M]));else for(M=0;M<C;M++)S=P?k[M]:k,E=m[M],L=x[M],n.validate(E,S)?L!==E&&L!==+E&&i.push(p("dynamic",a,y.concat(M),E,L)):i.push(p("value",a,y.concat(M),E))}else if(b.items&&!w&&l(m)){var I,D,z=k[Object.keys(k)[0]],R=[];for(I=0;I<x.length;I++){var F=x[I]._index||I;if((D=y.slice()).push(F),s(m[F])&&s(x[I])){R.push(F);var B=m[F],N=x[I];s(B)&&!1!==B.visible&&!1===N.visible?i.push(p("invisible",a,D)):c(B,N,z,i,a,D)}}for(I=0;I<m.length;I++)(D=y.slice()).push(I),s(m[I])?-1===R.indexOf(I)&&i.push(p("unused",a,D)):i.push(p("object",a,D,m[I]))}else!s(m)&&s(x)?i.push(p("object",a,y,m)):u(m)||!u(x)||w||T?g in e?n.validate(m,b)?"enumerated"===b.valType&&(b.coerceNumber&&m!==+x||m!==x)&&i.push(p("dynamic",a,y,m,x)):i.push(p("value",a,y,m)):i.push(p("unused",a,y,m)):i.push(p("array",a,y,m));else i.push(p("schema",a,y))}}return i}t.exports=function(t,e){void 0===t&&(t=[]),void 0===e&&(e={});var r,u,f=a.get(),h=[],d={_context:n.extendFlat({},o)};l(t)?(d.data=n.extendDeep([],t),r=t):(d.data=[],r=[],h.push(p("array","data"))),s(e)?(d.layout=n.extendDeep({},e),u=e):(d.layout={},u={},arguments.length>1&&h.push(p("object","layout"))),i.supplyDefaults(d);for(var v=d._fullData,g=r.length,y=0;y<g;y++){var m=r[y],x=["data",y];if(s(m)){var b=v[y],_=b.type,w=f.traces[_].attributes;w.type={valType:"enumerated",values:[_]},!1===b.visible&&!1!==m.visible&&h.push(p("invisible",x)),c(m,b,w,h,x);var T=m.transforms,k=b.transforms;if(T){l(T)||h.push(p("array",x,["transforms"])),x.push("transforms");for(var A=0;A<T.length;A++){var M=["transforms",A],S=T[A].type;if(s(T[A])){var E=f.transforms[S]?f.transforms[S].attributes:{};E.type={valType:"enumerated",values:Object.keys(f.transforms)},c(T[A],k[A],E,h,x,M)}else h.push(p("object",x,M))}}}else h.push(p("object",x))}var L=d._fullLayout,C=function(t,e){for(var r=t.layout.layoutAttributes,i=0;i<e.length;i++){var a=e[i],o=t.traces[a.type],s=o.layoutAttributes;s&&(a.subplot?n.extendFlat(r[o.attributes.subplot.dflt],s):n.extendFlat(r,s))}return r}(f,v);return c(u,L,C,h,"layout"),0===h.length?void 0:h};var f={object:function(t,e){return("layout"===t&&""===e?"The layout argument":"data"===t[0]&&""===e?"Trace "+t[1]+" in the data argument":h(t)+"key "+e)+" must be linked to an object container"},array:function(t,e){return("data"===t?"The data argument":h(t)+"key "+e)+" must be linked to an array container"},schema:function(t,e){return h(t)+"key "+e+" is not part of the schema"},unused:function(t,e,r){var n=s(r)?"container":"key";return h(t)+n+" "+e+" did not get coerced"},dynamic:function(t,e,r,n){return[h(t)+"key",e,"(set to '"+r+"')","got reset to","'"+n+"'","during defaults."].join(" ")},invisible:function(t,e){return(e?h(t)+"item "+e:"Trace "+t[1])+" got defaulted to be not visible"},value:function(t,e,r){return[h(t)+"key "+e,"is set to an invalid value ("+r+")"].join(" ")}};function h(t){return l(t)?"In data trace "+t[1]+", ":"In "+t+", "}function p(t,e,r,i,a){var o,s;r=r||"",l(e)?(o=e[0],s=e[1]):(o=e,s=null);var u=function(t){if(!l(t))return String(t);for(var e="",r=0;r<t.length;r++){var n=t[r];"number"==typeof n?e=e.substr(0,e.length-1)+"["+n+"]":e+=n,r<t.length-1&&(e+=".")}return e}(r),c=f[t](e,u,i,a);return n.log(c),{code:t,container:o,trace:s,path:r,astr:u,msg:c}}function d(t,e){var r=y(e),n=r.keyMinusId,i=r.id;return!!(n in t&&t[n]._isSubplotObj&&i)||e in t}function v(t,e){return e in t?t[e]:t[y(e).keyMinusId]}var g=n.counterRegex("([a-z]+)");function y(t){var e=t.match(g);return{keyMinusId:e&&e[1],id:e&&e[2]}}},85594:function(t){"use strict";t.exports={mode:{valType:"enumerated",dflt:"afterall",values:["immediate","next","afterall"]},direction:{valType:"enumerated",values:["forward","reverse"],dflt:"forward"},fromcurrent:{valType:"boolean",dflt:!1},frame:{duration:{valType:"number",min:0,dflt:500},redraw:{valType:"boolean",dflt:!0}},transition:{duration:{valType:"number",min:0,dflt:500,editType:"none"},easing:{valType:"enumerated",dflt:"cubic-in-out",values:["linear","quad","cubic","sin","exp","circle","elastic","back","bounce","linear-in","quad-in","cubic-in","sin-in","exp-in","circle-in","elastic-in","back-in","bounce-in","linear-out","quad-out","cubic-out","sin-out","exp-out","circle-out","elastic-out","back-out","bounce-out","linear-in-out","quad-in-out","cubic-in-out","sin-in-out","exp-in-out","circle-in-out","elastic-in-out","back-in-out","bounce-in-out"],editType:"none"},ordering:{valType:"enumerated",values:["layout first","traces first"],dflt:"layout first",editType:"none"}}}},85501:function(t,e,r){"use strict";var n=r(71828),i=r(44467);t.exports=function(t,e,r){var a,o,s=r.name,l=r.inclusionAttr||"visible",u=e[s],c=n.isArrayOrTypedArray(t[s])?t[s]:[],f=e[s]=[],h=i.arrayTemplater(e,s,l);for(a=0;a<c.length;a++){var p=c[a];n.isPlainObject(p)?o=h.newItem(p):(o=h.newItem({}))[l]=!1,o._index=a,!1!==o[l]&&r.handleItemDefaults(p,o,e,r),f.push(o)}var d=h.defaultItems();for(a=0;a<d.length;a++)(o=d[a])._index=f.length,r.handleItemDefaults({},o,e,r,{}),f.push(o);if(n.isArrayOrTypedArray(u)){var v=Math.min(u.length,f.length);for(a=0;a<v;a++)n.relinkPrivateKeys(f[a],u[a])}return f}},9012:function(t,e,r){"use strict";var n=r(41940),i=r(77914);t.exports={type:{valType:"enumerated",values:[],dflt:"scatter",editType:"calc+clearAxisTypes",_noTemplating:!0},visible:{valType:"enumerated",values:[!0,!1,"legendonly"],dflt:!0,editType:"calc"},showlegend:{valType:"boolean",dflt:!0,editType:"style"},legend:{valType:"subplotid",dflt:"legend",editType:"style"},legendgroup:{valType:"string",dflt:"",editType:"style"},legendgrouptitle:{text:{valType:"string",dflt:"",editType:"style"},font:n({editType:"style"}),editType:"style"},legendrank:{valType:"number",dflt:1e3,editType:"style"},legendwidth:{valType:"number",min:0,editType:"style"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"style"},name:{valType:"string",editType:"style"},uid:{valType:"string",editType:"plot",anim:!0},ids:{valType:"data_array",editType:"calc",anim:!0},customdata:{valType:"data_array",editType:"calc"},meta:{valType:"any",arrayOk:!0,editType:"plot"},selectedpoints:{valType:"any",editType:"calc"},hoverinfo:{valType:"flaglist",flags:["x","y","z","text","name"],extras:["all","none","skip"],arrayOk:!0,dflt:"all",editType:"none"},hoverlabel:i.hoverlabel,stream:{token:{valType:"string",noBlank:!0,strict:!0,editType:"calc"},maxpoints:{valType:"number",min:0,max:1e4,dflt:500,editType:"calc"},editType:"calc"},transforms:{_isLinkedToArray:"transform",editType:"calc"},uirevision:{valType:"any",editType:"none"}}},42973:function(t,e,r){"use strict";var n=r(92770),i=r(71828),a=i.dateTime2ms,o=i.incrementMonth,s=r(50606).ONEAVGMONTH;t.exports=function(t,e,r,i){if("date"!==e.type)return{vals:i};var l=t[r+"periodalignment"];if(!l)return{vals:i};var u,c=t[r+"period"];if(n(c)){if((c=+c)<=0)return{vals:i}}else if("string"==typeof c&&"M"===c.charAt(0)){var f=+c.substring(1);if(!(f>0&&Math.round(f)===f))return{vals:i};u=f}for(var h=e.calendar,p="start"===l,d="end"===l,v=t[r+"period0"],g=a(v,h)||0,y=[],m=[],x=[],b=i.length,_=0;_<b;_++){var w,T,k,A=i[_];if(u){for(w=Math.round((A-g)/(u*s)),k=o(g,u*w,h);k>A;)k=o(k,-u,h);for(;k<=A;)k=o(k,u,h);T=o(k,-u,h)}else{for(k=g+(w=Math.round((A-g)/c))*c;k>A;)k-=c;for(;k<=A;)k+=c;T=k-c}y[_]=p?T:d?k:(T+k)/2,m[_]=T,x[_]=k}return{vals:y,starts:m,ends:x}}},89502:function(t){"use strict";t.exports={xaxis:{valType:"subplotid",dflt:"x",editType:"calc+clearAxisTypes"},yaxis:{valType:"subplotid",dflt:"y",editType:"calc+clearAxisTypes"}}},71739:function(t,e,r){"use strict";var n=r(39898),i=r(92770),a=r(71828),o=r(50606).FP_SAFE,s=r(73972),l=r(91424),u=r(41675),c=u.getFromId,f=u.isLinked;function h(t,e){var r,n,i=[],o=t._fullLayout,s=d(o,e,0),l=d(o,e,1),u=g(t,e),c=u.min,f=u.max;if(0===c.length||0===f.length)return a.simpleMap(e.range,e.r2l);var h=c[0].val,v=f[0].val;for(r=1;r<c.length&&h===v;r++)h=Math.min(h,c[r].val);for(r=1;r<f.length&&h===v;r++)v=Math.max(v,f[r].val);var y=e.autorange,m="reversed"===y||"min reversed"===y||"max reversed"===y;if(!m&&e.range){var x=a.simpleMap(e.range,e.r2l);m=x[1]<x[0]}"reversed"===e.autorange&&(e.autorange=!0);var b,_,w,T,A,M,S=e.rangemode,E="tozero"===S,L="nonnegative"===S,C=e._length,P=C/10,O=0;for(r=0;r<c.length;r++)for(b=c[r],n=0;n<f.length;n++)(M=(_=f[n]).val-b.val-p(e,b.val,_.val))>0&&((A=C-s(b)-l(_))>P?M/A>O&&(w=b,T=_,O=M/A):M/C>O&&(w={val:b.val,nopad:1},T={val:_.val,nopad:1},O=M/C));if(h===v){var I=h-1,D=h+1;if(E)if(0===h)i=[0,1];else{var z=(h>0?f:c).reduce((function(t,e){return Math.max(t,l(e))}),0),R=h/(1-Math.min(.5,z/C));i=h>0?[0,R]:[R,0]}else i=L?[Math.max(0,I),Math.max(1,D)]:[I,D]}else E?(w.val>=0&&(w={val:0,nopad:1}),T.val<=0&&(T={val:0,nopad:1})):L&&(w.val-O*s(w)<0&&(w={val:0,nopad:1}),T.val<=0&&(T={val:1,nopad:1})),O=(T.val-w.val-p(e,b.val,_.val))/(C-s(w)-l(T)),i=[w.val-O*s(w),T.val+O*l(T)];return i=k(i,e),e.limitRange&&e.limitRange(),m&&i.reverse(),a.simpleMap(i,e.l2r||Number)}function p(t,e,r){var n=0;if(t.rangebreaks)for(var i=t.locateBreaks(e,r),a=0;a<i.length;a++){var o=i[a];n+=o.max-o.min}return n}function d(t,e,r){var i=.05*e._length,o=e._anchorAxis||{};if(-1!==(e.ticklabelposition||"").indexOf("inside")||-1!==(o.ticklabelposition||"").indexOf("inside")){var s=e.isReversed();if(!s){var u=a.simpleMap(e.range,e.r2l);s=u[1]<u[0]}s&&(r=!r)}var c=0;return f(t,e._id)||(c=function(t,e,r){var i=0,o="x"===e._id.charAt(0);for(var s in t._plots){var u=t._plots[s];if(e._id===u.xaxis._id||e._id===u.yaxis._id){var c=(o?u.yaxis:u.xaxis)||{};if(-1!==(c.ticklabelposition||"").indexOf("inside")&&(!r&&("left"===c.side||"bottom"===c.side)||r&&("top"===c.side||"right"===c.side))){if(c._vals){var f=a.deg2rad(c._tickAngles[c._id+"tick"]||0),h=Math.abs(Math.cos(f)),p=Math.abs(Math.sin(f));if(!c._vals[0].bb){var d=c._id+"tick";c._selections[d].each((function(t){var e=n.select(this);e.select(".text-math-group").empty()&&(t.bb=l.bBox(e.node()))}))}for(var g=0;g<c._vals.length;g++){var y=c._vals[g].bb;if(y){var m=2*v+y.width,x=2*v+y.height;i=Math.max(i,o?Math.max(m*h,x*p):Math.max(x*h,m*p))}}}"inside"===c.ticks&&"inside"===c.ticklabelposition&&(i+=c.ticklen||0)}}}return i}(t,e,r)),i=Math.max(c,i),"domain"===e.constrain&&e._inputDomain&&(i*=(e._inputDomain[1]-e._inputDomain[0])/(e.domain[1]-e.domain[0])),function(t){return t.nopad?0:t.pad+(t.extrapad?i:c)}}t.exports={applyAutorangeOptions:k,getAutoRange:h,makePadFn:d,doAutoRange:function(t,e,r){if(e.setScale(),e.autorange){e.range=r?r.slice():h(t,e),e._r=e.range.slice(),e._rl=a.simpleMap(e._r,e.r2l);var n=e._input,i={};i[e._attr+".range"]=e.range,i[e._attr+".autorange"]=e.autorange,s.call("_storeDirectGUIEdit",t.layout,t._fullLayout._preGUI,i),n.range=e.range.slice(),n.autorange=e.autorange}var o=e._anchorAxis;if(o&&o.rangeslider){var l=o.rangeslider[e._name];l&&"auto"===l.rangemode&&(l.range=h(t,e)),o._input.rangeslider[e._name]=a.extendFlat({},l)}},findExtremes:function(t,e,r){r||(r={}),t._m||t.setScale();var n,a,s,l,u,c,f,h,p,d=[],v=[],g=e.length,x=r.padded||!1,_=r.tozero&&("linear"===t.type||"-"===t.type),w="log"===t.type,T=!1,k=r.vpadLinearized||!1;function A(t){if(Array.isArray(t))return T=!0,function(e){return Math.max(Number(t[e]||0),0)};var e=Math.max(Number(t||0),0);return function(){return e}}var M=A((t._m>0?r.ppadplus:r.ppadminus)||r.ppad||0),S=A((t._m>0?r.ppadminus:r.ppadplus)||r.ppad||0),E=A(r.vpadplus||r.vpad),L=A(r.vpadminus||r.vpad);if(!T){if(h=1/0,p=-1/0,w)for(n=0;n<g;n++)(a=e[n])<h&&a>0&&(h=a),a>p&&a<o&&(p=a);else for(n=0;n<g;n++)(a=e[n])<h&&a>-o&&(h=a),a>p&&a<o&&(p=a);e=[h,p],g=2}var C={tozero:_,extrapad:x};function P(r){s=e[r],i(s)&&(c=M(r),f=S(r),k?(l=t.c2l(s)-L(r),u=t.c2l(s)+E(r)):(h=s-L(r),p=s+E(r),w&&h<p/10&&(h=p/10),l=t.c2l(h),u=t.c2l(p)),_&&(l=Math.min(0,l),u=Math.max(0,u)),b(l)&&y(d,l,f,C),b(u)&&m(v,u,c,C))}var O=Math.min(6,g);for(n=0;n<O;n++)P(n);for(n=g-1;n>=O;n--)P(n);return{min:d,max:v,opts:r}},concatExtremes:g};var v=3;function g(t,e,r){var n,i,a,o=e._id,s=t._fullData,l=t._fullLayout,u=[],f=[];function h(t,e){for(n=0;n<e.length;n++){var r=t[e[n]],s=(r._extremes||{})[o];if(!0===r.visible&&s){for(i=0;i<s.min.length;i++)a=s.min[i],y(u,a.val,a.pad,{extrapad:a.extrapad});for(i=0;i<s.max.length;i++)a=s.max[i],m(f,a.val,a.pad,{extrapad:a.extrapad})}}}if(h(s,e._traceIndices),h(l.annotations||[],e._annIndices||[]),h(l.shapes||[],e._shapeIndices||[]),e._matchGroup&&!r)for(var p in e._matchGroup)if(p!==e._id){var d=c(t,p),v=g(t,d,!0),x=e._length/d._length;for(i=0;i<v.min.length;i++)a=v.min[i],y(u,a.val,a.pad*x,{extrapad:a.extrapad});for(i=0;i<v.max.length;i++)a=v.max[i],m(f,a.val,a.pad*x,{extrapad:a.extrapad})}return{min:u,max:f}}function y(t,e,r,n){x(t,e,r,n,_)}function m(t,e,r,n){x(t,e,r,n,w)}function x(t,e,r,n,i){for(var a=n.tozero,o=n.extrapad,s=!0,l=0;l<t.length&&s;l++){var u=t[l];if(i(u.val,e)&&u.pad>=r&&(u.extrapad||!o)){s=!1;break}i(e,u.val)&&u.pad<=r&&(o||!u.extrapad)&&(t.splice(l,1),l--)}if(s){var c=a&&0===e;t.push({val:e,pad:c?0:r,extrapad:!c&&o})}}function b(t){return i(t)&&Math.abs(t)<o}function _(t,e){return t<=e}function w(t,e){return t>=e}function T(t,e,r){return void 0===e||void 0===r||(e=t.d2l(e))<t.d2l(r)}function k(t,e){if(!e||!e.autorangeoptions)return t;var r=t[0],n=t[1],i=e.autorangeoptions.include;if(void 0!==i){var o=e.d2l(r),s=e.d2l(n);a.isArrayOrTypedArray(i)||(i=[i]);for(var l=0;l<i.length;l++){var u=e.d2l(i[l]);o>=u&&(o=u,r=u),s<=u&&(s=u,n=u)}}return r=function(t,e){var r=e.autorangeoptions;return r&&void 0!==r.minallowed&&T(e,r.minallowed,r.maxallowed)?r.minallowed:r&&void 0!==r.clipmin&&T(e,r.clipmin,r.clipmax)?Math.max(t,e.d2l(r.clipmin)):t}(r,e),n=function(t,e){var r=e.autorangeoptions;return r&&void 0!==r.maxallowed&&T(e,r.minallowed,r.maxallowed)?r.maxallowed:r&&void 0!==r.clipmax&&T(e,r.clipmin,r.clipmax)?Math.min(t,e.d2l(r.clipmax)):t}(n,e),[r,n]}},23074:function(t){"use strict";t.exports=function(t,e,r){var n,i;if(r){var a="reversed"===e||"min reversed"===e||"max reversed"===e;n=r[a?1:0],i=r[a?0:1]}var o=t("autorangeoptions.minallowed",null===i?n:void 0),s=t("autorangeoptions.maxallowed",null===n?i:void 0);void 0===o&&t("autorangeoptions.clipmin"),void 0===s&&t("autorangeoptions.clipmax"),t("autorangeoptions.include")}},89298:function(t,e,r){"use strict";var n=r(39898),i=r(92770),a=r(74875),o=r(73972),s=r(71828),l=s.strTranslate,u=r(63893),c=r(92998),f=r(7901),h=r(91424),p=r(13838),d=r(66287),v=r(50606),g=v.ONEMAXYEAR,y=v.ONEAVGYEAR,m=v.ONEMINYEAR,x=v.ONEMAXQUARTER,b=v.ONEAVGQUARTER,_=v.ONEMINQUARTER,w=v.ONEMAXMONTH,T=v.ONEAVGMONTH,k=v.ONEMINMONTH,A=v.ONEWEEK,M=v.ONEDAY,S=M/2,E=v.ONEHOUR,L=v.ONEMIN,C=v.ONESEC,P=v.MINUS_SIGN,O=v.BADNUM,I={K:"zeroline"},D={K:"gridline",L:"path"},z={K:"minor-gridline",L:"path"},R={K:"tick",L:"path"},F={K:"tick",L:"text"},B={width:["x","r","l","xl","xr"],height:["y","t","b","yt","yb"],right:["r","xr"],left:["l","xl"],top:["t","yt"],bottom:["b","yb"]},N=r(18783),j=N.MID_SHIFT,U=N.CAP_SHIFT,V=N.LINE_SPACING,H=N.OPPOSITE_SIDE,q=t.exports={};q.setConvert=r(21994);var G=r(4322),Z=r(41675),Y=Z.idSort,W=Z.isLinked;q.id2name=Z.id2name,q.name2id=Z.name2id,q.cleanId=Z.cleanId,q.list=Z.list,q.listIds=Z.listIds,q.getFromId=Z.getFromId,q.getFromTrace=Z.getFromTrace;var X=r(71739);q.getAutoRange=X.getAutoRange,q.findExtremes=X.findExtremes;var J=1e-4;function K(t){var e=(t[1]-t[0])*J;return[t[0]-e,t[1]+e]}q.coerceRef=function(t,e,r,n,i,a){var o=n.charAt(n.length-1),l=r._fullLayout._subplots[o+"axis"],u=n+"ref",c={};return i||(i=l[0]||("string"==typeof a?a:a[0])),a||(a=i),l=l.concat(l.map((function(t){return t+" domain"}))),c[u]={valType:"enumerated",values:l.concat(a?"string"==typeof a?[a]:a:[]),dflt:i},s.coerce(t,e,c,u)},q.getRefType=function(t){return void 0===t?t:"paper"===t?"paper":"pixel"===t?"pixel":/( domain)$/.test(t)?"domain":"range"},q.coercePosition=function(t,e,r,n,i,a){var o,l;if("range"!==q.getRefType(n))o=s.ensureNumber,l=r(i,a);else{var u=q.getFromId(e,n);l=r(i,a=u.fraction2r(a)),o=u.cleanPos}t[i]=o(l)},q.cleanPosition=function(t,e,r){return("paper"===r||"pixel"===r?s.ensureNumber:q.getFromId(e,r).cleanPos)(t)},q.redrawComponents=function(t,e){e=e||q.listIds(t);var r=t._fullLayout;function n(n,i,a,s){for(var l=o.getComponentMethod(n,i),u={},c=0;c<e.length;c++)for(var f=r[q.id2name(e[c])][a],h=0;h<f.length;h++){var p=f[h];if(!u[p]&&(l(t,p),u[p]=1,s))return}}n("annotations","drawOne","_annIndices"),n("shapes","drawOne","_shapeIndices"),n("images","draw","_imgIndices",!0),n("selections","drawOne","_selectionIndices")};var $=q.getDataConversions=function(t,e,r,n){var i,a="x"===r||"y"===r||"z"===r?r:n;if(Array.isArray(a)){if(i={type:G(n,void 0,{autotypenumbers:t._fullLayout.autotypenumbers}),_categories:[]},q.setConvert(i),"category"===i.type)for(var o=0;o<n.length;o++)i.d2c(n[o])}else i=q.getFromTrace(t,e,a);return i?{d2c:i.d2c,c2d:i.c2d}:"ids"===a?{d2c:tt,c2d:tt}:{d2c:Q,c2d:Q}};function Q(t){return+t}function tt(t){return String(t)}function et(t,e){return Math.abs((t/e+.5)%1-.5)<.001}function rt(t,e){return Math.abs(t/e-1)<.001}function nt(t){return+t.substring(1)}function it(t,e){return t.rangebreaks&&(e=e.filter((function(e){return t.maskBreaks(e.x)!==O}))),e}function at(t){var e=t._mainAxis,r=[];if(e._vals)for(var n=0;n<e._vals.length;n++)if(!e._vals[n].noTick){var i=e.l2p(e._vals[n].x),a=t.p2l(i),o=q.tickText(t,a);e._vals[n].minor&&(o.minor=!0,o.text=""),r.push(o)}return it(t,r)}function ot(t){var e=K(s.simpleMap(t.range,t.r2l)),r=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]),i="category"===t.type?t.d2l_noadd:t.d2l;"log"===t.type&&"L"!==String(t.dtick).charAt(0)&&(t.dtick="L"+Math.pow(10,Math.floor(Math.min(t.range[0],t.range[1]))-1));for(var a=[],o=0;o<=1;o++)if(!o||t.minor){var l=o?t.minor.tickvals:t.tickvals,u=o?[]:t.ticktext;if(l){Array.isArray(u)||(u=[]);for(var c=0;c<l.length;c++){var f=i(l[c]);if(f>r&&f<n){var h=void 0===u[c]?q.tickText(t,f):gt(t,f,String(u[c]));o&&(h.minor=!0,h.text=""),a.push(h)}}}}return it(t,a)}q.getDataToCoordFunc=function(t,e,r,n){return $(t,e,r,n).d2c},q.counterLetter=function(t){var e=t.charAt(0);return"x"===e?"y":"y"===e?"x":void 0},q.minDtick=function(t,e,r,n){-1===["log","category","multicategory"].indexOf(t.type)&&n?void 0===t._minDtick?(t._minDtick=e,t._forceTick0=r):t._minDtick&&((t._minDtick/e+1e-6)%1<2e-6&&((r-t._forceTick0)/e%1+1.000001)%1<2e-6?(t._minDtick=e,t._forceTick0=r):((e/t._minDtick+1e-6)%1>2e-6||((r-t._forceTick0)/t._minDtick%1+1.000001)%1>2e-6)&&(t._minDtick=0)):t._minDtick=0},q.saveRangeInitial=function(t,e){for(var r=q.list(t,"",!0),n=!1,i=0;i<r.length;i++){var a=r[i],o=void 0===a._rangeInitial0&&void 0===a._rangeInitial1,s=o||a.range[0]!==a._rangeInitial0||a.range[1]!==a._rangeInitial1,l=a.autorange;(o&&!0!==l||e&&s)&&(a._rangeInitial0="min"===l||"max reversed"===l?void 0:a.range[0],a._rangeInitial1="max"===l||"min reversed"===l?void 0:a.range[1],a._autorangeInitial=l,n=!0)}return n},q.saveShowSpikeInitial=function(t,e){for(var r=q.list(t,"",!0),n=!1,i="on",a=0;a<r.length;a++){var o=r[a],s=void 0===o._showSpikeInitial,l=s||!(o.showspikes===o._showspikes);(s||e&&l)&&(o._showSpikeInitial=o.showspikes,n=!0),"on"!==i||o.showspikes||(i="off")}return t._fullLayout._cartesianSpikesEnabled=i,n},q.autoBin=function(t,e,r,n,a,o){var l,u=s.aggNums(Math.min,null,t),c=s.aggNums(Math.max,null,t);if("category"===e.type||"multicategory"===e.type)return{start:u-.5,end:c+.5,size:Math.max(1,Math.round(o)||1),_dataSpan:c-u};if(a||(a=e.calendar),l="log"===e.type?{type:"linear",range:[u,c]}:{type:e.type,range:s.simpleMap([u,c],e.c2r,0,a),calendar:a},q.setConvert(l),o=o&&d.dtick(o,l.type))l.dtick=o,l.tick0=d.tick0(void 0,l.type,a);else{var f;if(r)f=(c-u)/r;else{var h=s.distinctVals(t),p=Math.pow(10,Math.floor(Math.log(h.minDiff)/Math.LN10)),v=p*s.roundUp(h.minDiff/p,[.9,1.9,4.9,9.9],!0);f=Math.max(v,2*s.stdev(t)/Math.pow(t.length,n?.25:.4)),i(f)||(f=1)}q.autoTicks(l,f)}var g,y=l.dtick,m=q.tickIncrement(q.tickFirst(l),y,"reverse",a);if("number"==typeof y)m=function(t,e,r,n,a){var o=0,s=0,l=0,u=0;function c(e){return(1+100*(e-t)/r.dtick)%100<2}for(var f=0;f<e.length;f++)e[f]%1==0?l++:i(e[f])||u++,c(e[f])&&o++,c(e[f]+r.dtick/2)&&s++;var h=e.length-u;if(l===h&&"date"!==r.type)r.dtick<1?t=n-.5*r.dtick:(t-=.5)+r.dtick<n&&(t+=r.dtick);else if(s<.1*h&&(o>.3*h||c(n)||c(a))){var p=r.dtick/2;t+=t+p<n?p:-p}return t}(m,t,l,u,c),g=m+(1+Math.floor((c-m)/y))*y;else for("M"===l.dtick.charAt(0)&&(m=function(t,e,r,n,i){var a=s.findExactDates(e,i);if(a.exactDays>.8){var o=Number(r.substr(1));a.exactYears>.8&&o%12==0?t=q.tickIncrement(t,"M6","reverse")+1.5*M:a.exactMonths>.8?t=q.tickIncrement(t,"M1","reverse")+15.5*M:t-=S;var l=q.tickIncrement(t,r);if(l<=n)return l}return t}(m,t,y,u,a)),g=m;g<=c;)g=q.tickIncrement(g,y,!1,a);return{start:e.c2r(m,0,a),end:e.c2r(g,0,a),size:y,_dataSpan:c-u}},q.prepMinorTicks=function(t,e,r){if(!e.minor.dtick){delete t.dtick;var n,a=e.dtick&&i(e._tmin);if(a){var o=q.tickIncrement(e._tmin,e.dtick,!0);n=[e._tmin,.99*o+.01*e._tmin]}else{var l=s.simpleMap(e.range,e.r2l);n=[l[0],.8*l[0]+.2*l[1]]}if(t.range=s.simpleMap(n,e.l2r),t._isMinor=!0,q.prepTicks(t,r),a){var u=i(e.dtick),c=i(t.dtick),f=u?e.dtick:+e.dtick.substring(1),h=c?t.dtick:+t.dtick.substring(1);u&&c?et(f,h)?f===2*A&&h===2*M&&(t.dtick=A):f===2*A&&h===3*M?t.dtick=A:f!==A||(e._input.minor||{}).nticks?rt(f/h,2.5)?t.dtick=f/2:t.dtick=f:t.dtick=M:"M"===String(e.dtick).charAt(0)?c?t.dtick="M1":et(f,h)?f>=12&&2===h&&(t.dtick="M3"):t.dtick=e.dtick:"L"===String(t.dtick).charAt(0)?"L"===String(e.dtick).charAt(0)?et(f,h)||(t.dtick=rt(f/h,2.5)?e.dtick/2:e.dtick):t.dtick="D1":"D2"===t.dtick&&+e.dtick>1&&(t.dtick=1)}t.range=e.range}void 0===e.minor._tick0Init&&(t.tick0=e.tick0)},q.prepTicks=function(t,e){var r=s.simpleMap(t.range,t.r2l,void 0,void 0,e);if("auto"===t.tickmode||!t.dtick){var n,a=t.nticks;a||("category"===t.type||"multicategory"===t.type?(n=t.tickfont?s.bigFont(t.tickfont.size||12):15,a=t._length/n):(n="y"===t._id.charAt(0)?40:80,a=s.constrain(t._length/n,4,9)+1),"radialaxis"===t._name&&(a*=2)),t.minor&&"array"!==t.minor.tickmode||"array"===t.tickmode&&(a*=100),t._roughDTick=Math.abs(r[1]-r[0])/a,q.autoTicks(t,t._roughDTick),t._minDtick>0&&t.dtick<2*t._minDtick&&(t.dtick=t._minDtick,t.tick0=t.l2r(t._forceTick0))}"period"===t.ticklabelmode&&function(t){var e;function r(){return!(i(t.dtick)||"M"!==t.dtick.charAt(0))}var n=r(),a=q.getTickFormat(t);if(a){var o=t._dtickInit!==t.dtick;/%[fLQsSMX]/.test(a)||(/%[HI]/.test(a)?(e=E,o&&!n&&t.dtick<E&&(t.dtick=E)):/%p/.test(a)?(e=S,o&&!n&&t.dtick<S&&(t.dtick=S)):/%[Aadejuwx]/.test(a)?(e=M,o&&!n&&t.dtick<M&&(t.dtick=M)):/%[UVW]/.test(a)?(e=A,o&&!n&&t.dtick<A&&(t.dtick=A)):/%[Bbm]/.test(a)?(e=T,o&&(n?nt(t.dtick)<1:t.dtick<k)&&(t.dtick="M1")):/%[q]/.test(a)?(e=b,o&&(n?nt(t.dtick)<3:t.dtick<_)&&(t.dtick="M3")):/%[Yy]/.test(a)&&(e=y,o&&(n?nt(t.dtick)<12:t.dtick<m)&&(t.dtick="M12")))}(n=r())&&t.tick0===t._dowTick0&&(t.tick0=t._rawTick0),t._definedDelta=e}(t),t.tick0||(t.tick0="date"===t.type?"2000-01-01":0),"date"===t.type&&t.dtick<.1&&(t.dtick=.1),vt(t)},q.calcTicks=function(t,e){for(var r,n,a=t.type,o=t.calendar,l=t.ticklabelstep,u="period"===t.ticklabelmode,c=s.simpleMap(t.range,t.r2l,void 0,void 0,e),f=c[1]<c[0],h=Math.min(c[0],c[1]),p=Math.max(c[0],c[1]),d=Math.max(1e3,t._length||0),v=[],L=[],C=[],P=[],I=t.minor&&(t.minor.ticks||t.minor.showgrid),D=1;D>=(I?0:1);D--){var z=!D;D?(t._dtickInit=t.dtick,t._tick0Init=t.tick0):(t.minor._dtickInit=t.minor.dtick,t.minor._tick0Init=t.minor.tick0);var R=D?t:s.extendFlat({},t,t.minor);if(z?q.prepMinorTicks(R,t,e):q.prepTicks(R,e),"array"!==R.tickmode)if("sync"!==R.tickmode){var F=K(c),B=F[0],N=F[1],j=i(R.dtick),U="log"===a&&!(j||"L"===R.dtick.charAt(0)),V=q.tickFirst(R,e);if(D){if(t._tmin=V,V<B!==f)break;"category"!==a&&"multicategory"!==a||(N=f?Math.max(-.5,N):Math.min(t._categories.length-.5,N))}var H,G,Z=null,Y=V;D&&(j?G=t.dtick:"date"===a?"string"==typeof t.dtick&&"M"===t.dtick.charAt(0)&&(G=T*t.dtick.substring(1)):G=t._roughDTick,H=Math.round((t.r2l(Y)-t.r2l(t.tick0))/G)-1);var W=R.dtick;for(R.rangebreaks&&R._tick0Init!==R.tick0&&(Y=zt(Y,t),f||(Y=q.tickIncrement(Y,W,!f,o))),D&&u&&(Y=q.tickIncrement(Y,W,!f,o),H--);f?Y>=N:Y<=N;Y=q.tickIncrement(Y,W,f,o)){if(D&&H++,R.rangebreaks&&!f){if(Y<B)continue;if(R.maskBreaks(Y)===O&&zt(Y,R)>=p)break}if(C.length>d||Y===Z)break;Z=Y;var X={value:Y};D?(U&&Y!==(0|Y)&&(X.simpleLabel=!0),l>1&&H%l&&(X.skipLabel=!0),C.push(X)):(X.minor=!0,P.push(X))}}else C=[],v=at(t);else D?(C=[],v=ot(t)):(P=[],L=ot(t))}if(I&&!("inside"===t.minor.ticks&&"outside"===t.ticks||"outside"===t.minor.ticks&&"inside"===t.ticks)){for(var J=C.map((function(t){return t.value})),$=[],Q=0;Q<P.length;Q++){var tt=P[Q],et=tt.value;if(-1===J.indexOf(et)){for(var rt=!1,nt=0;!rt&&nt<C.length;nt++)1e7+C[nt].value===1e7+et&&(rt=!0);rt||$.push(tt)}}P=$}if(u&&function(t,e,r){for(var n=0;n<t.length;n++){var i=t[n].value,a=n,o=n+1;n<t.length-1?(a=n,o=n+1):n>0?(a=n-1,o=n):(a=n,o=n);var s,l=t[a].value,u=t[o].value,c=Math.abs(u-l),f=r||c,h=0;f>=m?h=c>=m&&c<=g?c:y:r===b&&f>=_?h=c>=_&&c<=x?c:b:f>=k?h=c>=k&&c<=w?c:T:r===A&&f>=A?h=A:f>=M?h=M:r===S&&f>=S?h=S:r===E&&f>=E&&(h=E),h>=c&&(h=c,s=!0);var p=i+h;if(e.rangebreaks&&h>0){for(var d=0,v=0;v<84;v++){var L=(v+.5)/84;e.maskBreaks(i*(1-L)+L*p)!==O&&d++}(h*=d/84)||(t[n].drop=!0),s&&c>A&&(h=c)}(h>0||0===n)&&(t[n].periodX=i+h/2)}}(C,t,t._definedDelta),t.rangebreaks){var it="y"===t._id.charAt(0),st=1;"auto"===t.tickmode&&(st=t.tickfont?t.tickfont.size:12);var lt=NaN;for(r=C.length-1;r>-1;r--)if(C[r].drop)C.splice(r,1);else{C[r].value=zt(C[r].value,t);var ut=t.c2p(C[r].value);(it?lt>ut-st:lt<ut+st)?C.splice(f?r+1:r,1):lt=ut}}Dt(t)&&360===Math.abs(c[1]-c[0])&&C.pop(),t._tmax=(C[C.length-1]||{}).value,t._prevDateHead="",t._inCalcTicks=!0;var ct,ft,ht=function(e){e.text="",t._prevDateHead=n};for(C=C.concat(P),r=0;r<C.length;r++){var pt=C[r].minor,dt=C[r].value;pt?L.push({x:dt,minor:!0}):(n=t._prevDateHead,ct=q.tickText(t,dt,!1,C[r].simpleLabel),void 0!==(ft=C[r].periodX)&&(ct.periodX=ft,(ft>p||ft<h)&&(ft>p&&(ct.periodX=p),ft<h&&(ct.periodX=h),ht(ct))),C[r].skipLabel&&ht(ct),v.push(ct))}return v=v.concat(L),t._inCalcTicks=!1,u&&v.length&&(v[0].noTick=!0),v};var st=[2,5,10],lt=[1,2,3,6,12],ut=[1,2,5,10,15,30],ct=[1,2,3,7,14],ft=[-.046,0,.301,.477,.602,.699,.778,.845,.903,.954,1],ht=[-.301,0,.301,.699,1],pt=[15,30,45,90,180];function dt(t,e,r){return e*s.roundUp(t/e,r)}function vt(t){var e=t.dtick;if(t._tickexponent=0,i(e)||"string"==typeof e||(e=1),"category"!==t.type&&"multicategory"!==t.type||(t._tickround=null),"date"===t.type){var r=t.r2l(t.tick0),n=t.l2r(r).replace(/(^-|i)/g,""),a=n.length;if("M"===String(e).charAt(0))a>10||"01-01"!==n.substr(5)?t._tickround="d":t._tickround=+e.substr(1)%12==0?"y":"m";else if(e>=M&&a<=10||e>=15*M)t._tickround="d";else if(e>=L&&a<=16||e>=E)t._tickround="M";else if(e>=C&&a<=19||e>=L)t._tickround="S";else{var o=t.l2r(r+e).replace(/^-/,"").length;t._tickround=Math.max(a,o)-20,t._tickround<0&&(t._tickround=4)}}else if(i(e)||"L"===e.charAt(0)){var s=t.range.map(t.r2d||Number);i(e)||(e=Number(e.substr(1))),t._tickround=2-Math.floor(Math.log(e)/Math.LN10+.01);var l=Math.max(Math.abs(s[0]),Math.abs(s[1])),u=Math.floor(Math.log(l)/Math.LN10+.01),c=void 0===t.minexponent?3:t.minexponent;Math.abs(u)>c&&(mt(t.exponentformat)&&!xt(u)?t._tickexponent=3*Math.round((u-1)/3):t._tickexponent=u)}else t._tickround=null}function gt(t,e,r){var n=t.tickfont||{};return{x:e,dx:0,dy:0,text:r||"",fontSize:n.size,font:n.family,fontColor:n.color}}q.autoTicks=function(t,e,r){var n;function a(t){return Math.pow(t,Math.floor(Math.log(e)/Math.LN10))}if("date"===t.type){t.tick0=s.dateTick0(t.calendar,0);var o=2*e;if(o>y)e/=y,n=a(10),t.dtick="M"+12*dt(e,n,st);else if(o>T)e/=T,t.dtick="M"+dt(e,1,lt);else if(o>M){if(t.dtick=dt(e,M,t._hasDayOfWeekBreaks?[1,2,7,14]:ct),!r){var l=q.getTickFormat(t),u="period"===t.ticklabelmode;u&&(t._rawTick0=t.tick0),/%[uVW]/.test(l)?t.tick0=s.dateTick0(t.calendar,2):t.tick0=s.dateTick0(t.calendar,1),u&&(t._dowTick0=t.tick0)}}else o>E?t.dtick=dt(e,E,lt):o>L?t.dtick=dt(e,L,ut):o>C?t.dtick=dt(e,C,ut):(n=a(10),t.dtick=dt(e,n,st))}else if("log"===t.type){t.tick0=0;var c=s.simpleMap(t.range,t.r2l);if(t._isMinor&&(e*=1.5),e>.7)t.dtick=Math.ceil(e);else if(Math.abs(c[1]-c[0])<1){var f=1.5*Math.abs((c[1]-c[0])/e);e=Math.abs(Math.pow(10,c[1])-Math.pow(10,c[0]))/f,n=a(10),t.dtick="L"+dt(e,n,st)}else t.dtick=e>.3?"D2":"D1"}else"category"===t.type||"multicategory"===t.type?(t.tick0=0,t.dtick=Math.ceil(Math.max(e,1))):Dt(t)?(t.tick0=0,n=1,t.dtick=dt(e,n,pt)):(t.tick0=0,n=a(10),t.dtick=dt(e,n,st));if(0===t.dtick&&(t.dtick=1),!i(t.dtick)&&"string"!=typeof t.dtick){var h=t.dtick;throw t.dtick=1,"ax.dtick error: "+String(h)}},q.tickIncrement=function(t,e,r,a){var o=r?-1:1;if(i(e))return s.increment(t,o*e);var l=e.charAt(0),u=o*Number(e.substr(1));if("M"===l)return s.incrementMonth(t,u,a);if("L"===l)return Math.log(Math.pow(10,t)+u)/Math.LN10;if("D"===l){var c="D2"===e?ht:ft,f=t+.01*o,h=s.roundUp(s.mod(f,1),c,r);return Math.floor(f)+Math.log(n.round(Math.pow(10,h),1))/Math.LN10}throw"unrecognized dtick "+String(e)},q.tickFirst=function(t,e){var r=t.r2l||Number,a=s.simpleMap(t.range,r,void 0,void 0,e),o=a[1]<a[0],l=o?Math.floor:Math.ceil,u=K(a)[0],c=t.dtick,f=r(t.tick0);if(i(c)){var h=l((u-f)/c)*c+f;return"category"!==t.type&&"multicategory"!==t.type||(h=s.constrain(h,0,t._categories.length-1)),h}var p=c.charAt(0),d=Number(c.substr(1));if("M"===p){for(var v,g,y,m=0,x=f;m<10;){if(((v=q.tickIncrement(x,c,o,t.calendar))-u)*(x-u)<=0)return o?Math.min(x,v):Math.max(x,v);g=(u-(x+v)/2)/(v-x),y=p+(Math.abs(Math.round(g))||1)*d,x=q.tickIncrement(x,y,g<0?!o:o,t.calendar),m++}return s.error("tickFirst did not converge",t),x}if("L"===p)return Math.log(l((Math.pow(10,u)-f)/d)*d+f)/Math.LN10;if("D"===p){var b="D2"===c?ht:ft,_=s.roundUp(s.mod(u,1),b,o);return Math.floor(u)+Math.log(n.round(Math.pow(10,_),1))/Math.LN10}throw"unrecognized dtick "+String(c)},q.tickText=function(t,e,r,n){var a,o=gt(t,e),l="array"===t.tickmode,u=r||l,c=t.type,f="category"===c?t.d2l_noadd:t.d2l;if(l&&Array.isArray(t.ticktext)){var h=s.simpleMap(t.range,t.r2l),p=(Math.abs(h[1]-h[0])-(t._lBreaks||0))/1e4;for(a=0;a<t.ticktext.length&&!(Math.abs(e-f(t.tickvals[a]))<p);a++);if(a<t.ticktext.length)return o.text=String(t.ticktext[a]),o}function d(n){if(void 0===n)return!0;if(r)return"none"===n;var i={first:t._tmin,last:t._tmax}[n];return"all"!==n&&e!==i}var v=r?"never":"none"!==t.exponentformat&&d(t.showexponent)?"hide":"";if("date"===c?function(t,e,r,n){var a=t._tickround,o=r&&t.hoverformat||q.getTickFormat(t);(n=!o&&n)&&(a=i(a)?4:{y:"m",m:"d",d:"M",M:"S",S:4}[a]);var l,u=s.formatDate(e.x,o,a,t._dateFormat,t.calendar,t._extraFormat),c=u.indexOf("\n");if(-1!==c&&(l=u.substr(c+1),u=u.substr(0,c)),n&&(void 0===l||"00:00:00"!==u&&"00:00"!==u?8===u.length&&(u=u.replace(/:00$/,"")):(u=l,l="")),l)if(r)"d"===a?u+=", "+l:u=l+(u?", "+u:"");else if(t._inCalcTicks&&t._prevDateHead===l){var f=Rt(t),h=t._trueSide||t.side;(!f&&"top"===h||f&&"bottom"===h)&&(u+="<br> ")}else t._prevDateHead=l,u+="<br>"+l;e.text=u}(t,o,r,u):"log"===c?function(t,e,r,n,a){var o=t.dtick,l=e.x,u=t.tickformat,c="string"==typeof o&&o.charAt(0);if("never"===a&&(a=""),n&&"L"!==c&&(o="L3",c="L"),u||"L"===c)e.text=bt(Math.pow(10,l),t,a,n);else if(i(o)||"D"===c&&s.mod(l+.01,1)<.1){var f=Math.round(l),h=Math.abs(f),p=t.exponentformat;"power"===p||mt(p)&&xt(f)?(e.text=0===f?1:1===f?"10":"10<sup>"+(f>1?"":P)+h+"</sup>",e.fontSize*=1.25):("e"===p||"E"===p)&&h>2?e.text="1"+p+(f>0?"+":P)+h:(e.text=bt(Math.pow(10,l),t,"","fakehover"),"D1"===o&&"y"===t._id.charAt(0)&&(e.dy-=e.fontSize/6))}else{if("D"!==c)throw"unrecognized dtick "+String(o);e.text=String(Math.round(Math.pow(10,s.mod(l,1)))),e.fontSize*=.75}if("D1"===t.dtick){var d=String(e.text).charAt(0);"0"!==d&&"1"!==d||("y"===t._id.charAt(0)?e.dx-=e.fontSize/4:(e.dy+=e.fontSize/2,e.dx+=(t.range[1]>t.range[0]?1:-1)*e.fontSize*(l<0?.5:.25)))}}(t,o,0,u,v):"category"===c?function(t,e){var r=t._categories[Math.round(e.x)];void 0===r&&(r=""),e.text=String(r)}(t,o):"multicategory"===c?function(t,e,r){var n=Math.round(e.x),i=t._categories[n]||[],a=void 0===i[1]?"":String(i[1]),o=void 0===i[0]?"":String(i[0]);r?e.text=o+" - "+a:(e.text=a,e.text2=o)}(t,o,r):Dt(t)?function(t,e,r,n,i){if("radians"!==t.thetaunit||r)e.text=bt(e.x,t,i,n);else{var a=e.x/180;if(0===a)e.text="0";else{var o=function(t){function e(t,e){return Math.abs(t-e)<=1e-6}var r=function(t){for(var r=1;!e(Math.round(t*r)/r,t);)r*=10;return r}(t),n=t*r,i=Math.abs(function t(r,n){return e(n,0)?r:t(n,r%n)}(n,r));return[Math.round(n/i),Math.round(r/i)]}(a);if(o[1]>=100)e.text=bt(s.deg2rad(e.x),t,i,n);else{var l=e.x<0;1===o[1]?1===o[0]?e.text="π":e.text=o[0]+"π":e.text=["<sup>",o[0],"</sup>","⁄","<sub>",o[1],"</sub>","π"].join(""),l&&(e.text=P+e.text)}}}}(t,o,r,u,v):function(t,e,r,n,i){"never"===i?i="":"all"===t.showexponent&&Math.abs(e.x/t.dtick)<1e-6&&(i="hide"),e.text=bt(e.x,t,i,n)}(t,o,0,u,v),n||(t.tickprefix&&!d(t.showtickprefix)&&(o.text=t.tickprefix+o.text),t.ticksuffix&&!d(t.showticksuffix)&&(o.text+=t.ticksuffix)),t.labelalias&&t.labelalias.hasOwnProperty(o.text)){var g=t.labelalias[o.text];"string"==typeof g&&(o.text=g)}if("boundaries"===t.tickson||t.showdividers){var y=function(e){var r=t.l2p(e);return r>=0&&r<=t._length?e:null};o.xbnd=[y(o.x-.5),y(o.x+t.dtick-.5)]}return o},q.hoverLabelText=function(t,e,r){r&&(t=s.extendFlat({},t,{hoverformat:r}));var n=Array.isArray(e)?e[0]:e,i=Array.isArray(e)?e[1]:void 0;if(void 0!==i&&i!==n)return q.hoverLabelText(t,n,r)+" - "+q.hoverLabelText(t,i,r);var a="log"===t.type&&n<=0,o=q.tickText(t,t.c2l(a?-n:n),"hover").text;return a?0===n?"0":P+o:o};var yt=["f","p","n","μ","m","","k","M","G","T"];function mt(t){return"SI"===t||"B"===t}function xt(t){return t>14||t<-15}function bt(t,e,r,n){var a=t<0,o=e._tickround,l=r||e.exponentformat||"B",u=e._tickexponent,c=q.getTickFormat(e),f=e.separatethousands;if(n){var h={exponentformat:l,minexponent:e.minexponent,dtick:"none"===e.showexponent?e.dtick:i(t)&&Math.abs(t)||1,range:"none"===e.showexponent?e.range.map(e.r2d):[0,t||1]};vt(h),o=(Number(h._tickround)||0)+4,u=h._tickexponent,e.hoverformat&&(c=e.hoverformat)}if(c)return e._numFormat(c)(t).replace(/-/g,P);var p,d=Math.pow(10,-o)/2;if("none"===l&&(u=0),(t=Math.abs(t))<d)t="0",a=!1;else{if(t+=d,u&&(t*=Math.pow(10,-u),o+=u),0===o)t=String(Math.floor(t));else if(o<0){t=(t=String(Math.round(t))).substr(0,t.length+o);for(var v=o;v<0;v++)t+="0"}else{var g=(t=String(t)).indexOf(".")+1;g&&(t=t.substr(0,g+o).replace(/\.?0+$/,""))}t=s.numSeparate(t,e._separators,f)}return u&&"hide"!==l&&(mt(l)&&xt(u)&&(l="power"),p=u<0?P+-u:"power"!==l?"+"+u:String(u),"e"===l||"E"===l?t+=l+p:"power"===l?t+="×10<sup>"+p+"</sup>":"B"===l&&9===u?t+="B":mt(l)&&(t+=yt[u/3+5])),a?P+t:t}function _t(t,e){if(t){var r=Object.keys(B).reduce((function(t,r){return-1!==e.indexOf(r)&&B[r].forEach((function(e){t[e]=1})),t}),{});Object.keys(t).forEach((function(e){r[e]||(1===e.length?t[e]=0:delete t[e])}))}}function wt(t,e){for(var r=[],n={},i=0;i<e.length;i++){var a=e[i];n[a.text2]?n[a.text2].push(a.x):n[a.text2]=[a.x]}for(var o in n)r.push(gt(t,s.interp(n[o],.5),o));return r}function Tt(t){return void 0!==t.periodX?t.periodX:t.x}function kt(t){return[t.text,t.x,t.axInfo,t.font,t.fontSize,t.fontColor].join("_")}function At(t){var e=t.title.font.size,r=(t.title.text.match(u.BR_TAG_ALL)||[]).length;return t.title.hasOwnProperty("standoff")?r?e*(U+r*V):e*U:r?e*(r+1)*V:e}function Mt(t,e){var r=t.l2p(e);return r>1&&r<t._length-1}function St(t){var e=n.select(t),r=e.select(".text-math-group");return r.empty()?e.select("text"):r}function Et(t){return t._id+".automargin"}function Lt(t){return Et(t)+".mirror"}function Ct(t){return t._id+".rangeslider"}function Pt(t,e){for(var r=0;r<e.length;r++)-1===t.indexOf(e[r])&&t.push(e[r])}function Ot(t,e,r){var n,i,a=[],o=[],l=t.layout;for(n=0;n<e.length;n++)a.push(q.getFromId(t,e[n]));for(n=0;n<r.length;n++)o.push(q.getFromId(t,r[n]));var u=Object.keys(p),c=["anchor","domain","overlaying","position","side","tickangle","editType"],f=["linear","log"];for(n=0;n<u.length;n++){var h=u[n],d=a[0][h],v=o[0][h],g=!0,y=!1,m=!1;if("_"!==h.charAt(0)&&"function"!=typeof d&&-1===c.indexOf(h)){for(i=1;i<a.length&&g;i++){var x=a[i][h];"type"===h&&-1!==f.indexOf(d)&&-1!==f.indexOf(x)&&d!==x?y=!0:x!==d&&(g=!1)}for(i=1;i<o.length&&g;i++){var b=o[i][h];"type"===h&&-1!==f.indexOf(v)&&-1!==f.indexOf(b)&&v!==b?m=!0:o[i][h]!==v&&(g=!1)}g&&(y&&(l[a[0]._name].type="linear"),m&&(l[o[0]._name].type="linear"),It(l,h,a,o,t._fullLayout._dfltTitle))}}for(n=0;n<t._fullLayout.annotations.length;n++){var _=t._fullLayout.annotations[n];-1!==e.indexOf(_.xref)&&-1!==r.indexOf(_.yref)&&s.swapAttrs(l.annotations[n],["?"])}}function It(t,e,r,n,i){var a,o=s.nestedProperty,l=o(t[r[0]._name],e).get(),u=o(t[n[0]._name],e).get();for("title"===e&&(l&&l.text===i.x&&(l.text=i.y),u&&u.text===i.y&&(u.text=i.x)),a=0;a<r.length;a++)o(t,r[a]._name+"."+e).set(u);for(a=0;a<n.length;a++)o(t,n[a]._name+"."+e).set(l)}function Dt(t){return"angularaxis"===t._id}function zt(t,e){for(var r=e._rangebreaks.length,n=0;n<r;n++){var i=e._rangebreaks[n];if(t>=i.min&&t<i.max)return i.max}return t}function Rt(t){return-1!==(t.ticklabelposition||"").indexOf("inside")}function Ft(t,e){Rt(t._anchorAxis||{})&&t._hideCounterAxisInsideTickLabels&&t._hideCounterAxisInsideTickLabels(e)}function Bt(t,e,r,n){var i,a="free"===t.anchor||void 0!==t.overlaying&&!1!==t.overlaying?t.overlaying:t._id;i=n?"right"===t.side?e:-e:e,a in r||(r[a]={}),t.side in r[a]||(r[a][t.side]=0),r[a][t.side]+=i}q.getTickFormat=function(t){var e,r,n,i,a,o,s,l;function u(t){return"string"!=typeof t?t:Number(t.replace("M",""))*T}function c(t,e){var r=["L","D"];if(typeof t==typeof e){if("number"==typeof t)return t-e;var n=r.indexOf(t.charAt(0)),i=r.indexOf(e.charAt(0));return n===i?Number(t.replace(/(L|D)/g,""))-Number(e.replace(/(L|D)/g,"")):n-i}return"number"==typeof t?1:-1}function f(t,e){var r=null===e[0],n=null===e[1],i=c(t,e[0])>=0,a=c(t,e[1])<=0;return(r||i)&&(n||a)}if(t.tickformatstops&&t.tickformatstops.length>0)switch(t.type){case"date":case"linear":for(e=0;e<t.tickformatstops.length;e++)if((n=t.tickformatstops[e]).enabled&&(i=t.dtick,a=n.dtickrange,o=void 0,s=void 0,l=void 0,o=u||function(t){return t},s=a[0],l=a[1],(!s&&"number"!=typeof s||o(s)<=o(i))&&(!l&&"number"!=typeof l||o(l)>=o(i)))){r=n;break}break;case"log":for(e=0;e<t.tickformatstops.length;e++)if((n=t.tickformatstops[e]).enabled&&f(t.dtick,n.dtickrange)){r=n;break}}return r?r.value:t.tickformat},q.getSubplots=function(t,e){var r=t._fullLayout._subplots,n=r.cartesian.concat(r.gl2d||[]),i=e?q.findSubplotsWithAxis(n,e):n;return i.sort((function(t,e){var r=t.substr(1).split("y"),n=e.substr(1).split("y");return r[0]===n[0]?+r[1]-+n[1]:+r[0]-+n[0]})),i},q.findSubplotsWithAxis=function(t,e){for(var r=new RegExp("x"===e._id.charAt(0)?"^"+e._id+"y":e._id+"$"),n=[],i=0;i<t.length;i++){var a=t[i];r.test(a)&&n.push(a)}return n},q.makeClipPaths=function(t){var e=t._fullLayout;if(!e._hasOnlyLargeSploms){var r,i,a={_offset:0,_length:e.width,_id:""},o={_offset:0,_length:e.height,_id:""},s=q.list(t,"x",!0),l=q.list(t,"y",!0),u=[];for(r=0;r<s.length;r++)for(u.push({x:s[r],y:o}),i=0;i<l.length;i++)0===r&&u.push({x:a,y:l[i]}),u.push({x:s[r],y:l[i]});var c=e._clips.selectAll(".axesclip").data(u,(function(t){return t.x._id+t.y._id}));c.enter().append("clipPath").classed("axesclip",!0).attr("id",(function(t){return"clip"+e._uid+t.x._id+t.y._id})).append("rect"),c.exit().remove(),c.each((function(t){n.select(this).select("rect").attr({x:t.x._offset||0,y:t.y._offset||0,width:t.x._length||1,height:t.y._length||1})}))}},q.draw=function(t,e,r){var n=t._fullLayout;"redraw"===e&&n._paper.selectAll("g.subplot").each((function(t){var e=t[0],r=n._plots[e];if(r){var i=r.xaxis,a=r.yaxis;r.xaxislayer.selectAll("."+i._id+"tick").remove(),r.yaxislayer.selectAll("."+a._id+"tick").remove(),r.xaxislayer.selectAll("."+i._id+"tick2").remove(),r.yaxislayer.selectAll("."+a._id+"tick2").remove(),r.xaxislayer.selectAll("."+i._id+"divider").remove(),r.yaxislayer.selectAll("."+a._id+"divider").remove(),r.minorGridlayer&&r.minorGridlayer.selectAll("path").remove(),r.gridlayer&&r.gridlayer.selectAll("path").remove(),r.zerolinelayer&&r.zerolinelayer.selectAll("path").remove(),n._infolayer.select(".g-"+i._id+"title").remove(),n._infolayer.select(".g-"+a._id+"title").remove()}}));var i=e&&"redraw"!==e?e:q.listIds(t),a=q.list(t).filter((function(t){return t.autoshift})).map((function(t){return t.overlaying}));i.map((function(e){var r=q.getFromId(t,e);if("sync"===r.tickmode&&r.overlaying){var n=i.findIndex((function(t){return t===r.overlaying}));n>=0&&i.unshift(i.splice(n,1).shift())}}));var o={false:{left:0,right:0}};return s.syncOrAsync(i.map((function(e){return function(){if(e){var n=q.getFromId(t,e);r||(r={}),r.axShifts=o,r.overlayingShiftedAx=a;var i=q.drawOne(t,n,r);return n._shiftPusher&&Bt(n,n._fullDepth||0,o,!0),n._r=n.range.slice(),n._rl=s.simpleMap(n._r,n.r2l),i}}})))},q.drawOne=function(t,e,r){var n,i,l,u=(r=r||{}).axShifts||{},p=r.overlayingShiftedAx||[];e.setScale();var d=t._fullLayout,v=e._id,g=v.charAt(0),y=q.counterLetter(v),m=d._plots[e._mainSubplot];if(m){if(e._shiftPusher=e.autoshift||-1!==p.indexOf(e._id)||-1!==p.indexOf(e.overlaying),e._shiftPusher&"free"===e.anchor){var x=e.linewidth/2||0;"inside"===e.ticks&&(x+=e.ticklen),Bt(e,x,u,!0),Bt(e,e.shift||0,u,!1)}!0===r.skipTitle&&void 0!==e._shift||(e._shift=function(t,e){return t.autoshift?e[t.overlaying][t.side]:t.shift||0}(e,u));var b=m[g+"axislayer"],_=e._mainLinePosition,w=_+=e._shift,T=e._mainMirrorPosition,k=e._vals=q.calcTicks(e),A=[e.mirror,w,T].join("_");for(n=0;n<k.length;n++)k[n].axInfo=A;e._selections={},e._tickAngles&&(e._prevTickAngles=e._tickAngles),e._tickAngles={},e._depth=null;var M={};if(e.visible){var S,E,L=q.makeTransTickFn(e),C=q.makeTransTickLabelFn(e),P="inside"===e.ticks,O="outside"===e.ticks;if("boundaries"===e.tickson){var I=function(t,e){var r,n=[],i=function(t,e){var r=t.xbnd[e];null!==r&&n.push(s.extendFlat({},t,{x:r}))};if(e.length){for(r=0;r<e.length;r++)i(e[r],0);i(e[r-1],1)}return n}(0,k);E=q.clipEnds(e,I),S=P?E:I}else E=q.clipEnds(e,k),S=P&&"period"!==e.ticklabelmode?E:k;var D,z=e._gridVals=E,R=function(t,e){var r,n,i=[],a=e.length&&e[e.length-1].x<e[0].x,o=function(t,e){var r=t.xbnd[e];null!==r&&i.push(s.extendFlat({},t,{x:r}))};if(t.showdividers&&e.length){for(r=0;r<e.length;r++){var l=e[r];l.text2!==n&&o(l,a?1:0),n=l.text2}o(e[r-1],a?0:1)}return i}(e,k);if(!d._hasOnlyLargeSploms){var F=e._subplotsWith,B={};for(n=0;n<F.length;n++){i=F[n];var N=(l=d._plots[i])[y+"axis"],j=N._mainAxis._id;if(!B[j]){B[j]=1;var U="x"===g?"M0,"+N._offset+"v"+N._length:"M"+N._offset+",0h"+N._length;q.drawGrid(t,e,{vals:z,counterAxis:N,layer:l.gridlayer.select("."+v),minorLayer:l.minorGridlayer.select("."+v),path:U,transFn:L}),q.drawZeroLine(t,e,{counterAxis:N,layer:l.zerolinelayer,path:U,transFn:L})}}}var G=q.getTickSigns(e),Z=q.getTickSigns(e,"minor");if(e.ticks||e.minor&&e.minor.ticks){var Y,W,X,J,K=q.makeTickPath(e,w,G[2]),$=q.makeTickPath(e,w,Z[2],{minor:!0});if(e._anchorAxis&&e.mirror&&!0!==e.mirror?(Y=q.makeTickPath(e,T,G[3]),W=q.makeTickPath(e,T,Z[3],{minor:!0}),X=K+Y,J=$+W):(Y="",W="",X=K,J=$),e.showdividers&&O&&"boundaries"===e.tickson){var Q={};for(n=0;n<R.length;n++)Q[R[n].x]=1;D=function(t){return Q[t.x]?Y:X}}else D=function(t){return t.minor?J:X}}if(q.drawTicks(t,e,{vals:S,layer:b,path:D,transFn:L}),"allticks"===e.mirror){var tt=Object.keys(e._linepositions||{});for(n=0;n<tt.length;n++){i=tt[n],l=d._plots[i];var et=e._linepositions[i]||[],rt=et[0],nt=et[1],it=et[2],at=q.makeTickPath(e,rt,it?G[0]:Z[0],{minor:it})+q.makeTickPath(e,nt,it?G[1]:Z[1],{minor:it});q.drawTicks(t,e,{vals:S,layer:l[g+"axislayer"],path:at,transFn:L})}}var ot=[];if(ot.push((function(){return q.drawLabels(t,e,{vals:k,layer:b,plotinfo:l,transFn:C,labelFns:q.makeLabelFns(e,w)})})),"multicategory"===e.type){var st={x:2,y:10}[g];ot.push((function(){var r={x:"height",y:"width"}[g],n=ut()[r]+st+(e._tickAngles[v+"tick"]?e.tickfont.size*V:0);return q.drawLabels(t,e,{vals:wt(e,k),layer:b,cls:v+"tick2",repositionOnUpdate:!0,secondary:!0,transFn:L,labelFns:q.makeLabelFns(e,w+n*G[4])})})),ot.push((function(){return e._depth=G[4]*(ut("tick2")[e.side]-w),function(t,e,r){var n=e._id+"divider",i=r.vals,a=r.layer.selectAll("path."+n).data(i,kt);a.exit().remove(),a.enter().insert("path",":first-child").classed(n,1).classed("crisp",1).call(f.stroke,e.dividercolor).style("stroke-width",h.crispRound(t,e.dividerwidth,1)+"px"),a.attr("transform",r.transFn).attr("d",r.path)}(t,e,{vals:R,layer:b,path:q.makeTickPath(e,w,G[4],{len:e._depth}),transFn:L})}))}else e.title.hasOwnProperty("standoff")&&ot.push((function(){e._depth=G[4]*(ut()[e.side]-w)}));var lt=o.getComponentMethod("rangeslider","isVisible")(e);return r.skipTitle||lt&&"bottom"===e.side||ot.push((function(){return function(t,e){var r,n=t._fullLayout,i=e._id,a=i.charAt(0),o=e.title.font.size;if(e.title.hasOwnProperty("standoff"))r=e._depth+e.title.standoff+At(e);else{var s=Rt(e);if("multicategory"===e.type)r=e._depth;else{var l=1.5*o;s&&(l=.5*o,"outside"===e.ticks&&(l+=e.ticklen)),r=10+l+(e.linewidth?e.linewidth-1:0)}s||(r+="x"===a?"top"===e.side?o*(e.showticklabels?1:0):o*(e.showticklabels?1.5:.5):"right"===e.side?o*(e.showticklabels?1:.5):o*(e.showticklabels?.5:0))}var u,f,p,d,v=q.getPxPosition(t,e);if("x"===a?(f=e._offset+e._length/2,p="top"===e.side?v-r:v+r):(p=e._offset+e._length/2,f="right"===e.side?v+r:v-r,u={rotate:"-90",offset:0}),"multicategory"!==e.type){var g=e._selections[e._id+"tick"];if(d={selection:g,side:e.side},g&&g.node()&&g.node().parentNode){var y=h.getTranslate(g.node().parentNode);d.offsetLeft=y.x,d.offsetTop=y.y}e.title.hasOwnProperty("standoff")&&(d.pad=0)}return e._titleStandoff=r,c.draw(t,i+"title",{propContainer:e,propName:e._name+".title.text",placeholder:n._dfltTitle[a],avoid:d,transform:u,attributes:{x:f,y:p,"text-anchor":"middle"}})}(t,e)})),ot.push((function(){var r,n,i,s,l=e.side.charAt(0),u=H[e.side].charAt(0),c=q.getPxPosition(t,e),f=O?e.ticklen:0;(e.automargin||lt||e._shiftPusher)&&("multicategory"===e.type?r=ut("tick2"):(r=ut(),"x"===g&&"b"===l&&(e._depth=Math.max(r.width>0?r.bottom-c:0,f))));var h=0,p=0;if(e._shiftPusher&&(h=Math.max(f,r.height>0?"l"===l?c-r.left:r.right-c:0),e.title.text!==d._dfltTitle[g]&&(p=(e._titleStandoff||0)+(e._titleScoot||0),"l"===l&&(p+=At(e))),e._fullDepth=Math.max(h,p)),e.automargin){n={x:0,y:0,r:0,l:0,t:0,b:0};var v=[0,1],m="number"==typeof e._shift?e._shift:0;if("x"===g){if("b"===l?n[l]=e._depth:(n[l]=e._depth=Math.max(r.width>0?c-r.top:0,f),v.reverse()),r.width>0){var x=r.right-(e._offset+e._length);x>0&&(n.xr=1,n.r=x);var b=e._offset-r.left;b>0&&(n.xl=0,n.l=b)}}else if("l"===l?(e._depth=Math.max(r.height>0?c-r.left:0,f),n[l]=e._depth-m):(e._depth=Math.max(r.height>0?r.right-c:0,f),n[l]=e._depth+m,v.reverse()),r.height>0){var _=r.bottom-(e._offset+e._length);_>0&&(n.yb=0,n.b=_);var w=e._offset-r.top;w>0&&(n.yt=1,n.t=w)}n[y]="free"===e.anchor?e.position:e._anchorAxis.domain[v[0]],e.title.text!==d._dfltTitle[g]&&(n[l]+=At(e)+(e.title.standoff||0)),e.mirror&&"free"!==e.anchor&&((i={x:0,y:0,r:0,l:0,t:0,b:0})[u]=e.linewidth,e.mirror&&!0!==e.mirror&&(i[u]+=f),!0===e.mirror||"ticks"===e.mirror?i[y]=e._anchorAxis.domain[v[1]]:"all"!==e.mirror&&"allticks"!==e.mirror||(i[y]=[e._counterDomainMin,e._counterDomainMax][v[1]]))}lt&&(s=o.getComponentMethod("rangeslider","autoMarginOpts")(t,e)),"string"==typeof e.automargin&&(_t(n,e.automargin),_t(i,e.automargin)),a.autoMargin(t,Et(e),n),a.autoMargin(t,Lt(e),i),a.autoMargin(t,Ct(e),s)})),s.syncOrAsync(ot)}}function ut(t){var r=v+(t||"tick");return M[r]||(M[r]=function(t,e){var r,n,i,a;return t._selections[e].size()?(r=1/0,n=-1/0,i=1/0,a=-1/0,t._selections[e].each((function(){var t=St(this),e=h.bBox(t.node().parentNode);r=Math.min(r,e.top),n=Math.max(n,e.bottom),i=Math.min(i,e.left),a=Math.max(a,e.right)}))):(r=0,n=0,i=0,a=0),{top:r,bottom:n,left:i,right:a,height:n-r,width:a-i}}(e,r)),M[r]}},q.getTickSigns=function(t,e){var r=t._id.charAt(0),n={x:"top",y:"right"}[r],i=t.side===n?1:-1,a=[-1,1,i,-i];return"inside"!==(e?(t.minor||{}).ticks:t.ticks)==("x"===r)&&(a=a.map((function(t){return-t}))),t.side&&a.push({l:-1,t:-1,r:1,b:1}[t.side.charAt(0)]),a},q.makeTransTickFn=function(t){return"x"===t._id.charAt(0)?function(e){return l(t._offset+t.l2p(e.x),0)}:function(e){return l(0,t._offset+t.l2p(e.x))}},q.makeTransTickLabelFn=function(t){var e=function(t){var e=t.ticklabelposition||"",r=function(t){return-1!==e.indexOf(t)},n=r("top"),i=r("left"),a=r("right"),o=r("bottom"),s=r("inside"),l=o||i||n||a;if(!l&&!s)return[0,0];var u=t.side,c=l?(t.tickwidth||0)/2:0,f=3,h=t.tickfont?t.tickfont.size:12;return(o||n)&&(c+=h*U,f+=(t.linewidth||0)/2),(i||a)&&(c+=(t.linewidth||0)/2,f+=3),s&&"top"===u&&(f-=h*(1-U)),(i||n)&&(c=-c),"bottom"!==u&&"right"!==u||(f=-f),[l?c:0,s?f:0]}(t),r=e[0],n=e[1];return"x"===t._id.charAt(0)?function(e){return l(r+t._offset+t.l2p(Tt(e)),n)}:function(e){return l(n,r+t._offset+t.l2p(Tt(e)))}},q.makeTickPath=function(t,e,r,n){n||(n={});var i=n.minor;if(i&&!t.minor)return"";var a=void 0!==n.len?n.len:i?t.minor.ticklen:t.ticklen,o=t._id.charAt(0),s=(t.linewidth||1)/2;return"x"===o?"M0,"+(e+s*r)+"v"+a*r:"M"+(e+s*r)+",0h"+a*r},q.makeLabelFns=function(t,e,r){var n=t.ticklabelposition||"",a=function(t){return-1!==n.indexOf(t)},o=a("top"),l=a("left"),u=a("right"),c=a("bottom")||l||o||u,f=a("inside"),h="inside"===n&&"inside"===t.ticks||!f&&"outside"===t.ticks&&"boundaries"!==t.tickson,p=0,d=0,v=h?t.ticklen:0;if(f?v*=-1:c&&(v=0),h&&(p+=v,r)){var g=s.deg2rad(r);p=v*Math.cos(g)+1,d=v*Math.sin(g)}t.showticklabels&&(h||t.showline)&&(p+=.2*t.tickfont.size);var y,m,x,b,_,w={labelStandoff:p+=(t.linewidth||1)/2*(f?-1:1),labelShift:d},T=0,k=t.side,A=t._id.charAt(0),M=t.tickangle;if("x"===A)b=(_=!f&&"bottom"===k||f&&"top"===k)?1:-1,f&&(b*=-1),y=d*b,m=e+p*b,x=_?1:-.2,90===Math.abs(M)&&(f?x+=j:x=-90===M&&"bottom"===k?U:90===M&&"top"===k?j:.5,T=j/2*(M/90)),w.xFn=function(t){return t.dx+y+T*t.fontSize},w.yFn=function(t){return t.dy+m+t.fontSize*x},w.anchorFn=function(t,e){if(c){if(l)return"end";if(u)return"start"}return i(e)&&0!==e&&180!==e?e*b<0!==f?"end":"start":"middle"},w.heightFn=function(e,r,n){return r<-60||r>60?-.5*n:"top"===t.side!==f?-n:0};else if("y"===A){if(b=(_=!f&&"left"===k||f&&"right"===k)?1:-1,f&&(b*=-1),y=p,m=d*b,x=0,f||90!==Math.abs(M)||(x=-90===M&&"left"===k||90===M&&"right"===k?U:.5),f){var S=i(M)?+M:0;if(0!==S){var E=s.deg2rad(S);T=Math.abs(Math.sin(E))*U*b,x=0}}w.xFn=function(t){return t.dx+e-(y+t.fontSize*x)*b+T*t.fontSize},w.yFn=function(t){return t.dy+m+t.fontSize*j},w.anchorFn=function(t,e){return i(e)&&90===Math.abs(e)?"middle":_?"end":"start"},w.heightFn=function(e,r,n){return"right"===t.side&&(r*=-1),r<-30?-n:r<30?-.5*n:0}}return w},q.drawTicks=function(t,e,r){r=r||{};var i=e._id+"tick",a=[].concat(e.minor&&e.minor.ticks?r.vals.filter((function(t){return t.minor&&!t.noTick})):[]).concat(e.ticks?r.vals.filter((function(t){return!t.minor&&!t.noTick})):[]),o=r.layer.selectAll("path."+i).data(a,kt);o.exit().remove(),o.enter().append("path").classed(i,1).classed("ticks",1).classed("crisp",!1!==r.crisp).each((function(t){return f.stroke(n.select(this),t.minor?e.minor.tickcolor:e.tickcolor)})).style("stroke-width",(function(r){return h.crispRound(t,r.minor?e.minor.tickwidth:e.tickwidth,1)+"px"})).attr("d",r.path).style("display",null),Ft(e,[R]),o.attr("transform",r.transFn)},q.drawGrid=function(t,e,r){if(r=r||{},"sync"!==e.tickmode){var i=e._id+"grid",a=e.minor&&e.minor.showgrid,o=a?r.vals.filter((function(t){return t.minor})):[],s=e.showgrid?r.vals.filter((function(t){return!t.minor})):[],l=r.counterAxis;if(l&&q.shouldShowZeroLine(t,e,l))for(var u="array"===e.tickmode,c=0;c<s.length;c++){var p=s[c].x;if(u?!p:Math.abs(p)<e.dtick/100){if(s=s.slice(0,c).concat(s.slice(c+1)),!u)break;c--}}e._gw=h.crispRound(t,e.gridwidth,1);for(var d=a?h.crispRound(t,e.minor.gridwidth,1):0,v=r.layer,g=r.minorLayer,y=1;y>=0;y--){var m=y?v:g;if(m){var x=m.selectAll("path."+i).data(y?s:o,kt);x.exit().remove(),x.enter().append("path").classed(i,1).classed("crisp",!1!==r.crisp),x.attr("transform",r.transFn).attr("d",r.path).each((function(t){return f.stroke(n.select(this),t.minor?e.minor.gridcolor:e.gridcolor||"#ddd")})).style("stroke-dasharray",(function(t){return h.dashStyle(t.minor?e.minor.griddash:e.griddash,t.minor?e.minor.gridwidth:e.gridwidth)})).style("stroke-width",(function(t){return(t.minor?d:e._gw)+"px"})).style("display",null),"function"==typeof r.path&&x.attr("d",r.path)}}Ft(e,[D,z])}},q.drawZeroLine=function(t,e,r){r=r||r;var n=e._id+"zl",i=q.shouldShowZeroLine(t,e,r.counterAxis),a=r.layer.selectAll("path."+n).data(i?[{x:0,id:e._id}]:[]);a.exit().remove(),a.enter().append("path").classed(n,1).classed("zl",1).classed("crisp",!1!==r.crisp).each((function(){r.layer.selectAll("path").sort((function(t,e){return Y(t.id,e.id)}))})),a.attr("transform",r.transFn).attr("d",r.path).call(f.stroke,e.zerolinecolor||f.defaultLine).style("stroke-width",h.crispRound(t,e.zerolinewidth,e._gw||1)+"px").style("display",null),Ft(e,[I])},q.drawLabels=function(t,e,r){r=r||{};var a=t._fullLayout,o=e._id,c=o.charAt(0),f=r.cls||o+"tick",p=r.vals.filter((function(t){return t.text})),d=r.labelFns,v=r.secondary?0:e.tickangle,g=(e._prevTickAngles||{})[f],y=r.layer.selectAll("g."+f).data(e.showticklabels?p:[],kt),m=[];function x(t,a){t.each((function(t){var o=n.select(this),s=o.select(".text-math-group"),c=d.anchorFn(t,a),f=r.transFn.call(o.node(),t)+(i(a)&&0!=+a?" rotate("+a+","+d.xFn(t)+","+(d.yFn(t)-t.fontSize/2)+")":""),p=u.lineCount(o),v=V*t.fontSize,g=d.heightFn(t,i(a)?+a:0,(p-1)*v);if(g&&(f+=l(0,g)),s.empty()){var y=o.select("text");y.attr({transform:f,"text-anchor":c}),y.style("opacity",1),e._adjustTickLabelsOverflow&&e._adjustTickLabelsOverflow()}else{var m=h.bBox(s.node()).width*{end:-.5,start:.5}[c];s.attr("transform",f+l(m,0))}}))}y.enter().append("g").classed(f,1).append("text").attr("text-anchor","middle").each((function(e){var r=n.select(this),i=t._promises.length;r.call(u.positionText,d.xFn(e),d.yFn(e)).call(h.font,e.font,e.fontSize,e.fontColor).text(e.text).call(u.convertToTspans,t),t._promises[i]?m.push(t._promises.pop().then((function(){x(r,v)}))):x(r,v)})),Ft(e,[F]),y.exit().remove(),r.repositionOnUpdate&&y.each((function(t){n.select(this).select("text").call(u.positionText,d.xFn(t),d.yFn(t))})),e._adjustTickLabelsOverflow=function(){var r=e.ticklabeloverflow;if(r&&"allow"!==r){var i=-1!==r.indexOf("hide"),o="x"===e._id.charAt(0),l=0,u=o?t._fullLayout.width:t._fullLayout.height;if(-1!==r.indexOf("domain")){var c=s.simpleMap(e.range,e.r2l);l=e.l2p(c[0])+e._offset,u=e.l2p(c[1])+e._offset}var f=Math.min(l,u),p=Math.max(l,u),d=e.side,v=1/0,g=-1/0;for(var m in y.each((function(t){var r=n.select(this);if(r.select(".text-math-group").empty()){var a=h.bBox(r.node()),s=0;o?(a.right>p||a.left<f)&&(s=1):(a.bottom>p||a.top+(e.tickangle?0:t.fontSize/4)<f)&&(s=1);var l=r.select("text");s?i&&l.style("opacity",0):(l.style("opacity",1),v="bottom"===d||"right"===d?Math.min(v,o?a.top:a.left):-1/0,g="top"===d||"left"===d?Math.max(g,o?a.bottom:a.right):1/0)}})),a._plots){var x=a._plots[m];if(e._id===x.xaxis._id||e._id===x.yaxis._id){var b=o?x.yaxis:x.xaxis;b&&(b["_visibleLabelMin_"+e._id]=v,b["_visibleLabelMax_"+e._id]=g)}}}},e._hideCounterAxisInsideTickLabels=function(t){var r="x"===e._id.charAt(0),i=[];for(var o in a._plots){var s=a._plots[o];e._id!==s.xaxis._id&&e._id!==s.yaxis._id||i.push(r?s.yaxis:s.xaxis)}i.forEach((function(r,i){r&&Rt(r)&&(t||[I,z,D,R,F]).forEach((function(t){var o="tick"===t.K&&"text"===t.L&&"period"===e.ticklabelmode,s=a._plots[e._mainSubplot];(t.K===I.K?s.zerolinelayer.selectAll("."+e._id+"zl"):t.K===z.K?s.minorGridlayer.selectAll("."+e._id):t.K===D.K?s.gridlayer.selectAll("."+e._id):s[e._id.charAt(0)+"axislayer"]).each((function(){var a=n.select(this);t.L&&(a=a.selectAll(t.L)),a.each((function(a){var s=e.l2p(o?Tt(a):a.x)+e._offset,l=n.select(this);s<e["_visibleLabelMax_"+r._id]&&s>e["_visibleLabelMin_"+r._id]?l.style("display","none"):"tick"!==t.K||i||l.style("display",null)}))}))}))}))},x(y,g+1?g:v);var b=null;e._selections&&(e._selections[f]=y);var _=[function(){return m.length&&Promise.all(m)}];e.automargin&&a._redrawFromAutoMarginCount&&90===g?(b=90,_.push((function(){x(y,g)}))):_.push((function(){if(x(y,v),p.length&&"x"===c&&!i(v)&&("log"!==e.type||"D"!==String(e.dtick).charAt(0))){b=0;var t,n=0,a=[];if(y.each((function(t){n=Math.max(n,t.fontSize);var r=e.l2p(t.x),i=St(this),o=h.bBox(i.node());a.push({top:0,bottom:10,height:10,left:r-o.width/2,right:r+o.width/2+2,width:o.width+2})})),"boundaries"!==e.tickson&&!e.showdividers||r.secondary){var o=p.length,l=Math.abs((p[o-1].x-p[0].x)*e._m)/(o-1),u=e.ticklabelposition||"",f=function(t){return-1!==u.indexOf(t)},d=f("top"),g=f("left"),m=f("right"),_=f("bottom")||g||d||m?(e.tickwidth||0)+6:0,w=l<2.5*n||"multicategory"===e.type||"realaxis"===e._name;for(t=0;t<a.length-1;t++)if(s.bBoxIntersect(a[t],a[t+1],_)){b=w?90:30;break}}else{var T=2;for(e.ticks&&(T+=e.tickwidth/2),t=0;t<a.length;t++){var k=p[t].xbnd,A=a[t];if(null!==k[0]&&A.left-e.l2p(k[0])<T||null!==k[1]&&e.l2p(k[1])-A.right<T){b=90;break}}}b&&x(y,b)}})),e._tickAngles&&_.push((function(){e._tickAngles[f]=null===b?i(v)?v:0:b}));var w=function(){var t=0,r=0;return y.each((function(n,i){var a,o=St(this);o.select(".text-math-group").empty()&&(e._vals[i]&&(a=e._vals[i].bb||h.bBox(o.node()),e._vals[i].bb=a),t=Math.max(t,a.width),r=Math.max(r,a.height))})),{labelsMaxW:t,labelsMaxH:r}},T=e._anchorAxis;if(T&&(T.autorange||T.insiderange)&&Rt(e)&&!W(a,e._id)&&(a._insideTickLabelsUpdaterange||(a._insideTickLabelsUpdaterange={}),T.autorange&&(a._insideTickLabelsUpdaterange[T._name+".autorange"]=T.autorange,_.push(w)),T.insiderange)){var k=w(),A="y"===e._id.charAt(0)?k.labelsMaxW:k.labelsMaxH;A+=6,"inside"===e.ticklabelposition&&(A+=e.ticklen||0);var M="right"===e.side||"top"===e.side?1:-1,S=1===M?1:0,E=1===M?0:1,L=[];L[E]=T.range[E];var C=T.d2p(T.range[S]),P=T.d2p(T.range[E]),O=Math.abs(P-C);O-A>0?A*=1+A/(O-=A):A=0,"y"!==e._id.charAt(0)&&(A=-A),L[S]=T.p2d(T.d2p(T.range[S])+M*A),"min"===T.autorange||"max reversed"===T.autorange?(L[0]=null,T._rangeInitial0=void 0,T._rangeInitial1=void 0):"max"!==T.autorange&&"min reversed"!==T.autorange||(L[1]=null,T._rangeInitial0=void 0,T._rangeInitial1=void 0),a._insideTickLabelsUpdaterange[T._name+".range"]=L}var B=s.syncOrAsync(_);return B&&B.then&&t._promises.push(B),B},q.getPxPosition=function(t,e){var r,n=t._fullLayout._size,i=e._id.charAt(0),a=e.side;return"free"!==e.anchor?r=e._anchorAxis:"x"===i?r={_offset:n.t+(1-(e.position||0))*n.h,_length:0}:"y"===i&&(r={_offset:n.l+(e.position||0)*n.w+e._shift,_length:0}),"top"===a||"left"===a?r._offset:"bottom"===a||"right"===a?r._offset+r._length:void 0},q.shouldShowZeroLine=function(t,e,r){var n=s.simpleMap(e.range,e.r2l);return n[0]*n[1]<=0&&e.zeroline&&("linear"===e.type||"-"===e.type)&&!(e.rangebreaks&&e.maskBreaks(0)===O)&&(Mt(e,0)||!function(t,e,r,n){var i=r._mainAxis;if(i){var a=t._fullLayout,o=e._id.charAt(0),s=q.counterLetter(e._id),l=e._offset+(Math.abs(n[0])<Math.abs(n[1])==("x"===o)?0:e._length),u=a._plots[r._mainSubplot];if(!(u.mainplotinfo||u).overlays.length)return p(r);for(var c=q.list(t,s),f=0;f<c.length;f++){var h=c[f];if(h._mainAxis===i&&p(h))return!0}}function p(t){if(!t.showline||!t.linewidth)return!1;var r=Math.max((t.linewidth+e.zerolinewidth)/2,1);function n(t){return"number"==typeof t&&Math.abs(t-l)<r}if(n(t._mainLinePosition)||n(t._mainMirrorPosition))return!0;var i=t._linepositions||{};for(var a in i)if(n(i[a][0])||n(i[a][1]))return!0}}(t,e,r,n)||function(t,e){for(var r=t._fullData,n=e._mainSubplot,i=e._id.charAt(0),a=0;a<r.length;a++){var s=r[a];if(!0===s.visible&&s.xaxis+s.yaxis===n){if(o.traceIs(s,"bar-like")&&s.orientation==={x:"h",y:"v"}[i])return!0;if(s.fill&&s.fill.charAt(s.fill.length-1)===i)return!0}}return!1}(t,e))},q.clipEnds=function(t,e){return e.filter((function(e){return Mt(t,e.x)}))},q.allowAutoMargin=function(t){for(var e=q.list(t,"",!0),r=0;r<e.length;r++){var n=e[r];n.automargin&&(a.allowAutoMargin(t,Et(n)),n.mirror&&a.allowAutoMargin(t,Lt(n))),o.getComponentMethod("rangeslider","isVisible")(n)&&a.allowAutoMargin(t,Ct(n))}},q.swap=function(t,e){for(var r=function(t,e){var r,n,i=[];for(r=0;r<e.length;r++){var a=[],o=t._fullData[e[r]].xaxis,s=t._fullData[e[r]].yaxis;if(o&&s){for(n=0;n<i.length;n++)-1===i[n].x.indexOf(o)&&-1===i[n].y.indexOf(s)||a.push(n);if(a.length){var l,u=i[a[0]];if(a.length>1)for(n=1;n<a.length;n++)l=i[a[n]],Pt(u.x,l.x),Pt(u.y,l.y);Pt(u.x,[o]),Pt(u.y,[s])}else i.push({x:[o],y:[s]})}}return i}(t,e),n=0;n<r.length;n++)Ot(t,r[n].x,r[n].y)}},4322:function(t,e,r){"use strict";var n=r(92770),i=r(71828),a=r(50606).BADNUM,o=i.isArrayOrTypedArray,s=i.isDateTime,l=i.cleanNumber,u=Math.round;function c(t,e){return e?n(t):"number"==typeof t}function f(t){return Math.max(1,(t-1)/1e3)}t.exports=function(t,e,r){var i=t,h=r.noMultiCategory;if(o(i)&&!i.length)return"-";if(!h&&function(t){return o(t[0])&&o(t[1])}(i))return"multicategory";if(h&&Array.isArray(i[0])){for(var p=[],d=0;d<i.length;d++)if(o(i[d]))for(var v=0;v<i[d].length;v++)p.push(i[d][v]);i=p}if(function(t,e){for(var r=t.length,i=f(r),a=0,o=0,l={},c=0;c<r;c+=i){var h=t[u(c)],p=String(h);l[p]||(l[p]=1,s(h,e)&&a++,n(h)&&o++)}return a>2*o}(i,e))return"date";var g="strict"!==r.autotypenumbers;return function(t,e){for(var r=t.length,n=f(r),i=0,o=0,s={},c=0;c<r;c+=n){var h=t[u(c)],p=String(h);if(!s[p]){s[p]=1;var d=typeof h;"boolean"===d?o++:(e?l(h)!==a:"number"===d)?i++:"string"===d&&o++}}return o>2*i}(i,g)?"category":function(t,e){for(var r=t.length,n=0;n<r;n++)if(c(t[n],e))return!0;return!1}(i,g)?"linear":"-"}},71453:function(t,e,r){"use strict";var n=r(92770),i=r(73972),a=r(71828),o=r(44467),s=r(85501),l=r(13838),u=r(26218),c=r(38701),f=r(96115),h=r(89426),p=r(15258),d=r(92128),v=r(23608),g=r(21994),y=r(85555).WEEKDAY_PATTERN,m=r(85555).HOUR_PATTERN;function x(t,e,r){function i(r,n){return a.coerce(t,e,l.rangebreaks,r,n)}if(i("enabled")){var o=i("bounds");if(o&&o.length>=2){var s,u,c="";if(2===o.length)for(s=0;s<2;s++)if(u=_(o[s])){c=y;break}var f=i("pattern",c);if(f===y)for(s=0;s<2;s++)(u=_(o[s]))&&(e.bounds[s]=o[s]=u-1);if(f)for(s=0;s<2;s++)switch(u=o[s],f){case y:if(!n(u))return void(e.enabled=!1);if((u=+u)!==Math.floor(u)||u<0||u>=7)return void(e.enabled=!1);e.bounds[s]=o[s]=u;break;case m:if(!n(u))return void(e.enabled=!1);if((u=+u)<0||u>24)return void(e.enabled=!1);e.bounds[s]=o[s]=u}if(!1===r.autorange){var h=r.range;if(h[0]<h[1]){if(o[0]<h[0]&&o[1]>h[1])return void(e.enabled=!1)}else if(o[0]>h[0]&&o[1]<h[1])return void(e.enabled=!1)}}else{var p=i("values");if(!p||!p.length)return void(e.enabled=!1);i("dvalue")}}}t.exports=function(t,e,r,n,m){var b,_=n.letter,w=n.font||{},T=n.splomStash||{},k=r("visible",!n.visibleDflt),A=e._template||{},M=e.type||A.type||"-";"date"===M&&(i.getComponentMethod("calendars","handleDefaults")(t,e,"calendar",n.calendar),n.noTicklabelmode||(b=r("ticklabelmode")));var S="";n.noTicklabelposition&&"multicategory"!==M||(S=a.coerce(t,e,{ticklabelposition:{valType:"enumerated",dflt:"outside",values:"period"===b?["outside","inside"]:"x"===_?["outside","inside","outside left","inside left","outside right","inside right"]:["outside","inside","outside top","inside top","outside bottom","inside bottom"]}},"ticklabelposition")),n.noTicklabeloverflow||r("ticklabeloverflow",-1!==S.indexOf("inside")?"hide past domain":"category"===M||"multicategory"===M?"allow":"hide past div"),g(e,m),v(t,e,r,n),p(t,e,r,n),"category"===M||n.noHover||r("hoverformat");var E=r("color"),L=E!==l.color.dflt?E:w.color,C=T.label||m._dfltTitle[_];if(h(t,e,r,M,n),!k)return e;r("title.text",C),a.coerceFont(r,"title.font",{family:w.family,size:a.bigFont(w.size),color:L}),u(t,e,r,M);var P=n.hasMinor;if(P&&(o.newContainer(e,"minor"),u(t,e,r,M,{isMinor:!0})),f(t,e,r,M,n),c(t,e,r,n),P){var O=n.isMinor;n.isMinor=!0,c(t,e,r,n),n.isMinor=O}d(t,e,r,{dfltColor:E,bgColor:n.bgColor,showGrid:n.showGrid,hasMinor:P,attributes:l}),!P||e.minor.ticks||e.minor.showgrid||delete e.minor,(e.showline||e.ticks)&&r("mirror");var I,D="multicategory"===M;if(n.noTickson||"category"!==M&&!D||!e.ticks&&!e.showgrid||(D&&(I="boundaries"),"boundaries"===r("tickson",I)&&delete e.ticklabelposition),D&&r("showdividers")&&(r("dividercolor"),r("dividerwidth")),"date"===M)if(s(t,e,{name:"rangebreaks",inclusionAttr:"enabled",handleItemDefaults:x}),e.rangebreaks.length){for(var z=0;z<e.rangebreaks.length;z++)if(e.rangebreaks[z].pattern===y){e._hasDayOfWeekBreaks=!0;break}if(g(e,m),m._has("scattergl")||m._has("splom"))for(var R=0;R<n.data.length;R++){var F=n.data[R];"scattergl"!==F.type&&"splom"!==F.type||(F.visible=!1,a.warn(F.type+" traces do not work on axes with rangebreaks. Setting trace "+F.index+" to `visible: false`."))}}else delete e.rangebreaks;return e};var b={sun:1,mon:2,tue:3,wed:4,thu:5,fri:6,sat:7};function _(t){if("string"==typeof t)return b[t.substr(0,3).toLowerCase()]}},12663:function(t,e,r){"use strict";var n=r(31562),i=n.FORMAT_LINK,a=n.DATE_FORMAT_LINK;function o(t,e){return["Sets the "+t+" formatting rule"+(e?"for `"+e+"` ":""),"using d3 formatting mini-languages","which are very similar to those in Python. For numbers, see: "+i+"."].join(" ")}function s(t,e){return o(t,e)+[" And for dates see: "+a+".","We add two items to d3's date formatter:","*%h* for half of the year as a decimal number as well as","*%{n}f* for fractional seconds","with n digits. For example, *2016-10-13 09:15:23.456* with tickformat","*%H~%M~%S.%2f* would display *09~15~23.46*"].join(" ")}t.exports={axisHoverFormat:function(t,e){return{valType:"string",dflt:"",editType:"none",description:(e?o:s)("hover text",t)+["By default the values are formatted using "+(e?"generic number format":"`"+t+"axis.hoverformat`")+"."].join(" ")}},descriptionOnlyNumbers:o,descriptionWithDates:s}},41675:function(t,e,r){"use strict";var n=r(73972),i=r(85555);function a(t,e){if(e&&e.length)for(var r=0;r<e.length;r++)if(e[r][t])return!0;return!1}e.id2name=function(t){if("string"==typeof t&&t.match(i.AX_ID_PATTERN)){var e=t.split(" ")[0].substr(1);return"1"===e&&(e=""),t.charAt(0)+"axis"+e}},e.name2id=function(t){if(t.match(i.AX_NAME_PATTERN)){var e=t.substr(5);return"1"===e&&(e=""),t.charAt(0)+e}},e.cleanId=function(t,e,r){var n=/( domain)$/.test(t);if("string"==typeof t&&t.match(i.AX_ID_PATTERN)&&(!e||t.charAt(0)===e)&&(!n||r)){var a=t.split(" ")[0].substr(1).replace(/^0+/,"");return"1"===a&&(a=""),t.charAt(0)+a+(n&&r?" domain":"")}},e.list=function(t,r,n){var i=t._fullLayout;if(!i)return[];var a,o=e.listIds(t,r),s=new Array(o.length);for(a=0;a<o.length;a++){var l=o[a];s[a]=i[l.charAt(0)+"axis"+l.substr(1)]}if(!n){var u=i._subplots.gl3d||[];for(a=0;a<u.length;a++){var c=i[u[a]];r?s.push(c[r+"axis"]):s.push(c.xaxis,c.yaxis,c.zaxis)}}return s},e.listIds=function(t,e){var r=t._fullLayout;if(!r)return[];var n=r._subplots;return e?n[e+"axis"]:n.xaxis.concat(n.yaxis)},e.getFromId=function(t,r,n){var i=t._fullLayout;return r=void 0===r||"string"!=typeof r?r:r.replace(" domain",""),"x"===n?r=r.replace(/y[0-9]*/,""):"y"===n&&(r=r.replace(/x[0-9]*/,"")),i[e.id2name(r)]},e.getFromTrace=function(t,r,i){var a=t._fullLayout,o=null;if(n.traceIs(r,"gl3d")){var s=r.scene;"scene"===s.substr(0,5)&&(o=a[s][i+"axis"])}else o=e.getFromId(t,r[i+"axis"]||i);return o},e.idSort=function(t,e){var r=t.charAt(0),n=e.charAt(0);return r!==n?r>n?1:-1:+(t.substr(1)||1)-+(e.substr(1)||1)},e.ref2id=function(t){return!!/^[xyz]/.test(t)&&t.split(" ")[0]},e.isLinked=function(t,e){return a(e,t._axisMatchGroups)||a(e,t._axisConstraintGroups)}},15258:function(t){"use strict";t.exports=function(t,e,r,n){if("category"===e.type){var i,a=t.categoryarray,o=Array.isArray(a)&&a.length>0;o&&(i="array");var s,l=r("categoryorder",i);"array"===l&&(s=r("categoryarray")),o||"array"!==l||(l=e.categoryorder="trace"),"trace"===l?e._initialCategories=[]:"array"===l?e._initialCategories=s.slice():(s=function(t,e){var r,n,i,a=e.dataAttr||t._id.charAt(0),o={};if(e.axData)r=e.axData;else for(r=[],n=0;n<e.data.length;n++){var s=e.data[n];s[a+"axis"]===t._id&&r.push(s)}for(n=0;n<r.length;n++){var l=r[n][a];for(i=0;i<l.length;i++){var u=l[i];null!=u&&(o[u]=1)}}return Object.keys(o)}(e,n).sort(),"category ascending"===l?e._initialCategories=s:"category descending"===l&&(e._initialCategories=s.reverse()))}}},66287:function(t,e,r){"use strict";var n=r(92770),i=r(71828),a=r(50606),o=a.ONEDAY,s=a.ONEWEEK;e.dtick=function(t,e){var r="log"===e,i="date"===e,a="category"===e,s=i?o:1;if(!t)return s;if(n(t))return(t=Number(t))<=0?s:a?Math.max(1,Math.round(t)):i?Math.max(.1,t):t;if("string"!=typeof t||!i&&!r)return s;var l=t.charAt(0),u=t.substr(1);return(u=n(u)?Number(u):0)<=0||!(i&&"M"===l&&u===Math.round(u)||r&&"L"===l||r&&"D"===l&&(1===u||2===u))?s:t},e.tick0=function(t,e,r,a){return"date"===e?i.cleanDate(t,i.dateTick0(r,a%s==0?1:0)):"D1"!==a&&"D2"!==a?n(t)?Number(t):0:void 0}},85555:function(t,e,r){"use strict";var n=r(30587).counter;t.exports={idRegex:{x:n("x","( domain)?"),y:n("y","( domain)?")},attrRegex:n("[xy]axis"),xAxisMatch:n("xaxis"),yAxisMatch:n("yaxis"),AX_ID_PATTERN:/^[xyz][0-9]*( domain)?$/,AX_NAME_PATTERN:/^[xyz]axis[0-9]*$/,SUBPLOT_PATTERN:/^x([0-9]*)y([0-9]*)$/,HOUR_PATTERN:"hour",WEEKDAY_PATTERN:"day of week",MINDRAG:8,MINZOOM:20,DRAGGERSIZE:20,REDRAWDELAY:50,DFLTRANGEX:[-1,6],DFLTRANGEY:[-1,4],traceLayerClasses:["imagelayer","heatmaplayer","contourcarpetlayer","contourlayer","funnellayer","waterfalllayer","barlayer","carpetlayer","violinlayer","boxlayer","ohlclayer","scattercarpetlayer","scatterlayer"],clipOnAxisFalseQuery:[".scatterlayer",".barlayer",".funnellayer",".waterfalllayer"],layerValue2layerClass:{"above traces":"above","below traces":"below"}}},99082:function(t,e,r){"use strict";var n=r(71828),i=r(71739),a=r(41675).id2name,o=r(13838),s=r(42449),l=r(21994),u=r(50606).ALMOST_EQUAL,c=r(18783).FROM_BL;function f(t,e,r){var i=r.axIds,s=r.layoutOut,l=r.hasImage,u=s._axisConstraintGroups,c=s._axisMatchGroups,f=e._id,v=f.charAt(0),g=((s._splomAxes||{})[v]||{})[f]||{},y=e._id,m="x"===y.charAt(0);function x(r,i){return n.coerce(t,e,o,r,i)}e._matchGroup=null,e._constraintGroup=null,x("constrain",l?"domain":"range"),n.coerce(t,e,{constraintoward:{valType:"enumerated",values:m?["left","center","right"]:["bottom","middle","top"],dflt:m?"center":"middle"}},"constraintoward");var b,_,w=e.type,T=[];for(b=0;b<i.length;b++)(_=i[b])!==y&&s[a(_)].type===w&&T.push(_);var k=p(u,y);if(k){var A=[];for(b=0;b<T.length;b++)k[_=T[b]]||A.push(_);T=A}var M,S,E=T.length;E&&(t.matches||g.matches)&&(M=n.coerce(t,e,{matches:{valType:"enumerated",values:T,dflt:-1!==T.indexOf(g.matches)?g.matches:void 0}},"matches"));var L=l&&!m?e.anchor:void 0;if(E&&!M&&(t.scaleanchor||L)&&(S=n.coerce(t,e,{scaleanchor:{valType:"enumerated",values:T.concat([!1])}},"scaleanchor",L)),M){e._matchGroup=d(c,y,M,1);var C=s[a(M)],P=h(s,e)/h(s,C);m!==("x"===M.charAt(0))&&(P=(m?"x":"y")+P),d(u,y,M,P)}else t.matches&&-1!==i.indexOf(t.matches)&&n.warn("ignored "+e._name+'.matches: "'+t.matches+'" to avoid an infinite loop');if(S){var O=x("scaleratio");O||(O=e.scaleratio=1),d(u,y,S,O)}else t.scaleanchor&&-1!==i.indexOf(t.scaleanchor)&&n.warn("ignored "+e._name+'.scaleanchor: "'+t.scaleanchor+'" to avoid either an infinite loop and possibly inconsistent scaleratios, or because this axis declares a *matches* constraint.')}function h(t,e){var r=e.domain;return r||(r=t[a(e.overlaying)].domain),r[1]-r[0]}function p(t,e){for(var r=0;r<t.length;r++)if(t[r][e])return t[r];return null}function d(t,e,r,n){var i,a,o,s,l,u=p(t,e);null===u?((u={})[e]=1,l=t.length,t.push(u)):l=t.indexOf(u);var c=Object.keys(u);for(i=0;i<t.length;i++)if(o=t[i],i!==l&&o[r]){var f=o[r];for(a=0;a<c.length;a++)o[s=c[a]]=v(f,v(n,u[s]));return void t.splice(l,1)}if(1!==n)for(a=0;a<c.length;a++){var h=c[a];u[h]=v(n,u[h])}u[r]=1}function v(t,e){var r,n,i="",a="";"string"==typeof t&&(r=(i=t.match(/^[xy]*/)[0]).length,t=+t.substr(r)),"string"==typeof e&&(n=(a=e.match(/^[xy]*/)[0]).length,e=+e.substr(n));var o=t*e;return r||n?r&&n&&i.charAt(0)!==a.charAt(0)?r===n?o:(r>n?i.substr(n):a.substr(r))+o:i+a+t*e:o}function g(t,e){for(var r=e._size,n=r.h/r.w,i={},a=Object.keys(t),o=0;o<a.length;o++){var s=a[o],l=t[s];if("string"==typeof l){var u=l.match(/^[xy]*/)[0],c=u.length;l=+l.substr(c);for(var f="y"===u.charAt(0)?n:1/n,h=0;h<c;h++)l*=f}i[s]=l}return i}function y(t,e){var r=t._inputDomain,n=c[t.constraintoward],i=r[0]+(r[1]-r[0])*n;t.domain=t._input.domain=[i+(r[0]-i)/e,i+(r[1]-i)/e],t.setScale()}e.handleDefaults=function(t,e,r){var i,o,s,u,c,h,p,d,v=r.axIds,g=r.axHasImage,y=e._axisConstraintGroups=[],m=e._axisMatchGroups=[];for(i=0;i<v.length;i++)f(c=t[u=a(v[i])],h=e[u],{axIds:v,layoutOut:e,hasImage:g[u]});function x(t,r){for(i=0;i<t.length;i++)for(s in o=t[i])e[a(s)][r]=o}for(x(m,"_matchGroup"),i=0;i<y.length;i++)for(s in o=y[i])if((h=e[a(s)]).fixedrange){for(var b in o){var _=a(b);!1===(t[_]||{}).fixedrange&&n.warn("fixedrange was specified as false for axis "+_+" but was overridden because another axis in its constraint group has fixedrange true"),e[_].fixedrange=!0}break}for(i=0;i<y.length;){for(s in o=y[i]){(h=e[a(s)])._matchGroup&&Object.keys(h._matchGroup).length===Object.keys(o).length&&(y.splice(i,1),i--);break}i++}x(y,"_constraintGroup");var w=["constrain","range","autorange","rangemode","rangebreaks","categoryorder","categoryarray"],T=!1,k=!1;function A(){d=h[p],"rangebreaks"===p&&(k=h._hasDayOfWeekBreaks)}for(i=0;i<m.length;i++){o=m[i];for(var M=0;M<w.length;M++){var S;for(s in p=w[M],d=null,o)if(c=t[u=a(s)],h=e[u],p in h){if(!h.matches&&(S=h,p in c)){A();break}null===d&&p in c&&A()}if("range"===p&&d&&c.range&&2===c.range.length&&null!==c.range[0]&&null!==c.range[1]&&(T=!0),"autorange"===p&&null===d&&T&&(d=!1),null===d&&p in S&&(d=S[p]),null!==d)for(s in o)(h=e[a(s)])[p]="range"===p?d.slice():d,"rangebreaks"===p&&(h._hasDayOfWeekBreaks=k,l(h,e))}}},e.enforce=function(t){var e,r,n,o,l,c,f,h,p=t._fullLayout,d=p._axisConstraintGroups||[];for(e=0;e<d.length;e++){n=g(d[e],p);var v=Object.keys(n),m=1/0,x=0,b=1/0,_={},w={},T=!1;for(r=0;r<v.length;r++)w[o=v[r]]=l=p[a(o)],l._inputDomain?l.domain=l._inputDomain.slice():l._inputDomain=l.domain.slice(),l._inputRange||(l._inputRange=l.range.slice()),l.setScale(),_[o]=c=Math.abs(l._m)/n[o],m=Math.min(m,c),"domain"!==l.constrain&&l._constraintShrinkable||(b=Math.min(b,c)),delete l._constraintShrinkable,x=Math.max(x,c),"domain"===l.constrain&&(T=!0);if(!(m>u*x)||T)for(r=0;r<v.length;r++)if(c=_[o=v[r]],f=(l=w[o]).constrain,c!==b||"domain"===f)if(h=c/b,"range"===f)s(l,h);else{var k=l._inputDomain,A=(l.domain[1]-l.domain[0])/(k[1]-k[0]),M=(l.r2l(l.range[1])-l.r2l(l.range[0]))/(l.r2l(l._inputRange[1])-l.r2l(l._inputRange[0]));if((h/=A)*M<1){l.domain=l._input.domain=k.slice(),s(l,h);continue}if(M<1&&(l.range=l._input.range=l._inputRange.slice(),h*=M),l.autorange){var S=l.r2l(l.range[0]),E=l.r2l(l.range[1]),L=(S+E)/2,C=L,P=L,O=Math.abs(E-L),I=L-O*h*1.0001,D=L+O*h*1.0001,z=i.makePadFn(p,l,0),R=i.makePadFn(p,l,1);y(l,h);var F,B,N=Math.abs(l._m),j=i.concatExtremes(t,l),U=j.min,V=j.max;for(B=0;B<U.length;B++)(F=U[B].val-z(U[B])/N)>I&&F<C&&(C=F);for(B=0;B<V.length;B++)(F=V[B].val+R(V[B])/N)<D&&F>P&&(P=F);h/=(P-C)/(2*O),C=l.l2r(C),P=l.l2r(P),l.range=l._input.range=S<E?[C,P]:[P,C]}y(l,h)}}},e.getAxisGroup=function(t,e){for(var r=t._axisMatchGroups,n=0;n<r.length;n++)if(r[n][e])return"g"+n;return e},e.clean=function(t,e){if(e._inputDomain){for(var r=!1,n=e._id,i=t._fullLayout._axisConstraintGroups,a=0;a<i.length;a++)if(i[a][n]){r=!0;break}r&&"domain"===e.constrain||(e._input.domain=e.domain=e._inputDomain,delete e._inputDomain)}}},29323:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=i.numberFormat,o=r(84267),s=r(38520),l=r(73972),u=i.strTranslate,c=r(63893),f=r(7901),h=r(91424),p=r(30211),d=r(89298),v=r(6964),g=r(28569),y=r(64505),m=y.selectingOrDrawing,x=y.freeMode,b=r(18783).FROM_TL,_=r(33306),w=r(61549).redrawReglTraces,T=r(74875),k=r(41675).getFromId,A=r(47322).prepSelect,M=r(47322).clearOutline,S=r(47322).selectOnClick,E=r(42449),L=r(85555),C=L.MINDRAG,P=L.MINZOOM,O=!0;function I(t,e,r,n){var a=i.ensureSingle(t.draglayer,e,r,(function(e){e.classed("drag",!0).style({fill:"transparent","stroke-width":0}).attr("data-subplot",t.id)}));return a.call(v,n),a.node()}function D(t,e,r,i,a,o,s){var l=I(t,"rect",e,r);return n.select(l).call(h.setRect,i,a,o,s),l}function z(t,e){for(var r=0;r<t.length;r++)if(!t[r].fixedrange)return e;return""}function R(t,e,r,n,i){for(var a=0;a<t.length;a++){var o=t[a];if(!o.fixedrange)if(o.rangebreaks){var s="y"===o._id.charAt(0),l=s?1-e:e,u=s?1-r:r;n[o._name+".range[0]"]=o.l2r(o.p2l(l*o._length)),n[o._name+".range[1]"]=o.l2r(o.p2l(u*o._length))}else{var c=o._rl[0],f=o._rl[1]-c;n[o._name+".range[0]"]=o.l2r(c+f*e),n[o._name+".range[1]"]=o.l2r(c+f*r)}}if(i&&i.length){var h=(e+(1-r))/2;R(i,h,1-h,n,[])}}function F(t,e){for(var r=0;r<t.length;r++){var n=t[r];if(!n.fixedrange){if(n.rangebreaks){var i=n._length,a=(n.p2l(0+e)-n.p2l(0)+(n.p2l(i+e)-n.p2l(i)))/2;n.range=[n.l2r(n._rl[0]-a),n.l2r(n._rl[1]-a)]}else n.range=[n.l2r(n._rl[0]-e/n._m),n.l2r(n._rl[1]-e/n._m)];n.limitRange&&n.limitRange()}}}function B(t){return 1-(t>=0?Math.min(t,.9):1/(1/Math.max(t,-.3)+3.222))}function N(t,e,r,n,i){return t.append("path").attr("class","zoombox").style({fill:e>.2?"rgba(0,0,0,0)":"rgba(255,255,255,0)","stroke-width":0}).attr("transform",u(r,n)).attr("d",i+"Z")}function j(t,e,r){return t.append("path").attr("class","zoombox-corners").style({fill:f.background,stroke:f.defaultLine,"stroke-width":1,opacity:0}).attr("transform",u(e,r)).attr("d","M0,0Z")}function U(t,e,r,n,i,a){t.attr("d",n+"M"+r.l+","+r.t+"v"+r.h+"h"+r.w+"v-"+r.h+"h-"+r.w+"Z"),V(t,e,i,a)}function V(t,e,r,n){r||(t.transition().style("fill",n>.2?"rgba(0,0,0,0.4)":"rgba(255,255,255,0.3)").duration(200),e.transition().style("opacity",1).duration(200))}function H(t){n.select(t).selectAll(".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners").remove()}function q(t){O&&t.data&&t._context.showTips&&(i.notifier(i._(t,"Double-click to zoom back out"),"long"),O=!1)}function G(t){var e=Math.floor(Math.min(t.b-t.t,t.r-t.l,P)/2);return"M"+(t.l-3.5)+","+(t.t-.5+e)+"h3v"+-e+"h"+e+"v-3h-"+(e+3)+"ZM"+(t.r+3.5)+","+(t.t-.5+e)+"h-3v"+-e+"h"+-e+"v-3h"+(e+3)+"ZM"+(t.r+3.5)+","+(t.b+.5-e)+"h-3v"+e+"h"+-e+"v3h"+(e+3)+"ZM"+(t.l-3.5)+","+(t.b+.5-e)+"h3v"+e+"h"+e+"v3h-"+(e+3)+"Z"}function Z(t,e,r,n,a){for(var o,s,l,u,c=!1,f={},h={},p=(a||{}).xaHash,d=(a||{}).yaHash,v=0;v<e.length;v++){var g=e[v];for(o in r)if(g[o]){for(l in g)a&&(p[l]||d[l])||("x"===l.charAt(0)?r:n)[l]||(f[l]=o);for(s in n)a&&(p[s]||d[s])||!g[s]||(c=!0)}for(s in n)if(g[s])for(u in g)a&&(p[u]||d[u])||("x"===u.charAt(0)?r:n)[u]||(h[u]=s)}c&&(i.extendFlat(f,h),h={});var y={},m=[];for(l in f){var x=k(t,l);m.push(x),y[x._id]=x}var b={},_=[];for(u in h){var w=k(t,u);_.push(w),b[w._id]=w}return{xaHash:y,yaHash:b,xaxes:m,yaxes:_,xLinks:f,yLinks:h,isSubplotConstrained:c}}function Y(t,e){if(s){var r=void 0!==t.onwheel?"wheel":"mousewheel";t._onwheel&&t.removeEventListener(r,t._onwheel),t._onwheel=e,t.addEventListener(r,e,{passive:!1})}else void 0!==t.onwheel?t.onwheel=e:void 0!==t.onmousewheel?t.onmousewheel=e:t.isAddedWheelEvent||(t.isAddedWheelEvent=!0,t.addEventListener("wheel",e,{passive:!1}))}function W(t){var e=[];for(var r in t)e.push(t[r]);return e}t.exports={makeDragBox:function(t,e,r,s,u,f,v,y){var O,I,V,X,J,K,$,Q,tt,et,rt,nt,it,at,ot,st,lt,ut,ct,ft,ht,pt,dt,vt=t._fullLayout._zoomlayer,gt=v+y==="nsew",yt=1===(v+y).length;function mt(){if(O=e.xaxis,I=e.yaxis,tt=O._length,et=I._length,$=O._offset,Q=I._offset,(V={})[O._id]=O,(X={})[I._id]=I,v&&y)for(var r=e.overlays,n=0;n<r.length;n++){var i=r[n].xaxis;V[i._id]=i;var a=r[n].yaxis;X[a._id]=a}J=W(V),K=W(X),it=z(J,y),at=z(K,v),ot=!at&&!it,nt=Z(t,t._fullLayout._axisMatchGroups,V,X);var o=(rt=Z(t,t._fullLayout._axisConstraintGroups,V,X,nt)).isSubplotConstrained||nt.isSubplotConstrained;st=y||o,lt=v||o;var s=t._fullLayout;ut=s._has("scattergl"),ct=s._has("splom"),ft=s._has("svg")}r+=e.yaxis._shift,mt();var xt=function(t,e,r){return t?"nsew"===t?r?"":"pan"===e?"move":"crosshair":t.toLowerCase()+"-resize":"pointer"}(at+it,t._fullLayout.dragmode,gt),bt=D(e,v+y+"drag",xt,r,s,u,f);if(ot&&!gt)return bt.onmousedown=null,bt.style.pointerEvents="none",bt;var _t,wt,Tt,kt,At,Mt,St,Et,Lt,Ct,Pt={element:bt,gd:t,plotinfo:e};function Ot(){Pt.plotinfo.selection=!1,M(t)}function It(t,r){var i=Pt.gd;if(i._fullLayout._activeShapeIndex>=0)i._fullLayout._deactivateShape(i);else{var o=i._fullLayout.clickmode;if(H(i),2!==t||yt||qt(),gt)o.indexOf("select")>-1&&S(r,i,J,K,e.id,Pt),o.indexOf("event")>-1&&p.click(i,r,e.id);else if(1===t&&yt){var s=v?I:O,u="s"===v||"w"===y?0:1,f=s._name+".range["+u+"]",h=function(t,e){var r,n=t.range[e],i=Math.abs(n-t.range[1-e]);return"date"===t.type?n:"log"===t.type?(r=Math.ceil(Math.max(0,-Math.log(i)/Math.LN10))+3,a("."+r+"g")(Math.pow(10,n))):(r=Math.floor(Math.log(Math.abs(n))/Math.LN10)-Math.floor(Math.log(i)/Math.LN10)+4,a("."+String(r)+"g")(n))}(s,u),d="left",g="middle";if(s.fixedrange)return;v?(g="n"===v?"top":"bottom","right"===s.side&&(d="right")):"e"===y&&(d="right"),i._context.showAxisRangeEntryBoxes&&n.select(bt).call(c.makeEditable,{gd:i,immediate:!0,background:i._fullLayout.paper_bgcolor,text:String(h),fill:s.tickfont?s.tickfont.color:"#444",horizontalAlign:d,verticalAlign:g}).on("edit",(function(t){var e=s.d2r(t);void 0!==e&&l.call("_guiRelayout",i,f,e)}))}}}function Dt(e,r){if(t._transitioningWithDuration)return!1;var n=Math.max(0,Math.min(tt,pt*e+_t)),i=Math.max(0,Math.min(et,dt*r+wt)),a=Math.abs(n-_t),o=Math.abs(i-wt);function s(){St="",Tt.r=Tt.l,Tt.t=Tt.b,Lt.attr("d","M0,0Z")}if(Tt.l=Math.min(_t,n),Tt.r=Math.max(_t,n),Tt.t=Math.min(wt,i),Tt.b=Math.max(wt,i),rt.isSubplotConstrained)a>P||o>P?(St="xy",a/tt>o/et?(o=a*et/tt,wt>i?Tt.t=wt-o:Tt.b=wt+o):(a=o*tt/et,_t>n?Tt.l=_t-a:Tt.r=_t+a),Lt.attr("d",G(Tt))):s();else if(nt.isSubplotConstrained)if(a>P||o>P){St="xy";var l=Math.min(Tt.l/tt,(et-Tt.b)/et),u=Math.max(Tt.r/tt,(et-Tt.t)/et);Tt.l=l*tt,Tt.r=u*tt,Tt.b=(1-l)*et,Tt.t=(1-u)*et,Lt.attr("d",G(Tt))}else s();else!at||o<Math.min(Math.max(.6*a,C),P)?a<C||!it?s():(Tt.t=0,Tt.b=et,St="x",Lt.attr("d",function(t,e){return"M"+(t.l-.5)+","+(e-P-.5)+"h-3v"+(2*P+1)+"h3ZM"+(t.r+.5)+","+(e-P-.5)+"h3v"+(2*P+1)+"h-3Z"}(Tt,wt))):!it||a<Math.min(.6*o,P)?(Tt.l=0,Tt.r=tt,St="y",Lt.attr("d",function(t,e){return"M"+(e-P-.5)+","+(t.t-.5)+"v-3h"+(2*P+1)+"v3ZM"+(e-P-.5)+","+(t.b+.5)+"v3h"+(2*P+1)+"v-3Z"}(Tt,_t))):(St="xy",Lt.attr("d",G(Tt)));Tt.w=Tt.r-Tt.l,Tt.h=Tt.b-Tt.t,St&&(Ct=!0),t._dragged=Ct,U(Et,Lt,Tt,At,Mt,kt),zt(),t.emit("plotly_relayouting",ht),Mt=!0}function zt(){ht={},"xy"!==St&&"x"!==St||(R(J,Tt.l/tt,Tt.r/tt,ht,rt.xaxes),Vt("x",ht)),"xy"!==St&&"y"!==St||(R(K,(et-Tt.b)/et,(et-Tt.t)/et,ht,rt.yaxes),Vt("y",ht))}function Rt(){zt(),H(t),Gt(),q(t)}Pt.prepFn=function(e,r,n){var a=Pt.dragmode,s=t._fullLayout.dragmode;s!==a&&(Pt.dragmode=s),mt(),pt=t._fullLayout._invScaleX,dt=t._fullLayout._invScaleY,ot||(gt?e.shiftKey?"pan"===s?s="zoom":m(s)||(s="pan"):e.ctrlKey&&(s="pan"):s="pan"),x(s)?Pt.minDrag=1:Pt.minDrag=void 0,m(s)?(Pt.xaxes=J,Pt.yaxes=K,A(e,r,n,Pt,s)):(Pt.clickFn=It,m(a)&&Ot(),ot||("zoom"===s?(Pt.moveFn=Dt,Pt.doneFn=Rt,Pt.minDrag=1,function(e,r,n){var a=bt.getBoundingClientRect();_t=r-a.left,wt=n-a.top,t._fullLayout._calcInverseTransform(t);var s=i.apply3DTransform(t._fullLayout._invTransform)(_t,wt);_t=s[0],wt=s[1],Tt={l:_t,r:_t,w:0,t:wt,b:wt,h:0},kt=t._hmpixcount?t._hmlumcount/t._hmpixcount:o(t._fullLayout.plot_bgcolor).getLuminance(),Mt=!1,St="xy",Ct=!1,Et=N(vt,kt,$,Q,At="M0,0H"+tt+"V"+et+"H0V0"),Lt=j(vt,$,Q)}(0,r,n)):"pan"===s&&(Pt.moveFn=Ut,Pt.doneFn=Gt))),t._fullLayout._redrag=function(){var e=t._dragdata;if(e&&e.element===bt){var r=t._fullLayout.dragmode;m(r)||(mt(),Zt([0,0,tt,et]),Pt.moveFn(e.dx,e.dy))}}},g.init(Pt);var Ft=[0,0,tt,et],Bt=null,Nt=L.REDRAWDELAY,jt=e.mainplot?t._fullLayout._plots[e.mainplot]:e;function Ut(e,r){if(e*=pt,r*=dt,!t._transitioningWithDuration){if(t._fullLayout._replotting=!0,"ew"===it||"ns"===at){var n=it?-e:0,i=at?-r:0;if(nt.isSubplotConstrained){if(it&&at){var a=(e/tt-r/et)/2;n=-(e=a*tt),i=-(r=-a*et)}at?n=-i*tt/et:i=-n*et/tt}return it&&(F(J,e),Vt("x")),at&&(F(K,r),Vt("y")),Zt([n,i,tt,et]),Ht(),void t.emit("plotly_relayouting",ht)}var o,s,l="w"===it==("n"===at)?1:-1;if(it&&at&&(rt.isSubplotConstrained||nt.isSubplotConstrained)){var u=(e/tt+l*r/et)/2;e=u*tt,r=l*u*et}if("w"===it?e=p(J,0,e):"e"===it?e=p(J,1,-e):it||(e=0),"n"===at?r=p(K,1,r):"s"===at?r=p(K,0,-r):at||(r=0),o="w"===it?e:0,s="n"===at?r:0,rt.isSubplotConstrained&&!nt.isSubplotConstrained||nt.isSubplotConstrained&&it&&at&&l>0){var c;if(nt.isSubplotConstrained||!it&&1===at.length){for(c=0;c<J.length;c++)J[c].range=J[c]._r.slice(),E(J[c],1-r/et);o=(e=r*tt/et)/2}if(nt.isSubplotConstrained||!at&&1===it.length){for(c=0;c<K.length;c++)K[c].range=K[c]._r.slice(),E(K[c],1-e/tt);s=(r=e*et/tt)/2}}nt.isSubplotConstrained&&at||Vt("x"),nt.isSubplotConstrained&&it||Vt("y");var f=tt-e,h=et-r;!nt.isSubplotConstrained||it&&at||(it?(s=o?0:e*et/tt,h=f*et/tt):(o=s?0:r*tt/et,f=h*tt/et)),Zt([o,s,f,h]),Ht(),t.emit("plotly_relayouting",ht)}function p(t,e,r){for(var n,i,a=1-e,o=0;o<t.length;o++){var s=t[o];if(!s.fixedrange){n=s,i=s._rl[a]+(s._rl[e]-s._rl[a])/B(r/s._length);var l=s.l2r(i);!1!==l&&void 0!==l&&(s.range[e]=l)}}return n._length*(n._rl[e]-i)/(n._rl[e]-n._rl[a])}}function Vt(t,e){for(var r=nt.isSubplotConstrained?{x:K,y:J}[t]:nt[t+"axes"],n=nt.isSubplotConstrained?{x:J,y:K}[t]:[],i=0;i<r.length;i++){var a=r[i],o=a._id,s=nt.xLinks[o]||nt.yLinks[o],l=n[0]||V[s]||X[s];l&&(e?(e[a._name+".range[0]"]=e[l._name+".range[0]"],e[a._name+".range[1]"]=e[l._name+".range[1]"]):a.range=l.range.slice())}}function Ht(){var r,n=[];function i(t){for(r=0;r<t.length;r++)t[r].fixedrange||n.push(t[r]._id)}function a(t,e){for(r=0;r<t.length;r++){var i=t[r],a=i[e];i.fixedrange||"sync"!==a.tickmode||n.push(a._id)}}for(st&&(i(J),i(rt.xaxes),i(nt.xaxes),a(e.overlays,"xaxis")),lt&&(i(K),i(rt.yaxes),i(nt.yaxes),a(e.overlays,"yaxis")),ht={},r=0;r<n.length;r++){var o=n[r],s=k(t,o);d.drawOne(t,s,{skipTitle:!0}),ht[s._name+".range[0]"]=s.range[0],ht[s._name+".range[1]"]=s.range[1]}d.redrawComponents(t,n)}function qt(){if(!t._transitioningWithDuration){var e=t._context.doubleClick,r=[];it&&(r=r.concat(J)),at&&(r=r.concat(K)),nt.xaxes&&(r=r.concat(nt.xaxes)),nt.yaxes&&(r=r.concat(nt.yaxes));var n,i,a={};if("reset+autosize"===e)for(e="autosize",i=0;i<r.length;i++){var o=(n=r[i])._rangeInitial0,s=n._rangeInitial1,u=void 0!==o||void 0!==s;if(u&&(void 0!==o&&o!==n.range[0]||void 0!==s&&s!==n.range[1])||!u&&!0!==n.autorange){e="reset";break}}if("autosize"===e)for(i=0;i<r.length;i++)(n=r[i]).fixedrange||(a[n._name+".autorange"]=!0);else if("reset"===e)for((it||rt.isSubplotConstrained)&&(r=r.concat(rt.xaxes)),at&&!rt.isSubplotConstrained&&(r=r.concat(rt.yaxes)),rt.isSubplotConstrained&&(it?at||(r=r.concat(K)):r=r.concat(J)),i=0;i<r.length;i++)if(!(n=r[i]).fixedrange){var c=n._name,f=n._autorangeInitial;void 0===n._rangeInitial0&&void 0===n._rangeInitial1?a[c+".autorange"]=!0:void 0===n._rangeInitial0?(a[c+".autorange"]=f,a[c+".range"]=[null,n._rangeInitial1]):void 0===n._rangeInitial1?(a[c+".range"]=[n._rangeInitial0,null],a[c+".autorange"]=f):a[c+".range"]=[n._rangeInitial0,n._rangeInitial1]}t.emit("plotly_doubleclick",null),l.call("_guiRelayout",t,a)}}function Gt(){Zt([0,0,tt,et]),i.syncOrAsync([T.previousPromises,function(){t._fullLayout._replotting=!1,l.call("_guiRelayout",t,ht)}],t)}function Zt(e){var r,n,a,o,s=t._fullLayout,u=s._plots,c=s._subplots.cartesian;if(ct&&l.subplotsRegistry.splom.drag(t),ut)for(r=0;r<c.length;r++)if(a=(n=u[c[r]]).xaxis,o=n.yaxis,n._scene){var f=i.simpleMap(a.range,a.r2l),p=i.simpleMap(o.range,o.r2l);a.limitRange&&a.limitRange(),o.limitRange&&o.limitRange(),f=a.range,p=o.range,n._scene.update({range:[f[0],p[0],f[1],p[1]]})}if((ct||ut)&&(_(t),w(t)),ft){var d=e[2]/O._length,g=e[3]/I._length;for(r=0;r<c.length;r++){a=(n=u[c[r]]).xaxis,o=n.yaxis;var m,x,b,T,k=(st||nt.isSubplotConstrained)&&!a.fixedrange&&V[a._id],A=(lt||nt.isSubplotConstrained)&&!o.fixedrange&&X[o._id];if(k?(m=d,b=y||nt.isSubplotConstrained?e[0]:Xt(a,m)):nt.xaHash[a._id]?(m=d,b=e[0]*a._length/O._length):nt.yaHash[a._id]?(m=g,b="ns"===at?-e[1]*a._length/I._length:Xt(a,m,{n:"top",s:"bottom"}[at])):b=Wt(a,m=Yt(a,d,g)),m>1&&(void 0!==a.maxallowed&&st===(a.range[0]<a.range[1]?"e":"w")||void 0!==a.minallowed&&st===(a.range[0]<a.range[1]?"w":"e"))&&(m=1,b=0),A?(x=g,T=v||nt.isSubplotConstrained?e[1]:Xt(o,x)):nt.yaHash[o._id]?(x=g,T=e[1]*o._length/I._length):nt.xaHash[o._id]?(x=d,T="ew"===it?-e[0]*o._length/O._length:Xt(o,x,{e:"right",w:"left"}[it])):T=Wt(o,x=Yt(o,d,g)),x>1&&(void 0!==o.maxallowed&&lt===(o.range[0]<o.range[1]?"n":"s")||void 0!==o.minallowed&&lt===(o.range[0]<o.range[1]?"s":"n"))&&(x=1,T=0),m||x){m||(m=1),x||(x=1);var M=a._offset-b/m,S=o._offset-T/x;n.clipRect.call(h.setTranslate,b,T).call(h.setScale,m,x),n.plot.call(h.setTranslate,M,S).call(h.setScale,1/m,1/x),m===n.xScaleFactor&&x===n.yScaleFactor||(h.setPointGroupScale(n.zoomScalePts,m,x),h.setTextPointsScale(n.zoomScaleTxt,m,x)),h.hideOutsideRangePoints(n.clipOnAxisFalseTraces,n),n.xScaleFactor=m,n.yScaleFactor=x}}}}function Yt(t,e,r){return t.fixedrange?0:st&&rt.xaHash[t._id]?e:lt&&(rt.isSubplotConstrained?rt.xaHash:rt.yaHash)[t._id]?r:0}function Wt(t,e){return e?(t.range=t._r.slice(),E(t,e),Xt(t,e)):0}function Xt(t,e,r){return t._length*(1-e)*b[r||t.constraintoward||"middle"]}return v.length*y.length!=1&&Y(bt,(function(e){if(t._context._scrollZoom.cartesian||t._fullLayout._enablescrollzoom){if(Ot(),t._transitioningWithDuration)return e.preventDefault(),void e.stopPropagation();mt(),clearTimeout(Bt);var r=-e.deltaY;if(isFinite(r)||(r=e.wheelDelta/10),isFinite(r)){var n,a=Math.exp(-Math.min(Math.max(r,-20),20)/200),o=jt.draglayer.select(".nsewdrag").node().getBoundingClientRect(),s=(e.clientX-o.left)/o.width,l=(o.bottom-e.clientY)/o.height;if(st){for(y||(s=.5),n=0;n<J.length;n++)u(J[n],s,a);Vt("x"),Ft[2]*=a,Ft[0]+=Ft[2]*s*(1/a-1)}if(lt){for(v||(l=.5),n=0;n<K.length;n++)u(K[n],l,a);Vt("y"),Ft[3]*=a,Ft[1]+=Ft[3]*(1-l)*(1/a-1)}Zt(Ft),Ht(),t.emit("plotly_relayouting",ht),Bt=setTimeout((function(){t._fullLayout&&(Ft=[0,0,tt,et],Gt())}),Nt),e.preventDefault()}else i.log("Did not find wheel motion attributes: ",e)}function u(t,e,r){if(!t.fixedrange){var n=i.simpleMap(t.range,t.r2l),a=n[0]+(n[1]-n[0])*e;t.range=n.map((function(e){return t.l2r(a+(e-a)*r)}))}}})),bt},makeDragger:I,makeRectDragger:D,makeZoombox:N,makeCorners:j,updateZoombox:U,xyCorners:G,transitionZoombox:V,removeZoombox:H,showDoubleClickNotifier:q,attachWheelEventHandler:Y}},4305:function(t,e,r){"use strict";var n=r(39898),i=r(30211),a=r(28569),o=r(6964),s=r(29323).makeDragBox,l=r(85555).DRAGGERSIZE;e.initInteractions=function(t){var r=t._fullLayout;if(t._context.staticPlot)n.select(t).selectAll(".drag").remove();else if(r._has("cartesian")||r._has("splom")){Object.keys(r._plots||{}).sort((function(t,e){if((r._plots[t].mainplot&&!0)===(r._plots[e].mainplot&&!0)){var n=t.split("y"),i=e.split("y");return n[0]===i[0]?Number(n[1]||1)-Number(i[1]||1):Number(n[0]||1)-Number(i[0]||1)}return r._plots[t].mainplot?1:-1})).forEach((function(e){var n=r._plots[e],o=n.xaxis,u=n.yaxis;if(!n.mainplot){var c=s(t,n,o._offset,u._offset,o._length,u._length,"ns","ew");c.onmousemove=function(r){t._fullLayout._rehover=function(){t._fullLayout._hoversubplot===e&&t._fullLayout._plots[e]&&i.hover(t,r,e)},i.hover(t,r,e),t._fullLayout._lasthover=c,t._fullLayout._hoversubplot=e},c.onmouseout=function(e){t._dragging||(t._fullLayout._hoversubplot=null,a.unhover(t,e))},t._context.showAxisDragHandles&&(s(t,n,o._offset-l,u._offset-l,l,l,"n","w"),s(t,n,o._offset+o._length,u._offset-l,l,l,"n","e"),s(t,n,o._offset-l,u._offset+u._length,l,l,"s","w"),s(t,n,o._offset+o._length,u._offset+u._length,l,l,"s","e"))}if(t._context.showAxisDragHandles){if(e===o._mainSubplot){var f=o._mainLinePosition;"top"===o.side&&(f-=l),s(t,n,o._offset+.1*o._length,f,.8*o._length,l,"","ew"),s(t,n,o._offset,f,.1*o._length,l,"","w"),s(t,n,o._offset+.9*o._length,f,.1*o._length,l,"","e")}if(e===u._mainSubplot){var h=u._mainLinePosition;"right"!==u.side&&(h-=l),s(t,n,h,u._offset+.1*u._length,l,.8*u._length,"ns",""),s(t,n,h,u._offset+.9*u._length,l,.1*u._length,"s",""),s(t,n,h,u._offset,l,.1*u._length,"n","")}}}));var o=r._hoverlayer.node();o.onmousemove=function(e){e.target=t._fullLayout._lasthover,i.hover(t,e,r._hoversubplot)},o.onclick=function(e){e.target=t._fullLayout._lasthover,i.click(t,e)},o.onmousedown=function(e){t._fullLayout._lasthover.onmousedown(e)},e.updateFx(t)}},e.updateFx=function(t){var e=t._fullLayout,r="pan"===e.dragmode?"move":"crosshair";o(e._draggers,r)}},76325:function(t,e,r){"use strict";var n=r(73972),i=r(71828),a=r(41675);t.exports=function(t){return function(e,r){var o=e[t];if(Array.isArray(o))for(var s=n.subplotsRegistry.cartesian,l=s.idRegex,u=r._subplots,c=u.xaxis,f=u.yaxis,h=u.cartesian,p=r._has("cartesian")||r._has("gl2d"),d=0;d<o.length;d++){var v=o[d];if(i.isPlainObject(v)){var g=a.cleanId(v.xref,"x",!1),y=a.cleanId(v.yref,"y",!1),m=l.x.test(g),x=l.y.test(y);if(m||x){p||i.pushUnique(r._basePlotModules,s);var b=!1;m&&-1===c.indexOf(g)&&(c.push(g),b=!0),x&&-1===f.indexOf(y)&&(f.push(y),b=!0),b&&m&&x&&h.push(g+y)}}}}}},93612:function(t,e,r){"use strict";var n=r(39898),i=r(73972),a=r(71828),o=r(74875),s=r(91424),l=r(27659).a0,u=r(41675),c=r(85555),f=r(77922),h=a.ensureSingle;function p(t,e,r){return a.ensureSingle(t,e,r,(function(t){t.datum(r)}))}function d(t,e,r,a,o){for(var u,f,h,p=c.traceLayerClasses,d=t._fullLayout,v=d._modules,g=[],y=[],m=0;m<v.length;m++){var x=(u=v[m]).name,b=i.modules[x].categories;if(b.svg){var _=u.layerName||x+"layer",w=u.plot;h=(f=l(r,w))[0],r=f[1],h.length&&g.push({i:p.indexOf(_),className:_,plotMethod:w,cdModule:h}),b.zoomScale&&y.push("."+_)}}g.sort((function(t,e){return t.i-e.i}));var T=e.plot.selectAll("g.mlayer").data(g,(function(t){return t.className}));if(T.enter().append("g").attr("class",(function(t){return t.className})).classed("mlayer",!0).classed("rangeplot",e.isRangePlot),T.exit().remove(),T.order(),T.each((function(r){var i=n.select(this),l=r.className;r.plotMethod(t,e,r.cdModule,i,a,o),-1===c.clipOnAxisFalseQuery.indexOf("."+l)&&s.setClipUrl(i,e.layerClipId,t)})),d._has("scattergl")&&(u=i.getModule("scattergl"),h=l(r,u)[0],u.plot(t,e,h)),!t._context.staticPlot&&(e._hasClipOnAxisFalse&&(e.clipOnAxisFalseTraces=e.plot.selectAll(c.clipOnAxisFalseQuery.join(",")).selectAll(".trace")),y.length)){var k=e.plot.selectAll(y.join(",")).selectAll(".trace");e.zoomScalePts=k.selectAll("path.point"),e.zoomScaleTxt=k.selectAll(".textpoint")}}function v(t,e){var r=e.plotgroup,n=e.id,i=c.layerValue2layerClass[e.xaxis.layer],a=c.layerValue2layerClass[e.yaxis.layer],o=t._fullLayout._hasOnlyLargeSploms;if(e.mainplot){var s=e.mainplotinfo,l=s.plotgroup,f=n+"-x",d=n+"-y";e.minorGridlayer=s.minorGridlayer,e.gridlayer=s.gridlayer,e.zerolinelayer=s.zerolinelayer,h(s.overlinesBelow,"path",f),h(s.overlinesBelow,"path",d),h(s.overaxesBelow,"g",f),h(s.overaxesBelow,"g",d),e.plot=h(s.overplot,"g",n),h(s.overlinesAbove,"path",f),h(s.overlinesAbove,"path",d),h(s.overaxesAbove,"g",f),h(s.overaxesAbove,"g",d),e.xlines=l.select(".overlines-"+i).select("."+f),e.ylines=l.select(".overlines-"+a).select("."+d),e.xaxislayer=l.select(".overaxes-"+i).select("."+f),e.yaxislayer=l.select(".overaxes-"+a).select("."+d)}else if(o)e.xlines=h(r,"path","xlines-above"),e.ylines=h(r,"path","ylines-above"),e.xaxislayer=h(r,"g","xaxislayer-above"),e.yaxislayer=h(r,"g","yaxislayer-above");else{var v=h(r,"g","layer-subplot");e.shapelayer=h(v,"g","shapelayer"),e.imagelayer=h(v,"g","imagelayer"),e.minorGridlayer=h(r,"g","minor-gridlayer"),e.gridlayer=h(r,"g","gridlayer"),e.zerolinelayer=h(r,"g","zerolinelayer"),h(r,"path","xlines-below"),h(r,"path","ylines-below"),e.overlinesBelow=h(r,"g","overlines-below"),h(r,"g","xaxislayer-below"),h(r,"g","yaxislayer-below"),e.overaxesBelow=h(r,"g","overaxes-below"),e.plot=h(r,"g","plot"),e.overplot=h(r,"g","overplot"),e.xlines=h(r,"path","xlines-above"),e.ylines=h(r,"path","ylines-above"),e.overlinesAbove=h(r,"g","overlines-above"),h(r,"g","xaxislayer-above"),h(r,"g","yaxislayer-above"),e.overaxesAbove=h(r,"g","overaxes-above"),e.xlines=r.select(".xlines-"+i),e.ylines=r.select(".ylines-"+a),e.xaxislayer=r.select(".xaxislayer-"+i),e.yaxislayer=r.select(".yaxislayer-"+a)}o||(p(e.minorGridlayer,"g",e.xaxis._id),p(e.minorGridlayer,"g",e.yaxis._id),e.minorGridlayer.selectAll("g").map((function(t){return t[0]})).sort(u.idSort),p(e.gridlayer,"g",e.xaxis._id),p(e.gridlayer,"g",e.yaxis._id),e.gridlayer.selectAll("g").map((function(t){return t[0]})).sort(u.idSort)),e.xlines.style("fill","none").classed("crisp",!0),e.ylines.style("fill","none").classed("crisp",!0)}function g(t,e){if(t){var r={};for(var i in t.each((function(t){var i=t[0];n.select(this).remove(),y(i,e),r[i]=!0})),e._plots)for(var a=e._plots[i].overlays||[],o=0;o<a.length;o++){var s=a[o];r[s.id]&&s.plot.selectAll(".trace").remove()}}}function y(t,e){e._draggers.selectAll("g."+t).remove(),e._defs.select("#clip"+e._uid+t+"plot").remove()}e.name="cartesian",e.attr=["xaxis","yaxis"],e.idRoot=["x","y"],e.idRegex=c.idRegex,e.attrRegex=c.attrRegex,e.attributes=r(89502),e.layoutAttributes=r(13838),e.supplyLayoutDefaults=r(86763),e.transitionAxes=r(66847),e.finalizeSubplots=function(t,e){var r,n,i,o=e._subplots,s=o.xaxis,l=o.yaxis,f=o.cartesian,h=f.concat(o.gl2d||[]),p={},d={};for(r=0;r<h.length;r++){var v=h[r].split("y");p[v[0]]=1,d["y"+v[1]]=1}for(r=0;r<s.length;r++)p[n=s[r]]||(i=(t[u.id2name(n)]||{}).anchor,c.idRegex.y.test(i)||(i="y"),f.push(n+i),h.push(n+i),d[i]||(d[i]=1,a.pushUnique(l,i)));for(r=0;r<l.length;r++)d[i=l[r]]||(n=(t[u.id2name(i)]||{}).anchor,c.idRegex.x.test(n)||(n="x"),f.push(n+i),h.push(n+i),p[n]||(p[n]=1,a.pushUnique(s,n)));if(!h.length){for(var g in n="",i="",t)c.attrRegex.test(g)&&("x"===g.charAt(0)?(!n||+g.substr(5)<+n.substr(5))&&(n=g):(!i||+g.substr(5)<+i.substr(5))&&(i=g));n=n?u.name2id(n):"x",i=i?u.name2id(i):"y",s.push(n),l.push(i),f.push(n+i)}},e.plot=function(t,e,r,n){var i,a=t._fullLayout,o=a._subplots.cartesian,s=t.calcdata;if(!Array.isArray(e))for(e=[],i=0;i<s.length;i++)e.push(i);for(i=0;i<o.length;i++){for(var l,u=o[i],c=a._plots[u],f=[],h=0;h<s.length;h++){var p=s[h],v=p[0].trace;v.xaxis+v.yaxis===u&&((-1!==e.indexOf(v.index)||v.carpet)&&(l&&l[0].trace.xaxis+l[0].trace.yaxis===u&&-1!==["tonextx","tonexty","tonext"].indexOf(v.fill)&&-1===f.indexOf(l)&&f.push(l),f.push(p)),l=p)}d(t,c,f,r,n)}},e.clean=function(t,e,r,n){var i,a,o,s=n._plots||{},l=e._plots||{},c=n._subplots||{};if(n._hasOnlyLargeSploms&&!e._hasOnlyLargeSploms)for(o in s)(i=s[o]).plotgroup&&i.plotgroup.remove();var f=n._has&&n._has("gl"),h=e._has&&e._has("gl");if(f&&!h)for(o in s)(i=s[o])._scene&&i._scene.destroy();if(c.xaxis&&c.yaxis){var p=u.listIds({_fullLayout:n});for(a=0;a<p.length;a++){var d=p[a];e[u.id2name(d)]||n._infolayer.selectAll(".g-"+d+"title").remove()}}var v=n._has&&n._has("cartesian"),m=e._has&&e._has("cartesian");if(v&&!m)g(n._cartesianlayer.selectAll(".subplot"),n),n._defs.selectAll(".axesclip").remove(),delete n._axisConstraintGroups,delete n._axisMatchGroups;else if(c.cartesian)for(a=0;a<c.cartesian.length;a++){var x=c.cartesian[a];if(!l[x]){var b="."+x+",."+x+"-x,."+x+"-y";n._cartesianlayer.selectAll(b).remove(),y(x,n)}}},e.drawFramework=function(t){var e=t._fullLayout,r=function(t){var e,r,n,i,a,o,s=t._fullLayout,l=s._subplots.cartesian,u=l.length,c=[],f=[];for(e=0;e<u;e++){n=l[e],a=(i=s._plots[n]).xaxis,o=i.yaxis;var h=a._mainAxis,p=o._mainAxis,d=h._id+p._id,v=s._plots[d];i.overlays=[],d!==n&&v?(i.mainplot=d,i.mainplotinfo=v,f.push(n)):(i.mainplot=void 0,i.mainplotinfo=void 0,c.push(n))}for(e=0;e<f.length;e++)n=f[e],(i=s._plots[n]).mainplotinfo.overlays.push(i);var g=c.concat(f),y=new Array(u);for(e=0;e<u;e++){n=g[e],a=(i=s._plots[n]).xaxis,o=i.yaxis;var m=[n,a.layer,o.layer,a.overlaying||"",o.overlaying||""];for(r=0;r<i.overlays.length;r++)m.push(i.overlays[r].id);y[e]=m}return y}(t),i=e._cartesianlayer.selectAll(".subplot").data(r,String);i.enter().append("g").attr("class",(function(t){return"subplot "+t[0]})),i.order(),i.exit().call(g,e),i.each((function(r){var i=r[0],a=e._plots[i];a.plotgroup=n.select(this),v(t,a),a.draglayer=h(e._draggers,"g",i)}))},e.rangePlot=function(t,e,r){v(t,e),d(t,e,r),o.style(t)},e.toSVG=function(t){var e=t._fullLayout._glimages,r=n.select(t).selectAll(".svg-container");r.filter((function(t,e){return e===r.size()-1})).selectAll(".gl-canvas-context, .gl-canvas-focus").each((function(){var t=this,r=t.toDataURL("image/png");e.append("svg:image").attr({xmlns:f.svg,"xlink:href":r,preserveAspectRatio:"none",x:0,y:0,width:t.style.width,height:t.style.height})}))},e.updateFx=r(4305).updateFx},13838:function(t,e,r){"use strict";var n=r(41940),i=r(22399),a=r(79952).P,o=r(1426).extendFlat,s=r(44467).templatedArray,l=r(12663).descriptionWithDates,u=r(50606).ONEDAY,c=r(85555),f=c.HOUR_PATTERN,h=c.WEEKDAY_PATTERN,p={valType:"enumerated",values:["auto","linear","array"],editType:"ticks",impliedEdits:{tick0:void 0,dtick:void 0}},d=o({},p,{values:p.values.slice().concat(["sync"])});function v(t){return{valType:"integer",min:0,dflt:t?5:0,editType:"ticks"}}var g={valType:"any",editType:"ticks",impliedEdits:{tickmode:"linear"}},y={valType:"any",editType:"ticks",impliedEdits:{tickmode:"linear"}},m={valType:"data_array",editType:"ticks"},x={valType:"enumerated",values:["outside","inside",""],editType:"ticks"};function b(t){var e={valType:"number",min:0,editType:"ticks"};return t||(e.dflt=5),e}function _(t){var e={valType:"number",min:0,editType:"ticks"};return t||(e.dflt=1),e}var w={valType:"color",dflt:i.defaultLine,editType:"ticks"},T={valType:"color",dflt:i.lightLine,editType:"ticks"};function k(t){var e={valType:"number",min:0,editType:"ticks"};return t||(e.dflt=1),e}var A=o({},a,{editType:"ticks"}),M={valType:"boolean",editType:"ticks"};t.exports={visible:{valType:"boolean",editType:"plot"},color:{valType:"color",dflt:i.defaultLine,editType:"ticks"},title:{text:{valType:"string",editType:"ticks"},font:n({editType:"ticks"}),standoff:{valType:"number",min:0,editType:"ticks"},editType:"ticks"},type:{valType:"enumerated",values:["-","linear","log","date","category","multicategory"],dflt:"-",editType:"calc",_noTemplating:!0},autotypenumbers:{valType:"enumerated",values:["convert types","strict"],dflt:"convert types",editType:"calc"},autorange:{valType:"enumerated",values:[!0,!1,"reversed","min reversed","max reversed","min","max"],dflt:!0,editType:"axrange",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},autorangeoptions:{minallowed:{valType:"any",editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},maxallowed:{valType:"any",editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},clipmin:{valType:"any",editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},clipmax:{valType:"any",editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},include:{valType:"any",arrayOk:!0,editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},editType:"plot"},rangemode:{valType:"enumerated",values:["normal","tozero","nonnegative"],dflt:"normal",editType:"plot"},range:{valType:"info_array",items:[{valType:"any",editType:"axrange",impliedEdits:{"^autorange":!1},anim:!0},{valType:"any",editType:"axrange",impliedEdits:{"^autorange":!1},anim:!0}],editType:"axrange",impliedEdits:{autorange:!1},anim:!0},minallowed:{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}},maxallowed:{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}},fixedrange:{valType:"boolean",dflt:!1,editType:"calc"},insiderange:{valType:"info_array",items:[{valType:"any",editType:"plot"},{valType:"any",editType:"plot"}],editType:"plot"},scaleanchor:{valType:"enumerated",values:[c.idRegex.x.toString(),c.idRegex.y.toString(),!1],editType:"plot"},scaleratio:{valType:"number",min:0,dflt:1,editType:"plot"},constrain:{valType:"enumerated",values:["range","domain"],editType:"plot"},constraintoward:{valType:"enumerated",values:["left","center","right","top","middle","bottom"],editType:"plot"},matches:{valType:"enumerated",values:[c.idRegex.x.toString(),c.idRegex.y.toString()],editType:"calc"},rangebreaks:s("rangebreak",{enabled:{valType:"boolean",dflt:!0,editType:"calc"},bounds:{valType:"info_array",items:[{valType:"any",editType:"calc"},{valType:"any",editType:"calc"}],editType:"calc"},pattern:{valType:"enumerated",values:[h,f,""],editType:"calc"},values:{valType:"info_array",freeLength:!0,editType:"calc",items:{valType:"any",editType:"calc"}},dvalue:{valType:"number",editType:"calc",min:0,dflt:u},editType:"calc"}),tickmode:d,nticks:v(),tick0:g,dtick:y,ticklabelstep:{valType:"integer",min:1,dflt:1,editType:"ticks"},tickvals:m,ticktext:{valType:"data_array",editType:"ticks"},ticks:x,tickson:{valType:"enumerated",values:["labels","boundaries"],dflt:"labels",editType:"ticks"},ticklabelmode:{valType:"enumerated",values:["instant","period"],dflt:"instant",editType:"ticks"},ticklabelposition:{valType:"enumerated",values:["outside","inside","outside top","inside top","outside left","inside left","outside right","inside right","outside bottom","inside bottom"],dflt:"outside",editType:"calc"},ticklabeloverflow:{valType:"enumerated",values:["allow","hide past div","hide past domain"],editType:"calc"},mirror:{valType:"enumerated",values:[!0,"ticks",!1,"all","allticks"],dflt:!1,editType:"ticks+layoutstyle"},ticklen:b(),tickwidth:_(),tickcolor:w,showticklabels:{valType:"boolean",dflt:!0,editType:"ticks"},labelalias:{valType:"any",dflt:!1,editType:"ticks"},automargin:{valType:"flaglist",flags:["height","width","left","right","top","bottom"],extras:[!0,!1],dflt:!1,editType:"ticks"},showspikes:{valType:"boolean",dflt:!1,editType:"modebar"},spikecolor:{valType:"color",dflt:null,editType:"none"},spikethickness:{valType:"number",dflt:3,editType:"none"},spikedash:o({},a,{dflt:"dash",editType:"none"}),spikemode:{valType:"flaglist",flags:["toaxis","across","marker"],dflt:"toaxis",editType:"none"},spikesnap:{valType:"enumerated",values:["data","cursor","hovered data"],dflt:"hovered data",editType:"none"},tickfont:n({editType:"ticks"}),tickangle:{valType:"angle",dflt:"auto",editType:"ticks"},tickprefix:{valType:"string",dflt:"",editType:"ticks"},showtickprefix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},ticksuffix:{valType:"string",dflt:"",editType:"ticks"},showticksuffix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},showexponent:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},exponentformat:{valType:"enumerated",values:["none","e","E","power","SI","B"],dflt:"B",editType:"ticks"},minexponent:{valType:"number",dflt:3,min:0,editType:"ticks"},separatethousands:{valType:"boolean",dflt:!1,editType:"ticks"},tickformat:{valType:"string",dflt:"",editType:"ticks",description:l("tick label")},tickformatstops:s("tickformatstop",{enabled:{valType:"boolean",dflt:!0,editType:"ticks"},dtickrange:{valType:"info_array",items:[{valType:"any",editType:"ticks"},{valType:"any",editType:"ticks"}],editType:"ticks"},value:{valType:"string",dflt:"",editType:"ticks"},editType:"ticks"}),hoverformat:{valType:"string",dflt:"",editType:"none",description:l("hover text")},showline:{valType:"boolean",dflt:!1,editType:"ticks+layoutstyle"},linecolor:{valType:"color",dflt:i.defaultLine,editType:"layoutstyle"},linewidth:{valType:"number",min:0,dflt:1,editType:"ticks+layoutstyle"},showgrid:M,gridcolor:T,gridwidth:k(),griddash:A,zeroline:{valType:"boolean",editType:"ticks"},zerolinecolor:{valType:"color",dflt:i.defaultLine,editType:"ticks"},zerolinewidth:{valType:"number",dflt:1,editType:"ticks"},showdividers:{valType:"boolean",dflt:!0,editType:"ticks"},dividercolor:{valType:"color",dflt:i.defaultLine,editType:"ticks"},dividerwidth:{valType:"number",dflt:1,editType:"ticks"},anchor:{valType:"enumerated",values:["free",c.idRegex.x.toString(),c.idRegex.y.toString()],editType:"plot"},side:{valType:"enumerated",values:["top","bottom","left","right"],editType:"plot"},overlaying:{valType:"enumerated",values:["free",c.idRegex.x.toString(),c.idRegex.y.toString()],editType:"plot"},minor:{tickmode:p,nticks:v("minor"),tick0:g,dtick:y,tickvals:m,ticks:x,ticklen:b("minor"),tickwidth:_("minor"),tickcolor:w,gridcolor:T,gridwidth:k("minor"),griddash:A,showgrid:M,editType:"ticks"},layer:{valType:"enumerated",values:["above traces","below traces"],dflt:"above traces",editType:"plot"},domain:{valType:"info_array",items:[{valType:"number",min:0,max:1,editType:"plot"},{valType:"number",min:0,max:1,editType:"plot"}],dflt:[0,1],editType:"plot"},position:{valType:"number",min:0,max:1,dflt:0,editType:"plot"},autoshift:{valType:"boolean",dflt:!1,editType:"plot"},shift:{valType:"number",editType:"plot"},categoryorder:{valType:"enumerated",values:["trace","category ascending","category descending","array","total ascending","total descending","min ascending","min descending","max ascending","max descending","sum ascending","sum descending","mean ascending","mean descending","median ascending","median descending"],dflt:"trace",editType:"calc"},categoryarray:{valType:"data_array",editType:"calc"},uirevision:{valType:"any",editType:"none"},editType:"calc",_deprecated:{autotick:{valType:"boolean",editType:"ticks"},title:{valType:"string",editType:"ticks"},titlefont:n({editType:"ticks"})}}},86763:function(t,e,r){"use strict";var n=r(71828),i=r(7901),a=r(23469).isUnifiedHover,o=r(98212),s=r(44467),l=r(10820),u=r(13838),c=r(951),f=r(71453),h=r(99082),p=r(52830),d=r(41675),v=d.id2name,g=d.name2id,y=r(85555).AX_ID_PATTERN,m=r(73972),x=m.traceIs,b=m.getComponentMethod;function _(t,e,r){Array.isArray(t[e])?t[e].push(r):t[e]=[r]}t.exports=function(t,e,r){var m,w,T=e.autotypenumbers,k={},A={},M={},S={},E={},L={},C={},P={},O={},I={};for(m=0;m<r.length;m++){var D=r[m];if(x(D,"cartesian")||x(D,"gl2d")){var z,R;if(D.xaxis)z=v(D.xaxis),_(k,z,D);else if(D.xaxes)for(w=0;w<D.xaxes.length;w++)_(k,v(D.xaxes[w]),D);if(D.yaxis)R=v(D.yaxis),_(k,R,D);else if(D.yaxes)for(w=0;w<D.yaxes.length;w++)_(k,v(D.yaxes[w]),D);"funnel"===D.type?"h"===D.orientation?(z&&(A[z]=!0),R&&(C[R]=!0)):R&&(M[R]=!0):"image"===D.type?(R&&(P[R]=!0),z&&(P[z]=!0)):(R&&(E[R]=!0,L[R]=!0),x(D,"carpet")&&("carpet"!==D.type||D._cheater)||z&&(S[z]=!0)),"carpet"===D.type&&D._cheater&&z&&(A[z]=!0),x(D,"2dMap")&&(O[z]=!0,O[R]=!0),x(D,"oriented")&&(I["h"===D.orientation?R:z]=!0)}}var F=e._subplots,B=F.xaxis,N=F.yaxis,j=n.simpleMap(B,v),U=n.simpleMap(N,v),V=j.concat(U),H=i.background;B.length&&N.length&&(H=n.coerce(t,e,l,"plot_bgcolor"));var q,G,Z,Y,W,X=i.combine(H,e.paper_bgcolor);function J(){var t=k[q]||[];W._traceIndices=t.map((function(t){return t._expandedIndex})),W._annIndices=[],W._shapeIndices=[],W._selectionIndices=[],W._imgIndices=[],W._subplotsWith=[],W._counterAxes=[],W._name=W._attr=q,W._id=G}function K(t,e){return n.coerce(Y,W,u,t,e)}function $(t,e){return n.coerce2(Y,W,u,t,e)}function Q(t){return"x"===t?N:B}function tt(e,r){for(var n="x"===e?j:U,i=[],a=0;a<n.length;a++){var o=n[a];o===r||(t[o]||{}).overlaying||i.push(g(o))}return i}var et={x:Q("x"),y:Q("y")},rt=et.x.concat(et.y),nt={},it=[];function at(){var t=Y.matches;y.test(t)&&-1===rt.indexOf(t)&&(nt[t]=Y.type,it=Object.keys(nt))}var ot=o(t,e),st=a(ot);for(m=0;m<V.length;m++){q=V[m],G=g(q),Z=q.charAt(0),n.isPlainObject(t[q])||(t[q]={}),Y=t[q],W=s.newContainer(e,q,Z+"axis"),J();var lt="x"===Z&&!S[q]&&A[q]||"y"===Z&&!E[q]&&M[q],ut="y"===Z&&(!L[q]&&C[q]||P[q]),ct={hasMinor:!0,letter:Z,font:e.font,outerTicks:O[q],showGrid:!I[q],data:k[q]||[],bgColor:X,calendar:e.calendar,automargin:!0,visibleDflt:lt,reverseDflt:ut,autotypenumbersDflt:T,splomStash:((e._splomAxes||{})[Z]||{})[G]};K("uirevision",e.uirevision),c(Y,W,K,ct),f(Y,W,K,ct,e);var ft=st&&Z===ot.charAt(0),ht=$("spikecolor",st?W.color:void 0),pt=$("spikethickness",st?1.5:void 0),dt=$("spikedash",st?"dot":void 0),vt=$("spikemode",st?"across":void 0),gt=$("spikesnap");K("showspikes",!!(ft||ht||pt||dt||vt||gt))||(delete W.spikecolor,delete W.spikethickness,delete W.spikedash,delete W.spikemode,delete W.spikesnap);var yt=v(Y.overlaying),mt=[0,1];if(void 0!==e[yt]){var xt=v(e[yt].anchor);void 0!==e[xt]&&(mt=e[xt].domain)}p(Y,W,K,{letter:Z,counterAxes:et[Z],overlayableAxes:tt(Z,q),grid:e.grid,overlayingDomain:mt}),K("title.standoff"),at(),W._input=Y}for(m=0;m<it.length;){G=it[m++],Z=(q=v(G)).charAt(0),n.isPlainObject(t[q])||(t[q]={}),Y=t[q],W=s.newContainer(e,q,Z+"axis"),J();var bt={letter:Z,font:e.font,outerTicks:O[q],showGrid:!I[q],data:[],bgColor:X,calendar:e.calendar,automargin:!0,visibleDflt:!1,reverseDflt:!1,autotypenumbersDflt:T,splomStash:((e._splomAxes||{})[Z]||{})[G]};K("uirevision",e.uirevision),W.type=nt[G]||"linear",f(Y,W,K,bt,e),p(Y,W,K,{letter:Z,counterAxes:et[Z],overlayableAxes:tt(Z,q),grid:e.grid}),K("fixedrange"),at(),W._input=Y}var _t=b("rangeslider","handleDefaults"),wt=b("rangeselector","handleDefaults");for(m=0;m<j.length;m++)q=j[m],Y=t[q],W=e[q],_t(t,e,q),"date"===W.type&&wt(Y,W,e,U,W.calendar),K("fixedrange");for(m=0;m<U.length;m++){q=U[m],Y=t[q],W=e[q];var Tt=e[v(W.anchor)];K("fixedrange",b("rangeslider","isVisible")(Tt))}h.handleDefaults(t,e,{axIds:rt.concat(it).sort(d.idSort),axHasImage:P})}},92128:function(t,e,r){"use strict";var n=r(84267).mix,i=r(22399),a=r(71828);t.exports=function(t,e,r,o){var s=(o=o||{}).dfltColor;function l(r,n){return a.coerce2(t,e,o.attributes,r,n)}var u=l("linecolor",s),c=l("linewidth");r("showline",o.showLine||!!u||!!c)||(delete e.linecolor,delete e.linewidth);var f=l("gridcolor",n(s,o.bgColor,o.blend||i.lightFraction).toRgbString()),h=l("gridwidth"),p=l("griddash");if(r("showgrid",o.showGrid||!!f||!!h||!!p)||(delete e.gridcolor,delete e.gridwidth,delete e.griddash),o.hasMinor){var d=l("minor.gridcolor",n(e.gridcolor,o.bgColor,67).toRgbString()),v=l("minor.gridwidth",e.gridwidth||1),g=l("minor.griddash",e.griddash||"solid");r("minor.showgrid",!!d||!!v||!!g)||(delete e.minor.gridcolor,delete e.minor.gridwidth,delete e.minor.griddash)}if(!o.noZeroLine){var y=l("zerolinecolor",s),m=l("zerolinewidth");r("zeroline",o.showGrid||!!y||!!m)||(delete e.zerolinecolor,delete e.zerolinewidth)}}},52830:function(t,e,r){"use strict";var n=r(92770),i=r(71828);t.exports=function(t,e,r,a){var o,s,l,u,c,f,h=a.counterAxes||[],p=a.overlayableAxes||[],d=a.letter,v=a.grid,g=a.overlayingDomain;v&&(s=v._domains[d][v._axisMap[e._id]],o=v._anchors[e._id],s&&(l=v[d+"side"].split(" ")[0],u=v.domain[d]["right"===l||"top"===l?1:0])),s=s||[0,1],o=o||(n(t.position)?"free":h[0]||"free"),l=l||("x"===d?"bottom":"left"),u=u||0,c=0,f=!1;var y=i.coerce(t,e,{anchor:{valType:"enumerated",values:["free"].concat(h),dflt:o}},"anchor"),m=i.coerce(t,e,{side:{valType:"enumerated",values:"x"===d?["bottom","top"]:["left","right"],dflt:l}},"side");"free"===y&&("y"===d&&(r("autoshift")&&(u="left"===m?g[0]:g[1],f=!e.automargin||e.automargin,c="left"===m?-3:3),r("shift",c)),r("position",u)),r("automargin",f);var x=!1;if(p.length&&(x=i.coerce(t,e,{overlaying:{valType:"enumerated",values:[!1].concat(p),dflt:!1}},"overlaying")),!x){var b=r("domain",s);b[0]>b[1]-1/4096&&(e.domain=s),i.noneOrAll(t.domain,e.domain,s),"sync"===e.tickmode&&(e.tickmode="auto")}return r("layer"),e}},89426:function(t,e,r){"use strict";var n=r(59652);t.exports=function(t,e,r,i,a){a||(a={});var o=a.tickSuffixDflt,s=n(t);r("tickprefix")&&r("showtickprefix",s),r("ticksuffix",o)&&r("showticksuffix",s)}},23608:function(t,e,r){"use strict";var n=r(23074);t.exports=function(t,e,r,i){var a=e._template||{},o=e.type||a.type||"-";r("minallowed"),r("maxallowed");var s,l=r("range");l||i.noInsiderange||"log"===o||(!(s=r("insiderange"))||null!==s[0]&&null!==s[1]||(e.insiderange=!1,s=void 0),s&&(l=r("range",s)));var u,c=e.getAutorangeDflt(l,i),f=r("autorange",c);!l||(null!==l[0]||null!==l[1])&&(null!==l[0]&&null!==l[1]||"reversed"!==f&&!0!==f)&&(null===l[0]||"min"!==f&&"max reversed"!==f)&&(null===l[1]||"max"!==f&&"min reversed"!==f)||(l=void 0,delete e.range,e.autorange=!0,u=!0),u||(f=r("autorange",c=e.getAutorangeDflt(l,i))),f&&(n(r,f,l),"linear"!==o&&"-"!==o||r("rangemode")),e.cleanRange()}},42449:function(t,e,r){"use strict";var n=r(18783).FROM_BL;t.exports=function(t,e,r){void 0===r&&(r=n[t.constraintoward||"center"]);var i=[t.r2l(t.range[0]),t.r2l(t.range[1])],a=i[0]+(i[1]-i[0])*r;t.range=t._input.range=[t.l2r(a+(i[0]-a)*e),t.l2r(a+(i[1]-a)*e)],t.setScale()}},21994:function(t,e,r){"use strict";var n=r(39898),i=r(84096).g0,a=r(71828),o=a.numberFormat,s=r(92770),l=a.cleanNumber,u=a.ms2DateTime,c=a.dateTime2ms,f=a.ensureNumber,h=a.isArrayOrTypedArray,p=r(50606),d=p.FP_SAFE,v=p.BADNUM,g=p.LOG_CLIP,y=p.ONEWEEK,m=p.ONEDAY,x=p.ONEHOUR,b=p.ONEMIN,_=p.ONESEC,w=r(41675),T=r(85555),k=T.HOUR_PATTERN,A=T.WEEKDAY_PATTERN;function M(t){return Math.pow(10,t)}function S(t){return null!=t}t.exports=function(t,e){e=e||{};var r=t._id||"x",p=r.charAt(0);function E(e,r){if(e>0)return Math.log(e)/Math.LN10;if(e<=0&&r&&t.range&&2===t.range.length){var n=t.range[0],i=t.range[1];return.5*(n+i-2*g*Math.abs(n-i))}return v}function L(e,r,n,i){if((i||{}).msUTC&&s(e))return+e;var o=c(e,n||t.calendar);if(o===v){if(!s(e))return v;e=+e;var l=Math.floor(10*a.mod(e+.05,1)),u=Math.round(e-l/10);o=c(new Date(u))+l/10}return o}function C(e,r,n){return u(e,r,n||t.calendar)}function P(e){return t._categories[Math.round(e)]}function O(e){if(S(e)){if(void 0===t._categoriesMap&&(t._categoriesMap={}),void 0!==t._categoriesMap[e])return t._categoriesMap[e];t._categories.push("number"==typeof e?String(e):e);var r=t._categories.length-1;return t._categoriesMap[e]=r,r}return v}function I(e){if(t._categoriesMap)return t._categoriesMap[e]}function D(t){var e=I(t);return void 0!==e?e:s(t)?+t:void 0}function z(t){return s(t)?+t:I(t)}function R(t,e,r){return n.round(r+e*t,2)}function F(t,e,r){return(t-r)/e}var B=function(e){return s(e)?R(e,t._m,t._b):v},N=function(e){return F(e,t._m,t._b)};if(t.rangebreaks){var j="y"===p;B=function(e){if(!s(e))return v;var r=t._rangebreaks.length;if(!r)return R(e,t._m,t._b);var n=j;t.range[0]>t.range[1]&&(n=!n);for(var i=n?-1:1,a=i*e,o=0,l=0;l<r;l++){var u=i*t._rangebreaks[l].min,c=i*t._rangebreaks[l].max;if(a<u)break;if(!(a>c)){o=a<(u+c)/2?l:l+1;break}o=l+1}var f=t._B[o]||0;return isFinite(f)?R(e,t._m2,f):0},N=function(e){var r=t._rangebreaks.length;if(!r)return F(e,t._m,t._b);for(var n=0,i=0;i<r&&!(e<t._rangebreaks[i].pmin);i++)e>t._rangebreaks[i].pmax&&(n=i+1);return F(e,t._m2,t._B[n])}}t.c2l="log"===t.type?E:f,t.l2c="log"===t.type?M:f,t.l2p=B,t.p2l=N,t.c2p="log"===t.type?function(t,e){return B(E(t,e))}:B,t.p2c="log"===t.type?function(t){return M(N(t))}:N,-1!==["linear","-"].indexOf(t.type)?(t.d2r=t.r2d=t.d2c=t.r2c=t.d2l=t.r2l=l,t.c2d=t.c2r=t.l2d=t.l2r=f,t.d2p=t.r2p=function(e){return t.l2p(l(e))},t.p2d=t.p2r=N,t.cleanPos=f):"log"===t.type?(t.d2r=t.d2l=function(t,e){return E(l(t),e)},t.r2d=t.r2c=function(t){return M(l(t))},t.d2c=t.r2l=l,t.c2d=t.l2r=f,t.c2r=E,t.l2d=M,t.d2p=function(e,r){return t.l2p(t.d2r(e,r))},t.p2d=function(t){return M(N(t))},t.r2p=function(e){return t.l2p(l(e))},t.p2r=N,t.cleanPos=f):"date"===t.type?(t.d2r=t.r2d=a.identity,t.d2c=t.r2c=t.d2l=t.r2l=L,t.c2d=t.c2r=t.l2d=t.l2r=C,t.d2p=t.r2p=function(e,r,n){return t.l2p(L(e,0,n))},t.p2d=t.p2r=function(t,e,r){return C(N(t),e,r)},t.cleanPos=function(e){return a.cleanDate(e,v,t.calendar)}):"category"===t.type?(t.d2c=t.d2l=O,t.r2d=t.c2d=t.l2d=P,t.d2r=t.d2l_noadd=D,t.r2c=function(e){var r=z(e);return void 0!==r?r:t.fraction2r(.5)},t.l2r=t.c2r=f,t.r2l=z,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return P(N(t))},t.r2p=t.d2p,t.p2r=N,t.cleanPos=function(t){return"string"==typeof t&&""!==t?t:f(t)}):"multicategory"===t.type&&(t.r2d=t.c2d=t.l2d=P,t.d2r=t.d2l_noadd=D,t.r2c=function(e){var r=D(e);return void 0!==r?r:t.fraction2r(.5)},t.r2c_just_indices=I,t.l2r=t.c2r=f,t.r2l=D,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return P(N(t))},t.r2p=t.d2p,t.p2r=N,t.cleanPos=function(t){return Array.isArray(t)||"string"==typeof t&&""!==t?t:f(t)},t.setupMultiCategory=function(n){var i,o,s=t._traceIndices,l=t._matchGroup;if(l&&0===t._categories.length)for(var u in l)if(u!==r){var c=e[w.id2name(u)];s=s.concat(c._traceIndices)}var f=[[0,{}],[0,{}]],d=[];for(i=0;i<s.length;i++){var v=n[s[i]];if(p in v){var g=v[p],y=v._length||a.minRowLength(g);if(h(g[0])&&h(g[1]))for(o=0;o<y;o++){var m=g[0][o],x=g[1][o];S(m)&&S(x)&&(d.push([m,x]),m in f[0][1]||(f[0][1][m]=f[0][0]++),x in f[1][1]||(f[1][1][x]=f[1][0]++))}}}for(d.sort((function(t,e){var r=f[0][1],n=r[t[0]]-r[e[0]];if(n)return n;var i=f[1][1];return i[t[1]]-i[e[1]]})),i=0;i<d.length;i++)O(d[i])}),t.fraction2r=function(e){var r=t.r2l(t.range[0]),n=t.r2l(t.range[1]);return t.l2r(r+e*(n-r))},t.r2fraction=function(e){var r=t.r2l(t.range[0]),n=t.r2l(t.range[1]);return(t.r2l(e)-r)/(n-r)},t.limitRange=function(e){var r=t.minallowed,n=t.maxallowed;if(void 0!==r||void 0!==n){e||(e="range");var i=a.nestedProperty(t,e).get(),o=a.simpleMap(i,t.r2l),s=o[1]<o[0];s&&o.reverse();var l=a.simpleMap([r,n],t.r2l);void 0!==r&&o[0]<l[0]&&(i[s?1:0]=r),void 0!==n&&o[1]>l[1]&&(i[s?0:1]=n)}},t.cleanRange=function(e,r){t._cleanRange(e,r),t.limitRange(e)},t._cleanRange=function(e,r){r||(r={}),e||(e="range");var n,i,o=a.nestedProperty(t,e).get();if(i=(i="date"===t.type?a.dfltRange(t.calendar):"y"===p?T.DFLTRANGEY:"realaxis"===t._name?[0,1]:r.dfltRange||T.DFLTRANGEX).slice(),"tozero"!==t.rangemode&&"nonnegative"!==t.rangemode||(i[0]=0),o&&2===o.length){var l=null===o[0],u=null===o[1];for("date"!==t.type||t.autorange||(o[0]=a.cleanDate(o[0],v,t.calendar),o[1]=a.cleanDate(o[1],v,t.calendar)),n=0;n<2;n++)if("date"===t.type){if(!a.isDateTime(o[n],t.calendar)){t[e]=i;break}if(t.r2l(o[0])===t.r2l(o[1])){var c=a.constrain(t.r2l(o[0]),a.MIN_MS+1e3,a.MAX_MS-1e3);o[0]=t.l2r(c-1e3),o[1]=t.l2r(c+1e3);break}}else{if(!s(o[n])){if(l||u||!s(o[1-n])){t[e]=i;break}o[n]=o[1-n]*(n?10:.1)}if(o[n]<-d?o[n]=-d:o[n]>d&&(o[n]=d),o[0]===o[1]){var f=Math.max(1,Math.abs(1e-6*o[0]));o[0]-=f,o[1]+=f}}}else a.nestedProperty(t,e).set(i)},t.setScale=function(r){var n=e._size;if(t.overlaying){var i=w.getFromId({_fullLayout:e},t.overlaying);t.domain=i.domain}var a=r&&t._r?"_r":"range",o=t.calendar;t.cleanRange(a);var s,l,u=t.r2l(t[a][0],o),c=t.r2l(t[a][1],o),f="y"===p;if(f?(t._offset=n.t+(1-t.domain[1])*n.h,t._length=n.h*(t.domain[1]-t.domain[0]),t._m=t._length/(u-c),t._b=-t._m*c):(t._offset=n.l+t.domain[0]*n.w,t._length=n.w*(t.domain[1]-t.domain[0]),t._m=t._length/(c-u),t._b=-t._m*u),t._rangebreaks=[],t._lBreaks=0,t._m2=0,t._B=[],t.rangebreaks&&(t._rangebreaks=t.locateBreaks(Math.min(u,c),Math.max(u,c)),t._rangebreaks.length)){for(s=0;s<t._rangebreaks.length;s++)l=t._rangebreaks[s],t._lBreaks+=Math.abs(l.max-l.min);var h=f;u>c&&(h=!h),h&&t._rangebreaks.reverse();var d=h?-1:1;for(t._m2=d*t._length/(Math.abs(c-u)-t._lBreaks),t._B.push(-t._m2*(f?c:u)),s=0;s<t._rangebreaks.length;s++)l=t._rangebreaks[s],t._B.push(t._B[t._B.length-1]-d*t._m2*(l.max-l.min));for(s=0;s<t._rangebreaks.length;s++)(l=t._rangebreaks[s]).pmin=B(l.min),l.pmax=B(l.max)}if(!isFinite(t._m)||!isFinite(t._b)||t._length<0)throw e._replotting=!1,new Error("Something went wrong with axis scaling")},t.maskBreaks=function(e){var r,n,i,o,s,u=t.rangebreaks||[];u._cachedPatterns||(u._cachedPatterns=u.map((function(e){return e.enabled&&e.bounds?a.simpleMap(e.bounds,e.pattern?l:t.d2c):null}))),u._cachedValues||(u._cachedValues=u.map((function(e){return e.enabled&&e.values?a.simpleMap(e.values,t.d2c).sort(a.sorterAsc):null})));for(var c=0;c<u.length;c++){var f=u[c];if(f.enabled)if(f.bounds){var h=f.pattern;switch(n=(r=u._cachedPatterns[c])[0],i=r[1],h){case A:o=(s=new Date(e)).getUTCDay(),n>i&&(i+=7,o<n&&(o+=7));break;case k:o=(s=new Date(e)).getUTCHours()+(s.getUTCMinutes()/60+s.getUTCSeconds()/3600+s.getUTCMilliseconds()/36e5),n>i&&(i+=24,o<n&&(o+=24));break;case"":o=e}if(o>=n&&o<i)return v}else for(var p=u._cachedValues[c],d=0;d<p.length;d++)if(i=(n=p[d])+f.dvalue,e>=n&&e<i)return v}return e},t.locateBreaks=function(e,r){var n,i,o,s,u=[];if(!t.rangebreaks)return u;var c=t.rangebreaks.slice().sort((function(t,e){return t.pattern===A&&e.pattern===k?-1:e.pattern===A&&t.pattern===k?1:0})),f=function(t,n){if((t=a.constrain(t,e,r))!==(n=a.constrain(n,e,r))){for(var i=!0,o=0;o<u.length;o++){var s=u[o];t<s.max&&n>=s.min&&(t<s.min&&(s.min=t),n>s.max&&(s.max=n),i=!1)}i&&u.push({min:t,max:n})}};for(n=0;n<c.length;n++){var h=c[n];if(h.enabled)if(h.bounds){var p=e,d=r;h.pattern&&(p=Math.floor(p)),o=(i=a.simpleMap(h.bounds,h.pattern?l:t.r2l))[0],s=i[1];var v,g,w=new Date(p);switch(h.pattern){case A:g=y,v=(s-o+(s<o?7:0))*m,p+=o*m-(w.getUTCDay()*m+w.getUTCHours()*x+w.getUTCMinutes()*b+w.getUTCSeconds()*_+w.getUTCMilliseconds());break;case k:g=m,v=(s-o+(s<o?24:0))*x,p+=o*x-(w.getUTCHours()*x+w.getUTCMinutes()*b+w.getUTCSeconds()*_+w.getUTCMilliseconds());break;default:p=Math.min(i[0],i[1]),v=g=(d=Math.max(i[0],i[1]))-p}for(var T=p;T<d;T+=g)f(T,T+v)}else for(var M=a.simpleMap(h.values,t.d2c),S=0;S<M.length;S++)f(o=M[S],s=o+h.dvalue)}return u.sort((function(t,e){return t.min-e.min})),u},t.makeCalcdata=function(e,r,n){var i,o,s,l,u=t.type,c="date"===u&&e[r+"calendar"];if(r in e){if(i=e[r],l=e._length||a.minRowLength(i),a.isTypedArray(i)&&("linear"===u||"log"===u)){if(l===i.length)return i;if(i.subarray)return i.subarray(0,l)}if("multicategory"===u)return function(t,e){for(var r=new Array(e),n=0;n<e;n++){var i=(t[0]||[])[n],a=(t[1]||[])[n];r[n]=I([i,a])}return r}(i,l);for(o=new Array(l),s=0;s<l;s++)o[s]=t.d2c(i[s],0,c,n)}else{var f=r+"0"in e?t.d2c(e[r+"0"],0,c):0,h=e["d"+r]?Number(e["d"+r]):1;for(i=e[{x:"y",y:"x"}[r]],l=e._length||i.length,o=new Array(l),s=0;s<l;s++)o[s]=f+s*h}if(t.rangebreaks)for(s=0;s<l;s++)o[s]=t.maskBreaks(o[s]);return o},t.isValidRange=function(e,r){return Array.isArray(e)&&2===e.length&&(r&&null===e[0]||s(t.r2l(e[0])))&&(r&&null===e[1]||s(t.r2l(e[1])))},t.getAutorangeDflt=function(e,r){var n=!t.isValidRange(e,"nullOk");return n&&r&&r.reverseDflt?n="reversed":e&&(null===e[0]&&null===e[1]?n=!0:null===e[0]&&null!==e[1]?n="min":null!==e[0]&&null===e[1]&&(n="max")),n},t.isReversed=function(){var e=t.autorange;return"reversed"===e||"min reversed"===e||"max reversed"===e},t.isPtWithinRange=function(e,r){var n=t.c2l(e[p],null,r),i=t.r2l(t.range[0]),a=t.r2l(t.range[1]);return i<a?i<=n&&n<=a:a<=n&&n<=i},t._emptyCategories=function(){t._categories=[],t._categoriesMap={}},t.clearCalc=function(){var r=t._matchGroup;if(r){var n=null,i=null;for(var a in r){var o=e[w.id2name(a)];if(o._categories){n=o._categories,i=o._categoriesMap;break}}n&&i?(t._categories=n,t._categoriesMap=i):t._emptyCategories()}else t._emptyCategories();if(t._initialCategories)for(var s=0;s<t._initialCategories.length;s++)O(t._initialCategories[s])},t.sortByInitialCategories=function(){var n=[];if(t._emptyCategories(),t._initialCategories)for(var i=0;i<t._initialCategories.length;i++)O(t._initialCategories[i]);n=n.concat(t._traceIndices);var a=t._matchGroup;for(var o in a)if(r!==o){var s=e[w.id2name(o)];s._categories=t._categories,s._categoriesMap=t._categoriesMap,n=n.concat(s._traceIndices)}return n};var U=e._d3locale;"date"===t.type&&(t._dateFormat=U?U.timeFormat:i,t._extraFormat=e._extraFormat),t._separators=e.separators,t._numFormat=U?U.numberFormat:o,delete t._minDtick,delete t._forceTick0}},59652:function(t){"use strict";t.exports=function(t){var e=["showexponent","showtickprefix","showticksuffix"].filter((function(e){return void 0!==t[e]}));if(e.every((function(r){return t[r]===t[e[0]]}))||1===e.length)return t[e[0]]}},96115:function(t,e,r){"use strict";var n=r(71828),i=r(7901).contrast,a=r(13838),o=r(59652),s=r(85501);function l(t,e){function r(r,i){return n.coerce(t,e,a.tickformatstops,r,i)}r("enabled")&&(r("dtickrange"),r("value"))}t.exports=function(t,e,r,u,c){c||(c={});var f=r("labelalias");n.isPlainObject(f)||delete e.labelalias;var h=o(t);if(r("showticklabels")){var p=c.font||{},d=e.color,v=-1!==(e.ticklabelposition||"").indexOf("inside")?i(c.bgColor):d&&d!==a.color.dflt?d:p.color;if(n.coerceFont(r,"tickfont",{family:p.family,size:p.size,color:v}),c.noTicklabelstep||"multicategory"===u||"log"===u||r("ticklabelstep"),c.noAng||r("tickangle"),"category"!==u){var g=r("tickformat");s(t,e,{name:"tickformatstops",inclusionAttr:"enabled",handleItemDefaults:l}),e.tickformatstops.length||delete e.tickformatstops,c.noExp||g||"date"===u||(r("showexponent",h),r("exponentformat"),r("minexponent"),r("separatethousands"))}}}},38701:function(t,e,r){"use strict";var n=r(71828),i=r(13838);t.exports=function(t,e,r,a){var o=a.isMinor,s=o?t.minor||{}:t,l=o?e.minor:e,u=o?i.minor:i,c=o?"minor.":"",f=n.coerce2(s,l,u,"ticklen",o?.6*(e.ticklen||5):void 0),h=n.coerce2(s,l,u,"tickwidth",o?e.tickwidth||1:void 0),p=n.coerce2(s,l,u,"tickcolor",(o?e.tickcolor:void 0)||l.color);r(c+"ticks",!o&&a.outerTicks||f||h||p?"outside":"")||(delete l.ticklen,delete l.tickwidth,delete l.tickcolor)}},26218:function(t,e,r){"use strict";var n=r(66287),i=r(71828).isArrayOrTypedArray;t.exports=function(t,e,r,a,o){o||(o={});var s=o.isMinor,l=s?t.minor||{}:t,u=s?e.minor:e,c=s?"minor.":"";function f(t){var e=l[t];return void 0!==e?e:(u._template||{})[t]}var h=f("tick0"),p=f("dtick"),d=f("tickvals"),v=r(c+"tickmode",i(d)?"array":p?"linear":"auto");if("auto"===v||"sync"===v)r(c+"nticks");else if("linear"===v){var g=u.dtick=n.dtick(p,a);u.tick0=n.tick0(h,a,e.calendar,g)}else"multicategory"!==a&&(void 0===r(c+"tickvals")?u.tickmode="auto":s||r("ticktext"))}},66847:function(t,e,r){"use strict";var n=r(39898),i=r(73972),a=r(71828),o=r(91424),s=r(89298);t.exports=function(t,e,r,l){var u=t._fullLayout;if(0!==e.length){var c,f,h,p;l&&(c=l());var d=n.ease(r.easing);return t._transitionData._interruptCallbacks.push((function(){return window.cancelAnimationFrame(p),p=null,function(){for(var r={},n=0;n<e.length;n++){var a=e[n],o=a.plotinfo.xaxis,s=a.plotinfo.yaxis;a.xr0&&(r[o._name+".range"]=a.xr0.slice()),a.yr0&&(r[s._name+".range"]=a.yr0.slice())}return i.call("relayout",t,r).then((function(){for(var t=0;t<e.length;t++)v(e[t].plotinfo)}))}()})),f=Date.now(),p=window.requestAnimationFrame((function n(){h=Date.now();for(var a=Math.min(1,(h-f)/r.duration),o=d(a),s=0;s<e.length;s++)g(e[s],o);h-f>r.duration?(function(){for(var r={},n=0;n<e.length;n++){var a=e[n],o=a.plotinfo.xaxis,s=a.plotinfo.yaxis;a.xr1&&(r[o._name+".range"]=a.xr1.slice()),a.yr1&&(r[s._name+".range"]=a.yr1.slice())}c&&c(),i.call("relayout",t,r).then((function(){for(var t=0;t<e.length;t++)v(e[t].plotinfo)}))}(),p=window.cancelAnimationFrame(n)):p=window.requestAnimationFrame(n)})),Promise.resolve()}function v(t){var e=t.xaxis,r=t.yaxis;u._defs.select("#"+t.clipId+"> rect").call(o.setTranslate,0,0).call(o.setScale,1,1),t.plot.call(o.setTranslate,e._offset,r._offset).call(o.setScale,1,1);var n=t.plot.selectAll(".scatterlayer .trace");n.selectAll(".point").call(o.setPointGroupScale,1,1),n.selectAll(".textpoint").call(o.setTextPointsScale,1,1),n.call(o.hideOutsideRangePoints,t)}function g(e,r){var n=e.plotinfo,i=n.xaxis,l=n.yaxis,u=i._length,c=l._length,f=!!e.xr1,h=!!e.yr1,p=[];if(f){var d=a.simpleMap(e.xr0,i.r2l),v=a.simpleMap(e.xr1,i.r2l),g=d[1]-d[0],y=v[1]-v[0];p[0]=(d[0]*(1-r)+r*v[0]-d[0])/(d[1]-d[0])*u,p[2]=u*(1-r+r*y/g),i.range[0]=i.l2r(d[0]*(1-r)+r*v[0]),i.range[1]=i.l2r(d[1]*(1-r)+r*v[1])}else p[0]=0,p[2]=u;if(h){var m=a.simpleMap(e.yr0,l.r2l),x=a.simpleMap(e.yr1,l.r2l),b=m[1]-m[0],_=x[1]-x[0];p[1]=(m[1]*(1-r)+r*x[1]-m[1])/(m[0]-m[1])*c,p[3]=c*(1-r+r*_/b),l.range[0]=i.l2r(m[0]*(1-r)+r*x[0]),l.range[1]=l.l2r(m[1]*(1-r)+r*x[1])}else p[1]=0,p[3]=c;s.drawOne(t,i,{skipTitle:!0}),s.drawOne(t,l,{skipTitle:!0}),s.redrawComponents(t,[i._id,l._id]);var w=f?u/p[2]:1,T=h?c/p[3]:1,k=f?p[0]:0,A=h?p[1]:0,M=f?p[0]/p[2]*u:0,S=h?p[1]/p[3]*c:0,E=i._offset-M,L=l._offset-S;n.clipRect.call(o.setTranslate,k,A).call(o.setScale,1/w,1/T),n.plot.call(o.setTranslate,E,L).call(o.setScale,w,T),o.setPointGroupScale(n.zoomScalePts,1/w,1/T),o.setTextPointsScale(n.zoomScaleTxt,1/w,1/T)}s.redrawComponents(t)}},951:function(t,e,r){"use strict";var n=r(73972).traceIs,i=r(4322);function a(t){return{v:"x",h:"y"}[t.orientation||"v"]}function o(t,e){var r=a(t),i=n(t,"box-violin"),o=n(t._fullInput||{},"candlestick");return i&&!o&&e===r&&void 0===t[r]&&void 0===t[r+"0"]}t.exports=function(t,e,r,s){r("autotypenumbers",s.autotypenumbersDflt),"-"===r("type",(s.splomStash||{}).type)&&(function(t,e){if("-"===t.type){var r,s=t._id,l=s.charAt(0);-1!==s.indexOf("scene")&&(s=l);var u=function(t,e,r){for(var n=0;n<t.length;n++){var i=t[n];if("splom"===i.type&&i._length>0&&(i["_"+r+"axes"]||{})[e])return i;if((i[r+"axis"]||r)===e){if(o(i,r))return i;if((i[r]||[]).length||i[r+"0"])return i}}}(e,s,l);if(u)if("histogram"!==u.type||l!=={v:"y",h:"x"}[u.orientation||"v"]){var c=l+"calendar",f=u[c],h={noMultiCategory:!n(u,"cartesian")||n(u,"noMultiCategory")};if("box"===u.type&&u._hasPreCompStats&&l==={h:"x",v:"y"}[u.orientation||"v"]&&(h.noMultiCategory=!0),h.autotypenumbers=t.autotypenumbers,o(u,l)){var p=a(u),d=[];for(r=0;r<e.length;r++){var v=e[r];n(v,"box-violin")&&(v[l+"axis"]||l)===s&&(void 0!==v[p]?d.push(v[p][0]):void 0!==v.name?d.push(v.name):d.push("text"),v[c]!==f&&(f=void 0))}t.type=i(d,f,h)}else if("splom"===u.type){var g=u.dimensions[u._axesDim[s]];g.visible&&(t.type=i(g.values,f,h))}else t.type=i(u[l]||[u[l+"0"]],f,h)}else t.type="linear"}}(e,s.data),"-"===e.type?e.type="linear":t.type=e.type)}},31137:function(t,e,r){"use strict";var n=r(73972),i=r(71828);function a(t,e,r){var n,a,o,s=!1;if("data"===e.type)n=t._fullData[null!==e.traces?e.traces[0]:0];else{if("layout"!==e.type)return!1;n=t._fullLayout}return a=i.nestedProperty(n,e.prop).get(),(o=r[e.type]=r[e.type]||{}).hasOwnProperty(e.prop)&&o[e.prop]!==a&&(s=!0),o[e.prop]=a,{changed:s,value:a}}function o(t,e){var r=[],n=e[0],a={};if("string"==typeof n)a[n]=e[1];else{if(!i.isPlainObject(n))return r;a=n}return l(a,(function(t,e,n){r.push({type:"layout",prop:t,value:n})}),"",0),r}function s(t,e){var r,n,a,o,s=[];if(n=e[0],a=e[1],r=e[2],o={},"string"==typeof n)o[n]=a;else{if(!i.isPlainObject(n))return s;o=n,void 0===r&&(r=a)}return void 0===r&&(r=null),l(o,(function(e,n,i){var a,o;if(Array.isArray(i)){o=i.slice();var l=Math.min(o.length,t.data.length);r&&(l=Math.min(l,r.length)),a=[];for(var u=0;u<l;u++)a[u]=r?r[u]:u}else o=i,a=r?r.slice():null;if(null===a)Array.isArray(o)&&(o=o[0]);else if(Array.isArray(a)){if(!Array.isArray(o)){var c=o;o=[];for(var f=0;f<a.length;f++)o[f]=c}o.length=Math.min(a.length,o.length)}s.push({type:"data",prop:e,traces:a,value:o})}),"",0),s}function l(t,e,r,n){Object.keys(t).forEach((function(a){var o=t[a];if("_"!==a[0]){var s=r+(n>0?".":"")+a;i.isPlainObject(o)?l(o,e,s,n+1):e(s,a,o)}}))}e.manageCommandObserver=function(t,r,n,o){var s={},l=!0;r&&r._commandObserver&&(s=r._commandObserver),s.cache||(s.cache={}),s.lookupTable={};var u=e.hasSimpleAPICommandBindings(t,n,s.lookupTable);if(r&&r._commandObserver){if(u)return s;if(r._commandObserver.remove)return r._commandObserver.remove(),r._commandObserver=null,s}if(u){a(t,u,s.cache),s.check=function(){if(l){var e=a(t,u,s.cache);return e.changed&&o&&void 0!==s.lookupTable[e.value]&&(s.disable(),Promise.resolve(o({value:e.value,type:u.type,prop:u.prop,traces:u.traces,index:s.lookupTable[e.value]})).then(s.enable,s.enable)),e.changed}};for(var c=["plotly_relayout","plotly_redraw","plotly_restyle","plotly_update","plotly_animatingframe","plotly_afterplot"],f=0;f<c.length;f++)t._internalOn(c[f],s.check);s.remove=function(){for(var e=0;e<c.length;e++)t._removeInternalListener(c[e],s.check)}}else i.log("Unable to automatically bind plot updates to API command"),s.lookupTable={},s.remove=function(){};return s.disable=function(){l=!1},s.enable=function(){l=!0},r&&(r._commandObserver=s),s},e.hasSimpleAPICommandBindings=function(t,r,n){var i,a,o=r.length;for(i=0;i<o;i++){var s,l=r[i],u=l.method,c=l.args;if(Array.isArray(c)||(c=[]),!u)return!1;var f=e.computeAPICommandBindings(t,u,c);if(1!==f.length)return!1;if(a){if((s=f[0]).type!==a.type)return!1;if(s.prop!==a.prop)return!1;if(Array.isArray(a.traces)){if(!Array.isArray(s.traces))return!1;s.traces.sort();for(var h=0;h<a.traces.length;h++)if(a.traces[h]!==s.traces[h])return!1}else if(s.prop!==a.prop)return!1}else a=f[0],Array.isArray(a.traces)&&a.traces.sort();var p=(s=f[0]).value;if(Array.isArray(p)){if(1!==p.length)return!1;p=p[0]}n&&(n[p]=i)}return a},e.executeAPICommand=function(t,e,r){if("skip"===e)return Promise.resolve();var a=n.apiMethodRegistry[e],o=[t];Array.isArray(r)||(r=[]);for(var s=0;s<r.length;s++)o.push(r[s]);return a.apply(null,o).catch((function(t){return i.warn("API call to Plotly."+e+" rejected.",t),Promise.reject(t)}))},e.computeAPICommandBindings=function(t,e,r){var n;switch(Array.isArray(r)||(r=[]),e){case"restyle":n=s(t,r);break;case"relayout":n=o(0,r);break;case"update":n=s(t,[r[0],r[2]]).concat(o(0,[r[1]]));break;case"animate":n=function(t,e){return Array.isArray(e[0])&&1===e[0].length&&-1!==["string","number"].indexOf(typeof e[0][0])?[{type:"layout",prop:"_currentFrame",value:e[0][0].toString()}]:[]}(0,r);break;default:n=[]}return n}},27670:function(t,e,r){"use strict";var n=r(1426).extendFlat;e.Y=function(t,e){e=e||{};var r={valType:"info_array",editType:(t=t||{}).editType,items:[{valType:"number",min:0,max:1,editType:t.editType},{valType:"number",min:0,max:1,editType:t.editType}],dflt:[0,1]},i=(t.name&&t.name,t.trace,e.description&&e.description,{x:n({},r,{}),y:n({},r,{}),editType:t.editType});return t.noGridCell||(i.row={valType:"integer",min:0,dflt:0,editType:t.editType},i.column={valType:"integer",min:0,dflt:0,editType:t.editType}),i},e.c=function(t,e,r,n){var i=n&&n.x||[0,1],a=n&&n.y||[0,1],o=e.grid;if(o){var s=r("domain.column");void 0!==s&&(s<o.columns?i=o._domains.x[s]:delete t.domain.column);var l=r("domain.row");void 0!==l&&(l<o.rows?a=o._domains.y[l]:delete t.domain.row)}var u=r("domain.x",i),c=r("domain.y",a);u[0]<u[1]||(t.domain.x=i.slice()),c[0]<c[1]||(t.domain.y=a.slice())}},41940:function(t){"use strict";t.exports=function(t){var e=t.editType,r=t.colorEditType;void 0===r&&(r=e);var n={family:{valType:"string",noBlank:!0,strict:!0,editType:e},size:{valType:"number",min:1,editType:e},color:{valType:"color",editType:r},editType:e};return t.autoSize&&(n.size.dflt="auto"),t.autoColor&&(n.color.dflt="auto"),t.arrayOk&&(n.family.arrayOk=!0,n.size.arrayOk=!0,n.color.arrayOk=!0),n}},31391:function(t){"use strict";t.exports={_isLinkedToArray:"frames_entry",group:{valType:"string"},name:{valType:"string"},traces:{valType:"any"},baseframe:{valType:"string"},data:{valType:"any"},layout:{valType:"any"}}},78776:function(t,e){"use strict";e.projNames={airy:"airy",aitoff:"aitoff","albers usa":"albersUsa",albers:"albers",august:"august","azimuthal equal area":"azimuthalEqualArea","azimuthal equidistant":"azimuthalEquidistant",baker:"baker",bertin1953:"bertin1953",boggs:"boggs",bonne:"bonne",bottomley:"bottomley",bromley:"bromley",collignon:"collignon","conic conformal":"conicConformal","conic equal area":"conicEqualArea","conic equidistant":"conicEquidistant",craig:"craig",craster:"craster","cylindrical equal area":"cylindricalEqualArea","cylindrical stereographic":"cylindricalStereographic",eckert1:"eckert1",eckert2:"eckert2",eckert3:"eckert3",eckert4:"eckert4",eckert5:"eckert5",eckert6:"eckert6",eisenlohr:"eisenlohr","equal earth":"equalEarth",equirectangular:"equirectangular",fahey:"fahey","foucaut sinusoidal":"foucautSinusoidal",foucaut:"foucaut",ginzburg4:"ginzburg4",ginzburg5:"ginzburg5",ginzburg6:"ginzburg6",ginzburg8:"ginzburg8",ginzburg9:"ginzburg9",gnomonic:"gnomonic","gringorten quincuncial":"gringortenQuincuncial",gringorten:"gringorten",guyou:"guyou",hammer:"hammer",hill:"hill",homolosine:"homolosine",hufnagel:"hufnagel",hyperelliptical:"hyperelliptical",kavrayskiy7:"kavrayskiy7",lagrange:"lagrange",larrivee:"larrivee",laskowski:"laskowski",loximuthal:"loximuthal",mercator:"mercator",miller:"miller",mollweide:"mollweide","mt flat polar parabolic":"mtFlatPolarParabolic","mt flat polar quartic":"mtFlatPolarQuartic","mt flat polar sinusoidal":"mtFlatPolarSinusoidal","natural earth":"naturalEarth","natural earth1":"naturalEarth1","natural earth2":"naturalEarth2","nell hammer":"nellHammer",nicolosi:"nicolosi",orthographic:"orthographic",patterson:"patterson","peirce quincuncial":"peirceQuincuncial",polyconic:"polyconic","rectangular polyconic":"rectangularPolyconic",robinson:"robinson",satellite:"satellite","sinu mollweide":"sinuMollweide",sinusoidal:"sinusoidal",stereographic:"stereographic",times:"times","transverse mercator":"transverseMercator","van der grinten":"vanDerGrinten","van der grinten2":"vanDerGrinten2","van der grinten3":"vanDerGrinten3","van der grinten4":"vanDerGrinten4",wagner4:"wagner4",wagner6:"wagner6",wiechel:"wiechel","winkel tripel":"winkel3",winkel3:"winkel3"},e.axesNames=["lonaxis","lataxis"],e.lonaxisSpan={orthographic:180,"azimuthal equal area":360,"azimuthal equidistant":360,"conic conformal":180,gnomonic:160,stereographic:180,"transverse mercator":180,"*":360},e.lataxisSpan={"conic conformal":150,stereographic:179.5,"*":180},e.scopeDefaults={world:{lonaxisRange:[-180,180],lataxisRange:[-90,90],projType:"equirectangular",projRotate:[0,0,0]},usa:{lonaxisRange:[-180,-50],lataxisRange:[15,80],projType:"albers usa"},europe:{lonaxisRange:[-30,60],lataxisRange:[30,85],projType:"conic conformal",projRotate:[15,0,0],projParallels:[0,60]},asia:{lonaxisRange:[22,160],lataxisRange:[-15,55],projType:"mercator",projRotate:[0,0,0]},africa:{lonaxisRange:[-30,60],lataxisRange:[-40,40],projType:"mercator",projRotate:[0,0,0]},"north america":{lonaxisRange:[-180,-45],lataxisRange:[5,85],projType:"conic conformal",projRotate:[-100,0,0],projParallels:[29.5,45.5]},"south america":{lonaxisRange:[-100,-30],lataxisRange:[-60,15],projType:"mercator",projRotate:[0,0,0]}},e.clipPad=.001,e.precision=.1,e.landColor="#F0DC82",e.waterColor="#3399FF",e.locationmodeToLayer={"ISO-3":"countries","USA-states":"subunits","country names":"countries"},e.sphereSVG={type:"Sphere"},e.fillLayers={ocean:1,land:1,lakes:1},e.lineLayers={subunits:1,countries:1,coastlines:1,rivers:1,frame:1},e.layers=["bg","ocean","land","lakes","subunits","countries","coastlines","rivers","lataxis","lonaxis","frame","backplot","frontplot"],e.layersForChoropleth=["bg","ocean","land","subunits","countries","coastlines","lataxis","lonaxis","frame","backplot","rivers","lakes","frontplot"],e.layerNameToAdjective={ocean:"ocean",land:"land",lakes:"lake",subunits:"subunit",countries:"country",coastlines:"coastline",rivers:"river",frame:"frame"}},69082:function(t,e,r){"use strict";var n=r(39898),i=r(27362),a=i.geoPath,o=i.geoDistance,s=r(65704),l=r(73972),u=r(71828),c=u.strTranslate,f=r(7901),h=r(91424),p=r(30211),d=r(74875),v=r(89298),g=r(71739).getAutoRange,y=r(28569),m=r(47322).prepSelect,x=r(47322).clearOutline,b=r(47322).selectOnClick,_=r(74455),w=r(78776),T=r(41327),k=r(90973),A=r(96892).zL;function M(t){this.id=t.id,this.graphDiv=t.graphDiv,this.container=t.container,this.topojsonURL=t.topojsonURL,this.isStatic=t.staticPlot,this.topojsonName=null,this.topojson=null,this.projection=null,this.scope=null,this.viewInitial=null,this.fitScale=null,this.bounds=null,this.midPt=null,this.hasChoropleth=!1,this.traceHash={},this.layers={},this.basePaths={},this.dataPaths={},this.dataPoints={},this.clipDef=null,this.clipRect=null,this.bgRect=null,this.makeFramework()}var S=M.prototype;function E(t,e){var r=w.clipPad,n=t[0]+r,i=t[1]-r,a=e[0]+r,o=e[1]-r;n>0&&i<0&&(i+=360);var s=(i-n)/4;return{type:"Polygon",coordinates:[[[n,a],[n,o],[n+s,o],[n+2*s,o],[n+3*s,o],[i,o],[i,a],[i-s,a],[i-2*s,a],[i-3*s,a],[n,a]]]}}t.exports=function(t){return new M(t)},S.plot=function(t,e,r,n){var i=this;if(n)return i.update(t,e,!0);i._geoCalcData=t,i._fullLayout=e;var a=e[this.id],o=[],s=!1;for(var l in w.layerNameToAdjective)if("frame"!==l&&a["show"+l]){s=!0;break}for(var u=!1,c=0;c<t.length;c++){var f=t[0][0].trace;f._geo=i,f.locationmode&&(s=!0);var h=f.marker;if(h){var p=h.angle,d=h.angleref;(p||"north"===d||"previous"===d)&&(u=!0)}}if(this._hasMarkerAngles=u,s){var v=k.getTopojsonName(a);null!==i.topojson&&v===i.topojsonName||(i.topojsonName=v,void 0===PlotlyGeoAssets.topojson[i.topojsonName]&&o.push(i.fetchTopojson()))}o=o.concat(T.fetchTraceGeoData(t)),r.push(new Promise((function(r,n){Promise.all(o).then((function(){i.topojson=PlotlyGeoAssets.topojson[i.topojsonName],i.update(t,e),r()})).catch(n)})))},S.fetchTopojson=function(){var t=this,e=k.getTopojsonPath(t.topojsonURL,t.topojsonName);return new Promise((function(r,i){n.json(e,(function(n,a){if(n)return 404===n.status?i(new Error(["plotly.js could not find topojson file at",e+".","Make sure the *topojsonURL* plot config option","is set properly."].join(" "))):i(new Error(["unexpected error while fetching topojson file at",e].join(" ")));PlotlyGeoAssets.topojson[t.topojsonName]=a,r()}))}))},S.update=function(t,e,r){var n=e[this.id];this.hasChoropleth=!1;for(var i=0;i<t.length;i++){var a=t[i],o=a[0].trace;"choropleth"===o.type&&(this.hasChoropleth=!0),!0===o.visible&&o._length>0&&o._module.calcGeoJSON(a,e)}if(!r){if(this.updateProjection(t,e))return;this.viewInitial&&this.scope===n.scope||this.saveViewInitial(n)}this.scope=n.scope,this.updateBaseLayers(e,n),this.updateDims(e,n),this.updateFx(e,n),d.generalUpdatePerTraceModule(this.graphDiv,this,t,n);var s=this.layers.frontplot.select(".scatterlayer");this.dataPoints.point=s.selectAll(".point"),this.dataPoints.text=s.selectAll("text"),this.dataPaths.line=s.selectAll(".js-line");var l=this.layers.backplot.select(".choroplethlayer");this.dataPaths.choropleth=l.selectAll("path"),this._render()},S.updateProjection=function(t,e){var r=this.graphDiv,n=e[this.id],l=e._size,c=n.domain,f=n.projection,h=n.lonaxis,p=n.lataxis,d=h._ax,v=p._ax,y=this.projection=function(t){var e=t.projection,r=e.type,n=w.projNames[r];n="geo"+u.titleCase(n);for(var l=(i[n]||s[n])(),c=t._isSatellite?180*Math.acos(1/e.distance)/Math.PI:t._isClipped?w.lonaxisSpan[r]/2:null,f=["center","rotate","parallels","clipExtent"],h=function(t){return t?l:[]},p=0;p<f.length;p++){var d=f[p];"function"!=typeof l[d]&&(l[d]=h)}return l.isLonLatOverEdges=function(t){if(null===l(t))return!0;if(c){var e=l.rotate();return o(t,[-e[0],-e[1]])>c*Math.PI/180}return!1},l.getPath=function(){return a().projection(l)},l.getBounds=function(t){return l.getPath().bounds(t)},l.precision(w.precision),t._isSatellite&&l.tilt(e.tilt).distance(e.distance),c&&l.clipAngle(c-w.clipPad),l}(n),m=[[l.l+l.w*c.x[0],l.t+l.h*(1-c.y[1])],[l.l+l.w*c.x[1],l.t+l.h*(1-c.y[0])]],x=n.center||{},b=f.rotation||{},_=h.range||[],T=p.range||[];if(n.fitbounds){d._length=m[1][0]-m[0][0],v._length=m[1][1]-m[0][1],d.range=g(r,d),v.range=g(r,v);var k=(d.range[0]+d.range[1])/2,A=(v.range[0]+v.range[1])/2;if(n._isScoped)x={lon:k,lat:A};else if(n._isClipped){x={lon:k,lat:A},b={lon:k,lat:A,roll:b.roll};var M=f.type,S=w.lonaxisSpan[M]/2||180,L=w.lataxisSpan[M]/2||90;_=[k-S,k+S],T=[A-L,A+L]}else x={lon:k,lat:A},b={lon:k,lat:b.lat,roll:b.roll}}y.center([x.lon-b.lon,x.lat-b.lat]).rotate([-b.lon,-b.lat,b.roll]).parallels(f.parallels);var C=E(_,T);y.fitExtent(m,C);var P=this.bounds=y.getBounds(C),O=this.fitScale=y.scale(),I=y.translate();if(n.fitbounds){var D=y.getBounds(E(d.range,v.range)),z=Math.min((P[1][0]-P[0][0])/(D[1][0]-D[0][0]),(P[1][1]-P[0][1])/(D[1][1]-D[0][1]));isFinite(z)?y.scale(z*O):u.warn("Something went wrong during"+this.id+"fitbounds computations.")}else y.scale(f.scale*O);var R=this.midPt=[(P[0][0]+P[1][0])/2,(P[0][1]+P[1][1])/2];if(y.translate([I[0]+(R[0]-I[0]),I[1]+(R[1]-I[1])]).clipExtent(P),n._isAlbersUsa){var F=y([x.lon,x.lat]),B=y.translate();y.translate([B[0]-(F[0]-B[0]),B[1]-(F[1]-B[1])])}},S.updateBaseLayers=function(t,e){var r=this,i=r.topojson,a=r.layers,o=r.basePaths;function s(t){return"lonaxis"===t||"lataxis"===t}function l(t){return Boolean(w.lineLayers[t])}function u(t){return Boolean(w.fillLayers[t])}var c=(this.hasChoropleth?w.layersForChoropleth:w.layers).filter((function(t){return l(t)||u(t)?e["show"+t]:!s(t)||e[t].showgrid})),p=r.framework.selectAll(".layer").data(c,String);p.exit().each((function(t){delete a[t],delete o[t],n.select(this).remove()})),p.enter().append("g").attr("class",(function(t){return"layer "+t})).each((function(t){var e=a[t]=n.select(this);"bg"===t?r.bgRect=e.append("rect").style("pointer-events","all"):s(t)?o[t]=e.append("path").style("fill","none"):"backplot"===t?e.append("g").classed("choroplethlayer",!0):"frontplot"===t?e.append("g").classed("scatterlayer",!0):l(t)?o[t]=e.append("path").style("fill","none").style("stroke-miterlimit",2):u(t)&&(o[t]=e.append("path").style("stroke","none"))})),p.order(),p.each((function(r){var n=o[r],a=w.layerNameToAdjective[r];"frame"===r?n.datum(w.sphereSVG):l(r)||u(r)?n.datum(A(i,i.objects[r])):s(r)&&n.datum(function(t,e,r){var n,i,a,o=e[t],s=w.scopeDefaults[e.scope];"lonaxis"===t?(n=s.lonaxisRange,i=s.lataxisRange,a=function(t,e){return[t,e]}):"lataxis"===t&&(n=s.lataxisRange,i=s.lonaxisRange,a=function(t,e){return[e,t]});var l={type:"linear",range:[n[0],n[1]-1e-6],tick0:o.tick0,dtick:o.dtick};v.setConvert(l,r);var u=v.calcTicks(l);e.isScoped||"lonaxis"!==t||u.pop();for(var c=u.length,f=new Array(c),h=0;h<c;h++)for(var p=u[h].x,d=f[h]=[],g=i[0];g<i[1]+2.5;g+=2.5)d.push(a(p,g));return{type:"MultiLineString",coordinates:f}}(r,e,t)).call(f.stroke,e[r].gridcolor).call(h.dashLine,e[r].griddash,e[r].gridwidth),l(r)?n.call(f.stroke,e[a+"color"]).call(h.dashLine,"",e[a+"width"]):u(r)&&n.call(f.fill,e[a+"color"])}))},S.updateDims=function(t,e){var r=this.bounds,n=(e.framewidth||0)/2,i=r[0][0]-n,a=r[0][1]-n,o=r[1][0]-i+n,s=r[1][1]-a+n;h.setRect(this.clipRect,i,a,o,s),this.bgRect.call(h.setRect,i,a,o,s).call(f.fill,e.bgcolor),this.xaxis._offset=i,this.xaxis._length=o,this.yaxis._offset=a,this.yaxis._length=s},S.updateFx=function(t,e){var r=this,i=r.graphDiv,a=r.bgRect,o=t.dragmode,s=t.clickmode;if(!r.isStatic){var c={element:r.bgRect.node(),gd:i,plotinfo:{id:r.id,xaxis:r.xaxis,yaxis:r.yaxis,fillRangeItems:function(t,e){e.isRect?(t.range={})[r.id]=[f([e.xmin,e.ymin]),f([e.xmax,e.ymax])]:(t.lassoPoints={})[r.id]=e.map(f)}},xaxes:[r.xaxis],yaxes:[r.yaxis],subplot:r.id,clickFn:function(t){2===t&&x(i)}};"pan"===o?(a.node().onmousedown=null,a.call(_(r,e)),a.on("dblclick.zoom",(function(){var t=r.viewInitial,e={};for(var n in t)e[r.id+"."+n]=t[n];l.call("_guiRelayout",i,e),i.emit("plotly_doubleclick",null)})),i._context._scrollZoom.geo||a.on("wheel.zoom",null)):"select"!==o&&"lasso"!==o||(a.on(".zoom",null),c.prepFn=function(t,e,r){m(t,e,r,c,o)},y.init(c)),a.on("mousemove",(function(){var t=r.projection.invert(u.getPositionFromD3Event());if(!t)return y.unhover(i,n.event);r.xaxis.p2c=function(){return t[0]},r.yaxis.p2c=function(){return t[1]},p.hover(i,n.event,r.id)})),a.on("mouseout",(function(){i._dragging||y.unhover(i,n.event)})),a.on("click",(function(){"select"!==o&&"lasso"!==o&&(s.indexOf("select")>-1&&b(n.event,i,[r.xaxis],[r.yaxis],r.id,c),s.indexOf("event")>-1&&p.click(i,n.event))}))}function f(t){return r.projection.invert([t[0]+r.xaxis._offset,t[1]+r.yaxis._offset])}},S.makeFramework=function(){var t=this,e=t.graphDiv,r=e._fullLayout,i="clip"+r._uid+t.id;t.clipDef=r._clips.append("clipPath").attr("id",i),t.clipRect=t.clipDef.append("rect"),t.framework=n.select(t.container).append("g").attr("class","geo "+t.id).call(h.setClipUrl,i,e),t.project=function(e){var r=t.projection(e);return r?[r[0]-t.xaxis._offset,r[1]-t.yaxis._offset]:[null,null]},t.xaxis={_id:"x",c2p:function(e){return t.project(e)[0]}},t.yaxis={_id:"y",c2p:function(e){return t.project(e)[1]}},t.mockAxis={type:"linear",showexponent:"all",exponentformat:"B"},v.setConvert(t.mockAxis,r)},S.saveViewInitial=function(t){var e,r=t.center||{},n=t.projection,i=n.rotation||{};this.viewInitial={fitbounds:t.fitbounds,"projection.scale":n.scale},e=t._isScoped?{"center.lon":r.lon,"center.lat":r.lat}:t._isClipped?{"projection.rotation.lon":i.lon,"projection.rotation.lat":i.lat}:{"center.lon":r.lon,"center.lat":r.lat,"projection.rotation.lon":i.lon},u.extendFlat(this.viewInitial,e)},S.render=function(t){this._hasMarkerAngles&&t?this.plot(this._geoCalcData,this._fullLayout,[],!0):this._render()},S._render=function(){var t,e=this.projection,r=e.getPath();function n(t){var r=e(t.lonlat);return r?c(r[0],r[1]):null}function i(t){return e.isLonLatOverEdges(t.lonlat)?"none":null}for(t in this.basePaths)this.basePaths[t].attr("d",r);for(t in this.dataPaths)this.dataPaths[t].attr("d",(function(t){return r(t.geojson)}));for(t in this.dataPoints)this.dataPoints[t].attr("display",i).attr("transform",n)}},44622:function(t,e,r){"use strict";var n=r(27659).AU,i=r(71828).counterRegex,a=r(69082),o="geo",s=i(o),l={};l[o]={valType:"subplotid",dflt:o,editType:"calc"},t.exports={attr:o,name:o,idRoot:o,idRegex:s,attrRegex:s,attributes:l,layoutAttributes:r(77519),supplyLayoutDefaults:r(82161),plot:function(t){for(var e=t._fullLayout,r=t.calcdata,i=e._subplots[o],s=0;s<i.length;s++){var l=i[s],u=n(r,o,l),c=e[l]._subplot;c||(c=a({id:l,graphDiv:t,container:e._geolayer.node(),topojsonURL:t._context.topojsonURL,staticPlot:t._context.staticPlot}),e[l]._subplot=c),c.plot(u,e,t._promises)}},updateFx:function(t){for(var e=t._fullLayout,r=e._subplots[o],n=0;n<r.length;n++){var i=e[r[n]];i._subplot.updateFx(e,i)}},clean:function(t,e,r,n){for(var i=n._subplots[o]||[],a=0;a<i.length;a++){var s=i[a],l=n[s]._subplot;!e[s]&&l&&(l.framework.remove(),l.clipDef.remove())}}}},77519:function(t,e,r){"use strict";var n=r(22399),i=r(27670).Y,a=r(79952).P,o=r(78776),s=r(30962).overrideAll,l=r(78607),u={range:{valType:"info_array",items:[{valType:"number"},{valType:"number"}]},showgrid:{valType:"boolean",dflt:!1},tick0:{valType:"number",dflt:0},dtick:{valType:"number"},gridcolor:{valType:"color",dflt:n.lightLine},gridwidth:{valType:"number",min:0,dflt:1},griddash:a};(t.exports=s({domain:i({name:"geo"},{}),fitbounds:{valType:"enumerated",values:[!1,"locations","geojson"],dflt:!1,editType:"plot"},resolution:{valType:"enumerated",values:[110,50],dflt:110,coerceNumber:!0},scope:{valType:"enumerated",values:l(o.scopeDefaults),dflt:"world"},projection:{type:{valType:"enumerated",values:l(o.projNames)},rotation:{lon:{valType:"number"},lat:{valType:"number"},roll:{valType:"number"}},tilt:{valType:"number",dflt:0},distance:{valType:"number",min:1.001,dflt:2},parallels:{valType:"info_array",items:[{valType:"number"},{valType:"number"}]},scale:{valType:"number",min:0,dflt:1}},center:{lon:{valType:"number"},lat:{valType:"number"}},visible:{valType:"boolean",dflt:!0},showcoastlines:{valType:"boolean"},coastlinecolor:{valType:"color",dflt:n.defaultLine},coastlinewidth:{valType:"number",min:0,dflt:1},showland:{valType:"boolean",dflt:!1},landcolor:{valType:"color",dflt:o.landColor},showocean:{valType:"boolean",dflt:!1},oceancolor:{valType:"color",dflt:o.waterColor},showlakes:{valType:"boolean",dflt:!1},lakecolor:{valType:"color",dflt:o.waterColor},showrivers:{valType:"boolean",dflt:!1},rivercolor:{valType:"color",dflt:o.waterColor},riverwidth:{valType:"number",min:0,dflt:1},showcountries:{valType:"boolean"},countrycolor:{valType:"color",dflt:n.defaultLine},countrywidth:{valType:"number",min:0,dflt:1},showsubunits:{valType:"boolean"},subunitcolor:{valType:"color",dflt:n.defaultLine},subunitwidth:{valType:"number",min:0,dflt:1},showframe:{valType:"boolean"},framecolor:{valType:"color",dflt:n.defaultLine},framewidth:{valType:"number",min:0,dflt:1},bgcolor:{valType:"color",dflt:n.background},lonaxis:u,lataxis:u},"plot","from-root")).uirevision={valType:"any",editType:"none"}},82161:function(t,e,r){"use strict";var n=r(71828),i=r(49119),a=r(27659).NG,o=r(78776),s=r(77519),l=o.axesNames;function u(t,e,r,i){var s=a(i.fullData,"geo",i.id).map((function(t){return t._expandedIndex})),u=r("resolution"),c=r("scope"),f=o.scopeDefaults[c],h=r("projection.type",f.projType),p=e._isAlbersUsa="albers usa"===h;p&&(c=e.scope="usa");var d=e._isScoped="world"!==c,v=e._isSatellite="satellite"===h,g=e._isConic=-1!==h.indexOf("conic")||"albers"===h,y=e._isClipped=!!o.lonaxisSpan[h];if(!1===t.visible){var m=n.extendDeep({},e._template);m.showcoastlines=!1,m.showcountries=!1,m.showframe=!1,m.showlakes=!1,m.showland=!1,m.showocean=!1,m.showrivers=!1,m.showsubunits=!1,m.lonaxis&&(m.lonaxis.showgrid=!1),m.lataxis&&(m.lataxis.showgrid=!1),e._template=m}for(var x=r("visible"),b=0;b<l.length;b++){var _,w=l[b],T=[30,10][b];if(d)_=f[w+"Range"];else{var k=o[w+"Span"],A=(k[h]||k["*"])/2,M=r("projection.rotation."+w.substr(0,3),f.projRotate[b]);_=[M-A,M+A]}var S=r(w+".range",_);r(w+".tick0"),r(w+".dtick",T),r(w+".showgrid",!!x&&void 0)&&(r(w+".gridcolor"),r(w+".gridwidth"),r(w+".griddash")),e[w]._ax={type:"linear",_id:w.slice(0,3),_traceIndices:s,setScale:n.identity,c2l:n.identity,r2l:n.identity,autorange:!0,range:S.slice(),_m:1,_input:{}}}var E=e.lonaxis.range,L=e.lataxis.range,C=E[0],P=E[1];C>0&&P<0&&(P+=360);var O,I,D,z=(C+P)/2;if(!p){var R=d?f.projRotate:[z,0,0];O=r("projection.rotation.lon",R[0]),r("projection.rotation.lat",R[1]),r("projection.rotation.roll",R[2]),r("showcoastlines",!d&&x)&&(r("coastlinecolor"),r("coastlinewidth")),r("showocean",!!x&&void 0)&&r("oceancolor")}p?(I=-96.6,D=38.7):(I=d?z:O,D=(L[0]+L[1])/2),r("center.lon",I),r("center.lat",D),v&&(r("projection.tilt"),r("projection.distance")),g&&r("projection.parallels",f.projParallels||[0,60]),r("projection.scale"),r("showland",!!x&&void 0)&&r("landcolor"),r("showlakes",!!x&&void 0)&&r("lakecolor"),r("showrivers",!!x&&void 0)&&(r("rivercolor"),r("riverwidth")),r("showcountries",d&&"usa"!==c&&x)&&(r("countrycolor"),r("countrywidth")),("usa"===c||"north america"===c&&50===u)&&(r("showsubunits",x),r("subunitcolor"),r("subunitwidth")),d||r("showframe",x)&&(r("framecolor"),r("framewidth")),r("bgcolor"),r("fitbounds")&&(delete e.projection.scale,d?(delete e.center.lon,delete e.center.lat):y?(delete e.center.lon,delete e.center.lat,delete e.projection.rotation.lon,delete e.projection.rotation.lat,delete e.lonaxis.range,delete e.lataxis.range):(delete e.center.lon,delete e.center.lat,delete e.projection.rotation.lon))}t.exports=function(t,e,r){i(t,e,r,{type:"geo",attributes:s,handleDefaults:u,fullData:r,partition:"y"})}},74455:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=r(73972),o=Math.PI/180,s=180/Math.PI,l={cursor:"pointer"},u={cursor:"auto"};function c(t,e){return n.behavior.zoom().translate(e.translate()).scale(e.scale())}function f(t,e,r){var n=t.id,o=t.graphDiv,s=o.layout,l=s[n],u=o._fullLayout,c=u[n],f={},h={};function p(t,e){f[n+"."+t]=i.nestedProperty(l,t).get(),a.call("_storeDirectGUIEdit",s,u._preGUI,f);var r=i.nestedProperty(c,t);r.get()!==e&&(r.set(e),i.nestedProperty(l,t).set(e),h[n+"."+t]=e)}r(p),p("projection.scale",e.scale()/t.fitScale),p("fitbounds",!1),o.emit("plotly_relayout",h)}function h(t,e){var r=c(0,e);function i(r){var n=e.invert(t.midPt);r("center.lon",n[0]),r("center.lat",n[1])}return r.on("zoomstart",(function(){n.select(this).style(l)})).on("zoom",(function(){e.scale(n.event.scale).translate(n.event.translate),t.render(!0);var r=e.invert(t.midPt);t.graphDiv.emit("plotly_relayouting",{"geo.projection.scale":e.scale()/t.fitScale,"geo.center.lon":r[0],"geo.center.lat":r[1]})})).on("zoomend",(function(){n.select(this).style(u),f(t,e,i)})),r}function p(t,e){var r,i,a,o,s,h,p,d,v,g=c(0,e);function y(t){return e.invert(t)}function m(r){var n=e.rotate(),i=e.invert(t.midPt);r("projection.rotation.lon",-n[0]),r("center.lon",i[0]),r("center.lat",i[1])}return g.on("zoomstart",(function(){n.select(this).style(l),r=n.mouse(this),i=e.rotate(),a=e.translate(),o=i,s=y(r)})).on("zoom",(function(){if(h=n.mouse(this),function(t){var r=y(t);if(!r)return!0;var n=e(r);return Math.abs(n[0]-t[0])>2||Math.abs(n[1]-t[1])>2}(r))return g.scale(e.scale()),void g.translate(e.translate());e.scale(n.event.scale),e.translate([a[0],n.event.translate[1]]),s?y(h)&&(d=y(h),p=[o[0]+(d[0]-s[0]),i[1],i[2]],e.rotate(p),o=p):s=y(r=h),v=!0,t.render(!0);var l=e.rotate(),u=e.invert(t.midPt);t.graphDiv.emit("plotly_relayouting",{"geo.projection.scale":e.scale()/t.fitScale,"geo.center.lon":u[0],"geo.center.lat":u[1],"geo.projection.rotation.lon":-l[0]})})).on("zoomend",(function(){n.select(this).style(u),v&&f(t,e,m)})),g}function d(t,e){var r,i={r:e.rotate(),k:e.scale()},a=c(0,e),h=function(t){for(var e=0,r=arguments.length,i=[];++e<r;)i.push(arguments[e]);var a=n.dispatch.apply(null,i);return a.of=function(e,r){return function(i){var o;try{o=i.sourceEvent=n.event,i.target=t,n.event=i,a[i.type].apply(e,r)}finally{n.event=o}}},a}(a,"zoomstart","zoom","zoomend"),p=0,d=a.on;function y(t){var r=e.rotate();t("projection.rotation.lon",-r[0]),t("projection.rotation.lat",-r[1])}return a.on("zoomstart",(function(){n.select(this).style(l);var t,u,c,f,y,b,_,w,T,k,A,M=n.mouse(this),S=e.rotate(),E=S,L=e.translate(),C=(u=.5*(t=S)[0]*o,c=.5*t[1]*o,f=.5*t[2]*o,y=Math.sin(u),b=Math.cos(u),_=Math.sin(c),w=Math.cos(c),T=Math.sin(f),[b*w*(k=Math.cos(f))+y*_*T,y*w*k-b*_*T,b*_*k+y*w*T,b*w*T-y*_*k]);r=v(e,M),d.call(a,"zoom",(function(){var t,a,o,l,u,c,f,p,d,y,b=n.mouse(this);if(e.scale(i.k=n.event.scale),r){if(v(e,b)){e.rotate(S).translate(L);var _=v(e,b),w=function(t,e){if(t&&e){var r=function(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}(t,e),n=Math.sqrt(x(r,r)),i=.5*Math.acos(Math.max(-1,Math.min(1,x(t,e)))),a=Math.sin(i)/n;return n&&[Math.cos(i),r[2]*a,-r[1]*a,r[0]*a]}}(r,_),T=function(t){return[Math.atan2(2*(t[0]*t[1]+t[2]*t[3]),1-2*(t[1]*t[1]+t[2]*t[2]))*s,Math.asin(Math.max(-1,Math.min(1,2*(t[0]*t[2]-t[3]*t[1]))))*s,Math.atan2(2*(t[0]*t[3]+t[1]*t[2]),1-2*(t[2]*t[2]+t[3]*t[3]))*s]}((o=(t=C)[0],l=t[1],u=t[2],c=t[3],[o*(f=(a=w)[0])-l*(p=a[1])-u*(d=a[2])-c*(y=a[3]),o*p+l*f+u*y-c*d,o*d-l*y+u*f+c*p,o*y+l*d-u*p+c*f])),k=i.r=function(t,e,r){var n=m(e,2,t[0]);n=m(n,1,t[1]),n=m(n,0,t[2]-r[2]);var i,a,o=e[0],l=e[1],u=e[2],c=n[0],f=n[1],h=n[2],p=Math.atan2(l,o)*s,d=Math.sqrt(o*o+l*l);Math.abs(f)>d?(a=(f>0?90:-90)-p,i=0):(a=Math.asin(f/d)*s-p,i=Math.sqrt(d*d-f*f));var v=180-a-2*p,y=(Math.atan2(h,c)-Math.atan2(u,i))*s,x=(Math.atan2(h,c)-Math.atan2(u,-i))*s;return g(r[0],r[1],a,y)<=g(r[0],r[1],v,x)?[a,y,r[2]]:[v,x,r[2]]}(T,r,E);isFinite(k[0])&&isFinite(k[1])&&isFinite(k[2])||(k=E),e.rotate(k),E=k}}else r=v(e,M=b);h.of(this,arguments)({type:"zoom"})})),A=h.of(this,arguments),p++||A({type:"zoomstart"})})).on("zoomend",(function(){var r;n.select(this).style(u),d.call(a,"zoom",null),r=h.of(this,arguments),--p||r({type:"zoomend"}),f(t,e,y)})).on("zoom.redraw",(function(){t.render(!0);var r=e.rotate();t.graphDiv.emit("plotly_relayouting",{"geo.projection.scale":e.scale()/t.fitScale,"geo.projection.rotation.lon":-r[0],"geo.projection.rotation.lat":-r[1]})})),n.rebind(a,h,"on")}function v(t,e){var r=t.invert(e);return r&&isFinite(r[0])&&isFinite(r[1])&&function(t){var e=t[0]*o,r=t[1]*o,n=Math.cos(r);return[n*Math.cos(e),n*Math.sin(e),Math.sin(r)]}(r)}function g(t,e,r,n){var i=y(r-t),a=y(n-e);return Math.sqrt(i*i+a*a)}function y(t){return(t%360+540)%360-180}function m(t,e,r){var n=r*o,i=t.slice(),a=0===e?1:0,s=2===e?1:2,l=Math.cos(n),u=Math.sin(n);return i[a]=t[a]*l-t[s]*u,i[s]=t[s]*l+t[a]*u,i}function x(t,e){for(var r=0,n=0,i=t.length;n<i;++n)r+=t[n]*e[n];return r}t.exports=function(t,e){var r=t.projection;return(e._isScoped?h:e._isClipped?d:p)(t,r)}},27659:function(t,e,r){"use strict";var n=r(73972),i=r(85555).SUBPLOT_PATTERN;e.AU=function(t,e,r){var i=n.subplotsRegistry[e];if(!i)return[];for(var a=i.attr,o=[],s=0;s<t.length;s++){var l=t[s];l[0].trace[a]===r&&o.push(l)}return o},e.a0=function(t,e){var r,i=[],a=[];if(!(r="string"==typeof e?n.getModule(e).plot:"function"==typeof e?e:e.plot))return[i,t];for(var o=0;o<t.length;o++){var s=t[o],l=s[0].trace;!0===l.visible&&0!==l._length&&(l._module&&l._module.plot===r?i.push(s):a.push(s))}return[i,a]},e.NG=function(t,e,r){if(!n.subplotsRegistry[e])return[];var a,o,s,l=n.subplotsRegistry[e].attr,u=[];if("gl2d"===e){var c=r.match(i);o="x"+c[1],s="y"+c[2]}for(var f=0;f<t.length;f++)a=t[f],"gl2d"===e&&n.traceIs(a,"gl2d")?a[l[0]]===o&&a[l[1]]===s&&u.push(a):a[l]===r&&u.push(a);return u}},75071:function(t,e,r){"use strict";var n=r(16825),i=r(1195),a=r(48956),o=r(85555),s=r(38520);function l(t,e){this.element=t,this.plot=e,this.mouseListener=null,this.wheelListener=null,this.lastInputTime=Date.now(),this.lastPos=[0,0],this.boxEnabled=!1,this.boxInited=!1,this.boxStart=[0,0],this.boxEnd=[0,0],this.dragStart=[0,0]}t.exports=function(t){var e=t.mouseContainer,r=t.glplot,u=new l(e,r);function c(){t.xaxis.autorange=!1,t.yaxis.autorange=!1}function f(e,n,i){var a,s,l=t.calcDataBox(),f=r.viewBox,h=u.lastPos[0],p=u.lastPos[1],d=o.MINDRAG*r.pixelRatio,v=o.MINZOOM*r.pixelRatio;function g(e,r,n){var i=Math.min(r,n),a=Math.max(r,n);i!==a?(l[e]=i,l[e+2]=a,u.dataBox=l,t.setRanges(l)):(t.selectBox.selectBox=[0,0,1,1],t.glplot.setDirty())}switch(n*=r.pixelRatio,i*=r.pixelRatio,i=f[3]-f[1]-i,t.fullLayout.dragmode){case"zoom":if(e){var y=n/(f[2]-f[0])*(l[2]-l[0])+l[0],m=i/(f[3]-f[1])*(l[3]-l[1])+l[1];u.boxInited||(u.boxStart[0]=y,u.boxStart[1]=m,u.dragStart[0]=n,u.dragStart[1]=i),u.boxEnd[0]=y,u.boxEnd[1]=m,u.boxInited=!0,u.boxEnabled||u.boxStart[0]===u.boxEnd[0]&&u.boxStart[1]===u.boxEnd[1]||(u.boxEnabled=!0);var x=Math.abs(u.dragStart[0]-n)<v,b=Math.abs(u.dragStart[1]-i)<v;if(!function(){for(var e=t.graphDiv._fullLayout._axisConstraintGroups,r=t.xaxis._id,n=t.yaxis._id,i=0;i<e.length;i++)if(-1!==e[i][r]){if(-1!==e[i][n])return!0;break}return!1}()||x&&b)x&&(u.boxEnd[0]=u.boxStart[0]),b&&(u.boxEnd[1]=u.boxStart[1]);else{a=u.boxEnd[0]-u.boxStart[0],s=u.boxEnd[1]-u.boxStart[1];var _=(l[3]-l[1])/(l[2]-l[0]);Math.abs(a*_)>Math.abs(s)?(u.boxEnd[1]=u.boxStart[1]+Math.abs(a)*_*(s>=0?1:-1),u.boxEnd[1]<l[1]?(u.boxEnd[1]=l[1],u.boxEnd[0]=u.boxStart[0]+(l[1]-u.boxStart[1])/Math.abs(_)):u.boxEnd[1]>l[3]&&(u.boxEnd[1]=l[3],u.boxEnd[0]=u.boxStart[0]+(l[3]-u.boxStart[1])/Math.abs(_))):(u.boxEnd[0]=u.boxStart[0]+Math.abs(s)/_*(a>=0?1:-1),u.boxEnd[0]<l[0]?(u.boxEnd[0]=l[0],u.boxEnd[1]=u.boxStart[1]+(l[0]-u.boxStart[0])*Math.abs(_)):u.boxEnd[0]>l[2]&&(u.boxEnd[0]=l[2],u.boxEnd[1]=u.boxStart[1]+(l[2]-u.boxStart[0])*Math.abs(_)))}}else u.boxEnabled?(a=u.boxStart[0]!==u.boxEnd[0],s=u.boxStart[1]!==u.boxEnd[1],a||s?(a&&(g(0,u.boxStart[0],u.boxEnd[0]),t.xaxis.autorange=!1),s&&(g(1,u.boxStart[1],u.boxEnd[1]),t.yaxis.autorange=!1),t.relayoutCallback()):t.glplot.setDirty(),u.boxEnabled=!1,u.boxInited=!1):u.boxInited&&(u.boxInited=!1);break;case"pan":u.boxEnabled=!1,u.boxInited=!1,e?(u.panning||(u.dragStart[0]=n,u.dragStart[1]=i),Math.abs(u.dragStart[0]-n)<d&&(n=u.dragStart[0]),Math.abs(u.dragStart[1]-i)<d&&(i=u.dragStart[1]),a=(h-n)*(l[2]-l[0])/(r.viewBox[2]-r.viewBox[0]),s=(p-i)*(l[3]-l[1])/(r.viewBox[3]-r.viewBox[1]),l[0]+=a,l[2]+=a,l[1]+=s,l[3]+=s,t.setRanges(l),u.panning=!0,u.lastInputTime=Date.now(),c(),t.cameraChanged(),t.handleAnnotations()):u.panning&&(u.panning=!1,t.relayoutCallback())}u.lastPos[0]=n,u.lastPos[1]=i}return u.mouseListener=n(e,f),e.addEventListener("touchstart",(function(t){var r=a(t.changedTouches[0],e);f(0,r[0],r[1]),f(1,r[0],r[1]),t.preventDefault()}),!!s&&{passive:!1}),e.addEventListener("touchmove",(function(t){t.preventDefault();var r=a(t.changedTouches[0],e);f(1,r[0],r[1]),t.preventDefault()}),!!s&&{passive:!1}),e.addEventListener("touchend",(function(t){f(0,u.lastPos[0],u.lastPos[1]),t.preventDefault()}),!!s&&{passive:!1}),u.wheelListener=i(e,(function(e,n){if(!t.scrollZoom)return!1;var i=t.calcDataBox(),a=r.viewBox,o=u.lastPos[0],s=u.lastPos[1],l=Math.exp(5*n/(a[3]-a[1])),f=o/(a[2]-a[0])*(i[2]-i[0])+i[0],h=s/(a[3]-a[1])*(i[3]-i[1])+i[1];return i[0]=(i[0]-f)*l+f,i[2]=(i[2]-f)*l+f,i[1]=(i[1]-h)*l+h,i[3]=(i[3]-h)*l+h,t.setRanges(i),u.lastInputTime=Date.now(),c(),t.cameraChanged(),t.handleAnnotations(),t.relayoutCallback(),!0}),!0),u}},82961:function(t,e,r){"use strict";var n=r(89298),i=r(78614);function a(t){this.scene=t,this.gl=t.gl,this.pixelRatio=t.pixelRatio,this.screenBox=[0,0,1,1],this.viewBox=[0,0,1,1],this.dataBox=[-1,-1,1,1],this.borderLineEnable=[!1,!1,!1,!1],this.borderLineWidth=[1,1,1,1],this.borderLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.ticks=[[],[]],this.tickEnable=[!0,!0,!1,!1],this.tickPad=[15,15,15,15],this.tickAngle=[0,0,0,0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickMarkLength=[0,0,0,0],this.tickMarkWidth=[0,0,0,0],this.tickMarkColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labels=["x","y"],this.labelEnable=[!0,!0,!1,!1],this.labelAngle=[0,Math.PI/2,0,3*Math.PI/2],this.labelPad=[15,15,15,15],this.labelSize=[12,12],this.labelFont=["sans-serif","sans-serif"],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.title="",this.titleEnable=!0,this.titleCenter=[0,0,0,0],this.titleAngle=0,this.titleColor=[0,0,0,1],this.titleFont="sans-serif",this.titleSize=18,this.gridLineEnable=[!0,!0],this.gridLineColor=[[0,0,0,.5],[0,0,0,.5]],this.gridLineWidth=[1,1],this.zeroLineEnable=[!0,!0],this.zeroLineWidth=[1,1],this.zeroLineColor=[[0,0,0,1],[0,0,0,1]],this.borderColor=[0,0,0,0],this.backgroundColor=[0,0,0,0],this.static=this.scene.staticPlot}var o=a.prototype,s=["xaxis","yaxis"];o.merge=function(t){var e,r,n,a,o,l,u,c,f,h,p;for(this.titleEnable=!1,this.backgroundColor=i(t.plot_bgcolor),h=0;h<2;++h){var d=(e=s[h]).charAt(0);for(n=(r=t[this.scene[e]._name]).title.text===this.scene.fullLayout._dfltTitle[d]?"":r.title.text,p=0;p<=2;p+=2)this.labelEnable[h+p]=!1,this.labels[h+p]=n,this.labelColor[h+p]=i(r.title.font.color),this.labelFont[h+p]=r.title.font.family,this.labelSize[h+p]=r.title.font.size,this.labelPad[h+p]=this.getLabelPad(e,r),this.tickEnable[h+p]=!1,this.tickColor[h+p]=i((r.tickfont||{}).color),this.tickAngle[h+p]="auto"===r.tickangle?0:Math.PI*-r.tickangle/180,this.tickPad[h+p]=this.getTickPad(r),this.tickMarkLength[h+p]=0,this.tickMarkWidth[h+p]=r.tickwidth||0,this.tickMarkColor[h+p]=i(r.tickcolor),this.borderLineEnable[h+p]=!1,this.borderLineColor[h+p]=i(r.linecolor),this.borderLineWidth[h+p]=r.linewidth||0;u=this.hasSharedAxis(r),o=this.hasAxisInDfltPos(e,r)&&!u,l=this.hasAxisInAltrPos(e,r)&&!u,a=r.mirror||!1,c=u?-1!==String(a).indexOf("all"):!!a,f=u?"allticks"===a:-1!==String(a).indexOf("ticks"),o?this.labelEnable[h]=!0:l&&(this.labelEnable[h+2]=!0),o?this.tickEnable[h]=r.showticklabels:l&&(this.tickEnable[h+2]=r.showticklabels),(o||c)&&(this.borderLineEnable[h]=r.showline),(l||c)&&(this.borderLineEnable[h+2]=r.showline),(o||f)&&(this.tickMarkLength[h]=this.getTickMarkLength(r)),(l||f)&&(this.tickMarkLength[h+2]=this.getTickMarkLength(r)),this.gridLineEnable[h]=r.showgrid,this.gridLineColor[h]=i(r.gridcolor),this.gridLineWidth[h]=r.gridwidth,this.zeroLineEnable[h]=r.zeroline,this.zeroLineColor[h]=i(r.zerolinecolor),this.zeroLineWidth[h]=r.zerolinewidth}},o.hasSharedAxis=function(t){var e=this.scene,r=e.fullLayout._subplots.gl2d;return 0!==n.findSubplotsWithAxis(r,t).indexOf(e.id)},o.hasAxisInDfltPos=function(t,e){var r=e.side;return"xaxis"===t?"bottom"===r:"yaxis"===t?"left"===r:void 0},o.hasAxisInAltrPos=function(t,e){var r=e.side;return"xaxis"===t?"top"===r:"yaxis"===t?"right"===r:void 0},o.getLabelPad=function(t,e){var r=1.5,n=e.title.font.size,i=e.showticklabels;return"xaxis"===t?"top"===e.side?n*(r+(i?1:0))-10:n*(r+(i?.5:0))-10:"yaxis"===t?"right"===e.side?10+n*(r+(i?1:.5)):10+n*(r+(i?.5:0)):void 0},o.getTickPad=function(t){return"outside"===t.ticks?10+t.ticklen:15},o.getTickMarkLength=function(t){if(!t.ticks)return 0;var e=t.ticklen;return"inside"===t.ticks?-e:e},t.exports=function(t){return new a(t)}},4796:function(t,e,r){"use strict";var n=r(30962).overrideAll,i=r(92918),a=r(10820),o=r(77922),s=r(85555),l=r(93612),u=r(528),c=r(27659).NG;e.name="gl2d",e.attr=["xaxis","yaxis"],e.idRoot=["x","y"],e.idRegex=s.idRegex,e.attrRegex=s.attrRegex,e.attributes=r(89502),e.supplyLayoutDefaults=function(t,e,r){e._has("cartesian")||l.supplyLayoutDefaults(t,e,r)},e.layoutAttrOverrides=n(l.layoutAttributes,"plot","from-root"),e.baseLayoutAttrOverrides=n({plot_bgcolor:a.plot_bgcolor,hoverlabel:u.hoverlabel},"plot","nested"),e.plot=function(t){for(var e=t._fullLayout,r=t._fullData,n=e._subplots.gl2d,a=0;a<n.length;a++){var o=n[a],s=e._plots[o],l=c(r,"gl2d",o),u=s._scene2d;void 0===u&&(u=new i({id:o,graphDiv:t,container:t.querySelector(".gl-container"),staticPlot:t._context.staticPlot,plotGlPixelRatio:t._context.plotGlPixelRatio},e),s._scene2d=u),u.plot(l,t.calcdata,e,t.layout)}},e.clean=function(t,e,r,n){for(var i=n._subplots.gl2d||[],a=0;a<i.length;a++){var o=i[a],s=n._plots[o];s._scene2d&&0===c(t,"gl2d",o).length&&(s._scene2d.destroy(),delete n._plots[o])}l.clean.apply(this,arguments)},e.drawFramework=function(t){t._context.staticPlot||l.drawFramework(t)},e.toSVG=function(t){for(var e=t._fullLayout,r=e._subplots.gl2d,n=0;n<r.length;n++){var i=e._plots[r[n]]._scene2d,a=i.toImage("png");e._glimages.append("svg:image").attr({xmlns:o.svg,"xlink:href":a,x:0,y:0,width:"100%",height:"100%",preserveAspectRatio:"none"}),i.destroy()}},e.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots.gl2d,n=0;n<r.length;n++)e._plots[r[n]]._scene2d.updateFx(e.dragmode)}},92918:function(t,e,r){"use strict";var n,i,a=r(73972),o=r(89298),s=r(30211),l=r(9330).gl_plot2d,u=r(9330).gl_spikes2d,c=r(9330).gl_select_box,f=r(40372),h=r(82961),p=r(75071),d=r(58617),v=r(99082),g=v.enforce,y=v.clean,m=r(71739).doAutoRange,x=r(64505),b=x.drawMode,_=x.selectMode,w=["xaxis","yaxis"],T=r(85555).SUBPLOT_PATTERN;function k(t,e){this.container=t.container,this.graphDiv=t.graphDiv,this.pixelRatio=t.plotGlPixelRatio||window.devicePixelRatio,this.id=t.id,this.staticPlot=!!t.staticPlot,this.scrollZoom=this.graphDiv._context._scrollZoom.cartesian,this.fullData=null,this.updateRefs(e),this.makeFramework(),this.stopped||(this.glplotOptions=h(this),this.glplotOptions.merge(e),this.glplot=l(this.glplotOptions),this.camera=p(this),this.traces={},this.spikes=u(this.glplot),this.selectBox=c(this.glplot,{innerFill:!1,outerFill:!0}),this.lastButtonState=0,this.pickResult=null,this.isMouseOver=!0,this.stopped=!1,this.redraw=this.draw.bind(this),this.redraw())}t.exports=k;var A=k.prototype;A.makeFramework=function(){if(this.staticPlot){if(!(i||(n=document.createElement("canvas"),i=f({canvas:n,preserveDrawingBuffer:!1,premultipliedAlpha:!0,antialias:!0}))))throw new Error("Error creating static canvas/context for image server");this.canvas=n,this.gl=i}else{var t=this.container.querySelector(".gl-canvas-focus"),e=f({canvas:t,preserveDrawingBuffer:!0,premultipliedAlpha:!0});if(!e)return d(this),void(this.stopped=!0);this.canvas=t,this.gl=e}var r=this.canvas;r.style.width="100%",r.style.height="100%",r.style.position="absolute",r.style.top="0px",r.style.left="0px",r.style["pointer-events"]="none",this.updateSize(r);var a=this.svgContainer=document.createElementNS("http://www.w3.org/2000/svg","svg");a.style.position="absolute",a.style.top=a.style.left="0px",a.style.width=a.style.height="100%",a.style["z-index"]=20,a.style["pointer-events"]="none";var o=this.mouseContainer=document.createElement("div");o.style.position="absolute",o.style["pointer-events"]="auto",this.pickCanvas=this.container.querySelector(".gl-canvas-pick");var s=this.container;s.appendChild(a),s.appendChild(o);var l=this;o.addEventListener("mouseout",(function(){l.isMouseOver=!1,l.unhover()})),o.addEventListener("mouseover",(function(){l.isMouseOver=!0}))},A.toImage=function(t){t||(t="png"),this.stopped=!0,this.staticPlot&&this.container.appendChild(n),this.updateSize(this.canvas);var e=this.glplot.gl,r=e.drawingBufferWidth,i=e.drawingBufferHeight;e.clearColor(1,1,1,0),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT),this.glplot.setDirty(),this.glplot.draw(),e.bindFramebuffer(e.FRAMEBUFFER,null);var a=new Uint8Array(r*i*4);e.readPixels(0,0,r,i,e.RGBA,e.UNSIGNED_BYTE,a);for(var o=0,s=i-1;o<s;++o,--s)for(var l=0;l<r;++l)for(var u=0;u<4;++u){var c=a[4*(r*o+l)+u];a[4*(r*o+l)+u]=a[4*(r*s+l)+u],a[4*(r*s+l)+u]=c}var f=document.createElement("canvas");f.width=r,f.height=i;var h,p=f.getContext("2d",{willReadFrequently:!0}),d=p.createImageData(r,i);switch(d.data.set(a),p.putImageData(d,0,0),t){case"jpeg":h=f.toDataURL("image/jpeg");break;case"webp":h=f.toDataURL("image/webp");break;default:h=f.toDataURL("image/png")}return this.staticPlot&&this.container.removeChild(n),h},A.updateSize=function(t){t||(t=this.canvas);var e=this.pixelRatio,r=this.fullLayout,n=r.width,i=r.height,a=0|Math.ceil(e*n),o=0|Math.ceil(e*i);return t.width===a&&t.height===o||(t.width=a,t.height=o),t},A.computeTickMarks=function(){this.xaxis.setScale(),this.yaxis.setScale();for(var t=[o.calcTicks(this.xaxis),o.calcTicks(this.yaxis)],e=0;e<2;++e)for(var r=0;r<t[e].length;++r)t[e][r].text=t[e][r].text+"";return t},A.updateRefs=function(t){this.fullLayout=t;var e=this.id.match(T),r="xaxis"+e[1],n="yaxis"+e[2];this.xaxis=this.fullLayout[r],this.yaxis=this.fullLayout[n]},A.relayoutCallback=function(){var t=this.graphDiv,e=this.xaxis,r=this.yaxis,n=t.layout,i={},o=i[e._name+".range"]=e.range.slice(),s=i[r._name+".range"]=r.range.slice();i[e._name+".autorange"]=e.autorange,i[r._name+".autorange"]=r.autorange,a.call("_storeDirectGUIEdit",t.layout,t._fullLayout._preGUI,i);var l=n[e._name];l.range=o,l.autorange=e.autorange;var u=n[r._name];u.range=s,u.autorange=r.autorange,i.lastInputTime=this.camera.lastInputTime,t.emit("plotly_relayout",i)},A.cameraChanged=function(){var t=this.camera;this.glplot.setDataBox(this.calcDataBox());var e=this.computeTickMarks();(function(t,e){for(var r=0;r<2;++r){var n=t[r],i=e[r];if(n.length!==i.length)return!0;for(var a=0;a<n.length;++a)if(n[a].x!==i[a].x)return!0}return!1})(e,this.glplotOptions.ticks)&&(this.glplotOptions.ticks=e,this.glplotOptions.dataBox=t.dataBox,this.glplot.update(this.glplotOptions),this.handleAnnotations())},A.handleAnnotations=function(){for(var t=this.graphDiv,e=this.fullLayout.annotations,r=0;r<e.length;r++){var n=e[r];n.xref===this.xaxis._id&&n.yref===this.yaxis._id&&a.getComponentMethod("annotations","drawOne")(t,r)}},A.destroy=function(){if(this.glplot){var t=this.traces;t&&Object.keys(t).map((function(e){t[e].dispose(),delete t[e]})),this.glplot.dispose(),this.container.removeChild(this.svgContainer),this.container.removeChild(this.mouseContainer),this.fullData=null,this.glplot=null,this.stopped=!0,this.camera.mouseListener.enabled=!1,this.mouseContainer.removeEventListener("wheel",this.camera.wheelListener),this.camera=null}},A.plot=function(t,e,r){var n=this.glplot;this.updateRefs(r),this.xaxis.clearCalc(),this.yaxis.clearCalc(),this.updateTraces(t,e),this.updateFx(r.dragmode);var i=r.width,a=r.height;this.updateSize(this.canvas);var o=this.glplotOptions;o.merge(r),o.screenBox=[0,0,i,a];var s={_fullLayout:{_axisConstraintGroups:r._axisConstraintGroups,xaxis:this.xaxis,yaxis:this.yaxis,_size:r._size}};y(s,this.xaxis),y(s,this.yaxis);var l,u,c=r._size,f=this.xaxis.domain,h=this.yaxis.domain;for(o.viewBox=[c.l+f[0]*c.w,c.b+h[0]*c.h,i-c.r-(1-f[1])*c.w,a-c.t-(1-h[1])*c.h],this.mouseContainer.style.width=c.w*(f[1]-f[0])+"px",this.mouseContainer.style.height=c.h*(h[1]-h[0])+"px",this.mouseContainer.height=c.h*(h[1]-h[0]),this.mouseContainer.style.left=c.l+f[0]*c.w+"px",this.mouseContainer.style.top=c.t+(1-h[1])*c.h+"px",u=0;u<2;++u)(l=this[w[u]])._length=o.viewBox[u+2]-o.viewBox[u],m(this.graphDiv,l),l.setScale();g(s),o.ticks=this.computeTickMarks(),o.dataBox=this.calcDataBox(),o.merge(r),n.update(o),this.glplot.draw()},A.calcDataBox=function(){var t=this.xaxis,e=this.yaxis,r=t.range,n=e.range,i=t.r2l,a=e.r2l;return[i(r[0]),a(n[0]),i(r[1]),a(n[1])]},A.setRanges=function(t){var e=this.xaxis,r=this.yaxis,n=e.l2r,i=r.l2r;e.range=[n(t[0]),n(t[2])],r.range=[i(t[1]),i(t[3])]},A.updateTraces=function(t,e){var r,n,i,a=Object.keys(this.traces);this.fullData=t;t:for(r=0;r<a.length;r++){var o=a[r],s=this.traces[o];for(n=0;n<t.length;n++)if((i=t[n]).uid===o&&i.type===s.type)continue t;s.dispose(),delete this.traces[o]}for(r=0;r<t.length;r++){i=t[r];var l=e[r],u=this.traces[i.uid];u?u.update(i,l):(u=i._module.plot(this,i,l),this.traces[i.uid]=u)}this.glplot.objects.sort((function(t,e){return t._trace.index-e._trace.index}))},A.updateFx=function(t){_(t)||b(t)?(this.pickCanvas.style["pointer-events"]="none",this.mouseContainer.style["pointer-events"]="none"):(this.pickCanvas.style["pointer-events"]="auto",this.mouseContainer.style["pointer-events"]="auto"),this.mouseContainer.style.cursor="pan"===t?"move":"zoom"===t?"crosshair":null},A.emitPointAction=function(t,e){for(var r,n=t.trace.uid,i=t.pointIndex,a=0;a<this.fullData.length;a++)this.fullData[a].uid===n&&(r=this.fullData[a]);var o={x:t.traceCoord[0],y:t.traceCoord[1],curveNumber:r.index,pointNumber:i,data:r._input,fullData:this.fullData,xaxis:this.xaxis,yaxis:this.yaxis};s.appendArrayPointValue(o,r,i),this.graphDiv.emit(e,{points:[o]})},A.draw=function(){if(!this.stopped){requestAnimationFrame(this.redraw);var t=this.glplot,e=this.camera,r=e.mouseListener,n=1===this.lastButtonState&&0===r.buttons,i=this.fullLayout;this.lastButtonState=r.buttons,this.cameraChanged();var a,o=r.x*t.pixelRatio,l=this.canvas.height-t.pixelRatio*r.y;if(e.boxEnabled&&"zoom"===i.dragmode){this.selectBox.enabled=!0;for(var u=this.selectBox.selectBox=[Math.min(e.boxStart[0],e.boxEnd[0]),Math.min(e.boxStart[1],e.boxEnd[1]),Math.max(e.boxStart[0],e.boxEnd[0]),Math.max(e.boxStart[1],e.boxEnd[1])],c=0;c<2;c++)e.boxStart[c]===e.boxEnd[c]&&(u[c]=t.dataBox[c],u[c+2]=t.dataBox[c+2]);t.setDirty()}else if(!e.panning&&this.isMouseOver){this.selectBox.enabled=!1;var f=i._size,h=this.xaxis.domain,p=this.yaxis.domain,d=(a=t.pick(o/t.pixelRatio+f.l+h[0]*f.w,l/t.pixelRatio-(f.t+(1-p[1])*f.h)))&&a.object._trace.handlePick(a);if(d&&n&&this.emitPointAction(d,"plotly_click"),a&&"skip"!==a.object._trace.hoverinfo&&i.hovermode&&d&&(!this.lastPickResult||this.lastPickResult.traceUid!==d.trace.uid||this.lastPickResult.dataCoord[0]!==d.dataCoord[0]||this.lastPickResult.dataCoord[1]!==d.dataCoord[1])){var v=d;this.lastPickResult={traceUid:d.trace?d.trace.uid:null,dataCoord:d.dataCoord.slice()},this.spikes.update({center:a.dataCoord}),v.screenCoord=[((t.viewBox[2]-t.viewBox[0])*(a.dataCoord[0]-t.dataBox[0])/(t.dataBox[2]-t.dataBox[0])+t.viewBox[0])/t.pixelRatio,(this.canvas.height-(t.viewBox[3]-t.viewBox[1])*(a.dataCoord[1]-t.dataBox[1])/(t.dataBox[3]-t.dataBox[1])-t.viewBox[1])/t.pixelRatio],this.emitPointAction(d,"plotly_hover");var g=this.fullData[v.trace.index]||{},y=v.pointIndex,m=s.castHoverinfo(g,i,y);if(m&&"all"!==m){var x=m.split("+");-1===x.indexOf("x")&&(v.traceCoord[0]=void 0),-1===x.indexOf("y")&&(v.traceCoord[1]=void 0),-1===x.indexOf("z")&&(v.traceCoord[2]=void 0),-1===x.indexOf("text")&&(v.textLabel=void 0),-1===x.indexOf("name")&&(v.name=void 0)}s.loneHover({x:v.screenCoord[0],y:v.screenCoord[1],xLabel:this.hoverFormatter("xaxis",v.traceCoord[0]),yLabel:this.hoverFormatter("yaxis",v.traceCoord[1]),zLabel:v.traceCoord[2],text:v.textLabel,name:v.name,color:s.castHoverOption(g,y,"bgcolor")||v.color,borderColor:s.castHoverOption(g,y,"bordercolor"),fontFamily:s.castHoverOption(g,y,"font.family"),fontSize:s.castHoverOption(g,y,"font.size"),fontColor:s.castHoverOption(g,y,"font.color"),nameLength:s.castHoverOption(g,y,"namelength"),textAlign:s.castHoverOption(g,y,"align")},{container:this.svgContainer,gd:this.graphDiv})}}a||this.unhover(),t.draw()}},A.unhover=function(){this.lastPickResult&&(this.spikes.update({}),this.lastPickResult=null,this.graphDiv.emit("plotly_unhover"),s.loneUnhover(this.svgContainer))},A.hoverFormatter=function(t,e){if(void 0!==e){var r=this[t];return o.tickText(r,r.c2l(e),"hover").text}}},58547:function(t,e,r){"use strict";var n=r(30962).overrideAll,i=r(528),a=r(33539),o=r(27659).NG,s=r(71828),l=r(77922),u="gl3d",c="scene";e.name=u,e.attr=c,e.idRoot=c,e.idRegex=e.attrRegex=s.counterRegex("scene"),e.attributes=r(59084),e.layoutAttributes=r(65500),e.baseLayoutAttrOverrides=n({hoverlabel:i.hoverlabel},"plot","nested"),e.supplyLayoutDefaults=r(24682),e.plot=function(t){for(var e=t._fullLayout,r=t._fullData,n=e._subplots[u],i=0;i<n.length;i++){var s=n[i],l=o(r,u,s),c=e[s],f=c.camera,h=c._scene;h||(h=new a({id:s,graphDiv:t,container:t.querySelector(".gl-container"),staticPlot:t._context.staticPlot,plotGlPixelRatio:t._context.plotGlPixelRatio,camera:f},e),c._scene=h),h.viewInitial||(h.viewInitial={up:{x:f.up.x,y:f.up.y,z:f.up.z},eye:{x:f.eye.x,y:f.eye.y,z:f.eye.z},center:{x:f.center.x,y:f.center.y,z:f.center.z}}),h.plot(l,e,t.layout)}},e.clean=function(t,e,r,n){for(var i=n._subplots[u]||[],a=0;a<i.length;a++){var o=i[a];!e[o]&&n[o]._scene&&(n[o]._scene.destroy(),n._infolayer&&n._infolayer.selectAll(".annotation-"+o).remove())}},e.toSVG=function(t){for(var e=t._fullLayout,r=e._subplots[u],n=e._size,i=0;i<r.length;i++){var a=e[r[i]],o=a.domain,s=a._scene,c=s.toImage("png");e._glimages.append("svg:image").attr({xmlns:l.svg,"xlink:href":c,x:n.l+n.w*o.x[0],y:n.t+n.h*(1-o.y[1]),width:n.w*(o.x[1]-o.x[0]),height:n.h*(o.y[1]-o.y[0]),preserveAspectRatio:"none"}),s.destroy()}},e.cleanId=function(t){if(t.match(/^scene[0-9]*$/)){var e=t.substr(5);return"1"===e&&(e=""),c+e}},e.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots[u],n=0;n<r.length;n++)e[r[n]]._scene.updateFx(e.dragmode,e.hovermode)}},59084:function(t){"use strict";t.exports={scene:{valType:"subplotid",dflt:"scene",editType:"calc+clearAxisTypes"}}},77894:function(t,e,r){"use strict";var n=r(7901),i=r(13838),a=r(1426).extendFlat,o=r(30962).overrideAll;t.exports=o({visible:i.visible,showspikes:{valType:"boolean",dflt:!0},spikesides:{valType:"boolean",dflt:!0},spikethickness:{valType:"number",min:0,dflt:2},spikecolor:{valType:"color",dflt:n.defaultLine},showbackground:{valType:"boolean",dflt:!1},backgroundcolor:{valType:"color",dflt:"rgba(204, 204, 204, 0.5)"},showaxeslabels:{valType:"boolean",dflt:!0},color:i.color,categoryorder:i.categoryorder,categoryarray:i.categoryarray,title:{text:i.title.text,font:i.title.font},type:a({},i.type,{values:["-","linear","log","date","category"]}),autotypenumbers:i.autotypenumbers,autorange:i.autorange,autorangeoptions:{minallowed:i.autorangeoptions.minallowed,maxallowed:i.autorangeoptions.maxallowed,clipmin:i.autorangeoptions.clipmin,clipmax:i.autorangeoptions.clipmax,include:i.autorangeoptions.include,editType:"plot"},rangemode:i.rangemode,minallowed:i.minallowed,maxallowed:i.maxallowed,range:a({},i.range,{items:[{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}},{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}}],anim:!1}),tickmode:i.minor.tickmode,nticks:i.nticks,tick0:i.tick0,dtick:i.dtick,tickvals:i.tickvals,ticktext:i.ticktext,ticks:i.ticks,mirror:i.mirror,ticklen:i.ticklen,tickwidth:i.tickwidth,tickcolor:i.tickcolor,showticklabels:i.showticklabels,labelalias:i.labelalias,tickfont:i.tickfont,tickangle:i.tickangle,tickprefix:i.tickprefix,showtickprefix:i.showtickprefix,ticksuffix:i.ticksuffix,showticksuffix:i.showticksuffix,showexponent:i.showexponent,exponentformat:i.exponentformat,minexponent:i.minexponent,separatethousands:i.separatethousands,tickformat:i.tickformat,tickformatstops:i.tickformatstops,hoverformat:i.hoverformat,showline:i.showline,linecolor:i.linecolor,linewidth:i.linewidth,showgrid:i.showgrid,gridcolor:a({},i.gridcolor,{dflt:"rgb(204, 204, 204)"}),gridwidth:i.gridwidth,zeroline:i.zeroline,zerolinecolor:i.zerolinecolor,zerolinewidth:i.zerolinewidth,_deprecated:{title:i._deprecated.title,titlefont:i._deprecated.titlefont}},"plot","from-root")},3277:function(t,e,r){"use strict";var n=r(84267).mix,i=r(71828),a=r(44467),o=r(77894),s=r(951),l=r(71453),u=["xaxis","yaxis","zaxis"];t.exports=function(t,e,r){var c,f;function h(t,e){return i.coerce(c,f,o,t,e)}for(var p=0;p<u.length;p++){var d=u[p];c=t[d]||{},(f=a.newContainer(e,d))._id=d[0]+r.scene,f._name=d,s(c,f,h,r),l(c,f,h,{font:r.font,letter:d[0],data:r.data,showGrid:!0,noTickson:!0,noTicklabelmode:!0,noTicklabelstep:!0,noTicklabelposition:!0,noTicklabeloverflow:!0,noInsiderange:!0,bgColor:r.bgColor,calendar:r.calendar},r.fullLayout),h("gridcolor",n(f.color,r.bgColor,72.72727272727273).toRgbString()),h("title.text",d[0]),f.setScale=i.noop,h("showspikes")&&(h("spikesides"),h("spikethickness"),h("spikecolor",f.color)),h("showaxeslabels"),h("showbackground")&&h("backgroundcolor")}}},30422:function(t,e,r){"use strict";var n=r(78614),i=r(71828),a=["xaxis","yaxis","zaxis"];function o(){this.bounds=[[-10,-10,-10],[10,10,10]],this.ticks=[[],[],[]],this.tickEnable=[!0,!0,!0],this.tickFont=["sans-serif","sans-serif","sans-serif"],this.tickSize=[12,12,12],this.tickAngle=[0,0,0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[18,18,18],this.labels=["x","y","z"],this.labelEnable=[!0,!0,!0],this.labelFont=["Open Sans","Open Sans","Open Sans"],this.labelSize=[20,20,20],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[30,30,30],this.lineEnable=[!0,!0,!0],this.lineMirror=[!1,!1,!1],this.lineWidth=[1,1,1],this.lineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable=[!0,!0,!0],this.lineTickMirror=[!1,!1,!1],this.lineTickLength=[10,10,10],this.lineTickWidth=[1,1,1],this.lineTickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable=[!0,!0,!0],this.gridWidth=[1,1,1],this.gridColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable=[!0,!0,!0],this.zeroLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth=[2,2,2],this.backgroundEnable=[!0,!0,!0],this.backgroundColor=[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._defaultTickPad=this.tickPad.slice(),this._defaultLabelPad=this.labelPad.slice(),this._defaultLineTickLength=this.lineTickLength.slice()}o.prototype.merge=function(t,e){for(var r=this,o=0;o<3;++o){var s=e[a[o]];s.visible?(r.labels[o]=t._meta?i.templateString(s.title.text,t._meta):s.title.text,"font"in s.title&&(s.title.font.color&&(r.labelColor[o]=n(s.title.font.color)),s.title.font.family&&(r.labelFont[o]=s.title.font.family),s.title.font.size&&(r.labelSize[o]=s.title.font.size)),"showline"in s&&(r.lineEnable[o]=s.showline),"linecolor"in s&&(r.lineColor[o]=n(s.linecolor)),"linewidth"in s&&(r.lineWidth[o]=s.linewidth),"showgrid"in s&&(r.gridEnable[o]=s.showgrid),"gridcolor"in s&&(r.gridColor[o]=n(s.gridcolor)),"gridwidth"in s&&(r.gridWidth[o]=s.gridwidth),"log"===s.type?r.zeroEnable[o]=!1:"zeroline"in s&&(r.zeroEnable[o]=s.zeroline),"zerolinecolor"in s&&(r.zeroLineColor[o]=n(s.zerolinecolor)),"zerolinewidth"in s&&(r.zeroLineWidth[o]=s.zerolinewidth),"ticks"in s&&s.ticks?r.lineTickEnable[o]=!0:r.lineTickEnable[o]=!1,"ticklen"in s&&(r.lineTickLength[o]=r._defaultLineTickLength[o]=s.ticklen),"tickcolor"in s&&(r.lineTickColor[o]=n(s.tickcolor)),"tickwidth"in s&&(r.lineTickWidth[o]=s.tickwidth),"tickangle"in s&&(r.tickAngle[o]="auto"===s.tickangle?-3600:Math.PI*-s.tickangle/180),"showticklabels"in s&&(r.tickEnable[o]=s.showticklabels),"tickfont"in s&&(s.tickfont.color&&(r.tickColor[o]=n(s.tickfont.color)),s.tickfont.family&&(r.tickFont[o]=s.tickfont.family),s.tickfont.size&&(r.tickSize[o]=s.tickfont.size)),"mirror"in s?-1!==["ticks","all","allticks"].indexOf(s.mirror)?(r.lineTickMirror[o]=!0,r.lineMirror[o]=!0):!0===s.mirror?(r.lineTickMirror[o]=!1,r.lineMirror[o]=!0):(r.lineTickMirror[o]=!1,r.lineMirror[o]=!1):r.lineMirror[o]=!1,"showbackground"in s&&!1!==s.showbackground?(r.backgroundEnable[o]=!0,r.backgroundColor[o]=n(s.backgroundcolor)):r.backgroundEnable[o]=!1):(r.tickEnable[o]=!1,r.labelEnable[o]=!1,r.lineEnable[o]=!1,r.lineTickEnable[o]=!1,r.gridEnable[o]=!1,r.zeroEnable[o]=!1,r.backgroundEnable[o]=!1)}},t.exports=function(t,e){var r=new o;return r.merge(t,e),r}},24682:function(t,e,r){"use strict";var n=r(71828),i=r(7901),a=r(73972),o=r(49119),s=r(3277),l=r(65500),u=r(27659).NG,c="gl3d";function f(t,e,r,n){for(var o=r("bgcolor"),l=i.combine(o,n.paper_bgcolor),f=["up","center","eye"],h=0;h<f.length;h++)r("camera."+f[h]+".x"),r("camera."+f[h]+".y"),r("camera."+f[h]+".z");r("camera.projection.type");var p=!!r("aspectratio.x")&&!!r("aspectratio.y")&&!!r("aspectratio.z"),d=r("aspectmode",p?"manual":"auto");p||(t.aspectratio=e.aspectratio={x:1,y:1,z:1},"manual"===d&&(e.aspectmode="auto"),t.aspectmode=e.aspectmode);var v=u(n.fullData,c,n.id);s(t,e,{font:n.font,scene:n.id,data:v,bgColor:l,calendar:n.calendar,autotypenumbersDflt:n.autotypenumbersDflt,fullLayout:n.fullLayout}),a.getComponentMethod("annotations3d","handleDefaults")(t,e,n);var g=n.getDfltFromLayout("dragmode");if(!1!==g&&!g)if(g="orbit",t.camera&&t.camera.up){var y=t.camera.up.x,m=t.camera.up.y,x=t.camera.up.z;0!==x&&(y&&m&&x?x/Math.sqrt(y*y+m*m+x*x)>.999&&(g="turntable"):g="turntable")}else g="turntable";r("dragmode",g),r("hovermode",n.getDfltFromLayout("hovermode"))}t.exports=function(t,e,r){var i=e._basePlotModules.length>1;o(t,e,r,{type:c,attributes:l,handleDefaults:f,fullLayout:e,font:e.font,fullData:r,getDfltFromLayout:function(e){if(!i)return n.validate(t[e],l[e])?t[e]:void 0},autotypenumbersDflt:e.autotypenumbers,paper_bgcolor:e.paper_bgcolor,calendar:e.calendar})}},65500:function(t,e,r){"use strict";var n=r(77894),i=r(27670).Y,a=r(1426).extendFlat,o=r(71828).counterRegex;function s(t,e,r){return{x:{valType:"number",dflt:t,editType:"camera"},y:{valType:"number",dflt:e,editType:"camera"},z:{valType:"number",dflt:r,editType:"camera"},editType:"camera"}}t.exports={_arrayAttrRegexps:[o("scene",".annotations",!0)],bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"plot"},camera:{up:a(s(0,0,1),{}),center:a(s(0,0,0),{}),eye:a(s(1.25,1.25,1.25),{}),projection:{type:{valType:"enumerated",values:["perspective","orthographic"],dflt:"perspective",editType:"calc"},editType:"calc"},editType:"camera"},domain:i({name:"scene",editType:"plot"}),aspectmode:{valType:"enumerated",values:["auto","cube","data","manual"],dflt:"auto",editType:"plot",impliedEdits:{"aspectratio.x":void 0,"aspectratio.y":void 0,"aspectratio.z":void 0}},aspectratio:{x:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},y:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},z:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},editType:"plot",impliedEdits:{aspectmode:"manual"}},xaxis:n,yaxis:n,zaxis:n,dragmode:{valType:"enumerated",values:["orbit","turntable","zoom","pan",!1],editType:"plot"},hovermode:{valType:"enumerated",values:["closest",!1],dflt:"closest",editType:"modebar"},uirevision:{valType:"any",editType:"none"},editType:"plot",_deprecated:{cameraposition:{valType:"info_array",editType:"camera"}}}},13133:function(t,e,r){"use strict";var n=r(78614),i=["xaxis","yaxis","zaxis"];function a(){this.enabled=[!0,!0,!0],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.drawSides=[!0,!0,!0],this.lineWidth=[1,1,1]}a.prototype.merge=function(t){for(var e=0;e<3;++e){var r=t[i[e]];r.visible?(this.enabled[e]=r.showspikes,this.colors[e]=n(r.spikecolor),this.drawSides[e]=r.spikesides,this.lineWidth[e]=r.spikethickness):(this.enabled[e]=!1,this.drawSides[e]=!1)}},t.exports=function(t){var e=new a;return e.merge(t),e}},96085:function(t,e,r){"use strict";t.exports=function(t){for(var e=t.axesOptions,r=t.glplot.axesPixels,s=t.fullSceneLayout,l=[[],[],[]],u=0;u<3;++u){var c=s[a[u]];if(c._length=(r[u].hi-r[u].lo)*r[u].pixelsPerDataUnit/t.dataScale[u],Math.abs(c._length)===1/0||isNaN(c._length))l[u]=[];else{c._input_range=c.range.slice(),c.range[0]=r[u].lo/t.dataScale[u],c.range[1]=r[u].hi/t.dataScale[u],c._m=1/(t.dataScale[u]*r[u].pixelsPerDataUnit),c.range[0]===c.range[1]&&(c.range[0]-=1,c.range[1]+=1);var f=c.tickmode;if("auto"===c.tickmode){c.tickmode="linear";var h=c.nticks||i.constrain(c._length/40,4,9);n.autoTicks(c,Math.abs(c.range[1]-c.range[0])/h)}for(var p=n.calcTicks(c,{msUTC:!0}),d=0;d<p.length;++d)p[d].x=p[d].x*t.dataScale[u],"date"===c.type&&(p[d].text=p[d].text.replace(/\<br\>/g," "));l[u]=p,c.tickmode=f}}for(e.ticks=l,u=0;u<3;++u)for(o[u]=.5*(t.glplot.bounds[0][u]+t.glplot.bounds[1][u]),d=0;d<2;++d)e.bounds[d][u]=t.glplot.bounds[d][u];t.contourLevels=function(t){for(var e=new Array(3),r=0;r<3;++r){for(var n=t[r],i=new Array(n.length),a=0;a<n.length;++a)i[a]=n[a].x;e[r]=i}return e}(l)};var n=r(89298),i=r(71828),a=["xaxis","yaxis","zaxis"],o=[0,0,0]},63538:function(t){"use strict";function e(t,e){var r,n,i=[0,0,0,0];for(r=0;r<4;++r)for(n=0;n<4;++n)i[n]+=t[4*r+n]*e[r];return i}t.exports=function(t,r){return e(t.projection,e(t.view,e(t.model,[r[0],r[1],r[2],1])))}},33539:function(t,e,r){"use strict";var n,i,a=r(9330).gl_plot3d,o=a.createCamera,s=a.createScene,l=r(40372),u=r(38520),c=r(73972),f=r(71828),h=f.preserveDrawingBuffer(),p=r(89298),d=r(30211),v=r(78614),g=r(58617),y=r(63538),m=r(30422),x=r(13133),b=r(96085),_=r(71739).applyAutorangeOptions,w=!1;function T(t,e){var r=document.createElement("div"),n=t.container;this.graphDiv=t.graphDiv;var i=document.createElementNS("http://www.w3.org/2000/svg","svg");i.style.position="absolute",i.style.top=i.style.left="0px",i.style.width=i.style.height="100%",i.style["z-index"]=20,i.style["pointer-events"]="none",r.appendChild(i),this.svgContainer=i,r.id=t.id,r.style.position="absolute",r.style.top=r.style.left="0px",r.style.width=r.style.height="100%",n.appendChild(r),this.fullLayout=e,this.id=t.id||"scene",this.fullSceneLayout=e[this.id],this.plotArgs=[[],{},{}],this.axesOptions=m(e,e[this.id]),this.spikeOptions=x(e[this.id]),this.container=r,this.staticMode=!!t.staticPlot,this.pixelRatio=this.pixelRatio||t.plotGlPixelRatio||2,this.dataScale=[1,1,1],this.contourLevels=[[],[],[]],this.convertAnnotations=c.getComponentMethod("annotations3d","convert"),this.drawAnnotations=c.getComponentMethod("annotations3d","draw"),this.initializeGLPlot()}var k=T.prototype;k.prepareOptions=function(){var t=this,e={canvas:t.canvas,gl:t.gl,glOptions:{preserveDrawingBuffer:h,premultipliedAlpha:!0,antialias:!0},container:t.container,axes:t.axesOptions,spikes:t.spikeOptions,pickRadius:10,snapToData:!0,autoScale:!0,autoBounds:!1,cameraObject:t.camera,pixelRatio:t.pixelRatio};if(t.staticMode){if(!(i||(n=document.createElement("canvas"),i=l({canvas:n,preserveDrawingBuffer:!0,premultipliedAlpha:!0,antialias:!0}))))throw new Error("error creating static canvas/context for image server");e.gl=i,e.canvas=n}return e};var A=!0;k.tryCreatePlot=function(){var t=this,e=t.prepareOptions(),r=!0;try{t.glplot=s(e)}catch(n){if(t.staticMode||!A||h)r=!1;else{f.warn(["webgl setup failed possibly due to","false preserveDrawingBuffer config.","The mobile/tablet device may not be detected by is-mobile module.","Enabling preserveDrawingBuffer in second attempt to create webgl scene..."].join(" "));try{h=e.glOptions.preserveDrawingBuffer=!0,t.glplot=s(e)}catch(t){h=e.glOptions.preserveDrawingBuffer=!1,r=!1}}}return A=!1,r},k.initializeGLCamera=function(){var t=this,e=t.fullSceneLayout.camera,r="orthographic"===e.projection.type;t.camera=o(t.container,{center:[e.center.x,e.center.y,e.center.z],eye:[e.eye.x,e.eye.y,e.eye.z],up:[e.up.x,e.up.y,e.up.z],_ortho:r,zoomMin:.01,zoomMax:100,mode:"orbit"})},k.initializeGLPlot=function(){var t=this;if(t.initializeGLCamera(),!t.tryCreatePlot())return g(t);t.traces={},t.make4thDimension();var e=t.graphDiv,r=e.layout,n=function(){var e={};return t.isCameraChanged(r)&&(e[t.id+".camera"]=t.getCamera()),t.isAspectChanged(r)&&(e[t.id+".aspectratio"]=t.glplot.getAspectratio(),"manual"!==r[t.id].aspectmode&&(t.fullSceneLayout.aspectmode=r[t.id].aspectmode=e[t.id+".aspectmode"]="manual")),e},i=function(t){if(!1!==t.fullSceneLayout.dragmode){var e=n();t.saveLayout(r),t.graphDiv.emit("plotly_relayout",e)}};return t.glplot.canvas&&(t.glplot.canvas.addEventListener("mouseup",(function(){i(t)})),t.glplot.canvas.addEventListener("touchstart",(function(){w=!0})),t.glplot.canvas.addEventListener("wheel",(function(r){if(e._context._scrollZoom.gl3d){if(t.camera._ortho){var n=r.deltaX>r.deltaY?1.1:1/1.1,a=t.glplot.getAspectratio();t.glplot.setAspectratio({x:n*a.x,y:n*a.y,z:n*a.z})}i(t)}}),!!u&&{passive:!1}),t.glplot.canvas.addEventListener("mousemove",(function(){if(!1!==t.fullSceneLayout.dragmode&&0!==t.camera.mouseListener.buttons){var e=n();t.graphDiv.emit("plotly_relayouting",e)}})),t.staticMode||t.glplot.canvas.addEventListener("webglcontextlost",(function(r){e&&e.emit&&e.emit("plotly_webglcontextlost",{event:r,layer:t.id})}),!1)),t.glplot.oncontextloss=function(){t.recoverContext()},t.glplot.onrender=function(){t.render()},!0},k.render=function(){var t,e=this,r=e.graphDiv,n=e.svgContainer,i=e.container.getBoundingClientRect();r._fullLayout._calcInverseTransform(r);var a=r._fullLayout._invScaleX,o=r._fullLayout._invScaleY,s=i.width*a,l=i.height*o;n.setAttributeNS(null,"viewBox","0 0 "+s+" "+l),n.setAttributeNS(null,"width",s),n.setAttributeNS(null,"height",l),b(e),e.glplot.axes.update(e.axesOptions);for(var u=Object.keys(e.traces),c=null,h=e.glplot.selection,v=0;v<u.length;++v)"skip"!==(t=e.traces[u[v]]).data.hoverinfo&&t.handlePick(h)&&(c=t),t.setContourLevels&&t.setContourLevels();function g(t,r,n){var i=e.fullSceneLayout[t+"axis"];return"log"!==i.type&&(r=i.d2l(r)),p.hoverLabelText(i,r,n)}if(null!==c){var m=y(e.glplot.cameraParams,h.dataCoordinate);t=c.data;var x,_=r._fullData[t.index],T=h.index,k={xLabel:g("x",h.traceCoordinate[0],t.xhoverformat),yLabel:g("y",h.traceCoordinate[1],t.yhoverformat),zLabel:g("z",h.traceCoordinate[2],t.zhoverformat)},A=d.castHoverinfo(_,e.fullLayout,T),M=(A||"").split("+"),S=A&&"all"===A;_.hovertemplate||S||(-1===M.indexOf("x")&&(k.xLabel=void 0),-1===M.indexOf("y")&&(k.yLabel=void 0),-1===M.indexOf("z")&&(k.zLabel=void 0),-1===M.indexOf("text")&&(h.textLabel=void 0),-1===M.indexOf("name")&&(c.name=void 0));var E=[];"cone"===t.type||"streamtube"===t.type?(k.uLabel=g("x",h.traceCoordinate[3],t.uhoverformat),(S||-1!==M.indexOf("u"))&&E.push("u: "+k.uLabel),k.vLabel=g("y",h.traceCoordinate[4],t.vhoverformat),(S||-1!==M.indexOf("v"))&&E.push("v: "+k.vLabel),k.wLabel=g("z",h.traceCoordinate[5],t.whoverformat),(S||-1!==M.indexOf("w"))&&E.push("w: "+k.wLabel),k.normLabel=h.traceCoordinate[6].toPrecision(3),(S||-1!==M.indexOf("norm"))&&E.push("norm: "+k.normLabel),"streamtube"===t.type&&(k.divergenceLabel=h.traceCoordinate[7].toPrecision(3),(S||-1!==M.indexOf("divergence"))&&E.push("divergence: "+k.divergenceLabel)),h.textLabel&&E.push(h.textLabel),x=E.join("<br>")):"isosurface"===t.type||"volume"===t.type?(k.valueLabel=p.hoverLabelText(e._mockAxis,e._mockAxis.d2l(h.traceCoordinate[3]),t.valuehoverformat),E.push("value: "+k.valueLabel),h.textLabel&&E.push(h.textLabel),x=E.join("<br>")):x=h.textLabel;var L={x:h.traceCoordinate[0],y:h.traceCoordinate[1],z:h.traceCoordinate[2],data:_._input,fullData:_,curveNumber:_.index,pointNumber:T};d.appendArrayPointValue(L,_,T),t._module.eventData&&(L=_._module.eventData(L,h,_,{},T));var C={points:[L]};if(e.fullSceneLayout.hovermode){var P=[];d.loneHover({trace:_,x:(.5+.5*m[0]/m[3])*s,y:(.5-.5*m[1]/m[3])*l,xLabel:k.xLabel,yLabel:k.yLabel,zLabel:k.zLabel,text:x,name:c.name,color:d.castHoverOption(_,T,"bgcolor")||c.color,borderColor:d.castHoverOption(_,T,"bordercolor"),fontFamily:d.castHoverOption(_,T,"font.family"),fontSize:d.castHoverOption(_,T,"font.size"),fontColor:d.castHoverOption(_,T,"font.color"),nameLength:d.castHoverOption(_,T,"namelength"),textAlign:d.castHoverOption(_,T,"align"),hovertemplate:f.castOption(_,T,"hovertemplate"),hovertemplateLabels:f.extendFlat({},L,k),eventData:[L]},{container:n,gd:r,inOut_bbox:P}),L.bbox=P[0]}h.distance<5&&(h.buttons||w)?r.emit("plotly_click",C):r.emit("plotly_hover",C),this.oldEventData=C}else d.loneUnhover(n),this.oldEventData&&r.emit("plotly_unhover",this.oldEventData),this.oldEventData=void 0;e.drawAnnotations(e)},k.recoverContext=function(){var t=this;t.glplot.dispose();var e=function(){t.glplot.gl.isContextLost()?requestAnimationFrame(e):t.initializeGLPlot()?t.plot.apply(t,t.plotArgs):f.error("Catastrophic and unrecoverable WebGL error. Context lost.")};requestAnimationFrame(e)};var M=["xaxis","yaxis","zaxis"];function S(t,e,r){for(var n=t.fullSceneLayout,i=0;i<3;i++){var a=M[i],o=a.charAt(0),s=n[a],l=e[o],u=e[o+"calendar"],c=e["_"+o+"length"];if(f.isArrayOrTypedArray(l))for(var h,p=0;p<(c||l.length);p++)if(f.isArrayOrTypedArray(l[p]))for(var d=0;d<l[p].length;++d)h=s.d2l(l[p][d],0,u),!isNaN(h)&&isFinite(h)&&(r[0][i]=Math.min(r[0][i],h),r[1][i]=Math.max(r[1][i],h));else h=s.d2l(l[p],0,u),!isNaN(h)&&isFinite(h)&&(r[0][i]=Math.min(r[0][i],h),r[1][i]=Math.max(r[1][i],h));else r[0][i]=Math.min(r[0][i],0),r[1][i]=Math.max(r[1][i],c-1)}}k.plot=function(t,e,r){var n=this;if(n.plotArgs=[t,e,r],!n.glplot.contextLost){var i,a,o,s,l,u,c=e[n.id],f=r[n.id];n.fullLayout=e,n.fullSceneLayout=c,n.axesOptions.merge(e,c),n.spikeOptions.merge(c),n.setViewport(c),n.updateFx(c.dragmode,c.hovermode),n.camera.enableWheel=n.graphDiv._context._scrollZoom.gl3d,n.glplot.setClearColor(v(c.bgcolor)),n.setConvert(l),t?Array.isArray(t)||(t=[t]):t=[];var h=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(o=0;o<t.length;++o)!0===(i=t[o]).visible&&0!==i._length&&S(this,i,h);!function(t,e){for(var r=t.fullSceneLayout,n=r.annotations||[],i=0;i<3;i++)for(var a=M[i],o=a.charAt(0),s=r[a],l=0;l<n.length;l++){var u=n[l];if(u.visible){var c=s.r2l(u[o]);!isNaN(c)&&isFinite(c)&&(e[0][i]=Math.min(e[0][i],c),e[1][i]=Math.max(e[1][i],c))}}}(this,h);var p=[1,1,1];for(s=0;s<3;++s)h[1][s]===h[0][s]?p[s]=1:p[s]=1/(h[1][s]-h[0][s]);for(n.dataScale=p,n.convertAnnotations(this),o=0;o<t.length;++o)!0===(i=t[o]).visible&&0!==i._length&&((a=n.traces[i.uid])?a.data.type===i.type?a.update(i):(a.dispose(),a=i._module.plot(this,i),n.traces[i.uid]=a):(a=i._module.plot(this,i),n.traces[i.uid]=a),a.name=i.name);var d=Object.keys(n.traces);t:for(o=0;o<d.length;++o){for(s=0;s<t.length;++s)if(t[s].uid===d[o]&&!0===t[s].visible&&0!==t[s]._length)continue t;(a=n.traces[d[o]]).dispose(),delete n.traces[d[o]]}n.glplot.objects.sort((function(t,e){return t._trace.data.index-e._trace.data.index}));var g,y=[[0,0,0],[0,0,0]],m=[],x={};for(o=0;o<3;++o){var b;if((u=(l=c[M[o]]).type)in x?(x[u].acc*=p[o],x[u].count+=1):x[u]={acc:p[o],count:1},l.autorange){y[0][o]=1/0,y[1][o]=-1/0;var w=n.glplot.objects,T=n.fullSceneLayout.annotations||[],k=l._name.charAt(0);for(s=0;s<w.length;s++){var A=w[s],E=A.bounds,L=A._trace.data._pad||0;"ErrorBars"===A.constructor.name&&l._lowerLogErrorBound?y[0][o]=Math.min(y[0][o],l._lowerLogErrorBound):y[0][o]=Math.min(y[0][o],E[0][o]/p[o]-L),y[1][o]=Math.max(y[1][o],E[1][o]/p[o]+L)}for(s=0;s<T.length;s++){var C=T[s];if(C.visible){var P=l.r2l(C[k]);y[0][o]=Math.min(y[0][o],P),y[1][o]=Math.max(y[1][o],P)}}if("rangemode"in l&&"tozero"===l.rangemode&&(y[0][o]=Math.min(y[0][o],0),y[1][o]=Math.max(y[1][o],0)),y[0][o]>y[1][o])y[0][o]=-1,y[1][o]=1;else{var O=y[1][o]-y[0][o];y[0][o]-=O/32,y[1][o]+=O/32}if(b=[y[0][o],y[1][o]],b=_(b,l),y[0][o]=b[0],y[1][o]=b[1],l.isReversed()){var I=y[0][o];y[0][o]=y[1][o],y[1][o]=I}}else b=l.range,y[0][o]=l.r2l(b[0]),y[1][o]=l.r2l(b[1]);y[0][o]===y[1][o]&&(y[0][o]-=1,y[1][o]+=1),m[o]=y[1][o]-y[0][o],l.range=[y[0][o],y[1][o]],l.limitRange(),n.glplot.setBounds(o,{min:l.range[0]*p[o],max:l.range[1]*p[o]})}var D=c.aspectmode;if("cube"===D)g=[1,1,1];else if("manual"===D){var z=c.aspectratio;g=[z.x,z.y,z.z]}else{if("auto"!==D&&"data"!==D)throw new Error("scene.js aspectRatio was not one of the enumerated types");var R=[1,1,1];for(o=0;o<3;++o){var F=x[u=(l=c[M[o]]).type];R[o]=Math.pow(F.acc,1/F.count)/p[o]}g="data"===D||Math.max.apply(null,R)/Math.min.apply(null,R)<=4?R:[1,1,1]}c.aspectratio.x=f.aspectratio.x=g[0],c.aspectratio.y=f.aspectratio.y=g[1],c.aspectratio.z=f.aspectratio.z=g[2],n.glplot.setAspectratio(c.aspectratio),n.viewInitial.aspectratio||(n.viewInitial.aspectratio={x:c.aspectratio.x,y:c.aspectratio.y,z:c.aspectratio.z}),n.viewInitial.aspectmode||(n.viewInitial.aspectmode=c.aspectmode);var B=c.domain||null,N=e._size||null;if(B&&N){var j=n.container.style;j.position="absolute",j.left=N.l+B.x[0]*N.w+"px",j.top=N.t+(1-B.y[1])*N.h+"px",j.width=N.w*(B.x[1]-B.x[0])+"px",j.height=N.h*(B.y[1]-B.y[0])+"px"}n.glplot.redraw()}},k.destroy=function(){var t=this;t.glplot&&(t.camera.mouseListener.enabled=!1,t.container.removeEventListener("wheel",t.camera.wheelListener),t.camera=null,t.glplot.dispose(),t.container.parentNode.removeChild(t.container),t.glplot=null)},k.getCamera=function(){var t,e=this;return e.camera.view.recalcMatrix(e.camera.view.lastT()),{up:{x:(t=e.camera).up[0],y:t.up[1],z:t.up[2]},center:{x:t.center[0],y:t.center[1],z:t.center[2]},eye:{x:t.eye[0],y:t.eye[1],z:t.eye[2]},projection:{type:!0===t._ortho?"orthographic":"perspective"}}},k.setViewport=function(t){var e,r=this,n=t.camera;r.camera.lookAt.apply(this,[[(e=n).eye.x,e.eye.y,e.eye.z],[e.center.x,e.center.y,e.center.z],[e.up.x,e.up.y,e.up.z]]),r.glplot.setAspectratio(t.aspectratio),"orthographic"===n.projection.type!==r.camera._ortho&&(r.glplot.redraw(),r.glplot.clearRGBA(),r.glplot.dispose(),r.initializeGLPlot())},k.isCameraChanged=function(t){var e=this.getCamera(),r=f.nestedProperty(t,this.id+".camera").get();function n(t,e,r,n){var i=["up","center","eye"],a=["x","y","z"];return e[i[r]]&&t[i[r]][a[n]]===e[i[r]][a[n]]}var i=!1;if(void 0===r)i=!0;else{for(var a=0;a<3;a++)for(var o=0;o<3;o++)if(!n(e,r,a,o)){i=!0;break}(!r.projection||e.projection&&e.projection.type!==r.projection.type)&&(i=!0)}return i},k.isAspectChanged=function(t){var e=this.glplot.getAspectratio(),r=f.nestedProperty(t,this.id+".aspectratio").get();return void 0===r||r.x!==e.x||r.y!==e.y||r.z!==e.z},k.saveLayout=function(t){var e,r,n,i,a,o,s=this,l=s.fullLayout,u=s.isCameraChanged(t),h=s.isAspectChanged(t),p=u||h;if(p){var d={};u&&(e=s.getCamera(),n=(r=f.nestedProperty(t,s.id+".camera")).get(),d[s.id+".camera"]=n),h&&(i=s.glplot.getAspectratio(),o=(a=f.nestedProperty(t,s.id+".aspectratio")).get(),d[s.id+".aspectratio"]=o),c.call("_storeDirectGUIEdit",t,l._preGUI,d),u&&(r.set(e),f.nestedProperty(l,s.id+".camera").set(e)),h&&(a.set(i),f.nestedProperty(l,s.id+".aspectratio").set(i),s.glplot.redraw())}return p},k.updateFx=function(t,e){var r=this,n=r.camera;if(n)if("orbit"===t)n.mode="orbit",n.keyBindingMode="rotate";else if("turntable"===t){n.up=[0,0,1],n.mode="turntable",n.keyBindingMode="rotate";var i=r.graphDiv,a=i._fullLayout,o=r.fullSceneLayout.camera,s=o.up.x,l=o.up.y,u=o.up.z;if(u/Math.sqrt(s*s+l*l+u*u)<.999){var h=r.id+".camera.up",p={x:0,y:0,z:1},d={};d[h]=p;var v=i.layout;c.call("_storeDirectGUIEdit",v,a._preGUI,d),o.up=p,f.nestedProperty(v,h).set(p)}}else n.keyBindingMode=t;r.fullSceneLayout.hovermode=e},k.toImage=function(t){var e=this;t||(t="png"),e.staticMode&&e.container.appendChild(n),e.glplot.redraw();var r=e.glplot.gl,i=r.drawingBufferWidth,a=r.drawingBufferHeight;r.bindFramebuffer(r.FRAMEBUFFER,null);var o=new Uint8Array(i*a*4);r.readPixels(0,0,i,a,r.RGBA,r.UNSIGNED_BYTE,o),function(t,e,r){for(var n=0,i=r-1;n<i;++n,--i)for(var a=0;a<e;++a)for(var o=0;o<4;++o){var s=4*(e*n+a)+o,l=4*(e*i+a)+o,u=t[s];t[s]=t[l],t[l]=u}}(o,i,a),function(t,e,r){for(var n=0;n<r;++n)for(var i=0;i<e;++i){var a=4*(e*n+i),o=t[a+3];if(o>0)for(var s=255/o,l=0;l<3;++l)t[a+l]=Math.min(s*t[a+l],255)}}(o,i,a);var s=document.createElement("canvas");s.width=i,s.height=a;var l,u=s.getContext("2d",{willReadFrequently:!0}),c=u.createImageData(i,a);switch(c.data.set(o),u.putImageData(c,0,0),t){case"jpeg":l=s.toDataURL("image/jpeg");break;case"webp":l=s.toDataURL("image/webp");break;default:l=s.toDataURL("image/png")}return e.staticMode&&e.container.removeChild(n),l},k.setConvert=function(){for(var t=0;t<3;t++){var e=this.fullSceneLayout[M[t]];p.setConvert(e,this.fullLayout),e.setScale=f.noop}},k.make4thDimension=function(){var t=this,e=t.graphDiv._fullLayout;t._mockAxis={type:"linear",showexponent:"all",exponentformat:"B"},p.setConvert(t._mockAxis,e)},t.exports=T},90060:function(t){"use strict";t.exports=function(t,e,r,n){n=n||t.length;for(var i=new Array(n),a=0;a<n;a++)i[a]=[t[a],e[a],r[a]];return i}},10820:function(t,e,r){"use strict";var n=r(41940),i=r(85594),a=r(22399),o=r(29241),s=r(53777),l=r(35025),u=r(1426).extendFlat,c=n({editType:"calc"});c.family.dflt='"Open Sans", verdana, arial, sans-serif',c.size.dflt=12,c.color.dflt=a.defaultLine,t.exports={font:c,title:{text:{valType:"string",editType:"layoutstyle"},font:n({editType:"layoutstyle"}),xref:{valType:"enumerated",dflt:"container",values:["container","paper"],editType:"layoutstyle"},yref:{valType:"enumerated",dflt:"container",values:["container","paper"],editType:"layoutstyle"},x:{valType:"number",min:0,max:1,dflt:.5,editType:"layoutstyle"},y:{valType:"number",min:0,max:1,dflt:"auto",editType:"layoutstyle"},xanchor:{valType:"enumerated",dflt:"auto",values:["auto","left","center","right"],editType:"layoutstyle"},yanchor:{valType:"enumerated",dflt:"auto",values:["auto","top","middle","bottom"],editType:"layoutstyle"},pad:u(l({editType:"layoutstyle"}),{}),automargin:{valType:"boolean",dflt:!1,editType:"plot"},editType:"layoutstyle"},uniformtext:{mode:{valType:"enumerated",values:[!1,"hide","show"],dflt:!1,editType:"plot"},minsize:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"plot"},autosize:{valType:"boolean",dflt:!1,editType:"none"},width:{valType:"number",min:10,dflt:700,editType:"plot"},height:{valType:"number",min:10,dflt:450,editType:"plot"},minreducedwidth:{valType:"number",min:2,dflt:64,editType:"plot"},minreducedheight:{valType:"number",min:2,dflt:64,editType:"plot"},margin:{l:{valType:"number",min:0,dflt:80,editType:"plot"},r:{valType:"number",min:0,dflt:80,editType:"plot"},t:{valType:"number",min:0,dflt:100,editType:"plot"},b:{valType:"number",min:0,dflt:80,editType:"plot"},pad:{valType:"number",min:0,dflt:0,editType:"plot"},autoexpand:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},computed:{valType:"any",editType:"none"},paper_bgcolor:{valType:"color",dflt:a.background,editType:"plot"},plot_bgcolor:{valType:"color",dflt:a.background,editType:"layoutstyle"},autotypenumbers:{valType:"enumerated",values:["convert types","strict"],dflt:"convert types",editType:"calc"},separators:{valType:"string",editType:"plot"},hidesources:{valType:"boolean",dflt:!1,editType:"plot"},showlegend:{valType:"boolean",editType:"legend"},colorway:{valType:"colorlist",dflt:a.defaults,editType:"calc"},datarevision:{valType:"any",editType:"calc"},uirevision:{valType:"any",editType:"none"},editrevision:{valType:"any",editType:"none"},selectionrevision:{valType:"any",editType:"none"},template:{valType:"any",editType:"calc"},newshape:o.newshape,activeshape:o.activeshape,newselection:s.newselection,activeselection:s.activeselection,meta:{valType:"any",arrayOk:!0,editType:"plot"},transition:u({},i.transition,{editType:"none"}),_deprecated:{title:{valType:"string",editType:"layoutstyle"},titlefont:n({editType:"layoutstyle"})}}},77734:function(t,e,r){"use strict";var n=r(78607),i="1.10.1",a='© <a target="_blank" href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',o=['© <a target="_blank" href="https://carto.com/">Carto</a>',a].join(" "),s=['Map tiles by <a target="_blank" href="https://stamen.com">Stamen Design</a>','under <a target="_blank" href="https://creativecommons.org/licenses/by/3.0">CC BY 3.0</a>',"|",'Data by <a target="_blank" href="https://openstreetmap.org">OpenStreetMap</a> contributors','under <a target="_blank" href="https://www.openstreetmap.org/copyright">ODbL</a>'].join(" "),l={"open-street-map":{id:"osm",version:8,sources:{"plotly-osm-tiles":{type:"raster",attribution:a,tiles:["https://a.tile.openstreetmap.org/{z}/{x}/{y}.png","https://b.tile.openstreetmap.org/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-osm-tiles",type:"raster",source:"plotly-osm-tiles",minzoom:0,maxzoom:22}],glyphs:"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf"},"white-bg":{id:"white-bg",version:8,sources:{},layers:[{id:"white-bg",type:"background",paint:{"background-color":"#FFFFFF"},minzoom:0,maxzoom:22}],glyphs:"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf"},"carto-positron":{id:"carto-positron",version:8,sources:{"plotly-carto-positron":{type:"raster",attribution:o,tiles:["https://cartodb-basemaps-c.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-carto-positron",type:"raster",source:"plotly-carto-positron",minzoom:0,maxzoom:22}],glyphs:"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf"},"carto-darkmatter":{id:"carto-darkmatter",version:8,sources:{"plotly-carto-darkmatter":{type:"raster",attribution:o,tiles:["https://cartodb-basemaps-c.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-carto-darkmatter",type:"raster",source:"plotly-carto-darkmatter",minzoom:0,maxzoom:22}],glyphs:"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf"},"stamen-terrain":{id:"stamen-terrain",version:8,sources:{"plotly-stamen-terrain":{type:"raster",attribution:s,tiles:["https://tiles.stadiamaps.com/tiles/stamen_terrain/{z}/{x}/{y}.png?api_key="],tileSize:256}},layers:[{id:"plotly-stamen-terrain",type:"raster",source:"plotly-stamen-terrain",minzoom:0,maxzoom:22}],glyphs:"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf"},"stamen-toner":{id:"stamen-toner",version:8,sources:{"plotly-stamen-toner":{type:"raster",attribution:s,tiles:["https://tiles.stadiamaps.com/tiles/stamen_toner/{z}/{x}/{y}.png?api_key="],tileSize:256}},layers:[{id:"plotly-stamen-toner",type:"raster",source:"plotly-stamen-toner",minzoom:0,maxzoom:22}],glyphs:"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf"},"stamen-watercolor":{id:"stamen-watercolor",version:8,sources:{"plotly-stamen-watercolor":{type:"raster",attribution:['Map tiles by <a target="_blank" href="https://stamen.com">Stamen Design</a>','under <a target="_blank" href="https://creativecommons.org/licenses/by/3.0">CC BY 3.0</a>',"|",'Data by <a target="_blank" href="https://openstreetmap.org">OpenStreetMap</a> contributors','under <a target="_blank" href="https://creativecommons.org/licenses/by-sa/3.0">CC BY SA</a>'].join(" "),tiles:["https://tiles.stadiamaps.com/tiles/stamen_watercolor/{z}/{x}/{y}.jpg?api_key="],tileSize:256}},layers:[{id:"plotly-stamen-watercolor",type:"raster",source:"plotly-stamen-watercolor",minzoom:0,maxzoom:22}],glyphs:"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf"}},u=n(l);t.exports={requiredVersion:i,styleUrlPrefix:"mapbox://styles/mapbox/",styleUrlSuffix:"v9",styleValuesMapbox:["basic","streets","outdoors","light","dark","satellite","satellite-streets"],styleValueDflt:"basic",stylesNonMapbox:l,styleValuesNonMapbox:u,traceLayerPrefix:"plotly-trace-layer-",layoutLayerPrefix:"plotly-layout-layer-",wrongVersionErrorMsg:["Your custom plotly.js bundle is not using the correct mapbox-gl version","Please install mapbox-gl@"+i+"."].join("\n"),noAccessTokenErrorMsg:["Missing Mapbox access token.","Mapbox trace type require a Mapbox access token to be registered.","For example:","  Plotly.newPlot(gd, data, layout, { mapboxAccessToken: 'my-access-token' });","More info here: https://www.mapbox.com/help/define-access-token/"].join("\n"),missingStyleErrorMsg:["No valid mapbox style found, please set `mapbox.style` to one of:",u.join(", "),"or register a Mapbox access token to use a Mapbox-served style."].join("\n"),multipleTokensErrorMsg:["Set multiple mapbox access token across different mapbox subplot,","using first token found as mapbox-gl does not allow multipleaccess tokens on the same page."].join("\n"),mapOnErrorMsg:"Mapbox error.",mapboxLogo:{path0:"m 10.5,1.24 c -5.11,0 -9.25,4.15 -9.25,9.25 0,5.1 4.15,9.25 9.25,9.25 5.1,0 9.25,-4.15 9.25,-9.25 0,-5.11 -4.14,-9.25 -9.25,-9.25 z m 4.39,11.53 c -1.93,1.93 -4.78,2.31 -6.7,2.31 -0.7,0 -1.41,-0.05 -2.1,-0.16 0,0 -1.02,-5.64 2.14,-8.81 0.83,-0.83 1.95,-1.28 3.13,-1.28 1.27,0 2.49,0.51 3.39,1.42 1.84,1.84 1.89,4.75 0.14,6.52 z",path1:"M 10.5,-0.01 C 4.7,-0.01 0,4.7 0,10.49 c 0,5.79 4.7,10.5 10.5,10.5 5.8,0 10.5,-4.7 10.5,-10.5 C 20.99,4.7 16.3,-0.01 10.5,-0.01 Z m 0,19.75 c -5.11,0 -9.25,-4.15 -9.25,-9.25 0,-5.1 4.14,-9.26 9.25,-9.26 5.11,0 9.25,4.15 9.25,9.25 0,5.13 -4.14,9.26 -9.25,9.26 z",path2:"M 14.74,6.25 C 12.9,4.41 9.98,4.35 8.23,6.1 5.07,9.27 6.09,14.91 6.09,14.91 c 0,0 5.64,1.02 8.81,-2.14 C 16.64,11 16.59,8.09 14.74,6.25 Z m -2.27,4.09 -0.91,1.87 -0.9,-1.87 -1.86,-0.91 1.86,-0.9 0.9,-1.87 0.91,1.87 1.86,0.9 z",polygon:"11.56,12.21 10.66,10.34 8.8,9.43 10.66,8.53 11.56,6.66 12.47,8.53 14.33,9.43 12.47,10.34"},styleRules:{map:"overflow:hidden;position:relative;","missing-css":"display:none;",canary:"background-color:salmon;","ctrl-bottom-left":"position: absolute; pointer-events: none; z-index: 2; bottom: 0; left: 0;","ctrl-bottom-right":"position: absolute; pointer-events: none; z-index: 2; right: 0; bottom: 0;",ctrl:"clear: both; pointer-events: auto; transform: translate(0, 0);","ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner":"display: none;","ctrl-attrib.mapboxgl-compact:hover .mapboxgl-ctrl-attrib-inner":"display: block; margin-top:2px","ctrl-attrib.mapboxgl-compact:hover":"padding: 2px 24px 2px 4px; visibility: visible; margin-top: 6px;","ctrl-attrib.mapboxgl-compact::after":'content: ""; cursor: pointer; position: absolute; background-image: url(\'data:image/svg+xml;charset=utf-8,%3Csvg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"%3E %3Cpath fill="%23333333" fill-rule="evenodd" d="M4,10a6,6 0 1,0 12,0a6,6 0 1,0 -12,0 M9,7a1,1 0 1,0 2,0a1,1 0 1,0 -2,0 M9,10a1,1 0 1,1 2,0l0,3a1,1 0 1,1 -2,0"/%3E %3C/svg%3E\'); background-color: rgba(255, 255, 255, 0.5); width: 24px; height: 24px; box-sizing: border-box; border-radius: 12px;',"ctrl-attrib.mapboxgl-compact":"min-height: 20px; padding: 0; margin: 10px; position: relative; background-color: #fff; border-radius: 3px 12px 12px 3px;","ctrl-bottom-right > .mapboxgl-ctrl-attrib.mapboxgl-compact::after":"bottom: 0; right: 0","ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact::after":"bottom: 0; left: 0","ctrl-bottom-left .mapboxgl-ctrl":"margin: 0 0 10px 10px; float: left;","ctrl-bottom-right .mapboxgl-ctrl":"margin: 0 10px 10px 0; float: right;","ctrl-attrib":"color: rgba(0, 0, 0, 0.75); text-decoration: none; font-size: 12px","ctrl-attrib a":"color: rgba(0, 0, 0, 0.75); text-decoration: none; font-size: 12px","ctrl-attrib a:hover":"color: inherit; text-decoration: underline;","ctrl-attrib .mapbox-improve-map":"font-weight: bold; margin-left: 2px;","attrib-empty":"display: none;","ctrl-logo":'display:block; width: 21px; height: 21px; background-image: url(\'data:image/svg+xml;charset=utf-8,%3C?xml version="1.0" encoding="utf-8"?%3E %3Csvg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 21 21" style="enable-background:new 0 0 21 21;" xml:space="preserve"%3E%3Cg transform="translate(0,0.01)"%3E%3Cpath d="m 10.5,1.24 c -5.11,0 -9.25,4.15 -9.25,9.25 0,5.1 4.15,9.25 9.25,9.25 5.1,0 9.25,-4.15 9.25,-9.25 0,-5.11 -4.14,-9.25 -9.25,-9.25 z m 4.39,11.53 c -1.93,1.93 -4.78,2.31 -6.7,2.31 -0.7,0 -1.41,-0.05 -2.1,-0.16 0,0 -1.02,-5.64 2.14,-8.81 0.83,-0.83 1.95,-1.28 3.13,-1.28 1.27,0 2.49,0.51 3.39,1.42 1.84,1.84 1.89,4.75 0.14,6.52 z" style="opacity:0.9;fill:%23ffffff;enable-background:new" class="st0"/%3E%3Cpath d="M 10.5,-0.01 C 4.7,-0.01 0,4.7 0,10.49 c 0,5.79 4.7,10.5 10.5,10.5 5.8,0 10.5,-4.7 10.5,-10.5 C 20.99,4.7 16.3,-0.01 10.5,-0.01 Z m 0,19.75 c -5.11,0 -9.25,-4.15 -9.25,-9.25 0,-5.1 4.14,-9.26 9.25,-9.26 5.11,0 9.25,4.15 9.25,9.25 0,5.13 -4.14,9.26 -9.25,9.26 z" style="opacity:0.35;enable-background:new" class="st1"/%3E%3Cpath d="M 14.74,6.25 C 12.9,4.41 9.98,4.35 8.23,6.1 5.07,9.27 6.09,14.91 6.09,14.91 c 0,0 5.64,1.02 8.81,-2.14 C 16.64,11 16.59,8.09 14.74,6.25 Z m -2.27,4.09 -0.91,1.87 -0.9,-1.87 -1.86,-0.91 1.86,-0.9 0.9,-1.87 0.91,1.87 1.86,0.9 z" style="opacity:0.35;enable-background:new" class="st1"/%3E%3Cpolygon points="11.56,12.21 10.66,10.34 8.8,9.43 10.66,8.53 11.56,6.66 12.47,8.53 14.33,9.43 12.47,10.34 " style="opacity:0.9;fill:%23ffffff;enable-background:new" class="st0"/%3E%3C/g%3E%3C/svg%3E\')'}}},13056:function(t,e,r){"use strict";var n=r(71828);t.exports=function(t,e){var r=t.split(" "),i=r[0],a=r[1],o=n.isArrayOrTypedArray(e)?n.mean(e):e,s=.5+o/100,l=1.5+o/100,u=["",""],c=[0,0];switch(i){case"top":u[0]="top",c[1]=-l;break;case"bottom":u[0]="bottom",c[1]=l}switch(a){case"left":u[1]="right",c[0]=-s;break;case"right":u[1]="left",c[0]=s}return{anchor:u[0]&&u[1]?u.join("-"):u[0]?u[0]:u[1]?u[1]:"center",offset:c}}},50101:function(t,e,r){"use strict";var n=r(44517),i=r(71828),a=i.strTranslate,o=i.strScale,s=r(27659).AU,l=r(77922),u=r(39898),c=r(91424),f=r(63893),h=r(10481),p="mapbox",d=e.constants=r(77734);function v(t){return"string"==typeof t&&(-1!==d.styleValuesMapbox.indexOf(t)||0===t.indexOf("mapbox://")||0===t.indexOf("stamen"))}e.name=p,e.attr="subplot",e.idRoot=p,e.idRegex=e.attrRegex=i.counterRegex(p),e.attributes={subplot:{valType:"subplotid",dflt:"mapbox",editType:"calc"}},e.layoutAttributes=r(23585),e.supplyLayoutDefaults=r(77882),e.plot=function(t){var e=t._fullLayout,r=t.calcdata,a=e._subplots[p];if(n.version!==d.requiredVersion)throw new Error(d.wrongVersionErrorMsg);var o=function(t,e){var r=t._fullLayout;if(""===t._context.mapboxAccessToken)return"";for(var n=[],a=[],o=!1,s=!1,l=0;l<e.length;l++){var u=r[e[l]],c=u.accesstoken;v(u.style)&&(c?i.pushUnique(n,c):(v(u._input.style)&&(i.error("Uses Mapbox map style, but did not set an access token."),o=!0),s=!0)),c&&i.pushUnique(a,c)}if(s){var f=o?d.noAccessTokenErrorMsg:d.missingStyleErrorMsg;throw i.error(f),new Error(f)}return n.length?(n.length>1&&i.warn(d.multipleTokensErrorMsg),n[0]):(a.length&&i.log(["Listed mapbox access token(s)",a.join(","),"but did not use a Mapbox map style, ignoring token(s)."].join(" ")),"")}(t,a);n.accessToken=o;for(var l=0;l<a.length;l++){var u=a[l],c=s(r,p,u),f=e[u],g=f._subplot;g||(g=new h(t,u),e[u]._subplot=g),g.viewInitial||(g.viewInitial={center:i.extendFlat({},f.center),zoom:f.zoom,bearing:f.bearing,pitch:f.pitch}),g.plot(c,e,t._promises)}},e.clean=function(t,e,r,n){for(var i=n._subplots[p]||[],a=0;a<i.length;a++){var o=i[a];!e[o]&&n[o]._subplot&&n[o]._subplot.destroy()}},e.toSVG=function(t){for(var e=t._fullLayout,r=e._subplots[p],n=e._size,i=0;i<r.length;i++){var s=e[r[i]],h=s.domain,v=s._subplot.toImage("png");e._glimages.append("svg:image").attr({xmlns:l.svg,"xlink:href":v,x:n.l+n.w*h.x[0],y:n.t+n.h*(1-h.y[1]),width:n.w*(h.x[1]-h.x[0]),height:n.h*(h.y[1]-h.y[0]),preserveAspectRatio:"none"});var g=u.select(s._subplot.div);if(null!==g.select(".mapboxgl-ctrl-logo").node().offsetParent){var y=e._glimages.append("g");y.attr("transform",a(n.l+n.w*h.x[0]+10,n.t+n.h*(1-h.y[0])-31)),y.append("path").attr("d",d.mapboxLogo.path0).style({opacity:.9,fill:"#ffffff","enable-background":"new"}),y.append("path").attr("d",d.mapboxLogo.path1).style("opacity",.35).style("enable-background","new"),y.append("path").attr("d",d.mapboxLogo.path2).style("opacity",.35).style("enable-background","new"),y.append("polygon").attr("points",d.mapboxLogo.polygon).style({opacity:.9,fill:"#ffffff","enable-background":"new"})}var m=g.select(".mapboxgl-ctrl-attrib").text().replace("Improve this map",""),x=e._glimages.append("g"),b=x.append("text");b.text(m).classed("static-attribution",!0).attr({"font-size":12,"font-family":"Arial",color:"rgba(0, 0, 0, 0.75)","text-anchor":"end","data-unformatted":m});var _=c.bBox(b.node()),w=n.w*(h.x[1]-h.x[0]);if(_.width>w/2){var T=m.split("|").join("<br>");b.text(T).attr("data-unformatted",T).call(f.convertToTspans,t),_=c.bBox(b.node())}b.attr("transform",a(-3,8-_.height)),x.insert("rect",".static-attribution").attr({x:-_.width-6,y:-_.height-3,width:_.width+6,height:_.height+3,fill:"rgba(255, 255, 255, 0.75)"});var k=1;_.width+6>w&&(k=w/(_.width+6));var A=[n.l+n.w*h.x[1],n.t+n.h*(1-h.y[0])];x.attr("transform",a(A[0],A[1])+o(k))}},e.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots[p],n=0;n<r.length;n++)e[r[n]]._subplot.updateFx(e)}},67911:function(t,e,r){"use strict";var n=r(71828),i=r(63893).sanitizeHTML,a=r(13056),o=r(77734);function s(t,e){this.subplot=t,this.uid=t.uid+"-"+e,this.index=e,this.idSource="source-"+this.uid,this.idLayer=o.layoutLayerPrefix+this.uid,this.sourceType=null,this.source=null,this.layerType=null,this.below=null,this.visible=!1}var l=s.prototype;function u(t){if(!t.visible)return!1;var e=t.source;if(Array.isArray(e)&&e.length>0){for(var r=0;r<e.length;r++)if("string"!=typeof e[r]||0===e[r].length)return!1;return!0}return n.isPlainObject(e)||"string"==typeof e&&e.length>0}function c(t){var e={},r={};switch(t.type){case"circle":n.extendFlat(r,{"circle-radius":t.circle.radius,"circle-color":t.color,"circle-opacity":t.opacity});break;case"line":n.extendFlat(r,{"line-width":t.line.width,"line-color":t.color,"line-opacity":t.opacity,"line-dasharray":t.line.dash});break;case"fill":n.extendFlat(r,{"fill-color":t.color,"fill-outline-color":t.fill.outlinecolor,"fill-opacity":t.opacity});break;case"symbol":var i=t.symbol,o=a(i.textposition,i.iconsize);n.extendFlat(e,{"icon-image":i.icon+"-15","icon-size":i.iconsize/10,"text-field":i.text,"text-size":i.textfont.size,"text-anchor":o.anchor,"text-offset":o.offset,"symbol-placement":i.placement}),n.extendFlat(r,{"icon-color":t.color,"text-color":i.textfont.color,"text-opacity":t.opacity});break;case"raster":n.extendFlat(r,{"raster-fade-duration":0,"raster-opacity":t.opacity})}return{layout:e,paint:r}}l.update=function(t){this.visible?this.needsNewImage(t)?this.updateImage(t):this.needsNewSource(t)?(this.removeLayer(),this.updateSource(t),this.updateLayer(t)):this.needsNewLayer(t)?this.updateLayer(t):this.updateStyle(t):(this.updateSource(t),this.updateLayer(t)),this.visible=u(t)},l.needsNewImage=function(t){return this.subplot.map.getSource(this.idSource)&&"image"===this.sourceType&&"image"===t.sourcetype&&(this.source!==t.source||JSON.stringify(this.coordinates)!==JSON.stringify(t.coordinates))},l.needsNewSource=function(t){return this.sourceType!==t.sourcetype||JSON.stringify(this.source)!==JSON.stringify(t.source)||this.layerType!==t.type},l.needsNewLayer=function(t){return this.layerType!==t.type||this.below!==this.subplot.belowLookup["layout-"+this.index]},l.lookupBelow=function(){return this.subplot.belowLookup["layout-"+this.index]},l.updateImage=function(t){this.subplot.map.getSource(this.idSource).updateImage({url:t.source,coordinates:t.coordinates});var e=this.findFollowingMapboxLayerId(this.lookupBelow());null!==e&&this.subplot.map.moveLayer(this.idLayer,e)},l.updateSource=function(t){var e=this.subplot.map;if(e.getSource(this.idSource)&&e.removeSource(this.idSource),this.sourceType=t.sourcetype,this.source=t.source,u(t)){var r=function(t){var e,r=t.sourcetype,n=t.source,a={type:r};return"geojson"===r?e="data":"vector"===r?e="string"==typeof n?"url":"tiles":"raster"===r?(e="tiles",a.tileSize=256):"image"===r&&(e="url",a.coordinates=t.coordinates),a[e]=n,t.sourceattribution&&(a.attribution=i(t.sourceattribution)),a}(t);e.addSource(this.idSource,r)}},l.findFollowingMapboxLayerId=function(t){if("traces"===t)for(var e=this.subplot.getMapLayers(),r=0;r<e.length;r++){var n=e[r].id;if("string"==typeof n&&0===n.indexOf(o.traceLayerPrefix)){t=n;break}}return t},l.updateLayer=function(t){var e=this.subplot,r=c(t),n=this.lookupBelow(),i=this.findFollowingMapboxLayerId(n);this.removeLayer(),u(t)&&e.addLayer({id:this.idLayer,source:this.idSource,"source-layer":t.sourcelayer||"",type:t.type,minzoom:t.minzoom,maxzoom:t.maxzoom,layout:r.layout,paint:r.paint},i),this.layerType=t.type,this.below=n},l.updateStyle=function(t){if(u(t)){var e=c(t);this.subplot.setOptions(this.idLayer,"setLayoutProperty",e.layout),this.subplot.setOptions(this.idLayer,"setPaintProperty",e.paint)}},l.removeLayer=function(){var t=this.subplot.map;t.getLayer(this.idLayer)&&t.removeLayer(this.idLayer)},l.dispose=function(){var t=this.subplot.map;t.getLayer(this.idLayer)&&t.removeLayer(this.idLayer),t.getSource(this.idSource)&&t.removeSource(this.idSource)},t.exports=function(t,e,r){var n=new s(t,e);return n.update(r),n}},23585:function(t,e,r){"use strict";var n=r(71828),i=r(7901).defaultLine,a=r(27670).Y,o=r(41940),s=r(82196).textposition,l=r(30962).overrideAll,u=r(44467).templatedArray,c=r(77734),f=o({});f.family.dflt="Open Sans Regular, Arial Unicode MS Regular",(t.exports=l({_arrayAttrRegexps:[n.counterRegex("mapbox",".layers",!0)],domain:a({name:"mapbox"}),accesstoken:{valType:"string",noBlank:!0,strict:!0},style:{valType:"any",values:c.styleValuesMapbox.concat(c.styleValuesNonMapbox),dflt:c.styleValueDflt},center:{lon:{valType:"number",dflt:0},lat:{valType:"number",dflt:0}},zoom:{valType:"number",dflt:1},bearing:{valType:"number",dflt:0},pitch:{valType:"number",dflt:0},bounds:{west:{valType:"number"},east:{valType:"number"},south:{valType:"number"},north:{valType:"number"}},layers:u("layer",{visible:{valType:"boolean",dflt:!0},sourcetype:{valType:"enumerated",values:["geojson","vector","raster","image"],dflt:"geojson"},source:{valType:"any"},sourcelayer:{valType:"string",dflt:""},sourceattribution:{valType:"string"},type:{valType:"enumerated",values:["circle","line","fill","symbol","raster"],dflt:"circle"},coordinates:{valType:"any"},below:{valType:"string"},color:{valType:"color",dflt:i},opacity:{valType:"number",min:0,max:1,dflt:1},minzoom:{valType:"number",min:0,max:24,dflt:0},maxzoom:{valType:"number",min:0,max:24,dflt:24},circle:{radius:{valType:"number",dflt:15}},line:{width:{valType:"number",dflt:2},dash:{valType:"data_array"}},fill:{outlinecolor:{valType:"color",dflt:i}},symbol:{icon:{valType:"string",dflt:"marker"},iconsize:{valType:"number",dflt:10},text:{valType:"string",dflt:""},placement:{valType:"enumerated",values:["point","line","line-center"],dflt:"point"},textfont:f,textposition:n.extendFlat({},s,{arrayOk:!1})}})},"plot","from-root")).uirevision={valType:"any",editType:"none"}},77882:function(t,e,r){"use strict";var n=r(71828),i=r(49119),a=r(85501),o=r(23585);function s(t,e,r,n){r("accesstoken",n.accessToken),r("style"),r("center.lon"),r("center.lat"),r("zoom"),r("bearing"),r("pitch");var i=r("bounds.west"),o=r("bounds.east"),s=r("bounds.south"),u=r("bounds.north");void 0!==i&&void 0!==o&&void 0!==s&&void 0!==u||delete e.bounds,a(t,e,{name:"layers",handleItemDefaults:l}),e._input=t}function l(t,e){function r(r,i){return n.coerce(t,e,o.layers,r,i)}if(r("visible")){var i,a=r("sourcetype"),s="raster"===a||"image"===a;r("source"),r("sourceattribution"),"vector"===a&&r("sourcelayer"),"image"===a&&r("coordinates"),s&&(i="raster");var l=r("type",i);s&&"raster"!==l&&(l=e.type="raster",n.log("Source types *raster* and *image* must drawn *raster* layer type.")),r("below"),r("color"),r("opacity"),r("minzoom"),r("maxzoom"),"circle"===l&&r("circle.radius"),"line"===l&&(r("line.width"),r("line.dash")),"fill"===l&&r("fill.outlinecolor"),"symbol"===l&&(r("symbol.icon"),r("symbol.iconsize"),r("symbol.text"),n.coerceFont(r,"symbol.textfont"),r("symbol.textposition"),r("symbol.placement"))}}t.exports=function(t,e,r){i(t,e,r,{type:"mapbox",attributes:o,handleDefaults:s,partition:"y",accessToken:e._mapboxAccessToken})}},10481:function(t,e,r){"use strict";var n=r(44517),i=r(71828),a=r(41327),o=r(73972),s=r(89298),l=r(28569),u=r(30211),c=r(64505),f=c.drawMode,h=c.selectMode,p=r(47322).prepSelect,d=r(47322).clearOutline,v=r(47322).clearSelectionsCache,g=r(47322).selectOnClick,y=r(77734),m=r(67911);function x(t,e){this.id=e,this.gd=t;var r=t._fullLayout,n=t._context;this.container=r._glcontainer.node(),this.isStatic=n.staticPlot,this.uid=r._uid+"-"+this.id,this.div=null,this.xaxis=null,this.yaxis=null,this.createFramework(r),this.map=null,this.accessToken=null,this.styleObj=null,this.traceHash={},this.layerList=[],this.belowLookup={},this.dragging=!1,this.wheeling=!1}var b=x.prototype;b.plot=function(t,e,r){var n,i=this,a=e[i.id];i.map&&a.accesstoken!==i.accessToken&&(i.map.remove(),i.map=null,i.styleObj=null,i.traceHash={},i.layerList=[]),n=i.map?new Promise((function(r,n){i.updateMap(t,e,r,n)})):new Promise((function(r,n){i.createMap(t,e,r,n)})),r.push(n)},b.createMap=function(t,e,r,i){var o=this,s=e[o.id],l=o.styleObj=w(s.style,e);o.accessToken=s.accesstoken;var u=s.bounds,c=u?[[u.west,u.south],[u.east,u.north]]:null,f=o.map=new n.Map({container:o.div,style:l.style,center:k(s.center),zoom:s.zoom,bearing:s.bearing,pitch:s.pitch,maxBounds:c,interactive:!o.isStatic,preserveDrawingBuffer:o.isStatic,doubleClickZoom:!1,boxZoom:!1,attributionControl:!1}).addControl(new n.AttributionControl({compact:!0}));f._canvas.style.left="0px",f._canvas.style.top="0px",o.rejectOnError(i),o.isStatic||o.initFx(t,e);var h=[];h.push(new Promise((function(t){f.once("load",t)}))),h=h.concat(a.fetchTraceGeoData(t)),Promise.all(h).then((function(){o.fillBelowLookup(t,e),o.updateData(t),o.updateLayout(e),o.resolveOnRender(r)})).catch(i)},b.updateMap=function(t,e,r,n){var i=this,o=i.map,s=e[this.id];i.rejectOnError(n);var l=[],u=w(s.style,e);JSON.stringify(i.styleObj)!==JSON.stringify(u)&&(i.styleObj=u,o.setStyle(u.style),i.traceHash={},l.push(new Promise((function(t){o.once("styledata",t)})))),l=l.concat(a.fetchTraceGeoData(t)),Promise.all(l).then((function(){i.fillBelowLookup(t,e),i.updateData(t),i.updateLayout(e),i.resolveOnRender(r)})).catch(n)},b.fillBelowLookup=function(t,e){var r,n,i=e[this.id].layers,a=this.belowLookup={},o=!1;for(r=0;r<t.length;r++){var s=t[r][0].trace,l=s._module;"string"==typeof s.below?n=s.below:l.getBelow&&(n=l.getBelow(s,this)),""===n&&(o=!0),a["trace-"+s.uid]=n||""}for(r=0;r<i.length;r++){var u=i[r];n="string"==typeof u.below?u.below:o?"traces":"",a["layout-"+r]=n}var c,f,h={};for(c in a)h[n=a[c]]?h[n].push(c):h[n]=[c];for(n in h){var p=h[n];if(p.length>1)for(r=0;r<p.length;r++)0===(c=p[r]).indexOf("trace-")?(f=c.split("trace-")[1],this.traceHash[f]&&(this.traceHash[f].below=null)):0===c.indexOf("layout-")&&(f=c.split("layout-")[1],this.layerList[f]&&(this.layerList[f].below=null))}};var _={choroplethmapbox:0,densitymapbox:1,scattermapbox:2};function w(t,e){var r={};if(i.isPlainObject(t))r.id=t.id,r.style=t;else if("string"==typeof t)if(r.id=t,-1!==y.styleValuesMapbox.indexOf(t))r.style=T(t);else if(y.stylesNonMapbox[t]){r.style=y.stylesNonMapbox[t];var n=r.style.sources["plotly-"+t],a=n?n.tiles:void 0;a&&a[0]&&"?api_key="===a[0].slice(-9)&&(a[0]+=e._mapboxAccessToken)}else r.style=t;else r.id=y.styleValueDflt,r.style=T(y.styleValueDflt);return r.transition={duration:0,delay:0},r}function T(t){return y.styleUrlPrefix+t+"-"+y.styleUrlSuffix}function k(t){return[t.lon,t.lat]}b.updateData=function(t){var e,r,n,i,a=this.traceHash,o=t.slice().sort((function(t,e){return _[t[0].trace.type]-_[e[0].trace.type]}));for(n=0;n<o.length;n++){var s=o[n],l=!1;(e=a[(r=s[0].trace).uid])&&(e.type===r.type?(e.update(s),l=!0):e.dispose()),!l&&r._module&&(a[r.uid]=r._module.plot(this,s))}var u=Object.keys(a);t:for(n=0;n<u.length;n++){var c=u[n];for(i=0;i<t.length;i++)if(c===(r=t[i][0].trace).uid)continue t;(e=a[c]).dispose(),delete a[c]}},b.updateLayout=function(t){var e=this.map,r=t[this.id];this.dragging||this.wheeling||(e.setCenter(k(r.center)),e.setZoom(r.zoom),e.setBearing(r.bearing),e.setPitch(r.pitch)),this.updateLayers(t),this.updateFramework(t),this.updateFx(t),this.map.resize(),this.gd._context._scrollZoom.mapbox?e.scrollZoom.enable():e.scrollZoom.disable()},b.resolveOnRender=function(t){var e=this.map;e.on("render",(function r(){e.loaded()&&(e.off("render",r),setTimeout(t,10))}))},b.rejectOnError=function(t){var e=this.map;function r(){t(new Error(y.mapOnErrorMsg))}e.once("error",r),e.once("style.error",r),e.once("source.error",r),e.once("tile.error",r),e.once("layer.error",r)},b.createFramework=function(t){var e=this,r=e.div=document.createElement("div");r.id=e.uid,r.style.position="absolute",e.container.appendChild(r),e.xaxis={_id:"x",c2p:function(t){return e.project(t).x}},e.yaxis={_id:"y",c2p:function(t){return e.project(t).y}},e.updateFramework(t),e.mockAxis={type:"linear",showexponent:"all",exponentformat:"B"},s.setConvert(e.mockAxis,t)},b.initFx=function(t,e){var r=this,n=r.gd,i=r.map;function a(){u.loneUnhover(e._hoverlayer)}function s(){var t=r.getView();n.emit("plotly_relayouting",r.getViewEditsWithDerived(t))}i.on("moveend",(function(t){if(r.map){var e=n._fullLayout;if(t.originalEvent||r.wheeling){var i=e[r.id];o.call("_storeDirectGUIEdit",n.layout,e._preGUI,r.getViewEdits(i));var a=r.getView();i._input.center=i.center=a.center,i._input.zoom=i.zoom=a.zoom,i._input.bearing=i.bearing=a.bearing,i._input.pitch=i.pitch=a.pitch,n.emit("plotly_relayout",r.getViewEditsWithDerived(a))}t.originalEvent&&"mouseup"===t.originalEvent.type?r.dragging=!1:r.wheeling&&(r.wheeling=!1),e._rehover&&e._rehover()}})),i.on("wheel",(function(){r.wheeling=!0})),i.on("mousemove",(function(t){var e=r.div.getBoundingClientRect(),a=[t.originalEvent.offsetX,t.originalEvent.offsetY];t.target.getBoundingClientRect=function(){return e},r.xaxis.p2c=function(){return i.unproject(a).lng},r.yaxis.p2c=function(){return i.unproject(a).lat},n._fullLayout._rehover=function(){n._fullLayout._hoversubplot===r.id&&n._fullLayout[r.id]&&u.hover(n,t,r.id)},u.hover(n,t,r.id),n._fullLayout._hoversubplot=r.id})),i.on("dragstart",(function(){r.dragging=!0,a()})),i.on("zoomstart",a),i.on("mouseout",(function(){n._fullLayout._hoversubplot=null})),i.on("drag",s),i.on("zoom",s),i.on("dblclick",(function(){var t=n._fullLayout[r.id];o.call("_storeDirectGUIEdit",n.layout,n._fullLayout._preGUI,r.getViewEdits(t));var e=r.viewInitial;i.setCenter(k(e.center)),i.setZoom(e.zoom),i.setBearing(e.bearing),i.setPitch(e.pitch);var a=r.getView();t._input.center=t.center=a.center,t._input.zoom=t.zoom=a.zoom,t._input.bearing=t.bearing=a.bearing,t._input.pitch=t.pitch=a.pitch,n.emit("plotly_doubleclick",null),n.emit("plotly_relayout",r.getViewEditsWithDerived(a))})),r.clearOutline=function(){v(r.dragOptions),d(r.dragOptions.gd)},r.onClickInPanFn=function(t){return function(e){var i=n._fullLayout.clickmode;i.indexOf("select")>-1&&g(e.originalEvent,n,[r.xaxis],[r.yaxis],r.id,t),i.indexOf("event")>-1&&u.click(n,e.originalEvent)}}},b.updateFx=function(t){var e=this,r=e.map,n=e.gd;if(!e.isStatic){var a,o=t.dragmode;a=function(t,r){r.isRect?(t.range={})[e.id]=[u([r.xmin,r.ymin]),u([r.xmax,r.ymax])]:(t.lassoPoints={})[e.id]=r.map(u)};var s=e.dragOptions;e.dragOptions=i.extendDeep(s||{},{dragmode:t.dragmode,element:e.div,gd:n,plotinfo:{id:e.id,domain:t[e.id].domain,xaxis:e.xaxis,yaxis:e.yaxis,fillRangeItems:a},xaxes:[e.xaxis],yaxes:[e.yaxis],subplot:e.id}),r.off("click",e.onClickInPanHandler),h(o)||f(o)?(r.dragPan.disable(),r.on("zoomstart",e.clearOutline),e.dragOptions.prepFn=function(t,r,n){p(t,r,n,e.dragOptions,o)},l.init(e.dragOptions)):(r.dragPan.enable(),r.off("zoomstart",e.clearOutline),e.div.onmousedown=null,e.div.ontouchstart=null,e.div.removeEventListener("touchstart",e.div._ontouchstart),e.onClickInPanHandler=e.onClickInPanFn(e.dragOptions),r.on("click",e.onClickInPanHandler))}function u(t){var r=e.map.unproject(t);return[r.lng,r.lat]}},b.updateFramework=function(t){var e=t[this.id].domain,r=t._size,n=this.div.style;n.width=r.w*(e.x[1]-e.x[0])+"px",n.height=r.h*(e.y[1]-e.y[0])+"px",n.left=r.l+e.x[0]*r.w+"px",n.top=r.t+(1-e.y[1])*r.h+"px",this.xaxis._offset=r.l+e.x[0]*r.w,this.xaxis._length=r.w*(e.x[1]-e.x[0]),this.yaxis._offset=r.t+(1-e.y[1])*r.h,this.yaxis._length=r.h*(e.y[1]-e.y[0])},b.updateLayers=function(t){var e,r=t[this.id].layers,n=this.layerList;if(r.length!==n.length){for(e=0;e<n.length;e++)n[e].dispose();for(n=this.layerList=[],e=0;e<r.length;e++)n.push(m(this,e,r[e]))}else for(e=0;e<r.length;e++)n[e].update(r[e])},b.destroy=function(){this.map&&(this.map.remove(),this.map=null,this.container.removeChild(this.div))},b.toImage=function(){return this.map.stop(),this.map.getCanvas().toDataURL()},b.setOptions=function(t,e,r){for(var n in r)this.map[e](t,n,r[n])},b.getMapLayers=function(){return this.map.getStyle().layers},b.addLayer=function(t,e){var r=this.map;if("string"==typeof e){if(""===e)return void r.addLayer(t,e);for(var n=this.getMapLayers(),a=0;a<n.length;a++)if(e===n[a].id)return void r.addLayer(t,e);i.warn(["Trying to add layer with *below* value",e,"referencing a layer that does not exist","or that does not yet exist."].join(" "))}r.addLayer(t)},b.project=function(t){return this.map.project(new n.LngLat(t[0],t[1]))},b.getView=function(){var t=this.map,e=t.getCenter(),r={lon:e.lng,lat:e.lat},n=t.getCanvas(),i=parseInt(n.style.width),a=parseInt(n.style.height);return{center:r,zoom:t.getZoom(),bearing:t.getBearing(),pitch:t.getPitch(),_derived:{coordinates:[t.unproject([0,0]).toArray(),t.unproject([i,0]).toArray(),t.unproject([i,a]).toArray(),t.unproject([0,a]).toArray()]}}},b.getViewEdits=function(t){for(var e=this.id,r=["center","zoom","bearing","pitch"],n={},i=0;i<r.length;i++){var a=r[i];n[e+"."+a]=t[a]}return n},b.getViewEditsWithDerived=function(t){var e=this.id,r=this.getViewEdits(t);return r[e+"._derived"]=t._derived,r},t.exports=x},35025:function(t){"use strict";t.exports=function(t){var e=t.editType;return{t:{valType:"number",dflt:0,editType:e},r:{valType:"number",dflt:0,editType:e},b:{valType:"number",dflt:0,editType:e},l:{valType:"number",dflt:0,editType:e},editType:e}}},74875:function(t,e,r){"use strict";var n=r(39898),i=r(84096).Dq,a=r(60721).FF,o=r(92770),s=r(73972),l=r(86281),u=r(44467),c=r(71828),f=r(7901),h=r(50606).BADNUM,p=r(41675),d=r(51873).clearOutline,v=r(21479),g=r(85594),y=r(31391),m=r(27659).a0,x=c.relinkPrivateKeys,b=c._,_=t.exports={};c.extendFlat(_,s),_.attributes=r(9012),_.attributes.type.values=_.allTypes,_.fontAttrs=r(41940),_.layoutAttributes=r(10820),_.fontWeight="normal";var w=_.transformsRegistry,T=r(31137);_.executeAPICommand=T.executeAPICommand,_.computeAPICommandBindings=T.computeAPICommandBindings,_.manageCommandObserver=T.manageCommandObserver,_.hasSimpleAPICommandBindings=T.hasSimpleAPICommandBindings,_.redrawText=function(t){return t=c.getGraphDiv(t),new Promise((function(e){setTimeout((function(){t._fullLayout&&(s.getComponentMethod("annotations","draw")(t),s.getComponentMethod("legend","draw")(t),s.getComponentMethod("colorbar","draw")(t),e(_.previousPromises(t)))}),300)}))},_.resize=function(t){var e;t=c.getGraphDiv(t);var r=new Promise((function(r,n){t&&!c.isHidden(t)||n(new Error("Resize must be passed a displayed plot div element.")),t._redrawTimer&&clearTimeout(t._redrawTimer),t._resolveResize&&(e=t._resolveResize),t._resolveResize=r,t._redrawTimer=setTimeout((function(){if(!t.layout||t.layout.width&&t.layout.height||c.isHidden(t))r(t);else{delete t.layout.width,delete t.layout.height;var e=t.changed;t.autoplay=!0,s.call("relayout",t,{autosize:!0}).then((function(){t.changed=e,t._resolveResize===r&&(delete t._resolveResize,r(t))}))}}),100)}));return e&&e(r),r},_.previousPromises=function(t){if((t._promises||[]).length)return Promise.all(t._promises).then((function(){t._promises=[]}))},_.addLinks=function(t){if(t._context.showLink||t._context.showSources){var e=t._fullLayout,r=c.ensureSingle(e._paper,"text","js-plot-link-container",(function(t){t.style({"font-family":'"Open Sans", Arial, sans-serif',"font-size":"12px",fill:f.defaultLine,"pointer-events":"all"}).each((function(){var t=n.select(this);t.append("tspan").classed("js-link-to-tool",!0),t.append("tspan").classed("js-link-spacer",!0),t.append("tspan").classed("js-sourcelinks",!0)}))})),i=r.node(),a={y:e._paper.attr("height")-9};document.body.contains(i)&&i.getComputedTextLength()>=e.width-20?(a["text-anchor"]="start",a.x=5):(a["text-anchor"]="end",a.x=e._paper.attr("width")-7),r.attr(a);var o=r.select(".js-link-to-tool"),s=r.select(".js-link-spacer"),l=r.select(".js-sourcelinks");t._context.showSources&&t._context.showSources(t),t._context.showLink&&function(t,e){e.text("");var r=e.append("a").attr({"xlink:xlink:href":"#",class:"link--impt link--embedview","font-weight":"bold"}).text(t._context.linkText+" "+String.fromCharCode(187));if(t._context.sendData)r.on("click",(function(){_.sendDataToCloud(t)}));else{var n=window.location.pathname.split("/"),i=window.location.search;r.attr({"xlink:xlink:show":"new","xlink:xlink:href":"/"+n[2].split(".")[0]+"/"+n[1]+i})}}(t,o),s.text(o.text()&&l.text()?" - ":"")}},_.sendDataToCloud=function(t){var e=(window.PLOTLYENV||{}).BASE_URL||t._context.plotlyServerURL;if(e){t.emit("plotly_beforeexport");var r=n.select(t).append("div").attr("id","hiddenform").style("display","none"),i=r.append("form").attr({action:e+"/external",method:"post",target:"_blank"});return i.append("input").attr({type:"text",name:"data"}).node().value=_.graphJson(t,!1,"keepdata"),i.node().submit(),r.remove(),t.emit("plotly_afterexport"),!1}};var k=["days","shortDays","months","shortMonths","periods","dateTime","date","time","decimal","thousands","grouping","currency"],A=["year","month","dayMonth","dayMonthYear"];function M(t,e){var r=t._context.locale;r||(r="en-US");var n=!1,i={};function a(t){for(var r=!0,a=0;a<e.length;a++){var o=e[a];i[o]||(t[o]?i[o]=t[o]:r=!1)}r&&(n=!0)}for(var o=0;o<2;o++){for(var l=t._context.locales,u=0;u<2;u++){var c=(l[r]||{}).format;if(c&&(a(c),n))break;l=s.localeRegistry}var f=r.split("-")[0];if(n||f===r)break;r=f}return n||a(s.localeRegistry.en.format),i}function S(t,e){var r={_fullLayout:e},n="x"===t._id.charAt(0),i=t._mainAxis._anchorAxis,a="",o="",s="";if(i&&(s=i._mainAxis._id,a=n?t._id+s:s+t._id),!a||!e._plots[a]){a="";for(var l=t._counterAxes,u=0;u<l.length;u++){var c=l[u],f=n?t._id+c:c+t._id;o||(o=f);var h=p.getFromId(r,c);if(s&&h.overlaying===s){a=f;break}}}return a||o}function E(t){var e=t.transforms;if(Array.isArray(e)&&e.length)for(var r=0;r<e.length;r++){var n=e[r],i=n._module||w[n.type];if(i&&i.makesData)return!0}return!1}function L(t,e,r,n){for(var i=t.transforms,a=[t],o=0;o<i.length;o++){var s=i[o],l=w[s.type];l&&l.transform&&(a=l.transform(a,{transform:s,fullTrace:t,fullData:e,layout:r,fullLayout:n,transformIndex:o}))}return a}function C(t){return"string"==typeof t&&"px"===t.substr(t.length-2)&&parseFloat(t)}function P(t){var e=t.margin;if(!t._size){var r=t._size={l:Math.round(e.l),r:Math.round(e.r),t:Math.round(e.t),b:Math.round(e.b),p:Math.round(e.pad)};r.w=Math.round(t.width)-r.l-r.r,r.h=Math.round(t.height)-r.t-r.b}t._pushmargin||(t._pushmargin={}),t._pushmarginIds||(t._pushmarginIds={}),t._reservedMargin||(t._reservedMargin={})}_.supplyDefaults=function(t,e){var r=e&&e.skipUpdateCalc,n=t._fullLayout||{};if(n._skipDefaults)delete n._skipDefaults;else{var o,l=t._fullLayout={},u=t.layout||{},f=t._fullData||[],h=t._fullData=[],p=t.data||[],v=t.calcdata||[],g=t._context||{};t._transitionData||_.createTransitionData(t),l._dfltTitle={plot:b(t,"Click to enter Plot title"),x:b(t,"Click to enter X axis title"),y:b(t,"Click to enter Y axis title"),colorbar:b(t,"Click to enter Colorscale title"),annotation:b(t,"new text")},l._traceWord=b(t,"trace");var y=M(t,k);if(l._mapboxAccessToken=g.mapboxAccessToken,n._initialAutoSizeIsDone){var m=n.width,w=n.height;_.supplyLayoutGlobalDefaults(u,l,y),u.width||(l.width=m),u.height||(l.height=w),_.sanitizeMargins(l)}else{_.supplyLayoutGlobalDefaults(u,l,y);var T=!u.width||!u.height,S=l.autosize,E=g.autosizable;T&&(S||E)?_.plotAutoSize(t,u,l):T&&_.sanitizeMargins(l),!S&&T&&(u.width=l.width,u.height=l.height)}l._d3locale=function(t,e){return t.decimal=e.charAt(0),t.thousands=e.charAt(1),{numberFormat:function(e){try{e=a(t).format(c.adjustFormat(e))}catch(t){return c.warnBadFormat(e),c.noFormat}return e},timeFormat:i(t).utcFormat}}(y,l.separators),l._extraFormat=M(t,A),l._initialAutoSizeIsDone=!0,l._dataLength=p.length,l._modules=[],l._visibleModules=[],l._basePlotModules=[];var L=l._subplots=function(){var t,e,r=s.collectableSubplotTypes,n={};if(!r){r=[];var i=s.subplotsRegistry;for(var a in i){var o=i[a].attr;if(o&&(r.push(a),Array.isArray(o)))for(e=0;e<o.length;e++)c.pushUnique(r,o[e])}}for(t=0;t<r.length;t++)n[r[t]]=[];return n}(),C=l._splomAxes={x:{},y:{}},O=l._splomSubplots={};l._splomGridDflt={},l._scatterStackOpts={},l._firstScatter={},l._alignmentOpts={},l._colorAxes={},l._requestRangeslider={},l._traceUids=function(t,e){var r,n,i=e.length,a=[];for(r=0;r<t.length;r++){var o=t[r]._fullInput;o!==n&&a.push(o),n=o}var s=a.length,l=new Array(i),u={};function f(t,e){l[e]=t,u[t]=1}function h(t,e){if(t&&"string"==typeof t&&!u[t])return f(t,e),!0}for(r=0;r<i;r++){var p=e[r].uid;"number"==typeof p&&(p=String(p)),h(p,r)||r<s&&h(a[r].uid,r)||f(c.randstr(u),r)}return l}(f,p),l._globalTransforms=(t._context||{}).globalTransforms,_.supplyDataDefaults(p,h,u,l);var I=Object.keys(C.x),D=Object.keys(C.y);if(I.length>1&&D.length>1){for(s.getComponentMethod("grid","sizeDefaults")(u,l),o=0;o<I.length;o++)c.pushUnique(L.xaxis,I[o]);for(o=0;o<D.length;o++)c.pushUnique(L.yaxis,D[o]);for(var z in O)c.pushUnique(L.cartesian,z)}if(l._has=_._hasPlotType.bind(l),f.length===h.length)for(o=0;o<h.length;o++)x(h[o],f[o]);_.supplyLayoutModuleDefaults(u,l,h,t._transitionData);var R=l._visibleModules,F=[];for(o=0;o<R.length;o++){var B=R[o].crossTraceDefaults;B&&c.pushUnique(F,B)}for(o=0;o<F.length;o++)F[o](h,l);l._hasOnlyLargeSploms=1===l._basePlotModules.length&&"splom"===l._basePlotModules[0].name&&I.length>15&&D.length>15&&0===l.shapes.length&&0===l.images.length,_.linkSubplots(h,l,f,n),_.cleanPlot(h,l,f,n);var N=!(!n._has||!n._has("gl2d")),j=!(!l._has||!l._has("gl2d")),U=!(!n._has||!n._has("cartesian"))||N,V=!(!l._has||!l._has("cartesian"))||j;U&&!V?n._bgLayer.remove():V&&!U&&(l._shouldCreateBgLayer=!0),n._zoomlayer&&!t._dragging&&d({_fullLayout:n}),function(t,e){var r,n=[];e.meta&&(r=e._meta={meta:e.meta,layout:{meta:e.meta}});for(var i=0;i<t.length;i++){var a=t[i];a.meta?n[a.index]=a._meta={meta:a.meta}:e.meta&&(a._meta={meta:e.meta}),e.meta&&(a._meta.layout={meta:e.meta})}n.length&&(r||(r=e._meta={}),r.data=n)}(h,l),x(l,n),s.getComponentMethod("colorscale","crossTraceDefaults")(h,l),l._preGUI||(l._preGUI={}),l._tracePreGUI||(l._tracePreGUI={});var H,q=l._tracePreGUI,G={};for(H in q)G[H]="old";for(o=0;o<h.length;o++)G[H=h[o]._fullInput.uid]||(q[H]={}),G[H]="new";for(H in G)"old"===G[H]&&delete q[H];P(l),s.getComponentMethod("rangeslider","makeData")(l),r||v.length!==h.length||_.supplyDefaultsUpdateCalc(v,h)}},_.supplyDefaultsUpdateCalc=function(t,e){for(var r=0;r<e.length;r++){var n=e[r],i=(t[r]||[])[0];if(i&&i.trace){var a=i.trace;if(a._hasCalcTransform){var o,s,l,u=a._arrayAttrs;for(o=0;o<u.length;o++)s=u[o],l=c.nestedProperty(a,s).get().slice(),c.nestedProperty(n,s).set(l)}i.trace=n}}},_.createTransitionData=function(t){t._transitionData||(t._transitionData={}),t._transitionData._frames||(t._transitionData._frames=[]),t._transitionData._frameHash||(t._transitionData._frameHash={}),t._transitionData._counter||(t._transitionData._counter=0),t._transitionData._interruptCallbacks||(t._transitionData._interruptCallbacks=[])},_._hasPlotType=function(t){var e,r=this._basePlotModules||[];for(e=0;e<r.length;e++)if(r[e].name===t)return!0;var n=this._modules||[];for(e=0;e<n.length;e++){var i=n[e].name;if(i===t)return!0;var a=s.modules[i];if(a&&a.categories[t])return!0}return!1},_.cleanPlot=function(t,e,r,n){var i,a,o=n._basePlotModules||[];for(i=0;i<o.length;i++){var s=o[i];s.clean&&s.clean(t,e,r,n)}var l=n._has&&n._has("gl"),u=e._has&&e._has("gl");l&&!u&&void 0!==n._glcontainer&&(n._glcontainer.selectAll(".gl-canvas").remove(),n._glcontainer.selectAll(".no-webgl").remove(),n._glcanvas=null);var c=!!n._infolayer;t:for(i=0;i<r.length;i++){var f=r[i].uid;for(a=0;a<t.length;a++)if(f===t[a].uid)continue t;c&&n._infolayer.select(".cb"+f).remove()}},_.linkSubplots=function(t,e,r,n){var i,a,o=n._plots||{},l=e._plots={},u=e._subplots,f={_fullData:t,_fullLayout:e},h=u.cartesian.concat(u.gl2d||[]);for(i=0;i<h.length;i++){var d,v=h[i],g=o[v],y=p.getFromId(f,v,"x"),m=p.getFromId(f,v,"y");for(g?d=l[v]=g:(d=l[v]={}).id=v,y._counterAxes.push(m._id),m._counterAxes.push(y._id),y._subplotsWith.push(v),m._subplotsWith.push(v),d.xaxis=y,d.yaxis=m,d._hasClipOnAxisFalse=!1,a=0;a<t.length;a++){var x=t[a];if(x.xaxis===d.xaxis._id&&x.yaxis===d.yaxis._id&&!1===x.cliponaxis){d._hasClipOnAxisFalse=!0;break}}}var b,_=p.list(f,null,!0);for(i=0;i<_.length;i++){var w=null;(b=_[i]).overlaying&&(w=p.getFromId(f,b.overlaying))&&w.overlaying&&(b.overlaying=!1,w=null),b._mainAxis=w||b,w&&(b.domain=w.domain.slice()),b._anchorAxis="free"===b.anchor?null:p.getFromId(f,b.anchor)}for(i=0;i<_.length;i++)if((b=_[i])._counterAxes.sort(p.idSort),b._subplotsWith.sort(c.subplotSort),b._mainSubplot=S(b,e),b._counterAxes.length&&(b.spikemode&&-1!==b.spikemode.indexOf("across")||b.automargin&&b.mirror&&"free"!==b.anchor||s.getComponentMethod("rangeslider","isVisible")(b))){var T=1,k=0;for(a=0;a<b._counterAxes.length;a++){var A=p.getFromId(f,b._counterAxes[a]);T=Math.min(T,A.domain[0]),k=Math.max(k,A.domain[1])}T<k&&(b._counterDomainMin=T,b._counterDomainMax=k)}},_.clearExpandedTraceDefaultColors=function(t){var e,r,n;for(r=[],(e=t._module._colorAttrs)||(t._module._colorAttrs=e=[],l.crawl(t._module.attributes,(function(t,n,i,a){r[a]=n,r.length=a+1,"color"===t.valType&&void 0===t.dflt&&e.push(r.join("."))}))),n=0;n<e.length;n++)c.nestedProperty(t,"_input."+e[n]).get()||c.nestedProperty(t,e[n]).set(null)},_.supplyDataDefaults=function(t,e,r,n){var i,a,o,l=n._modules,f=n._visibleModules,h=n._basePlotModules,p=0,d=0;function v(t){e.push(t);var r=t._module;r&&(c.pushUnique(l,r),!0===t.visible&&c.pushUnique(f,r),c.pushUnique(h,t._module.basePlotModule),p++,!1!==t._input.visible&&d++)}n._transformModules=[];var g={},y=[],m=(r.template||{}).data||{},b=u.traceTemplater(m);for(i=0;i<t.length;i++){if(o=t[i],(a=b.newTrace(o)).uid=n._traceUids[i],_.supplyTraceDefaults(o,a,d,n,i),a.index=i,a._input=o,a._expandedIndex=p,a.transforms&&a.transforms.length)for(var w=!1!==o.visible&&!1===a.visible,T=L(a,e,r,n),k=0;k<T.length;k++){var A=T[k],M={_template:a._template,type:a.type,uid:a.uid+k};w&&!1===A.visible&&delete A.visible,_.supplyTraceDefaults(A,M,p,n,i),x(M,A),M.index=i,M._input=o,M._fullInput=a,M._expandedIndex=p,M._expandedInput=A,v(M)}else a._fullInput=a,a._expandedInput=a,v(a);s.traceIs(a,"carpetAxis")&&(g[a.carpet]=a),s.traceIs(a,"carpetDependent")&&y.push(i)}for(i=0;i<y.length;i++)if((a=e[y[i]]).visible){var S=g[a.carpet];a._carpet=S,S&&S.visible?(a.xaxis=S.xaxis,a.yaxis=S.yaxis):a.visible=!1}},_.supplyAnimationDefaults=function(t){var e;t=t||{};var r={};function n(e,n){return c.coerce(t||{},r,g,e,n)}if(n("mode"),n("direction"),n("fromcurrent"),Array.isArray(t.frame))for(r.frame=[],e=0;e<t.frame.length;e++)r.frame[e]=_.supplyAnimationFrameDefaults(t.frame[e]||{});else r.frame=_.supplyAnimationFrameDefaults(t.frame||{});if(Array.isArray(t.transition))for(r.transition=[],e=0;e<t.transition.length;e++)r.transition[e]=_.supplyAnimationTransitionDefaults(t.transition[e]||{});else r.transition=_.supplyAnimationTransitionDefaults(t.transition||{});return r},_.supplyAnimationFrameDefaults=function(t){var e={};function r(r,n){return c.coerce(t||{},e,g.frame,r,n)}return r("duration"),r("redraw"),e},_.supplyAnimationTransitionDefaults=function(t){var e={};function r(r,n){return c.coerce(t||{},e,g.transition,r,n)}return r("duration"),r("easing"),e},_.supplyFrameDefaults=function(t){var e={};function r(r,n){return c.coerce(t,e,y,r,n)}return r("group"),r("name"),r("traces"),r("baseframe"),r("data"),r("layout"),e},_.supplyTraceDefaults=function(t,e,r,n,i){var a,o=n.colorway||f.defaults,l=o[r%o.length];function u(r,n){return c.coerce(t,e,_.attributes,r,n)}var h=u("visible");u("type"),u("name",n._traceWord+" "+i),u("uirevision",n.uirevision);var p=_.getModule(e);if(e._module=p,p){var d=p.basePlotModule,v=d.attr,g=d.attributes;if(v&&g){var y=n._subplots,m="";if(h||"gl2d"!==d.name){if(Array.isArray(v))for(a=0;a<v.length;a++){var x=v[a],b=c.coerce(t,e,g,x);y[x]&&c.pushUnique(y[x],b),m+=b}else m=c.coerce(t,e,g,v);y[d.name]&&c.pushUnique(y[d.name],m)}}}return h&&(u("customdata"),u("ids"),u("meta"),s.traceIs(e,"showLegend")?(c.coerce(t,e,p.attributes.showlegend?p.attributes:_.attributes,"showlegend"),u("legend"),u("legendwidth"),u("legendgroup"),u("legendgrouptitle.text"),u("legendrank"),e._dfltShowLegend=!0):e._dfltShowLegend=!1,p&&p.supplyDefaults(t,e,l,n),s.traceIs(e,"noOpacity")||u("opacity"),s.traceIs(e,"notLegendIsolatable")&&(e.visible=!!e.visible),s.traceIs(e,"noHover")||(e.hovertemplate||c.coerceHoverinfo(t,e,n),"parcats"!==e.type&&s.getComponentMethod("fx","supplyDefaults")(t,e,l,n)),p&&p.selectPoints&&u("selectedpoints"),_.supplyTransformDefaults(t,e,n)),e},_.hasMakesDataTransform=E,_.supplyTransformDefaults=function(t,e,r){if(e._length||E(t)){var n=r._globalTransforms||[],i=r._transformModules||[];if(Array.isArray(t.transforms)||0!==n.length)for(var a=t.transforms||[],o=n.concat(a),s=e.transforms=[],l=0;l<o.length;l++){var u,f=o[l],h=f.type,p=w[h],d=!(f._module&&f._module===p),v=p&&"function"==typeof p.transform;p||c.warn("Unrecognized transform type "+h+"."),p&&p.supplyDefaults&&(d||v)?((u=p.supplyDefaults(f,e,r,t)).type=h,u._module=p,c.pushUnique(i,p)):u=c.extendFlat({},f),s.push(u)}}},_.supplyLayoutGlobalDefaults=function(t,e,r){function n(r,n){return c.coerce(t,e,_.layoutAttributes,r,n)}var i=t.template;c.isPlainObject(i)&&(e.template=i,e._template=i.layout,e._dataTemplate=i.data),n("autotypenumbers");var a=c.coerceFont(n,"font"),o=a.size;c.coerceFont(n,"title.font",c.extendFlat({},a,{size:Math.round(1.4*o)})),n("title.text",e._dfltTitle.plot),n("title.xref");var l=n("title.yref");n("title.pad.t"),n("title.pad.r"),n("title.pad.b"),n("title.pad.l");var u=n("title.automargin");n("title.x"),n("title.xanchor"),n("title.y"),n("title.yanchor"),u&&("paper"===l&&(0!==e.title.y&&(e.title.y=1),"auto"===e.title.yanchor&&(e.title.yanchor=0===e.title.y?"top":"bottom")),"container"===l&&("auto"===e.title.y&&(e.title.y=1),"auto"===e.title.yanchor&&(e.title.yanchor=e.title.y<.5?"bottom":"top"))),n("uniformtext.mode")&&n("uniformtext.minsize"),n("autosize",!(t.width&&t.height)),n("width"),n("height"),n("minreducedwidth"),n("minreducedheight"),n("margin.l"),n("margin.r"),n("margin.t"),n("margin.b"),n("margin.pad"),n("margin.autoexpand"),t.width&&t.height&&_.sanitizeMargins(e),s.getComponentMethod("grid","sizeDefaults")(t,e),n("paper_bgcolor"),n("separators",r.decimal+r.thousands),n("hidesources"),n("colorway"),n("datarevision");var f=n("uirevision");n("editrevision",f),n("selectionrevision",f),s.getComponentMethod("modebar","supplyLayoutDefaults")(t,e),s.getComponentMethod("shapes","supplyDrawNewShapeDefaults")(t,e,n),s.getComponentMethod("selections","supplyDrawNewSelectionDefaults")(t,e,n),n("meta"),c.isPlainObject(t.transition)&&(n("transition.duration"),n("transition.easing"),n("transition.ordering")),s.getComponentMethod("calendars","handleDefaults")(t,e,"calendar"),s.getComponentMethod("fx","supplyLayoutGlobalDefaults")(t,e,n),c.coerce(t,e,v,"scattermode")},_.plotAutoSize=function(t,e,r){var n,i,a=t._context||{},s=a.frameMargins,l=c.isPlotDiv(t);if(l&&t.emit("plotly_autosize"),a.fillFrame)n=window.innerWidth,i=window.innerHeight,document.body.style.overflow="hidden";else{var u=l?window.getComputedStyle(t):{};if(n=C(u.width)||C(u.maxWidth)||r.width,i=C(u.height)||C(u.maxHeight)||r.height,o(s)&&s>0){var f=1-2*s;n=Math.round(f*n),i=Math.round(f*i)}}var h=_.layoutAttributes.width.min,p=_.layoutAttributes.height.min;n<h&&(n=h),i<p&&(i=p);var d=!e.width&&Math.abs(r.width-n)>1,v=!e.height&&Math.abs(r.height-i)>1;(v||d)&&(d&&(r.width=n),v&&(r.height=i)),t._initialAutoSize||(t._initialAutoSize={width:n,height:i}),_.sanitizeMargins(r)},_.supplyLayoutModuleDefaults=function(t,e,r,n){var i,a,o,l=s.componentsRegistry,u=e._basePlotModules,f=s.subplotsRegistry.cartesian;for(i in l)(o=l[i]).includeBasePlot&&o.includeBasePlot(t,e);for(var h in u.length||u.push(f),e._has("cartesian")&&(s.getComponentMethod("grid","contentDefaults")(t,e),f.finalizeSubplots(t,e)),e._subplots)e._subplots[h].sort(c.subplotSort);for(a=0;a<u.length;a++)(o=u[a]).supplyLayoutDefaults&&o.supplyLayoutDefaults(t,e,r);var p=e._modules;for(a=0;a<p.length;a++)(o=p[a]).supplyLayoutDefaults&&o.supplyLayoutDefaults(t,e,r);var d=e._transformModules;for(a=0;a<d.length;a++)(o=d[a]).supplyLayoutDefaults&&o.supplyLayoutDefaults(t,e,r,n);for(i in l)(o=l[i]).supplyLayoutDefaults&&o.supplyLayoutDefaults(t,e,r)},_.purge=function(t){var e=t._fullLayout||{};void 0!==e._glcontainer&&(e._glcontainer.selectAll(".gl-canvas").remove(),e._glcontainer.remove(),e._glcanvas=null),e._modeBar&&e._modeBar.destroy(),t._transitionData&&(t._transitionData._interruptCallbacks&&(t._transitionData._interruptCallbacks.length=0),t._transitionData._animationRaf&&window.cancelAnimationFrame(t._transitionData._animationRaf)),c.clearThrottle(),c.clearResponsive(t),delete t.data,delete t.layout,delete t._fullData,delete t._fullLayout,delete t.calcdata,delete t.empty,delete t.fid,delete t.undoqueue,delete t.undonum,delete t.autoplay,delete t.changed,delete t._promises,delete t._redrawTimer,delete t._hmlumcount,delete t._hmpixcount,delete t._transitionData,delete t._transitioning,delete t._initialAutoSize,delete t._transitioningWithDuration,delete t._dragging,delete t._dragged,delete t._dragdata,delete t._hoverdata,delete t._snapshotInProgress,delete t._editing,delete t._mouseDownTime,delete t._legendMouseDownTime,t.removeAllListeners&&t.removeAllListeners()},_.style=function(t){var e,r=t._fullLayout._visibleModules,n=[];for(e=0;e<r.length;e++){var i=r[e];i.style&&c.pushUnique(n,i.style)}for(e=0;e<n.length;e++)n[e](t)},_.sanitizeMargins=function(t){if(t&&t.margin){var e,r=t.width,n=t.height,i=t.margin,a=r-(i.l+i.r),o=n-(i.t+i.b);a<0&&(e=(r-1)/(i.l+i.r),i.l=Math.floor(e*i.l),i.r=Math.floor(e*i.r)),o<0&&(e=(n-1)/(i.t+i.b),i.t=Math.floor(e*i.t),i.b=Math.floor(e*i.b))}},_.clearAutoMarginIds=function(t){t._fullLayout._pushmarginIds={}},_.allowAutoMargin=function(t,e){t._fullLayout._pushmarginIds[e]=1},_.autoMargin=function(t,e,r){var n=t._fullLayout,i=n.width,a=n.height,o=n.margin,s=n.minreducedwidth,l=n.minreducedheight,u=c.constrain(i-o.l-o.r,2,s),f=c.constrain(a-o.t-o.b,2,l),h=Math.max(0,i-u),p=Math.max(0,a-f),d=n._pushmargin,v=n._pushmarginIds;if(!1!==o.autoexpand){if(r){var g=r.pad;if(void 0===g&&(g=Math.min(12,o.l,o.r,o.t,o.b)),h){var y=(r.l+r.r)/h;y>1&&(r.l/=y,r.r/=y)}if(p){var m=(r.t+r.b)/p;m>1&&(r.t/=m,r.b/=m)}var x=void 0!==r.xl?r.xl:r.x,b=void 0!==r.xr?r.xr:r.x,w=void 0!==r.yt?r.yt:r.y,T=void 0!==r.yb?r.yb:r.y;d[e]={l:{val:x,size:r.l+g},r:{val:b,size:r.r+g},b:{val:T,size:r.b+g},t:{val:w,size:r.t+g}},v[e]=1}else delete d[e],delete v[e];if(!n._replotting)return _.doAutoMargin(t)}},_.doAutoMargin=function(t){var e=t._fullLayout,r=e.width,n=e.height;e._size||(e._size={}),P(e);var i=e._size,a=e.margin,l={t:0,b:0,l:0,r:0},u=c.extendFlat({},i),f=a.l,h=a.r,d=a.t,v=a.b,g=e._pushmargin,y=e._pushmarginIds,m=e.minreducedwidth,x=e.minreducedheight;if(!1!==a.autoexpand){for(var b in g)y[b]||delete g[b];var w=t._fullLayout._reservedMargin;for(var T in w)for(var k in w[T]){var A=w[T][k];l[k]=Math.max(l[k],A)}for(var M in g.base={l:{val:0,size:f},r:{val:1,size:h},t:{val:1,size:d},b:{val:0,size:v}},l){var S=0;for(var E in g)"base"!==E&&o(g[E][M].size)&&(S=g[E][M].size>S?g[E][M].size:S);var L=Math.max(0,a[M]-S);l[M]=Math.max(0,l[M]-L)}for(var C in g){var O=g[C].l||{},I=g[C].b||{},D=O.val,z=O.size,R=I.val,F=I.size,B=r-l.r-l.l,N=n-l.t-l.b;for(var j in g){if(o(z)&&g[j].r){var U=g[j].r.val,V=g[j].r.size;if(U>D){var H=(z*U+(V-B)*D)/(U-D),q=(V*(1-D)+(z-B)*(1-U))/(U-D);H+q>f+h&&(f=H,h=q)}}if(o(F)&&g[j].t){var G=g[j].t.val,Z=g[j].t.size;if(G>R){var Y=(F*G+(Z-N)*R)/(G-R),W=(Z*(1-R)+(F-N)*(1-G))/(G-R);Y+W>v+d&&(v=Y,d=W)}}}}}var X=c.constrain(r-a.l-a.r,2,m),J=c.constrain(n-a.t-a.b,2,x),K=Math.max(0,r-X),$=Math.max(0,n-J);if(K){var Q=(f+h)/K;Q>1&&(f/=Q,h/=Q)}if($){var tt=(v+d)/$;tt>1&&(v/=tt,d/=tt)}if(i.l=Math.round(f)+l.l,i.r=Math.round(h)+l.r,i.t=Math.round(d)+l.t,i.b=Math.round(v)+l.b,i.p=Math.round(a.pad),i.w=Math.round(r)-i.l-i.r,i.h=Math.round(n)-i.t-i.b,!e._replotting&&(_.didMarginChange(u,i)||function(t){if("_redrawFromAutoMarginCount"in t._fullLayout)return!1;var e=p.list(t,"",!0);for(var r in e)if(e[r].autoshift||e[r].shift)return!0;return!1}(t))){"_redrawFromAutoMarginCount"in e?e._redrawFromAutoMarginCount++:e._redrawFromAutoMarginCount=1;var et=3*(1+Object.keys(y).length);if(e._redrawFromAutoMarginCount<et)return s.call("_doPlot",t);e._size=u,c.warn("Too many auto-margin redraws.")}!function(t){var e=p.list(t,"",!0);["_adjustTickLabelsOverflow","_hideCounterAxisInsideTickLabels"].forEach((function(t){for(var r=0;r<e.length;r++){var n=e[r][t];n&&n()}}))}(t)};var O=["l","r","t","b","p","w","h"];function I(t,e,r){var n=!1,i=[_.previousPromises,function(){if(t._transitionData)return t._transitioning=!1,function(t){var e=Promise.resolve();if(!t)return e;for(;t.length;)e=e.then(t.shift());return e}(t._transitionData._interruptCallbacks)},r.prepareFn,_.rehover,_.reselect,function(){return t.emit("plotly_transitioning",[]),new Promise((function(i){t._transitioning=!0,e.duration>0&&(t._transitioningWithDuration=!0),t._transitionData._interruptCallbacks.push((function(){n=!0})),r.redraw&&t._transitionData._interruptCallbacks.push((function(){return s.call("redraw",t)})),t._transitionData._interruptCallbacks.push((function(){t.emit("plotly_transitioninterrupted",[])}));var a=0,o=0;function l(){return a++,function(){var e;o++,n||o!==a||(e=i,t._transitionData&&(function(t){if(t)for(;t.length;)t.shift()}(t._transitionData._interruptCallbacks),Promise.resolve().then((function(){if(r.redraw)return s.call("redraw",t)})).then((function(){t._transitioning=!1,t._transitioningWithDuration=!1,t.emit("plotly_transitioned",[])})).then(e)))}}r.runFn(l),setTimeout(l())}))}],a=c.syncOrAsync(i,t);return a&&a.then||(a=Promise.resolve()),a.then((function(){return t}))}_.didMarginChange=function(t,e){for(var r=0;r<O.length;r++){var n=O[r],i=t[n],a=e[n];if(!o(i)||Math.abs(a-i)>1)return!0}return!1},_.graphJson=function(t,e,r,n,i,a){(i&&e&&!t._fullData||i&&!e&&!t._fullLayout)&&_.supplyDefaults(t);var o=i?t._fullData:t.data,s=i?t._fullLayout:t.layout,l=(t._transitionData||{})._frames;function u(t,e){if("function"==typeof t)return e?"_function_":null;if(c.isPlainObject(t)){var n,i={};return Object.keys(t).sort().forEach((function(a){if(-1===["_","["].indexOf(a.charAt(0)))if("function"!=typeof t[a]){if("keepdata"===r){if("src"===a.substr(a.length-3))return}else if("keepstream"===r){if("string"==typeof(n=t[a+"src"])&&n.indexOf(":")>0&&!c.isPlainObject(t.stream))return}else if("keepall"!==r&&"string"==typeof(n=t[a+"src"])&&n.indexOf(":")>0)return;i[a]=u(t[a],e)}else e&&(i[a]="_function")})),i}return Array.isArray(t)?t.map((function(t){return u(t,e)})):c.isTypedArray(t)?c.simpleMap(t,c.identity):c.isJSDate(t)?c.ms2DateTimeLocal(+t):t}var f={data:(o||[]).map((function(t){var r=u(t);return e&&delete r.fit,r}))};if(!e&&(f.layout=u(s),i)){var h=s._size;f.layout.computed={margin:{b:h.b,l:h.l,r:h.r,t:h.t}}}return l&&(f.frames=u(l)),a&&(f.config=u(t._context,!0)),"object"===n?f:JSON.stringify(f)},_.modifyFrames=function(t,e){var r,n,i,a=t._transitionData._frames,o=t._transitionData._frameHash;for(r=0;r<e.length;r++)switch((n=e[r]).type){case"replace":i=n.value;var s=(a[n.index]||{}).name,l=i.name;a[n.index]=o[l]=i,l!==s&&(delete o[s],o[l]=i);break;case"insert":o[(i=n.value).name]=i,a.splice(n.index,0,i);break;case"delete":delete o[(i=a[n.index]).name],a.splice(n.index,1)}return Promise.resolve()},_.computeFrame=function(t,e){var r,n,i,a,o=t._transitionData._frameHash;if(!e)throw new Error("computeFrame must be given a string frame name");var s=o[e.toString()];if(!s)return!1;for(var l=[s],u=[s.name];s.baseframe&&(s=o[s.baseframe.toString()])&&-1===u.indexOf(s.name);)l.push(s),u.push(s.name);for(var c={};s=l.pop();)if(s.layout&&(c.layout=_.extendLayout(c.layout,s.layout)),s.data){if(c.data||(c.data=[]),!(n=s.traces))for(n=[],r=0;r<s.data.length;r++)n[r]=r;for(c.traces||(c.traces=[]),r=0;r<s.data.length;r++)null!=(i=n[r])&&(-1===(a=c.traces.indexOf(i))&&(a=c.data.length,c.traces[a]=i),c.data[a]=_.extendTrace(c.data[a],s.data[r]))}return c},_.recomputeFrameHash=function(t){for(var e=t._transitionData._frameHash={},r=t._transitionData._frames,n=0;n<r.length;n++){var i=r[n];i&&i.name&&(e[i.name]=i)}},_.extendObjectWithContainers=function(t,e,r){var n,i,a,o,s,l,u,f=c.extendDeepNoArrays({},e||{}),h=c.expandObjectPaths(f),p={};if(r&&r.length)for(a=0;a<r.length;a++)void 0===(i=(n=c.nestedProperty(h,r[a])).get())?c.nestedProperty(p,r[a]).set(null):(n.set(null),c.nestedProperty(p,r[a]).set(i));if(t=c.extendDeepNoArrays(t||{},h),r&&r.length)for(a=0;a<r.length;a++)if(l=c.nestedProperty(p,r[a]).get()){for(u=(s=c.nestedProperty(t,r[a])).get(),Array.isArray(u)||(u=[],s.set(u)),o=0;o<l.length;o++){var d=l[o];u[o]=null===d?null:_.extendObjectWithContainers(u[o],d)}s.set(u)}return t},_.dataArrayContainers=["transforms","dimensions"],_.layoutArrayContainers=s.layoutArrayContainers,_.extendTrace=function(t,e){return _.extendObjectWithContainers(t,e,_.dataArrayContainers)},_.extendLayout=function(t,e){return _.extendObjectWithContainers(t,e,_.layoutArrayContainers)},_.transition=function(t,e,r,n,i,a){var o={redraw:i.redraw},s={},l=[];return o.prepareFn=function(){for(var i=Array.isArray(e)?e.length:0,a=n.slice(0,i),o=0;o<a.length;o++){var u=a[o],f=t._fullData[u]._module;if(f){if(f.animatable){var h=f.basePlotModule.name;s[h]||(s[h]=[]),s[h].push(u)}t.data[a[o]]=_.extendTrace(t.data[a[o]],e[o])}}var p=c.expandObjectPaths(c.extendDeepNoArrays({},r)),d=/^[xy]axis[0-9]*$/;for(var v in p)d.test(v)&&delete p[v].range;_.extendLayout(t.layout,p),delete t.calcdata,_.supplyDefaults(t),_.doCalcdata(t);var g=c.expandObjectPaths(r);if(g){var y=t._fullLayout._plots;for(var m in y){var x=y[m],b=x.xaxis,w=x.yaxis,T=b.range.slice(),k=w.range.slice(),A=null,M=null,S=null,E=null;Array.isArray(g[b._name+".range"])?A=g[b._name+".range"].slice():Array.isArray((g[b._name]||{}).range)&&(A=g[b._name].range.slice()),Array.isArray(g[w._name+".range"])?M=g[w._name+".range"].slice():Array.isArray((g[w._name]||{}).range)&&(M=g[w._name].range.slice()),T&&A&&(b.r2l(T[0])!==b.r2l(A[0])||b.r2l(T[1])!==b.r2l(A[1]))&&(S={xr0:T,xr1:A}),k&&M&&(w.r2l(k[0])!==w.r2l(M[0])||w.r2l(k[1])!==w.r2l(M[1]))&&(E={yr0:k,yr1:M}),(S||E)&&l.push(c.extendFlat({plotinfo:x},S,E))}}return Promise.resolve()},o.runFn=function(e){var n,i,o=t._fullLayout._basePlotModules,u=l.length;if(r)for(i=0;i<o.length;i++)o[i].transitionAxes&&o[i].transitionAxes(t,l,a,e);for(var f in u?((n=c.extendFlat({},a)).duration=0,delete s.cartesian):n=a,s){var h=s[f];t._fullData[h[0]]._module.basePlotModule.plot(t,h,n,e)}},I(t,a,o)},_.transitionFromReact=function(t,e,r,n){var i=t._fullLayout,a=i.transition,o={},s=[];return o.prepareFn=function(){var t=i._plots;for(var a in o.redraw=!1,"some"===e.anim&&(o.redraw=!0),"some"===r.anim&&(o.redraw=!0),t){var l=t[a],u=l.xaxis,f=l.yaxis,h=n[u._name].range.slice(),p=n[f._name].range.slice(),d=u.range.slice(),v=f.range.slice();u.setScale(),f.setScale();var g=null,y=null;u.r2l(h[0])===u.r2l(d[0])&&u.r2l(h[1])===u.r2l(d[1])||(g={xr0:h,xr1:d}),f.r2l(p[0])===f.r2l(v[0])&&f.r2l(p[1])===f.r2l(v[1])||(y={yr0:p,yr1:v}),(g||y)&&s.push(c.extendFlat({plotinfo:l},g,y))}return Promise.resolve()},o.runFn=function(r){for(var n,i,o,l=t._fullData,u=t._fullLayout._basePlotModules,f=[],h=0;h<l.length;h++)f.push(h);function p(){if(t._fullLayout)for(var e=0;e<u.length;e++)u[e].transitionAxes&&u[e].transitionAxes(t,s,n,r)}function d(){if(t._fullLayout)for(var e=0;e<u.length;e++)u[e].plot(t,o,i,r)}s.length&&e.anim?"traces first"===a.ordering?(n=c.extendFlat({},a,{duration:0}),o=f,i=a,setTimeout(p,a.duration),d()):(n=a,o=null,i=c.extendFlat({},a,{duration:0}),setTimeout(d,n.duration),p()):s.length?(n=a,p()):e.anim&&(o=f,i=a,d())},I(t,a,o)},_.doCalcdata=function(t,e){var r,n,i,a,o=p.list(t),u=t._fullData,f=t._fullLayout,d=new Array(u.length),v=(t.calcdata||[]).slice();for(t.calcdata=d,f._numBoxes=0,f._numViolins=0,f._violinScaleGroupStats={},t._hmpixcount=0,t._hmlumcount=0,f._piecolormap={},f._sunburstcolormap={},f._treemapcolormap={},f._iciclecolormap={},f._funnelareacolormap={},i=0;i<u.length;i++)Array.isArray(e)&&-1===e.indexOf(i)&&(d[i]=v[i]);for(i=0;i<u.length;i++)(r=u[i])._arrayAttrs=l.findArrayAttributes(r),r._extremes={};var g=f._subplots.polar||[];for(i=0;i<g.length;i++)o.push(f[g[i]].radialaxis,f[g[i]].angularaxis);for(var y in f._colorAxes){var m=f[y];!1!==m.cauto&&(delete m.cmin,delete m.cmax)}var x=!1;function b(e){if(r=u[e],n=r._module,!0===r.visible&&r.transforms){if(n&&n.calc){var i=n.calc(t,r);i[0]&&i[0].t&&i[0].t._scene&&delete i[0].t._scene.dirty}for(a=0;a<r.transforms.length;a++){var o=r.transforms[a];(n=w[o.type])&&n.calcTransform&&(r._hasCalcTransform=!0,x=!0,n.calcTransform(t,r,o))}}}function _(e,i){if(r=u[e],!!(n=r._module).isContainer===i){var o=[];if(!0===r.visible&&0!==r._length){delete r._indexToPoints;var s=r.transforms||[];for(a=s.length-1;a>=0;a--)if(s[a].enabled){r._indexToPoints=s[a]._indexToPoints;break}n&&n.calc&&(o=n.calc(t,r))}Array.isArray(o)&&o[0]||(o=[{x:h,y:h}]),o[0].t||(o[0].t={}),o[0].trace=r,d[e]=o}}for(z(o,u,f),i=0;i<u.length;i++)_(i,!0);for(i=0;i<u.length;i++)b(i);for(x&&z(o,u,f),i=0;i<u.length;i++)_(i,!0);for(i=0;i<u.length;i++)_(i,!1);R(t);var T=function(t,e){var r,n,i,a,o,l=[];function u(t,r,n){var i=r._id.charAt(0);if("histogram2dcontour"===t){var a=r._counterAxes[0],o=p.getFromId(e,a),s="x"===i||"x"===a&&"category"===o.type,l="y"===i||"y"===a&&"category"===o.type;return function(t,e){return 0===t||0===e||s&&t===n[e].length-1||l&&e===n.length-1?-1:("y"===i?e:t)-1}}return function(t,e){return"y"===i?e:t}}var f={min:function(t){return c.aggNums(Math.min,null,t)},max:function(t){return c.aggNums(Math.max,null,t)},sum:function(t){return c.aggNums((function(t,e){return t+e}),null,t)},total:function(t){return c.aggNums((function(t,e){return t+e}),null,t)},mean:function(t){return c.mean(t)},median:function(t){return c.median(t)}};function h(t,e){return t[1]-e[1]}function d(t,e){return e[1]-t[1]}for(r=0;r<t.length;r++){var v=t[r];if("category"===v.type){var g=v.categoryorder.match(D);if(g){var y=g[1],m=g[2],x=v._id.charAt(0),b="x"===x,_=[];for(n=0;n<v._categories.length;n++)_.push([v._categories[n],[]]);for(n=0;n<v._traceIndices.length;n++){var w=v._traceIndices[n],T=e._fullData[w];if(!0===T.visible){var k=T.type;s.traceIs(T,"histogram")&&(delete T._xautoBinFinished,delete T._yautoBinFinished);var A="splom"===k,M="scattergl"===k,S=e.calcdata[w];for(i=0;i<S.length;i++){var E,L,C=S[i];if(A){var P=T._axesDim[v._id];if(!b){var O=T._diag[P][0];O&&(v=e._fullLayout[p.id2name(O)])}var I=C.trace.dimensions[P].values;for(a=0;a<I.length;a++)for(E=v._categoriesMap[I[a]],o=0;o<C.trace.dimensions.length;o++)if(o!==P){var z=C.trace.dimensions[o];_[E][1].push(z.values[a])}}else if(M){for(a=0;a<C.t.x.length;a++)b?(E=C.t.x[a],L=C.t.y[a]):(E=C.t.y[a],L=C.t.x[a]),_[E][1].push(L);C.t&&C.t._scene&&delete C.t._scene.dirty}else if(C.hasOwnProperty("z")){L=C.z;var R=u(T.type,v,L);for(a=0;a<L.length;a++)for(o=0;o<L[a].length;o++)(E=R(o,a))+1&&_[E][1].push(L[a][o])}else for(void 0===(E=C.p)&&(E=C[x]),void 0===(L=C.s)&&(L=C.v),void 0===L&&(L=b?C.y:C.x),Array.isArray(L)||(L=void 0===L?[]:[L]),a=0;a<L.length;a++)_[E][1].push(L[a])}}}v._categoriesValue=_;var F=[];for(n=0;n<_.length;n++)F.push([_[n][0],f[y](_[n][1])]);F.sort("descending"===m?d:h),v._categoriesAggregatedValue=F,v._initialCategories=F.map((function(t){return t[0]})),l=l.concat(v.sortByInitialCategories())}}}return l}(o,t);if(T.length){for(f._numBoxes=0,f._numViolins=0,i=0;i<T.length;i++)_(T[i],!0);for(i=0;i<T.length;i++)_(T[i],!1);R(t)}s.getComponentMethod("fx","calc")(t),s.getComponentMethod("errorbars","calc")(t)};var D=/(total|sum|min|max|mean|median) (ascending|descending)/;function z(t,e,r){var n={};function i(t){t.clearCalc(),"multicategory"===t.type&&t.setupMultiCategory(e),n[t._id]=1}c.simpleMap(t,i);for(var a=r._axisMatchGroups||[],o=0;o<a.length;o++)for(var s in a[o])n[s]||i(r[p.id2name(s)])}function R(t){var e,r,n,i=t._fullLayout,a=i._visibleModules,o={};for(r=0;r<a.length;r++){var s=a[r],l=s.crossTraceCalc;if(l){var u=s.basePlotModule.name;o[u]?c.pushUnique(o[u],l):o[u]=[l]}}for(n in o){var f=o[n],h=i._subplots[n];if(Array.isArray(h))for(e=0;e<h.length;e++){var p=h[e],d="cartesian"===n?i._plots[p]:i[p];for(r=0;r<f.length;r++)f[r](t,d,p)}else for(r=0;r<f.length;r++)f[r](t)}}_.rehover=function(t){t._fullLayout._rehover&&t._fullLayout._rehover()},_.redrag=function(t){t._fullLayout._redrag&&t._fullLayout._redrag()},_.reselect=function(t){var e=t._fullLayout,r=(t.layout||{}).selections,n=e._previousSelections;e._previousSelections=r;var i=e._reselect||JSON.stringify(r)!==JSON.stringify(n);s.getComponentMethod("selections","reselect")(t,i)},_.generalUpdatePerTraceModule=function(t,e,r,n){var i,a=e.traceHash,o={};for(i=0;i<r.length;i++){var s=r[i],l=s[0].trace;l.visible&&(o[l.type]=o[l.type]||[],o[l.type].push(s))}for(var u in a)if(!o[u]){var f=a[u][0];f[0].trace.visible=!1,o[u]=[f]}for(var h in o){var p=o[h];p[0][0].trace._module.plot(t,e,c.filterVisible(p),n)}e.traceHash=o},_.plotBasePlot=function(t,e,r,n,i){var a=s.getModule(t),o=m(e.calcdata,a)[0];a.plot(e,o,n,i)},_.cleanBasePlot=function(t,e,r,n,i){var a=i._has&&i._has(t),o=r._has&&r._has(t);a&&!o&&i["_"+t+"layer"].selectAll("g.trace").remove()}},9813:function(t){"use strict";t.exports={attr:"subplot",name:"polar",axisNames:["angularaxis","radialaxis"],axisName2dataArray:{angularaxis:"theta",radialaxis:"r"},layerNames:["draglayer","plotbg","backplot","angular-grid","radial-grid","frontplot","angular-line","radial-line","angular-axis","radial-axis"],radialDragBoxSize:50,angularDragBoxSize:30,cornerLen:25,cornerHalfWidth:2,MINDRAG:8,MINZOOM:20,OFFEDGE:20}},10869:function(t,e,r){"use strict";var n=r(71828),i=r(61082).tester,a=n.findIndexOfMin,o=n.isAngleInsideSector,s=n.angleDelta,l=n.angleDist;function u(t,e,r,n){var i,a,o=n[0],s=n[1],l=f(Math.sin(e)-Math.sin(t)),u=f(Math.cos(e)-Math.cos(t)),c=Math.tan(r),h=f(1/c),p=l/u,d=s-p*o;return h?l&&u?a=c*(i=d/(c-p)):u?(i=s*h,a=s):(i=o,a=o*c):l&&u?(i=0,a=d):u?(i=0,a=s):i=a=NaN,[i,a]}function c(t,e,r,i){return n.isFullCircle([e,r])?function(t,e){var r,n=e.length,i=new Array(n+1);for(r=0;r<n;r++){var a=e[r];i[r]=[t*Math.cos(a),t*Math.sin(a)]}return i[r]=i[0].slice(),i}(t,i):function(t,e,r,i){var s,c,f=i.length,h=[];function p(e){return[t*Math.cos(e),t*Math.sin(e)]}function d(t,e,r){return u(t,e,r,p(t))}function v(t){return n.mod(t,f)}function g(t){return o(t,[e,r])}var y=a(i,(function(t){return g(t)?l(t,e):1/0})),m=d(i[y],i[v(y-1)],e);for(h.push(m),s=y,c=0;c<f;s++,c++){var x=i[v(s)];if(!g(x))break;h.push(p(x))}var b=a(i,(function(t){return g(t)?l(t,r):1/0})),_=d(i[b],i[v(b+1)],r);return h.push(_),h.push([0,0]),h.push(h[0].slice()),h}(t,e,r,i)}function f(t){return Math.abs(t)>1e-10?t:0}function h(t,e,r){e=e||0,r=r||0;for(var n=t.length,i=new Array(n),a=0;a<n;a++){var o=t[a];i[a]=[e+o[0],r-o[1]]}return i}t.exports={isPtInsidePolygon:function(t,e,r,n,a){if(!o(e,n))return!1;var s,l;r[0]<r[1]?(s=r[0],l=r[1]):(s=r[1],l=r[0]);var u=i(c(s,n[0],n[1],a)),f=i(c(l,n[0],n[1],a)),h=[t*Math.cos(e),t*Math.sin(e)];return f.contains(h)&&!u.contains(h)},findPolygonOffset:function(t,e,r,n){for(var i=1/0,a=1/0,o=c(t,e,r,n),s=0;s<o.length;s++){var l=o[s];i=Math.min(i,l[0]),a=Math.min(a,-l[1])}return[i,a]},findEnclosingVertexAngles:function(t,e){var r=a(e,(function(e){var r=s(e,t);return r>0?r:1/0})),i=n.mod(r+1,e.length);return[e[r],e[i]]},findIntersectionXY:u,findXYatLength:function(t,e,r,n){var i=-e*r,a=e*e+1,o=2*(e*i-r),s=i*i+r*r-t*t,l=Math.sqrt(o*o-4*a*s),u=(-o+l)/(2*a),c=(-o-l)/(2*a);return[[u,e*u+i+n],[c,e*c+i+n]]},clampTiny:f,pathPolygon:function(t,e,r,n,i,a){return"M"+h(c(t,e,r,n),i,a).join("L")},pathPolygonAnnulus:function(t,e,r,n,i,a,o){var s,l;t<e?(s=t,l=e):(s=e,l=t);var u=h(c(s,r,n,i),a,o);return"M"+h(c(l,r,n,i),a,o).reverse().join("L")+"M"+u.join("L")}}},23580:function(t,e,r){"use strict";var n=r(27659).AU,i=r(71828).counterRegex,a=r(77997),o=r(9813),s=o.attr,l=o.name,u=i(l),c={};c[s]={valType:"subplotid",dflt:l,editType:"calc"},t.exports={attr:s,name:l,idRoot:l,idRegex:u,attrRegex:u,attributes:c,layoutAttributes:r(73812),supplyLayoutDefaults:r(68993),plot:function(t){for(var e=t._fullLayout,r=t.calcdata,i=e._subplots[l],o=0;o<i.length;o++){var s=i[o],u=n(r,l,s),c=e[s]._subplot;c||(c=a(t,s),e[s]._subplot=c),c.plot(u,e,t._promises)}},clean:function(t,e,r,n){for(var i=n._subplots[l]||[],a=n._has&&n._has("gl"),o=e._has&&e._has("gl"),s=a&&!o,u=0;u<i.length;u++){var c=i[u],f=n[c]._subplot;if(!e[c]&&f)for(var h in f.framework.remove(),f.layers["radial-axis-title"].remove(),f.clipPaths)f.clipPaths[h].remove();s&&f._scene&&(f._scene.destroy(),f._scene=null)}},toSVG:r(93612).toSVG}},73812:function(t,e,r){"use strict";var n=r(22399),i=r(13838),a=r(27670).Y,o=r(71828).extendFlat,s=r(30962).overrideAll,l=s({color:i.color,showline:o({},i.showline,{dflt:!0}),linecolor:i.linecolor,linewidth:i.linewidth,showgrid:o({},i.showgrid,{dflt:!0}),gridcolor:i.gridcolor,gridwidth:i.gridwidth,griddash:i.griddash},"plot","from-root"),u=s({tickmode:i.minor.tickmode,nticks:i.nticks,tick0:i.tick0,dtick:i.dtick,tickvals:i.tickvals,ticktext:i.ticktext,ticks:i.ticks,ticklen:i.ticklen,tickwidth:i.tickwidth,tickcolor:i.tickcolor,ticklabelstep:i.ticklabelstep,showticklabels:i.showticklabels,labelalias:i.labelalias,showtickprefix:i.showtickprefix,tickprefix:i.tickprefix,showticksuffix:i.showticksuffix,ticksuffix:i.ticksuffix,showexponent:i.showexponent,exponentformat:i.exponentformat,minexponent:i.minexponent,separatethousands:i.separatethousands,tickfont:i.tickfont,tickangle:i.tickangle,tickformat:i.tickformat,tickformatstops:i.tickformatstops,layer:i.layer},"plot","from-root"),c={visible:o({},i.visible,{dflt:!0}),type:o({},i.type,{values:["-","linear","log","date","category"]}),autotypenumbers:i.autotypenumbers,autorangeoptions:{minallowed:i.autorangeoptions.minallowed,maxallowed:i.autorangeoptions.maxallowed,clipmin:i.autorangeoptions.clipmin,clipmax:i.autorangeoptions.clipmax,include:i.autorangeoptions.include,editType:"plot"},autorange:o({},i.autorange,{editType:"plot"}),rangemode:{valType:"enumerated",values:["tozero","nonnegative","normal"],dflt:"tozero",editType:"calc"},minallowed:o({},i.minallowed,{editType:"plot"}),maxallowed:o({},i.maxallowed,{editType:"plot"}),range:o({},i.range,{items:[{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}},{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}}],editType:"plot"}),categoryorder:i.categoryorder,categoryarray:i.categoryarray,angle:{valType:"angle",editType:"plot"},side:{valType:"enumerated",values:["clockwise","counterclockwise"],dflt:"clockwise",editType:"plot"},title:{text:o({},i.title.text,{editType:"plot",dflt:""}),font:o({},i.title.font,{editType:"plot"}),editType:"plot"},hoverformat:i.hoverformat,uirevision:{valType:"any",editType:"none"},editType:"calc",_deprecated:{title:i._deprecated.title,titlefont:i._deprecated.titlefont}};o(c,l,u);var f={visible:o({},i.visible,{dflt:!0}),type:{valType:"enumerated",values:["-","linear","category"],dflt:"-",editType:"calc",_noTemplating:!0},autotypenumbers:i.autotypenumbers,categoryorder:i.categoryorder,categoryarray:i.categoryarray,thetaunit:{valType:"enumerated",values:["radians","degrees"],dflt:"degrees",editType:"calc"},period:{valType:"number",editType:"calc",min:0},direction:{valType:"enumerated",values:["counterclockwise","clockwise"],dflt:"counterclockwise",editType:"calc"},rotation:{valType:"angle",editType:"calc"},hoverformat:i.hoverformat,uirevision:{valType:"any",editType:"none"},editType:"calc"};o(f,l,u),t.exports={domain:a({name:"polar",editType:"plot"}),sector:{valType:"info_array",items:[{valType:"number",editType:"plot"},{valType:"number",editType:"plot"}],dflt:[0,360],editType:"plot"},hole:{valType:"number",min:0,max:1,dflt:0,editType:"plot"},bgcolor:{valType:"color",editType:"plot",dflt:n.background},radialaxis:c,angularaxis:f,gridshape:{valType:"enumerated",values:["circular","linear"],dflt:"circular",editType:"plot"},uirevision:{valType:"any",editType:"none"},editType:"calc"}},68993:function(t,e,r){"use strict";var n=r(71828),i=r(7901),a=r(44467),o=r(49119),s=r(27659).NG,l=r(26218),u=r(38701),c=r(96115),f=r(89426),h=r(15258),p=r(92128),d=r(23074),v=r(4322),g=r(73812),y=r(12101),m=r(9813),x=m.axisNames;function b(t,e,r,o){var v=r("bgcolor");o.bgColor=i.combine(v,o.paper_bgcolor);var b=r("sector");r("hole");var w,T=s(o.fullData,m.name,o.id),k=o.layoutOut;function A(t,e){return r(w+"."+t,e)}for(var M=0;M<x.length;M++){w=x[M],n.isPlainObject(t[w])||(t[w]={});var S=t[w],E=a.newContainer(e,w);E._id=E._name=w,E._attr=o.id+"."+w,E._traceIndices=T.map((function(t){return t._expandedIndex}));var L=m.axisName2dataArray[w],C=_(S,E,A,T,L,o);h(S,E,A,{axData:T,dataAttr:L});var P=A("visible");switch(y(E,e,k),A("uirevision",e.uirevision),E._m=1,w){case"radialaxis":A("minallowed"),A("maxallowed");var O,I=A("range"),D=E.getAutorangeDflt(I),z=A("autorange",D);!I||(null!==I[0]||null!==I[1])&&(null!==I[0]&&null!==I[1]||"reversed"!==z&&!0!==z)&&(null===I[0]||"min"!==z&&"max reversed"!==z)&&(null===I[1]||"max"!==z&&"min reversed"!==z)||(I=void 0,delete E.range,E.autorange=!0,O=!0),O||(z=A("autorange",D=E.getAutorangeDflt(I))),S.autorange=z,z&&(d(A,z,I),"linear"!==C&&"-"!==C||A("rangemode"),E.isReversed()&&(E._m=-1)),E.cleanRange("range",{dfltRange:[0,1]});break;case"angularaxis":if("date"===C){n.log("Polar plots do not support date angular axes yet.");for(var R=0;R<T.length;R++)T[R].visible=!1;C=S.type=E.type="linear"}A("linear"===C?"thetaunit":"period");var F=A("direction");A("rotation",{counterclockwise:0,clockwise:90}[F])}if(f(S,E,A,E.type,{tickSuffixDflt:"degrees"===E.thetaunit?"°":void 0}),P){var B,N,j,U,V=o.font||{};N=(B=A("color"))===S.color?B:V.color,j=V.size,U=V.family,l(S,E,A,E.type),c(S,E,A,E.type,{font:{color:N,size:j,family:U}}),u(S,E,A,{outerTicks:!0}),p(S,E,A,{dfltColor:B,bgColor:o.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:g[w]}),A("layer"),"radialaxis"===w&&(A("side"),A("angle",b[0]),A("title.text"),n.coerceFont(A,"title.font",{color:N,size:n.bigFont(j),family:U}))}"category"!==C&&A("hoverformat"),E._input=S}"category"===e.angularaxis.type&&r("gridshape")}function _(t,e,r,n,i,a){var o=r("autotypenumbers",a.autotypenumbersDflt);if("-"===r("type")){for(var s,l=0;l<n.length;l++)if(n[l].visible){s=n[l];break}s&&s[i]&&(e.type=v(s[i],"gregorian",{noMultiCategory:!0,autotypenumbers:o})),"-"===e.type?e.type="linear":t.type=e.type}return e.type}t.exports=function(t,e,r){o(t,e,r,{type:m.name,attributes:g,handleDefaults:b,font:e.font,autotypenumbersDflt:e.autotypenumbers,paper_bgcolor:e.paper_bgcolor,fullData:r,layoutOut:e})}},77997:function(t,e,r){"use strict";var n=r(39898),i=r(84267),a=r(73972),o=r(71828),s=o.strRotate,l=o.strTranslate,u=r(7901),c=r(91424),f=r(74875),h=r(89298),p=r(21994),d=r(12101),v=r(71739).doAutoRange,g=r(29323),y=r(28569),m=r(30211),x=r(92998),b=r(47322).prepSelect,_=r(47322).selectOnClick,w=r(47322).clearOutline,T=r(6964),k=r(33306),A=r(61549).redrawReglTraces,M=r(18783).MID_SHIFT,S=r(9813),E=r(10869),L=r(23893),C=L.smith,P=L.reactanceArc,O=L.resistanceArc,I=L.smithTransform,D=o._,z=o.mod,R=o.deg2rad,F=o.rad2deg;function B(t,e,r){this.isSmith=r||!1,this.id=e,this.gd=t,this._hasClipOnAxisFalse=null,this.vangles=null,this.radialAxisAngle=null,this.traceHash={},this.layers={},this.clipPaths={},this.clipIds={},this.viewInitial={};var n=t._fullLayout,i="clip"+n._uid+e;this.clipIds.forTraces=i+"-for-traces",this.clipPaths.forTraces=n._clips.append("clipPath").attr("id",this.clipIds.forTraces),this.clipPaths.forTraces.append("path"),this.framework=n["_"+(r?"smith":"polar")+"layer"].append("g").attr("class",e),this.getHole=function(t){return this.isSmith?0:t.hole},this.getSector=function(t){return this.isSmith?[0,360]:t.sector},this.getRadial=function(t){return this.isSmith?t.realaxis:t.radialaxis},this.getAngular=function(t){return this.isSmith?t.imaginaryaxis:t.angularaxis},r||(this.radialTickLayout=null,this.angularTickLayout=null)}var N=B.prototype;function j(t){var e=t.ticks+String(t.ticklen)+String(t.showticklabels);return"side"in t&&(e+=t.side),e}function U(t,e){return e[o.findIndexOfMin(e,(function(e){return o.angleDist(t,e)}))]}function V(t,e,r){return e?(t.attr("display",null),t.attr(r)):t&&t.attr("display","none"),t}t.exports=function(t,e,r){return new B(t,e,r)},N.plot=function(t,e){for(var r=this,n=e[r.id],i=!1,a=0;a<t.length;a++)if(!1===t[a][0].trace.cliponaxis){i=!0;break}r._hasClipOnAxisFalse=i,r.updateLayers(e,n),r.updateLayout(e,n),f.generalUpdatePerTraceModule(r.gd,r,t,n),r.updateFx(e,n),r.isSmith&&(delete n.realaxis.range,delete n.imaginaryaxis.range)},N.updateLayers=function(t,e){var r=this,i=r.isSmith,a=r.layers,o=r.getRadial(e),s=r.getAngular(e),l=S.layerNames,u=l.indexOf("frontplot"),c=l.slice(0,u),f="below traces"===s.layer,h="below traces"===o.layer;f&&c.push("angular-line"),h&&c.push("radial-line"),f&&c.push("angular-axis"),h&&c.push("radial-axis"),c.push("frontplot"),f||c.push("angular-line"),h||c.push("radial-line"),f||c.push("angular-axis"),h||c.push("radial-axis");var p=(i?"smith":"polar")+"sublayer",d=r.framework.selectAll("."+p).data(c,String);d.enter().append("g").attr("class",(function(t){return p+" "+t})).each((function(t){var e=a[t]=n.select(this);switch(t){case"frontplot":i||e.append("g").classed("barlayer",!0),e.append("g").classed("scatterlayer",!0);break;case"backplot":e.append("g").classed("maplayer",!0);break;case"plotbg":a.bg=e.append("path");break;case"radial-grid":case"angular-grid":e.style("fill","none");break;case"radial-line":e.append("line").style("fill","none");break;case"angular-line":e.append("path").style("fill","none")}})),d.order()},N.updateLayout=function(t,e){var r=this,n=r.layers,i=t._size,a=r.getRadial(e),o=r.getAngular(e),s=e.domain.x,f=e.domain.y;r.xOffset=i.l+i.w*s[0],r.yOffset=i.t+i.h*(1-f[1]);var h=r.xLength=i.w*(s[1]-s[0]),p=r.yLength=i.h*(f[1]-f[0]),d=r.getSector(e);r.sectorInRad=d.map(R);var v,g,y,m,x,b=r.sectorBBox=function(t){var e,r=t[0],n=t[1]-r,i=z(r,360),a=i+n,o=Math.cos(R(i)),s=Math.sin(R(i)),l=Math.cos(R(a)),u=Math.sin(R(a));return e=i<=90&&a>=90||i>90&&a>=450?1:s<=0&&u<=0?0:Math.max(s,u),[i<=180&&a>=180||i>180&&a>=540?-1:o>=0&&l>=0?0:Math.min(o,l),i<=270&&a>=270||i>270&&a>=630?-1:s>=0&&u>=0?0:Math.min(s,u),a>=360?1:o<=0&&l<=0?0:Math.max(o,l),e]}(d),_=b[2]-b[0],w=b[3]-b[1],T=p/h,k=Math.abs(w/_);T>k?(v=h,x=(p-(g=h*k))/i.h/2,y=[s[0],s[1]],m=[f[0]+x,f[1]-x]):(g=p,x=(h-(v=p/k))/i.w/2,y=[s[0]+x,s[1]-x],m=[f[0],f[1]]),r.xLength2=v,r.yLength2=g,r.xDomain2=y,r.yDomain2=m;var A,M=r.xOffset2=i.l+i.w*y[0],S=r.yOffset2=i.t+i.h*(1-m[1]),E=r.radius=v/_,L=r.innerRadius=r.getHole(e)*E,C=r.cx=M-E*b[0],P=r.cy=S+E*b[3],O=r.cxx=C-M,I=r.cyy=P-S,D=a.side;"counterclockwise"===D?(A=D,D="top"):"clockwise"===D&&(A=D,D="bottom"),r.radialAxis=r.mockAxis(t,e,a,{_id:"x",side:D,_trueSide:A,domain:[L/i.w,E/i.w]}),r.angularAxis=r.mockAxis(t,e,o,{side:"right",domain:[0,Math.PI],autorange:!1}),r.doAutoRange(t,e),r.updateAngularAxis(t,e),r.updateRadialAxis(t,e),r.updateRadialAxisTitle(t,e),r.xaxis=r.mockCartesianAxis(t,e,{_id:"x",domain:y}),r.yaxis=r.mockCartesianAxis(t,e,{_id:"y",domain:m});var F=r.pathSubplot();r.clipPaths.forTraces.select("path").attr("d",F).attr("transform",l(O,I)),n.frontplot.attr("transform",l(M,S)).call(c.setClipUrl,r._hasClipOnAxisFalse?null:r.clipIds.forTraces,r.gd),n.bg.attr("d",F).attr("transform",l(C,P)).call(u.fill,e.bgcolor)},N.mockAxis=function(t,e,r,n){var i=o.extendFlat({},r,n);return d(i,e,t),i},N.mockCartesianAxis=function(t,e,r){var n=this,i=n.isSmith,a=r._id,s=o.extendFlat({type:"linear"},r);p(s,t);var l={x:[0,2],y:[1,3]};return s.setRange=function(){var t=n.sectorBBox,r=l[a],i=n.radialAxis._rl,o=(i[1]-i[0])/(1-n.getHole(e));s.range=[t[r[0]]*o,t[r[1]]*o]},s.isPtWithinRange="x"!==a||i?function(){return!0}:function(t){return n.isPtInside(t)},s.setRange(),s.setScale(),s},N.doAutoRange=function(t,e){var r=this,n=r.gd,i=r.radialAxis,a=r.getRadial(e);v(n,i);var o=i.range;a.range=o.slice(),a._input.range=o.slice(),i._rl=[i.r2l(o[0],null,"gregorian"),i.r2l(o[1],null,"gregorian")]},N.updateRadialAxis=function(t,e){var r=this,n=r.gd,i=r.layers,a=r.radius,c=r.innerRadius,f=r.cx,p=r.cy,d=r.getRadial(e),v=z(r.getSector(e)[0],360),g=r.radialAxis,y=c<a,m=r.isSmith;m||(r.fillViewInitialKey("radialaxis.angle",d.angle),r.fillViewInitialKey("radialaxis.range",g.range.slice()),g.setGeometry()),"auto"===g.tickangle&&v>90&&v<=270&&(g.tickangle=180);var x=m?function(t){var e=I(r,C([t.x,0]));return l(e[0]-f,e[1]-p)}:function(t){return l(g.l2p(t.x)+c,0)},b=m?function(t){return O(r,t.x,-1/0,1/0)}:function(t){return r.pathArc(g.r2p(t.x)+c)},_=j(d);if(r.radialTickLayout!==_&&(i["radial-axis"].selectAll(".xtick").remove(),r.radialTickLayout=_),y){g.setScale();var w=0,T=m?(g.tickvals||[]).filter((function(t){return t>=0})).map((function(t){return h.tickText(g,t,!0,!1)})):h.calcTicks(g),k=m?T:h.clipEnds(g,T),A=h.getTickSigns(g)[2];m&&(("top"===g.ticks&&"bottom"===g.side||"bottom"===g.ticks&&"top"===g.side)&&(A=-A),"top"===g.ticks&&"top"===g.side&&(w=-g.ticklen),"bottom"===g.ticks&&"bottom"===g.side&&(w=g.ticklen)),h.drawTicks(n,g,{vals:T,layer:i["radial-axis"],path:h.makeTickPath(g,0,A),transFn:x,crisp:!1}),h.drawGrid(n,g,{vals:k,layer:i["radial-grid"],path:b,transFn:o.noop,crisp:!1}),h.drawLabels(n,g,{vals:T,layer:i["radial-axis"],transFn:x,labelFns:h.makeLabelFns(g,w)})}var M=r.radialAxisAngle=r.vangles?F(U(R(d.angle),r.vangles)):d.angle,S=l(f,p),E=S+s(-M);V(i["radial-axis"],y&&(d.showticklabels||d.ticks),{transform:E}),V(i["radial-grid"],y&&d.showgrid,{transform:m?"":S}),V(i["radial-line"].select("line"),y&&d.showline,{x1:m?-a:c,y1:0,x2:a,y2:0,transform:E}).attr("stroke-width",d.linewidth).call(u.stroke,d.linecolor)},N.updateRadialAxisTitle=function(t,e,r){if(!this.isSmith){var n=this,i=n.gd,a=n.radius,o=n.cx,s=n.cy,l=n.getRadial(e),u=n.id+"title",f=0;if(l.title){var h=c.bBox(n.layers["radial-axis"].node()).height,p=l.title.font.size,d=l.side;f="top"===d?p:"counterclockwise"===d?-(h+.4*p):h+.8*p}var v=void 0!==r?r:n.radialAxisAngle,g=R(v),y=Math.cos(g),m=Math.sin(g),b=o+a/2*y+f*m,_=s-a/2*m+f*y;n.layers["radial-axis-title"]=x.draw(i,u,{propContainer:l,propName:n.id+".radialaxis.title",placeholder:D(i,"Click to enter radial axis title"),attributes:{x:b,y:_,"text-anchor":"middle"},transform:{rotate:-v}})}},N.updateAngularAxis=function(t,e){var r=this,n=r.gd,i=r.layers,a=r.radius,c=r.innerRadius,f=r.cx,p=r.cy,d=r.getAngular(e),v=r.angularAxis,g=r.isSmith;g||(r.fillViewInitialKey("angularaxis.rotation",d.rotation),v.setGeometry(),v.setScale());var y=g?function(t){var e=I(r,C([0,t.x]));return Math.atan2(e[0]-f,e[1]-p)-Math.PI/2}:function(t){return v.t2g(t.x)};"linear"===v.type&&"radians"===v.thetaunit&&(v.tick0=F(v.tick0),v.dtick=F(v.dtick));var m=function(t){return l(f+a*Math.cos(t),p-a*Math.sin(t))},x=g?function(t){var e=I(r,C([0,t.x]));return l(e[0],e[1])}:function(t){return m(y(t))},b=g?function(t){var e=I(r,C([0,t.x])),n=Math.atan2(e[0]-f,e[1]-p)-Math.PI/2;return l(e[0],e[1])+s(-F(n))}:function(t){var e=y(t);return m(e)+s(-F(e))},_=g?function(t){return P(r,t.x,0,1/0)}:function(t){var e=y(t),r=Math.cos(e),n=Math.sin(e);return"M"+[f+c*r,p-c*n]+"L"+[f+a*r,p-a*n]},w=h.makeLabelFns(v,0).labelStandoff,T={xFn:function(t){var e=y(t);return Math.cos(e)*w},yFn:function(t){var e=y(t),r=Math.sin(e)>0?.2:1;return-Math.sin(e)*(w+t.fontSize*r)+Math.abs(Math.cos(e))*(t.fontSize*M)},anchorFn:function(t){var e=y(t),r=Math.cos(e);return Math.abs(r)<.1?"middle":r>0?"start":"end"},heightFn:function(t,e,r){var n=y(t);return-.5*(1+Math.sin(n))*r}},k=j(d);r.angularTickLayout!==k&&(i["angular-axis"].selectAll("."+v._id+"tick").remove(),r.angularTickLayout=k);var A,S=g?[1/0].concat(v.tickvals||[]).map((function(t){return h.tickText(v,t,!0,!1)})):h.calcTicks(v);if(g&&(S[0].text="∞",S[0].fontSize*=1.75),"linear"===e.gridshape?(A=S.map(y),o.angleDelta(A[0],A[1])<0&&(A=A.slice().reverse())):A=null,r.vangles=A,"category"===v.type&&(S=S.filter((function(t){return o.isAngleInsideSector(y(t),r.sectorInRad)}))),v.visible){var E="inside"===v.ticks?-1:1,L=(v.linewidth||1)/2;h.drawTicks(n,v,{vals:S,layer:i["angular-axis"],path:"M"+E*L+",0h"+E*v.ticklen,transFn:b,crisp:!1}),h.drawGrid(n,v,{vals:S,layer:i["angular-grid"],path:_,transFn:o.noop,crisp:!1}),h.drawLabels(n,v,{vals:S,layer:i["angular-axis"],repositionOnUpdate:!0,transFn:x,labelFns:T})}V(i["angular-line"].select("path"),d.showline,{d:r.pathSubplot(),transform:l(f,p)}).attr("stroke-width",d.linewidth).call(u.stroke,d.linecolor)},N.updateFx=function(t,e){this.gd._context.staticPlot||(!this.isSmith&&(this.updateAngularDrag(t),this.updateRadialDrag(t,e,0),this.updateRadialDrag(t,e,1)),this.updateHoverAndMainDrag(t))},N.updateHoverAndMainDrag=function(t){var e,r,s=this,u=s.isSmith,c=s.gd,f=s.layers,h=t._zoomlayer,p=S.MINZOOM,d=S.OFFEDGE,v=s.radius,x=s.innerRadius,T=s.cx,k=s.cy,A=s.cxx,M=s.cyy,L=s.sectorInRad,C=s.vangles,P=s.radialAxis,O=E.clampTiny,I=E.findXYatLength,D=E.findEnclosingVertexAngles,z=S.cornerHalfWidth,R=S.cornerLen/2,F=g.makeDragger(f,"path","maindrag",!1===t.dragmode?"none":"crosshair");n.select(F).attr("d",s.pathSubplot()).attr("transform",l(T,k)),F.onmousemove=function(t){m.hover(c,t,s.id),c._fullLayout._lasthover=F,c._fullLayout._hoversubplot=s.id},F.onmouseout=function(t){c._dragging||y.unhover(c,t)};var B,N,j,U,V,H,q,G,Z,Y={element:F,gd:c,subplot:s.id,plotinfo:{id:s.id,xaxis:s.xaxis,yaxis:s.yaxis},xaxes:[s.xaxis],yaxes:[s.yaxis]};function W(t,e){return Math.sqrt(t*t+e*e)}function X(t,e){return W(t-A,e-M)}function J(t,e){return Math.atan2(M-e,t-A)}function K(t,e){return[t*Math.cos(e),t*Math.sin(-e)]}function $(t,e){if(0===t)return s.pathSector(2*z);var r=R/t,n=e-r,i=e+r,a=Math.max(0,Math.min(t,v)),o=a-z,l=a+z;return"M"+K(o,n)+"A"+[o,o]+" 0,0,0 "+K(o,i)+"L"+K(l,i)+"A"+[l,l]+" 0,0,1 "+K(l,n)+"Z"}function Q(t,e,r){if(0===t)return s.pathSector(2*z);var n,i,a=K(t,e),o=K(t,r),l=O((a[0]+o[0])/2),u=O((a[1]+o[1])/2);if(l&&u){var c=u/l,f=-1/c,h=I(z,c,l,u);n=I(R,f,h[0][0],h[0][1]),i=I(R,f,h[1][0],h[1][1])}else{var p,d;u?(p=R,d=z):(p=z,d=R),n=[[l-p,u-d],[l+p,u-d]],i=[[l-p,u+d],[l+p,u+d]]}return"M"+n.join("L")+"L"+i.reverse().join("L")+"Z"}function tt(t,e){return e=Math.max(Math.min(e,v),x),t<d?t=0:v-t<d?t=v:e<d?e=0:v-e<d&&(e=v),Math.abs(e-t)>p?(t<e?(j=t,U=e):(j=e,U=t),!0):(j=null,U=null,!1)}function et(t,e){t=t||V,e=e||"M0,0Z",G.attr("d",t),Z.attr("d",e),g.transitionZoombox(G,Z,H,q),H=!0;var r={};ot(r),c.emit("plotly_relayouting",r)}function rt(t,n){var i,a,o=B+(t*=e),l=N+(n*=r),u=X(B,N),c=Math.min(X(o,l),v),f=J(B,N);tt(u,c)&&(i=V+s.pathSector(U),j&&(i+=s.pathSector(j)),a=$(j,f)+$(U,f)),et(i,a)}function nt(t,e,r,n){var i=E.findIntersectionXY(r,n,r,[t-A,M-e]);return W(i[0],i[1])}function it(t,e){var r,n,i=B+t,a=N+e,o=J(B,N),l=J(i,a),u=D(o,C),c=D(l,C);tt(nt(B,N,u[0],u[1]),Math.min(nt(i,a,c[0],c[1]),v))&&(r=V+s.pathSector(U),j&&(r+=s.pathSector(j)),n=[Q(j,u[0],u[1]),Q(U,u[0],u[1])].join(" ")),et(r,n)}function at(){if(g.removeZoombox(c),null!==j&&null!==U){var t={};ot(t),g.showDoubleClickNotifier(c),a.call("_guiRelayout",c,t)}}function ot(t){var e=P._rl,r=(e[1]-e[0])/(1-x/v)/v,n=[e[0]+(j-x)*r,e[0]+(U-x)*r];t[s.id+".radialaxis.range"]=n}function st(t,e){var r=c._fullLayout.clickmode;if(g.removeZoombox(c),2===t){var n={};for(var i in s.viewInitial)n[s.id+"."+i]=s.viewInitial[i];c.emit("plotly_doubleclick",null),a.call("_guiRelayout",c,n)}r.indexOf("select")>-1&&1===t&&_(e,c,[s.xaxis],[s.yaxis],s.id,Y),r.indexOf("event")>-1&&m.click(c,e,s.id)}Y.prepFn=function(t,n,a){var l=c._fullLayout.dragmode,f=F.getBoundingClientRect();c._fullLayout._calcInverseTransform(c);var p=c._fullLayout._invTransform;e=c._fullLayout._invScaleX,r=c._fullLayout._invScaleY;var d=o.apply3DTransform(p)(n-f.left,a-f.top);if(B=d[0],N=d[1],C){var y=E.findPolygonOffset(v,L[0],L[1],C);B+=A+y[0],N+=M+y[1]}switch(l){case"zoom":Y.clickFn=st,u||(Y.moveFn=C?it:rt,Y.doneFn=at,function(){j=null,U=null,V=s.pathSubplot(),H=!1;var t=c._fullLayout[s.id];q=i(t.bgcolor).getLuminance(),(G=g.makeZoombox(h,q,T,k,V)).attr("fill-rule","evenodd"),Z=g.makeCorners(h,T,k),w(c)}());break;case"select":case"lasso":b(t,n,a,Y,l)}},y.init(Y)},N.updateRadialDrag=function(t,e,r){var i=this,u=i.gd,c=i.layers,f=i.radius,h=i.innerRadius,p=i.cx,d=i.cy,v=i.radialAxis,m=S.radialDragBoxSize,x=m/2;if(v.visible){var b,_,T,M=R(i.radialAxisAngle),E=v._rl,L=E[0],C=E[1],P=E[r],O=.75*(E[1]-E[0])/(1-i.getHole(e))/f;r?(b=p+(f+x)*Math.cos(M),_=d-(f+x)*Math.sin(M),T="radialdrag"):(b=p+(h-x)*Math.cos(M),_=d-(h-x)*Math.sin(M),T="radialdrag-inner");var I,D,z,B=g.makeRectDragger(c,T,"crosshair",-x,-x,m,m),N={element:B,gd:u};!1===t.dragmode&&(N.dragmode=!1),V(n.select(B),v.visible&&h<f,{transform:l(b,_)}),N.prepFn=function(){I=null,D=null,z=null,N.moveFn=j,N.doneFn=H,w(u)},N.clampFn=function(t,e){return Math.sqrt(t*t+e*e)<S.MINDRAG&&(t=0,e=0),[t,e]},y.init(N)}function j(t,e){if(I)I(t,e);else{var n=[t,-e],a=[Math.cos(M),Math.sin(M)],s=Math.abs(o.dot(n,a)/Math.sqrt(o.dot(n,n)));isNaN(s)||(I=s<.5?q:G)}var l={};!function(t){null!==D?t[i.id+".radialaxis.angle"]=D:null!==z&&(t[i.id+".radialaxis.range["+r+"]"]=z)}(l),u.emit("plotly_relayouting",l)}function H(){null!==D?a.call("_guiRelayout",u,i.id+".radialaxis.angle",D):null!==z&&a.call("_guiRelayout",u,i.id+".radialaxis.range["+r+"]",z)}function q(t,e){if(0!==r){var n=b+t,a=_+e;D=Math.atan2(d-a,n-p),i.vangles&&(D=U(D,i.vangles)),D=F(D);var o=l(p,d)+s(-D);c["radial-axis"].attr("transform",o),c["radial-line"].select("line").attr("transform",o);var u=i.gd._fullLayout,f=u[i.id];i.updateRadialAxisTitle(u,f,D)}}function G(t,e){var n=o.dot([t,-e],[Math.cos(M),Math.sin(M)]);if(z=P-O*n,O>0==(r?z>L:z<C)){var s=u._fullLayout,l=s[i.id];v.range[r]=z,v._rl[r]=z,i.updateRadialAxis(s,l),i.xaxis.setRange(),i.xaxis.setScale(),i.yaxis.setRange(),i.yaxis.setScale();var c=!1;for(var f in i.traceHash){var h=i.traceHash[f],p=o.filterVisible(h);h[0][0].trace._module.plot(u,i,p,l),a.traceIs(f,"gl")&&p.length&&(c=!0)}c&&(k(u),A(u))}else z=null}},N.updateAngularDrag=function(t){var e=this,r=e.gd,i=e.layers,u=e.radius,f=e.angularAxis,h=e.cx,p=e.cy,d=e.cxx,v=e.cyy,m=S.angularDragBoxSize,x=g.makeDragger(i,"path","angulardrag",!1===t.dragmode?"none":"move"),b={element:x,gd:r};function _(t,e){return Math.atan2(v+m-e,t-d-m)}!1===t.dragmode?b.dragmode=!1:n.select(x).attr("d",e.pathAnnulus(u,u+m)).attr("transform",l(h,p)).call(T,"move");var M,E,L,C,P,O,I=i.frontplot.select(".scatterlayer").selectAll(".trace"),D=I.selectAll(".point"),z=I.selectAll(".textpoint");function R(u,g){var y=e.gd._fullLayout,m=y[e.id],x=_(M+u*t._invScaleX,E+g*t._invScaleY),b=F(x-O);if(C=L+b,i.frontplot.attr("transform",l(e.xOffset2,e.yOffset2)+s([-b,d,v])),e.vangles){P=e.radialAxisAngle+b;var w=l(h,p)+s(-b),T=l(h,p)+s(-P);i.bg.attr("transform",w),i["radial-grid"].attr("transform",w),i["radial-axis"].attr("transform",T),i["radial-line"].select("line").attr("transform",T),e.updateRadialAxisTitle(y,m,P)}else e.clipPaths.forTraces.select("path").attr("transform",l(d,v)+s(b));D.each((function(){var t=n.select(this),e=c.getTranslate(t);t.attr("transform",l(e.x,e.y)+s([b]))})),z.each((function(){var t=n.select(this),e=t.select("text"),r=c.getTranslate(t);t.attr("transform",s([b,e.attr("x"),e.attr("y")])+l(r.x,r.y))})),f.rotation=o.modHalf(C,360),e.updateAngularAxis(y,m),e._hasClipOnAxisFalse&&!o.isFullCircle(e.sectorInRad)&&I.call(c.hideOutsideRangePoints,e);var S=!1;for(var R in e.traceHash)if(a.traceIs(R,"gl")){var N=e.traceHash[R],j=o.filterVisible(N);N[0][0].trace._module.plot(r,e,j,m),j.length&&(S=!0)}S&&(k(r),A(r));var U={};B(U),r.emit("plotly_relayouting",U)}function B(t){t[e.id+".angularaxis.rotation"]=C,e.vangles&&(t[e.id+".radialaxis.angle"]=P)}function N(){z.select("text").attr("transform",null);var t={};B(t),a.call("_guiRelayout",r,t)}b.prepFn=function(n,i,a){var s=t[e.id];L=s.angularaxis.rotation;var l=x.getBoundingClientRect();M=i-l.left,E=a-l.top,r._fullLayout._calcInverseTransform(r);var u=o.apply3DTransform(t._invTransform)(M,E);M=u[0],E=u[1],O=_(M,E),b.moveFn=R,b.doneFn=N,w(r)},e.vangles&&!o.isFullCircle(e.sectorInRad)&&(b.prepFn=o.noop,T(n.select(x),null)),y.init(b)},N.isPtInside=function(t){if(this.isSmith)return!0;var e=this.sectorInRad,r=this.vangles,n=this.angularAxis.c2g(t.theta),i=this.radialAxis,a=i.c2l(t.r),s=i._rl;return(r?E.isPtInsidePolygon:o.isPtInsideSector)(a,n,s,e,r)},N.pathArc=function(t){var e=this.sectorInRad,r=this.vangles;return(r?E.pathPolygon:o.pathArc)(t,e[0],e[1],r)},N.pathSector=function(t){var e=this.sectorInRad,r=this.vangles;return(r?E.pathPolygon:o.pathSector)(t,e[0],e[1],r)},N.pathAnnulus=function(t,e){var r=this.sectorInRad,n=this.vangles;return(n?E.pathPolygonAnnulus:o.pathAnnulus)(t,e,r[0],r[1],n)},N.pathSubplot=function(){var t=this.innerRadius,e=this.radius;return t?this.pathAnnulus(t,e):this.pathSector(e)},N.fillViewInitialKey=function(t,e){t in this.viewInitial||(this.viewInitial[t]=e)}},12101:function(t,e,r){"use strict";var n=r(71828),i=r(21994),a=n.deg2rad,o=n.rad2deg;t.exports=function(t,e,r){switch(i(t,r),t._id){case"x":case"radialaxis":!function(t,e){var r=e._subplot;t.setGeometry=function(){var e=t._rl[0],n=t._rl[1],i=r.innerRadius,a=(r.radius-i)/(n-e),o=i/a,s=e>n?function(t){return t<=0}:function(t){return t>=0};t.c2g=function(r){var n=t.c2l(r)-e;return(s(n)?n:0)+o},t.g2c=function(r){return t.l2c(r+e-o)},t.g2p=function(t){return t*a},t.c2p=function(e){return t.g2p(t.c2g(e))}}}(t,e);break;case"angularaxis":!function(t,e){var r=t.type;if("linear"===r){var i=t.d2c,s=t.c2d;t.d2c=function(t,e){return function(t,e){return"degrees"===e?a(t):t}(i(t),e)},t.c2d=function(t,e){return s(function(t,e){return"degrees"===e?o(t):t}(t,e))}}t.makeCalcdata=function(e,i){var a,o,s=e[i],l=e._length,u=function(r){return t.d2c(r,e.thetaunit)};if(s){if(n.isTypedArray(s)&&"linear"===r){if(l===s.length)return s;if(s.subarray)return s.subarray(0,l)}for(a=new Array(l),o=0;o<l;o++)a[o]=u(s[o])}else{var c=i+"0",f="d"+i,h=c in e?u(e[c]):0,p=e[f]?u(e[f]):(t.period||2*Math.PI)/l;for(a=new Array(l),o=0;o<l;o++)a[o]=h+o*p}return a},t.setGeometry=function(){var i,s,l,u,c=e.sector,f=c.map(a),h={clockwise:-1,counterclockwise:1}[t.direction],p=a(t.rotation),d=function(t){return h*t+p},v=function(t){return(t-p)/h};switch(r){case"linear":s=i=n.identity,u=a,l=o,t.range=n.isFullCircle(f)?[c[0],c[0]+360]:f.map(v).map(o);break;case"category":var g=t._categories.length,y=t.period?Math.max(t.period,g):g;0===y&&(y=1),s=u=function(t){return 2*t*Math.PI/y},i=l=function(t){return t*y/Math.PI/2},t.range=[0,y]}t.c2g=function(t){return d(s(t))},t.g2c=function(t){return i(v(t))},t.t2g=function(t){return d(u(t))},t.g2t=function(t){return l(v(t))}}}(t,e)}}},39779:function(t){"use strict";t.exports={attr:"subplot",name:"smith",axisNames:["realaxis","imaginaryaxis"],axisName2dataArray:{imaginaryaxis:"imag",realaxis:"real"}}},23893:function(t){"use strict";function e(t){return t<0?-1:t>0?1:0}function r(t){var e=t[0],r=t[1];if(!isFinite(e)||!isFinite(r))return[1,0];var n=(e+1)*(e+1)+r*r;return[(e*e+r*r-1)/n,2*r/n]}function n(t,e){var r=e[0],n=e[1];return[r*t.radius+t.cx,-n*t.radius+t.cy]}function i(t,e){return e*t.radius}t.exports={smith:r,reactanceArc:function(t,e,a,o){var s=n(t,r([a,e])),l=s[0],u=s[1],c=n(t,r([o,e])),f=c[0],h=c[1];if(0===e)return["M"+l+","+u,"L"+f+","+h].join(" ");var p=i(t,1/Math.abs(e));return["M"+l+","+u,"A"+p+","+p+" 0 0,"+(e<0?1:0)+" "+f+","+h].join(" ")},resistanceArc:function(t,a,o,s){var l=i(t,1/(a+1)),u=n(t,r([a,o])),c=u[0],f=u[1],h=n(t,r([a,s])),p=h[0],d=h[1];if(e(o)!==e(s)){var v=n(t,r([a,0]));return["M"+c+","+f,"A"+l+","+l+" 0 0,"+(0<o?0:1)+" "+v[0]+","+v[1],"A"+l+","+l+" 0 0,"+(s<0?0:1)+p+","+d].join(" ")}return["M"+c+","+f,"A"+l+","+l+" 0 0,"+(s<o?0:1)+" "+p+","+d].join(" ")},smithTransform:n}},7504:function(t,e,r){"use strict";var n=r(27659).AU,i=r(71828).counterRegex,a=r(77997),o=r(39779),s=o.attr,l=o.name,u=i(l),c={};c[s]={valType:"subplotid",dflt:l,editType:"calc"},t.exports={attr:s,name:l,idRoot:l,idRegex:u,attrRegex:u,attributes:c,layoutAttributes:r(33419),supplyLayoutDefaults:r(9558),plot:function(t){for(var e=t._fullLayout,r=t.calcdata,i=e._subplots[l],o=0;o<i.length;o++){var s=i[o],u=n(r,l,s),c=e[s]._subplot;c||(c=a(t,s,!0),e[s]._subplot=c),c.plot(u,e,t._promises)}},clean:function(t,e,r,n){for(var i=n._subplots[l]||[],a=0;a<i.length;a++){var o=i[a],s=n[o]._subplot;if(!e[o]&&s)for(var u in s.framework.remove(),s.clipPaths)s.clipPaths[u].remove()}},toSVG:r(93612).toSVG}},33419:function(t,e,r){"use strict";var n=r(22399),i=r(13838),a=r(27670).Y,o=r(71828).extendFlat,s=r(30962).overrideAll,l=s({color:i.color,showline:o({},i.showline,{dflt:!0}),linecolor:i.linecolor,linewidth:i.linewidth,showgrid:o({},i.showgrid,{dflt:!0}),gridcolor:i.gridcolor,gridwidth:i.gridwidth,griddash:i.griddash},"plot","from-root"),u=s({ticklen:i.ticklen,tickwidth:o({},i.tickwidth,{dflt:2}),tickcolor:i.tickcolor,showticklabels:i.showticklabels,labelalias:i.labelalias,showtickprefix:i.showtickprefix,tickprefix:i.tickprefix,showticksuffix:i.showticksuffix,ticksuffix:i.ticksuffix,tickfont:i.tickfont,tickformat:i.tickformat,hoverformat:i.hoverformat,layer:i.layer},"plot","from-root"),c=o({visible:o({},i.visible,{dflt:!0}),tickvals:{dflt:[.2,.5,1,2,5],valType:"data_array",editType:"plot"},tickangle:o({},i.tickangle,{dflt:90}),ticks:{valType:"enumerated",values:["top","bottom",""],editType:"ticks"},side:{valType:"enumerated",values:["top","bottom"],dflt:"top",editType:"plot"},editType:"calc"},l,u),f=o({visible:o({},i.visible,{dflt:!0}),tickvals:{valType:"data_array",editType:"plot"},ticks:i.ticks,editType:"calc"},l,u);t.exports={domain:a({name:"smith",editType:"plot"}),bgcolor:{valType:"color",editType:"plot",dflt:n.background},realaxis:c,imaginaryaxis:f,editType:"calc"}},9558:function(t,e,r){"use strict";var n,i,a,o=r(71828),s=r(7901),l=r(44467),u=r(49119),c=r(27659).NG,f=r(89426),h=r(96115),p=r(92128),d=r(21994),v=r(33419),g=r(39779),y=g.axisNames,m=(n=function(t){return t.slice().reverse().map((function(t){return-t})).concat([0]).concat(t)},i=String,a={},function(t){var e=i?i(t):t;if(e in a)return a[e];var r=n(t);return a[e]=r,r});function x(t,e,r,n){var i=r("bgcolor");n.bgColor=s.combine(i,n.paper_bgcolor);var a,u=c(n.fullData,g.name,n.id),x=n.layoutOut;function b(t,e){return r(a+"."+t,e)}for(var _=0;_<y.length;_++){a=y[_],o.isPlainObject(t[a])||(t[a]={});var w=t[a],T=l.newContainer(e,a);T._id=T._name=a,T._attr=n.id+"."+a,T._traceIndices=u.map((function(t){return t._expandedIndex}));var k=b("visible");if(T.type="linear",d(T,x),f(w,T,b,T.type),k){var A,M,S,E,L="realaxis"===a;L&&b("side"),L?b("tickvals"):b("tickvals",m(e.realaxis.tickvals||v.realaxis.tickvals.dflt));var C=n.font||{};k&&(M=(A=b("color"))===w.color?A:C.color,S=C.size,E=C.family),h(w,T,b,T.type,{noTicklabelstep:!0,noAng:!L,noExp:!0,font:{color:M,size:S,family:E}}),o.coerce2(t,e,v,a+".ticklen"),o.coerce2(t,e,v,a+".tickwidth"),o.coerce2(t,e,v,a+".tickcolor",e.color),b("ticks")||(delete e[a].ticklen,delete e[a].tickwidth,delete e[a].tickcolor),p(w,T,b,{dfltColor:A,bgColor:n.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:v[a]}),b("layer")}b("hoverformat"),delete T.type,T._input=w}}t.exports=function(t,e,r){u(t,e,r,{noUirevision:!0,type:g.name,attributes:v,handleDefaults:x,font:e.font,paper_bgcolor:e.paper_bgcolor,fullData:r,layoutOut:e})}},49119:function(t,e,r){"use strict";var n=r(71828),i=r(44467),a=r(27670).c;t.exports=function(t,e,r,o){var s,l,u=o.type,c=o.attributes,f=o.handleDefaults,h=o.partition||"x",p=e._subplots[u],d=p.length,v=d&&p[0].replace(/\d+$/,"");function g(t,e){return n.coerce(s,l,c,t,e)}for(var y=0;y<d;y++){var m=p[y];s=t[m]?t[m]:t[m]={},l=i.newContainer(e,m,v),o.noUirevision||g("uirevision",e.uirevision);var x={};x[h]=[y/d,(y+1)/d],a(l,e,g,x),o.id=m,f(s,l,g,o)}}},5386:function(t,e,r){"use strict";var n=r(31562);function i(t){var e=t.description?" "+t.description:"",r=t.keys||[];if(r.length>0){for(var n=[],i=0;i<r.length;i++)n[i]="`"+r[i]+"`";e+="Finally, the template string has access to ",e=1===r.length?e+"variable "+n[0]:e+"variables "+n.slice(0,-1).join(", ")+" and "+n.slice(-1)+"."}return e}n.FORMAT_LINK,n.DATE_FORMAT_LINK,e.fF=function(t,e){t=t||{},i(e=e||{});var r={valType:"string",dflt:"",editType:t.editType||"none"};return!1!==t.arrayOk&&(r.arrayOk=!0),r},e.si=function(t,e){t=t||{},i(e=e||{});var r={valType:"string",dflt:"",editType:t.editType||"calc"};return!1!==t.arrayOk&&(r.arrayOk=!0),r},e.R=function(t,e){return e=e||{},(t=t||{}).newshape,i(e),{valType:"string",dflt:"",editType:t.editType||"arraydraw"}}},61639:function(t,e,r){"use strict";var n=r(64380),i=r(27659).AU,a=r(71828).counterRegex,o="ternary";e.name=o;var s=e.attr="subplot";e.idRoot=o,e.idRegex=e.attrRegex=a(o),(e.attributes={})[s]={valType:"subplotid",dflt:"ternary",editType:"calc"},e.layoutAttributes=r(81367),e.supplyLayoutDefaults=r(25369),e.plot=function(t){for(var e=t._fullLayout,r=t.calcdata,a=e._subplots[o],s=0;s<a.length;s++){var l=a[s],u=i(r,o,l),c=e[l]._subplot;c||(c=new n({id:l,graphDiv:t,container:e._ternarylayer.node()},e),e[l]._subplot=c),c.plot(u,e,t._promises)}},e.clean=function(t,e,r,n){for(var i=n._subplots[o]||[],a=0;a<i.length;a++){var s=i[a],l=n[s]._subplot;!e[s]&&l&&(l.plotContainer.remove(),l.clipDef.remove(),l.clipDefRelative.remove(),l.layers["a-title"].remove(),l.layers["b-title"].remove(),l.layers["c-title"].remove())}}},81367:function(t,e,r){"use strict";var n=r(22399),i=r(27670).Y,a=r(13838),o=r(30962).overrideAll,s=r(1426).extendFlat,l={title:{text:a.title.text,font:a.title.font},color:a.color,tickmode:a.minor.tickmode,nticks:s({},a.nticks,{dflt:6,min:1}),tick0:a.tick0,dtick:a.dtick,tickvals:a.tickvals,ticktext:a.ticktext,ticks:a.ticks,ticklen:a.ticklen,tickwidth:a.tickwidth,tickcolor:a.tickcolor,ticklabelstep:a.ticklabelstep,showticklabels:a.showticklabels,labelalias:a.labelalias,showtickprefix:a.showtickprefix,tickprefix:a.tickprefix,showticksuffix:a.showticksuffix,ticksuffix:a.ticksuffix,showexponent:a.showexponent,exponentformat:a.exponentformat,minexponent:a.minexponent,separatethousands:a.separatethousands,tickfont:a.tickfont,tickangle:a.tickangle,tickformat:a.tickformat,tickformatstops:a.tickformatstops,hoverformat:a.hoverformat,showline:s({},a.showline,{dflt:!0}),linecolor:a.linecolor,linewidth:a.linewidth,showgrid:s({},a.showgrid,{dflt:!0}),gridcolor:a.gridcolor,gridwidth:a.gridwidth,griddash:a.griddash,layer:a.layer,min:{valType:"number",dflt:0,min:0},_deprecated:{title:a._deprecated.title,titlefont:a._deprecated.titlefont}},u=t.exports=o({domain:i({name:"ternary"}),bgcolor:{valType:"color",dflt:n.background},sum:{valType:"number",dflt:1,min:0},aaxis:l,baxis:l,caxis:l},"plot","from-root");u.uirevision={valType:"any",editType:"none"},u.aaxis.uirevision=u.baxis.uirevision=u.caxis.uirevision={valType:"any",editType:"none"}},25369:function(t,e,r){"use strict";var n=r(7901),i=r(44467),a=r(71828),o=r(49119),s=r(96115),l=r(89426),u=r(38701),c=r(26218),f=r(92128),h=r(81367),p=["aaxis","baxis","caxis"];function d(t,e,r,a){var o,s,l,u=r("bgcolor"),c=r("sum");a.bgColor=n.combine(u,a.paper_bgcolor);for(var f=0;f<p.length;f++)s=t[o=p[f]]||{},(l=i.newContainer(e,o))._name=o,v(s,l,a,e);var h=e.aaxis,d=e.baxis,g=e.caxis;h.min+d.min+g.min>=c&&(h.min=0,d.min=0,g.min=0,t.aaxis&&delete t.aaxis.min,t.baxis&&delete t.baxis.min,t.caxis&&delete t.caxis.min)}function v(t,e,r,n){var i=h[e._name];function o(r,n){return a.coerce(t,e,i,r,n)}o("uirevision",n.uirevision),e.type="linear";var p=o("color"),d=p!==i.color.dflt?p:r.font.color,v=e._name.charAt(0).toUpperCase(),g="Component "+v,y=o("title.text",g);e._hovertitle=y===g?y:v,a.coerceFont(o,"title.font",{family:r.font.family,size:a.bigFont(r.font.size),color:d}),o("min"),c(t,e,o,"linear"),l(t,e,o,"linear"),s(t,e,o,"linear"),u(t,e,o,{outerTicks:!0}),o("showticklabels")&&(a.coerceFont(o,"tickfont",{family:r.font.family,size:r.font.size,color:d}),o("tickangle"),o("tickformat")),f(t,e,o,{dfltColor:p,bgColor:r.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:i}),o("hoverformat"),o("layer")}t.exports=function(t,e,r){o(t,e,r,{type:"ternary",attributes:h,handleDefaults:d,font:e.font,paper_bgcolor:e.paper_bgcolor})}},64380:function(t,e,r){"use strict";var n=r(39898),i=r(84267),a=r(73972),o=r(71828),s=o.strTranslate,l=o._,u=r(7901),c=r(91424),f=r(21994),h=r(1426).extendFlat,p=r(74875),d=r(89298),v=r(28569),g=r(30211),y=r(64505),m=y.freeMode,x=y.rectMode,b=r(92998),_=r(47322).prepSelect,w=r(47322).selectOnClick,T=r(47322).clearOutline,k=r(47322).clearSelectionsCache,A=r(85555);function M(t,e){this.id=t.id,this.graphDiv=t.graphDiv,this.init(e),this.makeFramework(e),this.aTickLayout=null,this.bTickLayout=null,this.cTickLayout=null}t.exports=M;var S=M.prototype;S.init=function(t){this.container=t._ternarylayer,this.defs=t._defs,this.layoutId=t._uid,this.traceHash={},this.layers={}},S.plot=function(t,e){var r=this,n=e[r.id],i=e._size;r._hasClipOnAxisFalse=!1;for(var a=0;a<t.length;a++)if(!1===t[a][0].trace.cliponaxis){r._hasClipOnAxisFalse=!0;break}r.updateLayers(n),r.adjustLayout(n,i),p.generalUpdatePerTraceModule(r.graphDiv,r,t,n),r.layers.plotbg.select("path").call(u.fill,n.bgcolor)},S.makeFramework=function(t){var e=this,r=e.graphDiv,n=t[e.id],i=e.clipId="clip"+e.layoutId+e.id,a=e.clipIdRelative="clip-relative"+e.layoutId+e.id;e.clipDef=o.ensureSingleById(t._clips,"clipPath",i,(function(t){t.append("path").attr("d","M0,0Z")})),e.clipDefRelative=o.ensureSingleById(t._clips,"clipPath",a,(function(t){t.append("path").attr("d","M0,0Z")})),e.plotContainer=o.ensureSingle(e.container,"g",e.id),e.updateLayers(n),c.setClipUrl(e.layers.backplot,i,r),c.setClipUrl(e.layers.grids,i,r)},S.updateLayers=function(t){var e=this.layers,r=["draglayer","plotbg","backplot","grids"];"below traces"===t.aaxis.layer&&r.push("aaxis","aline"),"below traces"===t.baxis.layer&&r.push("baxis","bline"),"below traces"===t.caxis.layer&&r.push("caxis","cline"),r.push("frontplot"),"above traces"===t.aaxis.layer&&r.push("aaxis","aline"),"above traces"===t.baxis.layer&&r.push("baxis","bline"),"above traces"===t.caxis.layer&&r.push("caxis","cline");var i=this.plotContainer.selectAll("g.toplevel").data(r,String),a=["agrid","bgrid","cgrid"];i.enter().append("g").attr("class",(function(t){return"toplevel "+t})).each((function(t){var r=n.select(this);e[t]=r,"frontplot"===t?r.append("g").classed("scatterlayer",!0):"backplot"===t?r.append("g").classed("maplayer",!0):"plotbg"===t?r.append("path").attr("d","M0,0Z"):"aline"===t||"bline"===t||"cline"===t?r.append("path"):"grids"===t&&a.forEach((function(t){e[t]=r.append("g").classed("grid "+t,!0)}))})),i.order()};var E=Math.sqrt(4/3);S.adjustLayout=function(t,e){var r,n,i,a,o,l,p=this,d=t.domain,v=(d.x[0]+d.x[1])/2,g=(d.y[0]+d.y[1])/2,y=d.x[1]-d.x[0],m=d.y[1]-d.y[0],x=y*e.w,b=m*e.h,_=t.sum,w=t.aaxis.min,T=t.baxis.min,k=t.caxis.min;x>E*b?i=(a=b)*E:a=(i=x)/E,o=y*i/x,l=m*a/b,r=e.l+e.w*v-i/2,n=e.t+e.h*(1-g)-a/2,p.x0=r,p.y0=n,p.w=i,p.h=a,p.sum=_,p.xaxis={type:"linear",range:[w+2*k-_,_-w-2*T],domain:[v-o/2,v+o/2],_id:"x"},f(p.xaxis,p.graphDiv._fullLayout),p.xaxis.setScale(),p.xaxis.isPtWithinRange=function(t){return t.a>=p.aaxis.range[0]&&t.a<=p.aaxis.range[1]&&t.b>=p.baxis.range[1]&&t.b<=p.baxis.range[0]&&t.c>=p.caxis.range[1]&&t.c<=p.caxis.range[0]},p.yaxis={type:"linear",range:[w,_-T-k],domain:[g-l/2,g+l/2],_id:"y"},f(p.yaxis,p.graphDiv._fullLayout),p.yaxis.setScale(),p.yaxis.isPtWithinRange=function(){return!0};var A=p.yaxis.domain[0],M=p.aaxis=h({},t.aaxis,{range:[w,_-T-k],side:"left",tickangle:(+t.aaxis.tickangle||0)-30,domain:[A,A+l*E],anchor:"free",position:0,_id:"y",_length:i});f(M,p.graphDiv._fullLayout),M.setScale();var S=p.baxis=h({},t.baxis,{range:[_-w-k,T],side:"bottom",domain:p.xaxis.domain,anchor:"free",position:0,_id:"x",_length:i});f(S,p.graphDiv._fullLayout),S.setScale();var L=p.caxis=h({},t.caxis,{range:[_-w-T,k],side:"right",tickangle:(+t.caxis.tickangle||0)+30,domain:[A,A+l*E],anchor:"free",position:0,_id:"y",_length:i});f(L,p.graphDiv._fullLayout),L.setScale();var C="M"+r+","+(n+a)+"h"+i+"l-"+i/2+",-"+a+"Z";p.clipDef.select("path").attr("d",C),p.layers.plotbg.select("path").attr("d",C);var P="M0,"+a+"h"+i+"l-"+i/2+",-"+a+"Z";p.clipDefRelative.select("path").attr("d",P);var O=s(r,n);p.plotContainer.selectAll(".scatterlayer,.maplayer").attr("transform",O),p.clipDefRelative.select("path").attr("transform",null);var I=s(r-S._offset,n+a);p.layers.baxis.attr("transform",I),p.layers.bgrid.attr("transform",I);var D=s(r+i/2,n)+"rotate(30)"+s(0,-M._offset);p.layers.aaxis.attr("transform",D),p.layers.agrid.attr("transform",D);var z=s(r+i/2,n)+"rotate(-30)"+s(0,-L._offset);p.layers.caxis.attr("transform",z),p.layers.cgrid.attr("transform",z),p.drawAxes(!0),p.layers.aline.select("path").attr("d",M.showline?"M"+r+","+(n+a)+"l"+i/2+",-"+a:"M0,0").call(u.stroke,M.linecolor||"#000").style("stroke-width",(M.linewidth||0)+"px"),p.layers.bline.select("path").attr("d",S.showline?"M"+r+","+(n+a)+"h"+i:"M0,0").call(u.stroke,S.linecolor||"#000").style("stroke-width",(S.linewidth||0)+"px"),p.layers.cline.select("path").attr("d",L.showline?"M"+(r+i/2)+","+n+"l"+i/2+","+a:"M0,0").call(u.stroke,L.linecolor||"#000").style("stroke-width",(L.linewidth||0)+"px"),p.graphDiv._context.staticPlot||p.initInteractions(),c.setClipUrl(p.layers.frontplot,p._hasClipOnAxisFalse?null:p.clipId,p.graphDiv)},S.drawAxes=function(t){var e=this,r=e.graphDiv,n=e.id.substr(7)+"title",i=e.layers,a=e.aaxis,o=e.baxis,s=e.caxis;if(e.drawAx(a),e.drawAx(o),e.drawAx(s),t){var u=Math.max(a.showticklabels?a.tickfont.size/2:0,(s.showticklabels?.75*s.tickfont.size:0)+("outside"===s.ticks?.87*s.ticklen:0)),c=(o.showticklabels?o.tickfont.size:0)+("outside"===o.ticks?o.ticklen:0)+3;i["a-title"]=b.draw(r,"a"+n,{propContainer:a,propName:e.id+".aaxis.title",placeholder:l(r,"Click to enter Component A title"),attributes:{x:e.x0+e.w/2,y:e.y0-a.title.font.size/3-u,"text-anchor":"middle"}}),i["b-title"]=b.draw(r,"b"+n,{propContainer:o,propName:e.id+".baxis.title",placeholder:l(r,"Click to enter Component B title"),attributes:{x:e.x0-c,y:e.y0+e.h+.83*o.title.font.size+c,"text-anchor":"middle"}}),i["c-title"]=b.draw(r,"c"+n,{propContainer:s,propName:e.id+".caxis.title",placeholder:l(r,"Click to enter Component C title"),attributes:{x:e.x0+e.w+c,y:e.y0+e.h+.83*s.title.font.size+c,"text-anchor":"middle"}})}},S.drawAx=function(t){var e,r=this,n=r.graphDiv,i=t._name,a=i.charAt(0),s=t._id,l=r.layers[i],u=a+"tickLayout",c=(e=t).ticks+String(e.ticklen)+String(e.showticklabels);r[u]!==c&&(l.selectAll("."+s+"tick").remove(),r[u]=c),t.setScale();var f=d.calcTicks(t),h=d.clipEnds(t,f),p=d.makeTransTickFn(t),v=d.getTickSigns(t)[2],g=o.deg2rad(30),y=v*(t.linewidth||1)/2,m=v*t.ticklen,x=r.w,b=r.h,_="b"===a?"M0,"+y+"l"+Math.sin(g)*m+","+Math.cos(g)*m:"M"+y+",0l"+Math.cos(g)*m+","+-Math.sin(g)*m,w={a:"M0,0l"+b+",-"+x/2,b:"M0,0l-"+x/2+",-"+b,c:"M0,0l-"+b+","+x/2}[a];d.drawTicks(n,t,{vals:"inside"===t.ticks?h:f,layer:l,path:_,transFn:p,crisp:!1}),d.drawGrid(n,t,{vals:h,layer:r.layers[a+"grid"],path:w,transFn:p,crisp:!1}),d.drawLabels(n,t,{vals:f,layer:l,transFn:p,labelFns:d.makeLabelFns(t,0,30)})};var L=A.MINZOOM/2+.87,C="m-0.87,.5h"+L+"v3h-"+(L+5.2)+"l"+(L/2+2.6)+",-"+(.87*L+4.5)+"l2.6,1.5l-"+L/2+","+.87*L+"Z",P="m0.87,.5h-"+L+"v3h"+(L+5.2)+"l-"+(L/2+2.6)+",-"+(.87*L+4.5)+"l-2.6,1.5l"+L/2+","+.87*L+"Z",O="m0,1l"+L/2+","+.87*L+"l2.6,-1.5l-"+(L/2+2.6)+",-"+(.87*L+4.5)+"l-"+(L/2+2.6)+","+(.87*L+4.5)+"l2.6,1.5l"+L/2+",-"+.87*L+"Z",I=!0;function D(t){n.select(t).selectAll(".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners").remove()}S.clearOutline=function(){k(this.dragOptions),T(this.dragOptions.gd)},S.initInteractions=function(){var t,e,r,n,f,h,p,d,y,b,T,k,M=this,S=M.layers.plotbg.select("path").node(),L=M.graphDiv,z=L._fullLayout._zoomlayer;function R(t){var e={};return e[M.id+".aaxis.min"]=t.a,e[M.id+".baxis.min"]=t.b,e[M.id+".caxis.min"]=t.c,e}function F(t,e){var r=L._fullLayout.clickmode;D(L),2===t&&(L.emit("plotly_doubleclick",null),a.call("_guiRelayout",L,R({a:0,b:0,c:0}))),r.indexOf("select")>-1&&1===t&&w(e,L,[M.xaxis],[M.yaxis],M.id,M.dragOptions),r.indexOf("event")>-1&&g.click(L,e,M.id)}function B(t,e){return 1-e/M.h}function N(t,e){return 1-(t+(M.h-e)/Math.sqrt(3))/M.w}function j(t,e){return(t-(M.h-e)/Math.sqrt(3))/M.w}function U(i,a){var o=r+i*t,s=n+a*e,l=Math.max(0,Math.min(1,B(0,n),B(0,s))),u=Math.max(0,Math.min(1,N(r,n),N(o,s))),c=Math.max(0,Math.min(1,j(r,n),j(o,s))),v=(l/2+c)*M.w,g=(1-l/2-u)*M.w,m=(v+g)/2,x=g-v,_=(1-l)*M.h,w=_-x/E;x<A.MINZOOM?(p=f,T.attr("d",y),k.attr("d","M0,0Z")):(p={a:f.a+l*h,b:f.b+u*h,c:f.c+c*h},T.attr("d",y+"M"+v+","+_+"H"+g+"L"+m+","+w+"L"+v+","+_+"Z"),k.attr("d","M"+r+","+n+"m0.5,0.5h5v-2h-5v-5h-2v5h-5v2h5v5h2ZM"+v+","+_+C+"M"+g+","+_+P+"M"+m+","+w+O)),b||(T.transition().style("fill",d>.2?"rgba(0,0,0,0.4)":"rgba(255,255,255,0.3)").duration(200),k.transition().style("opacity",1).duration(200),b=!0),L.emit("plotly_relayouting",R(p))}function V(){D(L),p!==f&&(a.call("_guiRelayout",L,R(p)),I&&L.data&&L._context.showTips&&(o.notifier(l(L,"Double-click to zoom back out"),"long"),I=!1))}function H(t,e){var r=t/M.xaxis._m,n=e/M.yaxis._m,i=[(p={a:f.a-n,b:f.b+(r+n)/2,c:f.c-(r-n)/2}).a,p.b,p.c].sort(o.sorterAsc),a=i.indexOf(p.a),l=i.indexOf(p.b),u=i.indexOf(p.c);i[0]<0&&(i[1]+i[0]/2<0?(i[2]+=i[0]+i[1],i[0]=i[1]=0):(i[2]+=i[0]/2,i[1]+=i[0]/2,i[0]=0),p={a:i[a],b:i[l],c:i[u]},e=(f.a-p.a)*M.yaxis._m,t=(f.c-p.c-f.b+p.b)*M.xaxis._m);var h=s(M.x0+t,M.y0+e);M.plotContainer.selectAll(".scatterlayer,.maplayer").attr("transform",h);var d=s(-t,-e);M.clipDefRelative.select("path").attr("transform",d),M.aaxis.range=[p.a,M.sum-p.b-p.c],M.baxis.range=[M.sum-p.a-p.c,p.b],M.caxis.range=[M.sum-p.a-p.b,p.c],M.drawAxes(!1),M._hasClipOnAxisFalse&&M.plotContainer.select(".scatterlayer").selectAll(".trace").call(c.hideOutsideRangePoints,M),L.emit("plotly_relayouting",R(p))}function q(){a.call("_guiRelayout",L,R(p))}this.dragOptions={element:S,gd:L,plotinfo:{id:M.id,domain:L._fullLayout[M.id].domain,xaxis:M.xaxis,yaxis:M.yaxis},subplot:M.id,prepFn:function(a,l,c){M.dragOptions.xaxes=[M.xaxis],M.dragOptions.yaxes=[M.yaxis],t=L._fullLayout._invScaleX,e=L._fullLayout._invScaleY;var v=M.dragOptions.dragmode=L._fullLayout.dragmode;m(v)?M.dragOptions.minDrag=1:M.dragOptions.minDrag=void 0,"zoom"===v?(M.dragOptions.moveFn=U,M.dragOptions.clickFn=F,M.dragOptions.doneFn=V,function(t,e,a){var l=S.getBoundingClientRect();r=e-l.left,n=a-l.top,L._fullLayout._calcInverseTransform(L);var c=L._fullLayout._invTransform,v=o.apply3DTransform(c)(r,n);r=v[0],n=v[1],f={a:M.aaxis.range[0],b:M.baxis.range[1],c:M.caxis.range[1]},p=f,h=M.aaxis.range[1]-f.a,d=i(M.graphDiv._fullLayout[M.id].bgcolor).getLuminance(),y="M0,"+M.h+"L"+M.w/2+", 0L"+M.w+","+M.h+"Z",b=!1,T=z.append("path").attr("class","zoombox").attr("transform",s(M.x0,M.y0)).style({fill:d>.2?"rgba(0,0,0,0)":"rgba(255,255,255,0)","stroke-width":0}).attr("d",y),k=z.append("path").attr("class","zoombox-corners").attr("transform",s(M.x0,M.y0)).style({fill:u.background,stroke:u.defaultLine,"stroke-width":1,opacity:0}).attr("d","M0,0Z"),M.clearOutline(L)}(0,l,c)):"pan"===v?(M.dragOptions.moveFn=H,M.dragOptions.clickFn=F,M.dragOptions.doneFn=q,f={a:M.aaxis.range[0],b:M.baxis.range[1],c:M.caxis.range[1]},p=f,M.clearOutline(L)):(x(v)||m(v))&&_(a,l,c,M.dragOptions,v)}},S.onmousemove=function(t){g.hover(L,t,M.id),L._fullLayout._lasthover=S,L._fullLayout._hoversubplot=M.id},S.onmouseout=function(t){L._dragging||v.unhover(L,t)},v.init(this.dragOptions)}},73972:function(t,e,r){"use strict";var n=r(47769),i=r(64213),a=r(75138),o=r(41965),s=r(24401).addStyleRule,l=r(1426),u=r(9012),c=r(10820),f=l.extendFlat,h=l.extendDeepAll;function p(t){var r=t.name,i=t.categories,a=t.meta;if(e.modules[r])n.log("Type "+r+" already registered");else{e.subplotsRegistry[t.basePlotModule.name]||function(t){var r=t.name;if(e.subplotsRegistry[r])n.log("Plot type "+r+" already registered.");else for(var i in y(t),e.subplotsRegistry[r]=t,e.componentsRegistry)b(i,t.name)}(t.basePlotModule);for(var o={},l=0;l<i.length;l++)o[i[l]]=!0,e.allCategories[i[l]]=!0;for(var u in e.modules[r]={_module:t,categories:o},a&&Object.keys(a).length&&(e.modules[r].meta=a),e.allTypes.push(r),e.componentsRegistry)m(u,r);t.layoutAttributes&&f(e.traceLayoutAttributes,t.layoutAttributes);var c=t.basePlotModule,h=c.name;if("mapbox"===h){var p=c.constants.styleRules;for(var d in p)s(".js-plotly-plot .plotly .mapboxgl-"+d,p[d])}"geo"!==h&&"mapbox"!==h||void 0!==window.PlotlyGeoAssets||(window.PlotlyGeoAssets={topojson:{}})}}function d(t){if("string"!=typeof t.name)throw new Error("Component module *name* must be a string.");var r=t.name;for(var n in e.componentsRegistry[r]=t,t.layoutAttributes&&(t.layoutAttributes._isLinkedToArray&&a(e.layoutArrayContainers,r),y(t)),e.modules)m(r,n);for(var i in e.subplotsRegistry)b(r,i);for(var o in e.transformsRegistry)x(r,o);t.schema&&t.schema.layout&&h(c,t.schema.layout)}function v(t){if("string"!=typeof t.name)throw new Error("Transform module *name* must be a string.");var r="Transform module "+t.name,i="function"==typeof t.transform,a="function"==typeof t.calcTransform;if(!i&&!a)throw new Error(r+" is missing a *transform* or *calcTransform* method.");for(var s in i&&a&&n.log([r+" has both a *transform* and *calcTransform* methods.","Please note that all *transform* methods are executed","before all *calcTransform* methods."].join(" ")),o(t.attributes)||n.log(r+" registered without an *attributes* object."),"function"!=typeof t.supplyDefaults&&n.log(r+" registered without a *supplyDefaults* method."),e.transformsRegistry[t.name]=t,e.componentsRegistry)x(s,t.name)}function g(t){var r=t.name,n=r.split("-")[0],i=t.dictionary,a=t.format,o=i&&Object.keys(i).length,s=a&&Object.keys(a).length,l=e.localeRegistry,u=l[r];if(u||(l[r]=u={}),n!==r){var c=l[n];c||(l[n]=c={}),o&&c.dictionary===u.dictionary&&(c.dictionary=i),s&&c.format===u.format&&(c.format=a)}o&&(u.dictionary=i),s&&(u.format=a)}function y(t){if(t.layoutAttributes){var r=t.layoutAttributes._arrayAttrRegexps;if(r)for(var n=0;n<r.length;n++)a(e.layoutArrayRegexes,r[n])}}function m(t,r){var n=e.componentsRegistry[t].schema;if(n&&n.traces){var i=n.traces[r];i&&h(e.modules[r]._module.attributes,i)}}function x(t,r){var n=e.componentsRegistry[t].schema;if(n&&n.transforms){var i=n.transforms[r];i&&h(e.transformsRegistry[r].attributes,i)}}function b(t,r){var n=e.componentsRegistry[t].schema;if(n&&n.subplots){var i=e.subplotsRegistry[r],a=i.layoutAttributes,o="subplot"===i.attr?i.name:i.attr;Array.isArray(o)&&(o=o[0]);var s=n.subplots[o];a&&s&&h(a,s)}}function _(t){return"object"==typeof t&&(t=t.type),t}e.modules={},e.allCategories={},e.allTypes=[],e.subplotsRegistry={},e.transformsRegistry={},e.componentsRegistry={},e.layoutArrayContainers=[],e.layoutArrayRegexes=[],e.traceLayoutAttributes={},e.localeRegistry={},e.apiMethodRegistry={},e.collectableSubplotTypes=null,e.register=function(t){if(e.collectableSubplotTypes=null,!t)throw new Error("No argument passed to Plotly.register.");t&&!Array.isArray(t)&&(t=[t]);for(var r=0;r<t.length;r++){var n=t[r];if(!n)throw new Error("Invalid module was attempted to be registered!");switch(n.moduleType){case"trace":p(n);break;case"transform":v(n);break;case"component":d(n);break;case"locale":g(n);break;case"apiMethod":var i=n.name;e.apiMethodRegistry[i]=n.fn;break;default:throw new Error("Invalid module was attempted to be registered!")}}},e.getModule=function(t){var r=e.modules[_(t)];return!!r&&r._module},e.traceIs=function(t,r){if("various"===(t=_(t)))return!1;var i=e.modules[t];return i||(t&&n.log("Unrecognized trace type "+t+"."),i=e.modules[u.type.dflt]),!!i.categories[r]},e.getTransformIndices=function(t,e){for(var r=[],n=t.transforms||[],i=0;i<n.length;i++)n[i].type===e&&r.push(i);return r},e.hasTransform=function(t,e){for(var r=t.transforms||[],n=0;n<r.length;n++)if(r[n].type===e)return!0;return!1},e.getComponentMethod=function(t,r){var n=e.componentsRegistry[t];return n&&n[r]||i},e.call=function(){var t=arguments[0],r=[].slice.call(arguments,1);return e.apiMethodRegistry[t].apply(null,r)}},61914:function(t,e,r){"use strict";var n=r(73972),i=r(71828),a=i.extendFlat,o=i.extendDeep;function s(t){var e;switch(t){case"themes__thumb":e={autosize:!0,width:150,height:150,title:{text:""},showlegend:!1,margin:{l:5,r:5,t:5,b:5,pad:0},annotations:[]};break;case"thumbnail":e={title:{text:""},hidesources:!0,showlegend:!1,borderwidth:0,bordercolor:"",margin:{l:1,r:1,t:1,b:1,pad:0},annotations:[]};break;default:e={}}return e}t.exports=function(t,e){var r,i,l=t.data,u=t.layout,c=o([],l),f=o({},u,s(e.tileClass)),h=t._context||{};if(e.width&&(f.width=e.width),e.height&&(f.height=e.height),"thumbnail"===e.tileClass||"themes__thumb"===e.tileClass){f.annotations=[];var p=Object.keys(f);for(r=0;r<p.length;r++)i=p[r],["xaxis","yaxis","zaxis"].indexOf(i.slice(0,5))>-1&&(f[p[r]].title={text:""});for(r=0;r<c.length;r++){var d=c[r];d.showscale=!1,d.marker&&(d.marker.showscale=!1),n.traceIs(d,"pie-like")&&(d.textposition="none")}}if(Array.isArray(e.annotations))for(r=0;r<e.annotations.length;r++)f.annotations.push(e.annotations[r]);var v=Object.keys(f).filter((function(t){return t.match(/^scene\d*$/)}));if(v.length){var g={};for("thumbnail"===e.tileClass&&(g={title:{text:""},showaxeslabels:!1,showticklabels:!1,linetickenable:!1}),r=0;r<v.length;r++){var y=f[v[r]];y.xaxis||(y.xaxis={}),y.yaxis||(y.yaxis={}),y.zaxis||(y.zaxis={}),a(y.xaxis,g),a(y.yaxis,g),a(y.zaxis,g),y._scene=null}}var m=document.createElement("div");e.tileClass&&(m.className=e.tileClass);var x={gd:m,td:m,layout:f,data:c,config:{staticPlot:void 0===e.staticPlot||e.staticPlot,plotGlPixelRatio:void 0===e.plotGlPixelRatio?2:e.plotGlPixelRatio,displaylogo:e.displaylogo||!1,showLink:e.showLink||!1,showTips:e.showTips||!1,mapboxAccessToken:h.mapboxAccessToken}};return"transparent"!==e.setBackground&&(x.config.setBackground=e.setBackground||"opaque"),x.gd.defaultLayout=s(e.tileClass),x}},7239:function(t,e,r){"use strict";var n=r(71828),i=r(403),a=r(22435),o=r(25095);t.exports=function(t,e){var r;return n.isPlainObject(t)||(r=n.getGraphDiv(t)),(e=e||{}).format=e.format||"png",e.width=e.width||null,e.height=e.height||null,e.imageDataOnly=!0,new Promise((function(s,l){r&&r._snapshotInProgress&&l(new Error("Snapshotting already in progress.")),n.isIE()&&"svg"!==e.format&&l(new Error(o.MSG_IE_BAD_FORMAT)),r&&(r._snapshotInProgress=!0);var u=i(t,e),c=e.filename||t.fn||"newplot";c+="."+e.format.replace("-","."),u.then((function(t){return r&&(r._snapshotInProgress=!1),a(t,c,e.format)})).then((function(t){s(t)})).catch((function(t){r&&(r._snapshotInProgress=!1),l(t)}))}))}},22435:function(t,e,r){"use strict";var n=r(71828),i=r(25095);t.exports=function(t,e,r){var a=document.createElement("a"),o="download"in a;return new Promise((function(s,l){var u,c;if(n.isIE())return u=i.createBlob(t,"svg"),window.navigator.msSaveBlob(u,e),u=null,s(e);if(o)return u=i.createBlob(t,r),c=i.createObjectURL(u),a.href=c,a.download=e,document.body.appendChild(a),a.click(),document.body.removeChild(a),i.revokeObjectURL(c),u=null,s(e);if(n.isSafari()){var f="svg"===r?",":";base64,";return i.octetStream(f+encodeURIComponent(t)),s(e)}l(new Error("download error"))}))}},25095:function(t,e,r){"use strict";var n=r(73972);e.getDelay=function(t){return t._has&&(t._has("gl3d")||t._has("gl2d")||t._has("mapbox"))?500:0},e.getRedrawFunc=function(t){return function(){n.getComponentMethod("colorbar","draw")(t)}},e.encodeSVG=function(t){return"data:image/svg+xml,"+encodeURIComponent(t)},e.encodeJSON=function(t){return"data:application/json,"+encodeURIComponent(t)};var i=window.URL||window.webkitURL;e.createObjectURL=function(t){return i.createObjectURL(t)},e.revokeObjectURL=function(t){return i.revokeObjectURL(t)},e.createBlob=function(t,e){if("svg"===e)return new window.Blob([t],{type:"image/svg+xml;charset=utf-8"});if("full-json"===e)return new window.Blob([t],{type:"application/json;charset=utf-8"});var r=function(t){for(var e=t.length,r=new ArrayBuffer(e),n=new Uint8Array(r),i=0;i<e;i++)n[i]=t.charCodeAt(i);return r}(window.atob(t));return new window.Blob([r],{type:"image/"+e})},e.octetStream=function(t){document.location.href="data:application/octet-stream"+t},e.IMAGE_URL_PREFIX=/^data:image\/\w+;base64,/,e.MSG_IE_BAD_FORMAT="Sorry IE does not support downloading from canvas. Try {format:'svg'} instead."},44511:function(t,e,r){"use strict";var n=r(25095),i={getDelay:n.getDelay,getRedrawFunc:n.getRedrawFunc,clone:r(61914),toSVG:r(5900),svgToImg:r(70942),toImage:r(56395),downloadImage:r(7239)};t.exports=i},70942:function(t,e,r){"use strict";var n=r(71828),i=r(15398).EventEmitter,a=r(25095);t.exports=function(t){var e=t.emitter||new i,r=new Promise((function(i,o){var s=window.Image,l=t.svg,u=t.format||"png";if(n.isIE()&&"svg"!==u){var c=new Error(a.MSG_IE_BAD_FORMAT);return o(c),t.promise?r:e.emit("error",c)}var f,h,p=t.canvas,d=t.scale||1,v=t.width||300,g=t.height||150,y=d*v,m=d*g,x=p.getContext("2d",{willReadFrequently:!0}),b=new s;"svg"===u||n.isSafari()?h=a.encodeSVG(l):(f=a.createBlob(l,"svg"),h=a.createObjectURL(f)),p.width=y,p.height=m,b.onload=function(){var r;switch(f=null,a.revokeObjectURL(h),"svg"!==u&&x.drawImage(b,0,0,y,m),u){case"jpeg":r=p.toDataURL("image/jpeg");break;case"png":r=p.toDataURL("image/png");break;case"webp":r=p.toDataURL("image/webp");break;case"svg":r=h;break;default:var n="Image format is not jpeg, png, svg or webp.";if(o(new Error(n)),!t.promise)return e.emit("error",n)}i(r),t.promise||e.emit("success",r)},b.onerror=function(r){if(f=null,a.revokeObjectURL(h),o(r),!t.promise)return e.emit("error",r)},b.src=h}));return t.promise?r:e}},56395:function(t,e,r){"use strict";var n=r(15398).EventEmitter,i=r(73972),a=r(71828),o=r(25095),s=r(61914),l=r(5900),u=r(70942);t.exports=function(t,e){var r=new n,c=s(t,{format:"png"}),f=c.gd;f.style.position="absolute",f.style.left="-5000px",document.body.appendChild(f);var h=o.getRedrawFunc(f);return i.call("_doPlot",f,c.data,c.layout,c.config).then(h).then((function(){var t=o.getDelay(f._fullLayout);setTimeout((function(){var t=l(f),n=document.createElement("canvas");n.id=a.randstr(),(r=u({format:e.format,width:f._fullLayout.width,height:f._fullLayout.height,canvas:n,emitter:r,svg:t})).clean=function(){f&&document.body.removeChild(f)}}),t)})).catch((function(t){r.emit("error",t)})),r}},5900:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=r(91424),o=r(7901),s=r(77922),l=/"/g,u="TOBESTRIPPED",c=new RegExp('("'+u+")|("+u+'")',"g");t.exports=function(t,e,r){var f,h=t._fullLayout,p=h._paper,d=h._toppaper,v=h.width,g=h.height;p.insert("rect",":first-child").call(a.setRect,0,0,v,g).call(o.fill,h.paper_bgcolor);var y=h._basePlotModules||[];for(f=0;f<y.length;f++){var m=y[f];m.toSVG&&m.toSVG(t)}if(d){var x=d.node().childNodes,b=Array.prototype.slice.call(x);for(f=0;f<b.length;f++){var _=b[f];_.childNodes.length&&p.node().appendChild(_)}}h._draggers&&h._draggers.remove(),p.node().style.background="",p.selectAll("text").attr({"data-unformatted":null,"data-math":null}).each((function(){var t=n.select(this);if("hidden"!==this.style.visibility&&"none"!==this.style.display){t.style({visibility:null,display:null});var e=this.style.fontFamily;e&&-1!==e.indexOf('"')&&t.style("font-family",e.replace(l,u))}else t.remove()})),p.selectAll(".gradient_filled,.pattern_filled").each((function(){var t=n.select(this),e=this.style.fill;e&&-1!==e.indexOf("url(")&&t.style("fill",e.replace(l,u));var r=this.style.stroke;r&&-1!==r.indexOf("url(")&&t.style("stroke",r.replace(l,u))})),"pdf"!==e&&"eps"!==e||p.selectAll("#MathJax_SVG_glyphs path").attr("stroke-width",0),p.node().setAttributeNS(s.xmlns,"xmlns",s.svg),p.node().setAttributeNS(s.xmlns,"xmlns:xlink",s.xlink),"svg"===e&&r&&(p.attr("width",r*v),p.attr("height",r*g),p.attr("viewBox","0 0 "+v+" "+g));var w=(new window.XMLSerializer).serializeToString(p.node());return w=(w=(w=function(t){var e=n.select("body").append("div").style({display:"none"}).html(""),r=t.replace(/(&[^;]*;)/gi,(function(t){return"&lt;"===t?"&#60;":"&rt;"===t?"&#62;":-1!==t.indexOf("<")||-1!==t.indexOf(">")?"":e.html(t).text()}));return e.remove(),r}(w)).replace(/&(?!\w+;|\#[0-9]+;| \#x[0-9A-F]+;)/g,"&amp;")).replace(c,"'"),i.isIE()&&(w=(w=(w=w.replace(/"/gi,"'")).replace(/(\('#)([^']*)('\))/gi,'("#$2")')).replace(/(\\')/gi,'"')),w}},75341:function(t,e,r){"use strict";var n=r(71828);t.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,"tx"),n.mergeArray(e.hovertext,t,"htx");var i=e.marker;if(i){n.mergeArray(i.opacity,t,"mo",!0),n.mergeArray(i.color,t,"mc");var a=i.line;a&&(n.mergeArray(a.color,t,"mlc"),n.mergeArrayCastPositive(a.width,t,"mlw"))}}},1486:function(t,e,r){"use strict";var n=r(82196),i=r(12663).axisHoverFormat,a=r(5386).fF,o=r(5386).si,s=r(50693),l=r(41940),u=r(97313),c=r(79952).u,f=r(1426).extendFlat,h=l({editType:"calc",arrayOk:!0,colorEditType:"style"}),p=f({},n.marker.line.width,{dflt:0}),d=f({width:p,editType:"calc"},s("marker.line")),v=f({line:d,editType:"calc"},s("marker"),{opacity:{valType:"number",arrayOk:!0,dflt:1,min:0,max:1,editType:"style"},pattern:c});t.exports={x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,xperiod:n.xperiod,yperiod:n.yperiod,xperiod0:n.xperiod0,yperiod0:n.yperiod0,xperiodalignment:n.xperiodalignment,yperiodalignment:n.yperiodalignment,xhoverformat:i("x"),yhoverformat:i("y"),text:n.text,texttemplate:o({editType:"plot"},{keys:u.eventDataKeys}),hovertext:n.hovertext,hovertemplate:a({},{keys:u.eventDataKeys}),textposition:{valType:"enumerated",values:["inside","outside","auto","none"],dflt:"auto",arrayOk:!0,editType:"calc"},insidetextanchor:{valType:"enumerated",values:["end","middle","start"],dflt:"end",editType:"plot"},textangle:{valType:"angle",dflt:"auto",editType:"plot"},textfont:f({},h,{}),insidetextfont:f({},h,{}),outsidetextfont:f({},h,{}),constraintext:{valType:"enumerated",values:["inside","outside","both","none"],dflt:"both",editType:"calc"},cliponaxis:f({},n.cliponaxis,{}),orientation:{valType:"enumerated",values:["v","h"],editType:"calc+clearAxisTypes"},base:{valType:"any",dflt:null,arrayOk:!0,editType:"calc"},offset:{valType:"number",dflt:null,arrayOk:!0,editType:"calc"},width:{valType:"number",dflt:null,min:0,arrayOk:!0,editType:"calc"},marker:v,offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup,selected:{marker:{opacity:n.selected.marker.opacity,color:n.selected.marker.color,editType:"style"},textfont:n.selected.textfont,editType:"style"},unselected:{marker:{opacity:n.unselected.marker.opacity,color:n.unselected.marker.color,editType:"style"},textfont:n.unselected.textfont,editType:"style"},_deprecated:{bardir:{valType:"enumerated",editType:"calc",values:["v","h"]}}}},92290:function(t,e,r){"use strict";var n=r(89298),i=r(42973),a=r(52075).hasColorscale,o=r(78803),s=r(75341),l=r(66279);t.exports=function(t,e){var r,u,c,f,h,p,d=n.getFromId(t,e.xaxis||"x"),v=n.getFromId(t,e.yaxis||"y"),g={msUTC:!(!e.base&&0!==e.base)};"h"===e.orientation?(r=d.makeCalcdata(e,"x",g),c=v.makeCalcdata(e,"y"),f=i(e,v,"y",c),h=!!e.yperiodalignment,p="y"):(r=v.makeCalcdata(e,"y",g),c=d.makeCalcdata(e,"x"),f=i(e,d,"x",c),h=!!e.xperiodalignment,p="x"),u=f.vals;for(var y=Math.min(u.length,r.length),m=new Array(y),x=0;x<y;x++)m[x]={p:u[x],s:r[x]},h&&(m[x].orig_p=c[x],m[x][p+"End"]=f.ends[x],m[x][p+"Start"]=f.starts[x]),e.ids&&(m[x].id=String(e.ids[x]));return a(e,"marker")&&o(t,e,{vals:e.marker.color,containerStr:"marker",cLetter:"c"}),a(e,"marker.line")&&o(t,e,{vals:e.marker.line.color,containerStr:"marker.line",cLetter:"c"}),s(m,e),l(m,e),m}},97313:function(t){"use strict";t.exports={TEXTPAD:3,eventDataKeys:["value","label"]}},11661:function(t,e,r){"use strict";var n=r(92770),i=r(71828).isArrayOrTypedArray,a=r(50606).BADNUM,o=r(73972),s=r(89298),l=r(99082).getAxisGroup,u=r(61546);function c(t,e,r,o,c){if(o.length){var b,_,w,T;switch(function(t,e){var r,a;for(r=0;r<e.length;r++){var o,s=e[r],l=s[0].trace,u="funnel"===l.type?l._base:l.base,c="h"===l.orientation?l.xcalendar:l.ycalendar,f="category"===t.type||"multicategory"===t.type?function(){return null}:t.d2c;if(i(u)){for(a=0;a<Math.min(u.length,s.length);a++)o=f(u[a],0,c),n(o)?(s[a].b=+o,s[a].hasB=1):s[a].b=0;for(;a<s.length;a++)s[a].b=0}else{o=f(u,0,c);var h=n(o);for(o=h?o:0,a=0;a<s.length;a++)s[a].b=o,h&&(s[a].hasB=1)}}}(r,o),c.mode){case"overlay":f(e,r,o,c);break;case"group":for(b=[],_=[],w=0;w<o.length;w++)void 0===(T=o[w])[0].trace.offset?_.push(T):b.push(T);_.length&&function(t,e,r,n,i){var o=new u(n,{posAxis:e,sepNegVal:!1,overlapNoMerge:!i.norm});(function(t,e,r,n){for(var i=t._fullLayout,a=r.positions,o=r.distinctPositions,s=r.minDiff,u=r.traces,c=u.length,f=a.length!==o.length,h=s*(1-n.gap),g=l(i,e._id)+u[0][0].trace.orientation,y=i._alignmentOpts[g]||{},m=0;m<c;m++){var x,b,_=u[m],w=_[0].trace,T=y[w.alignmentgroup]||{},k=Object.keys(T.offsetGroups||{}).length,A=(x=k?h/k:f?h/c:h)*(1-(n.groupgap||0));b=k?((2*w._offsetIndex+1-k)*x-A)/2:f?((2*m+1-c)*x-A)/2:-A/2;var M=_[0].t;M.barwidth=A,M.poffset=b,M.bargroupwidth=h,M.bardelta=s}r.binWidth=u[0][0].t.barwidth/100,p(r),d(e,r),v(e,r,f)})(t,e,o,i),function(t,e){for(var r=t.traces,n=0;n<r.length;n++){var i=r[n];if(void 0===i[0].trace.base)for(var o=new u([i],{posAxis:e,sepNegVal:!0,overlapNoMerge:!0}),s=0;s<i.length;s++){var l=i[s];if(l.p!==a){var c=o.put(l.p,l.b+l.s);c&&(l.b=c)}}}}(o,e),i.norm?(y(o),m(r,o,i)):g(r,o)}(t,e,r,_,c),b.length&&f(e,r,b,c);break;case"stack":case"relative":for(b=[],_=[],w=0;w<o.length;w++)void 0===(T=o[w])[0].trace.base?_.push(T):b.push(T);_.length&&function(t,e,r,n,i){var o=new u(n,{posAxis:e,sepNegVal:"relative"===i.mode,overlapNoMerge:!(i.norm||"stack"===i.mode||"relative"===i.mode)});h(e,o,i),function(t,e,r){var n,i,o,l,u,c,f=x(t),h=e.traces;for(l=0;l<h.length;l++)if("funnel"===(i=(n=h[l])[0].trace).type)for(u=0;u<n.length;u++)(c=n[u]).s!==a&&e.put(c.p,-.5*c.s);for(l=0;l<h.length;l++){o="funnel"===(i=(n=h[l])[0].trace).type;var p=[];for(u=0;u<n.length;u++)if((c=n[u]).s!==a){var d;d=o?c.s:c.s+c.b;var v=e.put(c.p,d),g=v+d;c.b=v,c[f]=g,r.norm||(p.push(g),c.hasB&&p.push(v))}r.norm||(i._extremes[t._id]=s.findExtremes(t,p,{tozero:!0,padded:!0}))}}(r,o,i);for(var l=0;l<n.length;l++)for(var c=n[l],f=0;f<c.length;f++){var p=c[f];p.s!==a&&p.b+p.s===o.get(p.p,p.s)&&(p._outmost=!0)}i.norm&&m(r,o,i)}(0,e,r,_,c),b.length&&f(e,r,b,c)}!function(t,e){var r,i,a,o=x(e),s={},l=1/0,u=-1/0;for(r=0;r<t.length;r++)for(a=t[r],i=0;i<a.length;i++){var c=a[i].p;n(c)&&(l=Math.min(l,c),u=Math.max(u,c))}var f=1e4/(u-l),h=s.round=function(t){return String(Math.round(f*(t-l)))};for(r=0;r<t.length;r++){(a=t[r])[0].t.extents=s;var p=a[0].t.poffset,d=Array.isArray(p);for(i=0;i<a.length;i++){var v=a[i],g=v[o]-v.w/2;if(n(g)){var y=v[o]+v.w/2,m=h(v.p);s[m]?s[m]=[Math.min(g,s[m][0]),Math.max(y,s[m][1])]:s[m]=[g,y]}v.p0=v.p+(d?p[i]:p),v.p1=v.p0+v.w,v.s0=v.b,v.s1=v.s0+v.s}}}(o,e)}}function f(t,e,r,n){for(var i=0;i<r.length;i++){var a=r[i],o=new u([a],{posAxis:t,sepNegVal:!1,overlapNoMerge:!n.norm});h(t,o,n),n.norm?(y(o),m(e,o,n)):g(e,o)}}function h(t,e,r){for(var n=e.minDiff,i=e.traces,a=n*(1-r.gap),o=a*(1-(r.groupgap||0)),s=-o/2,l=0;l<i.length;l++){var u=i[l][0].t;u.barwidth=o,u.poffset=s,u.bargroupwidth=a,u.bardelta=n}e.binWidth=i[0][0].t.barwidth/100,p(e),d(t,e),v(t,e)}function p(t){var e,r,a=t.traces;for(e=0;e<a.length;e++){var o,s=a[e],l=s[0],u=l.trace,c=l.t,f=u._offset||u.offset,h=c.poffset;if(i(f)){for(o=Array.prototype.slice.call(f,0,s.length),r=0;r<o.length;r++)n(o[r])||(o[r]=h);for(r=o.length;r<s.length;r++)o.push(h);c.poffset=o}else void 0!==f&&(c.poffset=f);var p=u._width||u.width,d=c.barwidth;if(i(p)){var v=Array.prototype.slice.call(p,0,s.length);for(r=0;r<v.length;r++)n(v[r])||(v[r]=d);for(r=v.length;r<s.length;r++)v.push(d);if(c.barwidth=v,void 0===f){for(o=[],r=0;r<s.length;r++)o.push(h+(d-v[r])/2);c.poffset=o}}else void 0!==p&&(c.barwidth=p,void 0===f&&(c.poffset=h+(d-p)/2))}}function d(t,e){for(var r=e.traces,n=x(t),i=0;i<r.length;i++)for(var a=r[i],o=a[0].t,s=o.poffset,l=Array.isArray(s),u=o.barwidth,c=Array.isArray(u),f=0;f<a.length;f++){var h=a[f],p=h.w=c?u[f]:u;void 0===h.p&&(h.p=h[n],h["orig_"+n]=h[n]);var d=(l?s[f]:s)+p/2;h[n]=h.p+d}}function v(t,e,r){var n=e.traces,i=e.minDiff/2;s.minDtick(t,e.minDiff,e.distinctPositions[0],r);for(var a=0;a<n.length;a++){var o,l,u,c,f=n[a],h=f[0],p=h.trace,d=[];for(c=0;c<f.length;c++)l=(o=f[c]).p-i,u=o.p+i,d.push(l,u);if(p.width||p.offset){var v=h.t,g=v.poffset,y=v.barwidth,m=Array.isArray(g),x=Array.isArray(y);for(c=0;c<f.length;c++){o=f[c];var b=m?g[c]:g,_=x?y[c]:y;u=(l=o.p+b)+_,d.push(l,u)}}p._extremes[t._id]=s.findExtremes(t,d,{padded:!1})}}function g(t,e){for(var r=e.traces,n=x(t),i=0;i<r.length;i++){for(var a=r[i],o=a[0].trace,l="scatter"===o.type,u="v"===o.orientation,c=[],f=!1,h=0;h<a.length;h++){var p=a[h],d=l?0:p.b,v=l?u?p.y:p.x:d+p.s;p[n]=v,c.push(v),p.hasB&&c.push(d),p.hasB&&p.b||(f=!0)}o._extremes[t._id]=s.findExtremes(t,c,{tozero:f,padded:!0})}}function y(t){for(var e=t.traces,r=0;r<e.length;r++)for(var n=e[r],i=0;i<n.length;i++){var o=n[i];o.s!==a&&t.put(o.p,o.b+o.s)}}function m(t,e,r){var i=e.traces,o=x(t),l="fraction"===r.norm?1:100,u=l/1e9,c=t.l2c(t.c2l(0)),f="stack"===r.mode?l:c;function h(e){return n(t.c2l(e))&&(e<c-u||e>f+u||!n(c))}for(var p=0;p<i.length;p++){for(var d=i[p],v=d[0].trace,g=[],y=!1,m=!1,b=0;b<d.length;b++){var _=d[b];if(_.s!==a){var w=Math.abs(l/e.get(_.p,_.s));_.b*=w,_.s*=w;var T=_.b,k=T+_.s;_[o]=k,g.push(k),m=m||h(k),_.hasB&&(g.push(T),m=m||h(T)),_.hasB&&_.b||(y=!0)}}v._extremes[t._id]=s.findExtremes(t,g,{tozero:y,padded:m})}}function x(t){return t._id.charAt(0)}t.exports={crossTraceCalc:function(t,e){for(var r=e.xaxis,n=e.yaxis,i=t._fullLayout,a=t._fullData,s=t.calcdata,l=[],u=[],f=0;f<a.length;f++){var h=a[f];if(!0===h.visible&&o.traceIs(h,"bar")&&h.xaxis===r._id&&h.yaxis===n._id&&("h"===h.orientation?l.push(s[f]):u.push(s[f]),h._computePh))for(var p=t.calcdata[f],d=0;d<p.length;d++)"function"==typeof p[d].ph0&&(p[d].ph0=p[d].ph0()),"function"==typeof p[d].ph1&&(p[d].ph1=p[d].ph1())}var v={xCat:"category"===r.type||"multicategory"===r.type,yCat:"category"===n.type||"multicategory"===n.type,mode:i.barmode,norm:i.barnorm,gap:i.bargap,groupgap:i.bargroupgap};c(t,r,n,u,v),c(t,n,r,l,v)},setGroupPositions:c}},90769:function(t,e,r){"use strict";var n=r(71828),i=r(7901),a=r(73972),o=r(67513),s=r(73927),l=r(98340),u=r(26125),c=r(1486),f=n.coerceFont;function h(t,e,r,i,a,o){var s=!(!1===(o=o||{}).moduleHasSelected),l=!(!1===o.moduleHasUnselected),u=!(!1===o.moduleHasConstrain),c=!(!1===o.moduleHasCliponaxis),h=!(!1===o.moduleHasTextangle),p=!(!1===o.moduleHasInsideanchor),d=!!o.hasPathbar,v=Array.isArray(a)||"auto"===a,g=v||"inside"===a,y=v||"outside"===a;if(g||y){var m=f(i,"textfont",r.font),x=n.extendFlat({},m),b=!(t.textfont&&t.textfont.color);if(b&&delete x.color,f(i,"insidetextfont",x),d){var _=n.extendFlat({},m);b&&delete _.color,f(i,"pathbar.textfont",_)}y&&f(i,"outsidetextfont",m),s&&i("selected.textfont.color"),l&&i("unselected.textfont.color"),u&&i("constraintext"),c&&i("cliponaxis"),h&&i("textangle"),i("texttemplate")}g&&p&&i("insidetextanchor")}t.exports={supplyDefaults:function(t,e,r,u){function f(r,i){return n.coerce(t,e,c,r,i)}if(o(t,e,u,f)){s(t,e,u,f),f("xhoverformat"),f("yhoverformat"),f("orientation",e.x&&!e.y?"h":"v"),f("base"),f("offset"),f("width"),f("text"),f("hovertext"),f("hovertemplate");var p=f("textposition");h(t,0,u,f,p,{moduleHasSelected:!0,moduleHasUnselected:!0,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),l(t,e,f,r,u);var d=(e.marker.line||{}).color,v=a.getComponentMethod("errorbars","supplyDefaults");v(t,e,d||i.defaultLine,{axis:"y"}),v(t,e,d||i.defaultLine,{axis:"x",inherit:"y"}),n.coerceSelectionMarkerOpacity(e,f)}else e.visible=!1},crossTraceDefaults:function(t,e){var r,i;function a(t){return n.coerce(i._input,i,c,t)}if("group"===e.barmode)for(var o=0;o<t.length;o++)"bar"===(i=t[o]).type&&(r=i._input,u(r,i,e,a))},handleText:h}},58065:function(t){"use strict";t.exports=function(t,e,r){return t.x="xVal"in e?e.xVal:e.x,t.y="yVal"in e?e.yVal:e.y,e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),"h"===r.orientation?(t.label=t.y,t.value=t.x):(t.label=t.x,t.value=t.y),t}},69383:function(t,e,r){"use strict";var n=r(92770),i=r(84267),a=r(71828).isArrayOrTypedArray;e.coerceString=function(t,e,r){if("string"==typeof e){if(e||!t.noBlank)return e}else if(("number"==typeof e||!0===e)&&!t.strict)return String(e);return void 0!==r?r:t.dflt},e.coerceNumber=function(t,e,r){if(n(e)){e=+e;var i=t.min,a=t.max;if(!(void 0!==i&&e<i||void 0!==a&&e>a))return e}return void 0!==r?r:t.dflt},e.coerceColor=function(t,e,r){return i(e).isValid()?e:void 0!==r?r:t.dflt},e.coerceEnumerated=function(t,e,r){return t.coerceNumber&&(e=+e),-1!==t.values.indexOf(e)?e:void 0!==r?r:t.dflt},e.getValue=function(t,e){var r;return Array.isArray(t)?e<t.length&&(r=t[e]):r=t,r},e.getLineWidth=function(t,e){return 0<e.mlw?e.mlw:a(t.marker.line.width)?0:t.marker.line.width}},95423:function(t,e,r){"use strict";var n=r(30211),i=r(73972),a=r(7901),o=r(71828).fillText,s=r(69383).getLineWidth,l=r(89298).hoverLabelText,u=r(50606).BADNUM;function c(t,e,r,i,a){var s,c,f,h,p,d,v,g=t.cd,y=g[0].trace,m=g[0].t,x="closest"===i,b="waterfall"===y.type,_=t.maxHoverDistance,w=t.maxSpikeDistance;"h"===y.orientation?(s=r,c=e,f="y",h="x",p=D,d=O):(s=e,c=r,f="x",h="y",d=D,p=O);var T=y[f+"period"],k=x||T;function A(t){return S(t,-1)}function M(t){return S(t,1)}function S(t,e){var r=t.w;return t[f]+e*r/2}function E(t){return t[f+"End"]-t[f+"Start"]}var L=x?A:T?function(t){return t.p-E(t)/2}:function(t){return Math.min(A(t),t.p-m.bardelta/2)},C=x?M:T?function(t){return t.p+E(t)/2}:function(t){return Math.max(M(t),t.p+m.bardelta/2)};function P(t,e,r){return a.finiteRange&&(r=0),n.inbox(t-s,e-s,r+Math.min(1,Math.abs(e-t)/v)-1)}function O(t){return P(L(t),C(t),_)}function I(t){var e=t[h];if(b){var r=Math.abs(t.rawS)||0;c>0?e+=r:c<0&&(e-=r)}return e}function D(t){var e=c,r=t.b,i=I(t);return n.inbox(r-e,i-e,_+(i-e)/(i-r)-1)}var z=t[f+"a"],R=t[h+"a"];v=Math.abs(z.r2c(z.range[1])-z.r2c(z.range[0]));var F=n.getDistanceFunction(i,p,d,(function(t){return(p(t)+d(t))/2}));if(n.getClosest(g,F,t),!1!==t.index&&g[t.index].p!==u){k||(L=function(t){return Math.min(A(t),t.p-m.bargroupwidth/2)},C=function(t){return Math.max(M(t),t.p+m.bargroupwidth/2)});var B=g[t.index],N=y.base?B.b+B.s:B.s;t[h+"0"]=t[h+"1"]=R.c2p(B[h],!0),t[h+"LabelVal"]=N;var j=m.extents[m.extents.round(B.p)];t[f+"0"]=z.c2p(x?L(B):j[0],!0),t[f+"1"]=z.c2p(x?C(B):j[1],!0);var U=void 0!==B.orig_p;return t[f+"LabelVal"]=U?B.orig_p:B.p,t.labelLabel=l(z,t[f+"LabelVal"],y[f+"hoverformat"]),t.valueLabel=l(R,t[h+"LabelVal"],y[h+"hoverformat"]),t.baseLabel=l(R,B.b,y[h+"hoverformat"]),t.spikeDistance=(function(t){var e=c,r=t.b,i=I(t);return n.inbox(r-e,i-e,w+(i-e)/(i-r)-1)}(B)+function(t){return P(A(t),M(t),w)}(B))/2,t[f+"Spike"]=z.c2p(B.p,!0),o(B,y,t),t.hovertemplate=y.hovertemplate,t}}function f(t,e){var r=e.mcc||t.marker.color,n=e.mlcc||t.marker.line.color,i=s(t,e);return a.opacity(r)?r:a.opacity(n)&&i?n:void 0}t.exports={hoverPoints:function(t,e,r,n,a){var o=c(t,e,r,n,a);if(o){var s=o.cd,l=s[0].trace,u=s[o.index];return o.color=f(l,u),i.getComponentMethod("errorbars","hoverInfo")(u,l,o),[o]}},hoverOnBars:c,getTraceColor:f}},60822:function(t,e,r){"use strict";t.exports={attributes:r(1486),layoutAttributes:r(43641),supplyDefaults:r(90769).supplyDefaults,crossTraceDefaults:r(90769).crossTraceDefaults,supplyLayoutDefaults:r(13957),calc:r(92290),crossTraceCalc:r(11661).crossTraceCalc,colorbar:r(4898),arraysToCalcdata:r(75341),plot:r(17295).plot,style:r(16688).style,styleOnSelect:r(16688).styleOnSelect,hoverPoints:r(95423).hoverPoints,eventData:r(58065),selectPoints:r(81974),moduleType:"trace",name:"bar",basePlotModule:r(93612),categories:["bar-like","cartesian","svg","bar","oriented","errorBarsOK","showLegend","zoomScale"],animatable:!0,meta:{}}},43641:function(t){"use strict";t.exports={barmode:{valType:"enumerated",values:["stack","group","overlay","relative"],dflt:"group",editType:"calc"},barnorm:{valType:"enumerated",values:["","fraction","percent"],dflt:"",editType:"calc"},bargap:{valType:"number",min:0,max:1,editType:"calc"},bargroupgap:{valType:"number",min:0,max:1,dflt:0,editType:"calc"}}},13957:function(t,e,r){"use strict";var n=r(73972),i=r(89298),a=r(71828),o=r(43641);t.exports=function(t,e,r){function s(r,n){return a.coerce(t,e,o,r,n)}for(var l=!1,u=!1,c=!1,f={},h=s("barmode"),p=0;p<r.length;p++){var d=r[p];if(n.traceIs(d,"bar")&&d.visible){if(l=!0,"group"===h){var v=d.xaxis+d.yaxis;f[v]&&(c=!0),f[v]=!0}d.visible&&"histogram"===d.type&&"category"!==i.getFromId({_fullLayout:e},d["v"===d.orientation?"xaxis":"yaxis"]).type&&(u=!0)}}l?("overlay"!==h&&s("barnorm"),s("bargap",u&&!c?0:.2),s("bargroupgap")):delete e.barmode}},17295:function(t,e,r){"use strict";var n=r(39898),i=r(92770),a=r(71828),o=r(63893),s=r(7901),l=r(91424),u=r(73972),c=r(89298).tickText,f=r(72597),h=f.recordMinTextSize,p=f.clearMinTextSize,d=r(16688),v=r(69383),g=r(97313),y=r(1486),m=y.text,x=y.textposition,b=r(23469).appendArrayPointValue,_=g.TEXTPAD;function w(t){return t.id}function T(t){if(t.ids)return w}function k(t,e){return t<e?1:-1}function A(t,e,r,n){var i;return!e.uniformtext.mode&&M(r)?(n&&(i=n()),t.transition().duration(r.duration).ease(r.easing).each("end",(function(){i&&i()})).each("interrupt",(function(){i&&i()}))):t}function M(t){return t&&t.duration>0}function S(t){return"auto"===t?0:t}function E(t,e){var r=Math.PI/180*e,n=Math.abs(Math.sin(r)),i=Math.abs(Math.cos(r));return{x:t.width*i+t.height*n,y:t.width*n+t.height*i}}function L(t,e,r,n,i,a){var o=!!a.isHorizontal,s=!!a.constrained,l=a.angle||0,u=a.anchor||"end",c="end"===u,f="start"===u,h=((a.leftToRight||0)+1)/2,p=1-h,d=i.width,v=i.height,g=Math.abs(e-t),y=Math.abs(n-r),m=g>2*_&&y>2*_?_:0;g-=2*m,y-=2*m;var x=S(l);"auto"!==l||d<=g&&v<=y||!(d>g||v>y)||(d>y||v>g)&&d<v==g<y||(x+=90);var b=E(i,x),w=1;s&&(w=Math.min(1,g/b.x,y/b.y));var T=i.left*p+i.right*h,A=(i.top+i.bottom)/2,M=(t+_)*p+(e-_)*h,L=(r+n)/2,C=0,P=0;if(f||c){var O=(o?b.x:b.y)/2,I=o?k(t,e):k(r,n);o?f?(M=t+I*m,C=-I*O):(M=e-I*m,C=I*O):f?(L=r+I*m,P=-I*O):(L=n-I*m,P=I*O)}return{textX:T,textY:A,targetX:M,targetY:L,anchorX:C,anchorY:P,scale:w,rotate:x}}t.exports={plot:function(t,e,r,f,g,y){var w=e.xaxis,C=e.yaxis,P=t._fullLayout,O=t._context.staticPlot;g||(g={mode:P.barmode,norm:P.barmode,gap:P.bargap,groupgap:P.bargroupgap},p("bar",P));var I=a.makeTraceGroups(f,r,"trace bars").each((function(r){var u=n.select(this),f=r[0].trace,p="waterfall"===f.type,I="funnel"===f.type,D="bar"===f.type||I,z=0;p&&f.connector.visible&&"between"===f.connector.mode&&(z=f.connector.line.width/2);var R="h"===f.orientation,F=M(g),B=a.ensureSingle(u,"g","points"),N=T(f),j=B.selectAll("g.point").data(a.identity,N);j.enter().append("g").classed("point",!0),j.exit().remove(),j.each((function(u,p){var T,M,I=n.select(this),B=function(t,e,r,n){var i=[],a=[],o=n?e:r,s=n?r:e;return i[0]=o.c2p(t.s0,!0),a[0]=s.c2p(t.p0,!0),i[1]=o.c2p(t.s1,!0),a[1]=s.c2p(t.p1,!0),n?[i,a]:[a,i]}(u,w,C,R),N=B[0][0],j=B[0][1],U=B[1][0],V=B[1][1],H=0==(R?j-N:V-U);if(H&&D&&v.getLineWidth(f,u)&&(H=!1),H||(H=!(i(N)&&i(j)&&i(U)&&i(V))),u.isBlank=H,H&&(R?j=N:V=U),z&&!H&&(R?(N-=k(N,j)*z,j+=k(N,j)*z):(U-=k(U,V)*z,V+=k(U,V)*z)),"waterfall"===f.type){if(!H){var q=f[u.dir].marker;T=q.line.width,M=q.color}}else T=v.getLineWidth(f,u),M=u.mc||f.marker.color;function G(t){var e=n.round(T/2%1,2);return 0===g.gap&&0===g.groupgap?n.round(Math.round(t)-e,2):t}if(!t._context.staticPlot){var Z=s.opacity(M)<1||T>.01?G:function(t,e,r){return r&&t===e?t:Math.abs(t-e)>=2?G(t):t>e?Math.ceil(t):Math.floor(t)};N=Z(N,j,R),j=Z(j,N,R),U=Z(U,V,!R),V=Z(V,U,!R)}var Y=A(a.ensureSingle(I,"path"),P,g,y);if(Y.style("vector-effect",O?"none":"non-scaling-stroke").attr("d",isNaN((j-N)*(V-U))||H&&t._context.staticPlot?"M0,0Z":"M"+N+","+U+"V"+V+"H"+j+"V"+U+"Z").call(l.setClipUrl,e.layerClipId,t),!P.uniformtext.mode&&F){var W=l.makePointStyleFns(f);l.singlePointStyle(u,Y,f,W,t)}!function(t,e,r,n,i,s,u,f,p,g,y){var w,T=e.xaxis,M=e.yaxis,C=t._fullLayout;function P(e,r,n){return a.ensureSingle(e,"text").text(r).attr({class:"bartext bartext-"+w,"text-anchor":"middle","data-notex":1}).call(l.font,n).call(o.convertToTspans,t)}var O=n[0].trace,I="h"===O.orientation,D=function(t,e,r,n,i){var o,s=e[0].trace;return o=s.texttemplate?function(t,e,r,n,i){var o=e[0].trace,s=a.castOption(o,r,"texttemplate");if(!s)return"";var l,u,f,h,p="histogram"===o.type,d="waterfall"===o.type,v="funnel"===o.type,g="h"===o.orientation;function y(t){return c(h,h.c2l(t),!0).text}g?(l="y",u=i,f="x",h=n):(l="x",u=n,f="y",h=i);var m,x=e[r],_={};_.label=x.p,_.labelLabel=_[l+"Label"]=(m=x.p,c(u,u.c2l(m),!0).text);var w=a.castOption(o,x.i,"text");(0===w||w)&&(_.text=w),_.value=x.s,_.valueLabel=_[f+"Label"]=y(x.s);var T={};b(T,o,x.i),(p||void 0===T.x)&&(T.x=g?_.value:_.label),(p||void 0===T.y)&&(T.y=g?_.label:_.value),(p||void 0===T.xLabel)&&(T.xLabel=g?_.valueLabel:_.labelLabel),(p||void 0===T.yLabel)&&(T.yLabel=g?_.labelLabel:_.valueLabel),d&&(_.delta=+x.rawS||x.s,_.deltaLabel=y(_.delta),_.final=x.v,_.finalLabel=y(_.final),_.initial=_.final-_.delta,_.initialLabel=y(_.initial)),v&&(_.value=x.s,_.valueLabel=y(_.value),_.percentInitial=x.begR,_.percentInitialLabel=a.formatPercent(x.begR),_.percentPrevious=x.difR,_.percentPreviousLabel=a.formatPercent(x.difR),_.percentTotal=x.sumR,_.percenTotalLabel=a.formatPercent(x.sumR));var k=a.castOption(o,x.i,"customdata");return k&&(_.customdata=k),a.texttemplateString(s,_,t._d3locale,T,_,o._meta||{})}(t,e,r,n,i):s.textinfo?function(t,e,r,n){var i=t[0].trace,o="h"===i.orientation,s="waterfall"===i.type,l="funnel"===i.type;function u(t){return c(o?r:n,+t,!0).text}var f,h,p=i.textinfo,d=t[e],v=p.split("+"),g=[],y=function(t){return-1!==v.indexOf(t)};if(y("label")&&g.push((h=t[e].p,c(o?n:r,h,!0).text)),y("text")&&(0===(f=a.castOption(i,d.i,"text"))||f)&&g.push(f),s){var m=+d.rawS||d.s,x=d.v,b=x-m;y("initial")&&g.push(u(b)),y("delta")&&g.push(u(m)),y("final")&&g.push(u(x))}if(l){y("value")&&g.push(u(d.s));var _=0;y("percent initial")&&_++,y("percent previous")&&_++,y("percent total")&&_++;var w=_>1;y("percent initial")&&(f=a.formatPercent(d.begR),w&&(f+=" of initial"),g.push(f)),y("percent previous")&&(f=a.formatPercent(d.difR),w&&(f+=" of previous"),g.push(f)),y("percent total")&&(f=a.formatPercent(d.sumR),w&&(f+=" of total"),g.push(f))}return g.join("<br>")}(e,r,n,i):v.getValue(s.text,r),v.coerceString(m,o)}(C,n,i,T,M);w=function(t,e){var r=v.getValue(t.textposition,e);return v.coerceEnumerated(x,r)}(O,i);var z="stack"===g.mode||"relative"===g.mode,R=n[i],F=!z||R._outmost;if(D&&"none"!==w&&(!R.isBlank&&s!==u&&f!==p||"auto"!==w&&"inside"!==w)){var B=C.font,N=d.getBarColor(n[i],O),j=d.getInsideTextFont(O,i,B,N),U=d.getOutsideTextFont(O,i,B),V=r.datum();I?"log"===T.type&&V.s0<=0&&(s=T.range[0]<T.range[1]?0:T._length):"log"===M.type&&V.s0<=0&&(f=M.range[0]<M.range[1]?M._length:0);var H,q,G,Z,Y,W=Math.abs(u-s)-2*_,X=Math.abs(p-f)-2*_;if("outside"===w&&(F||R.hasB||(w="inside")),"auto"===w&&(F?(w="inside",H=P(r,D,Y=a.ensureUniformFontSize(t,j)),G=(q=l.bBox(H.node())).width,Z=q.height,G>0&&Z>0&&(G<=W&&Z<=X||G<=X&&Z<=W||(I?W>=G*(X/Z):X>=Z*(W/G)))?w="inside":(w="outside",H.remove(),H=null)):w="inside"),!H){var J=(H=P(r,D,Y=a.ensureUniformFontSize(t,"outside"===w?U:j))).attr("transform");if(H.attr("transform",""),G=(q=l.bBox(H.node())).width,Z=q.height,H.attr("transform",J),G<=0||Z<=0)return void H.remove()}var K,$=O.textangle;K="outside"===w?function(t,e,r,n,i,a){var o,s=!!a.isHorizontal,l=!!a.constrained,u=a.angle||0,c=i.width,f=i.height,h=Math.abs(e-t),p=Math.abs(n-r);o=s?p>2*_?_:0:h>2*_?_:0;var d=1;l&&(d=s?Math.min(1,p/f):Math.min(1,h/c));var v=S(u),g=E(i,v),y=(s?g.x:g.y)/2,m=(i.left+i.right)/2,x=(i.top+i.bottom)/2,b=(t+e)/2,w=(r+n)/2,T=0,A=0,M=s?k(e,t):k(r,n);return s?(b=e-M*o,T=M*y):(w=n+M*o,A=-M*y),{textX:m,textY:x,targetX:b,targetY:w,anchorX:T,anchorY:A,scale:d,rotate:v}}(s,u,f,p,q,{isHorizontal:I,constrained:"both"===O.constraintext||"outside"===O.constraintext,angle:$}):L(s,u,f,p,q,{isHorizontal:I,constrained:"both"===O.constraintext||"inside"===O.constraintext,angle:$,anchor:O.insidetextanchor}),K.fontSize=Y.size,h("histogram"===O.type?"bar":O.type,K,C),R.transform=K;var Q=A(H,C,g,y);a.setTransormAndDisplay(Q,K)}else r.select("text").remove()}(t,e,I,r,p,N,j,U,V,g,y),e.layerClipId&&l.hideOutsideRangePoint(u,I.select("text"),w,C,f.xcalendar,f.ycalendar)}));var U=!1===f.cliponaxis;l.setClipUrl(u,U?null:e.layerClipId,t)}));u.getComponentMethod("errorbars","plot")(t,I,e,g)},toMoveInsideBar:L}},81974:function(t){"use strict";function e(t,e,r,n,i){var a=e.c2p(n?t.s0:t.p0,!0),o=e.c2p(n?t.s1:t.p1,!0),s=r.c2p(n?t.p0:t.s0,!0),l=r.c2p(n?t.p1:t.s1,!0);return i?[(a+o)/2,(s+l)/2]:n?[o,(s+l)/2]:[(a+o)/2,l]}t.exports=function(t,r){var n,i=t.cd,a=t.xaxis,o=t.yaxis,s=i[0].trace,l="funnel"===s.type,u="h"===s.orientation,c=[];if(!1===r)for(n=0;n<i.length;n++)i[n].selected=0;else for(n=0;n<i.length;n++){var f=i[n],h="ct"in f?f.ct:e(f,a,o,u,l);r.contains(h,!1,n,t)?(c.push({pointNumber:n,x:a.c2d(f.x),y:o.c2d(f.y)}),f.selected=1):f.selected=0}return c}},61546:function(t,e,r){"use strict";t.exports=i;var n=r(71828).distinctVals;function i(t,e){this.traces=t,this.sepNegVal=e.sepNegVal,this.overlapNoMerge=e.overlapNoMerge;for(var r=1/0,i=e.posAxis._id.charAt(0),a=[],o=0;o<t.length;o++){for(var s=t[o],l=0;l<s.length;l++){var u=s[l],c=u.p;void 0===c&&(c=u[i]),void 0!==c&&a.push(c)}s[0]&&s[0].width1&&(r=Math.min(s[0].width1,r))}this.positions=a;var f=n(a);this.distinctPositions=f.vals,1===f.vals.length&&r!==1/0?this.minDiff=r:this.minDiff=Math.min(f.minDiff,r);var h=(e.posAxis||{}).type;"category"!==h&&"multicategory"!==h||(this.minDiff=1),this.binWidth=this.minDiff,this.bins={}}i.prototype.put=function(t,e){var r=this.getLabel(t,e),n=this.bins[r]||0;return this.bins[r]=n+e,n},i.prototype.get=function(t,e){var r=this.getLabel(t,e);return this.bins[r]||0},i.prototype.getLabel=function(t,e){return(e<0&&this.sepNegVal?"v":"^")+(this.overlapNoMerge?t:Math.round(t/this.binWidth))}},16688:function(t,e,r){"use strict";var n=r(39898),i=r(7901),a=r(91424),o=r(71828),s=r(73972),l=r(72597).resizeText,u=r(1486),c=u.textfont,f=u.insidetextfont,h=u.outsidetextfont,p=r(69383);function d(t,e,r){a.pointStyle(t.selectAll("path"),e,r),v(t,e,r)}function v(t,e,r){t.selectAll("text").each((function(t){var i=n.select(this),s=o.ensureUniformFontSize(r,g(i,t,e,r));a.font(i,s)}))}function g(t,e,r,n){var i=n._fullLayout.font,a=r.textfont;if(t.classed("bartext-inside")){var o=_(e,r);a=m(r,e.i,i,o)}else t.classed("bartext-outside")&&(a=x(r,e.i,i));return a}function y(t,e,r){return b(c,t.textfont,e,r)}function m(t,e,r,n){var a=y(t,e,r);return(void 0===t._input.textfont||void 0===t._input.textfont.color||Array.isArray(t.textfont.color)&&void 0===t.textfont.color[e])&&(a={color:i.contrast(n),family:a.family,size:a.size}),b(f,t.insidetextfont,e,a)}function x(t,e,r){var n=y(t,e,r);return b(h,t.outsidetextfont,e,n)}function b(t,e,r,n){e=e||{};var i=p.getValue(e.family,r),a=p.getValue(e.size,r),o=p.getValue(e.color,r);return{family:p.coerceString(t.family,i,n.family),size:p.coerceNumber(t.size,a,n.size),color:p.coerceColor(t.color,o,n.color)}}function _(t,e){return"waterfall"===e.type?e[t.dir].marker.color:t.mcc||t.mc||e.marker.color}t.exports={style:function(t){var e=n.select(t).selectAll("g.barlayer").selectAll("g.trace");l(t,e,"bar");var r=e.size(),i=t._fullLayout;e.style("opacity",(function(t){return t[0].trace.opacity})).each((function(t){("stack"===i.barmode&&r>1||0===i.bargap&&0===i.bargroupgap&&!t[0].trace.marker.line.width)&&n.select(this).attr("shape-rendering","crispEdges")})),e.selectAll("g.points").each((function(e){d(n.select(this),e[0].trace,t)})),s.getComponentMethod("errorbars","style")(e)},styleTextPoints:v,styleOnSelect:function(t,e,r){var i=e[0].trace;i.selectedpoints?function(t,e,r){a.selectedPointStyle(t.selectAll("path"),e),function(t,e,r){t.each((function(t){var i,s=n.select(this);if(t.selected){i=o.ensureUniformFontSize(r,g(s,t,e,r));var l=e.selected.textfont&&e.selected.textfont.color;l&&(i.color=l),a.font(s,i)}else a.selectedTextStyle(s,e)}))}(t.selectAll("text"),e,r)}(r,i,t):(d(r,i,t),s.getComponentMethod("errorbars","style")(r))},getInsideTextFont:m,getOutsideTextFont:x,getBarColor:_,resizeText:l}},98340:function(t,e,r){"use strict";var n=r(7901),i=r(52075).hasColorscale,a=r(1586),o=r(71828).coercePattern;t.exports=function(t,e,r,s,l){var u=r("marker.color",s),c=i(t,"marker");c&&a(t,e,l,r,{prefix:"marker.",cLetter:"c"}),r("marker.line.color",n.defaultLine),i(t,"marker.line")&&a(t,e,l,r,{prefix:"marker.line.",cLetter:"c"}),r("marker.line.width"),r("marker.opacity"),o(r,"marker.pattern",u,c),r("selected.marker.color"),r("unselected.marker.color")}},72597:function(t,e,r){"use strict";var n=r(39898),i=r(71828);function a(t){return"_"+t+"Text_minsize"}t.exports={recordMinTextSize:function(t,e,r){if(r.uniformtext.mode){var n=a(t),i=r.uniformtext.minsize,o=e.scale*e.fontSize;e.hide=o<i,r[n]=r[n]||1/0,e.hide||(r[n]=Math.min(r[n],Math.max(o,i)))}},clearMinTextSize:function(t,e){e[a(t)]=void 0},resizeText:function(t,e,r){var a=t._fullLayout,o=a["_"+r+"Text_minsize"];if(o){var s,l="hide"===a.uniformtext.mode;switch(r){case"funnelarea":case"pie":case"sunburst":s="g.slice";break;case"treemap":case"icicle":s="g.slice, g.pathbar";break;default:s="g.points > g.point"}e.selectAll(s).each((function(t){var e=t.transform;if(e){e.scale=l&&e.hide?0:o/e.fontSize;var r=n.select(this).select("text");i.setTransormAndDisplay(r,e)}}))}}}},55023:function(t,e,r){"use strict";var n=r(5386).fF,i=r(1426).extendFlat,a=r(81245),o=r(1486);t.exports={r:a.r,theta:a.theta,r0:a.r0,dr:a.dr,theta0:a.theta0,dtheta:a.dtheta,thetaunit:a.thetaunit,base:i({},o.base,{}),offset:i({},o.offset,{}),width:i({},o.width,{}),text:i({},o.text,{}),hovertext:i({},o.hovertext,{}),marker:o.marker,hoverinfo:a.hoverinfo,hovertemplate:n(),selected:o.selected,unselected:o.unselected}},74692:function(t,e,r){"use strict";var n=r(52075).hasColorscale,i=r(78803),a=r(75341),o=r(11661).setGroupPositions,s=r(66279),l=r(73972).traceIs,u=r(71828).extendFlat;t.exports={calc:function(t,e){for(var r=t._fullLayout,o=e.subplot,l=r[o].radialaxis,u=r[o].angularaxis,c=l.makeCalcdata(e,"r"),f=u.makeCalcdata(e,"theta"),h=e._length,p=new Array(h),d=c,v=f,g=0;g<h;g++)p[g]={p:v[g],s:d[g]};function y(t){var r=e[t];void 0!==r&&(e["_"+t]=Array.isArray(r)?u.makeCalcdata(e,t):u.d2c(r,e.thetaunit))}return"linear"===u.type&&(y("width"),y("offset")),n(e,"marker")&&i(t,e,{vals:e.marker.color,containerStr:"marker",cLetter:"c"}),n(e,"marker.line")&&i(t,e,{vals:e.marker.line.color,containerStr:"marker.line",cLetter:"c"}),a(p,e),s(p,e),p},crossTraceCalc:function(t,e,r){for(var n=t.calcdata,i=[],a=0;a<n.length;a++){var s=n[a],c=s[0].trace;!0===c.visible&&l(c,"bar")&&c.subplot===r&&i.push(s)}var f=u({},e.radialaxis,{_id:"x"}),h=e.angularaxis;o(t,h,f,i,{mode:e.barmode,norm:e.barnorm,gap:e.bargap,groupgap:e.bargroupgap})}}},6135:function(t,e,r){"use strict";var n=r(71828),i=r(22184).handleRThetaDefaults,a=r(98340),o=r(55023);t.exports=function(t,e,r,s){function l(r,i){return n.coerce(t,e,o,r,i)}i(t,e,s,l)?(l("thetaunit"),l("base"),l("offset"),l("width"),l("text"),l("hovertext"),l("hovertemplate"),a(t,e,l,r,s),n.coerceSelectionMarkerOpacity(e,l)):e.visible=!1}},27379:function(t,e,r){"use strict";var n=r(30211),i=r(71828),a=r(95423).getTraceColor,o=i.fillText,s=r(59150).makeHoverPointText,l=r(10869).isPtInsidePolygon;t.exports=function(t,e,r){var u=t.cd,c=u[0].trace,f=t.subplot,h=f.radialAxis,p=f.angularAxis,d=f.vangles,v=d?l:i.isPtInsideSector,g=t.maxHoverDistance,y=p._period||2*Math.PI,m=Math.abs(h.g2p(Math.sqrt(e*e+r*r))),x=Math.atan2(r,e);if(h.range[0]>h.range[1]&&(x+=Math.PI),n.getClosest(u,(function(t){return v(m,x,[t.rp0,t.rp1],[t.thetag0,t.thetag1],d)?g+Math.min(1,Math.abs(t.thetag1-t.thetag0)/y)-1+(t.rp1-m)/(t.rp1-t.rp0)-1:1/0}),t),!1!==t.index){var b=u[t.index];t.x0=t.x1=b.ct[0],t.y0=t.y1=b.ct[1];var _=i.extendFlat({},b,{r:b.s,theta:b.p});return o(b,c,t),s(_,c,f,t),t.hovertemplate=c.hovertemplate,t.color=a(c,b),t.xLabelVal=t.yLabelVal=void 0,b.s<0&&(t.idealAlign="left"),[t]}}},23381:function(t,e,r){"use strict";t.exports={moduleType:"trace",name:"barpolar",basePlotModule:r(23580),categories:["polar","bar","showLegend"],attributes:r(55023),layoutAttributes:r(40151),supplyDefaults:r(6135),supplyLayoutDefaults:r(19860),calc:r(74692).calc,crossTraceCalc:r(74692).crossTraceCalc,plot:r(60173),colorbar:r(4898),formatLabels:r(98608),style:r(16688).style,styleOnSelect:r(16688).styleOnSelect,hoverPoints:r(27379),selectPoints:r(81974),meta:{}}},40151:function(t){"use strict";t.exports={barmode:{valType:"enumerated",values:["stack","overlay"],dflt:"stack",editType:"calc"},bargap:{valType:"number",dflt:.1,min:0,max:1,editType:"calc"}}},19860:function(t,e,r){"use strict";var n=r(71828),i=r(40151);t.exports=function(t,e,r){var a,o={};function s(r,o){return n.coerce(t[a]||{},e[a],i,r,o)}for(var l=0;l<r.length;l++){var u=r[l];"barpolar"===u.type&&!0===u.visible&&(o[a=u.subplot]||(s("barmode"),s("bargap"),o[a]=1))}}},60173:function(t,e,r){"use strict";var n=r(39898),i=r(92770),a=r(71828),o=r(91424),s=r(10869);t.exports=function(t,e,r){var l=t._context.staticPlot,u=e.xaxis,c=e.yaxis,f=e.radialAxis,h=e.angularAxis,p=function(t){var e=t.cxx,r=t.cyy;return t.vangles?function(n,i,o,l){var u,c;a.angleDelta(o,l)>0?(u=o,c=l):(u=l,c=o);var f=[s.findEnclosingVertexAngles(u,t.vangles)[0],(u+c)/2,s.findEnclosingVertexAngles(c,t.vangles)[1]];return s.pathPolygonAnnulus(n,i,u,c,f,e,r)}:function(t,n,i,o){return a.pathAnnulus(t,n,i,o,e,r)}}(e),d=e.layers.frontplot.select("g.barlayer");a.makeTraceGroups(d,r,"trace bars").each((function(){var r=n.select(this),s=a.ensureSingle(r,"g","points").selectAll("g.point").data(a.identity);s.enter().append("g").style("vector-effect",l?"none":"non-scaling-stroke").style("stroke-miterlimit",2).classed("point",!0),s.exit().remove(),s.each((function(t){var e,r=n.select(this),o=t.rp0=f.c2p(t.s0),s=t.rp1=f.c2p(t.s1),l=t.thetag0=h.c2g(t.p0),d=t.thetag1=h.c2g(t.p1);if(i(o)&&i(s)&&i(l)&&i(d)&&o!==s&&l!==d){var v=f.c2g(t.s1),g=(l+d)/2;t.ct=[u.c2p(v*Math.cos(g)),c.c2p(v*Math.sin(g))],e=p(o,s,l,d)}else e="M0,0Z";a.ensureSingle(r,"path").attr("d",e)})),o.setClipUrl(r,e._hasClipOnAxisFalse?e.clipIds.forTraces:null,t)}))}},53522:function(t,e,r){"use strict";var n=r(82196),i=r(1486),a=r(22399),o=r(12663).axisHoverFormat,s=r(5386).fF,l=r(1426).extendFlat,u=n.marker,c=u.line;t.exports={y:{valType:"data_array",editType:"calc+clearAxisTypes"},x:{valType:"data_array",editType:"calc+clearAxisTypes"},x0:{valType:"any",editType:"calc+clearAxisTypes"},y0:{valType:"any",editType:"calc+clearAxisTypes"},dx:{valType:"number",editType:"calc"},dy:{valType:"number",editType:"calc"},xperiod:n.xperiod,yperiod:n.yperiod,xperiod0:n.xperiod0,yperiod0:n.yperiod0,xperiodalignment:n.xperiodalignment,yperiodalignment:n.yperiodalignment,xhoverformat:o("x"),yhoverformat:o("y"),name:{valType:"string",editType:"calc+clearAxisTypes"},q1:{valType:"data_array",editType:"calc+clearAxisTypes"},median:{valType:"data_array",editType:"calc+clearAxisTypes"},q3:{valType:"data_array",editType:"calc+clearAxisTypes"},lowerfence:{valType:"data_array",editType:"calc"},upperfence:{valType:"data_array",editType:"calc"},notched:{valType:"boolean",editType:"calc"},notchwidth:{valType:"number",min:0,max:.5,dflt:.25,editType:"calc"},notchspan:{valType:"data_array",editType:"calc"},boxpoints:{valType:"enumerated",values:["all","outliers","suspectedoutliers",!1],editType:"calc"},jitter:{valType:"number",min:0,max:1,editType:"calc"},pointpos:{valType:"number",min:-2,max:2,editType:"calc"},sdmultiple:{valType:"number",min:0,editType:"calc",dflt:1},sizemode:{valType:"enumerated",values:["quartiles","sd"],editType:"calc",dflt:"quartiles"},boxmean:{valType:"enumerated",values:[!0,"sd",!1],editType:"calc"},mean:{valType:"data_array",editType:"calc"},sd:{valType:"data_array",editType:"calc"},orientation:{valType:"enumerated",values:["v","h"],editType:"calc+clearAxisTypes"},quartilemethod:{valType:"enumerated",values:["linear","exclusive","inclusive"],dflt:"linear",editType:"calc"},width:{valType:"number",min:0,dflt:0,editType:"calc"},marker:{outliercolor:{valType:"color",dflt:"rgba(0, 0, 0, 0)",editType:"style"},symbol:l({},u.symbol,{arrayOk:!1,editType:"plot"}),opacity:l({},u.opacity,{arrayOk:!1,dflt:1,editType:"style"}),angle:l({},u.angle,{arrayOk:!1,editType:"calc"}),size:l({},u.size,{arrayOk:!1,editType:"calc"}),color:l({},u.color,{arrayOk:!1,editType:"style"}),line:{color:l({},c.color,{arrayOk:!1,dflt:a.defaultLine,editType:"style"}),width:l({},c.width,{arrayOk:!1,dflt:0,editType:"style"}),outliercolor:{valType:"color",editType:"style"},outlierwidth:{valType:"number",min:0,dflt:1,editType:"style"},editType:"style"},editType:"plot"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,dflt:2,editType:"style"},editType:"plot"},fillcolor:n.fillcolor,whiskerwidth:{valType:"number",min:0,max:1,dflt:.5,editType:"calc"},showwhiskers:{valType:"boolean",editType:"calc"},offsetgroup:i.offsetgroup,alignmentgroup:i.alignmentgroup,selected:{marker:n.selected.marker,editType:"style"},unselected:{marker:n.unselected.marker,editType:"style"},text:l({},n.text,{}),hovertext:l({},n.hovertext,{}),hovertemplate:s({}),hoveron:{valType:"flaglist",flags:["boxes","points"],dflt:"boxes+points",editType:"style"}}},48518:function(t,e,r){"use strict";var n=r(92770),i=r(89298),a=r(42973),o=r(71828),s=r(50606).BADNUM,l=o._;t.exports=function(t,e){var r,u,m,x,b,_,w,T=t._fullLayout,k=i.getFromId(t,e.xaxis||"x"),A=i.getFromId(t,e.yaxis||"y"),M=[],S="violin"===e.type?"_numViolins":"_numBoxes";"h"===e.orientation?(m=k,x="x",b=A,_="y",w=!!e.yperiodalignment):(m=A,x="y",b=k,_="x",w=!!e.xperiodalignment);var E,L,C,P,O,I,D=function(t,e,r,i){var s,l=e+"0"in t;if(e in t||l&&"d"+e in t){var u=r.makeCalcdata(t,e);return[a(t,r,e,u).vals,u]}s=l?t[e+"0"]:"name"in t&&("category"===r.type||n(t.name)&&-1!==["linear","log"].indexOf(r.type)||o.isDateTime(t.name)&&"date"===r.type)?t.name:i;for(var c="multicategory"===r.type?r.r2c_just_indices(s):r.d2c(s,0,t[e+"calendar"]),f=t._length,h=new Array(f),p=0;p<f;p++)h[p]=c;return[h]}(e,_,b,T[S]),z=D[0],R=D[1],F=o.distinctVals(z,b),B=F.vals,N=F.minDiff/2,j="all"===(e.boxpoints||e.points)?o.identity:function(t){return t.v<E.lf||t.v>E.uf};if(e._hasPreCompStats){var U=e[x],V=function(t){return m.d2c((e[t]||[])[r])},H=1/0,q=-1/0;for(r=0;r<e._length;r++){var G=z[r];if(n(G)){if((E={}).pos=E[_]=G,w&&R&&(E.orig_p=R[r]),E.q1=V("q1"),E.med=V("median"),E.q3=V("q3"),L=[],U&&o.isArrayOrTypedArray(U[r]))for(u=0;u<U[r].length;u++)(I=m.d2c(U[r][u]))!==s&&(c(O={v:I,i:[r,u]},e,[r,u]),L.push(O));if(E.pts=L.sort(f),P=(C=E[x]=L.map(h)).length,E.med!==s&&E.q1!==s&&E.q3!==s&&E.med>=E.q1&&E.q3>=E.med){var Z=V("lowerfence");E.lf=Z!==s&&Z<=E.q1?Z:p(E,C,P);var Y=V("upperfence");E.uf=Y!==s&&Y>=E.q3?Y:d(E,C,P);var W=V("mean");E.mean=W!==s?W:P?o.mean(C,P):(E.q1+E.q3)/2;var X=V("sd");E.sd=W!==s&&X>=0?X:P?o.stdev(C,P,E.mean):E.q3-E.q1,E.lo=v(E),E.uo=g(E);var J=V("notchspan");J=J!==s&&J>0?J:y(E,P),E.ln=E.med-J,E.un=E.med+J;var K=E.lf,$=E.uf;e.boxpoints&&C.length&&(K=Math.min(K,C[0]),$=Math.max($,C[P-1])),e.notched&&(K=Math.min(K,E.ln),$=Math.max($,E.un)),E.min=K,E.max=$}else{var Q;o.warn(["Invalid input - make sure that q1 <= median <= q3","q1 = "+E.q1,"median = "+E.med,"q3 = "+E.q3].join("\n")),Q=E.med!==s?E.med:E.q1!==s?E.q3!==s?(E.q1+E.q3)/2:E.q1:E.q3!==s?E.q3:0,E.med=Q,E.q1=E.q3=Q,E.lf=E.uf=Q,E.mean=E.sd=Q,E.ln=E.un=Q,E.min=E.max=Q}H=Math.min(H,E.min),q=Math.max(q,E.max),E.pts2=L.filter(j),M.push(E)}}e._extremes[m._id]=i.findExtremes(m,[H,q],{padded:!0})}else{var tt=m.makeCalcdata(e,x),et=function(t,e){for(var r=t.length,n=new Array(r+1),i=0;i<r;i++)n[i]=t[i]-e;return n[r]=t[r-1]+e,n}(B,N),rt=B.length,nt=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=[];return e}(rt);for(r=0;r<e._length;r++)if(I=tt[r],n(I)){var it=o.findBin(z[r],et);it>=0&&it<rt&&(c(O={v:I,i:r},e,r),nt[it].push(O))}var at=1/0,ot=-1/0,st=e.quartilemethod,lt="exclusive"===st,ut="inclusive"===st;for(r=0;r<rt;r++)if(nt[r].length>0){var ct,ft;(E={}).pos=E[_]=B[r],L=E.pts=nt[r].sort(f),P=(C=E[x]=L.map(h)).length,E.min=C[0],E.max=C[P-1],E.mean=o.mean(C,P),E.sd=o.stdev(C,P,E.mean)*e.sdmultiple,E.med=o.interp(C,.5),P%2&&(lt||ut)?(lt?(ct=C.slice(0,P/2),ft=C.slice(P/2+1)):ut&&(ct=C.slice(0,P/2+1),ft=C.slice(P/2)),E.q1=o.interp(ct,.5),E.q3=o.interp(ft,.5)):(E.q1=o.interp(C,.25),E.q3=o.interp(C,.75)),E.lf=p(E,C,P),E.uf=d(E,C,P),E.lo=v(E),E.uo=g(E);var ht=y(E,P);E.ln=E.med-ht,E.un=E.med+ht,at=Math.min(at,E.ln),ot=Math.max(ot,E.un),E.pts2=L.filter(j),M.push(E)}e._extremes[m._id]=i.findExtremes(m,e.notched?tt.concat([at,ot]):tt,{padded:!0})}return function(t,e){if(o.isArrayOrTypedArray(e.selectedpoints))for(var r=0;r<t.length;r++){for(var n=t[r].pts||[],i={},a=0;a<n.length;a++)i[n[a].i]=a;o.tagSelected(n,e,i)}}(M,e),M.length>0?(M[0].t={num:T[S],dPos:N,posLetter:_,valLetter:x,labels:{med:l(t,"median:"),min:l(t,"min:"),q1:l(t,"q1:"),q3:l(t,"q3:"),max:l(t,"max:"),mean:"sd"===e.boxmean||"sd"===e.sizemode?l(t,"mean ± σ:").replace("σ",1===e.sdmultiple?"σ":e.sdmultiple+"σ"):l(t,"mean:"),lf:l(t,"lower fence:"),uf:l(t,"upper fence:")}},T[S]++,M):[{t:{empty:!0}}]};var u={text:"tx",hovertext:"htx"};function c(t,e,r){for(var n in u)o.isArrayOrTypedArray(e[n])&&(Array.isArray(r)?o.isArrayOrTypedArray(e[n][r[0]])&&(t[u[n]]=e[n][r[0]][r[1]]):t[u[n]]=e[n][r])}function f(t,e){return t.v-e.v}function h(t){return t.v}function p(t,e,r){return 0===r?t.q1:Math.min(t.q1,e[Math.min(o.findBin(2.5*t.q1-1.5*t.q3,e,!0)+1,r-1)])}function d(t,e,r){return 0===r?t.q3:Math.max(t.q3,e[Math.max(o.findBin(2.5*t.q3-1.5*t.q1,e),0)])}function v(t){return 4*t.q1-3*t.q3}function g(t){return 4*t.q3-3*t.q1}function y(t,e){return 0===e?0:1.57*(t.q3-t.q1)/Math.sqrt(e)}},37188:function(t,e,r){"use strict";var n=r(89298),i=r(71828),a=r(99082).getAxisGroup,o=["v","h"];function s(t,e,r,o){var s,l,u,c=e.calcdata,f=e._fullLayout,h=o._id,p=h.charAt(0),d=[],v=0;for(s=0;s<r.length;s++)for(u=c[r[s]],l=0;l<u.length;l++)d.push(o.c2l(u[l].pos,!0)),v+=(u[l].pts2||[]).length;if(d.length){var g=i.distinctVals(d);"category"!==o.type&&"multicategory"!==o.type||(g.minDiff=1);var y=g.minDiff/2;n.minDtick(o,g.minDiff,g.vals[0],!0);var m=f["violin"===t?"_numViolins":"_numBoxes"],x="group"===f[t+"mode"]&&m>1,b=1-f[t+"gap"],_=1-f[t+"groupgap"];for(s=0;s<r.length;s++){var w,T,k,A,M,S,E=(u=c[r[s]])[0].trace,L=u[0].t,C=E.width,P=E.side;if(C)w=T=A=C/2,k=0;else if(w=y,x){var O=a(f,o._id)+E.orientation,I=(f._alignmentOpts[O]||{})[E.alignmentgroup]||{},D=Object.keys(I.offsetGroups||{}).length,z=D||m;T=w*b*_/z,k=2*w*(((D?E._offsetIndex:L.num)+.5)/z-.5)*b,A=w*b/z}else T=w*b*_,k=0,A=w;L.dPos=w,L.bPos=k,L.bdPos=T,L.wHover=A;var R,F,B,N,j,U,V=k+T,H=Boolean(C);if("positive"===P?(M=w*(C?1:.5),R=V,S=R=k):"negative"===P?(M=R=k,S=w*(C?1:.5),F=V):(M=S=w,R=F=V),(E.boxpoints||E.points)&&v>0){var q=E.pointpos,G=E.jitter,Z=E.marker.size/2,Y=0;q+G>=0&&((Y=V*(q+G))>M?(H=!0,j=Z,B=Y):Y>R&&(j=Z,B=M)),Y<=M&&(B=M);var W=0;q-G<=0&&((W=-V*(q-G))>S?(H=!0,U=Z,N=W):W>F&&(U=Z,N=S)),W<=S&&(N=S)}else B=M,N=S;var X=new Array(u.length);for(l=0;l<u.length;l++)X[l]=u[l].pos;E._extremes[h]=n.findExtremes(o,X,{padded:H,vpadminus:N,vpadplus:B,vpadLinearized:!0,ppadminus:{x:U,y:j}[p],ppadplus:{x:j,y:U}[p]})}}}t.exports={crossTraceCalc:function(t,e){for(var r=t.calcdata,n=e.xaxis,i=e.yaxis,a=0;a<o.length;a++){for(var l=o[a],u="h"===l?i:n,c=[],f=0;f<r.length;f++){var h=r[f],p=h[0].t,d=h[0].trace;!0!==d.visible||"box"!==d.type&&"candlestick"!==d.type||p.empty||(d.orientation||"v")!==l||d.xaxis!==n._id||d.yaxis!==i._id||c.push(f)}s("box",t,c,u)}},setPositionOffset:s}},36411:function(t,e,r){"use strict";var n=r(71828),i=r(73972),a=r(7901),o=r(73927),s=r(26125),l=r(4322),u=r(53522);function c(t,e,r,a){function o(t){var e=0;return t&&t.length&&(e+=1,n.isArrayOrTypedArray(t[0])&&t[0].length&&(e+=1)),e}function s(e){return n.validate(t[e],u[e])}var c,f=r("y"),h=r("x");if("box"===e.type){var p=r("q1"),d=r("median"),v=r("q3");e._hasPreCompStats=p&&p.length&&d&&d.length&&v&&v.length,c=Math.min(n.minRowLength(p),n.minRowLength(d),n.minRowLength(v))}var g,y,m=o(f),x=o(h),b=m&&n.minRowLength(f),_=x&&n.minRowLength(h),w=a.calendar,T={autotypenumbers:a.autotypenumbers};if(e._hasPreCompStats)switch(String(x)+String(m)){case"00":var k=s("x0")||s("dx");g=!s("y0")&&!s("dy")||k?"v":"h",y=c;break;case"10":g="v",y=Math.min(c,_);break;case"20":g="h",y=Math.min(c,h.length);break;case"01":g="h",y=Math.min(c,b);break;case"02":g="v",y=Math.min(c,f.length);break;case"12":g="v",y=Math.min(c,_,f.length);break;case"21":g="h",y=Math.min(c,h.length,b);break;case"11":y=0;break;case"22":var A,M=!1;for(A=0;A<h.length;A++)if("category"===l(h[A],w,T)){M=!0;break}if(M)g="v",y=Math.min(c,_,f.length);else{for(A=0;A<f.length;A++)if("category"===l(f[A],w,T)){M=!0;break}M?(g="h",y=Math.min(c,h.length,b)):(g="v",y=Math.min(c,_,f.length))}}else m>0?(g="v",y=x>0?Math.min(_,b):Math.min(b)):x>0?(g="h",y=Math.min(_)):y=0;if(y){e._length=y;var S=r("orientation",g);e._hasPreCompStats?"v"===S&&0===x?(r("x0",0),r("dx",1)):"h"===S&&0===m&&(r("y0",0),r("dy",1)):"v"===S&&0===x?r("x0"):"h"===S&&0===m&&r("y0"),i.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y"],a)}else e.visible=!1}function f(t,e,r,i){var a=i.prefix,o=n.coerce2(t,e,u,"marker.outliercolor"),s=r("marker.line.outliercolor"),l="outliers";e._hasPreCompStats?l="all":(o||s)&&(l="suspectedoutliers");var c=r(a+"points",l);c?(r("jitter","all"===c?.3:0),r("pointpos","all"===c?-1.5:0),r("marker.symbol"),r("marker.opacity"),r("marker.size"),r("marker.angle"),r("marker.color",e.line.color),r("marker.line.color"),r("marker.line.width"),"suspectedoutliers"===c&&(r("marker.line.outliercolor",e.marker.color),r("marker.line.outlierwidth")),r("selected.marker.color"),r("unselected.marker.color"),r("selected.marker.size"),r("unselected.marker.size"),r("text"),r("hovertext")):delete e.marker;var f=r("hoveron");"all"!==f&&-1===f.indexOf("points")||r("hovertemplate"),n.coerceSelectionMarkerOpacity(e,r)}t.exports={supplyDefaults:function(t,e,r,i){function s(r,i){return n.coerce(t,e,u,r,i)}if(c(t,e,s,i),!1!==e.visible){o(t,e,i,s),s("xhoverformat"),s("yhoverformat");var l=e._hasPreCompStats;l&&(s("lowerfence"),s("upperfence")),s("line.color",(t.marker||{}).color||r),s("line.width"),s("fillcolor",a.addOpacity(e.line.color,.5));var h=!1;if(l){var p=s("mean"),d=s("sd");p&&p.length&&(h=!0,d&&d.length&&(h="sd"))}s("whiskerwidth");var v,g=s("sizemode");"quartiles"===g&&(v=s("boxmean",h)),s("showwhiskers","quartiles"===g),"sd"!==g&&"sd"!==v||s("sdmultiple"),s("width"),s("quartilemethod");var y=!1;if(l){var m=s("notchspan");m&&m.length&&(y=!0)}else n.validate(t.notchwidth,u.notchwidth)&&(y=!0);s("notched",y)&&s("notchwidth"),f(t,e,s,{prefix:"box"})}},crossTraceDefaults:function(t,e){var r,i;function a(t){return n.coerce(i._input,i,u,t)}for(var o=0;o<t.length;o++){var l=(i=t[o]).type;"box"!==l&&"violin"!==l||(r=i._input,"group"===e[l+"mode"]&&s(r,i,e,a))}},handleSampleDefaults:c,handlePointsDefaults:f}},74907:function(t){"use strict";t.exports=function(t,e){return e.hoverOnBox&&(t.hoverOnBox=e.hoverOnBox),"xVal"in e&&(t.x=e.xVal),"yVal"in e&&(t.y=e.yVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},41868:function(t,e,r){"use strict";var n=r(89298),i=r(71828),a=r(30211),o=r(7901),s=i.fillText;function l(t,e,r,s){var l,u,c,f,h,p,d,v,g,y,m,x,b,_,w=t.cd,T=t.xa,k=t.ya,A=w[0].trace,M=w[0].t,S="violin"===A.type,E=M.bdPos,L=M.wHover,C=function(t){return c.c2l(t.pos)+M.bPos-c.c2l(p)};S&&"both"!==A.side?("positive"===A.side&&(g=function(t){var e=C(t);return a.inbox(e,e+L,y)},x=E,b=0),"negative"===A.side&&(g=function(t){var e=C(t);return a.inbox(e-L,e,y)},x=0,b=E)):(g=function(t){var e=C(t);return a.inbox(e-L,e+L,y)},x=b=E),_=S?function(t){return a.inbox(t.span[0]-h,t.span[1]-h,y)}:function(t){return a.inbox(t.min-h,t.max-h,y)},"h"===A.orientation?(h=e,p=r,d=_,v=g,l="y",c=k,u="x",f=T):(h=r,p=e,d=g,v=_,l="x",c=T,u="y",f=k);var P=Math.min(1,E/Math.abs(c.r2c(c.range[1])-c.r2c(c.range[0])));function O(t){return(d(t)+v(t))/2}y=t.maxHoverDistance-P,m=t.maxSpikeDistance-P;var I=a.getDistanceFunction(s,d,v,O);if(a.getClosest(w,I,t),!1===t.index)return[];var D=w[t.index],z=A.line.color,R=(A.marker||{}).color;o.opacity(z)&&A.line.width?t.color=z:o.opacity(R)&&A.boxpoints?t.color=R:t.color=A.fillcolor,t[l+"0"]=c.c2p(D.pos+M.bPos-b,!0),t[l+"1"]=c.c2p(D.pos+M.bPos+x,!0),t[l+"LabelVal"]=void 0!==D.orig_p?D.orig_p:D.pos;var F=l+"Spike";t.spikeDistance=O(D)*m/y,t[F]=c.c2p(D.pos,!0);var B=A.boxmean||"sd"===A.sizemode||(A.meanline||{}).visible,N=A.boxpoints||A.points,j=N&&B?["max","uf","q3","med","mean","q1","lf","min"]:N&&!B?["max","uf","q3","med","q1","lf","min"]:!N&&B?["max","q3","med","mean","q1","min"]:["max","q3","med","q1","min"],U=f.range[1]<f.range[0];A.orientation===(U?"v":"h")&&j.reverse();for(var V=t.spikeDistance,H=t[F],q=[],G=0;G<j.length;G++){var Z=j[G];if(Z in D){var Y=D[Z],W=f.c2p(Y,!0),X=i.extendFlat({},t);X.attr=Z,X[u+"0"]=X[u+"1"]=W,X[u+"LabelVal"]=Y,X[u+"Label"]=(M.labels?M.labels[Z]+" ":"")+n.hoverLabelText(f,Y,A[u+"hoverformat"]),X.hoverOnBox=!0,"mean"!==Z||!("sd"in D)||"sd"!==A.boxmean&&"sd"!==A.sizemode||(X[u+"err"]=D.sd),X.hovertemplate=!1,q.push(X)}}t.name="",t.spikeDistance=void 0,t[F]=void 0;for(var J=0;J<q.length;J++)"med"!==q[J].attr?(q[J].name="",q[J].spikeDistance=void 0,q[J][F]=void 0):(q[J].spikeDistance=V,q[J][F]=H);return q}function u(t,e,r){for(var n,o,l,u=t.cd,c=t.xa,f=t.ya,h=u[0].trace,p=c.c2p(e),d=f.c2p(r),v=a.quadrature((function(t){var e=Math.max(3,t.mrc||0);return Math.max(Math.abs(c.c2p(t.x)-p)-e,1-3/e)}),(function(t){var e=Math.max(3,t.mrc||0);return Math.max(Math.abs(f.c2p(t.y)-d)-e,1-3/e)})),g=!1,y=0;y<u.length;y++){o=u[y];for(var m=0;m<(o.pts||[]).length;m++){var x=v(l=o.pts[m]);x<=t.distance&&(t.distance=x,g=[y,m])}}if(!g)return!1;l=(o=u[g[0]]).pts[g[1]];var b=c.c2p(l.x,!0),_=f.c2p(l.y,!0),w=l.mrc||1;n=i.extendFlat({},t,{index:l.i,color:(h.marker||{}).color,name:h.name,x0:b-w,x1:b+w,y0:_-w,y1:_+w,spikeDistance:t.distance,hovertemplate:h.hovertemplate});var T,k=o.orig_p,A=void 0!==k?k:o.pos;return"h"===h.orientation?(T=f,n.xLabelVal=l.x,n.yLabelVal=A):(T=c,n.xLabelVal=A,n.yLabelVal=l.y),n[T._id.charAt(0)+"Spike"]=T.c2p(o.pos,!0),s(l,h,n),n}t.exports={hoverPoints:function(t,e,r,n){var i,a=t.cd[0].trace.hoveron,o=[];return-1!==a.indexOf("boxes")&&(o=o.concat(l(t,e,r,n))),-1!==a.indexOf("points")&&(i=u(t,e,r)),"closest"===n?i?[i]:o:i?(o.push(i),o):o},hoverOnBoxes:l,hoverOnPoints:u}},83832:function(t,e,r){"use strict";t.exports={attributes:r(53522),layoutAttributes:r(40094),supplyDefaults:r(36411).supplyDefaults,crossTraceDefaults:r(36411).crossTraceDefaults,supplyLayoutDefaults:r(4199).supplyLayoutDefaults,calc:r(48518),crossTraceCalc:r(37188).crossTraceCalc,plot:r(86047).plot,style:r(58063).style,styleOnSelect:r(58063).styleOnSelect,hoverPoints:r(41868).hoverPoints,eventData:r(74907),selectPoints:r(24626),moduleType:"trace",name:"box",basePlotModule:r(93612),categories:["cartesian","svg","symbols","oriented","box-violin","showLegend","boxLayout","zoomScale"],meta:{}}},40094:function(t){"use strict";t.exports={boxmode:{valType:"enumerated",values:["group","overlay"],dflt:"overlay",editType:"calc"},boxgap:{valType:"number",min:0,max:1,dflt:.3,editType:"calc"},boxgroupgap:{valType:"number",min:0,max:1,dflt:.3,editType:"calc"}}},4199:function(t,e,r){"use strict";var n=r(73972),i=r(71828),a=r(40094);function o(t,e,r,i,a){for(var o=a+"Layout",s=!1,l=0;l<r.length;l++){var u=r[l];if(n.traceIs(u,o)){s=!0;break}}s&&(i(a+"mode"),i(a+"gap"),i(a+"groupgap"))}t.exports={supplyLayoutDefaults:function(t,e,r){o(0,0,r,(function(r,n){return i.coerce(t,e,a,r,n)}),"box")},_supply:o}},86047:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=r(91424);function o(t,e,r,a,o){var s,l,u="h"===r.orientation,c=e.val,f=e.pos,h=!!f.rangebreaks,p=a.bPos,d=a.wdPos||0,v=a.bPosPxOffset||0,g=r.whiskerwidth||0,y=!1!==r.showwhiskers,m=r.notched||!1,x=m?1-2*r.notchwidth:1;Array.isArray(a.bdPos)?(s=a.bdPos[0],l=a.bdPos[1]):(s=a.bdPos,l=a.bdPos);var b=t.selectAll("path.box").data("violin"!==r.type||r.box.visible?i.identity:[]);b.enter().append("path").style("vector-effect",o?"none":"non-scaling-stroke").attr("class","box"),b.exit().remove(),b.each((function(t){if(t.empty)return n.select(this).attr("d","M0,0Z");var e=f.c2l(t.pos+p,!0),a=f.l2p(e-s)+v,o=f.l2p(e+l)+v,b=h?(a+o)/2:f.l2p(e)+v,_=r.whiskerwidth,w=h?a*_+(1-_)*b:f.l2p(e-d)+v,T=h?o*_+(1-_)*b:f.l2p(e+d)+v,k=f.l2p(e-s*x)+v,A=f.l2p(e+l*x)+v,M="sd"===r.sizemode,S=c.c2p(M?t.mean-t.sd:t.q1,!0),E=M?c.c2p(t.mean+t.sd,!0):c.c2p(t.q3,!0),L=i.constrain(M?c.c2p(t.mean,!0):c.c2p(t.med,!0),Math.min(S,E)+1,Math.max(S,E)-1),C=void 0===t.lf||!1===r.boxpoints||M,P=c.c2p(C?t.min:t.lf,!0),O=c.c2p(C?t.max:t.uf,!0),I=c.c2p(t.ln,!0),D=c.c2p(t.un,!0);u?n.select(this).attr("d","M"+L+","+k+"V"+A+"M"+S+","+a+"V"+o+(m?"H"+I+"L"+L+","+A+"L"+D+","+o:"")+"H"+E+"V"+a+(m?"H"+D+"L"+L+","+k+"L"+I+","+a:"")+"Z"+(y?"M"+S+","+b+"H"+P+"M"+E+","+b+"H"+O+(0===g?"":"M"+P+","+w+"V"+T+"M"+O+","+w+"V"+T):"")):n.select(this).attr("d","M"+k+","+L+"H"+A+"M"+a+","+S+"H"+o+(m?"V"+I+"L"+A+","+L+"L"+o+","+D:"")+"V"+E+"H"+a+(m?"V"+D+"L"+k+","+L+"L"+a+","+I:"")+"Z"+(y?"M"+b+","+S+"V"+P+"M"+b+","+E+"V"+O+(0===g?"":"M"+w+","+P+"H"+T+"M"+w+","+O+"H"+T):""))}))}function s(t,e,r,n){var o=e.x,s=e.y,l=n.bdPos,u=n.bPos,c=r.boxpoints||r.points;i.seedPseudoRandom();var f=t.selectAll("g.points").data(c?function(t){return t.forEach((function(t){t.t=n,t.trace=r})),t}:[]);f.enter().append("g").attr("class","points"),f.exit().remove();var h=f.selectAll("path").data((function(t){var e,n,a=t.pts2,o=Math.max((t.max-t.min)/10,t.q3-t.q1),s=1e-9*o,f=.01*o,h=[],p=0;if(r.jitter){if(0===o)for(p=1,h=new Array(a.length),e=0;e<a.length;e++)h[e]=1;else for(e=0;e<a.length;e++){var d=Math.max(0,e-5),v=a[d].v,g=Math.min(a.length-1,e+5),y=a[g].v;"all"!==c&&(a[e].v<t.lf?y=Math.min(y,t.lf):v=Math.max(v,t.uf));var m=Math.sqrt(f*(g-d)/(y-v+s))||0;m=i.constrain(Math.abs(m),0,1),h.push(m),p=Math.max(m,p)}n=2*r.jitter/(p||1)}for(e=0;e<a.length;e++){var x=a[e],b=x.v,_=r.jitter?n*h[e]*(i.pseudoRandom()-.5):0,w=t.pos+u+l*(r.pointpos+_);"h"===r.orientation?(x.y=w,x.x=b):(x.x=w,x.y=b),"suspectedoutliers"===c&&b<t.uo&&b>t.lo&&(x.so=!0)}return a}));h.enter().append("path").classed("point",!0),h.exit().remove(),h.call(a.translatePoints,o,s)}function l(t,e,r,a){var o,s,l=e.val,u=e.pos,c=!!u.rangebreaks,f=a.bPos,h=a.bPosPxOffset||0,p=r.boxmean||(r.meanline||{}).visible;Array.isArray(a.bdPos)?(o=a.bdPos[0],s=a.bdPos[1]):(o=a.bdPos,s=a.bdPos);var d=t.selectAll("path.mean").data("box"===r.type&&r.boxmean||"violin"===r.type&&r.box.visible&&r.meanline.visible?i.identity:[]);d.enter().append("path").attr("class","mean").style({fill:"none","vector-effect":"non-scaling-stroke"}),d.exit().remove(),d.each((function(t){var e=u.c2l(t.pos+f,!0),i=u.l2p(e-o)+h,a=u.l2p(e+s)+h,d=c?(i+a)/2:u.l2p(e)+h,v=l.c2p(t.mean,!0),g=l.c2p(t.mean-t.sd,!0),y=l.c2p(t.mean+t.sd,!0);"h"===r.orientation?n.select(this).attr("d","M"+v+","+i+"V"+a+("sd"===p?"m0,0L"+g+","+d+"L"+v+","+i+"L"+y+","+d+"Z":"")):n.select(this).attr("d","M"+i+","+v+"H"+a+("sd"===p?"m0,0L"+d+","+g+"L"+i+","+v+"L"+d+","+y+"Z":""))}))}t.exports={plot:function(t,e,r,a){var u=t._context.staticPlot,c=e.xaxis,f=e.yaxis;i.makeTraceGroups(a,r,"trace boxes").each((function(t){var e,r,i=n.select(this),a=t[0],h=a.t,p=a.trace;h.wdPos=h.bdPos*p.whiskerwidth,!0!==p.visible||h.empty?i.remove():("h"===p.orientation?(e=f,r=c):(e=c,r=f),o(i,{pos:e,val:r},p,h,u),s(i,{x:c,y:f},p,h),l(i,{pos:e,val:r},p,h))}))},plotBoxAndWhiskers:o,plotPoints:s,plotBoxMean:l}},24626:function(t){"use strict";t.exports=function(t,e){var r,n,i=t.cd,a=t.xaxis,o=t.yaxis,s=[];if(!1===e)for(r=0;r<i.length;r++)for(n=0;n<(i[r].pts||[]).length;n++)i[r].pts[n].selected=0;else for(r=0;r<i.length;r++)for(n=0;n<(i[r].pts||[]).length;n++){var l=i[r].pts[n],u=a.c2p(l.x),c=o.c2p(l.y);e.contains([u,c],null,l.i,t)?(s.push({pointNumber:l.i,x:a.c2d(l.x),y:o.c2d(l.y)}),l.selected=1):l.selected=0}return s}},58063:function(t,e,r){"use strict";var n=r(39898),i=r(7901),a=r(91424);t.exports={style:function(t,e,r){var o=r||n.select(t).selectAll("g.trace.boxes");o.style("opacity",(function(t){return t[0].trace.opacity})),o.each((function(e){var r=n.select(this),o=e[0].trace,s=o.line.width;function l(t,e,r,n){t.style("stroke-width",e+"px").call(i.stroke,r).call(i.fill,n)}var u=r.selectAll("path.box");if("candlestick"===o.type)u.each((function(t){if(!t.empty){var e=n.select(this),r=o[t.dir];l(e,r.line.width,r.line.color,r.fillcolor),e.style("opacity",o.selectedpoints&&!t.selected?.3:1)}}));else{l(u,s,o.line.color,o.fillcolor),r.selectAll("path.mean").style({"stroke-width":s,"stroke-dasharray":2*s+"px,"+s+"px"}).call(i.stroke,o.line.color);var c=r.selectAll("path.point");a.pointStyle(c,o,t)}}))},styleOnSelect:function(t,e,r){var n=e[0].trace,i=r.selectAll("path.point");n.selectedpoints?a.selectedPointStyle(i,n):a.pointStyle(i,n,t)}}},75343:function(t,e,r){"use strict";var n=r(71828).extendFlat,i=r(12663).axisHoverFormat,a=r(2522),o=r(53522);function s(t){return{line:{color:n({},o.line.color,{dflt:t}),width:o.line.width,editType:"style"},fillcolor:o.fillcolor,editType:"style"}}t.exports={xperiod:a.xperiod,xperiod0:a.xperiod0,xperiodalignment:a.xperiodalignment,xhoverformat:i("x"),yhoverformat:i("y"),x:a.x,open:a.open,high:a.high,low:a.low,close:a.close,line:{width:n({},o.line.width,{}),editType:"style"},increasing:s(a.increasing.line.color.dflt),decreasing:s(a.decreasing.line.color.dflt),text:a.text,hovertext:a.hovertext,whiskerwidth:n({},o.whiskerwidth,{dflt:0}),hoverlabel:a.hoverlabel}},41197:function(t,e,r){"use strict";var n=r(71828),i=r(89298),a=r(42973),o=r(3485).calcCommon;function s(t,e,r,n){return{min:r,q1:Math.min(t,n),med:n,q3:Math.max(t,n),max:e}}t.exports=function(t,e){var r=t._fullLayout,l=i.getFromId(t,e.xaxis),u=i.getFromId(t,e.yaxis),c=l.makeCalcdata(e,"x"),f=a(e,l,"x",c).vals,h=o(t,e,c,f,u,s);return h.length?(n.extendFlat(h[0].t,{num:r._numBoxes,dPos:n.distinctVals(f).minDiff/2,posLetter:"x",valLetter:"y"}),r._numBoxes++,h):[{t:{empty:!0}}]}},1026:function(t,e,r){"use strict";var n=r(71828),i=r(7901),a=r(14555),o=r(73927),s=r(75343);function l(t,e,r,n){var a=r(n+".line.color");r(n+".line.width",e.line.width),r(n+".fillcolor",i.addOpacity(a,.5))}t.exports=function(t,e,r,i){function u(r,i){return n.coerce(t,e,s,r,i)}a(t,e,u,i)?(o(t,e,i,u,{x:!0}),u("xhoverformat"),u("yhoverformat"),u("line.width"),l(0,e,u,"increasing"),l(0,e,u,"decreasing"),u("text"),u("hovertext"),u("whiskerwidth"),i._requestRangeslider[e.xaxis]=!0):e.visible=!1}},91815:function(t,e,r){"use strict";t.exports={moduleType:"trace",name:"candlestick",basePlotModule:r(93612),categories:["cartesian","svg","showLegend","candlestick","boxLayout"],meta:{},attributes:r(75343),layoutAttributes:r(40094),supplyLayoutDefaults:r(4199).supplyLayoutDefaults,crossTraceCalc:r(37188).crossTraceCalc,supplyDefaults:r(1026),calc:r(41197),plot:r(86047).plot,layerName:"boxlayer",style:r(58063).style,hoverPoints:r(66449).hoverPoints,selectPoints:r(67324)}},13145:function(t,e,r){"use strict";var n=r(11500),i=r(44467);t.exports=function(t,e,r,a,o){a("a")||(a("da"),a("a0")),a("b")||(a("db"),a("b0")),function(t,e,r,a){["aaxis","baxis"].forEach((function(o){var s=o.charAt(0),l=t[o]||{},u=i.newContainer(e,o),c={noTicklabelstep:!0,tickfont:"x",id:s+"axis",letter:s,font:e.font,name:o,data:t[s],calendar:e.calendar,dfltColor:a,bgColor:r.paper_bgcolor,autotypenumbersDflt:r.autotypenumbers,fullLayout:r};n(l,u,c),u._categories=u._categories||[],t[o]||"-"===l.type||(t[o]={type:l.type})}))}(t,e,r,o)}},402:function(t,e,r){"use strict";var n=r(71828).isArrayOrTypedArray;function i(t,e){if(!n(t)||e>=10)return null;for(var r=1/0,a=-1/0,o=t.length,s=0;s<o;s++){var l=t[s];if(n(l)){var u=i(l,e+1);u&&(r=Math.min(u[0],r),a=Math.max(u[1],a))}else r=Math.min(l,r),a=Math.max(l,a)}return[r,a]}t.exports=function(t){return i(t,0)}},99798:function(t,e,r){"use strict";var n=r(41940),i=r(1928),a=r(22399),o=n({editType:"calc"});o.family.dflt='"Open Sans", verdana, arial, sans-serif',o.size.dflt=12,o.color.dflt=a.defaultLine,t.exports={carpet:{valType:"string",editType:"calc"},x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},a:{valType:"data_array",editType:"calc"},a0:{valType:"number",dflt:0,editType:"calc"},da:{valType:"number",dflt:1,editType:"calc"},b:{valType:"data_array",editType:"calc"},b0:{valType:"number",dflt:0,editType:"calc"},db:{valType:"number",dflt:1,editType:"calc"},cheaterslope:{valType:"number",dflt:1,editType:"calc"},aaxis:i,baxis:i,font:o,color:{valType:"color",dflt:a.defaultLine,editType:"plot"},transforms:void 0}},4536:function(t,e,r){"use strict";var n=r(71828).isArrayOrTypedArray;t.exports=function(t,e,r,i){var a,o,s,l,u,c,f,h,p,d,v,g,y,m=n(r)?"a":"b",x=("a"===m?t.aaxis:t.baxis).smoothing,b="a"===m?t.a2i:t.b2j,_="a"===m?r:i,w="a"===m?i:r,T="a"===m?e.a.length:e.b.length,k="a"===m?e.b.length:e.a.length,A=Math.floor("a"===m?t.b2j(w):t.a2i(w)),M="a"===m?function(e){return t.evalxy([],e,A)}:function(e){return t.evalxy([],A,e)};x&&(s=Math.max(0,Math.min(k-2,A)),l=A-s,o="a"===m?function(e,r){return t.dxydi([],e,s,r,l)}:function(e,r){return t.dxydj([],s,e,l,r)});var S=b(_[0]),E=b(_[1]),L=S<E?1:-1,C=1e-8*(E-S),P=L>0?Math.floor:Math.ceil,O=L>0?Math.ceil:Math.floor,I=L>0?Math.min:Math.max,D=L>0?Math.max:Math.min,z=P(S+C),R=O(E-C),F=[[f=M(S)]];for(a=z;a*L<R*L;a+=L)u=[],v=D(S,a),y=(g=I(E,a+L))-v,c=Math.max(0,Math.min(T-2,Math.floor(.5*(v+g)))),h=M(g),x&&(p=o(c,v-c),d=o(c,g-c),u.push([f[0]+p[0]/3*y,f[1]+p[1]/3*y]),u.push([h[0]-d[0]/3*y,h[1]-d[1]/3*y])),u.push(h),F.push(u),f=h;return F}},1928:function(t,e,r){"use strict";var n=r(41940),i=r(22399),a=r(13838),o=r(12663).descriptionWithDates,s=r(30962).overrideAll,l=r(79952).P,u=r(1426).extendFlat;t.exports={color:{valType:"color",editType:"calc"},smoothing:{valType:"number",dflt:1,min:0,max:1.3,editType:"calc"},title:{text:{valType:"string",dflt:"",editType:"calc"},font:n({editType:"calc"}),offset:{valType:"number",dflt:10,editType:"calc"},editType:"calc"},type:{valType:"enumerated",values:["-","linear","date","category"],dflt:"-",editType:"calc"},autotypenumbers:a.autotypenumbers,autorange:{valType:"enumerated",values:[!0,!1,"reversed"],dflt:!0,editType:"calc"},rangemode:{valType:"enumerated",values:["normal","tozero","nonnegative"],dflt:"normal",editType:"calc"},range:{valType:"info_array",editType:"calc",items:[{valType:"any",editType:"calc"},{valType:"any",editType:"calc"}]},fixedrange:{valType:"boolean",dflt:!1,editType:"calc"},cheatertype:{valType:"enumerated",values:["index","value"],dflt:"value",editType:"calc"},tickmode:{valType:"enumerated",values:["linear","array"],dflt:"array",editType:"calc"},nticks:{valType:"integer",min:0,dflt:0,editType:"calc"},tickvals:{valType:"data_array",editType:"calc"},ticktext:{valType:"data_array",editType:"calc"},showticklabels:{valType:"enumerated",values:["start","end","both","none"],dflt:"start",editType:"calc"},labelalias:u({},a.labelalias,{editType:"calc"}),tickfont:n({editType:"calc"}),tickangle:{valType:"angle",dflt:"auto",editType:"calc"},tickprefix:{valType:"string",dflt:"",editType:"calc"},showtickprefix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"calc"},ticksuffix:{valType:"string",dflt:"",editType:"calc"},showticksuffix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"calc"},showexponent:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"calc"},exponentformat:{valType:"enumerated",values:["none","e","E","power","SI","B"],dflt:"B",editType:"calc"},minexponent:{valType:"number",dflt:3,min:0,editType:"calc"},separatethousands:{valType:"boolean",dflt:!1,editType:"calc"},tickformat:{valType:"string",dflt:"",editType:"calc",description:o("tick label")},tickformatstops:s(a.tickformatstops,"calc","from-root"),categoryorder:{valType:"enumerated",values:["trace","category ascending","category descending","array"],dflt:"trace",editType:"calc"},categoryarray:{valType:"data_array",editType:"calc"},labelpadding:{valType:"integer",dflt:10,editType:"calc"},labelprefix:{valType:"string",editType:"calc"},labelsuffix:{valType:"string",dflt:"",editType:"calc"},showline:{valType:"boolean",dflt:!1,editType:"calc"},linecolor:{valType:"color",dflt:i.defaultLine,editType:"calc"},linewidth:{valType:"number",min:0,dflt:1,editType:"calc"},gridcolor:{valType:"color",editType:"calc"},gridwidth:{valType:"number",min:0,dflt:1,editType:"calc"},griddash:u({},l,{editType:"calc"}),showgrid:{valType:"boolean",dflt:!0,editType:"calc"},minorgridcount:{valType:"integer",min:0,dflt:0,editType:"calc"},minorgridwidth:{valType:"number",min:0,dflt:1,editType:"calc"},minorgriddash:u({},l,{editType:"calc"}),minorgridcolor:{valType:"color",dflt:i.lightLine,editType:"calc"},startline:{valType:"boolean",editType:"calc"},startlinecolor:{valType:"color",editType:"calc"},startlinewidth:{valType:"number",dflt:1,editType:"calc"},endline:{valType:"boolean",editType:"calc"},endlinewidth:{valType:"number",dflt:1,editType:"calc"},endlinecolor:{valType:"color",editType:"calc"},tick0:{valType:"number",min:0,dflt:0,editType:"calc"},dtick:{valType:"number",min:0,dflt:1,editType:"calc"},arraytick0:{valType:"integer",min:0,dflt:0,editType:"calc"},arraydtick:{valType:"integer",min:1,dflt:1,editType:"calc"},_deprecated:{title:{valType:"string",editType:"calc"},titlefont:n({editType:"calc"}),titleoffset:{valType:"number",dflt:10,editType:"calc"}},editType:"calc"}},11500:function(t,e,r){"use strict";var n=r(99798),i=r(7901).addOpacity,a=r(73972),o=r(71828),s=r(26218),l=r(96115),u=r(89426),c=r(15258),f=r(21994),h=r(4322);t.exports=function(t,e,r){var p=r.letter,d=r.font||{},v=n[p+"axis"];function g(r,n){return o.coerce(t,e,v,r,n)}function y(r,n){return o.coerce2(t,e,v,r,n)}r.name&&(e._name=r.name,e._id=r.name),g("autotypenumbers",r.autotypenumbersDflt);var m=g("type");"-"===m&&(r.data&&function(t,e){if("-"===t.type){var r=t._id.charAt(0),n=t[r+"calendar"];t.type=h(e,n,{autotypenumbers:t.autotypenumbers})}}(e,r.data),"-"===e.type?e.type="linear":m=t.type=e.type),g("smoothing"),g("cheatertype"),g("showticklabels"),g("labelprefix",p+" = "),g("labelsuffix"),g("showtickprefix"),g("showticksuffix"),g("separatethousands"),g("tickformat"),g("exponentformat"),g("minexponent"),g("showexponent"),g("categoryorder"),g("tickmode"),g("tickvals"),g("ticktext"),g("tick0"),g("dtick"),"array"===e.tickmode&&(g("arraytick0"),g("arraydtick")),g("labelpadding"),e._hovertitle=p,"date"===m&&a.getComponentMethod("calendars","handleDefaults")(t,e,"calendar",r.calendar),f(e,r.fullLayout),e.c2p=o.identity;var x=g("color",r.dfltColor),b=x===t.color?x:d.color;g("title.text")&&(o.coerceFont(g,"title.font",{family:d.family,size:o.bigFont(d.size),color:b}),g("title.offset")),g("tickangle"),g("autorange",!e.isValidRange(t.range))&&g("rangemode"),g("range"),e.cleanRange(),g("fixedrange"),s(t,e,g,m),u(t,e,g,m,r),l(t,e,g,m,r),c(t,e,g,{data:r.data,dataAttr:p});var _=y("gridcolor",i(x,.3)),w=y("gridwidth"),T=y("griddash"),k=g("showgrid");k||(delete e.gridcolor,delete e.gridwidth,delete e.griddash);var A=y("startlinecolor",x),M=y("startlinewidth",w);g("startline",e.showgrid||!!A||!!M)||(delete e.startlinecolor,delete e.startlinewidth);var S=y("endlinecolor",x),E=y("endlinewidth",w);return g("endline",e.showgrid||!!S||!!E)||(delete e.endlinecolor,delete e.endlinewidth),k?(g("minorgridcount"),g("minorgridwidth",w),g("minorgriddash",T),g("minorgridcolor",i(_,.06)),e.minorgridcount||(delete e.minorgridwidth,delete e.minorgriddash,delete e.minorgridcolor)):(delete e.gridcolor,delete e.gridwidth,delete e.griddash),"none"===e.showticklabels&&(delete e.tickfont,delete e.tickangle,delete e.showexponent,delete e.exponentformat,delete e.minexponent,delete e.tickformat,delete e.showticksuffix,delete e.showtickprefix),e.showticksuffix||delete e.ticksuffix,e.showtickprefix||delete e.tickprefix,g("tickmode"),e}},25281:function(t,e,r){"use strict";var n=r(89298),i=r(71828).isArray1D,a=r(53824),o=r(402),s=r(20347),l=r(83311),u=r(44807),c=r(4742),f=r(72505),h=r(68296),p=r(11435);t.exports=function(t,e){var r=n.getFromId(t,e.xaxis),d=n.getFromId(t,e.yaxis),v=e.aaxis,g=e.baxis,y=e.x,m=e.y,x=[];y&&i(y)&&x.push("x"),m&&i(m)&&x.push("y"),x.length&&h(e,v,g,"a","b",x);var b=e._a=e._a||e.a,_=e._b=e._b||e.b;y=e._x||e.x,m=e._y||e.y;var w={};if(e._cheater){var T="index"===v.cheatertype?b.length:b,k="index"===g.cheatertype?_.length:_;y=a(T,k,e.cheaterslope)}e._x=y=c(y),e._y=m=c(m),f(y,b,_),f(m,b,_),p(e),e.setScale();var A=o(y),M=o(m),S=.5*(A[1]-A[0]),E=.5*(A[1]+A[0]),L=.5*(M[1]-M[0]),C=.5*(M[1]+M[0]),P=1.3;return A=[E-S*P,E+S*P],M=[C-L*P,C+L*P],e._extremes[r._id]=n.findExtremes(r,A,{padded:!0}),e._extremes[d._id]=n.findExtremes(d,M,{padded:!0}),s(e,"a","b"),s(e,"b","a"),l(e,v),l(e,g),w.clipsegments=u(e._xctrl,e._yctrl,v,g),w.x=y,w.y=m,w.a=b,w.b=_,[w]}},44807:function(t){"use strict";t.exports=function(t,e,r,n){var i,a,o,s=[],l=!!r.smoothing,u=!!n.smoothing,c=t[0].length-1,f=t.length-1;for(i=0,a=[],o=[];i<=c;i++)a[i]=t[0][i],o[i]=e[0][i];for(s.push({x:a,y:o,bicubic:l}),i=0,a=[],o=[];i<=f;i++)a[i]=t[i][c],o[i]=e[i][c];for(s.push({x:a,y:o,bicubic:u}),i=c,a=[],o=[];i>=0;i--)a[c-i]=t[f][i],o[c-i]=e[f][i];for(s.push({x:a,y:o,bicubic:l}),i=f,a=[],o=[];i>=0;i--)a[f-i]=t[i][0],o[f-i]=e[i][0];return s.push({x:a,y:o,bicubic:u}),s}},20347:function(t,e,r){"use strict";var n=r(89298),i=r(1426).extendFlat;t.exports=function(t,e,r){var a,o,s,l,u,c,f,h,p,d,v,g,y,m,x=t["_"+e],b=t[e+"axis"],_=b._gridlines=[],w=b._minorgridlines=[],T=b._boundarylines=[],k=t["_"+r],A=t[r+"axis"];"array"===b.tickmode&&(b.tickvals=x.slice());var M=t._xctrl,S=t._yctrl,E=M[0].length,L=M.length,C=t._a.length,P=t._b.length;n.prepTicks(b),"array"===b.tickmode&&delete b.tickvals;var O=b.smoothing?3:1;function I(n){var i,a,o,s,l,u,c,f,p,d,v,g,y=[],m=[],x={};if("b"===e)for(a=t.b2j(n),o=Math.floor(Math.max(0,Math.min(P-2,a))),s=a-o,x.length=P,x.crossLength=C,x.xy=function(e){return t.evalxy([],e,a)},x.dxy=function(e,r){return t.dxydi([],e,o,r,s)},i=0;i<C;i++)u=Math.min(C-2,i),c=i-u,f=t.evalxy([],i,a),A.smoothing&&i>0&&(p=t.dxydi([],i-1,o,0,s),y.push(l[0]+p[0]/3),m.push(l[1]+p[1]/3),d=t.dxydi([],i-1,o,1,s),y.push(f[0]-d[0]/3),m.push(f[1]-d[1]/3)),y.push(f[0]),m.push(f[1]),l=f;else for(i=t.a2i(n),u=Math.floor(Math.max(0,Math.min(C-2,i))),c=i-u,x.length=C,x.crossLength=P,x.xy=function(e){return t.evalxy([],i,e)},x.dxy=function(e,r){return t.dxydj([],u,e,c,r)},a=0;a<P;a++)o=Math.min(P-2,a),s=a-o,f=t.evalxy([],i,a),A.smoothing&&a>0&&(v=t.dxydj([],u,a-1,c,0),y.push(l[0]+v[0]/3),m.push(l[1]+v[1]/3),g=t.dxydj([],u,a-1,c,1),y.push(f[0]-g[0]/3),m.push(f[1]-g[1]/3)),y.push(f[0]),m.push(f[1]),l=f;return x.axisLetter=e,x.axis=b,x.crossAxis=A,x.value=n,x.constvar=r,x.index=h,x.x=y,x.y=m,x.smoothing=A.smoothing,x}function D(n){var i,a,o,s,l,u=[],c=[],f={};if(f.length=x.length,f.crossLength=k.length,"b"===e)for(o=Math.max(0,Math.min(P-2,n)),l=Math.min(1,Math.max(0,n-o)),f.xy=function(e){return t.evalxy([],e,n)},f.dxy=function(e,r){return t.dxydi([],e,o,r,l)},i=0;i<E;i++)u[i]=M[n*O][i],c[i]=S[n*O][i];else for(a=Math.max(0,Math.min(C-2,n)),s=Math.min(1,Math.max(0,n-a)),f.xy=function(e){return t.evalxy([],n,e)},f.dxy=function(e,r){return t.dxydj([],a,e,s,r)},i=0;i<L;i++)u[i]=M[i][n*O],c[i]=S[i][n*O];return f.axisLetter=e,f.axis=b,f.crossAxis=A,f.value=x[n],f.constvar=r,f.index=n,f.x=u,f.y=c,f.smoothing=A.smoothing,f}if("array"===b.tickmode){for(l=5e-15,c=(u=[Math.floor((x.length-1-b.arraytick0)/b.arraydtick*(1+l)),Math.ceil(-b.arraytick0/b.arraydtick/(1+l))].sort((function(t,e){return t-e})))[0]-1,f=u[1]+1,h=c;h<f;h++)(o=b.arraytick0+b.arraydtick*h)<0||o>x.length-1||_.push(i(D(o),{color:b.gridcolor,width:b.gridwidth,dash:b.griddash}));for(h=c;h<f;h++)if(s=b.arraytick0+b.arraydtick*h,v=Math.min(s+b.arraydtick,x.length-1),!(s<0||s>x.length-1||v<0||v>x.length-1))for(g=x[s],y=x[v],a=0;a<b.minorgridcount;a++)(m=v-s)<=0||(d=g+(y-g)*(a+1)/(b.minorgridcount+1)*(b.arraydtick/m))<x[0]||d>x[x.length-1]||w.push(i(I(d),{color:b.minorgridcolor,width:b.minorgridwidth,dash:b.minorgriddash}));b.startline&&T.push(i(D(0),{color:b.startlinecolor,width:b.startlinewidth})),b.endline&&T.push(i(D(x.length-1),{color:b.endlinecolor,width:b.endlinewidth}))}else{for(l=5e-15,c=(u=[Math.floor((x[x.length-1]-b.tick0)/b.dtick*(1+l)),Math.ceil((x[0]-b.tick0)/b.dtick/(1+l))].sort((function(t,e){return t-e})))[0],f=u[1],h=c;h<=f;h++)p=b.tick0+b.dtick*h,_.push(i(I(p),{color:b.gridcolor,width:b.gridwidth,dash:b.griddash}));for(h=c-1;h<f+1;h++)for(p=b.tick0+b.dtick*h,a=0;a<b.minorgridcount;a++)(d=p+b.dtick*(a+1)/(b.minorgridcount+1))<x[0]||d>x[x.length-1]||w.push(i(I(d),{color:b.minorgridcolor,width:b.minorgridwidth,dash:b.minorgriddash}));b.startline&&T.push(i(I(x[0]),{color:b.startlinecolor,width:b.startlinewidth})),b.endline&&T.push(i(I(x[x.length-1]),{color:b.endlinecolor,width:b.endlinewidth}))}}},83311:function(t,e,r){"use strict";var n=r(89298),i=r(1426).extendFlat;t.exports=function(t,e){var r,a,o,s=e._labels=[],l=e._gridlines;for(r=0;r<l.length;r++)o=l[r],-1!==["start","both"].indexOf(e.showticklabels)&&(a=n.tickText(e,o.value),i(a,{prefix:void 0,suffix:void 0,endAnchor:!0,xy:o.xy(0),dxy:o.dxy(0,0),axis:o.axis,length:o.crossAxis.length,font:o.axis.tickfont,isFirst:0===r,isLast:r===l.length-1}),s.push(a)),-1!==["end","both"].indexOf(e.showticklabels)&&(a=n.tickText(e,o.value),i(a,{endAnchor:!1,xy:o.xy(o.crossLength-1),dxy:o.dxy(o.crossLength-2,1),axis:o.axis,length:o.crossAxis.length,font:o.axis.tickfont,isFirst:0===r,isLast:r===l.length-1}),s.push(a))}},42048:function(t){"use strict";t.exports=function(t,e,r,n){var i=t[0]-e[0],a=t[1]-e[1],o=r[0]-e[0],s=r[1]-e[1],l=Math.pow(i*i+a*a,.25),u=Math.pow(o*o+s*s,.25),c=(u*u*i-l*l*o)*n,f=(u*u*a-l*l*s)*n,h=u*(l+u)*3,p=l*(l+u)*3;return[[e[0]+(h&&c/h),e[1]+(h&&f/h)],[e[0]-(p&&c/p),e[1]-(p&&f/p)]]}},53824:function(t,e,r){"use strict";var n=r(71828).isArrayOrTypedArray;t.exports=function(t,e,r){var i,a,o,s,l,u,c=[],f=n(t)?t.length:t,h=n(e)?e.length:e,p=n(t)?t:null,d=n(e)?e:null;p&&(o=(p.length-1)/(p[p.length-1]-p[0])/(f-1)),d&&(s=(d.length-1)/(d[d.length-1]-d[0])/(h-1));var v=1/0,g=-1/0;for(a=0;a<h;a++)for(c[a]=[],l=d?(d[a]-d[0])*s:a/(h-1),i=0;i<f;i++)u=(p?(p[i]-p[0])*o:i/(f-1))-l*r,v=Math.min(u,v),g=Math.max(u,g),c[a][i]=u;var y=1/(g-v),m=-v*y;for(a=0;a<h;a++)for(i=0;i<f;i++)c[a][i]=y*c[a][i]+m;return c}},45664:function(t,e,r){"use strict";var n=r(42048),i=r(71828).ensureArray;function a(t,e,r){var n=-.5*r[0]+1.5*e[0],i=-.5*r[1]+1.5*e[1];return[(2*n+t[0])/3,(2*i+t[1])/3]}t.exports=function(t,e,r,o,s,l){var u,c,f,h,p,d,v,g,y,m,x=r[0].length,b=r.length,_=s?3*x-2:x,w=l?3*b-2:b;for(t=i(t,w),e=i(e,w),f=0;f<w;f++)t[f]=i(t[f],_),e[f]=i(e[f],_);for(c=0,h=0;c<b;c++,h+=l?3:1)for(p=t[h],d=e[h],v=r[c],g=o[c],u=0,f=0;u<x;u++,f+=s?3:1)p[f]=v[u],d[f]=g[u];if(s)for(c=0,h=0;c<b;c++,h+=l?3:1){for(u=1,f=3;u<x-1;u++,f+=3)y=n([r[c][u-1],o[c][u-1]],[r[c][u],o[c][u]],[r[c][u+1],o[c][u+1]],s),t[h][f-1]=y[0][0],e[h][f-1]=y[0][1],t[h][f+1]=y[1][0],e[h][f+1]=y[1][1];m=a([t[h][0],e[h][0]],[t[h][2],e[h][2]],[t[h][3],e[h][3]]),t[h][1]=m[0],e[h][1]=m[1],m=a([t[h][_-1],e[h][_-1]],[t[h][_-3],e[h][_-3]],[t[h][_-4],e[h][_-4]]),t[h][_-2]=m[0],e[h][_-2]=m[1]}if(l)for(f=0;f<_;f++){for(h=3;h<w-3;h+=3)y=n([t[h-3][f],e[h-3][f]],[t[h][f],e[h][f]],[t[h+3][f],e[h+3][f]],l),t[h-1][f]=y[0][0],e[h-1][f]=y[0][1],t[h+1][f]=y[1][0],e[h+1][f]=y[1][1];m=a([t[0][f],e[0][f]],[t[2][f],e[2][f]],[t[3][f],e[3][f]]),t[1][f]=m[0],e[1][f]=m[1],m=a([t[w-1][f],e[w-1][f]],[t[w-3][f],e[w-3][f]],[t[w-4][f],e[w-4][f]]),t[w-2][f]=m[0],e[w-2][f]=m[1]}if(s&&l)for(h=1;h<w;h+=(h+1)%3==0?2:1){for(f=3;f<_-3;f+=3)y=n([t[h][f-3],e[h][f-3]],[t[h][f],e[h][f]],[t[h][f+3],e[h][f+3]],s),t[h][f-1]=.5*(t[h][f-1]+y[0][0]),e[h][f-1]=.5*(e[h][f-1]+y[0][1]),t[h][f+1]=.5*(t[h][f+1]+y[1][0]),e[h][f+1]=.5*(e[h][f+1]+y[1][1]);m=a([t[h][0],e[h][0]],[t[h][2],e[h][2]],[t[h][3],e[h][3]]),t[h][1]=.5*(t[h][1]+m[0]),e[h][1]=.5*(e[h][1]+m[1]),m=a([t[h][_-1],e[h][_-1]],[t[h][_-3],e[h][_-3]],[t[h][_-4],e[h][_-4]]),t[h][_-2]=.5*(t[h][_-2]+m[0]),e[h][_-2]=.5*(e[h][_-2]+m[1])}return[t,e]}},35509:function(t){"use strict";t.exports={RELATIVE_CULL_TOLERANCE:1e-6}},54495:function(t){"use strict";t.exports=function(t,e,r){return e&&r?function(e,r,n,i,a){var o,s,l,u,c,f;e||(e=[]),r*=3,n*=3;var h=i*i,p=1-i,d=p*p,v=p*i*2,g=-3*d,y=3*(d-v),m=3*(v-h),x=3*h,b=a*a,_=b*a,w=1-a,T=w*w,k=T*w;for(f=0;f<t.length;f++)o=g*(c=t[f])[n][r]+y*c[n][r+1]+m*c[n][r+2]+x*c[n][r+3],s=g*c[n+1][r]+y*c[n+1][r+1]+m*c[n+1][r+2]+x*c[n+1][r+3],l=g*c[n+2][r]+y*c[n+2][r+1]+m*c[n+2][r+2]+x*c[n+2][r+3],u=g*c[n+3][r]+y*c[n+3][r+1]+m*c[n+3][r+2]+x*c[n+3][r+3],e[f]=k*o+3*(T*a*s+w*b*l)+_*u;return e}:e?function(e,r,n,i,a){var o,s,l,u;e||(e=[]),r*=3;var c=i*i,f=1-i,h=f*f,p=f*i*2,d=-3*h,v=3*(h-p),g=3*(p-c),y=3*c,m=1-a;for(l=0;l<t.length;l++)o=d*(u=t[l])[n][r]+v*u[n][r+1]+g*u[n][r+2]+y*u[n][r+3],s=d*u[n+1][r]+v*u[n+1][r+1]+g*u[n+1][r+2]+y*u[n+1][r+3],e[l]=m*o+a*s;return e}:r?function(e,r,n,i,a){var o,s,l,u,c,f;e||(e=[]),n*=3;var h=a*a,p=h*a,d=1-a,v=d*d,g=v*d;for(c=0;c<t.length;c++)o=(f=t[c])[n][r+1]-f[n][r],s=f[n+1][r+1]-f[n+1][r],l=f[n+2][r+1]-f[n+2][r],u=f[n+3][r+1]-f[n+3][r],e[c]=g*o+3*(v*a*s+d*h*l)+p*u;return e}:function(e,r,n,i,a){var o,s,l,u;e||(e=[]);var c=1-a;for(l=0;l<t.length;l++)o=(u=t[l])[n][r+1]-u[n][r],s=u[n+1][r+1]-u[n+1][r],e[l]=c*o+a*s;return e}}},73057:function(t){"use strict";t.exports=function(t,e,r){return e&&r?function(e,r,n,i,a){var o,s,l,u,c,f;e||(e=[]),r*=3,n*=3;var h=i*i,p=h*i,d=1-i,v=d*d,g=v*d,y=a*a,m=1-a,x=m*m,b=m*a*2,_=-3*x,w=3*(x-b),T=3*(b-y),k=3*y;for(f=0;f<t.length;f++)o=_*(c=t[f])[n][r]+w*c[n+1][r]+T*c[n+2][r]+k*c[n+3][r],s=_*c[n][r+1]+w*c[n+1][r+1]+T*c[n+2][r+1]+k*c[n+3][r+1],l=_*c[n][r+2]+w*c[n+1][r+2]+T*c[n+2][r+2]+k*c[n+3][r+2],u=_*c[n][r+3]+w*c[n+1][r+3]+T*c[n+2][r+3]+k*c[n+3][r+3],e[f]=g*o+3*(v*i*s+d*h*l)+p*u;return e}:e?function(e,r,n,i,a){var o,s,l,u,c,f;e||(e=[]),r*=3;var h=a*a,p=h*a,d=1-a,v=d*d,g=v*d;for(c=0;c<t.length;c++)o=(f=t[c])[n+1][r]-f[n][r],s=f[n+1][r+1]-f[n][r+1],l=f[n+1][r+2]-f[n][r+2],u=f[n+1][r+3]-f[n][r+3],e[c]=g*o+3*(v*a*s+d*h*l)+p*u;return e}:r?function(e,r,n,i,a){var o,s,l,u;e||(e=[]),n*=3;var c=1-i,f=a*a,h=1-a,p=h*h,d=h*a*2,v=-3*p,g=3*(p-d),y=3*(d-f),m=3*f;for(l=0;l<t.length;l++)o=v*(u=t[l])[n][r]+g*u[n+1][r]+y*u[n+2][r]+m*u[n+3][r],s=v*u[n][r+1]+g*u[n+1][r+1]+y*u[n+2][r+1]+m*u[n+3][r+1],e[l]=c*o+i*s;return e}:function(e,r,n,i,a){var o,s,l,u;e||(e=[]);var c=1-i;for(l=0;l<t.length;l++)o=(u=t[l])[n+1][r]-u[n][r],s=u[n+1][r+1]-u[n][r+1],e[l]=c*o+i*s;return e}}},20349:function(t){"use strict";t.exports=function(t,e,r,n,i){var a=e-2,o=r-2;return n&&i?function(e,r,n){var i,s,l,u,c,f;e||(e=[]);var h=Math.max(0,Math.min(Math.floor(r),a)),p=Math.max(0,Math.min(Math.floor(n),o)),d=Math.max(0,Math.min(1,r-h)),v=Math.max(0,Math.min(1,n-p));h*=3,p*=3;var g=d*d,y=g*d,m=1-d,x=m*m,b=x*m,_=v*v,w=_*v,T=1-v,k=T*T,A=k*T;for(f=0;f<t.length;f++)i=b*(c=t[f])[p][h]+3*(x*d*c[p][h+1]+m*g*c[p][h+2])+y*c[p][h+3],s=b*c[p+1][h]+3*(x*d*c[p+1][h+1]+m*g*c[p+1][h+2])+y*c[p+1][h+3],l=b*c[p+2][h]+3*(x*d*c[p+2][h+1]+m*g*c[p+2][h+2])+y*c[p+2][h+3],u=b*c[p+3][h]+3*(x*d*c[p+3][h+1]+m*g*c[p+3][h+2])+y*c[p+3][h+3],e[f]=A*i+3*(k*v*s+T*_*l)+w*u;return e}:n?function(e,r,n){e||(e=[]);var i,s,l,u,c,f,h=Math.max(0,Math.min(Math.floor(r),a)),p=Math.max(0,Math.min(Math.floor(n),o)),d=Math.max(0,Math.min(1,r-h)),v=Math.max(0,Math.min(1,n-p));h*=3;var g=d*d,y=g*d,m=1-d,x=m*m,b=x*m,_=1-v;for(c=0;c<t.length;c++)i=_*(f=t[c])[p][h]+v*f[p+1][h],s=_*f[p][h+1]+v*f[p+1][h+1],l=_*f[p][h+2]+v*f[p+1][h+1],u=_*f[p][h+3]+v*f[p+1][h+1],e[c]=b*i+3*(x*d*s+m*g*l)+y*u;return e}:i?function(e,r,n){e||(e=[]);var i,s,l,u,c,f,h=Math.max(0,Math.min(Math.floor(r),a)),p=Math.max(0,Math.min(Math.floor(n),o)),d=Math.max(0,Math.min(1,r-h)),v=Math.max(0,Math.min(1,n-p));p*=3;var g=v*v,y=g*v,m=1-v,x=m*m,b=x*m,_=1-d;for(c=0;c<t.length;c++)i=_*(f=t[c])[p][h]+d*f[p][h+1],s=_*f[p+1][h]+d*f[p+1][h+1],l=_*f[p+2][h]+d*f[p+2][h+1],u=_*f[p+3][h]+d*f[p+3][h+1],e[c]=b*i+3*(x*v*s+m*g*l)+y*u;return e}:function(e,r,n){e||(e=[]);var i,s,l,u,c=Math.max(0,Math.min(Math.floor(r),a)),f=Math.max(0,Math.min(Math.floor(n),o)),h=Math.max(0,Math.min(1,r-c)),p=Math.max(0,Math.min(1,n-f)),d=1-p,v=1-h;for(l=0;l<t.length;l++)i=v*(u=t[l])[f][c]+h*u[f][c+1],s=v*u[f+1][c]+h*u[f+1][c+1],e[l]=d*i+p*s;return e}}},92087:function(t,e,r){"use strict";var n=r(71828),i=r(19237),a=r(13145),o=r(99798),s=r(22399);t.exports=function(t,e,r,l){function u(r,i){return n.coerce(t,e,o,r,i)}e._clipPathId="clip"+e.uid+"carpet";var c=u("color",s.defaultLine);n.coerceFont(u,"font"),u("carpet"),a(t,e,l,u,c),e.a&&e.b?(e.a.length<3&&(e.aaxis.smoothing=0),e.b.length<3&&(e.baxis.smoothing=0),i(t,e,u)||(e.visible=!1),e._cheater&&u("cheaterslope")):e.visible=!1}},21462:function(t,e,r){"use strict";t.exports={attributes:r(99798),supplyDefaults:r(92087),plot:r(89740),calc:r(25281),animatable:!0,isContainer:!0,moduleType:"trace",name:"carpet",basePlotModule:r(93612),categories:["cartesian","svg","carpet","carpetAxis","notLegendIsolatable","noMultiCategory","noHover","noSortingByValue"],meta:{}}},22882:function(t){"use strict";t.exports=function(t,e){for(var r,n=t._fullData.length,i=0;i<n;i++){var a=t._fullData[i];if(a.index!==e.index&&"carpet"===a.type&&(r||(r=a),a.carpet===e.carpet))return a}return r}},67961:function(t){"use strict";t.exports=function(t,e,r){if(0===t.length)return"";var n,i=[],a=r?3:1;for(n=0;n<t.length;n+=a)i.push(t[n]+","+e[n]),r&&n<t.length-a&&(i.push("C"),i.push([t[n+1]+","+e[n+1],t[n+2]+","+e[n+2]+" "].join(" ")));return i.join(r?"":"L")}},27669:function(t,e,r){"use strict";var n=r(71828).isArrayOrTypedArray;t.exports=function(t,e,r){var i;for(n(t)?t.length>e.length&&(t=t.slice(0,e.length)):t=[],i=0;i<e.length;i++)t[i]=r(e[i]);return t}},11651:function(t){"use strict";t.exports=function(t,e,r,n,i,a){var o=i[0]*t.dpdx(e),s=i[1]*t.dpdy(r),l=1,u=1;if(a){var c=Math.sqrt(i[0]*i[0]+i[1]*i[1]),f=Math.sqrt(a[0]*a[0]+a[1]*a[1]),h=(i[0]*a[0]+i[1]*a[1])/c/f;u=Math.max(0,h)}var p=180*Math.atan2(s,o)/Math.PI;return p<-90?(p+=180,l=-l):p>90&&(p-=180,l=-l),{angle:p,flip:l,p:t.c2p(n,e,r),offsetMultplier:u}}},89740:function(t,e,r){"use strict";var n=r(39898),i=r(91424),a=r(27669),o=r(67961),s=r(11651),l=r(63893),u=r(71828),c=u.strRotate,f=u.strTranslate,h=r(18783);function p(t,e,r,s,l,u,c){var f="const-"+l+"-lines",h=r.selectAll("."+f).data(u);h.enter().append("path").classed(f,!0).style("vector-effect",c?"none":"non-scaling-stroke"),h.each((function(r){var s=r,l=s.x,u=s.y,c=a([],l,t.c2p),f=a([],u,e.c2p),h="M"+o(c,f,s.smoothing);n.select(this).attr("d",h).style("stroke-width",s.width).style("stroke",s.color).style("stroke-dasharray",i.dashStyle(s.dash,s.width)).style("fill","none")})),h.exit().remove()}function d(t,e,r,a,o,u,h,p){var d=u.selectAll("text."+p).data(h);d.enter().append("text").classed(p,!0);var v=0,g={};return d.each((function(o,u){var h;if("auto"===o.axis.tickangle)h=s(a,e,r,o.xy,o.dxy);else{var p=(o.axis.tickangle+180)*Math.PI/180;h=s(a,e,r,o.xy,[Math.cos(p),Math.sin(p)])}u||(g={angle:h.angle,flip:h.flip});var d=(o.endAnchor?-1:1)*h.flip,y=n.select(this).attr({"text-anchor":d>0?"start":"end","data-notex":1}).call(i.font,o.font).text(o.text).call(l.convertToTspans,t),m=i.bBox(this);y.attr("transform",f(h.p[0],h.p[1])+c(h.angle)+f(o.axis.labelpadding*d,.3*m.height)),v=Math.max(v,m.width+o.axis.labelpadding)})),d.exit().remove(),g.maxExtent=v,g}t.exports=function(t,e,r,i){var l=t._context.staticPlot,c=e.xaxis,f=e.yaxis,h=t._fullLayout._clips;u.makeTraceGroups(i,r,"trace").each((function(e){var r=n.select(this),i=e[0],v=i.trace,g=v.aaxis,m=v.baxis,x=u.ensureSingle(r,"g","minorlayer"),b=u.ensureSingle(r,"g","majorlayer"),_=u.ensureSingle(r,"g","boundarylayer"),w=u.ensureSingle(r,"g","labellayer");r.style("opacity",v.opacity),p(c,f,b,0,"a",g._gridlines,!0),p(c,f,b,0,"b",m._gridlines,!0),p(c,f,x,0,"a",g._minorgridlines,!0),p(c,f,x,0,"b",m._minorgridlines,!0),p(c,f,_,0,"a-boundary",g._boundarylines,l),p(c,f,_,0,"b-boundary",m._boundarylines,l);var T=d(t,c,f,v,0,w,g._labels,"a-label"),k=d(t,c,f,v,0,w,m._labels,"b-label");!function(t,e,r,n,i,a,o,l){var c,f,h,p,d=u.aggNums(Math.min,null,r.a),v=u.aggNums(Math.max,null,r.a),g=u.aggNums(Math.min,null,r.b),m=u.aggNums(Math.max,null,r.b);c=.5*(d+v),f=g,h=r.ab2xy(c,f,!0),p=r.dxyda_rough(c,f),void 0===o.angle&&u.extendFlat(o,s(r,i,a,h,r.dxydb_rough(c,f))),y(t,e,r,0,h,p,r.aaxis,i,a,o,"a-title"),c=d,f=.5*(g+m),h=r.ab2xy(c,f,!0),p=r.dxydb_rough(c,f),void 0===l.angle&&u.extendFlat(l,s(r,i,a,h,r.dxyda_rough(c,f))),y(t,e,r,0,h,p,r.baxis,i,a,l,"b-title")}(t,w,v,0,c,f,T,k),function(t,e,r,n,i){var s,l,c,f,h=r.select("#"+t._clipPathId);h.size()||(h=r.append("clipPath").classed("carpetclip",!0));var p=u.ensureSingle(h,"path","carpetboundary"),d=e.clipsegments,v=[];for(f=0;f<d.length;f++)s=d[f],l=a([],s.x,n.c2p),c=a([],s.y,i.c2p),v.push(o(l,c,s.bicubic));var g="M"+v.join("L")+"Z";h.attr("id",t._clipPathId),p.attr("d",g)}(v,i,h,c,f)}))};var v=h.LINE_SPACING,g=(1-h.MID_SHIFT)/v+1;function y(t,e,r,a,o,u,h,p,d,y,m){var x=[];h.title.text&&x.push(h.title.text);var b=e.selectAll("text."+m).data(x),_=y.maxExtent;b.enter().append("text").classed(m,!0),b.each((function(){var e=s(r,p,d,o,u);-1===["start","both"].indexOf(h.showticklabels)&&(_=0);var a=h.title.font.size;_+=a+h.title.offset;var m=(y.angle+(y.flip<0?180:0)-e.angle+450)%360,x=m>90&&m<270,b=n.select(this);b.text(h.title.text).call(l.convertToTspans,t),x&&(_=(-l.lineCount(b)+g)*v*a-_),b.attr("transform",f(e.p[0],e.p[1])+c(e.angle)+f(0,_)).attr("text-anchor","middle").call(i.font,h.title.font)})),b.exit().remove()}},11435:function(t,e,r){"use strict";var n=r(35509),i=r(65888).findBin,a=r(45664),o=r(20349),s=r(54495),l=r(73057);t.exports=function(t){var e=t._a,r=t._b,u=e.length,c=r.length,f=t.aaxis,h=t.baxis,p=e[0],d=e[u-1],v=r[0],g=r[c-1],y=e[e.length-1]-e[0],m=r[r.length-1]-r[0],x=y*n.RELATIVE_CULL_TOLERANCE,b=m*n.RELATIVE_CULL_TOLERANCE;p-=x,d+=x,v-=b,g+=b,t.isVisible=function(t,e){return t>p&&t<d&&e>v&&e<g},t.isOccluded=function(t,e){return t<p||t>d||e<v||e>g},t.setScale=function(){var e=t._x,r=t._y,n=a(t._xctrl,t._yctrl,e,r,f.smoothing,h.smoothing);t._xctrl=n[0],t._yctrl=n[1],t.evalxy=o([t._xctrl,t._yctrl],u,c,f.smoothing,h.smoothing),t.dxydi=s([t._xctrl,t._yctrl],f.smoothing,h.smoothing),t.dxydj=l([t._xctrl,t._yctrl],f.smoothing,h.smoothing)},t.i2a=function(t){var r=Math.max(0,Math.floor(t[0]),u-2),n=t[0]-r;return(1-n)*e[r]+n*e[r+1]},t.j2b=function(t){var e=Math.max(0,Math.floor(t[1]),u-2),n=t[1]-e;return(1-n)*r[e]+n*r[e+1]},t.ij2ab=function(e){return[t.i2a(e[0]),t.j2b(e[1])]},t.a2i=function(t){var r=Math.max(0,Math.min(i(t,e),u-2)),n=e[r],a=e[r+1];return Math.max(0,Math.min(u-1,r+(t-n)/(a-n)))},t.b2j=function(t){var e=Math.max(0,Math.min(i(t,r),c-2)),n=r[e],a=r[e+1];return Math.max(0,Math.min(c-1,e+(t-n)/(a-n)))},t.ab2ij=function(e){return[t.a2i(e[0]),t.b2j(e[1])]},t.i2c=function(e,r){return t.evalxy([],e,r)},t.ab2xy=function(n,i,a){if(!a&&(n<e[0]||n>e[u-1]|i<r[0]||i>r[c-1]))return[!1,!1];var o=t.a2i(n),s=t.b2j(i),l=t.evalxy([],o,s);if(a){var f,h,p,d,v=0,g=0,y=[];n<e[0]?(f=0,h=0,v=(n-e[0])/(e[1]-e[0])):n>e[u-1]?(f=u-2,h=1,v=(n-e[u-1])/(e[u-1]-e[u-2])):h=o-(f=Math.max(0,Math.min(u-2,Math.floor(o)))),i<r[0]?(p=0,d=0,g=(i-r[0])/(r[1]-r[0])):i>r[c-1]?(p=c-2,d=1,g=(i-r[c-1])/(r[c-1]-r[c-2])):d=s-(p=Math.max(0,Math.min(c-2,Math.floor(s)))),v&&(t.dxydi(y,f,p,h,d),l[0]+=y[0]*v,l[1]+=y[1]*v),g&&(t.dxydj(y,f,p,h,d),l[0]+=y[0]*g,l[1]+=y[1]*g)}return l},t.c2p=function(t,e,r){return[e.c2p(t[0]),r.c2p(t[1])]},t.p2x=function(t,e,r){return[e.p2c(t[0]),r.p2c(t[1])]},t.dadi=function(t){var r=Math.max(0,Math.min(e.length-2,t));return e[r+1]-e[r]},t.dbdj=function(t){var e=Math.max(0,Math.min(r.length-2,t));return r[e+1]-r[e]},t.dxyda=function(e,r,n,i){var a=t.dxydi(null,e,r,n,i),o=t.dadi(e,n);return[a[0]/o,a[1]/o]},t.dxydb=function(e,r,n,i){var a=t.dxydj(null,e,r,n,i),o=t.dbdj(r,i);return[a[0]/o,a[1]/o]},t.dxyda_rough=function(e,r,n){var i=y*(n||.1),a=t.ab2xy(e+i,r,!0),o=t.ab2xy(e-i,r,!0);return[.5*(a[0]-o[0])/i,.5*(a[1]-o[1])/i]},t.dxydb_rough=function(e,r,n){var i=m*(n||.1),a=t.ab2xy(e,r+i,!0),o=t.ab2xy(e,r-i,!0);return[.5*(a[0]-o[0])/i,.5*(a[1]-o[1])/i]},t.dpdx=function(t){return t._m},t.dpdy=function(t){return t._m}}},72505:function(t,e,r){"use strict";var n=r(71828);t.exports=function(t,e,r){var i,a,o,s=[],l=[],u=t[0].length,c=t.length;function f(e,r){var n,i=0,a=0;return e>0&&void 0!==(n=t[r][e-1])&&(a++,i+=n),e<u-1&&void 0!==(n=t[r][e+1])&&(a++,i+=n),r>0&&void 0!==(n=t[r-1][e])&&(a++,i+=n),r<c-1&&void 0!==(n=t[r+1][e])&&(a++,i+=n),i/Math.max(1,a)}var h,p,d,v,g,y,m,x,b,_,w,T=0;for(i=0;i<u;i++)for(a=0;a<c;a++)void 0===t[a][i]&&(s.push(i),l.push(a),t[a][i]=f(i,a)),T=Math.max(T,Math.abs(t[a][i]));if(!s.length)return t;var k=0,A=0,M=s.length;do{for(k=0,o=0;o<M;o++){i=s[o],a=l[o];var S,E,L,C,P,O,I=0,D=0;0===i?(L=e[P=Math.min(u-1,2)],C=e[1],S=t[a][P],D+=(E=t[a][1])+(E-S)*(e[0]-C)/(C-L),I++):i===u-1&&(L=e[P=Math.max(0,u-3)],C=e[u-2],S=t[a][P],D+=(E=t[a][u-2])+(E-S)*(e[u-1]-C)/(C-L),I++),(0===i||i===u-1)&&a>0&&a<c-1&&(h=r[a+1]-r[a],D+=((p=r[a]-r[a-1])*t[a+1][i]+h*t[a-1][i])/(p+h),I++),0===a?(L=r[O=Math.min(c-1,2)],C=r[1],S=t[O][i],D+=(E=t[1][i])+(E-S)*(r[0]-C)/(C-L),I++):a===c-1&&(L=r[O=Math.max(0,c-3)],C=r[c-2],S=t[O][i],D+=(E=t[c-2][i])+(E-S)*(r[c-1]-C)/(C-L),I++),(0===a||a===c-1)&&i>0&&i<u-1&&(h=e[i+1]-e[i],D+=((p=e[i]-e[i-1])*t[a][i+1]+h*t[a][i-1])/(p+h),I++),I?D/=I:(d=e[i+1]-e[i],v=e[i]-e[i-1],x=(g=r[a+1]-r[a])*(y=r[a]-r[a-1])*(g+y),D=((m=d*v*(d+v))*(y*t[a+1][i]+g*t[a-1][i])+x*(v*t[a][i+1]+d*t[a][i-1]))/(x*(v+d)+m*(y+g))),k+=(_=(b=D-t[a][i])/T)*_,w=I?0:.85,t[a][i]+=b*(1+w)}k=Math.sqrt(k)}while(A++<100&&k>1e-5);return n.log("Smoother converged to",k,"after",A,"iterations"),t}},19237:function(t,e,r){"use strict";var n=r(71828).isArray1D;t.exports=function(t,e,r){var i=r("x"),a=i&&i.length,o=r("y"),s=o&&o.length;if(!a&&!s)return!1;if(e._cheater=!i,a&&!n(i)||s&&!n(o))e._length=null;else{var l=a?i.length:1/0;s&&(l=Math.min(l,o.length)),e.a&&e.a.length&&(l=Math.min(l,e.a.length)),e.b&&e.b.length&&(l=Math.min(l,e.b.length)),e._length=l}return!0}},69568:function(t,e,r){"use strict";var n=r(5386).fF,i=r(19316),a=r(50693),o=r(9012),s=r(22399).defaultLine,l=r(1426).extendFlat,u=i.marker.line;t.exports=l({locations:{valType:"data_array",editType:"calc"},locationmode:i.locationmode,z:{valType:"data_array",editType:"calc"},geojson:l({},i.geojson,{}),featureidkey:i.featureidkey,text:l({},i.text,{}),hovertext:l({},i.hovertext,{}),marker:{line:{color:l({},u.color,{dflt:s}),width:l({},u.width,{dflt:1}),editType:"calc"},opacity:{valType:"number",arrayOk:!0,min:0,max:1,dflt:1,editType:"style"},editType:"calc"},selected:{marker:{opacity:i.selected.marker.opacity,editType:"plot"},editType:"plot"},unselected:{marker:{opacity:i.unselected.marker.opacity,editType:"plot"},editType:"plot"},hoverinfo:l({},o.hoverinfo,{editType:"calc",flags:["location","z","text","name"]}),hovertemplate:n(),showlegend:l({},o.showlegend,{dflt:!1})},a("",{cLetter:"z",editTypeOverride:"calc"}))},38675:function(t,e,r){"use strict";var n=r(92770),i=r(50606).BADNUM,a=r(78803),o=r(75225),s=r(66279);function l(t){return t&&"string"==typeof t}t.exports=function(t,e){var r,u=e._length,c=new Array(u);r=e.geojson?function(t){return l(t)||n(t)}:l;for(var f=0;f<u;f++){var h=c[f]={},p=e.locations[f],d=e.z[f];r(p)&&n(d)?(h.loc=p,h.z=d):(h.loc=null,h.z=i),h.index=f}return o(c,e),a(t,e,{vals:e.z,containerStr:"",cLetter:"z"}),s(c,e),c}},61869:function(t,e,r){"use strict";var n=r(71828),i=r(1586),a=r(69568);t.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s("locations"),u=s("z");if(l&&l.length&&n.isArrayOrTypedArray(u)&&u.length){e._length=Math.min(l.length,u.length);var c,f=s("geojson");("string"==typeof f&&""!==f||n.isPlainObject(f))&&(c="geojson-id"),"geojson-id"===s("locationmode",c)&&s("featureidkey"),s("text"),s("hovertext"),s("hovertemplate"),s("marker.line.width")&&s("marker.line.color"),s("marker.opacity"),i(t,e,o,s,{prefix:"",cLetter:"z"}),n.coerceSelectionMarkerOpacity(e,s)}else e.visible=!1}},92069:function(t){"use strict";t.exports=function(t,e,r,n,i){t.location=e.location,t.z=e.z;var a=n[i];return a.fIn&&a.fIn.properties&&(t.properties=a.fIn.properties),t.ct=a.ct,t}},42300:function(t,e,r){"use strict";var n=r(89298),i=r(69568),a=r(71828).fillText;t.exports=function(t,e,r){var o,s,l,u,c=t.cd,f=c[0].trace,h=t.subplot,p=[e,r],d=[e+360,r];for(s=0;s<c.length;s++)if(u=!1,(o=c[s])._polygons){for(l=0;l<o._polygons.length;l++)o._polygons[l].contains(p)&&(u=!u),o._polygons[l].contains(d)&&(u=!u);if(u)break}if(u&&o)return t.x0=t.x1=t.xa.c2p(o.ct),t.y0=t.y1=t.ya.c2p(o.ct),t.index=o.index,t.location=o.loc,t.z=o.z,t.zLabel=n.tickText(h.mockAxis,h.mockAxis.c2l(o.z),"hover").text,t.hovertemplate=o.hovertemplate,function(t,e,r){if(!e.hovertemplate){var n=r.hi||e.hoverinfo,o=String(r.loc),s="all"===n?i.hoverinfo.flags:n.split("+"),l=-1!==s.indexOf("name"),u=-1!==s.indexOf("location"),c=-1!==s.indexOf("z"),f=-1!==s.indexOf("text"),h=[];!l&&u?t.nameOverride=o:(l&&(t.nameOverride=e.name),u&&h.push(o)),c&&h.push(t.zLabel),f&&a(r,e,h),t.extraText=h.join("<br>")}}(t,f,o),[t]}},51319:function(t,e,r){"use strict";t.exports={attributes:r(69568),supplyDefaults:r(61869),colorbar:r(61243),calc:r(38675),calcGeoJSON:r(99841).calcGeoJSON,plot:r(99841).plot,style:r(99636).style,styleOnSelect:r(99636).styleOnSelect,hoverPoints:r(42300),eventData:r(92069),selectPoints:r(81253),moduleType:"trace",name:"choropleth",basePlotModule:r(44622),categories:["geo","noOpacity","showLegend"],meta:{}}},99841:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=r(41327),o=r(90973).getTopojsonFeatures,s=r(71739).findExtremes,l=r(99636).style;t.exports={calcGeoJSON:function(t,e){for(var r=t[0].trace,n=e[r.geo],i=n._subplot,l=r.locationmode,u=r._length,c="geojson-id"===l?a.extractTraceFeature(t):o(r,i.topojson),f=[],h=[],p=0;p<u;p++){var d=t[p],v="geojson-id"===l?d.fOut:a.locationToFeature(l,d.loc,c);if(v){d.geojson=v,d.ct=v.properties.ct,d._polygons=a.feature2polygons(v);var g=a.computeBbox(v);f.push(g[0],g[2]),h.push(g[1],g[3])}else d.geojson=null}if("geojson"===n.fitbounds&&"geojson-id"===l){var y=a.computeBbox(a.getTraceGeojson(r));f=[y[0],y[2]],h=[y[1],y[3]]}var m={padded:!0};r._extremes.lon=s(n.lonaxis._ax,f,m),r._extremes.lat=s(n.lataxis._ax,h,m)},plot:function(t,e,r){var a=e.layers.backplot.select(".choroplethlayer");i.makeTraceGroups(a,r,"trace choropleth").each((function(e){var r=n.select(this).selectAll("path.choroplethlocation").data(i.identity);r.enter().append("path").classed("choroplethlocation",!0),r.exit().remove(),l(t,e)}))}}},81253:function(t){"use strict";t.exports=function(t,e){var r,n,i,a,o,s=t.cd,l=t.xaxis,u=t.yaxis,c=[];if(!1===e)for(r=0;r<s.length;r++)s[r].selected=0;else for(r=0;r<s.length;r++)(i=(n=s[r]).ct)&&(a=l.c2p(i),o=u.c2p(i),e.contains([a,o],null,r,t)?(c.push({pointNumber:r,lon:i[0],lat:i[1]}),n.selected=1):n.selected=0);return c}},99636:function(t,e,r){"use strict";var n=r(39898),i=r(7901),a=r(91424),o=r(21081);function s(t,e){var r=e[0].trace,s=e[0].node3.selectAll(".choroplethlocation"),l=r.marker||{},u=l.line||{},c=o.makeColorScaleFuncFromTrace(r);s.each((function(t){n.select(this).attr("fill",c(t.z)).call(i.stroke,t.mlc||u.color).call(a.dashLine,"",t.mlw||u.width||0).style("opacity",l.opacity)})),a.selectedPointStyle(s,r)}t.exports={style:function(t,e){e&&s(0,e)},styleOnSelect:function(t,e){var r=e[0].node3,n=e[0].trace;n.selectedpoints?a.selectedPointStyle(r.selectAll(".choroplethlocation"),n):s(0,e)}}},64496:function(t,e,r){"use strict";var n=r(69568),i=r(50693),a=r(5386).fF,o=r(9012),s=r(1426).extendFlat;t.exports=s({locations:{valType:"data_array",editType:"calc"},z:{valType:"data_array",editType:"calc"},geojson:{valType:"any",editType:"calc"},featureidkey:s({},n.featureidkey,{}),below:{valType:"string",editType:"plot"},text:n.text,hovertext:n.hovertext,marker:{line:{color:s({},n.marker.line.color,{editType:"plot"}),width:s({},n.marker.line.width,{editType:"plot"}),editType:"calc"},opacity:s({},n.marker.opacity,{editType:"plot"}),editType:"calc"},selected:{marker:{opacity:s({},n.selected.marker.opacity,{editType:"plot"}),editType:"plot"},editType:"plot"},unselected:{marker:{opacity:s({},n.unselected.marker.opacity,{editType:"plot"}),editType:"plot"},editType:"plot"},hoverinfo:n.hoverinfo,hovertemplate:a({},{keys:["properties"]}),showlegend:s({},o.showlegend,{dflt:!1})},i("",{cLetter:"z",editTypeOverride:"calc"}))},82004:function(t,e,r){"use strict";var n=r(92770),i=r(71828),a=r(21081),o=r(91424),s=r(18214).makeBlank,l=r(41327);function u(t){var e,r=t[0].trace,n=r._opts;if(r.selectedpoints){for(var a=o.makeSelectedPointStyleFns(r),s=0;s<t.length;s++){var l=t[s];l.fOut&&(l.fOut.properties.mo2=a.selectedOpacityFn(l))}e={type:"identity",property:"mo2"}}else e=i.isArrayOrTypedArray(r.marker.opacity)?{type:"identity",property:"mo"}:r.marker.opacity;return i.extendFlat(n.fill.paint,{"fill-opacity":e}),i.extendFlat(n.line.paint,{"line-opacity":e}),n}t.exports={convert:function(t){var e=t[0].trace,r=!0===e.visible&&0!==e._length,o={layout:{visibility:"none"},paint:{}},c={layout:{visibility:"none"},paint:{}},f=e._opts={fill:o,line:c,geojson:s()};if(!r)return f;var h=l.extractTraceFeature(t);if(!h)return f;var p,d,v,g=a.makeColorScaleFuncFromTrace(e),y=e.marker,m=y.line||{};i.isArrayOrTypedArray(y.opacity)&&(p=function(t){var e=t.mo;return n(e)?+i.constrain(e,0,1):0}),i.isArrayOrTypedArray(m.color)&&(d=function(t){return t.mlc}),i.isArrayOrTypedArray(m.width)&&(v=function(t){return t.mlw});for(var x=0;x<t.length;x++){var b=t[x],_=b.fOut;if(_){var w=_.properties;w.fc=g(b.z),p&&(w.mo=p(b)),d&&(w.mlc=d(b)),v&&(w.mlw=v(b)),b.ct=w.ct,b._polygons=l.feature2polygons(_)}}var T=p?{type:"identity",property:"mo"}:y.opacity;return i.extendFlat(o.paint,{"fill-color":{type:"identity",property:"fc"},"fill-opacity":T}),i.extendFlat(c.paint,{"line-color":d?{type:"identity",property:"mlc"}:m.color,"line-width":v?{type:"identity",property:"mlw"}:m.width,"line-opacity":T}),o.layout.visibility="visible",c.layout.visibility="visible",f.geojson={type:"FeatureCollection",features:h},u(t),f},convertOnSelect:u}},22654:function(t,e,r){"use strict";var n=r(71828),i=r(1586),a=r(64496);t.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s("locations"),u=s("z"),c=s("geojson");n.isArrayOrTypedArray(l)&&l.length&&n.isArrayOrTypedArray(u)&&u.length&&("string"==typeof c&&""!==c||n.isPlainObject(c))?(s("featureidkey"),e._length=Math.min(l.length,u.length),s("below"),s("text"),s("hovertext"),s("hovertemplate"),s("marker.line.width")&&s("marker.line.color"),s("marker.opacity"),i(t,e,o,s,{prefix:"",cLetter:"z"}),n.coerceSelectionMarkerOpacity(e,s)):e.visible=!1}},57516:function(t,e,r){"use strict";t.exports={attributes:r(64496),supplyDefaults:r(22654),colorbar:r(61243),calc:r(38675),plot:r(7852),hoverPoints:r(42300),eventData:r(92069),selectPoints:r(81253),styleOnSelect:function(t,e){e&&e[0].trace._glTrace.updateOnSelect(e)},getBelow:function(t,e){for(var r=e.getMapLayers(),n=r.length-2;n>=0;n--){var i=r[n].id;if("string"==typeof i&&0===i.indexOf("water"))for(var a=n+1;a<r.length;a++)if("string"==typeof(i=r[a].id)&&-1===i.indexOf("plotly-"))return i}},moduleType:"trace",name:"choroplethmapbox",basePlotModule:r(50101),categories:["mapbox","gl","noOpacity","showLegend"],meta:{hr_name:"choropleth_mapbox"}}},7852:function(t,e,r){"use strict";var n=r(82004).convert,i=r(82004).convertOnSelect,a=r(77734).traceLayerPrefix;function o(t,e){this.type="choroplethmapbox",this.subplot=t,this.uid=e,this.sourceId="source-"+e,this.layerList=[["fill",a+e+"-fill"],["line",a+e+"-line"]],this.below=null}var s=o.prototype;s.update=function(t){this._update(n(t)),t[0].trace._glTrace=this},s.updateOnSelect=function(t){this._update(i(t))},s._update=function(t){var e=this.subplot,r=this.layerList,n=e.belowLookup["trace-"+this.uid];e.map.getSource(this.sourceId).setData(t.geojson),n!==this.below&&(this._removeLayers(),this._addLayers(t,n),this.below=n);for(var i=0;i<r.length;i++){var a=r[i],o=a[0],s=a[1],l=t[o];e.setOptions(s,"setLayoutProperty",l.layout),"visible"===l.layout.visibility&&e.setOptions(s,"setPaintProperty",l.paint)}},s._addLayers=function(t,e){for(var r=this.subplot,n=this.layerList,i=this.sourceId,a=0;a<n.length;a++){var o=n[a],s=o[0],l=t[s];r.addLayer({type:s,id:o[1],source:i,layout:l.layout,paint:l.paint},e)}},s._removeLayers=function(){for(var t=this.subplot.map,e=this.layerList,r=e.length-1;r>=0;r--)t.removeLayer(e[r][1])},s.dispose=function(){var t=this.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},t.exports=function(t,e){var r=e[0].trace,i=new o(t,r.uid),a=i.sourceId,s=n(e),l=i.below=t.belowLookup["trace-"+r.uid];return t.map.addSource(a,{type:"geojson",data:s.geojson}),i._addLayers(s,l),e[0].trace._glTrace=i,i}},12674:function(t,e,r){"use strict";var n=r(50693),i=r(12663).axisHoverFormat,a=r(5386).fF,o=r(2418),s=r(9012),l=r(1426).extendFlat,u={x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},z:{valType:"data_array",editType:"calc+clearAxisTypes"},u:{valType:"data_array",editType:"calc"},v:{valType:"data_array",editType:"calc"},w:{valType:"data_array",editType:"calc"},sizemode:{valType:"enumerated",values:["scaled","absolute"],editType:"calc",dflt:"scaled"},sizeref:{valType:"number",editType:"calc",min:0},anchor:{valType:"enumerated",editType:"calc",values:["tip","tail","cm","center"],dflt:"cm"},text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertemplate:a({editType:"calc"},{keys:["norm"]}),uhoverformat:i("u",1),vhoverformat:i("v",1),whoverformat:i("w",1),xhoverformat:i("x"),yhoverformat:i("y"),zhoverformat:i("z"),showlegend:l({},s.showlegend,{dflt:!1})};l(u,n("",{colorAttr:"u/v/w norm",showScaleDflt:!0,editTypeOverride:"calc"})),["opacity","lightposition","lighting"].forEach((function(t){u[t]=o[t]})),u.hoverinfo=l({},s.hoverinfo,{editType:"calc",flags:["x","y","z","u","v","w","norm","text","name"],dflt:"x+y+z+norm+text+name"}),u.transforms=void 0,t.exports=u},31371:function(t,e,r){"use strict";var n=r(78803);t.exports=function(t,e){for(var r=e.u,i=e.v,a=e.w,o=Math.min(e.x.length,e.y.length,e.z.length,r.length,i.length,a.length),s=-1/0,l=1/0,u=0;u<o;u++){var c=r[u],f=i[u],h=a[u],p=Math.sqrt(c*c+f*f+h*h);s=Math.max(s,p),l=Math.min(l,p)}e._len=o,e._normMax=s,n(t,e,{vals:[l,s],containerStr:"",cLetter:"c"})}},5453:function(t,e,r){"use strict";var n=r(9330).gl_cone3d,i=r(9330).gl_cone3d.createConeMesh,a=r(71828).simpleMap,o=r(81697).parseColorScale,s=r(21081).extractOpts,l=r(90060);function u(t,e){this.scene=t,this.uid=e,this.mesh=null,this.data=null}var c=u.prototype;c.handlePick=function(t){if(t.object===this.mesh){var e=t.index=t.data.index,r=this.data.x[e],n=this.data.y[e],i=this.data.z[e],a=this.data.u[e],o=this.data.v[e],s=this.data.w[e];t.traceCoordinate=[r,n,i,a,o,s,Math.sqrt(a*a+o*o+s*s)];var l=this.data.hovertext||this.data.text;return Array.isArray(l)&&void 0!==l[e]?t.textLabel=l[e]:l&&(t.textLabel=l),!0}};var f={xaxis:0,yaxis:1,zaxis:2},h={tip:1,tail:0,cm:.25,center:.5},p={tip:1,tail:1,cm:.75,center:.5};function d(t,e){var r=t.fullSceneLayout,i=t.dataScale,u={};function c(t,e){var n=r[e],o=i[f[e]];return a(t,(function(t){return n.d2l(t)*o}))}u.vectors=l(c(e.u,"xaxis"),c(e.v,"yaxis"),c(e.w,"zaxis"),e._len),u.positions=l(c(e.x,"xaxis"),c(e.y,"yaxis"),c(e.z,"zaxis"),e._len);var d=s(e);u.colormap=o(e),u.vertexIntensityBounds=[d.min/e._normMax,d.max/e._normMax],u.coneOffset=h[e.anchor],"scaled"===e.sizemode?u.coneSize=e.sizeref||.5:u.coneSize=e.sizeref&&e._normMax?e.sizeref/e._normMax:.5;var v=n(u),g=e.lightposition;return v.lightPosition=[g.x,g.y,g.z],v.ambient=e.lighting.ambient,v.diffuse=e.lighting.diffuse,v.specular=e.lighting.specular,v.roughness=e.lighting.roughness,v.fresnel=e.lighting.fresnel,v.opacity=e.opacity,e._pad=p[e.anchor]*v.vectorScale*v.coneScale*e._normMax,v}c.update=function(t){this.data=t;var e=d(this.scene,t);this.mesh.update(e)},c.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},t.exports=function(t,e){var r=t.glplot.gl,n=d(t,e),a=i(r,n),o=new u(t,e.uid);return o.mesh=a,o.data=e,a._trace=o,t.glplot.add(a),o}},91750:function(t,e,r){"use strict";var n=r(71828),i=r(1586),a=r(12674);t.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s("u"),u=s("v"),c=s("w"),f=s("x"),h=s("y"),p=s("z");l&&l.length&&u&&u.length&&c&&c.length&&f&&f.length&&h&&h.length&&p&&p.length?(s("sizeref"),s("sizemode"),s("anchor"),s("lighting.ambient"),s("lighting.diffuse"),s("lighting.specular"),s("lighting.roughness"),s("lighting.fresnel"),s("lightposition.x"),s("lightposition.y"),s("lightposition.z"),i(t,e,o,s,{prefix:"",cLetter:"c"}),s("text"),s("hovertext"),s("hovertemplate"),s("uhoverformat"),s("vhoverformat"),s("whoverformat"),s("xhoverformat"),s("yhoverformat"),s("zhoverformat"),e._length=null):e.visible=!1}},98128:function(t,e,r){"use strict";t.exports={moduleType:"trace",name:"cone",basePlotModule:r(58547),categories:["gl3d","showLegend"],attributes:r(12674),supplyDefaults:r(91750),colorbar:{min:"cmin",max:"cmax"},calc:r(31371),plot:r(5453),eventData:function(t,e){return t.norm=e.traceCoordinate[6],t},meta:{}}},70600:function(t,e,r){"use strict";var n=r(21606),i=r(82196),a=r(12663),o=a.axisHoverFormat,s=a.descriptionOnlyNumbers,l=r(50693),u=r(79952).P,c=r(41940),f=r(1426).extendFlat,h=r(74808),p=h.COMPARISON_OPS2,d=h.INTERVAL_OPS,v=i.line;t.exports=f({z:n.z,x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,xperiod:n.xperiod,yperiod:n.yperiod,xperiod0:i.xperiod0,yperiod0:i.yperiod0,xperiodalignment:n.xperiodalignment,yperiodalignment:n.yperiodalignment,text:n.text,hovertext:n.hovertext,transpose:n.transpose,xtype:n.xtype,ytype:n.ytype,xhoverformat:o("x"),yhoverformat:o("y"),zhoverformat:o("z",1),hovertemplate:n.hovertemplate,texttemplate:f({},n.texttemplate,{}),textfont:f({},n.textfont,{}),hoverongaps:n.hoverongaps,connectgaps:f({},n.connectgaps,{}),fillcolor:{valType:"color",editType:"calc"},autocontour:{valType:"boolean",dflt:!0,editType:"calc",impliedEdits:{"contours.start":void 0,"contours.end":void 0,"contours.size":void 0}},ncontours:{valType:"integer",dflt:15,min:1,editType:"calc"},contours:{type:{valType:"enumerated",values:["levels","constraint"],dflt:"levels",editType:"calc"},start:{valType:"number",dflt:null,editType:"plot",impliedEdits:{"^autocontour":!1}},end:{valType:"number",dflt:null,editType:"plot",impliedEdits:{"^autocontour":!1}},size:{valType:"number",dflt:null,min:0,editType:"plot",impliedEdits:{"^autocontour":!1}},coloring:{valType:"enumerated",values:["fill","heatmap","lines","none"],dflt:"fill",editType:"calc"},showlines:{valType:"boolean",dflt:!0,editType:"plot"},showlabels:{valType:"boolean",dflt:!1,editType:"plot"},labelfont:c({editType:"plot",colorEditType:"style"}),labelformat:{valType:"string",dflt:"",editType:"plot",description:s("contour label")},operation:{valType:"enumerated",values:[].concat(p).concat(d),dflt:"=",editType:"calc"},value:{valType:"any",dflt:0,editType:"calc"},editType:"calc",impliedEdits:{autocontour:!1}},line:{color:f({},v.color,{editType:"style+colorbars"}),width:{valType:"number",min:0,editType:"style+colorbars"},dash:u,smoothing:f({},v.smoothing,{}),editType:"plot"}},l("",{cLetter:"z",autoColorDflt:!1,editTypeOverride:"calc"}))},27529:function(t,e,r){"use strict";var n=r(21081),i=r(90757),a=r(18670),o=r(53572);t.exports=function(t,e){var r=i(t,e),s=r[0].z;a(e,s);var l,u=e.contours,c=n.extractOpts(e);if("heatmap"===u.coloring&&c.auto&&!1===e.autocontour){var f=u.start,h=o(u),p=u.size||1,d=Math.floor((h-f)/p)+1;isFinite(p)||(p=1,d=1);var v=f-p/2;l=[v,v+d*p]}else l=s;return n.calc(t,e,{vals:l,cLetter:"z"}),r}},20083:function(t){"use strict";t.exports=function(t,e){var r,n=t[0],i=n.z;switch(e.type){case"levels":var a=Math.min(i[0][0],i[0][1]);for(r=0;r<t.length;r++){var o=t[r];o.prefixBoundary=!o.edgepaths.length&&(a>o.level||o.starts.length&&a===o.level)}break;case"constraint":if(n.prefixBoundary=!1,n.edgepaths.length)return;var s=n.x.length,l=n.y.length,u=-1/0,c=1/0;for(r=0;r<l;r++)c=Math.min(c,i[r][0]),c=Math.min(c,i[r][s-1]),u=Math.max(u,i[r][0]),u=Math.max(u,i[r][s-1]);for(r=1;r<s-1;r++)c=Math.min(c,i[0][r]),c=Math.min(c,i[l-1][r]),u=Math.max(u,i[0][r]),u=Math.max(u,i[l-1][r]);var f,h,p=e.value;switch(e._operation){case">":p>u&&(n.prefixBoundary=!0);break;case"<":(p<c||n.starts.length&&p===c)&&(n.prefixBoundary=!0);break;case"[]":f=Math.min(p[0],p[1]),((h=Math.max(p[0],p[1]))<c||f>u||n.starts.length&&h===c)&&(n.prefixBoundary=!0);break;case"][":f=Math.min(p[0],p[1]),h=Math.max(p[0],p[1]),f<c&&h>u&&(n.prefixBoundary=!0)}}}},90654:function(t,e,r){"use strict";var n=r(21081),i=r(86068),a=r(53572);t.exports={min:"zmin",max:"zmax",calc:function(t,e,r){var o=e.contours,s=e.line,l=o.size||1,u=o.coloring,c=i(e,{isColorbar:!0});if("heatmap"===u){var f=n.extractOpts(e);r._fillgradient=f.reversescale?n.flipScale(f.colorscale):f.colorscale,r._zrange=[f.min,f.max]}else"fill"===u&&(r._fillcolor=c);r._line={color:"lines"===u?c:s.color,width:!1!==o.showlines?s.width:0,dash:s.dash},r._levels={start:o.start,end:a(o),size:l}}}},36914:function(t){"use strict";t.exports={BOTTOMSTART:[1,9,13,104,713],TOPSTART:[4,6,7,104,713],LEFTSTART:[8,12,14,208,1114],RIGHTSTART:[2,3,11,208,1114],NEWDELTA:[null,[-1,0],[0,-1],[-1,0],[1,0],null,[0,-1],[-1,0],[0,1],[0,1],null,[0,1],[1,0],[1,0],[0,-1]],CHOOSESADDLE:{104:[4,1],208:[2,8],713:[7,13],1114:[11,14]},SADDLEREMAINDER:{1:4,2:8,4:1,7:13,8:2,11:14,13:7,14:11},LABELDISTANCE:2,LABELINCREASE:10,LABELMIN:3,LABELMAX:10,LABELOPTIMIZER:{EDGECOST:1,ANGLECOST:1,NEIGHBORCOST:5,SAMELEVELFACTOR:10,SAMELEVELDISTANCE:5,MAXCOST:100,INITIALSEARCHPOINTS:10,ITERATIONS:5}}},83179:function(t,e,r){"use strict";var n=r(92770),i=r(14523),a=r(7901),o=a.addOpacity,s=a.opacity,l=r(74808),u=l.CONSTRAINT_REDUCTION,c=l.COMPARISON_OPS2;t.exports=function(t,e,r,a,l,f){var h,p,d,v=e.contours,g=r("contours.operation");v._operation=u[g],function(t,e){var r;-1===c.indexOf(e.operation)?(t("contours.value",[0,1]),Array.isArray(e.value)?e.value.length>2?e.value=e.value.slice(2):0===e.length?e.value=[0,1]:e.length<2?(r=parseFloat(e.value[0]),e.value=[r,r+1]):e.value=[parseFloat(e.value[0]),parseFloat(e.value[1])]:n(e.value)&&(r=parseFloat(e.value),e.value=[r,r+1])):(t("contours.value",0),n(e.value)||(Array.isArray(e.value)?e.value=parseFloat(e.value[0]):e.value=0))}(r,v),"="===g?h=v.showlines=!0:(h=r("contours.showlines"),d=r("fillcolor",o((t.line||{}).color||l,.5))),h&&(p=r("line.color",d&&s(d)?o(e.fillcolor,1):l),r("line.width",2),r("line.dash")),r("line.smoothing"),i(r,a,p,f)}},64237:function(t,e,r){"use strict";var n=r(74808),i=r(92770);function a(t,e){var r,a=Array.isArray(e);function o(t){return i(t)?+t:null}return-1!==n.COMPARISON_OPS2.indexOf(t)?r=o(a?e[0]:e):-1!==n.INTERVAL_OPS.indexOf(t)?r=a?[o(e[0]),o(e[1])]:[o(e),o(e)]:-1!==n.SET_OPS.indexOf(t)&&(r=a?e.map(o):[o(e)]),r}function o(t){return function(e){e=a(t,e);var r=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]);return{start:r,end:n,size:n-r}}}function s(t){return function(e){return{start:e=a(t,e),end:1/0,size:1/0}}}t.exports={"[]":o("[]"),"][":o("]["),">":s(">"),"<":s("<"),"=":s("=")}},67217:function(t){"use strict";t.exports=function(t,e,r,n){var i=n("contours.start"),a=n("contours.end"),o=!1===i||!1===a,s=r("contours.size");!(o?e.autocontour=!0:r("autocontour",!1))&&s||r("ncontours")}},84857:function(t,e,r){"use strict";var n=r(71828);function i(t){return n.extendFlat({},t,{edgepaths:n.extendDeep([],t.edgepaths),paths:n.extendDeep([],t.paths),starts:n.extendDeep([],t.starts)})}t.exports=function(t,e){var r,a,o,s=function(t){return t.reverse()},l=function(t){return t};switch(e){case"=":case"<":return t;case">":for(1!==t.length&&n.warn("Contour data invalid for the specified inequality operation."),a=t[0],r=0;r<a.edgepaths.length;r++)a.edgepaths[r]=s(a.edgepaths[r]);for(r=0;r<a.paths.length;r++)a.paths[r]=s(a.paths[r]);for(r=0;r<a.starts.length;r++)a.starts[r]=s(a.starts[r]);return t;case"][":var u=s;s=l,l=u;case"[]":for(2!==t.length&&n.warn("Contour data invalid for the specified inequality range operation."),a=i(t[0]),o=i(t[1]),r=0;r<a.edgepaths.length;r++)a.edgepaths[r]=s(a.edgepaths[r]);for(r=0;r<a.paths.length;r++)a.paths[r]=s(a.paths[r]);for(r=0;r<a.starts.length;r++)a.starts[r]=s(a.starts[r]);for(;o.edgepaths.length;)a.edgepaths.push(l(o.edgepaths.shift()));for(;o.paths.length;)a.paths.push(l(o.paths.shift()));for(;o.starts.length;)a.starts.push(l(o.starts.shift()));return[a]}}},13031:function(t,e,r){"use strict";var n=r(71828),i=r(67684),a=r(73927),o=r(83179),s=r(67217),l=r(8724),u=r(58623),c=r(70600);t.exports=function(t,e,r,f){function h(r,i){return n.coerce(t,e,c,r,i)}if(i(t,e,h,f)){a(t,e,f,h),h("xhoverformat"),h("yhoverformat"),h("text"),h("hovertext"),h("hoverongaps"),h("hovertemplate");var p="constraint"===h("contours.type");h("connectgaps",n.isArray1D(e.z)),p?o(t,e,h,f,r):(s(t,e,h,(function(r){return n.coerce2(t,e,c,r)})),l(t,e,h,f)),e.contours&&"heatmap"===e.contours.coloring&&u(h,f)}else e.visible=!1}},87558:function(t,e,r){"use strict";var n=r(71828),i=r(64237),a=r(53572);t.exports=function(t,e,r){for(var o="constraint"===t.type?i[t._operation](t.value):t,s=o.size,l=[],u=a(o),c=r.trace._carpetTrace,f=c?{xaxis:c.aaxis,yaxis:c.baxis,x:r.a,y:r.b}:{xaxis:e.xaxis,yaxis:e.yaxis,x:r.x,y:r.y},h=o.start;h<u;h+=s)if(l.push(n.extendFlat({level:h,crossings:{},starts:[],edgepaths:[],paths:[],z:r.z,smoothing:r.trace.line.smoothing},f)),l.length>1e3){n.warn("Too many contours, clipping at 1000",t);break}return l}},53572:function(t){"use strict";t.exports=function(t){return t.end+t.size/1e6}},81696:function(t,e,r){"use strict";var n=r(71828),i=r(36914);function a(t,e,r,n){return Math.abs(t[0]-e[0])<r&&Math.abs(t[1]-e[1])<n}function o(t,e,r,o,l){var u,c=e.join(","),f=t.crossings[c],h=function(t,e,r){var n=0,a=0;return t>20&&e?208===t||1114===t?n=0===r[0]?1:-1:a=0===r[1]?1:-1:-1!==i.BOTTOMSTART.indexOf(t)?a=1:-1!==i.LEFTSTART.indexOf(t)?n=1:-1!==i.TOPSTART.indexOf(t)?a=-1:n=-1,[n,a]}(f,r,e),p=[s(t,e,[-h[0],-h[1]])],d=t.z.length,v=t.z[0].length,g=e.slice(),y=h.slice();for(u=0;u<1e4;u++){if(f>20?(f=i.CHOOSESADDLE[f][(h[0]||h[1])<0?0:1],t.crossings[c]=i.SADDLEREMAINDER[f]):delete t.crossings[c],!(h=i.NEWDELTA[f])){n.log("Found bad marching index:",f,e,t.level);break}p.push(s(t,e,h)),e[0]+=h[0],e[1]+=h[1],c=e.join(","),a(p[p.length-1],p[p.length-2],o,l)&&p.pop();var m=h[0]&&(e[0]<0||e[0]>v-2)||h[1]&&(e[1]<0||e[1]>d-2);if(e[0]===g[0]&&e[1]===g[1]&&h[0]===y[0]&&h[1]===y[1]||r&&m)break;f=t.crossings[c]}1e4===u&&n.log("Infinite loop in contour?");var x,b,_,w,T,k,A,M,S,E,L,C,P,O,I,D=a(p[0],p[p.length-1],o,l),z=0,R=.2*t.smoothing,F=[],B=0;for(u=1;u<p.length;u++)C=p[u],P=p[u-1],void 0,void 0,O=C[2]-P[2],I=C[3]-P[3],z+=A=Math.sqrt(O*O+I*I),F.push(A);var N=z/F.length*R;function j(t){return p[t%p.length]}for(u=p.length-2;u>=B;u--)if((x=F[u])<N){for(_=0,b=u-1;b>=B&&x+F[b]<N;b--)x+=F[b];if(D&&u===p.length-2)for(_=0;_<b&&x+F[_]<N;_++)x+=F[_];T=u-b+_+1,k=Math.floor((u+b+_+2)/2),w=D||u!==p.length-2?D||-1!==b?T%2?j(k):[(j(k)[0]+j(k+1)[0])/2,(j(k)[1]+j(k+1)[1])/2]:p[0]:p[p.length-1],p.splice(b+1,u-b+1,w),u=b+1,_&&(B=_),D&&(u===p.length-2?p[_]=p[p.length-1]:0===u&&(p[p.length-1]=p[0]))}for(p.splice(0,B),u=0;u<p.length;u++)p[u].length=2;if(!(p.length<2))if(D)p.pop(),t.paths.push(p);else{r||n.log("Unclosed interior contour?",t.level,g.join(","),p.join("L"));var U=!1;for(M=0;M<t.edgepaths.length;M++)if(E=t.edgepaths[M],!U&&a(E[0],p[p.length-1],o,l)){p.pop(),U=!0;var V=!1;for(S=0;S<t.edgepaths.length;S++)if(a((L=t.edgepaths[S])[L.length-1],p[0],o,l)){V=!0,p.shift(),t.edgepaths.splice(M,1),S===M?t.paths.push(p.concat(L)):(S>M&&S--,t.edgepaths[S]=L.concat(p,E));break}V||(t.edgepaths[M]=p.concat(E))}for(M=0;M<t.edgepaths.length&&!U;M++)a((E=t.edgepaths[M])[E.length-1],p[0],o,l)&&(p.shift(),t.edgepaths[M]=E.concat(p),U=!0);U||t.edgepaths.push(p)}}function s(t,e,r){var n=e[0]+Math.max(r[0],0),i=e[1]+Math.max(r[1],0),a=t.z[i][n],o=t.xaxis,s=t.yaxis;if(r[1]){var l=(t.level-a)/(t.z[i][n+1]-a),u=(1!==l?(1-l)*o.c2l(t.x[n]):0)+(0!==l?l*o.c2l(t.x[n+1]):0);return[o.c2p(o.l2c(u),!0),s.c2p(t.y[i],!0),n+l,i]}var c=(t.level-a)/(t.z[i+1][n]-a),f=(1!==c?(1-c)*s.c2l(t.y[i]):0)+(0!==c?c*s.c2l(t.y[i+1]):0);return[o.c2p(t.x[n],!0),s.c2p(s.l2c(f),!0),n,i+c]}t.exports=function(t,e,r){var i,a,s,l;for(e=e||.01,r=r||.01,a=0;a<t.length;a++){for(s=t[a],l=0;l<s.starts.length;l++)o(s,s.starts[l],"edge",e,r);for(i=0;Object.keys(s.crossings).length&&i<1e4;)i++,o(s,Object.keys(s.crossings)[0].split(",").map(Number),void 0,e,r);1e4===i&&n.log("Infinite loop in contour?")}}},52421:function(t,e,r){"use strict";var n=r(7901),i=r(46248);t.exports=function(t,e,r,a,o){o||(o={}),o.isContour=!0;var s=i(t,e,r,a,o);return s&&s.forEach((function(t){var e=t.trace;"constraint"===e.contours.type&&(e.fillcolor&&n.opacity(e.fillcolor)?t.color=n.addOpacity(e.fillcolor,1):e.contours.showlines&&n.opacity(e.line.color)&&(t.color=n.addOpacity(e.line.color,1)))})),s}},99442:function(t,e,r){"use strict";t.exports={attributes:r(70600),supplyDefaults:r(13031),calc:r(27529),plot:r(29854).plot,style:r(84426),colorbar:r(90654),hoverPoints:r(52421),moduleType:"trace",name:"contour",basePlotModule:r(93612),categories:["cartesian","svg","2dMap","contour","showLegend"],meta:{}}},14523:function(t,e,r){"use strict";var n=r(71828);t.exports=function(t,e,r,i){if(i||(i={}),t("contours.showlabels")){var a=e.font;n.coerceFont(t,"contours.labelfont",{family:a.family,size:a.size,color:r}),t("contours.labelformat")}!1!==i.hasHover&&t("zhoverformat")}},86068:function(t,e,r){"use strict";var n=r(39898),i=r(21081),a=r(53572);t.exports=function(t){var e=t.contours,r=e.start,o=a(e),s=e.size||1,l=Math.floor((o-r)/s)+1,u="lines"===e.coloring?0:1,c=i.extractOpts(t);isFinite(s)||(s=1,l=1);var f,h,p=c.reversescale?i.flipScale(c.colorscale):c.colorscale,d=p.length,v=new Array(d),g=new Array(d),y=c.min,m=c.max;if("heatmap"===e.coloring){for(h=0;h<d;h++)f=p[h],v[h]=f[0]*(m-y)+y,g[h]=f[1];var x=n.extent([y,m,e.start,e.start+s*(l-1)]),b=x[y<m?0:1],_=x[y<m?1:0];b!==y&&(v.splice(0,0,b),g.splice(0,0,g[0])),_!==m&&(v.push(_),g.push(g[g.length-1]))}else{var w=t._input&&"number"==typeof t._input.zmin&&"number"==typeof t._input.zmax;for(w&&(r<=y||o>=m)&&(r<=y&&(r=y),o>=m&&(o=m),l=Math.floor((o-r)/s)+1,u=0),h=0;h<d;h++)f=p[h],v[h]=(f[0]*(l+u-1)-u/2)*s+r,g[h]=f[1];(w||t.autocontour)&&(v[0]>y&&(v.unshift(y),g.unshift(g[0])),v[v.length-1]<m&&(v.push(m),g.push(g[g.length-1])))}return i.makeColorScaleFunc({domain:v,range:g},{noNumericCheck:!0})}},87678:function(t,e,r){"use strict";var n=r(36914);function i(t,e){var r=(e[0][0]>t?0:1)+(e[0][1]>t?0:2)+(e[1][1]>t?0:4)+(e[1][0]>t?0:8);return 5===r||10===r?t>(e[0][0]+e[0][1]+e[1][0]+e[1][1])/4?5===r?713:1114:5===r?104:208:15===r?0:r}t.exports=function(t){var e,r,a,o,s,l,u,c,f,h=t[0].z,p=h.length,d=h[0].length,v=2===p||2===d;for(r=0;r<p-1;r++)for(o=[],0===r&&(o=o.concat(n.BOTTOMSTART)),r===p-2&&(o=o.concat(n.TOPSTART)),e=0;e<d-1;e++)for(a=o.slice(),0===e&&(a=a.concat(n.LEFTSTART)),e===d-2&&(a=a.concat(n.RIGHTSTART)),s=e+","+r,l=[[h[r][e],h[r][e+1]],[h[r+1][e],h[r+1][e+1]]],f=0;f<t.length;f++)(u=i((c=t[f]).level,l))&&(c.crossings[s]=u,-1!==a.indexOf(u)&&(c.starts.push([e,r]),v&&-1!==a.indexOf(u,a.indexOf(u)+1)&&c.starts.push([e,r])))}},29854:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=r(91424),o=r(21081),s=r(63893),l=r(89298),u=r(21994),c=r(50347),f=r(87678),h=r(81696),p=r(87558),d=r(84857),v=r(20083),g=r(36914),y=g.LABELOPTIMIZER;function m(t,e){var r,n,o,s,l,u,c,f="",h=0,p=t.edgepaths.map((function(t,e){return e})),d=!0;function v(t){return Math.abs(t[1]-e[2][1])<.01}function g(t){return Math.abs(t[0]-e[0][0])<.01}function y(t){return Math.abs(t[0]-e[2][0])<.01}for(;p.length;){for(u=a.smoothopen(t.edgepaths[h],t.smoothing),f+=d?u:u.replace(/^M/,"L"),p.splice(p.indexOf(h),1),r=t.edgepaths[h][t.edgepaths[h].length-1],s=-1,o=0;o<4;o++){if(!r){i.log("Missing end?",h,t);break}for(c=r,Math.abs(c[1]-e[0][1])<.01&&!y(r)?n=e[1]:g(r)?n=e[0]:v(r)?n=e[3]:y(r)&&(n=e[2]),l=0;l<t.edgepaths.length;l++){var m=t.edgepaths[l][0];Math.abs(r[0]-n[0])<.01?Math.abs(r[0]-m[0])<.01&&(m[1]-r[1])*(n[1]-m[1])>=0&&(n=m,s=l):Math.abs(r[1]-n[1])<.01?Math.abs(r[1]-m[1])<.01&&(m[0]-r[0])*(n[0]-m[0])>=0&&(n=m,s=l):i.log("endpt to newendpt is not vert. or horz.",r,n,m)}if(r=n,s>=0)break;f+="L"+n}if(s===t.edgepaths.length){i.log("unclosed perimeter path");break}h=s,(d=-1===p.indexOf(h))&&(h=p[0],f+="Z")}for(h=0;h<t.paths.length;h++)f+=a.smoothclosed(t.paths[h],t.smoothing);return f}function x(t,e,r,n){var a=e.width/2,o=e.height/2,s=t.x,l=t.y,u=t.theta,c=Math.cos(u)*a,f=Math.sin(u)*a,h=(s>n.center?n.right-s:s-n.left)/(c+Math.abs(Math.sin(u)*o)),p=(l>n.middle?n.bottom-l:l-n.top)/(Math.abs(f)+Math.cos(u)*o);if(h<1||p<1)return 1/0;var d=y.EDGECOST*(1/(h-1)+1/(p-1));d+=y.ANGLECOST*u*u;for(var v=s-c,g=l-f,m=s+c,x=l+f,b=0;b<r.length;b++){var _=r[b],w=Math.cos(_.theta)*_.width/2,T=Math.sin(_.theta)*_.width/2,k=2*i.segmentDistance(v,g,m,x,_.x-w,_.y-T,_.x+w,_.y+T)/(e.height+_.height),A=_.level===e.level,M=A?y.SAMELEVELDISTANCE:1;if(k<=M)return 1/0;d+=y.NEIGHBORCOST*(A?y.SAMELEVELFACTOR:1)/(k-M)}return d}function b(t){var e,r,n=t.trace._emptypoints,i=[],a=t.z.length,o=t.z[0].length,s=[];for(e=0;e<o;e++)s.push(1);for(e=0;e<a;e++)i.push(s.slice());for(e=0;e<n.length;e++)i[(r=n[e])[0]][r[1]]=0;return t.zmask=i,i}e.plot=function(t,r,o,s){var l=r.xaxis,u=r.yaxis;i.makeTraceGroups(s,o,"contour").each((function(o){var s=n.select(this),y=o[0],x=y.trace,_=y.x,w=y.y,T=x.contours,k=p(T,r,y),A=i.ensureSingle(s,"g","heatmapcoloring"),M=[];"heatmap"===T.coloring&&(M=[o]),c(t,r,M,A),f(k),h(k);var S=l.c2p(_[0],!0),E=l.c2p(_[_.length-1],!0),L=u.c2p(w[0],!0),C=u.c2p(w[w.length-1],!0),P=[[S,C],[E,C],[E,L],[S,L]],O=k;"constraint"===T.type&&(O=d(k,T._operation)),function(t,e,r){var n=i.ensureSingle(t,"g","contourbg").selectAll("path").data("fill"===r.coloring?[0]:[]);n.enter().append("path"),n.exit().remove(),n.attr("d","M"+e.join("L")+"Z").style("stroke","none")}(s,P,T),function(t,e,r,a){var o="fill"===a.coloring||"constraint"===a.type&&"="!==a._operation,s="M"+r.join("L")+"Z";o&&v(e,a);var l=i.ensureSingle(t,"g","contourfill").selectAll("path").data(o?e:[]);l.enter().append("path"),l.exit().remove(),l.each((function(t){var e=(t.prefixBoundary?s:"")+m(t,r);e?n.select(this).attr("d",e).style("stroke","none"):n.select(this).remove()}))}(s,O,P,T),function(t,r,o,s,l){var u=o._context.staticPlot,c=i.ensureSingle(t,"g","contourlines"),f=!1!==l.showlines,h=l.showlabels,p=f&&h,d=e.createLines(c,f||h,r,u),v=e.createLineClip(c,p,o,s.trace.uid),y=t.selectAll("g.contourlabels").data(h?[0]:[]);if(y.exit().remove(),y.enter().append("g").classed("contourlabels",!0),h){var m=[],x=[];i.clearLocationCache();var b=e.labelFormatter(o,s),_=a.tester.append("text").attr("data-notex",1).call(a.font,l.labelfont),w=r[0].xaxis,T=r[0].yaxis,k=w._length,A=T._length,M=w.range,S=T.range,E=i.aggNums(Math.min,null,s.x),L=i.aggNums(Math.max,null,s.x),C=i.aggNums(Math.min,null,s.y),P=i.aggNums(Math.max,null,s.y),O=Math.max(w.c2p(E,!0),0),I=Math.min(w.c2p(L,!0),k),D=Math.max(T.c2p(P,!0),0),z=Math.min(T.c2p(C,!0),A),R={};M[0]<M[1]?(R.left=O,R.right=I):(R.left=I,R.right=O),S[0]<S[1]?(R.top=D,R.bottom=z):(R.top=z,R.bottom=D),R.middle=(R.top+R.bottom)/2,R.center=(R.left+R.right)/2,m.push([[R.left,R.top],[R.right,R.top],[R.right,R.bottom],[R.left,R.bottom]]);var F=Math.sqrt(k*k+A*A),B=g.LABELDISTANCE*F/Math.max(1,r.length/g.LABELINCREASE);d.each((function(t){var r=e.calcTextOpts(t.level,b,_,o);n.select(this).selectAll("path").each((function(){var t=i.getVisibleSegment(this,R,r.height/2);if(t&&!(t.len<(r.width+r.height)*g.LABELMIN))for(var n=Math.min(Math.ceil(t.len/B),g.LABELMAX),a=0;a<n;a++){var o=e.findBestTextLocation(this,t,r,x,R);if(!o)break;e.addLabelData(o,r,x,m)}}))})),_.remove(),e.drawLabels(y,x,o,v,p?m:null)}h&&!f&&d.remove()}(s,k,t,y,T),function(t,e,r,n,o){var s=n.trace,l=r._fullLayout._clips,u="clip"+s.uid,c=l.selectAll("#"+u).data(s.connectgaps?[]:[0]);if(c.enter().append("clipPath").classed("contourclip",!0).attr("id",u),c.exit().remove(),!1===s.connectgaps){var p={level:.9,crossings:{},starts:[],edgepaths:[],paths:[],xaxis:e.xaxis,yaxis:e.yaxis,x:n.x,y:n.y,z:b(n),smoothing:0};f([p]),h([p]),v([p],{type:"levels"}),i.ensureSingle(c,"path","").attr("d",(p.prefixBoundary?"M"+o.join("L")+"Z":"")+m(p,o))}else u=null;a.setClipUrl(t,u,r)}(s,r,t,y,P)}))},e.createLines=function(t,e,r,n){var i=r[0].smoothing,o=t.selectAll("g.contourlevel").data(e?r:[]);if(o.exit().remove(),o.enter().append("g").classed("contourlevel",!0),e){var s=o.selectAll("path.openline").data((function(t){return t.pedgepaths||t.edgepaths}));s.exit().remove(),s.enter().append("path").classed("openline",!0),s.attr("d",(function(t){return a.smoothopen(t,i)})).style("stroke-miterlimit",1).style("vector-effect",n?"none":"non-scaling-stroke");var l=o.selectAll("path.closedline").data((function(t){return t.ppaths||t.paths}));l.exit().remove(),l.enter().append("path").classed("closedline",!0),l.attr("d",(function(t){return a.smoothclosed(t,i)})).style("stroke-miterlimit",1).style("vector-effect",n?"none":"non-scaling-stroke")}return o},e.createLineClip=function(t,e,r,n){var i=e?"clipline"+n:null,o=r._fullLayout._clips.selectAll("#"+i).data(e?[0]:[]);return o.exit().remove(),o.enter().append("clipPath").classed("contourlineclip",!0).attr("id",i),a.setClipUrl(t,i,r),o},e.labelFormatter=function(t,e){var r=t._fullLayout,n=e.trace,i=n.contours,a={type:"linear",_id:"ycontour",showexponent:"all",exponentformat:"B"};if(i.labelformat)a.tickformat=i.labelformat,u(a,r);else{var s=o.extractOpts(n);if(s&&s.colorbar&&s.colorbar._axis)a=s.colorbar._axis;else{if("constraint"===i.type){var c=i.value;Array.isArray(c)?a.range=[c[0],c[c.length-1]]:a.range=[c,c]}else a.range=[i.start,i.end],a.nticks=(i.end-i.start)/i.size;a.range[0]===a.range[1]&&(a.range[1]+=a.range[0]||1),a.nticks||(a.nticks=1e3),u(a,r),l.prepTicks(a),a._tmin=null,a._tmax=null}}return function(t){return l.tickText(a,t).text}},e.calcTextOpts=function(t,e,r,n){var i=e(t);r.text(i).call(s.convertToTspans,n);var o=r.node(),l=a.bBox(o,!0);return{text:i,width:l.width,height:l.height,fontSize:+o.style["font-size"].replace("px",""),level:t,dy:(l.top+l.bottom)/2}},e.findBestTextLocation=function(t,e,r,n,a){var o,s,l,u,c,f=r.width;e.isClosed?(s=e.len/y.INITIALSEARCHPOINTS,o=e.min+s/2,l=e.max):(s=(e.len-f)/(y.INITIALSEARCHPOINTS+1),o=e.min+s+f/2,l=e.max-(s+f)/2);for(var h=1/0,p=0;p<y.ITERATIONS;p++){for(var d=o;d<l;d+=s){var v=i.getTextLocation(t,e.total,d,f),g=x(v,r,n,a);g<h&&(h=g,c=v,u=d)}if(h>2*y.MAXCOST)break;p&&(s/=2),l=(o=u-s/2)+1.5*s}if(h<=y.MAXCOST)return c},e.addLabelData=function(t,e,r,n){var i=e.fontSize,a=e.width+i/3,o=Math.max(0,e.height-i/3),s=t.x,l=t.y,u=t.theta,c=Math.sin(u),f=Math.cos(u),h=function(t,e){return[s+t*f-e*c,l+t*c+e*f]},p=[h(-a/2,-o/2),h(-a/2,o/2),h(a/2,o/2),h(a/2,-o/2)];r.push({text:e.text,x:s,y:l,dy:e.dy,theta:u,level:e.level,width:a,height:o}),n.push(p)},e.drawLabels=function(t,e,r,a,o){var l=t.selectAll("text").data(e,(function(t){return t.text+","+t.x+","+t.y+","+t.theta}));if(l.exit().remove(),l.enter().append("text").attr({"data-notex":1,"text-anchor":"middle"}).each((function(t){var e=t.x+Math.sin(t.theta)*t.dy,i=t.y-Math.cos(t.theta)*t.dy;n.select(this).text(t.text).attr({x:e,y:i,transform:"rotate("+180*t.theta/Math.PI+" "+e+" "+i+")"}).call(s.convertToTspans,r)})),o){for(var u="",c=0;c<o.length;c++)u+="M"+o[c].join("L")+"Z";i.ensureSingle(a,"path","").attr("d",u)}}},18670:function(t,e,r){"use strict";var n=r(89298),i=r(71828);function a(t,e,r){var i={type:"linear",range:[t,e]};return n.autoTicks(i,(e-t)/(r||15)),i}t.exports=function(t,e){var r=t.contours;if(t.autocontour){var o=t.zmin,s=t.zmax;(t.zauto||void 0===o)&&(o=i.aggNums(Math.min,null,e)),(t.zauto||void 0===s)&&(s=i.aggNums(Math.max,null,e));var l=a(o,s,t.ncontours);r.size=l.dtick,r.start=n.tickFirst(l),l.range.reverse(),r.end=n.tickFirst(l),r.start===o&&(r.start+=r.size),r.end===s&&(r.end-=r.size),r.start>r.end&&(r.start=r.end=(r.start+r.end)/2),t._input.contours||(t._input.contours={}),i.extendFlat(t._input.contours,{start:r.start,end:r.end,size:r.size}),t._input.autocontour=!0}else if("constraint"!==r.type){var u,c=r.start,f=r.end,h=t._input.contours;c>f&&(r.start=h.start=f,f=r.end=h.end=c,c=r.start),r.size>0||(u=c===f?1:a(c,f,t.ncontours).dtick,h.size=r.size=u)}}},84426:function(t,e,r){"use strict";var n=r(39898),i=r(91424),a=r(70035),o=r(86068);t.exports=function(t){var e=n.select(t).selectAll("g.contour");e.style("opacity",(function(t){return t[0].trace.opacity})),e.each((function(t){var e=n.select(this),r=t[0].trace,a=r.contours,s=r.line,l=a.size||1,u=a.start,c="constraint"===a.type,f=!c&&"lines"===a.coloring,h=!c&&"fill"===a.coloring,p=f||h?o(r):null;e.selectAll("g.contourlevel").each((function(t){n.select(this).selectAll("path").call(i.lineGroupStyle,s.width,f?p(t.level):s.color,s.dash)}));var d=a.labelfont;if(e.selectAll("g.contourlabels text").each((function(t){i.font(n.select(this),{family:d.family,size:d.size,color:d.color||(f?p(t.level):s.color)})})),c)e.selectAll("g.contourfill path").style("fill",r.fillcolor);else if(h){var v;e.selectAll("g.contourfill path").style("fill",(function(t){return void 0===v&&(v=t.level),p(t.level+.5*l)})),void 0===v&&(v=u),e.selectAll("g.contourbg path").style("fill",p(v-.5*l))}})),a(t)}},8724:function(t,e,r){"use strict";var n=r(1586),i=r(14523);t.exports=function(t,e,r,a,o){var s,l=r("contours.coloring"),u="";"fill"===l&&(s=r("contours.showlines")),!1!==s&&("lines"!==l&&(u=r("line.color","#000")),r("line.width",.5),r("line.dash")),"none"!==l&&(!0!==t.showlegend&&(e.showlegend=!1),e._dfltShowLegend=!1,n(t,e,a,r,{prefix:"",cLetter:"z"})),r("line.smoothing"),i(r,a,u,o)}},88085:function(t,e,r){"use strict";var n=r(21606),i=r(70600),a=r(50693),o=r(1426).extendFlat,s=i.contours;t.exports=o({carpet:{valType:"string",editType:"calc"},z:n.z,a:n.x,a0:n.x0,da:n.dx,b:n.y,b0:n.y0,db:n.dy,text:n.text,hovertext:n.hovertext,transpose:n.transpose,atype:n.xtype,btype:n.ytype,fillcolor:i.fillcolor,autocontour:i.autocontour,ncontours:i.ncontours,contours:{type:s.type,start:s.start,end:s.end,size:s.size,coloring:{valType:"enumerated",values:["fill","lines","none"],dflt:"fill",editType:"calc"},showlines:s.showlines,showlabels:s.showlabels,labelfont:s.labelfont,labelformat:s.labelformat,operation:s.operation,value:s.value,editType:"calc",impliedEdits:{autocontour:!1}},line:{color:i.line.color,width:i.line.width,dash:i.line.dash,smoothing:i.line.smoothing,editType:"plot"},transforms:void 0},a("",{cLetter:"z",autoColorDflt:!1}))},59885:function(t,e,r){"use strict";var n=r(78803),i=r(71828),a=r(68296),o=r(4742),s=r(824),l=r(43907),u=r(70769),c=r(75005),f=r(22882),h=r(18670);t.exports=function(t,e){var r=e._carpetTrace=f(t,e);if(r&&r.visible&&"legendonly"!==r.visible){if(!e.a||!e.b){var p=t.data[r.index],d=t.data[e.index];d.a||(d.a=p.a),d.b||(d.b=p.b),c(d,e,e._defaultColor,t._fullLayout)}var v=function(t,e){var r,c,f,h,p,d,v,g=e._carpetTrace,y=g.aaxis,m=g.baxis;y._minDtick=0,m._minDtick=0,i.isArray1D(e.z)&&a(e,y,m,"a","b",["z"]),r=e._a=e._a||e.a,h=e._b=e._b||e.b,r=r?y.makeCalcdata(e,"_a"):[],h=h?m.makeCalcdata(e,"_b"):[],c=e.a0||0,f=e.da||1,p=e.b0||0,d=e.db||1,v=e._z=o(e._z||e.z,e.transpose),e._emptypoints=l(v),s(v,e._emptypoints);var x=i.maxRowLength(v),b="scaled"===e.xtype?"":r,_=u(e,b,c,f,x,y),w="scaled"===e.ytype?"":h,T={a:_,b:u(e,w,p,d,v.length,m),z:v};return"levels"===e.contours.type&&"none"!==e.contours.coloring&&n(t,e,{vals:v,containerStr:"",cLetter:"z"}),[T]}(t,e);return h(e,e._z),v}}},75005:function(t,e,r){"use strict";var n=r(71828),i=r(67684),a=r(88085),o=r(83179),s=r(67217),l=r(8724);t.exports=function(t,e,r,u){function c(r,i){return n.coerce(t,e,a,r,i)}if(c("carpet"),t.a&&t.b){if(!i(t,e,c,u,"a","b"))return void(e.visible=!1);c("text"),"constraint"===c("contours.type")?o(t,e,c,u,r,{hasHover:!1}):(s(t,e,c,(function(r){return n.coerce2(t,e,a,r)})),l(t,e,c,u,{hasHover:!1}))}else e._defaultColor=r,e._length=null}},93740:function(t,e,r){"use strict";t.exports={attributes:r(88085),supplyDefaults:r(75005),colorbar:r(90654),calc:r(59885),plot:r(51048),style:r(84426),moduleType:"trace",name:"contourcarpet",basePlotModule:r(93612),categories:["cartesian","svg","carpet","contour","symbols","showLegend","hasLines","carpetDependent","noHover","noSortingByValue"],meta:{}}},51048:function(t,e,r){"use strict";var n=r(39898),i=r(27669),a=r(67961),o=r(91424),s=r(71828),l=r(87678),u=r(81696),c=r(29854),f=r(36914),h=r(84857),p=r(87558),d=r(20083),v=r(22882),g=r(4536);function y(t,e,r){var n=t.getPointAtLength(e),i=t.getPointAtLength(r),a=i.x-n.x,o=i.y-n.y,s=Math.sqrt(a*a+o*o);return[a/s,o/s]}function m(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]);return[t[0]/e,t[1]/e]}function x(t,e){var r=Math.abs(t[0]*e[0]+t[1]*e[1]);return Math.sqrt(1-r*r)/r}t.exports=function(t,e,r,b){var _=e.xaxis,w=e.yaxis;s.makeTraceGroups(b,r,"contour").each((function(r){var b=n.select(this),T=r[0],k=T.trace,A=k._carpetTrace=v(t,k),M=t.calcdata[A.index][0];if(A.visible&&"legendonly"!==A.visible){var S=T.a,E=T.b,L=k.contours,C=p(L,e,T),P="constraint"===L.type,O=L._operation,I=P?"="===O?"lines":"fill":L.coloring,D=[[S[0],E[E.length-1]],[S[S.length-1],E[E.length-1]],[S[S.length-1],E[0]],[S[0],E[0]]];l(C);var z=1e-8*(S[S.length-1]-S[0]),R=1e-8*(E[E.length-1]-E[0]);u(C,z,R);var F,B,N,j,U=C;"constraint"===L.type&&(U=h(C,O)),function(t,e){var r,n,i,a,o,s,l,u,c;for(r=0;r<t.length;r++){for(o=(a=t[r]).pedgepaths=[],s=a.ppaths=[],n=0;n<a.edgepaths.length;n++){for(c=a.edgepaths[n],l=[],i=0;i<c.length;i++)l[i]=e(c[i]);o.push(l)}for(n=0;n<a.paths.length;n++){for(c=a.paths[n],u=[],i=0;i<c.length;i++)u[i]=e(c[i]);s.push(u)}}}(C,q);var V=[];for(j=M.clipsegments.length-1;j>=0;j--)F=M.clipsegments[j],B=i([],F.x,_.c2p),N=i([],F.y,w.c2p),B.reverse(),N.reverse(),V.push(a(B,N,F.bicubic));var H="M"+V.join("L")+"Z";!function(t,e,r,n,o,l){var u,c,f,h,p=s.ensureSingle(t,"g","contourbg").selectAll("path").data("fill"!==l||o?[]:[0]);p.enter().append("path"),p.exit().remove();var d=[];for(h=0;h<e.length;h++)u=e[h],c=i([],u.x,r.c2p),f=i([],u.y,n.c2p),d.push(a(c,f,u.bicubic));p.attr("d","M"+d.join("L")+"Z").style("stroke","none")}(b,M.clipsegments,_,w,P,I),function(t,e,r,i,a,l,u,c,f,h,p){var v="fill"===h;v&&d(a,t.contours);var y=s.ensureSingle(e,"g","contourfill").selectAll("path").data(v?a:[]);y.enter().append("path"),y.exit().remove(),y.each((function(t){var e=(t.prefixBoundary?p:"")+function(t,e,r,n,i,a,l,u){var c,f,h,p,d,v,y,m="",x=e.edgepaths.map((function(t,e){return e})),b=!0,_=1e-4*Math.abs(r[0][0]-r[2][0]),w=1e-4*Math.abs(r[0][1]-r[2][1]);function T(t){return Math.abs(t[1]-r[0][1])<w}function k(t){return Math.abs(t[1]-r[2][1])<w}function A(t){return Math.abs(t[0]-r[0][0])<_}function M(t){return Math.abs(t[0]-r[2][0])<_}function S(t,e){var r,n,o,s,c="";for(T(t)&&!M(t)||k(t)&&!A(t)?(s=i.aaxis,o=g(i,a,[t[0],e[0]],.5*(t[1]+e[1]))):(s=i.baxis,o=g(i,a,.5*(t[0]+e[0]),[t[1],e[1]])),r=1;r<o.length;r++)for(c+=s.smoothing?"C":"L",n=0;n<o[r].length;n++){var f=o[r][n];c+=[l.c2p(f[0]),u.c2p(f[1])]+" "}return c}for(c=0,f=null;x.length;){var E=e.edgepaths[c][0];for(f&&(m+=S(f,E)),y=o.smoothopen(e.edgepaths[c].map(n),e.smoothing),m+=b?y:y.replace(/^M/,"L"),x.splice(x.indexOf(c),1),f=e.edgepaths[c][e.edgepaths[c].length-1],d=-1,p=0;p<4;p++){if(!f){s.log("Missing end?",c,e);break}for(T(f)&&!M(f)?h=r[1]:A(f)?h=r[0]:k(f)?h=r[3]:M(f)&&(h=r[2]),v=0;v<e.edgepaths.length;v++){var L=e.edgepaths[v][0];Math.abs(f[0]-h[0])<_?Math.abs(f[0]-L[0])<_&&(L[1]-f[1])*(h[1]-L[1])>=0&&(h=L,d=v):Math.abs(f[1]-h[1])<w?Math.abs(f[1]-L[1])<w&&(L[0]-f[0])*(h[0]-L[0])>=0&&(h=L,d=v):s.log("endpt to newendpt is not vert. or horz.",f,h,L)}if(d>=0)break;m+=S(f,h),f=h}if(d===e.edgepaths.length){s.log("unclosed perimeter path");break}c=d,(b=-1===x.indexOf(c))&&(c=x[0],m+=S(f,h)+"Z",f=null)}for(c=0;c<e.paths.length;c++)m+=o.smoothclosed(e.paths[c].map(n),e.smoothing);return m}(0,t,l,u,c,f,r,i);e?n.select(this).attr("d",e).style("stroke","none"):n.select(this).remove()}))}(k,b,_,w,U,D,q,A,M,I,H),function(t,e,r,i,a,l,u){var h=r._context.staticPlot,p=s.ensureSingle(t,"g","contourlines"),d=!1!==a.showlines,v=a.showlabels,g=d&&v,b=c.createLines(p,d||v,e,h),_=c.createLineClip(p,g,r,i.trace.uid),w=t.selectAll("g.contourlabels").data(v?[0]:[]);if(w.exit().remove(),w.enter().append("g").classed("contourlabels",!0),v){var T=l.xaxis,k=l.yaxis,A=T._length,M=k._length,S=[[[0,0],[A,0],[A,M],[0,M]]],E=[];s.clearLocationCache();var L=c.labelFormatter(r,i),C=o.tester.append("text").attr("data-notex",1).call(o.font,a.labelfont),P={left:0,right:A,center:A/2,top:0,bottom:M,middle:M/2},O=Math.sqrt(A*A+M*M),I=f.LABELDISTANCE*O/Math.max(1,e.length/f.LABELINCREASE);b.each((function(t){var e=c.calcTextOpts(t.level,L,C,r);n.select(this).selectAll("path").each((function(r){var n=this,i=s.getVisibleSegment(n,P,e.height/2);if(i&&(function(t,e,r,n,i,a){for(var o,s=0;s<r.pedgepaths.length;s++)e===r.pedgepaths[s]&&(o=r.edgepaths[s]);if(o){var l=i.a[0],u=i.a[i.a.length-1],c=i.b[0],f=i.b[i.b.length-1],h=y(t,0,1),p=y(t,n.total,n.total-1),d=g(o[0],h),v=n.total-g(o[o.length-1],p);n.min<d&&(n.min=d),n.max>v&&(n.max=v),n.len=n.max-n.min}function g(t,e){var r,n=0,o=.1;return(Math.abs(t[0]-l)<o||Math.abs(t[0]-u)<o)&&(r=m(i.dxydb_rough(t[0],t[1],o)),n=Math.max(n,a*x(e,r)/2)),(Math.abs(t[1]-c)<o||Math.abs(t[1]-f)<o)&&(r=m(i.dxyda_rough(t[0],t[1],o)),n=Math.max(n,a*x(e,r)/2)),n}}(n,r,t,i,u,e.height),!(i.len<(e.width+e.height)*f.LABELMIN)))for(var a=Math.min(Math.ceil(i.len/I),f.LABELMAX),o=0;o<a;o++){var l=c.findBestTextLocation(n,i,e,E,P);if(!l)break;c.addLabelData(l,e,E,S)}}))})),C.remove(),c.drawLabels(w,E,r,_,g?S:null)}v&&!d&&b.remove()}(b,C,t,T,L,e,A),o.setClipUrl(b,A._clipPathId,t)}function q(t){var e=A.ab2xy(t[0],t[1],!0);return[_.c2p(e[0]),w.c2p(e[1])]}}))}},64096:function(t,e,r){"use strict";var n=r(50693),i=r(5386).fF,a=r(9012),o=r(99181),s=r(1426).extendFlat;t.exports=s({lon:o.lon,lat:o.lat,z:{valType:"data_array",editType:"calc"},radius:{valType:"number",editType:"plot",arrayOk:!0,min:1,dflt:30},below:{valType:"string",editType:"plot"},text:o.text,hovertext:o.hovertext,hoverinfo:s({},a.hoverinfo,{flags:["lon","lat","z","text","name"]}),hovertemplate:i(),showlegend:s({},a.showlegend,{dflt:!1})},n("",{cLetter:"z",editTypeOverride:"calc"}))},85070:function(t,e,r){"use strict";var n=r(92770),i=r(71828).isArrayOrTypedArray,a=r(50606).BADNUM,o=r(78803),s=r(71828)._;t.exports=function(t,e){for(var r=e._length,l=new Array(r),u=e.z,c=i(u)&&u.length,f=0;f<r;f++){var h=l[f]={},p=e.lon[f],d=e.lat[f];if(h.lonlat=n(p)&&n(d)?[+p,+d]:[a,a],c){var v=u[f];h.z=n(v)?v:a}}return o(t,e,{vals:c?u:[0,1],containerStr:"",cLetter:"z"}),r&&(l[0].t={labels:{lat:s(t,"lat:")+" ",lon:s(t,"lon:")+" "}}),l}},52414:function(t,e,r){"use strict";var n=r(92770),i=r(71828),a=r(7901),o=r(21081),s=r(50606).BADNUM,l=r(18214).makeBlank;t.exports=function(t){var e=t[0].trace,r=!0===e.visible&&0!==e._length,u=e._opts={heatmap:{layout:{visibility:"none"},paint:{}},geojson:l()};if(!r)return u;var c,f=[],h=e.z,p=e.radius,d=i.isArrayOrTypedArray(h)&&h.length,v=i.isArrayOrTypedArray(p);for(c=0;c<t.length;c++){var g=t[c],y=g.lonlat;if(y[0]!==s){var m={};if(d){var x=g.z;m.z=x!==s?x:0}v&&(m.r=n(p[c])&&p[c]>0?+p[c]:0),f.push({type:"Feature",geometry:{type:"Point",coordinates:y},properties:m})}}var b=o.extractOpts(e),_=b.reversescale?o.flipScale(b.colorscale):b.colorscale,w=_[0][1],T=["interpolate",["linear"],["heatmap-density"],0,a.opacity(w)<1?w:a.addOpacity(w,0)];for(c=1;c<_.length;c++)T.push(_[c][0],_[c][1]);var k=["interpolate",["linear"],["get","z"],b.min,0,b.max,1];return i.extendFlat(u.heatmap.paint,{"heatmap-weight":d?k:1/(b.max-b.min),"heatmap-color":T,"heatmap-radius":v?{type:"identity",property:"r"}:e.radius,"heatmap-opacity":e.opacity}),u.geojson={type:"FeatureCollection",features:f},u.heatmap.layout.visibility="visible",u}},79429:function(t,e,r){"use strict";var n=r(71828),i=r(1586),a=r(64096);t.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s("lon")||[],u=s("lat")||[],c=Math.min(l.length,u.length);c?(e._length=c,s("z"),s("radius"),s("below"),s("text"),s("hovertext"),s("hovertemplate"),i(t,e,o,s,{prefix:"",cLetter:"z"})):e.visible=!1}},62474:function(t){"use strict";t.exports=function(t,e){return t.lon=e.lon,t.lat=e.lat,t.z=e.z,t}},84684:function(t,e,r){"use strict";var n=r(89298),i=r(28178).hoverPoints,a=r(28178).getExtraText;t.exports=function(t,e,r){var o=i(t,e,r);if(o){var s=o[0],l=s.cd,u=l[0].trace,c=l[s.index];if(delete s.color,"z"in c){var f=s.subplot.mockAxis;s.z=c.z,s.zLabel=n.tickText(f,f.c2l(c.z),"hover").text}return s.extraText=a(u,c,l[0].t.labels),[s]}}},93814:function(t,e,r){"use strict";t.exports={attributes:r(64096),supplyDefaults:r(79429),colorbar:r(61243),formatLabels:r(15636),calc:r(85070),plot:r(7336),hoverPoints:r(84684),eventData:r(62474),getBelow:function(t,e){for(var r=e.getMapLayers(),n=0;n<r.length;n++){var i=r[n],a=i.id;if("symbol"===i.type&&"string"==typeof a&&-1===a.indexOf("plotly-"))return a}},moduleType:"trace",name:"densitymapbox",basePlotModule:r(50101),categories:["mapbox","gl","showLegend"],meta:{hr_name:"density_mapbox"}}},7336:function(t,e,r){"use strict";var n=r(52414),i=r(77734).traceLayerPrefix;function a(t,e){this.type="densitymapbox",this.subplot=t,this.uid=e,this.sourceId="source-"+e,this.layerList=[["heatmap",i+e+"-heatmap"]],this.below=null}var o=a.prototype;o.update=function(t){var e=this.subplot,r=this.layerList,i=n(t),a=e.belowLookup["trace-"+this.uid];e.map.getSource(this.sourceId).setData(i.geojson),a!==this.below&&(this._removeLayers(),this._addLayers(i,a),this.below=a);for(var o=0;o<r.length;o++){var s=r[o],l=s[0],u=s[1],c=i[l];e.setOptions(u,"setLayoutProperty",c.layout),"visible"===c.layout.visibility&&e.setOptions(u,"setPaintProperty",c.paint)}},o._addLayers=function(t,e){for(var r=this.subplot,n=this.layerList,i=this.sourceId,a=0;a<n.length;a++){var o=n[a],s=o[0],l=t[s];r.addLayer({type:s,id:o[1],source:i,layout:l.layout,paint:l.paint},e)}},o._removeLayers=function(){for(var t=this.subplot.map,e=this.layerList,r=e.length-1;r>=0;r--)t.removeLayer(e[r][1])},o.dispose=function(){var t=this.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},t.exports=function(t,e){var r=e[0].trace,i=new a(t,r.uid),o=i.sourceId,s=n(e),l=i.below=t.belowLookup["trace-"+r.uid];return t.map.addSource(o,{type:"geojson",data:s.geojson}),i._addLayers(s,l),i}},49789:function(t,e,r){"use strict";var n=r(71828);t.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,"tx"),n.mergeArray(e.hovertext,t,"htx");var i=e.marker;if(i){n.mergeArray(i.opacity,t,"mo"),n.mergeArray(i.color,t,"mc");var a=i.line;a&&(n.mergeArray(a.color,t,"mlc"),n.mergeArrayCastPositive(a.width,t,"mlw"))}}},1285:function(t,e,r){"use strict";var n,i=r(1486),a=r(82196).line,o=r(9012),s=r(12663).axisHoverFormat,l=r(5386).fF,u=r(5386).si,c=r(18517),f=r(1426).extendFlat,h=r(7901);t.exports={x:i.x,x0:i.x0,dx:i.dx,y:i.y,y0:i.y0,dy:i.dy,xperiod:i.xperiod,yperiod:i.yperiod,xperiod0:i.xperiod0,yperiod0:i.yperiod0,xperiodalignment:i.xperiodalignment,yperiodalignment:i.yperiodalignment,xhoverformat:s("x"),yhoverformat:s("y"),hovertext:i.hovertext,hovertemplate:l({},{keys:c.eventDataKeys}),hoverinfo:f({},o.hoverinfo,{flags:["name","x","y","text","percent initial","percent previous","percent total"]}),textinfo:{valType:"flaglist",flags:["label","text","percent initial","percent previous","percent total","value"],extras:["none"],editType:"plot",arrayOk:!1},texttemplate:u({editType:"plot"},{keys:c.eventDataKeys.concat(["label","value"])}),text:i.text,textposition:i.textposition,insidetextanchor:f({},i.insidetextanchor,{dflt:"middle"}),textangle:f({},i.textangle,{dflt:0}),textfont:i.textfont,insidetextfont:i.insidetextfont,outsidetextfont:i.outsidetextfont,constraintext:i.constraintext,cliponaxis:i.cliponaxis,orientation:f({},i.orientation,{}),offset:f({},i.offset,{arrayOk:!1}),width:f({},i.width,{arrayOk:!1}),marker:(n=f({},i.marker),delete n.pattern,n),connector:{fillcolor:{valType:"color",editType:"style"},line:{color:f({},a.color,{dflt:h.defaultLine}),width:f({},a.width,{dflt:0,editType:"plot"}),dash:a.dash,editType:"style"},visible:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},offsetgroup:i.offsetgroup,alignmentgroup:i.alignmentgroup}},9532:function(t,e,r){"use strict";var n=r(89298),i=r(42973),a=r(49789),o=r(66279),s=r(50606).BADNUM;function l(t){return t===s?0:t}t.exports=function(t,e){var r,u,c,f,h,p,d,v,g=n.getFromId(t,e.xaxis||"x"),y=n.getFromId(t,e.yaxis||"y");"h"===e.orientation?(r=g.makeCalcdata(e,"x"),c=y.makeCalcdata(e,"y"),f=i(e,y,"y",c),h=!!e.yperiodalignment,p="y"):(r=y.makeCalcdata(e,"y"),c=g.makeCalcdata(e,"x"),f=i(e,g,"x",c),h=!!e.xperiodalignment,p="x"),u=f.vals;var m,x=Math.min(u.length,r.length),b=new Array(x);for(e._base=[],d=0;d<x;d++){r[d]<0&&(r[d]=s);var _=!1;r[d]!==s&&d+1<x&&r[d+1]!==s&&(_=!0),v=b[d]={p:u[d],s:r[d],cNext:_},e._base[d]=-.5*v.s,h&&(b[d].orig_p=c[d],b[d][p+"End"]=f.ends[d],b[d][p+"Start"]=f.starts[d]),e.ids&&(v.id=String(e.ids[d])),0===d&&(b[0].vTotal=0),b[0].vTotal+=l(v.s),v.begR=l(v.s)/l(b[0].s)}for(d=0;d<x;d++)(v=b[d]).s!==s&&(v.sumR=v.s/b[0].vTotal,v.difR=void 0!==m?v.s/m:1,m=v.s);return a(b,e),o(b,e),b}},18517:function(t){"use strict";t.exports={eventDataKeys:["percentInitial","percentPrevious","percentTotal"]}},8984:function(t,e,r){"use strict";var n=r(11661).setGroupPositions;t.exports=function(t,e){var r,i,a=t._fullLayout,o=t._fullData,s=t.calcdata,l=e.xaxis,u=e.yaxis,c=[],f=[],h=[];for(i=0;i<o.length;i++){var p=o[i],d="h"===p.orientation;!0===p.visible&&p.xaxis===l._id&&p.yaxis===u._id&&"funnel"===p.type&&(r=s[i],d?h.push(r):f.push(r),c.push(r))}var v={mode:a.funnelmode,norm:a.funnelnorm,gap:a.funnelgap,groupgap:a.funnelgroupgap};for(n(t,l,u,f,v),n(t,u,l,h,v),i=0;i<c.length;i++){r=c[i];for(var g=0;g<r.length;g++)g+1<r.length&&(r[g].nextP0=r[g+1].p0,r[g].nextS0=r[g+1].s0,r[g].nextP1=r[g+1].p1,r[g].nextS1=r[g+1].s1)}}},26199:function(t,e,r){"use strict";var n=r(71828),i=r(26125),a=r(90769).handleText,o=r(67513),s=r(73927),l=r(1285),u=r(7901);t.exports={supplyDefaults:function(t,e,r,i){function c(r,i){return n.coerce(t,e,l,r,i)}if(o(t,e,i,c)){s(t,e,i,c),c("xhoverformat"),c("yhoverformat"),c("orientation",e.y&&!e.x?"v":"h"),c("offset"),c("width");var f=c("text");c("hovertext"),c("hovertemplate");var h=c("textposition");a(t,e,i,c,h,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),"none"===e.textposition||e.texttemplate||c("textinfo",Array.isArray(f)?"text+value":"value");var p=c("marker.color",r);c("marker.line.color",u.defaultLine),c("marker.line.width"),c("connector.visible")&&(c("connector.fillcolor",function(t){var e=n.isArrayOrTypedArray(t)?"#000":t;return u.addOpacity(e,.5*u.opacity(e))}(p)),c("connector.line.width")&&(c("connector.line.color"),c("connector.line.dash")))}else e.visible=!1},crossTraceDefaults:function(t,e){var r,a;function o(t){return n.coerce(a._input,a,l,t)}if("group"===e.funnelmode)for(var s=0;s<t.length;s++)r=(a=t[s])._input,i(r,a,e,o)}}},34598:function(t){"use strict";t.exports=function(t,e){return t.x="xVal"in e?e.xVal:e.x,t.y="yVal"in e?e.yVal:e.y,"percentInitial"in e&&(t.percentInitial=e.percentInitial),"percentPrevious"in e&&(t.percentPrevious=e.percentPrevious),"percentTotal"in e&&(t.percentTotal=e.percentTotal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},63341:function(t,e,r){"use strict";var n=r(7901).opacity,i=r(95423).hoverOnBars,a=r(71828).formatPercent;t.exports=function(t,e,r,o,s){var l=i(t,e,r,o,s);if(l){var u=l.cd,c=u[0].trace,f="h"===c.orientation,h=u[l.index];l[(f?"x":"y")+"LabelVal"]=h.s,l.percentInitial=h.begR,l.percentInitialLabel=a(h.begR,1),l.percentPrevious=h.difR,l.percentPreviousLabel=a(h.difR,1),l.percentTotal=h.sumR,l.percentTotalLabel=a(h.sumR,1);var p=h.hi||c.hoverinfo,d=[];if(p&&"none"!==p&&"skip"!==p){var v="all"===p,g=p.split("+"),y=function(t){return v||-1!==g.indexOf(t)};y("percent initial")&&d.push(l.percentInitialLabel+" of initial"),y("percent previous")&&d.push(l.percentPreviousLabel+" of previous"),y("percent total")&&d.push(l.percentTotalLabel+" of total")}return l.extraText=d.join("<br>"),l.color=function(t,e){var r=t.marker,i=e.mc||r.color,a=e.mlc||r.line.color,o=e.mlw||r.line.width;return n(i)?i:n(a)&&o?a:void 0}(c,h),[l]}}},51759:function(t,e,r){"use strict";t.exports={attributes:r(1285),layoutAttributes:r(10440),supplyDefaults:r(26199).supplyDefaults,crossTraceDefaults:r(26199).crossTraceDefaults,supplyLayoutDefaults:r(93138),calc:r(9532),crossTraceCalc:r(8984),plot:r(80461),style:r(68266).style,hoverPoints:r(63341),eventData:r(34598),selectPoints:r(81974),moduleType:"trace",name:"funnel",basePlotModule:r(93612),categories:["bar-like","cartesian","svg","oriented","showLegend","zoomScale"],meta:{}}},10440:function(t){"use strict";t.exports={funnelmode:{valType:"enumerated",values:["stack","group","overlay"],dflt:"stack",editType:"calc"},funnelgap:{valType:"number",min:0,max:1,editType:"calc"},funnelgroupgap:{valType:"number",min:0,max:1,dflt:0,editType:"calc"}}},93138:function(t,e,r){"use strict";var n=r(71828),i=r(10440);t.exports=function(t,e,r){var a=!1;function o(r,a){return n.coerce(t,e,i,r,a)}for(var s=0;s<r.length;s++){var l=r[s];if(l.visible&&"funnel"===l.type){a=!0;break}}a&&(o("funnelmode"),o("funnelgap",.2),o("funnelgroupgap"))}},80461:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=r(91424),o=r(50606).BADNUM,s=r(17295),l=r(72597).clearMinTextSize;function u(t,e,r,n){var i=[],a=[],o=n?e:r,s=n?r:e;return i[0]=o.c2p(t.s0,!0),a[0]=s.c2p(t.p0,!0),i[1]=o.c2p(t.s1,!0),a[1]=s.c2p(t.p1,!0),i[2]=o.c2p(t.nextS0,!0),a[2]=s.c2p(t.nextP0,!0),i[3]=o.c2p(t.nextS1,!0),a[3]=s.c2p(t.nextP1,!0),n?[i,a]:[a,i]}t.exports=function(t,e,r,c){var f=t._fullLayout;l("funnel",f),function(t,e,r,s){var l=e.xaxis,c=e.yaxis;i.makeTraceGroups(s,r,"trace bars").each((function(r){var s=n.select(this),f=r[0].trace,h=i.ensureSingle(s,"g","regions");if(f.connector&&f.connector.visible){var p="h"===f.orientation,d=h.selectAll("g.region").data(i.identity);d.enter().append("g").classed("region",!0),d.exit().remove();var v=d.size();d.each((function(r,s){if(s===v-1||r.cNext){var f=u(r,l,c,p),h=f[0],d=f[1],g="";h[0]!==o&&d[0]!==o&&h[1]!==o&&d[1]!==o&&h[2]!==o&&d[2]!==o&&h[3]!==o&&d[3]!==o&&(g+=p?"M"+h[0]+","+d[1]+"L"+h[2]+","+d[2]+"H"+h[3]+"L"+h[1]+","+d[1]+"Z":"M"+h[1]+","+d[1]+"L"+h[2]+","+d[3]+"V"+d[2]+"L"+h[1]+","+d[0]+"Z"),""===g&&(g="M0,0Z"),i.ensureSingle(n.select(this),"path").attr("d",g).call(a.setClipUrl,e.layerClipId,t)}}))}else h.remove()}))}(t,e,r,c),function(t,e,r,o){var s=e.xaxis,l=e.yaxis;i.makeTraceGroups(o,r,"trace bars").each((function(r){var o=n.select(this),c=r[0].trace,f=i.ensureSingle(o,"g","lines");if(c.connector&&c.connector.visible&&c.connector.line.width){var h="h"===c.orientation,p=f.selectAll("g.line").data(i.identity);p.enter().append("g").classed("line",!0),p.exit().remove();var d=p.size();p.each((function(r,o){if(o===d-1||r.cNext){var c=u(r,s,l,h),f=c[0],p=c[1],v="";void 0!==f[3]&&void 0!==p[3]&&(h?(v+="M"+f[0]+","+p[1]+"L"+f[2]+","+p[2],v+="M"+f[1]+","+p[1]+"L"+f[3]+","+p[2]):(v+="M"+f[1]+","+p[1]+"L"+f[2]+","+p[3],v+="M"+f[1]+","+p[0]+"L"+f[2]+","+p[2])),""===v&&(v="M0,0Z"),i.ensureSingle(n.select(this),"path").attr("d",v).call(a.setClipUrl,e.layerClipId,t)}}))}else f.remove()}))}(t,e,r,c),s.plot(t,e,r,c,{mode:f.funnelmode,norm:f.funnelmode,gap:f.funnelgap,groupgap:f.funnelgroupgap})}},68266:function(t,e,r){"use strict";var n=r(39898),i=r(91424),a=r(7901),o=r(37822).DESELECTDIM,s=r(16688),l=r(72597).resizeText,u=s.styleTextPoints;t.exports={style:function(t,e,r){var s=r||n.select(t).selectAll("g.funnellayer").selectAll("g.trace");l(t,s,"funnel"),s.style("opacity",(function(t){return t[0].trace.opacity})),s.each((function(e){var r=n.select(this),s=e[0].trace;r.selectAll(".point > path").each((function(t){if(!t.isBlank){var e=s.marker;n.select(this).call(a.fill,t.mc||e.color).call(a.stroke,t.mlc||e.line.color).call(i.dashLine,e.line.dash,t.mlw||e.line.width).style("opacity",s.selectedpoints&&!t.selected?o:1)}})),u(r,s,t),r.selectAll(".regions").each((function(){n.select(this).selectAll("path").style("stroke-width",0).call(a.fill,s.connector.fillcolor)})),r.selectAll(".lines").each((function(){var t=s.connector.line;i.lineGroupStyle(n.select(this).selectAll("path"),t.width,t.color,t.dash)}))}))}}},86807:function(t,e,r){"use strict";var n=r(34e3),i=r(9012),a=r(27670).Y,o=r(5386).fF,s=r(5386).si,l=r(1426).extendFlat;t.exports={labels:n.labels,label0:n.label0,dlabel:n.dlabel,values:n.values,marker:{colors:n.marker.colors,line:{color:l({},n.marker.line.color,{dflt:null}),width:l({},n.marker.line.width,{dflt:1}),editType:"calc"},pattern:n.marker.pattern,editType:"calc"},text:n.text,hovertext:n.hovertext,scalegroup:l({},n.scalegroup,{}),textinfo:l({},n.textinfo,{flags:["label","text","value","percent"]}),texttemplate:s({editType:"plot"},{keys:["label","color","value","text","percent"]}),hoverinfo:l({},i.hoverinfo,{flags:["label","text","value","percent","name"]}),hovertemplate:o({},{keys:["label","color","value","text","percent"]}),textposition:l({},n.textposition,{values:["inside","none"],dflt:"inside"}),textfont:n.textfont,insidetextfont:n.insidetextfont,title:{text:n.title.text,font:n.title.font,position:l({},n.title.position,{values:["top left","top center","top right"],dflt:"top center"}),editType:"plot"},domain:a({name:"funnelarea",trace:!0,editType:"calc"}),aspectratio:{valType:"number",min:0,dflt:1,editType:"plot"},baseratio:{valType:"number",min:0,max:1,dflt:.333,editType:"plot"}}},6452:function(t,e,r){"use strict";var n=r(74875);e.name="funnelarea",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},89574:function(t,e,r){"use strict";var n=r(32354);t.exports={calc:function(t,e){return n.calc(t,e)},crossTraceCalc:function(t){n.crossTraceCalc(t,{type:"funnelarea"})}}},86282:function(t,e,r){"use strict";var n=r(71828),i=r(86807),a=r(27670).c,o=r(90769).handleText,s=r(37434).handleLabelsAndValues,l=r(37434).handleMarkerDefaults;t.exports=function(t,e,r,u){function c(r,a){return n.coerce(t,e,i,r,a)}var f=c("labels"),h=c("values"),p=s(f,h),d=p.len;if(e._hasLabels=p.hasLabels,e._hasValues=p.hasValues,!e._hasLabels&&e._hasValues&&(c("label0"),c("dlabel")),d){e._length=d,l(t,e,u,c),c("scalegroup");var v,g=c("text"),y=c("texttemplate");if(y||(v=c("textinfo",Array.isArray(g)?"text+percent":"percent")),c("hovertext"),c("hovertemplate"),y||v&&"none"!==v){var m=c("textposition");o(t,e,u,c,m,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1})}a(e,u,c),c("title.text")&&(c("title.position"),n.coerceFont(c,"title.font",u.font)),c("aspectratio"),c("baseratio")}else e.visible=!1}},10421:function(t,e,r){"use strict";t.exports={moduleType:"trace",name:"funnelarea",basePlotModule:r(6452),categories:["pie-like","funnelarea","showLegend"],attributes:r(86807),layoutAttributes:r(80097),supplyDefaults:r(86282),supplyLayoutDefaults:r(57402),calc:r(89574).calc,crossTraceCalc:r(89574).crossTraceCalc,plot:r(79187),style:r(71858),styleOne:r(63463),meta:{}}},80097:function(t,e,r){"use strict";var n=r(92774).hiddenlabels;t.exports={hiddenlabels:n,funnelareacolorway:{valType:"colorlist",editType:"calc"},extendfunnelareacolors:{valType:"boolean",dflt:!0,editType:"calc"}}},57402:function(t,e,r){"use strict";var n=r(71828),i=r(80097);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r("hiddenlabels"),r("funnelareacolorway",e.colorway),r("extendfunnelareacolors")}},79187:function(t,e,r){"use strict";var n=r(39898),i=r(91424),a=r(71828),o=a.strScale,s=a.strTranslate,l=r(63893),u=r(17295).toMoveInsideBar,c=r(72597),f=c.recordMinTextSize,h=c.clearMinTextSize,p=r(53581),d=r(14575),v=d.attachFxHandlers,g=d.determineInsideTextFont,y=d.layoutAreas,m=d.prerenderTitles,x=d.positionTitleOutside,b=d.formatSliceLabel;function _(t,e){return"l"+(e[0]-t[0])+","+(e[1]-t[1])}t.exports=function(t,e){var r=t._context.staticPlot,c=t._fullLayout;h("funnelarea",c),m(e,t),y(e,c._size),a.makeTraceGroups(c._funnelarealayer,e,"trace").each((function(e){var h=n.select(this),d=e[0],y=d.trace;!function(t){if(t.length){var e=t[0],r=e.trace,n=r.aspectratio,i=r.baseratio;i>.999&&(i=.999);var a,o,s,l=Math.pow(i,2),u=e.vTotal,c=u,f=u*l/(1-l)/u,h=[];for(h.push(E()),o=t.length-1;o>-1;o--)if(!(s=t[o]).hidden){var p=s.v/c;f+=p,h.push(E())}var d=1/0,v=-1/0;for(o=0;o<h.length;o++)a=h[o],d=Math.min(d,a[1]),v=Math.max(v,a[1]);for(o=0;o<h.length;o++)h[o][1]-=(v+d)/2;var g=h[h.length-1][0],y=e.r,m=(v-d)/2,x=y/g,b=y/m*n;for(e.r=b*m,o=0;o<h.length;o++)h[o][0]*=x,h[o][1]*=b;var _,w,T=[-(a=h[0])[0],a[1]],k=[a[0],a[1]],A=0;for(o=t.length-1;o>-1;o--)if(!(s=t[o]).hidden){var M=h[A+=1][0],S=h[A][1];s.TL=[-M,S],s.TR=[M,S],s.BL=T,s.BR=k,s.pxmid=(_=s.TR,w=s.BR,[.5*(_[0]+w[0]),.5*(_[1]+w[1])]),T=s.TL,k=s.TR}}function E(){var t,e={x:t=Math.sqrt(f),y:-t};return[e.x,e.y]}}(e),h.each((function(){var h=n.select(this).selectAll("g.slice").data(e);h.enter().append("g").classed("slice",!0),h.exit().remove(),h.each((function(o,s){if(o.hidden)n.select(this).selectAll("path,g").remove();else{o.pointNumber=o.i,o.curveNumber=y.index;var h=d.cx,m=d.cy,x=n.select(this),w=x.selectAll("path.surface").data([o]);w.enter().append("path").classed("surface",!0).style({"pointer-events":r?"none":"all"}),x.call(v,t,e);var T="M"+(h+o.TR[0])+","+(m+o.TR[1])+_(o.TR,o.BR)+_(o.BR,o.BL)+_(o.BL,o.TL)+"Z";w.attr("d",T),b(t,o,d);var k=p.castOption(y.textposition,o.pts),A=x.selectAll("g.slicetext").data(o.text&&"none"!==k?[0]:[]);A.enter().append("g").classed("slicetext",!0),A.exit().remove(),A.each((function(){var r=a.ensureSingle(n.select(this),"text","",(function(t){t.attr("data-notex",1)})),p=a.ensureUniformFontSize(t,g(y,o,c.font));r.text(o.text).attr({class:"slicetext",transform:"","text-anchor":"middle"}).call(i.font,p).call(l.convertToTspans,t);var d,v,x,b=i.bBox(r.node()),_=Math.min(o.BL[1],o.BR[1])+m,w=Math.max(o.TL[1],o.TR[1])+m;v=Math.max(o.TL[0],o.BL[0])+h,x=Math.min(o.TR[0],o.BR[0])+h,(d=u(v,x,_,w,b,{isHorizontal:!0,constrained:!0,angle:0,anchor:"middle"})).fontSize=p.size,f(y.type,d,c),e[s].transform=d,a.setTransormAndDisplay(r,d)}))}}));var m=n.select(this).selectAll("g.titletext").data(y.title.text?[0]:[]);m.enter().append("g").classed("titletext",!0),m.exit().remove(),m.each((function(){var e=a.ensureSingle(n.select(this),"text","",(function(t){t.attr("data-notex",1)})),r=y.title.text;y._meta&&(r=a.templateString(r,y._meta)),e.text(r).attr({class:"titletext",transform:"","text-anchor":"middle"}).call(i.font,y.title.font).call(l.convertToTspans,t);var u=x(d,c._size);e.attr("transform",s(u.x,u.y)+o(Math.min(1,u.scale))+s(u.tx,u.ty))}))}))}))}},71858:function(t,e,r){"use strict";var n=r(39898),i=r(63463),a=r(72597).resizeText;t.exports=function(t){var e=t._fullLayout._funnelarealayer.selectAll(".trace");a(t,e,"funnelarea"),e.each((function(e){var r=e[0].trace,a=n.select(this);a.style({opacity:r.opacity}),a.selectAll("path.surface").each((function(e){n.select(this).call(i,e,r,t)}))}))}},21606:function(t,e,r){"use strict";var n=r(82196),i=r(9012),a=r(41940),o=r(12663).axisHoverFormat,s=r(5386).fF,l=r(5386).si,u=r(50693),c=r(1426).extendFlat;t.exports=c({z:{valType:"data_array",editType:"calc"},x:c({},n.x,{impliedEdits:{xtype:"array"}}),x0:c({},n.x0,{impliedEdits:{xtype:"scaled"}}),dx:c({},n.dx,{impliedEdits:{xtype:"scaled"}}),y:c({},n.y,{impliedEdits:{ytype:"array"}}),y0:c({},n.y0,{impliedEdits:{ytype:"scaled"}}),dy:c({},n.dy,{impliedEdits:{ytype:"scaled"}}),xperiod:c({},n.xperiod,{impliedEdits:{xtype:"scaled"}}),yperiod:c({},n.yperiod,{impliedEdits:{ytype:"scaled"}}),xperiod0:c({},n.xperiod0,{impliedEdits:{xtype:"scaled"}}),yperiod0:c({},n.yperiod0,{impliedEdits:{ytype:"scaled"}}),xperiodalignment:c({},n.xperiodalignment,{impliedEdits:{xtype:"scaled"}}),yperiodalignment:c({},n.yperiodalignment,{impliedEdits:{ytype:"scaled"}}),text:{valType:"data_array",editType:"calc"},hovertext:{valType:"data_array",editType:"calc"},transpose:{valType:"boolean",dflt:!1,editType:"calc"},xtype:{valType:"enumerated",values:["array","scaled"],editType:"calc+clearAxisTypes"},ytype:{valType:"enumerated",values:["array","scaled"],editType:"calc+clearAxisTypes"},zsmooth:{valType:"enumerated",values:["fast","best",!1],dflt:!1,editType:"calc"},hoverongaps:{valType:"boolean",dflt:!0,editType:"none"},connectgaps:{valType:"boolean",editType:"calc"},xgap:{valType:"number",dflt:0,min:0,editType:"plot"},ygap:{valType:"number",dflt:0,min:0,editType:"plot"},xhoverformat:o("x"),yhoverformat:o("y"),zhoverformat:o("z",1),hovertemplate:s(),texttemplate:l({arrayOk:!1,editType:"plot"},{keys:["x","y","z","text"]}),textfont:a({editType:"plot",autoSize:!0,autoColor:!0,colorEditType:"style"}),showlegend:c({},i.showlegend,{dflt:!1})},{transforms:void 0},u("",{cLetter:"z",autoColorDflt:!1}))},90757:function(t,e,r){"use strict";var n=r(73972),i=r(71828),a=r(89298),o=r(42973),s=r(17562),l=r(78803),u=r(68296),c=r(4742),f=r(824),h=r(43907),p=r(70769),d=r(50606).BADNUM;function v(t){for(var e=[],r=t.length,n=0;n<r;n++){var i=t[n];i!==d&&e.push(i)}return e}t.exports=function(t,e){var r,g,y,m,x,b,_,w,T,k,A,M=a.getFromId(t,e.xaxis||"x"),S=a.getFromId(t,e.yaxis||"y"),E=n.traceIs(e,"contour"),L=n.traceIs(e,"histogram"),C=n.traceIs(e,"gl2d"),P=E?"best":e.zsmooth;if(M._minDtick=0,S._minDtick=0,L)m=(A=s(t,e)).orig_x,r=A.x,g=A.x0,y=A.dx,w=A.orig_y,x=A.y,b=A.y0,_=A.dy,T=A.z;else{var O=e.z;i.isArray1D(O)?(u(e,M,S,"x","y",["z"]),r=e._x,x=e._y,O=e._z):(m=e.x?M.makeCalcdata(e,"x"):[],w=e.y?S.makeCalcdata(e,"y"):[],r=o(e,M,"x",m).vals,x=o(e,S,"y",w).vals,e._x=r,e._y=x),g=e.x0,y=e.dx,b=e.y0,_=e.dy,T=c(O,e,M,S)}function I(t){P=e._input.zsmooth=e.zsmooth=!1,i.warn('cannot use zsmooth: "fast": '+t)}function D(t){if(t.length>1){var e=(t[t.length-1]-t[0])/(t.length-1),r=Math.abs(e/100);for(k=0;k<t.length-1;k++)if(Math.abs(t[k+1]-t[k]-e)>r)return!1}return!0}(M.rangebreaks||S.rangebreaks)&&(T=function(t,e,r){for(var n=[],i=-1,a=0;a<r.length;a++)if(e[a]!==d){n[++i]=[];for(var o=0;o<r[a].length;o++)t[o]!==d&&n[i].push(r[a][o])}return n}(r,x,T),L||(r=v(r),x=v(x),e._x=r,e._y=x)),L||!E&&!e.connectgaps||(e._emptypoints=h(T),f(T,e._emptypoints)),e._islinear=!1,"log"===M.type||"log"===S.type?"fast"===P&&I("log axis found"):D(r)?D(x)?e._islinear=!0:"fast"===P&&I("y scale is not linear"):"fast"===P&&I("x scale is not linear");var z=i.maxRowLength(T),R="scaled"===e.xtype?"":r,F=p(e,R,g,y,z,M),B="scaled"===e.ytype?"":x,N=p(e,B,b,_,T.length,S);C||(e._extremes[M._id]=a.findExtremes(M,F),e._extremes[S._id]=a.findExtremes(S,N));var j={x:F,y:N,z:T,text:e._text||e.text,hovertext:e._hovertext||e.hovertext};if(e.xperiodalignment&&m&&(j.orig_x=m),e.yperiodalignment&&w&&(j.orig_y=w),R&&R.length===F.length-1&&(j.xCenter=R),B&&B.length===N.length-1&&(j.yCenter=B),L&&(j.xRanges=A.xRanges,j.yRanges=A.yRanges,j.pts=A.pts),E||l(t,e,{vals:T,cLetter:"z"}),E&&e.contours&&"heatmap"===e.contours.coloring){var U={type:"contour"===e.type?"heatmap":"histogram2d",xcalendar:e.xcalendar,ycalendar:e.ycalendar};j.xfill=p(U,R,g,y,z,M),j.yfill=p(U,B,b,_,T.length,S)}return[j]}},4742:function(t,e,r){"use strict";var n=r(92770),i=r(71828),a=r(50606).BADNUM;t.exports=function(t,e,r,o){var s,l,u,c,f,h;function p(t){if(n(t))return+t}if(e&&e.transpose){for(s=0,f=0;f<t.length;f++)s=Math.max(s,t[f].length);if(0===s)return!1;u=function(t){return t.length},c=function(t,e,r){return(t[r]||[])[e]}}else s=t.length,u=function(t,e){return t[e].length},c=function(t,e,r){return(t[e]||[])[r]};var d=function(t,e,r){return e===a||r===a?a:c(t,e,r)};function v(t){if(e&&"carpet"!==e.type&&"contourcarpet"!==e.type&&t&&"category"===t.type&&e["_"+t._id.charAt(0)].length){var r=t._id.charAt(0),n={},o=e["_"+r+"CategoryMap"]||e[r];for(f=0;f<o.length;f++)n[o[f]]=f;return function(e){var r=n[t._categories[e]];return r+1?r:a}}return i.identity}var g=v(r),y=v(o);o&&"category"===o.type&&(s=o._categories.length);var m=new Array(s);for(f=0;f<s;f++)for(l=r&&"category"===r.type?r._categories.length:u(t,f),m[f]=new Array(l),h=0;h<l;h++)m[f][h]=p(d(t,y(f),g(h)));return m}},61243:function(t){"use strict";t.exports={min:"zmin",max:"zmax"}},68296:function(t,e,r){"use strict";var n=r(71828),i=r(50606).BADNUM,a=r(42973);t.exports=function(t,e,r,o,s,l){var u=t._length,c=e.makeCalcdata(t,o),f=r.makeCalcdata(t,s);c=a(t,e,o,c).vals,f=a(t,r,s,f).vals;var h,p,d,v,g=t.text,y=void 0!==g&&n.isArray1D(g),m=t.hovertext,x=void 0!==m&&n.isArray1D(m),b=n.distinctVals(c),_=b.vals,w=n.distinctVals(f),T=w.vals,k=[],A=T.length,M=_.length;for(h=0;h<l.length;h++)k[h]=n.init2dArray(A,M);y&&(d=n.init2dArray(A,M)),x&&(v=n.init2dArray(A,M));var S=n.init2dArray(A,M);for(h=0;h<u;h++)if(c[h]!==i&&f[h]!==i){var E=n.findBin(c[h]+b.minDiff/2,_),L=n.findBin(f[h]+w.minDiff/2,T);for(p=0;p<l.length;p++){var C=t[l[p]];k[p][L][E]=C[h],S[L][E]=h}y&&(d[L][E]=g[h]),x&&(v[L][E]=m[h])}for(t["_"+o]=_,t["_"+s]=T,p=0;p<l.length;p++)t["_"+l[p]]=k[p];y&&(t._text=d),x&&(t._hovertext=v),e&&"category"===e.type&&(t["_"+o+"CategoryMap"]=_.map((function(t){return e._categories[t]}))),r&&"category"===r.type&&(t["_"+s+"CategoryMap"]=T.map((function(t){return r._categories[t]}))),t._after2before=S}},76382:function(t,e,r){"use strict";var n=r(71828),i=r(67684),a=r(58623),o=r(73927),s=r(49901),l=r(1586),u=r(21606);t.exports=function(t,e,r,c){function f(r,i){return n.coerce(t,e,u,r,i)}i(t,e,f,c)?(o(t,e,c,f),f("xhoverformat"),f("yhoverformat"),f("text"),f("hovertext"),f("hovertemplate"),a(f,c),s(t,e,f,c),f("hoverongaps"),f("connectgaps",n.isArray1D(e.z)&&!1!==e.zsmooth),l(t,e,c,f,{prefix:"",cLetter:"z"})):e.visible=!1}},43907:function(t,e,r){"use strict";var n=r(71828).maxRowLength;t.exports=function(t){var e,r,i,a,o,s,l,u,c=[],f={},h=[],p=t[0],d=[],v=[0,0,0],g=n(t);for(r=0;r<t.length;r++)for(e=d,d=p,p=t[r+1]||[],i=0;i<g;i++)void 0===d[i]&&((s=(void 0!==d[i-1]?1:0)+(void 0!==d[i+1]?1:0)+(void 0!==e[i]?1:0)+(void 0!==p[i]?1:0))?(0===r&&s++,0===i&&s++,r===t.length-1&&s++,i===d.length-1&&s++,s<4&&(f[[r,i]]=[r,i,s]),c.push([r,i,s])):h.push([r,i]));for(;h.length;){for(l={},u=!1,o=h.length-1;o>=0;o--)(s=((f[[(r=(a=h[o])[0])-1,i=a[1]]]||v)[2]+(f[[r+1,i]]||v)[2]+(f[[r,i-1]]||v)[2]+(f[[r,i+1]]||v)[2])/20)&&(l[a]=[r,i,s],h.splice(o,1),u=!0);if(!u)throw"findEmpties iterated with no new neighbors";for(a in l)f[a]=l[a],c.push(l[a])}return c.sort((function(t,e){return e[2]-t[2]}))}},46248:function(t,e,r){"use strict";var n=r(30211),i=r(71828),a=r(89298),o=r(21081).extractOpts;t.exports=function(t,e,r,s,l){l||(l={});var u,c,f,h,p=l.isContour,d=t.cd[0],v=d.trace,g=t.xa,y=t.ya,m=d.x,x=d.y,b=d.z,_=d.xCenter,w=d.yCenter,T=d.zmask,k=v.zhoverformat,A=m,M=x;if(!1!==t.index){try{f=Math.round(t.index[1]),h=Math.round(t.index[0])}catch(e){return void i.error("Error hovering on heatmap, pointNumber must be [row,col], found:",t.index)}if(f<0||f>=b[0].length||h<0||h>b.length)return}else{if(n.inbox(e-m[0],e-m[m.length-1],0)>0||n.inbox(r-x[0],r-x[x.length-1],0)>0)return;if(p){var S;for(A=[2*m[0]-m[1]],S=1;S<m.length;S++)A.push((m[S]+m[S-1])/2);for(A.push([2*m[m.length-1]-m[m.length-2]]),M=[2*x[0]-x[1]],S=1;S<x.length;S++)M.push((x[S]+x[S-1])/2);M.push([2*x[x.length-1]-x[x.length-2]])}f=Math.max(0,Math.min(A.length-2,i.findBin(e,A))),h=Math.max(0,Math.min(M.length-2,i.findBin(r,M)))}var E,L,C=g.c2p(m[f]),P=g.c2p(m[f+1]),O=y.c2p(x[h]),I=y.c2p(x[h+1]);p?(E=d.orig_x||m,L=d.orig_y||x,P=C,u=E[f],I=O,c=L[h]):(E=d.orig_x||_||m,L=d.orig_y||w||x,u=_?E[f]:(E[f]+E[f+1])/2,c=w?L[h]:(L[h]+L[h+1])/2,g&&"category"===g.type&&(u=m[f]),y&&"category"===y.type&&(c=x[h]),v.zsmooth&&(C=P=g.c2p(u),O=I=y.c2p(c)));var D=b[h][f];if(T&&!T[h][f]&&(D=void 0),void 0!==D||v.hoverongaps){var z;Array.isArray(d.hovertext)&&Array.isArray(d.hovertext[h])?z=d.hovertext[h][f]:Array.isArray(d.text)&&Array.isArray(d.text[h])&&(z=d.text[h][f]);var R=o(v),F={type:"linear",range:[R.min,R.max],hoverformat:k,_separators:g._separators,_numFormat:g._numFormat},B=a.tickText(F,D,"hover").text;return[i.extendFlat(t,{index:v._after2before?v._after2before[h][f]:[h,f],distance:t.maxHoverDistance,spikeDistance:t.maxSpikeDistance,x0:C,x1:P,y0:O,y1:I,xLabelVal:u,yLabelVal:c,zLabelVal:D,zLabel:B,text:z})]}}},92165:function(t,e,r){"use strict";t.exports={attributes:r(21606),supplyDefaults:r(76382),calc:r(90757),plot:r(50347),colorbar:r(61243),style:r(70035),hoverPoints:r(46248),moduleType:"trace",name:"heatmap",basePlotModule:r(93612),categories:["cartesian","svg","2dMap","showLegend"],meta:{}}},824:function(t,e,r){"use strict";var n=r(71828),i=[[-1,0],[1,0],[0,-1],[0,1]];function a(t){return.5-.25*Math.min(1,.5*t)}function o(t,e,r){var n,a,o,s,l,u,c,f,h,p,d,v,g,y=0;for(s=0;s<e.length;s++){for(a=(n=e[s])[0],o=n[1],d=t[a][o],p=0,h=0,l=0;l<4;l++)(c=t[a+(u=i[l])[0]])&&void 0!==(f=c[o+u[1]])&&(0===p?v=g=f:(v=Math.min(v,f),g=Math.max(g,f)),h++,p+=f);if(0===h)throw"iterateInterp2d order is wrong: no defined neighbors";t[a][o]=p/h,void 0===d?h<4&&(y=1):(t[a][o]=(1+r)*t[a][o]-r*d,g>v&&(y=Math.max(y,Math.abs(t[a][o]-d)/(g-v))))}return y}t.exports=function(t,e){var r,i=1;for(o(t,e),r=0;r<e.length&&!(e[r][2]<4);r++);for(e=e.slice(r),r=0;r<100&&i>.01;r++)i=o(t,e,a(i));return i>.01&&n.log("interp2d didn't converge quickly",i),t}},58623:function(t,e,r){"use strict";var n=r(71828);t.exports=function(t,e){t("texttemplate");var r=n.extendFlat({},e.font,{color:"auto",size:"auto"});n.coerceFont(t,"textfont",r)}},70769:function(t,e,r){"use strict";var n=r(73972),i=r(71828).isArrayOrTypedArray;t.exports=function(t,e,r,a,o,s){var l,u,c,f=[],h=n.traceIs(t,"contour"),p=n.traceIs(t,"histogram"),d=n.traceIs(t,"gl2d");if(i(e)&&e.length>1&&!p&&"category"!==s.type){var v=e.length;if(!(v<=o))return h?e.slice(0,o):e.slice(0,o+1);if(h||d)f=e.slice(0,o);else if(1===o)f=[e[0]-.5,e[0]+.5];else{for(f=[1.5*e[0]-.5*e[1]],c=1;c<v;c++)f.push(.5*(e[c-1]+e[c]));f.push(1.5*e[v-1]-.5*e[v-2])}if(v<o){var g=f[f.length-1],y=g-f[f.length-2];for(c=v;c<o;c++)g+=y,f.push(g)}}else{var m=t[s._id.charAt(0)+"calendar"];for(l=p?s.r2c(r,0,m):i(e)&&1===e.length?e[0]:void 0===r?0:("log"===s.type?s.d2c:s.r2c)(r,0,m),u=a||1,c=h||d?0:-.5;c<o;c++)f.push(l+u*c)}return f}},50347:function(t,e,r){"use strict";var n=r(39898),i=r(84267),a=r(73972),o=r(91424),s=r(89298),l=r(71828),u=r(63893),c=r(8225),f=r(7901),h=r(21081).extractOpts,p=r(21081).makeColorScaleFuncFromTrace,d=r(77922),v=r(18783).LINE_SPACING,g=r(3883),y=r(32396).STYLE,m="heatmap-label";function x(t){return t.selectAll("g."+m)}function b(t){x(t).remove()}function _(t,e){var r=e.length-2,n=l.constrain(l.findBin(t,e),0,r),i=e[n],a=e[n+1],o=l.constrain(n+(t-i)/(a-i)-.5,0,r),s=Math.round(o),u=Math.abs(o-s);return o&&o!==r&&u?{bin0:s,frac:u,bin1:Math.round(s+u/(o-s))}:{bin0:s,bin1:s,frac:0}}function w(t,e){var r=e.length-1,n=l.constrain(l.findBin(t,e),0,r),i=e[n],a=(t-i)/(e[n+1]-i)||0;return a<=0?{bin0:n,bin1:n,frac:0}:a<.5?{bin0:n,bin1:n+1,frac:a}:{bin0:n+1,bin1:n,frac:1-a}}function T(t,e,r){t[e]=r[0],t[e+1]=r[1],t[e+2]=r[2],t[e+3]=Math.round(255*r[3])}t.exports=function(t,e,r,k){var A=e.xaxis,M=e.yaxis;l.makeTraceGroups(k,r,"hm").each((function(e){var r,k,S,E,L,C,P,O,I=n.select(this),D=e[0],z=D.trace,R=z.xgap||0,F=z.ygap||0,B=D.z,N=D.x,j=D.y,U=D.xCenter,V=D.yCenter,H=a.traceIs(z,"contour"),q=H?"best":z.zsmooth,G=B.length,Z=l.maxRowLength(B),Y=!1,W=!1;for(C=0;void 0===r&&C<N.length-1;)r=A.c2p(N[C]),C++;for(C=N.length-1;void 0===k&&C>0;)k=A.c2p(N[C]),C--;for(k<r&&(S=k,k=r,r=S,Y=!0),C=0;void 0===E&&C<j.length-1;)E=M.c2p(j[C]),C++;for(C=j.length-1;void 0===L&&C>0;)L=M.c2p(j[C]),C--;L<E&&(S=E,E=L,L=S,W=!0),H&&(U=N,V=j,N=D.xfill,j=D.yfill);var X="default";if(q?X="best"===q?"smooth":"fast":z._islinear&&0===R&&0===F&&g()&&(X="fast"),"fast"!==X){var J="best"===q?0:.5;r=Math.max(-J*A._length,r),k=Math.min((1+J)*A._length,k),E=Math.max(-J*M._length,E),L=Math.min((1+J)*M._length,L)}var K,$,Q=Math.round(k-r),tt=Math.round(L-E);if(r>=A._length||k<=0||E>=M._length||L<=0)return I.selectAll("image").data([]).exit().remove(),void b(I);"fast"===X?(K=Z,$=G):(K=Q,$=tt);var et=document.createElement("canvas");et.width=K,et.height=$;var rt,nt,it=et.getContext("2d",{willReadFrequently:!0}),at=p(z,{noNumericCheck:!0,returnArray:!0});"fast"===X?(rt=Y?function(t){return Z-1-t}:l.identity,nt=W?function(t){return G-1-t}:l.identity):(rt=function(t){return l.constrain(Math.round(A.c2p(N[t])-r),0,Q)},nt=function(t){return l.constrain(Math.round(M.c2p(j[t])-E),0,tt)});var ot,st,lt,ut,ct=nt(0),ft=[ct,ct],ht=Y?0:1,pt=W?0:1,dt=0,vt=0,gt=0,yt=0;function mt(t,e){if(void 0!==t){var r=at(t);return r[0]=Math.round(r[0]),r[1]=Math.round(r[1]),r[2]=Math.round(r[2]),dt+=e,vt+=r[0]*e,gt+=r[1]*e,yt+=r[2]*e,r}return[0,0,0,0]}function xt(t,e,r,n){var i=t[r.bin0];if(void 0===i)return mt(void 0,1);var a,o=t[r.bin1],s=e[r.bin0],l=e[r.bin1],u=o-i||0,c=s-i||0;return a=void 0===o?void 0===l?0:void 0===s?2*(l-i):2*(2*l-s-i)/3:void 0===l?void 0===s?0:2*(2*i-o-s)/3:void 0===s?2*(2*l-o-i)/3:l+i-o-s,mt(i+r.frac*u+n.frac*(c+r.frac*a))}if("default"!==X){var bt,_t=0;try{bt=new Uint8Array(K*$*4)}catch(t){bt=new Array(K*$*4)}if("smooth"===X){var wt,Tt,kt,At=U||N,Mt=V||j,St=new Array(At.length),Et=new Array(Mt.length),Lt=new Array(Q),Ct=U?w:_,Pt=V?w:_;for(C=0;C<At.length;C++)St[C]=Math.round(A.c2p(At[C])-r);for(C=0;C<Mt.length;C++)Et[C]=Math.round(M.c2p(Mt[C])-E);for(C=0;C<Q;C++)Lt[C]=Ct(C,St);for(P=0;P<tt;P++)for(Tt=B[(wt=Pt(P,Et)).bin0],kt=B[wt.bin1],C=0;C<Q;C++,_t+=4)T(bt,_t,ut=xt(Tt,kt,Lt[C],wt))}else for(P=0;P<G;P++)for(lt=B[P],ft=nt(P),C=0;C<Z;C++)ut=mt(lt[C],1),T(bt,_t=4*(ft*Z+rt(C)),ut);var Ot=it.createImageData(K,$);try{Ot.data.set(bt)}catch(t){var It=Ot.data,Dt=It.length;for(P=0;P<Dt;P++)It[P]=bt[P]}it.putImageData(Ot,0,0)}else{var zt=Math.floor(R/2),Rt=Math.floor(F/2);for(P=0;P<G;P++)if(lt=B[P],ft.reverse(),ft[pt]=nt(P+1),ft[0]!==ft[1]&&void 0!==ft[0]&&void 0!==ft[1])for(ot=[st=rt(0),st],C=0;C<Z;C++)ot.reverse(),ot[ht]=rt(C+1),ot[0]!==ot[1]&&void 0!==ot[0]&&void 0!==ot[1]&&(ut=mt(lt[C],(ot[1]-ot[0])*(ft[1]-ft[0])),it.fillStyle="rgba("+ut.join(",")+")",it.fillRect(ot[0]+zt,ft[0]+Rt,ot[1]-ot[0]-R,ft[1]-ft[0]-F))}vt=Math.round(vt/dt),gt=Math.round(gt/dt),yt=Math.round(yt/dt);var Ft=i("rgb("+vt+","+gt+","+yt+")");t._hmpixcount=(t._hmpixcount||0)+dt,t._hmlumcount=(t._hmlumcount||0)+dt*Ft.getLuminance();var Bt=I.selectAll("image").data(e);Bt.enter().append("svg:image").attr({xmlns:d.svg,preserveAspectRatio:"none"}),Bt.attr({height:tt,width:Q,x:r,y:E,"xlink:href":et.toDataURL("image/png")}),"fast"!==X||q||Bt.attr("style",y),b(I);var Nt=z.texttemplate;if(Nt){var jt=h(z),Ut={type:"linear",range:[jt.min,jt.max],_separators:A._separators,_numFormat:A._numFormat},Vt="histogram2dcontour"===z.type,Ht="contour"===z.type,qt=Ht?G-1:G,Gt=Ht?1:0,Zt=Ht?Z-1:Z,Yt=[];for(C=Ht?1:0;C<qt;C++){var Wt;if(Ht)Wt=D.y[C];else if(Vt){if(0===C||C===G-1)continue;Wt=D.y[C]}else if(D.yCenter)Wt=D.yCenter[C];else{if(C+1===G&&void 0===D.y[C+1])continue;Wt=(D.y[C]+D.y[C+1])/2}var Xt=Math.round(M.c2p(Wt));if(!(0>Xt||Xt>M._length))for(P=Gt;P<Zt;P++){var Jt;if(Ht)Jt=D.x[P];else if(Vt){if(0===P||P===Z-1)continue;Jt=D.x[P]}else if(D.xCenter)Jt=D.xCenter[P];else{if(P+1===Z&&void 0===D.x[P+1])continue;Jt=(D.x[P]+D.x[P+1])/2}var Kt=Math.round(A.c2p(Jt));if(!(0>Kt||Kt>A._length)){var $t=c({x:Jt,y:Wt},z,t._fullLayout);$t.x=Jt,$t.y=Wt;var Qt=D.z[C][P];void 0===Qt?($t.z="",$t.zLabel=""):($t.z=Qt,$t.zLabel=s.tickText(Ut,Qt,"hover").text);var te=D.text&&D.text[C]&&D.text[C][P];void 0!==te&&!1!==te||(te=""),$t.text=te;var ee=l.texttemplateString(Nt,$t,t._fullLayout._d3locale,$t,z._meta||{});if(ee){var re=ee.split("<br>"),ne=re.length,ie=0;for(O=0;O<ne;O++)ie=Math.max(ie,re[O].length);Yt.push({l:ne,c:ie,t:ee,x:Kt,y:Xt,z:Qt})}}}}var ae=z.textfont,oe=ae.family,se=ae.size,le=t._fullLayout.font.size;if(!se||"auto"===se){var ue=1/0,ce=1/0,fe=0,he=0;for(O=0;O<Yt.length;O++){var pe=Yt[O];if(fe=Math.max(fe,pe.l),he=Math.max(he,pe.c),O<Yt.length-1){var de=Yt[O+1],ve=Math.abs(de.x-pe.x),ge=Math.abs(de.y-pe.y);ve&&(ue=Math.min(ue,ve)),ge&&(ce=Math.min(ce,ge))}}isFinite(ue)&&isFinite(ce)?(ue-=R,ce-=F,ue/=he,ce/=fe,ue/=v/2,ce/=v,se=Math.min(Math.floor(ue),Math.floor(ce),le)):se=le}if(se<=0||!isFinite(se))return;x(I).data(Yt).enter().append("g").classed(m,1).append("text").attr("text-anchor","middle").each((function(e){var r=n.select(this),i=ae.color;i&&"auto"!==i||(i=f.contrast("rgba("+at(e.z).join()+")")),r.attr("data-notex",1).call(u.positionText,function(t){return t.x}(e),function(t){return t.y-se*(t.l*v/2-1)}(e)).call(o.font,oe,se,i).text(e.t).call(u.convertToTspans,t)}))}}))}},70035:function(t,e,r){"use strict";var n=r(39898);t.exports=function(t){n.select(t).selectAll(".hm image").style("opacity",(function(t){return t.trace.opacity}))}},49901:function(t){"use strict";t.exports=function(t,e,r){!1===r("zsmooth")&&(r("xgap"),r("ygap")),r("zhoverformat")}},67684:function(t,e,r){"use strict";var n=r(92770),i=r(71828),a=r(73972);function o(t,e){var r=e(t);return"scaled"===(r?e(t+"type","array"):"scaled")&&(e(t+"0"),e("d"+t)),r}t.exports=function(t,e,r,s,l,u){var c,f,h=r("z");if(l=l||"x",u=u||"y",void 0===h||!h.length)return 0;if(i.isArray1D(t.z)){c=r(l),f=r(u);var p=i.minRowLength(c),d=i.minRowLength(f);if(0===p||0===d)return 0;e._length=Math.min(p,d,h.length)}else{if(c=o(l,r),f=o(u,r),!function(t){for(var e,r=!0,a=!1,o=!1,s=0;s<t.length;s++){if(e=t[s],!i.isArrayOrTypedArray(e)){r=!1;break}e.length>0&&(a=!0);for(var l=0;l<e.length;l++)if(n(e[l])){o=!0;break}}return r&&a&&o}(h))return 0;r("transpose"),e._length=null}return"heatmapgl"===t.type||a.getComponentMethod("calendars","handleTraceDefaults")(t,e,[l,u],s),!0}},16063:function(t,e,r){"use strict";for(var n=r(21606),i=r(50693),a=r(1426).extendFlat,o=r(30962).overrideAll,s=["z","x","x0","dx","y","y0","dy","text","transpose","xtype","ytype"],l={},u=0;u<s.length;u++){var c=s[u];l[c]=n[c]}l.zsmooth={valType:"enumerated",values:["fast",!1],dflt:"fast",editType:"calc"},a(l,i("",{cLetter:"z",autoColorDflt:!1})),t.exports=o(l,"calc","nested")},59560:function(t,e,r){"use strict";var n=r(9330).gl_heatmap2d,i=r(89298),a=r(78614);function o(t,e){this.scene=t,this.uid=e,this.type="heatmapgl",this.name="",this.hoverinfo="all",this.xData=[],this.yData=[],this.zData=[],this.textLabels=[],this.idToIndex=[],this.bounds=[0,0,0,0],this.options={zsmooth:"fast",z:[],x:[],y:[],shape:[0,0],colorLevels:[0],colorValues:[0,0,0,1]},this.heatmap=n(t.glplot,this.options),this.heatmap._trace=this}var s=o.prototype;s.handlePick=function(t){var e=this.options,r=e.shape,n=t.pointId,i=n%r[0],a=Math.floor(n/r[0]),o=n;return{trace:this,dataCoord:t.dataCoord,traceCoord:[e.x[i],e.y[a],e.z[o]],textLabel:this.textLabels[n],name:this.name,pointIndex:[a,i],hoverinfo:this.hoverinfo}},s.update=function(t,e){var r=e[0];this.index=t.index,this.name=t.name,this.hoverinfo=t.hoverinfo;var n=r.z;this.options.z=[].concat.apply([],n);var o=n[0].length,s=n.length;this.options.shape=[o,s],this.options.x=r.x,this.options.y=r.y,this.options.zsmooth=t.zsmooth;var l=function(t){for(var e=t.colorscale,r=t.zmin,n=t.zmax,i=e.length,o=new Array(i),s=new Array(4*i),l=0;l<i;l++){var u=e[l],c=a(u[1]);o[l]=r+u[0]*(n-r);for(var f=0;f<4;f++)s[4*l+f]=c[f]}return{colorLevels:o,colorValues:s}}(t);this.options.colorLevels=l.colorLevels,this.options.colorValues=l.colorValues,this.textLabels=[].concat.apply([],t.text),this.heatmap.update(this.options);var u,c,f=this.scene.xaxis,h=this.scene.yaxis;!1===t.zsmooth&&(u={ppad:r.x[1]-r.x[0]},c={ppad:r.y[1]-r.y[0]}),t._extremes[f._id]=i.findExtremes(f,r.x,u),t._extremes[h._id]=i.findExtremes(h,r.y,c)},s.dispose=function(){this.heatmap.dispose()},t.exports=function(t,e,r){var n=new o(t,e.uid);return n.update(e,r),n}},19600:function(t,e,r){"use strict";var n=r(71828),i=r(67684),a=r(1586),o=r(16063);t.exports=function(t,e,r,s){function l(r,i){return n.coerce(t,e,o,r,i)}i(t,e,l,s)?(l("text"),l("zsmooth"),a(t,e,s,l,{prefix:"",cLetter:"z"})):e.visible=!1}},3325:function(t,e,r){"use strict";["*heatmapgl* trace is deprecated!","Please consider switching to the *heatmap* or *image* trace types.","Alternatively you could contribute/sponsor rewriting this trace type","based on cartesian features and using regl framework."].join(" "),t.exports={attributes:r(16063),supplyDefaults:r(19600),colorbar:r(61243),calc:r(90757),plot:r(59560),moduleType:"trace",name:"heatmapgl",basePlotModule:r(4796),categories:["gl","gl2d","2dMap"],meta:{}}},7745:function(t,e,r){"use strict";var n=r(1486),i=r(12663).axisHoverFormat,a=r(5386).fF,o=r(5386).si,s=r(41940),l=r(17656),u=r(72406),c=r(1426).extendFlat;t.exports={x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},xhoverformat:i("x"),yhoverformat:i("y"),text:c({},n.text,{}),hovertext:c({},n.hovertext,{}),orientation:n.orientation,histfunc:{valType:"enumerated",values:["count","sum","avg","min","max"],dflt:"count",editType:"calc"},histnorm:{valType:"enumerated",values:["","percent","probability","density","probability density"],dflt:"",editType:"calc"},cumulative:{enabled:{valType:"boolean",dflt:!1,editType:"calc"},direction:{valType:"enumerated",values:["increasing","decreasing"],dflt:"increasing",editType:"calc"},currentbin:{valType:"enumerated",values:["include","exclude","half"],dflt:"include",editType:"calc"},editType:"calc"},nbinsx:{valType:"integer",min:0,dflt:0,editType:"calc"},xbins:l("x",!0),nbinsy:{valType:"integer",min:0,dflt:0,editType:"calc"},ybins:l("y",!0),autobinx:{valType:"boolean",dflt:null,editType:"calc"},autobiny:{valType:"boolean",dflt:null,editType:"calc"},bingroup:{valType:"string",dflt:"",editType:"calc"},hovertemplate:a({},{keys:u.eventDataKeys}),texttemplate:o({arrayOk:!1,editType:"plot"},{keys:["label","value"]}),textposition:c({},n.textposition,{arrayOk:!1}),textfont:s({arrayOk:!1,editType:"plot",colorEditType:"style"}),outsidetextfont:s({arrayOk:!1,editType:"plot",colorEditType:"style"}),insidetextfont:s({arrayOk:!1,editType:"plot",colorEditType:"style"}),insidetextanchor:n.insidetextanchor,textangle:n.textangle,cliponaxis:n.cliponaxis,constraintext:n.constraintext,marker:n.marker,offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup,selected:n.selected,unselected:n.unselected,_deprecated:{bardir:n._deprecated.bardir}}},42174:function(t){"use strict";t.exports=function(t,e){for(var r=t.length,n=0,i=0;i<r;i++)e[i]?(t[i]/=e[i],n+=t[i]):t[i]=null;return n}},17656:function(t){"use strict";t.exports=function(t,e){return{start:{valType:"any",editType:"calc"},end:{valType:"any",editType:"calc"},size:{valType:"any",editType:"calc"},editType:"calc"}}},59575:function(t,e,r){"use strict";var n=r(92770);t.exports={count:function(t,e,r){return r[t]++,1},sum:function(t,e,r,i){var a=i[e];return n(a)?(a=Number(a),r[t]+=a,a):0},avg:function(t,e,r,i,a){var o=i[e];return n(o)&&(o=Number(o),r[t]+=o,a[t]++),0},min:function(t,e,r,i){var a=i[e];if(n(a)){if(a=Number(a),!n(r[t]))return r[t]=a,a;if(r[t]>a){var o=a-r[t];return r[t]=a,o}}return 0},max:function(t,e,r,i){var a=i[e];if(n(a)){if(a=Number(a),!n(r[t]))return r[t]=a,a;if(r[t]<a){var o=a-r[t];return r[t]=a,o}}return 0}}},40965:function(t,e,r){"use strict";var n=r(50606),i=n.ONEAVGYEAR,a=n.ONEAVGMONTH,o=n.ONEDAY,s=n.ONEHOUR,l=n.ONEMIN,u=n.ONESEC,c=r(89298).tickIncrement;function f(t,e,r,n){if(t*e<=0)return 1/0;for(var i=Math.abs(e-t),a="date"===r.type,o=h(i,a),s=0;s<10;s++){var l=h(80*o,a);if(o===l)break;if(!p(l,t,e,a,r,n))break;o=l}return o}function h(t,e){return e&&t>u?t>o?t>1.1*i?i:t>1.1*a?a:o:t>s?s:t>l?l:u:Math.pow(10,Math.floor(Math.log(t)/Math.LN10))}function p(t,e,r,n,a,s){if(n&&t>o){var l=d(e,a,s),u=d(r,a,s),c=t===i?0:1;return l[c]!==u[c]}return Math.floor(r/t)-Math.floor(e/t)>.1}function d(t,e,r){var n=e.c2d(t,i,r).split("-");return""===n[0]&&(n.unshift(),n[0]="-"+n[0]),n}t.exports=function(t,e,r,n,a){var s,l,u=-1.1*e,h=-.1*e,p=t-h,d=r[0],v=r[1],g=Math.min(f(d+h,d+p,n,a),f(v+h,v+p,n,a)),y=Math.min(f(d+u,d+h,n,a),f(v+u,v+h,n,a));if(g>y&&y<Math.abs(v-d)/4e3?(s=g,l=!1):(s=Math.min(g,y),l=!0),"date"===n.type&&s>o){var m=s===i?1:6,x=s===i?"M12":"M1";return function(e,r){var o=n.c2d(e,i,a),s=o.indexOf("-",m);s>0&&(o=o.substr(0,s));var u=n.d2c(o,0,a);if(u<e){var f=c(u,x,!1,a);(u+f)/2<e+t&&(u=f)}return r&&l?c(u,x,!0,a):u}}return function(e,r){var n=s*Math.round(e/s);return n+s/10<e&&n+.9*s<e+t&&(n+=s),r&&l&&(n-=s),n}}},72138:function(t,e,r){"use strict";var n=r(92770),i=r(71828),a=r(73972),o=r(89298),s=r(75341),l=r(59575),u=r(36362),c=r(42174),f=r(40965);function h(t,e,r,s,l){var u,c,f,p,d,v,g,y=s+"bins",m=t._fullLayout,x=e["_"+s+"bingroup"],b=m._histogramBinOpts[x],_="overlay"===m.barmode,w=function(t){return r.r2c(t,0,p)},T=function(t){return r.c2r(t,0,p)},k="date"===r.type?function(t){return t||0===t?i.cleanDate(t,null,p):null}:function(t){return n(t)?Number(t):null};function A(t,e,r){e[t+"Found"]?(e[t]=k(e[t]),null===e[t]&&(e[t]=r[t])):(v[t]=e[t]=r[t],i.nestedProperty(c[0],y+"."+t).set(r[t]))}if(e["_"+s+"autoBinFinished"])delete e["_"+s+"autoBinFinished"];else{c=b.traces;var M=[],S=!0,E=!1,L=!1;for(u=0;u<c.length;u++)if((f=c[u]).visible){var C=b.dirs[u];d=f["_"+C+"pos0"]=r.makeCalcdata(f,C),M=i.concat(M,d),delete f["_"+s+"autoBinFinished"],!0===e.visible&&(S?S=!1:(delete f._autoBin,f["_"+s+"autoBinFinished"]=1),a.traceIs(f,"2dMap")&&(E=!0),"histogram2dcontour"===f.type&&(L=!0))}p=c[0][s+"calendar"];var P=o.autoBin(M,r,b.nbins,E,p,b.sizeFound&&b.size),O=c[0]._autoBin={};if(v=O[b.dirs[0]]={},L&&(b.size||(P.start=T(o.tickIncrement(w(P.start),P.size,!0,p))),void 0===b.end&&(P.end=T(o.tickIncrement(w(P.end),P.size,!1,p)))),_&&!a.traceIs(e,"2dMap")&&0===P._dataSpan&&"category"!==r.type&&"multicategory"!==r.type&&""===e.bingroup&&void 0===e.xbins){if(l)return[P,d,!0];P=function(t,e,r,n,a){var o,s,l,u=t._fullLayout,c=function(t,e){for(var r=e.xaxis,n=e.yaxis,i=e.orientation,a=[],o=t._fullData,s=0;s<o.length;s++){var l=o[s];"histogram"===l.type&&!0===l.visible&&l.orientation===i&&l.xaxis===r&&l.yaxis===n&&a.push(l)}return a}(t,e),f=!1,p=1/0,d=[e];for(o=0;o<c.length;o++)if((s=c[o])===e)f=!0;else if(f){var v=h(t,s,r,n,!0),g=v[0],y=v[2];s["_"+n+"autoBinFinished"]=1,s["_"+n+"pos0"]=v[1],y?d.push(s):p=Math.min(p,g.size)}else l=u._histogramBinOpts[s["_"+n+"bingroup"]],p=Math.min(p,l.size||s[a].size);var m=new Array(d.length);for(o=0;o<d.length;o++)for(var x=d[o]["_"+n+"pos0"],b=0;b<x.length;b++)if(void 0!==x[b]){m[o]=x[b];break}for(isFinite(p)||(p=i.distinctVals(m).minDiff),o=0;o<d.length;o++){var _=(s=d[o])[n+"calendar"],w={start:r.c2r(m[o]-p/2,0,_),end:r.c2r(m[o]+p/2,0,_),size:p};s._input[a]=s[a]=w,(l=u._histogramBinOpts[s["_"+n+"bingroup"]])&&i.extendFlat(l,w)}return e[a]}(t,e,r,s,y)}(g=f.cumulative||{}).enabled&&"include"!==g.currentbin&&("decreasing"===g.direction?P.start=T(o.tickIncrement(w(P.start),P.size,!0,p)):P.end=T(o.tickIncrement(w(P.end),P.size,!1,p))),b.size=P.size,b.sizeFound||(v.size=P.size,i.nestedProperty(c[0],y+".size").set(P.size)),A("start",b,P),A("end",b,P)}d=e["_"+s+"pos0"],delete e["_"+s+"pos0"];var I=e._input[y]||{},D=i.extendFlat({},b),z=b.start,R=r.r2l(I.start),F=void 0!==R;if((b.startFound||F)&&R!==r.r2l(z)){var B=F?R:i.aggNums(Math.min,null,d),N={type:"category"===r.type||"multicategory"===r.type?"linear":r.type,r2l:r.r2l,dtick:b.size,tick0:z,calendar:p,range:[B,o.tickIncrement(B,b.size,!1,p)].map(r.l2r)},j=o.tickFirst(N);j>r.r2l(B)&&(j=o.tickIncrement(j,b.size,!0,p)),D.start=r.l2r(j),F||i.nestedProperty(e,y+".start").set(D.start)}var U=b.end,V=r.r2l(I.end),H=void 0!==V;if((b.endFound||H)&&V!==r.r2l(U)){var q=H?V:i.aggNums(Math.max,null,d);D.end=r.l2r(q),H||i.nestedProperty(e,y+".start").set(D.end)}var G="autobin"+s;return!1===e._input[G]&&(e._input[y]=i.extendFlat({},e[y]||{}),delete e._input[G],delete e[G]),[D,d]}t.exports={calc:function(t,e){var r,a,p,d,v=[],g=[],y="h"===e.orientation,m=o.getFromId(t,y?e.yaxis:e.xaxis),x=y?"y":"x",b={x:"y",y:"x"}[x],_=e[x+"calendar"],w=e.cumulative,T=h(t,e,m,x),k=T[0],A=T[1],M="string"==typeof k.size,S=[],E=M?S:k,L=[],C=[],P=[],O=0,I=e.histnorm,D=e.histfunc,z=-1!==I.indexOf("density");w.enabled&&z&&(I=I.replace(/ ?density$/,""),z=!1);var R,F="max"===D||"min"===D?null:0,B=l.count,N=u[I],j=!1,U=function(t){return m.r2c(t,0,_)};for(i.isArrayOrTypedArray(e[b])&&"count"!==D&&(R=e[b],j="avg"===D,B=l[D]),r=U(k.start),p=U(k.end)+(r-o.tickIncrement(r,k.size,!1,_))/1e6;r<p&&v.length<1e6&&(a=o.tickIncrement(r,k.size,!1,_),v.push((r+a)/2),g.push(F),P.push([]),S.push(r),z&&L.push(1/(a-r)),j&&C.push(0),!(a<=r));)r=a;S.push(r),M||"date"!==m.type||(E={start:U(E.start),end:U(E.end),size:E.size}),t._fullLayout._roundFnOpts||(t._fullLayout._roundFnOpts={});var V=e["_"+x+"bingroup"],H={leftGap:1/0,rightGap:1/0};V&&(t._fullLayout._roundFnOpts[V]||(t._fullLayout._roundFnOpts[V]=H),H=t._fullLayout._roundFnOpts[V]);var q,G=g.length,Z=!0,Y=H.leftGap,W=H.rightGap,X={};for(r=0;r<A.length;r++){var J=A[r];(d=i.findBin(J,E))>=0&&d<G&&(O+=B(d,r,g,R,C),Z&&P[d].length&&J!==A[P[d][0]]&&(Z=!1),P[d].push(r),X[r]=d,Y=Math.min(Y,J-S[d]),W=Math.min(W,S[d+1]-J))}H.leftGap=Y,H.rightGap=W,Z||(q=function(e,r){return function(){var n=t._fullLayout._roundFnOpts[V];return f(n.leftGap,n.rightGap,S,m,_)(e,r)}}),j&&(O=c(g,C)),N&&N(g,O,L),w.enabled&&function(t,e,r){var n,i,a;function o(e){a=t[e],t[e]/=2}function s(e){i=t[e],t[e]=a+i/2,a+=i}if("half"===r)if("increasing"===e)for(o(0),n=1;n<t.length;n++)s(n);else for(o(t.length-1),n=t.length-2;n>=0;n--)s(n);else if("increasing"===e){for(n=1;n<t.length;n++)t[n]+=t[n-1];"exclude"===r&&(t.unshift(0),t.pop())}else{for(n=t.length-2;n>=0;n--)t[n]+=t[n+1];"exclude"===r&&(t.push(0),t.shift())}}(g,w.direction,w.currentbin);var K=Math.min(v.length,g.length),$=[],Q=0,tt=K-1;for(r=0;r<K;r++)if(g[r]){Q=r;break}for(r=K-1;r>=Q;r--)if(g[r]){tt=r;break}for(r=Q;r<=tt;r++)if(n(v[r])&&n(g[r])){var et={p:v[r],s:g[r],b:0};w.enabled||(et.pts=P[r],Z?et.ph0=et.ph1=P[r].length?A[P[r][0]]:v[r]:(e._computePh=!0,et.ph0=q(S[r]),et.ph1=q(S[r+1],!0))),$.push(et)}return 1===$.length&&($[0].width1=o.tickIncrement($[0].p,k.size,!1,_)-$[0].p),s($,e),i.isArrayOrTypedArray(e.selectedpoints)&&i.tagSelected($,e,X),$},calcAllAutoBins:h}},72406:function(t){"use strict";t.exports={eventDataKeys:["binNumber"]}},82222:function(t,e,r){"use strict";var n=r(71828),i=r(41675),a=r(73972).traceIs,o=r(26125),s=n.nestedProperty,l=r(99082).getAxisGroup,u=[{aStr:{x:"xbins.start",y:"ybins.start"},name:"start"},{aStr:{x:"xbins.end",y:"ybins.end"},name:"end"},{aStr:{x:"xbins.size",y:"ybins.size"},name:"size"},{aStr:{x:"nbinsx",y:"nbinsy"},name:"nbins"}],c=["x","y"];t.exports=function(t,e){var r,f,h,p,d,v,g,y=e._histogramBinOpts={},m=[],x={},b=[];function _(t,e){return n.coerce(r._input,r,r._module.attributes,t,e)}function w(t){return"v"===t.orientation?"x":"y"}function T(t,r,a){var o=t.uid+"__"+a;r||(r=o);var s=function(t,r){return i.getFromTrace({_fullLayout:e},t,r).type}(t,a),l=t[a+"calendar"]||"",u=y[r],c=!0;u&&(s===u.axType&&l===u.calendar?(c=!1,u.traces.push(t),u.dirs.push(a)):(r=o,s!==u.axType&&n.warn(["Attempted to group the bins of trace",t.index,"set on a","type:"+s,"axis","with bins on","type:"+u.axType,"axis."].join(" ")),l!==u.calendar&&n.warn(["Attempted to group the bins of trace",t.index,"set with a",l,"calendar","with bins",u.calendar?"on a "+u.calendar+" calendar":"w/o a set calendar"].join(" ")))),c&&(y[r]={traces:[t],dirs:[a],axType:s,calendar:t[a+"calendar"]||""}),t["_"+a+"bingroup"]=r}for(d=0;d<t.length;d++)r=t[d],a(r,"histogram")&&(m.push(r),delete r._xautoBinFinished,delete r._yautoBinFinished,a(r,"2dMap")||o(r._input,r,e,_));var k=e._alignmentOpts||{};for(d=0;d<m.length;d++){if(r=m[d],h="",!a(r,"2dMap")){if(p=w(r),"group"===e.barmode&&r.alignmentgroup){var A=r[p+"axis"],M=l(e,A)+r.orientation;(k[M]||{})[r.alignmentgroup]&&(h=M)}h||"overlay"===e.barmode||(h=l(e,r.xaxis)+l(e,r.yaxis)+w(r))}h?(x[h]||(x[h]=[]),x[h].push(r)):b.push(r)}for(h in x)if(1!==(f=x[h]).length){var S=!1;for(f.length&&(r=f[0],S=_("bingroup")),h=S||h,d=0;d<f.length;d++){var E=(r=f[d])._input.bingroup;E&&E!==h&&n.warn(["Trace",r.index,"must match","within bingroup",h+".","Ignoring its bingroup:",E,"setting."].join(" ")),r.bingroup=h,T(r,h,w(r))}}else b.push(f[0]);for(d=0;d<b.length;d++){r=b[d];var L=_("bingroup");if(a(r,"2dMap"))for(g=0;g<2;g++){var C=_((p=c[g])+"bingroup",L?L+"__"+p:null);T(r,C,p)}else T(r,L,w(r))}for(h in y){var P=y[h];for(f=P.traces,v=0;v<u.length;v++){var O,I,D=u[v],z=D.name;if("nbins"!==z||!P.sizeFound){for(d=0;d<f.length;d++){if(r=f[d],p=P.dirs[d],O=D.aStr[p],void 0!==s(r._input,O).get()){P[z]=_(O),P[z+"Found"]=!0;break}(I=(r._autoBin||{})[p]||{})[z]&&s(r,O).set(I[z])}if("start"===z||"end"===z)for(;d<f.length;d++)(r=f[d])["_"+p+"bingroup"]&&_(O,(I=(r._autoBin||{})[p]||{})[z]);"nbins"!==z||P.sizeFound||P.nbinsFound||(r=f[0],P[z]=_(O))}}}}},11385:function(t,e,r){"use strict";var n=r(73972),i=r(71828),a=r(7901),o=r(90769).handleText,s=r(98340),l=r(7745);t.exports=function(t,e,r,u){function c(r,n){return i.coerce(t,e,l,r,n)}var f=c("x"),h=c("y");c("cumulative.enabled")&&(c("cumulative.direction"),c("cumulative.currentbin")),c("text");var p=c("textposition");o(t,e,u,c,p,{moduleHasSelected:!0,moduleHasUnselected:!0,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),c("hovertext"),c("hovertemplate"),c("xhoverformat"),c("yhoverformat");var d=c("orientation",h&&!f?"h":"v"),v="v"===d?"x":"y",g="v"===d?"y":"x",y=f&&h?Math.min(i.minRowLength(f)&&i.minRowLength(h)):i.minRowLength(e[v]||[]);if(y){e._length=y,n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y"],u),e[g]&&c("histfunc"),c("histnorm"),c("autobin"+v),s(t,e,c,r,u),i.coerceSelectionMarkerOpacity(e,c);var m=(e.marker.line||{}).color,x=n.getComponentMethod("errorbars","supplyDefaults");x(t,e,m||a.defaultLine,{axis:"y"}),x(t,e,m||a.defaultLine,{axis:"x",inherit:"y"})}else e.visible=!1}},84402:function(t){"use strict";t.exports=function(t,e,r,n,i){if(t.x="xVal"in e?e.xVal:e.x,t.y="yVal"in e?e.yVal:e.y,"zLabelVal"in e&&(t.z=e.zLabelVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),!(r.cumulative||{}).enabled){var a,o=Array.isArray(i)?n[0].pts[i[0]][i[1]]:n[i].pts;if(t.pointNumbers=o,t.binNumber=t.pointNumber,delete t.pointNumber,delete t.pointIndex,r._indexToPoints){a=[];for(var s=0;s<o.length;s++)a=a.concat(r._indexToPoints[o[s]])}else a=o;t.pointIndices=a}return t}},76440:function(t,e,r){"use strict";var n=r(95423).hoverPoints,i=r(89298).hoverLabelText;t.exports=function(t,e,r,a,o){var s=n(t,e,r,a,o);if(s){var l=(t=s[0]).cd[t.index],u=t.cd[0].trace;if(!u.cumulative.enabled){var c="h"===u.orientation?"y":"x";t[c+"Label"]=i(t[c+"a"],[l.ph0,l.ph1],u[c+"hoverformat"])}return s}}},36071:function(t,e,r){"use strict";t.exports={attributes:r(7745),layoutAttributes:r(43641),supplyDefaults:r(11385),crossTraceDefaults:r(82222),supplyLayoutDefaults:r(13957),calc:r(72138).calc,crossTraceCalc:r(11661).crossTraceCalc,plot:r(17295).plot,layerName:"barlayer",style:r(16688).style,styleOnSelect:r(16688).styleOnSelect,colorbar:r(4898),hoverPoints:r(76440),selectPoints:r(81974),eventData:r(84402),moduleType:"trace",name:"histogram",basePlotModule:r(93612),categories:["bar-like","cartesian","svg","bar","histogram","oriented","errorBarsOK","showLegend"],meta:{}}},36362:function(t){"use strict";t.exports={percent:function(t,e){for(var r=t.length,n=100/e,i=0;i<r;i++)t[i]*=n},probability:function(t,e){for(var r=t.length,n=0;n<r;n++)t[n]/=e},density:function(t,e,r,n){var i=t.length;n=n||1;for(var a=0;a<i;a++)t[a]*=r[a]*n},"probability density":function(t,e,r,n){var i=t.length;n&&(e/=n);for(var a=0;a<i;a++)t[a]*=r[a]/e}}},35361:function(t,e,r){"use strict";var n=r(7745),i=r(17656),a=r(21606),o=r(9012),s=r(12663).axisHoverFormat,l=r(5386).fF,u=r(5386).si,c=r(50693),f=r(1426).extendFlat;t.exports=f({x:n.x,y:n.y,z:{valType:"data_array",editType:"calc"},marker:{color:{valType:"data_array",editType:"calc"},editType:"calc"},histnorm:n.histnorm,histfunc:n.histfunc,nbinsx:n.nbinsx,xbins:i("x"),nbinsy:n.nbinsy,ybins:i("y"),autobinx:n.autobinx,autobiny:n.autobiny,bingroup:f({},n.bingroup,{}),xbingroup:f({},n.bingroup,{}),ybingroup:f({},n.bingroup,{}),xgap:a.xgap,ygap:a.ygap,zsmooth:a.zsmooth,xhoverformat:s("x"),yhoverformat:s("y"),zhoverformat:s("z",1),hovertemplate:l({},{keys:"z"}),texttemplate:u({arrayOk:!1,editType:"plot"},{keys:"z"}),textfont:a.textfont,showlegend:f({},o.showlegend,{dflt:!1})},c("",{cLetter:"z",autoColorDflt:!1}))},17562:function(t,e,r){"use strict";var n=r(71828),i=r(89298),a=r(59575),o=r(36362),s=r(42174),l=r(40965),u=r(72138).calcAllAutoBins;function c(t,e,r,n){var i,a=new Array(t);if(n)for(i=0;i<t;i++)a[i]=1/(e[i+1]-e[i]);else{var o=1/r;for(i=0;i<t;i++)a[i]=o}return a}function f(t,e){return{start:t(e.start),end:t(e.end),size:e.size}}function h(t,e,r,n,i,a){var o,s=t.length-1,u=new Array(s),c=l(r,n,t,i,a);for(o=0;o<s;o++){var f=(e||[])[o];u[o]=void 0===f?[c(t[o]),c(t[o+1],!0)]:[f,f]}return u}t.exports=function(t,e){var r,l,p,d,v=i.getFromId(t,e.xaxis),g=i.getFromId(t,e.yaxis),y=e.xcalendar,m=e.ycalendar,x=function(t){return v.r2c(t,0,y)},b=function(t){return g.r2c(t,0,m)},_=u(t,e,v,"x"),w=_[0],T=_[1],k=u(t,e,g,"y"),A=k[0],M=k[1],S=e._length;T.length>S&&T.splice(S,T.length-S),M.length>S&&M.splice(S,M.length-S);var E=[],L=[],C=[],P="string"==typeof w.size,O="string"==typeof A.size,I=[],D=[],z=P?I:w,R=O?D:A,F=0,B=[],N=[],j=e.histnorm,U=e.histfunc,V=-1!==j.indexOf("density"),H="max"===U||"min"===U?null:0,q=a.count,G=o[j],Z=!1,Y=[],W=[],X="z"in e?e.z:"marker"in e&&Array.isArray(e.marker.color)?e.marker.color:"";X&&"count"!==U&&(Z="avg"===U,q=a[U]);var J=w.size,K=x(w.start),$=x(w.end)+(K-i.tickIncrement(K,J,!1,y))/1e6;for(r=K;r<$;r=i.tickIncrement(r,J,!1,y))L.push(H),I.push(r),Z&&C.push(0);I.push(r);var Q,tt=L.length,et=(r-K)/tt,rt=(Q=K+et/2,v.c2r(Q,0,y)),nt=A.size,it=b(A.start),at=b(A.end)+(it-i.tickIncrement(it,nt,!1,m))/1e6;for(r=it;r<at;r=i.tickIncrement(r,nt,!1,m)){E.push(L.slice()),D.push(r);var ot=new Array(tt);for(l=0;l<tt;l++)ot[l]=[];N.push(ot),Z&&B.push(C.slice())}D.push(r);var st=E.length,lt=(r-it)/st,ut=function(t){return g.c2r(t,0,m)}(it+lt/2);V&&(Y=c(L.length,z,et,P),W=c(E.length,R,lt,O)),P||"date"!==v.type||(z=f(x,z)),O||"date"!==g.type||(R=f(b,R));var ct=!0,ft=!0,ht=new Array(tt),pt=new Array(st),dt=1/0,vt=1/0,gt=1/0,yt=1/0;for(r=0;r<S;r++){var mt=T[r],xt=M[r];p=n.findBin(mt,z),d=n.findBin(xt,R),p>=0&&p<tt&&d>=0&&d<st&&(F+=q(p,r,E[d],X,B[d]),N[d][p].push(r),ct&&(void 0===ht[p]?ht[p]=mt:ht[p]!==mt&&(ct=!1)),ft&&(void 0===pt[d]?pt[d]=xt:pt[d]!==xt&&(ft=!1)),dt=Math.min(dt,mt-I[p]),vt=Math.min(vt,I[p+1]-mt),gt=Math.min(gt,xt-D[d]),yt=Math.min(yt,D[d+1]-xt))}if(Z)for(d=0;d<st;d++)F+=s(E[d],B[d]);if(G)for(d=0;d<st;d++)G(E[d],F,Y,W[d]);return{x:T,xRanges:h(I,ct&&ht,dt,vt,v,y),x0:rt,dx:et,y:M,yRanges:h(D,ft&&pt,gt,yt,g,m),y0:ut,dy:lt,z:E,pts:N}}},93888:function(t,e,r){"use strict";var n=r(71828),i=r(75238),a=r(49901),o=r(1586),s=r(58623),l=r(35361);t.exports=function(t,e,r,u){function c(r,i){return n.coerce(t,e,l,r,i)}i(t,e,c,u),!1!==e.visible&&(a(t,e,c,u),o(t,e,u,c,{prefix:"",cLetter:"z"}),c("hovertemplate"),s(c,u),c("xhoverformat"),c("yhoverformat"))}},76128:function(t,e,r){"use strict";var n=r(46248),i=r(89298).hoverLabelText;t.exports=function(t,e,r,a,o){var s=n(t,e,r,a,o);if(s){var l=(t=s[0]).index,u=l[0],c=l[1],f=t.cd[0],h=f.trace,p=f.xRanges[c],d=f.yRanges[u];return t.xLabel=i(t.xa,[p[0],p[1]],h.xhoverformat),t.yLabel=i(t.ya,[d[0],d[1]],h.yhoverformat),s}}},43905:function(t,e,r){"use strict";t.exports={attributes:r(35361),supplyDefaults:r(93888),crossTraceDefaults:r(82222),calc:r(90757),plot:r(50347),layerName:"heatmaplayer",colorbar:r(61243),style:r(70035),hoverPoints:r(76128),eventData:r(84402),moduleType:"trace",name:"histogram2d",basePlotModule:r(93612),categories:["cartesian","svg","2dMap","histogram","showLegend"],meta:{}}},75238:function(t,e,r){"use strict";var n=r(73972),i=r(71828);t.exports=function(t,e,r,a){var o=r("x"),s=r("y"),l=i.minRowLength(o),u=i.minRowLength(s);l&&u?(e._length=Math.min(l,u),n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y"],a),(r("z")||r("marker.color"))&&r("histfunc"),r("histnorm"),r("autobinx"),r("autobiny")):e.visible=!1}},99066:function(t,e,r){"use strict";var n=r(35361),i=r(70600),a=r(50693),o=r(12663).axisHoverFormat,s=r(1426).extendFlat;t.exports=s({x:n.x,y:n.y,z:n.z,marker:n.marker,histnorm:n.histnorm,histfunc:n.histfunc,nbinsx:n.nbinsx,xbins:n.xbins,nbinsy:n.nbinsy,ybins:n.ybins,autobinx:n.autobinx,autobiny:n.autobiny,bingroup:n.bingroup,xbingroup:n.xbingroup,ybingroup:n.ybingroup,autocontour:i.autocontour,ncontours:i.ncontours,contours:i.contours,line:{color:i.line.color,width:s({},i.line.width,{dflt:.5}),dash:i.line.dash,smoothing:i.line.smoothing,editType:"plot"},xhoverformat:o("x"),yhoverformat:o("y"),zhoverformat:o("z",1),hovertemplate:n.hovertemplate,texttemplate:i.texttemplate,textfont:i.textfont},a("",{cLetter:"z",editTypeOverride:"calc"}))},62654:function(t,e,r){"use strict";var n=r(71828),i=r(75238),a=r(67217),o=r(8724),s=r(58623),l=r(99066);t.exports=function(t,e,r,u){function c(r,i){return n.coerce(t,e,l,r,i)}i(t,e,c,u),!1!==e.visible&&(a(t,e,c,(function(r){return n.coerce2(t,e,l,r)})),o(t,e,c,u),c("xhoverformat"),c("yhoverformat"),c("hovertemplate"),e.contours&&"heatmap"===e.contours.coloring&&s(c,u))}},35902:function(t,e,r){"use strict";t.exports={attributes:r(99066),supplyDefaults:r(62654),crossTraceDefaults:r(82222),calc:r(27529),plot:r(29854).plot,layerName:"contourlayer",style:r(84426),colorbar:r(90654),hoverPoints:r(52421),moduleType:"trace",name:"histogram2dcontour",basePlotModule:r(93612),categories:["cartesian","svg","2dMap","contour","histogram","showLegend"],meta:{}}},46291:function(t,e,r){"use strict";var n=r(5386).fF,i=r(5386).si,a=r(50693),o=r(27670).Y,s=r(34e3),l=r(57564),u=r(45802),c=r(43473),f=r(1426).extendFlat,h=r(79952).u;t.exports={labels:l.labels,parents:l.parents,values:l.values,branchvalues:l.branchvalues,count:l.count,level:l.level,maxdepth:l.maxdepth,tiling:{orientation:{valType:"enumerated",values:["v","h"],dflt:"h",editType:"plot"},flip:u.tiling.flip,pad:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"calc"},marker:f({colors:l.marker.colors,line:l.marker.line,pattern:h,editType:"calc"},a("marker",{colorAttr:"colors",anim:!1})),leaf:l.leaf,pathbar:u.pathbar,text:s.text,textinfo:l.textinfo,texttemplate:i({editType:"plot"},{keys:c.eventDataKeys.concat(["label","value"])}),hovertext:s.hovertext,hoverinfo:l.hoverinfo,hovertemplate:n({},{keys:c.eventDataKeys}),textfont:s.textfont,insidetextfont:s.insidetextfont,outsidetextfont:u.outsidetextfont,textposition:u.textposition,sort:s.sort,root:l.root,domain:o({name:"icicle",trace:!0,editType:"calc"})}},96346:function(t,e,r){"use strict";var n=r(74875);e.name="icicle",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},46584:function(t,e,r){"use strict";var n=r(52147);e.y=function(t,e){return n.calc(t,e)},e.T=function(t){return n._runCrossTraceCalc("icicle",t)}},56524:function(t,e,r){"use strict";var n=r(71828),i=r(46291),a=r(7901),o=r(27670).c,s=r(90769).handleText,l=r(97313).TEXTPAD,u=r(37434).handleMarkerDefaults,c=r(21081),f=c.hasColorscale,h=c.handleDefaults;t.exports=function(t,e,r,c){function p(r,a){return n.coerce(t,e,i,r,a)}var d=p("labels"),v=p("parents");if(d&&d.length&&v&&v.length){var g=p("values");g&&g.length?p("branchvalues"):p("count"),p("level"),p("maxdepth"),p("tiling.orientation"),p("tiling.flip"),p("tiling.pad");var y=p("text");p("texttemplate"),e.texttemplate||p("textinfo",Array.isArray(y)?"text+label":"label"),p("hovertext"),p("hovertemplate");var m=p("pathbar.visible");s(t,e,c,p,"auto",{hasPathbar:m,moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),p("textposition"),u(t,e,c,p);var x=e._hasColorscale=f(t,"marker","colors")||(t.marker||{}).coloraxis;x&&h(t,e,c,p,{prefix:"marker.",cLetter:"c"}),p("leaf.opacity",x?1:.7),e._hovered={marker:{line:{width:2,color:a.contrast(c.paper_bgcolor)}}},m&&(p("pathbar.thickness",e.pathbar.textfont.size+2*l),p("pathbar.side"),p("pathbar.edgeshape")),p("sort"),p("root.color"),o(e,c,p),e._length=null}else e.visible=!1}},90666:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=r(91424),o=r(63893),s=r(21538),l=r(82454).styleOne,u=r(43473),c=r(2791),f=r(83523),h=r(24714).formatSliceLabel,p=!1;t.exports=function(t,e,r,d,v){var g=v.width,y=v.height,m=v.viewX,x=v.viewY,b=v.pathSlice,_=v.toMoveInsideSlice,w=v.strTransform,T=v.hasTransition,k=v.handleSlicesExit,A=v.makeUpdateSliceInterpolator,M=v.makeUpdateTextInterpolator,S=v.prevEntry,E=t._context.staticPlot,L=t._fullLayout,C=e[0].trace,P=-1!==C.textposition.indexOf("left"),O=-1!==C.textposition.indexOf("right"),I=-1!==C.textposition.indexOf("bottom"),D=s(r,[g,y],{flipX:C.tiling.flip.indexOf("x")>-1,flipY:C.tiling.flip.indexOf("y")>-1,orientation:C.tiling.orientation,pad:{inner:C.tiling.pad},maxDepth:C._maxDepth}).descendants(),z=1/0,R=-1/0;D.forEach((function(t){var e=t.depth;e>=C._maxDepth?(t.x0=t.x1=(t.x0+t.x1)/2,t.y0=t.y1=(t.y0+t.y1)/2):(z=Math.min(z,e),R=Math.max(R,e))})),d=d.data(D,c.getPtId),C._maxVisibleLayers=isFinite(R)?R-z+1:0,d.enter().append("g").classed("slice",!0),k(d,p,{},[g,y],b),d.order();var F=null;if(T&&S){var B=c.getPtId(S);d.each((function(t){null===F&&c.getPtId(t)===B&&(F={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1})}))}var N=function(){return F||{x0:0,x1:g,y0:0,y1:y}},j=d;return T&&(j=j.transition().each("end",(function(){var e=n.select(this);c.setSliceCursor(e,t,{hideOnRoot:!0,hideOnLeaves:!1,isTransitioning:!1})}))),j.each((function(s){s._x0=m(s.x0),s._x1=m(s.x1),s._y0=x(s.y0),s._y1=x(s.y1),s._hoverX=m(s.x1-C.tiling.pad),s._hoverY=x(I?s.y1-C.tiling.pad/2:s.y0+C.tiling.pad/2);var d=n.select(this),v=i.ensureSingle(d,"path","surface",(function(t){t.style("pointer-events",E?"none":"all")}));T?v.transition().attrTween("d",(function(t){var e=A(t,p,N(),[g,y],{orientation:C.tiling.orientation,flipX:C.tiling.flip.indexOf("x")>-1,flipY:C.tiling.flip.indexOf("y")>-1});return function(t){return b(e(t))}})):v.attr("d",b),d.call(f,r,t,e,{styleOne:l,eventDataKeys:u.eventDataKeys,transitionTime:u.CLICK_TRANSITION_TIME,transitionEasing:u.CLICK_TRANSITION_EASING}).call(c.setSliceCursor,t,{isTransitioning:t._transitioning}),v.call(l,s,C,t,{hovered:!1}),s.x0===s.x1||s.y0===s.y1?s._text="":s._text=h(s,r,C,e,L)||"";var k=i.ensureSingle(d,"g","slicetext"),S=i.ensureSingle(k,"text","",(function(t){t.attr("data-notex",1)})),D=i.ensureUniformFontSize(t,c.determineTextFont(C,s,L.font));S.text(s._text||" ").classed("slicetext",!0).attr("text-anchor",O?"end":P?"start":"middle").call(a.font,D).call(o.convertToTspans,t),s.textBB=a.bBox(S.node()),s.transform=_(s,{fontSize:D.size}),s.transform.fontSize=D.size,T?S.transition().attrTween("transform",(function(t){var e=M(t,p,N(),[g,y]);return function(t){return w(e(t))}})):S.attr("transform",w(s))})),F}},69816:function(t,e,r){"use strict";t.exports={moduleType:"trace",name:"icicle",basePlotModule:r(96346),categories:[],animatable:!0,attributes:r(46291),layoutAttributes:r(92894),supplyDefaults:r(56524),supplyLayoutDefaults:r(21070),calc:r(46584).y,crossTraceCalc:r(46584).T,plot:r(85596),style:r(82454).style,colorbar:r(4898),meta:{}}},92894:function(t){"use strict";t.exports={iciclecolorway:{valType:"colorlist",editType:"calc"},extendiciclecolors:{valType:"boolean",dflt:!0,editType:"calc"}}},21070:function(t,e,r){"use strict";var n=r(71828),i=r(92894);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r("iciclecolorway",e.colorway),r("extendiciclecolors")}},21538:function(t,e,r){"use strict";var n=r(674),i=r(14102);t.exports=function(t,e,r){var a=r.flipX,o=r.flipY,s="h"===r.orientation,l=r.maxDepth,u=e[0],c=e[1];l&&(u=(t.height+1)*e[0]/Math.min(t.height+1,l),c=(t.height+1)*e[1]/Math.min(t.height+1,l));var f=n.partition().padding(r.pad.inner).size(s?[e[1],u]:[e[0],c])(t);return(s||a||o)&&i(f,e,{swapXY:s,flipX:a,flipY:o}),f}},85596:function(t,e,r){"use strict";var n=r(80694),i=r(90666);t.exports=function(t,e,r,a){return n(t,e,r,a,{type:"icicle",drawDescendants:i})}},82454:function(t,e,r){"use strict";var n=r(39898),i=r(7901),a=r(71828),o=r(72597).resizeText,s=r(43467);function l(t,e,r,n){var o=e.data.data,l=!e.children,u=o.i,c=a.castOption(r,u,"marker.line.color")||i.defaultLine,f=a.castOption(r,u,"marker.line.width")||0;t.call(s,e,r,n).style("stroke-width",f).call(i.stroke,c).style("opacity",l?r.leaf.opacity:null)}t.exports={style:function(t){var e=t._fullLayout._iciclelayer.selectAll(".trace");o(t,e,"icicle"),e.each((function(e){var r=n.select(this),i=e[0].trace;r.style("opacity",i.opacity),r.selectAll("path.surface").each((function(e){n.select(this).call(l,e,i,t)}))}))},styleOne:l}},17230:function(t,e,r){"use strict";for(var n=r(9012),i=r(5386).fF,a=r(1426).extendFlat,o=r(51877).colormodel,s=["rgb","rgba","rgba256","hsl","hsla"],l=[],u=[],c=0;c<s.length;c++){var f=o[s[c]];l.push("For the `"+s[c]+"` colormodel, it is ["+(f.zminDflt||f.min).join(", ")+"]."),u.push("For the `"+s[c]+"` colormodel, it is ["+(f.zmaxDflt||f.max).join(", ")+"].")}t.exports=a({source:{valType:"string",editType:"calc"},z:{valType:"data_array",editType:"calc"},colormodel:{valType:"enumerated",values:s,editType:"calc"},zsmooth:{valType:"enumerated",values:["fast",!1],dflt:!1,editType:"plot"},zmin:{valType:"info_array",items:[{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"}],editType:"calc"},zmax:{valType:"info_array",items:[{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"}],editType:"calc"},x0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes"},y0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes"},dx:{valType:"number",dflt:1,editType:"calc"},dy:{valType:"number",dflt:1,editType:"calc"},text:{valType:"data_array",editType:"plot"},hovertext:{valType:"data_array",editType:"plot"},hoverinfo:a({},n.hoverinfo,{flags:["x","y","z","color","name","text"],dflt:"x+y+z+text+name"}),hovertemplate:i({},{keys:["z","color","colormodel"]}),transforms:void 0})},71113:function(t,e,r){"use strict";var n=r(71828),i=r(51877),a=r(92770),o=r(89298),s=r(71828).maxRowLength,l=r(67395).A;function u(t,e,r,i){return function(a){return n.constrain((a-t)*e,r,i)}}function c(t,e){return function(r){return n.constrain(r,t,e)}}t.exports=function(t,e){var r,n;if(e._hasZ)r=e.z.length,n=s(e.z);else if(e._hasSource){var f=l(e.source);r=f.height,n=f.width}var h,p=o.getFromId(t,e.xaxis||"x"),d=o.getFromId(t,e.yaxis||"y"),v=p.d2c(e.x0)-e.dx/2,g=d.d2c(e.y0)-e.dy/2,y=[v,v+n*e.dx],m=[g,g+r*e.dy];if(p&&"log"===p.type)for(h=0;h<n;h++)y.push(v+h*e.dx);if(d&&"log"===d.type)for(h=0;h<r;h++)m.push(g+h*e.dy);return e._extremes[p._id]=o.findExtremes(p,y),e._extremes[d._id]=o.findExtremes(d,m),e._scaler=function(t){var e=i.colormodel[t.colormodel],r=(e.colormodel||t.colormodel).length;t._sArray=[];for(var n=0;n<r;n++)e.min[n]!==t.zmin[n]||e.max[n]!==t.zmax[n]?t._sArray.push(u(t.zmin[n],(e.max[n]-e.min[n])/(t.zmax[n]-t.zmin[n]),e.min[n],e.max[n])):t._sArray.push(c(e.min[n],e.max[n]));return function(e){for(var n=e.slice(0,r),i=0;i<r;i++){var o=n[i];if(!a(o))return!1;n[i]=t._sArray[i](o)}return n}}(e),[{x0:v,y0:g,z:e.z,w:n,h:r}]}},51877:function(t){"use strict";t.exports={colormodel:{rgb:{min:[0,0,0],max:[255,255,255],fmt:function(t){return t.slice(0,3)},suffix:["","",""]},rgba:{min:[0,0,0,0],max:[255,255,255,1],fmt:function(t){return t.slice(0,4)},suffix:["","","",""]},rgba256:{colormodel:"rgba",zminDflt:[0,0,0,0],zmaxDflt:[255,255,255,255],min:[0,0,0,0],max:[255,255,255,1],fmt:function(t){return t.slice(0,4)},suffix:["","","",""]},hsl:{min:[0,0,0],max:[360,100,100],fmt:function(t){var e=t.slice(0,3);return e[1]=e[1]+"%",e[2]=e[2]+"%",e},suffix:["°","%","%"]},hsla:{min:[0,0,0,0],max:[360,100,100,1],fmt:function(t){var e=t.slice(0,4);return e[1]=e[1]+"%",e[2]=e[2]+"%",e},suffix:["°","%","%",""]}}}},13245:function(t,e,r){"use strict";var n=r(71828),i=r(17230),a=r(51877),o=r(25095).IMAGE_URL_PREFIX;t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r("source"),e.source&&!e.source.match(o)&&delete e.source,e._hasSource=!!e.source;var s,l=r("z");e._hasZ=!(void 0===l||!l.length||!l[0]||!l[0].length),e._hasZ||e._hasSource?(r("x0"),r("y0"),r("dx"),r("dy"),e._hasZ?(r("colormodel","rgb"),r("zmin",(s=a.colormodel[e.colormodel]).zminDflt||s.min),r("zmax",s.zmaxDflt||s.max)):e._hasSource&&(e.colormodel="rgba256",s=a.colormodel[e.colormodel],e.zmin=s.zminDflt,e.zmax=s.zmaxDflt),r("zsmooth"),r("text"),r("hovertext"),r("hovertemplate"),e._length=null):e.visible=!1}},30835:function(t){"use strict";t.exports=function(t,e){return"xVal"in e&&(t.x=e.xVal),"yVal"in e&&(t.y=e.yVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t.color=e.color,t.colormodel=e.trace.colormodel,t.z||(t.z=e.color),t}},67395:function(t,e,r){"use strict";var n=r(33575),i=r(25095).IMAGE_URL_PREFIX,a=r(12856).Buffer;e.A=function(t){var e=t.replace(i,""),r=new a(e,"base64");return n(r)}},28749:function(t,e,r){"use strict";var n=r(30211),i=r(71828),a=r(51877);t.exports=function(t,e,r){var o=t.cd[0],s=o.trace,l=t.xa,u=t.ya;if(!(n.inbox(e-o.x0,e-(o.x0+o.w*s.dx),0)>0||n.inbox(r-o.y0,r-(o.y0+o.h*s.dy),0)>0)){var c,f=Math.floor((e-o.x0)/s.dx),h=Math.floor(Math.abs(r-o.y0)/s.dy);if(s._hasZ?c=o.z[h][f]:s._hasSource&&(c=s._canvas.el.getContext("2d",{willReadFrequently:!0}).getImageData(f,h,1,1).data),c){var p,d=o.hi||s.hoverinfo;if(d){var v=d.split("+");-1!==v.indexOf("all")&&(v=["color"]),-1!==v.indexOf("color")&&(p=!0)}var g,y=a.colormodel[s.colormodel],m=y.colormodel||s.colormodel,x=m.length,b=s._scaler(c),_=y.suffix,w=[];(s.hovertemplate||p)&&(w.push("["+[b[0]+_[0],b[1]+_[1],b[2]+_[2]].join(", ")),4===x&&w.push(", "+b[3]+_[3]),w.push("]"),w=w.join(""),t.extraText=m.toUpperCase()+": "+w),Array.isArray(s.hovertext)&&Array.isArray(s.hovertext[h])?g=s.hovertext[h][f]:Array.isArray(s.text)&&Array.isArray(s.text[h])&&(g=s.text[h][f]);var T=u.c2p(o.y0+(h+.5)*s.dy),k=o.x0+(f+.5)*s.dx,A=o.y0+(h+.5)*s.dy,M="["+c.slice(0,s.colormodel.length).join(", ")+"]";return[i.extendFlat(t,{index:[h,f],x0:l.c2p(o.x0+f*s.dx),x1:l.c2p(o.x0+(f+1)*s.dx),y0:T,y1:T,color:b,xVal:k,xLabelVal:k,yVal:A,yLabelVal:A,zLabelVal:M,text:g,hovertemplateLabels:{zLabel:M,colorLabel:w,"color[0]Label":b[0]+_[0],"color[1]Label":b[1]+_[1],"color[2]Label":b[2]+_[2],"color[3]Label":b[3]+_[3]}})]}}}},94507:function(t,e,r){"use strict";t.exports={attributes:r(17230),supplyDefaults:r(13245),calc:r(71113),plot:r(60775),style:r(12826),hoverPoints:r(28749),eventData:r(30835),moduleType:"trace",name:"image",basePlotModule:r(93612),categories:["cartesian","svg","2dMap","noSortingByValue"],animatable:!1,meta:{}}},60775:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=i.strTranslate,o=r(77922),s=r(51877),l=r(3883),u=r(32396).STYLE;t.exports=function(t,e,r,c){var f=e.xaxis,h=e.yaxis,p=!t._context._exportedPlot&&l();i.makeTraceGroups(c,r,"im").each((function(e){var r=n.select(this),l=e[0],c=l.trace,d=("fast"===c.zsmooth||!1===c.zsmooth&&p)&&!c._hasZ&&c._hasSource&&"linear"===f.type&&"linear"===h.type;c._realImage=d;var v,g,y,m,x,b,_=l.z,w=l.x0,T=l.y0,k=l.w,A=l.h,M=c.dx,S=c.dy;for(b=0;void 0===v&&b<k;)v=f.c2p(w+b*M),b++;for(b=k;void 0===g&&b>0;)g=f.c2p(w+b*M),b--;for(b=0;void 0===m&&b<A;)m=h.c2p(T+b*S),b++;for(b=A;void 0===x&&b>0;)x=h.c2p(T+b*S),b--;g<v&&(y=g,g=v,v=y),x<m&&(y=m,m=x,x=y),d||(v=Math.max(-.5*f._length,v),g=Math.min(1.5*f._length,g),m=Math.max(-.5*h._length,m),x=Math.min(1.5*h._length,x));var E=Math.round(g-v),L=Math.round(x-m);if(E<=0||L<=0)r.selectAll("image").data([]).exit().remove();else{var C=r.selectAll("image").data([e]);C.enter().append("svg:image").attr({xmlns:o.svg,preserveAspectRatio:"none"}),C.exit().remove();var P=!1===c.zsmooth?u:"";if(d){var O=i.simpleMap(f.range,f.r2l),I=i.simpleMap(h.range,h.r2l),D=O[1]<O[0],z=I[1]>I[0];if(D||z){var R=v+E/2,F=m+L/2;P+="transform:"+a(R+"px",F+"px")+"scale("+(D?-1:1)+","+(z?-1:1)+")"+a(-R+"px",-F+"px")+";"}}C.attr("style",P);var B=new Promise((function(t){if(c._hasZ)t();else if(c._hasSource)if(c._canvas&&c._canvas.el.width===k&&c._canvas.el.height===A&&c._canvas.source===c.source)t();else{var e=document.createElement("canvas");e.width=k,e.height=A;var r=e.getContext("2d",{willReadFrequently:!0});c._image=c._image||new Image;var n=c._image;n.onload=function(){r.drawImage(n,0,0),c._canvas={el:e,source:c.source},t()},n.setAttribute("src",c.source)}})).then((function(){var t,e;if(c._hasZ)e=N((function(t,e){return _[e][t]})),t=e.toDataURL("image/png");else if(c._hasSource)if(d)t=c.source;else{var r=c._canvas.el.getContext("2d",{willReadFrequently:!0}).getImageData(0,0,k,A).data;e=N((function(t,e){var n=4*(e*k+t);return[r[n],r[n+1],r[n+2],r[n+3]]})),t=e.toDataURL("image/png")}C.attr({"xlink:href":t,height:L,width:E,x:v,y:m})}));t._promises.push(B)}function N(t){var e=document.createElement("canvas");e.width=E,e.height=L;var r,n=e.getContext("2d",{willReadFrequently:!0}),a=function(t){return i.constrain(Math.round(f.c2p(w+t*M)-v),0,E)},o=function(t){return i.constrain(Math.round(h.c2p(T+t*S)-m),0,L)},u=s.colormodel[c.colormodel],p=u.colormodel||c.colormodel,d=u.fmt;for(b=0;b<l.w;b++){var g=a(b),y=a(b+1);if(y!==g&&!isNaN(y)&&!isNaN(g))for(var x=0;x<l.h;x++){var _=o(x),k=o(x+1);k===_||isNaN(k)||isNaN(_)||!t(b,x)||(r=c._scaler(t(b,x)),n.fillStyle=r?p+"("+d(r).join(",")+")":"rgba(0,0,0,0)",n.fillRect(g,_,y-g,k-_))}}return e}}))}},12826:function(t,e,r){"use strict";var n=r(39898);t.exports=function(t){n.select(t).selectAll(".im image").style("opacity",(function(t){return t[0].trace.opacity}))}},54846:function(t,e,r){"use strict";var n=r(1426).extendFlat,i=r(1426).extendDeep,a=r(30962).overrideAll,o=r(41940),s=r(22399),l=r(27670).Y,u=r(13838),c=r(44467).templatedArray,f=r(22372),h=r(12663).descriptionOnlyNumbers,p=o({editType:"plot",colorEditType:"plot"}),d={color:{valType:"color",editType:"plot"},line:{color:{valType:"color",dflt:s.defaultLine,editType:"plot"},width:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"calc"},thickness:{valType:"number",min:0,max:1,dflt:1,editType:"plot"},editType:"calc"},v={valType:"info_array",items:[{valType:"number",editType:"plot"},{valType:"number",editType:"plot"}],editType:"plot"},g=c("step",i({},d,{range:v}));t.exports={mode:{valType:"flaglist",editType:"calc",flags:["number","delta","gauge"],dflt:"number"},value:{valType:"number",editType:"calc",anim:!0},align:{valType:"enumerated",values:["left","center","right"],editType:"plot"},domain:l({name:"indicator",trace:!0,editType:"calc"}),title:{text:{valType:"string",editType:"plot"},align:{valType:"enumerated",values:["left","center","right"],editType:"plot"},font:n({},p,{}),editType:"plot"},number:{valueformat:{valType:"string",dflt:"",editType:"plot",description:h("value")},font:n({},p,{}),prefix:{valType:"string",dflt:"",editType:"plot"},suffix:{valType:"string",dflt:"",editType:"plot"},editType:"plot"},delta:{reference:{valType:"number",editType:"calc"},position:{valType:"enumerated",values:["top","bottom","left","right"],dflt:"bottom",editType:"plot"},relative:{valType:"boolean",editType:"plot",dflt:!1},valueformat:{valType:"string",editType:"plot",description:h("value")},increasing:{symbol:{valType:"string",dflt:f.INCREASING.SYMBOL,editType:"plot"},color:{valType:"color",dflt:f.INCREASING.COLOR,editType:"plot"},editType:"plot"},decreasing:{symbol:{valType:"string",dflt:f.DECREASING.SYMBOL,editType:"plot"},color:{valType:"color",dflt:f.DECREASING.COLOR,editType:"plot"},editType:"plot"},font:n({},p,{}),prefix:{valType:"string",dflt:"",editType:"plot"},suffix:{valType:"string",dflt:"",editType:"plot"},editType:"calc"},gauge:{shape:{valType:"enumerated",editType:"plot",dflt:"angular",values:["angular","bullet"]},bar:i({},d,{color:{dflt:"green"}}),bgcolor:{valType:"color",editType:"plot"},bordercolor:{valType:"color",dflt:s.defaultLine,editType:"plot"},borderwidth:{valType:"number",min:0,dflt:1,editType:"plot"},axis:a({range:v,visible:n({},u.visible,{dflt:!0}),tickmode:u.minor.tickmode,nticks:u.nticks,tick0:u.tick0,dtick:u.dtick,tickvals:u.tickvals,ticktext:u.ticktext,ticks:n({},u.ticks,{dflt:"outside"}),ticklen:u.ticklen,tickwidth:u.tickwidth,tickcolor:u.tickcolor,ticklabelstep:u.ticklabelstep,showticklabels:u.showticklabels,labelalias:u.labelalias,tickfont:o({}),tickangle:u.tickangle,tickformat:u.tickformat,tickformatstops:u.tickformatstops,tickprefix:u.tickprefix,showtickprefix:u.showtickprefix,ticksuffix:u.ticksuffix,showticksuffix:u.showticksuffix,separatethousands:u.separatethousands,exponentformat:u.exponentformat,minexponent:u.minexponent,showexponent:u.showexponent,editType:"plot"},"plot"),steps:g,threshold:{line:{color:n({},d.line.color,{}),width:n({},d.line.width,{dflt:1}),editType:"plot"},thickness:n({},d.thickness,{dflt:.85}),value:{valType:"number",editType:"calc",dflt:!1},editType:"plot"},editType:"plot"}}},15970:function(t,e,r){"use strict";var n=r(74875);e.name="indicator",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},24667:function(t){"use strict";t.exports={calc:function(t,e){var r=[],n=e.value;"number"!=typeof e._lastValue&&(e._lastValue=e.value);var i=e._lastValue,a=i;return e._hasDelta&&"number"==typeof e.delta.reference&&(a=e.delta.reference),r[0]={y:n,lastY:i,delta:n-a,relativeDelta:(n-a)/a},r}}},84577:function(t){"use strict";t.exports={defaultNumberFontSize:80,bulletNumberDomainSize:.25,bulletPadding:.025,innerRadius:.75,valueThickness:.5,titlePadding:5,horizontalPadding:10}},94425:function(t,e,r){"use strict";var n=r(71828),i=r(54846),a=r(27670).c,o=r(44467),s=r(85501),l=r(84577),u=r(26218),c=r(38701),f=r(96115),h=r(89426);function p(t,e){function r(r,a){return n.coerce(t,e,i.gauge.steps,r,a)}r("color"),r("line.color"),r("line.width"),r("range"),r("thickness")}t.exports={supplyDefaults:function(t,e,r,d){function v(r,a){return n.coerce(t,e,i,r,a)}a(e,d,v),v("mode"),e._hasNumber=-1!==e.mode.indexOf("number"),e._hasDelta=-1!==e.mode.indexOf("delta"),e._hasGauge=-1!==e.mode.indexOf("gauge");var g=v("value");e._range=[0,"number"==typeof g?1.5*g:1];var y,m,x,b,_,w,T=new Array(2);function k(t,e){return n.coerce(x,b,i.gauge,t,e)}function A(t,e){return n.coerce(_,w,i.gauge.axis,t,e)}if(e._hasNumber&&(v("number.valueformat"),v("number.font.color",d.font.color),v("number.font.family",d.font.family),v("number.font.size"),void 0===e.number.font.size&&(e.number.font.size=l.defaultNumberFontSize,T[0]=!0),v("number.prefix"),v("number.suffix"),y=e.number.font.size),e._hasDelta&&(v("delta.font.color",d.font.color),v("delta.font.family",d.font.family),v("delta.font.size"),void 0===e.delta.font.size&&(e.delta.font.size=(e._hasNumber?.5:1)*(y||l.defaultNumberFontSize),T[1]=!0),v("delta.reference",e.value),v("delta.relative"),v("delta.valueformat",e.delta.relative?"2%":""),v("delta.increasing.symbol"),v("delta.increasing.color"),v("delta.decreasing.symbol"),v("delta.decreasing.color"),v("delta.position"),v("delta.prefix"),v("delta.suffix"),m=e.delta.font.size),e._scaleNumbers=(!e._hasNumber||T[0])&&(!e._hasDelta||T[1])||!1,v("title.font.color",d.font.color),v("title.font.family",d.font.family),v("title.font.size",.25*(y||m||l.defaultNumberFontSize)),v("title.text"),e._hasGauge){(x=t.gauge)||(x={}),b=o.newContainer(e,"gauge"),k("shape"),(e._isBullet="bullet"===e.gauge.shape)||v("title.align","center"),(e._isAngular="angular"===e.gauge.shape)||v("align","center"),k("bgcolor",d.paper_bgcolor),k("borderwidth"),k("bordercolor"),k("bar.color"),k("bar.line.color"),k("bar.line.width"),k("bar.thickness",l.valueThickness*("bullet"===e.gauge.shape?.5:1)),s(x,b,{name:"steps",handleItemDefaults:p}),k("threshold.value"),k("threshold.thickness"),k("threshold.line.width"),k("threshold.line.color"),_={},x&&(_=x.axis||{}),w=o.newContainer(b,"axis"),A("visible"),e._range=A("range",e._range);var M={outerTicks:!0};u(_,w,A,"linear"),h(_,w,A,"linear",M),f(_,w,A,"linear",M),c(_,w,A,M)}else v("title.align","center"),v("align","center"),e._isAngular=e._isBullet=!1;e._length=null}}},15154:function(t,e,r){"use strict";t.exports={moduleType:"trace",name:"indicator",basePlotModule:r(15970),categories:["svg","noOpacity","noHover"],animatable:!0,attributes:r(54846),supplyDefaults:r(94425).supplyDefaults,calc:r(24667).calc,plot:r(75634),meta:{}}},75634:function(t,e,r){"use strict";var n=r(39898),i=r(81684).sX,a=r(81684).k4,o=r(71828),s=o.strScale,l=o.strTranslate,u=o.rad2deg,c=r(18783).MID_SHIFT,f=r(91424),h=r(84577),p=r(63893),d=r(89298),v=r(71453),g=r(52830),y=r(13838),m=r(7901),x={left:"start",center:"middle",right:"end"},b={left:0,center:.5,right:1},_=/[yzafpnµmkMGTPEZY]/;function w(t){return t&&t.duration>0}function T(t){t.each((function(t){m.stroke(n.select(this),t.line.color)})).each((function(t){m.fill(n.select(this),t.color)})).style("stroke-width",(function(t){return t.line.width}))}function k(t,e,r){var n=t._fullLayout,i=o.extendFlat({type:"linear",ticks:"outside",range:r,showline:!0},e),a={type:"linear",_id:"x"+e._id},s={letter:"x",font:n.font,noHover:!0,noTickson:!0};function l(t,e){return o.coerce(i,a,y,t,e)}return v(i,a,l,s,n),g(i,a,l,s),a}function A(t,e,r){return[Math.min(e/t.width,r/t.height),t,e+"x"+r]}function M(t,e,r,i){var a=document.createElementNS("http://www.w3.org/2000/svg","text"),o=n.select(a);return o.text(t).attr("x",0).attr("y",0).attr("text-anchor",r).attr("data-unformatted",t).call(p.convertToTspans,i).call(f.font,e),f.bBox(o.node())}function S(t,e,r,n,i,a){var s="_cache"+e;t[s]&&t[s].key===i||(t[s]={key:i,value:r});var l=o.aggNums(a,null,[t[s].value,n],2);return t[s].value=l,l}t.exports=function(t,e,r,v){var g,y=t._fullLayout;w(r)&&v&&(g=v()),o.makeTraceGroups(y._indicatorlayer,e,"trace").each((function(e){var v,E,L,C,P,O=e[0].trace,I=n.select(this),D=O._hasGauge,z=O._isAngular,R=O._isBullet,F=O.domain,B={w:y._size.w*(F.x[1]-F.x[0]),h:y._size.h*(F.y[1]-F.y[0]),l:y._size.l+y._size.w*F.x[0],r:y._size.r+y._size.w*(1-F.x[1]),t:y._size.t+y._size.h*(1-F.y[1]),b:y._size.b+y._size.h*F.y[0]},N=B.l+B.w/2,j=B.t+B.h/2,U=Math.min(B.w/2,B.h),V=h.innerRadius*U,H=O.align||"center";if(E=j,D){if(z&&(v=N,E=j+U/2,L=function(t){return function(t,e){return[e/Math.sqrt(t.width/2*(t.width/2)+t.height*t.height),t,e]}(t,.9*V)}),R){var q=h.bulletPadding,G=1-h.bulletNumberDomainSize+q;v=B.l+(G+(1-G)*b[H])*B.w,L=function(t){return A(t,(h.bulletNumberDomainSize-q)*B.w,B.h)}}}else v=B.l+b[H]*B.w,L=function(t){return A(t,B.w,B.h)};!function(t,e,r,i){var u,c,h,v=r[0].trace,g=i.numbersX,y=i.numbersY,T=v.align||"center",A=x[T],E=i.transitionOpts,L=i.onComplete,C=o.ensureSingle(e,"g","numbers"),P=[];v._hasNumber&&P.push("number"),v._hasDelta&&(P.push("delta"),"left"===v.delta.position&&P.reverse());var O=C.selectAll("text").data(P);function I(e,r,n,i){if(!e.match("s")||n>=0==i>=0||r(n).slice(-1).match(_)||r(i).slice(-1).match(_))return r;var a=e.slice().replace("s","f").replace(/\d+/,(function(t){return parseInt(t)-1})),o=k(t,{tickformat:a});return function(t){return Math.abs(t)<1?d.tickText(o,t).text:r(t)}}O.enter().append("text"),O.attr("text-anchor",(function(){return A})).attr("class",(function(t){return t})).attr("x",null).attr("y",null).attr("dx",null).attr("dy",null),O.exit().remove();var D,z=v.mode+v.align;if(v._hasDelta&&(D=function(){var e=k(t,{tickformat:v.delta.valueformat},v._range);e.setScale(),d.prepTicks(e);var i=function(t){return d.tickText(e,t).text},o=v.delta.suffix,s=v.delta.prefix,l=function(t){return v.delta.relative?t.relativeDelta:t.delta},u=function(t,e){return 0===t||"number"!=typeof t||isNaN(t)?"-":(t>0?v.delta.increasing.symbol:v.delta.decreasing.symbol)+s+e(t)+o},h=function(t){return t.delta>=0?v.delta.increasing.color:v.delta.decreasing.color};void 0===v._deltaLastValue&&(v._deltaLastValue=l(r[0]));var g=C.select("text.delta");function y(){g.text(u(l(r[0]),i)).call(m.fill,h(r[0])).call(p.convertToTspans,t)}return g.call(f.font,v.delta.font).call(m.fill,h({delta:v._deltaLastValue})),w(E)?g.transition().duration(E.duration).ease(E.easing).tween("text",(function(){var t=n.select(this),e=l(r[0]),o=v._deltaLastValue,s=I(v.delta.valueformat,i,o,e),c=a(o,e);return v._deltaLastValue=e,function(e){t.text(u(c(e),s)),t.call(m.fill,h({delta:c(e)}))}})).each("end",(function(){y(),L&&L()})).each("interrupt",(function(){y(),L&&L()})):y(),c=M(u(l(r[0]),i),v.delta.font,A,t),g}(),z+=v.delta.position+v.delta.font.size+v.delta.font.family+v.delta.valueformat,z+=v.delta.increasing.symbol+v.delta.decreasing.symbol,h=c),v._hasNumber&&(function(){var e=k(t,{tickformat:v.number.valueformat},v._range);e.setScale(),d.prepTicks(e);var i=function(t){return d.tickText(e,t).text},o=v.number.suffix,s=v.number.prefix,l=C.select("text.number");function c(){var e="number"==typeof r[0].y?s+i(r[0].y)+o:"-";l.text(e).call(f.font,v.number.font).call(p.convertToTspans,t)}w(E)?l.transition().duration(E.duration).ease(E.easing).each("end",(function(){c(),L&&L()})).each("interrupt",(function(){c(),L&&L()})).attrTween("text",(function(){var t=n.select(this),e=a(r[0].lastY,r[0].y);v._lastValue=r[0].y;var l=I(v.number.valueformat,i,r[0].lastY,r[0].y);return function(r){t.text(s+l(e(r))+o)}})):c(),u=M(s+i(r[0].y)+o,v.number.font,A,t)}(),z+=v.number.font.size+v.number.font.family+v.number.valueformat+v.number.suffix+v.number.prefix,h=u),v._hasDelta&&v._hasNumber){var R,F,B=[(u.left+u.right)/2,(u.top+u.bottom)/2],N=[(c.left+c.right)/2,(c.top+c.bottom)/2],j=.75*v.delta.font.size;"left"===v.delta.position&&(R=S(v,"deltaPos",0,-1*(u.width*b[v.align]+c.width*(1-b[v.align])+j),z,Math.min),F=B[1]-N[1],h={width:u.width+c.width+j,height:Math.max(u.height,c.height),left:c.left+R,right:u.right,top:Math.min(u.top,c.top+F),bottom:Math.max(u.bottom,c.bottom+F)}),"right"===v.delta.position&&(R=S(v,"deltaPos",0,u.width*(1-b[v.align])+c.width*b[v.align]+j,z,Math.max),F=B[1]-N[1],h={width:u.width+c.width+j,height:Math.max(u.height,c.height),left:u.left,right:c.right+R,top:Math.min(u.top,c.top+F),bottom:Math.max(u.bottom,c.bottom+F)}),"bottom"===v.delta.position&&(R=null,F=c.height,h={width:Math.max(u.width,c.width),height:u.height+c.height,left:Math.min(u.left,c.left),right:Math.max(u.right,c.right),top:u.bottom-u.height,bottom:u.bottom+c.height}),"top"===v.delta.position&&(R=null,F=u.top,h={width:Math.max(u.width,c.width),height:u.height+c.height,left:Math.min(u.left,c.left),right:Math.max(u.right,c.right),top:u.bottom-u.height-c.height,bottom:u.bottom}),D.attr({dx:R,dy:F})}(v._hasNumber||v._hasDelta)&&C.attr("transform",(function(){var t=i.numbersScaler(h);z+=t[2];var e,r=S(v,"numbersScale",1,t[0],z,Math.min);v._scaleNumbers||(r=1),e=v._isAngular?y-r*h.bottom:y-r*(h.top+h.bottom)/2,v._numbersTop=r*h.top+e;var n=h[T];"center"===T&&(n=(h.left+h.right)/2);var a=g-r*n;return a=S(v,"numbersTranslate",0,a,z,Math.max),l(a,e)+s(r)}))}(t,I,e,{numbersX:v,numbersY:E,numbersScaler:L,transitionOpts:r,onComplete:g}),D&&(C={range:O.gauge.axis.range,color:O.gauge.bgcolor,line:{color:O.gauge.bordercolor,width:0},thickness:1},P={range:O.gauge.axis.range,color:"rgba(0, 0, 0, 0)",line:{color:O.gauge.bordercolor,width:O.gauge.borderwidth},thickness:1});var Z=I.selectAll("g.angular").data(z?e:[]);Z.exit().remove();var Y=I.selectAll("g.angularaxis").data(z?e:[]);Y.exit().remove(),z&&function(t,e,r,a){var o,s,f,h,p=r[0].trace,v=a.size,g=a.radius,y=a.innerRadius,m=a.gaugeBg,x=a.gaugeOutline,b=[v.l+v.w/2,v.t+v.h/2+g/2],_=a.gauge,A=a.layer,M=a.transitionOpts,S=a.onComplete,E=Math.PI/2;function L(t){var e=p.gauge.axis.range[0],r=(t-e)/(p.gauge.axis.range[1]-e)*Math.PI-E;return r<-E?-E:r>E?E:r}function C(t){return n.svg.arc().innerRadius((y+g)/2-t/2*(g-y)).outerRadius((y+g)/2+t/2*(g-y)).startAngle(-E)}function P(t){t.attr("d",(function(t){return C(t.thickness).startAngle(L(t.range[0])).endAngle(L(t.range[1]))()}))}_.enter().append("g").classed("angular",!0),_.attr("transform",l(b[0],b[1])),A.enter().append("g").classed("angularaxis",!0).classed("crisp",!0),A.selectAll("g.xangularaxistick,path,text").remove(),(o=k(t,p.gauge.axis)).type="linear",o.range=p.gauge.axis.range,o._id="xangularaxis",o.ticklabeloverflow="allow",o.setScale();var O=function(t){return(o.range[0]-t.x)/(o.range[1]-o.range[0])*Math.PI+Math.PI},I={},D=d.makeLabelFns(o,0).labelStandoff;I.xFn=function(t){var e=O(t);return Math.cos(e)*D},I.yFn=function(t){var e=O(t),r=Math.sin(e)>0?.2:1;return-Math.sin(e)*(D+t.fontSize*r)+Math.abs(Math.cos(e))*(t.fontSize*c)},I.anchorFn=function(t){var e=O(t),r=Math.cos(e);return Math.abs(r)<.1?"middle":r>0?"start":"end"},I.heightFn=function(t,e,r){var n=O(t);return-.5*(1+Math.sin(n))*r};var z=function(t){return l(b[0]+g*Math.cos(t),b[1]-g*Math.sin(t))};f=function(t){return z(O(t))};if(s=d.calcTicks(o),h=d.getTickSigns(o)[2],o.visible){h="inside"===o.ticks?-1:1;var R=(o.linewidth||1)/2;d.drawTicks(t,o,{vals:s,layer:A,path:"M"+h*R+",0h"+h*o.ticklen,transFn:function(t){var e=O(t);return z(e)+"rotate("+-u(e)+")"}}),d.drawLabels(t,o,{vals:s,layer:A,transFn:f,labelFns:I})}var F=[m].concat(p.gauge.steps),B=_.selectAll("g.bg-arc").data(F);B.enter().append("g").classed("bg-arc",!0).append("path"),B.select("path").call(P).call(T),B.exit().remove();var N=C(p.gauge.bar.thickness),j=_.selectAll("g.value-arc").data([p.gauge.bar]);j.enter().append("g").classed("value-arc",!0).append("path");var U,V,H,q=j.select("path");w(M)?(q.transition().duration(M.duration).ease(M.easing).each("end",(function(){S&&S()})).each("interrupt",(function(){S&&S()})).attrTween("d",(U=N,V=L(r[0].lastY),H=L(r[0].y),function(){var t=i(V,H);return function(e){return U.endAngle(t(e))()}})),p._lastValue=r[0].y):q.attr("d","number"==typeof r[0].y?N.endAngle(L(r[0].y)):"M0,0Z"),q.call(T),j.exit().remove(),F=[];var G=p.gauge.threshold.value;(G||0===G)&&F.push({range:[G,G],color:p.gauge.threshold.color,line:{color:p.gauge.threshold.line.color,width:p.gauge.threshold.line.width},thickness:p.gauge.threshold.thickness});var Z=_.selectAll("g.threshold-arc").data(F);Z.enter().append("g").classed("threshold-arc",!0).append("path"),Z.select("path").call(P).call(T),Z.exit().remove();var Y=_.selectAll("g.gauge-outline").data([x]);Y.enter().append("g").classed("gauge-outline",!0).append("path"),Y.select("path").call(P).call(T),Y.exit().remove()}(t,0,e,{radius:U,innerRadius:V,gauge:Z,layer:Y,size:B,gaugeBg:C,gaugeOutline:P,transitionOpts:r,onComplete:g});var W=I.selectAll("g.bullet").data(R?e:[]);W.exit().remove();var X=I.selectAll("g.bulletaxis").data(R?e:[]);X.exit().remove(),R&&function(t,e,r,n){var i,a,o,s,u,c=r[0].trace,f=n.gauge,p=n.layer,v=n.gaugeBg,g=n.gaugeOutline,y=n.size,x=c.domain,b=n.transitionOpts,_=n.onComplete;f.enter().append("g").classed("bullet",!0),f.attr("transform",l(y.l,y.t)),p.enter().append("g").classed("bulletaxis",!0).classed("crisp",!0),p.selectAll("g.xbulletaxistick,path,text").remove();var A=y.h,M=c.gauge.bar.thickness*A,S=x.x[0],E=x.x[0]+(x.x[1]-x.x[0])*(c._hasNumber||c._hasDelta?1-h.bulletNumberDomainSize:1);function L(t){t.attr("width",(function(t){return Math.max(0,i.c2p(t.range[1])-i.c2p(t.range[0]))})).attr("x",(function(t){return i.c2p(t.range[0])})).attr("y",(function(t){return.5*(1-t.thickness)*A})).attr("height",(function(t){return t.thickness*A}))}(i=k(t,c.gauge.axis))._id="xbulletaxis",i.domain=[S,E],i.setScale(),a=d.calcTicks(i),o=d.makeTransTickFn(i),s=d.getTickSigns(i)[2],u=y.t+y.h,i.visible&&(d.drawTicks(t,i,{vals:"inside"===i.ticks?d.clipEnds(i,a):a,layer:p,path:d.makeTickPath(i,u,s),transFn:o}),d.drawLabels(t,i,{vals:a,layer:p,transFn:o,labelFns:d.makeLabelFns(i,u)}));var C=[v].concat(c.gauge.steps),P=f.selectAll("g.bg-bullet").data(C);P.enter().append("g").classed("bg-bullet",!0).append("rect"),P.select("rect").call(L).call(T),P.exit().remove();var O=f.selectAll("g.value-bullet").data([c.gauge.bar]);O.enter().append("g").classed("value-bullet",!0).append("rect"),O.select("rect").attr("height",M).attr("y",(A-M)/2).call(T),w(b)?O.select("rect").transition().duration(b.duration).ease(b.easing).each("end",(function(){_&&_()})).each("interrupt",(function(){_&&_()})).attr("width",Math.max(0,i.c2p(Math.min(c.gauge.axis.range[1],r[0].y)))):O.select("rect").attr("width","number"==typeof r[0].y?Math.max(0,i.c2p(Math.min(c.gauge.axis.range[1],r[0].y))):0),O.exit().remove();var I=r.filter((function(){return c.gauge.threshold.value||0===c.gauge.threshold.value})),D=f.selectAll("g.threshold-bullet").data(I);D.enter().append("g").classed("threshold-bullet",!0).append("line"),D.select("line").attr("x1",i.c2p(c.gauge.threshold.value)).attr("x2",i.c2p(c.gauge.threshold.value)).attr("y1",(1-c.gauge.threshold.thickness)/2*A).attr("y2",(1-(1-c.gauge.threshold.thickness)/2)*A).call(m.stroke,c.gauge.threshold.line.color).style("stroke-width",c.gauge.threshold.line.width),D.exit().remove();var z=f.selectAll("g.gauge-outline").data([g]);z.enter().append("g").classed("gauge-outline",!0).append("rect"),z.select("rect").call(L).call(T),z.exit().remove()}(t,0,e,{gauge:W,layer:X,size:B,gaugeBg:C,gaugeOutline:P,transitionOpts:r,onComplete:g});var J=I.selectAll("text.title").data(e);J.exit().remove(),J.enter().append("text").classed("title",!0),J.attr("text-anchor",(function(){return R?x.right:x[O.title.align]})).text(O.title.text).call(f.font,O.title.font).call(p.convertToTspans,t),J.attr("transform",(function(){var t,e=B.l+B.w*b[O.title.align],r=h.titlePadding,n=f.bBox(J.node());return D?(z&&(t=O.gauge.axis.visible?f.bBox(Y.node()).top-r-n.bottom:B.t+B.h/2-U/2-n.bottom-r),R&&(t=E-(n.top+n.bottom)/2,e=B.l-h.bulletPadding*B.w)):t=O._numbersTop-r-n.bottom,l(e,t)}))}))}},16249:function(t,e,r){"use strict";var n=r(50693),i=r(12663).axisHoverFormat,a=r(5386).fF,o=r(2418),s=r(9012),l=r(1426).extendFlat,u=r(30962).overrideAll,c=t.exports=u(l({x:{valType:"data_array"},y:{valType:"data_array"},z:{valType:"data_array"},value:{valType:"data_array"},isomin:{valType:"number"},isomax:{valType:"number"},surface:{show:{valType:"boolean",dflt:!0},count:{valType:"integer",dflt:2,min:1},fill:{valType:"number",min:0,max:1,dflt:1},pattern:{valType:"flaglist",flags:["A","B","C","D","E"],extras:["all","odd","even"],dflt:"all"}},spaceframe:{show:{valType:"boolean",dflt:!1},fill:{valType:"number",min:0,max:1,dflt:.15}},slices:{x:{show:{valType:"boolean",dflt:!1},locations:{valType:"data_array",dflt:[]},fill:{valType:"number",min:0,max:1,dflt:1}},y:{show:{valType:"boolean",dflt:!1},locations:{valType:"data_array",dflt:[]},fill:{valType:"number",min:0,max:1,dflt:1}},z:{show:{valType:"boolean",dflt:!1},locations:{valType:"data_array",dflt:[]},fill:{valType:"number",min:0,max:1,dflt:1}}},caps:{x:{show:{valType:"boolean",dflt:!0},fill:{valType:"number",min:0,max:1,dflt:1}},y:{show:{valType:"boolean",dflt:!0},fill:{valType:"number",min:0,max:1,dflt:1}},z:{show:{valType:"boolean",dflt:!0},fill:{valType:"number",min:0,max:1,dflt:1}}},text:{valType:"string",dflt:"",arrayOk:!0},hovertext:{valType:"string",dflt:"",arrayOk:!0},hovertemplate:a(),xhoverformat:i("x"),yhoverformat:i("y"),zhoverformat:i("z"),valuehoverformat:i("value",1),showlegend:l({},s.showlegend,{dflt:!1})},n("",{colorAttr:"`value`",showScaleDflt:!0,editTypeOverride:"calc"}),{opacity:o.opacity,lightposition:o.lightposition,lighting:o.lighting,flatshading:o.flatshading,contour:o.contour,hoverinfo:l({},s.hoverinfo)}),"calc","nested");c.flatshading.dflt=!0,c.lighting.facenormalsepsilon.dflt=0,c.x.editType=c.y.editType=c.z.editType=c.value.editType="calc+clearAxisTypes",c.transforms=void 0},56959:function(t,e,r){"use strict";var n=r(78803),i=r(88489).processGrid,a=r(88489).filter;t.exports=function(t,e){e._len=Math.min(e.x.length,e.y.length,e.z.length,e.value.length),e._x=a(e.x,e._len),e._y=a(e.y,e._len),e._z=a(e.z,e._len),e._value=a(e.value,e._len);var r=i(e);e._gridFill=r.fill,e._Xs=r.Xs,e._Ys=r.Ys,e._Zs=r.Zs,e._len=r.len;for(var o=1/0,s=-1/0,l=0;l<e._len;l++){var u=e._value[l];o=Math.min(o,u),s=Math.max(s,u)}e._minValues=o,e._maxValues=s,e._vMin=void 0===e.isomin||null===e.isomin?o:e.isomin,e._vMax=void 0===e.isomax||null===e.isomin?s:e.isomax,n(t,e,{vals:[e._vMin,e._vMax],containerStr:"",cLetter:"c"})}},22674:function(t,e,r){"use strict";var n=r(9330).gl_mesh3d,i=r(81697).parseColorScale,a=r(78614),o=r(21081).extractOpts,s=r(90060),l=function(t,e){for(var r=e.length-1;r>0;r--){var n=Math.min(e[r],e[r-1]),i=Math.max(e[r],e[r-1]);if(i>n&&n<t&&t<=i)return{id:r,distRatio:(i-t)/(i-n)}}return{id:0,distRatio:0}};function u(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name="",this.data=null,this.showContour=!1}var c=u.prototype;c.handlePick=function(t){if(t.object===this.mesh){var e=t.data.index,r=this.data._meshX[e],n=this.data._meshY[e],i=this.data._meshZ[e],a=this.data._Ys.length,o=this.data._Zs.length,s=l(r,this.data._Xs).id,u=l(n,this.data._Ys).id,c=l(i,this.data._Zs).id,f=t.index=c+o*u+o*a*s;t.traceCoordinate=[this.data._meshX[f],this.data._meshY[f],this.data._meshZ[f],this.data._value[f]];var h=this.data.hovertext||this.data.text;return Array.isArray(h)&&void 0!==h[f]?t.textLabel=h[f]:h&&(t.textLabel=h),!0}},c.update=function(t){var e=this.scene,r=e.fullSceneLayout;function n(t,e,r,n){return e.map((function(e){return t.d2l(e,0,n)*r}))}this.data=h(t);var l={positions:s(n(r.xaxis,t._meshX,e.dataScale[0],t.xcalendar),n(r.yaxis,t._meshY,e.dataScale[1],t.ycalendar),n(r.zaxis,t._meshZ,e.dataScale[2],t.zcalendar)),cells:s(t._meshI,t._meshJ,t._meshK),lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,contourEnable:t.contour.show,contourColor:a(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading},u=o(t);l.vertexIntensity=t._meshIntensity,l.vertexIntensityBounds=[u.min,u.max],l.colormap=i(t),this.mesh.update(l)},c.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()};var f=["xyz","xzy","yxz","yzx","zxy","zyx"];function h(t){t._meshI=[],t._meshJ=[],t._meshK=[];var e,r,n,i,a,o,s,u=t.surface.show,c=t.spaceframe.show,h=t.surface.fill,p=t.spaceframe.fill,d=!1,v=!1,g=0,y=t._Xs,m=t._Ys,x=t._Zs,b=y.length,_=m.length,w=x.length,T=f.indexOf(t._gridFill.replace(/-/g,"").replace(/\+/g,"")),k=function(t,e,r){switch(T){case 5:return r+w*e+w*_*t;case 4:return r+w*t+w*b*e;case 3:return e+_*r+_*w*t;case 2:return e+_*t+_*b*r;case 1:return t+b*r+b*w*e;default:return t+b*e+b*_*r}},A=t._minValues,M=t._maxValues,S=t._vMin,E=t._vMax;function L(t,e,s){for(var l=o.length,u=r;u<l;u++)if(t===n[u]&&e===i[u]&&s===a[u])return u;return-1}function C(){r=e}function P(){n=[],i=[],a=[],o=[],e=0,C()}function O(t,r,s,l){return n.push(t),i.push(r),a.push(s),o.push(l),++e-1}function I(t,e,r){for(var n=[],i=0;i<t.length;i++)n[i]=t[i]*(1-r)+r*e[i];return n}function D(t){s=t}function z(t,e){return"all"===t||null===t||t.indexOf(e)>-1}function R(t,e){return null===t?e:t}function F(e,r,n){C();var i,a,o,l=[r],u=[n];if(s>=1)l=[r],u=[n];else if(s>0){var c=function(t,e){var r=t[0],n=t[1],i=t[2],a=function(t,e,r){for(var n=[],i=0;i<t.length;i++)n[i]=(t[i]+e[i]+r[i])/3;return n}(r,n,i),o=Math.sqrt(1-s),l=I(a,r,o),u=I(a,n,o),c=I(a,i,o),f=e[0],h=e[1],p=e[2];return{xyzv:[[r,n,u],[u,l,r],[n,i,c],[c,u,n],[i,r,l],[l,c,i]],abc:[[f,h,-1],[-1,-1,f],[h,p,-1],[-1,-1,h],[p,f,-1],[-1,-1,p]]}}(r,n);l=c.xyzv,u=c.abc}for(var f=0;f<l.length;f++){r=l[f],n=u[f];for(var h=[],p=0;p<3;p++){var d=r[p][0],v=r[p][1],y=r[p][2],m=r[p][3],x=n[p]>-1?n[p]:L(d,v,y);h[p]=x>-1?x:O(d,v,y,R(e,m))}i=h[0],a=h[1],o=h[2],t._meshI.push(i),t._meshJ.push(a),t._meshK.push(o),++g}}function B(t,e,r,n){var i=t[3];i<r&&(i=r),i>n&&(i=n);for(var a=(t[3]-i)/(t[3]-e[3]+1e-9),o=[],s=0;s<4;s++)o[s]=(1-a)*t[s]+a*e[s];return o}function N(t,e,r){return t>=e&&t<=r}function j(t){var e=.001*(E-S);return t>=S-e&&t<=E+e}function U(e){for(var r=[],n=0;n<4;n++){var i=e[n];r.push([t._x[i],t._y[i],t._z[i],t._value[i]])}return r}var V=3;function H(t,e,r,n,i,a){a||(a=1),r=[-1,-1,-1];var o=!1,s=[N(e[0][3],n,i),N(e[1][3],n,i),N(e[2][3],n,i)];if(!s[0]&&!s[1]&&!s[2])return!1;var l=function(t,e,r){return j(e[0][3])&&j(e[1][3])&&j(e[2][3])?(F(t,e,r),!0):a<V&&H(t,e,r,S,E,++a)};if(s[0]&&s[1]&&s[2])return l(t,e,r)||o;var u=!1;return[[0,1,2],[2,0,1],[1,2,0]].forEach((function(a){if(s[a[0]]&&s[a[1]]&&!s[a[2]]){var c=e[a[0]],f=e[a[1]],h=e[a[2]],p=B(h,c,n,i),d=B(h,f,n,i);o=l(t,[d,p,c],[-1,-1,r[a[0]]])||o,o=l(t,[c,f,d],[r[a[0]],r[a[1]],-1])||o,u=!0}})),u||[[0,1,2],[1,2,0],[2,0,1]].forEach((function(a){if(s[a[0]]&&!s[a[1]]&&!s[a[2]]){var c=e[a[0]],f=e[a[1]],h=e[a[2]],p=B(f,c,n,i),d=B(h,c,n,i);o=l(t,[d,p,c],[-1,-1,r[a[0]]])||o,u=!0}})),o}function q(t,e,r,n){var i=!1,a=U(e),o=[N(a[0][3],r,n),N(a[1][3],r,n),N(a[2][3],r,n),N(a[3][3],r,n)];if(!(o[0]||o[1]||o[2]||o[3]))return i;if(o[0]&&o[1]&&o[2]&&o[3])return v&&(i=function(t,e,r){var n=function(n,i,a){F(t,[e[n],e[i],e[a]],[r[n],r[i],r[a]])};n(0,1,2),n(3,0,1),n(2,3,0),n(1,2,3)}(t,a,e)||i),i;var s=!1;return[[0,1,2,3],[3,0,1,2],[2,3,0,1],[1,2,3,0]].forEach((function(l){if(o[l[0]]&&o[l[1]]&&o[l[2]]&&!o[l[3]]){var u=a[l[0]],c=a[l[1]],f=a[l[2]],h=a[l[3]];if(v)i=F(t,[u,c,f],[e[l[0]],e[l[1]],e[l[2]]])||i;else{var p=B(h,u,r,n),d=B(h,c,r,n),g=B(h,f,r,n);i=F(null,[p,d,g],[-1,-1,-1])||i}s=!0}})),s||([[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2],[0,2,3,1],[1,3,2,0]].forEach((function(l){if(o[l[0]]&&o[l[1]]&&!o[l[2]]&&!o[l[3]]){var u=a[l[0]],c=a[l[1]],f=a[l[2]],h=a[l[3]],p=B(f,u,r,n),d=B(f,c,r,n),g=B(h,c,r,n),y=B(h,u,r,n);v?(i=F(t,[u,y,p],[e[l[0]],-1,-1])||i,i=F(t,[c,d,g],[e[l[1]],-1,-1])||i):i=function(t,e,r){var n=function(t,n,i){F(null,[e[t],e[n],e[i]],[r[t],r[n],r[i]])};n(0,1,2),n(2,3,0)}(0,[p,d,g,y],[-1,-1,-1,-1])||i,s=!0}})),s||[[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2]].forEach((function(l){if(o[l[0]]&&!o[l[1]]&&!o[l[2]]&&!o[l[3]]){var u=a[l[0]],c=a[l[1]],f=a[l[2]],h=a[l[3]],p=B(c,u,r,n),d=B(f,u,r,n),g=B(h,u,r,n);v?(i=F(t,[u,p,d],[e[l[0]],-1,-1])||i,i=F(t,[u,d,g],[e[l[0]],-1,-1])||i,i=F(t,[u,g,p],[e[l[0]],-1,-1])||i):i=F(null,[p,d,g],[-1,-1,-1])||i,s=!0}}))),i}function G(t,e,r,n,i,a,o,s,l,u,c){var f=!1;return d&&(z(t,"A")&&(f=q(null,[e,r,n,a],u,c)||f),z(t,"B")&&(f=q(null,[r,n,i,l],u,c)||f),z(t,"C")&&(f=q(null,[r,a,o,l],u,c)||f),z(t,"D")&&(f=q(null,[n,a,s,l],u,c)||f),z(t,"E")&&(f=q(null,[r,n,a,l],u,c)||f)),v&&(f=q(t,[r,n,a,l],u,c)||f),f}function Z(t,e,r,n,i,a,o,s){return[!0===s[0]||H(t,U([e,r,n]),[e,r,n],a,o),!0===s[1]||H(t,U([n,i,e]),[n,i,e],a,o)]}function Y(t,e,r,n,i,a,o,s,l){return s?Z(t,e,r,i,n,a,o,l):Z(t,r,i,n,e,a,o,l)}function W(t,e,r,n,i,a,o){var s,l,u,c,f=!1,h=function(){f=H(t,[s,l,u],[-1,-1,-1],i,a)||f,f=H(t,[u,c,s],[-1,-1,-1],i,a)||f},p=o[0],d=o[1],v=o[2];return p&&(s=I(U([k(e,r-0,n-0)])[0],U([k(e-1,r-0,n-0)])[0],p),l=I(U([k(e,r-0,n-1)])[0],U([k(e-1,r-0,n-1)])[0],p),u=I(U([k(e,r-1,n-1)])[0],U([k(e-1,r-1,n-1)])[0],p),c=I(U([k(e,r-1,n-0)])[0],U([k(e-1,r-1,n-0)])[0],p),h()),d&&(s=I(U([k(e-0,r,n-0)])[0],U([k(e-0,r-1,n-0)])[0],d),l=I(U([k(e-0,r,n-1)])[0],U([k(e-0,r-1,n-1)])[0],d),u=I(U([k(e-1,r,n-1)])[0],U([k(e-1,r-1,n-1)])[0],d),c=I(U([k(e-1,r,n-0)])[0],U([k(e-1,r-1,n-0)])[0],d),h()),v&&(s=I(U([k(e-0,r-0,n)])[0],U([k(e-0,r-0,n-1)])[0],v),l=I(U([k(e-0,r-1,n)])[0],U([k(e-0,r-1,n-1)])[0],v),u=I(U([k(e-1,r-1,n)])[0],U([k(e-1,r-1,n-1)])[0],v),c=I(U([k(e-1,r-0,n)])[0],U([k(e-1,r-0,n-1)])[0],v),h()),f}function X(t,e,r,n,i,a,o,s,l,u,c,f){var h=t;return f?(d&&"even"===t&&(h=null),G(h,e,r,n,i,a,o,s,l,u,c)):(d&&"odd"===t&&(h=null),G(h,l,s,o,a,i,n,r,e,u,c))}function J(t,e,r,n,i){for(var a=[],o=0,s=0;s<e.length;s++)for(var l=e[s],u=1;u<w;u++)for(var c=1;c<_;c++)a.push(Y(t,k(l,c-1,u-1),k(l,c-1,u),k(l,c,u-1),k(l,c,u),r,n,(l+c+u)%2,i&&i[o]?i[o]:[])),o++;return a}function K(t,e,r,n,i){for(var a=[],o=0,s=0;s<e.length;s++)for(var l=e[s],u=1;u<b;u++)for(var c=1;c<w;c++)a.push(Y(t,k(u-1,l,c-1),k(u,l,c-1),k(u-1,l,c),k(u,l,c),r,n,(u+l+c)%2,i&&i[o]?i[o]:[])),o++;return a}function $(t,e,r,n,i){for(var a=[],o=0,s=0;s<e.length;s++)for(var l=e[s],u=1;u<_;u++)for(var c=1;c<b;c++)a.push(Y(t,k(c-1,u-1,l),k(c-1,u,l),k(c,u-1,l),k(c,u,l),r,n,(c+u+l)%2,i&&i[o]?i[o]:[])),o++;return a}function Q(t,e,r){for(var n=1;n<w;n++)for(var i=1;i<_;i++)for(var a=1;a<b;a++)X(t,k(a-1,i-1,n-1),k(a-1,i-1,n),k(a-1,i,n-1),k(a-1,i,n),k(a,i-1,n-1),k(a,i-1,n),k(a,i,n-1),k(a,i,n),e,r,(a+i+n)%2)}function tt(t,e,r,n,i,a){for(var o=[],s=0,l=0;l<e.length;l++)for(var u=e[l],c=1;c<w;c++)for(var f=1;f<_;f++)o.push(W(t,u,f,c,r,n,i[l],a&&a[s]&&a[s])),s++;return o}function et(t,e,r,n,i,a){for(var o=[],s=0,l=0;l<e.length;l++)for(var u=e[l],c=1;c<b;c++)for(var f=1;f<w;f++)o.push(W(t,c,u,f,r,n,i[l],a&&a[s]&&a[s])),s++;return o}function rt(t,e,r,n,i,a){for(var o=[],s=0,l=0;l<e.length;l++)for(var u=e[l],c=1;c<_;c++)for(var f=1;f<b;f++)o.push(W(t,f,c,u,r,n,i[l],a&&a[s]&&a[s])),s++;return o}function nt(t,e){for(var r=[],n=t;n<e;n++)r.push(n);return r}return function(){P(),function(){for(var e=0;e<b;e++)for(var r=0;r<_;r++)for(var n=0;n<w;n++){var i=k(e,r,n);O(t._x[i],t._y[i],t._z[i],t._value[i])}}();var e=null;if(c&&p&&(D(p),v=!0,Q(e,S,E),v=!1),u&&h){D(h);for(var r=t.surface.pattern,s=t.surface.count,f=0;f<s;f++){var T=1===s?.5:f/(s-1),L=(1-T)*S+T*E,C=Math.abs(L-A)>Math.abs(L-M)?[A,L]:[L,M];d=!0,Q(r,C[0],C[1]),d=!1}}var I=[[Math.min(S,M),Math.max(S,M)],[Math.min(A,E),Math.max(A,E)]];["x","y","z"].forEach((function(r){for(var n=[],i=0;i<I.length;i++){var a=0,o=I[i][0],s=I[i][1],u=t.slices[r];if(u.show&&u.fill){D(u.fill);var c=[],f=[],h=[];if(u.locations.length)for(var p=0;p<u.locations.length;p++){var d=l(u.locations[p],"x"===r?y:"y"===r?m:x);0===d.distRatio?c.push(d.id):d.id>0&&(f.push(d.id),"x"===r?h.push([d.distRatio,0,0]):"y"===r?h.push([0,d.distRatio,0]):h.push([0,0,d.distRatio]))}else c=nt(1,"x"===r?b-1:"y"===r?_-1:w-1);f.length>0&&(n[a]="x"===r?tt(e,f,o,s,h,n[a]):"y"===r?et(e,f,o,s,h,n[a]):rt(e,f,o,s,h,n[a]),a++),c.length>0&&(n[a]="x"===r?J(e,c,o,s,n[a]):"y"===r?K(e,c,o,s,n[a]):$(e,c,o,s,n[a]),a++)}var v=t.caps[r];v.show&&v.fill&&(D(v.fill),n[a]="x"===r?J(e,[0,b-1],o,s,n[a]):"y"===r?K(e,[0,_-1],o,s,n[a]):$(e,[0,w-1],o,s,n[a]),a++)}})),0===g&&P(),t._meshX=n,t._meshY=i,t._meshZ=a,t._meshIntensity=o,t._Xs=y,t._Ys=m,t._Zs=x}(),t}t.exports={findNearestOnAxis:l,generateIsoMeshes:h,createIsosurfaceTrace:function(t,e){var r=t.glplot.gl,i=n({gl:r}),a=new u(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}}},82738:function(t,e,r){"use strict";var n=r(71828),i=r(73972),a=r(16249),o=r(1586);function s(t,e,r,n,a){var s=a("isomin"),l=a("isomax");null!=l&&null!=s&&s>l&&(e.isomin=null,e.isomax=null);var u=a("x"),c=a("y"),f=a("z"),h=a("value");u&&u.length&&c&&c.length&&f&&f.length&&h&&h.length?(i.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y","z"],n),a("valuehoverformat"),["x","y","z"].forEach((function(t){a(t+"hoverformat");var e="caps."+t;a(e+".show")&&a(e+".fill");var r="slices."+t;a(r+".show")&&(a(r+".fill"),a(r+".locations"))})),a("spaceframe.show")&&a("spaceframe.fill"),a("surface.show")&&(a("surface.count"),a("surface.fill"),a("surface.pattern")),a("contour.show")&&(a("contour.color"),a("contour.width")),["text","hovertext","hovertemplate","lighting.ambient","lighting.diffuse","lighting.specular","lighting.roughness","lighting.fresnel","lighting.vertexnormalsepsilon","lighting.facenormalsepsilon","lightposition.x","lightposition.y","lightposition.z","flatshading","opacity"].forEach((function(t){a(t)})),o(t,e,n,a,{prefix:"",cLetter:"c"}),e._length=null):e.visible=!1}t.exports={supplyDefaults:function(t,e,r,i){s(t,e,0,i,(function(r,i){return n.coerce(t,e,a,r,i)}))},supplyIsoDefaults:s}},64943:function(t,e,r){"use strict";t.exports={attributes:r(16249),supplyDefaults:r(82738).supplyDefaults,calc:r(56959),colorbar:{min:"cmin",max:"cmax"},plot:r(22674).createIsosurfaceTrace,moduleType:"trace",name:"isosurface",basePlotModule:r(58547),categories:["gl3d","showLegend"],meta:{}}},2418:function(t,e,r){"use strict";var n=r(50693),i=r(12663).axisHoverFormat,a=r(5386).fF,o=r(54532),s=r(9012),l=r(1426).extendFlat;t.exports=l({x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},z:{valType:"data_array",editType:"calc+clearAxisTypes"},i:{valType:"data_array",editType:"calc"},j:{valType:"data_array",editType:"calc"},k:{valType:"data_array",editType:"calc"},text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertemplate:a({editType:"calc"}),xhoverformat:i("x"),yhoverformat:i("y"),zhoverformat:i("z"),delaunayaxis:{valType:"enumerated",values:["x","y","z"],dflt:"z",editType:"calc"},alphahull:{valType:"number",dflt:-1,editType:"calc"},intensity:{valType:"data_array",editType:"calc"},intensitymode:{valType:"enumerated",values:["vertex","cell"],dflt:"vertex",editType:"calc"},color:{valType:"color",editType:"calc"},vertexcolor:{valType:"data_array",editType:"calc"},facecolor:{valType:"data_array",editType:"calc"},transforms:void 0},n("",{colorAttr:"`intensity`",showScaleDflt:!0,editTypeOverride:"calc"}),{opacity:o.opacity,flatshading:{valType:"boolean",dflt:!1,editType:"calc"},contour:{show:l({},o.contours.x.show,{}),color:o.contours.x.color,width:o.contours.x.width,editType:"calc"},lightposition:{x:l({},o.lightposition.x,{dflt:1e5}),y:l({},o.lightposition.y,{dflt:1e5}),z:l({},o.lightposition.z,{dflt:0}),editType:"calc"},lighting:l({vertexnormalsepsilon:{valType:"number",min:0,max:1,dflt:1e-12,editType:"calc"},facenormalsepsilon:{valType:"number",min:0,max:1,dflt:1e-6,editType:"calc"},editType:"calc"},o.lighting),hoverinfo:l({},s.hoverinfo,{editType:"calc"}),showlegend:l({},s.showlegend,{dflt:!1})})},82932:function(t,e,r){"use strict";var n=r(78803);t.exports=function(t,e){e.intensity&&n(t,e,{vals:e.intensity,containerStr:"",cLetter:"c"})}},91134:function(t,e,r){"use strict";var n=r(9330).gl_mesh3d,i=r(9330).delaunay_triangulate,a=r(9330).alpha_shape,o=r(9330).convex_hull,s=r(81697).parseColorScale,l=r(78614),u=r(21081).extractOpts,c=r(90060);function f(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name="",this.color="#fff",this.data=null,this.showContour=!1}var h=f.prototype;function p(t){for(var e=[],r=t.length,n=0;n<r;n++)e[n]=l(t[n]);return e}function d(t,e,r,n){for(var i=[],a=e.length,o=0;o<a;o++)i[o]=t.d2l(e[o],0,n)*r;return i}function v(t){for(var e=[],r=t.length,n=0;n<r;n++)e[n]=Math.round(t[n]);return e}function g(t,e){for(var r=t.length,n=0;n<r;n++)if(t[n]<=-.5||t[n]>=e-.5)return!1;return!0}h.handlePick=function(t){if(t.object===this.mesh){var e=t.index=t.data.index;t.data._cellCenter?t.traceCoordinate=t.data.dataCoordinate:t.traceCoordinate=[this.data.x[e],this.data.y[e],this.data.z[e]];var r=this.data.hovertext||this.data.text;return Array.isArray(r)&&void 0!==r[e]?t.textLabel=r[e]:r&&(t.textLabel=r),!0}},h.update=function(t){var e=this.scene,r=e.fullSceneLayout;this.data=t;var n,f=t.x.length,h=c(d(r.xaxis,t.x,e.dataScale[0],t.xcalendar),d(r.yaxis,t.y,e.dataScale[1],t.ycalendar),d(r.zaxis,t.z,e.dataScale[2],t.zcalendar));if(t.i&&t.j&&t.k){if(t.i.length!==t.j.length||t.j.length!==t.k.length||!g(t.i,f)||!g(t.j,f)||!g(t.k,f))return;n=c(v(t.i),v(t.j),v(t.k))}else n=0===t.alphahull?o(h):t.alphahull>0?a(t.alphahull,h):function(t,e){for(var r=["x","y","z"].indexOf(t),n=[],a=e.length,o=0;o<a;o++)n[o]=[e[o][(r+1)%3],e[o][(r+2)%3]];return i(n)}(t.delaunayaxis,h);var y={positions:h,cells:n,lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,contourEnable:t.contour.show,contourColor:l(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading};if(t.intensity){var m=u(t);this.color="#fff";var x=t.intensitymode;y[x+"Intensity"]=t.intensity,y[x+"IntensityBounds"]=[m.min,m.max],y.colormap=s(t)}else t.vertexcolor?(this.color=t.vertexcolor[0],y.vertexColors=p(t.vertexcolor)):t.facecolor?(this.color=t.facecolor[0],y.cellColors=p(t.facecolor)):(this.color=t.color,y.meshColor=l(t.color));this.mesh.update(y)},h.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},t.exports=function(t,e){var r=t.glplot.gl,i=n({gl:r}),a=new f(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}},58669:function(t,e,r){"use strict";var n=r(73972),i=r(71828),a=r(1586),o=r(2418);t.exports=function(t,e,r,s){function l(r,n){return i.coerce(t,e,o,r,n)}function u(t){var e=t.map((function(t){var e=l(t);return e&&i.isArrayOrTypedArray(e)?e:null}));return e.every((function(t){return t&&t.length===e[0].length}))&&e}u(["x","y","z"])?(u(["i","j","k"]),(!e.i||e.j&&e.k)&&(!e.j||e.k&&e.i)&&(!e.k||e.i&&e.j)?(n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y","z"],s),["lighting.ambient","lighting.diffuse","lighting.specular","lighting.roughness","lighting.fresnel","lighting.vertexnormalsepsilon","lighting.facenormalsepsilon","lightposition.x","lightposition.y","lightposition.z","flatshading","alphahull","delaunayaxis","opacity"].forEach((function(t){l(t)})),l("contour.show")&&(l("contour.color"),l("contour.width")),"intensity"in t?(l("intensity"),l("intensitymode"),a(t,e,s,l,{prefix:"",cLetter:"c"})):(e.showscale=!1,"facecolor"in t?l("facecolor"):"vertexcolor"in t?l("vertexcolor"):l("color",r)),l("text"),l("hovertext"),l("hovertemplate"),l("xhoverformat"),l("yhoverformat"),l("zhoverformat"),e._length=null):e.visible=!1):e.visible=!1}},21164:function(t,e,r){"use strict";t.exports={attributes:r(2418),supplyDefaults:r(58669),calc:r(82932),colorbar:{min:"cmin",max:"cmax"},plot:r(91134),moduleType:"trace",name:"mesh3d",basePlotModule:r(58547),categories:["gl3d","showLegend"],meta:{}}},2522:function(t,e,r){"use strict";var n=r(71828).extendFlat,i=r(82196),a=r(12663).axisHoverFormat,o=r(79952).P,s=r(77914),l=r(22372),u=l.INCREASING.COLOR,c=l.DECREASING.COLOR,f=i.line;function h(t){return{line:{color:n({},f.color,{dflt:t}),width:f.width,dash:o,editType:"style"},editType:"style"}}t.exports={xperiod:i.xperiod,xperiod0:i.xperiod0,xperiodalignment:i.xperiodalignment,xhoverformat:a("x"),yhoverformat:a("y"),x:{valType:"data_array",editType:"calc+clearAxisTypes"},open:{valType:"data_array",editType:"calc"},high:{valType:"data_array",editType:"calc"},low:{valType:"data_array",editType:"calc"},close:{valType:"data_array",editType:"calc"},line:{width:n({},f.width,{}),dash:n({},o,{}),editType:"style"},increasing:h(u),decreasing:h(c),text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},tickwidth:{valType:"number",min:0,max:.5,dflt:.3,editType:"calc"},hoverlabel:n({},s.hoverlabel,{split:{valType:"boolean",dflt:!1,editType:"style"}})}},3485:function(t,e,r){"use strict";var n=r(71828),i=n._,a=r(89298),o=r(42973),s=r(50606).BADNUM;function l(t,e,r,n){return{o:t,h:e,l:r,c:n}}function u(t,e,r,o,l,u){for(var c=l.makeCalcdata(e,"open"),f=l.makeCalcdata(e,"high"),h=l.makeCalcdata(e,"low"),p=l.makeCalcdata(e,"close"),d=Array.isArray(e.text),v=Array.isArray(e.hovertext),g=!0,y=null,m=!!e.xperiodalignment,x=[],b=0;b<o.length;b++){var _=o[b],w=c[b],T=f[b],k=h[b],A=p[b];if(_!==s&&w!==s&&T!==s&&k!==s&&A!==s){A===w?null!==y&&A!==y&&(g=A>y):g=A>w,y=A;var M=u(w,T,k,A);M.pos=_,M.yc=(w+A)/2,M.i=b,M.dir=g?"increasing":"decreasing",M.x=M.pos,M.y=[k,T],m&&(M.orig_p=r[b]),d&&(M.tx=e.text[b]),v&&(M.htx=e.hovertext[b]),x.push(M)}else x.push({pos:_,empty:!0})}return e._extremes[l._id]=a.findExtremes(l,n.concat(h,f),{padded:!0}),x.length&&(x[0].t={labels:{open:i(t,"open:")+" ",high:i(t,"high:")+" ",low:i(t,"low:")+" ",close:i(t,"close:")+" "}}),x}t.exports={calc:function(t,e){var r=a.getFromId(t,e.xaxis),i=a.getFromId(t,e.yaxis),s=function(t,e,r){var i=r._minDiff;if(!i){var a,s=t._fullData,l=[];for(i=1/0,a=0;a<s.length;a++){var u=s[a];if("ohlc"===u.type&&!0===u.visible&&u.xaxis===e._id){l.push(u);var c=e.makeCalcdata(u,"x");u._origX=c;var f=o(r,e,"x",c).vals;u._xcalc=f;var h=n.distinctVals(f).minDiff;h&&isFinite(h)&&(i=Math.min(i,h))}}for(i===1/0&&(i=1),a=0;a<l.length;a++)l[a]._minDiff=i}return i*r.tickwidth}(t,r,e),c=e._minDiff;e._minDiff=null;var f=e._origX;e._origX=null;var h=e._xcalc;e._xcalc=null;var p=u(t,e,f,h,i,l);return e._extremes[r._id]=a.findExtremes(r,h,{vpad:c/2}),p.length?(n.extendFlat(p[0].t,{wHover:c/2,tickLen:s}),p):[{t:{empty:!0}}]},calcCommon:u}},16169:function(t,e,r){"use strict";var n=r(71828),i=r(14555),a=r(73927),o=r(2522);function s(t,e,r,n){r(n+".line.color"),r(n+".line.width",e.line.width),r(n+".line.dash",e.line.dash)}t.exports=function(t,e,r,l){function u(r,i){return n.coerce(t,e,o,r,i)}i(t,e,u,l)?(a(t,e,l,u,{x:!0}),u("xhoverformat"),u("yhoverformat"),u("line.width"),u("line.dash"),s(0,e,u,"increasing"),s(0,e,u,"decreasing"),u("text"),u("hovertext"),u("tickwidth"),l._requestRangeslider[e.xaxis]=!0):e.visible=!1}},66449:function(t,e,r){"use strict";var n=r(89298),i=r(71828),a=r(30211),o=r(7901),s=r(71828).fillText,l=r(22372),u={increasing:l.INCREASING.SYMBOL,decreasing:l.DECREASING.SYMBOL};function c(t,e,r,n){var i,s,l=t.cd,u=t.xa,c=l[0].trace,f=l[0].t,h=c.type,p="ohlc"===h?"l":"min",d="ohlc"===h?"h":"max",v=f.bPos||0,g=function(t){return t.pos+v-e},y=f.bdPos||f.tickLen,m=f.wHover,x=Math.min(1,y/Math.abs(u.r2c(u.range[1])-u.r2c(u.range[0])));function b(t){var e=g(t);return a.inbox(e-m,e+m,i)}function _(t){var e=t[p],n=t[d];return e===n||a.inbox(e-r,n-r,i)}function w(t){return(b(t)+_(t))/2}i=t.maxHoverDistance-x,s=t.maxSpikeDistance-x;var T=a.getDistanceFunction(n,b,_,w);if(a.getClosest(l,T,t),!1===t.index)return null;var k=l[t.index];if(k.empty)return null;var A=c[k.dir],M=A.line.color;return o.opacity(M)&&A.line.width?t.color=M:t.color=A.fillcolor,t.x0=u.c2p(k.pos+v-y,!0),t.x1=u.c2p(k.pos+v+y,!0),t.xLabelVal=void 0!==k.orig_p?k.orig_p:k.pos,t.spikeDistance=w(k)*s/i,t.xSpike=u.c2p(k.pos,!0),t}function f(t,e,r,a){var o=t.cd,s=t.ya,l=o[0].trace,u=o[0].t,f=[],h=c(t,e,r,a);if(!h)return[];var p=o[h.index].hi||l.hoverinfo,d=p.split("+");if("all"!==p&&-1===d.indexOf("y"))return[];for(var v=["high","open","close","low"],g={},y=0;y<v.length;y++){var m,x=v[y],b=l[x][h.index],_=s.c2p(b,!0);b in g?(m=g[b]).yLabel+="<br>"+u.labels[x]+n.hoverLabelText(s,b,l.yhoverformat):((m=i.extendFlat({},h)).y0=m.y1=_,m.yLabelVal=b,m.yLabel=u.labels[x]+n.hoverLabelText(s,b,l.yhoverformat),m.name="",f.push(m),g[b]=m)}return f}function h(t,e,r,i){var a=t.cd,o=t.ya,l=a[0].trace,f=a[0].t,h=c(t,e,r,i);if(!h)return[];var p=a[h.index],d=h.index=p.i,v=p.dir;function g(t){return f.labels[t]+n.hoverLabelText(o,l[t][d],l.yhoverformat)}var y=p.hi||l.hoverinfo,m=y.split("+"),x="all"===y,b=x||-1!==m.indexOf("y"),_=x||-1!==m.indexOf("text"),w=b?[g("open"),g("high"),g("low"),g("close")+"  "+u[v]]:[];return _&&s(p,l,w),h.extraText=w.join("<br>"),h.y0=h.y1=o.c2p(p.yc,!0),[h]}t.exports={hoverPoints:function(t,e,r,n){return t.cd[0].trace.hoverlabel.split?f(t,e,r,n):h(t,e,r,n)},hoverSplit:f,hoverOnPoints:h}},54186:function(t,e,r){"use strict";t.exports={moduleType:"trace",name:"ohlc",basePlotModule:r(93612),categories:["cartesian","svg","showLegend"],meta:{},attributes:r(2522),supplyDefaults:r(16169),calc:r(3485).calc,plot:r(72314),style:r(53101),hoverPoints:r(66449).hoverPoints,selectPoints:r(67324)}},14555:function(t,e,r){"use strict";var n=r(73972),i=r(71828);t.exports=function(t,e,r,a){var o=r("x"),s=r("open"),l=r("high"),u=r("low"),c=r("close");if(r("hoverlabel.split"),n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x"],a),s&&l&&u&&c){var f=Math.min(s.length,l.length,u.length,c.length);return o&&(f=Math.min(f,i.minRowLength(o))),e._length=f,f}}},72314:function(t,e,r){"use strict";var n=r(39898),i=r(71828);t.exports=function(t,e,r,a){var o=e.yaxis,s=e.xaxis,l=!!s.rangebreaks;i.makeTraceGroups(a,r,"trace ohlc").each((function(t){var e=n.select(this),r=t[0],a=r.t;if(!0!==r.trace.visible||a.empty)e.remove();else{var u=a.tickLen,c=e.selectAll("path").data(i.identity);c.enter().append("path"),c.exit().remove(),c.attr("d",(function(t){if(t.empty)return"M0,0Z";var e=s.c2p(t.pos-u,!0),r=s.c2p(t.pos+u,!0),n=l?(e+r)/2:s.c2p(t.pos,!0);return"M"+e+","+o.c2p(t.o,!0)+"H"+n+"M"+n+","+o.c2p(t.h,!0)+"V"+o.c2p(t.l,!0)+"M"+r+","+o.c2p(t.c,!0)+"H"+n}))}}))}},67324:function(t){"use strict";t.exports=function(t,e){var r,n=t.cd,i=t.xaxis,a=t.yaxis,o=[],s=n[0].t.bPos||0;if(!1===e)for(r=0;r<n.length;r++)n[r].selected=0;else for(r=0;r<n.length;r++){var l=n[r];e.contains([i.c2p(l.pos+s),a.c2p(l.yc)],null,l.i,t)?(o.push({pointNumber:l.i,x:i.c2d(l.pos),y:a.c2d(l.yc)}),l.selected=1):l.selected=0}return o}},53101:function(t,e,r){"use strict";var n=r(39898),i=r(91424),a=r(7901);t.exports=function(t,e,r){var o=r||n.select(t).selectAll("g.ohlclayer").selectAll("g.trace");o.style("opacity",(function(t){return t[0].trace.opacity})),o.each((function(t){var e=t[0].trace;n.select(this).selectAll("path").each((function(t){if(!t.empty){var r=e[t.dir].line;n.select(this).style("fill","none").call(a.stroke,r.color).call(i.dashLine,r.dash,r.width).style("opacity",e.selectedpoints&&!t.selected?.3:1)}}))}))}},99506:function(t,e,r){"use strict";var n=r(1426).extendFlat,i=r(9012),a=r(41940),o=r(50693),s=r(5386).fF,l=r(27670).Y,u=n({editType:"calc"},o("line",{editTypeOverride:"calc"}),{shape:{valType:"enumerated",values:["linear","hspline"],dflt:"linear",editType:"plot"},hovertemplate:s({editType:"plot",arrayOk:!1},{keys:["count","probability"]})});t.exports={domain:l({name:"parcats",trace:!0,editType:"calc"}),hoverinfo:n({},i.hoverinfo,{flags:["count","probability"],editType:"plot",arrayOk:!1}),hoveron:{valType:"enumerated",values:["category","color","dimension"],dflt:"category",editType:"plot"},hovertemplate:s({editType:"plot",arrayOk:!1},{keys:["count","probability","category","categorycount","colorcount","bandcolorcount"]}),arrangement:{valType:"enumerated",values:["perpendicular","freeform","fixed"],dflt:"perpendicular",editType:"plot"},bundlecolors:{valType:"boolean",dflt:!0,editType:"plot"},sortpaths:{valType:"enumerated",values:["forward","backward"],dflt:"forward",editType:"plot"},labelfont:a({editType:"calc"}),tickfont:a({editType:"calc"}),dimensions:{_isLinkedToArray:"dimension",label:{valType:"string",editType:"calc"},categoryorder:{valType:"enumerated",values:["trace","category ascending","category descending","array"],dflt:"trace",editType:"calc"},categoryarray:{valType:"data_array",editType:"calc"},ticktext:{valType:"data_array",editType:"calc"},values:{valType:"data_array",dflt:[],editType:"calc"},displayindex:{valType:"integer",editType:"calc"},editType:"calc",visible:{valType:"boolean",dflt:!0,editType:"calc"}},line:u,counts:{valType:"number",min:0,dflt:1,arrayOk:!0,editType:"calc"},customdata:void 0,hoverlabel:void 0,ids:void 0,legend:void 0,legendgroup:void 0,legendrank:void 0,opacity:void 0,selectedpoints:void 0,showlegend:void 0}},27677:function(t,e,r){"use strict";var n=r(27659).a0,i=r(45784),a="parcats";e.name=a,e.plot=function(t,e,r,o){var s=n(t.calcdata,a);if(s.length){var l=s[0];i(t,l,r,o)}},e.clean=function(t,e,r,n){var i=n._has&&n._has("parcats"),a=e._has&&e._has("parcats");i&&!a&&n._paperdiv.selectAll(".parcats").remove()}},28699:function(t,e,r){"use strict";var n=r(28984).wrap,i=r(52075).hasColorscale,a=r(78803),o=r(75744),s=r(91424),l=r(71828),u=r(92770);function c(t,e,r){t.valueInds.push(e),t.count+=r}function f(t,e,r){return{categoryInds:t,color:e,rawColor:r,valueInds:[],count:0}}function h(t,e,r){t.valueInds.push(e),t.count+=r}t.exports=function(t,e){var r=l.filterVisible(e.dimensions);if(0===r.length)return[];var p,d,v,g=r.map((function(t){var e;if("trace"===t.categoryorder)e=null;else if("array"===t.categoryorder)e=t.categoryarray;else{e=o(t.values);for(var r=!0,n=0;n<e.length;n++)if(!u(e[n])){r=!1;break}e.sort(r?l.sorterAsc:void 0),"category descending"===t.categoryorder&&(e=e.reverse())}return function(t,e){e=null==e?[]:e.map((function(t){return t}));var r={},n={},i=[];e.forEach((function(t,e){r[t]=0,n[t]=e}));for(var a=0;a<t.length;a++){var o,s=t[a];void 0===r[s]?(r[s]=1,o=e.push(s)-1,n[s]=o):(r[s]++,o=n[s]),i.push(o)}var l=e.map((function(t){return r[t]}));return{uniqueValues:e,uniqueCounts:l,inds:i}}(t.values,e)}));p=l.isArrayOrTypedArray(e.counts)?e.counts:[e.counts],function(t){var e,r=t.map((function(t){return t.displayindex}));if(function(t){for(var e=new Array(t.length),r=0;r<t.length;r++){if(t[r]<0||t[r]>=t.length)return!1;if(void 0!==e[t[r]])return!1;e[t[r]]=!0}return!0}(r))for(e=0;e<t.length;e++)t[e]._displayindex=t[e].displayindex;else for(e=0;e<t.length;e++)t[e]._displayindex=e}(r),r.forEach((function(t,e){!function(t,e){t._categoryarray=e.uniqueValues,null===t.ticktext||void 0===t.ticktext?t._ticktext=[]:t._ticktext=t.ticktext.slice();for(var r=t._ticktext.length;r<e.uniqueValues.length;r++)t._ticktext.push(e.uniqueValues[r])}(t,g[e])}));var y,m=e.line;m?(i(e,"line")&&a(t,e,{vals:e.line.color,containerStr:"line",cLetter:"c"}),y=s.tryColorscale(m)):y=l.identity;var x,b,_,w,T,k=r[0].values.length,A={},M=g.map((function(t){return t.inds}));for(v=0,x=0;x<k;x++){var S=[];for(b=0;b<M.length;b++)S.push(M[b][x]);d=p[x%p.length],v+=d;var E=(_=x,w=void 0,T=void 0,l.isArrayOrTypedArray(m.color)?T=w=m.color[_%m.color.length]:w=m.color,{color:y(w),rawColor:T}),L=S+"-"+E.rawColor;void 0===A[L]&&(A[L]=f(S,E.color,E.rawColor)),h(A[L],x,d)}var C,P=r.map((function(t,e){return function(t,e,r,n,i){return{dimensionInd:t,containerInd:e,displayInd:r,dimensionLabel:n,count:i,categories:[],dragX:null}}(e,t._index,t._displayindex,t.label,v)}));for(x=0;x<k;x++)for(d=p[x%p.length],b=0;b<P.length;b++){var O=P[b].containerInd,I=g[b].inds[x],D=P[b].categories;if(void 0===D[I]){var z=e.dimensions[O]._categoryarray[I],R=e.dimensions[O]._ticktext[I];D[I]={dimensionInd:b,categoryInd:C=I,categoryValue:z,displayInd:C,categoryLabel:R,valueInds:[],count:0,dragY:null}}c(D[I],x,d)}return n(function(t,e,r){var n=t.map((function(t){return t.categories.length})).reduce((function(t,e){return Math.max(t,e)}));return{dimensions:t,paths:e,trace:void 0,maxCats:n,count:r}}(P,A,v))}},14647:function(t,e,r){"use strict";var n=r(71828),i=r(52075).hasColorscale,a=r(1586),o=r(27670).c,s=r(85501),l=r(99506),u=r(94397);function c(t,e){function r(r,i){return n.coerce(t,e,l.dimensions,r,i)}var i=r("values"),a=r("visible");if(i&&i.length||(a=e.visible=!1),a){r("label"),r("displayindex",e._index);var o,s=t.categoryarray,u=Array.isArray(s)&&s.length>0;u&&(o="array");var c=r("categoryorder",o);"array"===c?(r("categoryarray"),r("ticktext")):(delete t.categoryarray,delete t.ticktext),u||"array"!==c||(e.categoryorder="trace")}}t.exports=function(t,e,r,f){function h(r,i){return n.coerce(t,e,l,r,i)}var p=s(t,e,{name:"dimensions",handleItemDefaults:c}),d=function(t,e,r,o,s){s("line.shape"),s("line.hovertemplate");var l=s("line.color",o.colorway[0]);if(i(t,"line")&&n.isArrayOrTypedArray(l)){if(l.length)return s("line.colorscale"),a(t,e,o,s,{prefix:"line.",cLetter:"c"}),l.length;e.line.color=r}return 1/0}(t,e,r,f,h);o(e,f,h),Array.isArray(p)&&p.length||(e.visible=!1),u(e,p,"values",d),h("hoveron"),h("hovertemplate"),h("arrangement"),h("bundlecolors"),h("sortpaths"),h("counts");var v={family:f.font.family,size:Math.round(f.font.size),color:f.font.color};n.coerceFont(h,"labelfont",v);var g={family:f.font.family,size:Math.round(f.font.size/1.2),color:f.font.color};n.coerceFont(h,"tickfont",g)}},94873:function(t,e,r){"use strict";t.exports={attributes:r(99506),supplyDefaults:r(14647),calc:r(28699),plot:r(45784),colorbar:{container:"line",min:"cmin",max:"cmax"},moduleType:"trace",name:"parcats",basePlotModule:r(27677),categories:["noOpacity"],meta:{}}},45460:function(t,e,r){"use strict";var n=r(39898),i=r(81684).k4,a=r(72391),o=r(30211),s=r(71828),l=s.strTranslate,u=r(91424),c=r(84267),f=r(63893);function h(t,e,r,i){var a=e._context.staticPlot,o=t.map(F.bind(0,e,r)),c=i.selectAll("g.parcatslayer").data([null]);c.enter().append("g").attr("class","parcatslayer").style("pointer-events",a?"none":"all");var h=c.selectAll("g.trace.parcats").data(o,p),m=h.enter().append("g").attr("class","trace parcats");h.attr("transform",(function(t){return l(t.x,t.y)})),m.append("g").attr("class","paths");var x=h.select("g.paths").selectAll("path.path").data((function(t){return t.paths}),p);x.attr("fill",(function(t){return t.model.color}));var w=x.enter().append("path").attr("class","path").attr("stroke-opacity",0).attr("fill",(function(t){return t.model.color})).attr("fill-opacity",0);_(w),x.attr("d",(function(t){return t.svgD})),w.empty()||x.sort(v),x.exit().remove(),x.on("mouseover",g).on("mouseout",y).on("click",b),m.append("g").attr("class","dimensions");var A=h.select("g.dimensions").selectAll("g.dimension").data((function(t){return t.dimensions}),p);A.enter().append("g").attr("class","dimension"),A.attr("transform",(function(t){return l(t.x,0)})),A.exit().remove();var M=A.selectAll("g.category").data((function(t){return t.categories}),p),S=M.enter().append("g").attr("class","category");M.attr("transform",(function(t){return l(0,t.y)})),S.append("rect").attr("class","catrect").attr("pointer-events","none"),M.select("rect.catrect").attr("fill","none").attr("width",(function(t){return t.width})).attr("height",(function(t){return t.height})),T(S);var E=M.selectAll("rect.bandrect").data((function(t){return t.bands}),p);E.each((function(){s.raiseToTop(this)})),E.attr("fill",(function(t){return t.color}));var D=E.enter().append("rect").attr("class","bandrect").attr("stroke-opacity",0).attr("fill",(function(t){return t.color})).attr("fill-opacity",0);E.attr("fill",(function(t){return t.color})).attr("width",(function(t){return t.width})).attr("height",(function(t){return t.height})).attr("y",(function(t){return t.y})).attr("cursor",(function(t){return"fixed"===t.parcatsViewModel.arrangement?"default":"perpendicular"===t.parcatsViewModel.arrangement?"ns-resize":"move"})),k(D),E.exit().remove(),S.append("text").attr("class","catlabel").attr("pointer-events","none");var z=e._fullLayout.paper_bgcolor;M.select("text.catlabel").attr("text-anchor",(function(t){return d(t)?"start":"end"})).attr("alignment-baseline","middle").style("text-shadow",f.makeTextShadow(z)).style("fill","rgb(0, 0, 0)").attr("x",(function(t){return d(t)?t.width+5:-5})).attr("y",(function(t){return t.height/2})).text((function(t){return t.model.categoryLabel})).each((function(t){u.font(n.select(this),t.parcatsViewModel.categorylabelfont),f.convertToTspans(n.select(this),e)})),S.append("text").attr("class","dimlabel"),M.select("text.dimlabel").attr("text-anchor","middle").attr("alignment-baseline","baseline").attr("cursor",(function(t){return"fixed"===t.parcatsViewModel.arrangement?"default":"ew-resize"})).attr("x",(function(t){return t.width/2})).attr("y",-5).text((function(t,e){return 0===e?t.parcatsViewModel.model.dimensions[t.model.dimensionInd].dimensionLabel:null})).each((function(t){u.font(n.select(this),t.parcatsViewModel.labelfont)})),M.selectAll("rect.bandrect").on("mouseover",L).on("mouseout",C),M.exit().remove(),A.call(n.behavior.drag().origin((function(t){return{x:t.x,y:0}})).on("dragstart",P).on("drag",O).on("dragend",I)),h.each((function(t){t.traceSelection=n.select(this),t.pathSelection=n.select(this).selectAll("g.paths").selectAll("path.path"),t.dimensionSelection=n.select(this).selectAll("g.dimensions").selectAll("g.dimension")})),h.exit().remove()}function p(t){return t.key}function d(t){var e=t.parcatsViewModel.dimensions.length,r=t.parcatsViewModel.dimensions[e-1].model.dimensionInd;return t.model.dimensionInd===r}function v(t,e){return t.model.rawColor>e.model.rawColor?1:t.model.rawColor<e.model.rawColor?-1:0}function g(t){if(!t.parcatsViewModel.dragDimension&&-1===t.parcatsViewModel.hoverinfoItems.indexOf("skip")){s.raiseToTop(this),w(n.select(this));var e=m(t),r=x(t);if(t.parcatsViewModel.graphDiv.emit("plotly_hover",{points:e,event:n.event,constraints:r}),-1===t.parcatsViewModel.hoverinfoItems.indexOf("none")){var i,a,l,u=n.mouse(this)[0],f=t.parcatsViewModel.graphDiv,h=t.parcatsViewModel.trace,p=f._fullLayout,d=p._paperdiv.node().getBoundingClientRect(),v=t.parcatsViewModel.graphDiv.getBoundingClientRect();for(l=0;l<t.leftXs.length-1;l++)if(t.leftXs[l]+t.dimWidths[l]-2<=u&&u<=t.leftXs[l+1]+2){var g=t.parcatsViewModel.dimensions[l],y=t.parcatsViewModel.dimensions[l+1];i=(g.x+g.width+y.x)/2,a=(t.topYs[l]+t.topYs[l+1]+t.height)/2;break}var b=t.parcatsViewModel.x+i,_=t.parcatsViewModel.y+a,T=c.mostReadable(t.model.color,["black","white"]),k=t.model.count,A=k/t.parcatsViewModel.model.count,M={countLabel:k,probabilityLabel:A.toFixed(3)},S=[];-1!==t.parcatsViewModel.hoverinfoItems.indexOf("count")&&S.push(["Count:",M.countLabel].join(" ")),-1!==t.parcatsViewModel.hoverinfoItems.indexOf("probability")&&S.push(["P:",M.probabilityLabel].join(" "));var E=S.join("<br>"),L=n.mouse(f)[0];o.loneHover({trace:h,x:b-d.left+v.left,y:_-d.top+v.top,text:E,color:t.model.color,borderColor:"black",fontFamily:'Monaco, "Courier New", monospace',fontSize:10,fontColor:T,idealAlign:L<b?"right":"left",hovertemplate:(h.line||{}).hovertemplate,hovertemplateLabels:M,eventData:[{data:h._input,fullData:h,count:k,probability:A}]},{container:p._hoverlayer.node(),outerContainer:p._paper.node(),gd:f})}}}function y(t){if(!t.parcatsViewModel.dragDimension&&(_(n.select(this)),o.loneUnhover(t.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()),t.parcatsViewModel.pathSelection.sort(v),-1===t.parcatsViewModel.hoverinfoItems.indexOf("skip"))){var e=m(t),r=x(t);t.parcatsViewModel.graphDiv.emit("plotly_unhover",{points:e,event:n.event,constraints:r})}}function m(t){for(var e=[],r=D(t.parcatsViewModel),n=0;n<t.model.valueInds.length;n++){var i=t.model.valueInds[n];e.push({curveNumber:r,pointNumber:i})}return e}function x(t){for(var e={},r=t.parcatsViewModel.model.dimensions,n=0;n<r.length;n++){var i=r[n],a=i.categories[t.model.categoryInds[n]];e[i.containerInd]=a.categoryValue}return void 0!==t.model.rawColor&&(e.color=t.model.rawColor),e}function b(t){if(-1===t.parcatsViewModel.hoverinfoItems.indexOf("skip")){var e=m(t),r=x(t);t.parcatsViewModel.graphDiv.emit("plotly_click",{points:e,event:n.event,constraints:r})}}function _(t){t.attr("fill",(function(t){return t.model.color})).attr("fill-opacity",.6).attr("stroke","lightgray").attr("stroke-width",.2).attr("stroke-opacity",1)}function w(t){t.attr("fill-opacity",.8).attr("stroke",(function(t){return c.mostReadable(t.model.color,["black","white"])})).attr("stroke-width",.3)}function T(t){t.select("rect.catrect").attr("stroke","black").attr("stroke-width",1).attr("stroke-opacity",1)}function k(t){t.attr("stroke","black").attr("stroke-width",.2).attr("stroke-opacity",1).attr("fill-opacity",1)}function A(t){var e=t.parcatsViewModel.pathSelection,r=t.categoryViewModel.model.dimensionInd,n=t.categoryViewModel.model.categoryInd;return e.filter((function(e){return e.model.categoryInds[r]===n&&e.model.color===t.color}))}function M(t,e,r){var i=n.select(t).datum(),a=i.categoryViewModel.model,o=i.parcatsViewModel.graphDiv,s=n.select(t.parentNode).selectAll("rect.bandrect"),l=[];s.each((function(t){A(t).each((function(t){Array.prototype.push.apply(l,m(t))}))}));var u={};u[a.dimensionInd]=a.categoryValue,o.emit(e,{points:l,event:r,constraints:u})}function S(t,e,r){var i=n.select(t).datum(),a=i.categoryViewModel.model,o=i.parcatsViewModel.graphDiv,s=A(i),l=[];s.each((function(t){Array.prototype.push.apply(l,m(t))}));var u={};u[a.dimensionInd]=a.categoryValue,void 0!==i.rawColor&&(u.color=i.rawColor),o.emit(e,{points:l,event:r,constraints:u})}function E(t,e,r){t._fullLayout._calcInverseTransform(t);var i,a,o=t._fullLayout._invScaleX,s=t._fullLayout._invScaleY,l=n.select(r.parentNode).select("rect.catrect"),u=l.node().getBoundingClientRect(),c=l.datum(),f=c.parcatsViewModel,h=f.model.dimensions[c.model.dimensionInd],p=f.trace,d=u.top+u.height/2;f.dimensions.length>1&&h.displayInd===f.dimensions.length-1?(i=u.left,a="left"):(i=u.left+u.width,a="right");var v=c.model.count,g=c.model.categoryLabel,y=v/c.parcatsViewModel.model.count,m={countLabel:v,categoryLabel:g,probabilityLabel:y.toFixed(3)},x=[];-1!==c.parcatsViewModel.hoverinfoItems.indexOf("count")&&x.push(["Count:",m.countLabel].join(" ")),-1!==c.parcatsViewModel.hoverinfoItems.indexOf("probability")&&x.push(["P("+m.categoryLabel+"):",m.probabilityLabel].join(" "));var b=x.join("<br>");return{trace:p,x:o*(i-e.left),y:s*(d-e.top),text:b,color:"lightgray",borderColor:"black",fontFamily:'Monaco, "Courier New", monospace',fontSize:12,fontColor:"black",idealAlign:a,hovertemplate:p.hovertemplate,hovertemplateLabels:m,eventData:[{data:p._input,fullData:p,count:v,category:g,probability:y}]}}function L(t){if(!t.parcatsViewModel.dragDimension&&-1===t.parcatsViewModel.hoverinfoItems.indexOf("skip")){if(n.mouse(this)[1]<-1)return;var e,r=t.parcatsViewModel.graphDiv,i=r._fullLayout,a=i._paperdiv.node().getBoundingClientRect(),l=t.parcatsViewModel.hoveron,u=this;"color"===l?(function(t){var e=n.select(t).datum(),r=A(e);w(r),r.each((function(){s.raiseToTop(this)})),n.select(t.parentNode).selectAll("rect.bandrect").filter((function(t){return t.color===e.color})).each((function(){s.raiseToTop(this),n.select(this).attr("stroke","black").attr("stroke-width",1.5)}))}(u),S(u,"plotly_hover",n.event)):(function(t){n.select(t.parentNode).selectAll("rect.bandrect").each((function(t){var e=A(t);w(e),e.each((function(){s.raiseToTop(this)}))})),n.select(t.parentNode).select("rect.catrect").attr("stroke","black").attr("stroke-width",2.5)}(u),M(u,"plotly_hover",n.event)),-1===t.parcatsViewModel.hoverinfoItems.indexOf("none")&&("category"===l?e=E(r,a,u):"color"===l?e=function(t,e,r){t._fullLayout._calcInverseTransform(t);var i,a,o=t._fullLayout._invScaleX,s=t._fullLayout._invScaleY,l=r.getBoundingClientRect(),u=n.select(r).datum(),f=u.categoryViewModel,h=f.parcatsViewModel,p=h.model.dimensions[f.model.dimensionInd],d=h.trace,v=l.y+l.height/2;h.dimensions.length>1&&p.displayInd===h.dimensions.length-1?(i=l.left,a="left"):(i=l.left+l.width,a="right");var g=f.model.categoryLabel,y=u.parcatsViewModel.model.count,m=0;u.categoryViewModel.bands.forEach((function(t){t.color===u.color&&(m+=t.count)}));var x=f.model.count,b=0;h.pathSelection.each((function(t){t.model.color===u.color&&(b+=t.model.count)}));var _=m/y,w=m/b,T=m/x,k={countLabel:y,categoryLabel:g,probabilityLabel:_.toFixed(3)},A=[];-1!==f.parcatsViewModel.hoverinfoItems.indexOf("count")&&A.push(["Count:",k.countLabel].join(" ")),-1!==f.parcatsViewModel.hoverinfoItems.indexOf("probability")&&(A.push("P(color ∩ "+g+"): "+k.probabilityLabel),A.push("P("+g+" | color): "+w.toFixed(3)),A.push("P(color | "+g+"): "+T.toFixed(3)));var M=A.join("<br>"),S=c.mostReadable(u.color,["black","white"]);return{trace:d,x:o*(i-e.left),y:s*(v-e.top),text:M,color:u.color,borderColor:"black",fontFamily:'Monaco, "Courier New", monospace',fontColor:S,fontSize:10,idealAlign:a,hovertemplate:d.hovertemplate,hovertemplateLabels:k,eventData:[{data:d._input,fullData:d,category:g,count:y,probability:_,categorycount:x,colorcount:b,bandcolorcount:m}]}}(r,a,u):"dimension"===l&&(e=function(t,e,r){var i=[];return n.select(r.parentNode.parentNode).selectAll("g.category").select("rect.catrect").each((function(){i.push(E(t,e,this))})),i}(r,a,u)),e&&o.loneHover(e,{container:i._hoverlayer.node(),outerContainer:i._paper.node(),gd:r}))}}function C(t){var e=t.parcatsViewModel;e.dragDimension||(_(e.pathSelection),T(e.dimensionSelection.selectAll("g.category")),k(e.dimensionSelection.selectAll("g.category").selectAll("rect.bandrect")),o.loneUnhover(e.graphDiv._fullLayout._hoverlayer.node()),e.pathSelection.sort(v),-1!==e.hoverinfoItems.indexOf("skip"))||("color"===t.parcatsViewModel.hoveron?S(this,"plotly_unhover",n.event):M(this,"plotly_unhover",n.event))}function P(t){"fixed"!==t.parcatsViewModel.arrangement&&(t.dragDimensionDisplayInd=t.model.displayInd,t.initialDragDimensionDisplayInds=t.parcatsViewModel.model.dimensions.map((function(t){return t.displayInd})),t.dragHasMoved=!1,t.dragCategoryDisplayInd=null,n.select(this).selectAll("g.category").select("rect.catrect").each((function(e){var r=n.mouse(this)[0],i=n.mouse(this)[1];-2<=r&&r<=e.width+2&&-2<=i&&i<=e.height+2&&(t.dragCategoryDisplayInd=e.model.displayInd,t.initialDragCategoryDisplayInds=t.model.categories.map((function(t){return t.displayInd})),e.model.dragY=e.y,s.raiseToTop(this.parentNode),n.select(this.parentNode).selectAll("rect.bandrect").each((function(e){e.y<i&&i<=e.y+e.height&&(t.potentialClickBand=this)})))})),t.parcatsViewModel.dragDimension=t,o.loneUnhover(t.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()))}function O(t){if("fixed"!==t.parcatsViewModel.arrangement&&(t.dragHasMoved=!0,null!==t.dragDimensionDisplayInd)){var e=t.dragDimensionDisplayInd,r=e-1,i=e+1,a=t.parcatsViewModel.dimensions[e];if(null!==t.dragCategoryDisplayInd){var o=a.categories[t.dragCategoryDisplayInd];o.model.dragY+=n.event.dy;var s=o.model.dragY,l=o.model.displayInd,u=a.categories,c=u[l-1],f=u[l+1];void 0!==c&&s<c.y+c.height/2&&(o.model.displayInd=c.model.displayInd,c.model.displayInd=l),void 0!==f&&s+o.height>f.y+f.height/2&&(o.model.displayInd=f.model.displayInd,f.model.displayInd=l),t.dragCategoryDisplayInd=o.model.displayInd}if(null===t.dragCategoryDisplayInd||"freeform"===t.parcatsViewModel.arrangement){a.model.dragX=n.event.x;var h=t.parcatsViewModel.dimensions[r],p=t.parcatsViewModel.dimensions[i];void 0!==h&&a.model.dragX<h.x+h.width&&(a.model.displayInd=h.model.displayInd,h.model.displayInd=e),void 0!==p&&a.model.dragX+a.width>p.x&&(a.model.displayInd=p.model.displayInd,p.model.displayInd=t.dragDimensionDisplayInd),t.dragDimensionDisplayInd=a.model.displayInd}j(t.parcatsViewModel),N(t.parcatsViewModel),R(t.parcatsViewModel),z(t.parcatsViewModel)}}function I(t){if("fixed"!==t.parcatsViewModel.arrangement&&null!==t.dragDimensionDisplayInd){n.select(this).selectAll("text").attr("font-weight","normal");var e={},r=D(t.parcatsViewModel),i=t.parcatsViewModel.model.dimensions.map((function(t){return t.displayInd})),o=t.initialDragDimensionDisplayInds.some((function(t,e){return t!==i[e]}));o&&i.forEach((function(r,n){var i=t.parcatsViewModel.model.dimensions[n].containerInd;e["dimensions["+i+"].displayindex"]=r}));var s=!1;if(null!==t.dragCategoryDisplayInd){var l=t.model.categories.map((function(t){return t.displayInd}));if(s=t.initialDragCategoryDisplayInds.some((function(t,e){return t!==l[e]}))){var u=t.model.categories.slice().sort((function(t,e){return t.displayInd-e.displayInd})),c=u.map((function(t){return t.categoryValue})),f=u.map((function(t){return t.categoryLabel}));e["dimensions["+t.model.containerInd+"].categoryarray"]=[c],e["dimensions["+t.model.containerInd+"].ticktext"]=[f],e["dimensions["+t.model.containerInd+"].categoryorder"]="array"}}-1===t.parcatsViewModel.hoverinfoItems.indexOf("skip")&&!t.dragHasMoved&&t.potentialClickBand&&("color"===t.parcatsViewModel.hoveron?S(t.potentialClickBand,"plotly_click",n.event.sourceEvent):M(t.potentialClickBand,"plotly_click",n.event.sourceEvent)),t.model.dragX=null,null!==t.dragCategoryDisplayInd&&(t.parcatsViewModel.dimensions[t.dragDimensionDisplayInd].categories[t.dragCategoryDisplayInd].model.dragY=null,t.dragCategoryDisplayInd=null),t.dragDimensionDisplayInd=null,t.parcatsViewModel.dragDimension=null,t.dragHasMoved=null,t.potentialClickBand=null,j(t.parcatsViewModel),N(t.parcatsViewModel),n.transition().duration(300).ease("cubic-in-out").each((function(){R(t.parcatsViewModel,!0),z(t.parcatsViewModel,!0)})).each("end",(function(){(o||s)&&a.restyle(t.parcatsViewModel.graphDiv,e,[r])}))}}function D(t){for(var e,r=t.graphDiv._fullData,n=0;n<r.length;n++)if(t.key===r[n].uid){e=n;break}return e}function z(t,e){var r;void 0===e&&(e=!1),t.pathSelection.data((function(t){return t.paths}),p),(r=t.pathSelection,e?r.transition():r).attr("d",(function(t){return t.svgD}))}function R(t,e){function r(t){return e?t.transition():t}void 0===e&&(e=!1),t.dimensionSelection.data((function(t){return t.dimensions}),p);var i=t.dimensionSelection.selectAll("g.category").data((function(t){return t.categories}),p);r(t.dimensionSelection).attr("transform",(function(t){return l(t.x,0)})),r(i).attr("transform",(function(t){return l(0,t.y)})),i.select(".dimlabel").text((function(t,e){return 0===e?t.parcatsViewModel.model.dimensions[t.model.dimensionInd].dimensionLabel:null})),i.select(".catlabel").attr("text-anchor",(function(t){return d(t)?"start":"end"})).attr("x",(function(t){return d(t)?t.width+5:-5})).each((function(t){var e,r;d(t)?(e=t.width+5,r="start"):(e=-5,r="end"),n.select(this).selectAll("tspan").attr("x",e).attr("text-anchor",r)}));var a=i.selectAll("rect.bandrect").data((function(t){return t.bands}),p),o=a.enter().append("rect").attr("class","bandrect").attr("cursor","move").attr("stroke-opacity",0).attr("fill",(function(t){return t.color})).attr("fill-opacity",0);a.attr("fill",(function(t){return t.color})).attr("width",(function(t){return t.width})).attr("height",(function(t){return t.height})).attr("y",(function(t){return t.y})),k(o),a.each((function(){s.raiseToTop(this)})),a.exit().remove()}function F(t,e,r){var n,i=r[0],a=e.margin||{l:80,r:80,t:100,b:80},o=i.trace,s=o.domain,l=e.width,u=e.height,c=Math.floor(l*(s.x[1]-s.x[0])),f=Math.floor(u*(s.y[1]-s.y[0])),h=s.x[0]*l+a.l,p=e.height-s.y[1]*e.height+a.t,d=o.line.shape;n="all"===o.hoverinfo?["count","probability"]:(o.hoverinfo||"").split("+");var v={trace:o,key:o.uid,model:i,x:h,y:p,width:c,height:f,hoveron:o.hoveron,hoverinfoItems:n,arrangement:o.arrangement,bundlecolors:o.bundlecolors,sortpaths:o.sortpaths,labelfont:o.labelfont,categorylabelfont:o.tickfont,pathShape:d,dragDimension:null,margin:a,paths:[],dimensions:[],graphDiv:t,traceSelection:null,pathSelection:null,dimensionSelection:null};return i.dimensions&&(j(v),N(v)),v}function B(t,e,r,n,a){var o,s,l=[],u=[];for(s=0;s<r.length-1;s++)o=i(r[s]+t[s],t[s+1]),l.push(o(a)),u.push(o(1-a));var c="M "+t[0]+","+e[0];for(c+="l"+r[0]+",0 ",s=1;s<r.length;s++)c+="C"+l[s-1]+","+e[s-1]+" "+u[s-1]+","+e[s]+" "+t[s]+","+e[s],c+="l"+r[s]+",0 ";for(c+="l0,"+n+" ",c+="l -"+r[r.length-1]+",0 ",s=r.length-2;s>=0;s--)c+="C"+u[s]+","+(e[s+1]+n)+" "+l[s]+","+(e[s]+n)+" "+(t[s]+r[s])+","+(e[s]+n),c+="l-"+r[s]+",0 ";return c+"Z"}function N(t){var e=t.dimensions,r=t.model,n=e.map((function(t){return t.categories.map((function(t){return t.y}))})),i=t.model.dimensions.map((function(t){return t.categories.map((function(t){return t.displayInd}))})),a=t.model.dimensions.map((function(t){return t.displayInd})),o=t.dimensions.map((function(t){return t.model.dimensionInd})),s=e.map((function(t){return t.x})),l=e.map((function(t){return t.width})),u=[];for(var c in r.paths)r.paths.hasOwnProperty(c)&&u.push(r.paths[c]);function f(t){var e=t.categoryInds.map((function(t,e){return i[e][t]}));return o.map((function(t){return e[t]}))}u.sort((function(e,r){var n=f(e),i=f(r);return"backward"===t.sortpaths&&(n.reverse(),i.reverse()),n.push(e.valueInds[0]),i.push(r.valueInds[0]),t.bundlecolors&&(n.unshift(e.rawColor),i.unshift(r.rawColor)),n<i?-1:n>i?1:0}));for(var h=new Array(u.length),p=e[0].model.count,d=e[0].categories.map((function(t){return t.height})).reduce((function(t,e){return t+e})),v=0;v<u.length;v++){var g,y=u[v];g=p>0?d*(y.count/p):0;for(var m,x=new Array(n.length),b=0;b<y.categoryInds.length;b++){var _=y.categoryInds[b],w=i[b][_],T=a[b];x[T]=n[T][w],n[T][w]+=g;var k=t.dimensions[T].categories[w],A=k.bands.length,M=k.bands[A-1];if(void 0===M||y.rawColor!==M.rawColor){var S=void 0===M?0:M.y+M.height;k.bands.push({key:S,color:y.color,rawColor:y.rawColor,height:g,width:k.width,count:y.count,y:S,categoryViewModel:k,parcatsViewModel:t})}else{var E=k.bands[A-1];E.height+=g,E.count+=y.count}}m="hspline"===t.pathShape?B(s,x,l,g,.5):B(s,x,l,g,0),h[v]={key:y.valueInds[0],model:y,height:g,leftXs:s,topYs:x,dimWidths:l,svgD:m,parcatsViewModel:t}}t.paths=h}function j(t){var e=t.model.dimensions.map((function(t){return{displayInd:t.displayInd,dimensionInd:t.dimensionInd}}));e.sort((function(t,e){return t.displayInd-e.displayInd}));var r=[];for(var n in e){var i=e[n].dimensionInd,a=t.model.dimensions[i];r.push(U(t,a))}t.dimensions=r}function U(t,e){var r,n=t.model.dimensions.length,i=e.displayInd;r=40+(n>1?(t.width-80-16)/(n-1):0)*i;var a,o,s,l,u,c=[],f=t.model.maxCats,h=e.categories.length,p=e.count,d=t.height-8*(f-1),v=8*(f-h)/2,g=e.categories.map((function(t){return{displayInd:t.displayInd,categoryInd:t.categoryInd}}));for(g.sort((function(t,e){return t.displayInd-e.displayInd})),u=0;u<h;u++)l=g[u].categoryInd,o=e.categories[l],a=p>0?o.count/p*d:0,s={key:o.valueInds[0],model:o,width:16,height:a,y:null!==o.dragY?o.dragY:v,bands:[],parcatsViewModel:t},v=v+a+8,c.push(s);return{key:e.dimensionInd,x:null!==e.dragX?e.dragX:r,y:0,width:16,model:e,categories:c,parcatsViewModel:t,dragCategoryDisplayInd:null,dragDimensionDisplayInd:null,initialDragDimensionDisplayInds:null,initialDragCategoryDisplayInds:null,dragHasMoved:null,potentialClickBand:null}}t.exports=function(t,e,r,n){h(r,t,n,e)}},45784:function(t,e,r){"use strict";var n=r(45460);t.exports=function(t,e,r,i){var a=t._fullLayout,o=a._paper,s=a._size;n(t,o,e,{width:s.w,height:s.h,margin:{t:s.t,r:s.r,b:s.b,l:s.l}},r,i)}},73362:function(t,e,r){"use strict";var n=r(50693),i=r(13838),a=r(41940),o=r(27670).Y,s=r(1426).extendFlat,l=r(44467).templatedArray;t.exports={domain:o({name:"parcoords",trace:!0,editType:"plot"}),labelangle:{valType:"angle",dflt:0,editType:"plot"},labelside:{valType:"enumerated",values:["top","bottom"],dflt:"top",editType:"plot"},labelfont:a({editType:"plot"}),tickfont:a({editType:"plot"}),rangefont:a({editType:"plot"}),dimensions:l("dimension",{label:{valType:"string",editType:"plot"},tickvals:s({},i.tickvals,{editType:"plot"}),ticktext:s({},i.ticktext,{editType:"plot"}),tickformat:s({},i.tickformat,{editType:"plot"}),visible:{valType:"boolean",dflt:!0,editType:"plot"},range:{valType:"info_array",items:[{valType:"number",editType:"plot"},{valType:"number",editType:"plot"}],editType:"plot"},constraintrange:{valType:"info_array",freeLength:!0,dimensions:"1-2",items:[{valType:"any",editType:"plot"},{valType:"any",editType:"plot"}],editType:"plot"},multiselect:{valType:"boolean",dflt:!0,editType:"plot"},values:{valType:"data_array",editType:"calc"},editType:"calc"}),line:s({editType:"calc"},n("line",{colorscaleDflt:"Viridis",autoColorDflt:!1,editTypeOverride:"calc"})),unselected:{line:{color:{valType:"color",dflt:"#7f7f7f",editType:"plot"},opacity:{valType:"number",min:0,max:1,dflt:"auto",editType:"plot"},editType:"plot"},editType:"plot"}}},57920:function(t,e,r){"use strict";var n=r(25706),i=r(39898),a=r(28984).keyFun,o=r(28984).repeat,s=r(71828).sorterAsc,l=r(71828).strTranslate,u=n.bar.snapRatio;function c(t,e){return t*(1-u)+e*u}var f=n.bar.snapClose;function h(t,e){return t*(1-f)+e*f}function p(t,e,r,n){if(function(t,e){for(var r=0;r<e.length;r++)if(t>=e[r][0]&&t<=e[r][1])return!0;return!1}(r,n))return r;var i=t?-1:1,a=0,o=e.length-1;if(i<0){var s=a;a=o,o=s}for(var l=e[a],u=l,f=a;i*f<i*o;f+=i){var p=f+i,d=e[p];if(i*r<i*h(l,d))return c(l,u);if(i*r<i*d||p===o)return c(d,l);u=l,l=d}}function d(t){t.attr("x",-n.bar.captureWidth/2).attr("width",n.bar.captureWidth)}function v(t){t.attr("visibility","visible").style("visibility","visible").attr("fill","yellow").attr("opacity",0)}function g(t){if(!t.brush.filterSpecified)return"0,"+t.height;for(var e,r,n,i=y(t.brush.filter.getConsolidated(),t.height),a=[0],o=i.length?i[0][0]:null,s=0;s<i.length;s++)r=(e=i[s])[1]-e[0],a.push(o),a.push(r),(n=s+1)<i.length&&(o=i[n][0]-e[1]);return a.push(t.height),a}function y(t,e){return t.map((function(t){return t.map((function(t){return Math.max(0,t*e)})).sort(s)}))}function m(){i.select(document.body).style("cursor",null)}function x(t){t.attr("stroke-dasharray",g)}function b(t,e){var r=i.select(t).selectAll(".highlight, .highlight-shadow");x(e?r.transition().duration(n.bar.snapDuration).each("end",e):r)}function _(t,e){var r,i=t.brush,a=NaN,o={};if(i.filterSpecified){var s=t.height,l=i.filter.getConsolidated(),u=y(l,s),c=NaN,f=NaN,h=NaN;for(r=0;r<=u.length;r++){var p=u[r];if(p&&p[0]<=e&&e<=p[1]){c=r;break}if(f=r?r-1:NaN,p&&p[0]>e){h=r;break}}if(a=c,isNaN(a)&&(a=isNaN(f)||isNaN(h)?isNaN(f)?h:f:e-u[f][1]<u[h][0]-e?f:h),!isNaN(a)){var d=u[a],v=function(t,e){var r=n.bar.handleHeight;if(!(e>t[1]+r||e<t[0]-r))return e>=.9*t[1]+.1*t[0]?"n":e<=.9*t[0]+.1*t[1]?"s":"ns"}(d,e);v&&(o.interval=l[a],o.intervalPix=d,o.region=v)}}if(t.ordinal&&!o.region){var g=t.unitTickvals,m=t.unitToPaddedPx.invert(e);for(r=0;r<g.length;r++){var x=[.25*g[Math.max(r-1,0)]+.75*g[r],.25*g[Math.min(r+1,g.length-1)]+.75*g[r]];if(m>=x[0]&&m<=x[1]){o.clickableOrdinalRange=x;break}}}return o}function w(t,e){i.event.sourceEvent.stopPropagation();var r=e.height-i.mouse(t)[1]-2*n.verticalPadding,a=e.brush.svgBrush;a.wasDragged=!0,a._dragging=!0,a.grabbingBar?a.newExtent=[r-a.grabPoint,r+a.barLength-a.grabPoint].map(e.unitToPaddedPx.invert):a.newExtent=[a.startExtent,e.unitToPaddedPx.invert(r)].sort(s),e.brush.filterSpecified=!0,a.extent=a.stayingIntervals.concat([a.newExtent]),a.brushCallback(e),b(t.parentNode)}function T(t,e){var r=_(e,e.height-i.mouse(t)[1]-2*n.verticalPadding),a="crosshair";r.clickableOrdinalRange?a="pointer":r.region&&(a=r.region+"-resize"),i.select(document.body).style("cursor",a)}function k(t){t.on("mousemove",(function(t){i.event.preventDefault(),t.parent.inBrushDrag||T(this,t)})).on("mouseleave",(function(t){t.parent.inBrushDrag||m()})).call(i.behavior.drag().on("dragstart",(function(t){!function(t,e){i.event.sourceEvent.stopPropagation();var r=e.height-i.mouse(t)[1]-2*n.verticalPadding,a=e.unitToPaddedPx.invert(r),o=e.brush,s=_(e,r),l=s.interval,u=o.svgBrush;if(u.wasDragged=!1,u.grabbingBar="ns"===s.region,u.grabbingBar){var c=l.map(e.unitToPaddedPx);u.grabPoint=r-c[0]-n.verticalPadding,u.barLength=c[1]-c[0]}u.clickableOrdinalRange=s.clickableOrdinalRange,u.stayingIntervals=e.multiselect&&o.filterSpecified?o.filter.getConsolidated():[],l&&(u.stayingIntervals=u.stayingIntervals.filter((function(t){return t[0]!==l[0]&&t[1]!==l[1]}))),u.startExtent=s.region?l["s"===s.region?1:0]:a,e.parent.inBrushDrag=!0,u.brushStartCallback()}(this,t)})).on("drag",(function(t){w(this,t)})).on("dragend",(function(t){!function(t,e){var r=e.brush,n=r.filter,a=r.svgBrush;a._dragging||(T(t,e),w(t,e),e.brush.svgBrush.wasDragged=!1),a._dragging=!1,i.event.sourceEvent.stopPropagation();var o=a.grabbingBar;if(a.grabbingBar=!1,a.grabLocation=void 0,e.parent.inBrushDrag=!1,m(),!a.wasDragged)return a.wasDragged=void 0,a.clickableOrdinalRange?r.filterSpecified&&e.multiselect?a.extent.push(a.clickableOrdinalRange):(a.extent=[a.clickableOrdinalRange],r.filterSpecified=!0):o?(a.extent=a.stayingIntervals,0===a.extent.length&&M(r)):M(r),a.brushCallback(e),b(t.parentNode),void a.brushEndCallback(r.filterSpecified?n.getConsolidated():[]);var s=function(){n.set(n.getConsolidated())};if(e.ordinal){var l=e.unitTickvals;l[l.length-1]<l[0]&&l.reverse(),a.newExtent=[p(0,l,a.newExtent[0],a.stayingIntervals),p(1,l,a.newExtent[1],a.stayingIntervals)];var u=a.newExtent[1]>a.newExtent[0];a.extent=a.stayingIntervals.concat(u?[a.newExtent]:[]),a.extent.length||M(r),a.brushCallback(e),u?b(t.parentNode,s):(s(),b(t.parentNode))}else s();a.brushEndCallback(r.filterSpecified?n.getConsolidated():[])}(this,t)})))}function A(t,e){return t[0]-e[0]}function M(t){t.filterSpecified=!1,t.svgBrush.extent=[[-1/0,1/0]]}function S(t){for(var e,r=t.slice(),n=[],i=r.shift();i;){for(e=i.slice();(i=r.shift())&&i[0]<=e[1];)e[1]=Math.max(e[1],i[1]);n.push(e)}return 1===n.length&&n[0][0]>n[0][1]&&(n=[]),n}t.exports={makeBrush:function(t,e,r,n,i,a){var o,l=function(){var t,e,r=[];return{set:function(n){1===(r=n.map((function(t){return t.slice().sort(s)})).sort(A)).length&&r[0][0]===-1/0&&r[0][1]===1/0&&(r=[[0,-1]]),t=S(r),e=r.reduce((function(t,e){return[Math.min(t[0],e[0]),Math.max(t[1],e[1])]}),[1/0,-1/0])},get:function(){return r.slice()},getConsolidated:function(){return t},getBounds:function(){return e}}}();return l.set(r),{filter:l,filterSpecified:e,svgBrush:{extent:[],brushStartCallback:n,brushCallback:(o=i,function(t){var e=t.brush,r=function(t){return t.svgBrush.extent.map((function(t){return t.slice()}))}(e),n=r.slice();e.filter.set(n),o()}),brushEndCallback:a}}},ensureAxisBrush:function(t,e,r){var i=t.selectAll("."+n.cn.axisBrush).data(o,a);i.enter().append("g").classed(n.cn.axisBrush,!0),function(t,e,r){var i=r._context.staticPlot,a=t.selectAll(".background").data(o);a.enter().append("rect").classed("background",!0).call(d).call(v).style("pointer-events",i?"none":"auto").attr("transform",l(0,n.verticalPadding)),a.call(k).attr("height",(function(t){return t.height-n.verticalPadding}));var s=t.selectAll(".highlight-shadow").data(o);s.enter().append("line").classed("highlight-shadow",!0).attr("x",-n.bar.width/2).attr("stroke-width",n.bar.width+n.bar.strokeWidth).attr("stroke",e).attr("opacity",n.bar.strokeOpacity).attr("stroke-linecap","butt"),s.attr("y1",(function(t){return t.height})).call(x);var u=t.selectAll(".highlight").data(o);u.enter().append("line").classed("highlight",!0).attr("x",-n.bar.width/2).attr("stroke-width",n.bar.width-n.bar.strokeWidth).attr("stroke",n.bar.fillColor).attr("opacity",n.bar.fillOpacity).attr("stroke-linecap","butt"),u.attr("y1",(function(t){return t.height})).call(x)}(i,e,r)},cleanRanges:function(t,e){if(Array.isArray(t[0])?(t=t.map((function(t){return t.sort(s)})),t=e.multiselect?S(t.sort(A)):[t[0]]):t=[t.sort(s)],e.tickvals){var r=e.tickvals.slice().sort(s);if(!(t=t.map((function(t){var e=[p(0,r,t[0],[]),p(1,r,t[1],[])];if(e[1]>e[0])return e})).filter((function(t){return t}))).length)return}return t.length>1?t:t[0]}}},71791:function(t,e,r){"use strict";t.exports={attributes:r(73362),supplyDefaults:r(3633),calc:r(24639),colorbar:{container:"line",min:"cmin",max:"cmax"},moduleType:"trace",name:"parcoords",basePlotModule:r(49351),categories:["gl","regl","noOpacity","noHover"],meta:{}}},49351:function(t,e,r){"use strict";var n=r(39898),i=r(27659).a0,a=r(21341),o=r(77922);e.name="parcoords",e.plot=function(t){var e=i(t.calcdata,"parcoords")[0];e.length&&a(t,e)},e.clean=function(t,e,r,n){var i=n._has&&n._has("parcoords"),a=e._has&&e._has("parcoords");i&&!a&&(n._paperdiv.selectAll(".parcoords").remove(),n._glimages.selectAll("*").remove())},e.toSVG=function(t){var e=t._fullLayout._glimages,r=n.select(t).selectAll(".svg-container");r.filter((function(t,e){return e===r.size()-1})).selectAll(".gl-canvas-context, .gl-canvas-focus").each((function(){var t=this,r=t.toDataURL("image/png");e.append("svg:image").attr({xmlns:o.svg,"xlink:href":r,preserveAspectRatio:"none",x:0,y:0,width:t.style.width,height:t.style.height})})),window.setTimeout((function(){n.selectAll("#filterBarPattern").attr("id","filterBarPattern")}),60)}},24639:function(t,e,r){"use strict";var n=r(71828).isArrayOrTypedArray,i=r(21081),a=r(28984).wrap;t.exports=function(t,e){var r,o;return i.hasColorscale(e,"line")&&n(e.line.color)?(r=e.line.color,o=i.extractOpts(e.line).colorscale,i.calc(t,e,{vals:r,containerStr:"line",cLetter:"c"})):(r=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=.5;return e}(e._length),o=[[0,e.line.color],[1,e.line.color]]),a({lineColor:r,cscale:o})}},25706:function(t){"use strict";t.exports={maxDimensionCount:60,overdrag:45,verticalPadding:2,tickDistance:50,canvasPixelRatio:1,blockLineCount:5e3,layers:["contextLineLayer","focusLineLayer","pickLineLayer"],axisTitleOffset:28,axisExtentOffset:10,bar:{width:4,captureWidth:10,fillColor:"magenta",fillOpacity:1,snapDuration:150,snapRatio:.25,snapClose:.01,strokeOpacity:1,strokeWidth:1,handleHeight:8,handleOpacity:1,handleOverlap:0},cn:{axisExtentText:"axis-extent-text",parcoordsLineLayers:"parcoords-line-layers",parcoordsLineLayer:"parcoords-lines",parcoords:"parcoords",parcoordsControlView:"parcoords-control-view",yAxis:"y-axis",axisOverlays:"axis-overlays",axis:"axis",axisHeading:"axis-heading",axisTitle:"axis-title",axisExtent:"axis-extent",axisExtentTop:"axis-extent-top",axisExtentTopText:"axis-extent-top-text",axisExtentBottom:"axis-extent-bottom",axisExtentBottomText:"axis-extent-bottom-text",axisBrush:"axis-brush"},id:{filterBarPattern:"filter-bar-pattern"}}},3633:function(t,e,r){"use strict";var n=r(71828),i=r(52075).hasColorscale,a=r(1586),o=r(27670).c,s=r(85501),l=r(89298),u=r(73362),c=r(57920),f=r(25706).maxDimensionCount,h=r(94397);function p(t,e,r,i){function a(r,i){return n.coerce(t,e,u.dimensions,r,i)}var o=a("values"),s=a("visible");if(o&&o.length||(s=e.visible=!1),s){a("label"),a("tickvals"),a("ticktext"),a("tickformat");var f=a("range");e._ax={_id:"y",type:"linear",showexponent:"all",exponentformat:"B",range:f},l.setConvert(e._ax,i.layout),a("multiselect");var h=a("constraintrange");h&&(e.constraintrange=c.cleanRanges(h,e))}}t.exports=function(t,e,r,l){function c(r,i){return n.coerce(t,e,u,r,i)}var d=t.dimensions;Array.isArray(d)&&d.length>f&&(n.log("parcoords traces support up to "+f+" dimensions at the moment"),d.splice(f));var v=s(t,e,{name:"dimensions",layout:l,handleItemDefaults:p}),g=function(t,e,r,o,s){var l=s("line.color",r);if(i(t,"line")&&n.isArrayOrTypedArray(l)){if(l.length)return s("line.colorscale"),a(t,e,o,s,{prefix:"line.",cLetter:"c"}),l.length;e.line.color=r}return 1/0}(t,e,r,l,c);o(e,l,c),Array.isArray(v)&&v.length||(e.visible=!1),h(e,v,"values",g);var y={family:l.font.family,size:Math.round(l.font.size/1.2),color:l.font.color};n.coerceFont(c,"labelfont",y),n.coerceFont(c,"tickfont",y),n.coerceFont(c,"rangefont",y),c("labelangle"),c("labelside"),c("unselected.line.color"),c("unselected.line.opacity")}},1602:function(t,e,r){"use strict";var n=r(71828).isTypedArray;e.convertTypedArray=function(t){return n(t)?Array.prototype.slice.call(t):t},e.isOrdinal=function(t){return!!t.tickvals},e.isVisible=function(t){return t.visible||!("visible"in t)}},67618:function(t,e,r){"use strict";var n=r(71791);n.plot=r(21341),t.exports=n},83398:function(t,e,r){"use strict";var n=r(56068),i=n(["precision highp float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor;\n\nattribute vec4 p01_04, p05_08, p09_12, p13_16,\n               p17_20, p21_24, p25_28, p29_32,\n               p33_36, p37_40, p41_44, p45_48,\n               p49_52, p53_56, p57_60, colors;\n\nuniform mat4 dim0A, dim1A, dim0B, dim1B, dim0C, dim1C, dim0D, dim1D,\n             loA, hiA, loB, hiB, loC, hiC, loD, hiD;\n\nuniform vec2 resolution, viewBoxPos, viewBoxSize;\nuniform float maskHeight;\nuniform float drwLayer; // 0: context, 1: focus, 2: pick\nuniform vec4 contextColor;\nuniform sampler2D maskTexture, palette;\n\nbool isPick    = (drwLayer > 1.5);\nbool isContext = (drwLayer < 0.5);\n\nconst vec4 ZEROS = vec4(0.0, 0.0, 0.0, 0.0);\nconst vec4 UNITS = vec4(1.0, 1.0, 1.0, 1.0);\n\nfloat val(mat4 p, mat4 v) {\n    return dot(matrixCompMult(p, v) * UNITS, UNITS);\n}\n\nfloat axisY(float ratio, mat4 A, mat4 B, mat4 C, mat4 D) {\n    float y1 = val(A, dim0A) + val(B, dim0B) + val(C, dim0C) + val(D, dim0D);\n    float y2 = val(A, dim1A) + val(B, dim1B) + val(C, dim1C) + val(D, dim1D);\n    return y1 * (1.0 - ratio) + y2 * ratio;\n}\n\nint iMod(int a, int b) {\n    return a - b * (a / b);\n}\n\nbool fOutside(float p, float lo, float hi) {\n    return (lo < hi) && (lo > p || p > hi);\n}\n\nbool vOutside(vec4 p, vec4 lo, vec4 hi) {\n    return (\n        fOutside(p[0], lo[0], hi[0]) ||\n        fOutside(p[1], lo[1], hi[1]) ||\n        fOutside(p[2], lo[2], hi[2]) ||\n        fOutside(p[3], lo[3], hi[3])\n    );\n}\n\nbool mOutside(mat4 p, mat4 lo, mat4 hi) {\n    return (\n        vOutside(p[0], lo[0], hi[0]) ||\n        vOutside(p[1], lo[1], hi[1]) ||\n        vOutside(p[2], lo[2], hi[2]) ||\n        vOutside(p[3], lo[3], hi[3])\n    );\n}\n\nbool outsideBoundingBox(mat4 A, mat4 B, mat4 C, mat4 D) {\n    return mOutside(A, loA, hiA) ||\n           mOutside(B, loB, hiB) ||\n           mOutside(C, loC, hiC) ||\n           mOutside(D, loD, hiD);\n}\n\nbool outsideRasterMask(mat4 A, mat4 B, mat4 C, mat4 D) {\n    mat4 pnts[4];\n    pnts[0] = A;\n    pnts[1] = B;\n    pnts[2] = C;\n    pnts[3] = D;\n\n    for(int i = 0; i < 4; ++i) {\n        for(int j = 0; j < 4; ++j) {\n            for(int k = 0; k < 4; ++k) {\n                if(0 == iMod(\n                    int(255.0 * texture2D(maskTexture,\n                        vec2(\n                            (float(i * 2 + j / 2) + 0.5) / 8.0,\n                            (pnts[i][j][k] * (maskHeight - 1.0) + 1.0) / maskHeight\n                        ))[3]\n                    ) / int(pow(2.0, float(iMod(j * 4 + k, 8)))),\n                    2\n                )) return true;\n            }\n        }\n    }\n    return false;\n}\n\nvec4 position(bool isContext, float v, mat4 A, mat4 B, mat4 C, mat4 D) {\n    float x = 0.5 * sign(v) + 0.5;\n    float y = axisY(x, A, B, C, D);\n    float z = 1.0 - abs(v);\n\n    z += isContext ? 0.0 : 2.0 * float(\n        outsideBoundingBox(A, B, C, D) ||\n        outsideRasterMask(A, B, C, D)\n    );\n\n    return vec4(\n        2.0 * (vec2(x, y) * viewBoxSize + viewBoxPos) / resolution - 1.0,\n        z,\n        1.0\n    );\n}\n\nvoid main() {\n    mat4 A = mat4(p01_04, p05_08, p09_12, p13_16);\n    mat4 B = mat4(p17_20, p21_24, p25_28, p29_32);\n    mat4 C = mat4(p33_36, p37_40, p41_44, p45_48);\n    mat4 D = mat4(p49_52, p53_56, p57_60, ZEROS);\n\n    float v = colors[3];\n\n    gl_Position = position(isContext, v, A, B, C, D);\n\n    fragColor =\n        isContext ? vec4(contextColor) :\n        isPick ? vec4(colors.rgb, 1.0) : texture2D(palette, vec2(abs(v), 0.5));\n}\n"]),a=n(["precision highp float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor;\n\nvoid main() {\n    gl_FragColor = fragColor;\n}\n"]),o=r(25706).maxDimensionCount,s=r(71828),l=1e-6,u=new Uint8Array(4),c=new Uint8Array(4),f={shape:[256,1],format:"rgba",type:"uint8",mag:"nearest",min:"nearest"};function h(t,e,r,n,i){var a=t._gl;a.enable(a.SCISSOR_TEST),a.scissor(e,r,n,i),t.clear({color:[0,0,0,0],depth:1})}function p(t,e,r,n,i,a){var o=a.key;r.drawCompleted||(function(t){t.read({x:0,y:0,width:1,height:1,data:u})}(t),r.drawCompleted=!0),function s(l){var u=Math.min(n,i-l*n);0===l&&(window.cancelAnimationFrame(r.currentRafs[o]),delete r.currentRafs[o],h(t,a.scissorX,a.scissorY,a.scissorWidth,a.viewBoxSize[1])),r.clearOnly||(a.count=2*u,a.offset=2*l*n,e(a),l*n+u<i&&(r.currentRafs[o]=window.requestAnimationFrame((function(){s(l+1)}))),r.drawCompleted=!1)}(0)}function d(t,e){for(var r=new Array(256),n=0;n<256;n++)r[n]=t(n/255).concat(e);return r}function v(t,e){return(t>>>8*e)%256/255}function g(t,e,r){for(var n=new Array(8*e),i=0,a=0;a<e;a++)for(var o=0;o<2;o++)for(var s=0;s<4;s++){var l=4*t+s,u=r[64*a+l];63===l&&0===o&&(u*=-1),n[i++]=u}return n}function y(t){var e="0"+t;return e.substr(e.length-2)}function m(t){return t<o?"p"+y(t+1)+"_"+y(t+4):"colors"}function x(t,e,r,n,i,a,o,l,u,c,f,h,p,d){for(var v=[[],[]],g=0;g<64;g++)v[0][g]=g===i?1:0,v[1][g]=g===a?1:0;o*=d,l*=d,u*=d,c*=d;var y=t.lines.canvasOverdrag*d,m=t.domain,x=t.canvasWidth*d,b=t.canvasHeight*d,_=t.pad.l*d,w=t.pad.b*d,T=t.layoutHeight*d,k=t.layoutWidth*d,A=t.deselectedLines.color,M=t.deselectedLines.opacity;return s.extendFlat({key:f,resolution:[x,b],viewBoxPos:[o+y,l],viewBoxSize:[u,c],i0:i,i1:a,dim0A:v[0].slice(0,16),dim0B:v[0].slice(16,32),dim0C:v[0].slice(32,48),dim0D:v[0].slice(48,64),dim1A:v[1].slice(0,16),dim1B:v[1].slice(16,32),dim1C:v[1].slice(32,48),dim1D:v[1].slice(48,64),drwLayer:h,contextColor:[A[0]/255,A[1]/255,A[2]/255,"auto"!==M?A[3]*M:Math.max(1/255,Math.pow(1/t.lines.color.length,1/3))],scissorX:(n===e?0:o+y)+(_-y)+k*m.x[0],scissorWidth:(n===r?x-o+y:u+.5)+(n===e?o+y:0),scissorY:l+w+T*m.y[0],scissorHeight:c,viewportX:_-y+k*m.x[0],viewportY:w+T*m.y[0],viewportWidth:x,viewportHeight:b},p)}function b(t){var e=2047,r=Math.max(0,Math.floor(t[0]*e),0),n=Math.min(e,Math.ceil(t[1]*e),e);return[Math.min(r,n),Math.max(r,n)]}t.exports=function(t,e){var r,n,u,y,_,w=e.context,T=e.pick,k=e.regl,A=k._gl,M=A.getParameter(A.ALIASED_LINE_WIDTH_RANGE),S=Math.max(M[0],Math.min(M[1],e.viewModel.plotGlPixelRatio)),E={currentRafs:{},drawCompleted:!0,clearOnly:!1},L=function(t){for(var e={},r=0;r<=o;r+=4)e[m(r)]=t.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)});return e}(k),C=k.texture(f),P=[];I(e);var O=k({profile:!1,blend:{enable:w,func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:1,dstAlpha:1},equation:{rgb:"add",alpha:"add"},color:[0,0,0,0]},depth:{enable:!w,mask:!0,func:"less",range:[0,1]},cull:{enable:!0,face:"back"},scissor:{enable:!0,box:{x:k.prop("scissorX"),y:k.prop("scissorY"),width:k.prop("scissorWidth"),height:k.prop("scissorHeight")}},viewport:{x:k.prop("viewportX"),y:k.prop("viewportY"),width:k.prop("viewportWidth"),height:k.prop("viewportHeight")},dither:!1,vert:i,frag:a,primitive:"lines",lineWidth:S,attributes:L,uniforms:{resolution:k.prop("resolution"),viewBoxPos:k.prop("viewBoxPos"),viewBoxSize:k.prop("viewBoxSize"),dim0A:k.prop("dim0A"),dim1A:k.prop("dim1A"),dim0B:k.prop("dim0B"),dim1B:k.prop("dim1B"),dim0C:k.prop("dim0C"),dim1C:k.prop("dim1C"),dim0D:k.prop("dim0D"),dim1D:k.prop("dim1D"),loA:k.prop("loA"),hiA:k.prop("hiA"),loB:k.prop("loB"),hiB:k.prop("hiB"),loC:k.prop("loC"),hiC:k.prop("hiC"),loD:k.prop("loD"),hiD:k.prop("hiD"),palette:C,contextColor:k.prop("contextColor"),maskTexture:k.prop("maskTexture"),drwLayer:k.prop("drwLayer"),maskHeight:k.prop("maskHeight")},offset:k.prop("offset"),count:k.prop("count")});function I(t){r=t.model,n=t.viewModel,u=n.dimensions.slice(),y=u[0]?u[0].values.length:0;var e=r.lines,i=T?e.color.map((function(t,r){return r/e.color.length})):e.color,a=function(t,e,r){for(var n,i=new Array(t*(o+4)),a=0,s=0;s<t;s++){for(var u=0;u<o;u++)i[a++]=u<e.length?e[u].paddedUnitValues[s]:.5;i[a++]=v(s,2),i[a++]=v(s,1),i[a++]=v(s,0),i[a++]=(n=r[s],Math.max(l,Math.min(.999999,n)))}return i}(y,u,i);!function(t,e,r){for(var n=0;n<=o;n+=4)t[m(n)](g(n/4,e,r))}(L,y,a),w||T||(C=k.texture(s.extendFlat({data:d(r.unitToColor,255)},f)))}return{render:function(t,e,n){var i,a,o,s=t.length,l=1/0,c=-1/0;for(i=0;i<s;i++)t[i].dim0.canvasX<l&&(l=t[i].dim0.canvasX,a=i),t[i].dim1.canvasX>c&&(c=t[i].dim1.canvasX,o=i);0===s&&h(k,0,0,r.canvasWidth,r.canvasHeight);var f=function(t){var e,r,n,i=[[],[]];for(n=0;n<64;n++){var a=!t&&n<u.length?u[n].brush.filter.getBounds():[-1/0,1/0];i[0][n]=a[0],i[1][n]=a[1]}var o=new Array(16384);for(e=0;e<16384;e++)o[e]=255;if(!t)for(e=0;e<u.length;e++){var s=e%8,l=(e-s)/8,c=Math.pow(2,s),f=u[e].brush.filter.get();if(!(f.length<2)){var h=b(f[0])[1];for(r=1;r<f.length;r++){var p=b(f[r]);for(n=h+1;n<p[0];n++)o[8*n+l]&=~c;h=Math.max(h,p[1])}}}var d={shape:[8,2048],format:"alpha",type:"uint8",mag:"nearest",min:"nearest",data:o};return _?_(d):_=k.texture(d),{maskTexture:_,maskHeight:2048,loA:i[0].slice(0,16),loB:i[0].slice(16,32),loC:i[0].slice(32,48),loD:i[0].slice(48,64),hiA:i[1].slice(0,16),hiB:i[1].slice(16,32),hiC:i[1].slice(32,48),hiD:i[1].slice(48,64)}}(w);for(i=0;i<s;i++){var d=t[i],v=d.dim0.crossfilterDimensionIndex,g=d.dim1.crossfilterDimensionIndex,m=d.canvasX,A=d.canvasY,M=m+d.panelSizeX,S=d.plotGlPixelRatio;if(e||!P[v]||P[v][0]!==m||P[v][1]!==M){P[v]=[m,M];var L=x(r,a,o,i,v,g,m,A,d.panelSizeX,d.panelSizeY,d.dim0.crossfilterDimensionIndex,w?0:T?2:1,f,S);E.clearOnly=n;var C=e?r.lines.blockLineCount:y;p(k,O,E,C,y,L)}}},readPixel:function(t,e){return k.read({x:t,y:e,width:1,height:1,data:c}),c},readPixels:function(t,e,r,n){var i=new Uint8Array(4*r*n);return k.read({x:t,y:e,width:r,height:n,data:i}),i},destroy:function(){for(var e in t.style["pointer-events"]="none",C.destroy(),_&&_.destroy(),L)L[e].destroy()},update:I}}},94397:function(t){"use strict";t.exports=function(t,e,r,n){var i,a;for(n||(n=1/0),i=0;i<e.length;i++)(a=e[i]).visible&&(n=Math.min(n,a[r].length));for(n===1/0&&(n=0),t._length=n,i=0;i<e.length;i++)(a=e[i]).visible&&(a._length=n);return n}},17171:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=i.numberFormat,o=r(36652),s=r(89298),l=i.strRotate,u=i.strTranslate,c=r(63893),f=r(91424),h=r(21081),p=r(28984),d=p.keyFun,v=p.repeat,g=p.unwrap,y=r(1602),m=r(25706),x=r(57920),b=r(83398);function _(t,e,r){return i.aggNums(t,null,e,r)}function w(t,e){return k(_(Math.min,t,e),_(Math.max,t,e))}function T(t){var e=t.range;return e?k(e[0],e[1]):w(t.values,t._length)}function k(t,e){return!isNaN(t)&&isFinite(t)||(t=0),!isNaN(e)&&isFinite(e)||(e=0),t===e&&(0===t?(t-=1,e+=1):(t*=.9,e*=1.1)),[t,e]}function A(t,e,r,i,o){var s,l,u=T(r);return i?n.scale.ordinal().domain(i.map((s=a(r.tickformat),l=o,l?function(t,e){var r=l[e];return null==r?s(t):r}:s))).range(i.map((function(r){var n=(r-u[0])/(u[1]-u[0]);return t-e+n*(2*e-t)}))):n.scale.linear().domain(u).range([t-e,e])}function M(t){if(t.tickvals){var e=T(t);return n.scale.ordinal().domain(t.tickvals).range(t.tickvals.map((function(t){return(t-e[0])/(e[1]-e[0])})))}}function S(t){var e=t.map((function(t){return t[0]})),r=t.map((function(t){var e=o(t[1]);return n.rgb("rgb("+e[0]+","+e[1]+","+e[2]+")")})),i="rgb".split("").map((function(t){return n.scale.linear().clamp(!0).domain(e).range(r.map((i=t,function(t){return t[i]})));var i}));return function(t){return i.map((function(e){return e(t)}))}}function E(t){return t.dimensions.some((function(t){return t.brush.filterSpecified}))}function L(t,e,r){var a=g(e),s=a.trace,l=y.convertTypedArray(a.lineColor),u=s.line,c={color:o(s.unselected.line.color),opacity:s.unselected.line.opacity},f=h.extractOpts(u),p=f.reversescale?h.flipScale(a.cscale):a.cscale,d=s.domain,v=s.dimensions,x=t.width,b=s.labelangle,_=s.labelside,w=s.labelfont,k=s.tickfont,A=s.rangefont,M=i.extendDeepNoArrays({},u,{color:l.map(n.scale.linear().domain(T({values:l,range:[f.min,f.max],_length:s._length}))),blockLineCount:m.blockLineCount,canvasOverdrag:m.overdrag*m.canvasPixelRatio}),E=Math.floor(x*(d.x[1]-d.x[0])),L=Math.floor(t.height*(d.y[1]-d.y[0])),C=t.margin||{l:80,r:80,t:100,b:80},P=E,O=L;return{key:r,colCount:v.filter(y.isVisible).length,dimensions:v,tickDistance:m.tickDistance,unitToColor:S(p),lines:M,deselectedLines:c,labelAngle:b,labelSide:_,labelFont:w,tickFont:k,rangeFont:A,layoutWidth:x,layoutHeight:t.height,domain:d,translateX:d.x[0]*x,translateY:t.height-d.y[1]*t.height,pad:C,canvasWidth:P*m.canvasPixelRatio+2*M.canvasOverdrag,canvasHeight:O*m.canvasPixelRatio,width:P,height:O,canvasPixelRatio:m.canvasPixelRatio}}function C(t,e,r){var o=r.width,s=r.height,l=r.dimensions,u=r.canvasPixelRatio,c=function(t){return o*t/Math.max(1,r.colCount-1)},f=m.verticalPadding/s,h=function(t,e){return n.scale.linear().range([e,t-e])}(s,m.verticalPadding),p={key:r.key,xScale:c,model:r,inBrushDrag:!1},d={};return p.dimensions=l.filter(y.isVisible).map((function(o,l){var v=function(t,e){return n.scale.linear().domain(T(t)).range([e,1-e])}(o,f),g=d[o.label];d[o.label]=(g||0)+1;var b=o.label+(g?"__"+g:""),_=o.constraintrange,w=_&&_.length;w&&!Array.isArray(_[0])&&(_=[_]);var k=w?_.map((function(t){return t.map(v)})):[[-1/0,1/0]],S=o.values;S.length>o._length&&(S=S.slice(0,o._length));var L,C=o.tickvals;function P(t,e){return{val:t,text:L[e]}}function O(t,e){return t.val-e.val}if(Array.isArray(C)&&C.length){L=o.ticktext,Array.isArray(L)&&L.length?L.length>C.length?L=L.slice(0,C.length):C.length>L.length&&(C=C.slice(0,L.length)):L=C.map(a(o.tickformat));for(var I=1;I<C.length;I++)if(C[I]<C[I-1]){for(var D=C.map(P).sort(O),z=0;z<C.length;z++)C[z]=D[z].val,L[z]=D[z].text;break}}else C=void 0;return S=y.convertTypedArray(S),{key:b,label:o.label,tickFormat:o.tickformat,tickvals:C,ticktext:L,ordinal:y.isOrdinal(o),multiselect:o.multiselect,xIndex:l,crossfilterDimensionIndex:l,visibleIndex:o._index,height:s,values:S,paddedUnitValues:S.map(v),unitTickvals:C&&C.map(v),xScale:c,x:c(l),canvasX:c(l)*u,unitToPaddedPx:h,domainScale:A(s,m.verticalPadding,o,C,L),ordinalScale:M(o),parent:p,model:r,brush:x.makeBrush(t,w,k,(function(){t.linePickActive(!1)}),(function(){var e=p;e.focusLayer&&e.focusLayer.render(e.panels,!0);var r=E(e);!t.contextShown()&&r?(e.contextLayer&&e.contextLayer.render(e.panels,!0),t.contextShown(!0)):t.contextShown()&&!r&&(e.contextLayer&&e.contextLayer.render(e.panels,!0,!0),t.contextShown(!1))}),(function(r){if(p.focusLayer.render(p.panels,!0),p.pickLayer&&p.pickLayer.render(p.panels,!0),t.linePickActive(!0),e&&e.filterChanged){var n=v.invert,a=r.map((function(t){return t.map(n).sort(i.sorterAsc)})).sort((function(t,e){return t[0]-e[0]}));e.filterChanged(p.key,o._index,a)}}))}})),p}function P(t){t.classed(m.cn.axisExtentText,!0).attr("text-anchor","middle").style("cursor","default")}function O(t,e){var r="top"===e?1:-1,n=t*Math.PI/180;return{dir:r,dx:Math.sin(n),dy:Math.cos(n),degrees:t}}function I(t,e,r){for(var n=e.panels||(e.panels=[]),i=t.data(),a=0;a<i.length-1;a++){var o=n[a]||(n[a]={}),s=i[a],l=i[a+1];o.dim0=s,o.dim1=l,o.canvasX=s.canvasX,o.panelSizeX=l.canvasX-s.canvasX,o.panelSizeY=e.model.canvasHeight,o.y=0,o.canvasY=0,o.plotGlPixelRatio=r}}function D(t,e){return s.tickText(t._ax,e,!1).text}function z(t,e){if(t.ordinal)return"";var r=t.domainScale.domain(),n=r[e?r.length-1:0];return D(t.model.dimensions[t.visibleIndex],n)}t.exports=function(t,e,r,a){var o=t._context.staticPlot,h=t._fullLayout,p=h._toppaper,_=h._glcontainer,T=t._context.plotGlPixelRatio,A=t._fullLayout.paper_bgcolor;!function(t){for(var e=0;e<t.length;e++)for(var r=0;r<t[e].length;r++)for(var n=t[e][r].trace,i=n.dimensions,a=0;a<i.length;a++){var o=i[a].values,l=i[a]._ax;l&&(l.range?l.range=k(l.range[0],l.range[1]):l.range=w(o,n._length),l.dtick||(l.dtick=.01*(Math.abs(l.range[1]-l.range[0])||1)),l.tickformat=i[a].tickformat,s.calcTicks(l),l.cleanRange())}}(e);var M,S,R=(M=!0,S=!1,{linePickActive:function(t){return arguments.length?M=!!t:M},contextShown:function(t){return arguments.length?S=!!t:S}}),F=e.filter((function(t){return g(t).trace.visible})).map(L.bind(0,r)).map(C.bind(0,R,a));_.each((function(t,e){return i.extendFlat(t,F[e])}));var B=_.selectAll(".gl-canvas").each((function(t){t.viewModel=F[0],t.viewModel.plotGlPixelRatio=T,t.viewModel.paperColor=A,t.model=t.viewModel?t.viewModel.model:null})),N=null;B.filter((function(t){return t.pick})).style("pointer-events",o?"none":"auto").on("mousemove",(function(t){if(R.linePickActive()&&t.lineLayer&&a&&a.hover){var e=n.event,r=this.width,i=this.height,o=n.mouse(this),s=o[0],l=o[1];if(s<0||l<0||s>=r||l>=i)return;var u=t.lineLayer.readPixel(s,i-1-l),c=0!==u[3],f=c?u[2]+256*(u[1]+256*u[0]):null,h={x:s,y:l,clientX:e.clientX,clientY:e.clientY,dataIndex:t.model.key,curveNumber:f};f!==N&&(c?a.hover(h):a.unhover&&a.unhover(h),N=f)}})),B.style("opacity",(function(t){return t.pick?0:1})),p.style("background","rgba(255, 255, 255, 0)");var j=p.selectAll("."+m.cn.parcoords).data(F,d);j.exit().remove(),j.enter().append("g").classed(m.cn.parcoords,!0).style("shape-rendering","crispEdges").style("pointer-events","none"),j.attr("transform",(function(t){return u(t.model.translateX,t.model.translateY)}));var U=j.selectAll("."+m.cn.parcoordsControlView).data(v,d);U.enter().append("g").classed(m.cn.parcoordsControlView,!0),U.attr("transform",(function(t){return u(t.model.pad.l,t.model.pad.t)}));var V=U.selectAll("."+m.cn.yAxis).data((function(t){return t.dimensions}),d);V.enter().append("g").classed(m.cn.yAxis,!0),U.each((function(t){I(V,t,T)})),B.each((function(t){if(t.viewModel){!t.lineLayer||a?t.lineLayer=b(this,t):t.lineLayer.update(t),(t.key||0===t.key)&&(t.viewModel[t.key]=t.lineLayer);var e=!t.context||a;t.lineLayer.render(t.viewModel.panels,e)}})),V.attr("transform",(function(t){return u(t.xScale(t.xIndex),0)})),V.call(n.behavior.drag().origin((function(t){return t})).on("drag",(function(t){var e=t.parent;R.linePickActive(!1),t.x=Math.max(-m.overdrag,Math.min(t.model.width+m.overdrag,n.event.x)),t.canvasX=t.x*t.model.canvasPixelRatio,V.sort((function(t,e){return t.x-e.x})).each((function(e,r){e.xIndex=r,e.x=t===e?e.x:e.xScale(e.xIndex),e.canvasX=e.x*e.model.canvasPixelRatio})),I(V,e,T),V.filter((function(e){return 0!==Math.abs(t.xIndex-e.xIndex)})).attr("transform",(function(t){return u(t.xScale(t.xIndex),0)})),n.select(this).attr("transform",u(t.x,0)),V.each((function(r,n,i){i===t.parent.key&&(e.dimensions[n]=r)})),e.contextLayer&&e.contextLayer.render(e.panels,!1,!E(e)),e.focusLayer.render&&e.focusLayer.render(e.panels)})).on("dragend",(function(t){var e=t.parent;t.x=t.xScale(t.xIndex),t.canvasX=t.x*t.model.canvasPixelRatio,I(V,e,T),n.select(this).attr("transform",(function(t){return u(t.x,0)})),e.contextLayer&&e.contextLayer.render(e.panels,!1,!E(e)),e.focusLayer&&e.focusLayer.render(e.panels),e.pickLayer&&e.pickLayer.render(e.panels,!0),R.linePickActive(!0),a&&a.axesMoved&&a.axesMoved(e.key,e.dimensions.map((function(t){return t.crossfilterDimensionIndex})))}))),V.exit().remove();var H=V.selectAll("."+m.cn.axisOverlays).data(v,d);H.enter().append("g").classed(m.cn.axisOverlays,!0),H.selectAll("."+m.cn.axis).remove();var q=H.selectAll("."+m.cn.axis).data(v,d);q.enter().append("g").classed(m.cn.axis,!0),q.each((function(t){var e=t.model.height/t.model.tickDistance,r=t.domainScale,i=r.domain();n.select(this).call(n.svg.axis().orient("left").tickSize(4).outerTickSize(2).ticks(e,t.tickFormat).tickValues(t.ordinal?i:null).tickFormat((function(e){return y.isOrdinal(t)?e:D(t.model.dimensions[t.visibleIndex],e)})).scale(r)),f.font(q.selectAll("text"),t.model.tickFont)})),q.selectAll(".domain, .tick>line").attr("fill","none").attr("stroke","black").attr("stroke-opacity",.25).attr("stroke-width","1px"),q.selectAll("text").style("text-shadow",c.makeTextShadow(A)).style("cursor","default");var G=H.selectAll("."+m.cn.axisHeading).data(v,d);G.enter().append("g").classed(m.cn.axisHeading,!0);var Z=G.selectAll("."+m.cn.axisTitle).data(v,d);Z.enter().append("text").classed(m.cn.axisTitle,!0).attr("text-anchor","middle").style("cursor","ew-resize").style("pointer-events",o?"none":"auto"),Z.text((function(t){return t.label})).each((function(e){var r=n.select(this);f.font(r,e.model.labelFont),c.convertToTspans(r,t)})).attr("transform",(function(t){var e=O(t.model.labelAngle,t.model.labelSide),r=m.axisTitleOffset;return(e.dir>0?"":u(0,2*r+t.model.height))+l(e.degrees)+u(-r*e.dx,-r*e.dy)})).attr("text-anchor",(function(t){var e=O(t.model.labelAngle,t.model.labelSide);return 2*Math.abs(e.dx)>Math.abs(e.dy)?e.dir*e.dx<0?"start":"end":"middle"}));var Y=H.selectAll("."+m.cn.axisExtent).data(v,d);Y.enter().append("g").classed(m.cn.axisExtent,!0);var W=Y.selectAll("."+m.cn.axisExtentTop).data(v,d);W.enter().append("g").classed(m.cn.axisExtentTop,!0),W.attr("transform",u(0,-m.axisExtentOffset));var X=W.selectAll("."+m.cn.axisExtentTopText).data(v,d);X.enter().append("text").classed(m.cn.axisExtentTopText,!0).call(P),X.text((function(t){return z(t,!0)})).each((function(t){f.font(n.select(this),t.model.rangeFont)}));var J=Y.selectAll("."+m.cn.axisExtentBottom).data(v,d);J.enter().append("g").classed(m.cn.axisExtentBottom,!0),J.attr("transform",(function(t){return u(0,t.model.height+m.axisExtentOffset)}));var K=J.selectAll("."+m.cn.axisExtentBottomText).data(v,d);K.enter().append("text").classed(m.cn.axisExtentBottomText,!0).attr("dy","0.75em").call(P),K.text((function(t){return z(t,!1)})).each((function(t){f.font(n.select(this),t.model.rangeFont)})),x.ensureAxisBrush(H,A,t)}},21341:function(t,e,r){"use strict";var n=r(17171),i=r(79749),a=r(1602).isVisible,o={};function s(t,e,r){var n=e.indexOf(r),i=t.indexOf(n);return-1===i&&(i+=e.length),i}(t.exports=function(t,e){var r=t._fullLayout;if(i(t,[],o)){var l={},u={},c={},f={},h=r._size;e.forEach((function(e,r){var n=e[0].trace;c[r]=n.index;var i=f[r]=n._fullInput.index;l[r]=t.data[i].dimensions,u[r]=t.data[i].dimensions.slice()})),n(t,e,{width:h.w,height:h.h,margin:{t:h.t,r:h.r,b:h.b,l:h.l}},{filterChanged:function(e,n,i){var a=u[e][n],o=i.map((function(t){return t.slice()})),s="dimensions["+n+"].constraintrange",l=r._tracePreGUI[t._fullData[c[e]]._fullInput.uid];if(void 0===l[s]){var h=a.constraintrange;l[s]=h||null}var p=t._fullData[c[e]].dimensions[n];o.length?(1===o.length&&(o=o[0]),a.constraintrange=o,p.constraintrange=o.slice(),o=[o]):(delete a.constraintrange,delete p.constraintrange,o=null);var d={};d[s]=o,t.emit("plotly_restyle",[d,[f[e]]])},hover:function(e){t.emit("plotly_hover",e)},unhover:function(e){t.emit("plotly_unhover",e)},axesMoved:function(e,r){var n=function(t,e){return function(r,n){return s(t,e,r)-s(t,e,n)}}(r,u[e].filter(a));l[e].sort(n),u[e].filter((function(t){return!a(t)})).sort((function(t){return u[e].indexOf(t)})).forEach((function(t){l[e].splice(l[e].indexOf(t),1),l[e].splice(u[e].indexOf(t),0,t)})),t.emit("plotly_restyle",[{dimensions:[l[e]]},[f[e]]])}})}}).reglPrecompiled=o},34e3:function(t,e,r){"use strict";var n=r(9012),i=r(27670).Y,a=r(41940),o=r(22399),s=r(5386).fF,l=r(5386).si,u=r(1426).extendFlat,c=r(79952).u,f=a({editType:"plot",arrayOk:!0,colorEditType:"plot"});t.exports={labels:{valType:"data_array",editType:"calc"},label0:{valType:"number",dflt:0,editType:"calc"},dlabel:{valType:"number",dflt:1,editType:"calc"},values:{valType:"data_array",editType:"calc"},marker:{colors:{valType:"data_array",editType:"calc"},line:{color:{valType:"color",dflt:o.defaultLine,arrayOk:!0,editType:"style"},width:{valType:"number",min:0,dflt:0,arrayOk:!0,editType:"style"},editType:"calc"},pattern:c,editType:"calc"},text:{valType:"data_array",editType:"plot"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"style"},scalegroup:{valType:"string",dflt:"",editType:"calc"},textinfo:{valType:"flaglist",flags:["label","text","value","percent"],extras:["none"],editType:"calc"},hoverinfo:u({},n.hoverinfo,{flags:["label","text","value","percent","name"]}),hovertemplate:s({},{keys:["label","color","value","percent","text"]}),texttemplate:l({editType:"plot"},{keys:["label","color","value","percent","text"]}),textposition:{valType:"enumerated",values:["inside","outside","auto","none"],dflt:"auto",arrayOk:!0,editType:"plot"},textfont:u({},f,{}),insidetextorientation:{valType:"enumerated",values:["horizontal","radial","tangential","auto"],dflt:"auto",editType:"plot"},insidetextfont:u({},f,{}),outsidetextfont:u({},f,{}),automargin:{valType:"boolean",dflt:!1,editType:"plot"},title:{text:{valType:"string",dflt:"",editType:"plot"},font:u({},f,{}),position:{valType:"enumerated",values:["top left","top center","top right","middle center","bottom left","bottom center","bottom right"],editType:"plot"},editType:"plot"},domain:i({name:"pie",trace:!0,editType:"calc"}),hole:{valType:"number",min:0,max:1,dflt:0,editType:"calc"},sort:{valType:"boolean",dflt:!0,editType:"calc"},direction:{valType:"enumerated",values:["clockwise","counterclockwise"],dflt:"counterclockwise",editType:"calc"},rotation:{valType:"angle",dflt:0,editType:"calc"},pull:{valType:"number",min:0,max:1,dflt:0,arrayOk:!0,editType:"calc"},_deprecated:{title:{valType:"string",dflt:"",editType:"calc"},titlefont:u({},f,{}),titleposition:{valType:"enumerated",values:["top left","top center","top right","middle center","bottom left","bottom center","bottom right"],editType:"calc"}}}},13584:function(t,e,r){"use strict";var n=r(74875);e.name="pie",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},32354:function(t,e,r){"use strict";var n=r(92770),i=r(84267),a=r(7901),o={};function s(t){return function(e,r){return!!e&&!!(e=i(e)).isValid()&&(e=a.addOpacity(e,e.getAlpha()),t[r]||(t[r]=e),e)}}function l(t,e){var r,n=JSON.stringify(t),a=e[n];if(!a){for(a=t.slice(),r=0;r<t.length;r++)a.push(i(t[r]).lighten(20).toHexString());for(r=0;r<t.length;r++)a.push(i(t[r]).darken(20).toHexString());e[n]=a}return a}t.exports={calc:function(t,e){var r,i,a=[],o=t._fullLayout,l=o.hiddenlabels||[],u=e.labels,c=e.marker.colors||[],f=e.values,h=e._length,p=e._hasValues&&h;if(e.dlabel)for(u=new Array(h),r=0;r<h;r++)u[r]=String(e.label0+r*e.dlabel);var d={},v=s(o["_"+e.type+"colormap"]),g=0,y=!1;for(r=0;r<h;r++){var m,x,b;if(p){if(m=f[r],!n(m))continue;m=+m}else m=1;void 0!==(x=u[r])&&""!==x||(x=r);var _=d[x=String(x)];void 0===_?(d[x]=a.length,(b=-1!==l.indexOf(x))||(g+=m),a.push({v:m,label:x,color:v(c[r],x),i:r,pts:[r],hidden:b})):(y=!0,(i=a[_]).v+=m,i.pts.push(r),i.hidden||(g+=m),!1===i.color&&c[r]&&(i.color=v(c[r],x)))}return a=a.filter((function(t){return t.v>=0})),("funnelarea"===e.type?y:e.sort)&&a.sort((function(t,e){return e.v-t.v})),a[0]&&(a[0].vTotal=g),a},crossTraceCalc:function(t,e){var r=(e||{}).type;r||(r="pie");var n=t._fullLayout,i=t.calcdata,a=n[r+"colorway"],s=n["_"+r+"colormap"];n["extend"+r+"colors"]&&(a=l(a,o));for(var u=0,c=0;c<i.length;c++){var f=i[c];if(f[0].trace.type===r)for(var h=0;h<f.length;h++){var p=f[h];!1===p.color&&(s[p.label]?p.color=s[p.label]:(s[p.label]=p.color=a[u%a.length],u++))}}},makePullColorFn:s,generateExtendedColors:l}},37434:function(t,e,r){"use strict";var n=r(92770),i=r(71828),a=r(34e3),o=r(27670).c,s=r(90769).handleText,l=r(71828).coercePattern;function u(t,e){var r=Array.isArray(t),a=i.isArrayOrTypedArray(e),o=Math.min(r?t.length:1/0,a?e.length:1/0);if(isFinite(o)||(o=0),o&&a){for(var s,l=0;l<o;l++){var u=e[l];if(n(u)&&u>0){s=!0;break}}s||(o=0)}return{hasLabels:r,hasValues:a,len:o}}function c(t,e,r,n,i){n("marker.line.width")&&n("marker.line.color",i?void 0:r.paper_bgcolor);var a=n("marker.colors");l(n,"marker.pattern",a),t.marker&&!e.marker.pattern.fgcolor&&(e.marker.pattern.fgcolor=t.marker.colors),e.marker.pattern.bgcolor||(e.marker.pattern.bgcolor=r.paper_bgcolor)}t.exports={handleLabelsAndValues:u,handleMarkerDefaults:c,supplyDefaults:function(t,e,r,n){function l(r,n){return i.coerce(t,e,a,r,n)}var f=u(l("labels"),l("values")),h=f.len;if(e._hasLabels=f.hasLabels,e._hasValues=f.hasValues,!e._hasLabels&&e._hasValues&&(l("label0"),l("dlabel")),h){e._length=h,c(t,e,n,l,!0),l("scalegroup");var p,d=l("text"),v=l("texttemplate");if(v||(p=l("textinfo",Array.isArray(d)?"text+percent":"percent")),l("hovertext"),l("hovertemplate"),v||p&&"none"!==p){var g=l("textposition");s(t,e,n,l,g,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),(Array.isArray(g)||"auto"===g||"outside"===g)&&l("automargin"),("inside"===g||"auto"===g||Array.isArray(g))&&l("insidetextorientation")}o(e,n,l);var y=l("hole");if(l("title.text")){var m=l("title.position",y?"middle center":"top center");y||"middle center"!==m||(e.title.position="top center"),i.coerceFont(l,"title.font",n.font)}l("sort"),l("direction"),l("rotation"),l("pull")}else e.visible=!1}}},20007:function(t,e,r){"use strict";var n=r(23469).appendArrayMultiPointValues;t.exports=function(t,e){var r={curveNumber:e.index,pointNumbers:t.pts,data:e._input,fullData:e,label:t.label,color:t.color,value:t.v,percent:t.percent,text:t.text,bbox:t.bbox,v:t.v};return 1===t.pts.length&&(r.pointNumber=r.i=t.pts[0]),n(r,e,t.pts),"funnelarea"===e.type&&(delete r.v,delete r.i),r}},22209:function(t,e,r){"use strict";var n=r(91424),i=r(7901);t.exports=function(t,e,r,a){var o=r.marker.pattern;o&&o.shape?n.pointStyle(t,r,a,e):i.fill(t,e.color)}},53581:function(t,e,r){"use strict";var n=r(71828);function i(t){return-1!==t.indexOf("e")?t.replace(/[.]?0+e/,"e"):-1!==t.indexOf(".")?t.replace(/[.]?0+$/,""):t}e.formatPiePercent=function(t,e){var r=i((100*t).toPrecision(3));return n.numSeparate(r,e)+"%"},e.formatPieValue=function(t,e){var r=i(t.toPrecision(10));return n.numSeparate(r,e)},e.getFirstFilled=function(t,e){if(Array.isArray(t))for(var r=0;r<e.length;r++){var n=t[e[r]];if(n||0===n||""===n)return n}},e.castOption=function(t,r){return Array.isArray(t)?e.getFirstFilled(t,r):t||void 0},e.getRotationAngle=function(t){return("auto"===t?0:t)*Math.PI/180}},58810:function(t,e,r){"use strict";t.exports={attributes:r(34e3),supplyDefaults:r(37434).supplyDefaults,supplyLayoutDefaults:r(92097),layoutAttributes:r(92774),calc:r(32354).calc,crossTraceCalc:r(32354).crossTraceCalc,plot:r(14575).plot,style:r(68357),styleOne:r(63463),moduleType:"trace",name:"pie",basePlotModule:r(13584),categories:["pie-like","pie","showLegend"],meta:{}}},92774:function(t){"use strict";t.exports={hiddenlabels:{valType:"data_array",editType:"calc"},piecolorway:{valType:"colorlist",editType:"calc"},extendpiecolors:{valType:"boolean",dflt:!0,editType:"calc"}}},92097:function(t,e,r){"use strict";var n=r(71828),i=r(92774);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r("hiddenlabels"),r("piecolorway",e.colorway),r("extendpiecolors")}},14575:function(t,e,r){"use strict";var n=r(39898),i=r(74875),a=r(30211),o=r(7901),s=r(91424),l=r(71828),u=l.strScale,c=l.strTranslate,f=r(63893),h=r(72597),p=h.recordMinTextSize,d=h.clearMinTextSize,v=r(97313).TEXTPAD,g=r(53581),y=r(20007),m=r(71828).isValidTextValue;function x(t,e,r){var i=r[0],o=i.cx,s=i.cy,u=i.trace,c="funnelarea"===u.type;"_hasHoverLabel"in u||(u._hasHoverLabel=!1),"_hasHoverEvent"in u||(u._hasHoverEvent=!1),t.on("mouseover",(function(t){var r=e._fullLayout,f=e._fullData[u.index];if(!e._dragging&&!1!==r.hovermode){var h=f.hoverinfo;if(Array.isArray(h)&&(h=a.castHoverinfo({hoverinfo:[g.castOption(h,t.pts)],_module:u._module},r,0)),"all"===h&&(h="label+text+value+percent+name"),f.hovertemplate||"none"!==h&&"skip"!==h&&h){var p=t.rInscribed||0,d=o+t.pxmid[0]*(1-p),v=s+t.pxmid[1]*(1-p),m=r.separators,x=[];if(h&&-1!==h.indexOf("label")&&x.push(t.label),t.text=g.castOption(f.hovertext||f.text,t.pts),h&&-1!==h.indexOf("text")){var b=t.text;l.isValidTextValue(b)&&x.push(b)}t.value=t.v,t.valueLabel=g.formatPieValue(t.v,m),h&&-1!==h.indexOf("value")&&x.push(t.valueLabel),t.percent=t.v/i.vTotal,t.percentLabel=g.formatPiePercent(t.percent,m),h&&-1!==h.indexOf("percent")&&x.push(t.percentLabel);var _=f.hoverlabel,w=_.font,T=[];a.loneHover({trace:u,x0:d-p*i.r,x1:d+p*i.r,y:v,_x0:c?o+t.TL[0]:d-p*i.r,_x1:c?o+t.TR[0]:d+p*i.r,_y0:c?s+t.TL[1]:v-p*i.r,_y1:c?s+t.BL[1]:v+p*i.r,text:x.join("<br>"),name:f.hovertemplate||-1!==h.indexOf("name")?f.name:void 0,idealAlign:t.pxmid[0]<0?"left":"right",color:g.castOption(_.bgcolor,t.pts)||t.color,borderColor:g.castOption(_.bordercolor,t.pts),fontFamily:g.castOption(w.family,t.pts),fontSize:g.castOption(w.size,t.pts),fontColor:g.castOption(w.color,t.pts),nameLength:g.castOption(_.namelength,t.pts),textAlign:g.castOption(_.align,t.pts),hovertemplate:g.castOption(f.hovertemplate,t.pts),hovertemplateLabels:t,eventData:[y(t,f)]},{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:e,inOut_bbox:T}),t.bbox=T[0],u._hasHoverLabel=!0}u._hasHoverEvent=!0,e.emit("plotly_hover",{points:[y(t,f)],event:n.event})}})),t.on("mouseout",(function(t){var r=e._fullLayout,i=e._fullData[u.index],o=n.select(this).datum();u._hasHoverEvent&&(t.originalEvent=n.event,e.emit("plotly_unhover",{points:[y(o,i)],event:n.event}),u._hasHoverEvent=!1),u._hasHoverLabel&&(a.loneUnhover(r._hoverlayer.node()),u._hasHoverLabel=!1)})),t.on("click",(function(t){var r=e._fullLayout,i=e._fullData[u.index];e._dragging||!1===r.hovermode||(e._hoverdata=[y(t,i)],a.click(e,n.event))}))}function b(t,e,r){var n=g.castOption(t.insidetextfont.color,e.pts);!n&&t._input.textfont&&(n=g.castOption(t._input.textfont.color,e.pts));var i=g.castOption(t.insidetextfont.family,e.pts)||g.castOption(t.textfont.family,e.pts)||r.family,a=g.castOption(t.insidetextfont.size,e.pts)||g.castOption(t.textfont.size,e.pts)||r.size;return{color:n||o.contrast(e.color),family:i,size:a}}function _(t,e){for(var r,n,i=0;i<t.length;i++)if((n=(r=t[i][0]).trace).title.text){var a=n.title.text;n._meta&&(a=l.templateString(a,n._meta));var o=s.tester.append("text").attr("data-notex",1).text(a).call(s.font,n.title.font).call(f.convertToTspans,e),u=s.bBox(o.node(),!0);r.titleBox={width:u.width,height:u.height},o.remove()}}function w(t,e,r){var n=r.r||e.rpx1,i=e.rInscribed;if(e.startangle===e.stopangle)return{rCenter:1-i,scale:0,rotate:0,textPosAngle:0};var a,o=e.ring,s=1===o&&Math.abs(e.startangle-e.stopangle)===2*Math.PI,l=e.halfangle,u=e.midangle,c=r.trace.insidetextorientation,f="horizontal"===c,h="tangential"===c,p="radial"===c,d="auto"===c,v=[];if(!d){var g,y=function(r,i){if(function(t,e){var r=t.startangle,n=t.stopangle;return r>e&&e>n||r<e&&e<n}(e,r)){var s=Math.abs(r-e.startangle),l=Math.abs(r-e.stopangle),u=s<l?s:l;(a="tan"===i?k(t,n,o,u,0):T(t,n,o,u,Math.PI/2)).textPosAngle=r,v.push(a)}};if(f||h){for(g=4;g>=-4;g-=2)y(Math.PI*g,"tan");for(g=4;g>=-4;g-=2)y(Math.PI*(g+1),"tan")}if(f||p){for(g=4;g>=-4;g-=2)y(Math.PI*(g+1.5),"rad");for(g=4;g>=-4;g-=2)y(Math.PI*(g+.5),"rad")}}if(s||d||f){var m=Math.sqrt(t.width*t.width+t.height*t.height);if((a={scale:i*n*2/m,rCenter:1-i,rotate:0}).textPosAngle=(e.startangle+e.stopangle)/2,a.scale>=1)return a;v.push(a)}(d||p)&&((a=T(t,n,o,l,u)).textPosAngle=(e.startangle+e.stopangle)/2,v.push(a)),(d||h)&&((a=k(t,n,o,l,u)).textPosAngle=(e.startangle+e.stopangle)/2,v.push(a));for(var x=0,b=0,_=0;_<v.length;_++){var w=v[_].scale;if(b<w&&(b=w,x=_),!d&&b>=1)break}return v[x]}function T(t,e,r,n,i){e=Math.max(0,e-2*v);var a=t.width/t.height,o=S(a,n,e,r);return{scale:2*o/t.height,rCenter:A(a,o/e),rotate:M(i)}}function k(t,e,r,n,i){e=Math.max(0,e-2*v);var a=t.height/t.width,o=S(a,n,e,r);return{scale:2*o/t.width,rCenter:A(a,o/e),rotate:M(i+Math.PI/2)}}function A(t,e){return Math.cos(e)-t*e}function M(t){return(180/Math.PI*t+720)%180-90}function S(t,e,r,n){var i=t+1/(2*Math.tan(e));return r*Math.min(1/(Math.sqrt(i*i+.5)+i),n/(Math.sqrt(t*t+n/2)+t))}function E(t,e){return t.v!==e.vTotal||e.trace.hole?Math.min(1/(1+1/Math.sin(t.halfangle)),t.ring/2):1}function L(t,e){var r=e.pxmid[0],n=e.pxmid[1],i=t.width/2,a=t.height/2;return r<0&&(i*=-1),n<0&&(a*=-1),{scale:1,rCenter:1,rotate:0,x:i+Math.abs(a)*(i>0?1:-1)/2,y:a/(1+r*r/(n*n)),outside:!0}}function C(t,e){var r,n,i,a=t.trace,o={x:t.cx,y:t.cy},s={tx:0,ty:0};s.ty+=a.title.font.size,i=O(a),-1!==a.title.position.indexOf("top")?(o.y-=(1+i)*t.r,s.ty-=t.titleBox.height):-1!==a.title.position.indexOf("bottom")&&(o.y+=(1+i)*t.r);var l,u=t.r/(void 0===(l=t.trace.aspectratio)?1:l),c=e.w*(a.domain.x[1]-a.domain.x[0])/2;return-1!==a.title.position.indexOf("left")?(c+=u,o.x-=(1+i)*u,s.tx+=t.titleBox.width/2):-1!==a.title.position.indexOf("center")?c*=2:-1!==a.title.position.indexOf("right")&&(c+=u,o.x+=(1+i)*u,s.tx-=t.titleBox.width/2),r=c/t.titleBox.width,n=P(t,e)/t.titleBox.height,{x:o.x,y:o.y,scale:Math.min(r,n),tx:s.tx,ty:s.ty}}function P(t,e){var r=t.trace,n=e.h*(r.domain.y[1]-r.domain.y[0]);return Math.min(t.titleBox.height,n/2)}function O(t){var e,r=t.pull;if(!r)return 0;if(Array.isArray(r))for(r=0,e=0;e<t.pull.length;e++)t.pull[e]>r&&(r=t.pull[e]);return r}function I(t,e){for(var r=[],n=0;n<t.length;n++){var i=t[n][0],a=i.trace,o=a.domain,s=e.w*(o.x[1]-o.x[0]),l=e.h*(o.y[1]-o.y[0]);a.title.text&&"middle center"!==a.title.position&&(l-=P(i,e));var u=s/2,c=l/2;"funnelarea"!==a.type||a.scalegroup||(c/=a.aspectratio),i.r=Math.min(u,c)/(1+O(a)),i.cx=e.l+e.w*(a.domain.x[1]+a.domain.x[0])/2,i.cy=e.t+e.h*(1-a.domain.y[0])-l/2,a.title.text&&-1!==a.title.position.indexOf("bottom")&&(i.cy-=P(i,e)),a.scalegroup&&-1===r.indexOf(a.scalegroup)&&r.push(a.scalegroup)}!function(t,e){for(var r,n,i,a=0;a<e.length;a++){var o=1/0,s=e[a];for(n=0;n<t.length;n++)if((i=(r=t[n][0]).trace).scalegroup===s){var l;if("pie"===i.type)l=r.r*r.r;else if("funnelarea"===i.type){var u,c;i.aspectratio>1?c=(u=r.r)/i.aspectratio:u=(c=r.r)*i.aspectratio,l=(u*=(1+i.baseratio)/2)*c}o=Math.min(o,l/r.vTotal)}for(n=0;n<t.length;n++)if((i=(r=t[n][0]).trace).scalegroup===s){var f=o*r.vTotal;"funnelarea"===i.type&&(f/=(1+i.baseratio)/2,f/=i.aspectratio),r.r=Math.sqrt(f)}}}(t,r)}function D(t,e){return[t*Math.sin(e),-t*Math.cos(e)]}function z(t,e,r){var n=t._fullLayout,i=r.trace,a=i.texttemplate,o=i.textinfo;if(!a&&o&&"none"!==o){var s,u=o.split("+"),c=function(t){return-1!==u.indexOf(t)},f=c("label"),h=c("text"),p=c("value"),d=c("percent"),v=n.separators;if(s=f?[e.label]:[],h){var y=g.getFirstFilled(i.text,e.pts);m(y)&&s.push(y)}p&&s.push(g.formatPieValue(e.v,v)),d&&s.push(g.formatPiePercent(e.v/r.vTotal,v)),e.text=s.join("<br>")}if(a){var x=l.castOption(i,e.i,"texttemplate");if(x){var b=function(t){return{label:t.label,value:t.v,valueLabel:g.formatPieValue(t.v,n.separators),percent:t.v/r.vTotal,percentLabel:g.formatPiePercent(t.v/r.vTotal,n.separators),color:t.color,text:t.text,customdata:l.castOption(i,t.i,"customdata")}}(e),_=g.getFirstFilled(i.text,e.pts);(m(_)||""===_)&&(b.text=_),e.text=l.texttemplateString(x,b,t._fullLayout._d3locale,b,i._meta||{})}else e.text=""}}function R(t,e){var r=t.rotate*Math.PI/180,n=Math.cos(r),i=Math.sin(r),a=(e.left+e.right)/2,o=(e.top+e.bottom)/2;t.textX=a*n-o*i,t.textY=a*i+o*n,t.noCenter=!0}t.exports={plot:function(t,e){var r=t._context.staticPlot,a=t._fullLayout,h=a._size;d("pie",a),_(e,t),I(e,h);var v=l.makeTraceGroups(a._pielayer,e,"trace").each((function(e){var d=n.select(this),v=e[0],y=v.trace;!function(t){var e,r,n,i=t[0],a=i.r,o=i.trace,s=g.getRotationAngle(o.rotation),l=2*Math.PI/i.vTotal,u="px0",c="px1";if("counterclockwise"===o.direction){for(e=0;e<t.length&&t[e].hidden;e++);if(e===t.length)return;s+=l*t[e].v,l*=-1,u="px1",c="px0"}for(n=D(a,s),e=0;e<t.length;e++)(r=t[e]).hidden||(r[u]=n,r.startangle=s,s+=l*r.v/2,r.pxmid=D(a,s),r.midangle=s,n=D(a,s+=l*r.v/2),r.stopangle=s,r[c]=n,r.largeArc=r.v>i.vTotal/2?1:0,r.halfangle=Math.PI*Math.min(r.v/i.vTotal,.5),r.ring=1-o.hole,r.rInscribed=E(r,i))}(e),d.attr("stroke-linejoin","round"),d.each((function(){var m=n.select(this).selectAll("g.slice").data(e);m.enter().append("g").classed("slice",!0),m.exit().remove();var _=[[[],[]],[[],[]]],T=!1;m.each((function(i,o){if(i.hidden)n.select(this).selectAll("path,g").remove();else{i.pointNumber=i.i,i.curveNumber=y.index,_[i.pxmid[1]<0?0:1][i.pxmid[0]<0?0:1].push(i);var u=v.cx,c=v.cy,h=n.select(this),d=h.selectAll("path.surface").data([i]);if(d.enter().append("path").classed("surface",!0).style({"pointer-events":r?"none":"all"}),h.call(x,t,e),y.pull){var m=+g.castOption(y.pull,i.pts)||0;m>0&&(u+=m*i.pxmid[0],c+=m*i.pxmid[1])}i.cxFinal=u,i.cyFinal=c;var k=y.hole;if(i.v===v.vTotal){var A="M"+(u+i.px0[0])+","+(c+i.px0[1])+P(i.px0,i.pxmid,!0,1)+P(i.pxmid,i.px0,!0,1)+"Z";k?d.attr("d","M"+(u+k*i.px0[0])+","+(c+k*i.px0[1])+P(i.px0,i.pxmid,!1,k)+P(i.pxmid,i.px0,!1,k)+"Z"+A):d.attr("d",A)}else{var M=P(i.px0,i.px1,!0,1);if(k){var S=1-k;d.attr("d","M"+(u+k*i.px1[0])+","+(c+k*i.px1[1])+P(i.px1,i.px0,!1,k)+"l"+S*i.px0[0]+","+S*i.px0[1]+M+"Z")}else d.attr("d","M"+u+","+c+"l"+i.px0[0]+","+i.px0[1]+M+"Z")}z(t,i,v);var E=g.castOption(y.textposition,i.pts),C=h.selectAll("g.slicetext").data(i.text&&"none"!==E?[0]:[]);C.enter().append("g").classed("slicetext",!0),C.exit().remove(),C.each((function(){var r=l.ensureSingle(n.select(this),"text","",(function(t){t.attr("data-notex",1)})),h=l.ensureUniformFontSize(t,"outside"===E?function(t,e,r){return{color:g.castOption(t.outsidetextfont.color,e.pts)||g.castOption(t.textfont.color,e.pts)||r.color,family:g.castOption(t.outsidetextfont.family,e.pts)||g.castOption(t.textfont.family,e.pts)||r.family,size:g.castOption(t.outsidetextfont.size,e.pts)||g.castOption(t.textfont.size,e.pts)||r.size}}(y,i,a.font):b(y,i,a.font));r.text(i.text).attr({class:"slicetext",transform:"","text-anchor":"middle"}).call(s.font,h).call(f.convertToTspans,t);var d,m=s.bBox(r.node());if("outside"===E)d=L(m,i);else if(d=w(m,i,v),"auto"===E&&d.scale<1){var x=l.ensureUniformFontSize(t,y.outsidetextfont);r.call(s.font,x),d=L(m=s.bBox(r.node()),i)}var _=d.textPosAngle,k=void 0===_?i.pxmid:D(v.r,_);if(d.targetX=u+k[0]*d.rCenter+(d.x||0),d.targetY=c+k[1]*d.rCenter+(d.y||0),R(d,m),d.outside){var A=d.targetY;i.yLabelMin=A-m.height/2,i.yLabelMid=A,i.yLabelMax=A+m.height/2,i.labelExtraX=0,i.labelExtraY=0,T=!0}d.fontSize=h.size,p(y.type,d,a),e[o].transform=d,l.setTransormAndDisplay(r,d)}))}function P(t,e,r,n){var a=n*(e[0]-t[0]),o=n*(e[1]-t[1]);return"a"+n*v.r+","+n*v.r+" 0 "+i.largeArc+(r?" 1 ":" 0 ")+a+","+o}}));var k=n.select(this).selectAll("g.titletext").data(y.title.text?[0]:[]);if(k.enter().append("g").classed("titletext",!0),k.exit().remove(),k.each((function(){var e,r=l.ensureSingle(n.select(this),"text","",(function(t){t.attr("data-notex",1)})),i=y.title.text;y._meta&&(i=l.templateString(i,y._meta)),r.text(i).attr({class:"titletext",transform:"","text-anchor":"middle"}).call(s.font,y.title.font).call(f.convertToTspans,t),e="middle center"===y.title.position?function(t){var e=Math.sqrt(t.titleBox.width*t.titleBox.width+t.titleBox.height*t.titleBox.height);return{x:t.cx,y:t.cy,scale:t.trace.hole*t.r*2/e,tx:0,ty:-t.titleBox.height/2+t.trace.title.font.size}}(v):C(v,h),r.attr("transform",c(e.x,e.y)+u(Math.min(1,e.scale))+c(e.tx,e.ty))})),T&&function(t,e){var r,n,i,a,o,s,l,u,c,f,h,p,d;function v(t,e){return t.pxmid[1]-e.pxmid[1]}function y(t,e){return e.pxmid[1]-t.pxmid[1]}function m(t,r){r||(r={});var i,u,c,h,p=r.labelExtraY+(n?r.yLabelMax:r.yLabelMin),d=n?t.yLabelMin:t.yLabelMax,v=n?t.yLabelMax:t.yLabelMin,y=t.cyFinal+o(t.px0[1],t.px1[1]),m=p-d;if(m*l>0&&(t.labelExtraY=m),Array.isArray(e.pull))for(u=0;u<f.length;u++)(c=f[u])===t||(g.castOption(e.pull,t.pts)||0)>=(g.castOption(e.pull,c.pts)||0)||((t.pxmid[1]-c.pxmid[1])*l>0?(m=c.cyFinal+o(c.px0[1],c.px1[1])-d-t.labelExtraY)*l>0&&(t.labelExtraY+=m):(v+t.labelExtraY-y)*l>0&&(i=3*s*Math.abs(u-f.indexOf(t)),(h=c.cxFinal+a(c.px0[0],c.px1[0])+i-(t.cxFinal+t.pxmid[0])-t.labelExtraX)*s>0&&(t.labelExtraX+=h)))}for(n=0;n<2;n++)for(i=n?v:y,o=n?Math.max:Math.min,l=n?1:-1,r=0;r<2;r++){for(a=r?Math.max:Math.min,s=r?1:-1,(u=t[n][r]).sort(i),c=t[1-n][r],f=c.concat(u),p=[],h=0;h<u.length;h++)void 0!==u[h].yLabelMid&&p.push(u[h]);for(d=!1,h=0;n&&h<c.length;h++)if(void 0!==c[h].yLabelMid){d=c[h];break}for(h=0;h<p.length;h++){var x=h&&p[h-1];d&&!h&&(x=d),m(p[h],x)}}}(_,y),function(t,e){t.each((function(t){var r=n.select(this);if(t.labelExtraX||t.labelExtraY){var i=r.select("g.slicetext text");t.transform.targetX+=t.labelExtraX,t.transform.targetY+=t.labelExtraY,l.setTransormAndDisplay(i,t.transform);var a=t.cxFinal+t.pxmid[0],s="M"+a+","+(t.cyFinal+t.pxmid[1]),u=(t.yLabelMax-t.yLabelMin)*(t.pxmid[0]<0?-1:1)/4;if(t.labelExtraX){var c=t.labelExtraX*t.pxmid[1]/t.pxmid[0],f=t.yLabelMid+t.labelExtraY-(t.cyFinal+t.pxmid[1]);Math.abs(c)>Math.abs(f)?s+="l"+f*t.pxmid[0]/t.pxmid[1]+","+f+"H"+(a+t.labelExtraX+u):s+="l"+t.labelExtraX+","+c+"v"+(f-c)+"h"+u}else s+="V"+(t.yLabelMid+t.labelExtraY)+"h"+u;l.ensureSingle(r,"path","textline").call(o.stroke,e.outsidetextfont.color).attr({"stroke-width":Math.min(2,e.outsidetextfont.size/8),d:s,fill:"none"})}else r.select("path.textline").remove()}))}(m,y),T&&y.automargin){var A=s.bBox(d.node()),M=y.domain,S=h.w*(M.x[1]-M.x[0]),E=h.h*(M.y[1]-M.y[0]),P=(.5*S-v.r)/h.w,O=(.5*E-v.r)/h.h;i.autoMargin(t,"pie."+y.uid+".automargin",{xl:M.x[0]-P,xr:M.x[1]+P,yb:M.y[0]-O,yt:M.y[1]+O,l:Math.max(v.cx-v.r-A.left,0),r:Math.max(A.right-(v.cx+v.r),0),b:Math.max(A.bottom-(v.cy+v.r),0),t:Math.max(v.cy-v.r-A.top,0),pad:5})}}))}));setTimeout((function(){v.selectAll("tspan").each((function(){var t=n.select(this);t.attr("dy")&&t.attr("dy",t.attr("dy"))}))}),0)},formatSliceLabel:z,transformInsideText:w,determineInsideTextFont:b,positionTitleOutside:C,prerenderTitles:_,layoutAreas:I,attachFxHandlers:x,computeTransform:R}},68357:function(t,e,r){"use strict";var n=r(39898),i=r(63463),a=r(72597).resizeText;t.exports=function(t){var e=t._fullLayout._pielayer.selectAll(".trace");a(t,e,"pie"),e.each((function(e){var r=e[0].trace,a=n.select(this);a.style({opacity:r.opacity}),a.selectAll("path.surface").each((function(e){n.select(this).call(i,e,r,t)}))}))}},63463:function(t,e,r){"use strict";var n=r(7901),i=r(53581).castOption,a=r(22209);t.exports=function(t,e,r,o){var s=r.marker.line,l=i(s.color,e.pts)||n.defaultLine,u=i(s.width,e.pts)||0;t.call(a,e,r,o).style("stroke-width",u).call(n.stroke,l)}},10959:function(t,e,r){"use strict";var n=r(82196);t.exports={x:n.x,y:n.y,xy:{valType:"data_array",editType:"calc"},indices:{valType:"data_array",editType:"calc"},xbounds:{valType:"data_array",editType:"calc"},ybounds:{valType:"data_array",editType:"calc"},text:n.text,marker:{color:{valType:"color",arrayOk:!1,editType:"calc"},opacity:{valType:"number",min:0,max:1,dflt:1,arrayOk:!1,editType:"calc"},blend:{valType:"boolean",dflt:null,editType:"calc"},sizemin:{valType:"number",min:.1,max:2,dflt:.5,editType:"calc"},sizemax:{valType:"number",min:.1,dflt:20,editType:"calc"},border:{color:{valType:"color",arrayOk:!1,editType:"calc"},arearatio:{valType:"number",min:0,max:1,dflt:0,editType:"calc"},editType:"calc"},editType:"calc"},transforms:void 0}},42743:function(t,e,r){"use strict";var n=r(9330).gl_pointcloud2d,i=r(78614),a=r(71739).findExtremes,o=r(34603);function s(t,e){this.scene=t,this.uid=e,this.type="pointcloud",this.pickXData=[],this.pickYData=[],this.xData=[],this.yData=[],this.textLabels=[],this.color="rgb(0, 0, 0)",this.name="",this.hoverinfo="all",this.idToIndex=new Int32Array(0),this.bounds=[0,0,0,0],this.pointcloudOptions={positions:new Float32Array(0),idToIndex:this.idToIndex,sizemin:.5,sizemax:12,color:[0,0,0,1],areaRatio:1,borderColor:[0,0,0,1]},this.pointcloud=n(t.glplot,this.pointcloudOptions),this.pointcloud._trace=this}var l=s.prototype;l.handlePick=function(t){var e=this.idToIndex[t.pointId];return{trace:this,dataCoord:t.dataCoord,traceCoord:this.pickXYData?[this.pickXYData[2*e],this.pickXYData[2*e+1]]:[this.pickXData[e],this.pickYData[e]],textLabel:Array.isArray(this.textLabels)?this.textLabels[e]:this.textLabels,color:this.color,name:this.name,pointIndex:e,hoverinfo:this.hoverinfo}},l.update=function(t){this.index=t.index,this.textLabels=t.text,this.name=t.name,this.hoverinfo=t.hoverinfo,this.bounds=[1/0,1/0,-1/0,-1/0],this.updateFast(t),this.color=o(t,{})},l.updateFast=function(t){var e,r,n,o,s,l,u=this.xData=this.pickXData=t.x,c=this.yData=this.pickYData=t.y,f=this.pickXYData=t.xy,h=t.xbounds&&t.ybounds,p=t.indices,d=this.bounds;if(f){if(n=f,e=f.length>>>1,h)d[0]=t.xbounds[0],d[2]=t.xbounds[1],d[1]=t.ybounds[0],d[3]=t.ybounds[1];else for(l=0;l<e;l++)o=n[2*l],s=n[2*l+1],o<d[0]&&(d[0]=o),o>d[2]&&(d[2]=o),s<d[1]&&(d[1]=s),s>d[3]&&(d[3]=s);if(p)r=p;else for(r=new Int32Array(e),l=0;l<e;l++)r[l]=l}else for(e=u.length,n=new Float32Array(2*e),r=new Int32Array(e),l=0;l<e;l++)o=u[l],s=c[l],r[l]=l,n[2*l]=o,n[2*l+1]=s,o<d[0]&&(d[0]=o),o>d[2]&&(d[2]=o),s<d[1]&&(d[1]=s),s>d[3]&&(d[3]=s);this.idToIndex=r,this.pointcloudOptions.idToIndex=r,this.pointcloudOptions.positions=n;var v=i(t.marker.color),g=i(t.marker.border.color),y=t.opacity*t.marker.opacity;v[3]*=y,this.pointcloudOptions.color=v;var m=t.marker.blend;null===m&&(m=u.length<100||c.length<100),this.pointcloudOptions.blend=m,g[3]*=y,this.pointcloudOptions.borderColor=g;var x=t.marker.sizemin,b=Math.max(t.marker.sizemax,t.marker.sizemin);this.pointcloudOptions.sizeMin=x,this.pointcloudOptions.sizeMax=b,this.pointcloudOptions.areaRatio=t.marker.border.arearatio,this.pointcloud.update(this.pointcloudOptions);var _=this.scene.xaxis,w=this.scene.yaxis,T=b/2||.5;t._extremes[_._id]=a(_,[d[0],d[2]],{ppad:T}),t._extremes[w._id]=a(w,[d[1],d[3]],{ppad:T})},l.dispose=function(){this.pointcloud.dispose()},t.exports=function(t,e){var r=new s(t,e.uid);return r.update(e),r}},33876:function(t,e,r){"use strict";var n=r(71828),i=r(10959);t.exports=function(t,e,r){function a(r,a){return n.coerce(t,e,i,r,a)}a("x"),a("y"),a("xbounds"),a("ybounds"),t.xy&&t.xy instanceof Float32Array&&(e.xy=t.xy),t.indices&&t.indices instanceof Int32Array&&(e.indices=t.indices),a("text"),a("marker.color",r),a("marker.opacity"),a("marker.blend"),a("marker.sizemin"),a("marker.sizemax"),a("marker.border.color",r),a("marker.border.arearatio"),e._length=null}},20593:function(t,e,r){"use strict";["*pointcloud* trace is deprecated!","Please consider switching to the *scattergl* trace type."].join(" "),t.exports={attributes:r(10959),supplyDefaults:r(33876),calc:r(36563),plot:r(42743),moduleType:"trace",name:"pointcloud",basePlotModule:r(4796),categories:["gl","gl2d","showLegend"],meta:{}}},39953:function(t,e,r){"use strict";var n=r(41940),i=r(9012),a=r(22399),o=r(77914),s=r(27670).Y,l=r(5386).fF,u=r(50693),c=r(44467).templatedArray,f=r(12663).descriptionOnlyNumbers,h=r(1426).extendFlat,p=r(30962).overrideAll;(t.exports=p({hoverinfo:h({},i.hoverinfo,{flags:[],arrayOk:!1}),hoverlabel:o.hoverlabel,domain:s({name:"sankey",trace:!0}),orientation:{valType:"enumerated",values:["v","h"],dflt:"h"},valueformat:{valType:"string",dflt:".3s",description:f("value")},valuesuffix:{valType:"string",dflt:""},arrangement:{valType:"enumerated",values:["snap","perpendicular","freeform","fixed"],dflt:"snap"},textfont:n({}),customdata:void 0,node:{label:{valType:"data_array",dflt:[]},groups:{valType:"info_array",impliedEdits:{x:[],y:[]},dimensions:2,freeLength:!0,dflt:[],items:{valType:"number",editType:"calc"}},x:{valType:"data_array",dflt:[]},y:{valType:"data_array",dflt:[]},color:{valType:"color",arrayOk:!0},customdata:{valType:"data_array",editType:"calc"},line:{color:{valType:"color",dflt:a.defaultLine,arrayOk:!0},width:{valType:"number",min:0,dflt:.5,arrayOk:!0}},pad:{valType:"number",arrayOk:!1,min:0,dflt:20},thickness:{valType:"number",arrayOk:!1,min:1,dflt:20},hoverinfo:{valType:"enumerated",values:["all","none","skip"],dflt:"all"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:["value","label"]})},link:{arrowlen:{valType:"number",min:0,dflt:0},label:{valType:"data_array",dflt:[]},color:{valType:"color",arrayOk:!0},customdata:{valType:"data_array",editType:"calc"},line:{color:{valType:"color",dflt:a.defaultLine,arrayOk:!0},width:{valType:"number",min:0,dflt:0,arrayOk:!0}},source:{valType:"data_array",dflt:[]},target:{valType:"data_array",dflt:[]},value:{valType:"data_array",dflt:[]},hoverinfo:{valType:"enumerated",values:["all","none","skip"],dflt:"all"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:["value","label"]}),colorscales:c("concentrationscales",{editType:"calc",label:{valType:"string",editType:"calc",dflt:""},cmax:{valType:"number",editType:"calc",dflt:1},cmin:{valType:"number",editType:"calc",dflt:0},colorscale:h(u().colorscale,{dflt:[[0,"white"],[1,"black"]]})})}},"calc","nested")).transforms=void 0},75536:function(t,e,r){"use strict";var n=r(30962).overrideAll,i=r(27659).a0,a=r(60436),o=r(528),s=r(6964),l=r(28569),u=r(47322).prepSelect,c=r(71828),f=r(73972),h="sankey";function p(t,e){var r=t._fullData[e],n=t._fullLayout,i=n.dragmode,a="pan"===n.dragmode?"move":"crosshair",o=r._bgRect;if(o&&"pan"!==i&&"zoom"!==i){s(o,a);var h={_id:"x",c2p:c.identity,_offset:r._sankey.translateX,_length:r._sankey.width},p={_id:"y",c2p:c.identity,_offset:r._sankey.translateY,_length:r._sankey.height},d={gd:t,element:o.node(),plotinfo:{id:e,xaxis:h,yaxis:p,fillRangeItems:c.noop},subplot:e,xaxes:[h],yaxes:[p],doneFnCompleted:function(r){var n,i=t._fullData[e],a=i.node.groups.slice(),o=[];function s(t){for(var e=i._sankey.graph.nodes,r=0;r<e.length;r++)if(e[r].pointNumber===t)return e[r]}for(var l=0;l<r.length;l++){var u=s(r[l].pointNumber);if(u)if(u.group){for(var c=0;c<u.childrenNodes.length;c++)o.push(u.childrenNodes[c].pointNumber);a[u.pointNumber-i.node._count]=!1}else o.push(u.pointNumber)}n=a.filter(Boolean).concat([o]),f.call("_guiRestyle",t,{"node.groups":[n]},e)},prepFn:function(t,e,r){u(t,e,r,d,i)}};l.init(d)}}e.name=h,e.baseLayoutAttrOverrides=n({hoverlabel:o.hoverlabel},"plot","nested"),e.plot=function(t){var r=i(t.calcdata,h)[0];a(t,r),e.updateFx(t)},e.clean=function(t,e,r,n){var i=n._has&&n._has(h),a=e._has&&e._has(h);i&&!a&&(n._paperdiv.selectAll(".sankey").remove(),n._paperdiv.selectAll(".bgsankey").remove())},e.updateFx=function(t){for(var e=0;e<t._fullData.length;e++)p(t,e)}},92930:function(t,e,r){"use strict";var n=r(68664),i=r(71828),a=r(28984).wrap,o=i.isArrayOrTypedArray,s=i.isIndex,l=r(21081);t.exports=function(t,e){var r=function(t){var e,r=t.node,a=t.link,u=[],c=o(a.color),f=o(a.customdata),h={},p={},d=a.colorscales.length;for(e=0;e<d;e++){var v=a.colorscales[e],g=l.extractScale(v,{cLetter:"c"}),y=l.makeColorScaleFunc(g);p[v.label]=y}var m=0;for(e=0;e<a.value.length;e++)a.source[e]>m&&(m=a.source[e]),a.target[e]>m&&(m=a.target[e]);var x,b=m+1;t.node._count=b;var _=t.node.groups,w={};for(e=0;e<_.length;e++){var T=_[e];for(x=0;x<T.length;x++){var k=T[x],A=b+e;w.hasOwnProperty(k)?i.warn("Node "+k+" is already part of a group."):w[k]=A}}var M={source:[],target:[]};for(e=0;e<a.value.length;e++){var S=a.value[e],E=a.source[e],L=a.target[e];if(S>0&&s(E,b)&&s(L,b)&&(!w.hasOwnProperty(E)||!w.hasOwnProperty(L)||w[E]!==w[L])){w.hasOwnProperty(L)&&(L=w[L]),w.hasOwnProperty(E)&&(E=w[E]),L=+L,h[E=+E]=h[L]=!0;var C="";a.label&&a.label[e]&&(C=a.label[e]);var P=null;C&&p.hasOwnProperty(C)&&(P=p[C]),u.push({pointNumber:e,label:C,color:c?a.color[e]:a.color,customdata:f?a.customdata[e]:a.customdata,concentrationscale:P,source:E,target:L,value:+S}),M.source.push(E),M.target.push(L)}}var O=b+_.length,I=o(r.color),D=o(r.customdata),z=[];for(e=0;e<O;e++)if(h[e]){var R=r.label[e];z.push({group:e>b-1,childrenNodes:[],pointNumber:e,label:R,color:I?r.color[e]:r.color,customdata:D?r.customdata[e]:r.customdata})}var F=!1;return function(t,e,r){for(var a=i.init2dArray(t,0),o=0;o<Math.min(e.length,r.length);o++)if(i.isIndex(e[o],t)&&i.isIndex(r[o],t)){if(e[o]===r[o])return!0;a[e[o]].push(r[o])}return n(a).components.some((function(t){return t.length>1}))}(O,M.source,M.target)&&(F=!0),{circular:F,links:u,nodes:z,groups:_,groupLookup:w}}(e);return a({circular:r.circular,_nodes:r.nodes,_links:r.links,_groups:r.groups,_groupLookup:r.groupLookup})}},85247:function(t){"use strict";t.exports={nodeTextOffsetHorizontal:4,nodeTextOffsetVertical:3,nodePadAcross:10,sankeyIterations:50,forceIterations:5,forceTicksPerFrame:10,duration:500,ease:"linear",cn:{sankey:"sankey",sankeyLinks:"sankey-links",sankeyLink:"sankey-link",sankeyNodeSet:"sankey-node-set",sankeyNode:"sankey-node",nodeRect:"node-rect",nodeLabel:"node-label"}}},26857:function(t,e,r){"use strict";var n=r(71828),i=r(39953),a=r(7901),o=r(84267),s=r(27670).c,l=r(38048),u=r(44467),c=r(85501);function f(t,e){function r(r,a){return n.coerce(t,e,i.link.colorscales,r,a)}r("label"),r("cmin"),r("cmax"),r("colorscale")}t.exports=function(t,e,r,h){function p(r,a){return n.coerce(t,e,i,r,a)}var d=n.extendDeep(h.hoverlabel,t.hoverlabel),v=t.node,g=u.newContainer(e,"node");function y(t,e){return n.coerce(v,g,i.node,t,e)}y("label"),y("groups"),y("x"),y("y"),y("pad"),y("thickness"),y("line.color"),y("line.width"),y("hoverinfo",t.hoverinfo),l(v,g,y,d),y("hovertemplate");var m=h.colorway;y("color",g.label.map((function(t,e){return a.addOpacity(function(t){return m[t%m.length]}(e),.8)}))),y("customdata");var x=t.link||{},b=u.newContainer(e,"link");function _(t,e){return n.coerce(x,b,i.link,t,e)}_("label"),_("arrowlen"),_("source"),_("target"),_("value"),_("line.color"),_("line.width"),_("hoverinfo",t.hoverinfo),l(x,b,_,d),_("hovertemplate");var w,T=o(h.paper_bgcolor).getLuminance()<.333?"rgba(255, 255, 255, 0.6)":"rgba(0, 0, 0, 0.2)";_("color",n.repeat(T,b.value.length)),_("customdata"),c(x,b,{name:"colorscales",handleItemDefaults:f}),s(e,h,p),p("orientation"),p("valueformat"),p("valuesuffix"),g.x.length&&g.y.length&&(w="freeform"),p("arrangement",w),n.coerceFont(p,"textfont",n.extendFlat({},h.font)),e._length=null}},29396:function(t,e,r){"use strict";t.exports={attributes:r(39953),supplyDefaults:r(26857),calc:r(92930),plot:r(60436),moduleType:"trace",name:"sankey",basePlotModule:r(75536),selectPoints:r(84564),categories:["noOpacity"],meta:{}}},60436:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=i.numberFormat,o=r(3393),s=r(30211),l=r(7901),u=r(85247).cn,c=i._;function f(t){return""!==t}function h(t,e){return t.filter((function(t){return t.key===e.traceId}))}function p(t,e){n.select(t).select("path").style("fill-opacity",e),n.select(t).select("rect").style("fill-opacity",e)}function d(t){n.select(t).select("text.name").style("fill","black")}function v(t){return function(e){return-1!==t.node.sourceLinks.indexOf(e.link)||-1!==t.node.targetLinks.indexOf(e.link)}}function g(t){return function(e){return-1!==e.node.sourceLinks.indexOf(t.link)||-1!==e.node.targetLinks.indexOf(t.link)}}function y(t,e,r){e&&r&&h(r,e).selectAll("."+u.sankeyLink).filter(v(e)).call(x.bind(0,e,r,!1))}function m(t,e,r){e&&r&&h(r,e).selectAll("."+u.sankeyLink).filter(v(e)).call(b.bind(0,e,r,!1))}function x(t,e,r,n){var i=n.datum().link.label;n.style("fill-opacity",(function(t){if(!t.link.concentrationscale)return.4})),i&&h(e,t).selectAll("."+u.sankeyLink).filter((function(t){return t.link.label===i})).style("fill-opacity",(function(t){if(!t.link.concentrationscale)return.4})),r&&h(e,t).selectAll("."+u.sankeyNode).filter(g(t)).call(y)}function b(t,e,r,n){var i=n.datum().link.label;n.style("fill-opacity",(function(t){return t.tinyColorAlpha})),i&&h(e,t).selectAll("."+u.sankeyLink).filter((function(t){return t.link.label===i})).style("fill-opacity",(function(t){return t.tinyColorAlpha})),r&&h(e,t).selectAll(u.sankeyNode).filter(g(t)).call(m)}function _(t,e){var r=t.hoverlabel||{},n=i.nestedProperty(r,e).get();return!Array.isArray(n)&&n}t.exports=function(t,e){for(var r=t._fullLayout,i=r._paper,h=r._size,v=0;v<t._fullData.length;v++)if(t._fullData[v].visible&&t._fullData[v].type===u.sankey&&!t._fullData[v]._viewInitial){var g=t._fullData[v].node;t._fullData[v]._viewInitial={node:{groups:g.groups.slice(),x:g.x.slice(),y:g.y.slice()}}}var w=c(t,"source:")+" ",T=c(t,"target:")+" ",k=c(t,"concentration:")+" ",A=c(t,"incoming flow count:")+" ",M=c(t,"outgoing flow count:")+" ";o(t,i,e,{width:h.w,height:h.h,margin:{t:h.t,r:h.r,b:h.b,l:h.l}},{linkEvents:{hover:function(e,r,i){!1!==t._fullLayout.hovermode&&(n.select(e).call(x.bind(0,r,i,!0)),"skip"!==r.link.trace.link.hoverinfo&&(r.link.fullData=r.link.trace,t.emit("plotly_hover",{event:n.event,points:[r.link]})))},follow:function(e,i){if(!1!==t._fullLayout.hovermode){var o=i.link.trace.link;if("none"!==o.hoverinfo&&"skip"!==o.hoverinfo){for(var u=[],c=0,h=0;h<i.flow.links.length;h++){var v=i.flow.links[h];if("closest"!==t._fullLayout.hovermode||i.link.pointNumber===v.pointNumber){i.link.pointNumber===v.pointNumber&&(c=h),v.fullData=v.trace,o=i.link.trace.link;var g=m(v),y={valueLabel:a(i.valueFormat)(v.value)+i.valueSuffix};u.push({x:g[0],y:g[1],name:y.valueLabel,text:[v.label||"",w+v.source.label,T+v.target.label,v.concentrationscale?k+a("%0.2f")(v.flow.labelConcentration):""].filter(f).join("<br>"),color:_(o,"bgcolor")||l.addOpacity(v.color,1),borderColor:_(o,"bordercolor"),fontFamily:_(o,"font.family"),fontSize:_(o,"font.size"),fontColor:_(o,"font.color"),nameLength:_(o,"namelength"),textAlign:_(o,"align"),idealAlign:n.event.x<g[0]?"right":"left",hovertemplate:o.hovertemplate,hovertemplateLabels:y,eventData:[v]})}}s.loneHover(u,{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:t,anchorIndex:c}).each((function(){i.link.concentrationscale||p(this,.65),d(this)}))}}function m(t){var e,r;t.circular?(e=(t.circularPathData.leftInnerExtent+t.circularPathData.rightInnerExtent)/2,r=t.circularPathData.verticalFullExtent):(e=(t.source.x1+t.target.x0)/2,r=(t.y0+t.y1)/2);var n=[e,r];return"v"===t.trace.orientation&&n.reverse(),n[0]+=i.parent.translateX,n[1]+=i.parent.translateY,n}},unhover:function(e,i,a){!1!==t._fullLayout.hovermode&&(n.select(e).call(b.bind(0,i,a,!0)),"skip"!==i.link.trace.link.hoverinfo&&(i.link.fullData=i.link.trace,t.emit("plotly_unhover",{event:n.event,points:[i.link]})),s.loneUnhover(r._hoverlayer.node()))},select:function(e,r){var i=r.link;i.originalEvent=n.event,t._hoverdata=[i],s.click(t,{target:!0})}},nodeEvents:{hover:function(e,r,i){!1!==t._fullLayout.hovermode&&(n.select(e).call(y,r,i),"skip"!==r.node.trace.node.hoverinfo&&(r.node.fullData=r.node.trace,t.emit("plotly_hover",{event:n.event,points:[r.node]})))},follow:function(e,i){if(!1!==t._fullLayout.hovermode){var o=i.node.trace.node;if("none"!==o.hoverinfo&&"skip"!==o.hoverinfo){var l=n.select(e).select("."+u.nodeRect),c=t._fullLayout._paperdiv.node().getBoundingClientRect(),h=l.node().getBoundingClientRect(),v=h.left-2-c.left,g=h.right+2-c.left,y=h.top+h.height/4-c.top,m={valueLabel:a(i.valueFormat)(i.node.value)+i.valueSuffix};i.node.fullData=i.node.trace,t._fullLayout._calcInverseTransform(t);var x=t._fullLayout._invScaleX,b=t._fullLayout._invScaleY,w=s.loneHover({x0:x*v,x1:x*g,y:b*y,name:a(i.valueFormat)(i.node.value)+i.valueSuffix,text:[i.node.label,A+i.node.targetLinks.length,M+i.node.sourceLinks.length].filter(f).join("<br>"),color:_(o,"bgcolor")||i.tinyColorHue,borderColor:_(o,"bordercolor"),fontFamily:_(o,"font.family"),fontSize:_(o,"font.size"),fontColor:_(o,"font.color"),nameLength:_(o,"namelength"),textAlign:_(o,"align"),idealAlign:"left",hovertemplate:o.hovertemplate,hovertemplateLabels:m,eventData:[i.node]},{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:t});p(w,.85),d(w)}}},unhover:function(e,i,a){!1!==t._fullLayout.hovermode&&(n.select(e).call(m,i,a),"skip"!==i.node.trace.node.hoverinfo&&(i.node.fullData=i.node.trace,t.emit("plotly_unhover",{event:n.event,points:[i.node]})),s.loneUnhover(r._hoverlayer.node()))},select:function(e,r,i){var a=r.node;a.originalEvent=n.event,t._hoverdata=[a],n.select(e).call(m,r,i),s.click(t,{target:!0})}}})}},3393:function(t,e,r){"use strict";var n=r(49887),i=r(81684).k4,a=r(39898),o=r(30838),s=r(86781),l=r(85247),u=r(84267),c=r(7901),f=r(91424),h=r(71828),p=h.strTranslate,d=h.strRotate,v=r(28984),g=v.keyFun,y=v.repeat,m=v.unwrap,x=r(63893),b=r(73972),_=r(18783),w=_.CAP_SHIFT,T=_.LINE_SPACING;function k(t,e,r){var n,i=m(e),a=i.trace,c=a.domain,f="h"===a.orientation,p=a.node.pad,d=a.node.thickness,v=t.width*(c.x[1]-c.x[0]),g=t.height*(c.y[1]-c.y[0]),y=i._nodes,x=i._links,b=i.circular;(n=b?s.sankeyCircular().circularLinkGap(0):o.sankey()).iterations(l.sankeyIterations).size(f?[v,g]:[g,v]).nodeWidth(d).nodePadding(p).nodeId((function(t){return t.pointNumber})).nodes(y).links(x);var _,w,T,k=n();for(var A in n.nodePadding()<p&&h.warn("node.pad was reduced to ",n.nodePadding()," to fit within the figure."),i._groupLookup){var M,S=parseInt(i._groupLookup[A]);for(_=0;_<k.nodes.length;_++)if(k.nodes[_].pointNumber===S){M=k.nodes[_];break}if(M){var E={pointNumber:parseInt(A),x0:M.x0,x1:M.x1,y0:M.y0,y1:M.y1,partOfGroup:!0,sourceLinks:[],targetLinks:[]};k.nodes.unshift(E),M.childrenNodes.unshift(E)}}if(function(){for(_=0;_<k.nodes.length;_++){var t,e,r=k.nodes[_],n={};for(w=0;w<r.targetLinks.length;w++)t=(e=r.targetLinks[w]).source.pointNumber+":"+e.target.pointNumber,n.hasOwnProperty(t)||(n[t]=[]),n[t].push(e);var i=Object.keys(n);for(w=0;w<i.length;w++){var a=n[t=i[w]],o=0,s={};for(T=0;T<a.length;T++)s[(e=a[T]).label]||(s[e.label]=0),s[e.label]+=e.value,o+=e.value;for(T=0;T<a.length;T++)(e=a[T]).flow={value:o,labelConcentration:s[e.label]/o,concentration:e.value/o,links:a},e.concentrationscale&&(e.color=u(e.concentrationscale(e.flow.labelConcentration)))}var l=0;for(w=0;w<r.sourceLinks.length;w++)l+=r.sourceLinks[w].value;for(w=0;w<r.sourceLinks.length;w++)(e=r.sourceLinks[w]).concentrationOut=e.value/l;var c=0;for(w=0;w<r.targetLinks.length;w++)c+=r.targetLinks[w].value;for(w=0;w<r.targetLinks.length;w++)(e=r.targetLinks[w]).concenrationIn=e.value/c}}(),a.node.x.length&&a.node.y.length){for(_=0;_<Math.min(a.node.x.length,a.node.y.length,k.nodes.length);_++)if(a.node.x[_]&&a.node.y[_]){var L=[a.node.x[_]*v,a.node.y[_]*g];k.nodes[_].x0=L[0]-d/2,k.nodes[_].x1=L[0]+d/2;var C=k.nodes[_].y1-k.nodes[_].y0;k.nodes[_].y0=L[1]-C/2,k.nodes[_].y1=L[1]+C/2}"snap"===a.arrangement&&function(t){var e,r,n=t.map((function(t,e){return{x0:t.x0,index:e}})).sort((function(t,e){return t.x0-e.x0})),i=[],a=-1,o=-1/0;for(_=0;_<n.length;_++){var s=t[n[_].index];s.x0>o+d&&(a+=1,e=s.x0),o=s.x0,i[a]||(i[a]=[]),i[a].push(s),r=e-s.x0,s.x0+=r,s.x1+=r}return i}(y=k.nodes).forEach((function(t){var e,r,n,i=0,a=t.length;for(t.sort((function(t,e){return t.y0-e.y0})),n=0;n<a;++n)(e=t[n]).y0>=i||(r=i-e.y0)>1e-6&&(e.y0+=r,e.y1+=r),i=e.y1+p})),n.update(k)}return{circular:b,key:r,trace:a,guid:h.randstr(),horizontal:f,width:v,height:g,nodePad:a.node.pad,nodeLineColor:a.node.line.color,nodeLineWidth:a.node.line.width,linkLineColor:a.link.line.color,linkLineWidth:a.link.line.width,linkArrowLength:a.link.arrowlen,valueFormat:a.valueformat,valueSuffix:a.valuesuffix,textFont:a.textfont,translateX:c.x[0]*t.width+t.margin.l,translateY:t.height-c.y[1]*t.height+t.margin.t,dragParallel:f?g:v,dragPerpendicular:f?v:g,arrangement:a.arrangement,sankey:n,graph:k,forceLayouts:{},interactionState:{dragInProgress:!1,hovered:!1}}}function A(t,e,r){var n=u(e.color),i=e.source.label+"|"+e.target.label+"__"+r;return e.trace=t.trace,e.curveNumber=t.trace.index,{circular:t.circular,key:i,traceId:t.key,pointNumber:e.pointNumber,link:e,tinyColorHue:c.tinyRGB(n),tinyColorAlpha:n.getAlpha(),linkPath:M,linkLineColor:t.linkLineColor,linkLineWidth:t.linkLineWidth,linkArrowLength:t.linkArrowLength,valueFormat:t.valueFormat,valueSuffix:t.valueSuffix,sankey:t.sankey,parent:t,interactionState:t.interactionState,flow:e.flow}}function M(){return function(t){var e=t.linkArrowLength;if(t.link.circular)return function(t,e){var r=t.width/2,n=t.circularPathData;return"top"===t.circularLinkType?"M "+(n.targetX-e)+" "+(n.targetY+r)+" L"+(n.rightInnerExtent-e)+" "+(n.targetY+r)+"A"+(n.rightLargeArcRadius+r)+" "+(n.rightSmallArcRadius+r)+" 0 0 1 "+(n.rightFullExtent-r-e)+" "+(n.targetY-n.rightSmallArcRadius)+"L"+(n.rightFullExtent-r-e)+" "+n.verticalRightInnerExtent+"A"+(n.rightLargeArcRadius+r)+" "+(n.rightLargeArcRadius+r)+" 0 0 1 "+(n.rightInnerExtent-e)+" "+(n.verticalFullExtent-r)+"L"+n.leftInnerExtent+" "+(n.verticalFullExtent-r)+"A"+(n.leftLargeArcRadius+r)+" "+(n.leftLargeArcRadius+r)+" 0 0 1 "+(n.leftFullExtent+r)+" "+n.verticalLeftInnerExtent+"L"+(n.leftFullExtent+r)+" "+(n.sourceY-n.leftSmallArcRadius)+"A"+(n.leftLargeArcRadius+r)+" "+(n.leftSmallArcRadius+r)+" 0 0 1 "+n.leftInnerExtent+" "+(n.sourceY+r)+"L"+n.sourceX+" "+(n.sourceY+r)+"L"+n.sourceX+" "+(n.sourceY-r)+"L"+n.leftInnerExtent+" "+(n.sourceY-r)+"A"+(n.leftLargeArcRadius-r)+" "+(n.leftSmallArcRadius-r)+" 0 0 0 "+(n.leftFullExtent-r)+" "+(n.sourceY-n.leftSmallArcRadius)+"L"+(n.leftFullExtent-r)+" "+n.verticalLeftInnerExtent+"A"+(n.leftLargeArcRadius-r)+" "+(n.leftLargeArcRadius-r)+" 0 0 0 "+n.leftInnerExtent+" "+(n.verticalFullExtent+r)+"L"+(n.rightInnerExtent-e)+" "+(n.verticalFullExtent+r)+"A"+(n.rightLargeArcRadius-r)+" "+(n.rightLargeArcRadius-r)+" 0 0 0 "+(n.rightFullExtent+r-e)+" "+n.verticalRightInnerExtent+"L"+(n.rightFullExtent+r-e)+" "+(n.targetY-n.rightSmallArcRadius)+"A"+(n.rightLargeArcRadius-r)+" "+(n.rightSmallArcRadius-r)+" 0 0 0 "+(n.rightInnerExtent-e)+" "+(n.targetY-r)+"L"+(n.targetX-e)+" "+(n.targetY-r)+(e>0?"L"+n.targetX+" "+n.targetY:"")+"Z":"M "+(n.targetX-e)+" "+(n.targetY-r)+" L"+(n.rightInnerExtent-e)+" "+(n.targetY-r)+"A"+(n.rightLargeArcRadius+r)+" "+(n.rightSmallArcRadius+r)+" 0 0 0 "+(n.rightFullExtent-r-e)+" "+(n.targetY+n.rightSmallArcRadius)+"L"+(n.rightFullExtent-r-e)+" "+n.verticalRightInnerExtent+"A"+(n.rightLargeArcRadius+r)+" "+(n.rightLargeArcRadius+r)+" 0 0 0 "+(n.rightInnerExtent-e)+" "+(n.verticalFullExtent+r)+"L"+n.leftInnerExtent+" "+(n.verticalFullExtent+r)+"A"+(n.leftLargeArcRadius+r)+" "+(n.leftLargeArcRadius+r)+" 0 0 0 "+(n.leftFullExtent+r)+" "+n.verticalLeftInnerExtent+"L"+(n.leftFullExtent+r)+" "+(n.sourceY+n.leftSmallArcRadius)+"A"+(n.leftLargeArcRadius+r)+" "+(n.leftSmallArcRadius+r)+" 0 0 0 "+n.leftInnerExtent+" "+(n.sourceY-r)+"L"+n.sourceX+" "+(n.sourceY-r)+"L"+n.sourceX+" "+(n.sourceY+r)+"L"+n.leftInnerExtent+" "+(n.sourceY+r)+"A"+(n.leftLargeArcRadius-r)+" "+(n.leftSmallArcRadius-r)+" 0 0 1 "+(n.leftFullExtent-r)+" "+(n.sourceY+n.leftSmallArcRadius)+"L"+(n.leftFullExtent-r)+" "+n.verticalLeftInnerExtent+"A"+(n.leftLargeArcRadius-r)+" "+(n.leftLargeArcRadius-r)+" 0 0 1 "+n.leftInnerExtent+" "+(n.verticalFullExtent-r)+"L"+(n.rightInnerExtent-e)+" "+(n.verticalFullExtent-r)+"A"+(n.rightLargeArcRadius-r)+" "+(n.rightLargeArcRadius-r)+" 0 0 1 "+(n.rightFullExtent+r-e)+" "+n.verticalRightInnerExtent+"L"+(n.rightFullExtent+r-e)+" "+(n.targetY+n.rightSmallArcRadius)+"A"+(n.rightLargeArcRadius-r)+" "+(n.rightSmallArcRadius-r)+" 0 0 1 "+(n.rightInnerExtent-e)+" "+(n.targetY+r)+"L"+(n.targetX-e)+" "+(n.targetY+r)+(e>0?"L"+n.targetX+" "+n.targetY:"")+"Z"}(t.link,e);var r=Math.abs((t.link.target.x0-t.link.source.x1)/2);e>r&&(e=r);var n=t.link.source.x1,a=t.link.target.x0-e,o=i(n,a),s=o(.5),l=o(.5),u=t.link.y0-t.link.width/2,c=t.link.y0+t.link.width/2,f=t.link.y1-t.link.width/2,h=t.link.y1+t.link.width/2,p="M"+n+","+u,d="C"+s+","+u+" "+l+","+f+" "+a+","+f,v="C"+l+","+h+" "+s+","+c+" "+n+","+c,g=e>0?"L"+(a+e)+","+(f+t.link.width/2):"";return p+d+(g+="L"+a+","+h)+v+"Z"}}function S(t,e){var r=u(e.color),n=l.nodePadAcross,i=t.nodePad/2;e.dx=e.x1-e.x0,e.dy=e.y1-e.y0;var a=e.dx,o=Math.max(.5,e.dy),s="node_"+e.pointNumber;return e.group&&(s=h.randstr()),e.trace=t.trace,e.curveNumber=t.trace.index,{index:e.pointNumber,key:s,partOfGroup:e.partOfGroup||!1,group:e.group,traceId:t.key,trace:t.trace,node:e,nodePad:t.nodePad,nodeLineColor:t.nodeLineColor,nodeLineWidth:t.nodeLineWidth,textFont:t.textFont,size:t.horizontal?t.height:t.width,visibleWidth:Math.ceil(a),visibleHeight:o,zoneX:-n,zoneY:-i,zoneWidth:a+2*n,zoneHeight:o+2*i,labelY:t.horizontal?e.dy/2+1:e.dx/2+1,left:1===e.originalLayer,sizeAcross:t.width,forceLayouts:t.forceLayouts,horizontal:t.horizontal,darkBackground:r.getBrightness()<=128,tinyColorHue:c.tinyRGB(r),tinyColorAlpha:r.getAlpha(),valueFormat:t.valueFormat,valueSuffix:t.valueSuffix,sankey:t.sankey,graph:t.graph,arrangement:t.arrangement,uniqueNodeLabelPathId:[t.guid,t.key,s].join("_"),interactionState:t.interactionState,figure:t}}function E(t){t.attr("transform",(function(t){return p(t.node.x0.toFixed(3),t.node.y0.toFixed(3))}))}function L(t){t.call(E)}function C(t,e){t.call(L),e.attr("d",M())}function P(t){t.attr("width",(function(t){return t.node.x1-t.node.x0})).attr("height",(function(t){return t.visibleHeight}))}function O(t){return t.link.width>1||t.linkLineWidth>0}function I(t){return p(t.translateX,t.translateY)+(t.horizontal?"matrix(1 0 0 1 0 0)":"matrix(0 1 1 0 0 0)")}function D(t,e,r){t.on(".basic",null).on("mouseover.basic",(function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.hover(this,t,e),t.interactionState.hovered=[this,t])})).on("mousemove.basic",(function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.follow(this,t),t.interactionState.hovered=[this,t])})).on("mouseout.basic",(function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.unhover(this,t,e),t.interactionState.hovered=!1)})).on("click.basic",(function(t){t.interactionState.hovered&&(r.unhover(this,t,e),t.interactionState.hovered=!1),t.interactionState.dragInProgress||t.partOfGroup||r.select(this,t,e)}))}function z(t,e,r,i){var o=a.behavior.drag().origin((function(t){return{x:t.node.x0+t.visibleWidth/2,y:t.node.y0+t.visibleHeight/2}})).on("dragstart",(function(a){if("fixed"!==a.arrangement&&(h.ensureSingle(i._fullLayout._infolayer,"g","dragcover",(function(t){i._fullLayout._dragCover=t})),h.raiseToTop(this),a.interactionState.dragInProgress=a.node,F(a.node),a.interactionState.hovered&&(r.nodeEvents.unhover.apply(0,a.interactionState.hovered),a.interactionState.hovered=!1),"snap"===a.arrangement)){var o=a.traceId+"|"+a.key;a.forceLayouts[o]?a.forceLayouts[o].alpha(1):function(t,e,r,i){!function(t){for(var e=0;e<t.length;e++)t[e].y=(t[e].y0+t[e].y1)/2,t[e].x=(t[e].x0+t[e].x1)/2}(r.graph.nodes);var a=r.graph.nodes.filter((function(t){return t.originalX===r.node.originalX})).filter((function(t){return!t.partOfGroup}));r.forceLayouts[e]=n.forceSimulation(a).alphaDecay(0).force("collide",n.forceCollide().radius((function(t){return t.dy/2+r.nodePad/2})).strength(1).iterations(l.forceIterations)).force("constrain",function(t,e,r,n){return function(){for(var t=0,i=0;i<r.length;i++){var a=r[i];a===n.interactionState.dragInProgress?(a.x=a.lastDraggedX,a.y=a.lastDraggedY):(a.vx=(a.originalX-a.x)/l.forceTicksPerFrame,a.y=Math.min(n.size-a.dy/2,Math.max(a.dy/2,a.y))),t=Math.max(t,Math.abs(a.vx),Math.abs(a.vy))}!n.interactionState.dragInProgress&&t<.1&&n.forceLayouts[e].alpha()>0&&n.forceLayouts[e].alpha(0)}}(0,e,a,r)).stop()}(0,o,a),function(t,e,r,n,i){window.requestAnimationFrame((function a(){var o;for(o=0;o<l.forceTicksPerFrame;o++)r.forceLayouts[n].tick();if(function(t){for(var e=0;e<t.length;e++)t[e].y0=t[e].y-t[e].dy/2,t[e].y1=t[e].y0+t[e].dy,t[e].x0=t[e].x-t[e].dx/2,t[e].x1=t[e].x0+t[e].dx}(r.graph.nodes),r.sankey.update(r.graph),C(t.filter(B(r)),e),r.forceLayouts[n].alpha()>0)window.requestAnimationFrame(a);else{var s=r.node.originalX;r.node.x0=s-r.visibleWidth/2,r.node.x1=s+r.visibleWidth/2,R(r,i)}}))}(t,e,a,o,i)}})).on("drag",(function(r){if("fixed"!==r.arrangement){var n=a.event.x,i=a.event.y;"snap"===r.arrangement?(r.node.x0=n-r.visibleWidth/2,r.node.x1=n+r.visibleWidth/2,r.node.y0=i-r.visibleHeight/2,r.node.y1=i+r.visibleHeight/2):("freeform"===r.arrangement&&(r.node.x0=n-r.visibleWidth/2,r.node.x1=n+r.visibleWidth/2),i=Math.max(0,Math.min(r.size-r.visibleHeight/2,i)),r.node.y0=i-r.visibleHeight/2,r.node.y1=i+r.visibleHeight/2),F(r.node),"snap"!==r.arrangement&&(r.sankey.update(r.graph),C(t.filter(B(r)),e))}})).on("dragend",(function(t){if("fixed"!==t.arrangement){t.interactionState.dragInProgress=!1;for(var e=0;e<t.node.childrenNodes.length;e++)t.node.childrenNodes[e].x=t.node.x,t.node.childrenNodes[e].y=t.node.y;"snap"!==t.arrangement&&R(t,i)}}));t.on(".drag",null).call(o)}function R(t,e){for(var r=[],n=[],i=0;i<t.graph.nodes.length;i++){var a=(t.graph.nodes[i].x0+t.graph.nodes[i].x1)/2,o=(t.graph.nodes[i].y0+t.graph.nodes[i].y1)/2;r.push(a/t.figure.width),n.push(o/t.figure.height)}b.call("_guiRestyle",e,{"node.x":[r],"node.y":[n]},t.trace.index).then((function(){e._fullLayout._dragCover&&e._fullLayout._dragCover.remove()}))}function F(t){t.lastDraggedX=t.x0+t.dx/2,t.lastDraggedY=t.y0+t.dy/2}function B(t){return function(e){return e.node.originalX===t.node.originalX}}t.exports=function(t,e,r,n,i){var o=t._context.staticPlot,s=!1;h.ensureSingle(t._fullLayout._infolayer,"g","first-render",(function(){s=!0}));var v=t._fullLayout._dragCover,b=r.filter((function(t){return m(t).trace.visible})).map(k.bind(null,n)),_=e.selectAll("."+l.cn.sankey).data(b,g);_.exit().remove(),_.enter().append("g").classed(l.cn.sankey,!0).style("box-sizing","content-box").style("position","absolute").style("left",0).style("shape-rendering","geometricPrecision").style("pointer-events",o?"none":"auto").attr("transform",I),_.each((function(e,r){t._fullData[r]._sankey=e;var n="bgsankey-"+e.trace.uid+"-"+r;h.ensureSingle(t._fullLayout._draggers,"rect",n),t._fullData[r]._bgRect=a.select("."+n),t._fullData[r]._bgRect.style("pointer-events",o?"none":"all").attr("width",e.width).attr("height",e.height).attr("x",e.translateX).attr("y",e.translateY).classed("bgsankey",!0).style({fill:"transparent","stroke-width":0})})),_.transition().ease(l.ease).duration(l.duration).attr("transform",I);var L=_.selectAll("."+l.cn.sankeyLinks).data(y,g);L.enter().append("g").classed(l.cn.sankeyLinks,!0).style("fill","none");var C=L.selectAll("."+l.cn.sankeyLink).data((function(t){return t.graph.links.filter((function(t){return t.value})).map(A.bind(null,t))}),g);C.enter().append("path").classed(l.cn.sankeyLink,!0).call(D,_,i.linkEvents),C.style("stroke",(function(t){return O(t)?c.tinyRGB(u(t.linkLineColor)):t.tinyColorHue})).style("stroke-opacity",(function(t){return O(t)?c.opacity(t.linkLineColor):t.tinyColorAlpha})).style("fill",(function(t){return t.tinyColorHue})).style("fill-opacity",(function(t){return t.tinyColorAlpha})).style("stroke-width",(function(t){return O(t)?t.linkLineWidth:1})).attr("d",M()),C.style("opacity",(function(){return t._context.staticPlot||s||v?1:0})).transition().ease(l.ease).duration(l.duration).style("opacity",1),C.exit().transition().ease(l.ease).duration(l.duration).style("opacity",0).remove();var R=_.selectAll("."+l.cn.sankeyNodeSet).data(y,g);R.enter().append("g").classed(l.cn.sankeyNodeSet,!0),R.style("cursor",(function(t){switch(t.arrangement){case"fixed":return"default";case"perpendicular":return"ns-resize";default:return"move"}}));var F=R.selectAll("."+l.cn.sankeyNode).data((function(t){var e=t.graph.nodes;return function(t){var e,r=[];for(e=0;e<t.length;e++)t[e].originalX=(t[e].x0+t[e].x1)/2,t[e].originalY=(t[e].y0+t[e].y1)/2,-1===r.indexOf(t[e].originalX)&&r.push(t[e].originalX);for(r.sort((function(t,e){return t-e})),e=0;e<t.length;e++)t[e].originalLayerIndex=r.indexOf(t[e].originalX),t[e].originalLayer=t[e].originalLayerIndex/(r.length-1)}(e),e.map(S.bind(null,t))}),g);F.enter().append("g").classed(l.cn.sankeyNode,!0).call(E).style("opacity",(function(e){return!t._context.staticPlot&&!s||e.partOfGroup?0:1})),F.call(D,_,i.nodeEvents).call(z,C,i,t),F.transition().ease(l.ease).duration(l.duration).call(E).style("opacity",(function(t){return t.partOfGroup?0:1})),F.exit().transition().ease(l.ease).duration(l.duration).style("opacity",0).remove();var B=F.selectAll("."+l.cn.nodeRect).data(y);B.enter().append("rect").classed(l.cn.nodeRect,!0).call(P),B.style("stroke-width",(function(t){return t.nodeLineWidth})).style("stroke",(function(t){return c.tinyRGB(u(t.nodeLineColor))})).style("stroke-opacity",(function(t){return c.opacity(t.nodeLineColor)})).style("fill",(function(t){return t.tinyColorHue})).style("fill-opacity",(function(t){return t.tinyColorAlpha})),B.transition().ease(l.ease).duration(l.duration).call(P);var N=F.selectAll("."+l.cn.nodeLabel).data(y);N.enter().append("text").classed(l.cn.nodeLabel,!0).style("cursor","default"),N.attr("data-notex",1).text((function(t){return t.node.label})).each((function(e){var r=a.select(this);f.font(r,e.textFont),x.convertToTspans(r,t)})).style("text-shadow",x.makeTextShadow(t._fullLayout.paper_bgcolor)).attr("text-anchor",(function(t){return t.horizontal&&t.left?"end":"start"})).attr("transform",(function(t){var e=a.select(this),r=x.lineCount(e),n=t.textFont.size*((r-1)*T-w),i=t.nodeLineWidth/2+3,o=((t.horizontal?t.visibleHeight:t.visibleWidth)-n)/2;t.horizontal&&(t.left?i=-i:i+=t.visibleWidth);var s=t.horizontal?"":"scale(-1,1)"+d(90);return p(t.horizontal?i:o,t.horizontal?o:i)+s})),N.transition().ease(l.ease).duration(l.duration)}},84564:function(t){"use strict";t.exports=function(t,e){for(var r=[],n=t.cd[0].trace,i=n._sankey.graph.nodes,a=0;a<i.length;a++){var o=i[a];if(!o.partOfGroup){var s=[(o.x0+o.x1)/2,(o.y0+o.y1)/2];"v"===n.orientation&&s.reverse(),e&&e.contains(s,!1,a,t)&&r.push({pointNumber:o.pointNumber})}}return r}},75225:function(t,e,r){"use strict";var n=r(71828);t.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,"tx"),n.mergeArray(e.texttemplate,t,"txt"),n.mergeArray(e.hovertext,t,"htx"),n.mergeArray(e.customdata,t,"data"),n.mergeArray(e.textposition,t,"tp"),e.textfont&&(n.mergeArrayCastPositive(e.textfont.size,t,"ts"),n.mergeArray(e.textfont.color,t,"tc"),n.mergeArray(e.textfont.family,t,"tf"));var i=e.marker;if(i){n.mergeArrayCastPositive(i.size,t,"ms"),n.mergeArrayCastPositive(i.opacity,t,"mo"),n.mergeArray(i.symbol,t,"mx"),n.mergeArray(i.angle,t,"ma"),n.mergeArray(i.standoff,t,"mf"),n.mergeArray(i.color,t,"mc");var a=i.line;i.line&&(n.mergeArray(a.color,t,"mlc"),n.mergeArrayCastPositive(a.width,t,"mlw"));var o=i.gradient;o&&"none"!==o.type&&(n.mergeArray(o.type,t,"mgt"),n.mergeArray(o.color,t,"mgc"))}}},82196:function(t,e,r){"use strict";var n=r(12663).axisHoverFormat,i=r(5386).si,a=r(5386).fF,o=r(50693),s=r(41940),l=r(79952).P,u=r(79952).u,c=r(91424),f=r(47581),h=r(1426).extendFlat;t.exports={x:{valType:"data_array",editType:"calc+clearAxisTypes",anim:!0},x0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes",anim:!0},dx:{valType:"number",dflt:1,editType:"calc",anim:!0},y:{valType:"data_array",editType:"calc+clearAxisTypes",anim:!0},y0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes",anim:!0},dy:{valType:"number",dflt:1,editType:"calc",anim:!0},xperiod:{valType:"any",dflt:0,editType:"calc"},yperiod:{valType:"any",dflt:0,editType:"calc"},xperiod0:{valType:"any",editType:"calc"},yperiod0:{valType:"any",editType:"calc"},xperiodalignment:{valType:"enumerated",values:["start","middle","end"],dflt:"middle",editType:"calc"},yperiodalignment:{valType:"enumerated",values:["start","middle","end"],dflt:"middle",editType:"calc"},xhoverformat:n("x"),yhoverformat:n("y"),offsetgroup:{valType:"string",dflt:"",editType:"calc"},alignmentgroup:{valType:"string",dflt:"",editType:"calc"},stackgroup:{valType:"string",dflt:"",editType:"calc"},orientation:{valType:"enumerated",values:["v","h"],editType:"calc"},groupnorm:{valType:"enumerated",values:["","fraction","percent"],dflt:"",editType:"calc"},stackgaps:{valType:"enumerated",values:["infer zero","interpolate"],dflt:"infer zero",editType:"calc"},text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},texttemplate:i({},{}),hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"style"},mode:{valType:"flaglist",flags:["lines","markers","text"],extras:["none"],editType:"calc"},hoveron:{valType:"flaglist",flags:["points","fills"],editType:"style"},hovertemplate:a({},{keys:f.eventDataKeys}),line:{color:{valType:"color",editType:"style",anim:!0},width:{valType:"number",min:0,dflt:2,editType:"style",anim:!0},shape:{valType:"enumerated",values:["linear","spline","hv","vh","hvh","vhv"],dflt:"linear",editType:"plot"},smoothing:{valType:"number",min:0,max:1.3,dflt:1,editType:"plot"},dash:h({},l,{editType:"style"}),backoff:{valType:"number",min:0,dflt:"auto",arrayOk:!0,editType:"plot"},simplify:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},connectgaps:{valType:"boolean",dflt:!1,editType:"calc"},cliponaxis:{valType:"boolean",dflt:!0,editType:"plot"},fill:{valType:"enumerated",values:["none","tozeroy","tozerox","tonexty","tonextx","toself","tonext"],editType:"calc"},fillcolor:{valType:"color",editType:"style",anim:!0},fillpattern:u,marker:h({symbol:{valType:"enumerated",values:c.symbolList,dflt:"circle",arrayOk:!0,editType:"style"},opacity:{valType:"number",min:0,max:1,arrayOk:!0,editType:"style",anim:!0},angle:{valType:"angle",dflt:0,arrayOk:!0,editType:"plot",anim:!1},angleref:{valType:"enumerated",values:["previous","up"],dflt:"up",editType:"plot",anim:!1},standoff:{valType:"number",min:0,dflt:0,arrayOk:!0,editType:"plot",anim:!0},size:{valType:"number",min:0,dflt:6,arrayOk:!0,editType:"calc",anim:!0},maxdisplayed:{valType:"number",min:0,dflt:0,editType:"plot"},sizeref:{valType:"number",dflt:1,editType:"calc"},sizemin:{valType:"number",min:0,dflt:0,editType:"calc"},sizemode:{valType:"enumerated",values:["diameter","area"],dflt:"diameter",editType:"calc"},line:h({width:{valType:"number",min:0,arrayOk:!0,editType:"style",anim:!0},editType:"calc"},o("marker.line",{anim:!0})),gradient:{type:{valType:"enumerated",values:["radial","horizontal","vertical","none"],arrayOk:!0,dflt:"none",editType:"calc"},color:{valType:"color",arrayOk:!0,editType:"calc"},editType:"calc"},editType:"calc"},o("marker",{anim:!0})),selected:{marker:{opacity:{valType:"number",min:0,max:1,editType:"style"},color:{valType:"color",editType:"style"},size:{valType:"number",min:0,editType:"style"},editType:"style"},textfont:{color:{valType:"color",editType:"style"},editType:"style"},editType:"style"},unselected:{marker:{opacity:{valType:"number",min:0,max:1,editType:"style"},color:{valType:"color",editType:"style"},size:{valType:"number",min:0,editType:"style"},editType:"style"},textfont:{color:{valType:"color",editType:"style"},editType:"style"},editType:"style"},textposition:{valType:"enumerated",values:["top left","top center","top right","middle left","middle center","middle right","bottom left","bottom center","bottom right"],dflt:"middle center",arrayOk:!0,editType:"calc"},textfont:s({editType:"calc",colorEditType:"style",arrayOk:!0})}},47761:function(t,e,r){"use strict";var n=r(92770),i=r(71828),a=r(89298),o=r(42973),s=r(50606).BADNUM,l=r(34098),u=r(36922),c=r(75225),f=r(66279);function h(t,e,r,n,i,o,s){var u=e._length,c=t._fullLayout,f=r._id,h=n._id,p=c._firstScatter[v(e)]===e.uid,d=(g(e,c,r,n)||{}).orientation,y=e.fill;r._minDtick=0,n._minDtick=0;var m={padded:!0},x={padded:!0};s&&(m.ppad=x.ppad=s);var b=u<2||i[0]!==i[u-1]||o[0]!==o[u-1];b&&("tozerox"===y||"tonextx"===y&&(p||"h"===d))?m.tozero=!0:(e.error_y||{}).visible||"tonexty"!==y&&"tozeroy"!==y&&(l.hasMarkers(e)||l.hasText(e))||(m.padded=!1,m.ppad=0),b&&("tozeroy"===y||"tonexty"===y&&(p||"v"===d))?x.tozero=!0:"tonextx"!==y&&"tozerox"!==y||(x.padded=!1),f&&(e._extremes[f]=a.findExtremes(r,i,m)),h&&(e._extremes[h]=a.findExtremes(n,o,x))}function p(t,e){if(l.hasMarkers(t)){var r,n=t.marker,o=1.6*(t.marker.sizeref||1);if(r="area"===t.marker.sizemode?function(t){return Math.max(Math.sqrt((t||0)/o),3)}:function(t){return Math.max((t||0)/o,3)},i.isArrayOrTypedArray(n.size)){var s={type:"linear"};a.setConvert(s);for(var u=s.makeCalcdata(t.marker,"size"),c=new Array(e),f=0;f<e;f++)c[f]=r(u[f]);return c}return r(n.size)}}function d(t,e){var r=v(e),n=t._firstScatter;n[r]||(n[r]=e.uid)}function v(t){var e=t.stackgroup;return t.xaxis+t.yaxis+t.type+(e?"-"+e:"")}function g(t,e,r,n){var i=t.stackgroup;if(i){var a=e._scatterStackOpts[r._id+n._id][i],o="v"===a.orientation?n:r;return"linear"===o.type||"log"===o.type?a:void 0}}t.exports={calc:function(t,e){var r,l,v,y,m,x,b=t._fullLayout,_=e._xA=a.getFromId(t,e.xaxis||"x","x"),w=e._yA=a.getFromId(t,e.yaxis||"y","y"),T=_.makeCalcdata(e,"x"),k=w.makeCalcdata(e,"y"),A=o(e,_,"x",T),M=o(e,w,"y",k),S=A.vals,E=M.vals,L=e._length,C=new Array(L),P=e.ids,O=g(e,b,_,w),I=!1;d(b,e);var D,z="x",R="y";O?(i.pushUnique(O.traceIndices,e._expandedIndex),(r="v"===O.orientation)?(R="s",D="x"):(z="s",D="y"),m="interpolate"===O.stackgaps):h(t,e,_,w,S,E,p(e,L));var F=!!e.xperiodalignment,B=!!e.yperiodalignment;for(l=0;l<L;l++){var N=C[l]={},j=n(S[l]),U=n(E[l]);j&&U?(N[z]=S[l],N[R]=E[l],F&&(N.orig_x=T[l],N.xEnd=A.ends[l],N.xStart=A.starts[l]),B&&(N.orig_y=k[l],N.yEnd=M.ends[l],N.yStart=M.starts[l])):O&&(r?j:U)?(N[D]=r?S[l]:E[l],N.gap=!0,m?(N.s=s,I=!0):N.s=0):N[z]=N[R]=s,P&&(N.id=String(P[l]))}if(c(C,e),u(t,e),f(C,e),O){for(l=0;l<C.length;)C[l][D]===s?C.splice(l,1):l++;if(i.sort(C,(function(t,e){return t[D]-e[D]||t.i-e.i})),I){for(l=0;l<C.length-1&&C[l].gap;)l++;for((x=C[l].s)||(x=C[l].s=0),v=0;v<l;v++)C[v].s=x;for(y=C.length-1;y>l&&C[y].gap;)y--;for(x=C[y].s,v=C.length-1;v>y;v--)C[v].s=x;for(;l<y;)if(C[++l].gap){for(v=l+1;C[v].gap;)v++;for(var V=C[l-1][D],H=C[l-1].s,q=(C[v].s-H)/(C[v][D]-V);l<v;)C[l].s=H+(C[l][D]-V)*q,l++}}}return C},calcMarkerSize:p,calcAxisExpansion:h,setFirstScatter:d,getStackOpts:g}},66279:function(t,e,r){"use strict";var n=r(71828);t.exports=function(t,e){n.isArrayOrTypedArray(e.selectedpoints)&&n.tagSelected(t,e)}},36922:function(t,e,r){"use strict";var n=r(52075).hasColorscale,i=r(78803),a=r(34098);t.exports=function(t,e){a.hasLines(e)&&n(e,"line")&&i(t,e,{vals:e.line.color,containerStr:"line",cLetter:"c"}),a.hasMarkers(e)&&(n(e,"marker")&&i(t,e,{vals:e.marker.color,containerStr:"marker",cLetter:"c"}),n(e,"marker.line")&&i(t,e,{vals:e.marker.line.color,containerStr:"marker.line",cLetter:"c"}))}},47581:function(t){"use strict";t.exports={PTS_LINESONLY:20,minTolerance:.2,toleranceGrowth:10,maxScreensAway:20,eventDataKeys:[]}},72626:function(t,e,r){"use strict";var n=r(47761),i=r(11661).setGroupPositions;function a(t,e,r,n,i,a,o){i[n]=!0;var s={i:null,gap:!0,s:0};if(s[o]=r,t.splice(e,0,s),e&&r===t[e-1][o]){var l=t[e-1];s.s=l.s,s.i=l.i,s.gap=l.gap}else a&&(s.s=function(t,e,r,n){var i=t[e-1],a=t[e+1];return a?i?i.s+(a.s-i.s)*(r-i[n])/(a[n]-i[n]):a.s:i.s}(t,e,r,o));e||(t[0].t=t[1].t,t[0].trace=t[1].trace,delete t[1].t,delete t[1].trace)}t.exports=function(t,e){"group"===t._fullLayout.scattermode&&function(t,e){for(var r=e.xaxis,n=e.yaxis,a=t._fullLayout,o=t._fullData,s=t.calcdata,l=[],u=[],c=0;c<o.length;c++){var f=o[c];!0===f.visible&&"scatter"===f.type&&f.xaxis===r._id&&f.yaxis===n._id&&("h"===f.orientation?l.push(s[c]):"v"===f.orientation&&u.push(s[c]))}var h={mode:a.scattermode,gap:a.scattergap};i(t,r,n,u,h),i(t,n,r,l,h)}(t,e);var r=e.xaxis,o=e.yaxis,s=r._id+o._id,l=t._fullLayout._scatterStackOpts[s];if(l){var u,c,f,h,p,d,v,g,y,m,x,b,_,w,T,k=t.calcdata;for(var A in l){var M=(m=l[A]).traceIndices;if(M.length){for(x="interpolate"===m.stackgaps,b=m.groupnorm,"v"===m.orientation?(_="x",w="y"):(_="y",w="x"),T=new Array(M.length),u=0;u<T.length;u++)T[u]=!1;d=k[M[0]];var S=new Array(d.length);for(u=0;u<d.length;u++)S[u]=d[u][_];for(u=1;u<M.length;u++){for(p=k[M[u]],c=f=0;c<p.length;c++){for(v=p[c][_];v>S[f]&&f<S.length;f++)a(p,c,S[f],u,T,x,_),c++;if(v!==S[f]){for(h=0;h<u;h++)a(k[M[h]],f,v,h,T,x,_);S.splice(f,0,v)}f++}for(;f<S.length;f++)a(p,c,S[f],u,T,x,_),c++}var E=S.length;for(c=0;c<d.length;c++){for(g=d[c][w]=d[c].s,u=1;u<M.length;u++)(p=k[M[u]])[0].trace._rawLength=p[0].trace._length,p[0].trace._length=E,g+=p[c].s,p[c][w]=g;if(b)for(y=("fraction"===b?g:g/100)||1,u=0;u<M.length;u++){var L=k[M[u]][c];L[w]/=y,L.sNorm=L.s/y}}for(u=0;u<M.length;u++){var C=(p=k[M[u]])[0].trace,P=n.calcMarkerSize(C,C._rawLength),O=Array.isArray(P);if(P&&T[u]||O){var I=P;for(P=new Array(E),c=0;c<E;c++)P[c]=p[c].gap?0:O?I[p[c].i]:I}var D=new Array(E),z=new Array(E);for(c=0;c<E;c++)D[c]=p[c].x,z[c]=p[c].y;n.calcAxisExpansion(t,C,r,o,D,z,P),p[0].t.orientation=m.orientation}}}}}},34936:function(t,e,r){"use strict";var n=r(71828),i=r(26125),a=r(82196);t.exports=function(t,e){var r,o,s;function l(t){return n.coerce(o._input,o,a,t)}if("group"===e.scattermode)for(s=0;s<t.length;s++)"scatter"===(o=t[s]).type&&(r=o._input,i(r,o,e,l));for(s=0;s<t.length;s++){var u=t[s];if("scatter"===u.type){var c=u.fill;if("none"!==c&&"toself"!==c&&(u.opacity=void 0,"tonexty"===c||"tonextx"===c))for(var f=s-1;f>=0;f--){var h=t[f];if("scatter"===h.type&&h.xaxis===u.xaxis&&h.yaxis===u.yaxis){h.opacity=void 0;break}}}}}},17438:function(t,e,r){"use strict";var n=r(71828),i=r(73972),a=r(82196),o=r(47581),s=r(34098),l=r(67513),u=r(73927),c=r(565),f=r(49508),h=r(11058),p=r(94039),d=r(82410),v=r(28908),g=r(71828).coercePattern;t.exports=function(t,e,r,y){function m(r,i){return n.coerce(t,e,a,r,i)}var x=l(t,e,y,m);if(x||(e.visible=!1),e.visible){u(t,e,y,m),m("xhoverformat"),m("yhoverformat");var b=c(t,e,y,m);"group"===y.scattermode&&void 0===e.orientation&&m("orientation","v");var _=!b&&x<o.PTS_LINESONLY?"lines+markers":"lines";m("text"),m("hovertext"),m("mode",_),s.hasLines(e)&&(h(t,e,r,y,m,{backoff:!0}),p(t,e,m),m("connectgaps"),m("line.simplify")),s.hasMarkers(e)&&f(t,e,r,y,m,{gradient:!0}),s.hasText(e)&&(m("texttemplate"),d(t,e,y,m));var w=[];(s.hasMarkers(e)||s.hasText(e))&&(m("cliponaxis"),m("marker.maxdisplayed"),w.push("points")),m("fill",b?b.fillDflt:"none"),"none"!==e.fill&&(v(t,e,r,m),s.hasLines(e)||p(t,e,m),g(m,"fillpattern",e.fillcolor,!1));var T=(e.line||{}).color,k=(e.marker||{}).color;"tonext"!==e.fill&&"toself"!==e.fill||w.push("fills"),m("hoveron",w.join("+")||"points"),"fills"!==e.hoveron&&m("hovertemplate");var A=i.getComponentMethod("errorbars","supplyDefaults");A(t,e,T||k||r,{axis:"y"}),A(t,e,T||k||r,{axis:"x",inherit:"y"}),n.coerceSelectionMarkerOpacity(e,m)}}},28908:function(t,e,r){"use strict";var n=r(7901),i=r(71828).isArrayOrTypedArray;t.exports=function(t,e,r,a){var o=!1;if(e.marker){var s=e.marker.color,l=(e.marker.line||{}).color;s&&!i(s)?o=s:l&&!i(l)&&(o=l)}a("fillcolor",n.addOpacity((e.line||{}).color||o||r,.5))}},8225:function(t,e,r){"use strict";var n=r(89298);t.exports=function(t,e,r){var i={},a={_fullLayout:r},o=n.getFromTrace(a,e,"x"),s=n.getFromTrace(a,e,"y"),l=t.orig_x;void 0===l&&(l=t.x);var u=t.orig_y;return void 0===u&&(u=t.y),i.xLabel=n.tickText(o,o.c2l(l),!0).text,i.yLabel=n.tickText(s,s.c2l(u),!0).text,i}},34603:function(t,e,r){"use strict";var n=r(7901),i=r(34098);t.exports=function(t,e){var r,a;if("lines"===t.mode)return(r=t.line.color)&&n.opacity(r)?r:t.fillcolor;if("none"===t.mode)return t.fill?t.fillcolor:"";var o=e.mcc||(t.marker||{}).color,s=e.mlcc||((t.marker||{}).line||{}).color;return(a=o&&n.opacity(o)?o:s&&n.opacity(s)&&(e.mlw||((t.marker||{}).line||{}).width)?s:"")?n.opacity(a)<.3?n.addOpacity(a,.3):a:(r=(t.line||{}).color)&&n.opacity(r)&&i.hasLines(t)&&t.line.width?r:t.fillcolor}},26125:function(t,e,r){"use strict";var n=r(99082).getAxisGroup;t.exports=function(t,e,r,i){var a=e.orientation,o=e[{v:"x",h:"y"}[a]+"axis"],s=n(r,o)+a,l=r._alignmentOpts||{},u=i("alignmentgroup"),c=l[s];c||(c=l[s]={});var f=c[u];f?f.traces.push(e):f=c[u]={traces:[e],alignmentIndex:Object.keys(c).length,offsetGroups:{}};var h=i("offsetgroup"),p=f.offsetGroups,d=p[h];h&&(d||(d=p[h]={offsetIndex:Object.keys(p).length}),e._offsetIndex=d.offsetIndex)}},33720:function(t,e,r){"use strict";var n=r(71828),i=r(30211),a=r(73972),o=r(34603),s=r(7901),l=n.fillText;t.exports=function(t,e,r,u){var c=t.cd,f=c[0].trace,h=t.xa,p=t.ya,d=h.c2p(e),v=p.c2p(r),g=[d,v],y=f.hoveron||"",m=-1!==f.mode.indexOf("markers")?3:.5,x=!!f.xperiodalignment,b=!!f.yperiodalignment;if(-1!==y.indexOf("points")){var _=function(t){var e=Math.max(m,t.mrc||0),r=h.c2p(t.x)-d,n=p.c2p(t.y)-v;return Math.max(Math.sqrt(r*r+n*n)-e,1-m/e)},w=i.getDistanceFunction(u,(function(t){if(x){var e=h.c2p(t.xStart),r=h.c2p(t.xEnd);return d>=Math.min(e,r)&&d<=Math.max(e,r)?0:1/0}var n=Math.max(3,t.mrc||0),i=1-1/n,a=Math.abs(h.c2p(t.x)-d);return a<n?i*a/n:a-n+i}),(function(t){if(b){var e=p.c2p(t.yStart),r=p.c2p(t.yEnd);return v>=Math.min(e,r)&&v<=Math.max(e,r)?0:1/0}var n=Math.max(3,t.mrc||0),i=1-1/n,a=Math.abs(p.c2p(t.y)-v);return a<n?i*a/n:a-n+i}),_);if(i.getClosest(c,w,t),!1!==t.index){var T=c[t.index],k=h.c2p(T.x,!0),A=p.c2p(T.y,!0),M=T.mrc||1;t.index=T.i;var S=c[0].t.orientation,E=S&&(T.sNorm||T.s),L="h"===S?E:void 0!==T.orig_x?T.orig_x:T.x,C="v"===S?E:void 0!==T.orig_y?T.orig_y:T.y;return n.extendFlat(t,{color:o(f,T),x0:k-M,x1:k+M,xLabelVal:L,y0:A-M,y1:A+M,yLabelVal:C,spikeDistance:_(T),hovertemplate:f.hovertemplate}),l(T,f,t),a.getComponentMethod("errorbars","hoverInfo")(T,f,t),[t]}}if(-1!==y.indexOf("fills")&&f._polygons){var P,O,I,D,z,R,F,B,N,j=f._polygons,U=[],V=!1,H=1/0,q=-1/0,G=1/0,Z=-1/0;for(P=0;P<j.length;P++)(I=j[P]).contains(g)&&(V=!V,U.push(I),G=Math.min(G,I.ymin),Z=Math.max(Z,I.ymax));if(V){var Y=((G=Math.max(G,0))+(Z=Math.min(Z,p._length)))/2;for(P=0;P<U.length;P++)for(D=U[P].pts,O=1;O<D.length;O++)(B=D[O-1][1])>Y!=(N=D[O][1])>=Y&&(R=D[O-1][0],F=D[O][0],N-B&&(z=R+(F-R)*(Y-B)/(N-B),H=Math.min(H,z),q=Math.max(q,z)));H=Math.max(H,0),q=Math.min(q,h._length);var W=s.defaultLine;return s.opacity(f.fillcolor)?W=f.fillcolor:s.opacity((f.line||{}).color)&&(W=f.line.color),n.extendFlat(t,{distance:t.maxHoverDistance,x0:H,x1:q,y0:Y,y1:Y,color:W,hovertemplate:!1}),delete t.index,f.text&&!Array.isArray(f.text)?t.text=String(f.text):t.text=f.name,[t]}}}},67368:function(t,e,r){"use strict";var n=r(34098);t.exports={hasLines:n.hasLines,hasMarkers:n.hasMarkers,hasText:n.hasText,isBubble:n.isBubble,attributes:r(82196),layoutAttributes:r(21479),supplyDefaults:r(17438),crossTraceDefaults:r(34936),supplyLayoutDefaults:r(79334),calc:r(47761).calc,crossTraceCalc:r(72626),arraysToCalcdata:r(75225),plot:r(32663),colorbar:r(4898),formatLabels:r(8225),style:r(16296).style,styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(33720),selectPoints:r(98002),animatable:!0,moduleType:"trace",name:"scatter",basePlotModule:r(93612),categories:["cartesian","svg","symbols","errorBarsOK","showLegend","scatter-like","zoomScale"],meta:{}}},21479:function(t){"use strict";t.exports={scattermode:{valType:"enumerated",values:["group","overlay"],dflt:"overlay",editType:"calc"},scattergap:{valType:"number",min:0,max:1,editType:"calc"}}},79334:function(t,e,r){"use strict";var n=r(71828),i=r(21479);t.exports=function(t,e){var r,a="group"===e.barmode;"group"===e.scattermode&&("scattergap",r=a?e.bargap:.2,n.coerce(t,e,i,"scattergap",r))}},11058:function(t,e,r){"use strict";var n=r(71828).isArrayOrTypedArray,i=r(52075).hasColorscale,a=r(1586);t.exports=function(t,e,r,o,s,l){l||(l={});var u=(t.marker||{}).color;s("line.color",r),i(t,"line")?a(t,e,o,s,{prefix:"line.",cLetter:"c"}):s("line.color",!n(u)&&u||r),s("line.width"),l.noDash||s("line.dash"),l.backoff&&s("line.backoff")}},34621:function(t,e,r){"use strict";var n=r(91424),i=r(50606),a=i.BADNUM,o=i.LOG_CLIP,s=o+.5,l=o-.5,u=r(71828),c=u.segmentsIntersect,f=u.constrain,h=r(47581);t.exports=function(t,e){var r,i,o,p,d,v,g,y,m,x,b,_,w,T,k,A,M,S,E=e.trace||{},L=e.xaxis,C=e.yaxis,P="log"===L.type,O="log"===C.type,I=L._length,D=C._length,z=e.backoff,R=E.marker,F=e.connectGaps,B=e.baseTolerance,N=e.shape,j="linear"===N,U=E.fill&&"none"!==E.fill,V=[],H=h.minTolerance,q=t.length,G=new Array(q),Z=0;function Y(r){var n=t[r];if(!n)return!1;var i=e.linearized?L.l2p(n.x):L.c2p(n.x),o=e.linearized?C.l2p(n.y):C.c2p(n.y);if(i===a){if(P&&(i=L.c2p(n.x,!0)),i===a)return!1;O&&o===a&&(i*=Math.abs(L._m*D*(L._m>0?s:l)/(C._m*I*(C._m>0?s:l)))),i*=1e3}if(o===a){if(O&&(o=C.c2p(n.y,!0)),o===a)return!1;o*=1e3}return[i,o]}function W(t,e,r,n){var i=r-t,a=n-e,o=.5-t,s=.5-e,l=i*i+a*a,u=i*o+a*s;if(u>0&&u<l){var c=o*a-s*i;if(c*c<l)return!0}}function X(t,e){var r=t[0]/I,n=t[1]/D,i=Math.max(0,-r,r-1,-n,n-1);return i&&void 0!==M&&W(r,n,M,S)&&(i=0),i&&e&&W(r,n,e[0]/I,e[1]/D)&&(i=0),(1+h.toleranceGrowth*i)*B}function J(t,e){var r=t[0]-e[0],n=t[1]-e[1];return Math.sqrt(r*r+n*n)}var K,$,Q,tt,et,rt,nt,it=h.maxScreensAway,at=-I*it,ot=I*(1+it),st=-D*it,lt=D*(1+it),ut=[[at,st,ot,st],[ot,st,ot,lt],[ot,lt,at,lt],[at,lt,at,st]];function ct(t){if(t[0]<at||t[0]>ot||t[1]<st||t[1]>lt)return[f(t[0],at,ot),f(t[1],st,lt)]}function ft(t,e){return t[0]===e[0]&&(t[0]===at||t[0]===ot)||t[1]===e[1]&&(t[1]===st||t[1]===lt)||void 0}function ht(t,e,r){return function(n,i){var a=ct(n),o=ct(i),s=[];if(a&&o&&ft(a,o))return s;a&&s.push(a),o&&s.push(o);var l=2*u.constrain((n[t]+i[t])/2,e,r)-((a||n)[t]+(o||i)[t]);return l&&((a&&o?l>0==a[t]>o[t]?a:o:a||o)[t]+=l),s}}function pt(t){var e=t[0],r=t[1],n=e===G[Z-1][0],i=r===G[Z-1][1];if(!n||!i)if(Z>1){var a=e===G[Z-2][0],o=r===G[Z-2][1];n&&(e===at||e===ot)&&a?o?Z--:G[Z-1]=t:i&&(r===st||r===lt)&&o?a?Z--:G[Z-1]=t:G[Z++]=t}else G[Z++]=t}function dt(t){G[Z-1][0]!==t[0]&&G[Z-1][1]!==t[1]&&pt([Q,tt]),pt(t),et=null,Q=tt=0}"linear"===N||"spline"===N?nt=function(t,e){for(var r=[],n=0,i=0;i<4;i++){var a=ut[i],o=c(t[0],t[1],e[0],e[1],a[0],a[1],a[2],a[3]);o&&(!n||Math.abs(o.x-r[0][0])>1||Math.abs(o.y-r[0][1])>1)&&(o=[o.x,o.y],n&&J(o,t)<J(r[0],t)?r.unshift(o):r.push(o),n++)}return r}:"hv"===N||"vh"===N?nt=function(t,e){var r=[],n=ct(t),i=ct(e);return n&&i&&ft(n,i)||(n&&r.push(n),i&&r.push(i)),r}:"hvh"===N?nt=ht(0,at,ot):"vhv"===N&&(nt=ht(1,st,lt));var vt=u.isArrayOrTypedArray(R);function gt(e){if(e&&z&&(e.i=r,e.d=t,e.trace=E,e.marker=vt?R[e.i]:R,e.backoff=z),M=e[0]/I,S=e[1]/D,K=e[0]<at?at:e[0]>ot?ot:0,$=e[1]<st?st:e[1]>lt?lt:0,K||$){if(Z)if(et){var n=nt(et,e);n.length>1&&(dt(n[0]),G[Z++]=n[1])}else rt=nt(G[Z-1],e)[0],G[Z++]=rt;else G[Z++]=[K||e[0],$||e[1]];var i=G[Z-1];K&&$&&(i[0]!==K||i[1]!==$)?(et&&(Q!==K&&tt!==$?pt(Q&&tt?(a=et,s=(o=e)[0]-a[0],l=(o[1]-a[1])/s,(a[1]*o[0]-o[1]*a[0])/s>0?[l>0?at:ot,lt]:[l>0?ot:at,st]):[Q||K,tt||$]):Q&&tt&&pt([Q,tt])),pt([K,$])):Q-K&&tt-$&&pt([K||Q,$||tt]),et=e,Q=K,tt=$}else et&&dt(nt(et,e)[0]),G[Z++]=e;var a,o,s,l}for(r=0;r<q;r++)if(i=Y(r)){for(Z=0,et=null,gt(i),r++;r<q;r++){if(!(p=Y(r))){if(F)continue;break}if(j&&e.simplify){var yt=Y(r+1);if(x=J(p,i),U&&(0===Z||Z===q-1)||!(x<X(p,yt)*H)){for(y=[(p[0]-i[0])/x,(p[1]-i[1])/x],d=i,b=x,_=T=k=0,g=!1,o=p,r++;r<t.length;r++){if(v=yt,yt=Y(r+1),!v){if(F)continue;break}if(A=(m=[v[0]-i[0],v[1]-i[1]])[0]*y[1]-m[1]*y[0],T=Math.min(T,A),(k=Math.max(k,A))-T>X(v,yt))break;o=v,(w=m[0]*y[0]+m[1]*y[1])>b?(b=w,p=v,g=!1):w<_&&(_=w,d=v,g=!0)}if(g?(gt(p),o!==d&&gt(d)):(d!==i&&gt(d),o!==p&&gt(p)),gt(o),r>=t.length||!v)break;gt(v),i=v}}else gt(p)}et&&pt([Q||et[0],tt||et[1]]),V.push(G.slice(0,Z))}var mt=N.slice(N.length-1);if(z&&"h"!==mt&&"v"!==mt){for(var xt=!1,bt=-1,_t=[],wt=0;wt<V.length;wt++)for(var Tt=0;Tt<V[wt].length-1;Tt++){var kt=V[wt][Tt],At=V[wt][Tt+1],Mt=n.applyBackoff(At,kt);Mt[0]===At[0]&&Mt[1]===At[1]||(xt=!0),_t[bt+1]||(_t[++bt]=[kt,[Mt[0],Mt[1]]])}return xt?_t:V}return V}},94039:function(t){"use strict";t.exports=function(t,e,r){"spline"===r("line.shape")&&r("line.smoothing")}},68687:function(t){"use strict";var e={tonextx:1,tonexty:1,tonext:1};t.exports=function(t,r,n){var i,a,o,s,l,u={},c=!1,f=-1,h=0,p=-1;for(a=0;a<n.length;a++)(o=(i=n[a][0].trace).stackgroup||"")?o in u?l=u[o]:(l=u[o]=h,h++):i.fill in e&&p>=0?l=p:(l=p=h,h++),l<f&&(c=!0),i._groupIndex=f=l;var d=n.slice();c&&d.sort((function(t,e){var r=t[0].trace,n=e[0].trace;return r._groupIndex-n._groupIndex||r.index-n.index}));var v={};for(a=0;a<d.length;a++)o=(i=d[a][0].trace).stackgroup||"",!0===i.visible?(i._nexttrace=null,i.fill in e&&(s=v[o],i._prevtrace=s||null,s&&(s._nexttrace=i)),i._ownfill=i.fill&&("tozero"===i.fill.substr(0,6)||"toself"===i.fill||"to"===i.fill.substr(0,2)&&!i._prevtrace),v[o]=i):i._prevtrace=i._nexttrace=i._ownfill=null;return d}},39984:function(t,e,r){"use strict";var n=r(92770);t.exports=function(t,e){e||(e=2);var r=t.marker,i=r.sizeref||1,a=r.sizemin||0,o="area"===r.sizemode?function(t){return Math.sqrt(t/i)}:function(t){return t/i};return function(t){var r=o(t/e);return n(r)&&r>0?Math.max(r,a):0}}},4898:function(t){"use strict";t.exports={container:"marker",min:"cmin",max:"cmax"}},49508:function(t,e,r){"use strict";var n=r(7901),i=r(52075).hasColorscale,a=r(1586),o=r(34098);t.exports=function(t,e,r,s,l,u){var c=o.isBubble(t),f=(t.line||{}).color;u=u||{},f&&(r=f),l("marker.symbol"),l("marker.opacity",c?.7:1),l("marker.size"),u.noAngle||(l("marker.angle"),u.noAngleRef||l("marker.angleref"),u.noStandOff||l("marker.standoff")),l("marker.color",r),i(t,"marker")&&a(t,e,s,l,{prefix:"marker.",cLetter:"c"}),u.noSelect||(l("selected.marker.color"),l("unselected.marker.color"),l("selected.marker.size"),l("unselected.marker.size")),u.noLine||(l("marker.line.color",f&&!Array.isArray(f)&&e.marker.color!==f?f:c?n.background:n.defaultLine),i(t,"marker.line")&&a(t,e,s,l,{prefix:"marker.line.",cLetter:"c"}),l("marker.line.width",c?1:0)),c&&(l("marker.sizeref"),l("marker.sizemin"),l("marker.sizemode")),u.gradient&&"none"!==l("marker.gradient.type")&&l("marker.gradient.color")}},73927:function(t,e,r){"use strict";var n=r(71828).dateTick0,i=r(50606).ONEWEEK;function a(t,e){return n(e,t%i==0?1:0)}t.exports=function(t,e,r,n,i){if(i||(i={x:!0,y:!0}),i.x){var o=n("xperiod");o&&(n("xperiod0",a(o,e.xcalendar)),n("xperiodalignment"))}if(i.y){var s=n("yperiod");s&&(n("yperiod0",a(s,e.ycalendar)),n("yperiodalignment"))}}},32663:function(t,e,r){"use strict";var n=r(39898),i=r(73972),a=r(71828),o=a.ensureSingle,s=a.identity,l=r(91424),u=r(34098),c=r(34621),f=r(68687),h=r(61082).tester;function p(t,e,r,f,p,d,v){var g,y=t._context.staticPlot;!function(t,e,r,i,o){var s=r.xaxis,l=r.yaxis,c=n.extent(a.simpleMap(s.range,s.r2c)),f=n.extent(a.simpleMap(l.range,l.r2c)),h=i[0].trace;if(u.hasMarkers(h)){var p=h.marker.maxdisplayed;if(0!==p){var d=i.filter((function(t){return t.x>=c[0]&&t.x<=c[1]&&t.y>=f[0]&&t.y<=f[1]})),v=Math.ceil(d.length/p),g=0;o.forEach((function(t,r){var n=t[0].trace;u.hasMarkers(n)&&n.marker.maxdisplayed>0&&r<e&&g++}));var y=Math.round(g*v/3+Math.floor(g/3)*v/7.1);i.forEach((function(t){delete t.vis})),d.forEach((function(t,e){0===Math.round((e+y)%v)&&(t.vis=!0)}))}}}(0,e,r,f,p);var m=!!v&&v.duration>0;function x(t){return m?t.transition():t}var b=r.xaxis,_=r.yaxis,w=f[0].trace,T=w.line,k=n.select(d),A=o(k,"g","errorbars"),M=o(k,"g","lines"),S=o(k,"g","points"),E=o(k,"g","text");if(i.getComponentMethod("errorbars","plot")(t,A,r,v),!0===w.visible){var L,C;x(k).style("opacity",w.opacity);var P=w.fill.charAt(w.fill.length-1);"x"!==P&&"y"!==P&&(P=""),f[0][r.isRangePlot?"nodeRangePlot3":"node3"]=k;var O,I,D="",z=[],R=w._prevtrace;R&&(D=R._prevRevpath||"",C=R._nextFill,z=R._polygons);var F,B,N,j,U,V,H,q="",G="",Z=[],Y=a.noop;if(L=w._ownFill,u.hasLines(w)||"none"!==w.fill){for(C&&C.datum(f),-1!==["hv","vh","hvh","vhv"].indexOf(T.shape)?(F=l.steps(T.shape),B=l.steps(T.shape.split("").reverse().join(""))):F=B="spline"===T.shape?function(t){var e=t[t.length-1];return t.length>1&&t[0][0]===e[0]&&t[0][1]===e[1]?l.smoothclosed(t.slice(1),T.smoothing):l.smoothopen(t,T.smoothing)}:function(t){return"M"+t.join("L")},N=function(t){return B(t.reverse())},Z=c(f,{xaxis:b,yaxis:_,trace:w,connectGaps:w.connectgaps,baseTolerance:Math.max(T.width||1,3)/4,shape:T.shape,backoff:T.backoff,simplify:T.simplify,fill:w.fill}),H=w._polygons=new Array(Z.length),g=0;g<Z.length;g++)w._polygons[g]=h(Z[g]);Z.length&&(j=Z[0][0],V=(U=Z[Z.length-1])[U.length-1]),Y=function(t){return function(e){if(O=F(e),I=N(e),q?P?(q+="L"+O.substr(1),G=I+"L"+G.substr(1)):(q+="Z"+O,G=I+"Z"+G):(q=O,G=I),u.hasLines(w)){var r=n.select(this);if(r.datum(f),t)x(r.style("opacity",0).attr("d",O).call(l.lineGroupStyle)).style("opacity",1);else{var i=x(r);i.attr("d",O),l.singleLineStyle(f,i)}}}}}var W=M.selectAll(".js-line").data(Z);x(W.exit()).style("opacity",0).remove(),W.each(Y(!1)),W.enter().append("path").classed("js-line",!0).style("vector-effect",y?"none":"non-scaling-stroke").call(l.lineGroupStyle).each(Y(!0)),l.setClipUrl(W,r.layerClipId,t),Z.length?(L?(L.datum(f),j&&V&&(P?("y"===P?j[1]=V[1]=_.c2p(0,!0):"x"===P&&(j[0]=V[0]=b.c2p(0,!0)),x(L).attr("d","M"+V+"L"+j+"L"+q.substr(1)).call(l.singleFillStyle,t)):x(L).attr("d",q+"Z").call(l.singleFillStyle,t))):C&&("tonext"===w.fill.substr(0,6)&&q&&D?("tonext"===w.fill?x(C).attr("d",q+"Z"+D+"Z").call(l.singleFillStyle,t):x(C).attr("d",q+"L"+D.substr(1)+"Z").call(l.singleFillStyle,t),w._polygons=w._polygons.concat(z)):(J(C),w._polygons=null)),w._prevRevpath=G,w._prevPolygons=H):(L?J(L):C&&J(C),w._polygons=w._prevRevpath=w._prevPolygons=null),S.datum(f),E.datum(f),function(e,i,a){var o,c=a[0].trace,f=u.hasMarkers(c),h=u.hasText(c),p=et(c),d=rt,v=rt;if(f||h){var g=s,y=c.stackgroup,w=y&&"infer zero"===t._fullLayout._scatterStackOpts[b._id+_._id][y].stackgaps;c.marker.maxdisplayed||c._needsCull?g=w?$:K:y&&!w&&(g=Q),f&&(d=g),h&&(v=g)}var T,k=(o=e.selectAll("path.point").data(d,p)).enter().append("path").classed("point",!0);m&&k.call(l.pointStyle,c,t).call(l.translatePoints,b,_).style("opacity",0).transition().style("opacity",1),o.order(),f&&(T=l.makePointStyleFns(c)),o.each((function(e){var i=n.select(this),a=x(i);l.translatePoint(e,a,b,_)?(l.singlePointStyle(e,a,c,T,t),r.layerClipId&&l.hideOutsideRangePoint(e,a,b,_,c.xcalendar,c.ycalendar),c.customdata&&i.classed("plotly-customdata",null!==e.data&&void 0!==e.data)):a.remove()})),m?o.exit().transition().style("opacity",0).remove():o.exit().remove(),(o=i.selectAll("g").data(v,p)).enter().append("g").classed("textpoint",!0).append("text"),o.order(),o.each((function(t){var e=n.select(this),i=x(e.select("text"));l.translatePoint(t,i,b,_)?r.layerClipId&&l.hideOutsideRangePoint(t,e,b,_,c.xcalendar,c.ycalendar):e.remove()})),o.selectAll("text").call(l.textPointStyle,c,t).each((function(t){var e=b.c2p(t.x),r=_.c2p(t.y);n.select(this).selectAll("tspan.line").each((function(){x(n.select(this)).attr({x:e,y:r})}))})),o.exit().remove()}(S,E,f);var X=!1===w.cliponaxis?null:r.layerClipId;l.setClipUrl(S,X,t),l.setClipUrl(E,X,t)}function J(t){x(t).attr("d","M0,0Z")}function K(t){return t.filter((function(t){return!t.gap&&t.vis}))}function $(t){return t.filter((function(t){return t.vis}))}function Q(t){return t.filter((function(t){return!t.gap}))}function tt(t){return t.id}function et(t){if(t.ids)return tt}function rt(){return!1}}t.exports=function(t,e,r,i,a,u){var c,h,d=!a,v=!!a&&a.duration>0,g=f(t,e,r);(c=i.selectAll("g.trace").data(g,(function(t){return t[0].trace.uid}))).enter().append("g").attr("class",(function(t){return"trace scatter trace"+t[0].trace.uid})).style("stroke-miterlimit",2),c.order(),function(t,e,r){e.each((function(e){var i=o(n.select(this),"g","fills");l.setClipUrl(i,r.layerClipId,t);var a=e[0].trace,u=[];a._ownfill&&u.push("_ownFill"),a._nexttrace&&u.push("_nextFill");var c=i.selectAll("g").data(u,s);c.enter().append("g"),c.exit().each((function(t){a[t]=null})).remove(),c.order().each((function(t){a[t]=o(n.select(this),"path","js-fill")}))}))}(t,c,e),v?(u&&(h=u()),n.transition().duration(a.duration).ease(a.easing).each("end",(function(){h&&h()})).each("interrupt",(function(){h&&h()})).each((function(){i.selectAll("g.trace").each((function(r,n){p(t,n,e,r,g,this,a)}))}))):c.each((function(r,n){p(t,n,e,r,g,this,a)})),d&&c.exit().remove(),i.selectAll("path:not([d])").remove()}},98002:function(t,e,r){"use strict";var n=r(34098);t.exports=function(t,e){var r,i,a,o,s=t.cd,l=t.xaxis,u=t.yaxis,c=[],f=s[0].trace;if(!n.hasMarkers(f)&&!n.hasText(f))return[];if(!1===e)for(r=0;r<s.length;r++)s[r].selected=0;else for(r=0;r<s.length;r++)i=s[r],a=l.c2p(i.x),o=u.c2p(i.y),null!==i.i&&e.contains([a,o],!1,r,t)?(c.push({pointNumber:i.i,x:l.c2d(i.x),y:u.c2d(i.y)}),i.selected=1):i.selected=0;return c}},565:function(t){"use strict";var e=["orientation","groupnorm","stackgaps"];t.exports=function(t,r,n,i){var a=n._scatterStackOpts,o=i("stackgroup");if(o){var s=r.xaxis+r.yaxis,l=a[s];l||(l=a[s]={});var u=l[o],c=!1;u?u.traces.push(r):(u=l[o]={traceIndices:[],traces:[r]},c=!0);for(var f={orientation:r.x&&!r.y?"h":"v"},h=0;h<e.length;h++){var p=e[h],d=p+"Found";if(!u[d]){var v=void 0!==t[p],g="orientation"===p;if((v||c)&&(u[p]=i(p,f[p]),g&&(u.fillDflt="h"===u[p]?"tonextx":"tonexty"),v&&(u[d]=!0,!c&&(delete u.traces[0][p],g))))for(var y=0;y<u.traces.length-1;y++){var m=u.traces[y];m._input.fill!==m.fill&&(m.fill=u.fillDflt)}}}return u}}},16296:function(t,e,r){"use strict";var n=r(39898),i=r(91424),a=r(73972);function o(t,e,r){i.pointStyle(t.selectAll("path.point"),e,r)}function s(t,e,r){i.textPointStyle(t.selectAll("text"),e,r)}t.exports={style:function(t){var e=n.select(t).selectAll("g.trace.scatter");e.style("opacity",(function(t){return t[0].trace.opacity})),e.selectAll("g.points").each((function(e){o(n.select(this),e.trace||e[0].trace,t)})),e.selectAll("g.text").each((function(e){s(n.select(this),e.trace||e[0].trace,t)})),e.selectAll("g.trace path.js-line").call(i.lineGroupStyle),e.selectAll("g.trace path.js-fill").call(i.fillGroupStyle,t),a.getComponentMethod("errorbars","style")(e)},stylePoints:o,styleText:s,styleOnSelect:function(t,e,r){var n=e[0].trace;n.selectedpoints?(i.selectedPointStyle(r.selectAll("path.point"),n),i.selectedTextStyle(r.selectAll("text"),n)):(o(r,n,t),s(r,n,t))}}},34098:function(t,e,r){"use strict";var n=r(71828);t.exports={hasLines:function(t){return t.visible&&t.mode&&-1!==t.mode.indexOf("lines")},hasMarkers:function(t){return t.visible&&(t.mode&&-1!==t.mode.indexOf("markers")||"splom"===t.type)},hasText:function(t){return t.visible&&t.mode&&-1!==t.mode.indexOf("text")},isBubble:function(t){return n.isPlainObject(t.marker)&&n.isArrayOrTypedArray(t.marker.size)}}},82410:function(t,e,r){"use strict";var n=r(71828);t.exports=function(t,e,r,i,a){a=a||{},i("textposition"),n.coerceFont(i,"textfont",a.font||r.font),a.noSelect||(i("selected.textfont.color"),i("unselected.textfont.color"))}},67513:function(t,e,r){"use strict";var n=r(71828),i=r(73972);t.exports=function(t,e,r,a){var o,s=a("x"),l=a("y");if(i.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y"],r),s){var u=n.minRowLength(s);l?o=Math.min(u,n.minRowLength(l)):(o=u,a("y0"),a("dy"))}else{if(!l)return 0;o=n.minRowLength(l),a("x0"),a("dx")}return e._length=o,o}},44542:function(t,e,r){"use strict";var n=r(82196),i=r(50693),a=r(12663).axisHoverFormat,o=r(5386).fF,s=r(5386).si,l=r(9012),u=r(29659),c=r(87381),f=r(1426).extendFlat,h=r(30962).overrideAll,p=r(78607),d=n.line,v=n.marker,g=v.line,y=f({width:d.width,dash:{valType:"enumerated",values:p(u),dflt:"solid"}},i("line")),m=t.exports=h({x:n.x,y:n.y,z:{valType:"data_array"},text:f({},n.text,{}),texttemplate:s({},{}),hovertext:f({},n.hovertext,{}),hovertemplate:o(),xhoverformat:a("x"),yhoverformat:a("y"),zhoverformat:a("z"),mode:f({},n.mode,{dflt:"lines+markers"}),surfaceaxis:{valType:"enumerated",values:[-1,0,1,2],dflt:-1},surfacecolor:{valType:"color"},projection:{x:{show:{valType:"boolean",dflt:!1},opacity:{valType:"number",min:0,max:1,dflt:1},scale:{valType:"number",min:0,max:10,dflt:2/3}},y:{show:{valType:"boolean",dflt:!1},opacity:{valType:"number",min:0,max:1,dflt:1},scale:{valType:"number",min:0,max:10,dflt:2/3}},z:{show:{valType:"boolean",dflt:!1},opacity:{valType:"number",min:0,max:1,dflt:1},scale:{valType:"number",min:0,max:10,dflt:2/3}}},connectgaps:n.connectgaps,line:y,marker:f({symbol:{valType:"enumerated",values:p(c),dflt:"circle",arrayOk:!0},size:f({},v.size,{dflt:8}),sizeref:v.sizeref,sizemin:v.sizemin,sizemode:v.sizemode,opacity:f({},v.opacity,{arrayOk:!1}),colorbar:v.colorbar,line:f({width:f({},g.width,{arrayOk:!1})},i("marker.line"))},i("marker")),textposition:f({},n.textposition,{dflt:"top center"}),textfont:{color:n.textfont.color,size:n.textfont.size,family:f({},n.textfont.family,{arrayOk:!1})},opacity:l.opacity,hoverinfo:f({},l.hoverinfo)},"calc","nested");m.x.editType=m.y.editType=m.z.editType="calc+clearAxisTypes"},36563:function(t,e,r){"use strict";var n=r(75225),i=r(36922);t.exports=function(t,e){var r=[{x:!1,y:!1,trace:e,t:{}}];return n(r,e),i(t,e),r}},67336:function(t,e,r){"use strict";var n=r(73972);function i(t,e,r,i){if(!e||!e.visible)return null;for(var a=n.getComponentMethod("errorbars","makeComputeError")(e),o=new Array(t.length),s=0;s<t.length;s++){var l=a(+t[s],s);if("log"===i.type){var u=i.c2l(t[s]),c=t[s]-l[0],f=t[s]+l[1];if(o[s]=[(i.c2l(c,!0)-u)*r,(i.c2l(f,!0)-u)*r],c>0){var h=i.c2l(c);i._lowerLogErrorBound||(i._lowerLogErrorBound=h),i._lowerErrorBound=Math.min(i._lowerLogErrorBound,h)}}else o[s]=[-l[0]*r,l[1]*r]}return o}t.exports=function(t,e,r){var n=[i(t.x,t.error_x,e[0],r.xaxis),i(t.y,t.error_y,e[1],r.yaxis),i(t.z,t.error_z,e[2],r.zaxis)],a=function(t){for(var e=0;e<t.length;e++)if(t[e])return t[e].length;return 0}(n);if(0===a)return null;for(var o=new Array(a),s=0;s<a;s++){for(var l=[[0,0,0],[0,0,0]],u=0;u<3;u++)if(n[u])for(var c=0;c<2;c++)l[c][u]=n[u][s][c];o[s]=l}return o}},58925:function(t,e,r){"use strict";var n=r(9330).gl_line3d,i=r(9330).gl_scatter3d,a=r(9330).gl_error3d,o=r(9330).gl_mesh3d,s=r(9330).delaunay_triangulate,l=r(71828),u=r(78614),c=r(81697).formatColor,f=r(39984),h=r(29659),p=r(87381),d=r(89298),v=r(23469).appendArrayPointValue,g=r(67336);function y(t,e){this.scene=t,this.uid=e,this.linePlot=null,this.scatterPlot=null,this.errorBars=null,this.textMarkers=null,this.delaunayMesh=null,this.color=null,this.mode="",this.dataPoints=[],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.textLabels=null,this.data=null}var m=y.prototype;function x(t){return null==t?0:t.indexOf("left")>-1?-1:t.indexOf("right")>-1?1:0}function b(t){return null==t?0:t.indexOf("top")>-1?-1:t.indexOf("bottom")>-1?1:0}function _(t,e){return e(4*t)}function w(t){return p[t]}function T(t,e,r,n,i){var a=null;if(l.isArrayOrTypedArray(t)){a=[];for(var o=0;o<e;o++)void 0===t[o]?a[o]=n:a[o]=r(t[o],i)}else a=r(t,l.identity);return a}function k(t){if(l.isArrayOrTypedArray(t)){var e=t[0];return l.isArrayOrTypedArray(e)&&(t=e),"rgb("+t.slice(0,3).map((function(t){return Math.round(255*t)}))+")"}return null}function A(t){return l.isArrayOrTypedArray(t)?4===t.length&&"number"==typeof t[0]?k(t):t.map(k):null}m.handlePick=function(t){if(t.object&&(t.object===this.linePlot||t.object===this.delaunayMesh||t.object===this.textMarkers||t.object===this.scatterPlot)){var e=t.index=t.data.index;return t.object.highlight&&t.object.highlight(null),this.scatterPlot&&(t.object=this.scatterPlot,this.scatterPlot.highlight(t.data)),t.textLabel="",this.textLabels&&(Array.isArray(this.textLabels)?(this.textLabels[e]||0===this.textLabels[e])&&(t.textLabel=this.textLabels[e]):t.textLabel=this.textLabels),t.traceCoordinate=[this.data.x[e],this.data.y[e],this.data.z[e]],!0}},m.update=function(t){var e,r,p,y,m=this.scene.glplot.gl,k=h.solid;this.data=t;var M=function(t,e){var r,n,i,a,o,s,h=[],p=t.fullSceneLayout,y=t.dataScale,m=p.xaxis,k=p.yaxis,A=p.zaxis,M=e.marker,S=e.line,E=e.x||[],L=e.y||[],C=e.z||[],P=E.length,O=e.xcalendar,I=e.ycalendar,D=e.zcalendar;for(o=0;o<P;o++)r=m.d2l(E[o],0,O)*y[0],n=k.d2l(L[o],0,I)*y[1],i=A.d2l(C[o],0,D)*y[2],h[o]=[r,n,i];if(Array.isArray(e.text))s=e.text;else if(void 0!==e.text)for(s=new Array(P),o=0;o<P;o++)s[o]=e.text;function z(t,e){var r=p[t];return d.tickText(r,r.d2l(e),!0).text}var R=e.texttemplate;if(R){var F=t.fullLayout._d3locale,B=Array.isArray(R),N=B?Math.min(R.length,P):P,j=B?function(t){return R[t]}:function(){return R};for(s=new Array(N),o=0;o<N;o++){var U={x:E[o],y:L[o],z:C[o]},V={xLabel:z("xaxis",E[o]),yLabel:z("yaxis",L[o]),zLabel:z("zaxis",C[o])},H={};v(H,e,o);var q=e._meta||{};s[o]=l.texttemplateString(j(o),V,F,H,U,q)}}if(a={position:h,mode:e.mode,text:s},"line"in e&&(a.lineColor=c(S,1,P),a.lineWidth=S.width,a.lineDashes=S.dash),"marker"in e){var G=f(e);a.scatterColor=c(M,1,P),a.scatterSize=T(M.size,P,_,20,G),a.scatterMarker=T(M.symbol,P,w,"●"),a.scatterLineWidth=M.line.width,a.scatterLineColor=c(M.line,1,P),a.scatterAngle=0}"textposition"in e&&(a.textOffset=function(t){var e=[0,0];if(Array.isArray(t))for(var r=0;r<t.length;r++)e[r]=[0,0],t[r]&&(e[r][0]=x(t[r]),e[r][1]=b(t[r]));else e[0]=x(t),e[1]=b(t);return e}(e.textposition),a.textColor=c(e.textfont,1,P),a.textSize=T(e.textfont.size,P,l.identity,12),a.textFont=e.textfont.family,a.textAngle=0);var Z=["x","y","z"];for(a.project=[!1,!1,!1],a.projectScale=[1,1,1],a.projectOpacity=[1,1,1],o=0;o<3;++o){var Y=e.projection[Z[o]];(a.project[o]=Y.show)&&(a.projectOpacity[o]=Y.opacity,a.projectScale[o]=Y.scale)}a.errorBounds=g(e,y,p);var W=function(t){for(var e=[0,0,0],r=[[0,0,0],[0,0,0],[0,0,0]],n=[1,1,1],i=0;i<3;i++){var a=t[i];a&&!1!==a.copy_zstyle&&!1!==t[2].visible&&(a=t[2]),a&&a.visible&&(e[i]=a.width/2,r[i]=u(a.color),n[i]=a.thickness)}return{capSize:e,color:r,lineWidth:n}}([e.error_x,e.error_y,e.error_z]);return a.errorColor=W.color,a.errorLineWidth=W.lineWidth,a.errorCapSize=W.capSize,a.delaunayAxis=e.surfaceaxis,a.delaunayColor=u(e.surfacecolor),a}(this.scene,t);"mode"in M&&(this.mode=M.mode),"lineDashes"in M&&M.lineDashes in h&&(k=h[M.lineDashes]),this.color=A(M.scatterColor)||A(M.lineColor),this.dataPoints=M.position,e={gl:this.scene.glplot.gl,position:M.position,color:M.lineColor,lineWidth:M.lineWidth||1,dashes:k[0],dashScale:k[1],opacity:t.opacity,connectGaps:t.connectgaps},-1!==this.mode.indexOf("lines")?this.linePlot?this.linePlot.update(e):(this.linePlot=n(e),this.linePlot._trace=this,this.scene.glplot.add(this.linePlot)):this.linePlot&&(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose(),this.linePlot=null);var S=t.opacity;if(t.marker&&void 0!==t.marker.opacity&&(S*=t.marker.opacity),r={gl:this.scene.glplot.gl,position:M.position,color:M.scatterColor,size:M.scatterSize,glyph:M.scatterMarker,opacity:S,orthographic:!0,lineWidth:M.scatterLineWidth,lineColor:M.scatterLineColor,project:M.project,projectScale:M.projectScale,projectOpacity:M.projectOpacity},-1!==this.mode.indexOf("markers")?this.scatterPlot?this.scatterPlot.update(r):(this.scatterPlot=i(r),this.scatterPlot._trace=this,this.scatterPlot.highlightScale=1,this.scene.glplot.add(this.scatterPlot)):this.scatterPlot&&(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose(),this.scatterPlot=null),y={gl:this.scene.glplot.gl,position:M.position,glyph:M.text,color:M.textColor,size:M.textSize,angle:M.textAngle,alignment:M.textOffset,font:M.textFont,orthographic:!0,lineWidth:0,project:!1,opacity:t.opacity},this.textLabels=t.hovertext||t.text,-1!==this.mode.indexOf("text")?this.textMarkers?this.textMarkers.update(y):(this.textMarkers=i(y),this.textMarkers._trace=this,this.textMarkers.highlightScale=1,this.scene.glplot.add(this.textMarkers)):this.textMarkers&&(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose(),this.textMarkers=null),p={gl:this.scene.glplot.gl,position:M.position,color:M.errorColor,error:M.errorBounds,lineWidth:M.errorLineWidth,capSize:M.errorCapSize,opacity:t.opacity},this.errorBars?M.errorBounds?this.errorBars.update(p):(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose(),this.errorBars=null):M.errorBounds&&(this.errorBars=a(p),this.errorBars._trace=this,this.scene.glplot.add(this.errorBars)),M.delaunayAxis>=0){var E=function(t,e,r){var n,i=(r+1)%3,a=(r+2)%3,o=[],l=[];for(n=0;n<t.length;++n){var u=t[n];!isNaN(u[i])&&isFinite(u[i])&&!isNaN(u[a])&&isFinite(u[a])&&(o.push([u[i],u[a]]),l.push(n))}var c=s(o);for(n=0;n<c.length;++n)for(var f=c[n],h=0;h<f.length;++h)f[h]=l[f[h]];return{positions:t,cells:c,meshColor:e}}(M.position,M.delaunayColor,M.delaunayAxis);E.opacity=t.opacity,this.delaunayMesh?this.delaunayMesh.update(E):(E.gl=m,this.delaunayMesh=o(E),this.delaunayMesh._trace=this,this.scene.glplot.add(this.delaunayMesh))}else this.delaunayMesh&&(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose(),this.delaunayMesh=null)},m.dispose=function(){this.linePlot&&(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose()),this.scatterPlot&&(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose()),this.errorBars&&(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose()),this.textMarkers&&(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose()),this.delaunayMesh&&(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose())},t.exports=function(t,e){var r=new y(t,e.uid);return r.update(e),r}},21428:function(t,e,r){"use strict";var n=r(73972),i=r(71828),a=r(34098),o=r(49508),s=r(11058),l=r(82410),u=r(44542);t.exports=function(t,e,r,c){function f(r,n){return i.coerce(t,e,u,r,n)}var h=function(t,e,r,i){var a=0,o=r("x"),s=r("y"),l=r("z");return n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y","z"],i),o&&s&&l&&(a=Math.min(o.length,s.length,l.length),e._length=e._xlength=e._ylength=e._zlength=a),a}(t,e,f,c);if(h){f("text"),f("hovertext"),f("hovertemplate"),f("xhoverformat"),f("yhoverformat"),f("zhoverformat"),f("mode"),a.hasLines(e)&&(f("connectgaps"),s(t,e,r,c,f)),a.hasMarkers(e)&&o(t,e,r,c,f,{noSelect:!0,noAngle:!0}),a.hasText(e)&&(f("texttemplate"),l(t,e,c,f,{noSelect:!0}));var p=(e.line||{}).color,d=(e.marker||{}).color;f("surfaceaxis")>=0&&f("surfacecolor",p||d);for(var v=["x","y","z"],g=0;g<3;++g){var y="projection."+v[g];f(y+".show")&&(f(y+".opacity"),f(y+".scale"))}var m=n.getComponentMethod("errorbars","supplyDefaults");m(t,e,p||d||r,{axis:"z"}),m(t,e,p||d||r,{axis:"y",inherit:"z"}),m(t,e,p||d||r,{axis:"x",inherit:"z"})}else e.visible=!1}},13551:function(t,e,r){"use strict";t.exports={plot:r(58925),attributes:r(44542),markerSymbols:r(87381),supplyDefaults:r(21428),colorbar:[{container:"marker",min:"cmin",max:"cmax"},{container:"line",min:"cmin",max:"cmax"}],calc:r(36563),moduleType:"trace",name:"scatter3d",basePlotModule:r(58547),categories:["gl3d","symbols","showLegend","scatter-like"],meta:{}}},97001:function(t,e,r){"use strict";var n=r(82196),i=r(9012),a=r(5386).fF,o=r(5386).si,s=r(50693),l=r(1426).extendFlat,u=n.marker,c=n.line,f=u.line;t.exports={carpet:{valType:"string",editType:"calc"},a:{valType:"data_array",editType:"calc"},b:{valType:"data_array",editType:"calc"},mode:l({},n.mode,{dflt:"markers"}),text:l({},n.text,{}),texttemplate:o({editType:"plot"},{keys:["a","b","text"]}),hovertext:l({},n.hovertext,{}),line:{color:c.color,width:c.width,dash:c.dash,backoff:c.backoff,shape:l({},c.shape,{values:["linear","spline"]}),smoothing:c.smoothing,editType:"calc"},connectgaps:n.connectgaps,fill:l({},n.fill,{values:["none","toself","tonext"],dflt:"none"}),fillcolor:n.fillcolor,marker:l({symbol:u.symbol,opacity:u.opacity,maxdisplayed:u.maxdisplayed,angle:u.angle,angleref:u.angleref,standoff:u.standoff,size:u.size,sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,line:l({width:f.width,editType:"calc"},s("marker.line")),gradient:u.gradient,editType:"calc"},s("marker")),textfont:n.textfont,textposition:n.textposition,selected:n.selected,unselected:n.unselected,hoverinfo:l({},i.hoverinfo,{flags:["a","b","text","name"]}),hoveron:n.hoveron,hovertemplate:a()}},34618:function(t,e,r){"use strict";var n=r(92770),i=r(36922),a=r(75225),o=r(66279),s=r(47761).calcMarkerSize,l=r(22882);t.exports=function(t,e){var r=e._carpetTrace=l(t,e);if(r&&r.visible&&"legendonly"!==r.visible){var u;e.xaxis=r.xaxis,e.yaxis=r.yaxis;var c,f,h=e._length,p=new Array(h),d=!1;for(u=0;u<h;u++)if(c=e.a[u],f=e.b[u],n(c)&&n(f)){var v=r.ab2xy(+c,+f,!0),g=r.isVisible(+c,+f);g||(d=!0),p[u]={x:v[0],y:v[1],a:c,b:f,vis:g}}else p[u]={x:!1,y:!1};return e._needsCull=d,p[0].carpet=r,p[0].trace=e,s(e,h),i(t,e),a(p,e),o(p,e),p}}},98965:function(t,e,r){"use strict";var n=r(71828),i=r(47581),a=r(34098),o=r(49508),s=r(11058),l=r(94039),u=r(82410),c=r(28908),f=r(97001);t.exports=function(t,e,r,h){function p(r,i){return n.coerce(t,e,f,r,i)}p("carpet"),e.xaxis="x",e.yaxis="y";var d=p("a"),v=p("b"),g=Math.min(d.length,v.length);if(g){e._length=g,p("text"),p("texttemplate"),p("hovertext"),p("mode",g<i.PTS_LINESONLY?"lines+markers":"lines"),a.hasLines(e)&&(s(t,e,r,h,p,{backoff:!0}),l(t,e,p),p("connectgaps")),a.hasMarkers(e)&&o(t,e,r,h,p,{gradient:!0}),a.hasText(e)&&u(t,e,h,p);var y=[];(a.hasMarkers(e)||a.hasText(e))&&(p("marker.maxdisplayed"),y.push("points")),p("fill"),"none"!==e.fill&&(c(t,e,r,p),a.hasLines(e)||l(t,e,p)),"tonext"!==e.fill&&"toself"!==e.fill||y.push("fills"),"fills"!==p("hoveron",y.join("+")||"points")&&p("hovertemplate"),n.coerceSelectionMarkerOpacity(e,p)}else e.visible=!1}},16165:function(t){"use strict";t.exports=function(t,e,r,n,i){var a=n[i];return t.a=a.a,t.b=a.b,t.y=a.y,t}},48953:function(t){"use strict";t.exports=function(t,e){var r={},n=e._carpet,i=n.ab2ij([t.a,t.b]),a=Math.floor(i[0]),o=i[0]-a,s=Math.floor(i[1]),l=i[1]-s,u=n.evalxy([],a,s,o,l);return r.yLabel=u[1].toFixed(3),r}},22931:function(t,e,r){"use strict";var n=r(33720),i=r(71828).fillText;t.exports=function(t,e,r,a){var o=n(t,e,r,a);if(o&&!1!==o[0].index){var s=o[0];if(void 0===s.index){var l=1-s.y0/t.ya._length,u=t.xa._length,c=u*l/2,f=u-c;return s.x0=Math.max(Math.min(s.x0,f),c),s.x1=Math.max(Math.min(s.x1,f),c),o}var h=s.cd[s.index];s.a=h.a,s.b=h.b,s.xLabelVal=void 0,s.yLabelVal=void 0;var p=s.trace,d=p._carpet,v=p._module.formatLabels(h,p);s.yLabel=v.yLabel,delete s.text;var g=[];if(!p.hovertemplate){var y=(h.hi||p.hoverinfo).split("+");-1!==y.indexOf("all")&&(y=["a","b","text"]),-1!==y.indexOf("a")&&m(d.aaxis,h.a),-1!==y.indexOf("b")&&m(d.baxis,h.b),g.push("y: "+s.yLabel),-1!==y.indexOf("text")&&i(h,p,g),s.extraText=g.join("<br>")}return o}function m(t,e){var r;r=t.labelprefix&&t.labelprefix.length>0?t.labelprefix.replace(/ = $/,""):t._hovertitle,g.push(r+": "+e.toFixed(3)+t.labelsuffix)}}},46858:function(t,e,r){"use strict";t.exports={attributes:r(97001),supplyDefaults:r(98965),colorbar:r(4898),formatLabels:r(48953),calc:r(34618),plot:r(1913),style:r(16296).style,styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(22931),selectPoints:r(98002),eventData:r(16165),moduleType:"trace",name:"scattercarpet",basePlotModule:r(93612),categories:["svg","carpet","symbols","showLegend","carpetDependent","zoomScale"],meta:{}}},1913:function(t,e,r){"use strict";var n=r(32663),i=r(89298),a=r(91424);t.exports=function(t,e,r,o){var s,l,u,c=r[0][0].carpet,f=i.getFromId(t,c.xaxis||"x"),h=i.getFromId(t,c.yaxis||"y"),p={xaxis:f,yaxis:h,plot:e.plot};for(s=0;s<r.length;s++)(l=r[s][0].trace)._xA=f,l._yA=h;for(n(t,p,r,o),s=0;s<r.length;s++)l=r[s][0].trace,u=o.selectAll("g.trace"+l.uid+" .js-line"),a.setClipUrl(u,r[s][0].carpet._clipPathId,t)}},19316:function(t,e,r){"use strict";var n=r(5386).fF,i=r(5386).si,a=r(82196),o=r(9012),s=r(50693),l=r(79952).P,u=r(1426).extendFlat,c=r(30962).overrideAll,f=a.marker,h=a.line,p=f.line;t.exports=c({lon:{valType:"data_array"},lat:{valType:"data_array"},locations:{valType:"data_array"},locationmode:{valType:"enumerated",values:["ISO-3","USA-states","country names","geojson-id"],dflt:"ISO-3"},geojson:{valType:"any",editType:"calc"},featureidkey:{valType:"string",editType:"calc",dflt:"id"},mode:u({},a.mode,{dflt:"markers"}),text:u({},a.text,{}),texttemplate:i({editType:"plot"},{keys:["lat","lon","location","text"]}),hovertext:u({},a.hovertext,{}),textfont:a.textfont,textposition:a.textposition,line:{color:h.color,width:h.width,dash:l},connectgaps:a.connectgaps,marker:u({symbol:f.symbol,opacity:f.opacity,angle:f.angle,angleref:u({},f.angleref,{values:["previous","up","north"]}),standoff:f.standoff,size:f.size,sizeref:f.sizeref,sizemin:f.sizemin,sizemode:f.sizemode,colorbar:f.colorbar,line:u({width:p.width},s("marker.line")),gradient:f.gradient},s("marker")),fill:{valType:"enumerated",values:["none","toself"],dflt:"none"},fillcolor:a.fillcolor,selected:a.selected,unselected:a.unselected,hoverinfo:u({},o.hoverinfo,{flags:["lon","lat","location","text","name"]}),hovertemplate:n()},"calc","nested")},84622:function(t,e,r){"use strict";var n=r(92770),i=r(50606).BADNUM,a=r(36922),o=r(75225),s=r(66279),l=r(71828)._;function u(t){return t&&"string"==typeof t}t.exports=function(t,e){var r,c=Array.isArray(e.locations),f=c?e.locations.length:e._length,h=new Array(f);r=e.geojson?function(t){return u(t)||n(t)}:u;for(var p=0;p<f;p++){var d=h[p]={};if(c){var v=e.locations[p];d.loc=r(v)?v:null}else{var g=e.lon[p],y=e.lat[p];n(g)&&n(y)?d.lonlat=[+g,+y]:d.lonlat=[i,i]}}return o(h,e),a(t,e),s(h,e),f&&(h[0].t={labels:{lat:l(t,"lat:")+" ",lon:l(t,"lon:")+" "}}),h}},10659:function(t,e,r){"use strict";var n=r(71828),i=r(34098),a=r(49508),o=r(11058),s=r(82410),l=r(28908),u=r(19316);t.exports=function(t,e,r,c){function f(r,i){return n.coerce(t,e,u,r,i)}var h,p=f("locations");if(p&&p.length){var d,v=f("geojson");("string"==typeof v&&""!==v||n.isPlainObject(v))&&(d="geojson-id"),"geojson-id"===f("locationmode",d)&&f("featureidkey"),h=p.length}else{var g=f("lon")||[],y=f("lat")||[];h=Math.min(g.length,y.length)}h?(e._length=h,f("text"),f("hovertext"),f("hovertemplate"),f("mode"),i.hasLines(e)&&(o(t,e,r,c,f),f("connectgaps")),i.hasMarkers(e)&&a(t,e,r,c,f,{gradient:!0}),i.hasText(e)&&(f("texttemplate"),s(t,e,c,f)),f("fill"),"none"!==e.fill&&l(t,e,r,f),n.coerceSelectionMarkerOpacity(e,f)):e.visible=!1}},84084:function(t){"use strict";t.exports=function(t,e,r,n,i){t.lon=e.lon,t.lat=e.lat,t.location=e.loc?e.loc:null;var a=n[i];return a.fIn&&a.fIn.properties&&(t.properties=a.fIn.properties),t}},82719:function(t,e,r){"use strict";var n=r(89298);t.exports=function(t,e,r){var i={},a=r[e.geo]._subplot.mockAxis,o=t.lonlat;return i.lonLabel=n.tickText(a,a.c2l(o[0]),!0).text,i.latLabel=n.tickText(a,a.c2l(o[1]),!0).text,i}},14977:function(t,e,r){"use strict";var n=r(30211),i=r(50606).BADNUM,a=r(34603),o=r(71828).fillText,s=r(19316);t.exports=function(t,e,r){var l=t.cd,u=l[0].trace,c=t.xa,f=t.ya,h=t.subplot,p=h.projection.isLonLatOverEdges,d=h.project;if(n.getClosest(l,(function(t){var n=t.lonlat;if(n[0]===i)return 1/0;if(p(n))return 1/0;var a=d(n),o=d([e,r]),s=Math.abs(a[0]-o[0]),l=Math.abs(a[1]-o[1]),u=Math.max(3,t.mrc||0);return Math.max(Math.sqrt(s*s+l*l)-u,1-3/u)}),t),!1!==t.index){var v=l[t.index],g=v.lonlat,y=[c.c2p(g),f.c2p(g)],m=v.mrc||1;t.x0=y[0]-m,t.x1=y[0]+m,t.y0=y[1]-m,t.y1=y[1]+m,t.loc=v.loc,t.lon=g[0],t.lat=g[1];var x={};x[u.geo]={_subplot:h};var b=u._module.formatLabels(v,u,x);return t.lonLabel=b.lonLabel,t.latLabel=b.latLabel,t.color=a(u,v),t.extraText=function(t,e,r,n){if(!t.hovertemplate){var i=e.hi||t.hoverinfo,a="all"===i?s.hoverinfo.flags:i.split("+"),l=-1!==a.indexOf("location")&&Array.isArray(t.locations),u=-1!==a.indexOf("lon"),c=-1!==a.indexOf("lat"),f=-1!==a.indexOf("text"),h=[];return l?h.push(e.loc):u&&c?h.push("("+p(r.latLabel)+", "+p(r.lonLabel)+")"):u?h.push(n.lon+p(r.lonLabel)):c&&h.push(n.lat+p(r.latLabel)),f&&o(e,t,h),h.join("<br>")}function p(t){return t+"°"}}(u,v,t,l[0].t.labels),t.hovertemplate=u.hovertemplate,[t]}}},17988:function(t,e,r){"use strict";t.exports={attributes:r(19316),supplyDefaults:r(10659),colorbar:r(4898),formatLabels:r(82719),calc:r(84622),calcGeoJSON:r(89171).calcGeoJSON,plot:r(89171).plot,style:r(33095),styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(14977),eventData:r(84084),selectPoints:r(20548),moduleType:"trace",name:"scattergeo",basePlotModule:r(44622),categories:["geo","symbols","showLegend","scatter-like"],meta:{}}},89171:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=r(90973).getTopojsonFeatures,o=r(18214),s=r(41327),l=r(71739).findExtremes,u=r(50606).BADNUM,c=r(47761).calcMarkerSize,f=r(34098),h=r(33095);t.exports={calcGeoJSON:function(t,e){var r,n,i=t[0].trace,o=e[i.geo],f=o._subplot,h=i._length;if(Array.isArray(i.locations)){var p=i.locationmode,d="geojson-id"===p?s.extractTraceFeature(t):a(i,f.topojson);for(r=0;r<h;r++){n=t[r];var v="geojson-id"===p?n.fOut:s.locationToFeature(p,n.loc,d);n.lonlat=v?v.properties.ct:[u,u]}}var g,y,m={padded:!0};if("geojson"===o.fitbounds&&"geojson-id"===i.locationmode){var x=s.computeBbox(s.getTraceGeojson(i));g=[x[0],x[2]],y=[x[1],x[3]]}else{for(g=new Array(h),y=new Array(h),r=0;r<h;r++)n=t[r],g[r]=n.lonlat[0],y[r]=n.lonlat[1];m.ppad=c(i,h)}i._extremes.lon=l(o.lonaxis._ax,g,m),i._extremes.lat=l(o.lataxis._ax,y,m)},plot:function(t,e,r){var a=e.layers.frontplot.select(".scatterlayer"),s=i.makeTraceGroups(a,r,"trace scattergeo");function l(t,e){t.lonlat[0]===u&&n.select(e).remove()}s.selectAll("*").remove(),s.each((function(e){var r=n.select(this),a=e[0].trace;if(f.hasLines(a)||"none"!==a.fill){var s=o.calcTraceToLineCoords(e),u="none"!==a.fill?o.makePolygon(s):o.makeLine(s);r.selectAll("path.js-line").data([{geojson:u,trace:a}]).enter().append("path").classed("js-line",!0).style("stroke-miterlimit",2)}f.hasMarkers(a)&&r.selectAll("path.point").data(i.identity).enter().append("path").classed("point",!0).each((function(t){l(t,this)})),f.hasText(a)&&r.selectAll("g").data(i.identity).enter().append("g").append("text").each((function(t){l(t,this)})),h(t,e)}))}}},20548:function(t,e,r){"use strict";var n=r(34098),i=r(50606).BADNUM;t.exports=function(t,e){var r,a,o,s,l,u=t.cd,c=t.xaxis,f=t.yaxis,h=[],p=u[0].trace;if(!n.hasMarkers(p)&&!n.hasText(p))return[];if(!1===e)for(l=0;l<u.length;l++)u[l].selected=0;else for(l=0;l<u.length;l++)(a=(r=u[l]).lonlat)[0]!==i&&(o=c.c2p(a),s=f.c2p(a),e.contains([o,s],null,l,t)?(h.push({pointNumber:l,lon:a[0],lat:a[1]}),r.selected=1):r.selected=0);return h}},33095:function(t,e,r){"use strict";var n=r(39898),i=r(91424),a=r(7901),o=r(16296),s=o.stylePoints,l=o.styleText;t.exports=function(t,e){e&&function(t,e){var r=e[0].trace,o=e[0].node3;o.style("opacity",e[0].trace.opacity),s(o,r,t),l(o,r,t),o.selectAll("path.js-line").style("fill","none").each((function(t){var e=n.select(this),r=t.trace,o=r.line||{};e.call(a.stroke,o.color).call(i.dashLine,o.dash||"",o.width||0),"none"!==r.fill&&e.call(a.fill,r.fillcolor)}))}(t,e)}},42341:function(t,e,r){"use strict";var n=r(9012),i=r(82196),a=r(12663).axisHoverFormat,o=r(50693),s=r(78607),l=r(1426).extendFlat,u=r(30962).overrideAll,c=r(78232).DASHES,f=i.line,h=i.marker,p=h.line,d=t.exports=u({x:i.x,x0:i.x0,dx:i.dx,y:i.y,y0:i.y0,dy:i.dy,xperiod:i.xperiod,yperiod:i.yperiod,xperiod0:i.xperiod0,yperiod0:i.yperiod0,xperiodalignment:i.xperiodalignment,yperiodalignment:i.yperiodalignment,xhoverformat:a("x"),yhoverformat:a("y"),text:i.text,hovertext:i.hovertext,textposition:i.textposition,textfont:i.textfont,mode:{valType:"flaglist",flags:["lines","markers","text"],extras:["none"]},line:{color:f.color,width:f.width,shape:{valType:"enumerated",values:["linear","hv","vh","hvh","vhv"],dflt:"linear",editType:"plot"},dash:{valType:"enumerated",values:s(c),dflt:"solid"}},marker:l({},o("marker"),{symbol:h.symbol,angle:h.angle,size:h.size,sizeref:h.sizeref,sizemin:h.sizemin,sizemode:h.sizemode,opacity:h.opacity,colorbar:h.colorbar,line:l({},o("marker.line"),{width:p.width})}),connectgaps:i.connectgaps,fill:l({},i.fill,{dflt:"none"}),fillcolor:i.fillcolor,selected:{marker:i.selected.marker,textfont:i.selected.textfont},unselected:{marker:i.unselected.marker,textfont:i.unselected.textfont},opacity:n.opacity},"calc","nested");d.x.editType=d.y.editType=d.x0.editType=d.y0.editType="calc+clearAxisTypes",d.hovertemplate=i.hovertemplate,d.texttemplate=i.texttemplate},72156:function(t,e,r){"use strict";var n=r(20794);t.exports={moduleType:"trace",name:"scattergl",basePlotModule:r(93612),categories:["gl","regl","cartesian","symbols","errorBarsOK","showLegend","scatter-like"],attributes:r(42341),supplyDefaults:r(47148),crossTraceDefaults:r(34936),colorbar:r(4898),formatLabels:r(68101),calc:r(45032),hoverPoints:n.hoverPoints,selectPoints:r(58147),meta:{}}},45032:function(t,e,r){"use strict";var n=r(88294),i=r(71828),a=r(41675),o=r(71739).findExtremes,s=r(42973),l=r(47761),u=l.calcMarkerSize,c=l.calcAxisExpansion,f=l.setFirstScatter,h=r(36922),p=r(19635),d=r(38967),v=r(50606).BADNUM,g=r(78232).TOO_MANY_POINTS;function y(t,e,r){var n=t._extremes[e._id],i=o(e,r._bnds,{padded:!0});n.min=n.min.concat(i.min),n.max=n.max.concat(i.max)}t.exports=function(t,e){var r,o=t._fullLayout,l=e._xA=a.getFromId(t,e.xaxis,"x"),m=e._yA=a.getFromId(t,e.yaxis,"y"),x=o._plots[e.xaxis+e.yaxis],b=e._length,_=b>=g,w=2*b,T={},k=l.makeCalcdata(e,"x"),A=m.makeCalcdata(e,"y"),M=s(e,l,"x",k),S=s(e,m,"y",A),E=M.vals,L=S.vals;e._x=E,e._y=L,e.xperiodalignment&&(e._origX=k,e._xStarts=M.starts,e._xEnds=M.ends),e.yperiodalignment&&(e._origY=A,e._yStarts=S.starts,e._yEnds=S.ends);var C=new Array(w),P=new Array(b);for(r=0;r<b;r++)C[2*r]=E[r]===v?NaN:E[r],C[2*r+1]=L[r]===v?NaN:L[r],P[r]=r;if("log"===l.type)for(r=0;r<w;r+=2)C[r]=l.c2l(C[r]);if("log"===m.type)for(r=1;r<w;r+=2)C[r]=m.c2l(C[r]);_&&"log"!==l.type&&"log"!==m.type?T.tree=n(C):T.ids=P,h(t,e);var O,I=function(t,e,r,n,a,o){var s=p.style(t,r);if(s.marker&&(s.marker.positions=n),s.line&&n.length>1&&i.extendFlat(s.line,p.linePositions(t,r,n)),s.errorX||s.errorY){var l=p.errorBarPositions(t,r,n,a,o);s.errorX&&i.extendFlat(s.errorX,l.x),s.errorY&&i.extendFlat(s.errorY,l.y)}return s.text&&(i.extendFlat(s.text,{positions:n},p.textPosition(t,r,s.text,s.marker)),i.extendFlat(s.textSel,{positions:n},p.textPosition(t,r,s.text,s.markerSel)),i.extendFlat(s.textUnsel,{positions:n},p.textPosition(t,r,s.text,s.markerUnsel))),s}(t,0,e,C,E,L),D=d(t,x);return f(o,e),_?I.marker&&(O=I.marker.sizeAvg||Math.max(I.marker.size,3)):O=u(e,b),c(t,e,l,m,E,L,O),I.errorX&&y(e,l,I.errorX),I.errorY&&y(e,m,I.errorY),I.fill&&!D.fill2d&&(D.fill2d=!0),I.marker&&!D.scatter2d&&(D.scatter2d=!0),I.line&&!D.line2d&&(D.line2d=!0),!I.errorX&&!I.errorY||D.error2d||(D.error2d=!0),I.text&&!D.glText&&(D.glText=!0),I.marker&&(I.marker.snap=b),D.lineOptions.push(I.line),D.errorXOptions.push(I.errorX),D.errorYOptions.push(I.errorY),D.fillOptions.push(I.fill),D.markerOptions.push(I.marker),D.markerSelectedOptions.push(I.markerSel),D.markerUnselectedOptions.push(I.markerUnsel),D.textOptions.push(I.text),D.textSelectedOptions.push(I.textSel),D.textUnselectedOptions.push(I.textUnsel),D.selectBatch.push([]),D.unselectBatch.push([]),T._scene=D,T.index=D.count,T.x=E,T.y=L,T.positions=C,D.count++,[{x:!1,y:!1,t:T,trace:e}]}},78232:function(t){"use strict";t.exports={TOO_MANY_POINTS:1e5,SYMBOL_SDF_SIZE:200,SYMBOL_SIZE:20,SYMBOL_STROKE:1,DOT_RE:/-dot/,OPEN_RE:/-open/,DASHES:{solid:[1],dot:[1,1],dash:[4,1],longdash:[8,1],dashdot:[4,1,1,1],longdashdot:[8,1,1,1]}}},19635:function(t,e,r){"use strict";var n=r(92770),i=r(82019),a=r(25075),o=r(73972),s=r(71828),l=r(91424),u=r(41675),c=r(81697).formatColor,f=r(34098),h=r(39984),p=r(68645),d=r(78232),v=r(37822).DESELECTDIM,g={start:1,left:1,end:-1,right:-1,middle:0,center:0,bottom:1,top:-1},y=r(23469).appendArrayPointValue;function m(t,e){var r,i=t._fullLayout,a=e._length,o=e.textfont,l=e.textposition,u=Array.isArray(l)?l:[l],c=o.color,f=o.size,h=o.family,p={},d=t._context.plotGlPixelRatio,v=e.texttemplate;if(v){p.text=[];var g=i._d3locale,m=Array.isArray(v),x=m?Math.min(v.length,a):a,b=m?function(t){return v[t]}:function(){return v};for(r=0;r<x;r++){var _={i:r},w=e._module.formatLabels(_,e,i),T={};y(T,e,r);var k=e._meta||{};p.text.push(s.texttemplateString(b(r),w,g,T,_,k))}}else Array.isArray(e.text)&&e.text.length<a?p.text=e.text.slice():p.text=e.text;if(Array.isArray(p.text))for(r=p.text.length;r<a;r++)p.text[r]="";for(p.opacity=e.opacity,p.font={},p.align=[],p.baseline=[],r=0;r<u.length;r++){var A=u[r].split(/\s+/);switch(A[1]){case"left":p.align.push("right");break;case"right":p.align.push("left");break;default:p.align.push(A[1])}switch(A[0]){case"top":p.baseline.push("bottom");break;case"bottom":p.baseline.push("top");break;default:p.baseline.push(A[0])}}if(Array.isArray(c))for(p.color=new Array(a),r=0;r<a;r++)p.color[r]=c[r];else p.color=c;if(s.isArrayOrTypedArray(f)||Array.isArray(h))for(p.font=new Array(a),r=0;r<a;r++){var M=p.font[r]={};M.size=(s.isTypedArray(f)?f[r]:Array.isArray(f)?n(f[r])?f[r]:0:f)*d,M.family=Array.isArray(h)?h[r]:h}else p.font={size:f*d,family:h};return p}function x(t,e){var r,n,i=e._length,o=e.marker,l={},u=s.isArrayOrTypedArray(o.symbol),f=s.isArrayOrTypedArray(o.angle),d=s.isArrayOrTypedArray(o.color),v=s.isArrayOrTypedArray(o.line.color),g=s.isArrayOrTypedArray(o.opacity),y=s.isArrayOrTypedArray(o.size),m=s.isArrayOrTypedArray(o.line.width);if(u||(n=p.isOpenSymbol(o.symbol)),u||d||v||g||f){l.symbols=new Array(i),l.angles=new Array(i),l.colors=new Array(i),l.borderColors=new Array(i);var x=o.symbol,b=o.angle,_=c(o,o.opacity,i),w=c(o.line,o.opacity,i);if(!Array.isArray(w[0])){var T=w;for(w=Array(i),r=0;r<i;r++)w[r]=T}if(!Array.isArray(_[0])){var k=_;for(_=Array(i),r=0;r<i;r++)_[r]=k}if(!Array.isArray(x)){var A=x;for(x=Array(i),r=0;r<i;r++)x[r]=A}if(!Array.isArray(b)){var M=b;for(b=Array(i),r=0;r<i;r++)b[r]=M}for(l.symbols=x,l.angles=b,l.colors=_,l.borderColors=w,r=0;r<i;r++)u&&(n=p.isOpenSymbol(o.symbol[r])),n&&(w[r]=_[r].slice(),_[r]=_[r].slice(),_[r][3]=0);for(l.opacity=e.opacity,l.markers=new Array(i),r=0;r<i;r++)l.markers[r]=E({mx:l.symbols[r],ma:l.angles[r]},e)}else n?(l.color=a(o.color,"uint8"),l.color[3]=0,l.borderColor=a(o.color,"uint8")):(l.color=a(o.color,"uint8"),l.borderColor=a(o.line.color,"uint8")),l.opacity=e.opacity*o.opacity,l.marker=E({mx:o.symbol,ma:o.angle},e);var S,L=h(e,1);if(y||m){var C,P=l.sizes=new Array(i),O=l.borderSizes=new Array(i),I=0;if(y){for(r=0;r<i;r++)P[r]=L(o.size[r]),I+=P[r];C=I/i}else for(S=L(o.size),r=0;r<i;r++)P[r]=S;if(m)for(r=0;r<i;r++)O[r]=o.line.width[r];else for(S=o.line.width,r=0;r<i;r++)O[r]=S;l.sizeAvg=C}else l.size=L(o&&o.size||10),l.borderSizes=L(o.line.width);return l}function b(t,e,r){var n=e.marker,i={};return r?(r.marker&&r.marker.symbol?i=x(0,s.extendFlat({},n,r.marker)):r.marker&&(r.marker.size&&(i.size=r.marker.size),r.marker.color&&(i.colors=r.marker.color),void 0!==r.marker.opacity&&(i.opacity=r.marker.opacity)),i):i}function _(t,e,r){var n={};if(!r)return n;if(r.textfont){var i={opacity:1,text:e.text,texttemplate:e.texttemplate,textposition:e.textposition,textfont:s.extendFlat({},e.textfont)};r.textfont&&s.extendFlat(i.textfont,r.textfont),n=m(t,i)}return n}function w(t,e,r){var n={capSize:2*e.width*r,lineWidth:e.thickness*r,color:e.color};return e.copy_ystyle&&(n=t.error_y),n}var T=d.SYMBOL_SDF_SIZE,k=d.SYMBOL_SIZE,A=d.SYMBOL_STROKE,M={},S=l.symbolFuncs[0](.05*k);function E(t,e){var r,n,a=t.mx;if("circle"===a)return null;var o=l.symbolNumber(a),s=l.symbolFuncs[o%100],u=!!l.symbolNoDot[o%100],c=!!l.symbolNoFill[o%100],f=p.isDotSymbol(a);if(t.ma&&(a+="_"+t.ma),M[a])return M[a];var h=l.getMarkerAngle(t,e);return r=f&&!u?s(1.1*k,h)+S:s(k,h),n=i(r,{w:T,h:T,viewBox:[-k,-k,k,k],stroke:c?A:-A}),M[a]=n,n||null}t.exports={style:function(t,e){var r,n={marker:void 0,markerSel:void 0,markerUnsel:void 0,line:void 0,fill:void 0,errorX:void 0,errorY:void 0,text:void 0,textSel:void 0,textUnsel:void 0},i=t._context.plotGlPixelRatio;if(!0!==e.visible)return n;if(f.hasText(e)&&(n.text=m(t,e),n.textSel=_(t,e,e.selected),n.textUnsel=_(t,e,e.unselected)),f.hasMarkers(e)&&(n.marker=x(0,e),n.markerSel=b(0,e,e.selected),n.markerUnsel=b(0,e,e.unselected),!e.unselected&&s.isArrayOrTypedArray(e.marker.opacity))){var a=e.marker.opacity;for(n.markerUnsel.opacity=new Array(a.length),r=0;r<a.length;r++)n.markerUnsel.opacity[r]=v*a[r]}if(f.hasLines(e)){n.line={overlay:!0,thickness:e.line.width*i,color:e.line.color,opacity:e.opacity};var o=(d.DASHES[e.line.dash]||[1]).slice();for(r=0;r<o.length;++r)o[r]*=e.line.width*i;n.line.dashes=o}return e.error_x&&e.error_x.visible&&(n.errorX=w(e,e.error_x,i)),e.error_y&&e.error_y.visible&&(n.errorY=w(e,e.error_y,i)),e.fill&&"none"!==e.fill&&(n.fill={closed:!0,fill:e.fillcolor,thickness:0}),n},markerStyle:x,markerSelection:b,linePositions:function(t,e,r){var n,i,a=r.length,o=a/2;if(f.hasLines(e)&&o)if("hv"===e.line.shape){for(n=[],i=0;i<o-1;i++)isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN,NaN,NaN):(n.push(r[2*i],r[2*i+1]),isNaN(r[2*i+2])||isNaN(r[2*i+3])?n.push(NaN,NaN):n.push(r[2*i+2],r[2*i+1]));n.push(r[a-2],r[a-1])}else if("hvh"===e.line.shape){for(n=[],i=0;i<o-1;i++)if(isNaN(r[2*i])||isNaN(r[2*i+1])||isNaN(r[2*i+2])||isNaN(r[2*i+3]))isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN):n.push(r[2*i],r[2*i+1]),n.push(NaN,NaN);else{var s=(r[2*i]+r[2*i+2])/2;n.push(r[2*i],r[2*i+1],s,r[2*i+1],s,r[2*i+3])}n.push(r[a-2],r[a-1])}else if("vhv"===e.line.shape){for(n=[],i=0;i<o-1;i++)if(isNaN(r[2*i])||isNaN(r[2*i+1])||isNaN(r[2*i+2])||isNaN(r[2*i+3]))isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN):n.push(r[2*i],r[2*i+1]),n.push(NaN,NaN);else{var l=(r[2*i+1]+r[2*i+3])/2;n.push(r[2*i],r[2*i+1],r[2*i],l,r[2*i+2],l)}n.push(r[a-2],r[a-1])}else if("vh"===e.line.shape){for(n=[],i=0;i<o-1;i++)isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN,NaN,NaN):(n.push(r[2*i],r[2*i+1]),isNaN(r[2*i+2])||isNaN(r[2*i+3])?n.push(NaN,NaN):n.push(r[2*i],r[2*i+3]));n.push(r[a-2],r[a-1])}else n=r;var u=!1;for(i=0;i<n.length;i++)if(isNaN(n[i])){u=!0;break}var c=u||n.length>d.TOO_MANY_POINTS||f.hasMarkers(e)?"rect":"round";if(u&&e.connectgaps){var h=n[0],p=n[1];for(i=0;i<n.length;i+=2)isNaN(n[i])||isNaN(n[i+1])?(n[i]=h,n[i+1]=p):(h=n[i],p=n[i+1])}return{join:c,positions:n}},errorBarPositions:function(t,e,r,i,a){var s=o.getComponentMethod("errorbars","makeComputeError"),l=u.getFromId(t,e.xaxis,"x"),c=u.getFromId(t,e.yaxis,"y"),f=r.length/2,h={};function p(t,i){var a=i._id.charAt(0),o=e["error_"+a];if(o&&o.visible&&("linear"===i.type||"log"===i.type)){for(var l=s(o),u={x:0,y:1}[a],c={x:[0,1,2,3],y:[2,3,0,1]}[a],p=new Float64Array(4*f),d=1/0,v=-1/0,g=0,y=0;g<f;g++,y+=4){var m=t[g];if(n(m)){var x=r[2*g+u],b=l(m,g),_=b[0],w=b[1];if(n(_)&&n(w)){var T=m-_,k=m+w;p[y+c[0]]=x-i.c2l(T),p[y+c[1]]=i.c2l(k)-x,p[y+c[2]]=0,p[y+c[3]]=0,d=Math.min(d,m-_),v=Math.max(v,m+w)}}}h[a]={positions:r,errors:p,_bnds:[d,v]}}}return p(i,l),p(a,c),h},textPosition:function(t,e,r,n){var i,a=e._length,o={};if(f.hasMarkers(e)){var s=r.font,l=r.align,u=r.baseline;for(o.offset=new Array(a),i=0;i<a;i++){var c=n.sizes?n.sizes[i]:n.size,h=Array.isArray(s)?s[i].size:s.size,p=Array.isArray(l)?l.length>1?l[i]:l[0]:l,d=Array.isArray(u)?u.length>1?u[i]:u[0]:u,v=g[p],y=g[d],m=c?c/.8+1:0,x=-y*m-.5*y;o.offset[i]=[v*m/h,x/h]}}return o}}},47148:function(t,e,r){"use strict";var n=r(71828),i=r(73972),a=r(68645),o=r(42341),s=r(47581),l=r(34098),u=r(67513),c=r(73927),f=r(49508),h=r(11058),p=r(28908),d=r(82410);t.exports=function(t,e,r,v){function g(r,i){return n.coerce(t,e,o,r,i)}var y=!!t.marker&&a.isOpenSymbol(t.marker.symbol),m=l.isBubble(t),x=u(t,e,v,g);if(x){c(t,e,v,g),g("xhoverformat"),g("yhoverformat");var b=x<s.PTS_LINESONLY?"lines+markers":"lines";g("text"),g("hovertext"),g("hovertemplate"),g("mode",b),l.hasLines(e)&&(g("connectgaps"),h(t,e,r,v,g),g("line.shape")),l.hasMarkers(e)&&(f(t,e,r,v,g,{noAngleRef:!0,noStandOff:!0}),g("marker.line.width",y||m?1:0)),l.hasText(e)&&(g("texttemplate"),d(t,e,v,g));var _=(e.line||{}).color,w=(e.marker||{}).color;g("fill"),"none"!==e.fill&&p(t,e,r,g);var T=i.getComponentMethod("errorbars","supplyDefaults");T(t,e,_||w||r,{axis:"y"}),T(t,e,_||w||r,{axis:"x",inherit:"y"}),n.coerceSelectionMarkerOpacity(e,g)}else e.visible=!1}},5345:function(t,e,r){"use strict";var n=r(71828),i=r(7901),a=r(37822).DESELECTDIM;t.exports={styleTextSelection:function(t){var e,r,o=t[0],s=o.trace,l=o.t,u=l._scene,c=l.index,f=u.selectBatch[c],h=u.unselectBatch[c],p=u.textOptions[c],d=u.textSelectedOptions[c]||{},v=u.textUnselectedOptions[c]||{},g=n.extendFlat({},p);if(f.length||h.length){var y=d.color,m=v.color,x=p.color,b=Array.isArray(x);for(g.color=new Array(s._length),e=0;e<f.length;e++)r=f[e],g.color[r]=y||(b?x[r]:x);for(e=0;e<h.length;e++){r=h[e];var _=b?x[r]:x;g.color[r]=m||(y?_:i.addOpacity(_,a))}}u.glText[c].update(g)}}},68101:function(t,e,r){"use strict";var n=r(8225);t.exports=function(t,e,r){var i=t.i;return"x"in t||(t.x=e._x[i]),"y"in t||(t.y=e._y[i]),n(t,e,r)}},68645:function(t,e,r){"use strict";var n=r(78232);e.isOpenSymbol=function(t){return"string"==typeof t?n.OPEN_RE.test(t):t%200>100},e.isDotSymbol=function(t){return"string"==typeof t?n.DOT_RE.test(t):t>200}},20794:function(t,e,r){"use strict";var n=r(73972),i=r(71828),a=r(34603);function o(t,e,r,o){var s=t.xa,l=t.ya,u=t.distance,c=t.dxy,f=t.index,h={pointNumber:f,x:e[f],y:r[f]};h.tx=Array.isArray(o.text)?o.text[f]:o.text,h.htx=Array.isArray(o.hovertext)?o.hovertext[f]:o.hovertext,h.data=Array.isArray(o.customdata)?o.customdata[f]:o.customdata,h.tp=Array.isArray(o.textposition)?o.textposition[f]:o.textposition;var p=o.textfont;p&&(h.ts=i.isArrayOrTypedArray(p.size)?p.size[f]:p.size,h.tc=Array.isArray(p.color)?p.color[f]:p.color,h.tf=Array.isArray(p.family)?p.family[f]:p.family);var d=o.marker;d&&(h.ms=i.isArrayOrTypedArray(d.size)?d.size[f]:d.size,h.mo=i.isArrayOrTypedArray(d.opacity)?d.opacity[f]:d.opacity,h.mx=i.isArrayOrTypedArray(d.symbol)?d.symbol[f]:d.symbol,h.ma=i.isArrayOrTypedArray(d.angle)?d.angle[f]:d.angle,h.mc=i.isArrayOrTypedArray(d.color)?d.color[f]:d.color);var v=d&&d.line;v&&(h.mlc=Array.isArray(v.color)?v.color[f]:v.color,h.mlw=i.isArrayOrTypedArray(v.width)?v.width[f]:v.width);var g=d&&d.gradient;g&&"none"!==g.type&&(h.mgt=Array.isArray(g.type)?g.type[f]:g.type,h.mgc=Array.isArray(g.color)?g.color[f]:g.color);var y=s.c2p(h.x,!0),m=l.c2p(h.y,!0),x=h.mrc||1,b=o.hoverlabel;b&&(h.hbg=Array.isArray(b.bgcolor)?b.bgcolor[f]:b.bgcolor,h.hbc=Array.isArray(b.bordercolor)?b.bordercolor[f]:b.bordercolor,h.hts=i.isArrayOrTypedArray(b.font.size)?b.font.size[f]:b.font.size,h.htc=Array.isArray(b.font.color)?b.font.color[f]:b.font.color,h.htf=Array.isArray(b.font.family)?b.font.family[f]:b.font.family,h.hnl=i.isArrayOrTypedArray(b.namelength)?b.namelength[f]:b.namelength);var _=o.hoverinfo;_&&(h.hi=Array.isArray(_)?_[f]:_);var w=o.hovertemplate;w&&(h.ht=Array.isArray(w)?w[f]:w);var T={};T[t.index]=h;var k=o._origX,A=o._origY,M=i.extendFlat({},t,{color:a(o,h),x0:y-x,x1:y+x,xLabelVal:k?k[f]:h.x,y0:m-x,y1:m+x,yLabelVal:A?A[f]:h.y,cd:T,distance:u,spikeDistance:c,hovertemplate:h.ht});return h.htx?M.text=h.htx:h.tx?M.text=h.tx:o.text&&(M.text=o.text),i.fillText(h,o,M),n.getComponentMethod("errorbars","hoverInfo")(h,o,M),M}t.exports={hoverPoints:function(t,e,r,n){var i,a,s,l,u,c,f,h,p,d,v=t.cd,g=v[0].t,y=v[0].trace,m=t.xa,x=t.ya,b=g.x,_=g.y,w=m.c2p(e),T=x.c2p(r),k=t.distance;if(g.tree){var A=m.p2c(w-k),M=m.p2c(w+k),S=x.p2c(T-k),E=x.p2c(T+k);i="x"===n?g.tree.range(Math.min(A,M),Math.min(x._rl[0],x._rl[1]),Math.max(A,M),Math.max(x._rl[0],x._rl[1])):g.tree.range(Math.min(A,M),Math.min(S,E),Math.max(A,M),Math.max(S,E))}else i=g.ids;var L=k;if("x"===n){var C=!!y.xperiodalignment,P=!!y.yperiodalignment;for(c=0;c<i.length;c++){if(l=b[a=i[c]],f=Math.abs(m.c2p(l)-w),C){var O=m.c2p(y._xStarts[a]),I=m.c2p(y._xEnds[a]);f=w>=Math.min(O,I)&&w<=Math.max(O,I)?0:1/0}if(f<L){if(L=f,u=_[a],h=x.c2p(u)-T,P){var D=x.c2p(y._yStarts[a]),z=x.c2p(y._yEnds[a]);h=T>=Math.min(D,z)&&T<=Math.max(D,z)?0:1/0}d=Math.sqrt(f*f+h*h),s=i[c]}}}else for(c=i.length-1;c>-1;c--)l=b[a=i[c]],u=_[a],f=m.c2p(l)-w,h=x.c2p(u)-T,(p=Math.sqrt(f*f+h*h))<L&&(L=d=p,s=a);return t.index=s,t.distance=L,t.dxy=d,void 0===s?[t]:[o(t,b,_,y)]},calcHover:o}},68868:function(t,e,r){"use strict";var n=r(72156);n.plot=r(26787),t.exports=n},26787:function(t,e,r){"use strict";var n=r(11870),i=r(46075),a=r(3593),o=r(42505),s=r(71828),l=r(64505).selectMode,u=r(79749),c=r(34098),f=r(68687),h=r(5345).styleTextSelection,p={};function d(t,e,r,n){var i=t._size,a=t.width*n,o=t.height*n,s=i.l*n,l=i.b*n,u=i.r*n,c=i.t*n,f=i.w*n,h=i.h*n;return[s+e.domain[0]*f,l+r.domain[0]*h,a-u-(1-e.domain[1])*f,o-c-(1-r.domain[1])*h]}(t.exports=function(t,e,r){if(r.length){var v,g,y=t._fullLayout,m=e._scene,x=e.xaxis,b=e.yaxis;if(m)if(u(t,["ANGLE_instanced_arrays","OES_element_index_uint"],p)){var _=m.count,w=y._glcanvas.data()[0].regl;if(f(t,e,r),m.dirty){if(!0===m.error2d&&(m.error2d=a(w)),!0===m.line2d&&(m.line2d=i(w)),!0===m.scatter2d&&(m.scatter2d=n(w)),!0===m.fill2d&&(m.fill2d=i(w)),!0===m.glText)for(m.glText=new Array(_),v=0;v<_;v++)m.glText[v]=new o(w);if(m.glText){if(_>m.glText.length){var T=_-m.glText.length;for(v=0;v<T;v++)m.glText.push(new o(w))}else if(_<m.glText.length){var k=m.glText.length-_;m.glText.splice(_,k).forEach((function(t){t.destroy()}))}for(v=0;v<_;v++)m.glText[v].update(m.textOptions[v])}if(m.line2d&&(m.line2d.update(m.lineOptions),m.lineOptions=m.lineOptions.map((function(t){if(t&&t.positions){for(var e=t.positions,r=0;r<e.length&&(isNaN(e[r])||isNaN(e[r+1]));)r+=2;for(var n=e.length-2;n>r&&(isNaN(e[n])||isNaN(e[n+1]));)n-=2;t.positions=e.slice(r,n+2)}return t})),m.line2d.update(m.lineOptions)),m.error2d){var A=(m.errorXOptions||[]).concat(m.errorYOptions||[]);m.error2d.update(A)}m.scatter2d&&m.scatter2d.update(m.markerOptions),m.fillOrder=s.repeat(null,_),m.fill2d&&(m.fillOptions=m.fillOptions.map((function(t,e){var n=r[e];if(t&&n&&n[0]&&n[0].trace){var i,a,o=n[0],s=o.trace,l=o.t,u=m.lineOptions[e],c=[];s._ownfill&&c.push(e),s._nexttrace&&c.push(e+1),c.length&&(m.fillOrder[e]=c);var f,h,p=[],d=u&&u.positions||l.positions;if("tozeroy"===s.fill){for(f=0;f<d.length&&isNaN(d[f+1]);)f+=2;for(h=d.length-2;h>f&&isNaN(d[h+1]);)h-=2;0!==d[f+1]&&(p=[d[f],0]),p=p.concat(d.slice(f,h+2)),0!==d[h+1]&&(p=p.concat([d[h],0]))}else if("tozerox"===s.fill){for(f=0;f<d.length&&isNaN(d[f]);)f+=2;for(h=d.length-2;h>f&&isNaN(d[h]);)h-=2;0!==d[f]&&(p=[0,d[f+1]]),p=p.concat(d.slice(f,h+2)),0!==d[h]&&(p=p.concat([0,d[h+1]]))}else if("toself"===s.fill||"tonext"===s.fill){for(p=[],i=0,t.splitNull=!0,a=0;a<d.length;a+=2)(isNaN(d[a])||isNaN(d[a+1]))&&((p=p.concat(d.slice(i,a))).push(d[i],d[i+1]),p.push(null,null),i=a+2);p=p.concat(d.slice(i)),i&&p.push(d[i],d[i+1])}else{var v=s._nexttrace;if(v){var g=m.lineOptions[e+1];if(g){var y=g.positions;if("tonexty"===s.fill){for(p=d.slice(),e=Math.floor(y.length/2);e--;){var x=y[2*e],b=y[2*e+1];isNaN(x)||isNaN(b)||p.push(x,b)}t.fill=v.fillcolor}}}}if(s._prevtrace&&"tonext"===s._prevtrace.fill){var _=m.lineOptions[e-1].positions,w=p.length/2,T=[i=w];for(a=0;a<_.length;a+=2)(isNaN(_[a])||isNaN(_[a+1]))&&(T.push(a/2+w+1),i=a+2);p=p.concat(_),t.hole=T}return t.fillmode=s.fill,t.opacity=s.opacity,t.positions=p,t}})),m.fill2d.update(m.fillOptions))}var M=y.dragmode,S=l(M),E=y.clickmode.indexOf("select")>-1;for(v=0;v<_;v++){var L=r[v][0],C=L.trace,P=L.t,O=P.index,I=C._length,D=P.x,z=P.y;if(C.selectedpoints||S||E){if(S||(S=!0),C.selectedpoints){var R=m.selectBatch[O]=s.selIndices2selPoints(C),F={};for(g=0;g<R.length;g++)F[R[g]]=1;var B=[];for(g=0;g<I;g++)F[g]||B.push(g);m.unselectBatch[O]=B}var N=P.xpx=new Array(I),j=P.ypx=new Array(I);for(g=0;g<I;g++)N[g]=x.c2p(D[g]),j[g]=b.c2p(z[g])}else P.xpx=P.ypx=null}if(S){if(m.select2d||(m.select2d=n(y._glcanvas.data()[1].regl)),m.scatter2d){var U=new Array(_);for(v=0;v<_;v++)U[v]=m.selectBatch[v].length||m.unselectBatch[v].length?m.markerUnselectedOptions[v]:{};m.scatter2d.update(U)}m.select2d&&(m.select2d.update(m.markerOptions),m.select2d.update(m.markerSelectedOptions)),m.glText&&r.forEach((function(t){var e=((t||[])[0]||{}).trace||{};c.hasText(e)&&h(t)}))}else m.scatter2d&&m.scatter2d.update(m.markerOptions);var V={viewport:d(y,x,b,t._context.plotGlPixelRatio),range:[(x._rl||x.range)[0],(b._rl||b.range)[0],(x._rl||x.range)[1],(b._rl||b.range)[1]]},H=s.repeat(V,m.count);m.fill2d&&m.fill2d.update(H),m.line2d&&m.line2d.update(H),m.error2d&&m.error2d.update(H.concat(H)),m.scatter2d&&m.scatter2d.update(H),m.select2d&&m.select2d.update(H),m.glText&&m.glText.forEach((function(t){t.update(V)}))}else m.init()}}).reglPrecompiled=p},38967:function(t,e,r){"use strict";var n=r(71828);t.exports=function(t,e){var r=e._scene,i={count:0,dirty:!0,lineOptions:[],fillOptions:[],markerOptions:[],markerSelectedOptions:[],markerUnselectedOptions:[],errorXOptions:[],errorYOptions:[],textOptions:[],textSelectedOptions:[],textUnselectedOptions:[],selectBatch:[],unselectBatch:[]},a={fill2d:!1,scatter2d:!1,error2d:!1,line2d:!1,glText:!1,select2d:!1};return e._scene||((r=e._scene={}).init=function(){n.extendFlat(r,a,i)},r.init(),r.update=function(t){var e=n.repeat(t,r.count);if(r.fill2d&&r.fill2d.update(e),r.scatter2d&&r.scatter2d.update(e),r.line2d&&r.line2d.update(e),r.error2d&&r.error2d.update(e.concat(e)),r.select2d&&r.select2d.update(e),r.glText)for(var i=0;i<r.count;i++)r.glText[i].update(t)},r.draw=function(){for(var t=r.count,e=r.fill2d,i=r.error2d,a=r.line2d,o=r.scatter2d,s=r.glText,l=r.select2d,u=r.selectBatch,c=r.unselectBatch,f=0;f<t;f++){if(e&&r.fillOrder[f]&&e.draw(r.fillOrder[f]),a&&r.lineOptions[f]&&a.draw(f),i&&(r.errorXOptions[f]&&i.draw(f),r.errorYOptions[f]&&i.draw(f+t)),o&&r.markerOptions[f])if(c[f].length){var h=n.repeat([],r.count);h[f]=c[f],o.draw(h)}else u[f].length||o.draw(f);s[f]&&r.textOptions[f]&&s[f].render()}l&&l.draw(u),r.dirty=!1},r.destroy=function(){r.fill2d&&r.fill2d.destroy&&r.fill2d.destroy(),r.scatter2d&&r.scatter2d.destroy&&r.scatter2d.destroy(),r.error2d&&r.error2d.destroy&&r.error2d.destroy(),r.line2d&&r.line2d.destroy&&r.line2d.destroy(),r.select2d&&r.select2d.destroy&&r.select2d.destroy(),r.glText&&r.glText.forEach((function(t){t.destroy&&t.destroy()})),r.lineOptions=null,r.fillOptions=null,r.markerOptions=null,r.markerSelectedOptions=null,r.markerUnselectedOptions=null,r.errorXOptions=null,r.errorYOptions=null,r.textOptions=null,r.textSelectedOptions=null,r.textUnselectedOptions=null,r.selectBatch=null,r.unselectBatch=null,e._scene=null}),r.dirty||n.extendFlat(r,i),r}},58147:function(t,e,r){"use strict";var n=r(34098),i=r(5345).styleTextSelection;t.exports=function(t,e){var r=t.cd,a=t.xaxis,o=t.yaxis,s=[],l=r[0].trace,u=r[0].t,c=l._length,f=u.x,h=u.y,p=u._scene,d=u.index;if(!p)return s;var v=n.hasText(l),g=n.hasMarkers(l),y=!g&&!v;if(!0!==l.visible||y)return s;var m=[],x=[];if(!1!==e&&!e.degenerate)for(var b=0;b<c;b++)e.contains([u.xpx[b],u.ypx[b]],!1,b,t)?(m.push(b),s.push({pointNumber:b,x:a.c2d(f[b]),y:o.c2d(h[b])})):x.push(b);if(g){var _=p.scatter2d;if(m.length||x.length){if(!p.selectBatch[d].length&&!p.unselectBatch[d].length){var w=new Array(p.count);w[d]=p.markerUnselectedOptions[d],_.update.apply(_,w)}}else{var T=new Array(p.count);T[d]=p.markerOptions[d],_.update.apply(_,T)}}return p.selectBatch[d]=m,p.unselectBatch[d]=x,v&&i(r),s}},99181:function(t,e,r){"use strict";var n=r(5386).fF,i=r(5386).si,a=r(19316),o=r(82196),s=r(23585),l=r(9012),u=r(50693),c=r(1426).extendFlat,f=r(30962).overrideAll,h=r(23585),p=a.line,d=a.marker;t.exports=f({lon:a.lon,lat:a.lat,cluster:{enabled:{valType:"boolean"},maxzoom:c({},h.layers.maxzoom,{}),step:{valType:"number",arrayOk:!0,dflt:-1,min:-1},size:{valType:"number",arrayOk:!0,dflt:20,min:0},color:{valType:"color",arrayOk:!0},opacity:c({},d.opacity,{dflt:1})},mode:c({},o.mode,{dflt:"markers"}),text:c({},o.text,{}),texttemplate:i({editType:"plot"},{keys:["lat","lon","text"]}),hovertext:c({},o.hovertext,{}),line:{color:p.color,width:p.width},connectgaps:o.connectgaps,marker:c({symbol:{valType:"string",dflt:"circle",arrayOk:!0},angle:{valType:"number",dflt:"auto",arrayOk:!0},allowoverlap:{valType:"boolean",dflt:!1},opacity:d.opacity,size:d.size,sizeref:d.sizeref,sizemin:d.sizemin,sizemode:d.sizemode},u("marker")),fill:a.fill,fillcolor:o.fillcolor,textfont:s.layers.symbol.textfont,textposition:s.layers.symbol.textposition,below:{valType:"string"},selected:{marker:o.selected.marker},unselected:{marker:o.unselected.marker},hoverinfo:c({},l.hoverinfo,{flags:["lon","lat","text","name"]}),hovertemplate:n()},"calc","nested")},15790:function(t,e,r){"use strict";var n=r(92770),i=r(71828),a=r(50606).BADNUM,o=r(18214),s=r(21081),l=r(91424),u=r(39984),c=r(34098),f=r(13056),h=r(23469).appendArrayPointValue,p=r(63893).NEWLINES,d=r(63893).BR_TAG_ALL;function v(t){return{type:t,geojson:o.makeBlank(),layout:{visibility:"none"},filter:null,paint:{}}}function g(t,e){return i.isArrayOrTypedArray(t)?e?function(e){return n(t[e])?+t[e]:0}:function(e){return t[e]}:t?function(){return t}:y}function y(){return""}function m(t){return t[0]===a}function x(t,e){var r;if(i.isArrayOrTypedArray(t)&&i.isArrayOrTypedArray(e)){r=["step",["get","point_count"],t[0]];for(var n=1;n<t.length;n++)r.push(e[n-1],t[n])}else r=t;return r}t.exports=function(t,e){var r,a=e[0].trace,b=!0===a.visible&&0!==a._length,_="none"!==a.fill,w=c.hasLines(a),T=c.hasMarkers(a),k=c.hasText(a),A=T&&"circle"===a.marker.symbol,M=T&&"circle"!==a.marker.symbol,S=a.cluster&&a.cluster.enabled,E=v("fill"),L=v("line"),C=v("circle"),P=v("symbol"),O={fill:E,line:L,circle:C,symbol:P};if(!b)return O;if((_||w)&&(r=o.calcTraceToLineCoords(e)),_&&(E.geojson=o.makePolygon(r),E.layout.visibility="visible",i.extendFlat(E.paint,{"fill-color":a.fillcolor})),w&&(L.geojson=o.makeLine(r),L.layout.visibility="visible",i.extendFlat(L.paint,{"line-width":a.line.width,"line-color":a.line.color,"line-opacity":a.opacity})),A){var I=function(t){var e,r,a,o,c=t[0].trace,f=c.marker,h=c.selectedpoints,p=i.isArrayOrTypedArray(f.color),d=i.isArrayOrTypedArray(f.size),v=i.isArrayOrTypedArray(f.opacity);function g(t){return c.opacity*t}p&&(r=s.hasColorscale(c,"marker")?s.makeColorScaleFuncFromTrace(f):i.identity),d&&(a=u(c)),v&&(o=function(t){return g(n(t)?+i.constrain(t,0,1):0)});var y,x,b=[];for(e=0;e<t.length;e++){var _=t[e],w=_.lonlat;if(!m(w)){var T={};r&&(T.mcc=_.mcc=r(_.mc)),a&&(T.mrc=_.mrc=a(_.ms)),o&&(T.mo=o(_.mo)),h&&(T.selected=_.selected||0),b.push({type:"Feature",id:e+1,geometry:{type:"Point",coordinates:w},properties:T})}}if(h)for(y=l.makeSelectedPointStyleFns(c),e=0;e<b.length;e++){var k=b[e].properties;y.selectedOpacityFn&&(k.mo=g(y.selectedOpacityFn(k))),y.selectedColorFn&&(k.mcc=y.selectedColorFn(k)),y.selectedSizeFn&&(k.mrc=y.selectedSizeFn(k))}return{geojson:{type:"FeatureCollection",features:b},mcc:p||y&&y.selectedColorFn?{type:"identity",property:"mcc"}:f.color,mrc:d||y&&y.selectedSizeFn?{type:"identity",property:"mrc"}:(x=f.size,x/2),mo:v||y&&y.selectedOpacityFn?{type:"identity",property:"mo"}:g(f.opacity)}}(e);C.geojson=I.geojson,C.layout.visibility="visible",S&&(C.filter=["!",["has","point_count"]],O.cluster={type:"circle",filter:["has","point_count"],layout:{visibility:"visible"},paint:{"circle-color":x(a.cluster.color,a.cluster.step),"circle-radius":x(a.cluster.size,a.cluster.step),"circle-opacity":x(a.cluster.opacity,a.cluster.step)}},O.clusterCount={type:"symbol",filter:["has","point_count"],paint:{},layout:{"text-field":"{point_count_abbreviated}","text-font":["Open Sans Regular","Arial Unicode MS Regular"],"text-size":12}}),i.extendFlat(C.paint,{"circle-color":I.mcc,"circle-radius":I.mrc,"circle-opacity":I.mo})}if(A&&S&&(C.filter=["!",["has","point_count"]]),(M||k)&&(P.geojson=function(t,e){for(var r=e._fullLayout,n=t[0].trace,a=n.marker||{},o=a.symbol,s=a.angle,l="circle"!==o?g(o):y,u="auto"!==s?g(s,!0):y,f=c.hasText(n)?g(n.text):y,v=[],x=0;x<t.length;x++){var b=t[x];if(!m(b.lonlat)){var _,w=n.texttemplate;if(w){var T=Array.isArray(w)?w[x]||"":w,k=n._module.formatLabels(b,n,r),A={};h(A,n,b.i);var M=n._meta||{};_=i.texttemplateString(T,k,r._d3locale,A,b,M)}else _=f(x);_&&(_=_.replace(p,"").replace(d,"\n")),v.push({type:"Feature",geometry:{type:"Point",coordinates:b.lonlat},properties:{symbol:l(x),angle:u(x),text:_}})}}return{type:"FeatureCollection",features:v}}(e,t),i.extendFlat(P.layout,{visibility:"visible","icon-image":"{symbol}-15","text-field":"{text}"}),M&&(i.extendFlat(P.layout,{"icon-size":a.marker.size/10}),"angle"in a.marker&&"auto"!==a.marker.angle&&i.extendFlat(P.layout,{"icon-rotate":{type:"identity",property:"angle"},"icon-rotation-alignment":"map"}),P.layout["icon-allow-overlap"]=a.marker.allowoverlap,i.extendFlat(P.paint,{"icon-opacity":a.opacity*a.marker.opacity,"icon-color":a.marker.color})),k)){var D=(a.marker||{}).size,z=f(a.textposition,D);i.extendFlat(P.layout,{"text-size":a.textfont.size,"text-anchor":z.anchor,"text-offset":z.offset,"text-font":a.textfont.family.split(", ")}),i.extendFlat(P.paint,{"text-color":a.textfont.color,"text-opacity":a.opacity})}return O}},76645:function(t,e,r){"use strict";var n=r(71828),i=r(34098),a=r(49508),o=r(11058),s=r(82410),l=r(28908),u=r(99181),c=["Metropolis Black Italic","Metropolis Black","Metropolis Bold Italic","Metropolis Bold","Metropolis Extra Bold Italic","Metropolis Extra Bold","Metropolis Extra Light Italic","Metropolis Extra Light","Metropolis Light Italic","Metropolis Light","Metropolis Medium Italic","Metropolis Medium","Metropolis Regular Italic","Metropolis Regular","Metropolis Semi Bold Italic","Metropolis Semi Bold","Metropolis Thin Italic","Metropolis Thin","Open Sans Bold Italic","Open Sans Bold","Open Sans Extra Bold Italic","Open Sans Extra Bold","Open Sans Italic","Open Sans Light Italic","Open Sans Light","Open Sans Regular","Open Sans Semibold Italic","Open Sans Semibold","Klokantech Noto Sans Bold","Klokantech Noto Sans CJK Bold","Klokantech Noto Sans CJK Regular","Klokantech Noto Sans Italic","Klokantech Noto Sans Regular"];t.exports=function(t,e,r,f){function h(r,i){return n.coerce(t,e,u,r,i)}function p(r,i){return n.coerce2(t,e,u,r,i)}var d=function(t,e,r){var n=r("lon")||[],i=r("lat")||[],a=Math.min(n.length,i.length);return e._length=a,a}(0,e,h);if(d){if(h("text"),h("texttemplate"),h("hovertext"),h("hovertemplate"),h("mode"),h("below"),i.hasLines(e)&&(o(t,e,r,f,h,{noDash:!0}),h("connectgaps")),i.hasMarkers(e)){a(t,e,r,f,h,{noLine:!0,noAngle:!0}),h("marker.allowoverlap"),h("marker.angle");var v=e.marker;"circle"!==v.symbol&&(n.isArrayOrTypedArray(v.size)&&(v.size=v.size[0]),n.isArrayOrTypedArray(v.color)&&(v.color=v.color[0]))}var g=p("cluster.maxzoom"),y=p("cluster.step"),m=p("cluster.color",e.marker&&e.marker.color||r),x=p("cluster.size"),b=p("cluster.opacity");h("cluster.enabled",!1!==g||!1!==y||!1!==m||!1!==x||!1!==b),i.hasText(e)&&s(t,e,f,h,{noSelect:!0,font:{family:-1!==c.indexOf(f.font.family)?f.font.family:"Open Sans Regular",size:f.font.size,color:f.font.color}}),h("fill"),"none"!==e.fill&&l(t,e,r,h),n.coerceSelectionMarkerOpacity(e,h)}else e.visible=!1}},53353:function(t){"use strict";t.exports=function(t,e){return t.lon=e.lon,t.lat=e.lat,t}},15636:function(t,e,r){"use strict";var n=r(89298);t.exports=function(t,e,r){var i={},a=r[e.subplot]._subplot.mockAxis,o=t.lonlat;return i.lonLabel=n.tickText(a,a.c2l(o[0]),!0).text,i.latLabel=n.tickText(a,a.c2l(o[1]),!0).text,i}},28178:function(t,e,r){"use strict";var n=r(30211),i=r(71828),a=r(34603),o=i.fillText,s=r(50606).BADNUM,l=r(77734).traceLayerPrefix;function u(t,e,r){if(!t.hovertemplate){var n=(e.hi||t.hoverinfo).split("+"),i=-1!==n.indexOf("all"),a=-1!==n.indexOf("lon"),s=-1!==n.indexOf("lat"),l=e.lonlat,u=[];return i||a&&s?u.push("("+c(l[1])+", "+c(l[0])+")"):a?u.push(r.lon+c(l[0])):s&&u.push(r.lat+c(l[1])),(i||-1!==n.indexOf("text"))&&o(e,t,u),u.join("<br>")}function c(t){return t+"°"}}t.exports={hoverPoints:function(t,e,r){var o=t.cd,c=o[0].trace,f=t.xa,h=t.ya,p=t.subplot,d=[],v=l+c.uid+"-circle",g=c.cluster&&c.cluster.enabled;if(g){var y=p.map.queryRenderedFeatures(null,{layers:[v]});d=y.map((function(t){return t.id}))}var m=360*(e>=0?Math.floor((e+180)/360):Math.ceil((e-180)/360)),x=e-m;if(n.getClosest(o,(function(t){var e=t.lonlat;if(e[0]===s)return 1/0;if(g&&-1===d.indexOf(t.i+1))return 1/0;var n=i.modHalf(e[0],360),a=e[1],o=p.project([n,a]),l=o.x-f.c2p([x,a]),u=o.y-h.c2p([n,r]),c=Math.max(3,t.mrc||0);return Math.max(Math.sqrt(l*l+u*u)-c,1-3/c)}),t),!1!==t.index){var b=o[t.index],_=b.lonlat,w=[i.modHalf(_[0],360)+m,_[1]],T=f.c2p(w),k=h.c2p(w),A=b.mrc||1;t.x0=T-A,t.x1=T+A,t.y0=k-A,t.y1=k+A;var M={};M[c.subplot]={_subplot:p};var S=c._module.formatLabels(b,c,M);return t.lonLabel=S.lonLabel,t.latLabel=S.latLabel,t.color=a(c,b),t.extraText=u(c,b,o[0].t.labels),t.hovertemplate=c.hovertemplate,[t]}},getExtraText:u}},20467:function(t,e,r){"use strict";t.exports={attributes:r(99181),supplyDefaults:r(76645),colorbar:r(4898),formatLabels:r(15636),calc:r(84622),plot:r(86951),hoverPoints:r(28178).hoverPoints,eventData:r(53353),selectPoints:r(86387),styleOnSelect:function(t,e){e&&e[0].trace._glTrace.update(e)},moduleType:"trace",name:"scattermapbox",basePlotModule:r(50101),categories:["mapbox","gl","symbols","showLegend","scatter-like"],meta:{}}},86951:function(t,e,r){"use strict";var n=r(71828),i=r(15790),a=r(77734).traceLayerPrefix,o={cluster:["cluster","clusterCount","circle"],nonCluster:["fill","line","circle","symbol"]};function s(t,e,r,n){this.type="scattermapbox",this.subplot=t,this.uid=e,this.clusterEnabled=r,this.isHidden=n,this.sourceIds={fill:"source-"+e+"-fill",line:"source-"+e+"-line",circle:"source-"+e+"-circle",symbol:"source-"+e+"-symbol",cluster:"source-"+e+"-circle",clusterCount:"source-"+e+"-circle"},this.layerIds={fill:a+e+"-fill",line:a+e+"-line",circle:a+e+"-circle",symbol:a+e+"-symbol",cluster:a+e+"-cluster",clusterCount:a+e+"-cluster-count"},this.below=null}var l=s.prototype;l.addSource=function(t,e,r){var i={type:"geojson",data:e.geojson};r&&r.enabled&&n.extendFlat(i,{cluster:!0,clusterMaxZoom:r.maxzoom});var a=this.subplot.map.getSource(this.sourceIds[t]);a?a.setData(e.geojson):this.subplot.map.addSource(this.sourceIds[t],i)},l.setSourceData=function(t,e){this.subplot.map.getSource(this.sourceIds[t]).setData(e.geojson)},l.addLayer=function(t,e,r){var n={type:e.type,id:this.layerIds[t],source:this.sourceIds[t],layout:e.layout,paint:e.paint};e.filter&&(n.filter=e.filter);for(var i,a=this.layerIds[t],o=this.subplot.getMapLayers(),s=0;s<o.length;s++)if(o[s].id===a){i=!0;break}i?(this.subplot.setOptions(a,"setLayoutProperty",n.layout),"visible"===n.layout.visibility&&this.subplot.setOptions(a,"setPaintProperty",n.paint)):this.subplot.addLayer(n,r)},l.update=function(t){var e=t[0].trace,r=this.subplot,n=r.map,a=i(r.gd,t),s=r.belowLookup["trace-"+this.uid],l=!(!e.cluster||!e.cluster.enabled),u=!!this.clusterEnabled,c=this;function f(t){u?function(t){for(var e=o.cluster,r=e.length-1;r>=0;r--){var i=e[r];n.removeLayer(c.layerIds[i])}t||n.removeSource(c.sourceIds.circle)}(t):function(t){for(var e=o.nonCluster,r=e.length-1;r>=0;r--){var i=e[r];n.removeLayer(c.layerIds[i]),t||n.removeSource(c.sourceIds[i])}}(t)}function h(t){l?function(t){t||c.addSource("circle",a.circle,e.cluster);for(var r=o.cluster,n=0;n<r.length;n++){var i=r[n],l=a[i];c.addLayer(i,l,s)}}(t):function(t){for(var e=o.nonCluster,r=0;r<e.length;r++){var n=e[r],i=a[n];t||c.addSource(n,i),c.addLayer(n,i,s)}}(t)}function p(){for(var t=l?o.cluster:o.nonCluster,e=0;e<t.length;e++){var n=t[e],i=a[n];i&&(r.setOptions(c.layerIds[n],"setLayoutProperty",i.layout),"visible"===i.layout.visibility&&("cluster"!==n&&c.setSourceData(n,i),r.setOptions(c.layerIds[n],"setPaintProperty",i.paint)))}}var d=this.isHidden,v=!0!==e.visible;v?d||f():d?v||h():u!==l?(f(),h()):this.below!==s?(f(!0),h(!0),p()):p(),this.clusterEnabled=l,this.isHidden=v,this.below=s,t[0].trace._glTrace=this},l.dispose=function(){for(var t=this.subplot.map,e=this.clusterEnabled?o.cluster:o.nonCluster,r=e.length-1;r>=0;r--){var n=e[r];t.removeLayer(this.layerIds[n]),t.removeSource(this.sourceIds[n])}},t.exports=function(t,e){var r,n,a,l=e[0].trace,u=l.cluster&&l.cluster.enabled,c=!0!==l.visible,f=new s(t,l.uid,u,c),h=i(t.gd,e),p=f.below=t.belowLookup["trace-"+l.uid];if(u)for(f.addSource("circle",h.circle,l.cluster),r=0;r<o.cluster.length;r++)a=h[n=o.cluster[r]],f.addLayer(n,a,p);else for(r=0;r<o.nonCluster.length;r++)a=h[n=o.nonCluster[r]],f.addSource(n,a,l.cluster),f.addLayer(n,a,p);return e[0].trace._glTrace=f,f}},86387:function(t,e,r){"use strict";var n=r(71828),i=r(34098),a=r(50606).BADNUM;t.exports=function(t,e){var r,o=t.cd,s=t.xaxis,l=t.yaxis,u=[],c=o[0].trace;if(!i.hasMarkers(c))return[];if(!1===e)for(r=0;r<o.length;r++)o[r].selected=0;else for(r=0;r<o.length;r++){var f=o[r],h=f.lonlat;if(h[0]!==a){var p=[n.modHalf(h[0],360),h[1]],d=[s.c2p(p),l.c2p(p)];e.contains(d,null,r,t)?(u.push({pointNumber:r,lon:h[0],lat:h[1]}),f.selected=1):f.selected=0}}return u}},81245:function(t,e,r){"use strict";var n=r(5386).fF,i=r(5386).si,a=r(1426).extendFlat,o=r(82196),s=r(9012),l=o.line;t.exports={mode:o.mode,r:{valType:"data_array",editType:"calc+clearAxisTypes"},theta:{valType:"data_array",editType:"calc+clearAxisTypes"},r0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes"},dr:{valType:"number",dflt:1,editType:"calc"},theta0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes"},dtheta:{valType:"number",editType:"calc"},thetaunit:{valType:"enumerated",values:["radians","degrees","gradians"],dflt:"degrees",editType:"calc+clearAxisTypes"},text:o.text,texttemplate:i({editType:"plot"},{keys:["r","theta","text"]}),hovertext:o.hovertext,line:{color:l.color,width:l.width,dash:l.dash,backoff:l.backoff,shape:a({},l.shape,{values:["linear","spline"]}),smoothing:l.smoothing,editType:"calc"},connectgaps:o.connectgaps,marker:o.marker,cliponaxis:a({},o.cliponaxis,{dflt:!1}),textposition:o.textposition,textfont:o.textfont,fill:a({},o.fill,{values:["none","toself","tonext"],dflt:"none"}),fillcolor:o.fillcolor,hoverinfo:a({},s.hoverinfo,{flags:["r","theta","text","name"]}),hoveron:o.hoveron,hovertemplate:n(),selected:o.selected,unselected:o.unselected}},26442:function(t,e,r){"use strict";var n=r(92770),i=r(50606).BADNUM,a=r(89298),o=r(36922),s=r(75225),l=r(66279),u=r(47761).calcMarkerSize;t.exports=function(t,e){for(var r=t._fullLayout,c=e.subplot,f=r[c].radialaxis,h=r[c].angularaxis,p=f.makeCalcdata(e,"r"),d=h.makeCalcdata(e,"theta"),v=e._length,g=new Array(v),y=0;y<v;y++){var m=p[y],x=d[y],b=g[y]={};n(m)&&n(x)?(b.r=m,b.theta=x):b.r=i}var _=u(e,v);return e._extremes.x=a.findExtremes(f,p,{ppad:_}),o(t,e),s(g,e),l(g,e),g}},22184:function(t,e,r){"use strict";var n=r(71828),i=r(34098),a=r(49508),o=r(11058),s=r(94039),l=r(82410),u=r(28908),c=r(47581).PTS_LINESONLY,f=r(81245);function h(t,e,r,n){var i,a=n("r"),o=n("theta");if(a)o?i=Math.min(a.length,o.length):(i=a.length,n("theta0"),n("dtheta"));else{if(!o)return 0;i=e.theta.length,n("r0"),n("dr")}return e._length=i,i}t.exports={handleRThetaDefaults:h,supplyDefaults:function(t,e,r,p){function d(r,i){return n.coerce(t,e,f,r,i)}var v=h(0,e,0,d);if(v){d("thetaunit"),d("mode",v<c?"lines+markers":"lines"),d("text"),d("hovertext"),"fills"!==e.hoveron&&d("hovertemplate"),i.hasLines(e)&&(o(t,e,r,p,d,{backoff:!0}),s(t,e,d),d("connectgaps")),i.hasMarkers(e)&&a(t,e,r,p,d,{gradient:!0}),i.hasText(e)&&(d("texttemplate"),l(t,e,p,d));var g=[];(i.hasMarkers(e)||i.hasText(e))&&(d("cliponaxis"),d("marker.maxdisplayed"),g.push("points")),d("fill"),"none"!==e.fill&&(u(t,e,r,d),i.hasLines(e)||s(t,e,d)),"tonext"!==e.fill&&"toself"!==e.fill||g.push("fills"),d("hoveron",g.join("+")||"points"),n.coerceSelectionMarkerOpacity(e,d)}else e.visible=!1}}},98608:function(t,e,r){"use strict";var n=r(71828),i=r(89298);t.exports=function(t,e,r){var a,o,s={},l=r[e.subplot]._subplot;l?(a=l.radialAxis,o=l.angularAxis):(a=(l=r[e.subplot]).radialaxis,o=l.angularaxis);var u=a.c2l(t.r);s.rLabel=i.tickText(a,u,!0).text;var c="degrees"===o.thetaunit?n.rad2deg(t.theta):t.theta;return s.thetaLabel=i.tickText(o,c,!0).text,s}},59150:function(t,e,r){"use strict";var n=r(33720);function i(t,e,r,n){var i=r.radialAxis,a=r.angularAxis;i._hovertitle="r",a._hovertitle="θ";var o={};o[e.subplot]={_subplot:r};var s=e._module.formatLabels(t,e,o);n.rLabel=s.rLabel,n.thetaLabel=s.thetaLabel;var l=t.hi||e.hoverinfo,u=[];function c(t,e){u.push(t._hovertitle+": "+e)}if(!e.hovertemplate){var f=l.split("+");-1!==f.indexOf("all")&&(f=["r","theta","text"]),-1!==f.indexOf("r")&&c(i,n.rLabel),-1!==f.indexOf("theta")&&c(a,n.thetaLabel),-1!==f.indexOf("text")&&n.text&&(u.push(n.text),delete n.text),n.extraText=u.join("<br>")}}t.exports={hoverPoints:function(t,e,r,a){var o=n(t,e,r,a);if(o&&!1!==o[0].index){var s=o[0];if(void 0===s.index)return o;var l=t.subplot,u=s.cd[s.index],c=s.trace;if(l.isPtInside(u))return s.xLabelVal=void 0,s.yLabelVal=void 0,i(u,c,l,s),s.hovertemplate=c.hovertemplate,o}},makeHoverPointText:i}},91271:function(t,e,r){"use strict";t.exports={moduleType:"trace",name:"scatterpolar",basePlotModule:r(23580),categories:["polar","symbols","showLegend","scatter-like"],attributes:r(81245),supplyDefaults:r(22184).supplyDefaults,colorbar:r(4898),formatLabels:r(98608),calc:r(26442),plot:r(45162),style:r(16296).style,styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(59150).hoverPoints,selectPoints:r(98002),meta:{}}},45162:function(t,e,r){"use strict";var n=r(32663),i=r(50606).BADNUM;t.exports=function(t,e,r){for(var a=e.layers.frontplot.select("g.scatterlayer"),o=e.xaxis,s=e.yaxis,l={xaxis:o,yaxis:s,plot:e.framework,layerClipId:e._hasClipOnAxisFalse?e.clipIds.forTraces:null},u=e.radialAxis,c=e.angularAxis,f=0;f<r.length;f++)for(var h=r[f],p=0;p<h.length;p++){0===p&&(h[0].trace._xA=o,h[0].trace._yA=s);var d=h[p],v=d.r;if(v===i)d.x=d.y=i;else{var g=u.c2g(v),y=c.c2g(d.theta);d.x=g*Math.cos(y),d.y=g*Math.sin(y)}}n(t,l,r,a)}},53286:function(t,e,r){"use strict";var n=r(81245),i=r(42341),a=r(5386).si;t.exports={mode:n.mode,r:n.r,theta:n.theta,r0:n.r0,dr:n.dr,theta0:n.theta0,dtheta:n.dtheta,thetaunit:n.thetaunit,text:n.text,texttemplate:a({editType:"plot"},{keys:["r","theta","text"]}),hovertext:n.hovertext,hovertemplate:n.hovertemplate,line:i.line,connectgaps:i.connectgaps,marker:i.marker,fill:i.fill,fillcolor:i.fillcolor,textposition:i.textposition,textfont:i.textfont,hoverinfo:n.hoverinfo,selected:n.selected,unselected:n.unselected}},65746:function(t,e,r){"use strict";t.exports={moduleType:"trace",name:"scatterpolargl",basePlotModule:r(23580),categories:["gl","regl","polar","symbols","showLegend","scatter-like"],attributes:r(53286),supplyDefaults:r(75485),colorbar:r(4898),formatLabels:r(46255),calc:r(37499),hoverPoints:r(29347).hoverPoints,selectPoints:r(58147),meta:{}}},37499:function(t,e,r){"use strict";var n=r(36922),i=r(47761).calcMarkerSize,a=r(19635),o=r(89298),s=r(78232).TOO_MANY_POINTS;t.exports=function(t,e){var r=t._fullLayout,l=e.subplot,u=r[l].radialaxis,c=r[l].angularaxis,f=e._r=u.makeCalcdata(e,"r"),h=e._theta=c.makeCalcdata(e,"theta"),p=e._length,d={};p<f.length&&(f=f.slice(0,p)),p<h.length&&(h=h.slice(0,p)),d.r=f,d.theta=h,n(t,e);var v,g=d.opts=a.style(t,e);return p<s?v=i(e,p):g.marker&&(v=2*(g.marker.sizeAvg||Math.max(g.marker.size,3))),e._extremes.x=o.findExtremes(u,f,{ppad:v}),[{x:!1,y:!1,t:d,trace:e}]}},75485:function(t,e,r){"use strict";var n=r(71828),i=r(34098),a=r(22184).handleRThetaDefaults,o=r(49508),s=r(11058),l=r(82410),u=r(28908),c=r(47581).PTS_LINESONLY,f=r(53286);t.exports=function(t,e,r,h){function p(r,i){return n.coerce(t,e,f,r,i)}var d=a(t,e,h,p);d?(p("thetaunit"),p("mode",d<c?"lines+markers":"lines"),p("text"),p("hovertext"),"fills"!==e.hoveron&&p("hovertemplate"),i.hasLines(e)&&(s(t,e,r,h,p),p("connectgaps")),i.hasMarkers(e)&&o(t,e,r,h,p,{noAngleRef:!0,noStandOff:!0}),i.hasText(e)&&(p("texttemplate"),l(t,e,h,p)),p("fill"),"none"!==e.fill&&u(t,e,r,p),n.coerceSelectionMarkerOpacity(e,p)):e.visible=!1}},46255:function(t,e,r){"use strict";var n=r(98608);t.exports=function(t,e,r){var i=t.i;return"r"in t||(t.r=e._r[i]),"theta"in t||(t.theta=e._theta[i]),n(t,e,r)}},29347:function(t,e,r){"use strict";var n=r(20794),i=r(59150).makeHoverPointText;t.exports={hoverPoints:function(t,e,r,a){var o=t.cd[0].t,s=o.r,l=o.theta,u=n.hoverPoints(t,e,r,a);if(u&&!1!==u[0].index){var c=u[0];if(void 0===c.index)return u;var f=t.subplot,h=c.cd[c.index],p=c.trace;if(h.r=s[c.index],h.theta=l[c.index],f.isPtInside(h))return c.xLabelVal=void 0,c.yLabelVal=void 0,i(h,p,f,c),u}}}},21461:function(t,e,r){"use strict";var n=r(65746);n.plot=r(49741),t.exports=n},49741:function(t,e,r){"use strict";var n=r(88294),i=r(92770),a=r(26787),o=r(38967),s=r(19635),l=r(71828),u=r(78232).TOO_MANY_POINTS;t.exports=function(t,e,r){if(r.length){var c=e.radialAxis,f=e.angularAxis,h=o(t,e);return r.forEach((function(r){if(r&&r[0]&&r[0].trace){var a,o=r[0],p=o.trace,d=o.t,v=p._length,g=d.r,y=d.theta,m=d.opts,x=g.slice(),b=y.slice();for(a=0;a<g.length;a++)e.isPtInside({r:g[a],theta:y[a]})||(x[a]=NaN,b[a]=NaN);var _=new Array(2*v),w=Array(v),T=Array(v);for(a=0;a<v;a++){var k,A,M=x[a];if(i(M)){var S=c.c2g(M),E=f.c2g(b[a],p.thetaunit);k=S*Math.cos(E),A=S*Math.sin(E)}else k=A=NaN;w[a]=_[2*a]=k,T[a]=_[2*a+1]=A}d.tree=n(_),m.marker&&v>=u&&(m.marker.cluster=d.tree),m.marker&&(m.markerSel.positions=m.markerUnsel.positions=m.marker.positions=_),m.line&&_.length>1&&l.extendFlat(m.line,s.linePositions(t,p,_)),m.text&&(l.extendFlat(m.text,{positions:_},s.textPosition(t,p,m.text,m.marker)),l.extendFlat(m.textSel,{positions:_},s.textPosition(t,p,m.text,m.markerSel)),l.extendFlat(m.textUnsel,{positions:_},s.textPosition(t,p,m.text,m.markerUnsel))),m.fill&&!h.fill2d&&(h.fill2d=!0),m.marker&&!h.scatter2d&&(h.scatter2d=!0),m.line&&!h.line2d&&(h.line2d=!0),m.text&&!h.glText&&(h.glText=!0),h.lineOptions.push(m.line),h.fillOptions.push(m.fill),h.markerOptions.push(m.marker),h.markerSelectedOptions.push(m.markerSel),h.markerUnselectedOptions.push(m.markerUnsel),h.textOptions.push(m.text),h.textSelectedOptions.push(m.textSel),h.textUnselectedOptions.push(m.textUnsel),h.selectBatch.push([]),h.unselectBatch.push([]),d.x=w,d.y=T,d.rawx=w,d.rawy=T,d.r=g,d.theta=y,d.positions=_,d._scene=h,d.index=h.count,h.count++}})),a(t,e,r)}},t.exports.reglPrecompiled={}},48300:function(t,e,r){"use strict";var n=r(5386).fF,i=r(5386).si,a=r(1426).extendFlat,o=r(82196),s=r(9012),l=o.line;t.exports={mode:o.mode,real:{valType:"data_array",editType:"calc+clearAxisTypes"},imag:{valType:"data_array",editType:"calc+clearAxisTypes"},text:o.text,texttemplate:i({editType:"plot"},{keys:["real","imag","text"]}),hovertext:o.hovertext,line:{color:l.color,width:l.width,dash:l.dash,backoff:l.backoff,shape:a({},l.shape,{values:["linear","spline"]}),smoothing:l.smoothing,editType:"calc"},connectgaps:o.connectgaps,marker:o.marker,cliponaxis:a({},o.cliponaxis,{dflt:!1}),textposition:o.textposition,textfont:o.textfont,fill:a({},o.fill,{values:["none","toself","tonext"],dflt:"none"}),fillcolor:o.fillcolor,hoverinfo:a({},s.hoverinfo,{flags:["real","imag","text","name"]}),hoveron:o.hoveron,hovertemplate:n(),selected:o.selected,unselected:o.unselected}},30621:function(t,e,r){"use strict";var n=r(92770),i=r(50606).BADNUM,a=r(36922),o=r(75225),s=r(66279),l=r(47761).calcMarkerSize;t.exports=function(t,e){for(var r=t._fullLayout,u=e.subplot,c=r[u].realaxis,f=r[u].imaginaryaxis,h=c.makeCalcdata(e,"real"),p=f.makeCalcdata(e,"imag"),d=e._length,v=new Array(d),g=0;g<d;g++){var y=h[g],m=p[g],x=v[g]={};n(y)&&n(m)?(x.real=y,x.imag=m):x.real=i}return l(e,d),a(t,e),o(v,e),s(v,e),v}},65269:function(t,e,r){"use strict";var n=r(71828),i=r(34098),a=r(49508),o=r(11058),s=r(94039),l=r(82410),u=r(28908),c=r(47581).PTS_LINESONLY,f=r(48300);t.exports=function(t,e,r,h){function p(r,i){return n.coerce(t,e,f,r,i)}var d=function(t,e,r,n){var i,a=n("real"),o=n("imag");return a&&o&&(i=Math.min(a.length,o.length)),e._length=i,i}(0,e,0,p);if(d){p("mode",d<c?"lines+markers":"lines"),p("text"),p("hovertext"),"fills"!==e.hoveron&&p("hovertemplate"),i.hasLines(e)&&(o(t,e,r,h,p,{backoff:!0}),s(t,e,p),p("connectgaps")),i.hasMarkers(e)&&a(t,e,r,h,p,{gradient:!0}),i.hasText(e)&&(p("texttemplate"),l(t,e,h,p));var v=[];(i.hasMarkers(e)||i.hasText(e))&&(p("cliponaxis"),p("marker.maxdisplayed"),v.push("points")),p("fill"),"none"!==e.fill&&(u(t,e,r,p),i.hasLines(e)||s(t,e,p)),"tonext"!==e.fill&&"toself"!==e.fill||v.push("fills"),p("hoveron",v.join("+")||"points"),n.coerceSelectionMarkerOpacity(e,p)}else e.visible=!1}},62047:function(t,e,r){"use strict";var n=r(89298);t.exports=function(t,e,r){var i={},a=r[e.subplot]._subplot;return i.realLabel=n.tickText(a.radialAxis,t.real,!0).text,i.imagLabel=n.tickText(a.angularAxis,t.imag,!0).text,i}},11350:function(t,e,r){"use strict";var n=r(33720);function i(t,e,r,n){var i=r.radialAxis,a=r.angularAxis;i._hovertitle="real",a._hovertitle="imag";var o={};o[e.subplot]={_subplot:r};var s=e._module.formatLabels(t,e,o);n.realLabel=s.realLabel,n.imagLabel=s.imagLabel;var l=t.hi||e.hoverinfo,u=[];function c(t,e){u.push(t._hovertitle+": "+e)}if(!e.hovertemplate){var f=l.split("+");-1!==f.indexOf("all")&&(f=["real","imag","text"]),-1!==f.indexOf("real")&&c(i,n.realLabel),-1!==f.indexOf("imag")&&c(a,n.imagLabel),-1!==f.indexOf("text")&&n.text&&(u.push(n.text),delete n.text),n.extraText=u.join("<br>")}}t.exports={hoverPoints:function(t,e,r,a){var o=n(t,e,r,a);if(o&&!1!==o[0].index){var s=o[0];if(void 0===s.index)return o;var l=t.subplot,u=s.cd[s.index],c=s.trace;if(l.isPtInside(u))return s.xLabelVal=void 0,s.yLabelVal=void 0,i(u,c,l,s),s.hovertemplate=c.hovertemplate,o}},makeHoverPointText:i}},85956:function(t,e,r){"use strict";t.exports={moduleType:"trace",name:"scattersmith",basePlotModule:r(7504),categories:["smith","symbols","showLegend","scatter-like"],attributes:r(48300),supplyDefaults:r(65269),colorbar:r(4898),formatLabels:r(62047),calc:r(30621),plot:r(12480),style:r(16296).style,styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(11350).hoverPoints,selectPoints:r(98002),meta:{}}},12480:function(t,e,r){"use strict";var n=r(32663),i=r(50606).BADNUM,a=r(23893).smith;t.exports=function(t,e,r){for(var o=e.layers.frontplot.select("g.scatterlayer"),s=e.xaxis,l=e.yaxis,u={xaxis:s,yaxis:l,plot:e.framework,layerClipId:e._hasClipOnAxisFalse?e.clipIds.forTraces:null},c=0;c<r.length;c++)for(var f=r[c],h=0;h<f.length;h++){0===h&&(f[0].trace._xA=s,f[0].trace._yA=l);var p=f[h],d=p.real;if(d===i)p.x=p.y=i;else{var v=a([d,p.imag]);p.x=v[0],p.y=v[1]}}n(t,u,r,o)}},50413:function(t,e,r){"use strict";var n=r(5386).fF,i=r(5386).si,a=r(82196),o=r(9012),s=r(50693),l=r(79952).P,u=r(1426).extendFlat,c=a.marker,f=a.line,h=c.line;t.exports={a:{valType:"data_array",editType:"calc"},b:{valType:"data_array",editType:"calc"},c:{valType:"data_array",editType:"calc"},sum:{valType:"number",dflt:0,min:0,editType:"calc"},mode:u({},a.mode,{dflt:"markers"}),text:u({},a.text,{}),texttemplate:i({editType:"plot"},{keys:["a","b","c","text"]}),hovertext:u({},a.hovertext,{}),line:{color:f.color,width:f.width,dash:l,backoff:f.backoff,shape:u({},f.shape,{values:["linear","spline"]}),smoothing:f.smoothing,editType:"calc"},connectgaps:a.connectgaps,cliponaxis:a.cliponaxis,fill:u({},a.fill,{values:["none","toself","tonext"],dflt:"none"}),fillcolor:a.fillcolor,marker:u({symbol:c.symbol,opacity:c.opacity,angle:c.angle,angleref:c.angleref,standoff:c.standoff,maxdisplayed:c.maxdisplayed,size:c.size,sizeref:c.sizeref,sizemin:c.sizemin,sizemode:c.sizemode,line:u({width:h.width,editType:"calc"},s("marker.line")),gradient:c.gradient,editType:"calc"},s("marker")),textfont:a.textfont,textposition:a.textposition,selected:a.selected,unselected:a.unselected,hoverinfo:u({},o.hoverinfo,{flags:["a","b","c","text","name"]}),hoveron:a.hoveron,hovertemplate:n()}},54337:function(t,e,r){"use strict";var n=r(92770),i=r(36922),a=r(75225),o=r(66279),s=r(47761).calcMarkerSize,l=["a","b","c"],u={a:["b","c"],b:["a","c"],c:["a","b"]};t.exports=function(t,e){var r,c,f,h,p,d,v=t._fullLayout[e.subplot].sum,g=e.sum||v,y={a:e.a,b:e.b,c:e.c};for(r=0;r<l.length;r++)if(!y[f=l[r]]){for(p=y[u[f][0]],d=y[u[f][1]],h=new Array(p.length),c=0;c<p.length;c++)h[c]=g-p[c]-d[c];y[f]=h}var m,x,b,_,w,T,k=e._length,A=new Array(k);for(r=0;r<k;r++)m=y.a[r],x=y.b[r],b=y.c[r],n(m)&&n(x)&&n(b)?(1!=(_=v/((m=+m)+(x=+x)+(b=+b)))&&(m*=_,x*=_,b*=_),T=m,w=b-x,A[r]={x:w,y:T,a:m,b:x,c:b}):A[r]={x:!1,y:!1};return s(e,k),i(t,e),a(A,e),o(A,e),A}},46008:function(t,e,r){"use strict";var n=r(71828),i=r(47581),a=r(34098),o=r(49508),s=r(11058),l=r(94039),u=r(82410),c=r(28908),f=r(50413);t.exports=function(t,e,r,h){function p(r,i){return n.coerce(t,e,f,r,i)}var d,v=p("a"),g=p("b"),y=p("c");if(v?(d=v.length,g?(d=Math.min(d,g.length),y&&(d=Math.min(d,y.length))):d=y?Math.min(d,y.length):0):g&&y&&(d=Math.min(g.length,y.length)),d){e._length=d,p("sum"),p("text"),p("hovertext"),"fills"!==e.hoveron&&p("hovertemplate"),p("mode",d<i.PTS_LINESONLY?"lines+markers":"lines"),a.hasLines(e)&&(s(t,e,r,h,p,{backoff:!0}),l(t,e,p),p("connectgaps")),a.hasMarkers(e)&&o(t,e,r,h,p,{gradient:!0}),a.hasText(e)&&(p("texttemplate"),u(t,e,h,p));var m=[];(a.hasMarkers(e)||a.hasText(e))&&(p("cliponaxis"),p("marker.maxdisplayed"),m.push("points")),p("fill"),"none"!==e.fill&&(c(t,e,r,p),a.hasLines(e)||l(t,e,p)),"tonext"!==e.fill&&"toself"!==e.fill||m.push("fills"),p("hoveron",m.join("+")||"points"),n.coerceSelectionMarkerOpacity(e,p)}else e.visible=!1}},4524:function(t){"use strict";t.exports=function(t,e,r,n,i){if(e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),n[i]){var a=n[i];t.a=a.a,t.b=a.b,t.c=a.c}else t.a=e.a,t.b=e.b,t.c=e.c;return t}},93645:function(t,e,r){"use strict";var n=r(89298);t.exports=function(t,e,r){var i={},a=r[e.subplot]._subplot;return i.aLabel=n.tickText(a.aaxis,t.a,!0).text,i.bLabel=n.tickText(a.baxis,t.b,!0).text,i.cLabel=n.tickText(a.caxis,t.c,!0).text,i}},47250:function(t,e,r){"use strict";var n=r(33720);t.exports=function(t,e,r,i){var a=n(t,e,r,i);if(a&&!1!==a[0].index){var o=a[0];if(void 0===o.index){var s=1-o.y0/t.ya._length,l=t.xa._length,u=l*s/2,c=l-u;return o.x0=Math.max(Math.min(o.x0,c),u),o.x1=Math.max(Math.min(o.x1,c),u),a}var f=o.cd[o.index],h=o.trace,p=o.subplot;o.a=f.a,o.b=f.b,o.c=f.c,o.xLabelVal=void 0,o.yLabelVal=void 0;var d={};d[h.subplot]={_subplot:p};var v=h._module.formatLabels(f,h,d);o.aLabel=v.aLabel,o.bLabel=v.bLabel,o.cLabel=v.cLabel;var g=f.hi||h.hoverinfo,y=[];if(!h.hovertemplate){var m=g.split("+");-1!==m.indexOf("all")&&(m=["a","b","c"]),-1!==m.indexOf("a")&&x(p.aaxis,o.aLabel),-1!==m.indexOf("b")&&x(p.baxis,o.bLabel),-1!==m.indexOf("c")&&x(p.caxis,o.cLabel)}return o.extraText=y.join("<br>"),o.hovertemplate=h.hovertemplate,a}function x(t,e){y.push(t._hovertitle+": "+e)}}},52979:function(t,e,r){"use strict";t.exports={attributes:r(50413),supplyDefaults:r(46008),colorbar:r(4898),formatLabels:r(93645),calc:r(54337),plot:r(7507),style:r(16296).style,styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(47250),selectPoints:r(98002),eventData:r(4524),moduleType:"trace",name:"scatterternary",basePlotModule:r(61639),categories:["ternary","symbols","showLegend","scatter-like"],meta:{}}},7507:function(t,e,r){"use strict";var n=r(32663);t.exports=function(t,e,r){var i=e.plotContainer;i.select(".scatterlayer").selectAll("*").remove();for(var a=e.xaxis,o=e.yaxis,s={xaxis:a,yaxis:o,plot:i,layerClipId:e._hasClipOnAxisFalse?e.clipIdRelative:null},l=e.layers.frontplot.select("g.scatterlayer"),u=0;u<r.length;u++){var c=r[u];c.length&&(c[0].trace._xA=a,c[0].trace._yA=o)}n(t,s,r,l)}},46880:function(t,e,r){"use strict";var n=r(82196),i=r(50693),a=r(12663).axisHoverFormat,o=r(5386).fF,s=r(42341),l=r(85555).idRegex,u=r(44467).templatedArray,c=r(1426).extendFlat,f=n.marker,h=f.line,p=c(i("marker.line",{editTypeOverride:"calc"}),{width:c({},h.width,{editType:"calc"}),editType:"calc"}),d=c(i("marker"),{symbol:f.symbol,angle:f.angle,size:c({},f.size,{editType:"markerSize"}),sizeref:f.sizeref,sizemin:f.sizemin,sizemode:f.sizemode,opacity:f.opacity,colorbar:f.colorbar,line:p,editType:"calc"});function v(t){return{valType:"info_array",freeLength:!0,editType:"calc",items:{valType:"subplotid",regex:l[t],editType:"plot"}}}d.color.editType=d.cmin.editType=d.cmax.editType="style",t.exports={dimensions:u("dimension",{visible:{valType:"boolean",dflt:!0,editType:"calc"},label:{valType:"string",editType:"calc"},values:{valType:"data_array",editType:"calc+clearAxisTypes"},axis:{type:{valType:"enumerated",values:["linear","log","date","category"],editType:"calc+clearAxisTypes"},matches:{valType:"boolean",dflt:!1,editType:"calc"},editType:"calc+clearAxisTypes"},editType:"calc+clearAxisTypes"}),text:c({},s.text,{}),hovertext:c({},s.hovertext,{}),hovertemplate:o(),xhoverformat:a("x"),yhoverformat:a("y"),marker:d,xaxes:v("x"),yaxes:v("y"),diagonal:{visible:{valType:"boolean",dflt:!0,editType:"calc"},editType:"calc"},showupperhalf:{valType:"boolean",dflt:!0,editType:"calc"},showlowerhalf:{valType:"boolean",dflt:!0,editType:"calc"},selected:{marker:s.selected.marker,editType:"calc"},unselected:{marker:s.unselected.marker,editType:"calc"},opacity:s.opacity}},65017:function(t,e,r){"use strict";var n=r(73972),i=r(83312);t.exports={moduleType:"trace",name:"splom",categories:["gl","regl","cartesian","symbols","showLegend","scatter-like"],attributes:r(46880),supplyDefaults:r(25784),colorbar:r(4898),calc:r(87625),plot:r(79410),hoverPoints:r(8567).hoverPoints,selectPoints:r(8689),editStyle:r(28801),meta:{}},n.register(i)},16947:function(t,e,r){"use strict";var n=r(46075),i=r(73972),a=r(79749),o=r(27659).a0,s=r(93612),l=r(41675).getFromId,u=r(89298).shouldShowZeroLine,c="splom",f={};function h(t,e,r){for(var n=r.matrixOptions.data.length,i=e._visibleDims,a=r.viewOpts.ranges=new Array(n),o=0;o<i.length;o++){var s=i[o],u=a[o]=new Array(4),c=l(t,e._diag[s][0]);c&&(u[0]=c.r2l(c.range[0]),u[2]=c.r2l(c.range[1]));var f=l(t,e._diag[s][1]);f&&(u[1]=f.r2l(f.range[0]),u[3]=f.r2l(f.range[1]))}r.selectBatch.length||r.unselectBatch.length?r.matrix.update({ranges:a},{ranges:a}):r.matrix.update({ranges:a})}function p(t){var e=t._fullLayout,r=e._glcanvas.data()[0].regl,i=e._splomGrid;i||(i=e._splomGrid=n(r)),i.update(function(t){var e,r=t._context.plotGlPixelRatio,n=t._fullLayout,i=n._size,a=[0,0,n.width*r,n.height*r],o={};function s(t,e,n,i,s,l){n*=r,i*=r,s*=r,l*=r;var u=e[t+"color"],c=e[t+"width"],f=String(u+c);f in o?o[f].data.push(NaN,NaN,n,i,s,l):o[f]={data:[n,i,s,l],join:"rect",thickness:c*r,color:u,viewport:a,range:a,overlay:!1}}for(e in n._splomSubplots){var l,c,f=n._plots[e],h=f.xaxis,p=f.yaxis,d=h._gridVals,v=p._gridVals,g=h._offset,y=h._length,m=p._length,x=i.b+p.domain[0]*i.h,b=-p._m,_=-b*p.r2l(p.range[0],p.calendar);if(h.showgrid)for(e=0;e<d.length;e++)l=g+h.l2p(d[e].x),s("grid",h,l,x,l,x+m);if(p.showgrid)for(e=0;e<v.length;e++)s("grid",p,g,c=x+_+b*v[e].x,g+y,c);u(t,h,p)&&(l=g+h.l2p(0),s("zeroline",h,l,x,l,x+m)),u(t,p,h)&&s("zeroline",p,g,c=x+_+0,g+y,c)}var w=[];for(e in o)w.push(o[e]);return w}(t))}t.exports={name:c,attr:s.attr,attrRegex:s.attrRegex,layoutAttributes:s.layoutAttributes,supplyLayoutDefaults:s.supplyLayoutDefaults,drawFramework:s.drawFramework,plot:function(t){var e=t._fullLayout,r=i.getModule(c),n=o(t.calcdata,r)[0];a(t,["ANGLE_instanced_arrays","OES_element_index_uint"],f)&&(e._hasOnlyLargeSploms&&p(t),r.plot(t,{},n))},drag:function(t){var e=t.calcdata,r=t._fullLayout;r._hasOnlyLargeSploms&&p(t);for(var n=0;n<e.length;n++){var i=e[n][0].trace,a=r._splomScenes[i.uid];"splom"===i.type&&a&&a.matrix&&h(t,i,a)}},updateGrid:p,clean:function(t,e,r,n){var i,a={};if(n._splomScenes){for(i=0;i<t.length;i++){var o=t[i];"splom"===o.type&&(a[o.uid]=1)}for(i=0;i<r.length;i++){var l=r[i];if(!a[l.uid]){var u=n._splomScenes[l.uid];u&&u.destroy&&u.destroy(),n._splomScenes[l.uid]=null,delete n._splomScenes[l.uid]}}}0===Object.keys(n._splomScenes||{}).length&&delete n._splomScenes,n._splomGrid&&!e._hasOnlyLargeSploms&&n._hasOnlyLargeSploms&&(n._splomGrid.destroy(),n._splomGrid=null,delete n._splomGrid),s.clean(t,e,r,n)},updateFx:s.updateFx,toSVG:s.toSVG,reglPrecompiled:f}},87625:function(t,e,r){"use strict";var n=r(71828),i=r(41675),a=r(47761).calcMarkerSize,o=r(47761).calcAxisExpansion,s=r(36922),l=r(19635).markerSelection,u=r(19635).markerStyle,c=r(10164),f=r(50606).BADNUM,h=r(78232).TOO_MANY_POINTS;t.exports=function(t,e){var r,p,d,v,g,y,m=e.dimensions,x=e._length,b={},_=b.cdata=[],w=b.data=[],T=e._visibleDims=[];function k(t,r){for(var i=t.makeCalcdata({v:r.values,vcalendar:e.calendar},"v"),a=0;a<i.length;a++)i[a]=i[a]===f?NaN:i[a];_.push(i),w.push("log"===t.type?n.simpleMap(i,t.c2l):i)}for(r=0;r<m.length;r++)if((d=m[r]).visible){if(v=i.getFromId(t,e._diag[r][0]),g=i.getFromId(t,e._diag[r][1]),v&&g&&v.type!==g.type){n.log("Skipping splom dimension "+r+" with conflicting axis types");continue}v?(k(v,d),g&&"category"===g.type&&(g._categories=v._categories.slice())):k(g,d),T.push(r)}for(s(t,e),n.extendFlat(b,u(t,e)),y=_.length*x>h?b.sizeAvg||Math.max(b.size,3):a(e,x),p=0;p<T.length;p++)d=m[r=T[p]],v=i.getFromId(t,e._diag[r][0])||{},g=i.getFromId(t,e._diag[r][1])||{},o(t,e,v,g,_[p],_[p],y);var A=c(t,e);return A.matrix||(A.matrix=!0),A.matrixOptions=b,A.selectedOptions=l(t,e,e.selected),A.unselectedOptions=l(t,e,e.unselected),[{x:!1,y:!1,t:{},trace:e}]}},25784:function(t,e,r){"use strict";var n=r(71828),i=r(85501),a=r(46880),o=r(34098),s=r(49508),l=r(94397),u=r(68645).isOpenSymbol;function c(t,e){function r(r,i){return n.coerce(t,e,a.dimensions,r,i)}r("label");var i=r("values");i&&i.length?r("visible"):e.visible=!1,r("axis.type"),r("axis.matches")}t.exports=function(t,e,r,f){function h(r,i){return n.coerce(t,e,a,r,i)}var p=i(t,e,{name:"dimensions",handleItemDefaults:c}),d=h("diagonal.visible"),v=h("showupperhalf"),g=h("showlowerhalf");if(l(e,p,"values")&&(d||v||g)){h("text"),h("hovertext"),h("hovertemplate"),h("xhoverformat"),h("yhoverformat"),s(t,e,r,f,h,{noAngleRef:!0,noStandOff:!0});var y=u(e.marker.symbol),m=o.isBubble(e);h("marker.line.width",y||m?1:0),function(t,e,r,n){var i,a,o=e.dimensions,s=o.length,l=e.showupperhalf,u=e.showlowerhalf,c=e.diagonal.visible,f=new Array(s),h=new Array(s);for(i=0;i<s;i++){var p=i?i+1:"";f[i]="x"+p,h[i]="y"+p}var d=n("xaxes",f),v=n("yaxes",h),g=e._diag=new Array(s);e._xaxes={},e._yaxes={};var y=[],m=[];function x(t,n,i,a){if(t){var o=t.charAt(0),s=r._splomAxes[o];if(e["_"+o+"axes"][t]=1,a.push(t),!(t in s)){var l=s[t]={};i&&(l.label=i.label||"",i.visible&&i.axis&&(i.axis.type&&(l.type=i.axis.type),i.axis.matches&&(l.matches=n)))}}}var b=!c&&!u,_=!c&&!l;for(e._axesDim={},i=0;i<s;i++){var w=o[i],T=0===i,k=i===s-1,A=T&&b||k&&_?void 0:d[i],M=T&&_||k&&b?void 0:v[i];x(A,M,w,y),x(M,A,w,m),g[i]=[A,M],e._axesDim[A]=i,e._axesDim[M]=i}for(i=0;i<y.length;i++)for(a=0;a<m.length;a++){var S=y[i]+m[a];i>a&&l||i<a&&u?r._splomSubplots[S]=1:i!==a||!c&&u&&l||(r._splomSubplots[S]=1)}(!u||!c&&l&&u)&&(r._splomGridDflt.xside="bottom",r._splomGridDflt.yside="left")}(0,e,f,h),n.coerceSelectionMarkerOpacity(e,h)}else e.visible=!1}},28801:function(t,e,r){"use strict";var n=r(71828),i=r(36922),a=r(19635).markerStyle;t.exports=function(t,e){var r=e.trace,o=t._fullLayout._splomScenes[r.uid];if(o){i(t,r),n.extendFlat(o.matrixOptions,a(t,r));var s=n.extendFlat({},o.matrixOptions,o.viewOpts);o.matrix.update(s,null)}}},35948:function(t,e){"use strict";e.getDimIndex=function(t,e){for(var r=e._id,n={x:0,y:1}[r.charAt(0)],i=t._visibleDims,a=0;a<i.length;a++){var o=i[a];if(t._diag[o][n]===r)return a}return!1}},8567:function(t,e,r){"use strict";var n=r(35948),i=r(20794).calcHover;t.exports={hoverPoints:function(t,e,r){var a=t.cd[0].trace,o=t.scene.matrixOptions.cdata,s=t.xa,l=t.ya,u=s.c2p(e),c=l.c2p(r),f=t.distance,h=n.getDimIndex(a,s),p=n.getDimIndex(a,l);if(!1===h||!1===p)return[t];for(var d,v,g=o[h],y=o[p],m=f,x=0;x<g.length;x++){var b=g[x],_=y[x],w=s.c2p(b)-u,T=l.c2p(_)-c,k=Math.sqrt(w*w+T*T);k<m&&(m=v=k,d=x)}return t.index=d,t.distance=m,t.dxy=v,void 0===d?[t]:[i(t,g,y,a)]}}},6419:function(t,e,r){"use strict";var n=r(65017);n.basePlotModule=r(16947),t.exports=n},79410:function(t,e,r){"use strict";var n=r(60487),i=r(71828),a=r(41675),o=r(64505).selectMode;function s(t,e){var r,s,l,u,c,f=t._fullLayout,h=f._size,p=e.trace,d=e.t,v=f._splomScenes[p.uid],g=v.matrixOptions,y=g.cdata,m=f._glcanvas.data()[0].regl,x=f.dragmode;if(0!==y.length){g.lower=p.showupperhalf,g.upper=p.showlowerhalf,g.diagonal=p.diagonal.visible;var b=p._visibleDims,_=y.length,w=v.viewOpts={};for(w.ranges=new Array(_),w.domains=new Array(_),c=0;c<b.length;c++){l=b[c];var T=w.ranges[c]=new Array(4),k=w.domains[c]=new Array(4);(r=a.getFromId(t,p._diag[l][0]))&&(T[0]=r._rl[0],T[2]=r._rl[1],k[0]=r.domain[0],k[2]=r.domain[1]),(s=a.getFromId(t,p._diag[l][1]))&&(T[1]=s._rl[0],T[3]=s._rl[1],k[1]=s.domain[0],k[3]=s.domain[1])}var A=t._context.plotGlPixelRatio,M=h.l*A,S=h.b*A,E=h.w*A,L=h.h*A;w.viewport=[M,S,E+M,L+S],!0===v.matrix&&(v.matrix=n(m));var C=f.clickmode.indexOf("select")>-1,P=!0;if(o(x)||p.selectedpoints||C){var O=p._length;if(p.selectedpoints){v.selectBatch=p.selectedpoints;var I=p.selectedpoints,D={};for(l=0;l<I.length;l++)D[I[l]]=!0;var z=[];for(l=0;l<O;l++)D[l]||z.push(l);v.unselectBatch=z}var R=d.xpx=new Array(_),F=d.ypx=new Array(_);for(c=0;c<b.length;c++){if(l=b[c],r=a.getFromId(t,p._diag[l][0]))for(R[c]=new Array(O),u=0;u<O;u++)R[c][u]=r.c2p(y[c][u]);if(s=a.getFromId(t,p._diag[l][1]))for(F[c]=new Array(O),u=0;u<O;u++)F[c][u]=s.c2p(y[c][u])}if(v.selectBatch.length||v.unselectBatch.length){var B=i.extendFlat({},g,v.unselectedOptions,w),N=i.extendFlat({},g,v.selectedOptions,w);v.matrix.update(B,N),P=!1}}else d.xpx=d.ypx=null;if(P){var j=i.extendFlat({},g,w);v.matrix.update(j,null)}}}t.exports=function(t,e,r){if(r.length)for(var n=0;n<r.length;n++)s(t,r[n][0])}},10164:function(t,e,r){"use strict";var n=r(71828);t.exports=function(t,e){var r=t._fullLayout,i=e.uid,a=r._splomScenes;a||(a=r._splomScenes={});var o={dirty:!0,selectBatch:[],unselectBatch:[]},s=a[e.uid];return s||((s=a[i]=n.extendFlat({},o,{matrix:!1,selectBatch:[],unselectBatch:[]})).draw=function(){s.matrix&&s.matrix.draw&&(s.selectBatch.length||s.unselectBatch.length?s.matrix.draw(s.unselectBatch,s.selectBatch):s.matrix.draw()),s.dirty=!1},s.destroy=function(){s.matrix&&s.matrix.destroy&&s.matrix.destroy(),s.matrixOptions=null,s.selectBatch=null,s.unselectBatch=null,s=null}),s.dirty||n.extendFlat(s,o),s}},8689:function(t,e,r){"use strict";var n=r(71828),i=n.pushUnique,a=r(34098),o=r(35948);t.exports=function(t,e){var r=t.cd,s=r[0].trace,l=r[0].t,u=t.scene,c=u.matrixOptions.cdata,f=t.xaxis,h=t.yaxis,p=[];if(!u)return p;var d=!a.hasMarkers(s)&&!a.hasText(s);if(!0!==s.visible||d)return p;var v=o.getDimIndex(s,f),g=o.getDimIndex(s,h);if(!1===v||!1===g)return p;var y=l.xpx[v],m=l.ypx[g],x=c[v],b=c[g],_=(t.scene.selectBatch||[]).slice(),w=[];if(!1!==e&&!e.degenerate)for(var T=0;T<x.length;T++)e.contains([y[T],m[T]],null,T,t)?(p.push({pointNumber:T,x:x[T],y:b[T]}),i(_,T)):-1!==_.indexOf(T)?i(_,T):w.push(T);var k=u.matrixOptions;return _.length||w.length?u.selectBatch.length||u.unselectBatch.length||u.matrix.update(u.unselectedOptions,n.extendFlat({},k,u.selectedOptions,u.viewOpts)):u.matrix.update(k,null),u.selectBatch=_,u.unselectBatch=w,p}},21850:function(t,e,r){"use strict";var n=r(50693),i=r(12663).axisHoverFormat,a=r(5386).fF,o=r(2418),s=r(9012),l=r(1426).extendFlat,u={x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},z:{valType:"data_array",editType:"calc+clearAxisTypes"},u:{valType:"data_array",editType:"calc"},v:{valType:"data_array",editType:"calc"},w:{valType:"data_array",editType:"calc"},starts:{x:{valType:"data_array",editType:"calc"},y:{valType:"data_array",editType:"calc"},z:{valType:"data_array",editType:"calc"},editType:"calc"},maxdisplayed:{valType:"integer",min:0,dflt:1e3,editType:"calc"},sizeref:{valType:"number",editType:"calc",min:0,dflt:1},text:{valType:"string",dflt:"",editType:"calc"},hovertext:{valType:"string",dflt:"",editType:"calc"},hovertemplate:a({editType:"calc"},{keys:["tubex","tubey","tubez","tubeu","tubev","tubew","norm","divergence"]}),uhoverformat:i("u",1),vhoverformat:i("v",1),whoverformat:i("w",1),xhoverformat:i("x"),yhoverformat:i("y"),zhoverformat:i("z"),showlegend:l({},s.showlegend,{dflt:!1})};l(u,n("",{colorAttr:"u/v/w norm",showScaleDflt:!0,editTypeOverride:"calc"})),["opacity","lightposition","lighting"].forEach((function(t){u[t]=o[t]})),u.hoverinfo=l({},s.hoverinfo,{editType:"calc",flags:["x","y","z","u","v","w","norm","divergence","text","name"],dflt:"x+y+z+norm+text+name"}),u.transforms=void 0,t.exports=u},88489:function(t,e,r){"use strict";var n=r(71828),i=r(78803);function a(t){var e,r,i,a,s,l,u,c,f,h,p,d,v=t._x,g=t._y,y=t._z,m=t._len,x=-1/0,b=1/0,_=-1/0,w=1/0,T=-1/0,k=1/0,A="";for(m&&(u=v[0],f=g[0],p=y[0]),m>1&&(c=v[m-1],h=g[m-1],d=y[m-1]),e=0;e<m;e++)x=Math.max(x,v[e]),b=Math.min(b,v[e]),_=Math.max(_,g[e]),w=Math.min(w,g[e]),T=Math.max(T,y[e]),k=Math.min(k,y[e]),a||v[e]===u||(a=!0,A+="x"),s||g[e]===f||(s=!0,A+="y"),l||y[e]===p||(l=!0,A+="z");a||(A+="x"),s||(A+="y"),l||(A+="z");var M=o(t._x),S=o(t._y),E=o(t._z);A=(A=(A=A.replace("x",(u>c?"-":"+")+"x")).replace("y",(f>h?"-":"+")+"y")).replace("z",(p>d?"-":"+")+"z");var L=function(){m=0,M=[],S=[],E=[]};(!m||m<M.length*S.length*E.length)&&L();var C=function(t){return"x"===t?v:"y"===t?g:y},P=function(t){return"x"===t?M:"y"===t?S:E},O=function(t){return t[m-1]<t[0]?-1:1},I=C(A[1]),D=C(A[3]),z=C(A[5]),R=P(A[1]).length,F=P(A[3]).length,B=P(A[5]).length,N=!1,j=function(t,e,r){return R*(F*t+e)+r},U=O(C(A[1])),V=O(C(A[3])),H=O(C(A[5]));for(e=0;e<B-1;e++){for(r=0;r<F-1;r++){for(i=0;i<R-1;i++){var q=j(e,r,i),G=j(e,r,i+1),Z=j(e,r+1,i),Y=j(e+1,r,i);if(I[q]*U<I[G]*U&&D[q]*V<D[Z]*V&&z[q]*H<z[Y]*H||(N=!0),N)break}if(N)break}if(N)break}return N&&(n.warn("Encountered arbitrary coordinates! Unable to input data grid."),L()),{xMin:b,yMin:w,zMin:k,xMax:x,yMax:_,zMax:T,Xs:M,Ys:S,Zs:E,len:m,fill:A}}function o(t){return n.distinctVals(t).vals}function s(t,e){if(void 0===e&&(e=t.length),n.isTypedArray(t))return t.subarray(0,e);for(var r=[],i=0;i<e;i++)r[i]=+t[i];return r}t.exports={calc:function(t,e){e._len=Math.min(e.u.length,e.v.length,e.w.length,e.x.length,e.y.length,e.z.length),e._u=s(e.u,e._len),e._v=s(e.v,e._len),e._w=s(e.w,e._len),e._x=s(e.x,e._len),e._y=s(e.y,e._len),e._z=s(e.z,e._len);var r=a(e);e._gridFill=r.fill,e._Xs=r.Xs,e._Ys=r.Ys,e._Zs=r.Zs,e._len=r.len;var n,o,l,u=0;e.starts&&(n=s(e.starts.x||[]),o=s(e.starts.y||[]),l=s(e.starts.z||[]),u=Math.min(n.length,o.length,l.length)),e._startsX=n||[],e._startsY=o||[],e._startsZ=l||[];var c,f=0,h=1/0;for(c=0;c<e._len;c++){var p=e._u[c],d=e._v[c],v=e._w[c],g=Math.sqrt(p*p+d*d+v*v);f=Math.max(f,g),h=Math.min(h,g)}for(i(t,e,{vals:[h,f],containerStr:"",cLetter:"c"}),c=0;c<u;c++){var y=n[c];r.xMax=Math.max(r.xMax,y),r.xMin=Math.min(r.xMin,y);var m=o[c];r.yMax=Math.max(r.yMax,m),r.yMin=Math.min(r.yMin,m);var x=l[c];r.zMax=Math.max(r.zMax,x),r.zMin=Math.min(r.zMin,x)}e._slen=u,e._normMax=f,e._xbnds=[r.xMin,r.xMax],e._ybnds=[r.yMin,r.yMax],e._zbnds=[r.zMin,r.zMax]},filter:s,processGrid:a}},90154:function(t,e,r){"use strict";var n=r(9330).gl_streamtube3d,i=n.createTubeMesh,a=r(71828),o=r(81697).parseColorScale,s=r(21081).extractOpts,l=r(90060),u={xaxis:0,yaxis:1,zaxis:2};function c(t,e){this.scene=t,this.uid=e,this.mesh=null,this.data=null}var f=c.prototype;function h(t){var e=t.length;return e>2?t.slice(1,e-1):2===e?[(t[0]+t[1])/2]:t}function p(t){var e=t.length;return 1===e?[.5,.5]:[t[1]-t[0],t[e-1]-t[e-2]]}function d(t,e){var r=t.fullSceneLayout,i=t.dataScale,c=e._len,f={};function d(t,e){var n=r[e],o=i[u[e]];return a.simpleMap(t,(function(t){return n.d2l(t)*o}))}if(f.vectors=l(d(e._u,"xaxis"),d(e._v,"yaxis"),d(e._w,"zaxis"),c),!c)return{positions:[],cells:[]};var v=d(e._Xs,"xaxis"),g=d(e._Ys,"yaxis"),y=d(e._Zs,"zaxis");if(f.meshgrid=[v,g,y],f.gridFill=e._gridFill,e._slen)f.startingPositions=l(d(e._startsX,"xaxis"),d(e._startsY,"yaxis"),d(e._startsZ,"zaxis"));else{for(var m=g[0],x=h(v),b=h(y),_=new Array(x.length*b.length),w=0,T=0;T<x.length;T++)for(var k=0;k<b.length;k++)_[w++]=[x[T],m,b[k]];f.startingPositions=_}f.colormap=o(e),f.tubeSize=e.sizeref,f.maxLength=e.maxdisplayed;var A=d(e._xbnds,"xaxis"),M=d(e._ybnds,"yaxis"),S=d(e._zbnds,"zaxis"),E=p(v),L=p(g),C=p(y),P=[[A[0]-E[0],M[0]-L[0],S[0]-C[0]],[A[1]+E[1],M[1]+L[1],S[1]+C[1]]],O=n(f,P),I=s(e);O.vertexIntensityBounds=[I.min/e._normMax,I.max/e._normMax];var D=e.lightposition;return O.lightPosition=[D.x,D.y,D.z],O.ambient=e.lighting.ambient,O.diffuse=e.lighting.diffuse,O.specular=e.lighting.specular,O.roughness=e.lighting.roughness,O.fresnel=e.lighting.fresnel,O.opacity=e.opacity,e._pad=O.tubeScale*e.sizeref*2,O}f.handlePick=function(t){var e=this.scene.fullSceneLayout,r=this.scene.dataScale;function n(t,n){var i=e[n],a=r[u[n]];return i.l2c(t)/a}if(t.object===this.mesh){var i=t.data.position,a=t.data.velocity;return t.traceCoordinate=[n(i[0],"xaxis"),n(i[1],"yaxis"),n(i[2],"zaxis"),n(a[0],"xaxis"),n(a[1],"yaxis"),n(a[2],"zaxis"),t.data.intensity*this.data._normMax,t.data.divergence],t.textLabel=this.data.hovertext||this.data.text,!0}},f.update=function(t){this.data=t;var e=d(this.scene,t);this.mesh.update(e)},f.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},t.exports=function(t,e){var r=t.glplot.gl,n=d(t,e),a=i(r,n),o=new c(t,e.uid);return o.mesh=a,o.data=e,a._trace=o,t.glplot.add(a),o}},22459:function(t,e,r){"use strict";var n=r(71828),i=r(1586),a=r(21850);t.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s("u"),u=s("v"),c=s("w"),f=s("x"),h=s("y"),p=s("z");l&&l.length&&u&&u.length&&c&&c.length&&f&&f.length&&h&&h.length&&p&&p.length?(s("starts.x"),s("starts.y"),s("starts.z"),s("maxdisplayed"),s("sizeref"),s("lighting.ambient"),s("lighting.diffuse"),s("lighting.specular"),s("lighting.roughness"),s("lighting.fresnel"),s("lightposition.x"),s("lightposition.y"),s("lightposition.z"),i(t,e,o,s,{prefix:"",cLetter:"c"}),s("text"),s("hovertext"),s("hovertemplate"),s("uhoverformat"),s("vhoverformat"),s("whoverformat"),s("xhoverformat"),s("yhoverformat"),s("zhoverformat"),e._length=null):e.visible=!1}},61510:function(t,e,r){"use strict";t.exports={moduleType:"trace",name:"streamtube",basePlotModule:r(58547),categories:["gl3d","showLegend"],attributes:r(21850),supplyDefaults:r(22459),colorbar:{min:"cmin",max:"cmax"},calc:r(88489).calc,plot:r(90154),eventData:function(t,e){return t.tubex=t.x,t.tubey=t.y,t.tubez=t.z,t.tubeu=e.traceCoordinate[3],t.tubev=e.traceCoordinate[4],t.tubew=e.traceCoordinate[5],t.norm=e.traceCoordinate[6],t.divergence=e.traceCoordinate[7],delete t.x,delete t.y,delete t.z,t},meta:{}}},57564:function(t,e,r){"use strict";var n=r(9012),i=r(5386).fF,a=r(5386).si,o=r(50693),s=r(27670).Y,l=r(34e3),u=r(7055),c=r(1426).extendFlat,f=r(79952).u;t.exports={labels:{valType:"data_array",editType:"calc"},parents:{valType:"data_array",editType:"calc"},values:{valType:"data_array",editType:"calc"},branchvalues:{valType:"enumerated",values:["remainder","total"],dflt:"remainder",editType:"calc"},count:{valType:"flaglist",flags:["branches","leaves"],dflt:"leaves",editType:"calc"},level:{valType:"any",editType:"plot",anim:!0},maxdepth:{valType:"integer",editType:"plot",dflt:-1},marker:c({colors:{valType:"data_array",editType:"calc"},line:{color:c({},l.marker.line.color,{dflt:null}),width:c({},l.marker.line.width,{dflt:1}),editType:"calc"},pattern:f,editType:"calc"},o("marker",{colorAttr:"colors",anim:!1})),leaf:{opacity:{valType:"number",editType:"style",min:0,max:1},editType:"plot"},text:l.text,textinfo:{valType:"flaglist",flags:["label","text","value","current path","percent root","percent entry","percent parent"],extras:["none"],editType:"plot"},texttemplate:a({editType:"plot"},{keys:u.eventDataKeys.concat(["label","value"])}),hovertext:l.hovertext,hoverinfo:c({},n.hoverinfo,{flags:["label","text","value","name","current path","percent root","percent entry","percent parent"],dflt:"label+text+value+name"}),hovertemplate:i({},{keys:u.eventDataKeys}),textfont:l.textfont,insidetextorientation:l.insidetextorientation,insidetextfont:l.insidetextfont,outsidetextfont:c({},l.outsidetextfont,{}),rotation:{valType:"angle",dflt:0,editType:"plot"},sort:l.sort,root:{color:{valType:"color",editType:"calc",dflt:"rgba(0,0,0,0)"},editType:"calc"},domain:s({name:"sunburst",trace:!0,editType:"calc"})}},66888:function(t,e,r){"use strict";var n=r(74875);e.name="sunburst",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},52147:function(t,e,r){"use strict";var n=r(674),i=r(92770),a=r(71828),o=r(21081).makeColorScaleFuncFromTrace,s=r(32354).makePullColorFn,l=r(32354).generateExtendedColors,u=r(21081).calc,c=r(50606).ALMOST_EQUAL,f={},h={},p={};function d(t,e,r){var n=0,i=t.children;if(i){for(var a=i.length,o=0;o<a;o++)n+=d(i[o],e,r);r.branches&&n++}else r.leaves&&n++;return t.value=t.data.data.value=n,e._values||(e._values=[]),e._values[t.data.data.i]=n,n}e.calc=function(t,e){var r,l,f,h,p,v,g=t._fullLayout,y=e.ids,m=a.isArrayOrTypedArray(y),x=e.labels,b=e.parents,_=e.values,w=a.isArrayOrTypedArray(_),T=[],k={},A={},M=function(t){return t||"number"==typeof t},S=function(t){return!w||i(_[t])&&_[t]>=0};m?(r=Math.min(y.length,b.length),l=function(t){return M(y[t])&&S(t)},f=function(t){return String(y[t])}):(r=Math.min(x.length,b.length),l=function(t){return M(x[t])&&S(t)},f=function(t){return String(x[t])}),w&&(r=Math.min(r,_.length));for(var E=0;E<r;E++)if(l(E)){var L=f(E),C=M(b[E])?String(b[E]):"",P={i:E,id:L,pid:C,label:M(x[E])?String(x[E]):""};w&&(P.v=+_[E]),T.push(P),p=L,k[h=C]?k[h].push(p):k[h]=[p],A[p]=1}if(k[""]){if(k[""].length>1){for(var O=a.randstr(),I=0;I<T.length;I++)""===T[I].pid&&(T[I].pid=O);T.unshift({hasMultipleRoots:!0,id:O,pid:"",label:""})}}else{var D,z=[];for(D in k)A[D]||z.push(D);if(1!==z.length)return a.warn(["Multiple implied roots, cannot build",e.type,"hierarchy of",e.name+".","These roots include:",z.join(", ")].join(" "));D=z[0],T.unshift({hasImpliedRoot:!0,id:D,pid:"",label:D})}try{v=n.stratify().id((function(t){return t.id})).parentId((function(t){return t.pid}))(T)}catch(t){return a.warn(["Failed to build",e.type,"hierarchy of",e.name+".","Error:",t.message].join(" "))}var R=n.hierarchy(v),F=!1;if(w)switch(e.branchvalues){case"remainder":R.sum((function(t){return t.data.v}));break;case"total":R.each((function(t){var r=t.data.data,n=r.v;if(t.children){var i=t.children.reduce((function(t,e){return t+e.data.data.v}),0);if((r.hasImpliedRoot||r.hasMultipleRoots)&&(n=i),n<i*c)return F=!0,a.warn(["Total value for node",t.data.data.id,"of",e.name,"is smaller than the sum of its children.","\nparent value =",n,"\nchildren sum =",i].join(" "))}t.value=n}))}else d(R,e,{branches:-1!==e.count.indexOf("branches"),leaves:-1!==e.count.indexOf("leaves")});if(!F){var B,N;e.sort&&R.sort((function(t,e){return e.value-t.value}));var j=e.marker.colors||[],U=!!j.length;return e._hasColorscale?(U||(j=w?e.values:e._values),u(t,e,{vals:j,containerStr:"marker",cLetter:"c"}),N=o(e.marker)):B=s(g["_"+e.type+"colormap"]),R.each((function(t){var r=t.data.data;r.color=e._hasColorscale?N(j[r.i]):B(j[r.i],r.id)})),T[0].hierarchy=R,T}},e._runCrossTraceCalc=function(t,e){var r=e._fullLayout,n=e.calcdata,i=r[t+"colorway"],a=r["_"+t+"colormap"];r["extend"+t+"colors"]&&(i=l(i,"icicle"===t?p:"treemap"===t?h:f));var o,s=0;function u(t){var e=t.data.data,r=e.id;!1===e.color&&(a[r]?e.color=a[r]:t.parent?t.parent.parent?e.color=t.parent.data.data.color:(a[r]=e.color=i[s%i.length],s++):e.color=o)}for(var c=0;c<n.length;c++){var d=n[c][0];d.trace.type===t&&d.hierarchy&&(o=d.trace.root.color,d.hierarchy.each(u))}},e.crossTraceCalc=function(t){return e._runCrossTraceCalc("sunburst",t)}},7055:function(t){"use strict";t.exports={CLICK_TRANSITION_TIME:750,CLICK_TRANSITION_EASING:"linear",eventDataKeys:["currentPath","root","entry","percentRoot","percentEntry","percentParent"]}},17094:function(t,e,r){"use strict";var n=r(71828),i=r(57564),a=r(27670).c,o=r(90769).handleText,s=r(37434).handleMarkerDefaults,l=r(21081),u=l.hasColorscale,c=l.handleDefaults;t.exports=function(t,e,r,l){function f(r,a){return n.coerce(t,e,i,r,a)}var h=f("labels"),p=f("parents");if(h&&h.length&&p&&p.length){var d=f("values");d&&d.length?f("branchvalues"):f("count"),f("level"),f("maxdepth"),s(t,e,l,f);var v=e._hasColorscale=u(t,"marker","colors")||(t.marker||{}).coloraxis;v&&c(t,e,l,f,{prefix:"marker.",cLetter:"c"}),f("leaf.opacity",v?1:.7);var g=f("text");f("texttemplate"),e.texttemplate||f("textinfo",Array.isArray(g)?"text+label":"label"),f("hovertext"),f("hovertemplate"),o(t,e,l,f,"auto",{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),f("insidetextorientation"),f("sort"),f("rotation"),f("root.color"),a(e,l,f),e._length=null}else e.visible=!1}},43467:function(t,e,r){"use strict";var n=r(91424),i=r(7901);t.exports=function(t,e,r,a,o){var s=e.data.data,l=s.i,u=o||s.color;if(l>=0){e.i=s.i;var c=r.marker;c.pattern&&c.colors&&c.pattern.shape||(c.color=u,e.color=u),n.pointStyle(t,r,a,e)}else i.fill(t,u)}},83523:function(t,e,r){"use strict";var n=r(39898),i=r(73972),a=r(23469).appendArrayPointValue,o=r(30211),s=r(71828),l=r(11086),u=r(2791),c=r(53581).formatPieValue;function f(t,e,r){for(var n=t.data.data,i={curveNumber:e.index,pointNumber:n.i,data:e._input,fullData:e},o=0;o<r.length;o++){var s=r[o];s in t&&(i[s]=t[s])}return"parentString"in t&&!u.isHierarchyRoot(t)&&(i.parent=t.parentString),a(i,e,n.i),i}t.exports=function(t,e,r,a,h){var p=a[0],d=p.trace,v=p.hierarchy,g="sunburst"===d.type,y="treemap"===d.type||"icicle"===d.type;"_hasHoverLabel"in d||(d._hasHoverLabel=!1),"_hasHoverEvent"in d||(d._hasHoverEvent=!1),t.on("mouseover",(function(i){var a=r._fullLayout;if(!r._dragging&&!1!==a.hovermode){var l,m=r._fullData[d.index],x=i.data.data,b=x.i,_=u.isHierarchyRoot(i),w=u.getParent(v,i),T=u.getValue(i),k=function(t){return s.castOption(m,b,t)},A=k("hovertemplate"),M=o.castHoverinfo(m,a,b),S=a.separators;if(A||M&&"none"!==M&&"skip"!==M){var E,L;g&&(E=p.cx+i.pxmid[0]*(1-i.rInscribed),L=p.cy+i.pxmid[1]*(1-i.rInscribed)),y&&(E=i._hoverX,L=i._hoverY);var C,P={},O=[],I=[],D=function(t){return-1!==O.indexOf(t)};M&&(O="all"===M?m._module.attributes.hoverinfo.flags:M.split("+")),P.label=x.label,D("label")&&P.label&&I.push(P.label),x.hasOwnProperty("v")&&(P.value=x.v,P.valueLabel=c(P.value,S),D("value")&&I.push(P.valueLabel)),P.currentPath=i.currentPath=u.getPath(i.data),D("current path")&&!_&&I.push(P.currentPath);var z=[],R=function(){-1===z.indexOf(C)&&(I.push(C),z.push(C))};P.percentParent=i.percentParent=T/u.getValue(w),P.parent=i.parentString=u.getPtLabel(w),D("percent parent")&&(C=u.formatPercent(P.percentParent,S)+" of "+P.parent,R()),P.percentEntry=i.percentEntry=T/u.getValue(e),P.entry=i.entry=u.getPtLabel(e),!D("percent entry")||_||i.onPathbar||(C=u.formatPercent(P.percentEntry,S)+" of "+P.entry,R()),P.percentRoot=i.percentRoot=T/u.getValue(v),P.root=i.root=u.getPtLabel(v),D("percent root")&&!_&&(C=u.formatPercent(P.percentRoot,S)+" of "+P.root,R()),P.text=k("hovertext")||k("text"),D("text")&&(C=P.text,s.isValidTextValue(C)&&I.push(C)),l=[f(i,m,h.eventDataKeys)];var F={trace:m,y:L,_x0:i._x0,_x1:i._x1,_y0:i._y0,_y1:i._y1,text:I.join("<br>"),name:A||D("name")?m.name:void 0,color:k("hoverlabel.bgcolor")||x.color,borderColor:k("hoverlabel.bordercolor"),fontFamily:k("hoverlabel.font.family"),fontSize:k("hoverlabel.font.size"),fontColor:k("hoverlabel.font.color"),nameLength:k("hoverlabel.namelength"),textAlign:k("hoverlabel.align"),hovertemplate:A,hovertemplateLabels:P,eventData:l};g&&(F.x0=E-i.rInscribed*i.rpx1,F.x1=E+i.rInscribed*i.rpx1,F.idealAlign=i.pxmid[0]<0?"left":"right"),y&&(F.x=E,F.idealAlign=E<0?"left":"right");var B=[];o.loneHover(F,{container:a._hoverlayer.node(),outerContainer:a._paper.node(),gd:r,inOut_bbox:B}),l[0].bbox=B[0],d._hasHoverLabel=!0}if(y){var N=t.select("path.surface");h.styleOne(N,i,m,r,{hovered:!0})}d._hasHoverEvent=!0,r.emit("plotly_hover",{points:l||[f(i,m,h.eventDataKeys)],event:n.event})}})),t.on("mouseout",(function(e){var i=r._fullLayout,a=r._fullData[d.index],s=n.select(this).datum();if(d._hasHoverEvent&&(e.originalEvent=n.event,r.emit("plotly_unhover",{points:[f(s,a,h.eventDataKeys)],event:n.event}),d._hasHoverEvent=!1),d._hasHoverLabel&&(o.loneUnhover(i._hoverlayer.node()),d._hasHoverLabel=!1),y){var l=t.select("path.surface");h.styleOne(l,s,a,r,{hovered:!1})}})),t.on("click",(function(t){var e=r._fullLayout,a=r._fullData[d.index],s=g&&(u.isHierarchyRoot(t)||u.isLeaf(t)),c=u.getPtId(t),p=u.isEntry(t)?u.findEntryWithChild(v,c):u.findEntryWithLevel(v,c),y=u.getPtId(p),m={points:[f(t,a,h.eventDataKeys)],event:n.event};s||(m.nextLevel=y);var x=l.triggerHandler(r,"plotly_"+d.type+"click",m);if(!1!==x&&e.hovermode&&(r._hoverdata=[f(t,a,h.eventDataKeys)],o.click(r,n.event)),!s&&!1!==x&&!r._dragging&&!r._transitioning){i.call("_storeDirectGUIEdit",a,e._tracePreGUI[a.uid],{level:a.level});var b={data:[{level:y}],traces:[d.index]},_={frame:{redraw:!1,duration:h.transitionTime},transition:{duration:h.transitionTime,easing:h.transitionEasing},mode:"immediate",fromcurrent:!0};o.loneUnhover(e._hoverlayer.node()),i.call("animate",r,b,_)}}))}},2791:function(t,e,r){"use strict";var n=r(71828),i=r(7901),a=r(6964),o=r(53581);function s(t){return t.data.data.pid}e.findEntryWithLevel=function(t,r){var n;return r&&t.eachAfter((function(t){if(e.getPtId(t)===r)return n=t.copy()})),n||t},e.findEntryWithChild=function(t,r){var n;return t.eachAfter((function(t){for(var i=t.children||[],a=0;a<i.length;a++){var o=i[a];if(e.getPtId(o)===r)return n=t.copy()}})),n||t},e.isEntry=function(t){return!t.parent},e.isLeaf=function(t){return!t.children},e.getPtId=function(t){return t.data.data.id},e.getPtLabel=function(t){return t.data.data.label},e.getValue=function(t){return t.value},e.isHierarchyRoot=function(t){return""===s(t)},e.setSliceCursor=function(t,r,n){var i=n.isTransitioning;if(!i){var o=t.datum();i=n.hideOnRoot&&e.isHierarchyRoot(o)||n.hideOnLeaves&&e.isLeaf(o)}a(t,i?null:"pointer")},e.getInsideTextFontKey=function(t,e,r,i,a){var o=(a||{}).onPathbar?"pathbar.textfont":"insidetextfont",s=r.data.data.i;return n.castOption(e,s,o+"."+t)||n.castOption(e,s,"textfont."+t)||i.size},e.getOutsideTextFontKey=function(t,e,r,i){var a=r.data.data.i;return n.castOption(e,a,"outsidetextfont."+t)||n.castOption(e,a,"textfont."+t)||i.size},e.isOutsideText=function(t,r){return!t._hasColorscale&&e.isHierarchyRoot(r)},e.determineTextFont=function(t,r,a,o){return e.isOutsideText(t,r)?function(t,r,n){return{color:e.getOutsideTextFontKey("color",t,r,n),family:e.getOutsideTextFontKey("family",t,r,n),size:e.getOutsideTextFontKey("size",t,r,n)}}(t,r,a):function(t,r,a,o){var s=(o||{}).onPathbar,l=r.data.data,u=l.i,c=n.castOption(t,u,(s?"pathbar.textfont":"insidetextfont")+".color");return!c&&t._input.textfont&&(c=n.castOption(t._input,u,"textfont.color")),{color:c||i.contrast(l.color),family:e.getInsideTextFontKey("family",t,r,a,o),size:e.getInsideTextFontKey("size",t,r,a,o)}}(t,r,a,o)},e.hasTransition=function(t){return!!(t&&t.duration>0)},e.getMaxDepth=function(t){return t.maxdepth>=0?t.maxdepth:1/0},e.isHeader=function(t,r){return!(e.isLeaf(t)||t.depth===r._maxDepth-1)},e.getParent=function(t,r){return e.findEntryWithLevel(t,s(r))},e.listPath=function(t,r){var n=t.parent;if(!n)return[];var i=r?[n.data[r]]:[n];return e.listPath(n,r).concat(i)},e.getPath=function(t){return e.listPath(t,"label").join("/")+"/"},e.formatValue=o.formatPieValue,e.formatPercent=function(t,e){var r=n.formatPercent(t,0);return"0%"===r&&(r=o.formatPiePercent(t,e)),r}},87619:function(t,e,r){"use strict";t.exports={moduleType:"trace",name:"sunburst",basePlotModule:r(66888),categories:[],animatable:!0,attributes:r(57564),layoutAttributes:r(2654),supplyDefaults:r(17094),supplyLayoutDefaults:r(57034),calc:r(52147).calc,crossTraceCalc:r(52147).crossTraceCalc,plot:r(24714).plot,style:r(29969).style,colorbar:r(4898),meta:{}}},2654:function(t){"use strict";t.exports={sunburstcolorway:{valType:"colorlist",editType:"calc"},extendsunburstcolors:{valType:"boolean",dflt:!0,editType:"calc"}}},57034:function(t,e,r){"use strict";var n=r(71828),i=r(2654);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r("sunburstcolorway",e.colorway),r("extendsunburstcolors")}},24714:function(t,e,r){"use strict";var n=r(39898),i=r(674),a=r(81684).sX,o=r(91424),s=r(71828),l=r(63893),u=r(72597),c=u.recordMinTextSize,f=u.clearMinTextSize,h=r(14575),p=r(53581).getRotationAngle,d=h.computeTransform,v=h.transformInsideText,g=r(29969).styleOne,y=r(16688).resizeText,m=r(83523),x=r(7055),b=r(2791);function _(t,r,u,f){var h=t._context.staticPlot,y=t._fullLayout,_=!y.uniformtext.mode&&b.hasTransition(f),T=n.select(u).selectAll("g.slice"),k=r[0],A=k.trace,M=k.hierarchy,S=b.findEntryWithLevel(M,A.level),E=b.getMaxDepth(A),L=y._size,C=A.domain,P=L.w*(C.x[1]-C.x[0]),O=L.h*(C.y[1]-C.y[0]),I=.5*Math.min(P,O),D=k.cx=L.l+L.w*(C.x[1]+C.x[0])/2,z=k.cy=L.t+L.h*(1-C.y[0])-O/2;if(!S)return T.remove();var R=null,F={};_&&T.each((function(t){F[b.getPtId(t)]={rpx0:t.rpx0,rpx1:t.rpx1,x0:t.x0,x1:t.x1,transform:t.transform},!R&&b.isEntry(t)&&(R=t)}));var B=function(t){return i.partition().size([2*Math.PI,t.height+1])(t)}(S).descendants(),N=S.height+1,j=0,U=E;k.hasMultipleRoots&&b.isHierarchyRoot(S)&&(B=B.slice(1),N-=1,j=1,U+=1),B=B.filter((function(t){return t.y1<=U}));var V=p(A.rotation);V&&B.forEach((function(t){t.x0+=V,t.x1+=V}));var H=Math.min(N,E),q=function(t){return(t-j)/H*I},G=function(t,e){return[t*Math.cos(e),-t*Math.sin(e)]},Z=function(t){return s.pathAnnulus(t.rpx0,t.rpx1,t.x0,t.x1,D,z)},Y=function(t){return D+w(t)[0]*(t.transform.rCenter||0)+(t.transform.x||0)},W=function(t){return z+w(t)[1]*(t.transform.rCenter||0)+(t.transform.y||0)};(T=T.data(B,b.getPtId)).enter().append("g").classed("slice",!0),_?T.exit().transition().each((function(){var t=n.select(this);t.select("path.surface").transition().attrTween("d",(function(t){var e=function(t){var e,r=b.getPtId(t),n=F[r],i=F[b.getPtId(S)];if(i){var o=(t.x1>i.x1?2*Math.PI:0)+V;e=t.rpx1<i.rpx1?{x0:t.x0,x1:t.x1,rpx0:0,rpx1:0}:{x0:o,x1:o,rpx0:t.rpx0,rpx1:t.rpx1}}else{var s,l=b.getPtId(t.parent);T.each((function(t){if(b.getPtId(t)===l)return s=t}));var u,c=s.children;c.forEach((function(t,e){if(b.getPtId(t)===r)return u=e}));var f=c.length,h=a(s.x0,s.x1);e={rpx0:I,rpx1:I,x0:h(u/f),x1:h((u+1)/f)}}return a(n,e)}(t);return function(t){return Z(e(t))}})),t.select("g.slicetext").attr("opacity",0)})).remove():T.exit().remove(),T.order();var X=null;if(_&&R){var J=b.getPtId(R);T.each((function(t){null===X&&b.getPtId(t)===J&&(X=t.x1)}))}var K=T;function $(t){var e=t.parent,r=F[b.getPtId(e)],n={};if(r){var i=e.children,o=i.indexOf(t),s=i.length,l=a(r.x0,r.x1);n.x0=l(o/s),n.x1=l(o/s)}else n.x0=n.x1=0;return n}_&&(K=K.transition().each("end",(function(){var e=n.select(this);b.setSliceCursor(e,t,{hideOnRoot:!0,hideOnLeaves:!0,isTransitioning:!1})}))),K.each((function(i){var u=n.select(this),f=s.ensureSingle(u,"path","surface",(function(t){t.style("pointer-events",h?"none":"all")}));i.rpx0=q(i.y0),i.rpx1=q(i.y1),i.xmid=(i.x0+i.x1)/2,i.pxmid=G(i.rpx1,i.xmid),i.midangle=-(i.xmid-Math.PI/2),i.startangle=-(i.x0-Math.PI/2),i.stopangle=-(i.x1-Math.PI/2),i.halfangle=.5*Math.min(s.angleDelta(i.x0,i.x1)||Math.PI,Math.PI),i.ring=1-i.rpx0/i.rpx1,i.rInscribed=function(t){return 0===t.rpx0&&s.isFullCircle([t.x0,t.x1])?1:Math.max(0,Math.min(1/(1+1/Math.sin(t.halfangle)),t.ring/2))}(i),_?f.transition().attrTween("d",(function(t){var e=function(t){var e,r=F[b.getPtId(t)],n={x0:t.x0,x1:t.x1,rpx0:t.rpx0,rpx1:t.rpx1};if(r)e=r;else if(R)if(t.parent)if(X){var i=(t.x1>X?2*Math.PI:0)+V;e={x0:i,x1:i}}else e={rpx0:I,rpx1:I},s.extendFlat(e,$(t));else e={rpx0:0,rpx1:0};else e={x0:V,x1:V};return a(e,n)}(t);return function(t){return Z(e(t))}})):f.attr("d",Z),u.call(m,S,t,r,{eventDataKeys:x.eventDataKeys,transitionTime:x.CLICK_TRANSITION_TIME,transitionEasing:x.CLICK_TRANSITION_EASING}).call(b.setSliceCursor,t,{hideOnRoot:!0,hideOnLeaves:!0,isTransitioning:t._transitioning}),f.call(g,i,A,t);var p=s.ensureSingle(u,"g","slicetext"),w=s.ensureSingle(p,"text","",(function(t){t.attr("data-notex",1)})),T=s.ensureUniformFontSize(t,b.determineTextFont(A,i,y.font));w.text(e.formatSliceLabel(i,S,A,r,y)).classed("slicetext",!0).attr("text-anchor","middle").call(o.font,T).call(l.convertToTspans,t);var M=o.bBox(w.node());i.transform=v(M,i,k),i.transform.targetX=Y(i),i.transform.targetY=W(i);var E=function(t,e){var r=t.transform;return d(r,e),r.fontSize=T.size,c(A.type,r,y),s.getTextTransform(r)};_?w.transition().attrTween("transform",(function(t){var e=function(t){var e,r=F[b.getPtId(t)],n=t.transform;if(r)e=r;else if(e={rpx1:t.rpx1,transform:{textPosAngle:n.textPosAngle,scale:0,rotate:n.rotate,rCenter:n.rCenter,x:n.x,y:n.y}},R)if(t.parent)if(X){var i=t.x1>X?2*Math.PI:0;e.x0=e.x1=i}else s.extendFlat(e,$(t));else e.x0=e.x1=V;else e.x0=e.x1=V;var o=a(e.transform.textPosAngle,t.transform.textPosAngle),l=a(e.rpx1,t.rpx1),u=a(e.x0,t.x0),f=a(e.x1,t.x1),h=a(e.transform.scale,n.scale),p=a(e.transform.rotate,n.rotate),d=0===n.rCenter?3:0===e.transform.rCenter?1/3:1,v=a(e.transform.rCenter,n.rCenter);return function(t){var e=l(t),r=u(t),i=f(t),a=function(t){return v(Math.pow(t,d))}(t),s={pxmid:G(e,(r+i)/2),rpx1:e,transform:{textPosAngle:o(t),rCenter:a,x:n.x,y:n.y}};return c(A.type,n,y),{transform:{targetX:Y(s),targetY:W(s),scale:h(t),rotate:p(t),rCenter:a}}}}(t);return function(t){return E(e(t),M)}})):w.attr("transform",E(i,M))}))}function w(t){return e=t.rpx1,r=t.transform.textPosAngle,[e*Math.sin(r),-e*Math.cos(r)];var e,r}e.plot=function(t,e,r,i){var a,o,s=t._fullLayout,l=s._sunburstlayer,u=!r,c=!s.uniformtext.mode&&b.hasTransition(r);f("sunburst",s),(a=l.selectAll("g.trace.sunburst").data(e,(function(t){return t[0].trace.uid}))).enter().append("g").classed("trace",!0).classed("sunburst",!0).attr("stroke-linejoin","round"),a.order(),c?(i&&(o=i()),n.transition().duration(r.duration).ease(r.easing).each("end",(function(){o&&o()})).each("interrupt",(function(){o&&o()})).each((function(){l.selectAll("g.trace").each((function(e){_(t,e,this,r)}))}))):(a.each((function(e){_(t,e,this,r)})),s.uniformtext.mode&&y(t,s._sunburstlayer.selectAll(".trace"),"sunburst")),u&&a.exit().remove()},e.formatSliceLabel=function(t,e,r,n,i){var a=r.texttemplate,o=r.textinfo;if(!(a||o&&"none"!==o))return"";var l=i.separators,u=n[0],c=t.data.data,f=u.hierarchy,h=b.isHierarchyRoot(t),p=b.getParent(f,t),d=b.getValue(t);if(!a){var v,g=o.split("+"),y=function(t){return-1!==g.indexOf(t)},m=[];if(y("label")&&c.label&&m.push(c.label),c.hasOwnProperty("v")&&y("value")&&m.push(b.formatValue(c.v,l)),!h){y("current path")&&m.push(b.getPath(t.data));var x=0;y("percent parent")&&x++,y("percent entry")&&x++,y("percent root")&&x++;var _=x>1;if(x){var w,T=function(t){v=b.formatPercent(w,l),_&&(v+=" of "+t),m.push(v)};y("percent parent")&&!h&&(w=d/b.getValue(p),T("parent")),y("percent entry")&&(w=d/b.getValue(e),T("entry")),y("percent root")&&(w=d/b.getValue(f),T("root"))}}return y("text")&&(v=s.castOption(r,c.i,"text"),s.isValidTextValue(v)&&m.push(v)),m.join("<br>")}var k=s.castOption(r,c.i,"texttemplate");if(!k)return"";var A={};c.label&&(A.label=c.label),c.hasOwnProperty("v")&&(A.value=c.v,A.valueLabel=b.formatValue(c.v,l)),A.currentPath=b.getPath(t.data),h||(A.percentParent=d/b.getValue(p),A.percentParentLabel=b.formatPercent(A.percentParent,l),A.parent=b.getPtLabel(p)),A.percentEntry=d/b.getValue(e),A.percentEntryLabel=b.formatPercent(A.percentEntry,l),A.entry=b.getPtLabel(e),A.percentRoot=d/b.getValue(f),A.percentRootLabel=b.formatPercent(A.percentRoot,l),A.root=b.getPtLabel(f),c.hasOwnProperty("color")&&(A.color=c.color);var M=s.castOption(r,c.i,"text");return(s.isValidTextValue(M)||""===M)&&(A.text=M),A.customdata=s.castOption(r,c.i,"customdata"),s.texttemplateString(k,A,i._d3locale,A,r._meta||{})}},29969:function(t,e,r){"use strict";var n=r(39898),i=r(7901),a=r(71828),o=r(72597).resizeText,s=r(43467);function l(t,e,r,n){var o=e.data.data,l=!e.children,u=o.i,c=a.castOption(r,u,"marker.line.color")||i.defaultLine,f=a.castOption(r,u,"marker.line.width")||0;t.call(s,e,r,n).style("stroke-width",f).call(i.stroke,c).style("opacity",l?r.leaf.opacity:null)}t.exports={style:function(t){var e=t._fullLayout._sunburstlayer.selectAll(".trace");o(t,e,"sunburst"),e.each((function(e){var r=n.select(this),i=e[0].trace;r.style("opacity",i.opacity),r.selectAll("path.surface").each((function(e){n.select(this).call(l,e,i,t)}))}))},styleOne:l}},54532:function(t,e,r){"use strict";var n=r(7901),i=r(50693),a=r(12663).axisHoverFormat,o=r(5386).fF,s=r(9012),l=r(1426).extendFlat,u=r(30962).overrideAll;function c(t){return{show:{valType:"boolean",dflt:!1},start:{valType:"number",dflt:null,editType:"plot"},end:{valType:"number",dflt:null,editType:"plot"},size:{valType:"number",dflt:null,min:0,editType:"plot"},project:{x:{valType:"boolean",dflt:!1},y:{valType:"boolean",dflt:!1},z:{valType:"boolean",dflt:!1}},color:{valType:"color",dflt:n.defaultLine},usecolormap:{valType:"boolean",dflt:!1},width:{valType:"number",min:1,max:16,dflt:2},highlight:{valType:"boolean",dflt:!0},highlightcolor:{valType:"color",dflt:n.defaultLine},highlightwidth:{valType:"number",min:1,max:16,dflt:2}}}var f=t.exports=u(l({z:{valType:"data_array"},x:{valType:"data_array"},y:{valType:"data_array"},text:{valType:"string",dflt:"",arrayOk:!0},hovertext:{valType:"string",dflt:"",arrayOk:!0},hovertemplate:o(),xhoverformat:a("x"),yhoverformat:a("y"),zhoverformat:a("z"),connectgaps:{valType:"boolean",dflt:!1,editType:"calc"},surfacecolor:{valType:"data_array"}},i("",{colorAttr:"z or surfacecolor",showScaleDflt:!0,autoColorDflt:!1,editTypeOverride:"calc"}),{contours:{x:c(),y:c(),z:c()},hidesurface:{valType:"boolean",dflt:!1},lightposition:{x:{valType:"number",min:-1e5,max:1e5,dflt:10},y:{valType:"number",min:-1e5,max:1e5,dflt:1e4},z:{valType:"number",min:-1e5,max:1e5,dflt:0}},lighting:{ambient:{valType:"number",min:0,max:1,dflt:.8},diffuse:{valType:"number",min:0,max:1,dflt:.8},specular:{valType:"number",min:0,max:2,dflt:.05},roughness:{valType:"number",min:0,max:1,dflt:.5},fresnel:{valType:"number",min:0,max:5,dflt:.2}},opacity:{valType:"number",min:0,max:1,dflt:1},opacityscale:{valType:"any",editType:"calc"},_deprecated:{zauto:l({},i.zauto,{}),zmin:l({},i.zmin,{}),zmax:l({},i.zmax,{})},hoverinfo:l({},s.hoverinfo),showlegend:l({},s.showlegend,{dflt:!1})}),"calc","nested");f.x.editType=f.y.editType=f.z.editType="calc+clearAxisTypes",f.transforms=void 0},18396:function(t,e,r){"use strict";var n=r(78803);t.exports=function(t,e){e.surfacecolor?n(t,e,{vals:e.surfacecolor,containerStr:"",cLetter:"c"}):n(t,e,{vals:e.z,containerStr:"",cLetter:"c"})}},43768:function(t,e,r){"use strict";var n=r(9330).gl_surface3d,i=r(9330).ndarray,a=r(9330).ndarray_linear_interpolate.d2,o=r(824),s=r(43907),l=r(71828).isArrayOrTypedArray,u=r(81697).parseColorScale,c=r(78614),f=r(21081).extractOpts;function h(t,e,r){this.scene=t,this.uid=r,this.surface=e,this.data=null,this.showContour=[!1,!1,!1],this.contourStart=[null,null,null],this.contourEnd=[null,null,null],this.contourSize=[0,0,0],this.minValues=[1/0,1/0,1/0],this.maxValues=[-1/0,-1/0,-1/0],this.dataScaleX=1,this.dataScaleY=1,this.refineData=!0,this.objectOffset=[0,0,0]}var p=h.prototype;p.getXat=function(t,e,r,n){var i=l(this.data.x)?l(this.data.x[0])?this.data.x[e][t]:this.data.x[t]:t;return void 0===r?i:n.d2l(i,0,r)},p.getYat=function(t,e,r,n){var i=l(this.data.y)?l(this.data.y[0])?this.data.y[e][t]:this.data.y[e]:e;return void 0===r?i:n.d2l(i,0,r)},p.getZat=function(t,e,r,n){var i=this.data.z[e][t];return null===i&&this.data.connectgaps&&this.data._interpolatedZ&&(i=this.data._interpolatedZ[e][t]),void 0===r?i:n.d2l(i,0,r)},p.handlePick=function(t){if(t.object===this.surface){var e=(t.data.index[0]-1)/this.dataScaleX-1,r=(t.data.index[1]-1)/this.dataScaleY-1,n=Math.max(Math.min(Math.round(e),this.data.z[0].length-1),0),i=Math.max(Math.min(Math.round(r),this.data._ylength-1),0);t.index=[n,i],t.traceCoordinate=[this.getXat(n,i),this.getYat(n,i),this.getZat(n,i)],t.dataCoordinate=[this.getXat(n,i,this.data.xcalendar,this.scene.fullSceneLayout.xaxis),this.getYat(n,i,this.data.ycalendar,this.scene.fullSceneLayout.yaxis),this.getZat(n,i,this.data.zcalendar,this.scene.fullSceneLayout.zaxis)];for(var a=0;a<3;a++){null!=t.dataCoordinate[a]&&(t.dataCoordinate[a]*=this.scene.dataScale[a])}var o=this.data.hovertext||this.data.text;return Array.isArray(o)&&o[i]&&void 0!==o[i][n]?t.textLabel=o[i][n]:t.textLabel=o||"",t.data.dataCoordinate=t.dataCoordinate.slice(),this.surface.highlight(t.data),this.scene.glplot.spikes.position=t.dataCoordinate,!0}};var d=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131,2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999];function v(t,e){if(t<e)return 0;for(var r=0;0===Math.floor(t%e);)t/=e,r++;return r}function g(t){for(var e=[],r=0;r<d.length;r++){var n=d[r];e.push(v(t,n))}return e}function y(t){for(var e=g(t),r=t,n=0;n<d.length;n++)if(e[n]>0){r=d[n];break}return r}function m(t,e){if(!(t<1||e<1)){for(var r=g(t),n=g(e),i=1,a=0;a<d.length;a++)i*=Math.pow(d[a],Math.max(r[a],n[a]));return i}}p.calcXnums=function(t){var e,r=[];for(e=1;e<t;e++){var n=this.getXat(e-1,0),i=this.getXat(e,0);r[e-1]=i!==n&&null!=n&&null!=i?Math.abs(i-n):0}var a=0;for(e=1;e<t;e++)a+=r[e-1];for(e=1;e<t;e++)0===r[e-1]?r[e-1]=1:r[e-1]=Math.round(a/r[e-1]);return r},p.calcYnums=function(t){var e,r=[];for(e=1;e<t;e++){var n=this.getYat(0,e-1),i=this.getYat(0,e);r[e-1]=i!==n&&null!=n&&null!=i?Math.abs(i-n):0}var a=0;for(e=1;e<t;e++)a+=r[e-1];for(e=1;e<t;e++)0===r[e-1]?r[e-1]=1:r[e-1]=Math.round(a/r[e-1]);return r};var x=[1,2,4,6,12,24,36,48,60,120,180,240,360,720,840,1260],b=x[9],_=x[13];function w(t,e,r){var n=r[8]+r[2]*e[0]+r[5]*e[1];return t[0]=(r[6]+r[0]*e[0]+r[3]*e[1])/n,t[1]=(r[7]+r[1]*e[0]+r[4]*e[1])/n,t}function T(t,e,r){return function(t,e,r,n){for(var i=[0,0],o=t.shape[0],s=t.shape[1],l=0;l<o;l++)for(var u=0;u<s;u++)r(i,[l,u],n),t.set(l,u,a(e,i[0],i[1]))}(t,e,w,r),t}function k(t,e){for(var r=!1,n=0;n<t.length;n++)if(e===t[n]){r=!0;break}!1===r&&t.push(e)}p.estimateScale=function(t,e){for(var r=1+function(t){if(0!==t.length){for(var e=1,r=0;r<t.length;r++)e=m(e,t[r]);return e}}(0===e?this.calcXnums(t):this.calcYnums(t));r<b;)r*=2;for(;r>_;)r--,r/=y(r),++r<b&&(r=_);var n=Math.round(r/t);return n>1?n:1},p.refineCoords=function(t){for(var e=this.dataScaleX,r=this.dataScaleY,n=t[0].shape[0],a=t[0].shape[1],o=0|Math.floor(t[0].shape[0]*e+1),s=0|Math.floor(t[0].shape[1]*r+1),l=1+n+1,u=1+a+1,c=i(new Float32Array(l*u),[l,u]),f=[1/e,0,0,0,1/r,0,0,0,1],h=0;h<t.length;++h){this.surface.padField(c,t[h]);var p=i(new Float32Array(o*s),[o,s]);T(p,c,f),t[h]=p}},p.setContourLevels=function(){var t,e,r,n=[[],[],[]],i=[!1,!1,!1],a=!1;for(t=0;t<3;++t)if(this.showContour[t]&&(a=!0,this.contourSize[t]>0&&null!==this.contourStart[t]&&null!==this.contourEnd[t]&&this.contourEnd[t]>this.contourStart[t]))for(i[t]=!0,e=this.contourStart[t];e<this.contourEnd[t];e+=this.contourSize[t])r=e*this.scene.dataScale[t],k(n[t],r);if(a){var o=[[],[],[]];for(t=0;t<3;++t)this.showContour[t]&&(o[t]=i[t]?n[t]:this.scene.contourLevels[t]);this.surface.update({levels:o})}},p.update=function(t){var e,r,n,a,l=this.scene,h=l.fullSceneLayout,p=this.surface,d=u(t),v=l.dataScale,g=t.z[0].length,y=t._ylength,m=l.contourLevels;this.data=t;var x=[];for(e=0;e<3;e++)for(x[e]=[],r=0;r<g;r++)x[e][r]=[];for(r=0;r<g;r++)for(n=0;n<y;n++)x[0][r][n]=this.getXat(r,n,t.xcalendar,h.xaxis),x[1][r][n]=this.getYat(r,n,t.ycalendar,h.yaxis),x[2][r][n]=this.getZat(r,n,t.zcalendar,h.zaxis);if(t.connectgaps)for(t._emptypoints=s(x[2]),o(x[2],t._emptypoints),t._interpolatedZ=[],r=0;r<g;r++)for(t._interpolatedZ[r]=[],n=0;n<y;n++)t._interpolatedZ[r][n]=x[2][r][n];for(e=0;e<3;e++)for(r=0;r<g;r++)for(n=0;n<y;n++)null==(a=x[e][r][n])?x[e][r][n]=NaN:a=x[e][r][n]*=v[e];for(e=0;e<3;e++)for(r=0;r<g;r++)for(n=0;n<y;n++)null!=(a=x[e][r][n])&&(this.minValues[e]>a&&(this.minValues[e]=a),this.maxValues[e]<a&&(this.maxValues[e]=a));for(e=0;e<3;e++)this.objectOffset[e]=.5*(this.minValues[e]+this.maxValues[e]);for(e=0;e<3;e++)for(r=0;r<g;r++)for(n=0;n<y;n++)null!=(a=x[e][r][n])&&(x[e][r][n]-=this.objectOffset[e]);var b=[i(new Float32Array(g*y),[g,y]),i(new Float32Array(g*y),[g,y]),i(new Float32Array(g*y),[g,y])];for(e=0;e<3;e++)for(r=0;r<g;r++)for(n=0;n<y;n++)b[e].set(r,n,x[e][r][n]);x=[];var w={colormap:d,levels:[[],[],[]],showContour:[!0,!0,!0],showSurface:!t.hidesurface,contourProject:[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],contourWidth:[1,1,1],contourColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],contourTint:[1,1,1],dynamicColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],dynamicWidth:[1,1,1],dynamicTint:[1,1,1],opacityscale:t.opacityscale,opacity:t.opacity},T=f(t);if(w.intensityBounds=[T.min,T.max],t.surfacecolor){var k=i(new Float32Array(g*y),[g,y]);for(r=0;r<g;r++)for(n=0;n<y;n++)k.set(r,n,t.surfacecolor[n][r]);b.push(k)}else w.intensityBounds[0]*=v[2],w.intensityBounds[1]*=v[2];(_<b[0].shape[0]||_<b[0].shape[1])&&(this.refineData=!1),!0===this.refineData&&(this.dataScaleX=this.estimateScale(b[0].shape[0],0),this.dataScaleY=this.estimateScale(b[0].shape[1],1),1===this.dataScaleX&&1===this.dataScaleY||this.refineCoords(b)),t.surfacecolor&&(w.intensity=b.pop());var A=[!0,!0,!0],M=["x","y","z"];for(e=0;e<3;++e){var S=t.contours[M[e]];A[e]=S.highlight,w.showContour[e]=S.show||S.highlight,w.showContour[e]&&(w.contourProject[e]=[S.project.x,S.project.y,S.project.z],S.show?(this.showContour[e]=!0,w.levels[e]=m[e],p.highlightColor[e]=w.contourColor[e]=c(S.color),S.usecolormap?p.highlightTint[e]=w.contourTint[e]=0:p.highlightTint[e]=w.contourTint[e]=1,w.contourWidth[e]=S.width,this.contourStart[e]=S.start,this.contourEnd[e]=S.end,this.contourSize[e]=S.size):(this.showContour[e]=!1,this.contourStart[e]=null,this.contourEnd[e]=null,this.contourSize[e]=0),S.highlight&&(w.dynamicColor[e]=c(S.highlightcolor),w.dynamicWidth[e]=S.highlightwidth))}(function(t){var e=t[0].rgb,r=t[t.length-1].rgb;return e[0]===r[0]&&e[1]===r[1]&&e[2]===r[2]&&e[3]===r[3]})(d)&&(w.vertexColor=!0),w.objectOffset=this.objectOffset,w.coords=b,p.update(w),p.visible=t.visible,p.enableDynamic=A,p.enableHighlight=A,p.snapToData=!0,"lighting"in t&&(p.ambientLight=t.lighting.ambient,p.diffuseLight=t.lighting.diffuse,p.specularLight=t.lighting.specular,p.roughness=t.lighting.roughness,p.fresnel=t.lighting.fresnel),"lightposition"in t&&(p.lightPosition=[t.lightposition.x,t.lightposition.y,t.lightposition.z])},p.dispose=function(){this.scene.glplot.remove(this.surface),this.surface.dispose()},t.exports=function(t,e){var r=t.glplot.gl,i=n({gl:r}),a=new h(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}},91831:function(t,e,r){"use strict";var n=r(73972),i=r(71828),a=r(1586),o=r(54532);function s(t,e,r,n){var i=n("opacityscale");"max"===i?e.opacityscale=[[0,.1],[1,1]]:"min"===i?e.opacityscale=[[0,1],[1,.1]]:"extremes"===i?e.opacityscale=function(t,e){for(var r=[],n=0;n<32;n++){var i=n/31,a=.1+.9*(1-Math.pow(Math.sin(1*i*Math.PI),2));r.push([i,Math.max(0,Math.min(1,a))])}return r}():function(t){var e=0;if(!Array.isArray(t)||t.length<2)return!1;if(!t[0]||!t[t.length-1])return!1;if(0!=+t[0][0]||1!=+t[t.length-1][0])return!1;for(var r=0;r<t.length;r++){var n=t[r];if(2!==n.length||+n[0]<e)return!1;e=+n[0]}return!0}(i)||(e.opacityscale=void 0)}function l(t,e,r){e in t&&!(r in t)&&(t[r]=t[e])}t.exports={supplyDefaults:function(t,e,r,u){var c,f;function h(r,n){return i.coerce(t,e,o,r,n)}var p=h("x"),d=h("y"),v=h("z");if(!v||!v.length||p&&p.length<1||d&&d.length<1)e.visible=!1;else{e._xlength=Array.isArray(p)&&i.isArrayOrTypedArray(p[0])?v.length:v[0].length,e._ylength=v.length,n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y","z"],u),h("text"),h("hovertext"),h("hovertemplate"),h("xhoverformat"),h("yhoverformat"),h("zhoverformat"),["lighting.ambient","lighting.diffuse","lighting.specular","lighting.roughness","lighting.fresnel","lightposition.x","lightposition.y","lightposition.z","hidesurface","connectgaps","opacity"].forEach((function(t){h(t)}));var g=h("surfacecolor"),y=["x","y","z"];for(c=0;c<3;++c){var m="contours."+y[c],x=h(m+".show"),b=h(m+".highlight");if(x||b)for(f=0;f<3;++f)h(m+".project."+y[f]);x&&(h(m+".color"),h(m+".width"),h(m+".usecolormap")),b&&(h(m+".highlightcolor"),h(m+".highlightwidth")),h(m+".start"),h(m+".end"),h(m+".size")}g||(l(t,"zmin","cmin"),l(t,"zmax","cmax"),l(t,"zauto","cauto")),a(t,e,u,h,{prefix:"",cLetter:"c"}),s(0,e,0,h),e._length=null}},opacityscaleDefaults:s}},93601:function(t,e,r){"use strict";t.exports={attributes:r(54532),supplyDefaults:r(91831).supplyDefaults,colorbar:{min:"cmin",max:"cmax"},calc:r(18396),plot:r(43768),moduleType:"trace",name:"surface",basePlotModule:r(58547),categories:["gl3d","2dMap","showLegend"],meta:{}}},44464:function(t,e,r){"use strict";var n=r(50215),i=r(1426).extendFlat,a=r(30962).overrideAll,o=r(41940),s=r(27670).Y,l=r(12663).descriptionOnlyNumbers;(t.exports=a({domain:s({name:"table",trace:!0}),columnwidth:{valType:"number",arrayOk:!0,dflt:null},columnorder:{valType:"data_array"},header:{values:{valType:"data_array",dflt:[]},format:{valType:"data_array",dflt:[],description:l("cell value")},prefix:{valType:"string",arrayOk:!0,dflt:null},suffix:{valType:"string",arrayOk:!0,dflt:null},height:{valType:"number",dflt:28},align:i({},n.align,{arrayOk:!0}),line:{width:{valType:"number",arrayOk:!0,dflt:1},color:{valType:"color",arrayOk:!0,dflt:"grey"}},fill:{color:{valType:"color",arrayOk:!0,dflt:"white"}},font:i({},o({arrayOk:!0}))},cells:{values:{valType:"data_array",dflt:[]},format:{valType:"data_array",dflt:[],description:l("cell value")},prefix:{valType:"string",arrayOk:!0,dflt:null},suffix:{valType:"string",arrayOk:!0,dflt:null},height:{valType:"number",dflt:20},align:i({},n.align,{arrayOk:!0}),line:{width:{valType:"number",arrayOk:!0,dflt:1},color:{valType:"color",arrayOk:!0,dflt:"grey"}},fill:{color:{valType:"color",arrayOk:!0,dflt:"white"}},font:i({},o({arrayOk:!0}))}},"calc","from-root")).transforms=void 0},99469:function(t,e,r){"use strict";var n=r(27659).a0,i=r(36736),a="table";e.name=a,e.plot=function(t){var e=n(t.calcdata,a)[0];e.length&&i(t,e)},e.clean=function(t,e,r,n){var i=n._has&&n._has(a),o=e._has&&e._has(a);i&&!o&&n._paperdiv.selectAll(".table").remove()}},76333:function(t,e,r){"use strict";var n=r(28984).wrap;t.exports=function(){return n({})}},49850:function(t){"use strict";t.exports={cellPad:8,columnExtentOffset:10,columnTitleOffset:28,emptyHeaderHeight:16,latexCheck:/^\$.*\$$/,goldenRatio:1.618,lineBreaker:"<br>",maxDimensionCount:60,overdrag:45,releaseTransitionDuration:120,releaseTransitionEase:"cubic-out",scrollbarCaptureWidth:18,scrollbarHideDelay:1e3,scrollbarHideDuration:1e3,scrollbarOffset:5,scrollbarWidth:8,transitionDuration:100,transitionEase:"cubic-out",uplift:5,wrapSpacer:" ",wrapSplitCharacter:" ",cn:{table:"table",tableControlView:"table-control-view",scrollBackground:"scroll-background",yColumn:"y-column",columnBlock:"column-block",scrollAreaClip:"scroll-area-clip",scrollAreaClipRect:"scroll-area-clip-rect",columnBoundary:"column-boundary",columnBoundaryClippath:"column-boundary-clippath",columnBoundaryRect:"column-boundary-rect",columnCells:"column-cells",columnCell:"column-cell",cellRect:"cell-rect",cellText:"cell-text",cellTextHolder:"cell-text-holder",scrollbarKit:"scrollbar-kit",scrollbar:"scrollbar",scrollbarSlider:"scrollbar-slider",scrollbarGlyph:"scrollbar-glyph",scrollbarCaptureZone:"scrollbar-capture-zone"}}},51018:function(t,e,r){"use strict";var n=r(49850),i=r(1426).extendFlat,a=r(92770);function o(t){if(Array.isArray(t)){for(var e=0,r=0;r<t.length;r++)e=Math.max(e,o(t[r]));return e}return t}function s(t,e){return t+e}function l(t){var e,r=t.slice(),n=1/0,i=0;for(e=0;e<r.length;e++)Array.isArray(r[e])||(r[e]=[r[e]]),n=Math.min(n,r[e].length),i=Math.max(i,r[e].length);if(n!==i)for(e=0;e<r.length;e++){var a=i-r[e].length;a&&(r[e]=r[e].concat(u(a)))}return r}function u(t){for(var e=new Array(t),r=0;r<t;r++)e[r]="";return e}function c(t){return t.calcdata.columns.reduce((function(e,r){return r.xIndex<t.xIndex?e+r.columnWidth:e}),0)}function f(t,e){return Object.keys(t).map((function(r){return i({},t[r],{auxiliaryBlocks:e})}))}function h(t,e){for(var r,n={},i=0,a=0,o={firstRowIndex:null,lastRowIndex:null,rows:[]},s=0,l=0,u=0;u<t.length;u++)r=t[u],o.rows.push({rowIndex:u,rowHeight:r}),((a+=r)>=e||u===t.length-1)&&(n[i]=o,o.key=l++,o.firstRowIndex=s,o.lastRowIndex=u,o={firstRowIndex:null,lastRowIndex:null,rows:[]},i+=a,s=u+1,a=0);return n}t.exports=function(t,e){var r=l(e.cells.values),p=function(t){return t.slice(e.header.values.length,t.length)},d=l(e.header.values);d.length&&!d[0].length&&(d[0]=[""],d=l(d));var v=d.concat(p(r).map((function(){return u((d[0]||[""]).length)}))),g=e.domain,y=Math.floor(t._fullLayout._size.w*(g.x[1]-g.x[0])),m=Math.floor(t._fullLayout._size.h*(g.y[1]-g.y[0])),x=e.header.values.length?v[0].map((function(){return e.header.height})):[n.emptyHeaderHeight],b=r.length?r[0].map((function(){return e.cells.height})):[],_=x.reduce(s,0),w=h(b,m-_+n.uplift),T=f(h(x,_),[]),k=f(w,T),A={},M=e._fullInput.columnorder.concat(p(r.map((function(t,e){return e})))),S=v.map((function(t,r){var n=Array.isArray(e.columnwidth)?e.columnwidth[Math.min(r,e.columnwidth.length-1)]:e.columnwidth;return a(n)?Number(n):1})),E=S.reduce(s,0);S=S.map((function(t){return t/E*y}));var L=Math.max(o(e.header.line.width),o(e.cells.line.width)),C={key:e.uid+t._context.staticPlot,translateX:g.x[0]*t._fullLayout._size.w,translateY:t._fullLayout._size.h*(1-g.y[1]),size:t._fullLayout._size,width:y,maxLineWidth:L,height:m,columnOrder:M,groupHeight:m,rowBlocks:k,headerRowBlocks:T,scrollY:0,cells:i({},e.cells,{values:r}),headerCells:i({},e.header,{values:v}),gdColumns:v.map((function(t){return t[0]})),gdColumnsOriginalOrder:v.map((function(t){return t[0]})),prevPages:[0,0],scrollbarState:{scrollbarScrollInProgress:!1},columns:v.map((function(t,e){var r=A[t];return A[t]=(r||0)+1,{key:t+"__"+A[t],label:t,specIndex:e,xIndex:M[e],xScale:c,x:void 0,calcdata:void 0,columnWidth:S[e]}}))};return C.columns.forEach((function(t){t.calcdata=C,t.x=c(t)})),C}},56269:function(t,e,r){"use strict";var n=r(1426).extendFlat;e.splitToPanels=function(t){var e=[0,0],r=n({},t,{key:"header",type:"header",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!0,values:t.calcdata.headerCells.values[t.specIndex],rowBlocks:t.calcdata.headerRowBlocks,calcdata:n({},t.calcdata,{cells:t.calcdata.headerCells})});return[n({},t,{key:"cells1",type:"cells",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),n({},t,{key:"cells2",type:"cells",page:1,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),r]},e.splitToCells=function(t){var e=function(t){var e=t.rowBlocks[t.page],r=e?e.rows[0].rowIndex:0;return[r,e?r+e.rows.length:0]}(t);return(t.values||[]).slice(e[0],e[1]).map((function(r,n){return{keyWithinBlock:n+("string"==typeof r&&r.match(/[<$&> ]/)?"_keybuster_"+Math.random():""),key:e[0]+n,column:t,calcdata:t.calcdata,page:t.page,rowBlocks:t.rowBlocks,value:r}}))}},39754:function(t,e,r){"use strict";var n=r(71828),i=r(44464),a=r(27670).c;t.exports=function(t,e,r,o){function s(r,a){return n.coerce(t,e,i,r,a)}a(e,o,s),s("columnwidth"),s("header.values"),s("header.format"),s("header.align"),s("header.prefix"),s("header.suffix"),s("header.height"),s("header.line.width"),s("header.line.color"),s("header.fill.color"),n.coerceFont(s,"header.font",n.extendFlat({},o.font)),function(t,e){for(var r=t.columnorder||[],n=t.header.values.length,i=r.slice(0,n),a=i.slice().sort((function(t,e){return t-e})),o=i.map((function(t){return a.indexOf(t)})),s=o.length;s<n;s++)o.push(s);e("columnorder",o)}(e,s),s("cells.values"),s("cells.format"),s("cells.align"),s("cells.prefix"),s("cells.suffix"),s("cells.height"),s("cells.line.width"),s("cells.line.color"),s("cells.fill.color"),n.coerceFont(s,"cells.font",n.extendFlat({},o.font)),e._length=null}},96595:function(t,e,r){"use strict";t.exports={attributes:r(44464),supplyDefaults:r(39754),calc:r(76333),plot:r(36736),moduleType:"trace",name:"table",basePlotModule:r(99469),categories:["noOpacity"],meta:{}}},36736:function(t,e,r){"use strict";var n=r(49850),i=r(39898),a=r(71828).numberFormat,o=r(28984),s=r(91424),l=r(63893),u=r(71828).raiseToTop,c=r(71828).strTranslate,f=r(71828).cancelTransition,h=r(51018),p=r(56269),d=r(7901);function v(t){return Math.ceil(t.calcdata.maxLineWidth/2)}function g(t,e){return"clip"+t._fullLayout._uid+"_scrollAreaBottomClip_"+e.key}function y(t,e){return"clip"+t._fullLayout._uid+"_columnBoundaryClippath_"+e.calcdata.key+"_"+e.specIndex}function m(t){return[].concat.apply([],t.map((function(t){return t}))).map((function(t){return t.__data__}))}function x(t,e,r){var a=t.selectAll("."+n.cn.scrollbarKit).data(o.repeat,o.keyFun);a.enter().append("g").classed(n.cn.scrollbarKit,!0).style("shape-rendering","geometricPrecision"),a.each((function(t){var e=t.scrollbarState;e.totalHeight=function(t){var e=t.rowBlocks;return z(e,e.length-1)+(e.length?R(e[e.length-1],1/0):1)}(t),e.scrollableAreaHeight=t.groupHeight-S(t),e.currentlyVisibleHeight=Math.min(e.totalHeight,e.scrollableAreaHeight),e.ratio=e.currentlyVisibleHeight/e.totalHeight,e.barLength=Math.max(e.ratio*e.currentlyVisibleHeight,n.goldenRatio*n.scrollbarWidth),e.barWiggleRoom=e.currentlyVisibleHeight-e.barLength,e.wiggleRoom=Math.max(0,e.totalHeight-e.scrollableAreaHeight),e.topY=0===e.barWiggleRoom?0:t.scrollY/e.wiggleRoom*e.barWiggleRoom,e.bottomY=e.topY+e.barLength,e.dragMultiplier=e.wiggleRoom/e.barWiggleRoom})).attr("transform",(function(t){var e=t.width+n.scrollbarWidth/2+n.scrollbarOffset;return c(e,S(t))}));var s=a.selectAll("."+n.cn.scrollbar).data(o.repeat,o.keyFun);s.enter().append("g").classed(n.cn.scrollbar,!0);var l=s.selectAll("."+n.cn.scrollbarSlider).data(o.repeat,o.keyFun);l.enter().append("g").classed(n.cn.scrollbarSlider,!0),l.attr("transform",(function(t){return c(0,t.scrollbarState.topY||0)}));var u=l.selectAll("."+n.cn.scrollbarGlyph).data(o.repeat,o.keyFun);u.enter().append("line").classed(n.cn.scrollbarGlyph,!0).attr("stroke","black").attr("stroke-width",n.scrollbarWidth).attr("stroke-linecap","round").attr("y1",n.scrollbarWidth/2),u.attr("y2",(function(t){return t.scrollbarState.barLength-n.scrollbarWidth/2})).attr("stroke-opacity",(function(t){return t.columnDragInProgress||!t.scrollbarState.barWiggleRoom||r?0:.4})),u.transition().delay(0).duration(0),u.transition().delay(n.scrollbarHideDelay).duration(n.scrollbarHideDuration).attr("stroke-opacity",0);var f=s.selectAll("."+n.cn.scrollbarCaptureZone).data(o.repeat,o.keyFun);f.enter().append("line").classed(n.cn.scrollbarCaptureZone,!0).attr("stroke","white").attr("stroke-opacity",.01).attr("stroke-width",n.scrollbarCaptureWidth).attr("stroke-linecap","butt").attr("y1",0).on("mousedown",(function(r){var n=i.event.y,a=this.getBoundingClientRect(),o=r.scrollbarState,s=n-a.top,l=i.scale.linear().domain([0,o.scrollableAreaHeight]).range([0,o.totalHeight]).clamp(!0);o.topY<=s&&s<=o.bottomY||L(e,t,null,l(s-o.barLength/2))(r)})).call(i.behavior.drag().origin((function(t){return i.event.stopPropagation(),t.scrollbarState.scrollbarScrollInProgress=!0,t})).on("drag",L(e,t)).on("dragend",(function(){}))),f.attr("y2",(function(t){return t.scrollbarState.scrollableAreaHeight})),e._context.staticPlot&&(u.remove(),f.remove())}function b(t,e,r,a){var l=function(t){var e=t.selectAll("."+n.cn.columnCells).data(o.repeat,o.keyFun);return e.enter().append("g").classed(n.cn.columnCells,!0),e.exit().remove(),e}(r),u=function(t){var e=t.selectAll("."+n.cn.columnCell).data(p.splitToCells,(function(t){return t.keyWithinBlock}));return e.enter().append("g").classed(n.cn.columnCell,!0),e.exit().remove(),e}(l);!function(t){t.each((function(t,e){var r=t.calcdata.cells.font,n=t.column.specIndex,i={size:T(r.size,n,e),color:T(r.color,n,e),family:T(r.family,n,e)};t.rowNumber=t.key,t.align=T(t.calcdata.cells.align,n,e),t.cellBorderWidth=T(t.calcdata.cells.line.width,n,e),t.font=i}))}(u);var c=function(t){var e=t.selectAll("."+n.cn.cellRect).data(o.repeat,(function(t){return t.keyWithinBlock}));return e.enter().append("rect").classed(n.cn.cellRect,!0),e}(u);!function(t){t.attr("width",(function(t){return t.column.columnWidth})).attr("stroke-width",(function(t){return t.cellBorderWidth})).each((function(t){var e=i.select(this);d.stroke(e,T(t.calcdata.cells.line.color,t.column.specIndex,t.rowNumber)),d.fill(e,T(t.calcdata.cells.fill.color,t.column.specIndex,t.rowNumber))}))}(c);var f=function(t){var e=t.selectAll("."+n.cn.cellTextHolder).data(o.repeat,(function(t){return t.keyWithinBlock}));return e.enter().append("g").classed(n.cn.cellTextHolder,!0).style("shape-rendering","geometricPrecision"),e}(u),h=function(t){var e=t.selectAll("."+n.cn.cellText).data(o.repeat,(function(t){return t.keyWithinBlock}));return e.enter().append("text").classed(n.cn.cellText,!0).style("cursor",(function(){return"auto"})).on("mousedown",(function(){i.event.stopPropagation()})),e}(f);!function(t){t.each((function(t){s.font(i.select(this),t.font)}))}(h),_(h,e,a,t),D(u)}function _(t,e,r,o){t.text((function(t){var e=t.column.specIndex,r=t.rowNumber,i=t.value,o="string"==typeof i,s=o&&i.match(/<br>/i),l=!o||s;t.mayHaveMarkup=o&&i.match(/[<&>]/);var u,c="string"==typeof(u=i)&&u.match(n.latexCheck);t.latex=c;var f,h,p=c?"":T(t.calcdata.cells.prefix,e,r)||"",d=c?"":T(t.calcdata.cells.suffix,e,r)||"",v=c?null:T(t.calcdata.cells.format,e,r)||null,g=p+(v?a(v)(t.value):t.value)+d;if(t.wrappingNeeded=!t.wrapped&&!l&&!c&&(f=w(g)),t.cellHeightMayIncrease=s||c||t.mayHaveMarkup||(void 0===f?w(g):f),t.needsConvertToTspans=t.mayHaveMarkup||t.wrappingNeeded||t.latex,t.wrappingNeeded){var y=(" "===n.wrapSplitCharacter?g.replace(/<a href=/gi,"<a_href="):g).split(n.wrapSplitCharacter),m=" "===n.wrapSplitCharacter?y.map((function(t){return t.replace(/<a_href=/gi,"<a href=")})):y;t.fragments=m.map((function(t){return{text:t,width:null}})),t.fragments.push({fragment:n.wrapSpacer,width:null}),h=m.join(n.lineBreaker)+n.lineBreaker+n.wrapSpacer}else delete t.fragments,h=g;return h})).attr("dy",(function(t){return t.needsConvertToTspans?0:"0.75em"})).each((function(t){var a=this,s=i.select(a),u=t.wrappingNeeded?P:O;t.needsConvertToTspans?l.convertToTspans(s,o,u(r,a,e,o,t)):i.select(a.parentNode).attr("transform",(function(t){return c(I(t),n.cellPad)})).attr("text-anchor",(function(t){return{left:"start",center:"middle",right:"end"}[t.align]}))}))}function w(t){return-1!==t.indexOf(n.wrapSplitCharacter)}function T(t,e,r){if(Array.isArray(t)){var n=t[Math.min(e,t.length-1)];return Array.isArray(n)?n[Math.min(r,n.length-1)]:n}return t}function k(t,e,r){t.transition().ease(n.releaseTransitionEase).duration(n.releaseTransitionDuration).attr("transform",c(e.x,r))}function A(t){return"cells"===t.type}function M(t){return"header"===t.type}function S(t){return(t.rowBlocks.length?t.rowBlocks[0].auxiliaryBlocks:[]).reduce((function(t,e){return t+R(e,1/0)}),0)}function E(t,e,r){var n=m(e)[0];if(void 0!==n){var i=n.rowBlocks,a=n.calcdata,o=z(i,i.length),s=n.calcdata.groupHeight-S(n),l=a.scrollY=Math.max(0,Math.min(o-s,a.scrollY)),u=function(t,e,r){for(var n=[],i=0,a=0;a<t.length;a++){for(var o=t[a],s=o.rows,l=0,u=0;u<s.length;u++)l+=s[u].rowHeight;o.allRowsHeight=l,e<i+l&&e+r>i&&n.push(a),i+=l}return n}(i,l,s);1===u.length&&(u[0]===i.length-1?u.unshift(u[0]-1):u.push(u[0]+1)),u[0]%2&&u.reverse(),e.each((function(t,e){t.page=u[e],t.scrollY=l})),e.attr("transform",(function(t){var e=z(t.rowBlocks,t.page)-t.scrollY;return c(0,e)})),t&&(C(t,r,e,u,n.prevPages,n,0),C(t,r,e,u,n.prevPages,n,1),x(r,t))}}function L(t,e,r,a){return function(o){var s=o.calcdata?o.calcdata:o,l=e.filter((function(t){return s.key===t.key})),u=r||s.scrollbarState.dragMultiplier,c=s.scrollY;s.scrollY=void 0===a?s.scrollY+u*i.event.dy:a;var f=l.selectAll("."+n.cn.yColumn).selectAll("."+n.cn.columnBlock).filter(A);return E(t,f,l),s.scrollY===c}}function C(t,e,r,n,i,a,o){n[o]!==i[o]&&(clearTimeout(a.currentRepaint[o]),a.currentRepaint[o]=setTimeout((function(){var a=r.filter((function(t,e){return e===o&&n[e]!==i[e]}));b(t,e,a,r),i[o]=n[o]})))}function P(t,e,r,a){return function(){var o=i.select(e.parentNode);o.each((function(t){var e=t.fragments;o.selectAll("tspan.line").each((function(t,r){e[r].width=this.getComputedTextLength()}));var r,i,a=e[e.length-1].width,s=e.slice(0,-1),l=[],u=0,c=t.column.columnWidth-2*n.cellPad;for(t.value="";s.length;)u+(i=(r=s.shift()).width+a)>c&&(t.value+=l.join(n.wrapSpacer)+n.lineBreaker,l=[],u=0),l.push(r.text),u+=i;u&&(t.value+=l.join(n.wrapSpacer)),t.wrapped=!0})),o.selectAll("tspan.line").remove(),_(o.select("."+n.cn.cellText),r,t,a),i.select(e.parentNode.parentNode).call(D)}}function O(t,e,r,a,o){return function(){if(!o.settledY){var s=i.select(e.parentNode),l=B(o),u=o.key-l.firstRowIndex,f=l.rows[u].rowHeight,h=o.cellHeightMayIncrease?e.parentNode.getBoundingClientRect().height+2*n.cellPad:f,p=Math.max(h,f);p-l.rows[u].rowHeight&&(l.rows[u].rowHeight=p,t.selectAll("."+n.cn.columnCell).call(D),E(null,t.filter(A),0),x(r,a,!0)),s.attr("transform",(function(){var t=this,e=t.parentNode.getBoundingClientRect(),r=i.select(t.parentNode).select("."+n.cn.cellRect).node().getBoundingClientRect(),a=t.transform.baseVal.consolidate(),s=r.top-e.top+(a?a.matrix.f:n.cellPad);return c(I(o,i.select(t.parentNode).select("."+n.cn.cellTextHolder).node().getBoundingClientRect().width),s)})),o.settledY=!0}}}function I(t,e){switch(t.align){case"left":default:return n.cellPad;case"right":return t.column.columnWidth-(e||0)-n.cellPad;case"center":return(t.column.columnWidth-(e||0))/2}}function D(t){t.attr("transform",(function(t){var e=t.rowBlocks[0].auxiliaryBlocks.reduce((function(t,e){return t+R(e,1/0)}),0),r=R(B(t),t.key);return c(0,r+e)})).selectAll("."+n.cn.cellRect).attr("height",(function(t){return(e=B(t),r=t.key,e.rows[r-e.firstRowIndex]).rowHeight;var e,r}))}function z(t,e){for(var r=0,n=e-1;n>=0;n--)r+=F(t[n]);return r}function R(t,e){for(var r=0,n=0;n<t.rows.length&&t.rows[n].rowIndex<e;n++)r+=t.rows[n].rowHeight;return r}function F(t){var e=t.allRowsHeight;if(void 0!==e)return e;for(var r=0,n=0;n<t.rows.length;n++)r+=t.rows[n].rowHeight;return t.allRowsHeight=r,r}function B(t){return t.rowBlocks[t.page]}t.exports=function(t,e){var r=!t._context.staticPlot,a=t._fullLayout._paper.selectAll("."+n.cn.table).data(e.map((function(e){var r=o.unwrap(e).trace;return h(t,r)})),o.keyFun);a.exit().remove(),a.enter().append("g").classed(n.cn.table,!0).attr("overflow","visible").style("box-sizing","content-box").style("position","absolute").style("left",0).style("overflow","visible").style("shape-rendering","crispEdges").style("pointer-events","all"),a.attr("width",(function(t){return t.width+t.size.l+t.size.r})).attr("height",(function(t){return t.height+t.size.t+t.size.b})).attr("transform",(function(t){return c(t.translateX,t.translateY)}));var l=a.selectAll("."+n.cn.tableControlView).data(o.repeat,o.keyFun),d=l.enter().append("g").classed(n.cn.tableControlView,!0).style("box-sizing","content-box");if(r){var _="onwheel"in document?"wheel":"mousewheel";d.on("mousemove",(function(e){l.filter((function(t){return e===t})).call(x,t)})).on(_,(function(e){if(!e.scrollbarState.wheeling){e.scrollbarState.wheeling=!0;var r=e.scrollY+i.event.deltaY;L(t,l,null,r)(e)||(i.event.stopPropagation(),i.event.preventDefault()),e.scrollbarState.wheeling=!1}})).call(x,t,!0)}l.attr("transform",(function(t){return c(t.size.l,t.size.t)}));var w=l.selectAll("."+n.cn.scrollBackground).data(o.repeat,o.keyFun);w.enter().append("rect").classed(n.cn.scrollBackground,!0).attr("fill","none"),w.attr("width",(function(t){return t.width})).attr("height",(function(t){return t.height})),l.each((function(e){s.setClipUrl(i.select(this),g(t,e),t)}));var T=l.selectAll("."+n.cn.yColumn).data((function(t){return t.columns}),o.keyFun);T.enter().append("g").classed(n.cn.yColumn,!0),T.exit().remove(),T.attr("transform",(function(t){return c(t.x,0)})),r&&T.call(i.behavior.drag().origin((function(e){return k(i.select(this),e,-n.uplift),u(this),e.calcdata.columnDragInProgress=!0,x(l.filter((function(t){return e.calcdata.key===t.key})),t),e})).on("drag",(function(t){var e=i.select(this),r=function(e){return(t===e?i.event.x:e.x)+e.columnWidth/2};t.x=Math.max(-n.overdrag,Math.min(t.calcdata.width+n.overdrag-t.columnWidth,i.event.x)),m(T).filter((function(e){return e.calcdata.key===t.calcdata.key})).sort((function(t,e){return r(t)-r(e)})).forEach((function(e,r){e.xIndex=r,e.x=t===e?e.x:e.xScale(e)})),T.filter((function(e){return t!==e})).transition().ease(n.transitionEase).duration(n.transitionDuration).attr("transform",(function(t){return c(t.x,0)})),e.call(f).attr("transform",c(t.x,-n.uplift))})).on("dragend",(function(e){var r=i.select(this),n=e.calcdata;e.x=e.xScale(e),e.calcdata.columnDragInProgress=!1,k(r,e,0),function(t,e,r){var n=e.gdColumnsOriginalOrder;e.gdColumns.sort((function(t,e){return r[n.indexOf(t)]-r[n.indexOf(e)]})),e.columnorder=r,t.emit("plotly_restyle")}(t,n,n.columns.map((function(t){return t.xIndex})))}))),T.each((function(e){s.setClipUrl(i.select(this),y(t,e),t)}));var S=T.selectAll("."+n.cn.columnBlock).data(p.splitToPanels,o.keyFun);S.enter().append("g").classed(n.cn.columnBlock,!0).attr("id",(function(t){return t.key})),S.style("cursor",(function(t){return t.dragHandle?"ew-resize":t.calcdata.scrollbarState.barWiggleRoom?"ns-resize":"default"}));var C=S.filter(M),P=S.filter(A);r&&P.call(i.behavior.drag().origin((function(t){return i.event.stopPropagation(),t})).on("drag",L(t,l,-1)).on("dragend",(function(){}))),b(t,l,C,S),b(t,l,P,S);var O=l.selectAll("."+n.cn.scrollAreaClip).data(o.repeat,o.keyFun);O.enter().append("clipPath").classed(n.cn.scrollAreaClip,!0).attr("id",(function(e){return g(t,e)}));var I=O.selectAll("."+n.cn.scrollAreaClipRect).data(o.repeat,o.keyFun);I.enter().append("rect").classed(n.cn.scrollAreaClipRect,!0).attr("x",-n.overdrag).attr("y",-n.uplift).attr("fill","none"),I.attr("width",(function(t){return t.width+2*n.overdrag})).attr("height",(function(t){return t.height+n.uplift})),T.selectAll("."+n.cn.columnBoundary).data(o.repeat,o.keyFun).enter().append("g").classed(n.cn.columnBoundary,!0);var D=T.selectAll("."+n.cn.columnBoundaryClippath).data(o.repeat,o.keyFun);D.enter().append("clipPath").classed(n.cn.columnBoundaryClippath,!0),D.attr("id",(function(e){return y(t,e)}));var z=D.selectAll("."+n.cn.columnBoundaryRect).data(o.repeat,o.keyFun);z.enter().append("rect").classed(n.cn.columnBoundaryRect,!0).attr("fill","none"),z.attr("width",(function(t){return t.columnWidth+2*v(t)})).attr("height",(function(t){return t.calcdata.height+2*v(t)+n.uplift})).attr("x",(function(t){return-v(t)})).attr("y",(function(t){return-v(t)})),E(null,P,l)}},45802:function(t,e,r){"use strict";var n=r(5386).fF,i=r(5386).si,a=r(50693),o=r(27670).Y,s=r(34e3),l=r(57564),u=r(43473),c=r(1426).extendFlat,f=r(79952).u;t.exports={labels:l.labels,parents:l.parents,values:l.values,branchvalues:l.branchvalues,count:l.count,level:l.level,maxdepth:l.maxdepth,tiling:{packing:{valType:"enumerated",values:["squarify","binary","dice","slice","slice-dice","dice-slice"],dflt:"squarify",editType:"plot"},squarifyratio:{valType:"number",min:1,dflt:1,editType:"plot"},flip:{valType:"flaglist",flags:["x","y"],dflt:"",editType:"plot"},pad:{valType:"number",min:0,dflt:3,editType:"plot"},editType:"calc"},marker:c({pad:{t:{valType:"number",min:0,editType:"plot"},l:{valType:"number",min:0,editType:"plot"},r:{valType:"number",min:0,editType:"plot"},b:{valType:"number",min:0,editType:"plot"},editType:"calc"},colors:l.marker.colors,pattern:f,depthfade:{valType:"enumerated",values:[!0,!1,"reversed"],editType:"style"},line:l.marker.line,cornerradius:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"calc"},a("marker",{colorAttr:"colors",anim:!1})),pathbar:{visible:{valType:"boolean",dflt:!0,editType:"plot"},side:{valType:"enumerated",values:["top","bottom"],dflt:"top",editType:"plot"},edgeshape:{valType:"enumerated",values:[">","<","|","/","\\"],dflt:">",editType:"plot"},thickness:{valType:"number",min:12,editType:"plot"},textfont:c({},s.textfont,{}),editType:"calc"},text:s.text,textinfo:l.textinfo,texttemplate:i({editType:"plot"},{keys:u.eventDataKeys.concat(["label","value"])}),hovertext:s.hovertext,hoverinfo:l.hoverinfo,hovertemplate:n({},{keys:u.eventDataKeys}),textfont:s.textfont,insidetextfont:s.insidetextfont,outsidetextfont:c({},s.outsidetextfont,{}),textposition:{valType:"enumerated",values:["top left","top center","top right","middle left","middle center","middle right","bottom left","bottom center","bottom right"],dflt:"top left",editType:"plot"},sort:s.sort,root:l.root,domain:o({name:"treemap",trace:!0,editType:"calc"})}},78018:function(t,e,r){"use strict";var n=r(74875);e.name="treemap",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},65039:function(t,e,r){"use strict";var n=r(52147);e.y=function(t,e){return n.calc(t,e)},e.T=function(t){return n._runCrossTraceCalc("treemap",t)}},43473:function(t){"use strict";t.exports={CLICK_TRANSITION_TIME:750,CLICK_TRANSITION_EASING:"poly",eventDataKeys:["currentPath","root","entry","percentRoot","percentEntry","percentParent"],gapWithPathbar:1}},91174:function(t,e,r){"use strict";var n=r(71828),i=r(45802),a=r(7901),o=r(27670).c,s=r(90769).handleText,l=r(97313).TEXTPAD,u=r(37434).handleMarkerDefaults,c=r(21081),f=c.hasColorscale,h=c.handleDefaults;t.exports=function(t,e,r,c){function p(r,a){return n.coerce(t,e,i,r,a)}var d=p("labels"),v=p("parents");if(d&&d.length&&v&&v.length){var g=p("values");g&&g.length?p("branchvalues"):p("count"),p("level"),p("maxdepth"),"squarify"===p("tiling.packing")&&p("tiling.squarifyratio"),p("tiling.flip"),p("tiling.pad");var y=p("text");p("texttemplate"),e.texttemplate||p("textinfo",Array.isArray(y)?"text+label":"label"),p("hovertext"),p("hovertemplate");var m=p("pathbar.visible");s(t,e,c,p,"auto",{hasPathbar:m,moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),p("textposition");var x=-1!==e.textposition.indexOf("bottom");u(t,e,c,p),(e._hasColorscale=f(t,"marker","colors")||(t.marker||{}).coloraxis)?h(t,e,c,p,{prefix:"marker.",cLetter:"c"}):p("marker.depthfade",!(e.marker.colors||[]).length);var b=2*e.textfont.size;p("marker.pad.t",x?b/4:b),p("marker.pad.l",b/4),p("marker.pad.r",b/4),p("marker.pad.b",x?b:b/4),p("marker.cornerradius"),e._hovered={marker:{line:{width:2,color:a.contrast(c.paper_bgcolor)}}},m&&(p("pathbar.thickness",e.pathbar.textfont.size+2*l),p("pathbar.side"),p("pathbar.edgeshape")),p("sort"),p("root.color"),o(e,c,p),e._length=null}else e.visible=!1}},80694:function(t,e,r){"use strict";var n=r(39898),i=r(2791),a=r(72597).clearMinTextSize,o=r(16688).resizeText,s=r(46650);t.exports=function(t,e,r,l,u){var c,f,h=u.type,p=u.drawDescendants,d=t._fullLayout,v=d["_"+h+"layer"],g=!r;a(h,d),(c=v.selectAll("g.trace."+h).data(e,(function(t){return t[0].trace.uid}))).enter().append("g").classed("trace",!0).classed(h,!0),c.order(),!d.uniformtext.mode&&i.hasTransition(r)?(l&&(f=l()),n.transition().duration(r.duration).ease(r.easing).each("end",(function(){f&&f()})).each("interrupt",(function(){f&&f()})).each((function(){v.selectAll("g.trace").each((function(e){s(t,e,this,r,p)}))}))):(c.each((function(e){s(t,e,this,r,p)})),d.uniformtext.mode&&o(t,v.selectAll(".trace"),h)),g&&c.exit().remove()}},66209:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=r(91424),o=r(63893),s=r(37210),l=r(96362).styleOne,u=r(43473),c=r(2791),f=r(83523),h=!0;t.exports=function(t,e,r,p,d){var v=d.barDifY,g=d.width,y=d.height,m=d.viewX,x=d.viewY,b=d.pathSlice,_=d.toMoveInsideSlice,w=d.strTransform,T=d.hasTransition,k=d.handleSlicesExit,A=d.makeUpdateSliceInterpolator,M=d.makeUpdateTextInterpolator,S={},E=t._context.staticPlot,L=t._fullLayout,C=e[0],P=C.trace,O=C.hierarchy,I=g/P._entryDepth,D=c.listPath(r.data,"id"),z=s(O.copy(),[g,y],{packing:"dice",pad:{inner:0,top:0,left:0,right:0,bottom:0}}).descendants();(z=z.filter((function(t){var e=D.indexOf(t.data.id);return-1!==e&&(t.x0=I*e,t.x1=I*(e+1),t.y0=v,t.y1=v+y,t.onPathbar=!0,!0)}))).reverse(),(p=p.data(z,c.getPtId)).enter().append("g").classed("pathbar",!0),k(p,h,S,[g,y],b),p.order();var R=p;T&&(R=R.transition().each("end",(function(){var e=n.select(this);c.setSliceCursor(e,t,{hideOnRoot:!1,hideOnLeaves:!1,isTransitioning:!1})}))),R.each((function(s){s._x0=m(s.x0),s._x1=m(s.x1),s._y0=x(s.y0),s._y1=x(s.y1),s._hoverX=m(s.x1-Math.min(g,y)/2),s._hoverY=x(s.y1-y/2);var p=n.select(this),d=i.ensureSingle(p,"path","surface",(function(t){t.style("pointer-events",E?"none":"all")}));T?d.transition().attrTween("d",(function(t){var e=A(t,h,S,[g,y]);return function(t){return b(e(t))}})):d.attr("d",b),p.call(f,r,t,e,{styleOne:l,eventDataKeys:u.eventDataKeys,transitionTime:u.CLICK_TRANSITION_TIME,transitionEasing:u.CLICK_TRANSITION_EASING}).call(c.setSliceCursor,t,{hideOnRoot:!1,hideOnLeaves:!1,isTransitioning:t._transitioning}),d.call(l,s,P,t,{hovered:!1}),s._text=(c.getPtLabel(s)||"").split("<br>").join(" ")||"";var v=i.ensureSingle(p,"g","slicetext"),k=i.ensureSingle(v,"text","",(function(t){t.attr("data-notex",1)})),C=i.ensureUniformFontSize(t,c.determineTextFont(P,s,L.font,{onPathbar:!0}));k.text(s._text||" ").classed("slicetext",!0).attr("text-anchor","start").call(a.font,C).call(o.convertToTspans,t),s.textBB=a.bBox(k.node()),s.transform=_(s,{fontSize:C.size,onPathbar:!0}),s.transform.fontSize=C.size,T?k.transition().attrTween("transform",(function(t){var e=M(t,h,S,[g,y]);return function(t){return w(e(t))}})):k.attr("transform",w(s))}))}},52583:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=r(91424),o=r(63893),s=r(37210),l=r(96362).styleOne,u=r(43473),c=r(2791),f=r(83523),h=r(24714).formatSliceLabel,p=!1;t.exports=function(t,e,r,d,v){var g=v.width,y=v.height,m=v.viewX,x=v.viewY,b=v.pathSlice,_=v.toMoveInsideSlice,w=v.strTransform,T=v.hasTransition,k=v.handleSlicesExit,A=v.makeUpdateSliceInterpolator,M=v.makeUpdateTextInterpolator,S=v.prevEntry,E=t._context.staticPlot,L=t._fullLayout,C=e[0].trace,P=-1!==C.textposition.indexOf("left"),O=-1!==C.textposition.indexOf("right"),I=-1!==C.textposition.indexOf("bottom"),D=!I&&!C.marker.pad.t||I&&!C.marker.pad.b,z=s(r,[g,y],{packing:C.tiling.packing,squarifyratio:C.tiling.squarifyratio,flipX:C.tiling.flip.indexOf("x")>-1,flipY:C.tiling.flip.indexOf("y")>-1,pad:{inner:C.tiling.pad,top:C.marker.pad.t,left:C.marker.pad.l,right:C.marker.pad.r,bottom:C.marker.pad.b}}).descendants(),R=1/0,F=-1/0;z.forEach((function(t){var e=t.depth;e>=C._maxDepth?(t.x0=t.x1=(t.x0+t.x1)/2,t.y0=t.y1=(t.y0+t.y1)/2):(R=Math.min(R,e),F=Math.max(F,e))})),d=d.data(z,c.getPtId),C._maxVisibleLayers=isFinite(F)?F-R+1:0,d.enter().append("g").classed("slice",!0),k(d,p,{},[g,y],b),d.order();var B=null;if(T&&S){var N=c.getPtId(S);d.each((function(t){null===B&&c.getPtId(t)===N&&(B={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1})}))}var j=function(){return B||{x0:0,x1:g,y0:0,y1:y}},U=d;return T&&(U=U.transition().each("end",(function(){var e=n.select(this);c.setSliceCursor(e,t,{hideOnRoot:!0,hideOnLeaves:!1,isTransitioning:!1})}))),U.each((function(s){var d=c.isHeader(s,C);s._x0=m(s.x0),s._x1=m(s.x1),s._y0=x(s.y0),s._y1=x(s.y1),s._hoverX=m(s.x1-C.marker.pad.r),s._hoverY=x(I?s.y1-C.marker.pad.b/2:s.y0+C.marker.pad.t/2);var v=n.select(this),k=i.ensureSingle(v,"path","surface",(function(t){t.style("pointer-events",E?"none":"all")}));T?k.transition().attrTween("d",(function(t){var e=A(t,p,j(),[g,y]);return function(t){return b(e(t))}})):k.attr("d",b),v.call(f,r,t,e,{styleOne:l,eventDataKeys:u.eventDataKeys,transitionTime:u.CLICK_TRANSITION_TIME,transitionEasing:u.CLICK_TRANSITION_EASING}).call(c.setSliceCursor,t,{isTransitioning:t._transitioning}),k.call(l,s,C,t,{hovered:!1}),s.x0===s.x1||s.y0===s.y1?s._text="":s._text=d?D?"":c.getPtLabel(s)||"":h(s,r,C,e,L)||"";var S=i.ensureSingle(v,"g","slicetext"),z=i.ensureSingle(S,"text","",(function(t){t.attr("data-notex",1)})),R=i.ensureUniformFontSize(t,c.determineTextFont(C,s,L.font));z.text(s._text||" ").classed("slicetext",!0).attr("text-anchor",O?"end":P||d?"start":"middle").call(a.font,R).call(o.convertToTspans,t),s.textBB=a.bBox(z.node()),s.transform=_(s,{fontSize:R.size,isHeader:d}),s.transform.fontSize=R.size,T?z.transition().attrTween("transform",(function(t){var e=M(t,p,j(),[g,y]);return function(t){return w(e(t))}})):z.attr("transform",w(s))})),B}},14102:function(t){"use strict";t.exports=function t(e,r,n){var i;n.swapXY&&(i=e.x0,e.x0=e.y0,e.y0=i,i=e.x1,e.x1=e.y1,e.y1=i),n.flipX&&(i=e.x0,e.x0=r[0]-e.x1,e.x1=r[0]-i),n.flipY&&(i=e.y0,e.y0=r[1]-e.y1,e.y1=r[1]-i);var a=e.children;if(a)for(var o=0;o<a.length;o++)t(a[o],r,n)}},70954:function(t,e,r){"use strict";t.exports={moduleType:"trace",name:"treemap",basePlotModule:r(78018),categories:[],animatable:!0,attributes:r(45802),layoutAttributes:r(55479),supplyDefaults:r(91174),supplyLayoutDefaults:r(77182),calc:r(65039).y,crossTraceCalc:r(65039).T,plot:r(5893),style:r(96362).style,colorbar:r(4898),meta:{}}},55479:function(t){"use strict";t.exports={treemapcolorway:{valType:"colorlist",editType:"calc"},extendtreemapcolors:{valType:"boolean",dflt:!0,editType:"calc"}}},77182:function(t,e,r){"use strict";var n=r(71828),i=r(55479);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r("treemapcolorway",e.colorway),r("extendtreemapcolors")}},37210:function(t,e,r){"use strict";var n=r(674),i=r(14102);t.exports=function(t,e,r){var a,o=r.flipX,s=r.flipY,l="dice-slice"===r.packing,u=r.pad[s?"bottom":"top"],c=r.pad[o?"right":"left"],f=r.pad[o?"left":"right"],h=r.pad[s?"top":"bottom"];l&&(a=c,c=u,u=a,a=f,f=h,h=a);var p=n.treemap().tile(function(t,e){switch(t){case"squarify":return n.treemapSquarify.ratio(e);case"binary":return n.treemapBinary;case"dice":return n.treemapDice;case"slice":return n.treemapSlice;default:return n.treemapSliceDice}}(r.packing,r.squarifyratio)).paddingInner(r.pad.inner).paddingLeft(c).paddingRight(f).paddingTop(u).paddingBottom(h).size(l?[e[1],e[0]]:e)(t);return(l||o||s)&&i(p,e,{swapXY:l,flipX:o,flipY:s}),p}},5893:function(t,e,r){"use strict";var n=r(80694),i=r(52583);t.exports=function(t,e,r,a){return n(t,e,r,a,{type:"treemap",drawDescendants:i})}},46650:function(t,e,r){"use strict";var n=r(39898),i=r(81684).sX,a=r(2791),o=r(71828),s=r(97313).TEXTPAD,l=r(17295).toMoveInsideBar,u=r(72597).recordMinTextSize,c=r(43473),f=r(66209);function h(t){return a.isHierarchyRoot(t)?"":a.getPtId(t)}t.exports=function(t,e,r,p,d){var v=t._fullLayout,g=e[0],y=g.trace,m="icicle"===y.type,x=g.hierarchy,b=a.findEntryWithLevel(x,y.level),_=n.select(r),w=_.selectAll("g.pathbar"),T=_.selectAll("g.slice");if(!b)return w.remove(),void T.remove();var k=a.isHierarchyRoot(b),A=!v.uniformtext.mode&&a.hasTransition(p),M=a.getMaxDepth(y),S=v._size,E=y.domain,L=S.w*(E.x[1]-E.x[0]),C=S.h*(E.y[1]-E.y[0]),P=L,O=y.pathbar.thickness,I=y.marker.line.width+c.gapWithPathbar,D=y.pathbar.visible?y.pathbar.side.indexOf("bottom")>-1?C+I:-(O+I):0,z={x0:P,x1:P,y0:D,y1:D+O},R=function(t,e,r){var n=y.tiling.pad,i=function(t){return t-n<=e.x0},a=function(t){return t+n>=e.x1},o=function(t){return t-n<=e.y0},s=function(t){return t+n>=e.y1};return t.x0===e.x0&&t.x1===e.x1&&t.y0===e.y0&&t.y1===e.y1?{x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1}:{x0:i(t.x0-n)?0:a(t.x0-n)?r[0]:t.x0,x1:i(t.x1+n)?0:a(t.x1+n)?r[0]:t.x1,y0:o(t.y0-n)?0:s(t.y0-n)?r[1]:t.y0,y1:o(t.y1+n)?0:s(t.y1+n)?r[1]:t.y1}},F=null,B={},N={},j=null,U=function(t,e){return e?B[h(t)]:N[h(t)]};g.hasMultipleRoots&&k&&M++,y._maxDepth=M,y._backgroundColor=v.paper_bgcolor,y._entryDepth=b.data.depth,y._atRootLevel=k;var V=-L/2+S.l+S.w*(E.x[1]+E.x[0])/2,H=-C/2+S.t+S.h*(1-(E.y[1]+E.y[0])/2),q=function(t){return V+t},G=function(t){return H+t},Z=G(0),Y=q(0),W=function(t){return Y+t},X=function(t){return Z+t};function J(t,e){return t+","+e}var K=W(0),$=function(t){t.x=Math.max(K,t.x)},Q=y.pathbar.edgeshape,tt=y[m?"tiling":"marker"].pad,et=function(t){return-1!==y.textposition.indexOf(t)},rt=et("top"),nt=et("left"),it=et("right"),at=et("bottom"),ot=function(t,e){var r=t.x0,n=t.x1,i=t.y0,a=t.y1,o=t.textBB,c=rt||e.isHeader&&!at?"start":at?"end":"middle",f=et("right"),h=et("left")||e.onPathbar?-1:f?1:0;if(e.isHeader){if((r+=(m?tt:tt.l)-s)>=(n-=(m?tt:tt.r)-s)){var p=(r+n)/2;r=p,n=p}var d;at?i<(d=a-(m?tt:tt.b))&&d<a&&(i=d):i<(d=i+(m?tt:tt.t))&&d<a&&(a=d)}var g=l(r,n,i,a,o,{isHorizontal:!1,constrained:!0,angle:0,anchor:c,leftToRight:h});return g.fontSize=e.fontSize,g.targetX=q(g.targetX),g.targetY=G(g.targetY),isNaN(g.targetX)||isNaN(g.targetY)?{}:(r!==n&&i!==a&&u(y.type,g,v),{scale:g.scale,rotate:g.rotate,textX:g.textX,textY:g.textY,anchorX:g.anchorX,anchorY:g.anchorY,targetX:g.targetX,targetY:g.targetY})},st=function(t,e){for(var r,n=0,i=t;!r&&n<M;)n++,(i=i.parent)?r=U(i,e):n=M;return r||{}},lt=function(t,e,r,n,a){var s,l=U(t,e);if(l)s=l;else if(e)s=z;else if(F)if(t.parent){var u=j||r;u&&!e?s=R(t,u,n):(s={},o.extendFlat(s,st(t,e)))}else s=o.extendFlat({},t),m&&("h"===a.orientation?a.flipX?s.x0=t.x1:s.x1=0:a.flipY?s.y0=t.y1:s.y1=0);else s={};return i(s,{x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1})},ut=function(t,e,r,n){var s=U(t,e),l={},c=function(t,e,r,n){if(e)return B[h(x)]||z;var i=N[y.level]||r;return function(t){return t.data.depth-b.data.depth<M}(t)?R(t,i,n):{}}(t,e,r,n);o.extendFlat(l,{transform:ot({x0:c.x0,x1:c.x1,y0:c.y0,y1:c.y1,textBB:t.textBB,_text:t._text},{isHeader:a.isHeader(t,y)})}),s?l=s:t.parent&&o.extendFlat(l,st(t,e));var f=t.transform;return t.x0!==t.x1&&t.y0!==t.y1&&u(y.type,f,v),i(l,{transform:{scale:f.scale,rotate:f.rotate,textX:f.textX,textY:f.textY,anchorX:f.anchorX,anchorY:f.anchorY,targetX:f.targetX,targetY:f.targetY}})},ct=function(t,e,r,a,o){var s=a[0],l=a[1];A?t.exit().transition().each((function(){var t=n.select(this);t.select("path.surface").transition().attrTween("d",(function(t){var r=function(t,e,r,n){var a,o=U(t,e);if(e)a=z;else{var s=U(b,e);a=s?R(t,s,n):{}}return i(o,a)}(t,e,0,[s,l]);return function(t){return o(r(t))}})),t.select("g.slicetext").attr("opacity",0)})).remove():t.exit().remove()},ft=function(t){var e=t.transform;return t.x0!==t.x1&&t.y0!==t.y1&&u(y.type,e,v),o.getTextTransform({textX:e.textX,textY:e.textY,anchorX:e.anchorX,anchorY:e.anchorY,targetX:e.targetX,targetY:e.targetY,scale:e.scale,rotate:e.rotate})};A&&(w.each((function(t){B[h(t)]={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1},t.transform&&(B[h(t)].transform={textX:t.transform.textX,textY:t.transform.textY,anchorX:t.transform.anchorX,anchorY:t.transform.anchorY,targetX:t.transform.targetX,targetY:t.transform.targetY,scale:t.transform.scale,rotate:t.transform.rotate})})),T.each((function(t){N[h(t)]={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1},t.transform&&(N[h(t)].transform={textX:t.transform.textX,textY:t.transform.textY,anchorX:t.transform.anchorX,anchorY:t.transform.anchorY,targetX:t.transform.targetX,targetY:t.transform.targetY,scale:t.transform.scale,rotate:t.transform.rotate}),!F&&a.isEntry(t)&&(F=t)}))),j=d(t,e,b,T,{width:L,height:C,viewX:q,viewY:G,pathSlice:function(t){var e=q(t.x0),r=q(t.x1),n=G(t.y0),i=G(t.y1),a=r-e,o=i-n;if(!a||!o)return"";var s=y.marker.cornerradius||0,l=Math.min(s,a/2,o/2);l&&t.data&&t.data.data&&t.data.data.label&&(rt&&(l=Math.min(l,tt.t)),nt&&(l=Math.min(l,tt.l)),it&&(l=Math.min(l,tt.r)),at&&(l=Math.min(l,tt.b)));var u=function(t,e){return l?"a"+J(l,l)+" 0 0 1 "+J(t,e):""};return"M"+J(e,n+l)+u(l,-l)+"L"+J(r-l,n)+u(l,l)+"L"+J(r,i-l)+u(-l,l)+"L"+J(e+l,i)+u(-l,-l)+"Z"},toMoveInsideSlice:ot,prevEntry:F,makeUpdateSliceInterpolator:lt,makeUpdateTextInterpolator:ut,handleSlicesExit:ct,hasTransition:A,strTransform:ft}),y.pathbar.visible?f(t,e,b,w,{barDifY:D,width:P,height:O,viewX:W,viewY:X,pathSlice:function(t){var e=W(Math.max(Math.min(t.x0,t.x0),0)),r=W(Math.min(Math.max(t.x1,t.x1),P)),n=X(t.y0),i=X(t.y1),a=O/2,o={},s={};o.x=e,s.x=r,o.y=s.y=(n+i)/2;var l={x:e,y:n},u={x:r,y:n},c={x:r,y:i},f={x:e,y:i};return">"===Q?(l.x-=a,u.x-=a,c.x-=a,f.x-=a):"/"===Q?(c.x-=a,f.x-=a,o.x-=a/2,s.x-=a/2):"\\"===Q?(l.x-=a,u.x-=a,o.x-=a/2,s.x-=a/2):"<"===Q&&(o.x-=a,s.x-=a),$(l),$(f),$(o),$(u),$(c),$(s),"M"+J(l.x,l.y)+"L"+J(u.x,u.y)+"L"+J(s.x,s.y)+"L"+J(c.x,c.y)+"L"+J(f.x,f.y)+"L"+J(o.x,o.y)+"Z"},toMoveInsideSlice:ot,makeUpdateSliceInterpolator:lt,makeUpdateTextInterpolator:ut,handleSlicesExit:ct,hasTransition:A,strTransform:ft}):w.remove()}},96362:function(t,e,r){"use strict";var n=r(39898),i=r(7901),a=r(71828),o=r(2791),s=r(72597).resizeText,l=r(43467);function u(t,e,r,n,s){var u,c,f=(s||{}).hovered,h=e.data.data,p=h.i,d=h.color,v=o.isHierarchyRoot(e),g=1;if(f)u=r._hovered.marker.line.color,c=r._hovered.marker.line.width;else if(v&&d===r.root.color)g=100,u="rgba(0,0,0,0)",c=0;else if(u=a.castOption(r,p,"marker.line.color")||i.defaultLine,c=a.castOption(r,p,"marker.line.width")||0,!r._hasColorscale&&!e.onPathbar){var y=r.marker.depthfade;if(y){var m,x=i.combine(i.addOpacity(r._backgroundColor,.75),d);if(!0===y){var b=o.getMaxDepth(r);m=isFinite(b)?o.isLeaf(e)?0:r._maxVisibleLayers-(e.data.depth-r._entryDepth):e.data.height+1}else m=e.data.depth-r._entryDepth,r._atRootLevel||m++;if(m>0)for(var _=0;_<m;_++){var w=.5*_/m;d=i.combine(i.addOpacity(x,w),d)}}}t.call(l,e,r,n,d).style("stroke-width",c).call(i.stroke,u).style("opacity",g)}t.exports={style:function(t){var e=t._fullLayout._treemaplayer.selectAll(".trace");s(t,e,"treemap"),e.each((function(e){var r=n.select(this),i=e[0].trace;r.style("opacity",i.opacity),r.selectAll("path.surface").each((function(e){n.select(this).call(u,e,i,t,{hovered:!1})}))}))},styleOne:u}},68875:function(t,e,r){"use strict";var n=r(53522),i=r(1426).extendFlat,a=r(12663).axisHoverFormat;t.exports={y:n.y,x:n.x,x0:n.x0,y0:n.y0,xhoverformat:a("x"),yhoverformat:a("y"),name:i({},n.name,{}),orientation:i({},n.orientation,{}),bandwidth:{valType:"number",min:0,editType:"calc"},scalegroup:{valType:"string",dflt:"",editType:"calc"},scalemode:{valType:"enumerated",values:["width","count"],dflt:"width",editType:"calc"},spanmode:{valType:"enumerated",values:["soft","hard","manual"],dflt:"soft",editType:"calc"},span:{valType:"info_array",items:[{valType:"any",editType:"calc"},{valType:"any",editType:"calc"}],editType:"calc"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,dflt:2,editType:"style"},editType:"plot"},fillcolor:n.fillcolor,points:i({},n.boxpoints,{}),jitter:i({},n.jitter,{}),pointpos:i({},n.pointpos,{}),width:i({},n.width,{}),marker:n.marker,text:n.text,hovertext:n.hovertext,hovertemplate:n.hovertemplate,quartilemethod:n.quartilemethod,box:{visible:{valType:"boolean",dflt:!1,editType:"plot"},width:{valType:"number",min:0,max:1,dflt:.25,editType:"plot"},fillcolor:{valType:"color",editType:"style"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,editType:"style"},editType:"style"},editType:"plot"},meanline:{visible:{valType:"boolean",dflt:!1,editType:"plot"},color:{valType:"color",editType:"style"},width:{valType:"number",min:0,editType:"style"},editType:"plot"},side:{valType:"enumerated",values:["both","positive","negative"],dflt:"both",editType:"calc"},offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup,selected:n.selected,unselected:n.unselected,hoveron:{valType:"flaglist",flags:["violins","points","kde"],dflt:"violins+points+kde",extras:["all"],editType:"style"}}},38603:function(t,e,r){"use strict";var n=r(71828),i=r(89298),a=r(48518),o=r(60168),s=r(50606).BADNUM;function l(t,e,r){var i=e.max-e.min;if(!i)return t.bandwidth?t.bandwidth:0;if(t.bandwidth)return Math.max(t.bandwidth,i/1e4);var a=r.length,o=n.stdev(r,a-1,e.mean);return Math.max(function(t,e,r){return 1.059*Math.min(e,r/1.349)*Math.pow(t,-.2)}(a,o,e.q3-e.q1),i/100)}function u(t,e,r,n){var a,o=t.spanmode,l=t.span||[],u=[e.min,e.max],c=[e.min-2*n,e.max+2*n];function f(n){var i=l[n],a="multicategory"===r.type?r.r2c(i):r.d2c(i,0,t[e.valLetter+"calendar"]);return a===s?c[n]:a}var h={type:"linear",range:a="soft"===o?c:"hard"===o?u:[f(0),f(1)]};return i.setConvert(h),h.cleanRange(),a}t.exports=function(t,e){var r=a(t,e);if(r[0].t.empty)return r;for(var s=t._fullLayout,c=i.getFromId(t,e["h"===e.orientation?"xaxis":"yaxis"]),f=1/0,h=-1/0,p=0,d=0,v=0;v<r.length;v++){var g=r[v],y=g.pts.map(o.extractVal),m=g.bandwidth=l(e,g,y),x=g.span=u(e,g,c,m);if(g.min===g.max&&0===m)x=g.span=[g.min,g.max],g.density=[{v:1,t:x[0]}],g.bandwidth=m,p=Math.max(p,1);else{var b=x[1]-x[0],_=Math.ceil(b/(m/3)),w=b/_;if(!isFinite(w)||!isFinite(_))return n.error("Something went wrong with computing the violin span"),r[0].t.empty=!0,r;var T=o.makeKDE(g,e,y);g.density=new Array(_);for(var k=0,A=x[0];A<x[1]+w/2;k++,A+=w){var M=T(A);g.density[k]={v:M,t:A},p=Math.max(p,M)}}d=Math.max(d,y.length),f=Math.min(f,x[0]),h=Math.max(h,x[1])}var S=i.findExtremes(c,[f,h],{padded:!0});if(e._extremes[c._id]=S,e.width)r[0].t.maxKDE=p;else{var E=s._violinScaleGroupStats,L=e.scalegroup,C=E[L];C?(C.maxKDE=Math.max(C.maxKDE,p),C.maxCount=Math.max(C.maxCount,d)):E[L]={maxKDE:p,maxCount:d}}return r[0].t.labels.kde=n._(t,"kde:"),r}},86403:function(t,e,r){"use strict";var n=r(37188).setPositionOffset,i=["v","h"];t.exports=function(t,e){for(var r=t.calcdata,a=e.xaxis,o=e.yaxis,s=0;s<i.length;s++){for(var l=i[s],u="h"===l?o:a,c=[],f=0;f<r.length;f++){var h=r[f],p=h[0].t,d=h[0].trace;!0!==d.visible||"violin"!==d.type||p.empty||d.orientation!==l||d.xaxis!==a._id||d.yaxis!==o._id||c.push(f)}n("violin",t,c,u)}}},15899:function(t,e,r){"use strict";var n=r(71828),i=r(7901),a=r(36411),o=r(68875);t.exports=function(t,e,r,s){function l(r,i){return n.coerce(t,e,o,r,i)}function u(r,i){return n.coerce2(t,e,o,r,i)}if(a.handleSampleDefaults(t,e,l,s),!1!==e.visible){l("bandwidth"),l("side"),l("width")||(l("scalegroup",e.name),l("scalemode"));var c,f=l("span");Array.isArray(f)&&(c="manual"),l("spanmode",c);var h=l("line.color",(t.marker||{}).color||r),p=l("line.width"),d=l("fillcolor",i.addOpacity(e.line.color,.5));a.handlePointsDefaults(t,e,l,{prefix:""});var v=u("box.width"),g=u("box.fillcolor",d),y=u("box.line.color",h),m=u("box.line.width",p);l("box.visible",Boolean(v||g||y||m))||(e.box={visible:!1});var x=u("meanline.color",h),b=u("meanline.width",p);l("meanline.visible",Boolean(x||b))||(e.meanline={visible:!1}),l("quartilemethod")}}},60168:function(t,e,r){"use strict";var n=r(71828),i=function(t){return 1/Math.sqrt(2*Math.PI)*Math.exp(-.5*t*t)};e.makeKDE=function(t,e,r){var n=r.length,a=i,o=t.bandwidth,s=1/(n*o);return function(t){for(var e=0,i=0;i<n;i++)e+=a((t-r[i])/o);return s*e}},e.getPositionOnKdePath=function(t,e,r){var i,a;"h"===e.orientation?(i="y",a="x"):(i="x",a="y");var o=n.findPointOnPath(t.path,r,a,{pathLength:t.pathLength}),s=t.posCenterPx,l=o[i];return[l,"both"===e.side?2*s-l:s]},e.getKdeValue=function(t,r,n){var i=t.pts.map(e.extractVal);return e.makeKDE(t,r,i)(n)/t.posDensityScale},e.extractVal=function(t){return t.v}},57634:function(t,e,r){"use strict";var n=r(7901),i=r(71828),a=r(89298),o=r(41868),s=r(60168);t.exports=function(t,e,r,l,u){u||(u={});var c,f,h=u.hoverLayer,p=t.cd,d=p[0].trace,v=d.hoveron,g=-1!==v.indexOf("violins"),y=-1!==v.indexOf("kde"),m=[];if(g||y){var x=o.hoverOnBoxes(t,e,r,l);if(y&&x.length>0){var b,_,w,T,k,A=t.xa,M=t.ya;"h"===d.orientation?(k=e,b="y",w=M,_="x",T=A):(k=r,b="x",w=A,_="y",T=M);var S=p[t.index];if(k>=S.span[0]&&k<=S.span[1]){var E=i.extendFlat({},t),L=T.c2p(k,!0),C=s.getKdeValue(S,d,k),P=s.getPositionOnKdePath(S,d,L),O=w._offset,I=w._length;E[b+"0"]=P[0],E[b+"1"]=P[1],E[_+"0"]=E[_+"1"]=L,E[_+"Label"]=_+": "+a.hoverLabelText(T,k,d[_+"hoverformat"])+", "+p[0].t.labels.kde+" "+C.toFixed(3);for(var D=0,z=0;z<x.length;z++)if("med"===x[z].attr){D=z;break}E.spikeDistance=x[D].spikeDistance;var R=b+"Spike";E[R]=x[D][R],x[D].spikeDistance=void 0,x[D][R]=void 0,E.hovertemplate=!1,m.push(E),(f={})[b+"1"]=i.constrain(O+P[0],O,O+I),f[b+"2"]=i.constrain(O+P[1],O,O+I),f[_+"1"]=f[_+"2"]=T._offset+L}}g&&(m=m.concat(x))}-1!==v.indexOf("points")&&(c=o.hoverOnPoints(t,e,r));var F=h.selectAll(".violinline-"+d.uid).data(f?[0]:[]);return F.enter().append("line").classed("violinline-"+d.uid,!0).attr("stroke-width",1.5),F.exit().remove(),F.attr(f).call(n.stroke,t.color),"closest"===l?c?[c]:m:c?(m.push(c),m):m}},47462:function(t,e,r){"use strict";t.exports={attributes:r(68875),layoutAttributes:r(9228),supplyDefaults:r(15899),crossTraceDefaults:r(36411).crossTraceDefaults,supplyLayoutDefaults:r(33598),calc:r(38603),crossTraceCalc:r(86403),plot:r(28443),style:r(31847),styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(57634),selectPoints:r(24626),moduleType:"trace",name:"violin",basePlotModule:r(93612),categories:["cartesian","svg","symbols","oriented","box-violin","showLegend","violinLayout","zoomScale"],meta:{}}},9228:function(t,e,r){"use strict";var n=r(40094),i=r(71828).extendFlat;t.exports={violinmode:i({},n.boxmode,{}),violingap:i({},n.boxgap,{}),violingroupgap:i({},n.boxgroupgap,{})}},33598:function(t,e,r){"use strict";var n=r(71828),i=r(9228),a=r(4199);t.exports=function(t,e,r){a._supply(t,e,r,(function(r,a){return n.coerce(t,e,i,r,a)}),"violin")}},28443:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=r(91424),o=r(86047),s=r(34621),l=r(60168);t.exports=function(t,e,r,u){var c=t._context.staticPlot,f=t._fullLayout,h=e.xaxis,p=e.yaxis;function d(t,e){var r=s(t,{xaxis:h,yaxis:p,trace:e,connectGaps:!0,baseTolerance:.75,shape:"spline",simplify:!0,linearized:!0});return a.smoothopen(r[0],1)}i.makeTraceGroups(u,r,"trace violins").each((function(t){var r=n.select(this),a=t[0],s=a.t,u=a.trace;if(!0!==u.visible||s.empty)r.remove();else{var v=s.bPos,g=s.bdPos,y=e[s.valLetter+"axis"],m=e[s.posLetter+"axis"],x="both"===u.side,b=x||"positive"===u.side,_=x||"negative"===u.side,w=r.selectAll("path.violin").data(i.identity);w.enter().append("path").style("vector-effect",c?"none":"non-scaling-stroke").attr("class","violin"),w.exit().remove(),w.each((function(t){var e,r,i,a,o,l,c,h,p=n.select(this),w=t.density,T=w.length,k=m.c2l(t.pos+v,!0),A=m.l2p(k);if(u.width)e=s.maxKDE/g;else{var M=f._violinScaleGroupStats[u.scalegroup];e="count"===u.scalemode?M.maxKDE/g*(M.maxCount/t.pts.length):M.maxKDE/g}if(b){for(c=new Array(T),o=0;o<T;o++)(h=c[o]={})[s.posLetter]=k+w[o].v/e,h[s.valLetter]=y.c2l(w[o].t,!0);r=d(c,u)}if(_){for(c=new Array(T),l=0,o=T-1;l<T;l++,o--)(h=c[l]={})[s.posLetter]=k-w[o].v/e,h[s.valLetter]=y.c2l(w[o].t,!0);i=d(c,u)}if(x)a=r+"L"+i.substr(1)+"Z";else{var S=[A,y.c2p(w[0].t)],E=[A,y.c2p(w[T-1].t)];"h"===u.orientation&&(S.reverse(),E.reverse()),a=b?"M"+S+"L"+r.substr(1)+"L"+E:"M"+E+"L"+i.substr(1)+"L"+S}p.attr("d",a),t.posCenterPx=A,t.posDensityScale=e*g,t.path=p.node(),t.pathLength=t.path.getTotalLength()/(x?2:1)}));var T,k,A,M=u.box,S=M.width,E=(M.line||{}).width;x?(T=g*S,k=0):b?(T=[0,g*S/2],k=E*{x:1,y:-1}[s.posLetter]):(T=[g*S/2,0],k=E*{x:-1,y:1}[s.posLetter]),o.plotBoxAndWhiskers(r,{pos:m,val:y},u,{bPos:v,bdPos:T,bPosPxOffset:k}),o.plotBoxMean(r,{pos:m,val:y},u,{bPos:v,bdPos:T,bPosPxOffset:k}),!u.box.visible&&u.meanline.visible&&(A=i.identity);var L=r.selectAll("path.meanline").data(A||[]);L.enter().append("path").attr("class","meanline").style("fill","none").style("vector-effect",c?"none":"non-scaling-stroke"),L.exit().remove(),L.each((function(t){var e=y.c2p(t.mean,!0),r=l.getPositionOnKdePath(t,u,e);n.select(this).attr("d","h"===u.orientation?"M"+e+","+r[0]+"V"+r[1]:"M"+r[0]+","+e+"H"+r[1])})),o.plotPoints(r,{x:h,y:p},u,s)}}))}},31847:function(t,e,r){"use strict";var n=r(39898),i=r(7901),a=r(16296).stylePoints;t.exports=function(t){var e=n.select(t).selectAll("g.trace.violins");e.style("opacity",(function(t){return t[0].trace.opacity})),e.each((function(e){var r=e[0].trace,o=n.select(this),s=r.box||{},l=s.line||{},u=r.meanline||{},c=u.width;o.selectAll("path.violin").style("stroke-width",r.line.width+"px").call(i.stroke,r.line.color).call(i.fill,r.fillcolor),o.selectAll("path.box").style("stroke-width",l.width+"px").call(i.stroke,l.color).call(i.fill,s.fillcolor);var f={"stroke-width":c+"px","stroke-dasharray":2*c+"px,"+c+"px"};o.selectAll("path.mean").style(f).call(i.stroke,u.color),o.selectAll("path.meanline").style(f).call(i.stroke,u.color),a(o,r,t)}))}},16336:function(t,e,r){"use strict";var n=r(50693),i=r(16249),a=r(54532),o=r(9012),s=r(1426).extendFlat,l=r(30962).overrideAll,u=t.exports=l(s({x:i.x,y:i.y,z:i.z,value:i.value,isomin:i.isomin,isomax:i.isomax,surface:i.surface,spaceframe:{show:{valType:"boolean",dflt:!1},fill:{valType:"number",min:0,max:1,dflt:1}},slices:i.slices,caps:i.caps,text:i.text,hovertext:i.hovertext,xhoverformat:i.xhoverformat,yhoverformat:i.yhoverformat,zhoverformat:i.zhoverformat,valuehoverformat:i.valuehoverformat,hovertemplate:i.hovertemplate},n("",{colorAttr:"`value`",showScaleDflt:!0,editTypeOverride:"calc"}),{colorbar:i.colorbar,opacity:i.opacity,opacityscale:a.opacityscale,lightposition:i.lightposition,lighting:i.lighting,flatshading:i.flatshading,contour:i.contour,hoverinfo:s({},o.hoverinfo),showlegend:s({},o.showlegend,{dflt:!1})}),"calc","nested");u.x.editType=u.y.editType=u.z.editType=u.value.editType="calc+clearAxisTypes",u.transforms=void 0},64809:function(t,e,r){"use strict";var n=r(9330).gl_mesh3d,i=r(81697).parseColorScale,a=r(78614),o=r(21081).extractOpts,s=r(90060),l=r(22674).findNearestOnAxis,u=r(22674).generateIsoMeshes;function c(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name="",this.data=null,this.showContour=!1}var f=c.prototype;f.handlePick=function(t){if(t.object===this.mesh){var e=t.data.index,r=this.data._meshX[e],n=this.data._meshY[e],i=this.data._meshZ[e],a=this.data._Ys.length,o=this.data._Zs.length,s=l(r,this.data._Xs).id,u=l(n,this.data._Ys).id,c=l(i,this.data._Zs).id,f=t.index=c+o*u+o*a*s;t.traceCoordinate=[this.data._meshX[f],this.data._meshY[f],this.data._meshZ[f],this.data._value[f]];var h=this.data.hovertext||this.data.text;return Array.isArray(h)&&void 0!==h[f]?t.textLabel=h[f]:h&&(t.textLabel=h),!0}},f.update=function(t){var e=this.scene,r=e.fullSceneLayout;function n(t,e,r,n){return e.map((function(e){return t.d2l(e,0,n)*r}))}this.data=u(t);var l={positions:s(n(r.xaxis,t._meshX,e.dataScale[0],t.xcalendar),n(r.yaxis,t._meshY,e.dataScale[1],t.ycalendar),n(r.zaxis,t._meshZ,e.dataScale[2],t.zcalendar)),cells:s(t._meshI,t._meshJ,t._meshK),lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,opacityscale:t.opacityscale,contourEnable:t.contour.show,contourColor:a(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading},c=o(t);l.vertexIntensity=t._meshIntensity,l.vertexIntensityBounds=[c.min,c.max],l.colormap=i(t),this.mesh.update(l)},f.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},t.exports=function(t,e){var r=t.glplot.gl,i=n({gl:r}),a=new c(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}},47651:function(t,e,r){"use strict";var n=r(71828),i=r(16336),a=r(82738).supplyIsoDefaults,o=r(91831).opacityscaleDefaults;t.exports=function(t,e,r,s){function l(r,a){return n.coerce(t,e,i,r,a)}a(t,e,r,s,l),o(t,e,s,l)}},17659:function(t,e,r){"use strict";t.exports={attributes:r(16336),supplyDefaults:r(47651),calc:r(56959),colorbar:{min:"cmin",max:"cmax"},plot:r(64809),moduleType:"trace",name:"volume",basePlotModule:r(58547),categories:["gl3d","showLegend"],meta:{}}},43037:function(t,e,r){"use strict";var n=r(1486),i=r(82196).line,a=r(9012),o=r(12663).axisHoverFormat,s=r(5386).fF,l=r(5386).si,u=r(48334),c=r(1426).extendFlat,f=r(7901);function h(t){return{marker:{color:c({},n.marker.color,{arrayOk:!1,editType:"style"}),line:{color:c({},n.marker.line.color,{arrayOk:!1,editType:"style"}),width:c({},n.marker.line.width,{arrayOk:!1,editType:"style"}),editType:"style"},editType:"style"},editType:"style"}}t.exports={measure:{valType:"data_array",dflt:[],editType:"calc"},base:{valType:"number",dflt:null,arrayOk:!1,editType:"calc"},x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,xperiod:n.xperiod,yperiod:n.yperiod,xperiod0:n.xperiod0,yperiod0:n.yperiod0,xperiodalignment:n.xperiodalignment,yperiodalignment:n.yperiodalignment,xhoverformat:o("x"),yhoverformat:o("y"),hovertext:n.hovertext,hovertemplate:s({},{keys:u.eventDataKeys}),hoverinfo:c({},a.hoverinfo,{flags:["name","x","y","text","initial","delta","final"]}),textinfo:{valType:"flaglist",flags:["label","text","initial","delta","final"],extras:["none"],editType:"plot",arrayOk:!1},texttemplate:l({editType:"plot"},{keys:u.eventDataKeys.concat(["label"])}),text:n.text,textposition:n.textposition,insidetextanchor:n.insidetextanchor,textangle:n.textangle,textfont:n.textfont,insidetextfont:n.insidetextfont,outsidetextfont:n.outsidetextfont,constraintext:n.constraintext,cliponaxis:n.cliponaxis,orientation:n.orientation,offset:n.offset,width:n.width,increasing:h(),decreasing:h(),totals:h(),connector:{line:{color:c({},i.color,{dflt:f.defaultLine}),width:c({},i.width,{editType:"plot"}),dash:i.dash,editType:"plot"},mode:{valType:"enumerated",values:["spanning","between"],dflt:"between",editType:"plot"},visible:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup}},52752:function(t,e,r){"use strict";var n=r(89298),i=r(42973),a=r(71828).mergeArray,o=r(66279),s=r(50606).BADNUM;function l(t){return"a"===t||"absolute"===t}function u(t){return"t"===t||"total"===t}t.exports=function(t,e){var r,c,f,h,p,d,v=n.getFromId(t,e.xaxis||"x"),g=n.getFromId(t,e.yaxis||"y");"h"===e.orientation?(r=v.makeCalcdata(e,"x"),f=g.makeCalcdata(e,"y"),h=i(e,g,"y",f),p=!!e.yperiodalignment,d="y"):(r=g.makeCalcdata(e,"y"),f=v.makeCalcdata(e,"x"),h=i(e,v,"x",f),p=!!e.xperiodalignment,d="x"),c=h.vals;for(var y,m=Math.min(c.length,r.length),x=new Array(m),b=0,_=!1,w=0;w<m;w++){var T=r[w]||0,k=!1;(r[w]!==s||u(e.measure[w])||l(e.measure[w]))&&w+1<m&&(r[w+1]!==s||u(e.measure[w+1])||l(e.measure[w+1]))&&(k=!0);var A=x[w]={i:w,p:c[w],s:T,rawS:T,cNext:k};l(e.measure[w])?(b=A.s,A.isSum=!0,A.dir="totals",A.s=b):u(e.measure[w])?(A.isSum=!0,A.dir="totals",A.s=b):(A.isSum=!1,A.dir=A.rawS<0?"decreasing":"increasing",y=A.s,A.s=b+y,b+=y),"totals"===A.dir&&(_=!0),p&&(x[w].orig_p=f[w],x[w][d+"End"]=h.ends[w],x[w][d+"Start"]=h.starts[w]),e.ids&&(A.id=String(e.ids[w])),A.v=(e.base||0)+b}return x.length&&(x[0].hasTotals=_),a(e.text,x,"tx"),a(e.hovertext,x,"htx"),o(x,e),x}},48334:function(t){"use strict";t.exports={eventDataKeys:["initial","delta","final"]}},70766:function(t,e,r){"use strict";var n=r(11661).setGroupPositions;t.exports=function(t,e){var r,i,a=t._fullLayout,o=t._fullData,s=t.calcdata,l=e.xaxis,u=e.yaxis,c=[],f=[],h=[];for(i=0;i<o.length;i++){var p=o[i];!0===p.visible&&p.xaxis===l._id&&p.yaxis===u._id&&"waterfall"===p.type&&(r=s[i],"h"===p.orientation?h.push(r):f.push(r),c.push(r))}var d={mode:a.waterfallmode,norm:a.waterfallnorm,gap:a.waterfallgap,groupgap:a.waterfallgroupgap};for(n(t,l,u,f,d),n(t,u,l,h,d),i=0;i<c.length;i++){r=c[i];for(var v=0;v<r.length;v++){var g=r[v];!1===g.isSum&&(g.s0+=0===v?0:r[v-1].s),v+1<r.length&&(r[v].nextP0=r[v+1].p0,r[v].nextS0=r[v+1].s0)}}}},83266:function(t,e,r){"use strict";var n=r(71828),i=r(26125),a=r(90769).handleText,o=r(67513),s=r(73927),l=r(43037),u=r(7901),c=r(22372),f=c.INCREASING.COLOR,h=c.DECREASING.COLOR;function p(t,e,r){t(e+".marker.color",r),t(e+".marker.line.color",u.defaultLine),t(e+".marker.line.width")}t.exports={supplyDefaults:function(t,e,r,i){function u(r,i){return n.coerce(t,e,l,r,i)}if(o(t,e,i,u)){s(t,e,i,u),u("xhoverformat"),u("yhoverformat"),u("measure"),u("orientation",e.x&&!e.y?"h":"v"),u("base"),u("offset"),u("width"),u("text"),u("hovertext"),u("hovertemplate");var c=u("textposition");a(t,e,i,u,c,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),"none"!==e.textposition&&(u("texttemplate"),e.texttemplate||u("textinfo")),p(u,"increasing",f),p(u,"decreasing",h),p(u,"totals","#4499FF"),u("connector.visible")&&(u("connector.mode"),u("connector.line.width")&&(u("connector.line.color"),u("connector.line.dash")))}else e.visible=!1},crossTraceDefaults:function(t,e){var r,a;function o(t){return n.coerce(a._input,a,l,t)}if("group"===e.waterfallmode)for(var s=0;s<t.length;s++)r=(a=t[s])._input,i(r,a,e,o)}}},58593:function(t){"use strict";t.exports=function(t,e){return t.x="xVal"in e?e.xVal:e.x,t.y="yVal"in e?e.yVal:e.y,"initial"in e&&(t.initial=e.initial),"delta"in e&&(t.delta=e.delta),"final"in e&&(t.final=e.final),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},61326:function(t,e,r){"use strict";var n=r(89298).hoverLabelText,i=r(7901).opacity,a=r(95423).hoverOnBars,o=r(22372),s=o.INCREASING.SYMBOL,l=o.DECREASING.SYMBOL;t.exports=function(t,e,r,o,u){var c=a(t,e,r,o,u);if(c){var f=c.cd,h=f[0].trace,p="h"===h.orientation,d=p?"x":"y",v=p?t.xa:t.ya,g=f[c.index],y=g.isSum?g.b+g.s:g.rawS;c.initial=g.b+g.s-y,c.delta=y,c.final=c.initial+c.delta;var m=k(Math.abs(c.delta));c.deltaLabel=y<0?"("+m+")":m,c.finalLabel=k(c.final),c.initialLabel=k(c.initial);var x=g.hi||h.hoverinfo,b=[];if(x&&"none"!==x&&"skip"!==x){var _="all"===x,w=x.split("+"),T=function(t){return _||-1!==w.indexOf(t)};g.isSum||(!T("final")||T(p?"x":"y")||b.push(c.finalLabel),T("delta")&&(y<0?b.push(c.deltaLabel+" "+l):b.push(c.deltaLabel+" "+s)),T("initial")&&b.push("Initial: "+c.initialLabel))}return b.length&&(c.extraText=b.join("<br>")),c.color=function(t,e){var r=t[e.dir].marker,n=r.color,a=r.line.color,o=r.line.width;return i(n)?n:i(a)&&o?a:void 0}(h,g),[c]}function k(t){return n(v,t,h[d+"hoverformat"])}}},19990:function(t,e,r){"use strict";t.exports={attributes:r(43037),layoutAttributes:r(13494),supplyDefaults:r(83266).supplyDefaults,crossTraceDefaults:r(83266).crossTraceDefaults,supplyLayoutDefaults:r(5176),calc:r(52752),crossTraceCalc:r(70766),plot:r(30436),style:r(55750).style,hoverPoints:r(61326),eventData:r(58593),selectPoints:r(81974),moduleType:"trace",name:"waterfall",basePlotModule:r(93612),categories:["bar-like","cartesian","svg","oriented","showLegend","zoomScale"],meta:{}}},13494:function(t){"use strict";t.exports={waterfallmode:{valType:"enumerated",values:["group","overlay"],dflt:"group",editType:"calc"},waterfallgap:{valType:"number",min:0,max:1,editType:"calc"},waterfallgroupgap:{valType:"number",min:0,max:1,dflt:0,editType:"calc"}}},5176:function(t,e,r){"use strict";var n=r(71828),i=r(13494);t.exports=function(t,e,r){var a=!1;function o(r,a){return n.coerce(t,e,i,r,a)}for(var s=0;s<r.length;s++){var l=r[s];if(l.visible&&"waterfall"===l.type){a=!0;break}}a&&(o("waterfallmode"),o("waterfallgap",.2),o("waterfallgroupgap"))}},30436:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=r(91424),o=r(50606).BADNUM,s=r(17295),l=r(72597).clearMinTextSize;t.exports=function(t,e,r,u){var c=t._fullLayout;l("waterfall",c),s.plot(t,e,r,u,{mode:c.waterfallmode,norm:c.waterfallmode,gap:c.waterfallgap,groupgap:c.waterfallgroupgap}),function(t,e,r,s){var l=e.xaxis,u=e.yaxis;i.makeTraceGroups(s,r,"trace bars").each((function(r){var s=n.select(this),c=r[0].trace,f=i.ensureSingle(s,"g","lines");if(c.connector&&c.connector.visible){var h="h"===c.orientation,p=c.connector.mode,d=f.selectAll("g.line").data(i.identity);d.enter().append("g").classed("line",!0),d.exit().remove();var v=d.size();d.each((function(r,s){if(s===v-1||r.cNext){var c=function(t,e,r,n){var i=[],a=[],o=n?e:r,s=n?r:e;return i[0]=o.c2p(t.s0,!0),a[0]=s.c2p(t.p0,!0),i[1]=o.c2p(t.s1,!0),a[1]=s.c2p(t.p1,!0),i[2]=o.c2p(t.nextS0,!0),a[2]=s.c2p(t.nextP0,!0),n?[i,a]:[a,i]}(r,l,u,h),f=c[0],d=c[1],g="";f[0]!==o&&d[0]!==o&&f[1]!==o&&d[1]!==o&&("spanning"===p&&!r.isSum&&s>0&&(g+=h?"M"+f[0]+","+d[1]+"V"+d[0]:"M"+f[1]+","+d[0]+"H"+f[0]),"between"!==p&&(r.isSum||s<v-1)&&(g+=h?"M"+f[1]+","+d[0]+"V"+d[1]:"M"+f[0]+","+d[1]+"H"+f[1]),f[2]!==o&&d[2]!==o&&(g+=h?"M"+f[1]+","+d[1]+"V"+d[2]:"M"+f[1]+","+d[1]+"H"+f[2])),""===g&&(g="M0,0Z"),i.ensureSingle(n.select(this),"path").attr("d",g).call(a.setClipUrl,e.layerClipId,t)}}))}else f.remove()}))}(t,e,r,u)}},55750:function(t,e,r){"use strict";var n=r(39898),i=r(91424),a=r(7901),o=r(37822).DESELECTDIM,s=r(16688),l=r(72597).resizeText,u=s.styleTextPoints;t.exports={style:function(t,e,r){var s=r||n.select(t).selectAll("g.waterfalllayer").selectAll("g.trace");l(t,s,"waterfall"),s.style("opacity",(function(t){return t[0].trace.opacity})),s.each((function(e){var r=n.select(this),s=e[0].trace;r.selectAll(".point > path").each((function(t){if(!t.isBlank){var e=s[t.dir].marker;n.select(this).call(a.fill,e.color).call(a.stroke,e.line.color).call(i.dashLine,e.line.dash,e.line.width).style("opacity",s.selectedpoints&&!t.selected?o:1)}})),u(r,s,t),r.selectAll(".lines").each((function(){var t=s.connector.line;i.lineGroupStyle(n.select(this).selectAll("path"),t.width,t.color,t.dash)}))}))}}},82887:function(t,e,r){"use strict";var n=r(89298),i=r(71828),a=r(86281),o=r(79344).p,s=r(50606).BADNUM;e.moduleType="transform",e.name="aggregate";var l=e.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},groups:{valType:"string",strict:!0,noBlank:!0,arrayOk:!0,dflt:"x",editType:"calc"},aggregations:{_isLinkedToArray:"aggregation",target:{valType:"string",editType:"calc"},func:{valType:"enumerated",values:["count","sum","avg","median","mode","rms","stddev","min","max","first","last","change","range"],dflt:"first",editType:"calc"},funcmode:{valType:"enumerated",values:["sample","population"],dflt:"sample",editType:"calc"},enabled:{valType:"boolean",dflt:!0,editType:"calc"},editType:"calc"},editType:"calc"},u=l.aggregations;function c(t,e,r,a){if(a.enabled){for(var o=a.target,l=i.nestedProperty(e,o),u=l.get(),c=function(t,e){var r=t.func,n=e.d2c,a=e.c2d;switch(r){case"count":return f;case"first":return h;case"last":return p;case"sum":return function(t,e){for(var r=0,i=0;i<e.length;i++){var o=n(t[e[i]]);o!==s&&(r+=o)}return a(r)};case"avg":return function(t,e){for(var r=0,i=0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(r+=l,i++)}return i?a(r/i):s};case"min":return function(t,e){for(var r=1/0,i=0;i<e.length;i++){var o=n(t[e[i]]);o!==s&&(r=Math.min(r,o))}return r===1/0?s:a(r)};case"max":return function(t,e){for(var r=-1/0,i=0;i<e.length;i++){var o=n(t[e[i]]);o!==s&&(r=Math.max(r,o))}return r===-1/0?s:a(r)};case"range":return function(t,e){for(var r=1/0,i=-1/0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(r=Math.min(r,l),i=Math.max(i,l))}return i===-1/0||r===1/0?s:a(i-r)};case"change":return function(t,e){var r=n(t[e[0]]),i=n(t[e[e.length-1]]);return r===s||i===s?s:a(i-r)};case"median":return function(t,e){for(var r=[],o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&r.push(l)}if(!r.length)return s;r.sort(i.sorterAsc);var u=(r.length-1)/2;return a((r[Math.floor(u)]+r[Math.ceil(u)])/2)};case"mode":return function(t,e){for(var r={},i=0,o=s,l=0;l<e.length;l++){var u=n(t[e[l]]);if(u!==s){var c=r[u]=(r[u]||0)+1;c>i&&(i=c,o=u)}}return i?a(o):s};case"rms":return function(t,e){for(var r=0,i=0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(r+=l*l,i++)}return i?a(Math.sqrt(r/i)):s};case"stddev":return function(e,r){var i,a=0,o=0,l=1,u=s;for(i=0;i<r.length&&u===s;i++)u=n(e[r[i]]);if(u===s)return s;for(;i<r.length;i++){var c=n(e[r[i]]);if(c!==s){var f=c-u;a+=f,o+=f*f,l++}}var h="sample"===t.funcmode?l-1:l;return h?Math.sqrt((o-a*a/l)/h):0}}}(a,n.getDataConversions(t,e,o,u)),d=new Array(r.length),v=0;v<r.length;v++)d[v]=c(u,r[v]);l.set(d),"count"===a.func&&i.pushUnique(e._arrayAttrs,o)}}function f(t,e){return e.length}function h(t,e){return t[e[0]]}function p(t,e){return t[e[e.length-1]]}e.supplyDefaults=function(t,e){var r,n={};function o(e,r){return i.coerce(t,n,l,e,r)}if(!o("enabled"))return n;var s=a.findArrayAttributes(e),c={};for(r=0;r<s.length;r++)c[s[r]]=1;var f=o("groups");if(!Array.isArray(f)){if(!c[f])return n.enabled=!1,n;c[f]=0}var h,p=t.aggregations||[],d=n.aggregations=new Array(p.length);function v(t,e){return i.coerce(p[r],h,u,t,e)}for(r=0;r<p.length;r++){h={_index:r};var g=v("target"),y=v("func");v("enabled")&&g&&(c[g]||"count"===y&&void 0===c[g])?("stddev"===y&&v("funcmode"),c[g]=0,d[r]=h):d[r]={enabled:!1,_index:r}}for(r=0;r<s.length;r++)c[s[r]]&&d.push({target:s[r],func:u.func.dflt,enabled:!0,_index:-1});return n},e.calcTransform=function(t,e,r){if(r.enabled){var n=r.groups,a=i.getTargetArray(e,{target:n});if(a){var s,l,u,f,h={},p={},d=[],v=o(e.transforms,r),g=a.length;for(e._length&&(g=Math.min(g,e._length)),s=0;s<g;s++)void 0===(u=h[l=a[s]])?(h[l]=d.length,f=[s],d.push(f),p[h[l]]=v(s)):(d[u].push(s),p[h[l]]=(p[h[l]]||[]).concat(v(s)));r._indexToPoints=p;var y=r.aggregations;for(s=0;s<y.length;s++)c(t,e,d,y[s]);"string"==typeof n&&c(t,e,d,{target:n,func:"first",enabled:!0}),e._length=d.length}}}},14382:function(t,e,r){"use strict";var n=r(71828),i=r(73972),a=r(89298),o=r(79344).p,s=r(74808),l=s.COMPARISON_OPS,u=s.INTERVAL_OPS,c=s.SET_OPS;e.moduleType="transform",e.name="filter",e.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},target:{valType:"string",strict:!0,noBlank:!0,arrayOk:!0,dflt:"x",editType:"calc"},operation:{valType:"enumerated",values:[].concat(l).concat(u).concat(c),dflt:"=",editType:"calc"},value:{valType:"any",dflt:0,editType:"calc"},preservegaps:{valType:"boolean",dflt:!1,editType:"calc"},editType:"calc"},e.supplyDefaults=function(t){var r={};function a(i,a){return n.coerce(t,r,e.attributes,i,a)}if(a("enabled")){var o=a("target");if(n.isArrayOrTypedArray(o)&&0===o.length)return r.enabled=!1,r;a("preservegaps"),a("operation"),a("value");var s=i.getComponentMethod("calendars","handleDefaults");s(t,r,"valuecalendar",null),s(t,r,"targetcalendar",null)}return r},e.calcTransform=function(t,e,r){if(r.enabled){var i=n.getTargetArray(e,r);if(i){var s=r.target,f=i.length;e._length&&(f=Math.min(f,e._length));var h=r.targetcalendar,p=e._arrayAttrs,d=r.preservegaps;if("string"==typeof s){var v=n.nestedProperty(e,s+"calendar").get();v&&(h=v)}var g,y,m=function(t,e,r){var n=t.operation,i=t.value,a=Array.isArray(i);function o(t){return-1!==t.indexOf(n)}var s,f=function(r){return e(r,0,t.valuecalendar)},h=function(t){return e(t,0,r)};switch(o(l)?s=f(a?i[0]:i):o(u)?s=a?[f(i[0]),f(i[1])]:[f(i),f(i)]:o(c)&&(s=a?i.map(f):[f(i)]),n){case"=":return function(t){return h(t)===s};case"!=":return function(t){return h(t)!==s};case"<":return function(t){return h(t)<s};case"<=":return function(t){return h(t)<=s};case">":return function(t){return h(t)>s};case">=":return function(t){return h(t)>=s};case"[]":return function(t){var e=h(t);return e>=s[0]&&e<=s[1]};case"()":return function(t){var e=h(t);return e>s[0]&&e<s[1]};case"[)":return function(t){var e=h(t);return e>=s[0]&&e<s[1]};case"(]":return function(t){var e=h(t);return e>s[0]&&e<=s[1]};case"][":return function(t){var e=h(t);return e<=s[0]||e>=s[1]};case")(":return function(t){var e=h(t);return e<s[0]||e>s[1]};case"](":return function(t){var e=h(t);return e<=s[0]||e>s[1]};case")[":return function(t){var e=h(t);return e<s[0]||e>=s[1]};case"{}":return function(t){return-1!==s.indexOf(h(t))};case"}{":return function(t){return-1===s.indexOf(h(t))}}}(r,a.getDataToCoordFunc(t,e,s,i),h),x={},b={},_=0;d?(g=function(t){x[t.astr]=n.extendDeep([],t.get()),t.set(new Array(f))},y=function(t,e){var r=x[t.astr][e];t.get()[e]=r}):(g=function(t){x[t.astr]=n.extendDeep([],t.get()),t.set([])},y=function(t,e){var r=x[t.astr][e];t.get().push(r)}),k(g);for(var w=o(e.transforms,r),T=0;T<f;T++)m(i[T])?(k(y,T),b[_++]=w(T)):d&&_++;r._indexToPoints=b,e._length=_}}function k(t,r){for(var i=0;i<p.length;i++)t(n.nestedProperty(e,p[i]),r)}}},43102:function(t,e,r){"use strict";var n=r(71828),i=r(86281),a=r(74875),o=r(79344).p;function s(t,e){var r,s,l,u,c,f,h,p,d,v,g=e.transform,y=e.transformIndex,m=t.transforms[y].groups,x=o(t.transforms,g);if(!n.isArrayOrTypedArray(m)||0===m.length)return[t];var b=n.filterUnique(m),_=new Array(b.length),w=m.length,T=i.findArrayAttributes(t),k=g.styles||[],A={};for(r=0;r<k.length;r++)A[k[r].target]=k[r].value;g.styles&&(v=n.keyedContainer(g,"styles","target","value.name"));var M={},S={};for(r=0;r<b.length;r++){M[f=b[r]]=r,S[f]=0,(h=_[r]=n.extendDeepNoArrays({},t))._group=f,h.transforms[y]._indexToPoints={};var E=null;for(v&&(E=v.get(f)),h.name=E||""===E?E:n.templateString(g.nameformat,{trace:t.name,group:f}),p=h.transforms,h.transforms=[],s=0;s<p.length;s++)h.transforms[s]=n.extendDeepNoArrays({},p[s]);for(s=0;s<T.length;s++)n.nestedProperty(h,T[s]).set([])}for(l=0;l<T.length;l++){for(u=T[l],s=0,d=[];s<b.length;s++)d[s]=n.nestedProperty(_[s],u).get();for(c=n.nestedProperty(t,u).get(),s=0;s<w;s++)d[M[m[s]]].push(c[s])}for(s=0;s<w;s++)(h=_[M[m[s]]]).transforms[y]._indexToPoints[S[m[s]]]=x(s),S[m[s]]++;for(r=0;r<b.length;r++)f=b[r],h=_[r],a.clearExpandedTraceDefaultColors(h),h=n.extendDeepNoArrays(h,A[f]||{});return _}e.moduleType="transform",e.name="groupby",e.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},groups:{valType:"data_array",dflt:[],editType:"calc"},nameformat:{valType:"string",editType:"calc"},styles:{_isLinkedToArray:"style",target:{valType:"string",editType:"calc"},value:{valType:"any",dflt:{},editType:"calc",_compareAsJSON:!0},editType:"calc"},editType:"calc"},e.supplyDefaults=function(t,r,i){var a,o={};function s(r,i){return n.coerce(t,o,e.attributes,r,i)}if(!s("enabled"))return o;s("groups"),s("nameformat",i._dataLength>1?"%{group} (%{trace})":"%{group}");var l=t.styles,u=o.styles=[];if(l)for(a=0;a<l.length;a++){var c=u[a]={};n.coerce(l[a],u[a],e.attributes.styles,"target");var f=n.coerce(l[a],u[a],e.attributes.styles,"value");n.isPlainObject(f)?c.value=n.extendDeep({},f):f&&delete c.value}return o},e.transform=function(t,e){var r,n,i,a=[];for(n=0;n<t.length;n++)for(r=s(t[n],e),i=0;i<r.length;i++)a.push(r[i]);return a}},79344:function(t,e){"use strict";e.p=function(t,e){for(var r,n,i=0;i<t.length&&(r=t[i])!==e;i++)r._indexToPoints&&!1!==r.enabled&&(n=r._indexToPoints);var a=n?function(t){return n[t]}:function(t){return[t]};return a}},32275:function(t,e,r){"use strict";var n=r(71828),i=r(89298),a=r(79344).p,o=r(50606).BADNUM;e.moduleType="transform",e.name="sort",e.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},target:{valType:"string",strict:!0,noBlank:!0,arrayOk:!0,dflt:"x",editType:"calc"},order:{valType:"enumerated",values:["ascending","descending"],dflt:"ascending",editType:"calc"},editType:"calc"},e.supplyDefaults=function(t){var r={};function i(i,a){return n.coerce(t,r,e.attributes,i,a)}return i("enabled")&&(i("target"),i("order")),r},e.calcTransform=function(t,e,r){if(r.enabled){var s=n.getTargetArray(e,r);if(s){var l=r.target,u=s.length;e._length&&(u=Math.min(u,e._length));var c,f,h=e._arrayAttrs,p=function(t,e,r,n){var i,a=new Array(n),s=new Array(n);for(i=0;i<n;i++)a[i]={v:e[i],i:i};for(a.sort(function(t,e){switch(t.order){case"ascending":return function(t,r){var n=e(t.v),i=e(r.v);return n===o?1:i===o?-1:n-i};case"descending":return function(t,r){var n=e(t.v),i=e(r.v);return n===o?1:i===o?-1:i-n}}}(t,r)),i=0;i<n;i++)s[i]=a[i].i;return s}(r,s,i.getDataToCoordFunc(t,e,l,s),u),d=a(e.transforms,r),v={};for(c=0;c<h.length;c++){var g=n.nestedProperty(e,h[c]),y=g.get(),m=new Array(u);for(f=0;f<u;f++)m[f]=y[p[f]];g.set(m)}for(f=0;f<u;f++)v[f]=d(p[f]);r._indexToPoints=v,e._length=u}}}},11506:function(t,e){"use strict";e.version="2.27.1"},9330:function(t,e,r){var n,i=r(90386);self,n=function(){return function(){var t={7386:function(t,e,r){t.exports={alpha_shape:r(2350),convex_hull:r(5537),delaunay_triangulate:r(4419),gl_cone3d:r(1140),gl_error3d:r(3110),gl_heatmap2d:r(6386),gl_line3d:r(6086),gl_mesh3d:r(8116),gl_plot2d:r(2117),gl_plot3d:r(1059),gl_pointcloud2d:r(8271),gl_scatter3d:r(2182),gl_select_box:r(6623),gl_spikes2d:r(3050),gl_streamtube3d:r(7307),gl_surface3d:r(3754),ndarray:r(5050),ndarray_linear_interpolate:r(3581)}},2146:function(t,e,r){"use strict";function n(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function i(t,e){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},i(t,e)}function a(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function o(t){return o=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},o(t)}function s(t){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},s(t)}var l=r(3910),u=r(3187),c="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.lW=p,e.h2=50;var f=2147483647;function h(t){if(t>f)throw new RangeError('The value "'+t+'" is invalid for option "size"');var e=new Uint8Array(t);return Object.setPrototypeOf(e,p.prototype),e}function p(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return g(t)}return d(t,e,r)}function d(t,e,r){if("string"==typeof t)return function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!p.isEncoding(e))throw new TypeError("Unknown encoding: "+e);var r=0|b(t,e),n=h(r),i=n.write(t,e);return i!==r&&(n=n.slice(0,i)),n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(tt(t,Uint8Array)){var e=new Uint8Array(t);return m(e.buffer,e.byteOffset,e.byteLength)}return y(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+s(t));if(tt(t,ArrayBuffer)||t&&tt(t.buffer,ArrayBuffer))return m(t,e,r);if("undefined"!=typeof SharedArrayBuffer&&(tt(t,SharedArrayBuffer)||t&&tt(t.buffer,SharedArrayBuffer)))return m(t,e,r);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');var n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return p.from(n,e,r);var i=function(t){if(p.isBuffer(t)){var e=0|x(t.length),r=h(e);return 0===r.length||t.copy(r,0,0,e),r}return void 0!==t.length?"number"!=typeof t.length||et(t.length)?h(0):y(t):"Buffer"===t.type&&Array.isArray(t.data)?y(t.data):void 0}(t);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return p.from(t[Symbol.toPrimitive]("string"),e,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+s(t))}function v(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function g(t){return v(t),h(t<0?0:0|x(t))}function y(t){for(var e=t.length<0?0:0|x(t.length),r=h(e),n=0;n<e;n+=1)r[n]=255&t[n];return r}function m(t,e,r){if(e<0||t.byteLength<e)throw new RangeError('"offset" is outside of buffer bounds');if(t.byteLength<e+(r||0))throw new RangeError('"length" is outside of buffer bounds');var n;return n=void 0===e&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,e):new Uint8Array(t,e,r),Object.setPrototypeOf(n,p.prototype),n}function x(t){if(t>=f)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+f.toString(16)+" bytes");return 0|t}function b(t,e){if(p.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||tt(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+s(t));var r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return K(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return $(t).length;default:if(i)return n?-1:K(t).length;e=(""+e).toLowerCase(),i=!0}}function _(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return z(this,e,r);case"utf8":case"utf-8":return P(this,e,r);case"ascii":return I(this,e,r);case"latin1":case"binary":return D(this,e,r);case"base64":return C(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return R(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function w(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function T(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),et(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=p.from(e,n)),p.isBuffer(e))return 0===e.length?-1:k(t,e,r,n,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):k(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function k(t,e,r,n,i){var a,o=1,s=t.length,l=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;o=2,s/=2,l/=2,r/=2}function u(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(i){var c=-1;for(a=r;a<s;a++)if(u(t,a)===u(e,-1===c?0:a-c)){if(-1===c&&(c=a),a-c+1===l)return c*o}else-1!==c&&(a-=a-c),c=-1}else for(r+l>s&&(r=s-l),a=r;a>=0;a--){for(var f=!0,h=0;h<l;h++)if(u(t,a+h)!==u(e,h)){f=!1;break}if(f)return a}return-1}function A(t,e,r,n){r=Number(r)||0;var i=t.length-r;n?(n=Number(n))>i&&(n=i):n=i;var a,o=e.length;for(n>o/2&&(n=o/2),a=0;a<n;++a){var s=parseInt(e.substr(2*a,2),16);if(et(s))return a;t[r+a]=s}return a}function M(t,e,r,n){return Q(K(e,t.length-r),t,r,n)}function S(t,e,r,n){return Q(function(t){for(var e=[],r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}(e),t,r,n)}function E(t,e,r,n){return Q($(e),t,r,n)}function L(t,e,r,n){return Q(function(t,e){for(var r,n,i,a=[],o=0;o<t.length&&!((e-=2)<0);++o)n=(r=t.charCodeAt(o))>>8,i=r%256,a.push(i),a.push(n);return a}(e,t.length-r),t,r,n)}function C(t,e,r){return 0===e&&r===t.length?l.fromByteArray(t):l.fromByteArray(t.slice(e,r))}function P(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i<r;){var a=t[i],o=null,s=a>239?4:a>223?3:a>191?2:1;if(i+s<=r){var l=void 0,u=void 0,c=void 0,f=void 0;switch(s){case 1:a<128&&(o=a);break;case 2:128==(192&(l=t[i+1]))&&(f=(31&a)<<6|63&l)>127&&(o=f);break;case 3:l=t[i+1],u=t[i+2],128==(192&l)&&128==(192&u)&&(f=(15&a)<<12|(63&l)<<6|63&u)>2047&&(f<55296||f>57343)&&(o=f);break;case 4:l=t[i+1],u=t[i+2],c=t[i+3],128==(192&l)&&128==(192&u)&&128==(192&c)&&(f=(15&a)<<18|(63&l)<<12|(63&u)<<6|63&c)>65535&&f<1114112&&(o=f)}}null===o?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=s}return function(t){var e=t.length;if(e<=O)return String.fromCharCode.apply(String,t);for(var r="",n=0;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=O));return r}(n)}p.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo()}catch(t){return!1}}(),p.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(p.prototype,"parent",{enumerable:!0,get:function(){if(p.isBuffer(this))return this.buffer}}),Object.defineProperty(p.prototype,"offset",{enumerable:!0,get:function(){if(p.isBuffer(this))return this.byteOffset}}),p.poolSize=8192,p.from=function(t,e,r){return d(t,e,r)},Object.setPrototypeOf(p.prototype,Uint8Array.prototype),Object.setPrototypeOf(p,Uint8Array),p.alloc=function(t,e,r){return function(t,e,r){return v(t),t<=0?h(t):void 0!==e?"string"==typeof r?h(t).fill(e,r):h(t).fill(e):h(t)}(t,e,r)},p.allocUnsafe=function(t){return g(t)},p.allocUnsafeSlow=function(t){return g(t)},p.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==p.prototype},p.compare=function(t,e){if(tt(t,Uint8Array)&&(t=p.from(t,t.offset,t.byteLength)),tt(e,Uint8Array)&&(e=p.from(e,e.offset,e.byteLength)),!p.isBuffer(t)||!p.isBuffer(e))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;for(var r=t.length,n=e.length,i=0,a=Math.min(r,n);i<a;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0},p.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},p.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return p.alloc(0);var r;if(void 0===e)for(e=0,r=0;r<t.length;++r)e+=t[r].length;var n=p.allocUnsafe(e),i=0;for(r=0;r<t.length;++r){var a=t[r];if(tt(a,Uint8Array))i+a.length>n.length?(p.isBuffer(a)||(a=p.from(a)),a.copy(n,i)):Uint8Array.prototype.set.call(n,a,i);else{if(!p.isBuffer(a))throw new TypeError('"list" argument must be an Array of Buffers');a.copy(n,i)}i+=a.length}return n},p.byteLength=b,p.prototype._isBuffer=!0,p.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)w(this,e,e+1);return this},p.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)w(this,e,e+3),w(this,e+1,e+2);return this},p.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)w(this,e,e+7),w(this,e+1,e+6),w(this,e+2,e+5),w(this,e+3,e+4);return this},p.prototype.toString=function(){var t=this.length;return 0===t?"":0===arguments.length?P(this,0,t):_.apply(this,arguments)},p.prototype.toLocaleString=p.prototype.toString,p.prototype.equals=function(t){if(!p.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===p.compare(this,t)},p.prototype.inspect=function(){var t="",r=e.h2;return t=this.toString("hex",0,r).replace(/(.{2})/g,"$1 ").trim(),this.length>r&&(t+=" ... "),"<Buffer "+t+">"},c&&(p.prototype[c]=p.prototype.inspect),p.prototype.compare=function(t,e,r,n,i){if(tt(t,Uint8Array)&&(t=p.from(t,t.offset,t.byteLength)),!p.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+s(t));if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;for(var a=(i>>>=0)-(n>>>=0),o=(r>>>=0)-(e>>>=0),l=Math.min(a,o),u=this.slice(n,i),c=t.slice(e,r),f=0;f<l;++f)if(u[f]!==c[f]){a=u[f],o=c[f];break}return a<o?-1:o<a?1:0},p.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},p.prototype.indexOf=function(t,e,r){return T(this,t,e,r,!0)},p.prototype.lastIndexOf=function(t,e,r){return T(this,t,e,r,!1)},p.prototype.write=function(t,e,r,n){if(void 0===e)n="utf8",r=this.length,e=0;else if(void 0===r&&"string"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var a=!1;;)switch(n){case"hex":return A(this,t,e,r);case"utf8":case"utf-8":return M(this,t,e,r);case"ascii":case"latin1":case"binary":return S(this,t,e,r);case"base64":return E(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return L(this,t,e,r);default:if(a)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),a=!0}},p.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var O=4096;function I(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(127&t[i]);return n}function D(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(t[i]);return n}function z(t,e,r){var n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);for(var i="",a=e;a<r;++a)i+=rt[t[a]];return i}function R(t,e,r){for(var n=t.slice(e,r),i="",a=0;a<n.length-1;a+=2)i+=String.fromCharCode(n[a]+256*n[a+1]);return i}function F(t,e,r){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>r)throw new RangeError("Trying to access beyond buffer length")}function B(t,e,r,n,i,a){if(!p.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||e<a)throw new RangeError('"value" argument is out of bounds');if(r+n>t.length)throw new RangeError("Index out of range")}function N(t,e,r,n,i){Y(e,n,i,t,r,7);var a=Number(e&BigInt(4294967295));t[r++]=a,a>>=8,t[r++]=a,a>>=8,t[r++]=a,a>>=8,t[r++]=a;var o=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,r}function j(t,e,r,n,i){Y(e,n,i,t,r,7);var a=Number(e&BigInt(4294967295));t[r+7]=a,a>>=8,t[r+6]=a,a>>=8,t[r+5]=a,a>>=8,t[r+4]=a;var o=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=o,o>>=8,t[r+2]=o,o>>=8,t[r+1]=o,o>>=8,t[r]=o,r+8}function U(t,e,r,n,i,a){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function V(t,e,r,n,i){return e=+e,r>>>=0,i||U(t,0,r,4),u.write(t,e,r,n,23,4),r+4}function H(t,e,r,n,i){return e=+e,r>>>=0,i||U(t,0,r,8),u.write(t,e,r,n,52,8),r+8}p.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t);var n=this.subarray(t,e);return Object.setPrototypeOf(n,p.prototype),n},p.prototype.readUintLE=p.prototype.readUIntLE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=this[t],i=1,a=0;++a<e&&(i*=256);)n+=this[t+a]*i;return n},p.prototype.readUintBE=p.prototype.readUIntBE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},p.prototype.readUint8=p.prototype.readUInt8=function(t,e){return t>>>=0,e||F(t,1,this.length),this[t]},p.prototype.readUint16LE=p.prototype.readUInt16LE=function(t,e){return t>>>=0,e||F(t,2,this.length),this[t]|this[t+1]<<8},p.prototype.readUint16BE=p.prototype.readUInt16BE=function(t,e){return t>>>=0,e||F(t,2,this.length),this[t]<<8|this[t+1]},p.prototype.readUint32LE=p.prototype.readUInt32LE=function(t,e){return t>>>=0,e||F(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},p.prototype.readUint32BE=p.prototype.readUInt32BE=function(t,e){return t>>>=0,e||F(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},p.prototype.readBigUInt64LE=nt((function(t){W(t>>>=0,"offset");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=e+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,24),i=this[++t]+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+r*Math.pow(2,24);return BigInt(n)+(BigInt(i)<<BigInt(32))})),p.prototype.readBigUInt64BE=nt((function(t){W(t>>>=0,"offset");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=e*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+this[++t],i=this[++t]*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+r;return(BigInt(n)<<BigInt(32))+BigInt(i)})),p.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=this[t],i=1,a=0;++a<e&&(i*=256);)n+=this[t+a]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*e)),n},p.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=e,i=1,a=this[t+--n];n>0&&(i*=256);)a+=this[t+--n]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*e)),a},p.prototype.readInt8=function(t,e){return t>>>=0,e||F(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},p.prototype.readInt16LE=function(t,e){t>>>=0,e||F(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},p.prototype.readInt16BE=function(t,e){t>>>=0,e||F(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},p.prototype.readInt32LE=function(t,e){return t>>>=0,e||F(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},p.prototype.readInt32BE=function(t,e){return t>>>=0,e||F(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},p.prototype.readBigInt64LE=nt((function(t){W(t>>>=0,"offset");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=this[t+4]+this[t+5]*Math.pow(2,8)+this[t+6]*Math.pow(2,16)+(r<<24);return(BigInt(n)<<BigInt(32))+BigInt(e+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,24))})),p.prototype.readBigInt64BE=nt((function(t){W(t>>>=0,"offset");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=(e<<24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+this[++t];return(BigInt(n)<<BigInt(32))+BigInt(this[++t]*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+r)})),p.prototype.readFloatLE=function(t,e){return t>>>=0,e||F(t,4,this.length),u.read(this,t,!0,23,4)},p.prototype.readFloatBE=function(t,e){return t>>>=0,e||F(t,4,this.length),u.read(this,t,!1,23,4)},p.prototype.readDoubleLE=function(t,e){return t>>>=0,e||F(t,8,this.length),u.read(this,t,!0,52,8)},p.prototype.readDoubleBE=function(t,e){return t>>>=0,e||F(t,8,this.length),u.read(this,t,!1,52,8)},p.prototype.writeUintLE=p.prototype.writeUIntLE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||B(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,a=0;for(this[e]=255&t;++a<r&&(i*=256);)this[e+a]=t/i&255;return e+r},p.prototype.writeUintBE=p.prototype.writeUIntBE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||B(this,t,e,r,Math.pow(2,8*r)-1,0);var i=r-1,a=1;for(this[e+i]=255&t;--i>=0&&(a*=256);)this[e+i]=t/a&255;return e+r},p.prototype.writeUint8=p.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,1,255,0),this[e]=255&t,e+1},p.prototype.writeUint16LE=p.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeUint16BE=p.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeUint32LE=p.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},p.prototype.writeUint32BE=p.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigUInt64LE=nt((function(t){return N(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt("0xffffffffffffffff"))})),p.prototype.writeBigUInt64BE=nt((function(t){return j(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt("0xffffffffffffffff"))})),p.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);B(this,t,e,r,i-1,-i)}var a=0,o=1,s=0;for(this[e]=255&t;++a<r&&(o*=256);)t<0&&0===s&&0!==this[e+a-1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+r},p.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);B(this,t,e,r,i-1,-i)}var a=r-1,o=1,s=0;for(this[e+a]=255&t;--a>=0&&(o*=256);)t<0&&0===s&&0!==this[e+a+1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+r},p.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},p.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},p.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigInt64LE=nt((function(t){return N(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),p.prototype.writeBigInt64BE=nt((function(t){return j(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),p.prototype.writeFloatLE=function(t,e,r){return V(this,t,e,!0,r)},p.prototype.writeFloatBE=function(t,e,r){return V(this,t,e,!1,r)},p.prototype.writeDoubleLE=function(t,e,r){return H(this,t,e,!0,r)},p.prototype.writeDoubleBE=function(t,e,r){return H(this,t,e,!1,r)},p.prototype.copy=function(t,e,r,n){if(!p.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e<n-r&&(n=t.length-e+r);var i=n-r;return this===t&&"function"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(e,r,n):Uint8Array.prototype.set.call(t,this.subarray(r,n),e),i},p.prototype.fill=function(t,e,r,n){if("string"==typeof t){if("string"==typeof e?(n=e,e=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!p.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===t.length){var i=t.charCodeAt(0);("utf8"===n&&i<128||"latin1"===n)&&(t=i)}}else"number"==typeof t?t&=255:"boolean"==typeof t&&(t=Number(t));if(e<0||this.length<e||this.length<r)throw new RangeError("Out of range index");if(r<=e)return this;var a;if(e>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(a=e;a<r;++a)this[a]=t;else{var o=p.isBuffer(t)?t:p.from(t,n),s=o.length;if(0===s)throw new TypeError('The value "'+t+'" is invalid for argument "value"');for(a=0;a<r-e;++a)this[a+e]=o[a%s]}return this};var q={};function G(t,e,r){q[t]=function(r){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&i(t,e)}(p,r);var l,u,c,f,h=(c=p,f=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,e=o(c);if(f){var r=o(this).constructor;t=Reflect.construct(e,arguments,r)}else t=e.apply(this,arguments);return function(t,e){if(e&&("object"===s(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return a(t)}(this,t)});function p(){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,p),r=h.call(this),Object.defineProperty(a(r),"message",{value:e.apply(a(r),arguments),writable:!0,configurable:!0}),r.name="".concat(r.name," [").concat(t,"]"),r.stack,delete r.name,r}return l=p,(u=[{key:"code",get:function(){return t},set:function(t){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:t,writable:!0})}},{key:"toString",value:function(){return"".concat(this.name," [").concat(t,"]: ").concat(this.message)}}])&&n(l.prototype,u),Object.defineProperty(l,"prototype",{writable:!1}),p}(r)}function Z(t){for(var e="",r=t.length,n="-"===t[0]?1:0;r>=n+4;r-=3)e="_".concat(t.slice(r-3,r)).concat(e);return"".concat(t.slice(0,r)).concat(e)}function Y(t,e,r,n,i,a){if(t>r||t<e){var o,s="bigint"==typeof e?"n":"";throw o=a>3?0===e||e===BigInt(0)?">= 0".concat(s," and < 2").concat(s," ** ").concat(8*(a+1)).concat(s):">= -(2".concat(s," ** ").concat(8*(a+1)-1).concat(s,") and < 2 ** ")+"".concat(8*(a+1)-1).concat(s):">= ".concat(e).concat(s," and <= ").concat(r).concat(s),new q.ERR_OUT_OF_RANGE("value",o,t)}!function(t,e,r){W(e,"offset"),void 0!==t[e]&&void 0!==t[e+r]||X(e,t.length-(r+1))}(n,i,a)}function W(t,e){if("number"!=typeof t)throw new q.ERR_INVALID_ARG_TYPE(e,"number",t)}function X(t,e,r){if(Math.floor(t)!==t)throw W(t,r),new q.ERR_OUT_OF_RANGE(r||"offset","an integer",t);if(e<0)throw new q.ERR_BUFFER_OUT_OF_BOUNDS;throw new q.ERR_OUT_OF_RANGE(r||"offset",">= ".concat(r?1:0," and <= ").concat(e),t)}G("ERR_BUFFER_OUT_OF_BOUNDS",(function(t){return t?"".concat(t," is outside of buffer bounds"):"Attempt to access memory outside buffer bounds"}),RangeError),G("ERR_INVALID_ARG_TYPE",(function(t,e){return'The "'.concat(t,'" argument must be of type number. Received type ').concat(s(e))}),TypeError),G("ERR_OUT_OF_RANGE",(function(t,e,r){var n='The value of "'.concat(t,'" is out of range.'),i=r;return Number.isInteger(r)&&Math.abs(r)>Math.pow(2,32)?i=Z(String(r)):"bigint"==typeof r&&(i=String(r),(r>Math.pow(BigInt(2),BigInt(32))||r<-Math.pow(BigInt(2),BigInt(32)))&&(i=Z(i)),i+="n"),n+" It must be ".concat(e,". Received ").concat(i)}),RangeError);var J=/[^+/0-9A-Za-z-_]/g;function K(t,e){var r;e=e||1/0;for(var n=t.length,i=null,a=[],o=0;o<n;++o){if((r=t.charCodeAt(o))>55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&a.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&a.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;a.push(r)}else if(r<2048){if((e-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function $(t){return l.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(J,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function Q(t,e,r,n){var i;for(i=0;i<n&&!(i+r>=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function tt(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function et(t){return t!=t}var rt=function(){for(var t="0123456789abcdef",e=new Array(256),r=0;r<16;++r)for(var n=16*r,i=0;i<16;++i)e[n+i]=t[r]+t[i];return e}();function nt(t){return"undefined"==typeof BigInt?it:t}function it(){throw new Error("BigInt not supported")}},2321:function(t){"use strict";t.exports=i,t.exports.isMobile=i,t.exports.default=i;var e=/(android|bb\d+|meego).+mobile|armv7l|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series[46]0|samsungbrowser.*mobile|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i,r=/CrOS/,n=/android|ipad|playbook|silk/i;function i(t){t||(t={});var i=t.ua;if(i||"undefined"==typeof navigator||(i=navigator.userAgent),i&&i.headers&&"string"==typeof i.headers["user-agent"]&&(i=i.headers["user-agent"]),"string"!=typeof i)return!1;var a=e.test(i)&&!r.test(i)||!!t.tablet&&n.test(i);return!a&&t.tablet&&t.featureDetect&&navigator&&navigator.maxTouchPoints>1&&-1!==i.indexOf("Macintosh")&&-1!==i.indexOf("Safari")&&(a=!0),a}},3910:function(t,e){"use strict";e.byteLength=function(t){var e=s(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,a=s(t),o=a[0],l=a[1],u=new i(function(t,e,r){return 3*(e+r)/4-r}(0,o,l)),c=0,f=l>0?o-4:o;for(r=0;r<f;r+=4)e=n[t.charCodeAt(r)]<<18|n[t.charCodeAt(r+1)]<<12|n[t.charCodeAt(r+2)]<<6|n[t.charCodeAt(r+3)],u[c++]=e>>16&255,u[c++]=e>>8&255,u[c++]=255&e;return 2===l&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,u[c++]=255&e),1===l&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,u[c++]=e>>8&255,u[c++]=255&e),u},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,a=[],o=16383,s=0,u=n-i;s<u;s+=o)a.push(l(t,s,s+o>u?u:s+o));return 1===i?(e=t[n-1],a.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],a.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"=")),a.join("")};for(var r=[],n=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0;o<64;++o)r[o]=a[o],n[a.charCodeAt(o)]=o;function s(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function l(t,e,n){for(var i,a,o=[],s=e;s<n;s+=3)i=(t[s]<<16&16711680)+(t[s+1]<<8&65280)+(255&t[s+2]),o.push(r[(a=i)>>18&63]+r[a>>12&63]+r[a>>6&63]+r[63&a]);return o.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},3187:function(t,e){e.read=function(t,e,r,n,i){var a,o,s=8*i-n-1,l=(1<<s)-1,u=l>>1,c=-7,f=r?i-1:0,h=r?-1:1,p=t[e+f];for(f+=h,a=p&(1<<-c)-1,p>>=-c,c+=s;c>0;a=256*a+t[e+f],f+=h,c-=8);for(o=a&(1<<-c)-1,a>>=-c,c+=n;c>0;o=256*o+t[e+f],f+=h,c-=8);if(0===a)a=1-u;else{if(a===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),a-=u}return(p?-1:1)*o*Math.pow(2,a-n)},e.write=function(t,e,r,n,i,a){var o,s,l,u=8*a-i-1,c=(1<<u)-1,f=c>>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:a-1,d=n?1:-1,v=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=c):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+f>=1?h/l:h*Math.pow(2,1-f))*l>=2&&(o++,l/=2),o+f>=c?(s=0,o=c):o+f>=1?(s=(e*l-1)*Math.pow(2,i),o+=f):(s=e*Math.pow(2,f-1)*Math.pow(2,i),o=0));i>=8;t[r+p]=255&s,p+=d,s/=256,i-=8);for(o=o<<i|s,u+=i;u>0;t[r+p]=255&o,p+=d,o/=256,u-=8);t[r+p-d]|=128*v}},1152:function(t,e,r){"use strict";t.exports=function(t){var e=(t=t||{}).eye||[0,0,1],r=t.center||[0,0,0],s=t.up||[0,1,0],l=t.distanceLimits||[0,1/0],u=t.mode||"turntable",c=n(),f=i(),h=a();return c.setDistanceLimits(l[0],l[1]),c.lookAt(0,e,r,s),f.setDistanceLimits(l[0],l[1]),f.lookAt(0,e,r,s),h.setDistanceLimits(l[0],l[1]),h.lookAt(0,e,r,s),new o({turntable:c,orbit:f,matrix:h},u)};var n=r(3440),i=r(7774),a=r(9298);function o(t,e){this._controllerNames=Object.keys(t),this._controllerList=this._controllerNames.map((function(e){return t[e]})),this._mode=e,this._active=t[e],this._active||(this._mode="turntable",this._active=t.turntable),this.modes=this._controllerNames,this.computedMatrix=this._active.computedMatrix,this.computedEye=this._active.computedEye,this.computedUp=this._active.computedUp,this.computedCenter=this._active.computedCenter,this.computedRadius=this._active.computedRadius}var s=o.prototype;s.flush=function(t){for(var e=this._controllerList,r=0;r<e.length;++r)e[r].flush(t)},s.idle=function(t){for(var e=this._controllerList,r=0;r<e.length;++r)e[r].idle(t)},s.lookAt=function(t,e,r,n){for(var i=this._controllerList,a=0;a<i.length;++a)i[a].lookAt(t,e,r,n)},s.rotate=function(t,e,r,n){for(var i=this._controllerList,a=0;a<i.length;++a)i[a].rotate(t,e,r,n)},s.pan=function(t,e,r,n){for(var i=this._controllerList,a=0;a<i.length;++a)i[a].pan(t,e,r,n)},s.translate=function(t,e,r,n){for(var i=this._controllerList,a=0;a<i.length;++a)i[a].translate(t,e,r,n)},s.setMatrix=function(t,e){for(var r=this._controllerList,n=0;n<r.length;++n)r[n].setMatrix(t,e)},s.setDistanceLimits=function(t,e){for(var r=this._controllerList,n=0;n<r.length;++n)r[n].setDistanceLimits(t,e)},s.setDistance=function(t,e){for(var r=this._controllerList,n=0;n<r.length;++n)r[n].setDistance(t,e)},s.recalcMatrix=function(t){this._active.recalcMatrix(t)},s.getDistance=function(t){return this._active.getDistance(t)},s.getDistanceLimits=function(t){return this._active.getDistanceLimits(t)},s.lastT=function(){return this._active.lastT()},s.setMode=function(t){if(t!==this._mode){var e=this._controllerNames.indexOf(t);if(!(e<0)){var r=this._active,n=this._controllerList[e],i=Math.max(r.lastT(),n.lastT());r.recalcMatrix(i),n.setMatrix(i,r.computedMatrix),this._active=n,this._mode=t,this.computedMatrix=this._active.computedMatrix,this.computedEye=this._active.computedEye,this.computedUp=this._active.computedUp,this.computedCenter=this._active.computedCenter,this.computedRadius=this._active.computedRadius}}},s.getMode=function(){return this._mode}},8126:function(t,e,r){"use strict";var n="undefined"==typeof WeakMap?r(5346):WeakMap,i=r(5827),a=r(2944),o=new n;t.exports=function(t){var e=o.get(t),r=e&&(e._triangleBuffer.handle||e._triangleBuffer.buffer);if(!r||!t.isBuffer(r)){var n=i(t,new Float32Array([-1,-1,-1,4,4,-1]));(e=a(t,[{buffer:n,type:t.FLOAT,size:2}]))._triangleBuffer=n,o.set(t,e)}e.bind(),t.drawArrays(t.TRIANGLES,0,3),e.unbind()}},8008:function(t,e,r){var n=r(4930);t.exports=function(t,e,r){e="number"==typeof e?e:1,r=r||": ";var i=t.split(/\r?\n/),a=String(i.length+e-1).length;return i.map((function(t,i){var o=i+e,s=String(o).length;return n(o,a-s)+r+t})).join("\n")}},2153:function(t,e,r){"use strict";t.exports=function(t){var e=t.length;if(0===e)return[];if(1===e)return[0];for(var r=t[0].length,n=[t[0]],a=[0],o=1;o<e;++o)if(n.push(t[o]),i(n,r)){if(a.push(o),a.length===r+1)return a}else n.pop();return a};var n=r(417);function i(t,e){for(var r=new Array(e+1),i=0;i<t.length;++i)r[i]=t[i];for(i=0;i<=t.length;++i){for(var a=t.length;a<=e;++a){for(var o=new Array(e),s=0;s<e;++s)o[s]=Math.pow(a+1-i,s);r[a]=o}if(n.apply(void 0,r))return!0}return!1}},4653:function(t,e,r){"use strict";t.exports=function(t,e){return n(e).filter((function(r){for(var n=new Array(r.length),a=0;a<r.length;++a)n[a]=e[r[a]];return i(n)*t<1}))};var n=r(4419),i=r(1778)},2350:function(t,e,r){t.exports=function(t,e){return i(n(t,e))};var n=r(4653),i=r(8691)},7896:function(t){t.exports=function(t){return atob(t)}},957:function(t,e,r){"use strict";t.exports=function(t,e){for(var r=e.length,a=new Array(r+1),o=0;o<r;++o){for(var s=new Array(r+1),l=0;l<=r;++l)s[l]=t[l][o];a[o]=s}for(a[r]=new Array(r+1),o=0;o<=r;++o)a[r][o]=1;var u=new Array(r+1);for(o=0;o<r;++o)u[o]=e[o];u[r]=1;var c=n(a,u),f=i(c[r+1]);0===f&&(f=1);var h=new Array(r+1);for(o=0;o<=r;++o)h[o]=i(c[o])/f;return h};var n=r(6606);function i(t){for(var e=0,r=0;r<t.length;++r)e+=t[r];return e}},1539:function(t,e,r){"use strict";var n=r(8524);t.exports=function(t,e){return n(t[0].mul(e[1]).add(e[0].mul(t[1])),t[1].mul(e[1]))}},8846:function(t){"use strict";t.exports=function(t,e){return t[0].mul(e[1]).cmp(e[0].mul(t[1]))}},9189:function(t,e,r){"use strict";var n=r(8524);t.exports=function(t,e){return n(t[0].mul(e[1]),t[1].mul(e[0]))}},5125:function(t,e,r){"use strict";var n=r(234),i=r(3218),a=r(5514),o=r(2813),s=r(8524),l=r(9189);t.exports=function t(e,r){if(n(e))return r?l(e,t(r)):[e[0].clone(),e[1].clone()];var u,c,f=0;if(i(e))u=e.clone();else if("string"==typeof e)u=o(e);else{if(0===e)return[a(0),a(1)];if(e===Math.floor(e))u=a(e);else{for(;e!==Math.floor(e);)e*=Math.pow(2,256),f-=256;u=a(e)}}if(n(r))u.mul(r[1]),c=r[0].clone();else if(i(r))c=r.clone();else if("string"==typeof r)c=o(r);else if(r)if(r===Math.floor(r))c=a(r);else{for(;r!==Math.floor(r);)r*=Math.pow(2,256),f+=256;c=a(r)}else c=a(1);return f>0?u=u.ushln(f):f<0&&(c=c.ushln(-f)),s(u,c)}},234:function(t,e,r){"use strict";var n=r(3218);t.exports=function(t){return Array.isArray(t)&&2===t.length&&n(t[0])&&n(t[1])}},4275:function(t,e,r){"use strict";var n=r(1928);t.exports=function(t){return t.cmp(new n(0))}},9958:function(t,e,r){"use strict";var n=r(4275);t.exports=function(t){var e=t.length,r=t.words,i=0;if(1===e)i=r[0];else if(2===e)i=r[0]+67108864*r[1];else for(var a=0;a<e;a++)i+=r[a]*Math.pow(67108864,a);return n(t)*i}},1112:function(t,e,r){"use strict";var n=r(8362),i=r(2288).countTrailingZeros;t.exports=function(t){var e=i(n.lo(t));if(e<32)return e;var r=i(n.hi(t));return r>20?52:r+32}},3218:function(t,e,r){"use strict";r(1928),t.exports=function(t){return t&&"object"==typeof t&&Boolean(t.words)}},5514:function(t,e,r){"use strict";var n=r(1928),i=r(8362);t.exports=function(t){var e=i.exponent(t);return e<52?new n(t):new n(t*Math.pow(2,52-e)).ushln(e-52)}},8524:function(t,e,r){"use strict";var n=r(5514),i=r(4275);t.exports=function(t,e){var r=i(t),a=i(e);if(0===r)return[n(0),n(1)];if(0===a)return[n(0),n(0)];a<0&&(t=t.neg(),e=e.neg());var o=t.gcd(e);return o.cmpn(1)?[t.div(o),e.div(o)]:[t,e]}},2813:function(t,e,r){"use strict";var n=r(1928);t.exports=function(t){return new n(t)}},3962:function(t,e,r){"use strict";var n=r(8524);t.exports=function(t,e){return n(t[0].mul(e[0]),t[1].mul(e[1]))}},4951:function(t,e,r){"use strict";var n=r(4275);t.exports=function(t){return n(t[0])*n(t[1])}},4354:function(t,e,r){"use strict";var n=r(8524);t.exports=function(t,e){return n(t[0].mul(e[1]).sub(t[1].mul(e[0])),t[1].mul(e[1]))}},7999:function(t,e,r){"use strict";var n=r(9958),i=r(1112);t.exports=function(t){var e=t[0],r=t[1];if(0===e.cmpn(0))return 0;var a=e.abs().divmod(r.abs()),o=a.div,s=n(o),l=a.mod,u=e.negative!==r.negative?-1:1;if(0===l.cmpn(0))return u*s;if(s){var c=i(s)+4;return u*(s+(h=n(l.ushln(c).divRound(r)))*Math.pow(2,-c))}var f=r.bitLength()-l.bitLength()+53,h=n(l.ushln(f).divRound(r));return f<1023?u*h*Math.pow(2,-f):u*(h*=Math.pow(2,-1023))*Math.pow(2,1023-f)}},5070:function(t){"use strict";function e(t,e,r,n,i){for(var a=i+1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)>=0?(a=o,i=o-1):n=o+1}return a}function r(t,e,r,n,i){for(var a=i+1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)>0?(a=o,i=o-1):n=o+1}return a}function n(t,e,r,n,i){for(var a=n-1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)<0?(a=o,n=o+1):i=o-1}return a}function i(t,e,r,n,i){for(var a=n-1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)<=0?(a=o,n=o+1):i=o-1}return a}function a(t,e,r,n,i){for(;n<=i;){var a=n+i>>>1,o=t[a],s=void 0!==r?r(o,e):o-e;if(0===s)return a;s<=0?n=a+1:i=a-1}return-1}function o(t,e,r,n,i,a){return"function"==typeof r?a(t,e,r,void 0===n?0:0|n,void 0===i?t.length-1:0|i):a(t,e,void 0,void 0===r?0:0|r,void 0===n?t.length-1:0|n)}t.exports={ge:function(t,r,n,i,a){return o(t,r,n,i,a,e)},gt:function(t,e,n,i,a){return o(t,e,n,i,a,r)},lt:function(t,e,r,i,a){return o(t,e,r,i,a,n)},le:function(t,e,r,n,a){return o(t,e,r,n,a,i)},eq:function(t,e,r,n,i){return o(t,e,r,n,i,a)}}},2288:function(t,e){"use strict";function r(t){var e=32;return(t&=-t)&&e--,65535&t&&(e-=16),16711935&t&&(e-=8),252645135&t&&(e-=4),858993459&t&&(e-=2),1431655765&t&&(e-=1),e}e.INT_BITS=32,e.INT_MAX=2147483647,e.INT_MIN=-1<<31,e.sign=function(t){return(t>0)-(t<0)},e.abs=function(t){var e=t>>31;return(t^e)-e},e.min=function(t,e){return e^(t^e)&-(t<e)},e.max=function(t,e){return t^(t^e)&-(t<e)},e.isPow2=function(t){return!(t&t-1||!t)},e.log2=function(t){var e,r;return e=(t>65535)<<4,e|=r=((t>>>=e)>255)<<3,e|=r=((t>>>=r)>15)<<2,(e|=r=((t>>>=r)>3)<<1)|(t>>>=r)>>1},e.log10=function(t){return t>=1e9?9:t>=1e8?8:t>=1e7?7:t>=1e6?6:t>=1e5?5:t>=1e4?4:t>=1e3?3:t>=100?2:t>=10?1:0},e.popCount=function(t){return 16843009*((t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135)>>>24},e.countTrailingZeros=r,e.nextPow2=function(t){return t+=0===t,--t,t|=t>>>1,t|=t>>>2,t|=t>>>4,1+((t|=t>>>8)|t>>>16)},e.prevPow2=function(t){return t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)-(t>>>1)},e.parity=function(t){return t^=t>>>16,t^=t>>>8,t^=t>>>4,27030>>>(t&=15)&1};var n=new Array(256);!function(t){for(var e=0;e<256;++e){var r=e,n=e,i=7;for(r>>>=1;r;r>>>=1)n<<=1,n|=1&r,--i;t[e]=n<<i&255}}(n),e.reverse=function(t){return n[255&t]<<24|n[t>>>8&255]<<16|n[t>>>16&255]<<8|n[t>>>24&255]},e.interleave2=function(t,e){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t&=65535)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e&=65535)|e<<8))|e<<4))|e<<2))|e<<1))<<1},e.deinterleave2=function(t,e){return(t=65535&((t=16711935&((t=252645135&((t=858993459&((t=t>>>e&1431655765)|t>>>1))|t>>>2))|t>>>4))|t>>>16))<<16>>16},e.interleave3=function(t,e,r){return t=1227133513&((t=3272356035&((t=251719695&((t=4278190335&((t&=1023)|t<<16))|t<<8))|t<<4))|t<<2),(t|=(e=1227133513&((e=3272356035&((e=251719695&((e=4278190335&((e&=1023)|e<<16))|e<<8))|e<<4))|e<<2))<<1)|(r=1227133513&((r=3272356035&((r=251719695&((r=4278190335&((r&=1023)|r<<16))|r<<8))|r<<4))|r<<2))<<2},e.deinterleave3=function(t,e){return(t=1023&((t=4278190335&((t=251719695&((t=3272356035&((t=t>>>e&1227133513)|t>>>2))|t>>>4))|t>>>8))|t>>>16))<<22>>22},e.nextCombination=function(t){var e=t|t-1;return e+1|(~e&-~e)-1>>>r(t)+1}},1928:function(t,e,r){!function(t,e){"use strict";function n(t,e){if(!t)throw new Error(e||"Assertion failed")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function a(t,e,r){if(a.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}var o;"object"==typeof t?t.exports=a:e.BN=a,a.BN=a,a.wordSize=26;try{o="undefined"!=typeof window&&void 0!==window.Buffer?window.Buffer:r(6601).Buffer}catch(t){}function s(t,e){var r=t.charCodeAt(e);return r>=65&&r<=70?r-55:r>=97&&r<=102?r-87:r-48&15}function l(t,e,r){var n=s(t,r);return r-1>=e&&(n|=s(t,r-1)<<4),n}function u(t,e,r,n){for(var i=0,a=Math.min(t.length,r),o=e;o<a;o++){var s=t.charCodeAt(o)-48;i*=n,i+=s>=49?s-49+10:s>=17?s-17+10:s}return i}a.isBN=function(t){return t instanceof a||null!==t&&"object"==typeof t&&t.constructor.wordSize===a.wordSize&&Array.isArray(t.words)},a.max=function(t,e){return t.cmp(e)>0?t:e},a.min=function(t,e){return t.cmp(e)<0?t:e},a.prototype._init=function(t,e,r){if("number"==typeof t)return this._initNumber(t,e,r);if("object"==typeof t)return this._initArray(t,e,r);"hex"===e&&(e=16),n(e===(0|e)&&e>=2&&e<=36);var i=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&(i++,this.negative=1),i<t.length&&(16===e?this._parseHex(t,i,r):(this._parseBase(t,e,i),"le"===r&&this._initArray(this.toArray(),e,r)))},a.prototype._initNumber=function(t,e,r){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(n(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),e,r)},a.prototype._initArray=function(t,e,r){if(n("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var a,o,s=0;if("be"===r)for(i=t.length-1,a=0;i>=0;i-=3)o=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[a]|=o<<s&67108863,this.words[a+1]=o>>>26-s&67108863,(s+=24)>=26&&(s-=26,a++);else if("le"===r)for(i=0,a=0;i<t.length;i+=3)o=t[i]|t[i+1]<<8|t[i+2]<<16,this.words[a]|=o<<s&67108863,this.words[a+1]=o>>>26-s&67108863,(s+=24)>=26&&(s-=26,a++);return this.strip()},a.prototype._parseHex=function(t,e,r){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var n=0;n<this.length;n++)this.words[n]=0;var i,a=0,o=0;if("be"===r)for(n=t.length-1;n>=e;n-=2)i=l(t,e,n)<<a,this.words[o]|=67108863&i,a>=18?(a-=18,o+=1,this.words[o]|=i>>>26):a+=8;else for(n=(t.length-e)%2==0?e+1:e;n<t.length;n+=2)i=l(t,e,n)<<a,this.words[o]|=67108863&i,a>=18?(a-=18,o+=1,this.words[o]|=i>>>26):a+=8;this.strip()},a.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=e)n++;n--,i=i/e|0;for(var a=t.length-r,o=a%n,s=Math.min(a,a-o)+r,l=0,c=r;c<s;c+=n)l=u(t,c,c+n,e),this.imuln(i),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l);if(0!==o){var f=1;for(l=u(t,c,t.length,e),c=0;c<o;c++)f*=e;this.imuln(f),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l)}this.strip()},a.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},a.prototype.clone=function(){var t=new a(null);return this.copy(t),t},a.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},a.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},a.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},a.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var c=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function p(t,e,r){r.negative=e.negative^t.negative;var n=t.length+e.length|0;r.length=n,n=n-1|0;var i=0|t.words[0],a=0|e.words[0],o=i*a,s=67108863&o,l=o/67108864|0;r.words[0]=s;for(var u=1;u<n;u++){for(var c=l>>>26,f=67108863&l,h=Math.min(u,e.length-1),p=Math.max(0,u-t.length+1);p<=h;p++){var d=u-p|0;c+=(o=(i=0|t.words[d])*(a=0|e.words[p])+f)/67108864|0,f=67108863&o}r.words[u]=0|f,l=0|c}return 0!==l?r.words[u]=0|l:r.length--,r.strip()}a.prototype.toString=function(t,e){var r;if(e=0|e||1,16===(t=t||10)||"hex"===t){r="";for(var i=0,a=0,o=0;o<this.length;o++){var s=this.words[o],l=(16777215&(s<<i|a)).toString(16);r=0!=(a=s>>>24-i&16777215)||o!==this.length-1?c[6-l.length]+l+r:l+r,(i+=2)>=26&&(i-=26,o--)}for(0!==a&&(r=a.toString(16)+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(t===(0|t)&&t>=2&&t<=36){var u=f[t],p=h[t];r="";var d=this.clone();for(d.negative=0;!d.isZero();){var v=d.modn(p).toString(t);r=(d=d.idivn(p)).isZero()?v+r:c[u-v.length]+v+r}for(this.isZero()&&(r="0"+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},a.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},a.prototype.toJSON=function(){return this.toString(16)},a.prototype.toBuffer=function(t,e){return n(void 0!==o),this.toArrayLike(o,t,e)},a.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},a.prototype.toArrayLike=function(t,e,r){var i=this.byteLength(),a=r||Math.max(1,i);n(i<=a,"byte array longer than desired length"),n(a>0,"Requested array length <= 0"),this.strip();var o,s,l="le"===e,u=new t(a),c=this.clone();if(l){for(s=0;!c.isZero();s++)o=c.andln(255),c.iushrn(8),u[s]=o;for(;s<a;s++)u[s]=0}else{for(s=0;s<a-i;s++)u[s]=0;for(s=0;!c.isZero();s++)o=c.andln(255),c.iushrn(8),u[a-s-1]=o}return u},Math.clz32?a.prototype._countBits=function(t){return 32-Math.clz32(t)}:a.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},a.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},a.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},a.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},a.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},a.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},a.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},a.prototype.isNeg=function(){return 0!==this.negative},a.prototype.neg=function(){return this.clone().ineg()},a.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},a.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},a.prototype.ior=function(t){return n(0==(this.negative|t.negative)),this.iuor(t)},a.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},a.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},a.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},a.prototype.iand=function(t){return n(0==(this.negative|t.negative)),this.iuand(t)},a.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},a.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},a.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;n<r.length;n++)this.words[n]=e.words[n]^r.words[n];if(this!==e)for(;n<e.length;n++)this.words[n]=e.words[n];return this.length=e.length,this.strip()},a.prototype.ixor=function(t){return n(0==(this.negative|t.negative)),this.iuxor(t)},a.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},a.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},a.prototype.inotn=function(t){n("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var i=0;i<e;i++)this.words[i]=67108863&~this.words[i];return r>0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},a.prototype.notn=function(t){return this.clone().inotn(t)},a.prototype.setn=function(t,e){n("number"==typeof t&&t>=0);var r=t/26|0,i=t%26;return this._expand(r+1),this.words[r]=e?this.words[r]|1<<i:this.words[r]&~(1<<i),this.strip()},a.prototype.iadd=function(t){var e,r,n;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();this.length>t.length?(r=this,n=t):(r=t,n=this);for(var i=0,a=0;a<n.length;a++)e=(0|r.words[a])+(0|n.words[a])+i,this.words[a]=67108863&e,i=e>>>26;for(;0!==i&&a<r.length;a++)e=(0|r.words[a])+i,this.words[a]=67108863&e,i=e>>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;a<r.length;a++)this.words[a]=r.words[a];return this},a.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},a.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,n,i=this.cmp(t);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(r=this,n=t):(r=t,n=this);for(var a=0,o=0;o<n.length;o++)a=(e=(0|r.words[o])-(0|n.words[o])+a)>>26,this.words[o]=67108863&e;for(;0!==a&&o<r.length;o++)a=(e=(0|r.words[o])+a)>>26,this.words[o]=67108863&e;if(0===a&&o<r.length&&r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this.length=Math.max(this.length,o),r!==this&&(this.negative=1),this.strip()},a.prototype.sub=function(t){return this.clone().isub(t)};var d=function(t,e,r){var n,i,a,o=t.words,s=e.words,l=r.words,u=0,c=0|o[0],f=8191&c,h=c>>>13,p=0|o[1],d=8191&p,v=p>>>13,g=0|o[2],y=8191&g,m=g>>>13,x=0|o[3],b=8191&x,_=x>>>13,w=0|o[4],T=8191&w,k=w>>>13,A=0|o[5],M=8191&A,S=A>>>13,E=0|o[6],L=8191&E,C=E>>>13,P=0|o[7],O=8191&P,I=P>>>13,D=0|o[8],z=8191&D,R=D>>>13,F=0|o[9],B=8191&F,N=F>>>13,j=0|s[0],U=8191&j,V=j>>>13,H=0|s[1],q=8191&H,G=H>>>13,Z=0|s[2],Y=8191&Z,W=Z>>>13,X=0|s[3],J=8191&X,K=X>>>13,$=0|s[4],Q=8191&$,tt=$>>>13,et=0|s[5],rt=8191&et,nt=et>>>13,it=0|s[6],at=8191&it,ot=it>>>13,st=0|s[7],lt=8191&st,ut=st>>>13,ct=0|s[8],ft=8191&ct,ht=ct>>>13,pt=0|s[9],dt=8191&pt,vt=pt>>>13;r.negative=t.negative^e.negative,r.length=19;var gt=(u+(n=Math.imul(f,U))|0)+((8191&(i=(i=Math.imul(f,V))+Math.imul(h,U)|0))<<13)|0;u=((a=Math.imul(h,V))+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,n=Math.imul(d,U),i=(i=Math.imul(d,V))+Math.imul(v,U)|0,a=Math.imul(v,V);var yt=(u+(n=n+Math.imul(f,q)|0)|0)+((8191&(i=(i=i+Math.imul(f,G)|0)+Math.imul(h,q)|0))<<13)|0;u=((a=a+Math.imul(h,G)|0)+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(y,U),i=(i=Math.imul(y,V))+Math.imul(m,U)|0,a=Math.imul(m,V),n=n+Math.imul(d,q)|0,i=(i=i+Math.imul(d,G)|0)+Math.imul(v,q)|0,a=a+Math.imul(v,G)|0;var mt=(u+(n=n+Math.imul(f,Y)|0)|0)+((8191&(i=(i=i+Math.imul(f,W)|0)+Math.imul(h,Y)|0))<<13)|0;u=((a=a+Math.imul(h,W)|0)+(i>>>13)|0)+(mt>>>26)|0,mt&=67108863,n=Math.imul(b,U),i=(i=Math.imul(b,V))+Math.imul(_,U)|0,a=Math.imul(_,V),n=n+Math.imul(y,q)|0,i=(i=i+Math.imul(y,G)|0)+Math.imul(m,q)|0,a=a+Math.imul(m,G)|0,n=n+Math.imul(d,Y)|0,i=(i=i+Math.imul(d,W)|0)+Math.imul(v,Y)|0,a=a+Math.imul(v,W)|0;var xt=(u+(n=n+Math.imul(f,J)|0)|0)+((8191&(i=(i=i+Math.imul(f,K)|0)+Math.imul(h,J)|0))<<13)|0;u=((a=a+Math.imul(h,K)|0)+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(T,U),i=(i=Math.imul(T,V))+Math.imul(k,U)|0,a=Math.imul(k,V),n=n+Math.imul(b,q)|0,i=(i=i+Math.imul(b,G)|0)+Math.imul(_,q)|0,a=a+Math.imul(_,G)|0,n=n+Math.imul(y,Y)|0,i=(i=i+Math.imul(y,W)|0)+Math.imul(m,Y)|0,a=a+Math.imul(m,W)|0,n=n+Math.imul(d,J)|0,i=(i=i+Math.imul(d,K)|0)+Math.imul(v,J)|0,a=a+Math.imul(v,K)|0;var bt=(u+(n=n+Math.imul(f,Q)|0)|0)+((8191&(i=(i=i+Math.imul(f,tt)|0)+Math.imul(h,Q)|0))<<13)|0;u=((a=a+Math.imul(h,tt)|0)+(i>>>13)|0)+(bt>>>26)|0,bt&=67108863,n=Math.imul(M,U),i=(i=Math.imul(M,V))+Math.imul(S,U)|0,a=Math.imul(S,V),n=n+Math.imul(T,q)|0,i=(i=i+Math.imul(T,G)|0)+Math.imul(k,q)|0,a=a+Math.imul(k,G)|0,n=n+Math.imul(b,Y)|0,i=(i=i+Math.imul(b,W)|0)+Math.imul(_,Y)|0,a=a+Math.imul(_,W)|0,n=n+Math.imul(y,J)|0,i=(i=i+Math.imul(y,K)|0)+Math.imul(m,J)|0,a=a+Math.imul(m,K)|0,n=n+Math.imul(d,Q)|0,i=(i=i+Math.imul(d,tt)|0)+Math.imul(v,Q)|0,a=a+Math.imul(v,tt)|0;var _t=(u+(n=n+Math.imul(f,rt)|0)|0)+((8191&(i=(i=i+Math.imul(f,nt)|0)+Math.imul(h,rt)|0))<<13)|0;u=((a=a+Math.imul(h,nt)|0)+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(L,U),i=(i=Math.imul(L,V))+Math.imul(C,U)|0,a=Math.imul(C,V),n=n+Math.imul(M,q)|0,i=(i=i+Math.imul(M,G)|0)+Math.imul(S,q)|0,a=a+Math.imul(S,G)|0,n=n+Math.imul(T,Y)|0,i=(i=i+Math.imul(T,W)|0)+Math.imul(k,Y)|0,a=a+Math.imul(k,W)|0,n=n+Math.imul(b,J)|0,i=(i=i+Math.imul(b,K)|0)+Math.imul(_,J)|0,a=a+Math.imul(_,K)|0,n=n+Math.imul(y,Q)|0,i=(i=i+Math.imul(y,tt)|0)+Math.imul(m,Q)|0,a=a+Math.imul(m,tt)|0,n=n+Math.imul(d,rt)|0,i=(i=i+Math.imul(d,nt)|0)+Math.imul(v,rt)|0,a=a+Math.imul(v,nt)|0;var wt=(u+(n=n+Math.imul(f,at)|0)|0)+((8191&(i=(i=i+Math.imul(f,ot)|0)+Math.imul(h,at)|0))<<13)|0;u=((a=a+Math.imul(h,ot)|0)+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(O,U),i=(i=Math.imul(O,V))+Math.imul(I,U)|0,a=Math.imul(I,V),n=n+Math.imul(L,q)|0,i=(i=i+Math.imul(L,G)|0)+Math.imul(C,q)|0,a=a+Math.imul(C,G)|0,n=n+Math.imul(M,Y)|0,i=(i=i+Math.imul(M,W)|0)+Math.imul(S,Y)|0,a=a+Math.imul(S,W)|0,n=n+Math.imul(T,J)|0,i=(i=i+Math.imul(T,K)|0)+Math.imul(k,J)|0,a=a+Math.imul(k,K)|0,n=n+Math.imul(b,Q)|0,i=(i=i+Math.imul(b,tt)|0)+Math.imul(_,Q)|0,a=a+Math.imul(_,tt)|0,n=n+Math.imul(y,rt)|0,i=(i=i+Math.imul(y,nt)|0)+Math.imul(m,rt)|0,a=a+Math.imul(m,nt)|0,n=n+Math.imul(d,at)|0,i=(i=i+Math.imul(d,ot)|0)+Math.imul(v,at)|0,a=a+Math.imul(v,ot)|0;var Tt=(u+(n=n+Math.imul(f,lt)|0)|0)+((8191&(i=(i=i+Math.imul(f,ut)|0)+Math.imul(h,lt)|0))<<13)|0;u=((a=a+Math.imul(h,ut)|0)+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(z,U),i=(i=Math.imul(z,V))+Math.imul(R,U)|0,a=Math.imul(R,V),n=n+Math.imul(O,q)|0,i=(i=i+Math.imul(O,G)|0)+Math.imul(I,q)|0,a=a+Math.imul(I,G)|0,n=n+Math.imul(L,Y)|0,i=(i=i+Math.imul(L,W)|0)+Math.imul(C,Y)|0,a=a+Math.imul(C,W)|0,n=n+Math.imul(M,J)|0,i=(i=i+Math.imul(M,K)|0)+Math.imul(S,J)|0,a=a+Math.imul(S,K)|0,n=n+Math.imul(T,Q)|0,i=(i=i+Math.imul(T,tt)|0)+Math.imul(k,Q)|0,a=a+Math.imul(k,tt)|0,n=n+Math.imul(b,rt)|0,i=(i=i+Math.imul(b,nt)|0)+Math.imul(_,rt)|0,a=a+Math.imul(_,nt)|0,n=n+Math.imul(y,at)|0,i=(i=i+Math.imul(y,ot)|0)+Math.imul(m,at)|0,a=a+Math.imul(m,ot)|0,n=n+Math.imul(d,lt)|0,i=(i=i+Math.imul(d,ut)|0)+Math.imul(v,lt)|0,a=a+Math.imul(v,ut)|0;var kt=(u+(n=n+Math.imul(f,ft)|0)|0)+((8191&(i=(i=i+Math.imul(f,ht)|0)+Math.imul(h,ft)|0))<<13)|0;u=((a=a+Math.imul(h,ht)|0)+(i>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(B,U),i=(i=Math.imul(B,V))+Math.imul(N,U)|0,a=Math.imul(N,V),n=n+Math.imul(z,q)|0,i=(i=i+Math.imul(z,G)|0)+Math.imul(R,q)|0,a=a+Math.imul(R,G)|0,n=n+Math.imul(O,Y)|0,i=(i=i+Math.imul(O,W)|0)+Math.imul(I,Y)|0,a=a+Math.imul(I,W)|0,n=n+Math.imul(L,J)|0,i=(i=i+Math.imul(L,K)|0)+Math.imul(C,J)|0,a=a+Math.imul(C,K)|0,n=n+Math.imul(M,Q)|0,i=(i=i+Math.imul(M,tt)|0)+Math.imul(S,Q)|0,a=a+Math.imul(S,tt)|0,n=n+Math.imul(T,rt)|0,i=(i=i+Math.imul(T,nt)|0)+Math.imul(k,rt)|0,a=a+Math.imul(k,nt)|0,n=n+Math.imul(b,at)|0,i=(i=i+Math.imul(b,ot)|0)+Math.imul(_,at)|0,a=a+Math.imul(_,ot)|0,n=n+Math.imul(y,lt)|0,i=(i=i+Math.imul(y,ut)|0)+Math.imul(m,lt)|0,a=a+Math.imul(m,ut)|0,n=n+Math.imul(d,ft)|0,i=(i=i+Math.imul(d,ht)|0)+Math.imul(v,ft)|0,a=a+Math.imul(v,ht)|0;var At=(u+(n=n+Math.imul(f,dt)|0)|0)+((8191&(i=(i=i+Math.imul(f,vt)|0)+Math.imul(h,dt)|0))<<13)|0;u=((a=a+Math.imul(h,vt)|0)+(i>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(B,q),i=(i=Math.imul(B,G))+Math.imul(N,q)|0,a=Math.imul(N,G),n=n+Math.imul(z,Y)|0,i=(i=i+Math.imul(z,W)|0)+Math.imul(R,Y)|0,a=a+Math.imul(R,W)|0,n=n+Math.imul(O,J)|0,i=(i=i+Math.imul(O,K)|0)+Math.imul(I,J)|0,a=a+Math.imul(I,K)|0,n=n+Math.imul(L,Q)|0,i=(i=i+Math.imul(L,tt)|0)+Math.imul(C,Q)|0,a=a+Math.imul(C,tt)|0,n=n+Math.imul(M,rt)|0,i=(i=i+Math.imul(M,nt)|0)+Math.imul(S,rt)|0,a=a+Math.imul(S,nt)|0,n=n+Math.imul(T,at)|0,i=(i=i+Math.imul(T,ot)|0)+Math.imul(k,at)|0,a=a+Math.imul(k,ot)|0,n=n+Math.imul(b,lt)|0,i=(i=i+Math.imul(b,ut)|0)+Math.imul(_,lt)|0,a=a+Math.imul(_,ut)|0,n=n+Math.imul(y,ft)|0,i=(i=i+Math.imul(y,ht)|0)+Math.imul(m,ft)|0,a=a+Math.imul(m,ht)|0;var Mt=(u+(n=n+Math.imul(d,dt)|0)|0)+((8191&(i=(i=i+Math.imul(d,vt)|0)+Math.imul(v,dt)|0))<<13)|0;u=((a=a+Math.imul(v,vt)|0)+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(B,Y),i=(i=Math.imul(B,W))+Math.imul(N,Y)|0,a=Math.imul(N,W),n=n+Math.imul(z,J)|0,i=(i=i+Math.imul(z,K)|0)+Math.imul(R,J)|0,a=a+Math.imul(R,K)|0,n=n+Math.imul(O,Q)|0,i=(i=i+Math.imul(O,tt)|0)+Math.imul(I,Q)|0,a=a+Math.imul(I,tt)|0,n=n+Math.imul(L,rt)|0,i=(i=i+Math.imul(L,nt)|0)+Math.imul(C,rt)|0,a=a+Math.imul(C,nt)|0,n=n+Math.imul(M,at)|0,i=(i=i+Math.imul(M,ot)|0)+Math.imul(S,at)|0,a=a+Math.imul(S,ot)|0,n=n+Math.imul(T,lt)|0,i=(i=i+Math.imul(T,ut)|0)+Math.imul(k,lt)|0,a=a+Math.imul(k,ut)|0,n=n+Math.imul(b,ft)|0,i=(i=i+Math.imul(b,ht)|0)+Math.imul(_,ft)|0,a=a+Math.imul(_,ht)|0;var St=(u+(n=n+Math.imul(y,dt)|0)|0)+((8191&(i=(i=i+Math.imul(y,vt)|0)+Math.imul(m,dt)|0))<<13)|0;u=((a=a+Math.imul(m,vt)|0)+(i>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(B,J),i=(i=Math.imul(B,K))+Math.imul(N,J)|0,a=Math.imul(N,K),n=n+Math.imul(z,Q)|0,i=(i=i+Math.imul(z,tt)|0)+Math.imul(R,Q)|0,a=a+Math.imul(R,tt)|0,n=n+Math.imul(O,rt)|0,i=(i=i+Math.imul(O,nt)|0)+Math.imul(I,rt)|0,a=a+Math.imul(I,nt)|0,n=n+Math.imul(L,at)|0,i=(i=i+Math.imul(L,ot)|0)+Math.imul(C,at)|0,a=a+Math.imul(C,ot)|0,n=n+Math.imul(M,lt)|0,i=(i=i+Math.imul(M,ut)|0)+Math.imul(S,lt)|0,a=a+Math.imul(S,ut)|0,n=n+Math.imul(T,ft)|0,i=(i=i+Math.imul(T,ht)|0)+Math.imul(k,ft)|0,a=a+Math.imul(k,ht)|0;var Et=(u+(n=n+Math.imul(b,dt)|0)|0)+((8191&(i=(i=i+Math.imul(b,vt)|0)+Math.imul(_,dt)|0))<<13)|0;u=((a=a+Math.imul(_,vt)|0)+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(B,Q),i=(i=Math.imul(B,tt))+Math.imul(N,Q)|0,a=Math.imul(N,tt),n=n+Math.imul(z,rt)|0,i=(i=i+Math.imul(z,nt)|0)+Math.imul(R,rt)|0,a=a+Math.imul(R,nt)|0,n=n+Math.imul(O,at)|0,i=(i=i+Math.imul(O,ot)|0)+Math.imul(I,at)|0,a=a+Math.imul(I,ot)|0,n=n+Math.imul(L,lt)|0,i=(i=i+Math.imul(L,ut)|0)+Math.imul(C,lt)|0,a=a+Math.imul(C,ut)|0,n=n+Math.imul(M,ft)|0,i=(i=i+Math.imul(M,ht)|0)+Math.imul(S,ft)|0,a=a+Math.imul(S,ht)|0;var Lt=(u+(n=n+Math.imul(T,dt)|0)|0)+((8191&(i=(i=i+Math.imul(T,vt)|0)+Math.imul(k,dt)|0))<<13)|0;u=((a=a+Math.imul(k,vt)|0)+(i>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(B,rt),i=(i=Math.imul(B,nt))+Math.imul(N,rt)|0,a=Math.imul(N,nt),n=n+Math.imul(z,at)|0,i=(i=i+Math.imul(z,ot)|0)+Math.imul(R,at)|0,a=a+Math.imul(R,ot)|0,n=n+Math.imul(O,lt)|0,i=(i=i+Math.imul(O,ut)|0)+Math.imul(I,lt)|0,a=a+Math.imul(I,ut)|0,n=n+Math.imul(L,ft)|0,i=(i=i+Math.imul(L,ht)|0)+Math.imul(C,ft)|0,a=a+Math.imul(C,ht)|0;var Ct=(u+(n=n+Math.imul(M,dt)|0)|0)+((8191&(i=(i=i+Math.imul(M,vt)|0)+Math.imul(S,dt)|0))<<13)|0;u=((a=a+Math.imul(S,vt)|0)+(i>>>13)|0)+(Ct>>>26)|0,Ct&=67108863,n=Math.imul(B,at),i=(i=Math.imul(B,ot))+Math.imul(N,at)|0,a=Math.imul(N,ot),n=n+Math.imul(z,lt)|0,i=(i=i+Math.imul(z,ut)|0)+Math.imul(R,lt)|0,a=a+Math.imul(R,ut)|0,n=n+Math.imul(O,ft)|0,i=(i=i+Math.imul(O,ht)|0)+Math.imul(I,ft)|0,a=a+Math.imul(I,ht)|0;var Pt=(u+(n=n+Math.imul(L,dt)|0)|0)+((8191&(i=(i=i+Math.imul(L,vt)|0)+Math.imul(C,dt)|0))<<13)|0;u=((a=a+Math.imul(C,vt)|0)+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(B,lt),i=(i=Math.imul(B,ut))+Math.imul(N,lt)|0,a=Math.imul(N,ut),n=n+Math.imul(z,ft)|0,i=(i=i+Math.imul(z,ht)|0)+Math.imul(R,ft)|0,a=a+Math.imul(R,ht)|0;var Ot=(u+(n=n+Math.imul(O,dt)|0)|0)+((8191&(i=(i=i+Math.imul(O,vt)|0)+Math.imul(I,dt)|0))<<13)|0;u=((a=a+Math.imul(I,vt)|0)+(i>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(B,ft),i=(i=Math.imul(B,ht))+Math.imul(N,ft)|0,a=Math.imul(N,ht);var It=(u+(n=n+Math.imul(z,dt)|0)|0)+((8191&(i=(i=i+Math.imul(z,vt)|0)+Math.imul(R,dt)|0))<<13)|0;u=((a=a+Math.imul(R,vt)|0)+(i>>>13)|0)+(It>>>26)|0,It&=67108863;var Dt=(u+(n=Math.imul(B,dt))|0)+((8191&(i=(i=Math.imul(B,vt))+Math.imul(N,dt)|0))<<13)|0;return u=((a=Math.imul(N,vt))+(i>>>13)|0)+(Dt>>>26)|0,Dt&=67108863,l[0]=gt,l[1]=yt,l[2]=mt,l[3]=xt,l[4]=bt,l[5]=_t,l[6]=wt,l[7]=Tt,l[8]=kt,l[9]=At,l[10]=Mt,l[11]=St,l[12]=Et,l[13]=Lt,l[14]=Ct,l[15]=Pt,l[16]=Ot,l[17]=It,l[18]=Dt,0!==u&&(l[19]=u,r.length++),r};function v(t,e,r){return(new g).mulp(t,e,r)}function g(t,e){this.x=t,this.y=e}Math.imul||(d=p),a.prototype.mulTo=function(t,e){var r,n=this.length+t.length;return r=10===this.length&&10===t.length?d(this,t,e):n<63?p(this,t,e):n<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var n=0,i=0,a=0;a<r.length-1;a++){var o=i;i=0;for(var s=67108863&n,l=Math.min(a,e.length-1),u=Math.max(0,a-t.length+1);u<=l;u++){var c=a-u,f=(0|t.words[c])*(0|e.words[u]),h=67108863&f;s=67108863&(h=h+s|0),i+=(o=(o=o+(f/67108864|0)|0)+(h>>>26)|0)>>>26,o&=67108863}r.words[a]=s,n=o,o=i}return 0!==n?r.words[a]=n:r.length--,r.strip()}(this,t,e):v(this,t,e),r},g.prototype.makeRBT=function(t){for(var e=new Array(t),r=a.prototype._countBits(t)-1,n=0;n<t;n++)e[n]=this.revBin(n,r,t);return e},g.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var n=0,i=0;i<e;i++)n|=(1&t)<<e-i-1,t>>=1;return n},g.prototype.permute=function(t,e,r,n,i,a){for(var o=0;o<a;o++)n[o]=e[t[o]],i[o]=r[t[o]]},g.prototype.transform=function(t,e,r,n,i,a){this.permute(a,t,e,r,n,i);for(var o=1;o<i;o<<=1)for(var s=o<<1,l=Math.cos(2*Math.PI/s),u=Math.sin(2*Math.PI/s),c=0;c<i;c+=s)for(var f=l,h=u,p=0;p<o;p++){var d=r[c+p],v=n[c+p],g=r[c+p+o],y=n[c+p+o],m=f*g-h*y;y=f*y+h*g,g=m,r[c+p]=d+g,n[c+p]=v+y,r[c+p+o]=d-g,n[c+p+o]=v-y,p!==s&&(m=l*f-u*h,h=l*h+u*f,f=m)}},g.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),n=1&r,i=0;for(r=r/2|0;r;r>>>=1)i++;return 1<<i+1+n},g.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var n=0;n<r/2;n++){var i=t[n];t[n]=t[r-n-1],t[r-n-1]=i,i=e[n],e[n]=-e[r-n-1],e[r-n-1]=-i}},g.prototype.normalize13b=function(t,e){for(var r=0,n=0;n<e/2;n++){var i=8192*Math.round(t[2*n+1]/e)+Math.round(t[2*n]/e)+r;t[n]=67108863&i,r=i<67108864?0:i/67108864|0}return t},g.prototype.convert13b=function(t,e,r,i){for(var a=0,o=0;o<e;o++)a+=0|t[o],r[2*o]=8191&a,a>>>=13,r[2*o+1]=8191&a,a>>>=13;for(o=2*e;o<i;++o)r[o]=0;n(0===a),n(0==(-8192&a))},g.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},g.prototype.mulp=function(t,e,r){var n=2*this.guessLen13b(t.length,e.length),i=this.makeRBT(n),a=this.stub(n),o=new Array(n),s=new Array(n),l=new Array(n),u=new Array(n),c=new Array(n),f=new Array(n),h=r.words;h.length=n,this.convert13b(t.words,t.length,o,n),this.convert13b(e.words,e.length,u,n),this.transform(o,a,s,l,n,i),this.transform(u,a,c,f,n,i);for(var p=0;p<n;p++){var d=s[p]*c[p]-l[p]*f[p];l[p]=s[p]*f[p]+l[p]*c[p],s[p]=d}return this.conjugate(s,l,n),this.transform(s,l,h,a,n,i),this.conjugate(h,a,n),this.normalize13b(h,n),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},a.prototype.mul=function(t){var e=new a(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},a.prototype.mulf=function(t){var e=new a(null);return e.words=new Array(this.length+t.length),v(this,t,e)},a.prototype.imul=function(t){return this.clone().mulTo(t,this)},a.prototype.imuln=function(t){n("number"==typeof t),n(t<67108864);for(var e=0,r=0;r<this.length;r++){var i=(0|this.words[r])*t,a=(67108863&i)+(67108863&e);e>>=26,e+=i/67108864|0,e+=a>>>26,this.words[r]=67108863&a}return 0!==e&&(this.words[r]=e,this.length++),this},a.prototype.muln=function(t){return this.clone().imuln(t)},a.prototype.sqr=function(){return this.mul(this)},a.prototype.isqr=function(){return this.imul(this.clone())},a.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var n=r/26|0,i=r%26;e[r]=(t.words[n]&1<<i)>>>i}return e}(t);if(0===e.length)return new a(1);for(var r=this,n=0;n<e.length&&0===e[n];n++,r=r.sqr());if(++n<e.length)for(var i=r.sqr();n<e.length;n++,i=i.sqr())0!==e[n]&&(r=r.mul(i));return r},a.prototype.iushln=function(t){n("number"==typeof t&&t>=0);var e,r=t%26,i=(t-r)/26,a=67108863>>>26-r<<26-r;if(0!==r){var o=0;for(e=0;e<this.length;e++){var s=this.words[e]&a,l=(0|this.words[e])-s<<r;this.words[e]=l|o,o=s>>>26-r}o&&(this.words[e]=o,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e<i;e++)this.words[e]=0;this.length+=i}return this.strip()},a.prototype.ishln=function(t){return n(0===this.negative),this.iushln(t)},a.prototype.iushrn=function(t,e,r){var i;n("number"==typeof t&&t>=0),i=e?(e-e%26)/26:0;var a=t%26,o=Math.min((t-a)/26,this.length),s=67108863^67108863>>>a<<a,l=r;if(i-=o,i=Math.max(0,i),l){for(var u=0;u<o;u++)l.words[u]=this.words[u];l.length=o}if(0===o);else if(this.length>o)for(this.length-=o,u=0;u<this.length;u++)this.words[u]=this.words[u+o];else this.words[0]=0,this.length=1;var c=0;for(u=this.length-1;u>=0&&(0!==c||u>=i);u--){var f=0|this.words[u];this.words[u]=c<<26-a|f>>>a,c=f&s}return l&&0!==c&&(l.words[l.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},a.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},a.prototype.shln=function(t){return this.clone().ishln(t)},a.prototype.ushln=function(t){return this.clone().iushln(t)},a.prototype.shrn=function(t){return this.clone().ishrn(t)},a.prototype.ushrn=function(t){return this.clone().iushrn(t)},a.prototype.testn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,i=1<<e;return!(this.length<=r||!(this.words[r]&i))},a.prototype.imaskn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var i=67108863^67108863>>>e<<e;this.words[this.length-1]&=i}return this.strip()},a.prototype.maskn=function(t){return this.clone().imaskn(t)},a.prototype.iaddn=function(t){return n("number"==typeof t),n(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},a.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},a.prototype.isubn=function(t){if(n("number"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},a.prototype.addn=function(t){return this.clone().iaddn(t)},a.prototype.subn=function(t){return this.clone().isubn(t)},a.prototype.iabs=function(){return this.negative=0,this},a.prototype.abs=function(){return this.clone().iabs()},a.prototype._ishlnsubmul=function(t,e,r){var i,a,o=t.length+r;this._expand(o);var s=0;for(i=0;i<t.length;i++){a=(0|this.words[i+r])+s;var l=(0|t.words[i])*e;s=((a-=67108863&l)>>26)-(l/67108864|0),this.words[i+r]=67108863&a}for(;i<this.length-r;i++)s=(a=(0|this.words[i+r])+s)>>26,this.words[i+r]=67108863&a;if(0===s)return this.strip();for(n(-1===s),s=0,i=0;i<this.length;i++)s=(a=-(0|this.words[i])+s)>>26,this.words[i]=67108863&a;return this.negative=1,this.strip()},a.prototype._wordDiv=function(t,e){var r=(this.length,t.length),n=this.clone(),i=t,o=0|i.words[i.length-1];0!=(r=26-this._countBits(o))&&(i=i.ushln(r),n.iushln(r),o=0|i.words[i.length-1]);var s,l=n.length-i.length;if("mod"!==e){(s=new a(null)).length=l+1,s.words=new Array(s.length);for(var u=0;u<s.length;u++)s.words[u]=0}var c=n.clone()._ishlnsubmul(i,1,l);0===c.negative&&(n=c,s&&(s.words[l]=1));for(var f=l-1;f>=0;f--){var h=67108864*(0|n.words[i.length+f])+(0|n.words[i.length+f-1]);for(h=Math.min(h/o|0,67108863),n._ishlnsubmul(i,h,f);0!==n.negative;)h--,n.negative=0,n._ishlnsubmul(i,1,f),n.isZero()||(n.negative^=1);s&&(s.words[f]=h)}return s&&s.strip(),n.strip(),"div"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},a.prototype.divmod=function(t,e,r){return n(!t.isZero()),this.isZero()?{div:new a(0),mod:new a(0)}:0!==this.negative&&0===t.negative?(s=this.neg().divmod(t,e),"mod"!==e&&(i=s.div.neg()),"div"!==e&&(o=s.mod.neg(),r&&0!==o.negative&&o.iadd(t)),{div:i,mod:o}):0===this.negative&&0!==t.negative?(s=this.divmod(t.neg(),e),"mod"!==e&&(i=s.div.neg()),{div:i,mod:s.mod}):0!=(this.negative&t.negative)?(s=this.neg().divmod(t.neg(),e),"div"!==e&&(o=s.mod.neg(),r&&0!==o.negative&&o.isub(t)),{div:s.div,mod:o}):t.length>this.length||this.cmp(t)<0?{div:new a(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new a(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new a(this.modn(t.words[0]))}:this._wordDiv(t,e);var i,o,s},a.prototype.div=function(t){return this.divmod(t,"div",!1).div},a.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},a.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},a.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),i=t.andln(1),a=r.cmp(n);return a<0||1===i&&0===a?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},a.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,i=this.length-1;i>=0;i--)r=(e*r+(0|this.words[i]))%t;return r},a.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*e;this.words[r]=i/t|0,e=i%t}return this.strip()},a.prototype.divn=function(t){return this.clone().idivn(t)},a.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new a(1),o=new a(0),s=new a(0),l=new a(1),u=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++u;for(var c=r.clone(),f=e.clone();!e.isZero();){for(var h=0,p=1;0==(e.words[0]&p)&&h<26;++h,p<<=1);if(h>0)for(e.iushrn(h);h-- >0;)(i.isOdd()||o.isOdd())&&(i.iadd(c),o.isub(f)),i.iushrn(1),o.iushrn(1);for(var d=0,v=1;0==(r.words[0]&v)&&d<26;++d,v<<=1);if(d>0)for(r.iushrn(d);d-- >0;)(s.isOdd()||l.isOdd())&&(s.iadd(c),l.isub(f)),s.iushrn(1),l.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(s),o.isub(l)):(r.isub(e),s.isub(i),l.isub(o))}return{a:s,b:l,gcd:r.iushln(u)}},a.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i,o=new a(1),s=new a(0),l=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var u=0,c=1;0==(e.words[0]&c)&&u<26;++u,c<<=1);if(u>0)for(e.iushrn(u);u-- >0;)o.isOdd()&&o.iadd(l),o.iushrn(1);for(var f=0,h=1;0==(r.words[0]&h)&&f<26;++f,h<<=1);if(f>0)for(r.iushrn(f);f-- >0;)s.isOdd()&&s.iadd(l),s.iushrn(1);e.cmp(r)>=0?(e.isub(r),o.isub(s)):(r.isub(e),s.isub(o))}return(i=0===e.cmpn(1)?o:s).cmpn(0)<0&&i.iadd(t),i},a.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=e.cmp(r);if(i<0){var a=e;e=r,r=a}else if(0===i||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},a.prototype.invm=function(t){return this.egcd(t).a.umod(t)},a.prototype.isEven=function(){return 0==(1&this.words[0])},a.prototype.isOdd=function(){return 1==(1&this.words[0])},a.prototype.andln=function(t){return this.words[0]&t},a.prototype.bincn=function(t){n("number"==typeof t);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return this._expand(r+1),this.words[r]|=i,this;for(var a=i,o=r;0!==a&&o<this.length;o++){var s=0|this.words[o];a=(s+=a)>>>26,s&=67108863,this.words[o]=s}return 0!==a&&(this.words[o]=a,this.length++),this},a.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},a.prototype.cmpn=function(t){var e,r=t<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)e=1;else{r&&(t=-t),n(t<=67108863,"Number is too big");var i=0|this.words[0];e=i===t?0:i<t?-1:1}return 0!==this.negative?0|-e:e},a.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},a.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],i=0|t.words[r];if(n!==i){n<i?e=-1:n>i&&(e=1);break}}return e},a.prototype.gtn=function(t){return 1===this.cmpn(t)},a.prototype.gt=function(t){return 1===this.cmp(t)},a.prototype.gten=function(t){return this.cmpn(t)>=0},a.prototype.gte=function(t){return this.cmp(t)>=0},a.prototype.ltn=function(t){return-1===this.cmpn(t)},a.prototype.lt=function(t){return-1===this.cmp(t)},a.prototype.lten=function(t){return this.cmpn(t)<=0},a.prototype.lte=function(t){return this.cmp(t)<=0},a.prototype.eqn=function(t){return 0===this.cmpn(t)},a.prototype.eq=function(t){return 0===this.cmp(t)},a.red=function(t){return new T(t)},a.prototype.toRed=function(t){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},a.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},a.prototype._forceRed=function(t){return this.red=t,this},a.prototype.forceRed=function(t){return n(!this.red,"Already a number in reduction context"),this._forceRed(t)},a.prototype.redAdd=function(t){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},a.prototype.redIAdd=function(t){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},a.prototype.redSub=function(t){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},a.prototype.redISub=function(t){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},a.prototype.redShl=function(t){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},a.prototype.redMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},a.prototype.redIMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},a.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},a.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},a.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},a.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},a.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},a.prototype.redPow=function(t){return n(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var y={k256:null,p224:null,p192:null,p25519:null};function m(t,e){this.name=t,this.p=new a(e,16),this.n=this.p.bitLength(),this.k=new a(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function x(){m.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function b(){m.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function _(){m.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function w(){m.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function T(t){if("string"==typeof t){var e=a._prime(t);this.m=e.p,this.prime=e}else n(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function k(t){T.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new a(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}m.prototype._tmp=function(){var t=new a(null);return t.words=new Array(Math.ceil(this.n/13)),t},m.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(e>this.n);var n=e<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},m.prototype.split=function(t,e){t.iushrn(this.n,0,e)},m.prototype.imulK=function(t){return t.imul(this.k)},i(x,m),x.prototype.split=function(t,e){for(var r=4194303,n=Math.min(t.length,9),i=0;i<n;i++)e.words[i]=t.words[i];if(e.length=n,t.length<=9)return t.words[0]=0,void(t.length=1);var a=t.words[9];for(e.words[e.length++]=a&r,i=10;i<t.length;i++){var o=0|t.words[i];t.words[i-10]=(o&r)<<4|a>>>22,a=o}a>>>=22,t.words[i-10]=a,0===a&&t.length>10?t.length-=10:t.length-=9},x.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var n=0|t.words[r];e+=977*n,t.words[r]=67108863&e,e=64*n+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(b,m),i(_,m),i(w,m),w.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var n=19*(0|t.words[r])+e,i=67108863&n;n>>>=26,t.words[r]=i,e=n}return 0!==e&&(t.words[t.length++]=e),t},a._prime=function(t){if(y[t])return y[t];var e;if("k256"===t)e=new x;else if("p224"===t)e=new b;else if("p192"===t)e=new _;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new w}return y[t]=e,e},T.prototype._verify1=function(t){n(0===t.negative,"red works only with positives"),n(t.red,"red works only with red numbers")},T.prototype._verify2=function(t,e){n(0==(t.negative|e.negative),"red works only with positives"),n(t.red&&t.red===e.red,"red works only with red numbers")},T.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},T.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},T.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},T.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},T.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},T.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},T.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},T.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},T.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},T.prototype.isqr=function(t){return this.imul(t,t.clone())},T.prototype.sqr=function(t){return this.mul(t,t)},T.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2==1),3===e){var r=this.m.add(new a(1)).iushrn(2);return this.pow(t,r)}for(var i=this.m.subn(1),o=0;!i.isZero()&&0===i.andln(1);)o++,i.iushrn(1);n(!i.isZero());var s=new a(1).toRed(this),l=s.redNeg(),u=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new a(2*c*c).toRed(this);0!==this.pow(c,u).cmp(l);)c.redIAdd(l);for(var f=this.pow(c,i),h=this.pow(t,i.addn(1).iushrn(1)),p=this.pow(t,i),d=o;0!==p.cmp(s);){for(var v=p,g=0;0!==v.cmp(s);g++)v=v.redSqr();n(g<d);var y=this.pow(f,new a(1).iushln(d-g-1));h=h.redMul(y),f=y.redSqr(),p=p.redMul(f),d=g}return h},T.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},T.prototype.pow=function(t,e){if(e.isZero())return new a(1).toRed(this);if(0===e.cmpn(1))return t.clone();var r=new Array(16);r[0]=new a(1).toRed(this),r[1]=t;for(var n=2;n<r.length;n++)r[n]=this.mul(r[n-1],t);var i=r[0],o=0,s=0,l=e.bitLength()%26;for(0===l&&(l=26),n=e.length-1;n>=0;n--){for(var u=e.words[n],c=l-1;c>=0;c--){var f=u>>c&1;i!==r[0]&&(i=this.sqr(i)),0!==f||0!==o?(o<<=1,o|=f,(4==++s||0===n&&0===c)&&(i=this.mul(i,r[o]),s=0,o=0)):s=0}l=26}return i},T.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},T.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},a.mont=function(t){return new k(t)},i(k,T),k.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},k.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},k.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},k.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new a(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},k.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(t=r.nmd(t),this)},2692:function(t){"use strict";t.exports=function(t){var e,r,n,i=t.length,a=0;for(e=0;e<i;++e)a+=t[e].length;var o=new Array(a),s=0;for(e=0;e<i;++e){var l=t[e],u=l.length;for(r=0;r<u;++r){var c=o[s++]=new Array(u-1),f=0;for(n=0;n<u;++n)n!==r&&(c[f++]=l[n]);if(1&r){var h=c[1];c[1]=c[0],c[0]=h}}}return o}},2569:function(t,e,r){"use strict";t.exports=function(t,e,r){switch(arguments.length){case 1:return n=[],u(i=t,i,c,!0),n;case 2:return"function"==typeof e?u(t,t,e,!0):function(t,e){return n=[],u(t,e,c,!1),n}(t,e);case 3:return u(t,e,r,!1);default:throw new Error("box-intersect: Invalid arguments")}var i};var n,i=r(5306),a=r(1390),o=r(2337);function s(t,e){for(var r=0;r<t;++r)if(!(e[r]<=e[r+t]))return!0;return!1}function l(t,e,r,n){for(var i=0,a=0,o=0,l=t.length;o<l;++o){var u=t[o];if(!s(e,u)){for(var c=0;c<2*e;++c)r[i++]=u[c];n[a++]=o}}return a}function u(t,e,r,n){var s=t.length,u=e.length;if(!(s<=0||u<=0)){var c=t[0].length>>>1;if(!(c<=0)){var f,h=i.mallocDouble(2*c*s),p=i.mallocInt32(s);if((s=l(t,c,h,p))>0){if(1===c&&n)a.init(s),f=a.sweepComplete(c,r,0,s,h,p,0,s,h,p);else{var d=i.mallocDouble(2*c*u),v=i.mallocInt32(u);(u=l(e,c,d,v))>0&&(a.init(s+u),f=1===c?a.sweepBipartite(c,r,0,s,h,p,0,u,d,v):o(c,r,n,s,h,p,u,d,v),i.free(d),i.free(v))}i.free(h),i.free(p)}return f}}}function c(t,e){n.push([t,e])}},7333:function(t,e){"use strict";function r(t){return t?function(t,e,r,n,i,a,o,s,l,u,c){return i-n>l-s?function(t,e,r,n,i,a,o,s,l,u,c){for(var f=2*t,h=n,p=f*n;h<i;++h,p+=f){var d=a[e+p],v=a[e+p+t],g=o[h];t:for(var y=s,m=f*s;y<l;++y,m+=f){var x=u[e+m],b=u[e+m+t],_=c[y];if(!(b<d||v<x)){for(var w=e+1;w<t;++w){var T=a[w+p],k=a[w+t+p],A=u[w+m],M=u[w+t+m];if(k<A||M<T)continue t}var S=r(g,_);if(void 0!==S)return S}}}}(t,e,r,n,i,a,o,s,l,u,c):function(t,e,r,n,i,a,o,s,l,u,c){for(var f=2*t,h=s,p=f*s;h<l;++h,p+=f){var d=u[e+p],v=u[e+p+t],g=c[h];t:for(var y=n,m=f*n;y<i;++y,m+=f){var x=a[e+m],b=a[e+m+t],_=o[y];if(!(v<x||b<d)){for(var w=e+1;w<t;++w){var T=a[w+m],k=a[w+t+m],A=u[w+p],M=u[w+t+p];if(k<A||M<T)continue t}var S=r(_,g);if(void 0!==S)return S}}}}(t,e,r,n,i,a,o,s,l,u,c)}:function(t,e,r,n,i,a,o,s,l,u,c,f){return a-i>u-l?n?function(t,e,r,n,i,a,o,s,l,u,c){for(var f=2*t,h=n,p=f*n;h<i;++h,p+=f){var d=a[e+p],v=a[e+p+t],g=o[h];t:for(var y=s,m=f*s;y<l;++y,m+=f){var x=u[e+m],b=c[y];if(!(x<=d||v<x)){for(var _=e+1;_<t;++_){var w=a[_+p],T=a[_+t+p],k=u[_+m],A=u[_+t+m];if(T<k||A<w)continue t}var M=r(b,g);if(void 0!==M)return M}}}}(t,e,r,i,a,o,s,l,u,c,f):function(t,e,r,n,i,a,o,s,l,u,c){for(var f=2*t,h=n,p=f*n;h<i;++h,p+=f){var d=a[e+p],v=a[e+p+t],g=o[h];t:for(var y=s,m=f*s;y<l;++y,m+=f){var x=u[e+m],b=c[y];if(!(x<d||v<x)){for(var _=e+1;_<t;++_){var w=a[_+p],T=a[_+t+p],k=u[_+m],A=u[_+t+m];if(T<k||A<w)continue t}var M=r(g,b);if(void 0!==M)return M}}}}(t,e,r,i,a,o,s,l,u,c,f):n?function(t,e,r,n,i,a,o,s,l,u,c){for(var f=2*t,h=s,p=f*s;h<l;++h,p+=f){var d=u[e+p],v=c[h];t:for(var g=n,y=f*n;g<i;++g,y+=f){var m=a[e+y],x=a[e+y+t],b=o[g];if(!(d<=m||x<d)){for(var _=e+1;_<t;++_){var w=a[_+y],T=a[_+t+y],k=u[_+p],A=u[_+t+p];if(T<k||A<w)continue t}var M=r(v,b);if(void 0!==M)return M}}}}(t,e,r,i,a,o,s,l,u,c,f):function(t,e,r,n,i,a,o,s,l,u,c){for(var f=2*t,h=s,p=f*s;h<l;++h,p+=f){var d=u[e+p],v=c[h];t:for(var g=n,y=f*n;g<i;++g,y+=f){var m=a[e+y],x=a[e+y+t],b=o[g];if(!(d<m||x<d)){for(var _=e+1;_<t;++_){var w=a[_+y],T=a[_+t+y],k=u[_+p],A=u[_+t+p];if(T<k||A<w)continue t}var M=r(b,v);if(void 0!==M)return M}}}}(t,e,r,i,a,o,s,l,u,c,f)}}e.partial=r(!1),e.full=r(!0)},2337:function(t,e,r){"use strict";t.exports=function(t,e,r,a,c,S,E,L,C){!function(t,e){var r=8*i.log2(e+1)*(t+1)|0,a=i.nextPow2(b*r);w.length<a&&(n.free(w),w=n.mallocInt32(a));var o=i.nextPow2(_*r);T.length<o&&(n.free(T),T=n.mallocDouble(o))}(t,a+E);var P,O=0,I=2*t;for(k(O++,0,0,a,0,E,r?16:0,-1/0,1/0),r||k(O++,0,0,E,0,a,1,-1/0,1/0);O>0;){var D=(O-=1)*b,z=w[D],R=w[D+1],F=w[D+2],B=w[D+3],N=w[D+4],j=w[D+5],U=O*_,V=T[U],H=T[U+1],q=1&j,G=!!(16&j),Z=c,Y=S,W=L,X=C;if(q&&(Z=L,Y=C,W=c,X=S),!(2&j&&R>=(F=g(t,z,R,F,Z,Y,H))||4&j&&(R=y(t,z,R,F,Z,Y,V))>=F)){var J=F-R,K=N-B;if(G){if(t*J*(J+K)<p){if(void 0!==(P=l.scanComplete(t,z,e,R,F,Z,Y,B,N,W,X)))return P;continue}}else{if(t*Math.min(J,K)<f){if(void 0!==(P=o(t,z,e,q,R,F,Z,Y,B,N,W,X)))return P;continue}if(t*J*K<h){if(void 0!==(P=l.scanBipartite(t,z,e,q,R,F,Z,Y,B,N,W,X)))return P;continue}}var $=d(t,z,R,F,Z,Y,V,H);if(R<$)if(t*($-R)<f){if(void 0!==(P=s(t,z+1,e,R,$,Z,Y,B,N,W,X)))return P}else if(z===t-2){if(void 0!==(P=q?l.sweepBipartite(t,e,B,N,W,X,R,$,Z,Y):l.sweepBipartite(t,e,R,$,Z,Y,B,N,W,X)))return P}else k(O++,z+1,R,$,B,N,q,-1/0,1/0),k(O++,z+1,B,N,R,$,1^q,-1/0,1/0);if($<F){var Q=u(t,z,B,N,W,X),tt=W[I*Q+z],et=v(t,z,Q,N,W,X,tt);if(et<N&&k(O++,z,$,F,et,N,(4|q)+(G?16:0),tt,H),B<Q&&k(O++,z,$,F,B,Q,(2|q)+(G?16:0),V,tt),Q+1===et){if(void 0!==(P=G?M(t,z,e,$,F,Z,Y,Q,W,X[Q]):A(t,z,e,q,$,F,Z,Y,Q,W,X[Q])))return P}else if(Q<et){var rt;if(G){if($<(rt=m(t,z,$,F,Z,Y,tt))){var nt=v(t,z,$,rt,Z,Y,tt);if(z===t-2){if($<nt&&void 0!==(P=l.sweepComplete(t,e,$,nt,Z,Y,Q,et,W,X)))return P;if(nt<rt&&void 0!==(P=l.sweepBipartite(t,e,nt,rt,Z,Y,Q,et,W,X)))return P}else $<nt&&k(O++,z+1,$,nt,Q,et,16,-1/0,1/0),nt<rt&&(k(O++,z+1,nt,rt,Q,et,0,-1/0,1/0),k(O++,z+1,Q,et,nt,rt,1,-1/0,1/0))}}else $<(rt=q?x(t,z,$,F,Z,Y,tt):m(t,z,$,F,Z,Y,tt))&&(z===t-2?P=q?l.sweepBipartite(t,e,Q,et,W,X,$,rt,Z,Y):l.sweepBipartite(t,e,$,rt,Z,Y,Q,et,W,X):(k(O++,z+1,$,rt,Q,et,q,-1/0,1/0),k(O++,z+1,Q,et,$,rt,1^q,-1/0,1/0)))}}}}};var n=r(5306),i=r(2288),a=r(7333),o=a.partial,s=a.full,l=r(1390),u=r(2464),c=r(122),f=128,h=1<<22,p=1<<22,d=c("!(lo>=p0)&&!(p1>=hi)"),v=c("lo===p0"),g=c("lo<p0"),y=c("hi<=p0"),m=c("lo<=p0&&p0<=hi"),x=c("lo<p0&&p0<=hi"),b=6,_=2,w=n.mallocInt32(1024),T=n.mallocDouble(1024);function k(t,e,r,n,i,a,o,s,l){var u=b*t;w[u]=e,w[u+1]=r,w[u+2]=n,w[u+3]=i,w[u+4]=a,w[u+5]=o;var c=_*t;T[c]=s,T[c+1]=l}function A(t,e,r,n,i,a,o,s,l,u,c){var f=2*t,h=l*f,p=u[h+e];t:for(var d=i,v=i*f;d<a;++d,v+=f){var g=o[v+e],y=o[v+e+t];if(!(p<g||y<p||n&&p===g)){for(var m,x=s[d],b=e+1;b<t;++b){g=o[v+b],y=o[v+b+t];var _=u[h+b],w=u[h+b+t];if(y<_||w<g)continue t}if(void 0!==(m=n?r(c,x):r(x,c)))return m}}}function M(t,e,r,n,i,a,o,s,l,u){var c=2*t,f=s*c,h=l[f+e];t:for(var p=n,d=n*c;p<i;++p,d+=c){var v=o[p];if(v!==u){var g=a[d+e],y=a[d+e+t];if(!(h<g||y<h)){for(var m=e+1;m<t;++m){g=a[d+m],y=a[d+m+t];var x=l[f+m],b=l[f+m+t];if(y<x||b<g)continue t}var _=r(v,u);if(void 0!==_)return _}}}}},2464:function(t,e,r){"use strict";t.exports=function(t,e,r,o,s,l){if(o<=r+1)return r;for(var u=r,c=o,f=o+r>>>1,h=2*t,p=f,d=s[h*f+e];u<c;){if(c-u<i){a(t,e,u,c,s,l),d=s[h*f+e];break}var v=c-u,g=Math.random()*v+u|0,y=s[h*g+e],m=Math.random()*v+u|0,x=s[h*m+e],b=Math.random()*v+u|0,_=s[h*b+e];y<=x?_>=x?(p=m,d=x):y>=_?(p=g,d=y):(p=b,d=_):x>=_?(p=m,d=x):_>=y?(p=g,d=y):(p=b,d=_);for(var w=h*(c-1),T=h*p,k=0;k<h;++k,++w,++T){var A=s[w];s[w]=s[T],s[T]=A}var M=l[c-1];for(l[c-1]=l[p],l[p]=M,w=h*(c-1),T=h*(p=n(t,e,u,c-1,s,l,d)),k=0;k<h;++k,++w,++T)A=s[w],s[w]=s[T],s[T]=A;if(M=l[c-1],l[c-1]=l[p],l[p]=M,f<p){for(c=p-1;u<c&&s[h*(c-1)+e]===d;)c-=1;c+=1}else{if(!(p<f))break;for(u=p+1;u<c&&s[h*u+e]===d;)u+=1}}return n(t,e,r,f,s,l,s[h*f+e])};var n=r(122)("lo<p0"),i=8;function a(t,e,r,n,i,a){for(var o=2*t,s=o*(r+1)+e,l=r+1;l<n;++l,s+=o)for(var u=i[s],c=l,f=o*(l-1);c>r&&i[f+e]>u;--c,f-=o){for(var h=f,p=f+o,d=0;d<o;++d,++h,++p){var v=i[h];i[h]=i[p],i[p]=v}var g=a[c];a[c]=a[c-1],a[c-1]=g}}},122:function(t){"use strict";t.exports=function(t){return e[t]};var e={"lo===p0":function(t,e,r,n,i,a,o){for(var s=2*t,l=s*r,u=l,c=r,f=e,h=r;n>h;++h,l+=s)if(i[l+f]===o)if(c===h)c+=1,u+=s;else{for(var p=0;s>p;++p){var d=i[l+p];i[l+p]=i[u],i[u++]=d}var v=a[h];a[h]=a[c],a[c++]=v}return c},"lo<p0":function(t,e,r,n,i,a,o){for(var s=2*t,l=s*r,u=l,c=r,f=e,h=r;n>h;++h,l+=s)if(i[l+f]<o)if(c===h)c+=1,u+=s;else{for(var p=0;s>p;++p){var d=i[l+p];i[l+p]=i[u],i[u++]=d}var v=a[h];a[h]=a[c],a[c++]=v}return c},"lo<=p0":function(t,e,r,n,i,a,o){for(var s=2*t,l=s*r,u=l,c=r,f=t+e,h=r;n>h;++h,l+=s)if(i[l+f]<=o)if(c===h)c+=1,u+=s;else{for(var p=0;s>p;++p){var d=i[l+p];i[l+p]=i[u],i[u++]=d}var v=a[h];a[h]=a[c],a[c++]=v}return c},"hi<=p0":function(t,e,r,n,i,a,o){for(var s=2*t,l=s*r,u=l,c=r,f=t+e,h=r;n>h;++h,l+=s)if(i[l+f]<=o)if(c===h)c+=1,u+=s;else{for(var p=0;s>p;++p){var d=i[l+p];i[l+p]=i[u],i[u++]=d}var v=a[h];a[h]=a[c],a[c++]=v}return c},"lo<p0&&p0<=hi":function(t,e,r,n,i,a,o){for(var s=2*t,l=s*r,u=l,c=r,f=e,h=t+e,p=r;n>p;++p,l+=s){var d=i[l+f],v=i[l+h];if(d<o&&o<=v)if(c===p)c+=1,u+=s;else{for(var g=0;s>g;++g){var y=i[l+g];i[l+g]=i[u],i[u++]=y}var m=a[p];a[p]=a[c],a[c++]=m}}return c},"lo<=p0&&p0<=hi":function(t,e,r,n,i,a,o){for(var s=2*t,l=s*r,u=l,c=r,f=e,h=t+e,p=r;n>p;++p,l+=s){var d=i[l+f],v=i[l+h];if(d<=o&&o<=v)if(c===p)c+=1,u+=s;else{for(var g=0;s>g;++g){var y=i[l+g];i[l+g]=i[u],i[u++]=y}var m=a[p];a[p]=a[c],a[c++]=m}}return c},"!(lo>=p0)&&!(p1>=hi)":function(t,e,r,n,i,a,o,s){for(var l=2*t,u=l*r,c=u,f=r,h=e,p=t+e,d=r;n>d;++d,u+=l){var v=i[u+h],g=i[u+p];if(!(v>=o||s>=g))if(f===d)f+=1,c+=l;else{for(var y=0;l>y;++y){var m=i[u+y];i[u+y]=i[c],i[c++]=m}var x=a[d];a[d]=a[f],a[f++]=x}}return f}}},309:function(t){"use strict";t.exports=function(t,n){n<=4*e?r(0,n-1,t):u(0,n-1,t)};var e=32;function r(t,e,r){for(var n=2*(t+1),i=t+1;i<=e;++i){for(var a=r[n++],o=r[n++],s=i,l=n-2;s-- >t;){var u=r[l-2],c=r[l-1];if(u<a)break;if(u===a&&c<o)break;r[l]=u,r[l+1]=c,l-=2}r[l]=a,r[l+1]=o}}function n(t,e,r){e*=2;var n=r[t*=2],i=r[t+1];r[t]=r[e],r[t+1]=r[e+1],r[e]=n,r[e+1]=i}function i(t,e,r){e*=2,r[t*=2]=r[e],r[t+1]=r[e+1]}function a(t,e,r,n){e*=2,r*=2;var i=n[t*=2],a=n[t+1];n[t]=n[e],n[t+1]=n[e+1],n[e]=n[r],n[e+1]=n[r+1],n[r]=i,n[r+1]=a}function o(t,e,r,n,i){e*=2,i[t*=2]=i[e],i[e]=r,i[t+1]=i[e+1],i[e+1]=n}function s(t,e,r){e*=2;var n=r[t*=2],i=r[e];return!(n<i)&&(n!==i||r[t+1]>r[e+1])}function l(t,e,r,n){var i=n[t*=2];return i<e||i===e&&n[t+1]<r}function u(t,c,f){var h=(c-t+1)/6|0,p=t+h,d=c-h,v=t+c>>1,g=v-h,y=v+h,m=p,x=g,b=v,_=y,w=d,T=t+1,k=c-1,A=0;s(m,x,f)&&(A=m,m=x,x=A),s(_,w,f)&&(A=_,_=w,w=A),s(m,b,f)&&(A=m,m=b,b=A),s(x,b,f)&&(A=x,x=b,b=A),s(m,_,f)&&(A=m,m=_,_=A),s(b,_,f)&&(A=b,b=_,_=A),s(x,w,f)&&(A=x,x=w,w=A),s(x,b,f)&&(A=x,x=b,b=A),s(_,w,f)&&(A=_,_=w,w=A);for(var M=f[2*x],S=f[2*x+1],E=f[2*_],L=f[2*_+1],C=2*m,P=2*b,O=2*w,I=2*p,D=2*v,z=2*d,R=0;R<2;++R){var F=f[C+R],B=f[P+R],N=f[O+R];f[I+R]=F,f[D+R]=B,f[z+R]=N}i(g,t,f),i(y,c,f);for(var j=T;j<=k;++j)if(l(j,M,S,f))j!==T&&n(j,T,f),++T;else if(!l(j,E,L,f))for(;;){if(l(k,E,L,f)){l(k,M,S,f)?(a(j,T,k,f),++T,--k):(n(j,k,f),--k);break}if(--k<j)break}o(t,T-1,M,S,f),o(c,k+1,E,L,f),T-2-t<=e?r(t,T-2,f):u(t,T-2,f),c-(k+2)<=e?r(k+2,c,f):u(k+2,c,f),k-T<=e?r(T,k,f):u(T,k,f)}},1390:function(t,e,r){"use strict";t.exports={init:function(t){var e=i.nextPow2(t);l.length<e&&(n.free(l),l=n.mallocInt32(e)),u.length<e&&(n.free(u),u=n.mallocInt32(e)),c.length<e&&(n.free(c),c=n.mallocInt32(e)),f.length<e&&(n.free(f),f=n.mallocInt32(e)),h.length<e&&(n.free(h),h=n.mallocInt32(e)),p.length<e&&(n.free(p),p=n.mallocInt32(e));var r=8*e;d.length<r&&(n.free(d),d=n.mallocDouble(r))},sweepBipartite:function(t,e,r,n,i,s,h,p,y,m){for(var x=0,b=2*t,_=t-1,w=b-1,T=r;T<n;++T){var k=s[T],A=b*T;d[x++]=i[A+_],d[x++]=-(k+1),d[x++]=i[A+w],d[x++]=k}for(T=h;T<p;++T){k=m[T]+o;var M=b*T;d[x++]=y[M+_],d[x++]=-k,d[x++]=y[M+w],d[x++]=k}var S=x>>>1;a(d,S);var E=0,L=0;for(T=0;T<S;++T){var C=0|d[2*T+1];if(C>=o)v(c,f,L--,C=C-o|0);else if(C>=0)v(l,u,E--,C);else if(C<=-o){C=-C-o|0;for(var P=0;P<E;++P)if(void 0!==(O=e(l[P],C)))return O;g(c,f,L++,C)}else{for(C=-C-1|0,P=0;P<L;++P){var O;if(void 0!==(O=e(C,c[P])))return O}g(l,u,E++,C)}}},sweepComplete:function(t,e,r,n,i,o,s,y,m,x){for(var b=0,_=2*t,w=t-1,T=_-1,k=r;k<n;++k){var A=o[k]+1<<1,M=_*k;d[b++]=i[M+w],d[b++]=-A,d[b++]=i[M+T],d[b++]=A}for(k=s;k<y;++k){A=x[k]+1<<1;var S=_*k;d[b++]=m[S+w],d[b++]=1|-A,d[b++]=m[S+T],d[b++]=1|A}var E=b>>>1;a(d,E);var L=0,C=0,P=0;for(k=0;k<E;++k){var O=0|d[2*k+1],I=1&O;if(k<E-1&&O>>1==d[2*k+3]>>1&&(I=2,k+=1),O<0){for(var D=-(O>>1)-1,z=0;z<P;++z)if(void 0!==(R=e(h[z],D)))return R;if(0!==I)for(z=0;z<L;++z)if(void 0!==(R=e(l[z],D)))return R;if(1!==I)for(z=0;z<C;++z){var R;if(void 0!==(R=e(c[z],D)))return R}0===I?g(l,u,L++,D):1===I?g(c,f,C++,D):2===I&&g(h,p,P++,D)}else D=(O>>1)-1,0===I?v(l,u,L--,D):1===I?v(c,f,C--,D):2===I&&v(h,p,P--,D)}},scanBipartite:function(t,e,r,n,i,s,c,f,h,p,y,m){var x=0,b=2*t,_=e,w=e+t,T=1,k=1;n?k=o:T=o;for(var A=i;A<s;++A){var M=A+T,S=b*A;d[x++]=c[S+_],d[x++]=-M,d[x++]=c[S+w],d[x++]=M}for(A=h;A<p;++A){M=A+k;var E=b*A;d[x++]=y[E+_],d[x++]=-M}var L=x>>>1;a(d,L);var C=0;for(A=0;A<L;++A){var P=0|d[2*A+1];if(P<0){var O=!1;if((M=-P)>=o?(O=!n,M-=o):(O=!!n,M-=1),O)g(l,u,C++,M);else{var I=m[M],D=b*M,z=y[D+e+1],R=y[D+e+1+t];t:for(var F=0;F<C;++F){var B=l[F],N=b*B;if(!(R<c[N+e+1]||c[N+e+1+t]<z)){for(var j=e+2;j<t;++j)if(y[D+j+t]<c[N+j]||c[N+j+t]<y[D+j])continue t;var U,V=f[B];if(void 0!==(U=n?r(I,V):r(V,I)))return U}}}}else v(l,u,C--,P-T)}},scanComplete:function(t,e,r,n,i,s,u,c,f,h,p){for(var v=0,g=2*t,y=e,m=e+t,x=n;x<i;++x){var b=x+o,_=g*x;d[v++]=s[_+y],d[v++]=-b,d[v++]=s[_+m],d[v++]=b}for(x=c;x<f;++x){b=x+1;var w=g*x;d[v++]=h[w+y],d[v++]=-b}var T=v>>>1;a(d,T);var k=0;for(x=0;x<T;++x){var A=0|d[2*x+1];if(A<0)if((b=-A)>=o)l[k++]=b-o;else{var M=p[b-=1],S=g*b,E=h[S+e+1],L=h[S+e+1+t];t:for(var C=0;C<k;++C){var P=l[C],O=u[P];if(O===M)break;var I=g*P;if(!(L<s[I+e+1]||s[I+e+1+t]<E)){for(var D=e+2;D<t;++D)if(h[S+D+t]<s[I+D]||s[I+D+t]<h[S+D])continue t;var z=r(O,M);if(void 0!==z)return z}}}else{for(b=A-o,C=k-1;C>=0;--C)if(l[C]===b){for(D=C+1;D<k;++D)l[D-1]=l[D];break}--k}}}};var n=r(5306),i=r(2288),a=r(309),o=1<<28,s=1024,l=n.mallocInt32(s),u=n.mallocInt32(s),c=n.mallocInt32(s),f=n.mallocInt32(s),h=n.mallocInt32(s),p=n.mallocInt32(s),d=n.mallocDouble(8192);function v(t,e,r,n){var i=e[n],a=t[r-1];t[i]=a,e[a]=i}function g(t,e,r,n){t[r]=n,e[n]=r}},7761:function(t,e,r){"use strict";var n=r(9971),i=r(743),a=r(2161),o=r(7098);function s(t){return[Math.min(t[0],t[1]),Math.max(t[0],t[1])]}function l(t,e){return t[0]-e[0]||t[1]-e[1]}function u(t,e,r){return e in t?t[e]:r}t.exports=function(t,e,r){Array.isArray(e)?(r=r||{},e=e||[]):(r=e||{},e=[]);var c=!!u(r,"delaunay",!0),f=!!u(r,"interior",!0),h=!!u(r,"exterior",!0),p=!!u(r,"infinity",!1);if(!f&&!h||0===t.length)return[];var d=n(t,e);if(c||f!==h||p){for(var v=i(t.length,function(t){return t.map(s).sort(l)}(e)),g=0;g<d.length;++g){var y=d[g];v.addTriangle(y[0],y[1],y[2])}return c&&a(t,v),h?f?p?o(v,0,p):v.cells():o(v,1,p):o(v,-1)}return d}},2161:function(t,e,r){"use strict";var n=r(2227)[4];function i(t,e,r,i,a,o){var s=e.opposite(i,a);if(!(s<0)){if(a<i){var l=i;i=a,a=l,l=o,o=s,s=l}e.isConstraint(i,a)||n(t[i],t[a],t[o],t[s])<0&&r.push(i,a)}}r(5070),t.exports=function(t,e){for(var r=[],a=t.length,o=e.stars,s=0;s<a;++s)for(var l=o[s],u=1;u<l.length;u+=2)if(!((p=l[u])<s||e.isConstraint(s,p))){for(var c=l[u-1],f=-1,h=1;h<l.length;h+=2)if(l[h-1]===p){f=l[h];break}f<0||n(t[s],t[p],t[c],t[f])<0&&r.push(s,p)}for(;r.length>0;){for(var p=r.pop(),d=(c=-1,f=-1,l=o[s=r.pop()],1);d<l.length;d+=2){var v=l[d-1],g=l[d];v===p?f=g:g===p&&(c=v)}c<0||f<0||n(t[s],t[p],t[c],t[f])>=0||(e.flip(s,p),i(t,e,r,c,s,f),i(t,e,r,s,f,c),i(t,e,r,f,p,c),i(t,e,r,p,c,f))}}},7098:function(t,e,r){"use strict";var n,i=r(5070);function a(t,e,r,n,i,a,o){this.cells=t,this.neighbor=e,this.flags=n,this.constraint=r,this.active=i,this.next=a,this.boundary=o}function o(t,e){return t[0]-e[0]||t[1]-e[1]||t[2]-e[2]}t.exports=function(t,e,r){var n=function(t,e){for(var r=t.cells(),n=r.length,i=0;i<n;++i){var s=(y=r[i])[0],l=y[1],u=y[2];l<u?l<s&&(y[0]=l,y[1]=u,y[2]=s):u<s&&(y[0]=u,y[1]=s,y[2]=l)}r.sort(o);var c=new Array(n);for(i=0;i<c.length;++i)c[i]=0;var f=[],h=[],p=new Array(3*n),d=new Array(3*n),v=null;e&&(v=[]);var g=new a(r,p,d,c,f,h,v);for(i=0;i<n;++i)for(var y=r[i],m=0;m<3;++m){s=y[m],l=y[(m+1)%3];var x=p[3*i+m]=g.locate(l,s,t.opposite(l,s)),b=d[3*i+m]=t.isConstraint(s,l);x<0&&(b?h.push(i):(f.push(i),c[i]=1),e&&v.push([l,s,-1]))}return g}(t,r);if(0===e)return r?n.cells.concat(n.boundary):n.cells;for(var i=1,s=n.active,l=n.next,u=n.flags,c=n.cells,f=n.constraint,h=n.neighbor;s.length>0||l.length>0;){for(;s.length>0;){var p=s.pop();if(u[p]!==-i){u[p]=i,c[p];for(var d=0;d<3;++d){var v=h[3*p+d];v>=0&&0===u[v]&&(f[3*p+d]?l.push(v):(s.push(v),u[v]=i))}}}var g=l;l=s,s=g,l.length=0,i=-i}var y=function(t,e,r){for(var n=0,i=0;i<t.length;++i)e[i]===r&&(t[n++]=t[i]);return t.length=n,t}(c,u,e);return r?y.concat(n.boundary):y},a.prototype.locate=(n=[0,0,0],function(t,e,r){var a=t,s=e,l=r;return e<r?e<t&&(a=e,s=r,l=t):r<t&&(a=r,s=t,l=e),a<0?-1:(n[0]=a,n[1]=s,n[2]=l,i.eq(this.cells,n,o))})},9971:function(t,e,r){"use strict";var n=r(5070),i=r(417)[3];function a(t,e,r,n,i){this.a=t,this.b=e,this.idx=r,this.lowerIds=n,this.upperIds=i}function o(t,e,r,n){this.a=t,this.b=e,this.type=r,this.idx=n}function s(t,e){var r=t.a[0]-e.a[0]||t.a[1]-e.a[1]||t.type-e.type;return r||(0!==t.type&&(r=i(t.a,t.b,e.b))?r:t.idx-e.idx)}function l(t,e){return i(t.a,t.b,e)}function u(t,e,r,a,o){for(var s=n.lt(e,a,l),u=n.gt(e,a,l),c=s;c<u;++c){for(var f=e[c],h=f.lowerIds,p=h.length;p>1&&i(r[h[p-2]],r[h[p-1]],a)>0;)t.push([h[p-1],h[p-2],o]),p-=1;h.length=p,h.push(o);var d=f.upperIds;for(p=d.length;p>1&&i(r[d[p-2]],r[d[p-1]],a)<0;)t.push([d[p-2],d[p-1],o]),p-=1;d.length=p,d.push(o)}}function c(t,e){var r;return(r=t.a[0]<e.a[0]?i(t.a,t.b,e.a):i(e.b,e.a,t.a))?r:(r=e.b[0]<t.b[0]?i(t.a,t.b,e.b):i(e.b,e.a,t.b))||t.idx-e.idx}function f(t,e,r){var i=n.le(t,r,c),o=t[i],s=o.upperIds,l=s[s.length-1];o.upperIds=[l],t.splice(i+1,0,new a(r.a,r.b,r.idx,[l],s))}function h(t,e,r){var i=r.a;r.a=r.b,r.b=i;var a=n.eq(t,r,c),o=t[a];t[a-1].upperIds=o.upperIds,t.splice(a,1)}t.exports=function(t,e){for(var r=t.length,n=e.length,i=[],l=0;l<r;++l)i.push(new o(t[l],null,0,l));for(l=0;l<n;++l){var c=e[l],p=t[c[0]],d=t[c[1]];p[0]<d[0]?i.push(new o(p,d,2,l),new o(d,p,1,l)):p[0]>d[0]&&i.push(new o(d,p,2,l),new o(p,d,1,l))}i.sort(s);for(var v=i[0].a[0]-(1+Math.abs(i[0].a[0]))*Math.pow(2,-52),g=[new a([v,1],[v,0],-1,[],[],[],[])],y=[],m=(l=0,i.length);l<m;++l){var x=i[l],b=x.type;0===b?u(y,g,t,x.a,x.idx):2===b?f(g,0,x):h(g,0,x)}return y}},743:function(t,e,r){"use strict";var n=r(5070);function i(t,e){this.stars=t,this.edges=e}t.exports=function(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=[];return new i(r,e)};var a=i.prototype;function o(t,e,r){for(var n=1,i=t.length;n<i;n+=2)if(t[n-1]===e&&t[n]===r)return t[n-1]=t[i-2],t[n]=t[i-1],void(t.length=i-2)}a.isConstraint=function(){var t=[0,0];function e(t,e){return t[0]-e[0]||t[1]-e[1]}return function(r,i){return t[0]=Math.min(r,i),t[1]=Math.max(r,i),n.eq(this.edges,t,e)>=0}}(),a.removeTriangle=function(t,e,r){var n=this.stars;o(n[t],e,r),o(n[e],r,t),o(n[r],t,e)},a.addTriangle=function(t,e,r){var n=this.stars;n[t].push(e,r),n[e].push(r,t),n[r].push(t,e)},a.opposite=function(t,e){for(var r=this.stars[e],n=1,i=r.length;n<i;n+=2)if(r[n]===t)return r[n-1];return-1},a.flip=function(t,e){var r=this.opposite(t,e),n=this.opposite(e,t);this.removeTriangle(t,e,r),this.removeTriangle(e,t,n),this.addTriangle(t,n,r),this.addTriangle(e,r,n)},a.edges=function(){for(var t=this.stars,e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0,o=i.length;a<o;a+=2)e.push([i[a],i[a+1]]);return e},a.cells=function(){for(var t=this.stars,e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0,o=i.length;a<o;a+=2){var s=i[a],l=i[a+1];r<Math.min(s,l)&&e.push([r,s,l])}return e}},9887:function(t){"use strict";t.exports=function(t){for(var e=1,r=1;r<t.length;++r)for(var n=0;n<r;++n)if(t[r]<t[n])e=-e;else if(t[n]===t[r])return 0;return e}},9243:function(t,e,r){"use strict";var n=r(3094),i=r(6606);function a(t,e){for(var r=0,n=t.length,i=0;i<n;++i)r+=t[i]*e[i];return r}function o(t){var e=t.length;if(0===e)return[];t[0].length;var r=n([t.length+1,t.length+1],1),o=n([t.length+1],1);r[e][e]=0;for(var s=0;s<e;++s){for(var l=0;l<=s;++l)r[l][s]=r[s][l]=2*a(t[s],t[l]);o[s]=a(t[s],t[s])}var u=i(r,o),c=0,f=u[e+1];for(s=0;s<f.length;++s)c+=f[s];var h=new Array(e);for(s=0;s<e;++s){f=u[s];var p=0;for(l=0;l<f.length;++l)p+=f[l];h[s]=p/c}return h}function s(t){if(0===t.length)return[];for(var e=t[0].length,r=n([e]),i=o(t),a=0;a<t.length;++a)for(var s=0;s<e;++s)r[s]+=t[a][s]*i[a];return r}s.barycenetric=o,t.exports=s},1778:function(t,e,r){t.exports=function(t){for(var e=n(t),r=0,i=0;i<t.length;++i)for(var a=t[i],o=0;o<e.length;++o)r+=Math.pow(a[o]-e[o],2);return Math.sqrt(r/t.length)};var n=r(9243)},197:function(t,e,r){"use strict";t.exports=function(t,e,r){var n;if(r){n=e;for(var i=new Array(e.length),a=0;a<e.length;++a){var o=e[a];i[a]=[o[0],o[1],r[a]]}e=i}for(var s=function(t,e,r){var n=d(t,[],p(t));return y(e,n,r),!!n}(t,e,!!r);m(t,e,!!r);)s=!0;if(r&&s)for(n.length=0,r.length=0,a=0;a<e.length;++a)o=e[a],n.push([o[0],o[1]]),r.push(o[2]);return s};var n=r(1731),i=r(2569),a=r(4434),o=r(5125),s=r(8846),l=r(7999),u=r(2826),c=r(8551),f=r(5528);function h(t){var e=l(t);return[c(e,-1/0),c(e,1/0)]}function p(t){for(var e=new Array(t.length),r=0;r<t.length;++r){var n=t[r];e[r]=[c(n[0],-1/0),c(n[1],-1/0),c(n[0],1/0),c(n[1],1/0)]}return e}function d(t,e,r){for(var a=e.length,o=new n(a),s=[],l=0;l<e.length;++l){var u=e[l],f=h(u[0]),p=h(u[1]);s.push([c(f[0],-1/0),c(p[0],-1/0),c(f[1],1/0),c(p[1],1/0)])}i(s,(function(t,e){o.link(t,e)}));var d=!0,v=new Array(a);for(l=0;l<a;++l)(y=o.find(l))!==l&&(d=!1,t[y]=[Math.min(t[l][0],t[y][0]),Math.min(t[l][1],t[y][1])]);if(d)return null;var g=0;for(l=0;l<a;++l){var y;(y=o.find(l))===l?(v[l]=g,t[g++]=t[l]):v[l]=-1}for(t.length=g,l=0;l<a;++l)v[l]<0&&(v[l]=v[o.find(l)]);return v}function v(t,e){return t[0]-e[0]||t[1]-e[1]}function g(t,e){return t[0]-e[0]||t[1]-e[1]||(t[2]<e[2]?-1:t[2]>e[2]?1:0)}function y(t,e,r){if(0!==t.length){if(e)for(var n=0;n<t.length;++n){var i=e[(o=t[n])[0]],a=e[o[1]];o[0]=Math.min(i,a),o[1]=Math.max(i,a)}else for(n=0;n<t.length;++n){var o;i=(o=t[n])[0],a=o[1],o[0]=Math.min(i,a),o[1]=Math.max(i,a)}r?t.sort(g):t.sort(v);var s=1;for(n=1;n<t.length;++n){var l=t[n-1],u=t[n];(u[0]!==l[0]||u[1]!==l[1]||r&&u[2]!==l[2])&&(t[s++]=u)}t.length=s}}function m(t,e,r){var n=function(t,e){for(var r=new Array(e.length),n=0;n<e.length;++n){var i=e[n],a=t[i[0]],o=t[i[1]];r[n]=[c(Math.min(a[0],o[0]),-1/0),c(Math.min(a[1],o[1]),-1/0),c(Math.max(a[0],o[0]),1/0),c(Math.max(a[1],o[1]),1/0)]}return r}(t,e),h=function(t,e,r){var n=[];return i(r,(function(r,i){var o=e[r],s=e[i];if(o[0]!==s[0]&&o[0]!==s[1]&&o[1]!==s[0]&&o[1]!==s[1]){var l=t[o[0]],u=t[o[1]],c=t[s[0]],f=t[s[1]];a(l,u,c,f)&&n.push([r,i])}})),n}(t,e,n),v=function(t,e,r,n){var o=[];return i(r,n,(function(r,n){var i=e[r];if(i[0]!==n&&i[1]!==n){var s=t[n],l=t[i[0]],u=t[i[1]];a(l,u,s,s)&&o.push([r,n])}})),o}(t,e,n,p(t)),g=function(t,e,r,n,i){var a,c,h=t.map((function(t){return[o(t[0]),o(t[1])]}));for(a=0;a<r.length;++a){var p=r[a];c=p[0];var d=p[1],v=e[c],g=e[d],y=f(u(t[v[0]]),u(t[v[1]]),u(t[g[0]]),u(t[g[1]]));if(y){var m=t.length;t.push([l(y[0]),l(y[1])]),h.push(y),n.push([c,m],[d,m])}}for(n.sort((function(t,e){if(t[0]!==e[0])return t[0]-e[0];var r=h[t[1]],n=h[e[1]];return s(r[0],n[0])||s(r[1],n[1])})),a=n.length-1;a>=0;--a){var x=e[c=(S=n[a])[0]],b=x[0],_=x[1],w=t[b],T=t[_];if((w[0]-T[0]||w[1]-T[1])<0){var k=b;b=_,_=k}x[0]=b;var A,M=x[1]=S[1];for(i&&(A=x[2]);a>0&&n[a-1][0]===c;){var S,E=(S=n[--a])[1];i?e.push([M,E,A]):e.push([M,E]),M=E}i?e.push([M,_,A]):e.push([M,_])}return h}(t,e,h,v,r),m=d(t,g);return y(e,m,r),!!m||h.length>0||v.length>0}},5528:function(t,e,r){"use strict";t.exports=function(t,e,r,n){var a=s(e,t),f=s(n,r),h=c(a,f);if(0===o(h))return null;var p=c(f,s(t,r)),d=i(p,h),v=u(a,d);return l(t,v)};var n=r(3962),i=r(9189),a=r(4354),o=r(4951),s=r(6695),l=r(7584),u=r(4469);function c(t,e){return a(n(t[0],e[1]),n(t[1],e[0]))}},5692:function(t){t.exports={jet:[{index:0,rgb:[0,0,131]},{index:.125,rgb:[0,60,170]},{index:.375,rgb:[5,255,255]},{index:.625,rgb:[255,255,0]},{index:.875,rgb:[250,0,0]},{index:1,rgb:[128,0,0]}],hsv:[{index:0,rgb:[255,0,0]},{index:.169,rgb:[253,255,2]},{index:.173,rgb:[247,255,2]},{index:.337,rgb:[0,252,4]},{index:.341,rgb:[0,252,10]},{index:.506,rgb:[1,249,255]},{index:.671,rgb:[2,0,253]},{index:.675,rgb:[8,0,253]},{index:.839,rgb:[255,0,251]},{index:.843,rgb:[255,0,245]},{index:1,rgb:[255,0,6]}],hot:[{index:0,rgb:[0,0,0]},{index:.3,rgb:[230,0,0]},{index:.6,rgb:[255,210,0]},{index:1,rgb:[255,255,255]}],spring:[{index:0,rgb:[255,0,255]},{index:1,rgb:[255,255,0]}],summer:[{index:0,rgb:[0,128,102]},{index:1,rgb:[255,255,102]}],autumn:[{index:0,rgb:[255,0,0]},{index:1,rgb:[255,255,0]}],winter:[{index:0,rgb:[0,0,255]},{index:1,rgb:[0,255,128]}],bone:[{index:0,rgb:[0,0,0]},{index:.376,rgb:[84,84,116]},{index:.753,rgb:[169,200,200]},{index:1,rgb:[255,255,255]}],copper:[{index:0,rgb:[0,0,0]},{index:.804,rgb:[255,160,102]},{index:1,rgb:[255,199,127]}],greys:[{index:0,rgb:[0,0,0]},{index:1,rgb:[255,255,255]}],yignbu:[{index:0,rgb:[8,29,88]},{index:.125,rgb:[37,52,148]},{index:.25,rgb:[34,94,168]},{index:.375,rgb:[29,145,192]},{index:.5,rgb:[65,182,196]},{index:.625,rgb:[127,205,187]},{index:.75,rgb:[199,233,180]},{index:.875,rgb:[237,248,217]},{index:1,rgb:[255,255,217]}],greens:[{index:0,rgb:[0,68,27]},{index:.125,rgb:[0,109,44]},{index:.25,rgb:[35,139,69]},{index:.375,rgb:[65,171,93]},{index:.5,rgb:[116,196,118]},{index:.625,rgb:[161,217,155]},{index:.75,rgb:[199,233,192]},{index:.875,rgb:[229,245,224]},{index:1,rgb:[247,252,245]}],yiorrd:[{index:0,rgb:[128,0,38]},{index:.125,rgb:[189,0,38]},{index:.25,rgb:[227,26,28]},{index:.375,rgb:[252,78,42]},{index:.5,rgb:[253,141,60]},{index:.625,rgb:[254,178,76]},{index:.75,rgb:[254,217,118]},{index:.875,rgb:[255,237,160]},{index:1,rgb:[255,255,204]}],bluered:[{index:0,rgb:[0,0,255]},{index:1,rgb:[255,0,0]}],rdbu:[{index:0,rgb:[5,10,172]},{index:.35,rgb:[106,137,247]},{index:.5,rgb:[190,190,190]},{index:.6,rgb:[220,170,132]},{index:.7,rgb:[230,145,90]},{index:1,rgb:[178,10,28]}],picnic:[{index:0,rgb:[0,0,255]},{index:.1,rgb:[51,153,255]},{index:.2,rgb:[102,204,255]},{index:.3,rgb:[153,204,255]},{index:.4,rgb:[204,204,255]},{index:.5,rgb:[255,255,255]},{index:.6,rgb:[255,204,255]},{index:.7,rgb:[255,153,255]},{index:.8,rgb:[255,102,204]},{index:.9,rgb:[255,102,102]},{index:1,rgb:[255,0,0]}],rainbow:[{index:0,rgb:[150,0,90]},{index:.125,rgb:[0,0,200]},{index:.25,rgb:[0,25,255]},{index:.375,rgb:[0,152,255]},{index:.5,rgb:[44,255,150]},{index:.625,rgb:[151,255,0]},{index:.75,rgb:[255,234,0]},{index:.875,rgb:[255,111,0]},{index:1,rgb:[255,0,0]}],portland:[{index:0,rgb:[12,51,131]},{index:.25,rgb:[10,136,186]},{index:.5,rgb:[242,211,56]},{index:.75,rgb:[242,143,56]},{index:1,rgb:[217,30,30]}],blackbody:[{index:0,rgb:[0,0,0]},{index:.2,rgb:[230,0,0]},{index:.4,rgb:[230,210,0]},{index:.7,rgb:[255,255,255]},{index:1,rgb:[160,200,255]}],earth:[{index:0,rgb:[0,0,130]},{index:.1,rgb:[0,180,180]},{index:.2,rgb:[40,210,40]},{index:.4,rgb:[230,230,50]},{index:.6,rgb:[120,70,20]},{index:1,rgb:[255,255,255]}],electric:[{index:0,rgb:[0,0,0]},{index:.15,rgb:[30,0,100]},{index:.4,rgb:[120,0,100]},{index:.6,rgb:[160,90,0]},{index:.8,rgb:[230,200,0]},{index:1,rgb:[255,250,220]}],alpha:[{index:0,rgb:[255,255,255,0]},{index:1,rgb:[255,255,255,1]}],viridis:[{index:0,rgb:[68,1,84]},{index:.13,rgb:[71,44,122]},{index:.25,rgb:[59,81,139]},{index:.38,rgb:[44,113,142]},{index:.5,rgb:[33,144,141]},{index:.63,rgb:[39,173,129]},{index:.75,rgb:[92,200,99]},{index:.88,rgb:[170,220,50]},{index:1,rgb:[253,231,37]}],inferno:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[31,12,72]},{index:.25,rgb:[85,15,109]},{index:.38,rgb:[136,34,106]},{index:.5,rgb:[186,54,85]},{index:.63,rgb:[227,89,51]},{index:.75,rgb:[249,140,10]},{index:.88,rgb:[249,201,50]},{index:1,rgb:[252,255,164]}],magma:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[28,16,68]},{index:.25,rgb:[79,18,123]},{index:.38,rgb:[129,37,129]},{index:.5,rgb:[181,54,122]},{index:.63,rgb:[229,80,100]},{index:.75,rgb:[251,135,97]},{index:.88,rgb:[254,194,135]},{index:1,rgb:[252,253,191]}],plasma:[{index:0,rgb:[13,8,135]},{index:.13,rgb:[75,3,161]},{index:.25,rgb:[125,3,168]},{index:.38,rgb:[168,34,150]},{index:.5,rgb:[203,70,121]},{index:.63,rgb:[229,107,93]},{index:.75,rgb:[248,148,65]},{index:.88,rgb:[253,195,40]},{index:1,rgb:[240,249,33]}],warm:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[172,0,187]},{index:.25,rgb:[219,0,170]},{index:.38,rgb:[255,0,130]},{index:.5,rgb:[255,63,74]},{index:.63,rgb:[255,123,0]},{index:.75,rgb:[234,176,0]},{index:.88,rgb:[190,228,0]},{index:1,rgb:[147,255,0]}],cool:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[116,0,218]},{index:.25,rgb:[98,74,237]},{index:.38,rgb:[68,146,231]},{index:.5,rgb:[0,204,197]},{index:.63,rgb:[0,247,146]},{index:.75,rgb:[0,255,88]},{index:.88,rgb:[40,255,8]},{index:1,rgb:[147,255,0]}],"rainbow-soft":[{index:0,rgb:[125,0,179]},{index:.1,rgb:[199,0,180]},{index:.2,rgb:[255,0,121]},{index:.3,rgb:[255,108,0]},{index:.4,rgb:[222,194,0]},{index:.5,rgb:[150,255,0]},{index:.6,rgb:[0,255,55]},{index:.7,rgb:[0,246,150]},{index:.8,rgb:[50,167,222]},{index:.9,rgb:[103,51,235]},{index:1,rgb:[124,0,186]}],bathymetry:[{index:0,rgb:[40,26,44]},{index:.13,rgb:[59,49,90]},{index:.25,rgb:[64,76,139]},{index:.38,rgb:[63,110,151]},{index:.5,rgb:[72,142,158]},{index:.63,rgb:[85,174,163]},{index:.75,rgb:[120,206,163]},{index:.88,rgb:[187,230,172]},{index:1,rgb:[253,254,204]}],cdom:[{index:0,rgb:[47,15,62]},{index:.13,rgb:[87,23,86]},{index:.25,rgb:[130,28,99]},{index:.38,rgb:[171,41,96]},{index:.5,rgb:[206,67,86]},{index:.63,rgb:[230,106,84]},{index:.75,rgb:[242,149,103]},{index:.88,rgb:[249,193,135]},{index:1,rgb:[254,237,176]}],chlorophyll:[{index:0,rgb:[18,36,20]},{index:.13,rgb:[25,63,41]},{index:.25,rgb:[24,91,59]},{index:.38,rgb:[13,119,72]},{index:.5,rgb:[18,148,80]},{index:.63,rgb:[80,173,89]},{index:.75,rgb:[132,196,122]},{index:.88,rgb:[175,221,162]},{index:1,rgb:[215,249,208]}],density:[{index:0,rgb:[54,14,36]},{index:.13,rgb:[89,23,80]},{index:.25,rgb:[110,45,132]},{index:.38,rgb:[120,77,178]},{index:.5,rgb:[120,113,213]},{index:.63,rgb:[115,151,228]},{index:.75,rgb:[134,185,227]},{index:.88,rgb:[177,214,227]},{index:1,rgb:[230,241,241]}],"freesurface-blue":[{index:0,rgb:[30,4,110]},{index:.13,rgb:[47,14,176]},{index:.25,rgb:[41,45,236]},{index:.38,rgb:[25,99,212]},{index:.5,rgb:[68,131,200]},{index:.63,rgb:[114,156,197]},{index:.75,rgb:[157,181,203]},{index:.88,rgb:[200,208,216]},{index:1,rgb:[241,237,236]}],"freesurface-red":[{index:0,rgb:[60,9,18]},{index:.13,rgb:[100,17,27]},{index:.25,rgb:[142,20,29]},{index:.38,rgb:[177,43,27]},{index:.5,rgb:[192,87,63]},{index:.63,rgb:[205,125,105]},{index:.75,rgb:[216,162,148]},{index:.88,rgb:[227,199,193]},{index:1,rgb:[241,237,236]}],oxygen:[{index:0,rgb:[64,5,5]},{index:.13,rgb:[106,6,15]},{index:.25,rgb:[144,26,7]},{index:.38,rgb:[168,64,3]},{index:.5,rgb:[188,100,4]},{index:.63,rgb:[206,136,11]},{index:.75,rgb:[220,174,25]},{index:.88,rgb:[231,215,44]},{index:1,rgb:[248,254,105]}],par:[{index:0,rgb:[51,20,24]},{index:.13,rgb:[90,32,35]},{index:.25,rgb:[129,44,34]},{index:.38,rgb:[159,68,25]},{index:.5,rgb:[182,99,19]},{index:.63,rgb:[199,134,22]},{index:.75,rgb:[212,171,35]},{index:.88,rgb:[221,210,54]},{index:1,rgb:[225,253,75]}],phase:[{index:0,rgb:[145,105,18]},{index:.13,rgb:[184,71,38]},{index:.25,rgb:[186,58,115]},{index:.38,rgb:[160,71,185]},{index:.5,rgb:[110,97,218]},{index:.63,rgb:[50,123,164]},{index:.75,rgb:[31,131,110]},{index:.88,rgb:[77,129,34]},{index:1,rgb:[145,105,18]}],salinity:[{index:0,rgb:[42,24,108]},{index:.13,rgb:[33,50,162]},{index:.25,rgb:[15,90,145]},{index:.38,rgb:[40,118,137]},{index:.5,rgb:[59,146,135]},{index:.63,rgb:[79,175,126]},{index:.75,rgb:[120,203,104]},{index:.88,rgb:[193,221,100]},{index:1,rgb:[253,239,154]}],temperature:[{index:0,rgb:[4,35,51]},{index:.13,rgb:[23,51,122]},{index:.25,rgb:[85,59,157]},{index:.38,rgb:[129,79,143]},{index:.5,rgb:[175,95,130]},{index:.63,rgb:[222,112,101]},{index:.75,rgb:[249,146,66]},{index:.88,rgb:[249,196,65]},{index:1,rgb:[232,250,91]}],turbidity:[{index:0,rgb:[34,31,27]},{index:.13,rgb:[65,50,41]},{index:.25,rgb:[98,69,52]},{index:.38,rgb:[131,89,57]},{index:.5,rgb:[161,112,59]},{index:.63,rgb:[185,140,66]},{index:.75,rgb:[202,174,88]},{index:.88,rgb:[216,209,126]},{index:1,rgb:[233,246,171]}],"velocity-blue":[{index:0,rgb:[17,32,64]},{index:.13,rgb:[35,52,116]},{index:.25,rgb:[29,81,156]},{index:.38,rgb:[31,113,162]},{index:.5,rgb:[50,144,169]},{index:.63,rgb:[87,173,176]},{index:.75,rgb:[149,196,189]},{index:.88,rgb:[203,221,211]},{index:1,rgb:[254,251,230]}],"velocity-green":[{index:0,rgb:[23,35,19]},{index:.13,rgb:[24,64,38]},{index:.25,rgb:[11,95,45]},{index:.38,rgb:[39,123,35]},{index:.5,rgb:[95,146,12]},{index:.63,rgb:[152,165,18]},{index:.75,rgb:[201,186,69]},{index:.88,rgb:[233,216,137]},{index:1,rgb:[255,253,205]}],cubehelix:[{index:0,rgb:[0,0,0]},{index:.07,rgb:[22,5,59]},{index:.13,rgb:[60,4,105]},{index:.2,rgb:[109,1,135]},{index:.27,rgb:[161,0,147]},{index:.33,rgb:[210,2,142]},{index:.4,rgb:[251,11,123]},{index:.47,rgb:[255,29,97]},{index:.53,rgb:[255,54,69]},{index:.6,rgb:[255,85,46]},{index:.67,rgb:[255,120,34]},{index:.73,rgb:[255,157,37]},{index:.8,rgb:[241,191,57]},{index:.87,rgb:[224,220,93]},{index:.93,rgb:[218,241,142]},{index:1,rgb:[227,253,198]}]}},9156:function(t,e,r){"use strict";var n=r(5692),i=r(3578);function a(t){return[t[0]/255,t[1]/255,t[2]/255,t[3]]}function o(t){for(var e,r="#",n=0;n<3;++n)r+=("00"+(e=(e=t[n]).toString(16))).substr(e.length);return r}function s(t){return"rgba("+t.join(",")+")"}t.exports=function(t){var e,r,l,u,c,f,h,p,d,v;if(t||(t={}),p=(t.nshades||72)-1,h=t.format||"hex",(f=t.colormap)||(f="jet"),"string"==typeof f){if(f=f.toLowerCase(),!n[f])throw Error(f+" not a supported colorscale");c=n[f]}else{if(!Array.isArray(f))throw Error("unsupported colormap option",f);c=f.slice()}if(c.length>p+1)throw new Error(f+" map requires nshades to be at least size "+c.length);d=Array.isArray(t.alpha)?2!==t.alpha.length?[1,1]:t.alpha.slice():"number"==typeof t.alpha?[t.alpha,t.alpha]:[1,1],e=c.map((function(t){return Math.round(t.index*p)})),d[0]=Math.min(Math.max(d[0],0),1),d[1]=Math.min(Math.max(d[1],0),1);var g=c.map((function(t,e){var r=c[e].index,n=c[e].rgb.slice();return 4===n.length&&n[3]>=0&&n[3]<=1||(n[3]=d[0]+(d[1]-d[0])*r),n})),y=[];for(v=0;v<e.length-1;++v){u=e[v+1]-e[v],r=g[v],l=g[v+1];for(var m=0;m<u;m++){var x=m/u;y.push([Math.round(i(r[0],l[0],x)),Math.round(i(r[1],l[1],x)),Math.round(i(r[2],l[2],x)),i(r[3],l[3],x)])}}return y.push(c[c.length-1].rgb.concat(d[1])),"hex"===h?y=y.map(o):"rgbaString"===h?y=y.map(s):"float"===h&&(y=y.map(a)),y}},9398:function(t,e,r){"use strict";t.exports=function(t,e,r,a){var o=n(e,r,a);if(0===o){var s=i(n(t,e,r)),u=i(n(t,e,a));if(s===u){if(0===s){var c=l(t,e,r);return c===l(t,e,a)?0:c?1:-1}return 0}return 0===u?s>0||l(t,e,a)?-1:1:0===s?u>0||l(t,e,r)?1:-1:i(u-s)}var f=n(t,e,r);return f>0?o>0&&n(t,e,a)>0?1:-1:f<0?o>0||n(t,e,a)>0?1:-1:n(t,e,a)>0||l(t,e,r)?1:-1};var n=r(417),i=r(7538),a=r(87),o=r(2019),s=r(9662);function l(t,e,r){var n=a(t[0],-e[0]),i=a(t[1],-e[1]),l=a(r[0],-e[0]),u=a(r[1],-e[1]),c=s(o(n,l),o(i,u));return c[c.length-1]>=0}},7538:function(t){"use strict";t.exports=function(t){return t<0?-1:t>0?1:0}},9209:function(t){t.exports=function(t,n){var i=t.length,a=t.length-n.length;if(a)return a;switch(i){case 0:return 0;case 1:return t[0]-n[0];case 2:return t[0]+t[1]-n[0]-n[1]||e(t[0],t[1])-e(n[0],n[1]);case 3:var o=t[0]+t[1],s=n[0]+n[1];if(a=o+t[2]-(s+n[2]))return a;var l=e(t[0],t[1]),u=e(n[0],n[1]);return e(l,t[2])-e(u,n[2])||e(l+t[2],o)-e(u+n[2],s);case 4:var c=t[0],f=t[1],h=t[2],p=t[3],d=n[0],v=n[1],g=n[2],y=n[3];return c+f+h+p-(d+v+g+y)||e(c,f,h,p)-e(d,v,g,y,d)||e(c+f,c+h,c+p,f+h,f+p,h+p)-e(d+v,d+g,d+y,v+g,v+y,g+y)||e(c+f+h,c+f+p,c+h+p,f+h+p)-e(d+v+g,d+v+y,d+g+y,v+g+y);default:for(var m=t.slice().sort(r),x=n.slice().sort(r),b=0;b<i;++b)if(a=m[b]-x[b])return a;return 0}};var e=Math.min;function r(t,e){return t-e}},1284:function(t,e,r){"use strict";var n=r(9209),i=r(9887);t.exports=function(t,e){return n(t,e)||i(t)-i(e)}},5537:function(t,e,r){"use strict";var n=r(8950),i=r(8722),a=r(3332);t.exports=function(t){var e=t.length;if(0===e)return[];if(1===e)return[[0]];var r=t[0].length;return 0===r?[]:1===r?n(t):2===r?i(t):a(t,r)}},8950:function(t){"use strict";t.exports=function(t){for(var e=0,r=0,n=1;n<t.length;++n)t[n][0]<t[e][0]&&(e=n),t[n][0]>t[r][0]&&(r=n);return e<r?[[e],[r]]:e>r?[[r],[e]]:[[e]]}},8722:function(t,e,r){"use strict";t.exports=function(t){var e=n(t),r=e.length;if(r<=2)return[];for(var i=new Array(r),a=e[r-1],o=0;o<r;++o){var s=e[o];i[o]=[a,s],a=s}return i};var n=r(3266)},3332:function(t,e,r){"use strict";t.exports=function(t,e){try{return n(t,!0)}catch(o){var r=i(t);if(r.length<=e)return[];var a=function(t,e){for(var r=t.length,n=new Array(r),i=0;i<e.length;++i)n[i]=t[e[i]];var a=e.length;for(i=0;i<r;++i)e.indexOf(i)<0&&(n[a++]=t[i]);return n}(t,r);return function(t,e){for(var r=t.length,n=e.length,i=0;i<r;++i)for(var a=t[i],o=0;o<a.length;++o){var s=a[o];if(s<n)a[o]=e[s];else{s-=n;for(var l=0;l<n;++l)s>=e[l]&&(s+=1);a[o]=s}}return t}(n(a,!0),r)}};var n=r(2183),i=r(2153)},9680:function(t){"use strict";t.exports=function(t,e,r,n,i,a){var o=i-1,s=i*i,l=o*o,u=(1+2*i)*l,c=i*l,f=s*(3-2*i),h=s*o;if(t.length){a||(a=new Array(t.length));for(var p=t.length-1;p>=0;--p)a[p]=u*t[p]+c*e[p]+f*r[p]+h*n[p];return a}return u*t+c*e+f*r+h*n},t.exports.derivative=function(t,e,r,n,i,a){var o=6*i*i-6*i,s=3*i*i-4*i+1,l=-6*i*i+6*i,u=3*i*i-2*i;if(t.length){a||(a=new Array(t.length));for(var c=t.length-1;c>=0;--c)a[c]=o*t[c]+s*e[c]+l*r[c]+u*n[c];return a}return o*t+s*e+l*r[c]+u*n}},4419:function(t,e,r){"use strict";var n=r(2183),i=r(1215);function a(t,e){this.point=t,this.index=e}function o(t,e){for(var r=t.point,n=e.point,i=r.length,a=0;a<i;++a){var o=n[a]-r[a];if(o)return o}return 0}t.exports=function(t,e){var r=t.length;if(0===r)return[];var s=t[0].length;if(s<1)return[];if(1===s)return function(t,e,r){if(1===t)return r?[[-1,0]]:[];var n=e.map((function(t,e){return[t[0],e]}));n.sort((function(t,e){return t[0]-e[0]}));for(var i=new Array(t-1),a=1;a<t;++a){var o=n[a-1],s=n[a];i[a-1]=[o[1],s[1]]}return r&&i.push([-1,i[0][1]],[i[t-1][1],-1]),i}(r,t,e);for(var l=new Array(r),u=1,c=0;c<r;++c){for(var f=t[c],h=new Array(s+1),p=0,d=0;d<s;++d){var v=f[d];h[d]=v,p+=v*v}h[s]=p,l[c]=new a(h,c),u=Math.max(p,u)}i(l,o),r=l.length;var g=new Array(r+s+1),y=new Array(r+s+1),m=(s+1)*(s+1)*u,x=new Array(s+1);for(c=0;c<=s;++c)x[c]=0;for(x[s]=m,g[0]=x.slice(),y[0]=-1,c=0;c<=s;++c)(h=x.slice())[c]=1,g[c+1]=h,y[c+1]=-1;for(c=0;c<r;++c){var b=l[c];g[c+s+1]=b.point,y[c+s+1]=b.index}var _=n(g,!1);if(_=e?_.filter((function(t){for(var e=0,r=0;r<=s;++r){var n=y[t[r]];if(n<0&&++e>=2)return!1;t[r]=n}return!0})):_.filter((function(t){for(var e=0;e<=s;++e){var r=y[t[e]];if(r<0)return!1;t[e]=r}return!0})),1&s)for(c=0;c<_.length;++c)h=(b=_[c])[0],b[0]=b[1],b[1]=h;return _}},8362:function(t){var e=!1;if("undefined"!=typeof Float64Array){var r=new Float64Array(1),n=new Uint32Array(r.buffer);r[0]=1,e=!0,1072693248===n[1]?(t.exports=function(t){return r[0]=t,[n[0],n[1]]},t.exports.pack=function(t,e){return n[0]=t,n[1]=e,r[0]},t.exports.lo=function(t){return r[0]=t,n[0]},t.exports.hi=function(t){return r[0]=t,n[1]}):1072693248===n[0]?(t.exports=function(t){return r[0]=t,[n[1],n[0]]},t.exports.pack=function(t,e){return n[1]=t,n[0]=e,r[0]},t.exports.lo=function(t){return r[0]=t,n[1]},t.exports.hi=function(t){return r[0]=t,n[0]}):e=!1}if(!e){var i=new Buffer(8);t.exports=function(t){return i.writeDoubleLE(t,0,!0),[i.readUInt32LE(0,!0),i.readUInt32LE(4,!0)]},t.exports.pack=function(t,e){return i.writeUInt32LE(t,0,!0),i.writeUInt32LE(e,4,!0),i.readDoubleLE(0,!0)},t.exports.lo=function(t){return i.writeDoubleLE(t,0,!0),i.readUInt32LE(0,!0)},t.exports.hi=function(t){return i.writeDoubleLE(t,0,!0),i.readUInt32LE(4,!0)}}t.exports.sign=function(e){return t.exports.hi(e)>>>31},t.exports.exponent=function(e){return(t.exports.hi(e)<<1>>>21)-1023},t.exports.fraction=function(e){var r=t.exports.lo(e),n=t.exports.hi(e),i=1048575&n;return 2146435072&n&&(i+=1<<20),[r,i]},t.exports.denormalized=function(e){return!(2146435072&t.exports.hi(e))}},3094:function(t){"use strict";function e(t,r,n){var i=0|t[n];if(i<=0)return[];var a,o=new Array(i);if(n===t.length-1)for(a=0;a<i;++a)o[a]=r;else for(a=0;a<i;++a)o[a]=e(t,r,n+1);return o}t.exports=function(t,r){switch(void 0===r&&(r=0),typeof t){case"number":if(t>0)return function(t,e){var r,n;for(r=new Array(t),n=0;n<t;++n)r[n]=e;return r}(0|t,r);break;case"object":if("number"==typeof t.length)return e(t,r,0)}return[]}},8348:function(t,e,r){"use strict";t.exports=function(t,e){var r=t.length;if("number"!=typeof e){e=0;for(var i=0;i<r;++i){var a=t[i];e=Math.max(e,a[0],a[1])}e=1+(0|e)}e|=0;var o=new Array(e);for(i=0;i<e;++i)o[i]=[];for(i=0;i<r;++i)o[(a=t[i])[0]].push(a[1]),o[a[1]].push(a[0]);for(var s=0;s<e;++s)n(o[s],(function(t,e){return t-e}));return o};var n=r(1215)},5795:function(t){"use strict";t.exports=function(t,e,r){var n=e||0,i=r||1;return[[t[12]+t[0],t[13]+t[1],t[14]+t[2],t[15]+t[3]],[t[12]-t[0],t[13]-t[1],t[14]-t[2],t[15]-t[3]],[t[12]+t[4],t[13]+t[5],t[14]+t[6],t[15]+t[7]],[t[12]-t[4],t[13]-t[5],t[14]-t[6],t[15]-t[7]],[n*t[12]+t[8],n*t[13]+t[9],n*t[14]+t[10],n*t[15]+t[11]],[i*t[12]-t[8],i*t[13]-t[9],i*t[14]-t[10],i*t[15]-t[11]]]}},8444:function(t,e,r){"use strict";t.exports=function(t,e,r){switch(arguments.length){case 0:return new o([0],[0],0);case 1:return"number"==typeof t?new o(n=l(t),n,0):new o(t,l(t.length),0);case 2:var n;if("number"==typeof e)return new o(t,n=l(t.length),+e);r=0;case 3:if(t.length!==e.length)throw new Error("state and velocity lengths must match");return new o(t,e,r)}};var n=r(9680),i=r(5070);function a(t,e,r){return Math.min(e,Math.max(t,r))}function o(t,e,r){this.dimension=t.length,this.bounds=[new Array(this.dimension),new Array(this.dimension)];for(var n=0;n<this.dimension;++n)this.bounds[0][n]=-1/0,this.bounds[1][n]=1/0;this._state=t.slice().reverse(),this._velocity=e.slice().reverse(),this._time=[r],this._scratch=[t.slice(),t.slice(),t.slice(),t.slice(),t.slice()]}var s=o.prototype;function l(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=0;return e}s.flush=function(t){var e=i.gt(this._time,t)-1;e<=0||(this._time.splice(0,e),this._state.splice(0,e*this.dimension),this._velocity.splice(0,e*this.dimension))},s.curve=function(t){var e=this._time,r=e.length,o=i.le(e,t),s=this._scratch[0],l=this._state,u=this._velocity,c=this.dimension,f=this.bounds;if(o<0)for(var h=c-1,p=0;p<c;++p,--h)s[p]=l[h];else if(o>=r-1){h=l.length-1;var d=t-e[r-1];for(p=0;p<c;++p,--h)s[p]=l[h]+d*u[h]}else{h=c*(o+1)-1;var v=e[o],g=e[o+1]-v||1,y=this._scratch[1],m=this._scratch[2],x=this._scratch[3],b=this._scratch[4],_=!0;for(p=0;p<c;++p,--h)y[p]=l[h],x[p]=u[h]*g,m[p]=l[h+c],b[p]=u[h+c]*g,_=_&&y[p]===m[p]&&x[p]===b[p]&&0===x[p];if(_)for(p=0;p<c;++p)s[p]=y[p];else n(y,x,m,b,(t-v)/g,s)}var w=f[0],T=f[1];for(p=0;p<c;++p)s[p]=a(w[p],T[p],s[p]);return s},s.dcurve=function(t){var e=this._time,r=e.length,a=i.le(e,t),o=this._scratch[0],s=this._state,l=this._velocity,u=this.dimension;if(a>=r-1)for(var c=s.length-1,f=(e[r-1],0);f<u;++f,--c)o[f]=l[c];else{c=u*(a+1)-1;var h=e[a],p=e[a+1]-h||1,d=this._scratch[1],v=this._scratch[2],g=this._scratch[3],y=this._scratch[4],m=!0;for(f=0;f<u;++f,--c)d[f]=s[c],g[f]=l[c]*p,v[f]=s[c+u],y[f]=l[c+u]*p,m=m&&d[f]===v[f]&&g[f]===y[f]&&0===g[f];if(m)for(f=0;f<u;++f)o[f]=0;else for(n.derivative(d,g,v,y,(t-h)/p,o),f=0;f<u;++f)o[f]/=p}return o},s.lastT=function(){var t=this._time;return t[t.length-1]},s.stable=function(){for(var t=this._velocity,e=t.length,r=this.dimension-1;r>=0;--r)if(t[--e])return!1;return!0},s.jump=function(t){var e=this.lastT(),r=this.dimension;if(!(t<e||arguments.length!==r+1)){var n=this._state,i=this._velocity,o=n.length-this.dimension,s=this.bounds,l=s[0],u=s[1];this._time.push(e,t);for(var c=0;c<2;++c)for(var f=0;f<r;++f)n.push(n[o++]),i.push(0);for(this._time.push(t),f=r;f>0;--f)n.push(a(l[f-1],u[f-1],arguments[f])),i.push(0)}},s.push=function(t){var e=this.lastT(),r=this.dimension;if(!(t<e||arguments.length!==r+1)){var n=this._state,i=this._velocity,o=n.length-this.dimension,s=t-e,l=this.bounds,u=l[0],c=l[1],f=s>1e-6?1/s:0;this._time.push(t);for(var h=r;h>0;--h){var p=a(u[h-1],c[h-1],arguments[h]);n.push(p),i.push((p-n[o++])*f)}}},s.set=function(t){var e=this.dimension;if(!(t<this.lastT()||arguments.length!==e+1)){var r=this._state,n=this._velocity,i=this.bounds,o=i[0],s=i[1];this._time.push(t);for(var l=e;l>0;--l)r.push(a(o[l-1],s[l-1],arguments[l])),n.push(0)}},s.move=function(t){var e=this.lastT(),r=this.dimension;if(!(t<=e||arguments.length!==r+1)){var n=this._state,i=this._velocity,o=n.length-this.dimension,s=this.bounds,l=s[0],u=s[1],c=t-e,f=c>1e-6?1/c:0;this._time.push(t);for(var h=r;h>0;--h){var p=arguments[h];n.push(a(l[h-1],u[h-1],n[o++]+p)),i.push(p*f)}}},s.idle=function(t){var e=this.lastT();if(!(t<e)){var r=this.dimension,n=this._state,i=this._velocity,o=n.length-r,s=this.bounds,l=s[0],u=s[1],c=t-e;this._time.push(t);for(var f=r-1;f>=0;--f)n.push(a(l[f],u[f],n[o]+c*i[o])),i.push(0),o+=1}}},7080:function(t){"use strict";function e(t,e,r,n,i,a){this._color=t,this.key=e,this.value=r,this.left=n,this.right=i,this._count=a}function r(t){return new e(t._color,t.key,t.value,t.left,t.right,t._count)}function n(t,r){return new e(t,r.key,r.value,r.left,r.right,r._count)}function i(t){t._count=1+(t.left?t.left._count:0)+(t.right?t.right._count:0)}function a(t,e){this._compare=t,this.root=e}t.exports=function(t){return new a(t||p,null)};var o=a.prototype;function s(t,e){var r;return e.left&&(r=s(t,e.left))?r:(r=t(e.key,e.value))||(e.right?s(t,e.right):void 0)}function l(t,e,r,n){if(e(t,n.key)<=0){var i;if(n.left&&(i=l(t,e,r,n.left)))return i;if(i=r(n.key,n.value))return i}if(n.right)return l(t,e,r,n.right)}function u(t,e,r,n,i){var a,o=r(t,i.key),s=r(e,i.key);if(o<=0){if(i.left&&(a=u(t,e,r,n,i.left)))return a;if(s>0&&(a=n(i.key,i.value)))return a}if(s>0&&i.right)return u(t,e,r,n,i.right)}function c(t,e){this.tree=t,this._stack=e}Object.defineProperty(o,"keys",{get:function(){var t=[];return this.forEach((function(e,r){t.push(e)})),t}}),Object.defineProperty(o,"values",{get:function(){var t=[];return this.forEach((function(e,r){t.push(r)})),t}}),Object.defineProperty(o,"length",{get:function(){return this.root?this.root._count:0}}),o.insert=function(t,r){for(var o=this._compare,s=this.root,l=[],u=[];s;){var c=o(t,s.key);l.push(s),u.push(c),s=c<=0?s.left:s.right}l.push(new e(0,t,r,null,null,1));for(var f=l.length-2;f>=0;--f)s=l[f],u[f]<=0?l[f]=new e(s._color,s.key,s.value,l[f+1],s.right,s._count+1):l[f]=new e(s._color,s.key,s.value,s.left,l[f+1],s._count+1);for(f=l.length-1;f>1;--f){var h=l[f-1];if(s=l[f],1===h._color||1===s._color)break;var p=l[f-2];if(p.left===h)if(h.left===s){if(!(d=p.right)||0!==d._color){p._color=0,p.left=h.right,h._color=1,h.right=p,l[f-2]=h,l[f-1]=s,i(p),i(h),f>=3&&((v=l[f-3]).left===p?v.left=h:v.right=h);break}h._color=1,p.right=n(1,d),p._color=0,f-=1}else{if(!(d=p.right)||0!==d._color){h.right=s.left,p._color=0,p.left=s.right,s._color=1,s.left=h,s.right=p,l[f-2]=s,l[f-1]=h,i(p),i(h),i(s),f>=3&&((v=l[f-3]).left===p?v.left=s:v.right=s);break}h._color=1,p.right=n(1,d),p._color=0,f-=1}else if(h.right===s){if(!(d=p.left)||0!==d._color){p._color=0,p.right=h.left,h._color=1,h.left=p,l[f-2]=h,l[f-1]=s,i(p),i(h),f>=3&&((v=l[f-3]).right===p?v.right=h:v.left=h);break}h._color=1,p.left=n(1,d),p._color=0,f-=1}else{var d;if(!(d=p.left)||0!==d._color){var v;h.left=s.right,p._color=0,p.right=s.left,s._color=1,s.right=h,s.left=p,l[f-2]=s,l[f-1]=h,i(p),i(h),i(s),f>=3&&((v=l[f-3]).right===p?v.right=s:v.left=s);break}h._color=1,p.left=n(1,d),p._color=0,f-=1}}return l[0]._color=1,new a(o,l[0])},o.forEach=function(t,e,r){if(this.root)switch(arguments.length){case 1:return s(t,this.root);case 2:return l(e,this._compare,t,this.root);case 3:if(this._compare(e,r)>=0)return;return u(e,r,this._compare,t,this.root)}},Object.defineProperty(o,"begin",{get:function(){for(var t=[],e=this.root;e;)t.push(e),e=e.left;return new c(this,t)}}),Object.defineProperty(o,"end",{get:function(){for(var t=[],e=this.root;e;)t.push(e),e=e.right;return new c(this,t)}}),o.at=function(t){if(t<0)return new c(this,[]);for(var e=this.root,r=[];;){if(r.push(e),e.left){if(t<e.left._count){e=e.left;continue}t-=e.left._count}if(!t)return new c(this,r);if(t-=1,!e.right)break;if(t>=e.right._count)break;e=e.right}return new c(this,[])},o.ge=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a<=0&&(i=n.length),r=a<=0?r.left:r.right}return n.length=i,new c(this,n)},o.gt=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a<0&&(i=n.length),r=a<0?r.left:r.right}return n.length=i,new c(this,n)},o.lt=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a>0&&(i=n.length),r=a<=0?r.left:r.right}return n.length=i,new c(this,n)},o.le=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a>=0&&(i=n.length),r=a<0?r.left:r.right}return n.length=i,new c(this,n)},o.find=function(t){for(var e=this._compare,r=this.root,n=[];r;){var i=e(t,r.key);if(n.push(r),0===i)return new c(this,n);r=i<=0?r.left:r.right}return new c(this,[])},o.remove=function(t){var e=this.find(t);return e?e.remove():this},o.get=function(t){for(var e=this._compare,r=this.root;r;){var n=e(t,r.key);if(0===n)return r.value;r=n<=0?r.left:r.right}};var f=c.prototype;function h(t,e){t.key=e.key,t.value=e.value,t.left=e.left,t.right=e.right,t._color=e._color,t._count=e._count}function p(t,e){return t<e?-1:t>e?1:0}Object.defineProperty(f,"valid",{get:function(){return this._stack.length>0}}),Object.defineProperty(f,"node",{get:function(){return this._stack.length>0?this._stack[this._stack.length-1]:null},enumerable:!0}),f.clone=function(){return new c(this.tree,this._stack.slice())},f.remove=function(){var t=this._stack;if(0===t.length)return this.tree;var o=new Array(t.length),s=t[t.length-1];o[o.length-1]=new e(s._color,s.key,s.value,s.left,s.right,s._count);for(var l=t.length-2;l>=0;--l)(s=t[l]).left===t[l+1]?o[l]=new e(s._color,s.key,s.value,o[l+1],s.right,s._count):o[l]=new e(s._color,s.key,s.value,s.left,o[l+1],s._count);if((s=o[o.length-1]).left&&s.right){var u=o.length;for(s=s.left;s.right;)o.push(s),s=s.right;var c=o[u-1];for(o.push(new e(s._color,c.key,c.value,s.left,s.right,s._count)),o[u-1].key=s.key,o[u-1].value=s.value,l=o.length-2;l>=u;--l)s=o[l],o[l]=new e(s._color,s.key,s.value,s.left,o[l+1],s._count);o[u-1].left=o[u]}if(0===(s=o[o.length-1])._color){var f=o[o.length-2];for(f.left===s?f.left=null:f.right===s&&(f.right=null),o.pop(),l=0;l<o.length;++l)o[l]._count--;return new a(this.tree._compare,o[0])}if(s.left||s.right){for(s.left?h(s,s.left):s.right&&h(s,s.right),s._color=1,l=0;l<o.length-1;++l)o[l]._count--;return new a(this.tree._compare,o[0])}if(1===o.length)return new a(this.tree._compare,null);for(l=0;l<o.length;++l)o[l]._count--;var p=o[o.length-2];return function(t){for(var e,a,o,s,l=t.length-1;l>=0;--l){if(e=t[l],0===l)return void(e._color=1);if((a=t[l-1]).left===e){if((o=a.right).right&&0===o.right._color)return s=(o=a.right=r(o)).right=r(o.right),a.right=o.left,o.left=a,o.right=s,o._color=a._color,e._color=1,a._color=1,s._color=1,i(a),i(o),l>1&&((u=t[l-2]).left===a?u.left=o:u.right=o),void(t[l-1]=o);if(o.left&&0===o.left._color)return s=(o=a.right=r(o)).left=r(o.left),a.right=s.left,o.left=s.right,s.left=a,s.right=o,s._color=a._color,a._color=1,o._color=1,e._color=1,i(a),i(o),i(s),l>1&&((u=t[l-2]).left===a?u.left=s:u.right=s),void(t[l-1]=s);if(1===o._color){if(0===a._color)return a._color=1,void(a.right=n(0,o));a.right=n(0,o);continue}o=r(o),a.right=o.left,o.left=a,o._color=a._color,a._color=0,i(a),i(o),l>1&&((u=t[l-2]).left===a?u.left=o:u.right=o),t[l-1]=o,t[l]=a,l+1<t.length?t[l+1]=e:t.push(e),l+=2}else{if((o=a.left).left&&0===o.left._color)return s=(o=a.left=r(o)).left=r(o.left),a.left=o.right,o.right=a,o.left=s,o._color=a._color,e._color=1,a._color=1,s._color=1,i(a),i(o),l>1&&((u=t[l-2]).right===a?u.right=o:u.left=o),void(t[l-1]=o);if(o.right&&0===o.right._color)return s=(o=a.left=r(o)).right=r(o.right),a.left=s.right,o.right=s.left,s.right=a,s.left=o,s._color=a._color,a._color=1,o._color=1,e._color=1,i(a),i(o),i(s),l>1&&((u=t[l-2]).right===a?u.right=s:u.left=s),void(t[l-1]=s);if(1===o._color){if(0===a._color)return a._color=1,void(a.left=n(0,o));a.left=n(0,o);continue}var u;o=r(o),a.left=o.right,o.right=a,o._color=a._color,a._color=0,i(a),i(o),l>1&&((u=t[l-2]).right===a?u.right=o:u.left=o),t[l-1]=o,t[l]=a,l+1<t.length?t[l+1]=e:t.push(e),l+=2}}}(o),p.left===s?p.left=null:p.right=null,new a(this.tree._compare,o[0])},Object.defineProperty(f,"key",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].key},enumerable:!0}),Object.defineProperty(f,"value",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].value},enumerable:!0}),Object.defineProperty(f,"index",{get:function(){var t=0,e=this._stack;if(0===e.length){var r=this.tree.root;return r?r._count:0}e[e.length-1].left&&(t=e[e.length-1].left._count);for(var n=e.length-2;n>=0;--n)e[n+1]===e[n].right&&(++t,e[n].left&&(t+=e[n].left._count));return t},enumerable:!0}),f.next=function(){var t=this._stack;if(0!==t.length){var e=t[t.length-1];if(e.right)for(e=e.right;e;)t.push(e),e=e.left;else for(t.pop();t.length>0&&t[t.length-1].right===e;)e=t[t.length-1],t.pop()}},Object.defineProperty(f,"hasNext",{get:function(){var t=this._stack;if(0===t.length)return!1;if(t[t.length-1].right)return!0;for(var e=t.length-1;e>0;--e)if(t[e-1].left===t[e])return!0;return!1}}),f.update=function(t){var r=this._stack;if(0===r.length)throw new Error("Can't update empty node!");var n=new Array(r.length),i=r[r.length-1];n[n.length-1]=new e(i._color,i.key,t,i.left,i.right,i._count);for(var o=r.length-2;o>=0;--o)(i=r[o]).left===r[o+1]?n[o]=new e(i._color,i.key,i.value,n[o+1],i.right,i._count):n[o]=new e(i._color,i.key,i.value,i.left,n[o+1],i._count);return new a(this.tree._compare,n[0])},f.prev=function(){var t=this._stack;if(0!==t.length){var e=t[t.length-1];if(e.left)for(e=e.left;e;)t.push(e),e=e.right;else for(t.pop();t.length>0&&t[t.length-1].left===e;)e=t[t.length-1],t.pop()}},Object.defineProperty(f,"hasPrev",{get:function(){var t=this._stack;if(0===t.length)return!1;if(t[t.length-1].left)return!0;for(var e=t.length-1;e>0;--e)if(t[e-1].right===t[e])return!0;return!1}})},7453:function(t,e,r){"use strict";t.exports=function(t,e){var r=new c(t);return r.update(e),r};var n=r(9557),i=r(1681),a=r(1011),o=r(2864),s=r(8468),l=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);function u(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function c(t){this.gl=t,this.pixelRatio=1,this.bounds=[[-10,-10,-10],[10,10,10]],this.ticks=[[],[],[]],this.autoTicks=!0,this.tickSpacing=[1,1,1],this.tickEnable=[!0,!0,!0],this.tickFont=["sans-serif","sans-serif","sans-serif"],this.tickSize=[12,12,12],this.tickAngle=[0,0,0],this.tickAlign=["auto","auto","auto"],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[10,10,10],this.lastCubeProps={cubeEdges:[0,0,0],axis:[0,0,0]},this.labels=["x","y","z"],this.labelEnable=[!0,!0,!0],this.labelFont="sans-serif",this.labelSize=[20,20,20],this.labelAngle=[0,0,0],this.labelAlign=["auto","auto","auto"],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[10,10,10],this.lineEnable=[!0,!0,!0],this.lineMirror=[!1,!1,!1],this.lineWidth=[1,1,1],this.lineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable=[!0,!0,!0],this.lineTickMirror=[!1,!1,!1],this.lineTickLength=[0,0,0],this.lineTickWidth=[1,1,1],this.lineTickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable=[!0,!0,!0],this.gridWidth=[1,1,1],this.gridColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable=[!0,!0,!0],this.zeroLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth=[2,2,2],this.backgroundEnable=[!1,!1,!1],this.backgroundColor=[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._firstInit=!0,this._text=null,this._lines=null,this._background=a(t)}var f=c.prototype;function h(){this.primalOffset=[0,0,0],this.primalMinor=[0,0,0],this.mirrorOffset=[0,0,0],this.mirrorMinor=[0,0,0]}f.update=function(t){function e(e,r,n){if(n in t){var i,a=t[n],o=this[n];(e?Array.isArray(a)&&Array.isArray(a[0]):Array.isArray(a))?this[n]=i=[r(a[0]),r(a[1]),r(a[2])]:this[n]=i=[r(a),r(a),r(a)];for(var s=0;s<3;++s)if(i[s]!==o[s])return!0}return!1}t=t||{};var r,a=e.bind(this,!1,Number),o=e.bind(this,!1,Boolean),l=e.bind(this,!1,String),u=e.bind(this,!0,(function(t){if(Array.isArray(t)){if(3===t.length)return[+t[0],+t[1],+t[2],1];if(4===t.length)return[+t[0],+t[1],+t[2],+t[3]]}return[0,0,0,1]})),c=!1,f=!1;if("bounds"in t)for(var h=t.bounds,p=0;p<2;++p)for(var d=0;d<3;++d)h[p][d]!==this.bounds[p][d]&&(f=!0),this.bounds[p][d]=h[p][d];if("ticks"in t)for(r=t.ticks,c=!0,this.autoTicks=!1,p=0;p<3;++p)this.tickSpacing[p]=0;else a("tickSpacing")&&(this.autoTicks=!0,f=!0);if(this._firstInit&&("ticks"in t||"tickSpacing"in t||(this.autoTicks=!0),f=!0,c=!0,this._firstInit=!1),f&&this.autoTicks&&(r=s.create(this.bounds,this.tickSpacing),c=!0),c){for(p=0;p<3;++p)r[p].sort((function(t,e){return t.x-e.x}));s.equal(r,this.ticks)?c=!1:this.ticks=r}o("tickEnable"),l("tickFont")&&(c=!0),a("tickSize"),a("tickAngle"),a("tickPad"),u("tickColor");var v=l("labels");l("labelFont")&&(v=!0),o("labelEnable"),a("labelSize"),a("labelPad"),u("labelColor"),o("lineEnable"),o("lineMirror"),a("lineWidth"),u("lineColor"),o("lineTickEnable"),o("lineTickMirror"),a("lineTickLength"),a("lineTickWidth"),u("lineTickColor"),o("gridEnable"),a("gridWidth"),u("gridColor"),o("zeroEnable"),u("zeroLineColor"),a("zeroLineWidth"),o("backgroundEnable"),u("backgroundColor"),this._text?this._text&&(v||c)&&this._text.update(this.bounds,this.labels,this.labelFont,this.ticks,this.tickFont):this._text=n(this.gl,this.bounds,this.labels,this.labelFont,this.ticks,this.tickFont),this._lines&&c&&(this._lines.dispose(),this._lines=null),this._lines||(this._lines=i(this.gl,this.bounds,this.ticks))};var p=[new h,new h,new h];function d(t,e,r,n,i){for(var a=t.primalOffset,o=t.primalMinor,s=t.mirrorOffset,l=t.mirrorMinor,u=n[e],c=0;c<3;++c)if(e!==c){var f=a,h=s,p=o,d=l;u&1<<c&&(f=s,h=a,p=l,d=o),f[c]=r[0][c],h[c]=r[1][c],i[c]>0?(p[c]=-1,d[c]=0):(p[c]=0,d[c]=1)}}var v=[0,0,0],g={model:l,view:l,projection:l,_ortho:!1};f.isOpaque=function(){return!0},f.isTransparent=function(){return!1},f.drawTransparent=function(t){};var y=[0,0,0],m=[0,0,0],x=[0,0,0];f.draw=function(t){t=t||g;for(var e=this.gl,r=t.model||l,n=t.view||l,i=t.projection||l,a=this.bounds,s=t._ortho||!1,c=o(r,n,i,a,s),f=c.cubeEdges,h=c.axis,b=n[12],_=n[13],w=n[14],T=n[15],k=(s?2:1)*this.pixelRatio*(i[3]*b+i[7]*_+i[11]*w+i[15]*T)/e.drawingBufferHeight,A=0;A<3;++A)this.lastCubeProps.cubeEdges[A]=f[A],this.lastCubeProps.axis[A]=h[A];var M=p;for(A=0;A<3;++A)d(p[A],A,this.bounds,f,h);e=this.gl;var S,E,L,C=v;for(A=0;A<3;++A)this.backgroundEnable[A]?C[A]=h[A]:C[A]=0;for(this._background.draw(r,n,i,a,C,this.backgroundColor),this._lines.bind(r,n,i,this),A=0;A<3;++A){var P=[0,0,0];h[A]>0?P[A]=a[1][A]:P[A]=a[0][A];for(var O=0;O<2;++O){var I=(A+1+O)%3,D=(A+1+(1^O))%3;this.gridEnable[I]&&this._lines.drawGrid(I,D,this.bounds,P,this.gridColor[I],this.gridWidth[I]*this.pixelRatio)}for(O=0;O<2;++O)I=(A+1+O)%3,D=(A+1+(1^O))%3,this.zeroEnable[D]&&Math.min(a[0][D],a[1][D])<=0&&Math.max(a[0][D],a[1][D])>=0&&this._lines.drawZero(I,D,this.bounds,P,this.zeroLineColor[D],this.zeroLineWidth[D]*this.pixelRatio)}for(A=0;A<3;++A){this.lineEnable[A]&&this._lines.drawAxisLine(A,this.bounds,M[A].primalOffset,this.lineColor[A],this.lineWidth[A]*this.pixelRatio),this.lineMirror[A]&&this._lines.drawAxisLine(A,this.bounds,M[A].mirrorOffset,this.lineColor[A],this.lineWidth[A]*this.pixelRatio);var z=u(y,M[A].primalMinor),R=u(m,M[A].mirrorMinor),F=this.lineTickLength;for(O=0;O<3;++O){var B=k/r[5*O];z[O]*=F[O]*B,R[O]*=F[O]*B}this.lineTickEnable[A]&&this._lines.drawAxisTicks(A,M[A].primalOffset,z,this.lineTickColor[A],this.lineTickWidth[A]*this.pixelRatio),this.lineTickMirror[A]&&this._lines.drawAxisTicks(A,M[A].mirrorOffset,R,this.lineTickColor[A],this.lineTickWidth[A]*this.pixelRatio)}function N(t){(L=[0,0,0])[t]=1}function j(t,e,r){var n=(t+1)%3,i=(t+2)%3,a=e[n],o=e[i],s=r[n],l=r[i];a>0&&l>0||a>0&&l<0||a<0&&l>0||a<0&&l<0?N(n):(o>0&&s>0||o>0&&s<0||o<0&&s>0||o<0&&s<0)&&N(i)}for(this._lines.unbind(),this._text.bind(r,n,i,this.pixelRatio),A=0;A<3;++A){var U=M[A].primalMinor,V=M[A].mirrorMinor,H=u(x,M[A].primalOffset);for(O=0;O<3;++O)this.lineTickEnable[A]&&(H[O]+=k*U[O]*Math.max(this.lineTickLength[O],0)/r[5*O]);var q=[0,0,0];if(q[A]=1,this.tickEnable[A]){for(-3600===this.tickAngle[A]?(this.tickAngle[A]=0,this.tickAlign[A]="auto"):this.tickAlign[A]=-1,E=1,"auto"===(S=[this.tickAlign[A],.5,E])[0]?S[0]=0:S[0]=parseInt(""+S[0]),L=[0,0,0],j(A,U,V),O=0;O<3;++O)H[O]+=k*U[O]*this.tickPad[O]/r[5*O];this._text.drawTicks(A,this.tickSize[A],this.tickAngle[A],H,this.tickColor[A],q,L,S)}if(this.labelEnable[A]){for(E=0,L=[0,0,0],this.labels[A].length>4&&(N(A),E=1),"auto"===(S=[this.labelAlign[A],.5,E])[0]?S[0]=0:S[0]=parseInt(""+S[0]),O=0;O<3;++O)H[O]+=k*U[O]*this.labelPad[O]/r[5*O];H[A]+=.5*(a[0][A]+a[1][A]),this._text.drawLabel(A,this.labelSize[A],this.labelAngle[A],H,this.labelColor[A],[0,0,0],L,S)}}this._text.unbind()},f.dispose=function(){this._text.dispose(),this._lines.dispose(),this._background.dispose(),this._lines=null,this._text=null,this._background=null,this.gl=null}},1011:function(t,e,r){"use strict";t.exports=function(t){for(var e=[],r=[],s=0,l=0;l<3;++l)for(var u=(l+1)%3,c=(l+2)%3,f=[0,0,0],h=[0,0,0],p=-1;p<=1;p+=2){r.push(s,s+2,s+1,s+1,s+2,s+3),f[l]=p,h[l]=p;for(var d=-1;d<=1;d+=2){f[u]=d;for(var v=-1;v<=1;v+=2)f[c]=v,e.push(f[0],f[1],f[2],h[0],h[1],h[2]),s+=1}var g=u;u=c,c=g}var y=n(t,new Float32Array(e)),m=n(t,new Uint16Array(r),t.ELEMENT_ARRAY_BUFFER),x=i(t,[{buffer:y,type:t.FLOAT,size:3,offset:0,stride:24},{buffer:y,type:t.FLOAT,size:3,offset:12,stride:24}],m),b=a(t);return b.attributes.position.location=0,b.attributes.normal.location=1,new o(t,y,x,b)};var n=r(5827),i=r(2944),a=r(1943).bg;function o(t,e,r,n){this.gl=t,this.buffer=e,this.vao=r,this.shader=n}var s=o.prototype;s.draw=function(t,e,r,n,i,a){for(var o=!1,s=0;s<3;++s)o=o||i[s];if(o){var l=this.gl;l.enable(l.POLYGON_OFFSET_FILL),l.polygonOffset(1,2),this.shader.bind(),this.shader.uniforms={model:t,view:e,projection:r,bounds:n,enable:i,colors:a},this.vao.bind(),this.vao.draw(this.gl.TRIANGLES,36),this.vao.unbind(),l.disable(l.POLYGON_OFFSET_FILL)}},s.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},2864:function(t,e,r){"use strict";t.exports=function(t,e,r,a,p){i(s,e,t),i(s,r,s);for(var m=0,x=0;x<2;++x){c[2]=a[x][2];for(var b=0;b<2;++b){c[1]=a[b][1];for(var _=0;_<2;++_)c[0]=a[_][0],h(l[m],c,s),m+=1}}var w=-1;for(x=0;x<8;++x){for(var T=l[x][3],k=0;k<3;++k)u[x][k]=l[x][k]/T;p&&(u[x][2]*=-1),T<0&&(w<0||u[x][2]<u[w][2])&&(w=x)}if(w<0){w=0;for(var A=0;A<3;++A){for(var M=(A+2)%3,S=(A+1)%3,E=-1,L=-1,C=0;C<2;++C){var P=(I=C<<A)+(C<<M)+(1-C<<S),O=I+(1-C<<M)+(C<<S);o(u[I],u[P],u[O],f)<0||(C?E=1:L=1)}if(E<0||L<0)L>E&&(w|=1<<A);else{for(C=0;C<2;++C){P=(I=C<<A)+(C<<M)+(1-C<<S),O=I+(1-C<<M)+(C<<S);var I,D=d([l[I],l[P],l[O],l[I+(1<<M)+(1<<S)]]);C?E=D:L=D}L>E&&(w|=1<<A)}}}var z=7^w,R=-1;for(x=0;x<8;++x)x!==w&&x!==z&&(R<0||u[R][1]>u[x][1])&&(R=x);var F=-1;for(x=0;x<3;++x)(N=R^1<<x)!==w&&N!==z&&(F<0&&(F=N),(S=u[N])[0]<u[F][0]&&(F=N));var B=-1;for(x=0;x<3;++x){var N;(N=R^1<<x)!==w&&N!==z&&N!==F&&(B<0&&(B=N),(S=u[N])[0]>u[B][0]&&(B=N))}var j=v;j[0]=j[1]=j[2]=0,j[n.log2(F^R)]=R&F,j[n.log2(R^B)]=R&B;var U=7^B;U===w||U===z?(U=7^F,j[n.log2(B^U)]=U&B):j[n.log2(F^U)]=U&F;var V=g,H=w;for(A=0;A<3;++A)V[A]=H&1<<A?-1:1;return y};var n=r(2288),i=r(104),a=r(4670),o=r(417),s=new Array(16),l=new Array(8),u=new Array(8),c=new Array(3),f=[0,0,0];function h(t,e,r){for(var n=0;n<4;++n){t[n]=r[12+n];for(var i=0;i<3;++i)t[n]+=e[i]*r[4*i+n]}}!function(){for(var t=0;t<8;++t)l[t]=[1,1,1,1],u[t]=[1,1,1]}();var p=[[0,0,1,0,0],[0,0,-1,1,0],[0,-1,0,1,0],[0,1,0,1,0],[-1,0,0,1,0],[1,0,0,1,0]];function d(t){for(var e=0;e<p.length;++e)if((t=a.positive(t,p[e])).length<3)return 0;var r=t[0],n=r[0]/r[3],i=r[1]/r[3],o=0;for(e=1;e+1<t.length;++e){var s=t[e],l=t[e+1],u=s[0]/s[3]-n,c=s[1]/s[3]-i,f=l[0]/l[3]-n,h=l[1]/l[3]-i;o+=Math.abs(u*h-c*f)}return o}var v=[1,1,1],g=[0,0,0],y={cubeEdges:v,axis:g}},1681:function(t,e,r){"use strict";t.exports=function(t,e,r){var o=[],s=[0,0,0],l=[0,0,0],u=[0,0,0],c=[0,0,0];o.push(0,0,1,0,1,1,0,0,-1,0,0,-1,0,1,1,0,1,-1);for(var f=0;f<3;++f){for(var h=o.length/3|0,d=0;d<r[f].length;++d){var v=+r[f][d].x;o.push(v,0,1,v,1,1,v,0,-1,v,0,-1,v,1,1,v,1,-1)}var g=o.length/3|0;s[f]=h,l[f]=g-h,h=o.length/3|0;for(var y=0;y<r[f].length;++y)v=+r[f][y].x,o.push(v,0,1,v,1,1,v,0,-1,v,0,-1,v,1,1,v,1,-1);g=o.length/3|0,u[f]=h,c[f]=g-h}var m=n(t,new Float32Array(o)),x=i(t,[{buffer:m,type:t.FLOAT,size:3,stride:0,offset:0}]),b=a(t);return b.attributes.position.location=0,new p(t,m,x,b,l,s,c,u)};var n=r(5827),i=r(2944),a=r(1943).j,o=[0,0,0],s=[0,0,0],l=[0,0,0],u=[0,0,0],c=[1,1];function f(t){return t[0]=t[1]=t[2]=0,t}function h(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function p(t,e,r,n,i,a,o,s){this.gl=t,this.vertBuffer=e,this.vao=r,this.shader=n,this.tickCount=i,this.tickOffset=a,this.gridCount=o,this.gridOffset=s}var d=p.prototype;d.bind=function(t,e,r){this.shader.bind(),this.shader.uniforms.model=t,this.shader.uniforms.view=e,this.shader.uniforms.projection=r,c[0]=this.gl.drawingBufferWidth,c[1]=this.gl.drawingBufferHeight,this.shader.uniforms.screenShape=c,this.vao.bind()},d.unbind=function(){this.vao.unbind()},d.drawAxisLine=function(t,e,r,n,i){var a=f(s);this.shader.uniforms.majorAxis=s,a[t]=e[1][t]-e[0][t],this.shader.uniforms.minorAxis=a;var o,c=h(u,r);c[t]+=e[0][t],this.shader.uniforms.offset=c,this.shader.uniforms.lineWidth=i,this.shader.uniforms.color=n,(o=f(l))[(t+2)%3]=1,this.shader.uniforms.screenAxis=o,this.vao.draw(this.gl.TRIANGLES,6),(o=f(l))[(t+1)%3]=1,this.shader.uniforms.screenAxis=o,this.vao.draw(this.gl.TRIANGLES,6)},d.drawAxisTicks=function(t,e,r,n,i){if(this.tickCount[t]){var a=f(o);a[t]=1,this.shader.uniforms.majorAxis=a,this.shader.uniforms.offset=e,this.shader.uniforms.minorAxis=r,this.shader.uniforms.color=n,this.shader.uniforms.lineWidth=i;var s=f(l);s[t]=1,this.shader.uniforms.screenAxis=s,this.vao.draw(this.gl.TRIANGLES,this.tickCount[t],this.tickOffset[t])}},d.drawGrid=function(t,e,r,n,i,a){if(this.gridCount[t]){var c=f(s);c[e]=r[1][e]-r[0][e],this.shader.uniforms.minorAxis=c;var p=h(u,n);p[e]+=r[0][e],this.shader.uniforms.offset=p;var d=f(o);d[t]=1,this.shader.uniforms.majorAxis=d;var v=f(l);v[t]=1,this.shader.uniforms.screenAxis=v,this.shader.uniforms.lineWidth=a,this.shader.uniforms.color=i,this.vao.draw(this.gl.TRIANGLES,this.gridCount[t],this.gridOffset[t])}},d.drawZero=function(t,e,r,n,i,a){var o=f(s);this.shader.uniforms.majorAxis=o,o[t]=r[1][t]-r[0][t],this.shader.uniforms.minorAxis=o;var c=h(u,n);c[t]+=r[0][t],this.shader.uniforms.offset=c;var p=f(l);p[e]=1,this.shader.uniforms.screenAxis=p,this.shader.uniforms.lineWidth=a,this.shader.uniforms.color=i,this.vao.draw(this.gl.TRIANGLES,6)},d.dispose=function(){this.vao.dispose(),this.vertBuffer.dispose(),this.shader.dispose()}},1943:function(t,e,r){"use strict";var n=r(6832),i=r(5158),a=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position;\n\nuniform mat4 model, view, projection;\nuniform vec3 offset, majorAxis, minorAxis, screenAxis;\nuniform float lineWidth;\nuniform vec2 screenShape;\n\nvec3 project(vec3 p) {\n  vec4 pp = projection * view * model * vec4(p, 1.0);\n  return pp.xyz / max(pp.w, 0.0001);\n}\n\nvoid main() {\n  vec3 major = position.x * majorAxis;\n  vec3 minor = position.y * minorAxis;\n\n  vec3 vPosition = major + minor + offset;\n  vec3 pPosition = project(vPosition);\n  vec3 offset = project(vPosition + screenAxis * position.z);\n\n  vec2 screen = normalize((offset - pPosition).xy * screenShape) / screenShape;\n\n  gl_Position = vec4(pPosition + vec3(0.5 * screen * lineWidth, 0), 1.0);\n}\n"]),o=n(["precision highp float;\n#define GLSLIFY 1\n\nuniform vec4 color;\nvoid main() {\n  gl_FragColor = color;\n}"]);e.j=function(t){return i(t,a,o,null,[{name:"position",type:"vec3"}])};var s=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position;\n\nuniform mat4 model, view, projection;\nuniform vec3 offset, axis, alignDir, alignOpt;\nuniform float scale, angle, pixelScale;\nuniform vec2 resolution;\n\nvec3 project(vec3 p) {\n  vec4 pp = projection * view * model * vec4(p, 1.0);\n  return pp.xyz / max(pp.w, 0.0001);\n}\n\nfloat computeViewAngle(vec3 a, vec3 b) {\n  vec3 A = project(a);\n  vec3 B = project(b);\n\n  return atan(\n    (B.y - A.y) * resolution.y,\n    (B.x - A.x) * resolution.x\n  );\n}\n\nconst float PI = 3.141592;\nconst float TWO_PI = 2.0 * PI;\nconst float HALF_PI = 0.5 * PI;\nconst float ONE_AND_HALF_PI = 1.5 * PI;\n\nint option = int(floor(alignOpt.x + 0.001));\nfloat hv_ratio =       alignOpt.y;\nbool enableAlign =    (alignOpt.z != 0.0);\n\nfloat mod_angle(float a) {\n  return mod(a, PI);\n}\n\nfloat positive_angle(float a) {\n  return mod_angle((a < 0.0) ?\n    a + TWO_PI :\n    a\n  );\n}\n\nfloat look_upwards(float a) {\n  float b = positive_angle(a);\n  return ((b > HALF_PI) && (b <= ONE_AND_HALF_PI)) ?\n    b - PI :\n    b;\n}\n\nfloat look_horizontal_or_vertical(float a, float ratio) {\n  // ratio controls the ratio between being horizontal to (vertical + horizontal)\n  // if ratio is set to 0.5 then it is 50%, 50%.\n  // when using a higher ratio e.g. 0.75 the result would\n  // likely be more horizontal than vertical.\n\n  float b = positive_angle(a);\n\n  return\n    (b < (      ratio) * HALF_PI) ? 0.0 :\n    (b < (2.0 - ratio) * HALF_PI) ? -HALF_PI :\n    (b < (2.0 + ratio) * HALF_PI) ? 0.0 :\n    (b < (4.0 - ratio) * HALF_PI) ? HALF_PI :\n                                    0.0;\n}\n\nfloat roundTo(float a, float b) {\n  return float(b * floor((a + 0.5 * b) / b));\n}\n\nfloat look_round_n_directions(float a, int n) {\n  float b = positive_angle(a);\n  float div = TWO_PI / float(n);\n  float c = roundTo(b, div);\n  return look_upwards(c);\n}\n\nfloat applyAlignOption(float rawAngle, float delta) {\n  return\n    (option >  2) ? look_round_n_directions(rawAngle + delta, option) :       // option 3-n: round to n directions\n    (option == 2) ? look_horizontal_or_vertical(rawAngle + delta, hv_ratio) : // horizontal or vertical\n    (option == 1) ? rawAngle + delta :       // use free angle, and flip to align with one direction of the axis\n    (option == 0) ? look_upwards(rawAngle) : // use free angle, and stay upwards\n    (option ==-1) ? 0.0 :                    // useful for backward compatibility, all texts remains horizontal\n                    rawAngle;                // otherwise return back raw input angle\n}\n\nbool isAxisTitle = (axis.x == 0.0) &&\n                   (axis.y == 0.0) &&\n                   (axis.z == 0.0);\n\nvoid main() {\n  //Compute world offset\n  float axisDistance = position.z;\n  vec3 dataPosition = axisDistance * axis + offset;\n\n  float beta = angle; // i.e. user defined attributes for each tick\n\n  float axisAngle;\n  float clipAngle;\n  float flip;\n\n  if (enableAlign) {\n    axisAngle = (isAxisTitle) ? HALF_PI :\n                      computeViewAngle(dataPosition, dataPosition + axis);\n    clipAngle = computeViewAngle(dataPosition, dataPosition + alignDir);\n\n    axisAngle += (sin(axisAngle) < 0.0) ? PI : 0.0;\n    clipAngle += (sin(clipAngle) < 0.0) ? PI : 0.0;\n\n    flip = (dot(vec2(cos(axisAngle), sin(axisAngle)),\n                vec2(sin(clipAngle),-cos(clipAngle))) > 0.0) ? 1.0 : 0.0;\n\n    beta += applyAlignOption(clipAngle, flip * PI);\n  }\n\n  //Compute plane offset\n  vec2 planeCoord = position.xy * pixelScale;\n\n  mat2 planeXform = scale * mat2(\n     cos(beta), sin(beta),\n    -sin(beta), cos(beta)\n  );\n\n  vec2 viewOffset = 2.0 * planeXform * planeCoord / resolution;\n\n  //Compute clip position\n  vec3 clipPosition = project(dataPosition);\n\n  //Apply text offset in clip coordinates\n  clipPosition += vec3(viewOffset, 0.0);\n\n  //Done\n  gl_Position = vec4(clipPosition, 1.0);\n}"]),l=n(["precision highp float;\n#define GLSLIFY 1\n\nuniform vec4 color;\nvoid main() {\n  gl_FragColor = color;\n}"]);e.f=function(t){return i(t,s,l,null,[{name:"position",type:"vec3"}])};var u=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position;\nattribute vec3 normal;\n\nuniform mat4 model, view, projection;\nuniform vec3 enable;\nuniform vec3 bounds[2];\n\nvarying vec3 colorChannel;\n\nvoid main() {\n\n  vec3 signAxis = sign(bounds[1] - bounds[0]);\n\n  vec3 realNormal = signAxis * normal;\n\n  if(dot(realNormal, enable) > 0.0) {\n    vec3 minRange = min(bounds[0], bounds[1]);\n    vec3 maxRange = max(bounds[0], bounds[1]);\n    vec3 nPosition = mix(minRange, maxRange, 0.5 * (position + 1.0));\n    gl_Position = projection * view * model * vec4(nPosition, 1.0);\n  } else {\n    gl_Position = vec4(0,0,0,0);\n  }\n\n  colorChannel = abs(realNormal);\n}"]),c=n(["precision highp float;\n#define GLSLIFY 1\n\nuniform vec4 colors[3];\n\nvarying vec3 colorChannel;\n\nvoid main() {\n  gl_FragColor = colorChannel.x * colors[0] +\n                 colorChannel.y * colors[1] +\n                 colorChannel.z * colors[2];\n}"]);e.bg=function(t){return i(t,u,c,null,[{name:"position",type:"vec3"},{name:"normal",type:"vec3"}])}},9557:function(t,e,r){"use strict";t.exports=function(t,e,r,i,o,l){var u=n(t),f=a(t,[{buffer:u,size:3}]),h=s(t);h.attributes.position.location=0;var p=new c(t,h,u,f);return p.update(e,r,i,o,l),p};var n=r(5827),a=r(2944),o=r(875),s=r(1943).f,l=window||i.global||{},u=l.__TEXT_CACHE||{};function c(t,e,r,n){this.gl=t,this.shader=e,this.buffer=r,this.vao=n,this.tickOffset=this.tickCount=this.labelOffset=this.labelCount=null}l.__TEXT_CACHE={};var f=c.prototype,h=[0,0];f.bind=function(t,e,r,n){this.vao.bind(),this.shader.bind();var i=this.shader.uniforms;i.model=t,i.view=e,i.projection=r,i.pixelScale=n,h[0]=this.gl.drawingBufferWidth,h[1]=this.gl.drawingBufferHeight,this.shader.uniforms.resolution=h},f.unbind=function(){this.vao.unbind()},f.update=function(t,e,r,n,i){var a=[];function s(t,e,r,n,i,s){var l=u[r];l||(l=u[r]={});var c=l[e];c||(c=l[e]=function(t,e){try{return o(t,e)}catch(e){return console.warn('error vectorizing text:"'+t+'" error:',e),{cells:[],positions:[]}}}(e,{triangles:!0,font:r,textAlign:"center",textBaseline:"middle",lineSpacing:i,styletags:s}));for(var f=(n||12)/12,h=c.positions,p=c.cells,d=0,v=p.length;d<v;++d)for(var g=p[d],y=2;y>=0;--y){var m=h[g[y]];a.push(f*m[0],-f*m[1],t)}}for(var l=[0,0,0],c=[0,0,0],f=[0,0,0],h=[0,0,0],p={breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},d=0;d<3;++d){f[d]=a.length/3|0,s(.5*(t[0][d]+t[1][d]),e[d],r[d],12,1.25,p),h[d]=(a.length/3|0)-f[d],l[d]=a.length/3|0;for(var v=0;v<n[d].length;++v)n[d][v].text&&s(n[d][v].x,n[d][v].text,n[d][v].font||i,n[d][v].fontSize||12,1.25,p);c[d]=(a.length/3|0)-l[d]}this.buffer.update(a),this.tickOffset=l,this.tickCount=c,this.labelOffset=f,this.labelCount=h},f.drawTicks=function(t,e,r,n,i,a,o,s){this.tickCount[t]&&(this.shader.uniforms.axis=a,this.shader.uniforms.color=i,this.shader.uniforms.angle=r,this.shader.uniforms.scale=e,this.shader.uniforms.offset=n,this.shader.uniforms.alignDir=o,this.shader.uniforms.alignOpt=s,this.vao.draw(this.gl.TRIANGLES,this.tickCount[t],this.tickOffset[t]))},f.drawLabel=function(t,e,r,n,i,a,o,s){this.labelCount[t]&&(this.shader.uniforms.axis=a,this.shader.uniforms.color=i,this.shader.uniforms.angle=r,this.shader.uniforms.scale=e,this.shader.uniforms.offset=n,this.shader.uniforms.alignDir=o,this.shader.uniforms.alignOpt=s,this.vao.draw(this.gl.TRIANGLES,this.labelCount[t],this.labelOffset[t]))},f.dispose=function(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()}},8468:function(t,e){"use strict";function r(t,e){var r=t+"",n=r.indexOf("."),i=0;n>=0&&(i=r.length-n-1);var a=Math.pow(10,i),o=Math.round(t*e*a),s=o+"";if(s.indexOf("e")>=0)return s;var l=o/a,u=o%a;o<0?(l=0|-Math.ceil(l),u=0|-u):(l=0|Math.floor(l),u|=0);var c=""+l;if(o<0&&(c="-"+c),i){for(var f=""+u;f.length<i;)f="0"+f;return c+"."+f}return c}e.create=function(t,e){for(var n=[],i=0;i<3;++i){for(var a=[],o=(t[0][i],t[1][i],0);o*e[i]<=t[1][i];++o)a.push({x:o*e[i],text:r(e[i],o)});for(o=-1;o*e[i]>=t[0][i];--o)a.push({x:o*e[i],text:r(e[i],o)});n.push(a)}return n},e.equal=function(t,e){for(var r=0;r<3;++r){if(t[r].length!==e[r].length)return!1;for(var n=0;n<t[r].length;++n){var i=t[r][n],a=e[r][n];if(i.x!==a.x||i.text!==a.text||i.font!==a.font||i.fontColor!==a.fontColor||i.fontSize!==a.fontSize||i.dx!==a.dx||i.dy!==a.dy)return!1}}return!0}},2771:function(t,e,r){"use strict";t.exports=function(t,e,r,l,f){var h=e.model||u,p=e.view||u,y=e.projection||u,m=e._ortho||!1,x=t.bounds,b=(f=f||a(h,p,y,x,m)).axis;o(c,p,h),o(c,y,c);for(var _=v,w=0;w<3;++w)_[w].lo=1/0,_[w].hi=-1/0,_[w].pixelsPerDataUnit=1/0;var T=n(s(c,c));s(c,c);for(var k=0;k<3;++k){var A=(k+1)%3,M=(k+2)%3,S=g;t:for(w=0;w<2;++w){var E=[];if(b[k]<0!=!!w){S[k]=x[w][k];for(var L=0;L<2;++L){S[A]=x[L^w][A];for(var C=0;C<2;++C)S[M]=x[C^L^w][M],E.push(S.slice())}var P=m?5:4;for(L=P;L===P;++L){if(0===E.length)continue t;E=i.positive(E,T[L])}for(L=0;L<E.length;++L){M=E[L];var O=d(g,c,M,r,l);for(C=0;C<3;++C)_[C].lo=Math.min(_[C].lo,M[C]),_[C].hi=Math.max(_[C].hi,M[C]),C!==k&&(_[C].pixelsPerDataUnit=Math.min(_[C].pixelsPerDataUnit,Math.abs(O[C])))}}}}return _};var n=r(5795),i=r(4670),a=r(2864),o=r(104),s=r(2142),l=r(6342),u=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),c=new Float32Array(16);function f(t,e,r){this.lo=t,this.hi=e,this.pixelsPerDataUnit=r}var h=[0,0,0,1],p=[0,0,0,1];function d(t,e,r,n,i){for(var a=0;a<3;++a){for(var o=h,s=p,u=0;u<3;++u)s[u]=o[u]=r[u];s[3]=o[3]=1,s[a]+=1,l(s,s,e),s[3]<0&&(t[a]=1/0),o[a]-=1,l(o,o,e),o[3]<0&&(t[a]=1/0);var c=(o[0]/o[3]-s[0]/s[3])*n,f=(o[1]/o[3]-s[1]/s[3])*i;t[a]=.25*Math.sqrt(c*c+f*f)}return t}var v=[new f(1/0,-1/0,1/0),new f(1/0,-1/0,1/0),new f(1/0,-1/0,1/0)],g=[0,0,0]},5827:function(t,e,r){"use strict";var n=r(5306),i=r(7498),a=r(5050),o=["uint8","uint8_clamped","uint16","uint32","int8","int16","int32","float32"];function s(t,e,r,n,i){this.gl=t,this.type=e,this.handle=r,this.length=n,this.usage=i}var l=s.prototype;function u(t,e,r,n,i,a){var o=i.length*i.BYTES_PER_ELEMENT;if(a<0)return t.bufferData(e,i,n),o;if(o+a>r)throw new Error("gl-buffer: If resizing buffer, must not specify offset");return t.bufferSubData(e,a,i),r}function c(t,e){for(var r=n.malloc(t.length,e),i=t.length,a=0;a<i;++a)r[a]=t[a];return r}l.bind=function(){this.gl.bindBuffer(this.type,this.handle)},l.unbind=function(){this.gl.bindBuffer(this.type,null)},l.dispose=function(){this.gl.deleteBuffer(this.handle)},l.update=function(t,e){if("number"!=typeof e&&(e=-1),this.bind(),"object"==typeof t&&void 0!==t.shape){var r=t.dtype;if(o.indexOf(r)<0&&(r="float32"),this.type===this.gl.ELEMENT_ARRAY_BUFFER&&(r=gl.getExtension("OES_element_index_uint")&&"uint16"!==r?"uint32":"uint16"),r===t.dtype&&function(t,e){for(var r=1,n=e.length-1;n>=0;--n){if(e[n]!==r)return!1;r*=t[n]}return!0}(t.shape,t.stride))0===t.offset&&t.data.length===t.shape[0]?this.length=u(this.gl,this.type,this.length,this.usage,t.data,e):this.length=u(this.gl,this.type,this.length,this.usage,t.data.subarray(t.offset,t.shape[0]),e);else{var s=n.malloc(t.size,r),l=a(s,t.shape);i.assign(l,t),this.length=u(this.gl,this.type,this.length,this.usage,e<0?s:s.subarray(0,t.size),e),n.free(s)}}else if(Array.isArray(t)){var f;f=this.type===this.gl.ELEMENT_ARRAY_BUFFER?c(t,"uint16"):c(t,"float32"),this.length=u(this.gl,this.type,this.length,this.usage,e<0?f:f.subarray(0,t.length),e),n.free(f)}else if("object"==typeof t&&"number"==typeof t.length)this.length=u(this.gl,this.type,this.length,this.usage,t,e);else{if("number"!=typeof t&&void 0!==t)throw new Error("gl-buffer: Invalid data type");if(e>=0)throw new Error("gl-buffer: Cannot specify offset when resizing buffer");(t|=0)<=0&&(t=1),this.gl.bufferData(this.type,0|t,this.usage),this.length=t}},t.exports=function(t,e,r,n){if(r=r||t.ARRAY_BUFFER,n=n||t.DYNAMIC_DRAW,r!==t.ARRAY_BUFFER&&r!==t.ELEMENT_ARRAY_BUFFER)throw new Error("gl-buffer: Invalid type for webgl buffer, must be either gl.ARRAY_BUFFER or gl.ELEMENT_ARRAY_BUFFER");if(n!==t.DYNAMIC_DRAW&&n!==t.STATIC_DRAW&&n!==t.STREAM_DRAW)throw new Error("gl-buffer: Invalid usage for buffer, must be either gl.DYNAMIC_DRAW, gl.STATIC_DRAW or gl.STREAM_DRAW");var i=t.createBuffer(),a=new s(t,r,i,0,n);return a.update(e),a}},1140:function(t,e,r){"use strict";var n=r(2858);t.exports=function(t,e){var r=t.positions,i=t.vectors,a={positions:[],vertexIntensity:[],vertexIntensityBounds:t.vertexIntensityBounds,vectors:[],cells:[],coneOffset:t.coneOffset,colormap:t.colormap};if(0===t.positions.length)return e&&(e[0]=[0,0,0],e[1]=[0,0,0]),a;for(var o=0,s=1/0,l=-1/0,u=1/0,c=-1/0,f=1/0,h=-1/0,p=null,d=null,v=[],g=1/0,y=!1,m=0;m<r.length;m++){var x=r[m];s=Math.min(x[0],s),l=Math.max(x[0],l),u=Math.min(x[1],u),c=Math.max(x[1],c),f=Math.min(x[2],f),h=Math.max(x[2],h);var b=i[m];if(n.length(b)>o&&(o=n.length(b)),m){var _=2*n.distance(p,x)/(n.length(d)+n.length(b));_?(g=Math.min(g,_),y=!1):y=!0}y||(p=x,d=b),v.push(b)}var w=[s,u,f],T=[l,c,h];e&&(e[0]=w,e[1]=T),0===o&&(o=1);var k=1/o;isFinite(g)||(g=1),a.vectorScale=g;var A=t.coneSize||.5;t.absoluteConeSize&&(A=t.absoluteConeSize*k),a.coneScale=A,m=0;for(var M=0;m<r.length;m++)for(var S=(x=r[m])[0],E=x[1],L=x[2],C=v[m],P=n.length(C)*k,O=0;O<8;O++){a.positions.push([S,E,L,M++]),a.positions.push([S,E,L,M++]),a.positions.push([S,E,L,M++]),a.positions.push([S,E,L,M++]),a.positions.push([S,E,L,M++]),a.positions.push([S,E,L,M++]),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vertexIntensity.push(P,P,P),a.vertexIntensity.push(P,P,P);var I=a.positions.length;a.cells.push([I-6,I-5,I-4],[I-3,I-2,I-1])}return a};var i=r(7234);t.exports.createMesh=r(5028),t.exports.createConeMesh=function(e,r){return t.exports.createMesh(e,r,{shaders:i,traceType:"cone"})}},5028:function(t,e,r){"use strict";var n=r(5158),i=r(5827),a=r(2944),o=r(8931),s=r(104),l=r(7437),u=r(5050),c=r(9156),f=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function h(t,e,r,n,i,a,o,s,l,u,c){this.gl=t,this.pixelRatio=1,this.cells=[],this.positions=[],this.intensity=[],this.texture=e,this.dirty=!0,this.triShader=r,this.pickShader=n,this.trianglePositions=i,this.triangleVectors=a,this.triangleColors=s,this.triangleUVs=l,this.triangleIds=o,this.triangleVAO=u,this.triangleCount=0,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this.traceType=c,this.tubeScale=1,this.coneScale=2,this.vectorScale=1,this.coneOffset=.25,this._model=f,this._view=f,this._projection=f,this._resolution=[1,1]}var p=h.prototype;p.isOpaque=function(){return this.opacity>=1},p.isTransparent=function(){return this.opacity<1},p.pickSlots=1,p.setPickBase=function(t){this.pickId=t},p.update=function(t){t=t||{};var e=this.gl;this.dirty=!0,"lightPosition"in t&&(this.lightPosition=t.lightPosition),"opacity"in t&&(this.opacity=t.opacity),"ambient"in t&&(this.ambientLight=t.ambient),"diffuse"in t&&(this.diffuseLight=t.diffuse),"specular"in t&&(this.specularLight=t.specular),"roughness"in t&&(this.roughness=t.roughness),"fresnel"in t&&(this.fresnel=t.fresnel),void 0!==t.tubeScale&&(this.tubeScale=t.tubeScale),void 0!==t.vectorScale&&(this.vectorScale=t.vectorScale),void 0!==t.coneScale&&(this.coneScale=t.coneScale),void 0!==t.coneOffset&&(this.coneOffset=t.coneOffset),t.colormap&&(this.texture.shape=[256,256],this.texture.minFilter=e.LINEAR_MIPMAP_LINEAR,this.texture.magFilter=e.LINEAR,this.texture.setPixels(function(t){for(var e=c({colormap:t,nshades:256,format:"rgba"}),r=new Uint8Array(1024),n=0;n<256;++n){for(var i=e[n],a=0;a<3;++a)r[4*n+a]=i[a];r[4*n+3]=255*i[3]}return u(r,[256,256,4],[4,0,1])}(t.colormap)),this.texture.generateMipmap());var r=t.cells,n=t.positions,i=t.vectors;if(n&&r&&i){var a=[],o=[],s=[],l=[],f=[];this.cells=r,this.positions=n,this.vectors=i;var h=t.meshColor||[1,1,1,1],p=t.vertexIntensity,d=1/0,v=-1/0;if(p)if(t.vertexIntensityBounds)d=+t.vertexIntensityBounds[0],v=+t.vertexIntensityBounds[1];else for(var g=0;g<p.length;++g){var y=p[g];d=Math.min(d,y),v=Math.max(v,y)}else for(g=0;g<n.length;++g)y=n[g][2],d=Math.min(d,y),v=Math.max(v,y);for(this.intensity=p||function(t){for(var e=t.length,r=new Array(e),n=0;n<e;++n)r[n]=t[n][2];return r}(n),this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],g=0;g<n.length;++g)for(var m=n[g],x=0;x<3;++x)!isNaN(m[x])&&isFinite(m[x])&&(this.bounds[0][x]=Math.min(this.bounds[0][x],m[x]),this.bounds[1][x]=Math.max(this.bounds[1][x],m[x]));var b=0;t:for(g=0;g<r.length;++g){var _=r[g];if(3===_.length){for(x=0;x<3;++x){m=n[T=_[x]];for(var w=0;w<3;++w)if(isNaN(m[w])||!isFinite(m[w]))continue t}for(x=0;x<3;++x){var T;m=n[T=_[2-x]],a.push(m[0],m[1],m[2],m[3]);var k=i[T];o.push(k[0],k[1],k[2],k[3]||0);var A,M=h;3===M.length?s.push(M[0],M[1],M[2],1):s.push(M[0],M[1],M[2],M[3]),A=p?[(p[T]-d)/(v-d),0]:[(m[2]-d)/(v-d),0],l.push(A[0],A[1]),f.push(g)}b+=1}}this.triangleCount=b,this.trianglePositions.update(a),this.triangleVectors.update(o),this.triangleColors.update(s),this.triangleUVs.update(l),this.triangleIds.update(new Uint32Array(f))}},p.drawTransparent=p.draw=function(t){t=t||{};for(var e=this.gl,r=t.model||f,n=t.view||f,i=t.projection||f,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);var u={model:r,view:n,projection:i,inverseModel:f.slice(),clipBounds:a,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],opacity:this.opacity,tubeScale:this.tubeScale,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,texture:0};u.inverseModel=l(u.inverseModel,u.model),e.disable(e.CULL_FACE),this.texture.bind(0);var c=new Array(16);for(s(c,u.view,u.model),s(c,u.projection,c),l(c,c),o=0;o<3;++o)u.eyePosition[o]=c[12+o]/c[15];var h=c[15];for(o=0;o<3;++o)h+=this.lightPosition[o]*c[4*o+3];for(o=0;o<3;++o){for(var p=c[12+o],d=0;d<3;++d)p+=c[4*d+o]*this.lightPosition[d];u.lightPosition[o]=p/h}if(this.triangleCount>0){var v=this.triShader;v.bind(),v.uniforms=u,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()}},p.drawPick=function(t){t=t||{};for(var e=this.gl,r=t.model||f,n=t.view||f,i=t.projection||f,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);this._model=[].slice.call(r),this._view=[].slice.call(n),this._projection=[].slice.call(i),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s={model:r,view:n,projection:i,clipBounds:a,tubeScale:this.tubeScale,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,pickId:this.pickId/255},l=this.pickShader;l.bind(),l.uniforms=s,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind())},p.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=t.value[0]+256*t.value[1]+65536*t.value[2],r=this.cells[e],n=this.positions[r[1]].slice(0,3),i={position:n,dataCoordinate:n,index:Math.floor(r[1]/48)};return"cone"===this.traceType?i.index=Math.floor(r[1]/48):"streamtube"===this.traceType&&(i.intensity=this.intensity[r[1]],i.velocity=this.vectors[r[1]].slice(0,3),i.divergence=this.vectors[r[1]][3],i.index=e),i},p.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.pickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleVectors.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleIds.dispose()},t.exports=function(t,e,r){var s=r.shaders;1===arguments.length&&(t=(e=t).gl);var l=function(t,e){var r=n(t,e.meshShader.vertex,e.meshShader.fragment,null,e.meshShader.attributes);return r.attributes.position.location=0,r.attributes.color.location=2,r.attributes.uv.location=3,r.attributes.vector.location=4,r}(t,s),c=function(t,e){var r=n(t,e.pickShader.vertex,e.pickShader.fragment,null,e.pickShader.attributes);return r.attributes.position.location=0,r.attributes.id.location=1,r.attributes.vector.location=4,r}(t,s),f=o(t,u(new Uint8Array([255,255,255,255]),[1,1,4]));f.generateMipmap(),f.minFilter=t.LINEAR_MIPMAP_LINEAR,f.magFilter=t.LINEAR;var p=i(t),d=i(t),v=i(t),g=i(t),y=i(t),m=new h(t,f,l,c,p,d,y,v,g,a(t,[{buffer:p,type:t.FLOAT,size:4},{buffer:y,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:v,type:t.FLOAT,size:4},{buffer:g,type:t.FLOAT,size:2},{buffer:d,type:t.FLOAT,size:4}]),r.traceType||"cone");return m.update(e),m}},7234:function(t,e,r){var n=r(6832),i=n(["precision highp float;\n\nprecision highp float;\n#define GLSLIFY 1\n\nvec3 getOrthogonalVector(vec3 v) {\n  // Return up-vector for only-z vector.\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\n  // Assign z = 0, x = -b, y = a:\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\n    return normalize(vec3(-v.y, v.x, 0.0));\n  } else {\n    return normalize(vec3(0.0, v.z, -v.y));\n  }\n}\n\n// Calculate the cone vertex and normal at the given index.\n//\n// The returned vertex is for a cone with its top at origin and height of 1.0,\n// pointing in the direction of the vector attribute.\n//\n// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.\n// These vertices are used to make up the triangles of the cone by the following:\n//   segment + 0 top vertex\n//   segment + 1 perimeter vertex a+1\n//   segment + 2 perimeter vertex a\n//   segment + 3 center base vertex\n//   segment + 4 perimeter vertex a\n//   segment + 5 perimeter vertex a+1\n// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.\n// To go from index to segment, floor(index / 6)\n// To go from segment to angle, 2*pi * (segment/segmentCount)\n// To go from index to segment index, index - (segment*6)\n//\nvec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {\n\n  const float segmentCount = 8.0;\n\n  float index = rawIndex - floor(rawIndex /\n    (segmentCount * 6.0)) *\n    (segmentCount * 6.0);\n\n  float segment = floor(0.001 + index/6.0);\n  float segmentIndex = index - (segment*6.0);\n\n  normal = -normalize(d);\n\n  if (segmentIndex > 2.99 && segmentIndex < 3.01) {\n    return mix(vec3(0.0), -d, coneOffset);\n  }\n\n  float nextAngle = (\n    (segmentIndex > 0.99 &&  segmentIndex < 1.01) ||\n    (segmentIndex > 4.99 &&  segmentIndex < 5.01)\n  ) ? 1.0 : 0.0;\n  float angle = 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);\n\n  vec3 v1 = mix(d, vec3(0.0), coneOffset);\n  vec3 v2 = v1 - d;\n\n  vec3 u = getOrthogonalVector(d);\n  vec3 v = normalize(cross(u, d));\n\n  vec3 x = u * cos(angle) * length(d)*0.25;\n  vec3 y = v * sin(angle) * length(d)*0.25;\n  vec3 v3 = v2 + x + y;\n  if (segmentIndex < 3.0) {\n    vec3 tx = u * sin(angle);\n    vec3 ty = v * -cos(angle);\n    vec3 tangent = tx + ty;\n    normal = normalize(cross(v3 - v1, tangent));\n  }\n\n  if (segmentIndex == 0.0) {\n    return mix(d, vec3(0.0), coneOffset);\n  }\n  return v3;\n}\n\nattribute vec3 vector;\nattribute vec4 color, position;\nattribute vec2 uv;\n\nuniform float vectorScale, coneScale, coneOffset;\nuniform mat4 model, view, projection, inverseModel;\nuniform vec3 eyePosition, lightPosition;\n\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n  // Scale the vector magnitude to stay constant with\n  // model & view changes.\n  vec3 normal;\n  vec3 XYZ = getConePosition(mat3(model) * ((vectorScale * coneScale) * vector), position.w, coneOffset, normal);\n  vec4 conePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\n\n  //Lighting geometry parameters\n  vec4 cameraCoordinate = view * conePosition;\n  cameraCoordinate.xyz /= cameraCoordinate.w;\n  f_lightDirection = lightPosition - cameraCoordinate.xyz;\n  f_eyeDirection   = eyePosition - cameraCoordinate.xyz;\n  f_normal = normalize((vec4(normal, 0.0) * inverseModel).xyz);\n\n  // vec4 m_position  = model * vec4(conePosition, 1.0);\n  vec4 t_position  = view * conePosition;\n  gl_Position      = projection * t_position;\n\n  f_color          = color;\n  f_data           = conePosition.xyz;\n  f_position       = position.xyz;\n  f_uv             = uv;\n}\n"]),a=n(["#extension GL_OES_standard_derivatives : enable\n\nprecision highp float;\n#define GLSLIFY 1\n\nfloat beckmannDistribution(float x, float roughness) {\n  float NdotH = max(x, 0.0001);\n  float cos2Alpha = NdotH * NdotH;\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\n  float roughness2 = roughness * roughness;\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\n  return exp(tan2Alpha / roughness2) / denom;\n}\n\nfloat cookTorranceSpecular(\n  vec3 lightDirection,\n  vec3 viewDirection,\n  vec3 surfaceNormal,\n  float roughness,\n  float fresnel) {\n\n  float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\n  float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\n\n  //Half angle vector\n  vec3 H = normalize(lightDirection + viewDirection);\n\n  //Geometric term\n  float NdotH = max(dot(surfaceNormal, H), 0.0);\n  float VdotH = max(dot(viewDirection, H), 0.000001);\n  float LdotH = max(dot(lightDirection, H), 0.000001);\n  float G1 = (2.0 * NdotH * VdotN) / VdotH;\n  float G2 = (2.0 * NdotH * LdotN) / LdotH;\n  float G = min(1.0, min(G1, G2));\n  \n  //Distribution term\n  float D = beckmannDistribution(NdotH, roughness);\n\n  //Fresnel term\n  float F = pow(1.0 - VdotN, fresnel);\n\n  //Multiply terms and done\n  return  G * F * D / max(3.14159265 * VdotN, 0.000001);\n}\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\nuniform sampler2D texture;\n\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n  vec3 N = normalize(f_normal);\n  vec3 L = normalize(f_lightDirection);\n  vec3 V = normalize(f_eyeDirection);\n\n  if(gl_FrontFacing) {\n    N = -N;\n  }\n\n  float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\n\n  vec4 surfaceColor = f_color * texture2D(texture, f_uv);\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\n\n  gl_FragColor = litColor * opacity;\n}\n"]),o=n(["precision highp float;\n\nprecision highp float;\n#define GLSLIFY 1\n\nvec3 getOrthogonalVector(vec3 v) {\n  // Return up-vector for only-z vector.\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\n  // Assign z = 0, x = -b, y = a:\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\n    return normalize(vec3(-v.y, v.x, 0.0));\n  } else {\n    return normalize(vec3(0.0, v.z, -v.y));\n  }\n}\n\n// Calculate the cone vertex and normal at the given index.\n//\n// The returned vertex is for a cone with its top at origin and height of 1.0,\n// pointing in the direction of the vector attribute.\n//\n// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.\n// These vertices are used to make up the triangles of the cone by the following:\n//   segment + 0 top vertex\n//   segment + 1 perimeter vertex a+1\n//   segment + 2 perimeter vertex a\n//   segment + 3 center base vertex\n//   segment + 4 perimeter vertex a\n//   segment + 5 perimeter vertex a+1\n// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.\n// To go from index to segment, floor(index / 6)\n// To go from segment to angle, 2*pi * (segment/segmentCount)\n// To go from index to segment index, index - (segment*6)\n//\nvec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {\n\n  const float segmentCount = 8.0;\n\n  float index = rawIndex - floor(rawIndex /\n    (segmentCount * 6.0)) *\n    (segmentCount * 6.0);\n\n  float segment = floor(0.001 + index/6.0);\n  float segmentIndex = index - (segment*6.0);\n\n  normal = -normalize(d);\n\n  if (segmentIndex > 2.99 && segmentIndex < 3.01) {\n    return mix(vec3(0.0), -d, coneOffset);\n  }\n\n  float nextAngle = (\n    (segmentIndex > 0.99 &&  segmentIndex < 1.01) ||\n    (segmentIndex > 4.99 &&  segmentIndex < 5.01)\n  ) ? 1.0 : 0.0;\n  float angle = 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);\n\n  vec3 v1 = mix(d, vec3(0.0), coneOffset);\n  vec3 v2 = v1 - d;\n\n  vec3 u = getOrthogonalVector(d);\n  vec3 v = normalize(cross(u, d));\n\n  vec3 x = u * cos(angle) * length(d)*0.25;\n  vec3 y = v * sin(angle) * length(d)*0.25;\n  vec3 v3 = v2 + x + y;\n  if (segmentIndex < 3.0) {\n    vec3 tx = u * sin(angle);\n    vec3 ty = v * -cos(angle);\n    vec3 tangent = tx + ty;\n    normal = normalize(cross(v3 - v1, tangent));\n  }\n\n  if (segmentIndex == 0.0) {\n    return mix(d, vec3(0.0), coneOffset);\n  }\n  return v3;\n}\n\nattribute vec4 vector;\nattribute vec4 position;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\nuniform float vectorScale, coneScale, coneOffset;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n  vec3 normal;\n  vec3 XYZ = getConePosition(mat3(model) * ((vectorScale * coneScale) * vector.xyz), position.w, coneOffset, normal);\n  vec4 conePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\n  gl_Position = projection * view * conePosition;\n  f_id        = id;\n  f_position  = position.xyz;\n}\n"]),s=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3  clipBounds[2];\nuniform float pickId;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n\n  gl_FragColor = vec4(pickId, f_id.xyz);\n}"]);e.meshShader={vertex:i,fragment:a,attributes:[{name:"position",type:"vec4"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"},{name:"vector",type:"vec3"}]},e.pickShader={vertex:o,fragment:s,attributes:[{name:"position",type:"vec4"},{name:"id",type:"vec4"},{name:"vector",type:"vec3"}]}},1950:function(t){t.exports={0:"NONE",1:"ONE",2:"LINE_LOOP",3:"LINE_STRIP",4:"TRIANGLES",5:"TRIANGLE_STRIP",6:"TRIANGLE_FAN",256:"DEPTH_BUFFER_BIT",512:"NEVER",513:"LESS",514:"EQUAL",515:"LEQUAL",516:"GREATER",517:"NOTEQUAL",518:"GEQUAL",519:"ALWAYS",768:"SRC_COLOR",769:"ONE_MINUS_SRC_COLOR",770:"SRC_ALPHA",771:"ONE_MINUS_SRC_ALPHA",772:"DST_ALPHA",773:"ONE_MINUS_DST_ALPHA",774:"DST_COLOR",775:"ONE_MINUS_DST_COLOR",776:"SRC_ALPHA_SATURATE",1024:"STENCIL_BUFFER_BIT",1028:"FRONT",1029:"BACK",1032:"FRONT_AND_BACK",1280:"INVALID_ENUM",1281:"INVALID_VALUE",1282:"INVALID_OPERATION",1285:"OUT_OF_MEMORY",1286:"INVALID_FRAMEBUFFER_OPERATION",2304:"CW",2305:"CCW",2849:"LINE_WIDTH",2884:"CULL_FACE",2885:"CULL_FACE_MODE",2886:"FRONT_FACE",2928:"DEPTH_RANGE",2929:"DEPTH_TEST",2930:"DEPTH_WRITEMASK",2931:"DEPTH_CLEAR_VALUE",2932:"DEPTH_FUNC",2960:"STENCIL_TEST",2961:"STENCIL_CLEAR_VALUE",2962:"STENCIL_FUNC",2963:"STENCIL_VALUE_MASK",2964:"STENCIL_FAIL",2965:"STENCIL_PASS_DEPTH_FAIL",2966:"STENCIL_PASS_DEPTH_PASS",2967:"STENCIL_REF",2968:"STENCIL_WRITEMASK",2978:"VIEWPORT",3024:"DITHER",3042:"BLEND",3088:"SCISSOR_BOX",3089:"SCISSOR_TEST",3106:"COLOR_CLEAR_VALUE",3107:"COLOR_WRITEMASK",3317:"UNPACK_ALIGNMENT",3333:"PACK_ALIGNMENT",3379:"MAX_TEXTURE_SIZE",3386:"MAX_VIEWPORT_DIMS",3408:"SUBPIXEL_BITS",3410:"RED_BITS",3411:"GREEN_BITS",3412:"BLUE_BITS",3413:"ALPHA_BITS",3414:"DEPTH_BITS",3415:"STENCIL_BITS",3553:"TEXTURE_2D",4352:"DONT_CARE",4353:"FASTEST",4354:"NICEST",5120:"BYTE",5121:"UNSIGNED_BYTE",5122:"SHORT",5123:"UNSIGNED_SHORT",5124:"INT",5125:"UNSIGNED_INT",5126:"FLOAT",5386:"INVERT",5890:"TEXTURE",6401:"STENCIL_INDEX",6402:"DEPTH_COMPONENT",6406:"ALPHA",6407:"RGB",6408:"RGBA",6409:"LUMINANCE",6410:"LUMINANCE_ALPHA",7680:"KEEP",7681:"REPLACE",7682:"INCR",7683:"DECR",7936:"VENDOR",7937:"RENDERER",7938:"VERSION",9728:"NEAREST",9729:"LINEAR",9984:"NEAREST_MIPMAP_NEAREST",9985:"LINEAR_MIPMAP_NEAREST",9986:"NEAREST_MIPMAP_LINEAR",9987:"LINEAR_MIPMAP_LINEAR",10240:"TEXTURE_MAG_FILTER",10241:"TEXTURE_MIN_FILTER",10242:"TEXTURE_WRAP_S",10243:"TEXTURE_WRAP_T",10497:"REPEAT",10752:"POLYGON_OFFSET_UNITS",16384:"COLOR_BUFFER_BIT",32769:"CONSTANT_COLOR",32770:"ONE_MINUS_CONSTANT_COLOR",32771:"CONSTANT_ALPHA",32772:"ONE_MINUS_CONSTANT_ALPHA",32773:"BLEND_COLOR",32774:"FUNC_ADD",32777:"BLEND_EQUATION_RGB",32778:"FUNC_SUBTRACT",32779:"FUNC_REVERSE_SUBTRACT",32819:"UNSIGNED_SHORT_4_4_4_4",32820:"UNSIGNED_SHORT_5_5_5_1",32823:"POLYGON_OFFSET_FILL",32824:"POLYGON_OFFSET_FACTOR",32854:"RGBA4",32855:"RGB5_A1",32873:"TEXTURE_BINDING_2D",32926:"SAMPLE_ALPHA_TO_COVERAGE",32928:"SAMPLE_COVERAGE",32936:"SAMPLE_BUFFERS",32937:"SAMPLES",32938:"SAMPLE_COVERAGE_VALUE",32939:"SAMPLE_COVERAGE_INVERT",32968:"BLEND_DST_RGB",32969:"BLEND_SRC_RGB",32970:"BLEND_DST_ALPHA",32971:"BLEND_SRC_ALPHA",33071:"CLAMP_TO_EDGE",33170:"GENERATE_MIPMAP_HINT",33189:"DEPTH_COMPONENT16",33306:"DEPTH_STENCIL_ATTACHMENT",33635:"UNSIGNED_SHORT_5_6_5",33648:"MIRRORED_REPEAT",33901:"ALIASED_POINT_SIZE_RANGE",33902:"ALIASED_LINE_WIDTH_RANGE",33984:"TEXTURE0",33985:"TEXTURE1",33986:"TEXTURE2",33987:"TEXTURE3",33988:"TEXTURE4",33989:"TEXTURE5",33990:"TEXTURE6",33991:"TEXTURE7",33992:"TEXTURE8",33993:"TEXTURE9",33994:"TEXTURE10",33995:"TEXTURE11",33996:"TEXTURE12",33997:"TEXTURE13",33998:"TEXTURE14",33999:"TEXTURE15",34e3:"TEXTURE16",34001:"TEXTURE17",34002:"TEXTURE18",34003:"TEXTURE19",34004:"TEXTURE20",34005:"TEXTURE21",34006:"TEXTURE22",34007:"TEXTURE23",34008:"TEXTURE24",34009:"TEXTURE25",34010:"TEXTURE26",34011:"TEXTURE27",34012:"TEXTURE28",34013:"TEXTURE29",34014:"TEXTURE30",34015:"TEXTURE31",34016:"ACTIVE_TEXTURE",34024:"MAX_RENDERBUFFER_SIZE",34041:"DEPTH_STENCIL",34055:"INCR_WRAP",34056:"DECR_WRAP",34067:"TEXTURE_CUBE_MAP",34068:"TEXTURE_BINDING_CUBE_MAP",34069:"TEXTURE_CUBE_MAP_POSITIVE_X",34070:"TEXTURE_CUBE_MAP_NEGATIVE_X",34071:"TEXTURE_CUBE_MAP_POSITIVE_Y",34072:"TEXTURE_CUBE_MAP_NEGATIVE_Y",34073:"TEXTURE_CUBE_MAP_POSITIVE_Z",34074:"TEXTURE_CUBE_MAP_NEGATIVE_Z",34076:"MAX_CUBE_MAP_TEXTURE_SIZE",34338:"VERTEX_ATTRIB_ARRAY_ENABLED",34339:"VERTEX_ATTRIB_ARRAY_SIZE",34340:"VERTEX_ATTRIB_ARRAY_STRIDE",34341:"VERTEX_ATTRIB_ARRAY_TYPE",34342:"CURRENT_VERTEX_ATTRIB",34373:"VERTEX_ATTRIB_ARRAY_POINTER",34466:"NUM_COMPRESSED_TEXTURE_FORMATS",34467:"COMPRESSED_TEXTURE_FORMATS",34660:"BUFFER_SIZE",34661:"BUFFER_USAGE",34816:"STENCIL_BACK_FUNC",34817:"STENCIL_BACK_FAIL",34818:"STENCIL_BACK_PASS_DEPTH_FAIL",34819:"STENCIL_BACK_PASS_DEPTH_PASS",34877:"BLEND_EQUATION_ALPHA",34921:"MAX_VERTEX_ATTRIBS",34922:"VERTEX_ATTRIB_ARRAY_NORMALIZED",34930:"MAX_TEXTURE_IMAGE_UNITS",34962:"ARRAY_BUFFER",34963:"ELEMENT_ARRAY_BUFFER",34964:"ARRAY_BUFFER_BINDING",34965:"ELEMENT_ARRAY_BUFFER_BINDING",34975:"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING",35040:"STREAM_DRAW",35044:"STATIC_DRAW",35048:"DYNAMIC_DRAW",35632:"FRAGMENT_SHADER",35633:"VERTEX_SHADER",35660:"MAX_VERTEX_TEXTURE_IMAGE_UNITS",35661:"MAX_COMBINED_TEXTURE_IMAGE_UNITS",35663:"SHADER_TYPE",35664:"FLOAT_VEC2",35665:"FLOAT_VEC3",35666:"FLOAT_VEC4",35667:"INT_VEC2",35668:"INT_VEC3",35669:"INT_VEC4",35670:"BOOL",35671:"BOOL_VEC2",35672:"BOOL_VEC3",35673:"BOOL_VEC4",35674:"FLOAT_MAT2",35675:"FLOAT_MAT3",35676:"FLOAT_MAT4",35678:"SAMPLER_2D",35680:"SAMPLER_CUBE",35712:"DELETE_STATUS",35713:"COMPILE_STATUS",35714:"LINK_STATUS",35715:"VALIDATE_STATUS",35716:"INFO_LOG_LENGTH",35717:"ATTACHED_SHADERS",35718:"ACTIVE_UNIFORMS",35719:"ACTIVE_UNIFORM_MAX_LENGTH",35720:"SHADER_SOURCE_LENGTH",35721:"ACTIVE_ATTRIBUTES",35722:"ACTIVE_ATTRIBUTE_MAX_LENGTH",35724:"SHADING_LANGUAGE_VERSION",35725:"CURRENT_PROGRAM",36003:"STENCIL_BACK_REF",36004:"STENCIL_BACK_VALUE_MASK",36005:"STENCIL_BACK_WRITEMASK",36006:"FRAMEBUFFER_BINDING",36007:"RENDERBUFFER_BINDING",36048:"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE",36049:"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME",36050:"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL",36051:"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE",36053:"FRAMEBUFFER_COMPLETE",36054:"FRAMEBUFFER_INCOMPLETE_ATTACHMENT",36055:"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",36057:"FRAMEBUFFER_INCOMPLETE_DIMENSIONS",36061:"FRAMEBUFFER_UNSUPPORTED",36064:"COLOR_ATTACHMENT0",36096:"DEPTH_ATTACHMENT",36128:"STENCIL_ATTACHMENT",36160:"FRAMEBUFFER",36161:"RENDERBUFFER",36162:"RENDERBUFFER_WIDTH",36163:"RENDERBUFFER_HEIGHT",36164:"RENDERBUFFER_INTERNAL_FORMAT",36168:"STENCIL_INDEX8",36176:"RENDERBUFFER_RED_SIZE",36177:"RENDERBUFFER_GREEN_SIZE",36178:"RENDERBUFFER_BLUE_SIZE",36179:"RENDERBUFFER_ALPHA_SIZE",36180:"RENDERBUFFER_DEPTH_SIZE",36181:"RENDERBUFFER_STENCIL_SIZE",36194:"RGB565",36336:"LOW_FLOAT",36337:"MEDIUM_FLOAT",36338:"HIGH_FLOAT",36339:"LOW_INT",36340:"MEDIUM_INT",36341:"HIGH_INT",36346:"SHADER_COMPILER",36347:"MAX_VERTEX_UNIFORM_VECTORS",36348:"MAX_VARYING_VECTORS",36349:"MAX_FRAGMENT_UNIFORM_VECTORS",37440:"UNPACK_FLIP_Y_WEBGL",37441:"UNPACK_PREMULTIPLY_ALPHA_WEBGL",37442:"CONTEXT_LOST_WEBGL",37443:"UNPACK_COLORSPACE_CONVERSION_WEBGL",37444:"BROWSER_DEFAULT_WEBGL"}},6603:function(t,e,r){var n=r(1950);t.exports=function(t){return n[t]}},3110:function(t,e,r){"use strict";t.exports=function(t){var e=t.gl,r=n(e),o=i(e,[{buffer:r,type:e.FLOAT,size:3,offset:0,stride:40},{buffer:r,type:e.FLOAT,size:4,offset:12,stride:40},{buffer:r,type:e.FLOAT,size:3,offset:28,stride:40}]),l=a(e);l.attributes.position.location=0,l.attributes.color.location=1,l.attributes.offset.location=2;var u=new s(e,r,o,l);return u.update(t),u};var n=r(5827),i=r(2944),a=r(7667),o=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function s(t,e,r,n){this.gl=t,this.shader=n,this.buffer=e,this.vao=r,this.pixelRatio=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lineWidth=[1,1,1],this.capSize=[10,10,10],this.lineCount=[0,0,0],this.lineOffset=[0,0,0],this.opacity=1,this.hasAlpha=!1}var l=s.prototype;function u(t,e){for(var r=0;r<3;++r)t[0][r]=Math.min(t[0][r],e[r]),t[1][r]=Math.max(t[1][r],e[r])}l.isOpaque=function(){return!this.hasAlpha},l.isTransparent=function(){return this.hasAlpha},l.drawTransparent=l.draw=function(t){var e=this.gl,r=this.shader.uniforms;this.shader.bind();var n=r.view=t.view||o,i=r.projection=t.projection||o;r.model=t.model||o,r.clipBounds=this.clipBounds,r.opacity=this.opacity;var a=n[12],s=n[13],l=n[14],u=n[15],c=(t._ortho?2:1)*this.pixelRatio*(i[3]*a+i[7]*s+i[11]*l+i[15]*u)/e.drawingBufferHeight;this.vao.bind();for(var f=0;f<3;++f)e.lineWidth(this.lineWidth[f]*this.pixelRatio),r.capSize=this.capSize[f]*c,this.lineCount[f]&&e.drawArrays(e.LINES,this.lineOffset[f],this.lineCount[f]);this.vao.unbind()};var c=function(){for(var t=new Array(3),e=0;e<3;++e){for(var r=[],n=1;n<=2;++n)for(var i=-1;i<=1;i+=2){var a=[0,0,0];a[(n+e)%3]=i,r.push(a)}t[e]=r}return t}();function f(t,e,r,n){for(var i=c[n],a=0;a<i.length;++a){var o=i[a];t.push(e[0],e[1],e[2],r[0],r[1],r[2],r[3],o[0],o[1],o[2])}return i.length}l.update=function(t){"lineWidth"in(t=t||{})&&(this.lineWidth=t.lineWidth,Array.isArray(this.lineWidth)||(this.lineWidth=[this.lineWidth,this.lineWidth,this.lineWidth])),"capSize"in t&&(this.capSize=t.capSize,Array.isArray(this.capSize)||(this.capSize=[this.capSize,this.capSize,this.capSize])),this.hasAlpha=!1,"opacity"in t&&(this.opacity=+t.opacity,this.opacity<1&&(this.hasAlpha=!0));var e=t.color||[[0,0,0],[0,0,0],[0,0,0]],r=t.position,n=t.error;if(Array.isArray(e[0])||(e=[e,e,e]),r&&n){var i=[],a=r.length,o=0;this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.lineCount=[0,0,0];for(var s=0;s<3;++s){this.lineOffset[s]=o;t:for(var l=0;l<a;++l){for(var c=r[l],h=0;h<3;++h)if(isNaN(c[h])||!isFinite(c[h]))continue t;var p,d=n[l],v=e[s];Array.isArray(v[0])&&(v=e[l]),3===v.length?v=[v[0],v[1],v[2],1]:4===v.length&&(v=[v[0],v[1],v[2],v[3]],!this.hasAlpha&&v[3]<1&&(this.hasAlpha=!0)),isNaN(d[0][s])||isNaN(d[1][s])||(d[0][s]<0&&((p=c.slice())[s]+=d[0][s],i.push(c[0],c[1],c[2],v[0],v[1],v[2],v[3],0,0,0,p[0],p[1],p[2],v[0],v[1],v[2],v[3],0,0,0),u(this.bounds,p),o+=2+f(i,p,v,s)),d[1][s]>0&&((p=c.slice())[s]+=d[1][s],i.push(c[0],c[1],c[2],v[0],v[1],v[2],v[3],0,0,0,p[0],p[1],p[2],v[0],v[1],v[2],v[3],0,0,0),u(this.bounds,p),o+=2+f(i,p,v,s)))}this.lineCount[s]=o-this.lineOffset[s]}this.buffer.update(i)}},l.dispose=function(){this.shader.dispose(),this.buffer.dispose(),this.vao.dispose()}},7667:function(t,e,r){"use strict";var n=r(6832),i=r(5158),a=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position, offset;\nattribute vec4 color;\nuniform mat4 model, view, projection;\nuniform float capSize;\nvarying vec4 fragColor;\nvarying vec3 fragPosition;\n\nvoid main() {\n  vec4 worldPosition  = model * vec4(position, 1.0);\n  worldPosition       = (worldPosition / worldPosition.w) + vec4(capSize * offset, 0.0);\n  gl_Position         = projection * view * worldPosition;\n  fragColor           = color;\n  fragPosition        = position;\n}"]),o=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float opacity;\nvarying vec3 fragPosition;\nvarying vec4 fragColor;\n\nvoid main() {\n  if (\n    outOfRange(clipBounds[0], clipBounds[1], fragPosition) ||\n    fragColor.a * opacity == 0.\n  ) discard;\n\n  gl_FragColor = opacity * fragColor;\n}"]);t.exports=function(t){return i(t,a,o,null,[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"offset",type:"vec3"}])}},4234:function(t,e,r){"use strict";var n=r(8931);t.exports=function(t,e,r,n){i||(i=t.FRAMEBUFFER_UNSUPPORTED,a=t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT,o=t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS,s=t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT);var u=t.getExtension("WEBGL_draw_buffers");if(!l&&u&&function(t,e){var r=t.getParameter(e.MAX_COLOR_ATTACHMENTS_WEBGL);l=new Array(r+1);for(var n=0;n<=r;++n){for(var i=new Array(r),a=0;a<n;++a)i[a]=t.COLOR_ATTACHMENT0+a;for(a=n;a<r;++a)i[a]=t.NONE;l[n]=i}}(t,u),Array.isArray(e)&&(n=r,r=0|e[1],e=0|e[0]),"number"!=typeof e)throw new Error("gl-fbo: Missing shape parameter");var c=t.getParameter(t.MAX_RENDERBUFFER_SIZE);if(e<0||e>c||r<0||r>c)throw new Error("gl-fbo: Parameters are too large for FBO");var f=1;if("color"in(n=n||{})){if((f=Math.max(0|n.color,0))<0)throw new Error("gl-fbo: Must specify a nonnegative number of colors");if(f>1){if(!u)throw new Error("gl-fbo: Multiple draw buffer extension not supported");if(f>t.getParameter(u.MAX_COLOR_ATTACHMENTS_WEBGL))throw new Error("gl-fbo: Context does not support "+f+" draw buffers")}}var h=t.UNSIGNED_BYTE,p=t.getExtension("OES_texture_float");if(n.float&&f>0){if(!p)throw new Error("gl-fbo: Context does not support floating point textures");h=t.FLOAT}else n.preferFloat&&f>0&&p&&(h=t.FLOAT);var v=!0;"depth"in n&&(v=!!n.depth);var g=!1;return"stencil"in n&&(g=!!n.stencil),new d(t,e,r,h,f,v,g,u)};var i,a,o,s,l=null;function u(t){return[t.getParameter(t.FRAMEBUFFER_BINDING),t.getParameter(t.RENDERBUFFER_BINDING),t.getParameter(t.TEXTURE_BINDING_2D)]}function c(t,e){t.bindFramebuffer(t.FRAMEBUFFER,e[0]),t.bindRenderbuffer(t.RENDERBUFFER,e[1]),t.bindTexture(t.TEXTURE_2D,e[2])}function f(t){switch(t){case i:throw new Error("gl-fbo: Framebuffer unsupported");case a:throw new Error("gl-fbo: Framebuffer incomplete attachment");case o:throw new Error("gl-fbo: Framebuffer incomplete dimensions");case s:throw new Error("gl-fbo: Framebuffer incomplete missing attachment");default:throw new Error("gl-fbo: Framebuffer failed for unspecified reason")}}function h(t,e,r,i,a,o){if(!i)return null;var s=n(t,e,r,a,i);return s.magFilter=t.NEAREST,s.minFilter=t.NEAREST,s.mipSamples=1,s.bind(),t.framebufferTexture2D(t.FRAMEBUFFER,o,t.TEXTURE_2D,s.handle,0),s}function p(t,e,r,n,i){var a=t.createRenderbuffer();return t.bindRenderbuffer(t.RENDERBUFFER,a),t.renderbufferStorage(t.RENDERBUFFER,n,e,r),t.framebufferRenderbuffer(t.FRAMEBUFFER,i,t.RENDERBUFFER,a),a}function d(t,e,r,n,i,a,o,s){this.gl=t,this._shape=[0|e,0|r],this._destroyed=!1,this._ext=s,this.color=new Array(i);for(var d=0;d<i;++d)this.color[d]=null;this._color_rb=null,this.depth=null,this._depth_rb=null,this._colorType=n,this._useDepth=a,this._useStencil=o;var v=this,g=[0|e,0|r];Object.defineProperties(g,{0:{get:function(){return v._shape[0]},set:function(t){return v.width=t}},1:{get:function(){return v._shape[1]},set:function(t){return v.height=t}}}),this._shapeVector=g,function(t){var e=u(t.gl),r=t.gl,n=t.handle=r.createFramebuffer(),i=t._shape[0],a=t._shape[1],o=t.color.length,s=t._ext,d=t._useStencil,v=t._useDepth,g=t._colorType;r.bindFramebuffer(r.FRAMEBUFFER,n);for(var y=0;y<o;++y)t.color[y]=h(r,i,a,g,r.RGBA,r.COLOR_ATTACHMENT0+y);0===o?(t._color_rb=p(r,i,a,r.RGBA4,r.COLOR_ATTACHMENT0),s&&s.drawBuffersWEBGL(l[0])):o>1&&s.drawBuffersWEBGL(l[o]);var m=r.getExtension("WEBGL_depth_texture");m?d?t.depth=h(r,i,a,m.UNSIGNED_INT_24_8_WEBGL,r.DEPTH_STENCIL,r.DEPTH_STENCIL_ATTACHMENT):v&&(t.depth=h(r,i,a,r.UNSIGNED_SHORT,r.DEPTH_COMPONENT,r.DEPTH_ATTACHMENT)):v&&d?t._depth_rb=p(r,i,a,r.DEPTH_STENCIL,r.DEPTH_STENCIL_ATTACHMENT):v?t._depth_rb=p(r,i,a,r.DEPTH_COMPONENT16,r.DEPTH_ATTACHMENT):d&&(t._depth_rb=p(r,i,a,r.STENCIL_INDEX,r.STENCIL_ATTACHMENT));var x=r.checkFramebufferStatus(r.FRAMEBUFFER);if(x!==r.FRAMEBUFFER_COMPLETE){for(t._destroyed=!0,r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteFramebuffer(t.handle),t.handle=null,t.depth&&(t.depth.dispose(),t.depth=null),t._depth_rb&&(r.deleteRenderbuffer(t._depth_rb),t._depth_rb=null),y=0;y<t.color.length;++y)t.color[y].dispose(),t.color[y]=null;t._color_rb&&(r.deleteRenderbuffer(t._color_rb),t._color_rb=null),c(r,e),f(x)}c(r,e)}(this)}var v=d.prototype;function g(t,e,r){if(t._destroyed)throw new Error("gl-fbo: Can't resize destroyed FBO");if(t._shape[0]!==e||t._shape[1]!==r){var n=t.gl,i=n.getParameter(n.MAX_RENDERBUFFER_SIZE);if(e<0||e>i||r<0||r>i)throw new Error("gl-fbo: Can't resize FBO, invalid dimensions");t._shape[0]=e,t._shape[1]=r;for(var a=u(n),o=0;o<t.color.length;++o)t.color[o].shape=t._shape;t._color_rb&&(n.bindRenderbuffer(n.RENDERBUFFER,t._color_rb),n.renderbufferStorage(n.RENDERBUFFER,n.RGBA4,t._shape[0],t._shape[1])),t.depth&&(t.depth.shape=t._shape),t._depth_rb&&(n.bindRenderbuffer(n.RENDERBUFFER,t._depth_rb),t._useDepth&&t._useStencil?n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_STENCIL,t._shape[0],t._shape[1]):t._useDepth?n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_COMPONENT16,t._shape[0],t._shape[1]):t._useStencil&&n.renderbufferStorage(n.RENDERBUFFER,n.STENCIL_INDEX,t._shape[0],t._shape[1])),n.bindFramebuffer(n.FRAMEBUFFER,t.handle);var s=n.checkFramebufferStatus(n.FRAMEBUFFER);s!==n.FRAMEBUFFER_COMPLETE&&(t.dispose(),c(n,a),f(s)),c(n,a)}}Object.defineProperties(v,{shape:{get:function(){return this._destroyed?[0,0]:this._shapeVector},set:function(t){if(Array.isArray(t)||(t=[0|t,0|t]),2!==t.length)throw new Error("gl-fbo: Shape vector must be length 2");var e=0|t[0],r=0|t[1];return g(this,e,r),[e,r]},enumerable:!1},width:{get:function(){return this._destroyed?0:this._shape[0]},set:function(t){return g(this,t|=0,this._shape[1]),t},enumerable:!1},height:{get:function(){return this._destroyed?0:this._shape[1]},set:function(t){return t|=0,g(this,this._shape[0],t),t},enumerable:!1}}),v.bind=function(){if(!this._destroyed){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.handle),t.viewport(0,0,this._shape[0],this._shape[1])}},v.dispose=function(){if(!this._destroyed){this._destroyed=!0;var t=this.gl;t.deleteFramebuffer(this.handle),this.handle=null,this.depth&&(this.depth.dispose(),this.depth=null),this._depth_rb&&(t.deleteRenderbuffer(this._depth_rb),this._depth_rb=null);for(var e=0;e<this.color.length;++e)this.color[e].dispose(),this.color[e]=null;this._color_rb&&(t.deleteRenderbuffer(this._color_rb),this._color_rb=null)}}},3530:function(t,e,r){var n=r(8974).sprintf,i=r(6603),a=r(9365),o=r(8008);t.exports=function(t,e,r){"use strict";var s=a(e)||"of unknown name (see npm glsl-shader-name)",l="unknown type";void 0!==r&&(l=r===i.FRAGMENT_SHADER?"fragment":"vertex");for(var u=n("Error compiling %s shader %s:\n",l,s),c=n("%s%s",u,t),f=t.split("\n"),h={},p=0;p<f.length;p++){var d=f[p];if(""!==d&&"\0"!==d){var v=parseInt(d.split(":")[2]);if(isNaN(v))throw new Error(n("Could not parse error: %s",d));h[v]=d}}var g=o(e).split("\n");for(p=0;p<g.length;p++)if((h[p+3]||h[p+2]||h[p+1])&&(u+=g[p]+"\n",h[p+1])){var y=h[p+1];y=y.substr(y.split(":",3).join(":").length+1).trim(),u+=n("^^^ %s\n\n",y)}return{long:u.trim(),short:c.trim()}}},6386:function(t,e,r){"use strict";t.exports=function(t,e){var r=t.gl,n=new u(t,o(r,l.vertex,l.fragment),o(r,l.pickVertex,l.pickFragment),s(r),s(r),s(r),s(r));return n.update(e),t.addObject(n),n};var n=r(5070),i=r(9560),a=r(5306),o=r(5158),s=r(5827),l=r(1292);function u(t,e,r,n,i,a,o){this.plot=t,this.shader=e,this.pickShader=r,this.positionBuffer=n,this.weightBuffer=i,this.colorBuffer=a,this.idBuffer=o,this.xData=[],this.yData=[],this.shape=[0,0],this.bounds=[1/0,1/0,-1/0,-1/0],this.pickOffset=0}var c,f=u.prototype,h=[0,0,1,0,0,1,1,0,1,1,0,1];f.draw=(c=[1,0,0,0,1,0,0,0,1],function(){var t=this.plot,e=this.shader,r=this.bounds,n=this.numVertices;if(!(n<=0)){var i=t.gl,a=t.dataBox,o=r[2]-r[0],s=r[3]-r[1],l=a[2]-a[0],u=a[3]-a[1];c[0]=2*o/l,c[4]=2*s/u,c[6]=2*(r[0]-a[0])/l-1,c[7]=2*(r[1]-a[1])/u-1,e.bind();var f=e.uniforms;f.viewTransform=c,f.shape=this.shape;var h=e.attributes;this.positionBuffer.bind(),h.position.pointer(),this.weightBuffer.bind(),h.weight.pointer(i.UNSIGNED_BYTE,!1),this.colorBuffer.bind(),h.color.pointer(i.UNSIGNED_BYTE,!0),i.drawArrays(i.TRIANGLES,0,n)}}),f.drawPick=function(){var t=[1,0,0,0,1,0,0,0,1],e=[0,0,0,0];return function(r){var n=this.plot,i=this.pickShader,a=this.bounds,o=this.numVertices;if(!(o<=0)){var s=n.gl,l=n.dataBox,u=a[2]-a[0],c=a[3]-a[1],f=l[2]-l[0],h=l[3]-l[1];t[0]=2*u/f,t[4]=2*c/h,t[6]=2*(a[0]-l[0])/f-1,t[7]=2*(a[1]-l[1])/h-1;for(var p=0;p<4;++p)e[p]=r>>8*p&255;this.pickOffset=r,i.bind();var d=i.uniforms;d.viewTransform=t,d.pickOffset=e,d.shape=this.shape;var v=i.attributes;return this.positionBuffer.bind(),v.position.pointer(),this.weightBuffer.bind(),v.weight.pointer(s.UNSIGNED_BYTE,!1),this.idBuffer.bind(),v.pickId.pointer(s.UNSIGNED_BYTE,!1),s.drawArrays(s.TRIANGLES,0,o),r+this.shape[0]*this.shape[1]}}}(),f.pick=function(t,e,r){var n=this.pickOffset,i=this.shape[0]*this.shape[1];if(r<n||r>=n+i)return null;var a=r-n,o=this.xData,s=this.yData;return{object:this,pointId:a,dataCoord:[o[a%this.shape[0]],s[a/this.shape[0]|0]]}},f.update=function(t){var e=(t=t||{}).shape||[0,0],r=t.x||i(e[0]),o=t.y||i(e[1]),s=t.z||new Float32Array(e[0]*e[1]),l=!1!==t.zsmooth;this.xData=r,this.yData=o;var u,c,f,p,d=t.colorLevels||[0],v=t.colorValues||[0,0,0,1],g=d.length,y=this.bounds;l?(u=y[0]=r[0],c=y[1]=o[0],f=y[2]=r[r.length-1],p=y[3]=o[o.length-1]):(u=y[0]=r[0]+(r[1]-r[0])/2,c=y[1]=o[0]+(o[1]-o[0])/2,f=y[2]=r[r.length-1]+(r[r.length-1]-r[r.length-2])/2,p=y[3]=o[o.length-1]+(o[o.length-1]-o[o.length-2])/2);var m=1/(f-u),x=1/(p-c),b=e[0],_=e[1];this.shape=[b,_];var w=(l?(b-1)*(_-1):b*_)*(h.length>>>1);this.numVertices=w;for(var T=a.mallocUint8(4*w),k=a.mallocFloat32(2*w),A=a.mallocUint8(2*w),M=a.mallocUint32(w),S=0,E=l?b-1:b,L=l?_-1:_,C=0;C<L;++C){var P,O;l?(P=x*(o[C]-c),O=x*(o[C+1]-c)):(P=C<_-1?x*(o[C]-(o[C+1]-o[C])/2-c):x*(o[C]-(o[C]-o[C-1])/2-c),O=C<_-1?x*(o[C]+(o[C+1]-o[C])/2-c):x*(o[C]+(o[C]-o[C-1])/2-c));for(var I=0;I<E;++I){var D,z;l?(D=m*(r[I]-u),z=m*(r[I+1]-u)):(D=I<b-1?m*(r[I]-(r[I+1]-r[I])/2-u):m*(r[I]-(r[I]-r[I-1])/2-u),z=I<b-1?m*(r[I]+(r[I+1]-r[I])/2-u):m*(r[I]+(r[I]-r[I-1])/2-u));for(var R=0;R<h.length;R+=2){var F,B,N,j,U=h[R],V=h[R+1],H=s[l?(C+V)*b+(I+U):C*b+I],q=n.le(d,H);if(q<0)F=v[0],B=v[1],N=v[2],j=v[3];else if(q===g-1)F=v[4*g-4],B=v[4*g-3],N=v[4*g-2],j=v[4*g-1];else{var G=(H-d[q])/(d[q+1]-d[q]),Z=1-G,Y=4*q,W=4*(q+1);F=Z*v[Y]+G*v[W],B=Z*v[Y+1]+G*v[W+1],N=Z*v[Y+2]+G*v[W+2],j=Z*v[Y+3]+G*v[W+3]}T[4*S]=255*F,T[4*S+1]=255*B,T[4*S+2]=255*N,T[4*S+3]=255*j,k[2*S]=.5*D+.5*z,k[2*S+1]=.5*P+.5*O,A[2*S]=U,A[2*S+1]=V,M[S]=C*b+I,S+=1}}}this.positionBuffer.update(k),this.weightBuffer.update(A),this.colorBuffer.update(T),this.idBuffer.update(M),a.free(k),a.free(T),a.free(A),a.free(M)},f.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.positionBuffer.dispose(),this.weightBuffer.dispose(),this.colorBuffer.dispose(),this.idBuffer.dispose(),this.plot.removeObject(this)}},1292:function(t,e,r){"use strict";var n=r(6832);t.exports={fragment:n(["precision lowp float;\n#define GLSLIFY 1\nvarying vec4 fragColor;\nvoid main() {\n  gl_FragColor = vec4(fragColor.rgb * fragColor.a, fragColor.a);\n}\n"]),vertex:n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 position;\nattribute vec4 color;\nattribute vec2 weight;\n\nuniform vec2 shape;\nuniform mat3 viewTransform;\n\nvarying vec4 fragColor;\n\nvoid main() {\n  vec3 vPosition = viewTransform * vec3( position + (weight-.5)/(shape-1.) , 1.0);\n  fragColor = color;\n  gl_Position = vec4(vPosition.xy, 0, vPosition.z);\n}\n"]),pickFragment:n(["precision mediump float;\n#define GLSLIFY 1\n\nvarying vec4 fragId;\nvarying vec2 vWeight;\n\nuniform vec2 shape;\nuniform vec4 pickOffset;\n\nvoid main() {\n  vec2 d = step(.5, vWeight);\n  vec4 id = fragId + pickOffset;\n  id.x += d.x + d.y*shape.x;\n\n  id.y += floor(id.x / 256.0);\n  id.x -= floor(id.x / 256.0) * 256.0;\n\n  id.z += floor(id.y / 256.0);\n  id.y -= floor(id.y / 256.0) * 256.0;\n\n  id.w += floor(id.z / 256.0);\n  id.z -= floor(id.z / 256.0) * 256.0;\n\n  gl_FragColor = id/255.;\n}\n"]),pickVertex:n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 position;\nattribute vec4 pickId;\nattribute vec2 weight;\n\nuniform vec2 shape;\nuniform mat3 viewTransform;\n\nvarying vec4 fragId;\nvarying vec2 vWeight;\n\nvoid main() {\n  vWeight = weight;\n\n  fragId = pickId;\n\n  vec3 vPosition = viewTransform * vec3( position + (weight-.5)/(shape-1.) , 1.0);\n  gl_Position = vec4(vPosition.xy, 0, vPosition.z);\n}\n"])}},248:function(t,e,r){var n=r(6832),i=r(5158),a=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position, nextPosition;\nattribute float arcLength, lineWidth;\nattribute vec4 color;\n\nuniform vec2 screenShape;\nuniform float pixelRatio;\nuniform mat4 model, view, projection;\n\nvarying vec4 fragColor;\nvarying vec3 worldPosition;\nvarying float pixelArcLength;\n\nvec4 project(vec3 p) {\n  return projection * view * model * vec4(p, 1.0);\n}\n\nvoid main() {\n  vec4 startPoint = project(position);\n  vec4 endPoint   = project(nextPosition);\n\n  vec2 A = startPoint.xy / startPoint.w;\n  vec2 B =   endPoint.xy /   endPoint.w;\n\n  float clipAngle = atan(\n    (B.y - A.y) * screenShape.y,\n    (B.x - A.x) * screenShape.x\n  );\n\n  vec2 offset = 0.5 * pixelRatio * lineWidth * vec2(\n    sin(clipAngle),\n    -cos(clipAngle)\n  ) / screenShape;\n\n  gl_Position = vec4(startPoint.xy + startPoint.w * offset, startPoint.zw);\n\n  worldPosition = position;\n  pixelArcLength = arcLength;\n  fragColor = color;\n}\n"]),o=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3      clipBounds[2];\nuniform sampler2D dashTexture;\nuniform float     dashScale;\nuniform float     opacity;\n\nvarying vec3    worldPosition;\nvarying float   pixelArcLength;\nvarying vec4    fragColor;\n\nvoid main() {\n  if (\n    outOfRange(clipBounds[0], clipBounds[1], worldPosition) ||\n    fragColor.a * opacity == 0.\n  ) discard;\n\n  float dashWeight = texture2D(dashTexture, vec2(dashScale * pixelArcLength, 0)).r;\n  if(dashWeight < 0.5) {\n    discard;\n  }\n  gl_FragColor = fragColor * opacity;\n}\n"]),s=n(["precision highp float;\n#define GLSLIFY 1\n\n#define FLOAT_MAX  1.70141184e38\n#define FLOAT_MIN  1.17549435e-38\n\n// https://github.com/mikolalysenko/glsl-read-float/blob/master/index.glsl\nvec4 packFloat(float v) {\n  float av = abs(v);\n\n  //Handle special cases\n  if(av < FLOAT_MIN) {\n    return vec4(0.0, 0.0, 0.0, 0.0);\n  } else if(v > FLOAT_MAX) {\n    return vec4(127.0, 128.0, 0.0, 0.0) / 255.0;\n  } else if(v < -FLOAT_MAX) {\n    return vec4(255.0, 128.0, 0.0, 0.0) / 255.0;\n  }\n\n  vec4 c = vec4(0,0,0,0);\n\n  //Compute exponent and mantissa\n  float e = floor(log2(av));\n  float m = av * pow(2.0, -e) - 1.0;\n\n  //Unpack mantissa\n  c[1] = floor(128.0 * m);\n  m -= c[1] / 128.0;\n  c[2] = floor(32768.0 * m);\n  m -= c[2] / 32768.0;\n  c[3] = floor(8388608.0 * m);\n\n  //Unpack exponent\n  float ebias = e + 127.0;\n  c[0] = floor(ebias / 2.0);\n  ebias -= c[0] * 2.0;\n  c[1] += floor(ebias) * 128.0;\n\n  //Unpack sign bit\n  c[0] += 128.0 * step(0.0, -v);\n\n  //Scale back to range\n  return c / 255.0;\n}\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform float pickId;\nuniform vec3 clipBounds[2];\n\nvarying vec3 worldPosition;\nvarying float pixelArcLength;\nvarying vec4 fragColor;\n\nvoid main() {\n  if (outOfRange(clipBounds[0], clipBounds[1], worldPosition)) discard;\n\n  gl_FragColor = vec4(pickId/255.0, packFloat(pixelArcLength).xyz);\n}"]),l=[{name:"position",type:"vec3"},{name:"nextPosition",type:"vec3"},{name:"arcLength",type:"float"},{name:"lineWidth",type:"float"},{name:"color",type:"vec4"}];e.createShader=function(t){return i(t,a,o,null,l)},e.createPickShader=function(t){return i(t,a,s,null,l)}},6086:function(t,e,r){"use strict";t.exports=function(t){var e=t.gl||t.scene&&t.scene.gl,r=f(e);r.attributes.position.location=0,r.attributes.nextPosition.location=1,r.attributes.arcLength.location=2,r.attributes.lineWidth.location=3,r.attributes.color.location=4;var o=h(e);o.attributes.position.location=0,o.attributes.nextPosition.location=1,o.attributes.arcLength.location=2,o.attributes.lineWidth.location=3,o.attributes.color.location=4;for(var s=n(e),l=i(e,[{buffer:s,size:3,offset:0,stride:48},{buffer:s,size:3,offset:12,stride:48},{buffer:s,size:1,offset:24,stride:48},{buffer:s,size:1,offset:28,stride:48},{buffer:s,size:4,offset:32,stride:48}]),c=u(new Array(1024),[256,1,4]),p=0;p<1024;++p)c.data[p]=255;var d=a(e,c);d.wrap=e.REPEAT;var v=new y(e,r,o,s,l,d);return v.update(t),v};var n=r(5827),i=r(2944),a=r(8931),o=new Uint8Array(4),s=new Float32Array(o.buffer),l=r(5070),u=r(5050),c=r(248),f=c.createShader,h=c.createPickShader,p=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function d(t,e){for(var r=0,n=0;n<3;++n){var i=t[n]-e[n];r+=i*i}return Math.sqrt(r)}function v(t){for(var e=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],r=0;r<3;++r)e[0][r]=Math.max(t[0][r],e[0][r]),e[1][r]=Math.min(t[1][r],e[1][r]);return e}function g(t,e,r,n){this.arcLength=t,this.position=e,this.index=r,this.dataCoordinate=n}function y(t,e,r,n,i,a){this.gl=t,this.shader=e,this.pickShader=r,this.buffer=n,this.vao=i,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.points=[],this.arcLength=[],this.vertexCount=0,this.bounds=[[0,0,0],[0,0,0]],this.pickId=0,this.lineWidth=1,this.texture=a,this.dashScale=1,this.opacity=1,this.hasAlpha=!1,this.dirty=!0,this.pixelRatio=1}var m=y.prototype;m.isTransparent=function(){return this.hasAlpha},m.isOpaque=function(){return!this.hasAlpha},m.pickSlots=1,m.setPickBase=function(t){this.pickId=t},m.drawTransparent=m.draw=function(t){if(this.vertexCount){var e=this.gl,r=this.shader,n=this.vao;r.bind(),r.uniforms={model:t.model||p,view:t.view||p,projection:t.projection||p,clipBounds:v(this.clipBounds),dashTexture:this.texture.bind(),dashScale:this.dashScale/this.arcLength[this.arcLength.length-1],opacity:this.opacity,screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},n.bind(),n.draw(e.TRIANGLE_STRIP,this.vertexCount),n.unbind()}},m.drawPick=function(t){if(this.vertexCount){var e=this.gl,r=this.pickShader,n=this.vao;r.bind(),r.uniforms={model:t.model||p,view:t.view||p,projection:t.projection||p,pickId:this.pickId,clipBounds:v(this.clipBounds),screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},n.bind(),n.draw(e.TRIANGLE_STRIP,this.vertexCount),n.unbind()}},m.update=function(t){var e,r;this.dirty=!0;var n=!!t.connectGaps;"dashScale"in t&&(this.dashScale=t.dashScale),this.hasAlpha=!1,"opacity"in t&&(this.opacity=+t.opacity,this.opacity<1&&(this.hasAlpha=!0));var i=[],a=[],o=[],s=0,c=0,f=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],h=t.position||t.positions;if(h){var p=t.color||t.colors||[0,0,0,1],v=t.lineWidth||1,g=!1;t:for(e=1;e<h.length;++e){var y,m,x,b=h[e-1],_=h[e];for(a.push(s),o.push(b.slice()),r=0;r<3;++r){if(isNaN(b[r])||isNaN(_[r])||!isFinite(b[r])||!isFinite(_[r])){if(!n&&i.length>0){for(var w=0;w<24;++w)i.push(i[i.length-12]);c+=2,g=!0}continue t}f[0][r]=Math.min(f[0][r],b[r],_[r]),f[1][r]=Math.max(f[1][r],b[r],_[r])}Array.isArray(p[0])?(y=p.length>e-1?p[e-1]:p.length>0?p[p.length-1]:[0,0,0,1],m=p.length>e?p[e]:p.length>0?p[p.length-1]:[0,0,0,1]):y=m=p,3===y.length&&(y=[y[0],y[1],y[2],1]),3===m.length&&(m=[m[0],m[1],m[2],1]),!this.hasAlpha&&y[3]<1&&(this.hasAlpha=!0),x=Array.isArray(v)?v.length>e-1?v[e-1]:v.length>0?v[v.length-1]:[0,0,0,1]:v;var T=s;if(s+=d(b,_),g){for(r=0;r<2;++r)i.push(b[0],b[1],b[2],_[0],_[1],_[2],T,x,y[0],y[1],y[2],y[3]);c+=2,g=!1}i.push(b[0],b[1],b[2],_[0],_[1],_[2],T,x,y[0],y[1],y[2],y[3],b[0],b[1],b[2],_[0],_[1],_[2],T,-x,y[0],y[1],y[2],y[3],_[0],_[1],_[2],b[0],b[1],b[2],s,-x,m[0],m[1],m[2],m[3],_[0],_[1],_[2],b[0],b[1],b[2],s,x,m[0],m[1],m[2],m[3]),c+=4}}if(this.buffer.update(i),a.push(s),o.push(h[h.length-1].slice()),this.bounds=f,this.vertexCount=c,this.points=o,this.arcLength=a,"dashes"in t){var k=t.dashes.slice();for(k.unshift(0),e=1;e<k.length;++e)k[e]=k[e-1]+k[e];var A=u(new Array(1024),[256,1,4]);for(e=0;e<256;++e){for(r=0;r<4;++r)A.set(e,0,r,0);1&l.le(k,k[k.length-1]*e/255)?A.set(e,0,0,0):A.set(e,0,0,255)}this.texture.setPixels(A)}},m.dispose=function(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()},m.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=function(t,e,r,n){return o[0]=0,o[1]=r,o[2]=e,o[3]=t,s[0]}(t.value[0],t.value[1],t.value[2]),r=l.le(this.arcLength,e);if(r<0)return null;if(r===this.arcLength.length-1)return new g(this.arcLength[this.arcLength.length-1],this.points[this.points.length-1].slice(),r);for(var n=this.points[r],i=this.points[Math.min(r+1,this.points.length-1)],a=(e-this.arcLength[r])/(this.arcLength[r+1]-this.arcLength[r]),u=1-a,c=[0,0,0],f=0;f<3;++f)c[f]=u*n[f]+a*i[f];var h=Math.min(a<.5?r:r+1,this.points.length-1);return new g(e,c,h,this.points[h])}},7332:function(t){t.exports=function(t){var e=new Float32Array(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}},9823:function(t){t.exports=function(){var t=new Float32Array(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},7787:function(t){t.exports=function(t){var e=t[0],r=t[1],n=t[2],i=t[3],a=t[4],o=t[5],s=t[6],l=t[7],u=t[8],c=t[9],f=t[10],h=t[11],p=t[12],d=t[13],v=t[14],g=t[15];return(e*o-r*a)*(f*g-h*v)-(e*s-n*a)*(c*g-h*d)+(e*l-i*a)*(c*v-f*d)+(r*s-n*o)*(u*g-h*p)-(r*l-i*o)*(u*v-f*p)+(n*l-i*s)*(u*d-c*p)}},5950:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r+r,s=n+n,l=i+i,u=r*o,c=n*o,f=n*s,h=i*o,p=i*s,d=i*l,v=a*o,g=a*s,y=a*l;return t[0]=1-f-d,t[1]=c+y,t[2]=h-g,t[3]=0,t[4]=c-y,t[5]=1-u-d,t[6]=p+v,t[7]=0,t[8]=h+g,t[9]=p-v,t[10]=1-u-f,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},7280:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=n+n,l=i+i,u=a+a,c=n*s,f=n*l,h=n*u,p=i*l,d=i*u,v=a*u,g=o*s,y=o*l,m=o*u;return t[0]=1-(p+v),t[1]=f+m,t[2]=h-y,t[3]=0,t[4]=f-m,t[5]=1-(c+v),t[6]=d+g,t[7]=0,t[8]=h+y,t[9]=d-g,t[10]=1-(c+p),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}},9947:function(t){t.exports=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},7437:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],f=e[9],h=e[10],p=e[11],d=e[12],v=e[13],g=e[14],y=e[15],m=r*s-n*o,x=r*l-i*o,b=r*u-a*o,_=n*l-i*s,w=n*u-a*s,T=i*u-a*l,k=c*v-f*d,A=c*g-h*d,M=c*y-p*d,S=f*g-h*v,E=f*y-p*v,L=h*y-p*g,C=m*L-x*E+b*S+_*M-w*A+T*k;return C?(C=1/C,t[0]=(s*L-l*E+u*S)*C,t[1]=(i*E-n*L-a*S)*C,t[2]=(v*T-g*w+y*_)*C,t[3]=(h*w-f*T-p*_)*C,t[4]=(l*M-o*L-u*A)*C,t[5]=(r*L-i*M+a*A)*C,t[6]=(g*b-d*T-y*x)*C,t[7]=(c*T-h*b+p*x)*C,t[8]=(o*E-s*M+u*k)*C,t[9]=(n*M-r*E-a*k)*C,t[10]=(d*w-v*b+y*m)*C,t[11]=(f*b-c*w-p*m)*C,t[12]=(s*A-o*S-l*k)*C,t[13]=(r*S-n*A+i*k)*C,t[14]=(v*x-d*_-g*m)*C,t[15]=(c*_-f*x+h*m)*C,t):null}},3012:function(t,e,r){var n=r(9947);t.exports=function(t,e,r,i){var a,o,s,l,u,c,f,h,p,d,v=e[0],g=e[1],y=e[2],m=i[0],x=i[1],b=i[2],_=r[0],w=r[1],T=r[2];return Math.abs(v-_)<1e-6&&Math.abs(g-w)<1e-6&&Math.abs(y-T)<1e-6?n(t):(f=v-_,h=g-w,p=y-T,a=x*(p*=d=1/Math.sqrt(f*f+h*h+p*p))-b*(h*=d),o=b*(f*=d)-m*p,s=m*h-x*f,(d=Math.sqrt(a*a+o*o+s*s))?(a*=d=1/d,o*=d,s*=d):(a=0,o=0,s=0),l=h*s-p*o,u=p*a-f*s,c=f*o-h*a,(d=Math.sqrt(l*l+u*u+c*c))?(l*=d=1/d,u*=d,c*=d):(l=0,u=0,c=0),t[0]=a,t[1]=l,t[2]=f,t[3]=0,t[4]=o,t[5]=u,t[6]=h,t[7]=0,t[8]=s,t[9]=c,t[10]=p,t[11]=0,t[12]=-(a*v+o*g+s*y),t[13]=-(l*v+u*g+c*y),t[14]=-(f*v+h*g+p*y),t[15]=1,t)}},104:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],v=e[12],g=e[13],y=e[14],m=e[15],x=r[0],b=r[1],_=r[2],w=r[3];return t[0]=x*n+b*s+_*f+w*v,t[1]=x*i+b*l+_*h+w*g,t[2]=x*a+b*u+_*p+w*y,t[3]=x*o+b*c+_*d+w*m,x=r[4],b=r[5],_=r[6],w=r[7],t[4]=x*n+b*s+_*f+w*v,t[5]=x*i+b*l+_*h+w*g,t[6]=x*a+b*u+_*p+w*y,t[7]=x*o+b*c+_*d+w*m,x=r[8],b=r[9],_=r[10],w=r[11],t[8]=x*n+b*s+_*f+w*v,t[9]=x*i+b*l+_*h+w*g,t[10]=x*a+b*u+_*p+w*y,t[11]=x*o+b*c+_*d+w*m,x=r[12],b=r[13],_=r[14],w=r[15],t[12]=x*n+b*s+_*f+w*v,t[13]=x*i+b*l+_*h+w*g,t[14]=x*a+b*u+_*p+w*y,t[15]=x*o+b*c+_*d+w*m,t}},5268:function(t){t.exports=function(t,e,r,n,i,a,o){var s=1/(e-r),l=1/(n-i),u=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*u,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*l,t[14]=(o+a)*u,t[15]=1,t}},1120:function(t){t.exports=function(t,e,r,n,i){var a=1/Math.tan(e/2),o=1/(n-i);return t[0]=a/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(i+n)*o,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*i*n*o,t[15]=0,t}},4422:function(t){t.exports=function(t,e,r,n){var i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,w,T,k,A,M,S,E=n[0],L=n[1],C=n[2],P=Math.sqrt(E*E+L*L+C*C);return Math.abs(P)<1e-6?null:(E*=P=1/P,L*=P,C*=P,i=Math.sin(r),o=1-(a=Math.cos(r)),s=e[0],l=e[1],u=e[2],c=e[3],f=e[4],h=e[5],p=e[6],d=e[7],v=e[8],g=e[9],y=e[10],m=e[11],x=E*E*o+a,b=L*E*o+C*i,_=C*E*o-L*i,w=E*L*o-C*i,T=L*L*o+a,k=C*L*o+E*i,A=E*C*o+L*i,M=L*C*o-E*i,S=C*C*o+a,t[0]=s*x+f*b+v*_,t[1]=l*x+h*b+g*_,t[2]=u*x+p*b+y*_,t[3]=c*x+d*b+m*_,t[4]=s*w+f*T+v*k,t[5]=l*w+h*T+g*k,t[6]=u*w+p*T+y*k,t[7]=c*w+d*T+m*k,t[8]=s*A+f*M+v*S,t[9]=l*A+h*M+g*S,t[10]=u*A+p*M+y*S,t[11]=c*A+d*M+m*S,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}},6109:function(t){t.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[4],o=e[5],s=e[6],l=e[7],u=e[8],c=e[9],f=e[10],h=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=a*i+u*n,t[5]=o*i+c*n,t[6]=s*i+f*n,t[7]=l*i+h*n,t[8]=u*i-a*n,t[9]=c*i-o*n,t[10]=f*i-s*n,t[11]=h*i-l*n,t}},7115:function(t){t.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[8],c=e[9],f=e[10],h=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i-u*n,t[1]=o*i-c*n,t[2]=s*i-f*n,t[3]=l*i-h*n,t[8]=a*n+u*i,t[9]=o*n+c*i,t[10]=s*n+f*i,t[11]=l*n+h*i,t}},5240:function(t){t.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[4],c=e[5],f=e[6],h=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i+u*n,t[1]=o*i+c*n,t[2]=s*i+f*n,t[3]=l*i+h*n,t[4]=u*i-a*n,t[5]=c*i-o*n,t[6]=f*i-s*n,t[7]=h*i-l*n,t}},3668:function(t){t.exports=function(t,e,r){var n=r[0],i=r[1],a=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*a,t[9]=e[9]*a,t[10]=e[10]*a,t[11]=e[11]*a,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}},998:function(t){t.exports=function(t,e,r){var n,i,a,o,s,l,u,c,f,h,p,d,v=r[0],g=r[1],y=r[2];return e===t?(t[12]=e[0]*v+e[4]*g+e[8]*y+e[12],t[13]=e[1]*v+e[5]*g+e[9]*y+e[13],t[14]=e[2]*v+e[6]*g+e[10]*y+e[14],t[15]=e[3]*v+e[7]*g+e[11]*y+e[15]):(n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],t[0]=n,t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t[6]=u,t[7]=c,t[8]=f,t[9]=h,t[10]=p,t[11]=d,t[12]=n*v+s*g+f*y+e[12],t[13]=i*v+l*g+h*y+e[13],t[14]=a*v+u*g+p*y+e[14],t[15]=o*v+c*g+d*y+e[15]),t}},2142:function(t){t.exports=function(t,e){if(t===e){var r=e[1],n=e[2],i=e[3],a=e[6],o=e[7],s=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=a,t[11]=e[14],t[12]=i,t[13]=o,t[14]=s}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}},4340:function(t,e,r){"use strict";var n=r(957),i=r(7309);function a(t,e){for(var r=[0,0,0,0],n=0;n<4;++n)for(var i=0;i<4;++i)r[i]+=t[4*n+i]*e[n];return r}function o(t,e,r,n,i){for(var o=a(n,a(r,a(e,[t[0],t[1],t[2],1]))),s=0;s<3;++s)o[s]/=o[3];return[.5*i[0]*(1+o[0]),.5*i[1]*(1-o[1])]}function s(t,e){for(var r=[0,0,0],n=0;n<t.length;++n)for(var i=t[n],a=e[n],o=0;o<3;++o)r[o]+=a*i[o];return r}t.exports=function(t,e,r,a,l,u){if(1===t.length)return[0,t[0].slice()];for(var c=new Array(t.length),f=0;f<t.length;++f)c[f]=o(t[f],r,a,l,u);var h=0,p=1/0;for(f=0;f<c.length;++f){for(var d=0,v=0;v<2;++v)d+=Math.pow(c[f][v]-e[v],2);d<p&&(p=d,h=f)}var g=function(t,e){if(2===t.length){for(var r=0,a=0,o=0;o<2;++o)r+=Math.pow(e[o]-t[0][o],2),a+=Math.pow(e[o]-t[1][o],2);return(r=Math.sqrt(r))+(a=Math.sqrt(a))<1e-6?[1,0]:[a/(r+a),r/(a+r)]}if(3===t.length){var s=[0,0];return i(t[0],t[1],t[2],e,s),n(t,s)}return[]}(c,e),y=0;for(f=0;f<3;++f){if(g[f]<-.001||g[f]>1.0001)return null;y+=g[f]}return Math.abs(y-1)>.001?null:[h,s(t,g),g]}},2056:function(t,e,r){var n=r(6832),i=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position, normal;\nattribute vec4 color;\nattribute vec2 uv;\n\nuniform mat4 model\n           , view\n           , projection\n           , inverseModel;\nuniform vec3 eyePosition\n           , lightPosition;\n\nvarying vec3 f_normal\n           , f_lightDirection\n           , f_eyeDirection\n           , f_data;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvec4 project(vec3 p) {\n  return projection * view * model * vec4(p, 1.0);\n}\n\nvoid main() {\n  gl_Position      = project(position);\n\n  //Lighting geometry parameters\n  vec4 cameraCoordinate = view * vec4(position , 1.0);\n  cameraCoordinate.xyz /= cameraCoordinate.w;\n  f_lightDirection = lightPosition - cameraCoordinate.xyz;\n  f_eyeDirection   = eyePosition - cameraCoordinate.xyz;\n  f_normal  = normalize((vec4(normal, 0.0) * inverseModel).xyz);\n\n  f_color          = color;\n  f_data           = position;\n  f_uv             = uv;\n}\n"]),a=n(["#extension GL_OES_standard_derivatives : enable\n\nprecision highp float;\n#define GLSLIFY 1\n\nfloat beckmannDistribution(float x, float roughness) {\n  float NdotH = max(x, 0.0001);\n  float cos2Alpha = NdotH * NdotH;\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\n  float roughness2 = roughness * roughness;\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\n  return exp(tan2Alpha / roughness2) / denom;\n}\n\nfloat cookTorranceSpecular(\n  vec3 lightDirection,\n  vec3 viewDirection,\n  vec3 surfaceNormal,\n  float roughness,\n  float fresnel) {\n\n  float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\n  float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\n\n  //Half angle vector\n  vec3 H = normalize(lightDirection + viewDirection);\n\n  //Geometric term\n  float NdotH = max(dot(surfaceNormal, H), 0.0);\n  float VdotH = max(dot(viewDirection, H), 0.000001);\n  float LdotH = max(dot(lightDirection, H), 0.000001);\n  float G1 = (2.0 * NdotH * VdotN) / VdotH;\n  float G2 = (2.0 * NdotH * LdotN) / LdotH;\n  float G = min(1.0, min(G1, G2));\n  \n  //Distribution term\n  float D = beckmannDistribution(NdotH, roughness);\n\n  //Fresnel term\n  float F = pow(1.0 - VdotN, fresnel);\n\n  //Multiply terms and done\n  return  G * F * D / max(3.14159265 * VdotN, 0.000001);\n}\n\n//#pragma glslify: beckmann = require(glsl-specular-beckmann) // used in gl-surface3d\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float roughness\n            , fresnel\n            , kambient\n            , kdiffuse\n            , kspecular;\nuniform sampler2D texture;\n\nvarying vec3 f_normal\n           , f_lightDirection\n           , f_eyeDirection\n           , f_data;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n  if (f_color.a == 0.0 ||\n    outOfRange(clipBounds[0], clipBounds[1], f_data)\n  ) discard;\n\n  vec3 N = normalize(f_normal);\n  vec3 L = normalize(f_lightDirection);\n  vec3 V = normalize(f_eyeDirection);\n\n  if(gl_FrontFacing) {\n    N = -N;\n  }\n\n  float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\n  //float specular = max(0.0, beckmann(L, V, N, roughness)); // used in gl-surface3d\n\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\n\n  vec4 surfaceColor = vec4(f_color.rgb, 1.0) * texture2D(texture, f_uv);\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\n\n  gl_FragColor = litColor * f_color.a;\n}\n"]),o=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 uv;\n\nuniform mat4 model, view, projection;\n\nvarying vec4 f_color;\nvarying vec3 f_data;\nvarying vec2 f_uv;\n\nvoid main() {\n  gl_Position = projection * view * model * vec4(position, 1.0);\n  f_color = color;\n  f_data  = position;\n  f_uv    = uv;\n}"]),s=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform sampler2D texture;\nuniform float opacity;\n\nvarying vec4 f_color;\nvarying vec3 f_data;\nvarying vec2 f_uv;\n\nvoid main() {\n  if (outOfRange(clipBounds[0], clipBounds[1], f_data)) discard;\n\n  gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;\n}"]),l=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 uv;\nattribute float pointSize;\n\nuniform mat4 model, view, projection;\nuniform vec3 clipBounds[2];\n\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n    gl_Position = vec4(0.0, 0.0 ,0.0 ,0.0);\n  } else {\n    gl_Position = projection * view * model * vec4(position, 1.0);\n  }\n  gl_PointSize = pointSize;\n  f_color = color;\n  f_uv = uv;\n}"]),u=n(["precision highp float;\n#define GLSLIFY 1\n\nuniform sampler2D texture;\nuniform float opacity;\n\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n  vec2 pointR = gl_PointCoord.xy - vec2(0.5, 0.5);\n  if(dot(pointR, pointR) > 0.25) {\n    discard;\n  }\n  gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;\n}"]),c=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n  gl_Position = projection * view * model * vec4(position, 1.0);\n  f_id        = id;\n  f_position  = position;\n}"]),f=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3  clipBounds[2];\nuniform float pickId;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n\n  gl_FragColor = vec4(pickId, f_id.xyz);\n}"]),h=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3  position;\nattribute float pointSize;\nattribute vec4  id;\n\nuniform mat4 model, view, projection;\nuniform vec3 clipBounds[2];\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n    gl_Position = vec4(0.0, 0.0, 0.0, 0.0);\n  } else {\n    gl_Position  = projection * view * model * vec4(position, 1.0);\n    gl_PointSize = pointSize;\n  }\n  f_id         = id;\n  f_position   = position;\n}"]),p=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position;\n\nuniform mat4 model, view, projection;\n\nvoid main() {\n  gl_Position = projection * view * model * vec4(position, 1.0);\n}"]),d=n(["precision highp float;\n#define GLSLIFY 1\n\nuniform vec3 contourColor;\n\nvoid main() {\n  gl_FragColor = vec4(contourColor, 1.0);\n}\n"]);e.meshShader={vertex:i,fragment:a,attributes:[{name:"position",type:"vec3"},{name:"normal",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"}]},e.wireShader={vertex:o,fragment:s,attributes:[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"}]},e.pointShader={vertex:l,fragment:u,attributes:[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"},{name:"pointSize",type:"float"}]},e.pickShader={vertex:c,fragment:f,attributes:[{name:"position",type:"vec3"},{name:"id",type:"vec4"}]},e.pointPickShader={vertex:h,fragment:f,attributes:[{name:"position",type:"vec3"},{name:"pointSize",type:"float"},{name:"id",type:"vec4"}]},e.contourShader={vertex:p,fragment:d,attributes:[{name:"position",type:"vec3"}]}},8116:function(t,e,r){"use strict";var n=r(5158),i=r(5827),a=r(2944),o=r(8931),s=r(115),l=r(104),u=r(7437),c=r(5050),f=r(9156),h=r(7212),p=r(5306),d=r(2056),v=r(4340),g=d.meshShader,y=d.wireShader,m=d.pointShader,x=d.pickShader,b=d.pointPickShader,_=d.contourShader,w=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function T(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,T,k,A,M,S){this.gl=t,this.pixelRatio=1,this.cells=[],this.positions=[],this.intensity=[],this.texture=e,this.dirty=!0,this.triShader=r,this.lineShader=n,this.pointShader=i,this.pickShader=a,this.pointPickShader=o,this.contourShader=s,this.trianglePositions=l,this.triangleColors=c,this.triangleNormals=h,this.triangleUVs=f,this.triangleIds=u,this.triangleVAO=p,this.triangleCount=0,this.lineWidth=1,this.edgePositions=d,this.edgeColors=g,this.edgeUVs=y,this.edgeIds=v,this.edgeVAO=m,this.edgeCount=0,this.pointPositions=x,this.pointColors=_,this.pointUVs=T,this.pointSizes=k,this.pointIds=b,this.pointVAO=A,this.pointCount=0,this.contourLineWidth=1,this.contourPositions=M,this.contourVAO=S,this.contourCount=0,this.contourColor=[0,0,0],this.contourEnable=!0,this.pickVertex=!0,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this.hasAlpha=!1,this.opacityscale=!1,this._model=w,this._view=w,this._projection=w,this._resolution=[1,1]}var k=T.prototype;function A(t,e){if(!e)return 1;if(!e.length)return 1;for(var r=0;r<e.length;++r){if(e.length<2)return 1;if(e[r][0]===t)return e[r][1];if(e[r][0]>t&&r>0){var n=(e[r][0]-t)/(e[r][0]-e[r-1][0]);return e[r][1]*(1-n)+n*e[r-1][1]}}return 1}function M(t){var e=n(t,m.vertex,m.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.pointSize.location=4,e}function S(t){var e=n(t,x.vertex,x.fragment);return e.attributes.position.location=0,e.attributes.id.location=1,e}function E(t){var e=n(t,b.vertex,b.fragment);return e.attributes.position.location=0,e.attributes.id.location=1,e.attributes.pointSize.location=4,e}function L(t){var e=n(t,_.vertex,_.fragment);return e.attributes.position.location=0,e}k.isOpaque=function(){return!this.hasAlpha},k.isTransparent=function(){return this.hasAlpha},k.pickSlots=1,k.setPickBase=function(t){this.pickId=t},k.highlight=function(t){if(t&&this.contourEnable){for(var e=h(this.cells,this.intensity,t.intensity),r=e.cells,n=e.vertexIds,i=e.vertexWeights,a=r.length,o=p.mallocFloat32(6*a),s=0,l=0;l<a;++l)for(var u=r[l],c=0;c<2;++c){var f=u[0];2===u.length&&(f=u[c]);for(var d=n[f][0],v=n[f][1],g=i[f],y=1-g,m=this.positions[d],x=this.positions[v],b=0;b<3;++b)o[s++]=g*m[b]+y*x[b]}this.contourCount=s/3|0,this.contourPositions.update(o.subarray(0,s)),p.free(o)}else this.contourCount=0},k.update=function(t){t=t||{};var e=this.gl;this.dirty=!0,"contourEnable"in t&&(this.contourEnable=t.contourEnable),"contourColor"in t&&(this.contourColor=t.contourColor),"lineWidth"in t&&(this.lineWidth=t.lineWidth),"lightPosition"in t&&(this.lightPosition=t.lightPosition),this.hasAlpha=!1,"opacity"in t&&(this.opacity=t.opacity,this.opacity<1&&(this.hasAlpha=!0)),"opacityscale"in t&&(this.opacityscale=t.opacityscale,this.hasAlpha=!0),"ambient"in t&&(this.ambientLight=t.ambient),"diffuse"in t&&(this.diffuseLight=t.diffuse),"specular"in t&&(this.specularLight=t.specular),"roughness"in t&&(this.roughness=t.roughness),"fresnel"in t&&(this.fresnel=t.fresnel),t.texture?(this.texture.dispose(),this.texture=o(e,t.texture)):t.colormap&&(this.texture.shape=[256,256],this.texture.minFilter=e.LINEAR_MIPMAP_LINEAR,this.texture.magFilter=e.LINEAR,this.texture.setPixels(function(t,e){for(var r=f({colormap:t,nshades:256,format:"rgba"}),n=new Uint8Array(1024),i=0;i<256;++i){for(var a=r[i],o=0;o<3;++o)n[4*i+o]=a[o];n[4*i+3]=e?255*A(i/255,e):255*a[3]}return c(n,[256,256,4],[4,0,1])}(t.colormap,this.opacityscale)),this.texture.generateMipmap());var r=t.cells,n=t.positions;if(n&&r){var i=[],a=[],l=[],u=[],h=[],p=[],d=[],v=[],g=[],y=[],m=[],x=[],b=[],_=[];this.cells=r,this.positions=n;var w=t.vertexNormals,T=t.cellNormals,k=void 0===t.vertexNormalsEpsilon?1e-6:t.vertexNormalsEpsilon,M=void 0===t.faceNormalsEpsilon?1e-6:t.faceNormalsEpsilon;t.useFacetNormals&&!T&&(T=s.faceNormals(r,n,M)),T||w||(w=s.vertexNormals(r,n,k));var S=t.vertexColors,E=t.cellColors,L=t.meshColor||[1,1,1,1],C=t.vertexUVs,P=t.vertexIntensity,O=t.cellUVs,I=t.cellIntensity,D=1/0,z=-1/0;if(!C&&!O)if(P)if(t.vertexIntensityBounds)D=+t.vertexIntensityBounds[0],z=+t.vertexIntensityBounds[1];else for(var R=0;R<P.length;++R){var F=P[R];D=Math.min(D,F),z=Math.max(z,F)}else if(I)if(t.cellIntensityBounds)D=+t.cellIntensityBounds[0],z=+t.cellIntensityBounds[1];else for(R=0;R<I.length;++R)F=I[R],D=Math.min(D,F),z=Math.max(z,F);else for(R=0;R<n.length;++R)F=n[R][2],D=Math.min(D,F),z=Math.max(z,F);this.intensity=P||I||function(t){for(var e=t.length,r=new Array(e),n=0;n<e;++n)r[n]=t[n][2];return r}(n),this.pickVertex=!(I||E);var B=t.pointSizes,N=t.pointSize||1;for(this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],R=0;R<n.length;++R)for(var j=n[R],U=0;U<3;++U)!isNaN(j[U])&&isFinite(j[U])&&(this.bounds[0][U]=Math.min(this.bounds[0][U],j[U]),this.bounds[1][U]=Math.max(this.bounds[1][U],j[U]));var V=0,H=0,q=0;t:for(R=0;R<r.length;++R){var G=r[R];switch(G.length){case 1:for(j=n[Y=G[0]],U=0;U<3;++U)if(isNaN(j[U])||!isFinite(j[U]))continue t;y.push(j[0],j[1],j[2]),W=S?S[Y]:E?E[R]:L,this.opacityscale&&P?a.push(W[0],W[1],W[2],this.opacity*A((P[Y]-D)/(z-D),this.opacityscale)):3===W.length?m.push(W[0],W[1],W[2],this.opacity):(m.push(W[0],W[1],W[2],W[3]*this.opacity),W[3]<1&&(this.hasAlpha=!0)),X=C?C[Y]:P?[(P[Y]-D)/(z-D),0]:O?O[R]:I?[(I[R]-D)/(z-D),0]:[(j[2]-D)/(z-D),0],x.push(X[0],X[1]),B?b.push(B[Y]):b.push(N),_.push(R),q+=1;break;case 2:for(U=0;U<2;++U){j=n[Y=G[U]];for(var Z=0;Z<3;++Z)if(isNaN(j[Z])||!isFinite(j[Z]))continue t}for(U=0;U<2;++U)j=n[Y=G[U]],p.push(j[0],j[1],j[2]),W=S?S[Y]:E?E[R]:L,this.opacityscale&&P?a.push(W[0],W[1],W[2],this.opacity*A((P[Y]-D)/(z-D),this.opacityscale)):3===W.length?d.push(W[0],W[1],W[2],this.opacity):(d.push(W[0],W[1],W[2],W[3]*this.opacity),W[3]<1&&(this.hasAlpha=!0)),X=C?C[Y]:P?[(P[Y]-D)/(z-D),0]:O?O[R]:I?[(I[R]-D)/(z-D),0]:[(j[2]-D)/(z-D),0],v.push(X[0],X[1]),g.push(R);H+=1;break;case 3:for(U=0;U<3;++U)for(j=n[Y=G[U]],Z=0;Z<3;++Z)if(isNaN(j[Z])||!isFinite(j[Z]))continue t;for(U=0;U<3;++U){var Y,W,X,J;j=n[Y=G[2-U]],i.push(j[0],j[1],j[2]),(W=S?S[Y]:E?E[R]:L)?this.opacityscale&&P?a.push(W[0],W[1],W[2],this.opacity*A((P[Y]-D)/(z-D),this.opacityscale)):3===W.length?a.push(W[0],W[1],W[2],this.opacity):(a.push(W[0],W[1],W[2],W[3]*this.opacity),W[3]<1&&(this.hasAlpha=!0)):a.push(.5,.5,.5,1),X=C?C[Y]:P?[(P[Y]-D)/(z-D),0]:O?O[R]:I?[(I[R]-D)/(z-D),0]:[(j[2]-D)/(z-D),0],u.push(X[0],X[1]),J=w?w[Y]:T[R],l.push(J[0],J[1],J[2]),h.push(R)}V+=1}}this.pointCount=q,this.edgeCount=H,this.triangleCount=V,this.pointPositions.update(y),this.pointColors.update(m),this.pointUVs.update(x),this.pointSizes.update(b),this.pointIds.update(new Uint32Array(_)),this.edgePositions.update(p),this.edgeColors.update(d),this.edgeUVs.update(v),this.edgeIds.update(new Uint32Array(g)),this.trianglePositions.update(i),this.triangleColors.update(a),this.triangleUVs.update(u),this.triangleNormals.update(l),this.triangleIds.update(new Uint32Array(h))}},k.drawTransparent=k.draw=function(t){t=t||{};for(var e=this.gl,r=t.model||w,n=t.view||w,i=t.projection||w,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);var s={model:r,view:n,projection:i,inverseModel:w.slice(),clipBounds:a,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],contourColor:this.contourColor,texture:0};s.inverseModel=u(s.inverseModel,s.model),e.disable(e.CULL_FACE),this.texture.bind(0);var c=new Array(16);for(l(c,s.view,s.model),l(c,s.projection,c),u(c,c),o=0;o<3;++o)s.eyePosition[o]=c[12+o]/c[15];var f,h=c[15];for(o=0;o<3;++o)h+=this.lightPosition[o]*c[4*o+3];for(o=0;o<3;++o){for(var p=c[12+o],d=0;d<3;++d)p+=c[4*d+o]*this.lightPosition[d];s.lightPosition[o]=p/h}this.triangleCount>0&&((f=this.triShader).bind(),f.uniforms=s,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()),this.edgeCount>0&&this.lineWidth>0&&((f=this.lineShader).bind(),f.uniforms=s,this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind()),this.pointCount>0&&((f=this.pointShader).bind(),f.uniforms=s,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind()),this.contourEnable&&this.contourCount>0&&this.contourLineWidth>0&&((f=this.contourShader).bind(),f.uniforms=s,this.contourVAO.bind(),e.drawArrays(e.LINES,0,this.contourCount),this.contourVAO.unbind())},k.drawPick=function(t){t=t||{};for(var e=this.gl,r=t.model||w,n=t.view||w,i=t.projection||w,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);this._model=[].slice.call(r),this._view=[].slice.call(n),this._projection=[].slice.call(i),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s,l={model:r,view:n,projection:i,clipBounds:a,pickId:this.pickId/255};(s=this.pickShader).bind(),s.uniforms=l,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()),this.edgeCount>0&&(this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind()),this.pointCount>0&&((s=this.pointPickShader).bind(),s.uniforms=l,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind())},k.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;for(var e=t.value[0]+256*t.value[1]+65536*t.value[2],r=this.cells[e],n=this.positions,i=new Array(r.length),a=0;a<r.length;++a)i[a]=n[r[a]];var o=t.coord[0],s=t.coord[1];if(!this.pickVertex){var l=this.positions[r[0]],u=this.positions[r[1]],c=this.positions[r[2]],f=[(l[0]+u[0]+c[0])/3,(l[1]+u[1]+c[1])/3,(l[2]+u[2]+c[2])/3];return{_cellCenter:!0,position:[o,s],index:e,cell:r,cellId:e,intensity:this.intensity[e],dataCoordinate:f}}var h=v(i,[o*this.pixelRatio,this._resolution[1]-s*this.pixelRatio],this._model,this._view,this._projection,this._resolution);if(!h)return null;var p=h[2],d=0;for(a=0;a<r.length;++a)d+=p[a]*this.intensity[r[a]];return{position:h[1],index:r[h[0]],cell:r,cellId:e,intensity:d,dataCoordinate:this.positions[r[h[0]]]}},k.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.lineShader.dispose(),this.pointShader.dispose(),this.pickShader.dispose(),this.pointPickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleNormals.dispose(),this.triangleIds.dispose(),this.edgeVAO.dispose(),this.edgePositions.dispose(),this.edgeColors.dispose(),this.edgeUVs.dispose(),this.edgeIds.dispose(),this.pointVAO.dispose(),this.pointPositions.dispose(),this.pointColors.dispose(),this.pointUVs.dispose(),this.pointSizes.dispose(),this.pointIds.dispose(),this.contourVAO.dispose(),this.contourPositions.dispose(),this.contourShader.dispose()},t.exports=function(t,e){if(1===arguments.length&&(t=(e=t).gl),!(t.getExtension("OES_standard_derivatives")||t.getExtension("MOZ_OES_standard_derivatives")||t.getExtension("WEBKIT_OES_standard_derivatives")))throw new Error("derivatives not supported");var r=function(t){var e=n(t,g.vertex,g.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.normal.location=4,e}(t),s=function(t){var e=n(t,y.vertex,y.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e}(t),l=M(t),u=S(t),f=E(t),h=L(t),p=o(t,c(new Uint8Array([255,255,255,255]),[1,1,4]));p.generateMipmap(),p.minFilter=t.LINEAR_MIPMAP_LINEAR,p.magFilter=t.LINEAR;var d=i(t),v=i(t),m=i(t),x=i(t),b=i(t),_=a(t,[{buffer:d,type:t.FLOAT,size:3},{buffer:b,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:v,type:t.FLOAT,size:4},{buffer:m,type:t.FLOAT,size:2},{buffer:x,type:t.FLOAT,size:3}]),w=i(t),k=i(t),A=i(t),C=i(t),P=a(t,[{buffer:w,type:t.FLOAT,size:3},{buffer:C,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:k,type:t.FLOAT,size:4},{buffer:A,type:t.FLOAT,size:2}]),O=i(t),I=i(t),D=i(t),z=i(t),R=i(t),F=a(t,[{buffer:O,type:t.FLOAT,size:3},{buffer:R,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:I,type:t.FLOAT,size:4},{buffer:D,type:t.FLOAT,size:2},{buffer:z,type:t.FLOAT,size:1}]),B=i(t),N=new T(t,p,r,s,l,u,f,h,d,b,v,m,x,_,w,C,k,A,P,O,R,I,D,z,F,B,a(t,[{buffer:B,type:t.FLOAT,size:3}]));return N.update(e),N}},4554:function(t,e,r){"use strict";t.exports=function(t){var e=t.gl;return new o(t,n(e,[0,0,0,1,1,0,1,1]),i(e,a.boxVert,a.lineFrag))};var n=r(5827),i=r(5158),a=r(2709);function o(t,e,r){this.plot=t,this.vbo=e,this.shader=r}var s,l,u=o.prototype;u.bind=function(){var t=this.shader;this.vbo.bind(),this.shader.bind(),t.attributes.coord.pointer(),t.uniforms.screenBox=this.plot.screenBox},u.drawBox=(s=[0,0],l=[0,0],function(t,e,r,n,i){var a=this.plot,o=this.shader,u=a.gl;s[0]=t,s[1]=e,l[0]=r,l[1]=n,o.uniforms.lo=s,o.uniforms.hi=l,o.uniforms.color=i,u.drawArrays(u.TRIANGLE_STRIP,0,4)}),u.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},3016:function(t,e,r){"use strict";t.exports=function(t){var e=t.gl;return new s(t,n(e),i(e,o.gridVert,o.gridFrag),i(e,o.tickVert,o.gridFrag))};var n=r(5827),i=r(5158),a=r(5070),o=r(2709);function s(t,e,r,n){this.plot=t,this.vbo=e,this.shader=r,this.tickShader=n,this.ticks=[[],[]]}function l(t,e){return t-e}var u,c,f,h,p,d=s.prototype;d.draw=(u=[0,0],c=[0,0],f=[0,0],function(){for(var t=this.plot,e=this.vbo,r=this.shader,n=this.ticks,i=t.gl,a=t._tickBounds,o=t.dataBox,s=t.viewBox,l=t.gridLineWidth,h=t.gridLineColor,p=t.gridLineEnable,d=t.pixelRatio,v=0;v<2;++v){var g=a[v],y=a[v+2]-g,m=.5*(o[v+2]+o[v]),x=o[v+2]-o[v];c[v]=2*y/x,u[v]=2*(g-m)/x}r.bind(),e.bind(),r.attributes.dataCoord.pointer(),r.uniforms.dataShift=u,r.uniforms.dataScale=c;var b=0;for(v=0;v<2;++v){f[0]=f[1]=0,f[v]=1,r.uniforms.dataAxis=f,r.uniforms.lineWidth=l[v]/(s[v+2]-s[v])*d,r.uniforms.color=h[v];var _=6*n[v].length;p[v]&&_&&i.drawArrays(i.TRIANGLES,b,_),b+=_}}),d.drawTickMarks=function(){var t=[0,0],e=[0,0],r=[1,0],n=[0,1],i=[0,0],o=[0,0];return function(){for(var s=this.plot,u=this.vbo,c=this.tickShader,f=this.ticks,h=s.gl,p=s._tickBounds,d=s.dataBox,v=s.viewBox,g=s.pixelRatio,y=s.screenBox,m=y[2]-y[0],x=y[3]-y[1],b=v[2]-v[0],_=v[3]-v[1],w=0;w<2;++w){var T=p[w],k=p[w+2]-T,A=.5*(d[w+2]+d[w]),M=d[w+2]-d[w];e[w]=2*k/M,t[w]=2*(T-A)/M}e[0]*=b/m,t[0]*=b/m,e[1]*=_/x,t[1]*=_/x,c.bind(),u.bind(),c.attributes.dataCoord.pointer();var S=c.uniforms;S.dataShift=t,S.dataScale=e;var E=s.tickMarkLength,L=s.tickMarkWidth,C=s.tickMarkColor,P=6*f[0].length,O=Math.min(a.ge(f[0],(d[0]-p[0])/(p[2]-p[0]),l),f[0].length),I=Math.min(a.gt(f[0],(d[2]-p[0])/(p[2]-p[0]),l),f[0].length),D=0+6*O,z=6*Math.max(0,I-O),R=Math.min(a.ge(f[1],(d[1]-p[1])/(p[3]-p[1]),l),f[1].length),F=Math.min(a.gt(f[1],(d[3]-p[1])/(p[3]-p[1]),l),f[1].length),B=P+6*R,N=6*Math.max(0,F-R);i[0]=2*(v[0]-E[1])/m-1,i[1]=(v[3]+v[1])/x-1,o[0]=E[1]*g/m,o[1]=L[1]*g/x,N&&(S.color=C[1],S.tickScale=o,S.dataAxis=n,S.screenOffset=i,h.drawArrays(h.TRIANGLES,B,N)),i[0]=(v[2]+v[0])/m-1,i[1]=2*(v[1]-E[0])/x-1,o[0]=L[0]*g/m,o[1]=E[0]*g/x,z&&(S.color=C[0],S.tickScale=o,S.dataAxis=r,S.screenOffset=i,h.drawArrays(h.TRIANGLES,D,z)),i[0]=2*(v[2]+E[3])/m-1,i[1]=(v[3]+v[1])/x-1,o[0]=E[3]*g/m,o[1]=L[3]*g/x,N&&(S.color=C[3],S.tickScale=o,S.dataAxis=n,S.screenOffset=i,h.drawArrays(h.TRIANGLES,B,N)),i[0]=(v[2]+v[0])/m-1,i[1]=2*(v[3]+E[2])/x-1,o[0]=L[2]*g/m,o[1]=E[2]*g/x,z&&(S.color=C[2],S.tickScale=o,S.dataAxis=r,S.screenOffset=i,h.drawArrays(h.TRIANGLES,D,z))}}(),d.update=(h=[1,1,-1,-1,1,-1],p=[1,-1,1,1,-1,-1],function(t){for(var e=t.ticks,r=t.bounds,n=new Float32Array(18*(e[0].length+e[1].length)),i=(this.plot.zeroLineEnable,0),a=[[],[]],o=0;o<2;++o)for(var s=a[o],l=e[o],u=r[o],c=r[o+2],f=0;f<l.length;++f){var d=(l[f].x-u)/(c-u);s.push(d);for(var v=0;v<6;++v)n[i++]=d,n[i++]=h[v],n[i++]=p[v]}this.ticks=a,this.vbo.update(n)}),d.dispose=function(){this.vbo.dispose(),this.shader.dispose(),this.tickShader.dispose()}},1154:function(t,e,r){"use strict";t.exports=function(t){var e=t.gl;return new o(t,n(e,[-1,-1,-1,1,1,-1,1,1]),i(e,a.lineVert,a.lineFrag))};var n=r(5827),i=r(5158),a=r(2709);function o(t,e,r){this.plot=t,this.vbo=e,this.shader=r}var s,l,u=o.prototype;u.bind=function(){var t=this.shader;this.vbo.bind(),this.shader.bind(),t.attributes.coord.pointer(),t.uniforms.screenBox=this.plot.screenBox},u.drawLine=(s=[0,0],l=[0,0],function(t,e,r,n,i,a){var o=this.plot,u=this.shader,c=o.gl;s[0]=t,s[1]=e,l[0]=r,l[1]=n,u.uniforms.start=s,u.uniforms.end=l,u.uniforms.width=i*o.pixelRatio,u.uniforms.color=a,c.drawArrays(c.TRIANGLE_STRIP,0,4)}),u.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},2709:function(t,e,r){"use strict";var n=r(6832),i=n(["precision lowp float;\n#define GLSLIFY 1\nuniform vec4 color;\nvoid main() {\n  gl_FragColor = vec4(color.xyz * color.w, color.w);\n}\n"]);t.exports={lineVert:n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 coord;\n\nuniform vec4 screenBox;\nuniform vec2 start, end;\nuniform float width;\n\nvec2 perp(vec2 v) {\n  return vec2(v.y, -v.x);\n}\n\nvec2 screen(vec2 v) {\n  return 2.0 * (v - screenBox.xy) / (screenBox.zw - screenBox.xy) - 1.0;\n}\n\nvoid main() {\n  vec2 delta = normalize(perp(start - end));\n  vec2 offset = mix(start, end, 0.5 * (coord.y+1.0));\n  gl_Position = vec4(screen(offset + 0.5 * width * delta * coord.x), 0, 1);\n}\n"]),lineFrag:i,textVert:n(["#define GLSLIFY 1\nattribute vec3 textCoordinate;\n\nuniform vec2 dataScale, dataShift, dataAxis, screenOffset, textScale;\nuniform float angle;\n\nvoid main() {\n  float dataOffset  = textCoordinate.z;\n  vec2 glyphOffset  = textCoordinate.xy;\n  mat2 glyphMatrix = mat2(cos(angle), sin(angle), -sin(angle), cos(angle));\n  vec2 screenCoordinate = dataAxis * (dataScale * dataOffset + dataShift) +\n    glyphMatrix * glyphOffset * textScale + screenOffset;\n  gl_Position = vec4(screenCoordinate, 0, 1);\n}\n"]),textFrag:i,gridVert:n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 dataCoord;\n\nuniform vec2 dataAxis, dataShift, dataScale;\nuniform float lineWidth;\n\nvoid main() {\n  vec2 pos = dataAxis * (dataScale * dataCoord.x + dataShift);\n  pos += 10.0 * dataCoord.y * vec2(dataAxis.y, -dataAxis.x) + dataCoord.z * lineWidth;\n  gl_Position = vec4(pos, 0, 1);\n}\n"]),gridFrag:i,boxVert:n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 coord;\n\nuniform vec4 screenBox;\nuniform vec2 lo, hi;\n\nvec2 screen(vec2 v) {\n  return 2.0 * (v - screenBox.xy) / (screenBox.zw - screenBox.xy) - 1.0;\n}\n\nvoid main() {\n  gl_Position = vec4(screen(mix(lo, hi, coord)), 0, 1);\n}\n"]),tickVert:n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 dataCoord;\n\nuniform vec2 dataAxis, dataShift, dataScale, screenOffset, tickScale;\n\nvoid main() {\n  vec2 pos = dataAxis * (dataScale * dataCoord.x + dataShift);\n  gl_Position = vec4(pos + tickScale*dataCoord.yz + screenOffset, 0, 1);\n}\n"])}},5613:function(t,e,r){"use strict";t.exports=function(t){var e=t.gl;return new l(t,n(e),i(e,s.textVert,s.textFrag))};var n=r(5827),i=r(5158),a=r(6946),o=r(5070),s=r(2709);function l(t,e,r){this.plot=t,this.vbo=e,this.shader=r,this.tickOffset=[[],[]],this.tickX=[[],[]],this.labelOffset=[0,0],this.labelCount=[0,0]}var u,c,f,h,p,d,v=l.prototype;v.drawTicks=(u=[0,0],c=[0,0],f=[0,0],function(t){var e=this.plot,r=this.shader,n=this.tickX[t],i=this.tickOffset[t],a=e.gl,s=e.viewBox,l=e.dataBox,h=e.screenBox,p=e.pixelRatio,d=e.tickEnable,v=e.tickPad,g=e.tickColor,y=e.tickAngle,m=e.labelEnable,x=e.labelPad,b=e.labelColor,_=e.labelAngle,w=this.labelOffset[t],T=this.labelCount[t],k=o.lt(n,l[t]),A=o.le(n,l[t+2]);u[0]=u[1]=0,u[t]=1,c[t]=(s[2+t]+s[t])/(h[2+t]-h[t])-1;var M=2/h[2+(1^t)]-h[1^t];c[1^t]=M*s[1^t]-1,d[t]&&(c[1^t]-=M*p*v[t],k<A&&i[A]>i[k]&&(r.uniforms.dataAxis=u,r.uniforms.screenOffset=c,r.uniforms.color=g[t],r.uniforms.angle=y[t],a.drawArrays(a.TRIANGLES,i[k],i[A]-i[k]))),m[t]&&T&&(c[1^t]-=M*p*x[t],r.uniforms.dataAxis=f,r.uniforms.screenOffset=c,r.uniforms.color=b[t],r.uniforms.angle=_[t],a.drawArrays(a.TRIANGLES,w,T)),c[1^t]=M*s[2+(1^t)]-1,d[t+2]&&(c[1^t]+=M*p*v[t+2],k<A&&i[A]>i[k]&&(r.uniforms.dataAxis=u,r.uniforms.screenOffset=c,r.uniforms.color=g[t+2],r.uniforms.angle=y[t+2],a.drawArrays(a.TRIANGLES,i[k],i[A]-i[k]))),m[t+2]&&T&&(c[1^t]+=M*p*x[t+2],r.uniforms.dataAxis=f,r.uniforms.screenOffset=c,r.uniforms.color=b[t+2],r.uniforms.angle=_[t+2],a.drawArrays(a.TRIANGLES,w,T))}),v.drawTitle=function(){var t=[0,0],e=[0,0];return function(){var r=this.plot,n=this.shader,i=r.gl,a=r.screenBox,o=r.titleCenter,s=r.titleAngle,l=r.titleColor,u=r.pixelRatio;if(this.titleCount){for(var c=0;c<2;++c)e[c]=2*(o[c]*u-a[c])/(a[2+c]-a[c])-1;n.bind(),n.uniforms.dataAxis=t,n.uniforms.screenOffset=e,n.uniforms.angle=s,n.uniforms.color=l,i.drawArrays(i.TRIANGLES,this.titleOffset,this.titleCount)}}}(),v.bind=(h=[0,0],p=[0,0],d=[0,0],function(){var t=this.plot,e=this.shader,r=t._tickBounds,n=t.dataBox,i=t.screenBox,a=t.viewBox;e.bind();for(var o=0;o<2;++o){var s=r[o],l=r[o+2]-s,u=.5*(n[o+2]+n[o]),c=n[o+2]-n[o],f=a[o],v=a[o+2]-f,g=i[o],y=i[o+2]-g;p[o]=2*l/c*v/y,h[o]=2*(s-u)/c*v/y}d[1]=2*t.pixelRatio/(i[3]-i[1]),d[0]=d[1]*(i[3]-i[1])/(i[2]-i[0]),e.uniforms.dataScale=p,e.uniforms.dataShift=h,e.uniforms.textScale=d,this.vbo.bind(),e.attributes.textCoordinate.pointer()}),v.update=function(t){var e,r,n,i,o,s=[],l=t.ticks,u=t.bounds;for(o=0;o<2;++o){var c=[Math.floor(s.length/3)],f=[-1/0],h=l[o];for(e=0;e<h.length;++e){var p=h[e],d=p.x,v=p.text,g=p.font||"sans-serif";i=p.fontSize||12;for(var y=1/(u[o+2]-u[o]),m=u[o],x=v.split("\n"),b=0;b<x.length;b++)for(n=a(g,x[b]).data,r=0;r<n.length;r+=2)s.push(n[r]*i,-n[r+1]*i-b*i*1.2,(d-m)*y);c.push(Math.floor(s.length/3)),f.push(d)}this.tickOffset[o]=c,this.tickX[o]=f}for(o=0;o<2;++o){for(this.labelOffset[o]=Math.floor(s.length/3),n=a(t.labelFont[o],t.labels[o],{textAlign:"center"}).data,i=t.labelSize[o],e=0;e<n.length;e+=2)s.push(n[e]*i,-n[e+1]*i,0);this.labelCount[o]=Math.floor(s.length/3)-this.labelOffset[o]}for(this.titleOffset=Math.floor(s.length/3),n=a(t.titleFont,t.title).data,i=t.titleSize,e=0;e<n.length;e+=2)s.push(n[e]*i,-n[e+1]*i,0);this.titleCount=Math.floor(s.length/3)-this.titleOffset,this.vbo.update(s)},v.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},2117:function(t,e,r){"use strict";t.exports=function(t){var e=t.gl,r=new l(e,n(e,[e.drawingBufferWidth,e.drawingBufferHeight]));return r.grid=i(r),r.text=a(r),r.line=o(r),r.box=s(r),r.update(t),r};var n=r(2611),i=r(3016),a=r(5613),o=r(1154),s=r(4554);function l(t,e){this.gl=t,this.pickBuffer=e,this.screenBox=[0,0,t.drawingBufferWidth,t.drawingBufferHeight],this.viewBox=[0,0,0,0],this.dataBox=[-10,-10,10,10],this.gridLineEnable=[!0,!0],this.gridLineWidth=[1,1],this.gridLineColor=[[0,0,0,1],[0,0,0,1]],this.pixelRatio=1,this.tickMarkLength=[0,0,0,0],this.tickMarkWidth=[0,0,0,0],this.tickMarkColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[15,15,15,15],this.tickAngle=[0,0,0,0],this.tickEnable=[!0,!0,!0,!0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[15,15,15,15],this.labelAngle=[0,Math.PI/2,0,3*Math.PI/2],this.labelEnable=[!0,!0,!0,!0],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.titleCenter=[0,0],this.titleEnable=!0,this.titleAngle=0,this.titleColor=[0,0,0,1],this.borderColor=[0,0,0,0],this.backgroundColor=[0,0,0,0],this.zeroLineEnable=[!0,!0],this.zeroLineWidth=[4,4],this.zeroLineColor=[[0,0,0,1],[0,0,0,1]],this.borderLineEnable=[!0,!0,!0,!0],this.borderLineWidth=[2,2,2,2],this.borderLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.grid=null,this.text=null,this.line=null,this.box=null,this.objects=[],this.overlays=[],this._tickBounds=[1/0,1/0,-1/0,-1/0],this.static=!1,this.dirty=!1,this.pickDirty=!1,this.pickDelay=120,this.pickRadius=10,this._pickTimeout=null,this._drawPick=this.drawPick.bind(this),this._depthCounter=0}var u=l.prototype;function c(t){for(var e=t.slice(),r=0;r<e.length;++r)e[r]=e[r].slice();return e}function f(t,e){return t.x-e.x}u.setDirty=function(){this.dirty=this.pickDirty=!0},u.setOverlayDirty=function(){this.dirty=!0},u.nextDepthValue=function(){return this._depthCounter++/65536},u.draw=function(){var t=this.gl,e=this.screenBox,r=this.viewBox,n=this.dataBox,i=this.pixelRatio,a=this.grid,o=this.line,s=this.text,l=this.objects;if(this._depthCounter=0,this.pickDirty&&(this._pickTimeout&&clearTimeout(this._pickTimeout),this.pickDirty=!1,this._pickTimeout=setTimeout(this._drawPick,this.pickDelay)),this.dirty){if(this.dirty=!1,t.bindFramebuffer(t.FRAMEBUFFER,null),t.enable(t.SCISSOR_TEST),t.disable(t.DEPTH_TEST),t.depthFunc(t.LESS),t.depthMask(!1),t.enable(t.BLEND),t.blendEquation(t.FUNC_ADD,t.FUNC_ADD),t.blendFunc(t.ONE,t.ONE_MINUS_SRC_ALPHA),this.borderColor){t.scissor(e[0],e[1],e[2]-e[0],e[3]-e[1]);var u=this.borderColor;t.clearColor(u[0]*u[3],u[1]*u[3],u[2]*u[3],u[3]),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT)}t.scissor(r[0],r[1],r[2]-r[0],r[3]-r[1]),t.viewport(r[0],r[1],r[2]-r[0],r[3]-r[1]);var c=this.backgroundColor;t.clearColor(c[0]*c[3],c[1]*c[3],c[2]*c[3],c[3]),t.clear(t.COLOR_BUFFER_BIT),a.draw();var f=this.zeroLineEnable,h=this.zeroLineColor,p=this.zeroLineWidth;if(f[0]||f[1]){o.bind();for(var d=0;d<2;++d)if(f[d]&&n[d]<=0&&n[d+2]>=0){var v=e[d]-n[d]*(e[d+2]-e[d])/(n[d+2]-n[d]);0===d?o.drawLine(v,e[1],v,e[3],p[d],h[d]):o.drawLine(e[0],v,e[2],v,p[d],h[d])}}for(d=0;d<l.length;++d)l[d].draw();t.viewport(e[0],e[1],e[2]-e[0],e[3]-e[1]),t.scissor(e[0],e[1],e[2]-e[0],e[3]-e[1]),this.grid.drawTickMarks(),o.bind();var g=this.borderLineEnable,y=this.borderLineWidth,m=this.borderLineColor;for(g[1]&&o.drawLine(r[0],r[1]-.5*y[1]*i,r[0],r[3]+.5*y[3]*i,y[1],m[1]),g[0]&&o.drawLine(r[0]-.5*y[0]*i,r[1],r[2]+.5*y[2]*i,r[1],y[0],m[0]),g[3]&&o.drawLine(r[2],r[1]-.5*y[1]*i,r[2],r[3]+.5*y[3]*i,y[3],m[3]),g[2]&&o.drawLine(r[0]-.5*y[0]*i,r[3],r[2]+.5*y[2]*i,r[3],y[2],m[2]),s.bind(),d=0;d<2;++d)s.drawTicks(d);this.titleEnable&&s.drawTitle();var x=this.overlays;for(d=0;d<x.length;++d)x[d].draw();t.disable(t.SCISSOR_TEST),t.disable(t.BLEND),t.depthMask(!0)}},u.drawPick=function(){if(!this.static){var t=this.pickBuffer;this.gl,this._pickTimeout=null,t.begin();for(var e=1,r=this.objects,n=0;n<r.length;++n)e=r[n].drawPick(e);t.end()}},u.pick=function(t,e){if(!this.static){var r=this.pixelRatio,n=this.pickPixelRatio,i=this.viewBox,a=0|Math.round((t-i[0]/r)*n),o=0|Math.round((e-i[1]/r)*n),s=this.pickBuffer.query(a,o,this.pickRadius);if(!s)return null;for(var l=s.id+(s.value[0]<<8)+(s.value[1]<<16)+(s.value[2]<<24),u=this.objects,c=0;c<u.length;++c){var f=u[c].pick(a,o,l);if(f)return f}return null}},u.setScreenBox=function(t){var e=this.screenBox,r=this.pixelRatio;e[0]=0|Math.round(t[0]*r),e[1]=0|Math.round(t[1]*r),e[2]=0|Math.round(t[2]*r),e[3]=0|Math.round(t[3]*r),this.setDirty()},u.setDataBox=function(t){var e=this.dataBox;(e[0]!==t[0]||e[1]!==t[1]||e[2]!==t[2]||e[3]!==t[3])&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],this.setDirty())},u.setViewBox=function(t){var e=this.pixelRatio,r=this.viewBox;r[0]=0|Math.round(t[0]*e),r[1]=0|Math.round(t[1]*e),r[2]=0|Math.round(t[2]*e),r[3]=0|Math.round(t[3]*e);var n=this.pickPixelRatio;this.pickBuffer.shape=[0|Math.round((t[2]-t[0])*n),0|Math.round((t[3]-t[1])*n)],this.setDirty()},u.update=function(t){t=t||{};var e=this.gl;this.pixelRatio=t.pixelRatio||1;var r=this.pixelRatio;this.pickPixelRatio=Math.max(r,1),this.setScreenBox(t.screenBox||[0,0,e.drawingBufferWidth/r,e.drawingBufferHeight/r]),this.screenBox,this.setViewBox(t.viewBox||[.125*(this.screenBox[2]-this.screenBox[0])/r,.125*(this.screenBox[3]-this.screenBox[1])/r,.875*(this.screenBox[2]-this.screenBox[0])/r,.875*(this.screenBox[3]-this.screenBox[1])/r]);var n=this.viewBox,i=(n[2]-n[0])/(n[3]-n[1]);this.setDataBox(t.dataBox||[-10,-10/i,10,10/i]),this.borderColor=!1!==t.borderColor&&(t.borderColor||[0,0,0,0]).slice(),this.backgroundColor=(t.backgroundColor||[0,0,0,0]).slice(),this.gridLineEnable=(t.gridLineEnable||[!0,!0]).slice(),this.gridLineWidth=(t.gridLineWidth||[1,1]).slice(),this.gridLineColor=c(t.gridLineColor||[[.5,.5,.5,1],[.5,.5,.5,1]]),this.zeroLineEnable=(t.zeroLineEnable||[!0,!0]).slice(),this.zeroLineWidth=(t.zeroLineWidth||[4,4]).slice(),this.zeroLineColor=c(t.zeroLineColor||[[0,0,0,1],[0,0,0,1]]),this.tickMarkLength=(t.tickMarkLength||[0,0,0,0]).slice(),this.tickMarkWidth=(t.tickMarkWidth||[0,0,0,0]).slice(),this.tickMarkColor=c(t.tickMarkColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.titleCenter=(t.titleCenter||[.5*(n[0]+n[2])/r,(n[3]+120)/r]).slice(),this.titleEnable=!("titleEnable"in t)||!!t.titleEnable,this.titleAngle=t.titleAngle||0,this.titleColor=(t.titleColor||[0,0,0,1]).slice(),this.labelPad=(t.labelPad||[15,15,15,15]).slice(),this.labelAngle=(t.labelAngle||[0,Math.PI/2,0,3*Math.PI/2]).slice(),this.labelEnable=(t.labelEnable||[!0,!0,!0,!0]).slice(),this.labelColor=c(t.labelColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.tickPad=(t.tickPad||[15,15,15,15]).slice(),this.tickAngle=(t.tickAngle||[0,0,0,0]).slice(),this.tickEnable=(t.tickEnable||[!0,!0,!0,!0]).slice(),this.tickColor=c(t.tickColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.borderLineEnable=(t.borderLineEnable||[!0,!0,!0,!0]).slice(),this.borderLineWidth=(t.borderLineWidth||[2,2,2,2]).slice(),this.borderLineColor=c(t.borderLineColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]);var a=t.ticks||[[],[]],o=this._tickBounds;o[0]=o[1]=1/0,o[2]=o[3]=-1/0;for(var s=0;s<2;++s){var l=a[s].slice(0);0!==l.length&&(l.sort(f),o[s]=Math.min(o[s],l[0].x),o[s+2]=Math.max(o[s+2],l[l.length-1].x))}this.grid.update({bounds:o,ticks:a}),this.text.update({bounds:o,ticks:a,labels:t.labels||["x","y"],labelSize:t.labelSize||[12,12],labelFont:t.labelFont||["sans-serif","sans-serif"],title:t.title||"",titleSize:t.titleSize||18,titleFont:t.titleFont||"sans-serif"}),this.static=!!t.static,this.setDirty()},u.dispose=function(){this.box.dispose(),this.grid.dispose(),this.text.dispose(),this.line.dispose();for(var t=this.objects.length-1;t>=0;--t)this.objects[t].dispose();for(this.objects.length=0,t=this.overlays.length-1;t>=0;--t)this.overlays[t].dispose();this.overlays.length=0,this.gl=null},u.addObject=function(t){this.objects.indexOf(t)<0&&(this.objects.push(t),this.setDirty())},u.removeObject=function(t){for(var e=this.objects,r=0;r<e.length;++r)if(e[r]===t){e.splice(r,1),this.setDirty();break}},u.addOverlay=function(t){this.overlays.indexOf(t)<0&&(this.overlays.push(t),this.setOverlayDirty())},u.removeOverlay=function(t){for(var e=this.overlays,r=0;r<e.length;++r)if(e[r]===t){e.splice(r,1),this.setOverlayDirty();break}}},4296:function(t,e,r){"use strict";t.exports=function(t,e){t=t||document.body;var r=[.01,1/0];"distanceLimits"in(e=e||{})&&(r[0]=e.distanceLimits[0],r[1]=e.distanceLimits[1]),"zoomMin"in e&&(r[0]=e.zoomMin),"zoomMax"in e&&(r[1]=e.zoomMax);var u=i({center:e.center||[0,0,0],up:e.up||[0,1,0],eye:e.eye||[0,0,10],mode:e.mode||"orbit",distanceLimits:r}),c=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],f=0,h=t.clientWidth,p=t.clientHeight,d={keyBindingMode:"rotate",enableWheel:!0,view:u,element:t,delay:e.delay||16,rotateSpeed:e.rotateSpeed||1,zoomSpeed:e.zoomSpeed||1,translateSpeed:e.translateSpeed||1,flipX:!!e.flipX,flipY:!!e.flipY,modes:u.modes,_ortho:e._ortho||e.projection&&"orthographic"===e.projection.type||!1,tick:function(){var e=n(),r=this.delay,i=e-2*r;u.idle(e-r),u.recalcMatrix(i),u.flush(e-(100+2*r));for(var a=!0,o=u.computedMatrix,s=0;s<16;++s)a=a&&c[s]===o[s],c[s]=o[s];var l=t.clientWidth===h&&t.clientHeight===p;return h=t.clientWidth,p=t.clientHeight,a?!l:(f=Math.exp(u.computedRadius[0]),!0)},lookAt:function(t,e,r){u.lookAt(u.lastT(),t,e,r)},rotate:function(t,e,r){u.rotate(u.lastT(),t,e,r)},pan:function(t,e,r){u.pan(u.lastT(),t,e,r)},translate:function(t,e,r){u.translate(u.lastT(),t,e,r)}};return Object.defineProperties(d,{matrix:{get:function(){return u.computedMatrix},set:function(t){return u.setMatrix(u.lastT(),t),u.computedMatrix},enumerable:!0},mode:{get:function(){return u.getMode()},set:function(t){var e=u.computedUp.slice(),r=u.computedEye.slice(),i=u.computedCenter.slice();if(u.setMode(t),"turntable"===t){var a=n();u._active.lookAt(a,r,i,e),u._active.lookAt(a+500,r,i,[0,0,1]),u._active.flush(a)}return u.getMode()},enumerable:!0},center:{get:function(){return u.computedCenter},set:function(t){return u.lookAt(u.lastT(),null,t),u.computedCenter},enumerable:!0},eye:{get:function(){return u.computedEye},set:function(t){return u.lookAt(u.lastT(),t),u.computedEye},enumerable:!0},up:{get:function(){return u.computedUp},set:function(t){return u.lookAt(u.lastT(),null,null,t),u.computedUp},enumerable:!0},distance:{get:function(){return f},set:function(t){return u.setDistance(u.lastT(),t),t},enumerable:!0},distanceLimits:{get:function(){return u.getDistanceLimits(r)},set:function(t){return u.setDistanceLimits(t),t},enumerable:!0}}),t.addEventListener("contextmenu",(function(t){return t.preventDefault(),!1})),d._lastX=-1,d._lastY=-1,d._lastMods={shift:!1,control:!1,alt:!1,meta:!1},d.enableMouseListeners=function(){function e(e,r,i,a){var o=d.keyBindingMode;if(!1!==o){var s="rotate"===o,l="pan"===o,c="zoom"===o,h=!!a.control,p=!!a.alt,v=!!a.shift,g=!!(1&e),y=!!(2&e),m=!!(4&e),x=1/t.clientHeight,b=x*(r-d._lastX),_=x*(i-d._lastY),w=d.flipX?1:-1,T=d.flipY?1:-1,k=Math.PI*d.rotateSpeed,A=n();if(-1!==d._lastX&&-1!==d._lastY&&((s&&g&&!h&&!p&&!v||g&&!h&&!p&&v)&&u.rotate(A,w*k*b,-T*k*_,0),(l&&g&&!h&&!p&&!v||y||g&&h&&!p&&!v)&&u.pan(A,-d.translateSpeed*b*f,d.translateSpeed*_*f,0),c&&g&&!h&&!p&&!v||m||g&&!h&&p&&!v)){var M=-d.zoomSpeed*_/window.innerHeight*(A-u.lastT())*100;u.pan(A,0,0,f*(Math.exp(M)-1))}return d._lastX=r,d._lastY=i,d._lastMods=a,!0}}d.mouseListener=a(t,e),t.addEventListener("touchstart",(function(r){var n=s(r.changedTouches[0],t);e(0,n[0],n[1],d._lastMods),e(1,n[0],n[1],d._lastMods)}),!!l&&{passive:!0}),t.addEventListener("touchmove",(function(r){var n=s(r.changedTouches[0],t);e(1,n[0],n[1],d._lastMods),r.preventDefault()}),!!l&&{passive:!1}),t.addEventListener("touchend",(function(t){e(0,d._lastX,d._lastY,d._lastMods)}),!!l&&{passive:!0}),d.wheelListener=o(t,(function(t,e){if(!1!==d.keyBindingMode&&d.enableWheel){var r=d.flipX?1:-1,i=d.flipY?1:-1,a=n();if(Math.abs(t)>Math.abs(e))u.rotate(a,0,0,-t*r*Math.PI*d.rotateSpeed/window.innerWidth);else if(!d._ortho){var o=-d.zoomSpeed*i*e/window.innerHeight*(a-u.lastT())/20;u.pan(a,0,0,f*(Math.exp(o)-1))}}}),!0)},d.enableMouseListeners(),d};var n=r(8161),i=r(1152),a=r(6145),o=r(6475),s=r(2565),l=r(5233)},8245:function(t,e,r){var n=r(6832),i=r(5158),a=n(["precision mediump float;\n#define GLSLIFY 1\nattribute vec2 position;\nvarying vec2 uv;\nvoid main() {\n  uv = position;\n  gl_Position = vec4(position, 0, 1);\n}"]),o=n(["precision mediump float;\n#define GLSLIFY 1\n\nuniform sampler2D accumBuffer;\nvarying vec2 uv;\n\nvoid main() {\n  vec4 accum = texture2D(accumBuffer, 0.5 * (uv + 1.0));\n  gl_FragColor = min(vec4(1,1,1,1), accum);\n}"]);t.exports=function(t){return i(t,a,o,null,[{name:"position",type:"vec2"}])}},1059:function(t,e,r){"use strict";var n=r(4296),i=r(7453),a=r(2771),o=r(6496),s=r(2611),l=r(4234),u=r(8126),c=r(6145),f=r(1120),h=r(5268),p=r(8245),d=r(2321)({tablet:!0,featureDetect:!0});function v(){this.mouse=[-1,-1],this.screen=null,this.distance=1/0,this.index=null,this.dataCoordinate=null,this.dataPosition=null,this.object=null,this.data=null}function g(t){var e=Math.round(Math.log(Math.abs(t))/Math.log(10));if(e<0){var r=Math.round(Math.pow(10,-e));return Math.ceil(t*r)/r}return e>0?(r=Math.round(Math.pow(10,e)),Math.ceil(t/r)*r):Math.ceil(t)}function y(t){return"boolean"!=typeof t||t}t.exports={createScene:function(t){(t=t||{}).camera=t.camera||{};var e=t.canvas;e||(e=document.createElement("canvas"),t.container?t.container.appendChild(e):document.body.appendChild(e));var r=t.gl;if(r||(t.glOptions&&(d=!!t.glOptions.preserveDrawingBuffer),r=function(t,e){var r=null;try{(r=t.getContext("webgl",e))||(r=t.getContext("experimental-webgl",e))}catch(t){return null}return r}(e,t.glOptions||{premultipliedAlpha:!0,antialias:!0,preserveDrawingBuffer:d})),!r)throw new Error("webgl not supported");var m=t.bounds||[[-10,-10,-10],[10,10,10]],x=new v,b=l(r,r.drawingBufferWidth,r.drawingBufferHeight,{preferFloat:!d}),_=p(r),w=t.cameraObject&&!0===t.cameraObject._ortho||t.camera.projection&&"orthographic"===t.camera.projection.type||!1,T={eye:t.camera.eye||[2,0,0],center:t.camera.center||[0,0,0],up:t.camera.up||[0,1,0],zoomMin:t.camera.zoomMax||.1,zoomMax:t.camera.zoomMin||100,mode:t.camera.mode||"turntable",_ortho:w},k=t.axes||{},A=i(r,k);A.enable=!k.disable;var M=t.spikes||{},S=o(r,M),E=[],L=[],C=[],P=[],O=!0,I=!0,D={view:null,projection:new Array(16),model:new Array(16),_ortho:!1},z=(I=!0,[r.drawingBufferWidth,r.drawingBufferHeight]),R=t.cameraObject||n(e,T),F={gl:r,contextLost:!1,pixelRatio:t.pixelRatio||1,canvas:e,selection:x,camera:R,axes:A,axesPixels:null,spikes:S,bounds:m,objects:E,shape:z,aspect:t.aspectRatio||[1,1,1],pickRadius:t.pickRadius||10,zNear:t.zNear||.01,zFar:t.zFar||1e3,fovy:t.fovy||Math.PI/4,clearColor:t.clearColor||[0,0,0,0],autoResize:y(t.autoResize),autoBounds:y(t.autoBounds),autoScale:!!t.autoScale,autoCenter:y(t.autoCenter),clipToBounds:y(t.clipToBounds),snapToData:!!t.snapToData,onselect:t.onselect||null,onrender:t.onrender||null,onclick:t.onclick||null,cameraParams:D,oncontextloss:null,mouseListener:null,_stopped:!1,getAspectratio:function(){return{x:this.aspect[0],y:this.aspect[1],z:this.aspect[2]}},setAspectratio:function(t){this.aspect[0]=t.x,this.aspect[1]=t.y,this.aspect[2]=t.z,I=!0},setBounds:function(t,e){this.bounds[0][t]=e.min,this.bounds[1][t]=e.max},setClearColor:function(t){this.clearColor=t},clearRGBA:function(){this.gl.clearColor(this.clearColor[0],this.clearColor[1],this.clearColor[2],this.clearColor[3]),this.gl.clear(this.gl.COLOR_BUFFER_BIT|this.gl.DEPTH_BUFFER_BIT)}},B=[r.drawingBufferWidth/F.pixelRatio|0,r.drawingBufferHeight/F.pixelRatio|0];function N(){if(!F._stopped&&F.autoResize){var t=e.parentNode,r=1,n=1;t&&t!==document.body?(r=t.clientWidth,n=t.clientHeight):(r=window.innerWidth,n=window.innerHeight);var i=0|Math.ceil(r*F.pixelRatio),a=0|Math.ceil(n*F.pixelRatio);if(i!==e.width||a!==e.height){e.width=i,e.height=a;var o=e.style;o.position=o.position||"absolute",o.left="0px",o.top="0px",o.width=r+"px",o.height=n+"px",O=!0}}}function j(){for(var t=E.length,e=P.length,n=0;n<e;++n)C[n]=0;t:for(n=0;n<t;++n){var i=E[n],a=i.pickSlots;if(a){for(var o=0;o<e;++o)if(C[o]+a<255){L[n]=o,i.setPickBase(C[o]+1),C[o]+=a;continue t}var l=s(r,z);L[n]=e,P.push(l),C.push(a),i.setPickBase(1),e+=1}else L[n]=-1}for(;e>0&&0===C[e-1];)C.pop(),P.pop().dispose()}function U(){if(F.contextLost)return!0;r.isContextLost()&&(F.contextLost=!0,F.mouseListener.enabled=!1,F.selection.object=null,F.oncontextloss&&F.oncontextloss())}F.autoResize&&N(),window.addEventListener("resize",N),F.update=function(t){F._stopped||(t=t||{},O=!0,I=!0)},F.add=function(t){F._stopped||(t.axes=A,E.push(t),L.push(-1),O=!0,I=!0,j())},F.remove=function(t){if(!F._stopped){var e=E.indexOf(t);e<0||(E.splice(e,1),L.pop(),O=!0,I=!0,j())}},F.dispose=function(){if(!F._stopped&&(F._stopped=!0,window.removeEventListener("resize",N),e.removeEventListener("webglcontextlost",U),F.mouseListener.enabled=!1,!F.contextLost)){A.dispose(),S.dispose();for(var t=0;t<E.length;++t)E[t].dispose();for(b.dispose(),t=0;t<P.length;++t)P[t].dispose();_.dispose(),r=null,A=null,S=null,E=[]}},F._mouseRotating=!1,F._prevButtons=0,F.enableMouseListeners=function(){F.mouseListener=c(e,(function(t,e,r){if(!F._stopped){var n=P.length,i=E.length,a=x.object;x.distance=1/0,x.mouse[0]=e,x.mouse[1]=r,x.object=null,x.screen=null,x.dataCoordinate=x.dataPosition=null;var o=!1;if(t&&F._prevButtons)F._mouseRotating=!0;else{F._mouseRotating&&(I=!0),F._mouseRotating=!1;for(var s=0;s<n;++s){var l=P[s].query(e,B[1]-r-1,F.pickRadius);if(l){if(l.distance>x.distance)continue;for(var u=0;u<i;++u){var c=E[u];if(L[u]===s){var f=c.pick(l);f&&(x.buttons=t,x.screen=l.coord,x.distance=l.distance,x.object=c,x.index=f.distance,x.dataPosition=f.position,x.dataCoordinate=f.dataCoordinate,x.data=f,o=!0)}}}}}a&&a!==x.object&&(a.highlight&&a.highlight(null),O=!0),x.object&&(x.object.highlight&&x.object.highlight(x.data),O=!0),(o=o||x.object!==a)&&F.onselect&&F.onselect(x),1&t&&!(1&F._prevButtons)&&F.onclick&&F.onclick(x),F._prevButtons=t}}))},e.addEventListener("webglcontextlost",U);var V=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],H=[V[0].slice(),V[1].slice()];function q(){if(!U()){N();var t=F.camera.tick();D.view=F.camera.matrix,O=O||t,I=I||t,A.pixelRatio=F.pixelRatio,S.pixelRatio=F.pixelRatio;var e=E.length,n=V[0],i=V[1];n[0]=n[1]=n[2]=1/0,i[0]=i[1]=i[2]=-1/0;for(var o=0;o<e;++o){(C=E[o]).pixelRatio=F.pixelRatio,C.axes=F.axes,O=O||!!C.dirty,I=I||!!C.dirty;var s=C.bounds;if(s)for(var l=s[0],c=s[1],p=0;p<3;++p)n[p]=Math.min(n[p],l[p]),i[p]=Math.max(i[p],c[p])}var d=F.bounds;if(F.autoBounds)for(p=0;p<3;++p){if(i[p]<n[p])n[p]=-1,i[p]=1;else{n[p]===i[p]&&(n[p]-=1,i[p]+=1);var v=.05*(i[p]-n[p]);n[p]=n[p]-v,i[p]=i[p]+v}d[0][p]=n[p],d[1][p]=i[p]}var y=!1;for(p=0;p<3;++p)y=y||H[0][p]!==d[0][p]||H[1][p]!==d[1][p],H[0][p]=d[0][p],H[1][p]=d[1][p];if(I=I||y,O=O||y){if(y){var m=[0,0,0];for(o=0;o<3;++o)m[o]=g((d[1][o]-d[0][o])/10);A.autoTicks?A.update({bounds:d,tickSpacing:m}):A.update({bounds:d})}var T=r.drawingBufferWidth,k=r.drawingBufferHeight;for(z[0]=T,z[1]=k,B[0]=0|Math.max(T/F.pixelRatio,1),B[1]=0|Math.max(k/F.pixelRatio,1),function(t,e){var r=t.bounds,n=t.cameraParams,i=n.projection,a=n.model,o=t.gl.drawingBufferWidth,s=t.gl.drawingBufferHeight,l=t.zNear,u=t.zFar,c=t.fovy,p=o/s;e?(h(i,-p,p,-1,1,l,u),n._ortho=!0):(f(i,c,p,l,u),n._ortho=!1);for(var d=0;d<16;++d)a[d]=0;a[15]=1;var v=0;for(d=0;d<3;++d)v=Math.max(v,r[1][d]-r[0][d]);for(d=0;d<3;++d)t.autoScale?a[5*d]=t.aspect[d]/(r[1][d]-r[0][d]):a[5*d]=1/v,t.autoCenter&&(a[12+d]=.5*-a[5*d]*(r[0][d]+r[1][d]))}(F,w),o=0;o<e;++o)(C=E[o]).axesBounds=d,F.clipToBounds&&(C.clipBounds=d);x.object&&(F.snapToData?S.position=x.dataCoordinate:S.position=x.dataPosition,S.bounds=d),I&&(I=!1,function(){if(!U()){r.colorMask(!0,!0,!0,!0),r.depthMask(!0),r.disable(r.BLEND),r.enable(r.DEPTH_TEST),r.depthFunc(r.LEQUAL);for(var t=E.length,e=P.length,n=0;n<e;++n){var i=P[n];i.shape=B,i.begin();for(var a=0;a<t;++a)if(L[a]===n){var o=E[a];o.drawPick&&(o.pixelRatio=1,o.drawPick(D))}i.end()}}}()),F.axesPixels=a(F.axes,D,T,k),F.onrender&&F.onrender(),r.bindFramebuffer(r.FRAMEBUFFER,null),r.viewport(0,0,T,k),F.clearRGBA(),r.depthMask(!0),r.colorMask(!0,!0,!0,!0),r.enable(r.DEPTH_TEST),r.depthFunc(r.LEQUAL),r.disable(r.BLEND),r.disable(r.CULL_FACE);var M=!1;for(A.enable&&(M=M||A.isTransparent(),A.draw(D)),S.axes=A,x.object&&S.draw(D),r.disable(r.CULL_FACE),o=0;o<e;++o)(C=E[o]).axes=A,C.pixelRatio=F.pixelRatio,C.isOpaque&&C.isOpaque()&&C.draw(D),C.isTransparent&&C.isTransparent()&&(M=!0);if(M){for(b.shape=z,b.bind(),r.clear(r.DEPTH_BUFFER_BIT),r.colorMask(!1,!1,!1,!1),r.depthMask(!0),r.depthFunc(r.LESS),A.enable&&A.isTransparent()&&A.drawTransparent(D),o=0;o<e;++o)(C=E[o]).isOpaque&&C.isOpaque()&&C.draw(D);for(r.enable(r.BLEND),r.blendEquation(r.FUNC_ADD),r.blendFunc(r.ONE,r.ONE_MINUS_SRC_ALPHA),r.colorMask(!0,!0,!0,!0),r.depthMask(!1),r.clearColor(0,0,0,0),r.clear(r.COLOR_BUFFER_BIT),A.isTransparent()&&A.drawTransparent(D),o=0;o<e;++o){var C;(C=E[o]).isTransparent&&C.isTransparent()&&C.drawTransparent(D)}r.bindFramebuffer(r.FRAMEBUFFER,null),r.blendFunc(r.ONE,r.ONE_MINUS_SRC_ALPHA),r.disable(r.DEPTH_TEST),_.bind(),b.color[0].bind(0),_.uniforms.accumBuffer=0,u(r),r.disable(r.BLEND)}for(O=!1,o=0;o<e;++o)E[o].dirty=!1}}}return F.enableMouseListeners(),function t(){F._stopped||F.contextLost||(q(),requestAnimationFrame(t))}(),F.redraw=function(){F._stopped||(O=!0,q())},F},createCamera:n}},8023:function(t,e,r){var n=r(6832);e.pointVertex=n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 position;\n\nuniform mat3 matrix;\nuniform float pointSize;\nuniform float pointCloud;\n\nhighp float rand(vec2 co) {\n  highp float a = 12.9898;\n  highp float b = 78.233;\n  highp float c = 43758.5453;\n  highp float d = dot(co.xy, vec2(a, b));\n  highp float e = mod(d, 3.14);\n  return fract(sin(e) * c);\n}\n\nvoid main() {\n  vec3 hgPosition = matrix * vec3(position, 1);\n  gl_Position  = vec4(hgPosition.xy, 0, hgPosition.z);\n    // if we don't jitter the point size a bit, overall point cloud\n    // saturation 'jumps' on zooming, which is disturbing and confusing\n  gl_PointSize = pointSize * ((19.5 + rand(position)) / 20.0);\n  if(pointCloud != 0.0) { // pointCloud is truthy\n    // get the same square surface as circle would be\n    gl_PointSize *= 0.886;\n  }\n}"]),e.pointFragment=n(["precision mediump float;\n#define GLSLIFY 1\n\nuniform vec4 color, borderColor;\nuniform float centerFraction;\nuniform float pointCloud;\n\nvoid main() {\n  float radius;\n  vec4 baseColor;\n  if(pointCloud != 0.0) { // pointCloud is truthy\n    if(centerFraction == 1.0) {\n      gl_FragColor = color;\n    } else {\n      gl_FragColor = mix(borderColor, color, centerFraction);\n    }\n  } else {\n    radius = length(2.0 * gl_PointCoord.xy - 1.0);\n    if(radius > 1.0) {\n      discard;\n    }\n    baseColor = mix(borderColor, color, step(radius, centerFraction));\n    gl_FragColor = vec4(baseColor.rgb * baseColor.a, baseColor.a);\n  }\n}\n"]),e.pickVertex=n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 position;\nattribute vec4 pickId;\n\nuniform mat3 matrix;\nuniform float pointSize;\nuniform vec4 pickOffset;\n\nvarying vec4 fragId;\n\nvoid main() {\n  vec3 hgPosition = matrix * vec3(position, 1);\n  gl_Position  = vec4(hgPosition.xy, 0, hgPosition.z);\n  gl_PointSize = pointSize;\n\n  vec4 id = pickId + pickOffset;\n  id.y += floor(id.x / 256.0);\n  id.x -= floor(id.x / 256.0) * 256.0;\n\n  id.z += floor(id.y / 256.0);\n  id.y -= floor(id.y / 256.0) * 256.0;\n\n  id.w += floor(id.z / 256.0);\n  id.z -= floor(id.z / 256.0) * 256.0;\n\n  fragId = id;\n}\n"]),e.pickFragment=n(["precision mediump float;\n#define GLSLIFY 1\n\nvarying vec4 fragId;\n\nvoid main() {\n  float radius = length(2.0 * gl_PointCoord.xy - 1.0);\n  if(radius > 1.0) {\n    discard;\n  }\n  gl_FragColor = fragId / 255.0;\n}\n"])},8271:function(t,e,r){"use strict";var n=r(5158),i=r(5827),a=r(5306),o=r(8023);function s(t,e,r,n,i){this.plot=t,this.offsetBuffer=e,this.pickBuffer=r,this.shader=n,this.pickShader=i,this.sizeMin=.5,this.sizeMinCap=2,this.sizeMax=20,this.areaRatio=1,this.pointCount=0,this.color=[1,0,0,1],this.borderColor=[0,0,0,1],this.blend=!1,this.pickOffset=0,this.points=null}t.exports=function(t,e){var r=t.gl,a=new s(t,i(r),i(r),n(r,o.pointVertex,o.pointFragment),n(r,o.pickVertex,o.pickFragment));return a.update(e),t.addObject(a),a};var l,u,c=s.prototype;c.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.offsetBuffer.dispose(),this.pickBuffer.dispose(),this.plot.removeObject(this)},c.update=function(t){var e;function r(e,r){return e in t?t[e]:r}t=t||{},this.sizeMin=r("sizeMin",.5),this.sizeMax=r("sizeMax",20),this.color=r("color",[1,0,0,1]).slice(),this.areaRatio=r("areaRatio",1),this.borderColor=r("borderColor",[0,0,0,1]).slice(),this.blend=r("blend",!1);var n=t.positions.length>>>1,i=t.positions instanceof Float32Array,o=t.idToIndex instanceof Int32Array&&t.idToIndex.length>=n,s=t.positions,l=i?s:a.mallocFloat32(s.length),u=o?t.idToIndex:a.mallocInt32(n);if(i||l.set(s),!o)for(l.set(s),e=0;e<n;e++)u[e]=e;this.points=s,this.offsetBuffer.update(l),this.pickBuffer.update(u),i||a.free(l),o||a.free(u),this.pointCount=n,this.pickOffset=0},c.unifiedDraw=(l=[1,0,0,0,1,0,0,0,1],u=[0,0,0,0],function(t){var e=void 0!==t,r=e?this.pickShader:this.shader,n=this.plot.gl,i=this.plot.dataBox;if(0===this.pointCount)return t;var a=i[2]-i[0],o=i[3]-i[1],s=function(t,e){var r,n=0,i=t.length>>>1;for(r=0;r<i;r++){var a=t[2*r],o=t[2*r+1];a>=e[0]&&a<=e[2]&&o>=e[1]&&o<=e[3]&&n++}return n}(this.points,i),c=this.plot.pickPixelRatio*Math.max(Math.min(this.sizeMinCap,this.sizeMin),Math.min(this.sizeMax,this.sizeMax/Math.pow(s,.33333)));l[0]=2/a,l[4]=2/o,l[6]=-2*i[0]/a-1,l[7]=-2*i[1]/o-1,this.offsetBuffer.bind(),r.bind(),r.attributes.position.pointer(),r.uniforms.matrix=l,r.uniforms.color=this.color,r.uniforms.borderColor=this.borderColor,r.uniforms.pointCloud=c<5,r.uniforms.pointSize=c,r.uniforms.centerFraction=Math.min(1,Math.max(0,Math.sqrt(1-this.areaRatio))),e&&(u[0]=255&t,u[1]=t>>8&255,u[2]=t>>16&255,u[3]=t>>24&255,this.pickBuffer.bind(),r.attributes.pickId.pointer(n.UNSIGNED_BYTE),r.uniforms.pickOffset=u,this.pickOffset=t);var f=n.getParameter(n.BLEND),h=n.getParameter(n.DITHER);return f&&!this.blend&&n.disable(n.BLEND),h&&n.disable(n.DITHER),n.drawArrays(n.POINTS,0,this.pointCount),f&&!this.blend&&n.enable(n.BLEND),h&&n.enable(n.DITHER),t+this.pointCount}),c.draw=c.unifiedDraw,c.drawPick=c.unifiedDraw,c.pick=function(t,e,r){var n=this.pickOffset,i=this.pointCount;if(r<n||r>=n+i)return null;var a=r-n,o=this.points;return{object:this,pointId:a,dataCoord:[o[2*a],o[2*a+1]]}}},6093:function(t){t.exports=function(t,e,r,n){var i,a,o,s,l,u=e[0],c=e[1],f=e[2],h=e[3],p=r[0],d=r[1],v=r[2],g=r[3];return(a=u*p+c*d+f*v+h*g)<0&&(a=-a,p=-p,d=-d,v=-v,g=-g),1-a>1e-6?(i=Math.acos(a),o=Math.sin(i),s=Math.sin((1-n)*i)/o,l=Math.sin(n*i)/o):(s=1-n,l=n),t[0]=s*u+l*p,t[1]=s*c+l*d,t[2]=s*f+l*v,t[3]=s*h+l*g,t}},8240:function(t){"use strict";t.exports=function(t){return t||0===t?t.toString():""}},4123:function(t,e,r){"use strict";var n=r(875);t.exports=function(t,e,r){var a=i[e];if(a||(a=i[e]={}),t in a)return a[t];var o={textAlign:"center",textBaseline:"middle",lineHeight:1,font:e,lineSpacing:1.25,styletags:{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},triangles:!0},s=n(t,o);o.triangles=!1;var l,u,c=n(t,o);if(r&&1!==r){for(l=0;l<s.positions.length;++l)for(u=0;u<s.positions[l].length;++u)s.positions[l][u]/=r;for(l=0;l<c.positions.length;++l)for(u=0;u<c.positions[l].length;++u)c.positions[l][u]/=r}var f=[[1/0,1/0],[-1/0,-1/0]],h=c.positions.length;for(l=0;l<h;++l){var p=c.positions[l];for(u=0;u<2;++u)f[0][u]=Math.min(f[0][u],p[u]),f[1][u]=Math.max(f[1][u],p[u])}return a[t]=[s,c,f]};var i={}},9282:function(t,e,r){var n=r(5158),i=r(6832),a=i(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 glyph;\nattribute vec4 id;\n\nuniform vec4 highlightId;\nuniform float highlightScale;\nuniform mat4 model, view, projection;\nuniform vec3 clipBounds[2];\n\nvarying vec4 interpColor;\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n    gl_Position = vec4(0,0,0,0);\n  } else {\n    float scale = 1.0;\n    if(distance(highlightId, id) < 0.0001) {\n      scale = highlightScale;\n    }\n\n    vec4 worldPosition = model * vec4(position, 1);\n    vec4 viewPosition = view * worldPosition;\n    viewPosition = viewPosition / viewPosition.w;\n    vec4 clipPosition = projection * (viewPosition + scale * vec4(glyph.x, -glyph.y, 0, 0));\n\n    gl_Position = clipPosition;\n    interpColor = color;\n    pickId = id;\n    dataCoordinate = position;\n  }\n}"]),o=i(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 glyph;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\nuniform vec2 screenSize;\nuniform vec3 clipBounds[2];\nuniform float highlightScale, pixelRatio;\nuniform vec4 highlightId;\n\nvarying vec4 interpColor;\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n    gl_Position = vec4(0,0,0,0);\n  } else {\n    float scale = pixelRatio;\n    if(distance(highlightId.bgr, id.bgr) < 0.001) {\n      scale *= highlightScale;\n    }\n\n    vec4 worldPosition = model * vec4(position, 1.0);\n    vec4 viewPosition = view * worldPosition;\n    vec4 clipPosition = projection * viewPosition;\n    clipPosition /= clipPosition.w;\n\n    gl_Position = clipPosition + vec4(screenSize * scale * vec2(glyph.x, -glyph.y), 0.0, 0.0);\n    interpColor = color;\n    pickId = id;\n    dataCoordinate = position;\n  }\n}"]),s=i(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 glyph;\nattribute vec4 id;\n\nuniform float highlightScale;\nuniform vec4 highlightId;\nuniform vec3 axes[2];\nuniform mat4 model, view, projection;\nuniform vec2 screenSize;\nuniform vec3 clipBounds[2];\nuniform float scale, pixelRatio;\n\nvarying vec4 interpColor;\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n    gl_Position = vec4(0,0,0,0);\n  } else {\n    float lscale = pixelRatio * scale;\n    if(distance(highlightId, id) < 0.0001) {\n      lscale *= highlightScale;\n    }\n\n    vec4 clipCenter   = projection * view * model * vec4(position, 1);\n    vec3 dataPosition = position + 0.5*lscale*(axes[0] * glyph.x + axes[1] * glyph.y) * clipCenter.w * screenSize.y;\n    vec4 clipPosition = projection * view * model * vec4(dataPosition, 1);\n\n    gl_Position = clipPosition;\n    interpColor = color;\n    pickId = id;\n    dataCoordinate = dataPosition;\n  }\n}\n"]),l=i(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 fragClipBounds[2];\nuniform float opacity;\n\nvarying vec4 interpColor;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n  if (\n    outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate) ||\n    interpColor.a * opacity == 0.\n  ) discard;\n  gl_FragColor = interpColor * opacity;\n}\n"]),u=i(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 fragClipBounds[2];\nuniform float pickGroup;\n\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n  if (outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate)) discard;\n\n  gl_FragColor = vec4(pickGroup, pickId.bgr);\n}"]),c=[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"glyph",type:"vec2"},{name:"id",type:"vec4"}],f={vertex:a,fragment:l,attributes:c},h={vertex:o,fragment:l,attributes:c},p={vertex:s,fragment:l,attributes:c},d={vertex:a,fragment:u,attributes:c},v={vertex:o,fragment:u,attributes:c},g={vertex:s,fragment:u,attributes:c};function y(t,e){var r=n(t,e),i=r.attributes;return i.position.location=0,i.color.location=1,i.glyph.location=2,i.id.location=3,r}e.createPerspective=function(t){return y(t,f)},e.createOrtho=function(t){return y(t,h)},e.createProject=function(t){return y(t,p)},e.createPickPerspective=function(t){return y(t,d)},e.createPickOrtho=function(t){return y(t,v)},e.createPickProject=function(t){return y(t,g)}},2182:function(t,e,r){"use strict";var n=r(3596),i=r(5827),a=r(2944),o=r(5306),s=r(104),l=r(9282),u=r(4123),c=r(8240),f=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function h(t,e){var r=t[0],n=t[1],i=t[2],a=t[3];return t[0]=e[0]*r+e[4]*n+e[8]*i+e[12]*a,t[1]=e[1]*r+e[5]*n+e[9]*i+e[13]*a,t[2]=e[2]*r+e[6]*n+e[10]*i+e[14]*a,t[3]=e[3]*r+e[7]*n+e[11]*i+e[15]*a,t}function p(t,e,r,n){return h(n,n),h(n,n),h(n,n)}function d(t,e){this.index=t,this.dataCoordinate=this.position=e}function v(t){return!0===t||t>1?1:t}function g(t,e,r,n,i,a,o,s,l,u,c,f){this.gl=t,this.pixelRatio=1,this.shader=e,this.orthoShader=r,this.projectShader=n,this.pointBuffer=i,this.colorBuffer=a,this.glyphBuffer=o,this.idBuffer=s,this.vao=l,this.vertexCount=0,this.lineVertexCount=0,this.opacity=1,this.hasAlpha=!1,this.lineWidth=0,this.projectScale=[2/3,2/3,2/3],this.projectOpacity=[1,1,1],this.projectHasAlpha=!1,this.pickId=0,this.pickPerspectiveShader=u,this.pickOrthoShader=c,this.pickProjectShader=f,this.points=[],this._selectResult=new d(0,[0,0,0]),this.useOrtho=!0,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.axesProject=[!0,!0,!0],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.highlightId=[1,1,1,1],this.highlightScale=2,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.dirty=!0}t.exports=function(t){var e=t.gl,r=l.createPerspective(e),n=l.createOrtho(e),o=l.createProject(e),s=l.createPickPerspective(e),u=l.createPickOrtho(e),c=l.createPickProject(e),f=i(e),h=i(e),p=i(e),d=i(e),v=new g(e,r,n,o,f,h,p,d,a(e,[{buffer:f,size:3,type:e.FLOAT},{buffer:h,size:4,type:e.FLOAT},{buffer:p,size:2,type:e.FLOAT},{buffer:d,size:4,type:e.UNSIGNED_BYTE,normalized:!0}]),s,u,c);return v.update(t),v};var y=g.prototype;y.pickSlots=1,y.setPickBase=function(t){this.pickId=t},y.isTransparent=function(){if(this.hasAlpha)return!0;for(var t=0;t<3;++t)if(this.axesProject[t]&&this.projectHasAlpha)return!0;return!1},y.isOpaque=function(){if(!this.hasAlpha)return!0;for(var t=0;t<3;++t)if(this.axesProject[t]&&!this.projectHasAlpha)return!0;return!1};var m=[0,0],x=[0,0,0],b=[0,0,0],_=[0,0,0,1],w=[0,0,0,1],T=f.slice(),k=[0,0,0],A=[[0,0,0],[0,0,0]];function M(t){return t[0]=t[1]=t[2]=0,t}function S(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=1,t}function E(t,e,r,n){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[r]=n,t}var L=[[-1e8,-1e8,-1e8],[1e8,1e8,1e8]];function C(t,e,r,n,i,a,o){var l=r.gl;if((a===r.projectHasAlpha||o)&&function(t,e,r,n){var i,a=e.axesProject,o=e.gl,l=t.uniforms,u=r.model||f,c=r.view||f,h=r.projection||f,d=e.axesBounds,v=function(t){for(var e=A,r=0;r<2;++r)for(var n=0;n<3;++n)e[r][n]=Math.max(Math.min(t[r][n],1e8),-1e8);return e}(e.clipBounds);i=e.axes&&e.axes.lastCubeProps?e.axes.lastCubeProps.axis:[1,1,1],m[0]=2/o.drawingBufferWidth,m[1]=2/o.drawingBufferHeight,t.bind(),l.view=c,l.projection=h,l.screenSize=m,l.highlightId=e.highlightId,l.highlightScale=e.highlightScale,l.clipBounds=v,l.pickGroup=e.pickId/255,l.pixelRatio=n;for(var g=0;g<3;++g)if(a[g]){l.scale=e.projectScale[g],l.opacity=e.projectOpacity[g];for(var y=T,L=0;L<16;++L)y[L]=0;for(L=0;L<4;++L)y[5*L]=1;y[5*g]=0,i[g]<0?y[12+g]=d[0][g]:y[12+g]=d[1][g],s(y,u,y),l.model=y;var C=(g+1)%3,P=(g+2)%3,O=M(x),I=M(b);O[C]=1,I[P]=1;var D=p(0,0,0,S(_,O)),z=p(0,0,0,S(w,I));if(Math.abs(D[1])>Math.abs(z[1])){var R=D;D=z,z=R,R=O,O=I,I=R;var F=C;C=P,P=F}D[0]<0&&(O[C]=-1),z[1]>0&&(I[P]=-1);var B=0,N=0;for(L=0;L<4;++L)B+=Math.pow(u[4*C+L],2),N+=Math.pow(u[4*P+L],2);O[C]/=Math.sqrt(B),I[P]/=Math.sqrt(N),l.axes[0]=O,l.axes[1]=I,l.fragClipBounds[0]=E(k,v[0],g,-1e8),l.fragClipBounds[1]=E(k,v[1],g,1e8),e.vao.bind(),e.vao.draw(o.TRIANGLES,e.vertexCount),e.lineWidth>0&&(o.lineWidth(e.lineWidth*n),e.vao.draw(o.LINES,e.lineVertexCount,e.vertexCount)),e.vao.unbind()}}(e,r,n,i),a===r.hasAlpha||o){t.bind();var u=t.uniforms;u.model=n.model||f,u.view=n.view||f,u.projection=n.projection||f,m[0]=2/l.drawingBufferWidth,m[1]=2/l.drawingBufferHeight,u.screenSize=m,u.highlightId=r.highlightId,u.highlightScale=r.highlightScale,u.fragClipBounds=L,u.clipBounds=r.axes.bounds,u.opacity=r.opacity,u.pickGroup=r.pickId/255,u.pixelRatio=i,r.vao.bind(),r.vao.draw(l.TRIANGLES,r.vertexCount),r.lineWidth>0&&(l.lineWidth(r.lineWidth*i),r.vao.draw(l.LINES,r.lineVertexCount,r.vertexCount)),r.vao.unbind()}}function P(t,e,r,i){var a;a=Array.isArray(t)?e<t.length?t[e]:void 0:t,a=c(a);var o=!0;n(a)&&(a="▼",o=!1);var s=u(a,r,i);return{mesh:s[0],lines:s[1],bounds:s[2],visible:o}}y.draw=function(t){C(this.useOrtho?this.orthoShader:this.shader,this.projectShader,this,t,this.pixelRatio,!1,!1)},y.drawTransparent=function(t){C(this.useOrtho?this.orthoShader:this.shader,this.projectShader,this,t,this.pixelRatio,!0,!1)},y.drawPick=function(t){C(this.useOrtho?this.pickOrthoShader:this.pickPerspectiveShader,this.pickProjectShader,this,t,1,!0,!0)},y.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=t.value[2]+(t.value[1]<<8)+(t.value[0]<<16);if(e>=this.pointCount||e<0)return null;var r=this.points[e],n=this._selectResult;n.index=e;for(var i=0;i<3;++i)n.position[i]=n.dataCoordinate[i]=r[i];return n},y.highlight=function(t){if(t){var e=t.index,r=255&e,n=e>>8&255,i=e>>16&255;this.highlightId=[r/255,n/255,i/255,0]}else this.highlightId=[1,1,1,1]},y.update=function(t){if("perspective"in(t=t||{})&&(this.useOrtho=!t.perspective),"orthographic"in t&&(this.useOrtho=!!t.orthographic),"lineWidth"in t&&(this.lineWidth=t.lineWidth),"project"in t)if(Array.isArray(t.project))this.axesProject=t.project;else{var e=!!t.project;this.axesProject=[e,e,e]}if("projectScale"in t)if(Array.isArray(t.projectScale))this.projectScale=t.projectScale.slice();else{var r=+t.projectScale;this.projectScale=[r,r,r]}if(this.projectHasAlpha=!1,"projectOpacity"in t){Array.isArray(t.projectOpacity)?this.projectOpacity=t.projectOpacity.slice():(r=+t.projectOpacity,this.projectOpacity=[r,r,r]);for(var n=0;n<3;++n)this.projectOpacity[n]=v(this.projectOpacity[n]),this.projectOpacity[n]<1&&(this.projectHasAlpha=!0)}this.hasAlpha=!1,"opacity"in t&&(this.opacity=v(t.opacity),this.opacity<1&&(this.hasAlpha=!0)),this.dirty=!0;var i,a,s=t.position,l=t.font||"normal",u=t.alignment||[0,0];if(2===u.length)i=u[0],a=u[1];else for(i=[],a=[],n=0;n<u.length;++n)i[n]=u[n][0],a[n]=u[n][1];var c=[1/0,1/0,1/0],f=[-1/0,-1/0,-1/0],h=t.glyph,p=t.color,d=t.size,g=t.angle,y=t.lineColor,m=-1,x=0,b=0,_=0;if(s.length){_=s.length;t:for(n=0;n<_;++n){for(var w=s[n],T=0;T<3;++T)if(isNaN(w[T])||!isFinite(w[T]))continue t;var k=(N=P(h,n,l,this.pixelRatio)).mesh,A=N.lines,M=N.bounds;x+=3*k.cells.length,b+=2*A.edges.length}}var S=x+b,E=o.mallocFloat(3*S),L=o.mallocFloat(4*S),C=o.mallocFloat(2*S),O=o.mallocUint32(S);if(S>0){var I=0,D=x,z=[0,0,0,1],R=[0,0,0,1],F=Array.isArray(p)&&Array.isArray(p[0]),B=Array.isArray(y)&&Array.isArray(y[0]);t:for(n=0;n<_;++n){for(m+=1,w=s[n],T=0;T<3;++T){if(isNaN(w[T])||!isFinite(w[T]))continue t;f[T]=Math.max(f[T],w[T]),c[T]=Math.min(c[T],w[T])}k=(N=P(h,n,l,this.pixelRatio)).mesh,A=N.lines,M=N.bounds;var N,j=N.visible;if(j)if(Array.isArray(p)){if(3===(U=F?n<p.length?p[n]:[0,0,0,0]:p).length){for(T=0;T<3;++T)z[T]=U[T];z[3]=1}else if(4===U.length){for(T=0;T<4;++T)z[T]=U[T];!this.hasAlpha&&U[3]<1&&(this.hasAlpha=!0)}}else z[0]=z[1]=z[2]=0,z[3]=1;else z=[1,1,1,0];if(j)if(Array.isArray(y)){var U;if(3===(U=B?n<y.length?y[n]:[0,0,0,0]:y).length){for(T=0;T<3;++T)R[T]=U[T];R[T]=1}else if(4===U.length){for(T=0;T<4;++T)R[T]=U[T];!this.hasAlpha&&U[3]<1&&(this.hasAlpha=!0)}}else R[0]=R[1]=R[2]=0,R[3]=1;else R=[1,1,1,0];var V=.5;j?Array.isArray(d)?V=n<d.length?+d[n]:12:d?V=+d:this.useOrtho&&(V=12):V=0;var H=0;Array.isArray(g)?H=n<g.length?+g[n]:0:g&&(H=+g);var q=Math.cos(H),G=Math.sin(H);for(w=s[n],T=0;T<3;++T)f[T]=Math.max(f[T],w[T]),c[T]=Math.min(c[T],w[T]);var Z=i,Y=a;Z=0,Array.isArray(i)?Z=n<i.length?i[n]:0:i&&(Z=i),Y=0,Array.isArray(a)?Y=n<a.length?a[n]:0:a&&(Y=a);var W=[Z*=Z>0?1-M[0][0]:Z<0?1+M[1][0]:1,Y*=Y>0?1-M[0][1]:Y<0?1+M[1][1]:1],X=k.cells||[],J=k.positions||[];for(T=0;T<X.length;++T)for(var K=X[T],$=0;$<3;++$){for(var Q=0;Q<3;++Q)E[3*I+Q]=w[Q];for(Q=0;Q<4;++Q)L[4*I+Q]=z[Q];O[I]=m;var tt=J[K[$]];C[2*I]=V*(q*tt[0]-G*tt[1]+W[0]),C[2*I+1]=V*(G*tt[0]+q*tt[1]+W[1]),I+=1}for(X=A.edges,J=A.positions,T=0;T<X.length;++T)for(K=X[T],$=0;$<2;++$){for(Q=0;Q<3;++Q)E[3*D+Q]=w[Q];for(Q=0;Q<4;++Q)L[4*D+Q]=R[Q];O[D]=m,tt=J[K[$]],C[2*D]=V*(q*tt[0]-G*tt[1]+W[0]),C[2*D+1]=V*(G*tt[0]+q*tt[1]+W[1]),D+=1}}}this.bounds=[c,f],this.points=s,this.pointCount=s.length,this.vertexCount=x,this.lineVertexCount=b,this.pointBuffer.update(E),this.colorBuffer.update(L),this.glyphBuffer.update(C),this.idBuffer.update(O),o.free(E),o.free(L),o.free(C),o.free(O)},y.dispose=function(){this.shader.dispose(),this.orthoShader.dispose(),this.pickPerspectiveShader.dispose(),this.pickOrthoShader.dispose(),this.vao.dispose(),this.pointBuffer.dispose(),this.colorBuffer.dispose(),this.glyphBuffer.dispose(),this.idBuffer.dispose()}},1884:function(t,e,r){"use strict";var n=r(6832);e.boxVertex=n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 vertex;\n\nuniform vec2 cornerA, cornerB;\n\nvoid main() {\n  gl_Position = vec4(mix(cornerA, cornerB, vertex), 0, 1);\n}\n"]),e.boxFragment=n(["precision mediump float;\n#define GLSLIFY 1\n\nuniform vec4 color;\n\nvoid main() {\n  gl_FragColor = color;\n}\n"])},6623:function(t,e,r){"use strict";var n=r(5158),i=r(5827),a=r(1884);function o(t,e,r){this.plot=t,this.boxBuffer=e,this.boxShader=r,this.enabled=!0,this.selectBox=[1/0,1/0,-1/0,-1/0],this.borderColor=[0,0,0,1],this.innerFill=!1,this.innerColor=[0,0,0,.25],this.outerFill=!0,this.outerColor=[0,0,0,.5],this.borderWidth=10}t.exports=function(t,e){var r=t.gl,s=new o(t,i(r,[0,0,0,1,1,0,1,1]),n(r,a.boxVertex,a.boxFragment));return s.update(e),t.addOverlay(s),s};var s=o.prototype;s.draw=function(){if(this.enabled){var t=this.plot,e=this.selectBox,r=this.borderWidth,n=(this.innerFill,this.innerColor),i=(this.outerFill,this.outerColor),a=this.borderColor,o=t.box,s=t.screenBox,l=t.dataBox,u=t.viewBox,c=t.pixelRatio,f=(e[0]-l[0])*(u[2]-u[0])/(l[2]-l[0])+u[0],h=(e[1]-l[1])*(u[3]-u[1])/(l[3]-l[1])+u[1],p=(e[2]-l[0])*(u[2]-u[0])/(l[2]-l[0])+u[0],d=(e[3]-l[1])*(u[3]-u[1])/(l[3]-l[1])+u[1];if(f=Math.max(f,u[0]),h=Math.max(h,u[1]),p=Math.min(p,u[2]),d=Math.min(d,u[3]),!(p<f||d<h)){o.bind();var v=s[2]-s[0],g=s[3]-s[1];if(this.outerFill&&(o.drawBox(0,0,v,h,i),o.drawBox(0,h,f,d,i),o.drawBox(0,d,v,g,i),o.drawBox(p,h,v,d,i)),this.innerFill&&o.drawBox(f,h,p,d,n),r>0){var y=r*c;o.drawBox(f-y,h-y,p+y,h+y,a),o.drawBox(f-y,d-y,p+y,d+y,a),o.drawBox(f-y,h-y,f+y,d+y,a),o.drawBox(p-y,h-y,p+y,d+y,a)}}}},s.update=function(t){t=t||{},this.innerFill=!!t.innerFill,this.outerFill=!!t.outerFill,this.innerColor=(t.innerColor||[0,0,0,.5]).slice(),this.outerColor=(t.outerColor||[0,0,0,.5]).slice(),this.borderColor=(t.borderColor||[0,0,0,1]).slice(),this.borderWidth=t.borderWidth||0,this.selectBox=(t.selectBox||this.selectBox).slice()},s.dispose=function(){this.boxBuffer.dispose(),this.boxShader.dispose(),this.plot.removeOverlay(this)}},2611:function(t,e,r){"use strict";t.exports=function(t,e){var r=e[0],a=e[1];return new l(t,n(t,r,a,{}),i.mallocUint8(r*a*4))};var n=r(4234),i=r(5306),a=r(5050),o=r(2288).nextPow2;function s(t,e,r,n,i){this.coord=[t,e],this.id=r,this.value=n,this.distance=i}function l(t,e,r){this.gl=t,this.fbo=e,this.buffer=r,this._readTimeout=null;var n=this;this._readCallback=function(){n.gl&&(e.bind(),t.readPixels(0,0,e.shape[0],e.shape[1],t.RGBA,t.UNSIGNED_BYTE,n.buffer),n._readTimeout=null)}}var u=l.prototype;Object.defineProperty(u,"shape",{get:function(){return this.gl?this.fbo.shape.slice():[0,0]},set:function(t){if(this.gl){this.fbo.shape=t;var e=this.fbo.shape[0],r=this.fbo.shape[1];if(r*e*4>this.buffer.length){i.free(this.buffer);for(var n=this.buffer=i.mallocUint8(o(r*e*4)),a=0;a<r*e*4;++a)n[a]=255}return t}}}),u.begin=function(){var t=this.gl;this.shape,t&&(this.fbo.bind(),t.clearColor(1,1,1,1),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT))},u.end=function(){var t=this.gl;t&&(t.bindFramebuffer(t.FRAMEBUFFER,null),this._readTimeout||clearTimeout(this._readTimeout),this._readTimeout=setTimeout(this._readCallback,1))},u.query=function(t,e,r){if(!this.gl)return null;var n=this.fbo.shape.slice();t|=0,e|=0,"number"!=typeof r&&(r=1);var i=0|Math.min(Math.max(t-r,0),n[0]),o=0|Math.min(Math.max(t+r,0),n[0]),l=0|Math.min(Math.max(e-r,0),n[1]),u=0|Math.min(Math.max(e+r,0),n[1]);if(o<=i||u<=l)return null;var c=[o-i,u-l],f=a(this.buffer,[c[0],c[1],4],[4,4*n[0],1],4*(i+n[0]*l)),h=function(t,e,r){for(var n=1e8,i=-1,a=-1,o=t.shape[0],s=t.shape[1],l=0;l<o;l++)for(var u=0;u<s;u++){var c=t.get(l,u,0),f=t.get(l,u,1),h=t.get(l,u,2),p=t.get(l,u,3);if(c<255||f<255||h<255||p<255){var d=e-l,v=r-u,g=d*d+v*v;g<n&&(n=g,i=l,a=u)}}return[i,a,n]}(f.hi(c[0],c[1],1),r,r),p=h[0],d=h[1];return p<0||Math.pow(this.radius,2)<h[2]?null:new s(p+i|0,d+l|0,f.get(p,d,0),[f.get(p,d,1),f.get(p,d,2),f.get(p,d,3)],Math.sqrt(h[2]))},u.dispose=function(){this.gl&&(this.fbo.dispose(),i.free(this.buffer),this.gl=null,this._readTimeout&&clearTimeout(this._readTimeout))}},5158:function(t,e,r){"use strict";var n=r(9016),i=r(4280),a=r(3984),o=r(1628),s=r(2631),l=r(9068);function u(t){this.gl=t,this.gl.lastAttribCount=0,this._vref=this._fref=this._relink=this.vertShader=this.fragShader=this.program=this.attributes=this.uniforms=this.types=null}var c=u.prototype;function f(t,e){return t.name<e.name?-1:1}c.bind=function(){var t;this.program||this._relink();var e=this.gl.getProgramParameter(this.program,this.gl.ACTIVE_ATTRIBUTES),r=this.gl.lastAttribCount;if(e>r)for(t=r;t<e;t++)this.gl.enableVertexAttribArray(t);else if(r>e)for(t=e;t<r;t++)this.gl.disableVertexAttribArray(t);this.gl.lastAttribCount=e,this.gl.useProgram(this.program)},c.dispose=function(){for(var t=this.gl.lastAttribCount,e=0;e<t;e++)this.gl.disableVertexAttribArray(e);this.gl.lastAttribCount=0,this._fref&&this._fref.dispose(),this._vref&&this._vref.dispose(),this.attributes=this.types=this.vertShader=this.fragShader=this.program=this._relink=this._fref=this._vref=null},c.update=function(t,e,r,u){if(!e||1===arguments.length){var c=t;t=c.vertex,e=c.fragment,r=c.uniforms,u=c.attributes}var h=this,p=h.gl,d=h._vref;h._vref=o.shader(p,p.VERTEX_SHADER,t),d&&d.dispose(),h.vertShader=h._vref.shader;var v=this._fref;if(h._fref=o.shader(p,p.FRAGMENT_SHADER,e),v&&v.dispose(),h.fragShader=h._fref.shader,!r||!u){var g=p.createProgram();if(p.attachShader(g,h.fragShader),p.attachShader(g,h.vertShader),p.linkProgram(g),!p.getProgramParameter(g,p.LINK_STATUS)){var y=p.getProgramInfoLog(g);throw new l(y,"Error linking program:"+y)}r=r||s.uniforms(p,g),u=u||s.attributes(p,g),p.deleteProgram(g)}(u=u.slice()).sort(f);var m,x=[],b=[],_=[];for(m=0;m<u.length;++m){var w=u[m];if(w.type.indexOf("mat")>=0){for(var T=0|w.type.charAt(w.type.length-1),k=new Array(T),A=0;A<T;++A)k[A]=_.length,b.push(w.name+"["+A+"]"),"number"==typeof w.location?_.push(w.location+A):Array.isArray(w.location)&&w.location.length===T&&"number"==typeof w.location[A]?_.push(0|w.location[A]):_.push(-1);x.push({name:w.name,type:w.type,locations:k})}else x.push({name:w.name,type:w.type,locations:[_.length]}),b.push(w.name),"number"==typeof w.location?_.push(0|w.location):_.push(-1)}var M=0;for(m=0;m<_.length;++m)if(_[m]<0){for(;_.indexOf(M)>=0;)M+=1;_[m]=M}var S=new Array(r.length);function E(){h.program=o.program(p,h._vref,h._fref,b,_);for(var t=0;t<r.length;++t)S[t]=p.getUniformLocation(h.program,r[t].name)}E(),h._relink=E,h.types={uniforms:a(r),attributes:a(u)},h.attributes=i(p,h,x,_),Object.defineProperty(h,"uniforms",n(p,h,r,S))},t.exports=function(t,e,r,n,i){var a=new u(t);return a.update(e,r,n,i),a}},9068:function(t){function e(t,e,r){this.shortMessage=e||"",this.longMessage=r||"",this.rawError=t||"",this.message="gl-shader: "+(e||t||"")+(r?"\n"+r:""),this.stack=(new Error).stack}e.prototype=new Error,e.prototype.name="GLError",e.prototype.constructor=e,t.exports=e},4280:function(t,e,r){"use strict";t.exports=function(t,e,r,i){for(var a={},o=0,u=r.length;o<u;++o){var c=r[o],f=c.name,h=c.type,p=c.locations;switch(h){case"bool":case"int":case"float":s(t,e,p[0],i,1,a,f);break;default:if(h.indexOf("vec")>=0){if((d=h.charCodeAt(h.length-1)-48)<2||d>4)throw new n("","Invalid data type for attribute "+f+": "+h);s(t,e,p[0],i,d,a,f)}else{if(!(h.indexOf("mat")>=0))throw new n("","Unknown data type for attribute "+f+": "+h);var d;if((d=h.charCodeAt(h.length-1)-48)<2||d>4)throw new n("","Invalid data type for attribute "+f+": "+h);l(t,e,p,i,d,a,f)}}}return a};var n=r(9068);function i(t,e,r,n,i,a){this._gl=t,this._wrapper=e,this._index=r,this._locations=n,this._dimension=i,this._constFunc=a}var a=i.prototype;a.pointer=function(t,e,r,n){var i=this,a=i._gl,o=i._locations[i._index];a.vertexAttribPointer(o,i._dimension,t||a.FLOAT,!!e,r||0,n||0),a.enableVertexAttribArray(o)},a.set=function(t,e,r,n){return this._constFunc(this._locations[this._index],t,e,r,n)},Object.defineProperty(a,"location",{get:function(){return this._locations[this._index]},set:function(t){return t!==this._locations[this._index]&&(this._locations[this._index]=0|t,this._wrapper.program=null),0|t}});var o=[function(t,e,r){return void 0===r.length?t.vertexAttrib1f(e,r):t.vertexAttrib1fv(e,r)},function(t,e,r,n){return void 0===r.length?t.vertexAttrib2f(e,r,n):t.vertexAttrib2fv(e,r)},function(t,e,r,n,i){return void 0===r.length?t.vertexAttrib3f(e,r,n,i):t.vertexAttrib3fv(e,r)},function(t,e,r,n,i,a){return void 0===r.length?t.vertexAttrib4f(e,r,n,i,a):t.vertexAttrib4fv(e,r)}];function s(t,e,r,n,a,s,l){var u=o[a],c=new i(t,e,r,n,a,u);Object.defineProperty(s,l,{set:function(e){return t.disableVertexAttribArray(n[r]),u(t,n[r],e),e},get:function(){return c},enumerable:!0})}function l(t,e,r,n,i,a,o){for(var l=new Array(i),u=new Array(i),c=0;c<i;++c)s(t,e,r[c],n,i,l,c),u[c]=l[c];Object.defineProperty(l,"location",{set:function(t){if(Array.isArray(t))for(var e=0;e<i;++e)u[e].location=t[e];else for(e=0;e<i;++e)u[e].location=t+e;return t},get:function(){for(var t=new Array(i),e=0;e<i;++e)t[e]=n[r[e]];return t},enumerable:!0}),l.pointer=function(e,a,o,s){e=e||t.FLOAT,a=!!a,o=o||i*i,s=s||0;for(var l=0;l<i;++l){var u=n[r[l]];t.vertexAttribPointer(u,i,e,a,o,s+l*i),t.enableVertexAttribArray(u)}};var f=new Array(i),h=t["vertexAttrib"+i+"fv"];Object.defineProperty(a,o,{set:function(e){for(var a=0;a<i;++a){var o=n[r[a]];if(t.disableVertexAttribArray(o),Array.isArray(e[0]))h.call(t,o,e[a]);else{for(var s=0;s<i;++s)f[s]=e[i*a+s];h.call(t,o,f)}}return e},get:function(){return l},enumerable:!0})}},9016:function(t,e,r){"use strict";var n=r(3984),i=r(9068);function a(t){return function(){return t}}function o(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=e;return r}t.exports=function(t,e,r,s){function l(e){return function(n){for(var a=u("",e),o=0;o<a.length;++o){var l=a[o],c=l[0],f=l[1];if(s[f]){var h=n;if("string"==typeof c&&(0===c.indexOf(".")||0===c.indexOf("["))){var p=c;if(0===c.indexOf(".")&&(p=c.slice(1)),p.indexOf("]")===p.length-1){var d=p.indexOf("["),v=p.slice(0,d),g=p.slice(d+1,p.length-1);h=v?n[v][g]:n[g]}else h=n[p]}var y,m=r[f].type;switch(m){case"bool":case"int":case"sampler2D":case"samplerCube":t.uniform1i(s[f],h);break;case"float":t.uniform1f(s[f],h);break;default:var x=m.indexOf("vec");if(!(0<=x&&x<=1&&m.length===4+x)){if(0===m.indexOf("mat")&&4===m.length){if((y=m.charCodeAt(m.length-1)-48)<2||y>4)throw new i("","Invalid uniform dimension type for matrix "+name+": "+m);t["uniformMatrix"+y+"fv"](s[f],!1,h);break}throw new i("","Unknown uniform data type for "+name+": "+m)}if((y=m.charCodeAt(m.length-1)-48)<2||y>4)throw new i("","Invalid data type");switch(m.charAt(0)){case"b":case"i":t["uniform"+y+"iv"](s[f],h);break;case"v":t["uniform"+y+"fv"](s[f],h);break;default:throw new i("","Unrecognized data type for vector "+name+": "+m)}}}}}}function u(t,e){if("object"!=typeof e)return[[t,e]];var r=[];for(var n in e){var i=e[n],a=t;parseInt(n)+""===n?a+="["+n+"]":a+="."+n,"object"==typeof i?r.push.apply(r,u(a,i)):r.push([a,i])}return r}function c(t,e,n){if("object"==typeof n){var u=f(n);Object.defineProperty(t,e,{get:a(u),set:l(n),enumerable:!0,configurable:!1})}else s[n]?Object.defineProperty(t,e,{get:(c=n,function(t,e,r){return t.getUniform(e.program,r[c])}),set:l(n),enumerable:!0,configurable:!1}):t[e]=function(t){switch(t){case"bool":return!1;case"int":case"sampler2D":case"samplerCube":case"float":return 0;default:var e=t.indexOf("vec");if(0<=e&&e<=1&&t.length===4+e){if((r=t.charCodeAt(t.length-1)-48)<2||r>4)throw new i("","Invalid data type");return"b"===t.charAt(0)?o(r,!1):o(r,0)}if(0===t.indexOf("mat")&&4===t.length){var r;if((r=t.charCodeAt(t.length-1)-48)<2||r>4)throw new i("","Invalid uniform dimension type for matrix "+name+": "+t);return o(r*r,0)}throw new i("","Unknown uniform data type for "+name+": "+t)}}(r[n].type);var c}function f(t){var e;if(Array.isArray(t)){e=new Array(t.length);for(var r=0;r<t.length;++r)c(e,r,t[r])}else for(var n in e={},t)c(e,n,t[n]);return e}var h=n(r,!0);return{get:a(f(h)),set:l(h),enumerable:!0,configurable:!0}}},3984:function(t){"use strict";t.exports=function(t,e){for(var r={},n=0;n<t.length;++n)for(var i=t[n].name.split("."),a=r,o=0;o<i.length;++o){var s=i[o].split("[");if(s.length>1){s[0]in a||(a[s[0]]=[]),a=a[s[0]];for(var l=1;l<s.length;++l){var u=parseInt(s[l]);l<s.length-1||o<i.length-1?(u in a||(l<s.length-1?a[u]=[]:a[u]={}),a=a[u]):a[u]=e?n:t[n].type}}else o<i.length-1?(s[0]in a||(a[s[0]]={}),a=a[s[0]]):a[s[0]]=e?n:t[n].type}return r}},2631:function(t,e){"use strict";e.uniforms=function(t,e){for(var r=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),n=[],a=0;a<r;++a){var o=t.getActiveUniform(e,a);if(o){var s=i(t,o.type);if(o.size>1)for(var l=0;l<o.size;++l)n.push({name:o.name.replace("[0]","["+l+"]"),type:s});else n.push({name:o.name,type:s})}}return n},e.attributes=function(t,e){for(var r=t.getProgramParameter(e,t.ACTIVE_ATTRIBUTES),n=[],a=0;a<r;++a){var o=t.getActiveAttrib(e,a);o&&n.push({name:o.name,type:i(t,o.type)})}return n};var r={FLOAT:"float",FLOAT_VEC2:"vec2",FLOAT_VEC3:"vec3",FLOAT_VEC4:"vec4",INT:"int",INT_VEC2:"ivec2",INT_VEC3:"ivec3",INT_VEC4:"ivec4",BOOL:"bool",BOOL_VEC2:"bvec2",BOOL_VEC3:"bvec3",BOOL_VEC4:"bvec4",FLOAT_MAT2:"mat2",FLOAT_MAT3:"mat3",FLOAT_MAT4:"mat4",SAMPLER_2D:"sampler2D",SAMPLER_CUBE:"samplerCube"},n=null;function i(t,e){if(!n){var i=Object.keys(r);n={};for(var a=0;a<i.length;++a){var o=i[a];n[t[o]]=r[o]}}return n[e]}},1628:function(t,e,r){"use strict";e.shader=function(t,e,r){return c(t).getShaderReference(e,r)},e.program=function(t,e,r,n,i){return c(t).getProgram(e,r,n,i)};var n=r(9068),i=r(3530),a=new("undefined"==typeof WeakMap?r(4037):WeakMap),o=0;function s(t,e,r,n,i,a,o){this.id=t,this.src=e,this.type=r,this.shader=n,this.count=a,this.programs=[],this.cache=o}function l(t){this.gl=t,this.shaders=[{},{}],this.programs={}}s.prototype.dispose=function(){if(0==--this.count){for(var t=this.cache,e=t.gl,r=this.programs,n=0,i=r.length;n<i;++n){var a=t.programs[r[n]];a&&(delete t.programs[n],e.deleteProgram(a))}e.deleteShader(this.shader),delete t.shaders[this.type===e.FRAGMENT_SHADER|0][this.src]}};var u=l.prototype;function c(t){var e=a.get(t);return e||(e=new l(t),a.set(t,e)),e}u.getShaderReference=function(t,e){var r=this.gl,a=this.shaders[t===r.FRAGMENT_SHADER|0],l=a[e];if(l&&r.isShader(l.shader))l.count+=1;else{var u=function(t,e,r){var a=t.createShader(e);if(t.shaderSource(a,r),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS)){var o=t.getShaderInfoLog(a);try{var s=i(o,r,e)}catch(t){throw console.warn("Failed to format compiler error: "+t),new n(o,"Error compiling shader:\n"+o)}throw new n(o,s.short,s.long)}return a}(r,t,e);l=a[e]=new s(o++,e,t,u,[],1,this)}return l},u.getProgram=function(t,e,r,i){var a=[t.id,e.id,r.join(":"),i.join(":")].join("@"),o=this.programs[a];return o&&this.gl.isProgram(o)||(this.programs[a]=o=function(t,e,r,i,a){var o=t.createProgram();t.attachShader(o,e),t.attachShader(o,r);for(var s=0;s<i.length;++s)t.bindAttribLocation(o,a[s],i[s]);if(t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS)){var l=t.getProgramInfoLog(o);throw new n(l,"Error linking program: "+l)}return o}(this.gl,t.shader,e.shader,r,i),t.programs.push(a),e.programs.push(a)),o}},3050:function(t){"use strict";function e(t){this.plot=t,this.enable=[!0,!0,!1,!1],this.width=[1,1,1,1],this.color=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.center=[1/0,1/0]}t.exports=function(t,r){var n=new e(t);return n.update(r),t.addOverlay(n),n};var r=e.prototype;r.update=function(t){t=t||{},this.enable=(t.enable||[!0,!0,!1,!1]).slice(),this.width=(t.width||[1,1,1,1]).slice(),this.color=(t.color||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]).map((function(t){return t.slice()})),this.center=(t.center||[1/0,1/0]).slice(),this.plot.setOverlayDirty()},r.draw=function(){var t=this.enable,e=this.width,r=this.color,n=this.center,i=this.plot,a=i.line,o=i.dataBox,s=i.viewBox;if(a.bind(),o[0]<=n[0]&&n[0]<=o[2]&&o[1]<=n[1]&&n[1]<=o[3]){var l=s[0]+(n[0]-o[0])/(o[2]-o[0])*(s[2]-s[0]),u=s[1]+(n[1]-o[1])/(o[3]-o[1])*(s[3]-s[1]);t[0]&&a.drawLine(l,u,s[0],u,e[0],r[0]),t[1]&&a.drawLine(l,u,l,s[1],e[1],r[1]),t[2]&&a.drawLine(l,u,s[2],u,e[2],r[2]),t[3]&&a.drawLine(l,u,l,s[3],e[3],r[3])}},r.dispose=function(){this.plot.removeOverlay(this)}},3540:function(t,e,r){"use strict";var n=r(6832),i=r(5158),a=n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position, color;\nattribute float weight;\n\nuniform mat4 model, view, projection;\nuniform vec3 coordinates[3];\nuniform vec4 colors[3];\nuniform vec2 screenShape;\nuniform float lineWidth;\n\nvarying vec4 fragColor;\n\nvoid main() {\n  vec3 vertexPosition = mix(coordinates[0],\n    mix(coordinates[2], coordinates[1], 0.5 * (position + 1.0)), abs(position));\n\n  vec4 clipPos = projection * view * model * vec4(vertexPosition, 1.0);\n  vec2 clipOffset = (projection * view * model * vec4(color, 0.0)).xy;\n  vec2 delta = weight * clipOffset * screenShape;\n  vec2 lineOffset = normalize(vec2(delta.y, -delta.x)) / screenShape;\n\n  gl_Position   = vec4(clipPos.xy + clipPos.w * 0.5 * lineWidth * lineOffset, clipPos.z, clipPos.w);\n  fragColor     = color.x * colors[0] + color.y * colors[1] + color.z * colors[2];\n}\n"]),o=n(["precision mediump float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor;\n\nvoid main() {\n  gl_FragColor = fragColor;\n}"]);t.exports=function(t){return i(t,a,o,null,[{name:"position",type:"vec3"},{name:"color",type:"vec3"},{name:"weight",type:"float"}])}},6496:function(t,e,r){"use strict";var n=r(5827),i=r(2944),a=r(3540);t.exports=function(t,e){var r=[];function o(t,e,n,i,a,o){var s=[t,e,n,0,0,0,1];s[i+3]=1,s[i]=a,r.push.apply(r,s),s[6]=-1,r.push.apply(r,s),s[i]=o,r.push.apply(r,s),r.push.apply(r,s),s[6]=1,r.push.apply(r,s),s[i]=a,r.push.apply(r,s)}o(0,0,0,0,0,1),o(0,0,0,1,0,1),o(0,0,0,2,0,1),o(1,0,0,1,-1,1),o(1,0,0,2,-1,1),o(0,1,0,0,-1,1),o(0,1,0,2,-1,1),o(0,0,1,0,-1,1),o(0,0,1,1,-1,1);var l=n(t,r),u=i(t,[{type:t.FLOAT,buffer:l,size:3,offset:0,stride:28},{type:t.FLOAT,buffer:l,size:3,offset:12,stride:28},{type:t.FLOAT,buffer:l,size:1,offset:24,stride:28}]),c=a(t);c.attributes.position.location=0,c.attributes.color.location=1,c.attributes.weight.location=2;var f=new s(t,l,u,c);return f.update(e),f};var o=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function s(t,e,r,n){this.gl=t,this.buffer=e,this.vao=r,this.shader=n,this.pixelRatio=1,this.bounds=[[-1e3,-1e3,-1e3],[1e3,1e3,1e3]],this.position=[0,0,0],this.lineWidth=[2,2,2],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.enabled=[!0,!0,!0],this.drawSides=[!0,!0,!0],this.axes=null}var l=s.prototype,u=[0,0,0],c=[0,0,0],f=[0,0];l.isTransparent=function(){return!1},l.drawTransparent=function(t){},l.draw=function(t){var e=this.gl,r=this.vao,n=this.shader;r.bind(),n.bind();var i,a=t.model||o,s=t.view||o,l=t.projection||o;this.axes&&(i=this.axes.lastCubeProps.axis);for(var h=u,p=c,d=0;d<3;++d)i&&i[d]<0?(h[d]=this.bounds[0][d],p[d]=this.bounds[1][d]):(h[d]=this.bounds[1][d],p[d]=this.bounds[0][d]);for(f[0]=e.drawingBufferWidth,f[1]=e.drawingBufferHeight,n.uniforms.model=a,n.uniforms.view=s,n.uniforms.projection=l,n.uniforms.coordinates=[this.position,h,p],n.uniforms.colors=this.colors,n.uniforms.screenShape=f,d=0;d<3;++d)n.uniforms.lineWidth=this.lineWidth[d]*this.pixelRatio,this.enabled[d]&&(r.draw(e.TRIANGLES,6,6*d),this.drawSides[d]&&r.draw(e.TRIANGLES,12,18+12*d));r.unbind()},l.update=function(t){t&&("bounds"in t&&(this.bounds=t.bounds),"position"in t&&(this.position=t.position),"lineWidth"in t&&(this.lineWidth=t.lineWidth),"colors"in t&&(this.colors=t.colors),"enabled"in t&&(this.enabled=t.enabled),"drawSides"in t&&(this.drawSides=t.drawSides))},l.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},9578:function(t,e,r){var n=r(6832),i=n(["precision highp float;\n\nprecision highp float;\n#define GLSLIFY 1\n\nvec3 getOrthogonalVector(vec3 v) {\n  // Return up-vector for only-z vector.\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\n  // Assign z = 0, x = -b, y = a:\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\n    return normalize(vec3(-v.y, v.x, 0.0));\n  } else {\n    return normalize(vec3(0.0, v.z, -v.y));\n  }\n}\n\n// Calculate the tube vertex and normal at the given index.\n//\n// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.\n//\n// Each tube segment is made up of a ring of vertices.\n// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.\n// The indexes of tube segments run from 0 to 8.\n//\nvec3 getTubePosition(vec3 d, float index, out vec3 normal) {\n  float segmentCount = 8.0;\n\n  float angle = 2.0 * 3.14159 * (index / segmentCount);\n\n  vec3 u = getOrthogonalVector(d);\n  vec3 v = normalize(cross(u, d));\n\n  vec3 x = u * cos(angle) * length(d);\n  vec3 y = v * sin(angle) * length(d);\n  vec3 v3 = x + y;\n\n  normal = normalize(v3);\n\n  return v3;\n}\n\nattribute vec4 vector;\nattribute vec4 color, position;\nattribute vec2 uv;\n\nuniform float vectorScale, tubeScale;\nuniform mat4 model, view, projection, inverseModel;\nuniform vec3 eyePosition, lightPosition;\n\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n  // Scale the vector magnitude to stay constant with\n  // model & view changes.\n  vec3 normal;\n  vec3 XYZ = getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);\n  vec4 tubePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\n\n  //Lighting geometry parameters\n  vec4 cameraCoordinate = view * tubePosition;\n  cameraCoordinate.xyz /= cameraCoordinate.w;\n  f_lightDirection = lightPosition - cameraCoordinate.xyz;\n  f_eyeDirection   = eyePosition - cameraCoordinate.xyz;\n  f_normal = normalize((vec4(normal, 0.0) * inverseModel).xyz);\n\n  // vec4 m_position  = model * vec4(tubePosition, 1.0);\n  vec4 t_position  = view * tubePosition;\n  gl_Position      = projection * t_position;\n\n  f_color          = color;\n  f_data           = tubePosition.xyz;\n  f_position       = position.xyz;\n  f_uv             = uv;\n}\n"]),a=n(["#extension GL_OES_standard_derivatives : enable\n\nprecision highp float;\n#define GLSLIFY 1\n\nfloat beckmannDistribution(float x, float roughness) {\n  float NdotH = max(x, 0.0001);\n  float cos2Alpha = NdotH * NdotH;\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\n  float roughness2 = roughness * roughness;\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\n  return exp(tan2Alpha / roughness2) / denom;\n}\n\nfloat cookTorranceSpecular(\n  vec3 lightDirection,\n  vec3 viewDirection,\n  vec3 surfaceNormal,\n  float roughness,\n  float fresnel) {\n\n  float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\n  float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\n\n  //Half angle vector\n  vec3 H = normalize(lightDirection + viewDirection);\n\n  //Geometric term\n  float NdotH = max(dot(surfaceNormal, H), 0.0);\n  float VdotH = max(dot(viewDirection, H), 0.000001);\n  float LdotH = max(dot(lightDirection, H), 0.000001);\n  float G1 = (2.0 * NdotH * VdotN) / VdotH;\n  float G2 = (2.0 * NdotH * LdotN) / LdotH;\n  float G = min(1.0, min(G1, G2));\n  \n  //Distribution term\n  float D = beckmannDistribution(NdotH, roughness);\n\n  //Fresnel term\n  float F = pow(1.0 - VdotN, fresnel);\n\n  //Multiply terms and done\n  return  G * F * D / max(3.14159265 * VdotN, 0.000001);\n}\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\nuniform sampler2D texture;\n\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n  vec3 N = normalize(f_normal);\n  vec3 L = normalize(f_lightDirection);\n  vec3 V = normalize(f_eyeDirection);\n\n  if(gl_FrontFacing) {\n    N = -N;\n  }\n\n  float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\n\n  vec4 surfaceColor = f_color * texture2D(texture, f_uv);\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\n\n  gl_FragColor = litColor * opacity;\n}\n"]),o=n(["precision highp float;\n\nprecision highp float;\n#define GLSLIFY 1\n\nvec3 getOrthogonalVector(vec3 v) {\n  // Return up-vector for only-z vector.\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\n  // Assign z = 0, x = -b, y = a:\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\n    return normalize(vec3(-v.y, v.x, 0.0));\n  } else {\n    return normalize(vec3(0.0, v.z, -v.y));\n  }\n}\n\n// Calculate the tube vertex and normal at the given index.\n//\n// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.\n//\n// Each tube segment is made up of a ring of vertices.\n// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.\n// The indexes of tube segments run from 0 to 8.\n//\nvec3 getTubePosition(vec3 d, float index, out vec3 normal) {\n  float segmentCount = 8.0;\n\n  float angle = 2.0 * 3.14159 * (index / segmentCount);\n\n  vec3 u = getOrthogonalVector(d);\n  vec3 v = normalize(cross(u, d));\n\n  vec3 x = u * cos(angle) * length(d);\n  vec3 y = v * sin(angle) * length(d);\n  vec3 v3 = x + y;\n\n  normal = normalize(v3);\n\n  return v3;\n}\n\nattribute vec4 vector;\nattribute vec4 position;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\nuniform float tubeScale;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n  vec3 normal;\n  vec3 XYZ = getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);\n  vec4 tubePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\n\n  gl_Position = projection * view * tubePosition;\n  f_id        = id;\n  f_position  = position.xyz;\n}\n"]),s=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3  clipBounds[2];\nuniform float pickId;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n\n  gl_FragColor = vec4(pickId, f_id.xyz);\n}"]);e.meshShader={vertex:i,fragment:a,attributes:[{name:"position",type:"vec4"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"},{name:"vector",type:"vec4"}]},e.pickShader={vertex:o,fragment:s,attributes:[{name:"position",type:"vec4"},{name:"id",type:"vec4"},{name:"vector",type:"vec4"}]}},7307:function(t,e,r){"use strict";var n=r(2858),i=r(4020),a=["xyz","xzy","yxz","yzx","zxy","zyx"],o=function(t,e){var r,n=t.length;for(r=0;r<n;r++){var i=t[r];if(i===e)return r;if(i>e)return r-1}return r},s=function(t,e,r){return t<e?e:t>r?r:t},l=function(t){var e=1/0;t.sort((function(t,e){return t-e}));for(var r=t.length,n=1;n<r;n++){var i=Math.abs(t[n]-t[n-1]);i<e&&(e=i)}return e};t.exports=function(t,e){var r=t.startingPositions,u=t.maxLength||1e3,c=t.tubeSize||1,f=t.absoluteTubeSize,h=t.gridFill||"+x+y+z",p={};-1!==h.indexOf("-x")&&(p.reversedX=!0),-1!==h.indexOf("-y")&&(p.reversedY=!0),-1!==h.indexOf("-z")&&(p.reversedZ=!0),p.filled=a.indexOf(h.replace(/-/g,"").replace(/\+/g,""));var d=t.getVelocity||function(e){return function(t,e,r){var i=e.vectors,a=e.meshgrid,l=t[0],u=t[1],c=t[2],f=a[0].length,h=a[1].length,p=a[2].length,d=o(a[0],l),v=o(a[1],u),g=o(a[2],c),y=d+1,m=v+1,x=g+1;if(d=s(d,0,f-1),y=s(y,0,f-1),v=s(v,0,h-1),m=s(m,0,h-1),g=s(g,0,p-1),x=s(x,0,p-1),d<0||v<0||g<0||y>f-1||m>h-1||x>p-1)return n.create();var b,_,w,T,k,A,M=a[0][d],S=a[0][y],E=a[1][v],L=a[1][m],C=a[2][g],P=(l-M)/(S-M),O=(u-E)/(L-E),I=(c-C)/(a[2][x]-C);switch(isFinite(P)||(P=.5),isFinite(O)||(O=.5),isFinite(I)||(I=.5),r.reversedX&&(d=f-1-d,y=f-1-y),r.reversedY&&(v=h-1-v,m=h-1-m),r.reversedZ&&(g=p-1-g,x=p-1-x),r.filled){case 5:k=g,A=x,w=v*p,T=m*p,b=d*p*h,_=y*p*h;break;case 4:k=g,A=x,b=d*p,_=y*p,w=v*p*f,T=m*p*f;break;case 3:w=v,T=m,k=g*h,A=x*h,b=d*h*p,_=y*h*p;break;case 2:w=v,T=m,b=d*h,_=y*h,k=g*h*f,A=x*h*f;break;case 1:b=d,_=y,k=g*f,A=x*f,w=v*f*p,T=m*f*p;break;default:b=d,_=y,w=v*f,T=m*f,k=g*f*h,A=x*f*h}var D=i[b+w+k],z=i[b+w+A],R=i[b+T+k],F=i[b+T+A],B=i[_+w+k],N=i[_+w+A],j=i[_+T+k],U=i[_+T+A],V=n.create(),H=n.create(),q=n.create(),G=n.create();n.lerp(V,D,B,P),n.lerp(H,z,N,P),n.lerp(q,R,j,P),n.lerp(G,F,U,P);var Z=n.create(),Y=n.create();n.lerp(Z,V,q,O),n.lerp(Y,H,G,O);var W=n.create();return n.lerp(W,Z,Y,I),W}(e,t,p)},v=t.getDivergence||function(t,e){var r=n.create(),i=1e-4;n.add(r,t,[i,0,0]);var a=d(r);n.subtract(a,a,e),n.scale(a,a,1/i),n.add(r,t,[0,i,0]);var o=d(r);n.subtract(o,o,e),n.scale(o,o,1/i),n.add(r,t,[0,0,i]);var s=d(r);return n.subtract(s,s,e),n.scale(s,s,1/i),n.add(r,a,o),n.add(r,r,s),r},g=[],y=e[0][0],m=e[0][1],x=e[0][2],b=e[1][0],_=e[1][1],w=e[1][2],T=function(t){var e=t[0],r=t[1],n=t[2];return!(e<y||e>b||r<m||r>_||n<x||n>w)},k=10*n.distance(e[0],e[1])/u,A=k*k,M=1,S=0,E=r.length;E>1&&(M=function(t){for(var e=[],r=[],n=[],i={},a={},o={},s=t.length,u=0;u<s;u++){var c=t[u],f=c[0],h=c[1],p=c[2];i[f]||(e.push(f),i[f]=!0),a[h]||(r.push(h),a[h]=!0),o[p]||(n.push(p),o[p]=!0)}var d=l(e),v=l(r),g=l(n),y=Math.min(d,v,g);return isFinite(y)?y:1}(r));for(var L=0;L<E;L++){var C=n.create();n.copy(C,r[L]);var P=[C],O=[],I=d(C),D=C;O.push(I);var z=[],R=v(C,I),F=n.length(R);isFinite(F)&&F>S&&(S=F),z.push(F),g.push({points:P,velocities:O,divergences:z});for(var B=0;B<100*u&&P.length<u&&T(C);){B++;var N=n.clone(I),j=n.squaredLength(N);if(0===j)break;j>A&&n.scale(N,N,k/Math.sqrt(j)),n.add(N,N,C),I=d(N),n.squaredDistance(D,N)-A>-1e-4*A&&(P.push(N),D=N,O.push(I),R=v(N,I),F=n.length(R),isFinite(F)&&F>S&&(S=F),z.push(F)),C=N}}var U=function(t,e,r,a){for(var o=0,s=0;s<t.length;s++)for(var l=t[s].velocities,u=0;u<l.length;u++)o=Math.max(o,n.length(l[u]));var c=t.map((function(t){return function(t,e,r,a){for(var o=t.points,s=t.velocities,l=t.divergences,u=[],c=[],f=[],h=[],p=[],d=[],v=0,g=0,y=i.create(),m=i.create(),x=0;x<o.length;x++){var b=o[x],_=s[x],w=l[x];0===e&&(w=.05*r),g=n.length(_)/a,y=i.create(),n.copy(y,_),y[3]=w;for(var T=0;T<8;T++)p[T]=[b[0],b[1],b[2],T];if(h.length>0)for(T=0;T<8;T++){var k=(T+1)%8;u.push(h[T],p[T],p[k],p[k],h[k],h[T]),f.push(m,y,y,y,m,m),d.push(v,g,g,g,v,v);var A=u.length;c.push([A-6,A-5,A-4],[A-3,A-2,A-1])}var M=h;h=p,p=M;var S=m;m=y,y=S;var E=v;v=g,g=E}return{positions:u,cells:c,vectors:f,vertexIntensity:d}}(t,r,a,o)})),f=[],h=[],p=[],d=[];for(s=0;s<c.length;s++){var v=c[s],g=f.length;for(f=f.concat(v.positions),p=p.concat(v.vectors),d=d.concat(v.vertexIntensity),u=0;u<v.cells.length;u++){var y=v.cells[u],m=[];h.push(m);for(var x=0;x<y.length;x++)m.push(y[x]+g)}}return{positions:f,cells:h,vectors:p,vertexIntensity:d,colormap:e}}(g,t.colormap,S,M);return f?U.tubeScale=f:(0===S&&(S=1),U.tubeScale=.5*c*M/S),U};var u=r(9578),c=r(1140).createMesh;t.exports.createTubeMesh=function(t,e){return c(t,e,{shaders:u,traceType:"streamtube"})}},9054:function(t,e,r){var n=r(5158),i=r(6832),a=i(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec4 uv;\nattribute vec3 f;\nattribute vec3 normal;\n\nuniform vec3 objectOffset;\nuniform mat4 model, view, projection, inverseModel;\nuniform vec3 lightPosition, eyePosition;\nuniform sampler2D colormap;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec2 planeCoordinate;\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\nvarying vec4 vColor;\n\nvoid main() {\n  vec3 localCoordinate = vec3(uv.zw, f.x);\n  worldCoordinate = objectOffset + localCoordinate;\n  vec4 worldPosition = model * vec4(worldCoordinate, 1.0);\n  vec4 clipPosition = projection * view * worldPosition;\n  gl_Position = clipPosition;\n  kill = f.y;\n  value = f.z;\n  planeCoordinate = uv.xy;\n\n  vColor = texture2D(colormap, vec2(value, value));\n\n  //Lighting geometry parameters\n  vec4 cameraCoordinate = view * worldPosition;\n  cameraCoordinate.xyz /= cameraCoordinate.w;\n  lightDirection = lightPosition - cameraCoordinate.xyz;\n  eyeDirection   = eyePosition - cameraCoordinate.xyz;\n  surfaceNormal  = normalize((vec4(normal,0) * inverseModel).xyz);\n}\n"]),o=i(["precision highp float;\n#define GLSLIFY 1\n\nfloat beckmannDistribution(float x, float roughness) {\n  float NdotH = max(x, 0.0001);\n  float cos2Alpha = NdotH * NdotH;\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\n  float roughness2 = roughness * roughness;\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\n  return exp(tan2Alpha / roughness2) / denom;\n}\n\nfloat beckmannSpecular(\n  vec3 lightDirection,\n  vec3 viewDirection,\n  vec3 surfaceNormal,\n  float roughness) {\n  return beckmannDistribution(dot(surfaceNormal, normalize(lightDirection + viewDirection)), roughness);\n}\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 lowerBound, upperBound;\nuniform float contourTint;\nuniform vec4 contourColor;\nuniform sampler2D colormap;\nuniform vec3 clipBounds[2];\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\nuniform float vertexColor;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\nvarying vec4 vColor;\n\nvoid main() {\n  if (\n    kill > 0.0 ||\n    vColor.a == 0.0 ||\n    outOfRange(clipBounds[0], clipBounds[1], worldCoordinate)\n  ) discard;\n\n  vec3 N = normalize(surfaceNormal);\n  vec3 V = normalize(eyeDirection);\n  vec3 L = normalize(lightDirection);\n\n  if(gl_FrontFacing) {\n    N = -N;\n  }\n\n  float specular = max(beckmannSpecular(L, V, N, roughness), 0.);\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\n\n  //decide how to interpolate color — in vertex or in fragment\n  vec4 surfaceColor =\n    step(vertexColor, .5) * texture2D(colormap, vec2(value, value)) +\n    step(.5, vertexColor) * vColor;\n\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\n\n  gl_FragColor = mix(litColor, contourColor, contourTint) * opacity;\n}\n"]),s=i(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec4 uv;\nattribute float f;\n\nuniform vec3 objectOffset;\nuniform mat3 permutation;\nuniform mat4 model, view, projection;\nuniform float height, zOffset;\nuniform sampler2D colormap;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec2 planeCoordinate;\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\nvarying vec4 vColor;\n\nvoid main() {\n  vec3 dataCoordinate = permutation * vec3(uv.xy, height);\n  worldCoordinate = objectOffset + dataCoordinate;\n  vec4 worldPosition = model * vec4(worldCoordinate, 1.0);\n\n  vec4 clipPosition = projection * view * worldPosition;\n  clipPosition.z += zOffset;\n\n  gl_Position = clipPosition;\n  value = f + objectOffset.z;\n  kill = -1.0;\n  planeCoordinate = uv.zw;\n\n  vColor = texture2D(colormap, vec2(value, value));\n\n  //Don't do lighting for contours\n  surfaceNormal   = vec3(1,0,0);\n  eyeDirection    = vec3(0,1,0);\n  lightDirection  = vec3(0,0,1);\n}\n"]),l=i(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n  return ((p > max(a, b)) || \n          (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n  return (outOfRange(a.x, b.x, p.x) ||\n          outOfRange(a.y, b.y, p.y) ||\n          outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n  return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec2 shape;\nuniform vec3 clipBounds[2];\nuniform float pickId;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec2 planeCoordinate;\nvarying vec3 surfaceNormal;\n\nvec2 splitFloat(float v) {\n  float vh = 255.0 * v;\n  float upper = floor(vh);\n  float lower = fract(vh);\n  return vec2(upper / 255.0, floor(lower * 16.0) / 16.0);\n}\n\nvoid main() {\n  if ((kill > 0.0) ||\n      (outOfRange(clipBounds[0], clipBounds[1], worldCoordinate))) discard;\n\n  vec2 ux = splitFloat(planeCoordinate.x / shape.x);\n  vec2 uy = splitFloat(planeCoordinate.y / shape.y);\n  gl_FragColor = vec4(pickId, ux.x, uy.x, ux.y + (uy.y/16.0));\n}\n"]);e.createShader=function(t){var e=n(t,a,o,null,[{name:"uv",type:"vec4"},{name:"f",type:"vec3"},{name:"normal",type:"vec3"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e.attributes.normal.location=2,e},e.createPickShader=function(t){var e=n(t,a,l,null,[{name:"uv",type:"vec4"},{name:"f",type:"vec3"},{name:"normal",type:"vec3"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e.attributes.normal.location=2,e},e.createContourShader=function(t){var e=n(t,s,o,null,[{name:"uv",type:"vec4"},{name:"f",type:"float"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e},e.createPickContourShader=function(t){var e=n(t,s,l,null,[{name:"uv",type:"vec4"},{name:"f",type:"float"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e}},3754:function(t,e,r){"use strict";t.exports=function(t){var e=t.gl,r=m(e),n=b(e),s=x(e),l=_(e),u=i(e),c=a(e,[{buffer:u,size:4,stride:w,offset:0},{buffer:u,size:3,stride:w,offset:16},{buffer:u,size:3,stride:w,offset:28}]),f=i(e),h=a(e,[{buffer:f,size:4,stride:20,offset:0},{buffer:f,size:1,stride:20,offset:16}]),p=i(e),d=a(e,[{buffer:p,size:2,type:e.FLOAT}]),v=o(e,1,S,e.RGBA,e.UNSIGNED_BYTE);v.minFilter=e.LINEAR,v.magFilter=e.LINEAR;var g=new E(e,[0,0],[[0,0,0],[0,0,0]],r,n,u,c,v,s,l,f,h,p,d,[0,0,0]),y={levels:[[],[],[]]};for(var T in t)y[T]=t[T];return y.colormap=y.colormap||"jet",g.update(y),g};var n=r(2288),i=r(5827),a=r(2944),o=r(8931),s=r(5306),l=r(9156),u=r(7498),c=r(7382),f=r(5050),h=r(4162),p=r(104),d=r(7437),v=r(5070),g=r(9144),y=r(9054),m=y.createShader,x=y.createContourShader,b=y.createPickShader,_=y.createPickContourShader,w=40,T=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],k=[[0,0],[0,1],[1,0],[1,1],[1,0],[0,1]],A=[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]];function M(t,e,r,n,i){this.position=t,this.index=e,this.uv=r,this.level=n,this.dataCoordinate=i}!function(){for(var t=0;t<3;++t){var e=A[t],r=(t+2)%3;e[(t+1)%3+0]=1,e[r+3]=1,e[t+6]=1}}();var S=256;function E(t,e,r,n,i,a,o,l,u,c,h,p,d,v,g){this.gl=t,this.shape=e,this.bounds=r,this.objectOffset=g,this.intensityBounds=[],this._shader=n,this._pickShader=i,this._coordinateBuffer=a,this._vao=o,this._colorMap=l,this._contourShader=u,this._contourPickShader=c,this._contourBuffer=h,this._contourVAO=p,this._contourOffsets=[[],[],[]],this._contourCounts=[[],[],[]],this._vertexCount=0,this._pickResult=new M([0,0,0],[0,0],[0,0],[0,0,0],[0,0,0]),this._dynamicBuffer=d,this._dynamicVAO=v,this._dynamicOffsets=[0,0,0],this._dynamicCounts=[0,0,0],this.contourWidth=[1,1,1],this.contourLevels=[[1],[1],[1]],this.contourTint=[0,0,0],this.contourColor=[[.5,.5,.5,1],[.5,.5,.5,1],[.5,.5,.5,1]],this.showContour=!0,this.showSurface=!0,this.enableHighlight=[!0,!0,!0],this.highlightColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.highlightTint=[1,1,1],this.highlightLevel=[-1,-1,-1],this.enableDynamic=[!0,!0,!0],this.dynamicLevel=[NaN,NaN,NaN],this.dynamicColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.dynamicTint=[1,1,1],this.dynamicWidth=[1,1,1],this.axesBounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.surfaceProject=[!1,!1,!1],this.contourProject=[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],this.colorBounds=[!1,!1],this._field=[f(s.mallocFloat(1024),[0,0]),f(s.mallocFloat(1024),[0,0]),f(s.mallocFloat(1024),[0,0])],this.pickId=1,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.snapToData=!1,this.pixelRatio=1,this.opacity=1,this.lightPosition=[10,1e4,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.vertexColor=0,this.dirty=!0}var L=E.prototype;L.genColormap=function(t,e){var r=!1,n=c([l({colormap:t,nshades:S,format:"rgba"}).map((function(t,n){var i=e?function(t,e){if(!e)return 1;if(!e.length)return 1;for(var r=0;r<e.length;++r){if(e.length<2)return 1;if(e[r][0]===t)return e[r][1];if(e[r][0]>t&&r>0){var n=(e[r][0]-t)/(e[r][0]-e[r-1][0]);return e[r][1]*(1-n)+n*e[r-1][1]}}return 1}(n/255,e):t[3];return i<1&&(r=!0),[t[0],t[1],t[2],255*i]}))]);return u.divseq(n,255),this.hasAlphaScale=r,n},L.isTransparent=function(){return this.opacity<1||this.hasAlphaScale},L.isOpaque=function(){return!this.isTransparent()},L.pickSlots=1,L.setPickBase=function(t){this.pickId=t};var C=[0,0,0],P={showSurface:!1,showContour:!1,projections:[T.slice(),T.slice(),T.slice()],clipBounds:[[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]]]};function O(t,e){var r,n,i,a=e.axes&&e.axes.lastCubeProps.axis||C,o=e.showSurface,s=e.showContour;for(r=0;r<3;++r)for(o=o||e.surfaceProject[r],n=0;n<3;++n)s=s||e.contourProject[r][n];for(r=0;r<3;++r){var l=P.projections[r];for(n=0;n<16;++n)l[n]=0;for(n=0;n<4;++n)l[5*n]=1;l[5*r]=0,l[12+r]=e.axesBounds[+(a[r]>0)][r],p(l,t.model,l);var u=P.clipBounds[r];for(i=0;i<2;++i)for(n=0;n<3;++n)u[i][n]=t.clipBounds[i][n];u[0][r]=-1e8,u[1][r]=1e8}return P.showSurface=o,P.showContour=s,P}var I={model:T,view:T,projection:T,inverseModel:T.slice(),lowerBound:[0,0,0],upperBound:[0,0,0],colorMap:0,clipBounds:[[0,0,0],[0,0,0]],height:0,contourTint:0,contourColor:[0,0,0,1],permutation:[1,0,0,0,1,0,0,0,1],zOffset:-1e-4,objectOffset:[0,0,0],kambient:1,kdiffuse:1,kspecular:1,lightPosition:[1e3,1e3,1e3],eyePosition:[0,0,0],roughness:1,fresnel:1,opacity:1,vertexColor:0},D=T.slice(),z=[1,0,0,0,1,0,0,0,1];function R(t,e){t=t||{};var r=this.gl;r.disable(r.CULL_FACE),this._colorMap.bind(0);var n=I;n.model=t.model||T,n.view=t.view||T,n.projection=t.projection||T,n.lowerBound=[this.bounds[0][0],this.bounds[0][1],this.colorBounds[0]||this.bounds[0][2]],n.upperBound=[this.bounds[1][0],this.bounds[1][1],this.colorBounds[1]||this.bounds[1][2]],n.objectOffset=this.objectOffset,n.contourColor=this.contourColor[0],n.inverseModel=d(n.inverseModel,n.model);for(var i=0;i<2;++i)for(var a=n.clipBounds[i],o=0;o<3;++o)a[o]=Math.min(Math.max(this.clipBounds[i][o],-1e8),1e8);n.kambient=this.ambientLight,n.kdiffuse=this.diffuseLight,n.kspecular=this.specularLight,n.roughness=this.roughness,n.fresnel=this.fresnel,n.opacity=this.opacity,n.height=0,n.permutation=z,n.vertexColor=this.vertexColor;var s=D;for(p(s,n.view,n.model),p(s,n.projection,s),d(s,s),i=0;i<3;++i)n.eyePosition[i]=s[12+i]/s[15];var l=s[15];for(i=0;i<3;++i)l+=this.lightPosition[i]*s[4*i+3];for(i=0;i<3;++i){var u=s[12+i];for(o=0;o<3;++o)u+=s[4*o+i]*this.lightPosition[o];n.lightPosition[i]=u/l}var c=O(n,this);if(c.showSurface){for(this._shader.bind(),this._shader.uniforms=n,this._vao.bind(),this.showSurface&&this._vertexCount&&this._vao.draw(r.TRIANGLES,this._vertexCount),i=0;i<3;++i)this.surfaceProject[i]&&this.vertexCount&&(this._shader.uniforms.model=c.projections[i],this._shader.uniforms.clipBounds=c.clipBounds[i],this._vao.draw(r.TRIANGLES,this._vertexCount));this._vao.unbind()}if(c.showContour){var f=this._contourShader;n.kambient=1,n.kdiffuse=0,n.kspecular=0,n.opacity=1,f.bind(),f.uniforms=n;var h=this._contourVAO;for(h.bind(),i=0;i<3;++i)for(f.uniforms.permutation=A[i],r.lineWidth(this.contourWidth[i]*this.pixelRatio),o=0;o<this.contourLevels[i].length;++o)o===this.highlightLevel[i]?(f.uniforms.contourColor=this.highlightColor[i],f.uniforms.contourTint=this.highlightTint[i]):0!==o&&o-1!==this.highlightLevel[i]||(f.uniforms.contourColor=this.contourColor[i],f.uniforms.contourTint=this.contourTint[i]),this._contourCounts[i][o]&&(f.uniforms.height=this.contourLevels[i][o],h.draw(r.LINES,this._contourCounts[i][o],this._contourOffsets[i][o]));for(i=0;i<3;++i)for(f.uniforms.model=c.projections[i],f.uniforms.clipBounds=c.clipBounds[i],o=0;o<3;++o)if(this.contourProject[i][o]){f.uniforms.permutation=A[o],r.lineWidth(this.contourWidth[o]*this.pixelRatio);for(var v=0;v<this.contourLevels[o].length;++v)v===this.highlightLevel[o]?(f.uniforms.contourColor=this.highlightColor[o],f.uniforms.contourTint=this.highlightTint[o]):0!==v&&v-1!==this.highlightLevel[o]||(f.uniforms.contourColor=this.contourColor[o],f.uniforms.contourTint=this.contourTint[o]),this._contourCounts[o][v]&&(f.uniforms.height=this.contourLevels[o][v],h.draw(r.LINES,this._contourCounts[o][v],this._contourOffsets[o][v]))}for(h.unbind(),(h=this._dynamicVAO).bind(),i=0;i<3;++i)if(0!==this._dynamicCounts[i])for(f.uniforms.model=n.model,f.uniforms.clipBounds=n.clipBounds,f.uniforms.permutation=A[i],r.lineWidth(this.dynamicWidth[i]*this.pixelRatio),f.uniforms.contourColor=this.dynamicColor[i],f.uniforms.contourTint=this.dynamicTint[i],f.uniforms.height=this.dynamicLevel[i],h.draw(r.LINES,this._dynamicCounts[i],this._dynamicOffsets[i]),o=0;o<3;++o)this.contourProject[o][i]&&(f.uniforms.model=c.projections[o],f.uniforms.clipBounds=c.clipBounds[o],h.draw(r.LINES,this._dynamicCounts[i],this._dynamicOffsets[i]));h.unbind()}}L.draw=function(t){return R.call(this,t,!1)},L.drawTransparent=function(t){return R.call(this,t,!0)};var F={model:T,view:T,projection:T,inverseModel:T,clipBounds:[[0,0,0],[0,0,0]],height:0,shape:[0,0],pickId:0,lowerBound:[0,0,0],upperBound:[0,0,0],zOffset:0,objectOffset:[0,0,0],permutation:[1,0,0,0,1,0,0,0,1],lightPosition:[0,0,0],eyePosition:[0,0,0]};function B(t,e){return Array.isArray(t)?[e(t[0]),e(t[1]),e(t[2])]:[e(t),e(t),e(t)]}function N(t){return Array.isArray(t)?3===t.length?[t[0],t[1],t[2],1]:[t[0],t[1],t[2],t[3]]:[0,0,0,1]}function j(t){if(Array.isArray(t)){if(Array.isArray(t))return[N(t[0]),N(t[1]),N(t[2])];var e=N(t);return[e.slice(),e.slice(),e.slice()]}}L.drawPick=function(t){t=t||{};var e=this.gl;e.disable(e.CULL_FACE);var r=F;r.model=t.model||T,r.view=t.view||T,r.projection=t.projection||T,r.shape=this._field[2].shape,r.pickId=this.pickId/255,r.lowerBound=this.bounds[0],r.upperBound=this.bounds[1],r.objectOffset=this.objectOffset,r.permutation=z;for(var n=0;n<2;++n)for(var i=r.clipBounds[n],a=0;a<3;++a)i[a]=Math.min(Math.max(this.clipBounds[n][a],-1e8),1e8);var o=O(r,this);if(o.showSurface){for(this._pickShader.bind(),this._pickShader.uniforms=r,this._vao.bind(),this._vao.draw(e.TRIANGLES,this._vertexCount),n=0;n<3;++n)this.surfaceProject[n]&&(this._pickShader.uniforms.model=o.projections[n],this._pickShader.uniforms.clipBounds=o.clipBounds[n],this._vao.draw(e.TRIANGLES,this._vertexCount));this._vao.unbind()}if(o.showContour){var s=this._contourPickShader;s.bind(),s.uniforms=r;var l=this._contourVAO;for(l.bind(),a=0;a<3;++a)for(e.lineWidth(this.contourWidth[a]*this.pixelRatio),s.uniforms.permutation=A[a],n=0;n<this.contourLevels[a].length;++n)this._contourCounts[a][n]&&(s.uniforms.height=this.contourLevels[a][n],l.draw(e.LINES,this._contourCounts[a][n],this._contourOffsets[a][n]));for(n=0;n<3;++n)for(s.uniforms.model=o.projections[n],s.uniforms.clipBounds=o.clipBounds[n],a=0;a<3;++a)if(this.contourProject[n][a]){s.uniforms.permutation=A[a],e.lineWidth(this.contourWidth[a]*this.pixelRatio);for(var u=0;u<this.contourLevels[a].length;++u)this._contourCounts[a][u]&&(s.uniforms.height=this.contourLevels[a][u],l.draw(e.LINES,this._contourCounts[a][u],this._contourOffsets[a][u]))}l.unbind()}},L.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=this._field[2].shape,r=this._pickResult,n=e[0]*(t.value[0]+(t.value[2]>>4)/16)/255,i=Math.floor(n),a=n-i,o=e[1]*(t.value[1]+(15&t.value[2])/16)/255,s=Math.floor(o),l=o-s;i+=1,s+=1;var u=r.position;u[0]=u[1]=u[2]=0;for(var c=0;c<2;++c)for(var f=c?a:1-a,h=0;h<2;++h)for(var p=i+c,d=s+h,g=f*(h?l:1-l),y=0;y<3;++y)u[y]+=this._field[y].get(p,d)*g;for(var m=this._pickResult.level,x=0;x<3;++x)if(m[x]=v.le(this.contourLevels[x],u[x]),m[x]<0)this.contourLevels[x].length>0&&(m[x]=0);else if(m[x]<this.contourLevels[x].length-1){var b=this.contourLevels[x][m[x]],_=this.contourLevels[x][m[x]+1];Math.abs(b-u[x])>Math.abs(_-u[x])&&(m[x]+=1)}for(r.index[0]=a<.5?i:i+1,r.index[1]=l<.5?s:s+1,r.uv[0]=n/e[0],r.uv[1]=o/e[1],y=0;y<3;++y)r.dataCoordinate[y]=this._field[y].get(r.index[0],r.index[1]);return r},L.padField=function(t,e){var r=e.shape.slice(),n=t.shape.slice();u.assign(t.lo(1,1).hi(r[0],r[1]),e),u.assign(t.lo(1).hi(r[0],1),e.hi(r[0],1)),u.assign(t.lo(1,n[1]-1).hi(r[0],1),e.lo(0,r[1]-1).hi(r[0],1)),u.assign(t.lo(0,1).hi(1,r[1]),e.hi(1)),u.assign(t.lo(n[0]-1,1).hi(1,r[1]),e.lo(r[0]-1)),t.set(0,0,e.get(0,0)),t.set(0,n[1]-1,e.get(0,r[1]-1)),t.set(n[0]-1,0,e.get(r[0]-1,0)),t.set(n[0]-1,n[1]-1,e.get(r[0]-1,r[1]-1))},L.update=function(t){t=t||{},this.objectOffset=t.objectOffset||this.objectOffset,this.dirty=!0,"contourWidth"in t&&(this.contourWidth=B(t.contourWidth,Number)),"showContour"in t&&(this.showContour=B(t.showContour,Boolean)),"showSurface"in t&&(this.showSurface=!!t.showSurface),"contourTint"in t&&(this.contourTint=B(t.contourTint,Boolean)),"contourColor"in t&&(this.contourColor=j(t.contourColor)),"contourProject"in t&&(this.contourProject=B(t.contourProject,(function(t){return B(t,Boolean)}))),"surfaceProject"in t&&(this.surfaceProject=t.surfaceProject),"dynamicColor"in t&&(this.dynamicColor=j(t.dynamicColor)),"dynamicTint"in t&&(this.dynamicTint=B(t.dynamicTint,Number)),"dynamicWidth"in t&&(this.dynamicWidth=B(t.dynamicWidth,Number)),"opacity"in t&&(this.opacity=t.opacity),"opacityscale"in t&&(this.opacityscale=t.opacityscale),"colorBounds"in t&&(this.colorBounds=t.colorBounds),"vertexColor"in t&&(this.vertexColor=t.vertexColor?1:0),"colormap"in t&&this._colorMap.setPixels(this.genColormap(t.colormap,this.opacityscale));var e=t.field||t.coords&&t.coords[2]||null,r=!1;if(e||(e=this._field[2].shape[0]||this._field[2].shape[2]?this._field[2].lo(1,1).hi(this._field[2].shape[0]-2,this._field[2].shape[1]-2):this._field[2].hi(0,0)),"field"in t||"coords"in t){var i=(e.shape[0]+2)*(e.shape[1]+2);i>this._field[2].data.length&&(s.freeFloat(this._field[2].data),this._field[2].data=s.mallocFloat(n.nextPow2(i))),this._field[2]=f(this._field[2].data,[e.shape[0]+2,e.shape[1]+2]),this.padField(this._field[2],e),this.shape=e.shape.slice();for(var a=this.shape,o=0;o<2;++o)this._field[2].size>this._field[o].data.length&&(s.freeFloat(this._field[o].data),this._field[o].data=s.mallocFloat(this._field[2].size)),this._field[o]=f(this._field[o].data,[a[0]+2,a[1]+2]);if(t.coords){var l=t.coords;if(!Array.isArray(l)||3!==l.length)throw new Error("gl-surface: invalid coordinates for x/y");for(o=0;o<2;++o){var u=l[o];for(y=0;y<2;++y)if(u.shape[y]!==a[y])throw new Error("gl-surface: coords have incorrect shape");this.padField(this._field[o],u)}}else if(t.ticks){var c=t.ticks;if(!Array.isArray(c)||2!==c.length)throw new Error("gl-surface: invalid ticks");for(o=0;o<2;++o){var p=c[o];if((Array.isArray(p)||p.length)&&(p=f(p)),p.shape[0]!==a[o])throw new Error("gl-surface: invalid tick length");var d=f(p.data,a);d.stride[o]=p.stride[0],d.stride[1^o]=0,this.padField(this._field[o],d)}}else{for(o=0;o<2;++o){var v=[0,0];v[o]=1,this._field[o]=f(this._field[o].data,[a[0]+2,a[1]+2],v,0)}this._field[0].set(0,0,0);for(var y=0;y<a[0];++y)this._field[0].set(y+1,0,y);for(this._field[0].set(a[0]+1,0,a[0]-1),this._field[1].set(0,0,0),y=0;y<a[1];++y)this._field[1].set(0,y+1,y);this._field[1].set(0,a[1]+1,a[1]-1)}var m=this._field,x=f(s.mallocFloat(3*m[2].size*2),[3,a[0]+2,a[1]+2,2]);for(o=0;o<3;++o)g(x.pick(o),m[o],"mirror");var b=f(s.mallocFloat(3*m[2].size),[a[0]+2,a[1]+2,3]);for(o=0;o<a[0]+2;++o)for(y=0;y<a[1]+2;++y){var _=x.get(0,o,y,0),w=x.get(0,o,y,1),T=x.get(1,o,y,0),A=x.get(1,o,y,1),M=x.get(2,o,y,0),S=x.get(2,o,y,1),E=T*S-A*M,L=M*w-S*_,C=_*A-w*T,P=Math.sqrt(E*E+L*L+C*C);P<1e-8?(P=Math.max(Math.abs(E),Math.abs(L),Math.abs(C)))<1e-8?(C=1,L=E=0,P=1):P=1/P:P=1/Math.sqrt(P),b.set(o,y,0,E*P),b.set(o,y,1,L*P),b.set(o,y,2,C*P)}s.free(x.data);var O=[1/0,1/0,1/0],I=[-1/0,-1/0,-1/0],D=1/0,z=-1/0,R=(a[0]-1)*(a[1]-1)*6,F=s.mallocFloat(n.nextPow2(10*R)),N=0,U=0;for(o=0;o<a[0]-1;++o)t:for(y=0;y<a[1]-1;++y){for(var V=0;V<2;++V)for(var H=0;H<2;++H)for(var q=0;q<3;++q){var G=this._field[q].get(1+o+V,1+y+H);if(isNaN(G)||!isFinite(G))continue t}for(q=0;q<6;++q){var Z=o+k[q][0],Y=y+k[q][1],W=this._field[0].get(Z+1,Y+1),X=this._field[1].get(Z+1,Y+1);G=this._field[2].get(Z+1,Y+1),E=b.get(Z+1,Y+1,0),L=b.get(Z+1,Y+1,1),C=b.get(Z+1,Y+1,2),t.intensity&&(J=t.intensity.get(Z,Y));var J=t.intensity?t.intensity.get(Z,Y):G+this.objectOffset[2];F[N++]=Z,F[N++]=Y,F[N++]=W,F[N++]=X,F[N++]=G,F[N++]=0,F[N++]=J,F[N++]=E,F[N++]=L,F[N++]=C,O[0]=Math.min(O[0],W+this.objectOffset[0]),O[1]=Math.min(O[1],X+this.objectOffset[1]),O[2]=Math.min(O[2],G+this.objectOffset[2]),D=Math.min(D,J),I[0]=Math.max(I[0],W+this.objectOffset[0]),I[1]=Math.max(I[1],X+this.objectOffset[1]),I[2]=Math.max(I[2],G+this.objectOffset[2]),z=Math.max(z,J),U+=1}}for(t.intensityBounds&&(D=+t.intensityBounds[0],z=+t.intensityBounds[1]),o=6;o<N;o+=10)F[o]=(F[o]-D)/(z-D);this._vertexCount=U,this._coordinateBuffer.update(F.subarray(0,N)),s.freeFloat(F),s.free(b.data),this.bounds=[O,I],this.intensity=t.intensity||this._field[2],this.intensityBounds[0]===D&&this.intensityBounds[1]===z||(r=!0),this.intensityBounds=[D,z]}if("levels"in t){var K=t.levels;for(K=Array.isArray(K[0])?K.slice():[[],[],K],o=0;o<3;++o)K[o]=K[o].slice(),K[o].sort((function(t,e){return t-e}));for(o=0;o<3;++o)for(y=0;y<K[o].length;++y)K[o][y]-=this.objectOffset[o];t:for(o=0;o<3;++o){if(K[o].length!==this.contourLevels[o].length){r=!0;break}for(y=0;y<K[o].length;++y)if(K[o][y]!==this.contourLevels[o][y]){r=!0;break t}}this.contourLevels=K}if(r){m=this._field,a=this.shape;for(var $=[],Q=0;Q<3;++Q){var tt=this.contourLevels[Q],et=[],rt=[],nt=[0,0,0];for(o=0;o<tt.length;++o){var it=h(this._field[Q],tt[o]);et.push($.length/5|0),U=0;t:for(y=0;y<it.cells.length;++y){var at=it.cells[y];for(q=0;q<2;++q){var ot=it.positions[at[q]],st=ot[0],lt=0|Math.floor(st),ut=st-lt,ct=ot[1],ft=0|Math.floor(ct),ht=ct-ft,pt=!1;e:for(var dt=0;dt<3;++dt){nt[dt]=0;var vt=(Q+dt+1)%3;for(V=0;V<2;++V){var gt=V?ut:1-ut;for(Z=0|Math.min(Math.max(lt+V,0),a[0]),H=0;H<2;++H){var yt=H?ht:1-ht;if(Y=0|Math.min(Math.max(ft+H,0),a[1]),G=dt<2?this._field[vt].get(Z,Y):(this.intensity.get(Z,Y)-this.intensityBounds[0])/(this.intensityBounds[1]-this.intensityBounds[0]),!isFinite(G)||isNaN(G)){pt=!0;break e}var mt=gt*yt;nt[dt]+=mt*G}}}if(pt){if(q>0){for(var xt=0;xt<5;++xt)$.pop();U-=1}continue t}$.push(nt[0],nt[1],ot[0],ot[1],nt[2]),U+=1}}rt.push(U)}this._contourOffsets[Q]=et,this._contourCounts[Q]=rt}var bt=s.mallocFloat($.length);for(o=0;o<$.length;++o)bt[o]=$[o];this._contourBuffer.update(bt),s.freeFloat(bt)}},L.dispose=function(){this._shader.dispose(),this._vao.dispose(),this._coordinateBuffer.dispose(),this._colorMap.dispose(),this._contourBuffer.dispose(),this._contourVAO.dispose(),this._contourShader.dispose(),this._contourPickShader.dispose(),this._dynamicBuffer.dispose(),this._dynamicVAO.dispose();for(var t=0;t<3;++t)s.freeFloat(this._field[t].data)},L.highlight=function(t){var e,r;if(!t)return this._dynamicCounts=[0,0,0],this.dyanamicLevel=[NaN,NaN,NaN],void(this.highlightLevel=[-1,-1,-1]);for(e=0;e<3;++e)this.enableHighlight[e]?this.highlightLevel[e]=t.level[e]:this.highlightLevel[e]=-1;for(r=this.snapToData?t.dataCoordinate:t.position,e=0;e<3;++e)r[e]-=this.objectOffset[e];if(this.enableDynamic[0]&&r[0]!==this.dynamicLevel[0]||this.enableDynamic[1]&&r[1]!==this.dynamicLevel[1]||this.enableDynamic[2]&&r[2]!==this.dynamicLevel[2]){for(var n=0,i=this.shape,a=s.mallocFloat(12*i[0]*i[1]),o=0;o<3;++o)if(this.enableDynamic[o]){this.dynamicLevel[o]=r[o];var l=(o+1)%3,u=(o+2)%3,c=this._field[o],f=this._field[l],p=this._field[u],d=h(c,r[o]),v=d.cells,g=d.positions;for(this._dynamicOffsets[o]=n,e=0;e<v.length;++e)for(var y=v[e],m=0;m<2;++m){var x=g[y[m]],b=+x[0],_=0|b,w=0|Math.min(_+1,i[0]),T=b-_,k=1-T,A=+x[1],M=0|A,S=0|Math.min(M+1,i[1]),E=A-M,L=1-E,C=k*L,P=k*E,O=T*L,I=T*E,D=C*f.get(_,M)+P*f.get(_,S)+O*f.get(w,M)+I*f.get(w,S),z=C*p.get(_,M)+P*p.get(_,S)+O*p.get(w,M)+I*p.get(w,S);if(isNaN(D)||isNaN(z)){m&&(n-=1);break}a[2*n+0]=D,a[2*n+1]=z,n+=1}this._dynamicCounts[o]=n-this._dynamicOffsets[o]}else this.dynamicLevel[o]=NaN,this._dynamicCounts[o]=0;this._dynamicBuffer.update(a.subarray(0,2*n)),s.freeFloat(a)}}},8931:function(t,e,r){"use strict";var n=r(5050),i=r(7498),a=r(5306);t.exports=function(t){if(arguments.length<=1)throw new Error("gl-texture2d: Missing arguments for texture2d constructor");if(o||function(t){o=[t.LINEAR,t.NEAREST_MIPMAP_LINEAR,t.LINEAR_MIPMAP_NEAREST,t.LINEAR_MIPMAP_NEAREST],s=[t.NEAREST,t.LINEAR,t.NEAREST_MIPMAP_NEAREST,t.NEAREST_MIPMAP_LINEAR,t.LINEAR_MIPMAP_NEAREST,t.LINEAR_MIPMAP_LINEAR],l=[t.REPEAT,t.CLAMP_TO_EDGE,t.MIRRORED_REPEAT]}(t),"number"==typeof arguments[1])return g(t,arguments[1],arguments[2],arguments[3]||t.RGBA,arguments[4]||t.UNSIGNED_BYTE);if(Array.isArray(arguments[1]))return g(t,0|arguments[1][0],0|arguments[1][1],arguments[2]||t.RGBA,arguments[3]||t.UNSIGNED_BYTE);if("object"==typeof arguments[1]){var e=arguments[1],r=u(e)?e:e.raw;if(r)return function(t,e,r,n,i,a){var o=v(t);return t.texImage2D(t.TEXTURE_2D,0,i,i,a,e),new h(t,o,r,n,i,a)}(t,r,0|e.width,0|e.height,arguments[2]||t.RGBA,arguments[3]||t.UNSIGNED_BYTE);if(e.shape&&e.data&&e.stride)return function(t,e){var r=e.dtype,o=e.shape.slice(),s=t.getParameter(t.MAX_TEXTURE_SIZE);if(o[0]<0||o[0]>s||o[1]<0||o[1]>s)throw new Error("gl-texture2d: Invalid texture size");var l=d(o,e.stride.slice()),u=0;"float32"===r?u=t.FLOAT:"float64"===r?(u=t.FLOAT,l=!1,r="float32"):"uint8"===r?u=t.UNSIGNED_BYTE:(u=t.UNSIGNED_BYTE,l=!1,r="uint8");var f,p,g=0;if(2===o.length)g=t.LUMINANCE,o=[o[0],o[1],1],e=n(e.data,o,[e.stride[0],e.stride[1],1],e.offset);else{if(3!==o.length)throw new Error("gl-texture2d: Invalid shape for texture");if(1===o[2])g=t.ALPHA;else if(2===o[2])g=t.LUMINANCE_ALPHA;else if(3===o[2])g=t.RGB;else{if(4!==o[2])throw new Error("gl-texture2d: Invalid shape for pixel coords");g=t.RGBA}}u!==t.FLOAT||t.getExtension("OES_texture_float")||(u=t.UNSIGNED_BYTE,l=!1);var y=e.size;if(l)f=0===e.offset&&e.data.length===y?e.data:e.data.subarray(e.offset,e.offset+y);else{var m=[o[2],o[2]*o[0],1];p=a.malloc(y,r);var x=n(p,o,m,0);"float32"!==r&&"float64"!==r||u!==t.UNSIGNED_BYTE?i.assign(x,e):c(x,e),f=p.subarray(0,y)}var b=v(t);return t.texImage2D(t.TEXTURE_2D,0,g,o[0],o[1],0,g,u,f),l||a.free(p),new h(t,b,o[0],o[1],g,u)}(t,e)}throw new Error("gl-texture2d: Invalid arguments for texture2d constructor")};var o=null,s=null,l=null;function u(t){return"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement||"undefined"!=typeof ImageData&&t instanceof ImageData}var c=function(t,e){i.muls(t,e,255)};function f(t,e,r){var n=t.gl,i=n.getParameter(n.MAX_TEXTURE_SIZE);if(e<0||e>i||r<0||r>i)throw new Error("gl-texture2d: Invalid texture size");return t._shape=[e,r],t.bind(),n.texImage2D(n.TEXTURE_2D,0,t.format,e,r,0,t.format,t.type,null),t._mipLevels=[0],t}function h(t,e,r,n,i,a){this.gl=t,this.handle=e,this.format=i,this.type=a,this._shape=[r,n],this._mipLevels=[0],this._magFilter=t.NEAREST,this._minFilter=t.NEAREST,this._wrapS=t.CLAMP_TO_EDGE,this._wrapT=t.CLAMP_TO_EDGE,this._anisoSamples=1;var o=this,s=[this._wrapS,this._wrapT];Object.defineProperties(s,[{get:function(){return o._wrapS},set:function(t){return o.wrapS=t}},{get:function(){return o._wrapT},set:function(t){return o.wrapT=t}}]),this._wrapVector=s;var l=[this._shape[0],this._shape[1]];Object.defineProperties(l,[{get:function(){return o._shape[0]},set:function(t){return o.width=t}},{get:function(){return o._shape[1]},set:function(t){return o.height=t}}]),this._shapeVector=l}var p=h.prototype;function d(t,e){return 3===t.length?1===e[2]&&e[1]===t[0]*t[2]&&e[0]===t[2]:1===e[0]&&e[1]===t[0]}function v(t){var e=t.createTexture();return t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),e}function g(t,e,r,n,i){var a=t.getParameter(t.MAX_TEXTURE_SIZE);if(e<0||e>a||r<0||r>a)throw new Error("gl-texture2d: Invalid texture shape");if(i===t.FLOAT&&!t.getExtension("OES_texture_float"))throw new Error("gl-texture2d: Floating point textures not supported on this platform");var o=v(t);return t.texImage2D(t.TEXTURE_2D,0,n,e,r,0,n,i,null),new h(t,o,e,r,n,i)}Object.defineProperties(p,{minFilter:{get:function(){return this._minFilter},set:function(t){this.bind();var e=this.gl;if(this.type===e.FLOAT&&o.indexOf(t)>=0&&(e.getExtension("OES_texture_float_linear")||(t=e.NEAREST)),s.indexOf(t)<0)throw new Error("gl-texture2d: Unknown filter mode "+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t),this._minFilter=t}},magFilter:{get:function(){return this._magFilter},set:function(t){this.bind();var e=this.gl;if(this.type===e.FLOAT&&o.indexOf(t)>=0&&(e.getExtension("OES_texture_float_linear")||(t=e.NEAREST)),s.indexOf(t)<0)throw new Error("gl-texture2d: Unknown filter mode "+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t),this._magFilter=t}},mipSamples:{get:function(){return this._anisoSamples},set:function(t){var e=this._anisoSamples;if(this._anisoSamples=0|Math.max(t,1),e!==this._anisoSamples){var r=this.gl.getExtension("EXT_texture_filter_anisotropic");r&&this.gl.texParameterf(this.gl.TEXTURE_2D,r.TEXTURE_MAX_ANISOTROPY_EXT,this._anisoSamples)}return this._anisoSamples}},wrapS:{get:function(){return this._wrapS},set:function(t){if(this.bind(),l.indexOf(t)<0)throw new Error("gl-texture2d: Unknown wrap mode "+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,t),this._wrapS=t}},wrapT:{get:function(){return this._wrapT},set:function(t){if(this.bind(),l.indexOf(t)<0)throw new Error("gl-texture2d: Unknown wrap mode "+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,t),this._wrapT=t}},wrap:{get:function(){return this._wrapVector},set:function(t){if(Array.isArray(t)||(t=[t,t]),2!==t.length)throw new Error("gl-texture2d: Must specify wrap mode for rows and columns");for(var e=0;e<2;++e)if(l.indexOf(t[e])<0)throw new Error("gl-texture2d: Unknown wrap mode "+t);this._wrapS=t[0],this._wrapT=t[1];var r=this.gl;return this.bind(),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,this._wrapS),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,this._wrapT),t}},shape:{get:function(){return this._shapeVector},set:function(t){if(Array.isArray(t)){if(2!==t.length)throw new Error("gl-texture2d: Invalid texture shape")}else t=[0|t,0|t];return f(this,0|t[0],0|t[1]),[0|t[0],0|t[1]]}},width:{get:function(){return this._shape[0]},set:function(t){return f(this,t|=0,this._shape[1]),t}},height:{get:function(){return this._shape[1]},set:function(t){return t|=0,f(this,this._shape[0],t),t}}}),p.bind=function(t){var e=this.gl;return void 0!==t&&e.activeTexture(e.TEXTURE0+(0|t)),e.bindTexture(e.TEXTURE_2D,this.handle),void 0!==t?0|t:e.getParameter(e.ACTIVE_TEXTURE)-e.TEXTURE0},p.dispose=function(){this.gl.deleteTexture(this.handle)},p.generateMipmap=function(){this.bind(),this.gl.generateMipmap(this.gl.TEXTURE_2D);for(var t=Math.min(this._shape[0],this._shape[1]),e=0;t>0;++e,t>>>=1)this._mipLevels.indexOf(e)<0&&this._mipLevels.push(e)},p.setPixels=function(t,e,r,o){var s=this.gl;this.bind(),Array.isArray(e)?(o=r,r=0|e[1],e=0|e[0]):(e=e||0,r=r||0),o=o||0;var l=u(t)?t:t.raw;if(l)this._mipLevels.indexOf(o)<0?(s.texImage2D(s.TEXTURE_2D,0,this.format,this.format,this.type,l),this._mipLevels.push(o)):s.texSubImage2D(s.TEXTURE_2D,o,e,r,this.format,this.type,l);else{if(!(t.shape&&t.stride&&t.data))throw new Error("gl-texture2d: Unsupported data type");if(t.shape.length<2||e+t.shape[1]>this._shape[1]>>>o||r+t.shape[0]>this._shape[0]>>>o||e<0||r<0)throw new Error("gl-texture2d: Texture dimensions are out of bounds");!function(t,e,r,o,s,l,u,f){var h=f.dtype,p=f.shape.slice();if(p.length<2||p.length>3)throw new Error("gl-texture2d: Invalid ndarray, must be 2d or 3d");var v=0,g=0,y=d(p,f.stride.slice());if("float32"===h?v=t.FLOAT:"float64"===h?(v=t.FLOAT,y=!1,h="float32"):"uint8"===h?v=t.UNSIGNED_BYTE:(v=t.UNSIGNED_BYTE,y=!1,h="uint8"),2===p.length)g=t.LUMINANCE,p=[p[0],p[1],1],f=n(f.data,p,[f.stride[0],f.stride[1],1],f.offset);else{if(3!==p.length)throw new Error("gl-texture2d: Invalid shape for texture");if(1===p[2])g=t.ALPHA;else if(2===p[2])g=t.LUMINANCE_ALPHA;else if(3===p[2])g=t.RGB;else{if(4!==p[2])throw new Error("gl-texture2d: Invalid shape for pixel coords");g=t.RGBA}p[2]}if(g!==t.LUMINANCE&&g!==t.ALPHA||s!==t.LUMINANCE&&s!==t.ALPHA||(g=s),g!==s)throw new Error("gl-texture2d: Incompatible texture format for setPixels");var m=f.size,x=u.indexOf(o)<0;if(x&&u.push(o),v===l&&y)0===f.offset&&f.data.length===m?x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,f.data):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,f.data):x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,f.data.subarray(f.offset,f.offset+m)):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,f.data.subarray(f.offset,f.offset+m));else{var b;b=l===t.FLOAT?a.mallocFloat32(m):a.mallocUint8(m);var _=n(b,p,[p[2],p[2]*p[0],1]);v===t.FLOAT&&l===t.UNSIGNED_BYTE?c(_,f):i.assign(_,f),x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,b.subarray(0,m)):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,b.subarray(0,m)),l===t.FLOAT?a.freeFloat32(b):a.freeUint8(b)}}(s,e,r,o,this.format,this.type,this._mipLevels,t)}}},3056:function(t){"use strict";t.exports=function(t,e,r){e?e.bind():t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null);var n=0|t.getParameter(t.MAX_VERTEX_ATTRIBS);if(r){if(r.length>n)throw new Error("gl-vao: Too many vertex attributes");for(var i=0;i<r.length;++i){var a=r[i];if(a.buffer){var o=a.buffer,s=a.size||4,l=a.type||t.FLOAT,u=!!a.normalized,c=a.stride||0,f=a.offset||0;o.bind(),t.enableVertexAttribArray(i),t.vertexAttribPointer(i,s,l,u,c,f)}else{if("number"==typeof a)t.vertexAttrib1f(i,a);else if(1===a.length)t.vertexAttrib1f(i,a[0]);else if(2===a.length)t.vertexAttrib2f(i,a[0],a[1]);else if(3===a.length)t.vertexAttrib3f(i,a[0],a[1],a[2]);else{if(4!==a.length)throw new Error("gl-vao: Invalid vertex attribute");t.vertexAttrib4f(i,a[0],a[1],a[2],a[3])}t.disableVertexAttribArray(i)}}for(;i<n;++i)t.disableVertexAttribArray(i)}else for(t.bindBuffer(t.ARRAY_BUFFER,null),i=0;i<n;++i)t.disableVertexAttribArray(i)}},7220:function(t,e,r){"use strict";var n=r(3056);function i(t){this.gl=t,this._elements=null,this._attributes=null,this._elementsType=t.UNSIGNED_SHORT}i.prototype.bind=function(){n(this.gl,this._elements,this._attributes)},i.prototype.update=function(t,e,r){this._elements=e,this._attributes=t,this._elementsType=r||this.gl.UNSIGNED_SHORT},i.prototype.dispose=function(){},i.prototype.unbind=function(){},i.prototype.draw=function(t,e,r){r=r||0;var n=this.gl;this._elements?n.drawElements(t,e,this._elementsType,r):n.drawArrays(t,r,e)},t.exports=function(t){return new i(t)}},3778:function(t,e,r){"use strict";var n=r(3056);function i(t,e,r,n,i,a){this.location=t,this.dimension=e,this.a=r,this.b=n,this.c=i,this.d=a}function a(t,e,r){this.gl=t,this._ext=e,this.handle=r,this._attribs=[],this._useElements=!1,this._elementsType=t.UNSIGNED_SHORT}i.prototype.bind=function(t){switch(this.dimension){case 1:t.vertexAttrib1f(this.location,this.a);break;case 2:t.vertexAttrib2f(this.location,this.a,this.b);break;case 3:t.vertexAttrib3f(this.location,this.a,this.b,this.c);break;case 4:t.vertexAttrib4f(this.location,this.a,this.b,this.c,this.d)}},a.prototype.bind=function(){this._ext.bindVertexArrayOES(this.handle);for(var t=0;t<this._attribs.length;++t)this._attribs[t].bind(this.gl)},a.prototype.unbind=function(){this._ext.bindVertexArrayOES(null)},a.prototype.dispose=function(){this._ext.deleteVertexArrayOES(this.handle)},a.prototype.update=function(t,e,r){if(this.bind(),n(this.gl,e,t),this.unbind(),this._attribs.length=0,t)for(var a=0;a<t.length;++a){var o=t[a];"number"==typeof o?this._attribs.push(new i(a,1,o)):Array.isArray(o)&&this._attribs.push(new i(a,o.length,o[0],o[1],o[2],o[3]))}this._useElements=!!e,this._elementsType=r||this.gl.UNSIGNED_SHORT},a.prototype.draw=function(t,e,r){r=r||0;var n=this.gl;this._useElements?n.drawElements(t,e,this._elementsType,r):n.drawArrays(t,r,e)},t.exports=function(t,e){return new a(t,e,e.createVertexArrayOES())}},2944:function(t,e,r){"use strict";var n=r(3778),i=r(7220);function a(t){this.bindVertexArrayOES=t.bindVertexArray.bind(t),this.createVertexArrayOES=t.createVertexArray.bind(t),this.deleteVertexArrayOES=t.deleteVertexArray.bind(t)}t.exports=function(t,e,r,o){var s,l=t.createVertexArray?new a(t):t.getExtension("OES_vertex_array_object");return(s=l?n(t,l):i(t)).update(e,r,o),s}},2598:function(t){t.exports=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}},5879:function(t,e,r){t.exports=function(t,e){var r=n(t[0],t[1],t[2]),o=n(e[0],e[1],e[2]);i(r,r),i(o,o);var s=a(r,o);return s>1?0:Math.acos(s)};var n=r(5415),i=r(899),a=r(9305)},8827:function(t){t.exports=function(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}},7622:function(t){t.exports=function(t){var e=new Float32Array(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}},8782:function(t){t.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}},8501:function(t){t.exports=function(){var t=new Float32Array(3);return t[0]=0,t[1]=0,t[2]=0,t}},903:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2];return t[0]=i*l-a*s,t[1]=a*o-n*l,t[2]=n*s-i*o,t}},5981:function(t,e,r){t.exports=r(8288)},8288:function(t){t.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(r*r+n*n+i*i)}},8629:function(t,e,r){t.exports=r(7979)},7979:function(t){t.exports=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t}},9305:function(t){t.exports=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}},154:function(t){t.exports=1e-6},4932:function(t,e,r){t.exports=function(t,e){var r=t[0],i=t[1],a=t[2],o=e[0],s=e[1],l=e[2];return Math.abs(r-o)<=n*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(i-s)<=n*Math.max(1,Math.abs(i),Math.abs(s))&&Math.abs(a-l)<=n*Math.max(1,Math.abs(a),Math.abs(l))};var n=r(154)},5777:function(t){t.exports=function(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}},3306:function(t){t.exports=function(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}},7447:function(t,e,r){t.exports=function(t,e,r,i,a,o){var s,l;for(e||(e=3),r||(r=0),l=i?Math.min(i*e+r,t.length):t.length,s=r;s<l;s+=e)n[0]=t[s],n[1]=t[s+1],n[2]=t[s+2],a(n,n,o),t[s]=n[0],t[s+1]=n[1],t[s+2]=n[2];return t};var n=r(8501)()},5415:function(t){t.exports=function(t,e,r){var n=new Float32Array(3);return n[0]=t,n[1]=e,n[2]=r,n}},2858:function(t,e,r){t.exports={EPSILON:r(154),create:r(8501),clone:r(7622),angle:r(5879),fromValues:r(5415),copy:r(8782),set:r(831),equals:r(4932),exactEquals:r(5777),add:r(2598),subtract:r(911),sub:r(8921),multiply:r(105),mul:r(5733),divide:r(7979),div:r(8629),min:r(3605),max:r(1716),floor:r(3306),ceil:r(8827),round:r(1624),scale:r(5685),scaleAndAdd:r(6722),distance:r(8288),dist:r(5981),squaredDistance:r(6403),sqrDist:r(5294),length:r(4693),len:r(1468),squaredLength:r(4337),sqrLen:r(3303),negate:r(435),inverse:r(2073),normalize:r(899),dot:r(9305),cross:r(903),lerp:r(1868),random:r(6660),transformMat4:r(3255),transformMat3:r(9908),transformQuat:r(6568),rotateX:r(392),rotateY:r(3222),rotateZ:r(3388),forEach:r(7447)}},2073:function(t){t.exports=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}},1468:function(t,e,r){t.exports=r(4693)},4693:function(t){t.exports=function(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}},1868:function(t){t.exports=function(t,e,r,n){var i=e[0],a=e[1],o=e[2];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t[2]=o+n*(r[2]-o),t}},1716:function(t){t.exports=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t}},3605:function(t){t.exports=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t}},5733:function(t,e,r){t.exports=r(105)},105:function(t){t.exports=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t}},435:function(t){t.exports=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}},899:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=r*r+n*n+i*i;return a>0&&(a=1/Math.sqrt(a),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a),t}},6660:function(t){t.exports=function(t,e){e=e||1;var r=2*Math.random()*Math.PI,n=2*Math.random()-1,i=Math.sqrt(1-n*n)*e;return t[0]=Math.cos(r)*i,t[1]=Math.sin(r)*i,t[2]=n*e,t}},392:function(t){t.exports=function(t,e,r,n){var i=r[1],a=r[2],o=e[1]-i,s=e[2]-a,l=Math.sin(n),u=Math.cos(n);return t[0]=e[0],t[1]=i+o*u-s*l,t[2]=a+o*l+s*u,t}},3222:function(t){t.exports=function(t,e,r,n){var i=r[0],a=r[2],o=e[0]-i,s=e[2]-a,l=Math.sin(n),u=Math.cos(n);return t[0]=i+s*l+o*u,t[1]=e[1],t[2]=a+s*u-o*l,t}},3388:function(t){t.exports=function(t,e,r,n){var i=r[0],a=r[1],o=e[0]-i,s=e[1]-a,l=Math.sin(n),u=Math.cos(n);return t[0]=i+o*u-s*l,t[1]=a+o*l+s*u,t[2]=e[2],t}},1624:function(t){t.exports=function(t,e){return t[0]=Math.round(e[0]),t[1]=Math.round(e[1]),t[2]=Math.round(e[2]),t}},5685:function(t){t.exports=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}},6722:function(t){t.exports=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t}},831:function(t){t.exports=function(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t}},5294:function(t,e,r){t.exports=r(6403)},3303:function(t,e,r){t.exports=r(4337)},6403:function(t){t.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return r*r+n*n+i*i}},4337:function(t){t.exports=function(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}},8921:function(t,e,r){t.exports=r(911)},911:function(t){t.exports=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}},9908:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2];return t[0]=n*r[0]+i*r[3]+a*r[6],t[1]=n*r[1]+i*r[4]+a*r[7],t[2]=n*r[2]+i*r[5]+a*r[8],t}},3255:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[3]*n+r[7]*i+r[11]*a+r[15];return o=o||1,t[0]=(r[0]*n+r[4]*i+r[8]*a+r[12])/o,t[1]=(r[1]*n+r[5]*i+r[9]*a+r[13])/o,t[2]=(r[2]*n+r[6]*i+r[10]*a+r[14])/o,t}},6568:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2],u=r[3],c=u*n+s*a-l*i,f=u*i+l*n-o*a,h=u*a+o*i-s*n,p=-o*n-s*i-l*a;return t[0]=c*u+p*-o+f*-l-h*-s,t[1]=f*u+p*-s+h*-o-c*-l,t[2]=h*u+p*-l+c*-s-f*-o,t}},3433:function(t){t.exports=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t}},1413:function(t){t.exports=function(t){var e=new Float32Array(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}},3470:function(t){t.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}},5313:function(t){t.exports=function(){var t=new Float32Array(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t}},5446:function(t){t.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return Math.sqrt(r*r+n*n+i*i+a*a)}},205:function(t){t.exports=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t[3]=e[3]/r[3],t}},4242:function(t){t.exports=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}},5680:function(t){t.exports=function(t,e,r,n){var i=new Float32Array(4);return i[0]=t,i[1]=e,i[2]=r,i[3]=n,i}},4020:function(t,e,r){t.exports={create:r(5313),clone:r(1413),fromValues:r(5680),copy:r(3470),set:r(6453),add:r(3433),subtract:r(2705),multiply:r(746),divide:r(205),min:r(2170),max:r(3030),scale:r(5510),scaleAndAdd:r(4224),distance:r(5446),squaredDistance:r(1542),length:r(8177),squaredLength:r(9037),negate:r(6459),inverse:r(8057),normalize:r(381),dot:r(4242),lerp:r(8746),random:r(3770),transformMat4:r(6342),transformQuat:r(5022)}},8057:function(t){t.exports=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t[3]=1/e[3],t}},8177:function(t){t.exports=function(t){var e=t[0],r=t[1],n=t[2],i=t[3];return Math.sqrt(e*e+r*r+n*n+i*i)}},8746:function(t){t.exports=function(t,e,r,n){var i=e[0],a=e[1],o=e[2],s=e[3];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t[2]=o+n*(r[2]-o),t[3]=s+n*(r[3]-s),t}},3030:function(t){t.exports=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t[3]=Math.max(e[3],r[3]),t}},2170:function(t){t.exports=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t[3]=Math.min(e[3],r[3]),t}},746:function(t){t.exports=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t[3]=e[3]*r[3],t}},6459:function(t){t.exports=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t}},381:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r*r+n*n+i*i+a*a;return o>0&&(o=1/Math.sqrt(o),t[0]=r*o,t[1]=n*o,t[2]=i*o,t[3]=a*o),t}},3770:function(t,e,r){var n=r(381),i=r(5510);t.exports=function(t,e){return e=e||1,t[0]=Math.random(),t[1]=Math.random(),t[2]=Math.random(),t[3]=Math.random(),n(t,t),i(t,t,e),t}},5510:function(t){t.exports=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t}},4224:function(t){t.exports=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t}},6453:function(t){t.exports=function(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t}},1542:function(t){t.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return r*r+n*n+i*i+a*a}},9037:function(t){t.exports=function(t){var e=t[0],r=t[1],n=t[2],i=t[3];return e*e+r*r+n*n+i*i}},2705:function(t){t.exports=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t}},6342:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t}},5022:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2],u=r[3],c=u*n+s*a-l*i,f=u*i+l*n-o*a,h=u*a+o*i-s*n,p=-o*n-s*i-l*a;return t[0]=c*u+p*-o+f*-l-h*-s,t[1]=f*u+p*-s+h*-o-c*-l,t[2]=h*u+p*-l+c*-s-f*-o,t[3]=e[3],t}},9365:function(t,e,r){var n=r(8096),i=r(7896);t.exports=function(t){for(var e=Array.isArray(t)?t:n(t),r=0;r<e.length;r++){var a=e[r];if("preprocessor"===a.type){var o=a.data.match(/\#define\s+SHADER_NAME(_B64)?\s+(.+)$/);if(o&&o[2]){var s=o[1],l=o[2];return(s?i(l):l).trim()}}}}},3193:function(t,e,r){t.exports=function(t){var e,r,T,k=0,A=0,M=l,S=[],E=[],L=1,C=0,P=0,O=!1,I=!1,D="",z=a,R=n;"300 es"===(t=t||{}).version&&(z=s,R=o);var F={},B={};for(k=0;k<z.length;k++)F[z[k]]=!0;for(k=0;k<R.length;k++)B[R[k]]=!0;return function(t){return E=[],null!==t?function(t){var r;for(k=0,t.toString&&(t=t.toString()),D+=t.replace(/\r\n/g,"\n"),T=D.length;e=D[k],k<T;){switch(r=k,M){case c:k=H();break;case f:case h:k=V();break;case p:k=q();break;case d:k=Y();break;case _:k=Z();break;case v:k=W();break;case u:k=X();break;case x:k=U();break;case l:k=j()}r!==k&&("\n"===D[r]?(C=0,++L):++C)}return A+=k,D=D.slice(k),E}(t):(S.length&&N(S.join("")),M=b,N("(eof)"),E)};function N(t){t.length&&E.push({type:w[M],data:t,position:P,line:L,column:C})}function j(){return S=S.length?[]:S,"/"===r&&"*"===e?(P=A+k-1,M=c,r=e,k+1):"/"===r&&"/"===e?(P=A+k-1,M=f,r=e,k+1):"#"===e?(M=h,P=A+k,k):/\s/.test(e)?(M=x,P=A+k,k):(O=/\d/.test(e),I=/[^\w_]/.test(e),P=A+k,M=O?d:I?p:u,k)}function U(){return/[^\s]/g.test(e)?(N(S.join("")),M=l,k):(S.push(e),r=e,k+1)}function V(){return"\r"!==e&&"\n"!==e||"\\"===r?(S.push(e),r=e,k+1):(N(S.join("")),M=l,k)}function H(){return"/"===e&&"*"===r?(S.push(e),N(S.join("")),M=l,k+1):(S.push(e),r=e,k+1)}function q(){if("."===r&&/\d/.test(e))return M=v,k;if("/"===r&&"*"===e)return M=c,k;if("/"===r&&"/"===e)return M=f,k;if("."===e&&S.length){for(;G(S););return M=v,k}if(";"===e||")"===e||"("===e){if(S.length)for(;G(S););return N(e),M=l,k+1}var t=2===S.length&&"="!==e;if(/[\w_\d\s]/.test(e)||t){for(;G(S););return M=l,k}return S.push(e),r=e,k+1}function G(t){for(var e,r,n=0;;){if(e=i.indexOf(t.slice(0,t.length+n).join("")),r=i[e],-1===e){if(n--+t.length>0)continue;r=t.slice(0,1).join("")}return N(r),P+=r.length,(S=S.slice(r.length)).length}}function Z(){return/[^a-fA-F0-9]/.test(e)?(N(S.join("")),M=l,k):(S.push(e),r=e,k+1)}function Y(){return"."===e||/[eE]/.test(e)?(S.push(e),M=v,r=e,k+1):"x"===e&&1===S.length&&"0"===S[0]?(M=_,S.push(e),r=e,k+1):/[^\d]/.test(e)?(N(S.join("")),M=l,k):(S.push(e),r=e,k+1)}function W(){return"f"===e&&(S.push(e),r=e,k+=1),/[eE]/.test(e)?(S.push(e),r=e,k+1):("-"!==e&&"+"!==e||!/[eE]/.test(r))&&/[^\d]/.test(e)?(N(S.join("")),M=l,k):(S.push(e),r=e,k+1)}function X(){if(/[^\d\w_]/.test(e)){var t=S.join("");return M=B[t]?m:F[t]?y:g,N(S.join("")),M=l,k}return S.push(e),r=e,k+1}};var n=r(399),i=r(9746),a=r(9525),o=r(9458),s=r(3585),l=999,u=9999,c=0,f=1,h=2,p=3,d=4,v=5,g=6,y=7,m=8,x=9,b=10,_=11,w=["block-comment","line-comment","preprocessor","operator","integer","float","ident","builtin","keyword","whitespace","eof","integer"]},3585:function(t,e,r){var n=r(9525);n=n.slice().filter((function(t){return!/^(gl\_|texture)/.test(t)})),t.exports=n.concat(["gl_VertexID","gl_InstanceID","gl_Position","gl_PointSize","gl_FragCoord","gl_FrontFacing","gl_FragDepth","gl_PointCoord","gl_MaxVertexAttribs","gl_MaxVertexUniformVectors","gl_MaxVertexOutputVectors","gl_MaxFragmentInputVectors","gl_MaxVertexTextureImageUnits","gl_MaxCombinedTextureImageUnits","gl_MaxTextureImageUnits","gl_MaxFragmentUniformVectors","gl_MaxDrawBuffers","gl_MinProgramTexelOffset","gl_MaxProgramTexelOffset","gl_DepthRangeParameters","gl_DepthRange","trunc","round","roundEven","isnan","isinf","floatBitsToInt","floatBitsToUint","intBitsToFloat","uintBitsToFloat","packSnorm2x16","unpackSnorm2x16","packUnorm2x16","unpackUnorm2x16","packHalf2x16","unpackHalf2x16","outerProduct","transpose","determinant","inverse","texture","textureSize","textureProj","textureLod","textureOffset","texelFetch","texelFetchOffset","textureProjOffset","textureLodOffset","textureProjLod","textureProjLodOffset","textureGrad","textureGradOffset","textureProjGrad","textureProjGradOffset"])},9525:function(t){t.exports=["abs","acos","all","any","asin","atan","ceil","clamp","cos","cross","dFdx","dFdy","degrees","distance","dot","equal","exp","exp2","faceforward","floor","fract","gl_BackColor","gl_BackLightModelProduct","gl_BackLightProduct","gl_BackMaterial","gl_BackSecondaryColor","gl_ClipPlane","gl_ClipVertex","gl_Color","gl_DepthRange","gl_DepthRangeParameters","gl_EyePlaneQ","gl_EyePlaneR","gl_EyePlaneS","gl_EyePlaneT","gl_Fog","gl_FogCoord","gl_FogFragCoord","gl_FogParameters","gl_FragColor","gl_FragCoord","gl_FragData","gl_FragDepth","gl_FragDepthEXT","gl_FrontColor","gl_FrontFacing","gl_FrontLightModelProduct","gl_FrontLightProduct","gl_FrontMaterial","gl_FrontSecondaryColor","gl_LightModel","gl_LightModelParameters","gl_LightModelProducts","gl_LightProducts","gl_LightSource","gl_LightSourceParameters","gl_MaterialParameters","gl_MaxClipPlanes","gl_MaxCombinedTextureImageUnits","gl_MaxDrawBuffers","gl_MaxFragmentUniformComponents","gl_MaxLights","gl_MaxTextureCoords","gl_MaxTextureImageUnits","gl_MaxTextureUnits","gl_MaxVaryingFloats","gl_MaxVertexAttribs","gl_MaxVertexTextureImageUnits","gl_MaxVertexUniformComponents","gl_ModelViewMatrix","gl_ModelViewMatrixInverse","gl_ModelViewMatrixInverseTranspose","gl_ModelViewMatrixTranspose","gl_ModelViewProjectionMatrix","gl_ModelViewProjectionMatrixInverse","gl_ModelViewProjectionMatrixInverseTranspose","gl_ModelViewProjectionMatrixTranspose","gl_MultiTexCoord0","gl_MultiTexCoord1","gl_MultiTexCoord2","gl_MultiTexCoord3","gl_MultiTexCoord4","gl_MultiTexCoord5","gl_MultiTexCoord6","gl_MultiTexCoord7","gl_Normal","gl_NormalMatrix","gl_NormalScale","gl_ObjectPlaneQ","gl_ObjectPlaneR","gl_ObjectPlaneS","gl_ObjectPlaneT","gl_Point","gl_PointCoord","gl_PointParameters","gl_PointSize","gl_Position","gl_ProjectionMatrix","gl_ProjectionMatrixInverse","gl_ProjectionMatrixInverseTranspose","gl_ProjectionMatrixTranspose","gl_SecondaryColor","gl_TexCoord","gl_TextureEnvColor","gl_TextureMatrix","gl_TextureMatrixInverse","gl_TextureMatrixInverseTranspose","gl_TextureMatrixTranspose","gl_Vertex","greaterThan","greaterThanEqual","inversesqrt","length","lessThan","lessThanEqual","log","log2","matrixCompMult","max","min","mix","mod","normalize","not","notEqual","pow","radians","reflect","refract","sign","sin","smoothstep","sqrt","step","tan","texture2D","texture2DLod","texture2DProj","texture2DProjLod","textureCube","textureCubeLod","texture2DLodEXT","texture2DProjLodEXT","textureCubeLodEXT","texture2DGradEXT","texture2DProjGradEXT","textureCubeGradEXT"]},9458:function(t,e,r){var n=r(399);t.exports=n.slice().concat(["layout","centroid","smooth","case","mat2x2","mat2x3","mat2x4","mat3x2","mat3x3","mat3x4","mat4x2","mat4x3","mat4x4","uvec2","uvec3","uvec4","samplerCubeShadow","sampler2DArray","sampler2DArrayShadow","isampler2D","isampler3D","isamplerCube","isampler2DArray","usampler2D","usampler3D","usamplerCube","usampler2DArray","coherent","restrict","readonly","writeonly","resource","atomic_uint","noperspective","patch","sample","subroutine","common","partition","active","filter","image1D","image2D","image3D","imageCube","iimage1D","iimage2D","iimage3D","iimageCube","uimage1D","uimage2D","uimage3D","uimageCube","image1DArray","image2DArray","iimage1DArray","iimage2DArray","uimage1DArray","uimage2DArray","image1DShadow","image2DShadow","image1DArrayShadow","image2DArrayShadow","imageBuffer","iimageBuffer","uimageBuffer","sampler1DArray","sampler1DArrayShadow","isampler1D","isampler1DArray","usampler1D","usampler1DArray","isampler2DRect","usampler2DRect","samplerBuffer","isamplerBuffer","usamplerBuffer","sampler2DMS","isampler2DMS","usampler2DMS","sampler2DMSArray","isampler2DMSArray","usampler2DMSArray"])},399:function(t){t.exports=["precision","highp","mediump","lowp","attribute","const","uniform","varying","break","continue","do","for","while","if","else","in","out","inout","float","int","uint","void","bool","true","false","discard","return","mat2","mat3","mat4","vec2","vec3","vec4","ivec2","ivec3","ivec4","bvec2","bvec3","bvec4","sampler1D","sampler2D","sampler3D","samplerCube","sampler1DShadow","sampler2DShadow","struct","asm","class","union","enum","typedef","template","this","packed","goto","switch","default","inline","noinline","volatile","public","static","extern","external","interface","long","short","double","half","fixed","unsigned","input","output","hvec2","hvec3","hvec4","dvec2","dvec3","dvec4","fvec2","fvec3","fvec4","sampler2DRect","sampler3DRect","sampler2DRectShadow","sizeof","cast","namespace","using"]},9746:function(t){t.exports=["<<=",">>=","++","--","<<",">>","<=",">=","==","!=","&&","||","+=","-=","*=","/=","%=","&=","^^","^=","|=","(",")","[","]",".","!","~","*","/","%","+","-","<",">","&","^","|","?",":","=",",",";","{","}"]},8096:function(t,e,r){var n=r(3193);t.exports=function(t,e){var r=n(e),i=[];return(i=i.concat(r(t))).concat(r(null))}},6832:function(t){t.exports=function(t){"string"==typeof t&&(t=[t]);for(var e=[].slice.call(arguments,1),r=[],n=0;n<t.length-1;n++)r.push(t[n],e[n]||"");return r.push(t[n]),r.join("")}},5233:function(t,e,r){"use strict";var n=r(4846);t.exports=n&&function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(e){t=!1}return t}()},2183:function(t,e,r){"use strict";t.exports=function(t,e){var r=t.length;if(0===r)throw new Error("Must have at least d+1 points");var i=t[0].length;if(r<=i)throw new Error("Must input at least d+1 points");var o=t.slice(0,i+1),s=n.apply(void 0,o);if(0===s)throw new Error("Input not in general position");for(var l=new Array(i+1),c=0;c<=i;++c)l[c]=c;s<0&&(l[0]=1,l[1]=0);var f=new a(l,new Array(i+1),!1),h=f.adjacent,p=new Array(i+2);for(c=0;c<=i;++c){for(var d=l.slice(),v=0;v<=i;++v)v===c&&(d[v]=-1);var g=d[0];d[0]=d[1],d[1]=g;var y=new a(d,new Array(i+1),!0);h[c]=y,p[c]=y}for(p[i+1]=f,c=0;c<=i;++c){d=h[c].vertices;var m=h[c].adjacent;for(v=0;v<=i;++v){var x=d[v];if(x<0)m[v]=f;else for(var b=0;b<=i;++b)h[b].vertices.indexOf(x)<0&&(m[v]=h[b])}}var _=new u(i,o,p),w=!!e;for(c=i+1;c<r;++c)_.insert(t[c],w);return _.boundary()};var n=r(417),i=r(8211).H;function a(t,e,r){this.vertices=t,this.adjacent=e,this.boundary=r,this.lastVisited=-1}function o(t,e,r){this.vertices=t,this.cell=e,this.index=r}function s(t,e){return i(t.vertices,e.vertices)}a.prototype.flip=function(){var t=this.vertices[0];this.vertices[0]=this.vertices[1],this.vertices[1]=t;var e=this.adjacent[0];this.adjacent[0]=this.adjacent[1],this.adjacent[1]=e};var l=[];function u(t,e,r){this.dimension=t,this.vertices=e,this.simplices=r,this.interior=r.filter((function(t){return!t.boundary})),this.tuple=new Array(t+1);for(var i=0;i<=t;++i)this.tuple[i]=this.vertices[i];var a,o=l[t];o||(o=l[t]=((a=n[t+1])||(a=n),function(t){return function(){var e=this.tuple;return t.apply(this,e)}}(a))),this.orient=o}var c=u.prototype;c.handleBoundaryDegeneracy=function(t,e){var r=this.dimension,n=this.vertices.length-1,i=this.tuple,a=this.vertices,o=[t];for(t.lastVisited=-n;o.length>0;)for(var s=(t=o.pop()).adjacent,l=0;l<=r;++l){var u=s[l];if(u.boundary&&!(u.lastVisited<=-n)){for(var c=u.vertices,f=0;f<=r;++f){var h=c[f];i[f]=h<0?e:a[h]}var p=this.orient();if(p>0)return u;u.lastVisited=-n,0===p&&o.push(u)}}return null},c.walk=function(t,e){var r=this.vertices.length-1,n=this.dimension,i=this.vertices,a=this.tuple,o=e?this.interior.length*Math.random()|0:this.interior.length-1,s=this.interior[o];t:for(;!s.boundary;){for(var l=s.vertices,u=s.adjacent,c=0;c<=n;++c)a[c]=i[l[c]];for(s.lastVisited=r,c=0;c<=n;++c){var f=u[c];if(!(f.lastVisited>=r)){var h=a[c];a[c]=t;var p=this.orient();if(a[c]=h,p<0){s=f;continue t}f.boundary?f.lastVisited=-r:f.lastVisited=r}}return}return s},c.addPeaks=function(t,e){var r=this.vertices.length-1,n=this.dimension,i=this.vertices,l=this.tuple,u=this.interior,c=this.simplices,f=[e];e.lastVisited=r,e.vertices[e.vertices.indexOf(-1)]=r,e.boundary=!1,u.push(e);for(var h=[];f.length>0;){var p=(e=f.pop()).vertices,d=e.adjacent,v=p.indexOf(r);if(!(v<0))for(var g=0;g<=n;++g)if(g!==v){var y=d[g];if(y.boundary&&!(y.lastVisited>=r)){var m=y.vertices;if(y.lastVisited!==-r){for(var x=0,b=0;b<=n;++b)m[b]<0?(x=b,l[b]=t):l[b]=i[m[b]];if(this.orient()>0){m[x]=r,y.boundary=!1,u.push(y),f.push(y),y.lastVisited=r;continue}y.lastVisited=-r}var _=y.adjacent,w=p.slice(),T=d.slice(),k=new a(w,T,!0);c.push(k);var A=_.indexOf(e);if(!(A<0))for(_[A]=k,T[v]=y,w[g]=-1,T[g]=e,d[g]=k,k.flip(),b=0;b<=n;++b){var M=w[b];if(!(M<0||M===r)){for(var S=new Array(n-1),E=0,L=0;L<=n;++L){var C=w[L];C<0||L===b||(S[E++]=C)}h.push(new o(S,k,b))}}}}}for(h.sort(s),g=0;g+1<h.length;g+=2){var P=h[g],O=h[g+1],I=P.index,D=O.index;I<0||D<0||(P.cell.adjacent[P.index]=O.cell,O.cell.adjacent[O.index]=P.cell)}},c.insert=function(t,e){var r=this.vertices;r.push(t);var n=this.walk(t,e);if(n){for(var i=this.dimension,a=this.tuple,o=0;o<=i;++o){var s=n.vertices[o];a[o]=s<0?t:r[s]}var l=this.orient(a);l<0||(0!==l||(n=this.handleBoundaryDegeneracy(n,t)))&&this.addPeaks(t,n)}},c.boundary=function(){for(var t=this.dimension,e=[],r=this.simplices,n=r.length,i=0;i<n;++i){var a=r[i];if(a.boundary){for(var o=new Array(t),s=a.vertices,l=0,u=0,c=0;c<=t;++c)s[c]>=0?o[l++]=s[c]:u=1&c;if(u===(1&t)){var f=o[0];o[0]=o[1],o[1]=f}e.push(o)}}return e}},9014:function(t,e,r){"use strict";var n=r(5070);function i(t,e,r,n,i){this.mid=t,this.left=e,this.right=r,this.leftPoints=n,this.rightPoints=i,this.count=(e?e.count:0)+(r?r.count:0)+n.length}t.exports=function(t){return t&&0!==t.length?new y(g(t)):new y(null)};var a=i.prototype;function o(t,e){t.mid=e.mid,t.left=e.left,t.right=e.right,t.leftPoints=e.leftPoints,t.rightPoints=e.rightPoints,t.count=e.count}function s(t,e){var r=g(e);t.mid=r.mid,t.left=r.left,t.right=r.right,t.leftPoints=r.leftPoints,t.rightPoints=r.rightPoints,t.count=r.count}function l(t,e){var r=t.intervals([]);r.push(e),s(t,r)}function u(t,e){var r=t.intervals([]),n=r.indexOf(e);return n<0?0:(r.splice(n,1),s(t,r),1)}function c(t,e,r){for(var n=0;n<t.length&&t[n][0]<=e;++n){var i=r(t[n]);if(i)return i}}function f(t,e,r){for(var n=t.length-1;n>=0&&t[n][1]>=e;--n){var i=r(t[n]);if(i)return i}}function h(t,e){for(var r=0;r<t.length;++r){var n=e(t[r]);if(n)return n}}function p(t,e){return t-e}function d(t,e){return t[0]-e[0]||t[1]-e[1]}function v(t,e){return t[1]-e[1]||t[0]-e[0]}function g(t){if(0===t.length)return null;for(var e=[],r=0;r<t.length;++r)e.push(t[r][0],t[r][1]);e.sort(p);var n=e[e.length>>1],a=[],o=[],s=[];for(r=0;r<t.length;++r){var l=t[r];l[1]<n?a.push(l):n<l[0]?o.push(l):s.push(l)}var u=s,c=s.slice();return u.sort(d),c.sort(v),new i(n,g(a),g(o),u,c)}function y(t){this.root=t}a.intervals=function(t){return t.push.apply(t,this.leftPoints),this.left&&this.left.intervals(t),this.right&&this.right.intervals(t),t},a.insert=function(t){var e=this.count-this.leftPoints.length;if(this.count+=1,t[1]<this.mid)this.left?4*(this.left.count+1)>3*(e+1)?l(this,t):this.left.insert(t):this.left=g([t]);else if(t[0]>this.mid)this.right?4*(this.right.count+1)>3*(e+1)?l(this,t):this.right.insert(t):this.right=g([t]);else{var r=n.ge(this.leftPoints,t,d),i=n.ge(this.rightPoints,t,v);this.leftPoints.splice(r,0,t),this.rightPoints.splice(i,0,t)}},a.remove=function(t){var e=this.count-this.leftPoints;if(t[1]<this.mid)return this.left?4*(this.right?this.right.count:0)>3*(e-1)?u(this,t):2===(s=this.left.remove(t))?(this.left=null,this.count-=1,1):(1===s&&(this.count-=1),s):0;if(t[0]>this.mid)return this.right?4*(this.left?this.left.count:0)>3*(e-1)?u(this,t):2===(s=this.right.remove(t))?(this.right=null,this.count-=1,1):(1===s&&(this.count-=1),s):0;if(1===this.count)return this.leftPoints[0]===t?2:0;if(1===this.leftPoints.length&&this.leftPoints[0]===t){if(this.left&&this.right){for(var r=this,i=this.left;i.right;)r=i,i=i.right;if(r===this)i.right=this.right;else{var a=this.left,s=this.right;r.count-=i.count,r.right=i.left,i.left=a,i.right=s}o(this,i),this.count=(this.left?this.left.count:0)+(this.right?this.right.count:0)+this.leftPoints.length}else this.left?o(this,this.left):o(this,this.right);return 1}for(a=n.ge(this.leftPoints,t,d);a<this.leftPoints.length&&this.leftPoints[a][0]===t[0];++a)if(this.leftPoints[a]===t)for(this.count-=1,this.leftPoints.splice(a,1),s=n.ge(this.rightPoints,t,v);s<this.rightPoints.length&&this.rightPoints[s][1]===t[1];++s)if(this.rightPoints[s]===t)return this.rightPoints.splice(s,1),1;return 0},a.queryPoint=function(t,e){return t<this.mid?this.left&&(r=this.left.queryPoint(t,e))?r:c(this.leftPoints,t,e):t>this.mid?this.right&&(r=this.right.queryPoint(t,e))?r:f(this.rightPoints,t,e):h(this.leftPoints,e);var r},a.queryInterval=function(t,e,r){var n;return t<this.mid&&this.left&&(n=this.left.queryInterval(t,e,r))||e>this.mid&&this.right&&(n=this.right.queryInterval(t,e,r))?n:e<this.mid?c(this.leftPoints,e,r):t>this.mid?f(this.rightPoints,t,r):h(this.leftPoints,r)};var m=y.prototype;m.insert=function(t){this.root?this.root.insert(t):this.root=new i(t[0],null,null,[t],[t])},m.remove=function(t){if(this.root){var e=this.root.remove(t);return 2===e&&(this.root=null),0!==e}return!1},m.queryPoint=function(t,e){if(this.root)return this.root.queryPoint(t,e)},m.queryInterval=function(t,e,r){if(t<=e&&this.root)return this.root.queryInterval(t,e,r)},Object.defineProperty(m,"count",{get:function(){return this.root?this.root.count:0}}),Object.defineProperty(m,"intervals",{get:function(){return this.root?this.root.intervals([]):[]}})},9560:function(t){"use strict";t.exports=function(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=r;return e}},4846:function(t){t.exports=!0},4780:function(t){function e(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}t.exports=function(t){return null!=t&&(e(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&e(t.slice(0,0))}(t)||!!t._isBuffer)}},3596:function(t){"use strict";t.exports=function(t){for(var e,r=t.length,n=0;n<r;n++)if(((e=t.charCodeAt(n))<9||e>13)&&32!==e&&133!==e&&160!==e&&5760!==e&&6158!==e&&(e<8192||e>8205)&&8232!==e&&8233!==e&&8239!==e&&8287!==e&&8288!==e&&12288!==e&&65279!==e)return!1;return!0}},3578:function(t){t.exports=function(t,e,r){return t*(1-r)+e*r}},7191:function(t,e,r){var n=r(4690),i=r(9823),a=r(7332),o=r(7787),s=r(7437),l=r(2142),u={length:r(4693),normalize:r(899),dot:r(9305),cross:r(903)},c=i(),f=i(),h=[0,0,0,0],p=[[0,0,0],[0,0,0],[0,0,0]],d=[0,0,0];function v(t,e,r,n,i){t[0]=e[0]*n+r[0]*i,t[1]=e[1]*n+r[1]*i,t[2]=e[2]*n+r[2]*i}t.exports=function(t,e,r,i,g,y){if(e||(e=[0,0,0]),r||(r=[0,0,0]),i||(i=[0,0,0]),g||(g=[0,0,0,1]),y||(y=[0,0,0,1]),!n(c,t))return!1;if(a(f,c),f[3]=0,f[7]=0,f[11]=0,f[15]=1,Math.abs(o(f)<1e-8))return!1;var m,x,b,_,w,T,k,A=c[3],M=c[7],S=c[11],E=c[12],L=c[13],C=c[14],P=c[15];if(0!==A||0!==M||0!==S){if(h[0]=A,h[1]=M,h[2]=S,h[3]=P,!s(f,f))return!1;l(f,f),m=g,b=f,_=(x=h)[0],w=x[1],T=x[2],k=x[3],m[0]=b[0]*_+b[4]*w+b[8]*T+b[12]*k,m[1]=b[1]*_+b[5]*w+b[9]*T+b[13]*k,m[2]=b[2]*_+b[6]*w+b[10]*T+b[14]*k,m[3]=b[3]*_+b[7]*w+b[11]*T+b[15]*k}else g[0]=g[1]=g[2]=0,g[3]=1;if(e[0]=E,e[1]=L,e[2]=C,function(t,e){t[0][0]=e[0],t[0][1]=e[1],t[0][2]=e[2],t[1][0]=e[4],t[1][1]=e[5],t[1][2]=e[6],t[2][0]=e[8],t[2][1]=e[9],t[2][2]=e[10]}(p,c),r[0]=u.length(p[0]),u.normalize(p[0],p[0]),i[0]=u.dot(p[0],p[1]),v(p[1],p[1],p[0],1,-i[0]),r[1]=u.length(p[1]),u.normalize(p[1],p[1]),i[0]/=r[1],i[1]=u.dot(p[0],p[2]),v(p[2],p[2],p[0],1,-i[1]),i[2]=u.dot(p[1],p[2]),v(p[2],p[2],p[1],1,-i[2]),r[2]=u.length(p[2]),u.normalize(p[2],p[2]),i[1]/=r[2],i[2]/=r[2],u.cross(d,p[1],p[2]),u.dot(p[0],d)<0)for(var O=0;O<3;O++)r[O]*=-1,p[O][0]*=-1,p[O][1]*=-1,p[O][2]*=-1;return y[0]=.5*Math.sqrt(Math.max(1+p[0][0]-p[1][1]-p[2][2],0)),y[1]=.5*Math.sqrt(Math.max(1-p[0][0]+p[1][1]-p[2][2],0)),y[2]=.5*Math.sqrt(Math.max(1-p[0][0]-p[1][1]+p[2][2],0)),y[3]=.5*Math.sqrt(Math.max(1+p[0][0]+p[1][1]+p[2][2],0)),p[2][1]>p[1][2]&&(y[0]=-y[0]),p[0][2]>p[2][0]&&(y[1]=-y[1]),p[1][0]>p[0][1]&&(y[2]=-y[2]),!0}},4690:function(t){t.exports=function(t,e){var r=e[15];if(0===r)return!1;for(var n=1/r,i=0;i<16;i++)t[i]=e[i]*n;return!0}},7649:function(t,e,r){var n=r(1868),i=r(1102),a=r(7191),o=r(7787),s=r(1116),l=f(),u=f(),c=f();function f(){return{translate:h(),scale:h(1),skew:h(),perspective:[0,0,0,1],quaternion:[0,0,0,1]}}function h(t){return[t||0,t||0,t||0]}t.exports=function(t,e,r,f){if(0===o(e)||0===o(r))return!1;var h=a(e,l.translate,l.scale,l.skew,l.perspective,l.quaternion),p=a(r,u.translate,u.scale,u.skew,u.perspective,u.quaternion);return!(!h||!p||(n(c.translate,l.translate,u.translate,f),n(c.skew,l.skew,u.skew,f),n(c.scale,l.scale,u.scale,f),n(c.perspective,l.perspective,u.perspective,f),s(c.quaternion,l.quaternion,u.quaternion,f),i(t,c.translate,c.scale,c.skew,c.perspective,c.quaternion),0))}},1102:function(t,e,r){var n={identity:r(9947),translate:r(998),multiply:r(104),create:r(9823),scale:r(3668),fromRotationTranslation:r(7280)},i=(n.create(),n.create());t.exports=function(t,e,r,a,o,s){return n.identity(t),n.fromRotationTranslation(t,s,e),t[3]=o[0],t[7]=o[1],t[11]=o[2],t[15]=o[3],n.identity(i),0!==a[2]&&(i[9]=a[2],n.multiply(t,t,i)),0!==a[1]&&(i[9]=0,i[8]=a[1],n.multiply(t,t,i)),0!==a[0]&&(i[8]=0,i[4]=a[0],n.multiply(t,t,i)),n.scale(t,t,r),t}},9298:function(t,e,r){"use strict";var n=r(5070),i=r(7649),a=r(7437),o=r(6109),s=r(7115),l=r(5240),u=r(3012),c=r(998),f=(r(3668),r(899)),h=[0,0,0];function p(t){this._components=t.slice(),this._time=[0],this.prevMatrix=t.slice(),this.nextMatrix=t.slice(),this.computedMatrix=t.slice(),this.computedInverse=t.slice(),this.computedEye=[0,0,0],this.computedUp=[0,0,0],this.computedCenter=[0,0,0],this.computedRadius=[0],this._limits=[-1/0,1/0]}t.exports=function(t){return new p((t=t||{}).matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])};var d=p.prototype;d.recalcMatrix=function(t){var e=this._time,r=n.le(e,t),o=this.computedMatrix;if(!(r<0)){var s=this._components;if(r===e.length-1)for(var l=16*r,u=0;u<16;++u)o[u]=s[l++];else{var c=e[r+1]-e[r],h=(l=16*r,this.prevMatrix),p=!0;for(u=0;u<16;++u)h[u]=s[l++];var d=this.nextMatrix;for(u=0;u<16;++u)d[u]=s[l++],p=p&&h[u]===d[u];if(c<1e-6||p)for(u=0;u<16;++u)o[u]=h[u];else i(o,h,d,(t-e[r])/c)}var v=this.computedUp;v[0]=o[1],v[1]=o[5],v[2]=o[9],f(v,v);var g=this.computedInverse;a(g,o);var y=this.computedEye,m=g[15];y[0]=g[12]/m,y[1]=g[13]/m,y[2]=g[14]/m;var x=this.computedCenter,b=Math.exp(this.computedRadius[0]);for(u=0;u<3;++u)x[u]=y[u]-o[2+4*u]*b}},d.idle=function(t){if(!(t<this.lastT())){for(var e=this._components,r=e.length-16,n=0;n<16;++n)e.push(e[r++]);this._time.push(t)}},d.flush=function(t){var e=n.gt(this._time,t)-2;e<0||(this._time.splice(0,e),this._components.splice(0,16*e))},d.lastT=function(){return this._time[this._time.length-1]},d.lookAt=function(t,e,r,n){this.recalcMatrix(t),e=e||this.computedEye,r=r||h,n=n||this.computedUp,this.setMatrix(t,u(this.computedMatrix,e,r,n));for(var i=0,a=0;a<3;++a)i+=Math.pow(r[a]-e[a],2);i=Math.log(Math.sqrt(i)),this.computedRadius[0]=i},d.rotate=function(t,e,r,n){this.recalcMatrix(t);var i=this.computedInverse;e&&s(i,i,e),r&&o(i,i,r),n&&l(i,i,n),this.setMatrix(t,a(this.computedMatrix,i))};var v=[0,0,0];d.pan=function(t,e,r,n){v[0]=-(e||0),v[1]=-(r||0),v[2]=-(n||0),this.recalcMatrix(t);var i=this.computedInverse;c(i,i,v),this.setMatrix(t,a(i,i))},d.translate=function(t,e,r,n){v[0]=e||0,v[1]=r||0,v[2]=n||0,this.recalcMatrix(t);var i=this.computedMatrix;c(i,i,v),this.setMatrix(t,i)},d.setMatrix=function(t,e){if(!(t<this.lastT())){this._time.push(t);for(var r=0;r<16;++r)this._components.push(e[r])}},d.setDistance=function(t,e){this.computedRadius[0]=e},d.setDistanceLimits=function(t,e){var r=this._limits;r[0]=t,r[1]=e},d.getDistanceLimits=function(t){var e=this._limits;return t?(t[0]=e[0],t[1]=e[1],t):e}},3266:function(t,e,r){"use strict";t.exports=function(t){var e=t.length;if(e<3){for(var r=new Array(e),i=0;i<e;++i)r[i]=i;return 2===e&&t[0][0]===t[1][0]&&t[0][1]===t[1][1]?[0]:r}var a=new Array(e);for(i=0;i<e;++i)a[i]=i;a.sort((function(e,r){return t[e][0]-t[r][0]||t[e][1]-t[r][1]}));var o=[a[0],a[1]],s=[a[0],a[1]];for(i=2;i<e;++i){for(var l=a[i],u=t[l],c=o.length;c>1&&n(t[o[c-2]],t[o[c-1]],u)<=0;)c-=1,o.pop();for(o.push(l),c=s.length;c>1&&n(t[s[c-2]],t[s[c-1]],u)>=0;)c-=1,s.pop();s.push(l)}r=new Array(s.length+o.length-2);for(var f=0,h=(i=0,o.length);i<h;++i)r[f++]=o[i];for(var p=s.length-2;p>0;--p)r[f++]=s[p];return r};var n=r(417)[3]},6145:function(t,e,r){"use strict";t.exports=function(t,e){e||(e=t,t=window);var r=0,i=0,a=0,o={shift:!1,alt:!1,control:!1,meta:!1},s=!1;function l(t){var e=!1;return"altKey"in t&&(e=e||t.altKey!==o.alt,o.alt=!!t.altKey),"shiftKey"in t&&(e=e||t.shiftKey!==o.shift,o.shift=!!t.shiftKey),"ctrlKey"in t&&(e=e||t.ctrlKey!==o.control,o.control=!!t.ctrlKey),"metaKey"in t&&(e=e||t.metaKey!==o.meta,o.meta=!!t.metaKey),e}function u(t,s){var u=n.x(s),c=n.y(s);"buttons"in s&&(t=0|s.buttons),(t!==r||u!==i||c!==a||l(s))&&(r=0|t,i=u||0,a=c||0,e&&e(r,i,a,o))}function c(t){u(0,t)}function f(){(r||i||a||o.shift||o.alt||o.meta||o.control)&&(i=a=0,r=0,o.shift=o.alt=o.control=o.meta=!1,e&&e(0,0,0,o))}function h(t){l(t)&&e&&e(r,i,a,o)}function p(t){0===n.buttons(t)?u(0,t):u(r,t)}function d(t){u(r|n.buttons(t),t)}function v(t){u(r&~n.buttons(t),t)}function g(){s||(s=!0,t.addEventListener("mousemove",p),t.addEventListener("mousedown",d),t.addEventListener("mouseup",v),t.addEventListener("mouseleave",c),t.addEventListener("mouseenter",c),t.addEventListener("mouseout",c),t.addEventListener("mouseover",c),t.addEventListener("blur",f),t.addEventListener("keyup",h),t.addEventListener("keydown",h),t.addEventListener("keypress",h),t!==window&&(window.addEventListener("blur",f),window.addEventListener("keyup",h),window.addEventListener("keydown",h),window.addEventListener("keypress",h)))}g();var y={element:t};return Object.defineProperties(y,{enabled:{get:function(){return s},set:function(e){e?g():s&&(s=!1,t.removeEventListener("mousemove",p),t.removeEventListener("mousedown",d),t.removeEventListener("mouseup",v),t.removeEventListener("mouseleave",c),t.removeEventListener("mouseenter",c),t.removeEventListener("mouseout",c),t.removeEventListener("mouseover",c),t.removeEventListener("blur",f),t.removeEventListener("keyup",h),t.removeEventListener("keydown",h),t.removeEventListener("keypress",h),t!==window&&(window.removeEventListener("blur",f),window.removeEventListener("keyup",h),window.removeEventListener("keydown",h),window.removeEventListener("keypress",h)))},enumerable:!0},buttons:{get:function(){return r},enumerable:!0},x:{get:function(){return i},enumerable:!0},y:{get:function(){return a},enumerable:!0},mods:{get:function(){return o},enumerable:!0}}),y};var n=r(4110)},2565:function(t){var e={left:0,top:0};t.exports=function(t,r,n){r=r||t.currentTarget||t.srcElement,Array.isArray(n)||(n=[0,0]);var i,a=t.clientX||0,o=t.clientY||0,s=(i=r)===window||i===document||i===document.body?e:i.getBoundingClientRect();return n[0]=a-s.left,n[1]=o-s.top,n}},4110:function(t,e){"use strict";function r(t){return t.target||t.srcElement||window}e.buttons=function(t){if("object"==typeof t){if("buttons"in t)return t.buttons;if("which"in t){if(2===(e=t.which))return 4;if(3===e)return 2;if(e>0)return 1<<e-1}else if("button"in t){var e;if(1===(e=t.button))return 4;if(2===e)return 2;if(e>=0)return 1<<e}}return 0},e.element=r,e.x=function(t){if("object"==typeof t){if("offsetX"in t)return t.offsetX;var e=r(t).getBoundingClientRect();return t.clientX-e.left}return 0},e.y=function(t){if("object"==typeof t){if("offsetY"in t)return t.offsetY;var e=r(t).getBoundingClientRect();return t.clientY-e.top}return 0}},6475:function(t,e,r){"use strict";var n=r(14);t.exports=function(t,e,r){"function"==typeof t&&(r=!!e,e=t,t=window);var i=n("ex",t),a=function(t){r&&t.preventDefault();var n=t.deltaX||0,a=t.deltaY||0,o=t.deltaZ||0,s=1;switch(t.deltaMode){case 1:s=i;break;case 2:s=window.innerHeight}if(a*=s,o*=s,(n*=s)||a||o)return e(n,a,o,t)};return t.addEventListener("wheel",a),a}},9284:function(t,e,r){"use strict";var n=r(5306);t.exports=function(t){function e(t){throw new Error("ndarray-extract-contour: "+t)}"object"!=typeof t&&e("Must specify arguments");var r=t.order;Array.isArray(r)||e("Must specify order");var a=t.arrayArguments||1;a<1&&e("Must have at least one array argument"),(t.scalarArguments||0)<0&&e("Scalar arg count must be > 0"),"function"!=typeof t.vertex&&e("Must specify vertex creation function"),"function"!=typeof t.cell&&e("Must specify cell creation function"),"function"!=typeof t.phase&&e("Must specify phase function");for(var o=t.getters||[],s=new Array(a),l=0;l<a;++l)o.indexOf(l)>=0?s[l]=!0:s[l]=!1;return function(t,e,r,a,o,s){var l=[s,o].join(",");return(0,i[l])(t,e,r,n.mallocUint32,n.freeUint32)}(t.vertex,t.cell,t.phase,0,r,s)};var i={"false,0,1":function(t,e,r,n,i){return function(a,o,s,l){var u,c=0|a.shape[0],f=0|a.shape[1],h=a.data,p=0|a.offset,d=0|a.stride[0],v=0|a.stride[1],g=p,y=0|-d,m=0,x=0|-v,b=0,_=-d-v|0,w=0,T=0|d,k=v-d*c|0,A=0,M=0,S=0,E=2*c|0,L=n(E),C=n(E),P=0,O=0,I=-1,D=-1,z=0,R=0|-c,F=0|c,B=0,N=-c-1|0,j=c-1|0,U=0,V=0,H=0;for(A=0;A<c;++A)L[P++]=r(h[g],o,s,l),g+=T;if(g+=k,f>0){if(M=1,L[P++]=r(h[g],o,s,l),g+=T,c>0)for(A=1,u=h[g],O=L[P]=r(u,o,s,l),z=L[P+I],B=L[P+R],U=L[P+N],O===z&&O===B&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,z,B,U,o,s,l),V=C[P]=S++),P+=1,g+=T,A=2;A<c;++A)u=h[g],O=L[P]=r(u,o,s,l),z=L[P+I],B=L[P+R],U=L[P+N],O===z&&O===B&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,z,B,U,o,s,l),V=C[P]=S++,U!==z&&e(C[P+I],V,w,m,U,z,o,s,l)),P+=1,g+=T;for(g+=k,P=0,H=I,I=D,D=H,H=R,R=F,F=H,H=N,N=j,j=H,M=2;M<f;++M){if(L[P++]=r(h[g],o,s,l),g+=T,c>0)for(A=1,u=h[g],O=L[P]=r(u,o,s,l),z=L[P+I],B=L[P+R],U=L[P+N],O===z&&O===B&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,z,B,U,o,s,l),V=C[P]=S++,U!==B&&e(C[P+R],V,b,w,B,U,o,s,l)),P+=1,g+=T,A=2;A<c;++A)u=h[g],O=L[P]=r(u,o,s,l),z=L[P+I],B=L[P+R],U=L[P+N],O===z&&O===B&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,z,B,U,o,s,l),V=C[P]=S++,U!==B&&e(C[P+R],V,b,w,B,U,o,s,l),U!==z&&e(C[P+I],V,w,m,U,z,o,s,l)),P+=1,g+=T;1&M&&(P=0),H=I,I=D,D=H,H=R,R=F,F=H,H=N,N=j,j=H,g+=k}}i(C),i(L)}},"false,1,0":function(t,e,r,n,i){return function(a,o,s,l){var u,c=0|a.shape[0],f=0|a.shape[1],h=a.data,p=0|a.offset,d=0|a.stride[0],v=0|a.stride[1],g=p,y=0|-d,m=0,x=0|-v,b=0,_=-d-v|0,w=0,T=0|v,k=d-v*f|0,A=0,M=0,S=0,E=2*f|0,L=n(E),C=n(E),P=0,O=0,I=-1,D=-1,z=0,R=0|-f,F=0|f,B=0,N=-f-1|0,j=f-1|0,U=0,V=0,H=0;for(M=0;M<f;++M)L[P++]=r(h[g],o,s,l),g+=T;if(g+=k,c>0){if(A=1,L[P++]=r(h[g],o,s,l),g+=T,f>0)for(M=1,u=h[g],O=L[P]=r(u,o,s,l),B=L[P+R],z=L[P+I],U=L[P+N],O===B&&O===z&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,B,z,U,o,s,l),V=C[P]=S++),P+=1,g+=T,M=2;M<f;++M)u=h[g],O=L[P]=r(u,o,s,l),B=L[P+R],z=L[P+I],U=L[P+N],O===B&&O===z&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,B,z,U,o,s,l),V=C[P]=S++,U!==z&&e(C[P+I],V,b,w,z,U,o,s,l)),P+=1,g+=T;for(g+=k,P=0,H=R,R=F,F=H,H=I,I=D,D=H,H=N,N=j,j=H,A=2;A<c;++A){if(L[P++]=r(h[g],o,s,l),g+=T,f>0)for(M=1,u=h[g],O=L[P]=r(u,o,s,l),B=L[P+R],z=L[P+I],U=L[P+N],O===B&&O===z&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,B,z,U,o,s,l),V=C[P]=S++,U!==B&&e(C[P+R],V,w,m,U,B,o,s,l)),P+=1,g+=T,M=2;M<f;++M)u=h[g],O=L[P]=r(u,o,s,l),B=L[P+R],z=L[P+I],U=L[P+N],O===B&&O===z&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,B,z,U,o,s,l),V=C[P]=S++,U!==z&&e(C[P+I],V,b,w,z,U,o,s,l),U!==B&&e(C[P+R],V,w,m,U,B,o,s,l)),P+=1,g+=T;1&A&&(P=0),H=R,R=F,F=H,H=I,I=D,D=H,H=N,N=j,j=H,g+=k}}i(C),i(L)}}}},9144:function(t,e,r){"use strict";var n=r(3094),i={zero:function(t,e,r,n){var i=t[0];n|=0;var a=0,o=r[0];for(a=0;a<i;++a)e[n]=0,n+=o},fdTemplate1:function(t,e,r,n,i,a,o){var s=t[0],l=r[0],u=-1*l,c=l;n|=0,o|=0;var f=0,h=l,p=a[0];for(f=0;f<s;++f)i[o]=.5*(e[n+u]-e[n+c]),n+=h,o+=p},fdTemplate2:function(t,e,r,n,i,a,o,s,l,u){var c=t[0],f=t[1],h=r[0],p=r[1],d=a[0],v=a[1],g=l[0],y=l[1],m=-1*h,x=h,b=-1*p,_=p;n|=0,o|=0,u|=0;var w=0,T=0,k=p,A=h-f*p,M=v,S=d-f*v,E=y,L=g-f*y;for(T=0;T<c;++T){for(w=0;w<f;++w)i[o]=.5*(e[n+m]-e[n+x]),s[u]=.5*(e[n+b]-e[n+_]),n+=k,o+=M,u+=E;n+=A,o+=S,u+=L}}},a={cdiff:function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=n.dtype,l=n.order,u=i.dtype,c=i.order,f=[a,o.join(),s,l.join(),u,c.join()].join(),h=e[f];return h||(e[f]=h=t([a,o,s,l,u,c])),h(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset,i.data,i.stride,0|i.offset)}},zero:function(t){var e={};return function(r){var n=r.dtype,i=r.order,a=[n,i.join()].join(),o=e[a];return o||(e[a]=o=t([n,i])),o(r.shape.slice(0),r.data,r.stride,0|r.offset)}},fdTemplate1:function(t){var e={};return function(r,n){var i=r.dtype,a=r.order,o=n.dtype,s=n.order,l=[i,a.join(),o,s.join()].join(),u=e[l];return u||(e[l]=u=t([i,a,o,s])),u(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset)}},fdTemplate2:function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=n.dtype,l=n.order,u=i.dtype,c=i.order,f=[a,o.join(),s,l.join(),u,c.join()].join(),h=e[f];return h||(e[f]=h=t([a,o,s,l,u,c])),h(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset,i.data,i.stride,0|i.offset)}}};function o(t){return(0,a[t.funcName])(s.bind(void 0,t))}function s(t){return i[t.funcName]}function l(t){return o({funcName:t.funcName})}var u={},c={},f=l({funcName:"cdiff"}),h=l({funcName:"zero"});function p(t){return t in u?u[t]:u[t]=l({funcName:"fdTemplate"+t})}function d(t,e,r,n){return function(t,i){var a=i.shape.slice();return a[0]>2&&a[1]>2&&n(i.pick(-1,-1).lo(1,1).hi(a[0]-2,a[1]-2),t.pick(-1,-1,0).lo(1,1).hi(a[0]-2,a[1]-2),t.pick(-1,-1,1).lo(1,1).hi(a[0]-2,a[1]-2)),a[1]>2&&(r(i.pick(0,-1).lo(1).hi(a[1]-2),t.pick(0,-1,1).lo(1).hi(a[1]-2)),e(t.pick(0,-1,0).lo(1).hi(a[1]-2))),a[1]>2&&(r(i.pick(a[0]-1,-1).lo(1).hi(a[1]-2),t.pick(a[0]-1,-1,1).lo(1).hi(a[1]-2)),e(t.pick(a[0]-1,-1,0).lo(1).hi(a[1]-2))),a[0]>2&&(r(i.pick(-1,0).lo(1).hi(a[0]-2),t.pick(-1,0,0).lo(1).hi(a[0]-2)),e(t.pick(-1,0,1).lo(1).hi(a[0]-2))),a[0]>2&&(r(i.pick(-1,a[1]-1).lo(1).hi(a[0]-2),t.pick(-1,a[1]-1,0).lo(1).hi(a[0]-2)),e(t.pick(-1,a[1]-1,1).lo(1).hi(a[0]-2))),t.set(0,0,0,0),t.set(0,0,1,0),t.set(a[0]-1,0,0,0),t.set(a[0]-1,0,1,0),t.set(0,a[1]-1,0,0),t.set(0,a[1]-1,1,0),t.set(a[0]-1,a[1]-1,0,0),t.set(a[0]-1,a[1]-1,1,0),t}}t.exports=function(t,e,r){return Array.isArray(r)||(r=n(e.dimension,"string"==typeof r?r:"clamp")),0===e.size?t:0===e.dimension?(t.set(0),t):function(t){var e=t.join();if(a=c[e])return a;for(var r=t.length,n=[f,h],i=1;i<=r;++i)n.push(p(i));var a=d.apply(void 0,n);return c[e]=a,a}(r)(t,e)}},3581:function(t){"use strict";function e(t,e){var r=Math.floor(e),n=e-r,i=0<=r&&r<t.shape[0],a=0<=r+1&&r+1<t.shape[0];return(1-n)*(i?+t.get(r):0)+n*(a?+t.get(r+1):0)}function r(t,e,r){var n=Math.floor(e),i=e-n,a=0<=n&&n<t.shape[0],o=0<=n+1&&n+1<t.shape[0],s=Math.floor(r),l=r-s,u=0<=s&&s<t.shape[1],c=0<=s+1&&s+1<t.shape[1],f=a&&u?t.get(n,s):0,h=a&&c?t.get(n,s+1):0;return(1-l)*((1-i)*f+i*(o&&u?t.get(n+1,s):0))+l*((1-i)*h+i*(o&&c?t.get(n+1,s+1):0))}function n(t,e,r,n){var i=Math.floor(e),a=e-i,o=0<=i&&i<t.shape[0],s=0<=i+1&&i+1<t.shape[0],l=Math.floor(r),u=r-l,c=0<=l&&l<t.shape[1],f=0<=l+1&&l+1<t.shape[1],h=Math.floor(n),p=n-h,d=0<=h&&h<t.shape[2],v=0<=h+1&&h+1<t.shape[2],g=o&&c&&d?t.get(i,l,h):0,y=o&&f&&d?t.get(i,l+1,h):0,m=s&&c&&d?t.get(i+1,l,h):0,x=s&&f&&d?t.get(i+1,l+1,h):0,b=o&&c&&v?t.get(i,l,h+1):0,_=o&&f&&v?t.get(i,l+1,h+1):0;return(1-p)*((1-u)*((1-a)*g+a*m)+u*((1-a)*y+a*x))+p*((1-u)*((1-a)*b+a*(s&&c&&v?t.get(i+1,l,h+1):0))+u*((1-a)*_+a*(s&&f&&v?t.get(i+1,l+1,h+1):0)))}function i(t){var e,r,n=0|t.shape.length,i=new Array(n),a=new Array(n),o=new Array(n),s=new Array(n);for(e=0;e<n;++e)r=+arguments[e+1],i[e]=Math.floor(r),a[e]=r-i[e],o[e]=0<=i[e]&&i[e]<t.shape[e],s[e]=0<=i[e]+1&&i[e]+1<t.shape[e];var l,u,c,f=0;t:for(e=0;e<1<<n;++e){for(u=1,c=t.offset,l=0;l<n;++l)if(e&1<<l){if(!s[l])continue t;u*=a[l],c+=t.stride[l]*(i[l]+1)}else{if(!o[l])continue t;u*=1-a[l],c+=t.stride[l]*i[l]}f+=u*t.data[c]}return f}t.exports=function(t,a,o,s){switch(t.shape.length){case 0:return 0;case 1:return e(t,a);case 2:return r(t,a,o);case 3:return n(t,a,o,s);default:return i.apply(void 0,arguments)}},t.exports.d1=e,t.exports.d2=r,t.exports.d3=n},7498:function(t,e){"use strict";var r={"float64,2,1,0":function(){return function(t,e,r,n,i){var a=t[0],o=t[1],s=t[2],l=r[0],u=r[1],c=r[2];n|=0;var f=0,h=0,p=0,d=c,v=u-s*c,g=l-o*u;for(p=0;p<a;++p){for(h=0;h<o;++h){for(f=0;f<s;++f)e[n]/=i,n+=d;n+=v}n+=g}}},"uint8,2,0,1,float64,2,1,0":function(){return function(t,e,r,n,i,a,o,s){for(var l=t[0],u=t[1],c=t[2],f=r[0],h=r[1],p=r[2],d=a[0],v=a[1],g=a[2],y=n|=0,m=o|=0,x=0|t[0];x>0;){x<64?(l=x,x=0):(l=64,x-=64);for(var b=0|t[1];b>0;){b<64?(u=b,b=0):(u=64,b-=64),n=y+x*f+b*h,o=m+x*d+b*v;var _=0,w=0,T=0,k=p,A=f-c*p,M=h-l*f,S=g,E=d-c*g,L=v-l*d;for(T=0;T<u;++T){for(w=0;w<l;++w){for(_=0;_<c;++_)e[n]=i[o]*s,n+=k,o+=S;n+=A,o+=E}n+=M,o+=L}}}}},"float32,1,0,float32,1,0":function(){return function(t,e,r,n,i,a,o){var s=t[0],l=t[1],u=r[0],c=r[1],f=a[0],h=a[1];n|=0,o|=0;var p=0,d=0,v=c,g=u-l*c,y=h,m=f-l*h;for(d=0;d<s;++d){for(p=0;p<l;++p)e[n]=i[o],n+=v,o+=y;n+=g,o+=m}}},"float32,1,0,float32,0,1":function(){return function(t,e,r,n,i,a,o){for(var s=t[0],l=t[1],u=r[0],c=r[1],f=a[0],h=a[1],p=n|=0,d=o|=0,v=0|t[1];v>0;){v<64?(l=v,v=0):(l=64,v-=64);for(var g=0|t[0];g>0;){g<64?(s=g,g=0):(s=64,g-=64),n=p+v*c+g*u,o=d+v*h+g*f;var y=0,m=0,x=c,b=u-l*c,_=h,w=f-l*h;for(m=0;m<s;++m){for(y=0;y<l;++y)e[n]=i[o],n+=x,o+=_;n+=b,o+=w}}}}},"uint8,2,0,1,uint8,1,2,0":function(){return function(t,e,r,n,i,a,o){for(var s=t[0],l=t[1],u=t[2],c=r[0],f=r[1],h=r[2],p=a[0],d=a[1],v=a[2],g=n|=0,y=o|=0,m=0|t[2];m>0;){m<64?(u=m,m=0):(u=64,m-=64);for(var x=0|t[0];x>0;){x<64?(s=x,x=0):(s=64,x-=64);for(var b=0|t[1];b>0;){b<64?(l=b,b=0):(l=64,b-=64),n=g+m*h+x*c+b*f,o=y+m*v+x*p+b*d;var _=0,w=0,T=0,k=h,A=c-u*h,M=f-s*c,S=v,E=p-u*v,L=d-s*p;for(T=0;T<l;++T){for(w=0;w<s;++w){for(_=0;_<u;++_)e[n]=i[o],n+=k,o+=S;n+=A,o+=E}n+=M,o+=L}}}}}},"uint8,2,0,1,array,2,0,1":function(){return function(t,e,r,n,i,a,o){var s=t[0],l=t[1],u=t[2],c=r[0],f=r[1],h=r[2],p=a[0],d=a[1],v=a[2];n|=0,o|=0;var g=0,y=0,m=0,x=h,b=c-u*h,_=f-s*c,w=v,T=p-u*v,k=d-s*p;for(m=0;m<l;++m){for(y=0;y<s;++y){for(g=0;g<u;++g)e[n]=i[o],n+=x,o+=w;n+=b,o+=T}n+=_,o+=k}}}},n=function(t,e){var n=e.join(",");return(0,r[n])()},i={mul:function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=n.dtype,l=n.order,u=i.dtype,c=i.order,f=[a,o.join(),s,l.join(),u,c.join()].join(),h=e[f];return h||(e[f]=h=t([a,o,s,l,u,c])),h(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset,i.data,i.stride,0|i.offset)}},muls:function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=n.dtype,l=n.order,u=[a,o.join(),s,l.join()].join(),c=e[u];return c||(e[u]=c=t([a,o,s,l])),c(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset,i)}},mulseq:function(t){var e={};return function(r,n){var i=r.dtype,a=r.order,o=[i,a.join()].join(),s=e[o];return s||(e[o]=s=t([i,a])),s(r.shape.slice(0),r.data,r.stride,0|r.offset,n)}},div:function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=n.dtype,l=n.order,u=i.dtype,c=i.order,f=[a,o.join(),s,l.join(),u,c.join()].join(),h=e[f];return h||(e[f]=h=t([a,o,s,l,u,c])),h(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset,i.data,i.stride,0|i.offset)}},divs:function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=n.dtype,l=n.order,u=[a,o.join(),s,l.join()].join(),c=e[u];return c||(e[u]=c=t([a,o,s,l])),c(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset,i)}},divseq:function(t){var e={};return function(r,n){var i=r.dtype,a=r.order,o=[i,a.join()].join(),s=e[o];return s||(e[o]=s=t([i,a])),s(r.shape.slice(0),r.data,r.stride,0|r.offset,n)}},assign:function(t){var e={};return function(r,n){var i=r.dtype,a=r.order,o=n.dtype,s=n.order,l=[i,a.join(),o,s.join()].join(),u=e[l];return u||(e[l]=u=t([i,a,o,s])),u(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset)}}};function a(t){return e={funcName:t.funcName},(0,i[e.funcName])(n.bind(void 0,e));var e}var o={mul:"*",div:"/"};!function(){for(var t in o)e[t]=a({funcName:t}),e[t+"s"]=a({funcName:t+"s"}),e[t+"seq"]=a({funcName:t+"seq"})}(),e.assign=a({funcName:"assign"})},7382:function(t,e,r){"use strict";var n=r(5050),i=r(9262);t.exports=function(t,e){for(var r=[],a=t,o=1;Array.isArray(a);)r.push(a.length),o*=a.length,a=a[0];return 0===r.length?n():(e||(e=n(new Float64Array(o),r)),i(e,t),e)}},9262:function(t){"use strict";t.exports=function(t){var e={};return function(r,n){var i=r.dtype,a=r.order,o=[i,a.join()].join(),s=e[o];return s||(e[o]=s=t([i,a])),s(r.shape.slice(0),r.data,r.stride,0|r.offset,n)}}(function(){return function(t,e,r,n,i){var a=t[0],o=t[1],s=t[2],l=r[0],u=r[1],c=r[2],f=[0,0,0];n|=0;var h=0,p=0,d=0,v=c,g=u-s*c,y=l-o*u;for(d=0;d<a;++d){for(p=0;p<o;++p){for(h=0;h<s;++h){var m,x=i;for(m=0;m<f.length-1;++m)x=x[f[m]];e[n]=x[f[f.length-1]],n+=v,++f[2]}n+=g,f[2]-=s,++f[1]}n+=y,f[1]-=o,++f[0]}}}.bind(void 0,{funcName:"convert"}))},8139:function(t,e,r){"use strict";var n=r(5306);function i(t){return"uint32"===t?[n.mallocUint32,n.freeUint32]:null}var a={"uint32,1,0":function(t,e){return function(r,n,i,a,o,s,l,u,c,f,h){var p,d,v,g,y,m,x,b,_=r*o+a,w=t(u);for(p=r+1;p<=n;++p){for(d=p,v=_+=o,y=0,m=_,g=0;g<u;++g)w[y++]=i[m],m+=c;t:for(;d-- >r;){y=0,m=v-o;e:for(g=0;g<u;++g){if((x=i[m])<(b=w[y]))break t;if(x>b)break e;m+=f,y+=h}for(y=v,m=v-o,g=0;g<u;++g)i[y]=i[m],y+=c,m+=c;v-=o}for(y=v,m=0,g=0;g<u;++g)i[y]=w[m++],y+=c}e(w)}}},o={"uint32,1,0":function(t,e,r){return function n(i,a,o,s,l,u,c,f,h,p,d){var v,g,y,m,x,b,_,w,T,k,A,M,S,E,L,C,P,O,I,D,z,R,F,B,N,j=(a-i+1)/6|0,U=i+j,V=a-j,H=i+a>>1,q=H-j,G=H+j,Z=U,Y=q,W=H,X=G,J=V,K=i+1,$=a-1,Q=!0,tt=0,et=0,rt=0,nt=f,it=e(nt),at=e(nt);A=l*Z,M=l*Y,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=Z,Z=Y,Y=g;break t}if(rt<0)break t;N+=p}A=l*X,M=l*J,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=X,X=J,J=g;break t}if(rt<0)break t;N+=p}A=l*Z,M=l*W,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=Z,Z=W,W=g;break t}if(rt<0)break t;N+=p}A=l*Y,M=l*W,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=Y,Y=W,W=g;break t}if(rt<0)break t;N+=p}A=l*Z,M=l*X,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=Z,Z=X,X=g;break t}if(rt<0)break t;N+=p}A=l*W,M=l*X,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=W,W=X,X=g;break t}if(rt<0)break t;N+=p}A=l*Y,M=l*J,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=Y,Y=J,J=g;break t}if(rt<0)break t;N+=p}A=l*Y,M=l*W,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=Y,Y=W,W=g;break t}if(rt<0)break t;N+=p}A=l*X,M=l*J,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=X,X=J,J=g;break t}if(rt<0)break t;N+=p}for(A=l*Z,M=l*Y,S=l*W,E=l*X,L=l*J,C=l*U,P=l*H,O=l*V,B=0,N=s,k=0;k<f;++k)_=A+N,w=M+N,T=S+N,I=E+N,D=L+N,z=C+N,R=P+N,F=O+N,it[B]=o[w],at[B]=o[I],Q=Q&&it[B]===at[B],y=o[_],m=o[T],x=o[D],o[z]=y,o[R]=m,o[F]=x,++B,N+=h;for(A=l*q,M=l*i,N=s,k=0;k<f;++k)w=M+N,o[_=A+N]=o[w],N+=h;for(A=l*G,M=l*a,N=s,k=0;k<f;++k)w=M+N,o[_=A+N]=o[w],N+=h;if(Q)for(b=K;b<=$;++b){for(_=s+b*l,B=0,k=0;k<f&&0==(rt=o[_]-it[B]);++k)B+=d,_+=p;if(0!==rt)if(rt<0){if(b!==K)for(A=l*b,M=l*K,N=s,k=0;k<f;++k)w=M+N,v=o[_=A+N],o[_]=o[w],o[w]=v,N+=h;++K}else for(;;){for(_=s+$*l,B=0,k=0;k<f&&0==(rt=o[_]-it[B]);++k)B+=d,_+=p;if(!(rt>0)){if(rt<0){for(A=l*b,M=l*K,S=l*$,N=s,k=0;k<f;++k)w=M+N,T=S+N,v=o[_=A+N],o[_]=o[w],o[w]=o[T],o[T]=v,N+=h;++K,--$;break}for(A=l*b,M=l*$,N=s,k=0;k<f;++k)w=M+N,v=o[_=A+N],o[_]=o[w],o[w]=v,N+=h;--$;break}$--}}else for(b=K;b<=$;++b){for(_=s+b*l,B=0,k=0;k<f&&0==(tt=o[_]-it[B]);++k)B+=d,_+=p;if(tt<0){if(b!==K)for(A=l*b,M=l*K,N=s,k=0;k<f;++k)w=M+N,v=o[_=A+N],o[_]=o[w],o[w]=v,N+=h;++K}else{for(_=s+b*l,B=0,k=0;k<f&&0==(et=o[_]-at[B]);++k)B+=d,_+=p;if(et>0)for(;;){for(_=s+$*l,B=0,k=0;k<f&&0==(rt=o[_]-at[B]);++k)B+=d,_+=p;if(!(rt>0)){for(_=s+$*l,B=0,k=0;k<f&&0==(rt=o[_]-it[B]);++k)B+=d,_+=p;if(rt<0){for(A=l*b,M=l*K,S=l*$,N=s,k=0;k<f;++k)w=M+N,T=S+N,v=o[_=A+N],o[_]=o[w],o[w]=o[T],o[T]=v,N+=h;++K,--$}else{for(A=l*b,M=l*$,N=s,k=0;k<f;++k)w=M+N,v=o[_=A+N],o[_]=o[w],o[w]=v,N+=h;--$}break}if(--$<b)break}}}for(A=l*i,M=l*(K-1),B=0,N=s,k=0;k<f;++k)w=M+N,o[_=A+N]=o[w],o[w]=it[B],++B,N+=h;for(A=l*a,M=l*($+1),B=0,N=s,k=0;k<f;++k)w=M+N,o[_=A+N]=o[w],o[w]=at[B],++B,N+=h;if(K-2-i<=32?t(i,K-2,o,s,l,u,c,f,h,p,d):n(i,K-2,o,s,l,u,c,f,h,p,d),a-($+2)<=32?t($+2,a,o,s,l,u,c,f,h,p,d):n($+2,a,o,s,l,u,c,f,h,p,d),Q)return r(it),void r(at);if(K<U&&$>V){t:for(;;){for(_=s+K*l,B=0,N=s,k=0;k<f;++k){if(o[_]!==it[B])break t;++B,_+=h}++K}t:for(;;){for(_=s+$*l,B=0,N=s,k=0;k<f;++k){if(o[_]!==at[B])break t;++B,_+=h}--$}for(b=K;b<=$;++b){for(_=s+b*l,B=0,k=0;k<f&&0==(tt=o[_]-it[B]);++k)B+=d,_+=p;if(0===tt){if(b!==K)for(A=l*b,M=l*K,N=s,k=0;k<f;++k)w=M+N,v=o[_=A+N],o[_]=o[w],o[w]=v,N+=h;++K}else{for(_=s+b*l,B=0,k=0;k<f&&0==(et=o[_]-at[B]);++k)B+=d,_+=p;if(0===et)for(;;){for(_=s+$*l,B=0,k=0;k<f&&0==(rt=o[_]-at[B]);++k)B+=d,_+=p;if(0!==rt){for(_=s+$*l,B=0,k=0;k<f&&0==(rt=o[_]-it[B]);++k)B+=d,_+=p;if(rt<0){for(A=l*b,M=l*K,S=l*$,N=s,k=0;k<f;++k)w=M+N,T=S+N,v=o[_=A+N],o[_]=o[w],o[w]=o[T],o[T]=v,N+=h;++K,--$}else{for(A=l*b,M=l*$,N=s,k=0;k<f;++k)w=M+N,v=o[_=A+N],o[_]=o[w],o[w]=v,N+=h;--$}break}if(--$<b)break}}}}r(it),r(at),$-K<=32?t(K,$,o,s,l,u,c,f,h,p,d):n(K,$,o,s,l,u,c,f,h,p,d)}}},s={"uint32,1,0":function(t,e){return function(r){var n=r.data,i=0|r.offset,a=r.shape,o=r.stride,s=0|o[0],l=0|a[0],u=0|o[1],c=0|a[1],f=u,h=u;l<=32?t(0,l-1,n,i,s,u,l,c,f,h,1):e(0,l-1,n,i,s,u,l,c,f,h,1)}}};t.exports=function(t,e){var r=[e,t].join(","),n=s[r],l=function(t,e){var r=i(e),n=[e,t].join(","),o=a[n];return r?o(r[0],r[1]):o()}(t,e),u=function(t,e,r){var n=i(e),a=[e,t].join(","),s=o[a];return t.length>1&&n?s(r,n[0],n[1]):s(r)}(t,e,l);return n(l,u)}},8729:function(t,e,r){"use strict";var n=r(8139),i={};t.exports=function(t){var e=t.order,r=t.dtype,a=[e,r].join(":"),o=i[a];return o||(i[a]=o=n(e,r)),o(t),t}},5050:function(t,e,r){var n=r(4780),i="undefined"!=typeof Float64Array;function a(t,e){return t[0]-e[0]}function o(){var t,e=this.stride,r=new Array(e.length);for(t=0;t<r.length;++t)r[t]=[Math.abs(e[t]),t];r.sort(a);var n=new Array(r.length);for(t=0;t<n.length;++t)n[t]=r[t][1];return n}var s={T:function(t){function e(t){this.data=t}var r=e.prototype;return r.dtype=t,r.index=function(){return-1},r.size=0,r.dimension=-1,r.shape=r.stride=r.order=[],r.lo=r.hi=r.transpose=r.step=function(){return new e(this.data)},r.get=r.set=function(){},r.pick=function(){return null},function(t){return new e(t)}},0:function(t,e){function r(t,e){this.data=t,this.offset=e}var n=r.prototype;return n.dtype=t,n.index=function(){return this.offset},n.dimension=0,n.size=1,n.shape=n.stride=n.order=[],n.lo=n.hi=n.transpose=n.step=function(){return new r(this.data,this.offset)},n.pick=function(){return e(this.data)},n.valueOf=n.get=function(){return"generic"===t?this.data.get(this.offset):this.data[this.offset]},n.set=function(e){return"generic"===t?this.data.set(this.offset,e):this.data[this.offset]=e},function(t,e,n,i){return new r(t,i)}},1:function(t,e,r){function n(t,e,r,n){this.data=t,this.shape=[e],this.stride=[r],this.offset=0|n}var i=n.prototype;return i.dtype=t,i.dimension=1,Object.defineProperty(i,"size",{get:function(){return this.shape[0]}}),i.order=[0],i.set=function(e,r){return"generic"===t?this.data.set(this.offset+this.stride[0]*e,r):this.data[this.offset+this.stride[0]*e]=r},i.get=function(e){return"generic"===t?this.data.get(this.offset+this.stride[0]*e):this.data[this.offset+this.stride[0]*e]},i.index=function(t){return this.offset+this.stride[0]*t},i.hi=function(t){return new n(this.data,"number"!=typeof t||t<0?this.shape[0]:0|t,this.stride[0],this.offset)},i.lo=function(t){var e=this.offset,r=0,i=this.shape[0],a=this.stride[0];return"number"==typeof t&&t>=0&&(e+=a*(r=0|t),i-=r),new n(this.data,i,a,e)},i.step=function(t){var e=this.shape[0],r=this.stride[0],i=this.offset,a=0,o=Math.ceil;return"number"==typeof t&&((a=0|t)<0?(i+=r*(e-1),e=o(-e/a)):e=o(e/a),r*=a),new n(this.data,e,r,i)},i.transpose=function(t){t=void 0===t?0:0|t;var e=this.shape,r=this.stride;return new n(this.data,e[t],r[t],this.offset)},i.pick=function(t){var r=[],n=[],i=this.offset;return"number"==typeof t&&t>=0?i=i+this.stride[0]*t|0:(r.push(this.shape[0]),n.push(this.stride[0])),(0,e[r.length+1])(this.data,r,n,i)},function(t,e,r,i){return new n(t,e[0],r[0],i)}},2:function(t,e,r){function n(t,e,r,n,i,a){this.data=t,this.shape=[e,r],this.stride=[n,i],this.offset=0|a}var i=n.prototype;return i.dtype=t,i.dimension=2,Object.defineProperty(i,"size",{get:function(){return this.shape[0]*this.shape[1]}}),Object.defineProperty(i,"order",{get:function(){return Math.abs(this.stride[0])>Math.abs(this.stride[1])?[1,0]:[0,1]}}),i.set=function(e,r,n){return"generic"===t?this.data.set(this.offset+this.stride[0]*e+this.stride[1]*r,n):this.data[this.offset+this.stride[0]*e+this.stride[1]*r]=n},i.get=function(e,r){return"generic"===t?this.data.get(this.offset+this.stride[0]*e+this.stride[1]*r):this.data[this.offset+this.stride[0]*e+this.stride[1]*r]},i.index=function(t,e){return this.offset+this.stride[0]*t+this.stride[1]*e},i.hi=function(t,e){return new n(this.data,"number"!=typeof t||t<0?this.shape[0]:0|t,"number"!=typeof e||e<0?this.shape[1]:0|e,this.stride[0],this.stride[1],this.offset)},i.lo=function(t,e){var r=this.offset,i=0,a=this.shape[0],o=this.shape[1],s=this.stride[0],l=this.stride[1];return"number"==typeof t&&t>=0&&(r+=s*(i=0|t),a-=i),"number"==typeof e&&e>=0&&(r+=l*(i=0|e),o-=i),new n(this.data,a,o,s,l,r)},i.step=function(t,e){var r=this.shape[0],i=this.shape[1],a=this.stride[0],o=this.stride[1],s=this.offset,l=0,u=Math.ceil;return"number"==typeof t&&((l=0|t)<0?(s+=a*(r-1),r=u(-r/l)):r=u(r/l),a*=l),"number"==typeof e&&((l=0|e)<0?(s+=o*(i-1),i=u(-i/l)):i=u(i/l),o*=l),new n(this.data,r,i,a,o,s)},i.transpose=function(t,e){t=void 0===t?0:0|t,e=void 0===e?1:0|e;var r=this.shape,i=this.stride;return new n(this.data,r[t],r[e],i[t],i[e],this.offset)},i.pick=function(t,r){var n=[],i=[],a=this.offset;return"number"==typeof t&&t>=0?a=a+this.stride[0]*t|0:(n.push(this.shape[0]),i.push(this.stride[0])),"number"==typeof r&&r>=0?a=a+this.stride[1]*r|0:(n.push(this.shape[1]),i.push(this.stride[1])),(0,e[n.length+1])(this.data,n,i,a)},function(t,e,r,i){return new n(t,e[0],e[1],r[0],r[1],i)}},3:function(t,e,r){function n(t,e,r,n,i,a,o,s){this.data=t,this.shape=[e,r,n],this.stride=[i,a,o],this.offset=0|s}var i=n.prototype;return i.dtype=t,i.dimension=3,Object.defineProperty(i,"size",{get:function(){return this.shape[0]*this.shape[1]*this.shape[2]}}),Object.defineProperty(i,"order",{get:function(){var t=Math.abs(this.stride[0]),e=Math.abs(this.stride[1]),r=Math.abs(this.stride[2]);return t>e?e>r?[2,1,0]:t>r?[1,2,0]:[1,0,2]:t>r?[2,0,1]:r>e?[0,1,2]:[0,2,1]}}),i.set=function(e,r,n,i){return"generic"===t?this.data.set(this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n,i):this.data[this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n]=i},i.get=function(e,r,n){return"generic"===t?this.data.get(this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n):this.data[this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n]},i.index=function(t,e,r){return this.offset+this.stride[0]*t+this.stride[1]*e+this.stride[2]*r},i.hi=function(t,e,r){return new n(this.data,"number"!=typeof t||t<0?this.shape[0]:0|t,"number"!=typeof e||e<0?this.shape[1]:0|e,"number"!=typeof r||r<0?this.shape[2]:0|r,this.stride[0],this.stride[1],this.stride[2],this.offset)},i.lo=function(t,e,r){var i=this.offset,a=0,o=this.shape[0],s=this.shape[1],l=this.shape[2],u=this.stride[0],c=this.stride[1],f=this.stride[2];return"number"==typeof t&&t>=0&&(i+=u*(a=0|t),o-=a),"number"==typeof e&&e>=0&&(i+=c*(a=0|e),s-=a),"number"==typeof r&&r>=0&&(i+=f*(a=0|r),l-=a),new n(this.data,o,s,l,u,c,f,i)},i.step=function(t,e,r){var i=this.shape[0],a=this.shape[1],o=this.shape[2],s=this.stride[0],l=this.stride[1],u=this.stride[2],c=this.offset,f=0,h=Math.ceil;return"number"==typeof t&&((f=0|t)<0?(c+=s*(i-1),i=h(-i/f)):i=h(i/f),s*=f),"number"==typeof e&&((f=0|e)<0?(c+=l*(a-1),a=h(-a/f)):a=h(a/f),l*=f),"number"==typeof r&&((f=0|r)<0?(c+=u*(o-1),o=h(-o/f)):o=h(o/f),u*=f),new n(this.data,i,a,o,s,l,u,c)},i.transpose=function(t,e,r){t=void 0===t?0:0|t,e=void 0===e?1:0|e,r=void 0===r?2:0|r;var i=this.shape,a=this.stride;return new n(this.data,i[t],i[e],i[r],a[t],a[e],a[r],this.offset)},i.pick=function(t,r,n){var i=[],a=[],o=this.offset;return"number"==typeof t&&t>=0?o=o+this.stride[0]*t|0:(i.push(this.shape[0]),a.push(this.stride[0])),"number"==typeof r&&r>=0?o=o+this.stride[1]*r|0:(i.push(this.shape[1]),a.push(this.stride[1])),"number"==typeof n&&n>=0?o=o+this.stride[2]*n|0:(i.push(this.shape[2]),a.push(this.stride[2])),(0,e[i.length+1])(this.data,i,a,o)},function(t,e,r,i){return new n(t,e[0],e[1],e[2],r[0],r[1],r[2],i)}},4:function(t,e,r){function n(t,e,r,n,i,a,o,s,l,u){this.data=t,this.shape=[e,r,n,i],this.stride=[a,o,s,l],this.offset=0|u}var i=n.prototype;return i.dtype=t,i.dimension=4,Object.defineProperty(i,"size",{get:function(){return this.shape[0]*this.shape[1]*this.shape[2]*this.shape[3]}}),Object.defineProperty(i,"order",{get:r}),i.set=function(e,r,n,i,a){return"generic"===t?this.data.set(this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i,a):this.data[this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i]=a},i.get=function(e,r,n,i){return"generic"===t?this.data.get(this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i):this.data[this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i]},i.index=function(t,e,r,n){return this.offset+this.stride[0]*t+this.stride[1]*e+this.stride[2]*r+this.stride[3]*n},i.hi=function(t,e,r,i){return new n(this.data,"number"!=typeof t||t<0?this.shape[0]:0|t,"number"!=typeof e||e<0?this.shape[1]:0|e,"number"!=typeof r||r<0?this.shape[2]:0|r,"number"!=typeof i||i<0?this.shape[3]:0|i,this.stride[0],this.stride[1],this.stride[2],this.stride[3],this.offset)},i.lo=function(t,e,r,i){var a=this.offset,o=0,s=this.shape[0],l=this.shape[1],u=this.shape[2],c=this.shape[3],f=this.stride[0],h=this.stride[1],p=this.stride[2],d=this.stride[3];return"number"==typeof t&&t>=0&&(a+=f*(o=0|t),s-=o),"number"==typeof e&&e>=0&&(a+=h*(o=0|e),l-=o),"number"==typeof r&&r>=0&&(a+=p*(o=0|r),u-=o),"number"==typeof i&&i>=0&&(a+=d*(o=0|i),c-=o),new n(this.data,s,l,u,c,f,h,p,d,a)},i.step=function(t,e,r,i){var a=this.shape[0],o=this.shape[1],s=this.shape[2],l=this.shape[3],u=this.stride[0],c=this.stride[1],f=this.stride[2],h=this.stride[3],p=this.offset,d=0,v=Math.ceil;return"number"==typeof t&&((d=0|t)<0?(p+=u*(a-1),a=v(-a/d)):a=v(a/d),u*=d),"number"==typeof e&&((d=0|e)<0?(p+=c*(o-1),o=v(-o/d)):o=v(o/d),c*=d),"number"==typeof r&&((d=0|r)<0?(p+=f*(s-1),s=v(-s/d)):s=v(s/d),f*=d),"number"==typeof i&&((d=0|i)<0?(p+=h*(l-1),l=v(-l/d)):l=v(l/d),h*=d),new n(this.data,a,o,s,l,u,c,f,h,p)},i.transpose=function(t,e,r,i){t=void 0===t?0:0|t,e=void 0===e?1:0|e,r=void 0===r?2:0|r,i=void 0===i?3:0|i;var a=this.shape,o=this.stride;return new n(this.data,a[t],a[e],a[r],a[i],o[t],o[e],o[r],o[i],this.offset)},i.pick=function(t,r,n,i){var a=[],o=[],s=this.offset;return"number"==typeof t&&t>=0?s=s+this.stride[0]*t|0:(a.push(this.shape[0]),o.push(this.stride[0])),"number"==typeof r&&r>=0?s=s+this.stride[1]*r|0:(a.push(this.shape[1]),o.push(this.stride[1])),"number"==typeof n&&n>=0?s=s+this.stride[2]*n|0:(a.push(this.shape[2]),o.push(this.stride[2])),"number"==typeof i&&i>=0?s=s+this.stride[3]*i|0:(a.push(this.shape[3]),o.push(this.stride[3])),(0,e[a.length+1])(this.data,a,o,s)},function(t,e,r,i){return new n(t,e[0],e[1],e[2],e[3],r[0],r[1],r[2],r[3],i)}},5:function(t,e,r){function n(t,e,r,n,i,a,o,s,l,u,c,f){this.data=t,this.shape=[e,r,n,i,a],this.stride=[o,s,l,u,c],this.offset=0|f}var i=n.prototype;return i.dtype=t,i.dimension=5,Object.defineProperty(i,"size",{get:function(){return this.shape[0]*this.shape[1]*this.shape[2]*this.shape[3]*this.shape[4]}}),Object.defineProperty(i,"order",{get:r}),i.set=function(e,r,n,i,a,o){return"generic"===t?this.data.set(this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i+this.stride[4]*a,o):this.data[this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i+this.stride[4]*a]=o},i.get=function(e,r,n,i,a){return"generic"===t?this.data.get(this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i+this.stride[4]*a):this.data[this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i+this.stride[4]*a]},i.index=function(t,e,r,n,i){return this.offset+this.stride[0]*t+this.stride[1]*e+this.stride[2]*r+this.stride[3]*n+this.stride[4]*i},i.hi=function(t,e,r,i,a){return new n(this.data,"number"!=typeof t||t<0?this.shape[0]:0|t,"number"!=typeof e||e<0?this.shape[1]:0|e,"number"!=typeof r||r<0?this.shape[2]:0|r,"number"!=typeof i||i<0?this.shape[3]:0|i,"number"!=typeof a||a<0?this.shape[4]:0|a,this.stride[0],this.stride[1],this.stride[2],this.stride[3],this.stride[4],this.offset)},i.lo=function(t,e,r,i,a){var o=this.offset,s=0,l=this.shape[0],u=this.shape[1],c=this.shape[2],f=this.shape[3],h=this.shape[4],p=this.stride[0],d=this.stride[1],v=this.stride[2],g=this.stride[3],y=this.stride[4];return"number"==typeof t&&t>=0&&(o+=p*(s=0|t),l-=s),"number"==typeof e&&e>=0&&(o+=d*(s=0|e),u-=s),"number"==typeof r&&r>=0&&(o+=v*(s=0|r),c-=s),"number"==typeof i&&i>=0&&(o+=g*(s=0|i),f-=s),"number"==typeof a&&a>=0&&(o+=y*(s=0|a),h-=s),new n(this.data,l,u,c,f,h,p,d,v,g,y,o)},i.step=function(t,e,r,i,a){var o=this.shape[0],s=this.shape[1],l=this.shape[2],u=this.shape[3],c=this.shape[4],f=this.stride[0],h=this.stride[1],p=this.stride[2],d=this.stride[3],v=this.stride[4],g=this.offset,y=0,m=Math.ceil;return"number"==typeof t&&((y=0|t)<0?(g+=f*(o-1),o=m(-o/y)):o=m(o/y),f*=y),"number"==typeof e&&((y=0|e)<0?(g+=h*(s-1),s=m(-s/y)):s=m(s/y),h*=y),"number"==typeof r&&((y=0|r)<0?(g+=p*(l-1),l=m(-l/y)):l=m(l/y),p*=y),"number"==typeof i&&((y=0|i)<0?(g+=d*(u-1),u=m(-u/y)):u=m(u/y),d*=y),"number"==typeof a&&((y=0|a)<0?(g+=v*(c-1),c=m(-c/y)):c=m(c/y),v*=y),new n(this.data,o,s,l,u,c,f,h,p,d,v,g)},i.transpose=function(t,e,r,i,a){t=void 0===t?0:0|t,e=void 0===e?1:0|e,r=void 0===r?2:0|r,i=void 0===i?3:0|i,a=void 0===a?4:0|a;var o=this.shape,s=this.stride;return new n(this.data,o[t],o[e],o[r],o[i],o[a],s[t],s[e],s[r],s[i],s[a],this.offset)},i.pick=function(t,r,n,i,a){var o=[],s=[],l=this.offset;return"number"==typeof t&&t>=0?l=l+this.stride[0]*t|0:(o.push(this.shape[0]),s.push(this.stride[0])),"number"==typeof r&&r>=0?l=l+this.stride[1]*r|0:(o.push(this.shape[1]),s.push(this.stride[1])),"number"==typeof n&&n>=0?l=l+this.stride[2]*n|0:(o.push(this.shape[2]),s.push(this.stride[2])),"number"==typeof i&&i>=0?l=l+this.stride[3]*i|0:(o.push(this.shape[3]),s.push(this.stride[3])),"number"==typeof a&&a>=0?l=l+this.stride[4]*a|0:(o.push(this.shape[4]),s.push(this.stride[4])),(0,e[o.length+1])(this.data,o,s,l)},function(t,e,r,i){return new n(t,e[0],e[1],e[2],e[3],e[4],r[0],r[1],r[2],r[3],r[4],i)}}};function l(t,e){var r=-1===e?"T":String(e),n=s[r];return-1===e?n(t):0===e?n(t,u[t][0]):n(t,u[t],o)}var u={generic:[],buffer:[],array:[],float32:[],float64:[],int8:[],int16:[],int32:[],uint8_clamped:[],uint8:[],uint16:[],uint32:[],bigint64:[],biguint64:[]};t.exports=function(t,e,r,a){if(void 0===t)return(0,u.array[0])([]);"number"==typeof t&&(t=[t]),void 0===e&&(e=[t.length]);var o=e.length;if(void 0===r){r=new Array(o);for(var s=o-1,c=1;s>=0;--s)r[s]=c,c*=e[s]}if(void 0===a)for(a=0,s=0;s<o;++s)r[s]<0&&(a-=(e[s]-1)*r[s]);for(var f=function(t){if(n(t))return"buffer";if(i)switch(Object.prototype.toString.call(t)){case"[object Float64Array]":return"float64";case"[object Float32Array]":return"float32";case"[object Int8Array]":return"int8";case"[object Int16Array]":return"int16";case"[object Int32Array]":return"int32";case"[object Uint8ClampedArray]":return"uint8_clamped";case"[object Uint8Array]":return"uint8";case"[object Uint16Array]":return"uint16";case"[object Uint32Array]":return"uint32";case"[object BigInt64Array]":return"bigint64";case"[object BigUint64Array]":return"biguint64"}return Array.isArray(t)?"array":"generic"}(t),h=u[f];h.length<=o+1;)h.push(l(f,h.length-1));return(0,h[o+1])(t,e,r,a)}},8551:function(t,e,r){"use strict";var n=r(8362),i=Math.pow(2,-1074),a=-1>>>0;t.exports=function(t,e){if(isNaN(t)||isNaN(e))return NaN;if(t===e)return t;if(0===t)return e<0?-i:i;var r=n.hi(t),o=n.lo(t);return e>t==t>0?o===a?(r+=1,o=0):o+=1:0===o?(o=a,r-=1):o-=1,n.pack(o,r)}},115:function(t,e){e.vertexNormals=function(t,e,r){for(var n=e.length,i=new Array(n),a=void 0===r?1e-6:r,o=0;o<n;++o)i[o]=[0,0,0];for(o=0;o<t.length;++o)for(var s=t[o],l=0,u=s[s.length-1],c=s[0],f=0;f<s.length;++f){l=u,u=c,c=s[(f+1)%s.length];for(var h=e[l],p=e[u],d=e[c],v=new Array(3),g=0,y=new Array(3),m=0,x=0;x<3;++x)v[x]=h[x]-p[x],g+=v[x]*v[x],y[x]=d[x]-p[x],m+=y[x]*y[x];if(g*m>a){var b=i[u],_=1/Math.sqrt(g*m);for(x=0;x<3;++x){var w=(x+1)%3,T=(x+2)%3;b[x]+=_*(y[w]*v[T]-y[T]*v[w])}}}for(o=0;o<n;++o){b=i[o];var k=0;for(x=0;x<3;++x)k+=b[x]*b[x];if(k>a)for(_=1/Math.sqrt(k),x=0;x<3;++x)b[x]*=_;else for(x=0;x<3;++x)b[x]=0}return i},e.faceNormals=function(t,e,r){for(var n=t.length,i=new Array(n),a=void 0===r?1e-6:r,o=0;o<n;++o){for(var s=t[o],l=new Array(3),u=0;u<3;++u)l[u]=e[s[u]];var c=new Array(3),f=new Array(3);for(u=0;u<3;++u)c[u]=l[1][u]-l[0][u],f[u]=l[2][u]-l[0][u];var h=new Array(3),p=0;for(u=0;u<3;++u){var d=(u+1)%3,v=(u+2)%3;h[u]=c[d]*f[v]-c[v]*f[d],p+=h[u]*h[u]}for(p=p>a?1/Math.sqrt(p):0,u=0;u<3;++u)h[u]*=p;i[o]=h}return i}},567:function(t){"use strict";t.exports=function(t,e,r,n,i,a,o,s,l,u){var c=e+a+u;if(f>0){var f=Math.sqrt(c+1);t[0]=.5*(o-l)/f,t[1]=.5*(s-n)/f,t[2]=.5*(r-a)/f,t[3]=.5*f}else{var h=Math.max(e,a,u);f=Math.sqrt(2*h-c+1),e>=h?(t[0]=.5*f,t[1]=.5*(i+r)/f,t[2]=.5*(s+n)/f,t[3]=.5*(o-l)/f):a>=h?(t[0]=.5*(r+i)/f,t[1]=.5*f,t[2]=.5*(l+o)/f,t[3]=.5*(s-n)/f):(t[0]=.5*(n+s)/f,t[1]=.5*(o+l)/f,t[2]=.5*f,t[3]=.5*(r-i)/f)}return t}},7774:function(t,e,r){"use strict";t.exports=function(t){var e=(t=t||{}).center||[0,0,0],r=t.rotation||[0,0,0,1],n=t.radius||1;e=[].slice.call(e,0,3),c(r=[].slice.call(r,0,4),r);var i=new f(r,e,Math.log(n));return i.setDistanceLimits(t.zoomMin,t.zoomMax),("eye"in t||"up"in t)&&i.lookAt(0,t.eye,t.center,t.up),i};var n=r(8444),i=r(3012),a=r(5950),o=r(7437),s=r(567);function l(t,e,r){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2))}function u(t,e,r,n){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2)+Math.pow(n,2))}function c(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=u(r,n,i,a);o>1e-6?(t[0]=r/o,t[1]=n/o,t[2]=i/o,t[3]=a/o):(t[0]=t[1]=t[2]=0,t[3]=1)}function f(t,e,r){this.radius=n([r]),this.center=n(e),this.rotation=n(t),this.computedRadius=this.radius.curve(0),this.computedCenter=this.center.curve(0),this.computedRotation=this.rotation.curve(0),this.computedUp=[.1,0,0],this.computedEye=[.1,0,0],this.computedMatrix=[.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.recalcMatrix(0)}var h=f.prototype;h.lastT=function(){return Math.max(this.radius.lastT(),this.center.lastT(),this.rotation.lastT())},h.recalcMatrix=function(t){this.radius.curve(t),this.center.curve(t),this.rotation.curve(t);var e=this.computedRotation;c(e,e);var r=this.computedMatrix;a(r,e);var n=this.computedCenter,i=this.computedEye,o=this.computedUp,s=Math.exp(this.computedRadius[0]);i[0]=n[0]+s*r[2],i[1]=n[1]+s*r[6],i[2]=n[2]+s*r[10],o[0]=r[1],o[1]=r[5],o[2]=r[9];for(var l=0;l<3;++l){for(var u=0,f=0;f<3;++f)u+=r[l+4*f]*i[f];r[12+l]=-u}},h.getMatrix=function(t,e){this.recalcMatrix(t);var r=this.computedMatrix;if(e){for(var n=0;n<16;++n)e[n]=r[n];return e}return r},h.idle=function(t){this.center.idle(t),this.radius.idle(t),this.rotation.idle(t)},h.flush=function(t){this.center.flush(t),this.radius.flush(t),this.rotation.flush(t)},h.pan=function(t,e,r,n){e=e||0,r=r||0,n=n||0,this.recalcMatrix(t);var i=this.computedMatrix,a=i[1],o=i[5],s=i[9],u=l(a,o,s);a/=u,o/=u,s/=u;var c=i[0],f=i[4],h=i[8],p=c*a+f*o+h*s,d=l(c-=a*p,f-=o*p,h-=s*p);c/=d,f/=d,h/=d;var v=i[2],g=i[6],y=i[10],m=v*a+g*o+y*s,x=v*c+g*f+y*h,b=l(v-=m*a+x*c,g-=m*o+x*f,y-=m*s+x*h);v/=b,g/=b,y/=b;var _=c*e+a*r,w=f*e+o*r,T=h*e+s*r;this.center.move(t,_,w,T);var k=Math.exp(this.computedRadius[0]);k=Math.max(1e-4,k+n),this.radius.set(t,Math.log(k))},h.rotate=function(t,e,r,n){this.recalcMatrix(t),e=e||0,r=r||0;var i=this.computedMatrix,a=i[0],o=i[4],s=i[8],c=i[1],f=i[5],h=i[9],p=i[2],d=i[6],v=i[10],g=e*a+r*c,y=e*o+r*f,m=e*s+r*h,x=-(d*m-v*y),b=-(v*g-p*m),_=-(p*y-d*g),w=Math.sqrt(Math.max(0,1-Math.pow(x,2)-Math.pow(b,2)-Math.pow(_,2))),T=u(x,b,_,w);T>1e-6?(x/=T,b/=T,_/=T,w/=T):(x=b=_=0,w=1);var k=this.computedRotation,A=k[0],M=k[1],S=k[2],E=k[3],L=A*w+E*x+M*_-S*b,C=M*w+E*b+S*x-A*_,P=S*w+E*_+A*b-M*x,O=E*w-A*x-M*b-S*_;if(n){x=p,b=d,_=v;var I=Math.sin(n)/l(x,b,_);x*=I,b*=I,_*=I,O=O*(w=Math.cos(e))-(L=L*w+O*x+C*_-P*b)*x-(C=C*w+O*b+P*x-L*_)*b-(P=P*w+O*_+L*b-C*x)*_}var D=u(L,C,P,O);D>1e-6?(L/=D,C/=D,P/=D,O/=D):(L=C=P=0,O=1),this.rotation.set(t,L,C,P,O)},h.lookAt=function(t,e,r,n){this.recalcMatrix(t),r=r||this.computedCenter,e=e||this.computedEye,n=n||this.computedUp;var a=this.computedMatrix;i(a,e,r,n);var o=this.computedRotation;s(o,a[0],a[1],a[2],a[4],a[5],a[6],a[8],a[9],a[10]),c(o,o),this.rotation.set(t,o[0],o[1],o[2],o[3]);for(var l=0,u=0;u<3;++u)l+=Math.pow(r[u]-e[u],2);this.radius.set(t,.5*Math.log(Math.max(l,1e-6))),this.center.set(t,r[0],r[1],r[2])},h.translate=function(t,e,r,n){this.center.move(t,e||0,r||0,n||0)},h.setMatrix=function(t,e){var r=this.computedRotation;s(r,e[0],e[1],e[2],e[4],e[5],e[6],e[8],e[9],e[10]),c(r,r),this.rotation.set(t,r[0],r[1],r[2],r[3]);var n=this.computedMatrix;o(n,e);var i=n[15];if(Math.abs(i)>1e-6){var a=n[12]/i,l=n[13]/i,u=n[14]/i;this.recalcMatrix(t);var f=Math.exp(this.computedRadius[0]);this.center.set(t,a-n[2]*f,l-n[6]*f,u-n[10]*f),this.radius.idle(t)}else this.center.idle(t),this.radius.idle(t)},h.setDistance=function(t,e){e>0&&this.radius.set(t,Math.log(e))},h.setDistanceLimits=function(t,e){t=t>0?Math.log(t):-1/0,e=e>0?Math.log(e):1/0,e=Math.max(e,t),this.radius.bounds[0][0]=t,this.radius.bounds[1][0]=e},h.getDistanceLimits=function(t){var e=this.radius.bounds;return t?(t[0]=Math.exp(e[0][0]),t[1]=Math.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},h.toJSON=function(){return this.recalcMatrix(this.lastT()),{center:this.computedCenter.slice(),rotation:this.computedRotation.slice(),distance:Math.log(this.computedRadius[0]),zoomMin:this.radius.bounds[0][0],zoomMax:this.radius.bounds[1][0]}},h.fromJSON=function(t){var e=this.lastT(),r=t.center;r&&this.center.set(e,r[0],r[1],r[2]);var n=t.rotation;n&&this.rotation.set(e,n[0],n[1],n[2],n[3]);var i=t.distance;i&&i>0&&this.radius.set(e,Math.log(i)),this.setDistanceLimits(t.zoomMin,t.zoomMax)}},4930:function(t,e,r){"use strict";var n=r(6184);t.exports=function(t,e,r){return n(r=void 0!==r?r+"":" ",e)+t}},4405:function(t){t.exports=function(t,e){e||(e=[0,""]),t=String(t);var r=parseFloat(t,10);return e[0]=r,e[1]=t.match(/[\d.\-\+]*\s*(.*)/)[1]||"",e}},4166:function(t,e,r){"use strict";t.exports=function(t,e){for(var r=0|e.length,i=t.length,a=[new Array(r),new Array(r)],o=0;o<r;++o)a[0][o]=[],a[1][o]=[];for(o=0;o<i;++o){var s=t[o];a[0][s[0]].push(s),a[1][s[1]].push(s)}var l=[];for(o=0;o<r;++o)a[0][o].length+a[1][o].length===0&&l.push([o]);function u(t,e){var r=a[e][t[e]];r.splice(r.indexOf(t),1)}function c(t,r,i){for(var o,s,l,c=0;c<2;++c)if(a[c][r].length>0){o=a[c][r][0],l=c;break}s=o[1^l];for(var f=0;f<2;++f)for(var h=a[f][r],p=0;p<h.length;++p){var d=h[p],v=d[1^f];n(e[t],e[r],e[s],e[v])>0&&(o=d,s=v,l=f)}return i||o&&u(o,l),s}function f(t,r){var i=a[r][t][0],o=[t];u(i,r);for(var s=i[1^r];;){for(;s!==t;)o.push(s),s=c(o[o.length-2],s,!1);if(a[0][t].length+a[1][t].length===0)break;var l=o[o.length-1],f=t,h=o[1],p=c(l,f,!0);if(n(e[l],e[f],e[h],e[p])<0)break;o.push(t),s=c(l,f)}return o}function h(t,e){return e[1]===e[e.length-1]}for(o=0;o<r;++o)for(var p=0;p<2;++p){for(var d=[];a[p][o].length>0;){a[0][o].length;var v=f(o,p);h(0,v)?d.push.apply(d,v):(d.length>0&&l.push(d),d=v)}d.length>0&&l.push(d)}return l};var n=r(9398)},3959:function(t,e,r){"use strict";t.exports=function(t,e){for(var r=n(t,e.length),i=new Array(e.length),a=new Array(e.length),o=[],s=0;s<e.length;++s){var l=r[s].length;a[s]=l,i[s]=!0,l<=1&&o.push(s)}for(;o.length>0;){i[p=o.pop()]=!1;var u=r[p];for(s=0;s<u.length;++s){var c=u[s];0==--a[c]&&o.push(c)}}var f=new Array(e.length),h=[];for(s=0;s<e.length;++s)if(i[s]){var p=h.length;f[s]=p,h.push(e[s])}else f[s]=-1;var d=[];for(s=0;s<t.length;++s){var v=t[s];i[v[0]]&&i[v[1]]&&d.push([f[v[0]],f[v[1]]])}return[d,h]};var n=r(8348)},8040:function(t,e,r){"use strict";t.exports=function(t,e){var r=u(t,e);t=r[0];for(var f=(e=r[1]).length,h=(t.length,n(t,e.length)),p=0;p<f;++p)if(h[p].length%2==1)throw new Error("planar-graph-to-polyline: graph must be manifold");var d=i(t,e),v=(d=d.filter((function(t){for(var r=t.length,n=[0],i=0;i<r;++i){var a=e[t[i]],l=e[t[(i+1)%r]],u=o(-a[0],a[1]),c=o(-a[0],l[1]),f=o(l[0],a[1]),h=o(l[0],l[1]);n=s(n,s(s(u,c),s(f,h)))}return n[n.length-1]>0}))).length,g=new Array(v),y=new Array(v);for(p=0;p<v;++p){g[p]=p;var m=new Array(v),x=d[p].map((function(t){return e[t]})),b=a([x]),_=0;t:for(var w=0;w<v;++w)if(m[w]=0,p!==w){for(var T=(H=d[w]).length,k=0;k<T;++k){var A=b(e[H[k]]);if(0!==A){A<0&&(m[w]=1,_+=1);continue t}}m[w]=1,_+=1}y[p]=[_,p,m]}for(y.sort((function(t,e){return e[0]-t[0]})),p=0;p<v;++p){var M=(m=y[p])[1],S=m[2];for(w=0;w<v;++w)S[w]&&(g[w]=M)}var E=function(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=[];return e}(v);for(p=0;p<v;++p)E[p].push(g[p]),E[g[p]].push(p);var L={},C=c(f,!1);for(p=0;p<v;++p)for(T=(H=d[p]).length,w=0;w<T;++w){var P=H[w],O=H[(w+1)%T],I=Math.min(P,O)+":"+Math.max(P,O);if(I in L){var D=L[I];E[D].push(p),E[p].push(D),C[P]=C[O]=!0}else L[I]=p}function z(t){for(var e=t.length,r=0;r<e;++r)if(!C[t[r]])return!1;return!0}var R=[],F=c(v,-1);for(p=0;p<v;++p)g[p]!==p||z(d[p])?F[p]=-1:(R.push(p),F[p]=0);for(r=[];R.length>0;){var B=R.pop(),N=E[B];l(N,(function(t,e){return t-e}));var j,U=N.length,V=F[B];for(0===V&&(j=[H=d[B]]),p=0;p<U;++p){var H,q=N[p];F[q]>=0||(F[q]=1^V,R.push(q),0===V&&(z(H=d[q])||(H.reverse(),j.push(H))))}0===V&&r.push(j)}return r};var n=r(8348),i=r(4166),a=r(211),o=r(9660),s=r(9662),l=r(1215),u=r(3959);function c(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=e;return r}},211:function(t,e,r){t.exports=function(t){for(var e=t.length,r=[],a=[],s=0;s<e;++s)for(var c=t[s],f=c.length,h=f-1,p=0;p<f;h=p++){var d=c[h],v=c[p];d[0]===v[0]?a.push([d,v]):r.push([d,v])}if(0===r.length)return 0===a.length?u:(g=l(a),function(t){return g(t[0],t[1])?0:1});var g,y=i(r),m=function(t,e){return function(r){var i=o.le(e,r[0]);if(i<0)return 1;var a=t[i];if(!a){if(!(i>0&&e[i]===r[0]))return 1;a=t[i-1]}for(var s=1;a;){var l=a.key,u=n(r,l[0],l[1]);if(l[0][0]<l[1][0])if(u<0)a=a.left;else{if(!(u>0))return 0;s=-1,a=a.right}else if(u>0)a=a.left;else{if(!(u<0))return 0;s=1,a=a.right}}return s}}(y.slabs,y.coordinates);return 0===a.length?m:function(t,e){return function(r){return t(r[0],r[1])?0:e(r)}}(l(a),m)};var n=r(417)[3],i=r(4385),a=r(9014),o=r(5070);function s(){return!0}function l(t){for(var e={},r=0;r<t.length;++r){var n=t[r],i=n[0][0],o=n[0][1],l=n[1][1],u=[Math.min(o,l),Math.max(o,l)];i in e?e[i].push(u):e[i]=[u]}var c={},f=Object.keys(e);for(r=0;r<f.length;++r){var h=e[f[r]];c[f[r]]=a(h)}return function(t){return function(e,r){var n=t[e];return!!n&&!!n.queryPoint(r,s)}}(c)}function u(t){return 1}},7309:function(t){"use strict";var e=new Float64Array(4),r=new Float64Array(4),n=new Float64Array(4);t.exports=function(t,i,a,o,s){e.length<o.length&&(e=new Float64Array(o.length),r=new Float64Array(o.length),n=new Float64Array(o.length));for(var l=0;l<o.length;++l)e[l]=t[l]-o[l],r[l]=i[l]-t[l],n[l]=a[l]-t[l];var u=0,c=0,f=0,h=0,p=0,d=0;for(l=0;l<o.length;++l){var v=r[l],g=n[l],y=e[l];u+=v*v,c+=v*g,f+=g*g,h+=y*v,p+=y*g,d+=y*y}var m,x,b,_,w,T=Math.abs(u*f-c*c),k=c*p-f*h,A=c*h-u*p;if(k+A<=T)if(k<0)A<0&&h<0?(A=0,-h>=u?(k=1,m=u+2*h+d):m=h*(k=-h/u)+d):(k=0,p>=0?(A=0,m=d):-p>=f?(A=1,m=f+2*p+d):m=p*(A=-p/f)+d);else if(A<0)A=0,h>=0?(k=0,m=d):-h>=u?(k=1,m=u+2*h+d):m=h*(k=-h/u)+d;else{var M=1/T;m=(k*=M)*(u*k+c*(A*=M)+2*h)+A*(c*k+f*A+2*p)+d}else k<0?(b=f+p)>(x=c+h)?(_=b-x)>=(w=u-2*c+f)?(k=1,A=0,m=u+2*h+d):m=(k=_/w)*(u*k+c*(A=1-k)+2*h)+A*(c*k+f*A+2*p)+d:(k=0,b<=0?(A=1,m=f+2*p+d):p>=0?(A=0,m=d):m=p*(A=-p/f)+d):A<0?(b=u+h)>(x=c+p)?(_=b-x)>=(w=u-2*c+f)?(A=1,k=0,m=f+2*p+d):m=(k=1-(A=_/w))*(u*k+c*A+2*h)+A*(c*k+f*A+2*p)+d:(A=0,b<=0?(k=1,m=u+2*h+d):h>=0?(k=0,m=d):m=h*(k=-h/u)+d):(_=f+p-c-h)<=0?(k=0,A=1,m=f+2*p+d):_>=(w=u-2*c+f)?(k=1,A=0,m=u+2*h+d):m=(k=_/w)*(u*k+c*(A=1-k)+2*h)+A*(c*k+f*A+2*p)+d;var S=1-k-A;for(l=0;l<o.length;++l)s[l]=S*t[l]+k*i[l]+A*a[l];return m<0?0:m}},1116:function(t,e,r){t.exports=r(6093)},7584:function(t,e,r){"use strict";var n=r(1539);t.exports=function(t,e){for(var r=t.length,i=new Array(r),a=0;a<r;++a)i[a]=n(t[a],e[a]);return i}},2826:function(t,e,r){"use strict";t.exports=function(t){for(var e=new Array(t.length),r=0;r<t.length;++r)e[r]=n(t[r]);return e};var n=r(5125)},4469:function(t,e,r){"use strict";var n=r(5125),i=r(3962);t.exports=function(t,e){for(var r=n(e),a=t.length,o=new Array(a),s=0;s<a;++s)o[s]=i(t[s],r);return o}},6695:function(t,e,r){"use strict";var n=r(4354);t.exports=function(t,e){for(var r=t.length,i=new Array(r),a=0;a<r;++a)i[a]=n(t[a],e[a]);return i}},7037:function(t,e,r){"use strict";var n=r(9209),i=r(1284),a=r(9887);t.exports=function(t){t.sort(i);for(var e=t.length,r=0,o=0;o<e;++o){var s=t[o],l=a(s);if(0!==l){if(r>0){var u=t[r-1];if(0===n(s,u)&&a(u)!==l){r-=1;continue}}t[r++]=s}}return t.length=r,t}},6184:function(t){"use strict";var e,r="";t.exports=function(t,n){if("string"!=typeof t)throw new TypeError("expected a string");if(1===n)return t;if(2===n)return t+t;var i=t.length*n;if(e!==t||void 0===e)e=t,r="";else if(r.length>=i)return r.substr(0,i);for(;i>r.length&&n>1;)1&n&&(r+=t),n>>=1,t+=t;return r=(r+=t).substr(0,i)}},8161:function(t,e,r){t.exports=r.g.performance&&r.g.performance.now?function(){return performance.now()}:Date.now||function(){return+new Date}},402:function(t){"use strict";t.exports=function(t){for(var e=t.length,r=t[t.length-1],n=e,i=e-2;i>=0;--i){var a=r;(l=(s=t[i])-((r=a+s)-a))&&(t[--n]=r,r=l)}var o=0;for(i=n;i<e;++i){var s,l;(l=(s=r)-((r=(a=t[i])+s)-a))&&(t[o++]=l)}return t[o++]=r,t.length=o,t}},8167:function(t,e,r){"use strict";var n=r(9660),i=r(9662),a=r(8289),o=r(402);function s(t,e,r,n){return function(e){return n(t(r(e[0][0],e[1][1]),r(-e[0][1],e[1][0])))}}function l(t,e,r,n){return function(i){return n(t(e(t(r(i[1][1],i[2][2]),r(-i[1][2],i[2][1])),i[0][0]),t(e(t(r(i[1][0],i[2][2]),r(-i[1][2],i[2][0])),-i[0][1]),e(t(r(i[1][0],i[2][1]),r(-i[1][1],i[2][0])),i[0][2]))))}}function u(t,e,r,n){return function(i){return n(t(t(e(t(e(t(r(i[2][2],i[3][3]),r(-i[2][3],i[3][2])),i[1][1]),t(e(t(r(i[2][1],i[3][3]),r(-i[2][3],i[3][1])),-i[1][2]),e(t(r(i[2][1],i[3][2]),r(-i[2][2],i[3][1])),i[1][3]))),i[0][0]),e(t(e(t(r(i[2][2],i[3][3]),r(-i[2][3],i[3][2])),i[1][0]),t(e(t(r(i[2][0],i[3][3]),r(-i[2][3],i[3][0])),-i[1][2]),e(t(r(i[2][0],i[3][2]),r(-i[2][2],i[3][0])),i[1][3]))),-i[0][1])),t(e(t(e(t(r(i[2][1],i[3][3]),r(-i[2][3],i[3][1])),i[1][0]),t(e(t(r(i[2][0],i[3][3]),r(-i[2][3],i[3][0])),-i[1][1]),e(t(r(i[2][0],i[3][1]),r(-i[2][1],i[3][0])),i[1][3]))),i[0][2]),e(t(e(t(r(i[2][1],i[3][2]),r(-i[2][2],i[3][1])),i[1][0]),t(e(t(r(i[2][0],i[3][2]),r(-i[2][2],i[3][0])),-i[1][1]),e(t(r(i[2][0],i[3][1]),r(-i[2][1],i[3][0])),i[1][2]))),-i[0][3]))))}}function c(t,e,r,n){return function(i){return n(t(t(e(t(t(e(t(e(t(r(i[3][3],i[4][4]),r(-i[3][4],i[4][3])),i[2][2]),t(e(t(r(i[3][2],i[4][4]),r(-i[3][4],i[4][2])),-i[2][3]),e(t(r(i[3][2],i[4][3]),r(-i[3][3],i[4][2])),i[2][4]))),i[1][1]),e(t(e(t(r(i[3][3],i[4][4]),r(-i[3][4],i[4][3])),i[2][1]),t(e(t(r(i[3][1],i[4][4]),r(-i[3][4],i[4][1])),-i[2][3]),e(t(r(i[3][1],i[4][3]),r(-i[3][3],i[4][1])),i[2][4]))),-i[1][2])),t(e(t(e(t(r(i[3][2],i[4][4]),r(-i[3][4],i[4][2])),i[2][1]),t(e(t(r(i[3][1],i[4][4]),r(-i[3][4],i[4][1])),-i[2][2]),e(t(r(i[3][1],i[4][2]),r(-i[3][2],i[4][1])),i[2][4]))),i[1][3]),e(t(e(t(r(i[3][2],i[4][3]),r(-i[3][3],i[4][2])),i[2][1]),t(e(t(r(i[3][1],i[4][3]),r(-i[3][3],i[4][1])),-i[2][2]),e(t(r(i[3][1],i[4][2]),r(-i[3][2],i[4][1])),i[2][3]))),-i[1][4]))),i[0][0]),e(t(t(e(t(e(t(r(i[3][3],i[4][4]),r(-i[3][4],i[4][3])),i[2][2]),t(e(t(r(i[3][2],i[4][4]),r(-i[3][4],i[4][2])),-i[2][3]),e(t(r(i[3][2],i[4][3]),r(-i[3][3],i[4][2])),i[2][4]))),i[1][0]),e(t(e(t(r(i[3][3],i[4][4]),r(-i[3][4],i[4][3])),i[2][0]),t(e(t(r(i[3][0],i[4][4]),r(-i[3][4],i[4][0])),-i[2][3]),e(t(r(i[3][0],i[4][3]),r(-i[3][3],i[4][0])),i[2][4]))),-i[1][2])),t(e(t(e(t(r(i[3][2],i[4][4]),r(-i[3][4],i[4][2])),i[2][0]),t(e(t(r(i[3][0],i[4][4]),r(-i[3][4],i[4][0])),-i[2][2]),e(t(r(i[3][0],i[4][2]),r(-i[3][2],i[4][0])),i[2][4]))),i[1][3]),e(t(e(t(r(i[3][2],i[4][3]),r(-i[3][3],i[4][2])),i[2][0]),t(e(t(r(i[3][0],i[4][3]),r(-i[3][3],i[4][0])),-i[2][2]),e(t(r(i[3][0],i[4][2]),r(-i[3][2],i[4][0])),i[2][3]))),-i[1][4]))),-i[0][1])),t(e(t(t(e(t(e(t(r(i[3][3],i[4][4]),r(-i[3][4],i[4][3])),i[2][1]),t(e(t(r(i[3][1],i[4][4]),r(-i[3][4],i[4][1])),-i[2][3]),e(t(r(i[3][1],i[4][3]),r(-i[3][3],i[4][1])),i[2][4]))),i[1][0]),e(t(e(t(r(i[3][3],i[4][4]),r(-i[3][4],i[4][3])),i[2][0]),t(e(t(r(i[3][0],i[4][4]),r(-i[3][4],i[4][0])),-i[2][3]),e(t(r(i[3][0],i[4][3]),r(-i[3][3],i[4][0])),i[2][4]))),-i[1][1])),t(e(t(e(t(r(i[3][1],i[4][4]),r(-i[3][4],i[4][1])),i[2][0]),t(e(t(r(i[3][0],i[4][4]),r(-i[3][4],i[4][0])),-i[2][1]),e(t(r(i[3][0],i[4][1]),r(-i[3][1],i[4][0])),i[2][4]))),i[1][3]),e(t(e(t(r(i[3][1],i[4][3]),r(-i[3][3],i[4][1])),i[2][0]),t(e(t(r(i[3][0],i[4][3]),r(-i[3][3],i[4][0])),-i[2][1]),e(t(r(i[3][0],i[4][1]),r(-i[3][1],i[4][0])),i[2][3]))),-i[1][4]))),i[0][2]),t(e(t(t(e(t(e(t(r(i[3][2],i[4][4]),r(-i[3][4],i[4][2])),i[2][1]),t(e(t(r(i[3][1],i[4][4]),r(-i[3][4],i[4][1])),-i[2][2]),e(t(r(i[3][1],i[4][2]),r(-i[3][2],i[4][1])),i[2][4]))),i[1][0]),e(t(e(t(r(i[3][2],i[4][4]),r(-i[3][4],i[4][2])),i[2][0]),t(e(t(r(i[3][0],i[4][4]),r(-i[3][4],i[4][0])),-i[2][2]),e(t(r(i[3][0],i[4][2]),r(-i[3][2],i[4][0])),i[2][4]))),-i[1][1])),t(e(t(e(t(r(i[3][1],i[4][4]),r(-i[3][4],i[4][1])),i[2][0]),t(e(t(r(i[3][0],i[4][4]),r(-i[3][4],i[4][0])),-i[2][1]),e(t(r(i[3][0],i[4][1]),r(-i[3][1],i[4][0])),i[2][4]))),i[1][2]),e(t(e(t(r(i[3][1],i[4][2]),r(-i[3][2],i[4][1])),i[2][0]),t(e(t(r(i[3][0],i[4][2]),r(-i[3][2],i[4][0])),-i[2][1]),e(t(r(i[3][0],i[4][1]),r(-i[3][1],i[4][0])),i[2][2]))),-i[1][4]))),-i[0][3]),e(t(t(e(t(e(t(r(i[3][2],i[4][3]),r(-i[3][3],i[4][2])),i[2][1]),t(e(t(r(i[3][1],i[4][3]),r(-i[3][3],i[4][1])),-i[2][2]),e(t(r(i[3][1],i[4][2]),r(-i[3][2],i[4][1])),i[2][3]))),i[1][0]),e(t(e(t(r(i[3][2],i[4][3]),r(-i[3][3],i[4][2])),i[2][0]),t(e(t(r(i[3][0],i[4][3]),r(-i[3][3],i[4][0])),-i[2][2]),e(t(r(i[3][0],i[4][2]),r(-i[3][2],i[4][0])),i[2][3]))),-i[1][1])),t(e(t(e(t(r(i[3][1],i[4][3]),r(-i[3][3],i[4][1])),i[2][0]),t(e(t(r(i[3][0],i[4][3]),r(-i[3][3],i[4][0])),-i[2][1]),e(t(r(i[3][0],i[4][1]),r(-i[3][1],i[4][0])),i[2][3]))),i[1][2]),e(t(e(t(r(i[3][1],i[4][2]),r(-i[3][2],i[4][1])),i[2][0]),t(e(t(r(i[3][0],i[4][2]),r(-i[3][2],i[4][0])),-i[2][1]),e(t(r(i[3][0],i[4][1]),r(-i[3][1],i[4][0])),i[2][2]))),-i[1][3]))),i[0][4])))))}}function f(t){return(2===t?s:3===t?l:4===t?u:5===t?c:void 0)(i,a,n,o)}var h=[function(){return[0]},function(t){return[t[0][0]]}];function p(t,e,r,n,i,a,o,s){return function(l){switch(l.length){case 0:return t(l);case 1:return e(l);case 2:return r(l);case 3:return n(l);case 4:return i(l);case 5:return a(l)}var u=o[l.length];return u||(u=o[l.length]=s(l.length)),u(l)}}!function(){for(;h.length<6;)h.push(f(h.length));t.exports=p.apply(void 0,h.concat([h,f]));for(var e=0;e<h.length;++e)t.exports[e]=h[e]}()},9130:function(t,e,r){"use strict";var n=r(9660),i=r(9662);t.exports=function(t,e){for(var r=n(t[0],e[0]),a=1;a<t.length;++a)r=i(r,n(t[a],e[a]));return r}},2227:function(t,e,r){"use strict";var n=r(9660),i=r(9662),a=r(4078),o=r(8289);function s(t){return(3===t?l:4===t?u:5===t?c:f)(i,a,n,o)}function l(t,e,r,n){return function(i,a,o){var s=r(i[0],i[0]),l=n(s,a[0]),u=n(s,o[0]),c=r(a[0],a[0]),f=n(c,i[0]),h=n(c,o[0]),p=r(o[0],o[0]),d=n(p,i[0]),v=n(p,a[0]),g=t(e(v,h),e(f,l)),y=e(d,u),m=e(g,y);return m[m.length-1]}}function u(t,e,r,n){return function(i,a,o,s){var l=t(r(i[0],i[0]),r(i[1],i[1])),u=n(l,a[0]),c=n(l,o[0]),f=n(l,s[0]),h=t(r(a[0],a[0]),r(a[1],a[1])),p=n(h,i[0]),d=n(h,o[0]),v=n(h,s[0]),g=t(r(o[0],o[0]),r(o[1],o[1])),y=n(g,i[0]),m=n(g,a[0]),x=n(g,s[0]),b=t(r(s[0],s[0]),r(s[1],s[1])),_=n(b,i[0]),w=n(b,a[0]),T=n(b,o[0]),k=t(t(n(e(T,x),a[1]),t(n(e(w,v),-o[1]),n(e(m,d),s[1]))),t(n(e(w,v),i[1]),t(n(e(_,f),-a[1]),n(e(p,u),s[1])))),A=t(t(n(e(T,x),i[1]),t(n(e(_,f),-o[1]),n(e(y,c),s[1]))),t(n(e(m,d),i[1]),t(n(e(y,c),-a[1]),n(e(p,u),o[1])))),M=e(k,A);return M[M.length-1]}}function c(t,e,r,n){return function(i,a,o,s,l){var u=t(r(i[0],i[0]),t(r(i[1],i[1]),r(i[2],i[2]))),c=n(u,a[0]),f=n(u,o[0]),h=n(u,s[0]),p=n(u,l[0]),d=t(r(a[0],a[0]),t(r(a[1],a[1]),r(a[2],a[2]))),v=n(d,i[0]),g=n(d,o[0]),y=n(d,s[0]),m=n(d,l[0]),x=t(r(o[0],o[0]),t(r(o[1],o[1]),r(o[2],o[2]))),b=n(x,i[0]),_=n(x,a[0]),w=n(x,s[0]),T=n(x,l[0]),k=t(r(s[0],s[0]),t(r(s[1],s[1]),r(s[2],s[2]))),A=n(k,i[0]),M=n(k,a[0]),S=n(k,o[0]),E=n(k,l[0]),L=t(r(l[0],l[0]),t(r(l[1],l[1]),r(l[2],l[2]))),C=n(L,i[0]),P=n(L,a[0]),O=n(L,o[0]),I=n(L,s[0]),D=t(t(t(n(t(n(e(I,E),o[1]),t(n(e(O,T),-s[1]),n(e(S,w),l[1]))),a[2]),t(n(t(n(e(I,E),a[1]),t(n(e(P,m),-s[1]),n(e(M,y),l[1]))),-o[2]),n(t(n(e(O,T),a[1]),t(n(e(P,m),-o[1]),n(e(_,g),l[1]))),s[2]))),t(n(t(n(e(S,w),a[1]),t(n(e(M,y),-o[1]),n(e(_,g),s[1]))),-l[2]),t(n(t(n(e(I,E),a[1]),t(n(e(P,m),-s[1]),n(e(M,y),l[1]))),i[2]),n(t(n(e(I,E),i[1]),t(n(e(C,p),-s[1]),n(e(A,h),l[1]))),-a[2])))),t(t(n(t(n(e(P,m),i[1]),t(n(e(C,p),-a[1]),n(e(v,c),l[1]))),s[2]),t(n(t(n(e(M,y),i[1]),t(n(e(A,h),-a[1]),n(e(v,c),s[1]))),-l[2]),n(t(n(e(S,w),a[1]),t(n(e(M,y),-o[1]),n(e(_,g),s[1]))),i[2]))),t(n(t(n(e(S,w),i[1]),t(n(e(A,h),-o[1]),n(e(b,f),s[1]))),-a[2]),t(n(t(n(e(M,y),i[1]),t(n(e(A,h),-a[1]),n(e(v,c),s[1]))),o[2]),n(t(n(e(_,g),i[1]),t(n(e(b,f),-a[1]),n(e(v,c),o[1]))),-s[2]))))),z=t(t(t(n(t(n(e(I,E),o[1]),t(n(e(O,T),-s[1]),n(e(S,w),l[1]))),i[2]),n(t(n(e(I,E),i[1]),t(n(e(C,p),-s[1]),n(e(A,h),l[1]))),-o[2])),t(n(t(n(e(O,T),i[1]),t(n(e(C,p),-o[1]),n(e(b,f),l[1]))),s[2]),n(t(n(e(S,w),i[1]),t(n(e(A,h),-o[1]),n(e(b,f),s[1]))),-l[2]))),t(t(n(t(n(e(O,T),a[1]),t(n(e(P,m),-o[1]),n(e(_,g),l[1]))),i[2]),n(t(n(e(O,T),i[1]),t(n(e(C,p),-o[1]),n(e(b,f),l[1]))),-a[2])),t(n(t(n(e(P,m),i[1]),t(n(e(C,p),-a[1]),n(e(v,c),l[1]))),o[2]),n(t(n(e(_,g),i[1]),t(n(e(b,f),-a[1]),n(e(v,c),o[1]))),-l[2])))),R=e(D,z);return R[R.length-1]}}function f(t,e,r,n){return function(i,a,o,s,l,u){var c=t(t(r(i[0],i[0]),r(i[1],i[1])),t(r(i[2],i[2]),r(i[3],i[3]))),f=n(c,a[0]),h=n(c,o[0]),p=n(c,s[0]),d=n(c,l[0]),v=n(c,u[0]),g=t(t(r(a[0],a[0]),r(a[1],a[1])),t(r(a[2],a[2]),r(a[3],a[3]))),y=n(g,i[0]),m=n(g,o[0]),x=n(g,s[0]),b=n(g,l[0]),_=n(g,u[0]),w=t(t(r(o[0],o[0]),r(o[1],o[1])),t(r(o[2],o[2]),r(o[3],o[3]))),T=n(w,i[0]),k=n(w,a[0]),A=n(w,s[0]),M=n(w,l[0]),S=n(w,u[0]),E=t(t(r(s[0],s[0]),r(s[1],s[1])),t(r(s[2],s[2]),r(s[3],s[3]))),L=n(E,i[0]),C=n(E,a[0]),P=n(E,o[0]),O=n(E,l[0]),I=n(E,u[0]),D=t(t(r(l[0],l[0]),r(l[1],l[1])),t(r(l[2],l[2]),r(l[3],l[3]))),z=n(D,i[0]),R=n(D,a[0]),F=n(D,o[0]),B=n(D,s[0]),N=n(D,u[0]),j=t(t(r(u[0],u[0]),r(u[1],u[1])),t(r(u[2],u[2]),r(u[3],u[3]))),U=n(j,i[0]),V=n(j,a[0]),H=n(j,o[0]),q=n(j,s[0]),G=n(j,l[0]),Z=t(t(t(n(t(t(n(t(n(e(G,N),s[1]),t(n(e(q,I),-l[1]),n(e(B,O),u[1]))),o[2]),n(t(n(e(G,N),o[1]),t(n(e(H,S),-l[1]),n(e(F,M),u[1]))),-s[2])),t(n(t(n(e(q,I),o[1]),t(n(e(H,S),-s[1]),n(e(P,A),u[1]))),l[2]),n(t(n(e(B,O),o[1]),t(n(e(F,M),-s[1]),n(e(P,A),l[1]))),-u[2]))),a[3]),t(n(t(t(n(t(n(e(G,N),s[1]),t(n(e(q,I),-l[1]),n(e(B,O),u[1]))),a[2]),n(t(n(e(G,N),a[1]),t(n(e(V,_),-l[1]),n(e(R,b),u[1]))),-s[2])),t(n(t(n(e(q,I),a[1]),t(n(e(V,_),-s[1]),n(e(C,x),u[1]))),l[2]),n(t(n(e(B,O),a[1]),t(n(e(R,b),-s[1]),n(e(C,x),l[1]))),-u[2]))),-o[3]),n(t(t(n(t(n(e(G,N),o[1]),t(n(e(H,S),-l[1]),n(e(F,M),u[1]))),a[2]),n(t(n(e(G,N),a[1]),t(n(e(V,_),-l[1]),n(e(R,b),u[1]))),-o[2])),t(n(t(n(e(H,S),a[1]),t(n(e(V,_),-o[1]),n(e(k,m),u[1]))),l[2]),n(t(n(e(F,M),a[1]),t(n(e(R,b),-o[1]),n(e(k,m),l[1]))),-u[2]))),s[3]))),t(t(n(t(t(n(t(n(e(q,I),o[1]),t(n(e(H,S),-s[1]),n(e(P,A),u[1]))),a[2]),n(t(n(e(q,I),a[1]),t(n(e(V,_),-s[1]),n(e(C,x),u[1]))),-o[2])),t(n(t(n(e(H,S),a[1]),t(n(e(V,_),-o[1]),n(e(k,m),u[1]))),s[2]),n(t(n(e(P,A),a[1]),t(n(e(C,x),-o[1]),n(e(k,m),s[1]))),-u[2]))),-l[3]),n(t(t(n(t(n(e(B,O),o[1]),t(n(e(F,M),-s[1]),n(e(P,A),l[1]))),a[2]),n(t(n(e(B,O),a[1]),t(n(e(R,b),-s[1]),n(e(C,x),l[1]))),-o[2])),t(n(t(n(e(F,M),a[1]),t(n(e(R,b),-o[1]),n(e(k,m),l[1]))),s[2]),n(t(n(e(P,A),a[1]),t(n(e(C,x),-o[1]),n(e(k,m),s[1]))),-l[2]))),u[3])),t(n(t(t(n(t(n(e(G,N),s[1]),t(n(e(q,I),-l[1]),n(e(B,O),u[1]))),a[2]),n(t(n(e(G,N),a[1]),t(n(e(V,_),-l[1]),n(e(R,b),u[1]))),-s[2])),t(n(t(n(e(q,I),a[1]),t(n(e(V,_),-s[1]),n(e(C,x),u[1]))),l[2]),n(t(n(e(B,O),a[1]),t(n(e(R,b),-s[1]),n(e(C,x),l[1]))),-u[2]))),i[3]),n(t(t(n(t(n(e(G,N),s[1]),t(n(e(q,I),-l[1]),n(e(B,O),u[1]))),i[2]),n(t(n(e(G,N),i[1]),t(n(e(U,v),-l[1]),n(e(z,d),u[1]))),-s[2])),t(n(t(n(e(q,I),i[1]),t(n(e(U,v),-s[1]),n(e(L,p),u[1]))),l[2]),n(t(n(e(B,O),i[1]),t(n(e(z,d),-s[1]),n(e(L,p),l[1]))),-u[2]))),-a[3])))),t(t(t(n(t(t(n(t(n(e(G,N),a[1]),t(n(e(V,_),-l[1]),n(e(R,b),u[1]))),i[2]),n(t(n(e(G,N),i[1]),t(n(e(U,v),-l[1]),n(e(z,d),u[1]))),-a[2])),t(n(t(n(e(V,_),i[1]),t(n(e(U,v),-a[1]),n(e(y,f),u[1]))),l[2]),n(t(n(e(R,b),i[1]),t(n(e(z,d),-a[1]),n(e(y,f),l[1]))),-u[2]))),s[3]),n(t(t(n(t(n(e(q,I),a[1]),t(n(e(V,_),-s[1]),n(e(C,x),u[1]))),i[2]),n(t(n(e(q,I),i[1]),t(n(e(U,v),-s[1]),n(e(L,p),u[1]))),-a[2])),t(n(t(n(e(V,_),i[1]),t(n(e(U,v),-a[1]),n(e(y,f),u[1]))),s[2]),n(t(n(e(C,x),i[1]),t(n(e(L,p),-a[1]),n(e(y,f),s[1]))),-u[2]))),-l[3])),t(n(t(t(n(t(n(e(B,O),a[1]),t(n(e(R,b),-s[1]),n(e(C,x),l[1]))),i[2]),n(t(n(e(B,O),i[1]),t(n(e(z,d),-s[1]),n(e(L,p),l[1]))),-a[2])),t(n(t(n(e(R,b),i[1]),t(n(e(z,d),-a[1]),n(e(y,f),l[1]))),s[2]),n(t(n(e(C,x),i[1]),t(n(e(L,p),-a[1]),n(e(y,f),s[1]))),-l[2]))),u[3]),n(t(t(n(t(n(e(q,I),o[1]),t(n(e(H,S),-s[1]),n(e(P,A),u[1]))),a[2]),n(t(n(e(q,I),a[1]),t(n(e(V,_),-s[1]),n(e(C,x),u[1]))),-o[2])),t(n(t(n(e(H,S),a[1]),t(n(e(V,_),-o[1]),n(e(k,m),u[1]))),s[2]),n(t(n(e(P,A),a[1]),t(n(e(C,x),-o[1]),n(e(k,m),s[1]))),-u[2]))),i[3]))),t(t(n(t(t(n(t(n(e(q,I),o[1]),t(n(e(H,S),-s[1]),n(e(P,A),u[1]))),i[2]),n(t(n(e(q,I),i[1]),t(n(e(U,v),-s[1]),n(e(L,p),u[1]))),-o[2])),t(n(t(n(e(H,S),i[1]),t(n(e(U,v),-o[1]),n(e(T,h),u[1]))),s[2]),n(t(n(e(P,A),i[1]),t(n(e(L,p),-o[1]),n(e(T,h),s[1]))),-u[2]))),-a[3]),n(t(t(n(t(n(e(q,I),a[1]),t(n(e(V,_),-s[1]),n(e(C,x),u[1]))),i[2]),n(t(n(e(q,I),i[1]),t(n(e(U,v),-s[1]),n(e(L,p),u[1]))),-a[2])),t(n(t(n(e(V,_),i[1]),t(n(e(U,v),-a[1]),n(e(y,f),u[1]))),s[2]),n(t(n(e(C,x),i[1]),t(n(e(L,p),-a[1]),n(e(y,f),s[1]))),-u[2]))),o[3])),t(n(t(t(n(t(n(e(H,S),a[1]),t(n(e(V,_),-o[1]),n(e(k,m),u[1]))),i[2]),n(t(n(e(H,S),i[1]),t(n(e(U,v),-o[1]),n(e(T,h),u[1]))),-a[2])),t(n(t(n(e(V,_),i[1]),t(n(e(U,v),-a[1]),n(e(y,f),u[1]))),o[2]),n(t(n(e(k,m),i[1]),t(n(e(T,h),-a[1]),n(e(y,f),o[1]))),-u[2]))),-s[3]),n(t(t(n(t(n(e(P,A),a[1]),t(n(e(C,x),-o[1]),n(e(k,m),s[1]))),i[2]),n(t(n(e(P,A),i[1]),t(n(e(L,p),-o[1]),n(e(T,h),s[1]))),-a[2])),t(n(t(n(e(C,x),i[1]),t(n(e(L,p),-a[1]),n(e(y,f),s[1]))),o[2]),n(t(n(e(k,m),i[1]),t(n(e(T,h),-a[1]),n(e(y,f),o[1]))),-s[2]))),u[3]))))),Y=t(t(t(n(t(t(n(t(n(e(G,N),s[1]),t(n(e(q,I),-l[1]),n(e(B,O),u[1]))),o[2]),n(t(n(e(G,N),o[1]),t(n(e(H,S),-l[1]),n(e(F,M),u[1]))),-s[2])),t(n(t(n(e(q,I),o[1]),t(n(e(H,S),-s[1]),n(e(P,A),u[1]))),l[2]),n(t(n(e(B,O),o[1]),t(n(e(F,M),-s[1]),n(e(P,A),l[1]))),-u[2]))),i[3]),t(n(t(t(n(t(n(e(G,N),s[1]),t(n(e(q,I),-l[1]),n(e(B,O),u[1]))),i[2]),n(t(n(e(G,N),i[1]),t(n(e(U,v),-l[1]),n(e(z,d),u[1]))),-s[2])),t(n(t(n(e(q,I),i[1]),t(n(e(U,v),-s[1]),n(e(L,p),u[1]))),l[2]),n(t(n(e(B,O),i[1]),t(n(e(z,d),-s[1]),n(e(L,p),l[1]))),-u[2]))),-o[3]),n(t(t(n(t(n(e(G,N),o[1]),t(n(e(H,S),-l[1]),n(e(F,M),u[1]))),i[2]),n(t(n(e(G,N),i[1]),t(n(e(U,v),-l[1]),n(e(z,d),u[1]))),-o[2])),t(n(t(n(e(H,S),i[1]),t(n(e(U,v),-o[1]),n(e(T,h),u[1]))),l[2]),n(t(n(e(F,M),i[1]),t(n(e(z,d),-o[1]),n(e(T,h),l[1]))),-u[2]))),s[3]))),t(t(n(t(t(n(t(n(e(q,I),o[1]),t(n(e(H,S),-s[1]),n(e(P,A),u[1]))),i[2]),n(t(n(e(q,I),i[1]),t(n(e(U,v),-s[1]),n(e(L,p),u[1]))),-o[2])),t(n(t(n(e(H,S),i[1]),t(n(e(U,v),-o[1]),n(e(T,h),u[1]))),s[2]),n(t(n(e(P,A),i[1]),t(n(e(L,p),-o[1]),n(e(T,h),s[1]))),-u[2]))),-l[3]),n(t(t(n(t(n(e(B,O),o[1]),t(n(e(F,M),-s[1]),n(e(P,A),l[1]))),i[2]),n(t(n(e(B,O),i[1]),t(n(e(z,d),-s[1]),n(e(L,p),l[1]))),-o[2])),t(n(t(n(e(F,M),i[1]),t(n(e(z,d),-o[1]),n(e(T,h),l[1]))),s[2]),n(t(n(e(P,A),i[1]),t(n(e(L,p),-o[1]),n(e(T,h),s[1]))),-l[2]))),u[3])),t(n(t(t(n(t(n(e(G,N),o[1]),t(n(e(H,S),-l[1]),n(e(F,M),u[1]))),a[2]),n(t(n(e(G,N),a[1]),t(n(e(V,_),-l[1]),n(e(R,b),u[1]))),-o[2])),t(n(t(n(e(H,S),a[1]),t(n(e(V,_),-o[1]),n(e(k,m),u[1]))),l[2]),n(t(n(e(F,M),a[1]),t(n(e(R,b),-o[1]),n(e(k,m),l[1]))),-u[2]))),i[3]),n(t(t(n(t(n(e(G,N),o[1]),t(n(e(H,S),-l[1]),n(e(F,M),u[1]))),i[2]),n(t(n(e(G,N),i[1]),t(n(e(U,v),-l[1]),n(e(z,d),u[1]))),-o[2])),t(n(t(n(e(H,S),i[1]),t(n(e(U,v),-o[1]),n(e(T,h),u[1]))),l[2]),n(t(n(e(F,M),i[1]),t(n(e(z,d),-o[1]),n(e(T,h),l[1]))),-u[2]))),-a[3])))),t(t(t(n(t(t(n(t(n(e(G,N),a[1]),t(n(e(V,_),-l[1]),n(e(R,b),u[1]))),i[2]),n(t(n(e(G,N),i[1]),t(n(e(U,v),-l[1]),n(e(z,d),u[1]))),-a[2])),t(n(t(n(e(V,_),i[1]),t(n(e(U,v),-a[1]),n(e(y,f),u[1]))),l[2]),n(t(n(e(R,b),i[1]),t(n(e(z,d),-a[1]),n(e(y,f),l[1]))),-u[2]))),o[3]),n(t(t(n(t(n(e(H,S),a[1]),t(n(e(V,_),-o[1]),n(e(k,m),u[1]))),i[2]),n(t(n(e(H,S),i[1]),t(n(e(U,v),-o[1]),n(e(T,h),u[1]))),-a[2])),t(n(t(n(e(V,_),i[1]),t(n(e(U,v),-a[1]),n(e(y,f),u[1]))),o[2]),n(t(n(e(k,m),i[1]),t(n(e(T,h),-a[1]),n(e(y,f),o[1]))),-u[2]))),-l[3])),t(n(t(t(n(t(n(e(F,M),a[1]),t(n(e(R,b),-o[1]),n(e(k,m),l[1]))),i[2]),n(t(n(e(F,M),i[1]),t(n(e(z,d),-o[1]),n(e(T,h),l[1]))),-a[2])),t(n(t(n(e(R,b),i[1]),t(n(e(z,d),-a[1]),n(e(y,f),l[1]))),o[2]),n(t(n(e(k,m),i[1]),t(n(e(T,h),-a[1]),n(e(y,f),o[1]))),-l[2]))),u[3]),n(t(t(n(t(n(e(B,O),o[1]),t(n(e(F,M),-s[1]),n(e(P,A),l[1]))),a[2]),n(t(n(e(B,O),a[1]),t(n(e(R,b),-s[1]),n(e(C,x),l[1]))),-o[2])),t(n(t(n(e(F,M),a[1]),t(n(e(R,b),-o[1]),n(e(k,m),l[1]))),s[2]),n(t(n(e(P,A),a[1]),t(n(e(C,x),-o[1]),n(e(k,m),s[1]))),-l[2]))),i[3]))),t(t(n(t(t(n(t(n(e(B,O),o[1]),t(n(e(F,M),-s[1]),n(e(P,A),l[1]))),i[2]),n(t(n(e(B,O),i[1]),t(n(e(z,d),-s[1]),n(e(L,p),l[1]))),-o[2])),t(n(t(n(e(F,M),i[1]),t(n(e(z,d),-o[1]),n(e(T,h),l[1]))),s[2]),n(t(n(e(P,A),i[1]),t(n(e(L,p),-o[1]),n(e(T,h),s[1]))),-l[2]))),-a[3]),n(t(t(n(t(n(e(B,O),a[1]),t(n(e(R,b),-s[1]),n(e(C,x),l[1]))),i[2]),n(t(n(e(B,O),i[1]),t(n(e(z,d),-s[1]),n(e(L,p),l[1]))),-a[2])),t(n(t(n(e(R,b),i[1]),t(n(e(z,d),-a[1]),n(e(y,f),l[1]))),s[2]),n(t(n(e(C,x),i[1]),t(n(e(L,p),-a[1]),n(e(y,f),s[1]))),-l[2]))),o[3])),t(n(t(t(n(t(n(e(F,M),a[1]),t(n(e(R,b),-o[1]),n(e(k,m),l[1]))),i[2]),n(t(n(e(F,M),i[1]),t(n(e(z,d),-o[1]),n(e(T,h),l[1]))),-a[2])),t(n(t(n(e(R,b),i[1]),t(n(e(z,d),-a[1]),n(e(y,f),l[1]))),o[2]),n(t(n(e(k,m),i[1]),t(n(e(T,h),-a[1]),n(e(y,f),o[1]))),-l[2]))),-s[3]),n(t(t(n(t(n(e(P,A),a[1]),t(n(e(C,x),-o[1]),n(e(k,m),s[1]))),i[2]),n(t(n(e(P,A),i[1]),t(n(e(L,p),-o[1]),n(e(T,h),s[1]))),-a[2])),t(n(t(n(e(C,x),i[1]),t(n(e(L,p),-a[1]),n(e(y,f),s[1]))),o[2]),n(t(n(e(k,m),i[1]),t(n(e(T,h),-a[1]),n(e(y,f),o[1]))),-s[2]))),l[3]))))),W=e(Z,Y);return W[W.length-1]}}var h=[function(){return 0},function(){return 0},function(){return 0}];function p(t){var e=h[t.length];return e||(e=h[t.length]=s(t.length)),e.apply(void 0,t)}function d(t,e,r,n,i,a,o,s){return function(e,r,l,u,c,f){switch(arguments.length){case 0:case 1:return 0;case 2:return n(e,r);case 3:return i(e,r,l);case 4:return a(e,r,l,u);case 5:return o(e,r,l,u,c);case 6:return s(e,r,l,u,c,f)}for(var h=new Array(arguments.length),p=0;p<arguments.length;++p)h[p]=arguments[p];return t(h)}}!function(){for(;h.length<=6;)h.push(s(h.length));t.exports=d.apply(void 0,[p].concat(h));for(var e=0;e<=6;++e)t.exports[e]=h[e]}()},6606:function(t,e,r){"use strict";var n=r(8167);function i(t){return(2===t?a:3===t?o:4===t?s:5===t?l:u)(t<6?n[t]:n)}function a(t){return function(e,r){return[t([[+r[0],+e[0][1]],[+r[1],+e[1][1]]]),t([[+e[0][0],+r[0]],[+e[1][0],+r[1]]]),t(e)]}}function o(t){return function(e,r){return[t([[+r[0],+e[0][1],+e[0][2]],[+r[1],+e[1][1],+e[1][2]],[+r[2],+e[2][1],+e[2][2]]]),t([[+e[0][0],+r[0],+e[0][2]],[+e[1][0],+r[1],+e[1][2]],[+e[2][0],+r[2],+e[2][2]]]),t([[+e[0][0],+e[0][1],+r[0]],[+e[1][0],+e[1][1],+r[1]],[+e[2][0],+e[2][1],+r[2]]]),t(e)]}}function s(t){return function(e,r){return[t([[+r[0],+e[0][1],+e[0][2],+e[0][3]],[+r[1],+e[1][1],+e[1][2],+e[1][3]],[+r[2],+e[2][1],+e[2][2],+e[2][3]],[+r[3],+e[3][1],+e[3][2],+e[3][3]]]),t([[+e[0][0],+r[0],+e[0][2],+e[0][3]],[+e[1][0],+r[1],+e[1][2],+e[1][3]],[+e[2][0],+r[2],+e[2][2],+e[2][3]],[+e[3][0],+r[3],+e[3][2],+e[3][3]]]),t([[+e[0][0],+e[0][1],+r[0],+e[0][3]],[+e[1][0],+e[1][1],+r[1],+e[1][3]],[+e[2][0],+e[2][1],+r[2],+e[2][3]],[+e[3][0],+e[3][1],+r[3],+e[3][3]]]),t([[+e[0][0],+e[0][1],+e[0][2],+r[0]],[+e[1][0],+e[1][1],+e[1][2],+r[1]],[+e[2][0],+e[2][1],+e[2][2],+r[2]],[+e[3][0],+e[3][1],+e[3][2],+r[3]]]),t(e)]}}function l(t){return function(e,r){return[t([[+r[0],+e[0][1],+e[0][2],+e[0][3],+e[0][4]],[+r[1],+e[1][1],+e[1][2],+e[1][3],+e[1][4]],[+r[2],+e[2][1],+e[2][2],+e[2][3],+e[2][4]],[+r[3],+e[3][1],+e[3][2],+e[3][3],+e[3][4]],[+r[4],+e[4][1],+e[4][2],+e[4][3],+e[4][4]]]),t([[+e[0][0],+r[0],+e[0][2],+e[0][3],+e[0][4]],[+e[1][0],+r[1],+e[1][2],+e[1][3],+e[1][4]],[+e[2][0],+r[2],+e[2][2],+e[2][3],+e[2][4]],[+e[3][0],+r[3],+e[3][2],+e[3][3],+e[3][4]],[+e[4][0],+r[4],+e[4][2],+e[4][3],+e[4][4]]]),t([[+e[0][0],+e[0][1],+r[0],+e[0][3],+e[0][4]],[+e[1][0],+e[1][1],+r[1],+e[1][3],+e[1][4]],[+e[2][0],+e[2][1],+r[2],+e[2][3],+e[2][4]],[+e[3][0],+e[3][1],+r[3],+e[3][3],+e[3][4]],[+e[4][0],+e[4][1],+r[4],+e[4][3],+e[4][4]]]),t([[+e[0][0],+e[0][1],+e[0][2],+r[0],+e[0][4]],[+e[1][0],+e[1][1],+e[1][2],+r[1],+e[1][4]],[+e[2][0],+e[2][1],+e[2][2],+r[2],+e[2][4]],[+e[3][0],+e[3][1],+e[3][2],+r[3],+e[3][4]],[+e[4][0],+e[4][1],+e[4][2],+r[4],+e[4][4]]]),t([[+e[0][0],+e[0][1],+e[0][2],+e[0][3],+r[0]],[+e[1][0],+e[1][1],+e[1][2],+e[1][3],+r[1]],[+e[2][0],+e[2][1],+e[2][2],+e[2][3],+r[2]],[+e[3][0],+e[3][1],+e[3][2],+e[3][3],+r[3]],[+e[4][0],+e[4][1],+e[4][2],+e[4][3],+r[4]]]),t(e)]}}function u(t){return function(e,r){return[t([[+r[0],+e[0][1],+e[0][2],+e[0][3],+e[0][4],+e[0][5]],[+r[1],+e[1][1],+e[1][2],+e[1][3],+e[1][4],+e[1][5]],[+r[2],+e[2][1],+e[2][2],+e[2][3],+e[2][4],+e[2][5]],[+r[3],+e[3][1],+e[3][2],+e[3][3],+e[3][4],+e[3][5]],[+r[4],+e[4][1],+e[4][2],+e[4][3],+e[4][4],+e[4][5]],[+r[5],+e[5][1],+e[5][2],+e[5][3],+e[5][4],+e[5][5]]]),t([[+e[0][0],+r[0],+e[0][2],+e[0][3],+e[0][4],+e[0][5]],[+e[1][0],+r[1],+e[1][2],+e[1][3],+e[1][4],+e[1][5]],[+e[2][0],+r[2],+e[2][2],+e[2][3],+e[2][4],+e[2][5]],[+e[3][0],+r[3],+e[3][2],+e[3][3],+e[3][4],+e[3][5]],[+e[4][0],+r[4],+e[4][2],+e[4][3],+e[4][4],+e[4][5]],[+e[5][0],+r[5],+e[5][2],+e[5][3],+e[5][4],+e[5][5]]]),t([[+e[0][0],+e[0][1],+r[0],+e[0][3],+e[0][4],+e[0][5]],[+e[1][0],+e[1][1],+r[1],+e[1][3],+e[1][4],+e[1][5]],[+e[2][0],+e[2][1],+r[2],+e[2][3],+e[2][4],+e[2][5]],[+e[3][0],+e[3][1],+r[3],+e[3][3],+e[3][4],+e[3][5]],[+e[4][0],+e[4][1],+r[4],+e[4][3],+e[4][4],+e[4][5]],[+e[5][0],+e[5][1],+r[5],+e[5][3],+e[5][4],+e[5][5]]]),t([[+e[0][0],+e[0][1],+e[0][2],+r[0],+e[0][4],+e[0][5]],[+e[1][0],+e[1][1],+e[1][2],+r[1],+e[1][4],+e[1][5]],[+e[2][0],+e[2][1],+e[2][2],+r[2],+e[2][4],+e[2][5]],[+e[3][0],+e[3][1],+e[3][2],+r[3],+e[3][4],+e[3][5]],[+e[4][0],+e[4][1],+e[4][2],+r[4],+e[4][4],+e[4][5]],[+e[5][0],+e[5][1],+e[5][2],+r[5],+e[5][4],+e[5][5]]]),t([[+e[0][0],+e[0][1],+e[0][2],+e[0][3],+r[0],+e[0][5]],[+e[1][0],+e[1][1],+e[1][2],+e[1][3],+r[1],+e[1][5]],[+e[2][0],+e[2][1],+e[2][2],+e[2][3],+r[2],+e[2][5]],[+e[3][0],+e[3][1],+e[3][2],+e[3][3],+r[3],+e[3][5]],[+e[4][0],+e[4][1],+e[4][2],+e[4][3],+r[4],+e[4][5]],[+e[5][0],+e[5][1],+e[5][2],+e[5][3],+r[5],+e[5][5]]]),t([[+e[0][0],+e[0][1],+e[0][2],+e[0][3],+e[0][4],+r[0]],[+e[1][0],+e[1][1],+e[1][2],+e[1][3],+e[1][4],+r[1]],[+e[2][0],+e[2][1],+e[2][2],+e[2][3],+e[2][4],+r[2]],[+e[3][0],+e[3][1],+e[3][2],+e[3][3],+e[3][4],+r[3]],[+e[4][0],+e[4][1],+e[4][2],+e[4][3],+e[4][4],+r[4]],[+e[5][0],+e[5][1],+e[5][2],+e[5][3],+e[5][4],+r[5]]]),t(e)]}}var c=[function(){return[[0]]},function(t,e){return[[e[0]],[t[0][0]]]}];function f(t,e,r,n,i,a,o,s){return function(l,u){switch(l.length){case 0:return t(l,u);case 1:return e(l,u);case 2:return r(l,u);case 3:return n(l,u);case 4:return i(l,u);case 5:return a(l,u)}var c=o[l.length];return c||(c=o[l.length]=s(l.length)),c(l,u)}}!function(){for(;c.length<6;)c.push(i(c.length));t.exports=f.apply(void 0,c.concat([c,i]));for(var e=0;e<6;++e)t.exports[e]=c[e]}()},417:function(t,e,r){"use strict";var n=r(9660),i=r(9662),a=r(8289),o=r(4078);function s(t,e,r,n){return function(r,i,a){var o=t(t(e(i[1],a[0]),e(-a[1],i[0])),t(e(r[1],i[0]),e(-i[1],r[0]))),s=t(e(r[1],a[0]),e(-a[1],r[0])),l=n(o,s);return l[l.length-1]}}function l(t,e,r,n){return function(i,a,o,s){var l=t(t(r(t(e(o[1],s[0]),e(-s[1],o[0])),a[2]),t(r(t(e(a[1],s[0]),e(-s[1],a[0])),-o[2]),r(t(e(a[1],o[0]),e(-o[1],a[0])),s[2]))),t(r(t(e(a[1],s[0]),e(-s[1],a[0])),i[2]),t(r(t(e(i[1],s[0]),e(-s[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),s[2])))),u=t(t(r(t(e(o[1],s[0]),e(-s[1],o[0])),i[2]),t(r(t(e(i[1],s[0]),e(-s[1],i[0])),-o[2]),r(t(e(i[1],o[0]),e(-o[1],i[0])),s[2]))),t(r(t(e(a[1],o[0]),e(-o[1],a[0])),i[2]),t(r(t(e(i[1],o[0]),e(-o[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),o[2])))),c=n(l,u);return c[c.length-1]}}function u(t,e,r,n){return function(i,a,o,s,l){var u=t(t(t(r(t(r(t(e(s[1],l[0]),e(-l[1],s[0])),o[2]),t(r(t(e(o[1],l[0]),e(-l[1],o[0])),-s[2]),r(t(e(o[1],s[0]),e(-s[1],o[0])),l[2]))),a[3]),t(r(t(r(t(e(s[1],l[0]),e(-l[1],s[0])),a[2]),t(r(t(e(a[1],l[0]),e(-l[1],a[0])),-s[2]),r(t(e(a[1],s[0]),e(-s[1],a[0])),l[2]))),-o[3]),r(t(r(t(e(o[1],l[0]),e(-l[1],o[0])),a[2]),t(r(t(e(a[1],l[0]),e(-l[1],a[0])),-o[2]),r(t(e(a[1],o[0]),e(-o[1],a[0])),l[2]))),s[3]))),t(r(t(r(t(e(o[1],s[0]),e(-s[1],o[0])),a[2]),t(r(t(e(a[1],s[0]),e(-s[1],a[0])),-o[2]),r(t(e(a[1],o[0]),e(-o[1],a[0])),s[2]))),-l[3]),t(r(t(r(t(e(s[1],l[0]),e(-l[1],s[0])),a[2]),t(r(t(e(a[1],l[0]),e(-l[1],a[0])),-s[2]),r(t(e(a[1],s[0]),e(-s[1],a[0])),l[2]))),i[3]),r(t(r(t(e(s[1],l[0]),e(-l[1],s[0])),i[2]),t(r(t(e(i[1],l[0]),e(-l[1],i[0])),-s[2]),r(t(e(i[1],s[0]),e(-s[1],i[0])),l[2]))),-a[3])))),t(t(r(t(r(t(e(a[1],l[0]),e(-l[1],a[0])),i[2]),t(r(t(e(i[1],l[0]),e(-l[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),l[2]))),s[3]),t(r(t(r(t(e(a[1],s[0]),e(-s[1],a[0])),i[2]),t(r(t(e(i[1],s[0]),e(-s[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),s[2]))),-l[3]),r(t(r(t(e(o[1],s[0]),e(-s[1],o[0])),a[2]),t(r(t(e(a[1],s[0]),e(-s[1],a[0])),-o[2]),r(t(e(a[1],o[0]),e(-o[1],a[0])),s[2]))),i[3]))),t(r(t(r(t(e(o[1],s[0]),e(-s[1],o[0])),i[2]),t(r(t(e(i[1],s[0]),e(-s[1],i[0])),-o[2]),r(t(e(i[1],o[0]),e(-o[1],i[0])),s[2]))),-a[3]),t(r(t(r(t(e(a[1],s[0]),e(-s[1],a[0])),i[2]),t(r(t(e(i[1],s[0]),e(-s[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),s[2]))),o[3]),r(t(r(t(e(a[1],o[0]),e(-o[1],a[0])),i[2]),t(r(t(e(i[1],o[0]),e(-o[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),o[2]))),-s[3]))))),c=t(t(t(r(t(r(t(e(s[1],l[0]),e(-l[1],s[0])),o[2]),t(r(t(e(o[1],l[0]),e(-l[1],o[0])),-s[2]),r(t(e(o[1],s[0]),e(-s[1],o[0])),l[2]))),i[3]),r(t(r(t(e(s[1],l[0]),e(-l[1],s[0])),i[2]),t(r(t(e(i[1],l[0]),e(-l[1],i[0])),-s[2]),r(t(e(i[1],s[0]),e(-s[1],i[0])),l[2]))),-o[3])),t(r(t(r(t(e(o[1],l[0]),e(-l[1],o[0])),i[2]),t(r(t(e(i[1],l[0]),e(-l[1],i[0])),-o[2]),r(t(e(i[1],o[0]),e(-o[1],i[0])),l[2]))),s[3]),r(t(r(t(e(o[1],s[0]),e(-s[1],o[0])),i[2]),t(r(t(e(i[1],s[0]),e(-s[1],i[0])),-o[2]),r(t(e(i[1],o[0]),e(-o[1],i[0])),s[2]))),-l[3]))),t(t(r(t(r(t(e(o[1],l[0]),e(-l[1],o[0])),a[2]),t(r(t(e(a[1],l[0]),e(-l[1],a[0])),-o[2]),r(t(e(a[1],o[0]),e(-o[1],a[0])),l[2]))),i[3]),r(t(r(t(e(o[1],l[0]),e(-l[1],o[0])),i[2]),t(r(t(e(i[1],l[0]),e(-l[1],i[0])),-o[2]),r(t(e(i[1],o[0]),e(-o[1],i[0])),l[2]))),-a[3])),t(r(t(r(t(e(a[1],l[0]),e(-l[1],a[0])),i[2]),t(r(t(e(i[1],l[0]),e(-l[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),l[2]))),o[3]),r(t(r(t(e(a[1],o[0]),e(-o[1],a[0])),i[2]),t(r(t(e(i[1],o[0]),e(-o[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),o[2]))),-l[3])))),f=n(u,c);return f[f.length-1]}}function c(t){return(3===t?s:4===t?l:u)(i,n,a,o)}var f=c(3),h=c(4),p=[function(){return 0},function(){return 0},function(t,e){return e[0]-t[0]},function(t,e,r){var n,i=(t[1]-r[1])*(e[0]-r[0]),a=(t[0]-r[0])*(e[1]-r[1]),o=i-a;if(i>0){if(a<=0)return o;n=i+a}else{if(!(i<0))return o;if(a>=0)return o;n=-(i+a)}var s=33306690738754716e-32*n;return o>=s||o<=-s?o:f(t,e,r)},function(t,e,r,n){var i=t[0]-n[0],a=e[0]-n[0],o=r[0]-n[0],s=t[1]-n[1],l=e[1]-n[1],u=r[1]-n[1],c=t[2]-n[2],f=e[2]-n[2],p=r[2]-n[2],d=a*u,v=o*l,g=o*s,y=i*u,m=i*l,x=a*s,b=c*(d-v)+f*(g-y)+p*(m-x),_=7771561172376103e-31*((Math.abs(d)+Math.abs(v))*Math.abs(c)+(Math.abs(g)+Math.abs(y))*Math.abs(f)+(Math.abs(m)+Math.abs(x))*Math.abs(p));return b>_||-b>_?b:h(t,e,r,n)}];function d(t){var e=p[t.length];return e||(e=p[t.length]=c(t.length)),e.apply(void 0,t)}function v(t,e,r,n,i,a,o){return function(e,r,s,l,u){switch(arguments.length){case 0:case 1:return 0;case 2:return n(e,r);case 3:return i(e,r,s);case 4:return a(e,r,s,l);case 5:return o(e,r,s,l,u)}for(var c=new Array(arguments.length),f=0;f<arguments.length;++f)c[f]=arguments[f];return t(c)}}!function(){for(;p.length<=5;)p.push(c(p.length));t.exports=v.apply(void 0,[d].concat(p));for(var e=0;e<=5;++e)t.exports[e]=p[e]}()},2019:function(t,e,r){"use strict";var n=r(9662),i=r(8289);t.exports=function(t,e){if(1===t.length)return i(e,t[0]);if(1===e.length)return i(t,e[0]);if(0===t.length||0===e.length)return[0];var r=[0];if(t.length<e.length)for(var a=0;a<t.length;++a)r=n(r,i(e,t[a]));else for(a=0;a<e.length;++a)r=n(r,i(t,e[a]));return r}},8289:function(t,e,r){"use strict";var n=r(9660),i=r(87);t.exports=function(t,e){var r=t.length;if(1===r){var a=n(t[0],e);return a[0]?a:[a[1]]}var o=new Array(2*r),s=[.1,.1],l=[.1,.1],u=0;n(t[0],e,s),s[0]&&(o[u++]=s[0]);for(var c=1;c<r;++c){n(t[c],e,l);var f=s[1];i(f,l[0],s),s[0]&&(o[u++]=s[0]);var h=l[1],p=s[1],d=h+p,v=p-(d-h);s[1]=d,v&&(o[u++]=v)}return s[1]&&(o[u++]=s[1]),0===u&&(o[u++]=0),o.length=u,o}},4434:function(t,e,r){"use strict";t.exports=function(t,e,r,i){var a=n(t,r,i),o=n(e,r,i);if(a>0&&o>0||a<0&&o<0)return!1;var s=n(r,t,e),l=n(i,t,e);return!(s>0&&l>0||s<0&&l<0)&&(0!==a||0!==o||0!==s||0!==l||function(t,e,r,n){for(var i=0;i<2;++i){var a=t[i],o=e[i],s=Math.min(a,o),l=Math.max(a,o),u=r[i],c=n[i],f=Math.min(u,c);if(Math.max(u,c)<s||l<f)return!1}return!0}(t,e,r,i))};var n=r(417)[3]},4078:function(t){"use strict";t.exports=function(t,e){var r=0|t.length,n=0|e.length;if(1===r&&1===n)return function(t,e){var r=t+e,n=r-t,i=t-(r-n)+(e-n);return i?[i,r]:[r]}(t[0],-e[0]);var i,a,o=new Array(r+n),s=0,l=0,u=0,c=Math.abs,f=t[l],h=c(f),p=-e[u],d=c(p);h<d?(a=f,(l+=1)<r&&(h=c(f=t[l]))):(a=p,(u+=1)<n&&(d=c(p=-e[u]))),l<r&&h<d||u>=n?(i=f,(l+=1)<r&&(h=c(f=t[l]))):(i=p,(u+=1)<n&&(d=c(p=-e[u])));for(var v,g,y=i+a,m=y-i,x=a-m,b=x,_=y;l<r&&u<n;)h<d?(i=f,(l+=1)<r&&(h=c(f=t[l]))):(i=p,(u+=1)<n&&(d=c(p=-e[u]))),(x=(a=b)-(m=(y=i+a)-i))&&(o[s++]=x),b=_-((v=_+y)-(g=v-_))+(y-g),_=v;for(;l<r;)(x=(a=b)-(m=(y=(i=f)+a)-i))&&(o[s++]=x),b=_-((v=_+y)-(g=v-_))+(y-g),_=v,(l+=1)<r&&(f=t[l]);for(;u<n;)(x=(a=b)-(m=(y=(i=p)+a)-i))&&(o[s++]=x),b=_-((v=_+y)-(g=v-_))+(y-g),_=v,(u+=1)<n&&(p=-e[u]);return b&&(o[s++]=b),_&&(o[s++]=_),s||(o[s++]=0),o.length=s,o}},9662:function(t){"use strict";t.exports=function(t,e){var r=0|t.length,n=0|e.length;if(1===r&&1===n)return function(t,e){var r=t+e,n=r-t,i=t-(r-n)+(e-n);return i?[i,r]:[r]}(t[0],e[0]);var i,a,o=new Array(r+n),s=0,l=0,u=0,c=Math.abs,f=t[l],h=c(f),p=e[u],d=c(p);h<d?(a=f,(l+=1)<r&&(h=c(f=t[l]))):(a=p,(u+=1)<n&&(d=c(p=e[u]))),l<r&&h<d||u>=n?(i=f,(l+=1)<r&&(h=c(f=t[l]))):(i=p,(u+=1)<n&&(d=c(p=e[u])));for(var v,g,y=i+a,m=y-i,x=a-m,b=x,_=y;l<r&&u<n;)h<d?(i=f,(l+=1)<r&&(h=c(f=t[l]))):(i=p,(u+=1)<n&&(d=c(p=e[u]))),(x=(a=b)-(m=(y=i+a)-i))&&(o[s++]=x),b=_-((v=_+y)-(g=v-_))+(y-g),_=v;for(;l<r;)(x=(a=b)-(m=(y=(i=f)+a)-i))&&(o[s++]=x),b=_-((v=_+y)-(g=v-_))+(y-g),_=v,(l+=1)<r&&(f=t[l]);for(;u<n;)(x=(a=b)-(m=(y=(i=p)+a)-i))&&(o[s++]=x),b=_-((v=_+y)-(g=v-_))+(y-g),_=v,(u+=1)<n&&(p=e[u]);return b&&(o[s++]=b),_&&(o[s++]=_),s||(o[s++]=0),o.length=s,o}},8691:function(t,e,r){"use strict";t.exports=function(t){return i(n(t))};var n=r(2692),i=r(7037)},7212:function(t,e,r){"use strict";t.exports=function(t,e,r,s){if(r=r||0,void 0===s&&(s=function(t){for(var e=t.length,r=0,n=0;n<e;++n)r=0|Math.max(r,t[n].length);return r-1}(t)),0===t.length||s<1)return{cells:[],vertexIds:[],vertexWeights:[]};var l=function(t,e){for(var r=t.length,n=i.mallocUint8(r),a=0;a<r;++a)n[a]=t[a]<e|0;return n}(e,+r),u=function(t,e){for(var r=t.length,o=e*(e+1)/2*r|0,s=i.mallocUint32(2*o),l=0,u=0;u<r;++u)for(var c=t[u],f=(e=c.length,0);f<e;++f)for(var h=0;h<f;++h){var p=c[h],d=c[f];s[l++]=0|Math.min(p,d),s[l++]=0|Math.max(p,d)}a(n(s,[l/2|0,2]));var v=2;for(u=2;u<l;u+=2)s[u-2]===s[u]&&s[u-1]===s[u+1]||(s[v++]=s[u],s[v++]=s[u+1]);return n(s,[v/2|0,2])}(t,s),c=function(t,e,r,a){for(var o=t.data,s=t.shape[0],l=i.mallocDouble(s),u=0,c=0;c<s;++c){var f=o[2*c],h=o[2*c+1];if(r[f]!==r[h]){var p=e[f],d=e[h];o[2*u]=f,o[2*u+1]=h,l[u++]=(d-a)/(d-p)}}return t.shape[0]=u,n(l,[u])}(u,e,l,+r),f=function(t,e){var r=i.mallocInt32(2*e),n=t.shape[0],a=t.data;r[0]=0;for(var o=0,s=0;s<n;++s){var l=a[2*s];if(l!==o){for(r[2*o+1]=s;++o<l;)r[2*o]=s,r[2*o+1]=s;r[2*o]=s}}for(r[2*o+1]=n;++o<e;)r[2*o]=r[2*o+1]=n;return r}(u,0|e.length),h=o(s)(t,u.data,f,l),p=function(t){for(var e=0|t.shape[0],r=t.data,n=new Array(e),i=0;i<e;++i)n[i]=[r[2*i],r[2*i+1]];return n}(u),d=[].slice.call(c.data,0,c.shape[0]);return i.free(l),i.free(u.data),i.free(c.data),i.free(f),{cells:h,vertexIds:p,vertexWeights:d}};var n=r(5050),i=r(5306),a=r(8729),o=r(1168)},1168:function(t){"use strict";t.exports=function(t){return e[t]()};var e=[function(){return function(t,e,r,n){for(var i=t.length,a=0;a<i;++a)t[a].length;return[]}},function(){function t(t,e,r,n){for(var i=0|Math.min(r,n),a=0|Math.max(r,n),o=t[2*i],s=t[2*i+1];o<s;){var l=o+s>>1,u=e[2*l+1];if(u===a)return l;a<u?s=l:o=l+1}return o}return function(e,r,n,i){for(var a=e.length,o=[],s=0;s<a;++s){var l=e[s];if(2===l.length){var u=(i[l[0]]<<0)+(i[l[1]]<<1);if(0===u||3===u)continue;switch(u){case 0:case 3:break;case 1:o.push([t(n,r,l[0],l[1])]);break;case 2:o.push([t(n,r,l[1],l[0])])}}}return o}},function(){function t(t,e,r,n){for(var i=0|Math.min(r,n),a=0|Math.max(r,n),o=t[2*i],s=t[2*i+1];o<s;){var l=o+s>>1,u=e[2*l+1];if(u===a)return l;a<u?s=l:o=l+1}return o}return function(e,r,n,i){for(var a=e.length,o=[],s=0;s<a;++s){var l=e[s],u=l.length;if(3===u){if(0==(c=(i[l[0]]<<0)+(i[l[1]]<<1)+(i[l[2]]<<2))||7===c)continue;switch(c){case 0:case 7:break;case 1:o.push([t(n,r,l[0],l[2]),t(n,r,l[0],l[1])]);break;case 2:o.push([t(n,r,l[1],l[0]),t(n,r,l[1],l[2])]);break;case 3:o.push([t(n,r,l[0],l[2]),t(n,r,l[1],l[2])]);break;case 4:o.push([t(n,r,l[2],l[1]),t(n,r,l[2],l[0])]);break;case 5:o.push([t(n,r,l[2],l[1]),t(n,r,l[0],l[1])]);break;case 6:o.push([t(n,r,l[1],l[0]),t(n,r,l[2],l[0])])}}else if(2===u){var c;if(0==(c=(i[l[0]]<<0)+(i[l[1]]<<1))||3===c)continue;switch(c){case 0:case 3:break;case 1:o.push([t(n,r,l[0],l[1])]);break;case 2:o.push([t(n,r,l[1],l[0])])}}}return o}},function(){function t(t,e,r,n){for(var i=0|Math.min(r,n),a=0|Math.max(r,n),o=t[2*i],s=t[2*i+1];o<s;){var l=o+s>>1,u=e[2*l+1];if(u===a)return l;a<u?s=l:o=l+1}return o}return function(e,r,n,i){for(var a=e.length,o=[],s=0;s<a;++s){var l=e[s],u=l.length;if(4===u){if(0==(c=(i[l[0]]<<0)+(i[l[1]]<<1)+(i[l[2]]<<2)+(i[l[3]]<<3))||15===c)continue;switch(c){case 0:case 15:break;case 1:o.push([t(n,r,l[0],l[1]),t(n,r,l[0],l[2]),t(n,r,l[0],l[3])]);break;case 2:o.push([t(n,r,l[1],l[2]),t(n,r,l[1],l[0]),t(n,r,l[1],l[3])]);break;case 3:o.push([t(n,r,l[1],l[2]),t(n,r,l[0],l[2]),t(n,r,l[0],l[3])],[t(n,r,l[1],l[3]),t(n,r,l[1],l[2]),t(n,r,l[0],l[3])]);break;case 4:o.push([t(n,r,l[2],l[0]),t(n,r,l[2],l[1]),t(n,r,l[2],l[3])]);break;case 5:o.push([t(n,r,l[0],l[1]),t(n,r,l[2],l[1]),t(n,r,l[0],l[3])],[t(n,r,l[2],l[1]),t(n,r,l[2],l[3]),t(n,r,l[0],l[3])]);break;case 6:o.push([t(n,r,l[2],l[0]),t(n,r,l[1],l[0]),t(n,r,l[1],l[3])],[t(n,r,l[2],l[3]),t(n,r,l[2],l[0]),t(n,r,l[1],l[3])]);break;case 7:o.push([t(n,r,l[0],l[3]),t(n,r,l[1],l[3]),t(n,r,l[2],l[3])]);break;case 8:o.push([t(n,r,l[3],l[1]),t(n,r,l[3],l[0]),t(n,r,l[3],l[2])]);break;case 9:o.push([t(n,r,l[3],l[1]),t(n,r,l[0],l[1]),t(n,r,l[0],l[2])],[t(n,r,l[3],l[2]),t(n,r,l[3],l[1]),t(n,r,l[0],l[2])]);break;case 10:o.push([t(n,r,l[1],l[0]),t(n,r,l[3],l[0]),t(n,r,l[1],l[2])],[t(n,r,l[3],l[0]),t(n,r,l[3],l[2]),t(n,r,l[1],l[2])]);break;case 11:o.push([t(n,r,l[1],l[2]),t(n,r,l[0],l[2]),t(n,r,l[3],l[2])]);break;case 12:o.push([t(n,r,l[3],l[0]),t(n,r,l[2],l[0]),t(n,r,l[2],l[1])],[t(n,r,l[3],l[1]),t(n,r,l[3],l[0]),t(n,r,l[2],l[1])]);break;case 13:o.push([t(n,r,l[0],l[1]),t(n,r,l[2],l[1]),t(n,r,l[3],l[1])]);break;case 14:o.push([t(n,r,l[2],l[0]),t(n,r,l[1],l[0]),t(n,r,l[3],l[0])])}}else if(3===u){if(0==(c=(i[l[0]]<<0)+(i[l[1]]<<1)+(i[l[2]]<<2))||7===c)continue;switch(c){case 0:case 7:break;case 1:o.push([t(n,r,l[0],l[2]),t(n,r,l[0],l[1])]);break;case 2:o.push([t(n,r,l[1],l[0]),t(n,r,l[1],l[2])]);break;case 3:o.push([t(n,r,l[0],l[2]),t(n,r,l[1],l[2])]);break;case 4:o.push([t(n,r,l[2],l[1]),t(n,r,l[2],l[0])]);break;case 5:o.push([t(n,r,l[2],l[1]),t(n,r,l[0],l[1])]);break;case 6:o.push([t(n,r,l[1],l[0]),t(n,r,l[2],l[0])])}}else if(2===u){var c;if(0==(c=(i[l[0]]<<0)+(i[l[1]]<<1))||3===c)continue;switch(c){case 0:case 3:break;case 1:o.push([t(n,r,l[0],l[1])]);break;case 2:o.push([t(n,r,l[1],l[0])])}}}return o}}]},8211:function(t,e,r){"use strict";r(2288),r(1731),e.H=function(t,e){var r=t.length,n=t.length-e.length,i=Math.min;if(n)return n;switch(r){case 0:return 0;case 1:return t[0]-e[0];case 2:return(s=t[0]+t[1]-e[0]-e[1])||i(t[0],t[1])-i(e[0],e[1]);case 3:var a=t[0]+t[1],o=e[0]+e[1];if(s=a+t[2]-(o+e[2]))return s;var s,l=i(t[0],t[1]),u=i(e[0],e[1]);return(s=i(l,t[2])-i(u,e[2]))||i(l+t[2],a)-i(u+e[2],o);default:var c=t.slice(0);c.sort();var f=e.slice(0);f.sort();for(var h=0;h<r;++h)if(n=c[h]-f[h])return n;return 0}}},9392:function(t,e){"use strict";function r(t){var e=32;return(t&=-t)&&e--,65535&t&&(e-=16),16711935&t&&(e-=8),252645135&t&&(e-=4),858993459&t&&(e-=2),1431655765&t&&(e-=1),e}e.INT_BITS=32,e.INT_MAX=2147483647,e.INT_MIN=-1<<31,e.sign=function(t){return(t>0)-(t<0)},e.abs=function(t){var e=t>>31;return(t^e)-e},e.min=function(t,e){return e^(t^e)&-(t<e)},e.max=function(t,e){return t^(t^e)&-(t<e)},e.isPow2=function(t){return!(t&t-1||!t)},e.log2=function(t){var e,r;return e=(t>65535)<<4,e|=r=((t>>>=e)>255)<<3,e|=r=((t>>>=r)>15)<<2,(e|=r=((t>>>=r)>3)<<1)|(t>>>=r)>>1},e.log10=function(t){return t>=1e9?9:t>=1e8?8:t>=1e7?7:t>=1e6?6:t>=1e5?5:t>=1e4?4:t>=1e3?3:t>=100?2:t>=10?1:0},e.popCount=function(t){return 16843009*((t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135)>>>24},e.countTrailingZeros=r,e.nextPow2=function(t){return t+=0===t,--t,t|=t>>>1,t|=t>>>2,t|=t>>>4,1+((t|=t>>>8)|t>>>16)},e.prevPow2=function(t){return t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)-(t>>>1)},e.parity=function(t){return t^=t>>>16,t^=t>>>8,t^=t>>>4,27030>>>(t&=15)&1};var n=new Array(256);!function(t){for(var e=0;e<256;++e){var r=e,n=e,i=7;for(r>>>=1;r;r>>>=1)n<<=1,n|=1&r,--i;t[e]=n<<i&255}}(n),e.reverse=function(t){return n[255&t]<<24|n[t>>>8&255]<<16|n[t>>>16&255]<<8|n[t>>>24&255]},e.interleave2=function(t,e){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t&=65535)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e&=65535)|e<<8))|e<<4))|e<<2))|e<<1))<<1},e.deinterleave2=function(t,e){return(t=65535&((t=16711935&((t=252645135&((t=858993459&((t=t>>>e&1431655765)|t>>>1))|t>>>2))|t>>>4))|t>>>16))<<16>>16},e.interleave3=function(t,e,r){return t=1227133513&((t=3272356035&((t=251719695&((t=4278190335&((t&=1023)|t<<16))|t<<8))|t<<4))|t<<2),(t|=(e=1227133513&((e=3272356035&((e=251719695&((e=4278190335&((e&=1023)|e<<16))|e<<8))|e<<4))|e<<2))<<1)|(r=1227133513&((r=3272356035&((r=251719695&((r=4278190335&((r&=1023)|r<<16))|r<<8))|r<<4))|r<<2))<<2},e.deinterleave3=function(t,e){return(t=1023&((t=4278190335&((t=251719695&((t=3272356035&((t=t>>>e&1227133513)|t>>>2))|t>>>4))|t>>>8))|t>>>16))<<22>>22},e.nextCombination=function(t){var e=t|t-1;return e+1|(~e&-~e)-1>>>r(t)+1}},6656:function(t,e,r){"use strict";var n=r(9392),i=r(9521);function a(t,e){var r=t.length,n=t.length-e.length,i=Math.min;if(n)return n;switch(r){case 0:return 0;case 1:return t[0]-e[0];case 2:return(s=t[0]+t[1]-e[0]-e[1])||i(t[0],t[1])-i(e[0],e[1]);case 3:var a=t[0]+t[1],o=e[0]+e[1];if(s=a+t[2]-(o+e[2]))return s;var s,l=i(t[0],t[1]),u=i(e[0],e[1]);return(s=i(l,t[2])-i(u,e[2]))||i(l+t[2],a)-i(u+e[2],o);default:var c=t.slice(0);c.sort();var f=e.slice(0);f.sort();for(var h=0;h<r;++h)if(n=c[h]-f[h])return n;return 0}}function o(t,e){return a(t[0],e[0])}function s(t,e){if(e){for(var r=t.length,n=new Array(r),i=0;i<r;++i)n[i]=[t[i],e[i]];for(n.sort(o),i=0;i<r;++i)t[i]=n[i][0],e[i]=n[i][1];return t}return t.sort(a),t}function l(t){if(0===t.length)return[];for(var e=1,r=t.length,n=1;n<r;++n){var i=t[n];if(a(i,t[n-1])){if(n===e){e++;continue}t[e++]=i}}return t.length=e,t}function u(t,e){for(var r=0,n=t.length-1,i=-1;r<=n;){var o=r+n>>1,s=a(t[o],e);s<=0?(0===s&&(i=o),r=o+1):s>0&&(n=o-1)}return i}function c(t,e){for(var r=new Array(t.length),i=0,o=r.length;i<o;++i)r[i]=[];for(var s=[],l=(i=0,e.length);i<l;++i)for(var c=e[i],f=c.length,h=1,p=1<<f;h<p;++h){s.length=n.popCount(h);for(var d=0,v=0;v<f;++v)h&1<<v&&(s[d++]=c[v]);var g=u(t,s);if(!(g<0))for(;r[g++].push(i),!(g>=t.length||0!==a(t[g],s)););}return r}function f(t,e){if(e<0)return[];for(var r=[],i=(1<<e+1)-1,a=0;a<t.length;++a)for(var o=t[a],l=i;l<1<<o.length;l=n.nextCombination(l)){for(var u=new Array(e+1),c=0,f=0;f<o.length;++f)l&1<<f&&(u[c++]=o[f]);r.push(u)}return s(r)}e.dimension=function(t){for(var e=0,r=Math.max,n=0,i=t.length;n<i;++n)e=r(e,t[n].length);return e-1},e.countVertices=function(t){for(var e=-1,r=Math.max,n=0,i=t.length;n<i;++n)for(var a=t[n],o=0,s=a.length;o<s;++o)e=r(e,a[o]);return e+1},e.cloneCells=function(t){for(var e=new Array(t.length),r=0,n=t.length;r<n;++r)e[r]=t[r].slice(0);return e},e.compareCells=a,e.normalize=s,e.unique=l,e.findCell=u,e.incidence=c,e.dual=function(t,e){if(!e)return c(l(f(t,0)),t);for(var r=new Array(e),n=0;n<e;++n)r[n]=[];n=0;for(var i=t.length;n<i;++n)for(var a=t[n],o=0,s=a.length;o<s;++o)r[a[o]].push(n);return r},e.explode=function(t){for(var e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0|i.length,o=1,l=1<<a;o<l;++o){for(var u=[],c=0;c<a;++c)o>>>c&1&&u.push(i[c]);e.push(u)}return s(e)},e.skeleton=f,e.boundary=function(t){for(var e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0,o=i.length;a<o;++a){for(var l=new Array(i.length-1),u=0,c=0;u<o;++u)u!==a&&(l[c++]=i[u]);e.push(l)}return s(e)},e.connectedComponents=function(t,e){return e?function(t,e){for(var r=new i(e),n=0;n<t.length;++n)for(var a=t[n],o=0;o<a.length;++o)for(var s=o+1;s<a.length;++s)r.link(a[o],a[s]);var l=[],u=r.ranks;for(n=0;n<u.length;++n)u[n]=-1;for(n=0;n<t.length;++n){var c=r.find(t[n][0]);u[c]<0?(u[c]=l.length,l.push([t[n].slice(0)])):l[u[c]].push(t[n].slice(0))}return l}(t,e):function(t){for(var e=l(s(f(t,0))),r=new i(e.length),n=0;n<t.length;++n)for(var a=t[n],o=0;o<a.length;++o)for(var c=u(e,[a[o]]),h=o+1;h<a.length;++h)r.link(c,u(e,[a[h]]));var p=[],d=r.ranks;for(n=0;n<d.length;++n)d[n]=-1;for(n=0;n<t.length;++n){var v=r.find(u(e,[t[n][0]]));d[v]<0?(d[v]=p.length,p.push([t[n].slice(0)])):p[d[v]].push(t[n].slice(0))}return p}(t)}},9521:function(t){"use strict";function e(t){this.roots=new Array(t),this.ranks=new Array(t);for(var e=0;e<t;++e)this.roots[e]=e,this.ranks[e]=0}t.exports=e,e.prototype.length=function(){return this.roots.length},e.prototype.makeSet=function(){var t=this.roots.length;return this.roots.push(t),this.ranks.push(0),t},e.prototype.find=function(t){for(var e=this.roots;e[t]!==t;){var r=e[t];e[t]=e[r],t=r}return t},e.prototype.link=function(t,e){var r=this.find(t),n=this.find(e);if(r!==n){var i=this.ranks,a=this.roots,o=i[r],s=i[n];o<s?a[r]=n:s<o?a[n]=r:(a[n]=r,++i[r])}}},8243:function(t,e,r){"use strict";t.exports=function(t,e,r){for(var a=e.length,o=t.length,s=new Array(a),l=new Array(a),u=new Array(a),c=new Array(a),f=0;f<a;++f)s[f]=l[f]=-1,u[f]=1/0,c[f]=!1;for(f=0;f<o;++f){var h=t[f];if(2!==h.length)throw new Error("Input must be a graph");var p=h[1],d=h[0];-1!==l[d]?l[d]=-2:l[d]=p,-1!==s[p]?s[p]=-2:s[p]=d}function v(t){if(c[t])return 1/0;var r,i,a,o=s[t],u=l[t];return o<0||u<0?1/0:(r=e[t],i=e[o],a=e[u],Math.abs(n(r,i,a))/Math.sqrt(Math.pow(i[0]-a[0],2)+Math.pow(i[1]-a[1],2)))}function g(t,e){var r=k[t],n=k[e];k[t]=n,k[e]=r,A[r]=e,A[n]=t}function y(t){return u[k[t]]}function m(t){return 1&t?t-1>>1:(t>>1)-1}function x(t){for(var e=y(t);;){var r=e,n=2*t+1,i=2*(t+1),a=t;if(n<M){var o=y(n);o<r&&(a=n,r=o)}if(i<M&&y(i)<r&&(a=i),a===t)return t;g(t,a),t=a}}function b(t){for(var e=y(t);t>0;){var r=m(t);if(!(r>=0&&e<y(r)))return t;g(t,r),t=r}}function _(){if(M>0){var t=k[0];return g(0,M-1),M-=1,x(0),t}return-1}function w(t,e){var r=k[t];return u[r]===e?t:(u[r]=-1/0,b(t),_(),u[r]=e,b((M+=1)-1))}function T(t){if(!c[t]){c[t]=!0;var e=s[t],r=l[t];s[r]>=0&&(s[r]=e),l[e]>=0&&(l[e]=r),A[e]>=0&&w(A[e],v(e)),A[r]>=0&&w(A[r],v(r))}}var k=[],A=new Array(a);for(f=0;f<a;++f)(u[f]=v(f))<1/0?(A[f]=k.length,k.push(f)):A[f]=-1;var M=k.length;for(f=M>>1;f>=0;--f)x(f);for(;;){var S=_();if(S<0||u[S]>r)break;T(S)}var E=[];for(f=0;f<a;++f)c[f]||(A[f]=E.length,E.push(e[f].slice()));function L(t,e){if(t[e]<0)return e;var r=e,n=e;do{var i=t[n];if(!c[n]||i<0||i===n)break;if(i=t[n=i],!c[n]||i<0||i===n)break;n=i,r=t[r]}while(r!==n);for(var a=e;a!==n;a=t[a])t[a]=n;return n}E.length;var C=[];return t.forEach((function(t){var e=L(s,t[0]),r=L(l,t[1]);if(e>=0&&r>=0&&e!==r){var n=A[e],i=A[r];n!==i&&C.push([n,i])}})),i.unique(i.normalize(C)),{positions:E,edges:C}};var n=r(417),i=r(6656)},6638:function(t,e,r){"use strict";t.exports=function(t,e){var r,a,o,s;if(e[0][0]<e[1][0])r=e[0],a=e[1];else{if(!(e[0][0]>e[1][0]))return i(e,t);r=e[1],a=e[0]}if(t[0][0]<t[1][0])o=t[0],s=t[1];else{if(!(t[0][0]>t[1][0]))return-i(t,e);o=t[1],s=t[0]}var l=n(r,a,s),u=n(r,a,o);if(l<0){if(u<=0)return l}else if(l>0){if(u>=0)return l}else if(u)return u;if(l=n(s,o,a),u=n(s,o,r),l<0){if(u<=0)return l}else if(l>0){if(u>=0)return l}else if(u)return u;return a[0]-s[0]};var n=r(417);function i(t,e){var r,i,a,o;if(e[0][0]<e[1][0])r=e[0],i=e[1];else{if(!(e[0][0]>e[1][0])){var s=Math.min(t[0][1],t[1][1]),l=Math.max(t[0][1],t[1][1]),u=Math.min(e[0][1],e[1][1]),c=Math.max(e[0][1],e[1][1]);return l<u?l-u:s>c?s-c:l-c}r=e[1],i=e[0]}t[0][1]<t[1][1]?(a=t[0],o=t[1]):(a=t[1],o=t[0]);var f=n(i,r,a);return f||(f=n(i,r,o))||o-i}},4385:function(t,e,r){"use strict";t.exports=function(t){for(var e=t.length,r=2*e,n=new Array(r),a=0;a<e;++a){var l=t[a],u=l[0][0]<l[1][0];n[2*a]=new f(l[0][0],l,u,a),n[2*a+1]=new f(l[1][0],l,!u,a)}n.sort((function(t,e){var r=t.x-e.x;return r||(r=t.create-e.create)||Math.min(t.segment[0][1],t.segment[1][1])-Math.min(e.segment[0][1],e.segment[1][1])}));var h=i(o),p=[],d=[],v=[];for(a=0;a<r;){for(var g=n[a].x,y=[];a<r;){var m=n[a];if(m.x!==g)break;a+=1,m.segment[0][0]===m.x&&m.segment[1][0]===m.x?m.create&&(m.segment[0][1]<m.segment[1][1]?(y.push(new c(m.segment[0][1],m.index,!0,!0)),y.push(new c(m.segment[1][1],m.index,!1,!1))):(y.push(new c(m.segment[1][1],m.index,!0,!1)),y.push(new c(m.segment[0][1],m.index,!1,!0)))):h=m.create?h.insert(m.segment,m.index):h.remove(m.segment)}p.push(h.root),d.push(g),v.push(y)}return new s(p,d,v)};var n=r(5070),i=r(7080),a=r(417),o=r(6638);function s(t,e,r){this.slabs=t,this.coordinates=e,this.horizontal=r}function l(t,e){return t.y-e}function u(t,e){for(var r=null;t;){var n,i,o=t.key;o[0][0]<o[1][0]?(n=o[0],i=o[1]):(n=o[1],i=o[0]);var s=a(n,i,e);if(s<0)t=t.left;else if(s>0)if(e[0]!==o[1][0])r=t,t=t.right;else{if(l=u(t.right,e))return l;t=t.left}else{if(e[0]!==o[1][0])return t;var l;if(l=u(t.right,e))return l;t=t.left}}return r}function c(t,e,r,n){this.y=t,this.index=e,this.start=r,this.closed=n}function f(t,e,r,n){this.x=t,this.segment=e,this.create=r,this.index=n}s.prototype.castUp=function(t){var e=n.le(this.coordinates,t[0]);if(e<0)return-1;this.slabs[e];var r=u(this.slabs[e],t),i=-1;if(r&&(i=r.value),this.coordinates[e]===t[0]){var s=null;if(r&&(s=r.key),e>0){var c=u(this.slabs[e-1],t);c&&(s?o(c.key,s)>0&&(s=c.key,i=c.value):(i=c.value,s=c.key))}var f=this.horizontal[e];if(f.length>0){var h=n.ge(f,t[1],l);if(h<f.length){var p=f[h];if(t[1]===p.y){if(p.closed)return p.index;for(;h<f.length-1&&f[h+1].y===t[1];)if((p=f[h+=1]).closed)return p.index;if(p.y===t[1]&&!p.start){if((h+=1)>=f.length)return i;p=f[h]}}if(p.start)if(s){var d=a(s[0],s[1],[t[0],p.y]);s[0][0]>s[1][0]&&(d=-d),d>0&&(i=p.index)}else i=p.index;else p.y!==t[1]&&(i=p.index)}}}return i}},4670:function(t,e,r){"use strict";var n=r(9130),i=r(9662);function a(t,e){var r=i(n(t,e),[e[e.length-1]]);return r[r.length-1]}function o(t,e,r,n){var i=-e/(n-e);i<0?i=0:i>1&&(i=1);for(var a=1-i,o=t.length,s=new Array(o),l=0;l<o;++l)s[l]=i*t[l]+a*r[l];return s}t.exports=function(t,e){for(var r=[],n=[],i=a(t[t.length-1],e),s=t[t.length-1],l=t[0],u=0;u<t.length;++u,s=l){var c=a(l=t[u],e);if(i<0&&c>0||i>0&&c<0){var f=o(s,c,l,i);r.push(f),n.push(f.slice())}c<0?n.push(l.slice()):c>0?r.push(l.slice()):(r.push(l.slice()),n.push(l.slice())),i=c}return{positive:r,negative:n}},t.exports.positive=function(t,e){for(var r=[],n=a(t[t.length-1],e),i=t[t.length-1],s=t[0],l=0;l<t.length;++l,i=s){var u=a(s=t[l],e);(n<0&&u>0||n>0&&u<0)&&r.push(o(i,u,s,n)),u>=0&&r.push(s.slice()),n=u}return r},t.exports.negative=function(t,e){for(var r=[],n=a(t[t.length-1],e),i=t[t.length-1],s=t[0],l=0;l<t.length;++l,i=s){var u=a(s=t[l],e);(n<0&&u>0||n>0&&u<0)&&r.push(o(i,u,s,n)),u<=0&&r.push(s.slice()),n=u}return r}},8974:function(t,e,r){var n;!function(){"use strict";var i={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function a(t){return function(t,e){var r,n,o,s,l,u,c,f,h,p=1,d=t.length,v="";for(n=0;n<d;n++)if("string"==typeof t[n])v+=t[n];else if("object"==typeof t[n]){if((s=t[n]).keys)for(r=e[p],o=0;o<s.keys.length;o++){if(null==r)throw new Error(a('[sprintf] Cannot access property "%s" of undefined value "%s"',s.keys[o],s.keys[o-1]));r=r[s.keys[o]]}else r=s.param_no?e[s.param_no]:e[p++];if(i.not_type.test(s.type)&&i.not_primitive.test(s.type)&&r instanceof Function&&(r=r()),i.numeric_arg.test(s.type)&&"number"!=typeof r&&isNaN(r))throw new TypeError(a("[sprintf] expecting number but found %T",r));switch(i.number.test(s.type)&&(f=r>=0),s.type){case"b":r=parseInt(r,10).toString(2);break;case"c":r=String.fromCharCode(parseInt(r,10));break;case"d":case"i":r=parseInt(r,10);break;case"j":r=JSON.stringify(r,null,s.width?parseInt(s.width):0);break;case"e":r=s.precision?parseFloat(r).toExponential(s.precision):parseFloat(r).toExponential();break;case"f":r=s.precision?parseFloat(r).toFixed(s.precision):parseFloat(r);break;case"g":r=s.precision?String(Number(r.toPrecision(s.precision))):parseFloat(r);break;case"o":r=(parseInt(r,10)>>>0).toString(8);break;case"s":r=String(r),r=s.precision?r.substring(0,s.precision):r;break;case"t":r=String(!!r),r=s.precision?r.substring(0,s.precision):r;break;case"T":r=Object.prototype.toString.call(r).slice(8,-1).toLowerCase(),r=s.precision?r.substring(0,s.precision):r;break;case"u":r=parseInt(r,10)>>>0;break;case"v":r=r.valueOf(),r=s.precision?r.substring(0,s.precision):r;break;case"x":r=(parseInt(r,10)>>>0).toString(16);break;case"X":r=(parseInt(r,10)>>>0).toString(16).toUpperCase()}i.json.test(s.type)?v+=r:(!i.number.test(s.type)||f&&!s.sign?h="":(h=f?"+":"-",r=r.toString().replace(i.sign,"")),u=s.pad_char?"0"===s.pad_char?"0":s.pad_char.charAt(1):" ",c=s.width-(h+r).length,l=s.width&&c>0?u.repeat(c):"",v+=s.align?h+r+l:"0"===u?h+l+r:l+h+r)}return v}(function(t){if(s[t])return s[t];for(var e,r=t,n=[],a=0;r;){if(null!==(e=i.text.exec(r)))n.push(e[0]);else if(null!==(e=i.modulo.exec(r)))n.push("%");else{if(null===(e=i.placeholder.exec(r)))throw new SyntaxError("[sprintf] unexpected placeholder");if(e[2]){a|=1;var o=[],l=e[2],u=[];if(null===(u=i.key.exec(l)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(o.push(u[1]);""!==(l=l.substring(u[0].length));)if(null!==(u=i.key_access.exec(l)))o.push(u[1]);else{if(null===(u=i.index_access.exec(l)))throw new SyntaxError("[sprintf] failed to parse named argument key");o.push(u[1])}e[2]=o}else a|=2;if(3===a)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");n.push({placeholder:e[0],param_no:e[1],keys:e[2],sign:e[3],pad_char:e[4],align:e[5],width:e[6],precision:e[7],type:e[8]})}r=r.substring(e[0].length)}return s[t]=n}(t),arguments)}function o(t,e){return a.apply(null,[t].concat(e||[]))}var s=Object.create(null);e.sprintf=a,e.vsprintf=o,"undefined"!=typeof window&&(window.sprintf=a,window.vsprintf=o,void 0===(n=function(){return{sprintf:a,vsprintf:o}}.call(e,r,e,t))||(t.exports=n))}()},4162:function(t,e,r){"use strict";t.exports=function(t,e){if(t.dimension<=0)return{positions:[],cells:[]};if(1===t.dimension)return function(t,e){for(var r=i(t,e),n=r.length,a=new Array(n),o=new Array(n),s=0;s<n;++s)a[s]=[r[s]],o[s]=[s];return{positions:a,cells:o}}(t,e);var r=t.order.join()+"-"+t.dtype,s=o[r];return e=+e||0,s||(s=o[r]=function(t,e){var r=t.length+"d",i=a[r];if(i)return i(n,t,e)}(t.order,t.dtype)),s(t,e)};var n=r(9284),i=r(9584),a={"2d":function(t,e,r){var n=t({order:e,scalarArguments:3,getters:"generic"===r?[0]:void 0,phase:function(t,e,r,n){return t>n|0},vertex:function(t,e,r,n,i,a,o,s,l,u,c,f,h){var p=(o<<0)+(s<<1)+(l<<2)+(u<<3)|0;if(0!==p&&15!==p)switch(p){case 0:case 15:c.push([t-.5,e-.5]);break;case 1:c.push([t-.25-.25*(n+r-2*h)/(r-n),e-.25-.25*(i+r-2*h)/(r-i)]);break;case 2:c.push([t-.75-.25*(-n-r+2*h)/(n-r),e-.25-.25*(a+n-2*h)/(n-a)]);break;case 3:c.push([t-.5,e-.5-.5*(i+r+a+n-4*h)/(r-i+n-a)]);break;case 4:c.push([t-.25-.25*(a+i-2*h)/(i-a),e-.75-.25*(-i-r+2*h)/(i-r)]);break;case 5:c.push([t-.5-.5*(n+r+a+i-4*h)/(r-n+i-a),e-.5]);break;case 6:c.push([t-.5-.25*(-n-r+a+i)/(n-r+i-a),e-.5-.25*(-i-r+a+n)/(i-r+n-a)]);break;case 7:c.push([t-.75-.25*(a+i-2*h)/(i-a),e-.75-.25*(a+n-2*h)/(n-a)]);break;case 8:c.push([t-.75-.25*(-a-i+2*h)/(a-i),e-.75-.25*(-a-n+2*h)/(a-n)]);break;case 9:c.push([t-.5-.25*(n+r+-a-i)/(r-n+a-i),e-.5-.25*(i+r+-a-n)/(r-i+a-n)]);break;case 10:c.push([t-.5-.5*(-n-r-a-i+4*h)/(n-r+a-i),e-.5]);break;case 11:c.push([t-.25-.25*(-a-i+2*h)/(a-i),e-.75-.25*(i+r-2*h)/(r-i)]);break;case 12:c.push([t-.5,e-.5-.5*(-i-r-a-n+4*h)/(i-r+a-n)]);break;case 13:c.push([t-.75-.25*(n+r-2*h)/(r-n),e-.25-.25*(-a-n+2*h)/(a-n)]);break;case 14:c.push([t-.25-.25*(-n-r+2*h)/(n-r),e-.25-.25*(-i-r+2*h)/(i-r)])}},cell:function(t,e,r,n,i,a,o,s,l){i?s.push([t,e]):s.push([e,t])}});return function(t,e){var r=[],i=[];return n(t,r,i,e),{positions:r,cells:i}}}},o={}},6946:function(t,e,r){"use strict";t.exports=function t(e,r,i){i=i||{};var a=o[e];a||(a=o[e]={" ":{data:new Float32Array(0),shape:.2}});var s=a[r];if(!s)if(r.length<=1||!/\d/.test(r))s=a[r]=function(t){for(var e=t.cells,r=t.positions,n=new Float32Array(6*e.length),i=0,a=0,o=0;o<e.length;++o)for(var s=e[o],l=0;l<3;++l){var u=r[s[l]];n[i++]=u[0],n[i++]=u[1]+1.4,a=Math.max(u[0],a)}return{data:n,shape:a}}(n(r,{triangles:!0,font:e,textAlign:i.textAlign||"left",textBaseline:"alphabetic",styletags:{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0}}));else{for(var l=r.split(/(\d|\s)/),u=new Array(l.length),c=0,f=0,h=0;h<l.length;++h)u[h]=t(e,l[h]),c+=u[h].data.length,f+=u[h].shape,h>0&&(f+=.02);var p=new Float32Array(c),d=0,v=-.5*f;for(h=0;h<u.length;++h){for(var g=u[h].data,y=0;y<g.length;y+=2)p[d++]=g[y]+v,p[d++]=g[y+1];v+=u[h].shape+.02}s=a[r]={data:p,shape:f}}return s};var n=r(875),a=window||i.global||{},o=a.__TEXT_CACHE||{};a.__TEXT_CACHE={}},14:function(t,e,r){"use strict";var n=r(4405);t.exports=o;var i=96;function a(t,e){var r=n(getComputedStyle(t).getPropertyValue(e));return r[0]*o(r[1],t)}function o(t,e){switch(e=e||document.body,t=(t||"px").trim().toLowerCase(),e!==window&&e!==document||(e=document.body),t){case"%":return e.clientHeight/100;case"ch":case"ex":return function(t,e){var r=document.createElement("div");r.style["font-size"]="128"+t,e.appendChild(r);var n=a(r,"font-size")/128;return e.removeChild(r),n}(t,e);case"em":return a(e,"font-size");case"rem":return a(document.body,"font-size");case"vw":return window.innerWidth/100;case"vh":return window.innerHeight/100;case"vmin":return Math.min(window.innerWidth,window.innerHeight)/100;case"vmax":return Math.max(window.innerWidth,window.innerHeight)/100;case"in":return i;case"cm":return i/2.54;case"mm":return i/25.4;case"pt":return i/72;case"pc":return i/6}return 1}},3440:function(t,e,r){"use strict";t.exports=function(t){var e=(t=t||{}).center||[0,0,0],r=t.up||[0,1,0],n=t.right||f(r),i=t.radius||1,a=t.theta||0,c=t.phi||0;if(e=[].slice.call(e,0,3),r=[].slice.call(r,0,3),s(r,r),n=[].slice.call(n,0,3),s(n,n),"eye"in t){var p=t.eye,d=[p[0]-e[0],p[1]-e[1],p[2]-e[2]];o(n,d,r),u(n[0],n[1],n[2])<1e-6?n=f(r):s(n,n),i=u(d[0],d[1],d[2]);var v=l(r,d)/i,g=l(n,d)/i;c=Math.acos(v),a=Math.acos(g)}return i=Math.log(i),new h(t.zoomMin,t.zoomMax,e,r,n,i,a,c)};var n=r(8444),i=r(7437),a=r(4422),o=r(903),s=r(899),l=r(9305);function u(t,e,r){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2))}function c(t){return Math.min(1,Math.max(-1,t))}function f(t){var e=Math.abs(t[0]),r=Math.abs(t[1]),n=Math.abs(t[2]),i=[0,0,0];e>Math.max(r,n)?i[2]=1:r>Math.max(e,n)?i[0]=1:i[1]=1;for(var a=0,o=0,l=0;l<3;++l)a+=t[l]*t[l],o+=i[l]*t[l];for(l=0;l<3;++l)i[l]-=o/a*t[l];return s(i,i),i}function h(t,e,r,i,a,o,s,l){this.center=n(r),this.up=n(i),this.right=n(a),this.radius=n([o]),this.angle=n([s,l]),this.angle.bounds=[[-1/0,-Math.PI/2],[1/0,Math.PI/2]],this.setDistanceLimits(t,e),this.computedCenter=this.center.curve(0),this.computedUp=this.up.curve(0),this.computedRight=this.right.curve(0),this.computedRadius=this.radius.curve(0),this.computedAngle=this.angle.curve(0),this.computedToward=[0,0,0],this.computedEye=[0,0,0],this.computedMatrix=new Array(16);for(var u=0;u<16;++u)this.computedMatrix[u]=.5;this.recalcMatrix(0)}var p=h.prototype;p.setDistanceLimits=function(t,e){t=t>0?Math.log(t):-1/0,e=e>0?Math.log(e):1/0,e=Math.max(e,t),this.radius.bounds[0][0]=t,this.radius.bounds[1][0]=e},p.getDistanceLimits=function(t){var e=this.radius.bounds[0];return t?(t[0]=Math.exp(e[0][0]),t[1]=Math.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},p.recalcMatrix=function(t){this.center.curve(t),this.up.curve(t),this.right.curve(t),this.radius.curve(t),this.angle.curve(t);for(var e=this.computedUp,r=this.computedRight,n=0,i=0,a=0;a<3;++a)i+=e[a]*r[a],n+=e[a]*e[a];var l=Math.sqrt(n),c=0;for(a=0;a<3;++a)r[a]-=e[a]*i/n,c+=r[a]*r[a],e[a]/=l;var f=Math.sqrt(c);for(a=0;a<3;++a)r[a]/=f;var h=this.computedToward;o(h,e,r),s(h,h);var p=Math.exp(this.computedRadius[0]),d=this.computedAngle[0],v=this.computedAngle[1],g=Math.cos(d),y=Math.sin(d),m=Math.cos(v),x=Math.sin(v),b=this.computedCenter,_=g*m,w=y*m,T=x,k=-g*x,A=-y*x,M=m,S=this.computedEye,E=this.computedMatrix;for(a=0;a<3;++a){var L=_*r[a]+w*h[a]+T*e[a];E[4*a+1]=k*r[a]+A*h[a]+M*e[a],E[4*a+2]=L,E[4*a+3]=0}var C=E[1],P=E[5],O=E[9],I=E[2],D=E[6],z=E[10],R=P*z-O*D,F=O*I-C*z,B=C*D-P*I,N=u(R,F,B);for(R/=N,F/=N,B/=N,E[0]=R,E[4]=F,E[8]=B,a=0;a<3;++a)S[a]=b[a]+E[2+4*a]*p;for(a=0;a<3;++a){c=0;for(var j=0;j<3;++j)c+=E[a+4*j]*S[j];E[12+a]=-c}E[15]=1},p.getMatrix=function(t,e){this.recalcMatrix(t);var r=this.computedMatrix;if(e){for(var n=0;n<16;++n)e[n]=r[n];return e}return r};var d=[0,0,0];p.rotate=function(t,e,r,n){if(this.angle.move(t,e,r),n){this.recalcMatrix(t);var i=this.computedMatrix;d[0]=i[2],d[1]=i[6],d[2]=i[10];for(var o=this.computedUp,s=this.computedRight,l=this.computedToward,u=0;u<3;++u)i[4*u]=o[u],i[4*u+1]=s[u],i[4*u+2]=l[u];for(a(i,i,n,d),u=0;u<3;++u)o[u]=i[4*u],s[u]=i[4*u+1];this.up.set(t,o[0],o[1],o[2]),this.right.set(t,s[0],s[1],s[2])}},p.pan=function(t,e,r,n){e=e||0,r=r||0,n=n||0,this.recalcMatrix(t);var i=this.computedMatrix,a=(Math.exp(this.computedRadius[0]),i[1]),o=i[5],s=i[9],l=u(a,o,s);a/=l,o/=l,s/=l;var c=i[0],f=i[4],h=i[8],p=c*a+f*o+h*s,d=u(c-=a*p,f-=o*p,h-=s*p),v=(c/=d)*e+a*r,g=(f/=d)*e+o*r,y=(h/=d)*e+s*r;this.center.move(t,v,g,y);var m=Math.exp(this.computedRadius[0]);m=Math.max(1e-4,m+n),this.radius.set(t,Math.log(m))},p.translate=function(t,e,r,n){this.center.move(t,e||0,r||0,n||0)},p.setMatrix=function(t,e,r,n){var a=1;"number"==typeof r&&(a=0|r),(a<0||a>3)&&(a=1);var o=(a+2)%3;e||(this.recalcMatrix(t),e=this.computedMatrix);var s=e[a],l=e[a+4],f=e[a+8];if(n){var h=Math.abs(s),p=Math.abs(l),d=Math.abs(f),v=Math.max(h,p,d);h===v?(s=s<0?-1:1,l=f=0):d===v?(f=f<0?-1:1,s=l=0):(l=l<0?-1:1,s=f=0)}else{var g=u(s,l,f);s/=g,l/=g,f/=g}var y,m,x=e[o],b=e[o+4],_=e[o+8],w=x*s+b*l+_*f,T=u(x-=s*w,b-=l*w,_-=f*w),k=l*(_/=T)-f*(b/=T),A=f*(x/=T)-s*_,M=s*b-l*x,S=u(k,A,M);if(k/=S,A/=S,M/=S,this.center.jump(t,q,G,Z),this.radius.idle(t),this.up.jump(t,s,l,f),this.right.jump(t,x,b,_),2===a){var E=e[1],L=e[5],C=e[9],P=E*x+L*b+C*_,O=E*k+L*A+C*M;y=R<0?-Math.PI/2:Math.PI/2,m=Math.atan2(O,P)}else{var I=e[2],D=e[6],z=e[10],R=I*s+D*l+z*f,F=I*x+D*b+z*_,B=I*k+D*A+z*M;y=Math.asin(c(R)),m=Math.atan2(B,F)}this.angle.jump(t,m,y),this.recalcMatrix(t);var N=e[2],j=e[6],U=e[10],V=this.computedMatrix;i(V,e);var H=V[15],q=V[12]/H,G=V[13]/H,Z=V[14]/H,Y=Math.exp(this.computedRadius[0]);this.center.jump(t,q-N*Y,G-j*Y,Z-U*Y)},p.lastT=function(){return Math.max(this.center.lastT(),this.up.lastT(),this.right.lastT(),this.radius.lastT(),this.angle.lastT())},p.idle=function(t){this.center.idle(t),this.up.idle(t),this.right.idle(t),this.radius.idle(t),this.angle.idle(t)},p.flush=function(t){this.center.flush(t),this.up.flush(t),this.right.flush(t),this.radius.flush(t),this.angle.flush(t)},p.setDistance=function(t,e){e>0&&this.radius.set(t,Math.log(e))},p.lookAt=function(t,e,r,n){this.recalcMatrix(t),e=e||this.computedEye,r=r||this.computedCenter;var i=(n=n||this.computedUp)[0],a=n[1],o=n[2],s=u(i,a,o);if(!(s<1e-6)){i/=s,a/=s,o/=s;var l=e[0]-r[0],f=e[1]-r[1],h=e[2]-r[2],p=u(l,f,h);if(!(p<1e-6)){l/=p,f/=p,h/=p;var d=this.computedRight,v=d[0],g=d[1],y=d[2],m=i*v+a*g+o*y,x=u(v-=m*i,g-=m*a,y-=m*o);if(!(x<.01&&(x=u(v=a*h-o*f,g=o*l-i*h,y=i*f-a*l))<1e-6)){v/=x,g/=x,y/=x,this.up.set(t,i,a,o),this.right.set(t,v,g,y),this.center.set(t,r[0],r[1],r[2]),this.radius.set(t,Math.log(p));var b=a*y-o*g,_=o*v-i*y,w=i*g-a*v,T=u(b,_,w),k=i*l+a*f+o*h,A=v*l+g*f+y*h,M=(b/=T)*l+(_/=T)*f+(w/=T)*h,S=Math.asin(c(k)),E=Math.atan2(M,A),L=this.angle._state,C=L[L.length-1],P=L[L.length-2];C%=2*Math.PI;var O=Math.abs(C+2*Math.PI-E),I=Math.abs(C-E),D=Math.abs(C-2*Math.PI-E);O<I&&(C+=2*Math.PI),D<I&&(C-=2*Math.PI),this.angle.jump(this.angle.lastT(),C,P),this.angle.set(t,E,S)}}}}},9660:function(t){"use strict";t.exports=function(t,r,n){var i=t*r,a=e*t,o=a-(a-t),s=t-o,l=e*r,u=l-(l-r),c=r-u,f=s*c-(i-o*u-s*u-o*c);return n?(n[0]=f,n[1]=i,n):[f,i]};var e=+(Math.pow(2,27)+1)},87:function(t){"use strict";t.exports=function(t,e,r){var n=t+e,i=n-t,a=e-i,o=t-(n-i);return r?(r[0]=o+a,r[1]=n,r):[o+a,n]}},5306:function(t,e,r){"use strict";var n=r(2288),i=r(3094),a=r(2146).lW;r.g.__TYPEDARRAY_POOL||(r.g.__TYPEDARRAY_POOL={UINT8:i([32,0]),UINT16:i([32,0]),UINT32:i([32,0]),BIGUINT64:i([32,0]),INT8:i([32,0]),INT16:i([32,0]),INT32:i([32,0]),BIGINT64:i([32,0]),FLOAT:i([32,0]),DOUBLE:i([32,0]),DATA:i([32,0]),UINT8C:i([32,0]),BUFFER:i([32,0])});var o="undefined"!=typeof Uint8ClampedArray,s="undefined"!=typeof BigUint64Array,l="undefined"!=typeof BigInt64Array,u=r.g.__TYPEDARRAY_POOL;u.UINT8C||(u.UINT8C=i([32,0])),u.BIGUINT64||(u.BIGUINT64=i([32,0])),u.BIGINT64||(u.BIGINT64=i([32,0])),u.BUFFER||(u.BUFFER=i([32,0]));var c=u.DATA,f=u.BUFFER;function h(t){if(t){var e=t.length||t.byteLength,r=n.log2(e);c[r].push(t)}}function p(t){t=n.nextPow2(t);var e=n.log2(t),r=c[e];return r.length>0?r.pop():new ArrayBuffer(t)}function d(t){return new Uint8Array(p(t),0,t)}function v(t){return new Uint16Array(p(2*t),0,t)}function g(t){return new Uint32Array(p(4*t),0,t)}function y(t){return new Int8Array(p(t),0,t)}function m(t){return new Int16Array(p(2*t),0,t)}function x(t){return new Int32Array(p(4*t),0,t)}function b(t){return new Float32Array(p(4*t),0,t)}function _(t){return new Float64Array(p(8*t),0,t)}function w(t){return o?new Uint8ClampedArray(p(t),0,t):d(t)}function T(t){return s?new BigUint64Array(p(8*t),0,t):null}function k(t){return l?new BigInt64Array(p(8*t),0,t):null}function A(t){return new DataView(p(t),0,t)}function M(t){t=n.nextPow2(t);var e=n.log2(t),r=f[e];return r.length>0?r.pop():new a(t)}e.free=function(t){if(a.isBuffer(t))f[n.log2(t.length)].push(t);else{if("[object ArrayBuffer]"!==Object.prototype.toString.call(t)&&(t=t.buffer),!t)return;var e=t.length||t.byteLength,r=0|n.log2(e);c[r].push(t)}},e.freeUint8=e.freeUint16=e.freeUint32=e.freeBigUint64=e.freeInt8=e.freeInt16=e.freeInt32=e.freeBigInt64=e.freeFloat32=e.freeFloat=e.freeFloat64=e.freeDouble=e.freeUint8Clamped=e.freeDataView=function(t){h(t.buffer)},e.freeArrayBuffer=h,e.freeBuffer=function(t){f[n.log2(t.length)].push(t)},e.malloc=function(t,e){if(void 0===e||"arraybuffer"===e)return p(t);switch(e){case"uint8":return d(t);case"uint16":return v(t);case"uint32":return g(t);case"int8":return y(t);case"int16":return m(t);case"int32":return x(t);case"float":case"float32":return b(t);case"double":case"float64":return _(t);case"uint8_clamped":return w(t);case"bigint64":return k(t);case"biguint64":return T(t);case"buffer":return M(t);case"data":case"dataview":return A(t);default:return null}return null},e.mallocArrayBuffer=p,e.mallocUint8=d,e.mallocUint16=v,e.mallocUint32=g,e.mallocInt8=y,e.mallocInt16=m,e.mallocInt32=x,e.mallocFloat32=e.mallocFloat=b,e.mallocFloat64=e.mallocDouble=_,e.mallocUint8Clamped=w,e.mallocBigUint64=T,e.mallocBigInt64=k,e.mallocDataView=A,e.mallocBuffer=M,e.clearCache=function(){for(var t=0;t<32;++t)u.UINT8[t].length=0,u.UINT16[t].length=0,u.UINT32[t].length=0,u.INT8[t].length=0,u.INT16[t].length=0,u.INT32[t].length=0,u.FLOAT[t].length=0,u.DOUBLE[t].length=0,u.BIGUINT64[t].length=0,u.BIGINT64[t].length=0,u.UINT8C[t].length=0,c[t].length=0,f[t].length=0}},1731:function(t){"use strict";function e(t){this.roots=new Array(t),this.ranks=new Array(t);for(var e=0;e<t;++e)this.roots[e]=e,this.ranks[e]=0}t.exports=e;var r=e.prototype;Object.defineProperty(r,"length",{get:function(){return this.roots.length}}),r.makeSet=function(){var t=this.roots.length;return this.roots.push(t),this.ranks.push(0),t},r.find=function(t){for(var e=t,r=this.roots;r[t]!==t;)t=r[t];for(;r[e]!==t;){var n=r[e];r[e]=t,e=n}return t},r.link=function(t,e){var r=this.find(t),n=this.find(e);if(r!==n){var i=this.ranks,a=this.roots,o=i[r],s=i[n];o<s?a[r]=n:s<o?a[n]=r:(a[n]=r,++i[r])}}},1215:function(t){"use strict";t.exports=function(t,e,r){return 0===t.length?t:e?(r||t.sort(e),function(t,e){for(var r=1,n=t.length,i=t[0],a=t[0],o=1;o<n;++o)if(a=i,e(i=t[o],a)){if(o===r){r++;continue}t[r++]=i}return t.length=r,t}(t,e)):(r||t.sort(),function(t){for(var e=1,r=t.length,n=t[0],i=t[0],a=1;a<r;++a,i=n)if(i=n,(n=t[a])!==i){if(a===e){e++;continue}t[e++]=n}return t.length=e,t}(t))}},875:function(t,e,r){"use strict";t.exports=function(t,e){return"object"==typeof e&&null!==e||(e={}),n(t,e.canvas||i,e.context||a,e)};var n=r(712),i=null,a=null;"undefined"!=typeof document&&((i=document.createElement("canvas")).width=8192,i.height=1024,a=i.getContext("2d"))},712:function(t,e,r){t.exports=function(t,e,r,n){var a=64,o=1.25,s={breaklines:!1,bolds:!1,italics:!1,subscripts:!1,superscripts:!1};return n&&(n.size&&n.size>0&&(a=n.size),n.lineSpacing&&n.lineSpacing>0&&(o=n.lineSpacing),n.styletags&&n.styletags.breaklines&&(s.breaklines=!!n.styletags.breaklines),n.styletags&&n.styletags.bolds&&(s.bolds=!!n.styletags.bolds),n.styletags&&n.styletags.italics&&(s.italics=!!n.styletags.italics),n.styletags&&n.styletags.subscripts&&(s.subscripts=!!n.styletags.subscripts),n.styletags&&n.styletags.superscripts&&(s.superscripts=!!n.styletags.superscripts)),r.font=[n.fontStyle,n.fontVariant,n.fontWeight,a+"px",n.font].filter((function(t){return t})).join(" "),r.textAlign="start",r.textBaseline="alphabetic",r.direction="ltr",w(function(t,e,r,n,a,o){r=r.replace(/\n/g,""),r=!0===o.breaklines?r.replace(/\<br\>/g,"\n"):r.replace(/\<br\>/g," ");var s="",l=[];for(T=0;T<r.length;++T)l[T]=s;!0===o.bolds&&(l=x(u,c,r,l)),!0===o.italics&&(l=x(f,h,r,l)),!0===o.superscripts&&(l=x(p,v,r,l)),!0===o.subscripts&&(l=x(g,m,r,l));var b=[],_="";for(T=0;T<r.length;++T)null!==l[T]&&(_+=r[T],b.push(l[T]));var w,T,k,A,M,S=_.split("\n"),E=S.length,L=Math.round(a*n),C=n,P=2*n,O=0,I=E*L+P;t.height<I&&(t.height=I),e.fillStyle="#000",e.fillRect(0,0,t.width,t.height),e.fillStyle="#fff";var D=0,z="";function R(){if(""!==z){var t=e.measureText(z).width;e.fillText(z,C+k,P+A),k+=t}}function F(){return Math.round(M)+"px "}function B(t,r){var n=""+e.font;if(!0===o.subscripts){var i=t.indexOf(y),a=r.indexOf(y),s=i>-1?parseInt(t[1+i]):0,l=a>-1?parseInt(r[1+a]):0;s!==l&&(n=n.replace(F(),"?px "),M*=Math.pow(.75,l-s),n=n.replace("?px ",F())),A+=.25*L*(l-s)}if(!0===o.superscripts){var u=t.indexOf(d),f=r.indexOf(d),p=u>-1?parseInt(t[1+u]):0,v=f>-1?parseInt(r[1+f]):0;p!==v&&(n=n.replace(F(),"?px "),M*=Math.pow(.75,v-p),n=n.replace("?px ",F())),A-=.25*L*(v-p)}if(!0===o.bolds){var g=t.indexOf(c)>-1,m=r.indexOf(c)>-1;!g&&m&&(n=x?n.replace("italic ","italic bold "):"bold "+n),g&&!m&&(n=n.replace("bold ",""))}if(!0===o.italics){var x=t.indexOf(h)>-1,b=r.indexOf(h)>-1;!x&&b&&(n="italic "+n),x&&!b&&(n=n.replace("italic ",""))}e.font=n}for(w=0;w<E;++w){var N=S[w]+"\n";for(k=0,A=w*L,M=n,z="",T=0;T<N.length;++T){var j=T+D<b.length?b[T+D]:b[b.length-1];s===j?z+=N[T]:(R(),z=N[T],void 0!==j&&(B(s,j),s=j))}R(),D+=N.length;var U=0|Math.round(k+2*C);O<U&&(O=U)}var V=O,H=P+L*E;return i(e.getImageData(0,0,V,H).data,[H,V,4]).pick(-1,-1,0).transpose(1,0)}(e,r,t,a,o,s),n,a)},t.exports.processPixels=w;var n=r(4162),i=r(5050),a=r(8243),o=r(197),s=r(7761),l=r(8040),u="b",c="b|",f="i",h="i|",p="sup",d="+",v="+1",g="sub",y="-",m="-1";function x(t,e,r,n){for(var i="<"+t+">",a="</"+t+">",o=i.length,s=a.length,l=e[0]===d||e[0]===y,u=0,c=-s;u>-1&&-1!==(u=r.indexOf(i,u))&&-1!==(c=r.indexOf(a,u+o))&&!(c<=u);){for(var f=u;f<c+s;++f)if(f<u+o||f>=c)n[f]=null,r=r.substr(0,f)+" "+r.substr(f+1);else if(null!==n[f]){var h=n[f].indexOf(e[0]);-1===h?n[f]+=e:l&&(n[f]=n[f].substr(0,h+1)+(1+parseInt(n[f][h+1]))+n[f].substr(h+2))}var p=u+o,v=r.substr(p,c-p).indexOf(i);u=-1!==v?v:c+s}return n}function b(t,e){var r=n(t,128);return e?a(r.cells,r.positions,.25):{edges:r.cells,positions:r.positions}}function _(t,e,r,n){var i=b(t,n),a=function(t,e,r){for(var n=e.textAlign||"start",i=e.textBaseline||"alphabetic",a=[1<<30,1<<30],o=[0,0],s=t.length,l=0;l<s;++l)for(var u=t[l],c=0;c<2;++c)a[c]=0|Math.min(a[c],u[c]),o[c]=0|Math.max(o[c],u[c]);var f=0;switch(n){case"center":f=-.5*(a[0]+o[0]);break;case"right":case"end":f=-o[0];break;case"left":case"start":f=-a[0];break;default:throw new Error("vectorize-text: Unrecognized textAlign: '"+n+"'")}var h=0;switch(i){case"hanging":case"top":h=-a[1];break;case"middle":h=-.5*(a[1]+o[1]);break;case"alphabetic":case"ideographic":h=-3*r;break;case"bottom":h=-o[1];break;default:throw new Error("vectorize-text: Unrecoginized textBaseline: '"+i+"'")}var p=1/r;return"lineHeight"in e?p*=+e.lineHeight:"width"in e?p=e.width/(o[0]-a[0]):"height"in e&&(p=e.height/(o[1]-a[1])),t.map((function(t){return[p*(t[0]+f),p*(t[1]+h)]}))}(i.positions,e,r),u=i.edges,c="ccw"===e.orientation;if(o(a,u),e.polygons||e.polygon||e.polyline){for(var f=l(u,a),h=new Array(f.length),p=0;p<f.length;++p){for(var d=f[p],v=new Array(d.length),g=0;g<d.length;++g){for(var y=d[g],m=new Array(y.length),x=0;x<y.length;++x)m[x]=a[y[x]].slice();c&&m.reverse(),v[g]=m}h[p]=v}return h}return e.triangles||e.triangulate||e.triangle?{cells:s(a,u,{delaunay:!1,exterior:!1,interior:!0}),positions:a}:{edges:u,positions:a}}function w(t,e,r){try{return _(t,e,r,!0)}catch(t){}try{return _(t,e,r,!1)}catch(t){}return e.polygons||e.polyline||e.polygon?[]:e.triangles||e.triangulate||e.triangle?{cells:[],positions:[]}:{edges:[],positions:[]}}},5346:function(t){!function(){"use strict";if("undefined"==typeof ses||!ses.ok||ses.ok()){"undefined"!=typeof ses&&(ses.weakMapPermitHostObjects=g);var e=!1;if("function"==typeof WeakMap){var r=WeakMap;if("undefined"!=typeof navigator&&/Firefox/.test(navigator.userAgent));else{var n=new r,i=Object.freeze({});if(n.set(i,1),1===n.get(i))return void(t.exports=WeakMap);e=!0}}Object.prototype.hasOwnProperty;var a=Object.getOwnPropertyNames,o=Object.defineProperty,s=Object.isExtensible,l="weakmap:",u=l+"ident:"+Math.random()+"___";if("undefined"!=typeof crypto&&"function"==typeof crypto.getRandomValues&&"function"==typeof ArrayBuffer&&"function"==typeof Uint8Array){var c=new ArrayBuffer(25),f=new Uint8Array(c);crypto.getRandomValues(f),u=l+"rand:"+Array.prototype.map.call(f,(function(t){return(t%36).toString(36)})).join("")+"___"}if(o(Object,"getOwnPropertyNames",{value:function(t){return a(t).filter(y)}}),"getPropertyNames"in Object){var h=Object.getPropertyNames;o(Object,"getPropertyNames",{value:function(t){return h(t).filter(y)}})}!function(){var t=Object.freeze;o(Object,"freeze",{value:function(e){return m(e),t(e)}});var e=Object.seal;o(Object,"seal",{value:function(t){return m(t),e(t)}});var r=Object.preventExtensions;o(Object,"preventExtensions",{value:function(t){return m(t),r(t)}})}();var p=!1,d=0,v=function(){this instanceof v||b();var t=[],e=[],r=d++;return Object.create(v.prototype,{get___:{value:x((function(n,i){var a,o=m(n);return o?r in o?o[r]:i:(a=t.indexOf(n))>=0?e[a]:i}))},has___:{value:x((function(e){var n=m(e);return n?r in n:t.indexOf(e)>=0}))},set___:{value:x((function(n,i){var a,o=m(n);return o?o[r]=i:(a=t.indexOf(n))>=0?e[a]=i:(a=t.length,e[a]=i,t[a]=n),this}))},delete___:{value:x((function(n){var i,a,o=m(n);return o?r in o&&delete o[r]:!((i=t.indexOf(n))<0||(a=t.length-1,t[i]=void 0,e[i]=e[a],t[i]=t[a],t.length=a,e.length=a,0))}))}})};v.prototype=Object.create(Object.prototype,{get:{value:function(t,e){return this.get___(t,e)},writable:!0,configurable:!0},has:{value:function(t){return this.has___(t)},writable:!0,configurable:!0},set:{value:function(t,e){return this.set___(t,e)},writable:!0,configurable:!0},delete:{value:function(t){return this.delete___(t)},writable:!0,configurable:!0}}),"function"==typeof r?function(){function n(){this instanceof v||b();var t,n=new r,i=void 0,a=!1;return t=e?function(t,e){return n.set(t,e),n.has(t)||(i||(i=new v),i.set(t,e)),this}:function(t,e){if(a)try{n.set(t,e)}catch(r){i||(i=new v),i.set___(t,e)}else n.set(t,e);return this},Object.create(v.prototype,{get___:{value:x((function(t,e){return i?n.has(t)?n.get(t):i.get___(t,e):n.get(t,e)}))},has___:{value:x((function(t){return n.has(t)||!!i&&i.has___(t)}))},set___:{value:x(t)},delete___:{value:x((function(t){var e=!!n.delete(t);return i&&i.delete___(t)||e}))},permitHostObjects___:{value:x((function(t){if(t!==g)throw new Error("bogus call to permitHostObjects___");a=!0}))}})}e&&"undefined"!=typeof Proxy&&(Proxy=void 0),n.prototype=v.prototype,t.exports=n,Object.defineProperty(WeakMap.prototype,"constructor",{value:WeakMap,enumerable:!1,configurable:!0,writable:!0})}():("undefined"!=typeof Proxy&&(Proxy=void 0),t.exports=v)}function g(t){t.permitHostObjects___&&t.permitHostObjects___(g)}function y(t){return!(t.substr(0,8)==l&&"___"===t.substr(t.length-3))}function m(t){if(t!==Object(t))throw new TypeError("Not an object: "+t);var e=t[u];if(e&&e.key===t)return e;if(s(t)){e={key:t};try{return o(t,u,{value:e,writable:!1,enumerable:!1,configurable:!1}),e}catch(t){return}}}function x(t){return t.prototype=null,Object.freeze(t)}function b(){p||"undefined"==typeof console||(p=!0,console.warn("WeakMap should be invoked as new WeakMap(), not WeakMap(). This will be an error in the future."))}}()},9222:function(t,e,r){var n=r(7178);t.exports=function(){var t={};return function(e){if(("object"!=typeof e||null===e)&&"function"!=typeof e)throw new Error("Weakmap-shim: Key must be object");var r=e.valueOf(t);return r&&r.identity===t?r:n(e,t)}}},7178:function(t){t.exports=function(t,e){var r={identity:e},n=t.valueOf;return Object.defineProperty(t,"valueOf",{value:function(t){return t!==e?n.apply(this,arguments):r},writable:!0}),r}},4037:function(t,e,r){var n=r(9222);t.exports=function(){var t=n();return{get:function(e,r){var n=t(e);return n.hasOwnProperty("value")?n.value:r},set:function(e,r){return t(e).value=r,this},has:function(e){return"value"in t(e)},delete:function(e){return delete t(e).value}}}},6183:function(t){"use strict";t.exports=function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=[a,o.join()].join(),l=e[s];return l||(e[s]=l=t([a,o])),l(r.shape.slice(0),r.data,r.stride,0|r.offset,n,i)}}(function(){return function(t,e,r,n,i,a){var o=t[0],s=r[0],l=[0],u=s;n|=0;var c=0,f=s;for(c=0;c<o;++c){var h=e[n]-a,p=e[n+u]-a;h>=0!=p>=0&&i.push(l[0]+.5+.5*(h+p)/(h-p)),n+=f,++l[0]}}}.bind(void 0,{funcName:"zeroCrossings"}))},9584:function(t,e,r){"use strict";t.exports=function(t,e){var r=[];return e=+e||0,n(t.hi(t.shape[0]-1),r,e),r};var n=r(6183)},6601:function(){}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var a=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}return r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},r(7386)}()},t.exports=n()},12856:function(t,e,r){"use strict";function n(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,(void 0,i=function(t,e){if("object"!==s(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!==s(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(n.key),"symbol"===s(i)?i:String(i)),n)}var i}function i(t,e){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},i(t,e)}function a(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function o(t){return o=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},o(t)}function s(t){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},s(t)}var l=r(95341),u=r(95280),c="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.Buffer=p,e.SlowBuffer=function(t){return+t!=t&&(t=0),p.alloc(+t)},e.INSPECT_MAX_BYTES=50;var f=2147483647;function h(t){if(t>f)throw new RangeError('The value "'+t+'" is invalid for option "size"');var e=new Uint8Array(t);return Object.setPrototypeOf(e,p.prototype),e}function p(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return g(t)}return d(t,e,r)}function d(t,e,r){if("string"==typeof t)return function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!p.isEncoding(e))throw new TypeError("Unknown encoding: "+e);var r=0|b(t,e),n=h(r),i=n.write(t,e);return i!==r&&(n=n.slice(0,i)),n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(tt(t,Uint8Array)){var e=new Uint8Array(t);return m(e.buffer,e.byteOffset,e.byteLength)}return y(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+s(t));if(tt(t,ArrayBuffer)||t&&tt(t.buffer,ArrayBuffer))return m(t,e,r);if("undefined"!=typeof SharedArrayBuffer&&(tt(t,SharedArrayBuffer)||t&&tt(t.buffer,SharedArrayBuffer)))return m(t,e,r);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');var n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return p.from(n,e,r);var i=function(t){if(p.isBuffer(t)){var e=0|x(t.length),r=h(e);return 0===r.length||t.copy(r,0,0,e),r}return void 0!==t.length?"number"!=typeof t.length||et(t.length)?h(0):y(t):"Buffer"===t.type&&Array.isArray(t.data)?y(t.data):void 0}(t);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return p.from(t[Symbol.toPrimitive]("string"),e,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+s(t))}function v(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function g(t){return v(t),h(t<0?0:0|x(t))}function y(t){for(var e=t.length<0?0:0|x(t.length),r=h(e),n=0;n<e;n+=1)r[n]=255&t[n];return r}function m(t,e,r){if(e<0||t.byteLength<e)throw new RangeError('"offset" is outside of buffer bounds');if(t.byteLength<e+(r||0))throw new RangeError('"length" is outside of buffer bounds');var n;return n=void 0===e&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,e):new Uint8Array(t,e,r),Object.setPrototypeOf(n,p.prototype),n}function x(t){if(t>=f)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+f.toString(16)+" bytes");return 0|t}function b(t,e){if(p.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||tt(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+s(t));var r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return K(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return $(t).length;default:if(i)return n?-1:K(t).length;e=(""+e).toLowerCase(),i=!0}}function _(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return z(this,e,r);case"utf8":case"utf-8":return P(this,e,r);case"ascii":return I(this,e,r);case"latin1":case"binary":return D(this,e,r);case"base64":return C(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return R(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function w(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function T(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),et(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=p.from(e,n)),p.isBuffer(e))return 0===e.length?-1:k(t,e,r,n,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):k(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function k(t,e,r,n,i){var a,o=1,s=t.length,l=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;o=2,s/=2,l/=2,r/=2}function u(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(i){var c=-1;for(a=r;a<s;a++)if(u(t,a)===u(e,-1===c?0:a-c)){if(-1===c&&(c=a),a-c+1===l)return c*o}else-1!==c&&(a-=a-c),c=-1}else for(r+l>s&&(r=s-l),a=r;a>=0;a--){for(var f=!0,h=0;h<l;h++)if(u(t,a+h)!==u(e,h)){f=!1;break}if(f)return a}return-1}function A(t,e,r,n){r=Number(r)||0;var i=t.length-r;n?(n=Number(n))>i&&(n=i):n=i;var a,o=e.length;for(n>o/2&&(n=o/2),a=0;a<n;++a){var s=parseInt(e.substr(2*a,2),16);if(et(s))return a;t[r+a]=s}return a}function M(t,e,r,n){return Q(K(e,t.length-r),t,r,n)}function S(t,e,r,n){return Q(function(t){for(var e=[],r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}(e),t,r,n)}function E(t,e,r,n){return Q($(e),t,r,n)}function L(t,e,r,n){return Q(function(t,e){for(var r,n,i,a=[],o=0;o<t.length&&!((e-=2)<0);++o)n=(r=t.charCodeAt(o))>>8,i=r%256,a.push(i),a.push(n);return a}(e,t.length-r),t,r,n)}function C(t,e,r){return 0===e&&r===t.length?l.fromByteArray(t):l.fromByteArray(t.slice(e,r))}function P(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i<r;){var a=t[i],o=null,s=a>239?4:a>223?3:a>191?2:1;if(i+s<=r){var l=void 0,u=void 0,c=void 0,f=void 0;switch(s){case 1:a<128&&(o=a);break;case 2:128==(192&(l=t[i+1]))&&(f=(31&a)<<6|63&l)>127&&(o=f);break;case 3:l=t[i+1],u=t[i+2],128==(192&l)&&128==(192&u)&&(f=(15&a)<<12|(63&l)<<6|63&u)>2047&&(f<55296||f>57343)&&(o=f);break;case 4:l=t[i+1],u=t[i+2],c=t[i+3],128==(192&l)&&128==(192&u)&&128==(192&c)&&(f=(15&a)<<18|(63&l)<<12|(63&u)<<6|63&c)>65535&&f<1114112&&(o=f)}}null===o?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=s}return function(t){var e=t.length;if(e<=O)return String.fromCharCode.apply(String,t);for(var r="",n=0;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=O));return r}(n)}e.kMaxLength=f,p.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo()}catch(t){return!1}}(),p.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(p.prototype,"parent",{enumerable:!0,get:function(){if(p.isBuffer(this))return this.buffer}}),Object.defineProperty(p.prototype,"offset",{enumerable:!0,get:function(){if(p.isBuffer(this))return this.byteOffset}}),p.poolSize=8192,p.from=function(t,e,r){return d(t,e,r)},Object.setPrototypeOf(p.prototype,Uint8Array.prototype),Object.setPrototypeOf(p,Uint8Array),p.alloc=function(t,e,r){return function(t,e,r){return v(t),t<=0?h(t):void 0!==e?"string"==typeof r?h(t).fill(e,r):h(t).fill(e):h(t)}(t,e,r)},p.allocUnsafe=function(t){return g(t)},p.allocUnsafeSlow=function(t){return g(t)},p.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==p.prototype},p.compare=function(t,e){if(tt(t,Uint8Array)&&(t=p.from(t,t.offset,t.byteLength)),tt(e,Uint8Array)&&(e=p.from(e,e.offset,e.byteLength)),!p.isBuffer(t)||!p.isBuffer(e))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;for(var r=t.length,n=e.length,i=0,a=Math.min(r,n);i<a;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0},p.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},p.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return p.alloc(0);var r;if(void 0===e)for(e=0,r=0;r<t.length;++r)e+=t[r].length;var n=p.allocUnsafe(e),i=0;for(r=0;r<t.length;++r){var a=t[r];if(tt(a,Uint8Array))i+a.length>n.length?(p.isBuffer(a)||(a=p.from(a)),a.copy(n,i)):Uint8Array.prototype.set.call(n,a,i);else{if(!p.isBuffer(a))throw new TypeError('"list" argument must be an Array of Buffers');a.copy(n,i)}i+=a.length}return n},p.byteLength=b,p.prototype._isBuffer=!0,p.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)w(this,e,e+1);return this},p.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)w(this,e,e+3),w(this,e+1,e+2);return this},p.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)w(this,e,e+7),w(this,e+1,e+6),w(this,e+2,e+5),w(this,e+3,e+4);return this},p.prototype.toString=function(){var t=this.length;return 0===t?"":0===arguments.length?P(this,0,t):_.apply(this,arguments)},p.prototype.toLocaleString=p.prototype.toString,p.prototype.equals=function(t){if(!p.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===p.compare(this,t)},p.prototype.inspect=function(){var t="",r=e.INSPECT_MAX_BYTES;return t=this.toString("hex",0,r).replace(/(.{2})/g,"$1 ").trim(),this.length>r&&(t+=" ... "),"<Buffer "+t+">"},c&&(p.prototype[c]=p.prototype.inspect),p.prototype.compare=function(t,e,r,n,i){if(tt(t,Uint8Array)&&(t=p.from(t,t.offset,t.byteLength)),!p.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+s(t));if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;for(var a=(i>>>=0)-(n>>>=0),o=(r>>>=0)-(e>>>=0),l=Math.min(a,o),u=this.slice(n,i),c=t.slice(e,r),f=0;f<l;++f)if(u[f]!==c[f]){a=u[f],o=c[f];break}return a<o?-1:o<a?1:0},p.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},p.prototype.indexOf=function(t,e,r){return T(this,t,e,r,!0)},p.prototype.lastIndexOf=function(t,e,r){return T(this,t,e,r,!1)},p.prototype.write=function(t,e,r,n){if(void 0===e)n="utf8",r=this.length,e=0;else if(void 0===r&&"string"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var a=!1;;)switch(n){case"hex":return A(this,t,e,r);case"utf8":case"utf-8":return M(this,t,e,r);case"ascii":case"latin1":case"binary":return S(this,t,e,r);case"base64":return E(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return L(this,t,e,r);default:if(a)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),a=!0}},p.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var O=4096;function I(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(127&t[i]);return n}function D(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(t[i]);return n}function z(t,e,r){var n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);for(var i="",a=e;a<r;++a)i+=rt[t[a]];return i}function R(t,e,r){for(var n=t.slice(e,r),i="",a=0;a<n.length-1;a+=2)i+=String.fromCharCode(n[a]+256*n[a+1]);return i}function F(t,e,r){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>r)throw new RangeError("Trying to access beyond buffer length")}function B(t,e,r,n,i,a){if(!p.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||e<a)throw new RangeError('"value" argument is out of bounds');if(r+n>t.length)throw new RangeError("Index out of range")}function N(t,e,r,n,i){Y(e,n,i,t,r,7);var a=Number(e&BigInt(4294967295));t[r++]=a,a>>=8,t[r++]=a,a>>=8,t[r++]=a,a>>=8,t[r++]=a;var o=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,r}function j(t,e,r,n,i){Y(e,n,i,t,r,7);var a=Number(e&BigInt(4294967295));t[r+7]=a,a>>=8,t[r+6]=a,a>>=8,t[r+5]=a,a>>=8,t[r+4]=a;var o=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=o,o>>=8,t[r+2]=o,o>>=8,t[r+1]=o,o>>=8,t[r]=o,r+8}function U(t,e,r,n,i,a){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function V(t,e,r,n,i){return e=+e,r>>>=0,i||U(t,0,r,4),u.write(t,e,r,n,23,4),r+4}function H(t,e,r,n,i){return e=+e,r>>>=0,i||U(t,0,r,8),u.write(t,e,r,n,52,8),r+8}p.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t);var n=this.subarray(t,e);return Object.setPrototypeOf(n,p.prototype),n},p.prototype.readUintLE=p.prototype.readUIntLE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=this[t],i=1,a=0;++a<e&&(i*=256);)n+=this[t+a]*i;return n},p.prototype.readUintBE=p.prototype.readUIntBE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},p.prototype.readUint8=p.prototype.readUInt8=function(t,e){return t>>>=0,e||F(t,1,this.length),this[t]},p.prototype.readUint16LE=p.prototype.readUInt16LE=function(t,e){return t>>>=0,e||F(t,2,this.length),this[t]|this[t+1]<<8},p.prototype.readUint16BE=p.prototype.readUInt16BE=function(t,e){return t>>>=0,e||F(t,2,this.length),this[t]<<8|this[t+1]},p.prototype.readUint32LE=p.prototype.readUInt32LE=function(t,e){return t>>>=0,e||F(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},p.prototype.readUint32BE=p.prototype.readUInt32BE=function(t,e){return t>>>=0,e||F(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},p.prototype.readBigUInt64LE=nt((function(t){W(t>>>=0,"offset");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=e+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,24),i=this[++t]+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+r*Math.pow(2,24);return BigInt(n)+(BigInt(i)<<BigInt(32))})),p.prototype.readBigUInt64BE=nt((function(t){W(t>>>=0,"offset");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=e*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+this[++t],i=this[++t]*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+r;return(BigInt(n)<<BigInt(32))+BigInt(i)})),p.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=this[t],i=1,a=0;++a<e&&(i*=256);)n+=this[t+a]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*e)),n},p.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=e,i=1,a=this[t+--n];n>0&&(i*=256);)a+=this[t+--n]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*e)),a},p.prototype.readInt8=function(t,e){return t>>>=0,e||F(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},p.prototype.readInt16LE=function(t,e){t>>>=0,e||F(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},p.prototype.readInt16BE=function(t,e){t>>>=0,e||F(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},p.prototype.readInt32LE=function(t,e){return t>>>=0,e||F(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},p.prototype.readInt32BE=function(t,e){return t>>>=0,e||F(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},p.prototype.readBigInt64LE=nt((function(t){W(t>>>=0,"offset");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=this[t+4]+this[t+5]*Math.pow(2,8)+this[t+6]*Math.pow(2,16)+(r<<24);return(BigInt(n)<<BigInt(32))+BigInt(e+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,24))})),p.prototype.readBigInt64BE=nt((function(t){W(t>>>=0,"offset");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=(e<<24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+this[++t];return(BigInt(n)<<BigInt(32))+BigInt(this[++t]*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+r)})),p.prototype.readFloatLE=function(t,e){return t>>>=0,e||F(t,4,this.length),u.read(this,t,!0,23,4)},p.prototype.readFloatBE=function(t,e){return t>>>=0,e||F(t,4,this.length),u.read(this,t,!1,23,4)},p.prototype.readDoubleLE=function(t,e){return t>>>=0,e||F(t,8,this.length),u.read(this,t,!0,52,8)},p.prototype.readDoubleBE=function(t,e){return t>>>=0,e||F(t,8,this.length),u.read(this,t,!1,52,8)},p.prototype.writeUintLE=p.prototype.writeUIntLE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||B(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,a=0;for(this[e]=255&t;++a<r&&(i*=256);)this[e+a]=t/i&255;return e+r},p.prototype.writeUintBE=p.prototype.writeUIntBE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||B(this,t,e,r,Math.pow(2,8*r)-1,0);var i=r-1,a=1;for(this[e+i]=255&t;--i>=0&&(a*=256);)this[e+i]=t/a&255;return e+r},p.prototype.writeUint8=p.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,1,255,0),this[e]=255&t,e+1},p.prototype.writeUint16LE=p.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeUint16BE=p.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeUint32LE=p.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},p.prototype.writeUint32BE=p.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigUInt64LE=nt((function(t){return N(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt("0xffffffffffffffff"))})),p.prototype.writeBigUInt64BE=nt((function(t){return j(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt("0xffffffffffffffff"))})),p.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);B(this,t,e,r,i-1,-i)}var a=0,o=1,s=0;for(this[e]=255&t;++a<r&&(o*=256);)t<0&&0===s&&0!==this[e+a-1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+r},p.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);B(this,t,e,r,i-1,-i)}var a=r-1,o=1,s=0;for(this[e+a]=255&t;--a>=0&&(o*=256);)t<0&&0===s&&0!==this[e+a+1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+r},p.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},p.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},p.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigInt64LE=nt((function(t){return N(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),p.prototype.writeBigInt64BE=nt((function(t){return j(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),p.prototype.writeFloatLE=function(t,e,r){return V(this,t,e,!0,r)},p.prototype.writeFloatBE=function(t,e,r){return V(this,t,e,!1,r)},p.prototype.writeDoubleLE=function(t,e,r){return H(this,t,e,!0,r)},p.prototype.writeDoubleBE=function(t,e,r){return H(this,t,e,!1,r)},p.prototype.copy=function(t,e,r,n){if(!p.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e<n-r&&(n=t.length-e+r);var i=n-r;return this===t&&"function"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(e,r,n):Uint8Array.prototype.set.call(t,this.subarray(r,n),e),i},p.prototype.fill=function(t,e,r,n){if("string"==typeof t){if("string"==typeof e?(n=e,e=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!p.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===t.length){var i=t.charCodeAt(0);("utf8"===n&&i<128||"latin1"===n)&&(t=i)}}else"number"==typeof t?t&=255:"boolean"==typeof t&&(t=Number(t));if(e<0||this.length<e||this.length<r)throw new RangeError("Out of range index");if(r<=e)return this;var a;if(e>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(a=e;a<r;++a)this[a]=t;else{var o=p.isBuffer(t)?t:p.from(t,n),s=o.length;if(0===s)throw new TypeError('The value "'+t+'" is invalid for argument "value"');for(a=0;a<r-e;++a)this[a+e]=o[a%s]}return this};var q={};function G(t,e,r){q[t]=function(r){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&i(t,e)}(p,r);var l,u,c,f,h=(c=p,f=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,e=o(c);if(f){var r=o(this).constructor;t=Reflect.construct(e,arguments,r)}else t=e.apply(this,arguments);return function(t,e){if(e&&("object"===s(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return a(t)}(this,t)});function p(){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,p),r=h.call(this),Object.defineProperty(a(r),"message",{value:e.apply(a(r),arguments),writable:!0,configurable:!0}),r.name="".concat(r.name," [").concat(t,"]"),r.stack,delete r.name,r}return l=p,(u=[{key:"code",get:function(){return t},set:function(t){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:t,writable:!0})}},{key:"toString",value:function(){return"".concat(this.name," [").concat(t,"]: ").concat(this.message)}}])&&n(l.prototype,u),Object.defineProperty(l,"prototype",{writable:!1}),p}(r)}function Z(t){for(var e="",r=t.length,n="-"===t[0]?1:0;r>=n+4;r-=3)e="_".concat(t.slice(r-3,r)).concat(e);return"".concat(t.slice(0,r)).concat(e)}function Y(t,e,r,n,i,a){if(t>r||t<e){var o,s="bigint"==typeof e?"n":"";throw o=a>3?0===e||e===BigInt(0)?">= 0".concat(s," and < 2").concat(s," ** ").concat(8*(a+1)).concat(s):">= -(2".concat(s," ** ").concat(8*(a+1)-1).concat(s,") and < 2 ** ")+"".concat(8*(a+1)-1).concat(s):">= ".concat(e).concat(s," and <= ").concat(r).concat(s),new q.ERR_OUT_OF_RANGE("value",o,t)}!function(t,e,r){W(e,"offset"),void 0!==t[e]&&void 0!==t[e+r]||X(e,t.length-(r+1))}(n,i,a)}function W(t,e){if("number"!=typeof t)throw new q.ERR_INVALID_ARG_TYPE(e,"number",t)}function X(t,e,r){if(Math.floor(t)!==t)throw W(t,r),new q.ERR_OUT_OF_RANGE(r||"offset","an integer",t);if(e<0)throw new q.ERR_BUFFER_OUT_OF_BOUNDS;throw new q.ERR_OUT_OF_RANGE(r||"offset",">= ".concat(r?1:0," and <= ").concat(e),t)}G("ERR_BUFFER_OUT_OF_BOUNDS",(function(t){return t?"".concat(t," is outside of buffer bounds"):"Attempt to access memory outside buffer bounds"}),RangeError),G("ERR_INVALID_ARG_TYPE",(function(t,e){return'The "'.concat(t,'" argument must be of type number. Received type ').concat(s(e))}),TypeError),G("ERR_OUT_OF_RANGE",(function(t,e,r){var n='The value of "'.concat(t,'" is out of range.'),i=r;return Number.isInteger(r)&&Math.abs(r)>Math.pow(2,32)?i=Z(String(r)):"bigint"==typeof r&&(i=String(r),(r>Math.pow(BigInt(2),BigInt(32))||r<-Math.pow(BigInt(2),BigInt(32)))&&(i=Z(i)),i+="n"),n+" It must be ".concat(e,". Received ").concat(i)}),RangeError);var J=/[^+/0-9A-Za-z-_]/g;function K(t,e){var r;e=e||1/0;for(var n=t.length,i=null,a=[],o=0;o<n;++o){if((r=t.charCodeAt(o))>55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&a.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&a.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;a.push(r)}else if(r<2048){if((e-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function $(t){return l.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(J,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function Q(t,e,r,n){var i;for(i=0;i<n&&!(i+r>=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function tt(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function et(t){return t!=t}var rt=function(){for(var t="0123456789abcdef",e=new Array(256),r=0;r<16;++r)for(var n=16*r,i=0;i<16;++i)e[n+i]=t[r]+t[i];return e}();function nt(t){return"undefined"==typeof BigInt?it:t}function it(){throw new Error("BigInt not supported")}},35791:function(t){"use strict";t.exports=i,t.exports.isMobile=i,t.exports.default=i;var e=/(android|bb\d+|meego).+mobile|armv7l|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series[46]0|samsungbrowser.*mobile|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i,r=/CrOS/,n=/android|ipad|playbook|silk/i;function i(t){t||(t={});var i=t.ua;if(i||"undefined"==typeof navigator||(i=navigator.userAgent),i&&i.headers&&"string"==typeof i.headers["user-agent"]&&(i=i.headers["user-agent"]),"string"!=typeof i)return!1;var a=e.test(i)&&!r.test(i)||!!t.tablet&&n.test(i);return!a&&t.tablet&&t.featureDetect&&navigator&&navigator.maxTouchPoints>1&&-1!==i.indexOf("Macintosh")&&-1!==i.indexOf("Safari")&&(a=!0),a}},86781:function(t,e,r){"use strict";r.r(e),r.d(e,{sankeyCenter:function(){return h},sankeyCircular:function(){return C},sankeyJustify:function(){return f},sankeyLeft:function(){return u},sankeyRight:function(){return c}});var n=r(33064),i=r(15140),a=r(45879),o=r(2502),s=r.n(o);function l(t){return t.target.depth}function u(t){return t.depth}function c(t,e){return e-1-t.height}function f(t,e){return t.sourceLinks.length?t.depth:e-1}function h(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?(0,n.VV)(t.sourceLinks,l)-1:0}function p(t){return function(){return t}}var d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};function v(t,e){return y(t.source,e.source)||t.index-e.index}function g(t,e){return y(t.target,e.target)||t.index-e.index}function y(t,e){return t.partOfCycle===e.partOfCycle?t.y0-e.y0:"top"===t.circularLinkType||"bottom"===e.circularLinkType?-1:1}function m(t){return t.value}function x(t){return(t.y0+t.y1)/2}function b(t){return x(t.source)}function _(t){return x(t.target)}function w(t){return t.index}function T(t){return t.nodes}function k(t){return t.links}function A(t,e){var r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function M(t,e){return e(t)}var S=25,E=10,L=.3;function C(){var t,e,r=0,a=0,o=1,l=1,u=24,c=w,h=f,M=T,C=k,O=32,D=2,z=null;function F(){var f={nodes:M.apply(null,arguments),links:C.apply(null,arguments)};!function(t){t.nodes.forEach((function(t,e){t.index=e,t.sourceLinks=[],t.targetLinks=[]}));var e=(0,i.UI)(t.nodes,c);t.links.forEach((function(t,r){t.index=r;var n=t.source,i=t.target;"object"!==(void 0===n?"undefined":d(n))&&(n=t.source=A(e,n)),"object"!==(void 0===i?"undefined":d(i))&&(i=t.target=A(e,i)),n.sourceLinks.push(t),i.targetLinks.push(t)}))}(f),function(t,e,r){var n=0;if(null===r){for(var i=[],a=0;a<t.links.length;a++){var o=t.links[a],l=o.source.index,u=o.target.index;i[l]||(i[l]=[]),i[u]||(i[u]=[]),-1===i[l].indexOf(u)&&i[l].push(u)}var c=s()(i);c.sort((function(t,e){return t.length-e.length}));var f={};for(a=0;a<c.length;a++){var h=c[a].slice(-2);f[h[0]]||(f[h[0]]={}),f[h[0]][h[1]]=!0}t.links.forEach((function(t){var e=t.target.index,r=t.source.index;e===r||f[r]&&f[r][e]?(t.circular=!0,t.circularLinkID=n,n+=1):t.circular=!1}))}else t.links.forEach((function(t){t.source[r]<t.target[r]?t.circular=!1:(t.circular=!0,t.circularLinkID=n,n+=1)}))}(f,0,z),function(t){t.nodes.forEach((function(t){t.partOfCycle=!1,t.value=Math.max((0,n.Sm)(t.sourceLinks,m),(0,n.Sm)(t.targetLinks,m)),t.sourceLinks.forEach((function(e){e.circular&&(t.partOfCycle=!0,t.circularLinkType=e.circularLinkType)})),t.targetLinks.forEach((function(e){e.circular&&(t.partOfCycle=!0,t.circularLinkType=e.circularLinkType)}))}))}(f),function(t){var e,r,n;for(e=t.nodes,r=[],n=0;e.length;++n,e=r,r=[])e.forEach((function(t){t.depth=n,t.sourceLinks.forEach((function(t){r.indexOf(t.target)<0&&!t.circular&&r.push(t.target)}))}));for(e=t.nodes,r=[],n=0;e.length;++n,e=r,r=[])e.forEach((function(t){t.height=n,t.targetLinks.forEach((function(t){r.indexOf(t.source)<0&&!t.circular&&r.push(t.source)}))}));t.nodes.forEach((function(t){t.column=Math.floor(h.call(null,t,n))}))}(f),P(f,c),function(s,c,f){var h=(0,i.b1)().key((function(t){return t.column})).sortKeys(n.j2).entries(s.nodes).map((function(t){return t.values}));(function(i){if(e){var c=1/0;h.forEach((function(t){var r=l*e/(t.length+1);c=r<c?r:c})),t=c}var f=(0,n.VV)(h,(function(e){return(l-a-(e.length-1)*t)/(0,n.Sm)(e,m)}));f*=L,s.links.forEach((function(t){t.width=t.value*f}));var p=function(t){var e=0,r=0,i=0,a=0,o=(0,n.Fp)(t.nodes,(function(t){return t.column}));return t.links.forEach((function(t){t.circular&&("top"==t.circularLinkType?e+=t.width:r+=t.width,0==t.target.column&&(a+=t.width),t.source.column==o&&(i+=t.width))})),{top:e=e>0?e+S+E:e,bottom:r=r>0?r+S+E:r,left:a=a>0?a+S+E:a,right:i=i>0?i+S+E:i}}(s),d=function(t,e){var i=(0,n.Fp)(t.nodes,(function(t){return t.column})),s=o-r,c=l-a,f=s/(s+e.right+e.left),h=c/(c+e.top+e.bottom);return r=r*f+e.left,o=0==e.right?o:o*f,a=a*h+e.top,l*=h,t.nodes.forEach((function(t){t.x0=r+t.column*((o-r-u)/i),t.x1=t.x0+u})),h}(s,p);f*=d,s.links.forEach((function(t){t.width=t.value*f})),h.forEach((function(t){var e=t.length;t.forEach((function(t,r){t.depth==h.length-1&&1==e||0==t.depth&&1==e?(t.y0=l/2-t.value*f,t.y1=t.y0+t.value*f):t.partOfCycle?0==I(t,i)?(t.y0=l/2+r,t.y1=t.y0+t.value*f):"top"==t.circularLinkType?(t.y0=a+r,t.y1=t.y0+t.value*f):(t.y0=l-t.value*f-r,t.y1=t.y0+t.value*f):0==p.top||0==p.bottom?(t.y0=(l-a)/e*r,t.y1=t.y0+t.value*f):(t.y0=(l-a)/2-e/2+r,t.y1=t.y0+t.value*f)}))}))})(f),g();for(var p=1,d=c;d>0;--d)v(p*=.99,f),g();function v(t,e){var r=h.length;h.forEach((function(i){var a=i.length,o=i[0].depth;i.forEach((function(i){var s;if(i.sourceLinks.length||i.targetLinks.length)if(i.partOfCycle&&I(i,e)>0);else if(0==o&&1==a)s=i.y1-i.y0,i.y0=l/2-s/2,i.y1=l/2+s/2;else if(o==r-1&&1==a)s=i.y1-i.y0,i.y0=l/2-s/2,i.y1=l/2+s/2;else{var u=(0,n.J6)(i.sourceLinks,_),c=(0,n.J6)(i.targetLinks,b),f=((u&&c?(u+c)/2:u||c)-x(i))*t;i.y0+=f,i.y1+=f}}))}))}function g(){h.forEach((function(e){var r,n,i,o=a,s=e.length;for(e.sort(y),i=0;i<s;++i)(n=o-(r=e[i]).y0)>0&&(r.y0+=n,r.y1+=n),o=r.y1+t;if((n=o-t-l)>0)for(o=r.y0-=n,r.y1-=n,i=s-2;i>=0;--i)(n=(r=e[i]).y1+t-o)>0&&(r.y0-=n,r.y1-=n),o=r.y0}))}}(f,O,c),B(f);for(var p=0;p<4;p++)W(f,l,c),X(f,0,c),Z(f,a,l,c),W(f,l,c),X(f,0,c);return function(t,e,r){var i=t.nodes,a=t.links,o=!1,s=!1;if(a.forEach((function(t){"top"==t.circularLinkType?o=!0:"bottom"==t.circularLinkType&&(s=!0)})),0==o||0==s){var l=(0,n.VV)(i,(function(t){return t.y0})),u=(r-e)/((0,n.Fp)(i,(function(t){return t.y1}))-l);i.forEach((function(t){var e=(t.y1-t.y0)*u;t.y0=(t.y0-l)*u,t.y1=t.y0+e})),a.forEach((function(t){t.y0=(t.y0-l)*u,t.y1=(t.y1-l)*u,t.width=t.width*u}))}}(f,a,l),R(f,D,l,c),f}function B(t){t.nodes.forEach((function(t){t.sourceLinks.sort(g),t.targetLinks.sort(v)})),t.nodes.forEach((function(t){var e=t.y0,r=e,n=t.y1,i=n;t.sourceLinks.forEach((function(t){t.circular?(t.y0=n-t.width/2,n-=t.width):(t.y0=e+t.width/2,e+=t.width)})),t.targetLinks.forEach((function(t){t.circular?(t.y1=i-t.width/2,i-=t.width):(t.y1=r+t.width/2,r+=t.width)}))}))}return F.nodeId=function(t){return arguments.length?(c="function"==typeof t?t:p(t),F):c},F.nodeAlign=function(t){return arguments.length?(h="function"==typeof t?t:p(t),F):h},F.nodeWidth=function(t){return arguments.length?(u=+t,F):u},F.nodePadding=function(e){return arguments.length?(t=+e,F):t},F.nodes=function(t){return arguments.length?(M="function"==typeof t?t:p(t),F):M},F.links=function(t){return arguments.length?(C="function"==typeof t?t:p(t),F):C},F.size=function(t){return arguments.length?(r=a=0,o=+t[0],l=+t[1],F):[o-r,l-a]},F.extent=function(t){return arguments.length?(r=+t[0][0],o=+t[1][0],a=+t[0][1],l=+t[1][1],F):[[r,a],[o,l]]},F.iterations=function(t){return arguments.length?(O=+t,F):O},F.circularLinkGap=function(t){return arguments.length?(D=+t,F):D},F.nodePaddingRatio=function(t){return arguments.length?(e=+t,F):e},F.sortNodes=function(t){return arguments.length?(z=t,F):z},F.update=function(t){return P(t,c),B(t),t.links.forEach((function(t){t.circular&&(t.circularLinkType=t.y0+t.y1<l?"top":"bottom",t.source.circularLinkType=t.circularLinkType,t.target.circularLinkType=t.circularLinkType)})),W(t,l,c,!1),X(t,0,c),R(t,D,l,c),t},F}function P(t,e){var r=0,n=0;t.links.forEach((function(i){i.circular&&(i.source.circularLinkType||i.target.circularLinkType?i.circularLinkType=i.source.circularLinkType?i.source.circularLinkType:i.target.circularLinkType:i.circularLinkType=r<n?"top":"bottom","top"==i.circularLinkType?r+=1:n+=1,t.nodes.forEach((function(t){M(t,e)!=M(i.source,e)&&M(t,e)!=M(i.target,e)||(t.circularLinkType=i.circularLinkType)})))})),t.links.forEach((function(t){t.circular&&(t.source.circularLinkType==t.target.circularLinkType&&(t.circularLinkType=t.source.circularLinkType),$(t,e)&&(t.circularLinkType=t.source.circularLinkType))}))}function O(t){var e=Math.abs(t.y1-t.y0),r=Math.abs(t.target.x0-t.source.x1);return Math.atan(r/e)}function I(t,e){var r=0;t.sourceLinks.forEach((function(t){r=t.circular&&!$(t,e)?r+1:r}));var n=0;return t.targetLinks.forEach((function(t){n=t.circular&&!$(t,e)?n+1:n})),r+n}function D(t){var e=t.source.sourceLinks,r=0;e.forEach((function(t){r=t.circular?r+1:r}));var n=t.target.targetLinks,i=0;return n.forEach((function(t){i=t.circular?i+1:i})),!(r>1||i>1)}function z(t,e,r){return t.sort(F),t.forEach((function(n,i){var a,o,s=0;if($(n,r)&&D(n))n.circularPathData.verticalBuffer=s+n.width/2;else{for(var l=0;l<i;l++)if(a=t[i],o=t[l],!(a.source.column<o.target.column||a.target.column>o.source.column)){var u=t[l].circularPathData.verticalBuffer+t[l].width/2+e;s=u>s?u:s}n.circularPathData.verticalBuffer=s+n.width/2}})),t}function R(t,e,r,i){var o=(0,n.VV)(t.links,(function(t){return t.source.y0}));t.links.forEach((function(t){t.circular&&(t.circularPathData={})})),z(t.links.filter((function(t){return"top"==t.circularLinkType})),e,i),z(t.links.filter((function(t){return"bottom"==t.circularLinkType})),e,i),t.links.forEach((function(n){if(n.circular){if(n.circularPathData.arcRadius=n.width+E,n.circularPathData.leftNodeBuffer=5,n.circularPathData.rightNodeBuffer=5,n.circularPathData.sourceWidth=n.source.x1-n.source.x0,n.circularPathData.sourceX=n.source.x0+n.circularPathData.sourceWidth,n.circularPathData.targetX=n.target.x0,n.circularPathData.sourceY=n.y0,n.circularPathData.targetY=n.y1,$(n,i)&&D(n))n.circularPathData.leftSmallArcRadius=E+n.width/2,n.circularPathData.leftLargeArcRadius=E+n.width/2,n.circularPathData.rightSmallArcRadius=E+n.width/2,n.circularPathData.rightLargeArcRadius=E+n.width/2,"bottom"==n.circularLinkType?(n.circularPathData.verticalFullExtent=n.source.y1+S+n.circularPathData.verticalBuffer,n.circularPathData.verticalLeftInnerExtent=n.circularPathData.verticalFullExtent-n.circularPathData.leftLargeArcRadius,n.circularPathData.verticalRightInnerExtent=n.circularPathData.verticalFullExtent-n.circularPathData.rightLargeArcRadius):(n.circularPathData.verticalFullExtent=n.source.y0-S-n.circularPathData.verticalBuffer,n.circularPathData.verticalLeftInnerExtent=n.circularPathData.verticalFullExtent+n.circularPathData.leftLargeArcRadius,n.circularPathData.verticalRightInnerExtent=n.circularPathData.verticalFullExtent+n.circularPathData.rightLargeArcRadius);else{var s=n.source.column,l=n.circularLinkType,u=t.links.filter((function(t){return t.source.column==s&&t.circularLinkType==l}));"bottom"==n.circularLinkType?u.sort(N):u.sort(B);var c=0;u.forEach((function(t,r){t.circularLinkID==n.circularLinkID&&(n.circularPathData.leftSmallArcRadius=E+n.width/2+c,n.circularPathData.leftLargeArcRadius=E+n.width/2+r*e+c),c+=t.width})),s=n.target.column,u=t.links.filter((function(t){return t.target.column==s&&t.circularLinkType==l})),"bottom"==n.circularLinkType?u.sort(U):u.sort(j),c=0,u.forEach((function(t,r){t.circularLinkID==n.circularLinkID&&(n.circularPathData.rightSmallArcRadius=E+n.width/2+c,n.circularPathData.rightLargeArcRadius=E+n.width/2+r*e+c),c+=t.width})),"bottom"==n.circularLinkType?(n.circularPathData.verticalFullExtent=Math.max(r,n.source.y1,n.target.y1)+S+n.circularPathData.verticalBuffer,n.circularPathData.verticalLeftInnerExtent=n.circularPathData.verticalFullExtent-n.circularPathData.leftLargeArcRadius,n.circularPathData.verticalRightInnerExtent=n.circularPathData.verticalFullExtent-n.circularPathData.rightLargeArcRadius):(n.circularPathData.verticalFullExtent=o-S-n.circularPathData.verticalBuffer,n.circularPathData.verticalLeftInnerExtent=n.circularPathData.verticalFullExtent+n.circularPathData.leftLargeArcRadius,n.circularPathData.verticalRightInnerExtent=n.circularPathData.verticalFullExtent+n.circularPathData.rightLargeArcRadius)}n.circularPathData.leftInnerExtent=n.circularPathData.sourceX+n.circularPathData.leftNodeBuffer,n.circularPathData.rightInnerExtent=n.circularPathData.targetX-n.circularPathData.rightNodeBuffer,n.circularPathData.leftFullExtent=n.circularPathData.sourceX+n.circularPathData.leftLargeArcRadius+n.circularPathData.leftNodeBuffer,n.circularPathData.rightFullExtent=n.circularPathData.targetX-n.circularPathData.rightLargeArcRadius-n.circularPathData.rightNodeBuffer}if(n.circular)n.path=function(t){return"top"==t.circularLinkType?"M"+t.circularPathData.sourceX+" "+t.circularPathData.sourceY+" L"+t.circularPathData.leftInnerExtent+" "+t.circularPathData.sourceY+" A"+t.circularPathData.leftLargeArcRadius+" "+t.circularPathData.leftSmallArcRadius+" 0 0 0 "+t.circularPathData.leftFullExtent+" "+(t.circularPathData.sourceY-t.circularPathData.leftSmallArcRadius)+" L"+t.circularPathData.leftFullExtent+" "+t.circularPathData.verticalLeftInnerExtent+" A"+t.circularPathData.leftLargeArcRadius+" "+t.circularPathData.leftLargeArcRadius+" 0 0 0 "+t.circularPathData.leftInnerExtent+" "+t.circularPathData.verticalFullExtent+" L"+t.circularPathData.rightInnerExtent+" "+t.circularPathData.verticalFullExtent+" A"+t.circularPathData.rightLargeArcRadius+" "+t.circularPathData.rightLargeArcRadius+" 0 0 0 "+t.circularPathData.rightFullExtent+" "+t.circularPathData.verticalRightInnerExtent+" L"+t.circularPathData.rightFullExtent+" "+(t.circularPathData.targetY-t.circularPathData.rightSmallArcRadius)+" A"+t.circularPathData.rightLargeArcRadius+" "+t.circularPathData.rightSmallArcRadius+" 0 0 0 "+t.circularPathData.rightInnerExtent+" "+t.circularPathData.targetY+" L"+t.circularPathData.targetX+" "+t.circularPathData.targetY:"M"+t.circularPathData.sourceX+" "+t.circularPathData.sourceY+" L"+t.circularPathData.leftInnerExtent+" "+t.circularPathData.sourceY+" A"+t.circularPathData.leftLargeArcRadius+" "+t.circularPathData.leftSmallArcRadius+" 0 0 1 "+t.circularPathData.leftFullExtent+" "+(t.circularPathData.sourceY+t.circularPathData.leftSmallArcRadius)+" L"+t.circularPathData.leftFullExtent+" "+t.circularPathData.verticalLeftInnerExtent+" A"+t.circularPathData.leftLargeArcRadius+" "+t.circularPathData.leftLargeArcRadius+" 0 0 1 "+t.circularPathData.leftInnerExtent+" "+t.circularPathData.verticalFullExtent+" L"+t.circularPathData.rightInnerExtent+" "+t.circularPathData.verticalFullExtent+" A"+t.circularPathData.rightLargeArcRadius+" "+t.circularPathData.rightLargeArcRadius+" 0 0 1 "+t.circularPathData.rightFullExtent+" "+t.circularPathData.verticalRightInnerExtent+" L"+t.circularPathData.rightFullExtent+" "+(t.circularPathData.targetY+t.circularPathData.rightSmallArcRadius)+" A"+t.circularPathData.rightLargeArcRadius+" "+t.circularPathData.rightSmallArcRadius+" 0 0 1 "+t.circularPathData.rightInnerExtent+" "+t.circularPathData.targetY+" L"+t.circularPathData.targetX+" "+t.circularPathData.targetY}(n);else{var f=(0,a.h5)().source((function(t){return[t.source.x0+(t.source.x1-t.source.x0),t.y0]})).target((function(t){return[t.target.x0,t.y1]}));n.path=f(n)}}))}function F(t,e){return V(t)==V(e)?"bottom"==t.circularLinkType?N(t,e):B(t,e):V(e)-V(t)}function B(t,e){return t.y0-e.y0}function N(t,e){return e.y0-t.y0}function j(t,e){return t.y1-e.y1}function U(t,e){return e.y1-t.y1}function V(t){return t.target.column-t.source.column}function H(t){return t.target.x0-t.source.x1}function q(t,e){var r=O(t),n=H(e)/Math.tan(r);return"up"==K(t)?t.y1+n:t.y1-n}function G(t,e){var r=O(t),n=H(e)/Math.tan(r);return"up"==K(t)?t.y1-n:t.y1+n}function Z(t,e,r,n){t.links.forEach((function(i){if(!i.circular&&i.target.column-i.source.column>1){var a=i.source.column+1,o=i.target.column-1,s=1,l=o-a+1;for(s=1;a<=o;a++,s++)t.nodes.forEach((function(o){if(o.column==a){var u,c=s/(l+1),f=Math.pow(1-c,3),h=3*c*Math.pow(1-c,2),p=3*Math.pow(c,2)*(1-c),d=Math.pow(c,3),v=f*i.y0+h*i.y0+p*i.y1+d*i.y1,g=v-i.width/2,y=v+i.width/2;g>o.y0&&g<o.y1?(u=o.y1-g+10,u="bottom"==o.circularLinkType?u:-u,o=Y(o,u,e,r),t.nodes.forEach((function(t){var i,a;M(t,n)!=M(o,n)&&t.column==o.column&&(a=t,(i=o).y0>a.y0&&i.y0<a.y1||i.y1>a.y0&&i.y1<a.y1||i.y0<a.y0&&i.y1>a.y1)&&Y(t,u,e,r)}))):(y>o.y0&&y<o.y1||g<o.y0&&y>o.y1)&&(u=y-o.y0+10,o=Y(o,u,e,r),t.nodes.forEach((function(t){M(t,n)!=M(o,n)&&t.column==o.column&&t.y0<o.y1&&t.y1>o.y1&&Y(t,u,e,r)})))}}))}}))}function Y(t,e,r,n){return t.y0+e>=r&&t.y1+e<=n&&(t.y0=t.y0+e,t.y1=t.y1+e,t.targetLinks.forEach((function(t){t.y1=t.y1+e})),t.sourceLinks.forEach((function(t){t.y0=t.y0+e}))),t}function W(t,e,r,n){t.nodes.forEach((function(i){n&&i.y+(i.y1-i.y0)>e&&(i.y=i.y-(i.y+(i.y1-i.y0)-e));var a=t.links.filter((function(t){return M(t.source,r)==M(i,r)})),o=a.length;o>1&&a.sort((function(t,e){if(!t.circular&&!e.circular){if(t.target.column==e.target.column)return t.y1-e.y1;if(!J(t,e))return t.y1-e.y1;if(t.target.column>e.target.column){var r=G(e,t);return t.y1-r}if(e.target.column>t.target.column)return G(t,e)-e.y1}return t.circular&&!e.circular?"top"==t.circularLinkType?-1:1:e.circular&&!t.circular?"top"==e.circularLinkType?1:-1:t.circular&&e.circular?t.circularLinkType===e.circularLinkType&&"top"==t.circularLinkType?t.target.column===e.target.column?t.target.y1-e.target.y1:e.target.column-t.target.column:t.circularLinkType===e.circularLinkType&&"bottom"==t.circularLinkType?t.target.column===e.target.column?e.target.y1-t.target.y1:t.target.column-e.target.column:"top"==t.circularLinkType?-1:1:void 0}));var s=i.y0;a.forEach((function(t){t.y0=s+t.width/2,s+=t.width})),a.forEach((function(t,e){if("bottom"==t.circularLinkType){for(var r=e+1,n=0;r<o;r++)n+=a[r].width;t.y0=i.y1-n-t.width/2}}))}))}function X(t,e,r){t.nodes.forEach((function(e){var n=t.links.filter((function(t){return M(t.target,r)==M(e,r)})),i=n.length;i>1&&n.sort((function(t,e){if(!t.circular&&!e.circular){if(t.source.column==e.source.column)return t.y0-e.y0;if(!J(t,e))return t.y0-e.y0;if(e.source.column<t.source.column){var r=q(e,t);return t.y0-r}if(t.source.column<e.source.column)return q(t,e)-e.y0}return t.circular&&!e.circular?"top"==t.circularLinkType?-1:1:e.circular&&!t.circular?"top"==e.circularLinkType?1:-1:t.circular&&e.circular?t.circularLinkType===e.circularLinkType&&"top"==t.circularLinkType?t.source.column===e.source.column?t.source.y1-e.source.y1:t.source.column-e.source.column:t.circularLinkType===e.circularLinkType&&"bottom"==t.circularLinkType?t.source.column===e.source.column?t.source.y1-e.source.y1:e.source.column-t.source.column:"top"==t.circularLinkType?-1:1:void 0}));var a=e.y0;n.forEach((function(t){t.y1=a+t.width/2,a+=t.width})),n.forEach((function(t,r){if("bottom"==t.circularLinkType){for(var a=r+1,o=0;a<i;a++)o+=n[a].width;t.y1=e.y1-o-t.width/2}}))}))}function J(t,e){return K(t)==K(e)}function K(t){return t.y0-t.y1>0?"up":"down"}function $(t,e){return M(t.source,e)==M(t.target,e)}},30838:function(t,e,r){"use strict";r.r(e),r.d(e,{sankey:function(){return w},sankeyCenter:function(){return u},sankeyJustify:function(){return l},sankeyLeft:function(){return o},sankeyLinkHorizontal:function(){return M},sankeyRight:function(){return s}});var n=r(33064),i=r(15140);function a(t){return t.target.depth}function o(t){return t.depth}function s(t,e){return e-1-t.height}function l(t,e){return t.sourceLinks.length?t.depth:e-1}function u(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?(0,n.VV)(t.sourceLinks,a)-1:0}function c(t){return function(){return t}}function f(t,e){return p(t.source,e.source)||t.index-e.index}function h(t,e){return p(t.target,e.target)||t.index-e.index}function p(t,e){return t.y0-e.y0}function d(t){return t.value}function v(t){return(t.y0+t.y1)/2}function g(t){return v(t.source)*t.value}function y(t){return v(t.target)*t.value}function m(t){return t.index}function x(t){return t.nodes}function b(t){return t.links}function _(t,e){var r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function w(){var t=0,e=0,r=1,a=1,o=24,s=8,u=m,w=l,T=x,k=b,A=32;function M(){var l={nodes:T.apply(null,arguments),links:k.apply(null,arguments)};return function(t){t.nodes.forEach((function(t,e){t.index=e,t.sourceLinks=[],t.targetLinks=[]}));var e=(0,i.UI)(t.nodes,u);t.links.forEach((function(t,r){t.index=r;var n=t.source,i=t.target;"object"!=typeof n&&(n=t.source=_(e,n)),"object"!=typeof i&&(i=t.target=_(e,i)),n.sourceLinks.push(t),i.targetLinks.push(t)}))}(l),function(t){t.nodes.forEach((function(t){t.value=Math.max((0,n.Sm)(t.sourceLinks,d),(0,n.Sm)(t.targetLinks,d))}))}(l),function(e){var n,i,a;for(n=e.nodes,i=[],a=0;n.length;++a,n=i,i=[])n.forEach((function(t){t.depth=a,t.sourceLinks.forEach((function(t){i.indexOf(t.target)<0&&i.push(t.target)}))}));for(n=e.nodes,i=[],a=0;n.length;++a,n=i,i=[])n.forEach((function(t){t.height=a,t.targetLinks.forEach((function(t){i.indexOf(t.source)<0&&i.push(t.source)}))}));var s=(r-t-o)/(a-1);e.nodes.forEach((function(e){e.x1=(e.x0=t+Math.max(0,Math.min(a-1,Math.floor(w.call(null,e,a))))*s)+o}))}(l),function(t){var r=(0,i.b1)().key((function(t){return t.x0})).sortKeys(n.j2).entries(t.nodes).map((function(t){return t.values}));(function(){var i=(0,n.Fp)(r,(function(t){return t.length})),o=.6666666666666666*(a-e)/(i-1);s>o&&(s=o);var l=(0,n.VV)(r,(function(t){return(a-e-(t.length-1)*s)/(0,n.Sm)(t,d)}));r.forEach((function(t){t.forEach((function(t,e){t.y1=(t.y0=e)+t.value*l}))})),t.links.forEach((function(t){t.width=t.value*l}))})(),f();for(var o=1,l=A;l>0;--l)c(o*=.99),f(),u(o),f();function u(t){r.forEach((function(e){e.forEach((function(e){if(e.targetLinks.length){var r=((0,n.Sm)(e.targetLinks,g)/(0,n.Sm)(e.targetLinks,d)-v(e))*t;e.y0+=r,e.y1+=r}}))}))}function c(t){r.slice().reverse().forEach((function(e){e.forEach((function(e){if(e.sourceLinks.length){var r=((0,n.Sm)(e.sourceLinks,y)/(0,n.Sm)(e.sourceLinks,d)-v(e))*t;e.y0+=r,e.y1+=r}}))}))}function f(){r.forEach((function(t){var r,n,i,o=e,l=t.length;for(t.sort(p),i=0;i<l;++i)(n=o-(r=t[i]).y0)>0&&(r.y0+=n,r.y1+=n),o=r.y1+s;if((n=o-s-a)>0)for(o=r.y0-=n,r.y1-=n,i=l-2;i>=0;--i)(n=(r=t[i]).y1+s-o)>0&&(r.y0-=n,r.y1-=n),o=r.y0}))}}(l),S(l),l}function S(t){t.nodes.forEach((function(t){t.sourceLinks.sort(h),t.targetLinks.sort(f)})),t.nodes.forEach((function(t){var e=t.y0,r=e;t.sourceLinks.forEach((function(t){t.y0=e+t.width/2,e+=t.width})),t.targetLinks.forEach((function(t){t.y1=r+t.width/2,r+=t.width}))}))}return M.update=function(t){return S(t),t},M.nodeId=function(t){return arguments.length?(u="function"==typeof t?t:c(t),M):u},M.nodeAlign=function(t){return arguments.length?(w="function"==typeof t?t:c(t),M):w},M.nodeWidth=function(t){return arguments.length?(o=+t,M):o},M.nodePadding=function(t){return arguments.length?(s=+t,M):s},M.nodes=function(t){return arguments.length?(T="function"==typeof t?t:c(t),M):T},M.links=function(t){return arguments.length?(k="function"==typeof t?t:c(t),M):k},M.size=function(n){return arguments.length?(t=e=0,r=+n[0],a=+n[1],M):[r-t,a-e]},M.extent=function(n){return arguments.length?(t=+n[0][0],r=+n[1][0],e=+n[0][1],a=+n[1][1],M):[[t,e],[r,a]]},M.iterations=function(t){return arguments.length?(A=+t,M):A},M}var T=r(45879);function k(t){return[t.source.x1,t.y0]}function A(t){return[t.target.x0,t.y1]}function M(){return(0,T.h5)().source(k).target(A)}},39898:function(t,e,r){var n,i;(function(){var a={version:"3.8.0"},o=[].slice,s=function(t){return o.call(t)},l=self.document;function u(t){return t&&(t.ownerDocument||t.document||t).documentElement}function c(t){return t&&(t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView)}if(l)try{s(l.documentElement.childNodes)[0].nodeType}catch(t){s=function(t){for(var e=t.length,r=new Array(e);e--;)r[e]=t[e];return r}}if(Date.now||(Date.now=function(){return+new Date}),l)try{l.createElement("DIV").style.setProperty("opacity",0,"")}catch(t){var f=this.Element.prototype,h=f.setAttribute,p=f.setAttributeNS,d=this.CSSStyleDeclaration.prototype,v=d.setProperty;f.setAttribute=function(t,e){h.call(this,t,e+"")},f.setAttributeNS=function(t,e,r){p.call(this,t,e,r+"")},d.setProperty=function(t,e,r){v.call(this,t,e+"",r)}}function g(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function y(t){return null===t?NaN:+t}function m(t){return!isNaN(t)}function x(t){return{left:function(e,r,n,i){for(arguments.length<3&&(n=0),arguments.length<4&&(i=e.length);n<i;){var a=n+i>>>1;t(e[a],r)<0?n=a+1:i=a}return n},right:function(e,r,n,i){for(arguments.length<3&&(n=0),arguments.length<4&&(i=e.length);n<i;){var a=n+i>>>1;t(e[a],r)>0?i=a:n=a+1}return n}}}a.ascending=g,a.descending=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},a.min=function(t,e){var r,n,i=-1,a=t.length;if(1===arguments.length){for(;++i<a;)if(null!=(n=t[i])&&n>=n){r=n;break}for(;++i<a;)null!=(n=t[i])&&r>n&&(r=n)}else{for(;++i<a;)if(null!=(n=e.call(t,t[i],i))&&n>=n){r=n;break}for(;++i<a;)null!=(n=e.call(t,t[i],i))&&r>n&&(r=n)}return r},a.max=function(t,e){var r,n,i=-1,a=t.length;if(1===arguments.length){for(;++i<a;)if(null!=(n=t[i])&&n>=n){r=n;break}for(;++i<a;)null!=(n=t[i])&&n>r&&(r=n)}else{for(;++i<a;)if(null!=(n=e.call(t,t[i],i))&&n>=n){r=n;break}for(;++i<a;)null!=(n=e.call(t,t[i],i))&&n>r&&(r=n)}return r},a.extent=function(t,e){var r,n,i,a=-1,o=t.length;if(1===arguments.length){for(;++a<o;)if(null!=(n=t[a])&&n>=n){r=i=n;break}for(;++a<o;)null!=(n=t[a])&&(r>n&&(r=n),i<n&&(i=n))}else{for(;++a<o;)if(null!=(n=e.call(t,t[a],a))&&n>=n){r=i=n;break}for(;++a<o;)null!=(n=e.call(t,t[a],a))&&(r>n&&(r=n),i<n&&(i=n))}return[r,i]},a.sum=function(t,e){var r,n=0,i=t.length,a=-1;if(1===arguments.length)for(;++a<i;)m(r=+t[a])&&(n+=r);else for(;++a<i;)m(r=+e.call(t,t[a],a))&&(n+=r);return n},a.mean=function(t,e){var r,n=0,i=t.length,a=-1,o=i;if(1===arguments.length)for(;++a<i;)m(r=y(t[a]))?n+=r:--o;else for(;++a<i;)m(r=y(e.call(t,t[a],a)))?n+=r:--o;if(o)return n/o},a.quantile=function(t,e){var r=(t.length-1)*e+1,n=Math.floor(r),i=+t[n-1],a=r-n;return a?i+a*(t[n]-i):i},a.median=function(t,e){var r,n=[],i=t.length,o=-1;if(1===arguments.length)for(;++o<i;)m(r=y(t[o]))&&n.push(r);else for(;++o<i;)m(r=y(e.call(t,t[o],o)))&&n.push(r);if(n.length)return a.quantile(n.sort(g),.5)},a.variance=function(t,e){var r,n,i=t.length,a=0,o=0,s=-1,l=0;if(1===arguments.length)for(;++s<i;)m(r=y(t[s]))&&(o+=(n=r-a)*(r-(a+=n/++l)));else for(;++s<i;)m(r=y(e.call(t,t[s],s)))&&(o+=(n=r-a)*(r-(a+=n/++l)));if(l>1)return o/(l-1)},a.deviation=function(){var t=a.variance.apply(this,arguments);return t?Math.sqrt(t):t};var b=x(g);function _(t){return t.length}a.bisectLeft=b.left,a.bisect=a.bisectRight=b.right,a.bisector=function(t){return x(1===t.length?function(e,r){return g(t(e),r)}:t)},a.shuffle=function(t,e,r){(a=arguments.length)<3&&(r=t.length,a<2&&(e=0));for(var n,i,a=r-e;a;)i=Math.random()*a--|0,n=t[a+e],t[a+e]=t[i+e],t[i+e]=n;return t},a.permute=function(t,e){for(var r=e.length,n=new Array(r);r--;)n[r]=t[e[r]];return n},a.pairs=function(t){for(var e=0,r=t.length-1,n=t[0],i=new Array(r<0?0:r);e<r;)i[e]=[n,n=t[++e]];return i},a.transpose=function(t){if(!(i=t.length))return[];for(var e=-1,r=a.min(t,_),n=new Array(r);++e<r;)for(var i,o=-1,s=n[e]=new Array(i);++o<i;)s[o]=t[o][e];return n},a.zip=function(){return a.transpose(arguments)},a.keys=function(t){var e=[];for(var r in t)e.push(r);return e},a.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},a.entries=function(t){var e=[];for(var r in t)e.push({key:r,value:t[r]});return e},a.merge=function(t){for(var e,r,n,i=t.length,a=-1,o=0;++a<i;)o+=t[a].length;for(r=new Array(o);--i>=0;)for(e=(n=t[i]).length;--e>=0;)r[--o]=n[e];return r};var w=Math.abs;function T(t,e){for(var r in e)Object.defineProperty(t.prototype,r,{value:e[r],enumerable:!1})}function k(){this._=Object.create(null)}a.range=function(t,e,r){if(arguments.length<3&&(r=1,arguments.length<2&&(e=t,t=0)),(e-t)/r==1/0)throw new Error("infinite range");var n,i=[],a=function(t){for(var e=1;t*e%1;)e*=10;return e}(w(r)),o=-1;if(t*=a,e*=a,(r*=a)<0)for(;(n=t+r*++o)>e;)i.push(n/a);else for(;(n=t+r*++o)<e;)i.push(n/a);return i},a.map=function(t,e){var r=new k;if(t instanceof k)t.forEach((function(t,e){r.set(t,e)}));else if(Array.isArray(t)){var n,i=-1,a=t.length;if(1===arguments.length)for(;++i<a;)r.set(i,t[i]);else for(;++i<a;)r.set(e.call(t,n=t[i],i),n)}else for(var o in t)r.set(o,t[o]);return r};var A="__proto__",M="\0";function S(t){return(t+="")===A||t[0]===M?M+t:t}function E(t){return(t+="")[0]===M?t.slice(1):t}function L(t){return S(t)in this._}function C(t){return(t=S(t))in this._&&delete this._[t]}function P(){var t=[];for(var e in this._)t.push(E(e));return t}function O(){var t=0;for(var e in this._)++t;return t}function I(){for(var t in this._)return!1;return!0}function D(){this._=Object.create(null)}function z(t){return t}function R(t,e,r){return function(){var n=r.apply(e,arguments);return n===e?t:n}}function F(t,e){if(e in t)return e;e=e.charAt(0).toUpperCase()+e.slice(1);for(var r=0,n=B.length;r<n;++r){var i=B[r]+e;if(i in t)return i}}T(k,{has:L,get:function(t){return this._[S(t)]},set:function(t,e){return this._[S(t)]=e},remove:C,keys:P,values:function(){var t=[];for(var e in this._)t.push(this._[e]);return t},entries:function(){var t=[];for(var e in this._)t.push({key:E(e),value:this._[e]});return t},size:O,empty:I,forEach:function(t){for(var e in this._)t.call(this,E(e),this._[e])}}),a.nest=function(){var t,e,r={},n=[],i=[];function o(i,a,s){if(s>=n.length)return e?e.call(r,a):t?a.sort(t):a;for(var l,u,c,f,h=-1,p=a.length,d=n[s++],v=new k;++h<p;)(f=v.get(l=d(u=a[h])))?f.push(u):v.set(l,[u]);return i?(u=i(),c=function(t,e){u.set(t,o(i,e,s))}):(u={},c=function(t,e){u[t]=o(i,e,s)}),v.forEach(c),u}function s(t,e){if(e>=n.length)return t;var r=[],a=i[e++];return t.forEach((function(t,n){r.push({key:t,values:s(n,e)})})),a?r.sort((function(t,e){return a(t.key,e.key)})):r}return r.map=function(t,e){return o(e,t,0)},r.entries=function(t){return s(o(a.map,t,0),0)},r.key=function(t){return n.push(t),r},r.sortKeys=function(t){return i[n.length-1]=t,r},r.sortValues=function(e){return t=e,r},r.rollup=function(t){return e=t,r},r},a.set=function(t){var e=new D;if(t)for(var r=0,n=t.length;r<n;++r)e.add(t[r]);return e},T(D,{has:L,add:function(t){return this._[S(t+="")]=!0,t},remove:C,values:P,size:O,empty:I,forEach:function(t){for(var e in this._)t.call(this,E(e))}}),a.behavior={},a.rebind=function(t,e){for(var r,n=1,i=arguments.length;++n<i;)t[r=arguments[n]]=R(t,e,e[r]);return t};var B=["webkit","ms","moz","Moz","o","O"];function N(){}function j(){}function U(t){var e=[],r=new k;function n(){for(var r,n=e,i=-1,a=n.length;++i<a;)(r=n[i].on)&&r.apply(this,arguments);return t}return n.on=function(n,i){var a,o=r.get(n);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,a=e.indexOf(o)).concat(e.slice(a+1)),r.remove(n)),i&&e.push(r.set(n,{on:i})),t)},n}function V(){a.event.preventDefault()}function H(){for(var t,e=a.event;t=e.sourceEvent;)e=t;return e}function q(t){for(var e=new j,r=0,n=arguments.length;++r<n;)e[arguments[r]]=U(e);return e.of=function(r,n){return function(i){try{var o=i.sourceEvent=a.event;i.target=t,a.event=i,e[i.type].apply(r,n)}finally{a.event=o}}},e}a.dispatch=function(){for(var t=new j,e=-1,r=arguments.length;++e<r;)t[arguments[e]]=U(t);return t},j.prototype.on=function(t,e){var r=t.indexOf("."),n="";if(r>=0&&(n=t.slice(r+1),t=t.slice(0,r)),t)return arguments.length<2?this[t].on(n):this[t].on(n,e);if(2===arguments.length){if(null==e)for(t in this)this.hasOwnProperty(t)&&this[t].on(n,null);return this}},a.event=null,a.requote=function(t){return t.replace(G,"\\$&")};var G=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,Z={}.__proto__?function(t,e){t.__proto__=e}:function(t,e){for(var r in e)t[r]=e[r]};function Y(t){return Z(t,K),t}var W=function(t,e){return e.querySelector(t)},X=function(t,e){return e.querySelectorAll(t)},J=function(t,e){var r=t.matches||t[F(t,"matchesSelector")];return J=function(t,e){return r.call(t,e)},J(t,e)};"function"==typeof Sizzle&&(W=function(t,e){return Sizzle(t,e)[0]||null},X=Sizzle,J=Sizzle.matchesSelector),a.selection=function(){return a.select(l.documentElement)};var K=a.selection.prototype=[];function $(t){return"function"==typeof t?t:function(){return W(t,this)}}function Q(t){return"function"==typeof t?t:function(){return X(t,this)}}K.select=function(t){var e,r,n,i,a=[];t=$(t);for(var o=-1,s=this.length;++o<s;){a.push(e=[]),e.parentNode=(n=this[o]).parentNode;for(var l=-1,u=n.length;++l<u;)(i=n[l])?(e.push(r=t.call(i,i.__data__,l,o)),r&&"__data__"in i&&(r.__data__=i.__data__)):e.push(null)}return Y(a)},K.selectAll=function(t){var e,r,n=[];t=Q(t);for(var i=-1,a=this.length;++i<a;)for(var o=this[i],l=-1,u=o.length;++l<u;)(r=o[l])&&(n.push(e=s(t.call(r,r.__data__,l,i))),e.parentNode=r);return Y(n)};var tt="http://www.w3.org/1999/xhtml",et={svg:"http://www.w3.org/2000/svg",xhtml:tt,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function rt(t,e){return t=a.ns.qualify(t),null==e?t.local?function(){this.removeAttributeNS(t.space,t.local)}:function(){this.removeAttribute(t)}:"function"==typeof e?t.local?function(){var r=e.apply(this,arguments);null==r?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}:function(){var r=e.apply(this,arguments);null==r?this.removeAttribute(t):this.setAttribute(t,r)}:t.local?function(){this.setAttributeNS(t.space,t.local,e)}:function(){this.setAttribute(t,e)}}function nt(t){return t.trim().replace(/\s+/g," ")}function it(t){return new RegExp("(?:^|\\s+)"+a.requote(t)+"(?:\\s+|$)","g")}function at(t){return(t+"").trim().split(/^|\s+/)}function ot(t,e){var r=(t=at(t).map(st)).length;return"function"==typeof e?function(){for(var n=-1,i=e.apply(this,arguments);++n<r;)t[n](this,i)}:function(){for(var n=-1;++n<r;)t[n](this,e)}}function st(t){var e=it(t);return function(r,n){if(i=r.classList)return n?i.add(t):i.remove(t);var i=r.getAttribute("class")||"";n?(e.lastIndex=0,e.test(i)||r.setAttribute("class",nt(i+" "+t))):r.setAttribute("class",nt(i.replace(e," ")))}}function lt(t,e,r){return null==e?function(){this.style.removeProperty(t)}:"function"==typeof e?function(){var n=e.apply(this,arguments);null==n?this.style.removeProperty(t):this.style.setProperty(t,n,r)}:function(){this.style.setProperty(t,e,r)}}function ut(t,e){return null==e?function(){delete this[t]}:"function"==typeof e?function(){var r=e.apply(this,arguments);null==r?delete this[t]:this[t]=r}:function(){this[t]=e}}function ct(t){return"function"==typeof t?t:(t=a.ns.qualify(t)).local?function(){return this.ownerDocument.createElementNS(t.space,t.local)}:function(){var e=this.ownerDocument,r=this.namespaceURI;return r===tt&&e.documentElement.namespaceURI===tt?e.createElement(t):e.createElementNS(r,t)}}function ft(){var t=this.parentNode;t&&t.removeChild(this)}function ht(t){return{__data__:t}}function pt(t){return function(){return J(this,t)}}function dt(t){return arguments.length||(t=g),function(e,r){return e&&r?t(e.__data__,r.__data__):!e-!r}}function vt(t,e){for(var r=0,n=t.length;r<n;r++)for(var i,a=t[r],o=0,s=a.length;o<s;o++)(i=a[o])&&e(i,o,r);return t}function gt(t){return Z(t,yt),t}a.ns={prefix:et,qualify:function(t){var e=t.indexOf(":"),r=t;return e>=0&&"xmlns"!==(r=t.slice(0,e))&&(t=t.slice(e+1)),et.hasOwnProperty(r)?{space:et[r],local:t}:t}},K.attr=function(t,e){if(arguments.length<2){if("string"==typeof t){var r=this.node();return(t=a.ns.qualify(t)).local?r.getAttributeNS(t.space,t.local):r.getAttribute(t)}for(e in t)this.each(rt(e,t[e]));return this}return this.each(rt(t,e))},K.classed=function(t,e){if(arguments.length<2){if("string"==typeof t){var r=this.node(),n=(t=at(t)).length,i=-1;if(e=r.classList){for(;++i<n;)if(!e.contains(t[i]))return!1}else for(e=r.getAttribute("class");++i<n;)if(!it(t[i]).test(e))return!1;return!0}for(e in t)this.each(ot(e,t[e]));return this}return this.each(ot(t,e))},K.style=function(t,e,r){var n=arguments.length;if(n<3){if("string"!=typeof t){for(r in n<2&&(e=""),t)this.each(lt(r,t[r],e));return this}if(n<2){var i=this.node();return c(i).getComputedStyle(i,null).getPropertyValue(t)}r=""}return this.each(lt(t,e,r))},K.property=function(t,e){if(arguments.length<2){if("string"==typeof t)return this.node()[t];for(e in t)this.each(ut(e,t[e]));return this}return this.each(ut(t,e))},K.text=function(t){return arguments.length?this.each("function"==typeof t?function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}:null==t?function(){this.textContent=""}:function(){this.textContent=t}):this.node().textContent},K.html=function(t){return arguments.length?this.each("function"==typeof t?function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}:null==t?function(){this.innerHTML=""}:function(){this.innerHTML=t}):this.node().innerHTML},K.append=function(t){return t=ct(t),this.select((function(){return this.appendChild(t.apply(this,arguments))}))},K.insert=function(t,e){return t=ct(t),e=$(e),this.select((function(){return this.insertBefore(t.apply(this,arguments),e.apply(this,arguments)||null)}))},K.remove=function(){return this.each(ft)},K.data=function(t,e){var r,n,i=-1,a=this.length;if(!arguments.length){for(t=new Array(a=(r=this[0]).length);++i<a;)(n=r[i])&&(t[i]=n.__data__);return t}function o(t,r){var n,i,a,o=t.length,c=r.length,f=Math.min(o,c),h=new Array(c),p=new Array(c),d=new Array(o);if(e){var v,g=new k,y=new Array(o);for(n=-1;++n<o;)(i=t[n])&&(g.has(v=e.call(i,i.__data__,n))?d[n]=i:g.set(v,i),y[n]=v);for(n=-1;++n<c;)(i=g.get(v=e.call(r,a=r[n],n)))?!0!==i&&(h[n]=i,i.__data__=a):p[n]=ht(a),g.set(v,!0);for(n=-1;++n<o;)n in y&&!0!==g.get(y[n])&&(d[n]=t[n])}else{for(n=-1;++n<f;)i=t[n],a=r[n],i?(i.__data__=a,h[n]=i):p[n]=ht(a);for(;n<c;++n)p[n]=ht(r[n]);for(;n<o;++n)d[n]=t[n]}p.update=h,p.parentNode=h.parentNode=d.parentNode=t.parentNode,s.push(p),l.push(h),u.push(d)}var s=gt([]),l=Y([]),u=Y([]);if("function"==typeof t)for(;++i<a;)o(r=this[i],t.call(r,r.parentNode.__data__,i));else for(;++i<a;)o(r=this[i],t);return l.enter=function(){return s},l.exit=function(){return u},l},K.datum=function(t){return arguments.length?this.property("__data__",t):this.property("__data__")},K.filter=function(t){var e,r,n,i=[];"function"!=typeof t&&(t=pt(t));for(var a=0,o=this.length;a<o;a++){i.push(e=[]),e.parentNode=(r=this[a]).parentNode;for(var s=0,l=r.length;s<l;s++)(n=r[s])&&t.call(n,n.__data__,s,a)&&e.push(n)}return Y(i)},K.order=function(){for(var t=-1,e=this.length;++t<e;)for(var r,n=this[t],i=n.length-1,a=n[i];--i>=0;)(r=n[i])&&(a&&a!==r.nextSibling&&a.parentNode.insertBefore(r,a),a=r);return this},K.sort=function(t){t=dt.apply(this,arguments);for(var e=-1,r=this.length;++e<r;)this[e].sort(t);return this.order()},K.each=function(t){return vt(this,(function(e,r,n){t.call(e,e.__data__,r,n)}))},K.call=function(t){var e=s(arguments);return t.apply(e[0]=this,e),this},K.empty=function(){return!this.node()},K.node=function(){for(var t=0,e=this.length;t<e;t++)for(var r=this[t],n=0,i=r.length;n<i;n++){var a=r[n];if(a)return a}return null},K.size=function(){var t=0;return vt(this,(function(){++t})),t};var yt=[];function mt(t,e,r){var n="__on"+t,i=t.indexOf("."),o=bt;i>0&&(t=t.slice(0,i));var l=xt.get(t);function u(){var e=this[n];e&&(this.removeEventListener(t,e,e.$),delete this[n])}return l&&(t=l,o=_t),i?e?function(){var i=o(e,s(arguments));u.call(this),this.addEventListener(t,this[n]=i,i.$=r),i._=e}:u:e?N:function(){var e,r=new RegExp("^__on([^.]+)"+a.requote(t)+"$");for(var n in this)if(e=n.match(r)){var i=this[n];this.removeEventListener(e[1],i,i.$),delete this[n]}}}a.selection.enter=gt,a.selection.enter.prototype=yt,yt.append=K.append,yt.empty=K.empty,yt.node=K.node,yt.call=K.call,yt.size=K.size,yt.select=function(t){for(var e,r,n,i,a,o=[],s=-1,l=this.length;++s<l;){n=(i=this[s]).update,o.push(e=[]),e.parentNode=i.parentNode;for(var u=-1,c=i.length;++u<c;)(a=i[u])?(e.push(n[u]=r=t.call(i.parentNode,a.__data__,u,s)),r.__data__=a.__data__):e.push(null)}return Y(o)},yt.insert=function(t,e){var r,n,i;return arguments.length<2&&(r=this,e=function(t,e,a){var o,s=r[a].update,l=s.length;for(a!=i&&(i=a,n=0),e>=n&&(n=e+1);!(o=s[n])&&++n<l;);return o}),K.insert.call(this,t,e)},a.select=function(t){var e;return"string"==typeof t?(e=[W(t,l)]).parentNode=l.documentElement:(e=[t]).parentNode=u(t),Y([e])},a.selectAll=function(t){var e;return"string"==typeof t?(e=s(X(t,l))).parentNode=l.documentElement:(e=s(t)).parentNode=null,Y([e])},K.on=function(t,e,r){var n=arguments.length;if(n<3){if("string"!=typeof t){for(r in n<2&&(e=!1),t)this.each(mt(r,t[r],e));return this}if(n<2)return(n=this.node()["__on"+t])&&n._;r=!1}return this.each(mt(t,e,r))};var xt=a.map({mouseenter:"mouseover",mouseleave:"mouseout"});function bt(t,e){return function(r){var n=a.event;a.event=r,e[0]=this.__data__;try{t.apply(this,e)}finally{a.event=n}}}function _t(t,e){var r=bt(t,e);return function(t){var e=this,n=t.relatedTarget;n&&(n===e||8&n.compareDocumentPosition(e))||r.call(e,t)}}l&&xt.forEach((function(t){"on"+t in l&&xt.remove(t)}));var wt,Tt=0;function kt(t){var e=".dragsuppress-"+ ++Tt,r="click"+e,n=a.select(c(t)).on("touchmove"+e,V).on("dragstart"+e,V).on("selectstart"+e,V);if(null==wt&&(wt=!("onselectstart"in t)&&F(t.style,"userSelect")),wt){var i=u(t).style,o=i[wt];i[wt]="none"}return function(t){if(n.on(e,null),wt&&(i[wt]=o),t){var a=function(){n.on(r,null)};n.on(r,(function(){V(),a()}),!0),setTimeout(a,0)}}}a.mouse=function(t){return Mt(t,H())};var At=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;function Mt(t,e){e.changedTouches&&(e=e.changedTouches[0]);var r=t.ownerSVGElement||t;if(r.createSVGPoint){var n=r.createSVGPoint();if(At<0){var i=c(t);if(i.scrollX||i.scrollY){var o=(r=a.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important"))[0][0].getScreenCTM();At=!(o.f||o.e),r.remove()}}return At?(n.x=e.pageX,n.y=e.pageY):(n.x=e.clientX,n.y=e.clientY),[(n=n.matrixTransform(t.getScreenCTM().inverse())).x,n.y]}var s=t.getBoundingClientRect();return[e.clientX-s.left-t.clientLeft,e.clientY-s.top-t.clientTop]}function St(){return a.event.changedTouches[0].identifier}a.touch=function(t,e,r){if(arguments.length<3&&(r=e,e=H().changedTouches),e)for(var n,i=0,a=e.length;i<a;++i)if((n=e[i]).identifier===r)return Mt(t,n)},a.behavior.drag=function(){var t=q(i,"drag","dragstart","dragend"),e=null,r=o(N,a.mouse,c,"mousemove","mouseup"),n=o(St,a.touch,z,"touchmove","touchend");function i(){this.on("mousedown.drag",r).on("touchstart.drag",n)}function o(r,n,i,o,s){return function(){var l,u=this,c=a.event.target.correspondingElement||a.event.target,f=u.parentNode,h=t.of(u,arguments),p=0,d=r(),v=".drag"+(null==d?"":"-"+d),g=a.select(i(c)).on(o+v,(function(){var t,e,r=n(f,d);r&&(t=r[0]-m[0],e=r[1]-m[1],p|=t|e,m=r,h({type:"drag",x:r[0]+l[0],y:r[1]+l[1],dx:t,dy:e}))})).on(s+v,(function(){n(f,d)&&(g.on(o+v,null).on(s+v,null),y(p),h({type:"dragend"}))})),y=kt(c),m=n(f,d);l=e?[(l=e.apply(u,arguments)).x-m[0],l.y-m[1]]:[0,0],h({type:"dragstart"})}}return i.origin=function(t){return arguments.length?(e=t,i):e},a.rebind(i,t,"on")},a.touches=function(t,e){return arguments.length<2&&(e=H().touches),e?s(e).map((function(e){var r=Mt(t,e);return r.identifier=e.identifier,r})):[]};var Et=1e-6,Lt=Et*Et,Ct=Math.PI,Pt=2*Ct,Ot=Pt-Et,It=Ct/2,Dt=Ct/180,zt=180/Ct;function Rt(t){return t>1?It:t<-1?-It:Math.asin(t)}function Ft(t){return((t=Math.exp(t))+1/t)/2}var Bt=Math.SQRT2;a.interpolateZoom=function(t,e){var r,n,i=t[0],a=t[1],o=t[2],s=e[0],l=e[1],u=e[2],c=s-i,f=l-a,h=c*c+f*f;if(h<Lt)n=Math.log(u/o)/Bt,r=function(t){return[i+t*c,a+t*f,o*Math.exp(Bt*t*n)]};else{var p=Math.sqrt(h),d=(u*u-o*o+4*h)/(2*o*2*p),v=(u*u-o*o-4*h)/(2*u*2*p),g=Math.log(Math.sqrt(d*d+1)-d),y=Math.log(Math.sqrt(v*v+1)-v);n=(y-g)/Bt,r=function(t){var e,r=t*n,s=Ft(g),l=o/(2*p)*(s*(e=Bt*r+g,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(g));return[i+l*c,a+l*f,o*s/Ft(Bt*r+g)]}}return r.duration=1e3*n,r},a.behavior.zoom=function(){var t,e,r,n,i,o,s,u,f,h={x:0,y:0,k:1},p=[960,500],d=Ut,v=250,g=0,y="mousedown.zoom",m="mousemove.zoom",x="mouseup.zoom",b="touchstart.zoom",_=q(w,"zoomstart","zoom","zoomend");function w(t){t.on(y,P).on(jt+".zoom",I).on("dblclick.zoom",D).on(b,O)}function T(t){return[(t[0]-h.x)/h.k,(t[1]-h.y)/h.k]}function k(t){h.k=Math.max(d[0],Math.min(d[1],t))}function A(t,e){e=function(t){return[t[0]*h.k+h.x,t[1]*h.k+h.y]}(e),h.x+=t[0]-e[0],h.y+=t[1]-e[1]}function M(t,r,n,i){t.__chart__={x:h.x,y:h.y,k:h.k},k(Math.pow(2,i)),A(e=r,n),t=a.select(t),v>0&&(t=t.transition().duration(v)),t.call(w.event)}function S(){s&&s.domain(o.range().map((function(t){return(t-h.x)/h.k})).map(o.invert)),f&&f.domain(u.range().map((function(t){return(t-h.y)/h.k})).map(u.invert))}function E(t){g++||t({type:"zoomstart"})}function L(t){S(),t({type:"zoom",scale:h.k,translate:[h.x,h.y]})}function C(t){--g||(t({type:"zoomend"}),e=null)}function P(){var t=this,e=_.of(t,arguments),r=0,n=a.select(c(t)).on(m,(function(){r=1,A(a.mouse(t),i),L(e)})).on(x,(function(){n.on(m,null).on(x,null),o(r),C(e)})),i=T(a.mouse(t)),o=kt(t);Ji.call(t),E(e)}function O(){var t,e=this,r=_.of(e,arguments),n={},o=0,s=".zoom-"+a.event.changedTouches[0].identifier,l="touchmove"+s,u="touchend"+s,c=[],f=a.select(e),p=kt(e);function d(){var r=a.touches(e);return t=h.k,r.forEach((function(t){t.identifier in n&&(n[t.identifier]=T(t))})),r}function v(){var t=a.event.target;a.select(t).on(l,g).on(u,m),c.push(t);for(var r=a.event.changedTouches,s=0,f=r.length;s<f;++s)n[r[s].identifier]=null;var p=d(),v=Date.now();if(1===p.length){if(v-i<500){var y=p[0];M(e,y,n[y.identifier],Math.floor(Math.log(h.k)/Math.LN2)+1),V()}i=v}else if(p.length>1){y=p[0];var x=p[1],b=y[0]-x[0],_=y[1]-x[1];o=b*b+_*_}}function g(){var s,l,u,c,f=a.touches(e);Ji.call(e);for(var h=0,p=f.length;h<p;++h,c=null)if(u=f[h],c=n[u.identifier]){if(l)break;s=u,l=c}if(c){var d=(d=u[0]-s[0])*d+(d=u[1]-s[1])*d,v=o&&Math.sqrt(d/o);s=[(s[0]+u[0])/2,(s[1]+u[1])/2],l=[(l[0]+c[0])/2,(l[1]+c[1])/2],k(v*t)}i=null,A(s,l),L(r)}function m(){if(a.event.touches.length){for(var t=a.event.changedTouches,e=0,i=t.length;e<i;++e)delete n[t[e].identifier];for(var o in n)return void d()}a.selectAll(c).on(s,null),f.on(y,P).on(b,O),p(),C(r)}v(),E(r),f.on(y,null).on(b,v)}function I(){var i=_.of(this,arguments);n?clearTimeout(n):(Ji.call(this),t=T(e=r||a.mouse(this)),E(i)),n=setTimeout((function(){n=null,C(i)}),50),V(),k(Math.pow(2,.002*Nt())*h.k),A(e,t),L(i)}function D(){var t=a.mouse(this),e=Math.log(h.k)/Math.LN2;M(this,t,T(t),a.event.shiftKey?Math.ceil(e)-1:Math.floor(e)+1)}return jt||(jt="onwheel"in l?(Nt=function(){return-a.event.deltaY*(a.event.deltaMode?120:1)},"wheel"):"onmousewheel"in l?(Nt=function(){return a.event.wheelDelta},"mousewheel"):(Nt=function(){return-a.event.detail},"MozMousePixelScroll")),w.event=function(t){t.each((function(){var t=_.of(this,arguments),r=h;Qi?a.select(this).transition().each("start.zoom",(function(){h=this.__chart__||{x:0,y:0,k:1},E(t)})).tween("zoom:zoom",(function(){var n=p[0],i=p[1],o=e?e[0]:n/2,s=e?e[1]:i/2,l=a.interpolateZoom([(o-h.x)/h.k,(s-h.y)/h.k,n/h.k],[(o-r.x)/r.k,(s-r.y)/r.k,n/r.k]);return function(e){var r=l(e),i=n/r[2];this.__chart__=h={x:o-r[0]*i,y:s-r[1]*i,k:i},L(t)}})).each("interrupt.zoom",(function(){C(t)})).each("end.zoom",(function(){C(t)})):(this.__chart__=h,E(t),L(t),C(t))}))},w.translate=function(t){return arguments.length?(h={x:+t[0],y:+t[1],k:h.k},S(),w):[h.x,h.y]},w.scale=function(t){return arguments.length?(h={x:h.x,y:h.y,k:null},k(+t),S(),w):h.k},w.scaleExtent=function(t){return arguments.length?(d=null==t?Ut:[+t[0],+t[1]],w):d},w.center=function(t){return arguments.length?(r=t&&[+t[0],+t[1]],w):r},w.size=function(t){return arguments.length?(p=t&&[+t[0],+t[1]],w):p},w.duration=function(t){return arguments.length?(v=+t,w):v},w.x=function(t){return arguments.length?(s=t,o=t.copy(),h={x:0,y:0,k:1},w):s},w.y=function(t){return arguments.length?(f=t,u=t.copy(),h={x:0,y:0,k:1},w):f},a.rebind(w,_,"on")};var Nt,jt,Ut=[0,1/0];function Vt(){}function Ht(t,e,r){return this instanceof Ht?(this.h=+t,this.s=+e,void(this.l=+r)):arguments.length<2?t instanceof Ht?new Ht(t.h,t.s,t.l):ce(""+t,fe,Ht):new Ht(t,e,r)}a.color=Vt,Vt.prototype.toString=function(){return this.rgb()+""},a.hsl=Ht;var qt=Ht.prototype=new Vt;function Gt(t,e,r){var n,i;function a(t){return Math.round(255*function(t){return t>360?t-=360:t<0&&(t+=360),t<60?n+(i-n)*t/60:t<180?i:t<240?n+(i-n)*(240-t)/60:n}(t))}return t=isNaN(t)?0:(t%=360)<0?t+360:t,e=isNaN(e)||e<0?0:e>1?1:e,n=2*(r=r<0?0:r>1?1:r)-(i=r<=.5?r*(1+e):r+e-r*e),new ae(a(t+120),a(t),a(t-120))}function Zt(t,e,r){return this instanceof Zt?(this.h=+t,this.c=+e,void(this.l=+r)):arguments.length<2?t instanceof Zt?new Zt(t.h,t.c,t.l):function(t,e,r){return t>0?new Zt(Math.atan2(r,e)*zt,Math.sqrt(e*e+r*r),t):new Zt(NaN,NaN,t)}(t instanceof Xt?t.l:(t=he((t=a.rgb(t)).r,t.g,t.b)).l,t.a,t.b):new Zt(t,e,r)}qt.brighter=function(t){return t=Math.pow(.7,arguments.length?t:1),new Ht(this.h,this.s,this.l/t)},qt.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),new Ht(this.h,this.s,t*this.l)},qt.rgb=function(){return Gt(this.h,this.s,this.l)},a.hcl=Zt;var Yt=Zt.prototype=new Vt;function Wt(t,e,r){return isNaN(t)&&(t=0),isNaN(e)&&(e=0),new Xt(r,Math.cos(t*=Dt)*e,Math.sin(t)*e)}function Xt(t,e,r){return this instanceof Xt?(this.l=+t,this.a=+e,void(this.b=+r)):arguments.length<2?t instanceof Xt?new Xt(t.l,t.a,t.b):t instanceof Zt?Wt(t.h,t.c,t.l):he((t=ae(t)).r,t.g,t.b):new Xt(t,e,r)}Yt.brighter=function(t){return new Zt(this.h,this.c,Math.min(100,this.l+Jt*(arguments.length?t:1)))},Yt.darker=function(t){return new Zt(this.h,this.c,Math.max(0,this.l-Jt*(arguments.length?t:1)))},Yt.rgb=function(){return Wt(this.h,this.c,this.l).rgb()},a.lab=Xt;var Jt=18,Kt=.95047,$t=1,Qt=1.08883,te=Xt.prototype=new Vt;function ee(t,e,r){var n=(t+16)/116,i=n+e/500,a=n-r/200;return new ae(ie(3.2404542*(i=re(i)*Kt)-1.5371385*(n=re(n)*$t)-.4985314*(a=re(a)*Qt)),ie(-.969266*i+1.8760108*n+.041556*a),ie(.0556434*i-.2040259*n+1.0572252*a))}function re(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function ne(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function ie(t){return Math.round(255*(t<=.00304?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function ae(t,e,r){return this instanceof ae?(this.r=~~t,this.g=~~e,void(this.b=~~r)):arguments.length<2?t instanceof ae?new ae(t.r,t.g,t.b):ce(""+t,ae,Gt):new ae(t,e,r)}function oe(t){return new ae(t>>16,t>>8&255,255&t)}function se(t){return oe(t)+""}te.brighter=function(t){return new Xt(Math.min(100,this.l+Jt*(arguments.length?t:1)),this.a,this.b)},te.darker=function(t){return new Xt(Math.max(0,this.l-Jt*(arguments.length?t:1)),this.a,this.b)},te.rgb=function(){return ee(this.l,this.a,this.b)},a.rgb=ae;var le=ae.prototype=new Vt;function ue(t){return t<16?"0"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function ce(t,e,r){var n,i,a,o=0,s=0,l=0;if(n=/([a-z]+)\((.*)\)/.exec(t=t.toLowerCase()))switch(i=n[2].split(","),n[1]){case"hsl":return r(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return e(de(i[0]),de(i[1]),de(i[2]))}return(a=ve.get(t))?e(a.r,a.g,a.b):(null==t||"#"!==t.charAt(0)||isNaN(a=parseInt(t.slice(1),16))||(4===t.length?(o=(3840&a)>>4,o|=o>>4,s=240&a,s|=s>>4,l=15&a,l|=l<<4):7===t.length&&(o=(16711680&a)>>16,s=(65280&a)>>8,l=255&a)),e(o,s,l))}function fe(t,e,r){var n,i,a=Math.min(t/=255,e/=255,r/=255),o=Math.max(t,e,r),s=o-a,l=(o+a)/2;return s?(i=l<.5?s/(o+a):s/(2-o-a),n=t==o?(e-r)/s+(e<r?6:0):e==o?(r-t)/s+2:(t-e)/s+4,n*=60):(n=NaN,i=l>0&&l<1?0:n),new Ht(n,i,l)}function he(t,e,r){var n=ne((.4124564*(t=pe(t))+.3575761*(e=pe(e))+.1804375*(r=pe(r)))/Kt),i=ne((.2126729*t+.7151522*e+.072175*r)/$t);return Xt(116*i-16,500*(n-i),200*(i-ne((.0193339*t+.119192*e+.9503041*r)/Qt)))}function pe(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function de(t){var e=parseFloat(t);return"%"===t.charAt(t.length-1)?Math.round(2.55*e):e}le.brighter=function(t){t=Math.pow(.7,arguments.length?t:1);var e=this.r,r=this.g,n=this.b,i=30;return e||r||n?(e&&e<i&&(e=i),r&&r<i&&(r=i),n&&n<i&&(n=i),new ae(Math.min(255,e/t),Math.min(255,r/t),Math.min(255,n/t))):new ae(i,i,i)},le.darker=function(t){return new ae((t=Math.pow(.7,arguments.length?t:1))*this.r,t*this.g,t*this.b)},le.hsl=function(){return fe(this.r,this.g,this.b)},le.toString=function(){return"#"+ue(this.r)+ue(this.g)+ue(this.b)};var ve=a.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});function ge(t){return"function"==typeof t?t:function(){return t}}function ye(t){return function(e,r,n){return 2===arguments.length&&"function"==typeof r&&(n=r,r=null),me(e,r,t,n)}}function me(t,e,r,n){var i={},o=a.dispatch("beforesend","progress","load","error"),l={},u=new XMLHttpRequest,c=null;function f(){var t,e=u.status;if(!e&&function(t){var e=t.responseType;return e&&"text"!==e?t.response:t.responseText}(u)||e>=200&&e<300||304===e){try{t=r.call(i,u)}catch(t){return void o.error.call(i,t)}o.load.call(i,t)}else o.error.call(i,u)}return self.XDomainRequest&&!("withCredentials"in u)&&/^(http(s)?:)?\/\//.test(t)&&(u=new XDomainRequest),"onload"in u?u.onload=u.onerror=f:u.onreadystatechange=function(){u.readyState>3&&f()},u.onprogress=function(t){var e=a.event;a.event=t;try{o.progress.call(i,u)}finally{a.event=e}},i.header=function(t,e){return t=(t+"").toLowerCase(),arguments.length<2?l[t]:(null==e?delete l[t]:l[t]=e+"",i)},i.mimeType=function(t){return arguments.length?(e=null==t?null:t+"",i):e},i.responseType=function(t){return arguments.length?(c=t,i):c},i.response=function(t){return r=t,i},["get","post"].forEach((function(t){i[t]=function(){return i.send.apply(i,[t].concat(s(arguments)))}})),i.send=function(r,n,a){if(2===arguments.length&&"function"==typeof n&&(a=n,n=null),u.open(r,t,!0),null==e||"accept"in l||(l.accept=e+",*/*"),u.setRequestHeader)for(var s in l)u.setRequestHeader(s,l[s]);return null!=e&&u.overrideMimeType&&u.overrideMimeType(e),null!=c&&(u.responseType=c),null!=a&&i.on("error",a).on("load",(function(t){a(null,t)})),o.beforesend.call(i,u),u.send(null==n?null:n),i},i.abort=function(){return u.abort(),i},a.rebind(i,o,"on"),null==n?i:i.get(function(t){return 1===t.length?function(e,r){t(null==e?r:null)}:t}(n))}ve.forEach((function(t,e){ve.set(t,oe(e))})),a.functor=ge,a.xhr=ye(z),a.dsv=function(t,e){var r=new RegExp('["'+t+"\n]"),n=t.charCodeAt(0);function i(t,r,n){arguments.length<3&&(n=r,r=null);var i=me(t,e,null==r?a:o(r),n);return i.row=function(t){return arguments.length?i.response(null==(r=t)?a:o(t)):r},i}function a(t){return i.parse(t.responseText)}function o(t){return function(e){return i.parse(e.responseText,t)}}function s(e){return e.map(l).join(t)}function l(t){return r.test(t)?'"'+t.replace(/\"/g,'""')+'"':t}return i.parse=function(t,e){var r;return i.parseRows(t,(function(t,n){if(r)return r(t,n-1);var i=function(e){for(var r={},n=t.length,i=0;i<n;++i)r[t[i]]=e[i];return r};r=e?function(t,r){return e(i(t),r)}:i}))},i.parseRows=function(t,e){var r,i,a={},o={},s=[],l=t.length,u=0,c=0;function f(){if(u>=l)return o;if(i)return i=!1,a;var e=u;if(34===t.charCodeAt(e)){for(var r=e;r++<l;)if(34===t.charCodeAt(r)){if(34!==t.charCodeAt(r+1))break;++r}return u=r+2,13===(s=t.charCodeAt(r+1))?(i=!0,10===t.charCodeAt(r+2)&&++u):10===s&&(i=!0),t.slice(e+1,r).replace(/""/g,'"')}for(;u<l;){var s,c=1;if(10===(s=t.charCodeAt(u++)))i=!0;else if(13===s)i=!0,10===t.charCodeAt(u)&&(++u,++c);else if(s!==n)continue;return t.slice(e,u-c)}return t.slice(e)}for(;(r=f())!==o;){for(var h=[];r!==a&&r!==o;)h.push(r),r=f();e&&null==(h=e(h,c++))||s.push(h)}return s},i.format=function(e){if(Array.isArray(e[0]))return i.formatRows(e);var r=new D,n=[];return e.forEach((function(t){for(var e in t)r.has(e)||n.push(r.add(e))})),[n.map(l).join(t)].concat(e.map((function(e){return n.map((function(t){return l(e[t])})).join(t)}))).join("\n")},i.formatRows=function(t){return t.map(s).join("\n")},i},a.csv=a.dsv(",","text/csv"),a.tsv=a.dsv("\t","text/tab-separated-values");var xe,be,_e,we,Te=this[F(this,"requestAnimationFrame")]||function(t){setTimeout(t,17)};function ke(t,e,r){var n=arguments.length;n<2&&(e=0),n<3&&(r=Date.now());var i={c:t,t:r+e,n:null};return be?be.n=i:xe=i,be=i,_e||(we=clearTimeout(we),_e=1,Te(Ae)),i}function Ae(){var t=Me(),e=Se()-t;e>24?(isFinite(e)&&(clearTimeout(we),we=setTimeout(Ae,e)),_e=0):(_e=1,Te(Ae))}function Me(){for(var t=Date.now(),e=xe;e;)t>=e.t&&e.c(t-e.t)&&(e.c=null),e=e.n;return t}function Se(){for(var t,e=xe,r=1/0;e;)e.c?(e.t<r&&(r=e.t),e=(t=e).n):e=t?t.n=e.n:xe=e.n;return be=t,r}function Ee(t){return t[0]}function Le(t){return t[1]}function Ce(t){for(var e,r,n,i=t.length,a=[0,1],o=2,s=2;s<i;s++){for(;o>1&&(e=t[a[o-2]],r=t[a[o-1]],n=t[s],(r[0]-e[0])*(n[1]-e[1])-(r[1]-e[1])*(n[0]-e[0])<=0);)--o;a[o++]=s}return a.slice(0,o)}function Pe(t,e){return t[0]-e[0]||t[1]-e[1]}a.timer=function(){ke.apply(this,arguments)},a.timer.flush=function(){Me(),Se()},a.round=function(t,e){return e?Math.round(t*(e=Math.pow(10,e)))/e:Math.round(t)},a.geom={},a.geom.hull=function(t){var e=Ee,r=Le;if(arguments.length)return n(t);function n(t){if(t.length<3)return[];var n,i=ge(e),a=ge(r),o=t.length,s=[],l=[];for(n=0;n<o;n++)s.push([+i.call(this,t[n],n),+a.call(this,t[n],n),n]);for(s.sort(Pe),n=0;n<o;n++)l.push([s[n][0],-s[n][1]]);var u=Ce(s),c=Ce(l),f=c[0]===u[0],h=c[c.length-1]===u[u.length-1],p=[];for(n=u.length-1;n>=0;--n)p.push(t[s[u[n]][2]]);for(n=+f;n<c.length-h;++n)p.push(t[s[c[n]][2]]);return p}return n.x=function(t){return arguments.length?(e=t,n):e},n.y=function(t){return arguments.length?(r=t,n):r},n},a.geom.polygon=function(t){return Z(t,Oe),t};var Oe=a.geom.polygon.prototype=[];function Ie(t,e,r){return(r[0]-e[0])*(t[1]-e[1])<(r[1]-e[1])*(t[0]-e[0])}function De(t,e,r,n){var i=t[0],a=r[0],o=e[0]-i,s=n[0]-a,l=t[1],u=r[1],c=e[1]-l,f=n[1]-u,h=(s*(l-u)-f*(i-a))/(f*o-s*c);return[i+h*o,l+h*c]}function ze(t){var e=t[0],r=t[t.length-1];return!(e[0]-r[0]||e[1]-r[1])}Oe.area=function(){for(var t,e=-1,r=this.length,n=this[r-1],i=0;++e<r;)t=n,n=this[e],i+=t[1]*n[0]-t[0]*n[1];return.5*i},Oe.centroid=function(t){var e,r,n=-1,i=this.length,a=0,o=0,s=this[i-1];for(arguments.length||(t=-1/(6*this.area()));++n<i;)e=s,s=this[n],r=e[0]*s[1]-s[0]*e[1],a+=(e[0]+s[0])*r,o+=(e[1]+s[1])*r;return[a*t,o*t]},Oe.clip=function(t){for(var e,r,n,i,a,o,s=ze(t),l=-1,u=this.length-ze(this),c=this[u-1];++l<u;){for(e=t.slice(),t.length=0,i=this[l],a=e[(n=e.length-s)-1],r=-1;++r<n;)Ie(o=e[r],c,i)?(Ie(a,c,i)||t.push(De(a,o,c,i)),t.push(o)):Ie(a,c,i)&&t.push(De(a,o,c,i)),a=o;s&&t.push(t[0]),c=i}return t};var Re,Fe,Be,Ne,je,Ue=[],Ve=[];function He(){sr(this),this.edge=this.site=this.circle=null}function qe(t){var e=Ue.pop()||new He;return e.site=t,e}function Ge(t){tr(t),Be.remove(t),Ue.push(t),sr(t)}function Ze(t){var e=t.circle,r=e.x,n=e.cy,i={x:r,y:n},a=t.P,o=t.N,s=[t];Ge(t);for(var l=a;l.circle&&w(r-l.circle.x)<Et&&w(n-l.circle.cy)<Et;)a=l.P,s.unshift(l),Ge(l),l=a;s.unshift(l),tr(l);for(var u=o;u.circle&&w(r-u.circle.x)<Et&&w(n-u.circle.cy)<Et;)o=u.N,s.push(u),Ge(u),u=o;s.push(u),tr(u);var c,f=s.length;for(c=1;c<f;++c)u=s[c],l=s[c-1],ir(u.edge,l.site,u.site,i);l=s[0],(u=s[f-1]).edge=nr(l.site,u.site,null,i),Qe(l),Qe(u)}function Ye(t){for(var e,r,n,i,a=t.x,o=t.y,s=Be._;s;)if((n=We(s,o)-a)>Et)s=s.L;else{if(!((i=a-Xe(s,o))>Et)){n>-Et?(e=s.P,r=s):i>-Et?(e=s,r=s.N):e=r=s;break}if(!s.R){e=s;break}s=s.R}var l=qe(t);if(Be.insert(e,l),e||r){if(e===r)return tr(e),r=qe(e.site),Be.insert(l,r),l.edge=r.edge=nr(e.site,l.site),Qe(e),void Qe(r);if(r){tr(e),tr(r);var u=e.site,c=u.x,f=u.y,h=t.x-c,p=t.y-f,d=r.site,v=d.x-c,g=d.y-f,y=2*(h*g-p*v),m=h*h+p*p,x=v*v+g*g,b={x:(g*m-p*x)/y+c,y:(h*x-v*m)/y+f};ir(r.edge,u,d,b),l.edge=nr(u,t,null,b),r.edge=nr(t,d,null,b),Qe(e),Qe(r)}else l.edge=nr(e.site,l.site)}}function We(t,e){var r=t.site,n=r.x,i=r.y,a=i-e;if(!a)return n;var o=t.P;if(!o)return-1/0;var s=(r=o.site).x,l=r.y,u=l-e;if(!u)return s;var c=s-n,f=1/a-1/u,h=c/u;return f?(-h+Math.sqrt(h*h-2*f*(c*c/(-2*u)-l+u/2+i-a/2)))/f+n:(n+s)/2}function Xe(t,e){var r=t.N;if(r)return We(r,e);var n=t.site;return n.y===e?n.x:1/0}function Je(t){this.site=t,this.edges=[]}function Ke(t,e){return e.angle-t.angle}function $e(){sr(this),this.x=this.y=this.arc=this.site=this.cy=null}function Qe(t){var e=t.P,r=t.N;if(e&&r){var n=e.site,i=t.site,a=r.site;if(n!==a){var o=i.x,s=i.y,l=n.x-o,u=n.y-s,c=a.x-o,f=2*(l*(g=a.y-s)-u*c);if(!(f>=-Lt)){var h=l*l+u*u,p=c*c+g*g,d=(g*h-u*p)/f,v=(l*p-c*h)/f,g=v+s,y=Ve.pop()||new $e;y.arc=t,y.site=i,y.x=d+o,y.y=g+Math.sqrt(d*d+v*v),y.cy=g,t.circle=y;for(var m=null,x=je._;x;)if(y.y<x.y||y.y===x.y&&y.x<=x.x){if(!x.L){m=x.P;break}x=x.L}else{if(!x.R){m=x;break}x=x.R}je.insert(m,y),m||(Ne=y)}}}}function tr(t){var e=t.circle;e&&(e.P||(Ne=e.N),je.remove(e),Ve.push(e),sr(e),t.circle=null)}function er(t,e){var r=t.b;if(r)return!0;var n,i,a=t.a,o=e[0][0],s=e[1][0],l=e[0][1],u=e[1][1],c=t.l,f=t.r,h=c.x,p=c.y,d=f.x,v=f.y,g=(h+d)/2,y=(p+v)/2;if(v===p){if(g<o||g>=s)return;if(h>d){if(a){if(a.y>=u)return}else a={x:g,y:l};r={x:g,y:u}}else{if(a){if(a.y<l)return}else a={x:g,y:u};r={x:g,y:l}}}else if(i=y-(n=(h-d)/(v-p))*g,n<-1||n>1)if(h>d){if(a){if(a.y>=u)return}else a={x:(l-i)/n,y:l};r={x:(u-i)/n,y:u}}else{if(a){if(a.y<l)return}else a={x:(u-i)/n,y:u};r={x:(l-i)/n,y:l}}else if(p<v){if(a){if(a.x>=s)return}else a={x:o,y:n*o+i};r={x:s,y:n*s+i}}else{if(a){if(a.x<o)return}else a={x:s,y:n*s+i};r={x:o,y:n*o+i}}return t.a=a,t.b=r,!0}function rr(t,e){this.l=t,this.r=e,this.a=this.b=null}function nr(t,e,r,n){var i=new rr(t,e);return Re.push(i),r&&ir(i,t,e,r),n&&ir(i,e,t,n),Fe[t.i].edges.push(new ar(i,t,e)),Fe[e.i].edges.push(new ar(i,e,t)),i}function ir(t,e,r,n){t.a||t.b?t.l===r?t.b=n:t.a=n:(t.a=n,t.l=e,t.r=r)}function ar(t,e,r){var n=t.a,i=t.b;this.edge=t,this.site=e,this.angle=r?Math.atan2(r.y-e.y,r.x-e.x):t.l===e?Math.atan2(i.x-n.x,n.y-i.y):Math.atan2(n.x-i.x,i.y-n.y)}function or(){this._=null}function sr(t){t.U=t.C=t.L=t.R=t.P=t.N=null}function lr(t,e){var r=e,n=e.R,i=r.U;i?i.L===r?i.L=n:i.R=n:t._=n,n.U=i,r.U=n,r.R=n.L,r.R&&(r.R.U=r),n.L=r}function ur(t,e){var r=e,n=e.L,i=r.U;i?i.L===r?i.L=n:i.R=n:t._=n,n.U=i,r.U=n,r.L=n.R,r.L&&(r.L.U=r),n.R=r}function cr(t){for(;t.L;)t=t.L;return t}function fr(t,e){var r,n,i,a=t.sort(hr).pop();for(Re=[],Fe=new Array(t.length),Be=new or,je=new or;;)if(i=Ne,a&&(!i||a.y<i.y||a.y===i.y&&a.x<i.x))a.x===r&&a.y===n||(Fe[a.i]=new Je(a),Ye(a),r=a.x,n=a.y),a=t.pop();else{if(!i)break;Ze(i.arc)}e&&(function(t){for(var e,r,n,i,a,o=Re,s=(r=t[0][0],n=t[0][1],i=t[1][0],a=t[1][1],function(t){var e,o=t.a,s=t.b,l=o.x,u=o.y,c=0,f=1,h=s.x-l,p=s.y-u;if(e=r-l,h||!(e>0)){if(e/=h,h<0){if(e<c)return;e<f&&(f=e)}else if(h>0){if(e>f)return;e>c&&(c=e)}if(e=i-l,h||!(e<0)){if(e/=h,h<0){if(e>f)return;e>c&&(c=e)}else if(h>0){if(e<c)return;e<f&&(f=e)}if(e=n-u,p||!(e>0)){if(e/=p,p<0){if(e<c)return;e<f&&(f=e)}else if(p>0){if(e>f)return;e>c&&(c=e)}if(e=a-u,p||!(e<0)){if(e/=p,p<0){if(e>f)return;e>c&&(c=e)}else if(p>0){if(e<c)return;e<f&&(f=e)}return c>0&&(t.a={x:l+c*h,y:u+c*p}),f<1&&(t.b={x:l+f*h,y:u+f*p}),t}}}}}),l=o.length;l--;)(!er(e=o[l],t)||!s(e)||w(e.a.x-e.b.x)<Et&&w(e.a.y-e.b.y)<Et)&&(e.a=e.b=null,o.splice(l,1))}(e),function(t){for(var e,r,n,i,a,o,s,l,u,c,f=t[0][0],h=t[1][0],p=t[0][1],d=t[1][1],v=Fe,g=v.length;g--;)if((a=v[g])&&a.prepare())for(l=(s=a.edges).length,o=0;o<l;)n=(c=s[o].end()).x,i=c.y,e=(u=s[++o%l].start()).x,r=u.y,(w(n-e)>Et||w(i-r)>Et)&&(s.splice(o,0,new ar((y=a.site,m=c,x=w(n-f)<Et&&d-i>Et?{x:f,y:w(e-f)<Et?r:d}:w(i-d)<Et&&h-n>Et?{x:w(r-d)<Et?e:h,y:d}:w(n-h)<Et&&i-p>Et?{x:h,y:w(e-h)<Et?r:p}:w(i-p)<Et&&n-f>Et?{x:w(r-p)<Et?e:f,y:p}:null,b=void 0,(b=new rr(y,null)).a=m,b.b=x,Re.push(b),b),a.site,null)),++l);var y,m,x,b}(e));var o={cells:Fe,edges:Re};return Be=je=Re=Fe=null,o}function hr(t,e){return e.y-t.y||e.x-t.x}Je.prototype.prepare=function(){for(var t,e=this.edges,r=e.length;r--;)(t=e[r].edge).b&&t.a||e.splice(r,1);return e.sort(Ke),e.length},ar.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},or.prototype={insert:function(t,e){var r,n,i;if(t){if(e.P=t,e.N=t.N,t.N&&(t.N.P=e),t.N=e,t.R){for(t=t.R;t.L;)t=t.L;t.L=e}else t.R=e;r=t}else this._?(t=cr(this._),e.P=null,e.N=t,t.P=t.L=e,r=t):(e.P=e.N=null,this._=e,r=null);for(e.L=e.R=null,e.U=r,e.C=!0,t=e;r&&r.C;)r===(n=r.U).L?(i=n.R)&&i.C?(r.C=i.C=!1,n.C=!0,t=n):(t===r.R&&(lr(this,r),r=(t=r).U),r.C=!1,n.C=!0,ur(this,n)):(i=n.L)&&i.C?(r.C=i.C=!1,n.C=!0,t=n):(t===r.L&&(ur(this,r),r=(t=r).U),r.C=!1,n.C=!0,lr(this,n)),r=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var e,r,n,i=t.U,a=t.L,o=t.R;if(r=a?o?cr(o):a:o,i?i.L===t?i.L=r:i.R=r:this._=r,a&&o?(n=r.C,r.C=t.C,r.L=a,a.U=r,r!==o?(i=r.U,r.U=t.U,t=r.R,i.L=t,r.R=o,o.U=r):(r.U=i,i=r,t=r.R)):(n=t.C,t=r),t&&(t.U=i),!n)if(t&&t.C)t.C=!1;else{do{if(t===this._)break;if(t===i.L){if((e=i.R).C&&(e.C=!1,i.C=!0,lr(this,i),e=i.R),e.L&&e.L.C||e.R&&e.R.C){e.R&&e.R.C||(e.L.C=!1,e.C=!0,ur(this,e),e=i.R),e.C=i.C,i.C=e.R.C=!1,lr(this,i),t=this._;break}}else if((e=i.L).C&&(e.C=!1,i.C=!0,ur(this,i),e=i.L),e.L&&e.L.C||e.R&&e.R.C){e.L&&e.L.C||(e.R.C=!1,e.C=!0,lr(this,e),e=i.L),e.C=i.C,i.C=e.L.C=!1,ur(this,i),t=this._;break}e.C=!0,t=i,i=i.U}while(!t.C);t&&(t.C=!1)}}},a.geom.voronoi=function(t){var e=Ee,r=Le,n=e,i=r,a=pr;if(t)return o(t);function o(t){var e=new Array(t.length),r=a[0][0],n=a[0][1],i=a[1][0],o=a[1][1];return fr(s(t),a).cells.forEach((function(a,s){var l=a.edges,u=a.site;(e[s]=l.length?l.map((function(t){var e=t.start();return[e.x,e.y]})):u.x>=r&&u.x<=i&&u.y>=n&&u.y<=o?[[r,o],[i,o],[i,n],[r,n]]:[]).point=t[s]})),e}function s(t){return t.map((function(t,e){return{x:Math.round(n(t,e)/Et)*Et,y:Math.round(i(t,e)/Et)*Et,i:e}}))}return o.links=function(t){return fr(s(t)).edges.filter((function(t){return t.l&&t.r})).map((function(e){return{source:t[e.l.i],target:t[e.r.i]}}))},o.triangles=function(t){var e=[];return fr(s(t)).cells.forEach((function(r,n){for(var i,a,o,s,l=r.site,u=r.edges.sort(Ke),c=-1,f=u.length,h=u[f-1].edge,p=h.l===l?h.r:h.l;++c<f;)i=p,p=(h=u[c].edge).l===l?h.r:h.l,n<i.i&&n<p.i&&(o=i,s=p,((a=l).x-s.x)*(o.y-a.y)-(a.x-o.x)*(s.y-a.y)<0)&&e.push([t[n],t[i.i],t[p.i]])})),e},o.x=function(t){return arguments.length?(n=ge(e=t),o):e},o.y=function(t){return arguments.length?(i=ge(r=t),o):r},o.clipExtent=function(t){return arguments.length?(a=null==t?pr:t,o):a===pr?null:a},o.size=function(t){return arguments.length?o.clipExtent(t&&[[0,0],t]):a===pr?null:a&&a[1]},o};var pr=[[-1e6,-1e6],[1e6,1e6]];function dr(t){return t.x}function vr(t){return t.y}function gr(t,e,r,n,i,a){if(!t(e,r,n,i,a)){var o=.5*(r+i),s=.5*(n+a),l=e.nodes;l[0]&&gr(t,l[0],r,n,o,s),l[1]&&gr(t,l[1],o,n,i,s),l[2]&&gr(t,l[2],r,s,o,a),l[3]&&gr(t,l[3],o,s,i,a)}}function yr(t,e){t=a.rgb(t),e=a.rgb(e);var r=t.r,n=t.g,i=t.b,o=e.r-r,s=e.g-n,l=e.b-i;return function(t){return"#"+ue(Math.round(r+o*t))+ue(Math.round(n+s*t))+ue(Math.round(i+l*t))}}function mr(t,e){var r,n={},i={};for(r in t)r in e?n[r]=Tr(t[r],e[r]):i[r]=t[r];for(r in e)r in t||(i[r]=e[r]);return function(t){for(r in n)i[r]=n[r](t);return i}}function xr(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}function br(t,e){var r,n,i,a=_r.lastIndex=wr.lastIndex=0,o=-1,s=[],l=[];for(t+="",e+="";(r=_r.exec(t))&&(n=wr.exec(e));)(i=n.index)>a&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(r=r[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:xr(r,n)})),a=wr.lastIndex;return a<e.length&&(i=e.slice(a),s[o]?s[o]+=i:s[++o]=i),s.length<2?l[0]?(e=l[0].x,function(t){return e(t)+""}):function(){return e}:(e=l.length,function(t){for(var r,n=0;n<e;++n)s[(r=l[n]).i]=r.x(t);return s.join("")})}a.geom.delaunay=function(t){return a.geom.voronoi().triangles(t)},a.geom.quadtree=function(t,e,r,n,i){var a,o=Ee,s=Le;if(a=arguments.length)return o=dr,s=vr,3===a&&(i=r,n=e,r=e=0),l(t);function l(t){var l,u,c,f,h,p,d,v,g,y=ge(o),m=ge(s);if(null!=e)p=e,d=r,v=n,g=i;else if(v=g=-(p=d=1/0),u=[],c=[],h=t.length,a)for(f=0;f<h;++f)(l=t[f]).x<p&&(p=l.x),l.y<d&&(d=l.y),l.x>v&&(v=l.x),l.y>g&&(g=l.y),u.push(l.x),c.push(l.y);else for(f=0;f<h;++f){var x=+y(l=t[f],f),b=+m(l,f);x<p&&(p=x),b<d&&(d=b),x>v&&(v=x),b>g&&(g=b),u.push(x),c.push(b)}var _=v-p,T=g-d;function k(t,e,r,n,i,a,o,s){if(!isNaN(r)&&!isNaN(n))if(t.leaf){var l=t.x,u=t.y;if(null!=l)if(w(l-r)+w(u-n)<.01)A(t,e,r,n,i,a,o,s);else{var c=t.point;t.x=t.y=t.point=null,A(t,c,l,u,i,a,o,s),A(t,e,r,n,i,a,o,s)}else t.x=r,t.y=n,t.point=e}else A(t,e,r,n,i,a,o,s)}function A(t,e,r,n,i,a,o,s){var l=.5*(i+o),u=.5*(a+s),c=r>=l,f=n>=u,h=f<<1|c;t.leaf=!1,c?i=l:o=l,f?a=u:s=u,k(t=t.nodes[h]||(t.nodes[h]={leaf:!0,nodes:[],point:null,x:null,y:null}),e,r,n,i,a,o,s)}_>T?g=d+_:v=p+T;var M={leaf:!0,nodes:[],point:null,x:null,y:null,add:function(t){k(M,t,+y(t,++f),+m(t,f),p,d,v,g)}};if(M.visit=function(t){gr(t,M,p,d,v,g)},M.find=function(t){return function(t,e,r,n,i,a,o){var s,l=1/0;return function t(u,c,f,h,p){if(!(c>a||f>o||h<n||p<i)){if(d=u.point){var d,v=e-u.x,g=r-u.y,y=v*v+g*g;if(y<l){var m=Math.sqrt(l=y);n=e-m,i=r-m,a=e+m,o=r+m,s=d}}for(var x=u.nodes,b=.5*(c+h),_=.5*(f+p),w=(r>=_)<<1|e>=b,T=w+4;w<T;++w)if(u=x[3&w])switch(3&w){case 0:t(u,c,f,b,_);break;case 1:t(u,b,f,h,_);break;case 2:t(u,c,_,b,p);break;case 3:t(u,b,_,h,p)}}}(t,n,i,a,o),s}(M,t[0],t[1],p,d,v,g)},f=-1,null==e){for(;++f<h;)k(M,t[f],u[f],c[f],p,d,v,g);--f}else t.forEach(M.add);return u=c=t=l=null,M}return l.x=function(t){return arguments.length?(o=t,l):o},l.y=function(t){return arguments.length?(s=t,l):s},l.extent=function(t){return arguments.length?(null==t?e=r=n=i=null:(e=+t[0][0],r=+t[0][1],n=+t[1][0],i=+t[1][1]),l):null==e?null:[[e,r],[n,i]]},l.size=function(t){return arguments.length?(null==t?e=r=n=i=null:(e=r=0,n=+t[0],i=+t[1]),l):null==e?null:[n-e,i-r]},l},a.interpolateRgb=yr,a.interpolateObject=mr,a.interpolateNumber=xr,a.interpolateString=br;var _r=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,wr=new RegExp(_r.source,"g");function Tr(t,e){for(var r,n=a.interpolators.length;--n>=0&&!(r=a.interpolators[n](t,e)););return r}function kr(t,e){var r,n=[],i=[],a=t.length,o=e.length,s=Math.min(t.length,e.length);for(r=0;r<s;++r)n.push(Tr(t[r],e[r]));for(;r<a;++r)i[r]=t[r];for(;r<o;++r)i[r]=e[r];return function(t){for(r=0;r<s;++r)i[r]=n[r](t);return i}}a.interpolate=Tr,a.interpolators=[function(t,e){var r=typeof e;return("string"===r?ve.has(e.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(e)?yr:br:e instanceof Vt?yr:Array.isArray(e)?kr:"object"===r&&isNaN(e)?mr:xr)(t,e)}],a.interpolateArray=kr;var Ar=function(){return z},Mr=a.map({linear:Ar,poly:function(t){return function(e){return Math.pow(e,t)}},quad:function(){return Cr},cubic:function(){return Pr},sin:function(){return Ir},exp:function(){return Dr},circle:function(){return zr},elastic:function(t,e){var r;return arguments.length<2&&(e=.45),arguments.length?r=e/Pt*Math.asin(1/t):(t=1,r=e/4),function(n){return 1+t*Math.pow(2,-10*n)*Math.sin((n-r)*Pt/e)}},back:function(t){return t||(t=1.70158),function(e){return e*e*((t+1)*e-t)}},bounce:function(){return Rr}}),Sr=a.map({in:z,out:Er,"in-out":Lr,"out-in":function(t){return Lr(Er(t))}});function Er(t){return function(e){return 1-t(1-e)}}function Lr(t){return function(e){return.5*(e<.5?t(2*e):2-t(2-2*e))}}function Cr(t){return t*t}function Pr(t){return t*t*t}function Or(t){if(t<=0)return 0;if(t>=1)return 1;var e=t*t,r=e*t;return 4*(t<.5?r:3*(t-e)+r-.75)}function Ir(t){return 1-Math.cos(t*It)}function Dr(t){return Math.pow(2,10*(t-1))}function zr(t){return 1-Math.sqrt(1-t*t)}function Rr(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}function Fr(t,e){return e-=t,function(r){return Math.round(t+e*r)}}function Br(t){var e,r,n,i=[t.a,t.b],a=[t.c,t.d],o=jr(i),s=Nr(i,a),l=jr(((e=a)[0]+=(n=-s)*(r=i)[0],e[1]+=n*r[1],e))||0;i[0]*a[1]<a[0]*i[1]&&(i[0]*=-1,i[1]*=-1,o*=-1,s*=-1),this.rotate=(o?Math.atan2(i[1],i[0]):Math.atan2(-a[0],a[1]))*zt,this.translate=[t.e,t.f],this.scale=[o,l],this.skew=l?Math.atan2(s,l)*zt:0}function Nr(t,e){return t[0]*e[0]+t[1]*e[1]}function jr(t){var e=Math.sqrt(Nr(t,t));return e&&(t[0]/=e,t[1]/=e),e}a.ease=function(t){var e,r=t.indexOf("-"),n=r>=0?t.slice(0,r):t,i=r>=0?t.slice(r+1):"in";return n=Mr.get(n)||Ar,i=Sr.get(i)||z,e=i(n.apply(null,o.call(arguments,1))),function(t){return t<=0?0:t>=1?1:e(t)}},a.interpolateHcl=function(t,e){t=a.hcl(t),e=a.hcl(e);var r=t.h,n=t.c,i=t.l,o=e.h-r,s=e.c-n,l=e.l-i;return isNaN(s)&&(s=0,n=isNaN(n)?e.c:n),isNaN(o)?(o=0,r=isNaN(r)?e.h:r):o>180?o-=360:o<-180&&(o+=360),function(t){return Wt(r+o*t,n+s*t,i+l*t)+""}},a.interpolateHsl=function(t,e){t=a.hsl(t),e=a.hsl(e);var r=t.h,n=t.s,i=t.l,o=e.h-r,s=e.s-n,l=e.l-i;return isNaN(s)&&(s=0,n=isNaN(n)?e.s:n),isNaN(o)?(o=0,r=isNaN(r)?e.h:r):o>180?o-=360:o<-180&&(o+=360),function(t){return Gt(r+o*t,n+s*t,i+l*t)+""}},a.interpolateLab=function(t,e){t=a.lab(t),e=a.lab(e);var r=t.l,n=t.a,i=t.b,o=e.l-r,s=e.a-n,l=e.b-i;return function(t){return ee(r+o*t,n+s*t,i+l*t)+""}},a.interpolateRound=Fr,a.transform=function(t){var e=l.createElementNS(a.ns.prefix.svg,"g");return(a.transform=function(t){if(null!=t){e.setAttribute("transform",t);var r=e.transform.baseVal.consolidate()}return new Br(r?r.matrix:Ur)})(t)},Br.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var Ur={a:1,b:0,c:0,d:1,e:0,f:0};function Vr(t){return t.length?t.pop()+",":""}function Hr(t,e){var r=[],n=[];return t=a.transform(t),e=a.transform(e),function(t,e,r,n){if(t[0]!==e[0]||t[1]!==e[1]){var i=r.push("translate(",null,",",null,")");n.push({i:i-4,x:xr(t[0],e[0])},{i:i-2,x:xr(t[1],e[1])})}else(e[0]||e[1])&&r.push("translate("+e+")")}(t.translate,e.translate,r,n),function(t,e,r,n){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),n.push({i:r.push(Vr(r)+"rotate(",null,")")-2,x:xr(t,e)})):e&&r.push(Vr(r)+"rotate("+e+")")}(t.rotate,e.rotate,r,n),function(t,e,r,n){t!==e?n.push({i:r.push(Vr(r)+"skewX(",null,")")-2,x:xr(t,e)}):e&&r.push(Vr(r)+"skewX("+e+")")}(t.skew,e.skew,r,n),function(t,e,r,n){if(t[0]!==e[0]||t[1]!==e[1]){var i=r.push(Vr(r)+"scale(",null,",",null,")");n.push({i:i-4,x:xr(t[0],e[0])},{i:i-2,x:xr(t[1],e[1])})}else 1===e[0]&&1===e[1]||r.push(Vr(r)+"scale("+e+")")}(t.scale,e.scale,r,n),t=e=null,function(t){for(var e,i=-1,a=n.length;++i<a;)r[(e=n[i]).i]=e.x(t);return r.join("")}}function qr(t,e){return e=(e-=t=+t)||1/e,function(r){return(r-t)/e}}function Gr(t,e){return e=(e-=t=+t)||1/e,function(r){return Math.max(0,Math.min(1,(r-t)/e))}}function Zr(t){for(var e=t.source,r=t.target,n=function(t,e){if(t===e)return t;for(var r=Yr(t),n=Yr(e),i=r.pop(),a=n.pop(),o=null;i===a;)o=i,i=r.pop(),a=n.pop();return o}(e,r),i=[e];e!==n;)e=e.parent,i.push(e);for(var a=i.length;r!==n;)i.splice(a,0,r),r=r.parent;return i}function Yr(t){for(var e=[],r=t.parent;null!=r;)e.push(t),t=r,r=r.parent;return e.push(t),e}function Wr(t){t.fixed|=2}function Xr(t){t.fixed&=-7}function Jr(t){t.fixed|=4,t.px=t.x,t.py=t.y}function Kr(t){t.fixed&=-5}function $r(t,e,r){var n=0,i=0;if(t.charge=0,!t.leaf)for(var a,o=t.nodes,s=o.length,l=-1;++l<s;)null!=(a=o[l])&&($r(a,e,r),t.charge+=a.charge,n+=a.charge*a.cx,i+=a.charge*a.cy);if(t.point){t.leaf||(t.point.x+=Math.random()-.5,t.point.y+=Math.random()-.5);var u=e*r[t.point.index];t.charge+=t.pointCharge=u,n+=u*t.point.x,i+=u*t.point.y}t.cx=n/t.charge,t.cy=i/t.charge}a.interpolateTransform=Hr,a.layout={},a.layout.bundle=function(){return function(t){for(var e=[],r=-1,n=t.length;++r<n;)e.push(Zr(t[r]));return e}},a.layout.chord=function(){var t,e,r,n,i,o,s,l={},u=0;function c(){var l,c,h,p,d,v={},g=[],y=a.range(n),m=[];for(t=[],e=[],l=0,p=-1;++p<n;){for(c=0,d=-1;++d<n;)c+=r[p][d];g.push(c),m.push(a.range(n)),l+=c}for(i&&y.sort((function(t,e){return i(g[t],g[e])})),o&&m.forEach((function(t,e){t.sort((function(t,n){return o(r[e][t],r[e][n])}))})),l=(Pt-u*n)/l,c=0,p=-1;++p<n;){for(h=c,d=-1;++d<n;){var x=y[p],b=m[x][d],_=r[x][b],w=c,T=c+=_*l;v[x+"-"+b]={index:x,subindex:b,startAngle:w,endAngle:T,value:_}}e[x]={index:x,startAngle:h,endAngle:c,value:g[x]},c+=u}for(p=-1;++p<n;)for(d=p-1;++d<n;){var k=v[p+"-"+d],A=v[d+"-"+p];(k.value||A.value)&&t.push(k.value<A.value?{source:A,target:k}:{source:k,target:A})}s&&f()}function f(){t.sort((function(t,e){return s((t.source.value+t.target.value)/2,(e.source.value+e.target.value)/2)}))}return l.matrix=function(i){return arguments.length?(n=(r=i)&&r.length,t=e=null,l):r},l.padding=function(r){return arguments.length?(u=r,t=e=null,l):u},l.sortGroups=function(r){return arguments.length?(i=r,t=e=null,l):i},l.sortSubgroups=function(e){return arguments.length?(o=e,t=null,l):o},l.sortChords=function(e){return arguments.length?(s=e,t&&f(),l):s},l.chords=function(){return t||c(),t},l.groups=function(){return e||c(),e},l},a.layout.force=function(){var t,e,r,n,i,o,s={},l=a.dispatch("start","tick","end"),u=[1,1],c=.9,f=Qr,h=tn,p=-30,d=en,v=.1,g=.64,y=[],m=[];function x(t){return function(e,r,n,i){if(e.point!==t){var a=e.cx-t.x,o=e.cy-t.y,s=i-r,l=a*a+o*o;if(s*s/g<l){if(l<d){var u=e.charge/l;t.px-=a*u,t.py-=o*u}return!0}e.point&&l&&l<d&&(u=e.pointCharge/l,t.px-=a*u,t.py-=o*u)}return!e.charge}}function b(t){t.px=a.event.x,t.py=a.event.y,s.resume()}return s.tick=function(){if((r*=.99)<.005)return t=null,l.end({type:"end",alpha:r=0}),!0;var e,s,f,h,d,g,b,_,w,T=y.length,k=m.length;for(s=0;s<k;++s)h=(f=m[s]).source,(g=(_=(d=f.target).x-h.x)*_+(w=d.y-h.y)*w)&&(_*=g=r*i[s]*((g=Math.sqrt(g))-n[s])/g,w*=g,d.x-=_*(b=h.weight+d.weight?h.weight/(h.weight+d.weight):.5),d.y-=w*b,h.x+=_*(b=1-b),h.y+=w*b);if((b=r*v)&&(_=u[0]/2,w=u[1]/2,s=-1,b))for(;++s<T;)(f=y[s]).x+=(_-f.x)*b,f.y+=(w-f.y)*b;if(p)for($r(e=a.geom.quadtree(y),r,o),s=-1;++s<T;)(f=y[s]).fixed||e.visit(x(f));for(s=-1;++s<T;)(f=y[s]).fixed?(f.x=f.px,f.y=f.py):(f.x-=(f.px-(f.px=f.x))*c,f.y-=(f.py-(f.py=f.y))*c);l.tick({type:"tick",alpha:r})},s.nodes=function(t){return arguments.length?(y=t,s):y},s.links=function(t){return arguments.length?(m=t,s):m},s.size=function(t){return arguments.length?(u=t,s):u},s.linkDistance=function(t){return arguments.length?(f="function"==typeof t?t:+t,s):f},s.distance=s.linkDistance,s.linkStrength=function(t){return arguments.length?(h="function"==typeof t?t:+t,s):h},s.friction=function(t){return arguments.length?(c=+t,s):c},s.charge=function(t){return arguments.length?(p="function"==typeof t?t:+t,s):p},s.chargeDistance=function(t){return arguments.length?(d=t*t,s):Math.sqrt(d)},s.gravity=function(t){return arguments.length?(v=+t,s):v},s.theta=function(t){return arguments.length?(g=t*t,s):Math.sqrt(g)},s.alpha=function(e){return arguments.length?(e=+e,r?e>0?r=e:(t.c=null,t.t=NaN,t=null,l.end({type:"end",alpha:r=0})):e>0&&(l.start({type:"start",alpha:r=e}),t=ke(s.tick)),s):r},s.start=function(){var t,e,r,a=y.length,l=m.length,c=u[0],d=u[1];for(t=0;t<a;++t)(r=y[t]).index=t,r.weight=0;for(t=0;t<l;++t)"number"==typeof(r=m[t]).source&&(r.source=y[r.source]),"number"==typeof r.target&&(r.target=y[r.target]),++r.source.weight,++r.target.weight;for(t=0;t<a;++t)r=y[t],isNaN(r.x)&&(r.x=v("x",c)),isNaN(r.y)&&(r.y=v("y",d)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(n=[],"function"==typeof f)for(t=0;t<l;++t)n[t]=+f.call(this,m[t],t);else for(t=0;t<l;++t)n[t]=f;if(i=[],"function"==typeof h)for(t=0;t<l;++t)i[t]=+h.call(this,m[t],t);else for(t=0;t<l;++t)i[t]=h;if(o=[],"function"==typeof p)for(t=0;t<a;++t)o[t]=+p.call(this,y[t],t);else for(t=0;t<a;++t)o[t]=p;function v(r,n){if(!e){for(e=new Array(a),u=0;u<a;++u)e[u]=[];for(u=0;u<l;++u){var i=m[u];e[i.source.index].push(i.target),e[i.target.index].push(i.source)}}for(var o,s=e[t],u=-1,c=s.length;++u<c;)if(!isNaN(o=s[u][r]))return o;return Math.random()*n}return s.resume()},s.resume=function(){return s.alpha(.1)},s.stop=function(){return s.alpha(0)},s.drag=function(){if(e||(e=a.behavior.drag().origin(z).on("dragstart.force",Wr).on("drag.force",b).on("dragend.force",Xr)),!arguments.length)return e;this.on("mouseover.force",Jr).on("mouseout.force",Kr).call(e)},a.rebind(s,l,"on")};var Qr=20,tn=1,en=1/0;function rn(t,e){return a.rebind(t,e,"sort","children","value"),t.nodes=t,t.links=un,t}function nn(t,e){for(var r=[t];null!=(t=r.pop());)if(e(t),(i=t.children)&&(n=i.length))for(var n,i;--n>=0;)r.push(i[n])}function an(t,e){for(var r=[t],n=[];null!=(t=r.pop());)if(n.push(t),(a=t.children)&&(i=a.length))for(var i,a,o=-1;++o<i;)r.push(a[o]);for(;null!=(t=n.pop());)e(t)}function on(t){return t.children}function sn(t){return t.value}function ln(t,e){return e.value-t.value}function un(t){return a.merge(t.map((function(t){return(t.children||[]).map((function(e){return{source:t,target:e}}))})))}a.layout.hierarchy=function(){var t=ln,e=on,r=sn;function n(i){var a,o=[i],s=[];for(i.depth=0;null!=(a=o.pop());)if(s.push(a),(u=e.call(n,a,a.depth))&&(l=u.length)){for(var l,u,c;--l>=0;)o.push(c=u[l]),c.parent=a,c.depth=a.depth+1;r&&(a.value=0),a.children=u}else r&&(a.value=+r.call(n,a,a.depth)||0),delete a.children;return an(i,(function(e){var n,i;t&&(n=e.children)&&n.sort(t),r&&(i=e.parent)&&(i.value+=e.value)})),s}return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(nn(t,(function(t){t.children&&(t.value=0)})),an(t,(function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)}))),t},n},a.layout.partition=function(){var t=a.layout.hierarchy(),e=[1,1];function r(t,e,n,i){var a=t.children;if(t.x=e,t.y=t.depth*i,t.dx=n,t.dy=i,a&&(o=a.length)){var o,s,l,u=-1;for(n=t.value?n/t.value:0;++u<o;)r(s=a[u],e,l=s.value*n,i),e+=l}}function n(t){var e=t.children,r=0;if(e&&(i=e.length))for(var i,a=-1;++a<i;)r=Math.max(r,n(e[a]));return 1+r}function i(i,a){var o=t.call(this,i,a);return r(o[0],0,e[0],e[1]/n(o[0])),o}return i.size=function(t){return arguments.length?(e=t,i):e},rn(i,t)},a.layout.pie=function(){var t=Number,e=cn,r=0,n=Pt,i=0;function o(s){var l,u=s.length,c=s.map((function(e,r){return+t.call(o,e,r)})),f=+("function"==typeof r?r.apply(this,arguments):r),h=("function"==typeof n?n.apply(this,arguments):n)-f,p=Math.min(Math.abs(h)/u,+("function"==typeof i?i.apply(this,arguments):i)),d=p*(h<0?-1:1),v=a.sum(c),g=v?(h-u*d)/v:0,y=a.range(u),m=[];return null!=e&&y.sort(e===cn?function(t,e){return c[e]-c[t]}:function(t,r){return e(s[t],s[r])}),y.forEach((function(t){m[t]={data:s[t],value:l=c[t],startAngle:f,endAngle:f+=l*g+d,padAngle:p}})),m}return o.value=function(e){return arguments.length?(t=e,o):t},o.sort=function(t){return arguments.length?(e=t,o):e},o.startAngle=function(t){return arguments.length?(r=t,o):r},o.endAngle=function(t){return arguments.length?(n=t,o):n},o.padAngle=function(t){return arguments.length?(i=t,o):i},o};var cn={};function fn(t){return t.x}function hn(t){return t.y}function pn(t,e,r){t.y0=e,t.y=r}a.layout.stack=function(){var t=z,e=gn,r=yn,n=pn,i=fn,o=hn;function s(l,u){if(!(p=l.length))return l;var c=l.map((function(e,r){return t.call(s,e,r)})),f=c.map((function(t){return t.map((function(t,e){return[i.call(s,t,e),o.call(s,t,e)]}))})),h=e.call(s,f,u);c=a.permute(c,h),f=a.permute(f,h);var p,d,v,g,y=r.call(s,f,u),m=c[0].length;for(v=0;v<m;++v)for(n.call(s,c[0][v],g=y[v],f[0][v][1]),d=1;d<p;++d)n.call(s,c[d][v],g+=f[d-1][v][1],f[d][v][1]);return l}return s.values=function(e){return arguments.length?(t=e,s):t},s.order=function(t){return arguments.length?(e="function"==typeof t?t:dn.get(t)||gn,s):e},s.offset=function(t){return arguments.length?(r="function"==typeof t?t:vn.get(t)||yn,s):r},s.x=function(t){return arguments.length?(i=t,s):i},s.y=function(t){return arguments.length?(o=t,s):o},s.out=function(t){return arguments.length?(n=t,s):n},s};var dn=a.map({"inside-out":function(t){var e,r,n=t.length,i=t.map(mn),o=t.map(xn),s=a.range(n).sort((function(t,e){return i[t]-i[e]})),l=0,u=0,c=[],f=[];for(e=0;e<n;++e)r=s[e],l<u?(l+=o[r],c.push(r)):(u+=o[r],f.push(r));return f.reverse().concat(c)},reverse:function(t){return a.range(t.length).reverse()},default:gn}),vn=a.map({silhouette:function(t){var e,r,n,i=t.length,a=t[0].length,o=[],s=0,l=[];for(r=0;r<a;++r){for(e=0,n=0;e<i;e++)n+=t[e][r][1];n>s&&(s=n),o.push(n)}for(r=0;r<a;++r)l[r]=(s-o[r])/2;return l},wiggle:function(t){var e,r,n,i,a,o,s,l,u,c=t.length,f=t[0],h=f.length,p=[];for(p[0]=l=u=0,r=1;r<h;++r){for(e=0,i=0;e<c;++e)i+=t[e][r][1];for(e=0,a=0,s=f[r][0]-f[r-1][0];e<c;++e){for(n=0,o=(t[e][r][1]-t[e][r-1][1])/(2*s);n<e;++n)o+=(t[n][r][1]-t[n][r-1][1])/s;a+=o*t[e][r][1]}p[r]=l-=i?a/i*s:0,l<u&&(u=l)}for(r=0;r<h;++r)p[r]-=u;return p},expand:function(t){var e,r,n,i=t.length,a=t[0].length,o=1/i,s=[];for(r=0;r<a;++r){for(e=0,n=0;e<i;e++)n+=t[e][r][1];if(n)for(e=0;e<i;e++)t[e][r][1]/=n;else for(e=0;e<i;e++)t[e][r][1]=o}for(r=0;r<a;++r)s[r]=0;return s},zero:yn});function gn(t){return a.range(t.length)}function yn(t){for(var e=-1,r=t[0].length,n=[];++e<r;)n[e]=0;return n}function mn(t){for(var e,r=1,n=0,i=t[0][1],a=t.length;r<a;++r)(e=t[r][1])>i&&(n=r,i=e);return n}function xn(t){return t.reduce(bn,0)}function bn(t,e){return t+e[1]}function _n(t,e){return wn(t,Math.ceil(Math.log(e.length)/Math.LN2+1))}function wn(t,e){for(var r=-1,n=+t[0],i=(t[1]-n)/e,a=[];++r<=e;)a[r]=i*r+n;return a}function Tn(t){return[a.min(t),a.max(t)]}function kn(t,e){return t.value-e.value}function An(t,e){var r=t._pack_next;t._pack_next=e,e._pack_prev=t,e._pack_next=r,r._pack_prev=e}function Mn(t,e){t._pack_next=e,e._pack_prev=t}function Sn(t,e){var r=e.x-t.x,n=e.y-t.y,i=t.r+e.r;return.999*i*i>r*r+n*n}function En(t){if((e=t.children)&&(l=e.length)){var e,r,n,i,a,o,s,l,u=1/0,c=-1/0,f=1/0,h=-1/0;if(e.forEach(Ln),(r=e[0]).x=-r.r,r.y=0,x(r),l>1&&((n=e[1]).x=n.r,n.y=0,x(n),l>2))for(On(r,n,i=e[2]),x(i),An(r,i),r._pack_prev=i,An(i,n),n=r._pack_next,a=3;a<l;a++){On(r,n,i=e[a]);var p=0,d=1,v=1;for(o=n._pack_next;o!==n;o=o._pack_next,d++)if(Sn(o,i)){p=1;break}if(1==p)for(s=r._pack_prev;s!==o._pack_prev&&!Sn(s,i);s=s._pack_prev,v++);p?(d<v||d==v&&n.r<r.r?Mn(r,n=o):Mn(r=s,n),a--):(An(r,i),n=i,x(i))}var g=(u+c)/2,y=(f+h)/2,m=0;for(a=0;a<l;a++)(i=e[a]).x-=g,i.y-=y,m=Math.max(m,i.r+Math.sqrt(i.x*i.x+i.y*i.y));t.r=m,e.forEach(Cn)}function x(t){u=Math.min(t.x-t.r,u),c=Math.max(t.x+t.r,c),f=Math.min(t.y-t.r,f),h=Math.max(t.y+t.r,h)}}function Ln(t){t._pack_next=t._pack_prev=t}function Cn(t){delete t._pack_next,delete t._pack_prev}function Pn(t,e,r,n){var i=t.children;if(t.x=e+=n*t.x,t.y=r+=n*t.y,t.r*=n,i)for(var a=-1,o=i.length;++a<o;)Pn(i[a],e,r,n)}function On(t,e,r){var n=t.r+r.r,i=e.x-t.x,a=e.y-t.y;if(n&&(i||a)){var o=e.r+r.r,s=i*i+a*a,l=.5+((n*=n)-(o*=o))/(2*s),u=Math.sqrt(Math.max(0,2*o*(n+s)-(n-=s)*n-o*o))/(2*s);r.x=t.x+l*i+u*a,r.y=t.y+l*a-u*i}else r.x=t.x+n,r.y=t.y}function In(t,e){return t.parent==e.parent?1:2}function Dn(t){var e=t.children;return e.length?e[0]:t.t}function zn(t){var e,r=t.children;return(e=r.length)?r[e-1]:t.t}function Rn(t,e,r){var n=r/(e.i-t.i);e.c-=n,e.s+=r,t.c+=n,e.z+=r,e.m+=r}function Fn(t,e,r){return t.a.parent===e.parent?t.a:r}function Bn(t){var e=t.children;return e&&e.length?Bn(e[0]):t}function Nn(t){var e,r=t.children;return r&&(e=r.length)?Nn(r[e-1]):t}function jn(t){return{x:t.x,y:t.y,dx:t.dx,dy:t.dy}}function Un(t,e){var r=t.x+e[3],n=t.y+e[0],i=t.dx-e[1]-e[3],a=t.dy-e[0]-e[2];return i<0&&(r+=i/2,i=0),a<0&&(n+=a/2,a=0),{x:r,y:n,dx:i,dy:a}}function Vn(t){var e=t[0],r=t[t.length-1];return e<r?[e,r]:[r,e]}function Hn(t){return t.rangeExtent?t.rangeExtent():Vn(t.range())}function qn(t,e,r,n){var i=r(t[0],t[1]),a=n(e[0],e[1]);return function(t){return a(i(t))}}function Gn(t,e){var r,n=0,i=t.length-1,a=t[n],o=t[i];return o<a&&(r=n,n=i,i=r,r=a,a=o,o=r),t[n]=e.floor(a),t[i]=e.ceil(o),t}function Zn(t){return t?{floor:function(e){return Math.floor(e/t)*t},ceil:function(e){return Math.ceil(e/t)*t}}:Yn}a.layout.histogram=function(){var t=!0,e=Number,r=Tn,n=_n;function i(i,o){for(var s,l,u=[],c=i.map(e,this),f=r.call(this,c,o),h=n.call(this,f,c,o),p=(o=-1,c.length),d=h.length-1,v=t?1:1/p;++o<d;)(s=u[o]=[]).dx=h[o+1]-(s.x=h[o]),s.y=0;if(d>0)for(o=-1;++o<p;)(l=c[o])>=f[0]&&l<=f[1]&&((s=u[a.bisect(h,l,1,d)-1]).y+=v,s.push(i[o]));return u}return i.value=function(t){return arguments.length?(e=t,i):e},i.range=function(t){return arguments.length?(r=ge(t),i):r},i.bins=function(t){return arguments.length?(n="number"==typeof t?function(e){return wn(e,t)}:ge(t),i):n},i.frequency=function(e){return arguments.length?(t=!!e,i):t},i},a.layout.pack=function(){var t,e=a.layout.hierarchy().sort(kn),r=0,n=[1,1];function i(i,a){var o=e.call(this,i,a),s=o[0],l=n[0],u=n[1],c=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(s.x=s.y=0,an(s,(function(t){t.r=+c(t.value)})),an(s,En),r){var f=r*(t?1:Math.max(2*s.r/l,2*s.r/u))/2;an(s,(function(t){t.r+=f})),an(s,En),an(s,(function(t){t.r-=f}))}return Pn(s,l/2,u/2,t?1:1/Math.max(2*s.r/l,2*s.r/u)),o}return i.size=function(t){return arguments.length?(n=t,i):n},i.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,i):t},i.padding=function(t){return arguments.length?(r=+t,i):r},rn(i,e)},a.layout.tree=function(){var t=a.layout.hierarchy().sort(null).value(null),e=In,r=[1,1],n=null;function i(i,a){var u=t.call(this,i,a),c=u[0],f=function(t){for(var e,r={A:null,children:[t]},n=[r];null!=(e=n.pop());)for(var i,a=e.children,o=0,s=a.length;o<s;++o)n.push((a[o]=i={_:a[o],parent:e,children:(i=a[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return r.children[0]}(c);if(an(f,o),f.parent.m=-f.z,nn(f,s),n)nn(c,l);else{var h=c,p=c,d=c;nn(c,(function(t){t.x<h.x&&(h=t),t.x>p.x&&(p=t),t.depth>d.depth&&(d=t)}));var v=e(h,p)/2-h.x,g=r[0]/(p.x+e(p,h)/2+v),y=r[1]/(d.depth||1);nn(c,(function(t){t.x=(t.x+v)*g,t.y=t.depth*y}))}return u}function o(t){var r=t.children,n=t.parent.children,i=t.i?n[t.i-1]:null;if(r.length){!function(t){for(var e,r=0,n=0,i=t.children,a=i.length;--a>=0;)(e=i[a]).z+=r,e.m+=r,r+=e.s+(n+=e.c)}(t);var a=(r[0].z+r[r.length-1].z)/2;i?(t.z=i.z+e(t._,i._),t.m=t.z-a):t.z=a}else i&&(t.z=i.z+e(t._,i._));t.parent.A=function(t,r,n){if(r){for(var i,a=t,o=t,s=r,l=a.parent.children[0],u=a.m,c=o.m,f=s.m,h=l.m;s=zn(s),a=Dn(a),s&&a;)l=Dn(l),(o=zn(o)).a=t,(i=s.z+f-a.z-u+e(s._,a._))>0&&(Rn(Fn(s,t,n),t,i),u+=i,c+=i),f+=s.m,u+=a.m,h+=l.m,c+=o.m;s&&!zn(o)&&(o.t=s,o.m+=f-c),a&&!Dn(l)&&(l.t=a,l.m+=u-h,n=t)}return n}(t,i,t.parent.A||n[0])}function s(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function l(t){t.x*=r[0],t.y=t.depth*r[1]}return i.separation=function(t){return arguments.length?(e=t,i):e},i.size=function(t){return arguments.length?(n=null==(r=t)?l:null,i):n?null:r},i.nodeSize=function(t){return arguments.length?(n=null==(r=t)?null:l,i):n?r:null},rn(i,t)},a.layout.cluster=function(){var t=a.layout.hierarchy().sort(null).value(null),e=In,r=[1,1],n=!1;function i(i,o){var s,l=t.call(this,i,o),u=l[0],c=0;an(u,(function(t){var r=t.children;r&&r.length?(t.x=function(t){return t.reduce((function(t,e){return t+e.x}),0)/t.length}(r),t.y=function(t){return 1+a.max(t,(function(t){return t.y}))}(r)):(t.x=s?c+=e(t,s):0,t.y=0,s=t)}));var f=Bn(u),h=Nn(u),p=f.x-e(f,h)/2,d=h.x+e(h,f)/2;return an(u,n?function(t){t.x=(t.x-u.x)*r[0],t.y=(u.y-t.y)*r[1]}:function(t){t.x=(t.x-p)/(d-p)*r[0],t.y=(1-(u.y?t.y/u.y:1))*r[1]}),l}return i.separation=function(t){return arguments.length?(e=t,i):e},i.size=function(t){return arguments.length?(n=null==(r=t),i):n?null:r},i.nodeSize=function(t){return arguments.length?(n=null!=(r=t),i):n?r:null},rn(i,t)},a.layout.treemap=function(){var t,e=a.layout.hierarchy(),r=Math.round,n=[1,1],i=null,o=jn,s=!1,l="squarify",u=.5*(1+Math.sqrt(5));function c(t,e){for(var r,n,i=-1,a=t.length;++i<a;)n=(r=t[i]).value*(e<0?0:e),r.area=isNaN(n)||n<=0?0:n}function f(t){var e=t.children;if(e&&e.length){var r,n,i,a=o(t),s=[],u=e.slice(),h=1/0,v="slice"===l?a.dx:"dice"===l?a.dy:"slice-dice"===l?1&t.depth?a.dy:a.dx:Math.min(a.dx,a.dy);for(c(u,a.dx*a.dy/t.value),s.area=0;(i=u.length)>0;)s.push(r=u[i-1]),s.area+=r.area,"squarify"!==l||(n=p(s,v))<=h?(u.pop(),h=n):(s.area-=s.pop().area,d(s,v,a,!1),v=Math.min(a.dx,a.dy),s.length=s.area=0,h=1/0);s.length&&(d(s,v,a,!0),s.length=s.area=0),e.forEach(f)}}function h(t){var e=t.children;if(e&&e.length){var r,n=o(t),i=e.slice(),a=[];for(c(i,n.dx*n.dy/t.value),a.area=0;r=i.pop();)a.push(r),a.area+=r.area,null!=r.z&&(d(a,r.z?n.dx:n.dy,n,!i.length),a.length=a.area=0);e.forEach(h)}}function p(t,e){for(var r,n=t.area,i=0,a=1/0,o=-1,s=t.length;++o<s;)(r=t[o].area)&&(r<a&&(a=r),r>i&&(i=r));return e*=e,(n*=n)?Math.max(e*i*u/n,n/(e*a*u)):1/0}function d(t,e,n,i){var a,o=-1,s=t.length,l=n.x,u=n.y,c=e?r(t.area/e):0;if(e==n.dx){for((i||c>n.dy)&&(c=n.dy);++o<s;)(a=t[o]).x=l,a.y=u,a.dy=c,l+=a.dx=Math.min(n.x+n.dx-l,c?r(a.area/c):0);a.z=!0,a.dx+=n.x+n.dx-l,n.y+=c,n.dy-=c}else{for((i||c>n.dx)&&(c=n.dx);++o<s;)(a=t[o]).x=l,a.y=u,a.dx=c,u+=a.dy=Math.min(n.y+n.dy-u,c?r(a.area/c):0);a.z=!1,a.dy+=n.y+n.dy-u,n.x+=c,n.dx-=c}}function v(r){var i=t||e(r),a=i[0];return a.x=a.y=0,a.value?(a.dx=n[0],a.dy=n[1]):a.dx=a.dy=0,t&&e.revalue(a),c([a],a.dx*a.dy/a.value),(t?h:f)(a),s&&(t=i),i}return v.size=function(t){return arguments.length?(n=t,v):n},v.padding=function(t){if(!arguments.length)return i;function e(e){return Un(e,t)}var r;return o=null==(i=t)?jn:"function"==(r=typeof t)?function(e){var r=t.call(v,e,e.depth);return null==r?jn(e):Un(e,"number"==typeof r?[r,r,r,r]:r)}:"number"===r?(t=[t,t,t,t],e):e,v},v.round=function(t){return arguments.length?(r=t?Math.round:Number,v):r!=Number},v.sticky=function(e){return arguments.length?(s=e,t=null,v):s},v.ratio=function(t){return arguments.length?(u=t,v):u},v.mode=function(t){return arguments.length?(l=t+"",v):l},rn(v,e)},a.random={normal:function(t,e){var r=arguments.length;return r<2&&(e=1),r<1&&(t=0),function(){var r,n,i;do{i=(r=2*Math.random()-1)*r+(n=2*Math.random()-1)*n}while(!i||i>1);return t+e*r*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var t=a.random.normal.apply(a,arguments);return function(){return Math.exp(t())}},bates:function(t){var e=a.random.irwinHall(t);return function(){return e()/t}},irwinHall:function(t){return function(){for(var e=0,r=0;r<t;r++)e+=Math.random();return e}}},a.scale={};var Yn={floor:z,ceil:z};function Wn(t,e,r,n){var i=[],o=[],s=0,l=Math.min(t.length,e.length)-1;for(t[l]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++s<=l;)i.push(r(t[s-1],t[s])),o.push(n(e[s-1],e[s]));return function(e){var r=a.bisect(t,e,1,l)-1;return o[r](i[r](e))}}function Xn(t,e,r,n){var i,a;function o(){var o=Math.min(t.length,e.length)>2?Wn:qn,l=n?Gr:qr;return i=o(t,e,l,r),a=o(e,t,l,Tr),s}function s(t){return i(t)}return s.invert=function(t){return a(t)},s.domain=function(e){return arguments.length?(t=e.map(Number),o()):t},s.range=function(t){return arguments.length?(e=t,o()):e},s.rangeRound=function(t){return s.range(t).interpolate(Fr)},s.clamp=function(t){return arguments.length?(n=t,o()):n},s.interpolate=function(t){return arguments.length?(r=t,o()):r},s.ticks=function(e){return Qn(t,e)},s.tickFormat=function(e,r){return d3_scale_linearTickFormat(t,e,r)},s.nice=function(e){return Kn(t,e),o()},s.copy=function(){return Xn(t,e,r,n)},o()}function Jn(t,e){return a.rebind(t,e,"range","rangeRound","interpolate","clamp")}function Kn(t,e){return Gn(t,Zn($n(t,e)[2])),Gn(t,Zn($n(t,e)[2])),t}function $n(t,e){null==e&&(e=10);var r=Vn(t),n=r[1]-r[0],i=Math.pow(10,Math.floor(Math.log(n/e)/Math.LN10)),a=e/n*i;return a<=.15?i*=10:a<=.35?i*=5:a<=.75&&(i*=2),r[0]=Math.ceil(r[0]/i)*i,r[1]=Math.floor(r[1]/i)*i+.5*i,r[2]=i,r}function Qn(t,e){return a.range.apply(a,$n(t,e))}function ti(t,e,r,n){function i(t){return(r?Math.log(t<0?0:t):-Math.log(t>0?0:-t))/Math.log(e)}function a(t){return r?Math.pow(e,t):-Math.pow(e,-t)}function o(e){return t(i(e))}return o.invert=function(e){return a(t.invert(e))},o.domain=function(e){return arguments.length?(r=e[0]>=0,t.domain((n=e.map(Number)).map(i)),o):n},o.base=function(r){return arguments.length?(e=+r,t.domain(n.map(i)),o):e},o.nice=function(){var e=Gn(n.map(i),r?Math:ei);return t.domain(e),n=e.map(a),o},o.ticks=function(){var t=Vn(n),o=[],s=t[0],l=t[1],u=Math.floor(i(s)),c=Math.ceil(i(l)),f=e%1?2:e;if(isFinite(c-u)){if(r){for(;u<c;u++)for(var h=1;h<f;h++)o.push(a(u)*h);o.push(a(u))}else for(o.push(a(u));u++<c;)for(h=f-1;h>0;h--)o.push(a(u)*h);for(u=0;o[u]<s;u++);for(c=o.length;o[c-1]>l;c--);o=o.slice(u,c)}return o},o.copy=function(){return ti(t.copy(),e,r,n)},Jn(o,t)}a.scale.linear=function(){return Xn([0,1],[0,1],Tr,!1)},a.scale.log=function(){return ti(a.scale.linear().domain([0,1]),10,!0,[1,10])};var ei={floor:function(t){return-Math.ceil(-t)},ceil:function(t){return-Math.floor(-t)}};function ri(t,e,r){var n=ni(e),i=ni(1/e);function a(e){return t(n(e))}return a.invert=function(e){return i(t.invert(e))},a.domain=function(e){return arguments.length?(t.domain((r=e.map(Number)).map(n)),a):r},a.ticks=function(t){return Qn(r,t)},a.tickFormat=function(t,e){return d3_scale_linearTickFormat(r,t,e)},a.nice=function(t){return a.domain(Kn(r,t))},a.exponent=function(o){return arguments.length?(n=ni(e=o),i=ni(1/e),t.domain(r.map(n)),a):e},a.copy=function(){return ri(t.copy(),e,r)},Jn(a,t)}function ni(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function ii(t,e){var r,n,i;function o(i){return n[((r.get(i)||("range"===e.t?r.set(i,t.push(i)):NaN))-1)%n.length]}function s(e,r){return a.range(t.length).map((function(t){return e+r*t}))}return o.domain=function(n){if(!arguments.length)return t;t=[],r=new k;for(var i,a=-1,s=n.length;++a<s;)r.has(i=n[a])||r.set(i,t.push(i));return o[e.t].apply(o,e.a)},o.range=function(t){return arguments.length?(n=t,i=0,e={t:"range",a:arguments},o):n},o.rangePoints=function(r,a){arguments.length<2&&(a=0);var l=r[0],u=r[1],c=t.length<2?(l=(l+u)/2,0):(u-l)/(t.length-1+a);return n=s(l+c*a/2,c),i=0,e={t:"rangePoints",a:arguments},o},o.rangeRoundPoints=function(r,a){arguments.length<2&&(a=0);var l=r[0],u=r[1],c=t.length<2?(l=u=Math.round((l+u)/2),0):(u-l)/(t.length-1+a)|0;return n=s(l+Math.round(c*a/2+(u-l-(t.length-1+a)*c)/2),c),i=0,e={t:"rangeRoundPoints",a:arguments},o},o.rangeBands=function(r,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var u=r[1]<r[0],c=r[u-0],f=(r[1-u]-c)/(t.length-a+2*l);return n=s(c+f*l,f),u&&n.reverse(),i=f*(1-a),e={t:"rangeBands",a:arguments},o},o.rangeRoundBands=function(r,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var u=r[1]<r[0],c=r[u-0],f=r[1-u],h=Math.floor((f-c)/(t.length-a+2*l));return n=s(c+Math.round((f-c-(t.length-a)*h)/2),h),u&&n.reverse(),i=Math.round(h*(1-a)),e={t:"rangeRoundBands",a:arguments},o},o.rangeBand=function(){return i},o.rangeExtent=function(){return Vn(e.a[0])},o.copy=function(){return ii(t,e)},o.domain(t)}a.scale.pow=function(){return ri(a.scale.linear(),1,[0,1])},a.scale.sqrt=function(){return a.scale.pow().exponent(.5)},a.scale.ordinal=function(){return ii([],{t:"range",a:[[]]})},a.scale.category10=function(){return a.scale.ordinal().range(ai)},a.scale.category20=function(){return a.scale.ordinal().range(oi)},a.scale.category20b=function(){return a.scale.ordinal().range(si)},a.scale.category20c=function(){return a.scale.ordinal().range(li)};var ai=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(se),oi=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(se),si=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(se),li=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(se);function ui(t,e){var r;function n(){var n=0,o=e.length;for(r=[];++n<o;)r[n-1]=a.quantile(t,n/o);return i}function i(t){if(!isNaN(t=+t))return e[a.bisect(r,t)]}return i.domain=function(e){return arguments.length?(t=e.map(y).filter(m).sort(g),n()):t},i.range=function(t){return arguments.length?(e=t,n()):e},i.quantiles=function(){return r},i.invertExtent=function(n){return(n=e.indexOf(n))<0?[NaN,NaN]:[n>0?r[n-1]:t[0],n<r.length?r[n]:t[t.length-1]]},i.copy=function(){return ui(t,e)},n()}function ci(t,e,r){var n,i;function a(e){return r[Math.max(0,Math.min(i,Math.floor(n*(e-t))))]}function o(){return n=r.length/(e-t),i=r.length-1,a}return a.domain=function(r){return arguments.length?(t=+r[0],e=+r[r.length-1],o()):[t,e]},a.range=function(t){return arguments.length?(r=t,o()):r},a.invertExtent=function(e){return[e=(e=r.indexOf(e))<0?NaN:e/n+t,e+1/n]},a.copy=function(){return ci(t,e,r)},o()}function fi(t,e){function r(r){if(r<=r)return e[a.bisect(t,r)]}return r.domain=function(e){return arguments.length?(t=e,r):t},r.range=function(t){return arguments.length?(e=t,r):e},r.invertExtent=function(r){return r=e.indexOf(r),[t[r-1],t[r]]},r.copy=function(){return fi(t,e)},r}function hi(t){function e(t){return+t}return e.invert=e,e.domain=e.range=function(r){return arguments.length?(t=r.map(e),e):t},e.ticks=function(e){return Qn(t,e)},e.tickFormat=function(e,r){return d3_scale_linearTickFormat(t,e,r)},e.copy=function(){return hi(t)},e}function pi(){return 0}a.scale.quantile=function(){return ui([],[])},a.scale.quantize=function(){return ci(0,1,[0,1])},a.scale.threshold=function(){return fi([.5],[0,1])},a.scale.identity=function(){return hi([0,1])},a.svg={},a.svg.arc=function(){var t=vi,e=gi,r=pi,n=di,i=yi,a=mi,o=xi;function s(){var s=Math.max(0,+t.apply(this,arguments)),u=Math.max(0,+e.apply(this,arguments)),c=i.apply(this,arguments)-It,f=a.apply(this,arguments)-It,h=Math.abs(f-c),p=c>f?0:1;if(u<s&&(d=u,u=s,s=d),h>=Ot)return l(u,p)+(s?l(s,1-p):"")+"Z";var d,v,g,y,m,x,b,_,w,T,k,A,M=0,S=0,E=[];if((y=(+o.apply(this,arguments)||0)/2)&&(g=n===di?Math.sqrt(s*s+u*u):+n.apply(this,arguments),p||(S*=-1),u&&(S=Rt(g/u*Math.sin(y))),s&&(M=Rt(g/s*Math.sin(y)))),u){m=u*Math.cos(c+S),x=u*Math.sin(c+S),b=u*Math.cos(f-S),_=u*Math.sin(f-S);var L=Math.abs(f-c-2*S)<=Ct?0:1;if(S&&bi(m,x,b,_)===p^L){var C=(c+f)/2;m=u*Math.cos(C),x=u*Math.sin(C),b=_=null}}else m=x=0;if(s){w=s*Math.cos(f-M),T=s*Math.sin(f-M),k=s*Math.cos(c+M),A=s*Math.sin(c+M);var P=Math.abs(c-f+2*M)<=Ct?0:1;if(M&&bi(w,T,k,A)===1-p^P){var O=(c+f)/2;w=s*Math.cos(O),T=s*Math.sin(O),k=A=null}}else w=T=0;if(h>Et&&(d=Math.min(Math.abs(u-s)/2,+r.apply(this,arguments)))>.001){v=s<u^p?0:1;var I=d,D=d;if(h<Ct){var z=null==k?[w,T]:null==b?[m,x]:De([m,x],[k,A],[b,_],[w,T]),R=m-z[0],F=x-z[1],B=b-z[0],N=_-z[1],j=1/Math.sin(Math.acos((R*B+F*N)/(Math.sqrt(R*R+F*F)*Math.sqrt(B*B+N*N)))/2),U=Math.sqrt(z[0]*z[0]+z[1]*z[1]);D=Math.min(d,(s-U)/(j-1)),I=Math.min(d,(u-U)/(j+1))}if(null!=b){var V=_i(null==k?[w,T]:[k,A],[m,x],u,I,p),H=_i([b,_],[w,T],u,I,p);d===I?E.push("M",V[0],"A",I,",",I," 0 0,",v," ",V[1],"A",u,",",u," 0 ",1-p^bi(V[1][0],V[1][1],H[1][0],H[1][1]),",",p," ",H[1],"A",I,",",I," 0 0,",v," ",H[0]):E.push("M",V[0],"A",I,",",I," 0 1,",v," ",H[0])}else E.push("M",m,",",x);if(null!=k){var q=_i([m,x],[k,A],s,-D,p),G=_i([w,T],null==b?[m,x]:[b,_],s,-D,p);d===D?E.push("L",G[0],"A",D,",",D," 0 0,",v," ",G[1],"A",s,",",s," 0 ",p^bi(G[1][0],G[1][1],q[1][0],q[1][1]),",",1-p," ",q[1],"A",D,",",D," 0 0,",v," ",q[0]):E.push("L",G[0],"A",D,",",D," 0 0,",v," ",q[0])}else E.push("L",w,",",T)}else E.push("M",m,",",x),null!=b&&E.push("A",u,",",u," 0 ",L,",",p," ",b,",",_),E.push("L",w,",",T),null!=k&&E.push("A",s,",",s," 0 ",P,",",1-p," ",k,",",A);return E.push("Z"),E.join("")}function l(t,e){return"M0,"+t+"A"+t+","+t+" 0 1,"+e+" 0,"+-t+"A"+t+","+t+" 0 1,"+e+" 0,"+t}return s.innerRadius=function(e){return arguments.length?(t=ge(e),s):t},s.outerRadius=function(t){return arguments.length?(e=ge(t),s):e},s.cornerRadius=function(t){return arguments.length?(r=ge(t),s):r},s.padRadius=function(t){return arguments.length?(n=t==di?di:ge(t),s):n},s.startAngle=function(t){return arguments.length?(i=ge(t),s):i},s.endAngle=function(t){return arguments.length?(a=ge(t),s):a},s.padAngle=function(t){return arguments.length?(o=ge(t),s):o},s.centroid=function(){var r=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,n=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-It;return[Math.cos(n)*r,Math.sin(n)*r]},s};var di="auto";function vi(t){return t.innerRadius}function gi(t){return t.outerRadius}function yi(t){return t.startAngle}function mi(t){return t.endAngle}function xi(t){return t&&t.padAngle}function bi(t,e,r,n){return(t-r)*e-(e-n)*t>0?0:1}function _i(t,e,r,n,i){var a=t[0]-e[0],o=t[1]-e[1],s=(i?n:-n)/Math.sqrt(a*a+o*o),l=s*o,u=-s*a,c=t[0]+l,f=t[1]+u,h=e[0]+l,p=e[1]+u,d=(c+h)/2,v=(f+p)/2,g=h-c,y=p-f,m=g*g+y*y,x=r-n,b=c*p-h*f,_=(y<0?-1:1)*Math.sqrt(Math.max(0,x*x*m-b*b)),w=(b*y-g*_)/m,T=(-b*g-y*_)/m,k=(b*y+g*_)/m,A=(-b*g+y*_)/m,M=w-d,S=T-v,E=k-d,L=A-v;return M*M+S*S>E*E+L*L&&(w=k,T=A),[[w-l,T-u],[w*r/x,T*r/x]]}function wi(){return!0}function Ti(t){var e=Ee,r=Le,n=wi,i=Ai,a=i.key,o=.7;function s(a){var s,l=[],u=[],c=-1,f=a.length,h=ge(e),p=ge(r);function d(){l.push("M",i(t(u),o))}for(;++c<f;)n.call(this,s=a[c],c)?u.push([+h.call(this,s,c),+p.call(this,s,c)]):u.length&&(d(),u=[]);return u.length&&d(),l.length?l.join(""):null}return s.x=function(t){return arguments.length?(e=t,s):e},s.y=function(t){return arguments.length?(r=t,s):r},s.defined=function(t){return arguments.length?(n=t,s):n},s.interpolate=function(t){return arguments.length?(a="function"==typeof t?i=t:(i=ki.get(t)||Ai).key,s):a},s.tension=function(t){return arguments.length?(o=t,s):o},s}a.svg.line=function(){return Ti(z)};var ki=a.map({linear:Ai,"linear-closed":Mi,step:function(t){for(var e=0,r=t.length,n=t[0],i=[n[0],",",n[1]];++e<r;)i.push("H",(n[0]+(n=t[e])[0])/2,"V",n[1]);return r>1&&i.push("H",n[0]),i.join("")},"step-before":Si,"step-after":Ei,basis:Pi,"basis-open":function(t){if(t.length<4)return Ai(t);for(var e,r=[],n=-1,i=t.length,a=[0],o=[0];++n<3;)e=t[n],a.push(e[0]),o.push(e[1]);for(r.push(Oi(zi,a)+","+Oi(zi,o)),--n;++n<i;)e=t[n],a.shift(),a.push(e[0]),o.shift(),o.push(e[1]),Ri(r,a,o);return r.join("")},"basis-closed":function(t){for(var e,r,n=-1,i=t.length,a=i+4,o=[],s=[];++n<4;)r=t[n%i],o.push(r[0]),s.push(r[1]);for(e=[Oi(zi,o),",",Oi(zi,s)],--n;++n<a;)r=t[n%i],o.shift(),o.push(r[0]),s.shift(),s.push(r[1]),Ri(e,o,s);return e.join("")},bundle:function(t,e){var r=t.length-1;if(r)for(var n,i,a=t[0][0],o=t[0][1],s=t[r][0]-a,l=t[r][1]-o,u=-1;++u<=r;)i=u/r,(n=t[u])[0]=e*n[0]+(1-e)*(a+i*s),n[1]=e*n[1]+(1-e)*(o+i*l);return Pi(t)},cardinal:function(t,e){return t.length<3?Ai(t):t[0]+Li(t,Ci(t,e))},"cardinal-open":function(t,e){return t.length<4?Ai(t):t[1]+Li(t.slice(1,-1),Ci(t,e))},"cardinal-closed":function(t,e){return t.length<3?Mi(t):t[0]+Li((t.push(t[0]),t),Ci([t[t.length-2]].concat(t,[t[1]]),e))},monotone:function(t){return t.length<3?Ai(t):t[0]+Li(t,function(t){for(var e,r,n,i,a=[],o=function(t){for(var e=0,r=t.length-1,n=[],i=t[0],a=t[1],o=n[0]=Fi(i,a);++e<r;)n[e]=(o+(o=Fi(i=a,a=t[e+1])))/2;return n[e]=o,n}(t),s=-1,l=t.length-1;++s<l;)e=Fi(t[s],t[s+1]),w(e)<Et?o[s]=o[s+1]=0:(i=(r=o[s]/e)*r+(n=o[s+1]/e)*n)>9&&(i=3*e/Math.sqrt(i),o[s]=i*r,o[s+1]=i*n);for(s=-1;++s<=l;)i=(t[Math.min(l,s+1)][0]-t[Math.max(0,s-1)][0])/(6*(1+o[s]*o[s])),a.push([i||0,o[s]*i||0]);return a}(t))}});function Ai(t){return t.length>1?t.join("L"):t+"Z"}function Mi(t){return t.join("L")+"Z"}function Si(t){for(var e=0,r=t.length,n=t[0],i=[n[0],",",n[1]];++e<r;)i.push("V",(n=t[e])[1],"H",n[0]);return i.join("")}function Ei(t){for(var e=0,r=t.length,n=t[0],i=[n[0],",",n[1]];++e<r;)i.push("H",(n=t[e])[0],"V",n[1]);return i.join("")}function Li(t,e){if(e.length<1||t.length!=e.length&&t.length!=e.length+2)return Ai(t);var r=t.length!=e.length,n="",i=t[0],a=t[1],o=e[0],s=o,l=1;if(r&&(n+="Q"+(a[0]-2*o[0]/3)+","+(a[1]-2*o[1]/3)+","+a[0]+","+a[1],i=t[1],l=2),e.length>1){s=e[1],a=t[l],l++,n+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(a[0]-s[0])+","+(a[1]-s[1])+","+a[0]+","+a[1];for(var u=2;u<e.length;u++,l++)a=t[l],s=e[u],n+="S"+(a[0]-s[0])+","+(a[1]-s[1])+","+a[0]+","+a[1]}if(r){var c=t[l];n+="Q"+(a[0]+2*s[0]/3)+","+(a[1]+2*s[1]/3)+","+c[0]+","+c[1]}return n}function Ci(t,e){for(var r,n=[],i=(1-e)/2,a=t[0],o=t[1],s=1,l=t.length;++s<l;)r=a,a=o,o=t[s],n.push([i*(o[0]-r[0]),i*(o[1]-r[1])]);return n}function Pi(t){if(t.length<3)return Ai(t);var e=1,r=t.length,n=t[0],i=n[0],a=n[1],o=[i,i,i,(n=t[1])[0]],s=[a,a,a,n[1]],l=[i,",",a,"L",Oi(zi,o),",",Oi(zi,s)];for(t.push(t[r-1]);++e<=r;)n=t[e],o.shift(),o.push(n[0]),s.shift(),s.push(n[1]),Ri(l,o,s);return t.pop(),l.push("L",n),l.join("")}function Oi(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}ki.forEach((function(t,e){e.key=t,e.closed=/-closed$/.test(t)}));var Ii=[0,2/3,1/3,0],Di=[0,1/3,2/3,0],zi=[0,1/6,2/3,1/6];function Ri(t,e,r){t.push("C",Oi(Ii,e),",",Oi(Ii,r),",",Oi(Di,e),",",Oi(Di,r),",",Oi(zi,e),",",Oi(zi,r))}function Fi(t,e){return(e[1]-t[1])/(e[0]-t[0])}function Bi(t){for(var e,r,n,i=-1,a=t.length;++i<a;)r=(e=t[i])[0],n=e[1]-It,e[0]=r*Math.cos(n),e[1]=r*Math.sin(n);return t}function Ni(t){var e=Ee,r=Ee,n=0,i=Le,a=wi,o=Ai,s=o.key,l=o,u="L",c=.7;function f(s){var f,h,p,d=[],v=[],g=[],y=-1,m=s.length,x=ge(e),b=ge(n),_=e===r?function(){return h}:ge(r),w=n===i?function(){return p}:ge(i);function T(){d.push("M",o(t(g),c),u,l(t(v.reverse()),c),"Z")}for(;++y<m;)a.call(this,f=s[y],y)?(v.push([h=+x.call(this,f,y),p=+b.call(this,f,y)]),g.push([+_.call(this,f,y),+w.call(this,f,y)])):v.length&&(T(),v=[],g=[]);return v.length&&T(),d.length?d.join(""):null}return f.x=function(t){return arguments.length?(e=r=t,f):r},f.x0=function(t){return arguments.length?(e=t,f):e},f.x1=function(t){return arguments.length?(r=t,f):r},f.y=function(t){return arguments.length?(n=i=t,f):i},f.y0=function(t){return arguments.length?(n=t,f):n},f.y1=function(t){return arguments.length?(i=t,f):i},f.defined=function(t){return arguments.length?(a=t,f):a},f.interpolate=function(t){return arguments.length?(s="function"==typeof t?o=t:(o=ki.get(t)||Ai).key,l=o.reverse||o,u=o.closed?"M":"L",f):s},f.tension=function(t){return arguments.length?(c=t,f):c},f}function ji(t){return t.source}function Ui(t){return t.target}function Vi(t){return t.radius}function Hi(t){return[t.x,t.y]}function qi(){return 64}function Gi(){return"circle"}function Zi(t){var e=Math.sqrt(t/Ct);return"M0,"+e+"A"+e+","+e+" 0 1,1 0,"+-e+"A"+e+","+e+" 0 1,1 0,"+e+"Z"}a.svg.line.radial=function(){var t=Ti(Bi);return t.radius=t.x,delete t.x,t.angle=t.y,delete t.y,t},Si.reverse=Ei,Ei.reverse=Si,a.svg.area=function(){return Ni(z)},a.svg.area.radial=function(){var t=Ni(Bi);return t.radius=t.x,delete t.x,t.innerRadius=t.x0,delete t.x0,t.outerRadius=t.x1,delete t.x1,t.angle=t.y,delete t.y,t.startAngle=t.y0,delete t.y0,t.endAngle=t.y1,delete t.y1,t},a.svg.chord=function(){var t=ji,e=Ui,r=Vi,n=yi,i=mi;function a(r,n){var i,a,u=o(this,t,r,n),c=o(this,e,r,n);return"M"+u.p0+s(u.r,u.p1,u.a1-u.a0)+(a=c,((i=u).a0==a.a0&&i.a1==a.a1?l(u.r,u.p1,u.r,u.p0):l(u.r,u.p1,c.r,c.p0)+s(c.r,c.p1,c.a1-c.a0)+l(c.r,c.p1,u.r,u.p0))+"Z")}function o(t,e,a,o){var s=e.call(t,a,o),l=r.call(t,s,o),u=n.call(t,s,o)-It,c=i.call(t,s,o)-It;return{r:l,a0:u,a1:c,p0:[l*Math.cos(u),l*Math.sin(u)],p1:[l*Math.cos(c),l*Math.sin(c)]}}function s(t,e,r){return"A"+t+","+t+" 0 "+ +(r>Ct)+",1 "+e}function l(t,e,r,n){return"Q 0,0 "+n}return a.radius=function(t){return arguments.length?(r=ge(t),a):r},a.source=function(e){return arguments.length?(t=ge(e),a):t},a.target=function(t){return arguments.length?(e=ge(t),a):e},a.startAngle=function(t){return arguments.length?(n=ge(t),a):n},a.endAngle=function(t){return arguments.length?(i=ge(t),a):i},a},a.svg.diagonal=function(){var t=ji,e=Ui,r=Hi;function n(n,i){var a=t.call(this,n,i),o=e.call(this,n,i),s=(a.y+o.y)/2,l=[a,{x:a.x,y:s},{x:o.x,y:s},o];return"M"+(l=l.map(r))[0]+"C"+l[1]+" "+l[2]+" "+l[3]}return n.source=function(e){return arguments.length?(t=ge(e),n):t},n.target=function(t){return arguments.length?(e=ge(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},a.svg.diagonal.radial=function(){var t=a.svg.diagonal(),e=Hi,r=t.projection;return t.projection=function(t){return arguments.length?r(function(t){return function(){var e=t.apply(this,arguments),r=e[0],n=e[1]-It;return[r*Math.cos(n),r*Math.sin(n)]}}(e=t)):e},t},a.svg.symbol=function(){var t=Gi,e=qi;function r(r,n){return(Yi.get(t.call(this,r,n))||Zi)(e.call(this,r,n))}return r.type=function(e){return arguments.length?(t=ge(e),r):t},r.size=function(t){return arguments.length?(e=ge(t),r):e},r};var Yi=a.map({circle:Zi,cross:function(t){var e=Math.sqrt(t/5)/2;return"M"+-3*e+","+-e+"H"+-e+"V"+-3*e+"H"+e+"V"+-e+"H"+3*e+"V"+e+"H"+e+"V"+3*e+"H"+-e+"V"+e+"H"+-3*e+"Z"},diamond:function(t){var e=Math.sqrt(t/(2*Xi)),r=e*Xi;return"M0,"+-e+"L"+r+",0 0,"+e+" "+-r+",0Z"},square:function(t){var e=Math.sqrt(t)/2;return"M"+-e+","+-e+"L"+e+","+-e+" "+e+","+e+" "+-e+","+e+"Z"},"triangle-down":function(t){var e=Math.sqrt(t/Wi),r=e*Wi/2;return"M0,"+r+"L"+e+","+-r+" "+-e+","+-r+"Z"},"triangle-up":function(t){var e=Math.sqrt(t/Wi),r=e*Wi/2;return"M0,"+-r+"L"+e+","+r+" "+-e+","+r+"Z"}});a.svg.symbolTypes=Yi.keys();var Wi=Math.sqrt(3),Xi=Math.tan(30*Dt);K.transition=function(t){for(var e,r,n=Qi||++ra,i=aa(t),a=[],o=ta||{time:Date.now(),ease:Or,delay:0,duration:250},s=-1,l=this.length;++s<l;){a.push(e=[]);for(var u=this[s],c=-1,f=u.length;++c<f;)(r=u[c])&&oa(r,c,i,n,o),e.push(r)}return $i(a,i,n)},K.interrupt=function(t){return this.each(null==t?Ji:Ki(aa(t)))};var Ji=Ki(aa());function Ki(t){return function(){var e,r,n;(e=this[t])&&(n=e[r=e.active])&&(n.timer.c=null,n.timer.t=NaN,--e.count?delete e[r]:delete this[t],e.active+=.5,n.event&&n.event.interrupt.call(this,this.__data__,n.index))}}function $i(t,e,r){return Z(t,ea),t.namespace=e,t.id=r,t}var Qi,ta,ea=[],ra=0;function na(t,e,r,n){var i=t.id,a=t.namespace;return vt(t,"function"==typeof r?function(t,o,s){t[a][i].tween.set(e,n(r.call(t,t.__data__,o,s)))}:(r=n(r),function(t){t[a][i].tween.set(e,r)}))}function ia(t){return null==t&&(t=""),function(){this.textContent=t}}function aa(t){return null==t?"__transition__":"__transition_"+t+"__"}function oa(t,e,r,n,i){var a,o,s,l,u,c=t[r]||(t[r]={active:0,count:0}),f=c[n];function h(r){var i=c.active,h=c[i];for(var d in h&&(h.timer.c=null,h.timer.t=NaN,--c.count,delete c[i],h.event&&h.event.interrupt.call(t,t.__data__,h.index)),c)if(+d<n){var v=c[d];v.timer.c=null,v.timer.t=NaN,--c.count,delete c[d]}o.c=p,ke((function(){return o.c&&p(r||1)&&(o.c=null,o.t=NaN),1}),0,a),c.active=n,f.event&&f.event.start.call(t,t.__data__,e),u=[],f.tween.forEach((function(r,n){(n=n.call(t,t.__data__,e))&&u.push(n)})),l=f.ease,s=f.duration}function p(i){for(var a=i/s,o=l(a),h=u.length;h>0;)u[--h].call(t,o);if(a>=1)return f.event&&f.event.end.call(t,t.__data__,e),--c.count?delete c[n]:delete t[r],1}f||(a=i.time,o=ke((function(t){var e=f.delay;if(o.t=e+a,e<=t)return h(t-e);o.c=h}),0,a),f=c[n]={tween:new k,time:a,timer:o,delay:i.delay,duration:i.duration,ease:i.ease,index:e},i=null,++c.count)}ea.call=K.call,ea.empty=K.empty,ea.node=K.node,ea.size=K.size,a.transition=function(t,e){return t&&t.transition?Qi?t.transition(e):t:a.selection().transition(t)},a.transition.prototype=ea,ea.select=function(t){var e,r,n,i=this.id,a=this.namespace,o=[];t=$(t);for(var s=-1,l=this.length;++s<l;){o.push(e=[]);for(var u=this[s],c=-1,f=u.length;++c<f;)(n=u[c])&&(r=t.call(n,n.__data__,c,s))?("__data__"in n&&(r.__data__=n.__data__),oa(r,c,a,i,n[a][i]),e.push(r)):e.push(null)}return $i(o,a,i)},ea.selectAll=function(t){var e,r,n,i,a,o=this.id,s=this.namespace,l=[];t=Q(t);for(var u=-1,c=this.length;++u<c;)for(var f=this[u],h=-1,p=f.length;++h<p;)if(n=f[h]){a=n[s][o],r=t.call(n,n.__data__,h,u),l.push(e=[]);for(var d=-1,v=r.length;++d<v;)(i=r[d])&&oa(i,d,s,o,a),e.push(i)}return $i(l,s,o)},ea.filter=function(t){var e,r,n=[];"function"!=typeof t&&(t=pt(t));for(var i=0,a=this.length;i<a;i++){n.push(e=[]);for(var o,s=0,l=(o=this[i]).length;s<l;s++)(r=o[s])&&t.call(r,r.__data__,s,i)&&e.push(r)}return $i(n,this.namespace,this.id)},ea.tween=function(t,e){var r=this.id,n=this.namespace;return arguments.length<2?this.node()[n][r].tween.get(t):vt(this,null==e?function(e){e[n][r].tween.remove(t)}:function(i){i[n][r].tween.set(t,e)})},ea.attr=function(t,e){if(arguments.length<2){for(e in t)this.attr(e,t[e]);return this}var r="transform"==t?Hr:Tr,n=a.ns.qualify(t);function i(){this.removeAttribute(n)}function o(){this.removeAttributeNS(n.space,n.local)}return na(this,"attr."+t,e,n.local?function(t){return null==t?o:(t+="",function(){var e,i=this.getAttributeNS(n.space,n.local);return i!==t&&(e=r(i,t),function(t){this.setAttributeNS(n.space,n.local,e(t))})})}:function(t){return null==t?i:(t+="",function(){var e,i=this.getAttribute(n);return i!==t&&(e=r(i,t),function(t){this.setAttribute(n,e(t))})})})},ea.attrTween=function(t,e){var r=a.ns.qualify(t);return this.tween("attr."+t,r.local?function(t,n){var i=e.call(this,t,n,this.getAttributeNS(r.space,r.local));return i&&function(t){this.setAttributeNS(r.space,r.local,i(t))}}:function(t,n){var i=e.call(this,t,n,this.getAttribute(r));return i&&function(t){this.setAttribute(r,i(t))}})},ea.style=function(t,e,r){var n=arguments.length;if(n<3){if("string"!=typeof t){for(r in n<2&&(e=""),t)this.style(r,t[r],e);return this}r=""}function i(){this.style.removeProperty(t)}return na(this,"style."+t,e,(function(e){return null==e?i:(e+="",function(){var n,i=c(this).getComputedStyle(this,null).getPropertyValue(t);return i!==e&&(n=Tr(i,e),function(e){this.style.setProperty(t,n(e),r)})})}))},ea.styleTween=function(t,e,r){return arguments.length<3&&(r=""),this.tween("style."+t,(function(n,i){var a=e.call(this,n,i,c(this).getComputedStyle(this,null).getPropertyValue(t));return a&&function(e){this.style.setProperty(t,a(e),r)}}))},ea.text=function(t){return na(this,"text",t,ia)},ea.remove=function(){var t=this.namespace;return this.each("end.transition",(function(){var e;this[t].count<2&&(e=this.parentNode)&&e.removeChild(this)}))},ea.ease=function(t){var e=this.id,r=this.namespace;return arguments.length<1?this.node()[r][e].ease:("function"!=typeof t&&(t=a.ease.apply(a,arguments)),vt(this,(function(n){n[r][e].ease=t})))},ea.delay=function(t){var e=this.id,r=this.namespace;return arguments.length<1?this.node()[r][e].delay:vt(this,"function"==typeof t?function(n,i,a){n[r][e].delay=+t.call(n,n.__data__,i,a)}:(t=+t,function(n){n[r][e].delay=t}))},ea.duration=function(t){var e=this.id,r=this.namespace;return arguments.length<1?this.node()[r][e].duration:vt(this,"function"==typeof t?function(n,i,a){n[r][e].duration=Math.max(1,t.call(n,n.__data__,i,a))}:(t=Math.max(1,t),function(n){n[r][e].duration=t}))},ea.each=function(t,e){var r=this.id,n=this.namespace;if(arguments.length<2){var i=ta,o=Qi;try{Qi=r,vt(this,(function(e,i,a){ta=e[n][r],t.call(e,e.__data__,i,a)}))}finally{ta=i,Qi=o}}else vt(this,(function(i){var o=i[n][r];(o.event||(o.event=a.dispatch("start","end","interrupt"))).on(t,e)}));return this},ea.transition=function(){for(var t,e,r,n=this.id,i=++ra,a=this.namespace,o=[],s=0,l=this.length;s<l;s++){o.push(t=[]);for(var u,c=0,f=(u=this[s]).length;c<f;c++)(e=u[c])&&oa(e,c,a,i,{time:(r=e[a][n]).time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration}),t.push(e)}return $i(o,a,i)},a.svg.axis=function(){var t,e=a.scale.linear(),r=sa,n=6,i=6,o=3,l=[10],u=null;function c(s){s.each((function(){var s,c=a.select(this),f=this.__chart__||e,h=this.__chart__=e.copy(),p=null==u?h.ticks?h.ticks.apply(h,l):h.domain():u,d=null==t?h.tickFormat?h.tickFormat.apply(h,l):z:t,v=c.selectAll(".tick").data(p,h),g=v.enter().insert("g",".domain").attr("class","tick").style("opacity",Et),y=a.transition(v.exit()).style("opacity",Et).remove(),m=a.transition(v.order()).style("opacity",1),x=Math.max(n,0)+o,b=Hn(h),_=c.selectAll(".domain").data([0]),w=(_.enter().append("path").attr("class","domain"),a.transition(_));g.append("line"),g.append("text");var T,k,A,M,S=g.select("line"),E=m.select("line"),L=v.select("text").text(d),C=g.select("text"),P=m.select("text"),O="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(s=ua,T="x",A="y",k="x2",M="y2",L.attr("dy",O<0?"0em":".71em").style("text-anchor","middle"),w.attr("d","M"+b[0]+","+O*i+"V0H"+b[1]+"V"+O*i)):(s=ca,T="y",A="x",k="y2",M="x2",L.attr("dy",".32em").style("text-anchor",O<0?"end":"start"),w.attr("d","M"+O*i+","+b[0]+"H0V"+b[1]+"H"+O*i)),S.attr(M,O*n),C.attr(A,O*x),E.attr(k,0).attr(M,O*n),P.attr(T,0).attr(A,O*x),h.rangeBand){var I=h,D=I.rangeBand()/2;f=h=function(t){return I(t)+D}}else f.rangeBand?f=h:y.call(s,h,f);g.call(s,f,h),m.call(s,h,h)}))}return c.scale=function(t){return arguments.length?(e=t,c):e},c.orient=function(t){return arguments.length?(r=t in la?t+"":sa,c):r},c.ticks=function(){return arguments.length?(l=s(arguments),c):l},c.tickValues=function(t){return arguments.length?(u=t,c):u},c.tickFormat=function(e){return arguments.length?(t=e,c):t},c.tickSize=function(t){var e=arguments.length;return e?(n=+t,i=+arguments[e-1],c):n},c.innerTickSize=function(t){return arguments.length?(n=+t,c):n},c.outerTickSize=function(t){return arguments.length?(i=+t,c):i},c.tickPadding=function(t){return arguments.length?(o=+t,c):o},c.tickSubdivide=function(){return arguments.length&&c},c};var sa="bottom",la={top:1,right:1,bottom:1,left:1};function ua(t,e,r){t.attr("transform",(function(t){var n=e(t);return"translate("+(isFinite(n)?n:r(t))+",0)"}))}function ca(t,e,r){t.attr("transform",(function(t){var n=e(t);return"translate(0,"+(isFinite(n)?n:r(t))+")"}))}a.svg.brush=function(){var t,e,r=q(h,"brushstart","brush","brushend"),n=null,i=null,o=[0,0],s=[0,0],l=!0,u=!0,f=ha[0];function h(t){t.each((function(){var t=a.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",g).on("touchstart.brush",g),e=t.selectAll(".background").data([0]);e.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var r=t.selectAll(".resize").data(f,z);r.exit().remove(),r.enter().append("g").attr("class",(function(t){return"resize "+t})).style("cursor",(function(t){return fa[t]})).append("rect").attr("x",(function(t){return/[ew]$/.test(t)?-3:null})).attr("y",(function(t){return/^[ns]/.test(t)?-3:null})).attr("width",6).attr("height",6).style("visibility","hidden"),r.style("display",h.empty()?"none":null);var o,s=a.transition(t),l=a.transition(e);n&&(o=Hn(n),l.attr("x",o[0]).attr("width",o[1]-o[0]),d(s)),i&&(o=Hn(i),l.attr("y",o[0]).attr("height",o[1]-o[0]),v(s)),p(s)}))}function p(t){t.selectAll(".resize").attr("transform",(function(t){return"translate("+o[+/e$/.test(t)]+","+s[+/^s/.test(t)]+")"}))}function d(t){t.select(".extent").attr("x",o[0]),t.selectAll(".extent,.n>rect,.s>rect").attr("width",o[1]-o[0])}function v(t){t.select(".extent").attr("y",s[0]),t.selectAll(".extent,.e>rect,.w>rect").attr("height",s[1]-s[0])}function g(){var f,g,y=this,m=a.select(a.event.target),x=r.of(y,arguments),b=a.select(y),_=m.datum(),w=!/^(n|s)$/.test(_)&&n,T=!/^(e|w)$/.test(_)&&i,k=m.classed("extent"),A=kt(y),M=a.mouse(y),S=a.select(c(y)).on("keydown.brush",(function(){32==a.event.keyCode&&(k||(f=null,M[0]-=o[1],M[1]-=s[1],k=2),V())})).on("keyup.brush",(function(){32==a.event.keyCode&&2==k&&(M[0]+=o[1],M[1]+=s[1],k=0,V())}));if(a.event.changedTouches?S.on("touchmove.brush",C).on("touchend.brush",O):S.on("mousemove.brush",C).on("mouseup.brush",O),b.interrupt().selectAll("*").interrupt(),k)M[0]=o[0]-M[0],M[1]=s[0]-M[1];else if(_){var E=+/w$/.test(_),L=+/^n/.test(_);g=[o[1-E]-M[0],s[1-L]-M[1]],M[0]=o[E],M[1]=s[L]}else a.event.altKey&&(f=M.slice());function C(){var t=a.mouse(y),e=!1;g&&(t[0]+=g[0],t[1]+=g[1]),k||(a.event.altKey?(f||(f=[(o[0]+o[1])/2,(s[0]+s[1])/2]),M[0]=o[+(t[0]<f[0])],M[1]=s[+(t[1]<f[1])]):f=null),w&&P(t,n,0)&&(d(b),e=!0),T&&P(t,i,1)&&(v(b),e=!0),e&&(p(b),x({type:"brush",mode:k?"move":"resize"}))}function P(r,n,i){var a,c,h=Hn(n),p=h[0],d=h[1],v=M[i],g=i?s:o,y=g[1]-g[0];if(k&&(p-=v,d-=y+v),a=(i?u:l)?Math.max(p,Math.min(d,r[i])):r[i],k?c=(a+=v)+y:(f&&(v=Math.max(p,Math.min(d,2*f[i]-a))),v<a?(c=a,a=v):c=v),g[0]!=a||g[1]!=c)return i?e=null:t=null,g[0]=a,g[1]=c,!0}function O(){C(),b.style("pointer-events","all").selectAll(".resize").style("display",h.empty()?"none":null),a.select("body").style("cursor",null),S.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),A(),x({type:"brushend"})}b.style("pointer-events","none").selectAll(".resize").style("display",null),a.select("body").style("cursor",m.style("cursor")),x({type:"brushstart"}),C()}return h.event=function(n){n.each((function(){var n=r.of(this,arguments),i={x:o,y:s,i:t,j:e},l=this.__chart__||i;this.__chart__=i,Qi?a.select(this).transition().each("start.brush",(function(){t=l.i,e=l.j,o=l.x,s=l.y,n({type:"brushstart"})})).tween("brush:brush",(function(){var r=kr(o,i.x),a=kr(s,i.y);return t=e=null,function(t){o=i.x=r(t),s=i.y=a(t),n({type:"brush",mode:"resize"})}})).each("end.brush",(function(){t=i.i,e=i.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})})):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))}))},h.x=function(t){return arguments.length?(f=ha[!(n=t)<<1|!i],h):n},h.y=function(t){return arguments.length?(f=ha[!n<<1|!(i=t)],h):i},h.clamp=function(t){return arguments.length?(n&&i?(l=!!t[0],u=!!t[1]):n?l=!!t:i&&(u=!!t),h):n&&i?[l,u]:n?l:i?u:null},h.extent=function(r){var a,l,u,c,f;return arguments.length?(n&&(a=r[0],l=r[1],i&&(a=a[0],l=l[0]),t=[a,l],n.invert&&(a=n(a),l=n(l)),l<a&&(f=a,a=l,l=f),a==o[0]&&l==o[1]||(o=[a,l])),i&&(u=r[0],c=r[1],n&&(u=u[1],c=c[1]),e=[u,c],i.invert&&(u=i(u),c=i(c)),c<u&&(f=u,u=c,c=f),u==s[0]&&c==s[1]||(s=[u,c])),h):(n&&(t?(a=t[0],l=t[1]):(a=o[0],l=o[1],n.invert&&(a=n.invert(a),l=n.invert(l)),l<a&&(f=a,a=l,l=f))),i&&(e?(u=e[0],c=e[1]):(u=s[0],c=s[1],i.invert&&(u=i.invert(u),c=i.invert(c)),c<u&&(f=u,u=c,c=f))),n&&i?[[a,u],[l,c]]:n?[a,l]:i&&[u,c])},h.clear=function(){return h.empty()||(o=[0,0],s=[0,0],t=e=null),h},h.empty=function(){return!!n&&o[0]==o[1]||!!i&&s[0]==s[1]},a.rebind(h,r,"on")};var fa={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},ha=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]];function pa(t){return JSON.parse(t.responseText)}function da(t){var e=l.createRange();return e.selectNode(l.body),e.createContextualFragment(t.responseText)}a.text=ye((function(t){return t.responseText})),a.json=function(t,e){return me(t,"application/json",pa,e)},a.html=function(t,e){return me(t,"text/html",da,e)},a.xml=ye((function(t){return t.responseXML})),void 0===(i="function"==typeof(n=a)?n.call(e,r,e,t):n)||(t.exports=i)}).apply(self)},88294:function(t,e,r){"use strict";t.exports=r(62849)},62849:function(t,e,r){"use strict";var n=r(91358),i=r(53435),a=r(18863),o=r(21527),s=r(71299),l=r(46775),u=r(30120),c=r(64941),f=r(90660),h=r(27084);function p(t,e){for(var r=e[0],n=e[1],a=1/(e[2]-r),o=1/(e[3]-n),s=new Array(t.length),l=0,u=t.length/2;l<u;l++)s[2*l]=i((t[2*l]-r)*a,0,1),s[2*l+1]=i((t[2*l+1]-n)*o,0,1);return s}t.exports=function(t,e){e||(e={}),t=u(t,"float64"),e=s(e,{bounds:"range bounds dataBox databox",maxDepth:"depth maxDepth maxdepth level maxLevel maxlevel levels",dtype:"type dtype format out dst output destination"});var r=l(e.maxDepth,255),i=l(e.bounds,o(t,2));i[0]===i[2]&&i[2]++,i[1]===i[3]&&i[3]++;var d,v=p(t,i),g=t.length>>>1;e.dtype||(e.dtype="array"),"string"==typeof e.dtype?d=new(f(e.dtype))(g):e.dtype&&(d=e.dtype,Array.isArray(d)&&(d.length=g));for(var y=0;y<g;++y)d[y]=y;var m=[],x=[],b=[],_=[];!function t(e,n,i,a,o,s){if(!a.length)return null;var l=m[o]||(m[o]=[]),u=b[o]||(b[o]=[]),c=x[o]||(x[o]=[]),f=l.length;if(++o>r||s>1073741824){for(var h=0;h<a.length;h++)l.push(a[h]),u.push(s),c.push(null,null,null,null);return f}if(l.push(a[0]),u.push(s),a.length<=1)return c.push(null,null,null,null),f;for(var p=.5*i,d=e+p,g=n+p,y=[],_=[],w=[],T=[],k=1,A=a.length;k<A;k++){var M=a[k],S=v[2*M],E=v[2*M+1];S<d?E<g?y.push(M):_.push(M):E<g?w.push(M):T.push(M)}return s<<=2,c.push(t(e,n,p,y,o,s),t(e,g,p,_,o,s+1),t(d,n,p,w,o,s+2),t(d,g,p,T,o,s+3)),f}(0,0,1,d,0,1);for(var w=0,T=0;T<m.length;T++){var k=m[T];if(d.set)d.set(k,w);else for(var A=0,M=k.length;A<M;A++)d[A+w]=k[A];var S=w+m[T].length;_[T]=[w,S],w=S}return d.range=function(){for(var e,r=[],o=arguments.length;o--;)r[o]=arguments[o];if(c(r[r.length-1])){var u=r.pop();r.length||null==u.x&&null==u.l&&null==u.left||(r=[u],e={}),e=s(u,{level:"level maxLevel",d:"d diam diameter r radius px pxSize pixel pixelSize maxD size minSize",lod:"lod details ranges offsets"})}else e={};r.length||(r=i);var f,d=a.apply(void 0,r),v=[Math.min(d.x,d.x+d.width),Math.min(d.y,d.y+d.height),Math.max(d.x,d.x+d.width),Math.max(d.y,d.y+d.height)],g=v[0],y=v[1],w=v[2],T=v[3],k=p([g,y,w,T],i),A=k[0],M=k[1],S=k[2],L=k[3],C=l(e.level,m.length);null!=e.d&&("number"==typeof e.d?f=[e.d,e.d]:e.d.length&&(f=e.d),C=Math.min(Math.max(Math.ceil(-h(Math.abs(f[0])/(i[2]-i[0]))),Math.ceil(-h(Math.abs(f[1])/(i[3]-i[1])))),C));if(C=Math.min(C,m.length),e.lod)return function(t,e,r,i,a){for(var o=[],s=0;s<a;s++){var l=b[s],u=_[s][0],c=E(t,e,s),f=E(r,i,s),h=n.ge(l,c),p=n.gt(l,f,h,l.length-1);o[s]=[h+u,p+u]}return o}(A,M,S,L,C);var P=[];return function e(r,n,i,a,o,s){if(null!==o&&null!==s&&!(A>r+i||M>n+i||S<r||L<n||a>=C||o===s)){var l=m[a];void 0===s&&(s=l.length);for(var u=o;u<s;u++){var c=l[u],f=t[2*c],h=t[2*c+1];f>=g&&f<=w&&h>=y&&h<=T&&P.push(c)}var p=x[a],d=p[4*o+0],v=p[4*o+1],b=p[4*o+2],_=p[4*o+3],k=function(t,e){for(var r=null,n=0;null===r;)if(r=t[4*e+n],++n>t.length)return null;return r}(p,o+1),E=.5*i,O=a+1;e(r,n,E,O,d,v||b||_||k),e(r,n+E,E,O,v,b||_||k),e(r+E,n,E,O,b,_||k),e(r+E,n+E,E,O,_,k)}}(0,0,1,0,0,1),P},d;function E(t,e,r){for(var n=1,i=.5,a=.5,o=.5,s=0;s<r;s++)n<<=2,n+=t<i?e<a?0:1:e<a?2:3,o*=.5,i+=t<i?-o:o,a+=e<a?-o:o;return n}}},30774:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(60302),i=6378137;function a(t){var e=0;if(t&&t.length>0){e+=Math.abs(o(t[0]));for(var r=1;r<t.length;r++)e-=Math.abs(o(t[r]))}return e}function o(t){var e,r,n,a,o,l,u=0,c=t.length;if(c>2){for(l=0;l<c;l++)l===c-2?(n=c-2,a=c-1,o=0):l===c-1?(n=c-1,a=0,o=1):(n=l,a=l+1,o=l+2),e=t[n],r=t[a],u+=(s(t[o][0])-s(e[0]))*Math.sin(s(r[1]));u=u*i*i/2}return u}function s(t){return t*Math.PI/180}e.default=function(t){return n.geomReduce(t,(function(t,e){return t+function(t){var e,r=0;switch(t.type){case"Polygon":return a(t.coordinates);case"MultiPolygon":for(e=0;e<t.coordinates.length;e++)r+=a(t.coordinates[e]);return r;case"Point":case"MultiPoint":case"LineString":case"MultiLineString":return 0}return 0}(e)}),0)}},23132:function(t,e){"use strict";function r(t,e,r){void 0===r&&(r={});var n={type:"Feature"};return(0===r.id||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=e||{},n.geometry=t,n}function n(t,e,n){if(void 0===n&&(n={}),!t)throw new Error("coordinates is required");if(!Array.isArray(t))throw new Error("coordinates must be an Array");if(t.length<2)throw new Error("coordinates must be at least 2 numbers long");if(!p(t[0])||!p(t[1]))throw new Error("coordinates must contain numbers");return r({type:"Point",coordinates:t},e,n)}function i(t,e,n){void 0===n&&(n={});for(var i=0,a=t;i<a.length;i++){var o=a[i];if(o.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");for(var s=0;s<o[o.length-1].length;s++)if(o[o.length-1][s]!==o[0][s])throw new Error("First and last Position are not equivalent.")}return r({type:"Polygon",coordinates:t},e,n)}function a(t,e,n){if(void 0===n&&(n={}),t.length<2)throw new Error("coordinates must be an array of two or more positions");return r({type:"LineString",coordinates:t},e,n)}function o(t,e){void 0===e&&(e={});var r={type:"FeatureCollection"};return e.id&&(r.id=e.id),e.bbox&&(r.bbox=e.bbox),r.features=t,r}function s(t,e,n){return void 0===n&&(n={}),r({type:"MultiLineString",coordinates:t},e,n)}function l(t,e,n){return void 0===n&&(n={}),r({type:"MultiPoint",coordinates:t},e,n)}function u(t,e,n){return void 0===n&&(n={}),r({type:"MultiPolygon",coordinates:t},e,n)}function c(t,r){void 0===r&&(r="kilometers");var n=e.factors[r];if(!n)throw new Error(r+" units is invalid");return t*n}function f(t,r){void 0===r&&(r="kilometers");var n=e.factors[r];if(!n)throw new Error(r+" units is invalid");return t/n}function h(t){return t%(2*Math.PI)*180/Math.PI}function p(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.earthRadius=6371008.8,e.factors={centimeters:100*e.earthRadius,centimetres:100*e.earthRadius,degrees:e.earthRadius/111325,feet:3.28084*e.earthRadius,inches:39.37*e.earthRadius,kilometers:e.earthRadius/1e3,kilometres:e.earthRadius/1e3,meters:e.earthRadius,metres:e.earthRadius,miles:e.earthRadius/1609.344,millimeters:1e3*e.earthRadius,millimetres:1e3*e.earthRadius,nauticalmiles:e.earthRadius/1852,radians:1,yards:1.0936*e.earthRadius},e.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:.001,kilometres:.001,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/e.earthRadius,yards:1.0936133},e.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,hectares:1e-4,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,millimeters:1e6,millimetres:1e6,yards:1.195990046},e.feature=r,e.geometry=function(t,e,r){switch(void 0===r&&(r={}),t){case"Point":return n(e).geometry;case"LineString":return a(e).geometry;case"Polygon":return i(e).geometry;case"MultiPoint":return l(e).geometry;case"MultiLineString":return s(e).geometry;case"MultiPolygon":return u(e).geometry;default:throw new Error(t+" is invalid")}},e.point=n,e.points=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return n(t,e)})),r)},e.polygon=i,e.polygons=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return i(t,e)})),r)},e.lineString=a,e.lineStrings=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return a(t,e)})),r)},e.featureCollection=o,e.multiLineString=s,e.multiPoint=l,e.multiPolygon=u,e.geometryCollection=function(t,e,n){return void 0===n&&(n={}),r({type:"GeometryCollection",geometries:t},e,n)},e.round=function(t,e){if(void 0===e&&(e=0),e&&!(e>=0))throw new Error("precision must be a positive number");var r=Math.pow(10,e||0);return Math.round(t*r)/r},e.radiansToLength=c,e.lengthToRadians=f,e.lengthToDegrees=function(t,e){return h(f(t,e))},e.bearingToAzimuth=function(t){var e=t%360;return e<0&&(e+=360),e},e.radiansToDegrees=h,e.degreesToRadians=function(t){return t%360*Math.PI/180},e.convertLength=function(t,e,r){if(void 0===e&&(e="kilometers"),void 0===r&&(r="kilometers"),!(t>=0))throw new Error("length must be a positive number");return c(f(t,e),r)},e.convertArea=function(t,r,n){if(void 0===r&&(r="meters"),void 0===n&&(n="kilometers"),!(t>=0))throw new Error("area must be a positive number");var i=e.areaFactors[r];if(!i)throw new Error("invalid original units");var a=e.areaFactors[n];if(!a)throw new Error("invalid final units");return t/i*a},e.isNumber=p,e.isObject=function(t){return!!t&&t.constructor===Object},e.validateBBox=function(t){if(!t)throw new Error("bbox is required");if(!Array.isArray(t))throw new Error("bbox must be an Array");if(4!==t.length&&6!==t.length)throw new Error("bbox must be an Array of 4 or 6 numbers");t.forEach((function(t){if(!p(t))throw new Error("bbox must only contain numbers")}))},e.validateId=function(t){if(!t)throw new Error("id is required");if(-1===["string","number"].indexOf(typeof t))throw new Error("id must be a number or a string")}},60302:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(23132);function i(t,e,r){if(null!==t)for(var n,a,o,s,l,u,c,f,h=0,p=0,d=t.type,v="FeatureCollection"===d,g="Feature"===d,y=v?t.features.length:1,m=0;m<y;m++){l=(f=!!(c=v?t.features[m].geometry:g?t.geometry:t)&&"GeometryCollection"===c.type)?c.geometries.length:1;for(var x=0;x<l;x++){var b=0,_=0;if(null!==(s=f?c.geometries[x]:c)){u=s.coordinates;var w=s.type;switch(h=!r||"Polygon"!==w&&"MultiPolygon"!==w?0:1,w){case null:break;case"Point":if(!1===e(u,p,m,b,_))return!1;p++,b++;break;case"LineString":case"MultiPoint":for(n=0;n<u.length;n++){if(!1===e(u[n],p,m,b,_))return!1;p++,"MultiPoint"===w&&b++}"LineString"===w&&b++;break;case"Polygon":case"MultiLineString":for(n=0;n<u.length;n++){for(a=0;a<u[n].length-h;a++){if(!1===e(u[n][a],p,m,b,_))return!1;p++}"MultiLineString"===w&&b++,"Polygon"===w&&_++}"Polygon"===w&&b++;break;case"MultiPolygon":for(n=0;n<u.length;n++){for(_=0,a=0;a<u[n].length;a++){for(o=0;o<u[n][a].length-h;o++){if(!1===e(u[n][a][o],p,m,b,_))return!1;p++}_++}b++}break;case"GeometryCollection":for(n=0;n<s.geometries.length;n++)if(!1===i(s.geometries[n],e,r))return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function a(t,e){var r;switch(t.type){case"FeatureCollection":for(r=0;r<t.features.length&&!1!==e(t.features[r].properties,r);r++);break;case"Feature":e(t.properties,0)}}function o(t,e){if("Feature"===t.type)e(t,0);else if("FeatureCollection"===t.type)for(var r=0;r<t.features.length&&!1!==e(t.features[r],r);r++);}function s(t,e){var r,n,i,a,o,s,l,u,c,f,h=0,p="FeatureCollection"===t.type,d="Feature"===t.type,v=p?t.features.length:1;for(r=0;r<v;r++){for(s=p?t.features[r].geometry:d?t.geometry:t,u=p?t.features[r].properties:d?t.properties:{},c=p?t.features[r].bbox:d?t.bbox:void 0,f=p?t.features[r].id:d?t.id:void 0,o=(l=!!s&&"GeometryCollection"===s.type)?s.geometries.length:1,i=0;i<o;i++)if(null!==(a=l?s.geometries[i]:s))switch(a.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":if(!1===e(a,h,u,c,f))return!1;break;case"GeometryCollection":for(n=0;n<a.geometries.length;n++)if(!1===e(a.geometries[n],h,u,c,f))return!1;break;default:throw new Error("Unknown Geometry Type")}else if(!1===e(null,h,u,c,f))return!1;h++}}function l(t,e){s(t,(function(t,r,i,a,o){var s,l=null===t?null:t.type;switch(l){case null:case"Point":case"LineString":case"Polygon":return!1!==e(n.feature(t,i,{bbox:a,id:o}),r,0)&&void 0}switch(l){case"MultiPoint":s="Point";break;case"MultiLineString":s="LineString";break;case"MultiPolygon":s="Polygon"}for(var u=0;u<t.coordinates.length;u++){var c={type:s,coordinates:t.coordinates[u]};if(!1===e(n.feature(c,i),r,u))return!1}}))}function u(t,e){l(t,(function(t,r,a){var o=0;if(t.geometry){var s=t.geometry.type;if("Point"!==s&&"MultiPoint"!==s){var l,u=0,c=0,f=0;return!1!==i(t,(function(i,s,h,p,d){if(void 0===l||r>u||p>c||d>f)return l=i,u=r,c=p,f=d,void(o=0);var v=n.lineString([l,i],t.properties);if(!1===e(v,r,a,d,o))return!1;o++,l=i}))&&void 0}}}))}function c(t,e){if(!t)throw new Error("geojson is required");l(t,(function(t,r,i){if(null!==t.geometry){var a=t.geometry.type,o=t.geometry.coordinates;switch(a){case"LineString":if(!1===e(t,r,i,0,0))return!1;break;case"Polygon":for(var s=0;s<o.length;s++)if(!1===e(n.lineString(o[s],t.properties),r,i,s))return!1}}}))}e.coordEach=i,e.coordReduce=function(t,e,r,n){var a=r;return i(t,(function(t,n,i,o,s){a=0===n&&void 0===r?t:e(a,t,n,i,o,s)}),n),a},e.propEach=a,e.propReduce=function(t,e,r){var n=r;return a(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.featureEach=o,e.featureReduce=function(t,e,r){var n=r;return o(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.coordAll=function(t){var e=[];return i(t,(function(t){e.push(t)})),e},e.geomEach=s,e.geomReduce=function(t,e,r){var n=r;return s(t,(function(t,i,a,o,s){n=0===i&&void 0===r?t:e(n,t,i,a,o,s)})),n},e.flattenEach=l,e.flattenReduce=function(t,e,r){var n=r;return l(t,(function(t,i,a){n=0===i&&0===a&&void 0===r?t:e(n,t,i,a)})),n},e.segmentEach=u,e.segmentReduce=function(t,e,r){var n=r,i=!1;return u(t,(function(t,a,o,s,l){n=!1===i&&void 0===r?t:e(n,t,a,o,s,l),i=!0})),n},e.lineEach=c,e.lineReduce=function(t,e,r){var n=r;return c(t,(function(t,i,a,o){n=0===i&&void 0===r?t:e(n,t,i,a,o)})),n},e.findSegment=function(t,e){if(e=e||{},!n.isObject(e))throw new Error("options is invalid");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.segmentIndex||0,l=e.properties;switch(t.type){case"FeatureCollection":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case"Feature":l=l||t.properties,r=t.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":r=t;break;default:throw new Error("geojson is invalid")}if(null===r)return null;var u=r.coordinates;switch(r.type){case"Point":case"MultiPoint":return null;case"LineString":return s<0&&(s=u.length+s-1),n.lineString([u[s],u[s+1]],l,e);case"Polygon":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s-1),n.lineString([u[o][s],u[o][s+1]],l,e);case"MultiLineString":return a<0&&(a=u.length+a),s<0&&(s=u[a].length+s-1),n.lineString([u[a][s],u[a][s+1]],l,e);case"MultiPolygon":return a<0&&(a=u.length+a),o<0&&(o=u[a].length+o),s<0&&(s=u[a][o].length-s-1),n.lineString([u[a][o][s],u[a][o][s+1]],l,e)}throw new Error("geojson is invalid")},e.findPoint=function(t,e){if(e=e||{},!n.isObject(e))throw new Error("options is invalid");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.coordIndex||0,l=e.properties;switch(t.type){case"FeatureCollection":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case"Feature":l=l||t.properties,r=t.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":r=t;break;default:throw new Error("geojson is invalid")}if(null===r)return null;var u=r.coordinates;switch(r.type){case"Point":return n.point(u,l,e);case"MultiPoint":return a<0&&(a=u.length+a),n.point(u[a],l,e);case"LineString":return s<0&&(s=u.length+s),n.point(u[s],l,e);case"Polygon":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s),n.point(u[o][s],l,e);case"MultiLineString":return a<0&&(a=u.length+a),s<0&&(s=u[a].length+s),n.point(u[a][s],l,e);case"MultiPolygon":return a<0&&(a=u.length+a),o<0&&(o=u[a].length+o),s<0&&(s=u[a][o].length-s),n.point(u[a][o][s],l,e)}throw new Error("geojson is invalid")}},85268:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(27138);function i(t){var e=[1/0,1/0,-1/0,-1/0];return n.coordEach(t,(function(t){e[0]>t[0]&&(e[0]=t[0]),e[1]>t[1]&&(e[1]=t[1]),e[2]<t[0]&&(e[2]=t[0]),e[3]<t[1]&&(e[3]=t[1])})),e}i.default=i,e.default=i},94228:function(t,e){"use strict";function r(t,e,r){void 0===r&&(r={});var n={type:"Feature"};return(0===r.id||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=e||{},n.geometry=t,n}function n(t,e,n){if(void 0===n&&(n={}),!t)throw new Error("coordinates is required");if(!Array.isArray(t))throw new Error("coordinates must be an Array");if(t.length<2)throw new Error("coordinates must be at least 2 numbers long");if(!p(t[0])||!p(t[1]))throw new Error("coordinates must contain numbers");return r({type:"Point",coordinates:t},e,n)}function i(t,e,n){void 0===n&&(n={});for(var i=0,a=t;i<a.length;i++){var o=a[i];if(o.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");for(var s=0;s<o[o.length-1].length;s++)if(o[o.length-1][s]!==o[0][s])throw new Error("First and last Position are not equivalent.")}return r({type:"Polygon",coordinates:t},e,n)}function a(t,e,n){if(void 0===n&&(n={}),t.length<2)throw new Error("coordinates must be an array of two or more positions");return r({type:"LineString",coordinates:t},e,n)}function o(t,e){void 0===e&&(e={});var r={type:"FeatureCollection"};return e.id&&(r.id=e.id),e.bbox&&(r.bbox=e.bbox),r.features=t,r}function s(t,e,n){return void 0===n&&(n={}),r({type:"MultiLineString",coordinates:t},e,n)}function l(t,e,n){return void 0===n&&(n={}),r({type:"MultiPoint",coordinates:t},e,n)}function u(t,e,n){return void 0===n&&(n={}),r({type:"MultiPolygon",coordinates:t},e,n)}function c(t,r){void 0===r&&(r="kilometers");var n=e.factors[r];if(!n)throw new Error(r+" units is invalid");return t*n}function f(t,r){void 0===r&&(r="kilometers");var n=e.factors[r];if(!n)throw new Error(r+" units is invalid");return t/n}function h(t){return t%(2*Math.PI)*180/Math.PI}function p(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.earthRadius=6371008.8,e.factors={centimeters:100*e.earthRadius,centimetres:100*e.earthRadius,degrees:e.earthRadius/111325,feet:3.28084*e.earthRadius,inches:39.37*e.earthRadius,kilometers:e.earthRadius/1e3,kilometres:e.earthRadius/1e3,meters:e.earthRadius,metres:e.earthRadius,miles:e.earthRadius/1609.344,millimeters:1e3*e.earthRadius,millimetres:1e3*e.earthRadius,nauticalmiles:e.earthRadius/1852,radians:1,yards:1.0936*e.earthRadius},e.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:.001,kilometres:.001,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/e.earthRadius,yards:1.0936133},e.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,hectares:1e-4,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,millimeters:1e6,millimetres:1e6,yards:1.195990046},e.feature=r,e.geometry=function(t,e,r){switch(void 0===r&&(r={}),t){case"Point":return n(e).geometry;case"LineString":return a(e).geometry;case"Polygon":return i(e).geometry;case"MultiPoint":return l(e).geometry;case"MultiLineString":return s(e).geometry;case"MultiPolygon":return u(e).geometry;default:throw new Error(t+" is invalid")}},e.point=n,e.points=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return n(t,e)})),r)},e.polygon=i,e.polygons=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return i(t,e)})),r)},e.lineString=a,e.lineStrings=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return a(t,e)})),r)},e.featureCollection=o,e.multiLineString=s,e.multiPoint=l,e.multiPolygon=u,e.geometryCollection=function(t,e,n){return void 0===n&&(n={}),r({type:"GeometryCollection",geometries:t},e,n)},e.round=function(t,e){if(void 0===e&&(e=0),e&&!(e>=0))throw new Error("precision must be a positive number");var r=Math.pow(10,e||0);return Math.round(t*r)/r},e.radiansToLength=c,e.lengthToRadians=f,e.lengthToDegrees=function(t,e){return h(f(t,e))},e.bearingToAzimuth=function(t){var e=t%360;return e<0&&(e+=360),e},e.radiansToDegrees=h,e.degreesToRadians=function(t){return t%360*Math.PI/180},e.convertLength=function(t,e,r){if(void 0===e&&(e="kilometers"),void 0===r&&(r="kilometers"),!(t>=0))throw new Error("length must be a positive number");return c(f(t,e),r)},e.convertArea=function(t,r,n){if(void 0===r&&(r="meters"),void 0===n&&(n="kilometers"),!(t>=0))throw new Error("area must be a positive number");var i=e.areaFactors[r];if(!i)throw new Error("invalid original units");var a=e.areaFactors[n];if(!a)throw new Error("invalid final units");return t/i*a},e.isNumber=p,e.isObject=function(t){return!!t&&t.constructor===Object},e.validateBBox=function(t){if(!t)throw new Error("bbox is required");if(!Array.isArray(t))throw new Error("bbox must be an Array");if(4!==t.length&&6!==t.length)throw new Error("bbox must be an Array of 4 or 6 numbers");t.forEach((function(t){if(!p(t))throw new Error("bbox must only contain numbers")}))},e.validateId=function(t){if(!t)throw new Error("id is required");if(-1===["string","number"].indexOf(typeof t))throw new Error("id must be a number or a string")}},27138:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(94228);function i(t,e,r){if(null!==t)for(var n,a,o,s,l,u,c,f,h=0,p=0,d=t.type,v="FeatureCollection"===d,g="Feature"===d,y=v?t.features.length:1,m=0;m<y;m++){l=(f=!!(c=v?t.features[m].geometry:g?t.geometry:t)&&"GeometryCollection"===c.type)?c.geometries.length:1;for(var x=0;x<l;x++){var b=0,_=0;if(null!==(s=f?c.geometries[x]:c)){u=s.coordinates;var w=s.type;switch(h=!r||"Polygon"!==w&&"MultiPolygon"!==w?0:1,w){case null:break;case"Point":if(!1===e(u,p,m,b,_))return!1;p++,b++;break;case"LineString":case"MultiPoint":for(n=0;n<u.length;n++){if(!1===e(u[n],p,m,b,_))return!1;p++,"MultiPoint"===w&&b++}"LineString"===w&&b++;break;case"Polygon":case"MultiLineString":for(n=0;n<u.length;n++){for(a=0;a<u[n].length-h;a++){if(!1===e(u[n][a],p,m,b,_))return!1;p++}"MultiLineString"===w&&b++,"Polygon"===w&&_++}"Polygon"===w&&b++;break;case"MultiPolygon":for(n=0;n<u.length;n++){for(_=0,a=0;a<u[n].length;a++){for(o=0;o<u[n][a].length-h;o++){if(!1===e(u[n][a][o],p,m,b,_))return!1;p++}_++}b++}break;case"GeometryCollection":for(n=0;n<s.geometries.length;n++)if(!1===i(s.geometries[n],e,r))return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function a(t,e){var r;switch(t.type){case"FeatureCollection":for(r=0;r<t.features.length&&!1!==e(t.features[r].properties,r);r++);break;case"Feature":e(t.properties,0)}}function o(t,e){if("Feature"===t.type)e(t,0);else if("FeatureCollection"===t.type)for(var r=0;r<t.features.length&&!1!==e(t.features[r],r);r++);}function s(t,e){var r,n,i,a,o,s,l,u,c,f,h=0,p="FeatureCollection"===t.type,d="Feature"===t.type,v=p?t.features.length:1;for(r=0;r<v;r++){for(s=p?t.features[r].geometry:d?t.geometry:t,u=p?t.features[r].properties:d?t.properties:{},c=p?t.features[r].bbox:d?t.bbox:void 0,f=p?t.features[r].id:d?t.id:void 0,o=(l=!!s&&"GeometryCollection"===s.type)?s.geometries.length:1,i=0;i<o;i++)if(null!==(a=l?s.geometries[i]:s))switch(a.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":if(!1===e(a,h,u,c,f))return!1;break;case"GeometryCollection":for(n=0;n<a.geometries.length;n++)if(!1===e(a.geometries[n],h,u,c,f))return!1;break;default:throw new Error("Unknown Geometry Type")}else if(!1===e(null,h,u,c,f))return!1;h++}}function l(t,e){s(t,(function(t,r,i,a,o){var s,l=null===t?null:t.type;switch(l){case null:case"Point":case"LineString":case"Polygon":return!1!==e(n.feature(t,i,{bbox:a,id:o}),r,0)&&void 0}switch(l){case"MultiPoint":s="Point";break;case"MultiLineString":s="LineString";break;case"MultiPolygon":s="Polygon"}for(var u=0;u<t.coordinates.length;u++){var c={type:s,coordinates:t.coordinates[u]};if(!1===e(n.feature(c,i),r,u))return!1}}))}function u(t,e){l(t,(function(t,r,a){var o=0;if(t.geometry){var s=t.geometry.type;if("Point"!==s&&"MultiPoint"!==s){var l,u=0,c=0,f=0;return!1!==i(t,(function(i,s,h,p,d){if(void 0===l||r>u||p>c||d>f)return l=i,u=r,c=p,f=d,void(o=0);var v=n.lineString([l,i],t.properties);if(!1===e(v,r,a,d,o))return!1;o++,l=i}))&&void 0}}}))}function c(t,e){if(!t)throw new Error("geojson is required");l(t,(function(t,r,i){if(null!==t.geometry){var a=t.geometry.type,o=t.geometry.coordinates;switch(a){case"LineString":if(!1===e(t,r,i,0,0))return!1;break;case"Polygon":for(var s=0;s<o.length;s++)if(!1===e(n.lineString(o[s],t.properties),r,i,s))return!1}}}))}e.coordEach=i,e.coordReduce=function(t,e,r,n){var a=r;return i(t,(function(t,n,i,o,s){a=0===n&&void 0===r?t:e(a,t,n,i,o,s)}),n),a},e.propEach=a,e.propReduce=function(t,e,r){var n=r;return a(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.featureEach=o,e.featureReduce=function(t,e,r){var n=r;return o(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.coordAll=function(t){var e=[];return i(t,(function(t){e.push(t)})),e},e.geomEach=s,e.geomReduce=function(t,e,r){var n=r;return s(t,(function(t,i,a,o,s){n=0===i&&void 0===r?t:e(n,t,i,a,o,s)})),n},e.flattenEach=l,e.flattenReduce=function(t,e,r){var n=r;return l(t,(function(t,i,a){n=0===i&&0===a&&void 0===r?t:e(n,t,i,a)})),n},e.segmentEach=u,e.segmentReduce=function(t,e,r){var n=r,i=!1;return u(t,(function(t,a,o,s,l){n=!1===i&&void 0===r?t:e(n,t,a,o,s,l),i=!0})),n},e.lineEach=c,e.lineReduce=function(t,e,r){var n=r;return c(t,(function(t,i,a,o){n=0===i&&void 0===r?t:e(n,t,i,a,o)})),n},e.findSegment=function(t,e){if(e=e||{},!n.isObject(e))throw new Error("options is invalid");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.segmentIndex||0,l=e.properties;switch(t.type){case"FeatureCollection":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case"Feature":l=l||t.properties,r=t.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":r=t;break;default:throw new Error("geojson is invalid")}if(null===r)return null;var u=r.coordinates;switch(r.type){case"Point":case"MultiPoint":return null;case"LineString":return s<0&&(s=u.length+s-1),n.lineString([u[s],u[s+1]],l,e);case"Polygon":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s-1),n.lineString([u[o][s],u[o][s+1]],l,e);case"MultiLineString":return a<0&&(a=u.length+a),s<0&&(s=u[a].length+s-1),n.lineString([u[a][s],u[a][s+1]],l,e);case"MultiPolygon":return a<0&&(a=u.length+a),o<0&&(o=u[a].length+o),s<0&&(s=u[a][o].length-s-1),n.lineString([u[a][o][s],u[a][o][s+1]],l,e)}throw new Error("geojson is invalid")},e.findPoint=function(t,e){if(e=e||{},!n.isObject(e))throw new Error("options is invalid");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.coordIndex||0,l=e.properties;switch(t.type){case"FeatureCollection":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case"Feature":l=l||t.properties,r=t.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":r=t;break;default:throw new Error("geojson is invalid")}if(null===r)return null;var u=r.coordinates;switch(r.type){case"Point":return n.point(u,l,e);case"MultiPoint":return a<0&&(a=u.length+a),n.point(u[a],l,e);case"LineString":return s<0&&(s=u.length+s),n.point(u[s],l,e);case"Polygon":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s),n.point(u[o][s],l,e);case"MultiLineString":return a<0&&(a=u.length+a),s<0&&(s=u[a].length+s),n.point(u[a][s],l,e);case"MultiPolygon":return a<0&&(a=u.length+a),o<0&&(o=u[a].length+o),s<0&&(s=u[a][o].length-s),n.point(u[a][o][s],l,e)}throw new Error("geojson is invalid")}},29261:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(88553),i=r(64182);e.default=function(t,e){void 0===e&&(e={});var r=0,a=0,o=0;return n.coordEach(t,(function(t){r+=t[0],a+=t[1],o++})),i.point([r/o,a/o],e.properties)}},64182:function(t,e){"use strict";function r(t,e,r){void 0===r&&(r={});var n={type:"Feature"};return(0===r.id||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=e||{},n.geometry=t,n}function n(t,e,n){return void 0===n&&(n={}),r({type:"Point",coordinates:t},e,n)}function i(t,e,n){void 0===n&&(n={});for(var i=0,a=t;i<a.length;i++){var o=a[i];if(o.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");for(var s=0;s<o[o.length-1].length;s++)if(o[o.length-1][s]!==o[0][s])throw new Error("First and last Position are not equivalent.")}return r({type:"Polygon",coordinates:t},e,n)}function a(t,e,n){if(void 0===n&&(n={}),t.length<2)throw new Error("coordinates must be an array of two or more positions");return r({type:"LineString",coordinates:t},e,n)}function o(t,e){void 0===e&&(e={});var r={type:"FeatureCollection"};return e.id&&(r.id=e.id),e.bbox&&(r.bbox=e.bbox),r.features=t,r}function s(t,e,n){return void 0===n&&(n={}),r({type:"MultiLineString",coordinates:t},e,n)}function l(t,e,n){return void 0===n&&(n={}),r({type:"MultiPoint",coordinates:t},e,n)}function u(t,e,n){return void 0===n&&(n={}),r({type:"MultiPolygon",coordinates:t},e,n)}function c(t,r){void 0===r&&(r="kilometers");var n=e.factors[r];if(!n)throw new Error(r+" units is invalid");return t*n}function f(t,r){void 0===r&&(r="kilometers");var n=e.factors[r];if(!n)throw new Error(r+" units is invalid");return t/n}function h(t){return t%(2*Math.PI)*180/Math.PI}function p(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)&&!/^\s*$/.test(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.earthRadius=6371008.8,e.factors={centimeters:100*e.earthRadius,centimetres:100*e.earthRadius,degrees:e.earthRadius/111325,feet:3.28084*e.earthRadius,inches:39.37*e.earthRadius,kilometers:e.earthRadius/1e3,kilometres:e.earthRadius/1e3,meters:e.earthRadius,metres:e.earthRadius,miles:e.earthRadius/1609.344,millimeters:1e3*e.earthRadius,millimetres:1e3*e.earthRadius,nauticalmiles:e.earthRadius/1852,radians:1,yards:e.earthRadius/1.0936},e.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:.001,kilometres:.001,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/e.earthRadius,yards:1/1.0936},e.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,millimeters:1e6,millimetres:1e6,yards:1.195990046},e.feature=r,e.geometry=function(t,e,r){switch(void 0===r&&(r={}),t){case"Point":return n(e).geometry;case"LineString":return a(e).geometry;case"Polygon":return i(e).geometry;case"MultiPoint":return l(e).geometry;case"MultiLineString":return s(e).geometry;case"MultiPolygon":return u(e).geometry;default:throw new Error(t+" is invalid")}},e.point=n,e.points=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return n(t,e)})),r)},e.polygon=i,e.polygons=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return i(t,e)})),r)},e.lineString=a,e.lineStrings=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return a(t,e)})),r)},e.featureCollection=o,e.multiLineString=s,e.multiPoint=l,e.multiPolygon=u,e.geometryCollection=function(t,e,n){return void 0===n&&(n={}),r({type:"GeometryCollection",geometries:t},e,n)},e.round=function(t,e){if(void 0===e&&(e=0),e&&!(e>=0))throw new Error("precision must be a positive number");var r=Math.pow(10,e||0);return Math.round(t*r)/r},e.radiansToLength=c,e.lengthToRadians=f,e.lengthToDegrees=function(t,e){return h(f(t,e))},e.bearingToAzimuth=function(t){var e=t%360;return e<0&&(e+=360),e},e.radiansToDegrees=h,e.degreesToRadians=function(t){return t%360*Math.PI/180},e.convertLength=function(t,e,r){if(void 0===e&&(e="kilometers"),void 0===r&&(r="kilometers"),!(t>=0))throw new Error("length must be a positive number");return c(f(t,e),r)},e.convertArea=function(t,r,n){if(void 0===r&&(r="meters"),void 0===n&&(n="kilometers"),!(t>=0))throw new Error("area must be a positive number");var i=e.areaFactors[r];if(!i)throw new Error("invalid original units");var a=e.areaFactors[n];if(!a)throw new Error("invalid final units");return t/i*a},e.isNumber=p,e.isObject=function(t){return!!t&&t.constructor===Object},e.validateBBox=function(t){if(!t)throw new Error("bbox is required");if(!Array.isArray(t))throw new Error("bbox must be an Array");if(4!==t.length&&6!==t.length)throw new Error("bbox must be an Array of 4 or 6 numbers");t.forEach((function(t){if(!p(t))throw new Error("bbox must only contain numbers")}))},e.validateId=function(t){if(!t)throw new Error("id is required");if(-1===["string","number"].indexOf(typeof t))throw new Error("id must be a number or a string")},e.radians2degrees=function(){throw new Error("method has been renamed to `radiansToDegrees`")},e.degrees2radians=function(){throw new Error("method has been renamed to `degreesToRadians`")},e.distanceToDegrees=function(){throw new Error("method has been renamed to `lengthToDegrees`")},e.distanceToRadians=function(){throw new Error("method has been renamed to `lengthToRadians`")},e.radiansToDistance=function(){throw new Error("method has been renamed to `radiansToLength`")},e.bearingToAngle=function(){throw new Error("method has been renamed to `bearingToAzimuth`")},e.convertDistance=function(){throw new Error("method has been renamed to `convertLength`")}},88553:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(64182);function i(t,e,r){if(null!==t)for(var n,a,o,s,l,u,c,f,h=0,p=0,d=t.type,v="FeatureCollection"===d,g="Feature"===d,y=v?t.features.length:1,m=0;m<y;m++){l=(f=!!(c=v?t.features[m].geometry:g?t.geometry:t)&&"GeometryCollection"===c.type)?c.geometries.length:1;for(var x=0;x<l;x++){var b=0,_=0;if(null!==(s=f?c.geometries[x]:c)){u=s.coordinates;var w=s.type;switch(h=!r||"Polygon"!==w&&"MultiPolygon"!==w?0:1,w){case null:break;case"Point":if(!1===e(u,p,m,b,_))return!1;p++,b++;break;case"LineString":case"MultiPoint":for(n=0;n<u.length;n++){if(!1===e(u[n],p,m,b,_))return!1;p++,"MultiPoint"===w&&b++}"LineString"===w&&b++;break;case"Polygon":case"MultiLineString":for(n=0;n<u.length;n++){for(a=0;a<u[n].length-h;a++){if(!1===e(u[n][a],p,m,b,_))return!1;p++}"MultiLineString"===w&&b++,"Polygon"===w&&_++}"Polygon"===w&&b++;break;case"MultiPolygon":for(n=0;n<u.length;n++){for(_=0,a=0;a<u[n].length;a++){for(o=0;o<u[n][a].length-h;o++){if(!1===e(u[n][a][o],p,m,b,_))return!1;p++}_++}b++}break;case"GeometryCollection":for(n=0;n<s.geometries.length;n++)if(!1===i(s.geometries[n],e,r))return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function a(t,e){var r;switch(t.type){case"FeatureCollection":for(r=0;r<t.features.length&&!1!==e(t.features[r].properties,r);r++);break;case"Feature":e(t.properties,0)}}function o(t,e){if("Feature"===t.type)e(t,0);else if("FeatureCollection"===t.type)for(var r=0;r<t.features.length&&!1!==e(t.features[r],r);r++);}function s(t,e){var r,n,i,a,o,s,l,u,c,f,h=0,p="FeatureCollection"===t.type,d="Feature"===t.type,v=p?t.features.length:1;for(r=0;r<v;r++){for(s=p?t.features[r].geometry:d?t.geometry:t,u=p?t.features[r].properties:d?t.properties:{},c=p?t.features[r].bbox:d?t.bbox:void 0,f=p?t.features[r].id:d?t.id:void 0,o=(l=!!s&&"GeometryCollection"===s.type)?s.geometries.length:1,i=0;i<o;i++)if(null!==(a=l?s.geometries[i]:s))switch(a.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":if(!1===e(a,h,u,c,f))return!1;break;case"GeometryCollection":for(n=0;n<a.geometries.length;n++)if(!1===e(a.geometries[n],h,u,c,f))return!1;break;default:throw new Error("Unknown Geometry Type")}else if(!1===e(null,h,u,c,f))return!1;h++}}function l(t,e){s(t,(function(t,r,i,a,o){var s,l=null===t?null:t.type;switch(l){case null:case"Point":case"LineString":case"Polygon":return!1!==e(n.feature(t,i,{bbox:a,id:o}),r,0)&&void 0}switch(l){case"MultiPoint":s="Point";break;case"MultiLineString":s="LineString";break;case"MultiPolygon":s="Polygon"}for(var u=0;u<t.coordinates.length;u++){var c={type:s,coordinates:t.coordinates[u]};if(!1===e(n.feature(c,i),r,u))return!1}}))}function u(t,e){l(t,(function(t,r,a){var o=0;if(t.geometry){var s=t.geometry.type;if("Point"!==s&&"MultiPoint"!==s){var l,u=0,c=0,f=0;return!1!==i(t,(function(i,s,h,p,d){if(void 0===l||r>u||p>c||d>f)return l=i,u=r,c=p,f=d,void(o=0);var v=n.lineString([l,i],t.properties);if(!1===e(v,r,a,d,o))return!1;o++,l=i}))&&void 0}}}))}function c(t,e){if(!t)throw new Error("geojson is required");l(t,(function(t,r,i){if(null!==t.geometry){var a=t.geometry.type,o=t.geometry.coordinates;switch(a){case"LineString":if(!1===e(t,r,i,0,0))return!1;break;case"Polygon":for(var s=0;s<o.length;s++)if(!1===e(n.lineString(o[s],t.properties),r,i,s))return!1}}}))}e.coordEach=i,e.coordReduce=function(t,e,r,n){var a=r;return i(t,(function(t,n,i,o,s){a=0===n&&void 0===r?t:e(a,t,n,i,o,s)}),n),a},e.propEach=a,e.propReduce=function(t,e,r){var n=r;return a(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.featureEach=o,e.featureReduce=function(t,e,r){var n=r;return o(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.coordAll=function(t){var e=[];return i(t,(function(t){e.push(t)})),e},e.geomEach=s,e.geomReduce=function(t,e,r){var n=r;return s(t,(function(t,i,a,o,s){n=0===i&&void 0===r?t:e(n,t,i,a,o,s)})),n},e.flattenEach=l,e.flattenReduce=function(t,e,r){var n=r;return l(t,(function(t,i,a){n=0===i&&0===a&&void 0===r?t:e(n,t,i,a)})),n},e.segmentEach=u,e.segmentReduce=function(t,e,r){var n=r,i=!1;return u(t,(function(t,a,o,s,l){n=!1===i&&void 0===r?t:e(n,t,a,o,s,l),i=!0})),n},e.lineEach=c,e.lineReduce=function(t,e,r){var n=r;return c(t,(function(t,i,a,o){n=0===i&&void 0===r?t:e(n,t,i,a,o)})),n},e.findSegment=function(t,e){if(e=e||{},!n.isObject(e))throw new Error("options is invalid");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.segmentIndex||0,l=e.properties;switch(t.type){case"FeatureCollection":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case"Feature":l=l||t.properties,r=t.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":r=t;break;default:throw new Error("geojson is invalid")}if(null===r)return null;var u=r.coordinates;switch(r.type){case"Point":case"MultiPoint":return null;case"LineString":return s<0&&(s=u.length+s-1),n.lineString([u[s],u[s+1]],l,e);case"Polygon":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s-1),n.lineString([u[o][s],u[o][s+1]],l,e);case"MultiLineString":return a<0&&(a=u.length+a),s<0&&(s=u[a].length+s-1),n.lineString([u[a][s],u[a][s+1]],l,e);case"MultiPolygon":return a<0&&(a=u.length+a),o<0&&(o=u[a].length+o),s<0&&(s=u[a][o].length-s-1),n.lineString([u[a][o][s],u[a][o][s+1]],l,e)}throw new Error("geojson is invalid")},e.findPoint=function(t,e){if(e=e||{},!n.isObject(e))throw new Error("options is invalid");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.coordIndex||0,l=e.properties;switch(t.type){case"FeatureCollection":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case"Feature":l=l||t.properties,r=t.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":r=t;break;default:throw new Error("geojson is invalid")}if(null===r)return null;var u=r.coordinates;switch(r.type){case"Point":return n.point(u,l,e);case"MultiPoint":return a<0&&(a=u.length+a),n.point(u[a],l,e);case"LineString":return s<0&&(s=u.length+s),n.point(u[s],l,e);case"Polygon":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s),n.point(u[o][s],l,e);case"MultiLineString":return a<0&&(a=u.length+a),s<0&&(s=u[a].length+s),n.point(u[a][s],l,e);case"MultiPolygon":return a<0&&(a=u.length+a),o<0&&(o=u[a].length+o),s<0&&(s=u[a][o].length-s),n.point(u[a][o][s],l,e)}throw new Error("geojson is invalid")}},65185:function(t){t.exports=function(t){var e=0,r=0,n=0,i=0;return t.map((function(t){var a=(t=t.slice())[0],o=a.toUpperCase();if(a!=o)switch(t[0]=o,a){case"a":t[6]+=n,t[7]+=i;break;case"v":t[1]+=i;break;case"h":t[1]+=n;break;default:for(var s=1;s<t.length;)t[s++]+=n,t[s++]+=i}switch(o){case"Z":n=e,i=r;break;case"H":n=t[1];break;case"V":i=t[1];break;case"M":n=e=t[1],i=r=t[2];break;default:n=t[t.length-2],i=t[t.length-1]}return t}))}},21527:function(t){"use strict";t.exports=function(t,e){if(!t||null==t.length)throw Error("Argument should be an array");e=null==e?1:Math.floor(e);for(var r=Array(2*e),n=0;n<e;n++){for(var i=-1/0,a=1/0,o=n,s=t.length;o<s;o+=e)t[o]>i&&(i=t[o]),t[o]<a&&(a=t[o]);r[n]=a,r[e+n]=i}return r}},6851:function(t){"use strict";t.exports=function(t,e,r){if("function"==typeof Array.prototype.findIndex)return t.findIndex(e,r);if("function"!=typeof e)throw new TypeError("predicate must be a function");var n=Object(t),i=n.length;if(0===i)return-1;for(var a=0;a<i;a++)if(e.call(r,n[a],a,n))return a;return-1}},54:function(t,e,r){"use strict";var n=r(21527);t.exports=function(t,e,r){if(!t||null==t.length)throw Error("Argument should be an array");null==e&&(e=1),null==r&&(r=n(t,e));for(var i=0;i<e;i++){var a=r[e+i],o=r[i],s=i,l=t.length;if(a===1/0&&o===-1/0)for(s=i;s<l;s+=e)t[s]=t[s]===a?1:t[s]===o?0:.5;else if(a===1/0)for(s=i;s<l;s+=e)t[s]=t[s]===a?1:0;else if(o===-1/0)for(s=i;s<l;s+=e)t[s]=t[s]===o?0:1;else{var u=a-o;for(s=i;s<l;s+=e)isNaN(t[s])||(t[s]=0===u?.5:(t[s]-o)/u)}}return t}},57471:function(t){t.exports=function(t,e){var r="number"==typeof t,n="number"==typeof e;r&&!n?(e=t,t=0):r||n||(t=0,e=0);var i=(e|=0)-(t|=0);if(i<0)throw new Error("array length must be positive");for(var a=new Array(i),o=0,s=t;o<i;o++,s++)a[o]=s;return a}},32791:function(t,e,r){"use strict";var n=r(90386);function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}var a,o,s=r(79616).codes,l=s.ERR_AMBIGUOUS_ARGUMENT,u=s.ERR_INVALID_ARG_TYPE,c=s.ERR_INVALID_ARG_VALUE,f=s.ERR_INVALID_RETURN_VALUE,h=s.ERR_MISSING_ARGS,p=r(73894),d=r(43827).inspect,v=r(43827).types,g=v.isPromise,y=v.isRegExp,m=Object.assign?Object.assign:r(73523).assign,x=Object.is?Object.is:r(64003);function b(){var t=r(74061);a=t.isDeepEqual,o=t.isDeepStrictEqual}new Map;var _=!1,w=t.exports=M,T={};function k(t){if(t.message instanceof Error)throw t.message;throw new p(t)}function A(t,e,r,n){if(!r){var i=!1;if(0===e)i=!0,n="No value argument passed to `assert.ok()`";else if(n instanceof Error)throw n;var a=new p({actual:r,expected:!0,message:n,operator:"==",stackStartFn:t});throw a.generatedMessage=i,a}}function M(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];A.apply(void 0,[M,e.length].concat(e))}w.fail=function t(e,r,i,a,o){var s,l=arguments.length;if(0===l?s="Failed":1===l?(i=e,e=void 0):(!1===_&&(_=!0,(n.emitWarning?n.emitWarning:console.warn.bind(console))("assert.fail() with more than one argument is deprecated. Please use assert.strictEqual() instead or only pass a message.","DeprecationWarning","DEP0094")),2===l&&(a="!=")),i instanceof Error)throw i;var u={actual:e,expected:r,operator:void 0===a?"fail":a,stackStartFn:o||t};void 0!==i&&(u.message=i);var c=new p(u);throw s&&(c.message=s,c.generatedMessage=!0),c},w.AssertionError=p,w.ok=M,w.equal=function t(e,r,n){if(arguments.length<2)throw new h("actual","expected");e!=r&&k({actual:e,expected:r,message:n,operator:"==",stackStartFn:t})},w.notEqual=function t(e,r,n){if(arguments.length<2)throw new h("actual","expected");e==r&&k({actual:e,expected:r,message:n,operator:"!=",stackStartFn:t})},w.deepEqual=function t(e,r,n){if(arguments.length<2)throw new h("actual","expected");void 0===a&&b(),a(e,r)||k({actual:e,expected:r,message:n,operator:"deepEqual",stackStartFn:t})},w.notDeepEqual=function t(e,r,n){if(arguments.length<2)throw new h("actual","expected");void 0===a&&b(),a(e,r)&&k({actual:e,expected:r,message:n,operator:"notDeepEqual",stackStartFn:t})},w.deepStrictEqual=function t(e,r,n){if(arguments.length<2)throw new h("actual","expected");void 0===a&&b(),o(e,r)||k({actual:e,expected:r,message:n,operator:"deepStrictEqual",stackStartFn:t})},w.notDeepStrictEqual=function t(e,r,n){if(arguments.length<2)throw new h("actual","expected");void 0===a&&b(),o(e,r)&&k({actual:e,expected:r,message:n,operator:"notDeepStrictEqual",stackStartFn:t})},w.strictEqual=function t(e,r,n){if(arguments.length<2)throw new h("actual","expected");x(e,r)||k({actual:e,expected:r,message:n,operator:"strictEqual",stackStartFn:t})},w.notStrictEqual=function t(e,r,n){if(arguments.length<2)throw new h("actual","expected");x(e,r)&&k({actual:e,expected:r,message:n,operator:"notStrictEqual",stackStartFn:t})};var S=function t(e,r,n){var i=this;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),r.forEach((function(t){t in e&&(void 0!==n&&"string"==typeof n[t]&&y(e[t])&&e[t].test(n[t])?i[t]=n[t]:i[t]=e[t])}))};function E(t,e,r,n){if("function"!=typeof e){if(y(e))return e.test(t);if(2===arguments.length)throw new u("expected",["Function","RegExp"],e);if("object"!==i(t)||null===t){var s=new p({actual:t,expected:e,message:r,operator:"deepStrictEqual",stackStartFn:n});throw s.operator=n.name,s}var l=Object.keys(e);if(e instanceof Error)l.push("name","message");else if(0===l.length)throw new c("error",e,"may not be an empty object");return void 0===a&&b(),l.forEach((function(i){"string"==typeof t[i]&&y(e[i])&&e[i].test(t[i])||function(t,e,r,n,i,a){if(!(r in t)||!o(t[r],e[r])){if(!n){var s=new S(t,i),l=new S(e,i,t),u=new p({actual:s,expected:l,operator:"deepStrictEqual",stackStartFn:a});throw u.actual=t,u.expected=e,u.operator=a.name,u}k({actual:t,expected:e,message:n,operator:a.name,stackStartFn:a})}}(t,e,i,r,l,n)})),!0}return void 0!==e.prototype&&t instanceof e||!Error.isPrototypeOf(e)&&!0===e.call({},t)}function L(t){if("function"!=typeof t)throw new u("fn","Function",t);try{t()}catch(t){return t}return T}function C(t){return g(t)||null!==t&&"object"===i(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function P(t){return Promise.resolve().then((function(){var e;if("function"==typeof t){if(!C(e=t()))throw new f("instance of Promise","promiseFn",e)}else{if(!C(t))throw new u("promiseFn",["Function","Promise"],t);e=t}return Promise.resolve().then((function(){return e})).then((function(){return T})).catch((function(t){return t}))}))}function O(t,e,r,n){if("string"==typeof r){if(4===arguments.length)throw new u("error",["Object","Error","Function","RegExp"],r);if("object"===i(e)&&null!==e){if(e.message===r)throw new l("error/message",'The error message "'.concat(e.message,'" is identical to the message.'))}else if(e===r)throw new l("error/message",'The error "'.concat(e,'" is identical to the message.'));n=r,r=void 0}else if(null!=r&&"object"!==i(r)&&"function"!=typeof r)throw new u("error",["Object","Error","Function","RegExp"],r);if(e===T){var a="";r&&r.name&&(a+=" (".concat(r.name,")")),a+=n?": ".concat(n):".";var o="rejects"===t.name?"rejection":"exception";k({actual:void 0,expected:r,operator:t.name,message:"Missing expected ".concat(o).concat(a),stackStartFn:t})}if(r&&!E(e,r,n,t))throw e}function I(t,e,r,n){if(e!==T){if("string"==typeof r&&(n=r,r=void 0),!r||E(e,r)){var i=n?": ".concat(n):".",a="doesNotReject"===t.name?"rejection":"exception";k({actual:e,expected:r,operator:t.name,message:"Got unwanted ".concat(a).concat(i,"\n")+'Actual message: "'.concat(e&&e.message,'"'),stackStartFn:t})}throw e}}function D(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];A.apply(void 0,[D,e.length].concat(e))}w.throws=function t(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];O.apply(void 0,[t,L(e)].concat(n))},w.rejects=function t(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];return P(e).then((function(e){return O.apply(void 0,[t,e].concat(n))}))},w.doesNotThrow=function t(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];I.apply(void 0,[t,L(e)].concat(n))},w.doesNotReject=function t(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];return P(e).then((function(e){return I.apply(void 0,[t,e].concat(n))}))},w.ifError=function t(e){if(null!=e){var r="ifError got unwanted exception: ";"object"===i(e)&&"string"==typeof e.message?0===e.message.length&&e.constructor?r+=e.constructor.name:r+=e.message:r+=d(e);var n=new p({actual:e,expected:null,operator:"ifError",message:r,stackStartFn:t}),a=e.stack;if("string"==typeof a){var o=a.split("\n");o.shift();for(var s=n.stack.split("\n"),l=0;l<o.length;l++){var u=s.indexOf(o[l]);if(-1!==u){s=s.slice(0,u);break}}n.stack="".concat(s.join("\n"),"\n").concat(o.join("\n"))}throw n}},w.strict=m(D,w,{equal:w.strictEqual,deepEqual:w.deepStrictEqual,notEqual:w.notStrictEqual,notDeepEqual:w.notDeepStrictEqual}),w.strict.strict=w.strict},73894:function(t,e,r){"use strict";var n=r(90386);function i(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function o(t,e){return!e||"object"!==h(e)&&"function"!=typeof e?s(t):e}function s(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function l(t){var e="function"==typeof Map?new Map:void 0;return l=function(t){if(null===t||(r=t,-1===Function.toString.call(r).indexOf("[native code]")))return t;var r;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,n)}function n(){return u(t,arguments,f(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),c(n,t)},l(t)}function u(t,e,r){return u=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}()?Reflect.construct:function(t,e,r){var n=[null];n.push.apply(n,e);var i=new(Function.bind.apply(t,n));return r&&c(i,r.prototype),i},u.apply(null,arguments)}function c(t,e){return c=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},c(t,e)}function f(t){return f=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},f(t)}function h(t){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},h(t)}var p=r(43827).inspect,d=r(79616).codes.ERR_INVALID_ARG_TYPE;function v(t,e,r){return(void 0===r||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}var g="",y="",m="",x="",b={deepStrictEqual:"Expected values to be strictly deep-equal:",strictEqual:"Expected values to be strictly equal:",strictEqualObject:'Expected "actual" to be reference-equal to "expected":',deepEqual:"Expected values to be loosely deep-equal:",equal:"Expected values to be loosely equal:",notDeepStrictEqual:'Expected "actual" not to be strictly deep-equal to:',notStrictEqual:'Expected "actual" to be strictly unequal to:',notStrictEqualObject:'Expected "actual" not to be reference-equal to "expected":',notDeepEqual:'Expected "actual" not to be loosely deep-equal to:',notEqual:'Expected "actual" to be loosely unequal to:',notIdentical:"Values identical but not reference-equal:"};function _(t){var e=Object.keys(t),r=Object.create(Object.getPrototypeOf(t));return e.forEach((function(e){r[e]=t[e]})),Object.defineProperty(r,"message",{value:t.message}),r}function w(t){return p(t,{compact:!1,customInspect:!1,depth:1e3,maxArrayLength:1/0,showHidden:!1,breakLength:1/0,showProxy:!1,sorted:!0,getters:!0})}var T=function(t){function e(t){var r;if(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),"object"!==h(t)||null===t)throw new d("options","Object",t);var i=t.message,a=t.operator,l=t.stackStartFn,u=t.actual,c=t.expected,p=Error.stackTraceLimit;if(Error.stackTraceLimit=0,null!=i)r=o(this,f(e).call(this,String(i)));else if(n.stderr&&n.stderr.isTTY&&(n.stderr&&n.stderr.getColorDepth&&1!==n.stderr.getColorDepth()?(g="",y="",x="",m=""):(g="",y="",x="",m="")),"object"===h(u)&&null!==u&&"object"===h(c)&&null!==c&&"stack"in u&&u instanceof Error&&"stack"in c&&c instanceof Error&&(u=_(u),c=_(c)),"deepStrictEqual"===a||"strictEqual"===a)r=o(this,f(e).call(this,function(t,e,r){var i="",a="",o=0,s="",l=!1,u=w(t),c=u.split("\n"),f=w(e).split("\n"),p=0,d="";if("strictEqual"===r&&"object"===h(t)&&"object"===h(e)&&null!==t&&null!==e&&(r="strictEqualObject"),1===c.length&&1===f.length&&c[0]!==f[0]){var _=c[0].length+f[0].length;if(_<=10){if(!("object"===h(t)&&null!==t||"object"===h(e)&&null!==e||0===t&&0===e))return"".concat(b[r],"\n\n")+"".concat(c[0]," !== ").concat(f[0],"\n")}else if("strictEqualObject"!==r&&_<(n.stderr&&n.stderr.isTTY?n.stderr.columns:80)){for(;c[0][p]===f[0][p];)p++;p>2&&(d="\n  ".concat(function(t,e){if(e=Math.floor(e),0==t.length||0==e)return"";var r=t.length*e;for(e=Math.floor(Math.log(e)/Math.log(2));e;)t+=t,e--;return t+t.substring(0,r-t.length)}(" ",p),"^"),p=0)}}for(var T=c[c.length-1],k=f[f.length-1];T===k&&(p++<2?s="\n  ".concat(T).concat(s):i=T,c.pop(),f.pop(),0!==c.length&&0!==f.length);)T=c[c.length-1],k=f[f.length-1];var A=Math.max(c.length,f.length);if(0===A){var M=u.split("\n");if(M.length>30)for(M[26]="".concat(g,"...").concat(x);M.length>27;)M.pop();return"".concat(b.notIdentical,"\n\n").concat(M.join("\n"),"\n")}p>3&&(s="\n".concat(g,"...").concat(x).concat(s),l=!0),""!==i&&(s="\n  ".concat(i).concat(s),i="");var S=0,E=b[r]+"\n".concat(y,"+ actual").concat(x," ").concat(m,"- expected").concat(x),L=" ".concat(g,"...").concat(x," Lines skipped");for(p=0;p<A;p++){var C=p-o;if(c.length<p+1)C>1&&p>2&&(C>4?(a+="\n".concat(g,"...").concat(x),l=!0):C>3&&(a+="\n  ".concat(f[p-2]),S++),a+="\n  ".concat(f[p-1]),S++),o=p,i+="\n".concat(m,"-").concat(x," ").concat(f[p]),S++;else if(f.length<p+1)C>1&&p>2&&(C>4?(a+="\n".concat(g,"...").concat(x),l=!0):C>3&&(a+="\n  ".concat(c[p-2]),S++),a+="\n  ".concat(c[p-1]),S++),o=p,a+="\n".concat(y,"+").concat(x," ").concat(c[p]),S++;else{var P=f[p],O=c[p],I=O!==P&&(!v(O,",")||O.slice(0,-1)!==P);I&&v(P,",")&&P.slice(0,-1)===O&&(I=!1,O+=","),I?(C>1&&p>2&&(C>4?(a+="\n".concat(g,"...").concat(x),l=!0):C>3&&(a+="\n  ".concat(c[p-2]),S++),a+="\n  ".concat(c[p-1]),S++),o=p,a+="\n".concat(y,"+").concat(x," ").concat(O),i+="\n".concat(m,"-").concat(x," ").concat(P),S+=2):(a+=i,i="",1!==C&&0!==p||(a+="\n  ".concat(O),S++))}if(S>20&&p<A-2)return"".concat(E).concat(L,"\n").concat(a,"\n").concat(g,"...").concat(x).concat(i,"\n")+"".concat(g,"...").concat(x)}return"".concat(E).concat(l?L:"","\n").concat(a).concat(i).concat(s).concat(d)}(u,c,a)));else if("notDeepStrictEqual"===a||"notStrictEqual"===a){var T=b[a],k=w(u).split("\n");if("notStrictEqual"===a&&"object"===h(u)&&null!==u&&(T=b.notStrictEqualObject),k.length>30)for(k[26]="".concat(g,"...").concat(x);k.length>27;)k.pop();r=1===k.length?o(this,f(e).call(this,"".concat(T," ").concat(k[0]))):o(this,f(e).call(this,"".concat(T,"\n\n").concat(k.join("\n"),"\n")))}else{var A=w(u),M="",S=b[a];"notDeepEqual"===a||"notEqual"===a?(A="".concat(b[a],"\n\n").concat(A)).length>1024&&(A="".concat(A.slice(0,1021),"...")):(M="".concat(w(c)),A.length>512&&(A="".concat(A.slice(0,509),"...")),M.length>512&&(M="".concat(M.slice(0,509),"...")),"deepEqual"===a||"equal"===a?A="".concat(S,"\n\n").concat(A,"\n\nshould equal\n\n"):M=" ".concat(a," ").concat(M)),r=o(this,f(e).call(this,"".concat(A).concat(M)))}return Error.stackTraceLimit=p,r.generatedMessage=!i,Object.defineProperty(s(r),"name",{value:"AssertionError [ERR_ASSERTION]",enumerable:!1,writable:!0,configurable:!0}),r.code="ERR_ASSERTION",r.actual=u,r.expected=c,r.operator=a,Error.captureStackTrace&&Error.captureStackTrace(s(r),l),r.stack,r.name="AssertionError",o(r)}var r,l;return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&c(t,e)}(e,t),r=e,l=[{key:"toString",value:function(){return"".concat(this.name," [").concat(this.code,"]: ").concat(this.message)}},{key:p.custom,value:function(t,e){return p(this,function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable})))),n.forEach((function(e){i(t,e,r[e])}))}return t}({},e,{customInspect:!1,depth:0}))}}],l&&a(r.prototype,l),e}(l(Error));t.exports=T},79616:function(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function i(t){return i=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},i(t)}function a(t,e){return a=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},a(t,e)}var o,s,l={};function u(t,e,r){r||(r=Error);var o=function(r){function o(r,a,s){var l;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,o),l=function(t,e){return!e||"object"!==n(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}(this,i(o).call(this,function(t,r,n){return"string"==typeof e?e:e(t,r,n)}(r,a,s))),l.code=t,l}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&a(t,e)}(o,r),o}(r);l[t]=o}function c(t,e){if(Array.isArray(t)){var r=t.length;return t=t.map((function(t){return String(t)})),r>2?"one of ".concat(e," ").concat(t.slice(0,r-1).join(", "),", or ")+t[r-1]:2===r?"one of ".concat(e," ").concat(t[0]," or ").concat(t[1]):"of ".concat(e," ").concat(t[0])}return"of ".concat(e," ").concat(String(t))}u("ERR_AMBIGUOUS_ARGUMENT",'The "%s" argument is ambiguous. %s',TypeError),u("ERR_INVALID_ARG_TYPE",(function(t,e,i){var a,s,l,u,f;if(void 0===o&&(o=r(32791)),o("string"==typeof t,"'name' must be a string"),"string"==typeof e&&(s="not ",e.substr(0,4)===s)?(a="must not be",e=e.replace(/^not /,"")):a="must be",function(t,e,r){return(void 0===r||r>t.length)&&(r=t.length),t.substring(r-9,r)===e}(t," argument"))l="The ".concat(t," ").concat(a," ").concat(c(e,"type"));else{var h=("number"!=typeof f&&(f=0),f+1>(u=t).length||-1===u.indexOf(".",f)?"argument":"property");l='The "'.concat(t,'" ').concat(h," ").concat(a," ").concat(c(e,"type"))}return l+". Received type ".concat(n(i))}),TypeError),u("ERR_INVALID_ARG_VALUE",(function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"is invalid";void 0===s&&(s=r(43827));var i=s.inspect(e);return i.length>128&&(i="".concat(i.slice(0,128),"...")),"The argument '".concat(t,"' ").concat(n,". Received ").concat(i)}),TypeError,RangeError),u("ERR_INVALID_RETURN_VALUE",(function(t,e,r){var i;return i=r&&r.constructor&&r.constructor.name?"instance of ".concat(r.constructor.name):"type ".concat(n(r)),"Expected ".concat(t,' to be returned from the "').concat(e,'"')+" function but got ".concat(i,".")}),TypeError),u("ERR_MISSING_ARGS",(function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];void 0===o&&(o=r(32791)),o(e.length>0,"At least one arg needs to be specified");var i="The ",a=e.length;switch(e=e.map((function(t){return'"'.concat(t,'"')})),a){case 1:i+="".concat(e[0]," argument");break;case 2:i+="".concat(e[0]," and ").concat(e[1]," arguments");break;default:i+=e.slice(0,a-1).join(", "),i+=", and ".concat(e[a-1]," arguments")}return"".concat(i," must be specified")}),TypeError),t.exports.codes=l},74061:function(t,e,r){"use strict";function n(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=[],n=!0,i=!1,a=void 0;try{for(var o,s=t[Symbol.iterator]();!(n=(o=s.next()).done)&&(r.push(o.value),!e||r.length!==e);n=!0);}catch(t){i=!0,a=t}finally{try{n||null==s.return||s.return()}finally{if(i)throw a}}return r}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}var a=void 0!==/a/g.flags,o=function(t){var e=[];return t.forEach((function(t){return e.push(t)})),e},s=function(t){var e=[];return t.forEach((function(t,r){return e.push([r,t])})),e},l=Object.is?Object.is:r(64003),u=Object.getOwnPropertySymbols?Object.getOwnPropertySymbols:function(){return[]},c=Number.isNaN?Number.isNaN:r(15567);function f(t){return t.call.bind(t)}var h=f(Object.prototype.hasOwnProperty),p=f(Object.prototype.propertyIsEnumerable),d=f(Object.prototype.toString),v=r(43827).types,g=v.isAnyArrayBuffer,y=v.isArrayBufferView,m=v.isDate,x=v.isMap,b=v.isRegExp,_=v.isSet,w=v.isNativeError,T=v.isBoxedPrimitive,k=v.isNumberObject,A=v.isStringObject,M=v.isBooleanObject,S=v.isBigIntObject,E=v.isSymbolObject,L=v.isFloat32Array,C=v.isFloat64Array;function P(t){if(0===t.length||t.length>10)return!0;for(var e=0;e<t.length;e++){var r=t.charCodeAt(e);if(r<48||r>57)return!0}return 10===t.length&&t>=Math.pow(2,32)}function O(t){return Object.keys(t).filter(P).concat(u(t).filter(Object.prototype.propertyIsEnumerable.bind(t)))}function I(t,e){if(t===e)return 0;for(var r=t.length,n=e.length,i=0,a=Math.min(r,n);i<a;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0}var D=0,z=1,R=2,F=3;function B(t,e,r,n){if(t===e)return 0!==t||!r||l(t,e);if(r){if("object"!==i(t))return"number"==typeof t&&c(t)&&c(e);if("object"!==i(e)||null===t||null===e)return!1;if(Object.getPrototypeOf(t)!==Object.getPrototypeOf(e))return!1}else{if(null===t||"object"!==i(t))return(null===e||"object"!==i(e))&&t==e;if(null===e||"object"!==i(e))return!1}var o,s,u,f,h=d(t);if(h!==d(e))return!1;if(Array.isArray(t)){if(t.length!==e.length)return!1;var p=O(t),v=O(e);return p.length===v.length&&j(t,e,r,n,z,p)}if("[object Object]"===h&&(!x(t)&&x(e)||!_(t)&&_(e)))return!1;if(m(t)){if(!m(e)||Date.prototype.getTime.call(t)!==Date.prototype.getTime.call(e))return!1}else if(b(t)){if(!b(e)||(u=t,f=e,!(a?u.source===f.source&&u.flags===f.flags:RegExp.prototype.toString.call(u)===RegExp.prototype.toString.call(f))))return!1}else if(w(t)||t instanceof Error){if(t.message!==e.message||t.name!==e.name)return!1}else{if(y(t)){if(r||!L(t)&&!C(t)){if(!function(t,e){return t.byteLength===e.byteLength&&0===I(new Uint8Array(t.buffer,t.byteOffset,t.byteLength),new Uint8Array(e.buffer,e.byteOffset,e.byteLength))}(t,e))return!1}else if(!function(t,e){if(t.byteLength!==e.byteLength)return!1;for(var r=0;r<t.byteLength;r++)if(t[r]!==e[r])return!1;return!0}(t,e))return!1;var P=O(t),B=O(e);return P.length===B.length&&j(t,e,r,n,D,P)}if(_(t))return!(!_(e)||t.size!==e.size)&&j(t,e,r,n,R);if(x(t))return!(!x(e)||t.size!==e.size)&&j(t,e,r,n,F);if(g(t)){if(s=e,(o=t).byteLength!==s.byteLength||0!==I(new Uint8Array(o),new Uint8Array(s)))return!1}else if(T(t)&&!function(t,e){return k(t)?k(e)&&l(Number.prototype.valueOf.call(t),Number.prototype.valueOf.call(e)):A(t)?A(e)&&String.prototype.valueOf.call(t)===String.prototype.valueOf.call(e):M(t)?M(e)&&Boolean.prototype.valueOf.call(t)===Boolean.prototype.valueOf.call(e):S(t)?S(e)&&BigInt.prototype.valueOf.call(t)===BigInt.prototype.valueOf.call(e):E(e)&&Symbol.prototype.valueOf.call(t)===Symbol.prototype.valueOf.call(e)}(t,e))return!1}return j(t,e,r,n,D)}function N(t,e){return e.filter((function(e){return p(t,e)}))}function j(t,e,r,a,l,c){if(5===arguments.length){c=Object.keys(t);var f=Object.keys(e);if(c.length!==f.length)return!1}for(var d=0;d<c.length;d++)if(!h(e,c[d]))return!1;if(r&&5===arguments.length){var v=u(t);if(0!==v.length){var g=0;for(d=0;d<v.length;d++){var y=v[d];if(p(t,y)){if(!p(e,y))return!1;c.push(y),g++}else if(p(e,y))return!1}var m=u(e);if(v.length!==m.length&&N(e,m).length!==g)return!1}else{var x=u(e);if(0!==x.length&&0!==N(e,x).length)return!1}}if(0===c.length&&(l===D||l===z&&0===t.length||0===t.size))return!0;if(void 0===a)a={val1:new Map,val2:new Map,position:0};else{var b=a.val1.get(t);if(void 0!==b){var _=a.val2.get(e);if(void 0!==_)return b===_}a.position++}a.val1.set(t,a.position),a.val2.set(e,a.position);var w=function(t,e,r,a,l,u){var c=0;if(u===R){if(!function(t,e,r,n){for(var a=null,s=o(t),l=0;l<s.length;l++){var u=s[l];if("object"===i(u)&&null!==u)null===a&&(a=new Set),a.add(u);else if(!e.has(u)){if(r)return!1;if(!H(t,e,u))return!1;null===a&&(a=new Set),a.add(u)}}if(null!==a){for(var c=o(e),f=0;f<c.length;f++){var h=c[f];if("object"===i(h)&&null!==h){if(!U(a,h,r,n))return!1}else if(!r&&!t.has(h)&&!U(a,h,r,n))return!1}return 0===a.size}return!0}(t,e,r,l))return!1}else if(u===F){if(!function(t,e,r,a){for(var o=null,l=s(t),u=0;u<l.length;u++){var c=n(l[u],2),f=c[0],h=c[1];if("object"===i(f)&&null!==f)null===o&&(o=new Set),o.add(f);else{var p=e.get(f);if(void 0===p&&!e.has(f)||!B(h,p,r,a)){if(r)return!1;if(!q(t,e,f,h,a))return!1;null===o&&(o=new Set),o.add(f)}}}if(null!==o){for(var d=s(e),v=0;v<d.length;v++){var g=n(d[v],2),y=(f=g[0],g[1]);if("object"===i(f)&&null!==f){if(!G(o,t,f,y,r,a))return!1}else if(!(r||t.has(f)&&B(t.get(f),y,!1,a)||G(o,t,f,y,!1,a)))return!1}return 0===o.size}return!0}(t,e,r,l))return!1}else if(u===z)for(;c<t.length;c++){if(!h(t,c)){if(h(e,c))return!1;for(var f=Object.keys(t);c<f.length;c++){var p=f[c];if(!h(e,p)||!B(t[p],e[p],r,l))return!1}return f.length===Object.keys(e).length}if(!h(e,c)||!B(t[c],e[c],r,l))return!1}for(c=0;c<a.length;c++){var d=a[c];if(!B(t[d],e[d],r,l))return!1}return!0}(t,e,r,c,a,l);return a.val1.delete(t),a.val2.delete(e),w}function U(t,e,r,n){for(var i=o(t),a=0;a<i.length;a++){var s=i[a];if(B(e,s,r,n))return t.delete(s),!0}return!1}function V(t){switch(i(t)){case"undefined":return null;case"object":return;case"symbol":return!1;case"string":t=+t;case"number":if(c(t))return!1}return!0}function H(t,e,r){var n=V(r);return null!=n?n:e.has(n)&&!t.has(n)}function q(t,e,r,n,i){var a=V(r);if(null!=a)return a;var o=e.get(a);return!(void 0===o&&!e.has(a)||!B(n,o,!1,i))&&!t.has(a)&&B(n,o,!1,i)}function G(t,e,r,n,i,a){for(var s=o(t),l=0;l<s.length;l++){var u=s[l];if(B(r,u,i,a)&&B(n,e.get(u),i,a))return t.delete(u),!0}return!1}t.exports={isDeepEqual:function(t,e){return B(t,e,!1)},isDeepStrictEqual:function(t,e){return B(t,e,!0)}}},95341:function(t,e){"use strict";e.byteLength=function(t){var e=s(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,a=s(t),o=a[0],l=a[1],u=new i(function(t,e,r){return 3*(e+r)/4-r}(0,o,l)),c=0,f=l>0?o-4:o;for(r=0;r<f;r+=4)e=n[t.charCodeAt(r)]<<18|n[t.charCodeAt(r+1)]<<12|n[t.charCodeAt(r+2)]<<6|n[t.charCodeAt(r+3)],u[c++]=e>>16&255,u[c++]=e>>8&255,u[c++]=255&e;return 2===l&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,u[c++]=255&e),1===l&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,u[c++]=e>>8&255,u[c++]=255&e),u},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,a=[],o=16383,s=0,u=n-i;s<u;s+=o)a.push(l(t,s,s+o>u?u:s+o));return 1===i?(e=t[n-1],a.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],a.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"=")),a.join("")};for(var r=[],n=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0;o<64;++o)r[o]=a[o],n[a.charCodeAt(o)]=o;function s(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function l(t,e,n){for(var i,a,o=[],s=e;s<n;s+=3)i=(t[s]<<16&16711680)+(t[s+1]<<8&65280)+(255&t[s+2]),o.push(r[(a=i)>>18&63]+r[a>>12&63]+r[a>>6&63]+r[63&a]);return o.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},91358:function(t){"use strict";function e(t,e,r,n,i){for(var a=i+1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)>=0?(a=o,i=o-1):n=o+1}return a}function r(t,e,r,n,i){for(var a=i+1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)>0?(a=o,i=o-1):n=o+1}return a}function n(t,e,r,n,i){for(var a=n-1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)<0?(a=o,n=o+1):i=o-1}return a}function i(t,e,r,n,i){for(var a=n-1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)<=0?(a=o,n=o+1):i=o-1}return a}function a(t,e,r,n,i){for(;n<=i;){var a=n+i>>>1,o=t[a],s=void 0!==r?r(o,e):o-e;if(0===s)return a;s<=0?n=a+1:i=a-1}return-1}function o(t,e,r,n,i,a){return"function"==typeof r?a(t,e,r,void 0===n?0:0|n,void 0===i?t.length-1:0|i):a(t,e,void 0,void 0===r?0:0|r,void 0===n?t.length-1:0|n)}t.exports={ge:function(t,r,n,i,a){return o(t,r,n,i,a,e)},gt:function(t,e,n,i,a){return o(t,e,n,i,a,r)},lt:function(t,e,r,i,a){return o(t,e,r,i,a,n)},le:function(t,e,r,n,a){return o(t,e,r,n,a,i)},eq:function(t,e,r,n,i){return o(t,e,r,n,i,a)}}},13547:function(t,e){"use strict";function r(t){var e=32;return(t&=-t)&&e--,65535&t&&(e-=16),16711935&t&&(e-=8),252645135&t&&(e-=4),858993459&t&&(e-=2),1431655765&t&&(e-=1),e}e.INT_BITS=32,e.INT_MAX=2147483647,e.INT_MIN=-1<<31,e.sign=function(t){return(t>0)-(t<0)},e.abs=function(t){var e=t>>31;return(t^e)-e},e.min=function(t,e){return e^(t^e)&-(t<e)},e.max=function(t,e){return t^(t^e)&-(t<e)},e.isPow2=function(t){return!(t&t-1||!t)},e.log2=function(t){var e,r;return e=(t>65535)<<4,e|=r=((t>>>=e)>255)<<3,e|=r=((t>>>=r)>15)<<2,(e|=r=((t>>>=r)>3)<<1)|(t>>>=r)>>1},e.log10=function(t){return t>=1e9?9:t>=1e8?8:t>=1e7?7:t>=1e6?6:t>=1e5?5:t>=1e4?4:t>=1e3?3:t>=100?2:t>=10?1:0},e.popCount=function(t){return 16843009*((t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135)>>>24},e.countTrailingZeros=r,e.nextPow2=function(t){return t+=0===t,--t,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,1+(t|=t>>>16)},e.prevPow2=function(t){return t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)-(t>>>1)},e.parity=function(t){return t^=t>>>16,t^=t>>>8,t^=t>>>4,27030>>>(t&=15)&1};var n=new Array(256);!function(t){for(var e=0;e<256;++e){var r=e,n=e,i=7;for(r>>>=1;r;r>>>=1)n<<=1,n|=1&r,--i;t[e]=n<<i&255}}(n),e.reverse=function(t){return n[255&t]<<24|n[t>>>8&255]<<16|n[t>>>16&255]<<8|n[t>>>24&255]},e.interleave2=function(t,e){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t&=65535)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e&=65535)|e<<8))|e<<4))|e<<2))|e<<1))<<1},e.deinterleave2=function(t,e){return(t=65535&((t=16711935&((t=252645135&((t=858993459&((t=t>>>e&1431655765)|t>>>1))|t>>>2))|t>>>4))|t>>>16))<<16>>16},e.interleave3=function(t,e,r){return t=1227133513&((t=3272356035&((t=251719695&((t=4278190335&((t&=1023)|t<<16))|t<<8))|t<<4))|t<<2),(t|=(e=1227133513&((e=3272356035&((e=251719695&((e=4278190335&((e&=1023)|e<<16))|e<<8))|e<<4))|e<<2))<<1)|(r=1227133513&((r=3272356035&((r=251719695&((r=4278190335&((r&=1023)|r<<16))|r<<8))|r<<4))|r<<2))<<2},e.deinterleave3=function(t,e){return(t=1023&((t=4278190335&((t=251719695&((t=3272356035&((t=t>>>e&1227133513)|t>>>2))|t>>>4))|t>>>8))|t>>>16))<<22>>22},e.nextCombination=function(t){var e=t|t-1;return e+1|(~e&-~e)-1>>>r(t)+1}},44781:function(t,e,r){"use strict";var n=r(53435);t.exports=function(t,e){e||(e={});var r,o,s,l,u,c,f,h,p,d,v,g=null==e.cutoff?.25:e.cutoff,y=null==e.radius?8:e.radius,m=e.channel||0;if(ArrayBuffer.isView(t)||Array.isArray(t)){if(!e.width||!e.height)throw Error("For raw data width and height should be provided by options");r=e.width,o=e.height,l=t,c=e.stride?e.stride:Math.floor(t.length/r/o)}else window.HTMLCanvasElement&&t instanceof window.HTMLCanvasElement?(f=(h=t).getContext("2d"),r=h.width,o=h.height,l=(p=f.getImageData(0,0,r,o)).data,c=4):window.CanvasRenderingContext2D&&t instanceof window.CanvasRenderingContext2D?(f=t,r=(h=t.canvas).width,o=h.height,l=(p=f.getImageData(0,0,r,o)).data,c=4):window.ImageData&&t instanceof window.ImageData&&(p=t,r=t.width,o=t.height,l=p.data,c=4);if(s=Math.max(r,o),window.Uint8ClampedArray&&l instanceof window.Uint8ClampedArray||window.Uint8Array&&l instanceof window.Uint8Array)for(u=l,l=Array(r*o),d=0,v=u.length;d<v;d++)l[d]=u[d*c+m]/255;else if(1!==c)throw Error("Raw data can have only 1 value per pixel");var x=Array(r*o),b=Array(r*o),_=Array(s),w=Array(s),T=Array(s+1),k=Array(s);for(d=0,v=r*o;d<v;d++){var A=l[d];x[d]=1===A?0:0===A?i:Math.pow(Math.max(0,.5-A),2),b[d]=1===A?i:0===A?0:Math.pow(Math.max(0,A-.5),2)}a(x,r,o,_,w,k,T),a(b,r,o,_,w,k,T);var M=window.Float32Array?new Float32Array(r*o):new Array(r*o);for(d=0,v=r*o;d<v;d++)M[d]=n(1-((x[d]-b[d])/y+g),0,1);return M};var i=1e20;function a(t,e,r,n,i,a,s){for(var l=0;l<e;l++){for(var u=0;u<r;u++)n[u]=t[u*e+l];for(o(n,i,a,s,r),u=0;u<r;u++)t[u*e+l]=i[u]}for(u=0;u<r;u++){for(l=0;l<e;l++)n[l]=t[u*e+l];for(o(n,i,a,s,e),l=0;l<e;l++)t[u*e+l]=Math.sqrt(i[l])}}function o(t,e,r,n,a){r[0]=0,n[0]=-i,n[1]=+i;for(var o=1,s=0;o<a;o++){for(var l=(t[o]+o*o-(t[r[s]]+r[s]*r[s]))/(2*o-2*r[s]);l<=n[s];)s--,l=(t[o]+o*o-(t[r[s]]+r[s]*r[s]))/(2*o-2*r[s]);r[++s]=o,n[s]=l,n[s+1]=+i}for(o=0,s=0;o<a;o++){for(;n[s+1]<o;)s++;e[o]=(o-r[s])*(o-r[s])+t[r[s]]}}},6614:function(t,e,r){"use strict";var n=r(68318),i=r(68222),a=i(n("String.prototype.indexOf"));t.exports=function(t,e){var r=n(t,!!e);return"function"==typeof r&&a(t,".prototype.")>-1?i(r):r}},68222:function(t,e,r){"use strict";var n=r(77575),i=r(68318),a=i("%Function.prototype.apply%"),o=i("%Function.prototype.call%"),s=i("%Reflect.apply%",!0)||n.call(o,a),l=i("%Object.getOwnPropertyDescriptor%",!0),u=i("%Object.defineProperty%",!0),c=i("%Math.max%");if(u)try{u({},"a",{value:1})}catch(t){u=null}t.exports=function(t){var e=s(n,o,arguments);return l&&u&&l(e,"length").configurable&&u(e,"length",{value:1+c(0,t.length-(arguments.length-1))}),e};var f=function(){return s(n,a,arguments)};u?u(t.exports,"apply",{value:f}):t.exports.apply=f},53435:function(t){t.exports=function(t,e,r){return e<r?t<e?e:t>r?r:t:t<r?r:t>e?e:t}},6475:function(t,e,r){"use strict";var n=r(53435);function i(t,e){null==e&&(e=!0);var r=t[0],i=t[1],a=t[2],o=t[3];return null==o&&(o=e?1:255),e&&(r*=255,i*=255,a*=255,o*=255),16777216*(r=255&n(r,0,255))+((i=255&n(i,0,255))<<16)+((a=255&n(a,0,255))<<8)+(255&n(o,0,255))}t.exports=i,t.exports.to=i,t.exports.from=function(t,e){var r=(t=+t)>>>24,n=(16711680&t)>>>16,i=(65280&t)>>>8,a=255&t;return!1===e?[r,n,i,a]:[r/255,n/255,i/255,a/255]}},76857:function(t){"use strict";t.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},25075:function(t,e,r){"use strict";var n=r(36652),i=r(53435),a=r(90660);t.exports=function(t,e){"float"!==e&&e||(e="array"),"uint"===e&&(e="uint8"),"uint_clamped"===e&&(e="uint8_clamped");var r=new(a(e))(4),o="uint8"!==e&&"uint8_clamped"!==e;return t.length&&"string"!=typeof t||((t=n(t))[0]/=255,t[1]/=255,t[2]/=255),function(t){return t instanceof Uint8Array||t instanceof Uint8ClampedArray||!!(Array.isArray(t)&&(t[0]>1||0===t[0])&&(t[1]>1||0===t[1])&&(t[2]>1||0===t[2])&&(!t[3]||t[3]>1))}(t)?(r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=null!=t[3]?t[3]:255,o&&(r[0]/=255,r[1]/=255,r[2]/=255,r[3]/=255),r):(o?(r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=null!=t[3]?t[3]:1):(r[0]=i(Math.floor(255*t[0]),0,255),r[1]=i(Math.floor(255*t[1]),0,255),r[2]=i(Math.floor(255*t[2]),0,255),r[3]=null==t[3]?255:i(Math.floor(255*t[3]),0,255)),r)}},90736:function(t,e,r){"use strict";var n=r(76857),i=r(10973),a=r(46775);t.exports=function(t){var e,s,l=[],u=1;if("string"==typeof t)if(n[t])l=n[t].slice(),s="rgb";else if("transparent"===t)u=0,s="rgb",l=[0,0,0];else if(/^#[A-Fa-f0-9]+$/.test(t)){var c=t.slice(1);u=1,(p=c.length)<=4?(l=[parseInt(c[0]+c[0],16),parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16)],4===p&&(u=parseInt(c[3]+c[3],16)/255)):(l=[parseInt(c[0]+c[1],16),parseInt(c[2]+c[3],16),parseInt(c[4]+c[5],16)],8===p&&(u=parseInt(c[6]+c[7],16)/255)),l[0]||(l[0]=0),l[1]||(l[1]=0),l[2]||(l[2]=0),s="rgb"}else if(e=/^((?:rgb|hs[lvb]|hwb|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms)a?)\s*\(([^\)]*)\)/.exec(t)){var f=e[1],h="rgb"===f;s=c=f.replace(/a$/,"");var p="cmyk"===c?4:"gray"===c?1:3;l=e[2].trim().split(/\s*,\s*/).map((function(t,e){if(/%$/.test(t))return e===p?parseFloat(t)/100:"rgb"===c?255*parseFloat(t)/100:parseFloat(t);if("h"===c[e]){if(/deg$/.test(t))return parseFloat(t);if(void 0!==o[t])return o[t]}return parseFloat(t)})),f===c&&l.push(1),u=h||void 0===l[p]?1:l[p],l=l.slice(0,p)}else t.length>10&&/[0-9](?:\s|\/)/.test(t)&&(l=t.match(/([0-9]+)/g).map((function(t){return parseFloat(t)})),s=t.match(/([a-z])/gi).join("").toLowerCase());else if(isNaN(t))if(i(t)){var d=a(t.r,t.red,t.R,null);null!==d?(s="rgb",l=[d,a(t.g,t.green,t.G),a(t.b,t.blue,t.B)]):(s="hsl",l=[a(t.h,t.hue,t.H),a(t.s,t.saturation,t.S),a(t.l,t.lightness,t.L,t.b,t.brightness)]),u=a(t.a,t.alpha,t.opacity,1),null!=t.opacity&&(u/=100)}else(Array.isArray(t)||r.g.ArrayBuffer&&ArrayBuffer.isView&&ArrayBuffer.isView(t))&&(l=[t[0],t[1],t[2]],s="rgb",u=4===t.length?t[3]:1);else s="rgb",l=[t>>>16,(65280&t)>>>8,255&t];return{space:s,values:l,alpha:u}};var o={red:0,orange:60,yellow:120,green:180,blue:240,purple:300}},36652:function(t,e,r){"use strict";var n=r(90736),i=r(80009),a=r(53435);t.exports=function(t){var e,r=n(t);return r.space?((e=Array(3))[0]=a(r.values[0],0,255),e[1]=a(r.values[1],0,255),e[2]=a(r.values[2],0,255),"h"===r.space[0]&&(e=i.rgb(e)),e.push(a(r.alpha,0,1)),e):[]}},80009:function(t,e,r){"use strict";var n=r(6866);t.exports={name:"hsl",min:[0,0,0],max:[360,100,100],channel:["hue","saturation","lightness"],alias:["HSL"],rgb:function(t){var e,r,n,i,a,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[a=255*l,a,a];e=2*l-(r=l<.5?l*(1+s):l+s-l*s),i=[0,0,0];for(var u=0;u<3;u++)(n=o+1/3*-(u-1))<0?n++:n>1&&n--,a=6*n<1?e+6*(r-e)*n:2*n<1?r:3*n<2?e+(r-e)*(2/3-n)*6:e,i[u]=255*a;return i}},n.hsl=function(t){var e,r,n=t[0]/255,i=t[1]/255,a=t[2]/255,o=Math.min(n,i,a),s=Math.max(n,i,a),l=s-o;return s===o?e=0:n===s?e=(i-a)/l:i===s?e=2+(a-n)/l:a===s&&(e=4+(n-i)/l),(e=Math.min(60*e,360))<0&&(e+=360),r=(o+s)/2,[e,100*(s===o?0:r<=.5?l/(s+o):l/(2-s-o)),100*r]}},6866:function(t){"use strict";t.exports={name:"rgb",min:[0,0,0],max:[255,255,255],channel:["red","green","blue"],alias:["RGB"]}},24138:function(t){t.exports={AFG:"afghan",ALA:"\\b\\wland",ALB:"albania",DZA:"algeria",ASM:"^(?=.*americ).*samoa",AND:"andorra",AGO:"angola",AIA:"anguill?a",ATA:"antarctica",ATG:"antigua",ARG:"argentin",ARM:"armenia",ABW:"^(?!.*bonaire).*\\baruba",AUS:"australia",AUT:"^(?!.*hungary).*austria|\\baustri.*\\bemp",AZE:"azerbaijan",BHS:"bahamas",BHR:"bahrain",BGD:"bangladesh|^(?=.*east).*paki?stan",BRB:"barbados",BLR:"belarus|byelo",BEL:"^(?!.*luxem).*belgium",BLZ:"belize|^(?=.*british).*honduras",BEN:"benin|dahome",BMU:"bermuda",BTN:"bhutan",BOL:"bolivia",BES:"^(?=.*bonaire).*eustatius|^(?=.*carib).*netherlands|\\bbes.?islands",BIH:"herzegovina|bosnia",BWA:"botswana|bechuana",BVT:"bouvet",BRA:"brazil",IOT:"british.?indian.?ocean",BRN:"brunei",BGR:"bulgaria",BFA:"burkina|\\bfaso|upper.?volta",BDI:"burundi",CPV:"verde",KHM:"cambodia|kampuchea|khmer",CMR:"cameroon",CAN:"canada",CYM:"cayman",CAF:"\\bcentral.african.republic",TCD:"\\bchad",CHL:"\\bchile",CHN:"^(?!.*\\bmac)(?!.*\\bhong)(?!.*\\btai)(?!.*\\brep).*china|^(?=.*peo)(?=.*rep).*china",CXR:"christmas",CCK:"\\bcocos|keeling",COL:"colombia",COM:"comoro",COG:"^(?!.*\\bdem)(?!.*\\bd[\\.]?r)(?!.*kinshasa)(?!.*zaire)(?!.*belg)(?!.*l.opoldville)(?!.*free).*\\bcongo",COK:"\\bcook",CRI:"costa.?rica",CIV:"ivoire|ivory",HRV:"croatia",CUB:"\\bcuba",CUW:"^(?!.*bonaire).*\\bcura(c|ç)ao",CYP:"cyprus",CSK:"czechoslovakia",CZE:"^(?=.*rep).*czech|czechia|bohemia",COD:"\\bdem.*congo|congo.*\\bdem|congo.*\\bd[\\.]?r|\\bd[\\.]?r.*congo|belgian.?congo|congo.?free.?state|kinshasa|zaire|l.opoldville|drc|droc|rdc",DNK:"denmark",DJI:"djibouti",DMA:"dominica(?!n)",DOM:"dominican.rep",ECU:"ecuador",EGY:"egypt",SLV:"el.?salvador",GNQ:"guine.*eq|eq.*guine|^(?=.*span).*guinea",ERI:"eritrea",EST:"estonia",ETH:"ethiopia|abyssinia",FLK:"falkland|malvinas",FRO:"faroe|faeroe",FJI:"fiji",FIN:"finland",FRA:"^(?!.*\\bdep)(?!.*martinique).*france|french.?republic|\\bgaul",GUF:"^(?=.*french).*guiana",PYF:"french.?polynesia|tahiti",ATF:"french.?southern",GAB:"gabon",GMB:"gambia",GEO:"^(?!.*south).*georgia",DDR:"german.?democratic.?republic|democratic.?republic.*germany|east.germany",DEU:"^(?!.*east).*germany|^(?=.*\\bfed.*\\brep).*german",GHA:"ghana|gold.?coast",GIB:"gibraltar",GRC:"greece|hellenic|hellas",GRL:"greenland",GRD:"grenada",GLP:"guadeloupe",GUM:"\\bguam",GTM:"guatemala",GGY:"guernsey",GIN:"^(?!.*eq)(?!.*span)(?!.*bissau)(?!.*portu)(?!.*new).*guinea",GNB:"bissau|^(?=.*portu).*guinea",GUY:"guyana|british.?guiana",HTI:"haiti",HMD:"heard.*mcdonald",VAT:"holy.?see|vatican|papal.?st",HND:"^(?!.*brit).*honduras",HKG:"hong.?kong",HUN:"^(?!.*austr).*hungary",ISL:"iceland",IND:"india(?!.*ocea)",IDN:"indonesia",IRN:"\\biran|persia",IRQ:"\\biraq|mesopotamia",IRL:"(^ireland)|(^republic.*ireland)",IMN:"^(?=.*isle).*\\bman",ISR:"israel",ITA:"italy",JAM:"jamaica",JPN:"japan",JEY:"jersey",JOR:"jordan",KAZ:"kazak",KEN:"kenya|british.?east.?africa|east.?africa.?prot",KIR:"kiribati",PRK:"^(?=.*democrat|people|north|d.*p.*.r).*\\bkorea|dprk|korea.*(d.*p.*r)",KWT:"kuwait",KGZ:"kyrgyz|kirghiz",LAO:"\\blaos?\\b",LVA:"latvia",LBN:"lebanon",LSO:"lesotho|basuto",LBR:"liberia",LBY:"libya",LIE:"liechtenstein",LTU:"lithuania",LUX:"^(?!.*belg).*luxem",MAC:"maca(o|u)",MDG:"madagascar|malagasy",MWI:"malawi|nyasa",MYS:"malaysia",MDV:"maldive",MLI:"\\bmali\\b",MLT:"\\bmalta",MHL:"marshall",MTQ:"martinique",MRT:"mauritania",MUS:"mauritius",MYT:"\\bmayotte",MEX:"\\bmexic",FSM:"fed.*micronesia|micronesia.*fed",MCO:"monaco",MNG:"mongolia",MNE:"^(?!.*serbia).*montenegro",MSR:"montserrat",MAR:"morocco|\\bmaroc",MOZ:"mozambique",MMR:"myanmar|burma",NAM:"namibia",NRU:"nauru",NPL:"nepal",NLD:"^(?!.*\\bant)(?!.*\\bcarib).*netherlands",ANT:"^(?=.*\\bant).*(nether|dutch)",NCL:"new.?caledonia",NZL:"new.?zealand",NIC:"nicaragua",NER:"\\bniger(?!ia)",NGA:"nigeria",NIU:"niue",NFK:"norfolk",MNP:"mariana",NOR:"norway",OMN:"\\boman|trucial",PAK:"^(?!.*east).*paki?stan",PLW:"palau",PSE:"palestin|\\bgaza|west.?bank",PAN:"panama",PNG:"papua|new.?guinea",PRY:"paraguay",PER:"peru",PHL:"philippines",PCN:"pitcairn",POL:"poland",PRT:"portugal",PRI:"puerto.?rico",QAT:"qatar",KOR:"^(?!.*d.*p.*r)(?!.*democrat)(?!.*people)(?!.*north).*\\bkorea(?!.*d.*p.*r)",MDA:"moldov|b(a|e)ssarabia",REU:"r(e|é)union",ROU:"r(o|u|ou)mania",RUS:"\\brussia|soviet.?union|u\\.?s\\.?s\\.?r|socialist.?republics",RWA:"rwanda",BLM:"barth(e|é)lemy",SHN:"helena",KNA:"kitts|\\bnevis",LCA:"\\blucia",MAF:"^(?=.*collectivity).*martin|^(?=.*france).*martin(?!ique)|^(?=.*french).*martin(?!ique)",SPM:"miquelon",VCT:"vincent",WSM:"^(?!.*amer).*samoa",SMR:"san.?marino",STP:"\\bs(a|ã)o.?tom(e|é)",SAU:"\\bsa\\w*.?arabia",SEN:"senegal",SRB:"^(?!.*monte).*serbia",SYC:"seychell",SLE:"sierra",SGP:"singapore",SXM:"^(?!.*martin)(?!.*saba).*maarten",SVK:"^(?!.*cze).*slovak",SVN:"slovenia",SLB:"solomon",SOM:"somali",ZAF:"south.africa|s\\\\..?africa",SGS:"south.?georgia|sandwich",SSD:"\\bs\\w*.?sudan",ESP:"spain",LKA:"sri.?lanka|ceylon",SDN:"^(?!.*\\bs(?!u)).*sudan",SUR:"surinam|dutch.?guiana",SJM:"svalbard",SWZ:"swaziland",SWE:"sweden",CHE:"switz|swiss",SYR:"syria",TWN:"taiwan|taipei|formosa|^(?!.*peo)(?=.*rep).*china",TJK:"tajik",THA:"thailand|\\bsiam",MKD:"macedonia|fyrom",TLS:"^(?=.*leste).*timor|^(?=.*east).*timor",TGO:"togo",TKL:"tokelau",TON:"tonga",TTO:"trinidad|tobago",TUN:"tunisia",TUR:"turkey",TKM:"turkmen",TCA:"turks",TUV:"tuvalu",UGA:"uganda",UKR:"ukrain",ARE:"emirates|^u\\.?a\\.?e\\.?$|united.?arab.?em",GBR:"united.?kingdom|britain|^u\\.?k\\.?$",TZA:"tanzania",USA:"united.?states\\b(?!.*islands)|\\bu\\.?s\\.?a\\.?\\b|^\\s*u\\.?s\\.?\\b(?!.*islands)",UMI:"minor.?outlying.?is",URY:"uruguay",UZB:"uzbek",VUT:"vanuatu|new.?hebrides",VEN:"venezuela",VNM:"^(?!.*republic).*viet.?nam|^(?=.*socialist).*viet.?nam",VGB:"^(?=.*\\bu\\.?\\s?k).*virgin|^(?=.*brit).*virgin|^(?=.*kingdom).*virgin",VIR:"^(?=.*\\bu\\.?\\s?s).*virgin|^(?=.*states).*virgin",WLF:"futuna|wallis",ESH:"western.sahara",YEM:"^(?!.*arab)(?!.*north)(?!.*sana)(?!.*peo)(?!.*dem)(?!.*south)(?!.*aden)(?!.*\\bp\\.?d\\.?r).*yemen",YMD:"^(?=.*peo).*yemen|^(?!.*rep)(?=.*dem).*yemen|^(?=.*south).*yemen|^(?=.*aden).*yemen|^(?=.*\\bp\\.?d\\.?r).*yemen",YUG:"yugoslavia",ZMB:"zambia|northern.?rhodesia",EAZ:"zanzibar",ZWE:"zimbabwe|^(?!.*northern).*rhodesia"}},72791:function(t,e,r){"use strict";t.exports={parse:r(41004),stringify:r(53313)}},63625:function(t,e,r){"use strict";var n=r(40402);t.exports={isSize:function(t){return/^[\d\.]/.test(t)||-1!==t.indexOf("/")||-1!==n.indexOf(t)}}},41004:function(t,e,r){"use strict";var n=r(90448),i=r(38732),a=r(41901),o=r(15659),s=r(96209),l=r(83794),u=r(99011),c=r(63625).isSize;t.exports=h;var f=h.cache={};function h(t){if("string"!=typeof t)throw new Error("Font argument must be a string.");if(f[t])return f[t];if(""===t)throw new Error("Cannot parse an empty string.");if(-1!==a.indexOf(t))return f[t]={system:t};for(var e,r={style:"normal",variant:"normal",weight:"normal",stretch:"normal",lineHeight:"normal",size:"1rem",family:["serif"]},h=u(t,/\s+/);e=h.shift();){if(-1!==i.indexOf(e))return["style","variant","weight","stretch"].forEach((function(t){r[t]=e})),f[t]=r;if(-1===s.indexOf(e))if("normal"!==e&&"small-caps"!==e)if(-1===l.indexOf(e)){if(-1===o.indexOf(e)){if(c(e)){var d=u(e,"/");if(r.size=d[0],null!=d[1]?r.lineHeight=p(d[1]):"/"===h[0]&&(h.shift(),r.lineHeight=p(h.shift())),!h.length)throw new Error("Missing required font-family.");return r.family=u(h.join(" "),/\s*,\s*/).map(n),f[t]=r}throw new Error("Unknown or unsupported font token: "+e)}r.weight=e}else r.stretch=e;else r.variant=e;else r.style=e}throw new Error("Missing required font-size.")}function p(t){var e=parseFloat(t);return e.toString()===t?e:t}},53313:function(t,e,r){"use strict";var n=r(71299),i=r(63625).isSize,a=d(r(38732)),o=d(r(41901)),s=d(r(15659)),l=d(r(96209)),u=d(r(83794)),c={normal:1,"small-caps":1},f={serif:1,"sans-serif":1,monospace:1,cursive:1,fantasy:1,"system-ui":1},h="serif";function p(t,e){if(t&&!e[t]&&!a[t])throw Error("Unknown keyword `"+t+"`");return t}function d(t){for(var e={},r=0;r<t.length;r++)e[t[r]]=1;return e}t.exports=function(t){if((t=n(t,{style:"style fontstyle fontStyle font-style slope distinction",variant:"variant font-variant fontVariant fontvariant var capitalization",weight:"weight w font-weight fontWeight fontweight",stretch:"stretch font-stretch fontStretch fontstretch width",size:"size s font-size fontSize fontsize height em emSize",lineHeight:"lh line-height lineHeight lineheight leading",family:"font family fontFamily font-family fontfamily type typeface face",system:"system reserved default global"})).system)return t.system&&p(t.system,o),t.system;if(p(t.style,l),p(t.variant,c),p(t.weight,s),p(t.stretch,u),null==t.size&&(t.size="1rem"),"number"==typeof t.size&&(t.size+="px"),!i)throw Error("Bad size value `"+t.size+"`");t.family||(t.family=h),Array.isArray(t.family)&&(t.family.length||(t.family=[h]),t.family=t.family.map((function(t){return f[t]?t:'"'+t+'"'})).join(", "));var e=[];return e.push(t.style),t.variant!==t.style&&e.push(t.variant),t.weight!==t.variant&&t.weight!==t.style&&e.push(t.weight),t.stretch!==t.weight&&t.stretch!==t.variant&&t.stretch!==t.style&&e.push(t.stretch),e.push(t.size+(null==t.lineHeight||"normal"===t.lineHeight||t.lineHeight+""=="1"?"":"/"+t.lineHeight)),e.push(t.family),e.filter(Boolean).join(" ")}},55174:function(t,e,r){"use strict";var n,i=r(24582),a=r(10424),o=r(82527),s=r(19012),l=r(21780),u=r(16906),c=Function.prototype.bind,f=Object.defineProperty,h=Object.prototype.hasOwnProperty;n=function(t,e,r){var n,i=a(e)&&o(e.value);return delete(n=s(e)).writable,delete n.value,n.get=function(){return!r.overwriteDefinition&&h.call(this,t)?i:(e.value=c.call(i,r.resolveContext?r.resolveContext(this):this),f(this,t,e),this[t])},n},t.exports=function(t){var e=l(arguments[1]);return i(e.resolveContext)&&o(e.resolveContext),u(t,(function(t,r){return n(r,t,e)}))}},62072:function(t,e,r){"use strict";var n=r(24582),i=r(84985),a=r(95879),o=r(21780),s=r(66741),l=t.exports=function(t,e){var r,i,l,u,c;return arguments.length<2||"string"!=typeof t?(u=e,e=t,t=null):u=arguments[2],n(t)?(r=s.call(t,"c"),i=s.call(t,"e"),l=s.call(t,"w")):(r=l=!0,i=!1),c={value:e,configurable:r,enumerable:i,writable:l},u?a(o(u),c):c};l.gs=function(t,e,r){var l,u,c,f;return"string"!=typeof t?(c=r,r=e,e=t,t=null):c=arguments[3],n(e)?i(e)?n(r)?i(r)||(c=r,r=void 0):r=void 0:(c=e,e=r=void 0):e=void 0,n(t)?(l=s.call(t,"c"),u=s.call(t,"e")):(l=!0,u=!1),f={get:e,set:r,configurable:l,enumerable:u},c?a(o(c),f):f}},33064:function(t,e,r){"use strict";function n(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}r.d(e,{j2:function(){return n},Fp:function(){return s},J6:function(){return u},TS:function(){return c},VV:function(){return f},w6:function(){return h},Sm:function(){return p}}),1===(i=n).length&&(a=i,i=function(t,e){return n(a(t),e)});var i,a,o=Array.prototype;function s(t,e){var r,n,i=t.length,a=-1;if(null==e){for(;++a<i;)if(null!=(r=t[a])&&r>=r)for(n=r;++a<i;)null!=(r=t[a])&&r>n&&(n=r)}else for(;++a<i;)if(null!=(r=e(t[a],a,t))&&r>=r)for(n=r;++a<i;)null!=(r=e(t[a],a,t))&&r>n&&(n=r);return n}function l(t){return null===t?NaN:+t}function u(t,e){var r,n=t.length,i=n,a=-1,o=0;if(null==e)for(;++a<n;)isNaN(r=l(t[a]))?--i:o+=r;else for(;++a<n;)isNaN(r=l(e(t[a],a,t)))?--i:o+=r;if(i)return o/i}function c(t){for(var e,r,n,i=t.length,a=-1,o=0;++a<i;)o+=t[a].length;for(r=new Array(o);--i>=0;)for(e=(n=t[i]).length;--e>=0;)r[--o]=n[e];return r}function f(t,e){var r,n,i=t.length,a=-1;if(null==e){for(;++a<i;)if(null!=(r=t[a])&&r>=r)for(n=r;++a<i;)null!=(r=t[a])&&n>r&&(n=r)}else for(;++a<i;)if(null!=(r=e(t[a],a,t))&&r>=r)for(n=r;++a<i;)null!=(r=e(t[a],a,t))&&n>r&&(n=r);return n}function h(t,e,r){t=+t,e=+e,r=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+r;for(var n=-1,i=0|Math.max(0,Math.ceil((e-t)/r)),a=new Array(i);++n<i;)a[n]=t+n*r;return a}function p(t,e){var r,n=t.length,i=-1,a=0;if(null==e)for(;++i<n;)(r=+t[i])&&(a+=r);else for(;++i<n;)(r=+e(t[i],i,t))&&(a+=r);return a}o.slice,o.map,Math.sqrt(50),Math.sqrt(10),Math.sqrt(2)},15140:function(t,e,r){"use strict";r.d(e,{UI:function(){return o},b1:function(){return s}});var n="$";function i(){}function a(t,e){var r=new i;if(t instanceof i)t.each((function(t,e){r.set(e,t)}));else if(Array.isArray(t)){var n,a=-1,o=t.length;if(null==e)for(;++a<o;)r.set(a,t[a]);else for(;++a<o;)r.set(e(n=t[a],a,t),n)}else if(t)for(var s in t)r.set(s,t[s]);return r}i.prototype=a.prototype={constructor:i,has:function(t){return n+t in this},get:function(t){return this[n+t]},set:function(t,e){return this[n+t]=e,this},remove:function(t){var e=n+t;return e in this&&delete this[e]},clear:function(){for(var t in this)t[0]===n&&delete this[t]},keys:function(){var t=[];for(var e in this)e[0]===n&&t.push(e.slice(1));return t},values:function(){var t=[];for(var e in this)e[0]===n&&t.push(this[e]);return t},entries:function(){var t=[];for(var e in this)e[0]===n&&t.push({key:e.slice(1),value:this[e]});return t},size:function(){var t=0;for(var e in this)e[0]===n&&++t;return t},empty:function(){for(var t in this)if(t[0]===n)return!1;return!0},each:function(t){for(var e in this)e[0]===n&&t(this[e],e.slice(1),this)}};var o=a;function s(){var t,e,r,n=[],i=[];function a(r,i,s,l){if(i>=n.length)return null!=t&&r.sort(t),null!=e?e(r):r;for(var u,c,f,h=-1,p=r.length,d=n[i++],v=o(),g=s();++h<p;)(f=v.get(u=d(c=r[h])+""))?f.push(c):v.set(u,[c]);return v.each((function(t,e){l(g,e,a(t,i,s,l))})),g}function s(t,r){if(++r>n.length)return t;var a,o=i[r-1];return null!=e&&r>=n.length?a=t.entries():(a=[],t.each((function(t,e){a.push({key:e,values:s(t,r)})}))),null!=o?a.sort((function(t,e){return o(t.key,e.key)})):a}return r={object:function(t){return a(t,0,l,u)},map:function(t){return a(t,0,c,f)},entries:function(t){return s(a(t,0,c,f),0)},key:function(t){return n.push(t),r},sortKeys:function(t){return i[n.length-1]=t,r},sortValues:function(e){return t=e,r},rollup:function(t){return e=t,r}}}function l(){return{}}function u(t,e,r){t[e]=r}function c(){return o()}function f(t,e,r){t.set(e,r)}function h(){}var p=o.prototype;h.prototype=function(t,e){var r=new h;if(t instanceof h)t.each((function(t){r.add(t)}));else if(t){var n=-1,i=t.length;if(null==e)for(;++n<i;)r.add(t[n]);else for(;++n<i;)r.add(e(t[n],n,t))}return r}.prototype={constructor:h,has:p.has,add:function(t){return this[n+(t+="")]=t,this},remove:p.remove,clear:p.clear,values:p.keys,size:p.size,empty:p.empty,each:p.each}},49887:function(t,e,r){"use strict";function n(t,e){var r;function n(){var n,i,a=r.length,o=0,s=0;for(n=0;n<a;++n)o+=(i=r[n]).x,s+=i.y;for(o=o/a-t,s=s/a-e,n=0;n<a;++n)(i=r[n]).x-=o,i.y-=s}return null==t&&(t=0),null==e&&(e=0),n.initialize=function(t){r=t},n.x=function(e){return arguments.length?(t=+e,n):t},n.y=function(t){return arguments.length?(e=+t,n):e},n}function i(t){return function(){return t}}function a(){return 1e-6*(Math.random()-.5)}function o(t,e,r,n){if(isNaN(e)||isNaN(r))return t;var i,a,o,s,l,u,c,f,h,p=t._root,d={data:n},v=t._x0,g=t._y0,y=t._x1,m=t._y1;if(!p)return t._root=d,t;for(;p.length;)if((u=e>=(a=(v+y)/2))?v=a:y=a,(c=r>=(o=(g+m)/2))?g=o:m=o,i=p,!(p=p[f=c<<1|u]))return i[f]=d,t;if(s=+t._x.call(null,p.data),l=+t._y.call(null,p.data),e===s&&r===l)return d.next=p,i?i[f]=d:t._root=d,t;do{i=i?i[f]=new Array(4):t._root=new Array(4),(u=e>=(a=(v+y)/2))?v=a:y=a,(c=r>=(o=(g+m)/2))?g=o:m=o}while((f=c<<1|u)==(h=(l>=o)<<1|s>=a));return i[h]=p,i[f]=d,t}function s(t,e,r,n,i){this.node=t,this.x0=e,this.y0=r,this.x1=n,this.y1=i}function l(t){return t[0]}function u(t){return t[1]}function c(t,e,r){var n=new f(null==e?l:e,null==r?u:r,NaN,NaN,NaN,NaN);return null==t?n:n.addAll(t)}function f(t,e,r,n,i,a){this._x=t,this._y=e,this._x0=r,this._y0=n,this._x1=i,this._y1=a,this._root=void 0}function h(t){for(var e={data:t.data},r=e;t=t.next;)r=r.next={data:t.data};return e}r.r(e),r.d(e,{forceCenter:function(){return n},forceCollide:function(){return g},forceLink:function(){return b},forceManyBody:function(){return J},forceRadial:function(){return K},forceSimulation:function(){return X},forceX:function(){return $},forceY:function(){return Q}});var p=c.prototype=f.prototype;function d(t){return t.x+t.vx}function v(t){return t.y+t.vy}function g(t){var e,r,n=1,o=1;function s(){for(var t,i,s,u,f,h,p,g=e.length,y=0;y<o;++y)for(i=c(e,d,v).visitAfter(l),t=0;t<g;++t)s=e[t],h=r[s.index],p=h*h,u=s.x+s.vx,f=s.y+s.vy,i.visit(m);function m(t,e,r,i,o){var l=t.data,c=t.r,d=h+c;if(!l)return e>u+d||i<u-d||r>f+d||o<f-d;if(l.index>s.index){var v=u-l.x-l.vx,g=f-l.y-l.vy,y=v*v+g*g;y<d*d&&(0===v&&(y+=(v=a())*v),0===g&&(y+=(g=a())*g),y=(d-(y=Math.sqrt(y)))/y*n,s.vx+=(v*=y)*(d=(c*=c)/(p+c)),s.vy+=(g*=y)*d,l.vx-=v*(d=1-d),l.vy-=g*d)}}}function l(t){if(t.data)return t.r=r[t.data.index];for(var e=t.r=0;e<4;++e)t[e]&&t[e].r>t.r&&(t.r=t[e].r)}function u(){if(e){var n,i,a=e.length;for(r=new Array(a),n=0;n<a;++n)i=e[n],r[i.index]=+t(i,n,e)}}return"function"!=typeof t&&(t=i(null==t?1:+t)),s.initialize=function(t){e=t,u()},s.iterations=function(t){return arguments.length?(o=+t,s):o},s.strength=function(t){return arguments.length?(n=+t,s):n},s.radius=function(e){return arguments.length?(t="function"==typeof e?e:i(+e),u(),s):t},s}p.copy=function(){var t,e,r=new f(this._x,this._y,this._x0,this._y0,this._x1,this._y1),n=this._root;if(!n)return r;if(!n.length)return r._root=h(n),r;for(t=[{source:n,target:r._root=new Array(4)}];n=t.pop();)for(var i=0;i<4;++i)(e=n.source[i])&&(e.length?t.push({source:e,target:n.target[i]=new Array(4)}):n.target[i]=h(e));return r},p.add=function(t){var e=+this._x.call(null,t),r=+this._y.call(null,t);return o(this.cover(e,r),e,r,t)},p.addAll=function(t){var e,r,n,i,a=t.length,s=new Array(a),l=new Array(a),u=1/0,c=1/0,f=-1/0,h=-1/0;for(r=0;r<a;++r)isNaN(n=+this._x.call(null,e=t[r]))||isNaN(i=+this._y.call(null,e))||(s[r]=n,l[r]=i,n<u&&(u=n),n>f&&(f=n),i<c&&(c=i),i>h&&(h=i));if(u>f||c>h)return this;for(this.cover(u,c).cover(f,h),r=0;r<a;++r)o(this,s[r],l[r],t[r]);return this},p.cover=function(t,e){if(isNaN(t=+t)||isNaN(e=+e))return this;var r=this._x0,n=this._y0,i=this._x1,a=this._y1;if(isNaN(r))i=(r=Math.floor(t))+1,a=(n=Math.floor(e))+1;else{for(var o,s,l=i-r,u=this._root;r>t||t>=i||n>e||e>=a;)switch(s=(e<n)<<1|t<r,(o=new Array(4))[s]=u,u=o,l*=2,s){case 0:i=r+l,a=n+l;break;case 1:r=i-l,a=n+l;break;case 2:i=r+l,n=a-l;break;case 3:r=i-l,n=a-l}this._root&&this._root.length&&(this._root=u)}return this._x0=r,this._y0=n,this._x1=i,this._y1=a,this},p.data=function(){var t=[];return this.visit((function(e){if(!e.length)do{t.push(e.data)}while(e=e.next)})),t},p.extent=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},p.find=function(t,e,r){var n,i,a,o,l,u,c,f=this._x0,h=this._y0,p=this._x1,d=this._y1,v=[],g=this._root;for(g&&v.push(new s(g,f,h,p,d)),null==r?r=1/0:(f=t-r,h=e-r,p=t+r,d=e+r,r*=r);u=v.pop();)if(!(!(g=u.node)||(i=u.x0)>p||(a=u.y0)>d||(o=u.x1)<f||(l=u.y1)<h))if(g.length){var y=(i+o)/2,m=(a+l)/2;v.push(new s(g[3],y,m,o,l),new s(g[2],i,m,y,l),new s(g[1],y,a,o,m),new s(g[0],i,a,y,m)),(c=(e>=m)<<1|t>=y)&&(u=v[v.length-1],v[v.length-1]=v[v.length-1-c],v[v.length-1-c]=u)}else{var x=t-+this._x.call(null,g.data),b=e-+this._y.call(null,g.data),_=x*x+b*b;if(_<r){var w=Math.sqrt(r=_);f=t-w,h=e-w,p=t+w,d=e+w,n=g.data}}return n},p.remove=function(t){if(isNaN(a=+this._x.call(null,t))||isNaN(o=+this._y.call(null,t)))return this;var e,r,n,i,a,o,s,l,u,c,f,h,p=this._root,d=this._x0,v=this._y0,g=this._x1,y=this._y1;if(!p)return this;if(p.length)for(;;){if((u=a>=(s=(d+g)/2))?d=s:g=s,(c=o>=(l=(v+y)/2))?v=l:y=l,e=p,!(p=p[f=c<<1|u]))return this;if(!p.length)break;(e[f+1&3]||e[f+2&3]||e[f+3&3])&&(r=e,h=f)}for(;p.data!==t;)if(n=p,!(p=p.next))return this;return(i=p.next)&&delete p.next,n?(i?n.next=i:delete n.next,this):e?(i?e[f]=i:delete e[f],(p=e[0]||e[1]||e[2]||e[3])&&p===(e[3]||e[2]||e[1]||e[0])&&!p.length&&(r?r[h]=p:this._root=p),this):(this._root=i,this)},p.removeAll=function(t){for(var e=0,r=t.length;e<r;++e)this.remove(t[e]);return this},p.root=function(){return this._root},p.size=function(){var t=0;return this.visit((function(e){if(!e.length)do{++t}while(e=e.next)})),t},p.visit=function(t){var e,r,n,i,a,o,l=[],u=this._root;for(u&&l.push(new s(u,this._x0,this._y0,this._x1,this._y1));e=l.pop();)if(!t(u=e.node,n=e.x0,i=e.y0,a=e.x1,o=e.y1)&&u.length){var c=(n+a)/2,f=(i+o)/2;(r=u[3])&&l.push(new s(r,c,f,a,o)),(r=u[2])&&l.push(new s(r,n,f,c,o)),(r=u[1])&&l.push(new s(r,c,i,a,f)),(r=u[0])&&l.push(new s(r,n,i,c,f))}return this},p.visitAfter=function(t){var e,r=[],n=[];for(this._root&&r.push(new s(this._root,this._x0,this._y0,this._x1,this._y1));e=r.pop();){var i=e.node;if(i.length){var a,o=e.x0,l=e.y0,u=e.x1,c=e.y1,f=(o+u)/2,h=(l+c)/2;(a=i[0])&&r.push(new s(a,o,l,f,h)),(a=i[1])&&r.push(new s(a,f,l,u,h)),(a=i[2])&&r.push(new s(a,o,h,f,c)),(a=i[3])&&r.push(new s(a,f,h,u,c))}n.push(e)}for(;e=n.pop();)t(e.node,e.x0,e.y0,e.x1,e.y1);return this},p.x=function(t){return arguments.length?(this._x=t,this):this._x},p.y=function(t){return arguments.length?(this._y=t,this):this._y};var y=r(15140);function m(t){return t.index}function x(t,e){var r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function b(t){var e,r,n,o,s,l=m,u=function(t){return 1/Math.min(o[t.source.index],o[t.target.index])},c=i(30),f=1;function h(n){for(var i=0,o=t.length;i<f;++i)for(var l,u,c,h,p,d,v,g=0;g<o;++g)u=(l=t[g]).source,h=(c=l.target).x+c.vx-u.x-u.vx||a(),p=c.y+c.vy-u.y-u.vy||a(),h*=d=((d=Math.sqrt(h*h+p*p))-r[g])/d*n*e[g],p*=d,c.vx-=h*(v=s[g]),c.vy-=p*v,u.vx+=h*(v=1-v),u.vy+=p*v}function p(){if(n){var i,a,u=n.length,c=t.length,f=(0,y.UI)(n,l);for(i=0,o=new Array(u);i<c;++i)(a=t[i]).index=i,"object"!=typeof a.source&&(a.source=x(f,a.source)),"object"!=typeof a.target&&(a.target=x(f,a.target)),o[a.source.index]=(o[a.source.index]||0)+1,o[a.target.index]=(o[a.target.index]||0)+1;for(i=0,s=new Array(c);i<c;++i)a=t[i],s[i]=o[a.source.index]/(o[a.source.index]+o[a.target.index]);e=new Array(c),d(),r=new Array(c),v()}}function d(){if(n)for(var r=0,i=t.length;r<i;++r)e[r]=+u(t[r],r,t)}function v(){if(n)for(var e=0,i=t.length;e<i;++e)r[e]=+c(t[e],e,t)}return null==t&&(t=[]),h.initialize=function(t){n=t,p()},h.links=function(e){return arguments.length?(t=e,p(),h):t},h.id=function(t){return arguments.length?(l=t,h):l},h.iterations=function(t){return arguments.length?(f=+t,h):f},h.strength=function(t){return arguments.length?(u="function"==typeof t?t:i(+t),d(),h):u},h.distance=function(t){return arguments.length?(c="function"==typeof t?t:i(+t),v(),h):c},h}var _={value:function(){}};function w(){for(var t,e=0,r=arguments.length,n={};e<r;++e){if(!(t=arguments[e]+"")||t in n||/[\s.]/.test(t))throw new Error("illegal type: "+t);n[t]=[]}return new T(n)}function T(t){this._=t}function k(t,e){for(var r,n=0,i=t.length;n<i;++n)if((r=t[n]).name===e)return r.value}function A(t,e,r){for(var n=0,i=t.length;n<i;++n)if(t[n].name===e){t[n]=_,t=t.slice(0,n).concat(t.slice(n+1));break}return null!=r&&t.push({name:e,value:r}),t}T.prototype=w.prototype={constructor:T,on:function(t,e){var r,n,i=this._,a=(n=i,(t+"").trim().split(/^|\s+/).map((function(t){var e="",r=t.indexOf(".");if(r>=0&&(e=t.slice(r+1),t=t.slice(0,r)),t&&!n.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}}))),o=-1,s=a.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++o<s;)if(r=(t=a[o]).type)i[r]=A(i[r],t.name,e);else if(null==e)for(r in i)i[r]=A(i[r],t.name,null);return this}for(;++o<s;)if((r=(t=a[o]).type)&&(r=k(i[r],t.name)))return r},copy:function(){var t={},e=this._;for(var r in e)t[r]=e[r].slice();return new T(t)},call:function(t,e){if((r=arguments.length-2)>0)for(var r,n,i=new Array(r),a=0;a<r;++a)i[a]=arguments[a+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(a=0,r=(n=this._[t]).length;a<r;++a)n[a].value.apply(e,i)},apply:function(t,e,r){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var n=this._[t],i=0,a=n.length;i<a;++i)n[i].value.apply(e,r)}};var M,S,E=w,L=0,C=0,P=0,O=1e3,I=0,D=0,z=0,R="object"==typeof performance&&performance.now?performance:Date,F="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function B(){return D||(F(N),D=R.now()+z)}function N(){D=0}function j(){this._call=this._time=this._next=null}function U(t,e,r){var n=new j;return n.restart(t,e,r),n}function V(){D=(I=R.now())+z,L=C=0;try{!function(){B(),++L;for(var t,e=M;e;)(t=D-e._time)>=0&&e._call.call(null,t),e=e._next;--L}()}finally{L=0,function(){for(var t,e,r=M,n=1/0;r;)r._call?(n>r._time&&(n=r._time),t=r,r=r._next):(e=r._next,r._next=null,r=t?t._next=e:M=e);S=t,q(n)}(),D=0}}function H(){var t=R.now(),e=t-I;e>O&&(z-=e,I=t)}function q(t){L||(C&&(C=clearTimeout(C)),t-D>24?(t<1/0&&(C=setTimeout(V,t-R.now()-z)),P&&(P=clearInterval(P))):(P||(I=R.now(),P=setInterval(H,O)),L=1,F(V)))}function G(t){return t.x}function Z(t){return t.y}j.prototype=U.prototype={constructor:j,restart:function(t,e,r){if("function"!=typeof t)throw new TypeError("callback is not a function");r=(null==r?B():+r)+(null==e?0:+e),this._next||S===this||(S?S._next=this:M=this,S=this),this._call=t,this._time=r,q()},stop:function(){this._call&&(this._call=null,this._time=1/0,q())}};var Y=10,W=Math.PI*(3-Math.sqrt(5));function X(t){var e,r=1,n=.001,i=1-Math.pow(n,1/300),a=0,o=.6,s=(0,y.UI)(),l=U(c),u=E("tick","end");function c(){f(),u.call("tick",e),r<n&&(l.stop(),u.call("end",e))}function f(n){var l,u,c=t.length;void 0===n&&(n=1);for(var f=0;f<n;++f)for(r+=(a-r)*i,s.each((function(t){t(r)})),l=0;l<c;++l)null==(u=t[l]).fx?u.x+=u.vx*=o:(u.x=u.fx,u.vx=0),null==u.fy?u.y+=u.vy*=o:(u.y=u.fy,u.vy=0);return e}function h(){for(var e,r=0,n=t.length;r<n;++r){if((e=t[r]).index=r,null!=e.fx&&(e.x=e.fx),null!=e.fy&&(e.y=e.fy),isNaN(e.x)||isNaN(e.y)){var i=Y*Math.sqrt(r),a=r*W;e.x=i*Math.cos(a),e.y=i*Math.sin(a)}(isNaN(e.vx)||isNaN(e.vy))&&(e.vx=e.vy=0)}}function p(e){return e.initialize&&e.initialize(t),e}return null==t&&(t=[]),h(),e={tick:f,restart:function(){return l.restart(c),e},stop:function(){return l.stop(),e},nodes:function(r){return arguments.length?(t=r,h(),s.each(p),e):t},alpha:function(t){return arguments.length?(r=+t,e):r},alphaMin:function(t){return arguments.length?(n=+t,e):n},alphaDecay:function(t){return arguments.length?(i=+t,e):+i},alphaTarget:function(t){return arguments.length?(a=+t,e):a},velocityDecay:function(t){return arguments.length?(o=1-t,e):1-o},force:function(t,r){return arguments.length>1?(null==r?s.remove(t):s.set(t,p(r)),e):s.get(t)},find:function(e,r,n){var i,a,o,s,l,u=0,c=t.length;for(null==n?n=1/0:n*=n,u=0;u<c;++u)(o=(i=e-(s=t[u]).x)*i+(a=r-s.y)*a)<n&&(l=s,n=o);return l},on:function(t,r){return arguments.length>1?(u.on(t,r),e):u.on(t)}}}function J(){var t,e,r,n,o=i(-30),s=1,l=1/0,u=.81;function f(n){var i,a=t.length,o=c(t,G,Z).visitAfter(p);for(r=n,i=0;i<a;++i)e=t[i],o.visit(d)}function h(){if(t){var e,r,i=t.length;for(n=new Array(i),e=0;e<i;++e)r=t[e],n[r.index]=+o(r,e,t)}}function p(t){var e,r,i,a,o,s=0,l=0;if(t.length){for(i=a=o=0;o<4;++o)(e=t[o])&&(r=Math.abs(e.value))&&(s+=e.value,l+=r,i+=r*e.x,a+=r*e.y);t.x=i/l,t.y=a/l}else{(e=t).x=e.data.x,e.y=e.data.y;do{s+=n[e.data.index]}while(e=e.next)}t.value=s}function d(t,i,o,c){if(!t.value)return!0;var f=t.x-e.x,h=t.y-e.y,p=c-i,d=f*f+h*h;if(p*p/u<d)return d<l&&(0===f&&(d+=(f=a())*f),0===h&&(d+=(h=a())*h),d<s&&(d=Math.sqrt(s*d)),e.vx+=f*t.value*r/d,e.vy+=h*t.value*r/d),!0;if(!(t.length||d>=l)){(t.data!==e||t.next)&&(0===f&&(d+=(f=a())*f),0===h&&(d+=(h=a())*h),d<s&&(d=Math.sqrt(s*d)));do{t.data!==e&&(p=n[t.data.index]*r/d,e.vx+=f*p,e.vy+=h*p)}while(t=t.next)}}return f.initialize=function(e){t=e,h()},f.strength=function(t){return arguments.length?(o="function"==typeof t?t:i(+t),h(),f):o},f.distanceMin=function(t){return arguments.length?(s=t*t,f):Math.sqrt(s)},f.distanceMax=function(t){return arguments.length?(l=t*t,f):Math.sqrt(l)},f.theta=function(t){return arguments.length?(u=t*t,f):Math.sqrt(u)},f}function K(t,e,r){var n,a,o,s=i(.1);function l(t){for(var i=0,s=n.length;i<s;++i){var l=n[i],u=l.x-e||1e-6,c=l.y-r||1e-6,f=Math.sqrt(u*u+c*c),h=(o[i]-f)*a[i]*t/f;l.vx+=u*h,l.vy+=c*h}}function u(){if(n){var e,r=n.length;for(a=new Array(r),o=new Array(r),e=0;e<r;++e)o[e]=+t(n[e],e,n),a[e]=isNaN(o[e])?0:+s(n[e],e,n)}}return"function"!=typeof t&&(t=i(+t)),null==e&&(e=0),null==r&&(r=0),l.initialize=function(t){n=t,u()},l.strength=function(t){return arguments.length?(s="function"==typeof t?t:i(+t),u(),l):s},l.radius=function(e){return arguments.length?(t="function"==typeof e?e:i(+e),u(),l):t},l.x=function(t){return arguments.length?(e=+t,l):e},l.y=function(t){return arguments.length?(r=+t,l):r},l}function $(t){var e,r,n,a=i(.1);function o(t){for(var i,a=0,o=e.length;a<o;++a)(i=e[a]).vx+=(n[a]-i.x)*r[a]*t}function s(){if(e){var i,o=e.length;for(r=new Array(o),n=new Array(o),i=0;i<o;++i)r[i]=isNaN(n[i]=+t(e[i],i,e))?0:+a(e[i],i,e)}}return"function"!=typeof t&&(t=i(null==t?0:+t)),o.initialize=function(t){e=t,s()},o.strength=function(t){return arguments.length?(a="function"==typeof t?t:i(+t),s(),o):a},o.x=function(e){return arguments.length?(t="function"==typeof e?e:i(+e),s(),o):t},o}function Q(t){var e,r,n,a=i(.1);function o(t){for(var i,a=0,o=e.length;a<o;++a)(i=e[a]).vy+=(n[a]-i.y)*r[a]*t}function s(){if(e){var i,o=e.length;for(r=new Array(o),n=new Array(o),i=0;i<o;++i)r[i]=isNaN(n[i]=+t(e[i],i,e))?0:+a(e[i],i,e)}}return"function"!=typeof t&&(t=i(null==t?0:+t)),o.initialize=function(t){e=t,s()},o.strength=function(t){return arguments.length?(a="function"==typeof t?t:i(+t),s(),o):a},o.y=function(e){return arguments.length?(t="function"==typeof e?e:i(+e),s(),o):t},o}},60721:function(t,e,r){"use strict";function n(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}r.d(e,{WU:function(){return h},FF:function(){return v}});var i,a=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function o(t){if(!(e=a.exec(t)))throw new Error("invalid format: "+t);var e;return new s({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function s(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function l(t,e){var r=n(t,e);if(!r)return t+"";var i=r[0],a=r[1];return a<0?"0."+new Array(-a).join("0")+i:i.length>a+1?i.slice(0,a+1)+"."+i.slice(a+1):i+new Array(a-i.length+2).join("0")}o.prototype=s.prototype,s.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var u={"%":function(t,e){return(100*t).toFixed(e)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},g:function(t,e){return t.toPrecision(e)},o:function(t){return Math.round(t).toString(8)},p:function(t,e){return l(100*t,e)},r:l,s:function(t,e){var r=n(t,e);if(!r)return t+"";var a=r[0],o=r[1],s=o-(i=3*Math.max(-8,Math.min(8,Math.floor(o/3))))+1,l=a.length;return s===l?a:s>l?a+new Array(s-l+1).join("0"):s>0?a.slice(0,s)+"."+a.slice(s):"0."+new Array(1-s).join("0")+n(t,Math.max(0,e+s-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}};function c(t){return t}var f,h,p=Array.prototype.map,d=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function v(t){var e,r,a=void 0===t.grouping||void 0===t.thousands?c:(e=p.call(t.grouping,Number),r=t.thousands+"",function(t,n){for(var i=t.length,a=[],o=0,s=e[0],l=0;i>0&&s>0&&(l+s+1>n&&(s=Math.max(1,n-l)),a.push(t.substring(i-=s,i+s)),!((l+=s+1)>n));)s=e[o=(o+1)%e.length];return a.reverse().join(r)}),s=void 0===t.currency?"":t.currency[0]+"",l=void 0===t.currency?"":t.currency[1]+"",f=void 0===t.decimal?".":t.decimal+"",h=void 0===t.numerals?c:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(p.call(t.numerals,String)),v=void 0===t.percent?"%":t.percent+"",g=void 0===t.minus?"-":t.minus+"",y=void 0===t.nan?"NaN":t.nan+"";function m(t){var e=(t=o(t)).fill,r=t.align,n=t.sign,c=t.symbol,p=t.zero,m=t.width,x=t.comma,b=t.precision,_=t.trim,w=t.type;"n"===w?(x=!0,w="g"):u[w]||(void 0===b&&(b=12),_=!0,w="g"),(p||"0"===e&&"="===r)&&(p=!0,e="0",r="=");var T="$"===c?s:"#"===c&&/[boxX]/.test(w)?"0"+w.toLowerCase():"",k="$"===c?l:/[%p]/.test(w)?v:"",A=u[w],M=/[defgprs%]/.test(w);function S(t){var o,s,l,u=T,c=k;if("c"===w)c=A(t)+c,t="";else{var v=(t=+t)<0||1/t<0;if(t=isNaN(t)?y:A(Math.abs(t),b),_&&(t=function(t){t:for(var e,r=t.length,n=1,i=-1;n<r;++n)switch(t[n]){case".":i=e=n;break;case"0":0===i&&(i=n),e=n;break;default:if(!+t[n])break t;i>0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),v&&0==+t&&"+"!==n&&(v=!1),u=(v?"("===n?n:g:"-"===n||"("===n?"":n)+u,c=("s"===w?d[8+i/3]:"")+c+(v&&"("===n?")":""),M)for(o=-1,s=t.length;++o<s;)if(48>(l=t.charCodeAt(o))||l>57){c=(46===l?f+t.slice(o+1):t.slice(o))+c,t=t.slice(0,o);break}}x&&!p&&(t=a(t,1/0));var S=u.length+t.length+c.length,E=S<m?new Array(m-S+1).join(e):"";switch(x&&p&&(t=a(E+t,E.length?m-c.length:1/0),E=""),r){case"<":t=u+t+c+E;break;case"=":t=u+E+t+c;break;case"^":t=E.slice(0,S=E.length>>1)+u+t+c+E.slice(S);break;default:t=E+u+t+c}return h(t)}return b=void 0===b?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,b)):Math.max(0,Math.min(20,b)),S.toString=function(){return t+""},S}return{format:m,formatPrefix:function(t,e){var r,i=m(((t=o(t)).type="f",t)),a=3*Math.max(-8,Math.min(8,Math.floor((r=e,((r=n(Math.abs(r)))?r[1]:NaN)/3)))),s=Math.pow(10,-a),l=d[8+a/3];return function(t){return i(s*t)+l}}}}f=v({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"}),h=f.format,f.formatPrefix},65704:function(t,e,r){"use strict";r.r(e),r.d(e,{geoAiry:function(){return z},geoAiryRaw:function(){return D},geoAitoff:function(){return F},geoAitoffRaw:function(){return R},geoArmadillo:function(){return N},geoArmadilloRaw:function(){return B},geoAugust:function(){return U},geoAugustRaw:function(){return j},geoBaker:function(){return G},geoBakerRaw:function(){return q},geoBerghaus:function(){return W},geoBerghausRaw:function(){return Y},geoBertin1953:function(){return rt},geoBertin1953Raw:function(){return et},geoBoggs:function(){return ct},geoBoggsRaw:function(){return ut},geoBonne:function(){return vt},geoBonneRaw:function(){return dt},geoBottomley:function(){return yt},geoBottomleyRaw:function(){return gt},geoBromley:function(){return xt},geoBromleyRaw:function(){return mt},geoChamberlin:function(){return Et},geoChamberlinAfrica:function(){return St},geoChamberlinRaw:function(){return At},geoCollignon:function(){return Ct},geoCollignonRaw:function(){return Lt},geoCraig:function(){return Ot},geoCraigRaw:function(){return Pt},geoCraster:function(){return zt},geoCrasterRaw:function(){return Dt},geoCylindricalEqualArea:function(){return Ft},geoCylindricalEqualAreaRaw:function(){return Rt},geoCylindricalStereographic:function(){return Nt},geoCylindricalStereographicRaw:function(){return Bt},geoEckert1:function(){return Ut},geoEckert1Raw:function(){return jt},geoEckert2:function(){return Ht},geoEckert2Raw:function(){return Vt},geoEckert3:function(){return Gt},geoEckert3Raw:function(){return qt},geoEckert4:function(){return Yt},geoEckert4Raw:function(){return Zt},geoEckert5:function(){return Xt},geoEckert5Raw:function(){return Wt},geoEckert6:function(){return Kt},geoEckert6Raw:function(){return Jt},geoEisenlohr:function(){return te},geoEisenlohrRaw:function(){return Qt},geoFahey:function(){return ne},geoFaheyRaw:function(){return re},geoFoucaut:function(){return ae},geoFoucautRaw:function(){return ie},geoFoucautSinusoidal:function(){return se},geoFoucautSinusoidalRaw:function(){return oe},geoGilbert:function(){return he},geoGingery:function(){return ge},geoGingeryRaw:function(){return pe},geoGinzburg4:function(){return xe},geoGinzburg4Raw:function(){return me},geoGinzburg5:function(){return _e},geoGinzburg5Raw:function(){return be},geoGinzburg6:function(){return Te},geoGinzburg6Raw:function(){return we},geoGinzburg8:function(){return Ae},geoGinzburg8Raw:function(){return ke},geoGinzburg9:function(){return Se},geoGinzburg9Raw:function(){return Me},geoGringorten:function(){return Ce},geoGringortenQuincuncial:function(){return ii},geoGringortenRaw:function(){return Le},geoGuyou:function(){return De},geoGuyouRaw:function(){return Ie},geoHammer:function(){return $},geoHammerRaw:function(){return J},geoHammerRetroazimuthal:function(){return Be},geoHammerRetroazimuthalRaw:function(){return Re},geoHealpix:function(){return Ye},geoHealpixRaw:function(){return He},geoHill:function(){return Xe},geoHillRaw:function(){return We},geoHomolosine:function(){return er},geoHomolosineRaw:function(){return tr},geoHufnagel:function(){return nr},geoHufnagelRaw:function(){return rr},geoHyperelliptical:function(){return sr},geoHyperellipticalRaw:function(){return or},geoInterrupt:function(){return cr},geoInterruptedBoggs:function(){return hr},geoInterruptedHomolosine:function(){return dr},geoInterruptedMollweide:function(){return gr},geoInterruptedMollweideHemispheres:function(){return mr},geoInterruptedQuarticAuthalic:function(){return fn},geoInterruptedSinuMollweide:function(){return br},geoInterruptedSinusoidal:function(){return wr},geoKavrayskiy7:function(){return kr},geoKavrayskiy7Raw:function(){return Tr},geoLagrange:function(){return Mr},geoLagrangeRaw:function(){return Ar},geoLarrivee:function(){return Lr},geoLarriveeRaw:function(){return Er},geoLaskowski:function(){return Pr},geoLaskowskiRaw:function(){return Cr},geoLittrow:function(){return Ir},geoLittrowRaw:function(){return Or},geoLoximuthal:function(){return zr},geoLoximuthalRaw:function(){return Dr},geoMiller:function(){return Fr},geoMillerRaw:function(){return Rr},geoModifiedStereographic:function(){return Xr},geoModifiedStereographicAlaska:function(){return qr},geoModifiedStereographicGs48:function(){return Gr},geoModifiedStereographicGs50:function(){return Zr},geoModifiedStereographicLee:function(){return Wr},geoModifiedStereographicMiller:function(){return Yr},geoModifiedStereographicRaw:function(){return Br},geoMollweide:function(){return ot},geoMollweideRaw:function(){return at},geoMtFlatPolarParabolic:function(){return Qr},geoMtFlatPolarParabolicRaw:function(){return $r},geoMtFlatPolarQuartic:function(){return en},geoMtFlatPolarQuarticRaw:function(){return tn},geoMtFlatPolarSinusoidal:function(){return nn},geoMtFlatPolarSinusoidalRaw:function(){return rn},geoNaturalEarth:function(){return an.Z},geoNaturalEarth2:function(){return sn},geoNaturalEarth2Raw:function(){return on},geoNaturalEarthRaw:function(){return an.K},geoNellHammer:function(){return un},geoNellHammerRaw:function(){return ln},geoNicolosi:function(){return pn},geoNicolosiRaw:function(){return hn},geoPatterson:function(){return kn},geoPattersonRaw:function(){return Tn},geoPeirceQuincuncial:function(){return ai},geoPierceQuincuncial:function(){return ai},geoPolyconic:function(){return Mn},geoPolyconicRaw:function(){return An},geoPolyhedral:function(){return On},geoPolyhedralButterfly:function(){return Nn},geoPolyhedralCollignon:function(){return Vn},geoPolyhedralWaterman:function(){return Hn},geoProject:function(){return Wn},geoQuantize:function(){return oi},geoQuincuncial:function(){return ni},geoRectangularPolyconic:function(){return li},geoRectangularPolyconicRaw:function(){return si},geoRobinson:function(){return fi},geoRobinsonRaw:function(){return ci},geoSatellite:function(){return pi},geoSatelliteRaw:function(){return hi},geoSinuMollweide:function(){return Qe},geoSinuMollweideRaw:function(){return $e},geoSinusoidal:function(){return pt},geoSinusoidalRaw:function(){return ht},geoStitch:function(){return Oi},geoTimes:function(){return Di},geoTimesRaw:function(){return Ii},geoTwoPointAzimuthal:function(){return Bi},geoTwoPointAzimuthalRaw:function(){return Ri},geoTwoPointAzimuthalUsa:function(){return Fi},geoTwoPointEquidistant:function(){return Ui},geoTwoPointEquidistantRaw:function(){return Ni},geoTwoPointEquidistantUsa:function(){return ji},geoVanDerGrinten:function(){return Hi},geoVanDerGrinten2:function(){return Gi},geoVanDerGrinten2Raw:function(){return qi},geoVanDerGrinten3:function(){return Yi},geoVanDerGrinten3Raw:function(){return Zi},geoVanDerGrinten4:function(){return Xi},geoVanDerGrinten4Raw:function(){return Wi},geoVanDerGrintenRaw:function(){return Vi},geoWagner:function(){return Ki},geoWagner4:function(){return ra},geoWagner4Raw:function(){return ea},geoWagner6:function(){return ia},geoWagner6Raw:function(){return na},geoWagner7:function(){return $i},geoWagnerRaw:function(){return Ji},geoWiechel:function(){return oa},geoWiechelRaw:function(){return aa},geoWinkel3:function(){return la},geoWinkel3Raw:function(){return sa}});var n=r(15002),i=Math.abs,a=Math.atan,o=Math.atan2,s=(Math.ceil,Math.cos),l=Math.exp,u=Math.floor,c=Math.log,f=Math.max,h=Math.min,p=Math.pow,d=Math.round,v=Math.sign||function(t){return t>0?1:t<0?-1:0},g=Math.sin,y=Math.tan,m=1e-6,x=1e-12,b=Math.PI,_=b/2,w=b/4,T=Math.SQRT1_2,k=P(2),A=P(b),M=2*b,S=180/b,E=b/180;function L(t){return t>1?_:t<-1?-_:Math.asin(t)}function C(t){return t>1?0:t<-1?b:Math.acos(t)}function P(t){return t>0?Math.sqrt(t):0}function O(t){return(l(t)-l(-t))/2}function I(t){return(l(t)+l(-t))/2}function D(t){var e=y(t/2),r=2*c(s(t/2))/(e*e);function n(t,e){var n=s(t),i=s(e),a=g(e),o=i*n,l=-((1-o?c((1+o)/2)/(1-o):-.5)+r/(1+o));return[l*i*g(t),l*a]}return n.invert=function(e,n){var a,l=P(e*e+n*n),u=-t/2,f=50;if(!l)return[0,0];do{var h=u/2,p=s(h),d=g(h),v=d/p,y=-c(i(p));u-=a=(2/v*y-r*v-l)/(-y/(d*d)+1-r/(2*p*p))*(p<0?.7:1)}while(i(a)>m&&--f>0);var x=g(u);return[o(e*x,l*s(u)),L(n*x/l)]},n}function z(){var t=_,e=(0,n.r)(D),r=e(t);return r.radius=function(r){return arguments.length?e(t=r*E):t*S},r.scale(179.976).clipAngle(147)}function R(t,e){var r=s(e),n=function(t){return t?t/Math.sin(t):1}(C(r*s(t/=2)));return[2*r*g(t)*n,g(e)*n]}function F(){return(0,n.Z)(R).scale(152.63)}function B(t){var e=g(t),r=s(t),n=t>=0?1:-1,a=y(n*t),l=(1+e-r)/2;function u(t,i){var u=s(i),c=s(t/=2);return[(1+u)*g(t),(n*i>-o(c,a)-.001?0:10*-n)+l+g(i)*r-(1+u)*e*c]}return u.invert=function(t,u){var c=0,f=0,h=50;do{var p=s(c),d=g(c),v=s(f),y=g(f),x=1+v,b=x*d-t,_=l+y*r-x*e*p-u,w=x*p/2,T=-d*y,k=e*x*d/2,A=r*v+e*p*y,M=T*k-A*w,S=(_*T-b*A)/M/2,E=(b*k-_*w)/M;i(E)>2&&(E/=2),c-=S,f-=E}while((i(S)>m||i(E)>m)&&--h>0);return n*f>-o(s(c),a)-.001?[2*c,f]:null},u}function N(){var t=20*E,e=t>=0?1:-1,r=y(e*t),i=(0,n.r)(B),a=i(t),l=a.stream;return a.parallel=function(n){return arguments.length?(r=y((e=(t=n*E)>=0?1:-1)*t),i(t)):t*S},a.stream=function(n){var i=a.rotate(),u=l(n),c=(a.rotate([0,0]),l(n)),f=a.precision();return a.rotate(i),u.sphere=function(){c.polygonStart(),c.lineStart();for(var n=-180*e;e*n<180;n+=90*e)c.point(n,90*e);if(t)for(;e*(n-=3*e*f)>=-180;)c.point(n,e*-o(s(n*E/2),r)*S);c.lineEnd(),c.polygonEnd()},u},a.scale(218.695).center([0,28.0974])}function j(t,e){var r=y(e/2),n=P(1-r*r),i=1+n*s(t/=2),a=g(t)*n/i,o=r/i,l=a*a,u=o*o;return[4/3*a*(3+l-3*u),4/3*o*(3+3*l-u)]}function U(){return(0,n.Z)(j).scale(66.1603)}R.invert=function(t,e){if(!(t*t+4*e*e>b*b+m)){var r=t,n=e,a=25;do{var o,l=g(r),u=g(r/2),c=s(r/2),f=g(n),h=s(n),p=g(2*n),d=f*f,v=h*h,y=u*u,x=1-v*c*c,_=x?C(h*c)*P(o=1/x):o=0,w=2*_*h*u-t,T=_*f-e,k=o*(v*y+_*h*c*d),A=o*(.5*l*p-2*_*f*u),M=.25*o*(p*u-_*f*v*l),S=o*(d*c+_*y*h),E=A*M-S*k;if(!E)break;var L=(T*A-w*S)/E,O=(w*M-T*k)/E;r-=L,n-=O}while((i(L)>m||i(O)>m)&&--a>0);return[r,n]}},j.invert=function(t,e){if(e*=3/8,!(t*=3/8)&&i(e)>1)return null;var r=1+t*t+e*e,n=P((r-P(r*r-4*e*e))/2),a=L(n)/3,l=n?function(t){return c(t+P(t*t-1))}(i(e/n))/3:function(t){return c(t+P(t*t+1))}(i(t))/3,u=s(a),f=I(l),h=f*f-u*u;return[2*v(t)*o(O(l)*u,.25-h),2*v(e)*o(f*g(a),.25+h)]};var V=P(8),H=c(1+k);function q(t,e){var r=i(e);return r<w?[t,c(y(w+e/2))]:[t*s(r)*(2*k-1/g(r)),v(e)*(2*k*(r-w)-c(y(r/2)))]}function G(){return(0,n.Z)(q).scale(112.314)}q.invert=function(t,e){if((n=i(e))<H)return[t,2*a(l(e))-_];var r,n,o=w,u=25;do{var f=s(o/2),h=y(o/2);o-=r=(V*(o-w)-c(h)-n)/(V-f*f/(2*h))}while(i(r)>x&&--u>0);return[t/(s(o)*(V-1/g(o))),v(e)*o]};var Z=r(17889);function Y(t){var e=2*b/t;function r(t,r){var n=(0,Z.N)(t,r);if(i(t)>_){var a=o(n[1],n[0]),l=P(n[0]*n[0]+n[1]*n[1]),u=e*d((a-_)/e)+_,c=o(g(a-=u),2-s(a));a=u+L(b/l*g(c))-c,n[0]=l*s(a),n[1]=l*g(a)}return n}return r.invert=function(t,r){var n=P(t*t+r*r);if(n>_){var i=o(r,t),l=e*d((i-_)/e)+_,u=i>l?-1:1,c=n*s(l-i),f=1/y(u*C((c-b)/P(b*(b-2*c)+n*n)));i=l+2*a((f+u*P(f*f-3))/3),t=n*s(i),r=n*g(i)}return Z.N.invert(t,r)},r}function W(){var t=5,e=(0,n.r)(Y),r=e(t),i=r.stream,a=.01,l=-s(a*E),u=g(a*E);return r.lobes=function(r){return arguments.length?e(t=+r):t},r.stream=function(e){var n=r.rotate(),c=i(e),f=(r.rotate([0,0]),i(e));return r.rotate(n),c.sphere=function(){f.polygonStart(),f.lineStart();for(var e=0,r=360/t,n=2*b/t,i=90-180/t,c=_;e<t;++e,i-=r,c-=n)f.point(o(u*s(c),l)*S,L(u*g(c))*S),i<-90?(f.point(-90,-180-i-a),f.point(-90,-180-i+a)):(f.point(90,i+a),f.point(90,i-a));f.lineEnd(),f.polygonEnd()},c},r.scale(87.8076).center([0,17.1875]).clipAngle(179.999)}var X=r(12956);function J(t,e){if(arguments.length<2&&(e=t),1===e)return X.l;if(e===1/0)return K;function r(r,n){var i=(0,X.l)(r/e,n);return i[0]*=t,i}return r.invert=function(r,n){var i=X.l.invert(r/t,n);return i[0]*=e,i},r}function K(t,e){return[t*s(e)/s(e/=2),2*g(e)]}function $(){var t=2,e=(0,n.r)(J),r=e(t);return r.coefficient=function(r){return arguments.length?e(t=+r):t},r.scale(169.529)}function Q(t,e,r){var n,a,o,s=100;r=void 0===r?0:+r,e=+e;do{(a=t(r))===(o=t(r+m))&&(o=a+m),r-=n=-1*m*(a-e)/(a-o)}while(s-- >0&&i(n)>m);return s<0?NaN:r}function tt(t,e,r){return void 0===e&&(e=40),void 0===r&&(r=x),function(n,a,o,s){var l,u,c;o=void 0===o?0:+o,s=void 0===s?0:+s;for(var f=0;f<e;f++){var h=t(o,s),p=h[0]-n,d=h[1]-a;if(i(p)<r&&i(d)<r)break;var v=p*p+d*d;if(v>l)o-=u/=2,s-=c/=2;else{l=v;var g=(o>0?-1:1)*r,y=(s>0?-1:1)*r,m=t(o+g,s),x=t(o,s+y),b=(m[0]-h[0])/g,_=(m[1]-h[1])/g,w=(x[0]-h[0])/y,T=(x[1]-h[1])/y,k=T*b-_*w,A=(i(k)<.5?.5:1)/k;if(o+=u=(d*w-p*T)*A,s+=c=(p*_-d*b)*A,i(u)<r&&i(c)<r)break}}return[o,s]}}function et(){var t=J(1.68,2);function e(e,r){if(e+r<-1.4){var n=(e-r+1.6)*(e+r+1.4)/8;e+=n,r-=.8*n*g(r+b/2)}var i=t(e,r),a=(1-s(e*r))/12;return i[1]<0&&(i[0]*=1+a),i[1]>0&&(i[1]*=1+a/1.5*i[0]*i[0]),i}return e.invert=tt(e),e}function rt(){return(0,n.Z)(et()).rotate([-16.5,-42]).scale(176.57).center([7.93,.09])}function nt(t,e){var r,n=t*g(e),a=30;do{e-=r=(e+g(e)-n)/(1+s(e))}while(i(r)>m&&--a>0);return e/2}function it(t,e,r){function n(n,i){return[t*n*s(i=nt(r,i)),e*g(i)]}return n.invert=function(n,i){return i=L(i/e),[n/(t*s(i)),L((2*i+g(2*i))/r)]},n}K.invert=function(t,e){var r=2*L(e/2);return[t*s(r/2)/s(r),r]};var at=it(k/_,k,b);function ot(){return(0,n.Z)(at).scale(169.529)}var st=2.00276,lt=1.11072;function ut(t,e){var r=nt(b,e);return[st*t/(1/s(e)+lt/s(r)),(e+k*g(r))/st]}function ct(){return(0,n.Z)(ut).scale(160.857)}function ft(t){var e=0,r=(0,n.r)(t),i=r(e);return i.parallel=function(t){return arguments.length?r(e=t*E):e*S},i}function ht(t,e){return[t*s(e),e]}function pt(){return(0,n.Z)(ht).scale(152.63)}function dt(t){if(!t)return ht;var e=1/y(t);function r(r,n){var i=e+t-n,a=i?r*s(n)/i:i;return[i*g(a),e-i*s(a)]}return r.invert=function(r,n){var i=P(r*r+(n=e-n)*n),a=e+t-i;return[i/s(a)*o(r,n),a]},r}function vt(){return ft(dt).scale(123.082).center([0,26.1441]).parallel(45)}function gt(t){function e(e,r){var n=_-r,i=n?e*t*g(n)/n:n;return[n*g(i)/t,_-n*s(i)]}return e.invert=function(e,r){var n=e*t,i=_-r,a=P(n*n+i*i),s=o(n,i);return[(a?a/g(a):1)*s/t,_-a]},e}function yt(){var t=.5,e=(0,n.r)(gt),r=e(t);return r.fraction=function(r){return arguments.length?e(t=+r):t},r.scale(158.837)}ut.invert=function(t,e){var r,n,a=st*e,o=e<0?-w:w,l=25;do{n=a-k*g(o),o-=r=(g(2*o)+2*o-b*g(n))/(2*s(2*o)+2+b*s(n)*k*s(o))}while(i(r)>m&&--l>0);return n=a-k*g(o),[t*(1/s(n)+lt/s(o))/st,n]},ht.invert=function(t,e){return[t/s(e),e]};var mt=it(1,4/b,b);function xt(){return(0,n.Z)(mt).scale(152.63)}var bt=r(66624),_t=r(49386);function wt(t,e,r,n,a,l){var u,c=s(l);if(i(t)>1||i(l)>1)u=C(r*a+e*n*c);else{var f=g(t/2),h=g(l/2);u=2*L(P(f*f+e*n*h*h))}return i(u)>m?[u,o(n*g(l),e*a-r*n*c)]:[0,0]}function Tt(t,e,r){return C((t*t+e*e-r*r)/(2*t*e))}function kt(t){return t-2*b*u((t+b)/(2*b))}function At(t,e,r){for(var n,i=[[t[0],t[1],g(t[1]),s(t[1])],[e[0],e[1],g(e[1]),s(e[1])],[r[0],r[1],g(r[1]),s(r[1])]],a=i[2],o=0;o<3;++o,a=n)n=i[o],a.v=wt(n[1]-a[1],a[3],a[2],n[3],n[2],n[0]-a[0]),a.point=[0,0];var l=Tt(i[0].v[0],i[2].v[0],i[1].v[0]),u=Tt(i[0].v[0],i[1].v[0],i[2].v[0]),c=b-l;i[2].point[1]=0,i[0].point[0]=-(i[1].point[0]=i[0].v[0]/2);var f=[i[2].point[0]=i[0].point[0]+i[2].v[0]*s(l),2*(i[0].point[1]=i[1].point[1]=i[2].v[0]*g(l))];return function(t,e){var r,n=g(e),a=s(e),o=new Array(3);for(r=0;r<3;++r){var l=i[r];if(o[r]=wt(e-l[1],l[3],l[2],a,n,t-l[0]),!o[r][0])return l.point;o[r][1]=kt(o[r][1]-l.v[1])}var h=f.slice();for(r=0;r<3;++r){var p=2==r?0:r+1,d=Tt(i[r].v[0],o[r][0],o[p][0]);o[r][1]<0&&(d=-d),r?1==r?(d=u-d,h[0]-=o[r][0]*s(d),h[1]-=o[r][0]*g(d)):(d=c-d,h[0]+=o[r][0]*s(d),h[1]+=o[r][0]*g(d)):(h[0]+=o[r][0]*s(d),h[1]-=o[r][0]*g(d))}return h[0]/=3,h[1]/=3,h}}function Mt(t){return t[0]*=E,t[1]*=E,t}function St(){return Et([0,22],[45,22],[22.5,-22]).scale(380).center([22.5,2])}function Et(t,e,r){var i=(0,bt.Z)({type:"MultiPoint",coordinates:[t,e,r]}),a=[-i[0],-i[1]],o=(0,_t.Z)(a),s=At(Mt(o(t)),Mt(o(e)),Mt(o(r)));s.invert=tt(s);var l=(0,n.Z)(s).rotate(a),u=l.center;return delete l.rotate,l.center=function(t){return arguments.length?u(o(t)):o.invert(u())},l.clipAngle(90)}function Lt(t,e){var r=P(1-g(e));return[2/A*t*r,A*(1-r)]}function Ct(){return(0,n.Z)(Lt).scale(95.6464).center([0,30])}function Pt(t){var e=y(t);function r(t,r){return[t,(t?t/g(t):1)*(g(r)*s(t)-e*s(r))]}return r.invert=e?function(t,r){t&&(r*=g(t)/t);var n=s(t);return[t,2*o(P(n*n+e*e-r*r)-n,e-r)]}:function(t,e){return[t,L(t?e*y(t)/t:e)]},r}function Ot(){return ft(Pt).scale(249.828).clipAngle(90)}Lt.invert=function(t,e){var r=(r=e/A-1)*r;return[r>0?t*P(b/r)/2:0,L(1-r)]};var It=P(3);function Dt(t,e){return[It*t*(2*s(2*e/3)-1)/A,It*A*g(e/3)]}function zt(){return(0,n.Z)(Dt).scale(156.19)}function Rt(t){var e=s(t);function r(t,r){return[t*e,g(r)/e]}return r.invert=function(t,r){return[t/e,L(r*e)]},r}function Ft(){return ft(Rt).parallel(38.58).scale(195.044)}function Bt(t){var e=s(t);function r(t,r){return[t*e,(1+e)*y(r/2)]}return r.invert=function(t,r){return[t/e,2*a(r/(1+e))]},r}function Nt(){return ft(Bt).scale(124.75)}function jt(t,e){var r=P(8/(3*b));return[r*t*(1-i(e)/b),r*e]}function Ut(){return(0,n.Z)(jt).scale(165.664)}function Vt(t,e){var r=P(4-3*g(i(e)));return[2/P(6*b)*t*r,v(e)*P(2*b/3)*(2-r)]}function Ht(){return(0,n.Z)(Vt).scale(165.664)}function qt(t,e){var r=P(b*(4+b));return[2/r*t*(1+P(1-4*e*e/(b*b))),4/r*e]}function Gt(){return(0,n.Z)(qt).scale(180.739)}function Zt(t,e){var r=(2+_)*g(e);e/=2;for(var n=0,a=1/0;n<10&&i(a)>m;n++){var o=s(e);e-=a=(e+g(e)*(o+2)-r)/(2*o*(1+o))}return[2/P(b*(4+b))*t*(1+s(e)),2*P(b/(4+b))*g(e)]}function Yt(){return(0,n.Z)(Zt).scale(180.739)}function Wt(t,e){return[t*(1+s(e))/P(2+b),2*e/P(2+b)]}function Xt(){return(0,n.Z)(Wt).scale(173.044)}function Jt(t,e){for(var r=(1+_)*g(e),n=0,a=1/0;n<10&&i(a)>m;n++)e-=a=(e+g(e)-r)/(1+s(e));return r=P(2+b),[t*(1+s(e))/r,2*e/r]}function Kt(){return(0,n.Z)(Jt).scale(173.044)}Dt.invert=function(t,e){var r=3*L(e/(It*A));return[A*t/(It*(2*s(2*r/3)-1)),r]},jt.invert=function(t,e){var r=P(8/(3*b)),n=e/r;return[t/(r*(1-i(n)/b)),n]},Vt.invert=function(t,e){var r=2-i(e)/P(2*b/3);return[t*P(6*b)/(2*r),v(e)*L((4-r*r)/3)]},qt.invert=function(t,e){var r=P(b*(4+b))/2;return[t*r/(1+P(1-e*e*(4+b)/(4*b))),e*r/2]},Zt.invert=function(t,e){var r=e*P((4+b)/b)/2,n=L(r),i=s(n);return[t/(2/P(b*(4+b))*(1+i)),L((n+r*(i+2))/(2+_))]},Wt.invert=function(t,e){var r=P(2+b),n=e*r/2;return[r*t/(1+s(n)),n]},Jt.invert=function(t,e){var r=1+_,n=P(r/2);return[2*t*n/(1+s(e*=n)),L((e+g(e))/r)]};var $t=3+2*k;function Qt(t,e){var r=g(t/=2),n=s(t),i=P(s(e)),o=s(e/=2),l=g(e)/(o+k*n*i),u=P(2/(1+l*l)),f=P((k*o+(n+r)*i)/(k*o+(n-r)*i));return[$t*(u*(f-1/f)-2*c(f)),$t*(u*l*(f+1/f)-2*a(l))]}function te(){return(0,n.Z)(Qt).scale(62.5271)}Qt.invert=function(t,e){if(!(r=j.invert(t/1.2,1.065*e)))return null;var r,n=r[0],o=r[1],l=20;t/=$t,e/=$t;do{var u=n/2,p=o/2,d=g(u),v=s(u),y=g(p),x=s(p),b=s(o),w=P(b),A=y/(x+k*v*w),M=A*A,S=P(2/(1+M)),E=(k*x+(v+d)*w)/(k*x+(v-d)*w),L=P(E),C=L-1/L,O=L+1/L,I=S*C-2*c(L)-t,D=S*A*O-2*a(A)-e,z=y&&T*w*d*M/y,R=(k*v*x+w)/(2*(x+k*v*w)*(x+k*v*w)*w),F=-.5*A*S*S*S,B=F*z,N=F*R,U=(U=2*x+k*w*(v-d))*U*L,V=(k*v*x*w+b)/U,H=-k*d*y/(w*U),q=C*B-2*V/L+S*(V+V/E),G=C*N-2*H/L+S*(H+H/E),Z=A*O*B-2*z/(1+M)+S*O*z+S*A*(V-V/E),Y=A*O*N-2*R/(1+M)+S*O*R+S*A*(H-H/E),W=G*Z-Y*q;if(!W)break;var X=(D*G-I*Y)/W,J=(I*Z-D*q)/W;n-=X,o=f(-_,h(_,o-J))}while((i(X)>m||i(J)>m)&&--l>0);return i(i(o)-_)<m?[0,o]:l&&[n,o]};var ee=s(35*E);function re(t,e){var r=y(e/2);return[t*ee*P(1-r*r),(1+ee)*r]}function ne(){return(0,n.Z)(re).scale(137.152)}function ie(t,e){var r=e/2,n=s(r);return[2*t/A*s(e)*n*n,A*y(r)]}function ae(){return(0,n.Z)(ie).scale(135.264)}function oe(t){var e=1-t,r=i(b,0)[0]-i(-b,0)[0],n=P(2*(i(0,_)[1]-i(0,-_)[1])/r);function i(r,n){var i=s(n),a=g(n);return[i/(e+t*i)*r,e*n+t*a]}function a(t,e){var r=i(t,e);return[r[0]*n,r[1]/n]}function o(t){return a(0,t)[1]}return a.invert=function(r,i){var a=Q(o,i);return[r/n*(t+e/s(a)),a]},a}function se(){var t=.5,e=(0,n.r)(oe),r=e(t);return r.alpha=function(r){return arguments.length?e(t=+r):t},r.scale(168.725)}re.invert=function(t,e){var r=e/(1+ee);return[t&&t/(ee*P(1-r*r)),2*a(r)]},ie.invert=function(t,e){var r=a(e/A),n=s(r),i=2*r;return[t*A/2/(s(i)*n*n),i]};var le=r(57962),ue=r(97492);function ce(t){return[t[0]/2,L(y(t[1]/2*E))*S]}function fe(t){return[2*t[0],2*a(g(t[1]*E))*S]}function he(t){null==t&&(t=le.Z);var e=t(),r=(0,ue.Z)().scale(S).precision(0).clipAngle(null).translate([0,0]);function n(t){return e(ce(t))}function i(t){n[t]=function(){return arguments.length?(e[t].apply(e,arguments),n):e[t]()}}return e.invert&&(n.invert=function(t){return fe(e.invert(t))}),n.stream=function(t){var n=e.stream(t),i=r.stream({point:function(t,e){n.point(t/2,L(y(-e/2*E))*S)},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}});return i.sphere=n.sphere,i},n.rotate=function(t){return arguments.length?(r.rotate(t),n):r.rotate()},n.center=function(t){return arguments.length?(e.center(ce(t)),n):fe(e.center())},i("angle"),i("clipAngle"),i("clipExtent"),i("fitExtent"),i("fitHeight"),i("fitSize"),i("fitWidth"),i("scale"),i("translate"),i("precision"),n.scale(249.5)}function pe(t,e){var r=2*b/e,n=t*t;function a(e,a){var l=(0,Z.N)(e,a),u=l[0],c=l[1],f=u*u+c*c;if(f>n){var h=P(f),p=o(c,u),v=r*d(p/r),y=p-v,x=t*s(y),w=(t*g(y)-y*g(x))/(_-x),T=de(y,w),k=(b-t)/ve(T,x,b);u=h;var A,M=50;do{u-=A=(t+ve(T,x,u)*k-h)/(T(u)*k)}while(i(A)>m&&--M>0);c=y*g(u),u<_&&(c-=w*(u-_));var S=g(v),E=s(v);l[0]=u*E-c*S,l[1]=u*S+c*E}return l}return a.invert=function(e,a){var l=e*e+a*a;if(l>n){var u=P(l),c=o(a,e),f=r*d(c/r),h=c-f;e=u*s(h),a=u*g(h);for(var p=e-_,v=g(e),y=a/v,m=e<_?1/0:0,w=10;;){var T=t*g(y),k=t*s(y),A=g(k),M=_-k,S=(T-y*A)/M,E=de(y,S);if(i(m)<x||!--w)break;y-=m=(y*v-S*p-a)/(v-2*p*(M*(k+y*T*s(k)-A)-T*(T-y*A))/(M*M))}e=(u=t+ve(E,k,e)*(b-t)/ve(E,k,b))*s(c=f+y),a=u*g(c)}return Z.N.invert(e,a)},a}function de(t,e){return function(r){var n=t*s(r);return r<_&&(n-=e),P(1+n*n)}}function ve(t,e,r){for(var n=(r-e)/50,i=t(e)+t(r),a=1,o=e;a<50;++a)i+=2*t(o+=n);return.5*i*n}function ge(){var t=6,e=30*E,r=s(e),i=g(e),a=(0,n.r)(pe),l=a(e,t),u=l.stream,c=-s(.01*E),f=g(.01*E);return l.radius=function(n){return arguments.length?(r=s(e=n*E),i=g(e),a(e,t)):e*S},l.lobes=function(r){return arguments.length?a(e,t=+r):t},l.stream=function(e){var n=l.rotate(),a=u(e),h=(l.rotate([0,0]),u(e));return l.rotate(n),a.sphere=function(){h.polygonStart(),h.lineStart();for(var e=0,n=2*b/t,a=0;e<t;++e,a-=n)h.point(o(f*s(a),c)*S,L(f*g(a))*S),h.point(o(i*s(a-n/2),r)*S,L(i*g(a-n/2))*S);h.lineEnd(),h.polygonEnd()},a},l.rotate([90,-40]).scale(91.7095).clipAngle(179.999)}function ye(t,e,r,n,a,o,l,u){function c(i,c){if(!c)return[t*i/b,0];var f=c*c,h=t+f*(e+f*(r+f*n)),p=c*(a-1+f*(o-u+f*l)),d=(h*h+p*p)/(2*p),v=i*L(h/d)/b;return[d*g(v),c*(1+f*u)+d*(1-s(v))]}return arguments.length<8&&(u=0),c.invert=function(c,f){var h,p,d=b*c/t,v=f,y=50;do{var x=v*v,_=t+x*(e+x*(r+x*n)),w=v*(a-1+x*(o-u+x*l)),T=_*_+w*w,k=2*w,A=T/k,M=A*A,S=L(_/A)/b,E=d*S,C=_*_,O=(2*e+x*(4*r+6*x*n))*v,I=a+x*(3*o+5*x*l),D=(2*(_*O+w*(I-1))*k-T*(2*(I-1)))/(k*k),z=s(E),R=g(E),F=A*z,B=A*R,N=d/b*(1/P(1-C/M))*(O*A-_*D)/M,j=B-c,U=v*(1+x*u)+A-F-f,V=D*R+F*N,H=F*S,q=1+D-(D*z-B*N),G=B*S,Z=V*G-q*H;if(!Z)break;d-=h=(U*V-j*q)/Z,v-=p=(j*G-U*H)/Z}while((i(h)>m||i(p)>m)&&--y>0);return[d,v]},c}var me=ye(2.8284,-1.6988,.75432,-.18071,1.76003,-.38914,.042555);function xe(){return(0,n.Z)(me).scale(149.995)}var be=ye(2.583819,-.835827,.170354,-.038094,1.543313,-.411435,.082742);function _e(){return(0,n.Z)(be).scale(153.93)}var we=ye(5/6*b,-.62636,-.0344,0,1.3493,-.05524,0,.045);function Te(){return(0,n.Z)(we).scale(130.945)}function ke(t,e){var r=t*t,n=e*e;return[t*(1-.162388*n)*(.87-952426e-9*r*r),e*(1+n/12)]}function Ae(){return(0,n.Z)(ke).scale(131.747)}ke.invert=function(t,e){var r,n=t,a=e,o=50;do{var s=a*a;a-=r=(a*(1+s/12)-e)/(1+s/4)}while(i(r)>m&&--o>0);o=50,t/=1-.162388*s;do{var l=(l=n*n)*l;n-=r=(n*(.87-952426e-9*l)-t)/(.87-.00476213*l)}while(i(r)>m&&--o>0);return[n,a]};var Me=ye(2.6516,-.76534,.19123,-.047094,1.36289,-.13965,.031762);function Se(){return(0,n.Z)(Me).scale(131.087)}function Ee(t){var e=t(_,0)[0]-t(-_,0)[0];function r(r,n){var i=r>0?-.5:.5,a=t(r+i*b,n);return a[0]-=i*e,a}return t.invert&&(r.invert=function(r,n){var i=r>0?-.5:.5,a=t.invert(r+i*e,n),o=a[0]-i*b;return o<-b?o+=2*b:o>b&&(o-=2*b),a[0]=o,a}),r}function Le(t,e){var r=v(t),n=v(e),a=s(e),l=s(t)*a,u=g(t)*a,c=g(n*e);t=i(o(u,c)),e=L(l),i(t-_)>m&&(t%=_);var f=function(t,e){if(e===_)return[0,0];var r,n,a=g(e),o=a*a,l=o*o,u=1+l,c=1+3*l,f=1-l,h=L(1/P(u)),p=f+o*u*h,d=(1-a)/p,v=P(d),y=d*u,x=P(y),w=v*f;if(0===t)return[0,-(w+o*x)];var T,k=s(e),A=1/k,M=2*a*k,S=(-p*k-(1-a)*((-3*o+h*c)*M))/(p*p),E=-A*M,C=-A*(o*u*S+d*c*M),O=-2*A*(f*(.5*S/v)-2*o*v*M),I=4*t/b;if(t>.222*b||e<b/4&&t>.175*b){if(r=(w+o*P(y*(1+l)-w*w))/(1+l),t>b/4)return[r,r];var D=r,z=.5*r;r=.5*(z+D),n=50;do{var R=r*(O+E*P(y-r*r))+C*L(r/x)-I;if(!R)break;R<0?z=r:D=r,r=.5*(z+D)}while(i(D-z)>m&&--n>0)}else{r=m,n=25;do{var F=r*r,B=P(y-F),N=O+E*B,j=r*N+C*L(r/x)-I;r-=T=B?j/(N+(C-E*F)/B):0}while(i(T)>m&&--n>0)}return[r,-w-o*P(y-r*r)]}(t>b/4?_-t:t,e);return t>b/4&&(c=f[0],f[0]=-f[1],f[1]=-c),f[0]*=r,f[1]*=-n,f}function Ce(){return(0,n.Z)(Ee(Le)).scale(239.75)}function Pe(t,e){var r,n,o,u,c,f;if(e<m)return[(u=g(t))-(r=e*(t-u*(n=s(t)))/4)*n,n+r*u,1-e*u*u/2,t-r];if(e>=1-m)return r=(1-e)/4,o=1/(n=I(t)),[(u=((f=l(2*(f=t)))-1)/(f+1))+r*((c=n*O(t))-t)/(n*n),o-r*u*o*(c-t),o+r*u*o*(c+t),2*a(l(t))-_+r*(c-t)/n];var h=[1,0,0,0,0,0,0,0,0],p=[P(e),0,0,0,0,0,0,0,0],d=0;for(n=P(1-e),c=1;i(p[d]/h[d])>m&&d<8;)r=h[d++],p[d]=(r-n)/2,h[d]=(r+n)/2,n=P(r*n),c*=2;o=c*h[d]*t;do{o=(L(u=p[d]*g(n=o)/h[d])+o)/2}while(--d);return[g(o),u=s(o),u/s(o-n),o]}function Oe(t,e){if(!e)return t;if(1===e)return c(y(t/2+w));for(var r=1,n=P(1-e),o=P(e),s=0;i(o)>m;s++){if(t%b){var l=a(n*y(t)/r);l<0&&(l+=b),t+=l+~~(t/b)*b}else t+=t;o=(r+n)/2,n=P(r*n),o=((r=o)-n)/2}return t/(p(2,s)*r)}function Ie(t,e){var r=(k-1)/(k+1),n=P(1-r*r),u=Oe(_,n*n),f=c(y(b/4+i(e)/2)),h=l(-1*f)/P(r),p=function(t,e){var r=t*t,n=e+1,i=1-r-e*e;return[.5*((t>=0?_:-_)-o(i,2*t)),-.25*c(i*i+4*r)+.5*c(n*n+r)]}(h*s(-1*t),h*g(-1*t)),d=function(t,e,r){var n=i(t),o=O(i(e));if(n){var s=1/g(n),l=1/(y(n)*y(n)),u=-(l+r*(o*o*s*s)-1+r),c=(-u+P(u*u-(r-1)*l*4))/2;return[Oe(a(1/P(c)),r)*v(t),Oe(a(P((c/l-1)/r)),1-r)*v(e)]}return[0,Oe(a(o),1-r)*v(e)]}(p[0],p[1],n*n);return[-d[1],(e>=0?1:-1)*(.5*u-d[0])]}function De(){return(0,n.Z)(Ee(Ie)).scale(151.496)}Le.invert=function(t,e){i(t)>1&&(t=2*v(t)-t),i(e)>1&&(e=2*v(e)-e);var r=v(t),n=v(e),a=-r*t,l=-n*e,u=l/a<1,c=function(t,e){for(var r=0,n=1,a=.5,o=50;;){var l=a*a,u=P(a),c=L(1/P(1+l)),f=1-l+a*(1+l)*c,h=(1-u)/f,p=P(h),d=h*(1+l),v=p*(1-l),g=P(d-t*t),y=e+v+a*g;if(i(n-r)<x||0==--o||0===y)break;y>0?r=a:n=a,a=.5*(r+n)}if(!o)return null;var m=L(u),_=s(m),w=1/_,T=2*u*_,k=(-f*_-(-3*a+c*(1+3*l))*T*(1-u))/(f*f);return[b/4*(t*(-2*w*((1-l)*(.5*k/p)-2*a*p*T)+-w*T*g)+-w*(a*(1+l)*k+h*(1+3*l)*T)*L(t/P(d))),m]}(u?l:a,u?a:l),f=c[0],h=c[1],p=s(h);return u&&(f=-_-f),[r*(o(g(f)*p,-g(h))+b),n*L(s(f)*p)]},Ie.invert=function(t,e){var r,n,i,s,u,f,h=(k-1)/(k+1),p=P(1-h*h),d=(n=-t,i=p*p,(r=.5*Oe(_,p*p)-e)?(s=Pe(r,i),n?(f=(u=Pe(n,1-i))[1]*u[1]+i*s[0]*s[0]*u[0]*u[0],[[s[0]*u[2]/f,s[1]*s[2]*u[0]*u[1]/f],[s[1]*u[1]/f,-s[0]*s[2]*u[0]*u[2]/f],[s[2]*u[1]*u[2]/f,-i*s[0]*s[1]*u[0]/f]]):[[s[0],0],[s[1],0],[s[2],0]]):[[0,(u=Pe(n,1-i))[0]/u[1]],[1/u[1],0],[u[2]/u[1],0]]),v=function(t,e){var r=e[0]*e[0]+e[1]*e[1];return[(t[0]*e[0]+t[1]*e[1])/r,(t[1]*e[0]-t[0]*e[1])/r]}(d[0],d[1]);return[o(v[1],v[0])/-1,2*a(l(-.5*c(h*v[0]*v[0]+h*v[1]*v[1])))-_]};var ze=r(7613);function Re(t){var e=g(t),r=s(t),n=Fe(t);function a(t,a){var o=n(t,a);t=o[0],a=o[1];var l=g(a),u=s(a),c=s(t),f=C(e*l+r*u*c),h=g(f),p=i(h)>m?f/h:1;return[p*r*g(t),(i(t)>_?p:-p)*(e*u-r*l*c)]}return n.invert=Fe(-t),a.invert=function(t,r){var i=P(t*t+r*r),a=-g(i),l=s(i),u=i*l,c=-r*a,f=i*e,h=P(u*u+c*c-f*f),p=o(u*f+c*h,c*f-u*h),d=(i>_?-1:1)*o(t*a,i*s(p)*l+r*g(p)*a);return n.invert(d,p)},a}function Fe(t){var e=g(t),r=s(t);return function(t,n){var i=s(n),a=s(t)*i,l=g(t)*i,u=g(n);return[o(l,a*r-u*e),L(u*r+a*e)]}}function Be(){var t=0,e=(0,n.r)(Re),r=e(t),i=r.rotate,a=r.stream,o=(0,ze.Z)();return r.parallel=function(n){if(!arguments.length)return t*S;var i=r.rotate();return e(t=n*E).rotate(i)},r.rotate=function(e){return arguments.length?(i.call(r,[e[0],e[1]-t*S]),o.center([-e[0],-e[1]]),r):((e=i.call(r))[1]+=t*S,e)},r.stream=function(t){return(t=a(t)).sphere=function(){t.polygonStart();var e,r=o.radius(89.99)().coordinates[0],n=r.length-1,i=-1;for(t.lineStart();++i<n;)t.point((e=r[i])[0],e[1]);for(t.lineEnd(),n=(r=o.radius(90.01)().coordinates[0]).length-1,t.lineStart();--i>=0;)t.point((e=r[i])[0],e[1]);t.lineEnd(),t.polygonEnd()},t},r.scale(79.4187).parallel(45).clipAngle(179.999)}var Ne=r(33064),je=r(72736),Ue=L(1-1/3)*S,Ve=Rt(0);function He(t){var e=Ue*E,r=Lt(b,e)[0]-Lt(-b,e)[0],n=Ve(0,e)[1],a=Lt(0,e)[1],o=A-a,s=M/t,l=4/M,c=n+o*o*4/M;function p(p,d){var v,g=i(d);if(g>e){var y=h(t-1,f(0,u((p+b)/s)));(v=Lt(p+=b*(t-1)/t-y*s,g))[0]=v[0]*M/r-M*(t-1)/(2*t)+y*M/t,v[1]=n+4*(v[1]-a)*o/M,d<0&&(v[1]=-v[1])}else v=Ve(p,d);return v[0]*=l,v[1]/=c,v}return p.invert=function(e,p){e/=l;var d=i(p*=c);if(d>n){var v=h(t-1,f(0,u((e+b)/s)));e=(e+b*(t-1)/t-v*s)*r/M;var g=Lt.invert(e,.25*(d-n)*M/o+a);return g[0]-=b*(t-1)/t-v*s,p<0&&(g[1]=-g[1]),g}return Ve.invert(e,p)},p}function qe(t,e){return[t,1&e?90-m:Ue]}function Ge(t,e){return[t,1&e?-90+m:-Ue]}function Ze(t){return[t[0]*(1-m),t[1]]}function Ye(){var t=4,e=(0,n.r)(He),r=e(t),i=r.stream;return r.lobes=function(r){return arguments.length?e(t=+r):t},r.stream=function(e){var n=r.rotate(),a=i(e),o=(r.rotate([0,0]),i(e));return r.rotate(n),a.sphere=function(){var e,r;(0,je.Z)((e=180/t,r=[].concat((0,Ne.w6)(-180,180+e/2,e).map(qe),(0,Ne.w6)(180,-180-e/2,-e).map(Ge)),{type:"Polygon",coordinates:[180===e?r.map(Ze):r]}),o)},a},r.scale(239.75)}function We(t){var e,r=1+t,n=L(g(1/r)),a=2*P(b/(e=b+4*n*r)),l=.5*a*(r+P(t*(2+t))),u=t*t,c=r*r;function f(f,h){var p,d,v=1-g(h);if(v&&v<2){var y,m=_-h,w=25;do{var T=g(m),k=s(m),A=n+o(T,r-k),M=1+c-2*r*k;m-=y=(m-u*n-r*T+M*A-.5*v*e)/(2*r*T*A)}while(i(y)>x&&--w>0);p=a*P(M),d=f*A/b}else p=a*(t+v),d=f*n/b;return[p*g(d),l-p*s(d)]}return f.invert=function(t,i){var s=t*t+(i-=l)*i,f=(1+c-s/(a*a))/(2*r),h=C(f),p=g(h),d=n+o(p,r-f);return[L(t/P(s))*b/d,L(1-2*(h-u*n-r*p+(1+c-2*r*f)*d)/e)]},f}function Xe(){var t=1,e=(0,n.r)(We),r=e(t);return r.ratio=function(r){return arguments.length?e(t=+r):t},r.scale(167.774).center([0,18.67])}var Je=.7109889596207567,Ke=.0528035274542;function $e(t,e){return e>-Je?((t=at(t,e))[1]+=Ke,t):ht(t,e)}function Qe(){return(0,n.Z)($e).rotate([-20,-55]).scale(164.263).center([0,-5.4036])}function tr(t,e){return i(e)>Je?((t=at(t,e))[1]-=e>0?Ke:-Ke,t):ht(t,e)}function er(){return(0,n.Z)(tr).scale(152.63)}function rr(t,e,r,n){var i=P(4*b/(2*r+(1+t-e/2)*g(2*r)+(t+e)/2*g(4*r)+e/2*g(6*r))),a=P(n*g(r)*P((1+t*s(2*r)+e*s(4*r))/(1+t+e))),o=r*u(1);function l(r){return P(1+t*s(2*r)+e*s(4*r))}function u(n){var i=n*r;return(2*i+(1+t-e/2)*g(2*i)+(t+e)/2*g(4*i)+e/2*g(6*i))/r}function c(t){return l(t)*g(t)}var f=function(t,e){var n=r*Q(u,o*g(e)/r,e/b);isNaN(n)&&(n=r*v(e));var c=i*l(n);return[c*a*t/b*s(n),c/a*g(n)]};return f.invert=function(t,e){var n=Q(c,e*a/i);return[t*b/(s(n)*i*a*l(n)),L(r*u(n/r)/o)]},0===r&&(i=P(n/b),(f=function(t,e){return[t*i,g(e)/i]}).invert=function(t,e){return[t/i,L(e*i)]}),f}function nr(){var t=1,e=0,r=45*E,i=2,a=(0,n.r)(rr),o=a(t,e,r,i);return o.a=function(n){return arguments.length?a(t=+n,e,r,i):t},o.b=function(n){return arguments.length?a(t,e=+n,r,i):e},o.psiMax=function(n){return arguments.length?a(t,e,r=+n*E,i):r*S},o.ratio=function(n){return arguments.length?a(t,e,r,i=+n):i},o.scale(180.739)}function ir(t,e,r,n,i,a,o,s,l,u,c){if(c.nanEncountered)return NaN;var f,h,p,d,v,g,y,m,x,b;if(h=t(e+.25*(f=r-e)),p=t(r-.25*f),isNaN(h))c.nanEncountered=!0;else{if(!isNaN(p))return b=((g=(d=f*(n+4*h+i)/12)+(v=f*(i+4*p+a)/12))-o)/15,u>l?(c.maxDepthCount++,g+b):Math.abs(b)<s?g+b:(m=ir(t,e,y=e+.5*f,n,h,i,d,.5*s,l,u+1,c),isNaN(m)?(c.nanEncountered=!0,NaN):(x=ir(t,y,r,i,p,a,v,.5*s,l,u+1,c),isNaN(x)?(c.nanEncountered=!0,NaN):m+x));c.nanEncountered=!0}}function ar(t,e,r,n,i){void 0===n&&(n=1e-8),void 0===i&&(i=20);var a=t(e),o=t(.5*(e+r)),s=t(r);return ir(t,e,r,a,o,s,(a+4*o+s)*(r-e)/6,n,i,1,{maxDepthCount:0,nanEncountered:!1})}function or(t,e,r){function n(r){return t+(1-t)*p(1-p(r,e),1/e)}function a(t){return ar(n,0,t,1e-4)}for(var o=1/a(1),s=1e3,l=(1+1e-8)*o,u=[],c=0;c<=s;c++)u.push(a(c/s)*l);function f(t){var e=0,r=s,n=500;do{u[n]>t?r=n:e=n,n=e+r>>1}while(n>e);var i=u[n+1]-u[n];return i&&(i=(t-u[n+1])/i),(n+1+i)/s}var h=2*f(1)/b*o/r,d=function(t,e){var r=f(i(g(e))),a=n(r)*t;return r/=h,[a,e>=0?r:-r]};return d.invert=function(t,e){var r;return i(e*=h)<1&&(r=v(e)*L(a(i(e))*o)),[t/n(i(e)),r]},d}function sr(){var t=0,e=2.5,r=1.183136,i=(0,n.r)(or),a=i(t,e,r);return a.alpha=function(n){return arguments.length?i(t=+n,e,r):t},a.k=function(n){return arguments.length?i(t,e=+n,r):e},a.gamma=function(n){return arguments.length?i(t,e,r=+n):r},a.scale(152.63)}function lr(t,e){return i(t[0]-e[0])<m&&i(t[1]-e[1])<m}function ur(t,e){for(var r,n,i,a=-1,o=t.length,s=t[0],l=[];++a<o;){n=((r=t[a])[0]-s[0])/e,i=(r[1]-s[1])/e;for(var u=0;u<e;++u)l.push([s[0]+u*n,s[1]+u*i]);s=r}return l.push(r),l}function cr(t,e,r){var i,a;function o(r,n){for(var i=n<0?-1:1,a=e[+(n<0)],o=0,s=a.length-1;o<s&&r>a[o][2][0];++o);var l=t(r-a[o][1][0],n);return l[0]+=t(a[o][1][0],i*n>i*a[o][0][1]?a[o][0][1]:n)[0],l}r?o.invert=r(o):t.invert&&(o.invert=function(r,n){for(var i=a[+(n<0)],s=e[+(n<0)],l=0,u=i.length;l<u;++l){var c=i[l];if(c[0][0]<=r&&r<c[1][0]&&c[0][1]<=n&&n<c[1][1]){var f=t.invert(r-t(s[l][1][0],0)[0],n);return f[0]+=s[l][1][0],lr(o(f[0],f[1]),[r,n])?f:null}}});var s=(0,n.Z)(o),l=s.stream;return s.stream=function(t){var e=s.rotate(),r=l(t),n=(s.rotate([0,0]),l(t));return s.rotate(e),r.sphere=function(){(0,je.Z)(i,n)},r},s.lobes=function(r){return arguments.length?(i=function(t){var e,r,n,i,a,o,s,l=[],u=t[0].length;for(s=0;s<u;++s)r=(e=t[0][s])[0][0],n=e[0][1],i=e[1][1],a=e[2][0],o=e[2][1],l.push(ur([[r+m,n+m],[r+m,i-m],[a-m,i-m],[a-m,o+m]],30));for(s=t[1].length-1;s>=0;--s)r=(e=t[1][s])[0][0],n=e[0][1],i=e[1][1],a=e[2][0],o=e[2][1],l.push(ur([[a-m,o-m],[a-m,i+m],[r+m,i+m],[r+m,n-m]],30));return{type:"Polygon",coordinates:[(0,Ne.TS)(l)]}}(r),e=r.map((function(t){return t.map((function(t){return[[t[0][0]*E,t[0][1]*E],[t[1][0]*E,t[1][1]*E],[t[2][0]*E,t[2][1]*E]]}))})),a=e.map((function(e){return e.map((function(e){var r,n=t(e[0][0],e[0][1])[0],i=t(e[2][0],e[2][1])[0],a=t(e[1][0],e[0][1])[1],o=t(e[1][0],e[1][1])[1];return a>o&&(r=a,a=o,o=r),[[n,a],[i,o]]}))})),s):e.map((function(t){return t.map((function(t){return[[t[0][0]*S,t[0][1]*S],[t[1][0]*S,t[1][1]*S],[t[2][0]*S,t[2][1]*S]]}))}))},null!=e&&s.lobes(e),s}$e.invert=function(t,e){return e>-Je?at.invert(t,e-Ke):ht.invert(t,e)},tr.invert=function(t,e){return i(e)>Je?at.invert(t,e+(e>0?Ke:-Ke)):ht.invert(t,e)};var fr=[[[[-180,0],[-100,90],[-40,0]],[[-40,0],[30,90],[180,0]]],[[[-180,0],[-160,-90],[-100,0]],[[-100,0],[-60,-90],[-20,0]],[[-20,0],[20,-90],[80,0]],[[80,0],[140,-90],[180,0]]]];function hr(){return cr(ut,fr).scale(160.857)}var pr=[[[[-180,0],[-100,90],[-40,0]],[[-40,0],[30,90],[180,0]]],[[[-180,0],[-160,-90],[-100,0]],[[-100,0],[-60,-90],[-20,0]],[[-20,0],[20,-90],[80,0]],[[80,0],[140,-90],[180,0]]]];function dr(){return cr(tr,pr).scale(152.63)}var vr=[[[[-180,0],[-100,90],[-40,0]],[[-40,0],[30,90],[180,0]]],[[[-180,0],[-160,-90],[-100,0]],[[-100,0],[-60,-90],[-20,0]],[[-20,0],[20,-90],[80,0]],[[80,0],[140,-90],[180,0]]]];function gr(){return cr(at,vr).scale(169.529)}var yr=[[[[-180,0],[-90,90],[0,0]],[[0,0],[90,90],[180,0]]],[[[-180,0],[-90,-90],[0,0]],[[0,0],[90,-90],[180,0]]]];function mr(){return cr(at,yr).scale(169.529).rotate([20,0])}var xr=[[[[-180,35],[-30,90],[0,35]],[[0,35],[30,90],[180,35]]],[[[-180,-10],[-102,-90],[-65,-10]],[[-65,-10],[5,-90],[77,-10]],[[77,-10],[103,-90],[180,-10]]]];function br(){return cr($e,xr,tt).rotate([-20,-55]).scale(164.263).center([0,-5.4036])}var _r=[[[[-180,0],[-110,90],[-40,0]],[[-40,0],[0,90],[40,0]],[[40,0],[110,90],[180,0]]],[[[-180,0],[-110,-90],[-40,0]],[[-40,0],[0,-90],[40,0]],[[40,0],[110,-90],[180,0]]]];function wr(){return cr(ht,_r).scale(152.63).rotate([-20,0])}function Tr(t,e){return[3/M*t*P(b*b/3-e*e),e]}function kr(){return(0,n.Z)(Tr).scale(158.837)}function Ar(t){function e(e,r){if(i(i(r)-_)<m)return[0,r<0?-2:2];var n=g(r),a=p((1+n)/(1-n),t/2),o=.5*(a+1/a)+s(e*=t);return[2*g(e)/o,(a-1/a)/o]}return e.invert=function(e,r){var n=i(r);if(i(n-2)<m)return e?null:[0,v(r)*_];if(n>2)return null;var a=(e/=2)*e,s=(r/=2)*r,l=2*r/(1+a+s);return l=p((1+l)/(1-l),1/t),[o(2*e,1-a-s)/t,L((l-1)/(l+1))]},e}function Mr(){var t=.5,e=(0,n.r)(Ar),r=e(t);return r.spacing=function(r){return arguments.length?e(t=+r):t},r.scale(124.75)}Tr.invert=function(t,e){return[M/3*t/P(b*b/3-e*e),e]};var Sr=b/k;function Er(t,e){return[t*(1+P(s(e)))/2,e/(s(e/2)*s(t/6))]}function Lr(){return(0,n.Z)(Er).scale(97.2672)}function Cr(t,e){var r=t*t,n=e*e;return[t*(.975534+n*(-.0143059*r-.119161+-.0547009*n)),e*(1.00384+r*(.0802894+-.02855*n+199025e-9*r)+n*(.0998909+-.0491032*n))]}function Pr(){return(0,n.Z)(Cr).scale(139.98)}function Or(t,e){return[g(t)/s(e),y(e)*s(t)]}function Ir(){return(0,n.Z)(Or).scale(144.049).clipAngle(89.999)}function Dr(t){var e=s(t),r=y(w+t/2);function n(n,a){var o=a-t,s=i(o)<m?n*e:i(s=w+a/2)<m||i(i(s)-_)<m?0:n*o/c(y(s)/r);return[s,o]}return n.invert=function(n,a){var o,s=a+t;return[i(a)<m?n/e:i(o=w+s/2)<m||i(i(o)-_)<m?0:n*c(y(o)/r)/a,s]},n}function zr(){return ft(Dr).parallel(40).scale(158.837)}function Rr(t,e){return[t,1.25*c(y(w+.4*e))]}function Fr(){return(0,n.Z)(Rr).scale(108.318)}function Br(t){var e=t.length-1;function r(r,n){for(var i,a=s(n),o=2/(1+a*s(r)),l=o*a*g(r),u=o*g(n),c=e,f=t[c],h=f[0],p=f[1];--c>=0;)h=(f=t[c])[0]+l*(i=h)-u*p,p=f[1]+l*p+u*i;return[h=l*(i=h)-u*p,p=l*p+u*i]}return r.invert=function(r,n){var l=20,u=r,c=n;do{for(var f,h=e,p=t[h],d=p[0],v=p[1],y=0,x=0;--h>=0;)y=d+u*(f=y)-c*x,x=v+u*x+c*f,d=(p=t[h])[0]+u*(f=d)-c*v,v=p[1]+u*v+c*f;var b,_,w=(y=d+u*(f=y)-c*x)*y+(x=v+u*x+c*f)*x;u-=b=((d=u*(f=d)-c*v-r)*y+(v=u*v+c*f-n)*x)/w,c-=_=(v*y-d*x)/w}while(i(b)+i(_)>m*m&&--l>0);if(l){var T=P(u*u+c*c),k=2*a(.5*T),A=g(k);return[o(u*A,T*s(k)),T?L(c*A/T):0]}},r}Er.invert=function(t,e){var r=i(t),n=i(e),a=m,o=_;n<Sr?o*=n/Sr:a+=6*C(Sr/n);for(var l=0;l<25;l++){var u=g(o),c=P(s(o)),f=g(o/2),h=s(o/2),p=g(a/6),d=s(a/6),v=.5*a*(1+c)-r,y=o/(h*d)-n,x=c?-.25*a*u/c:0,b=.5*(1+c),w=(1+.5*o*f/h)/(h*d),T=o/h*(p/6)/(d*d),k=x*T-w*b,A=(v*T-y*b)/k,M=(y*x-v*w)/k;if(o-=A,a-=M,i(A)<m&&i(M)<m)break}return[t<0?-a:a,e<0?-o:o]},Cr.invert=function(t,e){var r=v(t)*b,n=e/2,a=50;do{var o=r*r,s=n*n,l=r*n,u=r*(.975534+s*(-.0143059*o-.119161+-.0547009*s))-t,c=n*(1.00384+o*(.0802894+-.02855*s+199025e-9*o)+s*(.0998909+-.0491032*s))-e,f=.975534-s*(.119161+3*o*.0143059+.0547009*s),h=-l*(.238322+.2188036*s+.0286118*o),p=l*(.1605788+7961e-7*o+-.0571*s),d=1.00384+o*(.0802894+199025e-9*o)+s*(3*(.0998909-.02855*o)-.245516*s),g=h*p-d*f,y=(c*h-u*d)/g,x=(u*p-c*f)/g;r-=y,n-=x}while((i(y)>m||i(x)>m)&&--a>0);return a&&[r,n]},Or.invert=function(t,e){var r=t*t,n=e*e+1,i=r+n,a=t?T*P((i-P(i*i-4*r))/r):1/P(n);return[L(t*a),v(e)*C(a)]},Rr.invert=function(t,e){return[t,2.5*a(l(.8*e))-.625*b]};var Nr=[[.9972523,0],[.0052513,-.0041175],[.0074606,.0048125],[-.0153783,-.1968253],[.0636871,-.1408027],[.3660976,-.2937382]],jr=[[.98879,0],[0,0],[-.050909,0],[0,0],[.075528,0]],Ur=[[.984299,0],[.0211642,.0037608],[-.1036018,-.0575102],[-.0329095,-.0320119],[.0499471,.1223335],[.026046,.0899805],[7388e-7,-.1435792],[.0075848,-.1334108],[-.0216473,.0776645],[-.0225161,.0853673]],Vr=[[.9245,0],[0,0],[.01943,0]],Hr=[[.721316,0],[0,0],[-.00881625,-.00617325]];function qr(){return Xr(Nr,[152,-64]).scale(1400).center([-160.908,62.4864]).clipAngle(30).angle(7.8)}function Gr(){return Xr(jr,[95,-38]).scale(1e3).clipAngle(55).center([-96.5563,38.8675])}function Zr(){return Xr(Ur,[120,-45]).scale(359.513).clipAngle(55).center([-117.474,53.0628])}function Yr(){return Xr(Vr,[-20,-18]).scale(209.091).center([20,16.7214]).clipAngle(82)}function Wr(){return Xr(Hr,[165,10]).scale(250).clipAngle(130).center([-165,-10])}function Xr(t,e){var r=(0,n.Z)(Br(t)).rotate(e).clipAngle(90),i=(0,_t.Z)(e),a=r.center;return delete r.rotate,r.center=function(t){return arguments.length?a(i(t)):i.invert(a())},r}var Jr=P(6),Kr=P(7);function $r(t,e){var r=L(7*g(e)/(3*Jr));return[Jr*t*(2*s(2*r/3)-1)/Kr,9*g(r/3)/Kr]}function Qr(){return(0,n.Z)($r).scale(164.859)}function tn(t,e){for(var r,n=(1+T)*g(e),a=e,o=0;o<25&&(a-=r=(g(a/2)+g(a)-n)/(.5*s(a/2)+s(a)),!(i(r)<m));o++);return[t*(1+2*s(a)/s(a/2))/(3*k),2*P(3)*g(a/2)/P(2+k)]}function en(){return(0,n.Z)(tn).scale(188.209)}function rn(t,e){for(var r,n=P(6/(4+b)),a=(1+b/4)*g(e),o=e/2,l=0;l<25&&(o-=r=(o/2+g(o)-a)/(.5+s(o)),!(i(r)<m));l++);return[n*(.5+s(o))*t/1.5,n*o]}function nn(){return(0,n.Z)(rn).scale(166.518)}$r.invert=function(t,e){var r=3*L(e*Kr/9);return[t*Kr/(Jr*(2*s(2*r/3)-1)),L(3*g(r)*Jr/7)]},tn.invert=function(t,e){var r=e*P(2+k)/(2*P(3)),n=2*L(r);return[3*k*t/(1+2*s(n)/s(n/2)),L((r+g(n))/(1+T))]},rn.invert=function(t,e){var r=P(6/(4+b)),n=e/r;return i(i(n)-_)<m&&(n=n<0?-_:_),[1.5*t/(r*(.5+s(n))),L((n/2+g(n))/(1+b/4))]};var an=r(26867);function on(t,e){var r=e*e,n=r*r,i=r*n;return[t*(.84719-.13063*r+i*i*(.05494*r-.04515-.02326*n+.00331*i)),e*(1.01183+n*n*(.01926*r-.02625-.00396*n))]}function sn(){return(0,n.Z)(on).scale(175.295)}function ln(t,e){return[t*(1+s(e))/2,2*(e-y(e/2))]}function un(){return(0,n.Z)(ln).scale(152.63)}on.invert=function(t,e){var r,n,a,o,s=e,l=25;do{s-=r=(s*(1.01183+(a=(n=s*s)*n)*a*(.01926*n-.02625-.00396*a))-e)/(1.01183+a*a*(.21186*n-.23625+-.05148*a))}while(i(r)>x&&--l>0);return[t/(.84719-.13063*(n=s*s)+(o=n*(a=n*n))*o*(.05494*n-.04515-.02326*a+.00331*o)),s]},ln.invert=function(t,e){for(var r=e/2,n=0,a=1/0;n<10&&i(a)>m;++n){var o=s(e/2);e-=a=(e-y(e/2)-r)/(1-.5/(o*o))}return[2*t/(1+s(e)),e]};var cn=[[[[-180,0],[-90,90],[0,0]],[[0,0],[90,90],[180,0]]],[[[-180,0],[-90,-90],[0,0]],[[0,0],[90,-90],[180,0]]]];function fn(){return cr(J(1/0),cn).rotate([20,0]).scale(152.63)}function hn(t,e){var r=g(e),n=s(e),a=v(t);if(0===t||i(e)===_)return[0,e];if(0===e)return[t,0];if(i(t)===_)return[t*n,_*r];var o=b/(2*t)-2*t/b,l=2*e/b,u=(1-l*l)/(r-l),c=o*o,f=u*u,h=1+c/f,p=1+f/c,d=(o*r/u-o/2)/h,y=(f*r/c+u/2)/p,m=y*y-(f*r*r/c+u*r-1)/p;return[_*(d+P(d*d+n*n/h)*a),_*(y+P(m<0?0:m)*v(-e*o)*a)]}function pn(){return(0,n.Z)(hn).scale(127.267)}hn.invert=function(t,e){var r=(t/=_)*t,n=r+(e/=_)*e,i=b*b;return[t?(n-1+P((1-n)*(1-n)+4*r))/(2*t)*_:0,Q((function(t){return n*(b*g(t)-2*t)*b+4*t*t*(e-g(t))+2*b*t-i*e}),0)]};var dn=1.0148,vn=.23185,gn=-.14499,yn=.02406,mn=dn,xn=5*vn,bn=7*gn,_n=9*yn,wn=1.790857183;function Tn(t,e){var r=e*e;return[t,e*(dn+r*r*(vn+r*(gn+yn*r)))]}function kn(){return(0,n.Z)(Tn).scale(139.319)}function An(t,e){if(i(e)<m)return[t,0];var r=y(e),n=t*g(e);return[g(n)/r,e+(1-s(n))/r]}function Mn(){return(0,n.Z)(An).scale(103.74)}Tn.invert=function(t,e){e>wn?e=wn:e<-1.790857183&&(e=-1.790857183);var r,n=e;do{var a=n*n;n-=r=(n*(dn+a*a*(vn+a*(gn+yn*a)))-e)/(mn+a*a*(xn+a*(bn+_n*a)))}while(i(r)>m);return[t,n]},An.invert=function(t,e){if(i(e)<m)return[t,0];var r,n=t*t+e*e,a=.5*e,o=10;do{var l=y(a),u=1/s(a),c=n-2*e*a+a*a;a-=r=(l*c+2*(a-e))/(2+c*u*u+2*(a-e)*l)}while(i(r)>m&&--o>0);return l=y(a),[(i(e)<i(a+1/l)?L(t*l):v(e)*v(t)*(C(i(t*l))+_))/g(a),a]};var Sn=r(77338),En=r(83074);function Ln(t,e){return[t[0]*e[0]+t[1]*e[3],t[0]*e[1]+t[1]*e[4],t[0]*e[2]+t[1]*e[5]+t[2],t[3]*e[0]+t[4]*e[3],t[3]*e[1]+t[4]*e[4],t[3]*e[2]+t[4]*e[5]+t[5]]}function Cn(t,e){return[t[0]-e[0],t[1]-e[1]]}function Pn(t){return P(t[0]*t[0]+t[1]*t[1])}function On(t,e,r){function i(t,r){var n,i=e(t,r),a=i.project([t*S,r*S]);return(n=i.transform)?[n[0]*a[0]+n[1]*a[1]+n[2],-(n[3]*a[0]+n[4]*a[1]+n[5])]:(a[1]=-a[1],a)}function a(t,r){var n=t.project.invert,i=t.transform,o=r;if(i&&(i=function(t){var e=1/(t[0]*t[4]-t[1]*t[3]);return[e*t[4],-e*t[1],e*(t[1]*t[5]-t[2]*t[4]),-e*t[3],e*t[0],e*(t[2]*t[3]-t[0]*t[5])]}(i),o=[i[0]*o[0]+i[1]*o[1]+i[2],i[3]*o[0]+i[4]*o[1]+i[5]]),n&&t===function(t){return e(t[0]*E,t[1]*E)}(s=n(o)))return s;for(var s,l=t.children,u=0,c=l&&l.length;u<c;++u)if(s=a(l[u],r))return s}!function t(e,r){if(e.edges=function(t){for(var e=t.length,r=[],n=t[e-1],i=0;i<e;++i)r.push([n,n=t[i]]);return r}(e.face),r.face){var n=e.shared=function(t,e){for(var r,n,i=t.length,a=null,o=0;o<i;++o){r=t[o];for(var s=e.length;--s>=0;)if(n=e[s],r[0]===n[0]&&r[1]===n[1]){if(a)return[a,r];a=r}}}(e.face,r.face),i=(c=n.map(r.project),f=n.map(e.project),h=Cn(c[1],c[0]),p=Cn(f[1],f[0]),d=function(t,e){return o(t[0]*e[1]-t[1]*e[0],t[0]*e[0]+t[1]*e[1])}(h,p),v=Pn(h)/Pn(p),Ln([1,0,c[0][0],0,1,c[0][1]],Ln([v,0,0,0,v,0],Ln([s(d),g(d),0,-g(d),s(d),0],[1,0,-f[0][0],0,1,-f[0][1]]))));e.transform=r.transform?Ln(r.transform,i):i;for(var a=r.edges,l=0,u=a.length;l<u;++l)Dn(n[0],a[l][1])&&Dn(n[1],a[l][0])&&(a[l]=e),Dn(n[0],a[l][0])&&Dn(n[1],a[l][1])&&(a[l]=e);for(l=0,u=(a=e.edges).length;l<u;++l)Dn(n[0],a[l][0])&&Dn(n[1],a[l][1])&&(a[l]=r),Dn(n[0],a[l][1])&&Dn(n[1],a[l][0])&&(a[l]=r)}else e.transform=r.transform;var c,f,h,p,d,v;return e.children&&e.children.forEach((function(r){t(r,e)})),e}(t,{transform:null}),zn(t)&&(i.invert=function(e,r){var n=a(t,[e,-r]);return n&&(n[0]*=E,n[1]*=E,n)});var l=(0,n.Z)(i),u=l.stream;return l.stream=function(e){var r=l.rotate(),n=u(e),i=(l.rotate([0,0]),u(e));return l.rotate(r),n.sphere=function(){i.polygonStart(),i.lineStart(),In(i,t),i.lineEnd(),i.polygonEnd()},n},l.angle(null==r?-30:r*S)}function In(t,e,r){var n,a,o=e.edges,s=o.length,l={type:"MultiPoint",coordinates:e.face},u=e.face.filter((function(t){return 90!==i(t[1])})),c=(0,Sn.Z)({type:"MultiPoint",coordinates:u}),f=!1,h=-1,p=c[1][0]-c[0][0],d=180===p||360===p?[(c[0][0]+c[1][0])/2,(c[0][1]+c[1][1])/2]:(0,bt.Z)(l);if(r)for(;++h<s&&o[h]!==r;);++h;for(var v=0;v<s;++v)a=o[(v+h)%s],Array.isArray(a)?(f||(t.point((n=(0,En.Z)(a[0],d)(m))[0],n[1]),f=!0),t.point((n=(0,En.Z)(a[1],d)(m))[0],n[1])):(f=!1,a!==r&&In(t,a,e))}function Dn(t,e){return t&&e&&t[0]===e[0]&&t[1]===e[1]}function zn(t){return t.project.invert||t.children&&t.children.some(zn)}var Rn=r(98936),Fn=[[0,90],[-90,0],[0,0],[90,0],[180,0],[0,-90]],Bn=[[0,2,1],[0,3,2],[5,1,2],[5,2,3],[0,1,4],[0,4,3],[5,4,1],[5,3,4]].map((function(t){return t.map((function(t){return Fn[t]}))}));function Nn(t){t=t||function(t){var e=(0,bt.Z)({type:"MultiPoint",coordinates:t});return(0,Rn.Z)().scale(1).translate([0,0]).rotate([-e[0],-e[1]])};var e=Bn.map((function(e){return{face:e,project:t(e)}}));return[-1,0,0,1,0,1,4,5].forEach((function(t,r){var n=e[t];n&&(n.children||(n.children=[])).push(e[r])})),On(e[0],(function(t,r){return e[t<-b/2?r<0?6:4:t<0?r<0?2:0:t<b/2?r<0?3:1:r<0?7:5]})).angle(-30).scale(101.858).center([0,45])}var jn=2/P(3);function Un(t,e){var r=Lt(t,e);return[r[0]*jn,r[1]]}function Vn(t){t=t||function(t){var e=(0,bt.Z)({type:"MultiPoint",coordinates:t});return(0,n.Z)(Un).translate([0,0]).scale(1).rotate(e[1]>0?[-e[0],0]:[180-e[0],180])};var e=Bn.map((function(e){return{face:e,project:t(e)}}));return[-1,0,0,1,0,1,4,5].forEach((function(t,r){var n=e[t];n&&(n.children||(n.children=[])).push(e[r])})),On(e[0],(function(t,r){return e[t<-b/2?r<0?6:4:t<0?r<0?2:0:t<b/2?r<0?3:1:r<0?7:5]})).angle(-30).scale(121.906).center([0,48.5904])}function Hn(t){t=t||function(t){var e=6===t.length?(0,bt.Z)({type:"MultiPoint",coordinates:t}):t[0];return(0,Rn.Z)().scale(1).translate([0,0]).rotate([-e[0],-e[1]])};var e=Bn.map((function(t){for(var e,r=t.map(Zn),n=r.length,i=r[n-1],a=[],o=0;o<n;++o)e=r[o],a.push(Gn([.9486832980505138*i[0]+.31622776601683794*e[0],.9486832980505138*i[1]+.31622776601683794*e[1],.9486832980505138*i[2]+.31622776601683794*e[2]]),Gn([.9486832980505138*e[0]+.31622776601683794*i[0],.9486832980505138*e[1]+.31622776601683794*i[1],.9486832980505138*e[2]+.31622776601683794*i[2]])),i=e;return a})),r=[],n=[-1,0,0,1,0,1,4,5];e.forEach((function(t,i){for(var a,o,s=Bn[i],l=s.length,u=r[i]=[],c=0;c<l;++c)e.push([s[c],t[(2*c+2)%(2*l)],t[(2*c+1)%(2*l)]]),n.push(i),u.push((a=Zn(t[(2*c+2)%(2*l)]),o=Zn(t[(2*c+1)%(2*l)]),[a[1]*o[2]-a[2]*o[1],a[2]*o[0]-a[0]*o[2],a[0]*o[1]-a[1]*o[0]]))}));var i=e.map((function(e){return{project:t(e),face:e}}));return n.forEach((function(t,e){var r=i[t];r&&(r.children||(r.children=[])).push(i[e])})),On(i[0],(function(t,e){var n=s(e),a=[n*s(t),n*g(t),g(e)],o=t<-b/2?e<0?6:4:t<0?e<0?2:0:t<b/2?e<0?3:1:e<0?7:5,l=r[o];return i[qn(l[0],a)<0?8+3*o:qn(l[1],a)<0?8+3*o+1:qn(l[2],a)<0?8+3*o+2:o]})).angle(-30).scale(110.625).center([0,45])}function qn(t,e){for(var r=0,n=t.length,i=0;r<n;++r)i+=t[r]*e[r];return i}function Gn(t){return[o(t[1],t[0])*S,L(f(-1,h(1,t[2])))*S]}function Zn(t){var e=t[0]*E,r=t[1]*E,n=s(r);return[n*s(e),n*g(e),g(r)]}function Yn(){}function Wn(t,e){var r,n=e.stream;if(!n)throw new Error("invalid projection");switch(t&&t.type){case"Feature":r=Jn;break;case"FeatureCollection":r=Xn;break;default:r=Kn}return r(t,n)}function Xn(t,e){return{type:"FeatureCollection",features:t.features.map((function(t){return Jn(t,e)}))}}function Jn(t,e){return{type:"Feature",id:t.id,properties:t.properties,geometry:Kn(t.geometry,e)}}function Kn(t,e){if(!t)return null;if("GeometryCollection"===t.type)return function(t,e){return{type:"GeometryCollection",geometries:t.geometries.map((function(t){return Kn(t,e)}))}}(t,e);var r;switch(t.type){case"Point":case"MultiPoint":r=ti;break;case"LineString":case"MultiLineString":r=ei;break;case"Polygon":case"MultiPolygon":case"Sphere":r=ri;break;default:return null}return(0,je.Z)(t,e(r)),r.result()}Un.invert=function(t,e){return Lt.invert(t/jn,e)};var $n=[],Qn=[],ti={point:function(t,e){$n.push([t,e])},result:function(){var t=$n.length?$n.length<2?{type:"Point",coordinates:$n[0]}:{type:"MultiPoint",coordinates:$n}:null;return $n=[],t}},ei={lineStart:Yn,point:function(t,e){$n.push([t,e])},lineEnd:function(){$n.length&&(Qn.push($n),$n=[])},result:function(){var t=Qn.length?Qn.length<2?{type:"LineString",coordinates:Qn[0]}:{type:"MultiLineString",coordinates:Qn}:null;return Qn=[],t}},ri={polygonStart:Yn,lineStart:Yn,point:function(t,e){$n.push([t,e])},lineEnd:function(){var t=$n.length;if(t){do{$n.push($n[0].slice())}while(++t<4);Qn.push($n),$n=[]}},polygonEnd:Yn,result:function(){if(!Qn.length)return null;var t=[],e=[];return Qn.forEach((function(r){!function(t){if((e=t.length)<4)return!1;for(var e,r=0,n=t[e-1][1]*t[0][0]-t[e-1][0]*t[0][1];++r<e;)n+=t[r-1][1]*t[r][0]-t[r-1][0]*t[r][1];return n<=0}(r)?e.push(r):t.push([r])})),e.forEach((function(e){var r=e[0];t.some((function(t){if(function(t,e){for(var r=e[0],n=e[1],i=!1,a=0,o=t.length,s=o-1;a<o;s=a++){var l=t[a],u=l[0],c=l[1],f=t[s],h=f[0],p=f[1];c>n^p>n&&r<(h-u)*(n-c)/(p-c)+u&&(i=!i)}return i}(t[0],r))return t.push(e),!0}))||t.push([e])})),Qn=[],t.length?t.length>1?{type:"MultiPolygon",coordinates:t}:{type:"Polygon",coordinates:t[0]}:null}};function ni(t){var e=t(_,0)[0]-t(-_,0)[0];function r(r,n){var a=i(r)<_,o=t(a?r:r>0?r-b:r+b,n),s=(o[0]-o[1])*T,l=(o[0]+o[1])*T;if(a)return[s,l];var u=e*T,c=s>0^l>0?-1:1;return[c*s-v(l)*u,c*l-v(s)*u]}return t.invert&&(r.invert=function(r,n){var a=(r+n)*T,o=(n-r)*T,s=i(a)<.5*e&&i(o)<.5*e;if(!s){var l=e*T,u=a>0^o>0?-1:1,c=-u*r+(o>0?1:-1)*l,f=-u*n+(a>0?1:-1)*l;a=(-c-f)*T,o=(c-f)*T}var h=t.invert(a,o);return s||(h[0]+=a>0?b:-b),h}),(0,n.Z)(r).rotate([-90,-90,45]).clipAngle(179.999)}function ii(){return ni(Le).scale(176.423)}function ai(){return ni(Ie).scale(111.48)}function oi(t,e){if(!(0<=(e=+e)&&e<=20))throw new Error("invalid digits");function r(t){var r=t.length,n=2,i=new Array(r);for(i[0]=+t[0].toFixed(e),i[1]=+t[1].toFixed(e);n<r;)i[n]=t[n],++n;return i}function n(t){return t.map(r)}function i(t){for(var e=r(t[0]),n=[e],i=1;i<t.length;i++){var a=r(t[i]);(a.length>2||a[0]!=e[0]||a[1]!=e[1])&&(n.push(a),e=a)}return 1===n.length&&t.length>1&&n.push(r(t[t.length-1])),n}function a(t){return t.map(i)}function o(t){if(null==t)return t;var e;switch(t.type){case"GeometryCollection":e={type:"GeometryCollection",geometries:t.geometries.map(o)};break;case"Point":e={type:"Point",coordinates:r(t.coordinates)};break;case"MultiPoint":e={type:t.type,coordinates:n(t.coordinates)};break;case"LineString":e={type:t.type,coordinates:i(t.coordinates)};break;case"MultiLineString":case"Polygon":e={type:t.type,coordinates:a(t.coordinates)};break;case"MultiPolygon":e={type:"MultiPolygon",coordinates:t.coordinates.map(a)};break;default:return t}return null!=t.bbox&&(e.bbox=t.bbox),e}function s(t){var e={type:"Feature",properties:t.properties,geometry:o(t.geometry)};return null!=t.id&&(e.id=t.id),null!=t.bbox&&(e.bbox=t.bbox),e}if(null!=t)switch(t.type){case"Feature":return s(t);case"FeatureCollection":var l={type:"FeatureCollection",features:t.features.map(s)};return null!=t.bbox&&(l.bbox=t.bbox),l;default:return o(t)}return t}function si(t){var e=g(t);function r(r,n){var i=e?y(r*e/2)/e:r/2;if(!n)return[2*i,-t];var o=2*a(i*g(n)),l=1/y(n);return[g(o)*l,n+(1-s(o))*l-t]}return r.invert=function(r,n){if(i(n+=t)<m)return[e?2*a(e*r/2)/e:r,0];var o,l=r*r+n*n,u=0,c=10;do{var f=y(u),h=1/s(u),p=l-2*n*u+u*u;u-=o=(f*p+2*(u-n))/(2+p*h*h+2*(u-n)*f)}while(i(o)>m&&--c>0);var d=r*(f=y(u)),v=y(i(n)<i(u+1/f)?.5*L(d):.5*C(d)+b/4)/g(u);return[e?2*a(e*v)/e:2*v,u]},r}function li(){return ft(si).scale(131.215)}var ui=[[.9986,-.062],[1,0],[.9986,.062],[.9954,.124],[.99,.186],[.9822,.248],[.973,.31],[.96,.372],[.9427,.434],[.9216,.4958],[.8962,.5571],[.8679,.6176],[.835,.6769],[.7986,.7346],[.7597,.7903],[.7186,.8435],[.6732,.8936],[.6213,.9394],[.5722,.9761],[.5322,1]];function ci(t,e){var r,n=h(18,36*i(e)/b),a=u(n),o=n-a,s=(r=ui[a])[0],l=r[1],c=(r=ui[++a])[0],f=r[1],p=(r=ui[h(19,++a)])[0],d=r[1];return[t*(c+o*(p-s)/2+o*o*(p-2*c+s)/2),(e>0?_:-_)*(f+o*(d-l)/2+o*o*(d-2*f+l)/2)]}function fi(){return(0,n.Z)(ci).scale(152.63)}function hi(t,e){var r=function(t){function e(e,r){var n=s(r),i=(t-1)/(t-n*s(e));return[i*n*g(e),i*g(r)]}return e.invert=function(e,r){var n=e*e+r*r,i=P(n),a=(t-P(1-n*(t+1)/(t-1)))/((t-1)/i+i/(t-1));return[o(e*a,i*P(1-a*a)),i?L(r*a/i):0]},e}(t);if(!e)return r;var n=s(e),i=g(e);function a(e,a){var o=r(e,a),s=o[1],l=s*i/(t-1)+n;return[o[0]*n/l,s/l]}return a.invert=function(e,a){var o=(t-1)/(t-1-a*i);return r.invert(o*e,o*a*n)},a}function pi(){var t=2,e=0,r=(0,n.r)(hi),i=r(t,e);return i.distance=function(n){return arguments.length?r(t=+n,e):t},i.tilt=function(n){return arguments.length?r(t,e=n*E):e*S},i.scale(432.147).clipAngle(C(1/t)*S-1e-6)}ui.forEach((function(t){t[1]*=1.0144})),ci.invert=function(t,e){var r=e/_,n=90*r,a=h(18,i(n/5)),o=f(0,u(a));do{var s=ui[o][1],l=ui[o+1][1],c=ui[h(19,o+2)][1],p=c-s,d=c-2*l+s,v=2*(i(r)-l)/p,g=d/p,y=v*(1-g*v*(1-2*g*v));if(y>=0||1===o){n=(e>=0?5:-5)*(y+a);var m,b=50;do{y=(a=h(18,i(n)/5))-(o=u(a)),s=ui[o][1],l=ui[o+1][1],c=ui[h(19,o+2)][1],n-=(m=(e>=0?_:-_)*(l+y*(c-s)/2+y*y*(c-2*l+s)/2)-e)*S}while(i(m)>x&&--b>0);break}}while(--o>=0);var w=ui[o][0],T=ui[o+1][0],k=ui[h(19,o+2)][0];return[t/(T+y*(k-w)/2+y*y*(k-2*T+w)/2),n*E]};var di=1e-4,vi=1e4,gi=-180,yi=gi+di,mi=180,xi=mi-di,bi=-90,_i=bi+di,wi=90,Ti=wi-di;function ki(t){return t.length>0}function Ai(t){return t===bi||t===wi?[0,t]:[gi,(e=t,Math.floor(e*vi)/vi)];var e}function Mi(t){var e=t[0],r=t[1],n=!1;return e<=yi?(e=gi,n=!0):e>=xi&&(e=mi,n=!0),r<=_i?(r=bi,n=!0):r>=Ti&&(r=wi,n=!0),n?[e,r]:t}function Si(t){return t.map(Mi)}function Ei(t,e,r){for(var n=0,i=t.length;n<i;++n){var a=t[n].slice();r.push({index:-1,polygon:e,ring:a});for(var o=0,s=a.length;o<s;++o){var l=a[o],u=l[0],c=l[1];if(u<=yi||u>=xi||c<=_i||c>=Ti){a[o]=Mi(l);for(var f=o+1;f<s;++f){var h=a[f],p=h[0],d=h[1];if(p>yi&&p<xi&&d>_i&&d<Ti)break}if(f===o+1)continue;if(o){var v={index:-1,polygon:e,ring:a.slice(0,o+1)};v.ring[v.ring.length-1]=Ai(c),r[r.length-1]=v}else r.pop();if(f>=s)break;r.push({index:-1,polygon:e,ring:a=a.slice(f-1)}),a[0]=Ai(a[0][1]),o=-1,s=a.length}}}}function Li(t){var e,r,n,i,a,o,s=t.length,l={},u={};for(e=0;e<s;++e)n=(r=t[e]).ring[0],a=r.ring[r.ring.length-1],n[0]!==a[0]||n[1]!==a[1]?(r.index=e,l[n]=u[a]=r):(r.polygon.push(r.ring),t[e]=null);for(e=0;e<s;++e)if(r=t[e]){if(n=r.ring[0],a=r.ring[r.ring.length-1],i=u[n],o=l[a],delete l[n],delete u[a],n[0]===a[0]&&n[1]===a[1]){r.polygon.push(r.ring);continue}i?(delete u[n],delete l[i.ring[0]],i.ring.pop(),t[i.index]=null,r={index:-1,polygon:i.polygon,ring:i.ring.concat(r.ring)},i===o?r.polygon.push(r.ring):(r.index=s++,t.push(l[r.ring[0]]=u[r.ring[r.ring.length-1]]=r))):o?(delete l[a],delete u[o.ring[o.ring.length-1]],r.ring.pop(),r={index:s++,polygon:o.polygon,ring:r.ring.concat(o.ring)},t[o.index]=null,t.push(l[r.ring[0]]=u[r.ring[r.ring.length-1]]=r)):(r.ring.push(r.ring[0]),r.polygon.push(r.ring))}}function Ci(t){var e={type:"Feature",geometry:Pi(t.geometry)};return null!=t.id&&(e.id=t.id),null!=t.bbox&&(e.bbox=t.bbox),null!=t.properties&&(e.properties=t.properties),e}function Pi(t){if(null==t)return t;var e,r,n,i;switch(t.type){case"GeometryCollection":e={type:"GeometryCollection",geometries:t.geometries.map(Pi)};break;case"Point":e={type:"Point",coordinates:Mi(t.coordinates)};break;case"MultiPoint":case"LineString":e={type:t.type,coordinates:Si(t.coordinates)};break;case"MultiLineString":e={type:"MultiLineString",coordinates:t.coordinates.map(Si)};break;case"Polygon":var a=[];Ei(t.coordinates,a,r=[]),Li(r),e={type:"Polygon",coordinates:a};break;case"MultiPolygon":r=[],n=-1,i=t.coordinates.length;for(var o=new Array(i);++n<i;)Ei(t.coordinates[n],o[n]=[],r);Li(r),e={type:"MultiPolygon",coordinates:o.filter(ki)};break;default:return t}return null!=t.bbox&&(e.bbox=t.bbox),e}function Oi(t){if(null==t)return t;switch(t.type){case"Feature":return Ci(t);case"FeatureCollection":var e={type:"FeatureCollection",features:t.features.map(Ci)};return null!=t.bbox&&(e.bbox=t.bbox),e;default:return Pi(t)}}function Ii(t,e){var r=y(e/2),n=g(w*r);return[t*(.74482-.34588*n*n),1.70711*r]}function Di(){return(0,n.Z)(Ii).scale(146.153)}function zi(t,e,r){var i=(0,En.Z)(e,r),a=i(.5),o=(0,_t.Z)([-a[0],-a[1]])(e),s=i.distance/2,l=-L(g(o[1]*E)/g(s)),u=[-a[0],-a[1],-(o[0]>0?b-l:l)*S],c=(0,n.Z)(t(s)).rotate(u),f=(0,_t.Z)(u),h=c.center;return delete c.rotate,c.center=function(t){return arguments.length?h(f(t)):f.invert(h())},c.clipAngle(90)}function Ri(t){var e=s(t);function r(t,r){var n=(0,Rn.M)(t,r);return n[0]*=e,n}return r.invert=function(t,r){return Rn.M.invert(t/e,r)},r}function Fi(){return Bi([-158,21.5],[-77,39]).clipAngle(60).scale(400)}function Bi(t,e){return zi(Ri,t,e)}function Ni(t){if(!(t*=2))return Z.N;var e=-t/2,r=-e,n=t*t,i=y(r),a=.5/g(r);function l(i,a){var o=C(s(a)*s(i-e)),l=C(s(a)*s(i-r));return[((o*=o)-(l*=l))/(2*t),(a<0?-1:1)*P(4*n*l-(n-o+l)*(n-o+l))/(2*t)]}return l.invert=function(t,n){var l,u,c=n*n,f=s(P(c+(l=t+e)*l)),h=s(P(c+(l=t+r)*l));return[o(u=f-h,l=(f+h)*i),(n<0?-1:1)*C(P(l*l+u*u)*a)]},l}function ji(){return Ui([-158,21.5],[-77,39]).clipAngle(130).scale(122.571)}function Ui(t,e){return zi(Ni,t,e)}function Vi(t,e){if(i(e)<m)return[t,0];var r=i(e/_),n=L(r);if(i(t)<m||i(i(e)-_)<m)return[0,v(e)*b*y(n/2)];var a=s(n),o=i(b/t-t/b)/2,l=o*o,u=a/(r+a-1),c=u*(2/r-1),f=c*c,h=f+l,p=u-f,d=l+u;return[v(t)*b*(o*p+P(l*p*p-h*(u*u-f)))/h,v(e)*b*(c*d-o*P((l+1)*h-d*d))/h]}function Hi(){return(0,n.Z)(Vi).scale(79.4183)}function qi(t,e){if(i(e)<m)return[t,0];var r=i(e/_),n=L(r);if(i(t)<m||i(i(e)-_)<m)return[0,v(e)*b*y(n/2)];var a=s(n),o=i(b/t-t/b)/2,l=o*o,u=a*(P(1+l)-o*a)/(1+l*r*r);return[v(t)*b*u,v(e)*b*P(1-u*(2*o+u))]}function Gi(){return(0,n.Z)(qi).scale(79.4183)}function Zi(t,e){if(i(e)<m)return[t,0];var r=e/_,n=L(r);if(i(t)<m||i(i(e)-_)<m)return[0,b*y(n/2)];var a=(b/t-t/b)/2,o=r/(1+s(n));return[b*(v(t)*P(a*a+1-o*o)-a),b*o]}function Yi(){return(0,n.Z)(Zi).scale(79.4183)}function Wi(t,e){if(!e)return[t,0];var r=i(e);if(!t||r===_)return[0,e];var n=r/_,a=n*n,o=(8*n-a*(a+2)-5)/(2*a*(n-1)),s=o*o,l=n*o,u=a+s+2*l,c=n+3*o,f=t/_,h=f+1/f,p=v(i(t)-_)*P(h*h-4),d=p*p,g=(p*(u+s-1)+2*P(u*(a+s*d-1)+(1-a)*(a*(c*c+4*s)+12*l*s+4*s*s)))/(4*u+d);return[v(t)*_*g,v(e)*_*P(1+p*i(g)-g*g)]}function Xi(){return(0,n.Z)(Wi).scale(127.16)}function Ji(t,e,r,n){var i=b/3;t=f(t,m),e=f(e,m),t=h(t,_),e=h(e,b-m),r=f(r,0),r=h(r,100-m);var a=(n=f(n,m))/100,l=C((r/100+1)*s(i))/i,u=g(t)/g(l*_),c=e/b,p=P(a*g(t/2)/g(e/2));return function(t,e,r,n,i){function a(a,o){var l=r*g(n*o),u=P(1-l*l),c=P(2/(1+u*s(a*=i)));return[t*u*c*g(a),e*l*c]}return a.invert=function(a,s){var l=a/t,u=s/e,c=P(l*l+u*u),f=2*L(c/2);return[o(a*y(f),t*c)/i,c&&L(s*g(f)/(e*r*c))/n]},a}(p/P(c*u*l),1/(p*P(c*u*l)),u,l,c)}function Ki(){var t=65*E,e=60*E,r=20,i=200,a=(0,n.r)(Ji),o=a(t,e,r,i);return o.poleline=function(n){return arguments.length?a(t=+n*E,e,r,i):t*S},o.parallels=function(n){return arguments.length?a(t,e=+n*E,r,i):e*S},o.inflation=function(n){return arguments.length?a(t,e,r=+n,i):r},o.ratio=function(n){return arguments.length?a(t,e,r,i=+n):i},o.scale(163.775)}function $i(){return Ki().poleline(65).parallels(60).inflation(0).ratio(200).scale(172.633)}Ii.invert=function(t,e){var r=e/1.70711,n=g(w*r);return[t/(.74482-.34588*n*n),2*a(r)]},Vi.invert=function(t,e){if(i(e)<m)return[t,0];if(i(t)<m)return[0,_*g(2*a(e/b))];var r=(t/=b)*t,n=(e/=b)*e,o=r+n,l=o*o,u=-i(e)*(1+o),c=u-2*n+r,f=-2*u+1+2*n+l,h=n/f+(2*c*c*c/(f*f*f)-9*u*c/(f*f))/27,p=(u-c*c/(3*f))/f,d=2*P(-p/3),y=C(3*h/(p*d))/3;return[b*(o-1+P(1+2*(r-n)+l))/(2*t),v(e)*b*(-d*s(y+b/3)-c/(3*f))]},qi.invert=function(t,e){if(!t)return[0,_*g(2*a(e/b))];var r=i(t/b),n=(1-r*r-(e/=b)*e)/(2*r),s=P(n*n+1);return[v(t)*b*(s-n),v(e)*_*g(2*o(P((1-2*n*r)*(n+s)-r),P(s+n+r)))]},Zi.invert=function(t,e){if(!e)return[t,0];var r=e/b,n=(b*b*(1-r*r)-t*t)/(2*b*t);return[t?b*(v(t)*P(n*n+1)-n):0,_*g(2*a(r))]},Wi.invert=function(t,e){var r;if(!t||!e)return[t,e];e/=b;var n=v(t)*t/_,a=(n*n-1+4*e*e)/i(n),o=a*a,s=2*e,l=50;do{var u=s*s,c=(8*s-u*(u+2)-5)/(2*u*(s-1)),f=(3*s-u*s-10)/(2*u*s),h=c*c,p=s*c,d=s+c,g=d*d,y=s+3*c,x=-2*d*(4*p*h+(1-4*u+3*u*u)*(1+f)+h*(14*u-6-o+(8*u-8-2*o)*f)+p*(12*u-8+(10*u-10-o)*f)),w=P(g*(u+h*o-1)+(1-u)*(u*(y*y+4*h)+h*(12*p+4*h)));s-=r=(a*(g+h-1)+2*w-n*(4*g+o))/(a*(2*c*f+2*d*(1+f))+x/w-8*d*(a*(-1+h+g)+2*w)*(1+f)/(o+4*g))}while(r>m&&--l>0);return[v(t)*(P(a*a+4)+a)*b/4,_*s]};var Qi=4*b+3*P(3),ta=2*P(2*b*P(3)/Qi),ea=it(ta*P(3)/b,ta,Qi/6);function ra(){return(0,n.Z)(ea).scale(176.84)}function na(t,e){return[t*P(1-3*e*e/(b*b)),e]}function ia(){return(0,n.Z)(na).scale(152.63)}function aa(t,e){var r=s(e),n=s(t)*r,i=1-n,a=s(t=o(g(t)*r,-g(e))),l=g(t);return[l*(r=P(1-n*n))-a*i,-a*r-l*i]}function oa(){return(0,n.Z)(aa).rotate([0,-90,45]).scale(124.75).clipAngle(179.999)}function sa(t,e){var r=R(t,e);return[(r[0]+t/_)/2,(r[1]+e)/2]}function la(){return(0,n.Z)(sa).scale(158.837)}na.invert=function(t,e){return[t/P(1-3*e*e/(b*b)),e]},aa.invert=function(t,e){var r=(t*t+e*e)/-2,n=P(-r*(2+r)),i=e*r+t*n,a=t*r-e*n,s=P(a*a+i*i);return[o(n*i,s*(1+r)),s?-L(n*a/s):0]},sa.invert=function(t,e){var r=t,n=e,a=25;do{var o,l=s(n),u=g(n),c=g(2*n),f=u*u,h=l*l,p=g(r),d=s(r/2),v=g(r/2),y=v*v,x=1-h*d*d,b=x?C(l*d)*P(o=1/x):o=0,w=.5*(2*b*l*v+r/_)-t,T=.5*(b*u+n)-e,k=.5*o*(h*y+b*l*d*f)+.5/_,A=o*(p*c/4-b*u*v),M=.125*o*(c*v-b*u*h*p),S=.5*o*(f*d+b*y*l)+.5,E=A*M-S*k,L=(T*A-w*S)/E,O=(w*M-T*k)/E;r-=L,n-=O}while((i(L)>m||i(O)>m)&&--a>0);return[r,n]}},33940:function(t,e,r){"use strict";function n(){return new i}function i(){this.reset()}r.d(e,{Z:function(){return n}}),i.prototype={constructor:i,reset:function(){this.s=this.t=0},add:function(t){o(a,t,this.t),o(this,a.s,this.s),this.s?this.t+=a.t:this.s=a.t},valueOf:function(){return this.s}};var a=new i;function o(t,e,r){var n=t.s=e+r,i=n-e,a=n-i;t.t=e-a+(r-i)}},97860:function(t,e,r){"use strict";r.d(e,{L9:function(){return h},ZP:function(){return x},gL:function(){return d}});var n,i,a,o,s,l=r(33940),u=r(39695),c=r(73182),f=r(72736),h=(0,l.Z)(),p=(0,l.Z)(),d={point:c.Z,lineStart:c.Z,lineEnd:c.Z,polygonStart:function(){h.reset(),d.lineStart=v,d.lineEnd=g},polygonEnd:function(){var t=+h;p.add(t<0?u.BZ+t:t),this.lineStart=this.lineEnd=this.point=c.Z},sphere:function(){p.add(u.BZ)}};function v(){d.point=y}function g(){m(n,i)}function y(t,e){d.point=m,n=t,i=e,t*=u.uR,e*=u.uR,a=t,o=(0,u.mC)(e=e/2+u.pu),s=(0,u.O$)(e)}function m(t,e){t*=u.uR,e=(e*=u.uR)/2+u.pu;var r=t-a,n=r>=0?1:-1,i=n*r,l=(0,u.mC)(e),c=(0,u.O$)(e),f=s*c,p=o*l+f*(0,u.mC)(i),d=f*n*(0,u.O$)(i);h.add((0,u.fv)(d,p)),a=t,o=l,s=c}function x(t){return p.reset(),(0,f.Z)(t,d),2*p}},77338:function(t,e,r){"use strict";r.d(e,{Z:function(){return C}});var n,i,a,o,s,l,u,c,f,h,p=r(33940),d=r(97860),v=r(7620),g=r(39695),y=r(72736),m=(0,p.Z)(),x={point:b,lineStart:w,lineEnd:T,polygonStart:function(){x.point=k,x.lineStart=A,x.lineEnd=M,m.reset(),d.gL.polygonStart()},polygonEnd:function(){d.gL.polygonEnd(),x.point=b,x.lineStart=w,x.lineEnd=T,d.L9<0?(n=-(a=180),i=-(o=90)):m>g.Ho?o=90:m<-g.Ho&&(i=-90),h[0]=n,h[1]=a},sphere:function(){n=-(a=180),i=-(o=90)}};function b(t,e){f.push(h=[n=t,a=t]),e<i&&(i=e),e>o&&(o=e)}function _(t,e){var r=(0,v.Og)([t*g.uR,e*g.uR]);if(c){var l=(0,v.T5)(c,r),u=[l[1],-l[0],0],p=(0,v.T5)(u,l);(0,v.iJ)(p),p=(0,v.Y1)(p);var d,y=t-s,m=y>0?1:-1,x=p[0]*g.RW*m,b=(0,g.Wn)(y)>180;b^(m*s<x&&x<m*t)?(d=p[1]*g.RW)>o&&(o=d):b^(m*s<(x=(x+360)%360-180)&&x<m*t)?(d=-p[1]*g.RW)<i&&(i=d):(e<i&&(i=e),e>o&&(o=e)),b?t<s?S(n,t)>S(n,a)&&(a=t):S(t,a)>S(n,a)&&(n=t):a>=n?(t<n&&(n=t),t>a&&(a=t)):t>s?S(n,t)>S(n,a)&&(a=t):S(t,a)>S(n,a)&&(n=t)}else f.push(h=[n=t,a=t]);e<i&&(i=e),e>o&&(o=e),c=r,s=t}function w(){x.point=_}function T(){h[0]=n,h[1]=a,x.point=b,c=null}function k(t,e){if(c){var r=t-s;m.add((0,g.Wn)(r)>180?r+(r>0?360:-360):r)}else l=t,u=e;d.gL.point(t,e),_(t,e)}function A(){d.gL.lineStart()}function M(){k(l,u),d.gL.lineEnd(),(0,g.Wn)(m)>g.Ho&&(n=-(a=180)),h[0]=n,h[1]=a,c=null}function S(t,e){return(e-=t)<0?e+360:e}function E(t,e){return t[0]-e[0]}function L(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:e<t[0]||t[1]<e}function C(t){var e,r,s,l,u,c,p;if(o=a=-(n=i=1/0),f=[],(0,y.Z)(t,x),r=f.length){for(f.sort(E),e=1,u=[s=f[0]];e<r;++e)L(s,(l=f[e])[0])||L(s,l[1])?(S(s[0],l[1])>S(s[0],s[1])&&(s[1]=l[1]),S(l[0],s[1])>S(s[0],s[1])&&(s[0]=l[0])):u.push(s=l);for(c=-1/0,e=0,s=u[r=u.length-1];e<=r;s=l,++e)l=u[e],(p=S(s[1],l[0]))>c&&(c=p,n=l[0],a=s[1])}return f=h=null,n===1/0||i===1/0?[[NaN,NaN],[NaN,NaN]]:[[n,i],[a,o]]}},7620:function(t,e,r){"use strict";r.d(e,{Og:function(){return a},T:function(){return u},T5:function(){return s},Y1:function(){return i},iJ:function(){return c},j9:function(){return o},s0:function(){return l}});var n=r(39695);function i(t){return[(0,n.fv)(t[1],t[0]),(0,n.ZR)(t[2])]}function a(t){var e=t[0],r=t[1],i=(0,n.mC)(r);return[i*(0,n.mC)(e),i*(0,n.O$)(e),(0,n.O$)(r)]}function o(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function s(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function l(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function u(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function c(t){var e=(0,n._b)(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}},66624:function(t,e,r){"use strict";r.d(e,{Z:function(){return I}});var n,i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x=r(39695),b=r(73182),_=r(72736),w={sphere:b.Z,point:T,lineStart:A,lineEnd:E,polygonStart:function(){w.lineStart=L,w.lineEnd=C},polygonEnd:function(){w.lineStart=A,w.lineEnd=E}};function T(t,e){t*=x.uR,e*=x.uR;var r=(0,x.mC)(e);k(r*(0,x.mC)(t),r*(0,x.O$)(t),(0,x.O$)(e))}function k(t,e,r){++n,a+=(t-a)/n,o+=(e-o)/n,s+=(r-s)/n}function A(){w.point=M}function M(t,e){t*=x.uR,e*=x.uR;var r=(0,x.mC)(e);g=r*(0,x.mC)(t),y=r*(0,x.O$)(t),m=(0,x.O$)(e),w.point=S,k(g,y,m)}function S(t,e){t*=x.uR,e*=x.uR;var r=(0,x.mC)(e),n=r*(0,x.mC)(t),a=r*(0,x.O$)(t),o=(0,x.O$)(e),s=(0,x.fv)((0,x._b)((s=y*o-m*a)*s+(s=m*n-g*o)*s+(s=g*a-y*n)*s),g*n+y*a+m*o);i+=s,l+=s*(g+(g=n)),u+=s*(y+(y=a)),c+=s*(m+(m=o)),k(g,y,m)}function E(){w.point=T}function L(){w.point=P}function C(){O(d,v),w.point=T}function P(t,e){d=t,v=e,t*=x.uR,e*=x.uR,w.point=O;var r=(0,x.mC)(e);g=r*(0,x.mC)(t),y=r*(0,x.O$)(t),m=(0,x.O$)(e),k(g,y,m)}function O(t,e){t*=x.uR,e*=x.uR;var r=(0,x.mC)(e),n=r*(0,x.mC)(t),a=r*(0,x.O$)(t),o=(0,x.O$)(e),s=y*o-m*a,d=m*n-g*o,v=g*a-y*n,b=(0,x._b)(s*s+d*d+v*v),_=(0,x.ZR)(b),w=b&&-_/b;f+=w*s,h+=w*d,p+=w*v,i+=_,l+=_*(g+(g=n)),u+=_*(y+(y=a)),c+=_*(m+(m=o)),k(g,y,m)}function I(t){n=i=a=o=s=l=u=c=f=h=p=0,(0,_.Z)(t,w);var e=f,r=h,d=p,v=e*e+r*r+d*d;return v<x.aW&&(e=l,r=u,d=c,i<x.Ho&&(e=a,r=o,d=s),(v=e*e+r*r+d*d)<x.aW)?[NaN,NaN]:[(0,x.fv)(r,e)*x.RW,(0,x.ZR)(d/(0,x._b)(v))*x.RW]}},7613:function(t,e,r){"use strict";r.d(e,{m:function(){return s},Z:function(){return u}});var n=r(7620);function i(t){return function(){return t}}var a=r(39695),o=r(49386);function s(t,e,r,i,o,s){if(r){var u=(0,a.mC)(e),c=(0,a.O$)(e),f=i*r;null==o?(o=e+i*a.BZ,s=e-f/2):(o=l(u,o),s=l(u,s),(i>0?o<s:o>s)&&(o+=i*a.BZ));for(var h,p=o;i>0?p>s:p<s;p-=f)h=(0,n.Y1)([u,-c*(0,a.mC)(p),-c*(0,a.O$)(p)]),t.point(h[0],h[1])}}function l(t,e){(e=(0,n.Og)(e))[0]-=t,(0,n.iJ)(e);var r=(0,a.Kh)(-e[1]);return((-e[2]<0?-r:r)+a.BZ-a.Ho)%a.BZ}function u(){var t,e,r=i([0,0]),n=i(90),l=i(6),u={point:function(r,n){t.push(r=e(r,n)),r[0]*=a.RW,r[1]*=a.RW}};function c(){var i=r.apply(this,arguments),c=n.apply(this,arguments)*a.uR,f=l.apply(this,arguments)*a.uR;return t=[],e=(0,o.I)(-i[0]*a.uR,-i[1]*a.uR,0).invert,s(u,c,f,1),i={type:"Polygon",coordinates:[t]},t=e=null,i}return c.center=function(t){return arguments.length?(r="function"==typeof t?t:i([+t[0],+t[1]]),c):r},c.radius=function(t){return arguments.length?(n="function"==typeof t?t:i(+t),c):n},c.precision=function(t){return arguments.length?(l="function"==typeof t?t:i(+t),c):l},c}},87070:function(t,e,r){"use strict";var n=r(97023),i=r(39695);e.Z=(0,n.Z)((function(){return!0}),(function(t){var e,r=NaN,n=NaN,a=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(o,s){var l=o>0?i.pi:-i.pi,u=(0,i.Wn)(o-r);(0,i.Wn)(u-i.pi)<i.Ho?(t.point(r,n=(n+s)/2>0?i.ou:-i.ou),t.point(a,n),t.lineEnd(),t.lineStart(),t.point(l,n),t.point(o,n),e=0):a!==l&&u>=i.pi&&((0,i.Wn)(r-a)<i.Ho&&(r-=a*i.Ho),(0,i.Wn)(o-l)<i.Ho&&(o-=l*i.Ho),n=function(t,e,r,n){var a,o,s=(0,i.O$)(t-r);return(0,i.Wn)(s)>i.Ho?(0,i.z4)(((0,i.O$)(e)*(o=(0,i.mC)(n))*(0,i.O$)(r)-(0,i.O$)(n)*(a=(0,i.mC)(e))*(0,i.O$)(t))/(a*o*s)):(e+n)/2}(r,n,o,s),t.point(a,n),t.lineEnd(),t.lineStart(),t.point(l,n),e=0),t.point(r=o,n=s),a=l},lineEnd:function(){t.lineEnd(),r=n=NaN},clean:function(){return 2-e}}}),(function(t,e,r,n){var a;if(null==t)a=r*i.ou,n.point(-i.pi,a),n.point(0,a),n.point(i.pi,a),n.point(i.pi,0),n.point(i.pi,-a),n.point(0,-a),n.point(-i.pi,-a),n.point(-i.pi,0),n.point(-i.pi,a);else if((0,i.Wn)(t[0]-e[0])>i.Ho){var o=t[0]<e[0]?i.pi:-i.pi;a=r*o/2,n.point(-o,a),n.point(0,a),n.point(o,a)}else n.point(e[0],e[1])}),[-i.pi,-i.ou])},85272:function(t,e,r){"use strict";r.d(e,{Z:function(){return i}});var n=r(73182);function i(){var t,e=[];return{point:function(e,r,n){t.push([e,r,n])},lineStart:function(){e.push(t=[])},lineEnd:n.Z,rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))},result:function(){var r=e;return e=[],t=null,r}}}},1457:function(t,e,r){"use strict";r.d(e,{Z:function(){return l}});var n=r(7620),i=r(7613),a=r(39695),o=r(67108),s=r(97023);function l(t){var e=(0,a.mC)(t),r=6*a.uR,l=e>0,u=(0,a.Wn)(e)>a.Ho;function c(t,r){return(0,a.mC)(t)*(0,a.mC)(r)>e}function f(t,r,i){var o=(0,n.Og)(t),s=(0,n.Og)(r),l=[1,0,0],u=(0,n.T5)(o,s),c=(0,n.j9)(u,u),f=u[0],h=c-f*f;if(!h)return!i&&t;var p=e*c/h,d=-e*f/h,v=(0,n.T5)(l,u),g=(0,n.T)(l,p),y=(0,n.T)(u,d);(0,n.s0)(g,y);var m=v,x=(0,n.j9)(g,m),b=(0,n.j9)(m,m),_=x*x-b*((0,n.j9)(g,g)-1);if(!(_<0)){var w=(0,a._b)(_),T=(0,n.T)(m,(-x-w)/b);if((0,n.s0)(T,g),T=(0,n.Y1)(T),!i)return T;var k,A=t[0],M=r[0],S=t[1],E=r[1];M<A&&(k=A,A=M,M=k);var L=M-A,C=(0,a.Wn)(L-a.pi)<a.Ho;if(!C&&E<S&&(k=S,S=E,E=k),C||L<a.Ho?C?S+E>0^T[1]<((0,a.Wn)(T[0]-A)<a.Ho?S:E):S<=T[1]&&T[1]<=E:L>a.pi^(A<=T[0]&&T[0]<=M)){var P=(0,n.T)(m,(-x+w)/b);return(0,n.s0)(P,g),[T,(0,n.Y1)(P)]}}}function h(e,r){var n=l?t:a.pi-t,i=0;return e<-n?i|=1:e>n&&(i|=2),r<-n?i|=4:r>n&&(i|=8),i}return(0,s.Z)(c,(function(t){var e,r,n,i,s;return{lineStart:function(){i=n=!1,s=1},point:function(p,d){var v,g=[p,d],y=c(p,d),m=l?y?0:h(p,d):y?h(p+(p<0?a.pi:-a.pi),d):0;if(!e&&(i=n=y)&&t.lineStart(),y!==n&&(!(v=f(e,g))||(0,o.Z)(e,v)||(0,o.Z)(g,v))&&(g[2]=1),y!==n)s=0,y?(t.lineStart(),v=f(g,e),t.point(v[0],v[1])):(v=f(e,g),t.point(v[0],v[1],2),t.lineEnd()),e=v;else if(u&&e&&l^y){var x;m&r||!(x=f(g,e,!0))||(s=0,l?(t.lineStart(),t.point(x[0][0],x[0][1]),t.point(x[1][0],x[1][1]),t.lineEnd()):(t.point(x[1][0],x[1][1]),t.lineEnd(),t.lineStart(),t.point(x[0][0],x[0][1],3)))}!y||e&&(0,o.Z)(e,g)||t.point(g[0],g[1]),e=g,n=y,r=m},lineEnd:function(){n&&t.lineEnd(),e=null},clean:function(){return s|(i&&n)<<1}}}),(function(e,n,a,o){(0,i.m)(o,t,r,a,e,n)}),l?[0,-t]:[-a.pi,t-a.pi])}},97023:function(t,e,r){"use strict";r.d(e,{Z:function(){return l}});var n=r(85272),i=r(46225),a=r(39695),o=r(23071),s=r(33064);function l(t,e,r,a){return function(l){var f,h,p,d=e(l),v=(0,n.Z)(),g=e(v),y=!1,m={point:x,lineStart:_,lineEnd:w,polygonStart:function(){m.point=T,m.lineStart=k,m.lineEnd=A,h=[],f=[]},polygonEnd:function(){m.point=x,m.lineStart=_,m.lineEnd=w,h=(0,s.TS)(h);var t=(0,o.Z)(f,a);h.length?(y||(l.polygonStart(),y=!0),(0,i.Z)(h,c,t,r,l)):t&&(y||(l.polygonStart(),y=!0),l.lineStart(),r(null,null,1,l),l.lineEnd()),y&&(l.polygonEnd(),y=!1),h=f=null},sphere:function(){l.polygonStart(),l.lineStart(),r(null,null,1,l),l.lineEnd(),l.polygonEnd()}};function x(e,r){t(e,r)&&l.point(e,r)}function b(t,e){d.point(t,e)}function _(){m.point=b,d.lineStart()}function w(){m.point=x,d.lineEnd()}function T(t,e){p.push([t,e]),g.point(t,e)}function k(){g.lineStart(),p=[]}function A(){T(p[0][0],p[0][1]),g.lineEnd();var t,e,r,n,i=g.clean(),a=v.result(),o=a.length;if(p.pop(),f.push(p),p=null,o)if(1&i){if((e=(r=a[0]).length-1)>0){for(y||(l.polygonStart(),y=!0),l.lineStart(),t=0;t<e;++t)l.point((n=r[t])[0],n[1]);l.lineEnd()}}else o>1&&2&i&&a.push(a.pop().concat(a.shift())),h.push(a.filter(u))}return m}}function u(t){return t.length>1}function c(t,e){return((t=t.x)[0]<0?t[1]-a.ou-a.Ho:a.ou-t[1])-((e=e.x)[0]<0?e[1]-a.ou-a.Ho:a.ou-e[1])}},87605:function(t,e,r){"use strict";r.d(e,{Z:function(){return u}});var n=r(39695),i=r(85272),a=r(46225),o=r(33064),s=1e9,l=-s;function u(t,e,r,u){function c(n,i){return t<=n&&n<=r&&e<=i&&i<=u}function f(n,i,a,o){var s=0,l=0;if(null==n||(s=h(n,a))!==(l=h(i,a))||d(n,i)<0^a>0)do{o.point(0===s||3===s?t:r,s>1?u:e)}while((s=(s+a+4)%4)!==l);else o.point(i[0],i[1])}function h(i,a){return(0,n.Wn)(i[0]-t)<n.Ho?a>0?0:3:(0,n.Wn)(i[0]-r)<n.Ho?a>0?2:1:(0,n.Wn)(i[1]-e)<n.Ho?a>0?1:0:a>0?3:2}function p(t,e){return d(t.x,e.x)}function d(t,e){var r=h(t,1),n=h(e,1);return r!==n?r-n:0===r?e[1]-t[1]:1===r?t[0]-e[0]:2===r?t[1]-e[1]:e[0]-t[0]}return function(n){var h,d,v,g,y,m,x,b,_,w,T,k=n,A=(0,i.Z)(),M={point:S,lineStart:function(){M.point=E,d&&d.push(v=[]),w=!0,_=!1,x=b=NaN},lineEnd:function(){h&&(E(g,y),m&&_&&A.rejoin(),h.push(A.result())),M.point=S,_&&k.lineEnd()},polygonStart:function(){k=A,h=[],d=[],T=!0},polygonEnd:function(){var e=function(){for(var e=0,r=0,n=d.length;r<n;++r)for(var i,a,o=d[r],s=1,l=o.length,c=o[0],f=c[0],h=c[1];s<l;++s)i=f,a=h,f=(c=o[s])[0],h=c[1],a<=u?h>u&&(f-i)*(u-a)>(h-a)*(t-i)&&++e:h<=u&&(f-i)*(u-a)<(h-a)*(t-i)&&--e;return e}(),r=T&&e,i=(h=(0,o.TS)(h)).length;(r||i)&&(n.polygonStart(),r&&(n.lineStart(),f(null,null,1,n),n.lineEnd()),i&&(0,a.Z)(h,p,e,f,n),n.polygonEnd()),k=n,h=d=v=null}};function S(t,e){c(t,e)&&k.point(t,e)}function E(n,i){var a=c(n,i);if(d&&v.push([n,i]),w)g=n,y=i,m=a,w=!1,a&&(k.lineStart(),k.point(n,i));else if(a&&_)k.point(n,i);else{var o=[x=Math.max(l,Math.min(s,x)),b=Math.max(l,Math.min(s,b))],f=[n=Math.max(l,Math.min(s,n)),i=Math.max(l,Math.min(s,i))];!function(t,e,r,n,i,a){var o,s=t[0],l=t[1],u=0,c=1,f=e[0]-s,h=e[1]-l;if(o=r-s,f||!(o>0)){if(o/=f,f<0){if(o<u)return;o<c&&(c=o)}else if(f>0){if(o>c)return;o>u&&(u=o)}if(o=i-s,f||!(o<0)){if(o/=f,f<0){if(o>c)return;o>u&&(u=o)}else if(f>0){if(o<u)return;o<c&&(c=o)}if(o=n-l,h||!(o>0)){if(o/=h,h<0){if(o<u)return;o<c&&(c=o)}else if(h>0){if(o>c)return;o>u&&(u=o)}if(o=a-l,h||!(o<0)){if(o/=h,h<0){if(o>c)return;o>u&&(u=o)}else if(h>0){if(o<u)return;o<c&&(c=o)}return u>0&&(t[0]=s+u*f,t[1]=l+u*h),c<1&&(e[0]=s+c*f,e[1]=l+c*h),!0}}}}}(o,f,t,e,r,u)?a&&(k.lineStart(),k.point(n,i),T=!1):(_||(k.lineStart(),k.point(o[0],o[1])),k.point(f[0],f[1]),a||k.lineEnd(),T=!1)}x=n,b=i,_=a}return M}}},46225:function(t,e,r){"use strict";r.d(e,{Z:function(){return o}});var n=r(67108),i=r(39695);function a(t,e,r,n){this.x=t,this.z=e,this.o=r,this.e=n,this.v=!1,this.n=this.p=null}function o(t,e,r,o,l){var u,c,f=[],h=[];if(t.forEach((function(t){if(!((e=t.length-1)<=0)){var e,r,o=t[0],s=t[e];if((0,n.Z)(o,s)){if(!o[2]&&!s[2]){for(l.lineStart(),u=0;u<e;++u)l.point((o=t[u])[0],o[1]);return void l.lineEnd()}s[0]+=2*i.Ho}f.push(r=new a(o,t,null,!0)),h.push(r.o=new a(o,null,r,!1)),f.push(r=new a(s,t,null,!1)),h.push(r.o=new a(s,null,r,!0))}})),f.length){for(h.sort(e),s(f),s(h),u=0,c=h.length;u<c;++u)h[u].e=r=!r;for(var p,d,v=f[0];;){for(var g=v,y=!0;g.v;)if((g=g.n)===v)return;p=g.z,l.lineStart();do{if(g.v=g.o.v=!0,g.e){if(y)for(u=0,c=p.length;u<c;++u)l.point((d=p[u])[0],d[1]);else o(g.x,g.n.x,1,l);g=g.n}else{if(y)for(p=g.p.z,u=p.length-1;u>=0;--u)l.point((d=p[u])[0],d[1]);else o(g.x,g.p.x,-1,l);g=g.p}p=(g=g.o).z,y=!y}while(!g.v);l.lineEnd()}}}function s(t){if(e=t.length){for(var e,r,n=0,i=t[0];++n<e;)i.n=r=t[n],r.p=i,i=r;i.n=r=t[0],r.p=i}}},96059:function(t,e,r){"use strict";function n(t,e){function r(r,n){return r=t(r,n),e(r[0],r[1])}return t.invert&&e.invert&&(r.invert=function(r,n){return(r=e.invert(r,n))&&t.invert(r[0],r[1])}),r}r.d(e,{Z:function(){return n}})},8593:function(t,e,r){"use strict";function n(t){return t}r.d(e,{Z:function(){return n}})},27362:function(t,e,r){"use strict";r.r(e),r.d(e,{geoAlbers:function(){return Gt},geoAlbersUsa:function(){return Yt},geoArea:function(){return n.ZP},geoAzimuthalEqualArea:function(){return Wt.Z},geoAzimuthalEqualAreaRaw:function(){return Wt.l},geoAzimuthalEquidistant:function(){return Xt.Z},geoAzimuthalEquidistantRaw:function(){return Xt.N},geoBounds:function(){return i.Z},geoCentroid:function(){return a.Z},geoCircle:function(){return o.Z},geoClipAntimeridian:function(){return s.Z},geoClipCircle:function(){return l.Z},geoClipExtent:function(){return c},geoClipRectangle:function(){return u.Z},geoConicConformal:function(){return re},geoConicConformalRaw:function(){return ee},geoConicEqualArea:function(){return qt},geoConicEqualAreaRaw:function(){return Ht},geoConicEquidistant:function(){return ae},geoConicEquidistantRaw:function(){return ie},geoContains:function(){return R},geoDistance:function(){return S},geoEqualEarth:function(){return he},geoEqualEarthRaw:function(){return fe},geoEquirectangular:function(){return ne.Z},geoEquirectangularRaw:function(){return ne.k},geoGnomonic:function(){return pe.Z},geoGnomonicRaw:function(){return pe.M},geoGraticule:function(){return j},geoGraticule10:function(){return U},geoIdentity:function(){return ve},geoInterpolate:function(){return Z.Z},geoLength:function(){return k},geoMercator:function(){return $t},geoMercatorRaw:function(){return Kt},geoNaturalEarth1:function(){return ge.Z},geoNaturalEarth1Raw:function(){return ge.K},geoOrthographic:function(){return ye.Z},geoOrthographicRaw:function(){return ye.I},geoPath:function(){return jt},geoProjection:function(){return Ut.Z},geoProjectionMutator:function(){return Ut.r},geoRotation:function(){return Jt.Z},geoStereographic:function(){return be},geoStereographicRaw:function(){return xe},geoStream:function(){return m.Z},geoTransform:function(){return de.Z},geoTransverseMercator:function(){return we},geoTransverseMercatorRaw:function(){return _e}});var n=r(97860),i=r(77338),a=r(66624),o=r(7613),s=r(87070),l=r(1457),u=r(87605);function c(){var t,e,r,n=0,i=0,a=960,o=500;return r={stream:function(r){return t&&e===r?t:t=(0,u.Z)(n,i,a,o)(e=r)},extent:function(s){return arguments.length?(n=+s[0][0],i=+s[0][1],a=+s[1][0],o=+s[1][1],t=e=null,r):[[n,i],[a,o]]}}}var f,h,p,d=r(23071),v=r(33940),g=r(39695),y=r(73182),m=r(72736),x=(0,v.Z)(),b={sphere:y.Z,point:y.Z,lineStart:function(){b.point=w,b.lineEnd=_},lineEnd:y.Z,polygonStart:y.Z,polygonEnd:y.Z};function _(){b.point=b.lineEnd=y.Z}function w(t,e){t*=g.uR,e*=g.uR,f=t,h=(0,g.O$)(e),p=(0,g.mC)(e),b.point=T}function T(t,e){t*=g.uR,e*=g.uR;var r=(0,g.O$)(e),n=(0,g.mC)(e),i=(0,g.Wn)(t-f),a=(0,g.mC)(i),o=n*(0,g.O$)(i),s=p*r-h*n*a,l=h*r+p*n*a;x.add((0,g.fv)((0,g._b)(o*o+s*s),l)),f=t,h=r,p=n}function k(t){return x.reset(),(0,m.Z)(t,b),+x}var A=[null,null],M={type:"LineString",coordinates:A};function S(t,e){return A[0]=t,A[1]=e,k(M)}var E={Feature:function(t,e){return C(t.geometry,e)},FeatureCollection:function(t,e){for(var r=t.features,n=-1,i=r.length;++n<i;)if(C(r[n].geometry,e))return!0;return!1}},L={Sphere:function(){return!0},Point:function(t,e){return P(t.coordinates,e)},MultiPoint:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)if(P(r[n],e))return!0;return!1},LineString:function(t,e){return O(t.coordinates,e)},MultiLineString:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)if(O(r[n],e))return!0;return!1},Polygon:function(t,e){return I(t.coordinates,e)},MultiPolygon:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)if(I(r[n],e))return!0;return!1},GeometryCollection:function(t,e){for(var r=t.geometries,n=-1,i=r.length;++n<i;)if(C(r[n],e))return!0;return!1}};function C(t,e){return!(!t||!L.hasOwnProperty(t.type))&&L[t.type](t,e)}function P(t,e){return 0===S(t,e)}function O(t,e){for(var r,n,i,a=0,o=t.length;a<o;a++){if(0===(n=S(t[a],e)))return!0;if(a>0&&(i=S(t[a],t[a-1]))>0&&r<=i&&n<=i&&(r+n-i)*(1-Math.pow((r-n)/i,2))<g.aW*i)return!0;r=n}return!1}function I(t,e){return!!(0,d.Z)(t.map(D),z(e))}function D(t){return(t=t.map(z)).pop(),t}function z(t){return[t[0]*g.uR,t[1]*g.uR]}function R(t,e){return(t&&E.hasOwnProperty(t.type)?E[t.type]:C)(t,e)}var F=r(33064);function B(t,e,r){var n=(0,F.w6)(t,e-g.Ho,r).concat(e);return function(t){return n.map((function(e){return[t,e]}))}}function N(t,e,r){var n=(0,F.w6)(t,e-g.Ho,r).concat(e);return function(t){return n.map((function(e){return[e,t]}))}}function j(){var t,e,r,n,i,a,o,s,l,u,c,f,h=10,p=h,d=90,v=360,y=2.5;function m(){return{type:"MultiLineString",coordinates:x()}}function x(){return(0,F.w6)((0,g.mD)(n/d)*d,r,d).map(c).concat((0,F.w6)((0,g.mD)(s/v)*v,o,v).map(f)).concat((0,F.w6)((0,g.mD)(e/h)*h,t,h).filter((function(t){return(0,g.Wn)(t%d)>g.Ho})).map(l)).concat((0,F.w6)((0,g.mD)(a/p)*p,i,p).filter((function(t){return(0,g.Wn)(t%v)>g.Ho})).map(u))}return m.lines=function(){return x().map((function(t){return{type:"LineString",coordinates:t}}))},m.outline=function(){return{type:"Polygon",coordinates:[c(n).concat(f(o).slice(1),c(r).reverse().slice(1),f(s).reverse().slice(1))]}},m.extent=function(t){return arguments.length?m.extentMajor(t).extentMinor(t):m.extentMinor()},m.extentMajor=function(t){return arguments.length?(n=+t[0][0],r=+t[1][0],s=+t[0][1],o=+t[1][1],n>r&&(t=n,n=r,r=t),s>o&&(t=s,s=o,o=t),m.precision(y)):[[n,s],[r,o]]},m.extentMinor=function(r){return arguments.length?(e=+r[0][0],t=+r[1][0],a=+r[0][1],i=+r[1][1],e>t&&(r=e,e=t,t=r),a>i&&(r=a,a=i,i=r),m.precision(y)):[[e,a],[t,i]]},m.step=function(t){return arguments.length?m.stepMajor(t).stepMinor(t):m.stepMinor()},m.stepMajor=function(t){return arguments.length?(d=+t[0],v=+t[1],m):[d,v]},m.stepMinor=function(t){return arguments.length?(h=+t[0],p=+t[1],m):[h,p]},m.precision=function(h){return arguments.length?(y=+h,l=B(a,i,90),u=N(e,t,y),c=B(s,o,90),f=N(n,r,y),m):y},m.extentMajor([[-180,-90+g.Ho],[180,90-g.Ho]]).extentMinor([[-180,-80-g.Ho],[180,80+g.Ho]])}function U(){return j()()}var V,H,q,G,Z=r(83074),Y=r(8593),W=(0,v.Z)(),X=(0,v.Z)(),J={point:y.Z,lineStart:y.Z,lineEnd:y.Z,polygonStart:function(){J.lineStart=K,J.lineEnd=tt},polygonEnd:function(){J.lineStart=J.lineEnd=J.point=y.Z,W.add((0,g.Wn)(X)),X.reset()},result:function(){var t=W/2;return W.reset(),t}};function K(){J.point=$}function $(t,e){J.point=Q,V=q=t,H=G=e}function Q(t,e){X.add(G*t-q*e),q=t,G=e}function tt(){Q(V,H)}var et,rt,nt,it,at=J,ot=r(3559),st=0,lt=0,ut=0,ct=0,ft=0,ht=0,pt=0,dt=0,vt=0,gt={point:yt,lineStart:mt,lineEnd:_t,polygonStart:function(){gt.lineStart=wt,gt.lineEnd=Tt},polygonEnd:function(){gt.point=yt,gt.lineStart=mt,gt.lineEnd=_t},result:function(){var t=vt?[pt/vt,dt/vt]:ht?[ct/ht,ft/ht]:ut?[st/ut,lt/ut]:[NaN,NaN];return st=lt=ut=ct=ft=ht=pt=dt=vt=0,t}};function yt(t,e){st+=t,lt+=e,++ut}function mt(){gt.point=xt}function xt(t,e){gt.point=bt,yt(nt=t,it=e)}function bt(t,e){var r=t-nt,n=e-it,i=(0,g._b)(r*r+n*n);ct+=i*(nt+t)/2,ft+=i*(it+e)/2,ht+=i,yt(nt=t,it=e)}function _t(){gt.point=yt}function wt(){gt.point=kt}function Tt(){At(et,rt)}function kt(t,e){gt.point=At,yt(et=nt=t,rt=it=e)}function At(t,e){var r=t-nt,n=e-it,i=(0,g._b)(r*r+n*n);ct+=i*(nt+t)/2,ft+=i*(it+e)/2,ht+=i,pt+=(i=it*t-nt*e)*(nt+t),dt+=i*(it+e),vt+=3*i,yt(nt=t,it=e)}var Mt=gt;function St(t){this._context=t}St.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,g.BZ)}},result:y.Z};var Et,Lt,Ct,Pt,Ot,It=(0,v.Z)(),Dt={point:y.Z,lineStart:function(){Dt.point=zt},lineEnd:function(){Et&&Rt(Lt,Ct),Dt.point=y.Z},polygonStart:function(){Et=!0},polygonEnd:function(){Et=null},result:function(){var t=+It;return It.reset(),t}};function zt(t,e){Dt.point=Rt,Lt=Pt=t,Ct=Ot=e}function Rt(t,e){Pt-=t,Ot-=e,It.add((0,g._b)(Pt*Pt+Ot*Ot)),Pt=t,Ot=e}var Ft=Dt;function Bt(){this._string=[]}function Nt(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function jt(t,e){var r,n,i=4.5;function a(t){return t&&("function"==typeof i&&n.pointRadius(+i.apply(this,arguments)),(0,m.Z)(t,r(n))),n.result()}return a.area=function(t){return(0,m.Z)(t,r(at)),at.result()},a.measure=function(t){return(0,m.Z)(t,r(Ft)),Ft.result()},a.bounds=function(t){return(0,m.Z)(t,r(ot.Z)),ot.Z.result()},a.centroid=function(t){return(0,m.Z)(t,r(Mt)),Mt.result()},a.projection=function(e){return arguments.length?(r=null==e?(t=null,Y.Z):(t=e).stream,a):t},a.context=function(t){return arguments.length?(n=null==t?(e=null,new Bt):new St(e=t),"function"!=typeof i&&n.pointRadius(i),a):e},a.pointRadius=function(t){return arguments.length?(i="function"==typeof t?t:(n.pointRadius(+t),+t),a):i},a.projection(t).context(e)}Bt.prototype={_radius:4.5,_circle:Nt(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._string.push("M",t,",",e),this._point=1;break;case 1:this._string.push("L",t,",",e);break;default:null==this._circle&&(this._circle=Nt(this._radius)),this._string.push("M",t,",",e,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}};var Ut=r(15002);function Vt(t){var e=0,r=g.pi/3,n=(0,Ut.r)(t),i=n(e,r);return i.parallels=function(t){return arguments.length?n(e=t[0]*g.uR,r=t[1]*g.uR):[e*g.RW,r*g.RW]},i}function Ht(t,e){var r=(0,g.O$)(t),n=(r+(0,g.O$)(e))/2;if((0,g.Wn)(n)<g.Ho)return function(t){var e=(0,g.mC)(t);function r(t,r){return[t*e,(0,g.O$)(r)/e]}return r.invert=function(t,r){return[t/e,(0,g.ZR)(r*e)]},r}(t);var i=1+r*(2*n-r),a=(0,g._b)(i)/n;function o(t,e){var r=(0,g._b)(i-2*n*(0,g.O$)(e))/n;return[r*(0,g.O$)(t*=n),a-r*(0,g.mC)(t)]}return o.invert=function(t,e){var r=a-e,o=(0,g.fv)(t,(0,g.Wn)(r))*(0,g.Xx)(r);return r*n<0&&(o-=g.pi*(0,g.Xx)(t)*(0,g.Xx)(r)),[o/n,(0,g.ZR)((i-(t*t+r*r)*n*n)/(2*n))]},o}function qt(){return Vt(Ht).scale(155.424).center([0,33.6442])}function Gt(){return qt().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])}var Zt=r(47589);function Yt(){var t,e,r,n,i,a,o=Gt(),s=qt().rotate([154,0]).center([-2,58.5]).parallels([55,65]),l=qt().rotate([157,0]).center([-3,19.9]).parallels([8,18]),u={point:function(t,e){a=[t,e]}};function c(t){var e=t[0],o=t[1];return a=null,r.point(e,o),a||(n.point(e,o),a)||(i.point(e,o),a)}function f(){return t=e=null,c}return c.invert=function(t){var e=o.scale(),r=o.translate(),n=(t[0]-r[0])/e,i=(t[1]-r[1])/e;return(i>=.12&&i<.234&&n>=-.425&&n<-.214?s:i>=.166&&i<.234&&n>=-.214&&n<-.115?l:o).invert(t)},c.stream=function(r){return t&&e===r?t:(n=[o.stream(e=r),s.stream(r),l.stream(r)],i=n.length,t={point:function(t,e){for(var r=-1;++r<i;)n[r].point(t,e)},sphere:function(){for(var t=-1;++t<i;)n[t].sphere()},lineStart:function(){for(var t=-1;++t<i;)n[t].lineStart()},lineEnd:function(){for(var t=-1;++t<i;)n[t].lineEnd()},polygonStart:function(){for(var t=-1;++t<i;)n[t].polygonStart()},polygonEnd:function(){for(var t=-1;++t<i;)n[t].polygonEnd()}});var n,i},c.precision=function(t){return arguments.length?(o.precision(t),s.precision(t),l.precision(t),f()):o.precision()},c.scale=function(t){return arguments.length?(o.scale(t),s.scale(.35*t),l.scale(t),c.translate(o.translate())):o.scale()},c.translate=function(t){if(!arguments.length)return o.translate();var e=o.scale(),a=+t[0],c=+t[1];return r=o.translate(t).clipExtent([[a-.455*e,c-.238*e],[a+.455*e,c+.238*e]]).stream(u),n=s.translate([a-.307*e,c+.201*e]).clipExtent([[a-.425*e+g.Ho,c+.12*e+g.Ho],[a-.214*e-g.Ho,c+.234*e-g.Ho]]).stream(u),i=l.translate([a-.205*e,c+.212*e]).clipExtent([[a-.214*e+g.Ho,c+.166*e+g.Ho],[a-.115*e-g.Ho,c+.234*e-g.Ho]]).stream(u),f()},c.fitExtent=function(t,e){return(0,Zt.qg)(c,t,e)},c.fitSize=function(t,e){return(0,Zt.mF)(c,t,e)},c.fitWidth=function(t,e){return(0,Zt.V6)(c,t,e)},c.fitHeight=function(t,e){return(0,Zt.rf)(c,t,e)},c.scale(1070)}var Wt=r(12956),Xt=r(17889),Jt=r(49386);function Kt(t,e){return[t,(0,g.cM)((0,g.OR)((g.ou+e)/2))]}function $t(){return Qt(Kt).scale(961/g.BZ)}function Qt(t){var e,r,n,i=(0,Ut.Z)(t),a=i.center,o=i.scale,s=i.translate,l=i.clipExtent,u=null;function c(){var a=g.pi*o(),s=i((0,Jt.Z)(i.rotate()).invert([0,0]));return l(null==u?[[s[0]-a,s[1]-a],[s[0]+a,s[1]+a]]:t===Kt?[[Math.max(s[0]-a,u),e],[Math.min(s[0]+a,r),n]]:[[u,Math.max(s[1]-a,e)],[r,Math.min(s[1]+a,n)]])}return i.scale=function(t){return arguments.length?(o(t),c()):o()},i.translate=function(t){return arguments.length?(s(t),c()):s()},i.center=function(t){return arguments.length?(a(t),c()):a()},i.clipExtent=function(t){return arguments.length?(null==t?u=e=r=n=null:(u=+t[0][0],e=+t[0][1],r=+t[1][0],n=+t[1][1]),c()):null==u?null:[[u,e],[r,n]]},c()}function te(t){return(0,g.OR)((g.ou+t)/2)}function ee(t,e){var r=(0,g.mC)(t),n=t===e?(0,g.O$)(t):(0,g.cM)(r/(0,g.mC)(e))/(0,g.cM)(te(e)/te(t)),i=r*(0,g.sQ)(te(t),n)/n;if(!n)return Kt;function a(t,e){i>0?e<-g.ou+g.Ho&&(e=-g.ou+g.Ho):e>g.ou-g.Ho&&(e=g.ou-g.Ho);var r=i/(0,g.sQ)(te(e),n);return[r*(0,g.O$)(n*t),i-r*(0,g.mC)(n*t)]}return a.invert=function(t,e){var r=i-e,a=(0,g.Xx)(n)*(0,g._b)(t*t+r*r),o=(0,g.fv)(t,(0,g.Wn)(r))*(0,g.Xx)(r);return r*n<0&&(o-=g.pi*(0,g.Xx)(t)*(0,g.Xx)(r)),[o/n,2*(0,g.z4)((0,g.sQ)(i/a,1/n))-g.ou]},a}function re(){return Vt(ee).scale(109.5).parallels([30,30])}Kt.invert=function(t,e){return[t,2*(0,g.z4)((0,g.Qq)(e))-g.ou]};var ne=r(97492);function ie(t,e){var r=(0,g.mC)(t),n=t===e?(0,g.O$)(t):(r-(0,g.mC)(e))/(e-t),i=r/n+t;if((0,g.Wn)(n)<g.Ho)return ne.k;function a(t,e){var r=i-e,a=n*t;return[r*(0,g.O$)(a),i-r*(0,g.mC)(a)]}return a.invert=function(t,e){var r=i-e,a=(0,g.fv)(t,(0,g.Wn)(r))*(0,g.Xx)(r);return r*n<0&&(a-=g.pi*(0,g.Xx)(t)*(0,g.Xx)(r)),[a/n,i-(0,g.Xx)(n)*(0,g._b)(t*t+r*r)]},a}function ae(){return Vt(ie).scale(131.154).center([0,13.9389])}var oe=1.340264,se=-.081106,le=893e-6,ue=.003796,ce=(0,g._b)(3)/2;function fe(t,e){var r=(0,g.ZR)(ce*(0,g.O$)(e)),n=r*r,i=n*n*n;return[t*(0,g.mC)(r)/(ce*(oe+3*se*n+i*(7*le+9*ue*n))),r*(oe+se*n+i*(le+ue*n))]}function he(){return(0,Ut.Z)(fe).scale(177.158)}fe.invert=function(t,e){for(var r,n=e,i=n*n,a=i*i*i,o=0;o<12&&(a=(i=(n-=r=(n*(oe+se*i+a*(le+ue*i))-e)/(oe+3*se*i+a*(7*le+9*ue*i)))*n)*i*i,!((0,g.Wn)(r)<g.aW));++o);return[ce*t*(oe+3*se*i+a*(7*le+9*ue*i))/(0,g.mC)(n),(0,g.ZR)((0,g.O$)(n)/ce)]};var pe=r(98936),de=r(64684);function ve(){var t,e,r,n,i,a,o,s=1,l=0,c=0,f=1,h=1,p=0,d=null,v=1,y=1,m=(0,de.l)({point:function(t,e){var r=_([t,e]);this.stream.point(r[0],r[1])}}),x=Y.Z;function b(){return v=s*f,y=s*h,a=o=null,_}function _(r){var n=r[0]*v,i=r[1]*y;if(p){var a=i*t-n*e;n=n*t+i*e,i=a}return[n+l,i+c]}return _.invert=function(r){var n=r[0]-l,i=r[1]-c;if(p){var a=i*t+n*e;n=n*t-i*e,i=a}return[n/v,i/y]},_.stream=function(t){return a&&o===t?a:a=m(x(o=t))},_.postclip=function(t){return arguments.length?(x=t,d=r=n=i=null,b()):x},_.clipExtent=function(t){return arguments.length?(x=null==t?(d=r=n=i=null,Y.Z):(0,u.Z)(d=+t[0][0],r=+t[0][1],n=+t[1][0],i=+t[1][1]),b()):null==d?null:[[d,r],[n,i]]},_.scale=function(t){return arguments.length?(s=+t,b()):s},_.translate=function(t){return arguments.length?(l=+t[0],c=+t[1],b()):[l,c]},_.angle=function(r){return arguments.length?(p=r%360*g.uR,e=(0,g.O$)(p),t=(0,g.mC)(p),b()):p*g.RW},_.reflectX=function(t){return arguments.length?(f=t?-1:1,b()):f<0},_.reflectY=function(t){return arguments.length?(h=t?-1:1,b()):h<0},_.fitExtent=function(t,e){return(0,Zt.qg)(_,t,e)},_.fitSize=function(t,e){return(0,Zt.mF)(_,t,e)},_.fitWidth=function(t,e){return(0,Zt.V6)(_,t,e)},_.fitHeight=function(t,e){return(0,Zt.rf)(_,t,e)},_}var ge=r(26867),ye=r(57962),me=r(25382);function xe(t,e){var r=(0,g.mC)(e),n=1+(0,g.mC)(t)*r;return[r*(0,g.O$)(t)/n,(0,g.O$)(e)/n]}function be(){return(0,Ut.Z)(xe).scale(250).clipAngle(142)}function _e(t,e){return[(0,g.cM)((0,g.OR)((g.ou+e)/2)),-t]}function we(){var t=Qt(_e),e=t.center,r=t.rotate;return t.center=function(t){return arguments.length?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return arguments.length?r([t[0],t[1],t.length>2?t[2]+90:90]):[(t=r())[0],t[1],t[2]-90]},r([0,0,90]).scale(159.155)}xe.invert=(0,me.O)((function(t){return 2*(0,g.z4)(t)})),_e.invert=function(t,e){return[-e,2*(0,g.z4)((0,g.Qq)(t))-g.ou]}},83074:function(t,e,r){"use strict";r.d(e,{Z:function(){return i}});var n=r(39695);function i(t,e){var r=t[0]*n.uR,i=t[1]*n.uR,a=e[0]*n.uR,o=e[1]*n.uR,s=(0,n.mC)(i),l=(0,n.O$)(i),u=(0,n.mC)(o),c=(0,n.O$)(o),f=s*(0,n.mC)(r),h=s*(0,n.O$)(r),p=u*(0,n.mC)(a),d=u*(0,n.O$)(a),v=2*(0,n.ZR)((0,n._b)((0,n.Jy)(o-i)+s*u*(0,n.Jy)(a-r))),g=(0,n.O$)(v),y=v?function(t){var e=(0,n.O$)(t*=v)/g,r=(0,n.O$)(v-t)/g,i=r*f+e*p,a=r*h+e*d,o=r*l+e*c;return[(0,n.fv)(a,i)*n.RW,(0,n.fv)(o,(0,n._b)(i*i+a*a))*n.RW]}:function(){return[r*n.RW,i*n.RW]};return y.distance=v,y}},39695:function(t,e,r){"use strict";r.d(e,{BZ:function(){return l},Ho:function(){return n},Jy:function(){return A},Kh:function(){return T},O$:function(){return x},OR:function(){return w},Qq:function(){return g},RW:function(){return u},Wn:function(){return f},Xx:function(){return b},ZR:function(){return k},_b:function(){return _},aW:function(){return i},cM:function(){return y},fv:function(){return p},mC:function(){return d},mD:function(){return v},ou:function(){return o},pi:function(){return a},pu:function(){return s},sQ:function(){return m},uR:function(){return c},z4:function(){return h}});var n=1e-6,i=1e-12,a=Math.PI,o=a/2,s=a/4,l=2*a,u=180/a,c=a/180,f=Math.abs,h=Math.atan,p=Math.atan2,d=Math.cos,v=Math.ceil,g=Math.exp,y=(Math.floor,Math.log),m=Math.pow,x=Math.sin,b=Math.sign||function(t){return t>0?1:t<0?-1:0},_=Math.sqrt,w=Math.tan;function T(t){return t>1?0:t<-1?a:Math.acos(t)}function k(t){return t>1?o:t<-1?-o:Math.asin(t)}function A(t){return(t=x(t/2))*t}},73182:function(t,e,r){"use strict";function n(){}r.d(e,{Z:function(){return n}})},3559:function(t,e,r){"use strict";var n=r(73182),i=1/0,a=i,o=-i,s=o,l={point:function(t,e){t<i&&(i=t),t>o&&(o=t),e<a&&(a=e),e>s&&(s=e)},lineStart:n.Z,lineEnd:n.Z,polygonStart:n.Z,polygonEnd:n.Z,result:function(){var t=[[i,a],[o,s]];return o=s=-(a=i=1/0),t}};e.Z=l},67108:function(t,e,r){"use strict";r.d(e,{Z:function(){return i}});var n=r(39695);function i(t,e){return(0,n.Wn)(t[0]-e[0])<n.Ho&&(0,n.Wn)(t[1]-e[1])<n.Ho}},23071:function(t,e,r){"use strict";r.d(e,{Z:function(){return l}});var n=r(33940),i=r(7620),a=r(39695),o=(0,n.Z)();function s(t){return(0,a.Wn)(t[0])<=a.pi?t[0]:(0,a.Xx)(t[0])*(((0,a.Wn)(t[0])+a.pi)%a.BZ-a.pi)}function l(t,e){var r=s(e),n=e[1],l=(0,a.O$)(n),u=[(0,a.O$)(r),-(0,a.mC)(r),0],c=0,f=0;o.reset(),1===l?n=a.ou+a.Ho:-1===l&&(n=-a.ou-a.Ho);for(var h=0,p=t.length;h<p;++h)if(v=(d=t[h]).length)for(var d,v,g=d[v-1],y=s(g),m=g[1]/2+a.pu,x=(0,a.O$)(m),b=(0,a.mC)(m),_=0;_<v;++_,y=T,x=A,b=M,g=w){var w=d[_],T=s(w),k=w[1]/2+a.pu,A=(0,a.O$)(k),M=(0,a.mC)(k),S=T-y,E=S>=0?1:-1,L=E*S,C=L>a.pi,P=x*A;if(o.add((0,a.fv)(P*E*(0,a.O$)(L),b*M+P*(0,a.mC)(L))),c+=C?S+E*a.BZ:S,C^y>=r^T>=r){var O=(0,i.T5)((0,i.Og)(g),(0,i.Og)(w));(0,i.iJ)(O);var I=(0,i.T5)(u,O);(0,i.iJ)(I);var D=(C^S>=0?-1:1)*(0,a.ZR)(I[2]);(n>D||n===D&&(O[0]||O[1]))&&(f+=C^S>=0?1:-1)}}return(c<-a.Ho||c<a.Ho&&o<-a.Ho)^1&f}},25382:function(t,e,r){"use strict";r.d(e,{O:function(){return a},W:function(){return i}});var n=r(39695);function i(t){return function(e,r){var i=(0,n.mC)(e),a=(0,n.mC)(r),o=t(i*a);return[o*a*(0,n.O$)(e),o*(0,n.O$)(r)]}}function a(t){return function(e,r){var i=(0,n._b)(e*e+r*r),a=t(i),o=(0,n.O$)(a),s=(0,n.mC)(a);return[(0,n.fv)(e*o,i*s),(0,n.ZR)(i&&r*o/i)]}}},12956:function(t,e,r){"use strict";r.d(e,{Z:function(){return s},l:function(){return o}});var n=r(39695),i=r(25382),a=r(15002),o=(0,i.W)((function(t){return(0,n._b)(2/(1+t))}));function s(){return(0,a.Z)(o).scale(124.75).clipAngle(179.999)}o.invert=(0,i.O)((function(t){return 2*(0,n.ZR)(t/2)}))},17889:function(t,e,r){"use strict";r.d(e,{N:function(){return o},Z:function(){return s}});var n=r(39695),i=r(25382),a=r(15002),o=(0,i.W)((function(t){return(t=(0,n.Kh)(t))&&t/(0,n.O$)(t)}));function s(){return(0,a.Z)(o).scale(79.4188).clipAngle(179.999)}o.invert=(0,i.O)((function(t){return t}))},97492:function(t,e,r){"use strict";r.d(e,{Z:function(){return a},k:function(){return i}});var n=r(15002);function i(t,e){return[t,e]}function a(){return(0,n.Z)(i).scale(152.63)}i.invert=i},47589:function(t,e,r){"use strict";r.d(e,{V6:function(){return l},mF:function(){return s},qg:function(){return o},rf:function(){return u}});var n=r(72736),i=r(3559);function a(t,e,r){var a=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=a&&t.clipExtent(null),(0,n.Z)(r,t.stream(i.Z)),e(i.Z.result()),null!=a&&t.clipExtent(a),t}function o(t,e,r){return a(t,(function(r){var n=e[1][0]-e[0][0],i=e[1][1]-e[0][1],a=Math.min(n/(r[1][0]-r[0][0]),i/(r[1][1]-r[0][1])),o=+e[0][0]+(n-a*(r[1][0]+r[0][0]))/2,s=+e[0][1]+(i-a*(r[1][1]+r[0][1]))/2;t.scale(150*a).translate([o,s])}),r)}function s(t,e,r){return o(t,[[0,0],e],r)}function l(t,e,r){return a(t,(function(r){var n=+e,i=n/(r[1][0]-r[0][0]),a=(n-i*(r[1][0]+r[0][0]))/2,o=-i*r[0][1];t.scale(150*i).translate([a,o])}),r)}function u(t,e,r){return a(t,(function(r){var n=+e,i=n/(r[1][1]-r[0][1]),a=-i*r[0][0],o=(n-i*(r[1][1]+r[0][1]))/2;t.scale(150*i).translate([a,o])}),r)}},98936:function(t,e,r){"use strict";r.d(e,{M:function(){return o},Z:function(){return s}});var n=r(39695),i=r(25382),a=r(15002);function o(t,e){var r=(0,n.mC)(e),i=(0,n.mC)(t)*r;return[r*(0,n.O$)(t)/i,(0,n.O$)(e)/i]}function s(){return(0,a.Z)(o).scale(144.049).clipAngle(60)}o.invert=(0,i.O)(n.z4)},15002:function(t,e,r){"use strict";r.d(e,{Z:function(){return x},r:function(){return b}});var n=r(87070),i=r(1457),a=r(87605),o=r(96059),s=r(8593),l=r(39695),u=r(49386),c=r(64684),f=r(47589),h=r(7620),p=16,d=(0,l.mC)(30*l.uR);function v(t,e){return+e?function(t,e){function r(n,i,a,o,s,u,c,f,h,p,v,g,y,m){var x=c-n,b=f-i,_=x*x+b*b;if(_>4*e&&y--){var w=o+p,T=s+v,k=u+g,A=(0,l._b)(w*w+T*T+k*k),M=(0,l.ZR)(k/=A),S=(0,l.Wn)((0,l.Wn)(k)-1)<l.Ho||(0,l.Wn)(a-h)<l.Ho?(a+h)/2:(0,l.fv)(T,w),E=t(S,M),L=E[0],C=E[1],P=L-n,O=C-i,I=b*P-x*O;(I*I/_>e||(0,l.Wn)((x*P+b*O)/_-.5)>.3||o*p+s*v+u*g<d)&&(r(n,i,a,o,s,u,L,C,S,w/=A,T/=A,k,y,m),m.point(L,C),r(L,C,S,w,T,k,c,f,h,p,v,g,y,m))}}return function(e){var n,i,a,o,s,l,u,c,f,d,v,g,y={point:m,lineStart:x,lineEnd:_,polygonStart:function(){e.polygonStart(),y.lineStart=w},polygonEnd:function(){e.polygonEnd(),y.lineStart=x}};function m(r,n){r=t(r,n),e.point(r[0],r[1])}function x(){c=NaN,y.point=b,e.lineStart()}function b(n,i){var a=(0,h.Og)([n,i]),o=t(n,i);r(c,f,u,d,v,g,c=o[0],f=o[1],u=n,d=a[0],v=a[1],g=a[2],p,e),e.point(c,f)}function _(){y.point=m,e.lineEnd()}function w(){x(),y.point=T,y.lineEnd=k}function T(t,e){b(n=t,e),i=c,a=f,o=d,s=v,l=g,y.point=b}function k(){r(c,f,u,d,v,g,i,a,n,o,s,l,p,e),y.lineEnd=_,_()}return y}}(t,e):function(t){return(0,c.l)({point:function(e,r){e=t(e,r),this.stream.point(e[0],e[1])}})}(t)}var g=(0,c.l)({point:function(t,e){this.stream.point(t*l.uR,e*l.uR)}});function y(t,e,r,n,i){function a(a,o){return[e+t*(a*=n),r-t*(o*=i)]}return a.invert=function(a,o){return[(a-e)/t*n,(r-o)/t*i]},a}function m(t,e,r,n,i,a){var o=(0,l.mC)(a),s=(0,l.O$)(a),u=o*t,c=s*t,f=o/t,h=s/t,p=(s*r-o*e)/t,d=(s*e+o*r)/t;function v(t,a){return[u*(t*=n)-c*(a*=i)+e,r-c*t-u*a]}return v.invert=function(t,e){return[n*(f*t-h*e+p),i*(d-h*t-f*e)]},v}function x(t){return b((function(){return t}))()}function b(t){var e,r,h,p,d,x,b,_,w,T,k=150,A=480,M=250,S=0,E=0,L=0,C=0,P=0,O=0,I=1,D=1,z=null,R=n.Z,F=null,B=s.Z,N=.5;function j(t){return _(t[0]*l.uR,t[1]*l.uR)}function U(t){return(t=_.invert(t[0],t[1]))&&[t[0]*l.RW,t[1]*l.RW]}function V(){var t=m(k,0,0,I,D,O).apply(null,e(S,E)),n=(O?m:y)(k,A-t[0],M-t[1],I,D,O);return r=(0,u.I)(L,C,P),b=(0,o.Z)(e,n),_=(0,o.Z)(r,b),x=v(b,N),H()}function H(){return w=T=null,j}return j.stream=function(t){return w&&T===t?w:w=g(function(t){return(0,c.l)({point:function(e,r){var n=t(e,r);return this.stream.point(n[0],n[1])}})}(r)(R(x(B(T=t)))))},j.preclip=function(t){return arguments.length?(R=t,z=void 0,H()):R},j.postclip=function(t){return arguments.length?(B=t,F=h=p=d=null,H()):B},j.clipAngle=function(t){return arguments.length?(R=+t?(0,i.Z)(z=t*l.uR):(z=null,n.Z),H()):z*l.RW},j.clipExtent=function(t){return arguments.length?(B=null==t?(F=h=p=d=null,s.Z):(0,a.Z)(F=+t[0][0],h=+t[0][1],p=+t[1][0],d=+t[1][1]),H()):null==F?null:[[F,h],[p,d]]},j.scale=function(t){return arguments.length?(k=+t,V()):k},j.translate=function(t){return arguments.length?(A=+t[0],M=+t[1],V()):[A,M]},j.center=function(t){return arguments.length?(S=t[0]%360*l.uR,E=t[1]%360*l.uR,V()):[S*l.RW,E*l.RW]},j.rotate=function(t){return arguments.length?(L=t[0]%360*l.uR,C=t[1]%360*l.uR,P=t.length>2?t[2]%360*l.uR:0,V()):[L*l.RW,C*l.RW,P*l.RW]},j.angle=function(t){return arguments.length?(O=t%360*l.uR,V()):O*l.RW},j.reflectX=function(t){return arguments.length?(I=t?-1:1,V()):I<0},j.reflectY=function(t){return arguments.length?(D=t?-1:1,V()):D<0},j.precision=function(t){return arguments.length?(x=v(b,N=t*t),H()):(0,l._b)(N)},j.fitExtent=function(t,e){return(0,f.qg)(j,t,e)},j.fitSize=function(t,e){return(0,f.mF)(j,t,e)},j.fitWidth=function(t,e){return(0,f.V6)(j,t,e)},j.fitHeight=function(t,e){return(0,f.rf)(j,t,e)},function(){return e=t.apply(this,arguments),j.invert=e.invert&&U,V()}}},26867:function(t,e,r){"use strict";r.d(e,{K:function(){return a},Z:function(){return o}});var n=r(15002),i=r(39695);function a(t,e){var r=e*e,n=r*r;return[t*(.8707-.131979*r+n*(n*(.003971*r-.001529*n)-.013791)),e*(1.007226+r*(.015085+n*(.028874*r-.044475-.005916*n)))]}function o(){return(0,n.Z)(a).scale(175.295)}a.invert=function(t,e){var r,n=e,a=25;do{var o=n*n,s=o*o;n-=r=(n*(1.007226+o*(.015085+s*(.028874*o-.044475-.005916*s)))-e)/(1.007226+o*(.045255+s*(.259866*o-.311325-.005916*11*s)))}while((0,i.Wn)(r)>i.Ho&&--a>0);return[t/(.8707+(o=n*n)*(o*(o*o*o*(.003971-.001529*o)-.013791)-.131979)),n]}},57962:function(t,e,r){"use strict";r.d(e,{I:function(){return o},Z:function(){return s}});var n=r(39695),i=r(25382),a=r(15002);function o(t,e){return[(0,n.mC)(e)*(0,n.O$)(t),(0,n.O$)(e)]}function s(){return(0,a.Z)(o).scale(249.5).clipAngle(90+n.Ho)}o.invert=(0,i.O)(n.ZR)},49386:function(t,e,r){"use strict";r.d(e,{I:function(){return o},Z:function(){return c}});var n=r(96059),i=r(39695);function a(t,e){return[(0,i.Wn)(t)>i.pi?t+Math.round(-t/i.BZ)*i.BZ:t,e]}function o(t,e,r){return(t%=i.BZ)?e||r?(0,n.Z)(l(t),u(e,r)):l(t):e||r?u(e,r):a}function s(t){return function(e,r){return[(e+=t)>i.pi?e-i.BZ:e<-i.pi?e+i.BZ:e,r]}}function l(t){var e=s(t);return e.invert=s(-t),e}function u(t,e){var r=(0,i.mC)(t),n=(0,i.O$)(t),a=(0,i.mC)(e),o=(0,i.O$)(e);function s(t,e){var s=(0,i.mC)(e),l=(0,i.mC)(t)*s,u=(0,i.O$)(t)*s,c=(0,i.O$)(e),f=c*r+l*n;return[(0,i.fv)(u*a-f*o,l*r-c*n),(0,i.ZR)(f*a+u*o)]}return s.invert=function(t,e){var s=(0,i.mC)(e),l=(0,i.mC)(t)*s,u=(0,i.O$)(t)*s,c=(0,i.O$)(e),f=c*a-u*o;return[(0,i.fv)(u*a+c*o,l*r+f*n),(0,i.ZR)(f*r-l*n)]},s}function c(t){function e(e){return(e=t(e[0]*i.uR,e[1]*i.uR))[0]*=i.RW,e[1]*=i.RW,e}return t=o(t[0]*i.uR,t[1]*i.uR,t.length>2?t[2]*i.uR:0),e.invert=function(e){return(e=t.invert(e[0]*i.uR,e[1]*i.uR))[0]*=i.RW,e[1]*=i.RW,e},e}a.invert=a},72736:function(t,e,r){"use strict";function n(t,e){t&&a.hasOwnProperty(t.type)&&a[t.type](t,e)}r.d(e,{Z:function(){return l}});var i={Feature:function(t,e){n(t.geometry,e)},FeatureCollection:function(t,e){for(var r=t.features,i=-1,a=r.length;++i<a;)n(r[i].geometry,e)}},a={Sphere:function(t,e){e.sphere()},Point:function(t,e){t=t.coordinates,e.point(t[0],t[1],t[2])},MultiPoint:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)t=r[n],e.point(t[0],t[1],t[2])},LineString:function(t,e){o(t.coordinates,e,0)},MultiLineString:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)o(r[n],e,0)},Polygon:function(t,e){s(t.coordinates,e)},MultiPolygon:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)s(r[n],e)},GeometryCollection:function(t,e){for(var r=t.geometries,i=-1,a=r.length;++i<a;)n(r[i],e)}};function o(t,e,r){var n,i=-1,a=t.length-r;for(e.lineStart();++i<a;)n=t[i],e.point(n[0],n[1],n[2]);e.lineEnd()}function s(t,e){var r=-1,n=t.length;for(e.polygonStart();++r<n;)o(t[r],e,1);e.polygonEnd()}function l(t,e){t&&i.hasOwnProperty(t.type)?i[t.type](t,e):n(t,e)}},64684:function(t,e,r){"use strict";function n(t){return{stream:i(t)}}function i(t){return function(e){var r=new a;for(var n in t)r[n]=t[n];return r.stream=e,r}}function a(){}r.d(e,{Z:function(){return n},l:function(){return i}}),a.prototype={constructor:a,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}}},674:function(t,e,r){"use strict";function n(t,e){return t.parent===e.parent?1:2}function i(t,e){return t+e.x}function a(t,e){return Math.max(t,e.y)}function o(){var t=n,e=1,r=1,o=!1;function s(n){var s,l=0;n.eachAfter((function(e){var r=e.children;r?(e.x=function(t){return t.reduce(i,0)/t.length}(r),e.y=function(t){return 1+t.reduce(a,0)}(r)):(e.x=s?l+=t(e,s):0,e.y=0,s=e)}));var u=function(t){for(var e;e=t.children;)t=e[0];return t}(n),c=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(n),f=u.x-t(u,c)/2,h=c.x+t(c,u)/2;return n.eachAfter(o?function(t){t.x=(t.x-n.x)*e,t.y=(n.y-t.y)*r}:function(t){t.x=(t.x-f)/(h-f)*e,t.y=(1-(n.y?t.y/n.y:1))*r})}return s.separation=function(e){return arguments.length?(t=e,s):t},s.size=function(t){return arguments.length?(o=!1,e=+t[0],r=+t[1],s):o?null:[e,r]},s.nodeSize=function(t){return arguments.length?(o=!0,e=+t[0],r=+t[1],s):o?[e,r]:null},s}function s(t){var e=0,r=t.children,n=r&&r.length;if(n)for(;--n>=0;)e+=r[n].value;else e=1;t.value=e}function l(t,e){var r,n,i,a,o,s=new h(t),l=+t.value&&(s.value=t.value),c=[s];for(null==e&&(e=u);r=c.pop();)if(l&&(r.value=+r.data.value),(i=e(r.data))&&(o=i.length))for(r.children=new Array(o),a=o-1;a>=0;--a)c.push(n=r.children[a]=new h(i[a])),n.parent=r,n.depth=r.depth+1;return s.eachBefore(f)}function u(t){return t.children}function c(t){t.data=t.data.data}function f(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function h(t){this.data=t,this.depth=this.height=0,this.parent=null}r.r(e),r.d(e,{cluster:function(){return o},hierarchy:function(){return l},pack:function(){return O},packEnclose:function(){return d},packSiblings:function(){return S},partition:function(){return B},stratify:function(){return q},tree:function(){return K},treemap:function(){return rt},treemapBinary:function(){return nt},treemapDice:function(){return F},treemapResquarify:function(){return at},treemapSlice:function(){return $},treemapSliceDice:function(){return it},treemapSquarify:function(){return et}}),h.prototype=l.prototype={constructor:h,count:function(){return this.eachAfter(s)},each:function(t){var e,r,n,i,a=this,o=[a];do{for(e=o.reverse(),o=[];a=e.pop();)if(t(a),r=a.children)for(n=0,i=r.length;n<i;++n)o.push(r[n])}while(o.length);return this},eachAfter:function(t){for(var e,r,n,i=this,a=[i],o=[];i=a.pop();)if(o.push(i),e=i.children)for(r=0,n=e.length;r<n;++r)a.push(e[r]);for(;i=o.pop();)t(i);return this},eachBefore:function(t){for(var e,r,n=this,i=[n];n=i.pop();)if(t(n),e=n.children)for(r=e.length-1;r>=0;--r)i.push(e[r]);return this},sum:function(t){return this.eachAfter((function(e){for(var r=+t(e.data)||0,n=e.children,i=n&&n.length;--i>=0;)r+=n[i].value;e.value=r}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,r=function(t,e){if(t===e)return t;var r=t.ancestors(),n=e.ancestors(),i=null;for(t=r.pop(),e=n.pop();t===e;)i=t,t=r.pop(),e=n.pop();return i}(e,t),n=[e];e!==r;)e=e.parent,n.push(e);for(var i=n.length;t!==r;)n.splice(i,0,t),t=t.parent;return n},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each((function(e){t.push(e)})),t},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(r){r!==t&&e.push({source:r.parent,target:r})})),e},copy:function(){return l(this).eachBefore(c)}};var p=Array.prototype.slice;function d(t){for(var e,r,n=0,i=(t=function(t){for(var e,r,n=t.length;n;)r=Math.random()*n--|0,e=t[n],t[n]=t[r],t[r]=e;return t}(p.call(t))).length,a=[];n<i;)e=t[n],r&&y(r,e)?++n:(r=x(a=v(a,e)),n=0);return r}function v(t,e){var r,n;if(m(e,t))return[e];for(r=0;r<t.length;++r)if(g(e,t[r])&&m(b(t[r],e),t))return[t[r],e];for(r=0;r<t.length-1;++r)for(n=r+1;n<t.length;++n)if(g(b(t[r],t[n]),e)&&g(b(t[r],e),t[n])&&g(b(t[n],e),t[r])&&m(_(t[r],t[n],e),t))return[t[r],t[n],e];throw new Error}function g(t,e){var r=t.r-e.r,n=e.x-t.x,i=e.y-t.y;return r<0||r*r<n*n+i*i}function y(t,e){var r=t.r-e.r+1e-6,n=e.x-t.x,i=e.y-t.y;return r>0&&r*r>n*n+i*i}function m(t,e){for(var r=0;r<e.length;++r)if(!y(t,e[r]))return!1;return!0}function x(t){switch(t.length){case 1:return{x:(e=t[0]).x,y:e.y,r:e.r};case 2:return b(t[0],t[1]);case 3:return _(t[0],t[1],t[2])}var e}function b(t,e){var r=t.x,n=t.y,i=t.r,a=e.x,o=e.y,s=e.r,l=a-r,u=o-n,c=s-i,f=Math.sqrt(l*l+u*u);return{x:(r+a+l/f*c)/2,y:(n+o+u/f*c)/2,r:(f+i+s)/2}}function _(t,e,r){var n=t.x,i=t.y,a=t.r,o=e.x,s=e.y,l=e.r,u=r.x,c=r.y,f=r.r,h=n-o,p=n-u,d=i-s,v=i-c,g=l-a,y=f-a,m=n*n+i*i-a*a,x=m-o*o-s*s+l*l,b=m-u*u-c*c+f*f,_=p*d-h*v,w=(d*b-v*x)/(2*_)-n,T=(v*g-d*y)/_,k=(p*x-h*b)/(2*_)-i,A=(h*y-p*g)/_,M=T*T+A*A-1,S=2*(a+w*T+k*A),E=w*w+k*k-a*a,L=-(M?(S+Math.sqrt(S*S-4*M*E))/(2*M):E/S);return{x:n+w+T*L,y:i+k+A*L,r:L}}function w(t,e,r){var n,i,a,o,s=t.x-e.x,l=t.y-e.y,u=s*s+l*l;u?(i=e.r+r.r,i*=i,o=t.r+r.r,i>(o*=o)?(n=(u+o-i)/(2*u),a=Math.sqrt(Math.max(0,o/u-n*n)),r.x=t.x-n*s-a*l,r.y=t.y-n*l+a*s):(n=(u+i-o)/(2*u),a=Math.sqrt(Math.max(0,i/u-n*n)),r.x=e.x+n*s-a*l,r.y=e.y+n*l+a*s)):(r.x=e.x+r.r,r.y=e.y)}function T(t,e){var r=t.r+e.r-1e-6,n=e.x-t.x,i=e.y-t.y;return r>0&&r*r>n*n+i*i}function k(t){var e=t._,r=t.next._,n=e.r+r.r,i=(e.x*r.r+r.x*e.r)/n,a=(e.y*r.r+r.y*e.r)/n;return i*i+a*a}function A(t){this._=t,this.next=null,this.previous=null}function M(t){if(!(i=t.length))return 0;var e,r,n,i,a,o,s,l,u,c,f;if((e=t[0]).x=0,e.y=0,!(i>1))return e.r;if(r=t[1],e.x=-r.r,r.x=e.r,r.y=0,!(i>2))return e.r+r.r;w(r,e,n=t[2]),e=new A(e),r=new A(r),n=new A(n),e.next=n.previous=r,r.next=e.previous=n,n.next=r.previous=e;t:for(s=3;s<i;++s){w(e._,r._,n=t[s]),n=new A(n),l=r.next,u=e.previous,c=r._.r,f=e._.r;do{if(c<=f){if(T(l._,n._)){r=l,e.next=r,r.previous=e,--s;continue t}c+=l._.r,l=l.next}else{if(T(u._,n._)){(e=u).next=r,r.previous=e,--s;continue t}f+=u._.r,u=u.previous}}while(l!==u.next);for(n.previous=e,n.next=r,e.next=r.previous=r=n,a=k(e);(n=n.next)!==r;)(o=k(n))<a&&(e=n,a=o);r=e.next}for(e=[r._],n=r;(n=n.next)!==r;)e.push(n._);for(n=d(e),s=0;s<i;++s)(e=t[s]).x-=n.x,e.y-=n.y;return n.r}function S(t){return M(t),t}function E(t){if("function"!=typeof t)throw new Error;return t}function L(){return 0}function C(t){return function(){return t}}function P(t){return Math.sqrt(t.value)}function O(){var t=null,e=1,r=1,n=L;function i(i){return i.x=e/2,i.y=r/2,t?i.eachBefore(I(t)).eachAfter(D(n,.5)).eachBefore(z(1)):i.eachBefore(I(P)).eachAfter(D(L,1)).eachAfter(D(n,i.r/Math.min(e,r))).eachBefore(z(Math.min(e,r)/(2*i.r))),i}return i.radius=function(e){return arguments.length?(t=null==(r=e)?null:E(r),i):t;var r},i.size=function(t){return arguments.length?(e=+t[0],r=+t[1],i):[e,r]},i.padding=function(t){return arguments.length?(n="function"==typeof t?t:C(+t),i):n},i}function I(t){return function(e){e.children||(e.r=Math.max(0,+t(e)||0))}}function D(t,e){return function(r){if(n=r.children){var n,i,a,o=n.length,s=t(r)*e||0;if(s)for(i=0;i<o;++i)n[i].r+=s;if(a=M(n),s)for(i=0;i<o;++i)n[i].r-=s;r.r=a+s}}}function z(t){return function(e){var r=e.parent;e.r*=t,r&&(e.x=r.x+t*e.x,e.y=r.y+t*e.y)}}function R(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function F(t,e,r,n,i){for(var a,o=t.children,s=-1,l=o.length,u=t.value&&(n-e)/t.value;++s<l;)(a=o[s]).y0=r,a.y1=i,a.x0=e,a.x1=e+=a.value*u}function B(){var t=1,e=1,r=0,n=!1;function i(i){var a=i.height+1;return i.x0=i.y0=r,i.x1=t,i.y1=e/a,i.eachBefore(function(t,e){return function(n){n.children&&F(n,n.x0,t*(n.depth+1)/e,n.x1,t*(n.depth+2)/e);var i=n.x0,a=n.y0,o=n.x1-r,s=n.y1-r;o<i&&(i=o=(i+o)/2),s<a&&(a=s=(a+s)/2),n.x0=i,n.y0=a,n.x1=o,n.y1=s}}(e,a)),n&&i.eachBefore(R),i}return i.round=function(t){return arguments.length?(n=!!t,i):n},i.size=function(r){return arguments.length?(t=+r[0],e=+r[1],i):[t,e]},i.padding=function(t){return arguments.length?(r=+t,i):r},i}var N="$",j={depth:-1},U={};function V(t){return t.id}function H(t){return t.parentId}function q(){var t=V,e=H;function r(r){var n,i,a,o,s,l,u,c=r.length,p=new Array(c),d={};for(i=0;i<c;++i)n=r[i],s=p[i]=new h(n),null!=(l=t(n,i,r))&&(l+="")&&(d[u=N+(s.id=l)]=u in d?U:s);for(i=0;i<c;++i)if(s=p[i],null!=(l=e(r[i],i,r))&&(l+="")){if(!(o=d[N+l]))throw new Error("missing: "+l);if(o===U)throw new Error("ambiguous: "+l);o.children?o.children.push(s):o.children=[s],s.parent=o}else{if(a)throw new Error("multiple roots");a=s}if(!a)throw new Error("no root");if(a.parent=j,a.eachBefore((function(t){t.depth=t.parent.depth+1,--c})).eachBefore(f),a.parent=null,c>0)throw new Error("cycle");return a}return r.id=function(e){return arguments.length?(t=E(e),r):t},r.parentId=function(t){return arguments.length?(e=E(t),r):e},r}function G(t,e){return t.parent===e.parent?1:2}function Z(t){var e=t.children;return e?e[0]:t.t}function Y(t){var e=t.children;return e?e[e.length-1]:t.t}function W(t,e,r){var n=r/(e.i-t.i);e.c-=n,e.s+=r,t.c+=n,e.z+=r,e.m+=r}function X(t,e,r){return t.a.parent===e.parent?t.a:r}function J(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}function K(){var t=G,e=1,r=1,n=null;function i(i){var l=function(t){for(var e,r,n,i,a,o=new J(t,0),s=[o];e=s.pop();)if(n=e._.children)for(e.children=new Array(a=n.length),i=a-1;i>=0;--i)s.push(r=e.children[i]=new J(n[i],i)),r.parent=e;return(o.parent=new J(null,0)).children=[o],o}(i);if(l.eachAfter(a),l.parent.m=-l.z,l.eachBefore(o),n)i.eachBefore(s);else{var u=i,c=i,f=i;i.eachBefore((function(t){t.x<u.x&&(u=t),t.x>c.x&&(c=t),t.depth>f.depth&&(f=t)}));var h=u===c?1:t(u,c)/2,p=h-u.x,d=e/(c.x+h+p),v=r/(f.depth||1);i.eachBefore((function(t){t.x=(t.x+p)*d,t.y=t.depth*v}))}return i}function a(e){var r=e.children,n=e.parent.children,i=e.i?n[e.i-1]:null;if(r){!function(t){for(var e,r=0,n=0,i=t.children,a=i.length;--a>=0;)(e=i[a]).z+=r,e.m+=r,r+=e.s+(n+=e.c)}(e);var a=(r[0].z+r[r.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-a):e.z=a}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,r,n){if(r){for(var i,a=e,o=e,s=r,l=a.parent.children[0],u=a.m,c=o.m,f=s.m,h=l.m;s=Y(s),a=Z(a),s&&a;)l=Z(l),(o=Y(o)).a=e,(i=s.z+f-a.z-u+t(s._,a._))>0&&(W(X(s,e,n),e,i),u+=i,c+=i),f+=s.m,u+=a.m,h+=l.m,c+=o.m;s&&!Y(o)&&(o.t=s,o.m+=f-c),a&&!Z(l)&&(l.t=a,l.m+=u-h,n=e)}return n}(e,i,e.parent.A||n[0])}function o(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e,t.y=t.depth*r}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(n=!1,e=+t[0],r=+t[1],i):n?null:[e,r]},i.nodeSize=function(t){return arguments.length?(n=!0,e=+t[0],r=+t[1],i):n?[e,r]:null},i}function $(t,e,r,n,i){for(var a,o=t.children,s=-1,l=o.length,u=t.value&&(i-r)/t.value;++s<l;)(a=o[s]).x0=e,a.x1=n,a.y0=r,a.y1=r+=a.value*u}J.prototype=Object.create(h.prototype);var Q=(1+Math.sqrt(5))/2;function tt(t,e,r,n,i,a){for(var o,s,l,u,c,f,h,p,d,v,g,y=[],m=e.children,x=0,b=0,_=m.length,w=e.value;x<_;){l=i-r,u=a-n;do{c=m[b++].value}while(!c&&b<_);for(f=h=c,g=c*c*(v=Math.max(u/l,l/u)/(w*t)),d=Math.max(h/g,g/f);b<_;++b){if(c+=s=m[b].value,s<f&&(f=s),s>h&&(h=s),g=c*c*v,(p=Math.max(h/g,g/f))>d){c-=s;break}d=p}y.push(o={value:c,dice:l<u,children:m.slice(x,b)}),o.dice?F(o,r,n,i,w?n+=u*c/w:a):$(o,r,n,w?r+=l*c/w:i,a),w-=c,x=b}return y}var et=function t(e){function r(t,r,n,i,a){tt(e,t,r,n,i,a)}return r.ratio=function(e){return t((e=+e)>1?e:1)},r}(Q);function rt(){var t=et,e=!1,r=1,n=1,i=[0],a=L,o=L,s=L,l=L,u=L;function c(t){return t.x0=t.y0=0,t.x1=r,t.y1=n,t.eachBefore(f),i=[0],e&&t.eachBefore(R),t}function f(e){var r=i[e.depth],n=e.x0+r,c=e.y0+r,f=e.x1-r,h=e.y1-r;f<n&&(n=f=(n+f)/2),h<c&&(c=h=(c+h)/2),e.x0=n,e.y0=c,e.x1=f,e.y1=h,e.children&&(r=i[e.depth+1]=a(e)/2,n+=u(e)-r,c+=o(e)-r,(f-=s(e)-r)<n&&(n=f=(n+f)/2),(h-=l(e)-r)<c&&(c=h=(c+h)/2),t(e,n,c,f,h))}return c.round=function(t){return arguments.length?(e=!!t,c):e},c.size=function(t){return arguments.length?(r=+t[0],n=+t[1],c):[r,n]},c.tile=function(e){return arguments.length?(t=E(e),c):t},c.padding=function(t){return arguments.length?c.paddingInner(t).paddingOuter(t):c.paddingInner()},c.paddingInner=function(t){return arguments.length?(a="function"==typeof t?t:C(+t),c):a},c.paddingOuter=function(t){return arguments.length?c.paddingTop(t).paddingRight(t).paddingBottom(t).paddingLeft(t):c.paddingTop()},c.paddingTop=function(t){return arguments.length?(o="function"==typeof t?t:C(+t),c):o},c.paddingRight=function(t){return arguments.length?(s="function"==typeof t?t:C(+t),c):s},c.paddingBottom=function(t){return arguments.length?(l="function"==typeof t?t:C(+t),c):l},c.paddingLeft=function(t){return arguments.length?(u="function"==typeof t?t:C(+t),c):u},c}function nt(t,e,r,n,i){var a,o,s=t.children,l=s.length,u=new Array(l+1);for(u[0]=o=a=0;a<l;++a)u[a+1]=o+=s[a].value;!function t(e,r,n,i,a,o,l){if(e>=r-1){var c=s[e];return c.x0=i,c.y0=a,c.x1=o,void(c.y1=l)}for(var f=u[e],h=n/2+f,p=e+1,d=r-1;p<d;){var v=p+d>>>1;u[v]<h?p=v+1:d=v}h-u[p-1]<u[p]-h&&e+1<p&&--p;var g=u[p]-f,y=n-g;if(o-i>l-a){var m=(i*y+o*g)/n;t(e,p,g,i,a,m,l),t(p,r,y,m,a,o,l)}else{var x=(a*y+l*g)/n;t(e,p,g,i,a,o,x),t(p,r,y,i,x,o,l)}}(0,l,t.value,e,r,n,i)}function it(t,e,r,n,i){(1&t.depth?$:F)(t,e,r,n,i)}var at=function t(e){function r(t,r,n,i,a){if((o=t._squarify)&&o.ratio===e)for(var o,s,l,u,c,f=-1,h=o.length,p=t.value;++f<h;){for(l=(s=o[f]).children,u=s.value=0,c=l.length;u<c;++u)s.value+=l[u].value;s.dice?F(s,r,n,i,n+=(a-n)*s.value/p):$(s,r,n,r+=(i-r)*s.value/p,a),p-=s.value}else t._squarify=o=tt(e,t,r,n,i,a),o.ratio=e}return r.ratio=function(e){return t((e=+e)>1?e:1)},r}(Q)},45879:function(t,e,r){"use strict";r.d(e,{h5:function(){return y}});var n=Math.PI,i=2*n,a=1e-6,o=i-a;function s(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function l(){return new s}s.prototype=l.prototype={constructor:s,moveTo:function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},quadraticCurveTo:function(t,e,r,n){this._+="Q"+ +t+","+ +e+","+(this._x1=+r)+","+(this._y1=+n)},bezierCurveTo:function(t,e,r,n,i,a){this._+="C"+ +t+","+ +e+","+ +r+","+ +n+","+(this._x1=+i)+","+(this._y1=+a)},arcTo:function(t,e,r,i,o){t=+t,e=+e,r=+r,i=+i,o=+o;var s=this._x1,l=this._y1,u=r-t,c=i-e,f=s-t,h=l-e,p=f*f+h*h;if(o<0)throw new Error("negative radius: "+o);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(p>a)if(Math.abs(h*u-c*f)>a&&o){var d=r-s,v=i-l,g=u*u+c*c,y=d*d+v*v,m=Math.sqrt(g),x=Math.sqrt(p),b=o*Math.tan((n-Math.acos((g+p-y)/(2*m*x)))/2),_=b/x,w=b/m;Math.abs(_-1)>a&&(this._+="L"+(t+_*f)+","+(e+_*h)),this._+="A"+o+","+o+",0,0,"+ +(h*d>f*v)+","+(this._x1=t+w*u)+","+(this._y1=e+w*c)}else this._+="L"+(this._x1=t)+","+(this._y1=e)},arc:function(t,e,r,s,l,u){t=+t,e=+e,u=!!u;var c=(r=+r)*Math.cos(s),f=r*Math.sin(s),h=t+c,p=e+f,d=1^u,v=u?s-l:l-s;if(r<0)throw new Error("negative radius: "+r);null===this._x1?this._+="M"+h+","+p:(Math.abs(this._x1-h)>a||Math.abs(this._y1-p)>a)&&(this._+="L"+h+","+p),r&&(v<0&&(v=v%i+i),v>o?this._+="A"+r+","+r+",0,1,"+d+","+(t-c)+","+(e-f)+"A"+r+","+r+",0,1,"+d+","+(this._x1=h)+","+(this._y1=p):v>a&&(this._+="A"+r+","+r+",0,"+ +(v>=n)+","+d+","+(this._x1=t+r*Math.cos(l))+","+(this._y1=e+r*Math.sin(l))))},rect:function(t,e,r,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +n+"h"+-r+"Z"},toString:function(){return this._}};var u=l,c=Array.prototype.slice;function f(t){return function(){return t}}function h(t){return t[0]}function p(t){return t[1]}function d(t){return t.source}function v(t){return t.target}function g(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e=(e+n)/2,r,e,i,n,i)}function y(){return function(t){var e=d,r=v,n=h,i=p,a=null;function o(){var o,s=c.call(arguments),l=e.apply(this,s),f=r.apply(this,s);if(a||(a=o=u()),t(a,+n.apply(this,(s[0]=l,s)),+i.apply(this,s),+n.apply(this,(s[0]=f,s)),+i.apply(this,s)),o)return a=null,o+""||null}return o.source=function(t){return arguments.length?(e=t,o):e},o.target=function(t){return arguments.length?(r=t,o):r},o.x=function(t){return arguments.length?(n="function"==typeof t?t:f(+t),o):n},o.y=function(t){return arguments.length?(i="function"==typeof t?t:f(+t),o):i},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o}(g)}},84096:function(t,e,r){"use strict";r.d(e,{i$:function(){return d},Dq:function(){return h},g0:function(){return v}});var n=r(58176),i=r(48480),a=r(59879),o=r(82301),s=r(34823),l=r(79791);function u(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function c(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function f(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function h(t){var e=t.dateTime,r=t.date,s=t.time,l=t.periods,h=t.days,p=t.shortDays,d=t.months,v=t.shortMonths,y=w(l),m=T(l),x=w(h),b=T(h),_=w(p),St=T(p),Et=w(d),Lt=T(d),Ct=w(v),Pt=T(v),Ot={a:function(t){return p[t.getDay()]},A:function(t){return h[t.getDay()]},b:function(t){return v[t.getMonth()]},B:function(t){return d[t.getMonth()]},c:null,d:q,e:q,f:X,H:G,I:Z,j:Y,L:W,m:J,M:K,p:function(t){return l[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:At,s:Mt,S:$,u:Q,U:tt,V:et,w:rt,W:nt,x:null,X:null,y:it,Y:at,Z:ot,"%":kt},It={a:function(t){return p[t.getUTCDay()]},A:function(t){return h[t.getUTCDay()]},b:function(t){return v[t.getUTCMonth()]},B:function(t){return d[t.getUTCMonth()]},c:null,d:st,e:st,f:ht,H:lt,I:ut,j:ct,L:ft,m:pt,M:dt,p:function(t){return l[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:At,s:Mt,S:vt,u:gt,U:yt,V:mt,w:xt,W:bt,x:null,X:null,y:_t,Y:wt,Z:Tt,"%":kt},Dt={a:function(t,e,r){var n=_.exec(e.slice(r));return n?(t.w=St[n[0].toLowerCase()],r+n[0].length):-1},A:function(t,e,r){var n=x.exec(e.slice(r));return n?(t.w=b[n[0].toLowerCase()],r+n[0].length):-1},b:function(t,e,r){var n=Ct.exec(e.slice(r));return n?(t.m=Pt[n[0].toLowerCase()],r+n[0].length):-1},B:function(t,e,r){var n=Et.exec(e.slice(r));return n?(t.m=Lt[n[0].toLowerCase()],r+n[0].length):-1},c:function(t,r,n){return Ft(t,e,r,n)},d:D,e:D,f:j,H:R,I:R,j:z,L:N,m:I,M:F,p:function(t,e,r){var n=y.exec(e.slice(r));return n?(t.p=m[n[0].toLowerCase()],r+n[0].length):-1},q:O,Q:V,s:H,S:B,u:A,U:M,V:S,w:k,W:E,x:function(t,e,n){return Ft(t,r,e,n)},X:function(t,e,r){return Ft(t,s,e,r)},y:C,Y:L,Z:P,"%":U};function zt(t,e){return function(r){var n,i,a,o=[],s=-1,l=0,u=t.length;for(r instanceof Date||(r=new Date(+r));++s<u;)37===t.charCodeAt(s)&&(o.push(t.slice(l,s)),null!=(i=g[n=t.charAt(++s)])?n=t.charAt(++s):i="e"===n?" ":"0",(a=e[n])&&(n=a(r,i)),o.push(n),l=s+1);return o.push(t.slice(l,s)),o.join("")}}function Rt(t,e){return function(r){var s,l,h=f(1900,void 0,1);if(Ft(h,t,r+="",0)!=r.length)return null;if("Q"in h)return new Date(h.Q);if("s"in h)return new Date(1e3*h.s+("L"in h?h.L:0));if(e&&!("Z"in h)&&(h.Z=0),"p"in h&&(h.H=h.H%12+12*h.p),void 0===h.m&&(h.m="q"in h?h.q:0),"V"in h){if(h.V<1||h.V>53)return null;"w"in h||(h.w=1),"Z"in h?(l=(s=c(f(h.y,0,1))).getUTCDay(),s=l>4||0===l?n.l6.ceil(s):(0,n.l6)(s),s=i.Z.offset(s,7*(h.V-1)),h.y=s.getUTCFullYear(),h.m=s.getUTCMonth(),h.d=s.getUTCDate()+(h.w+6)%7):(l=(s=u(f(h.y,0,1))).getDay(),s=l>4||0===l?a.wA.ceil(s):(0,a.wA)(s),s=o.Z.offset(s,7*(h.V-1)),h.y=s.getFullYear(),h.m=s.getMonth(),h.d=s.getDate()+(h.w+6)%7)}else("W"in h||"U"in h)&&("w"in h||(h.w="u"in h?h.u%7:"W"in h?1:0),l="Z"in h?c(f(h.y,0,1)).getUTCDay():u(f(h.y,0,1)).getDay(),h.m=0,h.d="W"in h?(h.w+6)%7+7*h.W-(l+5)%7:h.w+7*h.U-(l+6)%7);return"Z"in h?(h.H+=h.Z/100|0,h.M+=h.Z%100,c(h)):u(h)}}function Ft(t,e,r,n){for(var i,a,o=0,s=e.length,l=r.length;o<s;){if(n>=l)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=Dt[i in g?e.charAt(o++):i])||(n=a(t,r,n))<0)return-1}else if(i!=r.charCodeAt(n++))return-1}return n}return Ot.x=zt(r,Ot),Ot.X=zt(s,Ot),Ot.c=zt(e,Ot),It.x=zt(r,It),It.X=zt(s,It),It.c=zt(e,It),{format:function(t){var e=zt(t+="",Ot);return e.toString=function(){return t},e},parse:function(t){var e=Rt(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=zt(t+="",It);return e.toString=function(){return t},e},utcParse:function(t){var e=Rt(t+="",!0);return e.toString=function(){return t},e}}}var p,d,v,g={"-":"",_:" ",0:"0"},y=/^\s*\d+/,m=/^%/,x=/[\\^$*+?|[\]().{}]/g;function b(t,e,r){var n=t<0?"-":"",i=(n?-t:t)+"",a=i.length;return n+(a<r?new Array(r-a+1).join(e)+i:i)}function _(t){return t.replace(x,"\\$&")}function w(t){return new RegExp("^(?:"+t.map(_).join("|")+")","i")}function T(t){for(var e={},r=-1,n=t.length;++r<n;)e[t[r].toLowerCase()]=r;return e}function k(t,e,r){var n=y.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function A(t,e,r){var n=y.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function M(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function S(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function E(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function L(t,e,r){var n=y.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function C(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function P(t,e,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function O(t,e,r){var n=y.exec(e.slice(r,r+1));return n?(t.q=3*n[0]-3,r+n[0].length):-1}function I(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function D(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function z(t,e,r){var n=y.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function R(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function F(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function B(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function N(t,e,r){var n=y.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function j(t,e,r){var n=y.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function U(t,e,r){var n=m.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function V(t,e,r){var n=y.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function H(t,e,r){var n=y.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function q(t,e){return b(t.getDate(),e,2)}function G(t,e){return b(t.getHours(),e,2)}function Z(t,e){return b(t.getHours()%12||12,e,2)}function Y(t,e){return b(1+o.Z.count((0,s.Z)(t),t),e,3)}function W(t,e){return b(t.getMilliseconds(),e,3)}function X(t,e){return W(t,e)+"000"}function J(t,e){return b(t.getMonth()+1,e,2)}function K(t,e){return b(t.getMinutes(),e,2)}function $(t,e){return b(t.getSeconds(),e,2)}function Q(t){var e=t.getDay();return 0===e?7:e}function tt(t,e){return b(a.OM.count((0,s.Z)(t)-1,t),e,2)}function et(t,e){var r=t.getDay();return t=r>=4||0===r?(0,a.bL)(t):a.bL.ceil(t),b(a.bL.count((0,s.Z)(t),t)+(4===(0,s.Z)(t).getDay()),e,2)}function rt(t){return t.getDay()}function nt(t,e){return b(a.wA.count((0,s.Z)(t)-1,t),e,2)}function it(t,e){return b(t.getFullYear()%100,e,2)}function at(t,e){return b(t.getFullYear()%1e4,e,4)}function ot(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+b(e/60|0,"0",2)+b(e%60,"0",2)}function st(t,e){return b(t.getUTCDate(),e,2)}function lt(t,e){return b(t.getUTCHours(),e,2)}function ut(t,e){return b(t.getUTCHours()%12||12,e,2)}function ct(t,e){return b(1+i.Z.count((0,l.Z)(t),t),e,3)}function ft(t,e){return b(t.getUTCMilliseconds(),e,3)}function ht(t,e){return ft(t,e)+"000"}function pt(t,e){return b(t.getUTCMonth()+1,e,2)}function dt(t,e){return b(t.getUTCMinutes(),e,2)}function vt(t,e){return b(t.getUTCSeconds(),e,2)}function gt(t){var e=t.getUTCDay();return 0===e?7:e}function yt(t,e){return b(n.Ox.count((0,l.Z)(t)-1,t),e,2)}function mt(t,e){var r=t.getUTCDay();return t=r>=4||0===r?(0,n.hB)(t):n.hB.ceil(t),b(n.hB.count((0,l.Z)(t),t)+(4===(0,l.Z)(t).getUTCDay()),e,2)}function xt(t){return t.getUTCDay()}function bt(t,e){return b(n.l6.count((0,l.Z)(t)-1,t),e,2)}function _t(t,e){return b(t.getUTCFullYear()%100,e,2)}function wt(t,e){return b(t.getUTCFullYear()%1e4,e,4)}function Tt(){return"+0000"}function kt(){return"%"}function At(t){return+t}function Mt(t){return Math.floor(+t/1e3)}p=h({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}),d=p.format,p.parse,v=p.utcFormat,p.utcParse},82301:function(t,e,r){"use strict";r.d(e,{a:function(){return o}});var n=r(30052),i=r(54263),a=(0,n.Z)((function(t){t.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+e)}),(function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*i.yB)/i.UD}),(function(t){return t.getDate()-1}));e.Z=a;var o=a.range},54263:function(t,e,r){"use strict";r.d(e,{UD:function(){return o},Y2:function(){return a},Ym:function(){return n},iM:function(){return s},yB:function(){return i}});var n=1e3,i=6e4,a=36e5,o=864e5,s=6048e5},81041:function(t,e,r){"use strict";r.r(e),r.d(e,{timeDay:function(){return y.Z},timeDays:function(){return y.a},timeFriday:function(){return m.mC},timeFridays:function(){return m.b$},timeHour:function(){return v},timeHours:function(){return g},timeInterval:function(){return n.Z},timeMillisecond:function(){return a},timeMilliseconds:function(){return o},timeMinute:function(){return h},timeMinutes:function(){return p},timeMonday:function(){return m.wA},timeMondays:function(){return m.bJ},timeMonth:function(){return b},timeMonths:function(){return _},timeSaturday:function(){return m.EY},timeSaturdays:function(){return m.Ff},timeSecond:function(){return u},timeSeconds:function(){return c},timeSunday:function(){return m.OM},timeSundays:function(){return m.vm},timeThursday:function(){return m.bL},timeThursdays:function(){return m.$t},timeTuesday:function(){return m.sy},timeTuesdays:function(){return m.aU},timeWednesday:function(){return m.zg},timeWednesdays:function(){return m.Ld},timeWeek:function(){return m.OM},timeWeeks:function(){return m.vm},timeYear:function(){return w.Z},timeYears:function(){return w.g},utcDay:function(){return L.Z},utcDays:function(){return L.y},utcFriday:function(){return C.QQ},utcFridays:function(){return C.fz},utcHour:function(){return S},utcHours:function(){return E},utcMillisecond:function(){return a},utcMilliseconds:function(){return o},utcMinute:function(){return k},utcMinutes:function(){return A},utcMonday:function(){return C.l6},utcMondays:function(){return C.$3},utcMonth:function(){return O},utcMonths:function(){return I},utcSaturday:function(){return C.g4},utcSaturdays:function(){return C.Q_},utcSecond:function(){return u},utcSeconds:function(){return c},utcSunday:function(){return C.Ox},utcSundays:function(){return C.SU},utcThursday:function(){return C.hB},utcThursdays:function(){return C.xj},utcTuesday:function(){return C.J1},utcTuesdays:function(){return C.DK},utcWednesday:function(){return C.b3},utcWednesdays:function(){return C.uy},utcWeek:function(){return C.Ox},utcWeeks:function(){return C.SU},utcYear:function(){return D.Z},utcYears:function(){return D.D}});var n=r(30052),i=(0,n.Z)((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?(0,n.Z)((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,r){e.setTime(+e+r*t)}),(function(e,r){return(r-e)/t})):i:null};var a=i,o=i.range,s=r(54263),l=(0,n.Z)((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+e*s.Ym)}),(function(t,e){return(e-t)/s.Ym}),(function(t){return t.getUTCSeconds()})),u=l,c=l.range,f=(0,n.Z)((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*s.Ym)}),(function(t,e){t.setTime(+t+e*s.yB)}),(function(t,e){return(e-t)/s.yB}),(function(t){return t.getMinutes()})),h=f,p=f.range,d=(0,n.Z)((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*s.Ym-t.getMinutes()*s.yB)}),(function(t,e){t.setTime(+t+e*s.Y2)}),(function(t,e){return(e-t)/s.Y2}),(function(t){return t.getHours()})),v=d,g=d.range,y=r(82301),m=r(59879),x=(0,n.Z)((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})),b=x,_=x.range,w=r(34823),T=(0,n.Z)((function(t){t.setUTCSeconds(0,0)}),(function(t,e){t.setTime(+t+e*s.yB)}),(function(t,e){return(e-t)/s.yB}),(function(t){return t.getUTCMinutes()})),k=T,A=T.range,M=(0,n.Z)((function(t){t.setUTCMinutes(0,0,0)}),(function(t,e){t.setTime(+t+e*s.Y2)}),(function(t,e){return(e-t)/s.Y2}),(function(t){return t.getUTCHours()})),S=M,E=M.range,L=r(48480),C=r(58176),P=(0,n.Z)((function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCMonth(t.getUTCMonth()+e)}),(function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())}),(function(t){return t.getUTCMonth()})),O=P,I=P.range,D=r(79791)},30052:function(t,e,r){"use strict";r.d(e,{Z:function(){return a}});var n=new Date,i=new Date;function a(t,e,r,o){function s(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return s.floor=function(e){return t(e=new Date(+e)),e},s.ceil=function(r){return t(r=new Date(r-1)),e(r,1),t(r),r},s.round=function(t){var e=s(t),r=s.ceil(t);return t-e<r-t?e:r},s.offset=function(t,r){return e(t=new Date(+t),null==r?1:Math.floor(r)),t},s.range=function(r,n,i){var a,o=[];if(r=s.ceil(r),i=null==i?1:Math.floor(i),!(r<n&&i>0))return o;do{o.push(a=new Date(+r)),e(r,i),t(r)}while(a<r&&r<n);return o},s.filter=function(r){return a((function(e){if(e>=e)for(;t(e),!r(e);)e.setTime(e-1)}),(function(t,n){if(t>=t)if(n<0)for(;++n<=0;)for(;e(t,-1),!r(t););else for(;--n>=0;)for(;e(t,1),!r(t););}))},r&&(s.count=function(e,a){return n.setTime(+e),i.setTime(+a),t(n),t(i),Math.floor(r(n,i))},s.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?s.filter(o?function(e){return o(e)%t==0}:function(e){return s.count(0,e)%t==0}):s:null}),s}},48480:function(t,e,r){"use strict";r.d(e,{y:function(){return o}});var n=r(30052),i=r(54263),a=(0,n.Z)((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/i.UD}),(function(t){return t.getUTCDate()-1}));e.Z=a;var o=a.range},58176:function(t,e,r){"use strict";r.d(e,{$3:function(){return d},DK:function(){return v},J1:function(){return l},Ox:function(){return o},QQ:function(){return f},Q_:function(){return x},SU:function(){return p},b3:function(){return u},fz:function(){return m},g4:function(){return h},hB:function(){return c},l6:function(){return s},uy:function(){return g},xj:function(){return y}});var n=r(30052),i=r(54263);function a(t){return(0,n.Z)((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/i.iM}))}var o=a(0),s=a(1),l=a(2),u=a(3),c=a(4),f=a(5),h=a(6),p=o.range,d=s.range,v=l.range,g=u.range,y=c.range,m=f.range,x=h.range},79791:function(t,e,r){"use strict";r.d(e,{D:function(){return a}});var n=r(30052),i=(0,n.Z)((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));i.every=function(t){return isFinite(t=Math.floor(t))&&t>0?(0,n.Z)((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,r){e.setUTCFullYear(e.getUTCFullYear()+r*t)})):null},e.Z=i;var a=i.range},59879:function(t,e,r){"use strict";r.d(e,{$t:function(){return y},EY:function(){return h},Ff:function(){return x},Ld:function(){return g},OM:function(){return o},aU:function(){return v},b$:function(){return m},bJ:function(){return d},bL:function(){return c},mC:function(){return f},sy:function(){return l},vm:function(){return p},wA:function(){return s},zg:function(){return u}});var n=r(30052),i=r(54263);function a(t){return(0,n.Z)((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*i.yB)/i.iM}))}var o=a(0),s=a(1),l=a(2),u=a(3),c=a(4),f=a(5),h=a(6),p=o.range,d=s.range,v=l.range,g=u.range,y=c.range,m=f.range,x=h.range},34823:function(t,e,r){"use strict";r.d(e,{g:function(){return a}});var n=r(30052),i=(0,n.Z)((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));i.every=function(t){return isFinite(t=Math.floor(t))&&t>0?(0,n.Z)((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,r){e.setFullYear(e.getFullYear()+r*t)})):null},e.Z=i;var a=i.range},17045:function(t,e,r){"use strict";var n=r(8709),i="function"==typeof Symbol&&"symbol"==typeof Symbol("foo"),a=Object.prototype.toString,o=Array.prototype.concat,s=Object.defineProperty,l=r(55622)(),u=s&&l,c=function(t,e,r,n){if(e in t)if(!0===n){if(t[e]===r)return}else if("function"!=typeof(i=n)||"[object Function]"!==a.call(i)||!n())return;var i;u?s(t,e,{configurable:!0,enumerable:!1,value:r,writable:!0}):t[e]=r},f=function(t,e){var r=arguments.length>2?arguments[2]:{},a=n(e);i&&(a=o.call(a,Object.getOwnPropertySymbols(e)));for(var s=0;s<a.length;s+=1)c(t,a[s],e[a[s]],r[a[s]])};f.supportsDescriptors=!!u,t.exports=f},46775:function(t){t.exports=function(){for(var t=0;t<arguments.length;t++)if(void 0!==arguments[t])return arguments[t]}},53545:function(t){"use strict";t.exports=n;var e=(n.canvas=document.createElement("canvas")).getContext("2d"),r=i([32,126]);function n(t,n){Array.isArray(t)&&(t=t.join(", "));var a,o={},s=16,l=.05;n&&(2===n.length&&"number"==typeof n[0]?a=i(n):Array.isArray(n)?a=n:(n.o?a=i(n.o):n.pairs&&(a=n.pairs),n.fontSize&&(s=n.fontSize),null!=n.threshold&&(l=n.threshold))),a||(a=r),e.font=s+"px "+t;for(var u=0;u<a.length;u++){var c=a[u],f=e.measureText(c[0]).width+e.measureText(c[1]).width,h=e.measureText(c).width;if(Math.abs(f-h)>s*l){var p=(h-f)/s;o[c]=1e3*p}}return o}function i(t){for(var e=[],r=t[0];r<=t[1];r++)for(var n=String.fromCharCode(r),i=t[0];i<t[1];i++){var a=n+String.fromCharCode(i);e.push(a)}return e}n.createPairs=i,n.ascii=r},31457:function(t,e,r){var n=r(65185),i=r(18625),a={M:"moveTo",C:"bezierCurveTo"};t.exports=function(t,e){t.beginPath(),i(n(e)).forEach((function(e){var r=e[0],n=e.slice(1);t[a[r]].apply(t,n)})),t.closePath()}},90660:function(t){t.exports=function(t){switch(t){case"int8":return Int8Array;case"int16":return Int16Array;case"int32":return Int32Array;case"uint8":return Uint8Array;case"uint16":return Uint16Array;case"uint32":return Uint32Array;case"float32":return Float32Array;case"float64":return Float64Array;case"array":return Array;case"uint8_clamped":return Uint8ClampedArray}}},12129:function(t){"use strict";function e(t,r,n){var i=0|t[n];if(i<=0)return[];var a,o=new Array(i);if(n===t.length-1)for(a=0;a<i;++a)o[a]=r;else for(a=0;a<i;++a)o[a]=e(t,r,n+1);return o}t.exports=function(t,r){switch(void 0===r&&(r=0),typeof t){case"number":if(t>0)return function(t,e){var r,n;for(r=new Array(t),n=0;n<t;++n)r[n]=e;return r}(0|t,r);break;case"object":if("number"==typeof t.length)return e(t,r,0)}return[]}},11474:function(t){"use strict";function e(t,e,a){a=a||2;var o,s,l,f,h,d,v,g=e&&e.length,y=g?e[0]*a:t.length,m=r(t,0,y,a,!0),x=[];if(!m||m.next===m.prev)return x;if(g&&(m=function(t,e,i,a){var o,s,l,f=[];for(o=0,s=e.length;o<s;o++)(l=r(t,e[o]*a,o<s-1?e[o+1]*a:t.length,a,!1))===l.next&&(l.steiner=!0),f.push(p(l));for(f.sort(u),o=0;o<f.length;o++)c(f[o],i),i=n(i,i.next);return i}(t,e,m,a)),t.length>80*a){o=l=t[0],s=f=t[1];for(var b=a;b<y;b+=a)(h=t[b])<o&&(o=h),(d=t[b+1])<s&&(s=d),h>l&&(l=h),d>f&&(f=d);v=0!==(v=Math.max(l-o,f-s))?1/v:0}return i(m,x,a,o,s,v),x}function r(t,e,r,n,i){var a,o;if(i===M(t,e,r,n)>0)for(a=e;a<r;a+=n)o=T(a,t[a],t[a+1],o);else for(a=r-n;a>=e;a-=n)o=T(a,t[a],t[a+1],o);return o&&y(o,o.next)&&(k(o),o=o.next),o}function n(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!y(n,n.next)&&0!==g(n.prev,n,n.next))n=n.next;else{if(k(n),(n=e=n.prev)===n.next)break;r=!0}}while(r||n!==e);return e}function i(t,e,r,u,c,f,p){if(t){!p&&f&&function(t,e,r,n){var i=t;do{null===i.z&&(i.z=h(i.x,i.y,e,r,n)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,r,n,i,a,o,s,l,u=1;do{for(r=t,t=null,a=null,o=0;r;){for(o++,n=r,s=0,e=0;e<u&&(s++,n=n.nextZ);e++);for(l=u;s>0||l>0&&n;)0!==s&&(0===l||!n||r.z<=n.z)?(i=r,r=r.nextZ,s--):(i=n,n=n.nextZ,l--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;r=n}a.nextZ=null,u*=2}while(o>1)}(i)}(t,u,c,f);for(var d,v,g=t;t.prev!==t.next;)if(d=t.prev,v=t.next,f?o(t,u,c,f):a(t))e.push(d.i/r),e.push(t.i/r),e.push(v.i/r),k(t),t=v.next,g=v.next;else if((t=v)===g){p?1===p?i(t=s(n(t),e,r),e,r,u,c,f,2):2===p&&l(t,e,r,u,c,f):i(n(t),e,r,u,c,f,1);break}}}function a(t){var e=t.prev,r=t,n=t.next;if(g(e,r,n)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(d(e.x,e.y,r.x,r.y,n.x,n.y,i.x,i.y)&&g(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function o(t,e,r,n){var i=t.prev,a=t,o=t.next;if(g(i,a,o)>=0)return!1;for(var s=i.x<a.x?i.x<o.x?i.x:o.x:a.x<o.x?a.x:o.x,l=i.y<a.y?i.y<o.y?i.y:o.y:a.y<o.y?a.y:o.y,u=i.x>a.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,c=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,f=h(s,l,e,r,n),p=h(u,c,e,r,n),v=t.prevZ,y=t.nextZ;v&&v.z>=f&&y&&y.z<=p;){if(v!==t.prev&&v!==t.next&&d(i.x,i.y,a.x,a.y,o.x,o.y,v.x,v.y)&&g(v.prev,v,v.next)>=0)return!1;if(v=v.prevZ,y!==t.prev&&y!==t.next&&d(i.x,i.y,a.x,a.y,o.x,o.y,y.x,y.y)&&g(y.prev,y,y.next)>=0)return!1;y=y.nextZ}for(;v&&v.z>=f;){if(v!==t.prev&&v!==t.next&&d(i.x,i.y,a.x,a.y,o.x,o.y,v.x,v.y)&&g(v.prev,v,v.next)>=0)return!1;v=v.prevZ}for(;y&&y.z<=p;){if(y!==t.prev&&y!==t.next&&d(i.x,i.y,a.x,a.y,o.x,o.y,y.x,y.y)&&g(y.prev,y,y.next)>=0)return!1;y=y.nextZ}return!0}function s(t,e,r){var i=t;do{var a=i.prev,o=i.next.next;!y(a,o)&&m(a,i,i.next,o)&&_(a,o)&&_(o,a)&&(e.push(a.i/r),e.push(i.i/r),e.push(o.i/r),k(i),k(i.next),i=t=o),i=i.next}while(i!==t);return n(i)}function l(t,e,r,a,o,s){var l=t;do{for(var u=l.next.next;u!==l.prev;){if(l.i!==u.i&&v(l,u)){var c=w(l,u);return l=n(l,l.next),c=n(c,c.next),i(l,e,r,a,o,s),void i(c,e,r,a,o,s)}u=u.next}l=l.next}while(l!==t)}function u(t,e){return t.x-e.x}function c(t,e){if(e=function(t,e){var r,n=e,i=t.x,a=t.y,o=-1/0;do{if(a<=n.y&&a>=n.next.y&&n.next.y!==n.y){var s=n.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=i&&s>o){if(o=s,s===i){if(a===n.y)return n;if(a===n.next.y)return n.next}r=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!r)return null;if(i===o)return r;var l,u=r,c=r.x,h=r.y,p=1/0;n=r;do{i>=n.x&&n.x>=c&&i!==n.x&&d(a<h?i:o,a,c,h,a<h?o:i,a,n.x,n.y)&&(l=Math.abs(a-n.y)/(i-n.x),_(n,t)&&(l<p||l===p&&(n.x>r.x||n.x===r.x&&f(r,n)))&&(r=n,p=l)),n=n.next}while(n!==u);return r}(t,e),e){var r=w(e,t);n(e,e.next),n(r,r.next)}}function f(t,e){return g(t.prev,t,e.prev)<0&&g(e.next,t,t.next)<0}function h(t,e,r,n,i){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function p(t){var e=t,r=t;do{(e.x<r.x||e.x===r.x&&e.y<r.y)&&(r=e),e=e.next}while(e!==t);return r}function d(t,e,r,n,i,a,o,s){return(i-o)*(e-s)-(t-o)*(a-s)>=0&&(t-o)*(n-s)-(r-o)*(e-s)>=0&&(r-o)*(a-s)-(i-o)*(n-s)>=0}function v(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&m(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}(t,e)&&(_(t,e)&&_(e,t)&&function(t,e){var r=t,n=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{r.y>a!=r.next.y>a&&r.next.y!==r.y&&i<(r.next.x-r.x)*(a-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next}while(r!==t);return n}(t,e)&&(g(t.prev,t,e.prev)||g(t,e.prev,e))||y(t,e)&&g(t.prev,t,t.next)>0&&g(e.prev,e,e.next)>0)}function g(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function y(t,e){return t.x===e.x&&t.y===e.y}function m(t,e,r,n){var i=b(g(t,e,r)),a=b(g(t,e,n)),o=b(g(r,n,t)),s=b(g(r,n,e));return i!==a&&o!==s||!(0!==i||!x(t,r,e))||!(0!==a||!x(t,n,e))||!(0!==o||!x(r,t,n))||!(0!==s||!x(r,e,n))}function x(t,e,r){return e.x<=Math.max(t.x,r.x)&&e.x>=Math.min(t.x,r.x)&&e.y<=Math.max(t.y,r.y)&&e.y>=Math.min(t.y,r.y)}function b(t){return t>0?1:t<0?-1:0}function _(t,e){return g(t.prev,t,t.next)<0?g(t,e,t.next)>=0&&g(t,t.prev,e)>=0:g(t,e,t.prev)<0||g(t,t.next,e)<0}function w(t,e){var r=new A(t.i,t.x,t.y),n=new A(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,r.next=i,i.prev=r,n.next=r,r.prev=n,a.next=n,n.prev=a,n}function T(t,e,r,n){var i=new A(t,e,r);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function k(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function A(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function M(t,e,r,n){for(var i=0,a=e,o=r-n;a<r;a+=n)i+=(t[o]-t[a])*(t[a+1]+t[o+1]),o=a;return i}t.exports=e,t.exports.default=e,e.deviation=function(t,e,r,n){var i=e&&e.length,a=i?e[0]*r:t.length,o=Math.abs(M(t,0,a,r));if(i)for(var s=0,l=e.length;s<l;s++){var u=e[s]*r,c=s<l-1?e[s+1]*r:t.length;o-=Math.abs(M(t,u,c,r))}var f=0;for(s=0;s<n.length;s+=3){var h=n[s]*r,p=n[s+1]*r,d=n[s+2]*r;f+=Math.abs((t[h]-t[d])*(t[p+1]-t[h+1])-(t[h]-t[p])*(t[d+1]-t[h+1]))}return 0===o&&0===f?0:Math.abs((f-o)/o)},e.flatten=function(t){for(var e=t[0][0].length,r={vertices:[],holes:[],dimensions:e},n=0,i=0;i<t.length;i++){for(var a=0;a<t[i].length;a++)for(var o=0;o<e;o++)r.vertices.push(t[i][a][o]);i>0&&(n+=t[i-1].length,r.holes.push(n))}return r}},2502:function(t,e,r){var n=r(68664);t.exports=function(t,e){var r,i=[],a=[],o=[],s={},l=[];function u(t){o[t]=!1,s.hasOwnProperty(t)&&Object.keys(s[t]).forEach((function(e){delete s[t][e],o[e]&&u(e)}))}function c(t){var e,n,i=!1;for(a.push(t),o[t]=!0,e=0;e<l[t].length;e++)(n=l[t][e])===r?(f(r,a),i=!0):o[n]||(i=c(n));if(i)u(t);else for(e=0;e<l[t].length;e++){n=l[t][e];var h=s[n];h||(h={},s[n]=h),h[n]=!0}return a.pop(),i}function f(t,r){var n=[].concat(r).concat(t);e?e(c):i.push(n)}function h(e){!function(e){for(var r=0;r<t.length;r++)r<e&&(t[r]=[]),t[r]=t[r].filter((function(t){return t>=e}))}(e);for(var r,i=n(t).components.filter((function(t){return t.length>1})),a=1/0,o=0;o<i.length;o++)for(var s=0;s<i[o].length;s++)i[o][s]<a&&(a=i[o][s],r=o);var l=i[r];if(!l)return!1;var u=t.map((function(t,e){return-1===l.indexOf(e)?[]:t.filter((function(t){return-1!==l.indexOf(t)}))}));return{leastVertex:a,adjList:u}}r=0;for(var p=t.length;r<p;){var d=h(r);if(r=d.leastVertex,l=d.adjList){for(var v=0;v<l.length;v++)for(var g=0;g<l[v].length;g++){var y=l[v][g];o[+y]=!1,s[y]={}}c(r),r+=1}else r=p}return e?void 0:i}},16134:function(t,e,r){"use strict";var n=r(36672);t.exports=function(){return n(this).length=0,this}},4892:function(t,e,r){"use strict";t.exports=r(64404)()?Array.from:r(49441)},64404:function(t){"use strict";t.exports=function(){var t,e,r=Array.from;return"function"==typeof r&&(e=r(t=["raz","dwa"]),Boolean(e&&e!==t&&"dwa"===e[1]))}},49441:function(t,e,r){"use strict";var n=r(8260).iterator,i=r(73051),a=r(33717),o=r(35976),s=r(78513),l=r(36672),u=r(95296),c=r(87963),f=Array.isArray,h=Function.prototype.call,p={configurable:!0,enumerable:!0,writable:!0,value:null},d=Object.defineProperty;t.exports=function(t){var e,r,v,g,y,m,x,b,_,w,T=arguments[1],k=arguments[2];if(t=Object(l(t)),u(T)&&s(T),this&&this!==Array&&a(this))e=this;else{if(!T){if(i(t))return 1!==(y=t.length)?Array.apply(null,t):((g=new Array(1))[0]=t[0],g);if(f(t)){for(g=new Array(y=t.length),r=0;r<y;++r)g[r]=t[r];return g}}g=[]}if(!f(t))if(void 0!==(_=t[n])){for(x=s(_).call(t),e&&(g=new e),b=x.next(),r=0;!b.done;)w=T?h.call(T,k,b.value,r):b.value,e?(p.value=w,d(g,r,p)):g[r]=w,b=x.next(),++r;y=r}else if(c(t)){for(y=t.length,e&&(g=new e),r=0,v=0;r<y;++r)w=t[r],r+1<y&&(m=w.charCodeAt(0))>=55296&&m<=56319&&(w+=t[++r]),w=T?h.call(T,k,w,v):w,e?(p.value=w,d(g,v,p)):g[v]=w,++v;y=v}if(void 0===y)for(y=o(t.length),e&&(g=new e(y)),r=0;r<y;++r)w=T?h.call(T,k,t[r],r):t[r],e?(p.value=w,d(g,r,p)):g[r]=w;return e&&(p.value=null,g.length=y),g}},73051:function(t){"use strict";var e=Object.prototype.toString,r=e.call(function(){return arguments}());t.exports=function(t){return e.call(t)===r}},33717:function(t){"use strict";var e=Object.prototype.toString,r=RegExp.prototype.test.bind(/^[object [A-Za-z0-9]*Function]$/);t.exports=function(t){return"function"==typeof t&&r(e.call(t))}},52345:function(t){"use strict";t.exports=function(){}},9953:function(t,e,r){"use strict";t.exports=r(90436)()?Math.sign:r(6069)},90436:function(t){"use strict";t.exports=function(){var t=Math.sign;return"function"==typeof t&&1===t(10)&&-1===t(-20)}},6069:function(t){"use strict";t.exports=function(t){return t=Number(t),isNaN(t)||0===t?t:t>0?1:-1}},56247:function(t,e,r){"use strict";var n=r(9953),i=Math.abs,a=Math.floor;t.exports=function(t){return isNaN(t)?0:0!==(t=Number(t))&&isFinite(t)?n(t)*a(i(t)):t}},35976:function(t,e,r){"use strict";var n=r(56247),i=Math.max;t.exports=function(t){return i(0,n(t))}},67260:function(t,e,r){"use strict";var n=r(78513),i=r(36672),a=Function.prototype.bind,o=Function.prototype.call,s=Object.keys,l=Object.prototype.propertyIsEnumerable;t.exports=function(t,e){return function(r,u){var c,f=arguments[2],h=arguments[3];return r=Object(i(r)),n(u),c=s(r),h&&c.sort("function"==typeof h?a.call(h,r):void 0),"function"!=typeof t&&(t=c[t]),o.call(t,c,(function(t,n){return l.call(r,t)?o.call(u,f,r[t],t,r,n):e}))}}},95879:function(t,e,r){"use strict";t.exports=r(73583)()?Object.assign:r(34205)},73583:function(t){"use strict";t.exports=function(){var t,e=Object.assign;return"function"==typeof e&&(e(t={foo:"raz"},{bar:"dwa"},{trzy:"trzy"}),t.foo+t.bar+t.trzy==="razdwatrzy")}},34205:function(t,e,r){"use strict";var n=r(68700),i=r(36672),a=Math.max;t.exports=function(t,e){var r,o,s,l=a(arguments.length,2);for(t=Object(i(t)),s=function(n){try{t[n]=e[n]}catch(t){r||(r=t)}},o=1;o<l;++o)n(e=arguments[o]).forEach(s);if(void 0!==r)throw r;return t}},19012:function(t,e,r){"use strict";var n=r(4892),i=r(95879),a=r(36672);t.exports=function(t){var e=Object(a(t)),r=arguments[1],o=Object(arguments[2]);if(e!==t&&!r)return e;var s={};return r?n(r,(function(e){(o.ensure||e in t)&&(s[e]=t[e])})):i(s,t),s}},52818:function(t,e,r){"use strict";var n,i,a,o,s=Object.create;r(33247)()||(n=r(51882)),t.exports=n?1!==n.level?s:(i={},a={},o={configurable:!1,enumerable:!1,writable:!0,value:void 0},Object.getOwnPropertyNames(Object.prototype).forEach((function(t){a[t]="__proto__"!==t?o:{configurable:!0,enumerable:!1,writable:!0,value:void 0}})),Object.defineProperties(i,a),Object.defineProperty(n,"nullPolyfill",{configurable:!1,enumerable:!1,writable:!1,value:i}),function(t,e){return s(null===t?i:t,e)}):s},96437:function(t,e,r){"use strict";t.exports=r(67260)("forEach")},99611:function(t,e,r){"use strict";var n=r(95296),i={function:!0,object:!0};t.exports=function(t){return n(t)&&i[typeof t]||!1}},95296:function(t,e,r){"use strict";var n=r(52345)();t.exports=function(t){return t!==n&&null!==t}},68700:function(t,e,r){"use strict";t.exports=r(13895)()?Object.keys:r(25217)},13895:function(t){"use strict";t.exports=function(){try{return Object.keys("primitive"),!0}catch(t){return!1}}},25217:function(t,e,r){"use strict";var n=r(95296),i=Object.keys;t.exports=function(t){return i(n(t)?Object(t):t)}},16906:function(t,e,r){"use strict";var n=r(78513),i=r(96437),a=Function.prototype.call;t.exports=function(t,e){var r={},o=arguments[2];return n(e),i(t,(function(t,n,i,s){r[n]=a.call(e,o,t,n,i,s)})),r}},21780:function(t,e,r){"use strict";var n=r(95296),i=Array.prototype.forEach,a=Object.create;t.exports=function(t){var e=a(null);return i.call(arguments,(function(t){n(t)&&function(t,e){var r;for(r in t)e[r]=t[r]}(Object(t),e)})),e}},1496:function(t,e,r){"use strict";t.exports=r(33247)()?Object.setPrototypeOf:r(51882)},33247:function(t){"use strict";var e=Object.create,r=Object.getPrototypeOf,n={};t.exports=function(){var t=Object.setPrototypeOf;return"function"==typeof t&&r(t((arguments[0]||e)(null),n))===n}},51882:function(t,e,r){"use strict";var n,i,a,o,s=r(99611),l=r(36672),u=Object.prototype.isPrototypeOf,c=Object.defineProperty,f={configurable:!0,enumerable:!1,writable:!0,value:void 0};n=function(t,e){if(l(t),null===e||s(e))return t;throw new TypeError("Prototype must be null or an object")},t.exports=(i=function(){var t,e=Object.create(null),r={},n=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__");if(n){try{(t=n.set).call(e,r)}catch(t){}if(Object.getPrototypeOf(e)===r)return{set:t,level:2}}return e.__proto__=r,Object.getPrototypeOf(e)===r?{level:2}:((e={}).__proto__=r,Object.getPrototypeOf(e)===r&&{level:1})}(),i?(2===i.level?i.set?(o=i.set,a=function(t,e){return o.call(n(t,e),e),t}):a=function(t,e){return n(t,e).__proto__=e,t}:a=function t(e,r){var i;return n(e,r),(i=u.call(t.nullPolyfill,e))&&delete t.nullPolyfill.__proto__,null===r&&(r=t.nullPolyfill),e.__proto__=r,i&&c(t.nullPolyfill,"__proto__",f),e},Object.defineProperty(a,"level",{configurable:!1,enumerable:!1,writable:!1,value:i.level})):null),r(52818)},78513:function(t){"use strict";t.exports=function(t){if("function"!=typeof t)throw new TypeError(t+" is not a function");return t}},98976:function(t,e,r){"use strict";var n=r(99611);t.exports=function(t){if(!n(t))throw new TypeError(t+" is not an Object");return t}},36672:function(t,e,r){"use strict";var n=r(95296);t.exports=function(t){if(!n(t))throw new TypeError("Cannot use null or undefined");return t}},66741:function(t,e,r){"use strict";t.exports=r(17557)()?String.prototype.contains:r(60381)},17557:function(t){"use strict";var e="razdwatrzy";t.exports=function(){return"function"==typeof e.contains&&!0===e.contains("dwa")&&!1===e.contains("foo")}},60381:function(t){"use strict";var e=String.prototype.indexOf;t.exports=function(t){return e.call(this,t,arguments[1])>-1}},87963:function(t){"use strict";var e=Object.prototype.toString,r=e.call("");t.exports=function(t){return"string"==typeof t||t&&"object"==typeof t&&(t instanceof String||e.call(t)===r)||!1}},43043:function(t){"use strict";var e=Object.create(null),r=Math.random;t.exports=function(){var t;do{t=r().toString(36).slice(2)}while(e[t]);return t}},32411:function(t,e,r){"use strict";var n,i=r(1496),a=r(66741),o=r(62072),s=r(8260),l=r(95426),u=Object.defineProperty;n=t.exports=function(t,e){if(!(this instanceof n))throw new TypeError("Constructor requires 'new'");l.call(this,t),e=e?a.call(e,"key+value")?"key+value":a.call(e,"key")?"key":"value":"value",u(this,"__kind__",o("",e))},i&&i(n,l),delete n.prototype.constructor,n.prototype=Object.create(l.prototype,{_resolve:o((function(t){return"value"===this.__kind__?this.__list__[t]:"key+value"===this.__kind__?[t,this.__list__[t]]:t}))}),u(n.prototype,s.toStringTag,o("c","Array Iterator"))},27515:function(t,e,r){"use strict";var n=r(73051),i=r(78513),a=r(87963),o=r(66661),s=Array.isArray,l=Function.prototype.call,u=Array.prototype.some;t.exports=function(t,e){var r,c,f,h,p,d,v,g,y=arguments[2];if(s(t)||n(t)?r="array":a(t)?r="string":t=o(t),i(e),f=function(){h=!0},"array"!==r)if("string"!==r)for(c=t.next();!c.done;){if(l.call(e,y,c.value,f),h)return;c=t.next()}else for(d=t.length,p=0;p<d&&(v=t[p],p+1<d&&(g=v.charCodeAt(0))>=55296&&g<=56319&&(v+=t[++p]),l.call(e,y,v,f),!h);++p);else u.call(t,(function(t){return l.call(e,y,t,f),h}))}},66661:function(t,e,r){"use strict";var n=r(73051),i=r(87963),a=r(32411),o=r(259),s=r(58095),l=r(8260).iterator;t.exports=function(t){return"function"==typeof s(t)[l]?t[l]():n(t)?new a(t):i(t)?new o(t):new a(t)}},95426:function(t,e,r){"use strict";var n,i=r(16134),a=r(95879),o=r(78513),s=r(36672),l=r(62072),u=r(55174),c=r(8260),f=Object.defineProperty,h=Object.defineProperties;t.exports=n=function(t,e){if(!(this instanceof n))throw new TypeError("Constructor requires 'new'");h(this,{__list__:l("w",s(t)),__context__:l("w",e),__nextIndex__:l("w",0)}),e&&(o(e.on),e.on("_add",this._onAdd),e.on("_delete",this._onDelete),e.on("_clear",this._onClear))},delete n.prototype.constructor,h(n.prototype,a({_next:l((function(){var t;if(this.__list__)return this.__redo__&&void 0!==(t=this.__redo__.shift())?t:this.__nextIndex__<this.__list__.length?this.__nextIndex__++:void this._unBind()})),next:l((function(){return this._createResult(this._next())})),_createResult:l((function(t){return void 0===t?{done:!0,value:void 0}:{done:!1,value:this._resolve(t)}})),_resolve:l((function(t){return this.__list__[t]})),_unBind:l((function(){this.__list__=null,delete this.__redo__,this.__context__&&(this.__context__.off("_add",this._onAdd),this.__context__.off("_delete",this._onDelete),this.__context__.off("_clear",this._onClear),this.__context__=null)})),toString:l((function(){return"[object "+(this[c.toStringTag]||"Object")+"]"}))},u({_onAdd:l((function(t){t>=this.__nextIndex__||(++this.__nextIndex__,this.__redo__?(this.__redo__.forEach((function(e,r){e>=t&&(this.__redo__[r]=++e)}),this),this.__redo__.push(t)):f(this,"__redo__",l("c",[t])))})),_onDelete:l((function(t){var e;t>=this.__nextIndex__||(--this.__nextIndex__,this.__redo__&&(-1!==(e=this.__redo__.indexOf(t))&&this.__redo__.splice(e,1),this.__redo__.forEach((function(e,r){e>t&&(this.__redo__[r]=--e)}),this)))})),_onClear:l((function(){this.__redo__&&i.call(this.__redo__),this.__nextIndex__=0}))}))),f(n.prototype,c.iterator,l((function(){return this})))},35940:function(t,e,r){"use strict";var n=r(73051),i=r(95296),a=r(87963),o=r(8260).iterator,s=Array.isArray;t.exports=function(t){return!(!i(t)||!s(t)&&!a(t)&&!n(t)&&"function"!=typeof t[o])}},259:function(t,e,r){"use strict";var n,i=r(1496),a=r(62072),o=r(8260),s=r(95426),l=Object.defineProperty;n=t.exports=function(t){if(!(this instanceof n))throw new TypeError("Constructor requires 'new'");t=String(t),s.call(this,t),l(this,"__length__",a("",t.length))},i&&i(n,s),delete n.prototype.constructor,n.prototype=Object.create(s.prototype,{_next:a((function(){if(this.__list__)return this.__nextIndex__<this.__length__?this.__nextIndex__++:void this._unBind()})),_resolve:a((function(t){var e,r=this.__list__[t];return this.__nextIndex__===this.__length__?r:(e=r.charCodeAt(0))>=55296&&e<=56319?r+this.__list__[this.__nextIndex__++]:r}))}),l(n.prototype,o.toStringTag,a("c","String Iterator"))},58095:function(t,e,r){"use strict";var n=r(35940);t.exports=function(t){if(!n(t))throw new TypeError(t+" is not iterable");return t}},73523:function(t){"use strict";function e(t,e){if(null==t)throw new TypeError("Cannot convert first argument to object");for(var r=Object(t),n=1;n<arguments.length;n++){var i=arguments[n];if(null!=i)for(var a=Object.keys(Object(i)),o=0,s=a.length;o<s;o++){var l=a[o],u=Object.getOwnPropertyDescriptor(i,l);void 0!==u&&u.enumerable&&(r[l]=i[l])}}return r}t.exports={assign:e,polyfill:function(){Object.assign||Object.defineProperty(Object,"assign",{enumerable:!1,configurable:!0,writable:!0,value:e})}}},8260:function(t,e,r){"use strict";t.exports=r(69711)()?r(94908).Symbol:r(18415)},69711:function(t,e,r){"use strict";var n=r(94908),i={object:!0,symbol:!0};t.exports=function(){var t,e=n.Symbol;if("function"!=typeof e)return!1;t=e("test symbol");try{String(t)}catch(t){return!1}return!!i[typeof e.iterator]&&!!i[typeof e.toPrimitive]&&!!i[typeof e.toStringTag]}},82276:function(t){"use strict";t.exports=function(t){return!!t&&("symbol"==typeof t||!!t.constructor&&"Symbol"===t.constructor.name&&"Symbol"===t[t.constructor.toStringTag])}},29366:function(t,e,r){"use strict";var n=r(62072),i=Object.create,a=Object.defineProperty,o=Object.prototype,s=i(null);t.exports=function(t){for(var e,r,i=0;s[t+(i||"")];)++i;return s[t+=i||""]=!0,a(o,e="@@"+t,n.gs(null,(function(t){r||(r=!0,a(this,e,n(t)),r=!1)}))),e}},92842:function(t,e,r){"use strict";var n=r(62072),i=r(94908).Symbol;t.exports=function(t){return Object.defineProperties(t,{hasInstance:n("",i&&i.hasInstance||t("hasInstance")),isConcatSpreadable:n("",i&&i.isConcatSpreadable||t("isConcatSpreadable")),iterator:n("",i&&i.iterator||t("iterator")),match:n("",i&&i.match||t("match")),replace:n("",i&&i.replace||t("replace")),search:n("",i&&i.search||t("search")),species:n("",i&&i.species||t("species")),split:n("",i&&i.split||t("split")),toPrimitive:n("",i&&i.toPrimitive||t("toPrimitive")),toStringTag:n("",i&&i.toStringTag||t("toStringTag")),unscopables:n("",i&&i.unscopables||t("unscopables"))})}},13304:function(t,e,r){"use strict";var n=r(62072),i=r(53308),a=Object.create(null);t.exports=function(t){return Object.defineProperties(t,{for:n((function(e){return a[e]?a[e]:a[e]=t(String(e))})),keyFor:n((function(t){var e;for(e in i(t),a)if(a[e]===t)return e}))})}},18415:function(t,e,r){"use strict";var n,i,a,o=r(62072),s=r(53308),l=r(94908).Symbol,u=r(29366),c=r(92842),f=r(13304),h=Object.create,p=Object.defineProperties,d=Object.defineProperty;if("function"==typeof l)try{String(l()),a=!0}catch(t){}else l=null;i=function(t){if(this instanceof i)throw new TypeError("Symbol is not a constructor");return n(t)},t.exports=n=function t(e){var r;if(this instanceof t)throw new TypeError("Symbol is not a constructor");return a?l(e):(r=h(i.prototype),e=void 0===e?"":String(e),p(r,{__description__:o("",e),__name__:o("",u(e))}))},c(n),f(n),p(i.prototype,{constructor:o(n),toString:o("",(function(){return this.__name__}))}),p(n.prototype,{toString:o((function(){return"Symbol ("+s(this).__description__+")"})),valueOf:o((function(){return s(this)}))}),d(n.prototype,n.toPrimitive,o("",(function(){var t=s(this);return"symbol"==typeof t?t:t.toString()}))),d(n.prototype,n.toStringTag,o("c","Symbol")),d(i.prototype,n.toStringTag,o("c",n.prototype[n.toStringTag])),d(i.prototype,n.toPrimitive,o("c",n.prototype[n.toPrimitive]))},53308:function(t,e,r){"use strict";var n=r(82276);t.exports=function(t){if(!n(t))throw new TypeError(t+" is not a symbol");return t}},83522:function(t,e,r){"use strict";t.exports=r(96402)()?WeakMap:r(329)},96402:function(t){"use strict";t.exports=function(){var t,e;if("function"!=typeof WeakMap)return!1;try{t=new WeakMap([[e={},"one"],[{},"two"],[{},"three"]])}catch(t){return!1}return"[object WeakMap]"===String(t)&&"function"==typeof t.set&&t.set({},1)===t&&"function"==typeof t.delete&&"function"==typeof t.has&&"one"===t.get(e)}},96416:function(t){"use strict";t.exports="function"==typeof WeakMap&&"[object WeakMap]"===Object.prototype.toString.call(new WeakMap)},329:function(t,e,r){"use strict";var n,i=r(95296),a=r(1496),o=r(98976),s=r(36672),l=r(43043),u=r(62072),c=r(66661),f=r(27515),h=r(8260).toStringTag,p=r(96416),d=Array.isArray,v=Object.defineProperty,g=Object.prototype.hasOwnProperty,y=Object.getPrototypeOf;t.exports=n=function(){var t,e=arguments[0];if(!(this instanceof n))throw new TypeError("Constructor requires 'new'");return t=p&&a&&WeakMap!==n?a(new WeakMap,y(this)):this,i(e)&&(d(e)||(e=c(e))),v(t,"__weakMapData__",u("c","$weakMap$"+l())),e?(f(e,(function(e){s(e),t.set(e[0],e[1])})),t):t},p&&(a&&a(n,WeakMap),n.prototype=Object.create(WeakMap.prototype,{constructor:u(n)})),Object.defineProperties(n.prototype,{delete:u((function(t){return!!g.call(o(t),this.__weakMapData__)&&(delete t[this.__weakMapData__],!0)})),get:u((function(t){if(g.call(o(t),this.__weakMapData__))return t[this.__weakMapData__]})),has:u((function(t){return g.call(o(t),this.__weakMapData__)})),set:u((function(t,e){return v(o(t),this.__weakMapData__,u("c",e)),this})),toString:u((function(){return"[object WeakMap]"}))}),v(n.prototype,h,u("c","WeakMap"))},15398:function(t){"use strict";var e,r="object"==typeof Reflect?Reflect:null,n=r&&"function"==typeof r.apply?r.apply:function(t,e,r){return Function.prototype.apply.call(t,e,r)};e=r&&"function"==typeof r.ownKeys?r.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var i=Number.isNaN||function(t){return t!=t};function a(){a.init.call(this)}t.exports=a,t.exports.once=function(t,e){return new Promise((function(r,n){function i(r){t.removeListener(e,a),n(r)}function a(){"function"==typeof t.removeListener&&t.removeListener("error",i),r([].slice.call(arguments))}v(t,e,a,{once:!0}),"error"!==e&&function(t,e,r){"function"==typeof t.on&&v(t,"error",e,{once:!0})}(t,i)}))},a.EventEmitter=a,a.prototype._events=void 0,a.prototype._eventsCount=0,a.prototype._maxListeners=void 0;var o=10;function s(t){if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}function l(t){return void 0===t._maxListeners?a.defaultMaxListeners:t._maxListeners}function u(t,e,r,n){var i,a,o,u;if(s(r),void 0===(a=t._events)?(a=t._events=Object.create(null),t._eventsCount=0):(void 0!==a.newListener&&(t.emit("newListener",e,r.listener?r.listener:r),a=t._events),o=a[e]),void 0===o)o=a[e]=r,++t._eventsCount;else if("function"==typeof o?o=a[e]=n?[r,o]:[o,r]:n?o.unshift(r):o.push(r),(i=l(t))>0&&o.length>i&&!o.warned){o.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=t,c.type=e,c.count=o.length,u=c,console&&console.warn&&console.warn(u)}return t}function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},i=c.bind(n);return i.listener=r,n.wrapFn=i,i}function h(t,e,r){var n=t._events;if(void 0===n)return[];var i=n[e];return void 0===i?[]:"function"==typeof i?r?[i.listener||i]:[i]:r?function(t){for(var e=new Array(t.length),r=0;r<e.length;++r)e[r]=t[r].listener||t[r];return e}(i):d(i,i.length)}function p(t){var e=this._events;if(void 0!==e){var r=e[t];if("function"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function d(t,e){for(var r=new Array(e),n=0;n<e;++n)r[n]=t[n];return r}function v(t,e,r,n){if("function"==typeof t.on)n.once?t.once(e,r):t.on(e,r);else{if("function"!=typeof t.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof t);t.addEventListener(e,(function i(a){n.once&&t.removeEventListener(e,i),r(a)}))}}Object.defineProperty(a,"defaultMaxListeners",{enumerable:!0,get:function(){return o},set:function(t){if("number"!=typeof t||t<0||i(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");o=t}}),a.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},a.prototype.setMaxListeners=function(t){if("number"!=typeof t||t<0||i(t))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+t+".");return this._maxListeners=t,this},a.prototype.getMaxListeners=function(){return l(this)},a.prototype.emit=function(t){for(var e=[],r=1;r<arguments.length;r++)e.push(arguments[r]);var i="error"===t,a=this._events;if(void 0!==a)i=i&&void 0===a.error;else if(!i)return!1;if(i){var o;if(e.length>0&&(o=e[0]),o instanceof Error)throw o;var s=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw s.context=o,s}var l=a[t];if(void 0===l)return!1;if("function"==typeof l)n(l,this,e);else{var u=l.length,c=d(l,u);for(r=0;r<u;++r)n(c[r],this,e)}return!0},a.prototype.addListener=function(t,e){return u(this,t,e,!1)},a.prototype.on=a.prototype.addListener,a.prototype.prependListener=function(t,e){return u(this,t,e,!0)},a.prototype.once=function(t,e){return s(e),this.on(t,f(this,t,e)),this},a.prototype.prependOnceListener=function(t,e){return s(e),this.prependListener(t,f(this,t,e)),this},a.prototype.removeListener=function(t,e){var r,n,i,a,o;if(s(e),void 0===(n=this._events))return this;if(void 0===(r=n[t]))return this;if(r===e||r.listener===e)0==--this._eventsCount?this._events=Object.create(null):(delete n[t],n.removeListener&&this.emit("removeListener",t,r.listener||e));else if("function"!=typeof r){for(i=-1,a=r.length-1;a>=0;a--)if(r[a]===e||r[a].listener===e){o=r[a].listener,i=a;break}if(i<0)return this;0===i?r.shift():function(t,e){for(;e+1<t.length;e++)t[e]=t[e+1];t.pop()}(r,i),1===r.length&&(n[t]=r[0]),void 0!==n.removeListener&&this.emit("removeListener",t,o||e)}return this},a.prototype.off=a.prototype.removeListener,a.prototype.removeAllListeners=function(t){var e,r,n;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[t]&&(0==--this._eventsCount?this._events=Object.create(null):delete r[t]),this;if(0===arguments.length){var i,a=Object.keys(r);for(n=0;n<a.length;++n)"removeListener"!==(i=a[n])&&this.removeAllListeners(i);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(e=r[t]))this.removeListener(t,e);else if(void 0!==e)for(n=e.length-1;n>=0;n--)this.removeListener(t,e[n]);return this},a.prototype.listeners=function(t){return h(this,t,!0)},a.prototype.rawListeners=function(t){return h(this,t,!1)},a.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):p.call(t,e)},a.prototype.listenerCount=p,a.prototype.eventNames=function(){return this._eventsCount>0?e(this._events):[]}},60774:function(t){var e=function(){if("object"==typeof self&&self)return self;if("object"==typeof window&&window)return window;throw new Error("Unable to resolve global `this`")};t.exports=function(){if(this)return this;try{Object.defineProperty(Object.prototype,"__global__",{get:function(){return this},configurable:!0})}catch(t){return e()}try{return __global__||e()}finally{delete Object.prototype.__global__}}()},94908:function(t,e,r){"use strict";t.exports=r(51152)()?globalThis:r(60774)},51152:function(t){"use strict";t.exports=function(){return"object"==typeof globalThis&&!!globalThis&&globalThis.Array===Array}},92770:function(t,e,r){"use strict";var n=r(18546);t.exports=function(t){var e=typeof t;if("string"===e){var r=t;if(0==(t=+t)&&n(r))return!1}else if("number"!==e)return!1;return t-t<1}},30120:function(t,e,r){var n=r(90660);t.exports=function(t,e,r){if(!t)throw new TypeError("must specify data as first parameter");if(r=0|+(r||0),Array.isArray(t)&&t[0]&&"number"==typeof t[0][0]){var i,a,o,s,l=t[0].length,u=t.length*l;e&&"string"!=typeof e||(e=new(n(e||"float32"))(u+r));var c=e.length-r;if(u!==c)throw new Error("source length "+u+" ("+l+"x"+t.length+") does not match destination length "+c);for(i=0,o=r;i<t.length;i++)for(a=0;a<l;a++)e[o++]=null===t[i][a]?NaN:t[i][a]}else if(e&&"string"!=typeof e)e.set(t,r);else{var f=n(e||"float32");if(Array.isArray(t)||"array"===e)for(i=0,o=r,s=(e=new f(t.length+r)).length;o<s;o++,i++)e[o]=null===t[i]?NaN:t[i];else 0===r?e=new f(t):(e=new f(t.length+r)).set(t,r)}return e}},68016:function(t,e,r){"use strict";var n=r(53313),i=[32,126];t.exports=function(t){var e=(t=t||{}).shape?t.shape:t.canvas?[t.canvas.width,t.canvas.height]:[512,512],r=t.canvas||document.createElement("canvas"),a=t.font,o="number"==typeof t.step?[t.step,t.step]:t.step||[32,32],s=t.chars||i;if(a&&"string"!=typeof a&&(a=n(a)),Array.isArray(s)){if(2===s.length&&"number"==typeof s[0]&&"number"==typeof s[1]){for(var l=[],u=s[0],c=0;u<=s[1];u++)l[c++]=String.fromCharCode(u);s=l}}else s=String(s).split("");e=e.slice(),r.width=e[0],r.height=e[1];var f=r.getContext("2d");f.fillStyle="#000",f.fillRect(0,0,r.width,r.height),f.font=a,f.textAlign="center",f.textBaseline="middle",f.fillStyle="#fff";var h=o[0]/2,p=o[1]/2;for(u=0;u<s.length;u++)f.fillText(s[u],h,p),(h+=o[0])>e[0]-o[0]/2&&(h=o[0]/2,p+=o[1]);return r}},32879:function(t){"use strict";function e(t,a){a||(a={}),("string"==typeof t||Array.isArray(t))&&(a.family=t);var o=Array.isArray(a.family)?a.family.join(", "):a.family;if(!o)throw Error("`family` must be defined");var s=a.size||a.fontSize||a.em||48,l=a.weight||a.fontWeight||"",u=(t=[a.style||a.fontStyle||"",l,s].join(" ")+"px "+o,a.origin||"top");if(e.cache[o]&&s<=e.cache[o].em)return r(e.cache[o],u);var c=a.canvas||e.canvas,f=c.getContext("2d"),h={upper:void 0!==a.upper?a.upper:"H",lower:void 0!==a.lower?a.lower:"x",descent:void 0!==a.descent?a.descent:"p",ascent:void 0!==a.ascent?a.ascent:"h",tittle:void 0!==a.tittle?a.tittle:"i",overshoot:void 0!==a.overshoot?a.overshoot:"O"},p=Math.ceil(1.5*s);c.height=p,c.width=.5*p,f.font=t;var d="H",v={top:0};f.clearRect(0,0,p,p),f.textBaseline="top",f.fillStyle="black",f.fillText(d,0,0);var g=n(f.getImageData(0,0,p,p));f.clearRect(0,0,p,p),f.textBaseline="bottom",f.fillText(d,0,p);var y=n(f.getImageData(0,0,p,p));v.lineHeight=v.bottom=p-y+g,f.clearRect(0,0,p,p),f.textBaseline="alphabetic",f.fillText(d,0,p);var m=p-n(f.getImageData(0,0,p,p))-1+g;v.baseline=v.alphabetic=m,f.clearRect(0,0,p,p),f.textBaseline="middle",f.fillText(d,0,.5*p);var x=n(f.getImageData(0,0,p,p));v.median=v.middle=p-x-1+g-.5*p,f.clearRect(0,0,p,p),f.textBaseline="hanging",f.fillText(d,0,.5*p);var b=n(f.getImageData(0,0,p,p));v.hanging=p-b-1+g-.5*p,f.clearRect(0,0,p,p),f.textBaseline="ideographic",f.fillText(d,0,p);var _=n(f.getImageData(0,0,p,p));if(v.ideographic=p-_-1+g,h.upper&&(f.clearRect(0,0,p,p),f.textBaseline="top",f.fillText(h.upper,0,0),v.upper=n(f.getImageData(0,0,p,p)),v.capHeight=v.baseline-v.upper),h.lower&&(f.clearRect(0,0,p,p),f.textBaseline="top",f.fillText(h.lower,0,0),v.lower=n(f.getImageData(0,0,p,p)),v.xHeight=v.baseline-v.lower),h.tittle&&(f.clearRect(0,0,p,p),f.textBaseline="top",f.fillText(h.tittle,0,0),v.tittle=n(f.getImageData(0,0,p,p))),h.ascent&&(f.clearRect(0,0,p,p),f.textBaseline="top",f.fillText(h.ascent,0,0),v.ascent=n(f.getImageData(0,0,p,p))),h.descent&&(f.clearRect(0,0,p,p),f.textBaseline="top",f.fillText(h.descent,0,0),v.descent=i(f.getImageData(0,0,p,p))),h.overshoot){f.clearRect(0,0,p,p),f.textBaseline="top",f.fillText(h.overshoot,0,0);var w=i(f.getImageData(0,0,p,p));v.overshoot=w-m}for(var T in v)v[T]/=s;return v.em=s,e.cache[o]=v,r(v,u)}function r(t,e){var r={};for(var n in"string"==typeof e&&(e=t[e]),t)"em"!==n&&(r[n]=t[n]-e);return r}function n(t){for(var e=t.height,r=t.data,n=3;n<r.length;n+=4)if(0!==r[n])return Math.floor(.25*(n-3)/e)}function i(t){for(var e=t.height,r=t.data,n=r.length-1;n>0;n-=4)if(0!==r[n])return Math.floor(.25*(n-3)/e)}t.exports=e,e.canvas=document.createElement("canvas"),e.cache={}},31353:function(t,e,r){"use strict";var n=r(85395),i=Object.prototype.toString,a=Object.prototype.hasOwnProperty;t.exports=function(t,e,r){if(!n(e))throw new TypeError("iterator must be a function");var o;arguments.length>=3&&(o=r),"[object Array]"===i.call(t)?function(t,e,r){for(var n=0,i=t.length;n<i;n++)a.call(t,n)&&(null==r?e(t[n],n,t):e.call(r,t[n],n,t))}(t,e,o):"string"==typeof t?function(t,e,r){for(var n=0,i=t.length;n<i;n++)null==r?e(t.charAt(n),n,t):e.call(r,t.charAt(n),n,t)}(t,e,o):function(t,e,r){for(var n in t)a.call(t,n)&&(null==r?e(t[n],n,t):e.call(r,t[n],n,t))}(t,e,o)}},73047:function(t){"use strict";var e=Array.prototype.slice,r=Object.prototype.toString;t.exports=function(t){var n=this;if("function"!=typeof n||"[object Function]"!==r.call(n))throw new TypeError("Function.prototype.bind called on incompatible "+n);for(var i,a=e.call(arguments,1),o=Math.max(0,n.length-a.length),s=[],l=0;l<o;l++)s.push("$"+l);if(i=Function("binder","return function ("+s.join(",")+"){ return binder.apply(this,arguments); }")((function(){if(this instanceof i){var r=n.apply(this,a.concat(e.call(arguments)));return Object(r)===r?r:this}return n.apply(t,a.concat(e.call(arguments)))})),n.prototype){var u=function(){};u.prototype=n.prototype,i.prototype=new u,u.prototype=null}return i}},77575:function(t,e,r){"use strict";var n=r(73047);t.exports=Function.prototype.bind||n},86249:function(t){t.exports=function(t,e){if("string"!=typeof t)throw new TypeError("must specify type string");if(e=e||{},"undefined"==typeof document&&!e.canvas)return null;var r=e.canvas||document.createElement("canvas");"number"==typeof e.width&&(r.width=e.width),"number"==typeof e.height&&(r.height=e.height);var n,i=e;try{var a=[t];0===t.indexOf("webgl")&&a.push("experimental-"+t);for(var o=0;o<a.length;o++)if(n=r.getContext(a[o],i))return n}catch(t){n=null}return n||null}},68318:function(t,e,r){"use strict";var n,i=SyntaxError,a=Function,o=TypeError,s=function(t){try{return a('"use strict"; return ('+t+").constructor;")()}catch(t){}},l=Object.getOwnPropertyDescriptor;if(l)try{l({},"")}catch(t){l=null}var u=function(){throw new o},c=l?function(){try{return u}catch(t){try{return l(arguments,"callee").get}catch(t){return u}}}():u,f=r(57877)(),h=Object.getPrototypeOf||function(t){return t.__proto__},p={},d="undefined"==typeof Uint8Array?n:h(Uint8Array),v={"%AggregateError%":"undefined"==typeof AggregateError?n:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?n:ArrayBuffer,"%ArrayIteratorPrototype%":f?h([][Symbol.iterator]()):n,"%AsyncFromSyncIteratorPrototype%":n,"%AsyncFunction%":p,"%AsyncGenerator%":p,"%AsyncGeneratorFunction%":p,"%AsyncIteratorPrototype%":p,"%Atomics%":"undefined"==typeof Atomics?n:Atomics,"%BigInt%":"undefined"==typeof BigInt?n:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?n:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?n:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?n:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?n:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?n:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?n:FinalizationRegistry,"%Function%":a,"%GeneratorFunction%":p,"%Int8Array%":"undefined"==typeof Int8Array?n:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?n:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?n:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":f?h(h([][Symbol.iterator]())):n,"%JSON%":"object"==typeof JSON?JSON:n,"%Map%":"undefined"==typeof Map?n:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&f?h((new Map)[Symbol.iterator]()):n,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?n:Promise,"%Proxy%":"undefined"==typeof Proxy?n:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?n:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?n:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&f?h((new Set)[Symbol.iterator]()):n,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?n:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":f?h(""[Symbol.iterator]()):n,"%Symbol%":f?Symbol:n,"%SyntaxError%":i,"%ThrowTypeError%":c,"%TypedArray%":d,"%TypeError%":o,"%Uint8Array%":"undefined"==typeof Uint8Array?n:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?n:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?n:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?n:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?n:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?n:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?n:WeakSet};try{null.error}catch(t){var g=h(h(t));v["%Error.prototype%"]=g}var y=function t(e){var r;if("%AsyncFunction%"===e)r=s("async function () {}");else if("%GeneratorFunction%"===e)r=s("function* () {}");else if("%AsyncGeneratorFunction%"===e)r=s("async function* () {}");else if("%AsyncGenerator%"===e){var n=t("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if("%AsyncIteratorPrototype%"===e){var i=t("%AsyncGenerator%");i&&(r=h(i.prototype))}return v[e]=r,r},m={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},x=r(77575),b=r(35065),_=x.call(Function.call,Array.prototype.concat),w=x.call(Function.apply,Array.prototype.splice),T=x.call(Function.call,String.prototype.replace),k=x.call(Function.call,String.prototype.slice),A=x.call(Function.call,RegExp.prototype.exec),M=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,S=/\\(\\)?/g,E=function(t,e){var r,n=t;if(b(m,n)&&(n="%"+(r=m[n])[0]+"%"),b(v,n)){var a=v[n];if(a===p&&(a=y(n)),void 0===a&&!e)throw new o("intrinsic "+t+" exists, but is not available. Please file an issue!");return{alias:r,name:n,value:a}}throw new i("intrinsic "+t+" does not exist!")};t.exports=function(t,e){if("string"!=typeof t||0===t.length)throw new o("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof e)throw new o('"allowMissing" argument must be a boolean');if(null===A(/^%?[^%]*%?$/,t))throw new i("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=function(t){var e=k(t,0,1),r=k(t,-1);if("%"===e&&"%"!==r)throw new i("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==e)throw new i("invalid intrinsic syntax, expected opening `%`");var n=[];return T(t,M,(function(t,e,r,i){n[n.length]=r?T(i,S,"$1"):e||t})),n}(t),n=r.length>0?r[0]:"",a=E("%"+n+"%",e),s=a.name,u=a.value,c=!1,f=a.alias;f&&(n=f[0],w(r,_([0,1],f)));for(var h=1,p=!0;h<r.length;h+=1){var d=r[h],g=k(d,0,1),y=k(d,-1);if(('"'===g||"'"===g||"`"===g||'"'===y||"'"===y||"`"===y)&&g!==y)throw new i("property names with quotes must have matching quotes");if("constructor"!==d&&p||(c=!0),b(v,s="%"+(n+="."+d)+"%"))u=v[s];else if(null!=u){if(!(d in u)){if(!e)throw new o("base intrinsic for "+t+" exists, but the property is not available.");return}if(l&&h+1>=r.length){var m=l(u,d);u=(p=!!m)&&"get"in m&&!("originalValue"in m.get)?m.get:u[d]}else p=b(u,d),u=u[d];p&&!c&&(v[s]=u)}}return u}},85400:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],f=e[9],h=e[10],p=e[11],d=e[12],v=e[13],g=e[14],y=e[15];return t[0]=s*(h*y-p*g)-f*(l*y-u*g)+v*(l*p-u*h),t[1]=-(n*(h*y-p*g)-f*(i*y-a*g)+v*(i*p-a*h)),t[2]=n*(l*y-u*g)-s*(i*y-a*g)+v*(i*u-a*l),t[3]=-(n*(l*p-u*h)-s*(i*p-a*h)+f*(i*u-a*l)),t[4]=-(o*(h*y-p*g)-c*(l*y-u*g)+d*(l*p-u*h)),t[5]=r*(h*y-p*g)-c*(i*y-a*g)+d*(i*p-a*h),t[6]=-(r*(l*y-u*g)-o*(i*y-a*g)+d*(i*u-a*l)),t[7]=r*(l*p-u*h)-o*(i*p-a*h)+c*(i*u-a*l),t[8]=o*(f*y-p*v)-c*(s*y-u*v)+d*(s*p-u*f),t[9]=-(r*(f*y-p*v)-c*(n*y-a*v)+d*(n*p-a*f)),t[10]=r*(s*y-u*v)-o*(n*y-a*v)+d*(n*u-a*s),t[11]=-(r*(s*p-u*f)-o*(n*p-a*f)+c*(n*u-a*s)),t[12]=-(o*(f*g-h*v)-c*(s*g-l*v)+d*(s*h-l*f)),t[13]=r*(f*g-h*v)-c*(n*g-i*v)+d*(n*h-i*f),t[14]=-(r*(s*g-l*v)-o*(n*g-i*v)+d*(n*l-i*s)),t[15]=r*(s*h-l*f)-o*(n*h-i*f)+c*(n*l-i*s),t}},42331:function(t){t.exports=function(t){var e=new Float32Array(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}},31042:function(t){t.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}},11902:function(t){t.exports=function(){var t=new Float32Array(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},89887:function(t){t.exports=function(t){var e=t[0],r=t[1],n=t[2],i=t[3],a=t[4],o=t[5],s=t[6],l=t[7],u=t[8],c=t[9],f=t[10],h=t[11],p=t[12],d=t[13],v=t[14],g=t[15];return(e*o-r*a)*(f*g-h*v)-(e*s-n*a)*(c*g-h*d)+(e*l-i*a)*(c*v-f*d)+(r*s-n*o)*(u*g-h*p)-(r*l-i*o)*(u*v-f*p)+(n*l-i*s)*(u*d-c*p)}},27812:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r+r,s=n+n,l=i+i,u=r*o,c=n*o,f=n*s,h=i*o,p=i*s,d=i*l,v=a*o,g=a*s,y=a*l;return t[0]=1-f-d,t[1]=c+y,t[2]=h-g,t[3]=0,t[4]=c-y,t[5]=1-u-d,t[6]=p+v,t[7]=0,t[8]=h+g,t[9]=p-v,t[10]=1-u-f,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},34045:function(t){t.exports=function(t,e,r){var n,i,a,o=r[0],s=r[1],l=r[2],u=Math.sqrt(o*o+s*s+l*l);return Math.abs(u)<1e-6?null:(o*=u=1/u,s*=u,l*=u,n=Math.sin(e),a=1-(i=Math.cos(e)),t[0]=o*o*a+i,t[1]=s*o*a+l*n,t[2]=l*o*a-s*n,t[3]=0,t[4]=o*s*a-l*n,t[5]=s*s*a+i,t[6]=l*s*a+o*n,t[7]=0,t[8]=o*l*a+s*n,t[9]=s*l*a-o*n,t[10]=l*l*a+i,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)}},45973:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=n+n,l=i+i,u=a+a,c=n*s,f=n*l,h=n*u,p=i*l,d=i*u,v=a*u,g=o*s,y=o*l,m=o*u;return t[0]=1-(p+v),t[1]=f+m,t[2]=h-y,t[3]=0,t[4]=f-m,t[5]=1-(c+v),t[6]=d+g,t[7]=0,t[8]=h+y,t[9]=d-g,t[10]=1-(c+p),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}},81472:function(t){t.exports=function(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},14669:function(t){t.exports=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t}},75262:function(t){t.exports=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=n,t[6]=r,t[7]=0,t[8]=0,t[9]=-r,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},331:function(t){t.exports=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=0,t[2]=-r,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=r,t[9]=0,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},11049:function(t){t.exports=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=0,t[4]=-r,t[5]=n,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},75195:function(t){t.exports=function(t,e,r,n,i,a,o){var s=1/(r-e),l=1/(i-n),u=1/(a-o);return t[0]=2*a*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*a*l,t[6]=0,t[7]=0,t[8]=(r+e)*s,t[9]=(i+n)*l,t[10]=(o+a)*u,t[11]=-1,t[12]=0,t[13]=0,t[14]=o*a*2*u,t[15]=0,t}},71551:function(t){t.exports=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},79576:function(t,e,r){t.exports={create:r(11902),clone:r(42331),copy:r(31042),identity:r(71551),transpose:r(88654),invert:r(95874),adjoint:r(85400),determinant:r(89887),multiply:r(91362),translate:r(31283),scale:r(10789),rotate:r(65074),rotateX:r(35545),rotateY:r(94918),rotateZ:r(15692),fromRotation:r(34045),fromRotationTranslation:r(45973),fromScaling:r(81472),fromTranslation:r(14669),fromXRotation:r(75262),fromYRotation:r(331),fromZRotation:r(11049),fromQuat:r(27812),frustum:r(75195),perspective:r(7864),perspectiveFromFieldOfView:r(35279),ortho:r(60378),lookAt:r(65551),str:r(6726)}},95874:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],f=e[9],h=e[10],p=e[11],d=e[12],v=e[13],g=e[14],y=e[15],m=r*s-n*o,x=r*l-i*o,b=r*u-a*o,_=n*l-i*s,w=n*u-a*s,T=i*u-a*l,k=c*v-f*d,A=c*g-h*d,M=c*y-p*d,S=f*g-h*v,E=f*y-p*v,L=h*y-p*g,C=m*L-x*E+b*S+_*M-w*A+T*k;return C?(C=1/C,t[0]=(s*L-l*E+u*S)*C,t[1]=(i*E-n*L-a*S)*C,t[2]=(v*T-g*w+y*_)*C,t[3]=(h*w-f*T-p*_)*C,t[4]=(l*M-o*L-u*A)*C,t[5]=(r*L-i*M+a*A)*C,t[6]=(g*b-d*T-y*x)*C,t[7]=(c*T-h*b+p*x)*C,t[8]=(o*E-s*M+u*k)*C,t[9]=(n*M-r*E-a*k)*C,t[10]=(d*w-v*b+y*m)*C,t[11]=(f*b-c*w-p*m)*C,t[12]=(s*A-o*S-l*k)*C,t[13]=(r*S-n*A+i*k)*C,t[14]=(v*x-d*_-g*m)*C,t[15]=(c*_-f*x+h*m)*C,t):null}},65551:function(t,e,r){var n=r(71551);t.exports=function(t,e,r,i){var a,o,s,l,u,c,f,h,p,d,v=e[0],g=e[1],y=e[2],m=i[0],x=i[1],b=i[2],_=r[0],w=r[1],T=r[2];return Math.abs(v-_)<1e-6&&Math.abs(g-w)<1e-6&&Math.abs(y-T)<1e-6?n(t):(f=v-_,h=g-w,p=y-T,a=x*(p*=d=1/Math.sqrt(f*f+h*h+p*p))-b*(h*=d),o=b*(f*=d)-m*p,s=m*h-x*f,(d=Math.sqrt(a*a+o*o+s*s))?(a*=d=1/d,o*=d,s*=d):(a=0,o=0,s=0),l=h*s-p*o,u=p*a-f*s,c=f*o-h*a,(d=Math.sqrt(l*l+u*u+c*c))?(l*=d=1/d,u*=d,c*=d):(l=0,u=0,c=0),t[0]=a,t[1]=l,t[2]=f,t[3]=0,t[4]=o,t[5]=u,t[6]=h,t[7]=0,t[8]=s,t[9]=c,t[10]=p,t[11]=0,t[12]=-(a*v+o*g+s*y),t[13]=-(l*v+u*g+c*y),t[14]=-(f*v+h*g+p*y),t[15]=1,t)}},91362:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],v=e[12],g=e[13],y=e[14],m=e[15],x=r[0],b=r[1],_=r[2],w=r[3];return t[0]=x*n+b*s+_*f+w*v,t[1]=x*i+b*l+_*h+w*g,t[2]=x*a+b*u+_*p+w*y,t[3]=x*o+b*c+_*d+w*m,x=r[4],b=r[5],_=r[6],w=r[7],t[4]=x*n+b*s+_*f+w*v,t[5]=x*i+b*l+_*h+w*g,t[6]=x*a+b*u+_*p+w*y,t[7]=x*o+b*c+_*d+w*m,x=r[8],b=r[9],_=r[10],w=r[11],t[8]=x*n+b*s+_*f+w*v,t[9]=x*i+b*l+_*h+w*g,t[10]=x*a+b*u+_*p+w*y,t[11]=x*o+b*c+_*d+w*m,x=r[12],b=r[13],_=r[14],w=r[15],t[12]=x*n+b*s+_*f+w*v,t[13]=x*i+b*l+_*h+w*g,t[14]=x*a+b*u+_*p+w*y,t[15]=x*o+b*c+_*d+w*m,t}},60378:function(t){t.exports=function(t,e,r,n,i,a,o){var s=1/(e-r),l=1/(n-i),u=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*u,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*l,t[14]=(o+a)*u,t[15]=1,t}},7864:function(t){t.exports=function(t,e,r,n,i){var a=1/Math.tan(e/2),o=1/(n-i);return t[0]=a/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(i+n)*o,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*i*n*o,t[15]=0,t}},35279:function(t){t.exports=function(t,e,r,n){var i=Math.tan(e.upDegrees*Math.PI/180),a=Math.tan(e.downDegrees*Math.PI/180),o=Math.tan(e.leftDegrees*Math.PI/180),s=Math.tan(e.rightDegrees*Math.PI/180),l=2/(o+s),u=2/(i+a);return t[0]=l,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=u,t[6]=0,t[7]=0,t[8]=-(o-s)*l*.5,t[9]=(i-a)*u*.5,t[10]=n/(r-n),t[11]=-1,t[12]=0,t[13]=0,t[14]=n*r/(r-n),t[15]=0,t}},65074:function(t){t.exports=function(t,e,r,n){var i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,w,T,k,A,M,S,E=n[0],L=n[1],C=n[2],P=Math.sqrt(E*E+L*L+C*C);return Math.abs(P)<1e-6?null:(E*=P=1/P,L*=P,C*=P,i=Math.sin(r),o=1-(a=Math.cos(r)),s=e[0],l=e[1],u=e[2],c=e[3],f=e[4],h=e[5],p=e[6],d=e[7],v=e[8],g=e[9],y=e[10],m=e[11],x=E*E*o+a,b=L*E*o+C*i,_=C*E*o-L*i,w=E*L*o-C*i,T=L*L*o+a,k=C*L*o+E*i,A=E*C*o+L*i,M=L*C*o-E*i,S=C*C*o+a,t[0]=s*x+f*b+v*_,t[1]=l*x+h*b+g*_,t[2]=u*x+p*b+y*_,t[3]=c*x+d*b+m*_,t[4]=s*w+f*T+v*k,t[5]=l*w+h*T+g*k,t[6]=u*w+p*T+y*k,t[7]=c*w+d*T+m*k,t[8]=s*A+f*M+v*S,t[9]=l*A+h*M+g*S,t[10]=u*A+p*M+y*S,t[11]=c*A+d*M+m*S,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}},35545:function(t){t.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[4],o=e[5],s=e[6],l=e[7],u=e[8],c=e[9],f=e[10],h=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=a*i+u*n,t[5]=o*i+c*n,t[6]=s*i+f*n,t[7]=l*i+h*n,t[8]=u*i-a*n,t[9]=c*i-o*n,t[10]=f*i-s*n,t[11]=h*i-l*n,t}},94918:function(t){t.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[8],c=e[9],f=e[10],h=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i-u*n,t[1]=o*i-c*n,t[2]=s*i-f*n,t[3]=l*i-h*n,t[8]=a*n+u*i,t[9]=o*n+c*i,t[10]=s*n+f*i,t[11]=l*n+h*i,t}},15692:function(t){t.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[4],c=e[5],f=e[6],h=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i+u*n,t[1]=o*i+c*n,t[2]=s*i+f*n,t[3]=l*i+h*n,t[4]=u*i-a*n,t[5]=c*i-o*n,t[6]=f*i-s*n,t[7]=h*i-l*n,t}},10789:function(t){t.exports=function(t,e,r){var n=r[0],i=r[1],a=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*a,t[9]=e[9]*a,t[10]=e[10]*a,t[11]=e[11]*a,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}},6726:function(t){t.exports=function(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"}},31283:function(t){t.exports=function(t,e,r){var n,i,a,o,s,l,u,c,f,h,p,d,v=r[0],g=r[1],y=r[2];return e===t?(t[12]=e[0]*v+e[4]*g+e[8]*y+e[12],t[13]=e[1]*v+e[5]*g+e[9]*y+e[13],t[14]=e[2]*v+e[6]*g+e[10]*y+e[14],t[15]=e[3]*v+e[7]*g+e[11]*y+e[15]):(n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],t[0]=n,t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t[6]=u,t[7]=c,t[8]=f,t[9]=h,t[10]=p,t[11]=d,t[12]=n*v+s*g+f*y+e[12],t[13]=i*v+l*g+h*y+e[13],t[14]=a*v+u*g+p*y+e[14],t[15]=o*v+c*g+d*y+e[15]),t}},88654:function(t){t.exports=function(t,e){if(t===e){var r=e[1],n=e[2],i=e[3],a=e[6],o=e[7],s=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=a,t[11]=e[14],t[12]=i,t[13]=o,t[14]=s}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}},42505:function(t,e,r){"use strict";var n=r(72791),i=r(71299),a=r(98580),o=r(12018),s=r(83522),l=r(25075),u=r(68016),c=r(58404),f=r(18863),h=r(10973),p=r(25677),d=r(75686),v=r(53545),g=r(56131),y=r(32879),m=r(30120),x=r(13547).nextPow2,b=new s,_=!1;if(document.body){var w=document.body.appendChild(document.createElement("div"));w.style.font="italic small-caps bold condensed 16px/2 cursive",getComputedStyle(w).fontStretch&&(_=!0),document.body.removeChild(w)}var T=function(t){!function(t){return"function"==typeof t&&t._gl&&t.prop&&t.texture&&t.buffer}(t)?this.gl=o(t):(t={regl:t},this.gl=t.regl._gl),this.shader=b.get(this.gl),this.shader?this.regl=this.shader.regl:this.regl=t.regl||a({gl:this.gl}),this.charBuffer=this.regl.buffer({type:"uint8",usage:"stream"}),this.sizeBuffer=this.regl.buffer({type:"float",usage:"stream"}),this.shader||(this.shader=this.createShader(),b.set(this.gl,this.shader)),this.batch=[],this.fontSize=[],this.font=[],this.fontAtlas=[],this.draw=this.shader.draw.bind(this),this.render=function(){this.regl._refresh(),this.draw(this.batch)},this.canvas=this.gl.canvas,this.update(h(t)?t:{})};T.prototype.createShader=function(){var t=this.regl,e=t({blend:{enable:!0,color:[0,0,0,1],func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:"one minus dst alpha",dstAlpha:"one"}},stencil:{enable:!1},depth:{enable:!1},count:t.prop("count"),offset:t.prop("offset"),attributes:{charOffset:{offset:4,stride:8,buffer:t.this("sizeBuffer")},width:{offset:0,stride:8,buffer:t.this("sizeBuffer")},char:t.this("charBuffer"),position:t.this("position")},uniforms:{atlasSize:function(t,e){return[e.atlas.width,e.atlas.height]},atlasDim:function(t,e){return[e.atlas.cols,e.atlas.rows]},atlas:function(t,e){return e.atlas.texture},charStep:function(t,e){return e.atlas.step},em:function(t,e){return e.atlas.em},color:t.prop("color"),opacity:t.prop("opacity"),viewport:t.this("viewportArray"),scale:t.this("scale"),align:t.prop("align"),baseline:t.prop("baseline"),translate:t.this("translate"),positionOffset:t.prop("positionOffset")},primitive:"points",viewport:t.this("viewport"),vert:"\n\t\t\tprecision highp float;\n\t\t\tattribute float width, charOffset, char;\n\t\t\tattribute vec2 position;\n\t\t\tuniform float fontSize, charStep, em, align, baseline;\n\t\t\tuniform vec4 viewport;\n\t\t\tuniform vec4 color;\n\t\t\tuniform vec2 atlasSize, atlasDim, scale, translate, positionOffset;\n\t\t\tvarying vec2 charCoord, charId;\n\t\t\tvarying float charWidth;\n\t\t\tvarying vec4 fontColor;\n\t\t\tvoid main () {\n\t\t\t\tvec2 offset = floor(em * (vec2(align + charOffset, baseline)\n\t\t\t\t\t+ vec2(positionOffset.x, -positionOffset.y)))\n\t\t\t\t\t/ (viewport.zw * scale.xy);\n\n\t\t\t\tvec2 position = (position + translate) * scale;\n\t\t\t\tposition += offset * scale;\n\n\t\t\t\tcharCoord = position * viewport.zw + viewport.xy;\n\n\t\t\t\tgl_Position = vec4(position * 2. - 1., 0, 1);\n\n\t\t\t\tgl_PointSize = charStep;\n\n\t\t\t\tcharId.x = mod(char, atlasDim.x);\n\t\t\t\tcharId.y = floor(char / atlasDim.x);\n\n\t\t\t\tcharWidth = width * em;\n\n\t\t\t\tfontColor = color / 255.;\n\t\t\t}",frag:"\n\t\t\tprecision highp float;\n\t\t\tuniform float fontSize, charStep, opacity;\n\t\t\tuniform vec2 atlasSize;\n\t\t\tuniform vec4 viewport;\n\t\t\tuniform sampler2D atlas;\n\t\t\tvarying vec4 fontColor;\n\t\t\tvarying vec2 charCoord, charId;\n\t\t\tvarying float charWidth;\n\n\t\t\tfloat lightness(vec4 color) {\n\t\t\t\treturn color.r * 0.299 + color.g * 0.587 + color.b * 0.114;\n\t\t\t}\n\n\t\t\tvoid main () {\n\t\t\t\tvec2 uv = gl_FragCoord.xy - charCoord + charStep * .5;\n\t\t\t\tfloat halfCharStep = floor(charStep * .5 + .5);\n\n\t\t\t\t// invert y and shift by 1px (FF expecially needs that)\n\t\t\t\tuv.y = charStep - uv.y;\n\n\t\t\t\t// ignore points outside of character bounding box\n\t\t\t\tfloat halfCharWidth = ceil(charWidth * .5);\n\t\t\t\tif (floor(uv.x) > halfCharStep + halfCharWidth ||\n\t\t\t\t\tfloor(uv.x) < halfCharStep - halfCharWidth) return;\n\n\t\t\t\tuv += charId * charStep;\n\t\t\t\tuv = uv / atlasSize;\n\n\t\t\t\tvec4 color = fontColor;\n\t\t\t\tvec4 mask = texture2D(atlas, uv);\n\n\t\t\t\tfloat maskY = lightness(mask);\n\t\t\t\t// float colorY = lightness(color);\n\t\t\t\tcolor.a *= maskY;\n\t\t\t\tcolor.a *= opacity;\n\n\t\t\t\t// color.a += .1;\n\n\t\t\t\t// antialiasing, see yiq color space y-channel formula\n\t\t\t\t// color.rgb += (1. - color.rgb) * (1. - mask.rgb);\n\n\t\t\t\tgl_FragColor = color;\n\t\t\t}"});return{regl:t,draw:e,atlas:{}}},T.prototype.update=function(t){var e=this;if("string"==typeof t)t={text:t};else if(!t)return;null!=(t=i(t,{position:"position positions coord coords coordinates",font:"font fontFace fontface typeface cssFont css-font family fontFamily",fontSize:"fontSize fontsize size font-size",text:"text texts chars characters value values symbols",align:"align alignment textAlign textbaseline",baseline:"baseline textBaseline textbaseline",direction:"dir direction textDirection",color:"color colour fill fill-color fillColor textColor textcolor",kerning:"kerning kern",range:"range dataBox",viewport:"vp viewport viewBox viewbox viewPort",opacity:"opacity alpha transparency visible visibility opaque",offset:"offset positionOffset padding shift indent indentation"},!0)).opacity&&(Array.isArray(t.opacity)?this.opacity=t.opacity.map((function(t){return parseFloat(t)})):this.opacity=parseFloat(t.opacity)),null!=t.viewport&&(this.viewport=f(t.viewport),this.viewportArray=[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),null==this.viewport&&(this.viewport={x:0,y:0,width:this.gl.drawingBufferWidth,height:this.gl.drawingBufferHeight},this.viewportArray=[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),null!=t.kerning&&(this.kerning=t.kerning),null!=t.offset&&("number"==typeof t.offset&&(t.offset=[t.offset,0]),this.positionOffset=m(t.offset)),t.direction&&(this.direction=t.direction),t.range&&(this.range=t.range,this.scale=[1/(t.range[2]-t.range[0]),1/(t.range[3]-t.range[1])],this.translate=[-t.range[0],-t.range[1]]),t.scale&&(this.scale=t.scale),t.translate&&(this.translate=t.translate),this.scale||(this.scale=[1/this.viewport.width,1/this.viewport.height]),this.translate||(this.translate=[0,0]),this.font.length||t.font||(t.font=T.baseFontSize+"px sans-serif");var r,a=!1,o=!1;if(t.font&&(Array.isArray(t.font)?t.font:[t.font]).forEach((function(t,r){if("string"==typeof t)try{t=n.parse(t)}catch(e){t=n.parse(T.baseFontSize+"px "+t)}else t=n.parse(n.stringify(t));var i=n.stringify({size:T.baseFontSize,family:t.family,stretch:_?t.stretch:void 0,variant:t.variant,weight:t.weight,style:t.style}),s=p(t.size),l=Math.round(s[0]*d(s[1]));if(l!==e.fontSize[r]&&(o=!0,e.fontSize[r]=l),!(e.font[r]&&i==e.font[r].baseString||(a=!0,e.font[r]=T.fonts[i],e.font[r]))){var u=t.family.join(", "),c=[t.style];t.style!=t.variant&&c.push(t.variant),t.variant!=t.weight&&c.push(t.weight),_&&t.weight!=t.stretch&&c.push(t.stretch),e.font[r]={baseString:i,family:u,weight:t.weight,stretch:t.stretch,style:t.style,variant:t.variant,width:{},kerning:{},metrics:y(u,{origin:"top",fontSize:T.baseFontSize,fontStyle:c.join(" ")})},T.fonts[i]=e.font[r]}})),(a||o)&&this.font.forEach((function(r,i){var a=n.stringify({size:e.fontSize[i],family:r.family,stretch:_?r.stretch:void 0,variant:r.variant,weight:r.weight,style:r.style});if(e.fontAtlas[i]=e.shader.atlas[a],!e.fontAtlas[i]){var o=r.metrics;e.shader.atlas[a]=e.fontAtlas[i]={fontString:a,step:2*Math.ceil(e.fontSize[i]*o.bottom*.5),em:e.fontSize[i],cols:0,rows:0,height:0,width:0,chars:[],ids:{},texture:e.regl.texture()}}null==t.text&&(t.text=e.text)})),"string"==typeof t.text&&t.position&&t.position.length>2){for(var s=Array(.5*t.position.length),h=0;h<s.length;h++)s[h]=t.text;t.text=s}if(null!=t.text||a){if(this.textOffsets=[0],Array.isArray(t.text)){this.count=t.text[0].length,this.counts=[this.count];for(var b=1;b<t.text.length;b++)this.textOffsets[b]=this.textOffsets[b-1]+t.text[b-1].length,this.count+=t.text[b].length,this.counts.push(t.text[b].length);this.text=t.text.join("")}else this.text=t.text,this.count=this.text.length,this.counts=[this.count];r=[],this.font.forEach((function(t,n){T.atlasContext.font=t.baseString;for(var i=e.fontAtlas[n],a=0;a<e.text.length;a++){var o=e.text.charAt(a);if(null==i.ids[o]&&(i.ids[o]=i.chars.length,i.chars.push(o),r.push(o)),null==t.width[o]&&(t.width[o]=T.atlasContext.measureText(o).width/T.baseFontSize,e.kerning)){var s=[];for(var l in t.width)s.push(l+o,o+l);g(t.kerning,v(t.family,{pairs:s}))}}}))}if(t.position)if(t.position.length>2){for(var w=!t.position[0].length,k=c.mallocFloat(2*this.count),A=0,M=0;A<this.counts.length;A++){var S=this.counts[A];if(w)for(var E=0;E<S;E++)k[M++]=t.position[2*A],k[M++]=t.position[2*A+1];else for(var L=0;L<S;L++)k[M++]=t.position[A][0],k[M++]=t.position[A][1]}this.position.call?this.position({type:"float",data:k}):this.position=this.regl.buffer({type:"float",data:k}),c.freeFloat(k)}else this.position.destroy&&this.position.destroy(),this.position={constant:t.position};if(t.text||a){var C=c.mallocUint8(this.count),P=c.mallocFloat(2*this.count);this.textWidth=[];for(var O=0,I=0;O<this.counts.length;O++){for(var D=this.counts[O],z=this.font[O]||this.font[0],R=this.fontAtlas[O]||this.fontAtlas[0],F=0;F<D;F++){var B=this.text.charAt(I),N=this.text.charAt(I-1);if(C[I]=R.ids[B],P[2*I]=z.width[B],F){var j=P[2*I-2],U=P[2*I],V=P[2*I-1]+.5*j+.5*U;if(this.kerning){var H=z.kerning[N+B];H&&(V+=.001*H)}P[2*I+1]=V}else P[2*I+1]=.5*P[2*I];I++}this.textWidth.push(P.length?.5*P[2*I-2]+P[2*I-1]:0)}t.align||(t.align=this.align),this.charBuffer({data:C,type:"uint8",usage:"stream"}),this.sizeBuffer({data:P,type:"float",usage:"stream"}),c.freeUint8(C),c.freeFloat(P),r.length&&this.font.forEach((function(t,r){var n=e.fontAtlas[r],i=n.step,a=Math.floor(T.maxAtlasSize/i),o=Math.min(a,n.chars.length),s=Math.ceil(n.chars.length/o),l=x(o*i),c=x(s*i);n.width=l,n.height=c,n.rows=s,n.cols=o,n.em&&n.texture({data:u({canvas:T.atlasCanvas,font:n.fontString,chars:n.chars,shape:[l,c],step:[i,i]})})}))}if(t.align&&(this.align=t.align,this.alignOffset=this.textWidth.map((function(t,r){var n=Array.isArray(e.align)?e.align.length>1?e.align[r]:e.align[0]:e.align;if("number"==typeof n)return n;switch(n){case"right":case"end":return-t;case"center":case"centre":case"middle":return.5*-t}return 0}))),null==this.baseline&&null==t.baseline&&(t.baseline=0),null!=t.baseline&&(this.baseline=t.baseline,Array.isArray(this.baseline)||(this.baseline=[this.baseline]),this.baselineOffset=this.baseline.map((function(t,r){var n=(e.font[r]||e.font[0]).metrics,i=0;return i+=.5*n.bottom,-1*(i+="number"==typeof t?t-n.baseline:-n[t])}))),null!=t.color)if(t.color||(t.color="transparent"),"string"!=typeof t.color&&isNaN(t.color)){var q;if("number"==typeof t.color[0]&&t.color.length>this.counts.length){var G=t.color.length;q=c.mallocUint8(G);for(var Z=(t.color.subarray||t.color.slice).bind(t.color),Y=0;Y<G;Y+=4)q.set(l(Z(Y,Y+4),"uint8"),Y)}else{var W=t.color.length;q=c.mallocUint8(4*W);for(var X=0;X<W;X++)q.set(l(t.color[X]||0,"uint8"),4*X)}this.color=q}else this.color=l(t.color,"uint8");if(t.position||t.text||t.color||t.baseline||t.align||t.font||t.offset||t.opacity)if(this.color.length>4||this.baselineOffset.length>1||this.align&&this.align.length>1||this.fontAtlas.length>1||this.positionOffset.length>2){var J=Math.max(.5*this.position.length||0,.25*this.color.length||0,this.baselineOffset.length||0,this.alignOffset.length||0,this.font.length||0,this.opacity.length||0,.5*this.positionOffset.length||0);this.batch=Array(J);for(var K=0;K<this.batch.length;K++)this.batch[K]={count:this.counts.length>1?this.counts[K]:this.counts[0],offset:this.textOffsets.length>1?this.textOffsets[K]:this.textOffsets[0],color:this.color?this.color.length<=4?this.color:this.color.subarray(4*K,4*K+4):[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[K]:this.opacity,baseline:null!=this.baselineOffset[K]?this.baselineOffset[K]:this.baselineOffset[0],align:this.align?null!=this.alignOffset[K]?this.alignOffset[K]:this.alignOffset[0]:0,atlas:this.fontAtlas[K]||this.fontAtlas[0],positionOffset:this.positionOffset.length>2?this.positionOffset.subarray(2*K,2*K+2):this.positionOffset}}else this.count?this.batch=[{count:this.count,offset:0,color:this.color||[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[0]:this.opacity,baseline:this.baselineOffset[0],align:this.alignOffset?this.alignOffset[0]:0,atlas:this.fontAtlas[0],positionOffset:this.positionOffset}]:this.batch=[]},T.prototype.destroy=function(){},T.prototype.kerning=!0,T.prototype.position={constant:new Float32Array(2)},T.prototype.translate=null,T.prototype.scale=null,T.prototype.font=null,T.prototype.text="",T.prototype.positionOffset=[0,0],T.prototype.opacity=1,T.prototype.color=new Uint8Array([0,0,0,255]),T.prototype.alignOffset=[0,0],T.maxAtlasSize=1024,T.atlasCanvas=document.createElement("canvas"),T.atlasContext=T.atlasCanvas.getContext("2d",{alpha:!1}),T.baseFontSize=64,T.fonts={},t.exports=T},12018:function(t,e,r){"use strict";var n=r(71299);function i(t){if(t.container)if(t.container==document.body)document.body.style.width||(t.canvas.width=t.width||t.pixelRatio*r.g.innerWidth),document.body.style.height||(t.canvas.height=t.height||t.pixelRatio*r.g.innerHeight);else{var e=t.container.getBoundingClientRect();t.canvas.width=t.width||e.right-e.left,t.canvas.height=t.height||e.bottom-e.top}}function a(t){return"function"==typeof t.getContext&&"width"in t&&"height"in t}function o(){var t=document.createElement("canvas");return t.style.position="absolute",t.style.top=0,t.style.left=0,t}t.exports=function(t){var e;if(t?"string"==typeof t&&(t={container:t}):t={},(t=a(t)||"string"==typeof(e=t).nodeName&&"function"==typeof e.appendChild&&"function"==typeof e.getBoundingClientRect?{container:t}:function(t){return"function"==typeof t.drawArrays||"function"==typeof t.drawElements}(t)?{gl:t}:n(t,{container:"container target element el canvas holder parent parentNode wrapper use ref root node",gl:"gl context webgl glContext",attrs:"attributes attrs contextAttributes",pixelRatio:"pixelRatio pxRatio px ratio pxratio pixelratio",width:"w width",height:"h height"},!0)).pixelRatio||(t.pixelRatio=r.g.pixelRatio||1),t.gl)return t.gl;if(t.canvas&&(t.container=t.canvas.parentNode),t.container){if("string"==typeof t.container){var s=document.querySelector(t.container);if(!s)throw Error("Element "+t.container+" is not found");t.container=s}a(t.container)?(t.canvas=t.container,t.container=t.canvas.parentNode):t.canvas||(t.canvas=o(),t.container.appendChild(t.canvas),i(t))}else if(!t.canvas){if("undefined"==typeof document)throw Error("Not DOM environment. Use headless-gl.");t.container=document.body||document.documentElement,t.canvas=o(),t.container.appendChild(t.canvas),i(t)}return t.gl||["webgl","experimental-webgl","webgl-experimental"].some((function(e){try{t.gl=t.canvas.getContext(e,t.attrs)}catch(t){}return t.gl})),t.gl}},56068:function(t){t.exports=function(t){"string"==typeof t&&(t=[t]);for(var e=[].slice.call(arguments,1),r=[],n=0;n<t.length-1;n++)r.push(t[n],e[n]||"");return r.push(t[n]),r.join("")}},40383:function(t,e,r){"use strict";var n=r(68318)("%Object.getOwnPropertyDescriptor%",!0);if(n)try{n([],"length")}catch(t){n=null}t.exports=n},57035:function(t,e,r){"use strict";var n,i=r(54404);n="function"==typeof r.g.matchMedia?!r.g.matchMedia("(hover: none)").matches:i,t.exports=n},38520:function(t,e,r){"use strict";var n=r(54404);t.exports=n&&function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(e){t=!1}return t}()},55622:function(t,e,r){"use strict";var n=r(68318)("%Object.defineProperty%",!0),i=function(){if(n)try{return n({},"a",{value:1}),!0}catch(t){return!1}return!1};i.hasArrayLengthDefineBug=function(){if(!i())return null;try{return 1!==n([],"length",{value:1}).length}catch(t){return!0}},t.exports=i},57877:function(t,e,r){"use strict";var n="undefined"!=typeof Symbol&&Symbol,i=r(35638);t.exports=function(){return"function"==typeof n&&"function"==typeof Symbol&&"symbol"==typeof n("foo")&&"symbol"==typeof Symbol("bar")&&i()}},35638:function(t){"use strict";t.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var t={},e=Symbol("test"),r=Object(e);if("string"==typeof e)return!1;if("[object Symbol]"!==Object.prototype.toString.call(e))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(e in t[e]=42,t)return!1;if("function"==typeof Object.keys&&0!==Object.keys(t).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(t).length)return!1;var n=Object.getOwnPropertySymbols(t);if(1!==n.length||n[0]!==e)return!1;if(!Object.prototype.propertyIsEnumerable.call(t,e))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var i=Object.getOwnPropertyDescriptor(t,e);if(42!==i.value||!0!==i.enumerable)return!1}return!0}},84543:function(t,e,r){"use strict";var n=r(35638);t.exports=function(){return n()&&!!Symbol.toStringTag}},35065:function(t,e,r){"use strict";var n=r(77575);t.exports=n.call(Function.call,Object.prototype.hasOwnProperty)},95280:function(t,e){e.read=function(t,e,r,n,i){var a,o,s=8*i-n-1,l=(1<<s)-1,u=l>>1,c=-7,f=r?i-1:0,h=r?-1:1,p=t[e+f];for(f+=h,a=p&(1<<-c)-1,p>>=-c,c+=s;c>0;a=256*a+t[e+f],f+=h,c-=8);for(o=a&(1<<-c)-1,a>>=-c,c+=n;c>0;o=256*o+t[e+f],f+=h,c-=8);if(0===a)a=1-u;else{if(a===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),a-=u}return(p?-1:1)*o*Math.pow(2,a-n)},e.write=function(t,e,r,n,i,a){var o,s,l,u=8*a-i-1,c=(1<<u)-1,f=c>>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:a-1,d=n?1:-1,v=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=c):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+f>=1?h/l:h*Math.pow(2,1-f))*l>=2&&(o++,l/=2),o+f>=c?(s=0,o=c):o+f>=1?(s=(e*l-1)*Math.pow(2,i),o+=f):(s=e*Math.pow(2,f-1)*Math.pow(2,i),o=0));i>=8;t[r+p]=255&s,p+=d,s/=256,i-=8);for(o=o<<i|s,u+=i;u>0;t[r+p]=255&o,p+=d,o/=256,u-=8);t[r+p-d]|=128*v}},42018:function(t){"function"==typeof Object.create?t.exports=function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(t,e){if(e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}}},47216:function(t,e,r){"use strict";var n=r(84543)(),i=r(6614)("Object.prototype.toString"),a=function(t){return!(n&&t&&"object"==typeof t&&Symbol.toStringTag in t)&&"[object Arguments]"===i(t)},o=function(t){return!!a(t)||null!==t&&"object"==typeof t&&"number"==typeof t.length&&t.length>=0&&"[object Array]"!==i(t)&&"[object Function]"===i(t.callee)},s=function(){return a(arguments)}();a.isLegacyArguments=o,t.exports=s?a:o},54404:function(t){t.exports=!0},85395:function(t){"use strict";var e,r,n=Function.prototype.toString,i="object"==typeof Reflect&&null!==Reflect&&Reflect.apply;if("function"==typeof i&&"function"==typeof Object.defineProperty)try{e=Object.defineProperty({},"length",{get:function(){throw r}}),r={},i((function(){throw 42}),null,e)}catch(t){t!==r&&(i=null)}else i=null;var a=/^\s*class\b/,o=function(t){try{var e=n.call(t);return a.test(e)}catch(t){return!1}},s=function(t){try{return!o(t)&&(n.call(t),!0)}catch(t){return!1}},l=Object.prototype.toString,u="function"==typeof Symbol&&!!Symbol.toStringTag,c=!(0 in[,]),f=function(){return!1};if("object"==typeof document){var h=document.all;l.call(h)===l.call(document.all)&&(f=function(t){if((c||!t)&&(void 0===t||"object"==typeof t))try{var e=l.call(t);return("[object HTMLAllCollection]"===e||"[object HTML document.all class]"===e||"[object HTMLCollection]"===e||"[object Object]"===e)&&null==t("")}catch(t){}return!1})}t.exports=i?function(t){if(f(t))return!0;if(!t)return!1;if("function"!=typeof t&&"object"!=typeof t)return!1;try{i(t,null,e)}catch(t){if(t!==r)return!1}return!o(t)&&s(t)}:function(t){if(f(t))return!0;if(!t)return!1;if("function"!=typeof t&&"object"!=typeof t)return!1;if(u)return s(t);if(o(t))return!1;var e=l.call(t);return!("[object Function]"!==e&&"[object GeneratorFunction]"!==e&&!/^\[object HTML/.test(e))&&s(t)}},65481:function(t,e,r){"use strict";var n,i=Object.prototype.toString,a=Function.prototype.toString,o=/^\s*(?:function)?\*/,s=r(84543)(),l=Object.getPrototypeOf;t.exports=function(t){if("function"!=typeof t)return!1;if(o.test(a.call(t)))return!0;if(!s)return"[object GeneratorFunction]"===i.call(t);if(!l)return!1;if(void 0===n){var e=function(){if(!s)return!1;try{return Function("return function*() {}")()}catch(t){}}();n=!!e&&l(e)}return l(t)===n}},62683:function(t){"use strict";t.exports="undefined"!=typeof navigator&&(/MSIE/.test(navigator.userAgent)||/Trident\//.test(navigator.appVersion))},64274:function(t){"use strict";t.exports=function(t){return t!=t}},15567:function(t,e,r){"use strict";var n=r(68222),i=r(17045),a=r(64274),o=r(14922),s=r(22442),l=n(o(),Number);i(l,{getPolyfill:o,implementation:a,shim:s}),t.exports=l},14922:function(t,e,r){"use strict";var n=r(64274);t.exports=function(){return Number.isNaN&&Number.isNaN(NaN)&&!Number.isNaN("a")?Number.isNaN:n}},22442:function(t,e,r){"use strict";var n=r(17045),i=r(14922);t.exports=function(){var t=i();return n(Number,{isNaN:t},{isNaN:function(){return Number.isNaN!==t}}),t}},64941:function(t){"use strict";t.exports=function(t){var e=typeof t;return null!==t&&("object"===e||"function"===e)}},10973:function(t){"use strict";var e=Object.prototype.toString;t.exports=function(t){var r;return"[object Object]"===e.call(t)&&(null===(r=Object.getPrototypeOf(t))||r===Object.getPrototypeOf({}))}},18546:function(t){"use strict";t.exports=function(t){for(var e,r=t.length,n=0;n<r;n++)if(((e=t.charCodeAt(n))<9||e>13)&&32!==e&&133!==e&&160!==e&&5760!==e&&6158!==e&&(e<8192||e>8205)&&8232!==e&&8233!==e&&8239!==e&&8287!==e&&8288!==e&&12288!==e&&65279!==e)return!1;return!0}},89546:function(t){"use strict";t.exports=function(t){return"string"==typeof t&&(t=t.trim(),!!(/^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(t)&&/[\dz]$/i.test(t)&&t.length>4))}},9187:function(t,e,r){"use strict";var n=r(31353),i=r(72077),a=r(6614),o=a("Object.prototype.toString"),s=r(84543)(),l=r(40383),u="undefined"==typeof globalThis?r.g:globalThis,c=i(),f=a("Array.prototype.indexOf",!0)||function(t,e){for(var r=0;r<t.length;r+=1)if(t[r]===e)return r;return-1},h=a("String.prototype.slice"),p={},d=Object.getPrototypeOf;s&&l&&d&&n(c,(function(t){var e=new u[t];if(Symbol.toStringTag in e){var r=d(e),n=l(r,Symbol.toStringTag);if(!n){var i=d(r);n=l(i,Symbol.toStringTag)}p[t]=n.get}})),t.exports=function(t){if(!t||"object"!=typeof t)return!1;if(!s||!(Symbol.toStringTag in t)){var e=h(o(t),8,-1);return f(c,e)>-1}return!!l&&function(t){var e=!1;return n(p,(function(r,n){if(!e)try{e=r.call(t)===n}catch(t){}})),e}(t)}},44517:function(t){t.exports=function(){"use strict";var t,e,r;function n(n,i){if(t)if(e){var a="var sharedChunk = {}; ("+t+")(sharedChunk); ("+e+")(sharedChunk);",o={};t(o),(r=i(o)).workerUrl=window.URL.createObjectURL(new Blob([a],{type:"text/javascript"}))}else e=i;else t=i}return n(0,(function(t){function e(t,e){return t(e={exports:{}},e.exports),e.exports}var r="1.10.1",n=i;function i(t,e,r,n){this.cx=3*t,this.bx=3*(r-t)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*e,this.by=3*(n-e)-this.cy,this.ay=1-this.cy-this.by,this.p1x=t,this.p1y=n,this.p2x=r,this.p2y=n}i.prototype.sampleCurveX=function(t){return((this.ax*t+this.bx)*t+this.cx)*t},i.prototype.sampleCurveY=function(t){return((this.ay*t+this.by)*t+this.cy)*t},i.prototype.sampleCurveDerivativeX=function(t){return(3*this.ax*t+2*this.bx)*t+this.cx},i.prototype.solveCurveX=function(t,e){var r,n,i,a,o;for(void 0===e&&(e=1e-6),i=t,o=0;o<8;o++){if(a=this.sampleCurveX(i)-t,Math.abs(a)<e)return i;var s=this.sampleCurveDerivativeX(i);if(Math.abs(s)<1e-6)break;i-=a/s}if((i=t)<(r=0))return r;if(i>(n=1))return n;for(;r<n;){if(a=this.sampleCurveX(i),Math.abs(a-t)<e)return i;t>a?r=i:n=i,i=.5*(n-r)+r}return i},i.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))};var a=o;function o(t,e){this.x=t,this.y=e}function s(t,e,r,i){var a=new n(t,e,r,i);return function(t){return a.solve(t)}}o.prototype={clone:function(){return new o(this.x,this.y)},add:function(t){return this.clone()._add(t)},sub:function(t){return this.clone()._sub(t)},multByPoint:function(t){return this.clone()._multByPoint(t)},divByPoint:function(t){return this.clone()._divByPoint(t)},mult:function(t){return this.clone()._mult(t)},div:function(t){return this.clone()._div(t)},rotate:function(t){return this.clone()._rotate(t)},rotateAround:function(t,e){return this.clone()._rotateAround(t,e)},matMult:function(t){return this.clone()._matMult(t)},unit:function(){return this.clone()._unit()},perp:function(){return this.clone()._perp()},round:function(){return this.clone()._round()},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals:function(t){return this.x===t.x&&this.y===t.y},dist:function(t){return Math.sqrt(this.distSqr(t))},distSqr:function(t){var e=t.x-this.x,r=t.y-this.y;return e*e+r*r},angle:function(){return Math.atan2(this.y,this.x)},angleTo:function(t){return Math.atan2(this.y-t.y,this.x-t.x)},angleWith:function(t){return this.angleWithSep(t.x,t.y)},angleWithSep:function(t,e){return Math.atan2(this.x*e-this.y*t,this.x*t+this.y*e)},_matMult:function(t){var e=t[0]*this.x+t[1]*this.y,r=t[2]*this.x+t[3]*this.y;return this.x=e,this.y=r,this},_add:function(t){return this.x+=t.x,this.y+=t.y,this},_sub:function(t){return this.x-=t.x,this.y-=t.y,this},_mult:function(t){return this.x*=t,this.y*=t,this},_div:function(t){return this.x/=t,this.y/=t,this},_multByPoint:function(t){return this.x*=t.x,this.y*=t.y,this},_divByPoint:function(t){return this.x/=t.x,this.y/=t.y,this},_unit:function(){return this._div(this.mag()),this},_perp:function(){var t=this.y;return this.y=this.x,this.x=-t,this},_rotate:function(t){var e=Math.cos(t),r=Math.sin(t),n=e*this.x-r*this.y,i=r*this.x+e*this.y;return this.x=n,this.y=i,this},_rotateAround:function(t,e){var r=Math.cos(t),n=Math.sin(t),i=e.x+r*(this.x-e.x)-n*(this.y-e.y),a=e.y+n*(this.x-e.x)+r*(this.y-e.y);return this.x=i,this.y=a,this},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}},o.convert=function(t){return t instanceof o?t:Array.isArray(t)?new o(t[0],t[1]):t};var l=s(.25,.1,.25,1);function u(t,e,r){return Math.min(r,Math.max(e,t))}function c(t,e,r){var n=r-e,i=((t-e)%n+n)%n+e;return i===e?r:i}function f(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,i=e;n<i.length;n+=1){var a=i[n];for(var o in a)t[o]=a[o]}return t}var h=1;function p(){return h++}function d(){return function t(e){return e?(e^16*Math.random()>>e/4).toString(16):([1e7]+-[1e3]+-4e3+-8e3+-1e11).replace(/[018]/g,t)}()}function v(t){return!!t&&/^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)}function g(t,e){t.forEach((function(t){e[t]&&(e[t]=e[t].bind(e))}))}function y(t,e){return-1!==t.indexOf(e,t.length-e.length)}function m(t,e,r){var n={};for(var i in t)n[i]=e.call(r||this,t[i],i,t);return n}function x(t,e,r){var n={};for(var i in t)e.call(r||this,t[i],i,t)&&(n[i]=t[i]);return n}function b(t){return Array.isArray(t)?t.map(b):"object"==typeof t&&t?m(t,b):t}var _={};function w(t){_[t]||("undefined"!=typeof console&&console.warn(t),_[t]=!0)}function T(t,e,r){return(r.y-t.y)*(e.x-t.x)>(e.y-t.y)*(r.x-t.x)}function k(t){for(var e=0,r=0,n=t.length,i=n-1,a=void 0,o=void 0;r<n;i=r++)a=t[r],e+=((o=t[i]).x-a.x)*(a.y+o.y);return e}function A(){return"undefined"!=typeof WorkerGlobalScope&&"undefined"!=typeof self&&self instanceof WorkerGlobalScope}function M(t){var e={};if(t.replace(/(?:^|(?:\s*\,\s*))([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)(?:\=(?:([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)|(?:\"((?:[^"\\]|\\.)*)\")))?/g,(function(t,r,n,i){var a=n||i;return e[r]=!a||a.toLowerCase(),""})),e["max-age"]){var r=parseInt(e["max-age"],10);isNaN(r)?delete e["max-age"]:e["max-age"]=r}return e}var S=null;function E(t){if(null==S){var e=t.navigator?t.navigator.userAgent:null;S=!!t.safari||!(!e||!(/\b(iPad|iPhone|iPod)\b/.test(e)||e.match("Safari")&&!e.match("Chrome")))}return S}function L(t){try{var e=self[t];return e.setItem("_mapbox_test_",1),e.removeItem("_mapbox_test_"),!0}catch(t){return!1}}var C,P,O,I,D=self.performance&&self.performance.now?self.performance.now.bind(self.performance):Date.now.bind(Date),z=self.requestAnimationFrame||self.mozRequestAnimationFrame||self.webkitRequestAnimationFrame||self.msRequestAnimationFrame,R=self.cancelAnimationFrame||self.mozCancelAnimationFrame||self.webkitCancelAnimationFrame||self.msCancelAnimationFrame,F={now:D,frame:function(t){var e=z(t);return{cancel:function(){return R(e)}}},getImageData:function(t,e){void 0===e&&(e=0);var r=self.document.createElement("canvas"),n=r.getContext("2d");if(!n)throw new Error("failed to create canvas 2d context");return r.width=t.width,r.height=t.height,n.drawImage(t,0,0,t.width,t.height),n.getImageData(-e,-e,t.width+2*e,t.height+2*e)},resolveURL:function(t){return C||(C=self.document.createElement("a")),C.href=t,C.href},hardwareConcurrency:self.navigator.hardwareConcurrency||4,get devicePixelRatio(){return self.devicePixelRatio},get prefersReducedMotion(){return!!self.matchMedia&&(null==P&&(P=self.matchMedia("(prefers-reduced-motion: reduce)")),P.matches)}},B={API_URL:"https://api.mapbox.com",get EVENTS_URL(){return this.API_URL?0===this.API_URL.indexOf("https://api.mapbox.cn")?"https://events.mapbox.cn/events/v2":0===this.API_URL.indexOf("https://api.mapbox.com")?"https://events.mapbox.com/events/v2":null:null},FEEDBACK_URL:"https://apps.mapbox.com/feedback",REQUIRE_ACCESS_TOKEN:!0,ACCESS_TOKEN:null,MAX_PARALLEL_IMAGE_REQUESTS:16},N={supported:!1,testSupport:function(t){!j&&I&&(U?V(t):O=t)}},j=!1,U=!1;function V(t){var e=t.createTexture();t.bindTexture(t.TEXTURE_2D,e);try{if(t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,I),t.isContextLost())return;N.supported=!0}catch(t){}t.deleteTexture(e),j=!0}self.document&&((I=self.document.createElement("img")).onload=function(){O&&V(O),O=null,U=!0},I.onerror=function(){j=!0,O=null},I.src="data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA=");var H="01";var q=function(t,e){this._transformRequestFn=t,this._customAccessToken=e,this._createSkuToken()};function G(t){return 0===t.indexOf("mapbox:")}q.prototype._createSkuToken=function(){var t=function(){for(var t="",e=0;e<10;e++)t+="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[Math.floor(62*Math.random())];return{token:["1",H,t].join(""),tokenExpiresAt:Date.now()+432e5}}();this._skuToken=t.token,this._skuTokenExpiresAt=t.tokenExpiresAt},q.prototype._isSkuTokenExpired=function(){return Date.now()>this._skuTokenExpiresAt},q.prototype.transformRequest=function(t,e){return this._transformRequestFn&&this._transformRequestFn(t,e)||{url:t}},q.prototype.normalizeStyleURL=function(t,e){if(!G(t))return t;var r=X(t);return r.path="/styles/v1"+r.path,this._makeAPIURL(r,this._customAccessToken||e)},q.prototype.normalizeGlyphsURL=function(t,e){if(!G(t))return t;var r=X(t);return r.path="/fonts/v1"+r.path,this._makeAPIURL(r,this._customAccessToken||e)},q.prototype.normalizeSourceURL=function(t,e){if(!G(t))return t;var r=X(t);return r.path="/v4/"+r.authority+".json",r.params.push("secure"),this._makeAPIURL(r,this._customAccessToken||e)},q.prototype.normalizeSpriteURL=function(t,e,r,n){var i=X(t);return G(t)?(i.path="/styles/v1"+i.path+"/sprite"+e+r,this._makeAPIURL(i,this._customAccessToken||n)):(i.path+=""+e+r,J(i))},q.prototype.normalizeTileURL=function(t,e){if(this._isSkuTokenExpired()&&this._createSkuToken(),t&&!G(t))return t;var r=X(t),n=F.devicePixelRatio>=2||512===e?"@2x":"",i=N.supported?".webp":"$1";r.path=r.path.replace(/(\.(png|jpg)\d*)(?=$)/,""+n+i),r.path=r.path.replace(/^.+\/v4\//,"/"),r.path="/v4"+r.path;var a=this._customAccessToken||function(t){for(var e=0,r=t;e<r.length;e+=1){var n=r[e].match(/^access_token=(.*)$/);if(n)return n[1]}return null}(r.params)||B.ACCESS_TOKEN;return B.REQUIRE_ACCESS_TOKEN&&a&&this._skuToken&&r.params.push("sku="+this._skuToken),this._makeAPIURL(r,a)},q.prototype.canonicalizeTileURL=function(t,e){var r=X(t);if(!r.path.match(/(^\/v4\/)/)||!r.path.match(/\.[\w]+$/))return t;var n="mapbox://tiles/";n+=r.path.replace("/v4/","");var i=r.params;return e&&(i=i.filter((function(t){return!t.match(/^access_token=/)}))),i.length&&(n+="?"+i.join("&")),n},q.prototype.canonicalizeTileset=function(t,e){for(var r=!!e&&G(e),n=[],i=0,a=t.tiles||[];i<a.length;i+=1){var o=a[i];Y(o)?n.push(this.canonicalizeTileURL(o,r)):n.push(o)}return n},q.prototype._makeAPIURL=function(t,e){var r="See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes",n=X(B.API_URL);if(t.protocol=n.protocol,t.authority=n.authority,"/"!==n.path&&(t.path=""+n.path+t.path),!B.REQUIRE_ACCESS_TOKEN)return J(t);if(!(e=e||B.ACCESS_TOKEN))throw new Error("An API access token is required to use Mapbox GL. "+r);if("s"===e[0])throw new Error("Use a public access token (pk.*) with Mapbox GL, not a secret access token (sk.*). "+r);return t.params=t.params.filter((function(t){return-1===t.indexOf("access_token")})),t.params.push("access_token="+e),J(t)};var Z=/^((https?:)?\/\/)?([^\/]+\.)?mapbox\.c(n|om)(\/|\?|$)/i;function Y(t){return Z.test(t)}var W=/^(\w+):\/\/([^/?]*)(\/[^?]+)?\??(.+)?/;function X(t){var e=t.match(W);if(!e)throw new Error("Unable to parse URL object");return{protocol:e[1],authority:e[2],path:e[3]||"/",params:e[4]?e[4].split("&"):[]}}function J(t){var e=t.params.length?"?"+t.params.join("&"):"";return t.protocol+"://"+t.authority+t.path+e}var K="mapbox.eventData";function $(t){if(!t)return null;var e,r=t.split(".");if(!r||3!==r.length)return null;try{return JSON.parse((e=r[1],decodeURIComponent(self.atob(e).split("").map((function(t){return"%"+("00"+t.charCodeAt(0).toString(16)).slice(-2)})).join(""))))}catch(t){return null}}var Q=function(t){this.type=t,this.anonId=null,this.eventData={},this.queue=[],this.pendingRequest=null};Q.prototype.getStorageKey=function(t){var e,r,n=$(B.ACCESS_TOKEN);return e=n&&n.u?(r=n.u,self.btoa(encodeURIComponent(r).replace(/%([0-9A-F]{2})/g,(function(t,e){return String.fromCharCode(Number("0x"+e))})))):B.ACCESS_TOKEN||"",t?K+"."+t+":"+e:K+":"+e},Q.prototype.fetchEventData=function(){var t=L("localStorage"),e=this.getStorageKey(),r=this.getStorageKey("uuid");if(t)try{var n=self.localStorage.getItem(e);n&&(this.eventData=JSON.parse(n));var i=self.localStorage.getItem(r);i&&(this.anonId=i)}catch(t){w("Unable to read from LocalStorage")}},Q.prototype.saveEventData=function(){var t=L("localStorage"),e=this.getStorageKey(),r=this.getStorageKey("uuid");if(t)try{self.localStorage.setItem(r,this.anonId),Object.keys(this.eventData).length>=1&&self.localStorage.setItem(e,JSON.stringify(this.eventData))}catch(t){w("Unable to write to LocalStorage")}},Q.prototype.processRequests=function(t){},Q.prototype.postEvent=function(t,e,n,i){var a=this;if(B.EVENTS_URL){var o=X(B.EVENTS_URL);o.params.push("access_token="+(i||B.ACCESS_TOKEN||""));var s={event:this.type,created:new Date(t).toISOString(),sdkIdentifier:"mapbox-gl-js",sdkVersion:r,skuId:H,userId:this.anonId},l=e?f(s,e):s,u={url:J(o),headers:{"Content-Type":"text/plain"},body:JSON.stringify([l])};this.pendingRequest=At(u,(function(t){a.pendingRequest=null,n(t),a.saveEventData(),a.processRequests(i)}))}},Q.prototype.queueRequest=function(t,e){this.queue.push(t),this.processRequests(e)};var tt,et,rt=function(t){function e(){t.call(this,"map.load"),this.success={},this.skuToken=""}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.postMapLoadEvent=function(t,e,r,n){this.skuToken=r,(B.EVENTS_URL&&n||B.ACCESS_TOKEN&&Array.isArray(t)&&t.some((function(t){return G(t)||Y(t)})))&&this.queueRequest({id:e,timestamp:Date.now()},n)},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){var r=this.queue.shift(),n=r.id,i=r.timestamp;n&&this.success[n]||(this.anonId||this.fetchEventData(),v(this.anonId)||(this.anonId=d()),this.postEvent(i,{skuToken:this.skuToken},(function(t){t||n&&(e.success[n]=!0)}),t))}},e}(Q),nt=function(t){function e(e){t.call(this,"appUserTurnstile"),this._customAccessToken=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.postTurnstileEvent=function(t,e){B.EVENTS_URL&&B.ACCESS_TOKEN&&Array.isArray(t)&&t.some((function(t){return G(t)||Y(t)}))&&this.queueRequest(Date.now(),e)},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){this.anonId&&this.eventData.lastSuccess&&this.eventData.tokenU||this.fetchEventData();var r=$(B.ACCESS_TOKEN),n=r?r.u:B.ACCESS_TOKEN,i=n!==this.eventData.tokenU;v(this.anonId)||(this.anonId=d(),i=!0);var a=this.queue.shift();if(this.eventData.lastSuccess){var o=new Date(this.eventData.lastSuccess),s=new Date(a),l=(a-this.eventData.lastSuccess)/864e5;i=i||l>=1||l<-1||o.getDate()!==s.getDate()}else i=!0;if(!i)return this.processRequests();this.postEvent(a,{"enabled.telemetry":!1},(function(t){t||(e.eventData.lastSuccess=a,e.eventData.tokenU=n)}),t)}},e}(Q),it=new nt,at=it.postTurnstileEvent.bind(it),ot=new rt,st=ot.postMapLoadEvent.bind(ot),lt="mapbox-tiles",ut=500,ct=50,ft=42e4;function ht(){self.caches&&!tt&&(tt=self.caches.open(lt))}function pt(t,e,r){if(ht(),tt){var n={status:e.status,statusText:e.statusText,headers:new self.Headers};e.headers.forEach((function(t,e){return n.headers.set(e,t)}));var i=M(e.headers.get("Cache-Control")||"");i["no-store"]||(i["max-age"]&&n.headers.set("Expires",new Date(r+1e3*i["max-age"]).toUTCString()),new Date(n.headers.get("Expires")).getTime()-r<ft||function(t,e){if(void 0===et)try{new Response(new ReadableStream),et=!0}catch(t){et=!1}et?e(t.body):t.blob().then(e)}(e,(function(e){var r=new self.Response(e,n);ht(),tt&&tt.then((function(e){return e.put(dt(t.url),r)})).catch((function(t){return w(t.message)}))})))}}function dt(t){var e=t.indexOf("?");return e<0?t:t.slice(0,e)}function vt(t,e){if(ht(),!tt)return e(null);var r=dt(t.url);tt.then((function(t){t.match(r).then((function(n){var i=function(t){if(!t)return!1;var e=new Date(t.headers.get("Expires")||0),r=M(t.headers.get("Cache-Control")||"");return e>Date.now()&&!r["no-cache"]}(n);t.delete(r),i&&t.put(r,n.clone()),e(null,n,i)})).catch(e)})).catch(e)}var gt,yt=1/0;function mt(){return null==gt&&(gt=self.OffscreenCanvas&&new self.OffscreenCanvas(1,1).getContext("2d")&&"function"==typeof self.createImageBitmap),gt}var xt={Unknown:"Unknown",Style:"Style",Source:"Source",Tile:"Tile",Glyphs:"Glyphs",SpriteImage:"SpriteImage",SpriteJSON:"SpriteJSON",Image:"Image"};"function"==typeof Object.freeze&&Object.freeze(xt);var bt=function(t){function e(e,r,n){401===r&&Y(n)&&(e+=": you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes"),t.call(this,e),this.status=r,this.url=n,this.name=this.constructor.name,this.message=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.toString=function(){return this.name+": "+this.message+" ("+this.status+"): "+this.url},e}(Error),_t=A()?function(){return self.worker&&self.worker.referrer}:function(){return("blob:"===self.location.protocol?self.parent:self).location.href};function wt(t,e){var r,n=new self.AbortController,i=new self.Request(t.url,{method:t.method||"GET",body:t.body,credentials:t.credentials,headers:t.headers,referrer:_t(),signal:n.signal}),a=!1,o=!1,s=(r=i.url).indexOf("sku=")>0&&Y(r);"json"===t.type&&i.headers.set("Accept","application/json");var l=function(r,n,a){if(!o){if(r&&"SecurityError"!==r.message&&w(r),n&&a)return u(n);var l=Date.now();self.fetch(i).then((function(r){if(r.ok){var n=s?r.clone():null;return u(r,n,l)}return e(new bt(r.statusText,r.status,t.url))})).catch((function(t){20!==t.code&&e(new Error(t.message))}))}},u=function(r,n,s){("arrayBuffer"===t.type?r.arrayBuffer():"json"===t.type?r.json():r.text()).then((function(t){o||(n&&s&&pt(i,n,s),a=!0,e(null,t,r.headers.get("Cache-Control"),r.headers.get("Expires")))})).catch((function(t){o||e(new Error(t.message))}))};return s?vt(i,l):l(null,null),{cancel:function(){o=!0,a||n.abort()}}}var Tt=function(t,e){if(r=t.url,!(/^file:/.test(r)||/^file:/.test(_t())&&!/^\w+:/.test(r))){if(self.fetch&&self.Request&&self.AbortController&&self.Request.prototype.hasOwnProperty("signal"))return wt(t,e);if(A()&&self.worker&&self.worker.actor){return self.worker.actor.send("getResource",t,e,void 0,!0)}}var r;return function(t,e){var r=new self.XMLHttpRequest;for(var n in r.open(t.method||"GET",t.url,!0),"arrayBuffer"===t.type&&(r.responseType="arraybuffer"),t.headers)r.setRequestHeader(n,t.headers[n]);return"json"===t.type&&(r.responseType="text",r.setRequestHeader("Accept","application/json")),r.withCredentials="include"===t.credentials,r.onerror=function(){e(new Error(r.statusText))},r.onload=function(){if((r.status>=200&&r.status<300||0===r.status)&&null!==r.response){var n=r.response;if("json"===t.type)try{n=JSON.parse(r.response)}catch(t){return e(t)}e(null,n,r.getResponseHeader("Cache-Control"),r.getResponseHeader("Expires"))}else e(new bt(r.statusText,r.status,t.url))},r.send(t.body),{cancel:function(){return r.abort()}}}(t,e)},kt=function(t,e){return Tt(f(t,{type:"arrayBuffer"}),e)},At=function(t,e){return Tt(f(t,{method:"POST"}),e)};var Mt,St;Mt=[],St=0;var Et=function(t,e){if(N.supported&&(t.headers||(t.headers={}),t.headers.accept="image/webp,*/*"),St>=B.MAX_PARALLEL_IMAGE_REQUESTS){var r={requestParameters:t,callback:e,cancelled:!1,cancel:function(){this.cancelled=!0}};return Mt.push(r),r}St++;var n=!1,i=function(){if(!n)for(n=!0,St--;Mt.length&&St<B.MAX_PARALLEL_IMAGE_REQUESTS;){var t=Mt.shift(),e=t.requestParameters,r=t.callback;t.cancelled||(t.cancel=Et(e,r).cancel)}},a=kt(t,(function(t,r,n,a){i(),t?e(t):r&&(mt()?function(t,e){var r=new self.Blob([new Uint8Array(t)],{type:"image/png"});self.createImageBitmap(r).then((function(t){e(null,t)})).catch((function(t){e(new Error("Could not load image because of "+t.message+". Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported."))}))}(r,e):function(t,e,r,n){var i=new self.Image,a=self.URL;i.onload=function(){e(null,i),a.revokeObjectURL(i.src)},i.onerror=function(){return e(new Error("Could not load image. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported."))};var o=new self.Blob([new Uint8Array(t)],{type:"image/png"});i.cacheControl=r,i.expires=n,i.src=t.byteLength?a.createObjectURL(o):"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII="}(r,e,n,a))}));return{cancel:function(){a.cancel(),i()}}};function Lt(t,e,r){r[t]&&-1!==r[t].indexOf(e)||(r[t]=r[t]||[],r[t].push(e))}function Ct(t,e,r){if(r&&r[t]){var n=r[t].indexOf(e);-1!==n&&r[t].splice(n,1)}}var Pt=function(t,e){void 0===e&&(e={}),f(this,e),this.type=t},Ot=function(t){function e(e,r){void 0===r&&(r={}),t.call(this,"error",f({error:e},r))}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Pt),It=function(){};It.prototype.on=function(t,e){return this._listeners=this._listeners||{},Lt(t,e,this._listeners),this},It.prototype.off=function(t,e){return Ct(t,e,this._listeners),Ct(t,e,this._oneTimeListeners),this},It.prototype.once=function(t,e){return this._oneTimeListeners=this._oneTimeListeners||{},Lt(t,e,this._oneTimeListeners),this},It.prototype.fire=function(t,e){"string"==typeof t&&(t=new Pt(t,e||{}));var r=t.type;if(this.listens(r)){t.target=this;for(var n=0,i=this._listeners&&this._listeners[r]?this._listeners[r].slice():[];n<i.length;n+=1)i[n].call(this,t);for(var a=0,o=this._oneTimeListeners&&this._oneTimeListeners[r]?this._oneTimeListeners[r].slice():[];a<o.length;a+=1){var s=o[a];Ct(r,s,this._oneTimeListeners),s.call(this,t)}var l=this._eventedParent;l&&(f(t,"function"==typeof this._eventedParentData?this._eventedParentData():this._eventedParentData),l.fire(t))}else t instanceof Ot&&console.error(t.error);return this},It.prototype.listens=function(t){return this._listeners&&this._listeners[t]&&this._listeners[t].length>0||this._oneTimeListeners&&this._oneTimeListeners[t]&&this._oneTimeListeners[t].length>0||this._eventedParent&&this._eventedParent.listens(t)},It.prototype.setEventedParent=function(t,e){return this._eventedParent=t,this._eventedParentData=e,this};var Dt={$version:8,$root:{version:{required:!0,type:"enum",values:[8]},name:{type:"string"},metadata:{type:"*"},center:{type:"array",value:"number"},zoom:{type:"number"},bearing:{type:"number",default:0,period:360,units:"degrees"},pitch:{type:"number",default:0,units:"degrees"},light:{type:"light"},sources:{required:!0,type:"sources"},sprite:{type:"string"},glyphs:{type:"string"},transition:{type:"transition"},layers:{required:!0,type:"array",value:"layer"}},sources:{"*":{type:"source"}},source:["source_vector","source_raster","source_raster_dem","source_geojson","source_video","source_image"],source_vector:{type:{required:!0,type:"enum",values:{vector:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},attribution:{type:"string"},promoteId:{type:"promoteId"},"*":{type:"*"}},source_raster:{type:{required:!0,type:"enum",values:{raster:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},attribution:{type:"string"},"*":{type:"*"}},source_raster_dem:{type:{required:!0,type:"enum",values:{"raster-dem":{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},attribution:{type:"string"},encoding:{type:"enum",values:{terrarium:{},mapbox:{}},default:"mapbox"},"*":{type:"*"}},source_geojson:{type:{required:!0,type:"enum",values:{geojson:{}}},data:{type:"*"},maxzoom:{type:"number",default:18},attribution:{type:"string"},buffer:{type:"number",default:128,maximum:512,minimum:0},tolerance:{type:"number",default:.375},cluster:{type:"boolean",default:!1},clusterRadius:{type:"number",default:50,minimum:0},clusterMaxZoom:{type:"number"},clusterProperties:{type:"*"},lineMetrics:{type:"boolean",default:!1},generateId:{type:"boolean",default:!1},promoteId:{type:"promoteId"}},source_video:{type:{required:!0,type:"enum",values:{video:{}}},urls:{required:!0,type:"array",value:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},source_image:{type:{required:!0,type:"enum",values:{image:{}}},url:{required:!0,type:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},layer:{id:{type:"string",required:!0},type:{type:"enum",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},"fill-extrusion":{},raster:{},hillshade:{},background:{}},required:!0},metadata:{type:"*"},source:{type:"string"},"source-layer":{type:"string"},minzoom:{type:"number",minimum:0,maximum:24},maxzoom:{type:"number",minimum:0,maximum:24},filter:{type:"filter"},layout:{type:"layout"},paint:{type:"paint"}},layout:["layout_fill","layout_line","layout_circle","layout_heatmap","layout_fill-extrusion","layout_symbol","layout_raster","layout_hillshade","layout_background"],layout_background:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_fill:{"fill-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_circle:{"circle-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_heatmap:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},"layout_fill-extrusion":{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_line:{"line-cap":{type:"enum",values:{butt:{},round:{},square:{}},default:"butt",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-join":{type:"enum",values:{bevel:{},round:{},miter:{}},default:"miter",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-miter-limit":{type:"number",default:2,requires:[{"line-join":"miter"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-round-limit":{type:"number",default:1.05,requires:[{"line-join":"round"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_symbol:{"symbol-placement":{type:"enum",values:{point:{},line:{},"line-center":{}},default:"point",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-spacing":{type:"number",default:250,minimum:1,units:"pixels",requires:[{"symbol-placement":"line"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"symbol-avoid-edges":{type:"boolean",default:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"symbol-z-order":{type:"enum",values:{auto:{},"viewport-y":{},source:{}},default:"auto",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-allow-overlap":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-ignore-placement":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-optional":{type:"boolean",default:!1,requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-size":{type:"number",default:1,minimum:0,units:"factor of the original icon size",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-text-fit":{type:"enum",values:{none:{},width:{},height:{},both:{}},default:"none",requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-text-fit-padding":{type:"array",value:"number",length:4,default:[0,0,0,0],units:"pixels",requires:["icon-image","text-field",{"icon-text-fit":["both","width","height"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-image":{type:"resolvedImage",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-keep-upright":{type:"boolean",default:!1,requires:["icon-image",{"icon-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-offset":{type:"array",value:"number",length:2,default:[0,0],requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-field":{type:"formatted",default:"",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-font":{type:"array",value:"string",default:["Open Sans Regular","Arial Unicode MS Regular"],requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-size":{type:"number",default:16,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-width":{type:"number",default:10,minimum:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-line-height":{type:"number",default:1.2,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-letter-spacing":{type:"number",default:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-justify":{type:"enum",values:{auto:{},left:{},center:{},right:{}},default:"center",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-radial-offset":{type:"number",units:"ems",default:0,requires:["text-field"],"property-type":"data-driven",expression:{interpolated:!0,parameters:["zoom","feature"]}},"text-variable-anchor":{type:"array",value:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["text-field",{"!":"text-variable-anchor"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-angle":{type:"number",default:45,units:"degrees",requires:["text-field",{"symbol-placement":["line","line-center"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-writing-mode":{type:"array",value:"enum",values:{horizontal:{},vertical:{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-keep-upright":{type:"boolean",default:!0,requires:["text-field",{"text-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-transform":{type:"enum",values:{none:{},uppercase:{},lowercase:{}},default:"none",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-offset":{type:"array",value:"number",units:"ems",length:2,default:[0,0],requires:["text-field",{"!":"text-radial-offset"}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-allow-overlap":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-ignore-placement":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-optional":{type:"boolean",default:!1,requires:["text-field","icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_raster:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_hillshade:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},filter:{type:"array",value:"*"},filter_operator:{type:"enum",values:{"==":{},"!=":{},">":{},">=":{},"<":{},"<=":{},in:{},"!in":{},all:{},any:{},none:{},has:{},"!has":{},within:{}}},geometry_type:{type:"enum",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:"expression"},stops:{type:"array",value:"function_stop"},base:{type:"number",default:1,minimum:0},property:{type:"string",default:"$zoom"},type:{type:"enum",values:{identity:{},exponential:{},interval:{},categorical:{}},default:"exponential"},colorSpace:{type:"enum",values:{rgb:{},lab:{},hcl:{}},default:"rgb"},default:{type:"*",required:!1}},function_stop:{type:"array",minimum:0,maximum:24,value:["number","color"],length:2},expression:{type:"array",value:"*",minimum:1},expression_name:{type:"enum",values:{let:{group:"Variable binding"},var:{group:"Variable binding"},literal:{group:"Types"},array:{group:"Types"},at:{group:"Lookup"},in:{group:"Lookup"},"index-of":{group:"Lookup"},slice:{group:"Lookup"},case:{group:"Decision"},match:{group:"Decision"},coalesce:{group:"Decision"},step:{group:"Ramps, scales, curves"},interpolate:{group:"Ramps, scales, curves"},"interpolate-hcl":{group:"Ramps, scales, curves"},"interpolate-lab":{group:"Ramps, scales, curves"},ln2:{group:"Math"},pi:{group:"Math"},e:{group:"Math"},typeof:{group:"Types"},string:{group:"Types"},number:{group:"Types"},boolean:{group:"Types"},object:{group:"Types"},collator:{group:"Types"},format:{group:"Types"},image:{group:"Types"},"number-format":{group:"Types"},"to-string":{group:"Types"},"to-number":{group:"Types"},"to-boolean":{group:"Types"},"to-rgba":{group:"Color"},"to-color":{group:"Types"},rgb:{group:"Color"},rgba:{group:"Color"},get:{group:"Lookup"},has:{group:"Lookup"},length:{group:"Lookup"},properties:{group:"Feature data"},"feature-state":{group:"Feature data"},"geometry-type":{group:"Feature data"},id:{group:"Feature data"},zoom:{group:"Zoom"},"heatmap-density":{group:"Heatmap"},"line-progress":{group:"Feature data"},accumulated:{group:"Feature data"},"+":{group:"Math"},"*":{group:"Math"},"-":{group:"Math"},"/":{group:"Math"},"%":{group:"Math"},"^":{group:"Math"},sqrt:{group:"Math"},log10:{group:"Math"},ln:{group:"Math"},log2:{group:"Math"},sin:{group:"Math"},cos:{group:"Math"},tan:{group:"Math"},asin:{group:"Math"},acos:{group:"Math"},atan:{group:"Math"},min:{group:"Math"},max:{group:"Math"},round:{group:"Math"},abs:{group:"Math"},ceil:{group:"Math"},floor:{group:"Math"},distance:{group:"Math"},"==":{group:"Decision"},"!=":{group:"Decision"},">":{group:"Decision"},"<":{group:"Decision"},">=":{group:"Decision"},"<=":{group:"Decision"},all:{group:"Decision"},any:{group:"Decision"},"!":{group:"Decision"},within:{group:"Decision"},"is-supported-script":{group:"String"},upcase:{group:"String"},downcase:{group:"String"},concat:{group:"String"},"resolved-locale":{group:"String"}}},light:{anchor:{type:"enum",default:"viewport",values:{map:{},viewport:{}},"property-type":"data-constant",transition:!1,expression:{interpolated:!1,parameters:["zoom"]}},position:{type:"array",default:[1.15,210,30],length:3,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},intensity:{type:"number","property-type":"data-constant",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},paint:["paint_fill","paint_line","paint_circle","paint_heatmap","paint_fill-extrusion","paint_symbol","paint_raster","paint_hillshade","paint_background"],paint_fill:{"fill-antialias":{type:"boolean",default:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-outline-color":{type:"color",transition:!0,requires:[{"!":"fill-pattern"},{"fill-antialias":!0}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-pattern":{type:"resolvedImage",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"}},"paint_fill-extrusion":{"fill-extrusion-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-extrusion-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-extrusion-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-pattern":{type:"resolvedImage",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"},"fill-extrusion-height":{type:"number",default:0,minimum:0,units:"meters",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-base":{type:"number",default:0,minimum:0,units:"meters",transition:!0,requires:["fill-extrusion-height"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-vertical-gradient":{type:"boolean",default:!0,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_line:{"line-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"line-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["line-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-width":{type:"number",default:1,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-gap-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-offset":{type:"number",default:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-dasharray":{type:"array",value:"number",minimum:0,transition:!0,units:"line widths",requires:[{"!":"line-pattern"}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"cross-faded"},"line-pattern":{type:"resolvedImage",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"},"line-gradient":{type:"color",transition:!1,requires:[{"!":"line-dasharray"},{"!":"line-pattern"},{source:"geojson",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:["line-progress"]},"property-type":"color-ramp"}},paint_circle:{"circle-radius":{type:"number",default:5,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-blur":{type:"number",default:0,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"circle-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["circle-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-scale":{type:"enum",values:{map:{},viewport:{}},default:"map",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-alignment":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-stroke-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"}},paint_heatmap:{"heatmap-radius":{type:"number",default:30,minimum:1,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-weight":{type:"number",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-intensity":{type:"number",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"heatmap-color":{type:"color",default:["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 255, 0)",.1,"royalblue",.3,"cyan",.5,"lime",.7,"yellow",1,"red"],transition:!1,expression:{interpolated:!0,parameters:["heatmap-density"]},"property-type":"color-ramp"},"heatmap-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_symbol:{"icon-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-color":{type:"color",default:"#000000",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["icon-image","icon-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-color":{type:"color",default:"#000000",transition:!0,overridable:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["text-field","text-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_raster:{"raster-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-hue-rotate":{type:"number",default:0,period:360,transition:!0,units:"degrees",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-min":{type:"number",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-max":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-saturation":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-contrast":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-resampling":{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"raster-fade-duration":{type:"number",default:300,minimum:0,transition:!1,units:"milliseconds",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_hillshade:{"hillshade-illumination-direction":{type:"number",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-illumination-anchor":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-exaggeration":{type:"number",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-shadow-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-highlight-color":{type:"color",default:"#FFFFFF",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-accent-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_background:{"background-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"background-pattern"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"background-pattern":{type:"resolvedImage",transition:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"cross-faded"},"background-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},transition:{duration:{type:"number",default:300,minimum:0,units:"milliseconds"},delay:{type:"number",default:0,minimum:0,units:"milliseconds"}},"property-type":{"data-driven":{type:"property-type"},"cross-faded":{type:"property-type"},"cross-faded-data-driven":{type:"property-type"},"color-ramp":{type:"property-type"},"data-constant":{type:"property-type"},constant:{type:"property-type"}},promoteId:{"*":{type:"string"}}},zt=function(t,e,r,n){this.message=(t?t+": ":"")+r,n&&(this.identifier=n),null!=e&&e.__line__&&(this.line=e.__line__)};function Rt(t){var e=t.key,r=t.value;return r?[new zt(e,r,"constants have been deprecated as of v8")]:[]}function Ft(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,i=e;n<i.length;n+=1){var a=i[n];for(var o in a)t[o]=a[o]}return t}function Bt(t){return t instanceof Number||t instanceof String||t instanceof Boolean?t.valueOf():t}function Nt(t){if(Array.isArray(t))return t.map(Nt);if(t instanceof Object&&!(t instanceof Number||t instanceof String||t instanceof Boolean)){var e={};for(var r in t)e[r]=Nt(t[r]);return e}return Bt(t)}var jt=function(t){function e(e,r){t.call(this,r),this.message=r,this.key=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error),Ut=function(t,e){void 0===e&&(e=[]),this.parent=t,this.bindings={};for(var r=0,n=e;r<n.length;r+=1){var i=n[r],a=i[0],o=i[1];this.bindings[a]=o}};Ut.prototype.concat=function(t){return new Ut(this,t)},Ut.prototype.get=function(t){if(this.bindings[t])return this.bindings[t];if(this.parent)return this.parent.get(t);throw new Error(t+" not found in scope.")},Ut.prototype.has=function(t){return!!this.bindings[t]||!!this.parent&&this.parent.has(t)};var Vt={kind:"null"},Ht={kind:"number"},qt={kind:"string"},Gt={kind:"boolean"},Zt={kind:"color"},Yt={kind:"object"},Wt={kind:"value"},Xt={kind:"collator"},Jt={kind:"formatted"},Kt={kind:"resolvedImage"};function $t(t,e){return{kind:"array",itemType:t,N:e}}function Qt(t){if("array"===t.kind){var e=Qt(t.itemType);return"number"==typeof t.N?"array<"+e+", "+t.N+">":"value"===t.itemType.kind?"array":"array<"+e+">"}return t.kind}var te=[Vt,Ht,qt,Gt,Zt,Jt,Yt,$t(Wt),Kt];function ee(t,e){if("error"===e.kind)return null;if("array"===t.kind){if("array"===e.kind&&(0===e.N&&"value"===e.itemType.kind||!ee(t.itemType,e.itemType))&&("number"!=typeof t.N||t.N===e.N))return null}else{if(t.kind===e.kind)return null;if("value"===t.kind)for(var r=0,n=te;r<n.length;r+=1)if(!ee(n[r],e))return null}return"Expected "+Qt(t)+" but found "+Qt(e)+" instead."}function re(t,e){return e.some((function(e){return e.kind===t.kind}))}function ne(t,e){return e.some((function(e){return"null"===e?null===t:"array"===e?Array.isArray(t):"object"===e?t&&!Array.isArray(t)&&"object"==typeof t:e===typeof t}))}var ie=e((function(t,e){var r={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],rebeccapurple:[102,51,153,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function n(t){return(t=Math.round(t))<0?0:t>255?255:t}function i(t){return t<0?0:t>1?1:t}function a(t){return"%"===t[t.length-1]?n(parseFloat(t)/100*255):n(parseInt(t))}function o(t){return"%"===t[t.length-1]?i(parseFloat(t)/100):i(parseFloat(t))}function s(t,e,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?t+(e-t)*r*6:2*r<1?e:3*r<2?t+(e-t)*(2/3-r)*6:t}try{e.parseCSSColor=function(t){var e,i=t.replace(/ /g,"").toLowerCase();if(i in r)return r[i].slice();if("#"===i[0])return 4===i.length?(e=parseInt(i.substr(1),16))>=0&&e<=4095?[(3840&e)>>4|(3840&e)>>8,240&e|(240&e)>>4,15&e|(15&e)<<4,1]:null:7===i.length&&(e=parseInt(i.substr(1),16))>=0&&e<=16777215?[(16711680&e)>>16,(65280&e)>>8,255&e,1]:null;var l=i.indexOf("("),u=i.indexOf(")");if(-1!==l&&u+1===i.length){var c=i.substr(0,l),f=i.substr(l+1,u-(l+1)).split(","),h=1;switch(c){case"rgba":if(4!==f.length)return null;h=o(f.pop());case"rgb":return 3!==f.length?null:[a(f[0]),a(f[1]),a(f[2]),h];case"hsla":if(4!==f.length)return null;h=o(f.pop());case"hsl":if(3!==f.length)return null;var p=(parseFloat(f[0])%360+360)%360/360,d=o(f[1]),v=o(f[2]),g=v<=.5?v*(d+1):v+d-v*d,y=2*v-g;return[n(255*s(y,g,p+1/3)),n(255*s(y,g,p)),n(255*s(y,g,p-1/3)),h];default:return null}}return null}}catch(t){}})),ae=ie.parseCSSColor,oe=function(t,e,r,n){void 0===n&&(n=1),this.r=t,this.g=e,this.b=r,this.a=n};oe.parse=function(t){if(t){if(t instanceof oe)return t;if("string"==typeof t){var e=ae(t);if(e)return new oe(e[0]/255*e[3],e[1]/255*e[3],e[2]/255*e[3],e[3])}}},oe.prototype.toString=function(){var t=this.toArray(),e=t[0],r=t[1],n=t[2],i=t[3];return"rgba("+Math.round(e)+","+Math.round(r)+","+Math.round(n)+","+i+")"},oe.prototype.toArray=function(){var t=this,e=t.r,r=t.g,n=t.b,i=t.a;return 0===i?[0,0,0,0]:[255*e/i,255*r/i,255*n/i,i]},oe.black=new oe(0,0,0,1),oe.white=new oe(1,1,1,1),oe.transparent=new oe(0,0,0,0),oe.red=new oe(1,0,0,1);var se=function(t,e,r){this.sensitivity=t?e?"variant":"case":e?"accent":"base",this.locale=r,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:"search"})};se.prototype.compare=function(t,e){return this.collator.compare(t,e)},se.prototype.resolvedLocale=function(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale};var le=function(t,e,r,n,i){this.text=t,this.image=e,this.scale=r,this.fontStack=n,this.textColor=i},ue=function(t){this.sections=t};ue.fromString=function(t){return new ue([new le(t,null,null,null,null)])},ue.prototype.isEmpty=function(){return 0===this.sections.length||!this.sections.some((function(t){return 0!==t.text.length||t.image&&0!==t.image.name.length}))},ue.factory=function(t){return t instanceof ue?t:ue.fromString(t)},ue.prototype.toString=function(){return 0===this.sections.length?"":this.sections.map((function(t){return t.text})).join("")},ue.prototype.serialize=function(){for(var t=["format"],e=0,r=this.sections;e<r.length;e+=1){var n=r[e];if(n.image)t.push(["image",n.image.name]);else{t.push(n.text);var i={};n.fontStack&&(i["text-font"]=["literal",n.fontStack.split(",")]),n.scale&&(i["font-scale"]=n.scale),n.textColor&&(i["text-color"]=["rgba"].concat(n.textColor.toArray())),t.push(i)}}return t};var ce=function(t){this.name=t.name,this.available=t.available};function fe(t,e,r,n){return"number"==typeof t&&t>=0&&t<=255&&"number"==typeof e&&e>=0&&e<=255&&"number"==typeof r&&r>=0&&r<=255?void 0===n||"number"==typeof n&&n>=0&&n<=1?null:"Invalid rgba value ["+[t,e,r,n].join(", ")+"]: 'a' must be between 0 and 1.":"Invalid rgba value ["+("number"==typeof n?[t,e,r,n]:[t,e,r]).join(", ")+"]: 'r', 'g', and 'b' must be between 0 and 255."}function he(t){if(null===t)return!0;if("string"==typeof t)return!0;if("boolean"==typeof t)return!0;if("number"==typeof t)return!0;if(t instanceof oe)return!0;if(t instanceof se)return!0;if(t instanceof ue)return!0;if(t instanceof ce)return!0;if(Array.isArray(t)){for(var e=0,r=t;e<r.length;e+=1)if(!he(r[e]))return!1;return!0}if("object"==typeof t){for(var n in t)if(!he(t[n]))return!1;return!0}return!1}function pe(t){if(null===t)return Vt;if("string"==typeof t)return qt;if("boolean"==typeof t)return Gt;if("number"==typeof t)return Ht;if(t instanceof oe)return Zt;if(t instanceof se)return Xt;if(t instanceof ue)return Jt;if(t instanceof ce)return Kt;if(Array.isArray(t)){for(var e,r=t.length,n=0,i=t;n<i.length;n+=1){var a=pe(i[n]);if(e){if(e===a)continue;e=Wt;break}e=a}return $t(e||Wt,r)}return Yt}function de(t){var e=typeof t;return null===t?"":"string"===e||"number"===e||"boolean"===e?String(t):t instanceof oe||t instanceof ue||t instanceof ce?t.toString():JSON.stringify(t)}ce.prototype.toString=function(){return this.name},ce.fromString=function(t){return t?new ce({name:t,available:!1}):null},ce.prototype.serialize=function(){return["image",this.name]};var ve=function(t,e){this.type=t,this.value=e};ve.parse=function(t,e){if(2!==t.length)return e.error("'literal' expression requires exactly one argument, but found "+(t.length-1)+" instead.");if(!he(t[1]))return e.error("invalid value");var r=t[1],n=pe(r),i=e.expectedType;return"array"!==n.kind||0!==n.N||!i||"array"!==i.kind||"number"==typeof i.N&&0!==i.N||(n=i),new ve(n,r)},ve.prototype.evaluate=function(){return this.value},ve.prototype.eachChild=function(){},ve.prototype.outputDefined=function(){return!0},ve.prototype.serialize=function(){return"array"===this.type.kind||"object"===this.type.kind?["literal",this.value]:this.value instanceof oe?["rgba"].concat(this.value.toArray()):this.value instanceof ue?this.value.serialize():this.value};var ge=function(t){this.name="ExpressionEvaluationError",this.message=t};ge.prototype.toJSON=function(){return this.message};var ye={string:qt,number:Ht,boolean:Gt,object:Yt},me=function(t,e){this.type=t,this.args=e};me.parse=function(t,e){if(t.length<2)return e.error("Expected at least one argument.");var r,n=1,i=t[0];if("array"===i){var a,o;if(t.length>2){var s=t[1];if("string"!=typeof s||!(s in ye)||"object"===s)return e.error('The item type argument of "array" must be one of string, number, boolean',1);a=ye[s],n++}else a=Wt;if(t.length>3){if(null!==t[2]&&("number"!=typeof t[2]||t[2]<0||t[2]!==Math.floor(t[2])))return e.error('The length argument to "array" must be a positive integer literal',2);o=t[2],n++}r=$t(a,o)}else r=ye[i];for(var l=[];n<t.length;n++){var u=e.parse(t[n],n,Wt);if(!u)return null;l.push(u)}return new me(r,l)},me.prototype.evaluate=function(t){for(var e=0;e<this.args.length;e++){var r=this.args[e].evaluate(t);if(!ee(this.type,pe(r)))return r;if(e===this.args.length-1)throw new ge("Expected value to be of type "+Qt(this.type)+", but found "+Qt(pe(r))+" instead.")}return null},me.prototype.eachChild=function(t){this.args.forEach(t)},me.prototype.outputDefined=function(){return this.args.every((function(t){return t.outputDefined()}))},me.prototype.serialize=function(){var t=this.type,e=[t.kind];if("array"===t.kind){var r=t.itemType;if("string"===r.kind||"number"===r.kind||"boolean"===r.kind){e.push(r.kind);var n=t.N;("number"==typeof n||this.args.length>1)&&e.push(n)}}return e.concat(this.args.map((function(t){return t.serialize()})))};var xe=function(t){this.type=Jt,this.sections=t};xe.parse=function(t,e){if(t.length<2)return e.error("Expected at least one argument.");var r=t[1];if(!Array.isArray(r)&&"object"==typeof r)return e.error("First argument must be an image or text section.");for(var n=[],i=!1,a=1;a<=t.length-1;++a){var o=t[a];if(i&&"object"==typeof o&&!Array.isArray(o)){i=!1;var s=null;if(o["font-scale"]&&!(s=e.parse(o["font-scale"],1,Ht)))return null;var l=null;if(o["text-font"]&&!(l=e.parse(o["text-font"],1,$t(qt))))return null;var u=null;if(o["text-color"]&&!(u=e.parse(o["text-color"],1,Zt)))return null;var c=n[n.length-1];c.scale=s,c.font=l,c.textColor=u}else{var f=e.parse(t[a],1,Wt);if(!f)return null;var h=f.type.kind;if("string"!==h&&"value"!==h&&"null"!==h&&"resolvedImage"!==h)return e.error("Formatted text type must be 'string', 'value', 'image' or 'null'.");i=!0,n.push({content:f,scale:null,font:null,textColor:null})}}return new xe(n)},xe.prototype.evaluate=function(t){return new ue(this.sections.map((function(e){var r=e.content.evaluate(t);return pe(r)===Kt?new le("",r,null,null,null):new le(de(r),null,e.scale?e.scale.evaluate(t):null,e.font?e.font.evaluate(t).join(","):null,e.textColor?e.textColor.evaluate(t):null)})))},xe.prototype.eachChild=function(t){for(var e=0,r=this.sections;e<r.length;e+=1){var n=r[e];t(n.content),n.scale&&t(n.scale),n.font&&t(n.font),n.textColor&&t(n.textColor)}},xe.prototype.outputDefined=function(){return!1},xe.prototype.serialize=function(){for(var t=["format"],e=0,r=this.sections;e<r.length;e+=1){var n=r[e];t.push(n.content.serialize());var i={};n.scale&&(i["font-scale"]=n.scale.serialize()),n.font&&(i["text-font"]=n.font.serialize()),n.textColor&&(i["text-color"]=n.textColor.serialize()),t.push(i)}return t};var be=function(t){this.type=Kt,this.input=t};be.parse=function(t,e){if(2!==t.length)return e.error("Expected two arguments.");var r=e.parse(t[1],1,qt);return r?new be(r):e.error("No image name provided.")},be.prototype.evaluate=function(t){var e=this.input.evaluate(t),r=ce.fromString(e);return r&&t.availableImages&&(r.available=t.availableImages.indexOf(e)>-1),r},be.prototype.eachChild=function(t){t(this.input)},be.prototype.outputDefined=function(){return!1},be.prototype.serialize=function(){return["image",this.input.serialize()]};var _e={"to-boolean":Gt,"to-color":Zt,"to-number":Ht,"to-string":qt},we=function(t,e){this.type=t,this.args=e};we.parse=function(t,e){if(t.length<2)return e.error("Expected at least one argument.");var r=t[0];if(("to-boolean"===r||"to-string"===r)&&2!==t.length)return e.error("Expected one argument.");for(var n=_e[r],i=[],a=1;a<t.length;a++){var o=e.parse(t[a],a,Wt);if(!o)return null;i.push(o)}return new we(n,i)},we.prototype.evaluate=function(t){if("boolean"===this.type.kind)return Boolean(this.args[0].evaluate(t));if("color"===this.type.kind){for(var e,r,n=0,i=this.args;n<i.length;n+=1){if(r=null,(e=i[n].evaluate(t))instanceof oe)return e;if("string"==typeof e){var a=t.parseColor(e);if(a)return a}else if(Array.isArray(e)&&!(r=e.length<3||e.length>4?"Invalid rbga value "+JSON.stringify(e)+": expected an array containing either three or four numeric values.":fe(e[0],e[1],e[2],e[3])))return new oe(e[0]/255,e[1]/255,e[2]/255,e[3])}throw new ge(r||"Could not parse color from value '"+("string"==typeof e?e:String(JSON.stringify(e)))+"'")}if("number"===this.type.kind){for(var o=null,s=0,l=this.args;s<l.length;s+=1){if(null===(o=l[s].evaluate(t)))return 0;var u=Number(o);if(!isNaN(u))return u}throw new ge("Could not convert "+JSON.stringify(o)+" to number.")}return"formatted"===this.type.kind?ue.fromString(de(this.args[0].evaluate(t))):"resolvedImage"===this.type.kind?ce.fromString(de(this.args[0].evaluate(t))):de(this.args[0].evaluate(t))},we.prototype.eachChild=function(t){this.args.forEach(t)},we.prototype.outputDefined=function(){return this.args.every((function(t){return t.outputDefined()}))},we.prototype.serialize=function(){if("formatted"===this.type.kind)return new xe([{content:this.args[0],scale:null,font:null,textColor:null}]).serialize();if("resolvedImage"===this.type.kind)return new be(this.args[0]).serialize();var t=["to-"+this.type.kind];return this.eachChild((function(e){t.push(e.serialize())})),t};var Te=["Unknown","Point","LineString","Polygon"],ke=function(){this.globals=null,this.feature=null,this.featureState=null,this.formattedSection=null,this._parseColorCache={},this.availableImages=null,this.canonical=null};ke.prototype.id=function(){return this.feature&&"id"in this.feature?this.feature.id:null},ke.prototype.geometryType=function(){return this.feature?"number"==typeof this.feature.type?Te[this.feature.type]:this.feature.type:null},ke.prototype.geometry=function(){return this.feature&&"geometry"in this.feature?this.feature.geometry:null},ke.prototype.canonicalID=function(){return this.canonical},ke.prototype.properties=function(){return this.feature&&this.feature.properties||{}},ke.prototype.parseColor=function(t){var e=this._parseColorCache[t];return e||(e=this._parseColorCache[t]=oe.parse(t)),e};var Ae=function(t,e,r,n){this.name=t,this.type=e,this._evaluate=r,this.args=n};Ae.prototype.evaluate=function(t){return this._evaluate(t,this.args)},Ae.prototype.eachChild=function(t){this.args.forEach(t)},Ae.prototype.outputDefined=function(){return!1},Ae.prototype.serialize=function(){return[this.name].concat(this.args.map((function(t){return t.serialize()})))},Ae.parse=function(t,e){var r,n=t[0],i=Ae.definitions[n];if(!i)return e.error('Unknown expression "'+n+'". If you wanted a literal array, use ["literal", [...]].',0);for(var a=Array.isArray(i)?i[0]:i.type,o=Array.isArray(i)?[[i[1],i[2]]]:i.overloads,s=o.filter((function(e){var r=e[0];return!Array.isArray(r)||r.length===t.length-1})),l=null,u=0,c=s;u<c.length;u+=1){var f=c[u],h=f[0],p=f[1];l=new We(e.registry,e.path,null,e.scope);for(var d=[],v=!1,g=1;g<t.length;g++){var y=t[g],m=Array.isArray(h)?h[g-1]:h.type,x=l.parse(y,1+d.length,m);if(!x){v=!0;break}d.push(x)}if(!v)if(Array.isArray(h)&&h.length!==d.length)l.error("Expected "+h.length+" arguments, but found "+d.length+" instead.");else{for(var b=0;b<d.length;b++){var _=Array.isArray(h)?h[b]:h.type,w=d[b];l.concat(b+1).checkSubtype(_,w.type)}if(0===l.errors.length)return new Ae(n,a,p,d)}}if(1===s.length)(r=e.errors).push.apply(r,l.errors);else{for(var T=(s.length?s:o).map((function(t){return e=t[0],Array.isArray(e)?"("+e.map(Qt).join(", ")+")":"("+Qt(e.type)+"...)";var e})).join(" | "),k=[],A=1;A<t.length;A++){var M=e.parse(t[A],1+k.length);if(!M)return null;k.push(Qt(M.type))}e.error("Expected arguments of type "+T+", but found ("+k.join(", ")+") instead.")}return null},Ae.register=function(t,e){for(var r in Ae.definitions=e,e)t[r]=Ae};var Me=function(t,e,r){this.type=Xt,this.locale=r,this.caseSensitive=t,this.diacriticSensitive=e};Me.parse=function(t,e){if(2!==t.length)return e.error("Expected one argument.");var r=t[1];if("object"!=typeof r||Array.isArray(r))return e.error("Collator options argument must be an object.");var n=e.parse(void 0!==r["case-sensitive"]&&r["case-sensitive"],1,Gt);if(!n)return null;var i=e.parse(void 0!==r["diacritic-sensitive"]&&r["diacritic-sensitive"],1,Gt);if(!i)return null;var a=null;return r.locale&&!(a=e.parse(r.locale,1,qt))?null:new Me(n,i,a)},Me.prototype.evaluate=function(t){return new se(this.caseSensitive.evaluate(t),this.diacriticSensitive.evaluate(t),this.locale?this.locale.evaluate(t):null)},Me.prototype.eachChild=function(t){t(this.caseSensitive),t(this.diacriticSensitive),this.locale&&t(this.locale)},Me.prototype.outputDefined=function(){return!1},Me.prototype.serialize=function(){var t={};return t["case-sensitive"]=this.caseSensitive.serialize(),t["diacritic-sensitive"]=this.diacriticSensitive.serialize(),this.locale&&(t.locale=this.locale.serialize()),["collator",t]};var Se=8192;function Ee(t,e){t[0]=Math.min(t[0],e[0]),t[1]=Math.min(t[1],e[1]),t[2]=Math.max(t[2],e[0]),t[3]=Math.max(t[3],e[1])}function Le(t,e){return!(t[0]<=e[0]||t[2]>=e[2]||t[1]<=e[1]||t[3]>=e[3])}function Ce(t,e){var r,n=(180+t[0])/360,i=(r=t[1],(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+r*Math.PI/360)))/360),a=Math.pow(2,e.z);return[Math.round(n*a*Se),Math.round(i*a*Se)]}function Pe(t,e,r){return e[1]>t[1]!=r[1]>t[1]&&t[0]<(r[0]-e[0])*(t[1]-e[1])/(r[1]-e[1])+e[0]}function Oe(t,e){for(var r=!1,n=0,i=e.length;n<i;n++)for(var a=e[n],o=0,s=a.length;o<s-1;o++){if(l=t,u=a[o],c=a[o+1],f=void 0,h=void 0,p=void 0,d=void 0,f=l[0]-u[0],h=l[1]-u[1],p=l[0]-c[0],d=l[1]-c[1],f*d-p*h==0&&f*p<=0&&h*d<=0)return!1;Pe(t,a[o],a[o+1])&&(r=!r)}var l,u,c,f,h,p,d;return r}function Ie(t,e){for(var r=0;r<e.length;r++)if(Oe(t,e[r]))return!0;return!1}function De(t,e,r,n){var i=t[0]-r[0],a=t[1]-r[1],o=e[0]-r[0],s=e[1]-r[1],l=n[0]-r[0],u=n[1]-r[1],c=i*u-l*a,f=o*u-l*s;return c>0&&f<0||c<0&&f>0}function ze(t,e,r){for(var n=0,i=r;n<i.length;n+=1)for(var a=i[n],o=0;o<a.length-1;++o)if(s=t,l=e,u=a[o],c=a[o+1],f=void 0,h=void 0,p=void 0,p=[l[0]-s[0],l[1]-s[1]],0!=(f=[c[0]-u[0],c[1]-u[1]],h=p,f[0]*h[1]-f[1]*h[0])&&De(s,l,u,c)&&De(u,c,s,l))return!0;var s,l,u,c,f,h,p;return!1}function Re(t,e){for(var r=0;r<t.length;++r)if(!Oe(t[r],e))return!1;for(var n=0;n<t.length-1;++n)if(ze(t[n],t[n+1],e))return!1;return!0}function Fe(t,e){for(var r=0;r<e.length;r++)if(Re(t,e[r]))return!0;return!1}function Be(t,e,r){for(var n=[],i=0;i<t.length;i++){for(var a=[],o=0;o<t[i].length;o++){var s=Ce(t[i][o],r);Ee(e,s),a.push(s)}n.push(a)}return n}function Ne(t,e,r){for(var n=[],i=0;i<t.length;i++){var a=Be(t[i],e,r);n.push(a)}return n}function je(t,e,r,n){if(t[0]<r[0]||t[0]>r[2]){var i=.5*n,a=t[0]-r[0]>i?-n:r[0]-t[0]>i?n:0;0===a&&(a=t[0]-r[2]>i?-n:r[2]-t[0]>i?n:0),t[0]+=a}Ee(e,t)}function Ue(t,e,r,n){for(var i=Math.pow(2,n.z)*Se,a=[n.x*Se,n.y*Se],o=[],s=0,l=t;s<l.length;s+=1)for(var u=0,c=l[s];u<c.length;u+=1){var f=c[u],h=[f.x+a[0],f.y+a[1]];je(h,e,r,i),o.push(h)}return o}function Ve(t,e,r,n){for(var i=Math.pow(2,n.z)*Se,a=[n.x*Se,n.y*Se],o=[],s=0,l=t;s<l.length;s+=1){for(var u=[],c=0,f=l[s];c<f.length;c+=1){var h=f[c],p=[h.x+a[0],h.y+a[1]];Ee(e,p),u.push(p)}o.push(u)}if(e[2]-e[0]<=i/2){(m=e)[0]=m[1]=1/0,m[2]=m[3]=-1/0;for(var d=0,v=o;d<v.length;d+=1)for(var g=0,y=v[d];g<y.length;g+=1)je(y[g],e,r,i)}var m;return o}var He=function(t,e){this.type=Gt,this.geojson=t,this.geometries=e};function qe(t){if(t instanceof Ae){if("get"===t.name&&1===t.args.length)return!1;if("feature-state"===t.name)return!1;if("has"===t.name&&1===t.args.length)return!1;if("properties"===t.name||"geometry-type"===t.name||"id"===t.name)return!1;if(/^filter-/.test(t.name))return!1}if(t instanceof He)return!1;var e=!0;return t.eachChild((function(t){e&&!qe(t)&&(e=!1)})),e}function Ge(t){if(t instanceof Ae&&"feature-state"===t.name)return!1;var e=!0;return t.eachChild((function(t){e&&!Ge(t)&&(e=!1)})),e}function Ze(t,e){if(t instanceof Ae&&e.indexOf(t.name)>=0)return!1;var r=!0;return t.eachChild((function(t){r&&!Ze(t,e)&&(r=!1)})),r}He.parse=function(t,e){if(2!==t.length)return e.error("'within' expression requires exactly one argument, but found "+(t.length-1)+" instead.");if(he(t[1])){var r=t[1];if("FeatureCollection"===r.type)for(var n=0;n<r.features.length;++n){var i=r.features[n].geometry.type;if("Polygon"===i||"MultiPolygon"===i)return new He(r,r.features[n].geometry)}else if("Feature"===r.type){var a=r.geometry.type;if("Polygon"===a||"MultiPolygon"===a)return new He(r,r.geometry)}else if("Polygon"===r.type||"MultiPolygon"===r.type)return new He(r,r)}return e.error("'within' expression requires valid geojson object that contains polygon geometry type.")},He.prototype.evaluate=function(t){if(null!=t.geometry()&&null!=t.canonicalID()){if("Point"===t.geometryType())return function(t,e){var r=[1/0,1/0,-1/0,-1/0],n=[1/0,1/0,-1/0,-1/0],i=t.canonicalID();if("Polygon"===e.type){var a=Be(e.coordinates,n,i),o=Ue(t.geometry(),r,n,i);if(!Le(r,n))return!1;for(var s=0,l=o;s<l.length;s+=1)if(!Oe(l[s],a))return!1}if("MultiPolygon"===e.type){var u=Ne(e.coordinates,n,i),c=Ue(t.geometry(),r,n,i);if(!Le(r,n))return!1;for(var f=0,h=c;f<h.length;f+=1)if(!Ie(h[f],u))return!1}return!0}(t,this.geometries);if("LineString"===t.geometryType())return function(t,e){var r=[1/0,1/0,-1/0,-1/0],n=[1/0,1/0,-1/0,-1/0],i=t.canonicalID();if("Polygon"===e.type){var a=Be(e.coordinates,n,i),o=Ve(t.geometry(),r,n,i);if(!Le(r,n))return!1;for(var s=0,l=o;s<l.length;s+=1)if(!Re(l[s],a))return!1}if("MultiPolygon"===e.type){var u=Ne(e.coordinates,n,i),c=Ve(t.geometry(),r,n,i);if(!Le(r,n))return!1;for(var f=0,h=c;f<h.length;f+=1)if(!Fe(h[f],u))return!1}return!0}(t,this.geometries)}return!1},He.prototype.eachChild=function(){},He.prototype.outputDefined=function(){return!0},He.prototype.serialize=function(){return["within",this.geojson]};var Ye=function(t,e){this.type=e.type,this.name=t,this.boundExpression=e};Ye.parse=function(t,e){if(2!==t.length||"string"!=typeof t[1])return e.error("'var' expression requires exactly one string literal argument.");var r=t[1];return e.scope.has(r)?new Ye(r,e.scope.get(r)):e.error('Unknown variable "'+r+'". Make sure "'+r+'" has been bound in an enclosing "let" expression before using it.',1)},Ye.prototype.evaluate=function(t){return this.boundExpression.evaluate(t)},Ye.prototype.eachChild=function(){},Ye.prototype.outputDefined=function(){return!1},Ye.prototype.serialize=function(){return["var",this.name]};var We=function(t,e,r,n,i){void 0===e&&(e=[]),void 0===n&&(n=new Ut),void 0===i&&(i=[]),this.registry=t,this.path=e,this.key=e.map((function(t){return"["+t+"]"})).join(""),this.scope=n,this.errors=i,this.expectedType=r};function Xe(t){if(t instanceof Ye)return Xe(t.boundExpression);if(t instanceof Ae&&"error"===t.name)return!1;if(t instanceof Me)return!1;if(t instanceof He)return!1;var e=t instanceof we||t instanceof me,r=!0;return t.eachChild((function(t){r=e?r&&Xe(t):r&&t instanceof ve})),!!r&&qe(t)&&Ze(t,["zoom","heatmap-density","line-progress","accumulated","is-supported-script"])}function Je(t,e){for(var r,n,i=t.length-1,a=0,o=i,s=0;a<=o;)if(r=t[s=Math.floor((a+o)/2)],n=t[s+1],r<=e){if(s===i||e<n)return s;a=s+1}else{if(!(r>e))throw new ge("Input is not a number.");o=s-1}return 0}We.prototype.parse=function(t,e,r,n,i){return void 0===i&&(i={}),e?this.concat(e,r,n)._parse(t,i):this._parse(t,i)},We.prototype._parse=function(t,e){function r(t,e,r){return"assert"===r?new me(e,[t]):"coerce"===r?new we(e,[t]):t}if(null!==t&&"string"!=typeof t&&"boolean"!=typeof t&&"number"!=typeof t||(t=["literal",t]),Array.isArray(t)){if(0===t.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].');var n=t[0];if("string"!=typeof n)return this.error("Expression name must be a string, but found "+typeof n+' instead. If you wanted a literal array, use ["literal", [...]].',0),null;var i=this.registry[n];if(i){var a=i.parse(t,this);if(!a)return null;if(this.expectedType){var o=this.expectedType,s=a.type;if("string"!==o.kind&&"number"!==o.kind&&"boolean"!==o.kind&&"object"!==o.kind&&"array"!==o.kind||"value"!==s.kind)if("color"!==o.kind&&"formatted"!==o.kind&&"resolvedImage"!==o.kind||"value"!==s.kind&&"string"!==s.kind){if(this.checkSubtype(o,s))return null}else a=r(a,o,e.typeAnnotation||"coerce");else a=r(a,o,e.typeAnnotation||"assert")}if(!(a instanceof ve)&&"resolvedImage"!==a.type.kind&&Xe(a)){var l=new ke;try{a=new ve(a.type,a.evaluate(l))}catch(t){return this.error(t.message),null}}return a}return this.error('Unknown expression "'+n+'". If you wanted a literal array, use ["literal", [...]].',0)}return void 0===t?this.error("'undefined' value invalid. Use null instead."):"object"==typeof t?this.error('Bare objects invalid. Use ["literal", {...}] instead.'):this.error("Expected an array, but found "+typeof t+" instead.")},We.prototype.concat=function(t,e,r){var n="number"==typeof t?this.path.concat(t):this.path,i=r?this.scope.concat(r):this.scope;return new We(this.registry,n,e||null,i,this.errors)},We.prototype.error=function(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];var n=""+this.key+e.map((function(t){return"["+t+"]"})).join("");this.errors.push(new jt(n,t))},We.prototype.checkSubtype=function(t,e){var r=ee(t,e);return r&&this.error(r),r};var Ke=function(t,e,r){this.type=t,this.input=e,this.labels=[],this.outputs=[];for(var n=0,i=r;n<i.length;n+=1){var a=i[n],o=a[0],s=a[1];this.labels.push(o),this.outputs.push(s)}};function $e(t,e,r){return t*(1-r)+e*r}Ke.parse=function(t,e){if(t.length-1<4)return e.error("Expected at least 4 arguments, but found only "+(t.length-1)+".");if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");var r=e.parse(t[1],1,Ht);if(!r)return null;var n=[],i=null;e.expectedType&&"value"!==e.expectedType.kind&&(i=e.expectedType);for(var a=1;a<t.length;a+=2){var o=1===a?-1/0:t[a],s=t[a+1],l=a,u=a+1;if("number"!=typeof o)return e.error('Input/output pairs for "step" expressions must be defined using literal numeric values (not computed expressions) for the input values.',l);if(n.length&&n[n.length-1][0]>=o)return e.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.',l);var c=e.parse(s,u,i);if(!c)return null;i=i||c.type,n.push([o,c])}return new Ke(i,r,n)},Ke.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var i=e.length;return n>=e[i-1]?r[i-1].evaluate(t):r[Je(e,n)].evaluate(t)},Ke.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e<r.length;e+=1)t(r[e])},Ke.prototype.outputDefined=function(){return this.outputs.every((function(t){return t.outputDefined()}))},Ke.prototype.serialize=function(){for(var t=["step",this.input.serialize()],e=0;e<this.labels.length;e++)e>0&&t.push(this.labels[e]),t.push(this.outputs[e].serialize());return t};var Qe=Object.freeze({__proto__:null,number:$e,color:function(t,e,r){return new oe($e(t.r,e.r,r),$e(t.g,e.g,r),$e(t.b,e.b,r),$e(t.a,e.a,r))},array:function(t,e,r){return t.map((function(t,n){return $e(t,e[n],r)}))}}),tr=.95047,er=1,rr=1.08883,nr=4/29,ir=6/29,ar=3*ir*ir,or=ir*ir*ir,sr=Math.PI/180,lr=180/Math.PI;function ur(t){return t>or?Math.pow(t,1/3):t/ar+nr}function cr(t){return t>ir?t*t*t:ar*(t-nr)}function fr(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function hr(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function pr(t){var e=hr(t.r),r=hr(t.g),n=hr(t.b),i=ur((.4124564*e+.3575761*r+.1804375*n)/tr),a=ur((.2126729*e+.7151522*r+.072175*n)/er);return{l:116*a-16,a:500*(i-a),b:200*(a-ur((.0193339*e+.119192*r+.9503041*n)/rr)),alpha:t.a}}function dr(t){var e=(t.l+16)/116,r=isNaN(t.a)?e:e+t.a/500,n=isNaN(t.b)?e:e-t.b/200;return e=er*cr(e),r=tr*cr(r),n=rr*cr(n),new oe(fr(3.2404542*r-1.5371385*e-.4985314*n),fr(-.969266*r+1.8760108*e+.041556*n),fr(.0556434*r-.2040259*e+1.0572252*n),t.alpha)}function vr(t,e,r){var n=e-t;return t+r*(n>180||n<-180?n-360*Math.round(n/360):n)}var gr={forward:pr,reverse:dr,interpolate:function(t,e,r){return{l:$e(t.l,e.l,r),a:$e(t.a,e.a,r),b:$e(t.b,e.b,r),alpha:$e(t.alpha,e.alpha,r)}}},yr={forward:function(t){var e=pr(t),r=e.l,n=e.a,i=e.b,a=Math.atan2(i,n)*lr;return{h:a<0?a+360:a,c:Math.sqrt(n*n+i*i),l:r,alpha:t.a}},reverse:function(t){var e=t.h*sr,r=t.c;return dr({l:t.l,a:Math.cos(e)*r,b:Math.sin(e)*r,alpha:t.alpha})},interpolate:function(t,e,r){return{h:vr(t.h,e.h,r),c:$e(t.c,e.c,r),l:$e(t.l,e.l,r),alpha:$e(t.alpha,e.alpha,r)}}},mr=Object.freeze({__proto__:null,lab:gr,hcl:yr}),xr=function(t,e,r,n,i){this.type=t,this.operator=e,this.interpolation=r,this.input=n,this.labels=[],this.outputs=[];for(var a=0,o=i;a<o.length;a+=1){var s=o[a],l=s[0],u=s[1];this.labels.push(l),this.outputs.push(u)}};function br(t,e,r,n){var i=n-r,a=t-r;return 0===i?0:1===e?a/i:(Math.pow(e,a)-1)/(Math.pow(e,i)-1)}xr.interpolationFactor=function(t,e,r,i){var a=0;if("exponential"===t.name)a=br(e,t.base,r,i);else if("linear"===t.name)a=br(e,1,r,i);else if("cubic-bezier"===t.name){var o=t.controlPoints;a=new n(o[0],o[1],o[2],o[3]).solve(br(e,1,r,i))}return a},xr.parse=function(t,e){var r=t[0],n=t[1],i=t[2],a=t.slice(3);if(!Array.isArray(n)||0===n.length)return e.error("Expected an interpolation type expression.",1);if("linear"===n[0])n={name:"linear"};else if("exponential"===n[0]){var o=n[1];if("number"!=typeof o)return e.error("Exponential interpolation requires a numeric base.",1,1);n={name:"exponential",base:o}}else{if("cubic-bezier"!==n[0])return e.error("Unknown interpolation type "+String(n[0]),1,0);var s=n.slice(1);if(4!==s.length||s.some((function(t){return"number"!=typeof t||t<0||t>1})))return e.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.",1);n={name:"cubic-bezier",controlPoints:s}}if(t.length-1<4)return e.error("Expected at least 4 arguments, but found only "+(t.length-1)+".");if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");if(!(i=e.parse(i,2,Ht)))return null;var l=[],u=null;"interpolate-hcl"===r||"interpolate-lab"===r?u=Zt:e.expectedType&&"value"!==e.expectedType.kind&&(u=e.expectedType);for(var c=0;c<a.length;c+=2){var f=a[c],h=a[c+1],p=c+3,d=c+4;if("number"!=typeof f)return e.error('Input/output pairs for "interpolate" expressions must be defined using literal numeric values (not computed expressions) for the input values.',p);if(l.length&&l[l.length-1][0]>=f)return e.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.',p);var v=e.parse(h,d,u);if(!v)return null;u=u||v.type,l.push([f,v])}return"number"===u.kind||"color"===u.kind||"array"===u.kind&&"number"===u.itemType.kind&&"number"==typeof u.N?new xr(u,r,n,i,l):e.error("Type "+Qt(u)+" is not interpolatable.")},xr.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var i=e.length;if(n>=e[i-1])return r[i-1].evaluate(t);var a=Je(e,n),o=e[a],s=e[a+1],l=xr.interpolationFactor(this.interpolation,n,o,s),u=r[a].evaluate(t),c=r[a+1].evaluate(t);return"interpolate"===this.operator?Qe[this.type.kind.toLowerCase()](u,c,l):"interpolate-hcl"===this.operator?yr.reverse(yr.interpolate(yr.forward(u),yr.forward(c),l)):gr.reverse(gr.interpolate(gr.forward(u),gr.forward(c),l))},xr.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e<r.length;e+=1)t(r[e])},xr.prototype.outputDefined=function(){return this.outputs.every((function(t){return t.outputDefined()}))},xr.prototype.serialize=function(){var t;t="linear"===this.interpolation.name?["linear"]:"exponential"===this.interpolation.name?1===this.interpolation.base?["linear"]:["exponential",this.interpolation.base]:["cubic-bezier"].concat(this.interpolation.controlPoints);for(var e=[this.operator,t,this.input.serialize()],r=0;r<this.labels.length;r++)e.push(this.labels[r],this.outputs[r].serialize());return e};var _r=function(t,e){this.type=t,this.args=e};_r.parse=function(t,e){if(t.length<2)return e.error("Expectected at least one argument.");var r=null,n=e.expectedType;n&&"value"!==n.kind&&(r=n);for(var i=[],a=0,o=t.slice(1);a<o.length;a+=1){var s=o[a],l=e.parse(s,1+i.length,r,void 0,{typeAnnotation:"omit"});if(!l)return null;r=r||l.type,i.push(l)}var u=n&&i.some((function(t){return ee(n,t.type)}));return new _r(u?Wt:r,i)},_r.prototype.evaluate=function(t){for(var e,r=null,n=0,i=0,a=this.args;i<a.length&&(n++,(r=a[i].evaluate(t))&&r instanceof ce&&!r.available&&(e||(e=r.name),r=null,n===this.args.length&&(r=e)),null===r);i+=1);return r},_r.prototype.eachChild=function(t){this.args.forEach(t)},_r.prototype.outputDefined=function(){return this.args.every((function(t){return t.outputDefined()}))},_r.prototype.serialize=function(){var t=["coalesce"];return this.eachChild((function(e){t.push(e.serialize())})),t};var wr=function(t,e){this.type=e.type,this.bindings=[].concat(t),this.result=e};wr.prototype.evaluate=function(t){return this.result.evaluate(t)},wr.prototype.eachChild=function(t){for(var e=0,r=this.bindings;e<r.length;e+=1)t(r[e][1]);t(this.result)},wr.parse=function(t,e){if(t.length<4)return e.error("Expected at least 3 arguments, but found "+(t.length-1)+" instead.");for(var r=[],n=1;n<t.length-1;n+=2){var i=t[n];if("string"!=typeof i)return e.error("Expected string, but found "+typeof i+" instead.",n);if(/[^a-zA-Z0-9_]/.test(i))return e.error("Variable names must contain only alphanumeric characters or '_'.",n);var a=e.parse(t[n+1],n+1);if(!a)return null;r.push([i,a])}var o=e.parse(t[t.length-1],t.length-1,e.expectedType,r);return o?new wr(r,o):null},wr.prototype.outputDefined=function(){return this.result.outputDefined()},wr.prototype.serialize=function(){for(var t=["let"],e=0,r=this.bindings;e<r.length;e+=1){var n=r[e],i=n[0],a=n[1];t.push(i,a.serialize())}return t.push(this.result.serialize()),t};var Tr=function(t,e,r){this.type=t,this.index=e,this.input=r};Tr.parse=function(t,e){if(3!==t.length)return e.error("Expected 2 arguments, but found "+(t.length-1)+" instead.");var r=e.parse(t[1],1,Ht),n=e.parse(t[2],2,$t(e.expectedType||Wt));if(!r||!n)return null;var i=n.type;return new Tr(i.itemType,r,n)},Tr.prototype.evaluate=function(t){var e=this.index.evaluate(t),r=this.input.evaluate(t);if(e<0)throw new ge("Array index out of bounds: "+e+" < 0.");if(e>=r.length)throw new ge("Array index out of bounds: "+e+" > "+(r.length-1)+".");if(e!==Math.floor(e))throw new ge("Array index must be an integer, but found "+e+" instead.");return r[e]},Tr.prototype.eachChild=function(t){t(this.index),t(this.input)},Tr.prototype.outputDefined=function(){return!1},Tr.prototype.serialize=function(){return["at",this.index.serialize(),this.input.serialize()]};var kr=function(t,e){this.type=Gt,this.needle=t,this.haystack=e};kr.parse=function(t,e){if(3!==t.length)return e.error("Expected 2 arguments, but found "+(t.length-1)+" instead.");var r=e.parse(t[1],1,Wt),n=e.parse(t[2],2,Wt);return r&&n?re(r.type,[Gt,qt,Ht,Vt,Wt])?new kr(r,n):e.error("Expected first argument to be of type boolean, string, number or null, but found "+Qt(r.type)+" instead"):null},kr.prototype.evaluate=function(t){var e=this.needle.evaluate(t),r=this.haystack.evaluate(t);if(!r)return!1;if(!ne(e,["boolean","string","number","null"]))throw new ge("Expected first argument to be of type boolean, string, number or null, but found "+Qt(pe(e))+" instead.");if(!ne(r,["string","array"]))throw new ge("Expected second argument to be of type array or string, but found "+Qt(pe(r))+" instead.");return r.indexOf(e)>=0},kr.prototype.eachChild=function(t){t(this.needle),t(this.haystack)},kr.prototype.outputDefined=function(){return!0},kr.prototype.serialize=function(){return["in",this.needle.serialize(),this.haystack.serialize()]};var Ar=function(t,e,r){this.type=Ht,this.needle=t,this.haystack=e,this.fromIndex=r};Ar.parse=function(t,e){if(t.length<=2||t.length>=5)return e.error("Expected 3 or 4 arguments, but found "+(t.length-1)+" instead.");var r=e.parse(t[1],1,Wt),n=e.parse(t[2],2,Wt);if(!r||!n)return null;if(!re(r.type,[Gt,qt,Ht,Vt,Wt]))return e.error("Expected first argument to be of type boolean, string, number or null, but found "+Qt(r.type)+" instead");if(4===t.length){var i=e.parse(t[3],3,Ht);return i?new Ar(r,n,i):null}return new Ar(r,n)},Ar.prototype.evaluate=function(t){var e=this.needle.evaluate(t),r=this.haystack.evaluate(t);if(!ne(e,["boolean","string","number","null"]))throw new ge("Expected first argument to be of type boolean, string, number or null, but found "+Qt(pe(e))+" instead.");if(!ne(r,["string","array"]))throw new ge("Expected second argument to be of type array or string, but found "+Qt(pe(r))+" instead.");if(this.fromIndex){var n=this.fromIndex.evaluate(t);return r.indexOf(e,n)}return r.indexOf(e)},Ar.prototype.eachChild=function(t){t(this.needle),t(this.haystack),this.fromIndex&&t(this.fromIndex)},Ar.prototype.outputDefined=function(){return!1},Ar.prototype.serialize=function(){if(null!=this.fromIndex&&void 0!==this.fromIndex){var t=this.fromIndex.serialize();return["index-of",this.needle.serialize(),this.haystack.serialize(),t]}return["index-of",this.needle.serialize(),this.haystack.serialize()]};var Mr=function(t,e,r,n,i,a){this.inputType=t,this.type=e,this.input=r,this.cases=n,this.outputs=i,this.otherwise=a};Mr.parse=function(t,e){if(t.length<5)return e.error("Expected at least 4 arguments, but found only "+(t.length-1)+".");if(t.length%2!=1)return e.error("Expected an even number of arguments.");var r,n;e.expectedType&&"value"!==e.expectedType.kind&&(n=e.expectedType);for(var i={},a=[],o=2;o<t.length-1;o+=2){var s=t[o],l=t[o+1];Array.isArray(s)||(s=[s]);var u=e.concat(o);if(0===s.length)return u.error("Expected at least one branch label.");for(var c=0,f=s;c<f.length;c+=1){var h=f[c];if("number"!=typeof h&&"string"!=typeof h)return u.error("Branch labels must be numbers or strings.");if("number"==typeof h&&Math.abs(h)>Number.MAX_SAFE_INTEGER)return u.error("Branch labels must be integers no larger than "+Number.MAX_SAFE_INTEGER+".");if("number"==typeof h&&Math.floor(h)!==h)return u.error("Numeric branch labels must be integer values.");if(r){if(u.checkSubtype(r,pe(h)))return null}else r=pe(h);if(void 0!==i[String(h)])return u.error("Branch labels must be unique.");i[String(h)]=a.length}var p=e.parse(l,o,n);if(!p)return null;n=n||p.type,a.push(p)}var d=e.parse(t[1],1,Wt);if(!d)return null;var v=e.parse(t[t.length-1],t.length-1,n);return v?"value"!==d.type.kind&&e.concat(1).checkSubtype(r,d.type)?null:new Mr(r,n,d,i,a,v):null},Mr.prototype.evaluate=function(t){var e=this.input.evaluate(t);return(pe(e)===this.inputType&&this.outputs[this.cases[e]]||this.otherwise).evaluate(t)},Mr.prototype.eachChild=function(t){t(this.input),this.outputs.forEach(t),t(this.otherwise)},Mr.prototype.outputDefined=function(){return this.outputs.every((function(t){return t.outputDefined()}))&&this.otherwise.outputDefined()},Mr.prototype.serialize=function(){for(var t=this,e=["match",this.input.serialize()],r=[],n={},i=0,a=Object.keys(this.cases).sort();i<a.length;i+=1){var o=a[i];void 0===(f=n[this.cases[o]])?(n[this.cases[o]]=r.length,r.push([this.cases[o],[o]])):r[f][1].push(o)}for(var s=function(e){return"number"===t.inputType.kind?Number(e):e},l=0,u=r;l<u.length;l+=1){var c=u[l],f=c[0],h=c[1];1===h.length?e.push(s(h[0])):e.push(h.map(s)),e.push(this.outputs[outputIndex$1].serialize())}return e.push(this.otherwise.serialize()),e};var Sr=function(t,e,r){this.type=t,this.branches=e,this.otherwise=r};Sr.parse=function(t,e){if(t.length<4)return e.error("Expected at least 3 arguments, but found only "+(t.length-1)+".");if(t.length%2!=0)return e.error("Expected an odd number of arguments.");var r;e.expectedType&&"value"!==e.expectedType.kind&&(r=e.expectedType);for(var n=[],i=1;i<t.length-1;i+=2){var a=e.parse(t[i],i,Gt);if(!a)return null;var o=e.parse(t[i+1],i+1,r);if(!o)return null;n.push([a,o]),r=r||o.type}var s=e.parse(t[t.length-1],t.length-1,r);return s?new Sr(r,n,s):null},Sr.prototype.evaluate=function(t){for(var e=0,r=this.branches;e<r.length;e+=1){var n=r[e],i=n[0],a=n[1];if(i.evaluate(t))return a.evaluate(t)}return this.otherwise.evaluate(t)},Sr.prototype.eachChild=function(t){for(var e=0,r=this.branches;e<r.length;e+=1){var n=r[e],i=n[0],a=n[1];t(i),t(a)}t(this.otherwise)},Sr.prototype.outputDefined=function(){return this.branches.every((function(t){return t[0],t[1].outputDefined()}))&&this.otherwise.outputDefined()},Sr.prototype.serialize=function(){var t=["case"];return this.eachChild((function(e){t.push(e.serialize())})),t};var Er=function(t,e,r,n){this.type=t,this.input=e,this.beginIndex=r,this.endIndex=n};function Lr(t,e){return"=="===t||"!="===t?"boolean"===e.kind||"string"===e.kind||"number"===e.kind||"null"===e.kind||"value"===e.kind:"string"===e.kind||"number"===e.kind||"value"===e.kind}function Cr(t,e,r,n){return 0===n.compare(e,r)}function Pr(t,e,r){var n="=="!==t&&"!="!==t;return function(){function i(t,e,r){this.type=Gt,this.lhs=t,this.rhs=e,this.collator=r,this.hasUntypedArgument="value"===t.type.kind||"value"===e.type.kind}return i.parse=function(t,e){if(3!==t.length&&4!==t.length)return e.error("Expected two or three arguments.");var r=t[0],a=e.parse(t[1],1,Wt);if(!a)return null;if(!Lr(r,a.type))return e.concat(1).error('"'+r+"\" comparisons are not supported for type '"+Qt(a.type)+"'.");var o=e.parse(t[2],2,Wt);if(!o)return null;if(!Lr(r,o.type))return e.concat(2).error('"'+r+"\" comparisons are not supported for type '"+Qt(o.type)+"'.");if(a.type.kind!==o.type.kind&&"value"!==a.type.kind&&"value"!==o.type.kind)return e.error("Cannot compare types '"+Qt(a.type)+"' and '"+Qt(o.type)+"'.");n&&("value"===a.type.kind&&"value"!==o.type.kind?a=new me(o.type,[a]):"value"!==a.type.kind&&"value"===o.type.kind&&(o=new me(a.type,[o])));var s=null;if(4===t.length){if("string"!==a.type.kind&&"string"!==o.type.kind&&"value"!==a.type.kind&&"value"!==o.type.kind)return e.error("Cannot use collator to compare non-string types.");if(!(s=e.parse(t[3],3,Xt)))return null}return new i(a,o,s)},i.prototype.evaluate=function(i){var a=this.lhs.evaluate(i),o=this.rhs.evaluate(i);if(n&&this.hasUntypedArgument){var s=pe(a),l=pe(o);if(s.kind!==l.kind||"string"!==s.kind&&"number"!==s.kind)throw new ge('Expected arguments for "'+t+'" to be (string, string) or (number, number), but found ('+s.kind+", "+l.kind+") instead.")}if(this.collator&&!n&&this.hasUntypedArgument){var u=pe(a),c=pe(o);if("string"!==u.kind||"string"!==c.kind)return e(i,a,o)}return this.collator?r(i,a,o,this.collator.evaluate(i)):e(i,a,o)},i.prototype.eachChild=function(t){t(this.lhs),t(this.rhs),this.collator&&t(this.collator)},i.prototype.outputDefined=function(){return!0},i.prototype.serialize=function(){var e=[t];return this.eachChild((function(t){e.push(t.serialize())})),e},i}()}Er.parse=function(t,e){if(t.length<=2||t.length>=5)return e.error("Expected 3 or 4 arguments, but found "+(t.length-1)+" instead.");var r=e.parse(t[1],1,Wt),n=e.parse(t[2],2,Ht);if(!r||!n)return null;if(!re(r.type,[$t(Wt),qt,Wt]))return e.error("Expected first argument to be of type array or string, but found "+Qt(r.type)+" instead");if(4===t.length){var i=e.parse(t[3],3,Ht);return i?new Er(r.type,r,n,i):null}return new Er(r.type,r,n)},Er.prototype.evaluate=function(t){var e=this.input.evaluate(t),r=this.beginIndex.evaluate(t);if(!ne(e,["string","array"]))throw new ge("Expected first argument to be of type array or string, but found "+Qt(pe(e))+" instead.");if(this.endIndex){var n=this.endIndex.evaluate(t);return e.slice(r,n)}return e.slice(r)},Er.prototype.eachChild=function(t){t(this.input),t(this.beginIndex),this.endIndex&&t(this.endIndex)},Er.prototype.outputDefined=function(){return!1},Er.prototype.serialize=function(){if(null!=this.endIndex&&void 0!==this.endIndex){var t=this.endIndex.serialize();return["slice",this.input.serialize(),this.beginIndex.serialize(),t]}return["slice",this.input.serialize(),this.beginIndex.serialize()]};var Or=Pr("==",(function(t,e,r){return e===r}),Cr),Ir=Pr("!=",(function(t,e,r){return e!==r}),(function(t,e,r,n){return!Cr(0,e,r,n)})),Dr=Pr("<",(function(t,e,r){return e<r}),(function(t,e,r,n){return n.compare(e,r)<0})),zr=Pr(">",(function(t,e,r){return e>r}),(function(t,e,r,n){return n.compare(e,r)>0})),Rr=Pr("<=",(function(t,e,r){return e<=r}),(function(t,e,r,n){return n.compare(e,r)<=0})),Fr=Pr(">=",(function(t,e,r){return e>=r}),(function(t,e,r,n){return n.compare(e,r)>=0})),Br=function(t,e,r,n,i){this.type=qt,this.number=t,this.locale=e,this.currency=r,this.minFractionDigits=n,this.maxFractionDigits=i};Br.parse=function(t,e){if(3!==t.length)return e.error("Expected two arguments.");var r=e.parse(t[1],1,Ht);if(!r)return null;var n=t[2];if("object"!=typeof n||Array.isArray(n))return e.error("NumberFormat options argument must be an object.");var i=null;if(n.locale&&!(i=e.parse(n.locale,1,qt)))return null;var a=null;if(n.currency&&!(a=e.parse(n.currency,1,qt)))return null;var o=null;if(n["min-fraction-digits"]&&!(o=e.parse(n["min-fraction-digits"],1,Ht)))return null;var s=null;return n["max-fraction-digits"]&&!(s=e.parse(n["max-fraction-digits"],1,Ht))?null:new Br(r,i,a,o,s)},Br.prototype.evaluate=function(t){return new Intl.NumberFormat(this.locale?this.locale.evaluate(t):[],{style:this.currency?"currency":"decimal",currency:this.currency?this.currency.evaluate(t):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(t):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(t):void 0}).format(this.number.evaluate(t))},Br.prototype.eachChild=function(t){t(this.number),this.locale&&t(this.locale),this.currency&&t(this.currency),this.minFractionDigits&&t(this.minFractionDigits),this.maxFractionDigits&&t(this.maxFractionDigits)},Br.prototype.outputDefined=function(){return!1},Br.prototype.serialize=function(){var t={};return this.locale&&(t.locale=this.locale.serialize()),this.currency&&(t.currency=this.currency.serialize()),this.minFractionDigits&&(t["min-fraction-digits"]=this.minFractionDigits.serialize()),this.maxFractionDigits&&(t["max-fraction-digits"]=this.maxFractionDigits.serialize()),["number-format",this.number.serialize(),t]};var Nr=function(t){this.type=Ht,this.input=t};Nr.parse=function(t,e){if(2!==t.length)return e.error("Expected 1 argument, but found "+(t.length-1)+" instead.");var r=e.parse(t[1],1);return r?"array"!==r.type.kind&&"string"!==r.type.kind&&"value"!==r.type.kind?e.error("Expected argument of type string or array, but found "+Qt(r.type)+" instead."):new Nr(r):null},Nr.prototype.evaluate=function(t){var e=this.input.evaluate(t);if("string"==typeof e)return e.length;if(Array.isArray(e))return e.length;throw new ge("Expected value to be of type string or array, but found "+Qt(pe(e))+" instead.")},Nr.prototype.eachChild=function(t){t(this.input)},Nr.prototype.outputDefined=function(){return!1},Nr.prototype.serialize=function(){var t=["length"];return this.eachChild((function(e){t.push(e.serialize())})),t};var jr={"==":Or,"!=":Ir,">":zr,"<":Dr,">=":Fr,"<=":Rr,array:me,at:Tr,boolean:me,case:Sr,coalesce:_r,collator:Me,format:xe,image:be,in:kr,"index-of":Ar,interpolate:xr,"interpolate-hcl":xr,"interpolate-lab":xr,length:Nr,let:wr,literal:ve,match:Mr,number:me,"number-format":Br,object:me,slice:Er,step:Ke,string:me,"to-boolean":we,"to-color":we,"to-number":we,"to-string":we,var:Ye,within:He};function Ur(t,e){var r=e[0],n=e[1],i=e[2],a=e[3];r=r.evaluate(t),n=n.evaluate(t),i=i.evaluate(t);var o=a?a.evaluate(t):1,s=fe(r,n,i,o);if(s)throw new ge(s);return new oe(r/255*o,n/255*o,i/255*o,o)}function Vr(t,e){return t in e}function Hr(t,e){var r=e[t];return void 0===r?null:r}function qr(t){return{type:t}}function Gr(t){return{result:"success",value:t}}function Zr(t){return{result:"error",value:t}}function Yr(t){return"data-driven"===t["property-type"]||"cross-faded-data-driven"===t["property-type"]}function Wr(t){return!!t.expression&&t.expression.parameters.indexOf("zoom")>-1}function Xr(t){return!!t.expression&&t.expression.interpolated}function Jr(t){return t instanceof Number?"number":t instanceof String?"string":t instanceof Boolean?"boolean":Array.isArray(t)?"array":null===t?"null":typeof t}function Kr(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}function $r(t){return t}function Qr(t,e){var r,n,i,a="color"===e.type,o=t.stops&&"object"==typeof t.stops[0][0],s=o||void 0!==t.property,l=o||!s,u=t.type||(Xr(e)?"exponential":"interval");if(a&&((t=Ft({},t)).stops&&(t.stops=t.stops.map((function(t){return[t[0],oe.parse(t[1])]}))),t.default?t.default=oe.parse(t.default):t.default=oe.parse(e.default)),t.colorSpace&&"rgb"!==t.colorSpace&&!mr[t.colorSpace])throw new Error("Unknown color space: "+t.colorSpace);if("exponential"===u)r=nn;else if("interval"===u)r=rn;else if("categorical"===u){r=en,n=Object.create(null);for(var c=0,f=t.stops;c<f.length;c+=1){var h=f[c];n[h[0]]=h[1]}i=typeof t.stops[0][0]}else{if("identity"!==u)throw new Error('Unknown function type "'+u+'"');r=an}if(o){for(var p={},d=[],v=0;v<t.stops.length;v++){var g=t.stops[v],y=g[0].zoom;void 0===p[y]&&(p[y]={zoom:y,type:t.type,property:t.property,default:t.default,stops:[]},d.push(y)),p[y].stops.push([g[0].value,g[1]])}for(var m=[],x=0,b=d;x<b.length;x+=1){var _=b[x];m.push([p[_].zoom,Qr(p[_],e)])}var w={name:"linear"};return{kind:"composite",interpolationType:w,interpolationFactor:xr.interpolationFactor.bind(void 0,w),zoomStops:m.map((function(t){return t[0]})),evaluate:function(r,n){var i=r.zoom;return nn({stops:m,base:t.base},e,i).evaluate(i,n)}}}if(l){var T="exponential"===u?{name:"exponential",base:void 0!==t.base?t.base:1}:null;return{kind:"camera",interpolationType:T,interpolationFactor:xr.interpolationFactor.bind(void 0,T),zoomStops:t.stops.map((function(t){return t[0]})),evaluate:function(a){var o=a.zoom;return r(t,e,o,n,i)}}}return{kind:"source",evaluate:function(a,o){var s=o&&o.properties?o.properties[t.property]:void 0;return void 0===s?tn(t.default,e.default):r(t,e,s,n,i)}}}function tn(t,e,r){return void 0!==t?t:void 0!==e?e:void 0!==r?r:void 0}function en(t,e,r,n,i){return tn(typeof r===i?n[r]:void 0,t.default,e.default)}function rn(t,e,r){if("number"!==Jr(r))return tn(t.default,e.default);var n=t.stops.length;if(1===n)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[n-1][0])return t.stops[n-1][1];var i=Je(t.stops.map((function(t){return t[0]})),r);return t.stops[i][1]}function nn(t,e,r){var n=void 0!==t.base?t.base:1;if("number"!==Jr(r))return tn(t.default,e.default);var i=t.stops.length;if(1===i)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[i-1][0])return t.stops[i-1][1];var a=Je(t.stops.map((function(t){return t[0]})),r),o=function(t,e,r,n){var i=n-r,a=t-r;return 0===i?0:1===e?a/i:(Math.pow(e,a)-1)/(Math.pow(e,i)-1)}(r,n,t.stops[a][0],t.stops[a+1][0]),s=t.stops[a][1],l=t.stops[a+1][1],u=Qe[e.type]||$r;if(t.colorSpace&&"rgb"!==t.colorSpace){var c=mr[t.colorSpace];u=function(t,e){return c.reverse(c.interpolate(c.forward(t),c.forward(e),o))}}return"function"==typeof s.evaluate?{evaluate:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var r=s.evaluate.apply(void 0,t),n=l.evaluate.apply(void 0,t);if(void 0!==r&&void 0!==n)return u(r,n,o)}}:u(s,l,o)}function an(t,e,r){return"color"===e.type?r=oe.parse(r):"formatted"===e.type?r=ue.fromString(r.toString()):"resolvedImage"===e.type?r=ce.fromString(r.toString()):Jr(r)===e.type||"enum"===e.type&&e.values[r]||(r=void 0),tn(r,t.default,e.default)}Ae.register(jr,{error:[{kind:"error"},[qt],function(t,e){var r=e[0];throw new ge(r.evaluate(t))}],typeof:[qt,[Wt],function(t,e){return Qt(pe(e[0].evaluate(t)))}],"to-rgba":[$t(Ht,4),[Zt],function(t,e){return e[0].evaluate(t).toArray()}],rgb:[Zt,[Ht,Ht,Ht],Ur],rgba:[Zt,[Ht,Ht,Ht,Ht],Ur],has:{type:Gt,overloads:[[[qt],function(t,e){return Vr(e[0].evaluate(t),t.properties())}],[[qt,Yt],function(t,e){var r=e[0],n=e[1];return Vr(r.evaluate(t),n.evaluate(t))}]]},get:{type:Wt,overloads:[[[qt],function(t,e){return Hr(e[0].evaluate(t),t.properties())}],[[qt,Yt],function(t,e){var r=e[0],n=e[1];return Hr(r.evaluate(t),n.evaluate(t))}]]},"feature-state":[Wt,[qt],function(t,e){return Hr(e[0].evaluate(t),t.featureState||{})}],properties:[Yt,[],function(t){return t.properties()}],"geometry-type":[qt,[],function(t){return t.geometryType()}],id:[Wt,[],function(t){return t.id()}],zoom:[Ht,[],function(t){return t.globals.zoom}],"heatmap-density":[Ht,[],function(t){return t.globals.heatmapDensity||0}],"line-progress":[Ht,[],function(t){return t.globals.lineProgress||0}],accumulated:[Wt,[],function(t){return void 0===t.globals.accumulated?null:t.globals.accumulated}],"+":[Ht,qr(Ht),function(t,e){for(var r=0,n=0,i=e;n<i.length;n+=1)r+=i[n].evaluate(t);return r}],"*":[Ht,qr(Ht),function(t,e){for(var r=1,n=0,i=e;n<i.length;n+=1)r*=i[n].evaluate(t);return r}],"-":{type:Ht,overloads:[[[Ht,Ht],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)-n.evaluate(t)}],[[Ht],function(t,e){return-e[0].evaluate(t)}]]},"/":[Ht,[Ht,Ht],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)/n.evaluate(t)}],"%":[Ht,[Ht,Ht],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)%n.evaluate(t)}],ln2:[Ht,[],function(){return Math.LN2}],pi:[Ht,[],function(){return Math.PI}],e:[Ht,[],function(){return Math.E}],"^":[Ht,[Ht,Ht],function(t,e){var r=e[0],n=e[1];return Math.pow(r.evaluate(t),n.evaluate(t))}],sqrt:[Ht,[Ht],function(t,e){var r=e[0];return Math.sqrt(r.evaluate(t))}],log10:[Ht,[Ht],function(t,e){var r=e[0];return Math.log(r.evaluate(t))/Math.LN10}],ln:[Ht,[Ht],function(t,e){var r=e[0];return Math.log(r.evaluate(t))}],log2:[Ht,[Ht],function(t,e){var r=e[0];return Math.log(r.evaluate(t))/Math.LN2}],sin:[Ht,[Ht],function(t,e){var r=e[0];return Math.sin(r.evaluate(t))}],cos:[Ht,[Ht],function(t,e){var r=e[0];return Math.cos(r.evaluate(t))}],tan:[Ht,[Ht],function(t,e){var r=e[0];return Math.tan(r.evaluate(t))}],asin:[Ht,[Ht],function(t,e){var r=e[0];return Math.asin(r.evaluate(t))}],acos:[Ht,[Ht],function(t,e){var r=e[0];return Math.acos(r.evaluate(t))}],atan:[Ht,[Ht],function(t,e){var r=e[0];return Math.atan(r.evaluate(t))}],min:[Ht,qr(Ht),function(t,e){return Math.min.apply(Math,e.map((function(e){return e.evaluate(t)})))}],max:[Ht,qr(Ht),function(t,e){return Math.max.apply(Math,e.map((function(e){return e.evaluate(t)})))}],abs:[Ht,[Ht],function(t,e){var r=e[0];return Math.abs(r.evaluate(t))}],round:[Ht,[Ht],function(t,e){var r=e[0].evaluate(t);return r<0?-Math.round(-r):Math.round(r)}],floor:[Ht,[Ht],function(t,e){var r=e[0];return Math.floor(r.evaluate(t))}],ceil:[Ht,[Ht],function(t,e){var r=e[0];return Math.ceil(r.evaluate(t))}],"filter-==":[Gt,[qt,Wt],function(t,e){var r=e[0],n=e[1];return t.properties()[r.value]===n.value}],"filter-id-==":[Gt,[Wt],function(t,e){var r=e[0];return t.id()===r.value}],"filter-type-==":[Gt,[qt],function(t,e){var r=e[0];return t.geometryType()===r.value}],"filter-<":[Gt,[qt,Wt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i<a}],"filter-id-<":[Gt,[Wt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n<i}],"filter->":[Gt,[qt,Wt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i>a}],"filter-id->":[Gt,[Wt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n>i}],"filter-<=":[Gt,[qt,Wt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i<=a}],"filter-id-<=":[Gt,[Wt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n<=i}],"filter->=":[Gt,[qt,Wt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i>=a}],"filter-id->=":[Gt,[Wt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n>=i}],"filter-has":[Gt,[Wt],function(t,e){return e[0].value in t.properties()}],"filter-has-id":[Gt,[],function(t){return null!==t.id()&&void 0!==t.id()}],"filter-type-in":[Gt,[$t(qt)],function(t,e){return e[0].value.indexOf(t.geometryType())>=0}],"filter-id-in":[Gt,[$t(Wt)],function(t,e){return e[0].value.indexOf(t.id())>=0}],"filter-in-small":[Gt,[qt,$t(Wt)],function(t,e){var r=e[0];return e[1].value.indexOf(t.properties()[r.value])>=0}],"filter-in-large":[Gt,[qt,$t(Wt)],function(t,e){var r=e[0],n=e[1];return function(t,e,r,n){for(;r<=n;){var i=r+n>>1;if(e[i]===t)return!0;e[i]>t?n=i-1:r=i+1}return!1}(t.properties()[r.value],n.value,0,n.value.length-1)}],all:{type:Gt,overloads:[[[Gt,Gt],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)&&n.evaluate(t)}],[qr(Gt),function(t,e){for(var r=0,n=e;r<n.length;r+=1)if(!n[r].evaluate(t))return!1;return!0}]]},any:{type:Gt,overloads:[[[Gt,Gt],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)||n.evaluate(t)}],[qr(Gt),function(t,e){for(var r=0,n=e;r<n.length;r+=1)if(n[r].evaluate(t))return!0;return!1}]]},"!":[Gt,[Gt],function(t,e){return!e[0].evaluate(t)}],"is-supported-script":[Gt,[qt],function(t,e){var r=e[0],n=t.globals&&t.globals.isSupportedScript;return!n||n(r.evaluate(t))}],upcase:[qt,[qt],function(t,e){return e[0].evaluate(t).toUpperCase()}],downcase:[qt,[qt],function(t,e){return e[0].evaluate(t).toLowerCase()}],concat:[qt,qr(Wt),function(t,e){return e.map((function(e){return de(e.evaluate(t))})).join("")}],"resolved-locale":[qt,[Xt],function(t,e){return e[0].evaluate(t).resolvedLocale()}]});var on=function(t,e){this.expression=t,this._warningHistory={},this._evaluator=new ke,this._defaultValue=e?function(t){return"color"===t.type&&Kr(t.default)?new oe(0,0,0,0):"color"===t.type?oe.parse(t.default)||null:void 0===t.default?null:t.default}(e):null,this._enumValues=e&&"enum"===e.type?e.values:null};function sn(t){return Array.isArray(t)&&t.length>0&&"string"==typeof t[0]&&t[0]in jr}function ln(t,e){var r=new We(jr,[],e?function(t){var e={color:Zt,string:qt,number:Ht,enum:qt,boolean:Gt,formatted:Jt,resolvedImage:Kt};return"array"===t.type?$t(e[t.value]||Wt,t.length):e[t.type]}(e):void 0),n=r.parse(t,void 0,void 0,void 0,e&&"string"===e.type?{typeAnnotation:"coerce"}:void 0);return n?Gr(new on(n,e)):Zr(r.errors)}on.prototype.evaluateWithoutErrorHandling=function(t,e,r,n,i,a){return this._evaluator.globals=t,this._evaluator.feature=e,this._evaluator.featureState=r,this._evaluator.canonical=n,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=a,this.expression.evaluate(this._evaluator)},on.prototype.evaluate=function(t,e,r,n,i,a){this._evaluator.globals=t,this._evaluator.feature=e||null,this._evaluator.featureState=r||null,this._evaluator.canonical=n,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=a||null;try{var o=this.expression.evaluate(this._evaluator);if(null==o||"number"==typeof o&&o!=o)return this._defaultValue;if(this._enumValues&&!(o in this._enumValues))throw new ge("Expected value to be one of "+Object.keys(this._enumValues).map((function(t){return JSON.stringify(t)})).join(", ")+", but found "+JSON.stringify(o)+" instead.");return o}catch(t){return this._warningHistory[t.message]||(this._warningHistory[t.message]=!0,"undefined"!=typeof console&&console.warn(t.message)),this._defaultValue}};var un=function(t,e){this.kind=t,this._styleExpression=e,this.isStateDependent="constant"!==t&&!Ge(e.expression)};un.prototype.evaluateWithoutErrorHandling=function(t,e,r,n,i,a){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r,n,i,a)},un.prototype.evaluate=function(t,e,r,n,i,a){return this._styleExpression.evaluate(t,e,r,n,i,a)};var cn=function(t,e,r,n){this.kind=t,this.zoomStops=r,this._styleExpression=e,this.isStateDependent="camera"!==t&&!Ge(e.expression),this.interpolationType=n};function fn(t,e){if("error"===(t=ln(t,e)).result)return t;var r=t.value.expression,n=qe(r);if(!n&&!Yr(e))return Zr([new jt("","data expressions not supported")]);var i=Ze(r,["zoom"]);if(!i&&!Wr(e))return Zr([new jt("","zoom expressions not supported")]);var a=pn(r);if(!a&&!i)return Zr([new jt("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.')]);if(a instanceof jt)return Zr([a]);if(a instanceof xr&&!Xr(e))return Zr([new jt("",'"interpolate" expressions cannot be used with this property')]);if(!a)return Gr(new un(n?"constant":"source",t.value));var o=a instanceof xr?a.interpolation:void 0;return Gr(new cn(n?"camera":"composite",t.value,a.labels,o))}cn.prototype.evaluateWithoutErrorHandling=function(t,e,r,n,i,a){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r,n,i,a)},cn.prototype.evaluate=function(t,e,r,n,i,a){return this._styleExpression.evaluate(t,e,r,n,i,a)},cn.prototype.interpolationFactor=function(t,e,r){return this.interpolationType?xr.interpolationFactor(this.interpolationType,t,e,r):0};var hn=function(t,e){this._parameters=t,this._specification=e,Ft(this,Qr(this._parameters,this._specification))};function pn(t){var e=null;if(t instanceof wr)e=pn(t.result);else if(t instanceof _r)for(var r=0,n=t.args;r<n.length;r+=1){var i=n[r];if(e=pn(i))break}else(t instanceof Ke||t instanceof xr)&&t.input instanceof Ae&&"zoom"===t.input.name&&(e=t);return e instanceof jt||t.eachChild((function(t){var r=pn(t);r instanceof jt?e=r:!e&&r?e=new jt("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.'):e&&r&&e!==r&&(e=new jt("",'Only one zoom-based "step" or "interpolate" subexpression may be used in an expression.'))})),e}function dn(t){var e=t.key,r=t.value,n=t.valueSpec||{},i=t.objectElementValidators||{},a=t.style,o=t.styleSpec,s=[],l=Jr(r);if("object"!==l)return[new zt(e,r,"object expected, "+l+" found")];for(var u in r){var c=u.split(".")[0],f=n[c]||n["*"],h=void 0;if(i[c])h=i[c];else if(n[c])h=Un;else if(i["*"])h=i["*"];else{if(!n["*"]){s.push(new zt(e,r[u],'unknown property "'+u+'"'));continue}h=Un}s=s.concat(h({key:(e?e+".":e)+u,value:r[u],valueSpec:f,style:a,styleSpec:o,object:r,objectKey:u},r))}for(var p in n)i[p]||n[p].required&&void 0===n[p].default&&void 0===r[p]&&s.push(new zt(e,r,'missing required property "'+p+'"'));return s}function vn(t){var e=t.value,r=t.valueSpec,n=t.style,i=t.styleSpec,a=t.key,o=t.arrayElementValidator||Un;if("array"!==Jr(e))return[new zt(a,e,"array expected, "+Jr(e)+" found")];if(r.length&&e.length!==r.length)return[new zt(a,e,"array length "+r.length+" expected, length "+e.length+" found")];if(r["min-length"]&&e.length<r["min-length"])return[new zt(a,e,"array length at least "+r["min-length"]+" expected, length "+e.length+" found")];var s={type:r.value,values:r.values};i.$version<7&&(s.function=r.function),"object"===Jr(r.value)&&(s=r.value);for(var l=[],u=0;u<e.length;u++)l=l.concat(o({array:e,arrayIndex:u,value:e[u],valueSpec:s,style:n,styleSpec:i,key:a+"["+u+"]"}));return l}function gn(t){var e=t.key,r=t.value,n=t.valueSpec,i=Jr(r);return"number"===i&&r!=r&&(i="NaN"),"number"!==i?[new zt(e,r,"number expected, "+i+" found")]:"minimum"in n&&r<n.minimum?[new zt(e,r,r+" is less than the minimum value "+n.minimum)]:"maximum"in n&&r>n.maximum?[new zt(e,r,r+" is greater than the maximum value "+n.maximum)]:[]}function yn(t){var e,r,n,i=t.valueSpec,a=Bt(t.value.type),o={},s="categorical"!==a&&void 0===t.value.property,l=!s,u="array"===Jr(t.value.stops)&&"array"===Jr(t.value.stops[0])&&"object"===Jr(t.value.stops[0][0]),c=dn({key:t.key,value:t.value,valueSpec:t.styleSpec.function,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{stops:function(t){if("identity"===a)return[new zt(t.key,t.value,'identity function may not have a "stops" property')];var e=[],r=t.value;return e=e.concat(vn({key:t.key,value:r,valueSpec:t.valueSpec,style:t.style,styleSpec:t.styleSpec,arrayElementValidator:f})),"array"===Jr(r)&&0===r.length&&e.push(new zt(t.key,r,"array must have at least one stop")),e},default:function(t){return Un({key:t.key,value:t.value,valueSpec:i,style:t.style,styleSpec:t.styleSpec})}}});return"identity"===a&&s&&c.push(new zt(t.key,t.value,'missing required property "property"')),"identity"===a||t.value.stops||c.push(new zt(t.key,t.value,'missing required property "stops"')),"exponential"===a&&t.valueSpec.expression&&!Xr(t.valueSpec)&&c.push(new zt(t.key,t.value,"exponential functions not supported")),t.styleSpec.$version>=8&&(l&&!Yr(t.valueSpec)?c.push(new zt(t.key,t.value,"property functions not supported")):s&&!Wr(t.valueSpec)&&c.push(new zt(t.key,t.value,"zoom functions not supported"))),"categorical"!==a&&!u||void 0!==t.value.property||c.push(new zt(t.key,t.value,'"property" property is required')),c;function f(t){var e=[],a=t.value,s=t.key;if("array"!==Jr(a))return[new zt(s,a,"array expected, "+Jr(a)+" found")];if(2!==a.length)return[new zt(s,a,"array length 2 expected, length "+a.length+" found")];if(u){if("object"!==Jr(a[0]))return[new zt(s,a,"object expected, "+Jr(a[0])+" found")];if(void 0===a[0].zoom)return[new zt(s,a,"object stop key must have zoom")];if(void 0===a[0].value)return[new zt(s,a,"object stop key must have value")];if(n&&n>Bt(a[0].zoom))return[new zt(s,a[0].zoom,"stop zoom values must appear in ascending order")];Bt(a[0].zoom)!==n&&(n=Bt(a[0].zoom),r=void 0,o={}),e=e.concat(dn({key:s+"[0]",value:a[0],valueSpec:{zoom:{}},style:t.style,styleSpec:t.styleSpec,objectElementValidators:{zoom:gn,value:h}}))}else e=e.concat(h({key:s+"[0]",value:a[0],valueSpec:{},style:t.style,styleSpec:t.styleSpec},a));return sn(Nt(a[1]))?e.concat([new zt(s+"[1]",a[1],"expressions are not allowed in function stops.")]):e.concat(Un({key:s+"[1]",value:a[1],valueSpec:i,style:t.style,styleSpec:t.styleSpec}))}function h(t,n){var s=Jr(t.value),l=Bt(t.value),u=null!==t.value?t.value:n;if(e){if(s!==e)return[new zt(t.key,u,s+" stop domain type must match previous stop domain type "+e)]}else e=s;if("number"!==s&&"string"!==s&&"boolean"!==s)return[new zt(t.key,u,"stop domain value must be a number, string, or boolean")];if("number"!==s&&"categorical"!==a){var c="number expected, "+s+" found";return Yr(i)&&void 0===a&&(c+='\nIf you intended to use a categorical function, specify `"type": "categorical"`.'),[new zt(t.key,u,c)]}return"categorical"!==a||"number"!==s||isFinite(l)&&Math.floor(l)===l?"categorical"!==a&&"number"===s&&void 0!==r&&l<r?[new zt(t.key,u,"stop domain values must appear in ascending order")]:(r=l,"categorical"===a&&l in o?[new zt(t.key,u,"stop domain values must be unique")]:(o[l]=!0,[])):[new zt(t.key,u,"integer expected, found "+l)]}}function mn(t){var e=("property"===t.expressionContext?fn:ln)(Nt(t.value),t.valueSpec);if("error"===e.result)return e.value.map((function(e){return new zt(""+t.key+e.key,t.value,e.message)}));var r=e.value.expression||e.value._styleExpression.expression;if("property"===t.expressionContext&&"text-font"===t.propertyKey&&!r.outputDefined())return[new zt(t.key,t.value,'Invalid data expression for "'+t.propertyKey+'". Output values must be contained as literals within the expression.')];if("property"===t.expressionContext&&"layout"===t.propertyType&&!Ge(r))return[new zt(t.key,t.value,'"feature-state" data expressions are not supported with layout properties.')];if("filter"===t.expressionContext&&!Ge(r))return[new zt(t.key,t.value,'"feature-state" data expressions are not supported with filters.')];if(t.expressionContext&&0===t.expressionContext.indexOf("cluster")){if(!Ze(r,["zoom","feature-state"]))return[new zt(t.key,t.value,'"zoom" and "feature-state" expressions are not supported with cluster properties.')];if("cluster-initial"===t.expressionContext&&!qe(r))return[new zt(t.key,t.value,"Feature data expressions are not supported with initial expression part of cluster properties.")]}return[]}function xn(t){var e=t.key,r=t.value,n=t.valueSpec,i=[];return Array.isArray(n.values)?-1===n.values.indexOf(Bt(r))&&i.push(new zt(e,r,"expected one of ["+n.values.join(", ")+"], "+JSON.stringify(r)+" found")):-1===Object.keys(n.values).indexOf(Bt(r))&&i.push(new zt(e,r,"expected one of ["+Object.keys(n.values).join(", ")+"], "+JSON.stringify(r)+" found")),i}function bn(t){if(!0===t||!1===t)return!0;if(!Array.isArray(t)||0===t.length)return!1;switch(t[0]){case"has":return t.length>=2&&"$id"!==t[1]&&"$type"!==t[1];case"in":return t.length>=3&&("string"!=typeof t[1]||Array.isArray(t[2]));case"!in":case"!has":case"none":return!1;case"==":case"!=":case">":case">=":case"<":case"<=":return 3!==t.length||Array.isArray(t[1])||Array.isArray(t[2]);case"any":case"all":for(var e=0,r=t.slice(1);e<r.length;e+=1){var n=r[e];if(!bn(n)&&"boolean"!=typeof n)return!1}return!0;default:return!0}}hn.deserialize=function(t){return new hn(t._parameters,t._specification)},hn.serialize=function(t){return{_parameters:t._parameters,_specification:t._specification}};var _n={type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}};function wn(t){if(null==t)return{filter:function(){return!0},needGeometry:!1};bn(t)||(t=An(t));var e=ln(t,_n);if("error"===e.result)throw new Error(e.value.map((function(t){return t.key+": "+t.message})).join(", "));return{filter:function(t,r,n){return e.value.evaluate(t,r,{},n)},needGeometry:kn(t)}}function Tn(t,e){return t<e?-1:t>e?1:0}function kn(t){if(!Array.isArray(t))return!1;if("within"===t[0])return!0;for(var e=1;e<t.length;e++)if(kn(t[e]))return!0;return!1}function An(t){if(!t)return!0;var e,r=t[0];return t.length<=1?"any"!==r:"=="===r?Mn(t[1],t[2],"=="):"!="===r?Ln(Mn(t[1],t[2],"==")):"<"===r||">"===r||"<="===r||">="===r?Mn(t[1],t[2],r):"any"===r?(e=t.slice(1),["any"].concat(e.map(An))):"all"===r?["all"].concat(t.slice(1).map(An)):"none"===r?["all"].concat(t.slice(1).map(An).map(Ln)):"in"===r?Sn(t[1],t.slice(2)):"!in"===r?Ln(Sn(t[1],t.slice(2))):"has"===r?En(t[1]):"!has"===r?Ln(En(t[1])):"within"!==r||t}function Mn(t,e,r){switch(t){case"$type":return["filter-type-"+r,e];case"$id":return["filter-id-"+r,e];default:return["filter-"+r,t,e]}}function Sn(t,e){if(0===e.length)return!1;switch(t){case"$type":return["filter-type-in",["literal",e]];case"$id":return["filter-id-in",["literal",e]];default:return e.length>200&&!e.some((function(t){return typeof t!=typeof e[0]}))?["filter-in-large",t,["literal",e.sort(Tn)]]:["filter-in-small",t,["literal",e]]}}function En(t){switch(t){case"$type":return!0;case"$id":return["filter-has-id"];default:return["filter-has",t]}}function Ln(t){return["!",t]}function Cn(t){return bn(Nt(t.value))?mn(Ft({},t,{expressionContext:"filter",valueSpec:{value:"boolean"}})):Pn(t)}function Pn(t){var e=t.value,r=t.key;if("array"!==Jr(e))return[new zt(r,e,"array expected, "+Jr(e)+" found")];var n,i=t.styleSpec,a=[];if(e.length<1)return[new zt(r,e,"filter array must have at least 1 element")];switch(a=a.concat(xn({key:r+"[0]",value:e[0],valueSpec:i.filter_operator,style:t.style,styleSpec:t.styleSpec})),Bt(e[0])){case"<":case"<=":case">":case">=":e.length>=2&&"$type"===Bt(e[1])&&a.push(new zt(r,e,'"$type" cannot be use with operator "'+e[0]+'"'));case"==":case"!=":3!==e.length&&a.push(new zt(r,e,'filter array for operator "'+e[0]+'" must have 3 elements'));case"in":case"!in":e.length>=2&&"string"!==(n=Jr(e[1]))&&a.push(new zt(r+"[1]",e[1],"string expected, "+n+" found"));for(var o=2;o<e.length;o++)n=Jr(e[o]),"$type"===Bt(e[1])?a=a.concat(xn({key:r+"["+o+"]",value:e[o],valueSpec:i.geometry_type,style:t.style,styleSpec:t.styleSpec})):"string"!==n&&"number"!==n&&"boolean"!==n&&a.push(new zt(r+"["+o+"]",e[o],"string, number, or boolean expected, "+n+" found"));break;case"any":case"all":case"none":for(var s=1;s<e.length;s++)a=a.concat(Pn({key:r+"["+s+"]",value:e[s],style:t.style,styleSpec:t.styleSpec}));break;case"has":case"!has":n=Jr(e[1]),2!==e.length?a.push(new zt(r,e,'filter array for "'+e[0]+'" operator must have 2 elements')):"string"!==n&&a.push(new zt(r+"[1]",e[1],"string expected, "+n+" found"));break;case"within":n=Jr(e[1]),2!==e.length?a.push(new zt(r,e,'filter array for "'+e[0]+'" operator must have 2 elements')):"object"!==n&&a.push(new zt(r+"[1]",e[1],"object expected, "+n+" found"))}return a}function On(t,e){var r=t.key,n=t.style,i=t.styleSpec,a=t.value,o=t.objectKey,s=i[e+"_"+t.layerType];if(!s)return[];var l=o.match(/^(.*)-transition$/);if("paint"===e&&l&&s[l[1]]&&s[l[1]].transition)return Un({key:r,value:a,valueSpec:i.transition,style:n,styleSpec:i});var u,c=t.valueSpec||s[o];if(!c)return[new zt(r,a,'unknown property "'+o+'"')];if("string"===Jr(a)&&Yr(c)&&!c.tokens&&(u=/^{([^}]+)}$/.exec(a)))return[new zt(r,a,'"'+o+'" does not support interpolation syntax\nUse an identity property function instead: `{ "type": "identity", "property": '+JSON.stringify(u[1])+" }`.")];var f=[];return"symbol"===t.layerType&&("text-field"===o&&n&&!n.glyphs&&f.push(new zt(r,a,'use of "text-field" requires a style "glyphs" property')),"text-font"===o&&Kr(Nt(a))&&"identity"===Bt(a.type)&&f.push(new zt(r,a,'"text-font" does not support identity functions'))),f.concat(Un({key:t.key,value:a,valueSpec:c,style:n,styleSpec:i,expressionContext:"property",propertyType:e,propertyKey:o}))}function In(t){return On(t,"paint")}function Dn(t){return On(t,"layout")}function zn(t){var e=[],r=t.value,n=t.key,i=t.style,a=t.styleSpec;r.type||r.ref||e.push(new zt(n,r,'either "type" or "ref" is required'));var o,s=Bt(r.type),l=Bt(r.ref);if(r.id)for(var u=Bt(r.id),c=0;c<t.arrayIndex;c++){var f=i.layers[c];Bt(f.id)===u&&e.push(new zt(n,r.id,'duplicate layer id "'+r.id+'", previously used at line '+f.id.__line__))}if("ref"in r)["type","source","source-layer","filter","layout"].forEach((function(t){t in r&&e.push(new zt(n,r[t],'"'+t+'" is prohibited for ref layers'))})),i.layers.forEach((function(t){Bt(t.id)===l&&(o=t)})),o?o.ref?e.push(new zt(n,r.ref,"ref cannot reference another ref layer")):s=Bt(o.type):e.push(new zt(n,r.ref,'ref layer "'+l+'" not found'));else if("background"!==s)if(r.source){var h=i.sources&&i.sources[r.source],p=h&&Bt(h.type);h?"vector"===p&&"raster"===s?e.push(new zt(n,r.source,'layer "'+r.id+'" requires a raster source')):"raster"===p&&"raster"!==s?e.push(new zt(n,r.source,'layer "'+r.id+'" requires a vector source')):"vector"!==p||r["source-layer"]?"raster-dem"===p&&"hillshade"!==s?e.push(new zt(n,r.source,"raster-dem source can only be used with layer type 'hillshade'.")):"line"!==s||!r.paint||!r.paint["line-gradient"]||"geojson"===p&&h.lineMetrics||e.push(new zt(n,r,'layer "'+r.id+'" specifies a line-gradient, which requires a GeoJSON source with `lineMetrics` enabled.')):e.push(new zt(n,r,'layer "'+r.id+'" must specify a "source-layer"')):e.push(new zt(n,r.source,'source "'+r.source+'" not found'))}else e.push(new zt(n,r,'missing required property "source"'));return e=e.concat(dn({key:n,value:r,valueSpec:a.layer,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{"*":function(){return[]},type:function(){return Un({key:n+".type",value:r.type,valueSpec:a.layer.type,style:t.style,styleSpec:t.styleSpec,object:r,objectKey:"type"})},filter:Cn,layout:function(t){return dn({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{"*":function(t){return Dn(Ft({layerType:s},t))}}})},paint:function(t){return dn({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{"*":function(t){return In(Ft({layerType:s},t))}}})}}})),e}function Rn(t){var e=t.value,r=t.key,n=Jr(e);return"string"!==n?[new zt(r,e,"string expected, "+n+" found")]:[]}var Fn={promoteId:function(t){var e=t.key,r=t.value;if("string"===Jr(r))return Rn({key:e,value:r});var n=[];for(var i in r)n.push.apply(n,Rn({key:e+"."+i,value:r[i]}));return n}};function Bn(t){var e=t.value,r=t.key,n=t.styleSpec,i=t.style;if(!e.type)return[new zt(r,e,'"type" is required')];var a,o=Bt(e.type);switch(o){case"vector":case"raster":case"raster-dem":return dn({key:r,value:e,valueSpec:n["source_"+o.replace("-","_")],style:t.style,styleSpec:n,objectElementValidators:Fn});case"geojson":if(a=dn({key:r,value:e,valueSpec:n.source_geojson,style:i,styleSpec:n,objectElementValidators:Fn}),e.cluster)for(var s in e.clusterProperties){var l=e.clusterProperties[s],u=l[0],c=l[1],f="string"==typeof u?[u,["accumulated"],["get",s]]:u;a.push.apply(a,mn({key:r+"."+s+".map",value:c,expressionContext:"cluster-map"})),a.push.apply(a,mn({key:r+"."+s+".reduce",value:f,expressionContext:"cluster-reduce"}))}return a;case"video":return dn({key:r,value:e,valueSpec:n.source_video,style:i,styleSpec:n});case"image":return dn({key:r,value:e,valueSpec:n.source_image,style:i,styleSpec:n});case"canvas":return[new zt(r,null,"Please use runtime APIs to add canvas sources, rather than including them in stylesheets.","source.canvas")];default:return xn({key:r+".type",value:e.type,valueSpec:{values:["vector","raster","raster-dem","geojson","video","image"]},style:i,styleSpec:n})}}function Nn(t){var e=t.value,r=t.styleSpec,n=r.light,i=t.style,a=[],o=Jr(e);if(void 0===e)return a;if("object"!==o)return a.concat([new zt("light",e,"object expected, "+o+" found")]);for(var s in e){var l=s.match(/^(.*)-transition$/);a=l&&n[l[1]]&&n[l[1]].transition?a.concat(Un({key:s,value:e[s],valueSpec:r.transition,style:i,styleSpec:r})):n[s]?a.concat(Un({key:s,value:e[s],valueSpec:n[s],style:i,styleSpec:r})):a.concat([new zt(s,e[s],'unknown property "'+s+'"')])}return a}var jn={"*":function(){return[]},array:vn,boolean:function(t){var e=t.value,r=t.key,n=Jr(e);return"boolean"!==n?[new zt(r,e,"boolean expected, "+n+" found")]:[]},number:gn,color:function(t){var e=t.key,r=t.value,n=Jr(r);return"string"!==n?[new zt(e,r,"color expected, "+n+" found")]:null===ae(r)?[new zt(e,r,'color expected, "'+r+'" found')]:[]},constants:Rt,enum:xn,filter:Cn,function:yn,layer:zn,object:dn,source:Bn,light:Nn,string:Rn,formatted:function(t){return 0===Rn(t).length?[]:mn(t)},resolvedImage:function(t){return 0===Rn(t).length?[]:mn(t)}};function Un(t){var e=t.value,r=t.valueSpec,n=t.styleSpec;return r.expression&&Kr(Bt(e))?yn(t):r.expression&&sn(Nt(e))?mn(t):r.type&&jn[r.type]?jn[r.type](t):dn(Ft({},t,{valueSpec:r.type?n[r.type]:r}))}function Vn(t){var e=t.value,r=t.key,n=Rn(t);return n.length||(-1===e.indexOf("{fontstack}")&&n.push(new zt(r,e,'"glyphs" url must include a "{fontstack}" token')),-1===e.indexOf("{range}")&&n.push(new zt(r,e,'"glyphs" url must include a "{range}" token'))),n}function Hn(t,e){void 0===e&&(e=Dt);var r=[];return r=r.concat(Un({key:"",value:t,valueSpec:e.$root,styleSpec:e,style:t,objectElementValidators:{glyphs:Vn,"*":function(){return[]}}})),t.constants&&(r=r.concat(Rt({key:"constants",value:t.constants,style:t,styleSpec:e}))),qn(r)}function qn(t){return[].concat(t).sort((function(t,e){return t.line-e.line}))}function Gn(t){return function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];return qn(t.apply(this,e))}}Hn.source=Gn(Bn),Hn.light=Gn(Nn),Hn.layer=Gn(zn),Hn.filter=Gn(Cn),Hn.paintProperty=Gn(In),Hn.layoutProperty=Gn(Dn);var Zn=Hn,Yn=Zn.light,Wn=Zn.paintProperty,Xn=Zn.layoutProperty;function Jn(t,e){var r=!1;if(e&&e.length)for(var n=0,i=e;n<i.length;n+=1){var a=i[n];t.fire(new Ot(new Error(a.message))),r=!0}return r}var Kn=Qn,$n=3;function Qn(t,e,r){var n=this.cells=[];if(t instanceof ArrayBuffer){this.arrayBuffer=t;var i=new Int32Array(this.arrayBuffer);t=i[0],e=i[1],r=i[2],this.d=e+2*r;for(var a=0;a<this.d*this.d;a++){var o=i[$n+a],s=i[$n+a+1];n.push(o===s?null:i.subarray(o,s))}var l=i[$n+n.length],u=i[$n+n.length+1];this.keys=i.subarray(l,u),this.bboxes=i.subarray(u),this.insert=this._insertReadonly}else{this.d=e+2*r;for(var c=0;c<this.d*this.d;c++)n.push([]);this.keys=[],this.bboxes=[]}this.n=e,this.extent=t,this.padding=r,this.scale=e/t,this.uid=0;var f=r/e*t;this.min=-f,this.max=t+f}Qn.prototype.insert=function(t,e,r,n,i){this._forEachCell(e,r,n,i,this._insertCell,this.uid++),this.keys.push(t),this.bboxes.push(e),this.bboxes.push(r),this.bboxes.push(n),this.bboxes.push(i)},Qn.prototype._insertReadonly=function(){throw"Cannot insert into a GridIndex created from an ArrayBuffer."},Qn.prototype._insertCell=function(t,e,r,n,i,a){this.cells[i].push(a)},Qn.prototype.query=function(t,e,r,n,i){var a=this.min,o=this.max;if(t<=a&&e<=a&&o<=r&&o<=n&&!i)return Array.prototype.slice.call(this.keys);var s=[];return this._forEachCell(t,e,r,n,this._queryCell,s,{},i),s},Qn.prototype._queryCell=function(t,e,r,n,i,a,o,s){var l=this.cells[i];if(null!==l)for(var u=this.keys,c=this.bboxes,f=0;f<l.length;f++){var h=l[f];if(void 0===o[h]){var p=4*h;(s?s(c[p+0],c[p+1],c[p+2],c[p+3]):t<=c[p+2]&&e<=c[p+3]&&r>=c[p+0]&&n>=c[p+1])?(o[h]=!0,a.push(u[h])):o[h]=!1}}},Qn.prototype._forEachCell=function(t,e,r,n,i,a,o,s){for(var l=this._convertToCellCoord(t),u=this._convertToCellCoord(e),c=this._convertToCellCoord(r),f=this._convertToCellCoord(n),h=l;h<=c;h++)for(var p=u;p<=f;p++){var d=this.d*p+h;if((!s||s(this._convertFromCellCoord(h),this._convertFromCellCoord(p),this._convertFromCellCoord(h+1),this._convertFromCellCoord(p+1)))&&i.call(this,t,e,r,n,d,a,o,s))return}},Qn.prototype._convertFromCellCoord=function(t){return(t-this.padding)/this.scale},Qn.prototype._convertToCellCoord=function(t){return Math.max(0,Math.min(this.d-1,Math.floor(t*this.scale)+this.padding))},Qn.prototype.toArrayBuffer=function(){if(this.arrayBuffer)return this.arrayBuffer;for(var t=this.cells,e=$n+this.cells.length+1+1,r=0,n=0;n<this.cells.length;n++)r+=this.cells[n].length;var i=new Int32Array(e+r+this.keys.length+this.bboxes.length);i[0]=this.extent,i[1]=this.n,i[2]=this.padding;for(var a=e,o=0;o<t.length;o++){var s=t[o];i[$n+o]=a,i.set(s,a),a+=s.length}return i[$n+t.length]=a,i.set(this.keys,a),a+=this.keys.length,i[$n+t.length+1]=a,i.set(this.bboxes,a),a+=this.bboxes.length,i.buffer};var ti=self.ImageData,ei=self.ImageBitmap,ri={};function ni(t,e,r){void 0===r&&(r={}),Object.defineProperty(e,"_classRegistryKey",{value:t,writeable:!1}),ri[t]={klass:e,omit:r.omit||[],shallow:r.shallow||[]}}for(var ii in ni("Object",Object),Kn.serialize=function(t,e){var r=t.toArrayBuffer();return e&&e.push(r),{buffer:r}},Kn.deserialize=function(t){return new Kn(t.buffer)},ni("Grid",Kn),ni("Color",oe),ni("Error",Error),ni("ResolvedImage",ce),ni("StylePropertyFunction",hn),ni("StyleExpression",on,{omit:["_evaluator"]}),ni("ZoomDependentExpression",cn),ni("ZoomConstantExpression",un),ni("CompoundExpression",Ae,{omit:["_evaluate"]}),jr)jr[ii]._classRegistryKey||ni("Expression_"+ii,jr[ii]);function ai(t){return t&&"undefined"!=typeof ArrayBuffer&&(t instanceof ArrayBuffer||t.constructor&&"ArrayBuffer"===t.constructor.name)}function oi(t){return ei&&t instanceof ei}function si(t,e){if(null==t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp)return t;if(ai(t)||oi(t))return e&&e.push(t),t;if(ArrayBuffer.isView(t)){var r=t;return e&&e.push(r.buffer),r}if(t instanceof ti)return e&&e.push(t.data.buffer),t;if(Array.isArray(t)){for(var n=[],i=0,a=t;i<a.length;i+=1){var o=a[i];n.push(si(o,e))}return n}if("object"==typeof t){var s=t.constructor,l=s._classRegistryKey;if(!l)throw new Error("can't serialize object of unregistered class");var u=s.serialize?s.serialize(t,e):{};if(!s.serialize){for(var c in t)if(t.hasOwnProperty(c)&&!(ri[l].omit.indexOf(c)>=0)){var f=t[c];u[c]=ri[l].shallow.indexOf(c)>=0?f:si(f,e)}t instanceof Error&&(u.message=t.message)}if(u.$name)throw new Error("$name property is reserved for worker serialization logic.");return"Object"!==l&&(u.$name=l),u}throw new Error("can't serialize object of type "+typeof t)}function li(t){if(null==t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp||ai(t)||oi(t)||ArrayBuffer.isView(t)||t instanceof ti)return t;if(Array.isArray(t))return t.map(li);if("object"==typeof t){var e=t.$name||"Object",r=ri[e].klass;if(!r)throw new Error("can't deserialize unregistered class "+e);if(r.deserialize)return r.deserialize(t);for(var n=Object.create(r.prototype),i=0,a=Object.keys(t);i<a.length;i+=1){var o=a[i];if("$name"!==o){var s=t[o];n[o]=ri[e].shallow.indexOf(o)>=0?s:li(s)}}return n}throw new Error("can't deserialize object of type "+typeof t)}var ui=function(){this.first=!0};ui.prototype.update=function(t,e){var r=Math.floor(t);return this.first?(this.first=!1,this.lastIntegerZoom=r,this.lastIntegerZoomTime=0,this.lastZoom=t,this.lastFloorZoom=r,!0):(this.lastFloorZoom>r?(this.lastIntegerZoom=r+1,this.lastIntegerZoomTime=e):this.lastFloorZoom<r&&(this.lastIntegerZoom=r,this.lastIntegerZoomTime=e),t!==this.lastZoom&&(this.lastZoom=t,this.lastFloorZoom=r,!0))};var ci={"Latin-1 Supplement":function(t){return t>=128&&t<=255},Arabic:function(t){return t>=1536&&t<=1791},"Arabic Supplement":function(t){return t>=1872&&t<=1919},"Arabic Extended-A":function(t){return t>=2208&&t<=2303},"Hangul Jamo":function(t){return t>=4352&&t<=4607},"Unified Canadian Aboriginal Syllabics":function(t){return t>=5120&&t<=5759},Khmer:function(t){return t>=6016&&t<=6143},"Unified Canadian Aboriginal Syllabics Extended":function(t){return t>=6320&&t<=6399},"General Punctuation":function(t){return t>=8192&&t<=8303},"Letterlike Symbols":function(t){return t>=8448&&t<=8527},"Number Forms":function(t){return t>=8528&&t<=8591},"Miscellaneous Technical":function(t){return t>=8960&&t<=9215},"Control Pictures":function(t){return t>=9216&&t<=9279},"Optical Character Recognition":function(t){return t>=9280&&t<=9311},"Enclosed Alphanumerics":function(t){return t>=9312&&t<=9471},"Geometric Shapes":function(t){return t>=9632&&t<=9727},"Miscellaneous Symbols":function(t){return t>=9728&&t<=9983},"Miscellaneous Symbols and Arrows":function(t){return t>=11008&&t<=11263},"CJK Radicals Supplement":function(t){return t>=11904&&t<=12031},"Kangxi Radicals":function(t){return t>=12032&&t<=12255},"Ideographic Description Characters":function(t){return t>=12272&&t<=12287},"CJK Symbols and Punctuation":function(t){return t>=12288&&t<=12351},Hiragana:function(t){return t>=12352&&t<=12447},Katakana:function(t){return t>=12448&&t<=12543},Bopomofo:function(t){return t>=12544&&t<=12591},"Hangul Compatibility Jamo":function(t){return t>=12592&&t<=12687},Kanbun:function(t){return t>=12688&&t<=12703},"Bopomofo Extended":function(t){return t>=12704&&t<=12735},"CJK Strokes":function(t){return t>=12736&&t<=12783},"Katakana Phonetic Extensions":function(t){return t>=12784&&t<=12799},"Enclosed CJK Letters and Months":function(t){return t>=12800&&t<=13055},"CJK Compatibility":function(t){return t>=13056&&t<=13311},"CJK Unified Ideographs Extension A":function(t){return t>=13312&&t<=19903},"Yijing Hexagram Symbols":function(t){return t>=19904&&t<=19967},"CJK Unified Ideographs":function(t){return t>=19968&&t<=40959},"Yi Syllables":function(t){return t>=40960&&t<=42127},"Yi Radicals":function(t){return t>=42128&&t<=42191},"Hangul Jamo Extended-A":function(t){return t>=43360&&t<=43391},"Hangul Syllables":function(t){return t>=44032&&t<=55215},"Hangul Jamo Extended-B":function(t){return t>=55216&&t<=55295},"Private Use Area":function(t){return t>=57344&&t<=63743},"CJK Compatibility Ideographs":function(t){return t>=63744&&t<=64255},"Arabic Presentation Forms-A":function(t){return t>=64336&&t<=65023},"Vertical Forms":function(t){return t>=65040&&t<=65055},"CJK Compatibility Forms":function(t){return t>=65072&&t<=65103},"Small Form Variants":function(t){return t>=65104&&t<=65135},"Arabic Presentation Forms-B":function(t){return t>=65136&&t<=65279},"Halfwidth and Fullwidth Forms":function(t){return t>=65280&&t<=65519}};function fi(t){for(var e=0,r=t;e<r.length;e+=1)if(hi(r[e].charCodeAt(0)))return!0;return!1}function hi(t){return!(746!==t&&747!==t&&(t<4352||!(ci["Bopomofo Extended"](t)||ci.Bopomofo(t)||ci["CJK Compatibility Forms"](t)&&!(t>=65097&&t<=65103)||ci["CJK Compatibility Ideographs"](t)||ci["CJK Compatibility"](t)||ci["CJK Radicals Supplement"](t)||ci["CJK Strokes"](t)||!(!ci["CJK Symbols and Punctuation"](t)||t>=12296&&t<=12305||t>=12308&&t<=12319||12336===t)||ci["CJK Unified Ideographs Extension A"](t)||ci["CJK Unified Ideographs"](t)||ci["Enclosed CJK Letters and Months"](t)||ci["Hangul Compatibility Jamo"](t)||ci["Hangul Jamo Extended-A"](t)||ci["Hangul Jamo Extended-B"](t)||ci["Hangul Jamo"](t)||ci["Hangul Syllables"](t)||ci.Hiragana(t)||ci["Ideographic Description Characters"](t)||ci.Kanbun(t)||ci["Kangxi Radicals"](t)||ci["Katakana Phonetic Extensions"](t)||ci.Katakana(t)&&12540!==t||!(!ci["Halfwidth and Fullwidth Forms"](t)||65288===t||65289===t||65293===t||t>=65306&&t<=65310||65339===t||65341===t||65343===t||t>=65371&&t<=65503||65507===t||t>=65512&&t<=65519)||!(!ci["Small Form Variants"](t)||t>=65112&&t<=65118||t>=65123&&t<=65126)||ci["Unified Canadian Aboriginal Syllabics"](t)||ci["Unified Canadian Aboriginal Syllabics Extended"](t)||ci["Vertical Forms"](t)||ci["Yijing Hexagram Symbols"](t)||ci["Yi Syllables"](t)||ci["Yi Radicals"](t))))}function pi(t){return!(hi(t)||function(t){return!!(ci["Latin-1 Supplement"](t)&&(167===t||169===t||174===t||177===t||188===t||189===t||190===t||215===t||247===t)||ci["General Punctuation"](t)&&(8214===t||8224===t||8225===t||8240===t||8241===t||8251===t||8252===t||8258===t||8263===t||8264===t||8265===t||8273===t)||ci["Letterlike Symbols"](t)||ci["Number Forms"](t)||ci["Miscellaneous Technical"](t)&&(t>=8960&&t<=8967||t>=8972&&t<=8991||t>=8996&&t<=9e3||9003===t||t>=9085&&t<=9114||t>=9150&&t<=9165||9167===t||t>=9169&&t<=9179||t>=9186&&t<=9215)||ci["Control Pictures"](t)&&9251!==t||ci["Optical Character Recognition"](t)||ci["Enclosed Alphanumerics"](t)||ci["Geometric Shapes"](t)||ci["Miscellaneous Symbols"](t)&&!(t>=9754&&t<=9759)||ci["Miscellaneous Symbols and Arrows"](t)&&(t>=11026&&t<=11055||t>=11088&&t<=11097||t>=11192&&t<=11243)||ci["CJK Symbols and Punctuation"](t)||ci.Katakana(t)||ci["Private Use Area"](t)||ci["CJK Compatibility Forms"](t)||ci["Small Form Variants"](t)||ci["Halfwidth and Fullwidth Forms"](t)||8734===t||8756===t||8757===t||t>=9984&&t<=10087||t>=10102&&t<=10131||65532===t||65533===t)}(t))}function di(t){return ci.Arabic(t)||ci["Arabic Supplement"](t)||ci["Arabic Extended-A"](t)||ci["Arabic Presentation Forms-A"](t)||ci["Arabic Presentation Forms-B"](t)}function vi(t){return t>=1424&&t<=2303||ci["Arabic Presentation Forms-A"](t)||ci["Arabic Presentation Forms-B"](t)}function gi(t,e){return!(!e&&vi(t)||t>=2304&&t<=3583||t>=3840&&t<=4255||ci.Khmer(t))}function yi(t){for(var e=0,r=t;e<r.length;e+=1)if(vi(r[e].charCodeAt(0)))return!0;return!1}var mi="deferred",xi="loading",bi="loaded",_i="error",wi=null,Ti="unavailable",ki=null,Ai=function(t){t&&"string"==typeof t&&t.indexOf("NetworkError")>-1&&(Ti=_i),wi&&wi(t)};function Mi(){Si.fire(new Pt("pluginStateChange",{pluginStatus:Ti,pluginURL:ki}))}var Si=new It,Ei=function(){return Ti},Li=function(){if(Ti!==mi||!ki)throw new Error("rtl-text-plugin cannot be downloaded unless a pluginURL is specified");Ti=xi,Mi(),ki&&kt({url:ki},(function(t){t?Ai(t):(Ti=bi,Mi())}))},Ci={applyArabicShaping:null,processBidirectionalText:null,processStyledBidirectionalText:null,isLoaded:function(){return Ti===bi||null!=Ci.applyArabicShaping},isLoading:function(){return Ti===xi},setState:function(t){Ti=t.pluginStatus,ki=t.pluginURL},isParsed:function(){return null!=Ci.applyArabicShaping&&null!=Ci.processBidirectionalText&&null!=Ci.processStyledBidirectionalText},getPluginURL:function(){return ki}},Pi=function(t,e){this.zoom=t,e?(this.now=e.now,this.fadeDuration=e.fadeDuration,this.zoomHistory=e.zoomHistory,this.transition=e.transition):(this.now=0,this.fadeDuration=0,this.zoomHistory=new ui,this.transition={})};Pi.prototype.isSupportedScript=function(t){return function(t,e){for(var r=0,n=t;r<n.length;r+=1)if(!gi(n[r].charCodeAt(0),e))return!1;return!0}(t,Ci.isLoaded())},Pi.prototype.crossFadingFactor=function(){return 0===this.fadeDuration?1:Math.min((this.now-this.zoomHistory.lastIntegerZoomTime)/this.fadeDuration,1)},Pi.prototype.getCrossfadeParameters=function(){var t=this.zoom,e=t-Math.floor(t),r=this.crossFadingFactor();return t>this.zoomHistory.lastIntegerZoom?{fromScale:2,toScale:1,t:e+(1-e)*r}:{fromScale:.5,toScale:1,t:1-(1-r)*e}};var Oi=function(t,e){this.property=t,this.value=e,this.expression=function(t,e){if(Kr(t))return new hn(t,e);if(sn(t)){var r=fn(t,e);if("error"===r.result)throw new Error(r.value.map((function(t){return t.key+": "+t.message})).join(", "));return r.value}var n=t;return"string"==typeof t&&"color"===e.type&&(n=oe.parse(t)),{kind:"constant",evaluate:function(){return n}}}(void 0===e?t.specification.default:e,t.specification)};Oi.prototype.isDataDriven=function(){return"source"===this.expression.kind||"composite"===this.expression.kind},Oi.prototype.possiblyEvaluate=function(t,e,r){return this.property.possiblyEvaluate(this,t,e,r)};var Ii=function(t){this.property=t,this.value=new Oi(t,void 0)};Ii.prototype.transitioned=function(t,e){return new zi(this.property,this.value,e,f({},t.transition,this.transition),t.now)},Ii.prototype.untransitioned=function(){return new zi(this.property,this.value,null,{},0)};var Di=function(t){this._properties=t,this._values=Object.create(t.defaultTransitionablePropertyValues)};Di.prototype.getValue=function(t){return b(this._values[t].value.value)},Di.prototype.setValue=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new Ii(this._values[t].property)),this._values[t].value=new Oi(this._values[t].property,null===e?void 0:b(e))},Di.prototype.getTransition=function(t){return b(this._values[t].transition)},Di.prototype.setTransition=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new Ii(this._values[t].property)),this._values[t].transition=b(e)||void 0},Di.prototype.serialize=function(){for(var t={},e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e],i=this.getValue(n);void 0!==i&&(t[n]=i);var a=this.getTransition(n);void 0!==a&&(t[n+"-transition"]=a)}return t},Di.prototype.transitioned=function(t,e){for(var r=new Ri(this._properties),n=0,i=Object.keys(this._values);n<i.length;n+=1){var a=i[n];r._values[a]=this._values[a].transitioned(t,e._values[a])}return r},Di.prototype.untransitioned=function(){for(var t=new Ri(this._properties),e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e];t._values[n]=this._values[n].untransitioned()}return t};var zi=function(t,e,r,n,i){this.property=t,this.value=e,this.begin=i+n.delay||0,this.end=this.begin+n.duration||0,t.specification.transition&&(n.delay||n.duration)&&(this.prior=r)};zi.prototype.possiblyEvaluate=function(t,e,r){var n=t.now||0,i=this.value.possiblyEvaluate(t,e,r),a=this.prior;if(a){if(n>this.end)return this.prior=null,i;if(this.value.isDataDriven())return this.prior=null,i;if(n<this.begin)return a.possiblyEvaluate(t,e,r);var o=(n-this.begin)/(this.end-this.begin);return this.property.interpolate(a.possiblyEvaluate(t,e,r),i,function(t){if(t<=0)return 0;if(t>=1)return 1;var e=t*t,r=e*t;return 4*(t<.5?r:3*(t-e)+r-.75)}(o))}return i};var Ri=function(t){this._properties=t,this._values=Object.create(t.defaultTransitioningPropertyValues)};Ri.prototype.possiblyEvaluate=function(t,e,r){for(var n=new Ni(this._properties),i=0,a=Object.keys(this._values);i<a.length;i+=1){var o=a[i];n._values[o]=this._values[o].possiblyEvaluate(t,e,r)}return n},Ri.prototype.hasTransition=function(){for(var t=0,e=Object.keys(this._values);t<e.length;t+=1){var r=e[t];if(this._values[r].prior)return!0}return!1};var Fi=function(t){this._properties=t,this._values=Object.create(t.defaultPropertyValues)};Fi.prototype.getValue=function(t){return b(this._values[t].value)},Fi.prototype.setValue=function(t,e){this._values[t]=new Oi(this._values[t].property,null===e?void 0:b(e))},Fi.prototype.serialize=function(){for(var t={},e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e],i=this.getValue(n);void 0!==i&&(t[n]=i)}return t},Fi.prototype.possiblyEvaluate=function(t,e,r){for(var n=new Ni(this._properties),i=0,a=Object.keys(this._values);i<a.length;i+=1){var o=a[i];n._values[o]=this._values[o].possiblyEvaluate(t,e,r)}return n};var Bi=function(t,e,r){this.property=t,this.value=e,this.parameters=r};Bi.prototype.isConstant=function(){return"constant"===this.value.kind},Bi.prototype.constantOr=function(t){return"constant"===this.value.kind?this.value.value:t},Bi.prototype.evaluate=function(t,e,r,n){return this.property.evaluate(this.value,this.parameters,t,e,r,n)};var Ni=function(t){this._properties=t,this._values=Object.create(t.defaultPossiblyEvaluatedValues)};Ni.prototype.get=function(t){return this._values[t]};var ji=function(t){this.specification=t};ji.prototype.possiblyEvaluate=function(t,e){return t.expression.evaluate(e)},ji.prototype.interpolate=function(t,e,r){var n=Qe[this.specification.type];return n?n(t,e,r):t};var Ui=function(t,e){this.specification=t,this.overrides=e};Ui.prototype.possiblyEvaluate=function(t,e,r,n){return"constant"===t.expression.kind||"camera"===t.expression.kind?new Bi(this,{kind:"constant",value:t.expression.evaluate(e,null,{},r,n)},e):new Bi(this,t.expression,e)},Ui.prototype.interpolate=function(t,e,r){if("constant"!==t.value.kind||"constant"!==e.value.kind)return t;if(void 0===t.value.value||void 0===e.value.value)return new Bi(this,{kind:"constant",value:void 0},t.parameters);var n=Qe[this.specification.type];return n?new Bi(this,{kind:"constant",value:n(t.value.value,e.value.value,r)},t.parameters):t},Ui.prototype.evaluate=function(t,e,r,n,i,a){return"constant"===t.kind?t.value:t.evaluate(e,r,n,i,a)};var Vi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.possiblyEvaluate=function(t,e,r,n){if(void 0===t.value)return new Bi(this,{kind:"constant",value:void 0},e);if("constant"===t.expression.kind){var i=t.expression.evaluate(e,null,{},r,n),a="resolvedImage"===t.property.specification.type&&"string"!=typeof i?i.name:i,o=this._calculate(a,a,a,e);return new Bi(this,{kind:"constant",value:o},e)}if("camera"===t.expression.kind){var s=this._calculate(t.expression.evaluate({zoom:e.zoom-1}),t.expression.evaluate({zoom:e.zoom}),t.expression.evaluate({zoom:e.zoom+1}),e);return new Bi(this,{kind:"constant",value:s},e)}return new Bi(this,t.expression,e)},e.prototype.evaluate=function(t,e,r,n,i,a){if("source"===t.kind){var o=t.evaluate(e,r,n,i,a);return this._calculate(o,o,o,e)}return"composite"===t.kind?this._calculate(t.evaluate({zoom:Math.floor(e.zoom)-1},r,n),t.evaluate({zoom:Math.floor(e.zoom)},r,n),t.evaluate({zoom:Math.floor(e.zoom)+1},r,n),e):t.value},e.prototype._calculate=function(t,e,r,n){return n.zoom>n.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},e.prototype.interpolate=function(t){return t},e}(Ui),Hi=function(t){this.specification=t};Hi.prototype.possiblyEvaluate=function(t,e,r,n){if(void 0!==t.value){if("constant"===t.expression.kind){var i=t.expression.evaluate(e,null,{},r,n);return this._calculate(i,i,i,e)}return this._calculate(t.expression.evaluate(new Pi(Math.floor(e.zoom-1),e)),t.expression.evaluate(new Pi(Math.floor(e.zoom),e)),t.expression.evaluate(new Pi(Math.floor(e.zoom+1),e)),e)}},Hi.prototype._calculate=function(t,e,r,n){return n.zoom>n.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},Hi.prototype.interpolate=function(t){return t};var qi=function(t){this.specification=t};qi.prototype.possiblyEvaluate=function(t,e,r,n){return!!t.expression.evaluate(e,null,{},r,n)},qi.prototype.interpolate=function(){return!1};var Gi=function(t){for(var e in this.properties=t,this.defaultPropertyValues={},this.defaultTransitionablePropertyValues={},this.defaultTransitioningPropertyValues={},this.defaultPossiblyEvaluatedValues={},this.overridableProperties=[],t){var r=t[e];r.specification.overridable&&this.overridableProperties.push(e);var n=this.defaultPropertyValues[e]=new Oi(r,void 0),i=this.defaultTransitionablePropertyValues[e]=new Ii(r);this.defaultTransitioningPropertyValues[e]=i.untransitioned(),this.defaultPossiblyEvaluatedValues[e]=n.possiblyEvaluate({})}};ni("DataDrivenProperty",Ui),ni("DataConstantProperty",ji),ni("CrossFadedDataDrivenProperty",Vi),ni("CrossFadedProperty",Hi),ni("ColorRampProperty",qi);var Zi="-transition",Yi=function(t){function e(e,r){if(t.call(this),this.id=e.id,this.type=e.type,this._featureFilter={filter:function(){return!0},needGeometry:!1},"custom"!==e.type&&(this.metadata=e.metadata,this.minzoom=e.minzoom,this.maxzoom=e.maxzoom,"background"!==e.type&&(this.source=e.source,this.sourceLayer=e["source-layer"],this.filter=e.filter),r.layout&&(this._unevaluatedLayout=new Fi(r.layout)),r.paint)){for(var n in this._transitionablePaint=new Di(r.paint),e.paint)this.setPaintProperty(n,e.paint[n],{validate:!1});for(var i in e.layout)this.setLayoutProperty(i,e.layout[i],{validate:!1});this._transitioningPaint=this._transitionablePaint.untransitioned(),this.paint=new Ni(r.paint)}}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getCrossfadeParameters=function(){return this._crossfadeParameters},e.prototype.getLayoutProperty=function(t){return"visibility"===t?this.visibility:this._unevaluatedLayout.getValue(t)},e.prototype.setLayoutProperty=function(t,e,r){if(void 0===r&&(r={}),null!=e){var n="layers."+this.id+".layout."+t;if(this._validate(Xn,n,t,e,r))return}"visibility"!==t?this._unevaluatedLayout.setValue(t,e):this.visibility=e},e.prototype.getPaintProperty=function(t){return y(t,Zi)?this._transitionablePaint.getTransition(t.slice(0,-11)):this._transitionablePaint.getValue(t)},e.prototype.setPaintProperty=function(t,e,r){if(void 0===r&&(r={}),null!=e){var n="layers."+this.id+".paint."+t;if(this._validate(Wn,n,t,e,r))return!1}if(y(t,Zi))return this._transitionablePaint.setTransition(t.slice(0,-11),e||void 0),!1;var i=this._transitionablePaint._values[t],a="cross-faded-data-driven"===i.property.specification["property-type"],o=i.value.isDataDriven(),s=i.value;this._transitionablePaint.setValue(t,e),this._handleSpecialPaintPropertyUpdate(t);var l=this._transitionablePaint._values[t].value;return l.isDataDriven()||o||a||this._handleOverridablePaintPropertyUpdate(t,s,l)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){},e.prototype._handleOverridablePaintPropertyUpdate=function(t,e,r){return!1},e.prototype.isHidden=function(t){return!!(this.minzoom&&t<this.minzoom)||!!(this.maxzoom&&t>=this.maxzoom)||"none"===this.visibility},e.prototype.updateTransitions=function(t){this._transitioningPaint=this._transitionablePaint.transitioned(t,this._transitioningPaint)},e.prototype.hasTransition=function(){return this._transitioningPaint.hasTransition()},e.prototype.recalculate=function(t,e){t.getCrossfadeParameters&&(this._crossfadeParameters=t.getCrossfadeParameters()),this._unevaluatedLayout&&(this.layout=this._unevaluatedLayout.possiblyEvaluate(t,void 0,e)),this.paint=this._transitioningPaint.possiblyEvaluate(t,void 0,e)},e.prototype.serialize=function(){var t={id:this.id,type:this.type,source:this.source,"source-layer":this.sourceLayer,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom,filter:this.filter,layout:this._unevaluatedLayout&&this._unevaluatedLayout.serialize(),paint:this._transitionablePaint&&this._transitionablePaint.serialize()};return this.visibility&&(t.layout=t.layout||{},t.layout.visibility=this.visibility),x(t,(function(t,e){return!(void 0===t||"layout"===e&&!Object.keys(t).length||"paint"===e&&!Object.keys(t).length)}))},e.prototype._validate=function(t,e,r,n,i){return void 0===i&&(i={}),(!i||!1!==i.validate)&&Jn(this,t.call(Zn,{key:e,layerType:this.type,objectKey:r,value:n,styleSpec:Dt,style:{glyphs:!0,sprite:!0}}))},e.prototype.is3D=function(){return!1},e.prototype.isTileClipped=function(){return!1},e.prototype.hasOffscreenPass=function(){return!1},e.prototype.resize=function(){},e.prototype.isStateDependent=function(){for(var t in this.paint._values){var e=this.paint.get(t);if(e instanceof Bi&&Yr(e.property.specification)&&("source"===e.value.kind||"composite"===e.value.kind)&&e.value.isStateDependent)return!0}return!1},e}(It),Wi={Int8:Int8Array,Uint8:Uint8Array,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array},Xi=function(t,e){this._structArray=t,this._pos1=e*this.size,this._pos2=this._pos1/2,this._pos4=this._pos1/4,this._pos8=this._pos1/8},Ji=function(){this.isTransferred=!1,this.capacity=-1,this.resize(0)};function Ki(t,e){void 0===e&&(e=1);var r=0,n=0;return{members:t.map((function(t){var i,a=(i=t.type,Wi[i].BYTES_PER_ELEMENT),o=r=$i(r,Math.max(e,a)),s=t.components||1;return n=Math.max(n,a),r+=a*s,{name:t.name,type:t.type,components:s,offset:o}})),size:$i(r,Math.max(n,e)),alignment:e}}function $i(t,e){return Math.ceil(t/e)*e}Ji.serialize=function(t,e){return t._trim(),e&&(t.isTransferred=!0,e.push(t.arrayBuffer)),{length:t.length,arrayBuffer:t.arrayBuffer}},Ji.deserialize=function(t){var e=Object.create(this.prototype);return e.arrayBuffer=t.arrayBuffer,e.length=t.length,e.capacity=t.arrayBuffer.byteLength/e.bytesPerElement,e._refreshViews(),e},Ji.prototype._trim=function(){this.length!==this.capacity&&(this.capacity=this.length,this.arrayBuffer=this.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews())},Ji.prototype.clear=function(){this.length=0},Ji.prototype.resize=function(t){this.reserve(t),this.length=t},Ji.prototype.reserve=function(t){if(t>this.capacity){this.capacity=Math.max(t,Math.floor(5*this.capacity),128),this.arrayBuffer=new ArrayBuffer(this.capacity*this.bytesPerElement);var e=this.uint8;this._refreshViews(),e&&this.uint8.set(e)}},Ji.prototype._refreshViews=function(){throw new Error("_refreshViews() must be implemented by each concrete StructArray layout")};var Qi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.int16[n+0]=e,this.int16[n+1]=r,t},e}(Ji);Qi.prototype.bytesPerElement=4,ni("StructArrayLayout2i4",Qi);var ta=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=4*t;return this.int16[a+0]=e,this.int16[a+1]=r,this.int16[a+2]=n,this.int16[a+3]=i,t},e}(Ji);ta.prototype.bytesPerElement=8,ni("StructArrayLayout4i8",ta);var ea=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=n,this.int16[s+3]=i,this.int16[s+4]=a,this.int16[s+5]=o,t},e}(Ji);ea.prototype.bytesPerElement=12,ni("StructArrayLayout2i4i12",ea);var ra=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=4*t,l=8*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.uint8[l+4]=n,this.uint8[l+5]=i,this.uint8[l+6]=a,this.uint8[l+7]=o,t},e}(Ji);ra.prototype.bytesPerElement=8,ni("StructArrayLayout2i4ub8",ra);var na=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l,u){var c=this.length;return this.resize(c+1),this.emplace(c,t,e,r,n,i,a,o,s,l,u)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l,u,c){var f=9*t,h=18*t;return this.uint16[f+0]=e,this.uint16[f+1]=r,this.uint16[f+2]=n,this.uint16[f+3]=i,this.uint16[f+4]=a,this.uint16[f+5]=o,this.uint16[f+6]=s,this.uint16[f+7]=l,this.uint8[h+16]=u,this.uint8[h+17]=c,t},e}(Ji);na.prototype.bytesPerElement=18,ni("StructArrayLayout8ui2ub18",na);var ia=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l,u,c,f){var h=this.length;return this.resize(h+1),this.emplace(h,t,e,r,n,i,a,o,s,l,u,c,f)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l,u,c,f,h){var p=12*t;return this.int16[p+0]=e,this.int16[p+1]=r,this.int16[p+2]=n,this.int16[p+3]=i,this.uint16[p+4]=a,this.uint16[p+5]=o,this.uint16[p+6]=s,this.uint16[p+7]=l,this.int16[p+8]=u,this.int16[p+9]=c,this.int16[p+10]=f,this.int16[p+11]=h,t},e}(Ji);ia.prototype.bytesPerElement=24,ni("StructArrayLayout4i4ui4i24",ia);var aa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.float32[i+0]=e,this.float32[i+1]=r,this.float32[i+2]=n,t},e}(Ji);aa.prototype.bytesPerElement=12,ni("StructArrayLayout3f12",aa);var oa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.uint32[r+0]=e,t},e}(Ji);oa.prototype.bytesPerElement=4,ni("StructArrayLayout1ul4",oa);var sa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l){var u=this.length;return this.resize(u+1),this.emplace(u,t,e,r,n,i,a,o,s,l)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l,u){var c=10*t,f=5*t;return this.int16[c+0]=e,this.int16[c+1]=r,this.int16[c+2]=n,this.int16[c+3]=i,this.int16[c+4]=a,this.int16[c+5]=o,this.uint32[f+3]=s,this.uint16[c+8]=l,this.uint16[c+9]=u,t},e}(Ji);sa.prototype.bytesPerElement=20,ni("StructArrayLayout6i1ul2ui20",sa);var la=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=n,this.int16[s+3]=i,this.int16[s+4]=a,this.int16[s+5]=o,t},e}(Ji);la.prototype.bytesPerElement=12,ni("StructArrayLayout2i2i2i12",la);var ua=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i){var a=this.length;return this.resize(a+1),this.emplace(a,t,e,r,n,i)},e.prototype.emplace=function(t,e,r,n,i,a){var o=4*t,s=8*t;return this.float32[o+0]=e,this.float32[o+1]=r,this.float32[o+2]=n,this.int16[s+6]=i,this.int16[s+7]=a,t},e}(Ji);ua.prototype.bytesPerElement=16,ni("StructArrayLayout2f1f2i16",ua);var ca=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=12*t,o=3*t;return this.uint8[a+0]=e,this.uint8[a+1]=r,this.float32[o+1]=n,this.float32[o+2]=i,t},e}(Ji);ca.prototype.bytesPerElement=12,ni("StructArrayLayout2ub2f12",ca);var fa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.uint16[i+0]=e,this.uint16[i+1]=r,this.uint16[i+2]=n,t},e}(Ji);fa.prototype.bytesPerElement=6,ni("StructArrayLayout3ui6",fa);var ha=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g){var y=this.length;return this.resize(y+1),this.emplace(y,t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g,y){var m=24*t,x=12*t,b=48*t;return this.int16[m+0]=e,this.int16[m+1]=r,this.uint16[m+2]=n,this.uint16[m+3]=i,this.uint32[x+2]=a,this.uint32[x+3]=o,this.uint32[x+4]=s,this.uint16[m+10]=l,this.uint16[m+11]=u,this.uint16[m+12]=c,this.float32[x+7]=f,this.float32[x+8]=h,this.uint8[b+36]=p,this.uint8[b+37]=d,this.uint8[b+38]=v,this.uint32[x+10]=g,this.int16[m+22]=y,t},e}(Ji);ha.prototype.bytesPerElement=48,ni("StructArrayLayout2i2ui3ul3ui2f3ub1ul1i48",ha);var pa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,w,T,k,A,M,S){var E=this.length;return this.resize(E+1),this.emplace(E,t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,w,T,k,A,M,S)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,w,T,k,A,M,S,E){var L=34*t,C=17*t;return this.int16[L+0]=e,this.int16[L+1]=r,this.int16[L+2]=n,this.int16[L+3]=i,this.int16[L+4]=a,this.int16[L+5]=o,this.int16[L+6]=s,this.int16[L+7]=l,this.uint16[L+8]=u,this.uint16[L+9]=c,this.uint16[L+10]=f,this.uint16[L+11]=h,this.uint16[L+12]=p,this.uint16[L+13]=d,this.uint16[L+14]=v,this.uint16[L+15]=g,this.uint16[L+16]=y,this.uint16[L+17]=m,this.uint16[L+18]=x,this.uint16[L+19]=b,this.uint16[L+20]=_,this.uint16[L+21]=w,this.uint16[L+22]=T,this.uint32[C+12]=k,this.float32[C+13]=A,this.float32[C+14]=M,this.float32[C+15]=S,this.float32[C+16]=E,t},e}(Ji);pa.prototype.bytesPerElement=68,ni("StructArrayLayout8i15ui1ul4f68",pa);var da=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.float32[r+0]=e,t},e}(Ji);da.prototype.bytesPerElement=4,ni("StructArrayLayout1f4",da);var va=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.int16[i+0]=e,this.int16[i+1]=r,this.int16[i+2]=n,t},e}(Ji);va.prototype.bytesPerElement=6,ni("StructArrayLayout3i6",va);var ga=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=2*t,a=4*t;return this.uint32[i+0]=e,this.uint16[a+2]=r,this.uint16[a+3]=n,t},e}(Ji);ga.prototype.bytesPerElement=8,ni("StructArrayLayout1ul2ui8",ga);var ya=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.uint16[n+0]=e,this.uint16[n+1]=r,t},e}(Ji);ya.prototype.bytesPerElement=4,ni("StructArrayLayout2ui4",ya);var ma=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.uint16[r+0]=e,t},e}(Ji);ma.prototype.bytesPerElement=2,ni("StructArrayLayout1ui2",ma);var xa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.float32[n+0]=e,this.float32[n+1]=r,t},e}(Ji);xa.prototype.bytesPerElement=8,ni("StructArrayLayout2f8",xa);var ba=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=4*t;return this.float32[a+0]=e,this.float32[a+1]=r,this.float32[a+2]=n,this.float32[a+3]=i,t},e}(Ji);ba.prototype.bytesPerElement=16,ni("StructArrayLayout4f16",ba);var _a=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorPointX:{configurable:!0},anchorPointY:{configurable:!0},x1:{configurable:!0},y1:{configurable:!0},x2:{configurable:!0},y2:{configurable:!0},featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0},anchorPoint:{configurable:!0}};return r.anchorPointX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorPointY.get=function(){return this._structArray.int16[this._pos2+1]},r.x1.get=function(){return this._structArray.int16[this._pos2+2]},r.y1.get=function(){return this._structArray.int16[this._pos2+3]},r.x2.get=function(){return this._structArray.int16[this._pos2+4]},r.y2.get=function(){return this._structArray.int16[this._pos2+5]},r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+8]},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.anchorPoint.get=function(){return new a(this.anchorPointX,this.anchorPointY)},Object.defineProperties(e.prototype,r),e}(Xi);_a.prototype.size=20;var wa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new _a(this,t)},e}(sa);ni("CollisionBoxArray",wa);var Ta=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},glyphStartIndex:{configurable:!0},numGlyphs:{configurable:!0},vertexStartIndex:{configurable:!0},lineStartIndex:{configurable:!0},lineLength:{configurable:!0},segment:{configurable:!0},lowerSize:{configurable:!0},upperSize:{configurable:!0},lineOffsetX:{configurable:!0},lineOffsetY:{configurable:!0},writingMode:{configurable:!0},placedOrientation:{configurable:!0},hidden:{configurable:!0},crossTileID:{configurable:!0},associatedIconIndex:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.glyphStartIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.numGlyphs.get=function(){return this._structArray.uint16[this._pos2+3]},r.vertexStartIndex.get=function(){return this._structArray.uint32[this._pos4+2]},r.lineStartIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.lineLength.get=function(){return this._structArray.uint32[this._pos4+4]},r.segment.get=function(){return this._structArray.uint16[this._pos2+10]},r.lowerSize.get=function(){return this._structArray.uint16[this._pos2+11]},r.upperSize.get=function(){return this._structArray.uint16[this._pos2+12]},r.lineOffsetX.get=function(){return this._structArray.float32[this._pos4+7]},r.lineOffsetY.get=function(){return this._structArray.float32[this._pos4+8]},r.writingMode.get=function(){return this._structArray.uint8[this._pos1+36]},r.placedOrientation.get=function(){return this._structArray.uint8[this._pos1+37]},r.placedOrientation.set=function(t){this._structArray.uint8[this._pos1+37]=t},r.hidden.get=function(){return this._structArray.uint8[this._pos1+38]},r.hidden.set=function(t){this._structArray.uint8[this._pos1+38]=t},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+10]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+10]=t},r.associatedIconIndex.get=function(){return this._structArray.int16[this._pos2+22]},Object.defineProperties(e.prototype,r),e}(Xi);Ta.prototype.size=48;var ka=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new Ta(this,t)},e}(ha);ni("PlacedSymbolArray",ka);var Aa=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},rightJustifiedTextSymbolIndex:{configurable:!0},centerJustifiedTextSymbolIndex:{configurable:!0},leftJustifiedTextSymbolIndex:{configurable:!0},verticalPlacedTextSymbolIndex:{configurable:!0},placedIconSymbolIndex:{configurable:!0},verticalPlacedIconSymbolIndex:{configurable:!0},key:{configurable:!0},textBoxStartIndex:{configurable:!0},textBoxEndIndex:{configurable:!0},verticalTextBoxStartIndex:{configurable:!0},verticalTextBoxEndIndex:{configurable:!0},iconBoxStartIndex:{configurable:!0},iconBoxEndIndex:{configurable:!0},verticalIconBoxStartIndex:{configurable:!0},verticalIconBoxEndIndex:{configurable:!0},featureIndex:{configurable:!0},numHorizontalGlyphVertices:{configurable:!0},numVerticalGlyphVertices:{configurable:!0},numIconVertices:{configurable:!0},numVerticalIconVertices:{configurable:!0},useRuntimeCollisionCircles:{configurable:!0},crossTileID:{configurable:!0},textBoxScale:{configurable:!0},textOffset0:{configurable:!0},textOffset1:{configurable:!0},collisionCircleDiameter:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.rightJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+2]},r.centerJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+3]},r.leftJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+4]},r.verticalPlacedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+5]},r.placedIconSymbolIndex.get=function(){return this._structArray.int16[this._pos2+6]},r.verticalPlacedIconSymbolIndex.get=function(){return this._structArray.int16[this._pos2+7]},r.key.get=function(){return this._structArray.uint16[this._pos2+8]},r.textBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.textBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+10]},r.verticalTextBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+11]},r.verticalTextBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+12]},r.iconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+13]},r.iconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+14]},r.verticalIconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+15]},r.verticalIconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+16]},r.featureIndex.get=function(){return this._structArray.uint16[this._pos2+17]},r.numHorizontalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+18]},r.numVerticalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+19]},r.numIconVertices.get=function(){return this._structArray.uint16[this._pos2+20]},r.numVerticalIconVertices.get=function(){return this._structArray.uint16[this._pos2+21]},r.useRuntimeCollisionCircles.get=function(){return this._structArray.uint16[this._pos2+22]},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+12]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+12]=t},r.textBoxScale.get=function(){return this._structArray.float32[this._pos4+13]},r.textOffset0.get=function(){return this._structArray.float32[this._pos4+14]},r.textOffset1.get=function(){return this._structArray.float32[this._pos4+15]},r.collisionCircleDiameter.get=function(){return this._structArray.float32[this._pos4+16]},Object.defineProperties(e.prototype,r),e}(Xi);Aa.prototype.size=68;var Ma=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new Aa(this,t)},e}(pa);ni("SymbolInstanceArray",Ma);var Sa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getoffsetX=function(t){return this.float32[1*t+0]},e}(da);ni("GlyphOffsetArray",Sa);var Ea=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getx=function(t){return this.int16[3*t+0]},e.prototype.gety=function(t){return this.int16[3*t+1]},e.prototype.gettileUnitDistanceFromAnchor=function(t){return this.int16[3*t+2]},e}(va);ni("SymbolLineVertexArray",Ea);var La=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0}};return r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+0]},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+3]},Object.defineProperties(e.prototype,r),e}(Xi);La.prototype.size=8;var Ca=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new La(this,t)},e}(ga);ni("FeatureIndexArray",Ca);var Pa=Ki([{name:"a_pos",components:2,type:"Int16"}],4).members,Oa=function(t){void 0===t&&(t=[]),this.segments=t};function Ia(t,e){return 256*(t=u(Math.floor(t),0,255))+u(Math.floor(e),0,255)}Oa.prototype.prepareSegment=function(t,e,r,n){var i=this.segments[this.segments.length-1];return t>Oa.MAX_VERTEX_ARRAY_LENGTH&&w("Max vertices per segment is "+Oa.MAX_VERTEX_ARRAY_LENGTH+": bucket requested "+t),(!i||i.vertexLength+t>Oa.MAX_VERTEX_ARRAY_LENGTH||i.sortKey!==n)&&(i={vertexOffset:e.length,primitiveOffset:r.length,vertexLength:0,primitiveLength:0},void 0!==n&&(i.sortKey=n),this.segments.push(i)),i},Oa.prototype.get=function(){return this.segments},Oa.prototype.destroy=function(){for(var t=0,e=this.segments;t<e.length;t+=1){var r=e[t];for(var n in r.vaos)r.vaos[n].destroy()}},Oa.simpleSegment=function(t,e,r,n){return new Oa([{vertexOffset:t,primitiveOffset:e,vertexLength:r,primitiveLength:n,vaos:{},sortKey:0}])},Oa.MAX_VERTEX_ARRAY_LENGTH=Math.pow(2,16)-1,ni("SegmentVector",Oa);var Da=Ki([{name:"a_pattern_from",components:4,type:"Uint16"},{name:"a_pattern_to",components:4,type:"Uint16"},{name:"a_pixel_ratio_from",components:1,type:"Uint8"},{name:"a_pixel_ratio_to",components:1,type:"Uint8"}]),za=e((function(t){t.exports=function(t,e){var r,n,i,a,o,s,l,u;for(r=3&t.length,n=t.length-r,i=e,o=3432918353,s=461845907,u=0;u<n;)l=255&t.charCodeAt(u)|(255&t.charCodeAt(++u))<<8|(255&t.charCodeAt(++u))<<16|(255&t.charCodeAt(++u))<<24,++u,i=27492+(65535&(a=5*(65535&(i=(i^=l=(65535&(l=(l=(65535&l)*o+(((l>>>16)*o&65535)<<16)&4294967295)<<15|l>>>17))*s+(((l>>>16)*s&65535)<<16)&4294967295)<<13|i>>>19))+((5*(i>>>16)&65535)<<16)&4294967295))+((58964+(a>>>16)&65535)<<16);switch(l=0,r){case 3:l^=(255&t.charCodeAt(u+2))<<16;case 2:l^=(255&t.charCodeAt(u+1))<<8;case 1:i^=l=(65535&(l=(l=(65535&(l^=255&t.charCodeAt(u)))*o+(((l>>>16)*o&65535)<<16)&4294967295)<<15|l>>>17))*s+(((l>>>16)*s&65535)<<16)&4294967295}return i^=t.length,i=2246822507*(65535&(i^=i>>>16))+((2246822507*(i>>>16)&65535)<<16)&4294967295,i=3266489909*(65535&(i^=i>>>13))+((3266489909*(i>>>16)&65535)<<16)&4294967295,(i^=i>>>16)>>>0}})),Ra=e((function(t){t.exports=function(t,e){for(var r,n=t.length,i=e^n,a=0;n>=4;)r=1540483477*(65535&(r=255&t.charCodeAt(a)|(255&t.charCodeAt(++a))<<8|(255&t.charCodeAt(++a))<<16|(255&t.charCodeAt(++a))<<24))+((1540483477*(r>>>16)&65535)<<16),i=1540483477*(65535&i)+((1540483477*(i>>>16)&65535)<<16)^(r=1540483477*(65535&(r^=r>>>24))+((1540483477*(r>>>16)&65535)<<16)),n-=4,++a;switch(n){case 3:i^=(255&t.charCodeAt(a+2))<<16;case 2:i^=(255&t.charCodeAt(a+1))<<8;case 1:i=1540483477*(65535&(i^=255&t.charCodeAt(a)))+((1540483477*(i>>>16)&65535)<<16)}return i=1540483477*(65535&(i^=i>>>13))+((1540483477*(i>>>16)&65535)<<16),(i^=i>>>15)>>>0}})),Fa=za,Ba=za,Na=Ra;Fa.murmur3=Ba,Fa.murmur2=Na;var ja=function(){this.ids=[],this.positions=[],this.indexed=!1};ja.prototype.add=function(t,e,r,n){this.ids.push(Va(t)),this.positions.push(e,r,n)},ja.prototype.getPositions=function(t){for(var e=Va(t),r=0,n=this.ids.length-1;r<n;){var i=r+n>>1;this.ids[i]>=e?n=i:r=i+1}for(var a=[];this.ids[r]===e;){var o=this.positions[3*r],s=this.positions[3*r+1],l=this.positions[3*r+2];a.push({index:o,start:s,end:l}),r++}return a},ja.serialize=function(t,e){var r=new Float64Array(t.ids),n=new Uint32Array(t.positions);return Ha(r,n,0,r.length-1),e&&e.push(r.buffer,n.buffer),{ids:r,positions:n}},ja.deserialize=function(t){var e=new ja;return e.ids=t.ids,e.positions=t.positions,e.indexed=!0,e};var Ua=Math.pow(2,53)-1;function Va(t){var e=+t;return!isNaN(e)&&e<=Ua?e:Fa(String(t))}function Ha(t,e,r,n){for(;r<n;){for(var i=t[r+n>>1],a=r-1,o=n+1;;){do{a++}while(t[a]<i);do{o--}while(t[o]>i);if(a>=o)break;qa(t,a,o),qa(e,3*a,3*o),qa(e,3*a+1,3*o+1),qa(e,3*a+2,3*o+2)}o-r<n-o?(Ha(t,e,r,o),r=o+1):(Ha(t,e,o+1,n),n=o)}}function qa(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}ni("FeaturePositionMap",ja);var Ga=function(t,e){this.gl=t.gl,this.location=e},Za=function(t){function e(e,r){t.call(this,e,r),this.current=0}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1i(this.location,t))},e}(Ga),Ya=function(t){function e(e,r){t.call(this,e,r),this.current=0}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1f(this.location,t))},e}(Ga),Wa=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]||(this.current=t,this.gl.uniform2f(this.location,t[0],t[1]))},e}(Ga),Xa=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]||(this.current=t,this.gl.uniform3f(this.location,t[0],t[1],t[2]))},e}(Ga),Ja=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0,0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]&&t[3]===this.current[3]||(this.current=t,this.gl.uniform4f(this.location,t[0],t[1],t[2],t[3]))},e}(Ga),Ka=function(t){function e(e,r){t.call(this,e,r),this.current=oe.transparent}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t.r===this.current.r&&t.g===this.current.g&&t.b===this.current.b&&t.a===this.current.a||(this.current=t,this.gl.uniform4f(this.location,t.r,t.g,t.b,t.a))},e}(Ga),$a=new Float32Array(16),Qa=function(t){function e(e,r){t.call(this,e,r),this.current=$a}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){if(t[12]!==this.current[12]||t[0]!==this.current[0])return this.current=t,void this.gl.uniformMatrix4fv(this.location,!1,t);for(var e=1;e<16;e++)if(t[e]!==this.current[e]){this.current=t,this.gl.uniformMatrix4fv(this.location,!1,t);break}},e}(Ga);function to(t){return[Ia(255*t.r,255*t.g),Ia(255*t.b,255*t.a)]}var eo=function(t,e,r){this.value=t,this.uniformNames=e.map((function(t){return"u_"+t})),this.type=r};eo.prototype.setUniform=function(t,e,r){t.set(r.constantOr(this.value))},eo.prototype.getBinding=function(t,e,r){return"color"===this.type?new Ka(t,e):new Ya(t,e)};var ro=function(t,e){this.uniformNames=e.map((function(t){return"u_"+t})),this.patternFrom=null,this.patternTo=null,this.pixelRatioFrom=1,this.pixelRatioTo=1};ro.prototype.setConstantPatternPositions=function(t,e){this.pixelRatioFrom=e.pixelRatio,this.pixelRatioTo=t.pixelRatio,this.patternFrom=e.tlbr,this.patternTo=t.tlbr},ro.prototype.setUniform=function(t,e,r,n){var i="u_pattern_to"===n?this.patternTo:"u_pattern_from"===n?this.patternFrom:"u_pixel_ratio_to"===n?this.pixelRatioTo:"u_pixel_ratio_from"===n?this.pixelRatioFrom:null;i&&t.set(i)},ro.prototype.getBinding=function(t,e,r){return"u_pattern"===r.substr(0,9)?new Ja(t,e):new Ya(t,e)};var no=function(t,e,r,n){this.expression=t,this.type=r,this.maxValue=0,this.paintVertexAttributes=e.map((function(t){return{name:"a_"+t,type:"Float32",components:"color"===r?2:1,offset:0}})),this.paintVertexArray=new n};no.prototype.populatePaintArray=function(t,e,r,n,i){var a=this.paintVertexArray.length,o=this.expression.evaluate(new Pi(0),e,{},n,[],i);this.paintVertexArray.resize(t),this._setPaintValue(a,t,o)},no.prototype.updatePaintArray=function(t,e,r,n){var i=this.expression.evaluate({zoom:0},r,n);this._setPaintValue(t,e,i)},no.prototype._setPaintValue=function(t,e,r){if("color"===this.type)for(var n=to(r),i=t;i<e;i++)this.paintVertexArray.emplace(i,n[0],n[1]);else{for(var a=t;a<e;a++)this.paintVertexArray.emplace(a,r);this.maxValue=Math.max(this.maxValue,Math.abs(r))}},no.prototype.upload=function(t){this.paintVertexArray&&this.paintVertexArray.arrayBuffer&&(this.paintVertexBuffer&&this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},no.prototype.destroy=function(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()};var io=function(t,e,r,n,i,a){this.expression=t,this.uniformNames=e.map((function(t){return"u_"+t+"_t"})),this.type=r,this.useIntegerZoom=n,this.zoom=i,this.maxValue=0,this.paintVertexAttributes=e.map((function(t){return{name:"a_"+t,type:"Float32",components:"color"===r?4:2,offset:0}})),this.paintVertexArray=new a};io.prototype.populatePaintArray=function(t,e,r,n,i){var a=this.expression.evaluate(new Pi(this.zoom),e,{},n,[],i),o=this.expression.evaluate(new Pi(this.zoom+1),e,{},n,[],i),s=this.paintVertexArray.length;this.paintVertexArray.resize(t),this._setPaintValue(s,t,a,o)},io.prototype.updatePaintArray=function(t,e,r,n){var i=this.expression.evaluate({zoom:this.zoom},r,n),a=this.expression.evaluate({zoom:this.zoom+1},r,n);this._setPaintValue(t,e,i,a)},io.prototype._setPaintValue=function(t,e,r,n){if("color"===this.type)for(var i=to(r),a=to(n),o=t;o<e;o++)this.paintVertexArray.emplace(o,i[0],i[1],a[0],a[1]);else{for(var s=t;s<e;s++)this.paintVertexArray.emplace(s,r,n);this.maxValue=Math.max(this.maxValue,Math.abs(r),Math.abs(n))}},io.prototype.upload=function(t){this.paintVertexArray&&this.paintVertexArray.arrayBuffer&&(this.paintVertexBuffer&&this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},io.prototype.destroy=function(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()},io.prototype.setUniform=function(t,e){var r=this.useIntegerZoom?Math.floor(e.zoom):e.zoom,n=u(this.expression.interpolationFactor(r,this.zoom,this.zoom+1),0,1);t.set(n)},io.prototype.getBinding=function(t,e,r){return new Ya(t,e)};var ao=function(t,e,r,n,i,a){this.expression=t,this.type=e,this.useIntegerZoom=r,this.zoom=n,this.layerId=a,this.zoomInPaintVertexArray=new i,this.zoomOutPaintVertexArray=new i};ao.prototype.populatePaintArray=function(t,e,r){var n=this.zoomInPaintVertexArray.length;this.zoomInPaintVertexArray.resize(t),this.zoomOutPaintVertexArray.resize(t),this._setPaintValues(n,t,e.patterns&&e.patterns[this.layerId],r)},ao.prototype.updatePaintArray=function(t,e,r,n,i){this._setPaintValues(t,e,r.patterns&&r.patterns[this.layerId],i)},ao.prototype._setPaintValues=function(t,e,r,n){if(n&&r){var i=r.min,a=r.mid,o=r.max,s=n[i],l=n[a],u=n[o];if(s&&l&&u)for(var c=t;c<e;c++)this.zoomInPaintVertexArray.emplace(c,l.tl[0],l.tl[1],l.br[0],l.br[1],s.tl[0],s.tl[1],s.br[0],s.br[1],l.pixelRatio,s.pixelRatio),this.zoomOutPaintVertexArray.emplace(c,l.tl[0],l.tl[1],l.br[0],l.br[1],u.tl[0],u.tl[1],u.br[0],u.br[1],l.pixelRatio,u.pixelRatio)}},ao.prototype.upload=function(t){this.zoomInPaintVertexArray&&this.zoomInPaintVertexArray.arrayBuffer&&this.zoomOutPaintVertexArray&&this.zoomOutPaintVertexArray.arrayBuffer&&(this.zoomInPaintVertexBuffer=t.createVertexBuffer(this.zoomInPaintVertexArray,Da.members,this.expression.isStateDependent),this.zoomOutPaintVertexBuffer=t.createVertexBuffer(this.zoomOutPaintVertexArray,Da.members,this.expression.isStateDependent))},ao.prototype.destroy=function(){this.zoomOutPaintVertexBuffer&&this.zoomOutPaintVertexBuffer.destroy(),this.zoomInPaintVertexBuffer&&this.zoomInPaintVertexBuffer.destroy()};var oo=function(t,e,r,n){this.binders={},this.layoutAttributes=n,this._buffers=[];var i=[];for(var a in t.paint._values)if(r(a)){var o=t.paint.get(a);if(o instanceof Bi&&Yr(o.property.specification)){var s=lo(a,t.type),l=o.value,u=o.property.specification.type,c=o.property.useIntegerZoom,f=o.property.specification["property-type"],h="cross-faded"===f||"cross-faded-data-driven"===f;if("constant"===l.kind)this.binders[a]=h?new ro(l.value,s):new eo(l.value,s,u),i.push("/u_"+a);else if("source"===l.kind||h){var p=uo(a,u,"source");this.binders[a]=h?new ao(l,u,c,e,p,t.id):new no(l,s,u,p),i.push("/a_"+a)}else{var d=uo(a,u,"composite");this.binders[a]=new io(l,s,u,c,e,d),i.push("/z_"+a)}}}this.cacheKey=i.sort().join("")};oo.prototype.getMaxValue=function(t){var e=this.binders[t];return e instanceof no||e instanceof io?e.maxValue:0},oo.prototype.populatePaintArrays=function(t,e,r,n,i){for(var a in this.binders){var o=this.binders[a];(o instanceof no||o instanceof io||o instanceof ao)&&o.populatePaintArray(t,e,r,n,i)}},oo.prototype.setConstantPatternPositions=function(t,e){for(var r in this.binders){var n=this.binders[r];n instanceof ro&&n.setConstantPatternPositions(t,e)}},oo.prototype.updatePaintArrays=function(t,e,r,n,i){var a=!1;for(var o in t)for(var s=0,l=e.getPositions(o);s<l.length;s+=1){var u=l[s],c=r.feature(u.index);for(var f in this.binders){var h=this.binders[f];if((h instanceof no||h instanceof io||h instanceof ao)&&!0===h.expression.isStateDependent){var p=n.paint.get(f);h.expression=p.value,h.updatePaintArray(u.start,u.end,c,t[o],i),a=!0}}}return a},oo.prototype.defines=function(){var t=[];for(var e in this.binders){var r=this.binders[e];(r instanceof eo||r instanceof ro)&&t.push.apply(t,r.uniformNames.map((function(t){return"#define HAS_UNIFORM_"+t})))}return t},oo.prototype.getPaintVertexBuffers=function(){return this._buffers},oo.prototype.getUniforms=function(t,e){var r=[];for(var n in this.binders){var i=this.binders[n];if(i instanceof eo||i instanceof ro||i instanceof io)for(var a=0,o=i.uniformNames;a<o.length;a+=1){var s=o[a];if(e[s]){var l=i.getBinding(t,e[s],s);r.push({name:s,property:n,binding:l})}}}return r},oo.prototype.setUniforms=function(t,e,r,n){for(var i=0,a=e;i<a.length;i+=1){var o=a[i],s=o.name,l=o.property,u=o.binding;this.binders[l].setUniform(u,n,r.get(l),s)}},oo.prototype.updatePaintBuffers=function(t){for(var e in this._buffers=[],this.binders){var r=this.binders[e];if(t&&r instanceof ao){var n=2===t.fromScale?r.zoomInPaintVertexBuffer:r.zoomOutPaintVertexBuffer;n&&this._buffers.push(n)}else(r instanceof no||r instanceof io)&&r.paintVertexBuffer&&this._buffers.push(r.paintVertexBuffer)}},oo.prototype.upload=function(t){for(var e in this.binders){var r=this.binders[e];(r instanceof no||r instanceof io||r instanceof ao)&&r.upload(t)}this.updatePaintBuffers()},oo.prototype.destroy=function(){for(var t in this.binders){var e=this.binders[t];(e instanceof no||e instanceof io||e instanceof ao)&&e.destroy()}};var so=function(t,e,r,n){void 0===n&&(n=function(){return!0}),this.programConfigurations={};for(var i=0,a=e;i<a.length;i+=1){var o=a[i];this.programConfigurations[o.id]=new oo(o,r,n,t)}this.needsUpload=!1,this._featureMap=new ja,this._bufferOffset=0};function lo(t,e){return{"text-opacity":["opacity"],"icon-opacity":["opacity"],"text-color":["fill_color"],"icon-color":["fill_color"],"text-halo-color":["halo_color"],"icon-halo-color":["halo_color"],"text-halo-blur":["halo_blur"],"icon-halo-blur":["halo_blur"],"text-halo-width":["halo_width"],"icon-halo-width":["halo_width"],"line-gap-width":["gapwidth"],"line-pattern":["pattern_to","pattern_from","pixel_ratio_to","pixel_ratio_from"],"fill-pattern":["pattern_to","pattern_from","pixel_ratio_to","pixel_ratio_from"],"fill-extrusion-pattern":["pattern_to","pattern_from","pixel_ratio_to","pixel_ratio_from"]}[t]||[t.replace(e+"-","").replace(/-/g,"_")]}function uo(t,e,r){var n={color:{source:xa,composite:ba},number:{source:da,composite:xa}},i=function(t){return{"line-pattern":{source:na,composite:na},"fill-pattern":{source:na,composite:na},"fill-extrusion-pattern":{source:na,composite:na}}[t]}(t);return i&&i[r]||n[e][r]}so.prototype.populatePaintArrays=function(t,e,r,n,i,a){for(var o in this.programConfigurations)this.programConfigurations[o].populatePaintArrays(t,e,n,i,a);void 0!==e.id&&this._featureMap.add(e.id,r,this._bufferOffset,t),this._bufferOffset=t,this.needsUpload=!0},so.prototype.updatePaintArrays=function(t,e,r,n){for(var i=0,a=r;i<a.length;i+=1){var o=a[i];this.needsUpload=this.programConfigurations[o.id].updatePaintArrays(t,this._featureMap,e,o,n)||this.needsUpload}},so.prototype.get=function(t){return this.programConfigurations[t]},so.prototype.upload=function(t){if(this.needsUpload){for(var e in this.programConfigurations)this.programConfigurations[e].upload(t);this.needsUpload=!1}},so.prototype.destroy=function(){for(var t in this.programConfigurations)this.programConfigurations[t].destroy()},ni("ConstantBinder",eo),ni("CrossFadedConstantBinder",ro),ni("SourceExpressionBinder",no),ni("CrossFadedCompositeBinder",ao),ni("CompositeExpressionBinder",io),ni("ProgramConfiguration",oo,{omit:["_buffers"]}),ni("ProgramConfigurationSet",so);var co=8192;var fo,ho=(fo=15,{min:-1*Math.pow(2,fo-1),max:Math.pow(2,fo-1)-1});function po(t){for(var e=co/t.extent,r=t.loadGeometry(),n=0;n<r.length;n++)for(var i=r[n],a=0;a<i.length;a++){var o=i[a];o.x=Math.round(o.x*e),o.y=Math.round(o.y*e),(o.x<ho.min||o.x>ho.max||o.y<ho.min||o.y>ho.max)&&(w("Geometry exceeds allowed extent, reduce your vector tile buffer size"),o.x=u(o.x,ho.min,ho.max),o.y=u(o.y,ho.min,ho.max))}return r}function vo(t,e,r,n,i){t.emplaceBack(2*e+(n+1)/2,2*r+(i+1)/2)}var go=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new Qi,this.indexArray=new fa,this.segments=new Oa,this.programConfigurations=new so(Pa,t.layers,t.zoom),this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};function yo(t,e){for(var r=0;r<t.length;r++)if(Mo(e,t[r]))return!0;for(var n=0;n<e.length;n++)if(Mo(t,e[n]))return!0;return!!_o(t,e)}function mo(t,e,r){return!!Mo(t,e)||!!To(e,t,r)}function xo(t,e){if(1===t.length)return Ao(e,t[0]);for(var r=0;r<e.length;r++)for(var n=e[r],i=0;i<n.length;i++)if(Mo(t,n[i]))return!0;for(var a=0;a<t.length;a++)if(Ao(e,t[a]))return!0;for(var o=0;o<e.length;o++)if(_o(t,e[o]))return!0;return!1}function bo(t,e,r){if(t.length>1){if(_o(t,e))return!0;for(var n=0;n<e.length;n++)if(To(e[n],t,r))return!0}for(var i=0;i<t.length;i++)if(To(t[i],e,r))return!0;return!1}function _o(t,e){if(0===t.length||0===e.length)return!1;for(var r=0;r<t.length-1;r++)for(var n=t[r],i=t[r+1],a=0;a<e.length-1;a++)if(wo(n,i,e[a],e[a+1]))return!0;return!1}function wo(t,e,r,n){return T(t,r,n)!==T(e,r,n)&&T(t,e,r)!==T(t,e,n)}function To(t,e,r){var n=r*r;if(1===e.length)return t.distSqr(e[0])<n;for(var i=1;i<e.length;i++)if(ko(t,e[i-1],e[i])<n)return!0;return!1}function ko(t,e,r){var n=e.distSqr(r);if(0===n)return t.distSqr(e);var i=((t.x-e.x)*(r.x-e.x)+(t.y-e.y)*(r.y-e.y))/n;return i<0?t.distSqr(e):i>1?t.distSqr(r):t.distSqr(r.sub(e)._mult(i)._add(e))}function Ao(t,e){for(var r,n,i,a=!1,o=0;o<t.length;o++)for(var s=0,l=(r=t[o]).length-1;s<r.length;l=s++)n=r[s],i=r[l],n.y>e.y!=i.y>e.y&&e.x<(i.x-n.x)*(e.y-n.y)/(i.y-n.y)+n.x&&(a=!a);return a}function Mo(t,e){for(var r=!1,n=0,i=t.length-1;n<t.length;i=n++){var a=t[n],o=t[i];a.y>e.y!=o.y>e.y&&e.x<(o.x-a.x)*(e.y-a.y)/(o.y-a.y)+a.x&&(r=!r)}return r}function So(t,e,r){var n=r[0],i=r[2];if(t.x<n.x&&e.x<n.x||t.x>i.x&&e.x>i.x||t.y<n.y&&e.y<n.y||t.y>i.y&&e.y>i.y)return!1;var a=T(t,e,r[0]);return a!==T(t,e,r[1])||a!==T(t,e,r[2])||a!==T(t,e,r[3])}function Eo(t,e,r){var n=e.paint.get(t).value;return"constant"===n.kind?n.value:r.programConfigurations.get(e.id).getMaxValue(t)}function Lo(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function Co(t,e,r,n,i){if(!e[0]&&!e[1])return t;var o=a.convert(e)._mult(i);"viewport"===r&&o._rotate(-n);for(var s=[],l=0;l<t.length;l++){var u=t[l];s.push(u.sub(o))}return s}go.prototype.populate=function(t,e,r){var n=this.layers[0],i=[],a=null;"circle"===n.type&&(a=n.layout.get("circle-sort-key"));for(var o=0,s=t;o<s.length;o+=1){var l=s[o],u=l.feature,c=l.id,f=l.index,h=l.sourceLayerIndex,p=this.layers[0]._featureFilter.needGeometry,d={type:u.type,id:c,properties:u.properties,geometry:p?po(u):[]};if(this.layers[0]._featureFilter.filter(new Pi(this.zoom),d,r)){p||(d.geometry=po(u));var v=a?a.evaluate(d,{},r):void 0,g={id:c,properties:u.properties,type:u.type,sourceLayerIndex:h,index:f,geometry:d.geometry,patterns:{},sortKey:v};i.push(g)}}a&&i.sort((function(t,e){return t.sortKey-e.sortKey}));for(var y=0,m=i;y<m.length;y+=1){var x=m[y],b=x,_=b.geometry,w=b.index,T=b.sourceLayerIndex,k=t[w].feature;this.addFeature(x,_,w,r),e.featureIndex.insert(k,_,w,T,this.index)}},go.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},go.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},go.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},go.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Pa),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},go.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},go.prototype.addFeature=function(t,e,r,n){for(var i=0,a=e;i<a.length;i+=1)for(var o=0,s=a[i];o<s.length;o+=1){var l=s[o],u=l.x,c=l.y;if(!(u<0||u>=co||c<0||c>=co)){var f=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray,t.sortKey),h=f.vertexLength;vo(this.layoutVertexArray,u,c,-1,-1),vo(this.layoutVertexArray,u,c,1,-1),vo(this.layoutVertexArray,u,c,1,1),vo(this.layoutVertexArray,u,c,-1,1),this.indexArray.emplaceBack(h,h+1,h+2),this.indexArray.emplaceBack(h,h+3,h+2),f.vertexLength+=4,f.primitiveLength+=2}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{},n)},ni("CircleBucket",go,{omit:["layers"]});var Po=new Gi({"circle-sort-key":new Ui(Dt.layout_circle["circle-sort-key"])}),Oo={paint:new Gi({"circle-radius":new Ui(Dt.paint_circle["circle-radius"]),"circle-color":new Ui(Dt.paint_circle["circle-color"]),"circle-blur":new Ui(Dt.paint_circle["circle-blur"]),"circle-opacity":new Ui(Dt.paint_circle["circle-opacity"]),"circle-translate":new ji(Dt.paint_circle["circle-translate"]),"circle-translate-anchor":new ji(Dt.paint_circle["circle-translate-anchor"]),"circle-pitch-scale":new ji(Dt.paint_circle["circle-pitch-scale"]),"circle-pitch-alignment":new ji(Dt.paint_circle["circle-pitch-alignment"]),"circle-stroke-width":new Ui(Dt.paint_circle["circle-stroke-width"]),"circle-stroke-color":new Ui(Dt.paint_circle["circle-stroke-color"]),"circle-stroke-opacity":new Ui(Dt.paint_circle["circle-stroke-opacity"])}),layout:Po},Io="undefined"!=typeof Float32Array?Float32Array:Array;function Do(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function zo(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],v=e[12],g=e[13],y=e[14],m=e[15],x=r[0],b=r[1],_=r[2],w=r[3];return t[0]=x*n+b*s+_*f+w*v,t[1]=x*i+b*l+_*h+w*g,t[2]=x*a+b*u+_*p+w*y,t[3]=x*o+b*c+_*d+w*m,x=r[4],b=r[5],_=r[6],w=r[7],t[4]=x*n+b*s+_*f+w*v,t[5]=x*i+b*l+_*h+w*g,t[6]=x*a+b*u+_*p+w*y,t[7]=x*o+b*c+_*d+w*m,x=r[8],b=r[9],_=r[10],w=r[11],t[8]=x*n+b*s+_*f+w*v,t[9]=x*i+b*l+_*h+w*g,t[10]=x*a+b*u+_*p+w*y,t[11]=x*o+b*c+_*d+w*m,x=r[12],b=r[13],_=r[14],w=r[15],t[12]=x*n+b*s+_*f+w*v,t[13]=x*i+b*l+_*h+w*g,t[14]=x*a+b*u+_*p+w*y,t[15]=x*o+b*c+_*d+w*m,t}Math.hypot||(Math.hypot=function(){for(var t=arguments,e=0,r=arguments.length;r--;)e+=t[r]*t[r];return Math.sqrt(e)});var Ro=zo;var Fo,Bo=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t};function No(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t}Fo=new Io(3),Io!=Float32Array&&(Fo[0]=0,Fo[1]=0,Fo[2]=0),function(){var t=new Io(4);Io!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0)}();var jo=function(t){var e=t[0],r=t[1];return e*e+r*r},Uo=(function(){var t=new Io(2);Io!=Float32Array&&(t[0]=0,t[1]=0)}(),function(t){function e(e){t.call(this,e,Oo)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new go(t)},e.prototype.queryRadius=function(t){var e=t;return Eo("circle-radius",this,e)+Eo("circle-stroke-width",this,e)+Lo(this.paint.get("circle-translate"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,a,o,s){for(var l=Co(t,this.paint.get("circle-translate"),this.paint.get("circle-translate-anchor"),a.angle,o),u=this.paint.get("circle-radius").evaluate(e,r)+this.paint.get("circle-stroke-width").evaluate(e,r),c="map"===this.paint.get("circle-pitch-alignment"),f=c?l:function(t,e){return t.map((function(t){return Vo(t,e)}))}(l,s),h=c?u*o:u,p=0,d=n;p<d.length;p+=1)for(var v=0,g=d[p];v<g.length;v+=1){var y=g[v],m=c?y:Vo(y,s),x=h,b=No([],[y.x,y.y,0,1],s);if("viewport"===this.paint.get("circle-pitch-scale")&&"map"===this.paint.get("circle-pitch-alignment")?x*=b[3]/a.cameraToCenterDistance:"map"===this.paint.get("circle-pitch-scale")&&"viewport"===this.paint.get("circle-pitch-alignment")&&(x*=a.cameraToCenterDistance/b[3]),mo(f,m,x))return!0}return!1},e}(Yi));function Vo(t,e){var r=No([],[t.x,t.y,0,1],e);return new a(r[0]/r[3],r[1]/r[3])}var Ho=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(go);function qo(t,e,r,n){var i=e.width,a=e.height;if(n){if(n instanceof Uint8ClampedArray)n=new Uint8Array(n.buffer);else if(n.length!==i*a*r)throw new RangeError("mismatched image size")}else n=new Uint8Array(i*a*r);return t.width=i,t.height=a,t.data=n,t}function Go(t,e,r){var n=e.width,i=e.height;if(n!==t.width||i!==t.height){var a=qo({},{width:n,height:i},r);Zo(t,a,{x:0,y:0},{x:0,y:0},{width:Math.min(t.width,n),height:Math.min(t.height,i)},r),t.width=n,t.height=i,t.data=a.data}}function Zo(t,e,r,n,i,a){if(0===i.width||0===i.height)return e;if(i.width>t.width||i.height>t.height||r.x>t.width-i.width||r.y>t.height-i.height)throw new RangeError("out of range source coordinates for image copy");if(i.width>e.width||i.height>e.height||n.x>e.width-i.width||n.y>e.height-i.height)throw new RangeError("out of range destination coordinates for image copy");for(var o=t.data,s=e.data,l=0;l<i.height;l++)for(var u=((r.y+l)*t.width+r.x)*a,c=((n.y+l)*e.width+n.x)*a,f=0;f<i.width*a;f++)s[c+f]=o[u+f];return e}ni("HeatmapBucket",Ho,{omit:["layers"]});var Yo=function(t,e){qo(this,t,1,e)};Yo.prototype.resize=function(t){Go(this,t,1)},Yo.prototype.clone=function(){return new Yo({width:this.width,height:this.height},new Uint8Array(this.data))},Yo.copy=function(t,e,r,n,i){Zo(t,e,r,n,i,1)};var Wo=function(t,e){qo(this,t,4,e)};Wo.prototype.resize=function(t){Go(this,t,4)},Wo.prototype.replace=function(t,e){e?this.data.set(t):t instanceof Uint8ClampedArray?this.data=new Uint8Array(t.buffer):this.data=t},Wo.prototype.clone=function(){return new Wo({width:this.width,height:this.height},new Uint8Array(this.data))},Wo.copy=function(t,e,r,n,i){Zo(t,e,r,n,i,4)},ni("AlphaImage",Yo),ni("RGBAImage",Wo);var Xo={paint:new Gi({"heatmap-radius":new Ui(Dt.paint_heatmap["heatmap-radius"]),"heatmap-weight":new Ui(Dt.paint_heatmap["heatmap-weight"]),"heatmap-intensity":new ji(Dt.paint_heatmap["heatmap-intensity"]),"heatmap-color":new qi(Dt.paint_heatmap["heatmap-color"]),"heatmap-opacity":new ji(Dt.paint_heatmap["heatmap-opacity"])})};function Jo(t,e){for(var r=new Uint8Array(1024),n={},i=0,a=0;i<256;i++,a+=4){n[e]=i/255;var o=t.evaluate(n);r[a+0]=Math.floor(255*o.r/o.a),r[a+1]=Math.floor(255*o.g/o.a),r[a+2]=Math.floor(255*o.b/o.a),r[a+3]=Math.floor(255*o.a)}return new Wo({width:256,height:1},r)}var Ko=function(t){function e(e){t.call(this,e,Xo),this._updateColorRamp()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new Ho(t)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){"heatmap-color"===t&&this._updateColorRamp()},e.prototype._updateColorRamp=function(){var t=this._transitionablePaint._values["heatmap-color"].value.expression;this.colorRamp=Jo(t,"heatmapDensity"),this.colorRampTexture=null},e.prototype.resize=function(){this.heatmapFbo&&(this.heatmapFbo.destroy(),this.heatmapFbo=null)},e.prototype.queryRadius=function(){return 0},e.prototype.queryIntersectsFeature=function(){return!1},e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get("heatmap-opacity")&&"none"!==this.visibility},e}(Yi),$o={paint:new Gi({"hillshade-illumination-direction":new ji(Dt.paint_hillshade["hillshade-illumination-direction"]),"hillshade-illumination-anchor":new ji(Dt.paint_hillshade["hillshade-illumination-anchor"]),"hillshade-exaggeration":new ji(Dt.paint_hillshade["hillshade-exaggeration"]),"hillshade-shadow-color":new ji(Dt.paint_hillshade["hillshade-shadow-color"]),"hillshade-highlight-color":new ji(Dt.paint_hillshade["hillshade-highlight-color"]),"hillshade-accent-color":new ji(Dt.paint_hillshade["hillshade-accent-color"])})},Qo=function(t){function e(e){t.call(this,e,$o)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get("hillshade-exaggeration")&&"none"!==this.visibility},e}(Yi),ts=Ki([{name:"a_pos",components:2,type:"Int16"}],4).members,es=ns,rs=ns;function ns(t,e,r){r=r||2;var n,i,a,o,s,l,u,c=e&&e.length,f=c?e[0]*r:t.length,h=is(t,0,f,r,!0),p=[];if(!h||h.next===h.prev)return p;if(c&&(h=function(t,e,r,n){var i,a,o,s=[];for(i=0,a=e.length;i<a;i++)(o=is(t,e[i]*n,i<a-1?e[i+1]*n:t.length,n,!1))===o.next&&(o.steiner=!0),s.push(vs(o));for(s.sort(fs),i=0;i<s.length;i++)hs(s[i],r),r=as(r,r.next);return r}(t,e,h,r)),t.length>80*r){n=a=t[0],i=o=t[1];for(var d=r;d<f;d+=r)(s=t[d])<n&&(n=s),(l=t[d+1])<i&&(i=l),s>a&&(a=s),l>o&&(o=l);u=0!==(u=Math.max(a-n,o-i))?1/u:0}return os(h,p,r,n,i,u),p}function is(t,e,r,n,i){var a,o;if(i===Es(t,e,r,n)>0)for(a=e;a<r;a+=n)o=As(a,t[a],t[a+1],o);else for(a=r-n;a>=e;a-=n)o=As(a,t[a],t[a+1],o);return o&&xs(o,o.next)&&(Ms(o),o=o.next),o}function as(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!xs(n,n.next)&&0!==ms(n.prev,n,n.next))n=n.next;else{if(Ms(n),(n=e=n.prev)===n.next)break;r=!0}}while(r||n!==e);return e}function os(t,e,r,n,i,a,o){if(t){!o&&a&&function(t,e,r,n){var i=t;do{null===i.z&&(i.z=ds(i.x,i.y,e,r,n)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,r,n,i,a,o,s,l,u=1;do{for(r=t,t=null,a=null,o=0;r;){for(o++,n=r,s=0,e=0;e<u&&(s++,n=n.nextZ);e++);for(l=u;s>0||l>0&&n;)0!==s&&(0===l||!n||r.z<=n.z)?(i=r,r=r.nextZ,s--):(i=n,n=n.nextZ,l--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;r=n}a.nextZ=null,u*=2}while(o>1)}(i)}(t,n,i,a);for(var s,l,u=t;t.prev!==t.next;)if(s=t.prev,l=t.next,a?ls(t,n,i,a):ss(t))e.push(s.i/r),e.push(t.i/r),e.push(l.i/r),Ms(t),t=l.next,u=l.next;else if((t=l)===u){o?1===o?os(t=us(as(t),e,r),e,r,n,i,a,2):2===o&&cs(t,e,r,n,i,a):os(as(t),e,r,n,i,a,1);break}}}function ss(t){var e=t.prev,r=t,n=t.next;if(ms(e,r,n)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(gs(e.x,e.y,r.x,r.y,n.x,n.y,i.x,i.y)&&ms(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function ls(t,e,r,n){var i=t.prev,a=t,o=t.next;if(ms(i,a,o)>=0)return!1;for(var s=i.x<a.x?i.x<o.x?i.x:o.x:a.x<o.x?a.x:o.x,l=i.y<a.y?i.y<o.y?i.y:o.y:a.y<o.y?a.y:o.y,u=i.x>a.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,c=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,f=ds(s,l,e,r,n),h=ds(u,c,e,r,n),p=t.prevZ,d=t.nextZ;p&&p.z>=f&&d&&d.z<=h;){if(p!==t.prev&&p!==t.next&&gs(i.x,i.y,a.x,a.y,o.x,o.y,p.x,p.y)&&ms(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,d!==t.prev&&d!==t.next&&gs(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&ms(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(;p&&p.z>=f;){if(p!==t.prev&&p!==t.next&&gs(i.x,i.y,a.x,a.y,o.x,o.y,p.x,p.y)&&ms(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;d&&d.z<=h;){if(d!==t.prev&&d!==t.next&&gs(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&ms(d.prev,d,d.next)>=0)return!1;d=d.nextZ}return!0}function us(t,e,r){var n=t;do{var i=n.prev,a=n.next.next;!xs(i,a)&&bs(i,n,n.next,a)&&Ts(i,a)&&Ts(a,i)&&(e.push(i.i/r),e.push(n.i/r),e.push(a.i/r),Ms(n),Ms(n.next),n=t=a),n=n.next}while(n!==t);return as(n)}function cs(t,e,r,n,i,a){var o=t;do{for(var s=o.next.next;s!==o.prev;){if(o.i!==s.i&&ys(o,s)){var l=ks(o,s);return o=as(o,o.next),l=as(l,l.next),os(o,e,r,n,i,a),void os(l,e,r,n,i,a)}s=s.next}o=o.next}while(o!==t)}function fs(t,e){return t.x-e.x}function hs(t,e){if(e=function(t,e){var r,n=e,i=t.x,a=t.y,o=-1/0;do{if(a<=n.y&&a>=n.next.y&&n.next.y!==n.y){var s=n.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=i&&s>o){if(o=s,s===i){if(a===n.y)return n;if(a===n.next.y)return n.next}r=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!r)return null;if(i===o)return r;var l,u=r,c=r.x,f=r.y,h=1/0;n=r;do{i>=n.x&&n.x>=c&&i!==n.x&&gs(a<f?i:o,a,c,f,a<f?o:i,a,n.x,n.y)&&(l=Math.abs(a-n.y)/(i-n.x),Ts(n,t)&&(l<h||l===h&&(n.x>r.x||n.x===r.x&&ps(r,n)))&&(r=n,h=l)),n=n.next}while(n!==u);return r}(t,e)){var r=ks(e,t);as(e,e.next),as(r,r.next)}}function ps(t,e){return ms(t.prev,t,e.prev)<0&&ms(e.next,t,t.next)<0}function ds(t,e,r,n,i){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function vs(t){var e=t,r=t;do{(e.x<r.x||e.x===r.x&&e.y<r.y)&&(r=e),e=e.next}while(e!==t);return r}function gs(t,e,r,n,i,a,o,s){return(i-o)*(e-s)-(t-o)*(a-s)>=0&&(t-o)*(n-s)-(r-o)*(e-s)>=0&&(r-o)*(a-s)-(i-o)*(n-s)>=0}function ys(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&bs(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}(t,e)&&(Ts(t,e)&&Ts(e,t)&&function(t,e){var r=t,n=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{r.y>a!=r.next.y>a&&r.next.y!==r.y&&i<(r.next.x-r.x)*(a-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next}while(r!==t);return n}(t,e)&&(ms(t.prev,t,e.prev)||ms(t,e.prev,e))||xs(t,e)&&ms(t.prev,t,t.next)>0&&ms(e.prev,e,e.next)>0)}function ms(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function xs(t,e){return t.x===e.x&&t.y===e.y}function bs(t,e,r,n){var i=ws(ms(t,e,r)),a=ws(ms(t,e,n)),o=ws(ms(r,n,t)),s=ws(ms(r,n,e));return i!==a&&o!==s||!(0!==i||!_s(t,r,e))||!(0!==a||!_s(t,n,e))||!(0!==o||!_s(r,t,n))||!(0!==s||!_s(r,e,n))}function _s(t,e,r){return e.x<=Math.max(t.x,r.x)&&e.x>=Math.min(t.x,r.x)&&e.y<=Math.max(t.y,r.y)&&e.y>=Math.min(t.y,r.y)}function ws(t){return t>0?1:t<0?-1:0}function Ts(t,e){return ms(t.prev,t,t.next)<0?ms(t,e,t.next)>=0&&ms(t,t.prev,e)>=0:ms(t,e,t.prev)<0||ms(t,t.next,e)<0}function ks(t,e){var r=new Ss(t.i,t.x,t.y),n=new Ss(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,r.next=i,i.prev=r,n.next=r,r.prev=n,a.next=n,n.prev=a,n}function As(t,e,r,n){var i=new Ss(t,e,r);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function Ms(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function Ss(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function Es(t,e,r,n){for(var i=0,a=e,o=r-n;a<r;a+=n)i+=(t[o]-t[a])*(t[a+1]+t[o+1]),o=a;return i}function Ls(t,e,r,n,i){Cs(t,e,r||0,n||t.length-1,i||Os)}function Cs(t,e,r,n,i){for(;n>r;){if(n-r>600){var a=n-r+1,o=e-r+1,s=Math.log(a),l=.5*Math.exp(2*s/3),u=.5*Math.sqrt(s*l*(a-l)/a)*(o-a/2<0?-1:1);Cs(t,e,Math.max(r,Math.floor(e-o*l/a+u)),Math.min(n,Math.floor(e+(a-o)*l/a+u)),i)}var c=t[e],f=r,h=n;for(Ps(t,r,e),i(t[n],c)>0&&Ps(t,r,n);f<h;){for(Ps(t,f,h),f++,h--;i(t[f],c)<0;)f++;for(;i(t[h],c)>0;)h--}0===i(t[r],c)?Ps(t,r,h):Ps(t,++h,n),h<=e&&(r=h+1),e<=h&&(n=h-1)}}function Ps(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function Os(t,e){return t<e?-1:t>e?1:0}function Is(t,e){var r=t.length;if(r<=1)return[t];for(var n,i,a=[],o=0;o<r;o++){var s=k(t[o]);0!==s&&(t[o].area=Math.abs(s),void 0===i&&(i=s<0),i===s<0?(n&&a.push(n),n=[t[o]]):n.push(t[o]))}if(n&&a.push(n),e>1)for(var l=0;l<a.length;l++)a[l].length<=e||(Ls(a[l],e,1,a[l].length-1,Ds),a[l]=a[l].slice(0,e));return a}function Ds(t,e){return e.area-t.area}function zs(t,e,r){for(var n=r.patternDependencies,i=!1,a=0,o=e;a<o.length;a+=1){var s=o[a].paint.get(t+"-pattern");s.isConstant()||(i=!0);var l=s.constantOr(null);l&&(i=!0,n[l.to]=!0,n[l.from]=!0)}return i}function Rs(t,e,r,n,i){for(var a=i.patternDependencies,o=0,s=e;o<s.length;o+=1){var l=s[o],u=l.paint.get(t+"-pattern").value;if("constant"!==u.kind){var c=u.evaluate({zoom:n-1},r,{},i.availableImages),f=u.evaluate({zoom:n},r,{},i.availableImages),h=u.evaluate({zoom:n+1},r,{},i.availableImages);c=c&&c.name?c.name:c,f=f&&f.name?f.name:f,h=h&&h.name?h.name:h,a[c]=!0,a[f]=!0,a[h]=!0,r.patterns[l.id]={min:c,mid:f,max:h}}}return r}ns.deviation=function(t,e,r,n){var i=e&&e.length,a=i?e[0]*r:t.length,o=Math.abs(Es(t,0,a,r));if(i)for(var s=0,l=e.length;s<l;s++){var u=e[s]*r,c=s<l-1?e[s+1]*r:t.length;o-=Math.abs(Es(t,u,c,r))}var f=0;for(s=0;s<n.length;s+=3){var h=n[s]*r,p=n[s+1]*r,d=n[s+2]*r;f+=Math.abs((t[h]-t[d])*(t[p+1]-t[h+1])-(t[h]-t[p])*(t[d+1]-t[h+1]))}return 0===o&&0===f?0:Math.abs((f-o)/o)},ns.flatten=function(t){for(var e=t[0][0].length,r={vertices:[],holes:[],dimensions:e},n=0,i=0;i<t.length;i++){for(var a=0;a<t[i].length;a++)for(var o=0;o<e;o++)r.vertices.push(t[i][a][o]);i>0&&(n+=t[i-1].length,r.holes.push(n))}return r},es.default=rs;var Fs=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.patternFeatures=[],this.layoutVertexArray=new Qi,this.indexArray=new fa,this.indexArray2=new ya,this.programConfigurations=new so(ts,t.layers,t.zoom),this.segments=new Oa,this.segments2=new Oa,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};Fs.prototype.populate=function(t,e,r){this.hasPattern=zs("fill",this.layers,e);for(var n=this.layers[0].layout.get("fill-sort-key"),i=[],a=0,o=t;a<o.length;a+=1){var s=o[a],l=s.feature,u=s.id,c=s.index,f=s.sourceLayerIndex,h=this.layers[0]._featureFilter.needGeometry,p={type:l.type,id:u,properties:l.properties,geometry:h?po(l):[]};if(this.layers[0]._featureFilter.filter(new Pi(this.zoom),p,r)){h||(p.geometry=po(l));var d=n?n.evaluate(p,{},r,e.availableImages):void 0,v={id:u,properties:l.properties,type:l.type,sourceLayerIndex:f,index:c,geometry:p.geometry,patterns:{},sortKey:d};i.push(v)}}n&&i.sort((function(t,e){return t.sortKey-e.sortKey}));for(var g=0,y=i;g<y.length;g+=1){var m=y[g],x=m,b=x.geometry,_=x.index,w=x.sourceLayerIndex;if(this.hasPattern){var T=Rs("fill",this.layers,m,this.zoom,e);this.patternFeatures.push(T)}else this.addFeature(m,b,_,r,{});var k=t[_].feature;e.featureIndex.insert(k,b,_,w,this.index)}},Fs.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},Fs.prototype.addFeatures=function(t,e,r){for(var n=0,i=this.patternFeatures;n<i.length;n+=1){var a=i[n];this.addFeature(a,a.geometry,a.index,e,r)}},Fs.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},Fs.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},Fs.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,ts),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.indexBuffer2=t.createIndexBuffer(this.indexArray2)),this.programConfigurations.upload(t),this.uploaded=!0},Fs.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.indexBuffer2.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.segments2.destroy())},Fs.prototype.addFeature=function(t,e,r,n,i){for(var a=0,o=Is(e,500);a<o.length;a+=1){for(var s=o[a],l=0,u=0,c=s;u<c.length;u+=1)l+=c[u].length;for(var f=this.segments.prepareSegment(l,this.layoutVertexArray,this.indexArray),h=f.vertexLength,p=[],d=[],v=0,g=s;v<g.length;v+=1){var y=g[v];if(0!==y.length){y!==s[0]&&d.push(p.length/2);var m=this.segments2.prepareSegment(y.length,this.layoutVertexArray,this.indexArray2),x=m.vertexLength;this.layoutVertexArray.emplaceBack(y[0].x,y[0].y),this.indexArray2.emplaceBack(x+y.length-1,x),p.push(y[0].x),p.push(y[0].y);for(var b=1;b<y.length;b++)this.layoutVertexArray.emplaceBack(y[b].x,y[b].y),this.indexArray2.emplaceBack(x+b-1,x+b),p.push(y[b].x),p.push(y[b].y);m.vertexLength+=y.length,m.primitiveLength+=y.length}}for(var _=es(p,d),w=0;w<_.length;w+=3)this.indexArray.emplaceBack(h+_[w],h+_[w+1],h+_[w+2]);f.vertexLength+=l,f.primitiveLength+=_.length/3}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,i,n)},ni("FillBucket",Fs,{omit:["layers","patternFeatures"]});var Bs=new Gi({"fill-sort-key":new Ui(Dt.layout_fill["fill-sort-key"])}),Ns={paint:new Gi({"fill-antialias":new ji(Dt.paint_fill["fill-antialias"]),"fill-opacity":new Ui(Dt.paint_fill["fill-opacity"]),"fill-color":new Ui(Dt.paint_fill["fill-color"]),"fill-outline-color":new Ui(Dt.paint_fill["fill-outline-color"]),"fill-translate":new ji(Dt.paint_fill["fill-translate"]),"fill-translate-anchor":new ji(Dt.paint_fill["fill-translate-anchor"]),"fill-pattern":new Vi(Dt.paint_fill["fill-pattern"])}),layout:Bs},js=function(t){function e(e){t.call(this,e,Ns)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.recalculate=function(e,r){t.prototype.recalculate.call(this,e,r);var n=this.paint._values["fill-outline-color"];"constant"===n.value.kind&&void 0===n.value.value&&(this.paint._values["fill-outline-color"]=this.paint._values["fill-color"])},e.prototype.createBucket=function(t){return new Fs(t)},e.prototype.queryRadius=function(){return Lo(this.paint.get("fill-translate"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,a,o){return xo(Co(t,this.paint.get("fill-translate"),this.paint.get("fill-translate-anchor"),a.angle,o),n)},e.prototype.isTileClipped=function(){return!0},e}(Yi),Us=Ki([{name:"a_pos",components:2,type:"Int16"},{name:"a_normal_ed",components:4,type:"Int16"}],4).members,Vs=Hs;function Hs(t,e,r,n,i){this.properties={},this.extent=r,this.type=0,this._pbf=t,this._geometry=-1,this._keys=n,this._values=i,t.readFields(qs,this,e)}function qs(t,e,r){1==t?e.id=r.readVarint():2==t?function(t,e){for(var r=t.readVarint()+t.pos;t.pos<r;){var n=e._keys[t.readVarint()],i=e._values[t.readVarint()];e.properties[n]=i}}(r,e):3==t?e.type=r.readVarint():4==t&&(e._geometry=r.pos)}function Gs(t){for(var e,r,n=0,i=0,a=t.length,o=a-1;i<a;o=i++)e=t[i],n+=((r=t[o]).x-e.x)*(e.y+r.y);return n}Hs.types=["Unknown","Point","LineString","Polygon"],Hs.prototype.loadGeometry=function(){var t=this._pbf;t.pos=this._geometry;for(var e,r=t.readVarint()+t.pos,n=1,i=0,o=0,s=0,l=[];t.pos<r;){if(i<=0){var u=t.readVarint();n=7&u,i=u>>3}if(i--,1===n||2===n)o+=t.readSVarint(),s+=t.readSVarint(),1===n&&(e&&l.push(e),e=[]),e.push(new a(o,s));else{if(7!==n)throw new Error("unknown command "+n);e&&e.push(e[0].clone())}}return e&&l.push(e),l},Hs.prototype.bbox=function(){var t=this._pbf;t.pos=this._geometry;for(var e=t.readVarint()+t.pos,r=1,n=0,i=0,a=0,o=1/0,s=-1/0,l=1/0,u=-1/0;t.pos<e;){if(n<=0){var c=t.readVarint();r=7&c,n=c>>3}if(n--,1===r||2===r)(i+=t.readSVarint())<o&&(o=i),i>s&&(s=i),(a+=t.readSVarint())<l&&(l=a),a>u&&(u=a);else if(7!==r)throw new Error("unknown command "+r)}return[o,l,s,u]},Hs.prototype.toGeoJSON=function(t,e,r){var n,i,a=this.extent*Math.pow(2,r),o=this.extent*t,s=this.extent*e,l=this.loadGeometry(),u=Hs.types[this.type];function c(t){for(var e=0;e<t.length;e++){var r=t[e],n=180-360*(r.y+s)/a;t[e]=[360*(r.x+o)/a-180,360/Math.PI*Math.atan(Math.exp(n*Math.PI/180))-90]}}switch(this.type){case 1:var f=[];for(n=0;n<l.length;n++)f[n]=l[n][0];c(l=f);break;case 2:for(n=0;n<l.length;n++)c(l[n]);break;case 3:for(l=function(t){var e=t.length;if(e<=1)return[t];for(var r,n,i=[],a=0;a<e;a++){var o=Gs(t[a]);0!==o&&(void 0===n&&(n=o<0),n===o<0?(r&&i.push(r),r=[t[a]]):r.push(t[a]))}return r&&i.push(r),i}(l),n=0;n<l.length;n++)for(i=0;i<l[n].length;i++)c(l[n][i])}1===l.length?l=l[0]:u="Multi"+u;var h={type:"Feature",geometry:{type:u,coordinates:l},properties:this.properties};return"id"in this&&(h.id=this.id),h};var Zs=Ys;function Ys(t,e){this.version=1,this.name=null,this.extent=4096,this.length=0,this._pbf=t,this._keys=[],this._values=[],this._features=[],t.readFields(Ws,this,e),this.length=this._features.length}function Ws(t,e,r){15===t?e.version=r.readVarint():1===t?e.name=r.readString():5===t?e.extent=r.readVarint():2===t?e._features.push(r.pos):3===t?e._keys.push(r.readString()):4===t&&e._values.push(function(t){for(var e=null,r=t.readVarint()+t.pos;t.pos<r;){var n=t.readVarint()>>3;e=1===n?t.readString():2===n?t.readFloat():3===n?t.readDouble():4===n?t.readVarint64():5===n?t.readVarint():6===n?t.readSVarint():7===n?t.readBoolean():null}return e}(r))}function Xs(t,e,r){if(3===t){var n=new Zs(r,r.readVarint()+r.pos);n.length&&(e[n.name]=n)}}Ys.prototype.feature=function(t){if(t<0||t>=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[t];var e=this._pbf.readVarint()+this._pbf.pos;return new Vs(this._pbf,e,this.extent,this._keys,this._values)};var Js={VectorTile:function(t,e){this.layers=t.readFields(Xs,{},e)},VectorTileFeature:Vs,VectorTileLayer:Zs},Ks=Js.VectorTileFeature.types,$s=Math.pow(2,13);function Qs(t,e,r,n,i,a,o,s){t.emplaceBack(e,r,2*Math.floor(n*$s)+o,i*$s*2,a*$s*2,Math.round(s))}var tl=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new ea,this.indexArray=new fa,this.programConfigurations=new so(Us,t.layers,t.zoom),this.segments=new Oa,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};function el(t,e){return t.x===e.x&&(t.x<0||t.x>co)||t.y===e.y&&(t.y<0||t.y>co)}tl.prototype.populate=function(t,e,r){this.features=[],this.hasPattern=zs("fill-extrusion",this.layers,e);for(var n=0,i=t;n<i.length;n+=1){var a=i[n],o=a.feature,s=a.id,l=a.index,u=a.sourceLayerIndex,c=this.layers[0]._featureFilter.needGeometry,f={type:o.type,id:s,properties:o.properties,geometry:c?po(o):[]};if(this.layers[0]._featureFilter.filter(new Pi(this.zoom),f,r)){var h={id:s,sourceLayerIndex:u,index:l,geometry:c?f.geometry:po(o),properties:o.properties,type:o.type,patterns:{}};void 0!==o.id&&(h.id=o.id),this.hasPattern?this.features.push(Rs("fill-extrusion",this.layers,h,this.zoom,e)):this.addFeature(h,h.geometry,l,r,{}),e.featureIndex.insert(o,h.geometry,l,u,this.index,!0)}}},tl.prototype.addFeatures=function(t,e,r){for(var n=0,i=this.features;n<i.length;n+=1){var a=i[n],o=a.geometry;this.addFeature(a,o,a.index,e,r)}},tl.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},tl.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},tl.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},tl.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Us),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},tl.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},tl.prototype.addFeature=function(t,e,r,n,i){for(var a=0,o=Is(e,500);a<o.length;a+=1){for(var s=o[a],l=0,u=0,c=s;u<c.length;u+=1)l+=c[u].length;for(var f=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray),h=0,p=s;h<p.length;h+=1){var d=p[h];if(0!==d.length&&!((O=d).every((function(t){return t.x<0}))||O.every((function(t){return t.x>co}))||O.every((function(t){return t.y<0}))||O.every((function(t){return t.y>co}))))for(var v=0,g=0;g<d.length;g++){var y=d[g];if(g>=1){var m=d[g-1];if(!el(y,m)){f.vertexLength+4>Oa.MAX_VERTEX_ARRAY_LENGTH&&(f=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray));var x=y.sub(m)._perp()._unit(),b=m.dist(y);v+b>32768&&(v=0),Qs(this.layoutVertexArray,y.x,y.y,x.x,x.y,0,0,v),Qs(this.layoutVertexArray,y.x,y.y,x.x,x.y,0,1,v),v+=b,Qs(this.layoutVertexArray,m.x,m.y,x.x,x.y,0,0,v),Qs(this.layoutVertexArray,m.x,m.y,x.x,x.y,0,1,v);var _=f.vertexLength;this.indexArray.emplaceBack(_,_+2,_+1),this.indexArray.emplaceBack(_+1,_+2,_+3),f.vertexLength+=4,f.primitiveLength+=2}}}}if(f.vertexLength+l>Oa.MAX_VERTEX_ARRAY_LENGTH&&(f=this.segments.prepareSegment(l,this.layoutVertexArray,this.indexArray)),"Polygon"===Ks[t.type]){for(var w=[],T=[],k=f.vertexLength,A=0,M=s;A<M.length;A+=1){var S=M[A];if(0!==S.length){S!==s[0]&&T.push(w.length/2);for(var E=0;E<S.length;E++){var L=S[E];Qs(this.layoutVertexArray,L.x,L.y,0,0,1,1,0),w.push(L.x),w.push(L.y)}}}for(var C=es(w,T),P=0;P<C.length;P+=3)this.indexArray.emplaceBack(k+C[P],k+C[P+2],k+C[P+1]);f.primitiveLength+=C.length/3,f.vertexLength+=l}}var O;this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,i,n)},ni("FillExtrusionBucket",tl,{omit:["layers","features"]});var rl={paint:new Gi({"fill-extrusion-opacity":new ji(Dt["paint_fill-extrusion"]["fill-extrusion-opacity"]),"fill-extrusion-color":new Ui(Dt["paint_fill-extrusion"]["fill-extrusion-color"]),"fill-extrusion-translate":new ji(Dt["paint_fill-extrusion"]["fill-extrusion-translate"]),"fill-extrusion-translate-anchor":new ji(Dt["paint_fill-extrusion"]["fill-extrusion-translate-anchor"]),"fill-extrusion-pattern":new Vi(Dt["paint_fill-extrusion"]["fill-extrusion-pattern"]),"fill-extrusion-height":new Ui(Dt["paint_fill-extrusion"]["fill-extrusion-height"]),"fill-extrusion-base":new Ui(Dt["paint_fill-extrusion"]["fill-extrusion-base"]),"fill-extrusion-vertical-gradient":new ji(Dt["paint_fill-extrusion"]["fill-extrusion-vertical-gradient"])})},nl=function(t){function e(e){t.call(this,e,rl)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new tl(t)},e.prototype.queryRadius=function(){return Lo(this.paint.get("fill-extrusion-translate"))},e.prototype.is3D=function(){return!0},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,o,s,l){var u=Co(t,this.paint.get("fill-extrusion-translate"),this.paint.get("fill-extrusion-translate-anchor"),o.angle,s),c=this.paint.get("fill-extrusion-height").evaluate(e,r),f=this.paint.get("fill-extrusion-base").evaluate(e,r),h=function(t,e,r,n){for(var i=[],o=0,s=t;o<s.length;o+=1){var l=s[o],u=[l.x,l.y,n,1];No(u,u,e),i.push(new a(u[0]/u[3],u[1]/u[3]))}return i}(u,l,0,0),p=function(t,e,r,n){for(var i=[],o=[],s=n[8]*e,l=n[9]*e,u=n[10]*e,c=n[11]*e,f=n[8]*r,h=n[9]*r,p=n[10]*r,d=n[11]*r,v=0,g=t;v<g.length;v+=1){for(var y=[],m=[],x=0,b=g[v];x<b.length;x+=1){var _=b[x],w=_.x,T=_.y,k=n[0]*w+n[4]*T+n[12],A=n[1]*w+n[5]*T+n[13],M=n[2]*w+n[6]*T+n[14],S=n[3]*w+n[7]*T+n[15],E=M+u,L=S+c,C=k+f,P=A+h,O=M+p,I=S+d,D=new a((k+s)/L,(A+l)/L);D.z=E/L,y.push(D);var z=new a(C/I,P/I);z.z=O/I,m.push(z)}i.push(y),o.push(m)}return[i,o]}(n,f,c,l);return function(t,e,r){var n=1/0;xo(r,e)&&(n=al(r,e[0]));for(var i=0;i<e.length;i++)for(var a=e[i],o=t[i],s=0;s<a.length-1;s++){var l=a[s],u=a[s+1],c=o[s],f=[l,u,o[s+1],c,l];yo(r,f)&&(n=Math.min(n,al(r,f)))}return n!==1/0&&n}(p[0],p[1],h)},e}(Yi);function il(t,e){return t.x*e.x+t.y*e.y}function al(t,e){if(1===t.length){for(var r,n=0,i=e[n++];!r||i.equals(r);)if(!(r=e[n++]))return 1/0;for(;n<e.length;n++){var a=e[n],o=t[0],s=r.sub(i),l=a.sub(i),u=o.sub(i),c=il(s,s),f=il(s,l),h=il(l,l),p=il(u,s),d=il(u,l),v=c*h-f*f,g=(h*p-f*d)/v,y=(c*d-f*p)/v,m=1-g-y,x=i.z*m+r.z*g+a.z*y;if(isFinite(x))return x}return 1/0}for(var b=1/0,_=0,w=e;_<w.length;_+=1){var T=w[_];b=Math.min(b,T.z)}return b}var ol=Ki([{name:"a_pos_normal",components:2,type:"Int16"},{name:"a_data",components:4,type:"Uint8"}],4).members,sl=Js.VectorTileFeature.types,ll=Math.cos(Math.PI/180*37.5),ul=Math.pow(2,14)/.5,cl=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.patternFeatures=[],this.layoutVertexArray=new ra,this.indexArray=new fa,this.programConfigurations=new so(ol,t.layers,t.zoom),this.segments=new Oa,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};cl.prototype.populate=function(t,e,r){this.hasPattern=zs("line",this.layers,e);for(var n=this.layers[0].layout.get("line-sort-key"),i=[],a=0,o=t;a<o.length;a+=1){var s=o[a],l=s.feature,u=s.id,c=s.index,f=s.sourceLayerIndex,h=this.layers[0]._featureFilter.needGeometry,p={type:l.type,id:u,properties:l.properties,geometry:h?po(l):[]};if(this.layers[0]._featureFilter.filter(new Pi(this.zoom),p,r)){h||(p.geometry=po(l));var d=n?n.evaluate(p,{},r):void 0,v={id:u,properties:l.properties,type:l.type,sourceLayerIndex:f,index:c,geometry:p.geometry,patterns:{},sortKey:d};i.push(v)}}n&&i.sort((function(t,e){return t.sortKey-e.sortKey}));for(var g=0,y=i;g<y.length;g+=1){var m=y[g],x=m,b=x.geometry,_=x.index,w=x.sourceLayerIndex;if(this.hasPattern){var T=Rs("line",this.layers,m,this.zoom,e);this.patternFeatures.push(T)}else this.addFeature(m,b,_,r,{});var k=t[_].feature;e.featureIndex.insert(k,b,_,w,this.index)}},cl.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},cl.prototype.addFeatures=function(t,e,r){for(var n=0,i=this.patternFeatures;n<i.length;n+=1){var a=i[n];this.addFeature(a,a.geometry,a.index,e,r)}},cl.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},cl.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},cl.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,ol),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},cl.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},cl.prototype.addFeature=function(t,e,r,n,i){for(var a=this.layers[0].layout,o=a.get("line-join").evaluate(t,{}),s=a.get("line-cap"),l=a.get("line-miter-limit"),u=a.get("line-round-limit"),c=0,f=e;c<f.length;c+=1){var h=f[c];this.addLine(h,t,o,s,l,u)}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,i,n)},cl.prototype.addLine=function(t,e,r,n,i,a){if(this.distance=0,this.scaledDistance=0,this.totalDistance=0,e.properties&&e.properties.hasOwnProperty("mapbox_clip_start")&&e.properties.hasOwnProperty("mapbox_clip_end")){this.clipStart=+e.properties.mapbox_clip_start,this.clipEnd=+e.properties.mapbox_clip_end;for(var o=0;o<t.length-1;o++)this.totalDistance+=t[o].dist(t[o+1]);this.updateScaledDistance()}for(var s="Polygon"===sl[e.type],l=t.length;l>=2&&t[l-1].equals(t[l-2]);)l--;for(var u=0;u<l-1&&t[u].equals(t[u+1]);)u++;if(!(l<(s?3:2))){"bevel"===r&&(i=1.05);var c,f=this.overscaling<=16?15*co/(512*this.overscaling):0,h=this.segments.prepareSegment(10*l,this.layoutVertexArray,this.indexArray),p=void 0,d=void 0,v=void 0,g=void 0;this.e1=this.e2=-1,s&&(c=t[l-2],g=t[u].sub(c)._unit()._perp());for(var y=u;y<l;y++)if(!(d=y===l-1?s?t[u+1]:void 0:t[y+1])||!t[y].equals(d)){g&&(v=g),c&&(p=c),c=t[y],g=d?d.sub(c)._unit()._perp():v;var m=(v=v||g).add(g);0===m.x&&0===m.y||m._unit();var x=v.x*g.x+v.y*g.y,b=m.x*g.x+m.y*g.y,_=0!==b?1/b:1/0,w=2*Math.sqrt(2-2*b),T=b<ll&&p&&d,k=v.x*g.y-v.y*g.x>0;if(T&&y>u){var A=c.dist(p);if(A>2*f){var M=c.sub(c.sub(p)._mult(f/A)._round());this.updateDistance(p,M),this.addCurrentVertex(M,v,0,0,h),p=M}}var S=p&&d,E=S?r:s?"butt":n;if(S&&"round"===E&&(_<a?E="miter":_<=2&&(E="fakeround")),"miter"===E&&_>i&&(E="bevel"),"bevel"===E&&(_>2&&(E="flipbevel"),_<i&&(E="miter")),p&&this.updateDistance(p,c),"miter"===E)m._mult(_),this.addCurrentVertex(c,m,0,0,h);else if("flipbevel"===E){if(_>100)m=g.mult(-1);else{var L=_*v.add(g).mag()/v.sub(g).mag();m._perp()._mult(L*(k?-1:1))}this.addCurrentVertex(c,m,0,0,h),this.addCurrentVertex(c,m.mult(-1),0,0,h)}else if("bevel"===E||"fakeround"===E){var C=-Math.sqrt(_*_-1),P=k?C:0,O=k?0:C;if(p&&this.addCurrentVertex(c,v,P,O,h),"fakeround"===E)for(var I=Math.round(180*w/Math.PI/20),D=1;D<I;D++){var z=D/I;if(.5!==z){var R=z-.5;z+=z*R*(z-1)*((1.0904+x*(x*(3.55645-1.43519*x)-3.2452))*R*R+(.848013+x*(.215638*x-1.06021)))}var F=g.sub(v)._mult(z)._add(v)._unit()._mult(k?-1:1);this.addHalfVertex(c,F.x,F.y,!1,k,0,h)}d&&this.addCurrentVertex(c,g,-P,-O,h)}else if("butt"===E)this.addCurrentVertex(c,m,0,0,h);else if("square"===E){var B=p?1:-1;this.addCurrentVertex(c,m,B,B,h)}else"round"===E&&(p&&(this.addCurrentVertex(c,v,0,0,h),this.addCurrentVertex(c,v,1,1,h,!0)),d&&(this.addCurrentVertex(c,g,-1,-1,h,!0),this.addCurrentVertex(c,g,0,0,h)));if(T&&y<l-1){var N=c.dist(d);if(N>2*f){var j=c.add(d.sub(c)._mult(f/N)._round());this.updateDistance(c,j),this.addCurrentVertex(j,g,0,0,h),c=j}}}}},cl.prototype.addCurrentVertex=function(t,e,r,n,i,a){void 0===a&&(a=!1);var o=e.x+e.y*r,s=e.y-e.x*r,l=-e.x+e.y*n,u=-e.y-e.x*n;this.addHalfVertex(t,o,s,a,!1,r,i),this.addHalfVertex(t,l,u,a,!0,-n,i),this.distance>ul/2&&0===this.totalDistance&&(this.distance=0,this.addCurrentVertex(t,e,r,n,i,a))},cl.prototype.addHalfVertex=function(t,e,r,n,i,a,o){var s=t.x,l=t.y,u=.5*this.scaledDistance;this.layoutVertexArray.emplaceBack((s<<1)+(n?1:0),(l<<1)+(i?1:0),Math.round(63*e)+128,Math.round(63*r)+128,1+(0===a?0:a<0?-1:1)|(63&u)<<2,u>>6);var c=o.vertexLength++;this.e1>=0&&this.e2>=0&&(this.indexArray.emplaceBack(this.e1,this.e2,c),o.primitiveLength++),i?this.e2=c:this.e1=c},cl.prototype.updateScaledDistance=function(){this.scaledDistance=this.totalDistance>0?(this.clipStart+(this.clipEnd-this.clipStart)*this.distance/this.totalDistance)*(ul-1):this.distance},cl.prototype.updateDistance=function(t,e){this.distance+=t.dist(e),this.updateScaledDistance()},ni("LineBucket",cl,{omit:["layers","patternFeatures"]});var fl=new Gi({"line-cap":new ji(Dt.layout_line["line-cap"]),"line-join":new Ui(Dt.layout_line["line-join"]),"line-miter-limit":new ji(Dt.layout_line["line-miter-limit"]),"line-round-limit":new ji(Dt.layout_line["line-round-limit"]),"line-sort-key":new Ui(Dt.layout_line["line-sort-key"])}),hl={paint:new Gi({"line-opacity":new Ui(Dt.paint_line["line-opacity"]),"line-color":new Ui(Dt.paint_line["line-color"]),"line-translate":new ji(Dt.paint_line["line-translate"]),"line-translate-anchor":new ji(Dt.paint_line["line-translate-anchor"]),"line-width":new Ui(Dt.paint_line["line-width"]),"line-gap-width":new Ui(Dt.paint_line["line-gap-width"]),"line-offset":new Ui(Dt.paint_line["line-offset"]),"line-blur":new Ui(Dt.paint_line["line-blur"]),"line-dasharray":new Hi(Dt.paint_line["line-dasharray"]),"line-pattern":new Vi(Dt.paint_line["line-pattern"]),"line-gradient":new qi(Dt.paint_line["line-gradient"])}),layout:fl},pl=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.possiblyEvaluate=function(e,r){return r=new Pi(Math.floor(r.zoom),{now:r.now,fadeDuration:r.fadeDuration,zoomHistory:r.zoomHistory,transition:r.transition}),t.prototype.possiblyEvaluate.call(this,e,r)},e.prototype.evaluate=function(e,r,n,i){return r=f({},r,{zoom:Math.floor(r.zoom)}),t.prototype.evaluate.call(this,e,r,n,i)},e}(Ui),dl=new pl(hl.paint.properties["line-width"].specification);dl.useIntegerZoom=!0;var vl=function(t){function e(e){t.call(this,e,hl)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._handleSpecialPaintPropertyUpdate=function(t){"line-gradient"===t&&this._updateGradient()},e.prototype._updateGradient=function(){var t=this._transitionablePaint._values["line-gradient"].value.expression;this.gradient=Jo(t,"lineProgress"),this.gradientTexture=null},e.prototype.recalculate=function(e,r){t.prototype.recalculate.call(this,e,r),this.paint._values["line-floorwidth"]=dl.possiblyEvaluate(this._transitioningPaint._values["line-width"].value,e)},e.prototype.createBucket=function(t){return new cl(t)},e.prototype.queryRadius=function(t){var e=t,r=gl(Eo("line-width",this,e),Eo("line-gap-width",this,e)),n=Eo("line-offset",this,e);return r/2+Math.abs(n)+Lo(this.paint.get("line-translate"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,o,s){var l=Co(t,this.paint.get("line-translate"),this.paint.get("line-translate-anchor"),o.angle,s),u=s/2*gl(this.paint.get("line-width").evaluate(e,r),this.paint.get("line-gap-width").evaluate(e,r)),c=this.paint.get("line-offset").evaluate(e,r);return c&&(n=function(t,e){for(var r=[],n=new a(0,0),i=0;i<t.length;i++){for(var o=t[i],s=[],l=0;l<o.length;l++){var u=o[l-1],c=o[l],f=o[l+1],h=0===l?n:c.sub(u)._unit()._perp(),p=l===o.length-1?n:f.sub(c)._unit()._perp(),d=h._add(p)._unit(),v=d.x*p.x+d.y*p.y;d._mult(1/v),s.push(d._mult(e)._add(c))}r.push(s)}return r}(n,c*s)),function(t,e,r){for(var n=0;n<e.length;n++){var i=e[n];if(t.length>=3)for(var a=0;a<i.length;a++)if(Mo(t,i[a]))return!0;if(bo(t,i,r))return!0}return!1}(l,n,u)},e.prototype.isTileClipped=function(){return!0},e}(Yi);function gl(t,e){return e>0?e+2*t:t}var yl=Ki([{name:"a_pos_offset",components:4,type:"Int16"},{name:"a_data",components:4,type:"Uint16"},{name:"a_pixeloffset",components:4,type:"Int16"}],4),ml=Ki([{name:"a_projected_pos",components:3,type:"Float32"}],4),xl=(Ki([{name:"a_fade_opacity",components:1,type:"Uint32"}],4),Ki([{name:"a_placed",components:2,type:"Uint8"},{name:"a_shift",components:2,type:"Float32"}])),bl=(Ki([{type:"Int16",name:"anchorPointX"},{type:"Int16",name:"anchorPointY"},{type:"Int16",name:"x1"},{type:"Int16",name:"y1"},{type:"Int16",name:"x2"},{type:"Int16",name:"y2"},{type:"Uint32",name:"featureIndex"},{type:"Uint16",name:"sourceLayerIndex"},{type:"Uint16",name:"bucketIndex"}]),Ki([{name:"a_pos",components:2,type:"Int16"},{name:"a_anchor_pos",components:2,type:"Int16"},{name:"a_extrude",components:2,type:"Int16"}],4)),_l=Ki([{name:"a_pos",components:2,type:"Float32"},{name:"a_radius",components:1,type:"Float32"},{name:"a_flags",components:2,type:"Int16"}],4);function wl(t,e,r){return t.sections.forEach((function(t){t.text=function(t,e,r){var n=e.layout.get("text-transform").evaluate(r,{});return"uppercase"===n?t=t.toLocaleUpperCase():"lowercase"===n&&(t=t.toLocaleLowerCase()),Ci.applyArabicShaping&&(t=Ci.applyArabicShaping(t)),t}(t.text,e,r)})),t}Ki([{name:"triangle",components:3,type:"Uint16"}]),Ki([{type:"Int16",name:"anchorX"},{type:"Int16",name:"anchorY"},{type:"Uint16",name:"glyphStartIndex"},{type:"Uint16",name:"numGlyphs"},{type:"Uint32",name:"vertexStartIndex"},{type:"Uint32",name:"lineStartIndex"},{type:"Uint32",name:"lineLength"},{type:"Uint16",name:"segment"},{type:"Uint16",name:"lowerSize"},{type:"Uint16",name:"upperSize"},{type:"Float32",name:"lineOffsetX"},{type:"Float32",name:"lineOffsetY"},{type:"Uint8",name:"writingMode"},{type:"Uint8",name:"placedOrientation"},{type:"Uint8",name:"hidden"},{type:"Uint32",name:"crossTileID"},{type:"Int16",name:"associatedIconIndex"}]),Ki([{type:"Int16",name:"anchorX"},{type:"Int16",name:"anchorY"},{type:"Int16",name:"rightJustifiedTextSymbolIndex"},{type:"Int16",name:"centerJustifiedTextSymbolIndex"},{type:"Int16",name:"leftJustifiedTextSymbolIndex"},{type:"Int16",name:"verticalPlacedTextSymbolIndex"},{type:"Int16",name:"placedIconSymbolIndex"},{type:"Int16",name:"verticalPlacedIconSymbolIndex"},{type:"Uint16",name:"key"},{type:"Uint16",name:"textBoxStartIndex"},{type:"Uint16",name:"textBoxEndIndex"},{type:"Uint16",name:"verticalTextBoxStartIndex"},{type:"Uint16",name:"verticalTextBoxEndIndex"},{type:"Uint16",name:"iconBoxStartIndex"},{type:"Uint16",name:"iconBoxEndIndex"},{type:"Uint16",name:"verticalIconBoxStartIndex"},{type:"Uint16",name:"verticalIconBoxEndIndex"},{type:"Uint16",name:"featureIndex"},{type:"Uint16",name:"numHorizontalGlyphVertices"},{type:"Uint16",name:"numVerticalGlyphVertices"},{type:"Uint16",name:"numIconVertices"},{type:"Uint16",name:"numVerticalIconVertices"},{type:"Uint16",name:"useRuntimeCollisionCircles"},{type:"Uint32",name:"crossTileID"},{type:"Float32",name:"textBoxScale"},{type:"Float32",components:2,name:"textOffset"},{type:"Float32",name:"collisionCircleDiameter"}]),Ki([{type:"Float32",name:"offsetX"}]),Ki([{type:"Int16",name:"x"},{type:"Int16",name:"y"},{type:"Int16",name:"tileUnitDistanceFromAnchor"}]);var Tl={"!":"︕","#":"#",$:"$","%":"%","&":"&","(":"︵",")":"︶","*":"*","+":"+",",":"︐","-":"︲",".":"・","/":"/",":":"︓",";":"︔","<":"︿","=":"=",">":"﹀","?":"︖","@":"@","[":"﹇","\\":"\","]":"﹈","^":"^",_:"︳","`":"`","{":"︷","|":"―","}":"︸","~":"~","¢":"¢","£":"£","¥":"¥","¦":"¦","¬":"¬","¯":" ̄","–":"︲","—":"︱","‘":"﹃","’":"﹄","“":"﹁","”":"﹂","…":"︙","‧":"・","₩":"₩","、":"︑","。":"︒","〈":"︿","〉":"﹀","《":"︽","》":"︾","「":"﹁","」":"﹂","『":"﹃","』":"﹄","【":"︻","】":"︼","〔":"︹","〕":"︺","〖":"︗","〗":"︘","!":"︕","(":"︵",")":"︶",",":"︐","-":"︲",".":"・",":":"︓",";":"︔","<":"︿",">":"﹀","?":"︖","[":"﹇","]":"﹈","_":"︳","{":"︷","|":"―","}":"︸","⦅":"︵","⦆":"︶","。":"︒","「":"﹁","」":"﹂"};var kl=24,Al=function(t,e,r,n,i){var a,o,s=8*i-n-1,l=(1<<s)-1,u=l>>1,c=-7,f=r?i-1:0,h=r?-1:1,p=t[e+f];for(f+=h,a=p&(1<<-c)-1,p>>=-c,c+=s;c>0;a=256*a+t[e+f],f+=h,c-=8);for(o=a&(1<<-c)-1,a>>=-c,c+=n;c>0;o=256*o+t[e+f],f+=h,c-=8);if(0===a)a=1-u;else{if(a===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),a-=u}return(p?-1:1)*o*Math.pow(2,a-n)},Ml=function(t,e,r,n,i,a){var o,s,l,u=8*a-i-1,c=(1<<u)-1,f=c>>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:a-1,d=n?1:-1,v=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=c):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+f>=1?h/l:h*Math.pow(2,1-f))*l>=2&&(o++,l/=2),o+f>=c?(s=0,o=c):o+f>=1?(s=(e*l-1)*Math.pow(2,i),o+=f):(s=e*Math.pow(2,f-1)*Math.pow(2,i),o=0));i>=8;t[r+p]=255&s,p+=d,s/=256,i-=8);for(o=o<<i|s,u+=i;u>0;t[r+p]=255&o,p+=d,o/=256,u-=8);t[r+p-d]|=128*v},Sl=El;function El(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length}El.Varint=0,El.Fixed64=1,El.Bytes=2,El.Fixed32=5;var Ll=4294967296,Cl=1/Ll,Pl="undefined"==typeof TextDecoder?null:new TextDecoder("utf8");function Ol(t){return t.type===El.Bytes?t.readVarint()+t.pos:t.pos+1}function Il(t,e,r){return r?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function Dl(t,e,r){var n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(7*Math.LN2));r.realloc(n);for(var i=r.pos-1;i>=t;i--)r.buf[i+n]=r.buf[i]}function zl(t,e){for(var r=0;r<t.length;r++)e.writeVarint(t[r])}function Rl(t,e){for(var r=0;r<t.length;r++)e.writeSVarint(t[r])}function Fl(t,e){for(var r=0;r<t.length;r++)e.writeFloat(t[r])}function Bl(t,e){for(var r=0;r<t.length;r++)e.writeDouble(t[r])}function Nl(t,e){for(var r=0;r<t.length;r++)e.writeBoolean(t[r])}function jl(t,e){for(var r=0;r<t.length;r++)e.writeFixed32(t[r])}function Ul(t,e){for(var r=0;r<t.length;r++)e.writeSFixed32(t[r])}function Vl(t,e){for(var r=0;r<t.length;r++)e.writeFixed64(t[r])}function Hl(t,e){for(var r=0;r<t.length;r++)e.writeSFixed64(t[r])}function ql(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+16777216*t[e+3]}function Gl(t,e,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function Zl(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}El.prototype={destroy:function(){this.buf=null},readFields:function(t,e,r){for(r=r||this.length;this.pos<r;){var n=this.readVarint(),i=n>>3,a=this.pos;this.type=7&n,t(i,e,this),this.pos===a&&this.skip(n)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=ql(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=Zl(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=ql(this.buf,this.pos)+ql(this.buf,this.pos+4)*Ll;return this.pos+=8,t},readSFixed64:function(){var t=ql(this.buf,this.pos)+Zl(this.buf,this.pos+4)*Ll;return this.pos+=8,t},readFloat:function(){var t=Al(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=Al(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,r,n=this.buf;return e=127&(r=n[this.pos++]),r<128?e:(e|=(127&(r=n[this.pos++]))<<7,r<128?e:(e|=(127&(r=n[this.pos++]))<<14,r<128?e:(e|=(127&(r=n[this.pos++]))<<21,r<128?e:function(t,e,r){var n,i,a=r.buf;if(n=(112&(i=a[r.pos++]))>>4,i<128)return Il(t,n,e);if(n|=(127&(i=a[r.pos++]))<<3,i<128)return Il(t,n,e);if(n|=(127&(i=a[r.pos++]))<<10,i<128)return Il(t,n,e);if(n|=(127&(i=a[r.pos++]))<<17,i<128)return Il(t,n,e);if(n|=(127&(i=a[r.pos++]))<<24,i<128)return Il(t,n,e);if(n|=(1&(i=a[r.pos++]))<<31,i<128)return Il(t,n,e);throw new Error("Expected varint not more than 10 bytes")}(e|=(15&(r=n[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=this.pos;return this.pos=t,t-e>=12&&Pl?function(t,e,r){return Pl.decode(t.subarray(e,r))}(this.buf,e,t):function(t,e,r){for(var n="",i=e;i<r;){var a,o,s,l=t[i],u=null,c=l>239?4:l>223?3:l>191?2:1;if(i+c>r)break;1===c?l<128&&(u=l):2===c?128==(192&(a=t[i+1]))&&(u=(31&l)<<6|63&a)<=127&&(u=null):3===c?(a=t[i+1],o=t[i+2],128==(192&a)&&128==(192&o)&&((u=(15&l)<<12|(63&a)<<6|63&o)<=2047||u>=55296&&u<=57343)&&(u=null)):4===c&&(a=t[i+1],o=t[i+2],s=t[i+3],128==(192&a)&&128==(192&o)&&128==(192&s)&&((u=(15&l)<<18|(63&a)<<12|(63&o)<<6|63&s)<=65535||u>=1114112)&&(u=null)),null===u?(u=65533,c=1):u>65535&&(u-=65536,n+=String.fromCharCode(u>>>10&1023|55296),u=56320|1023&u),n+=String.fromCharCode(u),i+=c}return n}(this.buf,e,t)},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){if(this.type!==El.Bytes)return t.push(this.readVarint(e));var r=Ol(this);for(t=t||[];this.pos<r;)t.push(this.readVarint(e));return t},readPackedSVarint:function(t){if(this.type!==El.Bytes)return t.push(this.readSVarint());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readSVarint());return t},readPackedBoolean:function(t){if(this.type!==El.Bytes)return t.push(this.readBoolean());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readBoolean());return t},readPackedFloat:function(t){if(this.type!==El.Bytes)return t.push(this.readFloat());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readFloat());return t},readPackedDouble:function(t){if(this.type!==El.Bytes)return t.push(this.readDouble());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readDouble());return t},readPackedFixed32:function(t){if(this.type!==El.Bytes)return t.push(this.readFixed32());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readFixed32());return t},readPackedSFixed32:function(t){if(this.type!==El.Bytes)return t.push(this.readSFixed32());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed32());return t},readPackedFixed64:function(t){if(this.type!==El.Bytes)return t.push(this.readFixed64());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readFixed64());return t},readPackedSFixed64:function(t){if(this.type!==El.Bytes)return t.push(this.readSFixed64());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed64());return t},skip:function(t){var e=7&t;if(e===El.Varint)for(;this.buf[this.pos++]>127;);else if(e===El.Bytes)this.pos=this.readVarint()+this.pos;else if(e===El.Fixed32)this.pos+=4;else{if(e!==El.Fixed64)throw new Error("Unimplemented type: "+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e<this.pos+t;)e*=2;if(e!==this.length){var r=new Uint8Array(e);r.set(this.buf),this.buf=r,this.length=e}},finish:function(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)},writeFixed32:function(t){this.realloc(4),Gl(this.buf,t,this.pos),this.pos+=4},writeSFixed32:function(t){this.realloc(4),Gl(this.buf,t,this.pos),this.pos+=4},writeFixed64:function(t){this.realloc(8),Gl(this.buf,-1&t,this.pos),Gl(this.buf,Math.floor(t*Cl),this.pos+4),this.pos+=8},writeSFixed64:function(t){this.realloc(8),Gl(this.buf,-1&t,this.pos),Gl(this.buf,Math.floor(t*Cl),this.pos+4),this.pos+=8},writeVarint:function(t){(t=+t||0)>268435455||t<0?function(t,e){var r,n;if(t>=0?(r=t%4294967296|0,n=t/4294967296|0):(n=~(-t/4294967296),4294967295^(r=~(-t%4294967296))?r=r+1|0:(r=0,n=n+1|0)),t>=0x10000000000000000||t<-0x10000000000000000)throw new Error("Given varint doesn't fit into 10 bytes");e.realloc(10),function(t,e,r){r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos]=127&t}(r,0,e),function(t,e){var r=(7&t)<<4;e.buf[e.pos++]|=r|((t>>>=3)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t)))))}(n,e)}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,r){for(var n,i,a=0;a<e.length;a++){if((n=e.charCodeAt(a))>55295&&n<57344){if(!i){n>56319||a+1===e.length?(t[r++]=239,t[r++]=191,t[r++]=189):i=n;continue}if(n<56320){t[r++]=239,t[r++]=191,t[r++]=189,i=n;continue}n=i-55296<<10|n-56320|65536,i=null}else i&&(t[r++]=239,t[r++]=191,t[r++]=189,i=null);n<128?t[r++]=n:(n<2048?t[r++]=n>>6|192:(n<65536?t[r++]=n>>12|224:(t[r++]=n>>18|240,t[r++]=n>>12&63|128),t[r++]=n>>6&63|128),t[r++]=63&n|128)}return r}(this.buf,t,this.pos);var r=this.pos-e;r>=128&&Dl(e,r,this),this.pos=e-1,this.writeVarint(r),this.pos+=r},writeFloat:function(t){this.realloc(4),Ml(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),Ml(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var r=0;r<e;r++)this.buf[this.pos++]=t[r]},writeRawMessage:function(t,e){this.pos++;var r=this.pos;t(e,this);var n=this.pos-r;n>=128&&Dl(r,n,this),this.pos=r-1,this.writeVarint(n),this.pos+=n},writeMessage:function(t,e,r){this.writeTag(t,El.Bytes),this.writeRawMessage(e,r)},writePackedVarint:function(t,e){e.length&&this.writeMessage(t,zl,e)},writePackedSVarint:function(t,e){e.length&&this.writeMessage(t,Rl,e)},writePackedBoolean:function(t,e){e.length&&this.writeMessage(t,Nl,e)},writePackedFloat:function(t,e){e.length&&this.writeMessage(t,Fl,e)},writePackedDouble:function(t,e){e.length&&this.writeMessage(t,Bl,e)},writePackedFixed32:function(t,e){e.length&&this.writeMessage(t,jl,e)},writePackedSFixed32:function(t,e){e.length&&this.writeMessage(t,Ul,e)},writePackedFixed64:function(t,e){e.length&&this.writeMessage(t,Vl,e)},writePackedSFixed64:function(t,e){e.length&&this.writeMessage(t,Hl,e)},writeBytesField:function(t,e){this.writeTag(t,El.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,El.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,El.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,El.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,El.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,El.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,El.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,El.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,El.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,El.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}};var Yl=3;function Wl(t,e,r){1===t&&r.readMessage(Xl,e)}function Xl(t,e,r){if(3===t){var n=r.readMessage(Jl,{}),i=n.id,a=n.bitmap,o=n.width,s=n.height,l=n.left,u=n.top,c=n.advance;e.push({id:i,bitmap:new Yo({width:o+2*Yl,height:s+2*Yl},a),metrics:{width:o,height:s,left:l,top:u,advance:c}})}}function Jl(t,e,r){1===t?e.id=r.readVarint():2===t?e.bitmap=r.readBytes():3===t?e.width=r.readVarint():4===t?e.height=r.readVarint():5===t?e.left=r.readSVarint():6===t?e.top=r.readSVarint():7===t&&(e.advance=r.readVarint())}var Kl=Yl;function $l(t){for(var e=0,r=0,n=0,i=t;n<i.length;n+=1){var a=i[n];e+=a.w*a.h,r=Math.max(r,a.w)}t.sort((function(t,e){return e.h-t.h}));for(var o=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(e/.95)),r),h:1/0}],s=0,l=0,u=0,c=t;u<c.length;u+=1)for(var f=c[u],h=o.length-1;h>=0;h--){var p=o[h];if(!(f.w>p.w||f.h>p.h)){if(f.x=p.x,f.y=p.y,l=Math.max(l,f.y+f.h),s=Math.max(s,f.x+f.w),f.w===p.w&&f.h===p.h){var d=o.pop();h<o.length&&(o[h]=d)}else f.h===p.h?(p.x+=f.w,p.w-=f.w):f.w===p.w?(p.y+=f.h,p.h-=f.h):(o.push({x:p.x+f.w,y:p.y,w:p.w-f.w,h:f.h}),p.y+=f.h,p.h-=f.h);break}}return{w:s,h:l,fill:e/(s*l)||0}}var Ql=1,tu=function(t,e){var r=e.pixelRatio,n=e.version,i=e.stretchX,a=e.stretchY,o=e.content;this.paddedRect=t,this.pixelRatio=r,this.stretchX=i,this.stretchY=a,this.content=o,this.version=n},eu={tl:{configurable:!0},br:{configurable:!0},tlbr:{configurable:!0},displaySize:{configurable:!0}};eu.tl.get=function(){return[this.paddedRect.x+Ql,this.paddedRect.y+Ql]},eu.br.get=function(){return[this.paddedRect.x+this.paddedRect.w-Ql,this.paddedRect.y+this.paddedRect.h-Ql]},eu.tlbr.get=function(){return this.tl.concat(this.br)},eu.displaySize.get=function(){return[(this.paddedRect.w-2*Ql)/this.pixelRatio,(this.paddedRect.h-2*Ql)/this.pixelRatio]},Object.defineProperties(tu.prototype,eu);var ru=function(t,e){var r={},n={};this.haveRenderCallbacks=[];var i=[];this.addImages(t,r,i),this.addImages(e,n,i);var a=$l(i),o=a.w,s=a.h,l=new Wo({width:o||1,height:s||1});for(var u in t){var c=t[u],f=r[u].paddedRect;Wo.copy(c.data,l,{x:0,y:0},{x:f.x+Ql,y:f.y+Ql},c.data)}for(var h in e){var p=e[h],d=n[h].paddedRect,v=d.x+Ql,g=d.y+Ql,y=p.data.width,m=p.data.height;Wo.copy(p.data,l,{x:0,y:0},{x:v,y:g},p.data),Wo.copy(p.data,l,{x:0,y:m-1},{x:v,y:g-1},{width:y,height:1}),Wo.copy(p.data,l,{x:0,y:0},{x:v,y:g+m},{width:y,height:1}),Wo.copy(p.data,l,{x:y-1,y:0},{x:v-1,y:g},{width:1,height:m}),Wo.copy(p.data,l,{x:0,y:0},{x:v+y,y:g},{width:1,height:m})}this.image=l,this.iconPositions=r,this.patternPositions=n};ru.prototype.addImages=function(t,e,r){for(var n in t){var i=t[n],a={x:0,y:0,w:i.data.width+2*Ql,h:i.data.height+2*Ql};r.push(a),e[n]=new tu(a,i),i.hasRenderCallback&&this.haveRenderCallbacks.push(n)}},ru.prototype.patchUpdatedImages=function(t,e){for(var r in t.dispatchRenderCallbacks(this.haveRenderCallbacks),t.updatedImages)this.patchUpdatedImage(this.iconPositions[r],t.getImage(r),e),this.patchUpdatedImage(this.patternPositions[r],t.getImage(r),e)},ru.prototype.patchUpdatedImage=function(t,e,r){if(t&&e&&t.version!==e.version){t.version=e.version;var n=t.tl,i=n[0],a=n[1];r.update(e.data,void 0,{x:i,y:a})}},ni("ImagePosition",tu),ni("ImageAtlas",ru);var nu={horizontal:1,vertical:2,horizontalOnly:3},iu=-17;var au=function(){this.scale=1,this.fontStack="",this.imageName=null};au.forText=function(t,e){var r=new au;return r.scale=t||1,r.fontStack=e,r},au.forImage=function(t){var e=new au;return e.imageName=t,e};var ou=function(){this.text="",this.sectionIndex=[],this.sections=[],this.imageSectionID=null};function su(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v){var g,y=ou.fromFeature(t,i);f===nu.vertical&&y.verticalizePunctuation();var m=Ci.processBidirectionalText,x=Ci.processStyledBidirectionalText;if(m&&1===y.sections.length){g=[];for(var b=0,_=m(y.toString(),vu(y,u,a,e,n,p,d));b<_.length;b+=1){var w=_[b],T=new ou;T.text=w,T.sections=y.sections;for(var k=0;k<w.length;k++)T.sectionIndex.push(0);g.push(T)}}else if(x){g=[];for(var A=0,M=x(y.text,y.sectionIndex,vu(y,u,a,e,n,p,d));A<M.length;A+=1){var S=M[A],E=new ou;E.text=S[0],E.sectionIndex=S[1],E.sections=y.sections,g.push(E)}}else g=function(t,e){for(var r=[],n=t.text,i=0,a=0,o=e;a<o.length;a+=1){var s=o[a];r.push(t.substring(i,s)),i=s}return i<n.length&&r.push(t.substring(i,n.length)),r}(y,vu(y,u,a,e,n,p,d));var L=[],C={positionedLines:L,text:y.toString(),top:c[1],bottom:c[1],left:c[0],right:c[0],writingMode:f,iconsInText:!1,verticalizable:!1};return function(t,e,r,n,i,a,o,s,l,u,c,f){for(var h=0,p=iu,d=0,v=0,g="right"===s?1:"left"===s?0:.5,y=0,m=0,x=i;m<x.length;m+=1){var b=x[m];b.trim();var _=b.getMaxScale(),w=(_-1)*kl,T={positionedGlyphs:[],lineOffset:0};t.positionedLines[y]=T;var k=T.positionedGlyphs,A=0;if(b.length()){for(var M=0;M<b.length();M++){var S=b.getSection(M),E=b.getSectionIndex(M),L=b.getCharCode(M),C=0,P=null,O=null,I=null,D=kl,z=!(l===nu.horizontal||!c&&!hi(L)||c&&(lu[L]||di(L)));if(S.imageName){var R=n[S.imageName];if(!R)continue;I=S.imageName,t.iconsInText=t.iconsInText||!0,O=R.paddedRect;var F=R.displaySize;S.scale=S.scale*kl/f,P={width:F[0],height:F[1],left:Ql,top:-Kl,advance:z?F[1]:F[0]},C=w+(kl-F[1]*S.scale),D=P.advance;var B=z?F[0]*S.scale-kl*_:F[1]*S.scale-kl*_;B>0&&B>A&&(A=B)}else{var N=r[S.fontStack],j=N&&N[L];if(j&&j.rect)O=j.rect,P=j.metrics;else{var U=e[S.fontStack],V=U&&U[L];if(!V)continue;P=V.metrics}C=(_-S.scale)*kl}z?(t.verticalizable=!0,k.push({glyph:L,imageName:I,x:h,y:p+C,vertical:z,scale:S.scale,fontStack:S.fontStack,sectionIndex:E,metrics:P,rect:O}),h+=D*S.scale+u):(k.push({glyph:L,imageName:I,x:h,y:p+C,vertical:z,scale:S.scale,fontStack:S.fontStack,sectionIndex:E,metrics:P,rect:O}),h+=P.advance*S.scale+u)}if(0!==k.length){var H=h-u;d=Math.max(H,d),yu(k,0,k.length-1,g,A)}h=0;var q=a*_+A;T.lineOffset=Math.max(A,w),p+=q,v=Math.max(q,v),++y}else p+=a,++y}var G=p-iu,Z=gu(o),Y=Z.horizontalAlign,W=Z.verticalAlign;(function(t,e,r,n,i,a,o,s,l){var u=(e-r)*i,c=0;c=a!==o?-s*n-iu:(-n*l+.5)*o;for(var f=0,h=t;f<h.length;f+=1)for(var p=0,d=h[f].positionedGlyphs;p<d.length;p+=1){var v=d[p];v.x+=u,v.y+=c}})(t.positionedLines,g,Y,W,d,v,a,G,i.length),t.top+=-W*G,t.bottom=t.top+G,t.left+=-Y*d,t.right=t.left+d}(C,e,r,n,g,o,s,l,f,u,h,v),!function(t){for(var e=0,r=t;e<r.length;e+=1)if(0!==r[e].positionedGlyphs.length)return!1;return!0}(L)&&C}ou.fromFeature=function(t,e){for(var r=new ou,n=0;n<t.sections.length;n++){var i=t.sections[n];i.image?r.addImageSection(i):r.addTextSection(i,e)}return r},ou.prototype.length=function(){return this.text.length},ou.prototype.getSection=function(t){return this.sections[this.sectionIndex[t]]},ou.prototype.getSectionIndex=function(t){return this.sectionIndex[t]},ou.prototype.getCharCode=function(t){return this.text.charCodeAt(t)},ou.prototype.verticalizePunctuation=function(){this.text=function(t){for(var e="",r=0;r<t.length;r++){var n=t.charCodeAt(r+1)||null,i=t.charCodeAt(r-1)||null;n&&pi(n)&&!Tl[t[r+1]]||i&&pi(i)&&!Tl[t[r-1]]||!Tl[t[r]]?e+=t[r]:e+=Tl[t[r]]}return e}(this.text)},ou.prototype.trim=function(){for(var t=0,e=0;e<this.text.length&&lu[this.text.charCodeAt(e)];e++)t++;for(var r=this.text.length,n=this.text.length-1;n>=0&&n>=t&&lu[this.text.charCodeAt(n)];n--)r--;this.text=this.text.substring(t,r),this.sectionIndex=this.sectionIndex.slice(t,r)},ou.prototype.substring=function(t,e){var r=new ou;return r.text=this.text.substring(t,e),r.sectionIndex=this.sectionIndex.slice(t,e),r.sections=this.sections,r},ou.prototype.toString=function(){return this.text},ou.prototype.getMaxScale=function(){var t=this;return this.sectionIndex.reduce((function(e,r){return Math.max(e,t.sections[r].scale)}),0)},ou.prototype.addTextSection=function(t,e){this.text+=t.text,this.sections.push(au.forText(t.scale,t.fontStack||e));for(var r=this.sections.length-1,n=0;n<t.text.length;++n)this.sectionIndex.push(r)},ou.prototype.addImageSection=function(t){var e=t.image?t.image.name:"";if(0!==e.length){var r=this.getNextImageSectionCharCode();r?(this.text+=String.fromCharCode(r),this.sections.push(au.forImage(e)),this.sectionIndex.push(this.sections.length-1)):w("Reached maximum number of images 6401")}else w("Can't add FormattedSection with an empty image.")},ou.prototype.getNextImageSectionCharCode=function(){return this.imageSectionID?this.imageSectionID>=63743?null:++this.imageSectionID:(this.imageSectionID=57344,this.imageSectionID)};var lu={9:!0,10:!0,11:!0,12:!0,13:!0,32:!0},uu={};function cu(t,e,r,n,i,a){if(e.imageName){var o=n[e.imageName];return o?o.displaySize[0]*e.scale*kl/a+i:0}var s=r[e.fontStack],l=s&&s[t];return l?l.metrics.advance*e.scale+i:0}function fu(t,e,r,n){var i=Math.pow(t-e,2);return n?t<e?i/2:2*i:i+Math.abs(r)*r}function hu(t,e,r){var n=0;return 10===t&&(n-=1e4),r&&(n+=150),40!==t&&65288!==t||(n+=50),41!==e&&65289!==e||(n+=50),n}function pu(t,e,r,n,i,a){for(var o=null,s=fu(e,r,i,a),l=0,u=n;l<u.length;l+=1){var c=u[l],f=fu(e-c.x,r,i,a)+c.badness;f<=s&&(o=c,s=f)}return{index:t,x:e,priorBreak:o,badness:s}}function du(t){return t?du(t.priorBreak).concat(t.index):[]}function vu(t,e,r,n,i,a,o){if("point"!==a)return[];if(!t)return[];for(var s=[],l=function(t,e,r,n,i,a){for(var o=0,s=0;s<t.length();s++){var l=t.getSection(s);o+=cu(t.getCharCode(s),l,n,i,e,a)}return o/Math.max(1,Math.ceil(o/r))}(t,e,r,n,i,o),u=t.text.indexOf("​")>=0,c=0,f=0;f<t.length();f++){var h=t.getSection(f),p=t.getCharCode(f);if(lu[p]||(c+=cu(p,h,n,i,e,o)),f<t.length()-1){var d=!((v=p)<11904||!(ci["Bopomofo Extended"](v)||ci.Bopomofo(v)||ci["CJK Compatibility Forms"](v)||ci["CJK Compatibility Ideographs"](v)||ci["CJK Compatibility"](v)||ci["CJK Radicals Supplement"](v)||ci["CJK Strokes"](v)||ci["CJK Symbols and Punctuation"](v)||ci["CJK Unified Ideographs Extension A"](v)||ci["CJK Unified Ideographs"](v)||ci["Enclosed CJK Letters and Months"](v)||ci["Halfwidth and Fullwidth Forms"](v)||ci.Hiragana(v)||ci["Ideographic Description Characters"](v)||ci["Kangxi Radicals"](v)||ci["Katakana Phonetic Extensions"](v)||ci.Katakana(v)||ci["Vertical Forms"](v)||ci["Yi Radicals"](v)||ci["Yi Syllables"](v)));(uu[p]||d||h.imageName)&&s.push(pu(f+1,c,l,s,hu(p,t.getCharCode(f+1),d&&u),!1))}}var v;return du(pu(t.length(),c,l,s,0,!0))}function gu(t){var e=.5,r=.5;switch(t){case"right":case"top-right":case"bottom-right":e=1;break;case"left":case"top-left":case"bottom-left":e=0}switch(t){case"bottom":case"bottom-right":case"bottom-left":r=1;break;case"top":case"top-right":case"top-left":r=0}return{horizontalAlign:e,verticalAlign:r}}function yu(t,e,r,n,i){if(n||i)for(var a=t[r],o=a.metrics.advance*a.scale,s=(t[r].x+o)*n,l=e;l<=r;l++)t[l].x-=s,t[l].y+=i}function mu(t,e,r,n,i,a){var o,s=t.image;if(s.content){var l=s.content,u=s.pixelRatio||1;o=[l[0]/u,l[1]/u,s.displaySize[0]-l[2]/u,s.displaySize[1]-l[3]/u]}var c,f,h,p,d=e.left*a,v=e.right*a;"width"===r||"both"===r?(p=i[0]+d-n[3],f=i[0]+v+n[1]):f=(p=i[0]+(d+v-s.displaySize[0])/2)+s.displaySize[0];var g=e.top*a,y=e.bottom*a;return"height"===r||"both"===r?(c=i[1]+g-n[0],h=i[1]+y+n[2]):h=(c=i[1]+(g+y-s.displaySize[1])/2)+s.displaySize[1],{image:s,top:c,right:f,bottom:h,left:p,collisionPadding:o}}uu[10]=!0,uu[32]=!0,uu[38]=!0,uu[40]=!0,uu[41]=!0,uu[43]=!0,uu[45]=!0,uu[47]=!0,uu[173]=!0,uu[183]=!0,uu[8203]=!0,uu[8208]=!0,uu[8211]=!0,uu[8231]=!0;var xu=function(t){function e(e,r,n,i){t.call(this,e,r),this.angle=n,void 0!==i&&(this.segment=i)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.clone=function(){return new e(this.x,this.y,this.angle,this.segment)},e}(a);ni("Anchor",xu);var bu=128;function _u(t,e){var r=e.expression;if("constant"===r.kind)return{kind:"constant",layoutSize:r.evaluate(new Pi(t+1))};if("source"===r.kind)return{kind:"source"};for(var n=r.zoomStops,i=r.interpolationType,a=0;a<n.length&&n[a]<=t;)a++;for(var o=a=Math.max(0,a-1);o<n.length&&n[o]<t+1;)o++;o=Math.min(n.length-1,o);var s=n[a],l=n[o];return"composite"===r.kind?{kind:"composite",minZoom:s,maxZoom:l,interpolationType:i}:{kind:"camera",minZoom:s,maxZoom:l,minSize:r.evaluate(new Pi(s)),maxSize:r.evaluate(new Pi(l)),interpolationType:i}}function wu(t,e,r){var n=e.uSize,i=e.uSizeT,a=r.lowerSize,o=r.upperSize;return"source"===t.kind?a/bu:"composite"===t.kind?$e(a/bu,o/bu,i):n}function Tu(t,e){var r=0,n=0;if("constant"===t.kind)n=t.layoutSize;else if("source"!==t.kind){var i=t.interpolationType,a=t.minZoom,o=t.maxZoom,s=i?u(xr.interpolationFactor(i,e,a,o),0,1):0;"camera"===t.kind?n=$e(t.minSize,t.maxSize,s):r=s}return{uSizeT:r,uSize:n}}var ku=Object.freeze({__proto__:null,getSizeData:_u,evaluateSizeForFeature:wu,evaluateSizeForZoom:Tu,SIZE_PACK_FACTOR:bu});function Au(t,e,r,n,i){if(void 0===e.segment)return!0;for(var a=e,o=e.segment+1,s=0;s>-r/2;){if(--o<0)return!1;s-=t[o].dist(a),a=t[o]}s+=t[o].dist(t[o+1]),o++;for(var l=[],u=0;s<r/2;){var c=t[o-1],f=t[o],h=t[o+1];if(!h)return!1;var p=c.angleTo(f)-f.angleTo(h);for(p=Math.abs((p+3*Math.PI)%(2*Math.PI)-Math.PI),l.push({distance:s,angleDelta:p}),u+=p;s-l[0].distance>n;)u-=l.shift().angleDelta;if(u>i)return!1;o++,s+=f.dist(h)}return!0}function Mu(t){for(var e=0,r=0;r<t.length-1;r++)e+=t[r].dist(t[r+1]);return e}function Su(t,e,r){return t?.6*e*r:0}function Eu(t,e){return Math.max(t?t.right-t.left:0,e?e.right-e.left:0)}function Lu(t,e,r,n,i,a){for(var o=Su(r,i,a),s=Eu(r,n)*a,l=0,u=Mu(t)/2,c=0;c<t.length-1;c++){var f=t[c],h=t[c+1],p=f.dist(h);if(l+p>u){var d=(u-l)/p,v=$e(f.x,h.x,d),g=$e(f.y,h.y,d),y=new xu(v,g,h.angleTo(f),c);return y._round(),!o||Au(t,y,s,o,e)?y:void 0}l+=p}}function Cu(t,e,r,n,i,a,o,s,l){var u=Su(n,a,o),c=Eu(n,i),f=c*o,h=0===t[0].x||t[0].x===l||0===t[0].y||t[0].y===l;return e-f<e/4&&(e=f+e/4),Pu(t,h?e/2*s%e:(c/2+2*a)*o*s%e,e,u,r,f,h,!1,l)}function Pu(t,e,r,n,i,a,o,s,l){for(var u=a/2,c=Mu(t),f=0,h=e-r,p=[],d=0;d<t.length-1;d++){for(var v=t[d],g=t[d+1],y=v.dist(g),m=g.angleTo(v);h+r<f+y;){var x=((h+=r)-f)/y,b=$e(v.x,g.x,x),_=$e(v.y,g.y,x);if(b>=0&&b<l&&_>=0&&_<l&&h-u>=0&&h+u<=c){var w=new xu(b,_,m,d);w._round(),n&&!Au(t,w,a,n,i)||p.push(w)}}f+=y}return s||p.length||o||(p=Pu(t,f/2,r,n,i,a,o,!0,l)),p}function Ou(t,e,r,n,i){for(var o=[],s=0;s<t.length;s++)for(var l=t[s],u=void 0,c=0;c<l.length-1;c++){var f=l[c],h=l[c+1];f.x<e&&h.x<e||(f.x<e?f=new a(e,f.y+(h.y-f.y)*((e-f.x)/(h.x-f.x)))._round():h.x<e&&(h=new a(e,f.y+(h.y-f.y)*((e-f.x)/(h.x-f.x)))._round()),f.y<r&&h.y<r||(f.y<r?f=new a(f.x+(h.x-f.x)*((r-f.y)/(h.y-f.y)),r)._round():h.y<r&&(h=new a(f.x+(h.x-f.x)*((r-f.y)/(h.y-f.y)),r)._round()),f.x>=n&&h.x>=n||(f.x>=n?f=new a(n,f.y+(h.y-f.y)*((n-f.x)/(h.x-f.x)))._round():h.x>=n&&(h=new a(n,f.y+(h.y-f.y)*((n-f.x)/(h.x-f.x)))._round()),f.y>=i&&h.y>=i||(f.y>=i?f=new a(f.x+(h.x-f.x)*((i-f.y)/(h.y-f.y)),i)._round():h.y>=i&&(h=new a(f.x+(h.x-f.x)*((i-f.y)/(h.y-f.y)),i)._round()),u&&f.equals(u[u.length-1])||(u=[f],o.push(u)),u.push(h)))))}return o}var Iu=Ql;function Du(t,e,r,n){var i=[],o=t.image,s=o.pixelRatio,l=o.paddedRect.w-2*Iu,u=o.paddedRect.h-2*Iu,c=t.right-t.left,f=t.bottom-t.top,h=o.stretchX||[[0,l]],p=o.stretchY||[[0,u]],d=function(t,e){return t+e[1]-e[0]},v=h.reduce(d,0),g=p.reduce(d,0),y=l-v,m=u-g,x=0,b=v,_=0,w=g,T=0,k=y,A=0,M=m;if(o.content&&n){var S=o.content;x=zu(h,0,S[0]),_=zu(p,0,S[1]),b=zu(h,S[0],S[2]),w=zu(p,S[1],S[3]),T=S[0]-x,A=S[1]-_,k=S[2]-S[0]-b,M=S[3]-S[1]-w}var E=function(n,i,l,u){var h=Fu(n.stretch-x,b,c,t.left),p=Bu(n.fixed-T,k,n.stretch,v),d=Fu(i.stretch-_,w,f,t.top),y=Bu(i.fixed-A,M,i.stretch,g),m=Fu(l.stretch-x,b,c,t.left),S=Bu(l.fixed-T,k,l.stretch,v),E=Fu(u.stretch-_,w,f,t.top),L=Bu(u.fixed-A,M,u.stretch,g),C=new a(h,d),P=new a(m,d),O=new a(m,E),I=new a(h,E),D=new a(p/s,y/s),z=new a(S/s,L/s),R=e*Math.PI/180;if(R){var F=Math.sin(R),B=Math.cos(R),N=[B,-F,F,B];C._matMult(N),P._matMult(N),I._matMult(N),O._matMult(N)}var j=n.stretch+n.fixed,U=l.stretch+l.fixed,V=i.stretch+i.fixed,H=u.stretch+u.fixed;return{tl:C,tr:P,bl:I,br:O,tex:{x:o.paddedRect.x+Iu+j,y:o.paddedRect.y+Iu+V,w:U-j,h:H-V},writingMode:void 0,glyphOffset:[0,0],sectionIndex:0,pixelOffsetTL:D,pixelOffsetBR:z,minFontScaleX:k/s/c,minFontScaleY:M/s/f,isSDF:r}};if(n&&(o.stretchX||o.stretchY))for(var L=Ru(h,y,v),C=Ru(p,m,g),P=0;P<L.length-1;P++)for(var O=L[P],I=L[P+1],D=0;D<C.length-1;D++){var z=C[D],R=C[D+1];i.push(E(O,z,I,R))}else i.push(E({fixed:0,stretch:-1},{fixed:0,stretch:-1},{fixed:0,stretch:l+1},{fixed:0,stretch:u+1}));return i}function zu(t,e,r){for(var n=0,i=0,a=t;i<a.length;i+=1){var o=a[i];n+=Math.max(e,Math.min(r,o[1]))-Math.max(e,Math.min(r,o[0]))}return n}function Ru(t,e,r){for(var n=[{fixed:-Iu,stretch:0}],i=0,a=t;i<a.length;i+=1){var o=a[i],s=o[0],l=o[1],u=n[n.length-1];n.push({fixed:s-u.stretch,stretch:u.stretch}),n.push({fixed:s-u.stretch,stretch:u.stretch+(l-s)})}return n.push({fixed:e+Iu,stretch:r}),n}function Fu(t,e,r,n){return t/e*r+n}function Bu(t,e,r,n){return t-e*r/n}var Nu=function(t,e,r,n,i,o,s,l,u,c){if(this.boxStartIndex=t.length,u){var f=o.top,h=o.bottom,p=o.collisionPadding;p&&(f-=p[1],h+=p[3]);var d=h-f;d>0&&(d=Math.max(10,d),this.circleDiameter=d)}else{var v=o.top*s-l,g=o.bottom*s+l,y=o.left*s-l,m=o.right*s+l,x=o.collisionPadding;if(x&&(y-=x[0]*s,v-=x[1]*s,m+=x[2]*s,g+=x[3]*s),c){var b=new a(y,v),_=new a(m,v),w=new a(y,g),T=new a(m,g),k=c*Math.PI/180;b._rotate(k),_._rotate(k),w._rotate(k),T._rotate(k),y=Math.min(b.x,_.x,w.x,T.x),m=Math.max(b.x,_.x,w.x,T.x),v=Math.min(b.y,_.y,w.y,T.y),g=Math.max(b.y,_.y,w.y,T.y)}t.emplaceBack(e.x,e.y,y,v,m,g,r,n,i)}this.boxEndIndex=t.length},ju=function(t,e){if(void 0===t&&(t=[]),void 0===e&&(e=Uu),this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(var r=(this.length>>1)-1;r>=0;r--)this._down(r)};function Uu(t,e){return t<e?-1:t>e?1:0}function Vu(t,e,r){void 0===e&&(e=1),void 0===r&&(r=!1);for(var n=1/0,i=1/0,o=-1/0,s=-1/0,l=t[0],u=0;u<l.length;u++){var c=l[u];(!u||c.x<n)&&(n=c.x),(!u||c.y<i)&&(i=c.y),(!u||c.x>o)&&(o=c.x),(!u||c.y>s)&&(s=c.y)}var f=o-n,h=s-i,p=Math.min(f,h),d=p/2,v=new ju([],Hu);if(0===p)return new a(n,i);for(var g=n;g<o;g+=p)for(var y=i;y<s;y+=p)v.push(new qu(g+d,y+d,d,t));for(var m=function(t){for(var e=0,r=0,n=0,i=t[0],a=0,o=i.length,s=o-1;a<o;s=a++){var l=i[a],u=i[s],c=l.x*u.y-u.x*l.y;r+=(l.x+u.x)*c,n+=(l.y+u.y)*c,e+=3*c}return new qu(r/e,n/e,0,t)}(t),x=v.length;v.length;){var b=v.pop();(b.d>m.d||!m.d)&&(m=b,r&&console.log("found best %d after %d probes",Math.round(1e4*b.d)/1e4,x)),b.max-m.d<=e||(d=b.h/2,v.push(new qu(b.p.x-d,b.p.y-d,d,t)),v.push(new qu(b.p.x+d,b.p.y-d,d,t)),v.push(new qu(b.p.x-d,b.p.y+d,d,t)),v.push(new qu(b.p.x+d,b.p.y+d,d,t)),x+=4)}return r&&(console.log("num probes: "+x),console.log("best distance: "+m.d)),m.p}function Hu(t,e){return e.max-t.max}function qu(t,e,r,n){this.p=new a(t,e),this.h=r,this.d=function(t,e){for(var r=!1,n=1/0,i=0;i<e.length;i++)for(var a=e[i],o=0,s=a.length,l=s-1;o<s;l=o++){var u=a[o],c=a[l];u.y>t.y!=c.y>t.y&&t.x<(c.x-u.x)*(t.y-u.y)/(c.y-u.y)+u.x&&(r=!r),n=Math.min(n,ko(t,u,c))}return(r?1:-1)*Math.sqrt(n)}(this.p,n),this.max=this.d+this.h*Math.SQRT2}ju.prototype.push=function(t){this.data.push(t),this.length++,this._up(this.length-1)},ju.prototype.pop=function(){if(0!==this.length){var t=this.data[0],e=this.data.pop();return this.length--,this.length>0&&(this.data[0]=e,this._down(0)),t}},ju.prototype.peek=function(){return this.data[0]},ju.prototype._up=function(t){for(var e=this.data,r=this.compare,n=e[t];t>0;){var i=t-1>>1,a=e[i];if(r(n,a)>=0)break;e[t]=a,t=i}e[t]=n},ju.prototype._down=function(t){for(var e=this.data,r=this.compare,n=this.length>>1,i=e[t];t<n;){var a=1+(t<<1),o=e[a],s=a+1;if(s<this.length&&r(e[s],o)<0&&(a=s,o=e[s]),r(o,i)>=0)break;e[t]=o,t=a}e[t]=i};var Gu=7,Zu=Number.POSITIVE_INFINITY;function Yu(t,e){return e[1]!==Zu?function(t,e,r){var n=0,i=0;switch(e=Math.abs(e),r=Math.abs(r),t){case"top-right":case"top-left":case"top":i=r-Gu;break;case"bottom-right":case"bottom-left":case"bottom":i=-r+Gu}switch(t){case"top-right":case"bottom-right":case"right":n=-e;break;case"top-left":case"bottom-left":case"left":n=e}return[n,i]}(t,e[0],e[1]):function(t,e){var r=0,n=0;e<0&&(e=0);var i=e/Math.sqrt(2);switch(t){case"top-right":case"top-left":n=i-Gu;break;case"bottom-right":case"bottom-left":n=-i+Gu;break;case"bottom":n=-e+Gu;break;case"top":n=e-Gu}switch(t){case"top-right":case"bottom-right":r=-i;break;case"top-left":case"bottom-left":r=i;break;case"left":r=e;break;case"right":r=-e}return[r,n]}(t,e[0])}function Wu(t){switch(t){case"right":case"top-right":case"bottom-right":return"right";case"left":case"top-left":case"bottom-left":return"left"}return"center"}var Xu=255,Ju=Xu*bu;function Ku(t,e,r,n,i,o,s,l,u,c,f,h,p,d,v){var g=function(t,e,r,n,i,o,s,l){for(var u=n.layout.get("text-rotate").evaluate(o,{})*Math.PI/180,c=[],f=0,h=e.positionedLines;f<h.length;f+=1)for(var p=h[f],d=0,v=p.positionedGlyphs;d<v.length;d+=1){var g=v[d];if(g.rect){var y=g.rect||{},m=Kl+1,x=!0,b=1,_=0,w=(i||l)&&g.vertical,T=g.metrics.advance*g.scale/2;if(l&&e.verticalizable){var k=(g.scale-1)*kl,A=(kl-g.metrics.width*g.scale)/2;_=p.lineOffset/2-(g.imageName?-A:k)}if(g.imageName){var M=s[g.imageName];x=M.sdf,b=M.pixelRatio,m=Ql/b}var S=i?[g.x+T,g.y]:[0,0],E=i?[0,0]:[g.x+T+r[0],g.y+r[1]-_],L=[0,0];w&&(L=E,E=[0,0]);var C=(g.metrics.left-m)*g.scale-T+E[0],P=(-g.metrics.top-m)*g.scale+E[1],O=C+y.w*g.scale/b,I=P+y.h*g.scale/b,D=new a(C,P),z=new a(O,P),R=new a(C,I),F=new a(O,I);if(w){var B=new a(-T,T-iu),N=-Math.PI/2,j=kl/2-T,U=g.imageName?j:0,V=new a(5-iu-j,-U),H=new(Function.prototype.bind.apply(a,[null].concat(L)));D._rotateAround(N,B)._add(V)._add(H),z._rotateAround(N,B)._add(V)._add(H),R._rotateAround(N,B)._add(V)._add(H),F._rotateAround(N,B)._add(V)._add(H)}if(u){var q=Math.sin(u),G=Math.cos(u),Z=[G,-q,q,G];D._matMult(Z),z._matMult(Z),R._matMult(Z),F._matMult(Z)}var Y=new a(0,0),W=new a(0,0);c.push({tl:D,tr:z,bl:R,br:F,tex:y,writingMode:e.writingMode,glyphOffset:S,sectionIndex:g.sectionIndex,isSDF:x,pixelOffsetTL:Y,pixelOffsetBR:W,minFontScaleX:0,minFontScaleY:0})}}return c}(0,r,l,i,o,s,n,t.allowVerticalPlacement),y=t.textSizeData,m=null;"source"===y.kind?(m=[bu*i.layout.get("text-size").evaluate(s,{})])[0]>Ju&&w(t.layerIds[0]+': Value for "text-size" is >= '+Xu+'. Reduce your "text-size".'):"composite"===y.kind&&((m=[bu*d.compositeTextSizes[0].evaluate(s,{},v),bu*d.compositeTextSizes[1].evaluate(s,{},v)])[0]>Ju||m[1]>Ju)&&w(t.layerIds[0]+': Value for "text-size" is >= '+Xu+'. Reduce your "text-size".'),t.addSymbols(t.text,g,m,l,o,s,c,e,u.lineStartIndex,u.lineLength,p,v);for(var x=0,b=f;x<b.length;x+=1)h[b[x]]=t.text.placedSymbolArray.length-1;return 4*g.length}function $u(t){for(var e in t)return t[e];return null}function Qu(t,e,r,n){var i=t.compareText;if(e in i){for(var a=i[e],o=a.length-1;o>=0;o--)if(n.dist(a[o])<r)return!0}else i[e]=[];return i[e].push(n),!1}var tc=Js.VectorTileFeature.types,ec=[{name:"a_fade_opacity",components:1,type:"Uint8",offset:0}];function rc(t,e,r,n,i,a,o,s,l,u,c,f,h){var p=s?Math.min(Ju,Math.round(s[0])):0,d=s?Math.min(Ju,Math.round(s[1])):0;t.emplaceBack(e,r,Math.round(32*n),Math.round(32*i),a,o,(p<<1)+(l?1:0),d,16*u,16*c,256*f,256*h)}function nc(t,e,r){t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r)}function ic(t){for(var e=0,r=t.sections;e<r.length;e+=1)if(yi(r[e].text))return!0;return!1}var ac=function(t){this.layoutVertexArray=new ia,this.indexArray=new fa,this.programConfigurations=t,this.segments=new Oa,this.dynamicLayoutVertexArray=new aa,this.opacityVertexArray=new oa,this.placedSymbolArray=new ka};ac.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length&&0===this.indexArray.length&&0===this.dynamicLayoutVertexArray.length&&0===this.opacityVertexArray.length},ac.prototype.upload=function(t,e,r,n){this.isEmpty()||(r&&(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,yl.members),this.indexBuffer=t.createIndexBuffer(this.indexArray,e),this.dynamicLayoutVertexBuffer=t.createVertexBuffer(this.dynamicLayoutVertexArray,ml.members,!0),this.opacityVertexBuffer=t.createVertexBuffer(this.opacityVertexArray,ec,!0),this.opacityVertexBuffer.itemSize=1),(r||n)&&this.programConfigurations.upload(t))},ac.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.dynamicLayoutVertexBuffer.destroy(),this.opacityVertexBuffer.destroy())},ni("SymbolBuffers",ac);var oc=function(t,e,r){this.layoutVertexArray=new t,this.layoutAttributes=e,this.indexArray=new r,this.segments=new Oa,this.collisionVertexArray=new ca};oc.prototype.upload=function(t){this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,this.layoutAttributes),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.collisionVertexBuffer=t.createVertexBuffer(this.collisionVertexArray,xl.members,!0)},oc.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.segments.destroy(),this.collisionVertexBuffer.destroy())},ni("CollisionBuffers",oc);var sc=function(t){this.collisionBoxArray=t.collisionBoxArray,this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.pixelRatio=t.pixelRatio,this.sourceLayerIndex=t.sourceLayerIndex,this.hasPattern=!1,this.hasRTLText=!1,this.sortKeyRanges=[],this.collisionCircleArray=[],this.placementInvProjMatrix=Do([]),this.placementViewportMatrix=Do([]);var e=this.layers[0]._unevaluatedLayout._values;this.textSizeData=_u(this.zoom,e["text-size"]),this.iconSizeData=_u(this.zoom,e["icon-size"]);var r=this.layers[0].layout,n=r.get("symbol-sort-key"),i=r.get("symbol-z-order");this.sortFeaturesByKey="viewport-y"!==i&&void 0!==n.constantOr(1);var a="viewport-y"===i||"auto"===i&&!this.sortFeaturesByKey;this.sortFeaturesByY=a&&(r.get("text-allow-overlap")||r.get("icon-allow-overlap")||r.get("text-ignore-placement")||r.get("icon-ignore-placement")),"point"===r.get("symbol-placement")&&(this.writingModes=r.get("text-writing-mode").map((function(t){return nu[t]}))),this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id})),this.sourceID=t.sourceID};sc.prototype.createArrays=function(){this.text=new ac(new so(yl.members,this.layers,this.zoom,(function(t){return/^text/.test(t)}))),this.icon=new ac(new so(yl.members,this.layers,this.zoom,(function(t){return/^icon/.test(t)}))),this.glyphOffsetArray=new Sa,this.lineVertexArray=new Ea,this.symbolInstances=new Ma},sc.prototype.calculateGlyphDependencies=function(t,e,r,n,i){for(var a=0;a<t.length;a++)if(e[t.charCodeAt(a)]=!0,(r||n)&&i){var o=Tl[t.charAt(a)];o&&(e[o.charCodeAt(0)]=!0)}},sc.prototype.populate=function(t,e,r){var n=this.layers[0],i=n.layout,a=i.get("text-font"),o=i.get("text-field"),s=i.get("icon-image"),l=("constant"!==o.value.kind||o.value.value instanceof ue&&!o.value.value.isEmpty()||o.value.value.toString().length>0)&&("constant"!==a.value.kind||a.value.value.length>0),u="constant"!==s.value.kind||!!s.value.value||Object.keys(s.parameters).length>0,c=i.get("symbol-sort-key");if(this.features=[],l||u){for(var f=e.iconDependencies,h=e.glyphDependencies,p=e.availableImages,d=new Pi(this.zoom),v=0,g=t;v<g.length;v+=1){var y=g[v],m=y.feature,x=y.id,b=y.index,_=y.sourceLayerIndex,w=n._featureFilter.needGeometry,T={type:m.type,id:x,properties:m.properties,geometry:w?po(m):[]};if(n._featureFilter.filter(d,T,r)){w||(T.geometry=po(m));var k=void 0;if(l){var A=n.getValueAndResolveTokens("text-field",T,r,p),M=ue.factory(A);ic(M)&&(this.hasRTLText=!0),(!this.hasRTLText||"unavailable"===Ei()||this.hasRTLText&&Ci.isParsed())&&(k=wl(M,n,T))}var S=void 0;if(u){var E=n.getValueAndResolveTokens("icon-image",T,r,p);S=E instanceof ce?E:ce.fromString(E)}if(k||S){var L=this.sortFeaturesByKey?c.evaluate(T,{},r):void 0,C={id:x,text:k,icon:S,index:b,sourceLayerIndex:_,geometry:po(m),properties:m.properties,type:tc[m.type],sortKey:L};if(this.features.push(C),S&&(f[S.name]=!0),k){var P=a.evaluate(T,{},r).join(","),O="map"===i.get("text-rotation-alignment")&&"point"!==i.get("symbol-placement");this.allowVerticalPlacement=this.writingModes&&this.writingModes.indexOf(nu.vertical)>=0;for(var I=0,D=k.sections;I<D.length;I+=1){var z=D[I];if(z.image)f[z.image.name]=!0;else{var R=fi(k.toString()),F=z.fontStack||P,B=h[F]=h[F]||{};this.calculateGlyphDependencies(z.text,B,O,this.allowVerticalPlacement,R)}}}}}}"line"===i.get("symbol-placement")&&(this.features=function(t){var e={},r={},n=[],i=0;function a(e){n.push(t[e]),i++}function o(t,e,i){var a=r[t];return delete r[t],r[e]=a,n[a].geometry[0].pop(),n[a].geometry[0]=n[a].geometry[0].concat(i[0]),a}function s(t,r,i){var a=e[r];return delete e[r],e[t]=a,n[a].geometry[0].shift(),n[a].geometry[0]=i[0].concat(n[a].geometry[0]),a}function l(t,e,r){var n=r?e[0][e[0].length-1]:e[0][0];return t+":"+n.x+":"+n.y}for(var u=0;u<t.length;u++){var c=t[u],f=c.geometry,h=c.text?c.text.toString():null;if(h){var p=l(h,f),d=l(h,f,!0);if(p in r&&d in e&&r[p]!==e[d]){var v=s(p,d,f),g=o(p,d,n[v].geometry);delete e[p],delete r[d],r[l(h,n[g].geometry,!0)]=g,n[v].geometry=null}else p in r?o(p,d,f):d in e?s(p,d,f):(a(u),e[p]=i-1,r[d]=i-1)}else a(u)}return n.filter((function(t){return t.geometry}))}(this.features)),this.sortFeaturesByKey&&this.features.sort((function(t,e){return t.sortKey-e.sortKey}))}},sc.prototype.update=function(t,e,r){this.stateDependentLayers.length&&(this.text.programConfigurations.updatePaintArrays(t,e,this.layers,r),this.icon.programConfigurations.updatePaintArrays(t,e,this.layers,r))},sc.prototype.isEmpty=function(){return 0===this.symbolInstances.length&&!this.hasRTLText},sc.prototype.uploadPending=function(){return!this.uploaded||this.text.programConfigurations.needsUpload||this.icon.programConfigurations.needsUpload},sc.prototype.upload=function(t){!this.uploaded&&this.hasDebugData()&&(this.textCollisionBox.upload(t),this.iconCollisionBox.upload(t)),this.text.upload(t,this.sortFeaturesByY,!this.uploaded,this.text.programConfigurations.needsUpload),this.icon.upload(t,this.sortFeaturesByY,!this.uploaded,this.icon.programConfigurations.needsUpload),this.uploaded=!0},sc.prototype.destroyDebugData=function(){this.textCollisionBox.destroy(),this.iconCollisionBox.destroy()},sc.prototype.destroy=function(){this.text.destroy(),this.icon.destroy(),this.hasDebugData()&&this.destroyDebugData()},sc.prototype.addToLineVertexArray=function(t,e){var r=this.lineVertexArray.length;if(void 0!==t.segment){for(var n=t.dist(e[t.segment+1]),i=t.dist(e[t.segment]),a={},o=t.segment+1;o<e.length;o++)a[o]={x:e[o].x,y:e[o].y,tileUnitDistanceFromAnchor:n},o<e.length-1&&(n+=e[o+1].dist(e[o]));for(var s=t.segment||0;s>=0;s--)a[s]={x:e[s].x,y:e[s].y,tileUnitDistanceFromAnchor:i},s>0&&(i+=e[s-1].dist(e[s]));for(var l=0;l<e.length;l++){var u=a[l];this.lineVertexArray.emplaceBack(u.x,u.y,u.tileUnitDistanceFromAnchor)}}return{lineStartIndex:r,lineLength:this.lineVertexArray.length-r}},sc.prototype.addSymbols=function(t,e,r,n,i,a,o,s,l,u,c,f){for(var h=t.indexArray,p=t.layoutVertexArray,d=t.segments.prepareSegment(4*e.length,p,h,a.sortKey),v=this.glyphOffsetArray.length,g=d.vertexLength,y=this.allowVerticalPlacement&&o===nu.vertical?Math.PI/2:0,m=a.text&&a.text.sections,x=0;x<e.length;x++){var b=e[x],_=b.tl,w=b.tr,T=b.bl,k=b.br,A=b.tex,M=b.pixelOffsetTL,S=b.pixelOffsetBR,E=b.minFontScaleX,L=b.minFontScaleY,C=b.glyphOffset,P=b.isSDF,O=b.sectionIndex,I=d.vertexLength,D=C[1];rc(p,s.x,s.y,_.x,D+_.y,A.x,A.y,r,P,M.x,M.y,E,L),rc(p,s.x,s.y,w.x,D+w.y,A.x+A.w,A.y,r,P,S.x,M.y,E,L),rc(p,s.x,s.y,T.x,D+T.y,A.x,A.y+A.h,r,P,M.x,S.y,E,L),rc(p,s.x,s.y,k.x,D+k.y,A.x+A.w,A.y+A.h,r,P,S.x,S.y,E,L),nc(t.dynamicLayoutVertexArray,s,y),h.emplaceBack(I,I+1,I+2),h.emplaceBack(I+1,I+2,I+3),d.vertexLength+=4,d.primitiveLength+=2,this.glyphOffsetArray.emplaceBack(C[0]),x!==e.length-1&&O===e[x+1].sectionIndex||t.programConfigurations.populatePaintArrays(p.length,a,a.index,{},f,m&&m[O])}t.placedSymbolArray.emplaceBack(s.x,s.y,v,this.glyphOffsetArray.length-v,g,l,u,s.segment,r?r[0]:0,r?r[1]:0,n[0],n[1],o,0,!1,0,c)},sc.prototype._addCollisionDebugVertex=function(t,e,r,n,i,a){return e.emplaceBack(0,0),t.emplaceBack(r.x,r.y,n,i,Math.round(a.x),Math.round(a.y))},sc.prototype.addCollisionDebugVertices=function(t,e,r,n,i,o,s){var l=i.segments.prepareSegment(4,i.layoutVertexArray,i.indexArray),u=l.vertexLength,c=i.layoutVertexArray,f=i.collisionVertexArray,h=s.anchorX,p=s.anchorY;this._addCollisionDebugVertex(c,f,o,h,p,new a(t,e)),this._addCollisionDebugVertex(c,f,o,h,p,new a(r,e)),this._addCollisionDebugVertex(c,f,o,h,p,new a(r,n)),this._addCollisionDebugVertex(c,f,o,h,p,new a(t,n)),l.vertexLength+=4;var d=i.indexArray;d.emplaceBack(u,u+1),d.emplaceBack(u+1,u+2),d.emplaceBack(u+2,u+3),d.emplaceBack(u+3,u),l.primitiveLength+=4},sc.prototype.addDebugCollisionBoxes=function(t,e,r,n){for(var i=t;i<e;i++){var a=this.collisionBoxArray.get(i),o=a.x1,s=a.y1,l=a.x2,u=a.y2;this.addCollisionDebugVertices(o,s,l,u,n?this.textCollisionBox:this.iconCollisionBox,a.anchorPoint,r)}},sc.prototype.generateCollisionDebugBuffers=function(){this.hasDebugData()&&this.destroyDebugData(),this.textCollisionBox=new oc(la,bl.members,ya),this.iconCollisionBox=new oc(la,bl.members,ya);for(var t=0;t<this.symbolInstances.length;t++){var e=this.symbolInstances.get(t);this.addDebugCollisionBoxes(e.textBoxStartIndex,e.textBoxEndIndex,e,!0),this.addDebugCollisionBoxes(e.verticalTextBoxStartIndex,e.verticalTextBoxEndIndex,e,!0),this.addDebugCollisionBoxes(e.iconBoxStartIndex,e.iconBoxEndIndex,e,!1),this.addDebugCollisionBoxes(e.verticalIconBoxStartIndex,e.verticalIconBoxEndIndex,e,!1)}},sc.prototype._deserializeCollisionBoxesForSymbol=function(t,e,r,n,i,a,o,s,l){for(var u={},c=e;c<r;c++){var f=t.get(c);u.textBox={x1:f.x1,y1:f.y1,x2:f.x2,y2:f.y2,anchorPointX:f.anchorPointX,anchorPointY:f.anchorPointY},u.textFeatureIndex=f.featureIndex;break}for(var h=n;h<i;h++){var p=t.get(h);u.verticalTextBox={x1:p.x1,y1:p.y1,x2:p.x2,y2:p.y2,anchorPointX:p.anchorPointX,anchorPointY:p.anchorPointY},u.verticalTextFeatureIndex=p.featureIndex;break}for(var d=a;d<o;d++){var v=t.get(d);u.iconBox={x1:v.x1,y1:v.y1,x2:v.x2,y2:v.y2,anchorPointX:v.anchorPointX,anchorPointY:v.anchorPointY},u.iconFeatureIndex=v.featureIndex;break}for(var g=s;g<l;g++){var y=t.get(g);u.verticalIconBox={x1:y.x1,y1:y.y1,x2:y.x2,y2:y.y2,anchorPointX:y.anchorPointX,anchorPointY:y.anchorPointY},u.verticalIconFeatureIndex=y.featureIndex;break}return u},sc.prototype.deserializeCollisionBoxes=function(t){this.collisionArrays=[];for(var e=0;e<this.symbolInstances.length;e++){var r=this.symbolInstances.get(e);this.collisionArrays.push(this._deserializeCollisionBoxesForSymbol(t,r.textBoxStartIndex,r.textBoxEndIndex,r.verticalTextBoxStartIndex,r.verticalTextBoxEndIndex,r.iconBoxStartIndex,r.iconBoxEndIndex,r.verticalIconBoxStartIndex,r.verticalIconBoxEndIndex))}},sc.prototype.hasTextData=function(){return this.text.segments.get().length>0},sc.prototype.hasIconData=function(){return this.icon.segments.get().length>0},sc.prototype.hasDebugData=function(){return this.textCollisionBox&&this.iconCollisionBox},sc.prototype.hasTextCollisionBoxData=function(){return this.hasDebugData()&&this.textCollisionBox.segments.get().length>0},sc.prototype.hasIconCollisionBoxData=function(){return this.hasDebugData()&&this.iconCollisionBox.segments.get().length>0},sc.prototype.addIndicesForPlacedSymbol=function(t,e){for(var r=t.placedSymbolArray.get(e),n=r.vertexStartIndex+4*r.numGlyphs,i=r.vertexStartIndex;i<n;i+=4)t.indexArray.emplaceBack(i,i+1,i+2),t.indexArray.emplaceBack(i+1,i+2,i+3)},sc.prototype.getSortedSymbolIndexes=function(t){if(this.sortedAngle===t&&void 0!==this.symbolInstanceIndexes)return this.symbolInstanceIndexes;for(var e=Math.sin(t),r=Math.cos(t),n=[],i=[],a=[],o=0;o<this.symbolInstances.length;++o){a.push(o);var s=this.symbolInstances.get(o);n.push(0|Math.round(e*s.anchorX+r*s.anchorY)),i.push(s.featureIndex)}return a.sort((function(t,e){return n[t]-n[e]||i[e]-i[t]})),a},sc.prototype.addToSortKeyRanges=function(t,e){var r=this.sortKeyRanges[this.sortKeyRanges.length-1];r&&r.sortKey===e?r.symbolInstanceEnd=t+1:this.sortKeyRanges.push({sortKey:e,symbolInstanceStart:t,symbolInstanceEnd:t+1})},sc.prototype.sortFeatures=function(t){var e=this;if(this.sortFeaturesByY&&this.sortedAngle!==t&&!(this.text.segments.get().length>1||this.icon.segments.get().length>1)){this.symbolInstanceIndexes=this.getSortedSymbolIndexes(t),this.sortedAngle=t,this.text.indexArray.clear(),this.icon.indexArray.clear(),this.featureSortOrder=[];for(var r=0,n=this.symbolInstanceIndexes;r<n.length;r+=1){var i=n[r],a=this.symbolInstances.get(i);this.featureSortOrder.push(a.featureIndex),[a.rightJustifiedTextSymbolIndex,a.centerJustifiedTextSymbolIndex,a.leftJustifiedTextSymbolIndex].forEach((function(t,r,n){t>=0&&n.indexOf(t)===r&&e.addIndicesForPlacedSymbol(e.text,t)})),a.verticalPlacedTextSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.text,a.verticalPlacedTextSymbolIndex),a.placedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,a.placedIconSymbolIndex),a.verticalPlacedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,a.verticalPlacedIconSymbolIndex)}this.text.indexBuffer&&this.text.indexBuffer.updateData(this.text.indexArray),this.icon.indexBuffer&&this.icon.indexBuffer.updateData(this.icon.indexArray)}},ni("SymbolBucket",sc,{omit:["layers","collisionBoxArray","features","compareText"]}),sc.MAX_GLYPHS=65535,sc.addDynamicAttributes=nc;var lc=new Gi({"symbol-placement":new ji(Dt.layout_symbol["symbol-placement"]),"symbol-spacing":new ji(Dt.layout_symbol["symbol-spacing"]),"symbol-avoid-edges":new ji(Dt.layout_symbol["symbol-avoid-edges"]),"symbol-sort-key":new Ui(Dt.layout_symbol["symbol-sort-key"]),"symbol-z-order":new ji(Dt.layout_symbol["symbol-z-order"]),"icon-allow-overlap":new ji(Dt.layout_symbol["icon-allow-overlap"]),"icon-ignore-placement":new ji(Dt.layout_symbol["icon-ignore-placement"]),"icon-optional":new ji(Dt.layout_symbol["icon-optional"]),"icon-rotation-alignment":new ji(Dt.layout_symbol["icon-rotation-alignment"]),"icon-size":new Ui(Dt.layout_symbol["icon-size"]),"icon-text-fit":new ji(Dt.layout_symbol["icon-text-fit"]),"icon-text-fit-padding":new ji(Dt.layout_symbol["icon-text-fit-padding"]),"icon-image":new Ui(Dt.layout_symbol["icon-image"]),"icon-rotate":new Ui(Dt.layout_symbol["icon-rotate"]),"icon-padding":new ji(Dt.layout_symbol["icon-padding"]),"icon-keep-upright":new ji(Dt.layout_symbol["icon-keep-upright"]),"icon-offset":new Ui(Dt.layout_symbol["icon-offset"]),"icon-anchor":new Ui(Dt.layout_symbol["icon-anchor"]),"icon-pitch-alignment":new ji(Dt.layout_symbol["icon-pitch-alignment"]),"text-pitch-alignment":new ji(Dt.layout_symbol["text-pitch-alignment"]),"text-rotation-alignment":new ji(Dt.layout_symbol["text-rotation-alignment"]),"text-field":new Ui(Dt.layout_symbol["text-field"]),"text-font":new Ui(Dt.layout_symbol["text-font"]),"text-size":new Ui(Dt.layout_symbol["text-size"]),"text-max-width":new Ui(Dt.layout_symbol["text-max-width"]),"text-line-height":new ji(Dt.layout_symbol["text-line-height"]),"text-letter-spacing":new Ui(Dt.layout_symbol["text-letter-spacing"]),"text-justify":new Ui(Dt.layout_symbol["text-justify"]),"text-radial-offset":new Ui(Dt.layout_symbol["text-radial-offset"]),"text-variable-anchor":new ji(Dt.layout_symbol["text-variable-anchor"]),"text-anchor":new Ui(Dt.layout_symbol["text-anchor"]),"text-max-angle":new ji(Dt.layout_symbol["text-max-angle"]),"text-writing-mode":new ji(Dt.layout_symbol["text-writing-mode"]),"text-rotate":new Ui(Dt.layout_symbol["text-rotate"]),"text-padding":new ji(Dt.layout_symbol["text-padding"]),"text-keep-upright":new ji(Dt.layout_symbol["text-keep-upright"]),"text-transform":new Ui(Dt.layout_symbol["text-transform"]),"text-offset":new Ui(Dt.layout_symbol["text-offset"]),"text-allow-overlap":new ji(Dt.layout_symbol["text-allow-overlap"]),"text-ignore-placement":new ji(Dt.layout_symbol["text-ignore-placement"]),"text-optional":new ji(Dt.layout_symbol["text-optional"])}),uc={paint:new Gi({"icon-opacity":new Ui(Dt.paint_symbol["icon-opacity"]),"icon-color":new Ui(Dt.paint_symbol["icon-color"]),"icon-halo-color":new Ui(Dt.paint_symbol["icon-halo-color"]),"icon-halo-width":new Ui(Dt.paint_symbol["icon-halo-width"]),"icon-halo-blur":new Ui(Dt.paint_symbol["icon-halo-blur"]),"icon-translate":new ji(Dt.paint_symbol["icon-translate"]),"icon-translate-anchor":new ji(Dt.paint_symbol["icon-translate-anchor"]),"text-opacity":new Ui(Dt.paint_symbol["text-opacity"]),"text-color":new Ui(Dt.paint_symbol["text-color"],{runtimeType:Zt,getOverride:function(t){return t.textColor},hasOverride:function(t){return!!t.textColor}}),"text-halo-color":new Ui(Dt.paint_symbol["text-halo-color"]),"text-halo-width":new Ui(Dt.paint_symbol["text-halo-width"]),"text-halo-blur":new Ui(Dt.paint_symbol["text-halo-blur"]),"text-translate":new ji(Dt.paint_symbol["text-translate"]),"text-translate-anchor":new ji(Dt.paint_symbol["text-translate-anchor"])}),layout:lc},cc=function(t){this.type=t.property.overrides?t.property.overrides.runtimeType:Vt,this.defaultValue=t};cc.prototype.evaluate=function(t){if(t.formattedSection){var e=this.defaultValue.property.overrides;if(e&&e.hasOverride(t.formattedSection))return e.getOverride(t.formattedSection)}return t.feature&&t.featureState?this.defaultValue.evaluate(t.feature,t.featureState):this.defaultValue.property.specification.default},cc.prototype.eachChild=function(t){this.defaultValue.isConstant()||t(this.defaultValue.value._styleExpression.expression)},cc.prototype.outputDefined=function(){return!1},cc.prototype.serialize=function(){return null},ni("FormatSectionOverride",cc,{omit:["defaultValue"]});var fc=function(t){function e(e){t.call(this,e,uc)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.recalculate=function(e,r){if(t.prototype.recalculate.call(this,e,r),"auto"===this.layout.get("icon-rotation-alignment")&&("point"!==this.layout.get("symbol-placement")?this.layout._values["icon-rotation-alignment"]="map":this.layout._values["icon-rotation-alignment"]="viewport"),"auto"===this.layout.get("text-rotation-alignment")&&("point"!==this.layout.get("symbol-placement")?this.layout._values["text-rotation-alignment"]="map":this.layout._values["text-rotation-alignment"]="viewport"),"auto"===this.layout.get("text-pitch-alignment")&&(this.layout._values["text-pitch-alignment"]=this.layout.get("text-rotation-alignment")),"auto"===this.layout.get("icon-pitch-alignment")&&(this.layout._values["icon-pitch-alignment"]=this.layout.get("icon-rotation-alignment")),"point"===this.layout.get("symbol-placement")){var n=this.layout.get("text-writing-mode");if(n){for(var i=[],a=0,o=n;a<o.length;a+=1){var s=o[a];i.indexOf(s)<0&&i.push(s)}this.layout._values["text-writing-mode"]=i}else this.layout._values["text-writing-mode"]=["horizontal"]}this._setPaintOverrides()},e.prototype.getValueAndResolveTokens=function(t,e,r,n){var i=this.layout.get(t).evaluate(e,{},r,n),a=this._unevaluatedLayout._values[t];return a.isDataDriven()||sn(a.value)||!i?i:function(t,e){return e.replace(/{([^{}]+)}/g,(function(e,r){return r in t?String(t[r]):""}))}(e.properties,i)},e.prototype.createBucket=function(t){return new sc(t)},e.prototype.queryRadius=function(){return 0},e.prototype.queryIntersectsFeature=function(){return!1},e.prototype._setPaintOverrides=function(){for(var t=0,r=uc.paint.overridableProperties;t<r.length;t+=1){var n=r[t];if(e.hasPaintOverride(this.layout,n)){var i,a=this.paint.get(n),o=new cc(a),s=new on(o,a.property.specification);i="constant"===a.value.kind||"source"===a.value.kind?new un("source",s):new cn("composite",s,a.value.zoomStops,a.value._interpolationType),this.paint._values[n]=new Bi(a.property,i,a.parameters)}}},e.prototype._handleOverridablePaintPropertyUpdate=function(t,r,n){return!(!this.layout||r.isDataDriven()||n.isDataDriven())&&e.hasPaintOverride(this.layout,t)},e.hasPaintOverride=function(t,e){var r=t.get("text-field"),n=uc.paint.properties[e],i=!1,a=function(t){for(var e=0,r=t;e<r.length;e+=1){var a=r[e];if(n.overrides&&n.overrides.hasOverride(a))return void(i=!0)}};if("constant"===r.value.kind&&r.value.value instanceof ue)a(r.value.value.sections);else if("source"===r.value.kind){var o=function(t){if(!i)if(t instanceof ve&&pe(t.value)===Jt){var e=t.value;a(e.sections)}else t instanceof xe?a(t.sections):t.eachChild(o)},s=r.value;s._styleExpression&&o(s._styleExpression.expression)}return i},e}(Yi),hc={paint:new Gi({"background-color":new ji(Dt.paint_background["background-color"]),"background-pattern":new Hi(Dt.paint_background["background-pattern"]),"background-opacity":new ji(Dt.paint_background["background-opacity"])})},pc=function(t){function e(e){t.call(this,e,hc)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Yi),dc={paint:new Gi({"raster-opacity":new ji(Dt.paint_raster["raster-opacity"]),"raster-hue-rotate":new ji(Dt.paint_raster["raster-hue-rotate"]),"raster-brightness-min":new ji(Dt.paint_raster["raster-brightness-min"]),"raster-brightness-max":new ji(Dt.paint_raster["raster-brightness-max"]),"raster-saturation":new ji(Dt.paint_raster["raster-saturation"]),"raster-contrast":new ji(Dt.paint_raster["raster-contrast"]),"raster-resampling":new ji(Dt.paint_raster["raster-resampling"]),"raster-fade-duration":new ji(Dt.paint_raster["raster-fade-duration"])})},vc=function(t){function e(e){t.call(this,e,dc)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Yi);var gc=function(t){function e(e){t.call(this,e,{}),this.implementation=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.is3D=function(){return"3d"===this.implementation.renderingMode},e.prototype.hasOffscreenPass=function(){return void 0!==this.implementation.prerender},e.prototype.recalculate=function(){},e.prototype.updateTransitions=function(){},e.prototype.hasTransition=function(){},e.prototype.serialize=function(){},e.prototype.onAdd=function(t){this.implementation.onAdd&&this.implementation.onAdd(t,t.painter.context.gl)},e.prototype.onRemove=function(t){this.implementation.onRemove&&this.implementation.onRemove(t,t.painter.context.gl)},e}(Yi),yc={circle:Uo,heatmap:Ko,hillshade:Qo,fill:js,"fill-extrusion":nl,line:vl,symbol:fc,background:pc,raster:vc};var mc=self.HTMLImageElement,xc=self.HTMLCanvasElement,bc=self.HTMLVideoElement,_c=self.ImageData,wc=self.ImageBitmap,Tc=function(t,e,r,n){this.context=t,this.format=r,this.texture=t.gl.createTexture(),this.update(e,n)};Tc.prototype.update=function(t,e,r){var n=t.width,i=t.height,a=!(this.size&&this.size[0]===n&&this.size[1]===i||r),o=this.context,s=o.gl;if(this.useMipmap=Boolean(e&&e.useMipmap),s.bindTexture(s.TEXTURE_2D,this.texture),o.pixelStoreUnpackFlipY.set(!1),o.pixelStoreUnpack.set(1),o.pixelStoreUnpackPremultiplyAlpha.set(this.format===s.RGBA&&(!e||!1!==e.premultiply)),a)this.size=[n,i],t instanceof mc||t instanceof xc||t instanceof bc||t instanceof _c||wc&&t instanceof wc?s.texImage2D(s.TEXTURE_2D,0,this.format,this.format,s.UNSIGNED_BYTE,t):s.texImage2D(s.TEXTURE_2D,0,this.format,n,i,0,this.format,s.UNSIGNED_BYTE,t.data);else{var l=r||{x:0,y:0},u=l.x,c=l.y;t instanceof mc||t instanceof xc||t instanceof bc||t instanceof _c||wc&&t instanceof wc?s.texSubImage2D(s.TEXTURE_2D,0,u,c,s.RGBA,s.UNSIGNED_BYTE,t):s.texSubImage2D(s.TEXTURE_2D,0,u,c,n,i,s.RGBA,s.UNSIGNED_BYTE,t.data)}this.useMipmap&&this.isSizePowerOfTwo()&&s.generateMipmap(s.TEXTURE_2D)},Tc.prototype.bind=function(t,e,r){var n=this.context.gl;n.bindTexture(n.TEXTURE_2D,this.texture),r!==n.LINEAR_MIPMAP_NEAREST||this.isSizePowerOfTwo()||(r=n.LINEAR),t!==this.filter&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,t),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,r||t),this.filter=t),e!==this.wrap&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,e),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,e),this.wrap=e)},Tc.prototype.isSizePowerOfTwo=function(){return this.size[0]===this.size[1]&&Math.log(this.size[0])/Math.LN2%1==0},Tc.prototype.destroy=function(){this.context.gl.deleteTexture(this.texture),this.texture=null};var kc=function(t){var e=this;this._callback=t,this._triggered=!1,"undefined"!=typeof MessageChannel&&(this._channel=new MessageChannel,this._channel.port2.onmessage=function(){e._triggered=!1,e._callback()})};kc.prototype.trigger=function(){var t=this;this._triggered||(this._triggered=!0,this._channel?this._channel.port1.postMessage(!0):setTimeout((function(){t._triggered=!1,t._callback()}),0))},kc.prototype.remove=function(){delete this._channel,this._callback=function(){}};var Ac=function(t,e,r){this.target=t,this.parent=e,this.mapId=r,this.callbacks={},this.tasks={},this.taskQueue=[],this.cancelCallbacks={},g(["receive","process"],this),this.invoker=new kc(this.process),this.target.addEventListener("message",this.receive,!1),this.globalScope=A()?t:self};function Mc(t,e,r){var n=2*Math.PI*6378137/256/Math.pow(2,r);return[t*n-2*Math.PI*6378137/2,e*n-2*Math.PI*6378137/2]}Ac.prototype.send=function(t,e,r,n,i){var a=this;void 0===i&&(i=!1);var o=Math.round(1e18*Math.random()).toString(36).substring(0,10);r&&(this.callbacks[o]=r);var s=E(this.globalScope)?void 0:[];return this.target.postMessage({id:o,type:t,hasCallback:!!r,targetMapId:n,mustQueue:i,sourceMapId:this.mapId,data:si(e,s)},s),{cancel:function(){r&&delete a.callbacks[o],a.target.postMessage({id:o,type:"<cancel>",targetMapId:n,sourceMapId:a.mapId})}}},Ac.prototype.receive=function(t){var e=t.data,r=e.id;if(r&&(!e.targetMapId||this.mapId===e.targetMapId))if("<cancel>"===e.type){delete this.tasks[r];var n=this.cancelCallbacks[r];delete this.cancelCallbacks[r],n&&n()}else A()||e.mustQueue?(this.tasks[r]=e,this.taskQueue.push(r),this.invoker.trigger()):this.processTask(r,e)},Ac.prototype.process=function(){if(this.taskQueue.length){var t=this.taskQueue.shift(),e=this.tasks[t];delete this.tasks[t],this.taskQueue.length&&this.invoker.trigger(),e&&this.processTask(t,e)}},Ac.prototype.processTask=function(t,e){var r=this;if("<response>"===e.type){var n=this.callbacks[t];delete this.callbacks[t],n&&(e.error?n(li(e.error)):n(null,li(e.data)))}else{var i=!1,a=E(this.globalScope)?void 0:[],o=e.hasCallback?function(e,n){i=!0,delete r.cancelCallbacks[t],r.target.postMessage({id:t,type:"<response>",sourceMapId:r.mapId,error:e?si(e):null,data:si(n,a)},a)}:function(t){i=!0},s=null,l=li(e.data);if(this.parent[e.type])s=this.parent[e.type](e.sourceMapId,l,o);else if(this.parent.getWorkerSource){var u=e.type.split(".");s=this.parent.getWorkerSource(e.sourceMapId,u[0],l.source)[u[1]](l,o)}else o(new Error("Could not find function "+e.type));!i&&s&&s.cancel&&(this.cancelCallbacks[t]=s.cancel)}},Ac.prototype.remove=function(){this.invoker.remove(),this.target.removeEventListener("message",this.receive,!1)};var Sc=function(t,e){t&&(e?this.setSouthWest(t).setNorthEast(e):4===t.length?this.setSouthWest([t[0],t[1]]).setNorthEast([t[2],t[3]]):this.setSouthWest(t[0]).setNorthEast(t[1]))};Sc.prototype.setNorthEast=function(t){return this._ne=t instanceof Lc?new Lc(t.lng,t.lat):Lc.convert(t),this},Sc.prototype.setSouthWest=function(t){return this._sw=t instanceof Lc?new Lc(t.lng,t.lat):Lc.convert(t),this},Sc.prototype.extend=function(t){var e,r,n=this._sw,i=this._ne;if(t instanceof Lc)e=t,r=t;else{if(!(t instanceof Sc)){if(Array.isArray(t)){if(4===t.length||t.every(Array.isArray)){var a=t;return this.extend(Sc.convert(a))}var o=t;return this.extend(Lc.convert(o))}return this}if(e=t._sw,r=t._ne,!e||!r)return this}return n||i?(n.lng=Math.min(e.lng,n.lng),n.lat=Math.min(e.lat,n.lat),i.lng=Math.max(r.lng,i.lng),i.lat=Math.max(r.lat,i.lat)):(this._sw=new Lc(e.lng,e.lat),this._ne=new Lc(r.lng,r.lat)),this},Sc.prototype.getCenter=function(){return new Lc((this._sw.lng+this._ne.lng)/2,(this._sw.lat+this._ne.lat)/2)},Sc.prototype.getSouthWest=function(){return this._sw},Sc.prototype.getNorthEast=function(){return this._ne},Sc.prototype.getNorthWest=function(){return new Lc(this.getWest(),this.getNorth())},Sc.prototype.getSouthEast=function(){return new Lc(this.getEast(),this.getSouth())},Sc.prototype.getWest=function(){return this._sw.lng},Sc.prototype.getSouth=function(){return this._sw.lat},Sc.prototype.getEast=function(){return this._ne.lng},Sc.prototype.getNorth=function(){return this._ne.lat},Sc.prototype.toArray=function(){return[this._sw.toArray(),this._ne.toArray()]},Sc.prototype.toString=function(){return"LngLatBounds("+this._sw.toString()+", "+this._ne.toString()+")"},Sc.prototype.isEmpty=function(){return!(this._sw&&this._ne)},Sc.prototype.contains=function(t){var e=Lc.convert(t),r=e.lng,n=e.lat,i=this._sw.lat<=n&&n<=this._ne.lat,a=this._sw.lng<=r&&r<=this._ne.lng;return this._sw.lng>this._ne.lng&&(a=this._sw.lng>=r&&r>=this._ne.lng),i&&a},Sc.convert=function(t){return!t||t instanceof Sc?t:new Sc(t)};var Ec=6371008.8,Lc=function(t,e){if(isNaN(t)||isNaN(e))throw new Error("Invalid LngLat object: ("+t+", "+e+")");if(this.lng=+t,this.lat=+e,this.lat>90||this.lat<-90)throw new Error("Invalid LngLat latitude value: must be between -90 and 90")};Lc.prototype.wrap=function(){return new Lc(c(this.lng,-180,180),this.lat)},Lc.prototype.toArray=function(){return[this.lng,this.lat]},Lc.prototype.toString=function(){return"LngLat("+this.lng+", "+this.lat+")"},Lc.prototype.distanceTo=function(t){var e=Math.PI/180,r=this.lat*e,n=t.lat*e,i=Math.sin(r)*Math.sin(n)+Math.cos(r)*Math.cos(n)*Math.cos((t.lng-this.lng)*e);return Ec*Math.acos(Math.min(i,1))},Lc.prototype.toBounds=function(t){void 0===t&&(t=0);var e=360*t/40075017,r=e/Math.cos(Math.PI/180*this.lat);return new Sc(new Lc(this.lng-r,this.lat-e),new Lc(this.lng+r,this.lat+e))},Lc.convert=function(t){if(t instanceof Lc)return t;if(Array.isArray(t)&&(2===t.length||3===t.length))return new Lc(Number(t[0]),Number(t[1]));if(!Array.isArray(t)&&"object"==typeof t&&null!==t)return new Lc(Number("lng"in t?t.lng:t.lon),Number(t.lat));throw new Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: <lng>, lat: <lat>}, an object {lon: <lng>, lat: <lat>}, or an array of [<lng>, <lat>]")};var Cc=2*Math.PI*Ec;function Pc(t){return Cc*Math.cos(t*Math.PI/180)}function Oc(t){return(180+t)/360}function Ic(t){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t*Math.PI/360)))/360}function Dc(t,e){return t/Pc(e)}function zc(t){var e=180-360*t;return 360/Math.PI*Math.atan(Math.exp(e*Math.PI/180))-90}var Rc=function(t,e,r){void 0===r&&(r=0),this.x=+t,this.y=+e,this.z=+r};Rc.fromLngLat=function(t,e){void 0===e&&(e=0);var r=Lc.convert(t);return new Rc(Oc(r.lng),Ic(r.lat),Dc(e,r.lat))},Rc.prototype.toLngLat=function(){return new Lc(360*this.x-180,zc(this.y))},Rc.prototype.toAltitude=function(){return t=this.z,e=this.y,t*Pc(zc(e));var t,e},Rc.prototype.meterInMercatorCoordinateUnits=function(){return 1/Cc*(t=zc(this.y),1/Math.cos(t*Math.PI/180));var t};var Fc=function(t,e,r){this.z=t,this.x=e,this.y=r,this.key=jc(0,t,t,e,r)};Fc.prototype.equals=function(t){return this.z===t.z&&this.x===t.x&&this.y===t.y},Fc.prototype.url=function(t,e){var r,n,i,a,o,s=(r=this.x,n=this.y,i=this.z,a=Mc(256*r,256*(n=Math.pow(2,i)-n-1),i),o=Mc(256*(r+1),256*(n+1),i),a[0]+","+a[1]+","+o[0]+","+o[1]),l=function(t,e,r){for(var n,i="",a=t;a>0;a--)i+=(e&(n=1<<a-1)?1:0)+(r&n?2:0);return i}(this.z,this.x,this.y);return t[(this.x+this.y)%t.length].replace("{prefix}",(this.x%16).toString(16)+(this.y%16).toString(16)).replace("{z}",String(this.z)).replace("{x}",String(this.x)).replace("{y}",String("tms"===e?Math.pow(2,this.z)-this.y-1:this.y)).replace("{quadkey}",l).replace("{bbox-epsg-3857}",s)},Fc.prototype.getTilePoint=function(t){var e=Math.pow(2,this.z);return new a((t.x*e-this.x)*co,(t.y*e-this.y)*co)},Fc.prototype.toString=function(){return this.z+"/"+this.x+"/"+this.y};var Bc=function(t,e){this.wrap=t,this.canonical=e,this.key=jc(t,e.z,e.z,e.x,e.y)},Nc=function(t,e,r,n,i){this.overscaledZ=t,this.wrap=e,this.canonical=new Fc(r,+n,+i),this.key=jc(e,t,r,n,i)};function jc(t,e,r,n,i){(t*=2)<0&&(t=-1*t-1);var a=1<<r;return(a*a*t+a*i+n).toString(36)+r.toString(36)+e.toString(36)}Nc.prototype.equals=function(t){return this.overscaledZ===t.overscaledZ&&this.wrap===t.wrap&&this.canonical.equals(t.canonical)},Nc.prototype.scaledTo=function(t){var e=this.canonical.z-t;return t>this.canonical.z?new Nc(t,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y):new Nc(t,this.wrap,t,this.canonical.x>>e,this.canonical.y>>e)},Nc.prototype.calculateScaledKey=function(t,e){var r=this.canonical.z-t;return t>this.canonical.z?jc(this.wrap*+e,t,this.canonical.z,this.canonical.x,this.canonical.y):jc(this.wrap*+e,t,t,this.canonical.x>>r,this.canonical.y>>r)},Nc.prototype.isChildOf=function(t){if(t.wrap!==this.wrap)return!1;var e=this.canonical.z-t.canonical.z;return 0===t.overscaledZ||t.overscaledZ<this.overscaledZ&&t.canonical.x===this.canonical.x>>e&&t.canonical.y===this.canonical.y>>e},Nc.prototype.children=function(t){if(this.overscaledZ>=t)return[new Nc(this.overscaledZ+1,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)];var e=this.canonical.z+1,r=2*this.canonical.x,n=2*this.canonical.y;return[new Nc(e,this.wrap,e,r,n),new Nc(e,this.wrap,e,r+1,n),new Nc(e,this.wrap,e,r,n+1),new Nc(e,this.wrap,e,r+1,n+1)]},Nc.prototype.isLessThan=function(t){return this.wrap<t.wrap||!(this.wrap>t.wrap)&&(this.overscaledZ<t.overscaledZ||!(this.overscaledZ>t.overscaledZ)&&(this.canonical.x<t.canonical.x||!(this.canonical.x>t.canonical.x)&&this.canonical.y<t.canonical.y))},Nc.prototype.wrapped=function(){return new Nc(this.overscaledZ,0,this.canonical.z,this.canonical.x,this.canonical.y)},Nc.prototype.unwrapTo=function(t){return new Nc(this.overscaledZ,t,this.canonical.z,this.canonical.x,this.canonical.y)},Nc.prototype.overscaleFactor=function(){return Math.pow(2,this.overscaledZ-this.canonical.z)},Nc.prototype.toUnwrapped=function(){return new Bc(this.wrap,this.canonical)},Nc.prototype.toString=function(){return this.overscaledZ+"/"+this.canonical.x+"/"+this.canonical.y},Nc.prototype.getTilePoint=function(t){return this.canonical.getTilePoint(new Rc(t.x-this.wrap,t.y))},ni("CanonicalTileID",Fc),ni("OverscaledTileID",Nc,{omit:["posMatrix"]});var Uc=function(t,e,r){if(this.uid=t,e.height!==e.width)throw new RangeError("DEM tiles must be square");if(r&&"mapbox"!==r&&"terrarium"!==r)return w('"'+r+'" is not a valid encoding type. Valid types include "mapbox" and "terrarium".');this.stride=e.height;var n=this.dim=e.height-2;this.data=new Uint32Array(e.data.buffer),this.encoding=r||"mapbox";for(var i=0;i<n;i++)this.data[this._idx(-1,i)]=this.data[this._idx(0,i)],this.data[this._idx(n,i)]=this.data[this._idx(n-1,i)],this.data[this._idx(i,-1)]=this.data[this._idx(i,0)],this.data[this._idx(i,n)]=this.data[this._idx(i,n-1)];this.data[this._idx(-1,-1)]=this.data[this._idx(0,0)],this.data[this._idx(n,-1)]=this.data[this._idx(n-1,0)],this.data[this._idx(-1,n)]=this.data[this._idx(0,n-1)],this.data[this._idx(n,n)]=this.data[this._idx(n-1,n-1)]};Uc.prototype.get=function(t,e){var r=new Uint8Array(this.data.buffer),n=4*this._idx(t,e);return("terrarium"===this.encoding?this._unpackTerrarium:this._unpackMapbox)(r[n],r[n+1],r[n+2])},Uc.prototype.getUnpackVector=function(){return"terrarium"===this.encoding?[256,1,1/256,32768]:[6553.6,25.6,.1,1e4]},Uc.prototype._idx=function(t,e){if(t<-1||t>=this.dim+1||e<-1||e>=this.dim+1)throw new RangeError("out of range source coordinates for DEM data");return(e+1)*this.stride+(t+1)},Uc.prototype._unpackMapbox=function(t,e,r){return(256*t*256+256*e+r)/10-1e4},Uc.prototype._unpackTerrarium=function(t,e,r){return 256*t+e+r/256-32768},Uc.prototype.getPixels=function(){return new Wo({width:this.stride,height:this.stride},new Uint8Array(this.data.buffer))},Uc.prototype.backfillBorder=function(t,e,r){if(this.dim!==t.dim)throw new Error("dem dimension mismatch");var n=e*this.dim,i=e*this.dim+this.dim,a=r*this.dim,o=r*this.dim+this.dim;switch(e){case-1:n=i-1;break;case 1:i=n+1}switch(r){case-1:a=o-1;break;case 1:o=a+1}for(var s=-e*this.dim,l=-r*this.dim,u=a;u<o;u++)for(var c=n;c<i;c++)this.data[this._idx(c,u)]=t.data[this._idx(c+s,u+l)]},ni("DEMData",Uc);var Vc=function(t){this._stringToNumber={},this._numberToString=[];for(var e=0;e<t.length;e++){var r=t[e];this._stringToNumber[r]=e,this._numberToString[e]=r}};Vc.prototype.encode=function(t){return this._stringToNumber[t]},Vc.prototype.decode=function(t){return this._numberToString[t]};var Hc=function(t,e,r,n,i){this.type="Feature",this._vectorTileFeature=t,t._z=e,t._x=r,t._y=n,this.properties=t.properties,this.id=i},qc={geometry:{configurable:!0}};qc.geometry.get=function(){return void 0===this._geometry&&(this._geometry=this._vectorTileFeature.toGeoJSON(this._vectorTileFeature._x,this._vectorTileFeature._y,this._vectorTileFeature._z).geometry),this._geometry},qc.geometry.set=function(t){this._geometry=t},Hc.prototype.toJSON=function(){var t={geometry:this.geometry};for(var e in this)"_geometry"!==e&&"_vectorTileFeature"!==e&&(t[e]=this[e]);return t},Object.defineProperties(Hc.prototype,qc);var Gc=function(){this.state={},this.stateChanges={},this.deletedStates={}};Gc.prototype.updateState=function(t,e,r){var n=String(e);if(this.stateChanges[t]=this.stateChanges[t]||{},this.stateChanges[t][n]=this.stateChanges[t][n]||{},f(this.stateChanges[t][n],r),null===this.deletedStates[t])for(var i in this.deletedStates[t]={},this.state[t])i!==n&&(this.deletedStates[t][i]=null);else if(this.deletedStates[t]&&null===this.deletedStates[t][n])for(var a in this.deletedStates[t][n]={},this.state[t][n])r[a]||(this.deletedStates[t][n][a]=null);else for(var o in r)this.deletedStates[t]&&this.deletedStates[t][n]&&null===this.deletedStates[t][n][o]&&delete this.deletedStates[t][n][o]},Gc.prototype.removeFeatureState=function(t,e,r){if(null!==this.deletedStates[t]){var n=String(e);if(this.deletedStates[t]=this.deletedStates[t]||{},r&&void 0!==e)null!==this.deletedStates[t][n]&&(this.deletedStates[t][n]=this.deletedStates[t][n]||{},this.deletedStates[t][n][r]=null);else if(void 0!==e)if(this.stateChanges[t]&&this.stateChanges[t][n])for(r in this.deletedStates[t][n]={},this.stateChanges[t][n])this.deletedStates[t][n][r]=null;else this.deletedStates[t][n]=null;else this.deletedStates[t]=null}},Gc.prototype.getState=function(t,e){var r=String(e),n=this.state[t]||{},i=this.stateChanges[t]||{},a=f({},n[r],i[r]);if(null===this.deletedStates[t])return{};if(this.deletedStates[t]){var o=this.deletedStates[t][e];if(null===o)return{};for(var s in o)delete a[s]}return a},Gc.prototype.initializeTileState=function(t,e){t.setFeatureState(this.state,e)},Gc.prototype.coalesceChanges=function(t,e){var r={};for(var n in this.stateChanges){this.state[n]=this.state[n]||{};var i={};for(var a in this.stateChanges[n])this.state[n][a]||(this.state[n][a]={}),f(this.state[n][a],this.stateChanges[n][a]),i[a]=this.state[n][a];r[n]=i}for(var o in this.deletedStates){this.state[o]=this.state[o]||{};var s={};if(null===this.deletedStates[o])for(var l in this.state[o])s[l]={},this.state[o][l]={};else for(var u in this.deletedStates[o]){if(null===this.deletedStates[o][u])this.state[o][u]={};else for(var c=0,h=Object.keys(this.deletedStates[o][u]);c<h.length;c+=1){var p=h[c];delete this.state[o][u][p]}s[u]=this.state[o][u]}r[o]=r[o]||{},f(r[o],s)}if(this.stateChanges={},this.deletedStates={},0!==Object.keys(r).length)for(var d in t)t[d].setFeatureState(r,e)};var Zc=function(t,e){this.tileID=t,this.x=t.canonical.x,this.y=t.canonical.y,this.z=t.canonical.z,this.grid=new Kn(co,16,0),this.grid3D=new Kn(co,16,0),this.featureIndexArray=new Ca,this.promoteId=e};function Yc(t,e,r,n,i){return m(t,(function(t,a){var o=e instanceof Ni?e.get(a):null;return o&&o.evaluate?o.evaluate(r,n,i):o}))}function Wc(t){for(var e=1/0,r=1/0,n=-1/0,i=-1/0,a=0,o=t;a<o.length;a+=1){var s=o[a];e=Math.min(e,s.x),r=Math.min(r,s.y),n=Math.max(n,s.x),i=Math.max(i,s.y)}return{minX:e,minY:r,maxX:n,maxY:i}}function Xc(t,e){return e-t}Zc.prototype.insert=function(t,e,r,n,i,a){var o=this.featureIndexArray.length;this.featureIndexArray.emplaceBack(r,n,i);for(var s=a?this.grid3D:this.grid,l=0;l<e.length;l++){for(var u=e[l],c=[1/0,1/0,-1/0,-1/0],f=0;f<u.length;f++){var h=u[f];c[0]=Math.min(c[0],h.x),c[1]=Math.min(c[1],h.y),c[2]=Math.max(c[2],h.x),c[3]=Math.max(c[3],h.y)}c[0]<co&&c[1]<co&&c[2]>=0&&c[3]>=0&&s.insert(o,c[0],c[1],c[2],c[3])}},Zc.prototype.loadVTLayers=function(){return this.vtLayers||(this.vtLayers=new Js.VectorTile(new Sl(this.rawTileData)).layers,this.sourceLayerCoder=new Vc(this.vtLayers?Object.keys(this.vtLayers).sort():["_geojsonTileLayer"])),this.vtLayers},Zc.prototype.query=function(t,e,r,n){var i=this;this.loadVTLayers();for(var o=t.params||{},s=co/t.tileSize/t.scale,l=wn(o.filter),u=t.queryGeometry,c=t.queryPadding*s,f=Wc(u),h=this.grid.query(f.minX-c,f.minY-c,f.maxX+c,f.maxY+c),p=Wc(t.cameraQueryGeometry),d=0,v=this.grid3D.query(p.minX-c,p.minY-c,p.maxX+c,p.maxY+c,(function(e,r,n,i){return function(t,e,r,n,i){for(var o=0,s=t;o<s.length;o+=1){var l=s[o];if(e<=l.x&&r<=l.y&&n>=l.x&&i>=l.y)return!0}var u=[new a(e,r),new a(e,i),new a(n,i),new a(n,r)];if(t.length>2)for(var c=0,f=u;c<f.length;c+=1)if(Mo(t,f[c]))return!0;for(var h=0;h<t.length-1;h++)if(So(t[h],t[h+1],u))return!0;return!1}(t.cameraQueryGeometry,e-c,r-c,n+c,i+c)}));d<v.length;d+=1){var g=v[d];h.push(g)}h.sort(Xc);for(var y,m={},x=function(a){var c=h[a];if(c!==y){y=c;var f=i.featureIndexArray.get(c),p=null;i.loadMatchingFeature(m,f.bucketIndex,f.sourceLayerIndex,f.featureIndex,l,o.layers,o.availableImages,e,r,n,(function(e,r,n){return p||(p=po(e)),r.queryIntersectsFeature(u,e,n,p,i.z,t.transform,s,t.pixelPosMatrix)}))}},b=0;b<h.length;b++)x(b);return m},Zc.prototype.loadMatchingFeature=function(t,e,r,n,i,a,o,s,l,u,c){var f=this.bucketLayerIDs[e];if(!a||function(t,e){for(var r=0;r<t.length;r++)if(e.indexOf(t[r])>=0)return!0;return!1}(a,f)){var h=this.sourceLayerCoder.decode(r),p=this.vtLayers[h].feature(n);if(i.filter(new Pi(this.tileID.overscaledZ),p))for(var d=this.getId(p,h),v=0;v<f.length;v++){var g=f[v];if(!(a&&a.indexOf(g)<0)){var y=s[g];if(y){var m={};void 0!==d&&u&&(m=u.getState(y.sourceLayer||"_geojsonTileLayer",d));var x=l[g];x.paint=Yc(x.paint,y.paint,p,m,o),x.layout=Yc(x.layout,y.layout,p,m,o);var b=!c||c(p,y,m);if(b){var _=new Hc(p,this.z,this.x,this.y,d);_.layer=x;var w=t[g];void 0===w&&(w=t[g]=[]),w.push({featureIndex:n,feature:_,intersectionZ:b})}}}}}},Zc.prototype.lookupSymbolFeatures=function(t,e,r,n,i,a,o,s){var l={};this.loadVTLayers();for(var u=wn(i),c=0,f=t;c<f.length;c+=1){var h=f[c];this.loadMatchingFeature(l,r,n,h,u,a,o,s,e)}return l},Zc.prototype.hasLayer=function(t){for(var e=0,r=this.bucketLayerIDs;e<r.length;e+=1)for(var n=0,i=r[e];n<i.length;n+=1)if(t===i[n])return!0;return!1},Zc.prototype.getId=function(t,e){var r=t.id;if(this.promoteId){var n="string"==typeof this.promoteId?this.promoteId:this.promoteId[e];"boolean"==typeof(r=t.properties[n])&&(r=Number(r))}return r},ni("FeatureIndex",Zc,{omit:["rawTileData","sourceLayerCoder"]});var Jc=function(t,e){this.tileID=t,this.uid=p(),this.uses=0,this.tileSize=e,this.buckets={},this.expirationTime=null,this.queryPadding=0,this.hasSymbolBuckets=!1,this.hasRTLText=!1,this.dependencies={},this.expiredRequestCount=0,this.state="loading"};Jc.prototype.registerFadeDuration=function(t){var e=t+this.timeAdded;e<F.now()||this.fadeEndTime&&e<this.fadeEndTime||(this.fadeEndTime=e)},Jc.prototype.wasRequested=function(){return"errored"===this.state||"loaded"===this.state||"reloading"===this.state},Jc.prototype.loadVectorData=function(t,e,r){if(this.hasData()&&this.unloadVectorData(),this.state="loaded",t){for(var n in t.featureIndex&&(this.latestFeatureIndex=t.featureIndex,t.rawTileData?(this.latestRawTileData=t.rawTileData,this.latestFeatureIndex.rawTileData=t.rawTileData):this.latestRawTileData&&(this.latestFeatureIndex.rawTileData=this.latestRawTileData)),this.collisionBoxArray=t.collisionBoxArray,this.buckets=function(t,e){var r={};if(!e)return r;for(var n=function(){var t=a[i],n=t.layerIds.map((function(t){return e.getLayer(t)})).filter(Boolean);if(0!==n.length){t.layers=n,t.stateDependentLayerIds&&(t.stateDependentLayers=t.stateDependentLayerIds.map((function(t){return n.filter((function(e){return e.id===t}))[0]})));for(var o=0,s=n;o<s.length;o+=1){var l=s[o];r[l.id]=t}}},i=0,a=t;i<a.length;i+=1)n();return r}(t.buckets,e.style),this.hasSymbolBuckets=!1,this.buckets){var i=this.buckets[n];if(i instanceof sc){if(this.hasSymbolBuckets=!0,!r)break;i.justReloaded=!0}}if(this.hasRTLText=!1,this.hasSymbolBuckets)for(var a in this.buckets){var o=this.buckets[a];if(o instanceof sc&&o.hasRTLText){this.hasRTLText=!0,Ci.isLoading()||Ci.isLoaded()||"deferred"!==Ei()||Li();break}}for(var s in this.queryPadding=0,this.buckets){var l=this.buckets[s];this.queryPadding=Math.max(this.queryPadding,e.style.getLayer(s).queryRadius(l))}t.imageAtlas&&(this.imageAtlas=t.imageAtlas),t.glyphAtlasImage&&(this.glyphAtlasImage=t.glyphAtlasImage)}else this.collisionBoxArray=new wa},Jc.prototype.unloadVectorData=function(){for(var t in this.buckets)this.buckets[t].destroy();this.buckets={},this.imageAtlasTexture&&this.imageAtlasTexture.destroy(),this.imageAtlas&&(this.imageAtlas=null),this.glyphAtlasTexture&&this.glyphAtlasTexture.destroy(),this.latestFeatureIndex=null,this.state="unloaded"},Jc.prototype.getBucket=function(t){return this.buckets[t.id]},Jc.prototype.upload=function(t){for(var e in this.buckets){var r=this.buckets[e];r.uploadPending()&&r.upload(t)}var n=t.gl;this.imageAtlas&&!this.imageAtlas.uploaded&&(this.imageAtlasTexture=new Tc(t,this.imageAtlas.image,n.RGBA),this.imageAtlas.uploaded=!0),this.glyphAtlasImage&&(this.glyphAtlasTexture=new Tc(t,this.glyphAtlasImage,n.ALPHA),this.glyphAtlasImage=null)},Jc.prototype.prepare=function(t){this.imageAtlas&&this.imageAtlas.patchUpdatedImages(t,this.imageAtlasTexture)},Jc.prototype.queryRenderedFeatures=function(t,e,r,n,i,a,o,s,l,u){return this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData?this.latestFeatureIndex.query({queryGeometry:n,cameraQueryGeometry:i,scale:a,tileSize:this.tileSize,pixelPosMatrix:u,transform:s,params:o,queryPadding:this.queryPadding*l},t,e,r):{}},Jc.prototype.querySourceFeatures=function(t,e){var r=this.latestFeatureIndex;if(r&&r.rawTileData){var n=r.loadVTLayers(),i=e?e.sourceLayer:"",a=n._geojsonTileLayer||n[i];if(a)for(var o=wn(e&&e.filter),s=this.tileID.canonical,l=s.z,u=s.x,c=s.y,f={z:l,x:u,y:c},h=0;h<a.length;h++){var p=a.feature(h);if(o.filter(new Pi(this.tileID.overscaledZ),p)){var d=r.getId(p,i),v=new Hc(p,l,u,c,d);v.tile=f,t.push(v)}}}},Jc.prototype.hasData=function(){return"loaded"===this.state||"reloading"===this.state||"expired"===this.state},Jc.prototype.patternsLoaded=function(){return this.imageAtlas&&!!Object.keys(this.imageAtlas.patternPositions).length},Jc.prototype.setExpiryData=function(t){var e=this.expirationTime;if(t.cacheControl){var r=M(t.cacheControl);r["max-age"]&&(this.expirationTime=Date.now()+1e3*r["max-age"])}else t.expires&&(this.expirationTime=new Date(t.expires).getTime());if(this.expirationTime){var n=Date.now(),i=!1;if(this.expirationTime>n)i=!1;else if(e)if(this.expirationTime<e)i=!0;else{var a=this.expirationTime-e;a?this.expirationTime=n+Math.max(a,3e4):i=!0}else i=!0;i?(this.expiredRequestCount++,this.state="expired"):this.expiredRequestCount=0}},Jc.prototype.getExpiryTimeout=function(){if(this.expirationTime)return this.expiredRequestCount?1e3*(1<<Math.min(this.expiredRequestCount-1,31)):Math.min(this.expirationTime-(new Date).getTime(),Math.pow(2,31)-1)},Jc.prototype.setFeatureState=function(t,e){if(this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData&&0!==Object.keys(t).length){var r=this.latestFeatureIndex.loadVTLayers();for(var n in this.buckets)if(e.style.hasLayer(n)){var i=this.buckets[n],a=i.layers[0].sourceLayer||"_geojsonTileLayer",o=r[a],s=t[a];if(o&&s&&0!==Object.keys(s).length){i.update(s,o,this.imageAtlas&&this.imageAtlas.patternPositions||{});var l=e&&e.style&&e.style.getLayer(n);l&&(this.queryPadding=Math.max(this.queryPadding,l.queryRadius(i)))}}}},Jc.prototype.holdingForFade=function(){return void 0!==this.symbolFadeHoldUntil},Jc.prototype.symbolFadeFinished=function(){return!this.symbolFadeHoldUntil||this.symbolFadeHoldUntil<F.now()},Jc.prototype.clearFadeHold=function(){this.symbolFadeHoldUntil=void 0},Jc.prototype.setHoldDuration=function(t){this.symbolFadeHoldUntil=F.now()+t},Jc.prototype.setDependencies=function(t,e){for(var r={},n=0,i=e;n<i.length;n+=1)r[i[n]]=!0;this.dependencies[t]=r},Jc.prototype.hasDependency=function(t,e){for(var r=0,n=t;r<n.length;r+=1){var i=n[r],a=this.dependencies[i];if(a)for(var o=0,s=e;o<s.length;o+=1)if(a[s[o]])return!0}return!1};var Kc=self.performance,$c=function(t){this._marks={start:[t.url,"start"].join("#"),end:[t.url,"end"].join("#"),measure:t.url.toString()},Kc.mark(this._marks.start)};$c.prototype.finish=function(){Kc.mark(this._marks.end);var t=Kc.getEntriesByName(this._marks.measure);return 0===t.length&&(Kc.measure(this._marks.measure,this._marks.start,this._marks.end),t=Kc.getEntriesByName(this._marks.measure),Kc.clearMarks(this._marks.start),Kc.clearMarks(this._marks.end),Kc.clearMeasures(this._marks.measure)),t},t.Actor=Ac,t.AlphaImage=Yo,t.CanonicalTileID=Fc,t.CollisionBoxArray=wa,t.Color=oe,t.DEMData=Uc,t.DataConstantProperty=ji,t.DictionaryCoder=Vc,t.EXTENT=co,t.ErrorEvent=Ot,t.EvaluationParameters=Pi,t.Event=Pt,t.Evented=It,t.FeatureIndex=Zc,t.FillBucket=Fs,t.FillExtrusionBucket=tl,t.ImageAtlas=ru,t.ImagePosition=tu,t.LineBucket=cl,t.LngLat=Lc,t.LngLatBounds=Sc,t.MercatorCoordinate=Rc,t.ONE_EM=kl,t.OverscaledTileID=Nc,t.Point=a,t.Point$1=a,t.Properties=Gi,t.Protobuf=Sl,t.RGBAImage=Wo,t.RequestManager=q,t.RequestPerformance=$c,t.ResourceType=xt,t.SegmentVector=Oa,t.SourceFeatureState=Gc,t.StructArrayLayout1ui2=ma,t.StructArrayLayout2f1f2i16=ua,t.StructArrayLayout2i4=Qi,t.StructArrayLayout3ui6=fa,t.StructArrayLayout4i8=ta,t.SymbolBucket=sc,t.Texture=Tc,t.Tile=Jc,t.Transitionable=Di,t.Uniform1f=Ya,t.Uniform1i=Za,t.Uniform2f=Wa,t.Uniform3f=Xa,t.Uniform4f=Ja,t.UniformColor=Ka,t.UniformMatrix4f=Qa,t.UnwrappedTileID=Bc,t.ValidationError=zt,t.WritingMode=nu,t.ZoomHistory=ui,t.add=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t},t.addDynamicAttributes=nc,t.asyncAll=function(t,e,r){if(!t.length)return r(null,[]);var n=t.length,i=new Array(t.length),a=null;t.forEach((function(t,o){e(t,(function(t,e){t&&(a=t),i[o]=e,0==--n&&r(a,i)}))}))},t.bezier=s,t.bindAll=g,t.browser=F,t.cacheEntryPossiblyAdded=function(t){++yt>ct&&(t.getActor().send("enforceCacheSizeLimit",ut),yt=0)},t.clamp=u,t.clearTileCache=function(t){var e=self.caches.delete(lt);t&&e.catch(t).then((function(){return t()}))},t.clipLine=Ou,t.clone=function(t){var e=new Io(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},t.clone$1=b,t.clone$2=function(t){var e=new Io(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e},t.collisionCircleLayout=_l,t.config=B,t.create=function(){var t=new Io(16);return Io!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t},t.create$1=function(){var t=new Io(9);return Io!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t},t.create$2=function(){var t=new Io(4);return Io!=Float32Array&&(t[1]=0,t[2]=0),t[0]=1,t[3]=1,t},t.createCommonjsModule=e,t.createExpression=ln,t.createLayout=Ki,t.createStyleLayer=function(t){return"custom"===t.type?new gc(t):new yc[t.type](t)},t.cross=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2];return t[0]=i*l-a*s,t[1]=a*o-n*l,t[2]=n*s-i*o,t},t.deepEqual=function t(e,r){if(Array.isArray(e)){if(!Array.isArray(r)||e.length!==r.length)return!1;for(var n=0;n<e.length;n++)if(!t(e[n],r[n]))return!1;return!0}if("object"==typeof e&&null!==e&&null!==r){if("object"!=typeof r)return!1;if(Object.keys(e).length!==Object.keys(r).length)return!1;for(var i in e)if(!t(e[i],r[i]))return!1;return!0}return e===r},t.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]},t.dot$1=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]},t.ease=l,t.emitValidationErrors=Jn,t.endsWith=y,t.enforceCacheSizeLimit=function(t){ht(),tt&&tt.then((function(e){e.keys().then((function(r){for(var n=0;n<r.length-t;n++)e.delete(r[n])}))}))},t.evaluateSizeForFeature=wu,t.evaluateSizeForZoom=Tu,t.evaluateVariableOffset=Yu,t.evented=Si,t.extend=f,t.featureFilter=wn,t.filterObject=x,t.fromRotation=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=-r,t[4]=n,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},t.getAnchorAlignment=gu,t.getAnchorJustification=Wu,t.getArrayBuffer=kt,t.getImage=Et,t.getJSON=function(t,e){return Tt(f(t,{type:"json"}),e)},t.getRTLTextPluginStatus=Ei,t.getReferrer=_t,t.getVideo=function(t,e){var r,n,i=self.document.createElement("video");i.muted=!0,i.onloadstart=function(){e(null,i)};for(var a=0;a<t.length;a++){var o=self.document.createElement("source");r=t[a],n=void 0,(n=self.document.createElement("a")).href=r,n.protocol===self.document.location.protocol&&n.host===self.document.location.host||(i.crossOrigin="Anonymous"),o.src=t[a],i.appendChild(o)}return{cancel:function(){}}},t.identity=Do,t.invert=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],f=e[9],h=e[10],p=e[11],d=e[12],v=e[13],g=e[14],y=e[15],m=r*s-n*o,x=r*l-i*o,b=r*u-a*o,_=n*l-i*s,w=n*u-a*s,T=i*u-a*l,k=c*v-f*d,A=c*g-h*d,M=c*y-p*d,S=f*g-h*v,E=f*y-p*v,L=h*y-p*g,C=m*L-x*E+b*S+_*M-w*A+T*k;return C?(C=1/C,t[0]=(s*L-l*E+u*S)*C,t[1]=(i*E-n*L-a*S)*C,t[2]=(v*T-g*w+y*_)*C,t[3]=(h*w-f*T-p*_)*C,t[4]=(l*M-o*L-u*A)*C,t[5]=(r*L-i*M+a*A)*C,t[6]=(g*b-d*T-y*x)*C,t[7]=(c*T-h*b+p*x)*C,t[8]=(o*E-s*M+u*k)*C,t[9]=(n*M-r*E-a*k)*C,t[10]=(d*w-v*b+y*m)*C,t[11]=(f*b-c*w-p*m)*C,t[12]=(s*A-o*S-l*k)*C,t[13]=(r*S-n*A+i*k)*C,t[14]=(v*x-d*_-g*m)*C,t[15]=(c*_-f*x+h*m)*C,t):null},t.isChar=ci,t.isMapboxURL=G,t.keysDifference=function(t,e){var r=[];for(var n in t)n in e||r.push(n);return r},t.makeRequest=Tt,t.mapObject=m,t.mercatorXfromLng=Oc,t.mercatorYfromLat=Ic,t.mercatorZfromAltitude=Dc,t.mul=Ro,t.multiply=zo,t.mvt=Js,t.normalize=function(t,e){var r=e[0],n=e[1],i=e[2],a=r*r+n*n+i*i;return a>0&&(a=1/Math.sqrt(a)),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a,t},t.number=$e,t.offscreenCanvasSupported=mt,t.ortho=function(t,e,r,n,i,a,o){var s=1/(e-r),l=1/(n-i),u=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*u,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*l,t[14]=(o+a)*u,t[15]=1,t},t.parseGlyphPBF=function(t){return new Sl(t).readFields(Wl,[])},t.pbf=Sl,t.performSymbolLayout=function(t,e,r,n,i,a,o){t.createArrays();var s=512*t.overscaling;t.tilePixelRatio=co/s,t.compareText={},t.iconsNeedLinear=!1;var l=t.layers[0].layout,u=t.layers[0]._unevaluatedLayout._values,c={};if("composite"===t.textSizeData.kind){var f=t.textSizeData,h=f.minZoom,p=f.maxZoom;c.compositeTextSizes=[u["text-size"].possiblyEvaluate(new Pi(h),o),u["text-size"].possiblyEvaluate(new Pi(p),o)]}if("composite"===t.iconSizeData.kind){var d=t.iconSizeData,v=d.minZoom,g=d.maxZoom;c.compositeIconSizes=[u["icon-size"].possiblyEvaluate(new Pi(v),o),u["icon-size"].possiblyEvaluate(new Pi(g),o)]}c.layoutTextSize=u["text-size"].possiblyEvaluate(new Pi(t.zoom+1),o),c.layoutIconSize=u["icon-size"].possiblyEvaluate(new Pi(t.zoom+1),o),c.textMaxSize=u["text-size"].possiblyEvaluate(new Pi(18));for(var y=l.get("text-line-height")*kl,m="map"===l.get("text-rotation-alignment")&&"point"!==l.get("symbol-placement"),x=l.get("text-keep-upright"),b=l.get("text-size"),_=function(){var a=k[T],s=l.get("text-font").evaluate(a,{},o).join(","),u=b.evaluate(a,{},o),f=c.layoutTextSize.evaluate(a,{},o),h=c.layoutIconSize.evaluate(a,{},o),p={horizontal:{},vertical:void 0},d=a.text,v=[0,0];if(d){var g=d.toString(),_=l.get("text-letter-spacing").evaluate(a,{},o)*kl,A=function(t){for(var e=0,r=t;e<r.length;e+=1)if(n=r[e].charCodeAt(0),ci.Arabic(n)||ci["Arabic Supplement"](n)||ci["Arabic Extended-A"](n)||ci["Arabic Presentation Forms-A"](n)||ci["Arabic Presentation Forms-B"](n))return!1;var n;return!0}(g)?_:0,M=l.get("text-anchor").evaluate(a,{},o),S=l.get("text-variable-anchor");if(!S){var E=l.get("text-radial-offset").evaluate(a,{},o);v=E?Yu(M,[E*kl,Zu]):l.get("text-offset").evaluate(a,{},o).map((function(t){return t*kl}))}var L=m?"center":l.get("text-justify").evaluate(a,{},o),C=l.get("symbol-placement"),P="point"===C?l.get("text-max-width").evaluate(a,{},o)*kl:0,O=function(){t.allowVerticalPlacement&&fi(g)&&(p.vertical=su(d,e,r,i,s,P,y,M,"left",A,v,nu.vertical,!0,C,f,u))};if(!m&&S){for(var I="auto"===L?S.map((function(t){return Wu(t)})):[L],D=!1,z=0;z<I.length;z++){var R=I[z];if(!p.horizontal[R])if(D)p.horizontal[R]=p.horizontal[0];else{var F=su(d,e,r,i,s,P,y,"center",R,A,v,nu.horizontal,!1,C,f,u);F&&(p.horizontal[R]=F,D=1===F.positionedLines.length)}}O()}else{"auto"===L&&(L=Wu(M));var B=su(d,e,r,i,s,P,y,M,L,A,v,nu.horizontal,!1,C,f,u);B&&(p.horizontal[L]=B),O(),fi(g)&&m&&x&&(p.vertical=su(d,e,r,i,s,P,y,M,L,A,v,nu.vertical,!1,C,f,u))}}var N=void 0,j=!1;if(a.icon&&a.icon.name){var U=n[a.icon.name];U&&(N=function(t,e,r){var n=gu(r),i=n.horizontalAlign,a=n.verticalAlign,o=e[0],s=e[1],l=o-t.displaySize[0]*i,u=l+t.displaySize[0],c=s-t.displaySize[1]*a;return{image:t,top:c,bottom:c+t.displaySize[1],left:l,right:u}}(i[a.icon.name],l.get("icon-offset").evaluate(a,{},o),l.get("icon-anchor").evaluate(a,{},o)),j=U.sdf,void 0===t.sdfIcons?t.sdfIcons=U.sdf:t.sdfIcons!==U.sdf&&w("Style sheet warning: Cannot mix SDF and non-SDF icons in one buffer"),(U.pixelRatio!==t.pixelRatio||0!==l.get("icon-rotate").constantOr(1))&&(t.iconsNeedLinear=!0))}var V=$u(p.horizontal)||p.vertical;t.iconsInText=!!V&&V.iconsInText,(V||N)&&function(t,e,r,n,i,a,o,s,l,u,c){var f=a.textMaxSize.evaluate(e,{});void 0===f&&(f=o);var h,p=t.layers[0].layout,d=p.get("icon-offset").evaluate(e,{},c),v=$u(r.horizontal),g=24,y=o/g,m=t.tilePixelRatio*y,x=t.tilePixelRatio*f/g,b=t.tilePixelRatio*s,_=t.tilePixelRatio*p.get("symbol-spacing"),T=p.get("text-padding")*t.tilePixelRatio,k=p.get("icon-padding")*t.tilePixelRatio,A=p.get("text-max-angle")/180*Math.PI,M="map"===p.get("text-rotation-alignment")&&"point"!==p.get("symbol-placement"),S="map"===p.get("icon-rotation-alignment")&&"point"!==p.get("symbol-placement"),E=p.get("symbol-placement"),L=_/2,C=p.get("icon-text-fit");n&&"none"!==C&&(t.allowVerticalPlacement&&r.vertical&&(h=mu(n,r.vertical,C,p.get("icon-text-fit-padding"),d,y)),v&&(n=mu(n,v,C,p.get("icon-text-fit-padding"),d,y)));var P=function(s,f){f.x<0||f.x>=co||f.y<0||f.y>=co||function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,T,k,A){var M,S,E,L,C,P=t.addToLineVertexArray(e,r),O=0,I=0,D=0,z=0,R=-1,F=-1,B={},N=Fa(""),j=0,U=0;if(void 0===s._unevaluatedLayout.getValue("text-radial-offset")?(j=(M=s.layout.get("text-offset").evaluate(b,{},k).map((function(t){return t*kl})))[0],U=M[1]):(j=s.layout.get("text-radial-offset").evaluate(b,{},k)*kl,U=Zu),t.allowVerticalPlacement&&n.vertical){var V=s.layout.get("text-rotate").evaluate(b,{},k)+90,H=n.vertical;L=new Nu(l,e,u,c,f,H,h,p,d,V),o&&(C=new Nu(l,e,u,c,f,o,g,y,d,V))}if(i){var q=s.layout.get("icon-rotate").evaluate(b,{}),G="none"!==s.layout.get("icon-text-fit"),Z=Du(i,q,T,G),Y=o?Du(o,q,T,G):void 0;E=new Nu(l,e,u,c,f,i,g,y,!1,q),O=4*Z.length;var W=t.iconSizeData,X=null;"source"===W.kind?(X=[bu*s.layout.get("icon-size").evaluate(b,{})])[0]>Ju&&w(t.layerIds[0]+': Value for "icon-size" is >= '+Xu+'. Reduce your "icon-size".'):"composite"===W.kind&&((X=[bu*_.compositeIconSizes[0].evaluate(b,{},k),bu*_.compositeIconSizes[1].evaluate(b,{},k)])[0]>Ju||X[1]>Ju)&&w(t.layerIds[0]+': Value for "icon-size" is >= '+Xu+'. Reduce your "icon-size".'),t.addSymbols(t.icon,Z,X,x,m,b,!1,e,P.lineStartIndex,P.lineLength,-1,k),R=t.icon.placedSymbolArray.length-1,Y&&(I=4*Y.length,t.addSymbols(t.icon,Y,X,x,m,b,nu.vertical,e,P.lineStartIndex,P.lineLength,-1,k),F=t.icon.placedSymbolArray.length-1)}for(var J in n.horizontal){var K=n.horizontal[J];if(!S){N=Fa(K.text);var $=s.layout.get("text-rotate").evaluate(b,{},k);S=new Nu(l,e,u,c,f,K,h,p,d,$)}var Q=1===K.positionedLines.length;if(D+=Ku(t,e,K,a,s,d,b,v,P,n.vertical?nu.horizontal:nu.horizontalOnly,Q?Object.keys(n.horizontal):[J],B,R,_,k),Q)break}n.vertical&&(z+=Ku(t,e,n.vertical,a,s,d,b,v,P,nu.vertical,["vertical"],B,F,_,k));var tt=S?S.boxStartIndex:t.collisionBoxArray.length,et=S?S.boxEndIndex:t.collisionBoxArray.length,rt=L?L.boxStartIndex:t.collisionBoxArray.length,nt=L?L.boxEndIndex:t.collisionBoxArray.length,it=E?E.boxStartIndex:t.collisionBoxArray.length,at=E?E.boxEndIndex:t.collisionBoxArray.length,ot=C?C.boxStartIndex:t.collisionBoxArray.length,st=C?C.boxEndIndex:t.collisionBoxArray.length,lt=-1,ut=function(t,e){return t&&t.circleDiameter?Math.max(t.circleDiameter,e):e};lt=ut(S,lt),lt=ut(L,lt),lt=ut(E,lt);var ct=(lt=ut(C,lt))>-1?1:0;ct&&(lt*=A/kl),t.glyphOffsetArray.length>=sc.MAX_GLYPHS&&w("Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907"),void 0!==b.sortKey&&t.addToSortKeyRanges(t.symbolInstances.length,b.sortKey),t.symbolInstances.emplaceBack(e.x,e.y,B.right>=0?B.right:-1,B.center>=0?B.center:-1,B.left>=0?B.left:-1,B.vertical||-1,R,F,N,tt,et,rt,nt,it,at,ot,st,u,D,z,O,I,ct,0,h,j,U,lt)}(t,f,s,r,n,i,h,t.layers[0],t.collisionBoxArray,e.index,e.sourceLayerIndex,t.index,m,T,M,l,b,k,S,d,e,a,u,c,o)};if("line"===E)for(var O=0,I=Ou(e.geometry,0,0,co,co);O<I.length;O+=1)for(var D=I[O],z=0,R=Cu(D,_,A,r.vertical||v,n,g,x,t.overscaling,co);z<R.length;z+=1){var F=R[z];v&&Qu(t,v.text,L,F)||P(D,F)}else if("line-center"===E)for(var B=0,N=e.geometry;B<N.length;B+=1){var j=N[B];if(j.length>1){var U=Lu(j,A,r.vertical||v,n,g,x);U&&P(j,U)}}else if("Polygon"===e.type)for(var V=0,H=Is(e.geometry,0);V<H.length;V+=1){var q=H[V],G=Vu(q,16);P(q[0],new xu(G.x,G.y,0))}else if("LineString"===e.type)for(var Z=0,Y=e.geometry;Z<Y.length;Z+=1){var W=Y[Z];P(W,new xu(W[0].x,W[0].y,0))}else if("Point"===e.type)for(var X=0,J=e.geometry;X<J.length;X+=1)for(var K=0,$=J[X];K<$.length;K+=1){var Q=$[K];P([Q],new xu(Q.x,Q.y,0))}}(t,a,p,N,n,c,f,h,v,j,o)},T=0,k=t.features;T<k.length;T+=1)_();a&&t.generateCollisionDebugBuffers()},t.perspective=function(t,e,r,n,i){var a,o=1/Math.tan(e/2);return t[0]=o/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=o,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,null!=i&&i!==1/0?(a=1/(n-i),t[10]=(i+n)*a,t[14]=2*i*n*a):(t[10]=-1,t[14]=-2*n),t},t.pick=function(t,e){for(var r={},n=0;n<e.length;n++){var i=e[n];i in t&&(r[i]=t[i])}return r},t.plugin=Ci,t.polygonIntersectsPolygon=yo,t.postMapLoadEvent=st,t.postTurnstileEvent=at,t.potpack=$l,t.refProperties=["type","source","source-layer","minzoom","maxzoom","filter","layout"],t.register=ni,t.registerForPluginStateChange=function(t){return t({pluginStatus:Ti,pluginURL:ki}),Si.on("pluginStateChange",t),t},t.rotate=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),l=Math.cos(r);return t[0]=n*l+a*s,t[1]=i*l+o*s,t[2]=n*-s+a*l,t[3]=i*-s+o*l,t},t.rotateX=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[4],o=e[5],s=e[6],l=e[7],u=e[8],c=e[9],f=e[10],h=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=a*i+u*n,t[5]=o*i+c*n,t[6]=s*i+f*n,t[7]=l*i+h*n,t[8]=u*i-a*n,t[9]=c*i-o*n,t[10]=f*i-s*n,t[11]=h*i-l*n,t},t.rotateZ=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[4],c=e[5],f=e[6],h=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i+u*n,t[1]=o*i+c*n,t[2]=s*i+f*n,t[3]=l*i+h*n,t[4]=u*i-a*n,t[5]=c*i-o*n,t[6]=f*i-s*n,t[7]=h*i-l*n,t},t.scale=function(t,e,r){var n=r[0],i=r[1],a=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*a,t[9]=e[9]*a,t[10]=e[10]*a,t[11]=e[11]*a,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t},t.scale$1=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t},t.scale$2=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t},t.setCacheLimits=function(t,e){ut=t,ct=e},t.setRTLTextPlugin=function(t,e,r){if(void 0===r&&(r=!1),Ti===mi||Ti===xi||Ti===bi)throw new Error("setRTLTextPlugin cannot be called multiple times.");ki=F.resolveURL(t),Ti=mi,wi=e,Mi(),r||Li()},t.sphericalToCartesian=function(t){var e=t[0],r=t[1],n=t[2];return r+=90,r*=Math.PI/180,n*=Math.PI/180,{x:e*Math.cos(r)*Math.sin(n),y:e*Math.sin(r)*Math.sin(n),z:e*Math.cos(n)}},t.sqrLen=jo,t.styleSpec=Dt,t.sub=Bo,t.symbolSize=ku,t.transformMat3=function(t,e,r){var n=e[0],i=e[1],a=e[2];return t[0]=n*r[0]+i*r[3]+a*r[6],t[1]=n*r[1]+i*r[4]+a*r[7],t[2]=n*r[2]+i*r[5]+a*r[8],t},t.transformMat4=No,t.translate=function(t,e,r){var n,i,a,o,s,l,u,c,f,h,p,d,v=r[0],g=r[1],y=r[2];return e===t?(t[12]=e[0]*v+e[4]*g+e[8]*y+e[12],t[13]=e[1]*v+e[5]*g+e[9]*y+e[13],t[14]=e[2]*v+e[6]*g+e[10]*y+e[14],t[15]=e[3]*v+e[7]*g+e[11]*y+e[15]):(n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],t[0]=n,t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t[6]=u,t[7]=c,t[8]=f,t[9]=h,t[10]=p,t[11]=d,t[12]=n*v+s*g+f*y+e[12],t[13]=i*v+l*g+h*y+e[13],t[14]=a*v+u*g+p*y+e[14],t[15]=o*v+c*g+d*y+e[15]),t},t.triggerPluginCompletionEvent=Ai,t.uniqueId=p,t.validateCustomStyleLayer=function(t){var e=[],r=t.id;return void 0===r&&e.push({message:"layers."+r+': missing required property "id"'}),void 0===t.render&&e.push({message:"layers."+r+': missing required method "render"'}),t.renderingMode&&"2d"!==t.renderingMode&&"3d"!==t.renderingMode&&e.push({message:"layers."+r+': property "renderingMode" must be either "2d" or "3d"'}),e},t.validateLight=Yn,t.validateStyle=Zn,t.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},t.vectorTile=Js,t.version=r,t.warnOnce=w,t.webpSupported=N,t.window=self,t.wrap=c})),n(0,(function(t){function e(t){var r=typeof t;if("number"===r||"boolean"===r||"string"===r||null==t)return JSON.stringify(t);if(Array.isArray(t)){for(var n="[",i=0,a=t;i<a.length;i+=1)n+=e(a[i])+",";return n+"]"}for(var o=Object.keys(t).sort(),s="{",l=0;l<o.length;l++)s+=JSON.stringify(o[l])+":"+e(t[o[l]])+",";return s+"}"}function r(r){for(var n="",i=0,a=t.refProperties;i<a.length;i+=1)n+="/"+e(r[a[i]]);return n}var n=function(t){this.keyCache={},t&&this.replace(t)};n.prototype.replace=function(t){this._layerConfigs={},this._layers={},this.update(t,[])},n.prototype.update=function(e,n){for(var i=this,a=0,o=e;a<o.length;a+=1){var s=o[a];this._layerConfigs[s.id]=s;var l=this._layers[s.id]=t.createStyleLayer(s);l._featureFilter=t.featureFilter(l.filter),this.keyCache[s.id]&&delete this.keyCache[s.id]}for(var u=0,c=n;u<c.length;u+=1){var f=c[u];delete this.keyCache[f],delete this._layerConfigs[f],delete this._layers[f]}this.familiesBySource={};for(var h=0,p=function(t,e){for(var n={},i=0;i<t.length;i++){var a=e&&e[t[i].id]||r(t[i]);e&&(e[t[i].id]=a);var o=n[a];o||(o=n[a]=[]),o.push(t[i])}var s=[];for(var l in n)s.push(n[l]);return s}(t.values(this._layerConfigs),this.keyCache);h<p.length;h+=1){var d=p[h].map((function(t){return i._layers[t.id]})),v=d[0];if("none"!==v.visibility){var g=v.source||"",y=this.familiesBySource[g];y||(y=this.familiesBySource[g]={});var m=v.sourceLayer||"_geojsonTileLayer",x=y[m];x||(x=y[m]=[]),x.push(d)}}};var i=function(e){var r={},n=[];for(var i in e){var a=e[i],o=r[i]={};for(var s in a){var l=a[+s];if(l&&0!==l.bitmap.width&&0!==l.bitmap.height){var u={x:0,y:0,w:l.bitmap.width+2,h:l.bitmap.height+2};n.push(u),o[s]={rect:u,metrics:l.metrics}}}}var c=t.potpack(n),f=c.w,h=c.h,p=new t.AlphaImage({width:f||1,height:h||1});for(var d in e){var v=e[d];for(var g in v){var y=v[+g];if(y&&0!==y.bitmap.width&&0!==y.bitmap.height){var m=r[d][g].rect;t.AlphaImage.copy(y.bitmap,p,{x:0,y:0},{x:m.x+1,y:m.y+1},y.bitmap)}}}this.image=p,this.positions=r};t.register("GlyphAtlas",i);var a=function(e){this.tileID=new t.OverscaledTileID(e.tileID.overscaledZ,e.tileID.wrap,e.tileID.canonical.z,e.tileID.canonical.x,e.tileID.canonical.y),this.uid=e.uid,this.zoom=e.zoom,this.pixelRatio=e.pixelRatio,this.tileSize=e.tileSize,this.source=e.source,this.overscaling=this.tileID.overscaleFactor(),this.showCollisionBoxes=e.showCollisionBoxes,this.collectResourceTiming=!!e.collectResourceTiming,this.returnDependencies=!!e.returnDependencies,this.promoteId=e.promoteId};function o(e,r,n){for(var i=new t.EvaluationParameters(r),a=0,o=e;a<o.length;a+=1)o[a].recalculate(i,n)}function s(e,r){var n=t.getArrayBuffer(e.request,(function(e,n,i,a){e?r(e):n&&r(null,{vectorTile:new t.vectorTile.VectorTile(new t.pbf(n)),rawData:n,cacheControl:i,expires:a})}));return function(){n.cancel(),r()}}a.prototype.parse=function(e,r,n,a,s){var l=this;this.status="parsing",this.data=e,this.collisionBoxArray=new t.CollisionBoxArray;var u=new t.DictionaryCoder(Object.keys(e.layers).sort()),c=new t.FeatureIndex(this.tileID,this.promoteId);c.bucketLayerIDs=[];var f,h,p,d,v={},g={featureIndex:c,iconDependencies:{},patternDependencies:{},glyphDependencies:{},availableImages:n},y=r.familiesBySource[this.source];for(var m in y){var x=e.layers[m];if(x){1===x.version&&t.warnOnce('Vector tile source "'+this.source+'" layer "'+m+'" does not use vector tile spec v2 and therefore may have some rendering errors.');for(var b=u.encode(m),_=[],w=0;w<x.length;w++){var T=x.feature(w),k=c.getId(T,m);_.push({feature:T,id:k,index:w,sourceLayerIndex:b})}for(var A=0,M=y[m];A<M.length;A+=1){var S=M[A],E=S[0];E.minzoom&&this.zoom<Math.floor(E.minzoom)||E.maxzoom&&this.zoom>=E.maxzoom||"none"!==E.visibility&&(o(S,this.zoom,n),(v[E.id]=E.createBucket({index:c.bucketLayerIDs.length,layers:S,zoom:this.zoom,pixelRatio:this.pixelRatio,overscaling:this.overscaling,collisionBoxArray:this.collisionBoxArray,sourceLayerIndex:b,sourceID:this.source})).populate(_,g,this.tileID.canonical),c.bucketLayerIDs.push(S.map((function(t){return t.id}))))}}}var L=t.mapObject(g.glyphDependencies,(function(t){return Object.keys(t).map(Number)}));Object.keys(L).length?a.send("getGlyphs",{uid:this.uid,stacks:L},(function(t,e){f||(f=t,h=e,O.call(l))})):h={};var C=Object.keys(g.iconDependencies);C.length?a.send("getImages",{icons:C,source:this.source,tileID:this.tileID,type:"icons"},(function(t,e){f||(f=t,p=e,O.call(l))})):p={};var P=Object.keys(g.patternDependencies);function O(){if(f)return s(f);if(h&&p&&d){var e=new i(h),r=new t.ImageAtlas(p,d);for(var a in v){var l=v[a];l instanceof t.SymbolBucket?(o(l.layers,this.zoom,n),t.performSymbolLayout(l,h,e.positions,p,r.iconPositions,this.showCollisionBoxes,this.tileID.canonical)):l.hasPattern&&(l instanceof t.LineBucket||l instanceof t.FillBucket||l instanceof t.FillExtrusionBucket)&&(o(l.layers,this.zoom,n),l.addFeatures(g,this.tileID.canonical,r.patternPositions))}this.status="done",s(null,{buckets:t.values(v).filter((function(t){return!t.isEmpty()})),featureIndex:c,collisionBoxArray:this.collisionBoxArray,glyphAtlasImage:e.image,imageAtlas:r,glyphMap:this.returnDependencies?h:null,iconMap:this.returnDependencies?p:null,glyphPositions:this.returnDependencies?e.positions:null})}}P.length?a.send("getImages",{icons:P,source:this.source,tileID:this.tileID,type:"patterns"},(function(t,e){f||(f=t,d=e,O.call(l))})):d={},O.call(this)};var l=function(t,e,r,n){this.actor=t,this.layerIndex=e,this.availableImages=r,this.loadVectorData=n||s,this.loading={},this.loaded={}};l.prototype.loadTile=function(e,r){var n=this,i=e.uid;this.loading||(this.loading={});var o=!!(e&&e.request&&e.request.collectResourceTiming)&&new t.RequestPerformance(e.request),s=this.loading[i]=new a(e);s.abort=this.loadVectorData(e,(function(e,a){if(delete n.loading[i],e||!a)return s.status="done",n.loaded[i]=s,r(e);var l=a.rawData,u={};a.expires&&(u.expires=a.expires),a.cacheControl&&(u.cacheControl=a.cacheControl);var c={};if(o){var f=o.finish();f&&(c.resourceTiming=JSON.parse(JSON.stringify(f)))}s.vectorTile=a.vectorTile,s.parse(a.vectorTile,n.layerIndex,n.availableImages,n.actor,(function(e,n){if(e||!n)return r(e);r(null,t.extend({rawTileData:l.slice(0)},n,u,c))})),n.loaded=n.loaded||{},n.loaded[i]=s}))},l.prototype.reloadTile=function(t,e){var r=this,n=this.loaded,i=t.uid,a=this;if(n&&n[i]){var o=n[i];o.showCollisionBoxes=t.showCollisionBoxes;var s=function(t,n){var i=o.reloadCallback;i&&(delete o.reloadCallback,o.parse(o.vectorTile,a.layerIndex,r.availableImages,a.actor,i)),e(t,n)};"parsing"===o.status?o.reloadCallback=s:"done"===o.status&&(o.vectorTile?o.parse(o.vectorTile,this.layerIndex,this.availableImages,this.actor,s):s())}},l.prototype.abortTile=function(t,e){var r=this.loading,n=t.uid;r&&r[n]&&r[n].abort&&(r[n].abort(),delete r[n]),e()},l.prototype.removeTile=function(t,e){var r=this.loaded,n=t.uid;r&&r[n]&&delete r[n],e()};var u=t.window.ImageBitmap,c=function(){this.loaded={}};c.prototype.loadTile=function(e,r){var n=e.uid,i=e.encoding,a=e.rawImageData,o=u&&a instanceof u?this.getImageData(a):a,s=new t.DEMData(n,o,i);this.loaded=this.loaded||{},this.loaded[n]=s,r(null,s)},c.prototype.getImageData=function(e){this.offscreenCanvas&&this.offscreenCanvasContext||(this.offscreenCanvas=new OffscreenCanvas(e.width,e.height),this.offscreenCanvasContext=this.offscreenCanvas.getContext("2d")),this.offscreenCanvas.width=e.width,this.offscreenCanvas.height=e.height,this.offscreenCanvasContext.drawImage(e,0,0,e.width,e.height);var r=this.offscreenCanvasContext.getImageData(-1,-1,e.width+2,e.height+2);return this.offscreenCanvasContext.clearRect(0,0,this.offscreenCanvas.width,this.offscreenCanvas.height),new t.RGBAImage({width:r.width,height:r.height},r.data)},c.prototype.removeTile=function(t){var e=this.loaded,r=t.uid;e&&e[r]&&delete e[r]};var f=function t(e,r){var n,i=e&&e.type;if("FeatureCollection"===i)for(n=0;n<e.features.length;n++)t(e.features[n],r);else if("GeometryCollection"===i)for(n=0;n<e.geometries.length;n++)t(e.geometries[n],r);else if("Feature"===i)t(e.geometry,r);else if("Polygon"===i)h(e.coordinates,r);else if("MultiPolygon"===i)for(n=0;n<e.coordinates.length;n++)h(e.coordinates[n],r);return e};function h(t,e){if(0!==t.length){p(t[0],e);for(var r=1;r<t.length;r++)p(t[r],!e)}}function p(t,e){for(var r=0,n=0,i=t.length,a=i-1;n<i;a=n++)r+=(t[n][0]-t[a][0])*(t[a][1]+t[n][1]);r>=0!=!!e&&t.reverse()}var d=t.vectorTile.VectorTileFeature.prototype.toGeoJSON,v=function(e){this._feature=e,this.extent=t.EXTENT,this.type=e.type,this.properties=e.tags,"id"in e&&!isNaN(e.id)&&(this.id=parseInt(e.id,10))};v.prototype.loadGeometry=function(){if(1===this._feature.type){for(var e=[],r=0,n=this._feature.geometry;r<n.length;r+=1){var i=n[r];e.push([new t.Point$1(i[0],i[1])])}return e}for(var a=[],o=0,s=this._feature.geometry;o<s.length;o+=1){for(var l=[],u=0,c=s[o];u<c.length;u+=1){var f=c[u];l.push(new t.Point$1(f[0],f[1]))}a.push(l)}return a},v.prototype.toGeoJSON=function(t,e,r){return d.call(this,t,e,r)};var g=function(e){this.layers={_geojsonTileLayer:this},this.name="_geojsonTileLayer",this.extent=t.EXTENT,this.length=e.length,this._features=e};g.prototype.feature=function(t){return new v(this._features[t])};var y=t.vectorTile.VectorTileFeature,m=x;function x(t,e){this.options=e||{},this.features=t,this.length=t.length}function b(t,e){this.id="number"==typeof t.id?t.id:void 0,this.type=t.type,this.rawGeometry=1===t.type?[t.geometry]:t.geometry,this.properties=t.tags,this.extent=e||4096}x.prototype.feature=function(t){return new b(this.features[t],this.options.extent)},b.prototype.loadGeometry=function(){var e=this.rawGeometry;this.geometry=[];for(var r=0;r<e.length;r++){for(var n=e[r],i=[],a=0;a<n.length;a++)i.push(new t.Point$1(n[a][0],n[a][1]));this.geometry.push(i)}return this.geometry},b.prototype.bbox=function(){this.geometry||this.loadGeometry();for(var t=this.geometry,e=1/0,r=-1/0,n=1/0,i=-1/0,a=0;a<t.length;a++)for(var o=t[a],s=0;s<o.length;s++){var l=o[s];e=Math.min(e,l.x),r=Math.max(r,l.x),n=Math.min(n,l.y),i=Math.max(i,l.y)}return[e,n,r,i]},b.prototype.toGeoJSON=y.prototype.toGeoJSON;var _=A,w=A,T=function(t,e){e=e||{};var r={};for(var n in t)r[n]=new m(t[n].features,e),r[n].name=n,r[n].version=e.version,r[n].extent=e.extent;return A({layers:r})},k=m;function A(e){var r=new t.pbf;return function(t,e){for(var r in t.layers)e.writeMessage(3,M,t.layers[r])}(e,r),r.finish()}function M(t,e){var r;e.writeVarintField(15,t.version||1),e.writeStringField(1,t.name||""),e.writeVarintField(5,t.extent||4096);var n={keys:[],values:[],keycache:{},valuecache:{}};for(r=0;r<t.length;r++)n.feature=t.feature(r),e.writeMessage(2,S,n);var i=n.keys;for(r=0;r<i.length;r++)e.writeStringField(3,i[r]);var a=n.values;for(r=0;r<a.length;r++)e.writeMessage(4,O,a[r])}function S(t,e){var r=t.feature;void 0!==r.id&&e.writeVarintField(1,r.id),e.writeMessage(2,E,t),e.writeVarintField(3,r.type),e.writeMessage(4,P,r)}function E(t,e){var r=t.feature,n=t.keys,i=t.values,a=t.keycache,o=t.valuecache;for(var s in r.properties){var l=a[s];void 0===l&&(n.push(s),l=n.length-1,a[s]=l),e.writeVarint(l);var u=r.properties[s],c=typeof u;"string"!==c&&"boolean"!==c&&"number"!==c&&(u=JSON.stringify(u));var f=c+":"+u,h=o[f];void 0===h&&(i.push(u),h=i.length-1,o[f]=h),e.writeVarint(h)}}function L(t,e){return(e<<3)+(7&t)}function C(t){return t<<1^t>>31}function P(t,e){for(var r=t.loadGeometry(),n=t.type,i=0,a=0,o=r.length,s=0;s<o;s++){var l=r[s],u=1;1===n&&(u=l.length),e.writeVarint(L(1,u));for(var c=3===n?l.length-1:l.length,f=0;f<c;f++){1===f&&1!==n&&e.writeVarint(L(2,c-1));var h=l[f].x-i,p=l[f].y-a;e.writeVarint(C(h)),e.writeVarint(C(p)),i+=h,a+=p}3===n&&e.writeVarint(L(7,1))}}function O(t,e){var r=typeof t;"string"===r?e.writeStringField(1,t):"boolean"===r?e.writeBooleanField(7,t):"number"===r&&(t%1!=0?e.writeDoubleField(3,t):t<0?e.writeSVarintField(6,t):e.writeVarintField(5,t))}function I(t,e,r,n,i,a){if(!(i-n<=r)){var o=n+i>>1;D(t,e,o,n,i,a%2),I(t,e,r,n,o-1,a+1),I(t,e,r,o+1,i,a+1)}}function D(t,e,r,n,i,a){for(;i>n;){if(i-n>600){var o=i-n+1,s=r-n+1,l=Math.log(o),u=.5*Math.exp(2*l/3),c=.5*Math.sqrt(l*u*(o-u)/o)*(s-o/2<0?-1:1);D(t,e,r,Math.max(n,Math.floor(r-s*u/o+c)),Math.min(i,Math.floor(r+(o-s)*u/o+c)),a)}var f=e[2*r+a],h=n,p=i;for(z(t,e,n,r),e[2*i+a]>f&&z(t,e,n,i);h<p;){for(z(t,e,h,p),h++,p--;e[2*h+a]<f;)h++;for(;e[2*p+a]>f;)p--}e[2*n+a]===f?z(t,e,n,p):z(t,e,++p,i),p<=r&&(n=p+1),r<=p&&(i=p-1)}}function z(t,e,r,n){R(t,r,n),R(e,2*r,2*n),R(e,2*r+1,2*n+1)}function R(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function F(t,e,r,n){var i=t-r,a=e-n;return i*i+a*a}_.fromVectorTileJs=w,_.fromGeojsonVt=T,_.GeoJSONWrapper=k;var B=function(t){return t[0]},N=function(t){return t[1]},j=function(t,e,r,n,i){void 0===e&&(e=B),void 0===r&&(r=N),void 0===n&&(n=64),void 0===i&&(i=Float64Array),this.nodeSize=n,this.points=t;for(var a=t.length<65536?Uint16Array:Uint32Array,o=this.ids=new a(t.length),s=this.coords=new i(2*t.length),l=0;l<t.length;l++)o[l]=l,s[2*l]=e(t[l]),s[2*l+1]=r(t[l]);I(o,s,n,0,o.length-1,0)};j.prototype.range=function(t,e,r,n){return function(t,e,r,n,i,a,o){for(var s,l,u=[0,t.length-1,0],c=[];u.length;){var f=u.pop(),h=u.pop(),p=u.pop();if(h-p<=o)for(var d=p;d<=h;d++)s=e[2*d],l=e[2*d+1],s>=r&&s<=i&&l>=n&&l<=a&&c.push(t[d]);else{var v=Math.floor((p+h)/2);s=e[2*v],l=e[2*v+1],s>=r&&s<=i&&l>=n&&l<=a&&c.push(t[v]);var g=(f+1)%2;(0===f?r<=s:n<=l)&&(u.push(p),u.push(v-1),u.push(g)),(0===f?i>=s:a>=l)&&(u.push(v+1),u.push(h),u.push(g))}}return c}(this.ids,this.coords,t,e,r,n,this.nodeSize)},j.prototype.within=function(t,e,r){return function(t,e,r,n,i,a){for(var o=[0,t.length-1,0],s=[],l=i*i;o.length;){var u=o.pop(),c=o.pop(),f=o.pop();if(c-f<=a)for(var h=f;h<=c;h++)F(e[2*h],e[2*h+1],r,n)<=l&&s.push(t[h]);else{var p=Math.floor((f+c)/2),d=e[2*p],v=e[2*p+1];F(d,v,r,n)<=l&&s.push(t[p]);var g=(u+1)%2;(0===u?r-i<=d:n-i<=v)&&(o.push(f),o.push(p-1),o.push(g)),(0===u?r+i>=d:n+i>=v)&&(o.push(p+1),o.push(c),o.push(g))}}return s}(this.ids,this.coords,t,e,r,this.nodeSize)};var U={minZoom:0,maxZoom:16,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:function(t){return t}},V=function(t){this.options=X(Object.create(U),t),this.trees=new Array(this.options.maxZoom+1)};function H(t,e,r,n,i){return{x:t,y:e,zoom:1/0,id:r,parentId:-1,numPoints:n,properties:i}}function q(t,e){var r=t.geometry.coordinates,n=r[0],i=r[1];return{x:Y(n),y:W(i),zoom:1/0,index:e,parentId:-1}}function G(t){return{type:"Feature",id:t.id,properties:Z(t),geometry:{type:"Point",coordinates:[(n=t.x,360*(n-.5)),(e=t.y,r=(180-360*e)*Math.PI/180,360*Math.atan(Math.exp(r))/Math.PI-90)]}};var e,r,n}function Z(t){var e=t.numPoints,r=e>=1e4?Math.round(e/1e3)+"k":e>=1e3?Math.round(e/100)/10+"k":e;return X(X({},t.properties),{cluster:!0,cluster_id:t.id,point_count:e,point_count_abbreviated:r})}function Y(t){return t/360+.5}function W(t){var e=Math.sin(t*Math.PI/180),r=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r<0?0:r>1?1:r}function X(t,e){for(var r in e)t[r]=e[r];return t}function J(t){return t.x}function K(t){return t.y}function $(t,e,r,n){for(var i,a=n,o=r-e>>1,s=r-e,l=t[e],u=t[e+1],c=t[r],f=t[r+1],h=e+3;h<r;h+=3){var p=Q(t[h],t[h+1],l,u,c,f);if(p>a)i=h,a=p;else if(p===a){var d=Math.abs(h-o);d<s&&(i=h,s=d)}}a>n&&(i-e>3&&$(t,e,i,n),t[i+2]=a,r-i>3&&$(t,i,r,n))}function Q(t,e,r,n,i,a){var o=i-r,s=a-n;if(0!==o||0!==s){var l=((t-r)*o+(e-n)*s)/(o*o+s*s);l>1?(r=i,n=a):l>0&&(r+=o*l,n+=s*l)}return(o=t-r)*o+(s=e-n)*s}function tt(t,e,r,n){var i={id:void 0===t?null:t,type:e,geometry:r,tags:n,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};return function(t){var e=t.geometry,r=t.type;if("Point"===r||"MultiPoint"===r||"LineString"===r)et(t,e);else if("Polygon"===r||"MultiLineString"===r)for(var n=0;n<e.length;n++)et(t,e[n]);else if("MultiPolygon"===r)for(n=0;n<e.length;n++)for(var i=0;i<e[n].length;i++)et(t,e[n][i])}(i),i}function et(t,e){for(var r=0;r<e.length;r+=3)t.minX=Math.min(t.minX,e[r]),t.minY=Math.min(t.minY,e[r+1]),t.maxX=Math.max(t.maxX,e[r]),t.maxY=Math.max(t.maxY,e[r+1])}function rt(t,e,r,n){if(e.geometry){var i=e.geometry.coordinates,a=e.geometry.type,o=Math.pow(r.tolerance/((1<<r.maxZoom)*r.extent),2),s=[],l=e.id;if(r.promoteId?l=e.properties[r.promoteId]:r.generateId&&(l=n||0),"Point"===a)nt(i,s);else if("MultiPoint"===a)for(var u=0;u<i.length;u++)nt(i[u],s);else if("LineString"===a)it(i,s,o,!1);else if("MultiLineString"===a){if(r.lineMetrics){for(u=0;u<i.length;u++)s=[],it(i[u],s,o,!1),t.push(tt(l,"LineString",s,e.properties));return}at(i,s,o,!1)}else if("Polygon"===a)at(i,s,o,!0);else{if("MultiPolygon"!==a){if("GeometryCollection"===a){for(u=0;u<e.geometry.geometries.length;u++)rt(t,{id:l,geometry:e.geometry.geometries[u],properties:e.properties},r,n);return}throw new Error("Input data is not a valid GeoJSON object.")}for(u=0;u<i.length;u++){var c=[];at(i[u],c,o,!0),s.push(c)}}t.push(tt(l,a,s,e.properties))}}function nt(t,e){e.push(ot(t[0])),e.push(st(t[1])),e.push(0)}function it(t,e,r,n){for(var i,a,o=0,s=0;s<t.length;s++){var l=ot(t[s][0]),u=st(t[s][1]);e.push(l),e.push(u),e.push(0),s>0&&(o+=n?(i*u-l*a)/2:Math.sqrt(Math.pow(l-i,2)+Math.pow(u-a,2))),i=l,a=u}var c=e.length-3;e[2]=1,$(e,0,c,r),e[c+2]=1,e.size=Math.abs(o),e.start=0,e.end=e.size}function at(t,e,r,n){for(var i=0;i<t.length;i++){var a=[];it(t[i],a,r,n),e.push(a)}}function ot(t){return t/360+.5}function st(t){var e=Math.sin(t*Math.PI/180),r=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r<0?0:r>1?1:r}function lt(t,e,r,n,i,a,o,s){if(n/=e,a>=(r/=e)&&o<n)return t;if(o<r||a>=n)return null;for(var l=[],u=0;u<t.length;u++){var c=t[u],f=c.geometry,h=c.type,p=0===i?c.minX:c.minY,d=0===i?c.maxX:c.maxY;if(p>=r&&d<n)l.push(c);else if(!(d<r||p>=n)){var v=[];if("Point"===h||"MultiPoint"===h)ut(f,v,r,n,i);else if("LineString"===h)ct(f,v,r,n,i,!1,s.lineMetrics);else if("MultiLineString"===h)ht(f,v,r,n,i,!1);else if("Polygon"===h)ht(f,v,r,n,i,!0);else if("MultiPolygon"===h)for(var g=0;g<f.length;g++){var y=[];ht(f[g],y,r,n,i,!0),y.length&&v.push(y)}if(v.length){if(s.lineMetrics&&"LineString"===h){for(g=0;g<v.length;g++)l.push(tt(c.id,h,v[g],c.tags));continue}"LineString"!==h&&"MultiLineString"!==h||(1===v.length?(h="LineString",v=v[0]):h="MultiLineString"),"Point"!==h&&"MultiPoint"!==h||(h=3===v.length?"Point":"MultiPoint"),l.push(tt(c.id,h,v,c.tags))}}}return l.length?l:null}function ut(t,e,r,n,i){for(var a=0;a<t.length;a+=3){var o=t[a+i];o>=r&&o<=n&&(e.push(t[a]),e.push(t[a+1]),e.push(t[a+2]))}}function ct(t,e,r,n,i,a,o){for(var s,l,u=ft(t),c=0===i?dt:vt,f=t.start,h=0;h<t.length-3;h+=3){var p=t[h],d=t[h+1],v=t[h+2],g=t[h+3],y=t[h+4],m=0===i?p:d,x=0===i?g:y,b=!1;o&&(s=Math.sqrt(Math.pow(p-g,2)+Math.pow(d-y,2))),m<r?x>r&&(l=c(u,p,d,g,y,r),o&&(u.start=f+s*l)):m>n?x<n&&(l=c(u,p,d,g,y,n),o&&(u.start=f+s*l)):pt(u,p,d,v),x<r&&m>=r&&(l=c(u,p,d,g,y,r),b=!0),x>n&&m<=n&&(l=c(u,p,d,g,y,n),b=!0),!a&&b&&(o&&(u.end=f+s*l),e.push(u),u=ft(t)),o&&(f+=s)}var _=t.length-3;p=t[_],d=t[_+1],v=t[_+2],(m=0===i?p:d)>=r&&m<=n&&pt(u,p,d,v),_=u.length-3,a&&_>=3&&(u[_]!==u[0]||u[_+1]!==u[1])&&pt(u,u[0],u[1],u[2]),u.length&&e.push(u)}function ft(t){var e=[];return e.size=t.size,e.start=t.start,e.end=t.end,e}function ht(t,e,r,n,i,a){for(var o=0;o<t.length;o++)ct(t[o],e,r,n,i,a,!1)}function pt(t,e,r,n){t.push(e),t.push(r),t.push(n)}function dt(t,e,r,n,i,a){var o=(a-e)/(n-e);return t.push(a),t.push(r+(i-r)*o),t.push(1),o}function vt(t,e,r,n,i,a){var o=(a-r)/(i-r);return t.push(e+(n-e)*o),t.push(a),t.push(1),o}function gt(t,e){for(var r=[],n=0;n<t.length;n++){var i,a=t[n],o=a.type;if("Point"===o||"MultiPoint"===o||"LineString"===o)i=yt(a.geometry,e);else if("MultiLineString"===o||"Polygon"===o){i=[];for(var s=0;s<a.geometry.length;s++)i.push(yt(a.geometry[s],e))}else if("MultiPolygon"===o)for(i=[],s=0;s<a.geometry.length;s++){for(var l=[],u=0;u<a.geometry[s].length;u++)l.push(yt(a.geometry[s][u],e));i.push(l)}r.push(tt(a.id,o,i,a.tags))}return r}function yt(t,e){var r=[];r.size=t.size,void 0!==t.start&&(r.start=t.start,r.end=t.end);for(var n=0;n<t.length;n+=3)r.push(t[n]+e,t[n+1],t[n+2]);return r}function mt(t,e){if(t.transformed)return t;var r,n,i,a=1<<t.z,o=t.x,s=t.y;for(r=0;r<t.features.length;r++){var l=t.features[r],u=l.geometry,c=l.type;if(l.geometry=[],1===c)for(n=0;n<u.length;n+=2)l.geometry.push(xt(u[n],u[n+1],e,a,o,s));else for(n=0;n<u.length;n++){var f=[];for(i=0;i<u[n].length;i+=2)f.push(xt(u[n][i],u[n][i+1],e,a,o,s));l.geometry.push(f)}}return t.transformed=!0,t}function xt(t,e,r,n,i,a){return[Math.round(r*(t*n-i)),Math.round(r*(e*n-a))]}function bt(t,e,r,n,i){for(var a=e===i.maxZoom?0:i.tolerance/((1<<e)*i.extent),o={features:[],numPoints:0,numSimplified:0,numFeatures:0,source:null,x:r,y:n,z:e,transformed:!1,minX:2,minY:1,maxX:-1,maxY:0},s=0;s<t.length;s++){o.numFeatures++,_t(o,t[s],a,i);var l=t[s].minX,u=t[s].minY,c=t[s].maxX,f=t[s].maxY;l<o.minX&&(o.minX=l),u<o.minY&&(o.minY=u),c>o.maxX&&(o.maxX=c),f>o.maxY&&(o.maxY=f)}return o}function _t(t,e,r,n){var i=e.geometry,a=e.type,o=[];if("Point"===a||"MultiPoint"===a)for(var s=0;s<i.length;s+=3)o.push(i[s]),o.push(i[s+1]),t.numPoints++,t.numSimplified++;else if("LineString"===a)wt(o,i,t,r,!1,!1);else if("MultiLineString"===a||"Polygon"===a)for(s=0;s<i.length;s++)wt(o,i[s],t,r,"Polygon"===a,0===s);else if("MultiPolygon"===a)for(var l=0;l<i.length;l++){var u=i[l];for(s=0;s<u.length;s++)wt(o,u[s],t,r,!0,0===s)}if(o.length){var c=e.tags||null;if("LineString"===a&&n.lineMetrics){for(var f in c={},e.tags)c[f]=e.tags[f];c.mapbox_clip_start=i.start/i.size,c.mapbox_clip_end=i.end/i.size}var h={geometry:o,type:"Polygon"===a||"MultiPolygon"===a?3:"LineString"===a||"MultiLineString"===a?2:1,tags:c};null!==e.id&&(h.id=e.id),t.features.push(h)}}function wt(t,e,r,n,i,a){var o=n*n;if(n>0&&e.size<(i?o:n))r.numPoints+=e.length/3;else{for(var s=[],l=0;l<e.length;l+=3)(0===n||e[l+2]>o)&&(r.numSimplified++,s.push(e[l]),s.push(e[l+1])),r.numPoints++;i&&function(t,e){for(var r=0,n=0,i=t.length,a=i-2;n<i;a=n,n+=2)r+=(t[n]-t[a])*(t[n+1]+t[a+1]);if(r>0===e)for(n=0,i=t.length;n<i/2;n+=2){var o=t[n],s=t[n+1];t[n]=t[i-2-n],t[n+1]=t[i-1-n],t[i-2-n]=o,t[i-1-n]=s}}(s,a),t.push(s)}}function Tt(t,e){var r=(e=this.options=function(t,e){for(var r in e)t[r]=e[r];return t}(Object.create(this.options),e)).debug;if(r&&console.time("preprocess data"),e.maxZoom<0||e.maxZoom>24)throw new Error("maxZoom should be in the 0-24 range");if(e.promoteId&&e.generateId)throw new Error("promoteId and generateId cannot be used together.");var n=function(t,e){var r=[];if("FeatureCollection"===t.type)for(var n=0;n<t.features.length;n++)rt(r,t.features[n],e,n);else"Feature"===t.type?rt(r,t,e):rt(r,{geometry:t},e);return r}(t,e);this.tiles={},this.tileCoords=[],r&&(console.timeEnd("preprocess data"),console.log("index: maxZoom: %d, maxPoints: %d",e.indexMaxZoom,e.indexMaxPoints),console.time("generate tiles"),this.stats={},this.total=0),(n=function(t,e){var r=e.buffer/e.extent,n=t,i=lt(t,1,-1-r,r,0,-1,2,e),a=lt(t,1,1-r,2+r,0,-1,2,e);return(i||a)&&(n=lt(t,1,-r,1+r,0,-1,2,e)||[],i&&(n=gt(i,1).concat(n)),a&&(n=n.concat(gt(a,-1)))),n}(n,e)).length&&this.splitTile(n,0,0,0),r&&(n.length&&console.log("features: %d, points: %d",this.tiles[0].numFeatures,this.tiles[0].numPoints),console.timeEnd("generate tiles"),console.log("tiles generated:",this.total,JSON.stringify(this.stats)))}function kt(t,e,r){return 32*((1<<t)*r+e)+t}function At(t,e){var r=t.tileID.canonical;if(!this._geoJSONIndex)return e(null,null);var n=this._geoJSONIndex.getTile(r.z,r.x,r.y);if(!n)return e(null,null);var i=new g(n.features),a=_(i);0===a.byteOffset&&a.byteLength===a.buffer.byteLength||(a=new Uint8Array(a)),e(null,{vectorTile:i,rawData:a.buffer})}V.prototype.load=function(t){var e=this.options,r=e.log,n=e.minZoom,i=e.maxZoom,a=e.nodeSize;r&&console.time("total time");var o="prepare "+t.length+" points";r&&console.time(o),this.points=t;for(var s=[],l=0;l<t.length;l++)t[l].geometry&&s.push(q(t[l],l));this.trees[i+1]=new j(s,J,K,a,Float32Array),r&&console.timeEnd(o);for(var u=i;u>=n;u--){var c=+Date.now();s=this._cluster(s,u),this.trees[u]=new j(s,J,K,a,Float32Array),r&&console.log("z%d: %d clusters in %dms",u,s.length,+Date.now()-c)}return r&&console.timeEnd("total time"),this},V.prototype.getClusters=function(t,e){var r=((t[0]+180)%360+360)%360-180,n=Math.max(-90,Math.min(90,t[1])),i=180===t[2]?180:((t[2]+180)%360+360)%360-180,a=Math.max(-90,Math.min(90,t[3]));if(t[2]-t[0]>=360)r=-180,i=180;else if(r>i){var o=this.getClusters([r,n,180,a],e),s=this.getClusters([-180,n,i,a],e);return o.concat(s)}for(var l=this.trees[this._limitZoom(e)],u=[],c=0,f=l.range(Y(r),W(a),Y(i),W(n));c<f.length;c+=1){var h=f[c],p=l.points[h];u.push(p.numPoints?G(p):this.points[p.index])}return u},V.prototype.getChildren=function(t){var e=this._getOriginId(t),r=this._getOriginZoom(t),n="No cluster with the specified id.",i=this.trees[r];if(!i)throw new Error(n);var a=i.points[e];if(!a)throw new Error(n);for(var o=this.options.radius/(this.options.extent*Math.pow(2,r-1)),s=[],l=0,u=i.within(a.x,a.y,o);l<u.length;l+=1){var c=u[l],f=i.points[c];f.parentId===t&&s.push(f.numPoints?G(f):this.points[f.index])}if(0===s.length)throw new Error(n);return s},V.prototype.getLeaves=function(t,e,r){e=e||10,r=r||0;var n=[];return this._appendLeaves(n,t,e,r,0),n},V.prototype.getTile=function(t,e,r){var n=this.trees[this._limitZoom(t)],i=Math.pow(2,t),a=this.options,o=a.extent,s=a.radius/o,l=(r-s)/i,u=(r+1+s)/i,c={features:[]};return this._addTileFeatures(n.range((e-s)/i,l,(e+1+s)/i,u),n.points,e,r,i,c),0===e&&this._addTileFeatures(n.range(1-s/i,l,1,u),n.points,i,r,i,c),e===i-1&&this._addTileFeatures(n.range(0,l,s/i,u),n.points,-1,r,i,c),c.features.length?c:null},V.prototype.getClusterExpansionZoom=function(t){for(var e=this._getOriginZoom(t)-1;e<=this.options.maxZoom;){var r=this.getChildren(t);if(e++,1!==r.length)break;t=r[0].properties.cluster_id}return e},V.prototype._appendLeaves=function(t,e,r,n,i){for(var a=0,o=this.getChildren(e);a<o.length;a+=1){var s=o[a],l=s.properties;if(l&&l.cluster?i+l.point_count<=n?i+=l.point_count:i=this._appendLeaves(t,l.cluster_id,r,n,i):i<n?i++:t.push(s),t.length===r)break}return i},V.prototype._addTileFeatures=function(t,e,r,n,i,a){for(var o=0,s=t;o<s.length;o+=1){var l=e[s[o]],u=l.numPoints,c={type:1,geometry:[[Math.round(this.options.extent*(l.x*i-r)),Math.round(this.options.extent*(l.y*i-n))]],tags:u?Z(l):this.points[l.index].properties},f=void 0;u?f=l.id:this.options.generateId?f=l.index:this.points[l.index].id&&(f=this.points[l.index].id),void 0!==f&&(c.id=f),a.features.push(c)}},V.prototype._limitZoom=function(t){return Math.max(this.options.minZoom,Math.min(t,this.options.maxZoom+1))},V.prototype._cluster=function(t,e){for(var r=[],n=this.options,i=n.radius,a=n.extent,o=n.reduce,s=i/(a*Math.pow(2,e)),l=0;l<t.length;l++){var u=t[l];if(!(u.zoom<=e)){u.zoom=e;for(var c=this.trees[e+1],f=c.within(u.x,u.y,s),h=u.numPoints||1,p=u.x*h,d=u.y*h,v=o&&h>1?this._map(u,!0):null,g=(l<<5)+(e+1)+this.points.length,y=0,m=f;y<m.length;y+=1){var x=m[y],b=c.points[x];if(!(b.zoom<=e)){b.zoom=e;var _=b.numPoints||1;p+=b.x*_,d+=b.y*_,h+=_,b.parentId=g,o&&(v||(v=this._map(u,!0)),o(v,this._map(b)))}}1===h?r.push(u):(u.parentId=g,r.push(H(p/h,d/h,g,h,v)))}}return r},V.prototype._getOriginId=function(t){return t-this.points.length>>5},V.prototype._getOriginZoom=function(t){return(t-this.points.length)%32},V.prototype._map=function(t,e){if(t.numPoints)return e?X({},t.properties):t.properties;var r=this.points[t.index].properties,n=this.options.map(r);return e&&n===r?X({},n):n},Tt.prototype.options={maxZoom:14,indexMaxZoom:5,indexMaxPoints:1e5,tolerance:3,extent:4096,buffer:64,lineMetrics:!1,promoteId:null,generateId:!1,debug:0},Tt.prototype.splitTile=function(t,e,r,n,i,a,o){for(var s=[t,e,r,n],l=this.options,u=l.debug;s.length;){n=s.pop(),r=s.pop(),e=s.pop(),t=s.pop();var c=1<<e,f=kt(e,r,n),h=this.tiles[f];if(!h&&(u>1&&console.time("creation"),h=this.tiles[f]=bt(t,e,r,n,l),this.tileCoords.push({z:e,x:r,y:n}),u)){u>1&&(console.log("tile z%d-%d-%d (features: %d, points: %d, simplified: %d)",e,r,n,h.numFeatures,h.numPoints,h.numSimplified),console.timeEnd("creation"));var p="z"+e;this.stats[p]=(this.stats[p]||0)+1,this.total++}if(h.source=t,i){if(e===l.maxZoom||e===i)continue;var d=1<<i-e;if(r!==Math.floor(a/d)||n!==Math.floor(o/d))continue}else if(e===l.indexMaxZoom||h.numPoints<=l.indexMaxPoints)continue;if(h.source=null,0!==t.length){u>1&&console.time("clipping");var v,g,y,m,x,b,_=.5*l.buffer/l.extent,w=.5-_,T=.5+_,k=1+_;v=g=y=m=null,x=lt(t,c,r-_,r+T,0,h.minX,h.maxX,l),b=lt(t,c,r+w,r+k,0,h.minX,h.maxX,l),t=null,x&&(v=lt(x,c,n-_,n+T,1,h.minY,h.maxY,l),g=lt(x,c,n+w,n+k,1,h.minY,h.maxY,l),x=null),b&&(y=lt(b,c,n-_,n+T,1,h.minY,h.maxY,l),m=lt(b,c,n+w,n+k,1,h.minY,h.maxY,l),b=null),u>1&&console.timeEnd("clipping"),s.push(v||[],e+1,2*r,2*n),s.push(g||[],e+1,2*r,2*n+1),s.push(y||[],e+1,2*r+1,2*n),s.push(m||[],e+1,2*r+1,2*n+1)}}},Tt.prototype.getTile=function(t,e,r){var n=this.options,i=n.extent,a=n.debug;if(t<0||t>24)return null;var o=1<<t,s=kt(t,e=(e%o+o)%o,r);if(this.tiles[s])return mt(this.tiles[s],i);a>1&&console.log("drilling down to z%d-%d-%d",t,e,r);for(var l,u=t,c=e,f=r;!l&&u>0;)u--,c=Math.floor(c/2),f=Math.floor(f/2),l=this.tiles[kt(u,c,f)];return l&&l.source?(a>1&&console.log("found parent tile z%d-%d-%d",u,c,f),a>1&&console.time("drilling down"),this.splitTile(l.source,u,c,f,t,e,r),a>1&&console.timeEnd("drilling down"),this.tiles[s]?mt(this.tiles[s],i):null):null};var Mt=function(e){function r(t,r,n,i){e.call(this,t,r,n,At),i&&(this.loadGeoJSON=i)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.loadData=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),this._pendingCallback=e,this._pendingLoadDataParams=t,this._state&&"Idle"!==this._state?this._state="NeedsLoadData":(this._state="Coalescing",this._loadData())},r.prototype._loadData=function(){var e=this;if(this._pendingCallback&&this._pendingLoadDataParams){var r=this._pendingCallback,n=this._pendingLoadDataParams;delete this._pendingCallback,delete this._pendingLoadDataParams;var i=!!(n&&n.request&&n.request.collectResourceTiming)&&new t.RequestPerformance(n.request);this.loadGeoJSON(n,(function(a,o){if(a||!o)return r(a);if("object"!=typeof o)return r(new Error("Input data given to '"+n.source+"' is not a valid GeoJSON object."));f(o,!0);try{e._geoJSONIndex=n.cluster?new V(function(e){var r=e.superclusterOptions,n=e.clusterProperties;if(!n||!r)return r;for(var i={},a={},o={accumulated:null,zoom:0},s={properties:null},l=Object.keys(n),u=0,c=l;u<c.length;u+=1){var f=c[u],h=n[f],p=h[0],d=h[1],v=t.createExpression(d),g=t.createExpression("string"==typeof p?[p,["accumulated"],["get",f]]:p);i[f]=v.value,a[f]=g.value}return r.map=function(t){s.properties=t;for(var e={},r=0,n=l;r<n.length;r+=1){var a=n[r];e[a]=i[a].evaluate(o,s)}return e},r.reduce=function(t,e){s.properties=e;for(var r=0,n=l;r<n.length;r+=1){var i=n[r];o.accumulated=t[i],t[i]=a[i].evaluate(o,s)}},r}(n)).load(o.features):function(t,e){return new Tt(t,e)}(o,n.geojsonVtOptions)}catch(a){return r(a)}e.loaded={};var s={};if(i){var l=i.finish();l&&(s.resourceTiming={},s.resourceTiming[n.source]=JSON.parse(JSON.stringify(l)))}r(null,s)}))}},r.prototype.coalesce=function(){"Coalescing"===this._state?this._state="Idle":"NeedsLoadData"===this._state&&(this._state="Coalescing",this._loadData())},r.prototype.reloadTile=function(t,r){var n=this.loaded,i=t.uid;return n&&n[i]?e.prototype.reloadTile.call(this,t,r):this.loadTile(t,r)},r.prototype.loadGeoJSON=function(e,r){if(e.request)t.getJSON(e.request,r);else{if("string"!=typeof e.data)return r(new Error("Input data given to '"+e.source+"' is not a valid GeoJSON object."));try{return r(null,JSON.parse(e.data))}catch(t){return r(new Error("Input data given to '"+e.source+"' is not a valid GeoJSON object."))}}},r.prototype.removeSource=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),e()},r.prototype.getClusterExpansionZoom=function(t,e){try{e(null,this._geoJSONIndex.getClusterExpansionZoom(t.clusterId))}catch(t){e(t)}},r.prototype.getClusterChildren=function(t,e){try{e(null,this._geoJSONIndex.getChildren(t.clusterId))}catch(t){e(t)}},r.prototype.getClusterLeaves=function(t,e){try{e(null,this._geoJSONIndex.getLeaves(t.clusterId,t.limit,t.offset))}catch(t){e(t)}},r}(l);var St=function(e){var r=this;this.self=e,this.actor=new t.Actor(e,this),this.layerIndexes={},this.availableImages={},this.workerSourceTypes={vector:l,geojson:Mt},this.workerSources={},this.demWorkerSources={},this.self.registerWorkerSource=function(t,e){if(r.workerSourceTypes[t])throw new Error('Worker source with name "'+t+'" already registered.');r.workerSourceTypes[t]=e},this.self.registerRTLTextPlugin=function(e){if(t.plugin.isParsed())throw new Error("RTL text plugin already registered.");t.plugin.applyArabicShaping=e.applyArabicShaping,t.plugin.processBidirectionalText=e.processBidirectionalText,t.plugin.processStyledBidirectionalText=e.processStyledBidirectionalText}};return St.prototype.setReferrer=function(t,e){this.referrer=e},St.prototype.setImages=function(t,e,r){for(var n in this.availableImages[t]=e,this.workerSources[t]){var i=this.workerSources[t][n];for(var a in i)i[a].availableImages=e}r()},St.prototype.setLayers=function(t,e,r){this.getLayerIndex(t).replace(e),r()},St.prototype.updateLayers=function(t,e,r){this.getLayerIndex(t).update(e.layers,e.removedIds),r()},St.prototype.loadTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).loadTile(e,r)},St.prototype.loadDEMTile=function(t,e,r){this.getDEMWorkerSource(t,e.source).loadTile(e,r)},St.prototype.reloadTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).reloadTile(e,r)},St.prototype.abortTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).abortTile(e,r)},St.prototype.removeTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).removeTile(e,r)},St.prototype.removeDEMTile=function(t,e){this.getDEMWorkerSource(t,e.source).removeTile(e)},St.prototype.removeSource=function(t,e,r){if(this.workerSources[t]&&this.workerSources[t][e.type]&&this.workerSources[t][e.type][e.source]){var n=this.workerSources[t][e.type][e.source];delete this.workerSources[t][e.type][e.source],void 0!==n.removeSource?n.removeSource(e,r):r()}},St.prototype.loadWorkerSource=function(t,e,r){try{this.self.importScripts(e.url),r()}catch(t){r(t.toString())}},St.prototype.syncRTLPluginState=function(e,r,n){try{t.plugin.setState(r);var i=t.plugin.getPluginURL();if(t.plugin.isLoaded()&&!t.plugin.isParsed()&&null!=i){this.self.importScripts(i);var a=t.plugin.isParsed();n(a?void 0:new Error("RTL Text Plugin failed to import scripts from "+i),a)}}catch(t){n(t.toString())}},St.prototype.getAvailableImages=function(t){var e=this.availableImages[t];return e||(e=[]),e},St.prototype.getLayerIndex=function(t){var e=this.layerIndexes[t];return e||(e=this.layerIndexes[t]=new n),e},St.prototype.getWorkerSource=function(t,e,r){var n=this;if(this.workerSources[t]||(this.workerSources[t]={}),this.workerSources[t][e]||(this.workerSources[t][e]={}),!this.workerSources[t][e][r]){var i={send:function(e,r,i){n.actor.send(e,r,i,t)}};this.workerSources[t][e][r]=new this.workerSourceTypes[e](i,this.getLayerIndex(t),this.getAvailableImages(t))}return this.workerSources[t][e][r]},St.prototype.getDEMWorkerSource=function(t,e){return this.demWorkerSources[t]||(this.demWorkerSources[t]={}),this.demWorkerSources[t][e]||(this.demWorkerSources[t][e]=new c),this.demWorkerSources[t][e]},St.prototype.enforceCacheSizeLimit=function(e,r){t.enforceCacheSizeLimit(r)},"undefined"!=typeof WorkerGlobalScope&&void 0!==t.window&&t.window instanceof WorkerGlobalScope&&(t.window.worker=new St(t.window)),St})),n(0,(function(t){var e=t.createCommonjsModule((function(t){function e(t){return!r(t)}function r(t){return"undefined"!=typeof window&&"undefined"!=typeof document?Array.prototype&&Array.prototype.every&&Array.prototype.filter&&Array.prototype.forEach&&Array.prototype.indexOf&&Array.prototype.lastIndexOf&&Array.prototype.map&&Array.prototype.some&&Array.prototype.reduce&&Array.prototype.reduceRight&&Array.isArray?Function.prototype&&Function.prototype.bind?Object.keys&&Object.create&&Object.getPrototypeOf&&Object.getOwnPropertyNames&&Object.isSealed&&Object.isFrozen&&Object.isExtensible&&Object.getOwnPropertyDescriptor&&Object.defineProperty&&Object.defineProperties&&Object.seal&&Object.freeze&&Object.preventExtensions?"JSON"in window&&"parse"in JSON&&"stringify"in JSON?function(){if(!("Worker"in window&&"Blob"in window&&"URL"in window))return!1;var t,e,r=new Blob([""],{type:"text/javascript"}),n=URL.createObjectURL(r);try{e=new Worker(n),t=!0}catch(e){t=!1}return e&&e.terminate(),URL.revokeObjectURL(n),t}()?"Uint8ClampedArray"in window?ArrayBuffer.isView?function(){var t=document.createElement("canvas");t.width=t.height=1;var e=t.getContext("2d");if(!e)return!1;var r=e.getImageData(0,0,1,1);return r&&r.width===t.width}()?(r=t&&t.failIfMajorPerformanceCaveat,void 0===n[r]&&(n[r]=function(t){var r=function(t){var r=document.createElement("canvas"),n=Object.create(e.webGLContextAttributes);return n.failIfMajorPerformanceCaveat=t,r.probablySupportsContext?r.probablySupportsContext("webgl",n)||r.probablySupportsContext("experimental-webgl",n):r.supportsContext?r.supportsContext("webgl",n)||r.supportsContext("experimental-webgl",n):r.getContext("webgl",n)||r.getContext("experimental-webgl",n)}(t);if(!r)return!1;var n=r.createShader(r.VERTEX_SHADER);return!(!n||r.isContextLost())&&(r.shaderSource(n,"void main() {}"),r.compileShader(n),!0===r.getShaderParameter(n,r.COMPILE_STATUS))}(r)),n[r]?void 0:"insufficient WebGL support"):"insufficient Canvas/getImageData support":"insufficient ArrayBuffer support":"insufficient Uint8ClampedArray support":"insufficient worker support":"insufficient JSON support":"insufficient Object support":"insufficient Function support":"insufficent Array support":"not a browser";var r}t.exports?t.exports=e:window&&(window.mapboxgl=window.mapboxgl||{},window.mapboxgl.supported=e,window.mapboxgl.notSupportedReason=r);var n={};e.webGLContextAttributes={antialias:!1,alpha:!0,stencil:!0,depth:!0}})),r={create:function(e,r,n){var i=t.window.document.createElement(e);return void 0!==r&&(i.className=r),n&&n.appendChild(i),i},createNS:function(e,r){return t.window.document.createElementNS(e,r)}},n=t.window.document.documentElement.style;function i(t){if(!n)return t[0];for(var e=0;e<t.length;e++)if(t[e]in n)return t[e];return t[0]}var a,o=i(["userSelect","MozUserSelect","WebkitUserSelect","msUserSelect"]);r.disableDrag=function(){n&&o&&(a=n[o],n[o]="none")},r.enableDrag=function(){n&&o&&(n[o]=a)};var s=i(["transform","WebkitTransform"]);r.setTransform=function(t,e){t.style[s]=e};var l=!1;try{var u=Object.defineProperty({},"passive",{get:function(){l=!0}});t.window.addEventListener("test",u,u),t.window.removeEventListener("test",u,u)}catch(t){l=!1}r.addEventListener=function(t,e,r,n){void 0===n&&(n={}),"passive"in n&&l?t.addEventListener(e,r,n):t.addEventListener(e,r,n.capture)},r.removeEventListener=function(t,e,r,n){void 0===n&&(n={}),"passive"in n&&l?t.removeEventListener(e,r,n):t.removeEventListener(e,r,n.capture)};var c=function(e){e.preventDefault(),e.stopPropagation(),t.window.removeEventListener("click",c,!0)};function f(t){var e=t.userImage;return!!(e&&e.render&&e.render())&&(t.data.replace(new Uint8Array(e.data.buffer)),!0)}r.suppressClick=function(){t.window.addEventListener("click",c,!0),t.window.setTimeout((function(){t.window.removeEventListener("click",c,!0)}),0)},r.mousePos=function(e,r){var n=e.getBoundingClientRect();return new t.Point(r.clientX-n.left-e.clientLeft,r.clientY-n.top-e.clientTop)},r.touchPos=function(e,r){for(var n=e.getBoundingClientRect(),i=[],a=0;a<r.length;a++)i.push(new t.Point(r[a].clientX-n.left-e.clientLeft,r[a].clientY-n.top-e.clientTop));return i},r.mouseButton=function(e){return void 0!==t.window.InstallTrigger&&2===e.button&&e.ctrlKey&&t.window.navigator.platform.toUpperCase().indexOf("MAC")>=0?0:e.button},r.remove=function(t){t.parentNode&&t.parentNode.removeChild(t)};var h=function(e){function r(){e.call(this),this.images={},this.updatedImages={},this.callbackDispatchedThisFrame={},this.loaded=!1,this.requestors=[],this.patterns={},this.atlasImage=new t.RGBAImage({width:1,height:1}),this.dirty=!0}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.isLoaded=function(){return this.loaded},r.prototype.setLoaded=function(t){if(this.loaded!==t&&(this.loaded=t,t)){for(var e=0,r=this.requestors;e<r.length;e+=1){var n=r[e],i=n.ids,a=n.callback;this._notify(i,a)}this.requestors=[]}},r.prototype.getImage=function(t){return this.images[t]},r.prototype.addImage=function(t,e){this._validate(t,e)&&(this.images[t]=e)},r.prototype._validate=function(e,r){var n=!0;return this._validateStretch(r.stretchX,r.data&&r.data.width)||(this.fire(new t.ErrorEvent(new Error('Image "'+e+'" has invalid "stretchX" value'))),n=!1),this._validateStretch(r.stretchY,r.data&&r.data.height)||(this.fire(new t.ErrorEvent(new Error('Image "'+e+'" has invalid "stretchY" value'))),n=!1),this._validateContent(r.content,r)||(this.fire(new t.ErrorEvent(new Error('Image "'+e+'" has invalid "content" value'))),n=!1),n},r.prototype._validateStretch=function(t,e){if(!t)return!0;for(var r=0,n=0,i=t;n<i.length;n+=1){var a=i[n];if(a[0]<r||a[1]<a[0]||e<a[1])return!1;r=a[1]}return!0},r.prototype._validateContent=function(t,e){return!(t&&(4!==t.length||t[0]<0||e.data.width<t[0]||t[1]<0||e.data.height<t[1]||t[2]<0||e.data.width<t[2]||t[3]<0||e.data.height<t[3]||t[2]<t[0]||t[3]<t[1]))},r.prototype.updateImage=function(t,e){var r=this.images[t];e.version=r.version+1,this.images[t]=e,this.updatedImages[t]=!0},r.prototype.removeImage=function(t){var e=this.images[t];delete this.images[t],delete this.patterns[t],e.userImage&&e.userImage.onRemove&&e.userImage.onRemove()},r.prototype.listImages=function(){return Object.keys(this.images)},r.prototype.getImages=function(t,e){var r=!0;if(!this.isLoaded())for(var n=0,i=t;n<i.length;n+=1){var a=i[n];this.images[a]||(r=!1)}this.isLoaded()||r?this._notify(t,e):this.requestors.push({ids:t,callback:e})},r.prototype._notify=function(e,r){for(var n={},i=0,a=e;i<a.length;i+=1){var o=a[i];this.images[o]||this.fire(new t.Event("styleimagemissing",{id:o}));var s=this.images[o];s?n[o]={data:s.data.clone(),pixelRatio:s.pixelRatio,sdf:s.sdf,version:s.version,stretchX:s.stretchX,stretchY:s.stretchY,content:s.content,hasRenderCallback:Boolean(s.userImage&&s.userImage.render)}:t.warnOnce('Image "'+o+'" could not be loaded. Please make sure you have added the image with map.addImage() or a "sprite" property in your style. You can provide missing images by listening for the "styleimagemissing" map event.')}r(null,n)},r.prototype.getPixelSize=function(){var t=this.atlasImage;return{width:t.width,height:t.height}},r.prototype.getPattern=function(e){var r=this.patterns[e],n=this.getImage(e);if(!n)return null;if(r&&r.position.version===n.version)return r.position;if(r)r.position.version=n.version;else{var i={w:n.data.width+2,h:n.data.height+2,x:0,y:0},a=new t.ImagePosition(i,n);this.patterns[e]={bin:i,position:a}}return this._updatePatternAtlas(),this.patterns[e].position},r.prototype.bind=function(e){var r=e.gl;this.atlasTexture?this.dirty&&(this.atlasTexture.update(this.atlasImage),this.dirty=!1):this.atlasTexture=new t.Texture(e,this.atlasImage,r.RGBA),this.atlasTexture.bind(r.LINEAR,r.CLAMP_TO_EDGE)},r.prototype._updatePatternAtlas=function(){var e=[];for(var r in this.patterns)e.push(this.patterns[r].bin);var n=t.potpack(e),i=n.w,a=n.h,o=this.atlasImage;for(var s in o.resize({width:i||1,height:a||1}),this.patterns){var l=this.patterns[s].bin,u=l.x+1,c=l.y+1,f=this.images[s].data,h=f.width,p=f.height;t.RGBAImage.copy(f,o,{x:0,y:0},{x:u,y:c},{width:h,height:p}),t.RGBAImage.copy(f,o,{x:0,y:p-1},{x:u,y:c-1},{width:h,height:1}),t.RGBAImage.copy(f,o,{x:0,y:0},{x:u,y:c+p},{width:h,height:1}),t.RGBAImage.copy(f,o,{x:h-1,y:0},{x:u-1,y:c},{width:1,height:p}),t.RGBAImage.copy(f,o,{x:0,y:0},{x:u+h,y:c},{width:1,height:p})}this.dirty=!0},r.prototype.beginFrame=function(){this.callbackDispatchedThisFrame={}},r.prototype.dispatchRenderCallbacks=function(t){for(var e=0,r=t;e<r.length;e+=1){var n=r[e];if(!this.callbackDispatchedThisFrame[n]){this.callbackDispatchedThisFrame[n]=!0;var i=this.images[n];f(i)&&this.updateImage(n,i)}}},r}(t.Evented);var p=g,d=g,v=1e20;function g(t,e,r,n,i,a){this.fontSize=t||24,this.buffer=void 0===e?3:e,this.cutoff=n||.25,this.fontFamily=i||"sans-serif",this.fontWeight=a||"normal",this.radius=r||8;var o=this.size=this.fontSize+2*this.buffer;this.canvas=document.createElement("canvas"),this.canvas.width=this.canvas.height=o,this.ctx=this.canvas.getContext("2d"),this.ctx.font=this.fontWeight+" "+this.fontSize+"px "+this.fontFamily,this.ctx.textBaseline="middle",this.ctx.fillStyle="black",this.gridOuter=new Float64Array(o*o),this.gridInner=new Float64Array(o*o),this.f=new Float64Array(o),this.d=new Float64Array(o),this.z=new Float64Array(o+1),this.v=new Int16Array(o),this.middle=Math.round(o/2*(navigator.userAgent.indexOf("Gecko/")>=0?1.2:1))}function y(t,e,r,n,i,a,o){for(var s=0;s<e;s++){for(var l=0;l<r;l++)n[l]=t[l*e+s];for(m(n,i,a,o,r),l=0;l<r;l++)t[l*e+s]=i[l]}for(l=0;l<r;l++){for(s=0;s<e;s++)n[s]=t[l*e+s];for(m(n,i,a,o,e),s=0;s<e;s++)t[l*e+s]=Math.sqrt(i[s])}}function m(t,e,r,n,i){r[0]=0,n[0]=-v,n[1]=+v;for(var a=1,o=0;a<i;a++){for(var s=(t[a]+a*a-(t[r[o]]+r[o]*r[o]))/(2*a-2*r[o]);s<=n[o];)o--,s=(t[a]+a*a-(t[r[o]]+r[o]*r[o]))/(2*a-2*r[o]);r[++o]=a,n[o]=s,n[o+1]=+v}for(a=0,o=0;a<i;a++){for(;n[o+1]<a;)o++;e[a]=(a-r[o])*(a-r[o])+t[r[o]]}}g.prototype.draw=function(t){this.ctx.clearRect(0,0,this.size,this.size),this.ctx.fillText(t,this.buffer,this.middle);for(var e=this.ctx.getImageData(0,0,this.size,this.size),r=new Uint8ClampedArray(this.size*this.size),n=0;n<this.size*this.size;n++){var i=e.data[4*n+3]/255;this.gridOuter[n]=1===i?0:0===i?v:Math.pow(Math.max(0,.5-i),2),this.gridInner[n]=1===i?v:0===i?0:Math.pow(Math.max(0,i-.5),2)}for(y(this.gridOuter,this.size,this.size,this.f,this.d,this.v,this.z),y(this.gridInner,this.size,this.size,this.f,this.d,this.v,this.z),n=0;n<this.size*this.size;n++){var a=this.gridOuter[n]-this.gridInner[n];r[n]=Math.max(0,Math.min(255,Math.round(255-255*(a/this.radius+this.cutoff))))}return r},p.default=d;var x=function(t,e){this.requestManager=t,this.localIdeographFontFamily=e,this.entries={}};x.prototype.setURL=function(t){this.url=t},x.prototype.getGlyphs=function(e,r){var n=this,i=[];for(var a in e)for(var o=0,s=e[a];o<s.length;o+=1){var l=s[o];i.push({stack:a,id:l})}t.asyncAll(i,(function(t,e){var r=t.stack,i=t.id,a=n.entries[r];a||(a=n.entries[r]={glyphs:{},requests:{},ranges:{}});var o=a.glyphs[i];if(void 0===o){if(o=n._tinySDF(a,r,i))return a.glyphs[i]=o,void e(null,{stack:r,id:i,glyph:o});var s=Math.floor(i/256);if(256*s>65535)e(new Error("glyphs > 65535 not supported"));else if(a.ranges[s])e(null,{stack:r,id:i,glyph:o});else{var l=a.requests[s];l||(l=a.requests[s]=[],x.loadGlyphRange(r,s,n.url,n.requestManager,(function(t,e){if(e){for(var r in e)n._doesCharSupportLocalGlyph(+r)||(a.glyphs[+r]=e[+r]);a.ranges[s]=!0}for(var i=0,o=l;i<o.length;i+=1)(0,o[i])(t,e);delete a.requests[s]}))),l.push((function(t,n){t?e(t):n&&e(null,{stack:r,id:i,glyph:n[i]||null})}))}}else e(null,{stack:r,id:i,glyph:o})}),(function(t,e){if(t)r(t);else if(e){for(var n={},i=0,a=e;i<a.length;i+=1){var o=a[i],s=o.stack,l=o.id,u=o.glyph;(n[s]||(n[s]={}))[l]=u&&{id:u.id,bitmap:u.bitmap.clone(),metrics:u.metrics}}r(null,n)}}))},x.prototype._doesCharSupportLocalGlyph=function(e){return!!this.localIdeographFontFamily&&(t.isChar["CJK Unified Ideographs"](e)||t.isChar["Hangul Syllables"](e)||t.isChar.Hiragana(e)||t.isChar.Katakana(e))},x.prototype._tinySDF=function(e,r,n){var i=this.localIdeographFontFamily;if(i&&this._doesCharSupportLocalGlyph(n)){var a=e.tinySDF;if(!a){var o="400";/bold/i.test(r)?o="900":/medium/i.test(r)?o="500":/light/i.test(r)&&(o="200"),a=e.tinySDF=new x.TinySDF(24,3,8,.25,i,o)}return{id:n,bitmap:new t.AlphaImage({width:30,height:30},a.draw(String.fromCharCode(n))),metrics:{width:24,height:24,left:0,top:-8,advance:24}}}},x.loadGlyphRange=function(e,r,n,i,a){var o=256*r,s=o+255,l=i.transformRequest(i.normalizeGlyphsURL(n).replace("{fontstack}",e).replace("{range}",o+"-"+s),t.ResourceType.Glyphs);t.getArrayBuffer(l,(function(e,r){if(e)a(e);else if(r){for(var n={},i=0,o=t.parseGlyphPBF(r);i<o.length;i+=1){var s=o[i];n[s.id]=s}a(null,n)}}))},x.TinySDF=p;var b=function(){this.specification=t.styleSpec.light.position};b.prototype.possiblyEvaluate=function(e,r){return t.sphericalToCartesian(e.expression.evaluate(r))},b.prototype.interpolate=function(e,r,n){return{x:t.number(e.x,r.x,n),y:t.number(e.y,r.y,n),z:t.number(e.z,r.z,n)}};var _=new t.Properties({anchor:new t.DataConstantProperty(t.styleSpec.light.anchor),position:new b,color:new t.DataConstantProperty(t.styleSpec.light.color),intensity:new t.DataConstantProperty(t.styleSpec.light.intensity)}),w="-transition",T=function(e){function r(r){e.call(this),this._transitionable=new t.Transitionable(_),this.setLight(r),this._transitioning=this._transitionable.untransitioned()}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getLight=function(){return this._transitionable.serialize()},r.prototype.setLight=function(e,r){if(void 0===r&&(r={}),!this._validate(t.validateLight,e,r))for(var n in e){var i=e[n];t.endsWith(n,w)?this._transitionable.setTransition(n.slice(0,-11),i):this._transitionable.setValue(n,i)}},r.prototype.updateTransitions=function(t){this._transitioning=this._transitionable.transitioned(t,this._transitioning)},r.prototype.hasTransition=function(){return this._transitioning.hasTransition()},r.prototype.recalculate=function(t){this.properties=this._transitioning.possiblyEvaluate(t)},r.prototype._validate=function(e,r,n){return(!n||!1!==n.validate)&&t.emitValidationErrors(this,e.call(t.validateStyle,t.extend({value:r,style:{glyphs:!0,sprite:!0},styleSpec:t.styleSpec})))},r}(t.Evented),k=function(t,e){this.width=t,this.height=e,this.nextRow=0,this.data=new Uint8Array(this.width*this.height),this.dashEntry={}};k.prototype.getDash=function(t,e){var r=t.join(",")+String(e);return this.dashEntry[r]||(this.dashEntry[r]=this.addDash(t,e)),this.dashEntry[r]},k.prototype.getDashRanges=function(t,e,r){var n=[],i=t.length%2==1?-t[t.length-1]*r:0,a=t[0]*r,o=!0;n.push({left:i,right:a,isDash:o,zeroLength:0===t[0]});for(var s=t[0],l=1;l<t.length;l++){o=!o;var u=t[l];i=s*r,a=(s+=u)*r,n.push({left:i,right:a,isDash:o,zeroLength:0===u})}return n},k.prototype.addRoundDash=function(t,e,r){for(var n=e/2,i=-r;i<=r;i++)for(var a=this.nextRow+r+i,o=this.width*a,s=0,l=t[s],u=0;u<this.width;u++){u/l.right>1&&(l=t[++s]);var c=Math.abs(u-l.left),f=Math.abs(u-l.right),h=Math.min(c,f),p=void 0,d=i/r*(n+1);if(l.isDash){var v=n-Math.abs(d);p=Math.sqrt(h*h+v*v)}else p=n-Math.sqrt(h*h+d*d);this.data[o+u]=Math.max(0,Math.min(255,p+128))}},k.prototype.addRegularDash=function(t){for(var e=t.length-1;e>=0;--e){var r=t[e],n=t[e+1];r.zeroLength?t.splice(e,1):n&&n.isDash===r.isDash&&(n.left=r.left,t.splice(e,1))}var i=t[0],a=t[t.length-1];i.isDash===a.isDash&&(i.left=a.left-this.width,a.right=i.right+this.width);for(var o=this.width*this.nextRow,s=0,l=t[s],u=0;u<this.width;u++){u/l.right>1&&(l=t[++s]);var c=Math.abs(u-l.left),f=Math.abs(u-l.right),h=Math.min(c,f),p=l.isDash?h:-h;this.data[o+u]=Math.max(0,Math.min(255,p+128))}},k.prototype.addDash=function(e,r){var n=r?7:0,i=2*n+1;if(this.nextRow+i>this.height)return t.warnOnce("LineAtlas out of space"),null;for(var a=0,o=0;o<e.length;o++)a+=e[o];if(0!==a){var s=this.width/a,l=this.getDashRanges(e,this.width,s);r?this.addRoundDash(l,s,n):this.addRegularDash(l)}var u={y:(this.nextRow+n+.5)/this.height,height:2*n/this.height,width:a};return this.nextRow+=i,this.dirty=!0,u},k.prototype.bind=function(t){var e=t.gl;this.texture?(e.bindTexture(e.TEXTURE_2D,this.texture),this.dirty&&(this.dirty=!1,e.texSubImage2D(e.TEXTURE_2D,0,0,0,this.width,this.height,e.ALPHA,e.UNSIGNED_BYTE,this.data))):(this.texture=e.createTexture(),e.bindTexture(e.TEXTURE_2D,this.texture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texImage2D(e.TEXTURE_2D,0,e.ALPHA,this.width,this.height,0,e.ALPHA,e.UNSIGNED_BYTE,this.data))};var A=function e(r,n){this.workerPool=r,this.actors=[],this.currentActor=0,this.id=t.uniqueId();for(var i=this.workerPool.acquire(this.id),a=0;a<i.length;a++){var o=i[a],s=new e.Actor(o,n,this.id);s.name="Worker "+a,this.actors.push(s)}};function M(e,r,n){var i=function(i,a){if(i)return n(i);if(a){var o=t.pick(t.extend(a,e),["tiles","minzoom","maxzoom","attribution","mapbox_logo","bounds","scheme","tileSize","encoding"]);a.vector_layers&&(o.vectorLayers=a.vector_layers,o.vectorLayerIds=o.vectorLayers.map((function(t){return t.id}))),o.tiles=r.canonicalizeTileset(o,e.url),n(null,o)}};return e.url?t.getJSON(r.transformRequest(r.normalizeSourceURL(e.url),t.ResourceType.Source),i):t.browser.frame((function(){return i(null,e)}))}A.prototype.broadcast=function(e,r,n){n=n||function(){},t.asyncAll(this.actors,(function(t,n){t.send(e,r,n)}),n)},A.prototype.getActor=function(){return this.currentActor=(this.currentActor+1)%this.actors.length,this.actors[this.currentActor]},A.prototype.remove=function(){this.actors.forEach((function(t){t.remove()})),this.actors=[],this.workerPool.release(this.id)},A.Actor=t.Actor;var S=function(e,r,n){this.bounds=t.LngLatBounds.convert(this.validateBounds(e)),this.minzoom=r||0,this.maxzoom=n||24};S.prototype.validateBounds=function(t){return Array.isArray(t)&&4===t.length?[Math.max(-180,t[0]),Math.max(-90,t[1]),Math.min(180,t[2]),Math.min(90,t[3])]:[-180,-90,180,90]},S.prototype.contains=function(e){var r=Math.pow(2,e.z),n=Math.floor(t.mercatorXfromLng(this.bounds.getWest())*r),i=Math.floor(t.mercatorYfromLat(this.bounds.getNorth())*r),a=Math.ceil(t.mercatorXfromLng(this.bounds.getEast())*r),o=Math.ceil(t.mercatorYfromLat(this.bounds.getSouth())*r);return e.x>=n&&e.x<a&&e.y>=i&&e.y<o};var E=function(e){function r(r,n,i,a){if(e.call(this),this.id=r,this.dispatcher=i,this.type="vector",this.minzoom=0,this.maxzoom=22,this.scheme="xyz",this.tileSize=512,this.reparseOverscaled=!0,this.isTileClipped=!0,this._loaded=!1,t.extend(this,t.pick(n,["url","scheme","tileSize","promoteId"])),this._options=t.extend({type:"vector"},n),this._collectResourceTiming=n.collectResourceTiming,512!==this.tileSize)throw new Error("vector tile sources must have a tileSize of 512");this.setEventedParent(a)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this._loaded=!1,this.fire(new t.Event("dataloading",{dataType:"source"})),this._tileJSONRequest=M(this._options,this.map._requestManager,(function(r,n){e._tileJSONRequest=null,e._loaded=!0,r?e.fire(new t.ErrorEvent(r)):n&&(t.extend(e,n),n.bounds&&(e.tileBounds=new S(n.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(n.tiles,e.map._requestManager._customAccessToken),t.postMapLoadEvent(n.tiles,e.map._getMapId(),e.map._requestManager._skuToken,e.map._requestManager._customAccessToken),e.fire(new t.Event("data",{dataType:"source",sourceDataType:"metadata"})),e.fire(new t.Event("data",{dataType:"source",sourceDataType:"content"})))}))},r.prototype.loaded=function(){return this._loaded},r.prototype.hasTile=function(t){return!this.tileBounds||this.tileBounds.contains(t.canonical)},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.onRemove=function(){this._tileJSONRequest&&(this._tileJSONRequest.cancel(),this._tileJSONRequest=null)},r.prototype.serialize=function(){return t.extend({},this._options)},r.prototype.loadTile=function(e,r){var n=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme)),i={request:this.map._requestManager.transformRequest(n,t.ResourceType.Tile),uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,tileSize:this.tileSize*e.tileID.overscaleFactor(),type:this.type,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes,promoteId:this.promoteId};function a(n,i){return delete e.request,e.aborted?r(null):n&&404!==n.status?r(n):(i&&i.resourceTiming&&(e.resourceTiming=i.resourceTiming),this.map._refreshExpiredTiles&&i&&e.setExpiryData(i),e.loadVectorData(i,this.map.painter),t.cacheEntryPossiblyAdded(this.dispatcher),r(null),void(e.reloadCallback&&(this.loadTile(e,e.reloadCallback),e.reloadCallback=null)))}i.request.collectResourceTiming=this._collectResourceTiming,e.actor&&"expired"!==e.state?"loading"===e.state?e.reloadCallback=r:e.request=e.actor.send("reloadTile",i,a.bind(this)):(e.actor=this.dispatcher.getActor(),e.request=e.actor.send("loadTile",i,a.bind(this)))},r.prototype.abortTile=function(t){t.request&&(t.request.cancel(),delete t.request),t.actor&&t.actor.send("abortTile",{uid:t.uid,type:this.type,source:this.id},void 0)},r.prototype.unloadTile=function(t){t.unloadVectorData(),t.actor&&t.actor.send("removeTile",{uid:t.uid,type:this.type,source:this.id},void 0)},r.prototype.hasTransition=function(){return!1},r}(t.Evented),L=function(e){function r(r,n,i,a){e.call(this),this.id=r,this.dispatcher=i,this.setEventedParent(a),this.type="raster",this.minzoom=0,this.maxzoom=22,this.roundZoom=!0,this.scheme="xyz",this.tileSize=512,this._loaded=!1,this._options=t.extend({type:"raster"},n),t.extend(this,t.pick(n,["url","scheme","tileSize"]))}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this._loaded=!1,this.fire(new t.Event("dataloading",{dataType:"source"})),this._tileJSONRequest=M(this._options,this.map._requestManager,(function(r,n){e._tileJSONRequest=null,e._loaded=!0,r?e.fire(new t.ErrorEvent(r)):n&&(t.extend(e,n),n.bounds&&(e.tileBounds=new S(n.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(n.tiles),t.postMapLoadEvent(n.tiles,e.map._getMapId(),e.map._requestManager._skuToken),e.fire(new t.Event("data",{dataType:"source",sourceDataType:"metadata"})),e.fire(new t.Event("data",{dataType:"source",sourceDataType:"content"})))}))},r.prototype.loaded=function(){return this._loaded},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.onRemove=function(){this._tileJSONRequest&&(this._tileJSONRequest.cancel(),this._tileJSONRequest=null)},r.prototype.serialize=function(){return t.extend({},this._options)},r.prototype.hasTile=function(t){return!this.tileBounds||this.tileBounds.contains(t.canonical)},r.prototype.loadTile=function(e,r){var n=this,i=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.tileSize);e.request=t.getImage(this.map._requestManager.transformRequest(i,t.ResourceType.Tile),(function(i,a){if(delete e.request,e.aborted)e.state="unloaded",r(null);else if(i)e.state="errored",r(i);else if(a){n.map._refreshExpiredTiles&&e.setExpiryData(a),delete a.cacheControl,delete a.expires;var o=n.map.painter.context,s=o.gl;e.texture=n.map.painter.getTileTexture(a.width),e.texture?e.texture.update(a,{useMipmap:!0}):(e.texture=new t.Texture(o,a,s.RGBA,{useMipmap:!0}),e.texture.bind(s.LINEAR,s.CLAMP_TO_EDGE,s.LINEAR_MIPMAP_NEAREST),o.extTextureFilterAnisotropic&&s.texParameterf(s.TEXTURE_2D,o.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,o.extTextureFilterAnisotropicMax)),e.state="loaded",t.cacheEntryPossiblyAdded(n.dispatcher),r(null)}}))},r.prototype.abortTile=function(t,e){t.request&&(t.request.cancel(),delete t.request),e()},r.prototype.unloadTile=function(t,e){t.texture&&this.map.painter.saveTileTexture(t.texture),e()},r.prototype.hasTransition=function(){return!1},r}(t.Evented),C=function(e){function r(r,n,i,a){e.call(this,r,n,i,a),this.type="raster-dem",this.maxzoom=22,this._options=t.extend({type:"raster-dem"},n),this.encoding=n.encoding||"mapbox"}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.serialize=function(){return{type:"raster-dem",url:this.url,tileSize:this.tileSize,tiles:this.tiles,bounds:this.bounds,encoding:this.encoding}},r.prototype.loadTile=function(e,r){var n=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.tileSize);function i(t,n){t&&(e.state="errored",r(t)),n&&(e.dem=n,e.needsHillshadePrepare=!0,e.state="loaded",r(null))}e.request=t.getImage(this.map._requestManager.transformRequest(n,t.ResourceType.Tile),function(n,a){if(delete e.request,e.aborted)e.state="unloaded",r(null);else if(n)e.state="errored",r(n);else if(a){this.map._refreshExpiredTiles&&e.setExpiryData(a),delete a.cacheControl,delete a.expires;var o=t.window.ImageBitmap&&a instanceof t.window.ImageBitmap&&t.offscreenCanvasSupported()?a:t.browser.getImageData(a,1),s={uid:e.uid,coord:e.tileID,source:this.id,rawImageData:o,encoding:this.encoding};e.actor&&"expired"!==e.state||(e.actor=this.dispatcher.getActor(),e.actor.send("loadDEMTile",s,i.bind(this)))}}.bind(this)),e.neighboringTiles=this._getNeighboringTiles(e.tileID)},r.prototype._getNeighboringTiles=function(e){var r=e.canonical,n=Math.pow(2,r.z),i=(r.x-1+n)%n,a=0===r.x?e.wrap-1:e.wrap,o=(r.x+1+n)%n,s=r.x+1===n?e.wrap+1:e.wrap,l={};return l[new t.OverscaledTileID(e.overscaledZ,a,r.z,i,r.y).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y).key]={backfilled:!1},r.y>0&&(l[new t.OverscaledTileID(e.overscaledZ,a,r.z,i,r.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,r.z,r.x,r.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y-1).key]={backfilled:!1}),r.y+1<n&&(l[new t.OverscaledTileID(e.overscaledZ,a,r.z,i,r.y+1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,r.z,r.x,r.y+1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y+1).key]={backfilled:!1}),l},r.prototype.unloadTile=function(t){t.demTexture&&this.map.painter.saveTileTexture(t.demTexture),t.fbo&&(t.fbo.destroy(),delete t.fbo),t.dem&&delete t.dem,delete t.neighboringTiles,t.state="unloaded",t.actor&&t.actor.send("removeDEMTile",{uid:t.uid,source:this.id})},r}(L),P=function(e){function r(r,n,i,a){e.call(this),this.id=r,this.type="geojson",this.minzoom=0,this.maxzoom=18,this.tileSize=512,this.isTileClipped=!0,this.reparseOverscaled=!0,this._removed=!1,this._loaded=!1,this.actor=i.getActor(),this.setEventedParent(a),this._data=n.data,this._options=t.extend({},n),this._collectResourceTiming=n.collectResourceTiming,this._resourceTiming=[],void 0!==n.maxzoom&&(this.maxzoom=n.maxzoom),n.type&&(this.type=n.type),n.attribution&&(this.attribution=n.attribution),this.promoteId=n.promoteId;var o=t.EXTENT/this.tileSize;this.workerOptions=t.extend({source:this.id,cluster:n.cluster||!1,geojsonVtOptions:{buffer:(void 0!==n.buffer?n.buffer:128)*o,tolerance:(void 0!==n.tolerance?n.tolerance:.375)*o,extent:t.EXTENT,maxZoom:this.maxzoom,lineMetrics:n.lineMetrics||!1,generateId:n.generateId||!1},superclusterOptions:{maxZoom:void 0!==n.clusterMaxZoom?Math.min(n.clusterMaxZoom,this.maxzoom-1):this.maxzoom-1,extent:t.EXTENT,radius:(n.clusterRadius||50)*o,log:!1,generateId:n.generateId||!1},clusterProperties:n.clusterProperties},n.workerOptions)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this.fire(new t.Event("dataloading",{dataType:"source"})),this._updateWorkerData((function(r){if(r)e.fire(new t.ErrorEvent(r));else{var n={dataType:"source",sourceDataType:"metadata"};e._collectResourceTiming&&e._resourceTiming&&e._resourceTiming.length>0&&(n.resourceTiming=e._resourceTiming,e._resourceTiming=[]),e.fire(new t.Event("data",n))}}))},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.setData=function(e){var r=this;return this._data=e,this.fire(new t.Event("dataloading",{dataType:"source"})),this._updateWorkerData((function(e){if(e)r.fire(new t.ErrorEvent(e));else{var n={dataType:"source",sourceDataType:"content"};r._collectResourceTiming&&r._resourceTiming&&r._resourceTiming.length>0&&(n.resourceTiming=r._resourceTiming,r._resourceTiming=[]),r.fire(new t.Event("data",n))}})),this},r.prototype.getClusterExpansionZoom=function(t,e){return this.actor.send("geojson.getClusterExpansionZoom",{clusterId:t,source:this.id},e),this},r.prototype.getClusterChildren=function(t,e){return this.actor.send("geojson.getClusterChildren",{clusterId:t,source:this.id},e),this},r.prototype.getClusterLeaves=function(t,e,r,n){return this.actor.send("geojson.getClusterLeaves",{source:this.id,clusterId:t,limit:e,offset:r},n),this},r.prototype._updateWorkerData=function(e){var r=this;this._loaded=!1;var n=t.extend({},this.workerOptions),i=this._data;"string"==typeof i?(n.request=this.map._requestManager.transformRequest(t.browser.resolveURL(i),t.ResourceType.Source),n.request.collectResourceTiming=this._collectResourceTiming):n.data=JSON.stringify(i),this.actor.send(this.type+".loadData",n,(function(t,i){r._removed||i&&i.abandoned||(r._loaded=!0,i&&i.resourceTiming&&i.resourceTiming[r.id]&&(r._resourceTiming=i.resourceTiming[r.id].slice(0)),r.actor.send(r.type+".coalesce",{source:n.source},null),e(t))}))},r.prototype.loaded=function(){return this._loaded},r.prototype.loadTile=function(e,r){var n=this,i=e.actor?"reloadTile":"loadTile";e.actor=this.actor;var a={type:this.type,uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,maxZoom:this.maxzoom,tileSize:this.tileSize,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes,promoteId:this.promoteId};e.request=this.actor.send(i,a,(function(t,a){return delete e.request,e.unloadVectorData(),e.aborted?r(null):t?r(t):(e.loadVectorData(a,n.map.painter,"reloadTile"===i),r(null))}))},r.prototype.abortTile=function(t){t.request&&(t.request.cancel(),delete t.request),t.aborted=!0},r.prototype.unloadTile=function(t){t.unloadVectorData(),this.actor.send("removeTile",{uid:t.uid,type:this.type,source:this.id})},r.prototype.onRemove=function(){this._removed=!0,this.actor.send("removeSource",{type:this.type,source:this.id})},r.prototype.serialize=function(){return t.extend({},this._options,{type:this.type,data:this._data})},r.prototype.hasTransition=function(){return!1},r}(t.Evented),O=t.createLayout([{name:"a_pos",type:"Int16",components:2},{name:"a_texture_pos",type:"Int16",components:2}]),I=function(e){function r(t,r,n,i){e.call(this),this.id=t,this.dispatcher=n,this.coordinates=r.coordinates,this.type="image",this.minzoom=0,this.maxzoom=22,this.tileSize=512,this.tiles={},this._loaded=!1,this.setEventedParent(i),this.options=r}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(e,r){var n=this;this._loaded=!1,this.fire(new t.Event("dataloading",{dataType:"source"})),this.url=this.options.url,t.getImage(this.map._requestManager.transformRequest(this.url,t.ResourceType.Image),(function(i,a){n._loaded=!0,i?n.fire(new t.ErrorEvent(i)):a&&(n.image=a,e&&(n.coordinates=e),r&&r(),n._finishLoading())}))},r.prototype.loaded=function(){return this._loaded},r.prototype.updateImage=function(t){var e=this;return this.image&&t.url?(this.options.url=t.url,this.load(t.coordinates,(function(){e.texture=null})),this):this},r.prototype._finishLoading=function(){this.map&&(this.setCoordinates(this.coordinates),this.fire(new t.Event("data",{dataType:"source",sourceDataType:"metadata"})))},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.setCoordinates=function(e){var r=this;this.coordinates=e;var n=e.map(t.MercatorCoordinate.fromLngLat);this.tileID=function(e){for(var r=1/0,n=1/0,i=-1/0,a=-1/0,o=0,s=e;o<s.length;o+=1){var l=s[o];r=Math.min(r,l.x),n=Math.min(n,l.y),i=Math.max(i,l.x),a=Math.max(a,l.y)}var u=i-r,c=a-n,f=Math.max(u,c),h=Math.max(0,Math.floor(-Math.log(f)/Math.LN2)),p=Math.pow(2,h);return new t.CanonicalTileID(h,Math.floor((r+i)/2*p),Math.floor((n+a)/2*p))}(n),this.minzoom=this.maxzoom=this.tileID.z;var i=n.map((function(t){return r.tileID.getTilePoint(t)._round()}));return this._boundsArray=new t.StructArrayLayout4i8,this._boundsArray.emplaceBack(i[0].x,i[0].y,0,0),this._boundsArray.emplaceBack(i[1].x,i[1].y,t.EXTENT,0),this._boundsArray.emplaceBack(i[3].x,i[3].y,0,t.EXTENT),this._boundsArray.emplaceBack(i[2].x,i[2].y,t.EXTENT,t.EXTENT),this.boundsBuffer&&(this.boundsBuffer.destroy(),delete this.boundsBuffer),this.fire(new t.Event("data",{dataType:"source",sourceDataType:"content"})),this},r.prototype.prepare=function(){if(0!==Object.keys(this.tiles).length&&this.image){var e=this.map.painter.context,r=e.gl;for(var n in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,O.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture||(this.texture=new t.Texture(e,this.image,r.RGBA),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)),this.tiles){var i=this.tiles[n];"loaded"!==i.state&&(i.state="loaded",i.texture=this.texture)}}},r.prototype.loadTile=function(t,e){this.tileID&&this.tileID.equals(t.tileID.canonical)?(this.tiles[String(t.tileID.wrap)]=t,t.buckets={},e(null)):(t.state="errored",e(null))},r.prototype.serialize=function(){return{type:"image",url:this.options.url,coordinates:this.coordinates}},r.prototype.hasTransition=function(){return!1},r}(t.Evented);var D=function(e){function r(t,r,n,i){e.call(this,t,r,n,i),this.roundZoom=!0,this.type="video",this.options=r}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this._loaded=!1;var r=this.options;this.urls=[];for(var n=0,i=r.urls;n<i.length;n+=1){var a=i[n];this.urls.push(this.map._requestManager.transformRequest(a,t.ResourceType.Source).url)}t.getVideo(this.urls,(function(r,n){e._loaded=!0,r?e.fire(new t.ErrorEvent(r)):n&&(e.video=n,e.video.loop=!0,e.video.addEventListener("playing",(function(){e.map.triggerRepaint()})),e.map&&e.video.play(),e._finishLoading())}))},r.prototype.pause=function(){this.video&&this.video.pause()},r.prototype.play=function(){this.video&&this.video.play()},r.prototype.seek=function(e){if(this.video){var r=this.video.seekable;e<r.start(0)||e>r.end(0)?this.fire(new t.ErrorEvent(new t.ValidationError("sources."+this.id,null,"Playback for this video can be set only between the "+r.start(0)+" and "+r.end(0)+"-second mark."))):this.video.currentTime=e}},r.prototype.getVideo=function(){return this.video},r.prototype.onAdd=function(t){this.map||(this.map=t,this.load(),this.video&&(this.video.play(),this.setCoordinates(this.coordinates)))},r.prototype.prepare=function(){if(!(0===Object.keys(this.tiles).length||this.video.readyState<2)){var e=this.map.painter.context,r=e.gl;for(var n in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,O.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?this.video.paused||(this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE),r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,this.video)):(this.texture=new t.Texture(e,this.video,r.RGBA),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)),this.tiles){var i=this.tiles[n];"loaded"!==i.state&&(i.state="loaded",i.texture=this.texture)}}},r.prototype.serialize=function(){return{type:"video",urls:this.urls,coordinates:this.coordinates}},r.prototype.hasTransition=function(){return this.video&&!this.video.paused},r}(I),z=function(e){function r(r,n,i,a){e.call(this,r,n,i,a),n.coordinates?Array.isArray(n.coordinates)&&4===n.coordinates.length&&!n.coordinates.some((function(t){return!Array.isArray(t)||2!==t.length||t.some((function(t){return"number"!=typeof t}))}))||this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'"coordinates" property must be an array of 4 longitude/latitude array pairs'))):this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'missing required property "coordinates"'))),n.animate&&"boolean"!=typeof n.animate&&this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'optional "animate" property must be a boolean value'))),n.canvas?"string"==typeof n.canvas||n.canvas instanceof t.window.HTMLCanvasElement||this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'"canvas" must be either a string representing the ID of the canvas element from which to read, or an HTMLCanvasElement instance'))):this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'missing required property "canvas"'))),this.options=n,this.animate=void 0===n.animate||n.animate}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){this._loaded=!0,this.canvas||(this.canvas=this.options.canvas instanceof t.window.HTMLCanvasElement?this.options.canvas:t.window.document.getElementById(this.options.canvas)),this.width=this.canvas.width,this.height=this.canvas.height,this._hasInvalidDimensions()?this.fire(new t.ErrorEvent(new Error("Canvas dimensions cannot be less than or equal to zero."))):(this.play=function(){this._playing=!0,this.map.triggerRepaint()},this.pause=function(){this._playing&&(this.prepare(),this._playing=!1)},this._finishLoading())},r.prototype.getCanvas=function(){return this.canvas},r.prototype.onAdd=function(t){this.map=t,this.load(),this.canvas&&this.animate&&this.play()},r.prototype.onRemove=function(){this.pause()},r.prototype.prepare=function(){var e=!1;if(this.canvas.width!==this.width&&(this.width=this.canvas.width,e=!0),this.canvas.height!==this.height&&(this.height=this.canvas.height,e=!0),!this._hasInvalidDimensions()&&0!==Object.keys(this.tiles).length){var r=this.map.painter.context,n=r.gl;for(var i in this.boundsBuffer||(this.boundsBuffer=r.createVertexBuffer(this._boundsArray,O.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?(e||this._playing)&&this.texture.update(this.canvas,{premultiply:!0}):this.texture=new t.Texture(r,this.canvas,n.RGBA,{premultiply:!0}),this.tiles){var a=this.tiles[i];"loaded"!==a.state&&(a.state="loaded",a.texture=this.texture)}}},r.prototype.serialize=function(){return{type:"canvas",coordinates:this.coordinates}},r.prototype.hasTransition=function(){return this._playing},r.prototype._hasInvalidDimensions=function(){for(var t=0,e=[this.canvas.width,this.canvas.height];t<e.length;t+=1){var r=e[t];if(isNaN(r)||r<=0)return!0}return!1},r}(I),R={vector:E,raster:L,"raster-dem":C,geojson:P,video:D,image:I,canvas:z};function F(e,r){var n=t.identity([]);return t.translate(n,n,[1,1,0]),t.scale(n,n,[.5*e.width,.5*e.height,1]),t.multiply(n,n,e.calculatePosMatrix(r.toUnwrapped()))}function B(t,e,r,n,i,a){var o=function(t,e,r){if(t)for(var n=0,i=t;n<i.length;n+=1){var a=e[i[n]];if(a&&a.source===r&&"fill-extrusion"===a.type)return!0}else for(var o in e){var s=e[o];if(s.source===r&&"fill-extrusion"===s.type)return!0}return!1}(i&&i.layers,e,t.id),s=a.maxPitchScaleFactor(),l=t.tilesIn(n,s,o);l.sort(N);for(var u=[],c=0,f=l;c<f.length;c+=1){var h=f[c];u.push({wrappedTileID:h.tileID.wrapped().key,queryResults:h.tile.queryRenderedFeatures(e,r,t._state,h.queryGeometry,h.cameraQueryGeometry,h.scale,i,a,s,F(t.transform,h.tileID))})}var p=function(t){for(var e={},r={},n=0,i=t;n<i.length;n+=1){var a=i[n],o=a.queryResults,s=a.wrappedTileID,l=r[s]=r[s]||{};for(var u in o)for(var c=o[u],f=l[u]=l[u]||{},h=e[u]=e[u]||[],p=0,d=c;p<d.length;p+=1){var v=d[p];f[v.featureIndex]||(f[v.featureIndex]=!0,h.push(v))}}return e}(u);for(var d in p)p[d].forEach((function(e){var r=e.feature,n=t.getFeatureState(r.layer["source-layer"],r.id);r.source=r.layer.source,r.layer["source-layer"]&&(r.sourceLayer=r.layer["source-layer"]),r.state=n}));return p}function N(t,e){var r=t.tileID,n=e.tileID;return r.overscaledZ-n.overscaledZ||r.canonical.y-n.canonical.y||r.wrap-n.wrap||r.canonical.x-n.canonical.x}var j=function(t,e){this.max=t,this.onRemove=e,this.reset()};j.prototype.reset=function(){for(var t in this.data)for(var e=0,r=this.data[t];e<r.length;e+=1){var n=r[e];n.timeout&&clearTimeout(n.timeout),this.onRemove(n.value)}return this.data={},this.order=[],this},j.prototype.add=function(t,e,r){var n=this,i=t.wrapped().key;void 0===this.data[i]&&(this.data[i]=[]);var a={value:e,timeout:void 0};if(void 0!==r&&(a.timeout=setTimeout((function(){n.remove(t,a)}),r)),this.data[i].push(a),this.order.push(i),this.order.length>this.max){var o=this._getAndRemoveByKey(this.order[0]);o&&this.onRemove(o)}return this},j.prototype.has=function(t){return t.wrapped().key in this.data},j.prototype.getAndRemove=function(t){return this.has(t)?this._getAndRemoveByKey(t.wrapped().key):null},j.prototype._getAndRemoveByKey=function(t){var e=this.data[t].shift();return e.timeout&&clearTimeout(e.timeout),0===this.data[t].length&&delete this.data[t],this.order.splice(this.order.indexOf(t),1),e.value},j.prototype.getByKey=function(t){var e=this.data[t];return e?e[0].value:null},j.prototype.get=function(t){return this.has(t)?this.data[t.wrapped().key][0].value:null},j.prototype.remove=function(t,e){if(!this.has(t))return this;var r=t.wrapped().key,n=void 0===e?0:this.data[r].indexOf(e),i=this.data[r][n];return this.data[r].splice(n,1),i.timeout&&clearTimeout(i.timeout),0===this.data[r].length&&delete this.data[r],this.onRemove(i.value),this.order.splice(this.order.indexOf(r),1),this},j.prototype.setMaxSize=function(t){for(this.max=t;this.order.length>this.max;){var e=this._getAndRemoveByKey(this.order[0]);e&&this.onRemove(e)}return this},j.prototype.filter=function(t){var e=[];for(var r in this.data)for(var n=0,i=this.data[r];n<i.length;n+=1){var a=i[n];t(a.value)||e.push(a)}for(var o=0,s=e;o<s.length;o+=1){var l=s[o];this.remove(l.value.tileID,l)}};var U=function(t,e,r){this.context=t;var n=t.gl;this.buffer=n.createBuffer(),this.dynamicDraw=Boolean(r),this.context.unbindVAO(),t.bindElementBuffer.set(this.buffer),n.bufferData(n.ELEMENT_ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?n.DYNAMIC_DRAW:n.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};U.prototype.bind=function(){this.context.bindElementBuffer.set(this.buffer)},U.prototype.updateData=function(t){var e=this.context.gl;this.context.unbindVAO(),this.bind(),e.bufferSubData(e.ELEMENT_ARRAY_BUFFER,0,t.arrayBuffer)},U.prototype.destroy=function(){var t=this.context.gl;this.buffer&&(t.deleteBuffer(this.buffer),delete this.buffer)};var V={Int8:"BYTE",Uint8:"UNSIGNED_BYTE",Int16:"SHORT",Uint16:"UNSIGNED_SHORT",Int32:"INT",Uint32:"UNSIGNED_INT",Float32:"FLOAT"},H=function(t,e,r,n){this.length=e.length,this.attributes=r,this.itemSize=e.bytesPerElement,this.dynamicDraw=n,this.context=t;var i=t.gl;this.buffer=i.createBuffer(),t.bindVertexBuffer.set(this.buffer),i.bufferData(i.ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?i.DYNAMIC_DRAW:i.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};H.prototype.bind=function(){this.context.bindVertexBuffer.set(this.buffer)},H.prototype.updateData=function(t){var e=this.context.gl;this.bind(),e.bufferSubData(e.ARRAY_BUFFER,0,t.arrayBuffer)},H.prototype.enableAttributes=function(t,e){for(var r=0;r<this.attributes.length;r++){var n=this.attributes[r],i=e.attributes[n.name];void 0!==i&&t.enableVertexAttribArray(i)}},H.prototype.setVertexAttribPointers=function(t,e,r){for(var n=0;n<this.attributes.length;n++){var i=this.attributes[n],a=e.attributes[i.name];void 0!==a&&t.vertexAttribPointer(a,i.components,t[V[i.type]],!1,this.itemSize,i.offset+this.itemSize*(r||0))}},H.prototype.destroy=function(){var t=this.context.gl;this.buffer&&(t.deleteBuffer(this.buffer),delete this.buffer)};var q=function(t){this.gl=t.gl,this.default=this.getDefault(),this.current=this.default,this.dirty=!1};q.prototype.get=function(){return this.current},q.prototype.set=function(t){},q.prototype.getDefault=function(){return this.default},q.prototype.setDefault=function(){this.set(this.default)};var G=function(e){function r(){e.apply(this,arguments)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getDefault=function(){return t.Color.transparent},r.prototype.set=function(t){var e=this.current;(t.r!==e.r||t.g!==e.g||t.b!==e.b||t.a!==e.a||this.dirty)&&(this.gl.clearColor(t.r,t.g,t.b,t.a),this.current=t,this.dirty=!1)},r}(q),Z=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 1},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.clearDepth(t),this.current=t,this.dirty=!1)},e}(q),Y=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.clearStencil(t),this.current=t,this.dirty=!1)},e}(q),W=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return[!0,!0,!0,!0]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||t[3]!==e[3]||this.dirty)&&(this.gl.colorMask(t[0],t[1],t[2],t[3]),this.current=t,this.dirty=!1)},e}(q),X=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.depthMask(t),this.current=t,this.dirty=!1)},e}(q),J=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 255},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.stencilMask(t),this.current=t,this.dirty=!1)},e}(q),K=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return{func:this.gl.ALWAYS,ref:0,mask:255}},e.prototype.set=function(t){var e=this.current;(t.func!==e.func||t.ref!==e.ref||t.mask!==e.mask||this.dirty)&&(this.gl.stencilFunc(t.func,t.ref,t.mask),this.current=t,this.dirty=!1)},e}(q),$=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[t.KEEP,t.KEEP,t.KEEP]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||this.dirty)&&(this.gl.stencilOp(t[0],t[1],t[2]),this.current=t,this.dirty=!1)},e}(q),Q=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.STENCIL_TEST):e.disable(e.STENCIL_TEST),this.current=t,this.dirty=!1}},e}(q),tt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return[0,1]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||this.dirty)&&(this.gl.depthRange(t[0],t[1]),this.current=t,this.dirty=!1)},e}(q),et=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.DEPTH_TEST):e.disable(e.DEPTH_TEST),this.current=t,this.dirty=!1}},e}(q),rt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.LESS},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.depthFunc(t),this.current=t,this.dirty=!1)},e}(q),nt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.BLEND):e.disable(e.BLEND),this.current=t,this.dirty=!1}},e}(q),it=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[t.ONE,t.ZERO]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||this.dirty)&&(this.gl.blendFunc(t[0],t[1]),this.current=t,this.dirty=!1)},e}(q),at=function(e){function r(){e.apply(this,arguments)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getDefault=function(){return t.Color.transparent},r.prototype.set=function(t){var e=this.current;(t.r!==e.r||t.g!==e.g||t.b!==e.b||t.a!==e.a||this.dirty)&&(this.gl.blendColor(t.r,t.g,t.b,t.a),this.current=t,this.dirty=!1)},r}(q),ot=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.FUNC_ADD},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.blendEquation(t),this.current=t,this.dirty=!1)},e}(q),st=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.CULL_FACE):e.disable(e.CULL_FACE),this.current=t,this.dirty=!1}},e}(q),lt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.BACK},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.cullFace(t),this.current=t,this.dirty=!1)},e}(q),ut=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.CCW},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.frontFace(t),this.current=t,this.dirty=!1)},e}(q),ct=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.useProgram(t),this.current=t,this.dirty=!1)},e}(q),ft=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.TEXTURE0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.activeTexture(t),this.current=t,this.dirty=!1)},e}(q),ht=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[0,0,t.drawingBufferWidth,t.drawingBufferHeight]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||t[3]!==e[3]||this.dirty)&&(this.gl.viewport(t[0],t[1],t[2],t[3]),this.current=t,this.dirty=!1)},e}(q),pt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindFramebuffer(e.FRAMEBUFFER,t),this.current=t,this.dirty=!1}},e}(q),dt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindRenderbuffer(e.RENDERBUFFER,t),this.current=t,this.dirty=!1}},e}(q),vt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindTexture(e.TEXTURE_2D,t),this.current=t,this.dirty=!1}},e}(q),gt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindBuffer(e.ARRAY_BUFFER,t),this.current=t,this.dirty=!1}},e}(q),yt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){var e=this.gl;e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t),this.current=t,this.dirty=!1},e}(q),mt=function(t){function e(e){t.call(this,e),this.vao=e.extVertexArrayObject}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){this.vao&&(t!==this.current||this.dirty)&&(this.vao.bindVertexArrayOES(t),this.current=t,this.dirty=!1)},e}(q),xt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 4},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_ALIGNMENT,t),this.current=t,this.dirty=!1}},e}(q),bt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t),this.current=t,this.dirty=!1}},e}(q),_t=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,t),this.current=t,this.dirty=!1}},e}(q),wt=function(t){function e(e,r){t.call(this,e),this.context=e,this.parent=r}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e}(q),Tt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setDirty=function(){this.dirty=!0},e.prototype.set=function(t){if(t!==this.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e=this.gl;e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0),this.current=t,this.dirty=!1}},e}(wt),kt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){if(t!==this.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e=this.gl;e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,t),this.current=t,this.dirty=!1}},e}(wt),At=function(t,e,r,n){this.context=t,this.width=e,this.height=r;var i=t.gl,a=this.framebuffer=i.createFramebuffer();this.colorAttachment=new Tt(t,a),n&&(this.depthAttachment=new kt(t,a))};At.prototype.destroy=function(){var t=this.context.gl,e=this.colorAttachment.get();if(e&&t.deleteTexture(e),this.depthAttachment){var r=this.depthAttachment.get();r&&t.deleteRenderbuffer(r)}t.deleteFramebuffer(this.framebuffer)};var Mt=function(t,e,r){this.func=t,this.mask=e,this.range=r};Mt.ReadOnly=!1,Mt.ReadWrite=!0,Mt.disabled=new Mt(519,Mt.ReadOnly,[0,1]);var St=7680,Et=function(t,e,r,n,i,a){this.test=t,this.ref=e,this.mask=r,this.fail=n,this.depthFail=i,this.pass=a};Et.disabled=new Et({func:519,mask:0},0,0,St,St,St);var Lt=function(t,e,r){this.blendFunction=t,this.blendColor=e,this.mask=r};Lt.Replace=[1,0],Lt.disabled=new Lt(Lt.Replace,t.Color.transparent,[!1,!1,!1,!1]),Lt.unblended=new Lt(Lt.Replace,t.Color.transparent,[!0,!0,!0,!0]),Lt.alphaBlended=new Lt([1,771],t.Color.transparent,[!0,!0,!0,!0]);var Ct=function(t,e,r){this.enable=t,this.mode=e,this.frontFace=r};Ct.disabled=new Ct(!1,1029,2305),Ct.backCCW=new Ct(!0,1029,2305);var Pt=function(t){this.gl=t,this.extVertexArrayObject=this.gl.getExtension("OES_vertex_array_object"),this.clearColor=new G(this),this.clearDepth=new Z(this),this.clearStencil=new Y(this),this.colorMask=new W(this),this.depthMask=new X(this),this.stencilMask=new J(this),this.stencilFunc=new K(this),this.stencilOp=new $(this),this.stencilTest=new Q(this),this.depthRange=new tt(this),this.depthTest=new et(this),this.depthFunc=new rt(this),this.blend=new nt(this),this.blendFunc=new it(this),this.blendColor=new at(this),this.blendEquation=new ot(this),this.cullFace=new st(this),this.cullFaceSide=new lt(this),this.frontFace=new ut(this),this.program=new ct(this),this.activeTexture=new ft(this),this.viewport=new ht(this),this.bindFramebuffer=new pt(this),this.bindRenderbuffer=new dt(this),this.bindTexture=new vt(this),this.bindVertexBuffer=new gt(this),this.bindElementBuffer=new yt(this),this.bindVertexArrayOES=this.extVertexArrayObject&&new mt(this),this.pixelStoreUnpack=new xt(this),this.pixelStoreUnpackPremultiplyAlpha=new bt(this),this.pixelStoreUnpackFlipY=new _t(this),this.extTextureFilterAnisotropic=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic"),this.extTextureFilterAnisotropic&&(this.extTextureFilterAnisotropicMax=t.getParameter(this.extTextureFilterAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT)),this.extTextureHalfFloat=t.getExtension("OES_texture_half_float"),this.extTextureHalfFloat&&(t.getExtension("OES_texture_half_float_linear"),this.extRenderToTextureHalfFloat=t.getExtension("EXT_color_buffer_half_float")),this.extTimerQuery=t.getExtension("EXT_disjoint_timer_query")};Pt.prototype.setDefault=function(){this.unbindVAO(),this.clearColor.setDefault(),this.clearDepth.setDefault(),this.clearStencil.setDefault(),this.colorMask.setDefault(),this.depthMask.setDefault(),this.stencilMask.setDefault(),this.stencilFunc.setDefault(),this.stencilOp.setDefault(),this.stencilTest.setDefault(),this.depthRange.setDefault(),this.depthTest.setDefault(),this.depthFunc.setDefault(),this.blend.setDefault(),this.blendFunc.setDefault(),this.blendColor.setDefault(),this.blendEquation.setDefault(),this.cullFace.setDefault(),this.cullFaceSide.setDefault(),this.frontFace.setDefault(),this.program.setDefault(),this.activeTexture.setDefault(),this.bindFramebuffer.setDefault(),this.pixelStoreUnpack.setDefault(),this.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.pixelStoreUnpackFlipY.setDefault()},Pt.prototype.setDirty=function(){this.clearColor.dirty=!0,this.clearDepth.dirty=!0,this.clearStencil.dirty=!0,this.colorMask.dirty=!0,this.depthMask.dirty=!0,this.stencilMask.dirty=!0,this.stencilFunc.dirty=!0,this.stencilOp.dirty=!0,this.stencilTest.dirty=!0,this.depthRange.dirty=!0,this.depthTest.dirty=!0,this.depthFunc.dirty=!0,this.blend.dirty=!0,this.blendFunc.dirty=!0,this.blendColor.dirty=!0,this.blendEquation.dirty=!0,this.cullFace.dirty=!0,this.cullFaceSide.dirty=!0,this.frontFace.dirty=!0,this.program.dirty=!0,this.activeTexture.dirty=!0,this.viewport.dirty=!0,this.bindFramebuffer.dirty=!0,this.bindRenderbuffer.dirty=!0,this.bindTexture.dirty=!0,this.bindVertexBuffer.dirty=!0,this.bindElementBuffer.dirty=!0,this.extVertexArrayObject&&(this.bindVertexArrayOES.dirty=!0),this.pixelStoreUnpack.dirty=!0,this.pixelStoreUnpackPremultiplyAlpha.dirty=!0,this.pixelStoreUnpackFlipY.dirty=!0},Pt.prototype.createIndexBuffer=function(t,e){return new U(this,t,e)},Pt.prototype.createVertexBuffer=function(t,e,r){return new H(this,t,e,r)},Pt.prototype.createRenderbuffer=function(t,e,r){var n=this.gl,i=n.createRenderbuffer();return this.bindRenderbuffer.set(i),n.renderbufferStorage(n.RENDERBUFFER,t,e,r),this.bindRenderbuffer.set(null),i},Pt.prototype.createFramebuffer=function(t,e,r){return new At(this,t,e,r)},Pt.prototype.clear=function(t){var e=t.color,r=t.depth,n=this.gl,i=0;e&&(i|=n.COLOR_BUFFER_BIT,this.clearColor.set(e),this.colorMask.set([!0,!0,!0,!0])),void 0!==r&&(i|=n.DEPTH_BUFFER_BIT,this.depthRange.set([0,1]),this.clearDepth.set(r),this.depthMask.set(!0)),n.clear(i)},Pt.prototype.setCullFace=function(t){!1===t.enable?this.cullFace.set(!1):(this.cullFace.set(!0),this.cullFaceSide.set(t.mode),this.frontFace.set(t.frontFace))},Pt.prototype.setDepthMode=function(t){t.func!==this.gl.ALWAYS||t.mask?(this.depthTest.set(!0),this.depthFunc.set(t.func),this.depthMask.set(t.mask),this.depthRange.set(t.range)):this.depthTest.set(!1)},Pt.prototype.setStencilMode=function(t){t.test.func!==this.gl.ALWAYS||t.mask?(this.stencilTest.set(!0),this.stencilMask.set(t.mask),this.stencilOp.set([t.fail,t.depthFail,t.pass]),this.stencilFunc.set({func:t.test.func,ref:t.ref,mask:t.test.mask})):this.stencilTest.set(!1)},Pt.prototype.setColorMode=function(e){t.deepEqual(e.blendFunction,Lt.Replace)?this.blend.set(!1):(this.blend.set(!0),this.blendFunc.set(e.blendFunction),this.blendColor.set(e.blendColor)),this.colorMask.set(e.mask)},Pt.prototype.unbindVAO=function(){this.extVertexArrayObject&&this.bindVertexArrayOES.set(null)};var Ot=function(e){function r(r,n,i){var a=this;e.call(this),this.id=r,this.dispatcher=i,this.on("data",(function(t){"source"===t.dataType&&"metadata"===t.sourceDataType&&(a._sourceLoaded=!0),a._sourceLoaded&&!a._paused&&"source"===t.dataType&&"content"===t.sourceDataType&&(a.reload(),a.transform&&a.update(a.transform))})),this.on("error",(function(){a._sourceErrored=!0})),this._source=function(e,r,n,i){var a=new R[r.type](e,r,n,i);if(a.id!==e)throw new Error("Expected Source id to be "+e+" instead of "+a.id);return t.bindAll(["load","abort","unload","serialize","prepare"],a),a}(r,n,i,this),this._tiles={},this._cache=new j(0,this._unloadTile.bind(this)),this._timers={},this._cacheTimers={},this._maxTileCacheSize=null,this._loadedParentTiles={},this._coveredTiles={},this._state=new t.SourceFeatureState}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.onAdd=function(t){this.map=t,this._maxTileCacheSize=t?t._maxTileCacheSize:null,this._source&&this._source.onAdd&&this._source.onAdd(t)},r.prototype.onRemove=function(t){this._source&&this._source.onRemove&&this._source.onRemove(t)},r.prototype.loaded=function(){if(this._sourceErrored)return!0;if(!this._sourceLoaded)return!1;if(!this._source.loaded())return!1;for(var t in this._tiles){var e=this._tiles[t];if("loaded"!==e.state&&"errored"!==e.state)return!1}return!0},r.prototype.getSource=function(){return this._source},r.prototype.pause=function(){this._paused=!0},r.prototype.resume=function(){if(this._paused){var t=this._shouldReloadOnResume;this._paused=!1,this._shouldReloadOnResume=!1,t&&this.reload(),this.transform&&this.update(this.transform)}},r.prototype._loadTile=function(t,e){return this._source.loadTile(t,e)},r.prototype._unloadTile=function(t){if(this._source.unloadTile)return this._source.unloadTile(t,(function(){}))},r.prototype._abortTile=function(t){if(this._source.abortTile)return this._source.abortTile(t,(function(){}))},r.prototype.serialize=function(){return this._source.serialize()},r.prototype.prepare=function(t){for(var e in this._source.prepare&&this._source.prepare(),this._state.coalesceChanges(this._tiles,this.map?this.map.painter:null),this._tiles){var r=this._tiles[e];r.upload(t),r.prepare(this.map.style.imageManager)}},r.prototype.getIds=function(){return t.values(this._tiles).map((function(t){return t.tileID})).sort(It).map((function(t){return t.key}))},r.prototype.getRenderableIds=function(e){var r=this,n=[];for(var i in this._tiles)this._isIdRenderable(i,e)&&n.push(this._tiles[i]);return e?n.sort((function(e,n){var i=e.tileID,a=n.tileID,o=new t.Point(i.canonical.x,i.canonical.y)._rotate(r.transform.angle),s=new t.Point(a.canonical.x,a.canonical.y)._rotate(r.transform.angle);return i.overscaledZ-a.overscaledZ||s.y-o.y||s.x-o.x})).map((function(t){return t.tileID.key})):n.map((function(t){return t.tileID})).sort(It).map((function(t){return t.key}))},r.prototype.hasRenderableParent=function(t){var e=this.findLoadedParent(t,0);return!!e&&this._isIdRenderable(e.tileID.key)},r.prototype._isIdRenderable=function(t,e){return this._tiles[t]&&this._tiles[t].hasData()&&!this._coveredTiles[t]&&(e||!this._tiles[t].holdingForFade())},r.prototype.reload=function(){if(this._paused)this._shouldReloadOnResume=!0;else for(var t in this._cache.reset(),this._tiles)"errored"!==this._tiles[t].state&&this._reloadTile(t,"reloading")},r.prototype._reloadTile=function(t,e){var r=this._tiles[t];r&&("loading"!==r.state&&(r.state=e),this._loadTile(r,this._tileLoaded.bind(this,r,t,e)))},r.prototype._tileLoaded=function(e,r,n,i){if(i)return e.state="errored",void(404!==i.status?this._source.fire(new t.ErrorEvent(i,{tile:e})):this.update(this.transform));e.timeAdded=t.browser.now(),"expired"===n&&(e.refreshedUponExpiration=!0),this._setTileReloadTimer(r,e),"raster-dem"===this.getSource().type&&e.dem&&this._backfillDEM(e),this._state.initializeTileState(e,this.map?this.map.painter:null),this._source.fire(new t.Event("data",{dataType:"source",tile:e,coord:e.tileID}))},r.prototype._backfillDEM=function(t){for(var e=this.getRenderableIds(),r=0;r<e.length;r++){var n=e[r];if(t.neighboringTiles&&t.neighboringTiles[n]){var i=this.getTileByID(n);a(t,i),a(i,t)}}function a(t,e){t.needsHillshadePrepare=!0;var r=e.tileID.canonical.x-t.tileID.canonical.x,n=e.tileID.canonical.y-t.tileID.canonical.y,i=Math.pow(2,t.tileID.canonical.z),a=e.tileID.key;0===r&&0===n||Math.abs(n)>1||(Math.abs(r)>1&&(1===Math.abs(r+i)?r+=i:1===Math.abs(r-i)&&(r-=i)),e.dem&&t.dem&&(t.dem.backfillBorder(e.dem,r,n),t.neighboringTiles&&t.neighboringTiles[a]&&(t.neighboringTiles[a].backfilled=!0)))}},r.prototype.getTile=function(t){return this.getTileByID(t.key)},r.prototype.getTileByID=function(t){return this._tiles[t]},r.prototype._retainLoadedChildren=function(t,e,r,n){for(var i in this._tiles){var a=this._tiles[i];if(!(n[i]||!a.hasData()||a.tileID.overscaledZ<=e||a.tileID.overscaledZ>r)){for(var o=a.tileID;a&&a.tileID.overscaledZ>e+1;){var s=a.tileID.scaledTo(a.tileID.overscaledZ-1);(a=this._tiles[s.key])&&a.hasData()&&(o=s)}for(var l=o;l.overscaledZ>e;)if(t[(l=l.scaledTo(l.overscaledZ-1)).key]){n[o.key]=o;break}}}},r.prototype.findLoadedParent=function(t,e){if(t.key in this._loadedParentTiles){var r=this._loadedParentTiles[t.key];return r&&r.tileID.overscaledZ>=e?r:null}for(var n=t.overscaledZ-1;n>=e;n--){var i=t.scaledTo(n),a=this._getLoadedTile(i);if(a)return a}},r.prototype._getLoadedTile=function(t){var e=this._tiles[t.key];return e&&e.hasData()?e:this._cache.getByKey(t.wrapped().key)},r.prototype.updateCacheSize=function(t){var e=(Math.ceil(t.width/this._source.tileSize)+1)*(Math.ceil(t.height/this._source.tileSize)+1),r=Math.floor(5*e),n="number"==typeof this._maxTileCacheSize?Math.min(this._maxTileCacheSize,r):r;this._cache.setMaxSize(n)},r.prototype.handleWrapJump=function(t){var e=(t-(void 0===this._prevLng?t:this._prevLng))/360,r=Math.round(e);if(this._prevLng=t,r){var n={};for(var i in this._tiles){var a=this._tiles[i];a.tileID=a.tileID.unwrapTo(a.tileID.wrap+r),n[a.tileID.key]=a}for(var o in this._tiles=n,this._timers)clearTimeout(this._timers[o]),delete this._timers[o];for(var s in this._tiles){var l=this._tiles[s];this._setTileReloadTimer(s,l)}}},r.prototype.update=function(e){var n=this;if(this.transform=e,this._sourceLoaded&&!this._paused){var i;this.updateCacheSize(e),this.handleWrapJump(this.transform.center.lng),this._coveredTiles={},this.used?this._source.tileID?i=e.getVisibleUnwrappedCoordinates(this._source.tileID).map((function(e){return new t.OverscaledTileID(e.canonical.z,e.wrap,e.canonical.z,e.canonical.x,e.canonical.y)})):(i=e.coveringTiles({tileSize:this._source.tileSize,minzoom:this._source.minzoom,maxzoom:this._source.maxzoom,roundZoom:this._source.roundZoom,reparseOverscaled:this._source.reparseOverscaled}),this._source.hasTile&&(i=i.filter((function(t){return n._source.hasTile(t)})))):i=[];var a=e.coveringZoomLevel(this._source),o=Math.max(a-r.maxOverzooming,this._source.minzoom),s=Math.max(a+r.maxUnderzooming,this._source.minzoom),l=this._updateRetainedTiles(i,a);if(Dt(this._source.type)){for(var u={},c={},f=0,h=Object.keys(l);f<h.length;f+=1){var p=h[f],d=l[p],v=this._tiles[p];if(v&&!(v.fadeEndTime&&v.fadeEndTime<=t.browser.now())){var g=this.findLoadedParent(d,o);g&&(this._addTile(g.tileID),u[g.tileID.key]=g.tileID),c[p]=d}}for(var y in this._retainLoadedChildren(c,a,s,l),u)l[y]||(this._coveredTiles[y]=!0,l[y]=u[y])}for(var m in l)this._tiles[m].clearFadeHold();for(var x=0,b=t.keysDifference(this._tiles,l);x<b.length;x+=1){var _=b[x],w=this._tiles[_];w.hasSymbolBuckets&&!w.holdingForFade()?w.setHoldDuration(this.map._fadeDuration):w.hasSymbolBuckets&&!w.symbolFadeFinished()||this._removeTile(_)}this._updateLoadedParentTileCache()}},r.prototype.releaseSymbolFadeTiles=function(){for(var t in this._tiles)this._tiles[t].holdingForFade()&&this._removeTile(t)},r.prototype._updateRetainedTiles=function(t,e){for(var n={},i={},a=Math.max(e-r.maxOverzooming,this._source.minzoom),o=Math.max(e+r.maxUnderzooming,this._source.minzoom),s={},l=0,u=t;l<u.length;l+=1){var c=u[l],f=this._addTile(c);n[c.key]=c,f.hasData()||e<this._source.maxzoom&&(s[c.key]=c)}this._retainLoadedChildren(s,e,o,n);for(var h=0,p=t;h<p.length;h+=1){var d=p[h],v=this._tiles[d.key];if(!v.hasData()){if(e+1>this._source.maxzoom){var g=d.children(this._source.maxzoom)[0],y=this.getTile(g);if(y&&y.hasData()){n[g.key]=g;continue}}else{var m=d.children(this._source.maxzoom);if(n[m[0].key]&&n[m[1].key]&&n[m[2].key]&&n[m[3].key])continue}for(var x=v.wasRequested(),b=d.overscaledZ-1;b>=a;--b){var _=d.scaledTo(b);if(i[_.key])break;if(i[_.key]=!0,!(v=this.getTile(_))&&x&&(v=this._addTile(_)),v&&(n[_.key]=_,x=v.wasRequested(),v.hasData()))break}}}return n},r.prototype._updateLoadedParentTileCache=function(){for(var t in this._loadedParentTiles={},this._tiles){for(var e=[],r=void 0,n=this._tiles[t].tileID;n.overscaledZ>0;){if(n.key in this._loadedParentTiles){r=this._loadedParentTiles[n.key];break}e.push(n.key);var i=n.scaledTo(n.overscaledZ-1);if(r=this._getLoadedTile(i))break;n=i}for(var a=0,o=e;a<o.length;a+=1){var s=o[a];this._loadedParentTiles[s]=r}}},r.prototype._addTile=function(e){var r=this._tiles[e.key];if(r)return r;(r=this._cache.getAndRemove(e))&&(this._setTileReloadTimer(e.key,r),r.tileID=e,this._state.initializeTileState(r,this.map?this.map.painter:null),this._cacheTimers[e.key]&&(clearTimeout(this._cacheTimers[e.key]),delete this._cacheTimers[e.key],this._setTileReloadTimer(e.key,r)));var n=Boolean(r);return n||(r=new t.Tile(e,this._source.tileSize*e.overscaleFactor()),this._loadTile(r,this._tileLoaded.bind(this,r,e.key,r.state))),r?(r.uses++,this._tiles[e.key]=r,n||this._source.fire(new t.Event("dataloading",{tile:r,coord:r.tileID,dataType:"source"})),r):null},r.prototype._setTileReloadTimer=function(t,e){var r=this;t in this._timers&&(clearTimeout(this._timers[t]),delete this._timers[t]);var n=e.getExpiryTimeout();n&&(this._timers[t]=setTimeout((function(){r._reloadTile(t,"expired"),delete r._timers[t]}),n))},r.prototype._removeTile=function(t){var e=this._tiles[t];e&&(e.uses--,delete this._tiles[t],this._timers[t]&&(clearTimeout(this._timers[t]),delete this._timers[t]),e.uses>0||(e.hasData()&&"reloading"!==e.state?this._cache.add(e.tileID,e,e.getExpiryTimeout()):(e.aborted=!0,this._abortTile(e),this._unloadTile(e))))},r.prototype.clearTiles=function(){for(var t in this._shouldReloadOnResume=!1,this._paused=!1,this._tiles)this._removeTile(t);this._cache.reset()},r.prototype.tilesIn=function(e,r,n){var i=this,a=[],o=this.transform;if(!o)return a;for(var s=n?o.getCameraQueryGeometry(e):e,l=e.map((function(t){return o.pointCoordinate(t)})),u=s.map((function(t){return o.pointCoordinate(t)})),c=this.getIds(),f=1/0,h=1/0,p=-1/0,d=-1/0,v=0,g=u;v<g.length;v+=1){var y=g[v];f=Math.min(f,y.x),h=Math.min(h,y.y),p=Math.max(p,y.x),d=Math.max(d,y.y)}for(var m=function(e){var n=i._tiles[c[e]];if(!n.holdingForFade()){var s=n.tileID,v=Math.pow(2,o.zoom-n.tileID.overscaledZ),g=r*n.queryPadding*t.EXTENT/n.tileSize/v,y=[s.getTilePoint(new t.MercatorCoordinate(f,h)),s.getTilePoint(new t.MercatorCoordinate(p,d))];if(y[0].x-g<t.EXTENT&&y[0].y-g<t.EXTENT&&y[1].x+g>=0&&y[1].y+g>=0){var m=l.map((function(t){return s.getTilePoint(t)})),x=u.map((function(t){return s.getTilePoint(t)}));a.push({tile:n,tileID:s,queryGeometry:m,cameraQueryGeometry:x,scale:v})}}},x=0;x<c.length;x++)m(x);return a},r.prototype.getVisibleCoordinates=function(t){for(var e=this,r=this.getRenderableIds(t).map((function(t){return e._tiles[t].tileID})),n=0,i=r;n<i.length;n+=1){var a=i[n];a.posMatrix=this.transform.calculatePosMatrix(a.toUnwrapped())}return r},r.prototype.hasTransition=function(){if(this._source.hasTransition())return!0;if(Dt(this._source.type))for(var e in this._tiles){var r=this._tiles[e];if(void 0!==r.fadeEndTime&&r.fadeEndTime>=t.browser.now())return!0}return!1},r.prototype.setFeatureState=function(t,e,r){t=t||"_geojsonTileLayer",this._state.updateState(t,e,r)},r.prototype.removeFeatureState=function(t,e,r){t=t||"_geojsonTileLayer",this._state.removeFeatureState(t,e,r)},r.prototype.getFeatureState=function(t,e){return t=t||"_geojsonTileLayer",this._state.getState(t,e)},r.prototype.setDependencies=function(t,e,r){var n=this._tiles[t];n&&n.setDependencies(e,r)},r.prototype.reloadTilesForDependencies=function(t,e){for(var r in this._tiles)this._tiles[r].hasDependency(t,e)&&this._reloadTile(r,"reloading");this._cache.filter((function(r){return!r.hasDependency(t,e)}))},r}(t.Evented);function It(t,e){var r=Math.abs(2*t.wrap)-+(t.wrap<0),n=Math.abs(2*e.wrap)-+(e.wrap<0);return t.overscaledZ-e.overscaledZ||n-r||e.canonical.y-t.canonical.y||e.canonical.x-t.canonical.x}function Dt(t){return"raster"===t||"image"===t||"video"===t}function zt(){return new t.window.Worker(na.workerUrl)}Ot.maxOverzooming=10,Ot.maxUnderzooming=3;var Rt="mapboxgl_preloaded_worker_pool",Ft=function(){this.active={}};Ft.prototype.acquire=function(t){if(!this.workers)for(this.workers=[];this.workers.length<Ft.workerCount;)this.workers.push(new zt);return this.active[t]=!0,this.workers.slice()},Ft.prototype.release=function(t){delete this.active[t],0===this.numActive()&&(this.workers.forEach((function(t){t.terminate()})),this.workers=null)},Ft.prototype.isPreloaded=function(){return!!this.active[Rt]},Ft.prototype.numActive=function(){return Object.keys(this.active).length};var Bt,Nt=Math.floor(t.browser.hardwareConcurrency/2);function jt(){return Bt||(Bt=new Ft),Bt}function Ut(e,r){var n={};for(var i in e)"ref"!==i&&(n[i]=e[i]);return t.refProperties.forEach((function(t){t in r&&(n[t]=r[t])})),n}function Vt(t){t=t.slice();for(var e=Object.create(null),r=0;r<t.length;r++)e[t[r].id]=t[r];for(var n=0;n<t.length;n++)"ref"in t[n]&&(t[n]=Ut(t[n],e[t[n].ref]));return t}Ft.workerCount=Math.max(Math.min(Nt,6),1);var Ht={setStyle:"setStyle",addLayer:"addLayer",removeLayer:"removeLayer",setPaintProperty:"setPaintProperty",setLayoutProperty:"setLayoutProperty",setFilter:"setFilter",addSource:"addSource",removeSource:"removeSource",setGeoJSONSourceData:"setGeoJSONSourceData",setLayerZoomRange:"setLayerZoomRange",setLayerProperty:"setLayerProperty",setCenter:"setCenter",setZoom:"setZoom",setBearing:"setBearing",setPitch:"setPitch",setSprite:"setSprite",setGlyphs:"setGlyphs",setTransition:"setTransition",setLight:"setLight"};function qt(t,e,r){r.push({command:Ht.addSource,args:[t,e[t]]})}function Gt(t,e,r){e.push({command:Ht.removeSource,args:[t]}),r[t]=!0}function Zt(t,e,r,n){Gt(t,r,n),qt(t,e,r)}function Yt(e,r,n){var i;for(i in e[n])if(e[n].hasOwnProperty(i)&&"data"!==i&&!t.deepEqual(e[n][i],r[n][i]))return!1;for(i in r[n])if(r[n].hasOwnProperty(i)&&"data"!==i&&!t.deepEqual(e[n][i],r[n][i]))return!1;return!0}function Wt(e,r,n,i,a,o){var s;for(s in r=r||{},e=e||{})e.hasOwnProperty(s)&&(t.deepEqual(e[s],r[s])||n.push({command:o,args:[i,s,r[s],a]}));for(s in r)r.hasOwnProperty(s)&&!e.hasOwnProperty(s)&&(t.deepEqual(e[s],r[s])||n.push({command:o,args:[i,s,r[s],a]}))}function Xt(t){return t.id}function Jt(t,e){return t[e.id]=e,t}function Kt(e,r){if(!e)return[{command:Ht.setStyle,args:[r]}];var n=[];try{if(!t.deepEqual(e.version,r.version))return[{command:Ht.setStyle,args:[r]}];t.deepEqual(e.center,r.center)||n.push({command:Ht.setCenter,args:[r.center]}),t.deepEqual(e.zoom,r.zoom)||n.push({command:Ht.setZoom,args:[r.zoom]}),t.deepEqual(e.bearing,r.bearing)||n.push({command:Ht.setBearing,args:[r.bearing]}),t.deepEqual(e.pitch,r.pitch)||n.push({command:Ht.setPitch,args:[r.pitch]}),t.deepEqual(e.sprite,r.sprite)||n.push({command:Ht.setSprite,args:[r.sprite]}),t.deepEqual(e.glyphs,r.glyphs)||n.push({command:Ht.setGlyphs,args:[r.glyphs]}),t.deepEqual(e.transition,r.transition)||n.push({command:Ht.setTransition,args:[r.transition]}),t.deepEqual(e.light,r.light)||n.push({command:Ht.setLight,args:[r.light]});var i={},a=[];!function(e,r,n,i){var a;for(a in r=r||{},e=e||{})e.hasOwnProperty(a)&&(r.hasOwnProperty(a)||Gt(a,n,i));for(a in r)r.hasOwnProperty(a)&&(e.hasOwnProperty(a)?t.deepEqual(e[a],r[a])||("geojson"===e[a].type&&"geojson"===r[a].type&&Yt(e,r,a)?n.push({command:Ht.setGeoJSONSourceData,args:[a,r[a].data]}):Zt(a,r,n,i)):qt(a,r,n))}(e.sources,r.sources,a,i);var o=[];e.layers&&e.layers.forEach((function(t){i[t.source]?n.push({command:Ht.removeLayer,args:[t.id]}):o.push(t)})),n=n.concat(a),function(e,r,n){r=r||[];var i,a,o,s,l,u,c,f=(e=e||[]).map(Xt),h=r.map(Xt),p=e.reduce(Jt,{}),d=r.reduce(Jt,{}),v=f.slice(),g=Object.create(null);for(i=0,a=0;i<f.length;i++)o=f[i],d.hasOwnProperty(o)?a++:(n.push({command:Ht.removeLayer,args:[o]}),v.splice(v.indexOf(o,a),1));for(i=0,a=0;i<h.length;i++)o=h[h.length-1-i],v[v.length-1-i]!==o&&(p.hasOwnProperty(o)?(n.push({command:Ht.removeLayer,args:[o]}),v.splice(v.lastIndexOf(o,v.length-a),1)):a++,u=v[v.length-i],n.push({command:Ht.addLayer,args:[d[o],u]}),v.splice(v.length-i,0,o),g[o]=!0);for(i=0;i<h.length;i++)if(s=p[o=h[i]],l=d[o],!g[o]&&!t.deepEqual(s,l))if(t.deepEqual(s.source,l.source)&&t.deepEqual(s["source-layer"],l["source-layer"])&&t.deepEqual(s.type,l.type)){for(c in Wt(s.layout,l.layout,n,o,null,Ht.setLayoutProperty),Wt(s.paint,l.paint,n,o,null,Ht.setPaintProperty),t.deepEqual(s.filter,l.filter)||n.push({command:Ht.setFilter,args:[o,l.filter]}),t.deepEqual(s.minzoom,l.minzoom)&&t.deepEqual(s.maxzoom,l.maxzoom)||n.push({command:Ht.setLayerZoomRange,args:[o,l.minzoom,l.maxzoom]}),s)s.hasOwnProperty(c)&&"layout"!==c&&"paint"!==c&&"filter"!==c&&"metadata"!==c&&"minzoom"!==c&&"maxzoom"!==c&&(0===c.indexOf("paint.")?Wt(s[c],l[c],n,o,c.slice(6),Ht.setPaintProperty):t.deepEqual(s[c],l[c])||n.push({command:Ht.setLayerProperty,args:[o,c,l[c]]}));for(c in l)l.hasOwnProperty(c)&&!s.hasOwnProperty(c)&&"layout"!==c&&"paint"!==c&&"filter"!==c&&"metadata"!==c&&"minzoom"!==c&&"maxzoom"!==c&&(0===c.indexOf("paint.")?Wt(s[c],l[c],n,o,c.slice(6),Ht.setPaintProperty):t.deepEqual(s[c],l[c])||n.push({command:Ht.setLayerProperty,args:[o,c,l[c]]}))}else n.push({command:Ht.removeLayer,args:[o]}),u=v[v.lastIndexOf(o)+1],n.push({command:Ht.addLayer,args:[l,u]})}(o,r.layers,n)}catch(t){console.warn("Unable to compute style diff:",t),n=[{command:Ht.setStyle,args:[r]}]}return n}var $t=function(t,e){this.reset(t,e)};$t.prototype.reset=function(t,e){this.points=t||[],this._distances=[0];for(var r=1;r<this.points.length;r++)this._distances[r]=this._distances[r-1]+this.points[r].dist(this.points[r-1]);this.length=this._distances[this._distances.length-1],this.padding=Math.min(e||0,.5*this.length),this.paddedLength=this.length-2*this.padding},$t.prototype.lerp=function(e){if(1===this.points.length)return this.points[0];e=t.clamp(e,0,1);for(var r=1,n=this._distances[r],i=e*this.paddedLength+this.padding;n<i&&r<this._distances.length;)n=this._distances[++r];var a=r-1,o=this._distances[a],s=n-o,l=s>0?(i-o)/s:0;return this.points[a].mult(1-l).add(this.points[r].mult(l))};var Qt=function(t,e,r){var n=this.boxCells=[],i=this.circleCells=[];this.xCellCount=Math.ceil(t/r),this.yCellCount=Math.ceil(e/r);for(var a=0;a<this.xCellCount*this.yCellCount;a++)n.push([]),i.push([]);this.circleKeys=[],this.boxKeys=[],this.bboxes=[],this.circles=[],this.width=t,this.height=e,this.xScale=this.xCellCount/t,this.yScale=this.yCellCount/e,this.boxUid=0,this.circleUid=0};function te(e,r,n,i,a){var o=t.create();return r?(t.scale(o,o,[1/a,1/a,1]),n||t.rotateZ(o,o,i.angle)):t.multiply(o,i.labelPlaneMatrix,e),o}function ee(e,r,n,i,a){if(r){var o=t.clone(e);return t.scale(o,o,[a,a,1]),n||t.rotateZ(o,o,-i.angle),o}return i.glCoordMatrix}function re(e,r){var n=[e.x,e.y,0,1];pe(n,n,r);var i=n[3];return{point:new t.Point(n[0]/i,n[1]/i),signedDistanceFromCamera:i}}function ne(t,e){return.5+t/e*.5}function ie(t,e){var r=t[0]/t[3],n=t[1]/t[3];return r>=-e[0]&&r<=e[0]&&n>=-e[1]&&n<=e[1]}function ae(e,r,n,i,a,o,s,l){var u=i?e.textSizeData:e.iconSizeData,c=t.evaluateSizeForZoom(u,n.transform.zoom),f=[256/n.width*2+1,256/n.height*2+1],h=i?e.text.dynamicLayoutVertexArray:e.icon.dynamicLayoutVertexArray;h.clear();for(var p=e.lineVertexArray,d=i?e.text.placedSymbolArray:e.icon.placedSymbolArray,v=n.transform.width/n.transform.height,g=!1,y=0;y<d.length;y++){var m=d.get(y);if(m.hidden||m.writingMode===t.WritingMode.vertical&&!g)he(m.numGlyphs,h);else{g=!1;var x=[m.anchorX,m.anchorY,0,1];if(t.transformMat4(x,x,r),ie(x,f)){var b=x[3],_=ne(n.transform.cameraToCenterDistance,b),w=t.evaluateSizeForFeature(u,c,m),T=s?w/_:w*_,k=new t.Point(m.anchorX,m.anchorY),A=re(k,a).point,M={},S=le(m,T,!1,l,r,a,o,e.glyphOffsetArray,p,h,A,k,M,v);g=S.useVertical,(S.notEnoughRoom||g||S.needsFlipping&&le(m,T,!0,l,r,a,o,e.glyphOffsetArray,p,h,A,k,M,v).notEnoughRoom)&&he(m.numGlyphs,h)}else he(m.numGlyphs,h)}}i?e.text.dynamicLayoutVertexBuffer.updateData(h):e.icon.dynamicLayoutVertexBuffer.updateData(h)}function oe(t,e,r,n,i,a,o,s,l,u,c){var f=s.glyphStartIndex+s.numGlyphs,h=s.lineStartIndex,p=s.lineStartIndex+s.lineLength,d=e.getoffsetX(s.glyphStartIndex),v=e.getoffsetX(f-1),g=ce(t*d,r,n,i,a,o,s.segment,h,p,l,u,c);if(!g)return null;var y=ce(t*v,r,n,i,a,o,s.segment,h,p,l,u,c);return y?{first:g,last:y}:null}function se(e,r,n,i){return e===t.WritingMode.horizontal&&Math.abs(n.y-r.y)>Math.abs(n.x-r.x)*i?{useVertical:!0}:(e===t.WritingMode.vertical?r.y<n.y:r.x>n.x)?{needsFlipping:!0}:null}function le(e,r,n,i,a,o,s,l,u,c,f,h,p,d){var v,g=r/24,y=e.lineOffsetX*g,m=e.lineOffsetY*g;if(e.numGlyphs>1){var x=e.glyphStartIndex+e.numGlyphs,b=e.lineStartIndex,_=e.lineStartIndex+e.lineLength,w=oe(g,l,y,m,n,f,h,e,u,o,p);if(!w)return{notEnoughRoom:!0};var T=re(w.first.point,s).point,k=re(w.last.point,s).point;if(i&&!n){var A=se(e.writingMode,T,k,d);if(A)return A}v=[w.first];for(var M=e.glyphStartIndex+1;M<x-1;M++)v.push(ce(g*l.getoffsetX(M),y,m,n,f,h,e.segment,b,_,u,o,p));v.push(w.last)}else{if(i&&!n){var S=re(h,a).point,E=e.lineStartIndex+e.segment+1,L=new t.Point(u.getx(E),u.gety(E)),C=re(L,a),P=C.signedDistanceFromCamera>0?C.point:ue(h,L,S,1,a),O=se(e.writingMode,S,P,d);if(O)return O}var I=ce(g*l.getoffsetX(e.glyphStartIndex),y,m,n,f,h,e.segment,e.lineStartIndex,e.lineStartIndex+e.lineLength,u,o,p);if(!I)return{notEnoughRoom:!0};v=[I]}for(var D=0,z=v;D<z.length;D+=1){var R=z[D];t.addDynamicAttributes(c,R.point,R.angle)}return{}}function ue(t,e,r,n,i){var a=re(t.add(t.sub(e)._unit()),i).point,o=r.sub(a);return r.add(o._mult(n/o.mag()))}function ce(e,r,n,i,a,o,s,l,u,c,f,h){var p=i?e-r:e+r,d=p>0?1:-1,v=0;i&&(d*=-1,v=Math.PI),d<0&&(v+=Math.PI);for(var g=d>0?l+s:l+s+1,y=a,m=a,x=0,b=0,_=Math.abs(p),w=[];x+b<=_;){if((g+=d)<l||g>=u)return null;if(m=y,w.push(y),void 0===(y=h[g])){var T=new t.Point(c.getx(g),c.gety(g)),k=re(T,f);if(k.signedDistanceFromCamera>0)y=h[g]=k.point;else{var A=g-d;y=ue(0===x?o:new t.Point(c.getx(A),c.gety(A)),T,m,_-x+1,f)}}x+=b,b=m.dist(y)}var M=(_-x)/b,S=y.sub(m),E=S.mult(M)._add(m);E._add(S._unit()._perp()._mult(n*d));var L=v+Math.atan2(y.y-m.y,y.x-m.x);return w.push(E),{point:E,angle:L,path:w}}Qt.prototype.keysLength=function(){return this.boxKeys.length+this.circleKeys.length},Qt.prototype.insert=function(t,e,r,n,i){this._forEachCell(e,r,n,i,this._insertBoxCell,this.boxUid++),this.boxKeys.push(t),this.bboxes.push(e),this.bboxes.push(r),this.bboxes.push(n),this.bboxes.push(i)},Qt.prototype.insertCircle=function(t,e,r,n){this._forEachCell(e-n,r-n,e+n,r+n,this._insertCircleCell,this.circleUid++),this.circleKeys.push(t),this.circles.push(e),this.circles.push(r),this.circles.push(n)},Qt.prototype._insertBoxCell=function(t,e,r,n,i,a){this.boxCells[i].push(a)},Qt.prototype._insertCircleCell=function(t,e,r,n,i,a){this.circleCells[i].push(a)},Qt.prototype._query=function(t,e,r,n,i,a){if(r<0||t>this.width||n<0||e>this.height)return!i&&[];var o=[];if(t<=0&&e<=0&&this.width<=r&&this.height<=n){if(i)return!0;for(var s=0;s<this.boxKeys.length;s++)o.push({key:this.boxKeys[s],x1:this.bboxes[4*s],y1:this.bboxes[4*s+1],x2:this.bboxes[4*s+2],y2:this.bboxes[4*s+3]});for(var l=0;l<this.circleKeys.length;l++){var u=this.circles[3*l],c=this.circles[3*l+1],f=this.circles[3*l+2];o.push({key:this.circleKeys[l],x1:u-f,y1:c-f,x2:u+f,y2:c+f})}return a?o.filter(a):o}var h={hitTest:i,seenUids:{box:{},circle:{}}};return this._forEachCell(t,e,r,n,this._queryCell,o,h,a),i?o.length>0:o},Qt.prototype._queryCircle=function(t,e,r,n,i){var a=t-r,o=t+r,s=e-r,l=e+r;if(o<0||a>this.width||l<0||s>this.height)return!n&&[];var u=[],c={hitTest:n,circle:{x:t,y:e,radius:r},seenUids:{box:{},circle:{}}};return this._forEachCell(a,s,o,l,this._queryCellCircle,u,c,i),n?u.length>0:u},Qt.prototype.query=function(t,e,r,n,i){return this._query(t,e,r,n,!1,i)},Qt.prototype.hitTest=function(t,e,r,n,i){return this._query(t,e,r,n,!0,i)},Qt.prototype.hitTestCircle=function(t,e,r,n){return this._queryCircle(t,e,r,!0,n)},Qt.prototype._queryCell=function(t,e,r,n,i,a,o,s){var l=o.seenUids,u=this.boxCells[i];if(null!==u)for(var c=this.bboxes,f=0,h=u;f<h.length;f+=1){var p=h[f];if(!l.box[p]){l.box[p]=!0;var d=4*p;if(t<=c[d+2]&&e<=c[d+3]&&r>=c[d+0]&&n>=c[d+1]&&(!s||s(this.boxKeys[p]))){if(o.hitTest)return a.push(!0),!0;a.push({key:this.boxKeys[p],x1:c[d],y1:c[d+1],x2:c[d+2],y2:c[d+3]})}}}var v=this.circleCells[i];if(null!==v)for(var g=this.circles,y=0,m=v;y<m.length;y+=1){var x=m[y];if(!l.circle[x]){l.circle[x]=!0;var b=3*x;if(this._circleAndRectCollide(g[b],g[b+1],g[b+2],t,e,r,n)&&(!s||s(this.circleKeys[x]))){if(o.hitTest)return a.push(!0),!0;var _=g[b],w=g[b+1],T=g[b+2];a.push({key:this.circleKeys[x],x1:_-T,y1:w-T,x2:_+T,y2:w+T})}}}},Qt.prototype._queryCellCircle=function(t,e,r,n,i,a,o,s){var l=o.circle,u=o.seenUids,c=this.boxCells[i];if(null!==c)for(var f=this.bboxes,h=0,p=c;h<p.length;h+=1){var d=p[h];if(!u.box[d]){u.box[d]=!0;var v=4*d;if(this._circleAndRectCollide(l.x,l.y,l.radius,f[v+0],f[v+1],f[v+2],f[v+3])&&(!s||s(this.boxKeys[d])))return a.push(!0),!0}}var g=this.circleCells[i];if(null!==g)for(var y=this.circles,m=0,x=g;m<x.length;m+=1){var b=x[m];if(!u.circle[b]){u.circle[b]=!0;var _=3*b;if(this._circlesCollide(y[_],y[_+1],y[_+2],l.x,l.y,l.radius)&&(!s||s(this.circleKeys[b])))return a.push(!0),!0}}},Qt.prototype._forEachCell=function(t,e,r,n,i,a,o,s){for(var l=this._convertToXCellCoord(t),u=this._convertToYCellCoord(e),c=this._convertToXCellCoord(r),f=this._convertToYCellCoord(n),h=l;h<=c;h++)for(var p=u;p<=f;p++){var d=this.xCellCount*p+h;if(i.call(this,t,e,r,n,d,a,o,s))return}},Qt.prototype._convertToXCellCoord=function(t){return Math.max(0,Math.min(this.xCellCount-1,Math.floor(t*this.xScale)))},Qt.prototype._convertToYCellCoord=function(t){return Math.max(0,Math.min(this.yCellCount-1,Math.floor(t*this.yScale)))},Qt.prototype._circlesCollide=function(t,e,r,n,i,a){var o=n-t,s=i-e,l=r+a;return l*l>o*o+s*s},Qt.prototype._circleAndRectCollide=function(t,e,r,n,i,a,o){var s=(a-n)/2,l=Math.abs(t-(n+s));if(l>s+r)return!1;var u=(o-i)/2,c=Math.abs(e-(i+u));if(c>u+r)return!1;if(l<=s||c<=u)return!0;var f=l-s,h=c-u;return f*f+h*h<=r*r};var fe=new Float32Array([-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0]);function he(t,e){for(var r=0;r<t;r++){var n=e.length;e.resize(n+4),e.float32.set(fe,3*n)}}function pe(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[4]*i+r[12],t[1]=r[1]*n+r[5]*i+r[13],t[3]=r[3]*n+r[7]*i+r[15],t}var de=100,ve=function(t,e,r){void 0===e&&(e=new Qt(t.width+200,t.height+200,25)),void 0===r&&(r=new Qt(t.width+200,t.height+200,25)),this.transform=t,this.grid=e,this.ignoredGrid=r,this.pitchfactor=Math.cos(t._pitch)*t.cameraToCenterDistance,this.screenRightBoundary=t.width+de,this.screenBottomBoundary=t.height+de,this.gridRightBoundary=t.width+200,this.gridBottomBoundary=t.height+200};function ge(e,r,n){return r*(t.EXTENT/(e.tileSize*Math.pow(2,n-e.tileID.overscaledZ)))}ve.prototype.placeCollisionBox=function(t,e,r,n,i){var a=this.projectAndGetPerspectiveRatio(n,t.anchorPointX,t.anchorPointY),o=r*a.perspectiveRatio,s=t.x1*o+a.point.x,l=t.y1*o+a.point.y,u=t.x2*o+a.point.x,c=t.y2*o+a.point.y;return!this.isInsideGrid(s,l,u,c)||!e&&this.grid.hitTest(s,l,u,c,i)?{box:[],offscreen:!1}:{box:[s,l,u,c],offscreen:this.isOffscreen(s,l,u,c)}},ve.prototype.placeCollisionCircles=function(e,r,n,i,a,o,s,l,u,c,f,h,p){var d=[],v=new t.Point(r.anchorX,r.anchorY),g=re(v,o),y=ne(this.transform.cameraToCenterDistance,g.signedDistanceFromCamera),m=(c?a/y:a*y)/t.ONE_EM,x=re(v,s).point,b=oe(m,i,r.lineOffsetX*m,r.lineOffsetY*m,!1,x,v,r,n,s,{}),_=!1,w=!1,T=!0;if(b){for(var k=.5*h*y+p,A=new t.Point(-100,-100),M=new t.Point(this.screenRightBoundary,this.screenBottomBoundary),S=new $t,E=b.first,L=b.last,C=[],P=E.path.length-1;P>=1;P--)C.push(E.path[P]);for(var O=1;O<L.path.length;O++)C.push(L.path[O]);var I=2.5*k;if(l){var D=C.map((function(t){return re(t,l)}));C=D.some((function(t){return t.signedDistanceFromCamera<=0}))?[]:D.map((function(t){return t.point}))}var z=[];if(C.length>0){for(var R=C[0].clone(),F=C[0].clone(),B=1;B<C.length;B++)R.x=Math.min(R.x,C[B].x),R.y=Math.min(R.y,C[B].y),F.x=Math.max(F.x,C[B].x),F.y=Math.max(F.y,C[B].y);z=R.x>=A.x&&F.x<=M.x&&R.y>=A.y&&F.y<=M.y?[C]:F.x<A.x||R.x>M.x||F.y<A.y||R.y>M.y?[]:t.clipLine([C],A.x,A.y,M.x,M.y)}for(var N=0,j=z;N<j.length;N+=1){var U=j[N];S.reset(U,.25*k);var V;V=S.length<=.5*k?1:Math.ceil(S.paddedLength/I)+1;for(var H=0;H<V;H++){var q=H/Math.max(V-1,1),G=S.lerp(q),Z=G.x+de,Y=G.y+de;d.push(Z,Y,k,0);var W=Z-k,X=Y-k,J=Z+k,K=Y+k;if(T=T&&this.isOffscreen(W,X,J,K),w=w||this.isInsideGrid(W,X,J,K),!e&&this.grid.hitTestCircle(Z,Y,k,f)&&(_=!0,!u))return{circles:[],offscreen:!1,collisionDetected:_}}}}return{circles:!u&&_||!w?[]:d,offscreen:T,collisionDetected:_}},ve.prototype.queryRenderedSymbols=function(e){if(0===e.length||0===this.grid.keysLength()&&0===this.ignoredGrid.keysLength())return{};for(var r=[],n=1/0,i=1/0,a=-1/0,o=-1/0,s=0,l=e;s<l.length;s+=1){var u=l[s],c=new t.Point(u.x+de,u.y+de);n=Math.min(n,c.x),i=Math.min(i,c.y),a=Math.max(a,c.x),o=Math.max(o,c.y),r.push(c)}for(var f={},h={},p=0,d=this.grid.query(n,i,a,o).concat(this.ignoredGrid.query(n,i,a,o));p<d.length;p+=1){var v=d[p],g=v.key;if(void 0===f[g.bucketInstanceId]&&(f[g.bucketInstanceId]={}),!f[g.bucketInstanceId][g.featureIndex]){var y=[new t.Point(v.x1,v.y1),new t.Point(v.x2,v.y1),new t.Point(v.x2,v.y2),new t.Point(v.x1,v.y2)];t.polygonIntersectsPolygon(r,y)&&(f[g.bucketInstanceId][g.featureIndex]=!0,void 0===h[g.bucketInstanceId]&&(h[g.bucketInstanceId]=[]),h[g.bucketInstanceId].push(g.featureIndex))}}return h},ve.prototype.insertCollisionBox=function(t,e,r,n,i){var a={bucketInstanceId:r,featureIndex:n,collisionGroupID:i};(e?this.ignoredGrid:this.grid).insert(a,t[0],t[1],t[2],t[3])},ve.prototype.insertCollisionCircles=function(t,e,r,n,i){for(var a=e?this.ignoredGrid:this.grid,o={bucketInstanceId:r,featureIndex:n,collisionGroupID:i},s=0;s<t.length;s+=4)a.insertCircle(o,t[s],t[s+1],t[s+2])},ve.prototype.projectAndGetPerspectiveRatio=function(e,r,n){var i=[r,n,0,1];return pe(i,i,e),{point:new t.Point((i[0]/i[3]+1)/2*this.transform.width+de,(-i[1]/i[3]+1)/2*this.transform.height+de),perspectiveRatio:.5+this.transform.cameraToCenterDistance/i[3]*.5}},ve.prototype.isOffscreen=function(t,e,r,n){return r<de||t>=this.screenRightBoundary||n<de||e>this.screenBottomBoundary},ve.prototype.isInsideGrid=function(t,e,r,n){return r>=0&&t<this.gridRightBoundary&&n>=0&&e<this.gridBottomBoundary},ve.prototype.getViewportMatrix=function(){var e=t.identity([]);return t.translate(e,e,[-100,-100,0]),e};var ye=function(t,e,r,n){this.opacity=t?Math.max(0,Math.min(1,t.opacity+(t.placed?e:-e))):n&&r?1:0,this.placed=r};ye.prototype.isHidden=function(){return 0===this.opacity&&!this.placed};var me=function(t,e,r,n,i){this.text=new ye(t?t.text:null,e,r,i),this.icon=new ye(t?t.icon:null,e,n,i)};me.prototype.isHidden=function(){return this.text.isHidden()&&this.icon.isHidden()};var xe=function(t,e,r){this.text=t,this.icon=e,this.skipFade=r},be=function(){this.invProjMatrix=t.create(),this.viewportMatrix=t.create(),this.circles=[]},_e=function(t,e,r,n,i){this.bucketInstanceId=t,this.featureIndex=e,this.sourceLayerIndex=r,this.bucketIndex=n,this.tileID=i},we=function(t){this.crossSourceCollisions=t,this.maxGroupID=0,this.collisionGroups={}};function Te(e,r,n,i,a){var o=t.getAnchorAlignment(e),s=-(o.horizontalAlign-.5)*r,l=-(o.verticalAlign-.5)*n,u=t.evaluateVariableOffset(e,i);return new t.Point(s+u[0]*a,l+u[1]*a)}function ke(e,r,n,i,a,o){var s=e.x1,l=e.x2,u=e.y1,c=e.y2,f=e.anchorPointX,h=e.anchorPointY,p=new t.Point(r,n);return i&&p._rotate(a?o:-o),{x1:s+p.x,y1:u+p.y,x2:l+p.x,y2:c+p.y,anchorPointX:f,anchorPointY:h}}we.prototype.get=function(t){if(this.crossSourceCollisions)return{ID:0,predicate:null};if(!this.collisionGroups[t]){var e=++this.maxGroupID;this.collisionGroups[t]={ID:e,predicate:function(t){return t.collisionGroupID===e}}}return this.collisionGroups[t]};var Ae=function(t,e,r,n){this.transform=t.clone(),this.collisionIndex=new ve(this.transform),this.placements={},this.opacities={},this.variableOffsets={},this.stale=!1,this.commitTime=0,this.fadeDuration=e,this.retainedQueryData={},this.collisionGroups=new we(r),this.collisionCircleArrays={},this.prevPlacement=n,n&&(n.prevPlacement=void 0),this.placedOrientations={}};function Me(t,e,r,n,i){t.emplaceBack(e?1:0,r?1:0,n||0,i||0),t.emplaceBack(e?1:0,r?1:0,n||0,i||0),t.emplaceBack(e?1:0,r?1:0,n||0,i||0),t.emplaceBack(e?1:0,r?1:0,n||0,i||0)}Ae.prototype.getBucketParts=function(e,r,n,i){var a=n.getBucket(r),o=n.latestFeatureIndex;if(a&&o&&r.id===a.layerIds[0]){var s=n.collisionBoxArray,l=a.layers[0].layout,u=Math.pow(2,this.transform.zoom-n.tileID.overscaledZ),c=n.tileSize/t.EXTENT,f=this.transform.calculatePosMatrix(n.tileID.toUnwrapped()),h="map"===l.get("text-pitch-alignment"),p="map"===l.get("text-rotation-alignment"),d=ge(n,1,this.transform.zoom),v=te(f,h,p,this.transform,d),g=null;if(h){var y=ee(f,h,p,this.transform,d);g=t.multiply([],this.transform.labelPlaneMatrix,y)}this.retainedQueryData[a.bucketInstanceId]=new _e(a.bucketInstanceId,o,a.sourceLayerIndex,a.index,n.tileID);var m={bucket:a,layout:l,posMatrix:f,textLabelPlaneMatrix:v,labelToScreenMatrix:g,scale:u,textPixelRatio:c,holdingForFade:n.holdingForFade(),collisionBoxArray:s,partiallyEvaluatedTextSize:t.evaluateSizeForZoom(a.textSizeData,this.transform.zoom),collisionGroup:this.collisionGroups.get(a.sourceID)};if(i)for(var x=0,b=a.sortKeyRanges;x<b.length;x+=1){var _=b[x],w=_.sortKey,T=_.symbolInstanceStart,k=_.symbolInstanceEnd;e.push({sortKey:w,symbolInstanceStart:T,symbolInstanceEnd:k,parameters:m})}else e.push({symbolInstanceStart:0,symbolInstanceEnd:a.symbolInstances.length,parameters:m})}},Ae.prototype.attemptAnchorPlacement=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d){var v,g=[f.textOffset0,f.textOffset1],y=Te(t,r,n,g,i),m=this.collisionIndex.placeCollisionBox(ke(e,y.x,y.y,a,o,this.transform.angle),c,s,l,u.predicate);if(!d||0!==this.collisionIndex.placeCollisionBox(ke(d,y.x,y.y,a,o,this.transform.angle),c,s,l,u.predicate).box.length)return m.box.length>0?(this.prevPlacement&&this.prevPlacement.variableOffsets[f.crossTileID]&&this.prevPlacement.placements[f.crossTileID]&&this.prevPlacement.placements[f.crossTileID].text&&(v=this.prevPlacement.variableOffsets[f.crossTileID].anchor),this.variableOffsets[f.crossTileID]={textOffset:g,width:r,height:n,anchor:t,textBoxScale:i,prevAnchor:v},this.markUsedJustification(h,t,f,p),h.allowVerticalPlacement&&(this.markUsedOrientation(h,p,f),this.placedOrientations[f.crossTileID]=p),{shift:y,placedGlyphBoxes:m}):void 0},Ae.prototype.placeLayerBucketPart=function(e,r,n){var i=this,a=e.parameters,o=a.bucket,s=a.layout,l=a.posMatrix,u=a.textLabelPlaneMatrix,c=a.labelToScreenMatrix,f=a.textPixelRatio,h=a.holdingForFade,p=a.collisionBoxArray,d=a.partiallyEvaluatedTextSize,v=a.collisionGroup,g=s.get("text-optional"),y=s.get("icon-optional"),m=s.get("text-allow-overlap"),x=s.get("icon-allow-overlap"),b="map"===s.get("text-rotation-alignment"),_="map"===s.get("text-pitch-alignment"),w="none"!==s.get("icon-text-fit"),T="viewport-y"===s.get("symbol-z-order"),k=m&&(x||!o.hasIconData()||y),A=x&&(m||!o.hasTextData()||g);!o.collisionArrays&&p&&o.deserializeCollisionBoxes(p);var M=function(e,a){if(!r[e.crossTileID])if(h)i.placements[e.crossTileID]=new xe(!1,!1,!1);else{var p,T=!1,M=!1,S=!0,E=null,L={box:null,offscreen:null},C={box:null,offscreen:null},P=null,O=null,I=0,D=0,z=0;a.textFeatureIndex?I=a.textFeatureIndex:e.useRuntimeCollisionCircles&&(I=e.featureIndex),a.verticalTextFeatureIndex&&(D=a.verticalTextFeatureIndex);var R=a.textBox;if(R){var F=function(r){var n=t.WritingMode.horizontal;if(o.allowVerticalPlacement&&!r&&i.prevPlacement){var a=i.prevPlacement.placedOrientations[e.crossTileID];a&&(i.placedOrientations[e.crossTileID]=a,n=a,i.markUsedOrientation(o,n,e))}return n},B=function(r,n){if(o.allowVerticalPlacement&&e.numVerticalGlyphVertices>0&&a.verticalTextBox)for(var i=0,s=o.writingModes;i<s.length&&(s[i]===t.WritingMode.vertical?(L=n(),C=L):L=r(),!(L&&L.box&&L.box.length));i+=1);else L=r()};if(s.get("text-variable-anchor")){var N=s.get("text-variable-anchor");if(i.prevPlacement&&i.prevPlacement.variableOffsets[e.crossTileID]){var j=i.prevPlacement.variableOffsets[e.crossTileID];N.indexOf(j.anchor)>0&&(N=N.filter((function(t){return t!==j.anchor}))).unshift(j.anchor)}var U=function(t,r,n){for(var a=t.x2-t.x1,s=t.y2-t.y1,u=e.textBoxScale,c=w&&!x?r:null,h={box:[],offscreen:!1},p=m?2*N.length:N.length,d=0;d<p;++d){var g=N[d%N.length],y=d>=N.length,k=i.attemptAnchorPlacement(g,t,a,s,u,b,_,f,l,v,y,e,o,n,c);if(k&&(h=k.placedGlyphBoxes)&&h.box&&h.box.length){T=!0,E=k.shift;break}}return h};B((function(){return U(R,a.iconBox,t.WritingMode.horizontal)}),(function(){var r=a.verticalTextBox,n=L&&L.box&&L.box.length;return o.allowVerticalPlacement&&!n&&e.numVerticalGlyphVertices>0&&r?U(r,a.verticalIconBox,t.WritingMode.vertical):{box:null,offscreen:null}})),L&&(T=L.box,S=L.offscreen);var V=F(L&&L.box);if(!T&&i.prevPlacement){var H=i.prevPlacement.variableOffsets[e.crossTileID];H&&(i.variableOffsets[e.crossTileID]=H,i.markUsedJustification(o,H.anchor,e,V))}}else{var q=function(t,r){var n=i.collisionIndex.placeCollisionBox(t,m,f,l,v.predicate);return n&&n.box&&n.box.length&&(i.markUsedOrientation(o,r,e),i.placedOrientations[e.crossTileID]=r),n};B((function(){return q(R,t.WritingMode.horizontal)}),(function(){var r=a.verticalTextBox;return o.allowVerticalPlacement&&e.numVerticalGlyphVertices>0&&r?q(r,t.WritingMode.vertical):{box:null,offscreen:null}})),F(L&&L.box&&L.box.length)}}if(T=(p=L)&&p.box&&p.box.length>0,S=p&&p.offscreen,e.useRuntimeCollisionCircles){var G=o.text.placedSymbolArray.get(e.centerJustifiedTextSymbolIndex),Z=t.evaluateSizeForFeature(o.textSizeData,d,G),Y=s.get("text-padding"),W=e.collisionCircleDiameter;P=i.collisionIndex.placeCollisionCircles(m,G,o.lineVertexArray,o.glyphOffsetArray,Z,l,u,c,n,_,v.predicate,W,Y),T=m||P.circles.length>0&&!P.collisionDetected,S=S&&P.offscreen}if(a.iconFeatureIndex&&(z=a.iconFeatureIndex),a.iconBox){var X=function(t){var e=w&&E?ke(t,E.x,E.y,b,_,i.transform.angle):t;return i.collisionIndex.placeCollisionBox(e,x,f,l,v.predicate)};M=C&&C.box&&C.box.length&&a.verticalIconBox?(O=X(a.verticalIconBox)).box.length>0:(O=X(a.iconBox)).box.length>0,S=S&&O.offscreen}var J=g||0===e.numHorizontalGlyphVertices&&0===e.numVerticalGlyphVertices,K=y||0===e.numIconVertices;if(J||K?K?J||(M=M&&T):T=M&&T:M=T=M&&T,T&&p&&p.box&&(C&&C.box&&D?i.collisionIndex.insertCollisionBox(p.box,s.get("text-ignore-placement"),o.bucketInstanceId,D,v.ID):i.collisionIndex.insertCollisionBox(p.box,s.get("text-ignore-placement"),o.bucketInstanceId,I,v.ID)),M&&O&&i.collisionIndex.insertCollisionBox(O.box,s.get("icon-ignore-placement"),o.bucketInstanceId,z,v.ID),P&&(T&&i.collisionIndex.insertCollisionCircles(P.circles,s.get("text-ignore-placement"),o.bucketInstanceId,I,v.ID),n)){var $=o.bucketInstanceId,Q=i.collisionCircleArrays[$];void 0===Q&&(Q=i.collisionCircleArrays[$]=new be);for(var tt=0;tt<P.circles.length;tt+=4)Q.circles.push(P.circles[tt+0]),Q.circles.push(P.circles[tt+1]),Q.circles.push(P.circles[tt+2]),Q.circles.push(P.collisionDetected?1:0)}i.placements[e.crossTileID]=new xe(T||k,M||A,S||o.justReloaded),r[e.crossTileID]=!0}};if(T)for(var S=o.getSortedSymbolIndexes(this.transform.angle),E=S.length-1;E>=0;--E){var L=S[E];M(o.symbolInstances.get(L),o.collisionArrays[L])}else for(var C=e.symbolInstanceStart;C<e.symbolInstanceEnd;C++)M(o.symbolInstances.get(C),o.collisionArrays[C]);if(n&&o.bucketInstanceId in this.collisionCircleArrays){var P=this.collisionCircleArrays[o.bucketInstanceId];t.invert(P.invProjMatrix,l),P.viewportMatrix=this.collisionIndex.getViewportMatrix()}o.justReloaded=!1},Ae.prototype.markUsedJustification=function(e,r,n,i){var a,o={left:n.leftJustifiedTextSymbolIndex,center:n.centerJustifiedTextSymbolIndex,right:n.rightJustifiedTextSymbolIndex};a=i===t.WritingMode.vertical?n.verticalPlacedTextSymbolIndex:o[t.getAnchorJustification(r)];for(var s=0,l=[n.leftJustifiedTextSymbolIndex,n.centerJustifiedTextSymbolIndex,n.rightJustifiedTextSymbolIndex,n.verticalPlacedTextSymbolIndex];s<l.length;s+=1){var u=l[s];u>=0&&(e.text.placedSymbolArray.get(u).crossTileID=a>=0&&u!==a?0:n.crossTileID)}},Ae.prototype.markUsedOrientation=function(e,r,n){for(var i=r===t.WritingMode.horizontal||r===t.WritingMode.horizontalOnly?r:0,a=r===t.WritingMode.vertical?r:0,o=0,s=[n.leftJustifiedTextSymbolIndex,n.centerJustifiedTextSymbolIndex,n.rightJustifiedTextSymbolIndex];o<s.length;o+=1){var l=s[o];e.text.placedSymbolArray.get(l).placedOrientation=i}n.verticalPlacedTextSymbolIndex&&(e.text.placedSymbolArray.get(n.verticalPlacedTextSymbolIndex).placedOrientation=a)},Ae.prototype.commit=function(t){this.commitTime=t,this.zoomAtLastRecencyCheck=this.transform.zoom;var e=this.prevPlacement,r=!1;this.prevZoomAdjustment=e?e.zoomAdjustment(this.transform.zoom):0;var n=e?e.symbolFadeChange(t):1,i=e?e.opacities:{},a=e?e.variableOffsets:{},o=e?e.placedOrientations:{};for(var s in this.placements){var l=this.placements[s],u=i[s];u?(this.opacities[s]=new me(u,n,l.text,l.icon),r=r||l.text!==u.text.placed||l.icon!==u.icon.placed):(this.opacities[s]=new me(null,n,l.text,l.icon,l.skipFade),r=r||l.text||l.icon)}for(var c in i){var f=i[c];if(!this.opacities[c]){var h=new me(f,n,!1,!1);h.isHidden()||(this.opacities[c]=h,r=r||f.text.placed||f.icon.placed)}}for(var p in a)this.variableOffsets[p]||!this.opacities[p]||this.opacities[p].isHidden()||(this.variableOffsets[p]=a[p]);for(var d in o)this.placedOrientations[d]||!this.opacities[d]||this.opacities[d].isHidden()||(this.placedOrientations[d]=o[d]);r?this.lastPlacementChangeTime=t:"number"!=typeof this.lastPlacementChangeTime&&(this.lastPlacementChangeTime=e?e.lastPlacementChangeTime:t)},Ae.prototype.updateLayerOpacities=function(t,e){for(var r={},n=0,i=e;n<i.length;n+=1){var a=i[n],o=a.getBucket(t);o&&a.latestFeatureIndex&&t.id===o.layerIds[0]&&this.updateBucketOpacities(o,r,a.collisionBoxArray)}},Ae.prototype.updateBucketOpacities=function(e,r,n){var i=this;e.hasTextData()&&e.text.opacityVertexArray.clear(),e.hasIconData()&&e.icon.opacityVertexArray.clear(),e.hasIconCollisionBoxData()&&e.iconCollisionBox.collisionVertexArray.clear(),e.hasTextCollisionBoxData()&&e.textCollisionBox.collisionVertexArray.clear();var a=e.layers[0].layout,o=new me(null,0,!1,!1,!0),s=a.get("text-allow-overlap"),l=a.get("icon-allow-overlap"),u=a.get("text-variable-anchor"),c="map"===a.get("text-rotation-alignment"),f="map"===a.get("text-pitch-alignment"),h="none"!==a.get("icon-text-fit"),p=new me(null,0,s&&(l||!e.hasIconData()||a.get("icon-optional")),l&&(s||!e.hasTextData()||a.get("text-optional")),!0);!e.collisionArrays&&n&&(e.hasIconCollisionBoxData()||e.hasTextCollisionBoxData())&&e.deserializeCollisionBoxes(n);for(var d=function(t,e,r){for(var n=0;n<e/4;n++)t.opacityVertexArray.emplaceBack(r)},v=function(n){var a=e.symbolInstances.get(n),s=a.numHorizontalGlyphVertices,l=a.numVerticalGlyphVertices,v=a.crossTileID,g=r[v],y=i.opacities[v];g?y=o:y||(y=p,i.opacities[v]=y),r[v]=!0;var m=s>0||l>0,x=a.numIconVertices>0,b=i.placedOrientations[a.crossTileID],_=b===t.WritingMode.vertical,w=b===t.WritingMode.horizontal||b===t.WritingMode.horizontalOnly;if(m){var T=De(y.text),k=_?ze:T;d(e.text,s,k);var A=w?ze:T;d(e.text,l,A);var M=y.text.isHidden();[a.rightJustifiedTextSymbolIndex,a.centerJustifiedTextSymbolIndex,a.leftJustifiedTextSymbolIndex].forEach((function(t){t>=0&&(e.text.placedSymbolArray.get(t).hidden=M||_?1:0)})),a.verticalPlacedTextSymbolIndex>=0&&(e.text.placedSymbolArray.get(a.verticalPlacedTextSymbolIndex).hidden=M||w?1:0);var S=i.variableOffsets[a.crossTileID];S&&i.markUsedJustification(e,S.anchor,a,b);var E=i.placedOrientations[a.crossTileID];E&&(i.markUsedJustification(e,"left",a,E),i.markUsedOrientation(e,E,a))}if(x){var L=De(y.icon),C=!(h&&a.verticalPlacedIconSymbolIndex&&_);if(a.placedIconSymbolIndex>=0){var P=C?L:ze;d(e.icon,a.numIconVertices,P),e.icon.placedSymbolArray.get(a.placedIconSymbolIndex).hidden=y.icon.isHidden()}if(a.verticalPlacedIconSymbolIndex>=0){var O=C?ze:L;d(e.icon,a.numVerticalIconVertices,O),e.icon.placedSymbolArray.get(a.verticalPlacedIconSymbolIndex).hidden=y.icon.isHidden()}}if(e.hasIconCollisionBoxData()||e.hasTextCollisionBoxData()){var I=e.collisionArrays[n];if(I){var D=new t.Point(0,0);if(I.textBox||I.verticalTextBox){var z=!0;if(u){var R=i.variableOffsets[v];R?(D=Te(R.anchor,R.width,R.height,R.textOffset,R.textBoxScale),c&&D._rotate(f?i.transform.angle:-i.transform.angle)):z=!1}I.textBox&&Me(e.textCollisionBox.collisionVertexArray,y.text.placed,!z||_,D.x,D.y),I.verticalTextBox&&Me(e.textCollisionBox.collisionVertexArray,y.text.placed,!z||w,D.x,D.y)}var F=Boolean(!w&&I.verticalIconBox);I.iconBox&&Me(e.iconCollisionBox.collisionVertexArray,y.icon.placed,F,h?D.x:0,h?D.y:0),I.verticalIconBox&&Me(e.iconCollisionBox.collisionVertexArray,y.icon.placed,!F,h?D.x:0,h?D.y:0)}}},g=0;g<e.symbolInstances.length;g++)v(g);if(e.sortFeatures(this.transform.angle),this.retainedQueryData[e.bucketInstanceId]&&(this.retainedQueryData[e.bucketInstanceId].featureSortOrder=e.featureSortOrder),e.hasTextData()&&e.text.opacityVertexBuffer&&e.text.opacityVertexBuffer.updateData(e.text.opacityVertexArray),e.hasIconData()&&e.icon.opacityVertexBuffer&&e.icon.opacityVertexBuffer.updateData(e.icon.opacityVertexArray),e.hasIconCollisionBoxData()&&e.iconCollisionBox.collisionVertexBuffer&&e.iconCollisionBox.collisionVertexBuffer.updateData(e.iconCollisionBox.collisionVertexArray),e.hasTextCollisionBoxData()&&e.textCollisionBox.collisionVertexBuffer&&e.textCollisionBox.collisionVertexBuffer.updateData(e.textCollisionBox.collisionVertexArray),e.bucketInstanceId in this.collisionCircleArrays){var y=this.collisionCircleArrays[e.bucketInstanceId];e.placementInvProjMatrix=y.invProjMatrix,e.placementViewportMatrix=y.viewportMatrix,e.collisionCircleArray=y.circles,delete this.collisionCircleArrays[e.bucketInstanceId]}},Ae.prototype.symbolFadeChange=function(t){return 0===this.fadeDuration?1:(t-this.commitTime)/this.fadeDuration+this.prevZoomAdjustment},Ae.prototype.zoomAdjustment=function(t){return Math.max(0,(this.transform.zoom-t)/1.5)},Ae.prototype.hasTransitions=function(t){return this.stale||t-this.lastPlacementChangeTime<this.fadeDuration},Ae.prototype.stillRecent=function(t,e){var r=this.zoomAtLastRecencyCheck===e?1-this.zoomAdjustment(e):1;return this.zoomAtLastRecencyCheck=e,this.commitTime+this.fadeDuration*r>t},Ae.prototype.setStale=function(){this.stale=!0};var Se=Math.pow(2,25),Ee=Math.pow(2,24),Le=Math.pow(2,17),Ce=Math.pow(2,16),Pe=Math.pow(2,9),Oe=Math.pow(2,8),Ie=Math.pow(2,1);function De(t){if(0===t.opacity&&!t.placed)return 0;if(1===t.opacity&&t.placed)return 4294967295;var e=t.placed?1:0,r=Math.floor(127*t.opacity);return r*Se+e*Ee+r*Le+e*Ce+r*Pe+e*Oe+r*Ie+e}var ze=0,Re=function(t){this._sortAcrossTiles="viewport-y"!==t.layout.get("symbol-z-order")&&void 0!==t.layout.get("symbol-sort-key").constantOr(1),this._currentTileIndex=0,this._currentPartIndex=0,this._seenCrossTileIDs={},this._bucketParts=[]};Re.prototype.continuePlacement=function(t,e,r,n,i){for(var a=this._bucketParts;this._currentTileIndex<t.length;){var o=t[this._currentTileIndex];if(e.getBucketParts(a,n,o,this._sortAcrossTiles),this._currentTileIndex++,i())return!0}for(this._sortAcrossTiles&&(this._sortAcrossTiles=!1,a.sort((function(t,e){return t.sortKey-e.sortKey})));this._currentPartIndex<a.length;){var s=a[this._currentPartIndex];if(e.placeLayerBucketPart(s,this._seenCrossTileIDs,r),this._currentPartIndex++,i())return!0}return!1};var Fe=function(t,e,r,n,i,a,o){this.placement=new Ae(t,i,a,o),this._currentPlacementIndex=e.length-1,this._forceFullPlacement=r,this._showCollisionBoxes=n,this._done=!1};Fe.prototype.isDone=function(){return this._done},Fe.prototype.continuePlacement=function(e,r,n){for(var i=this,a=t.browser.now(),o=function(){var e=t.browser.now()-a;return!i._forceFullPlacement&&e>2};this._currentPlacementIndex>=0;){var s=r[e[this._currentPlacementIndex]],l=this.placement.collisionIndex.transform.zoom;if("symbol"===s.type&&(!s.minzoom||s.minzoom<=l)&&(!s.maxzoom||s.maxzoom>l)){if(this._inProgressLayer||(this._inProgressLayer=new Re(s)),this._inProgressLayer.continuePlacement(n[s.source],this.placement,this._showCollisionBoxes,s,o))return;delete this._inProgressLayer}this._currentPlacementIndex--}this._done=!0},Fe.prototype.commit=function(t){return this.placement.commit(t),this.placement};var Be=512/t.EXTENT/2,Ne=function(t,e,r){this.tileID=t,this.indexedSymbolInstances={},this.bucketInstanceId=r;for(var n=0;n<e.length;n++){var i=e.get(n),a=i.key;this.indexedSymbolInstances[a]||(this.indexedSymbolInstances[a]=[]),this.indexedSymbolInstances[a].push({crossTileID:i.crossTileID,coord:this.getScaledCoordinates(i,t)})}};Ne.prototype.getScaledCoordinates=function(e,r){var n=r.canonical.z-this.tileID.canonical.z,i=Be/Math.pow(2,n);return{x:Math.floor((r.canonical.x*t.EXTENT+e.anchorX)*i),y:Math.floor((r.canonical.y*t.EXTENT+e.anchorY)*i)}},Ne.prototype.findMatches=function(t,e,r){for(var n=this.tileID.canonical.z<e.canonical.z?1:Math.pow(2,this.tileID.canonical.z-e.canonical.z),i=0;i<t.length;i++){var a=t.get(i);if(!a.crossTileID){var o=this.indexedSymbolInstances[a.key];if(o)for(var s=this.getScaledCoordinates(a,e),l=0,u=o;l<u.length;l+=1){var c=u[l];if(Math.abs(c.coord.x-s.x)<=n&&Math.abs(c.coord.y-s.y)<=n&&!r[c.crossTileID]){r[c.crossTileID]=!0,a.crossTileID=c.crossTileID;break}}}}};var je=function(){this.maxCrossTileID=0};je.prototype.generate=function(){return++this.maxCrossTileID};var Ue=function(){this.indexes={},this.usedCrossTileIDs={},this.lng=0};Ue.prototype.handleWrapJump=function(t){var e=Math.round((t-this.lng)/360);if(0!==e)for(var r in this.indexes){var n=this.indexes[r],i={};for(var a in n){var o=n[a];o.tileID=o.tileID.unwrapTo(o.tileID.wrap+e),i[o.tileID.key]=o}this.indexes[r]=i}this.lng=t},Ue.prototype.addBucket=function(t,e,r){if(this.indexes[t.overscaledZ]&&this.indexes[t.overscaledZ][t.key]){if(this.indexes[t.overscaledZ][t.key].bucketInstanceId===e.bucketInstanceId)return!1;this.removeBucketCrossTileIDs(t.overscaledZ,this.indexes[t.overscaledZ][t.key])}for(var n=0;n<e.symbolInstances.length;n++)e.symbolInstances.get(n).crossTileID=0;this.usedCrossTileIDs[t.overscaledZ]||(this.usedCrossTileIDs[t.overscaledZ]={});var i=this.usedCrossTileIDs[t.overscaledZ];for(var a in this.indexes){var o=this.indexes[a];if(Number(a)>t.overscaledZ)for(var s in o){var l=o[s];l.tileID.isChildOf(t)&&l.findMatches(e.symbolInstances,t,i)}else{var u=o[t.scaledTo(Number(a)).key];u&&u.findMatches(e.symbolInstances,t,i)}}for(var c=0;c<e.symbolInstances.length;c++){var f=e.symbolInstances.get(c);f.crossTileID||(f.crossTileID=r.generate(),i[f.crossTileID]=!0)}return void 0===this.indexes[t.overscaledZ]&&(this.indexes[t.overscaledZ]={}),this.indexes[t.overscaledZ][t.key]=new Ne(t,e.symbolInstances,e.bucketInstanceId),!0},Ue.prototype.removeBucketCrossTileIDs=function(t,e){for(var r in e.indexedSymbolInstances)for(var n=0,i=e.indexedSymbolInstances[r];n<i.length;n+=1){var a=i[n];delete this.usedCrossTileIDs[t][a.crossTileID]}},Ue.prototype.removeStaleBuckets=function(t){var e=!1;for(var r in this.indexes){var n=this.indexes[r];for(var i in n)t[n[i].bucketInstanceId]||(this.removeBucketCrossTileIDs(r,n[i]),delete n[i],e=!0)}return e};var Ve=function(){this.layerIndexes={},this.crossTileIDs=new je,this.maxBucketInstanceId=0,this.bucketsInCurrentPlacement={}};Ve.prototype.addLayer=function(t,e,r){var n=this.layerIndexes[t.id];void 0===n&&(n=this.layerIndexes[t.id]=new Ue);var i=!1,a={};n.handleWrapJump(r);for(var o=0,s=e;o<s.length;o+=1){var l=s[o],u=l.getBucket(t);u&&t.id===u.layerIds[0]&&(u.bucketInstanceId||(u.bucketInstanceId=++this.maxBucketInstanceId),n.addBucket(l.tileID,u,this.crossTileIDs)&&(i=!0),a[u.bucketInstanceId]=!0)}return n.removeStaleBuckets(a)&&(i=!0),i},Ve.prototype.pruneUnusedLayers=function(t){var e={};for(var r in t.forEach((function(t){e[t]=!0})),this.layerIndexes)e[r]||delete this.layerIndexes[r]};var He=function(e,r){return t.emitValidationErrors(e,r&&r.filter((function(t){return"source.canvas"!==t.identifier})))},qe=t.pick(Ht,["addLayer","removeLayer","setPaintProperty","setLayoutProperty","setFilter","addSource","removeSource","setLayerZoomRange","setLight","setTransition","setGeoJSONSourceData"]),Ge=t.pick(Ht,["setCenter","setZoom","setBearing","setPitch"]),Ze=function(){var e={},r=t.styleSpec.$version;for(var n in t.styleSpec.$root){var i=t.styleSpec.$root[n];if(i.required){var a;null!=(a="version"===n?r:"array"===i.type?[]:{})&&(e[n]=a)}}return e}(),Ye=function(e){function r(n,i){var a=this;void 0===i&&(i={}),e.call(this),this.map=n,this.dispatcher=new A(jt(),this),this.imageManager=new h,this.imageManager.setEventedParent(this),this.glyphManager=new x(n._requestManager,i.localIdeographFontFamily),this.lineAtlas=new k(256,512),this.crossTileSymbolIndex=new Ve,this._layers={},this._serializedLayers={},this._order=[],this.sourceCaches={},this.zoomHistory=new t.ZoomHistory,this._loaded=!1,this._availableImages=[],this._resetUpdates(),this.dispatcher.broadcast("setReferrer",t.getReferrer());var o=this;this._rtlTextPluginCallback=r.registerForPluginStateChange((function(e){var r={pluginStatus:e.pluginStatus,pluginURL:e.pluginURL};o.dispatcher.broadcast("syncRTLPluginState",r,(function(e,r){if(t.triggerPluginCompletionEvent(e),r&&r.every((function(t){return t})))for(var n in o.sourceCaches)o.sourceCaches[n].reload()}))})),this.on("data",(function(t){if("source"===t.dataType&&"metadata"===t.sourceDataType){var e=a.sourceCaches[t.sourceId];if(e){var r=e.getSource();if(r&&r.vectorLayerIds)for(var n in a._layers){var i=a._layers[n];i.source===r.id&&a._validateLayer(i)}}}}))}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.loadURL=function(e,r){var n=this;void 0===r&&(r={}),this.fire(new t.Event("dataloading",{dataType:"style"}));var i="boolean"==typeof r.validate?r.validate:!t.isMapboxURL(e);e=this.map._requestManager.normalizeStyleURL(e,r.accessToken);var a=this.map._requestManager.transformRequest(e,t.ResourceType.Style);this._request=t.getJSON(a,(function(e,r){n._request=null,e?n.fire(new t.ErrorEvent(e)):r&&n._load(r,i)}))},r.prototype.loadJSON=function(e,r){var n=this;void 0===r&&(r={}),this.fire(new t.Event("dataloading",{dataType:"style"})),this._request=t.browser.frame((function(){n._request=null,n._load(e,!1!==r.validate)}))},r.prototype.loadEmpty=function(){this.fire(new t.Event("dataloading",{dataType:"style"})),this._load(Ze,!1)},r.prototype._load=function(e,r){if(!r||!He(this,t.validateStyle(e))){for(var n in this._loaded=!0,this.stylesheet=e,e.sources)this.addSource(n,e.sources[n],{validate:!1});e.sprite?this._loadSprite(e.sprite):this.imageManager.setLoaded(!0),this.glyphManager.setURL(e.glyphs);var i=Vt(this.stylesheet.layers);this._order=i.map((function(t){return t.id})),this._layers={},this._serializedLayers={};for(var a=0,o=i;a<o.length;a+=1){var s=o[a];(s=t.createStyleLayer(s)).setEventedParent(this,{layer:{id:s.id}}),this._layers[s.id]=s,this._serializedLayers[s.id]=s.serialize()}this.dispatcher.broadcast("setLayers",this._serializeLayers(this._order)),this.light=new T(this.stylesheet.light),this.fire(new t.Event("data",{dataType:"style"})),this.fire(new t.Event("style.load"))}},r.prototype._loadSprite=function(e){var r=this;this._spriteRequest=function(e,r,n){var i,a,o,s=t.browser.devicePixelRatio>1?"@2x":"",l=t.getJSON(r.transformRequest(r.normalizeSpriteURL(e,s,".json"),t.ResourceType.SpriteJSON),(function(t,e){l=null,o||(o=t,i=e,c())})),u=t.getImage(r.transformRequest(r.normalizeSpriteURL(e,s,".png"),t.ResourceType.SpriteImage),(function(t,e){u=null,o||(o=t,a=e,c())}));function c(){if(o)n(o);else if(i&&a){var e=t.browser.getImageData(a),r={};for(var s in i){var l=i[s],u=l.width,c=l.height,f=l.x,h=l.y,p=l.sdf,d=l.pixelRatio,v=l.stretchX,g=l.stretchY,y=l.content,m=new t.RGBAImage({width:u,height:c});t.RGBAImage.copy(e,m,{x:f,y:h},{x:0,y:0},{width:u,height:c}),r[s]={data:m,pixelRatio:d,sdf:p,stretchX:v,stretchY:g,content:y}}n(null,r)}}return{cancel:function(){l&&(l.cancel(),l=null),u&&(u.cancel(),u=null)}}}(e,this.map._requestManager,(function(e,n){if(r._spriteRequest=null,e)r.fire(new t.ErrorEvent(e));else if(n)for(var i in n)r.imageManager.addImage(i,n[i]);r.imageManager.setLoaded(!0),r._availableImages=r.imageManager.listImages(),r.dispatcher.broadcast("setImages",r._availableImages),r.fire(new t.Event("data",{dataType:"style"}))}))},r.prototype._validateLayer=function(e){var r=this.sourceCaches[e.source];if(r){var n=e.sourceLayer;if(n){var i=r.getSource();("geojson"===i.type||i.vectorLayerIds&&-1===i.vectorLayerIds.indexOf(n))&&this.fire(new t.ErrorEvent(new Error('Source layer "'+n+'" does not exist on source "'+i.id+'" as specified by style layer "'+e.id+'"')))}}},r.prototype.loaded=function(){if(!this._loaded)return!1;if(Object.keys(this._updatedSources).length)return!1;for(var t in this.sourceCaches)if(!this.sourceCaches[t].loaded())return!1;return!!this.imageManager.isLoaded()},r.prototype._serializeLayers=function(t){for(var e=[],r=0,n=t;r<n.length;r+=1){var i=n[r],a=this._layers[i];"custom"!==a.type&&e.push(a.serialize())}return e},r.prototype.hasTransitions=function(){if(this.light&&this.light.hasTransition())return!0;for(var t in this.sourceCaches)if(this.sourceCaches[t].hasTransition())return!0;for(var e in this._layers)if(this._layers[e].hasTransition())return!0;return!1},r.prototype._checkLoaded=function(){if(!this._loaded)throw new Error("Style is not done loading")},r.prototype.update=function(e){if(this._loaded){var r=this._changed;if(this._changed){var n=Object.keys(this._updatedLayers),i=Object.keys(this._removedLayers);for(var a in(n.length||i.length)&&this._updateWorkerLayers(n,i),this._updatedSources){var o=this._updatedSources[a];"reload"===o?this._reloadSource(a):"clear"===o&&this._clearSource(a)}for(var s in this._updateTilesForChangedImages(),this._updatedPaintProps)this._layers[s].updateTransitions(e);this.light.updateTransitions(e),this._resetUpdates()}for(var l in this.sourceCaches)this.sourceCaches[l].used=!1;for(var u=0,c=this._order;u<c.length;u+=1){var f=c[u],h=this._layers[f];h.recalculate(e,this._availableImages),!h.isHidden(e.zoom)&&h.source&&(this.sourceCaches[h.source].used=!0)}this.light.recalculate(e),this.z=e.zoom,r&&this.fire(new t.Event("data",{dataType:"style"}))}},r.prototype._updateTilesForChangedImages=function(){var t=Object.keys(this._changedImages);if(t.length){for(var e in this.sourceCaches)this.sourceCaches[e].reloadTilesForDependencies(["icons","patterns"],t);this._changedImages={}}},r.prototype._updateWorkerLayers=function(t,e){this.dispatcher.broadcast("updateLayers",{layers:this._serializeLayers(t),removedIds:e})},r.prototype._resetUpdates=function(){this._changed=!1,this._updatedLayers={},this._removedLayers={},this._updatedSources={},this._updatedPaintProps={},this._changedImages={}},r.prototype.setState=function(e){var r=this;if(this._checkLoaded(),He(this,t.validateStyle(e)))return!1;(e=t.clone$1(e)).layers=Vt(e.layers);var n=Kt(this.serialize(),e).filter((function(t){return!(t.command in Ge)}));if(0===n.length)return!1;var i=n.filter((function(t){return!(t.command in qe)}));if(i.length>0)throw new Error("Unimplemented: "+i.map((function(t){return t.command})).join(", ")+".");return n.forEach((function(t){"setTransition"!==t.command&&r[t.command].apply(r,t.args)})),this.stylesheet=e,!0},r.prototype.addImage=function(e,r){if(this.getImage(e))return this.fire(new t.ErrorEvent(new Error("An image with this name already exists.")));this.imageManager.addImage(e,r),this._availableImages=this.imageManager.listImages(),this._changedImages[e]=!0,this._changed=!0,this.fire(new t.Event("data",{dataType:"style"}))},r.prototype.updateImage=function(t,e){this.imageManager.updateImage(t,e)},r.prototype.getImage=function(t){return this.imageManager.getImage(t)},r.prototype.removeImage=function(e){if(!this.getImage(e))return this.fire(new t.ErrorEvent(new Error("No image with this name exists.")));this.imageManager.removeImage(e),this._availableImages=this.imageManager.listImages(),this._changedImages[e]=!0,this._changed=!0,this.fire(new t.Event("data",{dataType:"style"}))},r.prototype.listImages=function(){return this._checkLoaded(),this.imageManager.listImages()},r.prototype.addSource=function(e,r,n){var i=this;if(void 0===n&&(n={}),this._checkLoaded(),void 0!==this.sourceCaches[e])throw new Error("There is already a source with this ID");if(!r.type)throw new Error("The type property must be defined, but the only the following properties were given: "+Object.keys(r).join(", ")+".");if(!(["vector","raster","geojson","video","image"].indexOf(r.type)>=0&&this._validate(t.validateStyle.source,"sources."+e,r,null,n))){this.map&&this.map._collectResourceTiming&&(r.collectResourceTiming=!0);var a=this.sourceCaches[e]=new Ot(e,r,this.dispatcher);a.style=this,a.setEventedParent(this,(function(){return{isSourceLoaded:i.loaded(),source:a.serialize(),sourceId:e}})),a.onAdd(this.map),this._changed=!0}},r.prototype.removeSource=function(e){if(this._checkLoaded(),void 0===this.sourceCaches[e])throw new Error("There is no source with this ID");for(var r in this._layers)if(this._layers[r].source===e)return this.fire(new t.ErrorEvent(new Error('Source "'+e+'" cannot be removed while layer "'+r+'" is using it.')));var n=this.sourceCaches[e];delete this.sourceCaches[e],delete this._updatedSources[e],n.fire(new t.Event("data",{sourceDataType:"metadata",dataType:"source",sourceId:e})),n.setEventedParent(null),n.clearTiles(),n.onRemove&&n.onRemove(this.map),this._changed=!0},r.prototype.setGeoJSONSourceData=function(t,e){this._checkLoaded(),this.sourceCaches[t].getSource().setData(e),this._changed=!0},r.prototype.getSource=function(t){return this.sourceCaches[t]&&this.sourceCaches[t].getSource()},r.prototype.addLayer=function(e,r,n){void 0===n&&(n={}),this._checkLoaded();var i=e.id;if(this.getLayer(i))this.fire(new t.ErrorEvent(new Error('Layer with id "'+i+'" already exists on this map')));else{var a;if("custom"===e.type){if(He(this,t.validateCustomStyleLayer(e)))return;a=t.createStyleLayer(e)}else{if("object"==typeof e.source&&(this.addSource(i,e.source),e=t.clone$1(e),e=t.extend(e,{source:i})),this._validate(t.validateStyle.layer,"layers."+i,e,{arrayIndex:-1},n))return;a=t.createStyleLayer(e),this._validateLayer(a),a.setEventedParent(this,{layer:{id:i}}),this._serializedLayers[a.id]=a.serialize()}var o=r?this._order.indexOf(r):this._order.length;if(r&&-1===o)this.fire(new t.ErrorEvent(new Error('Layer with id "'+r+'" does not exist on this map.')));else{if(this._order.splice(o,0,i),this._layerOrderChanged=!0,this._layers[i]=a,this._removedLayers[i]&&a.source&&"custom"!==a.type){var s=this._removedLayers[i];delete this._removedLayers[i],s.type!==a.type?this._updatedSources[a.source]="clear":(this._updatedSources[a.source]="reload",this.sourceCaches[a.source].pause())}this._updateLayer(a),a.onAdd&&a.onAdd(this.map)}}},r.prototype.moveLayer=function(e,r){if(this._checkLoaded(),this._changed=!0,this._layers[e]){if(e!==r){var n=this._order.indexOf(e);this._order.splice(n,1);var i=r?this._order.indexOf(r):this._order.length;r&&-1===i?this.fire(new t.ErrorEvent(new Error('Layer with id "'+r+'" does not exist on this map.'))):(this._order.splice(i,0,e),this._layerOrderChanged=!0)}}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be moved.")))},r.prototype.removeLayer=function(e){this._checkLoaded();var r=this._layers[e];if(r){r.setEventedParent(null);var n=this._order.indexOf(e);this._order.splice(n,1),this._layerOrderChanged=!0,this._changed=!0,this._removedLayers[e]=r,delete this._layers[e],delete this._serializedLayers[e],delete this._updatedLayers[e],delete this._updatedPaintProps[e],r.onRemove&&r.onRemove(this.map)}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be removed.")))},r.prototype.getLayer=function(t){return this._layers[t]},r.prototype.hasLayer=function(t){return t in this._layers},r.prototype.setLayerZoomRange=function(e,r,n){this._checkLoaded();var i=this.getLayer(e);i?i.minzoom===r&&i.maxzoom===n||(null!=r&&(i.minzoom=r),null!=n&&(i.maxzoom=n),this._updateLayer(i)):this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot have zoom extent.")))},r.prototype.setFilter=function(e,r,n){void 0===n&&(n={}),this._checkLoaded();var i=this.getLayer(e);if(i){if(!t.deepEqual(i.filter,r))return null==r?(i.filter=void 0,void this._updateLayer(i)):void(this._validate(t.validateStyle.filter,"layers."+i.id+".filter",r,null,n)||(i.filter=t.clone$1(r),this._updateLayer(i)))}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be filtered.")))},r.prototype.getFilter=function(e){return t.clone$1(this.getLayer(e).filter)},r.prototype.setLayoutProperty=function(e,r,n,i){void 0===i&&(i={}),this._checkLoaded();var a=this.getLayer(e);a?t.deepEqual(a.getLayoutProperty(r),n)||(a.setLayoutProperty(r,n,i),this._updateLayer(a)):this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be styled.")))},r.prototype.getLayoutProperty=function(e,r){var n=this.getLayer(e);if(n)return n.getLayoutProperty(r);this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style.")))},r.prototype.setPaintProperty=function(e,r,n,i){void 0===i&&(i={}),this._checkLoaded();var a=this.getLayer(e);a?t.deepEqual(a.getPaintProperty(r),n)||(a.setPaintProperty(r,n,i)&&this._updateLayer(a),this._changed=!0,this._updatedPaintProps[e]=!0):this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be styled.")))},r.prototype.getPaintProperty=function(t,e){return this.getLayer(t).getPaintProperty(e)},r.prototype.setFeatureState=function(e,r){this._checkLoaded();var n=e.source,i=e.sourceLayer,a=this.sourceCaches[n];if(void 0!==a){var o=a.getSource().type;"geojson"===o&&i?this.fire(new t.ErrorEvent(new Error("GeoJSON sources cannot have a sourceLayer parameter."))):"vector"!==o||i?(void 0===e.id&&this.fire(new t.ErrorEvent(new Error("The feature id parameter must be provided."))),a.setFeatureState(i,e.id,r)):this.fire(new t.ErrorEvent(new Error("The sourceLayer parameter must be provided for vector source types.")))}else this.fire(new t.ErrorEvent(new Error("The source '"+n+"' does not exist in the map's style.")))},r.prototype.removeFeatureState=function(e,r){this._checkLoaded();var n=e.source,i=this.sourceCaches[n];if(void 0!==i){var a=i.getSource().type,o="vector"===a?e.sourceLayer:void 0;"vector"!==a||o?r&&"string"!=typeof e.id&&"number"!=typeof e.id?this.fire(new t.ErrorEvent(new Error("A feature id is requred to remove its specific state property."))):i.removeFeatureState(o,e.id,r):this.fire(new t.ErrorEvent(new Error("The sourceLayer parameter must be provided for vector source types.")))}else this.fire(new t.ErrorEvent(new Error("The source '"+n+"' does not exist in the map's style.")))},r.prototype.getFeatureState=function(e){this._checkLoaded();var r=e.source,n=e.sourceLayer,i=this.sourceCaches[r];if(void 0!==i){if("vector"!==i.getSource().type||n)return void 0===e.id&&this.fire(new t.ErrorEvent(new Error("The feature id parameter must be provided."))),i.getFeatureState(n,e.id);this.fire(new t.ErrorEvent(new Error("The sourceLayer parameter must be provided for vector source types.")))}else this.fire(new t.ErrorEvent(new Error("The source '"+r+"' does not exist in the map's style.")))},r.prototype.getTransition=function(){return t.extend({duration:300,delay:0},this.stylesheet&&this.stylesheet.transition)},r.prototype.serialize=function(){return t.filterObject({version:this.stylesheet.version,name:this.stylesheet.name,metadata:this.stylesheet.metadata,light:this.stylesheet.light,center:this.stylesheet.center,zoom:this.stylesheet.zoom,bearing:this.stylesheet.bearing,pitch:this.stylesheet.pitch,sprite:this.stylesheet.sprite,glyphs:this.stylesheet.glyphs,transition:this.stylesheet.transition,sources:t.mapObject(this.sourceCaches,(function(t){return t.serialize()})),layers:this._serializeLayers(this._order)},(function(t){return void 0!==t}))},r.prototype._updateLayer=function(t){this._updatedLayers[t.id]=!0,t.source&&!this._updatedSources[t.source]&&"raster"!==this.sourceCaches[t.source].getSource().type&&(this._updatedSources[t.source]="reload",this.sourceCaches[t.source].pause()),this._changed=!0},r.prototype._flattenAndSortRenderedFeatures=function(t){for(var e=this,r=function(t){return"fill-extrusion"===e._layers[t].type},n={},i=[],a=this._order.length-1;a>=0;a--){var o=this._order[a];if(r(o)){n[o]=a;for(var s=0,l=t;s<l.length;s+=1){var u=l[s][o];if(u)for(var c=0,f=u;c<f.length;c+=1){var h=f[c];i.push(h)}}}}i.sort((function(t,e){return e.intersectionZ-t.intersectionZ}));for(var p=[],d=this._order.length-1;d>=0;d--){var v=this._order[d];if(r(v))for(var g=i.length-1;g>=0;g--){var y=i[g].feature;if(n[y.layer.id]<d)break;p.push(y),i.pop()}else for(var m=0,x=t;m<x.length;m+=1){var b=x[m][v];if(b)for(var _=0,w=b;_<w.length;_+=1){var T=w[_];p.push(T.feature)}}}return p},r.prototype.queryRenderedFeatures=function(e,r,n){r&&r.filter&&this._validate(t.validateStyle.filter,"queryRenderedFeatures.filter",r.filter,null,r);var i={};if(r&&r.layers){if(!Array.isArray(r.layers))return this.fire(new t.ErrorEvent(new Error("parameters.layers must be an Array."))),[];for(var a=0,o=r.layers;a<o.length;a+=1){var s=o[a],l=this._layers[s];if(!l)return this.fire(new t.ErrorEvent(new Error("The layer '"+s+"' does not exist in the map's style and cannot be queried for features."))),[];i[l.source]=!0}}var u=[];for(var c in r.availableImages=this._availableImages,this.sourceCaches)r.layers&&!i[c]||u.push(B(this.sourceCaches[c],this._layers,this._serializedLayers,e,r,n));return this.placement&&u.push(function(t,e,r,n,i,a,o){for(var s={},l=a.queryRenderedSymbols(n),u=[],c=0,f=Object.keys(l).map(Number);c<f.length;c+=1){var h=f[c];u.push(o[h])}u.sort(N);for(var p=function(){var r=v[d],n=r.featureIndex.lookupSymbolFeatures(l[r.bucketInstanceId],e,r.bucketIndex,r.sourceLayerIndex,i.filter,i.layers,i.availableImages,t);for(var a in n){var o=s[a]=s[a]||[],u=n[a];u.sort((function(t,e){var n=r.featureSortOrder;if(n){var i=n.indexOf(t.featureIndex);return n.indexOf(e.featureIndex)-i}return e.featureIndex-t.featureIndex}));for(var c=0,f=u;c<f.length;c+=1){var h=f[c];o.push(h)}}},d=0,v=u;d<v.length;d+=1)p();var g=function(e){s[e].forEach((function(n){var i=n.feature,a=t[e],o=r[a.source].getFeatureState(i.layer["source-layer"],i.id);i.source=i.layer.source,i.layer["source-layer"]&&(i.sourceLayer=i.layer["source-layer"]),i.state=o}))};for(var y in s)g(y);return s}(this._layers,this._serializedLayers,this.sourceCaches,e,r,this.placement.collisionIndex,this.placement.retainedQueryData)),this._flattenAndSortRenderedFeatures(u)},r.prototype.querySourceFeatures=function(e,r){r&&r.filter&&this._validate(t.validateStyle.filter,"querySourceFeatures.filter",r.filter,null,r);var n=this.sourceCaches[e];return n?function(t,e){for(var r=t.getRenderableIds().map((function(e){return t.getTileByID(e)})),n=[],i={},a=0;a<r.length;a++){var o=r[a],s=o.tileID.canonical.key;i[s]||(i[s]=!0,o.querySourceFeatures(n,e))}return n}(n,r):[]},r.prototype.addSourceType=function(t,e,n){return r.getSourceType(t)?n(new Error('A source type called "'+t+'" already exists.')):(r.setSourceType(t,e),e.workerSourceURL?void this.dispatcher.broadcast("loadWorkerSource",{name:t,url:e.workerSourceURL},n):n(null,null))},r.prototype.getLight=function(){return this.light.getLight()},r.prototype.setLight=function(e,r){void 0===r&&(r={}),this._checkLoaded();var n=this.light.getLight(),i=!1;for(var a in e)if(!t.deepEqual(e[a],n[a])){i=!0;break}if(i){var o={now:t.browser.now(),transition:t.extend({duration:300,delay:0},this.stylesheet.transition)};this.light.setLight(e,r),this.light.updateTransitions(o)}},r.prototype._validate=function(e,r,n,i,a){return void 0===a&&(a={}),(!a||!1!==a.validate)&&He(this,e.call(t.validateStyle,t.extend({key:r,style:this.serialize(),value:n,styleSpec:t.styleSpec},i)))},r.prototype._remove=function(){for(var e in this._request&&(this._request.cancel(),this._request=null),this._spriteRequest&&(this._spriteRequest.cancel(),this._spriteRequest=null),t.evented.off("pluginStateChange",this._rtlTextPluginCallback),this._layers)this._layers[e].setEventedParent(null);for(var r in this.sourceCaches)this.sourceCaches[r].clearTiles(),this.sourceCaches[r].setEventedParent(null);this.imageManager.setEventedParent(null),this.setEventedParent(null),this.dispatcher.remove()},r.prototype._clearSource=function(t){this.sourceCaches[t].clearTiles()},r.prototype._reloadSource=function(t){this.sourceCaches[t].resume(),this.sourceCaches[t].reload()},r.prototype._updateSources=function(t){for(var e in this.sourceCaches)this.sourceCaches[e].update(t)},r.prototype._generateCollisionBoxes=function(){for(var t in this.sourceCaches)this._reloadSource(t)},r.prototype._updatePlacement=function(e,r,n,i,a){void 0===a&&(a=!1);for(var o=!1,s=!1,l={},u=0,c=this._order;u<c.length;u+=1){var f=c[u],h=this._layers[f];if("symbol"===h.type){if(!l[h.source]){var p=this.sourceCaches[h.source];l[h.source]=p.getRenderableIds(!0).map((function(t){return p.getTileByID(t)})).sort((function(t,e){return e.tileID.overscaledZ-t.tileID.overscaledZ||(t.tileID.isLessThan(e.tileID)?-1:1)}))}var d=this.crossTileSymbolIndex.addLayer(h,l[h.source],e.center.lng);o=o||d}}if(this.crossTileSymbolIndex.pruneUnusedLayers(this._order),((a=a||this._layerOrderChanged||0===n)||!this.pauseablePlacement||this.pauseablePlacement.isDone()&&!this.placement.stillRecent(t.browser.now(),e.zoom))&&(this.pauseablePlacement=new Fe(e,this._order,a,r,n,i,this.placement),this._layerOrderChanged=!1),this.pauseablePlacement.isDone()?this.placement.setStale():(this.pauseablePlacement.continuePlacement(this._order,this._layers,l),this.pauseablePlacement.isDone()&&(this.placement=this.pauseablePlacement.commit(t.browser.now()),s=!0),o&&this.pauseablePlacement.placement.setStale()),s||o)for(var v=0,g=this._order;v<g.length;v+=1){var y=g[v],m=this._layers[y];"symbol"===m.type&&this.placement.updateLayerOpacities(m,l[m.source])}return!this.pauseablePlacement.isDone()||this.placement.hasTransitions(t.browser.now())},r.prototype._releaseSymbolFadeTiles=function(){for(var t in this.sourceCaches)this.sourceCaches[t].releaseSymbolFadeTiles()},r.prototype.getImages=function(t,e,r){this.imageManager.getImages(e.icons,r),this._updateTilesForChangedImages();var n=this.sourceCaches[e.source];n&&n.setDependencies(e.tileID.key,e.type,e.icons)},r.prototype.getGlyphs=function(t,e,r){this.glyphManager.getGlyphs(e.stacks,r)},r.prototype.getResource=function(e,r,n){return t.makeRequest(r,n)},r}(t.Evented);Ye.getSourceType=function(t){return R[t]},Ye.setSourceType=function(t,e){R[t]=e},Ye.registerForPluginStateChange=t.registerForPluginStateChange;var We=t.createLayout([{name:"a_pos",type:"Int16",components:2}]),Xe=_r("#ifdef GL_ES\nprecision mediump float;\n#else\n#if !defined(lowp)\n#define lowp\n#endif\n#if !defined(mediump)\n#define mediump\n#endif\n#if !defined(highp)\n#define highp\n#endif\n#endif","#ifdef GL_ES\nprecision highp float;\n#else\n#if !defined(lowp)\n#define lowp\n#endif\n#if !defined(mediump)\n#define mediump\n#endif\n#if !defined(highp)\n#define highp\n#endif\n#endif\nvec2 unpack_float(const float packedValue) {int packedIntValue=int(packedValue);int v0=packedIntValue/256;return vec2(v0,packedIntValue-v0*256);}vec2 unpack_opacity(const float packedOpacity) {int intOpacity=int(packedOpacity)/2;return vec2(float(intOpacity)/127.0,mod(packedOpacity,2.0));}vec4 decode_color(const vec2 encodedColor) {return vec4(unpack_float(encodedColor[0])/255.0,unpack_float(encodedColor[1])/255.0\n);}float unpack_mix_vec2(const vec2 packedValue,const float t) {return mix(packedValue[0],packedValue[1],t);}vec4 unpack_mix_color(const vec4 packedColors,const float t) {vec4 minColor=decode_color(vec2(packedColors[0],packedColors[1]));vec4 maxColor=decode_color(vec2(packedColors[2],packedColors[3]));return mix(minColor,maxColor,t);}vec2 get_pattern_pos(const vec2 pixel_coord_upper,const vec2 pixel_coord_lower,const vec2 pattern_size,const float tile_units_to_pixels,const vec2 pos) {vec2 offset=mod(mod(mod(pixel_coord_upper,pattern_size)*256.0,pattern_size)*256.0+pixel_coord_lower,pattern_size);return (tile_units_to_pixels*pos+offset)/pattern_size;}"),Je=_r("uniform vec4 u_color;uniform float u_opacity;void main() {gl_FragColor=u_color*u_opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}"),Ke=_r("uniform vec2 u_pattern_tl_a;uniform vec2 u_pattern_br_a;uniform vec2 u_pattern_tl_b;uniform vec2 u_pattern_br_b;uniform vec2 u_texsize;uniform float u_mix;uniform float u_opacity;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(u_pattern_tl_a/u_texsize,u_pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(u_pattern_tl_b/u_texsize,u_pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_mix)*u_opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_pattern_size_a;uniform vec2 u_pattern_size_b;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_scale_a;uniform float u_scale_b;uniform float u_tile_units_to_pixels;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_a*u_pattern_size_a,u_tile_units_to_pixels,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_b*u_pattern_size_b,u_tile_units_to_pixels,a_pos);}"),$e=_r("varying vec3 v_data;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define mediump float radius\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define highp vec4 stroke_color\n#pragma mapbox: define mediump float stroke_width\n#pragma mapbox: define lowp float stroke_opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize mediump float radius\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize highp vec4 stroke_color\n#pragma mapbox: initialize mediump float stroke_width\n#pragma mapbox: initialize lowp float stroke_opacity\nvec2 extrude=v_data.xy;float extrude_length=length(extrude);lowp float antialiasblur=v_data.z;float antialiased_blur=-max(blur,antialiasblur);float opacity_t=smoothstep(0.0,antialiased_blur,extrude_length-1.0);float color_t=stroke_width < 0.01 ? 0.0 : smoothstep(antialiased_blur,0.0,extrude_length-radius/(radius+stroke_width));gl_FragColor=opacity_t*mix(color*opacity,stroke_color*stroke_opacity,color_t);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform bool u_scale_with_map;uniform bool u_pitch_with_map;uniform vec2 u_extrude_scale;uniform lowp float u_device_pixel_ratio;uniform highp float u_camera_to_center_distance;attribute vec2 a_pos;varying vec3 v_data;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define mediump float radius\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define highp vec4 stroke_color\n#pragma mapbox: define mediump float stroke_width\n#pragma mapbox: define lowp float stroke_opacity\nvoid main(void) {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize mediump float radius\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize highp vec4 stroke_color\n#pragma mapbox: initialize mediump float stroke_width\n#pragma mapbox: initialize lowp float stroke_opacity\nvec2 extrude=vec2(mod(a_pos,2.0)*2.0-1.0);vec2 circle_center=floor(a_pos*0.5);if (u_pitch_with_map) {vec2 corner_position=circle_center;if (u_scale_with_map) {corner_position+=extrude*(radius+stroke_width)*u_extrude_scale;} else {vec4 projected_center=u_matrix*vec4(circle_center,0,1);corner_position+=extrude*(radius+stroke_width)*u_extrude_scale*(projected_center.w/u_camera_to_center_distance);}gl_Position=u_matrix*vec4(corner_position,0,1);} else {gl_Position=u_matrix*vec4(circle_center,0,1);if (u_scale_with_map) {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*u_camera_to_center_distance;} else {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*gl_Position.w;}}lowp float antialiasblur=1.0/u_device_pixel_ratio/(radius+stroke_width);v_data=vec3(extrude.x,extrude.y,antialiasblur);}"),Qe=_r("void main() {gl_FragColor=vec4(1.0);}","attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}"),tr=_r("uniform highp float u_intensity;varying vec2 v_extrude;\n#pragma mapbox: define highp float weight\n#define GAUSS_COEF 0.3989422804014327\nvoid main() {\n#pragma mapbox: initialize highp float weight\nfloat d=-0.5*3.0*3.0*dot(v_extrude,v_extrude);float val=weight*u_intensity*GAUSS_COEF*exp(d);gl_FragColor=vec4(val,1.0,1.0,1.0);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform float u_extrude_scale;uniform float u_opacity;uniform float u_intensity;attribute vec2 a_pos;varying vec2 v_extrude;\n#pragma mapbox: define highp float weight\n#pragma mapbox: define mediump float radius\nconst highp float ZERO=1.0/255.0/16.0;\n#define GAUSS_COEF 0.3989422804014327\nvoid main(void) {\n#pragma mapbox: initialize highp float weight\n#pragma mapbox: initialize mediump float radius\nvec2 unscaled_extrude=vec2(mod(a_pos,2.0)*2.0-1.0);float S=sqrt(-2.0*log(ZERO/weight/u_intensity/GAUSS_COEF))/3.0;v_extrude=S*unscaled_extrude;vec2 extrude=v_extrude*radius*u_extrude_scale;vec4 pos=vec4(floor(a_pos*0.5)+extrude,0,1);gl_Position=u_matrix*pos;}"),er=_r("uniform sampler2D u_image;uniform sampler2D u_color_ramp;uniform float u_opacity;varying vec2 v_pos;void main() {float t=texture2D(u_image,v_pos).r;vec4 color=texture2D(u_color_ramp,vec2(t,0.5));gl_FragColor=color*u_opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(0.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_world;attribute vec2 a_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos*u_world,0,1);v_pos.x=a_pos.x;v_pos.y=1.0-a_pos.y;}"),rr=_r("varying float v_placed;varying float v_notUsed;void main() {float alpha=0.5;gl_FragColor=vec4(1.0,0.0,0.0,1.0)*alpha;if (v_placed > 0.5) {gl_FragColor=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {gl_FragColor*=.1;}}","attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;attribute vec2 a_shift;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;void main() {vec4 projectedPoint=u_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position=u_matrix*vec4(a_pos,0.0,1.0);gl_Position.xy+=(a_extrude+a_shift)*u_extrude_scale*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;}"),nr=_r("varying float v_radius;varying vec2 v_extrude;varying float v_perspective_ratio;varying float v_collision;void main() {float alpha=0.5*min(v_perspective_ratio,1.0);float stroke_radius=0.9*max(v_perspective_ratio,1.0);float distance_to_center=length(v_extrude);float distance_to_edge=abs(distance_to_center-v_radius);float opacity_t=smoothstep(-stroke_radius,0.0,-distance_to_edge);vec4 color=mix(vec4(0.0,0.0,1.0,0.5),vec4(1.0,0.0,0.0,1.0),v_collision);gl_FragColor=color*alpha*opacity_t;}","attribute vec2 a_pos;attribute float a_radius;attribute vec2 a_flags;uniform mat4 u_matrix;uniform mat4 u_inv_matrix;uniform vec2 u_viewport_size;uniform float u_camera_to_center_distance;varying float v_radius;varying vec2 v_extrude;varying float v_perspective_ratio;varying float v_collision;vec3 toTilePosition(vec2 screenPos) {vec4 rayStart=u_inv_matrix*vec4(screenPos,-1.0,1.0);vec4 rayEnd  =u_inv_matrix*vec4(screenPos, 1.0,1.0);rayStart.xyz/=rayStart.w;rayEnd.xyz  /=rayEnd.w;highp float t=(0.0-rayStart.z)/(rayEnd.z-rayStart.z);return mix(rayStart.xyz,rayEnd.xyz,t);}void main() {vec2 quadCenterPos=a_pos;float radius=a_radius;float collision=a_flags.x;float vertexIdx=a_flags.y;vec2 quadVertexOffset=vec2(mix(-1.0,1.0,float(vertexIdx >=2.0)),mix(-1.0,1.0,float(vertexIdx >=1.0 && vertexIdx <=2.0)));vec2 quadVertexExtent=quadVertexOffset*radius;vec3 tilePos=toTilePosition(quadCenterPos);vec4 clipPos=u_matrix*vec4(tilePos,1.0);highp float camera_to_anchor_distance=clipPos.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);float padding_factor=1.2;v_radius=radius;v_extrude=quadVertexExtent*padding_factor;v_perspective_ratio=collision_perspective_ratio;v_collision=collision;gl_Position=vec4(clipPos.xyz/clipPos.w,1.0)+vec4(quadVertexExtent*padding_factor/u_viewport_size*2.0,0.0,0.0);}"),ir=_r("uniform highp vec4 u_color;uniform sampler2D u_overlay;varying vec2 v_uv;void main() {vec4 overlay_color=texture2D(u_overlay,v_uv);gl_FragColor=mix(u_color,overlay_color,overlay_color.a);}","attribute vec2 a_pos;varying vec2 v_uv;uniform mat4 u_matrix;uniform float u_overlay_scale;void main() {v_uv=a_pos/8192.0;gl_Position=u_matrix*vec4(a_pos*u_overlay_scale,0,1);}"),ar=_r("#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float opacity\ngl_FragColor=color*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","attribute vec2 a_pos;uniform mat4 u_matrix;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float opacity\ngl_Position=u_matrix*vec4(a_pos,0,1);}"),or=_r("varying vec2 v_pos;\n#pragma mapbox: define highp vec4 outline_color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 outline_color\n#pragma mapbox: initialize lowp float opacity\nfloat dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=outline_color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","attribute vec2 a_pos;uniform mat4 u_matrix;uniform vec2 u_world;varying vec2 v_pos;\n#pragma mapbox: define highp vec4 outline_color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 outline_color\n#pragma mapbox: initialize lowp float opacity\ngl_Position=u_matrix*vec4(a_pos,0,1);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}"),sr=_r("uniform vec2 u_texsize;uniform sampler2D u_image;uniform float u_fade;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);float dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=mix(color1,color2,u_fade)*alpha*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_world;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec3 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n#pragma mapbox: define lowp float pixel_ratio_from\n#pragma mapbox: define lowp float pixel_ratio_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\n#pragma mapbox: initialize lowp float pixel_ratio_from\n#pragma mapbox: initialize lowp float pixel_ratio_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;gl_Position=u_matrix*vec4(a_pos,0,1);vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,a_pos);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}"),lr=_r("uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_fade)*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec3 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n#pragma mapbox: define lowp float pixel_ratio_from\n#pragma mapbox: define lowp float pixel_ratio_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\n#pragma mapbox: initialize lowp float pixel_ratio_from\n#pragma mapbox: initialize lowp float pixel_ratio_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileZoomRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileZoomRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileZoomRatio,a_pos);}"),ur=_r("varying vec4 v_color;void main() {gl_FragColor=v_color;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;uniform float u_vertical_gradient;uniform lowp float u_opacity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec4 v_color;\n#pragma mapbox: define highp float base\n#pragma mapbox: define highp float height\n#pragma mapbox: define highp vec4 color\nvoid main() {\n#pragma mapbox: initialize highp float base\n#pragma mapbox: initialize highp float height\n#pragma mapbox: initialize highp vec4 color\nvec3 normal=a_normal_ed.xyz;base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);gl_Position=u_matrix*vec4(a_pos,t > 0.0 ? height : base,1);float colorvalue=color.r*0.2126+color.g*0.7152+color.b*0.0722;v_color=vec4(0.0,0.0,0.0,1.0);vec4 ambientlight=vec4(0.03,0.03,0.03,1.0);color+=ambientlight;float directional=clamp(dot(normal/16384.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_color.r+=clamp(color.r*directional*u_lightcolor.r,mix(0.0,0.3,1.0-u_lightcolor.r),1.0);v_color.g+=clamp(color.g*directional*u_lightcolor.g,mix(0.0,0.3,1.0-u_lightcolor.g),1.0);v_color.b+=clamp(color.b*directional*u_lightcolor.b,mix(0.0,0.3,1.0-u_lightcolor.b),1.0);v_color*=u_opacity;}"),cr=_r("uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n#pragma mapbox: define lowp float pixel_ratio_from\n#pragma mapbox: define lowp float pixel_ratio_to\nvoid main() {\n#pragma mapbox: initialize lowp float base\n#pragma mapbox: initialize lowp float height\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\n#pragma mapbox: initialize lowp float pixel_ratio_from\n#pragma mapbox: initialize lowp float pixel_ratio_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);vec4 mixedColor=mix(color1,color2,u_fade);gl_FragColor=mixedColor*v_lighting;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_height_factor;uniform vec3 u_scale;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n#pragma mapbox: define lowp float pixel_ratio_from\n#pragma mapbox: define lowp float pixel_ratio_to\nvoid main() {\n#pragma mapbox: initialize lowp float base\n#pragma mapbox: initialize lowp float height\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\n#pragma mapbox: initialize lowp float pixel_ratio_from\n#pragma mapbox: initialize lowp float pixel_ratio_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec3 normal=a_normal_ed.xyz;float edgedistance=a_normal_ed.w;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);float z=t > 0.0 ? height : base;gl_Position=u_matrix*vec4(a_pos,z,1);vec2 pos=normal.x==1.0 && normal.y==0.0 && normal.z==16384.0\n? a_pos\n: vec2(edgedistance,z*u_height_factor);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,pos);v_lighting=vec4(0.0,0.0,0.0,1.0);float directional=clamp(dot(normal/16383.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((0.5+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_lighting.rgb+=clamp(directional*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));v_lighting*=u_opacity;}"),fr=_r("#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_dimension;uniform float u_zoom;uniform float u_maxzoom;uniform vec4 u_unpack;float getElevation(vec2 coord,float bias) {vec4 data=texture2D(u_image,coord)*255.0;data.a=-1.0;return dot(data,u_unpack)/4.0;}void main() {vec2 epsilon=1.0/u_dimension;float a=getElevation(v_pos+vec2(-epsilon.x,-epsilon.y),0.0);float b=getElevation(v_pos+vec2(0,-epsilon.y),0.0);float c=getElevation(v_pos+vec2(epsilon.x,-epsilon.y),0.0);float d=getElevation(v_pos+vec2(-epsilon.x,0),0.0);float e=getElevation(v_pos,0.0);float f=getElevation(v_pos+vec2(epsilon.x,0),0.0);float g=getElevation(v_pos+vec2(-epsilon.x,epsilon.y),0.0);float h=getElevation(v_pos+vec2(0,epsilon.y),0.0);float i=getElevation(v_pos+vec2(epsilon.x,epsilon.y),0.0);float exaggeration=u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;vec2 deriv=vec2((c+f+f+i)-(a+d+d+g),(g+h+h+i)-(a+b+b+c))/ pow(2.0,(u_zoom-u_maxzoom)*exaggeration+19.2562-u_zoom);gl_FragColor=clamp(vec4(deriv.x/2.0+0.5,deriv.y/2.0+0.5,1.0,1.0),0.0,1.0);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_dimension;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);highp vec2 epsilon=1.0/u_dimension;float scale=(u_dimension.x-2.0)/u_dimension.x;v_pos=(a_texture_pos/8192.0)*scale+epsilon;}"),hr=_r("uniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_latrange;uniform vec2 u_light;uniform vec4 u_shadow;uniform vec4 u_highlight;uniform vec4 u_accent;\n#define PI 3.141592653589793\nvoid main() {vec4 pixel=texture2D(u_image,v_pos);vec2 deriv=((pixel.rg*2.0)-1.0);float scaleFactor=cos(radians((u_latrange[0]-u_latrange[1])*(1.0-v_pos.y)+u_latrange[1]));float slope=atan(1.25*length(deriv)/scaleFactor);float aspect=deriv.x !=0.0 ? atan(deriv.y,-deriv.x) : PI/2.0*(deriv.y > 0.0 ? 1.0 :-1.0);float intensity=u_light.x;float azimuth=u_light.y+PI;float base=1.875-intensity*1.75;float maxValue=0.5*PI;float scaledSlope=intensity !=0.5 ? ((pow(base,slope)-1.0)/(pow(base,maxValue)-1.0))*maxValue : slope;float accent=cos(scaledSlope);vec4 accent_color=(1.0-accent)*u_accent*clamp(intensity*2.0,0.0,1.0);float shade=abs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);vec4 shade_color=mix(u_shadow,u_highlight,shade)*sin(scaledSlope)*clamp(intensity*2.0,0.0,1.0);gl_FragColor=accent_color*(1.0-shade_color.a)+shade_color;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos=a_texture_pos/8192.0;}"),pr=_r("uniform lowp float u_device_pixel_ratio;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);gl_FragColor=color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define scale 0.015873016\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform vec2 u_units_to_pixels;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_linesofar;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float width\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}"),dr=_r("uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;varying highp float v_lineprogress;\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);vec4 color=texture2D(u_image,vec2(v_lineprogress,0.5));gl_FragColor=color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define MAX_LINE_DISTANCE 32767.0\n#define scale 0.015873016\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_lineprogress;\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\nvoid main() {\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float width\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_lineprogress=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0/MAX_LINE_DISTANCE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}"),vr=_r("uniform lowp float u_device_pixel_ratio;uniform vec2 u_texsize;uniform float u_fade;uniform mediump vec3 u_scale;uniform sampler2D u_image;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;varying float v_width;\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n#pragma mapbox: define lowp float pixel_ratio_from\n#pragma mapbox: define lowp float pixel_ratio_to\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\n#pragma mapbox: initialize lowp float pixel_ratio_from\n#pragma mapbox: initialize lowp float pixel_ratio_to\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileZoomRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;vec2 pattern_size_a=vec2(display_size_a.x*fromScale/tileZoomRatio,display_size_a.y);vec2 pattern_size_b=vec2(display_size_b.x*toScale/tileZoomRatio,display_size_b.y);float aspect_a=display_size_a.y/v_width;float aspect_b=display_size_b.y/v_width;float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float x_a=mod(v_linesofar/pattern_size_a.x*aspect_a,1.0);float x_b=mod(v_linesofar/pattern_size_b.x*aspect_b,1.0);float y=0.5*v_normal.y+0.5;vec2 texel_size=1.0/u_texsize;vec2 pos_a=mix(pattern_tl_a*texel_size-texel_size,pattern_br_a*texel_size+texel_size,vec2(x_a,y));vec2 pos_b=mix(pattern_tl_b*texel_size-texel_size,pattern_br_b*texel_size+texel_size,vec2(x_b,y));vec4 color=mix(texture2D(u_image,pos_a),texture2D(u_image,pos_b),u_fade);gl_FragColor=color*alpha*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define scale 0.015873016\n#define LINE_DISTANCE_SCALE 2.0\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform vec2 u_units_to_pixels;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;varying float v_width;\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp float floorwidth\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n#pragma mapbox: define lowp float pixel_ratio_from\n#pragma mapbox: define lowp float pixel_ratio_to\nvoid main() {\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize mediump float width\n#pragma mapbox: initialize lowp float floorwidth\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\n#pragma mapbox: initialize lowp float pixel_ratio_from\n#pragma mapbox: initialize lowp float pixel_ratio_to\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_linesofar=a_linesofar;v_width2=vec2(outset,inset);v_width=floorwidth;}"),gr=_r("uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;uniform float u_sdfgamma;uniform float u_mix;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp float floorwidth\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float width\n#pragma mapbox: initialize lowp float floorwidth\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float sdfdist_a=texture2D(u_image,v_tex_a).a;float sdfdist_b=texture2D(u_image,v_tex_b).a;float sdfdist=mix(sdfdist_a,sdfdist_b,u_mix);alpha*=smoothstep(0.5-u_sdfgamma/floorwidth,0.5+u_sdfgamma/floorwidth,sdfdist);gl_FragColor=color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define scale 0.015873016\n#define LINE_DISTANCE_SCALE 2.0\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_patternscale_a;uniform float u_tex_y_a;uniform vec2 u_patternscale_b;uniform float u_tex_y_b;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp float floorwidth\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float width\n#pragma mapbox: initialize lowp float floorwidth\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_tex_a=vec2(a_linesofar*u_patternscale_a.x/floorwidth,normal.y*u_patternscale_a.y+u_tex_y_a);v_tex_b=vec2(a_linesofar*u_patternscale_b.x/floorwidth,normal.y*u_patternscale_b.y+u_tex_y_b);v_width2=vec2(outset,inset);}"),yr=_r("uniform float u_fade_t;uniform float u_opacity;uniform sampler2D u_image0;uniform sampler2D u_image1;varying vec2 v_pos0;varying vec2 v_pos1;uniform float u_brightness_low;uniform float u_brightness_high;uniform float u_saturation_factor;uniform float u_contrast_factor;uniform vec3 u_spin_weights;void main() {vec4 color0=texture2D(u_image0,v_pos0);vec4 color1=texture2D(u_image1,v_pos1);if (color0.a > 0.0) {color0.rgb=color0.rgb/color0.a;}if (color1.a > 0.0) {color1.rgb=color1.rgb/color1.a;}vec4 color=mix(color0,color1,u_fade_t);color.a*=u_opacity;vec3 rgb=color.rgb;rgb=vec3(dot(rgb,u_spin_weights.xyz),dot(rgb,u_spin_weights.zxy),dot(rgb,u_spin_weights.yzx));float average=(color.r+color.g+color.b)/3.0;rgb+=(average-rgb)*u_saturation_factor;rgb=(rgb-0.5)*u_contrast_factor+0.5;vec3 u_high_vec=vec3(u_brightness_low,u_brightness_low,u_brightness_low);vec3 u_low_vec=vec3(u_brightness_high,u_brightness_high,u_brightness_high);gl_FragColor=vec4(mix(u_high_vec,u_low_vec,rgb)*color.a,color.a);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_tl_parent;uniform float u_scale_parent;uniform float u_buffer_scale;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos0;varying vec2 v_pos1;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos0=(((a_texture_pos/8192.0)-0.5)/u_buffer_scale )+0.5;v_pos1=(v_pos0*u_scale_parent)+u_tl_parent;}"),mr=_r("uniform sampler2D u_texture;varying vec2 v_tex;varying float v_fade_opacity;\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\nlowp float alpha=opacity*v_fade_opacity;gl_FragColor=texture2D(u_texture,v_tex)*alpha;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec4 a_pixeloffset;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform highp float u_camera_to_center_distance;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform float u_fade_change;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform vec2 u_texsize;varying vec2 v_tex;varying float v_fade_opacity;\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;vec2 a_minFontScale=a_pixeloffset.zw/256.0;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\ncamera_to_anchor_distance/u_camera_to_center_distance :\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*max(a_minFontScale,fontScale)+a_pxoffset/16.0),0.0,1.0);v_tex=a_tex/u_texsize;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;v_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));}"),xr=_r("#define SDF_PX 8.0\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;uniform bool u_is_text;varying vec2 v_data0;varying vec3 v_data1;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\nvoid main() {\n#pragma mapbox: initialize highp vec4 fill_color\n#pragma mapbox: initialize highp vec4 halo_color\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float halo_width\n#pragma mapbox: initialize lowp float halo_blur\nfloat EDGE_GAMMA=0.105/u_device_pixel_ratio;vec2 tex=v_data0.xy;float gamma_scale=v_data1.x;float size=v_data1.y;float fade_opacity=v_data1[2];float fontScale=u_is_text ? size/24.0 : size;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec4 a_pixeloffset;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;varying vec2 v_data0;varying vec3 v_data1;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\nvoid main() {\n#pragma mapbox: initialize highp vec4 fill_color\n#pragma mapbox: initialize highp vec4 halo_color\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float halo_width\n#pragma mapbox: initialize lowp float halo_blur\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\ncamera_to_anchor_distance/u_camera_to_center_distance :\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale+a_pxoffset),0.0,1.0);float gamma_scale=gl_Position.w;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0=a_tex/u_texsize;v_data1=vec3(gamma_scale,size,interpolated_fade_opacity);}"),br=_r("#define SDF_PX 8.0\n#define SDF 1.0\n#define ICON 0.0\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform sampler2D u_texture_icon;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;varying vec4 v_data0;varying vec4 v_data1;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\nvoid main() {\n#pragma mapbox: initialize highp vec4 fill_color\n#pragma mapbox: initialize highp vec4 halo_color\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float halo_width\n#pragma mapbox: initialize lowp float halo_blur\nfloat fade_opacity=v_data1[2];if (v_data1.w==ICON) {vec2 tex_icon=v_data0.zw;lowp float alpha=opacity*fade_opacity;gl_FragColor=texture2D(u_texture_icon,tex_icon)*alpha;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\nreturn;}vec2 tex=v_data0.xy;float EDGE_GAMMA=0.105/u_device_pixel_ratio;float gamma_scale=v_data1.x;float size=v_data1.y;float fontScale=size/24.0;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;uniform vec2 u_texsize_icon;varying vec4 v_data0;varying vec4 v_data1;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\nvoid main() {\n#pragma mapbox: initialize highp vec4 fill_color\n#pragma mapbox: initialize highp vec4 halo_color\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float halo_width\n#pragma mapbox: initialize lowp float halo_blur\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);float is_sdf=a_size[0]-2.0*a_size_min;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\ncamera_to_anchor_distance/u_camera_to_center_distance :\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=size/24.0;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale),0.0,1.0);float gamma_scale=gl_Position.w;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0.xy=a_tex/u_texsize;v_data0.zw=a_tex/u_texsize_icon;v_data1=vec4(gamma_scale,size,interpolated_fade_opacity,is_sdf);}");function _r(t,e){var r=/#pragma mapbox: ([\w]+) ([\w]+) ([\w]+) ([\w]+)/g,n={};return{fragmentSource:t=t.replace(r,(function(t,e,r,i,a){return n[a]=!0,"define"===e?"\n#ifndef HAS_UNIFORM_u_"+a+"\nvarying "+r+" "+i+" "+a+";\n#else\nuniform "+r+" "+i+" u_"+a+";\n#endif\n":"\n#ifdef HAS_UNIFORM_u_"+a+"\n    "+r+" "+i+" "+a+" = u_"+a+";\n#endif\n"})),vertexSource:e=e.replace(r,(function(t,e,r,i,a){var o="float"===i?"vec2":"vec4",s=a.match(/color/)?"color":o;return n[a]?"define"===e?"\n#ifndef HAS_UNIFORM_u_"+a+"\nuniform lowp float u_"+a+"_t;\nattribute "+r+" "+o+" a_"+a+";\nvarying "+r+" "+i+" "+a+";\n#else\nuniform "+r+" "+i+" u_"+a+";\n#endif\n":"vec4"===s?"\n#ifndef HAS_UNIFORM_u_"+a+"\n    "+a+" = a_"+a+";\n#else\n    "+r+" "+i+" "+a+" = u_"+a+";\n#endif\n":"\n#ifndef HAS_UNIFORM_u_"+a+"\n    "+a+" = unpack_mix_"+s+"(a_"+a+", u_"+a+"_t);\n#else\n    "+r+" "+i+" "+a+" = u_"+a+";\n#endif\n":"define"===e?"\n#ifndef HAS_UNIFORM_u_"+a+"\nuniform lowp float u_"+a+"_t;\nattribute "+r+" "+o+" a_"+a+";\n#else\nuniform "+r+" "+i+" u_"+a+";\n#endif\n":"vec4"===s?"\n#ifndef HAS_UNIFORM_u_"+a+"\n    "+r+" "+i+" "+a+" = a_"+a+";\n#else\n    "+r+" "+i+" "+a+" = u_"+a+";\n#endif\n":"\n#ifndef HAS_UNIFORM_u_"+a+"\n    "+r+" "+i+" "+a+" = unpack_mix_"+s+"(a_"+a+", u_"+a+"_t);\n#else\n    "+r+" "+i+" "+a+" = u_"+a+";\n#endif\n"}))}}var wr=Object.freeze({__proto__:null,prelude:Xe,background:Je,backgroundPattern:Ke,circle:$e,clippingMask:Qe,heatmap:tr,heatmapTexture:er,collisionBox:rr,collisionCircle:nr,debug:ir,fill:ar,fillOutline:or,fillOutlinePattern:sr,fillPattern:lr,fillExtrusion:ur,fillExtrusionPattern:cr,hillshadePrepare:fr,hillshade:hr,line:pr,lineGradient:dr,linePattern:vr,lineSDF:gr,raster:yr,symbolIcon:mr,symbolSDF:xr,symbolTextAndIcon:br}),Tr=function(){this.boundProgram=null,this.boundLayoutVertexBuffer=null,this.boundPaintVertexBuffers=[],this.boundIndexBuffer=null,this.boundVertexOffset=null,this.boundDynamicVertexBuffer=null,this.vao=null};Tr.prototype.bind=function(t,e,r,n,i,a,o,s){this.context=t;for(var l=this.boundPaintVertexBuffers.length!==n.length,u=0;!l&&u<n.length;u++)this.boundPaintVertexBuffers[u]!==n[u]&&(l=!0);var c=!this.vao||this.boundProgram!==e||this.boundLayoutVertexBuffer!==r||l||this.boundIndexBuffer!==i||this.boundVertexOffset!==a||this.boundDynamicVertexBuffer!==o||this.boundDynamicVertexBuffer2!==s;!t.extVertexArrayObject||c?this.freshBind(e,r,n,i,a,o,s):(t.bindVertexArrayOES.set(this.vao),o&&o.bind(),i&&i.dynamicDraw&&i.bind(),s&&s.bind())},Tr.prototype.freshBind=function(t,e,r,n,i,a,o){var s,l=t.numAttributes,u=this.context,c=u.gl;if(u.extVertexArrayObject)this.vao&&this.destroy(),this.vao=u.extVertexArrayObject.createVertexArrayOES(),u.bindVertexArrayOES.set(this.vao),s=0,this.boundProgram=t,this.boundLayoutVertexBuffer=e,this.boundPaintVertexBuffers=r,this.boundIndexBuffer=n,this.boundVertexOffset=i,this.boundDynamicVertexBuffer=a,this.boundDynamicVertexBuffer2=o;else{s=u.currentNumAttributes||0;for(var f=l;f<s;f++)c.disableVertexAttribArray(f)}e.enableAttributes(c,t);for(var h=0,p=r;h<p.length;h+=1)p[h].enableAttributes(c,t);a&&a.enableAttributes(c,t),o&&o.enableAttributes(c,t),e.bind(),e.setVertexAttribPointers(c,t,i);for(var d=0,v=r;d<v.length;d+=1){var g=v[d];g.bind(),g.setVertexAttribPointers(c,t,i)}a&&(a.bind(),a.setVertexAttribPointers(c,t,i)),n&&n.bind(),o&&(o.bind(),o.setVertexAttribPointers(c,t,i)),u.currentNumAttributes=l},Tr.prototype.destroy=function(){this.vao&&(this.context.extVertexArrayObject.deleteVertexArrayOES(this.vao),this.vao=null)};var kr=function(t,e,r,n,i){var a=t.gl;this.program=a.createProgram();var o=r?r.defines():[];i&&o.push("#define OVERDRAW_INSPECTOR;");var s=o.concat(Xe.fragmentSource,e.fragmentSource).join("\n"),l=o.concat(Xe.vertexSource,e.vertexSource).join("\n"),u=a.createShader(a.FRAGMENT_SHADER);if(a.isContextLost())this.failedToCreate=!0;else{a.shaderSource(u,s),a.compileShader(u),a.attachShader(this.program,u);var c=a.createShader(a.VERTEX_SHADER);if(a.isContextLost())this.failedToCreate=!0;else{a.shaderSource(c,l),a.compileShader(c),a.attachShader(this.program,c);for(var f=r?r.layoutAttributes:[],h=0;h<f.length;h++)a.bindAttribLocation(this.program,h,f[h].name);a.linkProgram(this.program),a.deleteShader(c),a.deleteShader(u),this.numAttributes=a.getProgramParameter(this.program,a.ACTIVE_ATTRIBUTES),this.attributes={};for(var p={},d=0;d<this.numAttributes;d++){var v=a.getActiveAttrib(this.program,d);v&&(this.attributes[v.name]=a.getAttribLocation(this.program,v.name))}for(var g=a.getProgramParameter(this.program,a.ACTIVE_UNIFORMS),y=0;y<g;y++){var m=a.getActiveUniform(this.program,y);m&&(p[m.name]=a.getUniformLocation(this.program,m.name))}this.fixedUniforms=n(t,p),this.binderUniforms=r?r.getUniforms(t,p):[]}}};function Ar(t,e,r){var n=1/ge(r,1,e.transform.tileZoom),i=Math.pow(2,r.tileID.overscaledZ),a=r.tileSize*Math.pow(2,e.transform.tileZoom)/i,o=a*(r.tileID.canonical.x+r.tileID.wrap*i),s=a*r.tileID.canonical.y;return{u_image:0,u_texsize:r.imageAtlasTexture.size,u_scale:[n,t.fromScale,t.toScale],u_fade:t.t,u_pixel_coord_upper:[o>>16,s>>16],u_pixel_coord_lower:[65535&o,65535&s]}}kr.prototype.draw=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v){var g,y=t.gl;if(!this.failedToCreate){for(var m in t.program.set(this.program),t.setDepthMode(r),t.setStencilMode(n),t.setColorMode(i),t.setCullFace(a),this.fixedUniforms)this.fixedUniforms[m].set(o[m]);p&&p.setUniforms(t,this.binderUniforms,f,{zoom:h});for(var x=(g={},g[y.LINES]=2,g[y.TRIANGLES]=3,g[y.LINE_STRIP]=1,g)[e],b=0,_=c.get();b<_.length;b+=1){var w=_[b],T=w.vaos||(w.vaos={});(T[s]||(T[s]=new Tr)).bind(t,this,l,p?p.getPaintVertexBuffers():[],u,w.vertexOffset,d,v),y.drawElements(e,w.primitiveLength*x,y.UNSIGNED_SHORT,w.primitiveOffset*x*2)}}};var Mr=function(e,r,n,i){var a=r.style.light,o=a.properties.get("position"),s=[o.x,o.y,o.z],l=t.create$1();"viewport"===a.properties.get("anchor")&&t.fromRotation(l,-r.transform.angle),t.transformMat3(s,s,l);var u=a.properties.get("color");return{u_matrix:e,u_lightpos:s,u_lightintensity:a.properties.get("intensity"),u_lightcolor:[u.r,u.g,u.b],u_vertical_gradient:+n,u_opacity:i}},Sr=function(e,r,n,i,a,o,s){return t.extend(Mr(e,r,n,i),Ar(o,r,s),{u_height_factor:-Math.pow(2,a.overscaledZ)/s.tileSize/8})},Er=function(t){return{u_matrix:t}},Lr=function(e,r,n,i){return t.extend(Er(e),Ar(n,r,i))},Cr=function(t,e){return{u_matrix:t,u_world:e}},Pr=function(e,r,n,i,a){return t.extend(Lr(e,r,n,i),{u_world:a})},Or=function(e,r,n,i){var a,o,s=e.transform;if("map"===i.paint.get("circle-pitch-alignment")){var l=ge(n,1,s.zoom);a=!0,o=[l,l]}else a=!1,o=s.pixelsToGLUnits;return{u_camera_to_center_distance:s.cameraToCenterDistance,u_scale_with_map:+("map"===i.paint.get("circle-pitch-scale")),u_matrix:e.translatePosMatrix(r.posMatrix,n,i.paint.get("circle-translate"),i.paint.get("circle-translate-anchor")),u_pitch_with_map:+a,u_device_pixel_ratio:t.browser.devicePixelRatio,u_extrude_scale:o}},Ir=function(t,e,r){var n=ge(r,1,e.zoom),i=Math.pow(2,e.zoom-r.tileID.overscaledZ),a=r.tileID.overscaleFactor();return{u_matrix:t,u_camera_to_center_distance:e.cameraToCenterDistance,u_pixels_to_tile_units:n,u_extrude_scale:[e.pixelsToGLUnits[0]/(n*i),e.pixelsToGLUnits[1]/(n*i)],u_overscale_factor:a}},Dr=function(t,e,r){return{u_matrix:t,u_inv_matrix:e,u_camera_to_center_distance:r.cameraToCenterDistance,u_viewport_size:[r.width,r.height]}},zr=function(t,e,r){return void 0===r&&(r=1),{u_matrix:t,u_color:e,u_overlay:0,u_overlay_scale:r}},Rr=function(t){return{u_matrix:t}},Fr=function(t,e,r,n){return{u_matrix:t,u_extrude_scale:ge(e,1,r),u_intensity:n}},Br=function(e,r,n,i){var a=t.create();t.ortho(a,0,e.width,e.height,0,0,1);var o=e.context.gl;return{u_matrix:a,u_world:[o.drawingBufferWidth,o.drawingBufferHeight],u_image:n,u_color_ramp:i,u_opacity:r.paint.get("heatmap-opacity")}},Nr=function(e,r,n){var i=n.paint.get("hillshade-shadow-color"),a=n.paint.get("hillshade-highlight-color"),o=n.paint.get("hillshade-accent-color"),s=n.paint.get("hillshade-illumination-direction")*(Math.PI/180);"viewport"===n.paint.get("hillshade-illumination-anchor")&&(s-=e.transform.angle);var l,u,c,f=!e.options.moving;return{u_matrix:e.transform.calculatePosMatrix(r.tileID.toUnwrapped(),f),u_image:0,u_latrange:(l=r.tileID,u=Math.pow(2,l.canonical.z),c=l.canonical.y,[new t.MercatorCoordinate(0,c/u).toLngLat().lat,new t.MercatorCoordinate(0,(c+1)/u).toLngLat().lat]),u_light:[n.paint.get("hillshade-exaggeration"),s],u_shadow:i,u_highlight:a,u_accent:o}},jr=function(e,r,n){var i=r.stride,a=t.create();return t.ortho(a,0,t.EXTENT,-t.EXTENT,0,0,1),t.translate(a,a,[0,-t.EXTENT,0]),{u_matrix:a,u_image:1,u_dimension:[i,i],u_zoom:e.overscaledZ,u_maxzoom:n,u_unpack:r.getUnpackVector()}};var Ur=function(e,r,n){var i=e.transform;return{u_matrix:Zr(e,r,n),u_ratio:1/ge(r,1,i.zoom),u_device_pixel_ratio:t.browser.devicePixelRatio,u_units_to_pixels:[1/i.pixelsToGLUnits[0],1/i.pixelsToGLUnits[1]]}},Vr=function(e,r,n){return t.extend(Ur(e,r,n),{u_image:0})},Hr=function(e,r,n,i){var a=e.transform,o=Gr(r,a);return{u_matrix:Zr(e,r,n),u_texsize:r.imageAtlasTexture.size,u_ratio:1/ge(r,1,a.zoom),u_device_pixel_ratio:t.browser.devicePixelRatio,u_image:0,u_scale:[o,i.fromScale,i.toScale],u_fade:i.t,u_units_to_pixels:[1/a.pixelsToGLUnits[0],1/a.pixelsToGLUnits[1]]}},qr=function(e,r,n,i,a){var o=e.transform,s=e.lineAtlas,l=Gr(r,o),u="round"===n.layout.get("line-cap"),c=s.getDash(i.from,u),f=s.getDash(i.to,u),h=c.width*a.fromScale,p=f.width*a.toScale;return t.extend(Ur(e,r,n),{u_patternscale_a:[l/h,-c.height/2],u_patternscale_b:[l/p,-f.height/2],u_sdfgamma:s.width/(256*Math.min(h,p)*t.browser.devicePixelRatio)/2,u_image:0,u_tex_y_a:c.y,u_tex_y_b:f.y,u_mix:a.t})};function Gr(t,e){return 1/ge(t,1,e.tileZoom)}function Zr(t,e,r){return t.translatePosMatrix(e.tileID.posMatrix,e,r.paint.get("line-translate"),r.paint.get("line-translate-anchor"))}var Yr=function(t,e,r,n,i){return{u_matrix:t,u_tl_parent:e,u_scale_parent:r,u_buffer_scale:1,u_fade_t:n.mix,u_opacity:n.opacity*i.paint.get("raster-opacity"),u_image0:0,u_image1:1,u_brightness_low:i.paint.get("raster-brightness-min"),u_brightness_high:i.paint.get("raster-brightness-max"),u_saturation_factor:(o=i.paint.get("raster-saturation"),o>0?1-1/(1.001-o):-o),u_contrast_factor:(a=i.paint.get("raster-contrast"),a>0?1/(1-a):1+a),u_spin_weights:Wr(i.paint.get("raster-hue-rotate"))};var a,o};function Wr(t){t*=Math.PI/180;var e=Math.sin(t),r=Math.cos(t);return[(2*r+1)/3,(-Math.sqrt(3)*e-r+1)/3,(Math.sqrt(3)*e-r+1)/3]}var Xr,Jr=function(t,e,r,n,i,a,o,s,l,u){var c=i.transform;return{u_is_size_zoom_constant:+("constant"===t||"source"===t),u_is_size_feature_constant:+("constant"===t||"camera"===t),u_size_t:e?e.uSizeT:0,u_size:e?e.uSize:0,u_camera_to_center_distance:c.cameraToCenterDistance,u_pitch:c.pitch/360*2*Math.PI,u_rotate_symbol:+r,u_aspect_ratio:c.width/c.height,u_fade_change:i.options.fadeDuration?i.symbolFadeChange:1,u_matrix:a,u_label_plane_matrix:o,u_coord_matrix:s,u_is_text:+l,u_pitch_with_map:+n,u_texsize:u,u_texture:0}},Kr=function(e,r,n,i,a,o,s,l,u,c,f){var h=a.transform;return t.extend(Jr(e,r,n,i,a,o,s,l,u,c),{u_gamma_scale:i?Math.cos(h._pitch)*h.cameraToCenterDistance:1,u_device_pixel_ratio:t.browser.devicePixelRatio,u_is_halo:+f})},$r=function(e,r,n,i,a,o,s,l,u,c){return t.extend(Kr(e,r,n,i,a,o,s,l,!0,u,!0),{u_texsize_icon:c,u_texture_icon:1})},Qr=function(t,e,r){return{u_matrix:t,u_opacity:e,u_color:r}},tn=function(e,r,n,i,a,o){return t.extend(function(t,e,r,n){var i=r.imageManager.getPattern(t.from.toString()),a=r.imageManager.getPattern(t.to.toString()),o=r.imageManager.getPixelSize(),s=o.width,l=o.height,u=Math.pow(2,n.tileID.overscaledZ),c=n.tileSize*Math.pow(2,r.transform.tileZoom)/u,f=c*(n.tileID.canonical.x+n.tileID.wrap*u),h=c*n.tileID.canonical.y;return{u_image:0,u_pattern_tl_a:i.tl,u_pattern_br_a:i.br,u_pattern_tl_b:a.tl,u_pattern_br_b:a.br,u_texsize:[s,l],u_mix:e.t,u_pattern_size_a:i.displaySize,u_pattern_size_b:a.displaySize,u_scale_a:e.fromScale,u_scale_b:e.toScale,u_tile_units_to_pixels:1/ge(n,1,r.transform.tileZoom),u_pixel_coord_upper:[f>>16,h>>16],u_pixel_coord_lower:[65535&f,65535&h]}}(i,o,n,a),{u_matrix:e,u_opacity:r})},en={fillExtrusion:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_lightpos:new t.Uniform3f(e,r.u_lightpos),u_lightintensity:new t.Uniform1f(e,r.u_lightintensity),u_lightcolor:new t.Uniform3f(e,r.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,r.u_vertical_gradient),u_opacity:new t.Uniform1f(e,r.u_opacity)}},fillExtrusionPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_lightpos:new t.Uniform3f(e,r.u_lightpos),u_lightintensity:new t.Uniform1f(e,r.u_lightintensity),u_lightcolor:new t.Uniform3f(e,r.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,r.u_vertical_gradient),u_height_factor:new t.Uniform1f(e,r.u_height_factor),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade),u_opacity:new t.Uniform1f(e,r.u_opacity)}},fill:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},fillPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},fillOutline:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world)}},fillOutlinePattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},circle:function(e,r){return{u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_scale_with_map:new t.Uniform1i(e,r.u_scale_with_map),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_extrude_scale:new t.Uniform2f(e,r.u_extrude_scale),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},collisionBox:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pixels_to_tile_units:new t.Uniform1f(e,r.u_pixels_to_tile_units),u_extrude_scale:new t.Uniform2f(e,r.u_extrude_scale),u_overscale_factor:new t.Uniform1f(e,r.u_overscale_factor)}},collisionCircle:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_inv_matrix:new t.UniformMatrix4f(e,r.u_inv_matrix),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_viewport_size:new t.Uniform2f(e,r.u_viewport_size)}},debug:function(e,r){return{u_color:new t.UniformColor(e,r.u_color),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_overlay:new t.Uniform1i(e,r.u_overlay),u_overlay_scale:new t.Uniform1f(e,r.u_overlay_scale)}},clippingMask:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},heatmap:function(e,r){return{u_extrude_scale:new t.Uniform1f(e,r.u_extrude_scale),u_intensity:new t.Uniform1f(e,r.u_intensity),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},heatmapTexture:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world),u_image:new t.Uniform1i(e,r.u_image),u_color_ramp:new t.Uniform1i(e,r.u_color_ramp),u_opacity:new t.Uniform1f(e,r.u_opacity)}},hillshade:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_latrange:new t.Uniform2f(e,r.u_latrange),u_light:new t.Uniform2f(e,r.u_light),u_shadow:new t.UniformColor(e,r.u_shadow),u_highlight:new t.UniformColor(e,r.u_highlight),u_accent:new t.UniformColor(e,r.u_accent)}},hillshadePrepare:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_dimension:new t.Uniform2f(e,r.u_dimension),u_zoom:new t.Uniform1f(e,r.u_zoom),u_maxzoom:new t.Uniform1f(e,r.u_maxzoom),u_unpack:new t.Uniform4f(e,r.u_unpack)}},line:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels)}},lineGradient:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_image:new t.Uniform1i(e,r.u_image)}},linePattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_texsize:new t.Uniform2f(e,r.u_texsize),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_image:new t.Uniform1i(e,r.u_image),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_scale:new t.Uniform3f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},lineSDF:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_patternscale_a:new t.Uniform2f(e,r.u_patternscale_a),u_patternscale_b:new t.Uniform2f(e,r.u_patternscale_b),u_sdfgamma:new t.Uniform1f(e,r.u_sdfgamma),u_image:new t.Uniform1i(e,r.u_image),u_tex_y_a:new t.Uniform1f(e,r.u_tex_y_a),u_tex_y_b:new t.Uniform1f(e,r.u_tex_y_b),u_mix:new t.Uniform1f(e,r.u_mix)}},raster:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_tl_parent:new t.Uniform2f(e,r.u_tl_parent),u_scale_parent:new t.Uniform1f(e,r.u_scale_parent),u_buffer_scale:new t.Uniform1f(e,r.u_buffer_scale),u_fade_t:new t.Uniform1f(e,r.u_fade_t),u_opacity:new t.Uniform1f(e,r.u_opacity),u_image0:new t.Uniform1i(e,r.u_image0),u_image1:new t.Uniform1i(e,r.u_image1),u_brightness_low:new t.Uniform1f(e,r.u_brightness_low),u_brightness_high:new t.Uniform1f(e,r.u_brightness_high),u_saturation_factor:new t.Uniform1f(e,r.u_saturation_factor),u_contrast_factor:new t.Uniform1f(e,r.u_contrast_factor),u_spin_weights:new t.Uniform3f(e,r.u_spin_weights)}},symbolIcon:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,r.u_coord_matrix),u_is_text:new t.Uniform1i(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texture:new t.Uniform1i(e,r.u_texture)}},symbolSDF:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,r.u_coord_matrix),u_is_text:new t.Uniform1i(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texture:new t.Uniform1i(e,r.u_texture),u_gamma_scale:new t.Uniform1f(e,r.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_is_halo:new t.Uniform1i(e,r.u_is_halo)}},symbolTextAndIcon:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,r.u_coord_matrix),u_is_text:new t.Uniform1i(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texsize_icon:new t.Uniform2f(e,r.u_texsize_icon),u_texture:new t.Uniform1i(e,r.u_texture),u_texture_icon:new t.Uniform1i(e,r.u_texture_icon),u_gamma_scale:new t.Uniform1f(e,r.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_is_halo:new t.Uniform1i(e,r.u_is_halo)}},background:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_opacity:new t.Uniform1f(e,r.u_opacity),u_color:new t.UniformColor(e,r.u_color)}},backgroundPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_opacity:new t.Uniform1f(e,r.u_opacity),u_image:new t.Uniform1i(e,r.u_image),u_pattern_tl_a:new t.Uniform2f(e,r.u_pattern_tl_a),u_pattern_br_a:new t.Uniform2f(e,r.u_pattern_br_a),u_pattern_tl_b:new t.Uniform2f(e,r.u_pattern_tl_b),u_pattern_br_b:new t.Uniform2f(e,r.u_pattern_br_b),u_texsize:new t.Uniform2f(e,r.u_texsize),u_mix:new t.Uniform1f(e,r.u_mix),u_pattern_size_a:new t.Uniform2f(e,r.u_pattern_size_a),u_pattern_size_b:new t.Uniform2f(e,r.u_pattern_size_b),u_scale_a:new t.Uniform1f(e,r.u_scale_a),u_scale_b:new t.Uniform1f(e,r.u_scale_b),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_tile_units_to_pixels:new t.Uniform1f(e,r.u_tile_units_to_pixels)}}};function rn(e,r,n,i,a,o,s){for(var l=e.context,u=l.gl,c=e.useProgram("collisionBox"),f=[],h=0,p=0,d=0;d<i.length;d++){var v=i[d],g=r.getTile(v),y=g.getBucket(n);if(y){var m=v.posMatrix;0===a[0]&&0===a[1]||(m=e.translatePosMatrix(v.posMatrix,g,a,o));var x=s?y.textCollisionBox:y.iconCollisionBox,b=y.collisionCircleArray;if(b.length>0){var _=t.create(),w=m;t.mul(_,y.placementInvProjMatrix,e.transform.glCoordMatrix),t.mul(_,_,y.placementViewportMatrix),f.push({circleArray:b,circleOffset:p,transform:w,invTransform:_}),p=h+=b.length/4}x&&c.draw(l,u.LINES,Mt.disabled,Et.disabled,e.colorModeForRenderPass(),Ct.disabled,Ir(m,e.transform,g),n.id,x.layoutVertexBuffer,x.indexBuffer,x.segments,null,e.transform.zoom,null,null,x.collisionVertexBuffer)}}if(s&&f.length){var T=e.useProgram("collisionCircle"),k=new t.StructArrayLayout2f1f2i16;k.resize(4*h),k._trim();for(var A=0,M=0,S=f;M<S.length;M+=1)for(var E=S[M],L=0;L<E.circleArray.length/4;L++){var C=4*L,P=E.circleArray[C+0],O=E.circleArray[C+1],I=E.circleArray[C+2],D=E.circleArray[C+3];k.emplace(A++,P,O,I,D,0),k.emplace(A++,P,O,I,D,1),k.emplace(A++,P,O,I,D,2),k.emplace(A++,P,O,I,D,3)}(!Xr||Xr.length<2*h)&&(Xr=function(e){var r=2*e,n=new t.StructArrayLayout3ui6;n.resize(r),n._trim();for(var i=0;i<r;i++){var a=6*i;n.uint16[a+0]=4*i+0,n.uint16[a+1]=4*i+1,n.uint16[a+2]=4*i+2,n.uint16[a+3]=4*i+2,n.uint16[a+4]=4*i+3,n.uint16[a+5]=4*i+0}return n}(h));for(var z=l.createIndexBuffer(Xr,!0),R=l.createVertexBuffer(k,t.collisionCircleLayout.members,!0),F=0,B=f;F<B.length;F+=1){var N=B[F],j=Dr(N.transform,N.invTransform,e.transform);T.draw(l,u.TRIANGLES,Mt.disabled,Et.disabled,e.colorModeForRenderPass(),Ct.disabled,j,n.id,R,z,t.SegmentVector.simpleSegment(0,2*N.circleOffset,N.circleArray.length,N.circleArray.length/2),null,e.transform.zoom,null,null,null)}R.destroy(),z.destroy()}}var nn=t.identity(new Float32Array(16));function an(e,r,n,i,a,o){var s=t.getAnchorAlignment(e),l=-(s.horizontalAlign-.5)*r,u=-(s.verticalAlign-.5)*n,c=t.evaluateVariableOffset(e,i);return new t.Point((l/a+c[0])*o,(u/a+c[1])*o)}function on(e,r,n,i,a,o,s,l,u,c,f){var h=e.text.placedSymbolArray,p=e.text.dynamicLayoutVertexArray,d=e.icon.dynamicLayoutVertexArray,v={};p.clear();for(var g=0;g<h.length;g++){var y=h.get(g),m=e.allowVerticalPlacement&&!y.placedOrientation,x=y.hidden||!y.crossTileID||m?null:i[y.crossTileID];if(x){var b=new t.Point(y.anchorX,y.anchorY),_=re(b,n?l:s),w=ne(o.cameraToCenterDistance,_.signedDistanceFromCamera),T=a.evaluateSizeForFeature(e.textSizeData,c,y)*w/t.ONE_EM;n&&(T*=e.tilePixelRatio/u);for(var k=x.width,A=x.height,M=an(x.anchor,k,A,x.textOffset,x.textBoxScale,T),S=n?re(b.add(M),s).point:_.point.add(r?M.rotate(-o.angle):M),E=e.allowVerticalPlacement&&y.placedOrientation===t.WritingMode.vertical?Math.PI/2:0,L=0;L<y.numGlyphs;L++)t.addDynamicAttributes(p,S,E);f&&y.associatedIconIndex>=0&&(v[y.associatedIconIndex]={shiftedAnchor:S,angle:E})}else he(y.numGlyphs,p)}if(f){d.clear();for(var C=e.icon.placedSymbolArray,P=0;P<C.length;P++){var O=C.get(P);if(O.hidden)he(O.numGlyphs,d);else{var I=v[P];if(I)for(var D=0;D<O.numGlyphs;D++)t.addDynamicAttributes(d,I.shiftedAnchor,I.angle);else he(O.numGlyphs,d)}}e.icon.dynamicLayoutVertexBuffer.updateData(d)}e.text.dynamicLayoutVertexBuffer.updateData(p)}function sn(t,e,r){return r.iconsInText&&e?"symbolTextAndIcon":t?"symbolSDF":"symbolIcon"}function ln(e,r,n,i,a,o,s,l,u,c,f,h){for(var p=e.context,d=p.gl,v=e.transform,g="map"===l,y="map"===u,m=g&&"point"!==n.layout.get("symbol-placement"),x=g&&!y&&!m,b=void 0!==n.layout.get("symbol-sort-key").constantOr(1),_=e.depthModeForSublayer(0,Mt.ReadOnly),w=n.layout.get("text-variable-anchor"),T=[],k=0,A=i;k<A.length;k+=1){var M=A[k],S=r.getTile(M),E=S.getBucket(n);if(E){var L=a?E.text:E.icon;if(L&&L.segments.get().length){var C=L.programConfigurations.get(n.id),P=a||E.sdfIcons,O=a?E.textSizeData:E.iconSizeData,I=y||0!==v.pitch,D=e.useProgram(sn(P,a,E),C),z=t.evaluateSizeForZoom(O,v.zoom),R=void 0,F=[0,0],B=void 0,N=void 0,j=null,U=void 0;if(a){if(B=S.glyphAtlasTexture,N=d.LINEAR,R=S.glyphAtlasTexture.size,E.iconsInText){F=S.imageAtlasTexture.size,j=S.imageAtlasTexture;var V="composite"===O.kind||"camera"===O.kind;U=I||e.options.rotating||e.options.zooming||V?d.LINEAR:d.NEAREST}}else{var H=1!==n.layout.get("icon-size").constantOr(0)||E.iconsNeedLinear;B=S.imageAtlasTexture,N=P||e.options.rotating||e.options.zooming||H||I?d.LINEAR:d.NEAREST,R=S.imageAtlasTexture.size}var q=ge(S,1,e.transform.zoom),G=te(M.posMatrix,y,g,e.transform,q),Z=ee(M.posMatrix,y,g,e.transform,q),Y=w&&E.hasTextData(),W="none"!==n.layout.get("icon-text-fit")&&Y&&E.hasIconData();m&&ae(E,M.posMatrix,e,a,G,Z,y,c);var X=e.translatePosMatrix(M.posMatrix,S,o,s),J=m||a&&w||W?nn:G,K=e.translatePosMatrix(Z,S,o,s,!0),$=P&&0!==n.paint.get(a?"text-halo-width":"icon-halo-width").constantOr(1),Q={program:D,buffers:L,uniformValues:P?E.iconsInText?$r(O.kind,z,x,y,e,X,J,K,R,F):Kr(O.kind,z,x,y,e,X,J,K,a,R,!0):Jr(O.kind,z,x,y,e,X,J,K,a,R),atlasTexture:B,atlasTextureIcon:j,atlasInterpolation:N,atlasInterpolationIcon:U,isSDF:P,hasHalo:$};if(b)for(var tt=0,et=L.segments.get();tt<et.length;tt+=1){var rt=et[tt];T.push({segments:new t.SegmentVector([rt]),sortKey:rt.sortKey,state:Q})}else T.push({segments:L.segments,sortKey:0,state:Q})}}}b&&T.sort((function(t,e){return t.sortKey-e.sortKey}));for(var nt=0,it=T;nt<it.length;nt+=1){var at=it[nt],ot=at.state;if(p.activeTexture.set(d.TEXTURE0),ot.atlasTexture.bind(ot.atlasInterpolation,d.CLAMP_TO_EDGE),ot.atlasTextureIcon&&(p.activeTexture.set(d.TEXTURE1),ot.atlasTextureIcon&&ot.atlasTextureIcon.bind(ot.atlasInterpolationIcon,d.CLAMP_TO_EDGE)),ot.isSDF){var st=ot.uniformValues;ot.hasHalo&&(st.u_is_halo=1,un(ot.buffers,at.segments,n,e,ot.program,_,f,h,st)),st.u_is_halo=0}un(ot.buffers,at.segments,n,e,ot.program,_,f,h,ot.uniformValues)}}function un(t,e,r,n,i,a,o,s,l){var u=n.context,c=u.gl;i.draw(u,c.TRIANGLES,a,o,s,Ct.disabled,l,r.id,t.layoutVertexBuffer,t.indexBuffer,e,r.paint,n.transform.zoom,t.programConfigurations.get(r.id),t.dynamicLayoutVertexBuffer,t.opacityVertexBuffer)}function cn(t,e,r,n,i,a,o){var s,l,u,c,f,h=t.context.gl,p=r.paint.get("fill-pattern"),d=p&&p.constantOr(1),v=r.getCrossfadeParameters();o?(l=d&&!r.getPaintProperty("fill-outline-color")?"fillOutlinePattern":"fillOutline",s=h.LINES):(l=d?"fillPattern":"fill",s=h.TRIANGLES);for(var g=0,y=n;g<y.length;g+=1){var m=y[g],x=e.getTile(m);if(!d||x.patternsLoaded()){var b=x.getBucket(r);if(b){var _=b.programConfigurations.get(r.id),w=t.useProgram(l,_);d&&(t.context.activeTexture.set(h.TEXTURE0),x.imageAtlasTexture.bind(h.LINEAR,h.CLAMP_TO_EDGE),_.updatePaintBuffers(v));var T=p.constantOr(null);if(T&&x.imageAtlas){var k=x.imageAtlas,A=k.patternPositions[T.to.toString()],M=k.patternPositions[T.from.toString()];A&&M&&_.setConstantPatternPositions(A,M)}var S=t.translatePosMatrix(m.posMatrix,x,r.paint.get("fill-translate"),r.paint.get("fill-translate-anchor"));if(o){c=b.indexBuffer2,f=b.segments2;var E=[h.drawingBufferWidth,h.drawingBufferHeight];u="fillOutlinePattern"===l&&d?Pr(S,t,v,x,E):Cr(S,E)}else c=b.indexBuffer,f=b.segments,u=d?Lr(S,t,v,x):Er(S);w.draw(t.context,s,i,t.stencilModeForClipping(m),a,Ct.disabled,u,r.id,b.layoutVertexBuffer,c,f,r.paint,t.transform.zoom,_)}}}}function fn(t,e,r,n,i,a,o){for(var s=t.context,l=s.gl,u=r.paint.get("fill-extrusion-pattern"),c=u.constantOr(1),f=r.getCrossfadeParameters(),h=r.paint.get("fill-extrusion-opacity"),p=0,d=n;p<d.length;p+=1){var v=d[p],g=e.getTile(v),y=g.getBucket(r);if(y){var m=y.programConfigurations.get(r.id),x=t.useProgram(c?"fillExtrusionPattern":"fillExtrusion",m);c&&(t.context.activeTexture.set(l.TEXTURE0),g.imageAtlasTexture.bind(l.LINEAR,l.CLAMP_TO_EDGE),m.updatePaintBuffers(f));var b=u.constantOr(null);if(b&&g.imageAtlas){var _=g.imageAtlas,w=_.patternPositions[b.to.toString()],T=_.patternPositions[b.from.toString()];w&&T&&m.setConstantPatternPositions(w,T)}var k=t.translatePosMatrix(v.posMatrix,g,r.paint.get("fill-extrusion-translate"),r.paint.get("fill-extrusion-translate-anchor")),A=r.paint.get("fill-extrusion-vertical-gradient"),M=c?Sr(k,t,A,h,v,f,g):Mr(k,t,A,h);x.draw(s,s.gl.TRIANGLES,i,a,o,Ct.backCCW,M,r.id,y.layoutVertexBuffer,y.indexBuffer,y.segments,r.paint,t.transform.zoom,m)}}}function hn(t,e,r,n,i,a){var o=t.context,s=o.gl,l=e.fbo;if(l){var u=t.useProgram("hillshade");o.activeTexture.set(s.TEXTURE0),s.bindTexture(s.TEXTURE_2D,l.colorAttachment.get());var c=Nr(t,e,r);u.draw(o,s.TRIANGLES,n,i,a,Ct.disabled,c,r.id,t.rasterBoundsBuffer,t.quadTriangleIndexBuffer,t.rasterBoundsSegments)}}function pn(e,r,n,i,a,o,s){var l=e.context,u=l.gl,c=r.dem;if(c&&c.data){var f=c.dim,h=c.stride,p=c.getPixels();if(l.activeTexture.set(u.TEXTURE1),l.pixelStoreUnpackPremultiplyAlpha.set(!1),r.demTexture=r.demTexture||e.getTileTexture(h),r.demTexture){var d=r.demTexture;d.update(p,{premultiply:!1}),d.bind(u.NEAREST,u.CLAMP_TO_EDGE)}else r.demTexture=new t.Texture(l,p,u.RGBA,{premultiply:!1}),r.demTexture.bind(u.NEAREST,u.CLAMP_TO_EDGE);l.activeTexture.set(u.TEXTURE0);var v=r.fbo;if(!v){var g=new t.Texture(l,{width:f,height:f,data:null},u.RGBA);g.bind(u.LINEAR,u.CLAMP_TO_EDGE),(v=r.fbo=l.createFramebuffer(f,f,!0)).colorAttachment.set(g.texture)}l.bindFramebuffer.set(v.framebuffer),l.viewport.set([0,0,f,f]),e.useProgram("hillshadePrepare").draw(l,u.TRIANGLES,a,o,s,Ct.disabled,jr(r.tileID,c,i),n.id,e.rasterBoundsBuffer,e.quadTriangleIndexBuffer,e.rasterBoundsSegments),r.needsHillshadePrepare=!1}}function dn(e,r,n,i,a){var o=i.paint.get("raster-fade-duration");if(o>0){var s=t.browser.now(),l=(s-e.timeAdded)/o,u=r?(s-r.timeAdded)/o:-1,c=n.getSource(),f=a.coveringZoomLevel({tileSize:c.tileSize,roundZoom:c.roundZoom}),h=!r||Math.abs(r.tileID.overscaledZ-f)>Math.abs(e.tileID.overscaledZ-f),p=h&&e.refreshedUponExpiration?1:t.clamp(h?l:1-u,0,1);return e.refreshedUponExpiration&&l>=1&&(e.refreshedUponExpiration=!1),r?{opacity:1,mix:1-p}:{opacity:p,mix:0}}return{opacity:1,mix:0}}var vn=new t.Color(1,0,0,1),gn=new t.Color(0,1,0,1),yn=new t.Color(0,0,1,1),mn=new t.Color(1,0,1,1),xn=new t.Color(0,1,1,1);function bn(t){var e=t.transform.padding;_n(t,t.transform.height-(e.top||0),3,vn),_n(t,e.bottom||0,3,gn),wn(t,e.left||0,3,yn),wn(t,t.transform.width-(e.right||0),3,mn);var r=t.transform.centerPoint;!function(t,e,r,n){var i=20,a=2;Tn(t,e-a/2,r-i/2,a,i,n),Tn(t,e-i/2,r-a/2,i,a,n)}(t,r.x,t.transform.height-r.y,xn)}function _n(t,e,r,n){Tn(t,0,e+r/2,t.transform.width,r,n)}function wn(t,e,r,n){Tn(t,e-r/2,0,r,t.transform.height,n)}function Tn(e,r,n,i,a,o){var s=e.context,l=s.gl;l.enable(l.SCISSOR_TEST),l.scissor(r*t.browser.devicePixelRatio,n*t.browser.devicePixelRatio,i*t.browser.devicePixelRatio,a*t.browser.devicePixelRatio),s.clear({color:o}),l.disable(l.SCISSOR_TEST)}function kn(e,r,n){var i=e.context,a=i.gl,o=n.posMatrix,s=e.useProgram("debug"),l=Mt.disabled,u=Et.disabled,c=e.colorModeForRenderPass(),f="$debug";i.activeTexture.set(a.TEXTURE0),e.emptyTexture.bind(a.LINEAR,a.CLAMP_TO_EDGE),s.draw(i,a.LINE_STRIP,l,u,c,Ct.disabled,zr(o,t.Color.red),f,e.debugBuffer,e.tileBorderIndexBuffer,e.debugSegments);var h=r.getTileByID(n.key).latestRawTileData,p=h&&h.byteLength||0,d=Math.floor(p/1024),v=r.getTile(n).tileSize,g=512/Math.min(v,512)*(n.overscaledZ/e.transform.zoom)*.5,y=n.canonical.toString();n.overscaledZ!==n.canonical.z&&(y+=" => "+n.overscaledZ),function(t,e){t.initDebugOverlayCanvas();var r=t.debugOverlayCanvas,n=t.context.gl,i=t.debugOverlayCanvas.getContext("2d");i.clearRect(0,0,r.width,r.height),i.shadowColor="white",i.shadowBlur=2,i.lineWidth=1.5,i.strokeStyle="white",i.textBaseline="top",i.font="bold 36px Open Sans, sans-serif",i.fillText(e,5,5),i.strokeText(e,5,5),t.debugOverlayTexture.update(r),t.debugOverlayTexture.bind(n.LINEAR,n.CLAMP_TO_EDGE)}(e,y+" "+d+"kb"),s.draw(i,a.TRIANGLES,l,u,Lt.alphaBlended,Ct.disabled,zr(o,t.Color.transparent,g),f,e.debugBuffer,e.quadTriangleIndexBuffer,e.debugSegments)}var An={symbol:function(e,r,n,i,a){if("translucent"===e.renderPass){var o=Et.disabled,s=e.colorModeForRenderPass();n.layout.get("text-variable-anchor")&&function(e,r,n,i,a,o,s){for(var l=r.transform,u="map"===a,c="map"===o,f=0,h=e;f<h.length;f+=1){var p=h[f],d=i.getTile(p),v=d.getBucket(n);if(v&&v.text&&v.text.segments.get().length){var g=v.textSizeData,y=t.evaluateSizeForZoom(g,l.zoom),m=ge(d,1,r.transform.zoom),x=te(p.posMatrix,c,u,r.transform,m),b="none"!==n.layout.get("icon-text-fit")&&v.hasIconData();if(y){var _=Math.pow(2,l.zoom-d.tileID.overscaledZ);on(v,u,c,s,t.symbolSize,l,x,p.posMatrix,_,y,b)}}}}(i,e,n,r,n.layout.get("text-rotation-alignment"),n.layout.get("text-pitch-alignment"),a),0!==n.paint.get("icon-opacity").constantOr(1)&&ln(e,r,n,i,!1,n.paint.get("icon-translate"),n.paint.get("icon-translate-anchor"),n.layout.get("icon-rotation-alignment"),n.layout.get("icon-pitch-alignment"),n.layout.get("icon-keep-upright"),o,s),0!==n.paint.get("text-opacity").constantOr(1)&&ln(e,r,n,i,!0,n.paint.get("text-translate"),n.paint.get("text-translate-anchor"),n.layout.get("text-rotation-alignment"),n.layout.get("text-pitch-alignment"),n.layout.get("text-keep-upright"),o,s),r.map.showCollisionBoxes&&(rn(e,r,n,i,n.paint.get("text-translate"),n.paint.get("text-translate-anchor"),!0),rn(e,r,n,i,n.paint.get("icon-translate"),n.paint.get("icon-translate-anchor"),!1))}},circle:function(e,r,n,i){if("translucent"===e.renderPass){var a=n.paint.get("circle-opacity"),o=n.paint.get("circle-stroke-width"),s=n.paint.get("circle-stroke-opacity"),l=void 0!==n.layout.get("circle-sort-key").constantOr(1);if(0!==a.constantOr(1)||0!==o.constantOr(1)&&0!==s.constantOr(1)){for(var u=e.context,c=u.gl,f=e.depthModeForSublayer(0,Mt.ReadOnly),h=Et.disabled,p=e.colorModeForRenderPass(),d=[],v=0;v<i.length;v++){var g=i[v],y=r.getTile(g),m=y.getBucket(n);if(m){var x=m.programConfigurations.get(n.id),b={programConfiguration:x,program:e.useProgram("circle",x),layoutVertexBuffer:m.layoutVertexBuffer,indexBuffer:m.indexBuffer,uniformValues:Or(e,g,y,n)};if(l)for(var _=0,w=m.segments.get();_<w.length;_+=1){var T=w[_];d.push({segments:new t.SegmentVector([T]),sortKey:T.sortKey,state:b})}else d.push({segments:m.segments,sortKey:0,state:b})}}l&&d.sort((function(t,e){return t.sortKey-e.sortKey}));for(var k=0,A=d;k<A.length;k+=1){var M=A[k],S=M.state,E=S.programConfiguration,L=S.program,C=S.layoutVertexBuffer,P=S.indexBuffer,O=S.uniformValues,I=M.segments;L.draw(u,c.TRIANGLES,f,h,p,Ct.disabled,O,n.id,C,P,I,n.paint,e.transform.zoom,E)}}}},heatmap:function(e,r,n,i){if(0!==n.paint.get("heatmap-opacity"))if("offscreen"===e.renderPass){var a=e.context,o=a.gl,s=Et.disabled,l=new Lt([o.ONE,o.ONE],t.Color.transparent,[!0,!0,!0,!0]);(function(t,e,r){var n=t.gl;t.activeTexture.set(n.TEXTURE1),t.viewport.set([0,0,e.width/4,e.height/4]);var i=r.heatmapFbo;if(i)n.bindTexture(n.TEXTURE_2D,i.colorAttachment.get()),t.bindFramebuffer.set(i.framebuffer);else{var a=n.createTexture();n.bindTexture(n.TEXTURE_2D,a),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.LINEAR),i=r.heatmapFbo=t.createFramebuffer(e.width/4,e.height/4,!1),function(t,e,r,n){var i=t.gl,a=t.extRenderToTextureHalfFloat?t.extTextureHalfFloat.HALF_FLOAT_OES:i.UNSIGNED_BYTE;i.texImage2D(i.TEXTURE_2D,0,i.RGBA,e.width/4,e.height/4,0,i.RGBA,a,null),n.colorAttachment.set(r)}(t,e,a,i)}})(a,e,n),a.clear({color:t.Color.transparent});for(var u=0;u<i.length;u++){var c=i[u];if(!r.hasRenderableParent(c)){var f=r.getTile(c),h=f.getBucket(n);if(h){var p=h.programConfigurations.get(n.id),d=e.useProgram("heatmap",p),v=e.transform.zoom;d.draw(a,o.TRIANGLES,Mt.disabled,s,l,Ct.disabled,Fr(c.posMatrix,f,v,n.paint.get("heatmap-intensity")),n.id,h.layoutVertexBuffer,h.indexBuffer,h.segments,n.paint,e.transform.zoom,p)}}}a.viewport.set([0,0,e.width,e.height])}else"translucent"===e.renderPass&&(e.context.setColorMode(e.colorModeForRenderPass()),function(e,r){var n=e.context,i=n.gl,a=r.heatmapFbo;if(a){n.activeTexture.set(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,a.colorAttachment.get()),n.activeTexture.set(i.TEXTURE1);var o=r.colorRampTexture;o||(o=r.colorRampTexture=new t.Texture(n,r.colorRamp,i.RGBA)),o.bind(i.LINEAR,i.CLAMP_TO_EDGE),e.useProgram("heatmapTexture").draw(n,i.TRIANGLES,Mt.disabled,Et.disabled,e.colorModeForRenderPass(),Ct.disabled,Br(e,r,0,1),r.id,e.viewportBuffer,e.quadTriangleIndexBuffer,e.viewportSegments,r.paint,e.transform.zoom)}}(e,n))},line:function(e,r,n,i){if("translucent"===e.renderPass){var a=n.paint.get("line-opacity"),o=n.paint.get("line-width");if(0!==a.constantOr(1)&&0!==o.constantOr(1)){var s=e.depthModeForSublayer(0,Mt.ReadOnly),l=e.colorModeForRenderPass(),u=n.paint.get("line-dasharray"),c=n.paint.get("line-pattern"),f=c.constantOr(1),h=n.paint.get("line-gradient"),p=n.getCrossfadeParameters(),d=f?"linePattern":u?"lineSDF":h?"lineGradient":"line",v=e.context,g=v.gl,y=!0;if(h){v.activeTexture.set(g.TEXTURE0);var m=n.gradientTexture;if(!n.gradient)return;m||(m=n.gradientTexture=new t.Texture(v,n.gradient,g.RGBA)),m.bind(g.LINEAR,g.CLAMP_TO_EDGE)}for(var x=0,b=i;x<b.length;x+=1){var _=b[x],w=r.getTile(_);if(!f||w.patternsLoaded()){var T=w.getBucket(n);if(T){var k=T.programConfigurations.get(n.id),A=e.context.program.get(),M=e.useProgram(d,k),S=y||M.program!==A,E=c.constantOr(null);if(E&&w.imageAtlas){var L=w.imageAtlas,C=L.patternPositions[E.to.toString()],P=L.patternPositions[E.from.toString()];C&&P&&k.setConstantPatternPositions(C,P)}var O=f?Hr(e,w,n,p):u?qr(e,w,n,u,p):h?Vr(e,w,n):Ur(e,w,n);f?(v.activeTexture.set(g.TEXTURE0),w.imageAtlasTexture.bind(g.LINEAR,g.CLAMP_TO_EDGE),k.updatePaintBuffers(p)):u&&(S||e.lineAtlas.dirty)&&(v.activeTexture.set(g.TEXTURE0),e.lineAtlas.bind(v)),M.draw(v,g.TRIANGLES,s,e.stencilModeForClipping(_),l,Ct.disabled,O,n.id,T.layoutVertexBuffer,T.indexBuffer,T.segments,n.paint,e.transform.zoom,k),y=!1}}}}}},fill:function(e,r,n,i){var a=n.paint.get("fill-color"),o=n.paint.get("fill-opacity");if(0!==o.constantOr(1)){var s=e.colorModeForRenderPass(),l=n.paint.get("fill-pattern"),u=e.opaquePassEnabledForLayer()&&!l.constantOr(1)&&1===a.constantOr(t.Color.transparent).a&&1===o.constantOr(0)?"opaque":"translucent";if(e.renderPass===u){var c=e.depthModeForSublayer(1,"opaque"===e.renderPass?Mt.ReadWrite:Mt.ReadOnly);cn(e,r,n,i,c,s,!1)}if("translucent"===e.renderPass&&n.paint.get("fill-antialias")){var f=e.depthModeForSublayer(n.getPaintProperty("fill-outline-color")?2:0,Mt.ReadOnly);cn(e,r,n,i,f,s,!0)}}},"fill-extrusion":function(t,e,r,n){var i=r.paint.get("fill-extrusion-opacity");if(0!==i&&"translucent"===t.renderPass){var a=new Mt(t.context.gl.LEQUAL,Mt.ReadWrite,t.depthRangeFor3D);if(1!==i||r.paint.get("fill-extrusion-pattern").constantOr(1))fn(t,e,r,n,a,Et.disabled,Lt.disabled),fn(t,e,r,n,a,t.stencilModeFor3D(),t.colorModeForRenderPass());else{var o=t.colorModeForRenderPass();fn(t,e,r,n,a,Et.disabled,o)}}},hillshade:function(t,e,r,n){if("offscreen"===t.renderPass||"translucent"===t.renderPass){for(var i=t.context,a=e.getSource().maxzoom,o=t.depthModeForSublayer(0,Mt.ReadOnly),s=t.colorModeForRenderPass(),l="translucent"===t.renderPass?t.stencilConfigForOverlap(n):[{},n],u=l[0],c=0,f=l[1];c<f.length;c+=1){var h=f[c],p=e.getTile(h);p.needsHillshadePrepare&&"offscreen"===t.renderPass?pn(t,p,r,a,o,Et.disabled,s):"translucent"===t.renderPass&&hn(t,p,r,o,u[h.overscaledZ],s)}i.viewport.set([0,0,t.width,t.height])}},raster:function(t,e,r,n){if("translucent"===t.renderPass&&0!==r.paint.get("raster-opacity")&&n.length)for(var i=t.context,a=i.gl,o=e.getSource(),s=t.useProgram("raster"),l=t.colorModeForRenderPass(),u=o instanceof I?[{},n]:t.stencilConfigForOverlap(n),c=u[0],f=u[1],h=f[f.length-1].overscaledZ,p=!t.options.moving,d=0,v=f;d<v.length;d+=1){var g=v[d],y=t.depthModeForSublayer(g.overscaledZ-h,1===r.paint.get("raster-opacity")?Mt.ReadWrite:Mt.ReadOnly,a.LESS),m=e.getTile(g),x=t.transform.calculatePosMatrix(g.toUnwrapped(),p);m.registerFadeDuration(r.paint.get("raster-fade-duration"));var b=e.findLoadedParent(g,0),_=dn(m,b,e,r,t.transform),w=void 0,T=void 0,k="nearest"===r.paint.get("raster-resampling")?a.NEAREST:a.LINEAR;i.activeTexture.set(a.TEXTURE0),m.texture.bind(k,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST),i.activeTexture.set(a.TEXTURE1),b?(b.texture.bind(k,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST),w=Math.pow(2,b.tileID.overscaledZ-m.tileID.overscaledZ),T=[m.tileID.canonical.x*w%1,m.tileID.canonical.y*w%1]):m.texture.bind(k,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST);var A=Yr(x,T||[0,0],w||1,_,r);o instanceof I?s.draw(i,a.TRIANGLES,y,Et.disabled,l,Ct.disabled,A,r.id,o.boundsBuffer,t.quadTriangleIndexBuffer,o.boundsSegments):s.draw(i,a.TRIANGLES,y,c[g.overscaledZ],l,Ct.disabled,A,r.id,t.rasterBoundsBuffer,t.quadTriangleIndexBuffer,t.rasterBoundsSegments)}},background:function(t,e,r){var n=r.paint.get("background-color"),i=r.paint.get("background-opacity");if(0!==i){var a=t.context,o=a.gl,s=t.transform,l=s.tileSize,u=r.paint.get("background-pattern");if(!t.isPatternMissing(u)){var c=!u&&1===n.a&&1===i&&t.opaquePassEnabledForLayer()?"opaque":"translucent";if(t.renderPass===c){var f=Et.disabled,h=t.depthModeForSublayer(0,"opaque"===c?Mt.ReadWrite:Mt.ReadOnly),p=t.colorModeForRenderPass(),d=t.useProgram(u?"backgroundPattern":"background"),v=s.coveringTiles({tileSize:l});u&&(a.activeTexture.set(o.TEXTURE0),t.imageManager.bind(t.context));for(var g=r.getCrossfadeParameters(),y=0,m=v;y<m.length;y+=1){var x=m[y],b=t.transform.calculatePosMatrix(x.toUnwrapped()),_=u?tn(b,i,t,u,{tileID:x,tileSize:l},g):Qr(b,i,n);d.draw(a,o.TRIANGLES,h,f,p,Ct.disabled,_,r.id,t.tileExtentBuffer,t.quadTriangleIndexBuffer,t.tileExtentSegments)}}}}},debug:function(t,e,r){for(var n=0;n<r.length;n++)kn(t,e,r[n])},custom:function(t,e,r){var n=t.context,i=r.implementation;if("offscreen"===t.renderPass){var a=i.prerender;a&&(t.setCustomLayerDefaults(),n.setColorMode(t.colorModeForRenderPass()),a.call(i,n.gl,t.transform.customLayerMatrix()),n.setDirty(),t.setBaseState())}else if("translucent"===t.renderPass){t.setCustomLayerDefaults(),n.setColorMode(t.colorModeForRenderPass()),n.setStencilMode(Et.disabled);var o="3d"===i.renderingMode?new Mt(t.context.gl.LEQUAL,Mt.ReadWrite,t.depthRangeFor3D):t.depthModeForSublayer(0,Mt.ReadOnly);n.setDepthMode(o),i.render(n.gl,t.transform.customLayerMatrix()),n.setDirty(),t.setBaseState(),n.bindFramebuffer.set(null)}}},Mn=function(t,e){this.context=new Pt(t),this.transform=e,this._tileTextures={},this.setup(),this.numSublayers=Ot.maxUnderzooming+Ot.maxOverzooming+1,this.depthEpsilon=1/Math.pow(2,16),this.crossTileSymbolIndex=new Ve,this.gpuTimers={}};Mn.prototype.resize=function(e,r){if(this.width=e*t.browser.devicePixelRatio,this.height=r*t.browser.devicePixelRatio,this.context.viewport.set([0,0,this.width,this.height]),this.style)for(var n=0,i=this.style._order;n<i.length;n+=1){var a=i[n];this.style._layers[a].resize()}},Mn.prototype.setup=function(){var e=this.context,r=new t.StructArrayLayout2i4;r.emplaceBack(0,0),r.emplaceBack(t.EXTENT,0),r.emplaceBack(0,t.EXTENT),r.emplaceBack(t.EXTENT,t.EXTENT),this.tileExtentBuffer=e.createVertexBuffer(r,We.members),this.tileExtentSegments=t.SegmentVector.simpleSegment(0,0,4,2);var n=new t.StructArrayLayout2i4;n.emplaceBack(0,0),n.emplaceBack(t.EXTENT,0),n.emplaceBack(0,t.EXTENT),n.emplaceBack(t.EXTENT,t.EXTENT),this.debugBuffer=e.createVertexBuffer(n,We.members),this.debugSegments=t.SegmentVector.simpleSegment(0,0,4,5);var i=new t.StructArrayLayout4i8;i.emplaceBack(0,0,0,0),i.emplaceBack(t.EXTENT,0,t.EXTENT,0),i.emplaceBack(0,t.EXTENT,0,t.EXTENT),i.emplaceBack(t.EXTENT,t.EXTENT,t.EXTENT,t.EXTENT),this.rasterBoundsBuffer=e.createVertexBuffer(i,O.members),this.rasterBoundsSegments=t.SegmentVector.simpleSegment(0,0,4,2);var a=new t.StructArrayLayout2i4;a.emplaceBack(0,0),a.emplaceBack(1,0),a.emplaceBack(0,1),a.emplaceBack(1,1),this.viewportBuffer=e.createVertexBuffer(a,We.members),this.viewportSegments=t.SegmentVector.simpleSegment(0,0,4,2);var o=new t.StructArrayLayout1ui2;o.emplaceBack(0),o.emplaceBack(1),o.emplaceBack(3),o.emplaceBack(2),o.emplaceBack(0),this.tileBorderIndexBuffer=e.createIndexBuffer(o);var s=new t.StructArrayLayout3ui6;s.emplaceBack(0,1,2),s.emplaceBack(2,1,3),this.quadTriangleIndexBuffer=e.createIndexBuffer(s),this.emptyTexture=new t.Texture(e,{width:1,height:1,data:new Uint8Array([0,0,0,0])},e.gl.RGBA);var l=this.context.gl;this.stencilClearMode=new Et({func:l.ALWAYS,mask:0},0,255,l.ZERO,l.ZERO,l.ZERO)},Mn.prototype.clearStencil=function(){var e=this.context,r=e.gl;this.nextStencilID=1,this.currentStencilSource=void 0;var n=t.create();t.ortho(n,0,this.width,this.height,0,0,1),t.scale(n,n,[r.drawingBufferWidth,r.drawingBufferHeight,0]),this.useProgram("clippingMask").draw(e,r.TRIANGLES,Mt.disabled,this.stencilClearMode,Lt.disabled,Ct.disabled,Rr(n),"$clipping",this.viewportBuffer,this.quadTriangleIndexBuffer,this.viewportSegments)},Mn.prototype._renderTileClippingMasks=function(t,e){if(this.currentStencilSource!==t.source&&t.isTileClipped()&&e&&e.length){this.currentStencilSource=t.source;var r=this.context,n=r.gl;this.nextStencilID+e.length>256&&this.clearStencil(),r.setColorMode(Lt.disabled),r.setDepthMode(Mt.disabled);var i=this.useProgram("clippingMask");this._tileClippingMaskIDs={};for(var a=0,o=e;a<o.length;a+=1){var s=o[a],l=this._tileClippingMaskIDs[s.key]=this.nextStencilID++;i.draw(r,n.TRIANGLES,Mt.disabled,new Et({func:n.ALWAYS,mask:0},l,255,n.KEEP,n.KEEP,n.REPLACE),Lt.disabled,Ct.disabled,Rr(s.posMatrix),"$clipping",this.tileExtentBuffer,this.quadTriangleIndexBuffer,this.tileExtentSegments)}}},Mn.prototype.stencilModeFor3D=function(){this.currentStencilSource=void 0,this.nextStencilID+1>256&&this.clearStencil();var t=this.nextStencilID++,e=this.context.gl;return new Et({func:e.NOTEQUAL,mask:255},t,255,e.KEEP,e.KEEP,e.REPLACE)},Mn.prototype.stencilModeForClipping=function(t){var e=this.context.gl;return new Et({func:e.EQUAL,mask:255},this._tileClippingMaskIDs[t.key],0,e.KEEP,e.KEEP,e.REPLACE)},Mn.prototype.stencilConfigForOverlap=function(t){var e,r=this.context.gl,n=t.sort((function(t,e){return e.overscaledZ-t.overscaledZ})),i=n[n.length-1].overscaledZ,a=n[0].overscaledZ-i+1;if(a>1){this.currentStencilSource=void 0,this.nextStencilID+a>256&&this.clearStencil();for(var o={},s=0;s<a;s++)o[s+i]=new Et({func:r.GEQUAL,mask:255},s+this.nextStencilID,255,r.KEEP,r.KEEP,r.REPLACE);return this.nextStencilID+=a,[o,n]}return[(e={},e[i]=Et.disabled,e),n]},Mn.prototype.colorModeForRenderPass=function(){var e=this.context.gl;if(this._showOverdrawInspector){var r=1/8;return new Lt([e.CONSTANT_COLOR,e.ONE],new t.Color(r,r,r,0),[!0,!0,!0,!0])}return"opaque"===this.renderPass?Lt.unblended:Lt.alphaBlended},Mn.prototype.depthModeForSublayer=function(t,e,r){if(!this.opaquePassEnabledForLayer())return Mt.disabled;var n=1-((1+this.currentLayer)*this.numSublayers+t)*this.depthEpsilon;return new Mt(r||this.context.gl.LEQUAL,e,[n,n])},Mn.prototype.opaquePassEnabledForLayer=function(){return this.currentLayer<this.opaquePassCutoff},Mn.prototype.render=function(e,r){var n=this;this.style=e,this.options=r,this.lineAtlas=e.lineAtlas,this.imageManager=e.imageManager,this.glyphManager=e.glyphManager,this.symbolFadeChange=e.placement.symbolFadeChange(t.browser.now()),this.imageManager.beginFrame();var i=this.style._order,a=this.style.sourceCaches;for(var o in a){var s=a[o];s.used&&s.prepare(this.context)}var l,u,c={},f={},h={};for(var p in a){var d=a[p];c[p]=d.getVisibleCoordinates(),f[p]=c[p].slice().reverse(),h[p]=d.getVisibleCoordinates(!0).reverse()}this.opaquePassCutoff=1/0;for(var v=0;v<i.length;v++){var g=i[v];if(this.style._layers[g].is3D()){this.opaquePassCutoff=v;break}}this.renderPass="offscreen";for(var y=0,m=i;y<m.length;y+=1){var x=m[y],b=this.style._layers[x];if(b.hasOffscreenPass()&&!b.isHidden(this.transform.zoom)){var _=f[b.source];("custom"===b.type||_.length)&&this.renderLayer(this,a[b.source],b,_)}}for(this.context.bindFramebuffer.set(null),this.context.clear({color:r.showOverdrawInspector?t.Color.black:t.Color.transparent,depth:1}),this.clearStencil(),this._showOverdrawInspector=r.showOverdrawInspector,this.depthRangeFor3D=[0,1-(e._order.length+2)*this.numSublayers*this.depthEpsilon],this.renderPass="opaque",this.currentLayer=i.length-1;this.currentLayer>=0;this.currentLayer--){var w=this.style._layers[i[this.currentLayer]],T=a[w.source],k=c[w.source];this._renderTileClippingMasks(w,k),this.renderLayer(this,T,w,k)}for(this.renderPass="translucent",this.currentLayer=0;this.currentLayer<i.length;this.currentLayer++){var A=this.style._layers[i[this.currentLayer]],M=a[A.source],S=("symbol"===A.type?h:f)[A.source];this._renderTileClippingMasks(A,c[A.source]),this.renderLayer(this,M,A,S)}this.options.showTileBoundaries&&(t.values(this.style._layers).forEach((function(t){t.source&&!t.isHidden(n.transform.zoom)&&(t.source!==(u&&u.id)&&(u=n.style.sourceCaches[t.source]),(!l||l.getSource().maxzoom<u.getSource().maxzoom)&&(l=u))})),l&&An.debug(this,l,l.getVisibleCoordinates())),this.options.showPadding&&bn(this),this.context.setDefault()},Mn.prototype.renderLayer=function(t,e,r,n){r.isHidden(this.transform.zoom)||("background"===r.type||"custom"===r.type||n.length)&&(this.id=r.id,this.gpuTimingStart(r),An[r.type](t,e,r,n,this.style.placement.variableOffsets),this.gpuTimingEnd())},Mn.prototype.gpuTimingStart=function(t){if(this.options.gpuTiming){var e=this.context.extTimerQuery,r=this.gpuTimers[t.id];r||(r=this.gpuTimers[t.id]={calls:0,cpuTime:0,query:e.createQueryEXT()}),r.calls++,e.beginQueryEXT(e.TIME_ELAPSED_EXT,r.query)}},Mn.prototype.gpuTimingEnd=function(){if(this.options.gpuTiming){var t=this.context.extTimerQuery;t.endQueryEXT(t.TIME_ELAPSED_EXT)}},Mn.prototype.collectGpuTimers=function(){var t=this.gpuTimers;return this.gpuTimers={},t},Mn.prototype.queryGpuTimers=function(t){var e={};for(var r in t){var n=t[r],i=this.context.extTimerQuery,a=i.getQueryObjectEXT(n.query,i.QUERY_RESULT_EXT)/1e6;i.deleteQueryEXT(n.query),e[r]=a}return e},Mn.prototype.translatePosMatrix=function(e,r,n,i,a){if(!n[0]&&!n[1])return e;var o=a?"map"===i?this.transform.angle:0:"viewport"===i?-this.transform.angle:0;if(o){var s=Math.sin(o),l=Math.cos(o);n=[n[0]*l-n[1]*s,n[0]*s+n[1]*l]}var u=[a?n[0]:ge(r,n[0],this.transform.zoom),a?n[1]:ge(r,n[1],this.transform.zoom),0],c=new Float32Array(16);return t.translate(c,e,u),c},Mn.prototype.saveTileTexture=function(t){var e=this._tileTextures[t.size[0]];e?e.push(t):this._tileTextures[t.size[0]]=[t]},Mn.prototype.getTileTexture=function(t){var e=this._tileTextures[t];return e&&e.length>0?e.pop():null},Mn.prototype.isPatternMissing=function(t){if(!t)return!1;if(!t.from||!t.to)return!0;var e=this.imageManager.getPattern(t.from.toString()),r=this.imageManager.getPattern(t.to.toString());return!e||!r},Mn.prototype.useProgram=function(t,e){this.cache=this.cache||{};var r=""+t+(e?e.cacheKey:"")+(this._showOverdrawInspector?"/overdraw":"");return this.cache[r]||(this.cache[r]=new kr(this.context,wr[t],e,en[t],this._showOverdrawInspector)),this.cache[r]},Mn.prototype.setCustomLayerDefaults=function(){this.context.unbindVAO(),this.context.cullFace.setDefault(),this.context.activeTexture.setDefault(),this.context.pixelStoreUnpack.setDefault(),this.context.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.context.pixelStoreUnpackFlipY.setDefault()},Mn.prototype.setBaseState=function(){var t=this.context.gl;this.context.cullFace.set(!1),this.context.viewport.set([0,0,this.width,this.height]),this.context.blendEquation.set(t.FUNC_ADD)},Mn.prototype.initDebugOverlayCanvas=function(){if(null==this.debugOverlayCanvas){this.debugOverlayCanvas=t.window.document.createElement("canvas"),this.debugOverlayCanvas.width=512,this.debugOverlayCanvas.height=512;var e=this.context.gl;this.debugOverlayTexture=new t.Texture(this.context,this.debugOverlayCanvas,e.RGBA)}},Mn.prototype.destroy=function(){this.emptyTexture.destroy(),this.debugOverlayTexture&&this.debugOverlayTexture.destroy()};var Sn=function(t,e){this.points=t,this.planes=e};Sn.fromInvProjectionMatrix=function(e,r,n){var i=Math.pow(2,n),a=[[-1,1,-1,1],[1,1,-1,1],[1,-1,-1,1],[-1,-1,-1,1],[-1,1,1,1],[1,1,1,1],[1,-1,1,1],[-1,-1,1,1]].map((function(r){return t.transformMat4([],r,e)})).map((function(e){return t.scale$1([],e,1/e[3]/r*i)})),o=[[0,1,2],[6,5,4],[0,3,7],[2,1,5],[3,2,6],[0,4,5]].map((function(e){var r=t.sub([],a[e[0]],a[e[1]]),n=t.sub([],a[e[2]],a[e[1]]),i=t.normalize([],t.cross([],r,n)),o=-t.dot(i,a[e[1]]);return i.concat(o)}));return new Sn(a,o)};var En=function(e,r){this.min=e,this.max=r,this.center=t.scale$2([],t.add([],this.min,this.max),.5)};En.prototype.quadrant=function(e){for(var r=[e%2==0,e<2],n=t.clone$2(this.min),i=t.clone$2(this.max),a=0;a<r.length;a++)n[a]=r[a]?this.min[a]:this.center[a],i[a]=r[a]?this.center[a]:this.max[a];return i[2]=this.max[2],new En(n,i)},En.prototype.distanceX=function(t){return Math.max(Math.min(this.max[0],t[0]),this.min[0])-t[0]},En.prototype.distanceY=function(t){return Math.max(Math.min(this.max[1],t[1]),this.min[1])-t[1]},En.prototype.intersects=function(e){for(var r=[[this.min[0],this.min[1],0,1],[this.max[0],this.min[1],0,1],[this.max[0],this.max[1],0,1],[this.min[0],this.max[1],0,1]],n=!0,i=0;i<e.planes.length;i++){for(var a=e.planes[i],o=0,s=0;s<r.length;s++)o+=t.dot$1(a,r[s])>=0;if(0===o)return 0;o!==r.length&&(n=!1)}if(n)return 2;for(var l=0;l<3;l++){for(var u=Number.MAX_VALUE,c=-Number.MAX_VALUE,f=0;f<e.points.length;f++){var h=e.points[f][l]-this.min[l];u=Math.min(u,h),c=Math.max(c,h)}if(c<0||u>this.max[l]-this.min[l])return 0}return 1};var Ln=function(t,e,r,n){if(void 0===t&&(t=0),void 0===e&&(e=0),void 0===r&&(r=0),void 0===n&&(n=0),isNaN(t)||t<0||isNaN(e)||e<0||isNaN(r)||r<0||isNaN(n)||n<0)throw new Error("Invalid value for edge-insets, top, bottom, left and right must all be numbers");this.top=t,this.bottom=e,this.left=r,this.right=n};Ln.prototype.interpolate=function(e,r,n){return null!=r.top&&null!=e.top&&(this.top=t.number(e.top,r.top,n)),null!=r.bottom&&null!=e.bottom&&(this.bottom=t.number(e.bottom,r.bottom,n)),null!=r.left&&null!=e.left&&(this.left=t.number(e.left,r.left,n)),null!=r.right&&null!=e.right&&(this.right=t.number(e.right,r.right,n)),this},Ln.prototype.getCenter=function(e,r){var n=t.clamp((this.left+e-this.right)/2,0,e),i=t.clamp((this.top+r-this.bottom)/2,0,r);return new t.Point(n,i)},Ln.prototype.equals=function(t){return this.top===t.top&&this.bottom===t.bottom&&this.left===t.left&&this.right===t.right},Ln.prototype.clone=function(){return new Ln(this.top,this.bottom,this.left,this.right)},Ln.prototype.toJSON=function(){return{top:this.top,bottom:this.bottom,left:this.left,right:this.right}};var Cn=function(e,r,n,i,a){this.tileSize=512,this.maxValidLatitude=85.051129,this._renderWorldCopies=void 0===a||a,this._minZoom=e||0,this._maxZoom=r||22,this._minPitch=null==n?0:n,this._maxPitch=null==i?60:i,this.setMaxBounds(),this.width=0,this.height=0,this._center=new t.LngLat(0,0),this.zoom=0,this.angle=0,this._fov=.6435011087932844,this._pitch=0,this._unmodified=!0,this._edgeInsets=new Ln,this._posMatrixCache={},this._alignedPosMatrixCache={}},Pn={minZoom:{configurable:!0},maxZoom:{configurable:!0},minPitch:{configurable:!0},maxPitch:{configurable:!0},renderWorldCopies:{configurable:!0},worldSize:{configurable:!0},centerOffset:{configurable:!0},size:{configurable:!0},bearing:{configurable:!0},pitch:{configurable:!0},fov:{configurable:!0},zoom:{configurable:!0},center:{configurable:!0},padding:{configurable:!0},centerPoint:{configurable:!0},unmodified:{configurable:!0},point:{configurable:!0}};Cn.prototype.clone=function(){var t=new Cn(this._minZoom,this._maxZoom,this._minPitch,this.maxPitch,this._renderWorldCopies);return t.tileSize=this.tileSize,t.latRange=this.latRange,t.width=this.width,t.height=this.height,t._center=this._center,t.zoom=this.zoom,t.angle=this.angle,t._fov=this._fov,t._pitch=this._pitch,t._unmodified=this._unmodified,t._edgeInsets=this._edgeInsets.clone(),t._calcMatrices(),t},Pn.minZoom.get=function(){return this._minZoom},Pn.minZoom.set=function(t){this._minZoom!==t&&(this._minZoom=t,this.zoom=Math.max(this.zoom,t))},Pn.maxZoom.get=function(){return this._maxZoom},Pn.maxZoom.set=function(t){this._maxZoom!==t&&(this._maxZoom=t,this.zoom=Math.min(this.zoom,t))},Pn.minPitch.get=function(){return this._minPitch},Pn.minPitch.set=function(t){this._minPitch!==t&&(this._minPitch=t,this.pitch=Math.max(this.pitch,t))},Pn.maxPitch.get=function(){return this._maxPitch},Pn.maxPitch.set=function(t){this._maxPitch!==t&&(this._maxPitch=t,this.pitch=Math.min(this.pitch,t))},Pn.renderWorldCopies.get=function(){return this._renderWorldCopies},Pn.renderWorldCopies.set=function(t){void 0===t?t=!0:null===t&&(t=!1),this._renderWorldCopies=t},Pn.worldSize.get=function(){return this.tileSize*this.scale},Pn.centerOffset.get=function(){return this.centerPoint._sub(this.size._div(2))},Pn.size.get=function(){return new t.Point(this.width,this.height)},Pn.bearing.get=function(){return-this.angle/Math.PI*180},Pn.bearing.set=function(e){var r=-t.wrap(e,-180,180)*Math.PI/180;this.angle!==r&&(this._unmodified=!1,this.angle=r,this._calcMatrices(),this.rotationMatrix=t.create$2(),t.rotate(this.rotationMatrix,this.rotationMatrix,this.angle))},Pn.pitch.get=function(){return this._pitch/Math.PI*180},Pn.pitch.set=function(e){var r=t.clamp(e,this.minPitch,this.maxPitch)/180*Math.PI;this._pitch!==r&&(this._unmodified=!1,this._pitch=r,this._calcMatrices())},Pn.fov.get=function(){return this._fov/Math.PI*180},Pn.fov.set=function(t){t=Math.max(.01,Math.min(60,t)),this._fov!==t&&(this._unmodified=!1,this._fov=t/180*Math.PI,this._calcMatrices())},Pn.zoom.get=function(){return this._zoom},Pn.zoom.set=function(t){var e=Math.min(Math.max(t,this.minZoom),this.maxZoom);this._zoom!==e&&(this._unmodified=!1,this._zoom=e,this.scale=this.zoomScale(e),this.tileZoom=Math.floor(e),this.zoomFraction=e-this.tileZoom,this._constrain(),this._calcMatrices())},Pn.center.get=function(){return this._center},Pn.center.set=function(t){t.lat===this._center.lat&&t.lng===this._center.lng||(this._unmodified=!1,this._center=t,this._constrain(),this._calcMatrices())},Pn.padding.get=function(){return this._edgeInsets.toJSON()},Pn.padding.set=function(t){this._edgeInsets.equals(t)||(this._unmodified=!1,this._edgeInsets.interpolate(this._edgeInsets,t,1),this._calcMatrices())},Pn.centerPoint.get=function(){return this._edgeInsets.getCenter(this.width,this.height)},Cn.prototype.isPaddingEqual=function(t){return this._edgeInsets.equals(t)},Cn.prototype.interpolatePadding=function(t,e,r){this._unmodified=!1,this._edgeInsets.interpolate(t,e,r),this._constrain(),this._calcMatrices()},Cn.prototype.coveringZoomLevel=function(t){var e=(t.roundZoom?Math.round:Math.floor)(this.zoom+this.scaleZoom(this.tileSize/t.tileSize));return Math.max(0,e)},Cn.prototype.getVisibleUnwrappedCoordinates=function(e){var r=[new t.UnwrappedTileID(0,e)];if(this._renderWorldCopies)for(var n=this.pointCoordinate(new t.Point(0,0)),i=this.pointCoordinate(new t.Point(this.width,0)),a=this.pointCoordinate(new t.Point(this.width,this.height)),o=this.pointCoordinate(new t.Point(0,this.height)),s=Math.floor(Math.min(n.x,i.x,a.x,o.x)),l=Math.floor(Math.max(n.x,i.x,a.x,o.x)),u=s-1;u<=l+1;u++)0!==u&&r.push(new t.UnwrappedTileID(u,e));return r},Cn.prototype.coveringTiles=function(e){var r=this.coveringZoomLevel(e),n=r;if(void 0!==e.minzoom&&r<e.minzoom)return[];void 0!==e.maxzoom&&r>e.maxzoom&&(r=e.maxzoom);var i=t.MercatorCoordinate.fromLngLat(this.center),a=Math.pow(2,r),o=[a*i.x,a*i.y,0],s=Sn.fromInvProjectionMatrix(this.invProjMatrix,this.worldSize,r),l=e.minzoom||0;this.pitch<=60&&this._edgeInsets.top<.1&&(l=r);var u=function(t){return{aabb:new En([t*a,0,0],[(t+1)*a,a,0]),zoom:0,x:0,y:0,wrap:t,fullyVisible:!1}},c=[],f=[],h=r,p=e.reparseOverscaled?n:r;if(this._renderWorldCopies)for(var d=1;d<=3;d++)c.push(u(-d)),c.push(u(d));for(c.push(u(0));c.length>0;){var v=c.pop(),g=v.x,y=v.y,m=v.fullyVisible;if(!m){var x=v.aabb.intersects(s);if(0===x)continue;m=2===x}var b=v.aabb.distanceX(o),_=v.aabb.distanceY(o),w=Math.max(Math.abs(b),Math.abs(_)),T=3+(1<<h-v.zoom)-2;if(v.zoom===h||w>T&&v.zoom>=l)f.push({tileID:new t.OverscaledTileID(v.zoom===h?p:v.zoom,v.wrap,v.zoom,g,y),distanceSq:t.sqrLen([o[0]-.5-g,o[1]-.5-y])});else for(var k=0;k<4;k++){var A=(g<<1)+k%2,M=(y<<1)+(k>>1);c.push({aabb:v.aabb.quadrant(k),zoom:v.zoom+1,x:A,y:M,wrap:v.wrap,fullyVisible:m})}}return f.sort((function(t,e){return t.distanceSq-e.distanceSq})).map((function(t){return t.tileID}))},Cn.prototype.resize=function(t,e){this.width=t,this.height=e,this.pixelsToGLUnits=[2/t,-2/e],this._constrain(),this._calcMatrices()},Pn.unmodified.get=function(){return this._unmodified},Cn.prototype.zoomScale=function(t){return Math.pow(2,t)},Cn.prototype.scaleZoom=function(t){return Math.log(t)/Math.LN2},Cn.prototype.project=function(e){var r=t.clamp(e.lat,-this.maxValidLatitude,this.maxValidLatitude);return new t.Point(t.mercatorXfromLng(e.lng)*this.worldSize,t.mercatorYfromLat(r)*this.worldSize)},Cn.prototype.unproject=function(e){return new t.MercatorCoordinate(e.x/this.worldSize,e.y/this.worldSize).toLngLat()},Pn.point.get=function(){return this.project(this.center)},Cn.prototype.setLocationAtPoint=function(e,r){var n=this.pointCoordinate(r),i=this.pointCoordinate(this.centerPoint),a=this.locationCoordinate(e),o=new t.MercatorCoordinate(a.x-(n.x-i.x),a.y-(n.y-i.y));this.center=this.coordinateLocation(o),this._renderWorldCopies&&(this.center=this.center.wrap())},Cn.prototype.locationPoint=function(t){return this.coordinatePoint(this.locationCoordinate(t))},Cn.prototype.pointLocation=function(t){return this.coordinateLocation(this.pointCoordinate(t))},Cn.prototype.locationCoordinate=function(e){return t.MercatorCoordinate.fromLngLat(e)},Cn.prototype.coordinateLocation=function(t){return t.toLngLat()},Cn.prototype.pointCoordinate=function(e){var r=[e.x,e.y,0,1],n=[e.x,e.y,1,1];t.transformMat4(r,r,this.pixelMatrixInverse),t.transformMat4(n,n,this.pixelMatrixInverse);var i=r[3],a=n[3],o=r[0]/i,s=n[0]/a,l=r[1]/i,u=n[1]/a,c=r[2]/i,f=n[2]/a,h=c===f?0:(0-c)/(f-c);return new t.MercatorCoordinate(t.number(o,s,h)/this.worldSize,t.number(l,u,h)/this.worldSize)},Cn.prototype.coordinatePoint=function(e){var r=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(r,r,this.pixelMatrix),new t.Point(r[0]/r[3],r[1]/r[3])},Cn.prototype.getBounds=function(){return(new t.LngLatBounds).extend(this.pointLocation(new t.Point(0,0))).extend(this.pointLocation(new t.Point(this.width,0))).extend(this.pointLocation(new t.Point(this.width,this.height))).extend(this.pointLocation(new t.Point(0,this.height)))},Cn.prototype.getMaxBounds=function(){return this.latRange&&2===this.latRange.length&&this.lngRange&&2===this.lngRange.length?new t.LngLatBounds([this.lngRange[0],this.latRange[0]],[this.lngRange[1],this.latRange[1]]):null},Cn.prototype.setMaxBounds=function(t){t?(this.lngRange=[t.getWest(),t.getEast()],this.latRange=[t.getSouth(),t.getNorth()],this._constrain()):(this.lngRange=null,this.latRange=[-this.maxValidLatitude,this.maxValidLatitude])},Cn.prototype.calculatePosMatrix=function(e,r){void 0===r&&(r=!1);var n=e.key,i=r?this._alignedPosMatrixCache:this._posMatrixCache;if(i[n])return i[n];var a=e.canonical,o=this.worldSize/this.zoomScale(a.z),s=a.x+Math.pow(2,a.z)*e.wrap,l=t.identity(new Float64Array(16));return t.translate(l,l,[s*o,a.y*o,0]),t.scale(l,l,[o/t.EXTENT,o/t.EXTENT,1]),t.multiply(l,r?this.alignedProjMatrix:this.projMatrix,l),i[n]=new Float32Array(l),i[n]},Cn.prototype.customLayerMatrix=function(){return this.mercatorMatrix.slice()},Cn.prototype._constrain=function(){if(this.center&&this.width&&this.height&&!this._constraining){this._constraining=!0;var e,r,n,i,a=-90,o=90,s=-180,l=180,u=this.size,c=this._unmodified;if(this.latRange){var f=this.latRange;a=t.mercatorYfromLat(f[1])*this.worldSize,e=(o=t.mercatorYfromLat(f[0])*this.worldSize)-a<u.y?u.y/(o-a):0}if(this.lngRange){var h=this.lngRange;s=t.mercatorXfromLng(h[0])*this.worldSize,r=(l=t.mercatorXfromLng(h[1])*this.worldSize)-s<u.x?u.x/(l-s):0}var p=this.point,d=Math.max(r||0,e||0);if(d)return this.center=this.unproject(new t.Point(r?(l+s)/2:p.x,e?(o+a)/2:p.y)),this.zoom+=this.scaleZoom(d),this._unmodified=c,void(this._constraining=!1);if(this.latRange){var v=p.y,g=u.y/2;v-g<a&&(i=a+g),v+g>o&&(i=o-g)}if(this.lngRange){var y=p.x,m=u.x/2;y-m<s&&(n=s+m),y+m>l&&(n=l-m)}void 0===n&&void 0===i||(this.center=this.unproject(new t.Point(void 0!==n?n:p.x,void 0!==i?i:p.y))),this._unmodified=c,this._constraining=!1}},Cn.prototype._calcMatrices=function(){if(this.height){var e=this._fov/2,r=this.centerOffset;this.cameraToCenterDistance=.5/Math.tan(e)*this.height;var n=Math.PI/2+this._pitch,i=this._fov*(.5+r.y/this.height),a=Math.sin(i)*this.cameraToCenterDistance/Math.sin(t.clamp(Math.PI-n-i,.01,Math.PI-.01)),o=this.point,s=o.x,l=o.y,u=1.01*(Math.cos(Math.PI/2-this._pitch)*a+this.cameraToCenterDistance),c=this.height/50,f=new Float64Array(16);t.perspective(f,this._fov,this.width/this.height,c,u),f[8]=2*-r.x/this.width,f[9]=2*r.y/this.height,t.scale(f,f,[1,-1,1]),t.translate(f,f,[0,0,-this.cameraToCenterDistance]),t.rotateX(f,f,this._pitch),t.rotateZ(f,f,this.angle),t.translate(f,f,[-s,-l,0]),this.mercatorMatrix=t.scale([],f,[this.worldSize,this.worldSize,this.worldSize]),t.scale(f,f,[1,1,t.mercatorZfromAltitude(1,this.center.lat)*this.worldSize,1]),this.projMatrix=f,this.invProjMatrix=t.invert([],this.projMatrix);var h=this.width%2/2,p=this.height%2/2,d=Math.cos(this.angle),v=Math.sin(this.angle),g=s-Math.round(s)+d*h+v*p,y=l-Math.round(l)+d*p+v*h,m=new Float64Array(f);if(t.translate(m,m,[g>.5?g-1:g,y>.5?y-1:y,0]),this.alignedProjMatrix=m,f=t.create(),t.scale(f,f,[this.width/2,-this.height/2,1]),t.translate(f,f,[1,-1,0]),this.labelPlaneMatrix=f,f=t.create(),t.scale(f,f,[1,-1,1]),t.translate(f,f,[-1,-1,0]),t.scale(f,f,[2/this.width,2/this.height,1]),this.glCoordMatrix=f,this.pixelMatrix=t.multiply(new Float64Array(16),this.labelPlaneMatrix,this.projMatrix),!(f=t.invert(new Float64Array(16),this.pixelMatrix)))throw new Error("failed to invert matrix");this.pixelMatrixInverse=f,this._posMatrixCache={},this._alignedPosMatrixCache={}}},Cn.prototype.maxPitchScaleFactor=function(){if(!this.pixelMatrixInverse)return 1;var e=this.pointCoordinate(new t.Point(0,0)),r=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(r,r,this.pixelMatrix)[3]/this.cameraToCenterDistance},Cn.prototype.getCameraPoint=function(){var e=this._pitch,r=Math.tan(e)*(this.cameraToCenterDistance||1);return this.centerPoint.add(new t.Point(0,r))},Cn.prototype.getCameraQueryGeometry=function(e){var r=this.getCameraPoint();if(1===e.length)return[e[0],r];for(var n=r.x,i=r.y,a=r.x,o=r.y,s=0,l=e;s<l.length;s+=1){var u=l[s];n=Math.min(n,u.x),i=Math.min(i,u.y),a=Math.max(a,u.x),o=Math.max(o,u.y)}return[new t.Point(n,i),new t.Point(a,i),new t.Point(a,o),new t.Point(n,o),new t.Point(n,i)]},Object.defineProperties(Cn.prototype,Pn);var On=function(e){var r,n,i,a,o;this._hashName=e&&encodeURIComponent(e),t.bindAll(["_getCurrentHash","_onHashChange","_updateHash"],this),this._updateHash=(r=this._updateHashUnthrottled.bind(this),n=300,i=!1,a=null,o=function(){a=null,i&&(r(),a=setTimeout(o,n),i=!1)},function(){return i=!0,a||o(),a})};On.prototype.addTo=function(e){return this._map=e,t.window.addEventListener("hashchange",this._onHashChange,!1),this._map.on("moveend",this._updateHash),this},On.prototype.remove=function(){return t.window.removeEventListener("hashchange",this._onHashChange,!1),this._map.off("moveend",this._updateHash),clearTimeout(this._updateHash()),delete this._map,this},On.prototype.getHashString=function(e){var r=this._map.getCenter(),n=Math.round(100*this._map.getZoom())/100,i=Math.ceil((n*Math.LN2+Math.log(512/360/.5))/Math.LN10),a=Math.pow(10,i),o=Math.round(r.lng*a)/a,s=Math.round(r.lat*a)/a,l=this._map.getBearing(),u=this._map.getPitch(),c="";if(c+=e?"/"+o+"/"+s+"/"+n:n+"/"+s+"/"+o,(l||u)&&(c+="/"+Math.round(10*l)/10),u&&(c+="/"+Math.round(u)),this._hashName){var f=this._hashName,h=!1,p=t.window.location.hash.slice(1).split("&").map((function(t){var e=t.split("=")[0];return e===f?(h=!0,e+"="+c):t})).filter((function(t){return t}));return h||p.push(f+"="+c),"#"+p.join("&")}return"#"+c},On.prototype._getCurrentHash=function(){var e,r=this,n=t.window.location.hash.replace("#","");return this._hashName?(n.split("&").map((function(t){return t.split("=")})).forEach((function(t){t[0]===r._hashName&&(e=t)})),(e&&e[1]||"").split("/")):n.split("/")},On.prototype._onHashChange=function(){var t=this._getCurrentHash();if(t.length>=3&&!t.some((function(t){return isNaN(t)}))){var e=this._map.dragRotate.isEnabled()&&this._map.touchZoomRotate.isEnabled()?+(t[3]||0):this._map.getBearing();return this._map.jumpTo({center:[+t[2],+t[1]],zoom:+t[0],bearing:e,pitch:+(t[4]||0)}),!0}return!1},On.prototype._updateHashUnthrottled=function(){var e=this.getHashString();try{t.window.history.replaceState(t.window.history.state,"",e)}catch(t){}};var In={linearity:.3,easing:t.bezier(0,0,.3,1)},Dn=t.extend({deceleration:2500,maxSpeed:1400},In),zn=t.extend({deceleration:20,maxSpeed:1400},In),Rn=t.extend({deceleration:1e3,maxSpeed:360},In),Fn=t.extend({deceleration:1e3,maxSpeed:90},In),Bn=function(t){this._map=t,this.clear()};function Nn(t,e){(!t.duration||t.duration<e.duration)&&(t.duration=e.duration,t.easing=e.easing)}function jn(e,r,n){var i=n.maxSpeed,a=n.linearity,o=n.deceleration,s=t.clamp(e*a/(r/1e3),-i,i),l=Math.abs(s)/(o*a);return{easing:n.easing,duration:1e3*l,amount:s*(l/2)}}Bn.prototype.clear=function(){this._inertiaBuffer=[]},Bn.prototype.record=function(e){this._drainInertiaBuffer(),this._inertiaBuffer.push({time:t.browser.now(),settings:e})},Bn.prototype._drainInertiaBuffer=function(){for(var e=this._inertiaBuffer,r=t.browser.now();e.length>0&&r-e[0].time>160;)e.shift()},Bn.prototype._onMoveEnd=function(e){if(this._drainInertiaBuffer(),!(this._inertiaBuffer.length<2)){for(var r={zoom:0,bearing:0,pitch:0,pan:new t.Point(0,0),pinchAround:void 0,around:void 0},n=0,i=this._inertiaBuffer;n<i.length;n+=1){var a=i[n].settings;r.zoom+=a.zoomDelta||0,r.bearing+=a.bearingDelta||0,r.pitch+=a.pitchDelta||0,a.panDelta&&r.pan._add(a.panDelta),a.around&&(r.around=a.around),a.pinchAround&&(r.pinchAround=a.pinchAround)}var o=this._inertiaBuffer[this._inertiaBuffer.length-1].time-this._inertiaBuffer[0].time,s={};if(r.pan.mag()){var l=jn(r.pan.mag(),o,t.extend({},Dn,e||{}));s.offset=r.pan.mult(l.amount/r.pan.mag()),s.center=this._map.transform.center,Nn(s,l)}if(r.zoom){var u=jn(r.zoom,o,zn);s.zoom=this._map.transform.zoom+u.amount,Nn(s,u)}if(r.bearing){var c=jn(r.bearing,o,Rn);s.bearing=this._map.transform.bearing+t.clamp(c.amount,-179,179),Nn(s,c)}if(r.pitch){var f=jn(r.pitch,o,Fn);s.pitch=this._map.transform.pitch+f.amount,Nn(s,f)}if(s.zoom||s.bearing){var h=void 0===r.pinchAround?r.around:r.pinchAround;s.around=h?this._map.unproject(h):this._map.getCenter()}return this.clear(),t.extend(s,{noMoveStart:!0})}};var Un=function(e){function n(n,i,a,o){void 0===o&&(o={});var s=r.mousePos(i.getCanvasContainer(),a),l=i.unproject(s);e.call(this,n,t.extend({point:s,lngLat:l,originalEvent:a},o)),this._defaultPrevented=!1,this.target=i}e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n;var i={defaultPrevented:{configurable:!0}};return n.prototype.preventDefault=function(){this._defaultPrevented=!0},i.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(n.prototype,i),n}(t.Event),Vn=function(e){function n(n,i,a){var o="touchend"===n?a.changedTouches:a.touches,s=r.touchPos(i.getCanvasContainer(),o),l=s.map((function(t){return i.unproject(t)})),u=s.reduce((function(t,e,r,n){return t.add(e.div(n.length))}),new t.Point(0,0)),c=i.unproject(u);e.call(this,n,{points:s,point:u,lngLats:l,lngLat:c,originalEvent:a}),this._defaultPrevented=!1}e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n;var i={defaultPrevented:{configurable:!0}};return n.prototype.preventDefault=function(){this._defaultPrevented=!0},i.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(n.prototype,i),n}(t.Event),Hn=function(t){function e(e,r,n){t.call(this,e,{originalEvent:n}),this._defaultPrevented=!1}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={defaultPrevented:{configurable:!0}};return e.prototype.preventDefault=function(){this._defaultPrevented=!0},r.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(e.prototype,r),e}(t.Event),qn=function(t,e){this._map=t,this._clickTolerance=e.clickTolerance};qn.prototype.reset=function(){delete this._mousedownPos},qn.prototype.wheel=function(t){return this._firePreventable(new Hn(t.type,this._map,t))},qn.prototype.mousedown=function(t,e){return this._mousedownPos=e,this._firePreventable(new Un(t.type,this._map,t))},qn.prototype.mouseup=function(t){this._map.fire(new Un(t.type,this._map,t))},qn.prototype.click=function(t,e){this._mousedownPos&&this._mousedownPos.dist(e)>=this._clickTolerance||this._map.fire(new Un(t.type,this._map,t))},qn.prototype.dblclick=function(t){return this._firePreventable(new Un(t.type,this._map,t))},qn.prototype.mouseover=function(t){this._map.fire(new Un(t.type,this._map,t))},qn.prototype.mouseout=function(t){this._map.fire(new Un(t.type,this._map,t))},qn.prototype.touchstart=function(t){return this._firePreventable(new Vn(t.type,this._map,t))},qn.prototype.touchmove=function(t){this._map.fire(new Vn(t.type,this._map,t))},qn.prototype.touchend=function(t){this._map.fire(new Vn(t.type,this._map,t))},qn.prototype.touchcancel=function(t){this._map.fire(new Vn(t.type,this._map,t))},qn.prototype._firePreventable=function(t){if(this._map.fire(t),t.defaultPrevented)return{}},qn.prototype.isEnabled=function(){return!0},qn.prototype.isActive=function(){return!1},qn.prototype.enable=function(){},qn.prototype.disable=function(){};var Gn=function(t){this._map=t};Gn.prototype.reset=function(){this._delayContextMenu=!1,delete this._contextMenuEvent},Gn.prototype.mousemove=function(t){this._map.fire(new Un(t.type,this._map,t))},Gn.prototype.mousedown=function(){this._delayContextMenu=!0},Gn.prototype.mouseup=function(){this._delayContextMenu=!1,this._contextMenuEvent&&(this._map.fire(new Un("contextmenu",this._map,this._contextMenuEvent)),delete this._contextMenuEvent)},Gn.prototype.contextmenu=function(t){this._delayContextMenu?this._contextMenuEvent=t:this._map.fire(new Un(t.type,this._map,t)),this._map.listens("contextmenu")&&t.preventDefault()},Gn.prototype.isEnabled=function(){return!0},Gn.prototype.isActive=function(){return!1},Gn.prototype.enable=function(){},Gn.prototype.disable=function(){};var Zn=function(t,e){this._map=t,this._el=t.getCanvasContainer(),this._container=t.getContainer(),this._clickTolerance=e.clickTolerance||1};function Yn(t,e){for(var r={},n=0;n<t.length;n++)r[t[n].identifier]=e[n];return r}Zn.prototype.isEnabled=function(){return!!this._enabled},Zn.prototype.isActive=function(){return!!this._active},Zn.prototype.enable=function(){this.isEnabled()||(this._enabled=!0)},Zn.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},Zn.prototype.mousedown=function(t,e){this.isEnabled()&&t.shiftKey&&0===t.button&&(r.disableDrag(),this._startPos=this._lastPos=e,this._active=!0)},Zn.prototype.mousemoveWindow=function(t,e){if(this._active){var n=e;if(!(this._lastPos.equals(n)||!this._box&&n.dist(this._startPos)<this._clickTolerance)){var i=this._startPos;this._lastPos=n,this._box||(this._box=r.create("div","mapboxgl-boxzoom",this._container),this._container.classList.add("mapboxgl-crosshair"),this._fireEvent("boxzoomstart",t));var a=Math.min(i.x,n.x),o=Math.max(i.x,n.x),s=Math.min(i.y,n.y),l=Math.max(i.y,n.y);r.setTransform(this._box,"translate("+a+"px,"+s+"px)"),this._box.style.width=o-a+"px",this._box.style.height=l-s+"px"}}},Zn.prototype.mouseupWindow=function(e,n){var i=this;if(this._active&&0===e.button){var a=this._startPos,o=n;if(this.reset(),r.suppressClick(),a.x!==o.x||a.y!==o.y)return this._map.fire(new t.Event("boxzoomend",{originalEvent:e})),{cameraAnimation:function(t){return t.fitScreenCoordinates(a,o,i._map.getBearing(),{linear:!0})}};this._fireEvent("boxzoomcancel",e)}},Zn.prototype.keydown=function(t){this._active&&27===t.keyCode&&(this.reset(),this._fireEvent("boxzoomcancel",t))},Zn.prototype.reset=function(){this._active=!1,this._container.classList.remove("mapboxgl-crosshair"),this._box&&(r.remove(this._box),this._box=null),r.enableDrag(),delete this._startPos,delete this._lastPos},Zn.prototype._fireEvent=function(e,r){return this._map.fire(new t.Event(e,{originalEvent:r}))};var Wn=function(t){this.reset(),this.numTouches=t.numTouches};Wn.prototype.reset=function(){delete this.centroid,delete this.startTime,delete this.touches,this.aborted=!1},Wn.prototype.touchstart=function(e,r,n){(this.centroid||n.length>this.numTouches)&&(this.aborted=!0),this.aborted||(void 0===this.startTime&&(this.startTime=e.timeStamp),n.length===this.numTouches&&(this.centroid=function(e){for(var r=new t.Point(0,0),n=0,i=e;n<i.length;n+=1){var a=i[n];r._add(a)}return r.div(e.length)}(r),this.touches=Yn(n,r)))},Wn.prototype.touchmove=function(t,e,r){if(!this.aborted&&this.centroid){var n=Yn(r,e);for(var i in this.touches){var a=this.touches[i],o=n[i];(!o||o.dist(a)>30)&&(this.aborted=!0)}}},Wn.prototype.touchend=function(t,e,r){if((!this.centroid||t.timeStamp-this.startTime>500)&&(this.aborted=!0),0===r.length){var n=!this.aborted&&this.centroid;if(this.reset(),n)return n}};var Xn=function(t){this.singleTap=new Wn(t),this.numTaps=t.numTaps,this.reset()};Xn.prototype.reset=function(){this.lastTime=1/0,delete this.lastTap,this.count=0,this.singleTap.reset()},Xn.prototype.touchstart=function(t,e,r){this.singleTap.touchstart(t,e,r)},Xn.prototype.touchmove=function(t,e,r){this.singleTap.touchmove(t,e,r)},Xn.prototype.touchend=function(t,e,r){var n=this.singleTap.touchend(t,e,r);if(n){var i=t.timeStamp-this.lastTime<500,a=!this.lastTap||this.lastTap.dist(n)<30;if(i&&a||this.reset(),this.count++,this.lastTime=t.timeStamp,this.lastTap=n,this.count===this.numTaps)return this.reset(),n}};var Jn=function(){this._zoomIn=new Xn({numTouches:1,numTaps:2}),this._zoomOut=new Xn({numTouches:2,numTaps:1}),this.reset()};Jn.prototype.reset=function(){this._active=!1,this._zoomIn.reset(),this._zoomOut.reset()},Jn.prototype.touchstart=function(t,e,r){this._zoomIn.touchstart(t,e,r),this._zoomOut.touchstart(t,e,r)},Jn.prototype.touchmove=function(t,e,r){this._zoomIn.touchmove(t,e,r),this._zoomOut.touchmove(t,e,r)},Jn.prototype.touchend=function(t,e,r){var n=this,i=this._zoomIn.touchend(t,e,r),a=this._zoomOut.touchend(t,e,r);return i?(this._active=!0,t.preventDefault(),setTimeout((function(){return n.reset()}),0),{cameraAnimation:function(e){return e.easeTo({duration:300,zoom:e.getZoom()+1,around:e.unproject(i)},{originalEvent:t})}}):a?(this._active=!0,t.preventDefault(),setTimeout((function(){return n.reset()}),0),{cameraAnimation:function(e){return e.easeTo({duration:300,zoom:e.getZoom()-1,around:e.unproject(a)},{originalEvent:t})}}):void 0},Jn.prototype.touchcancel=function(){this.reset()},Jn.prototype.enable=function(){this._enabled=!0},Jn.prototype.disable=function(){this._enabled=!1,this.reset()},Jn.prototype.isEnabled=function(){return this._enabled},Jn.prototype.isActive=function(){return this._active};var Kn=function(t){this.reset(),this._clickTolerance=t.clickTolerance||1};Kn.prototype.reset=function(){this._active=!1,this._moved=!1,delete this._lastPoint,delete this._eventButton},Kn.prototype._correctButton=function(t,e){return!1},Kn.prototype._move=function(t,e){return{}},Kn.prototype.mousedown=function(t,e){if(!this._lastPoint){var n=r.mouseButton(t);this._correctButton(t,n)&&(this._lastPoint=e,this._eventButton=n)}},Kn.prototype.mousemoveWindow=function(t,e){var r=this._lastPoint;if(r&&(t.preventDefault(),this._moved||!(e.dist(r)<this._clickTolerance)))return this._moved=!0,this._lastPoint=e,this._move(r,e)},Kn.prototype.mouseupWindow=function(t){r.mouseButton(t)===this._eventButton&&(this._moved&&r.suppressClick(),this.reset())},Kn.prototype.enable=function(){this._enabled=!0},Kn.prototype.disable=function(){this._enabled=!1,this.reset()},Kn.prototype.isEnabled=function(){return this._enabled},Kn.prototype.isActive=function(){return this._active};var $n=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.mousedown=function(e,r){t.prototype.mousedown.call(this,e,r),this._lastPoint&&(this._active=!0)},e.prototype._correctButton=function(t,e){return 0===e&&!t.ctrlKey},e.prototype._move=function(t,e){return{around:e,panDelta:e.sub(t)}},e}(Kn),Qn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._correctButton=function(t,e){return 0===e&&t.ctrlKey||2===e},e.prototype._move=function(t,e){var r=.8*(e.x-t.x);if(r)return this._active=!0,{bearingDelta:r}},e.prototype.contextmenu=function(t){t.preventDefault()},e}(Kn),ti=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._correctButton=function(t,e){return 0===e&&t.ctrlKey||2===e},e.prototype._move=function(t,e){var r=-.5*(e.y-t.y);if(r)return this._active=!0,{pitchDelta:r}},e.prototype.contextmenu=function(t){t.preventDefault()},e}(Kn),ei=function(t){this._minTouches=1,this._clickTolerance=t.clickTolerance||1,this.reset()};ei.prototype.reset=function(){this._active=!1,this._touches={},this._sum=new t.Point(0,0)},ei.prototype.touchstart=function(t,e,r){return this._calculateTransform(t,e,r)},ei.prototype.touchmove=function(t,e,r){if(this._active)return t.preventDefault(),this._calculateTransform(t,e,r)},ei.prototype.touchend=function(t,e,r){this._calculateTransform(t,e,r),this._active&&r.length<this._minTouches&&this.reset()},ei.prototype.touchcancel=function(){this.reset()},ei.prototype._calculateTransform=function(e,r,n){n.length>0&&(this._active=!0);var i=Yn(n,r),a=new t.Point(0,0),o=new t.Point(0,0),s=0;for(var l in i){var u=i[l],c=this._touches[l];c&&(a._add(u),o._add(u.sub(c)),s++,i[l]=u)}if(this._touches=i,!(s<this._minTouches)&&o.mag()){var f=o.div(s);if(this._sum._add(f),!(this._sum.mag()<this._clickTolerance))return{around:a.div(s),panDelta:f}}},ei.prototype.enable=function(){this._enabled=!0},ei.prototype.disable=function(){this._enabled=!1,this.reset()},ei.prototype.isEnabled=function(){return this._enabled},ei.prototype.isActive=function(){return this._active};var ri=function(){this.reset()};function ni(t,e,r){for(var n=0;n<t.length;n++)if(t[n].identifier===r)return e[n]}ri.prototype.reset=function(){this._active=!1,delete this._firstTwoTouches},ri.prototype._start=function(t){},ri.prototype._move=function(t,e,r){return{}},ri.prototype.touchstart=function(t,e,r){this._firstTwoTouches||r.length<2||(this._firstTwoTouches=[r[0].identifier,r[1].identifier],this._start([e[0],e[1]]))},ri.prototype.touchmove=function(t,e,r){if(this._firstTwoTouches){t.preventDefault();var n=this._firstTwoTouches,i=n[0],a=n[1],o=ni(r,e,i),s=ni(r,e,a);if(o&&s){var l=this._aroundCenter?null:o.add(s).div(2);return this._move([o,s],l,t)}}},ri.prototype.touchend=function(t,e,n){if(this._firstTwoTouches){var i=this._firstTwoTouches,a=i[0],o=i[1],s=ni(n,e,a),l=ni(n,e,o);s&&l||(this._active&&r.suppressClick(),this.reset())}},ri.prototype.touchcancel=function(){this.reset()},ri.prototype.enable=function(t){this._enabled=!0,this._aroundCenter=!!t&&"center"===t.around},ri.prototype.disable=function(){this._enabled=!1,this.reset()},ri.prototype.isEnabled=function(){return this._enabled},ri.prototype.isActive=function(){return this._active};function ii(t,e){return Math.log(t/e)/Math.LN2}var ai=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.reset=function(){t.prototype.reset.call(this),delete this._distance,delete this._startDistance},e.prototype._start=function(t){this._startDistance=this._distance=t[0].dist(t[1])},e.prototype._move=function(t,e){var r=this._distance;if(this._distance=t[0].dist(t[1]),this._active||!(Math.abs(ii(this._distance,this._startDistance))<.1))return this._active=!0,{zoomDelta:ii(this._distance,r),pinchAround:e}},e}(ri);function oi(t,e){return 180*t.angleWith(e)/Math.PI}var si=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.reset=function(){t.prototype.reset.call(this),delete this._minDiameter,delete this._startVector,delete this._vector},e.prototype._start=function(t){this._startVector=this._vector=t[0].sub(t[1]),this._minDiameter=t[0].dist(t[1])},e.prototype._move=function(t,e){var r=this._vector;if(this._vector=t[0].sub(t[1]),this._active||!this._isBelowThreshold(this._vector))return this._active=!0,{bearingDelta:oi(this._vector,r),pinchAround:e}},e.prototype._isBelowThreshold=function(t){this._minDiameter=Math.min(this._minDiameter,t.mag());var e=25/(Math.PI*this._minDiameter)*360,r=oi(t,this._startVector);return Math.abs(r)<e},e}(ri);function li(t){return Math.abs(t.y)>Math.abs(t.x)}var ui=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.reset=function(){t.prototype.reset.call(this),this._valid=void 0,delete this._firstMove,delete this._lastPoints},e.prototype._start=function(t){this._lastPoints=t,li(t[0].sub(t[1]))&&(this._valid=!1)},e.prototype._move=function(t,e,r){var n=t[0].sub(this._lastPoints[0]),i=t[1].sub(this._lastPoints[1]);if(this._valid=this.gestureBeginsVertically(n,i,r.timeStamp),this._valid)return this._lastPoints=t,this._active=!0,{pitchDelta:(n.y+i.y)/2*-.5}},e.prototype.gestureBeginsVertically=function(t,e,r){if(void 0!==this._valid)return this._valid;var n=t.mag()>=2,i=e.mag()>=2;if(n||i){if(!n||!i)return void 0===this._firstMove&&(this._firstMove=r),r-this._firstMove<100&&void 0;var a=t.y>0==e.y>0;return li(t)&&li(e)&&a}},e}(ri),ci={panStep:100,bearingStep:15,pitchStep:10},fi=function(){var t=ci;this._panStep=t.panStep,this._bearingStep=t.bearingStep,this._pitchStep=t.pitchStep};function hi(t){return t*(2-t)}fi.prototype.reset=function(){this._active=!1},fi.prototype.keydown=function(t){var e=this;if(!(t.altKey||t.ctrlKey||t.metaKey)){var r=0,n=0,i=0,a=0,o=0;switch(t.keyCode){case 61:case 107:case 171:case 187:r=1;break;case 189:case 109:case 173:r=-1;break;case 37:t.shiftKey?n=-1:(t.preventDefault(),a=-1);break;case 39:t.shiftKey?n=1:(t.preventDefault(),a=1);break;case 38:t.shiftKey?i=1:(t.preventDefault(),o=-1);break;case 40:t.shiftKey?i=-1:(t.preventDefault(),o=1);break;default:return}return{cameraAnimation:function(s){var l=s.getZoom();s.easeTo({duration:300,easeId:"keyboardHandler",easing:hi,zoom:r?Math.round(l)+r*(t.shiftKey?2:1):l,bearing:s.getBearing()+n*e._bearingStep,pitch:s.getPitch()+i*e._pitchStep,offset:[-a*e._panStep,-o*e._panStep],center:s.getCenter()},{originalEvent:t})}}}},fi.prototype.enable=function(){this._enabled=!0},fi.prototype.disable=function(){this._enabled=!1,this.reset()},fi.prototype.isEnabled=function(){return this._enabled},fi.prototype.isActive=function(){return this._active};var pi=4.000244140625,di=function(e,r){this._map=e,this._el=e.getCanvasContainer(),this._handler=r,this._delta=0,this._defaultZoomRate=.01,this._wheelZoomRate=.0022222222222222222,t.bindAll(["_onWheel","_onTimeout","_onScrollFrame","_onScrollFinished"],this)};di.prototype.setZoomRate=function(t){this._defaultZoomRate=t},di.prototype.setWheelZoomRate=function(t){this._wheelZoomRate=t},di.prototype.isEnabled=function(){return!!this._enabled},di.prototype.isActive=function(){return!!this._active||void 0!==this._finishTimeout},di.prototype.isZooming=function(){return!!this._zooming},di.prototype.enable=function(t){this.isEnabled()||(this._enabled=!0,this._aroundCenter=t&&"center"===t.around)},di.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},di.prototype.wheel=function(e){if(this.isEnabled()){var r=e.deltaMode===t.window.WheelEvent.DOM_DELTA_LINE?40*e.deltaY:e.deltaY,n=t.browser.now(),i=n-(this._lastWheelEventTime||0);this._lastWheelEventTime=n,0!==r&&r%pi==0?this._type="wheel":0!==r&&Math.abs(r)<4?this._type="trackpad":i>400?(this._type=null,this._lastValue=r,this._timeout=setTimeout(this._onTimeout,40,e)):this._type||(this._type=Math.abs(i*r)<200?"trackpad":"wheel",this._timeout&&(clearTimeout(this._timeout),this._timeout=null,r+=this._lastValue)),e.shiftKey&&r&&(r/=4),this._type&&(this._lastWheelEvent=e,this._delta-=r,this._active||this._start(e)),e.preventDefault()}},di.prototype._onTimeout=function(t){this._type="wheel",this._delta-=this._lastValue,this._active||this._start(t)},di.prototype._start=function(e){if(this._delta){this._frameId&&(this._frameId=null),this._active=!0,this.isZooming()||(this._zooming=!0),this._finishTimeout&&(clearTimeout(this._finishTimeout),delete this._finishTimeout);var n=r.mousePos(this._el,e);this._around=t.LngLat.convert(this._aroundCenter?this._map.getCenter():this._map.unproject(n)),this._aroundPoint=this._map.transform.locationPoint(this._around),this._frameId||(this._frameId=!0,this._handler._triggerRenderFrame())}},di.prototype.renderFrame=function(){return this._onScrollFrame()},di.prototype._onScrollFrame=function(){var e=this;if(this._frameId&&(this._frameId=null,this.isActive())){var r=this._map.transform;if(0!==this._delta){var n="wheel"===this._type&&Math.abs(this._delta)>pi?this._wheelZoomRate:this._defaultZoomRate,i=2/(1+Math.exp(-Math.abs(this._delta*n)));this._delta<0&&0!==i&&(i=1/i);var a="number"==typeof this._targetZoom?r.zoomScale(this._targetZoom):r.scale;this._targetZoom=Math.min(r.maxZoom,Math.max(r.minZoom,r.scaleZoom(a*i))),"wheel"===this._type&&(this._startZoom=r.zoom,this._easing=this._smoothOutEasing(200)),this._delta=0}var o,s="number"==typeof this._targetZoom?this._targetZoom:r.zoom,l=this._startZoom,u=this._easing,c=!1;if("wheel"===this._type&&l&&u){var f=Math.min((t.browser.now()-this._lastWheelEventTime)/200,1),h=u(f);o=t.number(l,s,h),f<1?this._frameId||(this._frameId=!0):c=!0}else o=s,c=!0;return this._active=!0,c&&(this._active=!1,this._finishTimeout=setTimeout((function(){e._zooming=!1,e._handler._triggerRenderFrame(),delete e._targetZoom,delete e._finishTimeout}),200)),{noInertia:!0,needsRenderFrame:!c,zoomDelta:o-r.zoom,around:this._aroundPoint,originalEvent:this._lastWheelEvent}}},di.prototype._smoothOutEasing=function(e){var r=t.ease;if(this._prevEase){var n=this._prevEase,i=(t.browser.now()-n.start)/n.duration,a=n.easing(i+.01)-n.easing(i),o=.27/Math.sqrt(a*a+1e-4)*.01,s=Math.sqrt(.0729-o*o);r=t.bezier(o,s,.25,1)}return this._prevEase={start:t.browser.now(),duration:e,easing:r},r},di.prototype.reset=function(){this._active=!1};var vi=function(t,e){this._clickZoom=t,this._tapZoom=e};vi.prototype.enable=function(){this._clickZoom.enable(),this._tapZoom.enable()},vi.prototype.disable=function(){this._clickZoom.disable(),this._tapZoom.disable()},vi.prototype.isEnabled=function(){return this._clickZoom.isEnabled()&&this._tapZoom.isEnabled()},vi.prototype.isActive=function(){return this._clickZoom.isActive()||this._tapZoom.isActive()};var gi=function(){this.reset()};gi.prototype.reset=function(){this._active=!1},gi.prototype.dblclick=function(t,e){return t.preventDefault(),{cameraAnimation:function(r){r.easeTo({duration:300,zoom:r.getZoom()+(t.shiftKey?-1:1),around:r.unproject(e)},{originalEvent:t})}}},gi.prototype.enable=function(){this._enabled=!0},gi.prototype.disable=function(){this._enabled=!1,this.reset()},gi.prototype.isEnabled=function(){return this._enabled},gi.prototype.isActive=function(){return this._active};var yi=function(){this._tap=new Xn({numTouches:1,numTaps:1}),this.reset()};yi.prototype.reset=function(){this._active=!1,delete this._swipePoint,delete this._swipeTouch,delete this._tapTime,this._tap.reset()},yi.prototype.touchstart=function(t,e,r){this._swipePoint||(this._tapTime&&t.timeStamp-this._tapTime>500&&this.reset(),this._tapTime?r.length>0&&(this._swipePoint=e[0],this._swipeTouch=r[0].identifier):this._tap.touchstart(t,e,r))},yi.prototype.touchmove=function(t,e,r){if(this._tapTime){if(this._swipePoint){if(r[0].identifier!==this._swipeTouch)return;var n=e[0],i=n.y-this._swipePoint.y;return this._swipePoint=n,t.preventDefault(),this._active=!0,{zoomDelta:i/128}}}else this._tap.touchmove(t,e,r)},yi.prototype.touchend=function(t,e,r){this._tapTime?this._swipePoint&&0===r.length&&this.reset():this._tap.touchend(t,e,r)&&(this._tapTime=t.timeStamp)},yi.prototype.touchcancel=function(){this.reset()},yi.prototype.enable=function(){this._enabled=!0},yi.prototype.disable=function(){this._enabled=!1,this.reset()},yi.prototype.isEnabled=function(){return this._enabled},yi.prototype.isActive=function(){return this._active};var mi=function(t,e,r){this._el=t,this._mousePan=e,this._touchPan=r};mi.prototype.enable=function(t){this._inertiaOptions=t||{},this._mousePan.enable(),this._touchPan.enable(),this._el.classList.add("mapboxgl-touch-drag-pan")},mi.prototype.disable=function(){this._mousePan.disable(),this._touchPan.disable(),this._el.classList.remove("mapboxgl-touch-drag-pan")},mi.prototype.isEnabled=function(){return this._mousePan.isEnabled()&&this._touchPan.isEnabled()},mi.prototype.isActive=function(){return this._mousePan.isActive()||this._touchPan.isActive()};var xi=function(t,e,r){this._pitchWithRotate=t.pitchWithRotate,this._mouseRotate=e,this._mousePitch=r};xi.prototype.enable=function(){this._mouseRotate.enable(),this._pitchWithRotate&&this._mousePitch.enable()},xi.prototype.disable=function(){this._mouseRotate.disable(),this._mousePitch.disable()},xi.prototype.isEnabled=function(){return this._mouseRotate.isEnabled()&&(!this._pitchWithRotate||this._mousePitch.isEnabled())},xi.prototype.isActive=function(){return this._mouseRotate.isActive()||this._mousePitch.isActive()};var bi=function(t,e,r,n){this._el=t,this._touchZoom=e,this._touchRotate=r,this._tapDragZoom=n,this._rotationDisabled=!1,this._enabled=!0};bi.prototype.enable=function(t){this._touchZoom.enable(t),this._rotationDisabled||this._touchRotate.enable(t),this._tapDragZoom.enable(),this._el.classList.add("mapboxgl-touch-zoom-rotate")},bi.prototype.disable=function(){this._touchZoom.disable(),this._touchRotate.disable(),this._tapDragZoom.disable(),this._el.classList.remove("mapboxgl-touch-zoom-rotate")},bi.prototype.isEnabled=function(){return this._touchZoom.isEnabled()&&(this._rotationDisabled||this._touchRotate.isEnabled())&&this._tapDragZoom.isEnabled()},bi.prototype.isActive=function(){return this._touchZoom.isActive()||this._touchRotate.isActive()||this._tapDragZoom.isActive()},bi.prototype.disableRotation=function(){this._rotationDisabled=!0,this._touchRotate.disable()},bi.prototype.enableRotation=function(){this._rotationDisabled=!1,this._touchZoom.isEnabled()&&this._touchRotate.enable()};var _i=function(t){return t.zoom||t.drag||t.pitch||t.rotate},wi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(t.Event);function Ti(t){return t.panDelta&&t.panDelta.mag()||t.zoomDelta||t.bearingDelta||t.pitchDelta}var ki=function(e,n){this._map=e,this._el=this._map.getCanvasContainer(),this._handlers=[],this._handlersById={},this._changes=[],this._inertia=new Bn(e),this._bearingSnap=n.bearingSnap,this._previousActiveHandlers={},this._eventsInProgress={},this._addDefaultHandlers(n),t.bindAll(["handleEvent","handleWindowEvent"],this);var i=this._el;this._listeners=[[i,"touchstart",{passive:!1}],[i,"touchmove",{passive:!1}],[i,"touchend",void 0],[i,"touchcancel",void 0],[i,"mousedown",void 0],[i,"mousemove",void 0],[i,"mouseup",void 0],[t.window.document,"mousemove",{capture:!0}],[t.window.document,"mouseup",void 0],[i,"mouseover",void 0],[i,"mouseout",void 0],[i,"dblclick",void 0],[i,"click",void 0],[i,"keydown",{capture:!1}],[i,"keyup",void 0],[i,"wheel",{passive:!1}],[i,"contextmenu",void 0],[t.window,"blur",void 0]];for(var a=0,o=this._listeners;a<o.length;a+=1){var s=o[a],l=s[0],u=s[1],c=s[2];r.addEventListener(l,u,l===t.window.document?this.handleWindowEvent:this.handleEvent,c)}};ki.prototype.destroy=function(){for(var e=0,n=this._listeners;e<n.length;e+=1){var i=n[e],a=i[0],o=i[1],s=i[2];r.removeEventListener(a,o,a===t.window.document?this.handleWindowEvent:this.handleEvent,s)}},ki.prototype._addDefaultHandlers=function(t){var e=this._map,r=e.getCanvasContainer();this._add("mapEvent",new qn(e,t));var n=e.boxZoom=new Zn(e,t);this._add("boxZoom",n);var i=new Jn,a=new gi;e.doubleClickZoom=new vi(a,i),this._add("tapZoom",i),this._add("clickZoom",a);var o=new yi;this._add("tapDragZoom",o);var s=e.touchPitch=new ui;this._add("touchPitch",s);var l=new Qn(t),u=new ti(t);e.dragRotate=new xi(t,l,u),this._add("mouseRotate",l,["mousePitch"]),this._add("mousePitch",u,["mouseRotate"]);var c=new $n(t),f=new ei(t);e.dragPan=new mi(r,c,f),this._add("mousePan",c),this._add("touchPan",f,["touchZoom","touchRotate"]);var h=new si,p=new ai;e.touchZoomRotate=new bi(r,p,h,o),this._add("touchRotate",h,["touchPan","touchZoom"]),this._add("touchZoom",p,["touchPan","touchRotate"]);var d=e.scrollZoom=new di(e,this);this._add("scrollZoom",d,["mousePan"]);var v=e.keyboard=new fi;this._add("keyboard",v),this._add("blockableMapEvent",new Gn(e));for(var g=0,y=["boxZoom","doubleClickZoom","tapDragZoom","touchPitch","dragRotate","dragPan","touchZoomRotate","scrollZoom","keyboard"];g<y.length;g+=1){var m=y[g];t.interactive&&t[m]&&e[m].enable(t[m])}},ki.prototype._add=function(t,e,r){this._handlers.push({handlerName:t,handler:e,allowed:r}),this._handlersById[t]=e},ki.prototype.stop=function(){if(!this._updatingCamera){for(var t=0,e=this._handlers;t<e.length;t+=1)e[t].handler.reset();this._inertia.clear(),this._fireEvents({},{}),this._changes=[]}},ki.prototype.isActive=function(){for(var t=0,e=this._handlers;t<e.length;t+=1)if(e[t].handler.isActive())return!0;return!1},ki.prototype.isZooming=function(){return!!this._eventsInProgress.zoom||this._map.scrollZoom.isZooming()},ki.prototype.isRotating=function(){return!!this._eventsInProgress.rotate},ki.prototype.isMoving=function(){return Boolean(_i(this._eventsInProgress))||this.isZooming()},ki.prototype._blockedByActive=function(t,e,r){for(var n in t)if(n!==r&&(!e||e.indexOf(n)<0))return!0;return!1},ki.prototype.handleWindowEvent=function(t){this.handleEvent(t,t.type+"Window")},ki.prototype._getMapTouches=function(t){for(var e=[],r=0,n=t;r<n.length;r+=1){var i=n[r],a=i.target;this._el.contains(a)&&e.push(i)}return e},ki.prototype.handleEvent=function(t,e){if("blur"!==t.type){this._updatingCamera=!0;for(var n="renderFrame"===t.type?void 0:t,i={needsRenderFrame:!1},a={},o={},s=t.touches?this._getMapTouches(t.touches):void 0,l=s?r.touchPos(this._el,s):r.mousePos(this._el,t),u=0,c=this._handlers;u<c.length;u+=1){var f=c[u],h=f.handlerName,p=f.handler,d=f.allowed;if(p.isEnabled()){var v=void 0;this._blockedByActive(o,d,h)?p.reset():p[e||t.type]&&(v=p[e||t.type](t,l,s),this.mergeHandlerResult(i,a,v,h,n),v&&v.needsRenderFrame&&this._triggerRenderFrame()),(v||p.isActive())&&(o[h]=p)}}var g={};for(var y in this._previousActiveHandlers)o[y]||(g[y]=n);this._previousActiveHandlers=o,(Object.keys(g).length||Ti(i))&&(this._changes.push([i,a,g]),this._triggerRenderFrame()),(Object.keys(o).length||Ti(i))&&this._map._stop(!0),this._updatingCamera=!1;var m=i.cameraAnimation;m&&(this._inertia.clear(),this._fireEvents({},{}),this._changes=[],m(this._map))}else this.stop()},ki.prototype.mergeHandlerResult=function(e,r,n,i,a){if(n){t.extend(e,n);var o={handlerName:i,originalEvent:n.originalEvent||a};void 0!==n.zoomDelta&&(r.zoom=o),void 0!==n.panDelta&&(r.drag=o),void 0!==n.pitchDelta&&(r.pitch=o),void 0!==n.bearingDelta&&(r.rotate=o)}},ki.prototype._applyChanges=function(){for(var e={},r={},n={},i=0,a=this._changes;i<a.length;i+=1){var o=a[i],s=o[0],l=o[1],u=o[2];s.panDelta&&(e.panDelta=(e.panDelta||new t.Point(0,0))._add(s.panDelta)),s.zoomDelta&&(e.zoomDelta=(e.zoomDelta||0)+s.zoomDelta),s.bearingDelta&&(e.bearingDelta=(e.bearingDelta||0)+s.bearingDelta),s.pitchDelta&&(e.pitchDelta=(e.pitchDelta||0)+s.pitchDelta),void 0!==s.around&&(e.around=s.around),void 0!==s.pinchAround&&(e.pinchAround=s.pinchAround),s.noInertia&&(e.noInertia=s.noInertia),t.extend(r,l),t.extend(n,u)}this._updateMapTransform(e,r,n),this._changes=[]},ki.prototype._updateMapTransform=function(t,e,r){var n=this._map,i=n.transform;if(!Ti(t))return this._fireEvents(e,r);var a=t.panDelta,o=t.zoomDelta,s=t.bearingDelta,l=t.pitchDelta,u=t.around,c=t.pinchAround;void 0!==c&&(u=c),n._stop(!0),u=u||n.transform.centerPoint;var f=i.pointLocation(a?u.sub(a):u);s&&(i.bearing+=s),l&&(i.pitch+=l),o&&(i.zoom+=o),i.setLocationAtPoint(f,u),this._map._update(),t.noInertia||this._inertia.record(t),this._fireEvents(e,r)},ki.prototype._fireEvents=function(e,r){var n=this,i=_i(this._eventsInProgress),a=_i(e),o={};for(var s in e){var l=e[s].originalEvent;this._eventsInProgress[s]||(o[s+"start"]=l),this._eventsInProgress[s]=e[s]}for(var u in!i&&a&&this._fireEvent("movestart",a.originalEvent),o)this._fireEvent(u,o[u]);for(var c in e.rotate&&(this._bearingChanged=!0),a&&this._fireEvent("move",a.originalEvent),e){var f=e[c].originalEvent;this._fireEvent(c,f)}var h,p={};for(var d in this._eventsInProgress){var v=this._eventsInProgress[d],g=v.handlerName,y=v.originalEvent;this._handlersById[g].isActive()||(delete this._eventsInProgress[d],h=r[g]||y,p[d+"end"]=h)}for(var m in p)this._fireEvent(m,p[m]);var x=_i(this._eventsInProgress);if((i||a)&&!x){this._updatingCamera=!0;var b=this._inertia._onMoveEnd(this._map.dragPan._inertiaOptions),_=function(t){return 0!==t&&-n._bearingSnap<t&&t<n._bearingSnap};b?(_(b.bearing||this._map.getBearing())&&(b.bearing=0),this._map.easeTo(b,{originalEvent:h})):(this._map.fire(new t.Event("moveend",{originalEvent:h})),_(this._map.getBearing())&&this._map.resetNorth()),this._bearingChanged=!1,this._updatingCamera=!1}},ki.prototype._fireEvent=function(e,r){this._map.fire(new t.Event(e,r?{originalEvent:r}:{}))},ki.prototype._triggerRenderFrame=function(){var t=this;void 0===this._frameId&&(this._frameId=this._map._requestRenderFrame((function(e){delete t._frameId,t.handleEvent(new wi("renderFrame",{timeStamp:e})),t._applyChanges()})))};var Ai=function(e){function r(r,n){e.call(this),this._moving=!1,this._zooming=!1,this.transform=r,this._bearingSnap=n.bearingSnap,t.bindAll(["_renderFrameCallback"],this)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getCenter=function(){return new t.LngLat(this.transform.center.lng,this.transform.center.lat)},r.prototype.setCenter=function(t,e){return this.jumpTo({center:t},e)},r.prototype.panBy=function(e,r,n){return e=t.Point.convert(e).mult(-1),this.panTo(this.transform.center,t.extend({offset:e},r),n)},r.prototype.panTo=function(e,r,n){return this.easeTo(t.extend({center:e},r),n)},r.prototype.getZoom=function(){return this.transform.zoom},r.prototype.setZoom=function(t,e){return this.jumpTo({zoom:t},e),this},r.prototype.zoomTo=function(e,r,n){return this.easeTo(t.extend({zoom:e},r),n)},r.prototype.zoomIn=function(t,e){return this.zoomTo(this.getZoom()+1,t,e),this},r.prototype.zoomOut=function(t,e){return this.zoomTo(this.getZoom()-1,t,e),this},r.prototype.getBearing=function(){return this.transform.bearing},r.prototype.setBearing=function(t,e){return this.jumpTo({bearing:t},e),this},r.prototype.getPadding=function(){return this.transform.padding},r.prototype.setPadding=function(t,e){return this.jumpTo({padding:t},e),this},r.prototype.rotateTo=function(e,r,n){return this.easeTo(t.extend({bearing:e},r),n)},r.prototype.resetNorth=function(e,r){return this.rotateTo(0,t.extend({duration:1e3},e),r),this},r.prototype.resetNorthPitch=function(e,r){return this.easeTo(t.extend({bearing:0,pitch:0,duration:1e3},e),r),this},r.prototype.snapToNorth=function(t,e){return Math.abs(this.getBearing())<this._bearingSnap?this.resetNorth(t,e):this},r.prototype.getPitch=function(){return this.transform.pitch},r.prototype.setPitch=function(t,e){return this.jumpTo({pitch:t},e),this},r.prototype.cameraForBounds=function(e,r){return e=t.LngLatBounds.convert(e),this._cameraForBoxAndBearing(e.getNorthWest(),e.getSouthEast(),0,r)},r.prototype._cameraForBoxAndBearing=function(e,r,n,i){var a={top:0,bottom:0,right:0,left:0};if("number"==typeof(i=t.extend({padding:a,offset:[0,0],maxZoom:this.transform.maxZoom},i)).padding){var o=i.padding;i.padding={top:o,bottom:o,right:o,left:o}}i.padding=t.extend(a,i.padding);var s=this.transform,l=s.padding,u=s.project(t.LngLat.convert(e)),c=s.project(t.LngLat.convert(r)),f=u.rotate(-n*Math.PI/180),h=c.rotate(-n*Math.PI/180),p=new t.Point(Math.max(f.x,h.x),Math.max(f.y,h.y)),d=new t.Point(Math.min(f.x,h.x),Math.min(f.y,h.y)),v=p.sub(d),g=(s.width-(l.left+l.right+i.padding.left+i.padding.right))/v.x,y=(s.height-(l.top+l.bottom+i.padding.top+i.padding.bottom))/v.y;if(!(y<0||g<0)){var m=Math.min(s.scaleZoom(s.scale*Math.min(g,y)),i.maxZoom),x=t.Point.convert(i.offset),b=(i.padding.left-i.padding.right)/2,_=(i.padding.top-i.padding.bottom)/2,w=new t.Point(x.x+b,x.y+_).mult(s.scale/s.zoomScale(m));return{center:s.unproject(u.add(c).div(2).sub(w)),zoom:m,bearing:n}}t.warnOnce("Map cannot fit within canvas with the given bounds, padding, and/or offset.")},r.prototype.fitBounds=function(t,e,r){return this._fitInternal(this.cameraForBounds(t,e),e,r)},r.prototype.fitScreenCoordinates=function(e,r,n,i,a){return this._fitInternal(this._cameraForBoxAndBearing(this.transform.pointLocation(t.Point.convert(e)),this.transform.pointLocation(t.Point.convert(r)),n,i),i,a)},r.prototype._fitInternal=function(e,r,n){return e?(delete(r=t.extend(e,r)).padding,r.linear?this.easeTo(r,n):this.flyTo(r,n)):this},r.prototype.jumpTo=function(e,r){this.stop();var n=this.transform,i=!1,a=!1,o=!1;return"zoom"in e&&n.zoom!==+e.zoom&&(i=!0,n.zoom=+e.zoom),void 0!==e.center&&(n.center=t.LngLat.convert(e.center)),"bearing"in e&&n.bearing!==+e.bearing&&(a=!0,n.bearing=+e.bearing),"pitch"in e&&n.pitch!==+e.pitch&&(o=!0,n.pitch=+e.pitch),null==e.padding||n.isPaddingEqual(e.padding)||(n.padding=e.padding),this.fire(new t.Event("movestart",r)).fire(new t.Event("move",r)),i&&this.fire(new t.Event("zoomstart",r)).fire(new t.Event("zoom",r)).fire(new t.Event("zoomend",r)),a&&this.fire(new t.Event("rotatestart",r)).fire(new t.Event("rotate",r)).fire(new t.Event("rotateend",r)),o&&this.fire(new t.Event("pitchstart",r)).fire(new t.Event("pitch",r)).fire(new t.Event("pitchend",r)),this.fire(new t.Event("moveend",r))},r.prototype.easeTo=function(e,r){var n=this;this._stop(!1,e.easeId),(!1===(e=t.extend({offset:[0,0],duration:500,easing:t.ease},e)).animate||!e.essential&&t.browser.prefersReducedMotion)&&(e.duration=0);var i=this.transform,a=this.getZoom(),o=this.getBearing(),s=this.getPitch(),l=this.getPadding(),u="zoom"in e?+e.zoom:a,c="bearing"in e?this._normalizeBearing(e.bearing,o):o,f="pitch"in e?+e.pitch:s,h="padding"in e?e.padding:i.padding,p=t.Point.convert(e.offset),d=i.centerPoint.add(p),v=i.pointLocation(d),g=t.LngLat.convert(e.center||v);this._normalizeCenter(g);var y,m,x=i.project(v),b=i.project(g).sub(x),_=i.zoomScale(u-a);e.around&&(y=t.LngLat.convert(e.around),m=i.locationPoint(y));var w={moving:this._moving,zooming:this._zooming,rotating:this._rotating,pitching:this._pitching};return this._zooming=this._zooming||u!==a,this._rotating=this._rotating||o!==c,this._pitching=this._pitching||f!==s,this._padding=!i.isPaddingEqual(h),this._easeId=e.easeId,this._prepareEase(r,e.noMoveStart,w),clearTimeout(this._easeEndTimeoutID),this._ease((function(e){if(n._zooming&&(i.zoom=t.number(a,u,e)),n._rotating&&(i.bearing=t.number(o,c,e)),n._pitching&&(i.pitch=t.number(s,f,e)),n._padding&&(i.interpolatePadding(l,h,e),d=i.centerPoint.add(p)),y)i.setLocationAtPoint(y,m);else{var v=i.zoomScale(i.zoom-a),g=u>a?Math.min(2,_):Math.max(.5,_),w=Math.pow(g,1-e),T=i.unproject(x.add(b.mult(e*w)).mult(v));i.setLocationAtPoint(i.renderWorldCopies?T.wrap():T,d)}n._fireMoveEvents(r)}),(function(t){n._afterEase(r,t)}),e),this},r.prototype._prepareEase=function(e,r,n){void 0===n&&(n={}),this._moving=!0,r||n.moving||this.fire(new t.Event("movestart",e)),this._zooming&&!n.zooming&&this.fire(new t.Event("zoomstart",e)),this._rotating&&!n.rotating&&this.fire(new t.Event("rotatestart",e)),this._pitching&&!n.pitching&&this.fire(new t.Event("pitchstart",e))},r.prototype._fireMoveEvents=function(e){this.fire(new t.Event("move",e)),this._zooming&&this.fire(new t.Event("zoom",e)),this._rotating&&this.fire(new t.Event("rotate",e)),this._pitching&&this.fire(new t.Event("pitch",e))},r.prototype._afterEase=function(e,r){if(!this._easeId||!r||this._easeId!==r){delete this._easeId;var n=this._zooming,i=this._rotating,a=this._pitching;this._moving=!1,this._zooming=!1,this._rotating=!1,this._pitching=!1,this._padding=!1,n&&this.fire(new t.Event("zoomend",e)),i&&this.fire(new t.Event("rotateend",e)),a&&this.fire(new t.Event("pitchend",e)),this.fire(new t.Event("moveend",e))}},r.prototype.flyTo=function(e,r){var n=this;if(!e.essential&&t.browser.prefersReducedMotion){var i=t.pick(e,["center","zoom","bearing","pitch","around"]);return this.jumpTo(i,r)}this.stop(),e=t.extend({offset:[0,0],speed:1.2,curve:1.42,easing:t.ease},e);var a=this.transform,o=this.getZoom(),s=this.getBearing(),l=this.getPitch(),u=this.getPadding(),c="zoom"in e?t.clamp(+e.zoom,a.minZoom,a.maxZoom):o,f="bearing"in e?this._normalizeBearing(e.bearing,s):s,h="pitch"in e?+e.pitch:l,p="padding"in e?e.padding:a.padding,d=a.zoomScale(c-o),v=t.Point.convert(e.offset),g=a.centerPoint.add(v),y=a.pointLocation(g),m=t.LngLat.convert(e.center||y);this._normalizeCenter(m);var x=a.project(y),b=a.project(m).sub(x),_=e.curve,w=Math.max(a.width,a.height),T=w/d,k=b.mag();if("minZoom"in e){var A=t.clamp(Math.min(e.minZoom,o,c),a.minZoom,a.maxZoom),M=w/a.zoomScale(A-o);_=Math.sqrt(M/k*2)}var S=_*_;function E(t){var e=(T*T-w*w+(t?-1:1)*S*S*k*k)/(2*(t?T:w)*S*k);return Math.log(Math.sqrt(e*e+1)-e)}function L(t){return(Math.exp(t)-Math.exp(-t))/2}function C(t){return(Math.exp(t)+Math.exp(-t))/2}var P=E(0),O=function(t){return C(P)/C(P+_*t)},I=function(t){return w*((C(P)*(L(e=P+_*t)/C(e))-L(P))/S)/k;var e},D=(E(1)-P)/_;if(Math.abs(k)<1e-6||!isFinite(D)){if(Math.abs(w-T)<1e-6)return this.easeTo(e,r);var z=T<w?-1:1;D=Math.abs(Math.log(T/w))/_,I=function(){return 0},O=function(t){return Math.exp(z*_*t)}}if("duration"in e)e.duration=+e.duration;else{var R="screenSpeed"in e?+e.screenSpeed/_:+e.speed;e.duration=1e3*D/R}return e.maxDuration&&e.duration>e.maxDuration&&(e.duration=0),this._zooming=!0,this._rotating=s!==f,this._pitching=h!==l,this._padding=!a.isPaddingEqual(p),this._prepareEase(r,!1),this._ease((function(e){var i=e*D,d=1/O(i);a.zoom=1===e?c:o+a.scaleZoom(d),n._rotating&&(a.bearing=t.number(s,f,e)),n._pitching&&(a.pitch=t.number(l,h,e)),n._padding&&(a.interpolatePadding(u,p,e),g=a.centerPoint.add(v));var y=1===e?m:a.unproject(x.add(b.mult(I(i))).mult(d));a.setLocationAtPoint(a.renderWorldCopies?y.wrap():y,g),n._fireMoveEvents(r)}),(function(){return n._afterEase(r)}),e),this},r.prototype.isEasing=function(){return!!this._easeFrameId},r.prototype.stop=function(){return this._stop()},r.prototype._stop=function(t,e){if(this._easeFrameId&&(this._cancelRenderFrame(this._easeFrameId),delete this._easeFrameId,delete this._onEaseFrame),this._onEaseEnd){var r=this._onEaseEnd;delete this._onEaseEnd,r.call(this,e)}if(!t){var n=this.handlers;n&&n.stop()}return this},r.prototype._ease=function(e,r,n){!1===n.animate||0===n.duration?(e(1),r()):(this._easeStart=t.browser.now(),this._easeOptions=n,this._onEaseFrame=e,this._onEaseEnd=r,this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback))},r.prototype._renderFrameCallback=function(){var e=Math.min((t.browser.now()-this._easeStart)/this._easeOptions.duration,1);this._onEaseFrame(this._easeOptions.easing(e)),e<1?this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback):this.stop()},r.prototype._normalizeBearing=function(e,r){e=t.wrap(e,-180,180);var n=Math.abs(e-r);return Math.abs(e-360-r)<n&&(e-=360),Math.abs(e+360-r)<n&&(e+=360),e},r.prototype._normalizeCenter=function(t){var e=this.transform;if(e.renderWorldCopies&&!e.lngRange){var r=t.lng-e.center.lng;t.lng+=r>180?-360:r<-180?360:0}},r}(t.Evented),Mi=function(e){void 0===e&&(e={}),this.options=e,t.bindAll(["_updateEditLink","_updateData","_updateCompact"],this)};Mi.prototype.getDefaultPosition=function(){return"bottom-right"},Mi.prototype.onAdd=function(t){var e=this.options&&this.options.compact;return this._map=t,this._container=r.create("div","mapboxgl-ctrl mapboxgl-ctrl-attrib"),this._innerContainer=r.create("div","mapboxgl-ctrl-attrib-inner",this._container),e&&this._container.classList.add("mapboxgl-compact"),this._updateAttributions(),this._updateEditLink(),this._map.on("styledata",this._updateData),this._map.on("sourcedata",this._updateData),this._map.on("moveend",this._updateEditLink),void 0===e&&(this._map.on("resize",this._updateCompact),this._updateCompact()),this._container},Mi.prototype.onRemove=function(){r.remove(this._container),this._map.off("styledata",this._updateData),this._map.off("sourcedata",this._updateData),this._map.off("moveend",this._updateEditLink),this._map.off("resize",this._updateCompact),this._map=void 0,this._attribHTML=void 0},Mi.prototype._updateEditLink=function(){var e=this._editLink;e||(e=this._editLink=this._container.querySelector(".mapbox-improve-map"));var r=[{key:"owner",value:this.styleOwner},{key:"id",value:this.styleId},{key:"access_token",value:this._map._requestManager._customAccessToken||t.config.ACCESS_TOKEN}];if(e){var n=r.reduce((function(t,e,n){return e.value&&(t+=e.key+"="+e.value+(n<r.length-1?"&":"")),t}),"?");e.href=t.config.FEEDBACK_URL+"/"+n+(this._map._hash?this._map._hash.getHashString(!0):""),e.rel="noopener nofollow"}},Mi.prototype._updateData=function(t){!t||"metadata"!==t.sourceDataType&&"style"!==t.dataType||(this._updateAttributions(),this._updateEditLink())},Mi.prototype._updateAttributions=function(){if(this._map.style){var t=[];if(this.options.customAttribution&&(Array.isArray(this.options.customAttribution)?t=t.concat(this.options.customAttribution.map((function(t){return"string"!=typeof t?"":t}))):"string"==typeof this.options.customAttribution&&t.push(this.options.customAttribution)),this._map.style.stylesheet){var e=this._map.style.stylesheet;this.styleOwner=e.owner,this.styleId=e.id}var r=this._map.style.sourceCaches;for(var n in r){var i=r[n];if(i.used){var a=i.getSource();a.attribution&&t.indexOf(a.attribution)<0&&t.push(a.attribution)}}t.sort((function(t,e){return t.length-e.length}));var o=(t=t.filter((function(e,r){for(var n=r+1;n<t.length;n++)if(t[n].indexOf(e)>=0)return!1;return!0}))).join(" | ");o!==this._attribHTML&&(this._attribHTML=o,t.length?(this._innerContainer.innerHTML=o,this._container.classList.remove("mapboxgl-attrib-empty")):this._container.classList.add("mapboxgl-attrib-empty"),this._editLink=null)}},Mi.prototype._updateCompact=function(){this._map.getCanvasContainer().offsetWidth<=640?this._container.classList.add("mapboxgl-compact"):this._container.classList.remove("mapboxgl-compact")};var Si=function(){t.bindAll(["_updateLogo"],this),t.bindAll(["_updateCompact"],this)};Si.prototype.onAdd=function(t){this._map=t,this._container=r.create("div","mapboxgl-ctrl");var e=r.create("a","mapboxgl-ctrl-logo");return e.target="_blank",e.rel="noopener nofollow",e.href="https://www.mapbox.com/",e.setAttribute("aria-label",this._map._getUIString("LogoControl.Title")),e.setAttribute("rel","noopener nofollow"),this._container.appendChild(e),this._container.style.display="none",this._map.on("sourcedata",this._updateLogo),this._updateLogo(),this._map.on("resize",this._updateCompact),this._updateCompact(),this._container},Si.prototype.onRemove=function(){r.remove(this._container),this._map.off("sourcedata",this._updateLogo),this._map.off("resize",this._updateCompact)},Si.prototype.getDefaultPosition=function(){return"bottom-left"},Si.prototype._updateLogo=function(t){t&&"metadata"!==t.sourceDataType||(this._container.style.display=this._logoRequired()?"block":"none")},Si.prototype._logoRequired=function(){if(this._map.style){var t=this._map.style.sourceCaches;for(var e in t)if(t[e].getSource().mapbox_logo)return!0;return!1}},Si.prototype._updateCompact=function(){var t=this._container.children;if(t.length){var e=t[0];this._map.getCanvasContainer().offsetWidth<250?e.classList.add("mapboxgl-compact"):e.classList.remove("mapboxgl-compact")}};var Ei=function(){this._queue=[],this._id=0,this._cleared=!1,this._currentlyRunning=!1};Ei.prototype.add=function(t){var e=++this._id;return this._queue.push({callback:t,id:e,cancelled:!1}),e},Ei.prototype.remove=function(t){for(var e=this._currentlyRunning,r=0,n=e?this._queue.concat(e):this._queue;r<n.length;r+=1){var i=n[r];if(i.id===t)return void(i.cancelled=!0)}},Ei.prototype.run=function(t){void 0===t&&(t=0);var e=this._currentlyRunning=this._queue;this._queue=[];for(var r=0,n=e;r<n.length;r+=1){var i=n[r];if(!i.cancelled&&(i.callback(t),this._cleared))break}this._cleared=!1,this._currentlyRunning=!1},Ei.prototype.clear=function(){this._currentlyRunning&&(this._cleared=!0),this._queue=[]};var Li={"FullscreenControl.Enter":"Enter fullscreen","FullscreenControl.Exit":"Exit fullscreen","GeolocateControl.FindMyLocation":"Find my location","GeolocateControl.LocationNotAvailable":"Location not available","LogoControl.Title":"Mapbox logo","NavigationControl.ResetBearing":"Reset bearing to north","NavigationControl.ZoomIn":"Zoom in","NavigationControl.ZoomOut":"Zoom out","ScaleControl.Feet":"ft","ScaleControl.Meters":"m","ScaleControl.Kilometers":"km","ScaleControl.Miles":"mi","ScaleControl.NauticalMiles":"nm"},Ci=t.window.HTMLImageElement,Pi=t.window.HTMLElement,Oi=t.window.ImageBitmap,Ii=60,Di={center:[0,0],zoom:0,bearing:0,pitch:0,minZoom:-2,maxZoom:22,minPitch:0,maxPitch:Ii,interactive:!0,scrollZoom:!0,boxZoom:!0,dragRotate:!0,dragPan:!0,keyboard:!0,doubleClickZoom:!0,touchZoomRotate:!0,touchPitch:!0,bearingSnap:7,clickTolerance:3,pitchWithRotate:!0,hash:!1,attributionControl:!0,failIfMajorPerformanceCaveat:!1,preserveDrawingBuffer:!1,trackResize:!0,renderWorldCopies:!0,refreshExpiredTiles:!0,maxTileCacheSize:null,localIdeographFontFamily:"sans-serif",transformRequest:null,accessToken:null,fadeDuration:300,crossSourceCollisions:!0},zi=function(n){function i(e){var r=this;if(null!=(e=t.extend({},Di,e)).minZoom&&null!=e.maxZoom&&e.minZoom>e.maxZoom)throw new Error("maxZoom must be greater than or equal to minZoom");if(null!=e.minPitch&&null!=e.maxPitch&&e.minPitch>e.maxPitch)throw new Error("maxPitch must be greater than or equal to minPitch");if(null!=e.minPitch&&e.minPitch<0)throw new Error("minPitch must be greater than or equal to 0");if(null!=e.maxPitch&&e.maxPitch>Ii)throw new Error("maxPitch must be less than or equal to 60");var i=new Cn(e.minZoom,e.maxZoom,e.minPitch,e.maxPitch,e.renderWorldCopies);if(n.call(this,i,e),this._interactive=e.interactive,this._maxTileCacheSize=e.maxTileCacheSize,this._failIfMajorPerformanceCaveat=e.failIfMajorPerformanceCaveat,this._preserveDrawingBuffer=e.preserveDrawingBuffer,this._antialias=e.antialias,this._trackResize=e.trackResize,this._bearingSnap=e.bearingSnap,this._refreshExpiredTiles=e.refreshExpiredTiles,this._fadeDuration=e.fadeDuration,this._crossSourceCollisions=e.crossSourceCollisions,this._crossFadingFactor=1,this._collectResourceTiming=e.collectResourceTiming,this._renderTaskQueue=new Ei,this._controls=[],this._mapId=t.uniqueId(),this._locale=t.extend({},Li,e.locale),this._requestManager=new t.RequestManager(e.transformRequest,e.accessToken),"string"==typeof e.container){if(this._container=t.window.document.getElementById(e.container),!this._container)throw new Error("Container '"+e.container+"' not found.")}else{if(!(e.container instanceof Pi))throw new Error("Invalid type: 'container' must be a String or HTMLElement.");this._container=e.container}if(e.maxBounds&&this.setMaxBounds(e.maxBounds),t.bindAll(["_onWindowOnline","_onWindowResize","_contextLost","_contextRestored"],this),this._setupContainer(),this._setupPainter(),void 0===this.painter)throw new Error("Failed to initialize WebGL.");this.on("move",(function(){return r._update(!1)})),this.on("moveend",(function(){return r._update(!1)})),this.on("zoom",(function(){return r._update(!0)})),void 0!==t.window&&(t.window.addEventListener("online",this._onWindowOnline,!1),t.window.addEventListener("resize",this._onWindowResize,!1)),this.handlers=new ki(this,e);var a="string"==typeof e.hash&&e.hash||void 0;this._hash=e.hash&&new On(a).addTo(this),this._hash&&this._hash._onHashChange()||(this.jumpTo({center:e.center,zoom:e.zoom,bearing:e.bearing,pitch:e.pitch}),e.bounds&&(this.resize(),this.fitBounds(e.bounds,t.extend({},e.fitBoundsOptions,{duration:0})))),this.resize(),this._localIdeographFontFamily=e.localIdeographFontFamily,e.style&&this.setStyle(e.style,{localIdeographFontFamily:e.localIdeographFontFamily}),e.attributionControl&&this.addControl(new Mi({customAttribution:e.customAttribution})),this.addControl(new Si,e.logoPosition),this.on("style.load",(function(){r.transform.unmodified&&r.jumpTo(r.style.stylesheet)})),this.on("data",(function(e){r._update("style"===e.dataType),r.fire(new t.Event(e.dataType+"data",e))})),this.on("dataloading",(function(e){r.fire(new t.Event(e.dataType+"dataloading",e))}))}n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i;var a={showTileBoundaries:{configurable:!0},showPadding:{configurable:!0},showCollisionBoxes:{configurable:!0},showOverdrawInspector:{configurable:!0},repaint:{configurable:!0},vertices:{configurable:!0},version:{configurable:!0}};return i.prototype._getMapId=function(){return this._mapId},i.prototype.addControl=function(e,r){if(void 0===r&&e.getDefaultPosition&&(r=e.getDefaultPosition()),void 0===r&&(r="top-right"),!e||!e.onAdd)return this.fire(new t.ErrorEvent(new Error("Invalid argument to map.addControl(). Argument must be a control with onAdd and onRemove methods.")));var n=e.onAdd(this);this._controls.push(e);var i=this._controlPositions[r];return-1!==r.indexOf("bottom")?i.insertBefore(n,i.firstChild):i.appendChild(n),this},i.prototype.removeControl=function(e){if(!e||!e.onRemove)return this.fire(new t.ErrorEvent(new Error("Invalid argument to map.removeControl(). Argument must be a control with onAdd and onRemove methods.")));var r=this._controls.indexOf(e);return r>-1&&this._controls.splice(r,1),e.onRemove(this),this},i.prototype.resize=function(e){var r=this._containerDimensions(),n=r[0],i=r[1];this._resizeCanvas(n,i),this.transform.resize(n,i),this.painter.resize(n,i);var a=!this._moving;return a&&(this.stop(),this.fire(new t.Event("movestart",e)).fire(new t.Event("move",e))),this.fire(new t.Event("resize",e)),a&&this.fire(new t.Event("moveend",e)),this},i.prototype.getBounds=function(){return this.transform.getBounds()},i.prototype.getMaxBounds=function(){return this.transform.getMaxBounds()},i.prototype.setMaxBounds=function(e){return this.transform.setMaxBounds(t.LngLatBounds.convert(e)),this._update()},i.prototype.setMinZoom=function(t){if((t=null==t?-2:t)>=-2&&t<=this.transform.maxZoom)return this.transform.minZoom=t,this._update(),this.getZoom()<t&&this.setZoom(t),this;throw new Error("minZoom must be between -2 and the current maxZoom, inclusive")},i.prototype.getMinZoom=function(){return this.transform.minZoom},i.prototype.setMaxZoom=function(t){if((t=null==t?22:t)>=this.transform.minZoom)return this.transform.maxZoom=t,this._update(),this.getZoom()>t&&this.setZoom(t),this;throw new Error("maxZoom must be greater than the current minZoom")},i.prototype.getMaxZoom=function(){return this.transform.maxZoom},i.prototype.setMinPitch=function(t){if((t=null==t?0:t)<0)throw new Error("minPitch must be greater than or equal to 0");if(t>=0&&t<=this.transform.maxPitch)return this.transform.minPitch=t,this._update(),this.getPitch()<t&&this.setPitch(t),this;throw new Error("minPitch must be between 0 and the current maxPitch, inclusive")},i.prototype.getMinPitch=function(){return this.transform.minPitch},i.prototype.setMaxPitch=function(t){if((t=null==t?Ii:t)>Ii)throw new Error("maxPitch must be less than or equal to 60");if(t>=this.transform.minPitch)return this.transform.maxPitch=t,this._update(),this.getPitch()>t&&this.setPitch(t),this;throw new Error("maxPitch must be greater than the current minPitch")},i.prototype.getMaxPitch=function(){return this.transform.maxPitch},i.prototype.getRenderWorldCopies=function(){return this.transform.renderWorldCopies},i.prototype.setRenderWorldCopies=function(t){return this.transform.renderWorldCopies=t,this._update()},i.prototype.project=function(e){return this.transform.locationPoint(t.LngLat.convert(e))},i.prototype.unproject=function(e){return this.transform.pointLocation(t.Point.convert(e))},i.prototype.isMoving=function(){return this._moving||this.handlers.isMoving()},i.prototype.isZooming=function(){return this._zooming||this.handlers.isZooming()},i.prototype.isRotating=function(){return this._rotating||this.handlers.isRotating()},i.prototype._createDelegatedListener=function(t,e,r){var n,i=this;if("mouseenter"===t||"mouseover"===t){var a=!1;return{layer:e,listener:r,delegates:{mousemove:function(n){var o=i.getLayer(e)?i.queryRenderedFeatures(n.point,{layers:[e]}):[];o.length?a||(a=!0,r.call(i,new Un(t,i,n.originalEvent,{features:o}))):a=!1},mouseout:function(){a=!1}}}}if("mouseleave"===t||"mouseout"===t){var o=!1;return{layer:e,listener:r,delegates:{mousemove:function(n){(i.getLayer(e)?i.queryRenderedFeatures(n.point,{layers:[e]}):[]).length?o=!0:o&&(o=!1,r.call(i,new Un(t,i,n.originalEvent)))},mouseout:function(e){o&&(o=!1,r.call(i,new Un(t,i,e.originalEvent)))}}}}return{layer:e,listener:r,delegates:(n={},n[t]=function(t){var n=i.getLayer(e)?i.queryRenderedFeatures(t.point,{layers:[e]}):[];n.length&&(t.features=n,r.call(i,t),delete t.features)},n)}},i.prototype.on=function(t,e,r){if(void 0===r)return n.prototype.on.call(this,t,e);var i=this._createDelegatedListener(t,e,r);for(var a in this._delegatedListeners=this._delegatedListeners||{},this._delegatedListeners[t]=this._delegatedListeners[t]||[],this._delegatedListeners[t].push(i),i.delegates)this.on(a,i.delegates[a]);return this},i.prototype.once=function(t,e,r){if(void 0===r)return n.prototype.once.call(this,t,e);var i=this._createDelegatedListener(t,e,r);for(var a in i.delegates)this.once(a,i.delegates[a]);return this},i.prototype.off=function(t,e,r){var i=this;if(void 0===r)return n.prototype.off.call(this,t,e);return this._delegatedListeners&&this._delegatedListeners[t]&&function(n){for(var a=n[t],o=0;o<a.length;o++){var s=a[o];if(s.layer===e&&s.listener===r){for(var l in s.delegates)i.off(l,s.delegates[l]);return a.splice(o,1),i}}}(this._delegatedListeners),this},i.prototype.queryRenderedFeatures=function(e,r){if(!this.style)return[];var n;if(void 0!==r||void 0===e||e instanceof t.Point||Array.isArray(e)||(r=e,e=void 0),r=r||{},(e=e||[[0,0],[this.transform.width,this.transform.height]])instanceof t.Point||"number"==typeof e[0])n=[t.Point.convert(e)];else{var i=t.Point.convert(e[0]),a=t.Point.convert(e[1]);n=[i,new t.Point(a.x,i.y),a,new t.Point(i.x,a.y),i]}return this.style.queryRenderedFeatures(n,r,this.transform)},i.prototype.querySourceFeatures=function(t,e){return this.style.querySourceFeatures(t,e)},i.prototype.setStyle=function(e,r){return!1!==(r=t.extend({},{localIdeographFontFamily:this._localIdeographFontFamily},r)).diff&&r.localIdeographFontFamily===this._localIdeographFontFamily&&this.style&&e?(this._diffStyle(e,r),this):(this._localIdeographFontFamily=r.localIdeographFontFamily,this._updateStyle(e,r))},i.prototype._getUIString=function(t){var e=this._locale[t];if(null==e)throw new Error("Missing UI string '"+t+"'");return e},i.prototype._updateStyle=function(t,e){return this.style&&(this.style.setEventedParent(null),this.style._remove()),t?(this.style=new Ye(this,e||{}),this.style.setEventedParent(this,{style:this.style}),"string"==typeof t?this.style.loadURL(t):this.style.loadJSON(t),this):(delete this.style,this)},i.prototype._lazyInitEmptyStyle=function(){this.style||(this.style=new Ye(this,{}),this.style.setEventedParent(this,{style:this.style}),this.style.loadEmpty())},i.prototype._diffStyle=function(e,r){var n=this;if("string"==typeof e){var i=this._requestManager.normalizeStyleURL(e),a=this._requestManager.transformRequest(i,t.ResourceType.Style);t.getJSON(a,(function(e,i){e?n.fire(new t.ErrorEvent(e)):i&&n._updateDiff(i,r)}))}else"object"==typeof e&&this._updateDiff(e,r)},i.prototype._updateDiff=function(e,r){try{this.style.setState(e)&&this._update(!0)}catch(n){t.warnOnce("Unable to perform style diff: "+(n.message||n.error||n)+".  Rebuilding the style from scratch."),this._updateStyle(e,r)}},i.prototype.getStyle=function(){if(this.style)return this.style.serialize()},i.prototype.isStyleLoaded=function(){return this.style?this.style.loaded():t.warnOnce("There is no style added to the map.")},i.prototype.addSource=function(t,e){return this._lazyInitEmptyStyle(),this.style.addSource(t,e),this._update(!0)},i.prototype.isSourceLoaded=function(e){var r=this.style&&this.style.sourceCaches[e];if(void 0!==r)return r.loaded();this.fire(new t.ErrorEvent(new Error("There is no source with ID '"+e+"'")))},i.prototype.areTilesLoaded=function(){var t=this.style&&this.style.sourceCaches;for(var e in t){var r=t[e]._tiles;for(var n in r){var i=r[n];if("loaded"!==i.state&&"errored"!==i.state)return!1}}return!0},i.prototype.addSourceType=function(t,e,r){return this._lazyInitEmptyStyle(),this.style.addSourceType(t,e,r)},i.prototype.removeSource=function(t){return this.style.removeSource(t),this._update(!0)},i.prototype.getSource=function(t){return this.style.getSource(t)},i.prototype.addImage=function(e,r,n){void 0===n&&(n={});var i=n.pixelRatio;void 0===i&&(i=1);var a=n.sdf;void 0===a&&(a=!1);var o=n.stretchX,s=n.stretchY,l=n.content;this._lazyInitEmptyStyle();if(r instanceof Ci||Oi&&r instanceof Oi){var u=t.browser.getImageData(r),c=u.width,f=u.height,h=u.data;this.style.addImage(e,{data:new t.RGBAImage({width:c,height:f},h),pixelRatio:i,stretchX:o,stretchY:s,content:l,sdf:a,version:0})}else{if(void 0===r.width||void 0===r.height)return this.fire(new t.ErrorEvent(new Error("Invalid arguments to map.addImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`")));var p=r.width,d=r.height,v=r.data,g=r;this.style.addImage(e,{data:new t.RGBAImage({width:p,height:d},new Uint8Array(v)),pixelRatio:i,stretchX:o,stretchY:s,content:l,sdf:a,version:0,userImage:g}),g.onAdd&&g.onAdd(this,e)}},i.prototype.updateImage=function(e,r){var n=this.style.getImage(e);if(!n)return this.fire(new t.ErrorEvent(new Error("The map has no image with that id. If you are adding a new image use `map.addImage(...)` instead.")));var i=r instanceof Ci||Oi&&r instanceof Oi?t.browser.getImageData(r):r,a=i.width,o=i.height,s=i.data;if(void 0===a||void 0===o)return this.fire(new t.ErrorEvent(new Error("Invalid arguments to map.updateImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`")));if(a!==n.data.width||o!==n.data.height)return this.fire(new t.ErrorEvent(new Error("The width and height of the updated image must be that same as the previous version of the image")));var l=!(r instanceof Ci||Oi&&r instanceof Oi);n.data.replace(s,l),this.style.updateImage(e,n)},i.prototype.hasImage=function(e){return e?!!this.style.getImage(e):(this.fire(new t.ErrorEvent(new Error("Missing required image id"))),!1)},i.prototype.removeImage=function(t){this.style.removeImage(t)},i.prototype.loadImage=function(e,r){t.getImage(this._requestManager.transformRequest(e,t.ResourceType.Image),r)},i.prototype.listImages=function(){return this.style.listImages()},i.prototype.addLayer=function(t,e){return this._lazyInitEmptyStyle(),this.style.addLayer(t,e),this._update(!0)},i.prototype.moveLayer=function(t,e){return this.style.moveLayer(t,e),this._update(!0)},i.prototype.removeLayer=function(t){return this.style.removeLayer(t),this._update(!0)},i.prototype.getLayer=function(t){return this.style.getLayer(t)},i.prototype.setLayerZoomRange=function(t,e,r){return this.style.setLayerZoomRange(t,e,r),this._update(!0)},i.prototype.setFilter=function(t,e,r){return void 0===r&&(r={}),this.style.setFilter(t,e,r),this._update(!0)},i.prototype.getFilter=function(t){return this.style.getFilter(t)},i.prototype.setPaintProperty=function(t,e,r,n){return void 0===n&&(n={}),this.style.setPaintProperty(t,e,r,n),this._update(!0)},i.prototype.getPaintProperty=function(t,e){return this.style.getPaintProperty(t,e)},i.prototype.setLayoutProperty=function(t,e,r,n){return void 0===n&&(n={}),this.style.setLayoutProperty(t,e,r,n),this._update(!0)},i.prototype.getLayoutProperty=function(t,e){return this.style.getLayoutProperty(t,e)},i.prototype.setLight=function(t,e){return void 0===e&&(e={}),this._lazyInitEmptyStyle(),this.style.setLight(t,e),this._update(!0)},i.prototype.getLight=function(){return this.style.getLight()},i.prototype.setFeatureState=function(t,e){return this.style.setFeatureState(t,e),this._update()},i.prototype.removeFeatureState=function(t,e){return this.style.removeFeatureState(t,e),this._update()},i.prototype.getFeatureState=function(t){return this.style.getFeatureState(t)},i.prototype.getContainer=function(){return this._container},i.prototype.getCanvasContainer=function(){return this._canvasContainer},i.prototype.getCanvas=function(){return this._canvas},i.prototype._containerDimensions=function(){var t=0,e=0;return this._container&&(t=this._container.clientWidth||400,e=this._container.clientHeight||300),[t,e]},i.prototype._detectMissingCSS=function(){"rgb(250, 128, 114)"!==t.window.getComputedStyle(this._missingCSSCanary).getPropertyValue("background-color")&&t.warnOnce("This page appears to be missing CSS declarations for Mapbox GL JS, which may cause the map to display incorrectly. Please ensure your page includes mapbox-gl.css, as described in https://www.mapbox.com/mapbox-gl-js/api/.")},i.prototype._setupContainer=function(){var t=this._container;t.classList.add("mapboxgl-map"),(this._missingCSSCanary=r.create("div","mapboxgl-canary",t)).style.visibility="hidden",this._detectMissingCSS();var e=this._canvasContainer=r.create("div","mapboxgl-canvas-container",t);this._interactive&&e.classList.add("mapboxgl-interactive"),this._canvas=r.create("canvas","mapboxgl-canvas",e),this._canvas.addEventListener("webglcontextlost",this._contextLost,!1),this._canvas.addEventListener("webglcontextrestored",this._contextRestored,!1),this._canvas.setAttribute("tabindex","0"),this._canvas.setAttribute("aria-label","Map");var n=this._containerDimensions();this._resizeCanvas(n[0],n[1]);var i=this._controlContainer=r.create("div","mapboxgl-control-container",t),a=this._controlPositions={};["top-left","top-right","bottom-left","bottom-right"].forEach((function(t){a[t]=r.create("div","mapboxgl-ctrl-"+t,i)}))},i.prototype._resizeCanvas=function(e,r){var n=t.browser.devicePixelRatio||1;this._canvas.width=n*e,this._canvas.height=n*r,this._canvas.style.width=e+"px",this._canvas.style.height=r+"px"},i.prototype._setupPainter=function(){var r=t.extend({},e.webGLContextAttributes,{failIfMajorPerformanceCaveat:this._failIfMajorPerformanceCaveat,preserveDrawingBuffer:this._preserveDrawingBuffer,antialias:this._antialias||!1}),n=this._canvas.getContext("webgl",r)||this._canvas.getContext("experimental-webgl",r);n?(this.painter=new Mn(n,this.transform),t.webpSupported.testSupport(n)):this.fire(new t.ErrorEvent(new Error("Failed to initialize WebGL")))},i.prototype._contextLost=function(e){e.preventDefault(),this._frame&&(this._frame.cancel(),this._frame=null),this.fire(new t.Event("webglcontextlost",{originalEvent:e}))},i.prototype._contextRestored=function(e){this._setupPainter(),this.resize(),this._update(),this.fire(new t.Event("webglcontextrestored",{originalEvent:e}))},i.prototype.loaded=function(){return!this._styleDirty&&!this._sourcesDirty&&!!this.style&&this.style.loaded()},i.prototype._update=function(t){return this.style?(this._styleDirty=this._styleDirty||t,this._sourcesDirty=!0,this.triggerRepaint(),this):this},i.prototype._requestRenderFrame=function(t){return this._update(),this._renderTaskQueue.add(t)},i.prototype._cancelRenderFrame=function(t){this._renderTaskQueue.remove(t)},i.prototype._render=function(e){var r,n=this,i=0,a=this.painter.context.extTimerQuery;if(this.listens("gpu-timing-frame")&&(r=a.createQueryEXT(),a.beginQueryEXT(a.TIME_ELAPSED_EXT,r),i=t.browser.now()),this.painter.context.setDirty(),this.painter.setBaseState(),this._renderTaskQueue.run(e),!this._removed){var o=!1;if(this.style&&this._styleDirty){this._styleDirty=!1;var s=this.transform.zoom,l=t.browser.now();this.style.zoomHistory.update(s,l);var u=new t.EvaluationParameters(s,{now:l,fadeDuration:this._fadeDuration,zoomHistory:this.style.zoomHistory,transition:this.style.getTransition()}),c=u.crossFadingFactor();1===c&&c===this._crossFadingFactor||(o=!0,this._crossFadingFactor=c),this.style.update(u)}if(this.style&&this._sourcesDirty&&(this._sourcesDirty=!1,this.style._updateSources(this.transform)),this._placementDirty=this.style&&this.style._updatePlacement(this.painter.transform,this.showCollisionBoxes,this._fadeDuration,this._crossSourceCollisions),this.painter.render(this.style,{showTileBoundaries:this.showTileBoundaries,showOverdrawInspector:this._showOverdrawInspector,rotating:this.isRotating(),zooming:this.isZooming(),moving:this.isMoving(),fadeDuration:this._fadeDuration,showPadding:this.showPadding,gpuTiming:!!this.listens("gpu-timing-layer")}),this.fire(new t.Event("render")),this.loaded()&&!this._loaded&&(this._loaded=!0,this.fire(new t.Event("load"))),this.style&&(this.style.hasTransitions()||o)&&(this._styleDirty=!0),this.style&&!this._placementDirty&&this.style._releaseSymbolFadeTiles(),this.listens("gpu-timing-frame")){var f=t.browser.now()-i;a.endQueryEXT(a.TIME_ELAPSED_EXT,r),setTimeout((function(){var e=a.getQueryObjectEXT(r,a.QUERY_RESULT_EXT)/1e6;a.deleteQueryEXT(r),n.fire(new t.Event("gpu-timing-frame",{cpuTime:f,gpuTime:e}))}),50)}if(this.listens("gpu-timing-layer")){var h=this.painter.collectGpuTimers();setTimeout((function(){var e=n.painter.queryGpuTimers(h);n.fire(new t.Event("gpu-timing-layer",{layerTimes:e}))}),50)}return this._sourcesDirty||this._styleDirty||this._placementDirty||this._repaint?this.triggerRepaint():!this.isMoving()&&this.loaded()&&(this._fullyLoaded||(this._fullyLoaded=!0),this.fire(new t.Event("idle"))),this}},i.prototype.remove=function(){this._hash&&this._hash.remove();for(var e=0,r=this._controls;e<r.length;e+=1)r[e].onRemove(this);this._controls=[],this._frame&&(this._frame.cancel(),this._frame=null),this._renderTaskQueue.clear(),this.painter.destroy(),this.handlers.destroy(),delete this.handlers,this.setStyle(null),void 0!==t.window&&(t.window.removeEventListener("resize",this._onWindowResize,!1),t.window.removeEventListener("online",this._onWindowOnline,!1));var n=this.painter.context.gl.getExtension("WEBGL_lose_context");n&&n.loseContext(),Ri(this._canvasContainer),Ri(this._controlContainer),Ri(this._missingCSSCanary),this._container.classList.remove("mapboxgl-map"),this._removed=!0,this.fire(new t.Event("remove"))},i.prototype.triggerRepaint=function(){var e=this;this.style&&!this._frame&&(this._frame=t.browser.frame((function(t){e._frame=null,e._render(t)})))},i.prototype._onWindowOnline=function(){this._update()},i.prototype._onWindowResize=function(t){this._trackResize&&this.resize({originalEvent:t})._update()},a.showTileBoundaries.get=function(){return!!this._showTileBoundaries},a.showTileBoundaries.set=function(t){this._showTileBoundaries!==t&&(this._showTileBoundaries=t,this._update())},a.showPadding.get=function(){return!!this._showPadding},a.showPadding.set=function(t){this._showPadding!==t&&(this._showPadding=t,this._update())},a.showCollisionBoxes.get=function(){return!!this._showCollisionBoxes},a.showCollisionBoxes.set=function(t){this._showCollisionBoxes!==t&&(this._showCollisionBoxes=t,t?this.style._generateCollisionBoxes():this._update())},a.showOverdrawInspector.get=function(){return!!this._showOverdrawInspector},a.showOverdrawInspector.set=function(t){this._showOverdrawInspector!==t&&(this._showOverdrawInspector=t,this._update())},a.repaint.get=function(){return!!this._repaint},a.repaint.set=function(t){this._repaint!==t&&(this._repaint=t,this.triggerRepaint())},a.vertices.get=function(){return!!this._vertices},a.vertices.set=function(t){this._vertices=t,this._update()},i.prototype._setCacheLimits=function(e,r){t.setCacheLimits(e,r)},a.version.get=function(){return t.version},Object.defineProperties(i.prototype,a),i}(Ai);function Ri(t){t.parentNode&&t.parentNode.removeChild(t)}var Fi={showCompass:!0,showZoom:!0,visualizePitch:!1},Bi=function(e){var n=this;this.options=t.extend({},Fi,e),this._container=r.create("div","mapboxgl-ctrl mapboxgl-ctrl-group"),this._container.addEventListener("contextmenu",(function(t){return t.preventDefault()})),this.options.showZoom&&(t.bindAll(["_setButtonTitle","_updateZoomButtons"],this),this._zoomInButton=this._createButton("mapboxgl-ctrl-zoom-in",(function(t){return n._map.zoomIn({},{originalEvent:t})})),r.create("span","mapboxgl-ctrl-icon",this._zoomInButton).setAttribute("aria-hidden",!0),this._zoomOutButton=this._createButton("mapboxgl-ctrl-zoom-out",(function(t){return n._map.zoomOut({},{originalEvent:t})})),r.create("span","mapboxgl-ctrl-icon",this._zoomOutButton).setAttribute("aria-hidden",!0)),this.options.showCompass&&(t.bindAll(["_rotateCompassArrow"],this),this._compass=this._createButton("mapboxgl-ctrl-compass",(function(t){n.options.visualizePitch?n._map.resetNorthPitch({},{originalEvent:t}):n._map.resetNorth({},{originalEvent:t})})),this._compassIcon=r.create("span","mapboxgl-ctrl-icon",this._compass),this._compassIcon.setAttribute("aria-hidden",!0))};Bi.prototype._updateZoomButtons=function(){var t=this._map.getZoom();this._zoomInButton.disabled=t===this._map.getMaxZoom(),this._zoomOutButton.disabled=t===this._map.getMinZoom()},Bi.prototype._rotateCompassArrow=function(){var t=this.options.visualizePitch?"scale("+1/Math.pow(Math.cos(this._map.transform.pitch*(Math.PI/180)),.5)+") rotateX("+this._map.transform.pitch+"deg) rotateZ("+this._map.transform.angle*(180/Math.PI)+"deg)":"rotate("+this._map.transform.angle*(180/Math.PI)+"deg)";this._compassIcon.style.transform=t},Bi.prototype.onAdd=function(t){return this._map=t,this.options.showZoom&&(this._setButtonTitle(this._zoomInButton,"ZoomIn"),this._setButtonTitle(this._zoomOutButton,"ZoomOut"),this._map.on("zoom",this._updateZoomButtons),this._updateZoomButtons()),this.options.showCompass&&(this._setButtonTitle(this._compass,"ResetBearing"),this.options.visualizePitch&&this._map.on("pitch",this._rotateCompassArrow),this._map.on("rotate",this._rotateCompassArrow),this._rotateCompassArrow(),this._handler=new Ni(this._map,this._compass,this.options.visualizePitch)),this._container},Bi.prototype.onRemove=function(){r.remove(this._container),this.options.showZoom&&this._map.off("zoom",this._updateZoomButtons),this.options.showCompass&&(this.options.visualizePitch&&this._map.off("pitch",this._rotateCompassArrow),this._map.off("rotate",this._rotateCompassArrow),this._handler.off(),delete this._handler),delete this._map},Bi.prototype._createButton=function(t,e){var n=r.create("button",t,this._container);return n.type="button",n.addEventListener("click",e),n},Bi.prototype._setButtonTitle=function(t,e){var r=this._map._getUIString("NavigationControl."+e);t.title=r,t.setAttribute("aria-label",r)};var Ni=function(e,n,i){void 0===i&&(i=!1),this._clickTolerance=10,this.element=n,this.mouseRotate=new Qn({clickTolerance:e.dragRotate._mouseRotate._clickTolerance}),this.map=e,i&&(this.mousePitch=new ti({clickTolerance:e.dragRotate._mousePitch._clickTolerance})),t.bindAll(["mousedown","mousemove","mouseup","touchstart","touchmove","touchend","reset"],this),r.addEventListener(n,"mousedown",this.mousedown),r.addEventListener(n,"touchstart",this.touchstart,{passive:!1}),r.addEventListener(n,"touchmove",this.touchmove),r.addEventListener(n,"touchend",this.touchend),r.addEventListener(n,"touchcancel",this.reset)};function ji(e,r,n){if(e=new t.LngLat(e.lng,e.lat),r){var i=new t.LngLat(e.lng-360,e.lat),a=new t.LngLat(e.lng+360,e.lat),o=n.locationPoint(e).distSqr(r);n.locationPoint(i).distSqr(r)<o?e=i:n.locationPoint(a).distSqr(r)<o&&(e=a)}for(;Math.abs(e.lng-n.center.lng)>180;){var s=n.locationPoint(e);if(s.x>=0&&s.y>=0&&s.x<=n.width&&s.y<=n.height)break;e.lng>n.center.lng?e.lng-=360:e.lng+=360}return e}Ni.prototype.down=function(t,e){this.mouseRotate.mousedown(t,e),this.mousePitch&&this.mousePitch.mousedown(t,e),r.disableDrag()},Ni.prototype.move=function(t,e){var r=this.map,n=this.mouseRotate.mousemoveWindow(t,e);if(n&&n.bearingDelta&&r.setBearing(r.getBearing()+n.bearingDelta),this.mousePitch){var i=this.mousePitch.mousemoveWindow(t,e);i&&i.pitchDelta&&r.setPitch(r.getPitch()+i.pitchDelta)}},Ni.prototype.off=function(){var t=this.element;r.removeEventListener(t,"mousedown",this.mousedown),r.removeEventListener(t,"touchstart",this.touchstart,{passive:!1}),r.removeEventListener(t,"touchmove",this.touchmove),r.removeEventListener(t,"touchend",this.touchend),r.removeEventListener(t,"touchcancel",this.reset),this.offTemp()},Ni.prototype.offTemp=function(){r.enableDrag(),r.removeEventListener(t.window,"mousemove",this.mousemove),r.removeEventListener(t.window,"mouseup",this.mouseup)},Ni.prototype.mousedown=function(e){this.down(t.extend({},e,{ctrlKey:!0,preventDefault:function(){return e.preventDefault()}}),r.mousePos(this.element,e)),r.addEventListener(t.window,"mousemove",this.mousemove),r.addEventListener(t.window,"mouseup",this.mouseup)},Ni.prototype.mousemove=function(t){this.move(t,r.mousePos(this.element,t))},Ni.prototype.mouseup=function(t){this.mouseRotate.mouseupWindow(t),this.mousePitch&&this.mousePitch.mouseupWindow(t),this.offTemp()},Ni.prototype.touchstart=function(t){1!==t.targetTouches.length?this.reset():(this._startPos=this._lastPos=r.touchPos(this.element,t.targetTouches)[0],this.down({type:"mousedown",button:0,ctrlKey:!0,preventDefault:function(){return t.preventDefault()}},this._startPos))},Ni.prototype.touchmove=function(t){1!==t.targetTouches.length?this.reset():(this._lastPos=r.touchPos(this.element,t.targetTouches)[0],this.move({preventDefault:function(){return t.preventDefault()}},this._lastPos))},Ni.prototype.touchend=function(t){0===t.targetTouches.length&&this._startPos&&this._lastPos&&this._startPos.dist(this._lastPos)<this._clickTolerance&&this.element.click(),this.reset()},Ni.prototype.reset=function(){this.mouseRotate.reset(),this.mousePitch&&this.mousePitch.reset(),delete this._startPos,delete this._lastPos,this.offTemp()};var Ui={center:"translate(-50%,-50%)",top:"translate(-50%,0)","top-left":"translate(0,0)","top-right":"translate(-100%,0)",bottom:"translate(-50%,-100%)","bottom-left":"translate(0,-100%)","bottom-right":"translate(-100%,-100%)",left:"translate(0,-50%)",right:"translate(-100%,-50%)"};function Vi(t,e,r){var n=t.classList;for(var i in Ui)n.remove("mapboxgl-"+r+"-anchor-"+i);n.add("mapboxgl-"+r+"-anchor-"+e)}var Hi,qi=function(e){function n(n,i){var a=this;if(e.call(this),(n instanceof t.window.HTMLElement||i)&&(n=t.extend({element:n},i)),t.bindAll(["_update","_onMove","_onUp","_addDragHandler","_onMapClick","_onKeyPress"],this),this._anchor=n&&n.anchor||"center",this._color=n&&n.color||"#3FB1CE",this._draggable=n&&n.draggable||!1,this._state="inactive",this._rotation=n&&n.rotation||0,this._rotationAlignment=n&&n.rotationAlignment||"auto",this._pitchAlignment=n&&n.pitchAlignment&&"auto"!==n.pitchAlignment?n.pitchAlignment:this._rotationAlignment,n&&n.element)this._element=n.element,this._offset=t.Point.convert(n&&n.offset||[0,0]);else{this._defaultMarker=!0,this._element=r.create("div"),this._element.setAttribute("aria-label","Map marker");var o=r.createNS("http://www.w3.org/2000/svg","svg");o.setAttributeNS(null,"display","block"),o.setAttributeNS(null,"height","41px"),o.setAttributeNS(null,"width","27px"),o.setAttributeNS(null,"viewBox","0 0 27 41");var s=r.createNS("http://www.w3.org/2000/svg","g");s.setAttributeNS(null,"stroke","none"),s.setAttributeNS(null,"stroke-width","1"),s.setAttributeNS(null,"fill","none"),s.setAttributeNS(null,"fill-rule","evenodd");var l=r.createNS("http://www.w3.org/2000/svg","g");l.setAttributeNS(null,"fill-rule","nonzero");var u=r.createNS("http://www.w3.org/2000/svg","g");u.setAttributeNS(null,"transform","translate(3.0, 29.0)"),u.setAttributeNS(null,"fill","#000000");for(var c=0,f=[{rx:"10.5",ry:"5.25002273"},{rx:"10.5",ry:"5.25002273"},{rx:"9.5",ry:"4.77275007"},{rx:"8.5",ry:"4.29549936"},{rx:"7.5",ry:"3.81822308"},{rx:"6.5",ry:"3.34094679"},{rx:"5.5",ry:"2.86367051"},{rx:"4.5",ry:"2.38636864"}];c<f.length;c+=1){var h=f[c],p=r.createNS("http://www.w3.org/2000/svg","ellipse");p.setAttributeNS(null,"opacity","0.04"),p.setAttributeNS(null,"cx","10.5"),p.setAttributeNS(null,"cy","5.80029008"),p.setAttributeNS(null,"rx",h.rx),p.setAttributeNS(null,"ry",h.ry),u.appendChild(p)}var d=r.createNS("http://www.w3.org/2000/svg","g");d.setAttributeNS(null,"fill",this._color);var v=r.createNS("http://www.w3.org/2000/svg","path");v.setAttributeNS(null,"d","M27,13.5 C27,19.074644 20.250001,27.000002 14.75,34.500002 C14.016665,35.500004 12.983335,35.500004 12.25,34.500002 C6.7499993,27.000002 0,19.222562 0,13.5 C0,6.0441559 6.0441559,0 13.5,0 C20.955844,0 27,6.0441559 27,13.5 Z"),d.appendChild(v);var g=r.createNS("http://www.w3.org/2000/svg","g");g.setAttributeNS(null,"opacity","0.25"),g.setAttributeNS(null,"fill","#000000");var y=r.createNS("http://www.w3.org/2000/svg","path");y.setAttributeNS(null,"d","M13.5,0 C6.0441559,0 0,6.0441559 0,13.5 C0,19.222562 6.7499993,27 12.25,34.5 C13,35.522727 14.016664,35.500004 14.75,34.5 C20.250001,27 27,19.074644 27,13.5 C27,6.0441559 20.955844,0 13.5,0 Z M13.5,1 C20.415404,1 26,6.584596 26,13.5 C26,15.898657 24.495584,19.181431 22.220703,22.738281 C19.945823,26.295132 16.705119,30.142167 13.943359,33.908203 C13.743445,34.180814 13.612715,34.322738 13.5,34.441406 C13.387285,34.322738 13.256555,34.180814 13.056641,33.908203 C10.284481,30.127985 7.4148684,26.314159 5.015625,22.773438 C2.6163816,19.232715 1,15.953538 1,13.5 C1,6.584596 6.584596,1 13.5,1 Z"),g.appendChild(y);var m=r.createNS("http://www.w3.org/2000/svg","g");m.setAttributeNS(null,"transform","translate(6.0, 7.0)"),m.setAttributeNS(null,"fill","#FFFFFF");var x=r.createNS("http://www.w3.org/2000/svg","g");x.setAttributeNS(null,"transform","translate(8.0, 8.0)");var b=r.createNS("http://www.w3.org/2000/svg","circle");b.setAttributeNS(null,"fill","#000000"),b.setAttributeNS(null,"opacity","0.25"),b.setAttributeNS(null,"cx","5.5"),b.setAttributeNS(null,"cy","5.5"),b.setAttributeNS(null,"r","5.4999962");var _=r.createNS("http://www.w3.org/2000/svg","circle");_.setAttributeNS(null,"fill","#FFFFFF"),_.setAttributeNS(null,"cx","5.5"),_.setAttributeNS(null,"cy","5.5"),_.setAttributeNS(null,"r","5.4999962"),x.appendChild(b),x.appendChild(_),l.appendChild(u),l.appendChild(d),l.appendChild(g),l.appendChild(m),l.appendChild(x),o.appendChild(l),this._element.appendChild(o),this._offset=t.Point.convert(n&&n.offset||[0,-14])}this._element.classList.add("mapboxgl-marker"),this._element.addEventListener("dragstart",(function(t){t.preventDefault()})),this._element.addEventListener("mousedown",(function(t){t.preventDefault()})),this._element.addEventListener("focus",(function(){var t=a._map.getContainer();t.scrollTop=0,t.scrollLeft=0})),Vi(this._element,this._anchor,"marker"),this._popup=null}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.addTo=function(t){return this.remove(),this._map=t,t.getCanvasContainer().appendChild(this._element),t.on("move",this._update),t.on("moveend",this._update),this.setDraggable(this._draggable),this._update(),this._map.on("click",this._onMapClick),this},n.prototype.remove=function(){return this._map&&(this._map.off("click",this._onMapClick),this._map.off("move",this._update),this._map.off("moveend",this._update),this._map.off("mousedown",this._addDragHandler),this._map.off("touchstart",this._addDragHandler),this._map.off("mouseup",this._onUp),this._map.off("touchend",this._onUp),this._map.off("mousemove",this._onMove),this._map.off("touchmove",this._onMove),delete this._map),r.remove(this._element),this._popup&&this._popup.remove(),this},n.prototype.getLngLat=function(){return this._lngLat},n.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._popup&&this._popup.setLngLat(this._lngLat),this._update(),this},n.prototype.getElement=function(){return this._element},n.prototype.setPopup=function(t){if(this._popup&&(this._popup.remove(),this._popup=null,this._element.removeEventListener("keypress",this._onKeyPress),this._originalTabIndex||this._element.removeAttribute("tabindex")),t){if(!("offset"in t.options)){var e=13.5,r=Math.sqrt(Math.pow(e,2)/2);t.options.offset=this._defaultMarker?{top:[0,0],"top-left":[0,0],"top-right":[0,0],bottom:[0,-38.1],"bottom-left":[r,-1*(24.6+r)],"bottom-right":[-r,-1*(24.6+r)],left:[e,-24.6],right:[-13.5,-24.6]}:this._offset}this._popup=t,this._lngLat&&this._popup.setLngLat(this._lngLat),this._originalTabIndex=this._element.getAttribute("tabindex"),this._originalTabIndex||this._element.setAttribute("tabindex","0"),this._element.addEventListener("keypress",this._onKeyPress)}return this},n.prototype._onKeyPress=function(t){var e=t.code,r=t.charCode||t.keyCode;"Space"!==e&&"Enter"!==e&&32!==r&&13!==r||this.togglePopup()},n.prototype._onMapClick=function(t){var e=t.originalEvent.target,r=this._element;this._popup&&(e===r||r.contains(e))&&this.togglePopup()},n.prototype.getPopup=function(){return this._popup},n.prototype.togglePopup=function(){var t=this._popup;return t?(t.isOpen()?t.remove():t.addTo(this._map),this):this},n.prototype._update=function(t){if(this._map){this._map.transform.renderWorldCopies&&(this._lngLat=ji(this._lngLat,this._pos,this._map.transform)),this._pos=this._map.project(this._lngLat)._add(this._offset);var e="";"viewport"===this._rotationAlignment||"auto"===this._rotationAlignment?e="rotateZ("+this._rotation+"deg)":"map"===this._rotationAlignment&&(e="rotateZ("+(this._rotation-this._map.getBearing())+"deg)");var n="";"viewport"===this._pitchAlignment||"auto"===this._pitchAlignment?n="rotateX(0deg)":"map"===this._pitchAlignment&&(n="rotateX("+this._map.getPitch()+"deg)"),t&&"moveend"!==t.type||(this._pos=this._pos.round()),r.setTransform(this._element,Ui[this._anchor]+" translate("+this._pos.x+"px, "+this._pos.y+"px) "+n+" "+e)}},n.prototype.getOffset=function(){return this._offset},n.prototype.setOffset=function(e){return this._offset=t.Point.convert(e),this._update(),this},n.prototype._onMove=function(e){this._pos=e.point.sub(this._positionDelta),this._lngLat=this._map.unproject(this._pos),this.setLngLat(this._lngLat),this._element.style.pointerEvents="none","pending"===this._state&&(this._state="active",this.fire(new t.Event("dragstart"))),this.fire(new t.Event("drag"))},n.prototype._onUp=function(){this._element.style.pointerEvents="auto",this._positionDelta=null,this._map.off("mousemove",this._onMove),this._map.off("touchmove",this._onMove),"active"===this._state&&this.fire(new t.Event("dragend")),this._state="inactive"},n.prototype._addDragHandler=function(t){this._element.contains(t.originalEvent.target)&&(t.preventDefault(),this._positionDelta=t.point.sub(this._pos).add(this._offset),this._state="pending",this._map.on("mousemove",this._onMove),this._map.on("touchmove",this._onMove),this._map.once("mouseup",this._onUp),this._map.once("touchend",this._onUp))},n.prototype.setDraggable=function(t){return this._draggable=!!t,this._map&&(t?(this._map.on("mousedown",this._addDragHandler),this._map.on("touchstart",this._addDragHandler)):(this._map.off("mousedown",this._addDragHandler),this._map.off("touchstart",this._addDragHandler))),this},n.prototype.isDraggable=function(){return this._draggable},n.prototype.setRotation=function(t){return this._rotation=t||0,this._update(),this},n.prototype.getRotation=function(){return this._rotation},n.prototype.setRotationAlignment=function(t){return this._rotationAlignment=t||"auto",this._update(),this},n.prototype.getRotationAlignment=function(){return this._rotationAlignment},n.prototype.setPitchAlignment=function(t){return this._pitchAlignment=t&&"auto"!==t?t:this._rotationAlignment,this._update(),this},n.prototype.getPitchAlignment=function(){return this._pitchAlignment},n}(t.Evented),Gi={positionOptions:{enableHighAccuracy:!1,maximumAge:0,timeout:6e3},fitBoundsOptions:{maxZoom:15},trackUserLocation:!1,showAccuracyCircle:!0,showUserLocation:!0};var Zi=0,Yi=!1,Wi=function(e){function n(r){e.call(this),this.options=t.extend({},Gi,r),t.bindAll(["_onSuccess","_onError","_onZoom","_finish","_setupUI","_updateCamera","_updateMarker"],this)}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.onAdd=function(e){return this._map=e,this._container=r.create("div","mapboxgl-ctrl mapboxgl-ctrl-group"),n=this._setupUI,void 0!==Hi?n(Hi):void 0!==t.window.navigator.permissions?t.window.navigator.permissions.query({name:"geolocation"}).then((function(t){Hi="denied"!==t.state,n(Hi)})):(Hi=!!t.window.navigator.geolocation,n(Hi)),this._container;var n},n.prototype.onRemove=function(){void 0!==this._geolocationWatchID&&(t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0),this.options.showUserLocation&&this._userLocationDotMarker&&this._userLocationDotMarker.remove(),this.options.showAccuracyCircle&&this._accuracyCircleMarker&&this._accuracyCircleMarker.remove(),r.remove(this._container),this._map.off("zoom",this._onZoom),this._map=void 0,Zi=0,Yi=!1},n.prototype._isOutOfMapMaxBounds=function(t){var e=this._map.getMaxBounds(),r=t.coords;return e&&(r.longitude<e.getWest()||r.longitude>e.getEast()||r.latitude<e.getSouth()||r.latitude>e.getNorth())},n.prototype._setErrorState=function(){switch(this._watchState){case"WAITING_ACTIVE":this._watchState="ACTIVE_ERROR",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error");break;case"ACTIVE_LOCK":this._watchState="ACTIVE_ERROR",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting");break;case"BACKGROUND":this._watchState="BACKGROUND_ERROR",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting")}},n.prototype._onSuccess=function(e){if(this._map){if(this._isOutOfMapMaxBounds(e))return this._setErrorState(),this.fire(new t.Event("outofmaxbounds",e)),this._updateMarker(),void this._finish();if(this.options.trackUserLocation)switch(this._lastKnownPosition=e,this._watchState){case"WAITING_ACTIVE":case"ACTIVE_LOCK":case"ACTIVE_ERROR":this._watchState="ACTIVE_LOCK",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active");break;case"BACKGROUND":case"BACKGROUND_ERROR":this._watchState="BACKGROUND",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background")}this.options.showUserLocation&&"OFF"!==this._watchState&&this._updateMarker(e),this.options.trackUserLocation&&"ACTIVE_LOCK"!==this._watchState||this._updateCamera(e),this.options.showUserLocation&&this._dotElement.classList.remove("mapboxgl-user-location-dot-stale"),this.fire(new t.Event("geolocate",e)),this._finish()}},n.prototype._updateCamera=function(e){var r=new t.LngLat(e.coords.longitude,e.coords.latitude),n=e.coords.accuracy,i=this._map.getBearing(),a=t.extend({bearing:i},this.options.fitBoundsOptions);this._map.fitBounds(r.toBounds(n),a,{geolocateSource:!0})},n.prototype._updateMarker=function(e){if(e){var r=new t.LngLat(e.coords.longitude,e.coords.latitude);this._accuracyCircleMarker.setLngLat(r).addTo(this._map),this._userLocationDotMarker.setLngLat(r).addTo(this._map),this._accuracy=e.coords.accuracy,this.options.showUserLocation&&this.options.showAccuracyCircle&&this._updateCircleRadius()}else this._userLocationDotMarker.remove(),this._accuracyCircleMarker.remove()},n.prototype._updateCircleRadius=function(){var t=this._map._container.clientHeight/2,e=this._map.unproject([0,t]),r=this._map.unproject([1,t]),n=e.distanceTo(r),i=Math.ceil(2*this._accuracy/n);this._circleElement.style.width=i+"px",this._circleElement.style.height=i+"px"},n.prototype._onZoom=function(){this.options.showUserLocation&&this.options.showAccuracyCircle&&this._updateCircleRadius()},n.prototype._onError=function(e){if(this._map){if(this.options.trackUserLocation)if(1===e.code){this._watchState="OFF",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"),this._geolocateButton.disabled=!0;var r=this._map._getUIString("GeolocateControl.LocationNotAvailable");this._geolocateButton.title=r,this._geolocateButton.setAttribute("aria-label",r),void 0!==this._geolocationWatchID&&this._clearWatch()}else{if(3===e.code&&Yi)return;this._setErrorState()}"OFF"!==this._watchState&&this.options.showUserLocation&&this._dotElement.classList.add("mapboxgl-user-location-dot-stale"),this.fire(new t.Event("error",e)),this._finish()}},n.prototype._finish=function(){this._timeoutId&&clearTimeout(this._timeoutId),this._timeoutId=void 0},n.prototype._setupUI=function(e){var n=this;if(this._container.addEventListener("contextmenu",(function(t){return t.preventDefault()})),this._geolocateButton=r.create("button","mapboxgl-ctrl-geolocate",this._container),r.create("span","mapboxgl-ctrl-icon",this._geolocateButton).setAttribute("aria-hidden",!0),this._geolocateButton.type="button",!1===e){t.warnOnce("Geolocation support is not available so the GeolocateControl will be disabled.");var i=this._map._getUIString("GeolocateControl.LocationNotAvailable");this._geolocateButton.disabled=!0,this._geolocateButton.title=i,this._geolocateButton.setAttribute("aria-label",i)}else{var a=this._map._getUIString("GeolocateControl.FindMyLocation");this._geolocateButton.title=a,this._geolocateButton.setAttribute("aria-label",a)}this.options.trackUserLocation&&(this._geolocateButton.setAttribute("aria-pressed","false"),this._watchState="OFF"),this.options.showUserLocation&&(this._dotElement=r.create("div","mapboxgl-user-location-dot"),this._userLocationDotMarker=new qi(this._dotElement),this._circleElement=r.create("div","mapboxgl-user-location-accuracy-circle"),this._accuracyCircleMarker=new qi({element:this._circleElement,pitchAlignment:"map"}),this.options.trackUserLocation&&(this._watchState="OFF"),this._map.on("zoom",this._onZoom)),this._geolocateButton.addEventListener("click",this.trigger.bind(this)),this._setup=!0,this.options.trackUserLocation&&this._map.on("movestart",(function(e){var r=e.originalEvent&&"resize"===e.originalEvent.type;e.geolocateSource||"ACTIVE_LOCK"!==n._watchState||r||(n._watchState="BACKGROUND",n._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background"),n._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),n.fire(new t.Event("trackuserlocationend")))}))},n.prototype.trigger=function(){if(!this._setup)return t.warnOnce("Geolocate control triggered before added to a map"),!1;if(this.options.trackUserLocation){switch(this._watchState){case"OFF":this._watchState="WAITING_ACTIVE",this.fire(new t.Event("trackuserlocationstart"));break;case"WAITING_ACTIVE":case"ACTIVE_LOCK":case"ACTIVE_ERROR":case"BACKGROUND_ERROR":Zi--,Yi=!1,this._watchState="OFF",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"),this.fire(new t.Event("trackuserlocationend"));break;case"BACKGROUND":this._watchState="ACTIVE_LOCK",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._lastKnownPosition&&this._updateCamera(this._lastKnownPosition),this.fire(new t.Event("trackuserlocationstart"))}switch(this._watchState){case"WAITING_ACTIVE":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active");break;case"ACTIVE_LOCK":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active");break;case"ACTIVE_ERROR":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error");break;case"BACKGROUND":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background");break;case"BACKGROUND_ERROR":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background-error")}if("OFF"===this._watchState&&void 0!==this._geolocationWatchID)this._clearWatch();else if(void 0===this._geolocationWatchID){var e;this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.setAttribute("aria-pressed","true"),++Zi>1?(e={maximumAge:6e5,timeout:0},Yi=!0):(e=this.options.positionOptions,Yi=!1),this._geolocationWatchID=t.window.navigator.geolocation.watchPosition(this._onSuccess,this._onError,e)}}else t.window.navigator.geolocation.getCurrentPosition(this._onSuccess,this._onError,this.options.positionOptions),this._timeoutId=setTimeout(this._finish,1e4);return!0},n.prototype._clearWatch=function(){t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0,this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.setAttribute("aria-pressed","false"),this.options.showUserLocation&&this._updateMarker(null)},n}(t.Evented),Xi={maxWidth:100,unit:"metric"},Ji=function(e){this.options=t.extend({},Xi,e),t.bindAll(["_onMove","setUnit"],this)};function Ki(t,e,r){var n=r&&r.maxWidth||100,i=t._container.clientHeight/2,a=t.unproject([0,i]),o=t.unproject([n,i]),s=a.distanceTo(o);if(r&&"imperial"===r.unit){var l=3.2808*s;l>5280?$i(e,n,l/5280,t._getUIString("ScaleControl.Miles")):$i(e,n,l,t._getUIString("ScaleControl.Feet"))}else r&&"nautical"===r.unit?$i(e,n,s/1852,t._getUIString("ScaleControl.NauticalMiles")):s>=1e3?$i(e,n,s/1e3,t._getUIString("ScaleControl.Kilometers")):$i(e,n,s,t._getUIString("ScaleControl.Meters"))}function $i(t,e,r,n){var i,a,o,s=(i=r,(a=Math.pow(10,(""+Math.floor(i)).length-1))*((o=i/a)>=10?10:o>=5?5:o>=3?3:o>=2?2:o>=1?1:function(t){var e=Math.pow(10,Math.ceil(-Math.log(t)/Math.LN10));return Math.round(t*e)/e}(o))),l=s/r;t.style.width=e*l+"px",t.innerHTML=s+"&nbsp;"+n}Ji.prototype.getDefaultPosition=function(){return"bottom-left"},Ji.prototype._onMove=function(){Ki(this._map,this._container,this.options)},Ji.prototype.onAdd=function(t){return this._map=t,this._container=r.create("div","mapboxgl-ctrl mapboxgl-ctrl-scale",t.getContainer()),this._map.on("move",this._onMove),this._onMove(),this._container},Ji.prototype.onRemove=function(){r.remove(this._container),this._map.off("move",this._onMove),this._map=void 0},Ji.prototype.setUnit=function(t){this.options.unit=t,Ki(this._map,this._container,this.options)};var Qi=function(e){this._fullscreen=!1,e&&e.container&&(e.container instanceof t.window.HTMLElement?this._container=e.container:t.warnOnce("Full screen control 'container' must be a DOM element.")),t.bindAll(["_onClickFullscreen","_changeIcon"],this),"onfullscreenchange"in t.window.document?this._fullscreenchange="fullscreenchange":"onmozfullscreenchange"in t.window.document?this._fullscreenchange="mozfullscreenchange":"onwebkitfullscreenchange"in t.window.document?this._fullscreenchange="webkitfullscreenchange":"onmsfullscreenchange"in t.window.document&&(this._fullscreenchange="MSFullscreenChange")};Qi.prototype.onAdd=function(e){return this._map=e,this._container||(this._container=this._map.getContainer()),this._controlContainer=r.create("div","mapboxgl-ctrl mapboxgl-ctrl-group"),this._checkFullscreenSupport()?this._setupUI():(this._controlContainer.style.display="none",t.warnOnce("This device does not support fullscreen mode.")),this._controlContainer},Qi.prototype.onRemove=function(){r.remove(this._controlContainer),this._map=null,t.window.document.removeEventListener(this._fullscreenchange,this._changeIcon)},Qi.prototype._checkFullscreenSupport=function(){return!!(t.window.document.fullscreenEnabled||t.window.document.mozFullScreenEnabled||t.window.document.msFullscreenEnabled||t.window.document.webkitFullscreenEnabled)},Qi.prototype._setupUI=function(){var e=this._fullscreenButton=r.create("button","mapboxgl-ctrl-fullscreen",this._controlContainer);r.create("span","mapboxgl-ctrl-icon",e).setAttribute("aria-hidden",!0),e.type="button",this._updateTitle(),this._fullscreenButton.addEventListener("click",this._onClickFullscreen),t.window.document.addEventListener(this._fullscreenchange,this._changeIcon)},Qi.prototype._updateTitle=function(){var t=this._getTitle();this._fullscreenButton.setAttribute("aria-label",t),this._fullscreenButton.title=t},Qi.prototype._getTitle=function(){return this._map._getUIString(this._isFullscreen()?"FullscreenControl.Exit":"FullscreenControl.Enter")},Qi.prototype._isFullscreen=function(){return this._fullscreen},Qi.prototype._changeIcon=function(){(t.window.document.fullscreenElement||t.window.document.mozFullScreenElement||t.window.document.webkitFullscreenElement||t.window.document.msFullscreenElement)===this._container!==this._fullscreen&&(this._fullscreen=!this._fullscreen,this._fullscreenButton.classList.toggle("mapboxgl-ctrl-shrink"),this._fullscreenButton.classList.toggle("mapboxgl-ctrl-fullscreen"),this._updateTitle())},Qi.prototype._onClickFullscreen=function(){this._isFullscreen()?t.window.document.exitFullscreen?t.window.document.exitFullscreen():t.window.document.mozCancelFullScreen?t.window.document.mozCancelFullScreen():t.window.document.msExitFullscreen?t.window.document.msExitFullscreen():t.window.document.webkitCancelFullScreen&&t.window.document.webkitCancelFullScreen():this._container.requestFullscreen?this._container.requestFullscreen():this._container.mozRequestFullScreen?this._container.mozRequestFullScreen():this._container.msRequestFullscreen?this._container.msRequestFullscreen():this._container.webkitRequestFullscreen&&this._container.webkitRequestFullscreen()};var ta={closeButton:!0,closeOnClick:!0,className:"",maxWidth:"240px"},ea=function(e){function n(r){e.call(this),this.options=t.extend(Object.create(ta),r),t.bindAll(["_update","_onClose","remove","_onMouseMove","_onMouseUp","_onDrag"],this)}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.addTo=function(e){return this._map&&this.remove(),this._map=e,this.options.closeOnClick&&this._map.on("click",this._onClose),this.options.closeOnMove&&this._map.on("move",this._onClose),this._map.on("remove",this.remove),this._update(),this._trackPointer?(this._map.on("mousemove",this._onMouseMove),this._map.on("mouseup",this._onMouseUp),this._container&&this._container.classList.add("mapboxgl-popup-track-pointer"),this._map._canvasContainer.classList.add("mapboxgl-track-pointer")):this._map.on("move",this._update),this.fire(new t.Event("open")),this},n.prototype.isOpen=function(){return!!this._map},n.prototype.remove=function(){return this._content&&r.remove(this._content),this._container&&(r.remove(this._container),delete this._container),this._map&&(this._map.off("move",this._update),this._map.off("move",this._onClose),this._map.off("click",this._onClose),this._map.off("remove",this.remove),this._map.off("mousemove",this._onMouseMove),this._map.off("mouseup",this._onMouseUp),this._map.off("drag",this._onDrag),delete this._map),this.fire(new t.Event("close")),this},n.prototype.getLngLat=function(){return this._lngLat},n.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._trackPointer=!1,this._update(),this._map&&(this._map.on("move",this._update),this._map.off("mousemove",this._onMouseMove),this._container&&this._container.classList.remove("mapboxgl-popup-track-pointer"),this._map._canvasContainer.classList.remove("mapboxgl-track-pointer")),this},n.prototype.trackPointer=function(){return this._trackPointer=!0,this._pos=null,this._update(),this._map&&(this._map.off("move",this._update),this._map.on("mousemove",this._onMouseMove),this._map.on("drag",this._onDrag),this._container&&this._container.classList.add("mapboxgl-popup-track-pointer"),this._map._canvasContainer.classList.add("mapboxgl-track-pointer")),this},n.prototype.getElement=function(){return this._container},n.prototype.setText=function(e){return this.setDOMContent(t.window.document.createTextNode(e))},n.prototype.setHTML=function(e){var r,n=t.window.document.createDocumentFragment(),i=t.window.document.createElement("body");for(i.innerHTML=e;r=i.firstChild;)n.appendChild(r);return this.setDOMContent(n)},n.prototype.getMaxWidth=function(){return this._container&&this._container.style.maxWidth},n.prototype.setMaxWidth=function(t){return this.options.maxWidth=t,this._update(),this},n.prototype.setDOMContent=function(t){return this._createContent(),this._content.appendChild(t),this._update(),this},n.prototype.addClassName=function(t){this._container&&this._container.classList.add(t)},n.prototype.removeClassName=function(t){this._container&&this._container.classList.remove(t)},n.prototype.toggleClassName=function(t){if(this._container)return this._container.classList.toggle(t)},n.prototype._createContent=function(){this._content&&r.remove(this._content),this._content=r.create("div","mapboxgl-popup-content",this._container),this.options.closeButton&&(this._closeButton=r.create("button","mapboxgl-popup-close-button",this._content),this._closeButton.type="button",this._closeButton.setAttribute("aria-label","Close popup"),this._closeButton.innerHTML="&#215;",this._closeButton.addEventListener("click",this._onClose))},n.prototype._onMouseUp=function(t){this._update(t.point)},n.prototype._onMouseMove=function(t){this._update(t.point)},n.prototype._onDrag=function(t){this._update(t.point)},n.prototype._update=function(t){var e=this,n=this._lngLat||this._trackPointer;if(this._map&&n&&this._content&&(this._container||(this._container=r.create("div","mapboxgl-popup",this._map.getContainer()),this._tip=r.create("div","mapboxgl-popup-tip",this._container),this._container.appendChild(this._content),this.options.className&&this.options.className.split(" ").forEach((function(t){return e._container.classList.add(t)})),this._trackPointer&&this._container.classList.add("mapboxgl-popup-track-pointer")),this.options.maxWidth&&this._container.style.maxWidth!==this.options.maxWidth&&(this._container.style.maxWidth=this.options.maxWidth),this._map.transform.renderWorldCopies&&!this._trackPointer&&(this._lngLat=ji(this._lngLat,this._pos,this._map.transform)),!this._trackPointer||t)){var i=this._pos=this._trackPointer&&t?t:this._map.project(this._lngLat),a=this.options.anchor,o=ra(this.options.offset);if(!a){var s,l=this._container.offsetWidth,u=this._container.offsetHeight;s=i.y+o.bottom.y<u?["top"]:i.y>this._map.transform.height-u?["bottom"]:[],i.x<l/2?s.push("left"):i.x>this._map.transform.width-l/2&&s.push("right"),a=0===s.length?"bottom":s.join("-")}var c=i.add(o[a]).round();r.setTransform(this._container,Ui[a]+" translate("+c.x+"px,"+c.y+"px)"),Vi(this._container,a,"popup")}},n.prototype._onClose=function(){this.remove()},n}(t.Evented);function ra(e){if(e){if("number"==typeof e){var r=Math.round(Math.sqrt(.5*Math.pow(e,2)));return{center:new t.Point(0,0),top:new t.Point(0,e),"top-left":new t.Point(r,r),"top-right":new t.Point(-r,r),bottom:new t.Point(0,-e),"bottom-left":new t.Point(r,-r),"bottom-right":new t.Point(-r,-r),left:new t.Point(e,0),right:new t.Point(-e,0)}}if(e instanceof t.Point||Array.isArray(e)){var n=t.Point.convert(e);return{center:n,top:n,"top-left":n,"top-right":n,bottom:n,"bottom-left":n,"bottom-right":n,left:n,right:n}}return{center:t.Point.convert(e.center||[0,0]),top:t.Point.convert(e.top||[0,0]),"top-left":t.Point.convert(e["top-left"]||[0,0]),"top-right":t.Point.convert(e["top-right"]||[0,0]),bottom:t.Point.convert(e.bottom||[0,0]),"bottom-left":t.Point.convert(e["bottom-left"]||[0,0]),"bottom-right":t.Point.convert(e["bottom-right"]||[0,0]),left:t.Point.convert(e.left||[0,0]),right:t.Point.convert(e.right||[0,0])}}return ra(new t.Point(0,0))}var na={version:t.version,supported:e,setRTLTextPlugin:t.setRTLTextPlugin,getRTLTextPluginStatus:t.getRTLTextPluginStatus,Map:zi,NavigationControl:Bi,GeolocateControl:Wi,AttributionControl:Mi,ScaleControl:Ji,FullscreenControl:Qi,Popup:ea,Marker:qi,Style:Ye,LngLat:t.LngLat,LngLatBounds:t.LngLatBounds,Point:t.Point,MercatorCoordinate:t.MercatorCoordinate,Evented:t.Evented,config:t.config,prewarm:function(){jt().acquire(Rt)},clearPrewarmedResources:function(){var t=Bt;t&&(t.isPreloaded()&&1===t.numActive()?(t.release(Rt),Bt=null):console.warn("Could not clear WebWorkers since there are active Map instances that still reference it. The pre-warmed WebWorker pool can only be cleared when all map instances have been removed with map.remove()"))},get accessToken(){return t.config.ACCESS_TOKEN},set accessToken(e){t.config.ACCESS_TOKEN=e},get baseApiUrl(){return t.config.API_URL},set baseApiUrl(e){t.config.API_URL=e},get workerCount(){return Ft.workerCount},set workerCount(t){Ft.workerCount=t},get maxParallelImageRequests(){return t.config.MAX_PARALLEL_IMAGE_REQUESTS},set maxParallelImageRequests(e){t.config.MAX_PARALLEL_IMAGE_REQUESTS=e},clearStorage:function(e){t.clearTileCache(e)},workerUrl:""};return na})),r}()},27084:function(t){"use strict";t.exports=Math.log2||function(t){return Math.log(t)*Math.LOG2E}},16825:function(t,e,r){"use strict";t.exports=function(t,e){e||(e=t,t=window);var r=0,i=0,a=0,o={shift:!1,alt:!1,control:!1,meta:!1},s=!1;function l(t){var e=!1;return"altKey"in t&&(e=e||t.altKey!==o.alt,o.alt=!!t.altKey),"shiftKey"in t&&(e=e||t.shiftKey!==o.shift,o.shift=!!t.shiftKey),"ctrlKey"in t&&(e=e||t.ctrlKey!==o.control,o.control=!!t.ctrlKey),"metaKey"in t&&(e=e||t.metaKey!==o.meta,o.meta=!!t.metaKey),e}function u(t,s){var u=n.x(s),c=n.y(s);"buttons"in s&&(t=0|s.buttons),(t!==r||u!==i||c!==a||l(s))&&(r=0|t,i=u||0,a=c||0,e&&e(r,i,a,o))}function c(t){u(0,t)}function f(){(r||i||a||o.shift||o.alt||o.meta||o.control)&&(i=a=0,r=0,o.shift=o.alt=o.control=o.meta=!1,e&&e(0,0,0,o))}function h(t){l(t)&&e&&e(r,i,a,o)}function p(t){0===n.buttons(t)?u(0,t):u(r,t)}function d(t){u(r|n.buttons(t),t)}function v(t){u(r&~n.buttons(t),t)}function g(){s||(s=!0,t.addEventListener("mousemove",p),t.addEventListener("mousedown",d),t.addEventListener("mouseup",v),t.addEventListener("mouseleave",c),t.addEventListener("mouseenter",c),t.addEventListener("mouseout",c),t.addEventListener("mouseover",c),t.addEventListener("blur",f),t.addEventListener("keyup",h),t.addEventListener("keydown",h),t.addEventListener("keypress",h),t!==window&&(window.addEventListener("blur",f),window.addEventListener("keyup",h),window.addEventListener("keydown",h),window.addEventListener("keypress",h)))}g();var y={element:t};return Object.defineProperties(y,{enabled:{get:function(){return s},set:function(e){e?g():s&&(s=!1,t.removeEventListener("mousemove",p),t.removeEventListener("mousedown",d),t.removeEventListener("mouseup",v),t.removeEventListener("mouseleave",c),t.removeEventListener("mouseenter",c),t.removeEventListener("mouseout",c),t.removeEventListener("mouseover",c),t.removeEventListener("blur",f),t.removeEventListener("keyup",h),t.removeEventListener("keydown",h),t.removeEventListener("keypress",h),t!==window&&(window.removeEventListener("blur",f),window.removeEventListener("keyup",h),window.removeEventListener("keydown",h),window.removeEventListener("keypress",h)))},enumerable:!0},buttons:{get:function(){return r},enumerable:!0},x:{get:function(){return i},enumerable:!0},y:{get:function(){return a},enumerable:!0},mods:{get:function(){return o},enumerable:!0}}),y};var n=r(74311)},48956:function(t){var e={left:0,top:0};t.exports=function(t,r,n){r=r||t.currentTarget||t.srcElement,Array.isArray(n)||(n=[0,0]);var i,a=t.clientX||0,o=t.clientY||0,s=(i=r)===window||i===document||i===document.body?e:i.getBoundingClientRect();return n[0]=a-s.left,n[1]=o-s.top,n}},74311:function(t,e){"use strict";function r(t){return t.target||t.srcElement||window}e.buttons=function(t){if("object"==typeof t){if("buttons"in t)return t.buttons;if("which"in t){if(2===(e=t.which))return 4;if(3===e)return 2;if(e>0)return 1<<e-1}else if("button"in t){var e;if(1===(e=t.button))return 4;if(2===e)return 2;if(e>=0)return 1<<e}}return 0},e.element=r,e.x=function(t){if("object"==typeof t){if("offsetX"in t)return t.offsetX;var e=r(t).getBoundingClientRect();return t.clientX-e.left}return 0},e.y=function(t){if("object"==typeof t){if("offsetY"in t)return t.offsetY;var e=r(t).getBoundingClientRect();return t.clientY-e.top}return 0}},1195:function(t,e,r){"use strict";var n=r(75686);t.exports=function(t,e,r){"function"==typeof t&&(r=!!e,e=t,t=window);var i=n("ex",t),a=function(t){r&&t.preventDefault();var n=t.deltaX||0,a=t.deltaY||0,o=t.deltaZ||0,s=1;switch(t.deltaMode){case 1:s=i;break;case 2:s=window.innerHeight}if(a*=s,o*=s,(n*=s)||a||o)return e(n,a,o,t)};return t.addEventListener("wheel",a),a}},7417:function(t,e,r){var n;!function(i,a,o){a[i]=a[i]||function(){"use strict";var t,e,r,n=Object.prototype.toString,i="undefined"!=typeof setImmediate?function(t){return setImmediate(t)}:setTimeout;try{Object.defineProperty({},"x",{}),t=function(t,e,r,n){return Object.defineProperty(t,e,{value:r,writable:!0,configurable:!1!==n})}}catch(e){t=function(t,e,r){return t[e]=r,t}}function a(t,n){r.add(t,n),e||(e=i(r.drain))}function o(t){var e,r=typeof t;return null==t||"object"!=r&&"function"!=r||(e=t.then),"function"==typeof e&&e}function s(){for(var t=0;t<this.chain.length;t++)l(this,1===this.state?this.chain[t].success:this.chain[t].failure,this.chain[t]);this.chain.length=0}function l(t,e,r){var n,i;try{!1===e?r.reject(t.msg):(n=!0===e?t.msg:e.call(void 0,t.msg))===r.promise?r.reject(TypeError("Promise-chain cycle")):(i=o(n))?i.call(n,r.resolve,r.reject):r.resolve(n)}catch(t){r.reject(t)}}function u(t){var e,r=this;if(!r.triggered){r.triggered=!0,r.def&&(r=r.def);try{(e=o(t))?a((function(){var n=new h(r);try{e.call(t,(function(){u.apply(n,arguments)}),(function(){c.apply(n,arguments)}))}catch(t){c.call(n,t)}})):(r.msg=t,r.state=1,r.chain.length>0&&a(s,r))}catch(t){c.call(new h(r),t)}}}function c(t){var e=this;e.triggered||(e.triggered=!0,e.def&&(e=e.def),e.msg=t,e.state=2,e.chain.length>0&&a(s,e))}function f(t,e,r,n){for(var i=0;i<e.length;i++)!function(i){t.resolve(e[i]).then((function(t){r(i,t)}),n)}(i)}function h(t){this.def=t,this.triggered=!1}function p(t){this.promise=t,this.state=0,this.triggered=!1,this.chain=[],this.msg=void 0}function d(t){if("function"!=typeof t)throw TypeError("Not a function");if(0!==this.__NPO__)throw TypeError("Not a promise");this.__NPO__=1;var e=new p(this);this.then=function(t,r){var n={success:"function"!=typeof t||t,failure:"function"==typeof r&&r};return n.promise=new this.constructor((function(t,e){if("function"!=typeof t||"function"!=typeof e)throw TypeError("Not a function");n.resolve=t,n.reject=e})),e.chain.push(n),0!==e.state&&a(s,e),n.promise},this.catch=function(t){return this.then(void 0,t)};try{t.call(void 0,(function(t){u.call(e,t)}),(function(t){c.call(e,t)}))}catch(t){c.call(e,t)}}r=function(){var t,r,n;function i(t,e){this.fn=t,this.self=e,this.next=void 0}return{add:function(e,a){n=new i(e,a),r?r.next=n:t=n,r=n,n=void 0},drain:function(){var n=t;for(t=r=e=void 0;n;)n.fn.call(n.self),n=n.next}}}();var v=t({},"constructor",d,!1);return d.prototype=v,t(v,"__NPO__",0,!1),t(d,"resolve",(function(t){return t&&"object"==typeof t&&1===t.__NPO__?t:new this((function(e,r){if("function"!=typeof e||"function"!=typeof r)throw TypeError("Not a function");e(t)}))})),t(d,"reject",(function(t){return new this((function(e,r){if("function"!=typeof e||"function"!=typeof r)throw TypeError("Not a function");r(t)}))})),t(d,"all",(function(t){var e=this;return"[object Array]"!=n.call(t)?e.reject(TypeError("Not an array")):0===t.length?e.resolve([]):new e((function(r,n){if("function"!=typeof r||"function"!=typeof n)throw TypeError("Not a function");var i=t.length,a=Array(i),o=0;f(e,t,(function(t,e){a[t]=e,++o===i&&r(a)}),n)}))})),t(d,"race",(function(t){var e=this;return"[object Array]"!=n.call(t)?e.reject(TypeError("Not an array")):new e((function(r,n){if("function"!=typeof r||"function"!=typeof n)throw TypeError("Not a function");f(e,t,(function(t,e){r(e)}),n)}))})),d}(),t.exports?t.exports=a[i]:void 0===(n=function(){return a[i]}.call(e,r,e,t))||(t.exports=n)}("Promise",void 0!==r.g?r.g:this)},18625:function(t){var e=Math.PI,r=s(120);function n(t,e,r,n){return["C",t,e,r,n,r,n]}function i(t,e,r,n,i,a){return["C",t/3+2/3*r,e/3+2/3*n,i/3+2/3*r,a/3+2/3*n,i,a]}function a(t,n,i,s,l,u,c,f,h,p){if(p)T=p[0],k=p[1],_=p[2],w=p[3];else{var d=o(t,n,-l);t=d.x,n=d.y;var v=(t-(f=(d=o(f,h,-l)).x))/2,g=(n-(h=d.y))/2,y=v*v/(i*i)+g*g/(s*s);y>1&&(i*=y=Math.sqrt(y),s*=y);var m=i*i,x=s*s,b=(u==c?-1:1)*Math.sqrt(Math.abs((m*x-m*g*g-x*v*v)/(m*g*g+x*v*v)));b==1/0&&(b=1);var _=b*i*g/s+(t+f)/2,w=b*-s*v/i+(n+h)/2,T=Math.asin(((n-w)/s).toFixed(9)),k=Math.asin(((h-w)/s).toFixed(9));(T=t<_?e-T:T)<0&&(T=2*e+T),(k=f<_?e-k:k)<0&&(k=2*e+k),c&&T>k&&(T-=2*e),!c&&k>T&&(k-=2*e)}if(Math.abs(k-T)>r){var A=k,M=f,S=h;k=T+r*(c&&k>T?1:-1);var E=a(f=_+i*Math.cos(k),h=w+s*Math.sin(k),i,s,l,0,c,M,S,[k,A,_,w])}var L=Math.tan((k-T)/4),C=4/3*i*L,P=4/3*s*L,O=[2*t-(t+C*Math.sin(T)),2*n-(n-P*Math.cos(T)),f+C*Math.sin(k),h-P*Math.cos(k),f,h];if(p)return O;E&&(O=O.concat(E));for(var I=0;I<O.length;){var D=o(O[I],O[I+1],l);O[I++]=D.x,O[I++]=D.y}return O}function o(t,e,r){return{x:t*Math.cos(r)-e*Math.sin(r),y:t*Math.sin(r)+e*Math.cos(r)}}function s(t){return t*(e/180)}t.exports=function(t){for(var e,r=[],o=0,l=0,u=0,c=0,f=null,h=null,p=0,d=0,v=0,g=t.length;v<g;v++){var y=t[v],m=y[0];switch(m){case"M":u=y[1],c=y[2];break;case"A":(y=a(p,d,y[1],y[2],s(y[3]),y[4],y[5],y[6],y[7])).unshift("C"),y.length>7&&(r.push(y.splice(0,7)),y.unshift("C"));break;case"S":var x=p,b=d;"C"!=e&&"S"!=e||(x+=x-o,b+=b-l),y=["C",x,b,y[1],y[2],y[3],y[4]];break;case"T":"Q"==e||"T"==e?(f=2*p-f,h=2*d-h):(f=p,h=d),y=i(p,d,f,h,y[1],y[2]);break;case"Q":f=y[1],h=y[2],y=i(p,d,y[1],y[2],y[3],y[4]);break;case"L":y=n(p,d,y[1],y[2]);break;case"H":y=n(p,d,y[1],d);break;case"V":y=n(p,d,p,y[1]);break;case"Z":y=n(p,d,u,c)}e=m,p=y[y.length-2],d=y[y.length-1],y.length>4?(o=y[y.length-4],l=y[y.length-3]):(o=p,l=d),r.push(y)}return r}},56131:function(t){"use strict";var e=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,n=Object.prototype.propertyIsEnumerable;t.exports=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(e).map((function(t){return e[t]})).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach((function(t){n[t]=t})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(t){return!1}}()?Object.assign:function(t,i){for(var a,o,s=function(t){if(null==t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}(t),l=1;l<arguments.length;l++){for(var u in a=Object(arguments[l]))r.call(a,u)&&(s[u]=a[u]);if(e){o=e(a);for(var c=0;c<o.length;c++)n.call(a,o[c])&&(s[o[c]]=a[o[c]])}}return s}},65848:function(t){"use strict";var e=function(t){return t!=t};t.exports=function(t,r){return 0===t&&0===r?1/t==1/r:t===r||!(!e(t)||!e(r))}},64003:function(t,e,r){"use strict";var n=r(17045),i=r(68222),a=r(65848),o=r(27015),s=r(55572),l=i(o(),Object);n(l,{getPolyfill:o,implementation:a,shim:s}),t.exports=l},27015:function(t,e,r){"use strict";var n=r(65848);t.exports=function(){return"function"==typeof Object.is?Object.is:n}},55572:function(t,e,r){"use strict";var n=r(27015),i=r(17045);t.exports=function(){var t=n();return i(Object,{is:t},{is:function(){return Object.is!==t}}),t}},99019:function(t,e,r){"use strict";var n;if(!Object.keys){var i=Object.prototype.hasOwnProperty,a=Object.prototype.toString,o=r(64178),s=Object.prototype.propertyIsEnumerable,l=!s.call({toString:null},"toString"),u=s.call((function(){}),"prototype"),c=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],f=function(t){var e=t.constructor;return e&&e.prototype===t},h={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},p=function(){if("undefined"==typeof window)return!1;for(var t in window)try{if(!h["$"+t]&&i.call(window,t)&&null!==window[t]&&"object"==typeof window[t])try{f(window[t])}catch(t){return!0}}catch(t){return!0}return!1}();n=function(t){var e=null!==t&&"object"==typeof t,r="[object Function]"===a.call(t),n=o(t),s=e&&"[object String]"===a.call(t),h=[];if(!e&&!r&&!n)throw new TypeError("Object.keys called on a non-object");var d=u&&r;if(s&&t.length>0&&!i.call(t,0))for(var v=0;v<t.length;++v)h.push(String(v));if(n&&t.length>0)for(var g=0;g<t.length;++g)h.push(String(g));else for(var y in t)d&&"prototype"===y||!i.call(t,y)||h.push(String(y));if(l)for(var m=function(t){if("undefined"==typeof window||!p)return f(t);try{return f(t)}catch(t){return!1}}(t),x=0;x<c.length;++x)m&&"constructor"===c[x]||!i.call(t,c[x])||h.push(c[x]);return h}}t.exports=n},8709:function(t,e,r){"use strict";var n=Array.prototype.slice,i=r(64178),a=Object.keys,o=a?function(t){return a(t)}:r(99019),s=Object.keys;o.shim=function(){if(Object.keys){var t=function(){var t=Object.keys(arguments);return t&&t.length===arguments.length}(1,2);t||(Object.keys=function(t){return i(t)?s(n.call(t)):s(t)})}else Object.keys=o;return Object.keys||o},t.exports=o},64178:function(t){"use strict";var e=Object.prototype.toString;t.exports=function(t){var r=e.call(t),n="[object Arguments]"===r;return n||(n="[object Array]"!==r&&null!==t&&"object"==typeof t&&"number"==typeof t.length&&t.length>=0&&"[object Function]"===e.call(t.callee)),n}},88641:function(t){"use strict";function e(t,e){if("string"!=typeof t)return[t];var r=[t];"string"==typeof e||Array.isArray(e)?e={brackets:e}:e||(e={});var n=e.brackets?Array.isArray(e.brackets)?e.brackets:[e.brackets]:["{}","[]","()"],i=e.escape||"___",a=!!e.flat;n.forEach((function(t){var e=new RegExp(["\\",t[0],"[^\\",t[0],"\\",t[1],"]*\\",t[1]].join("")),n=[];function a(e,a,o){var s=r.push(e.slice(t[0].length,-t[1].length))-1;return n.push(s),i+s+i}r.forEach((function(t,n){for(var i,o=0;t!=i;)if(i=t,t=t.replace(e,a),o++>1e4)throw Error("References have circular dependency. Please, check them.");r[n]=t})),n=n.reverse(),r=r.map((function(e){return n.forEach((function(r){e=e.replace(new RegExp("(\\"+i+r+"\\"+i+")","g"),t[0]+"$1"+t[1])})),e}))}));var o=new RegExp("\\"+i+"([0-9]+)\\"+i);return a?r:function t(e,r,n){for(var i,a=[],s=0;i=o.exec(e);){if(s++>1e4)throw Error("Circular references in parenthesis");a.push(e.slice(0,i.index)),a.push(t(r[i[1]],r)),e=e.slice(i.index+i[0].length)}return a.push(e),a}(r[0],r)}function r(t,e){if(e&&e.flat){var r,n=e&&e.escape||"___",i=t[0];if(!i)return"";for(var a=new RegExp("\\"+n+"([0-9]+)\\"+n),o=0;i!=r;){if(o++>1e4)throw Error("Circular references in "+t);r=i,i=i.replace(a,s)}return i}return t.reduce((function t(e,r){return Array.isArray(r)&&(r=r.reduce(t,"")),e+r}),"");function s(e,r){if(null==t[r])throw Error("Reference "+r+"is undefined");return t[r]}}function n(t,n){return Array.isArray(t)?r(t,n):e(t,n)}n.parse=e,n.stringify=r,t.exports=n},18863:function(t,e,r){"use strict";var n=r(71299);t.exports=function(t){var e;return arguments.length>1&&(t=arguments),"string"==typeof t?t=t.split(/\s/).map(parseFloat):"number"==typeof t&&(t=[t]),t.length&&"number"==typeof t[0]?e=1===t.length?{width:t[0],height:t[0],x:0,y:0}:2===t.length?{width:t[0],height:t[1],x:0,y:0}:{x:t[0],y:t[1],width:t[2]-t[0]||0,height:t[3]-t[1]||0}:t&&(e={x:(t=n(t,{left:"x l left Left",top:"y t top Top",width:"w width W Width",height:"h height W Width",bottom:"b bottom Bottom",right:"r right Right"})).left||0,y:t.top||0},null==t.width?t.right?e.width=t.right-e.x:e.width=0:e.width=t.width,null==t.height?t.bottom?e.height=t.bottom-e.y:e.height=0:e.height=t.height),e}},95616:function(t){t.exports=function(t){var i=[];return t.replace(r,(function(t,r,a){var o=r.toLowerCase();for(a=function(t){var e=t.match(n);return e?e.map(Number):[]}(a),"m"==o&&a.length>2&&(i.push([r].concat(a.splice(0,2))),o="l",r="m"==r?"l":"L");;){if(a.length==e[o])return a.unshift(r),i.push(a);if(a.length<e[o])throw new Error("malformed path data");i.push([r].concat(a.splice(0,e[o])))}})),i};var e={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},r=/([astvzqmhlc])([^astvzqmhlc]*)/gi,n=/-?[0-9]*\.?[0-9]+(?:e[-+]?\d+)?/gi},25677:function(t){t.exports=function(t,e){e||(e=[0,""]),t=String(t);var r=parseFloat(t,10);return e[0]=r,e[1]=t.match(/[\d.\-\+]*\s*(.*)/)[1]||"",e}},9748:function(t,e,r){var n=r(90386);(function(){var e,r,i,a,o,s;"undefined"!=typeof performance&&null!==performance&&performance.now?t.exports=function(){return performance.now()}:null!=n&&n.hrtime?(t.exports=function(){return(e()-o)/1e6},r=n.hrtime,a=(e=function(){var t;return 1e9*(t=r())[0]+t[1]})(),s=1e9*n.uptime(),o=a-s):Date.now?(t.exports=function(){return Date.now()-i},i=Date.now()):(t.exports=function(){return(new Date).getTime()-i},i=(new Date).getTime())}).call(this)},71299:function(t){"use strict";t.exports=function(t,e,n){var i,a,o={};if("string"==typeof e&&(e=r(e)),Array.isArray(e)){var s={};for(a=0;a<e.length;a++)s[e[a]]=!0;e=s}for(i in e)e[i]=r(e[i]);var l={};for(i in e){var u=e[i];if(Array.isArray(u))for(a=0;a<u.length;a++){var c=u[a];if(n&&(l[c]=!0),c in t){if(o[i]=t[c],n)for(var f=a;f<u.length;f++)l[u[f]]=!0;break}}else i in t&&(e[i]&&(o[i]=t[i]),n&&(l[i]=!0))}if(n)for(i in t)l[i]||(o[i]=t[i]);return o};var e={};function r(t){return e[t]?e[t]:("string"==typeof t&&(t=e[t]=t.split(/\s*,\s*|\s+/)),t)}},38258:function(t){t.exports=function(t,e,r,n){var i=t[0],a=t[1],o=!1;void 0===r&&(r=0),void 0===n&&(n=e.length);for(var s=n-r,l=0,u=s-1;l<s;u=l++){var c=e[l+r][0],f=e[l+r][1],h=e[u+r][0],p=e[u+r][1];f>a!=p>a&&i<(h-c)*(a-f)/(p-f)+c&&(o=!o)}return o}},52142:function(t,e,r){var n,i=r(69444),a=r(29023),o=r(87263),s=r(11328),l=r(55968),u=r(10670),c=!1,f=a();function h(t,e,r){var i=n.segments(t),a=n.segments(e),o=r(n.combine(i,a));return n.polygon(o)}n={buildLog:function(t){return!0===t?c=i():!1===t&&(c=!1),!1!==c&&c.list},epsilon:function(t){return f.epsilon(t)},segments:function(t){var e=o(!0,f,c);return t.regions.forEach(e.addRegion),{segments:e.calculate(t.inverted),inverted:t.inverted}},combine:function(t,e){return{combined:o(!1,f,c).calculate(t.segments,t.inverted,e.segments,e.inverted),inverted1:t.inverted,inverted2:e.inverted}},selectUnion:function(t){return{segments:l.union(t.combined,c),inverted:t.inverted1||t.inverted2}},selectIntersect:function(t){return{segments:l.intersect(t.combined,c),inverted:t.inverted1&&t.inverted2}},selectDifference:function(t){return{segments:l.difference(t.combined,c),inverted:t.inverted1&&!t.inverted2}},selectDifferenceRev:function(t){return{segments:l.differenceRev(t.combined,c),inverted:!t.inverted1&&t.inverted2}},selectXor:function(t){return{segments:l.xor(t.combined,c),inverted:t.inverted1!==t.inverted2}},polygon:function(t){return{regions:s(t.segments,f,c),inverted:t.inverted}},polygonFromGeoJSON:function(t){return u.toPolygon(n,t)},polygonToGeoJSON:function(t){return u.fromPolygon(n,f,t)},union:function(t,e){return h(t,e,n.selectUnion)},intersect:function(t,e){return h(t,e,n.selectIntersect)},difference:function(t,e){return h(t,e,n.selectDifference)},differenceRev:function(t,e){return h(t,e,n.selectDifferenceRev)},xor:function(t,e){return h(t,e,n.selectXor)}},"object"==typeof window&&(window.PolyBool=n),t.exports=n},69444:function(t){t.exports=function(){var t,e=0,r=!1;function n(e,r){return t.list.push({type:e,data:r?JSON.parse(JSON.stringify(r)):void 0}),t}return t={list:[],segmentId:function(){return e++},checkIntersection:function(t,e){return n("check",{seg1:t,seg2:e})},segmentChop:function(t,e){return n("div_seg",{seg:t,pt:e}),n("chop",{seg:t,pt:e})},statusRemove:function(t){return n("pop_seg",{seg:t})},segmentUpdate:function(t){return n("seg_update",{seg:t})},segmentNew:function(t,e){return n("new_seg",{seg:t,primary:e})},segmentRemove:function(t){return n("rem_seg",{seg:t})},tempStatus:function(t,e,r){return n("temp_status",{seg:t,above:e,below:r})},rewind:function(t){return n("rewind",{seg:t})},status:function(t,e,r){return n("status",{seg:t,above:e,below:r})},vert:function(e){return e===r?t:(r=e,n("vert",{x:e}))},log:function(t){return"string"!=typeof t&&(t=JSON.stringify(t,!1,"  ")),n("log",{txt:t})},reset:function(){return n("reset")},selected:function(t){return n("selected",{segs:t})},chainStart:function(t){return n("chain_start",{seg:t})},chainRemoveHead:function(t,e){return n("chain_rem_head",{index:t,pt:e})},chainRemoveTail:function(t,e){return n("chain_rem_tail",{index:t,pt:e})},chainNew:function(t,e){return n("chain_new",{pt1:t,pt2:e})},chainMatch:function(t){return n("chain_match",{index:t})},chainClose:function(t){return n("chain_close",{index:t})},chainAddHead:function(t,e){return n("chain_add_head",{index:t,pt:e})},chainAddTail:function(t,e){return n("chain_add_tail",{index:t,pt:e})},chainConnect:function(t,e){return n("chain_con",{index1:t,index2:e})},chainReverse:function(t){return n("chain_rev",{index:t})},chainJoin:function(t,e){return n("chain_join",{index1:t,index2:e})},done:function(){return n("done")}}}},29023:function(t){t.exports=function(t){"number"!=typeof t&&(t=1e-10);var e={epsilon:function(e){return"number"==typeof e&&(t=e),t},pointAboveOrOnLine:function(e,r,n){var i=r[0],a=r[1],o=n[0],s=n[1],l=e[0];return(o-i)*(e[1]-a)-(s-a)*(l-i)>=-t},pointBetween:function(e,r,n){var i=e[1]-r[1],a=n[0]-r[0],o=e[0]-r[0],s=n[1]-r[1],l=o*a+i*s;return!(l<t||l-(a*a+s*s)>-t)},pointsSameX:function(e,r){return Math.abs(e[0]-r[0])<t},pointsSameY:function(e,r){return Math.abs(e[1]-r[1])<t},pointsSame:function(t,r){return e.pointsSameX(t,r)&&e.pointsSameY(t,r)},pointsCompare:function(t,r){return e.pointsSameX(t,r)?e.pointsSameY(t,r)?0:t[1]<r[1]?-1:1:t[0]<r[0]?-1:1},pointsCollinear:function(e,r,n){var i=e[0]-r[0],a=e[1]-r[1],o=r[0]-n[0],s=r[1]-n[1];return Math.abs(i*s-o*a)<t},linesIntersect:function(e,r,n,i){var a=r[0]-e[0],o=r[1]-e[1],s=i[0]-n[0],l=i[1]-n[1],u=a*l-o*s;if(Math.abs(u)<t)return!1;var c=e[0]-n[0],f=e[1]-n[1],h=(s*f-l*c)/u,p=(a*f-o*c)/u,d={alongA:0,alongB:0,pt:[e[0]+h*a,e[1]+h*o]};return d.alongA=h<=-t?-2:h<t?-1:h-1<=-t?0:h-1<t?1:2,d.alongB=p<=-t?-2:p<t?-1:p-1<=-t?0:p-1<t?1:2,d},pointInsideRegion:function(e,r){for(var n=e[0],i=e[1],a=r[r.length-1][0],o=r[r.length-1][1],s=!1,l=0;l<r.length;l++){var u=r[l][0],c=r[l][1];c-i>t!=o-i>t&&(a-u)*(i-c)/(o-c)+u-n>t&&(s=!s),a=u,o=c}return s}};return e}},10670:function(t){var e={toPolygon:function(t,e){function r(e){if(e.length<=0)return t.segments({inverted:!1,regions:[]});function r(e){var r=e.slice(0,e.length-1);return t.segments({inverted:!1,regions:[r]})}for(var n=r(e[0]),i=1;i<e.length;i++)n=t.selectDifference(t.combine(n,r(e[i])));return n}if("Polygon"===e.type)return t.polygon(r(e.coordinates));if("MultiPolygon"===e.type){for(var n=t.segments({inverted:!1,regions:[]}),i=0;i<e.coordinates.length;i++)n=t.selectUnion(t.combine(n,r(e.coordinates[i])));return t.polygon(n)}throw new Error("PolyBool: Cannot convert GeoJSON object to PolyBool polygon")},fromPolygon:function(t,e,r){function n(t,r){return e.pointInsideRegion([.5*(t[0][0]+t[1][0]),.5*(t[0][1]+t[1][1])],r)}function i(t){return{region:t,children:[]}}r=t.polygon(t.segments(r));var a=i(null);function o(t,e){for(var r=0;r<t.children.length;r++)if(n(e,(s=t.children[r]).region))return void o(s,e);var a=i(e);for(r=0;r<t.children.length;r++){var s;n((s=t.children[r]).region,e)&&(a.children.push(s),t.children.splice(r,1),r--)}t.children.push(a)}for(var s=0;s<r.regions.length;s++){var l=r.regions[s];l.length<3||o(a,l)}function u(t,e){for(var r=0,n=t[t.length-1][0],i=t[t.length-1][1],a=[],o=0;o<t.length;o++){var s=t[o][0],l=t[o][1];a.push([s,l]),r+=l*n-s*i,n=s,i=l}return r<0!==e&&a.reverse(),a.push([a[0][0],a[0][1]]),a}var c=[];function f(t){var e=[u(t.region,!1)];c.push(e);for(var r=0;r<t.children.length;r++)e.push(h(t.children[r]))}function h(t){for(var e=0;e<t.children.length;e++)f(t.children[e]);return u(t.region,!0)}for(s=0;s<a.children.length;s++)f(a.children[s]);return c.length<=0?{type:"Polygon",coordinates:[]}:1==c.length?{type:"Polygon",coordinates:c[0]}:{type:"MultiPolygon",coordinates:c}}};t.exports=e},87263:function(t,e,r){var n=r(26859);t.exports=function(t,e,r){function i(t,e,n){return{id:r?r.segmentId():-1,start:t,end:e,myFill:{above:n.myFill.above,below:n.myFill.below},otherFill:null}}var a=n.create();function o(t,r){a.insertBefore(t,(function(n){return i=t.isStart,a=t.pt,o=r,s=n.isStart,l=n.pt,u=n.other.pt,(0!==(c=e.pointsCompare(a,l))?c:e.pointsSame(o,u)?0:i!==s?i?1:-1:e.pointAboveOrOnLine(o,s?l:u,s?u:l)?1:-1)<0;var i,a,o,s,l,u,c}))}function s(t,e){var r=function(t,e){var r=n.node({isStart:!0,pt:t.start,seg:t,primary:e,other:null,status:null});return o(r,t.end),r}(t,e);return function(t,e,r){var i=n.node({isStart:!1,pt:e.end,seg:e,primary:r,other:t,status:null});t.other=i,o(i,t.pt)}(r,t,e),r}function l(t,e){var n=i(e,t.seg.end,t.seg);return function(t,e){r&&r.segmentChop(t.seg,e),t.other.remove(),t.seg.end=e,t.other.pt=e,o(t.other,t.pt)}(t,e),s(n,t.primary)}function u(i,o){var s=n.create();function u(t){return s.findTransition((function(r){var n,i,a,o,s,l;return n=t,i=r.ev,a=n.seg.start,o=n.seg.end,s=i.seg.start,l=i.seg.end,(e.pointsCollinear(a,s,l)?e.pointsCollinear(o,s,l)||e.pointAboveOrOnLine(o,s,l)?1:-1:e.pointAboveOrOnLine(a,s,l)?1:-1)>0}))}function c(t,n){var i=t.seg,a=n.seg,o=i.start,s=i.end,u=a.start,c=a.end;r&&r.checkIntersection(i,a);var f=e.linesIntersect(o,s,u,c);if(!1===f){if(!e.pointsCollinear(o,s,u))return!1;if(e.pointsSame(o,c)||e.pointsSame(s,u))return!1;var h=e.pointsSame(o,u),p=e.pointsSame(s,c);if(h&&p)return n;var d=!h&&e.pointBetween(o,u,c),v=!p&&e.pointBetween(s,u,c);if(h)return v?l(n,s):l(t,c),n;d&&(p||(v?l(n,s):l(t,c)),l(n,o))}else 0===f.alongA&&(-1===f.alongB?l(t,u):0===f.alongB?l(t,f.pt):1===f.alongB&&l(t,c)),0===f.alongB&&(-1===f.alongA?l(n,o):0===f.alongA?l(n,f.pt):1===f.alongA&&l(n,s));return!1}for(var f=[];!a.isEmpty();){var h=a.getHead();if(r&&r.vert(h.pt[0]),h.isStart){r&&r.segmentNew(h.seg,h.primary);var p=u(h),d=p.before?p.before.ev:null,v=p.after?p.after.ev:null;function g(){if(d){var t=c(h,d);if(t)return t}return!!v&&c(h,v)}r&&r.tempStatus(h.seg,!!d&&d.seg,!!v&&v.seg);var y,m,x=g();if(x)t?(m=null===h.seg.myFill.below||h.seg.myFill.above!==h.seg.myFill.below)&&(x.seg.myFill.above=!x.seg.myFill.above):x.seg.otherFill=h.seg.myFill,r&&r.segmentUpdate(x.seg),h.other.remove(),h.remove();if(a.getHead()!==h){r&&r.rewind(h.seg);continue}t?(m=null===h.seg.myFill.below||h.seg.myFill.above!==h.seg.myFill.below,h.seg.myFill.below=v?v.seg.myFill.above:i,h.seg.myFill.above=m?!h.seg.myFill.below:h.seg.myFill.below):null===h.seg.otherFill&&(y=v?h.primary===v.primary?v.seg.otherFill.above:v.seg.myFill.above:h.primary?o:i,h.seg.otherFill={above:y,below:y}),r&&r.status(h.seg,!!d&&d.seg,!!v&&v.seg),h.other.status=p.insert(n.node({ev:h}))}else{var b=h.status;if(null===b)throw new Error("PolyBool: Zero-length segment detected; your epsilon is probably too small or too large");if(s.exists(b.prev)&&s.exists(b.next)&&c(b.prev.ev,b.next.ev),r&&r.statusRemove(b.ev.seg),b.remove(),!h.primary){var _=h.seg.myFill;h.seg.myFill=h.seg.otherFill,h.seg.otherFill=_}f.push(h.seg)}a.getHead().remove()}return r&&r.done(),f}return t?{addRegion:function(t){for(var n,i,a,o=t[t.length-1],l=0;l<t.length;l++){n=o,o=t[l];var u=e.pointsCompare(n,o);0!==u&&s((i=u<0?n:o,a=u<0?o:n,{id:r?r.segmentId():-1,start:i,end:a,myFill:{above:null,below:null},otherFill:null}),!0)}},calculate:function(t){return u(t,!1)}}:{calculate:function(t,e,r,n){return t.forEach((function(t){s(i(t.start,t.end,t),!0)})),r.forEach((function(t){s(i(t.start,t.end,t),!1)})),u(e,n)}}}},26859:function(t){t.exports={create:function(){var t={root:{root:!0,next:null},exists:function(e){return null!==e&&e!==t.root},isEmpty:function(){return null===t.root.next},getHead:function(){return t.root.next},insertBefore:function(e,r){for(var n=t.root,i=t.root.next;null!==i;){if(r(i))return e.prev=i.prev,e.next=i,i.prev.next=e,void(i.prev=e);n=i,i=i.next}n.next=e,e.prev=n,e.next=null},findTransition:function(e){for(var r=t.root,n=t.root.next;null!==n&&!e(n);)r=n,n=n.next;return{before:r===t.root?null:r,after:n,insert:function(t){return t.prev=r,t.next=n,r.next=t,null!==n&&(n.prev=t),t}}}};return t},node:function(t){return t.prev=null,t.next=null,t.remove=function(){t.prev.next=t.next,t.next&&(t.next.prev=t.prev),t.prev=null,t.next=null},t}}},11328:function(t){t.exports=function(t,e,r){var n=[],i=[];return t.forEach((function(t){var a=t.start,o=t.end;if(e.pointsSame(a,o))console.warn("PolyBool: Warning: Zero-length segment detected; your epsilon is probably too small or too large");else{r&&r.chainStart(t);for(var s={index:0,matches_head:!1,matches_pt1:!1},l={index:0,matches_head:!1,matches_pt1:!1},u=s,c=0;c<n.length;c++){var f=(g=n[c])[0],h=(g[1],g[g.length-1]);if(g[g.length-2],e.pointsSame(f,a)){if(k(c,!0,!0))break}else if(e.pointsSame(f,o)){if(k(c,!0,!1))break}else if(e.pointsSame(h,a)){if(k(c,!1,!0))break}else if(e.pointsSame(h,o)&&k(c,!1,!1))break}if(u===s)return n.push([a,o]),void(r&&r.chainNew(a,o));if(u===l){r&&r.chainMatch(s.index);var p=s.index,d=s.matches_pt1?o:a,v=s.matches_head,g=n[p],y=v?g[0]:g[g.length-1],m=v?g[1]:g[g.length-2],x=v?g[g.length-1]:g[0],b=v?g[g.length-2]:g[1];return e.pointsCollinear(m,y,d)&&(v?(r&&r.chainRemoveHead(s.index,d),g.shift()):(r&&r.chainRemoveTail(s.index,d),g.pop()),y=m),e.pointsSame(x,d)?(n.splice(p,1),e.pointsCollinear(b,x,y)&&(v?(r&&r.chainRemoveTail(s.index,y),g.pop()):(r&&r.chainRemoveHead(s.index,y),g.shift())),r&&r.chainClose(s.index),void i.push(g)):void(v?(r&&r.chainAddHead(s.index,d),g.unshift(d)):(r&&r.chainAddTail(s.index,d),g.push(d)))}var _=s.index,w=l.index;r&&r.chainConnect(_,w);var T=n[_].length<n[w].length;s.matches_head?l.matches_head?T?(A(_),M(_,w)):(A(w),M(w,_)):M(w,_):l.matches_head?M(_,w):T?(A(_),M(w,_)):(A(w),M(_,w))}function k(t,e,r){return u.index=t,u.matches_head=e,u.matches_pt1=r,u===s?(u=l,!1):(u=null,!0)}function A(t){r&&r.chainReverse(t),n[t].reverse()}function M(t,i){var a=n[t],o=n[i],s=a[a.length-1],l=a[a.length-2],u=o[0],c=o[1];e.pointsCollinear(l,s,u)&&(r&&r.chainRemoveTail(t,s),a.pop(),s=l),e.pointsCollinear(s,u,c)&&(r&&r.chainRemoveHead(i,u),o.shift()),r&&r.chainJoin(t,i),n[t]=a.concat(o),n.splice(i,1)}})),i}},55968:function(t){function e(t,e,r){var n=[];return t.forEach((function(t){var i=(t.myFill.above?8:0)+(t.myFill.below?4:0)+(t.otherFill&&t.otherFill.above?2:0)+(t.otherFill&&t.otherFill.below?1:0);0!==e[i]&&n.push({id:r?r.segmentId():-1,start:t.start,end:t.end,myFill:{above:1===e[i],below:2===e[i]},otherFill:null})})),r&&r.selected(n),n}var r={union:function(t,r){return e(t,[0,2,1,0,2,2,0,0,1,0,1,0,0,0,0,0],r)},intersect:function(t,r){return e(t,[0,0,0,0,0,2,0,2,0,0,1,1,0,2,1,0],r)},difference:function(t,r){return e(t,[0,0,0,0,2,0,2,0,1,1,0,0,0,1,2,0],r)},differenceRev:function(t,r){return e(t,[0,2,1,0,0,0,1,1,0,2,0,2,0,0,0,0],r)},xor:function(t,r){return e(t,[0,2,1,0,2,0,0,1,1,0,0,2,0,1,2,0],r)}};t.exports=r},14847:function(t,e,r){"use strict";var n=r(21630).Transform,i=r(90715);function a(){n.call(this,{readableObjectMode:!0})}function o(t,e,r){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||"",this.name=this.constructor.name,this.message=t,e&&(this.code=e),r&&(this.statusCode=r)}a.prototype=Object.create(n.prototype),a.prototype.constructor=a,i(a.prototype),e.OF=function(t,e,r){for(var n=e,i=0;i<r.length;)if(t[n++]!==r[i++])return!1;return!0},e.eG=function(t,e){var r=[],n=0;if(e&&"hex"===e)for(;n<t.length;)r.push(parseInt(t.slice(n,n+2),16)),n+=2;else for(;n<t.length;n++)r.push(255&t.charCodeAt(n));return r},e.mP=function(t,e){return t[e]|t[e+1]<<8},e.n8=function(t,e){return t[e+1]|t[e]<<8},e.nm=function(t,e){return t[e]|t[e+1]<<8|t[e+2]<<16|16777216*t[e+3]},e.Ag=function(t,e){return t[e+3]|t[e+2]<<8|t[e+1]<<16|16777216*t[e]},o.prototype=Object.create(Error.prototype),o.prototype.constructor=o},71371:function(t){"use strict";function e(t,e){var r=new Error(t);return r.code=e,r}function r(t){try{return decodeURIComponent(escape(t))}catch(e){return t}}function n(t,r,n){this.input=t.subarray(r,n),this.start=r;var i=String.fromCharCode.apply(null,this.input.subarray(0,4));if("II*\0"!==i&&"MM\0*"!==i)throw e("invalid TIFF signature","EBADDATA");this.big_endian="M"===i[0]}n.prototype.each=function(t){this.aborted=!1;var e=this.read_uint32(4);for(this.ifds_to_read=[{id:0,offset:e}];this.ifds_to_read.length>0&&!this.aborted;){var r=this.ifds_to_read.shift();r.offset&&this.scan_ifd(r.id,r.offset,t)}},n.prototype.read_uint16=function(t){var r=this.input;if(t+2>r.length)throw e("unexpected EOF","EBADDATA");return this.big_endian?256*r[t]+r[t+1]:r[t]+256*r[t+1]},n.prototype.read_uint32=function(t){var r=this.input;if(t+4>r.length)throw e("unexpected EOF","EBADDATA");return this.big_endian?16777216*r[t]+65536*r[t+1]+256*r[t+2]+r[t+3]:r[t]+256*r[t+1]+65536*r[t+2]+16777216*r[t+3]},n.prototype.is_subifd_link=function(t,e){return 0===t&&34665===e||0===t&&34853===e||34665===t&&40965===e},n.prototype.exif_format_length=function(t){switch(t){case 1:case 2:case 6:case 7:return 1;case 3:case 8:return 2;case 4:case 9:case 11:return 4;case 5:case 10:case 12:return 8;default:return 0}},n.prototype.exif_format_read=function(t,e){var r;switch(t){case 1:case 2:return this.input[e];case 6:return(r=this.input[e])|33554430*(128&r);case 3:return this.read_uint16(e);case 8:return(r=this.read_uint16(e))|131070*(32768&r);case 4:return this.read_uint32(e);case 9:return 0|this.read_uint32(e);default:return null}},n.prototype.scan_ifd=function(t,n,i){var a=this.read_uint16(n);n+=2;for(var o=0;o<a;o++){var s=this.read_uint16(n),l=this.read_uint16(n+2),u=this.read_uint32(n+4),c=this.exif_format_length(l),f=u*c,h=f<=4?n+8:this.read_uint32(n+8),p=!1;if(h+f>this.input.length)throw e("unexpected EOF","EBADDATA");for(var d=[],v=h,g=0;g<u;g++,v+=c){var y=this.exif_format_read(l,v);if(null===y){d=null;break}d.push(y)}if(Array.isArray(d)&&2===l&&(d=r(String.fromCharCode.apply(null,d)))&&"\0"===d[d.length-1]&&(d=d.slice(0,-1)),this.is_subifd_link(t,s)&&Array.isArray(d)&&Number.isInteger(d[0])&&d[0]>0&&(this.ifds_to_read.push({id:s,offset:d[0]}),p=!0),!1===i({is_big_endian:this.big_endian,ifd:t,tag:s,format:l,count:u,entry_offset:n+this.start,data_length:f,data_offset:h+this.start,value:d,is_subifd_link:p}))return void(this.aborted=!0);n+=12}0===t&&this.ifds_to_read.push({id:1,offset:this.read_uint32(n)})},t.exports.ExifParser=n,t.exports.get_orientation=function(t){var e=0;try{return new n(t,0,t.length).each((function(t){if(0===t.ifd&&274===t.tag&&Array.isArray(t.value))return e=t.value[0],!1})),e}catch(t){return-1}}},76767:function(t,e,r){"use strict";var n=r(14847).n8,i=r(14847).Ag;function a(t,e){if(t.length<4+e)return null;var r=i(t,e);return t.length<r+e||r<8?null:{boxtype:String.fromCharCode.apply(null,t.slice(e+4,e+8)),data:t.slice(e+8,e+r),end:e+r}}function o(t,e){for(var r=0;;){var n=a(t,r);if(!n)break;switch(n.boxtype){case"ispe":e.sizes.push({width:i(n.data,4),height:i(n.data,8)});break;case"irot":e.transforms.push({type:"irot",value:3&n.data[0]});break;case"imir":e.transforms.push({type:"imir",value:1&n.data[0]})}r=n.end}}function s(t,e,r){for(var n=0,i=0;i<r;i++)n=256*n+(t[e+i]||0);return n}function l(t,e){for(var r=t[4]>>4&15,i=15&t[4],a=t[5]>>4&15,o=n(t,6),l=8,u=0;u<o;u++){var c=n(t,l),f=n(t,l+=2),h=s(t,l+=2,a),p=n(t,l+=a);if(l+=2,0===f&&1===p){var d=s(t,l,r),v=s(t,l+r,i);e.item_loc[c]={length:v,offset:d+h}}l+=p*(r+i)}}function u(t,e){for(var r=n(t,4),i=6,o=0;o<r;o++){var s=a(t,i);if(!s)break;if("infe"===s.boxtype){for(var l=n(s.data,4),u="",c=8;c<s.data.length&&s.data[c];c++)u+=String.fromCharCode(s.data[c]);e.item_inf[u]=l}i=s.end}}function c(t,e){for(var r=0;;){var n=a(t,r);if(!n)break;"ipco"===n.boxtype&&o(n.data,e),r=n.end}}t.exports.unbox=a,t.exports.readSizeFromMeta=function(t){var e={sizes:[],transforms:[],item_inf:{},item_loc:{}};if(function(t,e){for(var r=4;;){var n=a(t,r);if(!n)break;"iprp"===n.boxtype&&c(n.data,e),"iloc"===n.boxtype&&l(n.data,e),"iinf"===n.boxtype&&u(n.data,e),r=n.end}}(t,e),e.sizes.length){var r,n,i,o=(n=(r=e.sizes).reduce((function(t,e){return t.width>e.width||t.width===e.width&&t.height>e.height?t:e})),i=r.reduce((function(t,e){return t.height>e.height||t.height===e.height&&t.width>e.width?t:e})),n.width>i.height||n.width===i.height&&n.height>i.width?n:i),s=1;e.transforms.forEach((function(t){var e={1:6,2:5,3:8,4:7,5:4,6:3,7:2,8:1},r={1:4,2:3,3:2,4:1,5:6,6:5,7:8,8:7};if("imir"===t.type&&(s=0===t.value?r[s]:e[s=e[s=r[s]]]),"irot"===t.type)for(var n=0;n<t.value;n++)s=e[s]}));var f=null;return e.item_inf.Exif&&(f=e.item_loc[e.item_inf.Exif]),{width:o.width,height:o.height,orientation:e.transforms.length?s:null,variants:e.sizes,exif_location:f}}},t.exports.getMimeType=function(t){var e=String.fromCharCode.apply(null,t.slice(0,4)),r={};r[e]=!0;for(var n=8;n<t.length;n+=4)r[String.fromCharCode.apply(null,t.slice(n,n+4))]=!0;if(r.mif1||r.msf1||r.miaf)return"avif"===e||"avis"===e||"avio"===e?{type:"avif",mime:"image/avif"}:"heic"===e||"heix"===e?{type:"heic",mime:"image/heic"}:"hevc"===e||"hevx"===e?{type:"heic",mime:"image/heic-sequence"}:r.avif||r.avis?{type:"avif",mime:"image/avif"}:r.heic||r.heix||r.hevc||r.hevx||r.heis?r.msf1?{type:"heif",mime:"image/heif-sequence"}:{type:"heif",mime:"image/heif"}:{type:"avif",mime:"image/avif"}}},24461:function(t,e,r){"use strict";var n=r(14847).eG,i=r(14847).OF,a=r(14847).Ag,o=r(76767),s=r(71371),l=n("ftyp");t.exports=function(t){if(i(t,4,l)){var e=o.unbox(t,0);if(e){var r=o.getMimeType(e.data);if(r){for(var n,u=e.end;;){var c=o.unbox(t,u);if(!c)break;if(u=c.end,"mdat"===c.boxtype)return;if("meta"===c.boxtype){n=c.data;break}}if(n){var f=o.readSizeFromMeta(n);if(f){var h={width:f.width,height:f.height,type:r.type,mime:r.mime,wUnits:"px",hUnits:"px"};if(f.variants.length>1&&(h.variants=f.variants),f.orientation&&(h.orientation=f.orientation),f.exif_location&&f.exif_location.offset+f.exif_location.length<=t.length){var p=a(t,f.exif_location.offset),d=t.slice(f.exif_location.offset+p+4,f.exif_location.offset+f.exif_location.length),v=s.get_orientation(d);v>0&&(h.orientation=v)}return h}}}}}}},2504:function(t,e,r){"use strict";var n=r(14847).eG,i=r(14847).OF,a=r(14847).mP,o=n("BM");t.exports=function(t){if(!(t.length<26)&&i(t,0,o))return{width:a(t,18),height:a(t,22),type:"bmp",mime:"image/bmp",wUnits:"px",hUnits:"px"}}},47342:function(t,e,r){"use strict";var n=r(14847).eG,i=r(14847).OF,a=r(14847).mP,o=n("GIF87a"),s=n("GIF89a");t.exports=function(t){if(!(t.length<10)&&(i(t,0,o)||i(t,0,s)))return{width:a(t,6),height:a(t,8),type:"gif",mime:"image/gif",wUnits:"px",hUnits:"px"}}},31355:function(t,e,r){"use strict";var n=r(14847).mP;t.exports=function(t){var e=n(t,0),r=n(t,2),i=n(t,4);if(0===e&&1===r&&i){for(var a=[],o={width:0,height:0},s=0;s<i;s++){var l=t[6+16*s]||256,u=t[6+16*s+1]||256,c={width:l,height:u};a.push(c),(l>o.width||u>o.height)&&(o=c)}return{width:o.width,height:o.height,variants:a,type:"ico",mime:"image/x-icon",wUnits:"px",hUnits:"px"}}}},54261:function(t,e,r){"use strict";var n=r(14847).n8,i=r(14847).eG,a=r(14847).OF,o=r(71371),s=i("Exif\0\0");t.exports=function(t){if(!(t.length<2)&&255===t[0]&&216===t[1]&&255===t[2])for(var e=2;;){for(;;){if(t.length-e<2)return;if(255===t[e++])break}for(var r,i,l=t[e++];255===l;)l=t[e++];if(208<=l&&l<=217||1===l)r=0;else{if(!(192<=l&&l<=254))return;if(t.length-e<2)return;r=n(t,e)-2,e+=2}if(217===l||218===l)return;if(225===l&&r>=10&&a(t,e,s)&&(i=o.get_orientation(t.slice(e+6,e+r))),r>=5&&192<=l&&l<=207&&196!==l&&200!==l&&204!==l){if(t.length-e<r)return;var u={width:n(t,e+3),height:n(t,e+1),type:"jpg",mime:"image/jpeg",wUnits:"px",hUnits:"px"};return i>0&&(u.orientation=i),u}e+=r}}},6303:function(t,e,r){"use strict";var n=r(14847).eG,i=r(14847).OF,a=r(14847).Ag,o=n("‰PNG\r\n\n"),s=n("IHDR");t.exports=function(t){if(!(t.length<24)&&i(t,0,o)&&i(t,12,s))return{width:a(t,16),height:a(t,20),type:"png",mime:"image/png",wUnits:"px",hUnits:"px"}}},38689:function(t,e,r){"use strict";var n=r(14847).eG,i=r(14847).OF,a=r(14847).Ag,o=n("8BPS\0");t.exports=function(t){if(!(t.length<22)&&i(t,0,o))return{width:a(t,18),height:a(t,14),type:"psd",mime:"image/vnd.adobe.photoshop",wUnits:"px",hUnits:"px"}}},6881:function(t){"use strict";function e(t){return"number"==typeof t&&isFinite(t)&&t>0}var r=/<[-_.:a-zA-Z0-9][^>]*>/,n=/^<([-_.:a-zA-Z0-9]+:)?svg\s/,i=/[^-]\bwidth="([^%]+?)"|[^-]\bwidth='([^%]+?)'/,a=/\bheight="([^%]+?)"|\bheight='([^%]+?)'/,o=/\bview[bB]ox="(.+?)"|\bview[bB]ox='(.+?)'/,s=/in$|mm$|cm$|pt$|pc$|px$|em$|ex$/;function l(t){return s.test(t)?t.match(s)[0]:"px"}t.exports=function(t){if(function(t){var e,r=0,n=t.length;for(239===t[0]&&187===t[1]&&191===t[2]&&(r=3);r<n&&(32===(e=t[r])||9===e||13===e||10===e);)r++;return r!==n&&60===t[r]}(t)){for(var s="",u=0;u<t.length;u++)s+=String.fromCharCode(t[u]);var c=(s.match(r)||[""])[0];if(n.test(c)){var f=function(t){var e=t.match(i),r=t.match(a),n=t.match(o);return{width:e&&(e[1]||e[2]),height:r&&(r[1]||r[2]),viewbox:n&&(n[1]||n[2])}}(c),h=parseFloat(f.width),p=parseFloat(f.height);if(f.width&&f.height){if(!e(h)||!e(p))return;return{width:h,height:p,type:"svg",mime:"image/svg+xml",wUnits:l(f.width),hUnits:l(f.height)}}var d=(f.viewbox||"").split(" "),v={width:d[2],height:d[3]},g=parseFloat(v.width),y=parseFloat(v.height);if(e(g)&&e(y)&&l(v.width)===l(v.height)){var m=g/y;if(f.width){if(!e(h))return;return{width:h,height:h/m,type:"svg",mime:"image/svg+xml",wUnits:l(f.width),hUnits:l(f.width)}}if(f.height){if(!e(p))return;return{width:p*m,height:p,type:"svg",mime:"image/svg+xml",wUnits:l(f.height),hUnits:l(f.height)}}return{width:g,height:y,type:"svg",mime:"image/svg+xml",wUnits:l(v.width),hUnits:l(v.height)}}}}}},66278:function(t,e,r){"use strict";var n=r(14847).eG,i=r(14847).OF,a=r(14847).mP,o=r(14847).n8,s=r(14847).nm,l=r(14847).Ag,u=n("II*\0"),c=n("MM\0*");function f(t,e,r){return r?o(t,e):a(t,e)}function h(t,e,r){return r?l(t,e):s(t,e)}function p(t,e,r){var n=f(t,e+2,r);return 1!==h(t,e+4,r)||3!==n&&4!==n?null:3===n?f(t,e+8,r):h(t,e+8,r)}t.exports=function(t){if(!(t.length<8)&&(i(t,0,u)||i(t,0,c))){var e=77===t[0],r=h(t,4,e)-8;if(!(r<0)){var n=r+8;if(!(t.length-n<2)){var a=12*f(t,n+0,e);if(!(a<=0||(n+=2,t.length-n<a))){var o,s,l,d;for(o=0;o<a;o+=12)256===(d=f(t,n+o,e))?s=p(t,n+o,e):257===d&&(l=p(t,n+o,e));return s&&l?{width:s,height:l,type:"tiff",mime:"image/tiff",wUnits:"px",hUnits:"px"}:void 0}}}}}},90784:function(t,e,r){"use strict";var n=r(14847).eG,i=r(14847).OF,a=r(14847).mP,o=r(14847).nm,s=r(71371),l=n("RIFF"),u=n("WEBP");function c(t,e){if(157===t[e+3]&&1===t[e+4]&&42===t[e+5])return{width:16383&a(t,e+6),height:16383&a(t,e+8),type:"webp",mime:"image/webp",wUnits:"px",hUnits:"px"}}function f(t,e){if(47===t[e]){var r=o(t,e+1);return{width:1+(16383&r),height:1+(r>>14&16383),type:"webp",mime:"image/webp",wUnits:"px",hUnits:"px"}}}function h(t,e){return{width:1+(t[e+6]<<16|t[e+5]<<8|t[e+4]),height:1+(t[e+9]<<e|t[e+8]<<8|t[e+7]),type:"webp",mime:"image/webp",wUnits:"px",hUnits:"px"}}t.exports=function(t){if(!(t.length<16)&&(i(t,0,l)||i(t,8,u))){var e=12,r=null,n=0,a=o(t,4)+8;if(!(a>t.length)){for(;e+8<a;)if(0!==t[e]){var p=String.fromCharCode.apply(null,t.slice(e,e+4)),d=o(t,e+4);"VP8 "===p&&d>=10?r=r||c(t,e+8):"VP8L"===p&&d>=9?r=r||f(t,e+8):"VP8X"===p&&d>=10?r=r||h(t,e+8):"EXIF"===p&&(n=s.get_orientation(t.slice(e+8,e+8+d)),e=1/0),e+=8+d}else e++;if(r)return n>0&&(r.orientation=n),r}}}},91497:function(t,e,r){"use strict";t.exports={avif:r(24461),bmp:r(2504),gif:r(47342),ico:r(31355),jpeg:r(54261),png:r(6303),psd:r(38689),svg:r(6881),tiff:r(66278),webp:r(90784)}},33575:function(t,e,r){"use strict";var n=r(91497);t.exports=function(t){return function(t){for(var e=Object.keys(n),r=0;r<e.length;r++){var i=n[e[r]](t);if(i)return i}return null}(t)},t.exports.parsers=n},90386:function(t){var e,r,n=t.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function o(t){if(e===setTimeout)return setTimeout(t,0);if((e===i||!e)&&setTimeout)return e=setTimeout,setTimeout(t,0);try{return e(t,0)}catch(r){try{return e.call(null,t,0)}catch(r){return e.call(this,t,0)}}}!function(){try{e="function"==typeof setTimeout?setTimeout:i}catch(t){e=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(t){r=a}}();var s,l=[],u=!1,c=-1;function f(){u&&s&&(u=!1,s.length?l=s.concat(l):c=-1,l.length&&h())}function h(){if(!u){var t=o(f);u=!0;for(var e=l.length;e;){for(s=l,l=[];++c<e;)s&&s[c].run();c=-1,e=l.length}s=null,u=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{return r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(t)}}function p(t,e){this.fun=t,this.array=e}function d(){}n.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)e[r-1]=arguments[r];l.push(new p(t,e)),1!==l.length||u||o(h)},p.prototype.run=function(){this.fun.apply(null,this.array)},n.title="browser",n.browser=!0,n.env={},n.argv=[],n.version="",n.versions={},n.on=d,n.addListener=d,n.once=d,n.off=d,n.removeListener=d,n.removeAllListeners=d,n.emit=d,n.prependListener=d,n.prependOnceListener=d,n.listeners=function(t){return[]},n.binding=function(t){throw new Error("process.binding is not supported")},n.cwd=function(){return"/"},n.chdir=function(t){throw new Error("process.chdir is not supported")},n.umask=function(){return 0}},5877:function(t,e,r){for(var n=r(9748),i="undefined"==typeof window?r.g:window,a=["moz","webkit"],o="AnimationFrame",s=i["request"+o],l=i["cancel"+o]||i["cancelRequest"+o],u=0;!s&&u<a.length;u++)s=i[a[u]+"Request"+o],l=i[a[u]+"Cancel"+o]||i[a[u]+"CancelRequest"+o];if(!s||!l){var c=0,f=0,h=[];s=function(t){if(0===h.length){var e=n(),r=Math.max(0,16.666666666666668-(e-c));c=r+e,setTimeout((function(){var t=h.slice(0);h.length=0;for(var e=0;e<t.length;e++)if(!t[e].cancelled)try{t[e].callback(c)}catch(t){setTimeout((function(){throw t}),0)}}),Math.round(r))}return h.push({handle:++f,callback:t,cancelled:!1}),f},l=function(t){for(var e=0;e<h.length;e++)h[e].handle===t&&(h[e].cancelled=!0)}}t.exports=function(t){return s.call(i,t)},t.exports.cancel=function(){l.apply(i,arguments)},t.exports.polyfill=function(t){t||(t=i),t.requestAnimationFrame=s,t.cancelAnimationFrame=l}},3593:function(t,e,r){"use strict";var n=r(21527),i=r(25075),a=r(93447),o=r(71299),s=r(56131),l=r(30120),u=r(57060),c=u.float32,f=u.fract32;t.exports=function(t,e){if("function"==typeof t?(e||(e={}),e.regl=t):e=t,e.length&&(e.positions=e),!(t=e.regl).hasExtension("ANGLE_instanced_arrays"))throw Error("regl-error2d: `ANGLE_instanced_arrays` extension should be enabled");var r,u,p,d,v,g,y=t._gl,m={color:"black",capSize:5,lineWidth:1,opacity:1,viewport:null,range:null,offset:0,count:0,bounds:null,positions:[],errors:[]},x=[];return d=t.buffer({usage:"dynamic",type:"uint8",data:new Uint8Array(0)}),u=t.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)}),p=t.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)}),v=t.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)}),g=t.buffer({usage:"static",type:"float",data:h}),T(e),r=t({vert:"\n\t\tprecision highp float;\n\n\t\tattribute vec2 position, positionFract;\n\t\tattribute vec4 error;\n\t\tattribute vec4 color;\n\n\t\tattribute vec2 direction, lineOffset, capOffset;\n\n\t\tuniform vec4 viewport;\n\t\tuniform float lineWidth, capSize;\n\t\tuniform vec2 scale, scaleFract, translate, translateFract;\n\n\t\tvarying vec4 fragColor;\n\n\t\tvoid main() {\n\t\t\tfragColor = color / 255.;\n\n\t\t\tvec2 pixelOffset = lineWidth * lineOffset + (capSize + lineWidth) * capOffset;\n\n\t\t\tvec2 dxy = -step(.5, direction.xy) * error.xz + step(direction.xy, vec2(-.5)) * error.yw;\n\n\t\t\tvec2 position = position + dxy;\n\n\t\t\tvec2 pos = (position + translate) * scale\n\t\t\t\t+ (positionFract + translateFract) * scale\n\t\t\t\t+ (position + translate) * scaleFract\n\t\t\t\t+ (positionFract + translateFract) * scaleFract;\n\n\t\t\tpos += pixelOffset / viewport.zw;\n\n\t\t\tgl_Position = vec4(pos * 2. - 1., 0, 1);\n\t\t}\n\t\t",frag:"\n\t\tprecision highp float;\n\n\t\tvarying vec4 fragColor;\n\n\t\tuniform float opacity;\n\n\t\tvoid main() {\n\t\t\tgl_FragColor = fragColor;\n\t\t\tgl_FragColor.a *= opacity;\n\t\t}\n\t\t",uniforms:{range:t.prop("range"),lineWidth:t.prop("lineWidth"),capSize:t.prop("capSize"),opacity:t.prop("opacity"),scale:t.prop("scale"),translate:t.prop("translate"),scaleFract:t.prop("scaleFract"),translateFract:t.prop("translateFract"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]}},attributes:{color:{buffer:d,offset:function(t,e){return 4*e.offset},divisor:1},position:{buffer:u,offset:function(t,e){return 8*e.offset},divisor:1},positionFract:{buffer:p,offset:function(t,e){return 8*e.offset},divisor:1},error:{buffer:v,offset:function(t,e){return 16*e.offset},divisor:1},direction:{buffer:g,stride:24,offset:0},lineOffset:{buffer:g,stride:24,offset:8},capOffset:{buffer:g,stride:24,offset:16}},primitive:"triangles",blend:{enable:!0,color:[0,0,0,0],equation:{rgb:"add",alpha:"add"},func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:"one minus dst alpha",dstAlpha:"one"}},depth:{enable:!1},scissor:{enable:!0,box:t.prop("viewport")},viewport:t.prop("viewport"),stencil:!1,instances:t.prop("count"),count:h.length}),s(b,{update:T,draw:_,destroy:k,regl:t,gl:y,canvas:y.canvas,groups:x}),b;function b(t){t?T(t):null===t&&k(),_()}function _(e){if("number"==typeof e)return w(e);e&&!Array.isArray(e)&&(e=[e]),t._refresh(),x.forEach((function(t,r){t&&(e&&(e[r]?t.draw=!0:t.draw=!1),t.draw?w(r):t.draw=!0)}))}function w(t){"number"==typeof t&&(t=x[t]),null!=t&&t&&t.count&&t.color&&t.opacity&&t.positions&&t.positions.length>1&&(t.scaleRatio=[t.scale[0]*t.viewport.width,t.scale[1]*t.viewport.height],r(t),t.after&&t.after(t))}function T(t){if(t){null!=t.length?"number"==typeof t[0]&&(t=[{positions:t}]):Array.isArray(t)||(t=[t]);var e=0,r=0;if(b.groups=x=t.map((function(t,u){var c=x[u];return t?("function"==typeof t?t={after:t}:"number"==typeof t[0]&&(t={positions:t}),t=o(t,{color:"color colors fill",capSize:"capSize cap capsize cap-size",lineWidth:"lineWidth line-width width line thickness",opacity:"opacity alpha",range:"range dataBox",viewport:"viewport viewBox",errors:"errors error",positions:"positions position data points"}),c||(x[u]=c={id:u,scale:null,translate:null,scaleFract:null,translateFract:null,draw:!0},t=s({},m,t)),a(c,t,[{lineWidth:function(t){return.5*+t},capSize:function(t){return.5*+t},opacity:parseFloat,errors:function(t){return t=l(t),r+=t.length,t},positions:function(t,r){return t=l(t,"float64"),r.count=Math.floor(t.length/2),r.bounds=n(t,2),r.offset=e,e+=r.count,t}},{color:function(t,e){var r=e.count;if(t||(t="transparent"),!Array.isArray(t)||"number"==typeof t[0]){var n=t;t=Array(r);for(var a=0;a<r;a++)t[a]=n}if(t.length<r)throw Error("Not enough colors");for(var o=new Uint8Array(4*r),s=0;s<r;s++){var l=i(t[s],"uint8");o.set(l,4*s)}return o},range:function(t,e,r){var n=e.bounds;return t||(t=n),e.scale=[1/(t[2]-t[0]),1/(t[3]-t[1])],e.translate=[-t[0],-t[1]],e.scaleFract=f(e.scale),e.translateFract=f(e.translate),t},viewport:function(t){var e;return Array.isArray(t)?e={x:t[0],y:t[1],width:t[2]-t[0],height:t[3]-t[1]}:t?(e={x:t.x||t.left||0,y:t.y||t.top||0},t.right?e.width=t.right-e.x:e.width=t.w||t.width||0,t.bottom?e.height=t.bottom-e.y:e.height=t.h||t.height||0):e={x:0,y:0,width:y.drawingBufferWidth,height:y.drawingBufferHeight},e}}]),c):c})),e||r){var h=x.reduce((function(t,e,r){return t+(e?e.count:0)}),0),g=new Float64Array(2*h),_=new Uint8Array(4*h),w=new Float32Array(4*h);x.forEach((function(t,e){if(t){var r=t.positions,n=t.count,i=t.offset,a=t.color,o=t.errors;n&&(_.set(a,4*i),w.set(o,4*i),g.set(r,2*i))}}));var T=c(g);u(T);var k=f(g,T);p(k),d(_),v(w)}}}function k(){u.destroy(),p.destroy(),d.destroy(),v.destroy(),g.destroy()}};var h=[[1,0,0,1,0,0],[1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,1,0,0],[1,0,0,1,0,0],[1,0,-1,0,0,1],[1,0,-1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,1],[1,0,-1,0,0,1],[-1,0,-1,0,0,1],[-1,0,-1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,1],[-1,0,-1,0,0,1],[0,1,1,0,0,0],[0,1,-1,0,0,0],[0,-1,-1,0,0,0],[0,-1,-1,0,0,0],[0,1,1,0,0,0],[0,-1,1,0,0,0],[0,1,0,-1,1,0],[0,1,0,-1,-1,0],[0,1,0,1,-1,0],[0,1,0,1,1,0],[0,1,0,-1,1,0],[0,1,0,1,-1,0],[0,-1,0,-1,1,0],[0,-1,0,-1,-1,0],[0,-1,0,1,-1,0],[0,-1,0,1,1,0],[0,-1,0,-1,1,0],[0,-1,0,1,-1,0]]},46075:function(t,e,r){"use strict";var n=r(25075),i=r(21527),a=r(56131),o=r(56068),s=r(71299),l=r(30120),u=r(11474),c=r(54),f=r(57060),h=f.float32,p=f.fract32,d=r(83522),v=r(18863),g=r(6851);function y(t,e){if(!(this instanceof y))return new y(t,e);if("function"==typeof t?(e||(e={}),e.regl=t):e=t,e.length&&(e.positions=e),!(t=e.regl).hasExtension("ANGLE_instanced_arrays"))throw Error("regl-error2d: `ANGLE_instanced_arrays` extension should be enabled");this.gl=t._gl,this.regl=t,this.passes=[],this.shaders=y.shaders.has(t)?y.shaders.get(t):y.shaders.set(t,y.createShaders(t)).get(t),this.update(e)}t.exports=y,y.dashMult=2,y.maxPatternLength=256,y.precisionThreshold=3e6,y.maxPoints=1e4,y.maxLines=2048,y.shaders=new d,y.createShaders=function(t){var e,r=t.buffer({usage:"static",type:"float",data:[0,1,0,0,1,1,1,0]}),n={primitive:"triangle strip",instances:t.prop("count"),count:4,offset:0,uniforms:{miterMode:function(t,e){return"round"===e.join?2:1},miterLimit:t.prop("miterLimit"),scale:t.prop("scale"),scaleFract:t.prop("scaleFract"),translateFract:t.prop("translateFract"),translate:t.prop("translate"),thickness:t.prop("thickness"),dashTexture:t.prop("dashTexture"),opacity:t.prop("opacity"),pixelRatio:t.context("pixelRatio"),id:t.prop("id"),dashLength:t.prop("dashLength"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]},depth:t.prop("depth")},blend:{enable:!0,color:[0,0,0,0],equation:{rgb:"add",alpha:"add"},func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:"one minus dst alpha",dstAlpha:"one"}},depth:{enable:function(t,e){return!e.overlay}},stencil:{enable:!1},scissor:{enable:!0,box:t.prop("viewport")},viewport:t.prop("viewport")},i=t(a({vert:o(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec2 aCoord, bCoord, aCoordFract, bCoordFract;\nattribute vec4 color;\nattribute float lineEnd, lineTop;\n\nuniform vec2 scale, scaleFract, translate, translateFract;\nuniform float thickness, pixelRatio, id, depth;\nuniform vec4 viewport;\n\nvarying vec4 fragColor;\nvarying vec2 tangent;\n\nvec2 project(vec2 position, vec2 positionFract, vec2 scale, vec2 scaleFract, vec2 translate, vec2 translateFract) {\n\t// the order is important\n\treturn position * scale + translate\n       + positionFract * scale + translateFract\n       + position * scaleFract\n       + positionFract * scaleFract;\n}\n\nvoid main() {\n\tfloat lineStart = 1. - lineEnd;\n\tfloat lineOffset = lineTop * 2. - 1.;\n\n\tvec2 diff = (bCoord + bCoordFract - aCoord - aCoordFract);\n\ttangent = normalize(diff * scale * viewport.zw);\n\tvec2 normal = vec2(-tangent.y, tangent.x);\n\n\tvec2 position = project(aCoord, aCoordFract, scale, scaleFract, translate, translateFract) * lineStart\n\t\t+ project(bCoord, bCoordFract, scale, scaleFract, translate, translateFract) * lineEnd\n\n\t\t+ thickness * normal * .5 * lineOffset / viewport.zw;\n\n\tgl_Position = vec4(position * 2.0 - 1.0, depth, 1);\n\n\tfragColor = color / 255.;\n}\n"]),frag:o(["precision highp float;\n#define GLSLIFY 1\n\nuniform float dashLength, pixelRatio, thickness, opacity, id;\nuniform sampler2D dashTexture;\n\nvarying vec4 fragColor;\nvarying vec2 tangent;\n\nvoid main() {\n\tfloat alpha = 1.;\n\n\tfloat t = fract(dot(tangent, gl_FragCoord.xy) / dashLength) * .5 + .25;\n\tfloat dash = texture2D(dashTexture, vec2(t, .5)).r;\n\n\tgl_FragColor = fragColor;\n\tgl_FragColor.a *= alpha * opacity * dash;\n}\n"]),attributes:{lineEnd:{buffer:r,divisor:0,stride:8,offset:0},lineTop:{buffer:r,divisor:0,stride:8,offset:4},aCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:8,divisor:1},bCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:16,divisor:1},aCoordFract:{buffer:t.prop("positionFractBuffer"),stride:8,offset:8,divisor:1},bCoordFract:{buffer:t.prop("positionFractBuffer"),stride:8,offset:16,divisor:1},color:{buffer:t.prop("colorBuffer"),stride:4,offset:0,divisor:1}}},n));try{e=t(a({cull:{enable:!0,face:"back"},vert:o(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec2 aCoord, bCoord, nextCoord, prevCoord;\nattribute vec4 aColor, bColor;\nattribute float lineEnd, lineTop;\n\nuniform vec2 scale, translate;\nuniform float thickness, pixelRatio, id, depth;\nuniform vec4 viewport;\nuniform float miterLimit, miterMode;\n\nvarying vec4 fragColor;\nvarying vec4 startCutoff, endCutoff;\nvarying vec2 tangent;\nvarying vec2 startCoord, endCoord;\nvarying float enableStartMiter, enableEndMiter;\n\nconst float REVERSE_THRESHOLD = -.875;\nconst float MIN_DIFF = 1e-6;\n\n// TODO: possible optimizations: avoid overcalculating all for vertices and calc just one instead\n// TODO: precalculate dot products, normalize things beforehead etc.\n// TODO: refactor to rectangular algorithm\n\nfloat distToLine(vec2 p, vec2 a, vec2 b) {\n\tvec2 diff = b - a;\n\tvec2 perp = normalize(vec2(-diff.y, diff.x));\n\treturn dot(p - a, perp);\n}\n\nbool isNaN( float val ){\n  return ( val < 0.0 || 0.0 < val || val == 0.0 ) ? false : true;\n}\n\nvoid main() {\n\tvec2 aCoord = aCoord, bCoord = bCoord, prevCoord = prevCoord, nextCoord = nextCoord;\n\n  vec2 adjustedScale;\n  adjustedScale.x = (abs(scale.x) < MIN_DIFF) ? MIN_DIFF : scale.x;\n  adjustedScale.y = (abs(scale.y) < MIN_DIFF) ? MIN_DIFF : scale.y;\n\n  vec2 scaleRatio = adjustedScale * viewport.zw;\n\tvec2 normalWidth = thickness / scaleRatio;\n\n\tfloat lineStart = 1. - lineEnd;\n\tfloat lineBot = 1. - lineTop;\n\n\tfragColor = (lineStart * aColor + lineEnd * bColor) / 255.;\n\n\tif (isNaN(aCoord.x) || isNaN(aCoord.y) || isNaN(bCoord.x) || isNaN(bCoord.y)) return;\n\n\tif (aCoord == prevCoord) prevCoord = aCoord + normalize(bCoord - aCoord);\n\tif (bCoord == nextCoord) nextCoord = bCoord - normalize(bCoord - aCoord);\n\n\tvec2 prevDiff = aCoord - prevCoord;\n\tvec2 currDiff = bCoord - aCoord;\n\tvec2 nextDiff = nextCoord - bCoord;\n\n\tvec2 prevTangent = normalize(prevDiff * scaleRatio);\n\tvec2 currTangent = normalize(currDiff * scaleRatio);\n\tvec2 nextTangent = normalize(nextDiff * scaleRatio);\n\n\tvec2 prevNormal = vec2(-prevTangent.y, prevTangent.x);\n\tvec2 currNormal = vec2(-currTangent.y, currTangent.x);\n\tvec2 nextNormal = vec2(-nextTangent.y, nextTangent.x);\n\n\tvec2 startJoinDirection = normalize(prevTangent - currTangent);\n\tvec2 endJoinDirection = normalize(currTangent - nextTangent);\n\n\t// collapsed/unidirectional segment cases\n\t// FIXME: there should be more elegant solution\n\tvec2 prevTanDiff = abs(prevTangent - currTangent);\n\tvec2 nextTanDiff = abs(nextTangent - currTangent);\n\tif (max(prevTanDiff.x, prevTanDiff.y) < MIN_DIFF) {\n\t\tstartJoinDirection = currNormal;\n\t}\n\tif (max(nextTanDiff.x, nextTanDiff.y) < MIN_DIFF) {\n\t\tendJoinDirection = currNormal;\n\t}\n\tif (aCoord == bCoord) {\n\t\tendJoinDirection = startJoinDirection;\n\t\tcurrNormal = prevNormal;\n\t\tcurrTangent = prevTangent;\n\t}\n\n\ttangent = currTangent;\n\n\t//calculate join shifts relative to normals\n\tfloat startJoinShift = dot(currNormal, startJoinDirection);\n\tfloat endJoinShift = dot(currNormal, endJoinDirection);\n\n\tfloat startMiterRatio = abs(1. / startJoinShift);\n\tfloat endMiterRatio = abs(1. / endJoinShift);\n\n\tvec2 startJoin = startJoinDirection * startMiterRatio;\n\tvec2 endJoin = endJoinDirection * endMiterRatio;\n\n\tvec2 startTopJoin, startBotJoin, endTopJoin, endBotJoin;\n\tstartTopJoin = sign(startJoinShift) * startJoin * .5;\n\tstartBotJoin = -startTopJoin;\n\n\tendTopJoin = sign(endJoinShift) * endJoin * .5;\n\tendBotJoin = -endTopJoin;\n\n\tvec2 aTopCoord = aCoord + normalWidth * startTopJoin;\n\tvec2 bTopCoord = bCoord + normalWidth * endTopJoin;\n\tvec2 aBotCoord = aCoord + normalWidth * startBotJoin;\n\tvec2 bBotCoord = bCoord + normalWidth * endBotJoin;\n\n\t//miter anti-clipping\n\tfloat baClipping = distToLine(bCoord, aCoord, aBotCoord) / dot(normalize(normalWidth * endBotJoin), normalize(normalWidth.yx * vec2(-startBotJoin.y, startBotJoin.x)));\n\tfloat abClipping = distToLine(aCoord, bCoord, bTopCoord) / dot(normalize(normalWidth * startBotJoin), normalize(normalWidth.yx * vec2(-endBotJoin.y, endBotJoin.x)));\n\n\t//prevent close to reverse direction switch\n\tbool prevReverse = dot(currTangent, prevTangent) <= REVERSE_THRESHOLD && abs(dot(currTangent, prevNormal)) * min(length(prevDiff), length(currDiff)) <  length(normalWidth * currNormal);\n\tbool nextReverse = dot(currTangent, nextTangent) <= REVERSE_THRESHOLD && abs(dot(currTangent, nextNormal)) * min(length(nextDiff), length(currDiff)) <  length(normalWidth * currNormal);\n\n\tif (prevReverse) {\n\t\t//make join rectangular\n\t\tvec2 miterShift = normalWidth * startJoinDirection * miterLimit * .5;\n\t\tfloat normalAdjust = 1. - min(miterLimit / startMiterRatio, 1.);\n\t\taBotCoord = aCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;\n\t\taTopCoord = aCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;\n\t}\n\telse if (!nextReverse && baClipping > 0. && baClipping < length(normalWidth * endBotJoin)) {\n\t\t//handle miter clipping\n\t\tbTopCoord -= normalWidth * endTopJoin;\n\t\tbTopCoord += normalize(endTopJoin * normalWidth) * baClipping;\n\t}\n\n\tif (nextReverse) {\n\t\t//make join rectangular\n\t\tvec2 miterShift = normalWidth * endJoinDirection * miterLimit * .5;\n\t\tfloat normalAdjust = 1. - min(miterLimit / endMiterRatio, 1.);\n\t\tbBotCoord = bCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;\n\t\tbTopCoord = bCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;\n\t}\n\telse if (!prevReverse && abClipping > 0. && abClipping < length(normalWidth * startBotJoin)) {\n\t\t//handle miter clipping\n\t\taBotCoord -= normalWidth * startBotJoin;\n\t\taBotCoord += normalize(startBotJoin * normalWidth) * abClipping;\n\t}\n\n\tvec2 aTopPosition = (aTopCoord) * adjustedScale + translate;\n\tvec2 aBotPosition = (aBotCoord) * adjustedScale + translate;\n\n\tvec2 bTopPosition = (bTopCoord) * adjustedScale + translate;\n\tvec2 bBotPosition = (bBotCoord) * adjustedScale + translate;\n\n\t//position is normalized 0..1 coord on the screen\n\tvec2 position = (aTopPosition * lineTop + aBotPosition * lineBot) * lineStart + (bTopPosition * lineTop + bBotPosition * lineBot) * lineEnd;\n\n\tstartCoord = aCoord * scaleRatio + translate * viewport.zw + viewport.xy;\n\tendCoord = bCoord * scaleRatio + translate * viewport.zw + viewport.xy;\n\n\tgl_Position = vec4(position  * 2.0 - 1.0, depth, 1);\n\n\tenableStartMiter = step(dot(currTangent, prevTangent), .5);\n\tenableEndMiter = step(dot(currTangent, nextTangent), .5);\n\n\t//bevel miter cutoffs\n\tif (miterMode == 1.) {\n\t\tif (enableStartMiter == 1.) {\n\t\t\tvec2 startMiterWidth = vec2(startJoinDirection) * thickness * miterLimit * .5;\n\t\t\tstartCutoff = vec4(aCoord, aCoord);\n\t\t\tstartCutoff.zw += vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;\n\t\t\tstartCutoff = startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\n\t\t\tstartCutoff += viewport.xyxy;\n\t\t\tstartCutoff += startMiterWidth.xyxy;\n\t\t}\n\n\t\tif (enableEndMiter == 1.) {\n\t\t\tvec2 endMiterWidth = vec2(endJoinDirection) * thickness * miterLimit * .5;\n\t\t\tendCutoff = vec4(bCoord, bCoord);\n\t\t\tendCutoff.zw += vec2(-endJoinDirection.y, endJoinDirection.x)  / scaleRatio;\n\t\t\tendCutoff = endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\n\t\t\tendCutoff += viewport.xyxy;\n\t\t\tendCutoff += endMiterWidth.xyxy;\n\t\t}\n\t}\n\n\t//round miter cutoffs\n\telse if (miterMode == 2.) {\n\t\tif (enableStartMiter == 1.) {\n\t\t\tvec2 startMiterWidth = vec2(startJoinDirection) * thickness * abs(dot(startJoinDirection, currNormal)) * .5;\n\t\t\tstartCutoff = vec4(aCoord, aCoord);\n\t\t\tstartCutoff.zw += vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;\n\t\t\tstartCutoff = startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\n\t\t\tstartCutoff += viewport.xyxy;\n\t\t\tstartCutoff += startMiterWidth.xyxy;\n\t\t}\n\n\t\tif (enableEndMiter == 1.) {\n\t\t\tvec2 endMiterWidth = vec2(endJoinDirection) * thickness * abs(dot(endJoinDirection, currNormal)) * .5;\n\t\t\tendCutoff = vec4(bCoord, bCoord);\n\t\t\tendCutoff.zw += vec2(-endJoinDirection.y, endJoinDirection.x)  / scaleRatio;\n\t\t\tendCutoff = endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\n\t\t\tendCutoff += viewport.xyxy;\n\t\t\tendCutoff += endMiterWidth.xyxy;\n\t\t}\n\t}\n}\n"]),frag:o(["precision highp float;\n#define GLSLIFY 1\n\nuniform float dashLength, pixelRatio, thickness, opacity, id, miterMode;\nuniform sampler2D dashTexture;\n\nvarying vec4 fragColor;\nvarying vec2 tangent;\nvarying vec4 startCutoff, endCutoff;\nvarying vec2 startCoord, endCoord;\nvarying float enableStartMiter, enableEndMiter;\n\nfloat distToLine(vec2 p, vec2 a, vec2 b) {\n\tvec2 diff = b - a;\n\tvec2 perp = normalize(vec2(-diff.y, diff.x));\n\treturn dot(p - a, perp);\n}\n\nvoid main() {\n\tfloat alpha = 1., distToStart, distToEnd;\n\tfloat cutoff = thickness * .5;\n\n\t//bevel miter\n\tif (miterMode == 1.) {\n\t\tif (enableStartMiter == 1.) {\n\t\t\tdistToStart = distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);\n\t\t\tif (distToStart < -1.) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\talpha *= min(max(distToStart + 1., 0.), 1.);\n\t\t}\n\n\t\tif (enableEndMiter == 1.) {\n\t\t\tdistToEnd = distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);\n\t\t\tif (distToEnd < -1.) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\talpha *= min(max(distToEnd + 1., 0.), 1.);\n\t\t}\n\t}\n\n\t// round miter\n\telse if (miterMode == 2.) {\n\t\tif (enableStartMiter == 1.) {\n\t\t\tdistToStart = distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);\n\t\t\tif (distToStart < 0.) {\n\t\t\t\tfloat radius = length(gl_FragCoord.xy - startCoord);\n\n\t\t\t\tif(radius > cutoff + .5) {\n\t\t\t\t\tdiscard;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\talpha -= smoothstep(cutoff - .5, cutoff + .5, radius);\n\t\t\t}\n\t\t}\n\n\t\tif (enableEndMiter == 1.) {\n\t\t\tdistToEnd = distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);\n\t\t\tif (distToEnd < 0.) {\n\t\t\t\tfloat radius = length(gl_FragCoord.xy - endCoord);\n\n\t\t\t\tif(radius > cutoff + .5) {\n\t\t\t\t\tdiscard;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\talpha -= smoothstep(cutoff - .5, cutoff + .5, radius);\n\t\t\t}\n\t\t}\n\t}\n\n\tfloat t = fract(dot(tangent, gl_FragCoord.xy) / dashLength) * .5 + .25;\n\tfloat dash = texture2D(dashTexture, vec2(t, .5)).r;\n\n\tgl_FragColor = fragColor;\n\tgl_FragColor.a *= alpha * opacity * dash;\n}\n"]),attributes:{lineEnd:{buffer:r,divisor:0,stride:8,offset:0},lineTop:{buffer:r,divisor:0,stride:8,offset:4},aColor:{buffer:t.prop("colorBuffer"),stride:4,offset:0,divisor:1},bColor:{buffer:t.prop("colorBuffer"),stride:4,offset:4,divisor:1},prevCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:0,divisor:1},aCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:8,divisor:1},bCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:16,divisor:1},nextCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:24,divisor:1}}},n))}catch(t){e=i}return{fill:t({primitive:"triangle",elements:function(t,e){return e.triangles},offset:0,vert:o(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec2 position, positionFract;\n\nuniform vec4 color;\nuniform vec2 scale, scaleFract, translate, translateFract;\nuniform float pixelRatio, id;\nuniform vec4 viewport;\nuniform float opacity;\n\nvarying vec4 fragColor;\n\nconst float MAX_LINES = 256.;\n\nvoid main() {\n\tfloat depth = (MAX_LINES - 4. - id) / (MAX_LINES);\n\n\tvec2 position = position * scale + translate\n       + positionFract * scale + translateFract\n       + position * scaleFract\n       + positionFract * scaleFract;\n\n\tgl_Position = vec4(position * 2.0 - 1.0, depth, 1);\n\n\tfragColor = color / 255.;\n\tfragColor.a *= opacity;\n}\n"]),frag:o(["precision highp float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor;\n\nvoid main() {\n\tgl_FragColor = fragColor;\n}\n"]),uniforms:{scale:t.prop("scale"),color:t.prop("fill"),scaleFract:t.prop("scaleFract"),translateFract:t.prop("translateFract"),translate:t.prop("translate"),opacity:t.prop("opacity"),pixelRatio:t.context("pixelRatio"),id:t.prop("id"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]}},attributes:{position:{buffer:t.prop("positionBuffer"),stride:8,offset:8},positionFract:{buffer:t.prop("positionFractBuffer"),stride:8,offset:8}},blend:n.blend,depth:{enable:!1},scissor:n.scissor,stencil:n.stencil,viewport:n.viewport}),rect:i,miter:e}},y.defaults={dashes:null,join:"miter",miterLimit:1,thickness:10,cap:"square",color:"black",opacity:1,overlay:!1,viewport:null,range:null,close:!1,fill:null},y.prototype.render=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];e.length&&(t=this).update.apply(t,e),this.draw()},y.prototype.draw=function(){for(var t=this,e=[],r=arguments.length;r--;)e[r]=arguments[r];return(e.length?e:this.passes).forEach((function(e,r){var n;if(e&&Array.isArray(e))return(n=t).draw.apply(n,e);"number"==typeof e&&(e=t.passes[e]),e&&e.count>1&&e.opacity&&(t.regl._refresh(),e.fill&&e.triangles&&e.triangles.length>2&&t.shaders.fill(e),e.thickness&&(e.scale[0]*e.viewport.width>y.precisionThreshold||e.scale[1]*e.viewport.height>y.precisionThreshold||"rect"===e.join||!e.join&&(e.thickness<=2||e.count>=y.maxPoints)?t.shaders.rect(e):t.shaders.miter(e)))})),this},y.prototype.update=function(t){var e=this;if(t){null!=t.length?"number"==typeof t[0]&&(t=[{positions:t}]):Array.isArray(t)||(t=[t]);var r=this.regl,o=this.gl;if(t.forEach((function(t,f){var d=e.passes[f];if(void 0!==t)if(null!==t){if("number"==typeof t[0]&&(t={positions:t}),t=s(t,{positions:"positions points data coords",thickness:"thickness lineWidth lineWidths line-width linewidth width stroke-width strokewidth strokeWidth",join:"lineJoin linejoin join type mode",miterLimit:"miterlimit miterLimit",dashes:"dash dashes dasharray dash-array dashArray",color:"color colour stroke colors colours stroke-color strokeColor",fill:"fill fill-color fillColor",opacity:"alpha opacity",overlay:"overlay crease overlap intersect",close:"closed close closed-path closePath",range:"range dataBox",viewport:"viewport viewBox",hole:"holes hole hollow",splitNull:"splitNull"}),d||(e.passes[f]=d={id:f,scale:null,scaleFract:null,translate:null,translateFract:null,count:0,hole:[],depth:0,dashLength:1,dashTexture:r.texture({channels:1,data:new Uint8Array([255]),width:1,height:1,mag:"linear",min:"linear"}),colorBuffer:r.buffer({usage:"dynamic",type:"uint8",data:new Uint8Array}),positionBuffer:r.buffer({usage:"dynamic",type:"float",data:new Uint8Array}),positionFractBuffer:r.buffer({usage:"dynamic",type:"float",data:new Uint8Array})},t=a({},y.defaults,t)),null!=t.thickness&&(d.thickness=parseFloat(t.thickness)),null!=t.opacity&&(d.opacity=parseFloat(t.opacity)),null!=t.miterLimit&&(d.miterLimit=parseFloat(t.miterLimit)),null!=t.overlay&&(d.overlay=!!t.overlay,f<y.maxLines&&(d.depth=2*(y.maxLines-1-f%y.maxLines)/y.maxLines-1)),null!=t.join&&(d.join=t.join),null!=t.hole&&(d.hole=t.hole),null!=t.fill&&(d.fill=t.fill?n(t.fill,"uint8"):null),null!=t.viewport&&(d.viewport=v(t.viewport)),d.viewport||(d.viewport=v([o.drawingBufferWidth,o.drawingBufferHeight])),null!=t.close&&(d.close=t.close),null===t.positions&&(t.positions=[]),t.positions){var m,x;if(t.positions.x&&t.positions.y){var b=t.positions.x,_=t.positions.y;x=d.count=Math.max(b.length,_.length),m=new Float64Array(2*x);for(var w=0;w<x;w++)m[2*w]=b[w],m[2*w+1]=_[w]}else m=l(t.positions,"float64"),x=d.count=Math.floor(m.length/2);var T=d.bounds=i(m,2);if(d.fill){for(var k=[],A={},M=0,S=0,E=0,L=d.count;S<L;S++){var C=m[2*S],P=m[2*S+1];isNaN(C)||isNaN(P)||null==C||null==P?(C=m[2*M],P=m[2*M+1],A[S]=M):M=S,k[E++]=C,k[E++]=P}if(t.splitNull){d.count-1 in A||(A[d.count]=d.count-1);var O=Object.keys(A).map(Number).sort((function(t,e){return t-e})),I=[],D=0,z=null!=d.hole?d.hole[0]:null;if(null!=z){var R=g(O,(function(t){return t>=z}));(O=O.slice(0,R)).push(z)}for(var F=function(t){var e=k.slice(2*D,2*O[t]).concat(z?k.slice(2*z):[]),r=(d.hole||[]).map((function(e){return e-z+(O[t]-D)})),n=u(e,r);n=n.map((function(e){return e+D+(e+D<O[t]?0:z-O[t])})),I.push.apply(I,n),D=O[t]+1},B=0;B<O.length;B++)F(B);for(var N=0,j=I.length;N<j;N++)null!=A[I[N]]&&(I[N]=A[I[N]]);d.triangles=I}else{for(var U=u(k,d.hole||[]),V=0,H=U.length;V<H;V++)null!=A[U[V]]&&(U[V]=A[U[V]]);d.triangles=U}}var q=new Float64Array(m);c(q,2,T);var G=new Float64Array(2*x+6);d.close?m[0]===m[2*x-2]&&m[1]===m[2*x-1]?(G[0]=q[2*x-4],G[1]=q[2*x-3]):(G[0]=q[2*x-2],G[1]=q[2*x-1]):(G[0]=q[0],G[1]=q[1]),G.set(q,2),d.close?m[0]===m[2*x-2]&&m[1]===m[2*x-1]?(G[2*x+2]=q[2],G[2*x+3]=q[3],d.count-=1):(G[2*x+2]=q[0],G[2*x+3]=q[1],G[2*x+4]=q[2],G[2*x+5]=q[3]):(G[2*x+2]=q[2*x-2],G[2*x+3]=q[2*x-1],G[2*x+4]=q[2*x-2],G[2*x+5]=q[2*x-1]);var Z=h(G);d.positionBuffer(Z);var Y=p(G,Z);d.positionFractBuffer(Y)}if(t.range?d.range=t.range:d.range||(d.range=d.bounds),(t.range||t.positions)&&d.count){var W=d.bounds,X=W[2]-W[0],J=W[3]-W[1],K=d.range[2]-d.range[0],$=d.range[3]-d.range[1];d.scale=[X/K,J/$],d.translate=[-d.range[0]/K+W[0]/K||0,-d.range[1]/$+W[1]/$||0],d.scaleFract=p(d.scale),d.translateFract=p(d.translate)}if(t.dashes){var Q,tt=0;if(!t.dashes||t.dashes.length<2)tt=1,Q=new Uint8Array([255,255,255,255,255,255,255,255]);else{tt=0;for(var et=0;et<t.dashes.length;++et)tt+=t.dashes[et];Q=new Uint8Array(tt*y.dashMult);for(var rt=0,nt=255,it=0;it<2;it++)for(var at=0;at<t.dashes.length;++at){for(var ot=0,st=t.dashes[at]*y.dashMult*.5;ot<st;++ot)Q[rt++]=nt;nt^=255}}d.dashLength=tt,d.dashTexture({channels:1,data:Q,width:Q.length,height:1,mag:"linear",min:"linear"},0,0)}if(t.color){var lt=d.count,ut=t.color;ut||(ut="transparent");var ct=new Uint8Array(4*lt+4);if(Array.isArray(ut)&&"number"!=typeof ut[0]){for(var ft=0;ft<lt;ft++){var ht=n(ut[ft],"uint8");ct.set(ht,4*ft)}ct.set(n(ut[0],"uint8"),4*lt)}else for(var pt=n(ut,"uint8"),dt=0;dt<lt+1;dt++)ct.set(pt,4*dt);d.colorBuffer({usage:"dynamic",type:"uint8",data:ct})}}else e.passes[f]=null})),t.length<this.passes.length){for(var f=t.length;f<this.passes.length;f++){var d=this.passes[f];d&&(d.colorBuffer.destroy(),d.positionBuffer.destroy(),d.dashTexture.destroy())}this.passes.length=t.length}for(var m=[],x=0;x<this.passes.length;x++)null!==this.passes[x]&&m.push(this.passes[x]);return this.passes=m,this}},y.prototype.destroy=function(){return this.passes.forEach((function(t){t.colorBuffer.destroy(),t.positionBuffer.destroy(),t.dashTexture.destroy()})),this.passes.length=0,this}},11870:function(t,e,r){"use strict";function n(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||i(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(t,e){if(t){if("string"==typeof t)return a(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(t,e):void 0}}function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}var o=r(25075),s=r(21527),l=r(6475),u=r(88294),c=r(56131),f=r(56068),h=r(71299),p=r(93447),d=r(30120),v=r(62683),g=r(57060),y=r(18863),m=x;function x(t,e){var r=this;if(!(this instanceof x))return new x(t,e);"function"==typeof t?(e||(e={}),e.regl=t):(e=t,t=null),e&&e.length&&(e.positions=e);var n,i=(t=e.regl)._gl,a=[];this.tooManyColors=v,n=t.texture({data:new Uint8Array(1020),width:255,height:1,type:"uint8",format:"rgba",wrapS:"clamp",wrapT:"clamp",mag:"nearest",min:"nearest"}),c(this,{regl:t,gl:i,groups:[],markerCache:[null],markerTextures:[null],palette:a,paletteIds:{},paletteTexture:n,maxColors:255,maxSize:100,canvas:i.canvas}),this.update(e);var o={uniforms:{constPointSize:!!e.constPointSize,opacity:t.prop("opacity"),paletteSize:function(t,e){return[r.tooManyColors?0:255,n.height]},pixelRatio:t.context("pixelRatio"),scale:t.prop("scale"),scaleFract:t.prop("scaleFract"),translate:t.prop("translate"),translateFract:t.prop("translateFract"),markerTexture:t.prop("markerTexture"),paletteTexture:n},attributes:{x:function(t,e){return e.xAttr||{buffer:e.positionBuffer,stride:8,offset:0}},y:function(t,e){return e.yAttr||{buffer:e.positionBuffer,stride:8,offset:4}},xFract:function(t,e){return e.xAttr?{constant:[0,0]}:{buffer:e.positionFractBuffer,stride:8,offset:0}},yFract:function(t,e){return e.yAttr?{constant:[0,0]}:{buffer:e.positionFractBuffer,stride:8,offset:4}},size:function(t,e){return e.size.length?{buffer:e.sizeBuffer,stride:2,offset:0}:{constant:[Math.round(255*e.size/r.maxSize)]}},borderSize:function(t,e){return e.borderSize.length?{buffer:e.sizeBuffer,stride:2,offset:1}:{constant:[Math.round(255*e.borderSize/r.maxSize)]}},colorId:function(t,e){return e.color.length?{buffer:e.colorBuffer,stride:r.tooManyColors?8:4,offset:0}:{constant:r.tooManyColors?a.slice(4*e.color,4*e.color+4):[e.color]}},borderColorId:function(t,e){return e.borderColor.length?{buffer:e.colorBuffer,stride:r.tooManyColors?8:4,offset:r.tooManyColors?4:2}:{constant:r.tooManyColors?a.slice(4*e.borderColor,4*e.borderColor+4):[e.borderColor]}},isActive:function(t,e){return!0===e.activation?{constant:[1]}:e.activation?e.activation:{constant:[0]}}},blend:{enable:!0,color:[0,0,0,1],func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:"one minus dst alpha",dstAlpha:"one"}},scissor:{enable:!0,box:t.prop("viewport")},viewport:t.prop("viewport"),stencil:{enable:!1},depth:{enable:!1},elements:t.prop("elements"),count:t.prop("count"),offset:t.prop("offset"),primitive:"points"},s=c({},o);s.frag=f(["precision highp float;\n#define GLSLIFY 1\n\nuniform float opacity;\nuniform sampler2D markerTexture;\n\nvarying vec4 fragColor, fragBorderColor;\nvarying float fragWidth, fragBorderColorLevel, fragColorLevel;\n\nfloat smoothStep(float x, float y) {\n  return 1.0 / (1.0 + exp(50.0*(x - y)));\n}\n\nvoid main() {\n  float dist = texture2D(markerTexture, gl_PointCoord).r, delta = fragWidth;\n\n  // max-distance alpha\n  if (dist < 0.003) discard;\n\n  // null-border case\n  if (fragBorderColorLevel == fragColorLevel || fragBorderColor.a == 0.) {\n    float colorAmt = smoothstep(.5 - delta, .5 + delta, dist);\n    gl_FragColor = vec4(fragColor.rgb, colorAmt * fragColor.a * opacity);\n  }\n  else {\n    float borderColorAmt = smoothstep(fragBorderColorLevel - delta, fragBorderColorLevel + delta, dist);\n    float colorAmt = smoothstep(fragColorLevel - delta, fragColorLevel + delta, dist);\n\n    vec4 color = fragBorderColor;\n    color.a *= borderColorAmt;\n    color = mix(color, fragColor, colorAmt);\n    color.a *= opacity;\n\n    gl_FragColor = color;\n  }\n\n}\n"]),s.vert=f(["precision highp float;\n#define GLSLIFY 1\n\nattribute float x, y, xFract, yFract;\nattribute float size, borderSize;\nattribute vec4 colorId, borderColorId;\nattribute float isActive;\n\nuniform bool constPointSize;\nuniform float pixelRatio;\nuniform vec2 scale, scaleFract, translate, translateFract, paletteSize;\nuniform sampler2D paletteTexture;\n\nconst float maxSize = 100.;\nconst float borderLevel = .5;\n\nvarying vec4 fragColor, fragBorderColor;\nvarying float fragPointSize, fragBorderRadius, fragWidth, fragBorderColorLevel, fragColorLevel;\n\nfloat pointSizeScale = (constPointSize) ? 2. : pixelRatio;\n\nbool isDirect = (paletteSize.x < 1.);\n\nvec4 getColor(vec4 id) {\n  return isDirect ? id / 255. : texture2D(paletteTexture,\n    vec2(\n      (id.x + .5) / paletteSize.x,\n      (id.y + .5) / paletteSize.y\n    )\n  );\n}\n\nvoid main() {\n  // ignore inactive points\n  if (isActive == 0.) return;\n\n  vec2 position = vec2(x, y);\n  vec2 positionFract = vec2(xFract, yFract);\n\n  vec4 color = getColor(colorId);\n  vec4 borderColor = getColor(borderColorId);\n\n  float size = size * maxSize / 255.;\n  float borderSize = borderSize * maxSize / 255.;\n\n  gl_PointSize = 2. * size * pointSizeScale;\n  fragPointSize = size * pixelRatio;\n\n  vec2 pos = (position + translate) * scale\n      + (positionFract + translateFract) * scale\n      + (position + translate) * scaleFract\n      + (positionFract + translateFract) * scaleFract;\n\n  gl_Position = vec4(pos * 2. - 1., 0., 1.);\n\n  fragColor = color;\n  fragBorderColor = borderColor;\n  fragWidth = 1. / gl_PointSize;\n\n  fragBorderColorLevel = clamp(borderLevel - borderLevel * borderSize / size, 0., 1.);\n  fragColorLevel = clamp(borderLevel + (1. - borderLevel) * borderSize / size, 0., 1.);\n}"]),this.drawMarker=t(s);var l=c({},o);l.frag=f(["precision highp float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor, fragBorderColor;\nvarying float fragBorderRadius, fragWidth;\n\nuniform float opacity;\n\nfloat smoothStep(float edge0, float edge1, float x) {\n\tfloat t;\n\tt = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n\treturn t * t * (3.0 - 2.0 * t);\n}\n\nvoid main() {\n\tfloat radius, alpha = 1.0, delta = fragWidth;\n\n\tradius = length(2.0 * gl_PointCoord.xy - 1.0);\n\n\tif (radius > 1.0 + delta) {\n\t\tdiscard;\n\t}\n\n\talpha -= smoothstep(1.0 - delta, 1.0 + delta, radius);\n\n\tfloat borderRadius = fragBorderRadius;\n\tfloat ratio = smoothstep(borderRadius - delta, borderRadius + delta, radius);\n\tvec4 color = mix(fragColor, fragBorderColor, ratio);\n\tcolor.a *= alpha * opacity;\n\tgl_FragColor = color;\n}\n"]),l.vert=f(["precision highp float;\n#define GLSLIFY 1\n\nattribute float x, y, xFract, yFract;\nattribute float size, borderSize;\nattribute vec4 colorId, borderColorId;\nattribute float isActive;\n\nuniform bool constPointSize;\nuniform float pixelRatio;\nuniform vec2 paletteSize, scale, scaleFract, translate, translateFract;\nuniform sampler2D paletteTexture;\n\nconst float maxSize = 100.;\n\nvarying vec4 fragColor, fragBorderColor;\nvarying float fragBorderRadius, fragWidth;\n\nfloat pointSizeScale = (constPointSize) ? 2. : pixelRatio;\n\nbool isDirect = (paletteSize.x < 1.);\n\nvec4 getColor(vec4 id) {\n  return isDirect ? id / 255. : texture2D(paletteTexture,\n    vec2(\n      (id.x + .5) / paletteSize.x,\n      (id.y + .5) / paletteSize.y\n    )\n  );\n}\n\nvoid main() {\n  // ignore inactive points\n  if (isActive == 0.) return;\n\n  vec2 position = vec2(x, y);\n  vec2 positionFract = vec2(xFract, yFract);\n\n  vec4 color = getColor(colorId);\n  vec4 borderColor = getColor(borderColorId);\n\n  float size = size * maxSize / 255.;\n  float borderSize = borderSize * maxSize / 255.;\n\n  gl_PointSize = (size + borderSize) * pointSizeScale;\n\n  vec2 pos = (position + translate) * scale\n      + (positionFract + translateFract) * scale\n      + (position + translate) * scaleFract\n      + (positionFract + translateFract) * scaleFract;\n\n  gl_Position = vec4(pos * 2. - 1., 0., 1.);\n\n  fragBorderRadius = 1. - 2. * borderSize / (size + borderSize);\n  fragColor = color;\n  fragBorderColor = borderColor.a == 0. || borderSize == 0. ? vec4(color.rgb, 0.) : borderColor;\n  fragWidth = 1. / gl_PointSize;\n}\n"]),v&&(l.frag=l.frag.replace("smoothstep","smoothStep"),s.frag=s.frag.replace("smoothstep","smoothStep")),this.drawCircle=t(l)}x.defaults={color:"black",borderColor:"transparent",borderSize:0,size:12,opacity:1,marker:void 0,viewport:null,range:null,pixelSize:null,count:0,offset:0,bounds:null,positions:[],snap:1e4},x.prototype.render=function(){return arguments.length&&this.update.apply(this,arguments),this.draw(),this},x.prototype.draw=function(){for(var t=this,e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];var i=this.groups;if(1===r.length&&Array.isArray(r[0])&&(null===r[0][0]||Array.isArray(r[0][0]))&&(r=r[0]),this.regl._refresh(),r.length)for(var a=0;a<r.length;a++)this.drawItem(a,r[a]);else i.forEach((function(e,r){t.drawItem(r)}));return this},x.prototype.drawItem=function(t,e){var r,n=this.groups,o=n[t];if("number"==typeof e&&(t=e,o=n[e],e=null),o&&o.count&&o.opacity){o.activation[0]&&this.drawCircle(this.getMarkerDrawOptions(0,o,e));for(var s=[],l=1;l<o.activation.length;l++)o.activation[l]&&(!0===o.activation[l]||o.activation[l].data.length)&&s.push.apply(s,function(t){if(Array.isArray(t))return a(t)}(r=this.getMarkerDrawOptions(l,o,e))||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(r)||i(r)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}());s.length&&this.drawMarker(s)}},x.prototype.getMarkerDrawOptions=function(t,e,r){var i=e.range,a=e.tree,o=e.viewport,s=e.activation,l=e.selectionBuffer,u=e.count;if(this.regl,!a)return r?[c({},e,{markerTexture:this.markerTextures[t],activation:s[t],count:r.length,elements:r,offset:0})]:[c({},e,{markerTexture:this.markerTextures[t],activation:s[t],offset:0})];var f=[],h=a.range(i,{lod:!0,px:[(i[2]-i[0])/o.width,(i[3]-i[1])/o.height]});if(r){for(var p=s[t].data,d=new Uint8Array(u),v=0;v<r.length;v++){var g=r[v];d[g]=p?p[g]:1}l.subdata(d)}for(var y=h.length;y--;){var m=n(h[y],2),x=m[0],b=m[1];f.push(c({},e,{markerTexture:this.markerTextures[t],activation:r?l:s[t],offset:x,count:b-x}))}return f},x.prototype.update=function(){for(var t=this,e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];if(r.length){1===r.length&&Array.isArray(r[0])&&(r=r[0]);var i=this.groups,a=this.gl,o=this.regl,l=this.maxSize,f=this.maxColors,v=this.palette;this.groups=i=r.map((function(e,r){var n=i[r];if(void 0===e)return n;null===e?e={positions:null}:"function"==typeof e?e={ondraw:e}:"number"==typeof e[0]&&(e={positions:e}),null===(e=h(e,{positions:"positions data points",snap:"snap cluster lod tree",size:"sizes size radius",borderSize:"borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline",color:"colors color fill fill-color fillColor",borderColor:"borderColors borderColor stroke stroke-color strokeColor",marker:"markers marker shape",range:"range dataBox databox",viewport:"viewport viewPort viewBox viewbox",opacity:"opacity alpha transparency",bounds:"bound bounds boundaries limits",tooManyColors:"tooManyColors palette paletteMode optimizePalette enablePalette"})).positions&&(e.positions=[]),null!=e.tooManyColors&&(t.tooManyColors=e.tooManyColors),n||(i[r]=n={id:r,scale:null,translate:null,scaleFract:null,translateFract:null,activation:[],selectionBuffer:o.buffer({data:new Uint8Array(0),usage:"stream",type:"uint8"}),sizeBuffer:o.buffer({data:new Uint8Array(0),usage:"dynamic",type:"uint8"}),colorBuffer:o.buffer({data:new Uint8Array(0),usage:"dynamic",type:"uint8"}),positionBuffer:o.buffer({data:new Uint8Array(0),usage:"dynamic",type:"float"}),positionFractBuffer:o.buffer({data:new Uint8Array(0),usage:"dynamic",type:"float"})},e=c({},x.defaults,e)),e.positions&&!("marker"in e)&&(e.marker=n.marker,delete n.marker),e.marker&&!("positions"in e)&&(e.positions=n.positions,delete n.positions);var m=0,b=0;if(p(n,e,[{snap:!0,size:function(t,e){return null==t&&(t=x.defaults.size),m+=t&&t.length?1:0,t},borderSize:function(t,e){return null==t&&(t=x.defaults.borderSize),m+=t&&t.length?1:0,t},opacity:parseFloat,color:function(e,r){return null==e&&(e=x.defaults.color),e=t.updateColor(e),b++,e},borderColor:function(e,r){return null==e&&(e=x.defaults.borderColor),e=t.updateColor(e),b++,e},bounds:function(t,e,r){return"range"in r||(r.range=null),t},positions:function(t,e,r){var n=e.snap,i=e.positionBuffer,a=e.positionFractBuffer,l=e.selectionBuffer;if(t.x||t.y)return t.x.length?e.xAttr={buffer:o.buffer(t.x),offset:0,stride:4,count:t.x.length}:e.xAttr={buffer:t.x.buffer,offset:4*t.x.offset||0,stride:4*(t.x.stride||1),count:t.x.count},t.y.length?e.yAttr={buffer:o.buffer(t.y),offset:0,stride:4,count:t.y.length}:e.yAttr={buffer:t.y.buffer,offset:4*t.y.offset||0,stride:4*(t.y.stride||1),count:t.y.count},e.count=Math.max(e.xAttr.count,e.yAttr.count),t;t=d(t,"float64");var c=e.count=Math.floor(t.length/2),f=e.bounds=c?s(t,2):null;if(r.range||e.range||(delete e.range,r.range=f),r.marker||e.marker||(delete e.marker,r.marker=null),n&&(!0===n||c>n)?e.tree=u(t,{bounds:f}):n&&n.length&&(e.tree=n),e.tree){var h={primitive:"points",usage:"static",data:e.tree,type:"uint32"};e.elements?e.elements(h):e.elements=o.elements(h)}var p=g.float32(t);return i({data:p,usage:"dynamic"}),a({data:g.fract32(t,p),usage:"dynamic"}),l({data:new Uint8Array(c),type:"uint8",usage:"stream"}),t}},{marker:function(e,r,n){var i=r.activation;if(i.forEach((function(t){return t&&t.destroy&&t.destroy()})),i.length=0,e&&"number"!=typeof e[0]){for(var a=[],s=0,l=Math.min(e.length,r.count);s<l;s++){var u=t.addMarker(e[s]);a[u]||(a[u]=new Uint8Array(r.count)),a[u][s]=1}for(var c=0;c<a.length;c++)if(a[c]){var f={data:a[c],type:"uint8",usage:"static"};i[c]?i[c](f):i[c]=o.buffer(f),i[c].data=a[c]}}else i[t.addMarker(e)]=!0;return e},range:function(t,e,r){var n=e.bounds;if(n)return t||(t=n),e.scale=[1/(t[2]-t[0]),1/(t[3]-t[1])],e.translate=[-t[0],-t[1]],e.scaleFract=g.fract(e.scale),e.translateFract=g.fract(e.translate),t},viewport:function(t){return y(t||[a.drawingBufferWidth,a.drawingBufferHeight])}}]),m){var _=n,w=_.count,T=_.size,k=_.borderSize,A=_.sizeBuffer,M=new Uint8Array(2*w);if(T.length||k.length)for(var S=0;S<w;S++)M[2*S]=Math.round(255*(null==T[S]?T:T[S])/l),M[2*S+1]=Math.round(255*(null==k[S]?k:k[S])/l);A({data:M,usage:"dynamic"})}if(b){var E,L=n,C=L.count,P=L.color,O=L.borderColor,I=L.colorBuffer;if(t.tooManyColors){if(P.length||O.length){E=new Uint8Array(8*C);for(var D=0;D<C;D++){var z=P[D];E[8*D]=v[4*z],E[8*D+1]=v[4*z+1],E[8*D+2]=v[4*z+2],E[8*D+3]=v[4*z+3];var R=O[D];E[8*D+4]=v[4*R],E[8*D+5]=v[4*R+1],E[8*D+6]=v[4*R+2],E[8*D+7]=v[4*R+3]}}}else if(P.length||O.length){E=new Uint8Array(4*C+2);for(var F=0;F<C;F++)null!=P[F]&&(E[4*F]=P[F]%f,E[4*F+1]=Math.floor(P[F]/f)),null!=O[F]&&(E[4*F+2]=O[F]%f,E[4*F+3]=Math.floor(O[F]/f))}I({data:E||new Uint8Array(0),type:"uint8",usage:"dynamic"})}return n}))}},x.prototype.addMarker=function(t){var e,r=this.markerTextures,n=this.regl,i=this.markerCache,a=null==t?0:i.indexOf(t);if(a>=0)return a;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)e=t;else{e=new Uint8Array(t.length);for(var o=0,s=t.length;o<s;o++)e[o]=255*t[o]}var l=Math.floor(Math.sqrt(e.length));return a=r.length,i.push(t),r.push(n.texture({channels:1,data:e,radius:l,mag:"linear",min:"linear"})),a},x.prototype.updateColor=function(t){var e=this.paletteIds,r=this.palette,n=this.maxColors;Array.isArray(t)||(t=[t]);var i=[];if("number"==typeof t[0]){var a=[];if(Array.isArray(t))for(var s=0;s<t.length;s+=4)a.push(t.slice(s,s+4));else for(var u=0;u<t.length;u+=4)a.push(t.subarray(u,u+4));t=a}for(var c=0;c<t.length;c++){var f=t[c];f=o(f,"uint8");var h=l(f,!1);if(null==e[h]){var p=r.length;e[h]=Math.floor(p/4),r[p]=f[0],r[p+1]=f[1],r[p+2]=f[2],r[p+3]=f[3]}i[c]=e[h]}return!this.tooManyColors&&r.length>4*n&&(this.tooManyColors=!0),this.updatePalette(r),1===i.length?i[0]:i},x.prototype.updatePalette=function(t){if(!this.tooManyColors){var e=this.maxColors,r=this.paletteTexture,n=Math.ceil(.25*t.length/e);if(n>1)for(var i=.25*(t=t.slice()).length%e;i<n*e;i++)t.push(0,0,0,0);r.height<n&&r.resize(e,n),r.subimage({width:Math.min(.25*t.length,e),height:n,data:t},0,0)}},x.prototype.destroy=function(){return this.groups.forEach((function(t){t.sizeBuffer.destroy(),t.positionBuffer.destroy(),t.positionFractBuffer.destroy(),t.colorBuffer.destroy(),t.activation.forEach((function(t){return t&&t.destroy&&t.destroy()})),t.selectionBuffer.destroy(),t.elements&&t.elements.destroy()})),this.groups.length=0,this.paletteTexture.destroy(),this.markerTextures.forEach((function(t){return t&&t.destroy&&t.destroy()})),this};var b=r(56131);t.exports=function(t,e){var r=new m(t,e),n=r.render.bind(r);return b(n,{render:n,update:r.update.bind(r),draw:r.draw.bind(r),destroy:r.destroy.bind(r),regl:r.regl,gl:r.gl,canvas:r.gl.canvas,groups:r.groups,markers:r.markerCache,palette:r.palette}),n}},60487:function(t,e,r){"use strict";var n=r(11870),i=r(71299),a=r(21527),o=r(5877),s=r(57471),l=r(18863),u=r(30120);function c(t,e){if(!(this instanceof c))return new c(t,e);this.traces=[],this.passes={},this.regl=t,this.scatter=n(t),this.canvas=this.scatter.canvas}function f(t,e,r){return(null!=t.id?t.id:t)<<16|(255&e)<<8|255&r}function h(t,e,r){var n,i,a,o,s=t[e],l=t[r];return s.length>2?(s[0],s[2],n=s[1],i=s[3]):s.length?(n=s[0],i=s[1]):(s.x,n=s.y,s.x,s.width,i=s.y+s.height),l.length>2?(a=l[0],o=l[2],l[1],l[3]):l.length?(a=l[0],o=l[1]):(a=l.x,l.y,o=l.x+l.width,l.y,l.height),[a,n,o,i]}function p(t){if("number"==typeof t)return[t,t,t,t];if(2===t.length)return[t[0],t[1],t[0],t[1]];var e=l(t);return[e.x,e.y,e.x+e.width,e.y+e.height]}t.exports=c,c.prototype.render=function(){for(var t,e=this,r=[],n=arguments.length;n--;)r[n]=arguments[n];return r.length&&(t=this).update.apply(t,r),this.regl.attributes.preserveDrawingBuffer?this.draw():(this.dirty?null==this.planned&&(this.planned=o((function(){e.draw(),e.dirty=!0,e.planned=null}))):(this.draw(),this.dirty=!0,o((function(){e.dirty=!1}))),this)},c.prototype.update=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];if(e.length){for(var n=0;n<e.length;n++)this.updateItem(n,e[n]);this.traces=this.traces.filter(Boolean);for(var i=[],a=0,o=0;o<this.traces.length;o++){for(var s=this.traces[o],l=this.traces[o].passes,u=0;u<l.length;u++)i.push(this.passes[l[u]]);s.passOffset=a,a+=s.passes.length}return(t=this.scatter).update.apply(t,i),this}},c.prototype.updateItem=function(t,e){var r=this.regl;if(null===e)return this.traces[t]=null,this;if(!e)return this;var n,o=i(e,{data:"data items columns rows values dimensions samples x",snap:"snap cluster",size:"sizes size radius",color:"colors color fill fill-color fillColor",opacity:"opacity alpha transparency opaque",borderSize:"borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline",borderColor:"borderColors borderColor bordercolor stroke stroke-color strokeColor",marker:"markers marker shape",range:"range ranges databox dataBox",viewport:"viewport viewBox viewbox",domain:"domain domains area areas",padding:"pad padding paddings pads margin margins",transpose:"transpose transposed",diagonal:"diagonal diag showDiagonal",upper:"upper up top upperhalf upperHalf showupperhalf showUpper showUpperHalf",lower:"lower low bottom lowerhalf lowerHalf showlowerhalf showLowerHalf showLower"}),s=this.traces[t]||(this.traces[t]={id:t,buffer:r.buffer({usage:"dynamic",type:"float",data:new Uint8Array}),color:"black",marker:null,size:12,borderColor:"transparent",borderSize:1,viewport:l([r._gl.drawingBufferWidth,r._gl.drawingBufferHeight]),padding:[0,0,0,0],opacity:1,diagonal:!0,upper:!0,lower:!0});if(null!=o.color&&(s.color=o.color),null!=o.size&&(s.size=o.size),null!=o.marker&&(s.marker=o.marker),null!=o.borderColor&&(s.borderColor=o.borderColor),null!=o.borderSize&&(s.borderSize=o.borderSize),null!=o.opacity&&(s.opacity=o.opacity),o.viewport&&(s.viewport=l(o.viewport)),null!=o.diagonal&&(s.diagonal=o.diagonal),null!=o.upper&&(s.upper=o.upper),null!=o.lower&&(s.lower=o.lower),o.data){s.buffer(u(o.data)),s.columns=o.data.length,s.count=o.data[0].length,s.bounds=[];for(var c=0;c<s.columns;c++)s.bounds[c]=a(o.data[c],1)}o.range&&(s.range=o.range,n=s.range&&"number"!=typeof s.range[0]),o.domain&&(s.domain=o.domain);var d=!1;null!=o.padding&&(Array.isArray(o.padding)&&o.padding.length===s.columns&&"number"==typeof o.padding[o.padding.length-1]?(s.padding=o.padding.map(p),d=!0):s.padding=p(o.padding));var v=s.columns,g=s.count,y=s.viewport.width,m=s.viewport.height,x=s.viewport.x,b=s.viewport.y,_=y/v,w=m/v;s.passes=[];for(var T=0;T<v;T++)for(var k=0;k<v;k++)if((s.diagonal||k!==T)&&(s.upper||!(T>k))&&(s.lower||!(T<k))){var A=f(s.id,T,k),M=this.passes[A]||(this.passes[A]={});if(o.data&&(o.transpose?M.positions={x:{buffer:s.buffer,offset:k,count:g,stride:v},y:{buffer:s.buffer,offset:T,count:g,stride:v}}:M.positions={x:{buffer:s.buffer,offset:k*g,count:g},y:{buffer:s.buffer,offset:T*g,count:g}},M.bounds=h(s.bounds,T,k)),o.domain||o.viewport||o.data){var S=d?h(s.padding,T,k):s.padding;if(s.domain){var E=h(s.domain,T,k),L=E[0],C=E[1],P=E[2],O=E[3];M.viewport=[x+L*y+S[0],b+C*m+S[1],x+P*y-S[2],b+O*m-S[3]]}else M.viewport=[x+k*_+_*S[0],b+T*w+w*S[1],x+(k+1)*_-_*S[2],b+(T+1)*w-w*S[3]]}o.color&&(M.color=s.color),o.size&&(M.size=s.size),o.marker&&(M.marker=s.marker),o.borderSize&&(M.borderSize=s.borderSize),o.borderColor&&(M.borderColor=s.borderColor),o.opacity&&(M.opacity=s.opacity),o.range&&(M.range=n?h(s.range,T,k):s.range||M.bounds),s.passes.push(A)}return this},c.prototype.draw=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];if(e.length){for(var n=[],i=0;i<e.length;i++)if("number"==typeof e[i]){var a=this.traces[e[i]],o=a.passes,l=a.passOffset;n.push.apply(n,s(l,l+o.length))}else if(e[i].length){var u=e[i],c=this.traces[i],f=c.passes,h=c.passOffset;f=f.map((function(t,e){n[h+e]=u}))}(t=this.scatter).draw.apply(t,n)}else this.scatter.draw();return this},c.prototype.destroy=function(){return this.traces.forEach((function(t){t.buffer&&t.buffer.destroy&&t.buffer.destroy()})),this.traces=null,this.passes=null,this.scatter.destroy(),this}},98580:function(t){t.exports=function(){function t(t,e){this.id=Z++,this.type=t,this.data=e}function e(t){if(0===t.length)return[];var r=t.charAt(0),n=t.charAt(t.length-1);if(1<t.length&&r===n&&('"'===r||"'"===r))return['"'+t.substr(1,t.length-2).replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'];if(r=/\[(false|true|null|\d+|'[^']*'|"[^"]*")\]/.exec(t))return e(t.substr(0,r.index)).concat(e(r[1])).concat(e(t.substr(r.index+r[0].length)));if(1===(r=t.split(".")).length)return['"'+t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'];for(t=[],n=0;n<r.length;++n)t=t.concat(e(r[n]));return t}function r(t){return"["+e(t).join("][")+"]"}function n(t){return"string"==typeof t?t.split():t}function i(t){return"string"==typeof t?document.querySelector(t):t}function a(t){var e,r,a,o,s=t||{};t={};var l=[],u=[],c="undefined"==typeof window?1:window.devicePixelRatio,f=!1,h={},p=function(t){},d=function(){};if("string"==typeof s?e=document.querySelector(s):"object"==typeof s&&("string"==typeof s.nodeName&&"function"==typeof s.appendChild&&"function"==typeof s.getBoundingClientRect?e=s:"function"==typeof s.drawArrays||"function"==typeof s.drawElements?a=(o=s).canvas:("gl"in s?o=s.gl:"canvas"in s?a=i(s.canvas):"container"in s&&(r=i(s.container)),"attributes"in s&&(t=s.attributes),"extensions"in s&&(l=n(s.extensions)),"optionalExtensions"in s&&(u=n(s.optionalExtensions)),"onDone"in s&&(p=s.onDone),"profile"in s&&(f=!!s.profile),"pixelRatio"in s&&(c=+s.pixelRatio),"cachedCode"in s&&(h=s.cachedCode))),e&&("canvas"===e.nodeName.toLowerCase()?a=e:r=e),!o){if(!a){if(!(e=function(t,e,r){function n(){var e=window.innerWidth,n=window.innerHeight;t!==document.body&&(e=(n=a.getBoundingClientRect()).right-n.left,n=n.bottom-n.top),a.width=r*e,a.height=r*n}var i,a=document.createElement("canvas");return G(a.style,{border:0,margin:0,padding:0,top:0,left:0,width:"100%",height:"100%"}),t.appendChild(a),t===document.body&&(a.style.position="absolute",G(t.style,{margin:0,padding:0})),t!==document.body&&"function"==typeof ResizeObserver?(i=new ResizeObserver((function(){setTimeout(n)}))).observe(t):window.addEventListener("resize",n,!1),n(),{canvas:a,onDestroy:function(){i?i.disconnect():window.removeEventListener("resize",n),t.removeChild(a)}}}(r||document.body,0,c)))return null;a=e.canvas,d=e.onDestroy}void 0===t.premultipliedAlpha&&(t.premultipliedAlpha=!0),o=function(t,e){function r(r){try{return t.getContext(r,e)}catch(t){return null}}return r("webgl")||r("experimental-webgl")||r("webgl-experimental")}(a,t)}return o?{gl:o,canvas:a,container:r,extensions:l,optionalExtensions:u,pixelRatio:c,profile:f,cachedCode:h,onDone:p,onDestroy:d}:(d(),p("webgl not supported, try upgrading your browser or graphics drivers http://get.webgl.org"),null)}function o(t,e){for(var r=Array(t),n=0;n<t;++n)r[n]=e(n);return r}function s(t){var e,r;return e=(65535<t)<<4,e|=r=(255<(t>>>=e))<<3,(e|=r=(15<(t>>>=r))<<2)|(r=(3<(t>>>=r))<<1)|t>>>r>>1}function l(){function t(t){t:{for(var e=16;268435456>=e;e*=16)if(t<=e){t=e;break t}t=0}return 0<(e=r[s(t)>>2]).length?e.pop():new ArrayBuffer(t)}function e(t){r[s(t.byteLength)>>2].push(t)}var r=o(8,(function(){return[]}));return{alloc:t,free:e,allocType:function(e,r){var n=null;switch(e){case 5120:n=new Int8Array(t(r),0,r);break;case 5121:n=new Uint8Array(t(r),0,r);break;case 5122:n=new Int16Array(t(2*r),0,r);break;case 5123:n=new Uint16Array(t(2*r),0,r);break;case 5124:n=new Int32Array(t(4*r),0,r);break;case 5125:n=new Uint32Array(t(4*r),0,r);break;case 5126:n=new Float32Array(t(4*r),0,r);break;default:return null}return n.length!==r?n.subarray(0,r):n},freeType:function(t){e(t.buffer)}}}function u(t){return!!t&&"object"==typeof t&&Array.isArray(t.shape)&&Array.isArray(t.stride)&&"number"==typeof t.offset&&t.shape.length===t.stride.length&&(Array.isArray(t.data)||$(t.data))}function c(t,e,r,n,i,a){for(var o=0;o<e;++o)for(var s=t[o],l=0;l<r;++l)for(var u=s[l],c=0;c<n;++c)i[a++]=u[c]}function f(t,e,r,n,i){for(var a=1,o=r+1;o<e.length;++o)a*=e[o];var s=e[r];if(4==e.length-r){var l=e[r+1],u=e[r+2];for(e=e[r+3],o=0;o<s;++o)c(t[o],l,u,e,n,i),i+=a}else for(o=0;o<s;++o)f(t[o],e,r+1,n,i),i+=a}function h(t){return 0|et[Object.prototype.toString.call(t)]}function p(t,e){for(var r=0;r<e.length;++r)t[r]=e[r]}function d(t,e,r,n,i,a,o){for(var s=0,l=0;l<r;++l)for(var u=0;u<n;++u)t[s++]=e[i*l+a*u+o]}function v(t,e,r,n){function i(e){this.id=l++,this.buffer=t.createBuffer(),this.type=e,this.usage=35044,this.byteLength=0,this.dimension=1,this.dtype=5121,this.persistentData=null,r.profile&&(this.stats={size:0})}function a(e,r,n){e.byteLength=r.byteLength,t.bufferData(e.type,r,n)}function o(t,e,r,n,i,o){if(t.usage=r,Array.isArray(e)){if(t.dtype=n||5126,0<e.length)if(Array.isArray(e[0])){i=at(e);for(var s=n=1;s<i.length;++s)n*=i[s];t.dimension=n,a(t,e=it(e,i,t.dtype),r),o?t.persistentData=e:J.freeType(e)}else"number"==typeof e[0]?(t.dimension=i,p(i=J.allocType(t.dtype,e.length),e),a(t,i,r),o?t.persistentData=i:J.freeType(i)):$(e[0])&&(t.dimension=e[0].length,t.dtype=n||h(e[0])||5126,a(t,e=it(e,[e.length,e[0].length],t.dtype),r),o?t.persistentData=e:J.freeType(e))}else if($(e))t.dtype=n||h(e),t.dimension=i,a(t,e,r),o&&(t.persistentData=new Uint8Array(new Uint8Array(e.buffer)));else if(u(e)){i=e.shape;var l=e.stride,c=(s=e.offset,0),f=0,v=0,g=0;1===i.length?(c=i[0],f=1,v=l[0],g=0):2===i.length&&(c=i[0],f=i[1],v=l[0],g=l[1]),t.dtype=n||h(e.data)||5126,t.dimension=f,d(i=J.allocType(t.dtype,c*f),e.data,c,f,v,g,s),a(t,i,r),o?t.persistentData=i:J.freeType(i)}else e instanceof ArrayBuffer&&(t.dtype=5121,t.dimension=i,a(t,e,r),o&&(t.persistentData=new Uint8Array(new Uint8Array(e))))}function s(r){e.bufferCount--,n(r),t.deleteBuffer(r.buffer),r.buffer=null,delete c[r.id]}var l=0,c={};i.prototype.bind=function(){t.bindBuffer(this.type,this.buffer)},i.prototype.destroy=function(){s(this)};var f=[];return r.profile&&(e.getTotalBufferSize=function(){var t=0;return Object.keys(c).forEach((function(e){t+=c[e].stats.size})),t}),{create:function(n,a,l,f){function v(e){var n=35044,i=null,a=0,s=0,l=1;return Array.isArray(e)||$(e)||u(e)||e instanceof ArrayBuffer?i=e:"number"==typeof e?a=0|e:e&&("data"in e&&(i=e.data),"usage"in e&&(n=nt[e.usage]),"type"in e&&(s=rt[e.type]),"dimension"in e&&(l=0|e.dimension),"length"in e&&(a=0|e.length)),g.bind(),i?o(g,i,n,s,l,f):(a&&t.bufferData(g.type,a,n),g.dtype=s||5121,g.usage=n,g.dimension=l,g.byteLength=a),r.profile&&(g.stats.size=g.byteLength*ot[g.dtype]),v}e.bufferCount++;var g=new i(a);return c[g.id]=g,l||v(n),v._reglType="buffer",v._buffer=g,v.subdata=function(e,r){var n,i=0|(r||0);if(g.bind(),$(e)||e instanceof ArrayBuffer)t.bufferSubData(g.type,i,e);else if(Array.isArray(e)){if(0<e.length)if("number"==typeof e[0]){var a=J.allocType(g.dtype,e.length);p(a,e),t.bufferSubData(g.type,i,a),J.freeType(a)}else(Array.isArray(e[0])||$(e[0]))&&(n=at(e),a=it(e,n,g.dtype),t.bufferSubData(g.type,i,a),J.freeType(a))}else if(u(e)){n=e.shape;var o=e.stride,s=a=0,l=0,c=0;1===n.length?(a=n[0],s=1,l=o[0],c=0):2===n.length&&(a=n[0],s=n[1],l=o[0],c=o[1]),n=Array.isArray(e.data)?g.dtype:h(e.data),d(n=J.allocType(n,a*s),e.data,a,s,l,c,e.offset),t.bufferSubData(g.type,i,n),J.freeType(n)}return v},r.profile&&(v.stats=g.stats),v.destroy=function(){s(g)},v},createStream:function(t,e){var r=f.pop();return r||(r=new i(t)),r.bind(),o(r,e,35040,0,1,!1),r},destroyStream:function(t){f.push(t)},clear:function(){Q(c).forEach(s),f.forEach(s)},getBuffer:function(t){return t&&t._buffer instanceof i?t._buffer:null},restore:function(){Q(c).forEach((function(e){e.buffer=t.createBuffer(),t.bindBuffer(e.type,e.buffer),t.bufferData(e.type,e.persistentData||e.byteLength,e.usage)}))},_initBuffer:o}}function g(t,e,r,n){function i(t){this.id=l++,s[this.id]=this,this.buffer=t,this.primType=4,this.type=this.vertCount=0}function a(n,i,a,o,s,l,c){var f;if(n.buffer.bind(),i?((f=c)||$(i)&&(!u(i)||$(i.data))||(f=e.oes_element_index_uint?5125:5123),r._initBuffer(n.buffer,i,a,f,3)):(t.bufferData(34963,l,a),n.buffer.dtype=f||5121,n.buffer.usage=a,n.buffer.dimension=3,n.buffer.byteLength=l),f=c,!c){switch(n.buffer.dtype){case 5121:case 5120:f=5121;break;case 5123:case 5122:f=5123;break;case 5125:case 5124:f=5125}n.buffer.dtype=f}n.type=f,0>(i=s)&&(i=n.buffer.byteLength,5123===f?i>>=1:5125===f&&(i>>=2)),n.vertCount=i,i=o,0>o&&(i=4,1===(o=n.buffer.dimension)&&(i=0),2===o&&(i=1),3===o&&(i=4)),n.primType=i}function o(t){n.elementsCount--,delete s[t.id],t.buffer.destroy(),t.buffer=null}var s={},l=0,c={uint8:5121,uint16:5123};e.oes_element_index_uint&&(c.uint32=5125),i.prototype.bind=function(){this.buffer.bind()};var f=[];return{create:function(t,e){function s(t){if(t)if("number"==typeof t)l(t),f.primType=4,f.vertCount=0|t,f.type=5121;else{var e=null,r=35044,n=-1,i=-1,o=0,h=0;Array.isArray(t)||$(t)||u(t)?e=t:("data"in t&&(e=t.data),"usage"in t&&(r=nt[t.usage]),"primitive"in t&&(n=st[t.primitive]),"count"in t&&(i=0|t.count),"type"in t&&(h=c[t.type]),"length"in t?o=0|t.length:(o=i,5123===h||5122===h?o*=2:5125!==h&&5124!==h||(o*=4))),a(f,e,r,n,i,o,h)}else l(),f.primType=4,f.vertCount=0,f.type=5121;return s}var l=r.create(null,34963,!0),f=new i(l._buffer);return n.elementsCount++,s(t),s._reglType="elements",s._elements=f,s.subdata=function(t,e){return l.subdata(t,e),s},s.destroy=function(){o(f)},s},createStream:function(t){var e=f.pop();return e||(e=new i(r.create(null,34963,!0,!1)._buffer)),a(e,t,35040,-1,-1,0,0),e},destroyStream:function(t){f.push(t)},getElements:function(t){return"function"==typeof t&&t._elements instanceof i?t._elements:null},clear:function(){Q(s).forEach(o)}}}function y(t){for(var e=J.allocType(5123,t.length),r=0;r<t.length;++r)if(isNaN(t[r]))e[r]=65535;else if(1/0===t[r])e[r]=31744;else if(-1/0===t[r])e[r]=64512;else{lt[0]=t[r];var n=(a=ut[0])>>>31<<15,i=(a<<1>>>24)-127,a=a>>13&1023;e[r]=-24>i?n:-14>i?n+(a+1024>>-14-i):15<i?n+31744:n+(i+15<<10)+a}return e}function m(t){return Array.isArray(t)||$(t)}function x(t){return"[object "+t+"]"}function b(t){return Array.isArray(t)&&(0===t.length||"number"==typeof t[0])}function _(t){return!(!Array.isArray(t)||0===t.length||!m(t[0]))}function w(t){return Object.prototype.toString.call(t)}function T(t){if(!t)return!1;var e=w(t);return 0<=xt.indexOf(e)||b(t)||_(t)||u(t)}function k(t,e){36193===t.type?(t.data=y(e),J.freeType(e)):t.data=e}function A(t,e,r,n,i,a){if(t=void 0!==_t[t]?_t[t]:ht[t]*bt[e],a&&(t*=6),i){for(n=0;1<=r;)n+=t*r*r,r/=2;return n}return t*r*n}function M(t,e,r,n,i,a,o){function s(){this.format=this.internalformat=6408,this.type=5121,this.flipY=this.premultiplyAlpha=this.compressed=!1,this.unpackAlignment=1,this.colorSpace=37444,this.channels=this.height=this.width=0}function l(t,e){t.internalformat=e.internalformat,t.format=e.format,t.type=e.type,t.compressed=e.compressed,t.premultiplyAlpha=e.premultiplyAlpha,t.flipY=e.flipY,t.unpackAlignment=e.unpackAlignment,t.colorSpace=e.colorSpace,t.width=e.width,t.height=e.height,t.channels=e.channels}function c(t,e){if("object"==typeof e&&e){"premultiplyAlpha"in e&&(t.premultiplyAlpha=e.premultiplyAlpha),"flipY"in e&&(t.flipY=e.flipY),"alignment"in e&&(t.unpackAlignment=e.alignment),"colorSpace"in e&&(t.colorSpace=V[e.colorSpace]),"type"in e&&(t.type=H[e.type]);var r=t.width,n=t.height,i=t.channels,a=!1;"shape"in e?(r=e.shape[0],n=e.shape[1],3===e.shape.length&&(i=e.shape[2],a=!0)):("radius"in e&&(r=n=e.radius),"width"in e&&(r=e.width),"height"in e&&(n=e.height),"channels"in e&&(i=e.channels,a=!0)),t.width=0|r,t.height=0|n,t.channels=0|i,r=!1,"format"in e&&(r=e.format,n=t.internalformat=q[r],t.format=at[n],r in H&&!("type"in e)&&(t.type=H[r]),r in Z&&(t.compressed=!0),r=!0),!a&&r?t.channels=ht[t.format]:a&&!r&&t.channels!==ft[t.format]&&(t.format=t.internalformat=ft[t.channels])}}function f(e){t.pixelStorei(37440,e.flipY),t.pixelStorei(37441,e.premultiplyAlpha),t.pixelStorei(37443,e.colorSpace),t.pixelStorei(3317,e.unpackAlignment)}function h(){s.call(this),this.yOffset=this.xOffset=0,this.data=null,this.needsFree=!1,this.element=null,this.needsCopy=!1}function p(t,e){var r=null;if(T(e)?r=e:e&&(c(t,e),"x"in e&&(t.xOffset=0|e.x),"y"in e&&(t.yOffset=0|e.y),T(e.data)&&(r=e.data)),e.copy){var n=i.viewportWidth,a=i.viewportHeight;t.width=t.width||n-t.xOffset,t.height=t.height||a-t.yOffset,t.needsCopy=!0}else if(r){if($(r))t.channels=t.channels||4,t.data=r,"type"in e||5121!==t.type||(t.type=0|et[Object.prototype.toString.call(r)]);else if(b(r)){switch(t.channels=t.channels||4,a=(n=r).length,t.type){case 5121:case 5123:case 5125:case 5126:(a=J.allocType(t.type,a)).set(n),t.data=a;break;case 36193:t.data=y(n)}t.alignment=1,t.needsFree=!0}else if(u(r)){n=r.data,Array.isArray(n)||5121!==t.type||(t.type=0|et[Object.prototype.toString.call(n)]),a=r.shape;var o,s,l,f,h=r.stride;3===a.length?(l=a[2],f=h[2]):f=l=1,o=a[0],s=a[1],a=h[0],h=h[1],t.alignment=1,t.width=o,t.height=s,t.channels=l,t.format=t.internalformat=ft[l],t.needsFree=!0,o=f,r=r.offset,l=t.width,f=t.height,s=t.channels;for(var p=J.allocType(36193===t.type?5126:t.type,l*f*s),d=0,v=0;v<f;++v)for(var g=0;g<l;++g)for(var x=0;x<s;++x)p[d++]=n[a*g+h*v+o*x+r];k(t,p)}else if(w(r)===pt||w(r)===dt||w(r)===vt)w(r)===pt||w(r)===dt?t.element=r:t.element=r.canvas,t.width=t.element.width,t.height=t.element.height,t.channels=4;else if(w(r)===gt)t.element=r,t.width=r.width,t.height=r.height,t.channels=4;else if(w(r)===yt)t.element=r,t.width=r.naturalWidth,t.height=r.naturalHeight,t.channels=4;else if(w(r)===mt)t.element=r,t.width=r.videoWidth,t.height=r.videoHeight,t.channels=4;else if(_(r)){for(n=t.width||r[0].length,a=t.height||r.length,h=t.channels,h=m(r[0][0])?h||r[0][0].length:h||1,o=tt.shape(r),l=1,f=0;f<o.length;++f)l*=o[f];l=J.allocType(36193===t.type?5126:t.type,l),tt.flatten(r,o,"",l),k(t,l),t.alignment=1,t.width=n,t.height=a,t.channels=h,t.format=t.internalformat=ft[h],t.needsFree=!0}}else t.width=t.width||1,t.height=t.height||1,t.channels=t.channels||4}function d(e,r,i,a,o){var s=e.element,l=e.data,u=e.internalformat,c=e.format,h=e.type,p=e.width,d=e.height;f(e),s?t.texSubImage2D(r,o,i,a,c,h,s):e.compressed?t.compressedTexSubImage2D(r,o,i,a,u,p,d,l):e.needsCopy?(n(),t.copyTexSubImage2D(r,o,i,a,e.xOffset,e.yOffset,p,d)):t.texSubImage2D(r,o,i,a,p,d,c,h,l)}function v(){return ot.pop()||new h}function g(t){t.needsFree&&J.freeType(t.data),h.call(t),ot.push(t)}function x(){s.call(this),this.genMipmaps=!1,this.mipmapHint=4352,this.mipmask=0,this.images=Array(16)}function M(t,e,r){var n=t.images[0]=v();t.mipmask=1,n.width=t.width=e,n.height=t.height=r,n.channels=t.channels=4}function S(t,e){var r=null;if(T(e))l(r=t.images[0]=v(),t),p(r,e),t.mipmask=1;else if(c(t,e),Array.isArray(e.mipmap))for(var n=e.mipmap,i=0;i<n.length;++i)l(r=t.images[i]=v(),t),r.width>>=i,r.height>>=i,p(r,n[i]),t.mipmask|=1<<i;else l(r=t.images[0]=v(),t),p(r,e),t.mipmask=1;l(t,t.images[0])}function E(e,r){for(var i=e.images,a=0;a<i.length&&i[a];++a){var o=i[a],s=r,l=a,u=o.element,c=o.data,h=o.internalformat,p=o.format,d=o.type,v=o.width,g=o.height;f(o),u?t.texImage2D(s,l,p,p,d,u):o.compressed?t.compressedTexImage2D(s,l,h,v,g,0,c):o.needsCopy?(n(),t.copyTexImage2D(s,l,p,o.xOffset,o.yOffset,v,g,0)):t.texImage2D(s,l,p,v,g,0,p,d,c||null)}}function L(){var t=st.pop()||new x;s.call(t);for(var e=t.mipmask=0;16>e;++e)t.images[e]=null;return t}function C(t){for(var e=t.images,r=0;r<e.length;++r)e[r]&&g(e[r]),e[r]=null;st.push(t)}function P(){this.magFilter=this.minFilter=9728,this.wrapT=this.wrapS=33071,this.anisotropic=1,this.genMipmaps=!1,this.mipmapHint=4352}function O(t,e){"min"in e&&(t.minFilter=U[e.min],0<=ct.indexOf(t.minFilter)&&!("faces"in e)&&(t.genMipmaps=!0)),"mag"in e&&(t.magFilter=j[e.mag]);var r=t.wrapS,n=t.wrapT;if("wrap"in e){var i=e.wrap;"string"==typeof i?r=n=N[i]:Array.isArray(i)&&(r=N[i[0]],n=N[i[1]])}else"wrapS"in e&&(r=N[e.wrapS]),"wrapT"in e&&(n=N[e.wrapT]);if(t.wrapS=r,t.wrapT=n,"anisotropic"in e&&(t.anisotropic=e.anisotropic),"mipmap"in e){switch(r=!1,typeof e.mipmap){case"string":t.mipmapHint=B[e.mipmap],r=t.genMipmaps=!0;break;case"boolean":r=t.genMipmaps=e.mipmap;break;case"object":t.genMipmaps=!1,r=!0}!r||"min"in e||(t.minFilter=9984)}}function I(r,n){t.texParameteri(n,10241,r.minFilter),t.texParameteri(n,10240,r.magFilter),t.texParameteri(n,10242,r.wrapS),t.texParameteri(n,10243,r.wrapT),e.ext_texture_filter_anisotropic&&t.texParameteri(n,34046,r.anisotropic),r.genMipmaps&&(t.hint(33170,r.mipmapHint),t.generateMipmap(n))}function D(e){s.call(this),this.mipmask=0,this.internalformat=6408,this.id=lt++,this.refCount=1,this.target=e,this.texture=t.createTexture(),this.unit=-1,this.bindCount=0,this.texInfo=new P,o.profile&&(this.stats={size:0})}function z(e){t.activeTexture(33984),t.bindTexture(e.target,e.texture)}function R(){var e=bt[0];e?t.bindTexture(e.target,e.texture):t.bindTexture(3553,null)}function F(e){var r=e.texture,n=e.unit,i=e.target;0<=n&&(t.activeTexture(33984+n),t.bindTexture(i,null),bt[n]=null),t.deleteTexture(r),e.texture=null,e.params=null,e.pixels=null,e.refCount=0,delete ut[e.id],a.textureCount--}var B={"don't care":4352,"dont care":4352,nice:4354,fast:4353},N={repeat:10497,clamp:33071,mirror:33648},j={nearest:9728,linear:9729},U=G({mipmap:9987,"nearest mipmap nearest":9984,"linear mipmap nearest":9985,"nearest mipmap linear":9986,"linear mipmap linear":9987},j),V={none:0,browser:37444},H={uint8:5121,rgba4:32819,rgb565:33635,"rgb5 a1":32820},q={alpha:6406,luminance:6409,"luminance alpha":6410,rgb:6407,rgba:6408,rgba4:32854,"rgb5 a1":32855,rgb565:36194},Z={};e.ext_srgb&&(q.srgb=35904,q.srgba=35906),e.oes_texture_float&&(H.float32=H.float=5126),e.oes_texture_half_float&&(H.float16=H["half float"]=36193),e.webgl_depth_texture&&(G(q,{depth:6402,"depth stencil":34041}),G(H,{uint16:5123,uint32:5125,"depth stencil":34042})),e.webgl_compressed_texture_s3tc&&G(Z,{"rgb s3tc dxt1":33776,"rgba s3tc dxt1":33777,"rgba s3tc dxt3":33778,"rgba s3tc dxt5":33779}),e.webgl_compressed_texture_atc&&G(Z,{"rgb atc":35986,"rgba atc explicit alpha":35987,"rgba atc interpolated alpha":34798}),e.webgl_compressed_texture_pvrtc&&G(Z,{"rgb pvrtc 4bppv1":35840,"rgb pvrtc 2bppv1":35841,"rgba pvrtc 4bppv1":35842,"rgba pvrtc 2bppv1":35843}),e.webgl_compressed_texture_etc1&&(Z["rgb etc1"]=36196);var Y=Array.prototype.slice.call(t.getParameter(34467));Object.keys(Z).forEach((function(t){var e=Z[t];0<=Y.indexOf(e)&&(q[t]=e)}));var W=Object.keys(q);r.textureFormats=W;var X=[];Object.keys(q).forEach((function(t){X[q[t]]=t}));var K=[];Object.keys(H).forEach((function(t){K[H[t]]=t}));var rt=[];Object.keys(j).forEach((function(t){rt[j[t]]=t}));var nt=[];Object.keys(U).forEach((function(t){nt[U[t]]=t}));var it=[];Object.keys(N).forEach((function(t){it[N[t]]=t}));var at=W.reduce((function(t,r){var n=q[r];return 6409===n||6406===n||6409===n||6410===n||6402===n||34041===n||e.ext_srgb&&(35904===n||35906===n)?t[n]=n:32855===n||0<=r.indexOf("rgba")?t[n]=6408:t[n]=6407,t}),{}),ot=[],st=[],lt=0,ut={},xt=r.maxTextureUnits,bt=Array(xt).map((function(){return null}));return G(D.prototype,{bind:function(){this.bindCount+=1;var e=this.unit;if(0>e){for(var r=0;r<xt;++r){var n=bt[r];if(n){if(0<n.bindCount)continue;n.unit=-1}bt[r]=this,e=r;break}o.profile&&a.maxTextureUnits<e+1&&(a.maxTextureUnits=e+1),this.unit=e,t.activeTexture(33984+e),t.bindTexture(this.target,this.texture)}return e},unbind:function(){--this.bindCount},decRef:function(){0>=--this.refCount&&F(this)}}),o.profile&&(a.getTotalTextureSize=function(){var t=0;return Object.keys(ut).forEach((function(e){t+=ut[e].stats.size})),t}),{create2D:function(e,r){function n(t,e){var r=i.texInfo;P.call(r);var a=L();return"number"==typeof t?M(a,0|t,"number"==typeof e?0|e:0|t):t?(O(r,t),S(a,t)):M(a,1,1),r.genMipmaps&&(a.mipmask=(a.width<<1)-1),i.mipmask=a.mipmask,l(i,a),i.internalformat=a.internalformat,n.width=a.width,n.height=a.height,z(i),E(a,3553),I(r,3553),R(),C(a),o.profile&&(i.stats.size=A(i.internalformat,i.type,a.width,a.height,r.genMipmaps,!1)),n.format=X[i.internalformat],n.type=K[i.type],n.mag=rt[r.magFilter],n.min=nt[r.minFilter],n.wrapS=it[r.wrapS],n.wrapT=it[r.wrapT],n}var i=new D(3553);return ut[i.id]=i,a.textureCount++,n(e,r),n.subimage=function(t,e,r,a){e|=0,r|=0,a|=0;var o=v();return l(o,i),o.width=0,o.height=0,p(o,t),o.width=o.width||(i.width>>a)-e,o.height=o.height||(i.height>>a)-r,z(i),d(o,3553,e,r,a),R(),g(o),n},n.resize=function(e,r){var a=0|e,s=0|r||a;if(a===i.width&&s===i.height)return n;n.width=i.width=a,n.height=i.height=s,z(i);for(var l=0;i.mipmask>>l;++l){var u=a>>l,c=s>>l;if(!u||!c)break;t.texImage2D(3553,l,i.format,u,c,0,i.format,i.type,null)}return R(),o.profile&&(i.stats.size=A(i.internalformat,i.type,a,s,!1,!1)),n},n._reglType="texture2d",n._texture=i,o.profile&&(n.stats=i.stats),n.destroy=function(){i.decRef()},n},createCube:function(e,r,n,i,s,u){function f(t,e,r,n,i,a){var s,u=h.texInfo;for(P.call(u),s=0;6>s;++s)y[s]=L();if("number"!=typeof t&&t){if("object"==typeof t)if(e)S(y[0],t),S(y[1],e),S(y[2],r),S(y[3],n),S(y[4],i),S(y[5],a);else if(O(u,t),c(h,t),"faces"in t)for(t=t.faces,s=0;6>s;++s)l(y[s],h),S(y[s],t[s]);else for(s=0;6>s;++s)S(y[s],t)}else for(t=0|t||1,s=0;6>s;++s)M(y[s],t,t);for(l(h,y[0]),h.mipmask=u.genMipmaps?(y[0].width<<1)-1:y[0].mipmask,h.internalformat=y[0].internalformat,f.width=y[0].width,f.height=y[0].height,z(h),s=0;6>s;++s)E(y[s],34069+s);for(I(u,34067),R(),o.profile&&(h.stats.size=A(h.internalformat,h.type,f.width,f.height,u.genMipmaps,!0)),f.format=X[h.internalformat],f.type=K[h.type],f.mag=rt[u.magFilter],f.min=nt[u.minFilter],f.wrapS=it[u.wrapS],f.wrapT=it[u.wrapT],s=0;6>s;++s)C(y[s]);return f}var h=new D(34067);ut[h.id]=h,a.cubeCount++;var y=Array(6);return f(e,r,n,i,s,u),f.subimage=function(t,e,r,n,i){r|=0,n|=0,i|=0;var a=v();return l(a,h),a.width=0,a.height=0,p(a,e),a.width=a.width||(h.width>>i)-r,a.height=a.height||(h.height>>i)-n,z(h),d(a,34069+t,r,n,i),R(),g(a),f},f.resize=function(e){if((e|=0)!==h.width){f.width=h.width=e,f.height=h.height=e,z(h);for(var r=0;6>r;++r)for(var n=0;h.mipmask>>n;++n)t.texImage2D(34069+r,n,h.format,e>>n,e>>n,0,h.format,h.type,null);return R(),o.profile&&(h.stats.size=A(h.internalformat,h.type,f.width,f.height,!1,!0)),f}},f._reglType="textureCube",f._texture=h,o.profile&&(f.stats=h.stats),f.destroy=function(){h.decRef()},f},clear:function(){for(var e=0;e<xt;++e)t.activeTexture(33984+e),t.bindTexture(3553,null),bt[e]=null;Q(ut).forEach(F),a.cubeCount=0,a.textureCount=0},getTexture:function(t){return null},restore:function(){for(var e=0;e<xt;++e){var r=bt[e];r&&(r.bindCount=0,r.unit=-1,bt[e]=null)}Q(ut).forEach((function(e){e.texture=t.createTexture(),t.bindTexture(e.target,e.texture);for(var r=0;32>r;++r)if(0!=(e.mipmask&1<<r))if(3553===e.target)t.texImage2D(3553,r,e.internalformat,e.width>>r,e.height>>r,0,e.internalformat,e.type,null);else for(var n=0;6>n;++n)t.texImage2D(34069+n,r,e.internalformat,e.width>>r,e.height>>r,0,e.internalformat,e.type,null);I(e.texInfo,e.target)}))},refresh:function(){for(var e=0;e<xt;++e){var r=bt[e];r&&(r.bindCount=0,r.unit=-1,bt[e]=null),t.activeTexture(33984+e),t.bindTexture(3553,null),t.bindTexture(34067,null)}}}}function S(t,e,r,n,i,a){function o(t,e,r){this.target=t,this.texture=e,this.renderbuffer=r;var n=t=0;e?(t=e.width,n=e.height):r&&(t=r.width,n=r.height),this.width=t,this.height=n}function s(t){t&&(t.texture&&t.texture._texture.decRef(),t.renderbuffer&&t.renderbuffer._renderbuffer.decRef())}function l(t,e,r){t&&(t.texture?t.texture._texture.refCount+=1:t.renderbuffer._renderbuffer.refCount+=1)}function u(e,r){r&&(r.texture?t.framebufferTexture2D(36160,e,r.target,r.texture._texture.texture,0):t.framebufferRenderbuffer(36160,e,36161,r.renderbuffer._renderbuffer.renderbuffer))}function c(t){var e=3553,r=null,n=null,i=t;return"object"==typeof t&&(i=t.data,"target"in t&&(e=0|t.target)),"texture2d"===(t=i._reglType)||"textureCube"===t?r=i:"renderbuffer"===t&&(n=i,e=36161),new o(e,r,n)}function f(t,e,r,a,s){return r?((t=n.create2D({width:t,height:e,format:a,type:s}))._texture.refCount=0,new o(3553,t,null)):((t=i.create({width:t,height:e,format:a}))._renderbuffer.refCount=0,new o(36161,null,t))}function h(t){return t&&(t.texture||t.renderbuffer)}function p(t,e,r){t&&(t.texture?t.texture.resize(e,r):t.renderbuffer&&t.renderbuffer.resize(e,r),t.width=e,t.height=r)}function d(){this.id=T++,k[this.id]=this,this.framebuffer=t.createFramebuffer(),this.height=this.width=0,this.colorAttachments=[],this.depthStencilAttachment=this.stencilAttachment=this.depthAttachment=null}function v(t){t.colorAttachments.forEach(s),s(t.depthAttachment),s(t.stencilAttachment),s(t.depthStencilAttachment)}function g(e){t.deleteFramebuffer(e.framebuffer),e.framebuffer=null,a.framebufferCount--,delete k[e.id]}function y(e){var n;t.bindFramebuffer(36160,e.framebuffer);var i=e.colorAttachments;for(n=0;n<i.length;++n)u(36064+n,i[n]);for(n=i.length;n<r.maxColorAttachments;++n)t.framebufferTexture2D(36160,36064+n,3553,null,0);t.framebufferTexture2D(36160,33306,3553,null,0),t.framebufferTexture2D(36160,36096,3553,null,0),t.framebufferTexture2D(36160,36128,3553,null,0),u(36096,e.depthAttachment),u(36128,e.stencilAttachment),u(33306,e.depthStencilAttachment),t.checkFramebufferStatus(36160),t.isContextLost(),t.bindFramebuffer(36160,x.next?x.next.framebuffer:null),x.cur=x.next,t.getError()}function m(t,e){function r(t,e){var i,a=0,o=0,s=!0,u=!0;i=null;var p=!0,d="rgba",g="uint8",m=1,x=null,w=null,T=null,k=!1;"number"==typeof t?(a=0|t,o=0|e||a):t?("shape"in t?(a=(o=t.shape)[0],o=o[1]):("radius"in t&&(a=o=t.radius),"width"in t&&(a=t.width),"height"in t&&(o=t.height)),("color"in t||"colors"in t)&&(i=t.color||t.colors,Array.isArray(i)),i||("colorCount"in t&&(m=0|t.colorCount),"colorTexture"in t&&(p=!!t.colorTexture,d="rgba4"),"colorType"in t&&(g=t.colorType,!p)&&("half float"===g||"float16"===g?d="rgba16f":"float"!==g&&"float32"!==g||(d="rgba32f")),"colorFormat"in t&&(d=t.colorFormat,0<=b.indexOf(d)?p=!0:0<=_.indexOf(d)&&(p=!1))),("depthTexture"in t||"depthStencilTexture"in t)&&(k=!(!t.depthTexture&&!t.depthStencilTexture)),"depth"in t&&("boolean"==typeof t.depth?s=t.depth:(x=t.depth,u=!1)),"stencil"in t&&("boolean"==typeof t.stencil?u=t.stencil:(w=t.stencil,s=!1)),"depthStencil"in t&&("boolean"==typeof t.depthStencil?s=u=t.depthStencil:(T=t.depthStencil,u=s=!1))):a=o=1;var A=null,M=null,S=null,E=null;if(Array.isArray(i))A=i.map(c);else if(i)A=[c(i)];else for(A=Array(m),i=0;i<m;++i)A[i]=f(a,o,p,d,g);for(a=a||A[0].width,o=o||A[0].height,x?M=c(x):s&&!u&&(M=f(a,o,k,"depth","uint32")),w?S=c(w):u&&!s&&(S=f(a,o,!1,"stencil","uint8")),T?E=c(T):!x&&!w&&u&&s&&(E=f(a,o,k,"depth stencil","depth stencil")),s=null,i=0;i<A.length;++i)l(A[i]),A[i]&&A[i].texture&&(u=kt[A[i].texture._texture.format]*At[A[i].texture._texture.type],null===s&&(s=u));return l(M),l(S),l(E),v(n),n.width=a,n.height=o,n.colorAttachments=A,n.depthAttachment=M,n.stencilAttachment=S,n.depthStencilAttachment=E,r.color=A.map(h),r.depth=h(M),r.stencil=h(S),r.depthStencil=h(E),r.width=n.width,r.height=n.height,y(n),r}var n=new d;return a.framebufferCount++,r(t,e),G(r,{resize:function(t,e){var i=Math.max(0|t,1),a=Math.max(0|e||i,1);if(i===n.width&&a===n.height)return r;for(var o=n.colorAttachments,s=0;s<o.length;++s)p(o[s],i,a);return p(n.depthAttachment,i,a),p(n.stencilAttachment,i,a),p(n.depthStencilAttachment,i,a),n.width=r.width=i,n.height=r.height=a,y(n),r},_reglType:"framebuffer",_framebuffer:n,destroy:function(){g(n),v(n)},use:function(t){x.setFBO({framebuffer:r},t)}})}var x={cur:null,next:null,dirty:!1,setFBO:null},b=["rgba"],_=["rgba4","rgb565","rgb5 a1"];e.ext_srgb&&_.push("srgba"),e.ext_color_buffer_half_float&&_.push("rgba16f","rgb16f"),e.webgl_color_buffer_float&&_.push("rgba32f");var w=["uint8"];e.oes_texture_half_float&&w.push("half float","float16"),e.oes_texture_float&&w.push("float","float32");var T=0,k={};return G(x,{getFramebuffer:function(t){return"function"==typeof t&&"framebuffer"===t._reglType&&(t=t._framebuffer)instanceof d?t:null},create:m,createCube:function(t){function e(t){var i,a={color:null},o=0,s=null;i="rgba";var l="uint8",u=1;if("number"==typeof t?o=0|t:t?("shape"in t?o=t.shape[0]:("radius"in t&&(o=0|t.radius),"width"in t?o=0|t.width:"height"in t&&(o=0|t.height)),("color"in t||"colors"in t)&&(s=t.color||t.colors,Array.isArray(s)),s||("colorCount"in t&&(u=0|t.colorCount),"colorType"in t&&(l=t.colorType),"colorFormat"in t&&(i=t.colorFormat)),"depth"in t&&(a.depth=t.depth),"stencil"in t&&(a.stencil=t.stencil),"depthStencil"in t&&(a.depthStencil=t.depthStencil)):o=1,s)if(Array.isArray(s))for(t=[],i=0;i<s.length;++i)t[i]=s[i];else t=[s];else for(t=Array(u),s={radius:o,format:i,type:l},i=0;i<u;++i)t[i]=n.createCube(s);for(a.color=Array(t.length),i=0;i<t.length;++i)u=t[i],o=o||u.width,a.color[i]={target:34069,data:t[i]};for(i=0;6>i;++i){for(u=0;u<t.length;++u)a.color[u].target=34069+i;0<i&&(a.depth=r[0].depth,a.stencil=r[0].stencil,a.depthStencil=r[0].depthStencil),r[i]?r[i](a):r[i]=m(a)}return G(e,{width:o,height:o,color:t})}var r=Array(6);return e(t),G(e,{faces:r,resize:function(t){var n=0|t;if(n===e.width)return e;var i=e.color;for(t=0;t<i.length;++t)i[t].resize(n);for(t=0;6>t;++t)r[t].resize(n);return e.width=e.height=n,e},_reglType:"framebufferCube",destroy:function(){r.forEach((function(t){t.destroy()}))}})},clear:function(){Q(k).forEach(g)},restore:function(){x.cur=null,x.next=null,x.dirty=!0,Q(k).forEach((function(e){e.framebuffer=t.createFramebuffer(),y(e)}))}})}function E(){this.w=this.z=this.y=this.x=this.state=0,this.buffer=null,this.size=0,this.normalized=!1,this.type=5126,this.divisor=this.stride=this.offset=0}function L(t,e,r,n,i,a,o){function s(){this.id=++f,this.attributes=[],this.elements=null,this.ownsElements=!1,this.offset=this.count=0,this.instances=-1,this.primitive=4;var t=e.oes_vertex_array_object;this.vao=t?t.createVertexArrayOES():null,h[this.id]=this,this.buffers=[]}var l=r.maxAttributes,c=Array(l);for(r=0;r<l;++r)c[r]=new E;var f=0,h={},p={Record:E,scope:{},state:c,currentVAO:null,targetVAO:null,restore:e.oes_vertex_array_object?function(){e.oes_vertex_array_object&&Q(h).forEach((function(t){t.refresh()}))}:function(){},createVAO:function(t){function e(t){var n;Array.isArray(t)?(n=t,r.elements&&r.ownsElements&&r.elements.destroy(),r.elements=null,r.ownsElements=!1,r.offset=0,r.count=0,r.instances=-1,r.primitive=4):(t.elements?(n=t.elements,r.ownsElements?("function"==typeof n&&"elements"===n._reglType?r.elements.destroy():r.elements(n),r.ownsElements=!1):a.getElements(t.elements)?(r.elements=t.elements,r.ownsElements=!1):(r.elements=a.create(t.elements),r.ownsElements=!0)):(r.elements=null,r.ownsElements=!1),n=t.attributes,r.offset=0,r.count=-1,r.instances=-1,r.primitive=4,r.elements&&(r.count=r.elements._elements.vertCount,r.primitive=r.elements._elements.primType),"offset"in t&&(r.offset=0|t.offset),"count"in t&&(r.count=0|t.count),"instances"in t&&(r.instances=0|t.instances),"primitive"in t&&(r.primitive=st[t.primitive])),t={};var o=r.attributes;o.length=n.length;for(var s=0;s<n.length;++s){var l,c=n[s],f=o[s]=new E,h=c.data||c;Array.isArray(h)||$(h)||u(h)?(r.buffers[s]&&(l=r.buffers[s],$(h)&&l._buffer.byteLength>=h.byteLength?l.subdata(h):(l.destroy(),r.buffers[s]=null)),r.buffers[s]||(l=r.buffers[s]=i.create(c,34962,!1,!0)),f.buffer=i.getBuffer(l),f.size=0|f.buffer.dimension,f.normalized=!1,f.type=f.buffer.dtype,f.offset=0,f.stride=0,f.divisor=0,f.state=1,t[s]=1):i.getBuffer(c)?(f.buffer=i.getBuffer(c),f.size=0|f.buffer.dimension,f.normalized=!1,f.type=f.buffer.dtype,f.offset=0,f.stride=0,f.divisor=0,f.state=1):i.getBuffer(c.buffer)?(f.buffer=i.getBuffer(c.buffer),f.size=0|(+c.size||f.buffer.dimension),f.normalized=!!c.normalized||!1,f.type="type"in c?rt[c.type]:f.buffer.dtype,f.offset=0|(c.offset||0),f.stride=0|(c.stride||0),f.divisor=0|(c.divisor||0),f.state=1):"x"in c&&(f.x=+c.x||0,f.y=+c.y||0,f.z=+c.z||0,f.w=+c.w||0,f.state=2)}for(l=0;l<r.buffers.length;++l)!t[l]&&r.buffers[l]&&(r.buffers[l].destroy(),r.buffers[l]=null);return r.refresh(),e}var r=new s;return n.vaoCount+=1,e.destroy=function(){for(var t=0;t<r.buffers.length;++t)r.buffers[t]&&r.buffers[t].destroy();r.buffers.length=0,r.ownsElements&&(r.elements.destroy(),r.elements=null,r.ownsElements=!1),r.destroy()},e._vao=r,e._reglType="vao",e(t)},getVAO:function(t){return"function"==typeof t&&t._vao?t._vao:null},destroyBuffer:function(e){for(var r=0;r<c.length;++r){var n=c[r];n.buffer===e&&(t.disableVertexAttribArray(r),n.buffer=null)}},setVAO:e.oes_vertex_array_object?function(t){if(t!==p.currentVAO){var r=e.oes_vertex_array_object;t?r.bindVertexArrayOES(t.vao):r.bindVertexArrayOES(null),p.currentVAO=t}}:function(r){if(r!==p.currentVAO){if(r)r.bindAttrs();else{for(var n=e.angle_instanced_arrays,i=0;i<c.length;++i){var a=c[i];a.buffer?(t.enableVertexAttribArray(i),a.buffer.bind(),t.vertexAttribPointer(i,a.size,a.type,a.normalized,a.stride,a.offfset),n&&a.divisor&&n.vertexAttribDivisorANGLE(i,a.divisor)):(t.disableVertexAttribArray(i),t.vertexAttrib4f(i,a.x,a.y,a.z,a.w))}o.elements?t.bindBuffer(34963,o.elements.buffer.buffer):t.bindBuffer(34963,null)}p.currentVAO=r}},clear:e.oes_vertex_array_object?function(){Q(h).forEach((function(t){t.destroy()}))}:function(){}};return s.prototype.bindAttrs=function(){for(var r=e.angle_instanced_arrays,n=this.attributes,i=0;i<n.length;++i){var o=n[i];o.buffer?(t.enableVertexAttribArray(i),t.bindBuffer(34962,o.buffer.buffer),t.vertexAttribPointer(i,o.size,o.type,o.normalized,o.stride,o.offset),r&&o.divisor&&r.vertexAttribDivisorANGLE(i,o.divisor)):(t.disableVertexAttribArray(i),t.vertexAttrib4f(i,o.x,o.y,o.z,o.w))}for(r=n.length;r<l;++r)t.disableVertexAttribArray(r);(r=a.getElements(this.elements))?t.bindBuffer(34963,r.buffer.buffer):t.bindBuffer(34963,null)},s.prototype.refresh=function(){var t=e.oes_vertex_array_object;t&&(t.bindVertexArrayOES(this.vao),this.bindAttrs(),p.currentVAO=null,t.bindVertexArrayOES(null))},s.prototype.destroy=function(){if(this.vao){var t=e.oes_vertex_array_object;this===p.currentVAO&&(p.currentVAO=null,t.bindVertexArrayOES(null)),t.deleteVertexArrayOES(this.vao),this.vao=null}this.ownsElements&&(this.elements.destroy(),this.elements=null,this.ownsElements=!1),h[this.id]&&(delete h[this.id],--n.vaoCount)},p}function C(t,e,r,n){function i(t,e,r,n){this.name=t,this.id=e,this.location=r,this.info=n}function a(t,e){for(var r=0;r<t.length;++r)if(t[r].id===e.id)return void(t[r].location=e.location);t.push(e)}function o(r,n,i){if(!(o=(i=35632===r?u:c)[n])){var a=e.str(n),o=t.createShader(r);t.shaderSource(o,a),t.compileShader(o),i[n]=o}return o}function s(t,e){this.id=p++,this.fragId=t,this.vertId=e,this.program=null,this.uniforms=[],this.attributes=[],this.refCount=1,n.profile&&(this.stats={uniformsCount:0,attributesCount:0})}function l(r,s,l){var u;u=o(35632,r.fragId);var c=o(35633,r.vertId);if(s=r.program=t.createProgram(),t.attachShader(s,u),t.attachShader(s,c),l)for(u=0;u<l.length;++u)c=l[u],t.bindAttribLocation(s,c[0],c[1]);t.linkProgram(s),c=t.getProgramParameter(s,35718),n.profile&&(r.stats.uniformsCount=c);var f=r.uniforms;for(u=0;u<c;++u)if(l=t.getActiveUniform(s,u))if(1<l.size)for(var h=0;h<l.size;++h){var p=l.name.replace("[0]","["+h+"]");a(f,new i(p,e.id(p),t.getUniformLocation(s,p),l))}else a(f,new i(l.name,e.id(l.name),t.getUniformLocation(s,l.name),l));for(c=t.getProgramParameter(s,35721),n.profile&&(r.stats.attributesCount=c),r=r.attributes,u=0;u<c;++u)(l=t.getActiveAttrib(s,u))&&a(r,new i(l.name,e.id(l.name),t.getAttribLocation(s,l.name),l))}var u={},c={},f={},h=[],p=0;return n.profile&&(r.getMaxUniformsCount=function(){var t=0;return h.forEach((function(e){e.stats.uniformsCount>t&&(t=e.stats.uniformsCount)})),t},r.getMaxAttributesCount=function(){var t=0;return h.forEach((function(e){e.stats.attributesCount>t&&(t=e.stats.attributesCount)})),t}),{clear:function(){var e=t.deleteShader.bind(t);Q(u).forEach(e),u={},Q(c).forEach(e),c={},h.forEach((function(e){t.deleteProgram(e.program)})),h.length=0,f={},r.shaderCount=0},program:function(e,n,i,a){var o=f[n];o||(o=f[n]={});var p=o[e];if(p&&(p.refCount++,!a))return p;var d=new s(n,e);return r.shaderCount++,l(d,i,a),p||(o[e]=d),h.push(d),G(d,{destroy:function(){if(d.refCount--,0>=d.refCount){t.deleteProgram(d.program);var e=h.indexOf(d);h.splice(e,1),r.shaderCount--}0>=o[d.vertId].refCount&&(t.deleteShader(c[d.vertId]),delete c[d.vertId],delete f[d.fragId][d.vertId]),Object.keys(f[d.fragId]).length||(t.deleteShader(u[d.fragId]),delete u[d.fragId],delete f[d.fragId])}})},restore:function(){u={},c={};for(var t=0;t<h.length;++t)l(h[t],null,h[t].attributes.map((function(t){return[t.location,t.name]})))},shader:o,frag:-1,vert:-1}}function P(t,e,r,n,i,a,o){function s(i){var a;a=null===e.next?5121:e.next.colorAttachments[0].texture._texture.type;var o=0,s=0,l=n.framebufferWidth,u=n.framebufferHeight,c=null;return $(i)?c=i:i&&(o=0|i.x,s=0|i.y,l=0|(i.width||n.framebufferWidth-o),u=0|(i.height||n.framebufferHeight-s),c=i.data||null),r(),i=l*u*4,c||(5121===a?c=new Uint8Array(i):5126===a&&(c=c||new Float32Array(i))),t.pixelStorei(3333,4),t.readPixels(o,s,l,u,6408,a,c),c}return function(t){return t&&"framebuffer"in t?function(t){var r;return e.setFBO({framebuffer:t.framebuffer},(function(){r=s(t)})),r}(t):s(t)}}function O(t,e){return t>>>e|t<<32-e}function I(t,e){var r=(65535&t)+(65535&e);return(t>>16)+(e>>16)+(r>>16)<<16|65535&r}function D(t){return Array.prototype.slice.call(t)}function z(t){return D(t).join("")}function R(t){function e(){var t=[],e=[];return G((function(){t.push.apply(t,D(arguments))}),{def:function(){var r="v"+i++;return e.push(r),0<arguments.length&&(t.push(r,"="),t.push.apply(t,D(arguments)),t.push(";")),r},toString:function(){return z([0<e.length?"var "+e.join(",")+";":"",z(t)])}})}function r(){function t(t,e){n(t,e,"=",r.def(t,e),";")}var r=e(),n=e(),i=r.toString,a=n.toString;return G((function(){r.apply(r,D(arguments))}),{def:r.def,entry:r,exit:n,save:t,set:function(e,n,i){t(e,n),r(e,n,"=",i,";")},toString:function(){return i()+a()}})}var n=t&&t.cache,i=0,a=[],o=[],s=[],l=e(),u={};return{global:l,link:function(t,e){var r=e&&e.stable;if(!r)for(var n=0;n<o.length;++n)if(o[n]===t&&!s[n])return a[n];return n="g"+i++,a.push(n),o.push(t),s.push(r),n},block:e,proc:function(t,e){function n(){var t="a"+i.length;return i.push(t),t}var i=[];e=e||0;for(var a=0;a<e;++a)n();var o=(a=r()).toString;return u[t]=G(a,{arg:n,toString:function(){return z(["function(",i.join(),"){",o(),"}"])}})},scope:r,cond:function(){var t=z(arguments),e=r(),n=r(),i=e.toString,a=n.toString;return G(e,{then:function(){return e.apply(e,D(arguments)),this},else:function(){return n.apply(n,D(arguments)),this},toString:function(){var e=a();return e&&(e="else{"+e+"}"),z(["if(",t,"){",i(),"}",e])}})},compile:function(){var t=['"use strict";',l,"return {"];Object.keys(u).forEach((function(e){t.push('"',e,'":',u[e].toString(),",")})),t.push("}");var e,r=z(t).replace(/;/g,";\n").replace(/}/g,"}\n").replace(/{/g,"{\n");return n&&(e=function(t){for(var e,r="",n=0;n<t.length;n++)e=t.charCodeAt(n),r+="0123456789abcdef".charAt(e>>>4&15)+"0123456789abcdef".charAt(15&e);return r}(function(t){for(var e=Array(t.length>>2),r=0;r<e.length;r++)e[r]=0;for(r=0;r<8*t.length;r+=8)e[r>>5]|=(255&t.charCodeAt(r/8))<<24-r%32;var n,i,a,o,s,l,u,c,f,h,p,d=8*t.length;for(t=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],r=Array(64),e[d>>5]|=128<<24-d%32,e[15+(d+64>>9<<4)]=d,c=0;c<e.length;c+=16){for(d=t[0],n=t[1],i=t[2],a=t[3],o=t[4],s=t[5],l=t[6],u=t[7],f=0;64>f;f++){var v;16>f?r[f]=e[f+c]:(h=f,p=I(p=O(p=r[f-2],17)^O(p,19)^p>>>10,r[f-7]),v=O(v=r[f-15],7)^O(v,18)^v>>>3,r[h]=I(I(p,v),r[f-16])),h=I(I(I(I(u,h=O(h=o,6)^O(h,11)^O(h,25)),o&s^~o&l),Mt[f]),r[f]),p=I(u=O(u=d,2)^O(u,13)^O(u,22),d&n^d&i^n&i),u=l,l=s,s=o,o=I(a,h),a=i,i=n,n=d,d=I(h,p)}t[0]=I(d,t[0]),t[1]=I(n,t[1]),t[2]=I(i,t[2]),t[3]=I(a,t[3]),t[4]=I(o,t[4]),t[5]=I(s,t[5]),t[6]=I(l,t[6]),t[7]=I(u,t[7])}for(e="",r=0;r<32*t.length;r+=8)e+=String.fromCharCode(t[r>>5]>>>24-r%32&255);return e}(function(t){for(var e,r,n="",i=-1;++i<t.length;)e=t.charCodeAt(i),r=i+1<t.length?t.charCodeAt(i+1):0,55296<=e&&56319>=e&&56320<=r&&57343>=r&&(e=65536+((1023&e)<<10)+(1023&r),i++),127>=e?n+=String.fromCharCode(e):2047>=e?n+=String.fromCharCode(192|e>>>6&31,128|63&e):65535>=e?n+=String.fromCharCode(224|e>>>12&15,128|e>>>6&63,128|63&e):2097151>=e&&(n+=String.fromCharCode(240|e>>>18&7,128|e>>>12&63,128|e>>>6&63,128|63&e));return n}(r))),n[e])?n[e].apply(null,o):(r=Function.apply(null,a.concat(r)),n&&(n[e]=r),r.apply(null,o))}}}function F(t){return Array.isArray(t)||$(t)||u(t)}function B(t){return t.sort((function(t,e){return"viewport"===t?-1:"viewport"===e?1:t<e?-1:1}))}function N(t,e,r,n){this.thisDep=t,this.contextDep=e,this.propDep=r,this.append=n}function j(t){return t&&!(t.thisDep||t.contextDep||t.propDep)}function U(t){return new N(!1,!1,!1,t)}function V(t,e){var r=t.type;if(0===r)return new N(!0,1<=(r=t.data.length),2<=r,e);if(4===r)return new N((r=t.data).thisDep,r.contextDep,r.propDep,e);if(5===r)return new N(!1,!1,!1,e);if(6===r){for(var n=r=!1,i=!1,a=0;a<t.data.length;++a){var o=t.data[a];1===o.type?i=!0:2===o.type?n=!0:3===o.type?r=!0:0===o.type?(r=!0,1<=(o=o.data)&&(n=!0),2<=o&&(i=!0)):4===o.type&&(r=r||o.data.thisDep,n=n||o.data.contextDep,i=i||o.data.propDep)}return new N(r,n,i,e)}return new N(3===r,2===r,1===r,e)}function H(t,e,r,n,i,a,s,l,u,c,f,h,p,d,v,g){function y(t){return t.replace(".","_")}function x(t,e,r){var n=y(t);at.push(t),it[n]=nt[n]=!!r,ot[n]=e}function b(t,e,r){var n=y(t);at.push(t),Array.isArray(r)?(nt[n]=r.slice(),it[n]=r.slice()):nt[n]=it[n]=r,lt[n]=e}function _(){var t=R({cache:v}),r=t.link,n=t.global;t.id=ft++,t.batchId="0";var i=r(ut),a=t.shared={props:"a0"};Object.keys(ut).forEach((function(t){a[t]=n.def(i,".",t)}));var o=t.next={},s=t.current={};Object.keys(lt).forEach((function(t){Array.isArray(nt[t])&&(o[t]=n.def(a.next,".",t),s[t]=n.def(a.current,".",t))}));var l=t.constants={};Object.keys(ct).forEach((function(t){l[t]=n.def(JSON.stringify(ct[t]))})),t.invoke=function(e,n){switch(n.type){case 0:var i=["this",a.context,a.props,t.batchId];return e.def(r(n.data),".call(",i.slice(0,Math.max(n.data.length+1,4)),")");case 1:return e.def(a.props,n.data);case 2:return e.def(a.context,n.data);case 3:return e.def("this",n.data);case 4:return n.data.append(t,e),n.data.ref;case 5:return n.data.toString();case 6:return n.data.map((function(r){return t.invoke(e,r)}))}},t.attribCache={};var u={};return t.scopeAttrib=function(t){if((t=e.id(t))in u)return u[t];var n=c.scope[t];return n||(n=c.scope[t]=new K),u[t]=r(n)},t}function w(t,e){var r=t.static,n=t.dynamic;if("framebuffer"in r){var i=r.framebuffer;return i?(i=l.getFramebuffer(i),U((function(t,e){var r=t.link(i),n=t.shared;return e.set(n.framebuffer,".next",r),n=n.context,e.set(n,".framebufferWidth",r+".width"),e.set(n,".framebufferHeight",r+".height"),r}))):U((function(t,e){var r=t.shared;return e.set(r.framebuffer,".next","null"),r=r.context,e.set(r,".framebufferWidth",r+".drawingBufferWidth"),e.set(r,".framebufferHeight",r+".drawingBufferHeight"),"null"}))}if("framebuffer"in n){var a=n.framebuffer;return V(a,(function(t,e){var r=t.invoke(e,a),n=t.shared,i=n.framebuffer;return r=e.def(i,".getFramebuffer(",r,")"),e.set(i,".next",r),n=n.context,e.set(n,".framebufferWidth",r+"?"+r+".width:"+n+".drawingBufferWidth"),e.set(n,".framebufferHeight",r+"?"+r+".height:"+n+".drawingBufferHeight"),r}))}return null}function T(t,r,n){function i(t){if(t in a){var r=e.id(a[t]);return(t=U((function(){return r}))).id=r,t}if(t in o){var n=o[t];return V(n,(function(t,e){var r=t.invoke(e,n);return e.def(t.shared.strings,".id(",r,")")}))}return null}var a=t.static,o=t.dynamic,s=i("frag"),l=i("vert"),u=null;return j(s)&&j(l)?(u=f.program(l.id,s.id,null,n),t=U((function(t,e){return t.link(u)}))):t=new N(s&&s.thisDep||l&&l.thisDep,s&&s.contextDep||l&&l.contextDep,s&&s.propDep||l&&l.propDep,(function(t,e){var r,n,i=t.shared.shader;return r=s?s.append(t,e):e.def(i,".","frag"),n=l?l.append(t,e):e.def(i,".","vert"),e.def(i+".program("+n+","+r+")")})),{frag:s,vert:l,progVar:t,program:u}}function k(t,e){function r(t,e){if(t in n){var r=0|n[t];return e?o.offset=r:o.instances=r,U((function(t,n){return e&&(t.OFFSET=r),r}))}if(t in i){var a=i[t];return V(a,(function(t,r){var n=t.invoke(r,a);return e&&(t.OFFSET=n),n}))}if(e){if(u)return U((function(t,e){return t.OFFSET=0}));if(s)return new N(l.thisDep,l.contextDep,l.propDep,(function(t,e){return e.def(t.shared.vao+".currentVAO?"+t.shared.vao+".currentVAO.offset:0")}))}else if(s)return new N(l.thisDep,l.contextDep,l.propDep,(function(t,e){return e.def(t.shared.vao+".currentVAO?"+t.shared.vao+".currentVAO.instances:-1")}));return null}var n=t.static,i=t.dynamic,o={},s=!1,l=function(){if("vao"in n){var t=n.vao;return null!==t&&null===c.getVAO(t)&&(t=c.createVAO(t)),s=!0,o.vao=t,U((function(e){var r=c.getVAO(t);return r?e.link(r):"null"}))}if("vao"in i){s=!0;var e=i.vao;return V(e,(function(t,r){var n=t.invoke(r,e);return r.def(t.shared.vao+".getVAO("+n+")")}))}return null}(),u=!1,f=function(){if("elements"in n){var t=n.elements;if(o.elements=t,F(t)){var e=o.elements=a.create(t,!0);t=a.getElements(e),u=!0}else t&&(t=a.getElements(t),u=!0);return e=U((function(e,r){if(t){var n=e.link(t);return e.ELEMENTS=n}return e.ELEMENTS=null})),e.value=t,e}if("elements"in i){u=!0;var r=i.elements;return V(r,(function(t,e){var n=(i=t.shared).isBufferArgs,i=i.elements,a=t.invoke(e,r),o=e.def("null");return n=e.def(n,"(",a,")"),a=t.cond(n).then(o,"=",i,".createStream(",a,");").else(o,"=",i,".getElements(",a,");"),e.entry(a),e.exit(t.cond(n).then(i,".destroyStream(",o,");")),t.ELEMENTS=o}))}return s?new N(l.thisDep,l.contextDep,l.propDep,(function(t,e){return e.def(t.shared.vao+".currentVAO?"+t.shared.elements+".getElements("+t.shared.vao+".currentVAO.elements):null")})):null}(),h=r("offset",!0),p=function(){if("primitive"in n){var t=n.primitive;return o.primitive=t,U((function(e,r){return st[t]}))}if("primitive"in i){var e=i.primitive;return V(e,(function(t,r){var n=t.constants.primTypes,i=t.invoke(r,e);return r.def(n,"[",i,"]")}))}return u?j(f)?f.value?U((function(t,e){return e.def(t.ELEMENTS,".primType")})):U((function(){return 4})):new N(f.thisDep,f.contextDep,f.propDep,(function(t,e){var r=t.ELEMENTS;return e.def(r,"?",r,".primType:",4)})):s?new N(l.thisDep,l.contextDep,l.propDep,(function(t,e){return e.def(t.shared.vao+".currentVAO?"+t.shared.vao+".currentVAO.primitive:4")})):null}(),d=function(){if("count"in n){var t=0|n.count;return o.count=t,U((function(){return t}))}if("count"in i){var e=i.count;return V(e,(function(t,r){return t.invoke(r,e)}))}return u?j(f)?f?h?new N(h.thisDep,h.contextDep,h.propDep,(function(t,e){return e.def(t.ELEMENTS,".vertCount-",t.OFFSET)})):U((function(t,e){return e.def(t.ELEMENTS,".vertCount")})):U((function(){return-1})):new N(f.thisDep||h.thisDep,f.contextDep||h.contextDep,f.propDep||h.propDep,(function(t,e){var r=t.ELEMENTS;return t.OFFSET?e.def(r,"?",r,".vertCount-",t.OFFSET,":-1"):e.def(r,"?",r,".vertCount:-1")})):s?new N(l.thisDep,l.contextDep,l.propDep,(function(t,e){return e.def(t.shared.vao,".currentVAO?",t.shared.vao,".currentVAO.count:-1")})):null}(),v=r("instances",!1);return{elements:f,primitive:p,count:d,instances:v,offset:h,vao:l,vaoActive:s,elementsActive:u,static:o}}function A(t,r){var n=t.static,a=t.dynamic,o={};return Object.keys(n).forEach((function(t){var r=n[t],a=e.id(t),s=new K;if(F(r))s.state=1,s.buffer=i.getBuffer(i.create(r,34962,!1,!0)),s.type=0;else if(u=i.getBuffer(r))s.state=1,s.buffer=u,s.type=0;else if("constant"in r){var l=r.constant;s.buffer="null",s.state=2,"number"==typeof l?s.x=l:St.forEach((function(t,e){e<l.length&&(s[t]=l[e])}))}else{var u=F(r.buffer)?i.getBuffer(i.create(r.buffer,34962,!1,!0)):i.getBuffer(r.buffer),c=0|r.offset,f=0|r.stride,h=0|r.size,p=!!r.normalized,d=0;"type"in r&&(d=rt[r.type]),r=0|r.divisor,s.buffer=u,s.state=1,s.size=h,s.normalized=p,s.type=d||u.dtype,s.offset=c,s.stride=f,s.divisor=r}o[t]=U((function(t,e){var r=t.attribCache;if(a in r)return r[a];var n={isStream:!1};return Object.keys(s).forEach((function(t){n[t]=s[t]})),s.buffer&&(n.buffer=t.link(s.buffer),n.type=n.type||n.buffer+".dtype"),r[a]=n}))})),Object.keys(a).forEach((function(t){var e=a[t];o[t]=V(e,(function(t,r){function n(t){r(l[t],"=",i,".",t,"|0;")}var i=t.invoke(r,e),a=t.shared,o=t.constants,s=a.isBufferArgs,l=(a=a.buffer,{isStream:r.def(!1)}),u=new K;u.state=1,Object.keys(u).forEach((function(t){l[t]=r.def(""+u[t])}));var c=l.buffer,f=l.type;return r("if(",s,"(",i,")){",l.isStream,"=true;",c,"=",a,".createStream(",34962,",",i,");",f,"=",c,".dtype;","}else{",c,"=",a,".getBuffer(",i,");","if(",c,"){",f,"=",c,".dtype;",'}else if("constant" in ',i,"){",l.state,"=",2,";","if(typeof "+i+'.constant === "number"){',l[St[0]],"=",i,".constant;",St.slice(1).map((function(t){return l[t]})).join("="),"=0;","}else{",St.map((function(t,e){return l[t]+"="+i+".constant.length>"+e+"?"+i+".constant["+e+"]:0;"})).join(""),"}}else{","if(",s,"(",i,".buffer)){",c,"=",a,".createStream(",34962,",",i,".buffer);","}else{",c,"=",a,".getBuffer(",i,".buffer);","}",f,'="type" in ',i,"?",o.glTypes,"[",i,".type]:",c,".dtype;",l.normalized,"=!!",i,".normalized;"),n("size"),n("offset"),n("stride"),n("divisor"),r("}}"),r.exit("if(",l.isStream,"){",a,".destroyStream(",c,");","}"),l}))})),o}function M(t,e,n,i,a){function s(t){var e=u[t];e&&(h[t]=e)}var l=function(t,e){if("string"==typeof(r=t.static).frag&&"string"==typeof r.vert){if(0<Object.keys(e.dynamic).length)return null;var r=e.static,n=Object.keys(r);if(0<n.length&&"number"==typeof r[n[0]]){for(var i=[],a=0;a<n.length;++a)i.push([0|r[n[a]],n[a]]);return i}}return null}(t,e),u=function(t,e,r){function n(t){if(t in i){var r=i[t];t=!0;var n,o,s=0|r.x,l=0|r.y;return"width"in r?n=0|r.width:t=!1,"height"in r?o=0|r.height:t=!1,new N(!t&&e&&e.thisDep,!t&&e&&e.contextDep,!t&&e&&e.propDep,(function(t,e){var i=t.shared.context,a=n;"width"in r||(a=e.def(i,".","framebufferWidth","-",s));var u=o;return"height"in r||(u=e.def(i,".","framebufferHeight","-",l)),[s,l,a,u]}))}if(t in a){var u=a[t];return t=V(u,(function(t,e){var r=t.invoke(e,u),n=t.shared.context,i=e.def(r,".x|0"),a=e.def(r,".y|0");return[i,a,e.def('"width" in ',r,"?",r,".width|0:","(",n,".","framebufferWidth","-",i,")"),r=e.def('"height" in ',r,"?",r,".height|0:","(",n,".","framebufferHeight","-",a,")")]})),e&&(t.thisDep=t.thisDep||e.thisDep,t.contextDep=t.contextDep||e.contextDep,t.propDep=t.propDep||e.propDep),t}return e?new N(e.thisDep,e.contextDep,e.propDep,(function(t,e){var r=t.shared.context;return[0,0,e.def(r,".","framebufferWidth"),e.def(r,".","framebufferHeight")]})):null}var i=t.static,a=t.dynamic;if(t=n("viewport")){var o=t;t=new N(t.thisDep,t.contextDep,t.propDep,(function(t,e){var r=o.append(t,e),n=t.shared.context;return e.set(n,".viewportWidth",r[2]),e.set(n,".viewportHeight",r[3]),r}))}return{viewport:t,scissor_box:n("scissor.box")}}(t,d=w(t)),f=k(t),h=function(t,e){var r=t.static,n=t.dynamic,i={};return at.forEach((function(t){function e(e,o){if(t in r){var s=e(r[t]);i[a]=U((function(){return s}))}else if(t in n){var l=n[t];i[a]=V(l,(function(t,e){return o(t,e,t.invoke(e,l))}))}}var a=y(t);switch(t){case"cull.enable":case"blend.enable":case"dither":case"stencil.enable":case"depth.enable":case"scissor.enable":case"polygonOffset.enable":case"sample.alpha":case"sample.enable":case"depth.mask":case"lineWidth":return e((function(t){return t}),(function(t,e,r){return r}));case"depth.func":return e((function(t){return Ct[t]}),(function(t,e,r){return e.def(t.constants.compareFuncs,"[",r,"]")}));case"depth.range":return e((function(t){return t}),(function(t,e,r){return[e.def("+",r,"[0]"),e=e.def("+",r,"[1]")]}));case"blend.func":return e((function(t){return[Lt["srcRGB"in t?t.srcRGB:t.src],Lt["dstRGB"in t?t.dstRGB:t.dst],Lt["srcAlpha"in t?t.srcAlpha:t.src],Lt["dstAlpha"in t?t.dstAlpha:t.dst]]}),(function(t,e,r){function n(t,n){return e.def('"',t,n,'" in ',r,"?",r,".",t,n,":",r,".",t)}t=t.constants.blendFuncs;var i=n("src","RGB"),a=n("dst","RGB"),o=(i=e.def(t,"[",i,"]"),e.def(t,"[",n("src","Alpha"),"]"));return[i,a=e.def(t,"[",a,"]"),o,t=e.def(t,"[",n("dst","Alpha"),"]")]}));case"blend.equation":return e((function(t){return"string"==typeof t?[$[t],$[t]]:"object"==typeof t?[$[t.rgb],$[t.alpha]]:void 0}),(function(t,e,r){var n=t.constants.blendEquations,i=e.def(),a=e.def();return(t=t.cond("typeof ",r,'==="string"')).then(i,"=",a,"=",n,"[",r,"];"),t.else(i,"=",n,"[",r,".rgb];",a,"=",n,"[",r,".alpha];"),e(t),[i,a]}));case"blend.color":return e((function(t){return o(4,(function(e){return+t[e]}))}),(function(t,e,r){return o(4,(function(t){return e.def("+",r,"[",t,"]")}))}));case"stencil.mask":return e((function(t){return 0|t}),(function(t,e,r){return e.def(r,"|0")}));case"stencil.func":return e((function(t){return[Ct[t.cmp||"keep"],t.ref||0,"mask"in t?t.mask:-1]}),(function(t,e,r){return[t=e.def('"cmp" in ',r,"?",t.constants.compareFuncs,"[",r,".cmp]",":",7680),e.def(r,".ref|0"),e=e.def('"mask" in ',r,"?",r,".mask|0:-1")]}));case"stencil.opFront":case"stencil.opBack":return e((function(e){return["stencil.opBack"===t?1029:1028,Pt[e.fail||"keep"],Pt[e.zfail||"keep"],Pt[e.zpass||"keep"]]}),(function(e,r,n){function i(t){return r.def('"',t,'" in ',n,"?",a,"[",n,".",t,"]:",7680)}var a=e.constants.stencilOps;return["stencil.opBack"===t?1029:1028,i("fail"),i("zfail"),i("zpass")]}));case"polygonOffset.offset":return e((function(t){return[0|t.factor,0|t.units]}),(function(t,e,r){return[e.def(r,".factor|0"),e=e.def(r,".units|0")]}));case"cull.face":return e((function(t){var e=0;return"front"===t?e=1028:"back"===t&&(e=1029),e}),(function(t,e,r){return e.def(r,'==="front"?',1028,":",1029)}));case"frontFace":return e((function(t){return Ot[t]}),(function(t,e,r){return e.def(r+'==="cw"?2304:2305')}));case"colorMask":return e((function(t){return t.map((function(t){return!!t}))}),(function(t,e,r){return o(4,(function(t){return"!!"+r+"["+t+"]"}))}));case"sample.coverage":return e((function(t){return["value"in t?t.value:1,!!t.invert]}),(function(t,e,r){return[e.def('"value" in ',r,"?+",r,".value:1"),e=e.def("!!",r,".invert")]}))}})),i}(t),p=T(t,0,l);s("viewport"),s(y("scissor.box"));var d,v=0<Object.keys(h).length;if((d={framebuffer:d,draw:f,shader:p,state:h,dirty:v,scopeVAO:null,drawVAO:null,useVAO:!1,attributes:{}}).profile=function(t){var e,r=t.static;if(t=t.dynamic,"profile"in r){var n=!!r.profile;(e=U((function(t,e){return n}))).enable=n}else if("profile"in t){var i=t.profile;e=V(i,(function(t,e){return t.invoke(e,i)}))}return e}(t),d.uniforms=function(t,e){var r=t.static,n=t.dynamic,i={};return Object.keys(r).forEach((function(t){var e,n=r[t];if("number"==typeof n||"boolean"==typeof n)e=U((function(){return n}));else if("function"==typeof n){var a=n._reglType;"texture2d"===a||"textureCube"===a?e=U((function(t){return t.link(n)})):"framebuffer"!==a&&"framebufferCube"!==a||(e=U((function(t){return t.link(n.color[0])})))}else m(n)&&(e=U((function(t){return t.global.def("[",o(n.length,(function(t){return n[t]})),"]")})));e.value=n,i[t]=e})),Object.keys(n).forEach((function(t){var e=n[t];i[t]=V(e,(function(t,r){return t.invoke(r,e)}))})),i}(n),d.drawVAO=d.scopeVAO=f.vao,!d.drawVAO&&p.program&&!l&&r.angle_instanced_arrays&&f.static.elements){var g=!0;if(t=p.program.attributes.map((function(t){return t=e.static[t],g=g&&!!t,t})),g&&0<t.length){var x=c.getVAO(c.createVAO({attributes:t,elements:f.static.elements}));d.drawVAO=new N(null,null,null,(function(t,e){return t.link(x)})),d.useVAO=!0}}return l?d.useVAO=!0:d.attributes=A(e),d.context=function(t){var e=t.static,r=t.dynamic,n={};return Object.keys(e).forEach((function(t){var r=e[t];n[t]=U((function(t,e){return"number"==typeof r||"boolean"==typeof r?""+r:t.link(r)}))})),Object.keys(r).forEach((function(t){var e=r[t];n[t]=V(e,(function(t,r){return t.invoke(r,e)}))})),n}(i),d}function S(t,e,r){var n=t.shared.context,i=t.scope();Object.keys(r).forEach((function(a){e.save(n,"."+a);var o=r[a].append(t,e);Array.isArray(o)?i(n,".",a,"=[",o.join(),"];"):i(n,".",a,"=",o,";")})),e(i)}function E(t,e,r,n){var i,a=(s=t.shared).gl,o=s.framebuffer;tt&&(i=e.def(s.extensions,".webgl_draw_buffers"));var s=(l=t.constants).drawBuffer,l=l.backBuffer;t=r?r.append(t,e):e.def(o,".next"),n||e("if(",t,"!==",o,".cur){"),e("if(",t,"){",a,".bindFramebuffer(",36160,",",t,".framebuffer);"),tt&&e(i,".drawBuffersWEBGL(",s,"[",t,".colorAttachments.length]);"),e("}else{",a,".bindFramebuffer(",36160,",null);"),tt&&e(i,".drawBuffersWEBGL(",l,");"),e("}",o,".cur=",t,";"),n||e("}")}function L(t,e,r){var n=t.shared,i=n.gl,a=t.current,s=t.next,l=n.current,u=n.next,c=t.cond(l,".dirty");at.forEach((function(e){var n,f;if(!((e=y(e))in r.state))if(e in s){n=s[e],f=a[e];var h=o(nt[e].length,(function(t){return c.def(n,"[",t,"]")}));c(t.cond(h.map((function(t,e){return t+"!=="+f+"["+e+"]"})).join("||")).then(i,".",lt[e],"(",h,");",h.map((function(t,e){return f+"["+e+"]="+t})).join(";"),";"))}else n=c.def(u,".",e),h=t.cond(n,"!==",l,".",e),c(h),e in ot?h(t.cond(n).then(i,".enable(",ot[e],");").else(i,".disable(",ot[e],");"),l,".",e,"=",n,";"):h(i,".",lt[e],"(",n,");",l,".",e,"=",n,";")})),0===Object.keys(r.state).length&&c(l,".dirty=false;"),e(c)}function C(t,e,r,n){var i,a=t.shared,o=t.current,s=a.current,l=a.gl;B(Object.keys(r)).forEach((function(a){var u=r[a];if(!n||n(u)){var c=u.append(t,e);if(ot[a]){var f=ot[a];j(u)?(i=t.link(c,{stable:!0}),e(t.cond(i).then(l,".enable(",f,");").else(l,".disable(",f,");")),e(s,".",a,"=",i,";")):(e(t.cond(c).then(l,".enable(",f,");").else(l,".disable(",f,");")),e(s,".",a,"=",c,";"))}else if(m(c)){var h=o[a];e(l,".",lt[a],"(",c,");",c.map((function(t,e){return h+"["+e+"]="+t})).join(";"),";")}else j(u)?(i=t.link(c,{stable:!0}),e(l,".",lt[a],"(",i,");",s,".",a,"=",i,";")):e(l,".",lt[a],"(",c,");",s,".",a,"=",c,";")}}))}function P(t,e){Q&&(t.instancing=e.def(t.shared.extensions,".angle_instanced_arrays"))}function O(t,e,r,n,i){function a(){return"undefined"==typeof performance?"Date.now()":"performance.now()"}function o(t){t(u=e.def(),"=",a(),";"),"string"==typeof i?t(h,".count+=",i,";"):t(h,".count++;"),d&&(n?t(c=e.def(),"=",v,".getNumPendingQueries();"):t(v,".beginQuery(",h,");"))}function s(t){t(h,".cpuTime+=",a(),"-",u,";"),d&&(n?t(v,".pushScopeStats(",c,",",v,".getNumPendingQueries(),",h,");"):t(v,".endQuery();"))}function l(t){var r=e.def(p,".profile");e(p,".profile=",t,";"),e.exit(p,".profile=",r,";")}var u,c,f=t.shared,h=t.stats,p=f.current,v=f.timer;if(r=r.profile){if(j(r))return void(r.enable?(o(e),s(e.exit),l("true")):l("false"));l(r=r.append(t,e))}else r=e.def(p,".profile");o(f=t.block()),e("if(",r,"){",f,"}"),s(t=t.block()),e.exit("if(",r,"){",t,"}")}function I(t,e,r,n,i){function a(r,n,i){function a(){e("if(!",c,".buffer){",l,".enableVertexAttribArray(",u,");}");var r,a=i.type;r=i.size?e.def(i.size,"||",n):n,e("if(",c,".type!==",a,"||",c,".size!==",r,"||",p.map((function(t){return c+"."+t+"!=="+i[t]})).join("||"),"){",l,".bindBuffer(",34962,",",f,".buffer);",l,".vertexAttribPointer(",[u,r,a,i.normalized,i.stride,i.offset],");",c,".type=",a,";",c,".size=",r,";",p.map((function(t){return c+"."+t+"="+i[t]+";"})).join(""),"}"),Q&&(a=i.divisor,e("if(",c,".divisor!==",a,"){",t.instancing,".vertexAttribDivisorANGLE(",[u,a],");",c,".divisor=",a,";}"))}function s(){e("if(",c,".buffer){",l,".disableVertexAttribArray(",u,");",c,".buffer=null;","}if(",St.map((function(t,e){return c+"."+t+"!=="+h[e]})).join("||"),"){",l,".vertexAttrib4f(",u,",",h,");",St.map((function(t,e){return c+"."+t+"="+h[e]+";"})).join(""),"}")}var l=o.gl,u=e.def(r,".location"),c=e.def(o.attributes,"[",u,"]");r=i.state;var f=i.buffer,h=[i.x,i.y,i.z,i.w],p=["buffer","normalized","offset","stride"];1===r?a():2===r?s():(e("if(",r,"===",1,"){"),a(),e("}else{"),s(),e("}"))}var o=t.shared;n.forEach((function(n){var o,s=n.name,l=r.attributes[s];if(l){if(!i(l))return;o=l.append(t,e)}else{if(!i(It))return;var u=t.scopeAttrib(s);o={},Object.keys(new K).forEach((function(t){o[t]=e.def(u,".",t)}))}a(t.link(n),function(t){switch(t){case 35664:case 35667:case 35671:return 2;case 35665:case 35668:case 35672:return 3;case 35666:case 35669:case 35673:return 4;default:return 1}}(n.info.type),o)}))}function D(t,r,n,i,a,s){for(var l,u=t.shared,c=u.gl,f=0;f<i.length;++f){var h,p=(g=i[f]).name,d=g.info.type,v=n.uniforms[p],g=t.link(g)+".location";if(v){if(!a(v))continue;if(j(v)){if(p=v.value,35678===d||35680===d)r(c,".uniform1i(",g,",",(d=t.link(p._texture||p.color[0]._texture))+".bind());"),r.exit(d,".unbind();");else if(35674===d||35675===d||35676===d)v=2,35675===d?v=3:35676===d&&(v=4),r(c,".uniformMatrix",v,"fv(",g,",false,",p=t.global.def("new Float32Array(["+Array.prototype.slice.call(p)+"])"),");");else{switch(d){case 5126:l="1f";break;case 35664:l="2f";break;case 35665:l="3f";break;case 35666:l="4f";break;case 35670:case 5124:l="1i";break;case 35671:case 35667:l="2i";break;case 35672:case 35668:l="3i";break;case 35673:case 35669:l="4i"}r(c,".uniform",l,"(",g,",",m(p)?Array.prototype.slice.call(p):p,");")}continue}h=v.append(t,r)}else{if(!a(It))continue;h=r.def(u.uniforms,"[",e.id(p),"]")}switch(35678===d?r("if(",h,"&&",h,'._reglType==="framebuffer"){',h,"=",h,".color[0];","}"):35680===d&&r("if(",h,"&&",h,'._reglType==="framebufferCube"){',h,"=",h,".color[0];","}"),p=1,d){case 35678:case 35680:d=r.def(h,"._texture"),r(c,".uniform1i(",g,",",d,".bind());"),r.exit(d,".unbind();");continue;case 5124:case 35670:l="1i";break;case 35667:case 35671:l="2i",p=2;break;case 35668:case 35672:l="3i",p=3;break;case 35669:case 35673:l="4i",p=4;break;case 5126:l="1f";break;case 35664:l="2f",p=2;break;case 35665:l="3f",p=3;break;case 35666:l="4f",p=4;break;case 35674:l="Matrix2fv";break;case 35675:l="Matrix3fv";break;case 35676:l="Matrix4fv"}if("M"===l.charAt(0)){r(c,".uniform",l,"(",g,","),g=Math.pow(d-35674+2,2);var y=t.global.def("new Float32Array(",g,")");Array.isArray(h)?r("false,(",o(g,(function(t){return y+"["+t+"]="+h[t]})),",",y,")"):r("false,(Array.isArray(",h,")||",h," instanceof Float32Array)?",h,":(",o(g,(function(t){return y+"["+t+"]="+h+"["+t+"]"})),",",y,")"),r(");")}else{if(1<p){d=[];var x=[];for(v=0;v<p;++v)Array.isArray(h)?x.push(h[v]):x.push(r.def(h+"["+v+"]")),s&&d.push(r.def());s&&r("if(!",t.batchId,"||",d.map((function(t,e){return t+"!=="+x[e]})).join("||"),"){",d.map((function(t,e){return t+"="+x[e]+";"})).join("")),r(c,".uniform",l,"(",g,",",x.join(","),");")}else s&&(d=r.def(),r("if(!",t.batchId,"||",d,"!==",h,"){",d,"=",h,";")),r(c,".uniform",l,"(",g,",",h,");");s&&r("}")}}}function z(t,e,r,n){function i(i){var a=h[i];return a?a.contextDep&&n.contextDynamic||a.propDep?a.append(t,r):a.append(t,e):e.def(f,".",i)}function a(){function t(){r(l,".drawElementsInstancedANGLE(",[d,g,y,v+"<<(("+y+"-5121)>>1)",s],");")}function e(){r(l,".drawArraysInstancedANGLE(",[d,v,g,s],");")}p&&"null"!==p?m?t():(r("if(",p,"){"),t(),r("}else{"),e(),r("}")):e()}function o(){function t(){r(c+".drawElements("+[d,g,y,v+"<<(("+y+"-5121)>>1)"]+");")}function e(){r(c+".drawArrays("+[d,v,g]+");")}p&&"null"!==p?m?t():(r("if(",p,"){"),t(),r("}else{"),e(),r("}")):e()}var s,l,u=t.shared,c=u.gl,f=u.draw,h=n.draw,p=function(){var i=h.elements,a=e;return i?((i.contextDep&&n.contextDynamic||i.propDep)&&(a=r),i=i.append(t,a),h.elementsActive&&a("if("+i+")"+c+".bindBuffer(34963,"+i+".buffer.buffer);")):(i=a.def(),a(i,"=",f,".","elements",";","if(",i,"){",c,".bindBuffer(",34963,",",i,".buffer.buffer);}","else if(",u.vao,".currentVAO){",i,"=",t.shared.elements+".getElements("+u.vao,".currentVAO.elements);",et?"":"if("+i+")"+c+".bindBuffer(34963,"+i+".buffer.buffer);","}")),i}(),d=i("primitive"),v=i("offset"),g=function(){var i=h.count,a=e;return i?((i.contextDep&&n.contextDynamic||i.propDep)&&(a=r),i=i.append(t,a)):i=a.def(f,".","count"),i}();if("number"==typeof g){if(0===g)return}else r("if(",g,"){"),r.exit("}");Q&&(s=i("instances"),l=t.instancing);var y=p+".type",m=h.elements&&j(h.elements)&&!h.vaoActive;Q&&("number"!=typeof s||0<=s)?"string"==typeof s?(r("if(",s,">0){"),a(),r("}else if(",s,"<0){"),o(),r("}")):a():o()}function H(t,e,r,n,i){return i=(e=_()).proc("body",i),Q&&(e.instancing=i.def(e.shared.extensions,".angle_instanced_arrays")),t(e,i,r,n),e.compile().body}function q(t,e,r,n){P(t,e),r.useVAO?r.drawVAO?e(t.shared.vao,".setVAO(",r.drawVAO.append(t,e),");"):e(t.shared.vao,".setVAO(",t.shared.vao,".targetVAO);"):(e(t.shared.vao,".setVAO(null);"),I(t,e,r,n.attributes,(function(){return!0}))),D(t,e,r,n.uniforms,(function(){return!0}),!1),z(t,e,e,r)}function Z(t,e,r,n){function i(){return!0}t.batchId="a1",P(t,e),I(t,e,r,n.attributes,i),D(t,e,r,n.uniforms,i,!1),z(t,e,e,r)}function W(t,e,r,n){function i(t){return t.contextDep&&o||t.propDep}function a(t){return!i(t)}P(t,e);var o=r.contextDep,s=e.def(),l=e.def();t.shared.props=l,t.batchId=s;var u=t.scope(),c=t.scope();e(u.entry,"for(",s,"=0;",s,"<","a1",";++",s,"){",l,"=","a0","[",s,"];",c,"}",u.exit),r.needsContext&&S(t,c,r.context),r.needsFramebuffer&&E(t,c,r.framebuffer),C(t,c,r.state,i),r.profile&&i(r.profile)&&O(t,c,r,!1,!0),n?(r.useVAO?r.drawVAO?i(r.drawVAO)?c(t.shared.vao,".setVAO(",r.drawVAO.append(t,c),");"):u(t.shared.vao,".setVAO(",r.drawVAO.append(t,u),");"):u(t.shared.vao,".setVAO(",t.shared.vao,".targetVAO);"):(u(t.shared.vao,".setVAO(null);"),I(t,u,r,n.attributes,a),I(t,c,r,n.attributes,i)),D(t,u,r,n.uniforms,a,!1),D(t,c,r,n.uniforms,i,!0),z(t,u,c,r)):(e=t.global.def("{}"),n=r.shader.progVar.append(t,c),l=c.def(n,".id"),u=c.def(e,"[",l,"]"),c(t.shared.gl,".useProgram(",n,".program);","if(!",u,"){",u,"=",e,"[",l,"]=",t.link((function(e){return H(Z,t,r,e,2)})),"(",n,");}",u,".call(this,a0[",s,"],",s,");"))}function X(t,r){function n(e){var n=r.shader[e];n&&(n=n.append(t,i),isNaN(n)?i.set(a.shader,"."+e,n):i.set(a.shader,"."+e,t.link(n,{stable:!0})))}var i=t.proc("scope",3);t.batchId="a2";var a=t.shared,o=a.current;if(S(t,i,r.context),r.framebuffer&&r.framebuffer.append(t,i),B(Object.keys(r.state)).forEach((function(e){var n=r.state[e],o=n.append(t,i);m(o)?o.forEach((function(r,n){isNaN(r)?i.set(t.next[e],"["+n+"]",r):i.set(t.next[e],"["+n+"]",t.link(r,{stable:!0}))})):j(n)?i.set(a.next,"."+e,t.link(o,{stable:!0})):i.set(a.next,"."+e,o)})),O(t,i,r,!0,!0),["elements","offset","count","instances","primitive"].forEach((function(e){var n=r.draw[e];n&&(n=n.append(t,i),isNaN(n)?i.set(a.draw,"."+e,n):i.set(a.draw,"."+e,t.link(n),{stable:!0}))})),Object.keys(r.uniforms).forEach((function(n){var o=r.uniforms[n].append(t,i);Array.isArray(o)&&(o="["+o.map((function(e){return isNaN(e)?e:t.link(e,{stable:!0})}))+"]"),i.set(a.uniforms,"["+t.link(e.id(n),{stable:!0})+"]",o)})),Object.keys(r.attributes).forEach((function(e){var n=r.attributes[e].append(t,i),a=t.scopeAttrib(e);Object.keys(new K).forEach((function(t){i.set(a,"."+t,n[t])}))})),r.scopeVAO){var s=r.scopeVAO.append(t,i);isNaN(s)?i.set(a.vao,".targetVAO",s):i.set(a.vao,".targetVAO",t.link(s,{stable:!0}))}n("vert"),n("frag"),0<Object.keys(r.state).length&&(i(o,".dirty=true;"),i.exit(o,".dirty=true;")),i("a1(",t.shared.context,",a0,",t.batchId,");")}function J(t,e,r){var n=e.static[r];if(n&&function(t){if("object"==typeof t&&!m(t)){for(var e=Object.keys(t),r=0;r<e.length;++r)if(Y.isDynamic(t[e[r]]))return!0;return!1}}(n)){var i=t.global,a=Object.keys(n),o=!1,s=!1,l=!1,u=t.global.def("{}");a.forEach((function(e){var r=n[e];if(Y.isDynamic(r))"function"==typeof r&&(r=n[e]=Y.unbox(r)),e=V(r,null),o=o||e.thisDep,l=l||e.propDep,s=s||e.contextDep;else{switch(i(u,".",e,"="),typeof r){case"number":i(r);break;case"string":i('"',r,'"');break;case"object":Array.isArray(r)&&i("[",r.join(),"]");break;default:i(t.link(r))}i(";")}})),e.dynamic[r]=new Y.DynamicVariable(4,{thisDep:o,contextDep:s,propDep:l,ref:u,append:function(t,e){a.forEach((function(r){var i=n[r];Y.isDynamic(i)&&(i=t.invoke(e,i),e(u,".",r,"=",i,";"))}))}}),delete e.static[r]}}var K=c.Record,$={add:32774,subtract:32778,"reverse subtract":32779};r.ext_blend_minmax&&($.min=32775,$.max=32776);var Q=r.angle_instanced_arrays,tt=r.webgl_draw_buffers,et=r.oes_vertex_array_object,nt={dirty:!0,profile:g.profile},it={},at=[],ot={},lt={};x("dither",3024),x("blend.enable",3042),b("blend.color","blendColor",[0,0,0,0]),b("blend.equation","blendEquationSeparate",[32774,32774]),b("blend.func","blendFuncSeparate",[1,0,1,0]),x("depth.enable",2929,!0),b("depth.func","depthFunc",513),b("depth.range","depthRange",[0,1]),b("depth.mask","depthMask",!0),b("colorMask","colorMask",[!0,!0,!0,!0]),x("cull.enable",2884),b("cull.face","cullFace",1029),b("frontFace","frontFace",2305),b("lineWidth","lineWidth",1),x("polygonOffset.enable",32823),b("polygonOffset.offset","polygonOffset",[0,0]),x("sample.alpha",32926),x("sample.enable",32928),b("sample.coverage","sampleCoverage",[1,!1]),x("stencil.enable",2960),b("stencil.mask","stencilMask",-1),b("stencil.func","stencilFunc",[519,0,-1]),b("stencil.opFront","stencilOpSeparate",[1028,7680,7680,7680]),b("stencil.opBack","stencilOpSeparate",[1029,7680,7680,7680]),x("scissor.enable",3089),b("scissor.box","scissor",[0,0,t.drawingBufferWidth,t.drawingBufferHeight]),b("viewport","viewport",[0,0,t.drawingBufferWidth,t.drawingBufferHeight]);var ut={gl:t,context:p,strings:e,next:it,current:nt,draw:h,elements:a,buffer:i,shader:f,attributes:c.state,vao:c,uniforms:u,framebuffer:l,extensions:r,timer:d,isBufferArgs:F},ct={primTypes:st,compareFuncs:Ct,blendFuncs:Lt,blendEquations:$,stencilOps:Pt,glTypes:rt,orientationType:Ot};tt&&(ct.backBuffer=[1029],ct.drawBuffer=o(n.maxDrawbuffers,(function(t){return 0===t?[0]:o(t,(function(t){return 36064+t}))})));var ft=0;return{next:it,current:nt,procs:function(){var t=_(),e=t.proc("poll"),i=t.proc("refresh"),a=t.block();e(a),i(a);var s,l=(f=t.shared).gl,u=f.next,c=f.current;a(c,".dirty=false;"),E(t,e),E(t,i,null,!0),Q&&(s=t.link(Q)),r.oes_vertex_array_object&&i(t.link(r.oes_vertex_array_object),".bindVertexArrayOES(null);");var f=i.def(f.attributes),h=i.def(0),p=t.cond(h,".buffer");p.then(l,".enableVertexAttribArray(i);",l,".bindBuffer(",34962,",",h,".buffer.buffer);",l,".vertexAttribPointer(i,",h,".size,",h,".type,",h,".normalized,",h,".stride,",h,".offset);").else(l,".disableVertexAttribArray(i);",l,".vertexAttrib4f(i,",h,".x,",h,".y,",h,".z,",h,".w);",h,".buffer=null;");var d=t.link(n.maxAttributes,{stable:!0});return i("for(var i=0;i<",d,";++i){",h,"=",f,"[i];",p,"}"),Q&&i("for(var i=0;i<",d,";++i){",s,".vertexAttribDivisorANGLE(i,",f,"[i].divisor);","}"),i(t.shared.vao,".currentVAO=null;",t.shared.vao,".setVAO(",t.shared.vao,".targetVAO);"),Object.keys(ot).forEach((function(r){var n=ot[r],o=a.def(u,".",r),s=t.block();s("if(",o,"){",l,".enable(",n,")}else{",l,".disable(",n,")}",c,".",r,"=",o,";"),i(s),e("if(",o,"!==",c,".",r,"){",s,"}")})),Object.keys(lt).forEach((function(r){var n,s,f=lt[r],h=nt[r],p=t.block();p(l,".",f,"("),m(h)?(f=h.length,n=t.global.def(u,".",r),s=t.global.def(c,".",r),p(o(f,(function(t){return n+"["+t+"]"})),");",o(f,(function(t){return s+"["+t+"]="+n+"["+t+"];"})).join("")),e("if(",o(f,(function(t){return n+"["+t+"]!=="+s+"["+t+"]"})).join("||"),"){",p,"}")):(n=a.def(u,".",r),s=a.def(c,".",r),p(n,");",c,".",r,"=",n,";"),e("if(",n,"!==",s,"){",p,"}")),i(p)})),t.compile()}(),compile:function(t,e,r,n,i){var a=_();a.stats=a.link(i),Object.keys(e.static).forEach((function(t){J(a,e,t)})),Et.forEach((function(e){J(a,t,e)}));var o=M(t,e,r,n);return o.shader.program&&(o.shader.program.attributes.sort((function(t,e){return t.name<e.name?-1:1})),o.shader.program.uniforms.sort((function(t,e){return t.name<e.name?-1:1}))),function(t,e){var r=t.proc("draw",1);P(t,r),S(t,r,e.context),E(t,r,e.framebuffer),L(t,r,e),C(t,r,e.state),O(t,r,e,!1,!0);var n=e.shader.progVar.append(t,r);if(r(t.shared.gl,".useProgram(",n,".program);"),e.shader.program)q(t,r,e,e.shader.program);else{r(t.shared.vao,".setVAO(null);");var i=t.global.def("{}"),a=r.def(n,".id"),o=r.def(i,"[",a,"]");r(t.cond(o).then(o,".call(this,a0);").else(o,"=",i,"[",a,"]=",t.link((function(r){return H(q,t,e,r,1)})),"(",n,");",o,".call(this,a0);"))}0<Object.keys(e.state).length&&r(t.shared.current,".dirty=true;"),t.shared.vao&&r(t.shared.vao,".setVAO(null);")}(a,o),X(a,o),function(t,e){function r(t){return t.contextDep&&i||t.propDep}var n=t.proc("batch",2);t.batchId="0",P(t,n);var i=!1,a=!0;Object.keys(e.context).forEach((function(t){i=i||e.context[t].propDep})),i||(S(t,n,e.context),a=!1);var o=!1;if((s=e.framebuffer)?(s.propDep?i=o=!0:s.contextDep&&i&&(o=!0),o||E(t,n,s)):E(t,n,null),e.state.viewport&&e.state.viewport.propDep&&(i=!0),L(t,n,e),C(t,n,e.state,(function(t){return!r(t)})),e.profile&&r(e.profile)||O(t,n,e,!1,"a1"),e.contextDep=i,e.needsContext=a,e.needsFramebuffer=o,(a=e.shader.progVar).contextDep&&i||a.propDep)W(t,n,e,null);else if(a=a.append(t,n),n(t.shared.gl,".useProgram(",a,".program);"),e.shader.program)W(t,n,e,e.shader.program);else{n(t.shared.vao,".setVAO(null);");var s=t.global.def("{}"),l=(o=n.def(a,".id"),n.def(s,"[",o,"]"));n(t.cond(l).then(l,".call(this,a0,a1);").else(l,"=",s,"[",o,"]=",t.link((function(r){return H(W,t,e,r,2)})),"(",a,");",l,".call(this,a0,a1);"))}0<Object.keys(e.state).length&&n(t.shared.current,".dirty=true;"),t.shared.vao&&n(t.shared.vao,".setVAO(null);")}(a,o),G(a.compile(),{destroy:function(){o.shader.program.destroy()}})}}}function q(t,e){for(var r=0;r<t.length;++r)if(t[r]===e)return r;return-1}var G=function(t,e){for(var r=Object.keys(e),n=0;n<r.length;++n)t[r[n]]=e[r[n]];return t},Z=0,Y={DynamicVariable:t,define:function(e,n){return new t(e,r(n+""))},isDynamic:function(e){return"function"==typeof e&&!e._reglType||e instanceof t},unbox:function e(r,n){return"function"==typeof r?new t(0,r):"number"==typeof r||"boolean"==typeof r?new t(5,r):Array.isArray(r)?new t(6,r.map((function(t,r){return e(t,n+"["+r+"]")}))):r instanceof t?r:void 0},accessor:r},W={next:"function"==typeof requestAnimationFrame?function(t){return requestAnimationFrame(t)}:function(t){return setTimeout(t,16)},cancel:"function"==typeof cancelAnimationFrame?function(t){return cancelAnimationFrame(t)}:clearTimeout},X="undefined"!=typeof performance&&performance.now?function(){return performance.now()}:function(){return+new Date},J=l();J.zero=l();var K=function(t,e){var r=1;e.ext_texture_filter_anisotropic&&(r=t.getParameter(34047));var n=1,i=1;e.webgl_draw_buffers&&(n=t.getParameter(34852),i=t.getParameter(36063));var a=!!e.oes_texture_float;if(a){a=t.createTexture(),t.bindTexture(3553,a),t.texImage2D(3553,0,6408,1,1,0,6408,5126,null);var o=t.createFramebuffer();if(t.bindFramebuffer(36160,o),t.framebufferTexture2D(36160,36064,3553,a,0),t.bindTexture(3553,null),36053!==t.checkFramebufferStatus(36160))a=!1;else{t.viewport(0,0,1,1),t.clearColor(1,0,0,1),t.clear(16384);var s=J.allocType(5126,4);t.readPixels(0,0,1,1,6408,5126,s),t.getError()?a=!1:(t.deleteFramebuffer(o),t.deleteTexture(a),a=1===s[0]),J.freeType(s)}}return s=!0,"undefined"!=typeof navigator&&(/MSIE/.test(navigator.userAgent)||/Trident\//.test(navigator.appVersion)||/Edge/.test(navigator.userAgent))||(s=t.createTexture(),o=J.allocType(5121,36),t.activeTexture(33984),t.bindTexture(34067,s),t.texImage2D(34069,0,6408,3,3,0,6408,5121,o),J.freeType(o),t.bindTexture(34067,null),t.deleteTexture(s),s=!t.getError()),{colorBits:[t.getParameter(3410),t.getParameter(3411),t.getParameter(3412),t.getParameter(3413)],depthBits:t.getParameter(3414),stencilBits:t.getParameter(3415),subpixelBits:t.getParameter(3408),extensions:Object.keys(e).filter((function(t){return!!e[t]})),maxAnisotropic:r,maxDrawbuffers:n,maxColorAttachments:i,pointSizeDims:t.getParameter(33901),lineWidthDims:t.getParameter(33902),maxViewportDims:t.getParameter(3386),maxCombinedTextureUnits:t.getParameter(35661),maxCubeMapSize:t.getParameter(34076),maxRenderbufferSize:t.getParameter(34024),maxTextureUnits:t.getParameter(34930),maxTextureSize:t.getParameter(3379),maxAttributes:t.getParameter(34921),maxVertexUniforms:t.getParameter(36347),maxVertexTextureUnits:t.getParameter(35660),maxVaryingVectors:t.getParameter(36348),maxFragmentUniforms:t.getParameter(36349),glsl:t.getParameter(35724),renderer:t.getParameter(7937),vendor:t.getParameter(7936),version:t.getParameter(7938),readFloat:a,npotTextureCube:s}},$=function(t){return t instanceof Uint8Array||t instanceof Uint16Array||t instanceof Uint32Array||t instanceof Int8Array||t instanceof Int16Array||t instanceof Int32Array||t instanceof Float32Array||t instanceof Float64Array||t instanceof Uint8ClampedArray},Q=function(t){return Object.keys(t).map((function(e){return t[e]}))},tt={shape:function(t){for(var e=[];t.length;t=t[0])e.push(t.length);return e},flatten:function(t,e,r,n){var i=1;if(e.length)for(var a=0;a<e.length;++a)i*=e[a];else i=0;switch(r=n||J.allocType(r,i),e.length){case 0:break;case 1:for(n=e[0],e=0;e<n;++e)r[e]=t[e];break;case 2:for(n=e[0],e=e[1],a=i=0;a<n;++a)for(var o=t[a],s=0;s<e;++s)r[i++]=o[s];break;case 3:c(t,e[0],e[1],e[2],r,0);break;default:f(t,e,0,r,0)}return r}},et={"[object Int8Array]":5120,"[object Int16Array]":5122,"[object Int32Array]":5124,"[object Uint8Array]":5121,"[object Uint8ClampedArray]":5121,"[object Uint16Array]":5123,"[object Uint32Array]":5125,"[object Float32Array]":5126,"[object Float64Array]":5121,"[object ArrayBuffer]":5121},rt={int8:5120,int16:5122,int32:5124,uint8:5121,uint16:5123,uint32:5125,float:5126,float32:5126},nt={dynamic:35048,stream:35040,static:35044},it=tt.flatten,at=tt.shape,ot=[];ot[5120]=1,ot[5122]=2,ot[5124]=4,ot[5121]=1,ot[5123]=2,ot[5125]=4,ot[5126]=4;var st={points:0,point:0,lines:1,line:1,triangles:4,triangle:4,"line loop":2,"line strip":3,"triangle strip":5,"triangle fan":6},lt=new Float32Array(1),ut=new Uint32Array(lt.buffer),ct=[9984,9986,9985,9987],ft=[0,6409,6410,6407,6408],ht={};ht[6409]=ht[6406]=ht[6402]=1,ht[34041]=ht[6410]=2,ht[6407]=ht[35904]=3,ht[6408]=ht[35906]=4;var pt=x("HTMLCanvasElement"),dt=x("OffscreenCanvas"),vt=x("CanvasRenderingContext2D"),gt=x("ImageBitmap"),yt=x("HTMLImageElement"),mt=x("HTMLVideoElement"),xt=Object.keys(et).concat([pt,dt,vt,gt,yt,mt]),bt=[];bt[5121]=1,bt[5126]=4,bt[36193]=2,bt[5123]=2,bt[5125]=4;var _t=[];_t[32854]=2,_t[32855]=2,_t[36194]=2,_t[34041]=4,_t[33776]=.5,_t[33777]=.5,_t[33778]=1,_t[33779]=1,_t[35986]=.5,_t[35987]=1,_t[34798]=1,_t[35840]=.5,_t[35841]=.25,_t[35842]=.5,_t[35843]=.25,_t[36196]=.5;var wt=[];wt[32854]=2,wt[32855]=2,wt[36194]=2,wt[33189]=2,wt[36168]=1,wt[34041]=4,wt[35907]=4,wt[34836]=16,wt[34842]=8,wt[34843]=6;var Tt=function(t,e,r,n,i){function a(t){this.id=u++,this.refCount=1,this.renderbuffer=t,this.format=32854,this.height=this.width=0,i.profile&&(this.stats={size:0})}function o(e){var r=e.renderbuffer;t.bindRenderbuffer(36161,null),t.deleteRenderbuffer(r),e.renderbuffer=null,e.refCount=0,delete c[e.id],n.renderbufferCount--}var s={rgba4:32854,rgb565:36194,"rgb5 a1":32855,depth:33189,stencil:36168,"depth stencil":34041};e.ext_srgb&&(s.srgba=35907),e.ext_color_buffer_half_float&&(s.rgba16f=34842,s.rgb16f=34843),e.webgl_color_buffer_float&&(s.rgba32f=34836);var l=[];Object.keys(s).forEach((function(t){l[s[t]]=t}));var u=0,c={};return a.prototype.decRef=function(){0>=--this.refCount&&o(this)},i.profile&&(n.getTotalRenderbufferSize=function(){var t=0;return Object.keys(c).forEach((function(e){t+=c[e].stats.size})),t}),{create:function(e,r){function o(e,r){var n=0,a=0,c=32854;if("object"==typeof e&&e?("shape"in e?(n=0|(a=e.shape)[0],a=0|a[1]):("radius"in e&&(n=a=0|e.radius),"width"in e&&(n=0|e.width),"height"in e&&(a=0|e.height)),"format"in e&&(c=s[e.format])):"number"==typeof e?(n=0|e,a="number"==typeof r?0|r:n):e||(n=a=1),n!==u.width||a!==u.height||c!==u.format)return o.width=u.width=n,o.height=u.height=a,u.format=c,t.bindRenderbuffer(36161,u.renderbuffer),t.renderbufferStorage(36161,c,n,a),i.profile&&(u.stats.size=wt[u.format]*u.width*u.height),o.format=l[u.format],o}var u=new a(t.createRenderbuffer());return c[u.id]=u,n.renderbufferCount++,o(e,r),o.resize=function(e,r){var n=0|e,a=0|r||n;return n===u.width&&a===u.height||(o.width=u.width=n,o.height=u.height=a,t.bindRenderbuffer(36161,u.renderbuffer),t.renderbufferStorage(36161,u.format,n,a),i.profile&&(u.stats.size=wt[u.format]*u.width*u.height)),o},o._reglType="renderbuffer",o._renderbuffer=u,i.profile&&(o.stats=u.stats),o.destroy=function(){u.decRef()},o},clear:function(){Q(c).forEach(o)},restore:function(){Q(c).forEach((function(e){e.renderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,e.renderbuffer),t.renderbufferStorage(36161,e.format,e.width,e.height)})),t.bindRenderbuffer(36161,null)}}},kt=[];kt[6408]=4,kt[6407]=3;var At=[];At[5121]=1,At[5126]=4,At[36193]=2;var Mt=[1116352408,1899447441,-1245643825,-373957723,961987163,1508970993,-1841331548,-1424204075,-670586216,310598401,607225278,1426881987,1925078388,-2132889090,-1680079193,-1046744716,-459576895,-272742522,264347078,604807628,770255983,1249150122,1555081692,1996064986,-1740746414,-1473132947,-1341970488,-1084653625,-958395405,-710438585,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,-2117940946,-1838011259,-1564481375,-1474664885,-1035236496,-949202525,-778901479,-694614492,-200395387,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,-2067236844,-1933114872,-1866530822,-1538233109,-1090935817,-965641998],St=["x","y","z","w"],Et="blend.func blend.equation stencil.func stencil.opFront stencil.opBack sample.coverage viewport scissor.box polygonOffset.offset".split(" "),Lt={0:0,1:1,zero:0,one:1,"src color":768,"one minus src color":769,"src alpha":770,"one minus src alpha":771,"dst color":774,"one minus dst color":775,"dst alpha":772,"one minus dst alpha":773,"constant color":32769,"one minus constant color":32770,"constant alpha":32771,"one minus constant alpha":32772,"src alpha saturate":776},Ct={never:512,less:513,"<":513,equal:514,"=":514,"==":514,"===":514,lequal:515,"<=":515,greater:516,">":516,notequal:517,"!=":517,"!==":517,gequal:518,">=":518,always:519},Pt={0:0,zero:0,keep:7680,replace:7681,increment:7682,decrement:7683,"increment wrap":34055,"decrement wrap":34056,invert:5386},Ot={cw:2304,ccw:2305},It=new N(!1,!1,!1,(function(){}));return function(t){function e(){if(0===J.length)T&&T.update(),et=null;else{et=W.next(e),f();for(var t=J.length-1;0<=t;--t){var r=J[t];r&&r(O,null,0)}d.flush(),T&&T.update()}}function r(){!et&&0<J.length&&(et=W.next(e))}function n(){et&&(W.cancel(e),et=null)}function i(t){t.preventDefault(),n(),$.forEach((function(t){t()}))}function o(t){d.getError(),m.restore(),F.restore(),D.restore(),B.restore(),N.restore(),j.restore(),R.restore(),T&&T.restore(),U.procs.refresh(),r(),Q.forEach((function(t){t()}))}function s(t){function e(t,e){var r={},n={};return Object.keys(t).forEach((function(i){var a=t[i];if(Y.isDynamic(a))n[i]=Y.unbox(a,i);else{if(e&&Array.isArray(a))for(var o=0;o<a.length;++o)if(Y.isDynamic(a[o]))return void(n[i]=Y.unbox(a,i));r[i]=a}})),{dynamic:n,static:r}}var r=e(t.context||{},!0),n=e(t.uniforms||{},!0),i=e(t.attributes||{},!1);t=e(function(t){function e(t){if(t in r){var e=r[t];delete r[t],Object.keys(e).forEach((function(n){r[t+"."+n]=e[n]}))}}var r=G({},t);return delete r.uniforms,delete r.attributes,delete r.context,delete r.vao,"stencil"in r&&r.stencil.op&&(r.stencil.opBack=r.stencil.opFront=r.stencil.op,delete r.stencil.op),e("blend"),e("depth"),e("cull"),e("stencil"),e("polygonOffset"),e("scissor"),e("sample"),"vao"in t&&(r.vao=t.vao),r}(t),!1);var a={gpuTime:0,cpuTime:0,count:0},o=U.compile(t,i,n,r,a),s=o.draw,l=o.batch,u=o.scope,c=[];return G((function(t,e){var r;if("function"==typeof t)return u.call(this,null,t,0);if("function"==typeof e)if("number"==typeof t)for(r=0;r<t;++r)u.call(this,null,e,r);else{if(!Array.isArray(t))return u.call(this,t,e,0);for(r=0;r<t.length;++r)u.call(this,t[r],e,r)}else if("number"==typeof t){if(0<t)return l.call(this,function(t){for(;c.length<t;)c.push(null);return c}(0|t),0|t)}else{if(!Array.isArray(t))return s.call(this,t);if(t.length)return l.call(this,t,t.length)}}),{stats:a,destroy:function(){o.destroy()}})}function l(t,e){var r=0;U.procs.poll();var n=e.color;n&&(d.clearColor(+n[0]||0,+n[1]||0,+n[2]||0,+n[3]||0),r|=16384),"depth"in e&&(d.clearDepth(+e.depth),r|=256),"stencil"in e&&(d.clearStencil(0|e.stencil),r|=1024),d.clear(r)}function u(t){return J.push(t),r(),{cancel:function(){var e=q(J,t);J[e]=function t(){var e=q(J,t);J[e]=J[J.length-1],--J.length,0>=J.length&&n()}}}}function c(){var t=V.viewport,e=V.scissor_box;t[0]=t[1]=e[0]=e[1]=0,O.viewportWidth=O.framebufferWidth=O.drawingBufferWidth=t[2]=e[2]=d.drawingBufferWidth,O.viewportHeight=O.framebufferHeight=O.drawingBufferHeight=t[3]=e[3]=d.drawingBufferHeight}function f(){O.tick+=1,O.time=p(),c(),U.procs.poll()}function h(){B.refresh(),c(),U.procs.refresh(),T&&T.update()}function p(){return(X()-k)/1e3}if(!(t=a(t)))return null;var d=t.gl,y=d.getContextAttributes();d.isContextLost();var m=function(t,e){function r(e){var r;e=e.toLowerCase();try{r=n[e]=t.getExtension(e)}catch(t){}return!!r}for(var n={},i=0;i<e.extensions.length;++i){var a=e.extensions[i];if(!r(a))return e.onDestroy(),e.onDone('"'+a+'" extension is not supported by the current WebGL context, try upgrading your system or a different browser'),null}return e.optionalExtensions.forEach(r),{extensions:n,restore:function(){Object.keys(n).forEach((function(t){if(n[t]&&!r(t))throw Error("(regl): error restoring extension "+t)}))}}}(d,t);if(!m)return null;var x=function(){var t={"":0},e=[""];return{id:function(r){var n=t[r];return n||(n=t[r]=e.length,e.push(r),n)},str:function(t){return e[t]}}}(),b={vaoCount:0,bufferCount:0,elementsCount:0,framebufferCount:0,shaderCount:0,textureCount:0,cubeCount:0,renderbufferCount:0,maxTextureUnits:0},_=t.cachedCode||{},w=m.extensions,T=function(t,e){function r(){this.endQueryIndex=this.startQueryIndex=-1,this.sum=0,this.stats=null}function n(t,e,n){var i=o.pop()||new r;i.startQueryIndex=t,i.endQueryIndex=e,i.sum=0,i.stats=n,s.push(i)}if(!e.ext_disjoint_timer_query)return null;var i=[],a=[],o=[],s=[],l=[],u=[];return{beginQuery:function(t){var r=i.pop()||e.ext_disjoint_timer_query.createQueryEXT();e.ext_disjoint_timer_query.beginQueryEXT(35007,r),a.push(r),n(a.length-1,a.length,t)},endQuery:function(){e.ext_disjoint_timer_query.endQueryEXT(35007)},pushScopeStats:n,update:function(){var t,r;if(0!==(t=a.length)){u.length=Math.max(u.length,t+1),l.length=Math.max(l.length,t+1),l[0]=0;var n=u[0]=0;for(r=t=0;r<a.length;++r){var c=a[r];e.ext_disjoint_timer_query.getQueryObjectEXT(c,34919)?(n+=e.ext_disjoint_timer_query.getQueryObjectEXT(c,34918),i.push(c)):a[t++]=c,l[r+1]=n,u[r+1]=t}for(a.length=t,r=t=0;r<s.length;++r){var f=(n=s[r]).startQueryIndex;c=n.endQueryIndex,n.sum+=l[c]-l[f],f=u[f],(c=u[c])===f?(n.stats.gpuTime+=n.sum/1e6,o.push(n)):(n.startQueryIndex=f,n.endQueryIndex=c,s[t++]=n)}s.length=t}},getNumPendingQueries:function(){return a.length},clear:function(){i.push.apply(i,a);for(var t=0;t<i.length;t++)e.ext_disjoint_timer_query.deleteQueryEXT(i[t]);a.length=0,i.length=0},restore:function(){a.length=0,i.length=0}}}(0,w),k=X(),A=d.drawingBufferWidth,E=d.drawingBufferHeight,O={tick:0,time:0,viewportWidth:A,viewportHeight:E,framebufferWidth:A,framebufferHeight:E,drawingBufferWidth:A,drawingBufferHeight:E,pixelRatio:t.pixelRatio},I=(A={elements:null,primitive:4,count:-1,offset:0,instances:-1},K(d,w)),D=v(d,b,t,(function(t){return R.destroyBuffer(t)})),z=g(d,w,D,b),R=L(d,w,I,b,D,z,A),F=C(d,x,b,t),B=M(d,w,I,(function(){U.procs.poll()}),O,b,t),N=Tt(d,w,0,b,t),j=S(d,w,I,B,N,b),U=H(d,x,w,I,D,z,0,j,{},R,F,A,O,T,_,t),V=(x=P(d,j,U.procs.poll,O),U.next),Z=d.canvas,J=[],$=[],Q=[],tt=[t.onDestroy],et=null;Z&&(Z.addEventListener("webglcontextlost",i,!1),Z.addEventListener("webglcontextrestored",o,!1));var rt=j.setFBO=s({framebuffer:Y.define.call(null,1,"framebuffer")});return h(),y=G(s,{clear:function(t){if("framebuffer"in t)if(t.framebuffer&&"framebufferCube"===t.framebuffer_reglType)for(var e=0;6>e;++e)rt(G({framebuffer:t.framebuffer.faces[e]},t),l);else rt(t,l);else l(0,t)},prop:Y.define.bind(null,1),context:Y.define.bind(null,2),this:Y.define.bind(null,3),draw:s({}),buffer:function(t){return D.create(t,34962,!1,!1)},elements:function(t){return z.create(t,!1)},texture:B.create2D,cube:B.createCube,renderbuffer:N.create,framebuffer:j.create,framebufferCube:j.createCube,vao:R.createVAO,attributes:y,frame:u,on:function(t,e){var r;switch(t){case"frame":return u(e);case"lost":r=$;break;case"restore":r=Q;break;case"destroy":r=tt}return r.push(e),{cancel:function(){for(var t=0;t<r.length;++t)if(r[t]===e){r[t]=r[r.length-1],r.pop();break}}}},limits:I,hasExtension:function(t){return 0<=I.extensions.indexOf(t.toLowerCase())},read:x,destroy:function(){J.length=0,n(),Z&&(Z.removeEventListener("webglcontextlost",i),Z.removeEventListener("webglcontextrestored",o)),F.clear(),j.clear(),N.clear(),R.clear(),B.clear(),z.clear(),D.clear(),T&&T.clear(),tt.forEach((function(t){t()}))},_gl:d,_refresh:h,poll:function(){f(),T&&T.update()},now:p,stats:b,getCachedCode:function(){return _},preloadCachedCode:function(t){Object.entries(t).forEach((function(t){_[t[0]]=t[1]}))}}),t.onDone(null,y),y}}()},71665:function(t,e,r){var n=r(12856),i=n.Buffer;function a(t,e){for(var r in t)e[r]=t[r]}function o(t,e,r){return i(t,e,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=n:(a(n,e),e.Buffer=o),o.prototype=Object.create(i.prototype),a(i,o),o.from=function(t,e,r){if("number"==typeof t)throw new TypeError("Argument must not be a number");return i(t,e,r)},o.alloc=function(t,e,r){if("number"!=typeof t)throw new TypeError("Argument must be a number");var n=i(t);return void 0!==e?"string"==typeof r?n.fill(e,r):n.fill(e):n.fill(0),n},o.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return i(t)},o.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n.SlowBuffer(t)}},21630:function(t,e,r){t.exports=i;var n=r(15398).EventEmitter;function i(){n.call(this)}r(42018)(i,n),i.Readable=r(40410),i.Writable=r(37493),i.Duplex=r(37865),i.Transform=r(74308),i.PassThrough=r(66897),i.finished=r(12726),i.pipeline=r(10168),i.Stream=i,i.prototype.pipe=function(t,e){var r=this;function i(e){t.writable&&!1===t.write(e)&&r.pause&&r.pause()}function a(){r.readable&&r.resume&&r.resume()}r.on("data",i),t.on("drain",a),t._isStdio||e&&!1===e.end||(r.on("end",s),r.on("close",l));var o=!1;function s(){o||(o=!0,t.end())}function l(){o||(o=!0,"function"==typeof t.destroy&&t.destroy())}function u(t){if(c(),0===n.listenerCount(this,"error"))throw t}function c(){r.removeListener("data",i),t.removeListener("drain",a),r.removeListener("end",s),r.removeListener("close",l),r.removeListener("error",u),t.removeListener("error",u),r.removeListener("end",c),r.removeListener("close",c),t.removeListener("close",c)}return r.on("error",u),t.on("error",u),r.on("end",c),r.on("close",c),t.on("close",c),t.emit("pipe",r),t}},74322:function(t){"use strict";var e={};function r(t,r,n){n||(n=Error);var i=function(t){var e,n;function i(e,n,i){return t.call(this,function(t,e,n){return"string"==typeof r?r:r(t,e,n)}(e,n,i))||this}return n=t,(e=i).prototype=Object.create(n.prototype),e.prototype.constructor=e,e.__proto__=n,i}(n);i.prototype.name=n.name,i.prototype.code=t,e[t]=i}function n(t,e){if(Array.isArray(t)){var r=t.length;return t=t.map((function(t){return String(t)})),r>2?"one of ".concat(e," ").concat(t.slice(0,r-1).join(", "),", or ")+t[r-1]:2===r?"one of ".concat(e," ").concat(t[0]," or ").concat(t[1]):"of ".concat(e," ").concat(t[0])}return"of ".concat(e," ").concat(String(t))}r("ERR_INVALID_OPT_VALUE",(function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'}),TypeError),r("ERR_INVALID_ARG_TYPE",(function(t,e,r){var i,a,o,s,l;if("string"==typeof e&&(a="not ",e.substr(0,4)===a)?(i="must not be",e=e.replace(/^not /,"")):i="must be",function(t,e,r){return(void 0===r||r>t.length)&&(r=t.length),t.substring(r-9,r)===e}(t," argument"))o="The ".concat(t," ").concat(i," ").concat(n(e,"type"));else{var u=("number"!=typeof l&&(l=0),l+1>(s=t).length||-1===s.indexOf(".",l)?"argument":"property");o='The "'.concat(t,'" ').concat(u," ").concat(i," ").concat(n(e,"type"))}return o+". Received type ".concat(typeof r)}),TypeError),r("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),r("ERR_METHOD_NOT_IMPLEMENTED",(function(t){return"The "+t+" method is not implemented"})),r("ERR_STREAM_PREMATURE_CLOSE","Premature close"),r("ERR_STREAM_DESTROYED",(function(t){return"Cannot call "+t+" after a stream was destroyed"})),r("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),r("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),r("ERR_STREAM_WRITE_AFTER_END","write after end"),r("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),r("ERR_UNKNOWN_ENCODING",(function(t){return"Unknown encoding: "+t}),TypeError),r("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),t.exports.q=e},37865:function(t,e,r){"use strict";var n=r(90386),i=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};t.exports=c;var a=r(40410),o=r(37493);r(42018)(c,a);for(var s=i(o.prototype),l=0;l<s.length;l++){var u=s[l];c.prototype[u]||(c.prototype[u]=o.prototype[u])}function c(t){if(!(this instanceof c))return new c(t);a.call(this,t),o.call(this,t),this.allowHalfOpen=!0,t&&(!1===t.readable&&(this.readable=!1),!1===t.writable&&(this.writable=!1),!1===t.allowHalfOpen&&(this.allowHalfOpen=!1,this.once("end",f)))}function f(){this._writableState.ended||n.nextTick(h,this)}function h(t){t.end()}Object.defineProperty(c.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(c.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(c.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(c.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&this._readableState.destroyed&&this._writableState.destroyed},set:function(t){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=t,this._writableState.destroyed=t)}})},66897:function(t,e,r){"use strict";t.exports=i;var n=r(74308);function i(t){if(!(this instanceof i))return new i(t);n.call(this,t)}r(42018)(i,n),i.prototype._transform=function(t,e,r){r(null,t)}},40410:function(t,e,r){"use strict";var n,i=r(90386);t.exports=A,A.ReadableState=k,r(15398).EventEmitter;var a,o=function(t,e){return t.listeners(e).length},s=r(71405),l=r(12856).Buffer,u=r.g.Uint8Array||function(){},c=r(40964);a=c&&c.debuglog?c.debuglog("stream"):function(){};var f,h,p,d=r(31125),v=r(65756),g=r(56306).getHighWaterMark,y=r(74322).q,m=y.ERR_INVALID_ARG_TYPE,x=y.ERR_STREAM_PUSH_AFTER_EOF,b=y.ERR_METHOD_NOT_IMPLEMENTED,_=y.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;r(42018)(A,s);var w=v.errorOrDestroy,T=["error","close","destroy","pause","resume"];function k(t,e,i){n=n||r(37865),t=t||{},"boolean"!=typeof i&&(i=e instanceof n),this.objectMode=!!t.objectMode,i&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=g(this,t,"readableHighWaterMark",i),this.buffer=new d,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==t.emitClose,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(f||(f=r(68019).s),this.decoder=new f(t.encoding),this.encoding=t.encoding)}function A(t){if(n=n||r(37865),!(this instanceof A))return new A(t);var e=this instanceof n;this._readableState=new k(t,this,e),this.readable=!0,t&&("function"==typeof t.read&&(this._read=t.read),"function"==typeof t.destroy&&(this._destroy=t.destroy)),s.call(this)}function M(t,e,r,n,i){a("readableAddChunk",e);var o,s=t._readableState;if(null===e)s.reading=!1,function(t,e){if(a("onEofChunk"),!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?C(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,P(t)))}}(t,s);else if(i||(o=function(t,e){var r,n;return n=e,l.isBuffer(n)||n instanceof u||"string"==typeof e||void 0===e||t.objectMode||(r=new m("chunk",["string","Buffer","Uint8Array"],e)),r}(s,e)),o)w(t,o);else if(s.objectMode||e&&e.length>0)if("string"==typeof e||s.objectMode||Object.getPrototypeOf(e)===l.prototype||(e=function(t){return l.from(t)}(e)),n)s.endEmitted?w(t,new _):S(t,s,e,!0);else if(s.ended)w(t,new x);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!r?(e=s.decoder.write(e),s.objectMode||0!==e.length?S(t,s,e,!1):O(t,s)):S(t,s,e,!1)}else n||(s.reading=!1,O(t,s));return!s.ended&&(s.length<s.highWaterMark||0===s.length)}function S(t,e,r,n){e.flowing&&0===e.length&&!e.sync?(e.awaitDrain=0,t.emit("data",r)):(e.length+=e.objectMode?1:r.length,n?e.buffer.unshift(r):e.buffer.push(r),e.needReadable&&C(t)),O(t,e)}Object.defineProperty(A.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(t){this._readableState&&(this._readableState.destroyed=t)}}),A.prototype.destroy=v.destroy,A.prototype._undestroy=v.undestroy,A.prototype._destroy=function(t,e){e(t)},A.prototype.push=function(t,e){var r,n=this._readableState;return n.objectMode?r=!0:"string"==typeof t&&((e=e||n.defaultEncoding)!==n.encoding&&(t=l.from(t,e),e=""),r=!0),M(this,t,e,!1,r)},A.prototype.unshift=function(t){return M(this,t,null,!0,!1)},A.prototype.isPaused=function(){return!1===this._readableState.flowing},A.prototype.setEncoding=function(t){f||(f=r(68019).s);var e=new f(t);this._readableState.decoder=e,this._readableState.encoding=this._readableState.decoder.encoding;for(var n=this._readableState.buffer.head,i="";null!==n;)i+=e.write(n.data),n=n.next;return this._readableState.buffer.clear(),""!==i&&this._readableState.buffer.push(i),this._readableState.length=i.length,this};var E=1073741824;function L(t,e){return t<=0||0===e.length&&e.ended?0:e.objectMode?1:t!=t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=function(t){return t>=E?t=E:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function C(t){var e=t._readableState;a("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(a("emitReadable",e.flowing),e.emittedReadable=!0,i.nextTick(P,t))}function P(t){var e=t._readableState;a("emitReadable_",e.destroyed,e.length,e.ended),e.destroyed||!e.length&&!e.ended||(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,F(t)}function O(t,e){e.readingMore||(e.readingMore=!0,i.nextTick(I,t,e))}function I(t,e){for(;!e.reading&&!e.ended&&(e.length<e.highWaterMark||e.flowing&&0===e.length);){var r=e.length;if(a("maybeReadMore read 0"),t.read(0),r===e.length)break}e.readingMore=!1}function D(t){var e=t._readableState;e.readableListening=t.listenerCount("readable")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount("data")>0&&t.resume()}function z(t){a("readable nexttick read 0"),t.read(0)}function R(t,e){a("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),F(t),e.flowing&&!e.reading&&t.read(0)}function F(t){var e=t._readableState;for(a("flow",e.flowing);e.flowing&&null!==t.read(););}function B(t,e){return 0===e.length?null:(e.objectMode?r=e.buffer.shift():!t||t>=e.length?(r=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.first():e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r);var r}function N(t){var e=t._readableState;a("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,i.nextTick(j,e,t))}function j(t,e){if(a("endReadableNT",t.endEmitted,t.length),!t.endEmitted&&0===t.length&&(t.endEmitted=!0,e.readable=!1,e.emit("end"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}function U(t,e){for(var r=0,n=t.length;r<n;r++)if(t[r]===e)return r;return-1}A.prototype.read=function(t){a("read",t),t=parseInt(t,10);var e=this._readableState,r=t;if(0!==t&&(e.emittedReadable=!1),0===t&&e.needReadable&&((0!==e.highWaterMark?e.length>=e.highWaterMark:e.length>0)||e.ended))return a("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?N(this):C(this),null;if(0===(t=L(t,e))&&e.ended)return 0===e.length&&N(this),null;var n,i=e.needReadable;return a("need readable",i),(0===e.length||e.length-t<e.highWaterMark)&&a("length less than watermark",i=!0),e.ended||e.reading?a("reading or ended",i=!1):i&&(a("do read"),e.reading=!0,e.sync=!0,0===e.length&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(t=L(r,e))),null===(n=t>0?B(t,e):null)?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),0===e.length&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&N(this)),null!==n&&this.emit("data",n),n},A.prototype._read=function(t){w(this,new b("_read()"))},A.prototype.pipe=function(t,e){var r=this,n=this._readableState;switch(n.pipesCount){case 0:n.pipes=t;break;case 1:n.pipes=[n.pipes,t];break;default:n.pipes.push(t)}n.pipesCount+=1,a("pipe count=%d opts=%j",n.pipesCount,e);var s=e&&!1===e.end||t===i.stdout||t===i.stderr?v:l;function l(){a("onend"),t.end()}n.endEmitted?i.nextTick(s):r.once("end",s),t.on("unpipe",(function e(i,o){a("onunpipe"),i===r&&o&&!1===o.hasUnpiped&&(o.hasUnpiped=!0,a("cleanup"),t.removeListener("close",p),t.removeListener("finish",d),t.removeListener("drain",u),t.removeListener("error",h),t.removeListener("unpipe",e),r.removeListener("end",l),r.removeListener("end",v),r.removeListener("data",f),c=!0,!n.awaitDrain||t._writableState&&!t._writableState.needDrain||u())}));var u=function(t){return function(){var e=t._readableState;a("pipeOnDrain",e.awaitDrain),e.awaitDrain&&e.awaitDrain--,0===e.awaitDrain&&o(t,"data")&&(e.flowing=!0,F(t))}}(r);t.on("drain",u);var c=!1;function f(e){a("ondata");var i=t.write(e);a("dest.write",i),!1===i&&((1===n.pipesCount&&n.pipes===t||n.pipesCount>1&&-1!==U(n.pipes,t))&&!c&&(a("false write response, pause",n.awaitDrain),n.awaitDrain++),r.pause())}function h(e){a("onerror",e),v(),t.removeListener("error",h),0===o(t,"error")&&w(t,e)}function p(){t.removeListener("finish",d),v()}function d(){a("onfinish"),t.removeListener("close",p),v()}function v(){a("unpipe"),r.unpipe(t)}return r.on("data",f),function(t,e,r){if("function"==typeof t.prependListener)return t.prependListener(e,r);t._events&&t._events[e]?Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]:t.on(e,r)}(t,"error",h),t.once("close",p),t.once("finish",d),t.emit("pipe",r),n.flowing||(a("pipe resume"),r.resume()),t},A.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes||(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r)),this;if(!t){var n=e.pipes,i=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var a=0;a<i;a++)n[a].emit("unpipe",this,{hasUnpiped:!1});return this}var o=U(e.pipes,t);return-1===o||(e.pipes.splice(o,1),e.pipesCount-=1,1===e.pipesCount&&(e.pipes=e.pipes[0]),t.emit("unpipe",this,r)),this},A.prototype.on=function(t,e){var r=s.prototype.on.call(this,t,e),n=this._readableState;return"data"===t?(n.readableListening=this.listenerCount("readable")>0,!1!==n.flowing&&this.resume()):"readable"===t&&(n.endEmitted||n.readableListening||(n.readableListening=n.needReadable=!0,n.flowing=!1,n.emittedReadable=!1,a("on readable",n.length,n.reading),n.length?C(this):n.reading||i.nextTick(z,this))),r},A.prototype.addListener=A.prototype.on,A.prototype.removeListener=function(t,e){var r=s.prototype.removeListener.call(this,t,e);return"readable"===t&&i.nextTick(D,this),r},A.prototype.removeAllListeners=function(t){var e=s.prototype.removeAllListeners.apply(this,arguments);return"readable"!==t&&void 0!==t||i.nextTick(D,this),e},A.prototype.resume=function(){var t=this._readableState;return t.flowing||(a("resume"),t.flowing=!t.readableListening,function(t,e){e.resumeScheduled||(e.resumeScheduled=!0,i.nextTick(R,t,e))}(this,t)),t.paused=!1,this},A.prototype.pause=function(){return a("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(a("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},A.prototype.wrap=function(t){var e=this,r=this._readableState,n=!1;for(var i in t.on("end",(function(){if(a("wrapped end"),r.decoder&&!r.ended){var t=r.decoder.end();t&&t.length&&e.push(t)}e.push(null)})),t.on("data",(function(i){a("wrapped data"),r.decoder&&(i=r.decoder.write(i)),r.objectMode&&null==i||(r.objectMode||i&&i.length)&&(e.push(i)||(n=!0,t.pause()))})),t)void 0===this[i]&&"function"==typeof t[i]&&(this[i]=function(e){return function(){return t[e].apply(t,arguments)}}(i));for(var o=0;o<T.length;o++)t.on(T[o],this.emit.bind(this,T[o]));return this._read=function(e){a("wrapped _read",e),n&&(n=!1,t.resume())},this},"function"==typeof Symbol&&(A.prototype[Symbol.asyncIterator]=function(){return void 0===h&&(h=r(68221)),h(this)}),Object.defineProperty(A.prototype,"readableHighWaterMark",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),Object.defineProperty(A.prototype,"readableBuffer",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}}),Object.defineProperty(A.prototype,"readableFlowing",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(t){this._readableState&&(this._readableState.flowing=t)}}),A._fromList=B,Object.defineProperty(A.prototype,"readableLength",{enumerable:!1,get:function(){return this._readableState.length}}),"function"==typeof Symbol&&(A.from=function(t,e){return void 0===p&&(p=r(31748)),p(A,t,e)})},74308:function(t,e,r){"use strict";t.exports=c;var n=r(74322).q,i=n.ERR_METHOD_NOT_IMPLEMENTED,a=n.ERR_MULTIPLE_CALLBACK,o=n.ERR_TRANSFORM_ALREADY_TRANSFORMING,s=n.ERR_TRANSFORM_WITH_LENGTH_0,l=r(37865);function u(t,e){var r=this._transformState;r.transforming=!1;var n=r.writecb;if(null===n)return this.emit("error",new a);r.writechunk=null,r.writecb=null,null!=e&&this.push(e),n(t);var i=this._readableState;i.reading=!1,(i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}function c(t){if(!(this instanceof c))return new c(t);l.call(this,t),this._transformState={afterTransform:u.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,t&&("function"==typeof t.transform&&(this._transform=t.transform),"function"==typeof t.flush&&(this._flush=t.flush)),this.on("prefinish",f)}function f(){var t=this;"function"!=typeof this._flush||this._readableState.destroyed?h(this,null,null):this._flush((function(e,r){h(t,e,r)}))}function h(t,e,r){if(e)return t.emit("error",e);if(null!=r&&t.push(r),t._writableState.length)throw new s;if(t._transformState.transforming)throw new o;return t.push(null)}r(42018)(c,l),c.prototype.push=function(t,e){return this._transformState.needTransform=!1,l.prototype.push.call(this,t,e)},c.prototype._transform=function(t,e,r){r(new i("_transform()"))},c.prototype._write=function(t,e,r){var n=this._transformState;if(n.writecb=r,n.writechunk=t,n.writeencoding=e,!n.transforming){var i=this._readableState;(n.needTransform||i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}},c.prototype._read=function(t){var e=this._transformState;null===e.writechunk||e.transforming?e.needTransform=!0:(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform))},c.prototype._destroy=function(t,e){l.prototype._destroy.call(this,t,(function(t){e(t)}))}},37493:function(t,e,r){"use strict";var n,i=r(90386);function a(t){var e=this;this.next=null,this.entry=null,this.finish=function(){!function(t,e,r){var n=t.entry;for(t.entry=null;n;){var i=n.callback;e.pendingcb--,i(undefined),n=n.next}e.corkedRequestsFree.next=t}(e,t)}}t.exports=A,A.WritableState=k;var o,s={deprecate:r(20588)},l=r(71405),u=r(12856).Buffer,c=r.g.Uint8Array||function(){},f=r(65756),h=r(56306).getHighWaterMark,p=r(74322).q,d=p.ERR_INVALID_ARG_TYPE,v=p.ERR_METHOD_NOT_IMPLEMENTED,g=p.ERR_MULTIPLE_CALLBACK,y=p.ERR_STREAM_CANNOT_PIPE,m=p.ERR_STREAM_DESTROYED,x=p.ERR_STREAM_NULL_VALUES,b=p.ERR_STREAM_WRITE_AFTER_END,_=p.ERR_UNKNOWN_ENCODING,w=f.errorOrDestroy;function T(){}function k(t,e,o){n=n||r(37865),t=t||{},"boolean"!=typeof o&&(o=e instanceof n),this.objectMode=!!t.objectMode,o&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=h(this,t,"writableHighWaterMark",o),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var s=!1===t.decodeStrings;this.decodeStrings=!s,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(t){!function(t,e){var r=t._writableState,n=r.sync,a=r.writecb;if("function"!=typeof a)throw new g;if(function(t){t.writing=!1,t.writecb=null,t.length-=t.writelen,t.writelen=0}(r),e)!function(t,e,r,n,a){--e.pendingcb,r?(i.nextTick(a,n),i.nextTick(P,t,e),t._writableState.errorEmitted=!0,w(t,n)):(a(n),t._writableState.errorEmitted=!0,w(t,n),P(t,e))}(t,r,n,e,a);else{var o=L(r)||t.destroyed;o||r.corked||r.bufferProcessing||!r.bufferedRequest||E(t,r),n?i.nextTick(S,t,r,o,a):S(t,r,o,a)}}(e,t)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==t.emitClose,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function A(t){var e=this instanceof(n=n||r(37865));if(!e&&!o.call(A,this))return new A(t);this._writableState=new k(t,this,e),this.writable=!0,t&&("function"==typeof t.write&&(this._write=t.write),"function"==typeof t.writev&&(this._writev=t.writev),"function"==typeof t.destroy&&(this._destroy=t.destroy),"function"==typeof t.final&&(this._final=t.final)),l.call(this)}function M(t,e,r,n,i,a,o){e.writelen=n,e.writecb=o,e.writing=!0,e.sync=!0,e.destroyed?e.onwrite(new m("write")):r?t._writev(i,e.onwrite):t._write(i,a,e.onwrite),e.sync=!1}function S(t,e,r,n){r||function(t,e){0===e.length&&e.needDrain&&(e.needDrain=!1,t.emit("drain"))}(t,e),e.pendingcb--,n(),P(t,e)}function E(t,e){e.bufferProcessing=!0;var r=e.bufferedRequest;if(t._writev&&r&&r.next){var n=e.bufferedRequestCount,i=new Array(n),o=e.corkedRequestsFree;o.entry=r;for(var s=0,l=!0;r;)i[s]=r,r.isBuf||(l=!1),r=r.next,s+=1;i.allBuffers=l,M(t,e,!0,e.length,i,"",o.finish),e.pendingcb++,e.lastBufferedRequest=null,o.next?(e.corkedRequestsFree=o.next,o.next=null):e.corkedRequestsFree=new a(e),e.bufferedRequestCount=0}else{for(;r;){var u=r.chunk,c=r.encoding,f=r.callback;if(M(t,e,!1,e.objectMode?1:u.length,u,c,f),r=r.next,e.bufferedRequestCount--,e.writing)break}null===r&&(e.lastBufferedRequest=null)}e.bufferedRequest=r,e.bufferProcessing=!1}function L(t){return t.ending&&0===t.length&&null===t.bufferedRequest&&!t.finished&&!t.writing}function C(t,e){t._final((function(r){e.pendingcb--,r&&w(t,r),e.prefinished=!0,t.emit("prefinish"),P(t,e)}))}function P(t,e){var r=L(e);if(r&&(function(t,e){e.prefinished||e.finalCalled||("function"!=typeof t._final||e.destroyed?(e.prefinished=!0,t.emit("prefinish")):(e.pendingcb++,e.finalCalled=!0,i.nextTick(C,t,e)))}(t,e),0===e.pendingcb&&(e.finished=!0,t.emit("finish"),e.autoDestroy))){var n=t._readableState;(!n||n.autoDestroy&&n.endEmitted)&&t.destroy()}return r}r(42018)(A,l),k.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(k.prototype,"buffer",{get:s.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(t){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(o=Function.prototype[Symbol.hasInstance],Object.defineProperty(A,Symbol.hasInstance,{value:function(t){return!!o.call(this,t)||this===A&&t&&t._writableState instanceof k}})):o=function(t){return t instanceof this},A.prototype.pipe=function(){w(this,new y)},A.prototype.write=function(t,e,r){var n,a=this._writableState,o=!1,s=!a.objectMode&&(n=t,u.isBuffer(n)||n instanceof c);return s&&!u.isBuffer(t)&&(t=function(t){return u.from(t)}(t)),"function"==typeof e&&(r=e,e=null),s?e="buffer":e||(e=a.defaultEncoding),"function"!=typeof r&&(r=T),a.ending?function(t,e){var r=new b;w(t,r),i.nextTick(e,r)}(this,r):(s||function(t,e,r,n){var a;return null===r?a=new x:"string"==typeof r||e.objectMode||(a=new d("chunk",["string","Buffer"],r)),!a||(w(t,a),i.nextTick(n,a),!1)}(this,a,t,r))&&(a.pendingcb++,o=function(t,e,r,n,i,a){if(!r){var o=function(t,e,r){return t.objectMode||!1===t.decodeStrings||"string"!=typeof e||(e=u.from(e,r)),e}(e,n,i);n!==o&&(r=!0,i="buffer",n=o)}var s=e.objectMode?1:n.length;e.length+=s;var l=e.length<e.highWaterMark;if(l||(e.needDrain=!0),e.writing||e.corked){var c=e.lastBufferedRequest;e.lastBufferedRequest={chunk:n,encoding:i,isBuf:r,callback:a,next:null},c?c.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else M(t,e,!1,s,n,i,a);return l}(this,a,s,t,e,r)),o},A.prototype.cork=function(){this._writableState.corked++},A.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,t.writing||t.corked||t.bufferProcessing||!t.bufferedRequest||E(this,t))},A.prototype.setDefaultEncoding=function(t){if("string"==typeof t&&(t=t.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((t+"").toLowerCase())>-1))throw new _(t);return this._writableState.defaultEncoding=t,this},Object.defineProperty(A.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(A.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),A.prototype._write=function(t,e,r){r(new v("_write()"))},A.prototype._writev=null,A.prototype.end=function(t,e,r){var n=this._writableState;return"function"==typeof t?(r=t,t=null,e=null):"function"==typeof e&&(r=e,e=null),null!=t&&this.write(t,e),n.corked&&(n.corked=1,this.uncork()),n.ending||function(t,e,r){e.ending=!0,P(t,e),r&&(e.finished?i.nextTick(r):t.once("finish",r)),e.ended=!0,t.writable=!1}(this,n,r),this},Object.defineProperty(A.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(A.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(t){this._writableState&&(this._writableState.destroyed=t)}}),A.prototype.destroy=f.destroy,A.prototype._undestroy=f.undestroy,A.prototype._destroy=function(t,e){e(t)}},68221:function(t,e,r){"use strict";var n,i=r(90386);function a(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var o=r(12726),s=Symbol("lastResolve"),l=Symbol("lastReject"),u=Symbol("error"),c=Symbol("ended"),f=Symbol("lastPromise"),h=Symbol("handlePromise"),p=Symbol("stream");function d(t,e){return{value:t,done:e}}function v(t){var e=t[s];if(null!==e){var r=t[p].read();null!==r&&(t[f]=null,t[s]=null,t[l]=null,e(d(r,!1)))}}function g(t){i.nextTick(v,t)}var y=Object.getPrototypeOf((function(){})),m=Object.setPrototypeOf((a(n={get stream(){return this[p]},next:function(){var t=this,e=this[u];if(null!==e)return Promise.reject(e);if(this[c])return Promise.resolve(d(void 0,!0));if(this[p].destroyed)return new Promise((function(e,r){i.nextTick((function(){t[u]?r(t[u]):e(d(void 0,!0))}))}));var r,n=this[f];if(n)r=new Promise(function(t,e){return function(r,n){t.then((function(){e[c]?r(d(void 0,!0)):e[h](r,n)}),n)}}(n,this));else{var a=this[p].read();if(null!==a)return Promise.resolve(d(a,!1));r=new Promise(this[h])}return this[f]=r,r}},Symbol.asyncIterator,(function(){return this})),a(n,"return",(function(){var t=this;return new Promise((function(e,r){t[p].destroy(null,(function(t){t?r(t):e(d(void 0,!0))}))}))})),n),y);t.exports=function(t){var e,r=Object.create(m,(a(e={},p,{value:t,writable:!0}),a(e,s,{value:null,writable:!0}),a(e,l,{value:null,writable:!0}),a(e,u,{value:null,writable:!0}),a(e,c,{value:t._readableState.endEmitted,writable:!0}),a(e,h,{value:function(t,e){var n=r[p].read();n?(r[f]=null,r[s]=null,r[l]=null,t(d(n,!1))):(r[s]=t,r[l]=e)},writable:!0}),e));return r[f]=null,o(t,(function(t){if(t&&"ERR_STREAM_PREMATURE_CLOSE"!==t.code){var e=r[l];return null!==e&&(r[f]=null,r[s]=null,r[l]=null,e(t)),void(r[u]=t)}var n=r[s];null!==n&&(r[f]=null,r[s]=null,r[l]=null,n(d(void 0,!0))),r[c]=!0})),t.on("readable",g.bind(null,r)),r}},31125:function(t,e,r){"use strict";function n(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function i(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var o=r(12856).Buffer,s=r(69862).inspect,l=s&&s.custom||"inspect";t.exports=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.head=null,this.tail=null,this.length=0}var e,r;return e=t,r=[{key:"push",value:function(t){var e={data:t,next:null};this.length>0?this.tail.next=e:this.head=e,this.tail=e,++this.length}},{key:"unshift",value:function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length}},{key:"shift",value:function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(t){if(0===this.length)return"";for(var e=this.head,r=""+e.data;e=e.next;)r+=t+e.data;return r}},{key:"concat",value:function(t){if(0===this.length)return o.alloc(0);for(var e,r,n,i=o.allocUnsafe(t>>>0),a=this.head,s=0;a;)e=a.data,r=i,n=s,o.prototype.copy.call(e,r,n),s+=a.data.length,a=a.next;return i}},{key:"consume",value:function(t,e){var r;return t<this.head.data.length?(r=this.head.data.slice(0,t),this.head.data=this.head.data.slice(t)):r=t===this.head.data.length?this.shift():e?this._getString(t):this._getBuffer(t),r}},{key:"first",value:function(){return this.head.data}},{key:"_getString",value:function(t){var e=this.head,r=1,n=e.data;for(t-=n.length;e=e.next;){var i=e.data,a=t>i.length?i.length:t;if(a===i.length?n+=i:n+=i.slice(0,t),0==(t-=a)){a===i.length?(++r,e.next?this.head=e.next:this.head=this.tail=null):(this.head=e,e.data=i.slice(a));break}++r}return this.length-=r,n}},{key:"_getBuffer",value:function(t){var e=o.allocUnsafe(t),r=this.head,n=1;for(r.data.copy(e),t-=r.data.length;r=r.next;){var i=r.data,a=t>i.length?i.length:t;if(i.copy(e,e.length-t,0,a),0==(t-=a)){a===i.length?(++n,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=i.slice(a));break}++n}return this.length-=n,e}},{key:l,value:function(t,e){return s(this,function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?n(Object(r),!0).forEach((function(e){i(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}({},e,{depth:0,customInspect:!1}))}}],r&&a(e.prototype,r),t}()},65756:function(t,e,r){"use strict";var n=r(90386);function i(t,e){o(t,e),a(t)}function a(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function o(t,e){t.emit("error",e)}t.exports={destroy:function(t,e){var r=this,s=this._readableState&&this._readableState.destroyed,l=this._writableState&&this._writableState.destroyed;return s||l?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,n.nextTick(o,this,t)):n.nextTick(o,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,(function(t){!e&&t?r._writableState?r._writableState.errorEmitted?n.nextTick(a,r):(r._writableState.errorEmitted=!0,n.nextTick(i,r,t)):n.nextTick(i,r,t):e?(n.nextTick(a,r),e(t)):n.nextTick(a,r)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(t,e){var r=t._readableState,n=t._writableState;r&&r.autoDestroy||n&&n.autoDestroy?t.destroy(e):t.emit("error",e)}}},12726:function(t,e,r){"use strict";var n=r(74322).q.ERR_STREAM_PREMATURE_CLOSE;function i(){}t.exports=function t(e,r,a){if("function"==typeof r)return t(e,null,r);r||(r={}),a=function(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];t.apply(this,n)}}}(a||i);var o=r.readable||!1!==r.readable&&e.readable,s=r.writable||!1!==r.writable&&e.writable,l=function(){e.writable||c()},u=e._writableState&&e._writableState.finished,c=function(){s=!1,u=!0,o||a.call(e)},f=e._readableState&&e._readableState.endEmitted,h=function(){o=!1,f=!0,s||a.call(e)},p=function(t){a.call(e,t)},d=function(){var t;return o&&!f?(e._readableState&&e._readableState.ended||(t=new n),a.call(e,t)):s&&!u?(e._writableState&&e._writableState.ended||(t=new n),a.call(e,t)):void 0},v=function(){e.req.on("finish",c)};return function(t){return t.setHeader&&"function"==typeof t.abort}(e)?(e.on("complete",c),e.on("abort",d),e.req?v():e.on("request",v)):s&&!e._writableState&&(e.on("end",l),e.on("close",l)),e.on("end",h),e.on("finish",c),!1!==r.error&&e.on("error",p),e.on("close",d),function(){e.removeListener("complete",c),e.removeListener("abort",d),e.removeListener("request",v),e.req&&e.req.removeListener("finish",c),e.removeListener("end",l),e.removeListener("close",l),e.removeListener("finish",c),e.removeListener("end",h),e.removeListener("error",p),e.removeListener("close",d)}}},31748:function(t){t.exports=function(){throw new Error("Readable.from is not available in the browser")}},10168:function(t,e,r){"use strict";var n,i=r(74322).q,a=i.ERR_MISSING_ARGS,o=i.ERR_STREAM_DESTROYED;function s(t){if(t)throw t}function l(t){t()}function u(t,e){return t.pipe(e)}t.exports=function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];var c,f=function(t){return t.length?"function"!=typeof t[t.length-1]?s:t.pop():s}(e);if(Array.isArray(e[0])&&(e=e[0]),e.length<2)throw new a("streams");var h=e.map((function(t,i){var a=i<e.length-1;return function(t,e,i,a){a=function(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}(a);var s=!1;t.on("close",(function(){s=!0})),void 0===n&&(n=r(12726)),n(t,{readable:e,writable:i},(function(t){if(t)return a(t);s=!0,a()}));var l=!1;return function(e){if(!s&&!l)return l=!0,function(t){return t.setHeader&&"function"==typeof t.abort}(t)?t.abort():"function"==typeof t.destroy?t.destroy():void a(e||new o("pipe"))}}(t,a,i>0,(function(t){c||(c=t),t&&h.forEach(l),a||(h.forEach(l),f(c))}))}));return e.reduce(u)}},56306:function(t,e,r){"use strict";var n=r(74322).q.ERR_INVALID_OPT_VALUE;t.exports={getHighWaterMark:function(t,e,r,i){var a=function(t,e,r){return null!=t.highWaterMark?t.highWaterMark:e?t[r]:null}(e,i,r);if(null!=a){if(!isFinite(a)||Math.floor(a)!==a||a<0)throw new n(i?r:"highWaterMark",a);return Math.floor(a)}return t.objectMode?16:16384}}},71405:function(t,e,r){t.exports=r(15398).EventEmitter},68019:function(t,e,r){"use strict";var n=r(71665).Buffer,i=n.isEncoding||function(t){switch((t=""+t)&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function a(t){var e;switch(this.encoding=function(t){var e=function(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}(t);if("string"!=typeof e&&(n.isEncoding===i||!i(t)))throw new Error("Unknown encoding: "+t);return e||t}(t),this.encoding){case"utf16le":this.text=l,this.end=u,e=4;break;case"utf8":this.fillLast=s,e=4;break;case"base64":this.text=c,this.end=f,e=3;break;default:return this.write=h,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(e)}function o(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function s(t){var e=this.lastTotal-this.lastNeed,r=function(t,e,r){if(128!=(192&e[0]))return t.lastNeed=0,"�";if(t.lastNeed>1&&e.length>1){if(128!=(192&e[1]))return t.lastNeed=1,"�";if(t.lastNeed>2&&e.length>2&&128!=(192&e[2]))return t.lastNeed=2,"�"}}(this,t);return void 0!==r?r:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-=t.length))}function l(t,e){if((t.length-e)%2==0){var r=t.toString("utf16le",e);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function u(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function c(t,e){var r=(t.length-e)%3;return 0===r?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function f(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function h(t){return t.toString(this.encoding)}function p(t){return t&&t.length?this.write(t):""}e.s=a,a.prototype.write=function(t){if(0===t.length)return"";var e,r;if(this.lastNeed){if(void 0===(e=this.fillLast(t)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r<t.length?e?e+this.text(t,r):this.text(t,r):e||""},a.prototype.end=function(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"�":e},a.prototype.text=function(t,e){var r=function(t,e,r){var n=e.length-1;if(n<r)return 0;var i=o(e[n]);return i>=0?(i>0&&(t.lastNeed=i-1),i):--n<r||-2===i?0:(i=o(e[n]))>=0?(i>0&&(t.lastNeed=i-2),i):--n<r||-2===i?0:(i=o(e[n]))>=0?(i>0&&(2===i?i=0:t.lastNeed=i-3),i):0}(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var n=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,n),t.toString("utf8",e,n)},a.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length}},90715:function(t,e,r){var n=r(32791),i=r(41633)("stream-parser");t.exports=function(t){var e=t&&"function"==typeof t._transform,r=t&&"function"==typeof t._write;if(!e&&!r)throw new Error("must pass a Writable or Transform stream in");i("extending Parser into stream"),t._bytes=c,t._skipBytes=f,e&&(t._passthrough=h),e?t._transform=d:t._write=p};var a=-1,o=0,s=1,l=2;function u(t){i("initializing parser stream"),t._parserBytesLeft=0,t._parserBuffers=[],t._parserBuffered=0,t._parserState=a,t._parserCallback=null,"function"==typeof t.push&&(t._parserOutput=t.push.bind(t)),t._parserInit=!0}function c(t,e){n(!this._parserCallback,'there is already a "callback" set!'),n(isFinite(t)&&t>0,'can only buffer a finite number of bytes > 0, got "'+t+'"'),this._parserInit||u(this),i("buffering %o bytes",t),this._parserBytesLeft=t,this._parserCallback=e,this._parserState=o}function f(t,e){n(!this._parserCallback,'there is already a "callback" set!'),n(t>0,'can only skip > 0 bytes, got "'+t+'"'),this._parserInit||u(this),i("skipping %o bytes",t),this._parserBytesLeft=t,this._parserCallback=e,this._parserState=s}function h(t,e){n(!this._parserCallback,'There is already a "callback" set!'),n(t>0,'can only pass through > 0 bytes, got "'+t+'"'),this._parserInit||u(this),i("passing through %o bytes",t),this._parserBytesLeft=t,this._parserCallback=e,this._parserState=l}function p(t,e,r){this._parserInit||u(this),i("write(%o bytes)",t.length),"function"==typeof e&&(r=e),g(this,t,null,r)}function d(t,e,r){this._parserInit||u(this),i("transform(%o bytes)",t.length),"function"!=typeof e&&(e=this._parserOutput),g(this,t,e,r)}function v(t,e,r,n){if(t._parserBytesLeft-=e.length,i("%o bytes left for stream piece",t._parserBytesLeft),t._parserState===o?(t._parserBuffers.push(e),t._parserBuffered+=e.length):t._parserState===l&&r(e),0!==t._parserBytesLeft)return n;var s=t._parserCallback;if(s&&t._parserState===o&&t._parserBuffers.length>1&&(e=Buffer.concat(t._parserBuffers,t._parserBuffered)),t._parserState!==o&&(e=null),t._parserCallback=null,t._parserBuffered=0,t._parserState=a,t._parserBuffers.splice(0),s){var u=[];e&&u.push(e),r&&u.push(r);var c=s.length>u.length;c&&u.push(y(n));var f=s.apply(t,u);if(!c||n===f)return n}}var g=y((function t(e,r,n,i){return e._parserBytesLeft<=0?i(new Error("got data but not currently parsing anything")):r.length<=e._parserBytesLeft?function(){return v(e,r,n,i)}:function(){var a=r.slice(0,e._parserBytesLeft);return v(e,a,n,(function(o){return o?i(o):r.length>a.length?function(){return t(e,r.slice(a.length),n,i)}:void 0}))}}));function y(t){return function(){for(var e=t.apply(this,arguments);"function"==typeof e;)e=e();return e}}},41633:function(t,e,r){var n=r(90386);function i(){var t;try{t=e.storage.debug}catch(t){}return!t&&void 0!==n&&"env"in n&&(t=n.env.DEBUG),t}(e=t.exports=r(74469)).log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},e.formatArgs=function(t){var r=this.useColors;if(t[0]=(r?"%c":"")+this.namespace+(r?" %c":" ")+t[0]+(r?"%c ":" ")+"+"+e.humanize(this.diff),r){var n="color: "+this.color;t.splice(1,0,n,"color: inherit");var i=0,a=0;t[0].replace(/%[a-zA-Z%]/g,(function(t){"%%"!==t&&(i++,"%c"===t&&(a=i))})),t.splice(a,0,n)}},e.save=function(t){try{null==t?e.storage.removeItem("debug"):e.storage.debug=t}catch(t){}},e.load=i,e.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type)||("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},e.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(t){}}(),e.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],e.formatters.j=function(t){try{return JSON.stringify(t)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},e.enable(i())},74469:function(t,e,r){var n;function i(t){function r(){if(r.enabled){var t=r,i=+new Date,a=i-(n||i);t.diff=a,t.prev=n,t.curr=i,n=i;for(var o=new Array(arguments.length),s=0;s<o.length;s++)o[s]=arguments[s];o[0]=e.coerce(o[0]),"string"!=typeof o[0]&&o.unshift("%O");var l=0;o[0]=o[0].replace(/%([a-zA-Z%])/g,(function(r,n){if("%%"===r)return r;l++;var i=e.formatters[n];if("function"==typeof i){var a=o[l];r=i.call(t,a),o.splice(l,1),l--}return r})),e.formatArgs.call(t,o),(r.log||e.log||console.log.bind(console)).apply(t,o)}}return r.namespace=t,r.enabled=e.enabled(t),r.useColors=e.useColors(),r.color=function(t){var r,n=0;for(r in t)n=(n<<5)-n+t.charCodeAt(r),n|=0;return e.colors[Math.abs(n)%e.colors.length]}(t),"function"==typeof e.init&&e.init(r),r}(e=t.exports=i.debug=i.default=i).coerce=function(t){return t instanceof Error?t.stack||t.message:t},e.disable=function(){e.enable("")},e.enable=function(t){e.save(t),e.names=[],e.skips=[];for(var r=("string"==typeof t?t:"").split(/[\s,]+/),n=r.length,i=0;i<n;i++)r[i]&&("-"===(t=r[i].replace(/\*/g,".*?"))[0]?e.skips.push(new RegExp("^"+t.substr(1)+"$")):e.names.push(new RegExp("^"+t+"$")))},e.enabled=function(t){var r,n;for(r=0,n=e.skips.length;r<n;r++)if(e.skips[r].test(t))return!1;for(r=0,n=e.names.length;r<n;r++)if(e.names[r].test(t))return!0;return!1},e.humanize=r(11375),e.names=[],e.skips=[],e.formatters={}},11375:function(t){var e=1e3,r=60*e,n=60*r,i=24*n;function a(t,e,r){if(!(t<e))return t<1.5*e?Math.floor(t/e)+" "+r:Math.ceil(t/e)+" "+r+"s"}t.exports=function(t,o){o=o||{};var s,l=typeof t;if("string"===l&&t.length>0)return function(t){if(!((t=String(t)).length>100)){var a=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(a){var o=parseFloat(a[1]);switch((a[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*o;case"days":case"day":case"d":return o*i;case"hours":case"hour":case"hrs":case"hr":case"h":return o*n;case"minutes":case"minute":case"mins":case"min":case"m":return o*r;case"seconds":case"second":case"secs":case"sec":case"s":return o*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return o;default:return}}}}(t);if("number"===l&&!1===isNaN(t))return o.long?a(s=t,i,"day")||a(s,n,"hour")||a(s,r,"minute")||a(s,e,"second")||s+" ms":function(t){return t>=i?Math.round(t/i)+"d":t>=n?Math.round(t/n)+"h":t>=r?Math.round(t/r)+"m":t>=e?Math.round(t/e)+"s":t+"ms"}(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))}},99011:function(t,e,r){"use strict";var n=r(88641);t.exports=function(t,e,r){if(null==t)throw Error("First argument should be a string");if(null==e)throw Error("Separator should be a string or a RegExp");r?("string"==typeof r||Array.isArray(r))&&(r={ignore:r}):r={},null==r.escape&&(r.escape=!0),null==r.ignore?r.ignore=["[]","()","{}","<>",'""',"''","``","“”","«»"]:("string"==typeof r.ignore&&(r.ignore=[r.ignore]),r.ignore=r.ignore.map((function(t){return 1===t.length&&(t+=t),t})));var i=n.parse(t,{flat:!0,brackets:r.ignore}),a=i[0].split(e);if(r.escape){for(var o=[],s=0;s<a.length;s++){var l=a[s],u=a[s+1];"\\"===l[l.length-1]&&"\\"!==l[l.length-2]?(o.push(l+e+u),s++):o.push(l)}a=o}for(s=0;s<a.length;s++)i[0]=a[s],a[s]=n.stringify(i,{flat:!0});return a}},68664:function(t){"use strict";t.exports=function(t){for(var e=t.length,r=new Array(e),n=new Array(e),i=new Array(e),a=new Array(e),o=new Array(e),s=new Array(e),l=0;l<e;++l)r[l]=-1,n[l]=0,i[l]=!1,a[l]=0,o[l]=-1,s[l]=[];var u,c=0,f=[],h=[];function p(e){var l=[e],u=[e];for(r[e]=n[e]=c,i[e]=!0,c+=1;u.length>0;){e=u[u.length-1];var p=t[e];if(a[e]<p.length){for(var d=a[e];d<p.length;++d){var v=p[d];if(r[v]<0){r[v]=n[v]=c,i[v]=!0,c+=1,l.push(v),u.push(v);break}i[v]&&(n[e]=0|Math.min(n[e],n[v])),o[v]>=0&&s[e].push(o[v])}a[e]=d}else{if(n[e]===r[e]){var g=[],y=[],m=0;for(d=l.length-1;d>=0;--d){var x=l[d];if(i[x]=!1,g.push(x),y.push(s[x]),m+=s[x].length,o[x]=f.length,x===e){l.length=d;break}}f.push(g);var b=new Array(m);for(d=0;d<y.length;d++)for(var _=0;_<y[d].length;_++)b[--m]=y[d][_];h.push(b)}u.pop()}}}for(l=0;l<e;++l)r[l]<0&&p(l);for(l=0;l<h.length;l++){var d=h[l];if(0!==d.length){d.sort((function(t,e){return t-e})),u=[d[0]];for(var v=1;v<d.length;v++)d[v]!==d[v-1]&&u.push(d[v]);h[l]=u}}return{components:f,adjacencyList:h}}},7095:function(t,e,r){"use strict";r.r(e);var n=2*Math.PI,i=function(t,e,r,n,i,a,o){var s=t.x,l=t.y;return{x:n*(s*=e)-i*(l*=r)+a,y:i*s+n*l+o}},a=function(t,e){var r=1.5707963267948966===e?.551915024494:-1.5707963267948966===e?-.551915024494:4/3*Math.tan(e/4),n=Math.cos(t),i=Math.sin(t),a=Math.cos(t+e),o=Math.sin(t+e);return[{x:n-i*r,y:i+n*r},{x:a+o*r,y:o-a*r},{x:a,y:o}]},o=function(t,e,r,n){var i=t*r+e*n;return i>1&&(i=1),i<-1&&(i=-1),(t*n-e*r<0?-1:1)*Math.acos(i)};e.default=function(t){var e=t.px,r=t.py,s=t.cx,l=t.cy,u=t.rx,c=t.ry,f=t.xAxisRotation,h=void 0===f?0:f,p=t.largeArcFlag,d=void 0===p?0:p,v=t.sweepFlag,g=void 0===v?0:v,y=[];if(0===u||0===c)return[];var m=Math.sin(h*n/360),x=Math.cos(h*n/360),b=x*(e-s)/2+m*(r-l)/2,_=-m*(e-s)/2+x*(r-l)/2;if(0===b&&0===_)return[];u=Math.abs(u),c=Math.abs(c);var w=Math.pow(b,2)/Math.pow(u,2)+Math.pow(_,2)/Math.pow(c,2);w>1&&(u*=Math.sqrt(w),c*=Math.sqrt(w));var T=function(t,e,r,i,a,s,l,u,c,f,h,p){var d=Math.pow(a,2),v=Math.pow(s,2),g=Math.pow(h,2),y=Math.pow(p,2),m=d*v-d*y-v*g;m<0&&(m=0),m/=d*y+v*g;var x=(m=Math.sqrt(m)*(l===u?-1:1))*a/s*p,b=m*-s/a*h,_=f*x-c*b+(t+r)/2,w=c*x+f*b+(e+i)/2,T=(h-x)/a,k=(p-b)/s,A=(-h-x)/a,M=(-p-b)/s,S=o(1,0,T,k),E=o(T,k,A,M);return 0===u&&E>0&&(E-=n),1===u&&E<0&&(E+=n),[_,w,S,E]}(e,r,s,l,u,c,d,g,m,x,b,_),k=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var r=[],n=!0,i=!1,a=void 0;try{for(var o,s=t[Symbol.iterator]();!(n=(o=s.next()).done)&&(r.push(o.value),!e||r.length!==e);n=!0);}catch(t){i=!0,a=t}finally{try{!n&&s.return&&s.return()}finally{if(i)throw a}}return r}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}(T,4),A=k[0],M=k[1],S=k[2],E=k[3],L=Math.abs(E)/(n/4);Math.abs(1-L)<1e-7&&(L=1);var C=Math.max(Math.ceil(L),1);E/=C;for(var P=0;P<C;P++)y.push(a(S,E)),S+=E;return y.map((function(t){var e=i(t[0],u,c,x,m,A,M),r=e.x,n=e.y,a=i(t[1],u,c,x,m,A,M),o=a.x,s=a.y,l=i(t[2],u,c,x,m,A,M);return{x1:r,y1:n,x2:o,y2:s,x:l.x,y:l.y}}))}},1750:function(t,e,r){"use strict";var n=r(95616),i=r(65185),a=r(29988),o=r(89546),s=r(32791);t.exports=function(t){if(Array.isArray(t)&&1===t.length&&"string"==typeof t[0]&&(t=t[0]),"string"==typeof t&&(s(o(t),"String is not an SVG path."),t=n(t)),s(Array.isArray(t),"Argument should be a string or an array of path segments."),t=i(t),!(t=a(t)).length)return[0,0,0,0];for(var e=[1/0,1/0,-1/0,-1/0],r=0,l=t.length;r<l;r++)for(var u=t[r].slice(1),c=0;c<u.length;c+=2)u[c+0]<e[0]&&(e[0]=u[c+0]),u[c+1]<e[1]&&(e[1]=u[c+1]),u[c+0]>e[2]&&(e[2]=u[c+0]),u[c+1]>e[3]&&(e[3]=u[c+1]);return e}},29988:function(t,e,r){"use strict";t.exports=function(t){for(var e,r=[],o=0,s=0,l=0,u=0,c=null,f=null,h=0,p=0,d=0,v=t.length;d<v;d++){var g=t[d],y=g[0];switch(y){case"M":l=g[1],u=g[2];break;case"A":var m=n({px:h,py:p,cx:g[6],cy:g[7],rx:g[1],ry:g[2],xAxisRotation:g[3],largeArcFlag:g[4],sweepFlag:g[5]});if(!m.length)continue;for(var x,b=0;b<m.length;b++)g=["C",(x=m[b]).x1,x.y1,x.x2,x.y2,x.x,x.y],b<m.length-1&&r.push(g);break;case"S":var _=h,w=p;"C"!=e&&"S"!=e||(_+=_-o,w+=w-s),g=["C",_,w,g[1],g[2],g[3],g[4]];break;case"T":"Q"==e||"T"==e?(c=2*h-c,f=2*p-f):(c=h,f=p),g=a(h,p,c,f,g[1],g[2]);break;case"Q":c=g[1],f=g[2],g=a(h,p,g[1],g[2],g[3],g[4]);break;case"L":g=i(h,p,g[1],g[2]);break;case"H":g=i(h,p,g[1],p);break;case"V":g=i(h,p,h,g[1]);break;case"Z":g=i(h,p,l,u)}e=y,h=g[g.length-2],p=g[g.length-1],g.length>4?(o=g[g.length-4],s=g[g.length-3]):(o=h,s=p),r.push(g)}return r};var n=r(7095);function i(t,e,r,n){return["C",t,e,r,n,r,n]}function a(t,e,r,n,i,a){return["C",t/3+2/3*r,e/3+2/3*n,i/3+2/3*r,a/3+2/3*n,i,a]}},82019:function(t,e,r){"use strict";var n,i=r(1750),a=r(95616),o=r(31457),s=r(89546),l=r(44781),u=document.createElement("canvas"),c=u.getContext("2d");t.exports=function(t,e){if(!s(t))throw Error("Argument should be valid svg path string");var r,f;e||(e={}),e.shape?(r=e.shape[0],f=e.shape[1]):(r=u.width=e.w||e.width||200,f=u.height=e.h||e.height||200);var h=Math.min(r,f),p=e.stroke||0,d=e.viewbox||e.viewBox||i(t),v=[r/(d[2]-d[0]),f/(d[3]-d[1])],g=Math.min(v[0]||0,v[1]||0)/2;if(c.fillStyle="black",c.fillRect(0,0,r,f),c.fillStyle="white",p&&("number"!=typeof p&&(p=1),c.strokeStyle=p>0?"white":"black",c.lineWidth=Math.abs(p)),c.translate(.5*r,.5*f),c.scale(g,g),function(){if(null!=n)return n;var t=document.createElement("canvas").getContext("2d");if(t.canvas.width=t.canvas.height=1,!window.Path2D)return n=!1;var e=new Path2D("M0,0h1v1h-1v-1Z");t.fillStyle="black",t.fill(e);var r=t.getImageData(0,0,1,1);return n=r&&r.data&&255===r.data[3]}()){var y=new Path2D(t);c.fill(y),p&&c.stroke(y)}else{var m=a(t);o(c,m),c.fill(),p&&c.stroke()}return c.setTransform(1,0,0,1,0,0),l(c,{cutoff:null!=e.cutoff?e.cutoff:.5,radius:null!=e.radius?e.radius:.5*h})}},84267:function(t,e,r){var n;!function(i){var a=/^\s+/,o=/\s+$/,s=0,l=i.round,u=i.min,c=i.max,f=i.random;function h(t,e){if(e=e||{},(t=t||"")instanceof h)return t;if(!(this instanceof h))return new h(t,e);var r=function(t){var e,r,n,s={r:0,g:0,b:0},l=1,f=null,h=null,p=null,d=!1,v=!1;return"string"==typeof t&&(t=function(t){t=t.replace(a,"").replace(o,"").toLowerCase();var e,r=!1;if(C[t])t=C[t],r=!0;else if("transparent"==t)return{r:0,g:0,b:0,a:0,format:"name"};return(e=H.rgb.exec(t))?{r:e[1],g:e[2],b:e[3]}:(e=H.rgba.exec(t))?{r:e[1],g:e[2],b:e[3],a:e[4]}:(e=H.hsl.exec(t))?{h:e[1],s:e[2],l:e[3]}:(e=H.hsla.exec(t))?{h:e[1],s:e[2],l:e[3],a:e[4]}:(e=H.hsv.exec(t))?{h:e[1],s:e[2],v:e[3]}:(e=H.hsva.exec(t))?{h:e[1],s:e[2],v:e[3],a:e[4]}:(e=H.hex8.exec(t))?{r:z(e[1]),g:z(e[2]),b:z(e[3]),a:N(e[4]),format:r?"name":"hex8"}:(e=H.hex6.exec(t))?{r:z(e[1]),g:z(e[2]),b:z(e[3]),format:r?"name":"hex"}:(e=H.hex4.exec(t))?{r:z(e[1]+""+e[1]),g:z(e[2]+""+e[2]),b:z(e[3]+""+e[3]),a:N(e[4]+""+e[4]),format:r?"name":"hex8"}:!!(e=H.hex3.exec(t))&&{r:z(e[1]+""+e[1]),g:z(e[2]+""+e[2]),b:z(e[3]+""+e[3]),format:r?"name":"hex"}}(t)),"object"==typeof t&&(q(t.r)&&q(t.g)&&q(t.b)?(e=t.r,r=t.g,n=t.b,s={r:255*I(e,255),g:255*I(r,255),b:255*I(n,255)},d=!0,v="%"===String(t.r).substr(-1)?"prgb":"rgb"):q(t.h)&&q(t.s)&&q(t.v)?(f=F(t.s),h=F(t.v),s=function(t,e,r){t=6*I(t,360),e=I(e,100),r=I(r,100);var n=i.floor(t),a=t-n,o=r*(1-e),s=r*(1-a*e),l=r*(1-(1-a)*e),u=n%6;return{r:255*[r,s,o,o,l,r][u],g:255*[l,r,r,s,o,o][u],b:255*[o,o,l,r,r,s][u]}}(t.h,f,h),d=!0,v="hsv"):q(t.h)&&q(t.s)&&q(t.l)&&(f=F(t.s),p=F(t.l),s=function(t,e,r){var n,i,a;function o(t,e,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t}if(t=I(t,360),e=I(e,100),r=I(r,100),0===e)n=i=a=r;else{var s=r<.5?r*(1+e):r+e-r*e,l=2*r-s;n=o(l,s,t+1/3),i=o(l,s,t),a=o(l,s,t-1/3)}return{r:255*n,g:255*i,b:255*a}}(t.h,f,p),d=!0,v="hsl"),t.hasOwnProperty("a")&&(l=t.a)),l=O(l),{ok:d,format:t.format||v,r:u(255,c(s.r,0)),g:u(255,c(s.g,0)),b:u(255,c(s.b,0)),a:l}}(t);this._originalInput=t,this._r=r.r,this._g=r.g,this._b=r.b,this._a=r.a,this._roundA=l(100*this._a)/100,this._format=e.format||r.format,this._gradientType=e.gradientType,this._r<1&&(this._r=l(this._r)),this._g<1&&(this._g=l(this._g)),this._b<1&&(this._b=l(this._b)),this._ok=r.ok,this._tc_id=s++}function p(t,e,r){t=I(t,255),e=I(e,255),r=I(r,255);var n,i,a=c(t,e,r),o=u(t,e,r),s=(a+o)/2;if(a==o)n=i=0;else{var l=a-o;switch(i=s>.5?l/(2-a-o):l/(a+o),a){case t:n=(e-r)/l+(e<r?6:0);break;case e:n=(r-t)/l+2;break;case r:n=(t-e)/l+4}n/=6}return{h:n,s:i,l:s}}function d(t,e,r){t=I(t,255),e=I(e,255),r=I(r,255);var n,i,a=c(t,e,r),o=u(t,e,r),s=a,l=a-o;if(i=0===a?0:l/a,a==o)n=0;else{switch(a){case t:n=(e-r)/l+(e<r?6:0);break;case e:n=(r-t)/l+2;break;case r:n=(t-e)/l+4}n/=6}return{h:n,s:i,v:s}}function v(t,e,r,n){var i=[R(l(t).toString(16)),R(l(e).toString(16)),R(l(r).toString(16))];return n&&i[0].charAt(0)==i[0].charAt(1)&&i[1].charAt(0)==i[1].charAt(1)&&i[2].charAt(0)==i[2].charAt(1)?i[0].charAt(0)+i[1].charAt(0)+i[2].charAt(0):i.join("")}function g(t,e,r,n){return[R(B(n)),R(l(t).toString(16)),R(l(e).toString(16)),R(l(r).toString(16))].join("")}function y(t,e){e=0===e?0:e||10;var r=h(t).toHsl();return r.s-=e/100,r.s=D(r.s),h(r)}function m(t,e){e=0===e?0:e||10;var r=h(t).toHsl();return r.s+=e/100,r.s=D(r.s),h(r)}function x(t){return h(t).desaturate(100)}function b(t,e){e=0===e?0:e||10;var r=h(t).toHsl();return r.l+=e/100,r.l=D(r.l),h(r)}function _(t,e){e=0===e?0:e||10;var r=h(t).toRgb();return r.r=c(0,u(255,r.r-l(-e/100*255))),r.g=c(0,u(255,r.g-l(-e/100*255))),r.b=c(0,u(255,r.b-l(-e/100*255))),h(r)}function w(t,e){e=0===e?0:e||10;var r=h(t).toHsl();return r.l-=e/100,r.l=D(r.l),h(r)}function T(t,e){var r=h(t).toHsl(),n=(r.h+e)%360;return r.h=n<0?360+n:n,h(r)}function k(t){var e=h(t).toHsl();return e.h=(e.h+180)%360,h(e)}function A(t){var e=h(t).toHsl(),r=e.h;return[h(t),h({h:(r+120)%360,s:e.s,l:e.l}),h({h:(r+240)%360,s:e.s,l:e.l})]}function M(t){var e=h(t).toHsl(),r=e.h;return[h(t),h({h:(r+90)%360,s:e.s,l:e.l}),h({h:(r+180)%360,s:e.s,l:e.l}),h({h:(r+270)%360,s:e.s,l:e.l})]}function S(t){var e=h(t).toHsl(),r=e.h;return[h(t),h({h:(r+72)%360,s:e.s,l:e.l}),h({h:(r+216)%360,s:e.s,l:e.l})]}function E(t,e,r){e=e||6,r=r||30;var n=h(t).toHsl(),i=360/r,a=[h(t)];for(n.h=(n.h-(i*e>>1)+720)%360;--e;)n.h=(n.h+i)%360,a.push(h(n));return a}function L(t,e){e=e||6;for(var r=h(t).toHsv(),n=r.h,i=r.s,a=r.v,o=[],s=1/e;e--;)o.push(h({h:n,s:i,v:a})),a=(a+s)%1;return o}h.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},getLuminance:function(){var t,e,r,n=this.toRgb();return t=n.r/255,e=n.g/255,r=n.b/255,.2126*(t<=.03928?t/12.92:i.pow((t+.055)/1.055,2.4))+.7152*(e<=.03928?e/12.92:i.pow((e+.055)/1.055,2.4))+.0722*(r<=.03928?r/12.92:i.pow((r+.055)/1.055,2.4))},setAlpha:function(t){return this._a=O(t),this._roundA=l(100*this._a)/100,this},toHsv:function(){var t=d(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=d(this._r,this._g,this._b),e=l(360*t.h),r=l(100*t.s),n=l(100*t.v);return 1==this._a?"hsv("+e+", "+r+"%, "+n+"%)":"hsva("+e+", "+r+"%, "+n+"%, "+this._roundA+")"},toHsl:function(){var t=p(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=p(this._r,this._g,this._b),e=l(360*t.h),r=l(100*t.s),n=l(100*t.l);return 1==this._a?"hsl("+e+", "+r+"%, "+n+"%)":"hsla("+e+", "+r+"%, "+n+"%, "+this._roundA+")"},toHex:function(t){return v(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(t){return function(t,e,r,n,i){var a=[R(l(t).toString(16)),R(l(e).toString(16)),R(l(r).toString(16)),R(B(n))];return i&&a[0].charAt(0)==a[0].charAt(1)&&a[1].charAt(0)==a[1].charAt(1)&&a[2].charAt(0)==a[2].charAt(1)&&a[3].charAt(0)==a[3].charAt(1)?a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0)+a[3].charAt(0):a.join("")}(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return"#"+this.toHex8(t)},toRgb:function(){return{r:l(this._r),g:l(this._g),b:l(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+l(this._r)+", "+l(this._g)+", "+l(this._b)+")":"rgba("+l(this._r)+", "+l(this._g)+", "+l(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:l(100*I(this._r,255))+"%",g:l(100*I(this._g,255))+"%",b:l(100*I(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+l(100*I(this._r,255))+"%, "+l(100*I(this._g,255))+"%, "+l(100*I(this._b,255))+"%)":"rgba("+l(100*I(this._r,255))+"%, "+l(100*I(this._g,255))+"%, "+l(100*I(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(P[v(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e="#"+g(this._r,this._g,this._b,this._a),r=e,n=this._gradientType?"GradientType = 1, ":"";if(t){var i=h(t);r="#"+g(i._r,i._g,i._b,i._a)}return"progid:DXImageTransform.Microsoft.gradient("+n+"startColorstr="+e+",endColorstr="+r+")"},toString:function(t){var e=!!t;t=t||this._format;var r=!1,n=this._a<1&&this._a>=0;return e||!n||"hex"!==t&&"hex6"!==t&&"hex3"!==t&&"hex4"!==t&&"hex8"!==t&&"name"!==t?("rgb"===t&&(r=this.toRgbString()),"prgb"===t&&(r=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(r=this.toHexString()),"hex3"===t&&(r=this.toHexString(!0)),"hex4"===t&&(r=this.toHex8String(!0)),"hex8"===t&&(r=this.toHex8String()),"name"===t&&(r=this.toName()),"hsl"===t&&(r=this.toHslString()),"hsv"===t&&(r=this.toHsvString()),r||this.toHexString()):"name"===t&&0===this._a?this.toName():this.toRgbString()},clone:function(){return h(this.toString())},_applyModification:function(t,e){var r=t.apply(null,[this].concat([].slice.call(e)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(b,arguments)},brighten:function(){return this._applyModification(_,arguments)},darken:function(){return this._applyModification(w,arguments)},desaturate:function(){return this._applyModification(y,arguments)},saturate:function(){return this._applyModification(m,arguments)},greyscale:function(){return this._applyModification(x,arguments)},spin:function(){return this._applyModification(T,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(E,arguments)},complement:function(){return this._applyCombination(k,arguments)},monochromatic:function(){return this._applyCombination(L,arguments)},splitcomplement:function(){return this._applyCombination(S,arguments)},triad:function(){return this._applyCombination(A,arguments)},tetrad:function(){return this._applyCombination(M,arguments)}},h.fromRatio=function(t,e){if("object"==typeof t){var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]="a"===n?t[n]:F(t[n]));t=r}return h(t,e)},h.equals=function(t,e){return!(!t||!e)&&h(t).toRgbString()==h(e).toRgbString()},h.random=function(){return h.fromRatio({r:f(),g:f(),b:f()})},h.mix=function(t,e,r){r=0===r?0:r||50;var n=h(t).toRgb(),i=h(e).toRgb(),a=r/100;return h({r:(i.r-n.r)*a+n.r,g:(i.g-n.g)*a+n.g,b:(i.b-n.b)*a+n.b,a:(i.a-n.a)*a+n.a})},h.readability=function(t,e){var r=h(t),n=h(e);return(i.max(r.getLuminance(),n.getLuminance())+.05)/(i.min(r.getLuminance(),n.getLuminance())+.05)},h.isReadable=function(t,e,r){var n,i,a,o,s,l=h.readability(t,e);switch(i=!1,(a=r,"AA"!==(o=((a=a||{level:"AA",size:"small"}).level||"AA").toUpperCase())&&"AAA"!==o&&(o="AA"),"small"!==(s=(a.size||"small").toLowerCase())&&"large"!==s&&(s="small"),n={level:o,size:s}).level+n.size){case"AAsmall":case"AAAlarge":i=l>=4.5;break;case"AAlarge":i=l>=3;break;case"AAAsmall":i=l>=7}return i},h.mostReadable=function(t,e,r){var n,i,a,o,s=null,l=0;i=(r=r||{}).includeFallbackColors,a=r.level,o=r.size;for(var u=0;u<e.length;u++)(n=h.readability(t,e[u]))>l&&(l=n,s=h(e[u]));return h.isReadable(t,s,{level:a,size:o})||!i?s:(r.includeFallbackColors=!1,h.mostReadable(t,["#fff","#000"],r))};var C=h.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},P=h.hexNames=function(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[t[r]]=r);return e}(C);function O(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function I(t,e){(function(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t)})(t)&&(t="100%");var r=function(t){return"string"==typeof t&&-1!=t.indexOf("%")}(t);return t=u(e,c(0,parseFloat(t))),r&&(t=parseInt(t*e,10)/100),i.abs(t-e)<1e-6?1:t%e/parseFloat(e)}function D(t){return u(1,c(0,t))}function z(t){return parseInt(t,16)}function R(t){return 1==t.length?"0"+t:""+t}function F(t){return t<=1&&(t=100*t+"%"),t}function B(t){return i.round(255*parseFloat(t)).toString(16)}function N(t){return z(t)/255}var j,U,V,H=(U="[\\s|\\(]+("+(j="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+j+")[,|\\s]+("+j+")\\s*\\)?",V="[\\s|\\(]+("+j+")[,|\\s]+("+j+")[,|\\s]+("+j+")[,|\\s]+("+j+")\\s*\\)?",{CSS_UNIT:new RegExp(j),rgb:new RegExp("rgb"+U),rgba:new RegExp("rgba"+V),hsl:new RegExp("hsl"+U),hsla:new RegExp("hsla"+V),hsv:new RegExp("hsv"+U),hsva:new RegExp("hsva"+V),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function q(t){return!!H.CSS_UNIT.exec(t)}t.exports?t.exports=h:void 0===(n=function(){return h}.call(e,r,e,t))||(t.exports=n)}(Math)},57060:function(t){"use strict";t.exports=r,t.exports.float32=t.exports.float=r,t.exports.fract32=t.exports.fract=function(t,e){if(t.length){if(t instanceof Float32Array)return new Float32Array(t.length);e instanceof Float32Array||(e=r(t));for(var n=0,i=e.length;n<i;n++)e[n]=t[n]-e[n];return e}return r(t-r(t))};var e=new Float32Array(1);function r(t){return t.length?t instanceof Float32Array?t:new Float32Array(t):(e[0]=t,e[0])}},75686:function(t,e,r){"use strict";var n=r(25677);t.exports=o;var i=96;function a(t,e){var r=n(getComputedStyle(t).getPropertyValue(e));return r[0]*o(r[1],t)}function o(t,e){switch(e=e||document.body,t=(t||"px").trim().toLowerCase(),e!==window&&e!==document||(e=document.body),t){case"%":return e.clientHeight/100;case"ch":case"ex":return function(t,e){var r=document.createElement("div");r.style["font-size"]="128"+t,e.appendChild(r);var n=a(r,"font-size")/128;return e.removeChild(r),n}(t,e);case"em":return a(e,"font-size");case"rem":return a(document.body,"font-size");case"vw":return window.innerWidth/100;case"vh":return window.innerHeight/100;case"vmin":return Math.min(window.innerWidth,window.innerHeight)/100;case"vmax":return Math.max(window.innerWidth,window.innerHeight)/100;case"in":return i;case"cm":return i/2.54;case"mm":return i/25.4;case"pt":return i/72;case"pc":return i/6}return 1}},96892:function(t,e,r){"use strict";function n(t){return t}function i(t,e){return"string"==typeof e&&(e=t.objects[e]),"GeometryCollection"===e.type?{type:"FeatureCollection",features:e.geometries.map((function(e){return a(t,e)}))}:a(t,e)}function a(t,e){var r=e.id,i=e.bbox,a=null==e.properties?{}:e.properties,o=function(t,e){var r=function(t){if(null==t)return n;var e,r,i=t.scale[0],a=t.scale[1],o=t.translate[0],s=t.translate[1];return function(t,n){n||(e=r=0);var l=2,u=t.length,c=new Array(u);for(c[0]=(e+=t[0])*i+o,c[1]=(r+=t[1])*a+s;l<u;)c[l]=t[l],++l;return c}}(t.transform),i=t.arcs;function a(t,e){e.length&&e.pop();for(var n=i[t<0?~t:t],a=0,o=n.length;a<o;++a)e.push(r(n[a],a));t<0&&function(t,e){for(var r,n=t.length,i=n-e;i<--n;)r=t[i],t[i++]=t[n],t[n]=r}(e,o)}function o(t){return r(t)}function s(t){for(var e=[],r=0,n=t.length;r<n;++r)a(t[r],e);return e.length<2&&e.push(e[0]),e}function l(t){for(var e=s(t);e.length<4;)e.push(e[0]);return e}function u(t){return t.map(l)}return function t(e){var r,n=e.type;switch(n){case"GeometryCollection":return{type:n,geometries:e.geometries.map(t)};case"Point":r=o(e.coordinates);break;case"MultiPoint":r=e.coordinates.map(o);break;case"LineString":r=s(e.arcs);break;case"MultiLineString":r=e.arcs.map(s);break;case"Polygon":r=u(e.arcs);break;case"MultiPolygon":r=e.arcs.map(u);break;default:return null}return{type:n,coordinates:r}}(e)}(t,e);return null==r&&null==i?{type:"Feature",properties:a,geometry:o}:null==i?{type:"Feature",id:r,properties:a,geometry:o}:{type:"Feature",id:r,bbox:i,properties:a,geometry:o}}r.d(e,{zL:function(){return i}})},73116:function(t,e,r){"use strict";var n=r(24511);t.exports=function(t){if("function"!=typeof t)return!1;if(!hasOwnProperty.call(t,"length"))return!1;try{if("number"!=typeof t.length)return!1;if("function"!=typeof t.call)return!1;if("function"!=typeof t.apply)return!1}catch(t){return!1}return!n(t)}},69190:function(t,e,r){"use strict";var n=r(24582),i=r(47403),a=r(9234),o=r(6048),s=function(t,e){return t.replace("%v",o(e))};t.exports=function(t,e,r){if(!i(r))throw new TypeError(s(e,t));if(!n(t)){if("default"in r)return r.default;if(r.isOptional)return null}var o=a(r.errorMessage);throw n(o)||(o=e),new TypeError(s(o,t))}},18497:function(t){"use strict";t.exports=function(t){try{return t.toString()}catch(e){try{return String(t)}catch(t){return null}}}},6048:function(t,e,r){"use strict";var n=r(18497),i=/[\n\r\u2028\u2029]/g;t.exports=function(t){var e=n(t);return null===e?"<Non-coercible to string value>":(e.length>100&&(e=e.slice(0,99)+"…"),e=e.replace(i,(function(t){switch(t){case"\n":return"\\n";case"\r":return"\\r";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";default:throw new Error("Unexpected character")}})))}},47403:function(t,e,r){"use strict";var n=r(24582),i={object:!0,function:!0,undefined:!0};t.exports=function(t){return!!n(t)&&hasOwnProperty.call(i,typeof t)}},82527:function(t,e,r){"use strict";var n=r(69190),i=r(84985);t.exports=function(t){return i(t)?t:n(t,"%v is not a plain function",arguments[1])}},84985:function(t,e,r){"use strict";var n=r(73116),i=/^\s*class[\s{/}]/,a=Function.prototype.toString;t.exports=function(t){return!!n(t)&&!i.test(a.call(t))}},24511:function(t,e,r){"use strict";var n=r(47403);t.exports=function(t){if(!n(t))return!1;try{return!!t.constructor&&t.constructor.prototype===t}catch(t){return!1}}},9234:function(t,e,r){"use strict";var n=r(24582),i=r(47403),a=Object.prototype.toString;t.exports=function(t){if(!n(t))return null;if(i(t)){var e=t.toString;if("function"!=typeof e)return null;if(e===a)return null}try{return""+t}catch(t){return null}}},10424:function(t,e,r){"use strict";var n=r(69190),i=r(24582);t.exports=function(t){return i(t)?t:n(t,"Cannot use %v",arguments[1])}},24582:function(t){"use strict";t.exports=function(t){return null!=t}},58404:function(t,e,r){"use strict";var n=r(13547),i=r(12129),a=r(12856).Buffer;r.g.__TYPEDARRAY_POOL||(r.g.__TYPEDARRAY_POOL={UINT8:i([32,0]),UINT16:i([32,0]),UINT32:i([32,0]),BIGUINT64:i([32,0]),INT8:i([32,0]),INT16:i([32,0]),INT32:i([32,0]),BIGINT64:i([32,0]),FLOAT:i([32,0]),DOUBLE:i([32,0]),DATA:i([32,0]),UINT8C:i([32,0]),BUFFER:i([32,0])});var o="undefined"!=typeof Uint8ClampedArray,s="undefined"!=typeof BigUint64Array,l="undefined"!=typeof BigInt64Array,u=r.g.__TYPEDARRAY_POOL;u.UINT8C||(u.UINT8C=i([32,0])),u.BIGUINT64||(u.BIGUINT64=i([32,0])),u.BIGINT64||(u.BIGINT64=i([32,0])),u.BUFFER||(u.BUFFER=i([32,0]));var c=u.DATA,f=u.BUFFER;function h(t){if(t){var e=t.length||t.byteLength,r=n.log2(e);c[r].push(t)}}function p(t){t=n.nextPow2(t);var e=n.log2(t),r=c[e];return r.length>0?r.pop():new ArrayBuffer(t)}function d(t){return new Uint8Array(p(t),0,t)}function v(t){return new Uint16Array(p(2*t),0,t)}function g(t){return new Uint32Array(p(4*t),0,t)}function y(t){return new Int8Array(p(t),0,t)}function m(t){return new Int16Array(p(2*t),0,t)}function x(t){return new Int32Array(p(4*t),0,t)}function b(t){return new Float32Array(p(4*t),0,t)}function _(t){return new Float64Array(p(8*t),0,t)}function w(t){return o?new Uint8ClampedArray(p(t),0,t):d(t)}function T(t){return s?new BigUint64Array(p(8*t),0,t):null}function k(t){return l?new BigInt64Array(p(8*t),0,t):null}function A(t){return new DataView(p(t),0,t)}function M(t){t=n.nextPow2(t);var e=n.log2(t),r=f[e];return r.length>0?r.pop():new a(t)}e.free=function(t){if(a.isBuffer(t))f[n.log2(t.length)].push(t);else{if("[object ArrayBuffer]"!==Object.prototype.toString.call(t)&&(t=t.buffer),!t)return;var e=t.length||t.byteLength,r=0|n.log2(e);c[r].push(t)}},e.freeUint8=e.freeUint16=e.freeUint32=e.freeBigUint64=e.freeInt8=e.freeInt16=e.freeInt32=e.freeBigInt64=e.freeFloat32=e.freeFloat=e.freeFloat64=e.freeDouble=e.freeUint8Clamped=e.freeDataView=function(t){h(t.buffer)},e.freeArrayBuffer=h,e.freeBuffer=function(t){f[n.log2(t.length)].push(t)},e.malloc=function(t,e){if(void 0===e||"arraybuffer"===e)return p(t);switch(e){case"uint8":return d(t);case"uint16":return v(t);case"uint32":return g(t);case"int8":return y(t);case"int16":return m(t);case"int32":return x(t);case"float":case"float32":return b(t);case"double":case"float64":return _(t);case"uint8_clamped":return w(t);case"bigint64":return k(t);case"biguint64":return T(t);case"buffer":return M(t);case"data":case"dataview":return A(t);default:return null}return null},e.mallocArrayBuffer=p,e.mallocUint8=d,e.mallocUint16=v,e.mallocUint32=g,e.mallocInt8=y,e.mallocInt16=m,e.mallocInt32=x,e.mallocFloat32=e.mallocFloat=b,e.mallocFloat64=e.mallocDouble=_,e.mallocUint8Clamped=w,e.mallocBigUint64=T,e.mallocBigInt64=k,e.mallocDataView=A,e.mallocBuffer=M,e.clearCache=function(){for(var t=0;t<32;++t)u.UINT8[t].length=0,u.UINT16[t].length=0,u.UINT32[t].length=0,u.INT8[t].length=0,u.INT16[t].length=0,u.INT32[t].length=0,u.FLOAT[t].length=0,u.DOUBLE[t].length=0,u.BIGUINT64[t].length=0,u.BIGINT64[t].length=0,u.UINT8C[t].length=0,c[t].length=0,f[t].length=0}},90448:function(t){var e=/[\'\"]/;t.exports=function(t){return t?(e.test(t.charAt(0))&&(t=t.substr(1)),e.test(t.charAt(t.length-1))&&(t=t.substr(0,t.length-1)),t):""}},93447:function(t){"use strict";t.exports=function(t,e,r){Array.isArray(r)||(r=[].slice.call(arguments,2));for(var n=0,i=r.length;n<i;n++){var a=r[n];for(var o in a)if((void 0===e[o]||Array.isArray(e[o])||t[o]!==e[o])&&o in e){var s;if(!0===a[o])s=e[o];else{if(!1===a[o])continue;if("function"==typeof a[o]&&void 0===(s=a[o](e[o],t,e)))continue}t[o]=s}}return t}},20588:function(t,e,r){function n(t){try{if(!r.g.localStorage)return!1}catch(t){return!1}var e=r.g.localStorage[t];return null!=e&&"true"===String(e).toLowerCase()}t.exports=function(t,e){if(n("noDeprecation"))return t;var r=!1;return function(){if(!r){if(n("throwDeprecation"))throw new Error(e);n("traceDeprecation")?console.trace(e):console.warn(e),r=!0}return t.apply(this,arguments)}}},45920:function(t){t.exports=function(t){return t&&"object"==typeof t&&"function"==typeof t.copy&&"function"==typeof t.fill&&"function"==typeof t.readUInt8}},4936:function(t,e,r){"use strict";var n=r(47216),i=r(65481),a=r(21099),o=r(9187);function s(t){return t.call.bind(t)}var l="undefined"!=typeof BigInt,u="undefined"!=typeof Symbol,c=s(Object.prototype.toString),f=s(Number.prototype.valueOf),h=s(String.prototype.valueOf),p=s(Boolean.prototype.valueOf);if(l)var d=s(BigInt.prototype.valueOf);if(u)var v=s(Symbol.prototype.valueOf);function g(t,e){if("object"!=typeof t)return!1;try{return e(t),!0}catch(t){return!1}}function y(t){return"[object Map]"===c(t)}function m(t){return"[object Set]"===c(t)}function x(t){return"[object WeakMap]"===c(t)}function b(t){return"[object WeakSet]"===c(t)}function _(t){return"[object ArrayBuffer]"===c(t)}function w(t){return"undefined"!=typeof ArrayBuffer&&(_.working?_(t):t instanceof ArrayBuffer)}function T(t){return"[object DataView]"===c(t)}function k(t){return"undefined"!=typeof DataView&&(T.working?T(t):t instanceof DataView)}e.isArgumentsObject=n,e.isGeneratorFunction=i,e.isTypedArray=o,e.isPromise=function(t){return"undefined"!=typeof Promise&&t instanceof Promise||null!==t&&"object"==typeof t&&"function"==typeof t.then&&"function"==typeof t.catch},e.isArrayBufferView=function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):o(t)||k(t)},e.isUint8Array=function(t){return"Uint8Array"===a(t)},e.isUint8ClampedArray=function(t){return"Uint8ClampedArray"===a(t)},e.isUint16Array=function(t){return"Uint16Array"===a(t)},e.isUint32Array=function(t){return"Uint32Array"===a(t)},e.isInt8Array=function(t){return"Int8Array"===a(t)},e.isInt16Array=function(t){return"Int16Array"===a(t)},e.isInt32Array=function(t){return"Int32Array"===a(t)},e.isFloat32Array=function(t){return"Float32Array"===a(t)},e.isFloat64Array=function(t){return"Float64Array"===a(t)},e.isBigInt64Array=function(t){return"BigInt64Array"===a(t)},e.isBigUint64Array=function(t){return"BigUint64Array"===a(t)},y.working="undefined"!=typeof Map&&y(new Map),e.isMap=function(t){return"undefined"!=typeof Map&&(y.working?y(t):t instanceof Map)},m.working="undefined"!=typeof Set&&m(new Set),e.isSet=function(t){return"undefined"!=typeof Set&&(m.working?m(t):t instanceof Set)},x.working="undefined"!=typeof WeakMap&&x(new WeakMap),e.isWeakMap=function(t){return"undefined"!=typeof WeakMap&&(x.working?x(t):t instanceof WeakMap)},b.working="undefined"!=typeof WeakSet&&b(new WeakSet),e.isWeakSet=function(t){return b(t)},_.working="undefined"!=typeof ArrayBuffer&&_(new ArrayBuffer),e.isArrayBuffer=w,T.working="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView&&T(new DataView(new ArrayBuffer(1),0,1)),e.isDataView=k;var A="undefined"!=typeof SharedArrayBuffer?SharedArrayBuffer:void 0;function M(t){return"[object SharedArrayBuffer]"===c(t)}function S(t){return void 0!==A&&(void 0===M.working&&(M.working=M(new A)),M.working?M(t):t instanceof A)}function E(t){return g(t,f)}function L(t){return g(t,h)}function C(t){return g(t,p)}function P(t){return l&&g(t,d)}function O(t){return u&&g(t,v)}e.isSharedArrayBuffer=S,e.isAsyncFunction=function(t){return"[object AsyncFunction]"===c(t)},e.isMapIterator=function(t){return"[object Map Iterator]"===c(t)},e.isSetIterator=function(t){return"[object Set Iterator]"===c(t)},e.isGeneratorObject=function(t){return"[object Generator]"===c(t)},e.isWebAssemblyCompiledModule=function(t){return"[object WebAssembly.Module]"===c(t)},e.isNumberObject=E,e.isStringObject=L,e.isBooleanObject=C,e.isBigIntObject=P,e.isSymbolObject=O,e.isBoxedPrimitive=function(t){return E(t)||L(t)||C(t)||P(t)||O(t)},e.isAnyArrayBuffer=function(t){return"undefined"!=typeof Uint8Array&&(w(t)||S(t))},["isProxy","isExternal","isModuleNamespaceObject"].forEach((function(t){Object.defineProperty(e,t,{enumerable:!1,value:function(){throw new Error(t+" is not supported in userland")}})}))},43827:function(t,e,r){var n=r(90386),i=Object.getOwnPropertyDescriptors||function(t){for(var e=Object.keys(t),r={},n=0;n<e.length;n++)r[e[n]]=Object.getOwnPropertyDescriptor(t,e[n]);return r},a=/%[sdj%]/g;e.format=function(t){if(!x(t)){for(var e=[],r=0;r<arguments.length;r++)e.push(u(arguments[r]));return e.join(" ")}r=1;for(var n=arguments,i=n.length,o=String(t).replace(a,(function(t){if("%%"===t)return"%";if(r>=i)return t;switch(t){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(t){return"[Circular]"}default:return t}})),s=n[r];r<i;s=n[++r])y(s)||!w(s)?o+=" "+s:o+=" "+u(s);return o},e.deprecate=function(t,r){if(void 0!==n&&!0===n.noDeprecation)return t;if(void 0===n)return function(){return e.deprecate(t,r).apply(this,arguments)};var i=!1;return function(){if(!i){if(n.throwDeprecation)throw new Error(r);n.traceDeprecation?console.trace(r):console.error(r),i=!0}return t.apply(this,arguments)}};var o={},s=/^$/;if(n.env.NODE_DEBUG){var l=n.env.NODE_DEBUG;l=l.replace(/[|\\{}()[\]^$+?.]/g,"\\$&").replace(/\*/g,".*").replace(/,/g,"$|^").toUpperCase(),s=new RegExp("^"+l+"$","i")}function u(t,r){var n={seen:[],stylize:f};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),g(r)?n.showHidden=r:r&&e._extend(n,r),b(n.showHidden)&&(n.showHidden=!1),b(n.depth)&&(n.depth=2),b(n.colors)&&(n.colors=!1),b(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=c),h(n,t,n.depth)}function c(t,e){var r=u.styles[e];return r?"["+u.colors[r][0]+"m"+t+"["+u.colors[r][1]+"m":t}function f(t,e){return t}function h(t,r,n){if(t.customInspect&&r&&A(r.inspect)&&r.inspect!==e.inspect&&(!r.constructor||r.constructor.prototype!==r)){var i=r.inspect(n,t);return x(i)||(i=h(t,i,n)),i}var a=function(t,e){if(b(e))return t.stylize("undefined","undefined");if(x(e)){var r="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(r,"string")}return m(e)?t.stylize(""+e,"number"):g(e)?t.stylize(""+e,"boolean"):y(e)?t.stylize("null","null"):void 0}(t,r);if(a)return a;var o=Object.keys(r),s=function(t){var e={};return t.forEach((function(t,r){e[t]=!0})),e}(o);if(t.showHidden&&(o=Object.getOwnPropertyNames(r)),k(r)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return p(r);if(0===o.length){if(A(r)){var l=r.name?": "+r.name:"";return t.stylize("[Function"+l+"]","special")}if(_(r))return t.stylize(RegExp.prototype.toString.call(r),"regexp");if(T(r))return t.stylize(Date.prototype.toString.call(r),"date");if(k(r))return p(r)}var u,c="",f=!1,w=["{","}"];return v(r)&&(f=!0,w=["[","]"]),A(r)&&(c=" [Function"+(r.name?": "+r.name:"")+"]"),_(r)&&(c=" "+RegExp.prototype.toString.call(r)),T(r)&&(c=" "+Date.prototype.toUTCString.call(r)),k(r)&&(c=" "+p(r)),0!==o.length||f&&0!=r.length?n<0?_(r)?t.stylize(RegExp.prototype.toString.call(r),"regexp"):t.stylize("[Object]","special"):(t.seen.push(r),u=f?function(t,e,r,n,i){for(var a=[],o=0,s=e.length;o<s;++o)L(e,String(o))?a.push(d(t,e,r,n,String(o),!0)):a.push("");return i.forEach((function(i){i.match(/^\d+$/)||a.push(d(t,e,r,n,i,!0))})),a}(t,r,n,s,o):o.map((function(e){return d(t,r,n,s,e,f)})),t.seen.pop(),function(t,e,r){return t.reduce((function(t,e){return e.indexOf("\n"),t+e.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60?r[0]+(""===e?"":e+"\n ")+" "+t.join(",\n  ")+" "+r[1]:r[0]+e+" "+t.join(", ")+" "+r[1]}(u,c,w)):w[0]+c+w[1]}function p(t){return"["+Error.prototype.toString.call(t)+"]"}function d(t,e,r,n,i,a){var o,s,l;if((l=Object.getOwnPropertyDescriptor(e,i)||{value:e[i]}).get?s=l.set?t.stylize("[Getter/Setter]","special"):t.stylize("[Getter]","special"):l.set&&(s=t.stylize("[Setter]","special")),L(n,i)||(o="["+i+"]"),s||(t.seen.indexOf(l.value)<0?(s=y(r)?h(t,l.value,null):h(t,l.value,r-1)).indexOf("\n")>-1&&(s=a?s.split("\n").map((function(t){return"  "+t})).join("\n").slice(2):"\n"+s.split("\n").map((function(t){return"   "+t})).join("\n")):s=t.stylize("[Circular]","special")),b(o)){if(a&&i.match(/^\d+$/))return s;(o=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(o=o.slice(1,-1),o=t.stylize(o,"name")):(o=o.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),o=t.stylize(o,"string"))}return o+": "+s}function v(t){return Array.isArray(t)}function g(t){return"boolean"==typeof t}function y(t){return null===t}function m(t){return"number"==typeof t}function x(t){return"string"==typeof t}function b(t){return void 0===t}function _(t){return w(t)&&"[object RegExp]"===M(t)}function w(t){return"object"==typeof t&&null!==t}function T(t){return w(t)&&"[object Date]"===M(t)}function k(t){return w(t)&&("[object Error]"===M(t)||t instanceof Error)}function A(t){return"function"==typeof t}function M(t){return Object.prototype.toString.call(t)}function S(t){return t<10?"0"+t.toString(10):t.toString(10)}e.debuglog=function(t){if(t=t.toUpperCase(),!o[t])if(s.test(t)){var r=n.pid;o[t]=function(){var n=e.format.apply(e,arguments);console.error("%s %d: %s",t,r,n)}}else o[t]=function(){};return o[t]},e.inspect=u,u.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},u.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},e.types=r(4936),e.isArray=v,e.isBoolean=g,e.isNull=y,e.isNullOrUndefined=function(t){return null==t},e.isNumber=m,e.isString=x,e.isSymbol=function(t){return"symbol"==typeof t},e.isUndefined=b,e.isRegExp=_,e.types.isRegExp=_,e.isObject=w,e.isDate=T,e.types.isDate=T,e.isError=k,e.types.isNativeError=k,e.isFunction=A,e.isPrimitive=function(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||void 0===t},e.isBuffer=r(45920);var E=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function L(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.log=function(){var t,r;console.log("%s - %s",(r=[S((t=new Date).getHours()),S(t.getMinutes()),S(t.getSeconds())].join(":"),[t.getDate(),E[t.getMonth()],r].join(" ")),e.format.apply(e,arguments))},e.inherits=r(42018),e._extend=function(t,e){if(!e||!w(e))return t;for(var r=Object.keys(e),n=r.length;n--;)t[r[n]]=e[r[n]];return t};var C="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function P(t,e){if(!t){var r=new Error("Promise was rejected with a falsy value");r.reason=t,t=r}return e(t)}e.promisify=function(t){if("function"!=typeof t)throw new TypeError('The "original" argument must be of type Function');if(C&&t[C]){var e;if("function"!=typeof(e=t[C]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(e,C,{value:e,enumerable:!1,writable:!1,configurable:!0}),e}function e(){for(var e,r,n=new Promise((function(t,n){e=t,r=n})),i=[],a=0;a<arguments.length;a++)i.push(arguments[a]);i.push((function(t,n){t?r(t):e(n)}));try{t.apply(this,i)}catch(t){r(t)}return n}return Object.setPrototypeOf(e,Object.getPrototypeOf(t)),C&&Object.defineProperty(e,C,{value:e,enumerable:!1,writable:!1,configurable:!0}),Object.defineProperties(e,i(t))},e.promisify.custom=C,e.callbackify=function(t){if("function"!=typeof t)throw new TypeError('The "original" argument must be of type Function');function e(){for(var e=[],r=0;r<arguments.length;r++)e.push(arguments[r]);var i=e.pop();if("function"!=typeof i)throw new TypeError("The last argument must be of type Function");var a=this,o=function(){return i.apply(a,arguments)};t.apply(this,e).then((function(t){n.nextTick(o.bind(null,null,t))}),(function(t){n.nextTick(P.bind(null,t,o))}))}return Object.setPrototypeOf(e,Object.getPrototypeOf(t)),Object.defineProperties(e,i(t)),e}},40372:function(t,e,r){var n=r(86249);t.exports=function(t){return n("webgl",t)}},21099:function(t,e,r){"use strict";var n=r(31353),i=r(72077),a=r(6614),o=r(40383),s=a("Object.prototype.toString"),l=r(84543)(),u="undefined"==typeof globalThis?r.g:globalThis,c=i(),f=a("String.prototype.slice"),h={},p=Object.getPrototypeOf;l&&o&&p&&n(c,(function(t){if("function"==typeof u[t]){var e=new u[t];if(Symbol.toStringTag in e){var r=p(e),n=o(r,Symbol.toStringTag);if(!n){var i=p(r);n=o(i,Symbol.toStringTag)}h[t]=n.get}}}));var d=r(9187);t.exports=function(t){return!!d(t)&&(l&&Symbol.toStringTag in t?function(t){var e=!1;return n(h,(function(r,n){if(!e)try{var i=r.call(t);i===n&&(e=i)}catch(t){}})),e}(t):f(s(t),8,-1))}},3961:function(t,e,r){var n=r(63489),i=r(56131),a=n.instance();function o(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}o.prototype=new n.baseCalendar,i(o.prototype,{name:"Chinese",jdEpoch:1721425.5,hasYearZero:!1,minMonth:0,firstMonth:0,minDay:1,regionalOptions:{"":{name:"Chinese",epochs:["BEC","EC"],monthNumbers:function(t,e){if("string"==typeof t){var r=t.match(l);return r?r[0]:""}var n=this._validateYear(t),i=t.month(),a=""+this.toChineseMonth(n,i);return e&&a.length<2&&(a="0"+a),this.isIntercalaryMonth(n,i)&&(a+="i"),a},monthNames:function(t){if("string"==typeof t){var e=t.match(u);return e?e[0]:""}var r=this._validateYear(t),n=t.month(),i=["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"][this.toChineseMonth(r,n)-1];return this.isIntercalaryMonth(r,n)&&(i="闰"+i),i},monthNamesShort:function(t){if("string"==typeof t){var e=t.match(c);return e?e[0]:""}var r=this._validateYear(t),n=t.month(),i=["一","二","三","四","五","六","七","八","九","十","十一","十二"][this.toChineseMonth(r,n)-1];return this.isIntercalaryMonth(r,n)&&(i="闰"+i),i},parseMonth:function(t,e){t=this._validateYear(t);var r,n=parseInt(e);if(isNaN(n))"闰"===e[0]&&(r=!0,e=e.substring(1)),"月"===e[e.length-1]&&(e=e.substring(0,e.length-1)),n=1+["一","二","三","四","五","六","七","八","九","十","十一","十二"].indexOf(e);else{var i=e[e.length-1];r="i"===i||"I"===i}return this.toMonthIndex(t,n,r)},dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:1,isRTL:!1}},_validateYear:function(t,e){if(t.year&&(t=t.year()),"number"!=typeof t||t<1888||t>2111)throw e.replace(/\{0\}/,this.local.name);return t},toMonthIndex:function(t,e,r){var i=this.intercalaryMonth(t);if(r&&e!==i||e<1||e>12)throw n.local.invalidMonth.replace(/\{0\}/,this.local.name);return i?!r&&e<=i?e-1:e:e-1},toChineseMonth:function(t,e){t.year&&(e=(t=t.year()).month());var r=this.intercalaryMonth(t);if(e<0||e>(r?12:11))throw n.local.invalidMonth.replace(/\{0\}/,this.local.name);return r?e<r?e+1:e:e+1},intercalaryMonth:function(t){return t=this._validateYear(t),f[t-f[0]]>>13},isIntercalaryMonth:function(t,e){t.year&&(e=(t=t.year()).month());var r=this.intercalaryMonth(t);return!!r&&r===e},leapYear:function(t){return 0!==this.intercalaryMonth(t)},weekOfYear:function(t,e,r){var i,o=this._validateYear(t,n.local.invalidyear),s=h[o-h[0]],l=s>>9&4095,u=s>>5&15,c=31&s;(i=a.newDate(l,u,c)).add(4-(i.dayOfWeek()||7),"d");var f=this.toJD(t,e,r)-i.toJD();return 1+Math.floor(f/7)},monthsInYear:function(t){return this.leapYear(t)?13:12},daysInMonth:function(t,e){t.year&&(e=t.month(),t=t.year()),t=this._validateYear(t);var r=f[t-f[0]];if(e>(r>>13?12:11))throw n.local.invalidMonth.replace(/\{0\}/,this.local.name);return r&1<<12-e?30:29},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,s,r,n.local.invalidDate);t=this._validateYear(i.year()),e=i.month(),r=i.day();var o=this.isIntercalaryMonth(t,e),s=this.toChineseMonth(t,e),l=function(t,e,r,n,i){var a,o,s;if("object"==typeof t)o=t,a=e||{};else{var l;if(!("number"==typeof t&&t>=1888&&t<=2111))throw new Error("Lunar year outside range 1888-2111");if(!("number"==typeof e&&e>=1&&e<=12))throw new Error("Lunar month outside range 1 - 12");if(!("number"==typeof r&&r>=1&&r<=30))throw new Error("Lunar day outside range 1 - 30");"object"==typeof n?(l=!1,a=n):(l=!!n,a={}),o={year:t,month:e,day:r,isIntercalary:l}}s=o.day-1;var u,c=f[o.year-f[0]],p=c>>13;u=p&&(o.month>p||o.isIntercalary)?o.month:o.month-1;for(var d=0;d<u;d++)s+=c&1<<12-d?30:29;var v=h[o.year-h[0]],g=new Date(v>>9&4095,(v>>5&15)-1,(31&v)+s);return a.year=g.getFullYear(),a.month=1+g.getMonth(),a.day=g.getDate(),a}(t,s,r,o);return a.toJD(l.year,l.month,l.day)},fromJD:function(t){var e=a.fromJD(t),r=function(t,e,r,n){var i,a;if("object"==typeof t)i=t,a=e||{};else{if(!("number"==typeof t&&t>=1888&&t<=2111))throw new Error("Solar year outside range 1888-2111");if(!("number"==typeof e&&e>=1&&e<=12))throw new Error("Solar month outside range 1 - 12");if(!("number"==typeof r&&r>=1&&r<=31))throw new Error("Solar day outside range 1 - 31");i={year:t,month:e,day:r},a={}}var o=h[i.year-h[0]],s=i.year<<9|i.month<<5|i.day;a.year=s>=o?i.year:i.year-1,o=h[a.year-h[0]];var l,u=new Date(o>>9&4095,(o>>5&15)-1,31&o),c=new Date(i.year,i.month-1,i.day);l=Math.round((c-u)/864e5);var p,d=f[a.year-f[0]];for(p=0;p<13;p++){var v=d&1<<12-p?30:29;if(l<v)break;l-=v}var g=d>>13;return!g||p<g?(a.isIntercalary=!1,a.month=1+p):p===g?(a.isIntercalary=!0,a.month=p):(a.isIntercalary=!1,a.month=p),a.day=1+l,a}(e.year(),e.month(),e.day()),n=this.toMonthIndex(r.year,r.month,r.isIntercalary);return this.newDate(r.year,n,r.day)},fromString:function(t){var e=t.match(s),r=this._validateYear(+e[1]),n=+e[2],i=!!e[3],a=this.toMonthIndex(r,n,i),o=+e[4];return this.newDate(r,a,o)},add:function(t,e,r){var n=t.year(),i=t.month(),a=this.isIntercalaryMonth(n,i),s=this.toChineseMonth(n,i),l=Object.getPrototypeOf(o.prototype).add.call(this,t,e,r);if("y"===r){var u=l.year(),c=l.month(),f=this.isIntercalaryMonth(u,s),h=a&&f?this.toMonthIndex(u,s,!0):this.toMonthIndex(u,s,!1);h!==c&&l.month(h)}return l}});var s=/^\s*(-?\d\d\d\d|\d\d)[-/](\d?\d)([iI]?)[-/](\d?\d)/m,l=/^\d?\d[iI]?/m,u=/^闰?十?[一二三四五六七八九]?月/m,c=/^闰?十?[一二三四五六七八九]?/m;n.calendars.chinese=o;var f=[1887,5780,5802,19157,2742,50359,1198,2646,46378,7466,3412,30122,5482,67949,2396,5294,43597,6732,6954,36181,2772,4954,18781,2396,54427,5274,6730,47781,5800,6868,21210,4790,59703,2350,5270,46667,3402,3496,38325,1388,4782,18735,2350,52374,6804,7498,44457,2906,1388,29294,4700,63789,6442,6804,56138,5802,2772,38235,1210,4698,22827,5418,63125,3476,5802,43701,2484,5302,27223,2646,70954,7466,3412,54698,5482,2412,38062,5294,2636,32038,6954,60245,2772,4826,43357,2394,5274,39501,6730,72357,5800,5844,53978,4790,2358,38039,5270,87627,3402,3496,54708,5484,4782,43311,2350,3222,27978,7498,68965,2904,5484,45677,4700,6444,39573,6804,6986,19285,2772,62811,1210,4698,47403,5418,5780,38570,5546,76469,2420,5302,51799,2646,5414,36501,3412,5546,18869,2412,54446,5276,6732,48422,6822,2900,28010,4826,92509,2394,5274,55883,6730,6820,47956,5812,2778,18779,2358,62615,5270,5450,46757,3492,5556,27318,4718,67887,2350,3222,52554,7498,3428,38252,5468,4700,31022,6444,64149,6804,6986,43861,2772,5338,35421,2650,70955,5418,5780,54954,5546,2740,38074,5302,2646,29991,3366,61011,3412,5546,43445,2412,5294,35406,6732,72998,6820,6996,52586,2778,2396,38045,5274,6698,23333,6820,64338,5812,2746,43355,2358,5270,39499,5450,79525,3492,5548],h=[1887,966732,967231,967733,968265,968766,969297,969798,970298,970829,971330,971830,972362,972863,973395,973896,974397,974928,975428,975929,976461,976962,977462,977994,978494,979026,979526,980026,980558,981059,981559,982091,982593,983124,983624,984124,984656,985157,985656,986189,986690,987191,987722,988222,988753,989254,989754,990286,990788,991288,991819,992319,992851,993352,993851,994383,994885,995385,995917,996418,996918,997450,997949,998481,998982,999483,1000014,1000515,1001016,1001548,1002047,1002578,1003080,1003580,1004111,1004613,1005113,1005645,1006146,1006645,1007177,1007678,1008209,1008710,1009211,1009743,1010243,1010743,1011275,1011775,1012306,1012807,1013308,1013840,1014341,1014841,1015373,1015874,1016404,1016905,1017405,1017937,1018438,1018939,1019471,1019972,1020471,1021002,1021503,1022035,1022535,1023036,1023568,1024069,1024568,1025100,1025601,1026102,1026633,1027133,1027666,1028167,1028666,1029198,1029699,1030199,1030730,1031231,1031763,1032264,1032764,1033296,1033797,1034297,1034828,1035329,1035830,1036362,1036861,1037393,1037894,1038394,1038925,1039427,1039927,1040459,1040959,1041491,1041992,1042492,1043023,1043524,1044024,1044556,1045057,1045558,1046090,1046590,1047121,1047622,1048122,1048654,1049154,1049655,1050187,1050689,1051219,1051720,1052220,1052751,1053252,1053752,1054284,1054786,1055285,1055817,1056317,1056849,1057349,1057850,1058382,1058883,1059383,1059915,1060415,1060947,1061447,1061947,1062479,1062981,1063480,1064012,1064514,1065014,1065545,1066045,1066577,1067078,1067578,1068110,1068611,1069112,1069642,1070142,1070674,1071175,1071675,1072207,1072709,1073209,1073740,1074241,1074741,1075273,1075773,1076305,1076807,1077308,1077839,1078340,1078840,1079372,1079871,1080403,1080904]},38751:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}a.prototype=new n.baseCalendar,i(a.prototype,{name:"Coptic",jdEpoch:1825029.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Coptic",epochs:["BAM","AM"],monthNames:["Thout","Paopi","Hathor","Koiak","Tobi","Meshir","Paremhat","Paremoude","Pashons","Paoni","Epip","Mesori","Pi Kogi Enavot"],monthNamesShort:["Tho","Pao","Hath","Koi","Tob","Mesh","Pat","Pad","Pash","Pao","Epi","Meso","PiK"],dayNames:["Tkyriaka","Pesnau","Pshoment","Peftoou","Ptiou","Psoou","Psabbaton"],dayNamesShort:["Tky","Pes","Psh","Pef","Pti","Pso","Psa"],dayNamesMin:["Tk","Pes","Psh","Pef","Pt","Pso","Psa"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==3||t%4==-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[""].invalidYear),13},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(13===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return(t=i.year())<0&&t++,i.day()+30*(i.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e=Math.floor(t)+.5-this.jdEpoch,r=Math.floor((e-Math.floor((e+366)/1461))/365)+1;r<=0&&r--,e=Math.floor(t)+.5-this.newDate(r,1,1).toJD();var n=Math.floor(e/30)+1,i=e-30*(n-1)+1;return this.newDate(r,n,i)}}),n.calendars.coptic=a},86825:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}a.prototype=new n.baseCalendar,i(a.prototype,{name:"Discworld",jdEpoch:1721425.5,daysPerMonth:[16,32,32,32,32,32,32,32,32,32,32,32,32],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Discworld",epochs:["BUC","UC"],monthNames:["Ick","Offle","February","March","April","May","June","Grune","August","Spune","Sektober","Ember","December"],monthNamesShort:["Ick","Off","Feb","Mar","Apr","May","Jun","Gru","Aug","Spu","Sek","Emb","Dec"],dayNames:["Sunday","Octeday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Oct","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Oc","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:2,isRTL:!1}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),!1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),13},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),400},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/8)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]},daysInWeek:function(){return 8},dayOfWeek:function(t,e,r){return(this._validate(t,e,r,n.local.invalidDate).day()+1)%8},weekDay:function(t,e,r){var n=this.dayOfWeek(t,e,r);return n>=2&&n<=6},extraInfo:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return{century:o[Math.floor((i.year()-1)/100)+1]||""}},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=i.year()+(i.year()<0?1:0),e=i.month(),(r=i.day())+(e>1?16:0)+(e>2?32*(e-2):0)+400*(t-1)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t+.5)-Math.floor(this.jdEpoch)-1;var e=Math.floor(t/400)+1;t-=400*(e-1),t+=t>15?16:0;var r=Math.floor(t/32)+1,n=t-32*(r-1)+1;return this.newDate(e<=0?e-1:e,r,n)}});var o={20:"Fruitbat",21:"Anchovy"};n.calendars.discworld=a},37715:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}a.prototype=new n.baseCalendar,i(a.prototype,{name:"Ethiopian",jdEpoch:1724220.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Ethiopian",epochs:["BEE","EE"],monthNames:["Meskerem","Tikemet","Hidar","Tahesas","Tir","Yekatit","Megabit","Miazia","Genbot","Sene","Hamle","Nehase","Pagume"],monthNamesShort:["Mes","Tik","Hid","Tah","Tir","Yek","Meg","Mia","Gen","Sen","Ham","Neh","Pag"],dayNames:["Ehud","Segno","Maksegno","Irob","Hamus","Arb","Kidame"],dayNamesShort:["Ehu","Seg","Mak","Iro","Ham","Arb","Kid"],dayNamesMin:["Eh","Se","Ma","Ir","Ha","Ar","Ki"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==3||t%4==-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[""].invalidYear),13},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(13===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return(t=i.year())<0&&t++,i.day()+30*(i.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e=Math.floor(t)+.5-this.jdEpoch,r=Math.floor((e-Math.floor((e+366)/1461))/365)+1;r<=0&&r--,e=Math.floor(t)+.5-this.newDate(r,1,1).toJD();var n=Math.floor(e/30)+1,i=e-30*(n-1)+1;return this.newDate(r,n,i)}}),n.calendars.ethiopian=a},99384:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}function o(t,e){return t-e*Math.floor(t/e)}a.prototype=new n.baseCalendar,i(a.prototype,{name:"Hebrew",jdEpoch:347995.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29,29],hasYearZero:!1,minMonth:1,firstMonth:7,minDay:1,regionalOptions:{"":{name:"Hebrew",epochs:["BAM","AM"],monthNames:["Nisan","Iyar","Sivan","Tammuz","Av","Elul","Tishrei","Cheshvan","Kislev","Tevet","Shevat","Adar","Adar II"],monthNamesShort:["Nis","Iya","Siv","Tam","Av","Elu","Tis","Che","Kis","Tev","She","Ada","Ad2"],dayNames:["Yom Rishon","Yom Sheni","Yom Shlishi","Yom Revi'i","Yom Chamishi","Yom Shishi","Yom Shabbat"],dayNamesShort:["Ris","She","Shl","Rev","Cha","Shi","Sha"],dayNamesMin:["Ri","She","Shl","Re","Ch","Shi","Sha"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return this._leapYear(e.year())},_leapYear:function(t){return o(7*(t=t<0?t+1:t)+1,19)<7},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),this._leapYear(t.year?t.year():t)?13:12},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){return t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year(),this.toJD(-1===t?1:t+1,7,1)-this.toJD(t,7,1)},daysInMonth:function(t,e){return t.year&&(e=t.month(),t=t.year()),this._validate(t,e,this.minDay,n.local.invalidMonth),12===e&&this.leapYear(t)||8===e&&5===o(this.daysInYear(t),10)?30:9===e&&3===o(this.daysInYear(t),10)?29:this.daysPerMonth[e-1]},weekDay:function(t,e,r){return 6!==this.dayOfWeek(t,e,r)},extraInfo:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return{yearType:(this.leapYear(i)?"embolismic":"common")+" "+["deficient","regular","complete"][this.daysInYear(i)%10-3]}},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=i.year(),e=i.month(),r=i.day();var a=t<=0?t+1:t,o=this.jdEpoch+this._delay1(a)+this._delay2(a)+r+1;if(e<7){for(var s=7;s<=this.monthsInYear(t);s++)o+=this.daysInMonth(t,s);for(s=1;s<e;s++)o+=this.daysInMonth(t,s)}else for(s=7;s<e;s++)o+=this.daysInMonth(t,s);return o},_delay1:function(t){var e=Math.floor((235*t-234)/19),r=12084+13753*e,n=29*e+Math.floor(r/25920);return o(3*(n+1),7)<3&&n++,n},_delay2:function(t){var e=this._delay1(t-1),r=this._delay1(t);return this._delay1(t+1)-r==356?2:r-e==382?1:0},fromJD:function(t){t=Math.floor(t)+.5;for(var e=Math.floor(98496*(t-this.jdEpoch)/35975351)-1;t>=this.toJD(-1===e?1:e+1,7,1);)e++;for(var r=t<this.toJD(e,1,1)?7:1;t>this.toJD(e,r,this.daysInMonth(e,r));)r++;var n=t-this.toJD(e,r,1)+1;return this.newDate(e,r,n)}}),n.calendars.hebrew=a},43805:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}a.prototype=new n.baseCalendar,i(a.prototype,{name:"Islamic",jdEpoch:1948439.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Islamic",epochs:["BH","AH"],monthNames:["Muharram","Safar","Rabi' al-awwal","Rabi' al-thani","Jumada al-awwal","Jumada al-thani","Rajab","Sha'aban","Ramadan","Shawwal","Dhu al-Qi'dah","Dhu al-Hijjah"],monthNamesShort:["Muh","Saf","Rab1","Rab2","Jum1","Jum2","Raj","Sha'","Ram","Shaw","DhuQ","DhuH"],dayNames:["Yawm al-ahad","Yawm al-ithnayn","Yawm ath-thulaathaa'","Yawm al-arbi'aa'","Yawm al-khamīs","Yawm al-jum'a","Yawm as-sabt"],dayNamesShort:["Aha","Ith","Thu","Arb","Kha","Jum","Sab"],dayNamesMin:["Ah","It","Th","Ar","Kh","Ju","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!1}},leapYear:function(t){return(11*this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year()+14)%30<11},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){return this.leapYear(t)?355:354},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=i.year(),e=i.month(),t=t<=0?t+1:t,(r=i.day())+Math.ceil(29.5*(e-1))+354*(t-1)+Math.floor((3+11*t)/30)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t)+.5;var e=Math.floor((30*(t-this.jdEpoch)+10646)/10631);e=e<=0?e-1:e;var r=Math.min(12,Math.ceil((t-29-this.toJD(e,1,1))/29.5)+1),n=t-this.toJD(e,r,1)+1;return this.newDate(e,r,n)}}),n.calendars.islamic=a},88874:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}a.prototype=new n.baseCalendar,i(a.prototype,{name:"Julian",jdEpoch:1721423.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Julian",epochs:["BC","AD"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"mm/dd/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()<0?e.year()+1:e.year())%4==0},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(4-(n.dayOfWeek()||7),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=i.year(),e=i.month(),r=i.day(),t<0&&t++,e<=2&&(t--,e+=12),Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+r-1524.5},fromJD:function(t){var e=Math.floor(t+.5)+1524,r=Math.floor((e-122.1)/365.25),n=Math.floor(365.25*r),i=Math.floor((e-n)/30.6001),a=i-Math.floor(i<14?1:13),o=r-Math.floor(a>2?4716:4715),s=e-n-Math.floor(30.6001*i);return o<=0&&o--,this.newDate(o,a,s)}}),n.calendars.julian=a},83290:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}function o(t,e){return t-e*Math.floor(t/e)}function s(t,e){return o(t-1,e)+1}a.prototype=new n.baseCalendar,i(a.prototype,{name:"Mayan",jdEpoch:584282.5,hasYearZero:!0,minMonth:0,firstMonth:0,minDay:0,regionalOptions:{"":{name:"Mayan",epochs:["",""],monthNames:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"],monthNamesShort:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"],dayNames:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],dayNamesShort:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],dayNamesMin:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],digits:null,dateFormat:"YYYY.m.d",firstDay:0,isRTL:!1,haabMonths:["Pop","Uo","Zip","Zotz","Tzec","Xul","Yaxkin","Mol","Chen","Yax","Zac","Ceh","Mac","Kankin","Muan","Pax","Kayab","Cumku","Uayeb"],tzolkinMonths:["Imix","Ik","Akbal","Kan","Chicchan","Cimi","Manik","Lamat","Muluc","Oc","Chuen","Eb","Ben","Ix","Men","Cib","Caban","Etznab","Cauac","Ahau"]}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),!1},formatYear:function(t){t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year();var e=Math.floor(t/400);return t%=400,t+=t<0?400:0,e+"."+Math.floor(t/20)+"."+t%20},forYear:function(t){if((t=t.split(".")).length<3)throw"Invalid Mayan year";for(var e=0,r=0;r<t.length;r++){var n=parseInt(t[r],10);if(Math.abs(n)>19||r>0&&n<0)throw"Invalid Mayan year";e=20*e+n}return e},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),18},weekOfYear:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate),0},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),360},daysInMonth:function(t,e){return this._validate(t,e,this.minDay,n.local.invalidMonth),20},daysInWeek:function(){return 5},dayOfWeek:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate).day()},weekDay:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate),!0},extraInfo:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate).toJD(),a=this._toHaab(i),o=this._toTzolkin(i);return{haabMonthName:this.local.haabMonths[a[0]-1],haabMonth:a[0],haabDay:a[1],tzolkinDayName:this.local.tzolkinMonths[o[0]-1],tzolkinDay:o[0],tzolkinTrecena:o[1]}},_toHaab:function(t){var e=o(8+(t-=this.jdEpoch)+340,365);return[Math.floor(e/20)+1,o(e,20)]},_toTzolkin:function(t){return[s(20+(t-=this.jdEpoch),20),s(t+4,13)]},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return i.day()+20*i.month()+360*i.year()+this.jdEpoch},fromJD:function(t){t=Math.floor(t)+.5-this.jdEpoch;var e=Math.floor(t/360);t%=360,t+=t<0?360:0;var r=Math.floor(t/20),n=t%20;return this.newDate(e,r,n)}}),n.calendars.mayan=a},29108:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}a.prototype=new n.baseCalendar;var o=n.instance("gregorian");i(a.prototype,{name:"Nanakshahi",jdEpoch:2257673.5,daysPerMonth:[31,31,31,31,31,30,30,30,30,30,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Nanakshahi",epochs:["BN","AN"],monthNames:["Chet","Vaisakh","Jeth","Harh","Sawan","Bhadon","Assu","Katak","Maghar","Poh","Magh","Phagun"],monthNamesShort:["Che","Vai","Jet","Har","Saw","Bha","Ass","Kat","Mgr","Poh","Mgh","Pha"],dayNames:["Somvaar","Mangalvar","Budhvaar","Veervaar","Shukarvaar","Sanicharvaar","Etvaar"],dayNamesShort:["Som","Mangal","Budh","Veer","Shukar","Sanichar","Et"],dayNamesMin:["So","Ma","Bu","Ve","Sh","Sa","Et"],digits:null,dateFormat:"dd-mm-yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[""].invalidYear);return o.leapYear(e.year()+(e.year()<1?1:0)+1469)},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(1-(n.dayOfWeek()||7),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidMonth);(t=i.year())<0&&t++;for(var a=i.day(),s=1;s<i.month();s++)a+=this.daysPerMonth[s-1];return a+o.toJD(t+1468,3,13)},fromJD:function(t){t=Math.floor(t+.5);for(var e=Math.floor((t-(this.jdEpoch-1))/366);t>=this.toJD(e+1,1,1);)e++;for(var r=t-Math.floor(this.toJD(e,1,1)+.5)+1,n=1;r>this.daysInMonth(e,n);)r-=this.daysInMonth(e,n),n++;return this.newDate(e,n,r)}}),n.calendars.nanakshahi=a},55422:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}a.prototype=new n.baseCalendar,i(a.prototype,{name:"Nepali",jdEpoch:1700709.5,daysPerMonth:[31,31,32,32,31,30,30,29,30,29,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,daysPerYear:365,regionalOptions:{"":{name:"Nepali",epochs:["BBS","ABS"],monthNames:["Baisakh","Jestha","Ashadh","Shrawan","Bhadra","Ashwin","Kartik","Mangsir","Paush","Mangh","Falgun","Chaitra"],monthNamesShort:["Bai","Je","As","Shra","Bha","Ash","Kar","Mang","Pau","Ma","Fal","Chai"],dayNames:["Aaitabaar","Sombaar","Manglbaar","Budhabaar","Bihibaar","Shukrabaar","Shanibaar"],dayNamesShort:["Aaita","Som","Mangl","Budha","Bihi","Shukra","Shani"],dayNamesMin:["Aai","So","Man","Bu","Bi","Shu","Sha"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:1,isRTL:!1}},leapYear:function(t){return this.daysInYear(t)!==this.daysPerYear},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){if(t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year(),void 0===this.NEPALI_CALENDAR_DATA[t])return this.daysPerYear;for(var e=0,r=this.minMonth;r<=12;r++)e+=this.NEPALI_CALENDAR_DATA[t][r];return e},daysInMonth:function(t,e){return t.year&&(e=t.month(),t=t.year()),this._validate(t,e,this.minDay,n.local.invalidMonth),void 0===this.NEPALI_CALENDAR_DATA[t]?this.daysPerMonth[e-1]:this.NEPALI_CALENDAR_DATA[t][e]},weekDay:function(t,e,r){return 6!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=i.year(),e=i.month(),r=i.day();var a=n.instance(),o=0,s=e,l=t;this._createMissingCalendarData(t);var u=t-(s>9||9===s&&r>=this.NEPALI_CALENDAR_DATA[l][0]?56:57);for(9!==e&&(o=r,s--);9!==s;)s<=0&&(s=12,l--),o+=this.NEPALI_CALENDAR_DATA[l][s],s--;return 9===e?(o+=r-this.NEPALI_CALENDAR_DATA[l][0])<0&&(o+=a.daysInYear(u)):o+=this.NEPALI_CALENDAR_DATA[l][9]-this.NEPALI_CALENDAR_DATA[l][0],a.newDate(u,1,1).add(o,"d").toJD()},fromJD:function(t){var e=n.instance().fromJD(t),r=e.year(),i=e.dayOfYear(),a=r+56;this._createMissingCalendarData(a);for(var o=9,s=this.NEPALI_CALENDAR_DATA[a][0],l=this.NEPALI_CALENDAR_DATA[a][o]-s+1;i>l;)++o>12&&(o=1,a++),l+=this.NEPALI_CALENDAR_DATA[a][o];var u=this.NEPALI_CALENDAR_DATA[a][o]-(l-i);return this.newDate(a,o,u)},_createMissingCalendarData:function(t){var e=this.daysPerMonth.slice(0);e.unshift(17);for(var r=t-1;r<t+2;r++)void 0===this.NEPALI_CALENDAR_DATA[r]&&(this.NEPALI_CALENDAR_DATA[r]=e)},NEPALI_CALENDAR_DATA:{1970:[18,31,31,32,31,31,31,30,29,30,29,30,30],1971:[18,31,31,32,31,32,30,30,29,30,29,30,30],1972:[17,31,32,31,32,31,30,30,30,29,29,30,30],1973:[19,30,32,31,32,31,30,30,30,29,30,29,31],1974:[19,31,31,32,30,31,31,30,29,30,29,30,30],1975:[18,31,31,32,32,30,31,30,29,30,29,30,30],1976:[17,31,32,31,32,31,30,30,30,29,29,30,31],1977:[18,31,32,31,32,31,31,29,30,29,30,29,31],1978:[18,31,31,32,31,31,31,30,29,30,29,30,30],1979:[18,31,31,32,32,31,30,30,29,30,29,30,30],1980:[17,31,32,31,32,31,30,30,30,29,29,30,31],1981:[18,31,31,31,32,31,31,29,30,30,29,30,30],1982:[18,31,31,32,31,31,31,30,29,30,29,30,30],1983:[18,31,31,32,32,31,30,30,29,30,29,30,30],1984:[17,31,32,31,32,31,30,30,30,29,29,30,31],1985:[18,31,31,31,32,31,31,29,30,30,29,30,30],1986:[18,31,31,32,31,31,31,30,29,30,29,30,30],1987:[18,31,32,31,32,31,30,30,29,30,29,30,30],1988:[17,31,32,31,32,31,30,30,30,29,29,30,31],1989:[18,31,31,31,32,31,31,30,29,30,29,30,30],1990:[18,31,31,32,31,31,31,30,29,30,29,30,30],1991:[18,31,32,31,32,31,30,30,29,30,29,30,30],1992:[17,31,32,31,32,31,30,30,30,29,30,29,31],1993:[18,31,31,31,32,31,31,30,29,30,29,30,30],1994:[18,31,31,32,31,31,31,30,29,30,29,30,30],1995:[17,31,32,31,32,31,30,30,30,29,29,30,30],1996:[17,31,32,31,32,31,30,30,30,29,30,29,31],1997:[18,31,31,32,31,31,31,30,29,30,29,30,30],1998:[18,31,31,32,31,31,31,30,29,30,29,30,30],1999:[17,31,32,31,32,31,30,30,30,29,29,30,31],2e3:[17,30,32,31,32,31,30,30,30,29,30,29,31],2001:[18,31,31,32,31,31,31,30,29,30,29,30,30],2002:[18,31,31,32,32,31,30,30,29,30,29,30,30],2003:[17,31,32,31,32,31,30,30,30,29,29,30,31],2004:[17,30,32,31,32,31,30,30,30,29,30,29,31],2005:[18,31,31,32,31,31,31,30,29,30,29,30,30],2006:[18,31,31,32,32,31,30,30,29,30,29,30,30],2007:[17,31,32,31,32,31,30,30,30,29,29,30,31],2008:[17,31,31,31,32,31,31,29,30,30,29,29,31],2009:[18,31,31,32,31,31,31,30,29,30,29,30,30],2010:[18,31,31,32,32,31,30,30,29,30,29,30,30],2011:[17,31,32,31,32,31,30,30,30,29,29,30,31],2012:[17,31,31,31,32,31,31,29,30,30,29,30,30],2013:[18,31,31,32,31,31,31,30,29,30,29,30,30],2014:[18,31,31,32,32,31,30,30,29,30,29,30,30],2015:[17,31,32,31,32,31,30,30,30,29,29,30,31],2016:[17,31,31,31,32,31,31,29,30,30,29,30,30],2017:[18,31,31,32,31,31,31,30,29,30,29,30,30],2018:[18,31,32,31,32,31,30,30,29,30,29,30,30],2019:[17,31,32,31,32,31,30,30,30,29,30,29,31],2020:[17,31,31,31,32,31,31,30,29,30,29,30,30],2021:[18,31,31,32,31,31,31,30,29,30,29,30,30],2022:[17,31,32,31,32,31,30,30,30,29,29,30,30],2023:[17,31,32,31,32,31,30,30,30,29,30,29,31],2024:[17,31,31,31,32,31,31,30,29,30,29,30,30],2025:[18,31,31,32,31,31,31,30,29,30,29,30,30],2026:[17,31,32,31,32,31,30,30,30,29,29,30,31],2027:[17,30,32,31,32,31,30,30,30,29,30,29,31],2028:[17,31,31,32,31,31,31,30,29,30,29,30,30],2029:[18,31,31,32,31,32,30,30,29,30,29,30,30],2030:[17,31,32,31,32,31,30,30,30,30,30,30,31],2031:[17,31,32,31,32,31,31,31,31,31,31,31,31],2032:[17,32,32,32,32,32,32,32,32,32,32,32,32],2033:[18,31,31,32,32,31,30,30,29,30,29,30,30],2034:[17,31,32,31,32,31,30,30,30,29,29,30,31],2035:[17,30,32,31,32,31,31,29,30,30,29,29,31],2036:[17,31,31,32,31,31,31,30,29,30,29,30,30],2037:[18,31,31,32,32,31,30,30,29,30,29,30,30],2038:[17,31,32,31,32,31,30,30,30,29,29,30,31],2039:[17,31,31,31,32,31,31,29,30,30,29,30,30],2040:[17,31,31,32,31,31,31,30,29,30,29,30,30],2041:[18,31,31,32,32,31,30,30,29,30,29,30,30],2042:[17,31,32,31,32,31,30,30,30,29,29,30,31],2043:[17,31,31,31,32,31,31,29,30,30,29,30,30],2044:[17,31,31,32,31,31,31,30,29,30,29,30,30],2045:[18,31,32,31,32,31,30,30,29,30,29,30,30],2046:[17,31,32,31,32,31,30,30,30,29,29,30,31],2047:[17,31,31,31,32,31,31,30,29,30,29,30,30],2048:[17,31,31,32,31,31,31,30,29,30,29,30,30],2049:[17,31,32,31,32,31,30,30,30,29,29,30,30],2050:[17,31,32,31,32,31,30,30,30,29,30,29,31],2051:[17,31,31,31,32,31,31,30,29,30,29,30,30],2052:[17,31,31,32,31,31,31,30,29,30,29,30,30],2053:[17,31,32,31,32,31,30,30,30,29,29,30,30],2054:[17,31,32,31,32,31,30,30,30,29,30,29,31],2055:[17,31,31,32,31,31,31,30,29,30,30,29,30],2056:[17,31,31,32,31,32,30,30,29,30,29,30,30],2057:[17,31,32,31,32,31,30,30,30,29,29,30,31],2058:[17,30,32,31,32,31,30,30,30,29,30,29,31],2059:[17,31,31,32,31,31,31,30,29,30,29,30,30],2060:[17,31,31,32,32,31,30,30,29,30,29,30,30],2061:[17,31,32,31,32,31,30,30,30,29,29,30,31],2062:[17,30,32,31,32,31,31,29,30,29,30,29,31],2063:[17,31,31,32,31,31,31,30,29,30,29,30,30],2064:[17,31,31,32,32,31,30,30,29,30,29,30,30],2065:[17,31,32,31,32,31,30,30,30,29,29,30,31],2066:[17,31,31,31,32,31,31,29,30,30,29,29,31],2067:[17,31,31,32,31,31,31,30,29,30,29,30,30],2068:[17,31,31,32,32,31,30,30,29,30,29,30,30],2069:[17,31,32,31,32,31,30,30,30,29,29,30,31],2070:[17,31,31,31,32,31,31,29,30,30,29,30,30],2071:[17,31,31,32,31,31,31,30,29,30,29,30,30],2072:[17,31,32,31,32,31,30,30,29,30,29,30,30],2073:[17,31,32,31,32,31,30,30,30,29,29,30,31],2074:[17,31,31,31,32,31,31,30,29,30,29,30,30],2075:[17,31,31,32,31,31,31,30,29,30,29,30,30],2076:[16,31,32,31,32,31,30,30,30,29,29,30,30],2077:[17,31,32,31,32,31,30,30,30,29,30,29,31],2078:[17,31,31,31,32,31,31,30,29,30,29,30,30],2079:[17,31,31,32,31,31,31,30,29,30,29,30,30],2080:[16,31,32,31,32,31,30,30,30,29,29,30,30],2081:[17,31,31,32,32,31,30,30,30,29,30,30,30],2082:[17,31,32,31,32,31,30,30,30,29,30,30,30],2083:[17,31,31,32,31,31,30,30,30,29,30,30,30],2084:[17,31,31,32,31,31,30,30,30,29,30,30,30],2085:[17,31,32,31,32,31,31,30,30,29,30,30,30],2086:[17,31,32,31,32,31,30,30,30,29,30,30,30],2087:[16,31,31,32,31,31,31,30,30,29,30,30,30],2088:[16,30,31,32,32,30,31,30,30,29,30,30,30],2089:[17,31,32,31,32,31,30,30,30,29,30,30,30],2090:[17,31,32,31,32,31,30,30,30,29,30,30,30],2091:[16,31,31,32,31,31,31,30,30,29,30,30,30],2092:[16,31,31,32,32,31,30,30,30,29,30,30,30],2093:[17,31,32,31,32,31,30,30,30,29,30,30,30],2094:[17,31,31,32,31,31,30,30,30,29,30,30,30],2095:[17,31,31,32,31,31,31,30,29,30,30,30,30],2096:[17,30,31,32,32,31,30,30,29,30,29,30,30],2097:[17,31,32,31,32,31,30,30,30,29,30,30,30],2098:[17,31,31,32,31,31,31,29,30,29,30,30,31],2099:[17,31,31,32,31,31,31,30,29,29,30,30,30],2100:[17,31,32,31,32,30,31,30,29,30,29,30,30]}}),n.calendars.nepali=a},94320:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}function o(t,e){return t-e*Math.floor(t/e)}a.prototype=new n.baseCalendar,i(a.prototype,{name:"Persian",jdEpoch:1948320.5,daysPerMonth:[31,31,31,31,31,31,30,30,30,30,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Persian",epochs:["BP","AP"],monthNames:["Farvardin","Ordibehesht","Khordad","Tir","Mordad","Shahrivar","Mehr","Aban","Azar","Day","Bahman","Esfand"],monthNamesShort:["Far","Ord","Kho","Tir","Mor","Sha","Meh","Aba","Aza","Day","Bah","Esf"],dayNames:["Yekshambe","Doshambe","Seshambe","Chæharshambe","Panjshambe","Jom'e","Shambe"],dayNamesShort:["Yek","Do","Se","Chæ","Panj","Jom","Sha"],dayNamesMin:["Ye","Do","Se","Ch","Pa","Jo","Sh"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return 682*((e.year()-(e.year()>0?474:473))%2820+474+38)%2816<682},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-(n.dayOfWeek()+1)%7,"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=i.year(),e=i.month(),r=i.day();var a=t-(t>=0?474:473),s=474+o(a,2820);return r+(e<=7?31*(e-1):30*(e-1)+6)+Math.floor((682*s-110)/2816)+365*(s-1)+1029983*Math.floor(a/2820)+this.jdEpoch-1},fromJD:function(t){var e=(t=Math.floor(t)+.5)-this.toJD(475,1,1),r=Math.floor(e/1029983),n=o(e,1029983),i=2820;if(1029982!==n){var a=Math.floor(n/366),s=o(n,366);i=Math.floor((2134*a+2816*s+2815)/1028522)+a+1}var l=i+2820*r+474;l=l<=0?l-1:l;var u=t-this.toJD(l,1,1)+1,c=u<=186?Math.ceil(u/31):Math.ceil((u-6)/30),f=t-this.toJD(l,c,1)+1;return this.newDate(l,c,f)}}),n.calendars.persian=a,n.calendars.jalali=a},31320:function(t,e,r){var n=r(63489),i=r(56131),a=n.instance();function o(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}o.prototype=new n.baseCalendar,i(o.prototype,{name:"Taiwan",jdEpoch:2419402.5,yearsOffset:1911,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Taiwan",epochs:["BROC","ROC"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:1,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return t=this._t2gYear(e.year()),a.leapYear(t)},weekOfYear:function(t,e,r){var i=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return t=this._t2gYear(i.year()),a.weekOfYear(t,i.month(),i.day())},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=this._t2gYear(i.year()),a.toJD(t,i.month(),i.day())},fromJD:function(t){var e=a.fromJD(t),r=this._g2tYear(e.year());return this.newDate(r,e.month(),e.day())},_t2gYear:function(t){return t+this.yearsOffset+(t>=-this.yearsOffset&&t<=-1?1:0)},_g2tYear:function(t){return t-this.yearsOffset-(t>=1&&t<=this.yearsOffset?1:0)}}),n.calendars.taiwan=o},51367:function(t,e,r){var n=r(63489),i=r(56131),a=n.instance();function o(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}o.prototype=new n.baseCalendar,i(o.prototype,{name:"Thai",jdEpoch:1523098.5,yearsOffset:543,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Thai",epochs:["BBE","BE"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return t=this._t2gYear(e.year()),a.leapYear(t)},weekOfYear:function(t,e,r){var i=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return t=this._t2gYear(i.year()),a.weekOfYear(t,i.month(),i.day())},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=this._t2gYear(i.year()),a.toJD(t,i.month(),i.day())},fromJD:function(t){var e=a.fromJD(t),r=this._g2tYear(e.year());return this.newDate(r,e.month(),e.day())},_t2gYear:function(t){return t-this.yearsOffset-(t>=1&&t<=this.yearsOffset?1:0)},_g2tYear:function(t){return t+this.yearsOffset+(t>=-this.yearsOffset&&t<=-1?1:0)}}),n.calendars.thai=o},21457:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}a.prototype=new n.baseCalendar,i(a.prototype,{name:"UmmAlQura",hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Umm al-Qura",epochs:["BH","AH"],monthNames:["Al-Muharram","Safar","Rabi' al-awwal","Rabi' Al-Thani","Jumada Al-Awwal","Jumada Al-Thani","Rajab","Sha'aban","Ramadan","Shawwal","Dhu al-Qi'dah","Dhu al-Hijjah"],monthNamesShort:["Muh","Saf","Rab1","Rab2","Jum1","Jum2","Raj","Sha'","Ram","Shaw","DhuQ","DhuH"],dayNames:["Yawm al-Ahad","Yawm al-Ithnain","Yawm al-Thalāthā’","Yawm al-Arba‘ā’","Yawm al-Khamīs","Yawm al-Jum‘a","Yawm al-Sabt"],dayNamesMin:["Ah","Ith","Th","Ar","Kh","Ju","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!0}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return 355===this.daysInYear(e.year())},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){for(var e=0,r=1;r<=12;r++)e+=this.daysInMonth(t,r);return e},daysInMonth:function(t,e){for(var r=this._validate(t,e,this.minDay,n.local.invalidMonth).toJD()-24e5+.5,i=0,a=0;a<o.length;a++){if(o[a]>r)return o[i]-o[i-1];i++}return 30},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate),a=12*(i.year()-1)+i.month()-15292;return i.day()+o[a-1]-1+24e5-.5},fromJD:function(t){for(var e=t-24e5+.5,r=0,n=0;n<o.length&&!(o[n]>e);n++)r++;var i=r+15292,a=Math.floor((i-1)/12),s=a+1,l=i-12*a,u=e-o[r-1]+1;return this.newDate(s,l,u)},isValid:function(t,e,r){var i=n.baseCalendar.prototype.isValid.apply(this,arguments);return i&&(i=(t=null!=t.year?t.year:t)>=1276&&t<=1500),i},_validate:function(t,e,r,i){var a=n.baseCalendar.prototype._validate.apply(this,arguments);if(a.year<1276||a.year>1500)throw i.replace(/\{0\}/,this.local.name);return a}}),n.calendars.ummalqura=a;var o=[20,50,79,109,138,168,197,227,256,286,315,345,374,404,433,463,492,522,551,581,611,641,670,700,729,759,788,818,847,877,906,936,965,995,1024,1054,1083,1113,1142,1172,1201,1231,1260,1290,1320,1350,1379,1409,1438,1468,1497,1527,1556,1586,1615,1645,1674,1704,1733,1763,1792,1822,1851,1881,1910,1940,1969,1999,2028,2058,2087,2117,2146,2176,2205,2235,2264,2294,2323,2353,2383,2413,2442,2472,2501,2531,2560,2590,2619,2649,2678,2708,2737,2767,2796,2826,2855,2885,2914,2944,2973,3003,3032,3062,3091,3121,3150,3180,3209,3239,3268,3298,3327,3357,3386,3416,3446,3476,3505,3535,3564,3594,3623,3653,3682,3712,3741,3771,3800,3830,3859,3889,3918,3948,3977,4007,4036,4066,4095,4125,4155,4185,4214,4244,4273,4303,4332,4362,4391,4421,4450,4480,4509,4539,4568,4598,4627,4657,4686,4716,4745,4775,4804,4834,4863,4893,4922,4952,4981,5011,5040,5070,5099,5129,5158,5188,5218,5248,5277,5307,5336,5366,5395,5425,5454,5484,5513,5543,5572,5602,5631,5661,5690,5720,5749,5779,5808,5838,5867,5897,5926,5956,5985,6015,6044,6074,6103,6133,6162,6192,6221,6251,6281,6311,6340,6370,6399,6429,6458,6488,6517,6547,6576,6606,6635,6665,6694,6724,6753,6783,6812,6842,6871,6901,6930,6960,6989,7019,7048,7078,7107,7137,7166,7196,7225,7255,7284,7314,7344,7374,7403,7433,7462,7492,7521,7551,7580,7610,7639,7669,7698,7728,7757,7787,7816,7846,7875,7905,7934,7964,7993,8023,8053,8083,8112,8142,8171,8201,8230,8260,8289,8319,8348,8378,8407,8437,8466,8496,8525,8555,8584,8614,8643,8673,8702,8732,8761,8791,8821,8850,8880,8909,8938,8968,8997,9027,9056,9086,9115,9145,9175,9205,9234,9264,9293,9322,9352,9381,9410,9440,9470,9499,9529,9559,9589,9618,9648,9677,9706,9736,9765,9794,9824,9853,9883,9913,9943,9972,10002,10032,10061,10090,10120,10149,10178,10208,10237,10267,10297,10326,10356,10386,10415,10445,10474,10504,10533,10562,10592,10621,10651,10680,10710,10740,10770,10799,10829,10858,10888,10917,10947,10976,11005,11035,11064,11094,11124,11153,11183,11213,11242,11272,11301,11331,11360,11389,11419,11448,11478,11507,11537,11567,11596,11626,11655,11685,11715,11744,11774,11803,11832,11862,11891,11921,11950,11980,12010,12039,12069,12099,12128,12158,12187,12216,12246,12275,12304,12334,12364,12393,12423,12453,12483,12512,12542,12571,12600,12630,12659,12688,12718,12747,12777,12807,12837,12866,12896,12926,12955,12984,13014,13043,13072,13102,13131,13161,13191,13220,13250,13280,13310,13339,13368,13398,13427,13456,13486,13515,13545,13574,13604,13634,13664,13693,13723,13752,13782,13811,13840,13870,13899,13929,13958,13988,14018,14047,14077,14107,14136,14166,14195,14224,14254,14283,14313,14342,14372,14401,14431,14461,14490,14520,14550,14579,14609,14638,14667,14697,14726,14756,14785,14815,14844,14874,14904,14933,14963,14993,15021,15051,15081,15110,15140,15169,15199,15228,15258,15287,15317,15347,15377,15406,15436,15465,15494,15524,15553,15582,15612,15641,15671,15701,15731,15760,15790,15820,15849,15878,15908,15937,15966,15996,16025,16055,16085,16114,16144,16174,16204,16233,16262,16292,16321,16350,16380,16409,16439,16468,16498,16528,16558,16587,16617,16646,16676,16705,16734,16764,16793,16823,16852,16882,16912,16941,16971,17001,17030,17060,17089,17118,17148,17177,17207,17236,17266,17295,17325,17355,17384,17414,17444,17473,17502,17532,17561,17591,17620,17650,17679,17709,17738,17768,17798,17827,17857,17886,17916,17945,17975,18004,18034,18063,18093,18122,18152,18181,18211,18241,18270,18300,18330,18359,18388,18418,18447,18476,18506,18535,18565,18595,18625,18654,18684,18714,18743,18772,18802,18831,18860,18890,18919,18949,18979,19008,19038,19068,19098,19127,19156,19186,19215,19244,19274,19303,19333,19362,19392,19422,19452,19481,19511,19540,19570,19599,19628,19658,19687,19717,19746,19776,19806,19836,19865,19895,19924,19954,19983,20012,20042,20071,20101,20130,20160,20190,20219,20249,20279,20308,20338,20367,20396,20426,20455,20485,20514,20544,20573,20603,20633,20662,20692,20721,20751,20780,20810,20839,20869,20898,20928,20957,20987,21016,21046,21076,21105,21135,21164,21194,21223,21253,21282,21312,21341,21371,21400,21430,21459,21489,21519,21548,21578,21607,21637,21666,21696,21725,21754,21784,21813,21843,21873,21902,21932,21962,21991,22021,22050,22080,22109,22138,22168,22197,22227,22256,22286,22316,22346,22375,22405,22434,22464,22493,22522,22552,22581,22611,22640,22670,22700,22730,22759,22789,22818,22848,22877,22906,22936,22965,22994,23024,23054,23083,23113,23143,23173,23202,23232,23261,23290,23320,23349,23379,23408,23438,23467,23497,23527,23556,23586,23616,23645,23674,23704,23733,23763,23792,23822,23851,23881,23910,23940,23970,23999,24029,24058,24088,24117,24147,24176,24206,24235,24265,24294,24324,24353,24383,24413,24442,24472,24501,24531,24560,24590,24619,24648,24678,24707,24737,24767,24796,24826,24856,24885,24915,24944,24974,25003,25032,25062,25091,25121,25150,25180,25210,25240,25269,25299,25328,25358,25387,25416,25446,25475,25505,25534,25564,25594,25624,25653,25683,25712,25742,25771,25800,25830,25859,25888,25918,25948,25977,26007,26037,26067,26096,26126,26155,26184,26214,26243,26272,26302,26332,26361,26391,26421,26451,26480,26510,26539,26568,26598,26627,26656,26686,26715,26745,26775,26805,26834,26864,26893,26923,26952,26982,27011,27041,27070,27099,27129,27159,27188,27218,27248,27277,27307,27336,27366,27395,27425,27454,27484,27513,27542,27572,27602,27631,27661,27691,27720,27750,27779,27809,27838,27868,27897,27926,27956,27985,28015,28045,28074,28104,28134,28163,28193,28222,28252,28281,28310,28340,28369,28399,28428,28458,28488,28517,28547,28577,28607,28636,28665,28695,28724,28754,28783,28813,28843,28872,28901,28931,28960,28990,29019,29049,29078,29108,29137,29167,29196,29226,29255,29285,29315,29345,29375,29404,29434,29463,29492,29522,29551,29580,29610,29640,29669,29699,29729,29759,29788,29818,29847,29876,29906,29935,29964,29994,30023,30053,30082,30112,30141,30171,30200,30230,30259,30289,30318,30348,30378,30408,30437,30467,30496,30526,30555,30585,30614,30644,30673,30703,30732,30762,30791,30821,30850,30880,30909,30939,30968,30998,31027,31057,31086,31116,31145,31175,31204,31234,31263,31293,31322,31352,31381,31411,31441,31471,31500,31530,31559,31589,31618,31648,31676,31706,31736,31766,31795,31825,31854,31884,31913,31943,31972,32002,32031,32061,32090,32120,32150,32180,32209,32239,32268,32298,32327,32357,32386,32416,32445,32475,32504,32534,32563,32593,32622,32652,32681,32711,32740,32770,32799,32829,32858,32888,32917,32947,32976,33006,33035,33065,33094,33124,33153,33183,33213,33243,33272,33302,33331,33361,33390,33420,33450,33479,33509,33539,33568,33598,33627,33657,33686,33716,33745,33775,33804,33834,33863,33893,33922,33952,33981,34011,34040,34069,34099,34128,34158,34187,34217,34247,34277,34306,34336,34365,34395,34424,34454,34483,34512,34542,34571,34601,34631,34660,34690,34719,34749,34778,34808,34837,34867,34896,34926,34955,34985,35015,35044,35074,35103,35133,35162,35192,35222,35251,35280,35310,35340,35370,35399,35429,35458,35488,35517,35547,35576,35605,35635,35665,35694,35723,35753,35782,35811,35841,35871,35901,35930,35960,35989,36019,36048,36078,36107,36136,36166,36195,36225,36254,36284,36314,36343,36373,36403,36433,36462,36492,36521,36551,36580,36610,36639,36669,36698,36728,36757,36786,36816,36845,36875,36904,36934,36963,36993,37022,37052,37081,37111,37141,37170,37200,37229,37259,37288,37318,37347,37377,37406,37436,37465,37495,37524,37554,37584,37613,37643,37672,37701,37731,37760,37790,37819,37849,37878,37908,37938,37967,37997,38027,38056,38085,38115,38144,38174,38203,38233,38262,38292,38322,38351,38381,38410,38440,38469,38499,38528,38558,38587,38617,38646,38676,38705,38735,38764,38794,38823,38853,38882,38912,38941,38971,39001,39030,39059,39089,39118,39148,39178,39208,39237,39267,39297,39326,39355,39385,39414,39444,39473,39503,39532,39562,39592,39621,39650,39680,39709,39739,39768,39798,39827,39857,39886,39916,39946,39975,40005,40035,40064,40094,40123,40153,40182,40212,40241,40271,40300,40330,40359,40389,40418,40448,40477,40507,40536,40566,40595,40625,40655,40685,40714,40744,40773,40803,40832,40862,40892,40921,40951,40980,41009,41039,41068,41098,41127,41157,41186,41216,41245,41275,41304,41334,41364,41393,41422,41452,41481,41511,41540,41570,41599,41629,41658,41688,41718,41748,41777,41807,41836,41865,41894,41924,41953,41983,42012,42042,42072,42102,42131,42161,42190,42220,42249,42279,42308,42337,42367,42397,42426,42456,42485,42515,42545,42574,42604,42633,42662,42692,42721,42751,42780,42810,42839,42869,42899,42929,42958,42988,43017,43046,43076,43105,43135,43164,43194,43223,43253,43283,43312,43342,43371,43401,43430,43460,43489,43519,43548,43578,43607,43637,43666,43696,43726,43755,43785,43814,43844,43873,43903,43932,43962,43991,44021,44050,44080,44109,44139,44169,44198,44228,44258,44287,44317,44346,44375,44405,44434,44464,44493,44523,44553,44582,44612,44641,44671,44700,44730,44759,44788,44818,44847,44877,44906,44936,44966,44996,45025,45055,45084,45114,45143,45172,45202,45231,45261,45290,45320,45350,45380,45409,45439,45468,45498,45527,45556,45586,45615,45644,45674,45704,45733,45763,45793,45823,45852,45882,45911,45940,45970,45999,46028,46058,46088,46117,46147,46177,46206,46236,46265,46295,46324,46354,46383,46413,46442,46472,46501,46531,46560,46590,46620,46649,46679,46708,46738,46767,46797,46826,46856,46885,46915,46944,46974,47003,47033,47063,47092,47122,47151,47181,47210,47240,47269,47298,47328,47357,47387,47417,47446,47476,47506,47535,47565,47594,47624,47653,47682,47712,47741,47771,47800,47830,47860,47890,47919,47949,47978,48008,48037,48066,48096,48125,48155,48184,48214,48244,48273,48303,48333,48362,48392,48421,48450,48480,48509,48538,48568,48598,48627,48657,48687,48717,48746,48776,48805,48834,48864,48893,48922,48952,48982,49011,49041,49071,49100,49130,49160,49189,49218,49248,49277,49306,49336,49365,49395,49425,49455,49484,49514,49543,49573,49602,49632,49661,49690,49720,49749,49779,49809,49838,49868,49898,49927,49957,49986,50016,50045,50075,50104,50133,50163,50192,50222,50252,50281,50311,50340,50370,50400,50429,50459,50488,50518,50547,50576,50606,50635,50665,50694,50724,50754,50784,50813,50843,50872,50902,50931,50960,50990,51019,51049,51078,51108,51138,51167,51197,51227,51256,51286,51315,51345,51374,51403,51433,51462,51492,51522,51552,51582,51611,51641,51670,51699,51729,51758,51787,51816,51846,51876,51906,51936,51965,51995,52025,52054,52083,52113,52142,52171,52200,52230,52260,52290,52319,52349,52379,52408,52438,52467,52497,52526,52555,52585,52614,52644,52673,52703,52733,52762,52792,52822,52851,52881,52910,52939,52969,52998,53028,53057,53087,53116,53146,53176,53205,53235,53264,53294,53324,53353,53383,53412,53441,53471,53500,53530,53559,53589,53619,53648,53678,53708,53737,53767,53796,53825,53855,53884,53913,53943,53973,54003,54032,54062,54092,54121,54151,54180,54209,54239,54268,54297,54327,54357,54387,54416,54446,54476,54505,54535,54564,54593,54623,54652,54681,54711,54741,54770,54800,54830,54859,54889,54919,54948,54977,55007,55036,55066,55095,55125,55154,55184,55213,55243,55273,55302,55332,55361,55391,55420,55450,55479,55508,55538,55567,55597,55627,55657,55686,55716,55745,55775,55804,55834,55863,55892,55922,55951,55981,56011,56040,56070,56100,56129,56159,56188,56218,56247,56276,56306,56335,56365,56394,56424,56454,56483,56513,56543,56572,56601,56631,56660,56690,56719,56749,56778,56808,56837,56867,56897,56926,56956,56985,57015,57044,57074,57103,57133,57162,57192,57221,57251,57280,57310,57340,57369,57399,57429,57458,57487,57517,57546,57576,57605,57634,57664,57694,57723,57753,57783,57813,57842,57871,57901,57930,57959,57989,58018,58048,58077,58107,58137,58167,58196,58226,58255,58285,58314,58343,58373,58402,58432,58461,58491,58521,58551,58580,58610,58639,58669,58698,58727,58757,58786,58816,58845,58875,58905,58934,58964,58994,59023,59053,59082,59111,59141,59170,59200,59229,59259,59288,59318,59348,59377,59407,59436,59466,59495,59525,59554,59584,59613,59643,59672,59702,59731,59761,59791,59820,59850,59879,59909,59939,59968,59997,60027,60056,60086,60115,60145,60174,60204,60234,60264,60293,60323,60352,60381,60411,60440,60469,60499,60528,60558,60588,60618,60648,60677,60707,60736,60765,60795,60824,60853,60883,60912,60942,60972,61002,61031,61061,61090,61120,61149,61179,61208,61237,61267,61296,61326,61356,61385,61415,61445,61474,61504,61533,61563,61592,61621,61651,61680,61710,61739,61769,61799,61828,61858,61888,61917,61947,61976,62006,62035,62064,62094,62123,62153,62182,62212,62242,62271,62301,62331,62360,62390,62419,62448,62478,62507,62537,62566,62596,62625,62655,62685,62715,62744,62774,62803,62832,62862,62891,62921,62950,62980,63009,63039,63069,63099,63128,63157,63187,63216,63246,63275,63305,63334,63363,63393,63423,63453,63482,63512,63541,63571,63600,63630,63659,63689,63718,63747,63777,63807,63836,63866,63895,63925,63955,63984,64014,64043,64073,64102,64131,64161,64190,64220,64249,64279,64309,64339,64368,64398,64427,64457,64486,64515,64545,64574,64603,64633,64663,64692,64722,64752,64782,64811,64841,64870,64899,64929,64958,64987,65017,65047,65076,65106,65136,65166,65195,65225,65254,65283,65313,65342,65371,65401,65431,65460,65490,65520,65549,65579,65608,65638,65667,65697,65726,65755,65785,65815,65844,65874,65903,65933,65963,65992,66022,66051,66081,66110,66140,66169,66199,66228,66258,66287,66317,66346,66376,66405,66435,66465,66494,66524,66553,66583,66612,66641,66671,66700,66730,66760,66789,66819,66849,66878,66908,66937,66967,66996,67025,67055,67084,67114,67143,67173,67203,67233,67262,67292,67321,67351,67380,67409,67439,67468,67497,67527,67557,67587,67617,67646,67676,67705,67735,67764,67793,67823,67852,67882,67911,67941,67971,68e3,68030,68060,68089,68119,68148,68177,68207,68236,68266,68295,68325,68354,68384,68414,68443,68473,68502,68532,68561,68591,68620,68650,68679,68708,68738,68768,68797,68827,68857,68886,68916,68946,68975,69004,69034,69063,69092,69122,69152,69181,69211,69240,69270,69300,69330,69359,69388,69418,69447,69476,69506,69535,69565,69595,69624,69654,69684,69713,69743,69772,69802,69831,69861,69890,69919,69949,69978,70008,70038,70067,70097,70126,70156,70186,70215,70245,70274,70303,70333,70362,70392,70421,70451,70481,70510,70540,70570,70599,70629,70658,70687,70717,70746,70776,70805,70835,70864,70894,70924,70954,70983,71013,71042,71071,71101,71130,71159,71189,71218,71248,71278,71308,71337,71367,71397,71426,71455,71485,71514,71543,71573,71602,71632,71662,71691,71721,71751,71781,71810,71839,71869,71898,71927,71957,71986,72016,72046,72075,72105,72135,72164,72194,72223,72253,72282,72311,72341,72370,72400,72429,72459,72489,72518,72548,72577,72607,72637,72666,72695,72725,72754,72784,72813,72843,72872,72902,72931,72961,72991,73020,73050,73080,73109,73139,73168,73197,73227,73256,73286,73315,73345,73375,73404,73434,73464,73493,73523,73552,73581,73611,73640,73669,73699,73729,73758,73788,73818,73848,73877,73907,73936,73965,73995,74024,74053,74083,74113,74142,74172,74202,74231,74261,74291,74320,74349,74379,74408,74437,74467,74497,74526,74556,74586,74615,74645,74675,74704,74733,74763,74792,74822,74851,74881,74910,74940,74969,74999,75029,75058,75088,75117,75147,75176,75206,75235,75264,75294,75323,75353,75383,75412,75442,75472,75501,75531,75560,75590,75619,75648,75678,75707,75737,75766,75796,75826,75856,75885,75915,75944,75974,76003,76032,76062,76091,76121,76150,76180,76210,76239,76269,76299,76328,76358,76387,76416,76446,76475,76505,76534,76564,76593,76623,76653,76682,76712,76741,76771,76801,76830,76859,76889,76918,76948,76977,77007,77036,77066,77096,77125,77155,77185,77214,77243,77273,77302,77332,77361,77390,77420,77450,77479,77509,77539,77569,77598,77627,77657,77686,77715,77745,77774,77804,77833,77863,77893,77923,77952,77982,78011,78041,78070,78099,78129,78158,78188,78217,78247,78277,78307,78336,78366,78395,78425,78454,78483,78513,78542,78572,78601,78631,78661,78690,78720,78750,78779,78808,78838,78867,78897,78926,78956,78985,79015,79044,79074,79104,79133,79163,79192,79222,79251,79281,79310,79340,79369,79399,79428,79458,79487,79517,79546,79576,79606,79635,79665,79695,79724,79753,79783,79812,79841,79871,79900,79930,79960,79990]},63489:function(t,e,r){var n=r(56131);function i(){this.regionalOptions=[],this.regionalOptions[""]={invalidCalendar:"Calendar {0} not found",invalidDate:"Invalid {0} date",invalidMonth:"Invalid {0} month",invalidYear:"Invalid {0} year",differentCalendars:"Cannot mix {0} and {1} dates"},this.local=this.regionalOptions[""],this.calendars={},this._localCals={}}function a(t,e,r,n){if(this._calendar=t,this._year=e,this._month=r,this._day=n,0===this._calendar._validateLevel&&!this._calendar.isValid(this._year,this._month,this._day))throw(u.local.invalidDate||u.regionalOptions[""].invalidDate).replace(/\{0\}/,this._calendar.local.name)}function o(t,e){return"000000".substring(0,e-(t=""+t).length)+t}function s(){this.shortYearCutoff="+10"}function l(t){this.local=this.regionalOptions[t]||this.regionalOptions[""]}n(i.prototype,{instance:function(t,e){t=(t||"gregorian").toLowerCase(),e=e||"";var r=this._localCals[t+"-"+e];if(!r&&this.calendars[t]&&(r=new this.calendars[t](e),this._localCals[t+"-"+e]=r),!r)throw(this.local.invalidCalendar||this.regionalOptions[""].invalidCalendar).replace(/\{0\}/,t);return r},newDate:function(t,e,r,n,i){return(n=(null!=t&&t.year?t.calendar():"string"==typeof n?this.instance(n,i):n)||this.instance()).newDate(t,e,r)},substituteDigits:function(t){return function(e){return(e+"").replace(/[0-9]/g,(function(e){return t[e]}))}},substituteChineseDigits:function(t,e){return function(r){for(var n="",i=0;r>0;){var a=r%10;n=(0===a?"":t[a]+e[i])+n,i++,r=Math.floor(r/10)}return 0===n.indexOf(t[1]+e[1])&&(n=n.substr(1)),n||t[0]}}}),n(a.prototype,{newDate:function(t,e,r){return this._calendar.newDate(null==t?this:t,e,r)},year:function(t){return 0===arguments.length?this._year:this.set(t,"y")},month:function(t){return 0===arguments.length?this._month:this.set(t,"m")},day:function(t){return 0===arguments.length?this._day:this.set(t,"d")},date:function(t,e,r){if(!this._calendar.isValid(t,e,r))throw(u.local.invalidDate||u.regionalOptions[""].invalidDate).replace(/\{0\}/,this._calendar.local.name);return this._year=t,this._month=e,this._day=r,this},leapYear:function(){return this._calendar.leapYear(this)},epoch:function(){return this._calendar.epoch(this)},formatYear:function(){return this._calendar.formatYear(this)},monthOfYear:function(){return this._calendar.monthOfYear(this)},weekOfYear:function(){return this._calendar.weekOfYear(this)},daysInYear:function(){return this._calendar.daysInYear(this)},dayOfYear:function(){return this._calendar.dayOfYear(this)},daysInMonth:function(){return this._calendar.daysInMonth(this)},dayOfWeek:function(){return this._calendar.dayOfWeek(this)},weekDay:function(){return this._calendar.weekDay(this)},extraInfo:function(){return this._calendar.extraInfo(this)},add:function(t,e){return this._calendar.add(this,t,e)},set:function(t,e){return this._calendar.set(this,t,e)},compareTo:function(t){if(this._calendar.name!==t._calendar.name)throw(u.local.differentCalendars||u.regionalOptions[""].differentCalendars).replace(/\{0\}/,this._calendar.local.name).replace(/\{1\}/,t._calendar.local.name);var e=this._year!==t._year?this._year-t._year:this._month!==t._month?this.monthOfYear()-t.monthOfYear():this._day-t._day;return 0===e?0:e<0?-1:1},calendar:function(){return this._calendar},toJD:function(){return this._calendar.toJD(this)},fromJD:function(t){return this._calendar.fromJD(t)},toJSDate:function(){return this._calendar.toJSDate(this)},fromJSDate:function(t){return this._calendar.fromJSDate(t)},toString:function(){return(this.year()<0?"-":"")+o(Math.abs(this.year()),4)+"-"+o(this.month(),2)+"-"+o(this.day(),2)}}),n(s.prototype,{_validateLevel:0,newDate:function(t,e,r){return null==t?this.today():(t.year&&(this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate),r=t.day(),e=t.month(),t=t.year()),new a(this,t,e,r))},today:function(){return this.fromJSDate(new Date)},epoch:function(t){return this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[""].invalidYear).year()<0?this.local.epochs[0]:this.local.epochs[1]},formatYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[""].invalidYear);return(e.year()<0?"-":"")+o(Math.abs(e.year()),4)},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[""].invalidYear),12},monthOfYear:function(t,e){var r=this._validate(t,e,this.minDay,u.local.invalidMonth||u.regionalOptions[""].invalidMonth);return(r.month()+this.monthsInYear(r)-this.firstMonth)%this.monthsInYear(r)+this.minMonth},fromMonthOfYear:function(t,e){var r=(e+this.firstMonth-2*this.minMonth)%this.monthsInYear(t)+this.minMonth;return this._validate(t,r,this.minDay,u.local.invalidMonth||u.regionalOptions[""].invalidMonth),r},daysInYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[""].invalidYear);return this.leapYear(e)?366:365},dayOfYear:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate);return n.toJD()-this.newDate(n.year(),this.fromMonthOfYear(n.year(),this.minMonth),this.minDay).toJD()+1},daysInWeek:function(){return 7},dayOfWeek:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate);return(Math.floor(this.toJD(n))+2)%this.daysInWeek()},extraInfo:function(t,e,r){return this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate),{}},add:function(t,e,r){return this._validate(t,this.minMonth,this.minDay,u.local.invalidDate||u.regionalOptions[""].invalidDate),this._correctAdd(t,this._add(t,e,r),e,r)},_add:function(t,e,r){if(this._validateLevel++,"d"===r||"w"===r){var n=t.toJD()+e*("w"===r?this.daysInWeek():1),i=t.calendar().fromJD(n);return this._validateLevel--,[i.year(),i.month(),i.day()]}try{var a=t.year()+("y"===r?e:0),o=t.monthOfYear()+("m"===r?e:0);i=t.day(),"y"===r?(t.month()!==this.fromMonthOfYear(a,o)&&(o=this.newDate(a,t.month(),this.minDay).monthOfYear()),o=Math.min(o,this.monthsInYear(a)),i=Math.min(i,this.daysInMonth(a,this.fromMonthOfYear(a,o)))):"m"===r&&(function(t){for(;o<t.minMonth;)a--,o+=t.monthsInYear(a);for(var e=t.monthsInYear(a);o>e-1+t.minMonth;)a++,o-=e,e=t.monthsInYear(a)}(this),i=Math.min(i,this.daysInMonth(a,this.fromMonthOfYear(a,o))));var s=[a,this.fromMonthOfYear(a,o),i];return this._validateLevel--,s}catch(t){throw this._validateLevel--,t}},_correctAdd:function(t,e,r,n){if(!(this.hasYearZero||"y"!==n&&"m"!==n||0!==e[0]&&t.year()>0==e[0]>0)){var i={y:[1,1,"y"],m:[1,this.monthsInYear(-1),"m"],w:[this.daysInWeek(),this.daysInYear(-1),"d"],d:[1,this.daysInYear(-1),"d"]}[n],a=r<0?-1:1;e=this._add(t,r*i[0]+a*i[1],i[2])}return t.date(e[0],e[1],e[2])},set:function(t,e,r){this._validate(t,this.minMonth,this.minDay,u.local.invalidDate||u.regionalOptions[""].invalidDate);var n="y"===r?e:t.year(),i="m"===r?e:t.month(),a="d"===r?e:t.day();return"y"!==r&&"m"!==r||(a=Math.min(a,this.daysInMonth(n,i))),t.date(n,i,a)},isValid:function(t,e,r){this._validateLevel++;var n=this.hasYearZero||0!==t;if(n){var i=this.newDate(t,e,this.minDay);n=e>=this.minMonth&&e-this.minMonth<this.monthsInYear(i)&&r>=this.minDay&&r-this.minDay<this.daysInMonth(i)}return this._validateLevel--,n},toJSDate:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate);return u.instance().fromJD(this.toJD(n)).toJSDate()},fromJSDate:function(t){return this.fromJD(u.instance().fromJSDate(t).toJD())},_validate:function(t,e,r,n){if(t.year){if(0===this._validateLevel&&this.name!==t.calendar().name)throw(u.local.differentCalendars||u.regionalOptions[""].differentCalendars).replace(/\{0\}/,this.local.name).replace(/\{1\}/,t.calendar().local.name);return t}try{if(this._validateLevel++,1===this._validateLevel&&!this.isValid(t,e,r))throw n.replace(/\{0\}/,this.local.name);var i=this.newDate(t,e,r);return this._validateLevel--,i}catch(t){throw this._validateLevel--,t}}}),l.prototype=new s,n(l.prototype,{name:"Gregorian",jdEpoch:1721425.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Gregorian",epochs:["BCE","CE"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"mm/dd/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[""].invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==0&&(t%100!=0||t%400==0)},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(4-(n.dayOfWeek()||7),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,u.local.invalidMonth||u.regionalOptions[""].invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate);t=n.year(),e=n.month(),r=n.day(),t<0&&t++,e<3&&(e+=12,t--);var i=Math.floor(t/100),a=2-i+Math.floor(i/4);return Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+r+a-1524.5},fromJD:function(t){var e=Math.floor(t+.5),r=Math.floor((e-1867216.25)/36524.25),n=1524+(r=e+1+r-Math.floor(r/4)),i=Math.floor((n-122.1)/365.25),a=Math.floor(365.25*i),o=Math.floor((n-a)/30.6001),s=n-a-Math.floor(30.6001*o),l=o-(o>13.5?13:1),u=i-(l>2.5?4716:4715);return u<=0&&u--,this.newDate(u,l,s)},toJSDate:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate),i=new Date(n.year(),n.month()-1,n.day());return i.setHours(0),i.setMinutes(0),i.setSeconds(0),i.setMilliseconds(0),i.setHours(i.getHours()>12?i.getHours()+2:0),i},fromJSDate:function(t){return this.newDate(t.getFullYear(),t.getMonth()+1,t.getDate())}});var u=t.exports=new i;u.cdate=a,u.baseCalendar=s,u.calendars.gregorian=l},94338:function(t,e,r){var n=r(56131),i=r(63489);n(i.regionalOptions[""],{invalidArguments:"Invalid arguments",invalidFormat:"Cannot format a date from another calendar",missingNumberAt:"Missing number at position {0}",unknownNameAt:"Unknown name at position {0}",unexpectedLiteralAt:"Unexpected literal at position {0}",unexpectedText:"Additional text found at end"}),i.local=i.regionalOptions[""],n(i.cdate.prototype,{formatDate:function(t,e){return"string"!=typeof t&&(e=t,t=""),this._calendar.formatDate(t||"",this,e)}}),n(i.baseCalendar.prototype,{UNIX_EPOCH:i.instance().newDate(1970,1,1).toJD(),SECS_PER_DAY:86400,TICKS_EPOCH:i.instance().jdEpoch,TICKS_PER_DAY:864e9,ATOM:"yyyy-mm-dd",COOKIE:"D, dd M yyyy",FULL:"DD, MM d, yyyy",ISO_8601:"yyyy-mm-dd",JULIAN:"J",RFC_822:"D, d M yy",RFC_850:"DD, dd-M-yy",RFC_1036:"D, d M yy",RFC_1123:"D, d M yyyy",RFC_2822:"D, d M yyyy",RSS:"D, d M yy",TICKS:"!",TIMESTAMP:"@",W3C:"yyyy-mm-dd",formatDate:function(t,e,r){if("string"!=typeof t&&(r=e,e=t,t=""),!e)return"";if(e.calendar()!==this)throw i.local.invalidFormat||i.regionalOptions[""].invalidFormat;t=t||this.local.dateFormat;for(var n,a,o,s=(r=r||{}).dayNamesShort||this.local.dayNamesShort,l=r.dayNames||this.local.dayNames,u=r.monthNumbers||this.local.monthNumbers,c=r.monthNamesShort||this.local.monthNamesShort,f=r.monthNames||this.local.monthNames,h=(r.calculateWeek||this.local.calculateWeek,function(e,r){for(var n=1;_+n<t.length&&t.charAt(_+n)===e;)n++;return _+=n-1,Math.floor(n/(r||1))>1}),p=function(t,e,r,n){var i=""+e;if(h(t,n))for(;i.length<r;)i="0"+i;return i},d=this,v=function(t){return"function"==typeof u?u.call(d,t,h("m")):m(p("m",t.month(),2))},g=function(t,e){return e?"function"==typeof f?f.call(d,t):f[t.month()-d.minMonth]:"function"==typeof c?c.call(d,t):c[t.month()-d.minMonth]},y=this.local.digits,m=function(t){return r.localNumbers&&y?y(t):t},x="",b=!1,_=0;_<t.length;_++)if(b)"'"!==t.charAt(_)||h("'")?x+=t.charAt(_):b=!1;else switch(t.charAt(_)){case"d":x+=m(p("d",e.day(),2));break;case"D":x+=("D",n=e.dayOfWeek(),a=s,o=l,h("D")?o[n]:a[n]);break;case"o":x+=p("o",e.dayOfYear(),3);break;case"w":x+=p("w",e.weekOfYear(),2);break;case"m":x+=v(e);break;case"M":x+=g(e,h("M"));break;case"y":x+=h("y",2)?e.year():(e.year()%100<10?"0":"")+e.year()%100;break;case"Y":h("Y",2),x+=e.formatYear();break;case"J":x+=e.toJD();break;case"@":x+=(e.toJD()-this.UNIX_EPOCH)*this.SECS_PER_DAY;break;case"!":x+=(e.toJD()-this.TICKS_EPOCH)*this.TICKS_PER_DAY;break;case"'":h("'")?x+="'":b=!0;break;default:x+=t.charAt(_)}return x},parseDate:function(t,e,r){if(null==e)throw i.local.invalidArguments||i.regionalOptions[""].invalidArguments;if(""===(e="object"==typeof e?e.toString():e+""))return null;t=t||this.local.dateFormat;var n=(r=r||{}).shortYearCutoff||this.shortYearCutoff;n="string"!=typeof n?n:this.today().year()%100+parseInt(n,10);for(var a=r.dayNamesShort||this.local.dayNamesShort,o=r.dayNames||this.local.dayNames,s=r.parseMonth||this.local.parseMonth,l=r.monthNumbers||this.local.monthNumbers,u=r.monthNamesShort||this.local.monthNamesShort,c=r.monthNames||this.local.monthNames,f=-1,h=-1,p=-1,d=-1,v=-1,g=!1,y=!1,m=function(e,r){for(var n=1;M+n<t.length&&t.charAt(M+n)===e;)n++;return M+=n-1,Math.floor(n/(r||1))>1},x=function(t,r){var n=m(t,r),a=[2,3,n?4:2,n?4:2,10,11,20]["oyYJ@!".indexOf(t)+1],o=new RegExp("^-?\\d{1,"+a+"}"),s=e.substring(A).match(o);if(!s)throw(i.local.missingNumberAt||i.regionalOptions[""].missingNumberAt).replace(/\{0\}/,A);return A+=s[0].length,parseInt(s[0],10)},b=this,_=function(){if("function"==typeof l){m("m");var t=l.call(b,e.substring(A));return A+=t.length,t}return x("m")},w=function(t,r,n,a){for(var o=m(t,a)?n:r,s=0;s<o.length;s++)if(e.substr(A,o[s].length).toLowerCase()===o[s].toLowerCase())return A+=o[s].length,s+b.minMonth;throw(i.local.unknownNameAt||i.regionalOptions[""].unknownNameAt).replace(/\{0\}/,A)},T=function(){if("function"==typeof c){var t=m("M")?c.call(b,e.substring(A)):u.call(b,e.substring(A));return A+=t.length,t}return w("M",u,c)},k=function(){if(e.charAt(A)!==t.charAt(M))throw(i.local.unexpectedLiteralAt||i.regionalOptions[""].unexpectedLiteralAt).replace(/\{0\}/,A);A++},A=0,M=0;M<t.length;M++)if(y)"'"!==t.charAt(M)||m("'")?k():y=!1;else switch(t.charAt(M)){case"d":d=x("d");break;case"D":w("D",a,o);break;case"o":v=x("o");break;case"w":x("w");break;case"m":p=_();break;case"M":p=T();break;case"y":var S=M;g=!m("y",2),M=S,h=x("y",2);break;case"Y":h=x("Y",2);break;case"J":f=x("J")+.5,"."===e.charAt(A)&&(A++,x("J"));break;case"@":f=x("@")/this.SECS_PER_DAY+this.UNIX_EPOCH;break;case"!":f=x("!")/this.TICKS_PER_DAY+this.TICKS_EPOCH;break;case"*":A=e.length;break;case"'":m("'")?k():y=!0;break;default:k()}if(A<e.length)throw i.local.unexpectedText||i.regionalOptions[""].unexpectedText;if(-1===h?h=this.today().year():h<100&&g&&(h+=-1===n?1900:this.today().year()-this.today().year()%100-(h<=n?0:100)),"string"==typeof p&&(p=s.call(this,h,p)),v>-1){p=1,d=v;for(var E=this.daysInMonth(h,p);d>E;E=this.daysInMonth(h,p))p++,d-=E}return f>-1?this.fromJD(f):this.newDate(h,p,d)},determineDate:function(t,e,r,n,i){r&&"object"!=typeof r&&(i=n,n=r,r=null),"string"!=typeof n&&(i=n,n="");var a=this;return e=e?e.newDate():null,null==t?e:"string"==typeof t?function(t){try{return a.parseDate(n,t,i)}catch(t){}for(var e=((t=t.toLowerCase()).match(/^c/)&&r?r.newDate():null)||a.today(),o=/([+-]?[0-9]+)\s*(d|w|m|y)?/g,s=o.exec(t);s;)e.add(parseInt(s[1],10),s[2]||"d"),s=o.exec(t);return e}(t):"number"==typeof t?isNaN(t)||t===1/0||t===-1/0?e:a.today().add(t,"d"):a.newDate(t)}})},69862:function(){},40964:function(){},72077:function(t,e,r){"use strict";var n=["BigInt64Array","BigUint64Array","Float32Array","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Uint8Array","Uint8ClampedArray"],i="undefined"==typeof globalThis?r.g:globalThis;t.exports=function(){for(var t=[],e=0;e<n.length;e++)"function"==typeof i[n[e]]&&(t[t.length]=n[e]);return t}},81684:function(t,e,r){"use strict";function n(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function i(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}function a(){}r.d(e,{sX:function(){return $},k4:function(){return q}});var o=.7,s=1/o,l="\\s*([+-]?\\d+)\\s*",u="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",c="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",f=/^#([0-9a-f]{3,8})$/,h=new RegExp("^rgb\\(".concat(l,",").concat(l,",").concat(l,"\\)$")),p=new RegExp("^rgb\\(".concat(c,",").concat(c,",").concat(c,"\\)$")),d=new RegExp("^rgba\\(".concat(l,",").concat(l,",").concat(l,",").concat(u,"\\)$")),v=new RegExp("^rgba\\(".concat(c,",").concat(c,",").concat(c,",").concat(u,"\\)$")),g=new RegExp("^hsl\\(".concat(u,",").concat(c,",").concat(c,"\\)$")),y=new RegExp("^hsla\\(".concat(u,",").concat(c,",").concat(c,",").concat(u,"\\)$")),m={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function x(){return this.rgb().formatHex()}function b(){return this.rgb().formatRgb()}function _(t){var e,r;return t=(t+"").trim().toLowerCase(),(e=f.exec(t))?(r=e[1].length,e=parseInt(e[1],16),6===r?w(e):3===r?new A(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===r?T(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===r?T(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=h.exec(t))?new A(e[1],e[2],e[3],1):(e=p.exec(t))?new A(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=d.exec(t))?T(e[1],e[2],e[3],e[4]):(e=v.exec(t))?T(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=g.exec(t))?P(e[1],e[2]/100,e[3]/100,1):(e=y.exec(t))?P(e[1],e[2]/100,e[3]/100,e[4]):m.hasOwnProperty(t)?w(m[t]):"transparent"===t?new A(NaN,NaN,NaN,0):null}function w(t){return new A(t>>16&255,t>>8&255,255&t,1)}function T(t,e,r,n){return n<=0&&(t=e=r=NaN),new A(t,e,r,n)}function k(t,e,r,n){return 1===arguments.length?((i=t)instanceof a||(i=_(i)),i?new A((i=i.rgb()).r,i.g,i.b,i.opacity):new A):new A(t,e,r,null==n?1:n);var i}function A(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function M(){return"#".concat(C(this.r)).concat(C(this.g)).concat(C(this.b))}function S(){var t=E(this.opacity);return"".concat(1===t?"rgb(":"rgba(").concat(L(this.r),", ").concat(L(this.g),", ").concat(L(this.b)).concat(1===t?")":", ".concat(t,")"))}function E(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function L(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function C(t){return((t=L(t))<16?"0":"")+t.toString(16)}function P(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new I(t,e,r,n)}function O(t){if(t instanceof I)return new I(t.h,t.s,t.l,t.opacity);if(t instanceof a||(t=_(t)),!t)return new I;if(t instanceof I)return t;var e=(t=t.rgb()).r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),o=Math.max(e,r,n),s=NaN,l=o-i,u=(o+i)/2;return l?(s=e===o?(r-n)/l+6*(r<n):r===o?(n-e)/l+2:(e-r)/l+4,l/=u<.5?o+i:2-o-i,s*=60):l=u>0&&u<1?0:s,new I(s,l,u,t.opacity)}function I(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function D(t){return(t=(t||0)%360)<0?t+360:t}function z(t){return Math.max(0,Math.min(1,t||0))}function R(t,e,r){return 255*(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)}function F(t,e,r,n,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*r+(1+3*t+3*a-3*o)*n+o*i)/6}n(a,_,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:x,formatHex:x,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return O(this).formatHsl()},formatRgb:b,toString:b}),n(A,k,i(a,{brighter:function(t){return t=null==t?s:Math.pow(s,t),new A(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?o:Math.pow(o,t),new A(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},clamp:function(){return new A(L(this.r),L(this.g),L(this.b),E(this.opacity))},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:M,formatHex:M,formatHex8:function(){return"#".concat(C(this.r)).concat(C(this.g)).concat(C(this.b)).concat(C(255*(isNaN(this.opacity)?1:this.opacity)))},formatRgb:S,toString:S})),n(I,(function(t,e,r,n){return 1===arguments.length?O(t):new I(t,e,r,null==n?1:n)}),i(a,{brighter:function(t){return t=null==t?s:Math.pow(s,t),new I(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?o:Math.pow(o,t),new I(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new A(R(t>=240?t-240:t+120,i,n),R(t,i,n),R(t<120?t+240:t-120,i,n),this.opacity)},clamp:function(){return new I(D(this.h),z(this.s),z(this.l),E(this.opacity))},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=E(this.opacity);return"".concat(1===t?"hsl(":"hsla(").concat(D(this.h),", ").concat(100*z(this.s),"%, ").concat(100*z(this.l),"%").concat(1===t?")":", ".concat(t,")"))}}));var B=function(t){return function(){return t}};function N(t,e){var r=e-t;return r?function(t,e){return function(r){return t+r*e}}(t,r):B(isNaN(t)?e:t)}var j=function t(e){var r=function(t){return 1==(t=+t)?N:function(e,r){return r-e?function(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}(e,r,t):B(isNaN(e)?r:e)}}(e);function n(t,e){var n=r((t=k(t)).r,(e=k(e)).r),i=r(t.g,e.g),a=r(t.b,e.b),o=N(t.opacity,e.opacity);return function(e){return t.r=n(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return n.gamma=t,n}(1);function U(t){return function(e){var r,n,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(r=0;r<i;++r)n=k(e[r]),a[r]=n.r||0,o[r]=n.g||0,s[r]=n.b||0;return a=t(a),o=t(o),s=t(s),n.opacity=1,function(t){return n.r=a(t),n.g=o(t),n.b=s(t),n+""}}}function V(t,e){var r,n=e?e.length:0,i=t?Math.min(n,t.length):0,a=new Array(i),o=new Array(n);for(r=0;r<i;++r)a[r]=$(t[r],e[r]);for(;r<n;++r)o[r]=e[r];return function(t){for(r=0;r<i;++r)o[r]=a[r](t);return o}}function H(t,e){var r=new Date;return t=+t,e=+e,function(n){return r.setTime(t*(1-n)+e*n),r}}function q(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}function G(t){return G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},G(t)}function Z(t,e){var r,n={},i={};for(r in null!==t&&"object"===G(t)||(t={}),null!==e&&"object"===G(e)||(e={}),e)r in t?n[r]=$(t[r],e[r]):i[r]=e[r];return function(t){for(r in n)i[r]=n[r](t);return i}}U((function(t){var e=t.length-1;return function(r){var n=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),i=t[n],a=t[n+1],o=n>0?t[n-1]:2*i-a,s=n<e-1?t[n+2]:2*a-i;return F((r-n/e)*e,o,i,a,s)}})),U((function(t){var e=t.length;return function(r){var n=Math.floor(((r%=1)<0?++r:r)*e),i=t[(n+e-1)%e],a=t[n%e],o=t[(n+1)%e],s=t[(n+2)%e];return F((r-n/e)*e,i,a,o,s)}}));var Y=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,W=new RegExp(Y.source,"g");function X(t,e){var r,n,i,a=Y.lastIndex=W.lastIndex=0,o=-1,s=[],l=[];for(t+="",e+="";(r=Y.exec(t))&&(n=W.exec(e));)(i=n.index)>a&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(r=r[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:q(r,n)})),a=W.lastIndex;return a<e.length&&(i=e.slice(a),s[o]?s[o]+=i:s[++o]=i),s.length<2?l[0]?function(t){return function(e){return t(e)+""}}(l[0].x):function(t){return function(){return t}}(e):(e=l.length,function(t){for(var r,n=0;n<e;++n)s[(r=l[n]).i]=r.x(t);return s.join("")})}function J(t,e){e||(e=[]);var r,n=t?Math.min(e.length,t.length):0,i=e.slice();return function(a){for(r=0;r<n;++r)i[r]=t[r]*(1-a)+e[r]*a;return i}}function K(t){return K="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},K(t)}function $(t,e){var r,n,i=K(e);return null==e||"boolean"===i?B(e):("number"===i?q:"string"===i?(r=_(e))?(e=r,j):X:e instanceof _?j:e instanceof Date?H:(n=e,!ArrayBuffer.isView(n)||n instanceof DataView?Array.isArray(e)?V:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?Z:q:J))(t,e)}},40402:function(t){"use strict";t.exports=JSON.parse('["xx-small","x-small","small","medium","large","x-large","xx-large","larger","smaller"]')},83794:function(t){"use strict";t.exports=JSON.parse('["normal","condensed","semi-condensed","extra-condensed","ultra-condensed","expanded","semi-expanded","extra-expanded","ultra-expanded"]')},96209:function(t){"use strict";t.exports=JSON.parse('["normal","italic","oblique"]')},15659:function(t){"use strict";t.exports=JSON.parse('["normal","bold","bolder","lighter","100","200","300","400","500","600","700","800","900"]')},38732:function(t){"use strict";t.exports=JSON.parse('["inherit","initial","unset"]')},41901:function(t){"use strict";t.exports=JSON.parse('["caption","icon","menu","message-box","small-caption","status-bar"]')}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var a=e[n]={exports:{}};return t[n].call(a.exports,a,a.exports,r),a.exports}return r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,{a:e}),e},r.d=function(t,e){for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r(27909)}()}));

/***/ }),

/***/ 32:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

/** @module imaging/imageAnonymization
 *  @desc This file provides anonymization functionalities on DICOM images
 */
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.anonymize = void 0;
/*
 * This module provides the following functions to be exported:
 * anonymize(series: Series): Series
 */
/**
 * Anonymize a series by replacing all metadata with random values
 * @function anonymize
 * @param {Series} series - series to anonymize
 * @returns {Series} anonymized series
 */
const anonymize = function (series) {
    // anonymize series bytearray
    for (const id in series.imageIds) {
        const imageId = series.imageIds[id];
        let image = series.instances[imageId];
        if (image.dataSet) {
            for (const tag in image.dataSet.elements) {
                let element = image.dataSet.elements[tag];
                let text = "";
                const vr = element.vr;
                if (element !== undefined) {
                    let str = image.dataSet.string(tag);
                    if (str !== undefined) {
                        text = str;
                    }
                }
                if (vr) {
                    const deIdentifiedValue = makeDeIdentifiedValue(text.length, vr);
                    if (deIdentifiedValue !== undefined) {
                        for (let i = 0; i < element.length; i++) {
                            const char = deIdentifiedValue.length > i
                                ? deIdentifiedValue.charCodeAt(i)
                                : 32;
                            image.dataSet.byteArray[element.dataOffset + i] = char;
                        }
                        // @ts-ignore always string
                        image.metadata[tag] = deIdentifiedValue;
                    }
                }
            }
            image.metadata.seriesUID = image.metadata["x0020000e"];
            image.metadata.instanceUID = image.metadata["x00080018"];
            image.metadata.studyUID = image.metadata["x0020000d"];
            image.metadata.accessionNumber = image.metadata["x00080050"];
            image.metadata.studyDescription = image.metadata["x00081030"];
            image.metadata.patientName = image.metadata["x00100010"];
            image.metadata.patientBirthdate = image.metadata["x00100030"];
            image.metadata.seriesDescription = image.metadata["x0008103e"];
            image.metadata.anonymized = true;
        }
        else {
            console.warn(`No dataset found for image ${imageId}`);
        }
    }
    // update parsed metadata
    series.anonymized = true;
    series.seriesDescription = series.instances[series.imageIds[0]].metadata["x0008103e"];
    return series;
};
exports.anonymize = anonymize;
// Internal functions
/**
 * Generate a random string of a given length
 * @function makeRandomString
 * @param {number} length - length of the string to generate
 * @returns {string} random string
 */
const makeRandomString = function (length) {
    let text = "";
    const possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    for (let i = 0; i < length; i++) {
        text += possible.charAt(Math.floor(Math.random() * possible.length));
    }
    return text;
};
/**
 * Pad a number with 0s to a given size
 * @function pad
 * @param {number} num - number to pad
 * @param {number} size - size of the padded number
 * @returns {string} padded number
 */
const pad = function (num, size) {
    var s = num + "";
    while (s.length < size)
        s = "0" + s;
    return s;
};
/**
 * Make a de-identified value for a given length and VR
 * @function makeDeIdentifiedValue
 * @param {number} length - length of the value to generate
 * @param {string} vr - VR of the value to generate
 * @returns {string} de-identified value
 */
const makeDeIdentifiedValue = function (length, vr) {
    if (vr === "LO" || vr === "SH" || vr === "PN") {
        return makeRandomString(length);
    }
    else if (vr === "DA") {
        let oldDate = new Date(1900, 0, 1);
        return (oldDate.getFullYear() +
            pad(oldDate.getMonth() + 1, 2) +
            pad(oldDate.getDate(), 2));
    }
    else if (vr === "TM") {
        var now = new Date();
        return (pad(now.getHours(), 2) +
            pad(now.getMinutes(), 2) +
            pad(now.getSeconds(), 2));
    }
    else {
        return undefined;
    }
};


/***/ }),

/***/ 4540:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module imaging/imageColormaps
 *  @desc  This file provides functionalities for
 *         handling colormaps
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.HSVToRGB = exports.applyColorMap = exports.fillPixelData = exports.addColorMap = exports.getColormapsList = void 0;
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
const lodash_1 = __webpack_require__(6486);
/*
 * This module provides the following functions to be exported:
 * getColormapsList()
 * addColorMap(colormapId, colormapName, colors)
 * fillPixelData(canvas, colormapId)
 * applyColorMap(colormapId)
 * HSVToRGB(hue, sat, val)
 */
/**
 * Fill a canvas with pixelData representing the colormap
 * @instance
 * @function getColormapsList
 * @returns {Array} A list of cornerstone colormaps
 */
function getColormapsList() {
    return cornerstone_core_1.default.colors.getColormapsList();
}
exports.getColormapsList = getColormapsList;
/**
 * Add a custom color map to cornerstone list
 * @instance
 * @function addColorMap
 * @param {String} colormapId - the new colormap id
 * @param {String} colormapName - the new colormap name
 * @param {Array} colors - array containing 255 rgb colors (ie [[r,g,b], [r,g,b], ...])
 */
function addColorMap(colormapId, colormapName, colors) {
    const colormap = cornerstone_core_1.default.colors.getColormap(colormapId, null);
    colormap.setColorSchemeName(colormapName);
    let noc = colors.length;
    colormap.setNumberOfColors(noc);
    for (let i = 0; i < noc; i++) {
        let rgb = colors[i];
        colormap.insertColor(i, rgb);
    }
    return colormap;
}
exports.addColorMap = addColorMap;
/**
 * Fill a canvas with pixelData representing the colormap
 * @instance
 * @function fillPixelData
 * @param {HTMLCanvasElement} canvas - target canvas
 * @param {String} colormapId - the colormap name
 */
function fillPixelData(canvas, colormapId) {
    const ctx = canvas.getContext("2d");
    const height = canvas.height;
    const width = canvas.width;
    if (ctx) {
        const colorbar = ctx.createImageData(width, height);
        const colormap = cornerstone_core_1.default.colors.getColormap(colormapId, {});
        const lookupTable = colormap.createLookupTable();
        // Set the min and max values then the lookup table
        // will be able to return the right color for this range
        lookupTable.setTableRange(0, width);
        // Update the colorbar pixel by pixel
        for (let col = 0; col < width; col++) {
            const color = lookupTable.mapValue(col);
            for (let row = 0; row < height; row++) {
                const pixel = (col + row * width) * 4;
                colorbar.data[pixel] = color[0];
                colorbar.data[pixel + 1] = color[1];
                colorbar.data[pixel + 2] = color[2];
                colorbar.data[pixel + 3] = color[3];
            }
        }
        ctx.putImageData(colorbar, 0, 0);
    }
    else {
        console.error("No context found for canvas", canvas);
    }
}
exports.fillPixelData = fillPixelData;
/**
 * Apply a color map on a viewport
 * @instance
 * @function applyColorMap
 * @param {String} colormapId - the colormap name
 * @param {Array} viewportNames - List of viewports where to apply preset
 */
function applyColorMap(colormapId, viewportNames) {
    // for retro-compatibility
    if (!viewportNames) {
        viewportNames = cornerstone_core_1.default.getEnabledElements().map(e => e.element.id);
    }
    let colormap = cornerstone_core_1.default.colors.getColormap(colormapId, {});
    (0, lodash_1.each)(viewportNames, viewportName => {
        let element = document.getElementById(viewportName);
        if (!element) {
            console.error("No element with id:", viewportName);
            return;
        }
        let enabledElement;
        try {
            enabledElement = cornerstone_core_1.default.getEnabledElement(element);
        }
        catch (_a) {
            console.error("No enabledElement with id", viewportName);
            return;
        }
        enabledElement.options = {}; // HACK to bypass cornerstone bug
        if (!enabledElement) {
        }
        const viewport = cornerstone_core_1.default.getViewport(element);
        if (viewport) {
            viewport.colormap = colormap;
            cornerstone_core_1.default.setViewport(element, viewport);
            cornerstone_core_1.default.updateImage(element, true);
        }
    });
    return colormap;
}
exports.applyColorMap = applyColorMap;
/**
 * Converts an HSV  (Hue, Saturation, Value) color to RGB (Red, Green, Blue) color value
 * @param {Number} hue A number representing the hue color value
 * @param {Number} sat A number representing the saturation color value
 * @param {Number} val A number representing the value color value
 * @returns {Number[]} An RGB color array
 */
function HSVToRGB(hue, sat, val) {
    if (hue > 1) {
        throw new Error("HSVToRGB expects hue < 1");
    }
    const rgb = [];
    if (sat === 0) {
        rgb[0] = val;
        rgb[1] = val;
        rgb[2] = val;
        return rgb;
    }
    const hueCase = Math.floor(hue * 6);
    const frac = 6 * hue - hueCase;
    const lx = val * (1 - sat);
    const ly = val * (1 - sat * frac);
    const lz = val * (1 - sat * (1 - frac));
    switch (hueCase) {
        /* 0<hue<1/6 */
        case 0:
        case 6:
            rgb[0] = val;
            rgb[1] = lz;
            rgb[2] = lx;
            break;
        /* 1/6<hue<2/6 */
        case 1:
            rgb[0] = ly;
            rgb[1] = val;
            rgb[2] = lx;
            break;
        /* 2/6<hue<3/6 */
        case 2:
            rgb[0] = lx;
            rgb[1] = val;
            rgb[2] = lz;
            break;
        /* 3/6<hue/4/6 */
        case 3:
            rgb[0] = lx;
            rgb[1] = ly;
            rgb[2] = val;
            break;
        /* 4/6<hue<5/6 */
        case 4:
            rgb[0] = lz;
            rgb[1] = lx;
            rgb[2] = val;
            break;
        /* 5/6<hue<1 */
        case 5:
            rgb[0] = val;
            rgb[1] = lx;
            rgb[2] = ly;
            break;
    }
    return rgb;
}
exports.HSVToRGB = HSVToRGB;


/***/ }),

/***/ 4918:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

/** @module imaging/imageContours
 *  @desc This file provides functionalities to render a set of points on a canvas.
 *        Use this in order to render image contours (e.g. from binary masks).
 */
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.parseContours = void 0;
// external libraries
const lodash_1 = __webpack_require__(6486);
/*
 * This module provides the following functions to be exported:
 * parseContours(contoursData,pointBatchSize,segmentationName, viewports)
 */
/**
 * Parse raw data to contours object for each viewport
 * @export
 * @function parseContours
 * @param {Array} contoursData - Raw data
 * @param {Number} pointBatchSize - Number of points that defines a contour segment (default to 2)
 * @param {String} segmentationName - Mask object name
 * @param {Array} viewports - Viewport array ids
 * @returns {Number} Number of array elements consumed
 */
const parseContours = function (contoursData, // TODO-ts: check if this is correct @mronzoni
pointBatchSize, segmentationName, viewports) {
    let contours = {};
    (0, lodash_1.each)(viewports, viewport => {
        contours[viewport] = {};
        contours[viewport][segmentationName] = [];
        let points = contoursData[viewport];
        if (!points) {
            return;
        }
        let numberOfSlices = points[0];
        points = points.slice(1);
        (0, lodash_1.each)((0, lodash_1.range)(numberOfSlices), function () {
            let sliceSize = extractSlicePoints(contours, pointBatchSize, points, segmentationName, viewport);
            points = points.slice(sliceSize);
        });
    });
    return contours;
};
exports.parseContours = parseContours;
/* Internal module functions */
/**
 * From raw data, fill cornerstone tool data structure for ContoursTool for a single slice
 * @instance
 * @function populateContoursObject
 * @param {Number} pointBatchSize - Number of points that defines a contour segment
 * @param {Object} contours - Main contour tool object dict (to be filled)
 * @param {Number} lineNumber - Number of line to be rendered (a contour is made of n lines)
 * @param {Number} sliceNumber - Number of the slice in which the contour should be rendered
 * @param {String} segmentationName - Mask object name
 * @param {String} viewport - Viewport id
 * @param {Array} data - Raw data (array of pixel values)
 */
const populateContoursObject = function (pointBatchSize, contours, lineNumber, sliceNumber, segmentationName, viewport, data) {
    let coords = [];
    for (let i = 0; i < data.length; i += pointBatchSize) {
        let xy = data.slice(i, pointBatchSize + i);
        // always add the first item
        if (!coords.length) {
            coords.push({
                x: xy[0],
                y: xy[1],
                lines: []
            });
        }
        // add new items if different from the previous one
        else {
            //if (coords[coords.length - 1].x !== xy[0] &&
            //   coords[coords.length - 1].y !== xy[1]) {
            coords.push({
                x: xy[0],
                y: xy[1],
                lines: [
                    {
                        x: coords[coords.length - 1].x,
                        y: coords[coords.length - 1].y
                    }
                ]
            });
        }
    }
    // add line element to the first item
    if (coords[0]) {
        coords[0].lines = [
            {
                x: coords[coords.length - 1].x,
                y: coords[coords.length - 1].y
            }
        ];
    }
    contours[viewport][segmentationName][sliceNumber].lines[lineNumber] = coords;
};
/**
 * Extract each slice points from raw data array
 * @instance
 * @function extractSlicePoints
 * @param {Object} contours - Main contour tool object dict (to be filled)
 * @param {Number} pointBatchSize - Number of points that defines a contour segment (default to 2)
 * @param {Number} slicePoints - Number of contour points on a slice
 * @param {String} segmentationName - Mask object name
 * @param {String} viewport - Viewport id
 * @returns {Number} Number of array elements consumed
 */
const extractSlicePoints = function (contours, pointBatchSize, slicePoints, // TODO-ts: check if this is correct @mronzoni
segmentationName, viewport) {
    // read slice number and number of lines for current slice, then remove from array
    let sliceNumber = slicePoints[0];
    let numberOfLines = slicePoints[1];
    try {
        slicePoints = slicePoints.subarray(2);
    }
    catch (err) {
        slicePoints = slicePoints.slice(2);
    }
    let numberOfPoints = 0;
    contours[viewport][segmentationName][sliceNumber] = {
        lines: []
    };
    if (numberOfLines) {
        // for each line
        (0, lodash_1.each)((0, lodash_1.range)(numberOfLines), function (l) {
            // get number of points for current line
            let numberOfPointsPerLine = slicePoints[0];
            // compute coordinates size
            let lineCoordSize = numberOfPointsPerLine * pointBatchSize;
            // remove numberOfPointsPerLine and the coordinates for this line
            let subCoords;
            try {
                subCoords = slicePoints.subarray(1, lineCoordSize + 1);
            }
            catch (err) {
                subCoords = slicePoints.slice(1, lineCoordSize + 1);
            }
            populateContoursObject(pointBatchSize, contours, l, sliceNumber, segmentationName, viewport, subCoords);
            let lineSize = 1 + lineCoordSize;
            numberOfPoints += lineSize;
            try {
                slicePoints = slicePoints.subarray(lineSize);
            }
            catch (err) {
                slicePoints = slicePoints.slice(lineSize);
            }
        });
    }
    return 2 + numberOfPoints;
};


/***/ }),

/***/ 2606:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

/** @module imaging/imageCustomTags
 *  @desc This file provides customization functionalities on DICOM images' Byte Array
 */
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.customizeByteArray = exports.preProcessByteArray = exports.sortTags = void 0;
//import { Buffer } from "node:buffer";
/**
 * provides sorted original tags and sorted new customtags
 * @function sortAndBuildByteArray
 * @param {DataSet} dataSet - dataset original image
 * @param {MetaData} customTags - customized tags
 * @returns {Series} customized series
 */
const sortTags = function (dataSet, customTags) {
    //all tags sorted by their offset from min to max (may be unuseful if they are already sorted) TODO check with Simone
    const sortedTags = Object.values(dataSet.elements)
        .sort((a, b) => a.dataOffset - b.dataOffset)
        .map(element => ({ [element.tag]: element }));
    let shiftTotal = 0;
    //custom tags sorted by their offset from min to max (may be unuseful if they are already sorted) TODO check with Simone
    const sortedCustomTags = Object.entries(customTags)
        .map(([tag]) => {
        if (
        //image.dataSet!.elements[tag].vr === "PN" &&
        // @ts-ignore always string
        customTags[tag] === undefined ||
            // @ts-ignore always string
            customTags[tag] === null ||
            // @ts-ignore always string
            customTags[tag] === "") {
            // @ts-ignore always string
            customTags[tag] = " ";
        }
        if (
        //image.dataSet!.elements[tag].vr === "PN" &&
        // @ts-ignore always string
        customTags[tag].length % 2 !=
            0) {
            // @ts-ignore always string
            customTags[tag] = customTags[tag] + " ";
        }
        shiftTotal +=
            // @ts-ignore always string
            customTags[tag].length - dataSet.elements[tag].length;
        return {
            tag,
            // @ts-ignore always string
            value: customTags[tag],
            offset: dataSet.elements[tag].dataOffset,
            index: sortedTags.findIndex(obj => {
                for (let prop in obj) {
                    if (obj[prop].tag === tag) {
                        return true; // Found the object with the correct tag
                    }
                }
            })
        };
    })
        .sort((a, b) => a.offset - b.offset);
    return {
        sortedTags,
        sortedCustomTags,
        shiftTotal
    };
};
exports.sortTags = sortTags;
/**
 * Pre-processes the Byte Array (padding bytes for certain VR are
 * required if correspopnding value is odd)
 * @function preProcessByteArray
 * @param {DataSet} dataSet - customized tags
 * @returns {Series} customized series
 */
const preProcessByteArray = function (image) {
    if (image.dataSet) {
        for (const key in image.dataSet.elements) {
            if (Object.hasOwnProperty.call(image.dataSet.elements, key)) {
                const element = image.dataSet.elements[key];
                // Do something with the element
                if (element.dataOffset + element.length !=
                    image.dataSet.byteArray.length) {
                    console.log(element.dataOffset + element.length - 1);
                    image.dataSet.byteArray[element.dataOffset + element.length - 1] =
                        image.dataSet.byteArray[element.dataOffset + element.length - 1] ===
                            0 &&
                            (element.vr === "DS" ||
                                element.vr === "CS" ||
                                element.vr === "IS" ||
                                element.vr === "SH" ||
                                element.vr === "LO" ||
                                element.vr === "ST" ||
                                element.vr === "PN") &&
                            // @ts-ignore always string
                            typeof image.metadata[key] === "string" &&
                            // @ts-ignore always string
                            image.metadata[key].length % 2 != 0
                            ? 32
                            : image.dataSet.byteArray[element.dataOffset + element.length - 1];
                    if (element.vr === "SQ") {
                        if (element.items && element.items.length) {
                            for (let i = 0; i < element.items.length; i++) {
                                for (const key in element.items[i].dataSet.elements) {
                                    let subElement = element.items[i].dataSet.elements[key];
                                    //dont do a priori but check if metadata is odd or even before
                                    image.dataSet.byteArray[subElement.dataOffset + subElement.length - 1] =
                                        image.dataSet.byteArray[subElement.dataOffset + subElement.length - 1] === 0 &&
                                            (subElement.vr === "DS" ||
                                                subElement.vr === "CS" ||
                                                subElement.vr === "IS" ||
                                                subElement.vr === "SH" ||
                                                subElement.vr === "LO" ||
                                                subElement.vr === "ST" ||
                                                subElement.vr === "PN") &&
                                            // @ts-ignore always string
                                            typeof image.metadata[key] === "string" &&
                                            // @ts-ignore always string
                                            image.metadata[key].length % 2 != 0
                                            ? 32
                                            : image.dataSet.byteArray[subElement.dataOffset + subElement.length - 1];
                                }
                            }
                        }
                    }
                }
            }
        }
    }
};
exports.preProcessByteArray = preProcessByteArray;
/**
 * called when metadata are modified with custom values
 * @function customizeByteArray
 * @param {Series} series - series to customize
 * @param {MetaData} customTags - customized tags
 * @returns {Series} customized series
 */
const customizeByteArray = function (series, customTags //only string values
) {
    for (const id in series.imageIds) {
        const imageId = series.imageIds[id];
        let image = series.instances[imageId];
        if (image.dataSet) {
            //sort custom tags from lowest offset to highest one
            let shift = 0;
            const { sortedTags, sortedCustomTags, shiftTotal } = (0, exports.sortTags)(image.dataSet, customTags);
            console.log(image);
            (0, exports.preProcessByteArray)(image);
            // Running in Node.js environment or running in browser environment
            let newByteArray = typeof Buffer !== "undefined"
                ? Buffer.alloc(image.dataSet.byteArray.length + shiftTotal)
                : new Uint8Array(image.dataSet.byteArray.length + shiftTotal);
            for (let i = 0; i < sortedCustomTags.length; i++) {
                let element = image.dataSet.elements[sortedCustomTags[i].tag];
                const vr = element.vr;
                if (vr) {
                    //shift byteArray elements given shifts for every customtag value changed
                    if (sortedCustomTags[i].value !== undefined) {
                        const startCustomTag = element.dataOffset + shift;
                        element.dataOffset = startCustomTag;
                        if (sortedCustomTags[i].value.length != element.length) {
                            shift = shift + sortedCustomTags[i].value.length - element.length;
                        }
                        const endCustomTag = i === sortedCustomTags.length - 1
                            ? newByteArray.length
                            : sortedCustomTags[i + 1].offset + shift;
                        if (i === 0) {
                            for (let j = 0; j < startCustomTag; j++) {
                                newByteArray[j] = image.dataSet.byteArray[j];
                            }
                        }
                        for (let j = startCustomTag; j < endCustomTag; j++) {
                            if (j < startCustomTag + sortedCustomTags[i].value.length) {
                                if (j == startCustomTag) {
                                    if (sortedCustomTags[i].value.length - element.length != 0) {
                                        newByteArray[j - 2] = sortedCustomTags[i].value.length;
                                    }
                                    else {
                                        newByteArray[j - 2] = newByteArray[j - 2];
                                    }
                                }
                                const char = sortedCustomTags[i].value.length > j - startCustomTag
                                    ? sortedCustomTags[i].value.charCodeAt(j - startCustomTag)
                                    : 32;
                                newByteArray[j] = char;
                            }
                            else {
                                newByteArray[j] = image.dataSet.byteArray[j - shift];
                            }
                        }
                    }
                    // @ts-ignore always string
                    image.metadata[sortedCustomTags[i].tag] = sortedCustomTags[i].value;
                    element.length = sortedCustomTags[i].value.length;
                    //change dataset infos about offset accordingly
                    let start = sortedCustomTags[i].index + 1;
                    let end = i === sortedCustomTags.length - 1
                        ? sortedTags.length
                        : sortedCustomTags[i + 1].index;
                    for (let k = start; k < end; k++) {
                        image.dataSet.elements[Object.keys(sortedTags[k])[0]].dataOffset +=
                            shift;
                    }
                }
            }
            image.dataSet.byteArray = newByteArray;
            //update image metadata if changed
            image.metadata.seriesUID = image.metadata["x0020000e"];
            image.metadata.instanceUID = image.metadata["x00080018"];
            image.metadata.studyUID = image.metadata["x0020000d"];
            image.metadata.accessionNumber = image.metadata["x00080050"];
            image.metadata.studyDescription = image.metadata["x00081030"];
            image.metadata.patientName = image.metadata["x00100010"];
            image.metadata.patientBirthdate = image.metadata["x00100030"];
            image.metadata.seriesDescription = image.metadata["x0008103e"];
        }
        else {
            console.warn(`No dataset found for image ${imageId}`);
        }
    }
    // update parsed metadata
    series.seriesDescription = series.instances[series.imageIds[0]].metadata["x0008103e"];
    return series;
};
exports.customizeByteArray = customizeByteArray;


/***/ }),

/***/ 2658:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module imaging/imageIo
 *  @desc This file provides I/O functionalities on NRRD files and DICOM images
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.exportImageToBase64 = exports.importNRRDImage = exports.buildDataAsync = exports.buildData = exports.getCachedPixelData = exports.buildHeader = void 0;
// external libraries
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
const lodash_1 = __webpack_require__(6486);
// internal libraries
const imageUtils_1 = __webpack_require__(8345);
const imageStore_1 = __importDefault(__webpack_require__(5278));
const nrrd_1 = __webpack_require__(5791);
const memory_1 = __webpack_require__(3862);
/*
 * This module provides the following functions to be exported:
 * buildHeader(series)
 * getCachedPixelData(imageId)
 * buildData(series)
 * importNRRDImage(bufferArray)
 * exportImageToBase64(canvasId)
 */
/**
 * Build the image header from slices' metadata
 * @function buildHeader
 * @param {Object} series - Cornerstone series object
 * @returns {Object} header: image metadata
 */
const buildHeader = function (series) {
    let header = {};
    (0, lodash_1.forEach)(series.imageIds, function (imageId) {
        header[imageId] = series.instances[imageId].metadata;
    });
    let volume = {};
    volume.imageIds = series.imageIds;
    volume.seriesId = series.instances[series.imageIds[0]].metadata.seriesUID;
    volume.rows =
        series.instances[series.imageIds[0]].metadata.rows ||
            series.instances[series.imageIds[0]].metadata.x00280010;
    volume.cols =
        series.instances[series.imageIds[0]].metadata.cols ||
            series.instances[series.imageIds[0]].metadata.x00280011;
    volume.slope = series.instances[series.imageIds[0]].metadata.slope;
    volume.repr = series.instances[series.imageIds[0]].metadata.repr;
    volume.intercept = series.instances[series.imageIds[0]].metadata
        .intercept;
    volume.imagePosition = series.instances[series.imageIds[0]].metadata
        .imagePosition;
    volume.numberOfSlices = series.imageIds.length;
    // @ts-ignore
    volume.imageOrientation = (0, imageUtils_1.getMeanValue)(series, "imageOrientation", true);
    // @ts-ignore
    volume.pixelSpacing = (0, imageUtils_1.getMeanValue)(series, "pixelSpacing", true);
    // volume.maxPixelValue = getMeanValue(series, "maxPixelValue", false);
    // volume.minPixelValue = getMeanValue(series, "minPixelValue", false);
    volume.sliceThickness = (0, imageUtils_1.getDistanceBetweenSlices)(series, 0, 1);
    header.volume = volume;
    return header;
};
exports.buildHeader = buildHeader;
/**
 * Get cached pixel data
 * @function getCachedPixelData
 * @param {String} imageId - ImageId of the cached image
 * @returns {Promise} A promise which will resolve to a pixel data array or fail if an error occurs
 */
const getCachedPixelData = function (imageId) {
    let cachedImage = (0, lodash_1.find)(cornerstone_core_1.default.imageCache.cachedImages, [
        "imageId",
        imageId
    ]);
    let promise = new Promise((resolve, reject) => {
        if (cachedImage && cachedImage.image) {
            resolve(cachedImage.image.getPixelData());
        }
        else {
            cornerstone_core_1.default
                .loadImage(imageId)
                .then(image => resolve(image.getPixelData()))
                .catch(err => reject(err));
        }
    });
    return promise;
};
exports.getCachedPixelData = getCachedPixelData;
/**
 * Build the contiguous typed array from slices
 * @function buildData
 * @param {Object} series - Cornerstone series object
 * @param {Bool} useSeriesData - Flag to force using "series" data instead of cached ones
 * @returns {Array} Contiguous pixel array
 */
const buildData = function (series, useSeriesData) {
    if ((0, memory_1.checkMemoryAllocation)(series.bytes)) {
        let t0 = performance.now();
        let repr = series.instances[series.imageIds[0]].metadata.repr;
        let rows = series.instances[series.imageIds[0]].metadata.rows ||
            series.instances[series.imageIds[0]].metadata.x00280010;
        let cols = series.instances[series.imageIds[0]].metadata.cols ||
            series.instances[series.imageIds[0]].metadata.x00280011;
        let len = rows * cols * series.imageIds.length;
        if (!repr) {
            throw new Error("Image representation metadata not found");
        }
        let typedArray = (0, imageUtils_1.getTypedArrayFromDataType)(repr);
        if (!typedArray) {
            throw new Error("Image representation not supported");
        }
        let data = new typedArray(len);
        let offsetData = 0;
        // use input data or cached data
        if (useSeriesData) {
            (0, lodash_1.forEach)(series.imageIds, function (imageId) {
                const sliceData = series.instances[imageId].pixelData;
                if (sliceData) {
                    data.set(sliceData, offsetData);
                    offsetData += sliceData.length;
                }
            });
            let t1 = performance.now();
            console.log(`Call to buildData took ${t1 - t0} milliseconds.`);
            return data;
        }
        else {
            imageStore_1.default.addSeriesId(series.seriesUID, series.imageIds);
            let image_counter = 0;
            (0, lodash_1.forEach)(series.imageIds, function (imageId) {
                (0, exports.getCachedPixelData)(imageId).then((sliceData) => {
                    data.set(sliceData, offsetData);
                    offsetData += sliceData.length;
                    image_counter += 1;
                    if (image_counter == series.imageIds.length) {
                        let t1 = performance.now();
                        console.log(`Call to buildData took ${t1 - t0} milliseconds.`);
                        return data;
                    }
                });
            });
        }
    }
    else {
        throw new Error("Data has not been builded: not enough memory");
    }
};
exports.buildData = buildData;
/**
 * Build the contiguous typed array from slices (async version)
 * @function buildDataAsync
 * @param {Object} series - Cornerstone series object
 * @param {Number} time - Time(s) to wait for garbage collector
 * @param {Function} resolve - Promise resolve function
 * @param {Function} reject - Promise reject function
 */
const buildDataAsync = function (series, time, resolve, reject) {
    const memoryAllocation = (0, memory_1.checkMemoryAllocation)(series.bytes);
    if (memoryAllocation) {
        let t0 = performance.now();
        let repr = series.instances[series.imageIds[0]].metadata.repr;
        let rows = series.instances[series.imageIds[0]].metadata.rows ||
            series.instances[series.imageIds[0]].metadata.x00280010;
        let cols = series.instances[series.imageIds[0]].metadata.cols ||
            series.instances[series.imageIds[0]].metadata.x00280011;
        let len = rows * cols * series.imageIds.length;
        if (!repr) {
            throw new Error("Image representation metadata not found");
        }
        let typedArray = (0, imageUtils_1.getTypedArrayFromDataType)(repr);
        if (!typedArray) {
            throw new Error("Image representation not supported");
        }
        let data = new typedArray(len);
        let offsetData = 0;
        series.imageIds = (0, imageUtils_1.getSortedStack)(series, ["imagePosition"], true);
        let imageIds = series.imageIds.slice();
        imageStore_1.default.addSeriesId(series.seriesUID, series.imageIds);
        function runFillPixelData(data) {
            let imageId = imageIds.shift();
            if (imageId) {
                (0, exports.getCachedPixelData)(imageId).then(sliceData => {
                    data.set(sliceData, offsetData);
                    offsetData += sliceData.length;
                    // this does the trick: delay next computation to next tick
                    setTimeout(() => {
                        runFillPixelData(data);
                    }, 0);
                });
            }
            else {
                let t1 = performance.now();
                console.log(`Call to buildDataAsync took ${t1 - t0} milliseconds.`);
                resolve(data);
            }
        }
        runFillPixelData(data);
    }
    else if (time > 0) {
        setTimeout(function () {
            time = time - 5;
            (0, exports.buildDataAsync)(series, time, resolve, reject);
        }, 5000);
    }
    else {
        reject("Data has not been builded: not enough memory");
    }
};
exports.buildDataAsync = buildDataAsync;
/**
 * Import NRRD image from bufferArray
 * @function importNRRDImage
 * @param {ArrayBuffer} bufferArray - buffer array from nrrd file
 * @returns {Array} Parsed pixel data array
 */
const importNRRDImage = function (bufferArray) {
    // get the data
    let volume = (0, nrrd_1.parse)(bufferArray, { headerOnly: false });
    return volume;
};
exports.importNRRDImage = importNRRDImage;
/**
 * Export image rendered in a canvas to base64
 * @function exportImageToBase64
 * @param elementId - Id of the div element containing the canvas
 * @returns {String | null} base64 image (png full quality) or null if canvas does not exist
 */
const exportImageToBase64 = function (elementId) {
    const element = document.getElementById(elementId);
    if (element) {
        const canvas = element.querySelector("canvas");
        return canvas ? canvas.toDataURL("image/png", 1.0) : null;
    }
    else {
        console.warn("Canvas not found, invalid elementId");
        return null;
    }
};
exports.exportImageToBase64 = exportImageToBase64;


/***/ }),

/***/ 9826:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module imaging/imageLayers
 *  @desc This file provides functionalities for
 *        rendering image layers using cornerstone stack
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.setActiveLayer = exports.getActiveLayer = exports.updateLayer = exports.buildLayer = void 0;
// external libraries
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
// internal libraries
const imageUtils_1 = __webpack_require__(8345);
/*
 * This module provides the following functions to be exported:
 * buildLayer(series, tag, options)
 * updateLayer(elementId, layerId, options)
 * getActiveLayer(elementId)
 * setActiveLayer(elementId, layerId)
 */
/**
 * Build the image layers object
 * @function buildLayers
 * @param {Object} series - Cornerstone series object
 * @param {String} tag - Tag for the layer
 * @param {Object} options - layer options {opacity:float, colormap: str}
 * @returns {Object} Cornerstone layer object
 */
const buildLayer = function (series, tag, options) {
    let layer = {
        imageIds: series.imageIds,
        currentImageIdIndex: Math.floor(series.imageIds.length / 2),
        options: {
            name: tag,
            opacity: (options === null || options === void 0 ? void 0 : options.opacity) ? options === null || options === void 0 ? void 0 : options.opacity : 1.0,
            visible: true,
            viewport: {
                colormap: (options === null || options === void 0 ? void 0 : options.colormap) ? options === null || options === void 0 ? void 0 : options.colormap : "gray"
            }
        }
    };
    return layer;
};
exports.buildLayer = buildLayer;
/**
 * Change the options of a layer
 * @instance
 * @function updateLayer
 * @param {String} elementId - The html div id used for rendering or its DOM HTMLElement
 * @param {string} layer - The layer id
 * @param {Object} options - The new layer's options
 */
const updateLayer = function (elementId, layerId, options) {
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.log("not element");
        return;
    }
    let layer = cornerstone_core_1.default.getLayer(element, layerId);
    if (!layer.options) {
        layer["options"] = {};
    }
    if (!layer.viewport) {
        layer["viewport"] = {};
    }
    layer.options.opacity =
        options.opacity != null ? options.opacity : layer.options.opacity;
    layer.viewport.colormap = options.colormap
        ? options.colormap
        : layer.viewport.colormap;
    cornerstone_core_1.default.updateImage(element);
};
exports.updateLayer = updateLayer;
/**
 * Get the active layer
 * @instance
 * @function getActiveLayer
 * @param {String} elementId - The html div id used for rendering or its DOM HTMLElement
 * @returns {Object} layer - The active layer object
 */
const getActiveLayer = function (elementId) {
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.log("not element");
        return;
    }
    return cornerstone_core_1.default.getActiveLayer(element);
};
exports.getActiveLayer = getActiveLayer;
/**
 * Set the active layer
 * @instance
 * @function setActiveLayer
 * @param {String} elementId - The html div id used for rendering or its DOM HTMLElement
 * @param {String} layerId - The id of the layer
 */
const setActiveLayer = function (elementId, layerId) {
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.log("not element");
        return;
    }
    cornerstone_core_1.default.setActiveLayer(element, layerId);
};
exports.setActiveLayer = setActiveLayer;


/***/ }),

/***/ 5848:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module imaging/imageLoading
 *  @desc This file provides functionalities for
 *        initialize, configure and update DICOMImageLoader
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.updateLoadedStack = exports.registerDsaImageLoader = exports.registerMultiFrameImageLoader = exports.registerResliceLoader = exports.registerNRRDImageLoader = exports.initializeFileImageLoader = exports.initializeWebImageLoader = exports.initializeImageLoader = void 0;
// external libraries
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
const dicom_parser_1 = __importDefault(__webpack_require__(4705));
// import cornerstoneDICOMImageLoader from "@cornerstonejs/dicom-image-loader/dist/cornerstoneDICOMImageLoader.bundle.min.js";
const cornerstone_wado_image_loader_1 = __importDefault(__webpack_require__(2424));
const cornerstone_web_image_loader_1 = __importDefault(__webpack_require__(5205));
const cornerstone_file_image_loader_1 = __importDefault(__webpack_require__(2869));
const lodash_1 = __webpack_require__(6486);
// internal libraries
const imageStore_1 = __importDefault(__webpack_require__(5278));
const imageUtils_1 = __webpack_require__(8345);
const nrrdLoader_1 = __webpack_require__(6934);
const resliceLoader_1 = __webpack_require__(5779);
const multiframeLoader_1 = __webpack_require__(934);
const dsaImageLoader_1 = __webpack_require__(6475);
/**
 * Global standard configuration
 * @inner
 * @var {Object} globalConfig
 * @property {Number} maxWebWorkers - number of maximum web workers
 * @property {String} webWorkerPath - path to default DICOM web worker
 * @property {} - see https://github.com/cornerstonejs/cornerstoneDICOMImageLoader/blob/master/docs/WebWorkers.md
 */
const MAX_CONCURRENCY = 6;
const globalConfig = {
    maxWebWorkers: Math.max(Math.min(navigator.hardwareConcurrency - 1, MAX_CONCURRENCY), 1),
    startWebWorkersOnDemand: true,
    taskConfiguration: {
        decodeTask: {
            loadCodecsOnStartup: true,
            initializeCodecsOnStartup: false,
            strict: true
        }
    }
};
/*
 * This module provides the following functions to be exported:
 * initializeImageLoader(config)
 * initializeWebImageLoader()
 * initializeFileImageLoader()
 * registerNRRDImageLoader()
 * registerResliceLoader()
 * updateLoadedStack(seriesData, allSeriesStack)
 */
/**
 * Configure DICOMImageLoader
 * @instance
 * @function initializeImageLoader
 * @param {Object} config - Custom config @default globalConfig
 */
const initializeImageLoader = function (config) {
    let imageLoaderConfig = config ? config : globalConfig;
    cornerstone_wado_image_loader_1.default.external.cornerstone = cornerstone_core_1.default;
    cornerstone_wado_image_loader_1.default.external.dicomParser = dicom_parser_1.default;
    cornerstone_wado_image_loader_1.default.webWorkerManager.initialize(imageLoaderConfig);
};
exports.initializeImageLoader = initializeImageLoader;
/**
 * Configure cornerstoneWebImageLoader
 * @instance
 * @function initializeWebImageLoader
 */
const initializeWebImageLoader = function () {
    cornerstone_web_image_loader_1.default.external.cornerstone = cornerstone_core_1.default;
    cornerstone_web_image_loader_1.default.configure({
        beforeSend: function () {
            // add xhr as function arg
            // Add custom headers here (e.g. auth tokens)
            // xhr.setRequestHeader('x-auth-token', 'my auth token');
        }
    });
};
exports.initializeWebImageLoader = initializeWebImageLoader;
/**
 * Configure cornerstoneFileImageLoader
 * @instance
 * @function initializeFileImageLoader
 */
const initializeFileImageLoader = function () {
    cornerstone_file_image_loader_1.default.external.cornerstone = cornerstone_core_1.default;
};
exports.initializeFileImageLoader = initializeFileImageLoader;
/**
 * Register custom NRRD ImageLoader
 * @instance
 * @function registerNRRDImageLoader
 */
const registerNRRDImageLoader = function () {
    cornerstone_core_1.default.registerImageLoader("nrrdLoader", nrrdLoader_1.loadNrrdImage);
};
exports.registerNRRDImageLoader = registerNRRDImageLoader;
/**
 * Register custom Reslice ImageLoader
 * @instance
 * @function registerResliceLoader
 */
const registerResliceLoader = function () {
    cornerstone_core_1.default.registerImageLoader("resliceLoader", resliceLoader_1.loadReslicedImage);
};
exports.registerResliceLoader = registerResliceLoader;
/**
 * Register custom MultiFrame ImageLoader
 * @instance
 * @function registerMultiFrameImageLoader
 */
const registerMultiFrameImageLoader = function () {
    cornerstone_core_1.default.registerImageLoader("multiFrameLoader", multiframeLoader_1.loadMultiFrameImage);
};
exports.registerMultiFrameImageLoader = registerMultiFrameImageLoader;
/**
 * Register custom DSA ImageLoader
 * @instance
 * @function registerDsaImageLoader
 */
const registerDsaImageLoader = function () {
    cornerstone_core_1.default.registerImageLoader("dsaImageLoader", dsaImageLoader_1.loadDsaImage);
};
exports.registerDsaImageLoader = registerDsaImageLoader;
/**
 * Update the allSeriesStack object using DICOMImageLoader fileManager
 * @instance
 * @function updateLoadedStack
 * @param {Object} seriesData - Cornerstone series object
 * @param {Object} allSeriesStack - Dict containing all series objects
 * @param {String} customId - Optional custom id to overwrite seriesUID as default one
 * @param {number} sliceIndex - Optional custom index to overwrite slice index as default one
 */
const updateLoadedStack = function (seriesData, allSeriesStack, customId, sliceIndex) {
    let lid = seriesData.metadata.larvitarSeriesInstanceUID;
    let sid = seriesData.metadata.seriesUID;
    let ssid = seriesData.metadata.studyUID;
    let iid = seriesData.metadata.instanceUID;
    let seriesDescription = seriesData.metadata.seriesDescription;
    let numberOfSlices = seriesData.metadata["x00540081"]
        ? seriesData.metadata["x00540081"]
        : seriesData.metadata["x00201002"];
    let numberOfFrames = seriesData.metadata["x00280008"];
    let modality = seriesData.metadata["x00080060"];
    let isMultiframe = numberOfFrames && numberOfFrames > 1 ? true : false;
    let numberOfTemporalPositions = seriesData.metadata["x00200105"];
    let acquisitionNumberAttribute = seriesData.metadata["x00200012"];
    let is4D = seriesData.metadata.is4D;
    let waveform = seriesData.metadata.waveform;
    let SOPUID = seriesData.metadata["x00080016"];
    let isPDF = SOPUID == "1.2.840.10008.5.1.4.1.1.104.1" ? true : false;
    let anonymized = seriesData.metadata.anonymized;
    let color = cornerstone_wado_image_loader_1.default.isColorImage(seriesData.metadata["x00280004"]);
    let id = customId || (lid === null || lid === void 0 ? void 0 : lid.toString());
    if (!id) {
        throw new Error("Unique UID is not defined");
    }
    // Staged Protocol
    // https://dicom.nema.org/dicom/2013/output/chtml/part17/sect_K.5.html
    const numberOfStages = seriesData.metadata["x00082124"]; // Number of stages
    const numberOfViews = seriesData.metadata["x0008212a"]; // Number of views in stage
    const isStagedProtocol = numberOfStages ? true : false;
    // initialize series stack
    if (!allSeriesStack[id]) {
        let series = {
            currentImageIdIndex: 0,
            imageIds: [], // (ordered)
            instanceUIDs: {}, // instanceUID: imageId (ordered)
            instances: {},
            seriesDescription: seriesDescription,
            larvitarSeriesInstanceUID: lid,
            seriesUID: sid,
            studyUID: ssid,
            numberOfImages: is4D ? acquisitionNumberAttribute : 0,
            numberOfSlices: numberOfSlices,
            numberOfFrames: numberOfFrames,
            numberOfTemporalPositions: numberOfTemporalPositions,
            isMultiframe: isMultiframe,
            waveform: waveform,
            is4D: is4D,
            isPDF: isPDF,
            anonymized: anonymized,
            modality: modality,
            color: color,
            bytes: 0
        };
        if (isStagedProtocol) {
            const stageName = seriesData.metadata["x00082120"];
            const stageNumber = seriesData.metadata["x00082122"];
            const viewName = seriesData.metadata["x00082127"];
            const viewNumber = seriesData.metadata["x00082128"];
            const stagedProtocol = {
                numberOfStages: numberOfStages,
                numberOfViews: numberOfViews,
                stageName: stageName ? stageName.trim() : undefined,
                stageNumber: stageNumber,
                viewName: viewName ? viewName.trim() : undefined,
                viewNumber: viewNumber
            };
            series.stagedProtocol = stagedProtocol;
        }
        allSeriesStack[id] = series;
    }
    // get instance number from metadata
    const instanceNumber = seriesData.metadata["x00200013"];
    const defaultMethod = instanceNumber ? "instanceNumber" : "imagePosition";
    const sortMethods = is4D ? [defaultMethod, "contentTime"] : [defaultMethod];
    // if the parsed file is a new series instance, keep it
    if (isMultiframe) {
        allSeriesStack[id].bytes += seriesData.file.size;
        allSeriesStack[id].dataSet = seriesData.dataSet;
        allSeriesStack[id].metadata = seriesData.metadata;
    }
    else if (isNewInstance(allSeriesStack[id].instances, iid)) {
        // generate an imageId for the file and store it
        // in allSeriesStack imageIds array, used by
        // DICOMImageLoader to display the stack of images
        let imageId = cornerstone_wado_image_loader_1.default.wadouri.fileManager.add(seriesData.file);
        if (sliceIndex !== undefined) {
            allSeriesStack[id].imageIds[sliceIndex] = imageId;
        }
        else {
            allSeriesStack[id].imageIds.push(imageId);
        }
        if (is4D === false) {
            allSeriesStack[id].numberOfImages =
                (allSeriesStack[id].numberOfImages || 0) + 1;
        }
        allSeriesStack[id].bytes += seriesData.file.size;
        // store needed instance tags
        allSeriesStack[id].instances[imageId] = {
            metadata: seriesData.metadata,
            file: seriesData.file,
            dataSet: seriesData.dataSet
        };
        if (isPDF === false) {
            if (sliceIndex === undefined) {
                // order images in stack
                allSeriesStack[id].imageIds = (0, imageUtils_1.getSortedStack)(allSeriesStack[id], sortMethods, true);
                // populate the ordered dictionary of instanceUIDs
                allSeriesStack[id].instanceUIDs = (0, imageUtils_1.getSortedUIDs)(allSeriesStack[id]);
            }
            else {
                allSeriesStack[id].instanceUIDs[iid] = imageId;
            }
            imageStore_1.default.addSeriesId(id, allSeriesStack[id].imageIds);
        }
        else {
            allSeriesStack[id].instanceUIDs[iid] = imageId;
            imageStore_1.default.addSeriesId(id, allSeriesStack[id].imageIds);
        }
    }
};
exports.updateLoadedStack = updateLoadedStack;
/* Internal module functions */
/**
 * Check if the instance is new or not
 * @inner
 * @function isNewInstance
 * @param {Object} instances - instances already loaded
 * @param {String} iid - instance uid to check
 * @return {Bool} True if is new instance, false if already present
 */
let isNewInstance = function (instances, iid) {
    let isNewInstance = true;
    (0, lodash_1.forEach)(instances, function (instance) {
        if (instance.metadata.instanceUID === iid) {
            isNewInstance = false;
        }
    });
    return isNewInstance;
};


/***/ }),

/***/ 1539:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

/** @module imaging/imageParsing
 *  @desc  This file provides functionalities for parsing DICOM image files
 */
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.parseDataSet = exports.readFile = exports.readFiles = exports.clearImageParsing = void 0;
// external libraries
const dicom_parser_1 = __webpack_require__(4705);
const lodash_1 = __webpack_require__(6486);
const uuid_1 = __webpack_require__(1614);
// internal libraries
const imageUtils_1 = __webpack_require__(8345);
const imageTags_1 = __webpack_require__(606);
const imageLoading_1 = __webpack_require__(5848);
const memory_1 = __webpack_require__(3862);
// global module variables
var t0; // t0 variable for timing debugging purpose
/*
 * This module provides the following functions to be exported:
 * readFiles(fileList)
 * readFile(file)
 * parseDataSet(dataSet, metadata, customFilter)
 * clearImageParsing(seriesStack)
 */
/**
 * Reset series stack object and its internal data
 * @instance
 * @function clearImageParsing
 * @param {Object} seriesStack - Parsed series stack object
 */
const clearImageParsing = function (seriesStack) {
    (0, lodash_1.each)(seriesStack, function (stack) {
        (0, lodash_1.each)(stack.instances, function (instance) {
            if (instance.dataSet) {
                // @ts-ignore
                instance.dataSet.byteArray = null;
            }
            instance.dataSet = null;
            instance.file = null;
            // @ts-ignore
            instance.metadata = null;
        });
    });
    seriesStack = null;
};
exports.clearImageParsing = clearImageParsing;
/**
 * Read dicom files and return allSeriesStack object
 * @instance
 * @function readFiles
 * @param {Array} entries - List of file objects
 * @returns {Promise} - Return a promise which will resolve to a image object list or fail if an error occurs
 */
const readFiles = function (entries) {
    return parseFiles(entries);
};
exports.readFiles = readFiles;
/**
 * Read a single dicom file and return parsed object
 * @instance
 * @function readFile
 * @param {File} entry - File object
 * @returns {Promise} - Return a promise which will resolve to a image object or fail if an error occurs
 */
const readFile = function (entry) {
    return parseFile(entry);
};
exports.readFile = readFile;
/**
 * Parse metadata from dicom parser dataSet object
 * @instance
 * @function parseDataSet
 * @param {Object} dataSet - dicom parser dataSet object
 * @param {Object} metadata - Initialized metadata object
 * @param {Array} customFilter - Optional filter: {tags:[], frameId: 0}
 */
// This function iterates through dataSet recursively and store tag values into metadata object
const parseDataSet = function (dataSet, metadata, customFilter) {
    // customFilter= {tags:[], frameId:xxx}
    // the dataSet.elements object contains properties for each element parsed.  The name of the property
    // is based on the elements tag and looks like 'xGGGGEEEE' where GGGG is the group number and EEEE is the
    // element number both with lowercase hexadecimal letters.  For example, the Series Description DICOM element 0008,103E would
    // be named 'x0008103e'.  Here we iterate over each property (element) so we can build a string describing its
    // contents to add to the output array
    try {
        let elements = customFilter && (0, lodash_1.has)(customFilter, "tags")
            ? (0, lodash_1.pick)(dataSet.elements, customFilter.tags)
            : dataSet.elements;
        for (let propertyName in elements) {
            let element = elements[propertyName]; //metadata
            const TAG = propertyName;
            // Here we check for Sequence items and iterate over them if present. items will not be set in the
            // element object for elements that don't have SQ VR type.  Note that implicit little endian
            // sequences will are currently not parsed.
            if (element.items) {
                let nestedArray = [];
                function getNestedObject(item) {
                    let nestedObject = {};
                    for (let nestedPropertyName in item.dataSet.elements) {
                        let TAG_tagValue = nestedPropertyName;
                        let tagValue = (0, imageTags_1.parseTag)(item.dataSet, nestedPropertyName, item.dataSet.elements[nestedPropertyName]);
                        let TAG_nested = nestedPropertyName;
                        nestedObject[TAG_nested] = tagValue;
                    }
                    nestedArray.push(nestedObject);
                }
                if (customFilter && (0, lodash_1.has)(customFilter, "frameId")) {
                    let item = element.items[customFilter.frameId];
                    if (item && Object.keys(item).length !== 0) {
                        getNestedObject(item);
                    }
                }
                else {
                    // iterates over nested elements (nested metadata)
                    element.items.forEach(function (item) {
                        getNestedObject(item);
                    });
                }
                metadata[TAG] = nestedArray;
            }
            else {
                let TAG_tagValue = propertyName;
                let tagValue = (0, imageTags_1.parseTag)(dataSet, propertyName, element);
                let TAG = propertyName;
                // identify duplicated tags (keep the first occurency and store the others in another tag eg x00280010_uuid)
                if (metadata[TAG] !== undefined) {
                    console.debug(`Identified duplicated tag "${propertyName}", values are:`, metadata[TAG], tagValue);
                    let TAG_uuidv4 = (propertyName +
                        "_" +
                        (0, uuid_1.v4)());
                    metadata[TAG_uuidv4] = tagValue;
                }
                else {
                    metadata[TAG] = tagValue;
                }
            }
        }
    }
    catch (err) {
        console.log(err);
    }
};
exports.parseDataSet = parseDataSet;
/**
 * Manage the parsing process waiting for the parsed object before proceeding with the next parse request
 * @inner
 * @function parseNextFile
 * @param {Array} parsingQueue - Array of queued files to be parsed
 * @param {Object} allSeriesStack - Series stack object to be populated
 * @param {string} uuid - Series uuid to be used if series instance uuid is missing
 * @param {Function} resolve - Promise resolve function
 * @param {Function} reject - Promise reject function
 */
let parseNextFile = function (parsingQueue, allSeriesStack, uuid, resolve, reject) {
    // initialize t0 on first file of the queue
    if (Object.keys(allSeriesStack).length === 0 &&
        allSeriesStack.constructor === Object) {
        t0 = performance.now();
    }
    if (parsingQueue.length === 0) {
        let t1 = performance.now();
        console.log(`Call to readFiles took ${t1 - t0} milliseconds.`);
        resolve(allSeriesStack);
        return;
    }
    // remove and return first item from queue
    let file = parsingQueue.shift();
    if (!file) {
        console.warn("File is undefined or null");
        return;
    }
    // Check if there is enough memory to parse the file
    if ((0, memory_1.checkMemoryAllocation)(file.size) === false) {
        // do not parse the file and stop parsing
        (0, exports.clearImageParsing)(allSeriesStack);
        let t1 = performance.now();
        console.log(`Call to readFiles took ${t1 - t0} milliseconds.`);
        file = null;
        reject("Available memory is not enough");
        return;
    }
    else {
        // parse the file and wait for results
        parseFile(file)
            .then((seriesData) => {
            // use generated series uid if not found in dicom file
            seriesData.metadata.seriesUID = seriesData.metadata.seriesUID || uuid;
            // add file to cornerstoneDICOMImageLoader file manager
            (0, imageLoading_1.updateLoadedStack)(seriesData, allSeriesStack);
            // proceed with the next file to parse
            parseNextFile(parsingQueue, allSeriesStack, uuid, resolve, reject);
            seriesData = null;
            file = null;
        })
            .catch(err => {
            console.error(err);
            parseNextFile(parsingQueue, allSeriesStack, uuid, resolve, reject);
            file = null;
        });
    }
};
/**
 * Push files in queue and start parsing next file
 * @inner
 * @function parseFiles
 * @param {Array} fileList - Array of file objects
 * @returns {Promise} - Return a promise which will resolve to a image object list or fail if an error occurs
 */
const parseFiles = function (fileList) {
    let allSeriesStack = {};
    let parsingQueue = [];
    (0, lodash_1.forEach)(fileList, function (file) {
        if (!file.name.startsWith(".") && !file.name.startsWith("DICOMDIR")) {
            parsingQueue.push(file);
        }
    });
    return new Promise((resolve, reject) => {
        const uuid = (0, uuid_1.v4)();
        parseNextFile(parsingQueue, allSeriesStack, uuid, resolve, reject);
    });
};
/**
 * Parse a single DICOM File (metaData and pixelData)
 * @inner
 * @function parseFile
 * @param {File} file - File object to be parsed
 * @returns {Promise} - Return a promise which will resolve to a image object or fail if an error occurs
 */
const parseFile = function (file) {
    const parsePromise = new Promise((resolve, reject) => {
        let reader = new FileReader();
        reader.onload = function () {
            var _a, _b, _c;
            let arrayBuffer = reader.result;
            // Here we have the file data as an ArrayBuffer.
            // dicomParser requires as input a Uint8Array so we create that here.
            if (!arrayBuffer || typeof arrayBuffer === "string") {
                reject("Error reading file");
                return;
            }
            let byteArray = new Uint8Array(arrayBuffer);
            let dataSet;
            // this try-catch is used to handle non-DICOM files: log error but continue parsing the other files
            try {
                dataSet = (0, dicom_parser_1.parseDicom)(byteArray);
                byteArray = null;
                let metadata = {};
                (0, exports.parseDataSet)(dataSet, metadata);
                let temporalPositionIdentifier = metadata["x00200100"]; // Temporal order of a dynamic or functional set of Images.
                let numberOfTemporalPositions = metadata["x00200105"]; // Total number of temporal positions prescribed.
                const is4D = temporalPositionIdentifier !== undefined &&
                    numberOfTemporalPositions > 1
                    ? true
                    : false;
                let modality = metadata["x00080060"];
                let singleFrameModalities = [
                    "CR",
                    "DX",
                    "MG",
                    "PX",
                    "RF",
                    "XA",
                    "US",
                    "IVUS",
                    "OCT"
                ];
                // US XA RF IVUS OCT DX CR PX MG
                // Overwrite SOPInstanceUID to manage single stack images (US, XA).
                // Usually different SeriesInstanceUID means different series and that value
                // is used into the application to group different instances into the same series,
                // but if a DICOM file contains a multiframe series, then the SeriesInstanceUID
                // can be shared by other files of the same study.
                // In these cases, the SOPInstanceUID (unique) is used as SeriesInstanceUID.
                let uniqueId = singleFrameModalities.includes(modality)
                    ? metadata["x00080018"]
                    : metadata["x0020000e"];
                let seriesInstanceUID = metadata["x0020000e"];
                let pixelSpacing = metadata["x00280030"];
                let imageOrientation = metadata["x00200037"];
                let imagePosition = metadata["x00200032"];
                let sliceThickness = metadata["x00180050"];
                let numberOfFrames = metadata["x00280008"];
                let isMultiframe = numberOfFrames > 1 ? true : false;
                let waveform = metadata["x50003000"] ? true : false;
                if (dataSet.warnings.length > 0) {
                    // warnings
                    reject(dataSet.warnings);
                }
                else {
                    let pixelDataElement = dataSet.elements.x7fe00010;
                    let SOPUID = metadata["x00080016"];
                    if (pixelDataElement) {
                        // done, pixelDataElement found
                        let instanceUID = metadata["x00080018"] || (0, imageUtils_1.randomId)();
                        let imageObject = {
                            // data needed for rendering
                            file: file,
                            dataSet: dataSet
                        };
                        imageObject.metadata = metadata;
                        imageObject.metadata.anonymized = false;
                        imageObject.metadata.larvitarSeriesInstanceUID = uniqueId;
                        imageObject.metadata.sopClassUID = metadata["x00080016"];
                        imageObject.metadata.seriesUID = seriesInstanceUID;
                        imageObject.metadata.instanceUID = instanceUID;
                        imageObject.metadata.studyUID = metadata["x0020000d"];
                        imageObject.metadata.accessionNumber = metadata["x00080050"];
                        imageObject.metadata.studyDescription = metadata["x00081030"];
                        imageObject.metadata.patientName = metadata["x00100010"];
                        imageObject.metadata.patientBirthdate = metadata["x00100030"];
                        imageObject.metadata.seriesDescription = metadata["x0008103e"];
                        imageObject.metadata.seriesDate = metadata["x00080021"];
                        imageObject.metadata.seriesModality = (_a = metadata["x00080060"]) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase();
                        imageObject.metadata.intercept = metadata["x00281052"];
                        imageObject.metadata.slope = metadata["x00281053"];
                        imageObject.metadata.pixelSpacing = pixelSpacing;
                        imageObject.metadata.sliceThickness = sliceThickness;
                        imageObject.metadata.imageOrientation = imageOrientation;
                        imageObject.metadata.imagePosition = imagePosition;
                        imageObject.metadata.rows = metadata["x00280010"];
                        imageObject.metadata.cols = metadata["x00280011"];
                        imageObject.metadata.numberOfSlices = metadata["x00540081"]
                            ? metadata["x00540081"] // number of slices
                            : metadata["x00201002"]; // number of instances
                        imageObject.metadata.numberOfFrames = numberOfFrames;
                        if (isMultiframe) {
                            imageObject.metadata.frameTime = metadata["x00181063"];
                            imageObject.metadata.frameDelay = metadata["x00181066"];
                            if (metadata["x00186060"]) {
                                imageObject.metadata.rWaveTimeVector = metadata["x00186060"];
                            }
                        }
                        imageObject.metadata.isMultiframe = isMultiframe;
                        if (is4D) {
                            imageObject.metadata.temporalPositionIdentifier =
                                metadata["x00200100"];
                            imageObject.metadata.numberOfTemporalPositions =
                                metadata["x00200105"];
                            imageObject.metadata.contentTime = metadata["x00080033"];
                        }
                        imageObject.metadata.is4D = is4D;
                        imageObject.metadata.waveform = waveform;
                        imageObject.metadata.windowCenter = metadata["x00281050"];
                        imageObject.metadata.windowWidth = metadata["x00281051"];
                        imageObject.metadata.minPixelValue = metadata["x00280106"];
                        imageObject.metadata.maxPixelValue = metadata["x00280107"];
                        imageObject.metadata.length = pixelDataElement.length;
                        imageObject.metadata.repr = (0, imageUtils_1.getPixelRepresentation)(dataSet);
                        resolve(imageObject);
                    }
                    else if (SOPUID == "1.2.840.10008.5.1.4.1.1.104.1") {
                        let pdfObject = {
                            // data needed for rendering
                            file: file,
                            dataSet: dataSet
                        };
                        pdfObject.metadata = metadata;
                        pdfObject.metadata.larvitarSeriesInstanceUID = uniqueId;
                        pdfObject.metadata.seriesUID = seriesInstanceUID;
                        pdfObject.instanceUID =
                            ((_b = metadata["x00080018"]) === null || _b === void 0 ? void 0 : _b.toString()) || (0, imageUtils_1.randomId)();
                        pdfObject.metadata.studyUID = metadata["x0020000d"];
                        pdfObject.metadata.accessionNumber = metadata["x00080050"];
                        pdfObject.metadata.studyDescription = metadata["x00081030"];
                        pdfObject.metadata.patientName = metadata["x00100010"];
                        pdfObject.metadata.patientBirthdate = metadata["x00100030"];
                        pdfObject.metadata.seriesDate = metadata["x00080021"];
                        pdfObject.metadata.seriesModality = (_c = metadata["x00080060"]) === null || _c === void 0 ? void 0 : _c.toString().toLowerCase();
                        pdfObject.metadata.mimeType = metadata["x00420012"];
                        pdfObject.metadata.is4D = false;
                        pdfObject.metadata.numberOfFrames = 0;
                        pdfObject.metadata.numberOfSlices = 0;
                        pdfObject.metadata.numberOfTemporalPositions = 0;
                        resolve(pdfObject);
                    }
                    else {
                        // done, no pixelData
                        reject("no pixelData");
                    }
                }
            }
            catch (err) {
                reject(`Larvitar: can not read file "${file.name}" \nParsing error: ${err}`);
            }
        };
        reader.readAsArrayBuffer(file);
    });
    return parsePromise;
};


/***/ }),

/***/ 4696:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module imaging/imagePresets
 *  @desc  This file provides functionalities for
 *         image presets for ww and wc
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.setImageCustomPreset = exports.setImagePreset = exports.getImagePresets = void 0;
// external libraries
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
const lodash_1 = __webpack_require__(6486);
// internal libraries
const imageStore_1 = __webpack_require__(5278);
/**
 * Object used to list image presets
 * @object
 */
const IMAGE_PRESETS = [
    { name: "CT: Abdomen", ww: 350, wl: 50 },
    { name: "CT: Bone", ww: 2500, wl: 500 },
    { name: "CT: Cerebrum", ww: 80, wl: 0 },
    { name: "CT: Covid-19", ww: 240, wl: -860 },
    { name: "CT: Liver", ww: 150, wl: 50 },
    { name: "CT: Lung", ww: 1500, wl: -500 },
    { name: "CT: Mediastinum", ww: 300, wl: 50 },
    { name: "CT: Pelvis", ww: 400, wl: 40 }
];
/*
 * This module provides the following functions to be exported:
 * getImagePresets()
 * setImagePreset(name)
 * setImageCustomPreset(viewportNames, customValues)
 */
/**
 * Get Image presets object
 * @instance
 * @function getImagePresets
 */
const getImagePresets = function () {
    return IMAGE_PRESETS;
};
exports.getImagePresets = getImagePresets;
/**
 * Set Image presets
 * @instance
 * @function setImagePreset
 * @param {Array} viewportNames - List of viewports where to apply preset
 * @param {String} preset - The image preset name or the preset object
 */
const setImagePreset = function (viewportNames, preset) {
    if (!Array.isArray(viewportNames)) {
        console.error("Invalid parameter, viewportNames has to be an array of viewport names.");
        return;
    }
    let image_preset = typeof preset === "string" ? (0, lodash_1.find)(IMAGE_PRESETS, { name: preset }) : preset;
    if (!image_preset) {
        console.error("Invalid image preset");
        return;
    }
    (0, lodash_1.each)(viewportNames, function (viewportName) {
        let element = document.getElementById(viewportName);
        let enabledElement;
        if (!element) {
            console.warn("No element with id", viewportName);
            return;
        }
        try {
            enabledElement = cornerstone_core_1.default.getEnabledElement(element);
        }
        catch (_a) {
            console.warn("No enabledElement with id", viewportName);
            return;
        }
        let viewport = cornerstone_core_1.default.getViewport(element);
        if (!viewport) {
            console.warn("No viewport with id", viewportName);
            return;
        }
        viewport.voi.windowWidth = image_preset.ww;
        viewport.voi.windowCenter = image_preset.wl;
        cornerstone_core_1.default.setViewport(element, viewport);
        // sync ww and wc values in store
        (0, imageStore_1.set)([
            "contrast",
            viewportName,
            viewport.voi.windowWidth,
            viewport.voi.windowCenter
        ]);
    });
};
exports.setImagePreset = setImagePreset;
/**
 * Set Image presets
 * @instance
 * @function setImageCustomPreset
 * @param {Array} viewportNames - List of viewports where to apply preset
 * @param {Object} customValues - {wl: value, ww: value}
 */
const setImageCustomPreset = function (viewportNames, customValues) {
    if (!Array.isArray(viewportNames)) {
        console.error("Invalid parameter, viewportNames has to be an array of viewport names.");
        return;
    }
    (0, lodash_1.each)(viewportNames, function (viewportName) {
        let element = document.getElementById(viewportName);
        let enabledElement;
        if (!element) {
            console.warn("No element with id", viewportName);
            return;
        }
        try {
            enabledElement = cornerstone_core_1.default.getEnabledElement(element);
        }
        catch (_a) {
            console.warn("No enabledElement with id", viewportName);
            return;
        }
        let viewport = cornerstone_core_1.default.getViewport(element);
        if (!viewport) {
            console.warn("No viewport with id", viewportName);
            return;
        }
        viewport.voi.windowWidth = customValues.ww;
        viewport.voi.windowCenter = customValues.wl;
        cornerstone_core_1.default.setViewport(element, viewport);
        // sync ww and wc values in store
        (0, imageStore_1.set)([
            "contrast",
            viewportName,
            viewport.voi.windowWidth,
            viewport.voi.windowCenter
        ]);
    });
};
exports.setImageCustomPreset = setImageCustomPreset;


/***/ }),

/***/ 4767:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module imaging/imageRendering
 *  @desc  This file provides functionalities for
 *         rendering images in html canvas using cornerstone
 */
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.rotateImageRight = exports.rotateImageLeft = exports.flipImageVertical = exports.flipImageHorizontal = exports.invertImage = exports.storeViewportData = exports.updateViewportData = exports.resetViewports = exports.updateImage = exports.redrawImage = exports.renderImage = exports.resizeViewport = exports.unloadViewport = exports.disableViewport = exports.renderWebImage = exports.renderFileImage = exports.renderDICOMPDF = exports.loadAndCacheImages = exports.loadAndCacheImage = exports.clearImageCache = void 0;
// external libraries
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
const cornerstone_wado_image_loader_1 = __importDefault(__webpack_require__(2424));
const lodash_1 = __webpack_require__(6486);
// internal libraries
const performance_1 = __webpack_require__(9391);
const fileLoader_1 = __webpack_require__(9995);
const main_1 = __webpack_require__(3272);
const interaction_1 = __webpack_require__(1534);
const imageStore_1 = __importStar(__webpack_require__(5278));
const imageColormaps_1 = __webpack_require__(4540);
const imageUtils_1 = __webpack_require__(8345);
const default_1 = __webpack_require__(6694);
const imageLoading_1 = __webpack_require__(5848);
const pdf_1 = __webpack_require__(9425);
const dsaImageLoader_1 = __webpack_require__(6475);
/*
 * This module provides the following functions to be exported:
 * clearImageCache(seriesId)
 * loadAndCacheImage(imageIndex)
 * loadAndCacheImages(seriesData)
 * renderFileImage(file, elementId)
 * renderWebImage(url, elementId)
 * disableViewport(elementId)
 * unloadViewport(elementId, seriesId)
 * resizeViewport(elementId)
 * renderImage(series, elementId, defaultProps)
 * updateImage(series, elementId, imageIndex)
 * resetViewports([elementIds])
 * updateViewportData(elementId)
 * toggleMouseHandlers(elementId, disableFlag)
 * storeViewportData(params...)
 * invertImage(elementId)
 * flipImageHorizontal(elementId)
 * flipImageVertical(elementId)
 * rotateImageLeft(elementId)
 * rotateImageRight(elementId)
 */
/**
 * Purge the cornestone internal cache
 * If seriesId is passed as argument only imageIds of the series are purged from internal cache
 * @instance
 * @function clearImageCache
 * @param {String} seriesId - The id of the serie
 */
const clearImageCache = function (seriesId) {
    if (seriesId) {
        let series = imageStore_1.default.get("series");
        if ((0, lodash_1.has)(series, seriesId)) {
            (0, lodash_1.each)(series[seriesId].imageIds, function (imageId) {
                if (cornerstone_core_1.default.imageCache.cachedImages.length > 0) {
                    try {
                        cornerstone_core_1.default.imageCache.removeImageLoadObject(imageId);
                    }
                    catch (e) {
                        console.warn("no cached image");
                    }
                }
                else {
                    let uri = cornerstone_wado_image_loader_1.default.wadouri.parseImageId(imageId).url;
                    cornerstone_wado_image_loader_1.default.wadouri.dataSetCacheManager.unload(uri);
                }
            });
            imageStore_1.default.removeSeriesId(seriesId);
            console.log("Uncached images for ", seriesId);
        }
    }
    else {
        cornerstone_core_1.default.imageCache.purgeCache();
    }
};
exports.clearImageCache = clearImageCache;
/**
 * Load and cache a single image
 * Add series's imageIds into store
 * @instance
 * @function loadAndCacheImage
 * @param {Object} series the parsed series data
 * @param {number} imageIndex the image index in the imageIds array
 */
function loadAndCacheImage(series, imageIndex) {
    const t0 = performance.now();
    // add serie's imageIds into store
    imageStore_1.default.addSeriesId(series.seriesUID, series.imageIds);
    const imageId = series.imageIds[imageIndex];
    const cachePromise = new Promise((resolve, reject) => {
        if (imageId) {
            cornerstone_core_1.default.loadAndCacheImage(imageId).then(function () {
                const t1 = performance.now();
                console.log(`Call to cacheImages took ${t1 - t0} milliseconds.`);
                console.log(`Cached image with index ${imageIndex} for ${series.seriesUID}`);
                resolve(true);
            });
        }
        else {
            reject(`Error: wrong image index ${imageIndex}, no imageId available`);
        }
    });
    return cachePromise;
}
exports.loadAndCacheImage = loadAndCacheImage;
/**
 * Load and cache all serie's images
 * Add series's imageIds into store
 * @instance
 * @function loadAndCacheImages
 * @param {Object} series the parsed series data
 * @param {Function} callback a callback function
 */
function loadAndCacheImages(series, callback) {
    const t0 = performance.now();
    let cachingCounter = 0;
    const response = {
        seriesId: series.seriesUID,
        loading: 0,
        series: {}
    };
    callback(response);
    // add serie's imageIds into store
    imageStore_1.default.addSeriesId(series.seriesUID, series.imageIds);
    // add serie's caching progress into store
    (0, imageStore_1.set)(["progress", series.seriesUID, 0]);
    function updateProgress() {
        cachingCounter += 1;
        const cachingPercentage = Math.floor((cachingCounter / series.imageIds.length) * 100);
        response.loading = cachingPercentage;
        (0, imageStore_1.set)(["progress", series.seriesUID, cachingPercentage]);
        if (cachingCounter == series.imageIds.length) {
            const t1 = performance.now();
            console.log(`Call to cacheImages took ${t1 - t0} milliseconds.`);
            console.log(`Cached images for ${series.seriesUID}`);
            response.series = series;
        }
    }
    (0, lodash_1.each)(series.imageIds, function (imageId, index) {
        if (imageId) {
            cornerstone_core_1.default.loadAndCacheImage(imageId).then(function () {
                updateProgress();
                callback(response);
            });
        }
        else {
            updateProgress();
            console.warn(`Stack is not fully loaded, skipping cache for index ${index}`);
            callback(response);
        }
    });
}
exports.loadAndCacheImages = loadAndCacheImages;
/**
 * Render a PDF from a DICOM Encapsulated PDF
 * @instance
 * @function renderDICOMPDF
 * @param {Object} seriesStack - The original series data object
 * @param {String} elementId - The html div id used for rendering or its DOM HTMLElement
 * @param {Boolean} convertToImage - An optional flag to convert pdf to image, default is false
 * @returns {Promise} - Return a promise which will resolve when pdf is displayed
 */
const renderDICOMPDF = function (seriesStack, elementId, convertToImage = false) {
    let t0 = performance.now();
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    let renderPromise = new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
        var _a, _b, _c;
        let image = seriesStack.instances[seriesStack.imageIds[0]];
        const SOPUID = (_a = image.dataSet) === null || _a === void 0 ? void 0 : _a.string("x00080016");
        // check sopUID in order to detect pdf report array
        if (SOPUID === "1.2.840.10008.5.1.4.1.1.104.1") {
            let fileTag = (_b = image.dataSet) === null || _b === void 0 ? void 0 : _b.elements.x00420011;
            if (!fileTag) {
                throw new Error("No file tag found");
            }
            let pdfByteArray = (_c = image.dataSet) === null || _c === void 0 ? void 0 : _c.byteArray.slice(fileTag.dataOffset, fileTag.dataOffset + fileTag.length);
            if (!pdfByteArray) {
                console.error("No pdf byte array found");
                return;
            }
            if (!element) {
                console.error("invalid html element: " + elementId);
                return;
            }
            let PDF = new Blob([pdfByteArray], {
                type: "application/pdf"
            });
            let fileURL = URL.createObjectURL(PDF);
            const id = (0, imageUtils_1.isElement)(elementId)
                ? element.id
                : elementId;
            // Render using HTML PDF viewer
            if (convertToImage === false) {
                element.innerHTML =
                    '<object data="' +
                        fileURL +
                        '" type="application/pdf" width="100%" height="100%"></object>';
                (0, imageStore_1.set)(["isPDF", id, true]);
                let t1 = performance.now();
                console.log(`Call to renderDICOMPDF took ${t1 - t0} milliseconds.`);
                image = null;
                fileTag = undefined;
                pdfByteArray = undefined;
                PDF = null;
                resolve(true);
            }
            else if (convertToImage === true) {
                (0, imageLoading_1.initializeFileImageLoader)();
                let pngFiles = yield (0, pdf_1.generateFiles)(fileURL);
                // render first page // TODO: render all pages?
                (0, exports.renderFileImage)(pngFiles[0], elementId).then(() => {
                    let t1 = performance.now();
                    console.log(`Call to renderDICOMPDF took ${t1 - t0} milliseconds.`);
                    image = null;
                    fileTag = undefined;
                    pdfByteArray = undefined;
                    PDF = null;
                    // activate the scroll stack tool
                    if (element) {
                        (0, main_1.csToolsCreateStack)(element, Object.values((0, fileLoader_1.getFileManager)()), 0);
                    }
                    (0, interaction_1.toggleMouseToolsListeners)(id, false);
                    resolve(true);
                });
            }
        }
        else {
            reject("This is not a DICOM with a PDF");
        }
    }));
    return renderPromise;
};
exports.renderDICOMPDF = renderDICOMPDF;
/**
 * Render an image (png or jpg) from File on a html div using cornerstone
 * @instance
 * @function renderFileImage
 * @param {Object} file - The image File object
 * @param {String} elementId - The html div id used for rendering or its DOM HTMLElement
 * @returns {Promise} - Return a promise which will resolve when image is displayed
 */
const renderFileImage = function (file, elementId) {
    const t0 = performance.now();
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.error("invalid html element: " + elementId);
        return new Promise((_, reject) => reject("invalid html element: " + elementId));
    }
    const id = (0, imageUtils_1.isElement)(elementId) ? element.id : elementId;
    cornerstone_core_1.default.enable(element);
    let renderPromise = new Promise(resolve => {
        // check if imageId is already stored in fileManager
        const imageId = (0, fileLoader_1.getFileImageId)(file);
        if (imageId) {
            cornerstone_core_1.default.loadImage(imageId).then(function (image) {
                if (!element) {
                    console.error("invalid html element: " + id);
                    return;
                }
                cornerstone_core_1.default.displayImage(element, image);
                const viewport = cornerstone_core_1.default.getViewport(element);
                if (!viewport) {
                    console.error("invalid viewport");
                    return;
                }
                if (viewport.displayedArea) {
                    viewport.displayedArea.brhc.x = image.width;
                    viewport.displayedArea.brhc.y = image.height;
                }
                cornerstone_core_1.default.setViewport(element, viewport);
                cornerstone_core_1.default.fitToWindow(element);
                const t1 = performance.now();
                console.log(`Call to renderFileImage took ${t1 - t0} milliseconds.`);
                //@ts-ignore
                image = null;
                //@ts-ignore
                file = null;
                resolve(true);
            });
        }
        else {
            console.warn("imageId not found in fileManager");
        }
    });
    return renderPromise;
};
exports.renderFileImage = renderFileImage;
/**
 * Render an image (png or jpg) from web url on a html div using cornerstone
 * @instance
 * @function renderWebImage
 * @param {String} url - The image data url
 * @param {String} elementId - The html div id used for rendering or its DOM HTMLElement
 * @returns {Promise} - Return a promise which will resolve when image is displayed
 */
const renderWebImage = function (url, elementId) {
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    let renderPromise = new Promise((resolve, reject) => {
        if (!element) {
            console.error("invalid html element: " + elementId);
            reject("invalid html element: " + elementId);
            return;
        }
        cornerstone_core_1.default.enable(element);
        cornerstone_core_1.default.loadImage(url).then(function (image) {
            if (!element) {
                console.error("invalid html element: " + elementId);
                reject("invalid html element: " + elementId);
                return;
            }
            cornerstone_core_1.default.displayImage(element, image);
            (0, main_1.csToolsCreateStack)(element);
            resolve(image);
        });
    });
    return renderPromise;
};
exports.renderWebImage = renderWebImage;
/**
 * Unrender an image on a html div using cornerstone
 * @instance
 * @function disableViewport
 * @param {String} elementId - The html div id used for rendering or its DOM HTMLElement
 */
const disableViewport = function (elementId) {
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.error("invalid html element: " + elementId);
        return;
    }
    const id = (0, imageUtils_1.isElement)(elementId) ? element.id : elementId;
    (0, interaction_1.toggleMouseToolsListeners)(id, true);
    cornerstone_core_1.default.disable(element);
    (0, imageStore_1.set)(["ready", id, false]);
};
exports.disableViewport = disableViewport;
/**
 * Unrender an image on a html div using cornerstone
 * Remove image from cornerstone cache and remove from store
 * @instance
 * @function unloadViewport
 * @param {String} elementId - The html div id used for rendering or its DOM HTMLElement
 * @param {String} seriesId - The id of the serie
 */
const unloadViewport = function (elementId, seriesId) {
    (0, exports.disableViewport)(elementId);
    if (!seriesId) {
        console.warn("seriesId not provided, use disableViewport if you do not want to uncache images");
    }
    // remove images from cornerstone cache
    if (seriesId && (0, lodash_1.has)(imageStore_1.default.get("series"), seriesId)) {
        (0, exports.clearImageCache)(seriesId);
    }
    imageStore_1.default.deleteViewport(elementId);
};
exports.unloadViewport = unloadViewport;
/**
 * Resize a viewport using cornerstone resize
 * And forcing fit to window
 * @instance
 * @function resizeViewport
 * @param {String} elementId - The html div id used for rendering or its DOM HTMLElement
 */
const resizeViewport = function (elementId) {
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.error("invalid html element: " + elementId);
        return;
    }
    cornerstone_core_1.default.resize(element, true); // true flag forces fitToWindow
};
exports.resizeViewport = resizeViewport;
/**
 * Cache image and render it in a html div using cornerstone
 * @instance
 * @function renderImage
 * @param {Object} seriesStack - The original series data object
 * @param {String} elementId - The html div id used for rendering or its DOM HTMLElement
 * @param {Object} defaultProps - Optional default props
 * @return {Promise} Return a promise which will resolve when image is displayed
 */
const renderImage = function (seriesStack, elementId, defaultProps) {
    const t0 = performance.now();
    // get element and enable it
    const element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.error("invalid html element: " + elementId);
        return new Promise((_, reject) => reject("invalid html element: " + elementId));
    }
    const id = (0, imageUtils_1.isElement)(elementId) ? element.id : elementId;
    cornerstone_core_1.default.enable(element);
    (0, imageStore_1.set)(["ready", id, false]);
    let series = Object.assign({}, seriesStack);
    let data = getSeriesData(series, defaultProps);
    if (!data.imageId) {
        console.warn("error during renderImage: imageId has not been loaded yet.");
        return new Promise((_, reject) => {
            (0, imageStore_1.set)(["pendingSliceId", id, data.imageIndex]);
            reject("error during renderImage: imageId has not been loaded yet.");
        });
    }
    const renderPromise = new Promise((resolve, reject) => {
        // load and display one image (imageId)
        cornerstone_core_1.default.loadImage(data.imageId).then(function (image) {
            var _a, _b, _c, _d, _e, _f, _g, _h;
            if (!element) {
                console.error("invalid html element: " + elementId);
                reject("invalid html element: " + elementId);
                return;
            }
            cornerstone_core_1.default.displayImage(element, image);
            if (series.layer) {
                // assign the image to its layer and return its id
                series.layer.id = cornerstone_core_1.default.addLayer(element, image, series.layer.options);
            }
            const viewport = cornerstone_core_1.default.getViewport(element);
            if (!viewport) {
                console.error("viewport not found");
                reject("viewport not found for element: " + elementId);
                return;
            }
            // window width and window level
            // are stored in specific dicom tags
            // (x00281050 and x00281051)
            // if not present check in image object
            if (((_b = (_a = data.viewport) === null || _a === void 0 ? void 0 : _a.voi) === null || _b === void 0 ? void 0 : _b.windowWidth) === undefined) {
                data.viewport.voi.windowWidth = image.windowWidth;
            }
            if (((_d = (_c = data.viewport) === null || _c === void 0 ? void 0 : _c.voi) === null || _d === void 0 ? void 0 : _d.windowCenter) === undefined) {
                data.viewport.voi.windowCenter = image.windowCenter;
            }
            if (((_f = (_e = data.default) === null || _e === void 0 ? void 0 : _e.voi) === null || _f === void 0 ? void 0 : _f.windowWidth) === undefined) {
                data.default.voi.windowWidth = data.viewport.voi.windowWidth;
            }
            if (((_h = (_g = data.default) === null || _g === void 0 ? void 0 : _g.voi) === null || _h === void 0 ? void 0 : _h.windowCenter) === undefined) {
                data.default.voi.windowCenter = data.viewport.voi.windowCenter;
            }
            cornerstone_core_1.default.fitToWindow(element);
            if (defaultProps && defaultProps.scale !== undefined) {
                viewport.scale = defaultProps["scale"];
                cornerstone_core_1.default.setViewport(element, viewport);
            }
            if (defaultProps &&
                defaultProps.tr_x !== undefined &&
                defaultProps.tr_y !== undefined) {
                viewport.translation.x = defaultProps.tr_x;
                viewport.translation.y = defaultProps.tr_y;
                cornerstone_core_1.default.setViewport(element, viewport);
            }
            // color maps
            if (defaultProps && defaultProps.colormap && image.color == false) {
                (0, imageColormaps_1.applyColorMap)(defaultProps["colormap"]);
            }
            const storedViewport = cornerstone_core_1.default.getViewport(element);
            if (!storedViewport) {
                console.error("storedViewport not found");
                reject("storedViewport not found for element: " + elementId);
                return;
            }
            (0, exports.storeViewportData)(image, element.id, storedViewport, data);
            (0, imageStore_1.set)(["ready", element.id, true]);
            (0, imageStore_1.set)(["seriesUID", element.id, data.seriesUID]);
            const t1 = performance.now();
            console.log(`Call to renderImage took ${t1 - t0} milliseconds.`);
            const uri = cornerstone_wado_image_loader_1.default.wadouri.parseImageId(data.imageId).url;
            cornerstone_wado_image_loader_1.default.wadouri.dataSetCacheManager.unload(uri);
            //@ts-ignore
            image = null;
            //@ts-ignore
            series = null;
            //@ts-ignore
            data = null;
            resolve(true);
        });
        // }
    });
    (0, main_1.csToolsCreateStack)(element, series.imageIds, data.imageIndex - 1);
    (0, interaction_1.toggleMouseToolsListeners)(id, false);
    return renderPromise;
};
exports.renderImage = renderImage;
/**
 * Redraw the cornerstone image
 * @instance
 * @function redrawImage
 * @param {String} elementId - The html div id used for rendering or its DOM HTMLElement
 */
const redrawImage = function (elementId) {
    const element = document.getElementById(elementId);
    if (element) {
        const cornestoneElement = cornerstone_core_1.default.getEnabledElement(element);
        cornerstone_core_1.default.drawImage(cornestoneElement, true);
    }
    else {
        console.error("invalid html element: " + elementId);
    }
};
exports.redrawImage = redrawImage;
/**
 * Update the cornerstone image with new imageIndex
 * @instance
 * @function updateImage
 * @param {Object} series - The original series data object
 * @param {String} elementId - The html div id used for rendering or its DOM HTMLElement
 * @param {Number} imageIndex - The index of the image to be rendered
 * @param {Boolean} cacheImage - A flag to handle image cache
 */
const updateImage = function (series, elementId, imageIndex, cacheImage) {
    return __awaiter(this, void 0, void 0, function* () {
        const element = (0, imageUtils_1.isElement)(elementId)
            ? elementId
            : document.getElementById(elementId);
        if (!element) {
            throw "not element";
        }
        const id = (0, imageUtils_1.isElement)(elementId) ? element.id : elementId;
        const isDSAEnabled = imageStore_1.default.get(["viewports", id, "isDSAEnabled"]);
        const imageId = isDSAEnabled === true
            ? series.dsa.imageIds[imageIndex]
            : series.imageIds[imageIndex];
        if (isDSAEnabled === true) {
            // get the optional custom pixel shift
            const pixelShift = imageStore_1.default.get(["viewports", id, "pixelShift"]);
            (0, dsaImageLoader_1.setPixelShift)(pixelShift);
        }
        if (!imageId) {
            (0, imageStore_1.set)(["pendingSliceId", id, imageIndex]);
            throw `Error: wrong image index ${imageIndex}, no imageId available`;
        }
        if (series.is4D) {
            const timestamp = series.instances[imageId].metadata.contentTime;
            const timeId = series.instances[imageId].metadata.temporalPositionIdentifier - 1; // timeId from 0 to N
            (0, imageStore_1.set)(["timeId", id, timeId]);
            (0, imageStore_1.set)(["timestamp", id, timestamp]);
        }
        if (cacheImage) {
            let t0;
            if ((0, performance_1.getPerformanceMonitor)() === true) {
                t0 = performance.now();
            }
            const image = yield cornerstone_core_1.default.loadAndCacheImage(imageId);
            cornerstone_core_1.default.displayImage(element, image);
            if ((0, performance_1.getPerformanceMonitor)() === true) {
                const t1 = performance.now();
                if (t0 !== undefined) {
                    // check if t0 is defined before using it
                    console.log(`Call to updateImage for viewport ${id} took ${t1 - t0} milliseconds.`);
                }
            }
            (0, imageStore_1.set)(["sliceId", id, imageIndex]);
            const pendingSliceId = imageStore_1.default.get(["viewports", id, "pendingSliceId"]);
            if (imageIndex == pendingSliceId) {
                (0, imageStore_1.set)(["pendingSliceId", id, undefined]);
            }
            (0, imageStore_1.set)(["minPixelValue", id, image.minPixelValue]);
            (0, imageStore_1.set)(["maxPixelValue", id, image.maxPixelValue]);
        }
        else {
            let t0;
            if ((0, performance_1.getPerformanceMonitor)() === true) {
                t0 = performance.now();
            }
            const image = yield cornerstone_core_1.default.loadImage(imageId);
            cornerstone_core_1.default.displayImage(element, image);
            if ((0, performance_1.getPerformanceMonitor)() === true) {
                const t1 = performance.now();
                if (t0 !== undefined) {
                    // check if t0 is defined before using it
                    console.log(`Call to updateImage for viewport ${id} took ${t1 - t0} milliseconds.`);
                }
            }
            (0, imageStore_1.set)(["sliceId", id, imageIndex]);
            const pendingSliceId = imageStore_1.default.get(["viewports", id, "pendingSliceId"]);
            if (imageIndex == pendingSliceId) {
                (0, imageStore_1.set)(["pendingSliceId", id, undefined]);
            }
            (0, imageStore_1.set)(["minPixelValue", id, image.minPixelValue]);
            (0, imageStore_1.set)(["maxPixelValue", id, image.maxPixelValue]);
        }
    });
};
exports.updateImage = updateImage;
/**
 * Reset viewport values (scale, translation and wwwc)
 * @instance
 * @function resetViewports
 * @param {Array} elementIds - The array of hmtl div ids
 * @param {Array} keys - The array of viewport sections to resets (default is all)
 */
const resetViewports = function (elementIds, keys) {
    (0, lodash_1.each)(elementIds, function (elementId) {
        const element = document.getElementById(elementId);
        if (!element) {
            console.error("invalid html element: " + elementId);
            return;
        }
        const defaultViewport = imageStore_1.default.get(["viewports", elementId, "default"]);
        const viewport = cornerstone_core_1.default.getViewport(element);
        if (!viewport) {
            throw new Error("viewport not found");
        }
        if (!keys || keys.find(v => v === "contrast")) {
            viewport.voi.windowWidth = defaultViewport.voi.windowWidth;
            viewport.voi.windowCenter = defaultViewport.voi.windowCenter;
            viewport.invert = defaultViewport.voi.invert;
            (0, imageStore_1.set)([
                "contrast",
                elementId,
                viewport.voi.windowWidth,
                viewport.voi.windowCenter
            ]);
        }
        if (!keys || keys.find(v => v === "scaleAndTranslation")) {
            viewport.scale = defaultViewport.scale;
            (0, imageStore_1.set)(["scale", elementId, viewport.scale]);
            viewport.translation.x = defaultViewport.translation.x;
            viewport.translation.y = defaultViewport.translation.y;
            (0, imageStore_1.set)([
                "translation",
                elementId,
                viewport.translation.x,
                viewport.translation.y
            ]);
        }
        if (!keys || keys.find(v => v === "rotation")) {
            viewport.rotation = defaultViewport.rotation;
            (0, imageStore_1.set)(["rotation", elementId, viewport.rotation]);
        }
        if (!keys || keys.find(v => v === "flip")) {
            viewport.hflip = false;
            viewport.vflip = false;
        }
        if (!keys || keys.find(v => v === "zoom")) {
            viewport.scale = defaultViewport.scale;
            (0, imageStore_1.set)(["scale", elementId, viewport.scale]);
        }
        cornerstone_core_1.default.setViewport(element, viewport);
        if (!keys || keys.find(v => v === "scaleAndTranslation")) {
            cornerstone_core_1.default.fitToWindow(element);
        }
        cornerstone_core_1.default.updateImage(element);
    });
};
exports.resetViewports = resetViewports;
/**
 * Update viewport data in store
 * @instance
 * @function updateViewportData
 * @param {String} elementId - The html div id used for rendering or its DOM HTMLElement
 * @param {Object} viewportData - The new viewport data
 */
const updateViewportData = function (elementId, viewportData, activeTool) {
    let element = document.getElementById(elementId);
    if (!element) {
        console.error("invalid html element: " + elementId);
        return;
    }
    const toolsNames = Object.keys(default_1.DEFAULT_TOOLS);
    const isValidTool = toolsNames.includes(activeTool);
    if (isValidTool === true) {
        switch (activeTool) {
            case "WwwcRegion":
                if (viewportData.voi) {
                    (0, imageStore_1.set)([
                        "contrast",
                        elementId,
                        viewportData.voi.windowWidth,
                        viewportData.voi.windowCenter
                    ]);
                }
                break;
            case "Pan":
                if (viewportData.translation) {
                    (0, imageStore_1.set)([
                        "translation",
                        elementId,
                        viewportData.translation.x,
                        viewportData.translation.y
                    ]);
                }
                break;
            case "Zoom":
                if (viewportData.scale) {
                    (0, imageStore_1.set)(["scale", elementId, viewportData.scale]);
                }
                break;
            case "Rotate":
                if (viewportData.rotation) {
                    (0, imageStore_1.set)(["rotation", elementId, viewportData.rotation]);
                }
                break;
            case "CustomMouseWheelScroll":
                const viewport = imageStore_1.default.get(["viewports", elementId]);
                const isTimeserie = viewport.isTimeserie;
                if (isTimeserie) {
                    const index = viewportData.newImageIdIndex;
                    const timeId = viewport.timeIds[index];
                    const timestamp = viewport.timestamps[index];
                    (0, imageStore_1.set)(["timeId", elementId, timeId]);
                    (0, imageStore_1.set)(["timestamp", elementId, timestamp]);
                }
                break;
            default:
                break;
        }
    }
    else {
        console.warn("unknown tool: " + activeTool);
    }
};
exports.updateViewportData = updateViewportData;
/**
 * Store the viewport data into internal storage
 * @instance
 * @function storeViewportData
 * @param {Object} image - The cornerstone image frame
 * @param {String} elementId - The html div id used for rendering
 * @param {String} viewport - The viewport tag name
 * @param {Object} data - The viewport data object
 */
const storeViewportData = function (image, elementId, viewport, data) {
    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
    (0, imageStore_1.set)(["dimensions", elementId, data.rows, data.cols]);
    (0, imageStore_1.set)(["spacing", elementId, data.spacing_x, data.spacing_y]);
    (0, imageStore_1.set)(["thickness", elementId, data.thickness]);
    (0, imageStore_1.set)(["minPixelValue", elementId, image.minPixelValue]);
    (0, imageStore_1.set)(["maxPixelValue", elementId, image.maxPixelValue]);
    // slice id from 0 to n - 1
    (0, imageStore_1.set)(["minSliceId", elementId, 0]);
    if (data.imageIndex) {
        (0, imageStore_1.set)(["sliceId", elementId, data.imageIndex]);
    }
    const pendingSliceId = imageStore_1.default.get(["viewports", elementId, "pendingSliceId"]);
    if (data.imageIndex == pendingSliceId) {
        (0, imageStore_1.set)(["pendingSliceId", elementId, undefined]);
    }
    if (data.numberOfSlices) {
        (0, imageStore_1.set)(["maxSliceId", elementId, data.numberOfSlices - 1]);
    }
    if (data.isTimeserie) {
        (0, imageStore_1.set)([
            "numberOfTemporalPositions",
            elementId,
            data.numberOfTemporalPositions
        ]);
        (0, imageStore_1.set)(["minTimeId", elementId, 0]);
        (0, imageStore_1.set)(["timeId", elementId, data.timeIndex || 0]);
        if (data.numberOfSlices && data.numberOfTemporalPositions) {
            (0, imageStore_1.set)(["maxTimeId", elementId, data.numberOfTemporalPositions - 1]);
            let maxSliceId = data.numberOfSlices * data.numberOfTemporalPositions - 1;
            (0, imageStore_1.set)(["maxSliceId", elementId, maxSliceId]);
        }
        (0, imageStore_1.set)(["timestamp", elementId, data.timestamp]);
        (0, imageStore_1.set)(["timestamps", elementId, data.timestamps]);
        (0, imageStore_1.set)(["timeIds", elementId, data.timeIds]);
    }
    else {
        (0, imageStore_1.set)(["minTimeId", elementId, 0]);
        (0, imageStore_1.set)(["timeId", elementId, 0]);
        (0, imageStore_1.set)(["maxTimeId", elementId, 0]);
        (0, imageStore_1.set)(["timestamp", elementId, 0]);
        (0, imageStore_1.set)(["timestamps", elementId, []]);
        (0, imageStore_1.set)(["timeIds", elementId, []]);
    }
    (0, imageStore_1.set)([
        "defaultViewport",
        elementId,
        viewport.scale || 0,
        viewport.rotation || 0,
        ((_a = viewport.translation) === null || _a === void 0 ? void 0 : _a.x) || 0,
        ((_b = viewport.translation) === null || _b === void 0 ? void 0 : _b.y) || 0,
        (_d = (_c = data.default) === null || _c === void 0 ? void 0 : _c.voi) === null || _d === void 0 ? void 0 : _d.windowWidth,
        (_f = (_e = data.default) === null || _e === void 0 ? void 0 : _e.voi) === null || _f === void 0 ? void 0 : _f.windowCenter,
        viewport.invert === true
    ]);
    (0, imageStore_1.set)(["scale", elementId, viewport.scale || 0]);
    (0, imageStore_1.set)(["rotation", elementId, viewport.rotation || 0]);
    (0, imageStore_1.set)([
        "translation",
        elementId,
        ((_g = viewport.translation) === null || _g === void 0 ? void 0 : _g.x) || 0,
        ((_h = viewport.translation) === null || _h === void 0 ? void 0 : _h.y) || 0
    ]);
    (0, imageStore_1.set)([
        "contrast",
        elementId,
        ((_j = viewport.voi) === null || _j === void 0 ? void 0 : _j.windowWidth) || 0,
        ((_k = viewport.voi) === null || _k === void 0 ? void 0 : _k.windowCenter) || 0
    ]);
    (0, imageStore_1.set)(["isColor", elementId, data.isColor]);
    (0, imageStore_1.set)(["isMultiframe", elementId, data.isMultiframe]);
    if (data.isMultiframe) {
        (0, imageStore_1.set)(["numberOfFrames", elementId, data.numberOfFrames]);
    }
    (0, imageStore_1.set)(["isTimeserie", elementId, data.isTimeserie]);
    (0, imageStore_1.set)(["isPDF", elementId, false]);
    (0, imageStore_1.set)(["waveform", elementId, data.waveform]);
    (0, imageStore_1.set)(["dsa", elementId, data.dsa]);
};
exports.storeViewportData = storeViewportData;
/**
 * Invert pixels of an image
 * @instance
 * @function invertImage
 * @param {Object} elementId - The html div id used for rendering or its DOM HTMLElement
 */
const invertImage = function (elementId) {
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.error("invalid html element: " + elementId);
        return;
    }
    let viewport = cornerstone_core_1.default.getViewport(element);
    if (!viewport) {
        throw new Error("Viewport is undefined");
    }
    viewport.invert = !viewport.invert;
    cornerstone_core_1.default.setViewport(element, viewport);
};
exports.invertImage = invertImage;
/**
 * Flip image around horizontal axis
 * @instance
 * @function flipImageHorizontal
 * @param {Object} elementId - The html div id used for rendering or its DOM HTMLElement
 */
const flipImageHorizontal = function (elementId) {
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.error("invalid html element: " + elementId);
        return;
    }
    let viewport = cornerstone_core_1.default.getViewport(element);
    if (!viewport) {
        throw new Error("Viewport is undefined");
    }
    viewport.hflip = !viewport.hflip;
    cornerstone_core_1.default.setViewport(element, viewport);
};
exports.flipImageHorizontal = flipImageHorizontal;
/**
 * Flip image around vertical axis
 * @instance
 * @function flipImageVertical
 * @param {Object} elementId - The html div id used for rendering or its DOM HTMLElement
 */
const flipImageVertical = function (elementId) {
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.error("invalid html element: " + elementId);
        return;
    }
    let viewport = cornerstone_core_1.default.getViewport(element);
    if (!viewport) {
        throw new Error("Viewport is undefined");
    }
    viewport.vflip = !viewport.vflip;
    cornerstone_core_1.default.setViewport(element, viewport);
};
exports.flipImageVertical = flipImageVertical;
/**
 * Rotate image by 90° in left direction
 * @instance
 * @function rotateImageLeft
 * @param {Object} elementId - The html div id used for rendering or its DOM HTMLElement
 */
const rotateImageLeft = function (elementId) {
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.error("invalid html element: " + elementId);
        return;
    }
    let viewport = cornerstone_core_1.default.getViewport(element);
    if (!viewport) {
        throw new Error("Viewport is undefined");
    }
    viewport.rotation -= 90;
    cornerstone_core_1.default.setViewport(element, viewport);
};
exports.rotateImageLeft = rotateImageLeft;
/**
 * Rotate image by 90° in right direction
 * @instance
 * @function rotateImageRight
 * @param {Object} elementId - The html div id used for rendering or its DOM HTMLElement
 */
const rotateImageRight = function (elementId) {
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.error("invalid html element: " + elementId);
        return;
    }
    let viewport = cornerstone_core_1.default.getViewport(element);
    if (!viewport) {
        throw new Error("Viewport is undefined");
    }
    viewport.rotation += 90;
    cornerstone_core_1.default.setViewport(element, viewport);
};
exports.rotateImageRight = rotateImageRight;
/* Internal module functions */
/**
 * Get series metadata from default props and series' metadata
 * @instance
 * @function getSeriesData
 * @param {Object} series - The parsed data series
 * @param {Object} defaultProps - Optional default properties
 * @return {Object} data - A data dictionary with parsed tags' values
 */
const getSeriesData = function (series, defaultProps) {
    const data = {};
    data.seriesUID = series.larvitarSeriesInstanceUID || series.seriesUID; //case of resliced series
    if (series.isMultiframe) {
        data.isMultiframe = true;
        data.numberOfSlices = series.imageIds.length;
        data.imageIndex = 0;
        data.imageId = series.imageIds[data.imageIndex];
        data.isTimeserie = false;
        data.numberOfFrames = series.numberOfFrames;
    }
    else if (series.is4D) {
        data.isMultiframe = false;
        data.isTimeserie = true;
        // check with real indices
        data.numberOfSlices = series.numberOfImages;
        data.numberOfTemporalPositions = series.numberOfTemporalPositions;
        data.imageIndex = 0;
        data.timeIndex = 0;
        data.imageId = series.imageIds[data.imageIndex];
        data.timestamp = series.instances[data.imageId].metadata["x00080033"];
        data.timestamps = [];
        data.timeIds = [];
        (0, lodash_1.each)(series.imageIds, function (imageId) {
            data.timestamps.push(series.instances[imageId].metadata.contentTime);
            data.timeIds.push(series.instances[imageId].metadata.temporalPositionIdentifier - 1 // timeId from 0 to N
            );
        });
    }
    else {
        data.isMultiframe = false;
        data.isTimeserie = false;
        const numberOfSlices = defaultProps && defaultProps.numberOfSlices
            ? defaultProps.numberOfSlices
            : series.imageIds.length;
        data.numberOfSlices = numberOfSlices;
        data.imageIndex =
            (defaultProps === null || defaultProps === void 0 ? void 0 : defaultProps.sliceNumber) !== undefined && (defaultProps === null || defaultProps === void 0 ? void 0 : defaultProps.sliceNumber) >= 0 // slice number between 0 and n-1
                ? defaultProps.sliceNumber
                : Math.floor(numberOfSlices / 2);
        data.imageId = series.imageIds[data.imageIndex];
    }
    const instance = data.imageId
        ? series.instances[data.imageId]
        : null;
    data.isColor = series.color;
    data.isPDF = series.isPDF;
    data.waveform = series.waveform;
    data.dsa = series.dsa ? true : false;
    if (instance) {
        data.rows = instance.metadata.x00280010;
        data.cols = instance.metadata.x00280011;
        data.thickness = instance.metadata.x00180050;
        let spacing = instance.metadata.x00280030;
        data.spacing_x = spacing ? spacing[0] : 1;
        data.spacing_y = spacing ? spacing[1] : 1;
        // window center and window width
        data.viewport = {
            voi: {
                windowCenter: defaultProps && defaultProps.wc
                    ? defaultProps.wc
                    : instance.metadata.x00281050,
                windowWidth: defaultProps && defaultProps.ww
                    ? defaultProps.ww
                    : instance.metadata.x00281051
            }
        };
        data.default = {
            voi: {
                windowCenter: defaultProps && (0, lodash_1.has)(defaultProps, "defaultWC")
                    ? defaultProps.defaultWC
                    : data.viewport.voi.windowCenter,
                windowWidth: defaultProps && (0, lodash_1.has)(defaultProps, "defaultWW")
                    ? defaultProps.defaultWW
                    : data.viewport.voi.windowWidth
            }
        };
        if (data.rows == null || data.cols == null) {
            console.warn("invalid image metadata (rows or cols is null)");
            (0, imageStore_1.set)(["errorLog", "Invalid Image Metadata"]);
        }
        else {
            (0, imageStore_1.set)(["errorLog", ""]);
        }
    }
    else {
        console.warn(`ImageId not found in imageIds with index ${data.imageIndex}.`);
    }
    return data;
};


/***/ }),

/***/ 6817:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module imaging/imageReslice
 *  @desc  This file provides functionalities for
 *         image reslice in orthogonal directions
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.resliceSeries = void 0;
// external libraries
const uuid_1 = __webpack_require__(1614);
const lodash_1 = __webpack_require__(6486);
// internal libraries
const imageUtils_1 = __webpack_require__(8345);
const commonLoader_1 = __webpack_require__(326);
const imageStore_1 = __importDefault(__webpack_require__(5278));
/*
 * This module provides the following functions to be exported:
 * resliceSeries(seriesId, seriesData, orientation)
 */
/**
 * Reslice a serie from native orientation to coronal or sagittal orientation
 * @instance
 * @function resliceSeries
 * @param {Object} seriesData the original series data
 * @param {String} orientation the reslice orientation [coronal or sagittal]
 * @returns {Promise} - Return a promise which will resolve when data is available
 */
function resliceSeries(seriesData, orientation) {
    let reslicePromise = new Promise(resolve => {
        let reslicedSeries = {};
        let reslicedSeriesId = (0, uuid_1.v4)();
        let reslicedMetaData = (0, imageUtils_1.getReslicedMetadata)(reslicedSeriesId, "axial", orientation, seriesData, "resliceLoader");
        reslicedSeries.imageIds = reslicedMetaData.imageIds;
        // @ts-ignore fix incompatibilities between these types
        reslicedSeries.instances = reslicedMetaData.instances;
        reslicedSeries.currentImageIdIndex = Math.floor(reslicedSeries.imageIds.length / 2);
        function computeReslice(seriesData, reslicedSeriesId, reslicedSeries) {
            let t0 = performance.now();
            let imageTracker = (0, commonLoader_1.getLarvitarImageTracker)();
            let manager = (0, commonLoader_1.getLarvitarManager)();
            (0, lodash_1.each)(reslicedSeries.imageIds, function (imageId) {
                reslicedSeries.instances[imageId].pixelData = (0, imageUtils_1.getReslicedPixeldata)(imageId, seriesData, reslicedSeries);
                imageTracker[imageId] = reslicedSeriesId;
            });
            imageStore_1.default.addSeriesId(reslicedSeriesId, reslicedSeries.imageIds);
            reslicedSeries.numberOfImages = reslicedSeries.imageIds.length;
            reslicedSeries.seriesUID = reslicedSeriesId;
            reslicedSeries.seriesDescription = seriesData.seriesDescription;
            reslicedSeries.orientation = orientation;
            manager[reslicedSeriesId] = reslicedSeries;
            //@ts-ignore deprecated
            manager[seriesData.seriesUID][orientation] = reslicedSeriesId;
            let t1 = performance.now();
            console.log(`Call to resliceSeries took ${t1 - t0} milliseconds.`);
            resolve(reslicedSeries);
        }
        // reslice the data
        computeReslice(seriesData, reslicedSeriesId, reslicedSeries);
    });
    return reslicePromise;
}
exports.resliceSeries = resliceSeries;


/***/ }),

/***/ 5278:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

/** @module imaging/imageStore
 *  @desc This file provides functionalities
 *        for data config store.
 */
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.set = void 0;
// external libraries
const lodash_1 = __webpack_require__(6486);
// Larvitar store object
let STORE;
// Data listeners
let storeListener = undefined;
const seriesListeners = {};
const viewportsListeners = {};
// default initial store object
const INITIAL_STORE_DATA = {
    colormapId: "gray",
    errorLog: "",
    leftActiveTool: undefined,
    rightActiveTool: undefined,
    series: {},
    viewports: {}
};
// default viewport object
const DEFAULT_VIEWPORT = {
    loading: 0, // from 0 to 100 (%)
    ready: false, // true when currentImageId is rendered
    minSliceId: 0,
    maxSliceId: 0,
    sliceId: 0,
    pendingSliceId: undefined,
    minTimeId: 0,
    maxTimeId: 0,
    timeId: 0,
    timestamp: 0,
    timestamps: [],
    timeIds: [],
    rows: 0,
    cols: 0,
    spacing_x: 0.0,
    spacing_y: 0.0,
    thickness: 0.0,
    minPixelValue: 0,
    maxPixelValue: 0,
    isColor: false,
    isMultiframe: false,
    isTimeserie: false,
    isDSAEnabled: false,
    isPDF: false,
    waveform: false,
    dsa: false,
    viewport: {
        scale: 0.0,
        rotation: 0.0,
        translation: {
            x: 0.0,
            y: 0.0
        },
        voi: {
            windowCenter: 0.0,
            windowWidth: 0.0
        },
        // redundant fields ?
        rows: 0,
        cols: 0,
        spacing_x: 0.0,
        spacing_y: 0.0,
        thickness: 0.0
    },
    default: {
        scale: 0.0,
        rotation: 0.0,
        translation: {
            x: 0.0,
            y: 0.0
        },
        voi: {
            windowCenter: 0.0,
            windowWidth: 0.0,
            invert: false
        }
    }
};
// Trigger store listeners
const triggerStoreListener = (data) => storeListener ? storeListener(data) : undefined;
const triggerViewportListener = (elementId) => {
    if (viewportsListeners[elementId] && (STORE === null || STORE === void 0 ? void 0 : STORE.viewports[elementId])) {
        viewportsListeners[elementId](STORE.viewports[elementId]);
    }
};
const triggerSeriesListener = (seriesId) => {
    if (seriesListeners[seriesId] && (STORE === null || STORE === void 0 ? void 0 : STORE.series[seriesId])) {
        seriesListeners[seriesId](STORE.series[seriesId]);
    }
};
/**
 * Set a value into store
 * @function setValue
 * @param {Object} data - The data object
 */
const setValue = (store, data) => {
    let field = data[0];
    const k = data[1];
    let [_1, _2, ...v] = data;
    const viewport = store.viewports[k];
    // assign values
    switch (field) {
        case "progress":
            if (!store.series[k]) {
                return;
            }
            store.series[k][field] = v[0];
            triggerSeriesListener(k);
            break;
        case "seriesUID":
            if (!viewport) {
                return;
            }
            viewport[field] = v[0];
            triggerViewportListener(k);
            break;
        case "isColor":
        case "isMultiframe":
        case "isPDF":
        case "waveform":
        case "dsa":
        case "isTimeserie":
        case "isDSAEnabled":
        case "ready":
            if (!viewport) {
                return;
            }
            viewport[field] = v[0];
            triggerViewportListener(k);
            break;
        case "loading":
        case "minPixelValue":
        case "maxPixelValue":
        case "minSliceId":
        case "maxSliceId":
        case "minTimeId":
        case "maxTimeId":
        case "sliceId":
        case "pendingSliceId":
        case "timeId":
        case "timestamp":
        case "numberOfFrames":
        case "numberOfTemporalPositions":
            if (!viewport) {
                return;
            }
            viewport[field] = v[0];
            triggerViewportListener(k);
            break;
        case "timestamps":
        case "timeIds":
        case "pixelShift":
            if (!viewport) {
                return;
            }
            viewport[field] = v[0];
            triggerViewportListener(k);
            break;
        case "rotation":
        case "scale":
            if (!viewport) {
                return;
            }
            viewport.viewport[field] = v[0];
            triggerViewportListener(k);
            break;
        case "thickness":
            if (!viewport) {
                return;
            }
            viewport[field] = v[0];
            viewport.viewport[field] = v[0];
            triggerViewportListener(k);
            break;
        case "translation":
            if (!viewport) {
                return;
            }
            v = v;
            viewport.viewport[field] = { x: v[0], y: v[1] };
            triggerViewportListener(k);
            break;
        case "contrast":
            if (!viewport) {
                return;
            }
            v = v;
            viewport.viewport.voi.windowWidth = v[0];
            viewport.viewport.voi.windowCenter = v[1];
            triggerViewportListener(k);
            break;
        case "dimensions":
            if (!viewport) {
                return;
            }
            v = v;
            viewport.rows = v[0];
            viewport.cols = v[1];
            viewport.viewport.rows = v[0];
            viewport.viewport.cols = v[1];
            triggerViewportListener(k);
            break;
        case "spacing":
            if (!viewport) {
                return;
            }
            v = v;
            viewport.spacing_x = v[0];
            viewport.spacing_y = v[1];
            viewport.viewport.spacing_x = v[0];
            viewport.viewport.spacing_y = v[1];
            triggerViewportListener(k);
            break;
        case "defaultViewport":
            if (!viewport) {
                return;
            }
            v = v;
            viewport.default.scale = v[0];
            viewport.default.rotation = v[1];
            viewport.default.translation.x = v[2];
            viewport.default.translation.y = v[3];
            viewport.default.voi.windowWidth = v[4];
            viewport.default.voi.windowCenter = v[5];
            viewport.default.voi.invert = v[6];
            triggerViewportListener(k);
            break;
        default:
            store[field] = k;
            break;
    }
};
/**
 * Instancing the store
 */
const setup = (data = (0, lodash_1.cloneDeep)(INITIAL_STORE_DATA)) => {
    /**
     * Create the Proxy handler object
     * @param  {String} name The namespace
     * @param  {Object} data The data object
     * @return {Object}      The Proxy handler
     */
    const handler = {
        get: (obj, prop) => {
            if (prop === "_isProxy")
                return true;
            if (["object", "array"].includes(Object.prototype.toString.call(obj[prop]).slice(8, -1).toLowerCase()) &&
                !obj[prop]._isProxy) {
                obj[prop] = new Proxy(obj[prop], handler);
            }
            return obj[prop];
        },
        set: (obj, prop, value) => {
            // console.warn("SET", obj, prop, value);
            if (obj[prop] === value)
                return true;
            obj[prop] = value;
            triggerStoreListener(data);
            return true;
        },
        deleteProperty: (obj, prop) => {
            delete obj[prop];
            triggerStoreListener(data);
            return true;
        }
    };
    return new Proxy(data, handler);
};
const initializeStore = () => {
    STORE = setup();
};
const validateStore = () => {
    if (!STORE) {
        throw "Larvitar store does not exists. Initialize it with the 'initializeStore' function.";
    }
};
const set = (payload) => {
    validateStore();
    setValue(STORE, payload);
};
exports.set = set;
exports["default"] = {
    initialize: initializeStore,
    // add/remove viewports
    addViewport: (name) => {
        validateStore();
        STORE.viewports[name] = (0, lodash_1.cloneDeep)(DEFAULT_VIEWPORT);
    },
    deleteViewport: (name) => {
        validateStore();
        delete STORE.viewports[name];
    },
    // add/remove series instances ids
    addSeriesId: (seriesId, imageIds) => {
        validateStore();
        if (!STORE.series[seriesId]) {
            STORE.series[seriesId] = {};
        }
        STORE.series[seriesId].imageIds = imageIds;
        triggerSeriesListener(seriesId);
    },
    removeSeriesId: (seriesId) => {
        validateStore();
        delete STORE.series[seriesId];
    },
    resetSeriesIds: () => {
        validateStore();
        STORE.series = {};
    },
    // expose useful sets
    setSliceId: (elementId, imageIndex) => {
        (0, exports.set)(["sliceId", elementId, imageIndex]);
    },
    setPendingSliceId: (elementId, imageIndex) => {
        (0, exports.set)(["pendingSliceId", elementId, imageIndex]);
    },
    setMaxSliceId: (elementId, imageIndex) => {
        (0, exports.set)(["maxSliceId", elementId, imageIndex]);
    },
    setTimeId: (elementId, timeIndex) => {
        (0, exports.set)(["timeId", elementId, timeIndex]);
    },
    setDSAEnabled: (elementId, enabled) => {
        (0, exports.set)(["isDSAEnabled", elementId, enabled]);
    },
    setDSAPixelShift: (elementId, pixelShift) => {
        (0, exports.set)(["pixelShift", elementId, pixelShift]);
    },
    // get
    get: (props) => {
        validateStore();
        return props ? (0, lodash_1.get)(STORE, props) : STORE;
    },
    // watch store
    addStoreListener: (listener) => (storeListener = listener),
    removeStoreListener: () => (storeListener = undefined),
    // watch single viewport
    addViewportListener: (elementId, listener) => {
        viewportsListeners[elementId] = listener;
    },
    removeViewportListener: (elementId) => {
        delete viewportsListeners[elementId];
    },
    // watch single series
    addSeriesListener: (seriesId, listener) => {
        seriesListeners[seriesId] = listener;
    },
    removeSeriesListener: (seriesId) => {
        delete seriesListeners[seriesId];
    }
};


/***/ }),

/***/ 606:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getTagValue = exports.parseTag = void 0;
// external libraries
const dataDictionary_json_1 = __importDefault(__webpack_require__(9379));
//Changed data dictionary using:
//regex "\((\d+),(\d+)\)"
//"x$1$2"
//now tag are in format "x00000000"
const dicom_character_set_1 = __webpack_require__(4222);
/*
 * This module provides the following functions to be exported:
 * parseTag(dataSet, propertyName, element)
 * getDICOMTagCode(code)
 * getDICOMTag(code)
 * isStringVr(vr)
 * parseDateTag(tagValue)
 * parseDateTimeTag(tagValue)
 * parseTimeTag(tagValue)
 * parsePatientNameTag(tagValue)
 * parseAgeTag(tagValue)
 * parseDICOMFileIDTag(tagValue)
 * getTagValue(dataSet, tag)
 * formatDate(date)
 * formatDateTime(date)
 * isValidDate(d)
 */
/**
 * Convert date from dicom tag
 * @instance
 * @function formatDate
 * @param {Date} dicomDate - A date from a DICOM tag
 * @return {String} - The human readable date
 */
let formatDate = function (date) {
    let yyyy = date.slice(0, 4);
    let mm = date.slice(4, 6);
    let dd = date.slice(6, 8);
    return (yyyy + "-" + (mm[1] ? mm : "0" + mm[0]) + "-" + (dd[1] ? dd : "0" + dd[0]));
};
/**
 * Convert datetime from dicom tag
 * @instance
 * @function formatDateTime
 * @param {Date} dicomDateTime - A dateTime from a DICOM tag
 * @return {String} - The human readable dateTime
 */
let formatDateTime = function (date) {
    let yyyy = date.slice(0, 4);
    let mm = date.slice(4, 6);
    let dd = date.slice(6, 8);
    let hh = date.slice(8, 10);
    let m = date.slice(10, 12);
    let ss = date.slice(12, 14);
    return (yyyy +
        "-" +
        (mm[1] ? mm : "0" + mm[0]) +
        "-" +
        (dd[1] ? dd : "0" + dd[0]) +
        "/" +
        hh +
        ":" +
        m +
        ":" +
        ss);
};
/**
 * Check if argument is a valid Date Object
 * @instance
 * @function isValidDate
 * @param {Date} d - The date object to be checked
 * @return {Boolean} - Boolean result
 */
const isValidDate = function (d) {
    return d instanceof Date && !isNaN(d.getTime());
};
/**
 * Parse a dicom date tag into human readable format
 * @instance
 * @function parseDateTag
 * @param {String} tagValue - The string to be parsed
 * @return {String} - The parsed result
 */
const parseDateTag = function (tagValue) {
    if (!tagValue)
        return "";
    const year = tagValue.substring(0, 4);
    const month = tagValue.substring(4, 6);
    const day = tagValue.substring(6, 8);
    const date = new Date(parseInt(year), parseInt(month) - 1, parseInt(day));
    if (isValidDate(date) === true) {
        return date.toISOString();
    }
    else {
        return tagValue;
    }
};
/**
 * Parse a dicom datetime tag into human readable format
 * @instance
 * @function parseDateTimeTag
 * @param {String} tagValue - The string to be parsed
 * @return {String} - The parsed result
 */
const parseDateTimeTag = function (tagValue) {
    if (!tagValue)
        return "";
    const year = tagValue.substring(0, 4);
    const month = tagValue.substring(4, 6);
    const day = tagValue.substring(6, 8);
    const hour = tagValue.substring(8, 10);
    const min = tagValue.substring(10, 12);
    const sec = tagValue.substring(12, 14);
    // const msec = tagValue.substring(15, 21);
    const date = new Date(parseInt(year), parseInt(month) - 1, parseInt(day), parseInt(hour), parseInt(min), parseInt(sec), parseInt(sec));
    if (isValidDate(date) === true) {
        return date.toISOString();
    }
    else {
        return tagValue;
    }
};
/**
 * Parse a dicom time tag into human readable format
 * @instance
 * @function parseTimeTag
 * @param {String} tagValue - The string to be parsed
 * @return {String} - The parsed result
 */
const parseTimeTag = function (tagValue) {
    if (!tagValue)
        return "";
    let hour = tagValue.substring(0, 2);
    let min = tagValue.substring(2, 4);
    let sec = tagValue.substring(4, 6);
    let msec = tagValue.substring(7, 13) ? tagValue.substring(7, 13) : "0";
    let result = hour + ":" + min + ":" + sec + "." + msec;
    return result;
};
/**
 * Parse a dicom patient tag into human readable format
 * @instance
 * @function parsePatientNameTag
 * @param {String} tagValue - The string to be parsed
 * @return {String} - The parsed result
 */
const parsePatientNameTag = function (tagValue) {
    if (!tagValue)
        return "";
    return tagValue.replace(/\^/gi, " ");
};
/**
 * Parse a dicom age tag into human readable format
 * @instance
 * @function parseAgeTag
 * @param {String} tagValue - The string to be parsed
 * @return {String} - The parsed result
 */
const parseAgeTag = function (tagValue) {
    if (!tagValue)
        return "";
    let regs = /(\d{3})(D|W|M|Y)/gim.exec(tagValue);
    if (regs) {
        return parseInt(regs[1]) + " " + regs[2];
    }
    else {
        return "";
    }
};
/**
 * Parse a dicom fileID tag into human readable format
 * @instance
 * @function parseDICOMFileIDTag
 * @param {String} tagValue - The string to be parsed
 * @return {String} - The parsed result
 */
const parseDICOMFileIDTag = function (tagValue) {
    // The DICOM File Service does not specify any "separator" between
    // the Components of the File ID. This is a Value Representation issue that
    // may be addressed in a specific manner by each Media Format Layer.
    // In DICOM IODs, File ID Components are generally handled as multiple
    // Values and separated by "backslashes".
    // There is no requirement that Media Format Layers use this separator.
    if (!tagValue)
        return "";
    // @ts-ignore //TODO this can't work!
    return tagValue.split("\\").join(path.sep);
};
/**
 * Check if argument is a string of concatenated vrs
 * @instance
 * @function isStringVr
 * @param {String} vr - The string to be checked
 * @return {Boolean} - Boolean result
 */
const isStringVr = function (vr) {
    // vr can be a string of concatenated vrs
    vr = vr || "";
    vr = vr.split("|")[0];
    if (vr === "AT" ||
        vr === "FL" ||
        vr === "FD" ||
        vr === "OB" ||
        vr === "OF" ||
        vr === "OW" ||
        vr === "SI" ||
        vr === "SL" || // signed long
        vr === "SQ" ||
        vr === "SS" ||
        vr === "UL" ||
        vr === "US") {
        return false;
    }
    return true;
};
/**
 * Get the dicom tag code from dicom image
 * @instance
 * @function getDICOMTagCode
 * @param {String} dicomTag - The original DICOM tag code
 * @return {String} - The human readable DICOM tag code
 */
/*function getDICOMTagCode(code: string) {
  let re = /x(\w{4})(\w{4})/;
  let result = re.exec(code);
  if (!result) {
    return code;
  }
  let newCode = "(" + result[1] + "," + result[2] + ")";
  newCode = newCode.toUpperCase();
  return newCode;
}*/
//This function is not necessary animore because dataDictionary contains tags in format "x00000000"
/**
 * Get the dicom tag from dicom tag code
 * @instance
 * @function getDICOMTag
 * @param {String} dicomTagCode - The original DICOM tag code
 * @return {String} - The human readable DICOM tag
 */
function getDICOMTag(code) {
    // convert to upper case all newcode string except for the first char
    let newCode = code.charAt(0) + code.slice(1).toUpperCase();
    if (!Object.keys(dataDictionary_json_1.default).includes(newCode)) {
        console.warn(`Invalid tag key: ${newCode}`);
        return null;
    }
    // force type to keyof typeof TAG_DICT after having checked that it is a valid key
    let tag = dataDictionary_json_1.default[newCode];
    return tag;
}
/**
 * Parse a DICOM Tag according to its type
 * @instance
 * @function parseTag
 * @param {Object} dataSet - The parsed dataset object from dicom parser
 * @param {String} propertyName - The tag name
 * @param {Object} element - The parsed dataset element
 * @return {String} - The DICOM Tag value
 */
function parseTag(dataSet, propertyName, //x0000000 string
element // TODO-ts better type @szanchi
) {
    // GET VR
    var tagData = dataSet.elements[propertyName];
    var vr = tagData === null || tagData === void 0 ? void 0 : tagData.vr;
    if (!vr) {
        // use dicom dict to get VR
        var tag = getDICOMTag(propertyName);
        //From now on tag is an object of datadictionary.json (TAG_TYPE) and tag.tag is rapresented as "x0000000"
        //so propertyname= tag.tag=keyof MetaDataTypes
        if (tag && tag.vr) {
            vr = tag.vr;
        }
        else {
            return element;
        }
    }
    var valueIn;
    var valueOut;
    if (isStringVr(vr)) {
        // We ask the dataset to give us the element's data in string form.
        // Most elements are strings but some aren't so we do a quick check
        // to make sure it actually has all ascii characters so we know it is
        // reasonable to display it.
        let TAG = propertyName;
        var str = dataSet.string(propertyName);
        if (str === undefined) {
            return undefined;
        }
        else {
            // the string will be undefined if the element is present but has no data
            // (i.e. attribute is of type 2 or 3) so we only display the string if it has
            // data. Note that the length of the element will be 0 to indicate "no data"
            // so we don't put anything here for the value in that case.
            valueIn = str;
            valueOut = str;
        }
        // A string of characters representing an Integer in base-10 (decimal),
        // shall contain only the characters 0 - 9, with an optional leading "+" or "-".
        // It may be padded with leading and/or trailing spaces. Embedded spaces
        // are not allowed. The integer, n, represented shall be in the range:
        // -231 <= n <= (231 - 1).
        if (vr === "IS") {
            valueOut = parseInt(valueIn);
        }
        // A string of characters representing either a fixed point number
        // or a floating point number. A fixed point number shall contain only
        // the characters 0-9 with an optional leading "+" or "-" and an optional "."
        // to mark the decimal point. A floating point number shall be conveyed
        // as defined in ANSI X3.9, with an "E" or "e" to indicate the start
        // of the exponent. Decimal Strings may be padded with leading or trailing spaces.
        // Embedded spaces are not allowed.
        else if (vr === "DS") {
            valueIn = valueIn.split("\\").map(Number);
            if (propertyName == "x00281050" || propertyName == "x00281051") {
                valueOut = valueIn.length > 0 ? valueIn[0] : valueIn;
            }
            else {
                valueOut = valueIn.length == 1 ? valueIn[0] : valueIn;
            }
        }
        // A string of characters of the format YYYYMMDD; where YYYY shall contain year,
        // MM shall contain the month, and DD shall contain the day,
        // interpreted as a date of the Gregorian calendar system.
        else if (vr === "DA") {
            valueOut = parseDateTag(valueIn);
        }
        // A concatenated date-time character string in the format:
        // YYYYMMDDHHMMSS.FFFFFF
        else if (vr === "DT") {
            valueOut = parseDateTimeTag(valueIn);
        }
        // A string of characters of the format HHMMSS.FFFFFF; where HH contains hours
        // (range "00" - "23"), MM contains minutes (range "00" - "59"),
        // SS contains seconds (range "00" - "60"), and FFFFFF contains a fractional
        // part of a second as small as 1 millionth of a second (range "000000" - "999999").
        else if (vr === "TM") {
            valueOut = parseTimeTag(valueIn);
        }
        // Specific Character Set (0008,0005) identifies the Character Set that expands or
        // replaces the Basic Graphic Set (ISO 646) for values of Data Elements that have
        // Value Representation of SH, LO, ST, PN, LT, UC or UT.
        // If the Attribute Specific Character Set (0008,0005) is not present or has only
        // a single value, Code Extension techniques are not used. Defined Terms for the
        // Attribute Specific Character Set (0008,0005), when single valued, are derived
        // from the International Registration Number as per ISO 2375
        // (e.g., ISO_IR 100 for Latin alphabet No. 1).
        // See https://github.com/radialogica/dicom-character-set
        else if (vr == "PN" ||
            vr == "SH" ||
            vr == "LO" ||
            vr == "ST" ||
            vr == "LT" ||
            vr == "UC" ||
            vr == "UT") {
            // get character set
            let characterSet = dataSet.string("x00080005");
            if (characterSet) {
                let data = dataSet.elements[propertyName];
                let arr = new Uint8Array(dataSet.byteArray.buffer, data.dataOffset, data.length);
                // try to convert bytes
                // if raises invalid character set
                // catch error
                try {
                    valueOut = (0, dicom_character_set_1.convertBytes)(characterSet, arr, {
                        vr: vr
                    });
                }
                catch (error) {
                    console.warn("Invalid Character Set: " + characterSet);
                    valueOut = "Invalid Character Set: " + characterSet;
                }
                arr = null;
            }
            if (vr == "PN") {
                // PatientName tag value is: "LastName^FirstName^MiddleName".
                // Spaces inside each name component are permitted. If you don't know
                // any of the three components, just leave it empty.
                // Actually you may even append a name prefix (^professor) and
                // a name suffix (^senior) so you have a maximum of 5 components.
                valueOut = parsePatientNameTag(valueIn);
            }
            valueOut = valueOut.replace(/\0/g, ""); // remove null char (\u0000)
        }
        // A string of characters with one of the following formats
        // -- nnnD, nnnW, nnnM, nnnY; where nnn shall contain the number of days for D,
        // weeks for W, months for M, or years for Y.
        else if (vr == "AS") {
            valueOut = parseAgeTag(valueIn);
        }
        // A string of characters with leading or trailing spaces (20H) being non-significant.
        else if (vr === "CS") {
            if (propertyName === "x00041500") {
                valueOut = parseDICOMFileIDTag(valueIn);
            }
            else {
                valueOut = valueIn.split("\\").join(", ");
            }
        }
    }
    else if (vr === "US") {
        valueOut = dataSet.uint16(propertyName);
    }
    else if (vr === "SS") {
        valueOut = dataSet.int16(propertyName);
    }
    else if (vr === "US|SS") {
        valueOut = dataSet.int16(propertyName);
    }
    else if (vr === "UL") {
        valueOut = dataSet.uint32(propertyName);
    }
    else if (vr === "SL") {
        valueOut = dataSet.int32(propertyName);
    }
    else if (vr == "FD") {
        valueOut = dataSet.double(propertyName);
    }
    else if (vr == "FL") {
        // check if there are multiple values
        if (propertyName === "x00186060") {
            // RWaveTimeVector
            let index = 0;
            let rWaveTimeVector = [];
            while (dataSet.float(propertyName, index)) {
                let value = dataSet.float(propertyName, index);
                // push value in array if is bigger than previous value
                if (index > 0 && value && value < rWaveTimeVector[index - 1]) {
                    break;
                }
                if (value) {
                    rWaveTimeVector.push(value);
                }
                index++;
            }
            valueOut = rWaveTimeVector;
        }
        else {
            valueOut = dataSet.float(propertyName);
        }
    }
    else if (vr === "OB" ||
        vr === "OW" ||
        vr === "OW|OB" ||
        vr === "US|OW" ||
        vr === "UN" ||
        vr === "OF" ||
        vr === "UT") {
        // If it is some other length and we have no string
        if (element.length === 2) {
            valueOut =
                "binary data of length " +
                    element.length +
                    " as uint16: " +
                    dataSet.uint16(propertyName);
        }
        else if (element.length === 4) {
            valueOut =
                "binary data of length " +
                    element.length +
                    " as uint32: " +
                    dataSet.uint32(propertyName);
        }
        else {
            valueOut = tagData;
        }
    }
    else if (vr === "AT") {
        var group = dataSet.uint16(propertyName, 0);
        if (group) {
            var groupHexStr = ("0000" + group.toString(16)).substr(-4);
            var elm = dataSet.uint16(propertyName, 1);
            var elmHexStr = elm
                ? ("0000" + elm.toString(16)).substr(-4)
                : "0000".substr(-4);
            valueOut = "x" + groupHexStr + elmHexStr;
        }
        else {
            valueOut = "";
        }
    }
    //seems it is not used TODO-ts sm
    /*else if (vr === "SQ") {
      // parse the nested tags and returns metadata in array of metadata.
      var subTags = map(element, function (obj) {
        return map(obj, function (v : Element, k : string) {
          let TAG= k as keyof MetaDataTypes;
          return parseTag<MetaDataTypes[typeof TAG]>(dataSet, k, v);
        });
      });
  
      valueOut = subTags;
    }*/
    else {
        // If it is some other length and we have no string
        valueOut = "no display code for VR " + vr;
    }
    return valueOut;
}
exports.parseTag = parseTag;
/**
 * Extract tag value according to its value rapresentation, see
 * {@link http://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html}
 * @instance
 * @function getTagValue
 * @param {Object} dataSet - the dataset
 * @param {String} tag - the desired tag key
 * @return {Number | Array | String} - the desired tag value
 */
const getTagValue = function (dataSet, tag) {
    let tagObj = getDICOMTag(tag);
    // tag value rapresentation
    if (!tagObj) {
        return null;
    }
    let vr = tagObj.vr;
    // parse value according to vr map
    let vrParsingMap = {
        // Date
        // string of characters of the format YYYYMMDD; where YYYY shall contain year,
        // MM shall contain the month, and DD shall contain the day,
        // interpreted as a date of the Gregorian calendar system.
        DA: function () {
            let dateString = dataSet.string(tag);
            return dateString ? formatDate(dateString) : "";
        },
        // Decimal String
        // A string of characters representing either a fixed point number
        // or a floating point number.
        DS: function () {
            if (!dataSet) {
                return null;
            }
            let tag_str = dataSet.string(tag);
            let array = tag_str ? tag_str.split("\\").map(Number) : null;
            if (!array) {
                return null;
            }
            return array.length === 1 ? array[0] : array;
        },
        // Date Time
        // A concatenated date-time character string in the format:
        // YYYYMMDDHHMMSS.FFFFFF&ZZXX
        DT: function () {
            let dateString = dataSet.string(tag);
            return dateString ? formatDateTime(dateString) : "";
        },
        // Person Name
        // A character string encoded using a 5 component convention.
        // The character code 5CH (the BACKSLASH "\" in ISO-IR 6) shall
        // not be present, as it is used as the delimiter between values
        // in multiple valued data elements. The string may be padded
        // with trailing spaces. For human use, the five components
        // in their order of occurrence are: family name complex,
        // given name complex, middle name, name prefix, name suffix.
        PN: function () {
            let tag_str = dataSet.string(tag);
            let pn = tag_str ? tag_str.split("^") : null;
            if (!pn) {
                return null;
            }
            let pns = [pn[3], pn[0], pn[1], pn[2], pn[4]];
            return pns.join(" ").trim();
        },
        // Signed Short
        // Signed binary integer 16 bits long in 2's complement form
        SS: function () {
            return dataSet.uint16(tag);
        },
        // Unique Identifier
        // A character string containing a UID that is used to uniquely
        // identify a wide letiety of items. The UID is a series of numeric
        // components separated by the period "." character.
        UI: function () {
            return dataSet.string(tag);
        },
        // Unsigned Short
        // Unsigned binary integer 16 bits long.
        US: function () {
            return dataSet.uint16(tag);
        },
        "US|SS": function () {
            return dataSet.uint16(tag);
        }
    };
    return vrParsingMap[vr] ? vrParsingMap[vr]() : dataSet.string(tag);
};
exports.getTagValue = getTagValue;


/***/ }),

/***/ 8345:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module imaging/imageUtils
 *  @desc This file provides utility functions for
 *        manipulating image pixels and image metadata
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.isElement = exports.getImageMetadata = exports.getDistanceBetweenSlices = exports.getReslicedPixeldata = exports.getCmprMetadata = exports.getReslicedMetadata = exports.getMeanValue = exports.randomId = exports.getSortedUIDs = exports.getSortedStack = exports.getTypedArrayFromDataType = exports.getPixelRepresentation = exports.getMaxPixelValue = exports.getMinPixelValue = exports.getNormalOrientation = void 0;
// external libraries
const lodash_1 = __webpack_require__(6486);
const uuid_1 = __webpack_require__(1614);
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
// internal libraries
const dicomLoader_1 = __webpack_require__(6790);
const dataDictionary_json_1 = __importDefault(__webpack_require__(9379));
const commonLoader_1 = __webpack_require__(326);
const imageTags_1 = __webpack_require__(606);
// global module variables
// variables used to manage the reslice functionality
const resliceTable = {
    sagittal: { coronal: [-2, 1, 0], axial: [-2, 0, -1] },
    coronal: { sagittal: [2, 1, -0], axial: [0, 2, -1] },
    axial: { sagittal: [1, -2, -0], coronal: [0, -2, 1] }
};
/*
 * This module provides the following functions to be exported:
 * getNormalOrientation(array[6])
 * getMinPixelValue(defaultValue, pixelData)
 * getMaxPixelValue(defaultValue, pixelData)
 * getPixelRepresentation(dataset)
 * getTypedArrayFromDataType(dataType)
 * getSortedStack(seriesData, sortPriorities, returnSuccessMethod)
 * getSortedUIDs(seriesData)
 * randomId()
 * getMeanValue(series, tag, isArray)
 * getReslicedMetadata(reslicedSeriesId, fromOrientation, toOrientation, seriesData, imageLoaderName)
 * getCmprMetadata(reslicedSeriesId, imageLoaderName, header)
 * getReslicedPixeldata(imageId, originalData, reslicedData)
 * getDistanceBetweenSlices(seriesData, sliceIndex1, sliceIndex2)
 * isElement(o)
 * getImageMetadata(seriesUID, instanceUID)
 */
/**
 * @typedef {Object} CornerstoneSeries
 * @property {Array} imageIds Array of the instances imageIds
 * @property {Array} instances Array of instances
 * @property {Number} currentImageIndex Currently loaded image id index in the imageIds array
 */
/**
 * Return computed 3D normal from two 3D vectors
 * @instance
 * @function getNormalOrientation
 * @param {Array} el - The image_orientation dicom tag
 */
const getNormalOrientation = function (el) {
    let a = [el[0], el[1], el[2]];
    let b = [el[3], el[4], el[5]];
    let n = [
        a[1] * b[2] - a[2] * b[1],
        a[2] * b[0] - a[0] * b[2],
        a[0] * b[1] - a[1] * b[0]
    ];
    return n;
};
exports.getNormalOrientation = getNormalOrientation;
/**
 * Get the min pixel value from pixelData
 * @instance
 * @function getMinPixelValue
 * @param {Array} pixelData - Pixel data array
 */
const getMinPixelValue = function (pixelData) {
    let min = 0;
    for (let i = 0; i < pixelData.length; i++) {
        if (!min || min > pixelData[i]) {
            min = pixelData[i];
        }
    }
    return min;
};
exports.getMinPixelValue = getMinPixelValue;
/**
 * Get the max pixel value from pixelData
 * @instance
 * @function getMaxPixelValue
 * @param {Array} pixelData - Pixel data array
 */
const getMaxPixelValue = function (pixelData) {
    let max = 0;
    for (let i = 0; i < pixelData.length; i++) {
        if (!max || max < pixelData[i]) {
            max = pixelData[i];
        }
    }
    return max;
};
exports.getMaxPixelValue = getMaxPixelValue;
/**
 * Create the pixel representation string (type and length) from dicom tags
 * @instance
 * @function getPixelRepresentation
 * @param {Object} dataSet - The dataset
 * @returns {String} The pixel representation in the form Sint / Uint + bytelength
 */
const getPixelRepresentation = function (dataSet) {
    if (dataSet.repr) {
        return dataSet.repr;
    }
    else {
        // Bits Allocated (0028,0100) defines how much space is allocated
        // in the buffer for every sample in bits.
        let bitsAllocated = (0, imageTags_1.getTagValue)(dataSet, "x00280100");
        // Pixel Representation (0028,0103) is either unsigned (0) or signed (1).
        // The default is unsigned.
        let pixelRepresentation = (0, imageTags_1.getTagValue)(dataSet, "x00280103");
        let representation = pixelRepresentation === 1
            ? "Sint" + bitsAllocated
            : "Uint" + bitsAllocated;
        return representation;
    }
};
exports.getPixelRepresentation = getPixelRepresentation;
/**
 * Get a typed array from a representation type
 * @instance
 * @function getTypedArrayFromDataType
 * @param {Object} dataType - The data type
 * @returns {TypedArray} The typed array
 */
const getTypedArrayFromDataType = function (dataType) {
    let repr = dataType.toLowerCase();
    let typedArray = (0, lodash_1.has)(TYPES_TO_TYPEDARRAY, repr)
        ? TYPES_TO_TYPEDARRAY[repr]
        : null;
    if (!typedArray) {
        console.error("invalid data type: ", dataType);
    }
    return typedArray;
};
exports.getTypedArrayFromDataType = getTypedArrayFromDataType;
/**
 * Sort the array of images ids of a series trying with:
 * - content time order, if the series has cardiacNumberOfImages tag > 1
 * - position order, if series has needed patient position tags
 * - instance order, if series has instance numbers tags
 * The priority of the method depends on the instanceSortPriority value
 * @instance
 * @function getSortedStack
 * @param {Object} seriesData - The dataset
 * @param {Array} sortPriorities - An array which represents the priority tasks
 * @param {Bool} returnSuccessMethod - Boolean for returning the success method
 * @return {Object} The sorted stack
 */
const getSortedStack = function (seriesData, sortPriorities, returnSuccessMethod) {
    let tryToSort = function (data, methods) {
        if ((0, lodash_1.isEmpty)(methods)) {
            if (returnSuccessMethod === true) {
                return sorted;
            }
            else {
                return sorted;
            }
        }
        let sortMethod = methods.shift();
        var sorted = (0, lodash_1.sortBy)(data.imageIds, function (imageId) {
            return sortStackCallback(data, imageId, sortMethod);
        });
        if (returnSuccessMethod === true) {
            return sorted;
        }
        else {
            return sorted;
        }
    };
    // sortPriorities will be shifted, so clone it before calling the tryToSort fucntion
    let clonedList = (0, lodash_1.clone)(sortPriorities);
    return tryToSort(seriesData, clonedList);
};
exports.getSortedStack = getSortedStack;
/**
 * Sort the array of instanceUIDs according to imageIds sorted using sortSeriesStack
 * @instance
 * @function getSortedUIDs
 * @param {Object} seriesData - The dataset
 * @return {Object} The sorted instanceUIDs
 */
const getSortedUIDs = function (seriesData) {
    let instanceUIDs = {};
    (0, lodash_1.forEach)(seriesData.imageIds, function (imageId) {
        let instanceUID = seriesData.instances[imageId].metadata.instanceUID;
        instanceUIDs[instanceUID] = imageId;
    });
    return instanceUIDs;
};
exports.getSortedUIDs = getSortedUIDs;
/**
 * Generate a randomUUID in the form 'uy0x2qz9jk9co642cjfus'
 * @instance
 * @function randomId
 * @return {String} - Random uid
 */
const randomId = function () {
    return rand() + rand();
};
exports.randomId = randomId;
/**
 * Get the mean value of a specified dicom tag in a serie
 * @instance
 * @function getMeanValue
 * @param {Object} series - The cornerstone series object
 * @param {Object} tag - The target tag key
 * @param {Bool} isArray - True if tag value is an array
 * @return {Number} - Tag mean value
 */
const getMeanValue = function (series, tag, isArray) {
    let meanValue = isArray ? [] : 0;
    (0, lodash_1.forEach)(series.imageIds, function (imageId) {
        let tagValue = series.instances[imageId].metadata[tag];
        if (Array.isArray(tagValue)) {
            tagValue; //exclude array of metadatatypes
            meanValue = meanValue;
            if (tagValue.length === 2) {
                tagValue = tagValue;
                meanValue[0] = meanValue[0] ? meanValue[0] + tagValue[0] : tagValue[0];
                meanValue[1] = meanValue[1] ? meanValue[1] + tagValue[1] : tagValue[1];
            }
            else if (tagValue.length === 3) {
                tagValue = tagValue;
                meanValue[0] = meanValue[0] ? meanValue[0] + tagValue[0] : tagValue[0];
                meanValue[1] = meanValue[1] ? meanValue[1] + tagValue[1] : tagValue[1];
                meanValue[2] = meanValue[2] ? meanValue[2] + tagValue[2] : tagValue[2];
            }
            else if (tagValue.length === 6) {
                tagValue = tagValue;
                meanValue[0] = meanValue[0] ? meanValue[0] + tagValue[0] : tagValue[0];
                meanValue[1] = meanValue[1] ? meanValue[1] + tagValue[1] : tagValue[1];
                meanValue[2] = meanValue[2] ? meanValue[2] + tagValue[2] : tagValue[2];
                meanValue[3] = meanValue[3] ? meanValue[3] + tagValue[3] : tagValue[3];
                meanValue[4] = meanValue[4] ? meanValue[4] + tagValue[4] : tagValue[4];
                meanValue[5] = meanValue[5] ? meanValue[5] + tagValue[5] : tagValue[5];
            }
        }
        else {
            meanValue = meanValue;
            tagValue = parseFloat(tagValue);
            meanValue += tagValue;
        }
    });
    if (isArray) {
        meanValue = meanValue;
        for (let i = 0; i < meanValue.length; i++) {
            meanValue[i] /= series.imageIds.length;
        }
    }
    else {
        meanValue = meanValue;
        meanValue /= series.imageIds.length;
    }
    return meanValue;
};
exports.getMeanValue = getMeanValue;
/**
 * Compute resliced metadata from a cornerstone data structure
 * @instance
 * @function getReslicedMetadata
 * @param {String} reslicedSeriesId - The id of the resliced serie
 * @param {String} fromOrientation - Source orientation (eg axial, coronal or sagittal)
 * @param {String} toOrientation - Target orientation (eg axial, coronal or sagittal)
 * @param {Object} seriesData - The original series data
 * @param {String} imageLoaderName - The registered loader name
 * @return {Object} - Cornerstone series object, filled only with metadata
 */
const getReslicedMetadata = function (reslicedSeriesId, fromOrientation, toOrientation, seriesData, imageLoaderName) {
    // get reslice metadata and apply the reslice algorithm
    let permuteTable = resliceTable[fromOrientation][toOrientation];
    let permuteAbsTable = permuteTable.map(function (v) {
        return Math.abs(v);
    });
    // orthogonal reslice algorithm
    let reslicedImageIds = [];
    let reslicedInstances = {};
    let sampleMetadata = seriesData.instances[seriesData.imageIds[0]].metadata;
    let fromSize = [
        sampleMetadata.x00280011,
        sampleMetadata.x00280010,
        seriesData.imageIds.length
    ];
    let toSize = permuteValues(permuteAbsTable, fromSize);
    let fromSpacing = spacingArray(seriesData, sampleMetadata);
    let toSpacing = permuteValues(permuteAbsTable, fromSpacing);
    let reslicedIOP = getReslicedIOP(sampleMetadata.x00200037, permuteTable);
    for (let f = 0; f < toSize[2]; f++) {
        let reslicedImageId = (0, dicomLoader_1.getDicomImageId)(imageLoaderName);
        reslicedImageIds.push(reslicedImageId);
        let instanceId = (0, uuid_1.v4)();
        let reslicedIPP = getReslicedIPP(sampleMetadata.x00200032, sampleMetadata.x00200037, reslicedIOP, permuteTable, f, fromSize, toSize, fromSpacing);
        let metadata = (0, lodash_1.extend)((0, lodash_1.clone)(sampleMetadata), {
            // pixel representation
            x00280100: sampleMetadata.x00280100,
            x00280103: sampleMetadata.x00280103,
            // resliced series sizes
            x00280010: toSize[1], // rows
            x00280011: toSize[0], // cols
            // resliced series spacing
            x00280030: [toSpacing[1], toSpacing[0]],
            x00180050: [toSpacing[2]],
            // remove min and max pixelvalue from metadata before calling the createCustomImage function:
            // need to recalculate the min and max pixel values on the new instance pixelData
            x00280106: undefined,
            x00280107: undefined,
            // resliced series data
            x0020000d: sampleMetadata.x0020000d,
            x0020000e: reslicedSeriesId,
            x00200011: (0, lodash_1.random)(10000),
            x00080018: instanceId,
            x00020003: instanceId,
            x00200013: f + 1,
            x00201041: getReslicedSliceLocation(reslicedIOP, reslicedIPP),
            x00100010: sampleMetadata.x00100010,
            x00081030: sampleMetadata.x00081030,
            x00080020: sampleMetadata.x00080020,
            x00080030: sampleMetadata.x00080030,
            x00080061: sampleMetadata.x00080061,
            x0008103e: sampleMetadata.x0008103e,
            x00080021: sampleMetadata.x00080021,
            x00080031: sampleMetadata.x00080031,
            x00080060: sampleMetadata.x00080060,
            x00280008: sampleMetadata.x00280008,
            x00101010: sampleMetadata.x00101010,
            x00020010: sampleMetadata.x00020010,
            x00200052: sampleMetadata.x00200052,
            // data needed to obtain a good rendering
            x00281050: sampleMetadata.x00281050,
            x00281051: sampleMetadata.x00281051,
            x00281052: sampleMetadata.x00281052,
            x00281053: sampleMetadata.x00281053,
            // new image orientation
            x00200037: reslicedIOP,
            // new image position
            x00200032: reslicedIPP
        });
        // set human readable metadata.
        metadata.seriesUID = reslicedSeriesId;
        metadata.rows = metadata.x00280010;
        metadata.cols = metadata.x00280011;
        metadata.imageOrientation = metadata.x00200037;
        metadata.imagePosition = metadata.x00200032;
        metadata.pixelSpacing = metadata.x00280030;
        metadata.instanceUID = metadata.x00080018;
        metadata.minPixelValue = metadata.x00280106;
        metadata.maxPixelValue = metadata.x00280107;
        metadata.sliceThickness = toSpacing[2];
        reslicedInstances[reslicedImageId] = {
            instanceId: instanceId,
            metadata: metadata,
            permuteTable: permuteTable
        };
    }
    return {
        imageIds: reslicedImageIds,
        instances: reslicedInstances,
        currentImageIdIndex: 0
    };
};
exports.getReslicedMetadata = getReslicedMetadata;
/**
 * Compute cmpr metadata from pyCmpr data (generated using Scyther {@link https://github.com/dvisionlab/Scyther})
 * @instance
 * @function getCmprMetadata
 * @param {String} reslicedSeriesId - The id of the resliced serie
 * @param {String} imageLoaderName - The registered loader name
 * @param {Object} header - The header of the resliced serie from Scyther
 * @return {Object} - Cornerstone series object, filled only with metadata
 */
const getCmprMetadata = function (reslicedSeriesId, imageLoaderName, header // TODO-ts : type
) {
    let reslicedImageIds = [];
    let reslicedInstances = {};
    for (let f = 0; f < header.frames_number; f++) {
        let reslicedImageId = (0, dicomLoader_1.getDicomImageId)(imageLoaderName);
        reslicedImageIds.push(reslicedImageId);
        let instanceId = (0, uuid_1.v4)();
        let metadata = {
            // pixel representation
            x00280100: header.repr,
            // Bits Allocated
            x00280103: header.repr,
            // resliced series sizes
            x00280010: header.rows, // rows
            x00280011: header.cols, // cols
            // resliced series spacing
            x00280030: [header.spacing[1], header.spacing[0]],
            x00180050: [header.distance_btw_slices],
            // remove min and max pixelvalue from metadata before calling the createCustomImage function:
            // need to recalculate the min and max pixel values on the new instance pixelData
            x00280106: undefined,
            x00280107: undefined,
            // resliced series data
            // x0020000d: sampleMetadata.x0020000d, //Study Instance UID
            x0020000e: reslicedSeriesId,
            x00200011: (0, lodash_1.random)(10000),
            x00080018: instanceId,
            x00020003: instanceId,
            x00200013: f + 1,
            // x00201041: getReslicedSliceLocation(reslicedIOP, reslicedIPP), // Slice Location
            // x00100010: sampleMetadata.x00100010,
            // x00081030: sampleMetadata.x00081030,
            // x00080020: sampleMetadata.x00080020,
            // x00080030: sampleMetadata.x00080030,
            // x00080061: sampleMetadata.x00080061,
            // x0008103e: sampleMetadata.x0008103e,
            // x00080021: sampleMetadata.x00080021,
            // x00080031: sampleMetadata.x00080031,
            // x00080060: sampleMetadata.x00080060,
            // x00280008: sampleMetadata.x00280008,
            // x00101010: sampleMetadata.x00101010,
            // x00020010: sampleMetadata.x00020010,
            // x00200052: sampleMetadata.x00200052,
            // data needed to obtain a good rendering
            x00281050: [header.wwwl[1] / 2], // [wl]
            x00281051: [header.wwwl[0]], // [ww]
            x00281052: header.intercept,
            x00281053: header.slope,
            // new image orientation (IOP)
            x00200037: header.iop ? header.iop.slice(f * 6, (f + 1) * 6) : null,
            // new image position (IPP)
            x00200032: header.ipp ? header.ipp.slice(f * 3, (f + 1) * 3) : null
        };
        reslicedInstances[reslicedImageId] = {
            instanceId: instanceId,
            metadata: metadata
        };
    }
    return {
        imageIds: reslicedImageIds,
        instances: reslicedInstances
    };
};
exports.getCmprMetadata = getCmprMetadata;
/**
 * Get pixel data for a single resliced slice, from cornerstone data structure
 * @instance
 * @function getReslicedPixeldata
 * @param {String} imageId - The id of the resulting image
 * @param {Object} originalData - The original series data (source)
 * @param {Object} reslicedData - The resliced series data (target)
 * @return {Object} - A single resliced slice pixel array
 */
const getReslicedPixeldata = function (imageId, originalData, reslicedData) {
    // resliced metadata must be already available
    let reslicedInstance = reslicedData.instances[imageId];
    let reslicedMetadata = reslicedInstance.metadata;
    if (!reslicedInstance.permuteTable) {
        throw new Error("Resliced permuteTable not available");
    }
    let permuteAbsTable = reslicedInstance.permuteTable.map(function (v) {
        return Math.abs(v);
    });
    // compute resliced series pixelData, use the correct typedarray
    let rows = reslicedMetadata.x00280010;
    let cols = reslicedMetadata.x00280011;
    let reslicedSlice = getTypedArray(reslicedMetadata, rows * cols); // TODO-ts : type of reslicedMetadata?
    let frame = (0, lodash_1.indexOf)(reslicedData.imageIds, imageId);
    let originalInstance = originalData.instances[originalData.imageIds[0]];
    let fromCols = originalInstance.metadata.x00280011;
    function getPixelValue(ijf) {
        let i = ijf[0];
        let j = ijf[1];
        let f = ijf[2];
        let cachedImage = (0, lodash_1.find)(cornerstone_core_1.default.imageCache.cachedImages, [
            "imageId",
            originalData.imageIds[f]
        ]);
        let targetPixeldata = cachedImage.image.getPixelData();
        let index = j * fromCols + i;
        return targetPixeldata[index];
    }
    // flip f values
    if (isNegativeSign(reslicedInstance.permuteTable[2])) {
        frame = reslicedData.imageIds.length - frame;
    }
    for (let j = 0; j < rows; j++) {
        for (let i = 0; i < cols; i++) {
            let ijf = [0, 0, 0];
            ijf[permuteAbsTable[0]] = i;
            ijf[permuteAbsTable[1]] = j;
            ijf[permuteAbsTable[2]] = frame;
            // flip j index
            let index;
            if (isNegativeSign(reslicedInstance.permuteTable[1])) {
                index = rows * cols - j * cols + i;
            }
            else {
                // let i_padded = Math.floor(i * originalSampleMetadata.x00180050 / originalSampleMetadata.x00280030[0]);
                index = j * cols + i;
            }
            reslicedSlice[index] = getPixelValue(ijf);
        }
    }
    return reslicedSlice;
};
exports.getReslicedPixeldata = getReslicedPixeldata;
/**
 * Get distance between two slices
 * @instance
 * @function getDistanceBetweenSlices
 * @param {Object} seriesData - The series data
 * @param {Number} sliceIndex1 - The first slice index
 * @param {Number} sliceIndex2 - The second slice index
 * @return {Number} - The distance value
 */
const getDistanceBetweenSlices = function (seriesData, sliceIndex1, sliceIndex2) {
    if (seriesData.imageIds.length <= 1) {
        return 0;
    }
    let imageId1 = seriesData.imageIds[sliceIndex1];
    let instance1 = seriesData.instances[imageId1];
    let metadata1 = instance1.metadata;
    let imageOrientation = metadata1.x00200037;
    let imagePosition = metadata1.x00200032;
    if (imageOrientation && imagePosition) {
        let normal = (0, exports.getNormalOrientation)(imageOrientation);
        let d1 = normal[0] * imagePosition[0] +
            normal[1] * imagePosition[1] +
            normal[2] * imagePosition[2];
        let imageId2 = seriesData.imageIds[sliceIndex2];
        let instance2 = seriesData.instances[imageId2];
        let metadata2 = instance2.metadata;
        let imagePosition2 = metadata2.x00200032;
        let d2 = normal[0] * imagePosition2[0] +
            normal[1] * imagePosition2[1] +
            normal[2] * imagePosition2[2];
        return Math.abs(d1 - d2);
    }
};
exports.getDistanceBetweenSlices = getDistanceBetweenSlices;
/**
 * @instance
 * @function getImageMetadata
 * @param {String} seriesId - The seriesUID
 * @param {String} instanceUID - The SOPInstanceUID
 * @param {number} frameId - Optional FrameId
 * @return {Array} - List of metadata objects: tag, name and value
 */
const getImageMetadata = function (seriesId, instanceUID, frameId) {
    const seriesData = (0, commonLoader_1.getSeriesDataFromLarvitarManager)(seriesId);
    if (seriesData === undefined || seriesData === null) {
        console.log(`Invalid Series ID: ${seriesId}`);
        return [];
    }
    // manage imageID if the image is a multiframe stack
    const imageId = seriesData.isMultiframe
        ? seriesData.instanceUIDs[instanceUID] + "?frame=" + frameId
        : seriesData.instanceUIDs[instanceUID];
    if (imageId === undefined) {
        console.log(`Invalid InstanceUID ID: ${instanceUID}`);
        return [];
    }
    let metadata = seriesData.instances[imageId].metadata;
    // get elements from metadata where the key starts with x and is length 7
    let metadata_keys = Object.keys(metadata);
    // loop metadata using metadata_keys and return list of key value pairs
    let metadata_list = (0, lodash_1.map)(metadata_keys, function (key) {
        // force uppercase to check in TAG_DICT
        const keyName = (key.charAt(0) +
            key.slice(1).toUpperCase());
        // force type KEY to keyof typeof MetaDataTypes
        const KEY = key;
        if (Object.keys(dataDictionary_json_1.default).includes(keyName)) {
            const name = dataDictionary_json_1.default[keyName] ? dataDictionary_json_1.default[keyName].name : "";
            const value = metadata[KEY] && metadata[KEY].constructor == Object
                ? ""
                : metadata[KEY];
            const tag = ("(" +
                keyName.slice(1, 5) +
                "," +
                keyName.slice(5) +
                ")").toUpperCase();
            return {
                tag: tag,
                name: name,
                value: value
            };
        }
    });
    // remove undefined values
    metadata_list = (0, lodash_1.filter)(metadata_list, function (item) {
        return item !== undefined;
    });
    return metadata_list;
};
exports.getImageMetadata = getImageMetadata;
/* Internal module functions */
/**
 * Returns the sorting value of the image id in the array of image ids
 * of the series according with the chosen sorting method
 * @instance
 * @function sortStackCallback
 * @param {Object} seriesData - The original series data
 * @param {String} imageId - The id of the target image
 * @param {String} method - Orientation target
 * @return {Number} - The sorting value (float)
 */
let sortStackCallback = function (seriesData, imageId, method) {
    switch (method) {
        case "instanceNumber":
            var instanceNumber = seriesData.instances[imageId].metadata.x00200013;
            return instanceNumber;
        case "contentTime":
            return seriesData.instances[imageId].metadata.x00080033;
        case "imagePosition":
            let p = seriesData.instances[imageId].metadata.imagePosition;
            let pStr = p === null || p === void 0 ? void 0 : p.map(String);
            let o = seriesData.instances[imageId].metadata.imageOrientation;
            let oStr = o === null || o === void 0 ? void 0 : o.map(String);
            var v1, v2, v3;
            v1 = o[0] * o[0] + o[3] * o[3];
            v2 = o[1] * o[1] + o[4] * o[4];
            v3 = o[2] * o[2] + o[5] * o[5];
            var sortIndex = -1;
            if (v1 <= v2 && v2 <= v3) {
                sortIndex = 0;
            }
            if (v2 <= v1 && v2 <= v3) {
                sortIndex = 1;
            }
            if (v3 <= v1 && v3 <= v2) {
                sortIndex = 2;
            }
            if (sortIndex === -1) {
                throw new Error("Invalid sort index");
            }
            return p[sortIndex];
        default:
            break;
    }
};
/**
 * Generate a random number and convert it to base 36 (0-9a-z)
 * @instance
 * @function rand
 * @return {Number} - base36 random number
 */
let rand = function () {
    return Math.random().toString(36).substr(2);
};
/**
 * Permute array values using orientation array
 * @instance
 * @function permuteValues
 * @param {Array} convertArray - The orientation array
 * @param {Array} sourceArray - The source array
 * @return {Array} - The converted array
 */
let permuteValues = function (convertArray, sourceArray) {
    let outputArray = new Array(convertArray.length);
    for (let i = 0; i < convertArray.length; i++) {
        outputArray[i] = sourceArray[convertArray[i]];
    }
    return outputArray;
};
/**
 * Check negative sign, considering also 0+ and 0-
 * @instance
 * @function isNegativeSign
 * @param {Number} x - The number to check
 * @return {Boolean} - Is negative boolean response
 */
let isNegativeSign = function (x) {
    return 1 / x !== 1 / Math.abs(x);
};
/**
 * Get typed array from tag and size of original array
 * @instance
 * @function getTypedArray
 * @param {String} tag - The DICOM tag used for pixel representation
 * @param {Number} size - The size of the array
 * @return {Array} - The typed array
 */
let getTypedArray = function (tags, size) {
    let r = (0, exports.getPixelRepresentation)(tags);
    let typedArray = (0, exports.getTypedArrayFromDataType)(r);
    if (!typedArray) {
        throw new Error("Invalid typed array");
    }
    return new typedArray(size);
};
/**
 * Get resliced image orientation tag from permuteTable
 * @instance
 * @function getReslicedIOP
 * @param {Array} iop - The image orientation array
 * @param {Array} permuteTable - The matrix transformation
 * @return {Array} - The resliced image orientation array
 */
let getReslicedIOP = function (iop, permuteTable) {
    if (!iop) {
        return null;
    }
    // compute resliced iop
    let u = iop.slice(0, 3);
    let v = iop.slice(3, 6);
    // abs the w array, the sign will be eventually changed during the permutation
    let w = (0, exports.getNormalOrientation)(iop);
    // let absW = _.map(w, function(v) { return Math.abs(v); });
    // resliced iop components
    let shuffledIop = permuteSignedArrays(permuteTable, [u, v, w]);
    // keep the firts two components of shuffledIop
    return shuffledIop[0].concat(shuffledIop[1]);
};
/**
 * Get resliced image position tag from permuteTable
 * @instance
 * @function getReslicedIPP
 * @param {Array} iop - The image position array
 * @param {Array} iop - The image orientation array
 * @param {Array} reslicedIOP - The resliced image orientation array
 * @param {Array} permuteTable - The matrix transformation
 * @param {Number} imageIndex - The index of the image
 * @param {Array} fromSize - The array of source image dimension
 * @param {Array} toSize - The array of target image dimension
 * @param {Array} fromSpacing - The spacing array
 * @return {Array} - The resliced image position array
 */
let getReslicedIPP = function (ipp, iop, reslicedIOP, permuteTable, imageIndex, fromSize, toSize, fromSpacing) {
    // compute resliced ipp
    let reslicedIPP = [];
    // iop data types??
    let u = iop.slice(0, 3);
    let v = iop.slice(3, 6);
    let w = (0, exports.getNormalOrientation)(iop);
    let absW = (0, lodash_1.map)(w, function (v) {
        return Math.abs(v);
    });
    let majorOriginalIndex = (0, lodash_1.indexOf)(absW, (0, lodash_1.max)(absW));
    let normalReslicedIop = (0, exports.getNormalOrientation)(reslicedIOP);
    normalReslicedIop = (0, lodash_1.map)(normalReslicedIop, function (v) {
        return Math.abs(v);
    });
    let majorIndex = (0, lodash_1.indexOf)(normalReslicedIop, (0, lodash_1.max)(normalReslicedIop));
    let index = isNegativeSign(permuteTable[majorIndex])
        ? toSize[majorIndex] - imageIndex
        : imageIndex;
    // flip z value on original slice
    if (isNegativeSign(permuteTable[1])) {
        ipp = ipp.map(function (val, i) {
            return val + fromSize[2] * fromSpacing[2] * w[i];
        });
    }
    let spacing;
    let versor;
    // to sagittal
    if (majorIndex == 0) {
        // original x spacing
        spacing = fromSpacing[0];
        versor = u;
    }
    // to coronal
    else if (majorIndex == 1) {
        // from sagittal
        if (majorOriginalIndex == 0) {
            spacing = fromSpacing[0];
            versor = u;
            // overwrite index with the majorOriginalIndex position
            // index = isNegativeSign(permuteTable[majorOriginalIndex]) ? (toSize[majorOriginalIndex] - imageIndex) : imageIndex;
        }
        // from axial
        else if (majorOriginalIndex == 2) {
            spacing = fromSpacing[1];
            versor = v;
            // overwrite index with the majorOriginalIndex position
            index = isNegativeSign(permuteTable[majorOriginalIndex])
                ? toSize[majorOriginalIndex] - imageIndex
                : imageIndex;
        }
    }
    // to axial
    else if (majorIndex == 2) {
        // original y spacing
        spacing = fromSpacing[1];
        versor = v;
    }
    reslicedIPP = ipp.map(function (val, i) {
        return val + index * spacing * versor[i];
    });
    return reslicedIPP;
};
/**
 * Get resliced normal orientation vector
 * @instance
 * @function getReslicedSliceLocation
 * @param {Array} reslicedIOP - The resliced image orientation array
 * @param {Array} reslicedIPP - The resliced image position array
 * @return {Array} - The slice location as normal orientation vector
 */
let getReslicedSliceLocation = function (reslicedIOP, reslicedIPP) {
    let normalReslicedIop = (0, exports.getNormalOrientation)(reslicedIOP);
    normalReslicedIop = (0, lodash_1.map)(normalReslicedIop, function (v) {
        return Math.abs(v);
    });
    let majorIndex = (0, lodash_1.indexOf)(normalReslicedIop, (0, lodash_1.max)(normalReslicedIop));
    return reslicedIPP[majorIndex];
};
/**
 * Get spacing array from seriesData
 * @instance
 * @function spacingArray
 * @param {Object} seriesData - The original series data
 * @param {Object} sampleMetadata - The medatata object
 * @return {Array} - The spacing array
 */
let spacingArray = function (seriesData, sampleMetadata) {
    // the spacingArray is as follows:
    // [0]: column pixelSpacing value (x00280030[1])
    // [1]: row pixelSpacing value (x00280030[0])
    // [2]: distance between slices, given the series imageOrientationPatient and
    //      imagePositionPatient of the first two slices
    let distanceBetweenSlices = sampleMetadata["x00180050"]
        ? sampleMetadata["x00180050"]
        : (0, exports.getDistanceBetweenSlices)(seriesData, 0, 1);
    let spacing = sampleMetadata.x00280030;
    return [spacing[1], spacing[0], distanceBetweenSlices];
};
/**
 * Permute an array
 * @instance
 * @function permuteSignedArrays
 * @param {Array} convertArray - The array used to convert source array
 * @param {Array} sourceArray - The source array
 * @return {Array} - The permuted array array
 */
let permuteSignedArrays = function (convertArray, sourceArray) {
    let outputArray = new Array(convertArray.length);
    for (let i = 0; i < convertArray.length; i++) {
        let sourceIndex = Math.abs(convertArray[i]);
        if (isNegativeSign(convertArray[i])) {
            outputArray[i] = sourceArray[sourceIndex].map(function (v) {
                return -v;
            });
        }
        else {
            outputArray[i] = sourceArray[sourceIndex];
        }
    }
    return outputArray;
};
/**
 * Object used to convert data type to typed array
 * @object
 */
const TYPES_TO_TYPEDARRAY = {
    "unsigned char": Uint8Array,
    uchar: Uint8Array,
    uint8: Uint8Array,
    uint8_t: Uint8Array,
    sint8: Int8Array,
    "signed char": Int8Array,
    int8: Int8Array,
    int8_t: Int8Array,
    ushort: Uint16Array,
    "unsigned short": Uint16Array,
    "unsigned short int": Uint16Array,
    uint16: Uint16Array,
    uint16_t: Uint16Array,
    sint16: Int16Array,
    short: Int16Array,
    "short int": Int16Array,
    "signed short": Int16Array,
    "signed short int": Int16Array,
    int16: Int16Array,
    int16_t: Int16Array,
    sint32: Int32Array,
    int: Int32Array,
    "signed int": Int32Array,
    int32: Int32Array,
    int32_t: Int32Array,
    uint: Uint32Array,
    "unsigned int": Uint32Array,
    uint32: Uint32Array,
    uint32_t: Uint32Array,
    float: Float32Array,
    double: Float64Array
};
/**
 * Check if a div tag is a valid DOM HTMLElement
 * @instance
 * @function isElement
 * @param {Object} o - The div tag
 * @return {Boolean} - True if is an element otherwise returns False
 */
const isElement = function (o) {
    return typeof HTMLElement === "object"
        ? o instanceof HTMLElement //DOM2
        : o &&
            typeof o === "object" &&
            o !== null &&
            o.nodeType === 1 &&
            typeof o.nodeName === "string";
};
exports.isElement = isElement;


/***/ }),

/***/ 326:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module loaders/commonLoader
 *  @desc This file provides functionalities for
 *        custom DICOMImageLoaders
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getSopInstanceUIDFromLarvitarManager = exports.getImageFrame = exports.getSeriesDataFromLarvitarManager = exports.removeSeriesFromLarvitarManager = exports.resetLarvitarManager = exports.getLarvitarImageTracker = exports.getLarvitarManager = exports.populateLarvitarManager = exports.updateLarvitarManager = void 0;
// external libraries
const cornerstone_wado_image_loader_1 = __importDefault(__webpack_require__(2424));
const lodash_1 = __webpack_require__(6486);
const imageLoading_1 = __webpack_require__(5848);
// internal libraries
const multiframeLoader_1 = __webpack_require__(934);
// global variables
var larvitarManager = null;
var imageTracker = null;
/*
 * This module provides the following functions to be exported:
 * updateLarvitarManager(imageObject)
 * populateLarvitarManager(seriesId, seriesData)
 * getLarvitarManager()
 * getLarvitarImageTracker()
 * resetLarvitarManager()
 * removeSeriesFromLarvitarManager(seriesId)
 * getSeriesDataFromLarvitarManager(seriesId)
 * getImageFrame(metadata, dataSet)
 * getSopInstanceUIDFromLarvitarManager(larvitarSeriesInstanceUID, imageId)
 */
/**
 * Update and initialize larvitar manager in order to parse and load a single dicom object
 * @instance
 * @function updateLarvitarManager
 * @param {Object} imageObject The single dicom object
 * @param {String} customId - Optional custom id to overwrite seriesUID as default one
 * @param {number} sliceIndex - Optional custom index to overwrite slice index as default one
 */
const updateLarvitarManager = function (imageObject, customId, sliceIndex) {
    var _a;
    if (larvitarManager === null) {
        larvitarManager = {};
    }
    let data = Object.assign({}, imageObject);
    if ((_a = data.metadata) === null || _a === void 0 ? void 0 : _a.isMultiframe) {
        let seriesId = customId || imageObject.metadata.seriesUID;
        let loadedStack = {};
        (0, imageLoading_1.updateLoadedStack)(data, loadedStack, customId, sliceIndex);
        (0, multiframeLoader_1.buildMultiFrameImage)(seriesId, loadedStack[seriesId]);
    }
    else {
        (0, imageLoading_1.updateLoadedStack)(data, larvitarManager, customId, sliceIndex);
    }
    return larvitarManager;
};
exports.updateLarvitarManager = updateLarvitarManager;
/**
 * This function can be called in order to populate the Larvitar manager
 * @instance
 * @function populateLarvitarManager
 * @param {String} larvitarSeriesInstanceUID The Id of the manager stack
 * @param {Object} seriesData The series data
 * @returns {manager} the Larvitar manager
 */
const populateLarvitarManager = function (larvitarSeriesInstanceUID, seriesData) {
    if (larvitarManager === null) {
        larvitarManager = {};
    }
    let data = Object.assign({}, seriesData);
    if (data.isMultiframe) {
        (0, multiframeLoader_1.buildMultiFrameImage)(larvitarSeriesInstanceUID, data);
    }
    else {
        larvitarManager[larvitarSeriesInstanceUID] = data;
    }
    return larvitarManager;
};
exports.populateLarvitarManager = populateLarvitarManager;
/**
 * Return the common data loader manager
 * @instance
 * @function getLarvitarManager
 * @returns {Object} the loader manager
 */
const getLarvitarManager = function () {
    if (larvitarManager == null) {
        larvitarManager = {};
    }
    return larvitarManager;
};
exports.getLarvitarManager = getLarvitarManager;
/**
 * Return the common image tracker
 * @instance
 * @function getLarvitarImageTracker
 * @returns {Object} the image tracker
 */
const getLarvitarImageTracker = function () {
    if (imageTracker == null) {
        imageTracker = {};
    }
    return imageTracker;
};
exports.getLarvitarImageTracker = getLarvitarImageTracker;
/**
 * Reset the Larvitar Manager store
 * @instance
 * @function resetLarvitarManager
 */
const resetLarvitarManager = function () {
    (0, lodash_1.each)(larvitarManager, function (stack) {
        if (stack.isMultiframe) {
            if (stack.dataSet) {
                //@ts-ignore for memory leak
                stack.dataSet.byteArray = null;
            }
            stack.dataSet = null;
            stack.elements = null;
            (0, multiframeLoader_1.clearMultiFrameCache)(stack.seriesUID);
        }
        (0, lodash_1.each)(stack.instances, function (instance) {
            if (instance.dataSet) {
                //@ts-ignore for memory leak
                instance.dataSet.byteArray = null;
            }
            instance.dataSet = null;
            instance.file = null;
            //@ts-ignore for memory leak
            instance.metadata = null;
        });
    });
    larvitarManager = null;
    imageTracker = null;
};
exports.resetLarvitarManager = resetLarvitarManager;
/**
 * Remove a stored seriesId from the larvitar Manager
 * @instance
 * @function removeSeriesFromLarvitarManager
 * @param {String} seriesId The Id of the series
 */
const removeSeriesFromLarvitarManager = function (seriesId) {
    if (larvitarManager && larvitarManager[seriesId]) {
        if (larvitarManager[seriesId].isMultiframe) {
            //@ts-ignore for memory leak
            larvitarManager[seriesId].dataSet.byteArray = null;
            larvitarManager[seriesId].dataSet = null;
            larvitarManager[seriesId].elements = null;
            (0, multiframeLoader_1.clearMultiFrameCache)(seriesId);
        }
        (0, lodash_1.each)(larvitarManager[seriesId].instances, function (instance) {
            if (instance.dataSet) {
                //@ts-ignore for memory leak
                instance.dataSet.byteArray = null;
            }
            instance.dataSet = null;
            instance.file = null;
            //@ts-ignore for memory leak
            instance.metadata = null;
        });
        //@ts-ignore for memory leak
        larvitarManager[seriesId] = null;
        delete larvitarManager[seriesId];
    }
};
exports.removeSeriesFromLarvitarManager = removeSeriesFromLarvitarManager;
/**
 * Return the data of a specific seriesId stored in the DICOM Manager
 * @instance
 * @function getSeriesDataFromLarvitarManager
 * @param {String} seriesId The Id of the series
 * @return {Object} larvitar manager data
 */
const getSeriesDataFromLarvitarManager = function (seriesId) {
    return larvitarManager ? larvitarManager[seriesId] : null;
};
exports.getSeriesDataFromLarvitarManager = getSeriesDataFromLarvitarManager;
/**
 * Compute and return image frame
 * @instance
 * @function getImageFrame
 * @param {Object} metadata metadata object
 * @param {Object} dataSet dicom dataset
 * @returns {Object} specific image frame
 */
const getImageFrame = function (metadata, dataSet) {
    let imagePixelModule;
    if (dataSet) {
        imagePixelModule =
            cornerstone_wado_image_loader_1.default.wadouri.metaData.getImagePixelModule(dataSet);
    }
    else {
        imagePixelModule = {
            samplesPerPixel: metadata.x00280002,
            photometricInterpretation: metadata.x00280004,
            planarConfiguration: metadata.x00280006,
            rows: metadata.x00280010,
            columns: metadata.x00280011,
            bitsAllocated: metadata.x00280100,
            pixelRepresentation: metadata.x00280103,
            smallestPixelValue: metadata.x00280106,
            largestPixelValue: metadata.x00280107,
            redPaletteColorLookupTableDescriptor: metadata.x00281101,
            greenPaletteColorLookupTableDescriptor: metadata.x00281102,
            bluePaletteColorLookupTableDescriptor: metadata.x00281103,
            redPaletteColorLookupTableData: metadata.x00281201,
            greenPaletteColorLookupTableData: metadata.x00281202,
            bluePaletteColorLookupTableData: metadata.x00281203
        };
    }
    return {
        samplesPerPixel: imagePixelModule.samplesPerPixel,
        photometricInterpretation: imagePixelModule.photometricInterpretation,
        planarConfiguration: imagePixelModule.planarConfiguration,
        rows: imagePixelModule.rows,
        columns: imagePixelModule.columns,
        bitsAllocated: imagePixelModule.bitsAllocated,
        pixelRepresentation: imagePixelModule.pixelRepresentation, // 0 = unsigned,
        smallestPixelValue: imagePixelModule.smallestPixelValue,
        largestPixelValue: imagePixelModule.largestPixelValue,
        redPaletteColorLookupTableDescriptor: imagePixelModule.redPaletteColorLookupTableDescriptor,
        greenPaletteColorLookupTableDescriptor: imagePixelModule.greenPaletteColorLookupTableDescriptor,
        bluePaletteColorLookupTableDescriptor: imagePixelModule.bluePaletteColorLookupTableDescriptor,
        redPaletteColorLookupTableData: imagePixelModule.redPaletteColorLookupTableData,
        greenPaletteColorLookupTableData: imagePixelModule.greenPaletteColorLookupTableData,
        bluePaletteColorLookupTableData: imagePixelModule.bluePaletteColorLookupTableData,
        pixelData: undefined, // populated later after decoding,
        ImageData: undefined
    };
};
exports.getImageFrame = getImageFrame;
/**
 * Return the SOP Instance UID of a specific imageId stored in the Larvitar Manager
 * @instance
 * @function getSopInstanceUIDFromLarvitarManager
 * @param {String} larvitarSeriesInstanceUID The Id of the series
 * @param {String} imageId The Id of the image
 * @returns {String} sopInstanceUID
 */
const getSopInstanceUIDFromLarvitarManager = function (larvitarSeriesInstanceUID, imageId) {
    if (larvitarManager === null) {
        return null;
    }
    let series = larvitarManager[larvitarSeriesInstanceUID];
    return Object.keys(series.instanceUIDs).find(key => series.instanceUIDs[key] === imageId);
};
exports.getSopInstanceUIDFromLarvitarManager = getSopInstanceUIDFromLarvitarManager;


/***/ }),

/***/ 6790:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module loaders/dicomLoader
 *  @desc This file provides functionalities for
 *        custom DICOM Loader
 */
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getDicomImageId = exports.loadAndCacheImageStack = exports.unloadAndRecacheImageStackDSA = exports.cacheImages = exports.cacheImage = void 0;
// external libraries
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
// internal libraries
const imageRendering_1 = __webpack_require__(4767);
const imageStore_1 = __importDefault(__webpack_require__(5278));
/*
 * This module provides the following functions to be exported:
 * cacheImage(seriesData, imageIndex)
 * loadAndCacheImageStack(seriesData)
 * unloadAndRecacheImageStackDSA(seriesData)
 * cacheImages(seriesData, callback)
 * getDicomImageId(dicomLoaderName)
 */
let imageLoaderCounter = 0;
/**
 * Load and cache a single image
 * @instance
 * @function cacheImage
 * @param {Object} seriesData The series data
 * @param {number} imageIndex The image index in the imageIds array
 */
const cacheImage = function (seriesData, imageIndex) {
    return __awaiter(this, void 0, void 0, function* () {
        return (0, imageRendering_1.loadAndCacheImage)(seriesData, imageIndex);
    });
};
exports.cacheImage = cacheImage;
/**
 * Load and cache images
 * @instance
 * @function cacheImages
 * @param {Object} seriesData The series data
 * @param {Function} callback Optional callback function
 */
const cacheImages = function (seriesData, callback) {
    return __awaiter(this, void 0, void 0, function* () {
        (0, imageRendering_1.loadAndCacheImages)(seriesData, function (resp) {
            if (resp.loading == 100) {
                imageLoaderCounter += seriesData.imageIds.length;
            }
            if (callback) {
                callback(resp);
            }
        });
    });
};
exports.cacheImages = cacheImages;
/**
 * Unload DSA Image Stack and Recache Image Stack for DSA
 * @instance
 * @function unloadAndRecacheImageStackDSA
 * @param {Object} seriesData The series data
 * @return {Promise} Promise object represents the loading and caching of the image stack
 */
const unloadAndRecacheImageStackDSA = function (seriesData) {
    return __awaiter(this, void 0, void 0, function* () {
        return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
            const t0 = performance.now();
            // add DSA imageIds to store
            if (seriesData.dsa === undefined) {
                console.warn("DSA image stack is not available");
                reject();
                return;
            }
            let promises = new Array(seriesData.dsa.imageIds.length);
            function cacheImageStack(imageIds, index) {
                return __awaiter(this, void 0, void 0, function* () {
                    if (index < imageIds.length) {
                        const imageId = imageIds[index];
                        if (imageId) {
                            yield cornerstone_core_1.default.imageCache.removeImageLoadObject(imageId);
                            yield cornerstone_core_1.default.loadAndCacheImage(imageId).then(promise => {
                                promises[index] = Promise.resolve(promise);
                            });
                        }
                        else {
                            console.warn(`Stack is not fully loaded, skipping cache for index ${index}`);
                        }
                        yield cacheImageStack(imageIds, index + 1);
                    }
                });
            }
            yield cacheImageStack(seriesData.dsa.imageIds, 0);
            yield Promise.all(promises);
            const t1 = performance.now();
            console.log(`Call to unloadAndRecacheImageStackDSA took ${t1 - t0} milliseconds.`);
            resolve();
        }));
    });
};
exports.unloadAndRecacheImageStackDSA = unloadAndRecacheImageStackDSA;
/**
 * Load and cache image stack
 * @instance
 * @function loadAndCacheImageStack
 * @param {Object} seriesData The series data
 * @return {Promise} Promise object represents the loading and caching of the image stack
 */
const loadAndCacheImageStack = function (seriesData) {
    return __awaiter(this, void 0, void 0, function* () {
        return new Promise((resolve, _) => __awaiter(this, void 0, void 0, function* () {
            const t0 = performance.now();
            imageStore_1.default.addSeriesId(seriesData.seriesUID, seriesData.imageIds);
            let imageIds = seriesData.imageIds;
            // add DSA imageIds to store
            if (seriesData.dsa !== undefined) {
                const dsaSeriesUID = seriesData.seriesUID + "-DSA";
                imageStore_1.default.addSeriesId(dsaSeriesUID, seriesData.dsa.imageIds);
                imageIds = imageIds.concat(seriesData.dsa.imageIds);
            }
            let promises = new Array(imageIds.length);
            function cacheImageStack(imageIds, index) {
                return __awaiter(this, void 0, void 0, function* () {
                    if (index < imageIds.length) {
                        const imageId = imageIds[index];
                        if (imageId) {
                            yield cornerstone_core_1.default.loadAndCacheImage(imageId).then(promise => {
                                promises[index] = Promise.resolve(promise);
                            });
                        }
                        else {
                            console.warn(`Stack is not fully loaded, skipping cache for index ${index}`);
                        }
                        yield cacheImageStack(imageIds, index + 1);
                    }
                });
            }
            yield cacheImageStack(imageIds, 0);
            yield Promise.all(promises);
            const t1 = performance.now();
            console.log(`Call to loadAndCacheImageStack took ${t1 - t0} milliseconds.`);
            resolve();
        }));
    });
};
exports.loadAndCacheImageStack = loadAndCacheImageStack;
/**
 * Get the dicom imageId from dicom loader
 * @instance
 * @function getDicomImageId
 * @param {String} dicomLoaderName dicom loader name
 * @return {String} current dicom image id
 */
const getDicomImageId = function (dicomLoaderName) {
    let imageId = dicomLoaderName + ":" + imageLoaderCounter;
    imageLoaderCounter++;
    return imageId;
};
exports.getDicomImageId = getDicomImageId;


/***/ }),

/***/ 6475:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module loaders/multiframeLoader
 *  @desc This file is a custom DICOM loader for multiframe images
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.setPixelShift = exports.populateDsaImageIds = exports.loadDsaImage = void 0;
// external libraries
const cornerstone_wado_image_loader_1 = __importDefault(__webpack_require__(2424));
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
const lodash_1 = __webpack_require__(6486);
// internal libraries
const commonLoader_1 = __webpack_require__(326);
const imageUtils_1 = __webpack_require__(8345);
const applyDSA_1 = __webpack_require__(1446);
// global module variables
let customImageLoaderCounter = 0;
let PIXEL_SHIFT = undefined;
/*
 * This module provides the following functions to be exported:
 * loadDsaImage(imageId)
 * setPixelShift(pixelShift)
 * populateDsaImageIds(seriesId)
 */
/**
 * Custom DSA Image Loader Function
 * @export
 * @function loadDsaImage
 * @param {String} imageId - ImageId tag
 * @returns {Function} Custom Image Creation Function
 */
const loadDsaImage = function (imageId) {
    let parsedImageId = cornerstone_wado_image_loader_1.default.wadouri.parseImageId(imageId);
    let rootImageId = parsedImageId.scheme + ":" + parsedImageId.url;
    let imageTracker = (0, commonLoader_1.getLarvitarImageTracker)();
    let seriesId = imageTracker[rootImageId];
    let manager = (0, commonLoader_1.getLarvitarManager)();
    if (manager) {
        let multiFrameSerie = manager[seriesId];
        const imageIds = multiFrameSerie.dsa.imageIds;
        const index = imageIds.indexOf(imageId);
        const pixelData = (0, applyDSA_1.applyDSA)(multiFrameSerie, index, PIXEL_SHIFT);
        const srcImage = (0, lodash_1.find)(cornerstone_core_1.default.imageCache.cachedImages, {
            imageId: multiFrameSerie.imageIds[index]
        }).image;
        console.debug(`Load DSA Image with custom loader for imageId: ${imageId}`);
        return createCustomImage(imageId, srcImage, pixelData);
    }
    else {
        throw new Error("No multiframe dataset found for seriesId: " + seriesId);
    }
};
exports.loadDsaImage = loadDsaImage;
/**
 * Populate the DSA imageIds for a given seriesId
 * @export
 * @function populateDsaImageIds
 * @param {String} seriesId - SeriesId tag
 * @param {Object} serie - parsed serie object
 */
const populateDsaImageIds = function (larvitarSeriesInstanceUID) {
    let t0 = performance.now();
    const serie = (0, commonLoader_1.getSeriesDataFromLarvitarManager)(larvitarSeriesInstanceUID);
    if (serie) {
        const numberOfFrames = serie.metadata.numberOfFrames;
        const imageId = getDsaImageId("dsaImageLoader");
        let imageTracker = (0, commonLoader_1.getLarvitarImageTracker)();
        imageTracker[imageId] = larvitarSeriesInstanceUID;
        let imageIds = [];
        (0, lodash_1.each)((0, lodash_1.range)(numberOfFrames), function (frameNumber) {
            const frameImageId = imageId + "?frame=" + frameNumber;
            imageIds.push(frameImageId);
        });
        const dsa = {
            imageIds: imageIds,
            x00286101: serie.metadata.x00286100[0].x00286101,
            x00286102: serie.metadata.x00286100[0].x00286102,
            x00286110: serie.metadata.x00286100[0].x00286110,
            x00286112: serie.metadata.x00286100[0].x00286112,
            x00286114: serie.metadata.x00286100[0].x00286114,
            x00286120: serie.metadata.x00286100[0].x00286120,
            x00286190: serie.metadata.x00286100[0].x00286190,
            x00289416: serie.metadata.x00286100[0].x00289416,
            x00289454: serie.metadata.x00286100[0].x00289454
        };
        serie.dsa = dsa;
    }
    else {
        throw new Error("No serie found for seriesId: " + larvitarSeriesInstanceUID);
    }
    let t1 = performance.now();
    console.log(`Call to populateDsaImageIds took ${t1 - t0} milliseconds.`);
};
exports.populateDsaImageIds = populateDsaImageIds;
/**
 * Set the pixel shift for DSA
 * @instance
 * @function setPixelShift
 * @param {Array} pixelShift The pixel shift array
 */
const setPixelShift = function (pixelShift) {
    PIXEL_SHIFT = pixelShift;
};
exports.setPixelShift = setPixelShift;
/**
 * Get the custom imageId from custom loader
 * @instance
 * @function getDsaImageId
 * @param {String} customLoaderName The custom loader name
 * @return {String} the custom image id
 */
const getDsaImageId = function (customLoaderName) {
    let imageId = customLoaderName + "://" + customImageLoaderCounter;
    customImageLoaderCounter++;
    return imageId;
};
/**
 * Create the custom image object for cornerstone from custom image
 * @instance
 * @function createCustomImage
 * @param {String} imageId The custom image id
 * @param {Object} srcImage The source image object
 * @param {Array} pixelData The pixel data array
 * @return {Object} the custom image object
 */
let createCustomImage = function (imageId, srcImage, pixelData) {
    let promise = new Promise((resolve, _) => {
        const minPixelValue = (0, imageUtils_1.getMinPixelValue)(pixelData);
        const maxPixelValue = (0, imageUtils_1.getMaxPixelValue)(pixelData);
        const windowWidth = (maxPixelValue - minPixelValue) / 2;
        const windowCenter = windowWidth / 2;
        const image = {
            imageId: imageId,
            minPixelValue: minPixelValue,
            maxPixelValue: maxPixelValue,
            slope: srcImage.slope,
            intercept: srcImage.intercept,
            windowCenter: windowCenter,
            windowWidth: windowWidth,
            getPixelData: () => pixelData,
            rows: srcImage.rows,
            columns: srcImage.columns,
            height: srcImage.height,
            width: srcImage.width,
            color: srcImage.color,
            columnPixelSpacing: srcImage.columnPixelSpacing,
            rowPixelSpacing: srcImage.rowPixelSpacing,
            sizeInBytes: srcImage.sizeInBytes
        };
        resolve(image);
    });
    return {
        promise
    };
};


/***/ }),

/***/ 9995:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module loaders/fileLoader
 *  @desc This file provides functionalities for
 *        custom File Loader
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getFileManager = exports.getFileImageId = exports.populateFileManager = exports.resetFileManager = exports.resetFileLoader = exports.fileManager = void 0;
// external libraries
const cornerstone_file_image_loader_1 = __importDefault(__webpack_require__(2869));
const lodash_1 = __webpack_require__(6486);
// internal libraries
const imageRendering_1 = __webpack_require__(4767);
const imageTools_1 = __webpack_require__(4973);
// global variables
exports.fileManager = {};
/*
 * This module provides the following functions to be exported:
 * resetFileLoader()
 * resetFileManager()
 * populateFileManager(file)
 * getFileImageId(file)
 */
/**
 * Reset the Custom File Loader
 * @instance
 * @function resetFileLoader
 */
const resetFileLoader = function () {
    (0, imageTools_1.clearCornerstoneElements)();
    (0, exports.resetFileManager)();
    (0, imageRendering_1.clearImageCache)();
};
exports.resetFileLoader = resetFileLoader;
/**
 * Reset the File Manager store
 * @instance
 * @function resetFileManager
 */
const resetFileManager = function () {
    exports.fileManager = {};
};
exports.resetFileManager = resetFileManager;
/**
 * Populate File Manager
 * @instance
 * @function populateFileManager
 * @return {String} current file image id
 */
const populateFileManager = function (file) {
    let uuid = file.webkitRelativePath || file.name;
    if (!(0, lodash_1.has)(exports.fileManager, uuid)) {
        const imageId = cornerstone_file_image_loader_1.default.fileManager.add(file);
        exports.fileManager[uuid] = imageId;
    }
};
exports.populateFileManager = populateFileManager;
/**
 * Get the file imageId from file loader
 * @instance
 * @function getFileImageId
 * @return {String} current file image id
 */
const getFileImageId = function (file) {
    let uuid = file.webkitRelativePath || file.name;
    const imageId = (0, lodash_1.has)(exports.fileManager, uuid) ? exports.fileManager[uuid] : null;
    return imageId;
};
exports.getFileImageId = getFileImageId;
/**
 * Return the common data file manager
 * @instance
 * @function getFileManager
 * @returns {Object} the file manager
 */
const getFileManager = function () {
    if (exports.fileManager == null) {
        exports.fileManager = {};
    }
    return exports.fileManager;
};
exports.getFileManager = getFileManager;


/***/ }),

/***/ 934:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module loaders/multiframeLoader
 *  @desc This file is a custom DICOM loader for multiframe images
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.clearMultiFrameCache = exports.getMultiFrameImageId = exports.buildMultiFrameImage = exports.loadMultiFrameImage = void 0;
// external libraries
const cornerstone_wado_image_loader_1 = __importDefault(__webpack_require__(2424));
const lodash_1 = __webpack_require__(6486);
// internal libraries
const commonLoader_1 = __webpack_require__(326);
const imageParsing_1 = __webpack_require__(1539);
const dsaImageLoader_1 = __webpack_require__(6475);
// global module variables
let customImageLoaderCounter = 0;
// Local cache used to store multiframe datasets to avoid reading and parsing
// the whole file to show a single frame.
let multiframeDatasetCache = null;
/*
 * This module provides the following functions to be exported:
 * loadMultiFrameImage(elementId)
 * buildMultiFrameImage(seriesId, serie)
 * getMultiFrameImageId(customLoaderName)
 * clearMultiFrameCache()
 */
/**
 * Custom MultiFrame Loader Function
 * @export
 * @function loadMultiFrameImage
 * @param {String} imageId - ImageId tag
 * @returns {Function} Custom Image Creation Function
 */
const loadMultiFrameImage = function (imageId) {
    var _a;
    let parsedImageId = cornerstone_wado_image_loader_1.default.wadouri.parseImageId(imageId);
    let rootImageId = parsedImageId.scheme + ":" + parsedImageId.url;
    let imageTracker = (0, commonLoader_1.getLarvitarImageTracker)();
    let seriesId = imageTracker[rootImageId];
    let manager = (0, commonLoader_1.getLarvitarManager)();
    if (multiframeDatasetCache === null) {
        multiframeDatasetCache = {};
    }
    if (multiframeDatasetCache[rootImageId]) {
        multiframeDatasetCache[rootImageId] = multiframeDatasetCache[rootImageId];
    }
    else if (manager) {
        multiframeDatasetCache[rootImageId] = manager[seriesId];
    }
    else {
        throw new Error("No multiframe dataset found for seriesId: " + seriesId);
    }
    let metadata = (_a = multiframeDatasetCache[rootImageId]) === null || _a === void 0 ? void 0 : _a.instances[imageId].metadata;
    return createCustomImage(rootImageId, imageId, parsedImageId.frame, metadata);
};
exports.loadMultiFrameImage = loadMultiFrameImage;
/**
 * Build the multiframe layout in the larvitar Manager
 * @export
 * @function buildMultiFrameImage
 * @param {String} seriesId - SeriesId tag
 * @param {Object} serie - parsed serie object
 */
const buildMultiFrameImage = function (larvitarSeriesInstanceUID, serie) {
    let t0 = performance.now();
    let manager = (0, commonLoader_1.getLarvitarManager)();
    let imageTracker = (0, commonLoader_1.getLarvitarImageTracker)();
    let numberOfFrames = serie.metadata.numberOfFrames;
    let frameTime = serie.metadata.frameTime;
    let frameDelay = serie.metadata.frameDelay ? serie.metadata.frameDelay : 0;
    let rWaveTimeVector = serie.metadata.rWaveTimeVector;
    let sopInstanceUID = serie.metadata["x00080018"];
    let dataSet = serie.dataSet;
    let imageId = (0, exports.getMultiFrameImageId)("multiFrameLoader");
    imageTracker[imageId] = larvitarSeriesInstanceUID;
    // check if manager exists for this seriesId
    if (!manager[larvitarSeriesInstanceUID]) {
        manager[larvitarSeriesInstanceUID] = serie;
        manager[larvitarSeriesInstanceUID].imageIds = [];
        manager[larvitarSeriesInstanceUID].instances = {};
    }
    (0, lodash_1.each)((0, lodash_1.range)(numberOfFrames), function (frameNumber) {
        let frameImageId = imageId + "?frame=" + frameNumber;
        // EXTRACT MULTIFRAME METADATA (x52009230) Per-frame Functional Groups Sequence
        let frameMetadata = Object.assign({}, serie.metadata);
        (0, imageParsing_1.parseDataSet)(dataSet, frameMetadata, {
            tags: ["x52009230"],
            frameId: frameNumber
        });
        // store file references
        const managerSeriesId = manager[larvitarSeriesInstanceUID];
        managerSeriesId.seriesUID = serie.metadata["x0020000e"];
        managerSeriesId.studyUID = serie.metadata["x0020000d"];
        managerSeriesId.modality = serie.metadata["x00080060"];
        managerSeriesId.color = cornerstone_wado_image_loader_1.default.isColorImage(serie.metadata["x00280004"]);
        managerSeriesId.isMultiframe = true;
        managerSeriesId.currentImageIdIndex = 0;
        managerSeriesId.numberOfFrames = numberOfFrames;
        managerSeriesId.frameTime = frameTime;
        managerSeriesId.frameDelay = frameDelay;
        managerSeriesId.rWaveTimeVector = rWaveTimeVector;
        managerSeriesId.numberOfImages = undefined;
        managerSeriesId.bytes = serie.bytes;
        managerSeriesId.imageIds.push(frameImageId);
        managerSeriesId.instanceUIDs[sopInstanceUID] = imageId;
        managerSeriesId.instances[frameImageId] = {
            instanceId: sopInstanceUID,
            frame: frameNumber,
            metadata: frameMetadata
        };
        managerSeriesId.dataSet = dataSet || null;
        managerSeriesId.seriesDescription = serie.metadata
            .seriesDescription;
    });
    // check for DSA
    if (serie.metadata["x00286100"] !== undefined) {
        (0, dsaImageLoader_1.populateDsaImageIds)(larvitarSeriesInstanceUID);
    }
    let t1 = performance.now();
    console.log(`Call to buildMultiFrameImage took ${t1 - t0} milliseconds.`);
};
exports.buildMultiFrameImage = buildMultiFrameImage;
/**
 * Get the custom imageId from custom loader
 * @instance
 * @function getMultiFrameImageId
 * @param {String} customLoaderName The custom loader name
 * @return {String} the custom image id
 */
const getMultiFrameImageId = function (customLoaderName) {
    let imageId = customLoaderName + "://" + customImageLoaderCounter;
    customImageLoaderCounter++;
    return imageId;
};
exports.getMultiFrameImageId = getMultiFrameImageId;
/**
 * Clear the multiframe cache
 * @instance
 * @function clearMultiFrameCache
 * @param {String} seriesId - SeriesId tag
 */
const clearMultiFrameCache = function (seriesId) {
    (0, lodash_1.each)(multiframeDatasetCache, function (image, imageId) {
        if (!image) {
            return;
        }
        if (seriesId == image.seriesUID || !seriesId) {
            if (image.dataSet) {
                // @ts-ignore: modify external type ?
                image.dataSet.byteArray = null;
            }
            image.dataSet = null;
            image.elements = null;
            (0, lodash_1.each)(image.instances, function (instance) {
                // @ts-ignore: is needed to clear the cache ?
                instance.metadata = null;
            });
            // @ts-ignore: is needed to clear the cache ?
            image.instances = null;
            multiframeDatasetCache[imageId] = null;
            delete multiframeDatasetCache[imageId];
        }
    });
    if (!seriesId) {
        multiframeDatasetCache = null;
    }
};
exports.clearMultiFrameCache = clearMultiFrameCache;
/**
 * Create the custom image object for cornerstone from custom image
 * @instance
 * @function createCustomImage
 * @param {String} imageId The Id of the image
 * @param {Object} metadata the metadata object
 * @param {Object} pixelData pixel data object
 * @param {Object} dataSet dataset object
 * @returns {Object} custom image object
 */
let createCustomImage = function (id, imageId, frameIndex, metadata) {
    let options = {}; //TODO-ts change any to proper type when available
    // always preScale the pixel array unless it is asked not to
    options.preScale = {
        enabled: options.preScale && options.preScale.enabled !== undefined
            ? options.preScale.enabled
            : false
    };
    if (multiframeDatasetCache === null || !multiframeDatasetCache[id]) {
        throw new Error("No multiframe dataset found for id: " + id);
    }
    let dataSet = multiframeDatasetCache[id]
        .dataSet;
    if (!dataSet) {
        throw new Error("No dataset found for id: " + id);
    }
    let pixelDataElement = dataSet.elements.x7fe00010;
    // Extract pixelData of the required frame
    let pixelData;
    try {
        if (pixelDataElement.encapsulatedPixelData) {
            pixelData = cornerstone_wado_image_loader_1.default.wadouri.getEncapsulatedImageFrame(dataSet, frameIndex);
        }
        else {
            pixelData = cornerstone_wado_image_loader_1.default.wadouri.getUncompressedImageFrame(dataSet, frameIndex);
        }
    }
    catch (error) {
        throw new Error("No pixel data for id: " + id);
    }
    if (!metadata) {
        throw new Error("No metadata for id: " + id);
    }
    let imageFrame = (0, commonLoader_1.getImageFrame)(metadata, dataSet);
    let transferSyntax = dataSet.string("x00020010");
    let canvas = window.document.createElement("canvas");
    // Get the scaling parameters from the metadata
    if (options.preScale.enabled) {
        const scalingParameters = cornerstone_wado_image_loader_1.default.getScalingParameters(cornerstone.metaData, imageId);
        if (scalingParameters) {
            options.preScale = Object.assign(Object.assign({}, options.preScale), { scalingParameters });
        }
    }
    const decodePromise = cornerstone_wado_image_loader_1.default.decodeImageFrame(imageFrame, transferSyntax, pixelData, canvas, options);
    let promise = new Promise((resolve, reject) => {
        decodePromise.then(function handleDecodeResponse(imageFrame) {
            // This function uses the pixelData received as argument without manipulating
            // them: if the image is compressed, the decompress function should be called
            // before creating the custom image object (like the multiframe case).
            setPixelDataType(imageFrame);
            let pixelSpacing = metadata.x00280030 ? metadata.x00280030 : 1.0;
            let rescaleIntercept = metadata.x00281052;
            let rescaleSlope = metadata.x00281053;
            let windowCenter = metadata.x00281050;
            let windowWidth = metadata.x00281051;
            function getSizeInBytes() {
                let bytesPerPixel = Math.round(imageFrame.bitsAllocated / 8);
                return (imageFrame.rows *
                    imageFrame.columns *
                    bytesPerPixel *
                    imageFrame.samplesPerPixel);
            }
            let image = {
                imageId: imageId,
                color: cornerstone_wado_image_loader_1.default.isColorImage(imageFrame.photometricInterpretation),
                columnPixelSpacing: pixelSpacing[1]
                    ? pixelSpacing[1]
                    : pixelSpacing, // check for specific spacing value
                columns: imageFrame.columns,
                data: dataSet ? dataSet : undefined,
                height: imageFrame.rows,
                floatPixelData: undefined,
                intercept: rescaleIntercept
                    ? rescaleIntercept
                    : 0,
                invert: imageFrame.photometricInterpretation === "MONOCHROME1",
                minPixelValue: imageFrame.smallestPixelValue,
                maxPixelValue: imageFrame.largestPixelValue,
                render: undefined, // set below
                rowPixelSpacing: pixelSpacing[0]
                    ? pixelSpacing[0]
                    : pixelSpacing, // check for specific spacing value
                rows: imageFrame.rows,
                sizeInBytes: getSizeInBytes(),
                slope: rescaleSlope ? rescaleSlope : 1,
                width: imageFrame.columns,
                windowCenter: windowCenter,
                windowWidth: windowWidth,
                decodeTimeInMS: undefined, // TODO
                loadTimeInMS: undefined // TODO
            };
            // add function to return pixel data
            image.getPixelData = function () {
                if (imageFrame.pixelData === undefined) {
                    throw new Error("No pixel data for image " + imageId);
                }
                return Array.from(imageFrame.pixelData);
            };
            // convert color space if not isJPEGBaseline8BitColor
            let isJPEGBaseline8BitColor = cornerstone_wado_image_loader_1.default.isJPEGBaseline8BitColor(imageFrame, transferSyntax);
            if (image.color && !isJPEGBaseline8BitColor) {
                // setup the canvas context
                canvas.height = imageFrame.rows;
                canvas.width = imageFrame.columns;
                let context = canvas.getContext("2d");
                if (!context) {
                    throw new Error("Unable to get canvas context");
                }
                let imageData = context.createImageData(imageFrame.columns, imageFrame.rows);
                cornerstone_wado_image_loader_1.default.convertColorSpace(imageFrame, imageData);
                imageFrame.imageData = imageData;
                imageFrame.pixelData = imageData.data;
            }
            // Setup the renderer
            if (image.color) {
                image.getCanvas = function () {
                    canvas.height = image.rows || 0;
                    canvas.width = image.columns || 0;
                    let context = canvas.getContext("2d");
                    if (!context) {
                        throw new Error("Unable to get canvas context");
                    }
                    context.putImageData(imageFrame.imageData, 0, 0);
                    return canvas;
                };
            }
            // calculate min/max if not supplied
            if (image.minPixelValue === undefined ||
                image.maxPixelValue === undefined) {
                let minMax = cornerstone_wado_image_loader_1.default.getMinMax(pixelData);
                image.minPixelValue = minMax.min;
                image.maxPixelValue = minMax.max;
            }
            // set the ww/wc to cover the dynamic range of the image if no values are supplied
            if (image.windowCenter === undefined || image.windowWidth === undefined) {
                if (image.color) {
                    image.windowWidth = 255;
                    image.windowCenter = 128;
                }
                else if (image.maxPixelValue &&
                    image.minPixelValue &&
                    image.slope &&
                    image.intercept) {
                    let maxVoi = image.maxPixelValue * image.slope + image.intercept;
                    let minVoi = image.minPixelValue * image.slope + image.intercept;
                    image.windowWidth = maxVoi - minVoi;
                    image.windowCenter = (maxVoi + minVoi) / 2;
                }
            }
            resolve(image);
        }, reject);
    });
    // Return an object containing the Promise to cornerstone so it can setup callbacks to be
    // invoked asynchronously for the success/resolve and failure/reject scenarios.
    return {
        promise
    };
};
/**
 * This is an override of the cornerstoneDICOMImageLoader setPixelDataType function
 * @instance
 * @function setPixelDataType
 * @param {Object} imageFrame The Id of the image
 */
const setPixelDataType = function (imageFrame) {
    if (imageFrame.bitsAllocated === 16) {
        if (imageFrame.pixelRepresentation === 0) {
            imageFrame.pixelData = new Uint16Array(imageFrame.pixelData);
        }
        else {
            imageFrame.pixelData = new Int16Array(imageFrame.pixelData);
        }
    }
    else {
        imageFrame.pixelData = new Uint8Array(imageFrame.pixelData);
    }
};


/***/ }),

/***/ 6934:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module loaders/nrrdLoader
 *  @desc This file provides functionalities for
 *        custom NRRD Loader
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getNrrdSerieDimensions = exports.getSliceNumberFromImageId = exports.getImageIdFromSlice = exports.loadNrrdImage = exports.getNrrdImageId = exports.buildNrrdImage = void 0;
// external libraries
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
const cornerstone_wado_image_loader_1 = __importDefault(__webpack_require__(2424));
const lodash_1 = __webpack_require__(6486);
const uuid_1 = __webpack_require__(1614);
// internal libraries
const imageUtils_1 = __webpack_require__(8345);
const commonLoader_1 = __webpack_require__(326);
// global module variables
let customImageLoaderCounter = 0;
/*
 * This module provides the following functions to be exported:
 * buildNrrdImage(volume, seriesId, custom_header)
 * getNrrdImageId(customLoaderName)
 * loadNrrdImage(imageId)
 * getImageIdFromSlice(sliceNumber, orientation)
 * getSliceNumberFromImageId(imageId, orientation)
 * getNrrdSerieDimensions()
 */
/**
 * Build the data structure for the provided image orientation
 * @instance
 * @function buildNrrdImage
 * @param {Object} volume The volume object
 * @param {String} seriesId The Id of the series
 * @param {Object} custom_header A custom header object
 * @return {Object} volume data
 */
const buildNrrdImage = function (volume, seriesId, custom_header) {
    //TODO-ts: better definition
    let t0 = performance.now();
    // standard image structure
    let image = {};
    let manager = (0, commonLoader_1.getLarvitarManager)();
    let imageTracker = (0, commonLoader_1.getLarvitarImageTracker)();
    image.currentImageIdIndex = 0;
    image.imageIds = [];
    image.instances = {};
    image.numberOfImages = 0;
    image.seriesDescription = "";
    image.seriesUID = seriesId;
    let header = {};
    header.volume = {};
    // need to extract header from nrrd file format
    // sizes, spaceDirections and spaceOrigin
    const index = volume.header.kinds[0] == "domain" ? 0 : 1;
    let spacing_x = Math.sqrt(volume.header["space directions"][index + 0][0] *
        volume.header["space directions"][index + 0][0] +
        volume.header["space directions"][index + 0][1] *
            volume.header["space directions"][index + 0][1] +
        volume.header["space directions"][index + 0][2] *
            volume.header["space directions"][index + 0][2]);
    let spacing_y = Math.sqrt(volume.header["space directions"][index + 1][0] *
        volume.header["space directions"][index + 1][0] +
        volume.header["space directions"][index + 1][1] *
            volume.header["space directions"][index + 1][1] +
        volume.header["space directions"][index + 1][2] *
            volume.header["space directions"][index + 1][2]);
    let spacing_z = Math.sqrt(volume.header["space directions"][index + 2][0] *
        volume.header["space directions"][index + 2][0] +
        volume.header["space directions"][index + 2][1] *
            volume.header["space directions"][index + 2][1] +
        volume.header["space directions"][index + 2][2] *
            volume.header["space directions"][index + 2][2]);
    header.volume.rows = volume.header.sizes[index + 1];
    header.volume.cols = volume.header.sizes[index + 0];
    header.volume.numberOfSlices = volume.header.sizes[index + 2];
    header.volume.imagePosition = volume.header["space origin"];
    header.volume.pixelSpacing = [spacing_x, spacing_y];
    header.volume.sliceThickness = spacing_z;
    header.volume.repr =
        volume.header.type[0].toUpperCase() + volume.header.type.slice(1);
    header.volume.intercept = custom_header ? custom_header.intercept : 0;
    header.volume.slope = custom_header ? custom_header.slope : 1;
    header.volume.phase = custom_header ? custom_header.phase : "";
    header.volume.study_description = custom_header
        ? custom_header.study_description
        : "";
    header.volume.series_description = custom_header
        ? custom_header.series_description
        : "";
    header.volume.acquisition_date = custom_header
        ? custom_header.acquisition_date
        : "";
    let rows = volume.header.sizes[index + 1];
    let cols = volume.header.sizes[index + 0];
    let frames = volume.header.sizes[index + 2];
    let iopArr = volume.header["space directions"][index + 0].concat(volume.header["space directions"][index + 1]);
    if (iopArr.length !== 6) {
        throw new Error("Invalid Image Orientation");
    }
    let iop = iopArr;
    let firstIpp = header.volume.imagePosition;
    let w = (0, imageUtils_1.getNormalOrientation)(iop);
    let ps = header.volume.pixelSpacing;
    let thickness = header.volume.sliceThickness;
    let intercept = header.volume.intercept;
    let slope = header.volume.slope;
    let metadata = {
        x00280010: rows, // Rows
        x00280011: cols, // Columns
        x00200037: iop, // ImageOrientationPatient
        x00280030: ps, // PixelSpacing
        x00180050: [thickness][0], // SliceThickness
        x00281052: intercept ? [intercept] : [0],
        x00281053: slope ? [slope] : [1],
        x00200052: header.volume.imageIds
            ? header[header.volume.imageIds[0]].instanceUID
            : null,
        x0008103e: header.volume.imageIds
            ? header[header.volume.imageIds[0]].seriesDescription
            : null,
        x00080060: header.volume.imageIds
            ? header[header.volume.imageIds[0]].seriesModality
            : null,
        x00100010: header.volume.imageIds
            ? header[header.volume.imageIds[0]].patientName
            : null,
        x00280100: header.volume.imageIds
            ? header[header.volume.imageIds[0]].bitsAllocated
            : null,
        x00280103: header.volume.imageIds
            ? header[header.volume.imageIds[0]].pixelRepresentation
            : null,
        repr: header.volume.repr || null
    };
    // compute default ww/wl values here to use them also for resliced images
    let minMax = cornerstone_wado_image_loader_1.default.getMinMax(volume.data);
    let maxVoi = minMax.max * metadata.x00281053[0] +
        metadata.x00281052[0];
    let minVoi = minMax.min * metadata.x00281053[0] +
        metadata.x00281052[0];
    let ww = maxVoi - minVoi;
    let wl = (maxVoi + minVoi) / 2;
    metadata.x00280106 = minMax.min;
    metadata.x00280107 = minMax.max;
    // extract the pixelData of each frame, store the data into the image object
    (0, lodash_1.each)((0, lodash_1.range)(frames), function (sliceIndex) {
        let sliceSize = rows * cols;
        let sliceBuffer = volume.data.subarray(sliceSize * sliceIndex, sliceSize * (sliceIndex + 1));
        if (!metadata) {
            throw new Error("Metadata not found");
        }
        // @ts-ignore: TODO this is concepptually wrong, we already know the Pixel Representation
        // (see above, line 241), this function just returns the same value again
        let r = (0, imageUtils_1.getPixelRepresentation)(metadata);
        let typedArray = (0, imageUtils_1.getTypedArrayFromDataType)(r);
        if (!typedArray) {
            throw new Error("Typed array not found");
        }
        let pixelData = new typedArray(sliceBuffer);
        // assign these values to the metadata of all images
        metadata.x00281050 = wl;
        metadata.x00281051 = ww;
        let imageId = (0, exports.getNrrdImageId)("nrrdLoader");
        if (!imageTracker) {
            throw new Error("Image tracker not initialized");
        }
        imageTracker[imageId] = seriesId;
        // store file references
        image.imageIds.push(imageId);
        let frameMetadata = (0, lodash_1.clone)(metadata);
        frameMetadata.x00200032 = firstIpp.map(function (val, i) {
            return val + thickness * sliceIndex * w[i];
        });
        image.instances[imageId] = {
            instanceId: (0, uuid_1.v4)(),
            frame: sliceIndex,
            metadata: frameMetadata,
            pixelData: pixelData
        };
    });
    let middleSlice = Math.floor(image.imageIds.length / 2);
    image.currentImageIdIndex = middleSlice;
    image.numberOfImages = image.imageIds.length;
    // specify custom loader type and attach original header
    image.customLoader = "nrrdLoader";
    header.volume.imageIds = image.imageIds;
    image.nrrdHeader = header;
    if (!manager) {
        throw new Error("Larvitar manager not initialized");
    }
    manager[seriesId] = image;
    let t1 = performance.now();
    console.log(`Call to buildNrrdImage took ${t1 - t0} milliseconds.`);
    return image;
};
exports.buildNrrdImage = buildNrrdImage;
/**
 * Get the custom imageId from custom loader
 * @instance
 * @function getNrrdImageId
 * @param {String} customLoaderName The custom loader name
 * @return {String} the custom image id
 */
const getNrrdImageId = function (customLoaderName) {
    let imageId = customLoaderName + "://" + customImageLoaderCounter;
    customImageLoaderCounter++;
    return imageId;
};
exports.getNrrdImageId = getNrrdImageId;
/**
 * Custom cornerstone image loader for nrrd files
 * @instance
 * @function loadNrrdImage
 * @param {String} imageId The image id
 * @return {Object} custom image object
 */
const loadNrrdImage = function (imageId) {
    let manager = (0, commonLoader_1.getLarvitarManager)();
    let imageTracker = (0, commonLoader_1.getLarvitarImageTracker)();
    if (!manager || !imageTracker) {
        throw new Error("Larvitar manager or image tracker not initialized");
    }
    let seriesId = imageTracker[imageId];
    let instance = manager[seriesId].instances[imageId];
    //@ts-ignore TODO-ts: fix this why is different typed array?
    return createCustomImage(imageId, instance.metadata, instance.pixelData);
};
exports.loadNrrdImage = loadNrrdImage;
/**
 * Retrieve imageId for a slice in the given orientation
 * @instance
 * @function getImageIdFromSlice
 * @param {Integer} sliceNumber The image slice number
 * @param {String} orientation The orientation tag
 * @param {String} seriesId The series id
 * @return {String} image id
 */
const getImageIdFromSlice = function (sliceNumber, orientation, seriesId) {
    var prefix = "nrrdLoader://";
    var serieImageTracker;
    let imageTracker = (0, commonLoader_1.getLarvitarImageTracker)();
    if (seriesId) {
        serieImageTracker = (0, lodash_1.pickBy)(imageTracker, image => {
            return image[0] == seriesId;
        });
    }
    else {
        serieImageTracker = imageTracker;
    }
    var firstImageIdStr = (0, lodash_1.findKey)(serieImageTracker, entry => {
        return entry[1] == orientation;
    });
    let firstImageId = firstImageIdStr === null || firstImageIdStr === void 0 ? void 0 : firstImageIdStr.split("//").pop();
    if (firstImageId == undefined) {
        console.error("cannot find imageId for orientation: " + orientation);
        return "";
    }
    var imageIndex = parseInt(firstImageId) + parseInt(sliceNumber.toString());
    var imageId = prefix.concat(imageIndex.toString());
    return imageId;
};
exports.getImageIdFromSlice = getImageIdFromSlice;
/**
 * Retrieve slice number for a the given orientation
 * @instance
 * @function getSliceNumberFromImageId
 * @param {String} imageId The image slice id
 * @param {String} orientation The orientation tag
 * @param {String} seriesId The series id
 * @return {Integer} The image slice number
 */
const getSliceNumberFromImageId = function (imageId, orientation) {
    let imageTracker = (0, commonLoader_1.getLarvitarImageTracker)();
    var firstImageIdStr = (0, lodash_1.findKey)(imageTracker, entry => {
        return entry[1] == orientation;
    });
    if (firstImageIdStr == undefined) {
        console.error("cannot find imageId for orientation: " + orientation);
        return 0;
    }
    var imageNumber = imageId.split("//").pop() || imageId;
    let firstImageId = firstImageIdStr.split("//").pop();
    if (firstImageId == undefined) {
        console.error("cannot find imageId for orientation: " + orientation);
        return 0;
    }
    var imageIndex = parseInt(imageNumber) - parseInt(firstImageId);
    return imageIndex;
};
exports.getSliceNumberFromImageId = getSliceNumberFromImageId;
/**
 * Get series dimension for each view
 * @instance
 * @function getNrrdSerieDimensions
 * @return {Object} Series dimension for each view
 */
const getNrrdSerieDimensions = function () {
    let imageTracker = (0, commonLoader_1.getLarvitarImageTracker)();
    var dim_axial = (0, lodash_1.filter)(imageTracker, img => {
        return img[1] == "axial";
    });
    var dim_coronal = (0, lodash_1.filter)(imageTracker, img => {
        return img[1] == "coronal";
    });
    var dim_sagittal = (0, lodash_1.filter)(imageTracker, img => {
        return img[1] == "sagittal";
    });
    return {
        axial: [dim_coronal.length, dim_sagittal.length, dim_axial.length],
        coronal: [dim_sagittal.length, dim_axial.length, dim_coronal.length],
        sagittal: [dim_coronal.length, dim_axial.length, dim_sagittal.length]
    };
};
exports.getNrrdSerieDimensions = getNrrdSerieDimensions;
/* Internal functions */
/**
 * Create the custom image object for conrnestone from nrrd file
 * @instance
 * @function createCustomImage
 * @param {String} imageId The series id
 * @param {Object} metadata The metadata object
 * @param {Object} pixelData The pixelData object
 * @param {Object} dataSet The dataset
 * @return {String} The image id
 */
let createCustomImage = function (imageId, metadata, pixelData, dataSet) {
    //TODO-ts check this
    let canvas = window.document.createElement("canvas");
    let lastImageIdDrawn = "";
    let imageFrame = (0, commonLoader_1.getImageFrame)(metadata, dataSet);
    // This function uses the pixelData received as argument without manipulating
    // them: if the image is compressed, the decompress function should be called
    // before creating the custom image object (like the multiframe case).
    imageFrame.pixelData = pixelData;
    let pixelSpacing = metadata.x00280030;
    let rescaleIntercept = metadata.x00281052;
    let rescaleSlope = metadata.x00281053;
    let windowCenter = metadata.x00281050;
    let windowWidth = metadata.x00281051;
    function getSizeInBytes() {
        let bytesPerPixel = Math.round(imageFrame.bitsAllocated / 8);
        return (imageFrame.rows *
            imageFrame.columns *
            bytesPerPixel *
            imageFrame.samplesPerPixel);
    }
    let image = {
        imageId: imageId,
        color: cornerstone_wado_image_loader_1.default.isColorImage(imageFrame.photometricInterpretation),
        columnPixelSpacing: pixelSpacing ? pixelSpacing[1] : undefined,
        columns: imageFrame.columns,
        height: imageFrame.rows,
        intercept: rescaleIntercept ? rescaleIntercept[0] : 0,
        invert: imageFrame.photometricInterpretation === "MONOCHROME1",
        minPixelValue: imageFrame.smallestPixelValue,
        maxPixelValue: imageFrame.largestPixelValue,
        render: undefined, // set below
        rowPixelSpacing: pixelSpacing ? pixelSpacing[0] : undefined,
        rows: imageFrame.rows,
        sizeInBytes: getSizeInBytes(),
        slope: rescaleSlope ? rescaleSlope[0] : 1,
        width: imageFrame.columns,
        windowCenter: windowCenter ? windowCenter[0] : undefined,
        windowWidth: windowWidth ? windowWidth[0] : undefined,
        decodeTimeInMS: undefined,
        webWorkerTimeInMS: undefined
    };
    // add function to return pixel data
    image.getPixelData = function () {
        if (!imageFrame.pixelData) {
            console.warn('no pixel data for imageId "' + imageId);
            return [];
        }
        return Array.from(imageFrame.pixelData);
    };
    // convert color space
    if (image.color) {
        // setup the canvas context
        canvas.height = imageFrame.rows;
        canvas.width = imageFrame.columns;
        let context = canvas.getContext("2d");
        if (!context) {
            throw new Error("Unable to get canvas context");
        }
        let imageData = context.createImageData(imageFrame.columns, imageFrame.rows);
        cornerstone_wado_image_loader_1.default.convertColorSpace(imageFrame, imageData);
        imageFrame.imageData = imageData;
        imageFrame.pixelData = imageData.data;
    }
    // Setup the renderer
    if (image.color) {
        image.render = cornerstone_core_1.default.renderColorImage;
        image.getCanvas = function () {
            if (lastImageIdDrawn === imageId) {
                return canvas;
            }
            canvas.height = image.rows || 0;
            canvas.width = image.columns || 0;
            let context = canvas.getContext("2d");
            if (!context) {
                throw new Error("Unable to get canvas context");
            }
            context.putImageData(imageFrame.imageData, 0, 0);
            lastImageIdDrawn = imageId;
            return canvas;
        };
    }
    else {
        image.render = undefined; // will be set at need in cornerstone render pipeline, see drawImageSync.js (line 44)
    }
    // calculate min/max if not supplied
    if (image.minPixelValue === undefined || image.maxPixelValue === undefined) {
        let minMax = cornerstone_wado_image_loader_1.default.getMinMax(pixelData);
        image.minPixelValue = minMax.min;
        image.maxPixelValue = minMax.max;
    }
    // set the ww/wc to cover the dynamic range of the image if no values are supplied
    if (image.windowCenter === undefined || image.windowWidth === undefined) {
        if (image.color) {
            image.windowWidth = 255.0;
            image.windowCenter = 127.5;
        }
        else if (image.maxPixelValue != null &&
            image.minPixelValue != null &&
            image.slope != null &&
            image.intercept != null) {
            let maxVoi = image.maxPixelValue * image.slope + image.intercept;
            let minVoi = image.minPixelValue * image.slope + image.intercept;
            image.windowWidth = maxVoi - minVoi;
            image.windowCenter = (maxVoi + minVoi) / 2;
        }
        else {
            console.error("Unable to calculate default window width/center for imageId: " +
                imageId);
        }
    }
    // Custom images does not have the "data" attribute becaouse their dataset is
    // not available. The "metadata" attribute is used by the storeImageData
    // function to store custom image pixelData and metadata.
    image.metadata = metadata;
    let promise = new Promise(function (resolve) {
        resolve(image);
    });
    // Return an object containing the Promise to cornerstone so it can setup callbacks to be
    // invoked asynchronously for the success/resolve and failure/reject scenarios.
    return {
        promise
    };
};


/***/ }),

/***/ 5779:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module loaders/resliceLoader
 *  @desc This file provides functionalities for
 *        custom Reslice Loader
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.loadReslicedImage = void 0;
// external libraries
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
const cornerstone_wado_image_loader_1 = __importDefault(__webpack_require__(2424));
// internal libraries
const commonLoader_1 = __webpack_require__(326);
/*
 * This module provides the following functions to be exported:
 * loadReslicedImage(imageId)
 */
/**
 * Custom Loader for DICOMImageLoader
 * @instance
 * @function loadReslicedImage
 * @param {String} imageId The Id of the image
 * @returns {Object} custom image object
 */
const loadReslicedImage = function (imageId) {
    let manager = (0, commonLoader_1.getLarvitarManager)();
    let imageTracker = (0, commonLoader_1.getLarvitarImageTracker)();
    let seriesId = imageTracker[imageId];
    let instance = manager[seriesId].instances[imageId];
    var reslicedPixeldata = instance.pixelData;
    //@ts-ignore deprecated
    return createCustomImage(imageId, instance.metadata, reslicedPixeldata);
};
exports.loadReslicedImage = loadReslicedImage;
/* Internal module functions */
/**
 * Create the custom image object for cornerstone from custom image
 * @instance
 * @function createCustomImage
 * @param {String} imageId The Id of the image
 * @param {Object} metadata the metadata object
 * @param {Object} pixelData pixel data object
 * @param {Object} dataSet dataset object
 * @returns {Object} custom image object
 */
let createCustomImage = function (imageId, metadata, pixelData, dataSet // deprecated
) {
    let canvas = window.document.createElement("canvas");
    let lastImageIdDrawn = "";
    let imageFrame = (0, commonLoader_1.getImageFrame)(metadata, dataSet);
    // This function uses the pixelData received as argument without manipulating
    // them: if the image is compressed, the decompress function should be called
    // before creating the custom image object (like the multiframe case).
    imageFrame.pixelData = pixelData;
    let pixelSpacing = metadata.x00280030;
    let rescaleIntercept = metadata.x00281052;
    let rescaleSlope = metadata.x00281053;
    let windowCenter = metadata.x00281050;
    let windowWidth = metadata.x00281051;
    function getSizeInBytes() {
        let bytesPerPixel = Math.round(imageFrame.bitsAllocated / 8);
        return (imageFrame.rows *
            imageFrame.columns *
            bytesPerPixel *
            imageFrame.samplesPerPixel);
    }
    let image = {
        imageId: imageId,
        color: cornerstone_wado_image_loader_1.default.isColorImage(imageFrame.photometricInterpretation),
        columnPixelSpacing: pixelSpacing
            ? pixelSpacing[1]
            : undefined,
        columns: imageFrame.columns,
        height: imageFrame.rows,
        intercept: rescaleIntercept ? rescaleIntercept : 0,
        invert: imageFrame.photometricInterpretation === "MONOCHROME1",
        minPixelValue: imageFrame.smallestPixelValue,
        maxPixelValue: imageFrame.largestPixelValue,
        render: undefined, // set below
        rowPixelSpacing: pixelSpacing ? pixelSpacing[0] : undefined,
        rows: imageFrame.rows,
        sizeInBytes: getSizeInBytes(),
        slope: rescaleSlope ? rescaleSlope : 1,
        width: imageFrame.columns,
        windowCenter: windowCenter ? windowCenter : undefined,
        windowWidth: windowWidth ? windowWidth : undefined,
        decodeTimeInMS: undefined,
        webWorkerTimeInMS: undefined
    };
    // add function to return pixel data
    image.getPixelData = function () {
        if (!imageFrame.pixelData) {
            console.warn('no pixel data for imageId "' + imageId);
            return [];
        }
        return Array.from(imageFrame.pixelData);
    };
    // convert color space
    if (image.color) {
        // setup the canvas context
        canvas.height = imageFrame.rows;
        canvas.width = imageFrame.columns;
        let context = canvas.getContext("2d");
        if (!context) {
            throw new Error("Unable to get canvas context");
        }
        let imageData = context.createImageData(imageFrame.columns, imageFrame.rows);
        cornerstone_wado_image_loader_1.default.convertColorSpace(imageFrame, imageData);
        imageFrame.imageData = imageData;
        imageFrame.pixelData = imageData.data;
    }
    // Setup the renderer TODO check if this is really needed (see comment below)
    if (image.color) {
        image.render = cornerstone_core_1.default.renderColorImage;
        image.getCanvas = function () {
            if (lastImageIdDrawn === imageId) {
                return canvas;
            }
            canvas.height = image.rows || 0;
            canvas.width = image.columns || 0;
            let context = canvas.getContext("2d");
            if (!context) {
                throw new Error("Unable to get canvas context");
            }
            context.putImageData(imageFrame.imageData, 0, 0);
            lastImageIdDrawn = imageId;
            return canvas;
        };
    }
    else {
        image.render = undefined; // will be set at need in cornerstone render pipeline, see drawImageSync.js (line 44)
    }
    // calculate min/max to avoid erroneous calculation from getImageFrame function
    let minMax = cornerstone_wado_image_loader_1.default.getMinMax(pixelData);
    image.minPixelValue = minMax.min;
    image.maxPixelValue = minMax.max;
    // set the ww/wc to cover the dynamic range of the image if no values are supplied
    if (image.windowCenter === undefined || image.windowWidth === undefined) {
        if (image.color) {
            image.windowWidth = 255.0;
            image.windowCenter = 127.5;
        }
        else if (image.maxPixelValue &&
            image.minPixelValue &&
            image.slope &&
            image.intercept) {
            let maxVoi = image.maxPixelValue * image.slope + image.intercept;
            let minVoi = image.minPixelValue * image.slope + image.intercept;
            image.windowWidth = maxVoi - minVoi;
            image.windowCenter = (maxVoi + minVoi) / 2;
        }
        else {
            console.error("Unable to calculate default window width/center for imageId: " +
                imageId);
        }
    }
    // Custom images does not have the "data" attribute becaouse their dataset is
    // not available. The "metadata" attribute is used by the storeImageData
    // function to store custom image pixelData and metadata.
    image.metadata = metadata;
    let promise = new Promise(function (resolve) {
        resolve(image);
    });
    // Return an object containing the Promise to cornerstone so it can setup callbacks to be
    // invoked asynchronously for the success/resolve and failure/reject scenarios.
    return {
        promise
    };
};


/***/ }),

/***/ 3862:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module monitors/memory
 *  @desc This file provides utility functions for
 *        monitoring memory usage
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.setAvailableMemory = exports.getAvailableMemory = exports.getUsedMemory = exports.checkMemoryAllocation = exports.checkAndClearMemory = void 0;
const commonLoader_1 = __webpack_require__(326);
const imageRendering_1 = __webpack_require__(4767);
const imageStore_1 = __importDefault(__webpack_require__(5278));
// global module variables
const backingMemory = 100 * 1048576; // 100 MB
var customMemoryLimit = null;
/*
 * This module provides the following functions to be exported:
 * checkAndClearMemory(bytes, [seriesUUIDs])
 * checkMemoryAllocation(bytes)
 * getUsedMemory()
 * getAvailableMemory()
 * setAvailableMemory()
 */
/**
 * Check memory allocation and clear memory if needed
 * @instance
 * @function checkAndClearMemory
 * @param {Number} - Number of bytes to allocate
 * @param {Array} - Rendered Series ids
 */
const checkAndClearMemory = function (bytes, renderedSeriesIds) {
    const isEnough = (0, exports.checkMemoryAllocation)(bytes);
    if (isEnough === false) {
        const manager = (0, commonLoader_1.getLarvitarManager)();
        // get all key of manager and create a list
        const seriesIds = Object.keys(manager);
        // create a list of non rendered series ids
        const nonRenderedSeriesIds = seriesIds.filter(seriesId => !renderedSeriesIds.includes(seriesId));
        // remove non rendered series from manager
        nonRenderedSeriesIds.forEach(seriesId => {
            (0, commonLoader_1.removeSeriesFromLarvitarManager)(seriesId);
            (0, imageRendering_1.clearImageCache)(seriesId);
            imageStore_1.default.removeSeriesId(seriesId);
        });
    }
};
exports.checkAndClearMemory = checkAndClearMemory;
/**
 * Check memory allocation and returns false if js Heap size has reached its limit
 * @instance
 * @function checkMemoryAllocation
 * @param {Number} - Number of bytes to allocate
 * @return {Boolean} - Returns a boolean flag to warn the user about memory allocation limit
 */
const checkMemoryAllocation = function (bytes) {
    if (checkMemorySupport()) {
        let usedMemory = (0, exports.getUsedMemory)();
        let availableMemory = (0, exports.getAvailableMemory)();
        let isEnough = availableMemory - bytes - usedMemory > 0 ? true : false;
        if (!isEnough) {
            console.log("Total Memory Available is: ", getMB(availableMemory), " MB");
            console.log("Currently Used Memory is: ", getMB(usedMemory), " MB");
            console.log("New memory requested allocation is: ", getMB(usedMemory + bytes), " MB");
        }
        return isEnough;
    }
    else {
        console.warn("Check Memory Allocation is not supported");
        return true;
    }
};
exports.checkMemoryAllocation = checkMemoryAllocation;
/**
 * Check performance.memory browser support and returns used Js Heap Size in Mb
 * @instance
 * @function getUsedMemory
 * @return {Number} - Returns used JSHeapSize in bytes or NaN if not supported
 */
const getUsedMemory = function () {
    return checkMemorySupport()
        ? performance.memory.usedJSHeapSize
        : NaN;
};
exports.getUsedMemory = getUsedMemory;
/**
 * Check performance.memory browser support and returns available Js Heap Size in Mb
 * @instance
 * @function getAvailableMemory
 * @return {Number} - Returns available JSHeapSize in bytes or NaN if not supported
 */
const getAvailableMemory = function () {
    if (checkMemorySupport()) {
        return customMemoryLimit
            ? customMemoryLimit
            : performance.memory.jsHeapSizeLimit - backingMemory;
    }
    else {
        return NaN;
    }
};
exports.getAvailableMemory = getAvailableMemory;
/**
 * Check performance.memory browser support and returns available Js Heap Size in Mb
 * @instance
 * @function setAvailableMemory
 * @param {Number} - Number of GB to set as maximum custom memory limit
 */
const setAvailableMemory = function (value) {
    customMemoryLimit = value * 1024 * 1024 * 1024;
};
exports.setAvailableMemory = setAvailableMemory;
/* Internal module functions */
/**
 * Check Browser support.
 * Firefox and Safari are not supported
 * See: https://developer.mozilla.org/en-US/docs/Web/API/Performance/memory
 * @instance
 * @function checkMemorySupport
 * @return {Boolean} - Returns memory object or false if not supported
 */
const checkMemorySupport = function () {
    return performance.memory
        ? performance.memory
        : false;
};
/**
 * Check Browser support.
 * @instance
 * @function getMB
 * @param {Number} bytes - Memory in bytes
 * @return {Number} - Memory in MB
 */
const getMB = function (bytes) {
    return bytes / 1048576;
};


/***/ }),

/***/ 9391:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

/** @module monitors/performance
 *  @desc This file provides utility functions for
 *        monitoring performance usage
 */
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.deactivatePerformanceMonitor = exports.activatePerformanceMonitor = exports.getPerformanceMonitor = void 0;
var PERFORMANCE_MONITOR = false;
/**
 * Get performance monitor
 * @instance
 * @function getPerformanceMonitor
 * @returns {Boolean} - Performance monitor status
 */
const getPerformanceMonitor = function () {
    return PERFORMANCE_MONITOR;
};
exports.getPerformanceMonitor = getPerformanceMonitor;
/**
 * Set performance monitor ON
 * @instance
 * @function activatePerformanceMonitor
 */
const activatePerformanceMonitor = function () {
    PERFORMANCE_MONITOR = true;
};
exports.activatePerformanceMonitor = activatePerformanceMonitor;
/**
 * Set performance monitor OFF
 * @instance
 * @function deactivatePerformanceMonitor
 */
const deactivatePerformanceMonitor = function () {
    PERFORMANCE_MONITOR = false;
};
exports.deactivatePerformanceMonitor = deactivatePerformanceMonitor;


/***/ }),

/***/ 2639:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

/** @module imaging/parsers/ecg
 *  @desc  This file provides functionalities for
 *         handling ECG signales in DICOM files
 */
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.parseECG = void 0;
const commonLoader_1 = __webpack_require__(326);
/*
 * This module provides the following functions to be exported:
 * parseECG(dataSet, tag, nSampling)
 */
/**
 * Generate an array of points representing the ECG signal
 * @instance
 * @function parseECG
 * @param {DataSet} dataSet - the DICOM dataset
 * @param {String} tag - the tag of the ECG signal
 * @param {Number} nSampling - the sampling rate
 * @returns {void}
 */
function parseECG(seriesId, dataSet, tag, nSampling = 2) {
    const element = dataSet.elements[tag];
    let data = dataSet.byteArray.slice(element.dataOffset, element.dataOffset + element.length);
    let points = [];
    const nCountFrom = data.length / 2;
    const nCountTo = Math.floor(0.5 + nCountFrom / nSampling);
    let values = [];
    let nFrom = 0;
    for (let nTo = 0; nTo < nCountTo; nTo++) {
        let v = data[nFrom] + 255 * data[nFrom + 1];
        values.push(v);
        nFrom += nSampling * 2;
    }
    const nMax = Math.max(...values);
    const nMin = Math.min(...values);
    for (let nTo = 0; nTo < nCountTo; nTo++) {
        let data = ((values[nTo] - nMin) / (nMax - nMin)) * 100;
        points.push(data);
    }
    let series = (0, commonLoader_1.getSeriesDataFromLarvitarManager)(seriesId);
    series.ecgData = points;
}
exports.parseECG = parseECG;


/***/ }),

/***/ 9425:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module imaging/parsers/pdf
 *  @desc  This file provides functionalities for
 *         managing pdf files using pdfjs-dist library
 */
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.generateFiles = exports.convertToPNG = void 0;
// external libraries
const pdfjs_dist_1 = __webpack_require__(9299);
pdfjs_dist_1.GlobalWorkerOptions.workerSrc = __webpack_require__(7624);
const fileLoader_1 = __webpack_require__(9995);
/**
 * This module provides the following functions to be exported:
 * convertToPNG(pdf, pageNumber)
 * generateFiles(fileURL)
 */
/**
 * Convert a pdf page to a png image in base64 format
 * @instance
 * @function convertToPNG
 * @param {pdfType} pdf - The pdf object
 * @param {number} pageNumber - The page number to be converted
 * @returns {string} The png image in base64 format
 */
const convertToPNG = function (pdf, pageNumber) {
    return __awaiter(this, void 0, void 0, function* () {
        const page = yield pdf.getPage(pageNumber);
        const viewport = page.getViewport({ scale: 1.5 });
        const canvas = document.createElement("canvas");
        canvas.height = viewport.height;
        canvas.width = viewport.width;
        const context = canvas.getContext("2d");
        if (context === null) {
            throw new Error("Failed to get 2D context from canvas");
        }
        const renderContext = {
            canvasContext: context,
            viewport: viewport
        };
        yield page.render(renderContext).promise;
        return canvas.toDataURL("image/png");
    });
};
exports.convertToPNG = convertToPNG;
/**
 * Generate an array of files from a pdf file
 * @instance
 * @function generateFiles
 * @param {string} fileURL - The url of the pdf file
 * @returns {File[]} An array of files
 */
const generateFiles = function (fileURL) {
    return __awaiter(this, void 0, void 0, function* () {
        let files = [];
        yield (0, pdfjs_dist_1.getDocument)(fileURL).promise.then((pdf) => __awaiter(this, void 0, void 0, function* () {
            // cycle through pages
            for (let i = 0; i < pdf.numPages; i++) {
                let aFile = yield generateFile(pdf, i + 1);
                files[i] = aFile;
                aFile = null;
            }
        }));
        return files; // Add this line to return the files array
    });
};
exports.generateFiles = generateFiles;
// internal functions
/**
 *
 * @instance
 * @function generateFile
 * @param {pdfType} pdf - The pdf object
 * @param {number} pageNumber - The page number to be converted
 * @returns {File} The png image of the pdf page in a File object
 */
function generateFile(pdf, pageNumber) {
    return __awaiter(this, void 0, void 0, function* () {
        const pngDataURL = yield (0, exports.convertToPNG)(pdf, pageNumber);
        let byteString = atob(pngDataURL.split(",")[1]);
        let ab = new ArrayBuffer(byteString.length);
        let ia = new Uint8Array(ab);
        for (let j = 0; j < byteString.length; j++) {
            ia[j] = byteString.charCodeAt(j);
        }
        let blob = new Blob([ab], {
            type: "image/png"
        });
        let file = new File([blob], `pdf_page_${pageNumber}.png`, {
            type: "image/png"
        });
        (0, fileLoader_1.populateFileManager)(file);
        byteString = null;
        ab = null;
        ia = null;
        blob = null;
        return file;
    });
}


/***/ }),

/***/ 1446:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module imaging/postProcessing/applyDSA
 *  @desc This file provides digital subtraction algorithm for XA images
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.applyDSAShift = exports.applyDSA = void 0;
// external libraries
const lodash_1 = __webpack_require__(6486);
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
const imageRendering_1 = __webpack_require__(4767);
const imageStore_1 = __importDefault(__webpack_require__(5278));
/*
 * This module provides the following functions to be exported:
 * applyDSA(multiframeSerie: Series, index: number): number[]
 * applyDSAShift(elementId: string, multiFrameSerie: Series, frameId: number, inputMaskSubPixelShift: number[]): void
 */
/**
 * Apply DSA to a multiframe serie
 * @function applyDSA
 * @param {Series} multiframeSerie - multiframe serie to apply DSA
 * @param {number} index - index of the frame to apply DSA
 * @param {number[]} inputMaskSubPixelShift - pixel shift applied to the mask
 * @returns {number[]} - pixel data of the frame after DSA
 */
function applyDSA(multiframeSerie, index, inputMaskSubPixelShift) {
    const dsaMetadata = multiframeSerie.dsa;
    const imageIds = multiframeSerie.imageIds;
    // switch on DSA MaskOperation
    switch (dsaMetadata.x00286101 // DSA MaskOperation
    ) {
        case "AVG_SUB":
            return avgSubMask(dsaMetadata, imageIds, index, inputMaskSubPixelShift);
        case "TID":
            return tidMask(dsaMetadata, imageIds, index);
        case "REV_TID":
            return revTidMask(dsaMetadata, imageIds, index);
        default:
            return [];
    }
}
exports.applyDSA = applyDSA;
/**
 * Apply DSA with Pixel Shift and update the image
 * @function applyDSAShift
 * @param {string} elementId - elementId of the viewer
 * @param {Series} multiFrameSerie - multiframe serie to apply DSA
 * @param {number} frameId - index of the frame to apply DSA
 * @param {number[]} inputMaskSubPixelShift - pixel shift applied to the mask
 * @returns {void}
 */
const applyDSAShift = function (elementId, multiFrameSerie, frameId, inputMaskSubPixelShift) {
    const t0 = performance.now();
    // set in store the mask subpixel shift
    imageStore_1.default.setDSAPixelShift(elementId, inputMaskSubPixelShift);
    // uncache image from cornestone cache
    const imageId = multiFrameSerie.dsa.imageIds[frameId];
    cornerstone_core_1.default.imageCache.removeImageLoadObject(imageId);
    // update image
    (0, imageRendering_1.updateImage)(multiFrameSerie, elementId, frameId, true);
    (0, imageRendering_1.redrawImage)(elementId);
    const t1 = performance.now();
    console.debug(`Call to DSA applyDSAShift took ${t1 - t0} milliseconds.`);
};
exports.applyDSAShift = applyDSAShift;
/**
 * Compute the digital subtraction with avgSub mask
 * @function avgSubMask
 * @param {DSA} metadataInfo - DSA metadata
 * @param {string[]} imageIds - imageIds of the serie
 * @param {number} index - index of the frame to apply DSA
 * @returns {number[]} - pixel data of the frame after DSA
 */
function avgSubMask(metadataInfo, imageIds, index, inputMaskSubPixelShift) {
    const t0 = performance.now();
    // Mask Frame Numbers Attribute (might be an array) Required if AVGSUB
    const frameIndexNumber = typeof metadataInfo.x00286110 === "number"
        ? [metadataInfo.x00286110]
        : metadataInfo.x00286110;
    // get cached images from cornerstone cache
    const cachedImages = cornerstone_core_1.default.imageCache.cachedImages;
    // A pair of floating point numbers specifying the fractional vertical
    // [adjacent row spacing] and horizontal [adjacent column spacing] pixel
    // shift applied to the mask before subtracting it from the contrast frame.
    // The row offset results in a shift of the pixels along the column axis.
    // The column offset results in a shift of the pixels along the row axis.
    // A positive row offset is a shift toward the pixels of the lower row of the pixel plane.
    // A positive column offset is a shift toward the pixels of the left hand side column of the pixel plane.
    const maskSubPixelShift = inputMaskSubPixelShift
        ? inputMaskSubPixelShift
        : metadataInfo.x00286114 || [0.0, 0.0];
    // Specifies the number of contrast frames to average together
    // before performing the mask operation.
    // If the Attribute is missing, no averaging is performed.
    const contrastFrameAveragingAvg = metadataInfo.x00286112 || 1;
    // Each pair of numbers in this multi-valued Attribute specify a
    // beginning and ending frame number inclusive of a range where
    // this particular mask operation is valid.
    const frameRangeAvg = metadataInfo.x00286102 || [
        0,
        imageIds.length - 1 - contrastFrameAveragingAvg + 1
    ];
    let isFrameIncluded = false;
    for (let i = 0; i < frameRangeAvg.length; i += 2) {
        isFrameIncluded =
            index >= frameRangeAvg[i] && index <= frameRangeAvg[i + 1];
    }
    // source image where mask will be applied
    let srcImage = (0, lodash_1.find)(cachedImages, {
        imageId: imageIds[index]
    }).image;
    // get pixel data from source image
    let contrastFrame = srcImage.getPixelData();
    if (isFrameIncluded) {
        let maskFramesAvg = frameIndexNumber.map((i) => {
            const imageId = imageIds[i];
            const image = (0, lodash_1.find)(cachedImages, { imageId: imageId }).image;
            return image.getPixelData();
        });
        const resultFramesAvg = new Array(contrastFrame.length);
        const applyAverage = Array.isArray(maskFramesAvg) && maskFramesAvg.length > 1 ? true : false;
        if (applyAverage) {
            const valueAveraged = new Array(contrastFrame.length);
            for (let j = 0; j < contrastFrame.length; j++) {
                let valueAverage = 0;
                for (let i = 0; i < maskFramesAvg.length; i++) {
                    valueAverage = valueAverage + maskFramesAvg[i][j];
                }
                valueAveraged[j] = valueAverage / maskFramesAvg.length;
            }
            // Extract fractional vertical and horizontal pixel shifts from maskSubPixelShift
            const rowOffset = -1.0 * maskSubPixelShift[0];
            const colOffset = maskSubPixelShift[1];
            for (let j = 0; j < contrastFrame.length; j++) {
                // Apply sub-pixel shift to the averaged frame
                if (colOffset !== 0 || rowOffset !== 0) {
                    let rowNumber = Math.floor(j / srcImage.columns) + 1;
                    if (colOffset + j >= rowNumber * srcImage.columns ||
                        colOffset + j < 0 ||
                        rowOffset * srcImage.columns + j >= contrastFrame.length ||
                        rowOffset * srcImage.columns + j < 0 ||
                        rowOffset * srcImage.columns + colOffset + j >=
                            contrastFrame.length ||
                        rowOffset * srcImage.columns + colOffset + j < 0) {
                        resultFramesAvg[j] = contrastFrame[j];
                    }
                    else {
                        const shiftedj = j + colOffset + rowOffset * srcImage.columns;
                        resultFramesAvg[j] = contrastFrame[j] - valueAveraged[shiftedj];
                    }
                }
                else {
                    resultFramesAvg[j] = contrastFrame[j] - valueAveraged[j];
                }
            }
        }
        else {
            const rowOffset = -1.0 * maskSubPixelShift[0];
            const colOffset = maskSubPixelShift[1];
            for (let j = 0; j < contrastFrame.length; j++) {
                // Apply sub-pixel shift to the averaged frame
                if (colOffset !== 0 || rowOffset !== 0) {
                    let rowNumber = Math.floor(j / srcImage.columns) + 1;
                    if (colOffset + j >= rowNumber * srcImage.columns ||
                        colOffset + j < 0 ||
                        rowOffset * srcImage.columns + j >= contrastFrame.length ||
                        rowOffset * srcImage.columns + j < 0 ||
                        rowOffset * srcImage.columns + colOffset + j >=
                            contrastFrame.length ||
                        rowOffset * srcImage.columns + colOffset + j < 0) {
                        resultFramesAvg[j] = contrastFrame[j];
                    }
                    else {
                        const shiftedj = j + colOffset + rowOffset * srcImage.columns;
                        resultFramesAvg[j] = contrastFrame[j] - maskFramesAvg[0][shiftedj];
                    }
                }
                else {
                    resultFramesAvg[j] = contrastFrame[j] - maskFramesAvg[0][j];
                }
            }
            let t1 = performance.now();
            console.debug(`Call to DSA avgSubMask took ${t1 - t0} milliseconds.`);
        }
        // @ts-ignore
        srcImage = null;
        // @ts-ignore
        contrastFrame = null;
        // @ts-ignore
        maskFramesAvg = null;
        return resultFramesAvg;
    }
    else {
        // @ts-ignore
        srcImage = null;
        let t1 = performance.now();
        console.debug(`Call to DSA avgSubMask took ${t1 - t0} milliseconds.`);
        console.warn("Frame not included in the Applicable Frame Range");
        return contrastFrame;
    }
}
/**
 * Compute the digital subtraction with tid mask
 * @function tidMask
 * @param {DSA} metadataInfo - DSA metadata
 * @param {string[]} imageIds - imageIds of the serie
 * @param {number} index - index of the frame to apply DSA
 * @returns {number[]} - pixel data of the frame after DSA
 */
function tidMask(metadataInfo, imageIds, index) {
    const t0 = performance.now();
    // get cached images from cornerstone cache
    const cachedImages = cornerstone_core_1.default.imageCache.cachedImages;
    // TID Offset to be subtracted from the respective frame number.
    const TidOffset = metadataInfo.x00286120 || 1;
    // Applicable Frame Range
    const frameRangeTid = metadataInfo.x00286102 || [
        Math.abs(TidOffset) - 1,
        imageIds.length - Math.abs(TidOffset) - 1
    ];
    // Filter frames within the Applicable Frame Range
    let isFrameIncluded = false;
    for (let i = 0; i < frameRangeTid.length; i += 2) {
        isFrameIncluded =
            index >= frameRangeTid[i] && index <= frameRangeTid[i + 1];
    }
    // source image where mask will be applied
    let srcImage = (0, lodash_1.find)(cachedImages, {
        imageId: imageIds[index]
    }).image;
    // get pixel data from source image
    let contrastFrame = srcImage.getPixelData();
    if (isFrameIncluded) {
        let maskImage = (0, lodash_1.find)(cachedImages, {
            imageId: imageIds[index - TidOffset]
        }).image;
        let contrastMaskFrame = maskImage.getPixelData();
        // Apply Time Interval Differencing
        const resultFramesTid = new Array(contrastFrame.length);
        for (let i = 0; i < contrastFrame.length; i++) {
            resultFramesTid[i] = contrastFrame[i] - contrastMaskFrame[i];
        }
        // @ts-ignore
        srcImage = null;
        // @ts-ignore
        contrastFrame = null;
        // @ts-ignore
        maskImage = null;
        // @ts-ignore
        contrastMaskFrame = null;
        let t1 = performance.now();
        console.debug(`Call to DSA tidMask took ${t1 - t0} milliseconds.`);
        return resultFramesTid;
    }
    else {
        // @ts-ignore
        srcImage = null;
        let t1 = performance.now();
        console.debug(`Call to DSA tidMask took ${t1 - t0} milliseconds.`);
        return contrastFrame;
    }
}
/**
 * Compute the digital subtraction with revTid mask
 * @function revTidMask
 * @param {DSA} metadataInfo - DSA metadata
 * @param {string[]} imageIds - imageIds of the serie
 * @param {number} index - index of the frame to apply DSA
 * @returns {number[]} - pixel data of the frame after DSA
 */
function revTidMask(metadataInfo, imageIds, index) {
    const t0 = performance.now();
    // get cached images from cornerstone cache
    const cachedImages = cornerstone_core_1.default.imageCache.cachedImages;
    // TID Offset to be subtracted from the first frame within the Applicable Frame Range,
    // TID Offset +2 from the second frame within the Applicable Frame Range,
    // TID Offset (0028,6120)+4 from the third frame and so on.
    const RevTidOffset = metadataInfo.x00286120 || 1;
    //Applicable Frame Range, shall be present in this case
    const frameRangeRevTid = metadataInfo.x00286102 || [
        Math.abs(RevTidOffset) - 1,
        imageIds.length - Math.abs(RevTidOffset) - 1
    ];
    // Filter frames within the Applicable Frame Range
    let isFrameIncluded = false;
    for (let i = 0; i < frameRangeRevTid.length; i += 2) {
        isFrameIncluded =
            index >= frameRangeRevTid[i] && index <= frameRangeRevTid[i + 1];
    }
    // source image where mask will be applied
    let srcImage = (0, lodash_1.find)(cachedImages, {
        imageId: imageIds[index]
    }).image;
    // get pixel data from source image
    let contrastFrame = srcImage.getPixelData();
    if (isFrameIncluded) {
        let maskimage = (0, lodash_1.find)(cachedImages, {
            imageId: imageIds[frameRangeRevTid[0] - RevTidOffset - index - frameRangeRevTid[0]]
        }).image;
        let contrastMaskFrame = maskimage.getPixelData();
        // Apply Time Interval Differencing
        const resultFramesRevTid = new Array(contrastFrame.length);
        for (let i = 0; i < contrastFrame.length; i++) {
            resultFramesRevTid[i] = contrastFrame[i] - contrastMaskFrame[i];
        }
        // @ts-ignore
        srcImage = null;
        // @ts-ignore
        contrastFrame = null;
        // @ts-ignore
        maskImage = null;
        // @ts-ignore
        contrastMaskFrame = null;
        let t1 = performance.now();
        console.debug(`Call to DSA revTidMask took ${t1 - t0} milliseconds.`);
        return resultFramesRevTid;
    }
    else {
        // @ts-ignore
        srcImage = null;
        let t1 = performance.now();
        console.debug(`Call to DSA revTidMask took ${t1 - t0} milliseconds.`);
        return contrastFrame;
    }
}


/***/ }),

/***/ 2775:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
//external imports
const plotly_js_dist_min_1 = __importDefault(__webpack_require__(2479));
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
const cornerstone_tools_1 = __importDefault(__webpack_require__(4030));
const getToolState = cornerstone_tools_1.default.getToolState;
const toolColors = cornerstone_tools_1.default.toolColors;
const draw = cornerstone_tools_1.default.importInternal("drawing/draw");
const drawLine = cornerstone_tools_1.default.importInternal("drawing/drawLine");
const setShadow = cornerstone_tools_1.default.importInternal("drawing/setShadow");
const getNewContext = cornerstone_tools_1.default.importInternal("drawing/getNewContext");
const drawHandles = cornerstone_tools_1.default.importInternal("drawing/drawHandles");
const { lengthCursor } = cornerstone_tools_1.default.importInternal("tools/cursors");
const throttle = cornerstone_tools_1.default.importInternal("util/throttle");
const getModule = cornerstone_tools_1.default.getModule;
const getPixelSpacing = cornerstone_tools_1.default.importInternal("util/getPixelSpacing");
const lineSegDistance = cornerstone_tools_1.default.importInternal("util/lineSegDistance");
const BaseAnnotationTool = cornerstone_tools_1.default.importInternal("base/BaseAnnotationTool");
const default_1 = __webpack_require__(6694);
// import cornerstoneTools from "cornerstone-tools";
class LengthPlotTool extends BaseAnnotationTool {
    constructor(props = {}) {
        const defaultProps = {
            name: "LengthPlot",
            supportedInteractionTypes: ["Mouse"],
            svgCursor: lengthCursor,
            configuration: {
                drawHandles: true,
                drawHandlesOnHover: false,
                hideHandlesIfMoving: false,
                renderDashed: false,
                digits: 2,
                offset: 15
            }
        };
        super(props, defaultProps);
        this.name = "LengthPlot";
        this.plotlydata = [];
        this.measuring = false;
        this.configuration = {
            drawHandles: true,
            drawHandlesOnHover: false,
            hideHandlesIfMoving: false,
            renderDashed: false,
            digits: 2,
            offset: 15
        };
        this.eventData;
        this.datahandles;
        this.abovehandles;
        this.belowhandles;
        this.plotlydata = [];
        this.measuring = false;
        this.handleMouseUp = this.handleMouseUp.bind(this);
        this.throttledUpdateCachedStats = throttle(this.updateCachedStats, 110);
    }
    getRandomColor() {
        const letters = "0123456789ABCDEF";
        let color = "#";
        for (let i = 0; i < 6; i++) {
            color += letters[Math.floor(Math.random() * 16)];
        }
        return color;
    }
    handleMouseUp() {
        this.measuring = false;
        const eventData = this.eventData;
        const handleData = (handles) => {
            const points = this.getPointsAlongLine(handles.start, handles.end, getPixelSpacing(eventData.image).colPixelSpacing);
            const pixelValues = this.getPixelValuesAlongLine(handles.start, points, getPixelSpacing(eventData.image).colPixelSpacing, eventData);
            let color = "green";
            return { points, pixelValues, color };
        };
        const aboveResults = handleData(this.abovehandles);
        aboveResults.color = "red";
        const belowResults = handleData(this.belowhandles);
        belowResults.color = "blue";
        const data = [handleData(this.datahandles), aboveResults, belowResults];
        this.createPlot(...data);
    }
    createNewMeasurement(eventData) {
        this.eventData = eventData;
        clearToolData(eventData.element, this.name);
        eventData.element.addEventListener("mouseup", () => this.handleMouseUp());
        this.measuring = true;
        const goodEventData = eventData && eventData.currentPoints && eventData.currentPoints.image;
        if (!goodEventData) {
            console.error(`required eventData not supplied to tool ${this.name}'s createNewMeasurement`);
            return;
        }
        let color = "green";
        const { x, y } = eventData.currentPoints.image;
        return {
            visible: true,
            active: true,
            color: color,
            invalidated: true,
            handles: {
                start: {
                    x,
                    y,
                    highlight: true,
                    active: false
                },
                end: {
                    x,
                    y,
                    highlight: true,
                    active: true
                },
                textBox: {
                    active: false,
                    hasMoved: false,
                    movesIndependently: false,
                    drawnIndependently: true,
                    allowedOutsideImage: true,
                    hasBoundingBox: true
                }
            }
        };
    }
    pointNearTool(element, data, coords) {
        const hasStartAndEndHandles = data && data.handles && data.handles.start && data.handles.end;
        const validParameters = hasStartAndEndHandles;
        if (!validParameters) {
            console.warn(`invalid parameters supplied to tool ${this.name}'s pointNearTool`);
            return false;
        }
        if (data.visible === false) {
            return false;
        }
        return (lineSegDistance(element, data.handles.start, data.handles.end, coords) <
            25);
    }
    updateCachedStats(image, element, data) {
        const { rowPixelSpacing, colPixelSpacing } = getPixelSpacing(image);
        const dx = (data.handles.end.x - data.handles.start.x) * (colPixelSpacing || 1);
        const dy = (data.handles.end.y - data.handles.start.y) * (rowPixelSpacing || 1);
        const length = Math.sqrt(dx * dx + dy * dy);
        data.length = length;
        data.invalidated = false;
    }
    renderToolData(evt) {
        const eventData = evt.detail;
        const { element } = eventData;
        const { handleRadius, drawHandlesOnHover, hideHandlesIfMoving, renderDashed } = this.configuration;
        const toolData = getToolState(evt.currentTarget, this.name);
        if (!toolData) {
            return;
        }
        const context = getNewContext(eventData.canvasContext.canvas);
        const lineDash = getModule("globalConfiguration").configuration
            .lineDash;
        let start;
        let end;
        for (let i = 0; i < toolData.data.length; i++) {
            const data = toolData.data[i];
            if (data.visible === false) {
                continue;
            }
            draw(context, (context) => {
                setShadow(context, this.configuration);
                const color = toolColors.getColorIfActive(data);
                const lineOptions = { color };
                if (renderDashed) {
                    lineOptions.lineDash = lineDash;
                }
                start = data.handles.start;
                end = data.handles.end;
                data.handles.end.y = data.handles.start.y;
                drawLine(context, element, data.handles.start, data.handles.end, lineOptions);
                const offset = default_1.DEFAULT_TOOLS["LengthPlot"].offset === this.configuration.offset ||
                    default_1.DEFAULT_TOOLS["LengthPlot"].offset === undefined
                    ? this.configuration.offset
                    : default_1.DEFAULT_TOOLS["LengthPlot"].offset; //offset customisable
                //const offset = this.configuration.offset;
                const aboveHandles = {
                    start: { x: start.x, y: start.y - offset },
                    end: { x: end.x, y: end.y - offset }
                };
                const belowHandles = {
                    start: { x: start.x, y: start.y + offset },
                    end: { x: end.x, y: end.y + offset }
                };
                const abovelineOptions = { color: "red" };
                const belowlineOptions = { color: "blue" };
                drawLine(context, element, aboveHandles.start, aboveHandles.end, abovelineOptions);
                drawLine(context, element, belowHandles.start, belowHandles.end, belowlineOptions);
                const handleOptions = {
                    color,
                    handleRadius,
                    drawHandlesIfActive: drawHandlesOnHover,
                    hideHandlesIfMoving
                };
                const abovehandleOptions = {
                    color: abovelineOptions.color,
                    handleRadius,
                    drawHandlesIfActive: drawHandlesOnHover,
                    hideHandlesIfMoving
                };
                const belowhandleOptions = {
                    color: belowlineOptions.color,
                    handleRadius,
                    drawHandlesIfActive: drawHandlesOnHover,
                    hideHandlesIfMoving
                };
                if (this.configuration.drawHandles) {
                    drawHandles(context, eventData, data.handles, handleOptions);
                    this.datahandles = data.handles;
                    this.abovehandles = aboveHandles;
                    this.belowhandles = belowHandles;
                    drawHandles(context, eventData, aboveHandles, abovehandleOptions);
                    drawHandles(context, eventData, belowHandles, belowhandleOptions);
                }
            });
        }
    }
    getPointsAlongLine(startHandle, endHandle, colPixelSpacing) {
        let points = [];
        const addPoints = (start, end, step) => {
            const startX = Math.floor(start.x) + 1;
            const numPoints = Math.floor(end.x) - startX;
            points = new Array(numPoints + 1);
            for (let i = 0; i <= numPoints; i++) {
                points[i] = (startX + i) * step;
            }
        };
        if (endHandle.x > startHandle.x) {
            addPoints(startHandle, endHandle, colPixelSpacing);
        }
        if (endHandle.x < startHandle.x) {
            addPoints(endHandle, startHandle, colPixelSpacing);
        }
        return points;
    }
    getPixelValuesAlongLine(startHandle, points, colPixelSpacing, eventData) {
        const pixelValues = new Array(points.length);
        const yPoint = Math.floor(startHandle.y);
        const addPixelValues = (xPoints, startIndex) => {
            const pixelValuesBatch = cornerstone_core_1.default.getStoredPixels(eventData.element, xPoints[0], yPoint, xPoints.length, 1);
            for (let i = 0; i < pixelValuesBatch.length; i++) {
                pixelValues[startIndex + i] = pixelValuesBatch[i];
            }
        };
        for (let i = 0; i < points.length; i++) {
            const xPoint = Math.floor(points[i] / colPixelSpacing);
            addPixelValues([xPoint], i);
        }
        return pixelValues;
    }
    createPlot(...dataSets) {
        const traces = dataSets.map(({ points, pixelValues, color }) => ({
            x: points,
            y: pixelValues,
            type: "lines",
            line: {
                color
            }
        }));
        this.plotlydata = traces;
        const allXValues = dataSets.flatMap(dataSet => dataSet.points);
        const allYValues = dataSets.flatMap(dataSet => dataSet.pixelValues);
        const layout = {
            xaxis: {
                range: [Math.min(...allXValues), Math.max(...allXValues)],
                title: "position (mm)"
            },
            yaxis: {
                range: [Math.min(...allYValues), Math.max(...allYValues)],
                title: "GreyScaleValue (HU)"
            },
            title: "GreyScaleValues vs position",
            responsive: true
        };
        const myPlotDiv = document.getElementById("myPlot");
        plotly_js_dist_min_1.default.react(myPlotDiv, traces, layout);
    }
    clearPlotlyData() {
        const myPlotDiv = document.getElementById("myPlot");
        plotly_js_dist_min_1.default.purge(myPlotDiv);
        this.plotlydata = [];
    }
}
exports["default"] = LengthPlotTool;
function clearToolData(element, toolName) {
    const toolData = getToolState(element, toolName);
    if (toolData && toolData.data && toolData.data.length > 0) {
        toolData.data.forEach((data) => {
            data.visible = false;
        });
    }
}
//to set custom offset do this: DEFAULT_TOOLS["LengthPlot"].offset=parseInt(document.getElementById("offset").value,10)
//create plot in viewport in layeout doable like this:
//const currentDiv = eventData.element //viewport element
//const newDiv = document.createElement("div");
//newDiv.id=currentDiv.id+"-Plotly"
//newDiv.style="width: 100%; max-width: 600px; height: 500px;"
//currentDiv.appendChild(newDiv);
//offsetInput=document.createElement("input");
// Set the attributes for the input element
//offsetInput.type = "number";
//offsetInput.classList.add("manualInput");
//offsetInput.id = currentDiv.id+"-offset";
//offsetInput.placeholder = "offset";
//newDiv.appendChild(offsetInput);


/***/ }),

/***/ 893:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
//external imports
const plotly_js_dist_min_1 = __importDefault(__webpack_require__(2479));
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
const cornerstone_tools_1 = __importDefault(__webpack_require__(4030));
const getToolState = cornerstone_tools_1.default.getToolState; //check
const toolColors = cornerstone_tools_1.default.toolColors;
const draw = cornerstone_tools_1.default.importInternal("drawing/draw");
const drawLine = cornerstone_tools_1.default.importInternal("drawing/drawLine");
const setShadow = cornerstone_tools_1.default.importInternal("drawing/setShadow");
const getNewContext = cornerstone_tools_1.default.importInternal("drawing/getNewContext");
const drawHandles = cornerstone_tools_1.default.importInternal("drawing/drawHandles");
const { lengthCursor } = cornerstone_tools_1.default.importInternal("tools/cursors");
const throttle = cornerstone_tools_1.default.importInternal("util/throttle");
const getModule = cornerstone_tools_1.default.getModule;
const getPixelSpacing = cornerstone_tools_1.default.importInternal("util/getPixelSpacing");
const lineSegDistance = cornerstone_tools_1.default.importInternal("util/lineSegDistance");
const BaseAnnotationTool = cornerstone_tools_1.default.importInternal("base/BaseAnnotationTool");
/**
 * @public
 * @class LengthTool
 * @memberof Tools.Annotation
 * @classdesc Tool for measuring distances.
 * @extends Tools.Base.BaseAnnotationTool
 */
class ManualLengthPlotTool extends BaseAnnotationTool {
    constructor(props = {}) {
        const defaultProps = {
            name: "HorizontalTool",
            supportedInteractionTypes: ["Mouse"],
            svgCursor: lengthCursor,
            configuration: {
                drawHandles: true,
                drawHandlesOnHover: false,
                hideHandlesIfMoving: false,
                renderDashed: false,
                digits: 2
            }
        };
        super(props, defaultProps);
        this.name = "ManualLengthPlot";
        this.plotlydata = [];
        this.measuring = false;
        this.lineNumber = null;
        this.greenlineY = null;
        this.newMeasurement = false;
        this.configuration = {
            drawHandles: true,
            drawHandlesOnHover: false,
            hideHandlesIfMoving: false,
            renderDashed: false,
            digits: 2
        };
        this.handleMouseUp = () => {
            const eventData = this.eventData;
            const { element } = eventData;
            //const toolData: ToolData = getToolState(element, this.name);
            const points = this.getPointsAlongLine(this.datahandles.start, this.datahandles.end, getPixelSpacing(eventData.image).colPixelSpacing);
            const pixelValues = this.getPixelValuesAlongLine(this.datahandles.start, points, getPixelSpacing(eventData.image).colPixelSpacing, eventData);
            // Plot the graph using the extracted points and pixel values
            this.createPlot(points, pixelValues);
        };
        this.handleMouseUp = this.handleMouseUp.bind(this);
        // Add event listeners to start and stop measurements
        this.throttledUpdateCachedStats = throttle(this.updateCachedStats, 110);
    }
    getColor(y) {
        let color = "red";
        if (this.lineNumber === null || this.lineNumber === 3) {
            color = "green";
            this.greenlineY = y;
            this.lineNumber = 1;
        }
        else if (y > this.greenlineY) {
            color = this.color === "blue" ? "red" : "blue";
            this.lineNumber = this.lineNumber + 1;
        }
        else if (y < this.greenlineY) {
            color = this.color === "red" ? "blue" : "red";
            this.lineNumber = this.lineNumber + 1;
        }
        return color;
    }
    clearCanvasAndPlot(eventData) {
        // Clear the canvas
        const { element } = eventData;
        const toolData = getToolState(element, this.name);
        if (toolData && toolData.data && toolData.data.length > 0) {
            toolData.data.forEach((data) => {
                data.visible = false;
            });
        }
        // Clear the Plotly plot
        const myPlotDiv = document.getElementById("myPlot");
        plotly_js_dist_min_1.default.purge(myPlotDiv);
        this.plotlydata = [];
    }
    createNewMeasurement(eventData) {
        this.newMeasurement = true;
        if (this.lineNumber === 3) {
            this.clearCanvasAndPlot(eventData);
        }
        eventData.element.addEventListener("mouseup", () => this.handleMouseUp());
        this.eventData = eventData;
        const goodEventData = eventData && eventData.currentPoints && eventData.currentPoints.image;
        if (!goodEventData) {
            console.error(`required eventData not supplied to tool ${this.name}'s createNewMeasurement`);
            return;
        }
        const { x, y } = eventData.currentPoints.image;
        let color = this.getColor(y);
        this.color = color;
        return {
            visible: true,
            active: true,
            color: color,
            invalidated: true,
            handles: {
                start: {
                    x,
                    y,
                    highlight: true,
                    active: false
                },
                end: {
                    x,
                    y,
                    highlight: true,
                    active: true
                },
                textBox: {
                    active: false,
                    hasMoved: false,
                    movesIndependently: false,
                    drawnIndependently: true,
                    allowedOutsideImage: true,
                    hasBoundingBox: true
                }
            }
        };
    }
    /**
     *
     *
     * @param {*} element
     * @param {*} data
     * @param {*} coords
     * @returns {Boolean}
     */
    pointNearTool(element, data, coords) {
        const hasStartAndEndHandles = data && data.handles && data.handles.start && data.handles.end;
        const validParameters = hasStartAndEndHandles;
        if (!validParameters) {
            console.warn(`invalid parameters supplied to tool ${this.name}'s pointNearTool`);
            return false;
        }
        if (data.visible === false) {
            return false;
        }
        return (lineSegDistance(element, data.handles.start, data.handles.end, coords) <
            25);
    }
    updateCachedStats(image, element, data) {
        const { rowPixelSpacing, colPixelSpacing } = getPixelSpacing(image);
        // Set rowPixelSpacing and columnPixelSpacing to 1 if they are undefined (or zero)
        const dx = (data.handles.end.x - data.handles.start.x) * (colPixelSpacing || 1);
        const dy = (data.handles.end.y - data.handles.start.y) * (rowPixelSpacing || 1);
        // Calculate the length, and create the text variable with the millimeters or pixels suffix
        const length = Math.sqrt(dx * dx + dy * dy);
        // Store the length inside the tool for outside access
        data.length = length;
        data.invalidated = false;
    }
    renderToolData(evt) {
        const eventData = evt.detail;
        const { image, element } = eventData;
        const { handleRadius, drawHandlesOnHover, hideHandlesIfMoving, renderDashed } = this.configuration;
        const toolData = getToolState(evt.currentTarget, this.name);
        if (!toolData) {
            return;
        }
        // We have tool data for this element - iterate over each one and draw it
        const context = getNewContext(eventData.canvasContext.canvas);
        const lineDash = getModule("globalConfiguration").configuration
            .lineDash;
        let start;
        let end;
        for (let i = 0; i < toolData.data.length; i++) {
            const data = toolData.data[i];
            if (data.visible === false) {
                continue;
            }
            draw(context, (context) => {
                // Configurable shadow
                setShadow(context, this.configuration);
                const color = toolColors.getColorIfActive(data);
                if (data.active) {
                    this.color = color;
                    this.datahandles = data.handles;
                }
                const lineOptions = { color };
                if (renderDashed) {
                    lineOptions.lineDash = lineDash;
                }
                start = data.handles.start;
                end = data.handles.end;
                data.handles.end.y = data.handles.start.y;
                // Draw the measurement line
                drawLine(context, element, data.handles.start, data.handles.end, lineOptions);
                // Draw the handles
                const handleOptions = {
                    color,
                    handleRadius,
                    drawHandlesIfActive: drawHandlesOnHover,
                    hideHandlesIfMoving
                };
                if (this.configuration.drawHandles) {
                    drawHandles(context, eventData, data.handles, handleOptions);
                }
                this.currentuuid = data.uuid;
                // Update textbox stats
                if (data.invalidated === true) {
                    if (data.length) {
                        this.throttledUpdateCachedStats(image, element, data);
                    }
                    else {
                        this.updateCachedStats(image, element, data);
                    }
                }
            });
        }
    }
    getPointsAlongLine(startHandle, endHandle, colPixelSpacing) {
        const points = [];
        const numPoints = Math.floor(endHandle.x) - Math.floor(startHandle.x);
        let x = Math.floor(startHandle.x) + 1;
        points.push(x * colPixelSpacing);
        for (let i = 0; i < numPoints; i++) {
            x = x + 1;
            points.push(x * colPixelSpacing); //from pixels to mm
        }
        return points;
    }
    getPixelValuesAlongLine(startHandle, points, colPixelSpacing, eventData) {
        const pixelValues = [];
        const yPoint = Math.floor(startHandle.y); // Adjust this if needed
        for (let i = 0; i < points.length; i++) {
            const xPoint = Math.floor(points[i] / colPixelSpacing);
            const pixelValue = cornerstone_core_1.default.getStoredPixels(eventData.element, xPoint, yPoint, 1, 1)[0];
            // Use cornerstone to get pixel value at the specified location
            //const pixelValue = cornerstone.getPixelValue(image, xPoint, yPoint);
            pixelValues.push(pixelValue);
        }
        return pixelValues;
    }
    createPlot(points, pixelValues) {
        // Create a new trace for each measurement
        const trace = {
            x: points,
            y: pixelValues,
            type: "lines",
            line: {
                color: this.color
            }
        };
        // Add the trace to the existing data array
        if (this.newMeasurement) {
            this.plotlydata.push(trace);
        }
        else {
            const indexOfExistentData = this.plotlydata.findIndex(obj => obj.line.color === this.color);
            this.plotlydata[indexOfExistentData] = trace;
        }
        const data = [...this.plotlydata];
        // Combine all traces into a single data array
        // Adjust the axis range based on all data
        const allXValues = data.flatMap(trace => trace.x);
        const allYValues = data.flatMap(trace => trace.y);
        const layout = {
            xaxis: {
                range: [Math.min(...allXValues), Math.max(...allXValues)],
                title: "position (mm)"
            },
            yaxis: {
                range: [Math.min(...allYValues), Math.max(...allYValues)],
                title: "GreyScaleValue (HU)"
            },
            title: "GreyScaleValues vs position",
            responsive: true
        };
        // Display using Plotly
        const myPlotDiv = document.getElementById("myPlot");
        plotly_js_dist_min_1.default.react(myPlotDiv, data, layout);
        this.newMeasurement = false;
    }
}
exports["default"] = ManualLengthPlotTool;


/***/ }),

/***/ 4585:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module tools/custom/customMouseWheelScrollTool
 *  @desc This file provides functionalities for
 *        custom DICOM Loader
 */
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
const cornerstone_tools_1 = __importDefault(__webpack_require__(4030));
const cornerstone_wado_image_loader_1 = __importDefault(__webpack_require__(2424));
const BaseTool = cornerstone_tools_1.default.importInternal("base/BaseTool");
const getToolState = cornerstone_tools_1.default.getToolState;
// internal libraries
const imageStore_1 = __importStar(__webpack_require__(5278));
const default_1 = __webpack_require__(6694);
const customMouseWheelUtils_1 = __importDefault(__webpack_require__(7683));
const commonLoader_1 = __webpack_require__(326);
const commonLoader_2 = __webpack_require__(326);
/*
 * @class CustomMouseWheelScrollTool
 * @extends BaseTool
 * @memberof Tools
 *
 * @classdesc Tool for scrolling through images using the mouse wheel
 * @private
 */
class CustomMouseWheelScrollTool extends BaseTool {
    /*
     * @constructs CustomMouseWheelScrollTool
     * @param {object} props - Any properties passed to the component
     */
    constructor(props = {}) {
        const defaultProps = {
            name: "CustomMouseWheelScroll",
            supportedInteractionTypes: ["MouseWheel"], //"Key"
            configuration: {
                loop: false,
                allowSkipping: true,
                invert: false,
                fixedFrame: 1,
                fixedSlice: 0,
                currentMode: "stack", // 'stack' or 'slice'
                framesNumber: 1
            }
        };
        super(props, defaultProps);
        this.nextIndex = null;
        this.currentMode = "stack";
        this.framesNumber = this.configuration.framesNumber;
        this.slicesnumber = 0;
        this.is4D = false;
        this.isMultiframe = false;
        this.animation = false;
        this.animationId = null;
    }
    /*
     * @verify4D
     * @desc Verify if the image is 4D or not
     */
    verify4D() {
        const viewport = imageStore_1.default.get(["viewports", this.element.id]);
        // check is4D and multiframe
        this.is4D = viewport.isTimeserie;
        this.isMultiframe = viewport.isMultiframe;
        // extract frames number
        if (this.is4D === true) {
            this.configuration.framesNumber = viewport.numberOfTemporalPositions;
        }
        else if (this.isMultiframe === true) {
            this.configuration.framesNumber = viewport.numberOfFrames;
            this.currentMode = "slice";
            this.configuration.currentMode = "slice";
        }
        else {
            this.configuration.framesNumber = 1;
        }
        this.framesNumber = this.configuration.framesNumber;
    }
    handleToggle(newcurrentMode) {
        // Toggle mode between 'stack' and 'slice' on Tab key press or other events
        this.verify4D();
        if (this.is4D === false) {
            this.currentMode = this.isMultiframe ? "slice" : "stack";
            this.configuration.currentMode = this.isMultiframe ? "slice" : "stack";
        }
        else if (this.is4D === true) {
            if (this.currentMode != newcurrentMode) {
                this.toggleScrollMode(this.element);
            }
        }
    }
    /*
     * @method toggleScrollMode
     * @param {element} HTMLElement
     * @desc Handle the toggle between 'stack' and 'slice' modes
     * we enter in this function only if this.is4d===true so this.framesNumber!=0
     */
    toggleScrollMode(element) {
        if (!element) {
            console.error("Element is undefined");
            return;
        }
        const toolData = getToolState(element, "stack");
        if (!toolData || !toolData.data || !toolData.data.length) {
            console.error("No Tool Data");
            return;
        }
        const stackData = toolData.data[0];
        const currentIndex = stackData.currentImageIdIndex;
        this.currentIndex = currentIndex;
        switch (this.currentMode) {
            case "stack":
                // Switching from 'stack' to 'slice'
                this.configuration.fixedSlice = Math.floor((currentIndex + 1) / this.framesNumber); // slice = 0,1,2,3 and so on
                this.configuration.currentMode = "slice";
                this.currentMode = "slice";
                break;
            case "slice":
                // Switching from 'slice' to 'stack'
                this.configuration.fixedFrame =
                    currentIndex + 1 - this.configuration.fixedSlice * this.framesNumber; // frame is related to the current slice
                this.configuration.currentMode = "stack";
                this.currentMode = "stack";
                break;
            default:
                break;
        }
    }
    mouseWheelCallback(evt) {
        const { direction: invert, element } = evt.detail;
        this.handleToggle(default_1.DEFAULT_TOOLS["CustomMouseWheelScroll"].currentMode);
        // configure scroll direction
        const direction = invert *
            (this.configuration.currentMode === "stack"
                ? this.configuration.framesNumber
                : 1);
        const toolData = getToolState(element, "stack");
        if (!toolData || !toolData.data || !toolData.data.length) {
            return;
        }
        const stackData = toolData.data[0];
        const isDSAEnabled = imageStore_1.default.get([
            "viewports",
            element.id,
            "isDSAEnabled"
        ]);
        let imageIds;
        if (isDSAEnabled) {
            const originalImageIdSample = toolData.data[0].imageIds[0];
            const parsedImageId = cornerstone_wado_image_loader_1.default.wadouri.parseImageId(originalImageIdSample);
            const rootImageId = parsedImageId.scheme + ":" + parsedImageId.url;
            const imageTracker = (0, commonLoader_1.getLarvitarImageTracker)();
            const seriesId = imageTracker[rootImageId];
            const manager = (0, commonLoader_2.getLarvitarManager)();
            const multiFrameSerie = manager[seriesId];
            imageIds = multiFrameSerie.dsa.imageIds;
        }
        else {
            imageIds = stackData.imageIds;
        }
        if (this.configuration.currentMode === "stack") {
            // Handle 'stack' mode
            // Calculate validIndex for 'stack' mode (no looping) between 0 and (N-1)*framesnumber where N=numberofslices=numberofimageids/numberofframes
            let lastIndex = this.nextIndex != null
                ? this.nextIndex
                : imageStore_1.default.get(["viewports", element.id, "sliceId"]);
            let nextIndex = lastIndex + direction;
            if (lastIndex === -1) {
                nextIndex = 0 + direction;
                lastIndex = 0;
            }
            this.slicesnumber = Math.ceil(imageIds.length / this.framesNumber) - 1;
            // Ensure nextIndex is between 0 and upperBound
            const validIndex = nextIndex >= 0 && nextIndex < imageIds.length && this.slicesnumber > 0
                ? nextIndex
                : lastIndex;
            this.nextIndex = validIndex;
            // Scroll to the calculated index
            (0, customMouseWheelUtils_1.default)(element, validIndex);
        }
        else {
            // Handle 'slice' mode
            let lastIndex = this.isMultiframe === true || this.is4D === true
                ? this.nextIndex != null
                    ? this.nextIndex
                    : imageStore_1.default.get(["viewports", element.id, "sliceId"])
                : stackData.currentImageIdIndex;
            this.slicesnumber = Math.ceil(imageIds.length / this.framesNumber) - 1;
            const startFrame = this.configuration.fixedSlice * this.configuration.framesNumber;
            const endFrame = (this.configuration.fixedSlice + 1) * this.configuration.framesNumber -
                1;
            // Calculate the potential new index without considering looping
            let nextIndex = lastIndex + direction;
            // Check if the new index is within the valid range for the current slice
            if (nextIndex < startFrame ||
                nextIndex > endFrame ||
                nextIndex >= imageIds.length) {
                nextIndex = startFrame;
            }
            this.nextIndex = nextIndex;
            // Scroll to the calculated index
            (0, customMouseWheelUtils_1.default)(element, nextIndex);
            if (this.is4D) {
                const viewport = imageStore_1.default.get(["viewports", element.id]);
                const timeId = viewport.timeIds[nextIndex];
                const timestamp = viewport.timestamps[nextIndex];
                (0, imageStore_1.set)(["timeId", element.id, timeId]);
                (0, imageStore_1.set)(["timestamp", element.id, timestamp]);
            }
        }
    }
    /*
     * @method scrollWithoutSkipping
     * @param {stackData} stackData
     * @param {pendingEvent} pendingEvent
     * @param {element} element
     * @desc Handles the event of the mouse wheel
     */
    scrollWithoutSkipping(stackData, pendingEvent, element) {
        const newImageHandler = (event) => {
            const index = stackData.imageIds.indexOf(event.detail.image.imageId);
            if (index === pendingEvent.index) {
                stackData.pending = [];
                element.removeEventListener("cornerstoneimagerendered", newImageHandler);
            }
        };
        element.addEventListener("cornerstoneimagerendered", newImageHandler);
        (0, customMouseWheelUtils_1.default)(element, pendingEvent.index);
    }
}
exports["default"] = CustomMouseWheelScrollTool;


/***/ }),

/***/ 8737:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/**
 * This is a custom version of setLabelMap3D from cs tools source code
 * This let us implement a non-blocking version of the for loop that loads 3d labelmaps on a volume
 * @ronzim
 */
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.setLabelmap3DForElement = exports.setLabelmap3DByFirstImageId = void 0;
const ARRAY_TYPES = {
    UINT_16_ARRAY: 0,
    FLOAT_32_ARRAY: 1
};
const { UINT_16_ARRAY, FLOAT_32_ARRAY } = ARRAY_TYPES;
const cornerstone_tools_1 = __importDefault(__webpack_require__(4030));
const { triggerLabelmapModifiedEvent } = cornerstone_tools_1.default.importInternal("util/segmentationUtils");
const getModule = cornerstone_tools_1.default.getModule;
const getToolState = cornerstone_tools_1.default.getToolState;
const storeGetters = cornerstone_tools_1.default.store.getters;
const state = getModule("segmentation").state;
/**
 * These function are reported since they are not exposed by cs tools
 *
 */
// from getSegmentsOnPixelData.js
function getSegmentsOnPixelData(pixelData) {
    return [...new Set(pixelData)];
}
// from getElement.js
function getElement(elementOrEnabledElementUID) {
    if (elementOrEnabledElementUID instanceof HTMLElement) {
        return elementOrEnabledElementUID;
    }
    return storeGetters.enabledElementByUID(elementOrEnabledElementUID);
}
/**
 * Takes a 16-bit encoded `ArrayBuffer` and stores it as a `Labelmap3D` for the
 * `BrushStackState` associated with the element.
 *
 * @param  {HTMLElement|string} elementOrEnabledElementUID The cornerstone
 *                                                  enabled element or its UUID.
 * @param  {ArrayBuffer} buffer
 * @param  {number} labelmapIndex The index to store the labelmap under.
 * @param  {Object[]} metadata = [] Any metadata about the segments.
 * @param  {number[][]} [segmentsOnLabelmapArray] An array of array of segments on each imageIdIndex.
 *                       If not present, is calculated.
 * @param  {colorLUTIndex} [colorLUTIndex = 0] The index of the colorLUT to use to render the segmentation.
 * @returns {null}
 */
function setLabelmap3DForElement(elementOrEnabledElementUID, buffer, labelmapIndex, metadata = [], segmentsOnLabelmapArray, colorLUTIndex = 0) {
    return __awaiter(this, void 0, void 0, function* () {
        const element = getElement(elementOrEnabledElementUID);
        if (!element) {
            return;
        }
        const stackState = getToolState(element, "stack");
        const numberOfFrames = stackState.data[0].imageIds.length;
        const firstImageId = stackState.data[0].imageIds[0];
        const res = yield setLabelmap3DByFirstImageId(firstImageId, buffer, labelmapIndex, metadata, numberOfFrames, segmentsOnLabelmapArray, colorLUTIndex);
        triggerLabelmapModifiedEvent(element, labelmapIndex);
        return res;
    });
}
exports.setLabelmap3DForElement = setLabelmap3DForElement;
/**
 * Takes an 16-bit encoded `ArrayBuffer` and stores it as a `Labelmap3D` for
 * the `BrushStackState` associated with the firstImageId.
 *
 * @param  {HTMLElement|string} firstImageId  The firstImageId of the series to
 *                                            store the segmentation on.
 * @param  {ArrayBuffer} buffer
 * @param  {number} labelmapIndex The index to store the labelmap under.
 * @param  {Object[]} metadata = [] Any metadata about the segments.
 * @param  {number} numberOfFrames The number of frames, required to set up the
 *                                 relevant labelmap2D views.
 * @param  {number[][]} [segmentsOnLabelmapArray] An array of array of segments on each imageIdIndex.
 *                       If not present, is calculated.
 * @param  {colorLUTIndex} [colorLUTIndex = 0] The index of the colorLUT to use to render the segmentation.
 * @returns {null}
 */
function setLabelmap3DByFirstImageId(firstImageId, buffer, labelmapIndex, metadata = [], numberOfFrames, segmentsOnLabelmapArray, colorLUTIndex = 0) {
    const { configuration } = getModule("segmentation");
    let brushStackState = state.series[firstImageId];
    if (!brushStackState) {
        state.series[firstImageId] = {
            activeLabelmapIndex: labelmapIndex,
            labelmaps3D: []
        };
        brushStackState = state.series[firstImageId];
    }
    brushStackState.labelmaps3D[labelmapIndex] = {
        buffer,
        labelmaps2D: [],
        metadata,
        activeSegmentIndex: 1,
        colorLUTIndex,
        segmentsHidden: [],
        undo: [],
        redo: []
    };
    const labelmaps2D = brushStackState.labelmaps3D[labelmapIndex].labelmaps2D;
    const slicelengthInBytes = buffer.byteLength / numberOfFrames;
    /* non-blocking implementation by @ronzim */
    return new Promise(resolve => {
        function setSingleSlice(i, numberOfFrames) {
            var pixelData = void 0;
            switch (configuration.arrayType) {
                case UINT_16_ARRAY:
                    pixelData = new Uint16Array(buffer, slicelengthInBytes * i, // 2 bytes/voxel
                    slicelengthInBytes / 2);
                    break;
                case FLOAT_32_ARRAY:
                    pixelData = new Float32Array(buffer, slicelengthInBytes * i, slicelengthInBytes / 4);
                    break;
                default:
                    throw new Error("Unsupported Array Type ".concat(configuration.arrayType));
            }
            var segmentsOnLabelmap = segmentsOnLabelmapArray
                ? segmentsOnLabelmapArray[i]
                : getSegmentsOnPixelData(pixelData);
            if (segmentsOnLabelmap &&
                segmentsOnLabelmap.some(function (segment) {
                    return segment;
                })) {
                labelmaps2D[i] = {
                    pixelData: pixelData,
                    segmentsOnLabelmap: segmentsOnLabelmap
                };
            }
            ++i;
            if (i < numberOfFrames) {
                setTimeout(() => {
                    setSingleSlice(i, numberOfFrames);
                }, 0);
            }
            else {
                resolve("OK");
            }
        }
        setSingleSlice(0, numberOfFrames);
    });
    /* original implementation
  
    for (let i = 0; i < numberOfFrames; i++) {
      let pixelData;
  
      switch (configuration.arrayType) {
        case UINT_16_ARRAY:
          pixelData = new Uint16Array(
            buffer,
            slicelengthInBytes * i, // 2 bytes/voxel
            slicelengthInBytes / 2
          );
  
          break;
  
        case FLOAT_32_ARRAY:
          pixelData = new Float32Array(
            buffer,
            slicelengthInBytes * i,
            slicelengthInBytes / 4
          );
          break;
  
        default:
          throw new Error(`Unsupported Array Type ${configuration.arrayType}`);
      }
  
      const segmentsOnLabelmap = segmentsOnLabelmapArray
        ? segmentsOnLabelmapArray[i]
        : getSegmentsOnPixelData(pixelData);
  
      if (segmentsOnLabelmap && segmentsOnLabelmap.some(segment => segment)) {
        labelmaps2D[i] = {
          pixelData,
          segmentsOnLabelmap
        };
      }
    }
    */
}
exports.setLabelmap3DByFirstImageId = setLabelmap3DByFirstImageId;


/***/ }),

/***/ 7683:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
// external libraries
const cornerstone_tools_1 = __importDefault(__webpack_require__(4030));
const cornerstone_wado_image_loader_1 = __importDefault(__webpack_require__(2424));
// internal libraries
const commonLoader_1 = __webpack_require__(326);
const imageStore_1 = __importDefault(__webpack_require__(5278));
const commonLoader_2 = __webpack_require__(326);
const loadHandlerManager_1 = __importDefault(__webpack_require__(9003));
//const loadHandlerManager = cornerstoneTools.importInternal(
//  "stateManagement/loadHandlerManager"
//);// TODO LAURA CHECK HOW TO IMPORT IT
// global variables
const EVENTS = cornerstone_tools_1.default.EVENTS;
const external = cornerstone_tools_1.default.external;
const getToolState = cornerstone_tools_1.default.getToolState;
const triggerEvent = cornerstone_tools_1.default.importInternal("util/triggerEvent");
function scrollToIndex(element, newImageIdIndex) {
    const toolData = getToolState(element, "stack");
    if (!toolData || !toolData.data || !toolData.data.length) {
        return;
    }
    const cornerstone = external.cornerstone;
    // If we have more than one stack, check if we have a stack renderer defined
    let stackRenderer;
    if (toolData.data.length > 1) {
        const stackRendererData = getToolState(element, "stackRenderer");
        if (stackRendererData &&
            stackRendererData.data &&
            stackRendererData.data.length) {
            stackRenderer = stackRendererData.data[0];
        }
    }
    const stackData = toolData.data[0];
    const originalImageIdSample = toolData.data[0].imageIds[0];
    const parsedImageId = cornerstone_wado_image_loader_1.default.wadouri.parseImageId(originalImageIdSample);
    const rootImageId = parsedImageId.scheme + ":" + parsedImageId.url;
    const imageTracker = (0, commonLoader_2.getLarvitarImageTracker)();
    const seriesId = imageTracker[rootImageId];
    const manager = (0, commonLoader_1.getLarvitarManager)();
    const multiFrameSerie = manager[seriesId];
    const id = element.id;
    const isDSAEnabled = imageStore_1.default.get(["viewports", id, "isDSAEnabled"]);
    const imageIds = isDSAEnabled === true ? multiFrameSerie.dsa.imageIds : stackData.imageIds;
    // Allow for negative indexing
    if (newImageIdIndex < 0) {
        newImageIdIndex += imageIds.length;
    }
    const startLoadingHandler = loadHandlerManager_1.default.getStartLoadHandler(element);
    const endLoadingHandler = loadHandlerManager_1.default.getEndLoadHandler(element);
    const errorLoadingHandler = loadHandlerManager_1.default.getErrorLoadingHandler(element);
    function doneCallback(image) {
        if (stackData.currentImageIdIndex !== newImageIdIndex) {
            return;
        }
        // Check if the element is still enabled in Cornerstone,
        // If an error is thrown, stop here.
        try {
            // TODO: Add 'isElementEnabled' to Cornerstone?
            cornerstone.getEnabledElement(element);
        }
        catch (error) {
            return;
        }
        if (stackRenderer) {
            stackRenderer.currentImageIdIndex = newImageIdIndex;
            stackRenderer.render(element, toolData.data);
        }
        else {
            cornerstone.displayImage(element, image);
        }
        if (endLoadingHandler) {
            endLoadingHandler(element, image);
        }
    }
    function failCallback(error) {
        const imageId = imageIds[newImageIdIndex];
        if (errorLoadingHandler) {
            errorLoadingHandler(element, imageId, error);
        }
    }
    if (newImageIdIndex === stackData.currentImageIdIndex) {
        return;
    }
    if (startLoadingHandler) {
        startLoadingHandler(element);
    }
    const eventData = {
        newImageIdIndex,
        direction: newImageIdIndex - stackData.currentImageIdIndex
    };
    stackData.currentImageIdIndex = newImageIdIndex;
    const newImageId = imageIds[newImageIdIndex];
    // Retry image loading in cases where previous image promise
    // Was rejected, if the option is set
    /*
    
        Const config = stackScroll.getConfiguration();
    
        TODO: Revisit this. It appears that Core's imageCache is not
        keeping rejected promises anywhere, so we have no way to know
        if something was previously rejected.
    
        if (config && config.retryLoadOnScroll === true) {
        }
      */
    // Convert the preventCache value in stack data to a boolean
    const preventCache = Boolean(stackData.preventCache);
    let imagePromise;
    if (preventCache) {
        imagePromise = cornerstone.loadImage(newImageId);
    }
    else {
        imagePromise = cornerstone.loadAndCacheImage(newImageId);
    }
    imagePromise.then(doneCallback, failCallback);
    triggerEvent(element, EVENTS.STACK_SCROLL, eventData);
}
exports["default"] = scrollToIndex;


/***/ }),

/***/ 6694:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module imaging/tools/default
 *  @desc  This file provides definitions
 *         for default tools
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.registerExternalTool = exports.setDefaultToolsProps = exports.getDefaultToolsByType = exports.dvTools = exports.DEFAULT_MOUSE_KEYS = exports.DEFAULT_SETTINGS = exports.DEFAULT_STYLE = exports.DEFAULT_TOOLS = void 0;
// external libraries
/** @module tools/default */
/* DEFINE DEFAULT TOOLS
 * example
 *
 * toolName : {
 *      name : toolName (string),
 *      viewports : "all" or [array of target viewports],
 *      configuration : configuration {object},
 *      options : options {object},
 *      class : cornerstone tool library class name (ie "LengthTool" for Length tool),
 *      sync : cornerstone synchronizer name (ie "wwwcSynchronizer" for Wwwc sync tool),
 *      cleanable : if true, this tool will be removed when calling "no tools",
 *      defaultActive : if true, this tool will be activated when calling "addDefaultTools",
 *      shortcut : keyboard shortcut [not implemented],
 *      type : tool category inside Larvitar (one of: "utils", "annotation", "segmentation", "overlay")
 * }
 *
 */
const lodash_1 = __webpack_require__(6486);
const thresholdsBrushTool_1 = __importDefault(__webpack_require__(7073));
const polylineScissorsTool_1 = __importDefault(__webpack_require__(8990));
const rectangleRoiOverlayTool_1 = __importDefault(__webpack_require__(1828));
const ellipticalRoiOverlayTool_1 = __importDefault(__webpack_require__(3211));
const BorderMagnifyTool_1 = __importDefault(__webpack_require__(7819));
const customMouseWheelScrollTool_1 = __importDefault(__webpack_require__(4585));
const LengthPlotTool_1 = __importDefault(__webpack_require__(2775));
const ManualLengthPlotTool_1 = __importDefault(__webpack_require__(893));
/**
 * These tools are added with `addDefaultTools()`
 */
const DEFAULT_TOOLS = {
    ScaleOverlay: {
        name: "ScaleOverlay",
        viewports: "all",
        configuration: {
            minorTickLength: 25,
            majorTickLength: 50
        },
        options: {
            mouseButtonMask: 1
        },
        cleanable: false,
        defaultActive: false,
        class: "ScaleOverlayTool",
        description: "Add scale overlay",
        shortcut: "ctrl-m",
        type: "overlay"
    },
    OrientationMarkers: {
        name: "OrientationMarkers",
        viewports: "all",
        configuration: {},
        options: {
            mouseButtonMask: 1
        },
        cleanable: false,
        defaultActive: false,
        class: "OrientationMarkersTool",
        description: "Add orientation markers",
        shortcut: "ctrl-m",
        type: "overlay"
    },
    Wwwc: {
        name: "Wwwc",
        viewports: "all",
        configuration: {},
        options: {
            mouseButtonMask: 1,
            supportedInteractionTypes: ["Mouse", "Touch"]
        },
        cleanable: false,
        defaultActive: true,
        class: "WwwcTool",
        // sync: "wwwcSynchronizer",
        description: "Change image contrast",
        shortcut: "ctrl-m",
        type: "utils"
    },
    WwwcRegion: {
        name: "WwwcRegion",
        viewports: "all",
        configuration: {},
        options: {
            mouseButtonMask: 1,
            supportedInteractionTypes: ["Mouse", "Touch"]
        },
        cleanable: false,
        defaultActive: false,
        class: "WwwcRegionTool",
        // sync: "wwwcSynchronizer",
        description: "Change image contrast based on selected region",
        shortcut: "ctrl-m",
        type: "utils"
    },
    StackScroll: {
        name: "StackScroll",
        viewports: "all",
        configuration: {
            loop: false, // default false
            allowSkipping: true // default true
        },
        options: {
            mouseButtonMask: 1,
            deltaY: 0 // default 0
        },
        cleanable: false,
        defaultActive: false,
        class: "StackScrollTool"
    },
    StackScrollMouseWheel: {
        name: "StackScrollMouseWheel",
        viewports: "all",
        configuration: {
            loop: false, // default false
            allowSkipping: true, // default true
            invert: false
        },
        options: {},
        cleanable: false,
        defaultActive: true,
        class: "StackScrollMouseWheelTool"
    },
    CustomMouseWheelScroll: {
        name: "CustomMouseWheelScroll",
        viewports: "all",
        configuration: {
            loop: false,
            allowSkipping: true,
            invert: false,
            fixedFrame: 1,
            fixedSlice: 0,
            currentMode: "stack", // 'stack' or 'slice'
            framesNumber: 1
        },
        options: {
            mouseButtonMask: 0
        },
        cleanable: false,
        defaultActive: true,
        class: "CustomMouseWheelScrollTool",
        description: "scroll images/frames",
        shortcut: "mouse wheel",
        type: "utils"
    },
    Pan: {
        name: "Pan",
        viewports: "all",
        configuration: {},
        options: {
            mouseButtonMask: 1,
            supportedInteractionTypes: ["Mouse", "Touch"]
        },
        cleanable: false,
        defaultActive: false,
        class: "PanTool",
        description: "Move image xy",
        shortcut: "ctrl-p",
        type: "utils"
    },
    Zoom: {
        name: "Zoom",
        viewports: "all",
        configuration: {
            invert: false,
            preventZoomOutsideImage: false,
            minScale: 0.01,
            maxScale: 25.0
        },
        options: {
            mouseButtonMask: 2,
            supportedInteractionTypes: ["Mouse", "Touch"],
            defaultStrategy: "default" // can be 'default', 'translate' or 'zoomToCenter'
        },
        cleanable: false,
        class: "ZoomTool",
        defaultActive: true,
        description: "Zoom image at mouse position",
        shortcut: "ctrl-z",
        type: "utils"
    },
    BorderMagnify: {
        name: "BorderMagnify",
        viewports: "all",
        configuration: {},
        options: {
            mouseButtonMask: 1,
            supportedInteractionTypes: ["Mouse", "Touch"]
        },
        cleanable: false,
        class: "BorderMagnifyTool",
        defaultActive: false,
        description: "Magnify image at mouse position",
        shortcut: "ctrl-m",
        type: "utils"
    },
    DragProbe: {
        name: "DragProbe",
        viewports: "all",
        configuration: {},
        options: {
            mouseButtonMask: 1,
            supportedInteractionTypes: ["Mouse", "Touch"]
        },
        cleanable: false,
        class: "DragProbeTool",
        description: "Probe image at mouse position",
        shortcut: "ctrl-p",
        type: "utils"
    },
    Rotate: {
        name: "Rotate",
        viewports: "all",
        configuration: {},
        options: {
            mouseButtonMask: 1,
            supportedInteractionTypes: ["Mouse", "Touch"]
        },
        cleanable: false,
        class: "RotateTool",
        description: "Rotate image"
    },
    Length: {
        name: "Length",
        viewports: "all",
        configuration: {},
        options: {
            mouseButtonMask: 1,
            supportedInteractionTypes: ["Mouse", "Touch"]
        },
        cleanable: true,
        class: "LengthTool"
    },
    LengthPlot: {
        name: "LengthPlot",
        viewports: "all",
        configuration: {
            drawHandles: true,
            drawHandlesOnHover: false,
            hideHandlesIfMoving: false,
            renderDashed: false,
            digits: 2,
            offset: 15
        },
        options: {
            mouseButtonMask: 1,
            supportedInteractionTypes: ["Mouse"]
        },
        cleanable: true,
        class: "LengthPlotTool"
    },
    ManualLengthPlot: {
        name: "ManualLengthPlot",
        viewports: "all",
        configuration: {
            drawHandles: true,
            drawHandlesOnHover: false,
            hideHandlesIfMoving: false,
            renderDashed: false,
            digits: 2,
            offset: 15
        },
        options: {
            mouseButtonMask: 1,
            supportedInteractionTypes: ["Mouse"]
        },
        cleanable: true,
        class: "ManualLengthPlotTool"
    },
    Angle: {
        name: "Angle",
        viewports: "all",
        configuration: {},
        options: {
            mouseButtonMask: 1,
            supportedInteractionTypes: ["Mouse", "Touch"]
        },
        cleanable: true,
        class: "AngleTool"
    },
    Bidirectional: {
        name: "Bidirectional",
        viewports: "all",
        configuration: {},
        options: { mouseButtonMask: 1 },
        cleanable: true,
        class: "BidirectionalTool"
    },
    EllipticalRoi: {
        name: "EllipticalRoi",
        viewports: "all",
        configuration: {},
        options: { mouseButtonMask: 1 },
        cleanable: true,
        class: "EllipticalRoiTool",
        description: "Draw an ellipse",
        shortcut: "ctrl-f",
        type: "annotation"
    },
    RectangleRoi: {
        name: "RectangleRoi",
        viewports: "all",
        configuration: {},
        options: { mouseButtonMask: 1 },
        cleanable: true,
        defaultActive: false,
        class: "RectangleRoiTool",
        description: "Draw a rectangle",
        shortcut: "ctrl-a",
        type: "annotation"
    },
    EllipticalRoiOverlay: {
        name: "EllipticalRoiOverlay",
        viewports: "all",
        configuration: {},
        options: { mouseButtonMask: 1 },
        cleanable: true,
        class: "EllipticalRoiOverlayTool",
        description: "Draw an ellipse",
        shortcut: "ctrl-f",
        type: "annotation"
    },
    RectangleRoiOverlay: {
        name: "RectangleRoiOverlay",
        viewports: "all",
        configuration: {},
        options: { mouseButtonMask: 1 },
        cleanable: true,
        defaultActive: false,
        class: "RectangleRoiOverlayTool",
        description: "Draw a rectangle",
        shortcut: "ctrl-a",
        type: "annotation"
    },
    FreehandRoi: {
        name: "FreehandRoi",
        viewports: "all",
        configuration: {},
        options: { mouseButtonMask: 1 },
        cleanable: true,
        class: "FreehandRoiTool",
        description: "Draw a polyline / freehand form",
        shortcut: "ctrl-s",
        type: "annotation"
    },
    Probe: {
        name: "Probe",
        viewports: "all",
        configuration: {},
        options: { mouseButtonMask: 1 },
        cleanable: true,
        class: "ProbeTool"
    },
    ArrowAnnotate: {
        name: "ArrowAnnotate",
        viewports: "all",
        configuration: {},
        options: { mouseButtonMask: 1 },
        cleanable: true,
        class: "ArrowAnnotateTool",
        description: "Draw an arrow",
        shortcut: "ctrl-d",
        type: "annotation"
    },
    TextMarker: {
        name: "TextMarker",
        viewports: "all",
        configuration: {
            markers: Object.keys(new Array(100).fill(0)),
            current: "0",
            ascending: true,
            loop: true
        },
        options: { mouseButtonMask: 1 },
        cleanable: true,
        class: "TextMarkerTool"
    },
    Eraser: {
        name: "Eraser",
        viewports: "all",
        configuration: {},
        options: { mouseButtonMask: 1 },
        class: "EraserTool"
    },
    ZoomTouchPinch: {
        name: "ZoomTouchPinch",
        viewports: "all",
        configuration: {},
        options: {
            mouseButtonMask: 1,
            supportedInteractionTypes: ["TouchPinch"]
        },
        cleanable: false,
        class: "ZoomTouchPinchTool",
        defaultActive: false
    },
    PanMultiTouch: {
        name: "PanMultiTouch",
        viewports: "all",
        configuration: {
            touchPointers: 2
        },
        options: {
            mouseButtonMask: 1,
            supportedInteractionTypes: ["MultiTouch"]
        },
        cleanable: false,
        class: "PanMultiTouchTool",
        defaultActive: false
    },
    Brush: {
        name: "Brush",
        viewports: "all",
        configuration: {},
        options: { mouseButtonMask: 1 },
        cleanable: true,
        class: "BrushTool",
        description: "A simple brush",
        shortcut: "ctrl-q",
        type: "segmentation"
    },
    ThresholdsBrush: {
        name: "ThresholdsBrush",
        viewports: "all",
        configuration: {},
        options: { mouseButtonMask: 1 },
        cleanable: true,
        class: "ThresholdsBrushTool",
        description: "Brush only values inside thresholds",
        shortcut: "ctrl-t",
        type: "segmentation"
    },
    RectangleScissors: {
        name: "RectangleScissors",
        viewports: "all",
        configuration: {},
        options: { mouseButtonMask: 1 },
        cleanable: true,
        class: "RectangleScissorsTool",
        description: "A rectangular segmentation tool",
        shortcut: "ctrl-w",
        type: "segmentation"
    },
    FreehandScissors: {
        name: "FreehandScissors",
        viewports: "all",
        configuration: {},
        options: { mouseButtonMask: 1 },
        cleanable: true,
        class: "FreehandScissorsTool",
        description: "A free-hand segmentation tool",
        shortcut: "ctrl-e",
        type: "segmentation"
    },
    CircleScissors: {
        name: "CircleScissors",
        viewports: "all",
        configuration: {},
        options: { mouseButtonMask: 1 },
        cleanable: true,
        class: "CircleScissorsTool",
        description: "A circular segmentation tool",
        shortcut: "ctrl-r",
        type: "segmentation"
    },
    CorrectionScissors: {
        name: "CorrectionScissors",
        viewports: "all",
        configuration: {},
        options: { mouseButtonMask: 1 },
        cleanable: true,
        class: "CorrectionScissorsTool",
        description: "A correction segmentation tool",
        shortcut: "ctrl-p",
        type: "segmentation"
    },
    PolylineScissors: {
        name: "PolylineScissors",
        viewports: "all",
        configuration: {},
        options: { mouseButtonMask: 1 },
        cleanable: true,
        class: "PolylineScissorsTool",
        description: "A polyline segmentation tool",
        shortcut: "ctrl-s",
        type: "segmentation"
    }
};
exports.DEFAULT_TOOLS = DEFAULT_TOOLS;
/**
 * D/Vision Lab custom tools
 */
const dvTools = {
    ThresholdsBrushTool: thresholdsBrushTool_1.default,
    PolylineScissorsTool: polylineScissorsTool_1.default,
    // Slice4DScrollMouseWheelTool: Slice4DScrollMouseWheelTool,
    RectangleRoiOverlayTool: rectangleRoiOverlayTool_1.default,
    EllipticalRoiOverlayTool: ellipticalRoiOverlayTool_1.default,
    BorderMagnifyTool: BorderMagnifyTool_1.default,
    CustomMouseWheelScrollTool: customMouseWheelScrollTool_1.default,
    LengthPlotTool: LengthPlotTool_1.default,
    ManualLengthPlotTool: ManualLengthPlotTool_1.default
};
exports.dvTools = dvTools;
/**
 * Tools default style
 * Available font families :
 * Work Sans, Roboto, OpenSans, HelveticaNeue-Light,
 * Helvetica Neue Light, Helvetica Neue, Helvetica,
 * Arial, Lucida Grande, sans-serif;
 */
const DEFAULT_STYLE = {
    width: 1,
    color: "#02FAE5",
    activeColor: "#00FF00",
    fillColor: "#0000FF",
    fontFamily: "Roboto",
    fontSize: 18,
    backgroundColor: "rgba(1, 1, 1, 0.7)"
};
exports.DEFAULT_STYLE = DEFAULT_STYLE;
/**
 * Tools default settings
 */
const DEFAULT_SETTINGS = {
    mouseEnabled: true,
    touchEnabled: true,
    showSVGCursors: true,
    globalToolSyncEnabled: false,
    autoResizeViewports: true,
    lineDash: [4, 4]
};
exports.DEFAULT_SETTINGS = DEFAULT_SETTINGS;
/**
 * Shortcut and mouse bindings defaults
 */
const DEFAULT_MOUSE_KEYS = {
    debug: true, // log changes
    mouse_button_left: {
        shift: "Zoom",
        ctrl: "Pan",
        default: "Wwwc"
    },
    mouse_button_right: {
        shift: "Zoom",
        ctrl: "Pan",
        default: "Wwwc"
    },
    keyboard_shortcuts: {
        // alt key + letter
        KEY_R: "Rotate",
        KEY_A: "Angle",
        KEY_L: "Length"
    }
};
exports.DEFAULT_MOUSE_KEYS = DEFAULT_MOUSE_KEYS;
/**
 * Get available tools by type (useful to populate menus)
 * @param {String} type
 */
const getDefaultToolsByType = function (type) {
    return (0, lodash_1.filter)(DEFAULT_TOOLS, ["type", type]);
};
exports.getDefaultToolsByType = getDefaultToolsByType;
/**
 * Override default tools props
 * @param {Array} newProps - An array of objects as in the DEFAULT_TOOLS list, but with a subset of props
 * NOTE: prop "name" is mandatory
 */
const setDefaultToolsProps = function (newProps) {
    if ((0, lodash_1.isArray)(newProps)) {
        newProps.forEach(props => {
            if (!props.name) {
                console.error("newProps must have a name property");
                return;
            }
            let targetTool = DEFAULT_TOOLS[props.name];
            if (targetTool) {
                DEFAULT_TOOLS[props.name] = Object.assign(targetTool, props);
            }
            else {
                console.error(`${props.name} does not exist`);
            }
        });
    }
    else {
        console.error("newProps must be an array");
    }
};
exports.setDefaultToolsProps = setDefaultToolsProps;
/**
 * Register a custom tool
 * @param {String} toolName - The name of the tool
 * @param {Object} toolClass - The tool class
 * NOTE: toolName must be unique
 * NOTE: toolClass must be a valid cornerstone tool
 */
const registerExternalTool = function (toolName, toolClass) {
    if (dvTools[toolName] || DEFAULT_TOOLS[toolName]) {
        console.warn(`${toolName} already exists, it will be replaced`);
    }
    dvTools[toolClass.name] = toolClass;
    DEFAULT_TOOLS[toolName] = {
        name: toolName,
        class: toolClass.name,
        viewports: "all",
        configuration: {},
        options: { mouseButtonMask: 1 },
        defaultActive: false
    };
};
exports.registerExternalTool = registerExternalTool;


/***/ }),

/***/ 1534:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module imaging/tools/interaction
 *  @desc  This file provides functionalities for
 *         tools interactions
 */
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.toggleMouseToolsListeners = exports.removeMouseKeyHandlers = exports.addMouseKeyHandlers = void 0;
// external libraries
const lodash_1 = __webpack_require__(6486);
const keyCodes = __importStar(__webpack_require__(3445));
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
const cornerstone_tools_1 = __importDefault(__webpack_require__(4030));
// internal libraries
const default_1 = __webpack_require__(6694);
const main_1 = __webpack_require__(3272);
const imageUtils_1 = __webpack_require__(8345);
const imageStore_1 = __importStar(__webpack_require__(5278));
const imageRendering_1 = __webpack_require__(4767);
/**
 * TOOLS INTERACTIONS TODOS:
 * - enable touch controls
 * - rework active tools / ui labels sync (we can get all active tools from cornerstoneTools state, then check the button / input method to update the correct label, or update all props scale, translation and voi)
 * - use config to setup all interactions (mouse left/right, keyboard shortcuts, touch inputs)
 */
/**
 * Global event callbacks
 */
let onKeyDownFn = null;
let onKeyUpFn = null;
/**
 * Setup mouse handler modifiers and keyboard shortcuts:
 * register a tool on right button and another one
 * when pressing a modifier (ctrl/shift/alt) + right button
 * The activation take place on all active viewports (we added a check to activate only on viewports
 * in which the tool has been added previously)
 * Improvements could be:
 * - "restore previous active tool" instead of passed "default" tool
 * - manage left button (an idea could be to cycle over object keys for both buttons)
 * - possibility to change modifier keys
 * @param {Object} config - see tools/default
 */
function addMouseKeyHandlers(config) {
    if (!config) {
        config = default_1.DEFAULT_MOUSE_KEYS;
    }
    if (onKeyDownFn) {
        document.removeEventListener("keydown", onKeyDownFn);
    }
    if (onKeyUpFn) {
        document.removeEventListener("keyup", onKeyUpFn);
    }
    // Prevent context menu on right click
    document.addEventListener("contextmenu", evt => {
        evt.preventDefault();
        return false;
    });
    // get all enabled viewports. Then, filter only viewport in which the target tool had been added previously.
    let allViewports = cornerstone_core_1.default.getEnabledElements().map(enel => enel.element);
    // Define behaviour on key down: activate registered tool
    function onKeyDown(evt) {
        // keyboard shortcuts (activate on left mouse button)
        let codes = config.keyboard_shortcuts
            ? Object.keys(config.keyboard_shortcuts).map(
            // @ts-ignore
            key => keyCodes[key])
            : [];
        if (codes.includes(evt.keyCode) && evt.altKey) {
            evt.preventDefault(); // avoid browser menu selections
            let key = Object.keys(config.keyboard_shortcuts)
                // @ts-ignore
                .filter(key => keyCodes[key] == evt.keyCode) // TODO keyCode is deprecated
                .pop();
            if (!key) {
                console.warn("Key not found in config.keyboard_shortcuts");
                return;
            }
            let toolName = config.keyboard_shortcuts[key];
            if (config.debug)
                console.log("active", toolName);
            const viewports = allViewports.filter(viewport => cornerstone_tools_1.default.getToolForElement(viewport, toolName));
            (0, main_1.setToolActive)(toolName, { mouseButtonMask: 1 }, viewports.map(v => v.id));
            document.addEventListener("keydown", onKeyDown, { once: true });
        }
        // right drag + shift
        else if (config.mouse_button_right &&
            config.mouse_button_right.shift &&
            evt.keyCode == keyCodes.KEY_SHIFT) {
            if (config.debug)
                console.log("active", config.mouse_button_right.shift);
            const viewports = allViewports.filter(viewport => cornerstone_tools_1.default.getToolForElement(viewport, config.mouse_button_right.shift));
            (0, main_1.setToolActive)(config.mouse_button_right.shift, { mouseButtonMask: 2 }, viewports.map(v => v.id));
            document.addEventListener("keyup", onKeyUp, { once: true });
        }
        // right drag + ctrl
        else if (config.mouse_button_right &&
            config.mouse_button_right.ctrl &&
            evt.keyCode == keyCodes.KEY_CONTROL) {
            if (config.debug)
                console.log("active", config.mouse_button_right.ctrl);
            const viewports = allViewports.filter(viewport => cornerstone_tools_1.default.getToolForElement(viewport, config.mouse_button_right.ctrl));
            (0, main_1.setToolActive)(config.mouse_button_right.ctrl, { mouseButtonMask: 2 }, viewports.map(v => v.id));
            document.addEventListener("keyup", onKeyUp, { once: true });
        }
        // leave default
        else {
            document.addEventListener("keydown", onKeyDown, { once: true });
            return;
        }
    }
    // Define behaviour on key up: restore original tool
    function onKeyUp(e) {
        if (config.debug)
            console.log("active default", config.mouse_button_right.default);
        const viewports = allViewports.filter(viewport => cornerstone_tools_1.default.getToolForElement(viewport, config.mouse_button_right.default));
        (0, main_1.setToolActive)(config.mouse_button_right.default, { mouseButtonMask: 2 }, viewports.map(v => v.id));
        document.addEventListener("keydown", onKeyDown, { once: true });
    }
    // activate default on mouse right, if any
    if (config.mouse_button_right && config.mouse_button_right.default) {
        const viewports = allViewports.filter(viewport => cornerstone_tools_1.default.getToolForElement(viewport, config.mouse_button_right.default));
        (0, main_1.setToolActive)(config.mouse_button_right.default, { mouseButtonMask: 2 }, viewports.map(v => v.id));
    }
    // activate default on mouse left, if any
    if (config.mouse_button_left && config.mouse_button_left.default) {
        const viewports = allViewports.filter(viewport => cornerstone_tools_1.default.getToolForElement(viewport, config.mouse_button_left.default));
        (0, main_1.setToolActive)(config.mouse_button_left.default, { mouseButtonMask: 1 }, viewports.map(v => v.id));
    }
    document.addEventListener("keydown", onKeyDown, { once: true });
    onKeyDownFn = onKeyDown;
    onKeyUpFn = onKeyUp;
}
exports.addMouseKeyHandlers = addMouseKeyHandlers;
/**
 *
 */
function removeMouseKeyHandlers() {
    if (!onKeyDownFn)
        return;
    document.removeEventListener("keydown", onKeyDownFn);
    onKeyDownFn = null;
    onKeyUpFn = null;
}
exports.removeMouseKeyHandlers = removeMouseKeyHandlers;
/**
 * Add event handlers to mouse move
 * @instance
 * @function toggleMouseHandlers
 * @param {String | HTMLElement} elementId - The html div id used for rendering or its DOM HTMLElement
 * @param {Boolean} disable - If true disable handlers, default is false
 */
const toggleMouseToolsListeners = function (elementId, disable) {
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.error("invalid html element: " + elementId);
        return;
    }
    // mouse move handler (throttled)
    let mouseMoveHandler = (0, lodash_1.throttle)(function (evt) {
        let activeTool = evt.detail.buttons == 1
            ? imageStore_1.default.get("leftActiveTool")
            : imageStore_1.default.get("rightActiveTool");
        (0, imageRendering_1.updateViewportData)(evt.srcElement.id, evt.detail.viewport, activeTool);
    }, 250);
    // mouse wheel handler
    function mouseWheelHandler(evt) {
        // TODO-ts fix type (should be a cornerstoneTools event type)
        // @mronzoni does cornerstoneTools have a type for this event?
        (0, imageStore_1.set)(["sliceId", evt.target.id, evt.detail.newImageIdIndex]);
        (0, imageRendering_1.updateViewportData)(evt.srcElement.id, evt.detail, "CustomMouseWheelScroll");
    }
    if (disable) {
        element.removeEventListener("cornerstonetoolsmousedrag", mouseMoveHandler);
        element.removeEventListener("cornerstonetoolsstackscroll", mouseWheelHandler);
        return;
    }
    element.addEventListener("cornerstonetoolsmousedrag", mouseMoveHandler);
    element.addEventListener("cornerstonetoolsstackscroll", mouseWheelHandler);
};
exports.toggleMouseToolsListeners = toggleMouseToolsListeners;


/***/ }),

/***/ 5604:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module imaging/tools/io
 *  @desc  This file provides functionalities for
 *         tools input/output
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.generateCSV = exports.exportAnnotations = exports.saveAnnotations = exports.loadAnnotations = void 0;
// deprecated file, to be removed
// TODO-ts remove this file @mronzoni
// @ts-nocheck
// external libraries
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
const cornerstone_tools_1 = __importDefault(__webpack_require__(4030));
const lodash_1 = __webpack_require__(6486);
const papaparse_1 = __webpack_require__(7460);
// internal libraries
const main_1 = __webpack_require__(3272);
/**
 * Load annotation from json object
 * @param {Object} jsonData - The previously saved tools state
 */
const loadAnnotations = function (jsonData) {
    // restore saved tool state
    cornerstone_tools_1.default.globalImageIdSpecificToolStateManager.restoreToolState(jsonData);
    // set all found tools to passive
    let toolsInState = new Set();
    for (let imageId in jsonData) {
        for (let toolName in jsonData[imageId]) {
            toolsInState.add(toolName);
        }
    }
    toolsInState.forEach(toolName => {
        // TODO-ts fix 'null' this after setToolEnabled is typed @mronzoni
        (0, main_1.setToolEnabled)(toolName);
    });
    let enabledElementIds = (0, lodash_1.map)(cornerstone_core_1.default.getEnabledElements(), e => e.element.id);
    // FIXME error if called when image is not loaded
    for (let elementId of enabledElementIds) {
        let element = document.getElementById(elementId);
        if (!element) {
            console.warn(`Element ${elementId} not found`);
            continue;
        }
        cornerstone_core_1.default.updateImage(element);
    }
};
exports.loadAnnotations = loadAnnotations;
/**
 * Save annotations from current stack, download as json file if requested
 * @param {bool} download - True to download json
 * @param {string} filename - The json file name, @default state.json
 */
const saveAnnotations = function (download, filename = "state.json") {
    let currentToolState = cornerstone_tools_1.default.globalImageIdSpecificToolStateManager.saveToolState();
    if (download) {
        // Convert JSON Array to string.
        var json_string = JSON.stringify(currentToolState);
        downloadFile(json_string, filename);
    }
    return currentToolState;
};
exports.saveAnnotations = saveAnnotations;
/**
 * Save annotation from current stack, download as csv file
 * containing only useful informations for user
 */
const exportAnnotations = function (manager, filename = "annotations.csv") {
    let currentToolState = cornerstone_tools_1.default.globalImageIdSpecificToolStateManager.saveToolState();
    let { fieldsArr: fields, data } = generateCSV(manager, currentToolState);
    let csvstring = (0, papaparse_1.unparse)({ fields, data });
    downloadFile(csvstring, filename);
};
exports.exportAnnotations = exportAnnotations;
/**
 *
 * @param {*} stringContent
 * @param {*} filename
 */
function downloadFile(stringContent, filename) {
    // Convert string to BLOB.
    var blob = new Blob([stringContent], { type: "text/plain;charset=utf-8" });
    //Check the Browser.
    var isIE =  false || !!document.documentMode;
    if (isIE && window.navigator.msSaveBlob) {
        window.navigator.msSaveBlob(blob, filename);
    }
    else {
        var url = window.URL || window.webkitURL;
        let link = url.createObjectURL(blob);
        var a = document.createElement("a");
        a.download = filename;
        a.href = link;
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
    }
}
/**
 *
 * @param {*} allToolState
 */
function generateCSV(manager, allToolState) {
    let fields = new Set();
    fields.add("imagePath");
    fields.add("toolName");
    let data = [];
    (0, lodash_1.each)(allToolState, (imageToolState, imageId) => {
        // convert imageId to imagePath
        let imagePath = (0, lodash_1.invert)(manager)[imageId];
        (0, lodash_1.each)(imageToolState, (toolState, toolName) => {
            // extract useful information from tool state
            let extractedData = extractToolInfo(toolName, toolState.data);
            (0, lodash_1.each)(extractedData, singledata => {
                data.push((0, lodash_1.assign)({ imagePath, toolName }, singledata));
                // add all keys into fields set
                (0, lodash_1.each)(Object.keys(singledata), k => fields.add(k));
            });
        });
    });
    let fieldsArr = Array.from(fields);
    return {
        fieldsArr,
        data
    };
}
exports.generateCSV = generateCSV;
/**
 *
 * @param {*} toolData
 */
function extractToolInfo(toolName, toolData) {
    let dataArray = [];
    switch (toolName) {
        case "RectangleRoi":
        case "EllipticalRoi":
            // This is an example for "length" tool, needs to be generalised
            dataArray = (0, lodash_1.map)(toolData, data => {
                return {
                    color: data.color,
                    x1: data.handles.start.x,
                    y1: data.handles.start.y,
                    x2: data.handles.end.x,
                    y2: data.handles.end.y,
                    length: data.length,
                    unit: data.unit,
                    textBox_x: data.textBox ? data.textBox.x : null,
                    textBox_y: data.textBox ? data.textBox.y : null,
                    boundingBox_w: data.textBox ? data.textBox.boundingBox.width : null,
                    boundingBox_h: data.textBox ? data.textBox.boundingBox.height : null,
                    boundingBox_l: data.textBox ? data.textBox.boundingBox.left : null,
                    boundingBox_t: data.textBox ? data.textBox.boundingBox.top : null
                };
            });
            break;
        case "FreehandRoi":
            dataArray = (0, lodash_1.map)(toolData, data => {
                return {
                    color: data.color,
                    // TODO how to export arrays ?
                    // x: map(data.handles.points, "x"),
                    // y: map(data.handles.points, "y"),
                    length: data.length,
                    unit: data.unit,
                    textBox_x: data.textBox ? data.textBox.x : null,
                    textBox_y: data.textBox ? data.textBox.y : null,
                    polyBoundingBox_h: data.polyBoundingBox.height,
                    polyBoundingBox_l: data.polyBoundingBox.left,
                    polyBoundingBox_t: data.polyBoundingBox.top,
                    polyBoundingBox_w: data.polyBoundingBox.width
                };
            });
            break;
        case "ArrowAnnotate":
            dataArray = (0, lodash_1.map)(toolData, data => {
                return {
                    color: data.color ? data.color : null,
                    text: data.text,
                    x1: data.handles.start.x,
                    y1: data.handles.start.y,
                    x2: data.handles.end.x,
                    y2: data.handles.end.y,
                    textBox_x: data.textBox ? data.textBox.x : null,
                    textBox_y: data.textBox ? data.textBox.y : null,
                    boundingBox_w: data.textBox ? data.textBox.boundingBox.width : null,
                    boundingBox_h: data.textBox ? data.textBox.boundingBox.height : null,
                    boundingBox_l: data.textBox ? data.textBox.boundingBox.left : null,
                    boundingBox_t: data.textBox ? data.textBox.boundingBox.top : null
                };
            });
            break;
        default:
    }
    return dataArray;
}


/***/ }),

/***/ 3272:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module imaging/tools/main
 *  @desc  This file provides functionalities
 *         for initializing tools and stacks
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.exportAnnotations = exports.loadAnnotations = exports.saveAnnotations = exports.setToolPassive = exports.setToolDisabled = exports.setToolEnabled = exports.setToolActive = exports.addTool = exports.csToolsCreateStack = exports.setToolsStyle = exports.initializeCSTools = exports.addDefaultTools = exports.csToolsUpdateImageIndex = exports.csToolsUpdateImageIds = void 0;
// external libraries
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
const cornerstone_tools_1 = __importDefault(__webpack_require__(4030));
const cornerstone_math_1 = __importDefault(__webpack_require__(352));
const hammerjs_1 = __importDefault(__webpack_require__(840));
const lodash_1 = __webpack_require__(6486);
// internal libraries
const io_1 = __webpack_require__(5604);
Object.defineProperty(exports, "saveAnnotations", ({ enumerable: true, get: function () { return io_1.saveAnnotations; } }));
Object.defineProperty(exports, "loadAnnotations", ({ enumerable: true, get: function () { return io_1.loadAnnotations; } }));
Object.defineProperty(exports, "exportAnnotations", ({ enumerable: true, get: function () { return io_1.exportAnnotations; } }));
const default_1 = __webpack_require__(6694);
const imageStore_1 = __webpack_require__(5278);
/**
 * Initialize cornerstone tools with default configuration (extended with custom configuration)
 * @function initializeCSTools
 * @param {Object} settings - the settings object (see tools/default.js)
 * @param {Object} settings - the style object (see tools/default.js)
 * @example larvitar.initializeCSTools({showSVGCursors:false}, {color: "0000FF"});
 */
const initializeCSTools = function (settings, style) {
    cornerstone_tools_1.default.external.cornerstone = cornerstone_core_1.default;
    cornerstone_tools_1.default.external.cornerstoneMath = cornerstone_math_1.default;
    cornerstone_tools_1.default.external.Hammer = hammerjs_1.default;
    (0, lodash_1.extend)(default_1.DEFAULT_SETTINGS, settings);
    // hack to fix warning on init() - but breaks labelmap 0 auto generation
    // see https://github.com/cornerstonejs/cornerstoneTools/issues/1395
    cornerstone_tools_1.default.getModule("segmentation").configuration.segmentsPerLabelmap = 0;
    cornerstone_tools_1.default.init(default_1.DEFAULT_SETTINGS);
    setToolsStyle(style);
};
exports.initializeCSTools = initializeCSTools;
/**
 * Create stack object to sync stack tools
 * @function csToolsCreateStack
 * @param {HTMLElement} element - The target html element.
 * @param {Array?} imageIds - Stack image ids.
 * @param {String} currentImageId - The current image id.
 */
const csToolsCreateStack = function (element, imageIds, currentImageIndex) {
    let stack;
    if (imageIds) {
        stack = {
            currentImageIdIndex: currentImageIndex === undefined ? 0 : currentImageIndex,
            imageIds: imageIds
        };
    }
    else {
        stack = {
            currentImageIdIndex: 0,
            imageIds: "imageLoader://0"
        };
        if (cornerstone_core_1.default.getEnabledElements().length == 0) {
            cornerstone_core_1.default.enable(element);
        }
    }
    cornerstone_tools_1.default.addStackStateManager(element, ["stack"]);
    cornerstone_tools_1.default.addToolState(element, "stack", stack);
};
exports.csToolsCreateStack = csToolsCreateStack;
function csToolsUpdateImageIds(elementId, imageIds, imageIdIndex) {
    const element = document.getElementById(elementId);
    if (element) {
        const stackState = cornerstone_tools_1.default.getToolState(element, "stack");
        const stackData = stackState.data[0];
        stackData.imageIds = imageIds;
        stackData.currentImageIdIndex =
            stackData.currentImageIdIndex < imageIdIndex
                ? stackData.currentImageIdIndex
                : (stackData.currentImageIdIndex += 1);
    }
}
exports.csToolsUpdateImageIds = csToolsUpdateImageIds;
/**
 * Update currentImageIdIndex in cs tools stack
 * @param {String} elementId - The target html element id
 * @param {String} imageId - The imageId in the form xxxxxx//:imageIndex
 */
function csToolsUpdateImageIndex(elementId, imageId) {
    let currentImageIdIndex = parseInt(imageId.split(":")[1]);
    const element = document.getElementById(elementId);
    const stackState = cornerstone_tools_1.default.getToolState(element, "stack");
    const stackData = stackState.data[0];
    stackData.currentImageIdIndex = currentImageIdIndex;
}
exports.csToolsUpdateImageIndex = csToolsUpdateImageIndex;
/**
 *
 * @param {*} toolName
 */
const isToolMissing = function (toolName) {
    let elements = cornerstone_core_1.default.getEnabledElements();
    let isToolMissing = false;
    // TODO check only target viewports
    (0, lodash_1.each)(elements, function (el) {
        let added = cornerstone_tools_1.default.getToolForElement(el.element, toolName);
        if (added === undefined) {
            isToolMissing = true;
        }
    });
    return isToolMissing;
};
/**
 * Add a cornerstone tool (grab it from original library or dvision custom tools)
 * @param {*} toolName
 * @param {*} targetElementId
 * @example larvitar.addTool("ScaleOverlay", {configuration:{minorTickLength: 10, majorTickLength: 25}}, "viewer")
 */
const addTool = function (toolName, customConfig, targetElementId) {
    // extend defaults with user custom props
    let defaultConfig = default_1.DEFAULT_TOOLS[toolName]
        ? default_1.DEFAULT_TOOLS[toolName]
        : {};
    (0, lodash_1.extend)(defaultConfig, customConfig);
    if (isToolMissing(toolName)) {
        const toolClassName = "class" in defaultConfig ? defaultConfig.class : undefined;
        if (!toolClassName) {
            throw new Error(`Tool ${toolName} class not found. Please check tools/default or pass a valid tool class name in the configuration object.`);
        }
        const toolClass = default_1.dvTools[toolClassName] || cornerstone_tools_1.default[toolClassName];
        if (targetElementId) {
            let element = document.getElementById(targetElementId);
            cornerstone_tools_1.default.addToolForElement(element, toolClass, defaultConfig);
        }
        else {
            cornerstone_tools_1.default.addTool(toolClass, defaultConfig);
        }
    }
};
exports.addTool = addTool;
/**
 * Add all default tools, as listed in tools/default.js
 * @function addDefaultTools
 */
const addDefaultTools = function (elementId) {
    let elements = cornerstone_core_1.default.getEnabledElements();
    if (elements.length == 0) {
        let element = document.getElementById(elementId);
        if (!element) {
            throw new Error(`Element with id ${elementId} not found. Cannot add default tools.`);
        }
        cornerstone_core_1.default.enable(element);
    }
    // for each default tool
    (0, lodash_1.each)(default_1.DEFAULT_TOOLS, tool => {
        // check if already added
        if (!isToolMissing(tool.name)) {
            console.log("missing");
            return;
        }
        // check target viewports and call add tool with options
        if (tool.viewports == "all") {
            addTool(tool.name, tool.configuration);
        }
        else {
            // call add tool for element for each element
            (0, lodash_1.each)(tool.viewports, targetElementId => {
                addTool(tool.name, tool.configuration, targetElementId);
            });
        }
        // if sync tool, enable
        if (tool.sync) {
            const synchronizer = new cornerstone_tools_1.default.Synchronizer("cornerstoneimagerendered", cornerstone_tools_1.default[tool.sync]);
            elements.forEach(element => {
                synchronizer.add(element.element);
            });
            synchronizer.enabled = true;
        }
        if (tool.defaultActive) {
            setToolActive(tool.name, tool.options, [], true);
        }
    });
};
exports.addDefaultTools = addDefaultTools;
/**
 * Try to update image, catching errors if image is not loaded yet
 * @param {HTMLObject} element
 */
function tryUpdateImage(element) {
    try {
        cornerstone_core_1.default.updateImage(element);
    }
    catch (err) {
        // console.warn("updateImage: image has not been loaded yet:", element.id);
    }
}
/**
 * Set Tool "active" on all elements (ie, rendered and manipulable) & refresh cornerstone elements
 * @function setToolActive
 * @param {String} toolName - The tool name.
 * @param {Object} options - The custom options. @default from tools/default.js
 * @param {Array} viewports - The hmtl element id to be used for tool initialization.
 * @param {Boolean} doNotSetInStore - Flag to avoid setting in store (useful on tools initialization eg in addDefaultTools). NOTE: This is just a hack, we must rework tools/ui sync.
 */
const setToolActive = function (toolName, options, viewports, doNotSetInStore) {
    var _a, _b;
    let defaultOpt = Object.assign({}, (_a = default_1.DEFAULT_TOOLS[toolName]) === null || _a === void 0 ? void 0 : _a.options); // deep copy obj because otherwise cornerstone tools will modify it
    (0, lodash_1.extend)(defaultOpt, options);
    if (viewports && viewports.length > 0) {
        // activate and update only for "viewports"
        (0, lodash_1.each)(viewports, function (elementId) {
            let el = document.getElementById(elementId);
            cornerstone_tools_1.default.setToolActiveForElement(el, toolName, defaultOpt);
            if (el) {
                tryUpdateImage(el);
            }
        });
    }
    else {
        // activate and update all
        cornerstone_tools_1.default.setToolActive(toolName, defaultOpt);
        let enabledElements = cornerstone_core_1.default.getEnabledElements();
        (0, lodash_1.each)(enabledElements, enel => {
            tryUpdateImage(enel.element);
        });
    }
    // set active tool in larvitar store
    // mouseButtonMask is now an array, thanks to cs tools "setToolActiveForElement",
    // but only if it has a rendered image in the viewport (!)
    // so we must check the type anyway for type coherence
    if (((_b = default_1.DEFAULT_TOOLS[toolName]) === null || _b === void 0 ? void 0 : _b.defaultActive) === true) {
        doNotSetInStore = false;
    }
    if (!doNotSetInStore && defaultOpt.mouseButtonMask) {
        if (typeof defaultOpt.mouseButtonMask == "number") {
            defaultOpt.mouseButtonMask = [defaultOpt.mouseButtonMask];
        }
        if (defaultOpt.mouseButtonMask.includes(1)) {
            (0, imageStore_1.set)(["leftActiveTool", toolName]);
        }
        if (defaultOpt.mouseButtonMask.includes(2)) {
            (0, imageStore_1.set)(["rightActiveTool", toolName]);
        }
    }
};
exports.setToolActive = setToolActive;
/**
 * Set Tool "disabled" on all elements (ie, not rendered) & refresh cornerstone elements
 * @function setToolDisabled
 * @param {String} toolName - The tool name.
 * @param {Array} viewports - The hmtl element id to be used for tool initialization.
 * @param {Boolean} resetCursor - Flag to restore native cursor. @default true
 */
const setToolDisabled = function (toolName, viewports, resetCursor = true) {
    if (viewports && viewports.length > 0) {
        // disable and update only for "viewports"
        (0, lodash_1.each)(viewports, function (elementId) {
            let el = document.getElementById(elementId);
            if (!el) {
                console.warn("setToolDisabled: element not found:", elementId);
                return;
            }
            cornerstone_tools_1.default.setToolDisabledForElement(el, toolName);
            if (resetCursor && el && el.style) {
                // restore native cursor
                el.style.cursor = "initial";
                tryUpdateImage(el);
            }
        });
    }
    else {
        // disable and update all
        cornerstone_tools_1.default.setToolDisabled(toolName);
        let enabledElements = cornerstone_core_1.default.getEnabledElements();
        (0, lodash_1.each)(enabledElements, enel => {
            if (resetCursor) {
                // restore native cursor
                enel.element.style.cursor = "initial";
                tryUpdateImage(enel.element);
            }
        });
    }
};
exports.setToolDisabled = setToolDisabled;
/**
 * Set Tool "enabled" on all elements (ie, rendered but not manipulable) & refresh cornerstone elements
 * @function setToolEnabled
 * @param {String} toolName - The tool name.
 * @param {Array} viewports - The hmtl element id to be used for tool initialization.
 * @param {Boolean} resetCursor - Flag to restore native cursor. @default true
 */
const setToolEnabled = function (toolName, viewports, resetCursor = true) {
    if (viewports && viewports.length > 0) {
        // enable and update only for "viewports"
        (0, lodash_1.each)(viewports, function (elementId) {
            let el = document.getElementById(elementId);
            if (!el) {
                console.warn("setToolDisabled: element not found:", elementId);
                return;
            }
            cornerstone_tools_1.default.setToolEnabledForElement(el, toolName);
            if (resetCursor && el && el.style) {
                // restore native cursor
                el.style.cursor = "initial";
                tryUpdateImage(el);
            }
        });
    }
    else {
        // enable and update all
        cornerstone_tools_1.default.setToolEnabled(toolName);
        let enabledElements = cornerstone_core_1.default.getEnabledElements();
        (0, lodash_1.each)(enabledElements, enel => {
            if (resetCursor) {
                // restore native cursor
                enel.element.style.cursor = "initial";
                tryUpdateImage(enel.element);
            }
        });
    }
};
exports.setToolEnabled = setToolEnabled;
/**
 * Set Tool "enabled" on all elements (ie, rendered and manipulable passively) & refresh cornerstone elements
 * @function setToolPassive
 * @param {String} toolName - The tool name.
 * @param {Array} viewports - The hmtl element id to be used for tool initialization.
 */
const setToolPassive = function (toolName, viewports) {
    if (viewports && viewports.length > 0) {
        // activate and update only for "viewports"
        (0, lodash_1.each)(viewports, function (elementId) {
            let el = document.getElementById(elementId);
            if (!el) {
                console.warn("setToolDisabled: element not found:", elementId);
                return;
            }
            cornerstone_tools_1.default.setToolPassiveForElement(el, toolName);
            tryUpdateImage(el);
        });
    }
    else {
        // activate and update all
        cornerstone_tools_1.default.setToolPassive(toolName);
        let enabledElements = cornerstone_core_1.default.getEnabledElements();
        (0, lodash_1.each)(enabledElements, enel => {
            tryUpdateImage(enel.element);
        });
    }
};
exports.setToolPassive = setToolPassive;
/** @inner Internal module functions */
/**
 * Set cornerstone tools custom configuration (extend default configuration)
 * @function setToolsStyle
 * @param {Object} style - the style object (see tools/defaults.js)
 */
const setToolsStyle = function (style) {
    (0, lodash_1.extend)(default_1.DEFAULT_STYLE, style);
    let fontFamily = default_1.DEFAULT_STYLE.fontFamily;
    let fontSize = default_1.DEFAULT_STYLE.fontSize;
    cornerstone_tools_1.default.toolStyle.setToolWidth(default_1.DEFAULT_STYLE.width);
    cornerstone_tools_1.default.toolColors.setToolColor(default_1.DEFAULT_STYLE.color);
    cornerstone_tools_1.default.toolColors.setActiveColor(default_1.DEFAULT_STYLE.activeColor);
    cornerstone_tools_1.default.toolColors.setFillColor(default_1.DEFAULT_STYLE.fillColor); // used only by FreehandRoiTool inside handles
    cornerstone_tools_1.default.textStyle.setFont(`${fontSize}px ${fontFamily}`);
    cornerstone_tools_1.default.textStyle.setBackgroundColor(default_1.DEFAULT_STYLE.backgroundColor);
};
exports.setToolsStyle = setToolsStyle;


/***/ }),

/***/ 7307:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module imaging/tools/segmentation
 *  @desc  This file provides functionalities
 *         for handling masks and luts
 */
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.deleteMask = exports.redoLastStroke = exports.undoLastStroke = exports.setBrushProps = exports.disableBrushTool = exports.enableBrushTool = exports.clearSegmentationState = exports.setMaskProps = exports.toggleContourMode = exports.toggleVisibility = exports.setInactiveLabelOpacity = exports.setActiveLabelOpacity = exports.setActiveSegment = exports.getActiveLabelmapBuffer = exports.setActiveLabelmap = exports.loadMaskSlice = exports.addSegmentationMask = exports.initSegmentationModule = exports.getLabelColor = exports.setLabelColor = exports.forceRender = exports.hexToRgb = exports.rgbToHex = void 0;
// external libraries
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
const cornerstone_tools_1 = __importDefault(__webpack_require__(4030));
const lodash_1 = __webpack_require__(6486);
const segModule = cornerstone_tools_1.default.getModule("segmentation");
const { getters, setters } = segModule;
// internal libraries
const main_1 = __webpack_require__(3272);
const imageUtils_1 = __webpack_require__(8345);
const imageStore_1 = __importDefault(__webpack_require__(5278));
const imageTools_1 = __webpack_require__(4973);
// custom code
const setLabelMap3D_1 = __webpack_require__(8737);
// override function
setters.labelmap3DForElement = setLabelMap3D_1.setLabelmap3DForElement;
// General segmentation cs tools module configuration
const config = {
    arrayType: 0,
    renderOutline: false,
    renderFill: true,
    shouldRenderInactiveLabelmaps: true,
    radius: 10,
    minRadius: 1,
    maxRadius: 50,
    segmentsPerLabelmap: 10,
    fillAlpha: 0.9,
    fillAlphaInactive: 0.9,
    outlineAlpha: 1.0,
    outlineAlphaInactive: 1.0,
    outlineWidth: 1,
    storeHistory: true
};
// ====================================================
// utils to convert from hex to rgb and vice-versa ====
// ====================================================
function componentToHex(c) {
    var hex = c.toString(16);
    return hex.length == 1 ? "0" + hex : hex;
}
function rgbToHex(c) {
    let r = componentToHex(c[0]);
    let g = componentToHex(c[1]);
    let b = componentToHex(c[2]);
    return "#" + r + g + b;
}
exports.rgbToHex = rgbToHex;
function hexToRgb(hex) {
    var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
    if (!result) {
        console.error("Error parsing hex color");
        return [0, 0, 0];
    }
    return [
        parseInt(result[1], 16),
        parseInt(result[2], 16),
        parseInt(result[3], 16)
    ];
}
exports.hexToRgb = hexToRgb;
/**
 * Convert color from hsv to rgb
 * @param {Array} color as [h,s,v] 0-1
 * @returns color as [r,g,b] 0-255
 */
function HSVtoRGB([h, s, v]) {
    var r, g, b, i, f, p, q, t;
    i = Math.floor(h * 6);
    f = h * 6 - i;
    p = v * (1 - s);
    q = v * (1 - f * s);
    t = v * (1 - (1 - f) * s);
    switch (i % 6) {
        case 0:
            (r = v), (g = t), (b = p);
            break;
        case 1:
            (r = q), (g = v), (b = p);
            break;
        case 2:
            (r = p), (g = v), (b = t);
            break;
        case 3:
            (r = p), (g = q), (b = v);
            break;
        case 4:
            (r = t), (g = p), (b = v);
            break;
        case 5:
            (r = v), (g = p), (b = q);
            break;
        default:
            (r = v), (g = t), (b = p);
            console.error("HSVtoRGB: Input color must be [h,s,v] 0-1");
    }
    return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
}
/**
 * Force cs tools refresh on all enabled images
 */
function forceRender() {
    let enabledElements = cornerstone_core_1.default.getEnabledElements();
    enabledElements.forEach(enEl => {
        cornerstone_core_1.default.updateImage(enEl.element);
    });
}
exports.forceRender = forceRender;
/**
 * Generate the custom LUT - single volume version
 */
function generateLUT(opacity) {
    let lut = new Array(segModule.configuration.segmentsPerLabelmap).fill(0);
    lut = lut.map((e, i) => {
        return HSVtoRGB([i / lut.length, 1, 1]).concat(Math.round(opacity * 255));
    });
    return lut;
}
/**
 * Generate the custom LUT - multiple volume version
 * @param {String} hex_color - color for LUT in the #RRGGBB form
 * @param {NUmber} opacity - number between 0 and 1
 */
function generateUniformLUT(hex_color, opacity) {
    let lut = new Array(segModule.configuration.segmentsPerLabelmap);
    let rgb_color = hexToRgb(hex_color);
    let rgba_color = rgb_color.concat(Math.round(opacity * 255));
    lut.fill(rgba_color);
    return lut;
}
/**
 * Set color for label
 * @param {Number} labelId
 * @param {String} color in hex format
 */
function setLabelColor(labelId, color) {
    let volumeId = 0; // TODO MULTIVOLUME
    let rgb = hexToRgb(color);
    let rgba = [...rgb, 128];
    setters.colorForSegmentIndexOfColorLUT(volumeId, labelId, rgba);
    // force render ? depends on image visualization (render all ?)
}
exports.setLabelColor = setLabelColor;
/**
 * Get color from label
 * @param {Number} labelId
 * @returns {String} Color in hex format
 */
function getLabelColor(labelId) {
    let volumeId = 0; // TODO MULTIVOLUME
    let rgba = getters.colorForSegmentIndexColorLUT(volumeId, labelId);
    return rgbToHex(rgba);
}
exports.getLabelColor = getLabelColor;
/**
 * A function to group all settings to load before masks
 * @param {Object} customConfig - Object containing override values for segmentation module config
 */
function initSegmentationModule(customConfig) {
    // set configuration
    segModule.configuration = (0, lodash_1.cloneDeep)(config);
    (0, lodash_1.extend)(segModule.configuration, customConfig);
}
exports.initSegmentationModule = initSegmentationModule;
/**
 * Add segmentation mask to segmentation module
 * @param {Object} props - The mask properties (labelId, color and opacity)
 * @param {TypedArray} - The mask data array
 * @param {String} elementId - The target html element Id or its DOM HTMLElement
 * @returns {Promise} - Return a promise which will resolve when segmentation mask is added
 */
function addSegmentationMask(props, data, elementId) {
    let promise = new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
        let element = (0, imageUtils_1.isElement)(elementId)
            ? elementId
            : document.getElementById(elementId);
        if (!element) {
            console.error("invalid html element: " + elementId);
            return;
        }
        const res = yield setters.labelmap3DForElement(element, data.buffer, props.labelId);
        // if user set a color property, use that color for all segments on the labelmap
        let lut = props.color
            ? generateUniformLUT(props.color, props.opacity)
            : generateLUT(props.opacity);
        setters.colorLUT(props.labelId, lut);
        // bind labelmap to colorLUT
        let labelmap3d = getters.labelmap3D(element, props.labelId);
        setters.colorLUTIndexForLabelmap3D(labelmap3d, props.labelId);
        // set current imageIdIndex in tool state
        let currentImageIdIndex = imageStore_1.default.get(["viewports", element.id, "sliceId"]);
        if (currentImageIdIndex !== "error" && currentImageIdIndex >= 0) {
            (0, imageTools_1.updateStackToolState)(element.id, currentImageIdIndex);
        }
        else {
            console.error("Cannot get currentImageIdIndex");
        }
        resolve();
    }));
    return promise;
}
exports.addSegmentationMask = addSegmentationMask;
/**
 * Set a new mask slice into the labelmap buffer
 * @param {String} elementId - The target html element Id or its DOM HTMLElement
 * @param {Number} sliceIndex - the index of the new mask slice
 * @param {ArrayBuffer} pixelData - the pixelData array
 */
function loadMaskSlice(elementId, sliceIndex, pixelData) {
    // optimization: if pixelData contains no labels, return
    if ((0, lodash_1.sum)(pixelData) === 0) {
        return;
    }
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.error("invalid html element: " + elementId);
        return;
    }
    let volumeId = 0; // TODO for multivolume
    // get labelmap buffer
    let labelmaps2D = getters.labelmap3D(element, volumeId).labelmaps2D;
    // add if not alresdy present
    if (!labelmaps2D[sliceIndex]) {
        labelmaps2D[sliceIndex] = {};
    }
    labelmaps2D[sliceIndex].pixelData = pixelData;
    setters.updateSegmentsOnLabelmap2D(labelmaps2D[sliceIndex]);
    cornerstone_core_1.default.updateImage(element);
}
exports.loadMaskSlice = loadMaskSlice;
/**
 * Activate a specific labelmap through its labelId
 * @param {Number} labelId - The labelmap id to activate
 * @param {String} elementId - The target html element Id or its DOM HTMLElement
 */
function setActiveLabelmap(labelId, elementId) {
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.error("invalid html element: " + elementId);
        return;
    }
    setters.activeLabelmapIndex(element, labelId);
}
exports.setActiveLabelmap = setActiveLabelmap;
/**
 * Get active labelmap for target element
 * @param {String} elementId - The target html element Id or its DOM HTMLElement
 * @returns {Object} The active labelmap object that contains the buffer
 */
function getActiveLabelmapBuffer(elementId) {
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.error("invalid html element: " + elementId);
        return;
    }
    return getters.activeLabelmapBuffer(element);
}
exports.getActiveLabelmapBuffer = getActiveLabelmapBuffer;
/**
 * Activate a specific segment through its index
 * @param {Number} segmentIndex - The segment index to activate
 * @param {String} elementId - The target html element Id or its DOM HTMLElement
 */
function setActiveSegment(segmentIndex, elementId) {
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.error("invalid html element: " + elementId);
        return;
    }
    setters.activeSegmentIndex(element, segmentIndex);
}
exports.setActiveSegment = setActiveSegment;
/**
 * Change opacity for active label
 * @param {Number} opacity - The desired opacity value
 */
function setActiveLabelOpacity(opacity) {
    segModule.configuration.fillAlpha = opacity;
    forceRender();
}
exports.setActiveLabelOpacity = setActiveLabelOpacity;
/**
 * Change opacity for inactive labels
 * @param {Number} opacity - The desired opacity value
 */
function setInactiveLabelOpacity(opacity) {
    segModule.configuration.fillAlphaInactive = opacity;
    forceRender();
}
exports.setInactiveLabelOpacity = setInactiveLabelOpacity;
/**
 * Toggle mask visibility
 * @param {String} elementId - The target html element Id or its DOM HTMLElement
 * @param {Number} labelId - The id of the mask label
 */
function toggleVisibility(elementId, labelId) {
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.error("invalid html element: " + elementId);
        return;
    }
    let volumeId = 0; // TODO MULTIVOLUME
    setters.toggleSegmentVisibility(element, labelId, volumeId);
    cornerstone_core_1.default.updateImage(element);
}
exports.toggleVisibility = toggleVisibility;
/**
 * Toggle between 'contours mode' and 'filled mode'
 * @param {Bool} toggle - Contour mode enabled if true
 */
function toggleContourMode(toggle) {
    if (toggle) {
        segModule.configuration.fillAlpha = 0.0;
        segModule.configuration.fillAlphaInactive = 0.0;
        segModule.configuration.outlineAlpha = 1.0;
        segModule.configuration.outlineAlphaInactive = 1.0;
        segModule.configuration.outlineWidth = 3;
    }
    else {
        segModule.configuration.fillAlpha = config.fillAlpha;
        segModule.configuration.fillAlphaInactive = config.fillAlphaInactive;
        segModule.configuration.outlineAlpha = config.outlineAlpha;
        segModule.configuration.outlineAlphaInactive = config.outlineAlphaInactive;
        segModule.configuration.outlineWidth = config.outlineWidth;
    }
    forceRender();
}
exports.toggleContourMode = toggleContourMode;
/**
 * Set mask appearance props
 * @param {Object} maskProps - The mask appearance props (labelId, visualization [0=filled, 1=contour, 2=hidden], opacity (if mode=0), between 0 and 1)
 */
function setMaskProps(props) {
    // Lut index and segment values are hardcoded because they will depend on design choices:
    // eg single/multiple volumes for segmentations
    let lutIndex = props.labelId;
    let labelIndex = props.labelId;
    // let segmentValue = MAP_VALUES[props.id];
    let segmentValue = 1; // binary mask, segment 1 is the only to be affected by color & opacity
    let currentColor = getters.colorForSegmentIndexColorLUT(props.labelId, segmentValue);
    let htmlelement = document.getElementById("axial");
    let newColor = currentColor;
    switch (props.visualization) {
        // full
        case 0 /* MaskVisualizations.FILL */:
            segModule.configuration.renderOutline = true;
            getters.isSegmentVisible(htmlelement, segmentValue, labelIndex)
                ? null
                : setters.toggleSegmentVisibility(htmlelement, segmentValue, labelIndex);
            newColor[3] = Math.round(props.opacity * 255);
            setters.colorForSegmentIndexOfColorLUT(lutIndex, segmentValue, newColor);
            break;
        // contours
        case 1 /* MaskVisualizations.CONTOUR */:
            segModule.configuration.renderOutline = true;
            getters.isSegmentVisible(htmlelement, segmentValue, labelIndex)
                ? null
                : setters.toggleSegmentVisibility(htmlelement, segmentValue, labelIndex);
            newColor[3] = 0;
            setters.colorForSegmentIndexOfColorLUT(lutIndex, segmentValue, newColor);
            break;
        // hidden
        case 2 /* MaskVisualizations.HIDDEN */:
            setters.toggleSegmentVisibility(htmlelement, segmentValue, labelIndex);
            break;
    }
    forceRender();
}
exports.setMaskProps = setMaskProps;
/**
 * Clear state for segmentation module
 */
function clearSegmentationState() {
    segModule.state.series = {};
}
exports.clearSegmentationState = clearSegmentationState;
/**
 * Enable brushing
 * NOTE: if options contains `thresholds`, ThresholdsBrush is activated, otherwise BrushTool is activated.
 * Anyway, the activated tool name is returned
 * @param {Object} options - An object containing configuration values (eg radius, thresholds, etc...)
 */
function enableBrushTool(viewports, options) {
    setBrushProps(options);
    const brushType = "thresholds" in options ? "ThresholdsBrush" : "Brush";
    (0, main_1.setToolActive)(brushType, undefined, viewports);
    return brushType;
}
exports.enableBrushTool = enableBrushTool;
/**
 * Disable brushing
 * This function disables both brush tools, if found active on `viewports`
 * @param {String} toolToActivate - The name of the tool to activate after removing the brush @optional
 */
function disableBrushTool(viewports, toolToActivate) {
    viewports.forEach((viewport) => {
        const el = document.getElementById(viewport);
        if (cornerstone_tools_1.default.isToolActiveForElement(el, "ThresholdsBrush")) {
            (0, main_1.setToolDisabled)("ThresholdsBrush", [viewport]);
        }
        if (cornerstone_tools_1.default.isToolActiveForElement(el, "Brush")) {
            (0, main_1.setToolDisabled)("Brush", [viewport]);
        }
    });
    if (toolToActivate) {
        (0, main_1.setToolActive)(toolToActivate);
    }
}
exports.disableBrushTool = disableBrushTool;
/**
 * Change the brush props
 * @param {Object} props - The new brush props {radius: number[px], thresholds: array[min,max]}
 */
function setBrushProps(props) {
    (0, lodash_1.extend)(segModule.configuration, props);
    forceRender();
}
exports.setBrushProps = setBrushProps;
/**
 * Undo last brush operation (stroke)
 * @param {String} elementId - The target html element Id or its DOM HTMLElement
 */
function undoLastStroke(elementId) {
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.error("invalid html element: " + elementId);
        return;
    }
    let activeLabelMapIndex = segModule.getters.activeLabelmapIndex(element);
    setters.undo(element, activeLabelMapIndex);
}
exports.undoLastStroke = undoLastStroke;
/**
 * Redo last brush operation (stroke)
 * @param {String} elementId - The target html element Id or its DOM HTMLElement
 */
function redoLastStroke(elementId) {
    let element = (0, imageUtils_1.isElement)(elementId)
        ? elementId
        : document.getElementById(elementId);
    if (!element) {
        console.error("invalid html element: " + elementId);
        return;
    }
    let activeLabelMapIndex = segModule.getters.activeLabelmapIndex(element);
    setters.redo(element, activeLabelMapIndex);
}
exports.redoLastStroke = redoLastStroke;
/**
 * Delete mask from state
 * @param {Number} labelId - The labelmap id to delete
 */
function deleteMask(labelId) {
    let masks = (0, lodash_1.values)(segModule.state.series)[0].labelmaps3D;
    delete masks[labelId];
    forceRender();
}
exports.deleteMask = deleteMask;


/***/ }),

/***/ 4409:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

/** @module waveforms/ecg
 *  @desc This file provides utility functions for
 *        rendering ecg waveforms using plotly.js
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.updateECGFrame = exports.syncECGFrame = exports.renderECG = exports.unrenderECG = exports.getDefaultECGLayout = void 0;
// external libraries
const plotly_js_dist_min_1 = __importDefault(__webpack_require__(2479));
const imageRendering_1 = __webpack_require__(4767);
const imageStore_1 = __importDefault(__webpack_require__(5278));
const commonLoader_1 = __webpack_require__(326);
const imageTools_1 = __webpack_require__(4973);
/*
 * This module provides the following functions to be exported:
 * getDefaultECGLayout()
 * renderECG(data, divId, colorMarker, numberOfFrames, frameTime, frameId)
 * unrenderECG(divId)
 * syncECGFrame(traceData, seriesId, canvasId, numberOfFrames, divId)
 * updateECGFrame(traceData, frameId, numberOfFrames, divId)
 */
const DEFAULT_ECG_LAYOUT = {
    xaxis: {
        rangemode: "tozero",
        showgrid: true,
        gridcolor: "rgba(238,135,51,0.5)",
        dtick: 1,
        tickwidth: 2,
        tickcolor: "#f5f5f5",
        tickformat: ".2f",
        tickfont: {
            color: "#f5f5f5"
        }
    },
    yaxis: {
        rangemode: "nonnegative",
        showgrid: true,
        gridcolor: "rgba(238,135,51,0.5)",
        dtick: 20,
        tick0: 0,
        tickwidth: 2,
        tickcolor: "#f5f5f5",
        tickfont: {
            color: "#f5f5f5"
        }
    },
    showlegend: false,
    paper_bgcolor: "#000000",
    plot_bgcolor: "#000000",
    margin: {
        l: 80,
        r: 80,
        b: 50,
        t: 10,
        pad: 0
    }
};
/**
 * Get default layout for the plotly plot
 * @instance
 * @function getDefaultECGLayout
 * @returns {Object} defaultECGLayout - Default layout for the plotly plot
 */
const getDefaultECGLayout = function () {
    return DEFAULT_ECG_LAYOUT;
};
exports.getDefaultECGLayout = getDefaultECGLayout;
/**
 * Unrender ECG waveform previously rendered in a div
 * @instance
 * @function unrenderECG
 * @param {string} divId - DivId where waveform is rendered
 */
const unrenderECG = function (divId) {
    plotly_js_dist_min_1.default.purge(divId);
};
exports.unrenderECG = unrenderECG;
/**
 * Render ECG waveform in a div
 * @instance
 * @function renderECG
 * @param {number[]} data - ECG waveform data
 * @param {string} divId - DivId to render waveform in
 * @param {string} colorMarker - Color of the marker
 * @param {number} numberOfframes - Number of frames in the image
 * @param {number} frameTime - Time interval of each frame in the image
 * @param {number} frameId - FrameId of the image to be rendered
 * @param {Object} customLayout - Custom layout for the plotly plot
 * @returns {Object} traceData - Plotly trace data
 */
const renderECG = function (data, divId, colorMarker, numberOfFrames, frameTime, frameId, customLayout) {
    // convert info using frameTime and numberOfFrames
    const totalTime = (numberOfFrames - 1) * (frameTime * 1e-3);
    const dotX = Math.floor((frameId * data.length) / numberOfFrames);
    // build the trace data
    const trace = {
        x: data.map((_, i) => (i * totalTime) / data.length),
        y: data,
        mode: "lines",
        type: "scattergl",
        line: {
            width: 1.5,
            shape: "linear"
        }
    };
    // build the marker data
    const marker = {
        x: [dotX],
        y: [data[dotX]],
        mode: "markers",
        type: "scattergl",
        marker: {
            size: 12,
            color: colorMarker,
            symbol: "line-ns-open",
            line: {
                width: 3
            }
        }
    };
    // render data and update ranges
    const traceData = [trace, marker];
    let LAYOUT = customLayout
        ? customLayout
        : DEFAULT_ECG_LAYOUT;
    // fix the range of the x-axis
    LAYOUT.xaxis.range = [0, totalTime];
    // fix the grid of x-axis using a line for each frame
    LAYOUT.xaxis.dtick = LAYOUT.xaxis.dtick = totalTime / (numberOfFrames - 1);
    plotly_js_dist_min_1.default.newPlot(divId, traceData, LAYOUT, {
        responsive: true,
        displayModeBar: false
    });
    return traceData;
};
exports.renderECG = renderECG;
/**
 * Sync ECG waveform with rendered image on click
 * @instance
 * @function syncECGFrame
 * @param {Object} traceData - Plotly trace data
 * @param {string} seriesId - SeriesId of the image
 * @param {string} canvasId - CanvasId of the image
 * @param {number} numberOfFrames - Number of frames in the image
 * @param {string} divId - DivId to render waveform in
 */
const syncECGFrame = function (traceData, seriesId, canvasId, numberOfFrames, divId) {
    // document.getElementById('myDiv') return HTMLElement. This type doesn't
    // contain method 'on' because this method is added within plotly-latest.min.js.
    const domElement = document.getElementById(divId);
    if (domElement) {
        domElement.on("plotly_click", function (data) {
            traceData[1].x = [data.points[0].x];
            traceData[1].y = [data.points[0].y];
            plotly_js_dist_min_1.default.extendTraces(divId, {}, [0]);
            const totalTime = traceData[0].x[traceData[0].x.length - 1];
            const frameId = Math.floor((data.points[0].x * numberOfFrames - 1) / totalTime);
            const series = (0, commonLoader_1.getSeriesDataFromLarvitarManager)(seriesId);
            if (series) {
                (0, imageRendering_1.updateImage)(series, canvasId, frameId, false);
                (0, imageTools_1.updateStackToolState)(canvasId, frameId);
            }
        });
    }
    const canvasElement = document.getElementById(canvasId);
    canvasElement.addEventListener("wheel", function (e) {
        const viewport = imageStore_1.default.get(["viewports", canvasId]);
        (0, exports.updateECGFrame)(traceData, viewport.sliceId, numberOfFrames, divId);
        (0, imageTools_1.updateStackToolState)(canvasId, viewport.sliceId);
    });
};
exports.syncECGFrame = syncECGFrame;
/**
 * Sync ECG waveform with rendered image on click
 * @instance
 * @function updateECGFrame
 * @param {Object} traceData - Plotly trace data
 * @param {number} frameId - FrameId of the image
 * @param {number} numberOfFrames - Number of frames in the image
 * @param {string} divId - DivId to render waveform in
 */
const updateECGFrame = function (traceData, frameId, numberOfFrames, divId) {
    const totalTime = traceData[0].x[traceData[0].x.length - 1];
    const dotX = (frameId * totalTime) / (numberOfFrames - 1);
    const index = traceData[0].x.findIndex((x) => x >= dotX);
    const dotY = traceData[0].y[index];
    traceData[1].x = [dotX];
    traceData[1].y = Array.isArray(dotY) ? dotY : [dotY];
    plotly_js_dist_min_1.default.extendTraces(divId, {}, [0]);
};
exports.updateECGFrame = updateECGFrame;


/***/ }),

/***/ 8492:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.initializeFileImageLoader = exports.initializeWebImageLoader = exports.initializeImageLoader = exports.setActiveLayer = exports.getActiveLayer = exports.updateLayer = exports.buildLayer = exports.customizeByteArray = exports.anonymize = exports.exportImageToBase64 = exports.importNRRDImage = exports.buildDataAsync = exports.buildData = exports.getCachedPixelData = exports.buildHeader = exports.getImageMetadata = exports.getDistanceBetweenSlices = exports.getReslicedPixeldata = exports.getReslicedMetadata = exports.getMeanValue = exports.randomId = exports.getSortedStack = exports.getTypedArrayFromDataType = exports.getPixelRepresentation = exports.getMaxPixelValue = exports.getMinPixelValue = exports.getNormalOrientation = exports.setImageCustomPreset = exports.setImagePreset = exports.getImagePresets = exports.getDefaultECGLayout = exports.updateECGFrame = exports.syncECGFrame = exports.unrenderECG = exports.renderECG = exports.parseECG = exports.store = exports.deactivatePerformanceMonitor = exports.activatePerformanceMonitor = exports.getPerformanceMonitor = exports.getAvailableMemory = exports.getUsedMemory = exports.checkMemoryAllocation = exports.checkAndClearMemory = exports.cornerstoneDICOMImageLoader = exports.segModule = exports.parseDicom = exports.cornerstoneTools = exports.cornerstone = exports.VERSION = void 0;
exports.getSliceNumberFromImageId = exports.getImageIdFromSlice = exports.loadNrrdImage = exports.getNrrdImageId = exports.buildNrrdImage = exports.getSopInstanceUIDFromLarvitarManager = exports.getImageFrame = exports.getSeriesDataFromLarvitarManager = exports.removeSeriesFromLarvitarManager = exports.resetLarvitarManager = exports.getLarvitarImageTracker = exports.getLarvitarManager = exports.populateLarvitarManager = exports.updateLarvitarManager = exports.parseContours = exports.HSVToRGB = exports.fillPixelData = exports.addColorMap = exports.applyColorMap = exports.getColormapsList = exports.resliceSeries = exports.rotateImageRight = exports.rotateImageLeft = exports.flipImageVertical = exports.flipImageHorizontal = exports.invertImage = exports.storeViewportData = exports.toggleMouseToolsListeners = exports.updateViewportData = exports.resetViewports = exports.redrawImage = exports.updateImage = exports.renderImage = exports.resizeViewport = exports.unloadViewport = exports.disableViewport = exports.renderWebImage = exports.renderDICOMPDF = exports.renderFileImage = exports.loadAndCacheImages = exports.clearImageCache = exports.clearImageParsing = exports.parseDataSet = exports.readFiles = exports.readFile = exports.updateLoadedStack = exports.registerDsaImageLoader = exports.registerMultiFrameImageLoader = exports.registerResliceLoader = exports.registerNRRDImageLoader = void 0;
exports.registerExternalTool = exports.setDefaultToolsProps = exports.getDefaultToolsByType = exports.dvTools = exports.DEFAULT_TOOLS = exports.exportAnnotations = exports.setToolPassive = exports.setToolEnabled = exports.setToolDisabled = exports.setToolActive = exports.addTool = exports.addDefaultTools = exports.setToolsStyle = exports.initializeCSTools = exports.csToolsUpdateImageIndex = exports.csToolsUpdateImageIds = exports.csToolsCreateStack = exports.setSegmentationConfig = exports.updateStackToolState = exports.syncToolStack = exports.clearCornerstoneElements = exports.addToolStateSingleSlice = exports.updateDiameterTool = exports.clearToolStateByName = exports.getToolState = exports.clearMeasurements = exports.addSeedsTool = exports.addStackStateToElement = exports.getCurrentMaskData = exports.addMaskEditingTool = exports.addContoursTool = exports.addDiameterTool = exports.applyDSAShift = exports.getFileImageId = exports.populateFileManager = exports.resetFileManager = exports.resetFileLoader = exports.getFileManager = exports.populateDsaImageIds = exports.clearMultiFrameCache = exports.getMultiFrameImageId = exports.buildMultiFrameImage = exports.loadMultiFrameImage = exports.unloadAndRecacheImageStackDSA = exports.loadAndCacheImageStack = exports.cacheImages = exports.cacheImage = exports.getDicomImageId = exports.loadReslicedImage = exports.getNrrdSerieDimensions = void 0;
exports.getActiveLabelmapBuffer = exports.toggleVisibility = exports.toggleContourMode = exports.disableBrushTool = exports.enableBrushTool = exports.deleteMask = exports.clearSegmentationState = exports.rgbToHex = exports.hexToRgb = exports.setBrushProps = exports.redoLastStroke = exports.undoLastStroke = exports.setActiveSegment = exports.setActiveLabelmap = exports.addSegmentationMask = exports.initSegmentationModule = exports.removeMouseKeyHandlers = exports.addMouseKeyHandlers = exports.loadAnnotations = exports.saveAnnotations = void 0;
const package_json_1 = __importDefault(__webpack_require__(4147));
const VERSION = package_json_1.default.version;
exports.VERSION = VERSION;
console.groupCollapsed(`%cLARVITAR %cv${VERSION}`, "color: #404888; background: #209A71; font-weight: 900;", "color: #BED730; background: #209A71; font-weight: 900;");
const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
exports.cornerstone = cornerstone_core_1.default;
const cornerstone_tools_1 = __importDefault(__webpack_require__(4030));
exports.cornerstoneTools = cornerstone_tools_1.default;
const dicom_parser_1 = __webpack_require__(4705);
Object.defineProperty(exports, "parseDicom", ({ enumerable: true, get: function () { return dicom_parser_1.parseDicom; } }));
const cornerstone_wado_image_loader_1 = __importDefault(__webpack_require__(2424));
Object.defineProperty(exports, "cornerstoneDICOMImageLoader", ({ enumerable: true, get: function () { return cornerstone_wado_image_loader_1.default; } }));
const segModule = cornerstone_tools_1.default.getModule("segmentation");
exports.segModule = segModule;
const memory_1 = __webpack_require__(3862);
Object.defineProperty(exports, "checkAndClearMemory", ({ enumerable: true, get: function () { return memory_1.checkAndClearMemory; } }));
Object.defineProperty(exports, "checkMemoryAllocation", ({ enumerable: true, get: function () { return memory_1.checkMemoryAllocation; } }));
Object.defineProperty(exports, "getUsedMemory", ({ enumerable: true, get: function () { return memory_1.getUsedMemory; } }));
Object.defineProperty(exports, "getAvailableMemory", ({ enumerable: true, get: function () { return memory_1.getAvailableMemory; } }));
const performance_1 = __webpack_require__(9391);
Object.defineProperty(exports, "getPerformanceMonitor", ({ enumerable: true, get: function () { return performance_1.getPerformanceMonitor; } }));
Object.defineProperty(exports, "activatePerformanceMonitor", ({ enumerable: true, get: function () { return performance_1.activatePerformanceMonitor; } }));
Object.defineProperty(exports, "deactivatePerformanceMonitor", ({ enumerable: true, get: function () { return performance_1.deactivatePerformanceMonitor; } }));
const imageStore_1 = __importDefault(__webpack_require__(5278));
exports.store = imageStore_1.default;
console.log(imageStore_1.default);
console.groupEnd();
const imageContours_1 = __webpack_require__(4918);
Object.defineProperty(exports, "parseContours", ({ enumerable: true, get: function () { return imageContours_1.parseContours; } }));
const ecg_1 = __webpack_require__(2639);
Object.defineProperty(exports, "parseECG", ({ enumerable: true, get: function () { return ecg_1.parseECG; } }));
const ecg_2 = __webpack_require__(4409);
Object.defineProperty(exports, "renderECG", ({ enumerable: true, get: function () { return ecg_2.renderECG; } }));
Object.defineProperty(exports, "unrenderECG", ({ enumerable: true, get: function () { return ecg_2.unrenderECG; } }));
Object.defineProperty(exports, "syncECGFrame", ({ enumerable: true, get: function () { return ecg_2.syncECGFrame; } }));
Object.defineProperty(exports, "updateECGFrame", ({ enumerable: true, get: function () { return ecg_2.updateECGFrame; } }));
Object.defineProperty(exports, "getDefaultECGLayout", ({ enumerable: true, get: function () { return ecg_2.getDefaultECGLayout; } }));
const imagePresets_1 = __webpack_require__(4696);
Object.defineProperty(exports, "getImagePresets", ({ enumerable: true, get: function () { return imagePresets_1.getImagePresets; } }));
Object.defineProperty(exports, "setImagePreset", ({ enumerable: true, get: function () { return imagePresets_1.setImagePreset; } }));
Object.defineProperty(exports, "setImageCustomPreset", ({ enumerable: true, get: function () { return imagePresets_1.setImageCustomPreset; } }));
const imageUtils_1 = __webpack_require__(8345);
Object.defineProperty(exports, "getNormalOrientation", ({ enumerable: true, get: function () { return imageUtils_1.getNormalOrientation; } }));
Object.defineProperty(exports, "getMinPixelValue", ({ enumerable: true, get: function () { return imageUtils_1.getMinPixelValue; } }));
Object.defineProperty(exports, "getMaxPixelValue", ({ enumerable: true, get: function () { return imageUtils_1.getMaxPixelValue; } }));
Object.defineProperty(exports, "getPixelRepresentation", ({ enumerable: true, get: function () { return imageUtils_1.getPixelRepresentation; } }));
Object.defineProperty(exports, "getTypedArrayFromDataType", ({ enumerable: true, get: function () { return imageUtils_1.getTypedArrayFromDataType; } }));
Object.defineProperty(exports, "getSortedStack", ({ enumerable: true, get: function () { return imageUtils_1.getSortedStack; } }));
Object.defineProperty(exports, "randomId", ({ enumerable: true, get: function () { return imageUtils_1.randomId; } }));
Object.defineProperty(exports, "getMeanValue", ({ enumerable: true, get: function () { return imageUtils_1.getMeanValue; } }));
Object.defineProperty(exports, "getReslicedMetadata", ({ enumerable: true, get: function () { return imageUtils_1.getReslicedMetadata; } }));
Object.defineProperty(exports, "getReslicedPixeldata", ({ enumerable: true, get: function () { return imageUtils_1.getReslicedPixeldata; } }));
Object.defineProperty(exports, "getDistanceBetweenSlices", ({ enumerable: true, get: function () { return imageUtils_1.getDistanceBetweenSlices; } }));
Object.defineProperty(exports, "getImageMetadata", ({ enumerable: true, get: function () { return imageUtils_1.getImageMetadata; } }));
const imageIo_1 = __webpack_require__(2658);
Object.defineProperty(exports, "buildHeader", ({ enumerable: true, get: function () { return imageIo_1.buildHeader; } }));
Object.defineProperty(exports, "getCachedPixelData", ({ enumerable: true, get: function () { return imageIo_1.getCachedPixelData; } }));
Object.defineProperty(exports, "buildData", ({ enumerable: true, get: function () { return imageIo_1.buildData; } }));
Object.defineProperty(exports, "buildDataAsync", ({ enumerable: true, get: function () { return imageIo_1.buildDataAsync; } }));
Object.defineProperty(exports, "importNRRDImage", ({ enumerable: true, get: function () { return imageIo_1.importNRRDImage; } }));
Object.defineProperty(exports, "exportImageToBase64", ({ enumerable: true, get: function () { return imageIo_1.exportImageToBase64; } }));
const imageAnonymization_1 = __webpack_require__(32);
Object.defineProperty(exports, "anonymize", ({ enumerable: true, get: function () { return imageAnonymization_1.anonymize; } }));
const imageCustomTag_1 = __webpack_require__(2606);
Object.defineProperty(exports, "customizeByteArray", ({ enumerable: true, get: function () { return imageCustomTag_1.customizeByteArray; } }));
const imageLayers_1 = __webpack_require__(9826);
Object.defineProperty(exports, "buildLayer", ({ enumerable: true, get: function () { return imageLayers_1.buildLayer; } }));
Object.defineProperty(exports, "updateLayer", ({ enumerable: true, get: function () { return imageLayers_1.updateLayer; } }));
Object.defineProperty(exports, "getActiveLayer", ({ enumerable: true, get: function () { return imageLayers_1.getActiveLayer; } }));
Object.defineProperty(exports, "setActiveLayer", ({ enumerable: true, get: function () { return imageLayers_1.setActiveLayer; } }));
const imageLoading_1 = __webpack_require__(5848);
Object.defineProperty(exports, "initializeImageLoader", ({ enumerable: true, get: function () { return imageLoading_1.initializeImageLoader; } }));
Object.defineProperty(exports, "initializeWebImageLoader", ({ enumerable: true, get: function () { return imageLoading_1.initializeWebImageLoader; } }));
Object.defineProperty(exports, "initializeFileImageLoader", ({ enumerable: true, get: function () { return imageLoading_1.initializeFileImageLoader; } }));
Object.defineProperty(exports, "registerNRRDImageLoader", ({ enumerable: true, get: function () { return imageLoading_1.registerNRRDImageLoader; } }));
Object.defineProperty(exports, "registerResliceLoader", ({ enumerable: true, get: function () { return imageLoading_1.registerResliceLoader; } }));
Object.defineProperty(exports, "registerMultiFrameImageLoader", ({ enumerable: true, get: function () { return imageLoading_1.registerMultiFrameImageLoader; } }));
Object.defineProperty(exports, "registerDsaImageLoader", ({ enumerable: true, get: function () { return imageLoading_1.registerDsaImageLoader; } }));
Object.defineProperty(exports, "updateLoadedStack", ({ enumerable: true, get: function () { return imageLoading_1.updateLoadedStack; } }));
const imageParsing_1 = __webpack_require__(1539);
Object.defineProperty(exports, "readFile", ({ enumerable: true, get: function () { return imageParsing_1.readFile; } }));
Object.defineProperty(exports, "readFiles", ({ enumerable: true, get: function () { return imageParsing_1.readFiles; } }));
Object.defineProperty(exports, "parseDataSet", ({ enumerable: true, get: function () { return imageParsing_1.parseDataSet; } }));
Object.defineProperty(exports, "clearImageParsing", ({ enumerable: true, get: function () { return imageParsing_1.clearImageParsing; } }));
const imageRendering_1 = __webpack_require__(4767);
Object.defineProperty(exports, "clearImageCache", ({ enumerable: true, get: function () { return imageRendering_1.clearImageCache; } }));
Object.defineProperty(exports, "loadAndCacheImages", ({ enumerable: true, get: function () { return imageRendering_1.loadAndCacheImages; } }));
Object.defineProperty(exports, "renderFileImage", ({ enumerable: true, get: function () { return imageRendering_1.renderFileImage; } }));
Object.defineProperty(exports, "renderDICOMPDF", ({ enumerable: true, get: function () { return imageRendering_1.renderDICOMPDF; } }));
Object.defineProperty(exports, "renderWebImage", ({ enumerable: true, get: function () { return imageRendering_1.renderWebImage; } }));
Object.defineProperty(exports, "disableViewport", ({ enumerable: true, get: function () { return imageRendering_1.disableViewport; } }));
Object.defineProperty(exports, "unloadViewport", ({ enumerable: true, get: function () { return imageRendering_1.unloadViewport; } }));
Object.defineProperty(exports, "resizeViewport", ({ enumerable: true, get: function () { return imageRendering_1.resizeViewport; } }));
Object.defineProperty(exports, "renderImage", ({ enumerable: true, get: function () { return imageRendering_1.renderImage; } }));
Object.defineProperty(exports, "updateImage", ({ enumerable: true, get: function () { return imageRendering_1.updateImage; } }));
Object.defineProperty(exports, "redrawImage", ({ enumerable: true, get: function () { return imageRendering_1.redrawImage; } }));
Object.defineProperty(exports, "resetViewports", ({ enumerable: true, get: function () { return imageRendering_1.resetViewports; } }));
Object.defineProperty(exports, "updateViewportData", ({ enumerable: true, get: function () { return imageRendering_1.updateViewportData; } }));
Object.defineProperty(exports, "storeViewportData", ({ enumerable: true, get: function () { return imageRendering_1.storeViewportData; } }));
Object.defineProperty(exports, "invertImage", ({ enumerable: true, get: function () { return imageRendering_1.invertImage; } }));
Object.defineProperty(exports, "flipImageHorizontal", ({ enumerable: true, get: function () { return imageRendering_1.flipImageHorizontal; } }));
Object.defineProperty(exports, "flipImageVertical", ({ enumerable: true, get: function () { return imageRendering_1.flipImageVertical; } }));
Object.defineProperty(exports, "rotateImageLeft", ({ enumerable: true, get: function () { return imageRendering_1.rotateImageLeft; } }));
Object.defineProperty(exports, "rotateImageRight", ({ enumerable: true, get: function () { return imageRendering_1.rotateImageRight; } }));
const imageReslice_1 = __webpack_require__(6817);
Object.defineProperty(exports, "resliceSeries", ({ enumerable: true, get: function () { return imageReslice_1.resliceSeries; } }));
const imageTools_1 = __webpack_require__(4973);
Object.defineProperty(exports, "addDiameterTool", ({ enumerable: true, get: function () { return imageTools_1.addDiameterTool; } }));
Object.defineProperty(exports, "addContoursTool", ({ enumerable: true, get: function () { return imageTools_1.addContoursTool; } }));
Object.defineProperty(exports, "addMaskEditingTool", ({ enumerable: true, get: function () { return imageTools_1.addMaskEditingTool; } }));
Object.defineProperty(exports, "getCurrentMaskData", ({ enumerable: true, get: function () { return imageTools_1.getCurrentMaskData; } }));
Object.defineProperty(exports, "addStackStateToElement", ({ enumerable: true, get: function () { return imageTools_1.addStackStateToElement; } }));
Object.defineProperty(exports, "addSeedsTool", ({ enumerable: true, get: function () { return imageTools_1.addSeedsTool; } }));
Object.defineProperty(exports, "clearMeasurements", ({ enumerable: true, get: function () { return imageTools_1.clearMeasurements; } }));
Object.defineProperty(exports, "getToolState", ({ enumerable: true, get: function () { return imageTools_1.getToolState; } }));
Object.defineProperty(exports, "clearToolStateByName", ({ enumerable: true, get: function () { return imageTools_1.clearToolStateByName; } }));
Object.defineProperty(exports, "updateDiameterTool", ({ enumerable: true, get: function () { return imageTools_1.updateDiameterTool; } }));
Object.defineProperty(exports, "addToolStateSingleSlice", ({ enumerable: true, get: function () { return imageTools_1.addToolStateSingleSlice; } }));
Object.defineProperty(exports, "clearCornerstoneElements", ({ enumerable: true, get: function () { return imageTools_1.clearCornerstoneElements; } }));
Object.defineProperty(exports, "syncToolStack", ({ enumerable: true, get: function () { return imageTools_1.syncToolStack; } }));
Object.defineProperty(exports, "updateStackToolState", ({ enumerable: true, get: function () { return imageTools_1.updateStackToolState; } }));
Object.defineProperty(exports, "setSegmentationConfig", ({ enumerable: true, get: function () { return imageTools_1.setSegmentationConfig; } }));
const main_1 = __webpack_require__(3272);
Object.defineProperty(exports, "csToolsCreateStack", ({ enumerable: true, get: function () { return main_1.csToolsCreateStack; } }));
Object.defineProperty(exports, "csToolsUpdateImageIds", ({ enumerable: true, get: function () { return main_1.csToolsUpdateImageIds; } }));
Object.defineProperty(exports, "csToolsUpdateImageIndex", ({ enumerable: true, get: function () { return main_1.csToolsUpdateImageIndex; } }));
Object.defineProperty(exports, "initializeCSTools", ({ enumerable: true, get: function () { return main_1.initializeCSTools; } }));
Object.defineProperty(exports, "setToolsStyle", ({ enumerable: true, get: function () { return main_1.setToolsStyle; } }));
Object.defineProperty(exports, "addDefaultTools", ({ enumerable: true, get: function () { return main_1.addDefaultTools; } }));
Object.defineProperty(exports, "addTool", ({ enumerable: true, get: function () { return main_1.addTool; } }));
Object.defineProperty(exports, "setToolActive", ({ enumerable: true, get: function () { return main_1.setToolActive; } }));
Object.defineProperty(exports, "setToolDisabled", ({ enumerable: true, get: function () { return main_1.setToolDisabled; } }));
Object.defineProperty(exports, "setToolEnabled", ({ enumerable: true, get: function () { return main_1.setToolEnabled; } }));
Object.defineProperty(exports, "setToolPassive", ({ enumerable: true, get: function () { return main_1.setToolPassive; } }));
Object.defineProperty(exports, "exportAnnotations", ({ enumerable: true, get: function () { return main_1.exportAnnotations; } }));
const default_1 = __webpack_require__(6694);
Object.defineProperty(exports, "DEFAULT_TOOLS", ({ enumerable: true, get: function () { return default_1.DEFAULT_TOOLS; } }));
Object.defineProperty(exports, "dvTools", ({ enumerable: true, get: function () { return default_1.dvTools; } }));
Object.defineProperty(exports, "getDefaultToolsByType", ({ enumerable: true, get: function () { return default_1.getDefaultToolsByType; } }));
Object.defineProperty(exports, "setDefaultToolsProps", ({ enumerable: true, get: function () { return default_1.setDefaultToolsProps; } }));
Object.defineProperty(exports, "registerExternalTool", ({ enumerable: true, get: function () { return default_1.registerExternalTool; } }));
const segmentation_1 = __webpack_require__(7307);
Object.defineProperty(exports, "initSegmentationModule", ({ enumerable: true, get: function () { return segmentation_1.initSegmentationModule; } }));
Object.defineProperty(exports, "addSegmentationMask", ({ enumerable: true, get: function () { return segmentation_1.addSegmentationMask; } }));
Object.defineProperty(exports, "clearSegmentationState", ({ enumerable: true, get: function () { return segmentation_1.clearSegmentationState; } }));
Object.defineProperty(exports, "deleteMask", ({ enumerable: true, get: function () { return segmentation_1.deleteMask; } }));
Object.defineProperty(exports, "setActiveLabelmap", ({ enumerable: true, get: function () { return segmentation_1.setActiveLabelmap; } }));
Object.defineProperty(exports, "setActiveSegment", ({ enumerable: true, get: function () { return segmentation_1.setActiveSegment; } }));
Object.defineProperty(exports, "enableBrushTool", ({ enumerable: true, get: function () { return segmentation_1.enableBrushTool; } }));
Object.defineProperty(exports, "disableBrushTool", ({ enumerable: true, get: function () { return segmentation_1.disableBrushTool; } }));
Object.defineProperty(exports, "undoLastStroke", ({ enumerable: true, get: function () { return segmentation_1.undoLastStroke; } }));
Object.defineProperty(exports, "redoLastStroke", ({ enumerable: true, get: function () { return segmentation_1.redoLastStroke; } }));
Object.defineProperty(exports, "setBrushProps", ({ enumerable: true, get: function () { return segmentation_1.setBrushProps; } }));
Object.defineProperty(exports, "toggleContourMode", ({ enumerable: true, get: function () { return segmentation_1.toggleContourMode; } }));
Object.defineProperty(exports, "toggleVisibility", ({ enumerable: true, get: function () { return segmentation_1.toggleVisibility; } }));
Object.defineProperty(exports, "hexToRgb", ({ enumerable: true, get: function () { return segmentation_1.hexToRgb; } }));
Object.defineProperty(exports, "rgbToHex", ({ enumerable: true, get: function () { return segmentation_1.rgbToHex; } }));
Object.defineProperty(exports, "getActiveLabelmapBuffer", ({ enumerable: true, get: function () { return segmentation_1.getActiveLabelmapBuffer; } }));
const commonLoader_1 = __webpack_require__(326);
Object.defineProperty(exports, "updateLarvitarManager", ({ enumerable: true, get: function () { return commonLoader_1.updateLarvitarManager; } }));
Object.defineProperty(exports, "populateLarvitarManager", ({ enumerable: true, get: function () { return commonLoader_1.populateLarvitarManager; } }));
Object.defineProperty(exports, "getLarvitarManager", ({ enumerable: true, get: function () { return commonLoader_1.getLarvitarManager; } }));
Object.defineProperty(exports, "getLarvitarImageTracker", ({ enumerable: true, get: function () { return commonLoader_1.getLarvitarImageTracker; } }));
Object.defineProperty(exports, "resetLarvitarManager", ({ enumerable: true, get: function () { return commonLoader_1.resetLarvitarManager; } }));
Object.defineProperty(exports, "removeSeriesFromLarvitarManager", ({ enumerable: true, get: function () { return commonLoader_1.removeSeriesFromLarvitarManager; } }));
Object.defineProperty(exports, "getSeriesDataFromLarvitarManager", ({ enumerable: true, get: function () { return commonLoader_1.getSeriesDataFromLarvitarManager; } }));
Object.defineProperty(exports, "getImageFrame", ({ enumerable: true, get: function () { return commonLoader_1.getImageFrame; } }));
Object.defineProperty(exports, "getSopInstanceUIDFromLarvitarManager", ({ enumerable: true, get: function () { return commonLoader_1.getSopInstanceUIDFromLarvitarManager; } }));
const nrrdLoader_1 = __webpack_require__(6934);
Object.defineProperty(exports, "buildNrrdImage", ({ enumerable: true, get: function () { return nrrdLoader_1.buildNrrdImage; } }));
Object.defineProperty(exports, "getNrrdImageId", ({ enumerable: true, get: function () { return nrrdLoader_1.getNrrdImageId; } }));
Object.defineProperty(exports, "loadNrrdImage", ({ enumerable: true, get: function () { return nrrdLoader_1.loadNrrdImage; } }));
Object.defineProperty(exports, "getImageIdFromSlice", ({ enumerable: true, get: function () { return nrrdLoader_1.getImageIdFromSlice; } }));
Object.defineProperty(exports, "getSliceNumberFromImageId", ({ enumerable: true, get: function () { return nrrdLoader_1.getSliceNumberFromImageId; } }));
Object.defineProperty(exports, "getNrrdSerieDimensions", ({ enumerable: true, get: function () { return nrrdLoader_1.getNrrdSerieDimensions; } }));
const dicomLoader_1 = __webpack_require__(6790);
Object.defineProperty(exports, "getDicomImageId", ({ enumerable: true, get: function () { return dicomLoader_1.getDicomImageId; } }));
Object.defineProperty(exports, "cacheImage", ({ enumerable: true, get: function () { return dicomLoader_1.cacheImage; } }));
Object.defineProperty(exports, "cacheImages", ({ enumerable: true, get: function () { return dicomLoader_1.cacheImages; } }));
Object.defineProperty(exports, "loadAndCacheImageStack", ({ enumerable: true, get: function () { return dicomLoader_1.loadAndCacheImageStack; } }));
Object.defineProperty(exports, "unloadAndRecacheImageStackDSA", ({ enumerable: true, get: function () { return dicomLoader_1.unloadAndRecacheImageStackDSA; } }));
const resliceLoader_1 = __webpack_require__(5779);
Object.defineProperty(exports, "loadReslicedImage", ({ enumerable: true, get: function () { return resliceLoader_1.loadReslicedImage; } }));
const multiframeLoader_1 = __webpack_require__(934);
Object.defineProperty(exports, "loadMultiFrameImage", ({ enumerable: true, get: function () { return multiframeLoader_1.loadMultiFrameImage; } }));
Object.defineProperty(exports, "buildMultiFrameImage", ({ enumerable: true, get: function () { return multiframeLoader_1.buildMultiFrameImage; } }));
Object.defineProperty(exports, "getMultiFrameImageId", ({ enumerable: true, get: function () { return multiframeLoader_1.getMultiFrameImageId; } }));
Object.defineProperty(exports, "clearMultiFrameCache", ({ enumerable: true, get: function () { return multiframeLoader_1.clearMultiFrameCache; } }));
const dsaImageLoader_1 = __webpack_require__(6475);
Object.defineProperty(exports, "populateDsaImageIds", ({ enumerable: true, get: function () { return dsaImageLoader_1.populateDsaImageIds; } }));
const fileLoader_1 = __webpack_require__(9995);
Object.defineProperty(exports, "getFileManager", ({ enumerable: true, get: function () { return fileLoader_1.getFileManager; } }));
Object.defineProperty(exports, "resetFileLoader", ({ enumerable: true, get: function () { return fileLoader_1.resetFileLoader; } }));
Object.defineProperty(exports, "resetFileManager", ({ enumerable: true, get: function () { return fileLoader_1.resetFileManager; } }));
Object.defineProperty(exports, "populateFileManager", ({ enumerable: true, get: function () { return fileLoader_1.populateFileManager; } }));
Object.defineProperty(exports, "getFileImageId", ({ enumerable: true, get: function () { return fileLoader_1.getFileImageId; } }));
const imageColormaps_1 = __webpack_require__(4540);
Object.defineProperty(exports, "getColormapsList", ({ enumerable: true, get: function () { return imageColormaps_1.getColormapsList; } }));
Object.defineProperty(exports, "applyColorMap", ({ enumerable: true, get: function () { return imageColormaps_1.applyColorMap; } }));
Object.defineProperty(exports, "addColorMap", ({ enumerable: true, get: function () { return imageColormaps_1.addColorMap; } }));
Object.defineProperty(exports, "fillPixelData", ({ enumerable: true, get: function () { return imageColormaps_1.fillPixelData; } }));
Object.defineProperty(exports, "HSVToRGB", ({ enumerable: true, get: function () { return imageColormaps_1.HSVToRGB; } }));
const applyDSA_1 = __webpack_require__(1446);
Object.defineProperty(exports, "applyDSAShift", ({ enumerable: true, get: function () { return applyDSA_1.applyDSAShift; } }));
const io_1 = __webpack_require__(5604);
Object.defineProperty(exports, "saveAnnotations", ({ enumerable: true, get: function () { return io_1.saveAnnotations; } }));
Object.defineProperty(exports, "loadAnnotations", ({ enumerable: true, get: function () { return io_1.loadAnnotations; } }));
const interaction_1 = __webpack_require__(1534);
Object.defineProperty(exports, "addMouseKeyHandlers", ({ enumerable: true, get: function () { return interaction_1.addMouseKeyHandlers; } }));
Object.defineProperty(exports, "removeMouseKeyHandlers", ({ enumerable: true, get: function () { return interaction_1.removeMouseKeyHandlers; } }));
Object.defineProperty(exports, "toggleMouseToolsListeners", ({ enumerable: true, get: function () { return interaction_1.toggleMouseToolsListeners; } }));


/***/ }),

/***/ 1614:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  NIL: () => (/* reexport */ nil),
  parse: () => (/* reexport */ esm_browser_parse),
  stringify: () => (/* reexport */ esm_browser_stringify),
  v1: () => (/* reexport */ esm_browser_v1),
  v3: () => (/* reexport */ esm_browser_v3),
  v4: () => (/* reexport */ esm_browser_v4),
  v5: () => (/* reexport */ esm_browser_v5),
  validate: () => (/* reexport */ esm_browser_validate),
  version: () => (/* reexport */ esm_browser_version)
});

;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/rng.js
// Unique ID creation requires a high quality random # generator. In the browser we therefore
// require the crypto API and do not support built-in fallback to lower quality random number
// generators (like Math.random()).
var getRandomValues;
var rnds8 = new Uint8Array(16);
function rng() {
  // lazy load so that environments that need to polyfill have a chance to do so
  if (!getRandomValues) {
    // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also,
    // find the complete implementation of crypto (msCrypto) on IE11.
    getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);

    if (!getRandomValues) {
      throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
    }
  }

  return getRandomValues(rnds8);
}
;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/regex.js
/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i);
;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/validate.js


function validate(uuid) {
  return typeof uuid === 'string' && regex.test(uuid);
}

/* harmony default export */ const esm_browser_validate = (validate);
;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/stringify.js

/**
 * Convert array of 16 byte values to UUID string format of the form:
 * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
 */

var byteToHex = [];

for (var i = 0; i < 256; ++i) {
  byteToHex.push((i + 0x100).toString(16).substr(1));
}

function stringify(arr) {
  var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
  // Note: Be careful editing this code!  It's been tuned for performance
  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
  var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID.  If this throws, it's likely due to one
  // of the following:
  // - One or more input array values don't map to a hex octet (leading to
  // "undefined" in the uuid)
  // - Invalid input values for the RFC `version` or `variant` fields

  if (!esm_browser_validate(uuid)) {
    throw TypeError('Stringified UUID is invalid');
  }

  return uuid;
}

/* harmony default export */ const esm_browser_stringify = (stringify);
;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/v1.js

 // **`v1()` - Generate time-based UUID**
//
// Inspired by https://github.com/LiosK/UUID.js
// and http://docs.python.org/library/uuid.html

var _nodeId;

var _clockseq; // Previous uuid creation time


var _lastMSecs = 0;
var _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details

function v1(options, buf, offset) {
  var i = buf && offset || 0;
  var b = buf || new Array(16);
  options = options || {};
  var node = options.node || _nodeId;
  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not
  // specified.  We do this lazily to minimize issues related to insufficient
  // system entropy.  See #189

  if (node == null || clockseq == null) {
    var seedBytes = options.random || (options.rng || rng)();

    if (node == null) {
      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
      node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];
    }

    if (clockseq == null) {
      // Per 4.2.2, randomize (14 bit) clockseq
      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
    }
  } // UUID timestamps are 100 nano-second units since the Gregorian epoch,
  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so
  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.


  var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock
  // cycle to simulate higher resolution clock

  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)

  var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression

  if (dt < 0 && options.clockseq === undefined) {
    clockseq = clockseq + 1 & 0x3fff;
  } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
  // time interval


  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
    nsecs = 0;
  } // Per 4.2.1.2 Throw error if too many uuids are requested


  if (nsecs >= 10000) {
    throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
  }

  _lastMSecs = msecs;
  _lastNSecs = nsecs;
  _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch

  msecs += 12219292800000; // `time_low`

  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
  b[i++] = tl >>> 24 & 0xff;
  b[i++] = tl >>> 16 & 0xff;
  b[i++] = tl >>> 8 & 0xff;
  b[i++] = tl & 0xff; // `time_mid`

  var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;
  b[i++] = tmh >>> 8 & 0xff;
  b[i++] = tmh & 0xff; // `time_high_and_version`

  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version

  b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)

  b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`

  b[i++] = clockseq & 0xff; // `node`

  for (var n = 0; n < 6; ++n) {
    b[i + n] = node[n];
  }

  return buf || esm_browser_stringify(b);
}

/* harmony default export */ const esm_browser_v1 = (v1);
;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/parse.js


function parse(uuid) {
  if (!esm_browser_validate(uuid)) {
    throw TypeError('Invalid UUID');
  }

  var v;
  var arr = new Uint8Array(16); // Parse ########-....-....-....-............

  arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;
  arr[1] = v >>> 16 & 0xff;
  arr[2] = v >>> 8 & 0xff;
  arr[3] = v & 0xff; // Parse ........-####-....-....-............

  arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;
  arr[5] = v & 0xff; // Parse ........-....-####-....-............

  arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;
  arr[7] = v & 0xff; // Parse ........-....-....-####-............

  arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;
  arr[9] = v & 0xff; // Parse ........-....-....-....-############
  // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes)

  arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;
  arr[11] = v / 0x100000000 & 0xff;
  arr[12] = v >>> 24 & 0xff;
  arr[13] = v >>> 16 & 0xff;
  arr[14] = v >>> 8 & 0xff;
  arr[15] = v & 0xff;
  return arr;
}

/* harmony default export */ const esm_browser_parse = (parse);
;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/v35.js



function stringToBytes(str) {
  str = unescape(encodeURIComponent(str)); // UTF8 escape

  var bytes = [];

  for (var i = 0; i < str.length; ++i) {
    bytes.push(str.charCodeAt(i));
  }

  return bytes;
}

var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';
/* harmony default export */ function v35(name, version, hashfunc) {
  function generateUUID(value, namespace, buf, offset) {
    if (typeof value === 'string') {
      value = stringToBytes(value);
    }

    if (typeof namespace === 'string') {
      namespace = esm_browser_parse(namespace);
    }

    if (namespace.length !== 16) {
      throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');
    } // Compute hash of namespace and value, Per 4.3
    // Future: Use spread syntax when supported on all platforms, e.g. `bytes =
    // hashfunc([...namespace, ... value])`


    var bytes = new Uint8Array(16 + value.length);
    bytes.set(namespace);
    bytes.set(value, namespace.length);
    bytes = hashfunc(bytes);
    bytes[6] = bytes[6] & 0x0f | version;
    bytes[8] = bytes[8] & 0x3f | 0x80;

    if (buf) {
      offset = offset || 0;

      for (var i = 0; i < 16; ++i) {
        buf[offset + i] = bytes[i];
      }

      return buf;
    }

    return esm_browser_stringify(bytes);
  } // Function#name is not settable on some platforms (#270)


  try {
    generateUUID.name = name; // eslint-disable-next-line no-empty
  } catch (err) {} // For CommonJS default export support


  generateUUID.DNS = DNS;
  generateUUID.URL = URL;
  return generateUUID;
}
;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/md5.js
/*
 * Browser-compatible JavaScript MD5
 *
 * Modification of JavaScript MD5
 * https://github.com/blueimp/JavaScript-MD5
 *
 * Copyright 2011, Sebastian Tschan
 * https://blueimp.net
 *
 * Licensed under the MIT license:
 * https://opensource.org/licenses/MIT
 *
 * Based on
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */
function md5(bytes) {
  if (typeof bytes === 'string') {
    var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape

    bytes = new Uint8Array(msg.length);

    for (var i = 0; i < msg.length; ++i) {
      bytes[i] = msg.charCodeAt(i);
    }
  }

  return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));
}
/*
 * Convert an array of little-endian words to an array of bytes
 */


function md5ToHexEncodedArray(input) {
  var output = [];
  var length32 = input.length * 32;
  var hexTab = '0123456789abcdef';

  for (var i = 0; i < length32; i += 8) {
    var x = input[i >> 5] >>> i % 32 & 0xff;
    var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);
    output.push(hex);
  }

  return output;
}
/**
 * Calculate output length with padding and bit length
 */


function getOutputLength(inputLength8) {
  return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;
}
/*
 * Calculate the MD5 of an array of little-endian words, and a bit length.
 */


function wordsToMd5(x, len) {
  /* append padding */
  x[len >> 5] |= 0x80 << len % 32;
  x[getOutputLength(len) - 1] = len;
  var a = 1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d = 271733878;

  for (var i = 0; i < x.length; i += 16) {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;
    a = md5ff(a, b, c, d, x[i], 7, -680876936);
    d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
    c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
    b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
    a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
    d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
    c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
    b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
    a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
    d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
    c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
    b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
    a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
    d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
    c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
    b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
    a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
    d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
    c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
    b = md5gg(b, c, d, a, x[i], 20, -373897302);
    a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
    d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
    c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
    b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
    a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
    d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
    c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
    b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
    a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
    d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
    c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
    b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
    a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
    d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
    c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
    b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
    a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
    d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
    c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
    b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
    a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
    d = md5hh(d, a, b, c, x[i], 11, -358537222);
    c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
    b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
    a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
    d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
    c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
    b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
    a = md5ii(a, b, c, d, x[i], 6, -198630844);
    d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
    c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
    b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
    a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
    d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
    c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
    b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
    a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
    d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
    c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
    b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
    a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
    d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
    c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
    b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
    a = safeAdd(a, olda);
    b = safeAdd(b, oldb);
    c = safeAdd(c, oldc);
    d = safeAdd(d, oldd);
  }

  return [a, b, c, d];
}
/*
 * Convert an array bytes to an array of little-endian words
 * Characters >255 have their high-byte silently ignored.
 */


function bytesToWords(input) {
  if (input.length === 0) {
    return [];
  }

  var length8 = input.length * 8;
  var output = new Uint32Array(getOutputLength(length8));

  for (var i = 0; i < length8; i += 8) {
    output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;
  }

  return output;
}
/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
 * to work around bugs in some JS interpreters.
 */


function safeAdd(x, y) {
  var lsw = (x & 0xffff) + (y & 0xffff);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return msw << 16 | lsw & 0xffff;
}
/*
 * Bitwise rotate a 32-bit number to the left.
 */


function bitRotateLeft(num, cnt) {
  return num << cnt | num >>> 32 - cnt;
}
/*
 * These functions implement the four basic operations the algorithm uses.
 */


function md5cmn(q, a, b, x, s, t) {
  return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
}

function md5ff(a, b, c, d, x, s, t) {
  return md5cmn(b & c | ~b & d, a, b, x, s, t);
}

function md5gg(a, b, c, d, x, s, t) {
  return md5cmn(b & d | c & ~d, a, b, x, s, t);
}

function md5hh(a, b, c, d, x, s, t) {
  return md5cmn(b ^ c ^ d, a, b, x, s, t);
}

function md5ii(a, b, c, d, x, s, t) {
  return md5cmn(c ^ (b | ~d), a, b, x, s, t);
}

/* harmony default export */ const esm_browser_md5 = (md5);
;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/v3.js


var v3 = v35('v3', 0x30, esm_browser_md5);
/* harmony default export */ const esm_browser_v3 = (v3);
;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/v4.js



function v4(options, buf, offset) {
  options = options || {};
  var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`

  rnds[6] = rnds[6] & 0x0f | 0x40;
  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided

  if (buf) {
    offset = offset || 0;

    for (var i = 0; i < 16; ++i) {
      buf[offset + i] = rnds[i];
    }

    return buf;
  }

  return esm_browser_stringify(rnds);
}

/* harmony default export */ const esm_browser_v4 = (v4);
;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/sha1.js
// Adapted from Chris Veness' SHA1 code at
// http://www.movable-type.co.uk/scripts/sha1.html
function f(s, x, y, z) {
  switch (s) {
    case 0:
      return x & y ^ ~x & z;

    case 1:
      return x ^ y ^ z;

    case 2:
      return x & y ^ x & z ^ y & z;

    case 3:
      return x ^ y ^ z;
  }
}

function ROTL(x, n) {
  return x << n | x >>> 32 - n;
}

function sha1(bytes) {
  var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];
  var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];

  if (typeof bytes === 'string') {
    var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape

    bytes = [];

    for (var i = 0; i < msg.length; ++i) {
      bytes.push(msg.charCodeAt(i));
    }
  } else if (!Array.isArray(bytes)) {
    // Convert Array-like to Array
    bytes = Array.prototype.slice.call(bytes);
  }

  bytes.push(0x80);
  var l = bytes.length / 4 + 2;
  var N = Math.ceil(l / 16);
  var M = new Array(N);

  for (var _i = 0; _i < N; ++_i) {
    var arr = new Uint32Array(16);

    for (var j = 0; j < 16; ++j) {
      arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];
    }

    M[_i] = arr;
  }

  M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);
  M[N - 1][14] = Math.floor(M[N - 1][14]);
  M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;

  for (var _i2 = 0; _i2 < N; ++_i2) {
    var W = new Uint32Array(80);

    for (var t = 0; t < 16; ++t) {
      W[t] = M[_i2][t];
    }

    for (var _t = 16; _t < 80; ++_t) {
      W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);
    }

    var a = H[0];
    var b = H[1];
    var c = H[2];
    var d = H[3];
    var e = H[4];

    for (var _t2 = 0; _t2 < 80; ++_t2) {
      var s = Math.floor(_t2 / 20);
      var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;
      e = d;
      d = c;
      c = ROTL(b, 30) >>> 0;
      b = a;
      a = T;
    }

    H[0] = H[0] + a >>> 0;
    H[1] = H[1] + b >>> 0;
    H[2] = H[2] + c >>> 0;
    H[3] = H[3] + d >>> 0;
    H[4] = H[4] + e >>> 0;
  }

  return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];
}

/* harmony default export */ const esm_browser_sha1 = (sha1);
;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/v5.js


var v5 = v35('v5', 0x50, esm_browser_sha1);
/* harmony default export */ const esm_browser_v5 = (v5);
;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/nil.js
/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000');
;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/version.js


function version(uuid) {
  if (!esm_browser_validate(uuid)) {
    throw TypeError('Invalid UUID');
  }

  return parseInt(uuid.substr(14, 1), 16);
}

/* harmony default export */ const esm_browser_version = (version);
;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/index.js










/***/ }),

/***/ 3848:
/***/ (() => {

/* (ignored) */

/***/ }),

/***/ 3414:
/***/ (() => {

/* (ignored) */

/***/ }),

/***/ 172:
/***/ (() => {

/* (ignored) */

/***/ }),

/***/ 2001:
/***/ (() => {

/* (ignored) */

/***/ }),

/***/ 3779:
/***/ (() => {

/* (ignored) */

/***/ }),

/***/ 6558:
/***/ (() => {

/* (ignored) */

/***/ }),

/***/ 2258:
/***/ (() => {

/* (ignored) */

/***/ }),

/***/ 9379:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse('{"x00000000":{"tag":"x00000000","vr":"UL","vm":"1","name":"CommandGroupLength"},"x00000001":{"tag":"x00000001","vr":"UL","vm":"1","name":"CommandLengthToEnd"},"x00000002":{"tag":"x00000002","vr":"UI","vm":"1","name":"AffectedSOPClassUID"},"x00000003":{"tag":"x00000003","vr":"UI","vm":"1","name":"RequestedSOPClassUID"},"x00000010":{"tag":"x00000010","vr":"SH","vm":"1","name":"CommandRecognitionCode"},"x00000100":{"tag":"x00000100","vr":"US","vm":"1","name":"CommandField"},"x00000110":{"tag":"x00000110","vr":"US","vm":"1","name":"MessageID"},"x00000120":{"tag":"x00000120","vr":"US","vm":"1","name":"MessageIDBeingRespondedTo"},"x00000200":{"tag":"x00000200","vr":"AE","vm":"1","name":"Initiator"},"x00000300":{"tag":"x00000300","vr":"AE","vm":"1","name":"Receiver"},"x00000400":{"tag":"x00000400","vr":"AE","vm":"1","name":"FindLocation"},"x00000600":{"tag":"x00000600","vr":"AE","vm":"1","name":"MoveDestination"},"x00000700":{"tag":"x00000700","vr":"US","vm":"1","name":"Priority"},"x00000800":{"tag":"x00000800","vr":"US","vm":"1","name":"CommandDataSetType"},"x00000850":{"tag":"x00000850","vr":"US","vm":"1","name":"NumberOfMatches"},"x00000860":{"tag":"x00000860","vr":"US","vm":"1","name":"ResponseSequenceNumber"},"x00000900":{"tag":"x00000900","vr":"US","vm":"1","name":"Status"},"x00000901":{"tag":"x00000901","vr":"AT","vm":"1-n","name":"OffendingElement"},"x00000902":{"tag":"x00000902","vr":"LO","vm":"1","name":"ErrorComment"},"x00000903":{"tag":"x00000903","vr":"US","vm":"1","name":"ErrorID"},"x00001000":{"tag":"x00001000","vr":"UI","vm":"1","name":"AffectedSOPInstanceUID"},"x00001001":{"tag":"x00001001","vr":"UI","vm":"1","name":"RequestedSOPInstanceUID"},"x00001002":{"tag":"x00001002","vr":"US","vm":"1","name":"EventTypeID"},"x00001005":{"tag":"x00001005","vr":"AT","vm":"1-n","name":"AttributeIdentifierList"},"x00001008":{"tag":"x00001008","vr":"US","vm":"1","name":"ActionTypeID"},"x00001020":{"tag":"x00001020","vr":"US","vm":"1","name":"NumberOfRemainingSuboperations"},"x00001021":{"tag":"x00001021","vr":"US","vm":"1","name":"NumberOfCompletedSuboperations"},"x00001022":{"tag":"x00001022","vr":"US","vm":"1","name":"NumberOfFailedSuboperations"},"x00001023":{"tag":"x00001023","vr":"US","vm":"1","name":"NumberOfWarningSuboperations"},"x00001030":{"tag":"x00001030","vr":"AE","vm":"1","name":"MoveOriginatorApplicationEntityTitle"},"x00001031":{"tag":"x00001031","vr":"US","vm":"1","name":"MoveOriginatorMessageID"},"x00004000":{"tag":"x00004000","vr":"LT","vm":"1","name":"DialogReceiver"},"x00004010":{"tag":"x00004010","vr":"LT","vm":"1","name":"TerminalType"},"x00005010":{"tag":"x00005010","vr":"SH","vm":"1","name":"MessageSetID"},"x00005020":{"tag":"x00005020","vr":"SH","vm":"1","name":"EndMessageID"},"x00005110":{"tag":"x00005110","vr":"LT","vm":"1","name":"DisplayFormat"},"x00005120":{"tag":"x00005120","vr":"LT","vm":"1","name":"PagePositionID"},"x00005130":{"tag":"x00005130","vr":"CS","vm":"1","name":"TextFormatID"},"x00005140":{"tag":"x00005140","vr":"CS","vm":"1","name":"NormalReverse"},"x00005150":{"tag":"x00005150","vr":"CS","vm":"1","name":"AddGrayScale"},"x00005160":{"tag":"x00005160","vr":"CS","vm":"1","name":"Borders"},"x00005170":{"tag":"x00005170","vr":"IS","vm":"1","name":"Copies"},"x00005180":{"tag":"x00005180","vr":"CS","vm":"1","name":"CommandMagnificationType"},"x00005190":{"tag":"x00005190","vr":"CS","vm":"1","name":"Erase"},"x000051A0":{"tag":"x000051A0","vr":"CS","vm":"1","name":"Print"},"x000051B0":{"tag":"x000051B0","vr":"US","vm":"1-n","name":"Overlays"},"x00020000":{"tag":"x00020000","vr":"UL","vm":"1","name":"FileMetaInformationGroupLength"},"x00020001":{"tag":"x00020001","vr":"OB","vm":"1","name":"FileMetaInformationVersion"},"x00020002":{"tag":"x00020002","vr":"UI","vm":"1","name":"MediaStorageSOPClassUID"},"x00020003":{"tag":"x00020003","vr":"UI","vm":"1","name":"MediaStorageSOPInstanceUID"},"x00020010":{"tag":"x00020010","vr":"UI","vm":"1","name":"TransferSyntaxUID"},"x00020012":{"tag":"x00020012","vr":"UI","vm":"1","name":"ImplementationClassUID"},"x00020013":{"tag":"x00020013","vr":"SH","vm":"1","name":"ImplementationVersionName"},"x00020016":{"tag":"x00020016","vr":"AE","vm":"1","name":"SourceApplicationEntityTitle"},"x00020100":{"tag":"x00020100","vr":"UI","vm":"1","name":"PrivateInformationCreatorUID"},"x00020102":{"tag":"x00020102","vr":"OB","vm":"1","name":"PrivateInformation"},"x00041130":{"tag":"x00041130","vr":"CS","vm":"1","name":"FileSetID"},"x00041141":{"tag":"x00041141","vr":"CS","vm":"1-8","name":"FileSetDescriptorFileID"},"x00041142":{"tag":"x00041142","vr":"CS","vm":"1","name":"SpecificCharacterSetOfFileSetDescriptorFile"},"x00041200":{"tag":"x00041200","vr":"UL","vm":"1","name":"OffsetOfTheFirstDirectoryRecordOfTheRootDirectoryEntity"},"x00041202":{"tag":"x00041202","vr":"UL","vm":"1","name":"OffsetOfTheLastDirectoryRecordOfTheRootDirectoryEntity"},"x00041212":{"tag":"x00041212","vr":"US","vm":"1","name":"FileSetConsistencyFlag"},"x00041220":{"tag":"x00041220","vr":"SQ","vm":"1","name":"DirectoryRecordSequence"},"x00041400":{"tag":"x00041400","vr":"UL","vm":"1","name":"OffsetOfTheNextDirectoryRecord"},"x00041410":{"tag":"x00041410","vr":"US","vm":"1","name":"RecordInUseFlag"},"x00041420":{"tag":"x00041420","vr":"UL","vm":"1","name":"OffsetOfReferencedLowerLevelDirectoryEntity"},"x00041430":{"tag":"x00041430","vr":"CS","vm":"1","name":"DirectoryRecordType"},"x00041432":{"tag":"x00041432","vr":"UI","vm":"1","name":"PrivateRecordUID"},"x00041500":{"tag":"x00041500","vr":"CS","vm":"1-8","name":"ReferencedFileID"},"x00041504":{"tag":"x00041504","vr":"UL","vm":"1","name":"MRDRDirectoryRecordOffset"},"x00041510":{"tag":"x00041510","vr":"UI","vm":"1","name":"ReferencedSOPClassUIDInFile"},"x00041511":{"tag":"x00041511","vr":"UI","vm":"1","name":"ReferencedSOPInstanceUIDInFile"},"x00041512":{"tag":"x00041512","vr":"UI","vm":"1","name":"ReferencedTransferSyntaxUIDInFile"},"x0004151A":{"tag":"x0004151A","vr":"UI","vm":"1-n","name":"ReferencedRelatedGeneralSOPClassUIDInFile"},"x00041600":{"tag":"x00041600","vr":"UL","vm":"1","name":"NumberOfReferences"},"x00080001":{"tag":"x00080001","vr":"UL","vm":"1","name":"LengthToEnd"},"x00080005":{"tag":"x00080005","vr":"CS","vm":"1-n","name":"SpecificCharacterSet"},"x00080006":{"tag":"x00080006","vr":"SQ","vm":"1","name":"LanguageCodeSequence"},"x00080008":{"tag":"x00080008","vr":"CS","vm":"2-n","name":"ImageType"},"x00080010":{"tag":"x00080010","vr":"SH","vm":"1","name":"RecognitionCode"},"x00080012":{"tag":"x00080012","vr":"DA","vm":"1","name":"InstanceCreationDate"},"x00080013":{"tag":"x00080013","vr":"TM","vm":"1","name":"InstanceCreationTime"},"x00080014":{"tag":"x00080014","vr":"UI","vm":"1","name":"InstanceCreatorUID"},"x00080016":{"tag":"x00080016","vr":"UI","vm":"1","name":"SOPClassUID"},"x00080018":{"tag":"x00080018","vr":"UI","vm":"1","name":"SOPInstanceUID"},"x0008001A":{"tag":"x0008001A","vr":"UI","vm":"1-n","name":"RelatedGeneralSOPClassUID"},"x0008001B":{"tag":"x0008001B","vr":"UI","vm":"1","name":"OriginalSpecializedSOPClassUID"},"x00080020":{"tag":"x00080020","vr":"DA","vm":"1","name":"StudyDate"},"x00080021":{"tag":"x00080021","vr":"DA","vm":"1","name":"SeriesDate"},"x00080022":{"tag":"x00080022","vr":"DA","vm":"1","name":"AcquisitionDate"},"x00080023":{"tag":"x00080023","vr":"DA","vm":"1","name":"ContentDate"},"x00080024":{"tag":"x00080024","vr":"DA","vm":"1","name":"OverlayDate"},"x00080025":{"tag":"x00080025","vr":"DA","vm":"1","name":"CurveDate"},"x0008002A":{"tag":"x0008002A","vr":"DT","vm":"1","name":"AcquisitionDateTime"},"x00080030":{"tag":"x00080030","vr":"TM","vm":"1","name":"StudyTime"},"x00080031":{"tag":"x00080031","vr":"TM","vm":"1","name":"SeriesTime"},"x00080032":{"tag":"x00080032","vr":"TM","vm":"1","name":"AcquisitionTime"},"x00080033":{"tag":"x00080033","vr":"TM","vm":"1","name":"ContentTime"},"x00080034":{"tag":"x00080034","vr":"TM","vm":"1","name":"OverlayTime"},"x00080035":{"tag":"x00080035","vr":"TM","vm":"1","name":"CurveTime"},"x00080040":{"tag":"x00080040","vr":"US","vm":"1","name":"DataSetType"},"x00080041":{"tag":"x00080041","vr":"LO","vm":"1","name":"DataSetSubtype"},"x00080042":{"tag":"x00080042","vr":"CS","vm":"1","name":"NuclearMedicineSeriesType"},"x00080050":{"tag":"x00080050","vr":"SH","vm":"1","name":"AccessionNumber"},"x00080051":{"tag":"x00080051","vr":"SQ","vm":"1","name":"IssuerOfAccessionNumberSequence"},"x00080052":{"tag":"x00080052","vr":"CS","vm":"1","name":"QueryRetrieveLevel"},"x00080054":{"tag":"x00080054","vr":"AE","vm":"1-n","name":"RetrieveAETitle"},"x00080056":{"tag":"x00080056","vr":"CS","vm":"1","name":"InstanceAvailability"},"x00080058":{"tag":"x00080058","vr":"UI","vm":"1-n","name":"FailedSOPInstanceUIDList"},"x00080060":{"tag":"x00080060","vr":"CS","vm":"1","name":"Modality"},"x00080061":{"tag":"x00080061","vr":"CS","vm":"1-n","name":"ModalitiesInStudy"},"x00080062":{"tag":"x00080062","vr":"UI","vm":"1-n","name":"SOPClassesInStudy"},"x00080064":{"tag":"x00080064","vr":"CS","vm":"1","name":"ConversionType"},"x00080068":{"tag":"x00080068","vr":"CS","vm":"1","name":"PresentationIntentType"},"x00080070":{"tag":"x00080070","vr":"LO","vm":"1","name":"Manufacturer"},"x00080080":{"tag":"x00080080","vr":"LO","vm":"1","name":"InstitutionName"},"x00080081":{"tag":"x00080081","vr":"ST","vm":"1","name":"InstitutionAddress"},"x00080082":{"tag":"x00080082","vr":"SQ","vm":"1","name":"InstitutionCodeSequence"},"x00080090":{"tag":"x00080090","vr":"PN","vm":"1","name":"ReferringPhysicianName"},"x00080092":{"tag":"x00080092","vr":"ST","vm":"1","name":"ReferringPhysicianAddress"},"x00080094":{"tag":"x00080094","vr":"SH","vm":"1-n","name":"ReferringPhysicianTelephoneNumbers"},"x00080096":{"tag":"x00080096","vr":"SQ","vm":"1","name":"ReferringPhysicianIdentificationSequence"},"x00080100":{"tag":"x00080100","vr":"SH","vm":"1","name":"CodeValue"},"x00080102":{"tag":"x00080102","vr":"SH","vm":"1","name":"CodingSchemeDesignator"},"x00080103":{"tag":"x00080103","vr":"SH","vm":"1","name":"CodingSchemeVersion"},"x00080104":{"tag":"x00080104","vr":"LO","vm":"1","name":"CodeMeaning"},"x00080105":{"tag":"x00080105","vr":"CS","vm":"1","name":"MappingResource"},"x00080106":{"tag":"x00080106","vr":"DT","vm":"1","name":"ContextGroupVersion"},"x00080107":{"tag":"x00080107","vr":"DT","vm":"1","name":"ContextGroupLocalVersion"},"x0008010B":{"tag":"x0008010B","vr":"CS","vm":"1","name":"ContextGroupExtensionFlag"},"x0008010C":{"tag":"x0008010C","vr":"UI","vm":"1","name":"CodingSchemeUID"},"x0008010D":{"tag":"x0008010D","vr":"UI","vm":"1","name":"ContextGroupExtensionCreatorUID"},"x0008010F":{"tag":"x0008010F","vr":"CS","vm":"1","name":"ContextIdentifier"},"x00080110":{"tag":"x00080110","vr":"SQ","vm":"1","name":"CodingSchemeIdentificationSequence"},"x00080112":{"tag":"x00080112","vr":"LO","vm":"1","name":"CodingSchemeRegistry"},"x00080114":{"tag":"x00080114","vr":"ST","vm":"1","name":"CodingSchemeExternalID"},"x00080115":{"tag":"x00080115","vr":"ST","vm":"1","name":"CodingSchemeName"},"x00080116":{"tag":"x00080116","vr":"ST","vm":"1","name":"CodingSchemeResponsibleOrganization"},"x00080117":{"tag":"x00080117","vr":"UI","vm":"1","name":"ContextUID"},"x00080201":{"tag":"x00080201","vr":"SH","vm":"1","name":"TimezoneOffsetFromUTC"},"x00081000":{"tag":"x00081000","vr":"AE","vm":"1","name":"NetworkID"},"x00081010":{"tag":"x00081010","vr":"SH","vm":"1","name":"StationName"},"x00081030":{"tag":"x00081030","vr":"LO","vm":"1","name":"StudyDescription"},"x00081032":{"tag":"x00081032","vr":"SQ","vm":"1","name":"ProcedureCodeSequence"},"x0008103E":{"tag":"x0008103E","vr":"LO","vm":"1","name":"SeriesDescription"},"x0008103F":{"tag":"x0008103F","vr":"SQ","vm":"1","name":"SeriesDescriptionCodeSequence"},"x00081040":{"tag":"x00081040","vr":"LO","vm":"1","name":"InstitutionalDepartmentName"},"x00081048":{"tag":"x00081048","vr":"PN","vm":"1-n","name":"PhysiciansOfRecord"},"x00081049":{"tag":"x00081049","vr":"SQ","vm":"1","name":"PhysiciansOfRecordIdentificationSequence"},"x00081050":{"tag":"x00081050","vr":"PN","vm":"1-n","name":"PerformingPhysicianName"},"x00081052":{"tag":"x00081052","vr":"SQ","vm":"1","name":"PerformingPhysicianIdentificationSequence"},"x00081060":{"tag":"x00081060","vr":"PN","vm":"1-n","name":"NameOfPhysiciansReadingStudy"},"x00081062":{"tag":"x00081062","vr":"SQ","vm":"1","name":"PhysiciansReadingStudyIdentificationSequence"},"x00081070":{"tag":"x00081070","vr":"PN","vm":"1-n","name":"OperatorsName"},"x00081072":{"tag":"x00081072","vr":"SQ","vm":"1","name":"OperatorIdentificationSequence"},"x00081080":{"tag":"x00081080","vr":"LO","vm":"1-n","name":"AdmittingDiagnosesDescription"},"x00081084":{"tag":"x00081084","vr":"SQ","vm":"1","name":"AdmittingDiagnosesCodeSequence"},"x00081090":{"tag":"x00081090","vr":"LO","vm":"1","name":"ManufacturerModelName"},"x00081100":{"tag":"x00081100","vr":"SQ","vm":"1","name":"ReferencedResultsSequence"},"x00081110":{"tag":"x00081110","vr":"SQ","vm":"1","name":"ReferencedStudySequence"},"x00081111":{"tag":"x00081111","vr":"SQ","vm":"1","name":"ReferencedPerformedProcedureStepSequence"},"x00081115":{"tag":"x00081115","vr":"SQ","vm":"1","name":"ReferencedSeriesSequence"},"x00081120":{"tag":"x00081120","vr":"SQ","vm":"1","name":"ReferencedPatientSequence"},"x00081125":{"tag":"x00081125","vr":"SQ","vm":"1","name":"ReferencedVisitSequence"},"x00081130":{"tag":"x00081130","vr":"SQ","vm":"1","name":"ReferencedOverlaySequence"},"x00081134":{"tag":"x00081134","vr":"SQ","vm":"1","name":"ReferencedStereometricInstanceSequence"},"x0008113A":{"tag":"x0008113A","vr":"SQ","vm":"1","name":"ReferencedWaveformSequence"},"x00081140":{"tag":"x00081140","vr":"SQ","vm":"1","name":"ReferencedImageSequence"},"x00081145":{"tag":"x00081145","vr":"SQ","vm":"1","name":"ReferencedCurveSequence"},"x0008114A":{"tag":"x0008114A","vr":"SQ","vm":"1","name":"ReferencedInstanceSequence"},"x0008114B":{"tag":"x0008114B","vr":"SQ","vm":"1","name":"ReferencedRealWorldValueMappingInstanceSequence"},"x00081150":{"tag":"x00081150","vr":"UI","vm":"1","name":"ReferencedSOPClassUID"},"x00081155":{"tag":"x00081155","vr":"UI","vm":"1","name":"ReferencedSOPInstanceUID"},"x0008115A":{"tag":"x0008115A","vr":"UI","vm":"1-n","name":"SOPClassesSupported"},"x00081160":{"tag":"x00081160","vr":"IS","vm":"1-n","name":"ReferencedFrameNumber"},"x00081161":{"tag":"x00081161","vr":"UL","vm":"1-n","name":"SimpleFrameList"},"x00081162":{"tag":"x00081162","vr":"UL","vm":"3-3n","name":"CalculatedFrameList"},"x00081163":{"tag":"x00081163","vr":"FD","vm":"2","name":"TimeRange"},"x00081164":{"tag":"x00081164","vr":"SQ","vm":"1","name":"FrameExtractionSequence"},"x00081167":{"tag":"x00081167","vr":"UI","vm":"1","name":"MultiFrameSourceSOPInstanceUID"},"x00081195":{"tag":"x00081195","vr":"UI","vm":"1","name":"TransactionUID"},"x00081197":{"tag":"x00081197","vr":"US","vm":"1","name":"FailureReason"},"x00081198":{"tag":"x00081198","vr":"SQ","vm":"1","name":"FailedSOPSequence"},"x00081199":{"tag":"x00081199","vr":"SQ","vm":"1","name":"ReferencedSOPSequence"},"x00081200":{"tag":"x00081200","vr":"SQ","vm":"1","name":"StudiesContainingOtherReferencedInstancesSequence"},"x00081250":{"tag":"x00081250","vr":"SQ","vm":"1","name":"RelatedSeriesSequence"},"x00082110":{"tag":"x00082110","vr":"CS","vm":"1","name":"LossyImageCompressionRetired"},"x00082111":{"tag":"x00082111","vr":"ST","vm":"1","name":"DerivationDescription"},"x00082112":{"tag":"x00082112","vr":"SQ","vm":"1","name":"SourceImageSequence"},"x00082120":{"tag":"x00082120","vr":"SH","vm":"1","name":"StageName"},"x00082122":{"tag":"x00082122","vr":"IS","vm":"1","name":"StageNumber"},"x00082124":{"tag":"x00082124","vr":"IS","vm":"1","name":"NumberOfStages"},"x00082127":{"tag":"x00082127","vr":"SH","vm":"1","name":"ViewName"},"x00082128":{"tag":"x00082128","vr":"IS","vm":"1","name":"ViewNumber"},"x00082129":{"tag":"x00082129","vr":"IS","vm":"1","name":"NumberOfEventTimers"},"x0008212A":{"tag":"x0008212A","vr":"IS","vm":"1","name":"NumberOfViewsInStage"},"x00082130":{"tag":"x00082130","vr":"DS","vm":"1-n","name":"EventElapsedTimes"},"x00082132":{"tag":"x00082132","vr":"LO","vm":"1-n","name":"EventTimerNames"},"x00082133":{"tag":"x00082133","vr":"SQ","vm":"1","name":"EventTimerSequence"},"x00082134":{"tag":"x00082134","vr":"FD","vm":"1","name":"EventTimeOffset"},"x00082135":{"tag":"x00082135","vr":"SQ","vm":"1","name":"EventCodeSequence"},"x00082142":{"tag":"x00082142","vr":"IS","vm":"1","name":"StartTrim"},"x00082143":{"tag":"x00082143","vr":"IS","vm":"1","name":"StopTrim"},"x00082144":{"tag":"x00082144","vr":"IS","vm":"1","name":"RecommendedDisplayFrameRate"},"x00082200":{"tag":"x00082200","vr":"CS","vm":"1","name":"TransducerPosition"},"x00082204":{"tag":"x00082204","vr":"CS","vm":"1","name":"TransducerOrientation"},"x00082208":{"tag":"x00082208","vr":"CS","vm":"1","name":"AnatomicStructure"},"x00082218":{"tag":"x00082218","vr":"SQ","vm":"1","name":"AnatomicRegionSequence"},"x00082220":{"tag":"x00082220","vr":"SQ","vm":"1","name":"AnatomicRegionModifierSequence"},"x00082228":{"tag":"x00082228","vr":"SQ","vm":"1","name":"PrimaryAnatomicStructureSequence"},"x00082229":{"tag":"x00082229","vr":"SQ","vm":"1","name":"AnatomicStructureSpaceOrRegionSequence"},"x00082230":{"tag":"x00082230","vr":"SQ","vm":"1","name":"PrimaryAnatomicStructureModifierSequence"},"x00082240":{"tag":"x00082240","vr":"SQ","vm":"1","name":"TransducerPositionSequence"},"x00082242":{"tag":"x00082242","vr":"SQ","vm":"1","name":"TransducerPositionModifierSequence"},"x00082244":{"tag":"x00082244","vr":"SQ","vm":"1","name":"TransducerOrientationSequence"},"x00082246":{"tag":"x00082246","vr":"SQ","vm":"1","name":"TransducerOrientationModifierSequence"},"x00082251":{"tag":"x00082251","vr":"SQ","vm":"1","name":"AnatomicStructureSpaceOrRegionCodeSequenceTrial"},"x00082253":{"tag":"x00082253","vr":"SQ","vm":"1","name":"AnatomicPortalOfEntranceCodeSequenceTrial"},"x00082255":{"tag":"x00082255","vr":"SQ","vm":"1","name":"AnatomicApproachDirectionCodeSequenceTrial"},"x00082256":{"tag":"x00082256","vr":"ST","vm":"1","name":"AnatomicPerspectiveDescriptionTrial"},"x00082257":{"tag":"x00082257","vr":"SQ","vm":"1","name":"AnatomicPerspectiveCodeSequenceTrial"},"x00082258":{"tag":"x00082258","vr":"ST","vm":"1","name":"AnatomicLocationOfExaminingInstrumentDescriptionTrial"},"x00082259":{"tag":"x00082259","vr":"SQ","vm":"1","name":"AnatomicLocationOfExaminingInstrumentCodeSequenceTrial"},"x0008225A":{"tag":"x0008225A","vr":"SQ","vm":"1","name":"AnatomicStructureSpaceOrRegionModifierCodeSequenceTrial"},"x0008225C":{"tag":"x0008225C","vr":"SQ","vm":"1","name":"OnAxisBackgroundAnatomicStructureCodeSequenceTrial"},"x00083001":{"tag":"x00083001","vr":"SQ","vm":"1","name":"AlternateRepresentationSequence"},"x00083010":{"tag":"x00083010","vr":"UI","vm":"1","name":"IrradiationEventUID"},"x00084000":{"tag":"x00084000","vr":"LT","vm":"1","name":"IdentifyingComments"},"x00089007":{"tag":"x00089007","vr":"CS","vm":"4","name":"FrameType"},"x00089092":{"tag":"x00089092","vr":"SQ","vm":"1","name":"ReferencedImageEvidenceSequence"},"x00089121":{"tag":"x00089121","vr":"SQ","vm":"1","name":"ReferencedRawDataSequence"},"x00089123":{"tag":"x00089123","vr":"UI","vm":"1","name":"CreatorVersionUID"},"x00089124":{"tag":"x00089124","vr":"SQ","vm":"1","name":"DerivationImageSequence"},"x00089154":{"tag":"x00089154","vr":"SQ","vm":"1","name":"SourceImageEvidenceSequence"},"x00089205":{"tag":"x00089205","vr":"CS","vm":"1","name":"PixelPresentation"},"x00089206":{"tag":"x00089206","vr":"CS","vm":"1","name":"VolumetricProperties"},"x00089207":{"tag":"x00089207","vr":"CS","vm":"1","name":"VolumeBasedCalculationTechnique"},"x00089208":{"tag":"x00089208","vr":"CS","vm":"1","name":"ComplexImageComponent"},"x00089209":{"tag":"x00089209","vr":"CS","vm":"1","name":"AcquisitionContrast"},"x00089215":{"tag":"x00089215","vr":"SQ","vm":"1","name":"DerivationCodeSequence"},"x00089237":{"tag":"x00089237","vr":"SQ","vm":"1","name":"ReferencedPresentationStateSequence"},"x00089410":{"tag":"x00089410","vr":"SQ","vm":"1","name":"ReferencedOtherPlaneSequence"},"x00089458":{"tag":"x00089458","vr":"SQ","vm":"1","name":"FrameDisplaySequence"},"x00089459":{"tag":"x00089459","vr":"FL","vm":"1","name":"RecommendedDisplayFrameRateInFloat"},"x00089460":{"tag":"x00089460","vr":"CS","vm":"1","name":"SkipFrameRangeFlag"},"x00100010":{"tag":"x00100010","vr":"PN","vm":"1","name":"PatientName"},"x00100020":{"tag":"x00100020","vr":"LO","vm":"1","name":"PatientID"},"x00100021":{"tag":"x00100021","vr":"LO","vm":"1","name":"IssuerOfPatientID"},"x00100022":{"tag":"x00100022","vr":"CS","vm":"1","name":"TypeOfPatientID"},"x00100024":{"tag":"x00100024","vr":"SQ","vm":"1","name":"IssuerOfPatientIDQualifiersSequence"},"x00100030":{"tag":"x00100030","vr":"DA","vm":"1","name":"PatientBirthDate"},"x00100032":{"tag":"x00100032","vr":"TM","vm":"1","name":"PatientBirthTime"},"x00100040":{"tag":"x00100040","vr":"CS","vm":"1","name":"PatientSex"},"x00100050":{"tag":"x00100050","vr":"SQ","vm":"1","name":"PatientInsurancePlanCodeSequence"},"x00100101":{"tag":"x00100101","vr":"SQ","vm":"1","name":"PatientPrimaryLanguageCodeSequence"},"x00100102":{"tag":"x00100102","vr":"SQ","vm":"1","name":"PatientPrimaryLanguageModifierCodeSequence"},"x00101000":{"tag":"x00101000","vr":"LO","vm":"1-n","name":"OtherPatientIDs"},"x00101001":{"tag":"x00101001","vr":"PN","vm":"1-n","name":"OtherPatientNames"},"x00101002":{"tag":"x00101002","vr":"SQ","vm":"1","name":"OtherPatientIDsSequence"},"x00101005":{"tag":"x00101005","vr":"PN","vm":"1","name":"PatientBirthName"},"x00101010":{"tag":"x00101010","vr":"AS","vm":"1","name":"PatientAge"},"x00101020":{"tag":"x00101020","vr":"DS","vm":"1","name":"PatientSize"},"x00101021":{"tag":"x00101021","vr":"SQ","vm":"1","name":"PatientSizeCodeSequence"},"x00101030":{"tag":"x00101030","vr":"DS","vm":"1","name":"PatientWeight"},"x00101040":{"tag":"x00101040","vr":"LO","vm":"1","name":"PatientAddress"},"x00101050":{"tag":"x00101050","vr":"LO","vm":"1-n","name":"InsurancePlanIdentification"},"x00101060":{"tag":"x00101060","vr":"PN","vm":"1","name":"PatientMotherBirthName"},"x00101080":{"tag":"x00101080","vr":"LO","vm":"1","name":"MilitaryRank"},"x00101081":{"tag":"x00101081","vr":"LO","vm":"1","name":"BranchOfService"},"x00101090":{"tag":"x00101090","vr":"LO","vm":"1","name":"MedicalRecordLocator"},"x00102000":{"tag":"x00102000","vr":"LO","vm":"1-n","name":"MedicalAlerts"},"x00102110":{"tag":"x00102110","vr":"LO","vm":"1-n","name":"Allergies"},"x00102150":{"tag":"x00102150","vr":"LO","vm":"1","name":"CountryOfResidence"},"x00102152":{"tag":"x00102152","vr":"LO","vm":"1","name":"RegionOfResidence"},"x00102154":{"tag":"x00102154","vr":"SH","vm":"1-n","name":"PatientTelephoneNumbers"},"x00102160":{"tag":"x00102160","vr":"SH","vm":"1","name":"EthnicGroup"},"x00102180":{"tag":"x00102180","vr":"SH","vm":"1","name":"Occupation"},"x001021A0":{"tag":"x001021A0","vr":"CS","vm":"1","name":"SmokingStatus"},"x001021B0":{"tag":"x001021B0","vr":"LT","vm":"1","name":"AdditionalPatientHistory"},"x001021C0":{"tag":"x001021C0","vr":"US","vm":"1","name":"PregnancyStatus"},"x001021D0":{"tag":"x001021D0","vr":"DA","vm":"1","name":"LastMenstrualDate"},"x001021F0":{"tag":"x001021F0","vr":"LO","vm":"1","name":"PatientReligiousPreference"},"x00102201":{"tag":"x00102201","vr":"LO","vm":"1","name":"PatientSpeciesDescription"},"x00102202":{"tag":"x00102202","vr":"SQ","vm":"1","name":"PatientSpeciesCodeSequence"},"x00102203":{"tag":"x00102203","vr":"CS","vm":"1","name":"PatientSexNeutered"},"x00102210":{"tag":"x00102210","vr":"CS","vm":"1","name":"AnatomicalOrientationType"},"x00102292":{"tag":"x00102292","vr":"LO","vm":"1","name":"PatientBreedDescription"},"x00102293":{"tag":"x00102293","vr":"SQ","vm":"1","name":"PatientBreedCodeSequence"},"x00102294":{"tag":"x00102294","vr":"SQ","vm":"1","name":"BreedRegistrationSequence"},"x00102295":{"tag":"x00102295","vr":"LO","vm":"1","name":"BreedRegistrationNumber"},"x00102296":{"tag":"x00102296","vr":"SQ","vm":"1","name":"BreedRegistryCodeSequence"},"x00102297":{"tag":"x00102297","vr":"PN","vm":"1","name":"ResponsiblePerson"},"x00102298":{"tag":"x00102298","vr":"CS","vm":"1","name":"ResponsiblePersonRole"},"x00102299":{"tag":"x00102299","vr":"LO","vm":"1","name":"ResponsibleOrganization"},"x00104000":{"tag":"x00104000","vr":"LT","vm":"1","name":"PatientComments"},"x00109431":{"tag":"x00109431","vr":"FL","vm":"1","name":"ExaminedBodyThickness"},"x00120010":{"tag":"x00120010","vr":"LO","vm":"1","name":"ClinicalTrialSponsorName"},"x00120020":{"tag":"x00120020","vr":"LO","vm":"1","name":"ClinicalTrialProtocolID"},"x00120021":{"tag":"x00120021","vr":"LO","vm":"1","name":"ClinicalTrialProtocolName"},"x00120030":{"tag":"x00120030","vr":"LO","vm":"1","name":"ClinicalTrialSiteID"},"x00120031":{"tag":"x00120031","vr":"LO","vm":"1","name":"ClinicalTrialSiteName"},"x00120040":{"tag":"x00120040","vr":"LO","vm":"1","name":"ClinicalTrialSubjectID"},"x00120042":{"tag":"x00120042","vr":"LO","vm":"1","name":"ClinicalTrialSubjectReadingID"},"x00120050":{"tag":"x00120050","vr":"LO","vm":"1","name":"ClinicalTrialTimePointID"},"x00120051":{"tag":"x00120051","vr":"ST","vm":"1","name":"ClinicalTrialTimePointDescription"},"x00120060":{"tag":"x00120060","vr":"LO","vm":"1","name":"ClinicalTrialCoordinatingCenterName"},"x00120062":{"tag":"x00120062","vr":"CS","vm":"1","name":"PatientIdentityRemoved"},"x00120063":{"tag":"x00120063","vr":"LO","vm":"1-n","name":"DeidentificationMethod"},"x00120064":{"tag":"x00120064","vr":"SQ","vm":"1","name":"DeidentificationMethodCodeSequence"},"x00120071":{"tag":"x00120071","vr":"LO","vm":"1","name":"ClinicalTrialSeriesID"},"x00120072":{"tag":"x00120072","vr":"LO","vm":"1","name":"ClinicalTrialSeriesDescription"},"x00120081":{"tag":"x00120081","vr":"LO","vm":"1","name":"ClinicalTrialProtocolEthicsCommitteeName"},"x00120082":{"tag":"x00120082","vr":"LO","vm":"1","name":"ClinicalTrialProtocolEthicsCommitteeApprovalNumber"},"x00120083":{"tag":"x00120083","vr":"SQ","vm":"1","name":"ConsentForClinicalTrialUseSequence"},"x00120084":{"tag":"x00120084","vr":"CS","vm":"1","name":"DistributionType"},"x00120085":{"tag":"x00120085","vr":"CS","vm":"1","name":"ConsentForDistributionFlag"},"x00140023":{"tag":"x00140023","vr":"ST","vm":"1-n","name":"CADFileFormat"},"x00140024":{"tag":"x00140024","vr":"ST","vm":"1-n","name":"ComponentReferenceSystem"},"x00140025":{"tag":"x00140025","vr":"ST","vm":"1-n","name":"ComponentManufacturingProcedure"},"x00140028":{"tag":"x00140028","vr":"ST","vm":"1-n","name":"ComponentManufacturer"},"x00140030":{"tag":"x00140030","vr":"DS","vm":"1-n","name":"MaterialThickness"},"x00140032":{"tag":"x00140032","vr":"DS","vm":"1-n","name":"MaterialPipeDiameter"},"x00140034":{"tag":"x00140034","vr":"DS","vm":"1-n","name":"MaterialIsolationDiameter"},"x00140042":{"tag":"x00140042","vr":"ST","vm":"1-n","name":"MaterialGrade"},"x00140044":{"tag":"x00140044","vr":"ST","vm":"1-n","name":"MaterialPropertiesFileID"},"x00140045":{"tag":"x00140045","vr":"ST","vm":"1-n","name":"MaterialPropertiesFileFormat"},"x00140046":{"tag":"x00140046","vr":"LT","vm":"1","name":"MaterialNotes"},"x00140050":{"tag":"x00140050","vr":"CS","vm":"1","name":"ComponentShape"},"x00140052":{"tag":"x00140052","vr":"CS","vm":"1","name":"CurvatureType"},"x00140054":{"tag":"x00140054","vr":"DS","vm":"1","name":"OuterDiameter"},"x00140056":{"tag":"x00140056","vr":"DS","vm":"1","name":"InnerDiameter"},"x00141010":{"tag":"x00141010","vr":"ST","vm":"1","name":"ActualEnvironmentalConditions"},"x00141020":{"tag":"x00141020","vr":"DA","vm":"1","name":"ExpiryDate"},"x00141040":{"tag":"x00141040","vr":"ST","vm":"1","name":"EnvironmentalConditions"},"x00142002":{"tag":"x00142002","vr":"SQ","vm":"1","name":"EvaluatorSequence"},"x00142004":{"tag":"x00142004","vr":"IS","vm":"1","name":"EvaluatorNumber"},"x00142006":{"tag":"x00142006","vr":"PN","vm":"1","name":"EvaluatorName"},"x00142008":{"tag":"x00142008","vr":"IS","vm":"1","name":"EvaluationAttempt"},"x00142012":{"tag":"x00142012","vr":"SQ","vm":"1","name":"IndicationSequence"},"x00142014":{"tag":"x00142014","vr":"IS","vm":"1","name":"IndicationNumber "},"x00142016":{"tag":"x00142016","vr":"SH","vm":"1","name":"IndicationLabel"},"x00142018":{"tag":"x00142018","vr":"ST","vm":"1","name":"IndicationDescription"},"x0014201A":{"tag":"x0014201A","vr":"CS","vm":"1-n","name":"IndicationType"},"x0014201C":{"tag":"x0014201C","vr":"CS","vm":"1","name":"IndicationDisposition"},"x0014201E":{"tag":"x0014201E","vr":"SQ","vm":"1","name":"IndicationROISequence"},"x00142030":{"tag":"x00142030","vr":"SQ","vm":"1","name":"IndicationPhysicalPropertySequence"},"x00142032":{"tag":"x00142032","vr":"SH","vm":"1","name":"PropertyLabel"},"x00142202":{"tag":"x00142202","vr":"IS","vm":"1","name":"CoordinateSystemNumberOfAxes "},"x00142204":{"tag":"x00142204","vr":"SQ","vm":"1","name":"CoordinateSystemAxesSequence"},"x00142206":{"tag":"x00142206","vr":"ST","vm":"1","name":"CoordinateSystemAxisDescription"},"x00142208":{"tag":"x00142208","vr":"CS","vm":"1","name":"CoordinateSystemDataSetMapping"},"x0014220A":{"tag":"x0014220A","vr":"IS","vm":"1","name":"CoordinateSystemAxisNumber"},"x0014220C":{"tag":"x0014220C","vr":"CS","vm":"1","name":"CoordinateSystemAxisType"},"x0014220E":{"tag":"x0014220E","vr":"CS","vm":"1","name":"CoordinateSystemAxisUnits"},"x00142210":{"tag":"x00142210","vr":"OB","vm":"1","name":"CoordinateSystemAxisValues"},"x00142220":{"tag":"x00142220","vr":"SQ","vm":"1","name":"CoordinateSystemTransformSequence"},"x00142222":{"tag":"x00142222","vr":"ST","vm":"1","name":"TransformDescription"},"x00142224":{"tag":"x00142224","vr":"IS","vm":"1","name":"TransformNumberOfAxes"},"x00142226":{"tag":"x00142226","vr":"IS","vm":"1-n","name":"TransformOrderOfAxes"},"x00142228":{"tag":"x00142228","vr":"CS","vm":"1","name":"TransformedAxisUnits"},"x0014222A":{"tag":"x0014222A","vr":"DS","vm":"1-n","name":"CoordinateSystemTransformRotationAndScaleMatrix"},"x0014222C":{"tag":"x0014222C","vr":"DS","vm":"1-n","name":"CoordinateSystemTransformTranslationMatrix"},"x00143011":{"tag":"x00143011","vr":"DS","vm":"1","name":"InternalDetectorFrameTime"},"x00143012":{"tag":"x00143012","vr":"DS","vm":"1","name":"NumberOfFramesIntegrated"},"x00143020":{"tag":"x00143020","vr":"SQ","vm":"1","name":"DetectorTemperatureSequence"},"x00143022":{"tag":"x00143022","vr":"DS","vm":"1","name":"SensorName"},"x00143024":{"tag":"x00143024","vr":"DS","vm":"1","name":"HorizontalOffsetOfSensor"},"x00143026":{"tag":"x00143026","vr":"DS","vm":"1","name":"VerticalOffsetOfSensor"},"x00143028":{"tag":"x00143028","vr":"DS","vm":"1","name":"SensorTemperature"},"x00143040":{"tag":"x00143040","vr":"SQ","vm":"1","name":"DarkCurrentSequence"},"x00143050":{"tag":"x00143050","vr":"OB|OW","vm":"1","name":"DarkCurrentCounts"},"x00143060":{"tag":"x00143060","vr":"SQ","vm":"1","name":"GainCorrectionReferenceSequence"},"x00143070":{"tag":"x00143070","vr":"OB|OW","vm":"1","name":"AirCounts"},"x00143071":{"tag":"x00143071","vr":"DS","vm":"1","name":"KVUsedInGainCalibration"},"x00143072":{"tag":"x00143072","vr":"DS","vm":"1","name":"MAUsedInGainCalibration"},"x00143073":{"tag":"x00143073","vr":"DS","vm":"1","name":"NumberOfFramesUsedForIntegration"},"x00143074":{"tag":"x00143074","vr":"LO","vm":"1","name":"FilterMaterialUsedInGainCalibration"},"x00143075":{"tag":"x00143075","vr":"DS","vm":"1","name":"FilterThicknessUsedInGainCalibration"},"x00143076":{"tag":"x00143076","vr":"DA","vm":"1","name":"DateOfGainCalibration"},"x00143077":{"tag":"x00143077","vr":"TM","vm":"1","name":"TimeOfGainCalibration"},"x00143080":{"tag":"x00143080","vr":"OB","vm":"1","name":"BadPixelImage"},"x00143099":{"tag":"x00143099","vr":"LT","vm":"1","name":"CalibrationNotes"},"x00144002":{"tag":"x00144002","vr":"SQ","vm":"1","name":"PulserEquipmentSequence"},"x00144004":{"tag":"x00144004","vr":"CS","vm":"1","name":"PulserType"},"x00144006":{"tag":"x00144006","vr":"LT","vm":"1","name":"PulserNotes"},"x00144008":{"tag":"x00144008","vr":"SQ","vm":"1","name":"ReceiverEquipmentSequence"},"x0014400A":{"tag":"x0014400A","vr":"CS","vm":"1","name":"AmplifierType"},"x0014400C":{"tag":"x0014400C","vr":"LT","vm":"1","name":"ReceiverNotes"},"x0014400E":{"tag":"x0014400E","vr":"SQ","vm":"1","name":"PreAmplifierEquipmentSequence"},"x0014400F":{"tag":"x0014400F","vr":"LT","vm":"1","name":"PreAmplifierNotes"},"x00144010":{"tag":"x00144010","vr":"SQ","vm":"1","name":"TransmitTransducerSequence"},"x00144011":{"tag":"x00144011","vr":"SQ","vm":"1","name":"ReceiveTransducerSequence"},"x00144012":{"tag":"x00144012","vr":"US","vm":"1","name":"NumberOfElements"},"x00144013":{"tag":"x00144013","vr":"CS","vm":"1","name":"ElementShape"},"x00144014":{"tag":"x00144014","vr":"DS","vm":"1","name":"ElementDimensionA"},"x00144015":{"tag":"x00144015","vr":"DS","vm":"1","name":"ElementDimensionB"},"x00144016":{"tag":"x00144016","vr":"DS","vm":"1","name":"ElementPitch"},"x00144017":{"tag":"x00144017","vr":"DS","vm":"1","name":"MeasuredBeamDimensionA"},"x00144018":{"tag":"x00144018","vr":"DS","vm":"1","name":"MeasuredBeamDimensionB"},"x00144019":{"tag":"x00144019","vr":"DS","vm":"1","name":"LocationOfMeasuredBeamDiameter"},"x0014401A":{"tag":"x0014401A","vr":"DS","vm":"1","name":"NominalFrequency"},"x0014401B":{"tag":"x0014401B","vr":"DS","vm":"1","name":"MeasuredCenterFrequency"},"x0014401C":{"tag":"x0014401C","vr":"DS","vm":"1","name":"MeasuredBandwidth"},"x00144020":{"tag":"x00144020","vr":"SQ","vm":"1","name":"PulserSettingsSequence"},"x00144022":{"tag":"x00144022","vr":"DS","vm":"1","name":"PulseWidth"},"x00144024":{"tag":"x00144024","vr":"DS","vm":"1","name":"ExcitationFrequency"},"x00144026":{"tag":"x00144026","vr":"CS","vm":"1","name":"ModulationType"},"x00144028":{"tag":"x00144028","vr":"DS","vm":"1","name":"Damping"},"x00144030":{"tag":"x00144030","vr":"SQ","vm":"1","name":"ReceiverSettingsSequence"},"x00144031":{"tag":"x00144031","vr":"DS","vm":"1","name":"AcquiredSoundpathLength"},"x00144032":{"tag":"x00144032","vr":"CS","vm":"1","name":"AcquisitionCompressionType"},"x00144033":{"tag":"x00144033","vr":"IS","vm":"1","name":"AcquisitionSampleSize"},"x00144034":{"tag":"x00144034","vr":"DS","vm":"1","name":"RectifierSmoothing"},"x00144035":{"tag":"x00144035","vr":"SQ","vm":"1","name":"DACSequence"},"x00144036":{"tag":"x00144036","vr":"CS","vm":"1","name":"DACType"},"x00144038":{"tag":"x00144038","vr":"DS","vm":"1-n","name":"DACGainPoints"},"x0014403A":{"tag":"x0014403A","vr":"DS","vm":"1-n","name":"DACTimePoints"},"x0014403C":{"tag":"x0014403C","vr":"DS","vm":"1-n","name":"DACAmplitude"},"x00144040":{"tag":"x00144040","vr":"SQ","vm":"1","name":"PreAmplifierSettingsSequence"},"x00144050":{"tag":"x00144050","vr":"SQ","vm":"1","name":"TransmitTransducerSettingsSequence"},"x00144051":{"tag":"x00144051","vr":"SQ","vm":"1","name":"ReceiveTransducerSettingsSequence"},"x00144052":{"tag":"x00144052","vr":"DS","vm":"1","name":"IncidentAngle"},"x00144054":{"tag":"x00144054","vr":"ST","vm":"1","name":"CouplingTechnique"},"x00144056":{"tag":"x00144056","vr":"ST","vm":"1","name":"CouplingMedium"},"x00144057":{"tag":"x00144057","vr":"DS","vm":"1","name":"CouplingVelocity"},"x00144058":{"tag":"x00144058","vr":"DS","vm":"1","name":"CrystalCenterLocationX"},"x00144059":{"tag":"x00144059","vr":"DS","vm":"1","name":"CrystalCenterLocationZ"},"x0014405A":{"tag":"x0014405A","vr":"DS","vm":"1","name":"SoundPathLength"},"x0014405C":{"tag":"x0014405C","vr":"ST","vm":"1","name":"DelayLawIdentifier"},"x00144060":{"tag":"x00144060","vr":"SQ","vm":"1","name":"GateSettingsSequence"},"x00144062":{"tag":"x00144062","vr":"DS","vm":"1","name":"GateThreshold"},"x00144064":{"tag":"x00144064","vr":"DS","vm":"1","name":"VelocityOfSound"},"x00144070":{"tag":"x00144070","vr":"SQ","vm":"1","name":"CalibrationSettingsSequence"},"x00144072":{"tag":"x00144072","vr":"ST","vm":"1","name":"CalibrationProcedure"},"x00144074":{"tag":"x00144074","vr":"SH","vm":"1","name":"ProcedureVersion"},"x00144076":{"tag":"x00144076","vr":"DA","vm":"1","name":"ProcedureCreationDate"},"x00144078":{"tag":"x00144078","vr":"DA","vm":"1","name":"ProcedureExpirationDate"},"x0014407A":{"tag":"x0014407A","vr":"DA","vm":"1","name":"ProcedureLastModifiedDate"},"x0014407C":{"tag":"x0014407C","vr":"TM","vm":"1-n","name":"CalibrationTime"},"x0014407E":{"tag":"x0014407E","vr":"DA","vm":"1-n","name":"CalibrationDate"},"x00145002":{"tag":"x00145002","vr":"IS","vm":"1","name":"LINACEnergy"},"x00145004":{"tag":"x00145004","vr":"IS","vm":"1","name":"LINACOutput"},"x00180010":{"tag":"x00180010","vr":"LO","vm":"1","name":"ContrastBolusAgent"},"x00180012":{"tag":"x00180012","vr":"SQ","vm":"1","name":"ContrastBolusAgentSequence"},"x00180014":{"tag":"x00180014","vr":"SQ","vm":"1","name":"ContrastBolusAdministrationRouteSequence"},"x00180015":{"tag":"x00180015","vr":"CS","vm":"1","name":"BodyPartExamined"},"x00180020":{"tag":"x00180020","vr":"CS","vm":"1-n","name":"ScanningSequence"},"x00180021":{"tag":"x00180021","vr":"CS","vm":"1-n","name":"SequenceVariant"},"x00180022":{"tag":"x00180022","vr":"CS","vm":"1-n","name":"ScanOptions"},"x00180023":{"tag":"x00180023","vr":"CS","vm":"1","name":"MRAcquisitionType"},"x00180024":{"tag":"x00180024","vr":"SH","vm":"1","name":"SequenceName"},"x00180025":{"tag":"x00180025","vr":"CS","vm":"1","name":"AngioFlag"},"x00180026":{"tag":"x00180026","vr":"SQ","vm":"1","name":"InterventionDrugInformationSequence"},"x00180027":{"tag":"x00180027","vr":"TM","vm":"1","name":"InterventionDrugStopTime"},"x00180028":{"tag":"x00180028","vr":"DS","vm":"1","name":"InterventionDrugDose"},"x00180029":{"tag":"x00180029","vr":"SQ","vm":"1","name":"InterventionDrugCodeSequence"},"x0018002A":{"tag":"x0018002A","vr":"SQ","vm":"1","name":"AdditionalDrugSequence"},"x00180030":{"tag":"x00180030","vr":"LO","vm":"1-n","name":"Radionuclide"},"x00180031":{"tag":"x00180031","vr":"LO","vm":"1","name":"Radiopharmaceutical"},"x00180032":{"tag":"x00180032","vr":"DS","vm":"1","name":"EnergyWindowCenterline"},"x00180033":{"tag":"x00180033","vr":"DS","vm":"1-n","name":"EnergyWindowTotalWidth"},"x00180034":{"tag":"x00180034","vr":"LO","vm":"1","name":"InterventionDrugName"},"x00180035":{"tag":"x00180035","vr":"TM","vm":"1","name":"InterventionDrugStartTime"},"x00180036":{"tag":"x00180036","vr":"SQ","vm":"1","name":"InterventionSequence"},"x00180037":{"tag":"x00180037","vr":"CS","vm":"1","name":"TherapyType"},"x00180038":{"tag":"x00180038","vr":"CS","vm":"1","name":"InterventionStatus"},"x00180039":{"tag":"x00180039","vr":"CS","vm":"1","name":"TherapyDescription"},"x0018003A":{"tag":"x0018003A","vr":"ST","vm":"1","name":"InterventionDescription"},"x00180040":{"tag":"x00180040","vr":"IS","vm":"1","name":"CineRate"},"x00180042":{"tag":"x00180042","vr":"CS","vm":"1","name":"InitialCineRunState"},"x00180050":{"tag":"x00180050","vr":"DS","vm":"1","name":"SliceThickness"},"x00180060":{"tag":"x00180060","vr":"DS","vm":"1","name":"KVP"},"x00180070":{"tag":"x00180070","vr":"IS","vm":"1","name":"CountsAccumulated"},"x00180071":{"tag":"x00180071","vr":"CS","vm":"1","name":"AcquisitionTerminationCondition"},"x00180072":{"tag":"x00180072","vr":"DS","vm":"1","name":"EffectiveDuration"},"x00180073":{"tag":"x00180073","vr":"CS","vm":"1","name":"AcquisitionStartCondition"},"x00180074":{"tag":"x00180074","vr":"IS","vm":"1","name":"AcquisitionStartConditionData"},"x00180075":{"tag":"x00180075","vr":"IS","vm":"1","name":"AcquisitionTerminationConditionData"},"x00180080":{"tag":"x00180080","vr":"DS","vm":"1","name":"RepetitionTime"},"x00180081":{"tag":"x00180081","vr":"DS","vm":"1","name":"EchoTime"},"x00180082":{"tag":"x00180082","vr":"DS","vm":"1","name":"InversionTime"},"x00180083":{"tag":"x00180083","vr":"DS","vm":"1","name":"NumberOfAverages"},"x00180084":{"tag":"x00180084","vr":"DS","vm":"1","name":"ImagingFrequency"},"x00180085":{"tag":"x00180085","vr":"SH","vm":"1","name":"ImagedNucleus"},"x00180086":{"tag":"x00180086","vr":"IS","vm":"1-n","name":"EchoNumbers"},"x00180087":{"tag":"x00180087","vr":"DS","vm":"1","name":"MagneticFieldStrength"},"x00180088":{"tag":"x00180088","vr":"DS","vm":"1","name":"SpacingBetweenSlices"},"x00180089":{"tag":"x00180089","vr":"IS","vm":"1","name":"NumberOfPhaseEncodingSteps"},"x00180090":{"tag":"x00180090","vr":"DS","vm":"1","name":"DataCollectionDiameter"},"x00180091":{"tag":"x00180091","vr":"IS","vm":"1","name":"EchoTrainLength"},"x00180093":{"tag":"x00180093","vr":"DS","vm":"1","name":"PercentSampling"},"x00180094":{"tag":"x00180094","vr":"DS","vm":"1","name":"PercentPhaseFieldOfView"},"x00180095":{"tag":"x00180095","vr":"DS","vm":"1","name":"PixelBandwidth"},"x00181000":{"tag":"x00181000","vr":"LO","vm":"1","name":"DeviceSerialNumber"},"x00181002":{"tag":"x00181002","vr":"UI","vm":"1","name":"DeviceUID"},"x00181003":{"tag":"x00181003","vr":"LO","vm":"1","name":"DeviceID"},"x00181004":{"tag":"x00181004","vr":"LO","vm":"1","name":"PlateID"},"x00181005":{"tag":"x00181005","vr":"LO","vm":"1","name":"GeneratorID"},"x00181006":{"tag":"x00181006","vr":"LO","vm":"1","name":"GridID"},"x00181007":{"tag":"x00181007","vr":"LO","vm":"1","name":"CassetteID"},"x00181008":{"tag":"x00181008","vr":"LO","vm":"1","name":"GantryID"},"x00181010":{"tag":"x00181010","vr":"LO","vm":"1","name":"SecondaryCaptureDeviceID"},"x00181011":{"tag":"x00181011","vr":"LO","vm":"1","name":"HardcopyCreationDeviceID"},"x00181012":{"tag":"x00181012","vr":"DA","vm":"1","name":"DateOfSecondaryCapture"},"x00181014":{"tag":"x00181014","vr":"TM","vm":"1","name":"TimeOfSecondaryCapture"},"x00181016":{"tag":"x00181016","vr":"LO","vm":"1","name":"SecondaryCaptureDeviceManufacturer"},"x00181017":{"tag":"x00181017","vr":"LO","vm":"1","name":"HardcopyDeviceManufacturer"},"x00181018":{"tag":"x00181018","vr":"LO","vm":"1","name":"SecondaryCaptureDeviceManufacturerModelName"},"x00181019":{"tag":"x00181019","vr":"LO","vm":"1-n","name":"SecondaryCaptureDeviceSoftwareVersions"},"x0018101A":{"tag":"x0018101A","vr":"LO","vm":"1-n","name":"HardcopyDeviceSoftwareVersion"},"x0018101B":{"tag":"x0018101B","vr":"LO","vm":"1","name":"HardcopyDeviceManufacturerModelName"},"x00181020":{"tag":"x00181020","vr":"LO","vm":"1-n","name":"SoftwareVersions"},"x00181022":{"tag":"x00181022","vr":"SH","vm":"1","name":"VideoImageFormatAcquired"},"x00181023":{"tag":"x00181023","vr":"LO","vm":"1","name":"DigitalImageFormatAcquired"},"x00181030":{"tag":"x00181030","vr":"LO","vm":"1","name":"ProtocolName"},"x00181040":{"tag":"x00181040","vr":"LO","vm":"1","name":"ContrastBolusRoute"},"x00181041":{"tag":"x00181041","vr":"DS","vm":"1","name":"ContrastBolusVolume"},"x00181042":{"tag":"x00181042","vr":"TM","vm":"1","name":"ContrastBolusStartTime"},"x00181043":{"tag":"x00181043","vr":"TM","vm":"1","name":"ContrastBolusStopTime"},"x00181044":{"tag":"x00181044","vr":"DS","vm":"1","name":"ContrastBolusTotalDose"},"x00181045":{"tag":"x00181045","vr":"IS","vm":"1","name":"SyringeCounts"},"x00181046":{"tag":"x00181046","vr":"DS","vm":"1-n","name":"ContrastFlowRate"},"x00181047":{"tag":"x00181047","vr":"DS","vm":"1-n","name":"ContrastFlowDuration"},"x00181048":{"tag":"x00181048","vr":"CS","vm":"1","name":"ContrastBolusIngredient"},"x00181049":{"tag":"x00181049","vr":"DS","vm":"1","name":"ContrastBolusIngredientConcentration"},"x00181050":{"tag":"x00181050","vr":"DS","vm":"1","name":"SpatialResolution"},"x00181060":{"tag":"x00181060","vr":"DS","vm":"1","name":"TriggerTime"},"x00181061":{"tag":"x00181061","vr":"LO","vm":"1","name":"TriggerSourceOrType"},"x00181062":{"tag":"x00181062","vr":"IS","vm":"1","name":"NominalInterval"},"x00181063":{"tag":"x00181063","vr":"DS","vm":"1","name":"FrameTime"},"x00181064":{"tag":"x00181064","vr":"LO","vm":"1","name":"CardiacFramingType"},"x00181065":{"tag":"x00181065","vr":"DS","vm":"1-n","name":"FrameTimeVector"},"x00181066":{"tag":"x00181066","vr":"DS","vm":"1","name":"FrameDelay"},"x00181067":{"tag":"x00181067","vr":"DS","vm":"1","name":"ImageTriggerDelay"},"x00181068":{"tag":"x00181068","vr":"DS","vm":"1","name":"MultiplexGroupTimeOffset"},"x00181069":{"tag":"x00181069","vr":"DS","vm":"1","name":"TriggerTimeOffset"},"x0018106A":{"tag":"x0018106A","vr":"CS","vm":"1","name":"SynchronizationTrigger"},"x0018106C":{"tag":"x0018106C","vr":"US","vm":"2","name":"SynchronizationChannel"},"x0018106E":{"tag":"x0018106E","vr":"UL","vm":"1","name":"TriggerSamplePosition"},"x00181070":{"tag":"x00181070","vr":"LO","vm":"1","name":"RadiopharmaceuticalRoute"},"x00181071":{"tag":"x00181071","vr":"DS","vm":"1","name":"RadiopharmaceuticalVolume"},"x00181072":{"tag":"x00181072","vr":"TM","vm":"1","name":"RadiopharmaceuticalStartTime"},"x00181073":{"tag":"x00181073","vr":"TM","vm":"1","name":"RadiopharmaceuticalStopTime"},"x00181074":{"tag":"x00181074","vr":"DS","vm":"1","name":"RadionuclideTotalDose"},"x00181075":{"tag":"x00181075","vr":"DS","vm":"1","name":"RadionuclideHalfLife"},"x00181076":{"tag":"x00181076","vr":"DS","vm":"1","name":"RadionuclidePositronFraction"},"x00181077":{"tag":"x00181077","vr":"DS","vm":"1","name":"RadiopharmaceuticalSpecificActivity"},"x00181078":{"tag":"x00181078","vr":"DT","vm":"1","name":"RadiopharmaceuticalStartDateTime"},"x00181079":{"tag":"x00181079","vr":"DT","vm":"1","name":"RadiopharmaceuticalStopDateTime"},"x00181080":{"tag":"x00181080","vr":"CS","vm":"1","name":"BeatRejectionFlag"},"x00181081":{"tag":"x00181081","vr":"IS","vm":"1","name":"LowRRValue"},"x00181082":{"tag":"x00181082","vr":"IS","vm":"1","name":"HighRRValue"},"x00181083":{"tag":"x00181083","vr":"IS","vm":"1","name":"IntervalsAcquired"},"x00181084":{"tag":"x00181084","vr":"IS","vm":"1","name":"IntervalsRejected"},"x00181085":{"tag":"x00181085","vr":"LO","vm":"1","name":"PVCRejection"},"x00181086":{"tag":"x00181086","vr":"IS","vm":"1","name":"SkipBeats"},"x00181088":{"tag":"x00181088","vr":"IS","vm":"1","name":"HeartRate"},"x00181090":{"tag":"x00181090","vr":"IS","vm":"1","name":"CardiacNumberOfImages"},"x00181094":{"tag":"x00181094","vr":"IS","vm":"1","name":"TriggerWindow"},"x00181100":{"tag":"x00181100","vr":"DS","vm":"1","name":"ReconstructionDiameter"},"x00181110":{"tag":"x00181110","vr":"DS","vm":"1","name":"DistanceSourceToDetector"},"x00181111":{"tag":"x00181111","vr":"DS","vm":"1","name":"DistanceSourceToPatient"},"x00181114":{"tag":"x00181114","vr":"DS","vm":"1","name":"EstimatedRadiographicMagnificationFactor"},"x00181120":{"tag":"x00181120","vr":"DS","vm":"1","name":"GantryDetectorTilt"},"x00181121":{"tag":"x00181121","vr":"DS","vm":"1","name":"GantryDetectorSlew"},"x00181130":{"tag":"x00181130","vr":"DS","vm":"1","name":"TableHeight"},"x00181131":{"tag":"x00181131","vr":"DS","vm":"1","name":"TableTraverse"},"x00181134":{"tag":"x00181134","vr":"CS","vm":"1","name":"TableMotion"},"x00181135":{"tag":"x00181135","vr":"DS","vm":"1-n","name":"TableVerticalIncrement"},"x00181136":{"tag":"x00181136","vr":"DS","vm":"1-n","name":"TableLateralIncrement"},"x00181137":{"tag":"x00181137","vr":"DS","vm":"1-n","name":"TableLongitudinalIncrement"},"x00181138":{"tag":"x00181138","vr":"DS","vm":"1","name":"TableAngle"},"x0018113A":{"tag":"x0018113A","vr":"CS","vm":"1","name":"TableType"},"x00181140":{"tag":"x00181140","vr":"CS","vm":"1","name":"RotationDirection"},"x00181141":{"tag":"x00181141","vr":"DS","vm":"1","name":"AngularPosition"},"x00181142":{"tag":"x00181142","vr":"DS","vm":"1-n","name":"RadialPosition"},"x00181143":{"tag":"x00181143","vr":"DS","vm":"1","name":"ScanArc"},"x00181144":{"tag":"x00181144","vr":"DS","vm":"1","name":"AngularStep"},"x00181145":{"tag":"x00181145","vr":"DS","vm":"1","name":"CenterOfRotationOffset"},"x00181146":{"tag":"x00181146","vr":"DS","vm":"1-n","name":"RotationOffset"},"x00181147":{"tag":"x00181147","vr":"CS","vm":"1","name":"FieldOfViewShape"},"x00181149":{"tag":"x00181149","vr":"IS","vm":"1-2","name":"FieldOfViewDimensions"},"x00181150":{"tag":"x00181150","vr":"IS","vm":"1","name":"ExposureTime"},"x00181151":{"tag":"x00181151","vr":"IS","vm":"1","name":"XRayTubeCurrent"},"x00181152":{"tag":"x00181152","vr":"IS","vm":"1","name":"Exposure"},"x00181153":{"tag":"x00181153","vr":"IS","vm":"1","name":"ExposureInuAs"},"x00181154":{"tag":"x00181154","vr":"DS","vm":"1","name":"AveragePulseWidth"},"x00181155":{"tag":"x00181155","vr":"CS","vm":"1","name":"RadiationSetting"},"x00181156":{"tag":"x00181156","vr":"CS","vm":"1","name":"RectificationType"},"x0018115A":{"tag":"x0018115A","vr":"CS","vm":"1","name":"RadiationMode"},"x0018115E":{"tag":"x0018115E","vr":"DS","vm":"1","name":"ImageAndFluoroscopyAreaDoseProduct"},"x00181160":{"tag":"x00181160","vr":"SH","vm":"1","name":"FilterType"},"x00181161":{"tag":"x00181161","vr":"LO","vm":"1-n","name":"TypeOfFilters"},"x00181162":{"tag":"x00181162","vr":"DS","vm":"1","name":"IntensifierSize"},"x00181164":{"tag":"x00181164","vr":"DS","vm":"2","name":"ImagerPixelSpacing"},"x00181166":{"tag":"x00181166","vr":"CS","vm":"1-n","name":"Grid"},"x00181170":{"tag":"x00181170","vr":"IS","vm":"1","name":"GeneratorPower"},"x00181180":{"tag":"x00181180","vr":"SH","vm":"1","name":"CollimatorGridName"},"x00181181":{"tag":"x00181181","vr":"CS","vm":"1","name":"CollimatorType"},"x00181182":{"tag":"x00181182","vr":"IS","vm":"1-2","name":"FocalDistance"},"x00181183":{"tag":"x00181183","vr":"DS","vm":"1-2","name":"XFocusCenter"},"x00181184":{"tag":"x00181184","vr":"DS","vm":"1-2","name":"YFocusCenter"},"x00181190":{"tag":"x00181190","vr":"DS","vm":"1-n","name":"FocalSpots"},"x00181191":{"tag":"x00181191","vr":"CS","vm":"1","name":"AnodeTargetMaterial"},"x001811A0":{"tag":"x001811A0","vr":"DS","vm":"1","name":"BodyPartThickness"},"x001811A2":{"tag":"x001811A2","vr":"DS","vm":"1","name":"CompressionForce"},"x00181200":{"tag":"x00181200","vr":"DA","vm":"1-n","name":"DateOfLastCalibration"},"x00181201":{"tag":"x00181201","vr":"TM","vm":"1-n","name":"TimeOfLastCalibration"},"x00181210":{"tag":"x00181210","vr":"SH","vm":"1-n","name":"ConvolutionKernel"},"x00181240":{"tag":"x00181240","vr":"IS","vm":"1-n","name":"UpperLowerPixelValues"},"x00181242":{"tag":"x00181242","vr":"IS","vm":"1","name":"ActualFrameDuration"},"x00181243":{"tag":"x00181243","vr":"IS","vm":"1","name":"CountRate"},"x00181244":{"tag":"x00181244","vr":"US","vm":"1","name":"PreferredPlaybackSequencing"},"x00181250":{"tag":"x00181250","vr":"SH","vm":"1","name":"ReceiveCoilName"},"x00181251":{"tag":"x00181251","vr":"SH","vm":"1","name":"TransmitCoilName"},"x00181260":{"tag":"x00181260","vr":"SH","vm":"1","name":"PlateType"},"x00181261":{"tag":"x00181261","vr":"LO","vm":"1","name":"PhosphorType"},"x00181300":{"tag":"x00181300","vr":"DS","vm":"1","name":"ScanVelocity"},"x00181301":{"tag":"x00181301","vr":"CS","vm":"1-n","name":"WholeBodyTechnique"},"x00181302":{"tag":"x00181302","vr":"IS","vm":"1","name":"ScanLength"},"x00181310":{"tag":"x00181310","vr":"US","vm":"4","name":"AcquisitionMatrix"},"x00181312":{"tag":"x00181312","vr":"CS","vm":"1","name":"InPlanePhaseEncodingDirection"},"x00181314":{"tag":"x00181314","vr":"DS","vm":"1","name":"FlipAngle"},"x00181315":{"tag":"x00181315","vr":"CS","vm":"1","name":"VariableFlipAngleFlag"},"x00181316":{"tag":"x00181316","vr":"DS","vm":"1","name":"SAR"},"x00181318":{"tag":"x00181318","vr":"DS","vm":"1","name":"dBdt"},"x00181400":{"tag":"x00181400","vr":"LO","vm":"1","name":"AcquisitionDeviceProcessingDescription"},"x00181401":{"tag":"x00181401","vr":"LO","vm":"1","name":"AcquisitionDeviceProcessingCode"},"x00181402":{"tag":"x00181402","vr":"CS","vm":"1","name":"CassetteOrientation"},"x00181403":{"tag":"x00181403","vr":"CS","vm":"1","name":"CassetteSize"},"x00181404":{"tag":"x00181404","vr":"US","vm":"1","name":"ExposuresOnPlate"},"x00181405":{"tag":"x00181405","vr":"IS","vm":"1","name":"RelativeXRayExposure"},"x00181411":{"tag":"x00181411","vr":"DS","vm":"1","name":"ExposureIndex"},"x00181412":{"tag":"x00181412","vr":"DS","vm":"1","name":"TargetExposureIndex"},"x00181413":{"tag":"x00181413","vr":"DS","vm":"1","name":"DeviationIndex"},"x00181450":{"tag":"x00181450","vr":"DS","vm":"1","name":"ColumnAngulation"},"x00181460":{"tag":"x00181460","vr":"DS","vm":"1","name":"TomoLayerHeight"},"x00181470":{"tag":"x00181470","vr":"DS","vm":"1","name":"TomoAngle"},"x00181480":{"tag":"x00181480","vr":"DS","vm":"1","name":"TomoTime"},"x00181490":{"tag":"x00181490","vr":"CS","vm":"1","name":"TomoType"},"x00181491":{"tag":"x00181491","vr":"CS","vm":"1","name":"TomoClass"},"x00181495":{"tag":"x00181495","vr":"IS","vm":"1","name":"NumberOfTomosynthesisSourceImages"},"x00181500":{"tag":"x00181500","vr":"CS","vm":"1","name":"PositionerMotion"},"x00181508":{"tag":"x00181508","vr":"CS","vm":"1","name":"PositionerType"},"x00181510":{"tag":"x00181510","vr":"DS","vm":"1","name":"PositionerPrimaryAngle"},"x00181511":{"tag":"x00181511","vr":"DS","vm":"1","name":"PositionerSecondaryAngle"},"x00181520":{"tag":"x00181520","vr":"DS","vm":"1-n","name":"PositionerPrimaryAngleIncrement"},"x00181521":{"tag":"x00181521","vr":"DS","vm":"1-n","name":"PositionerSecondaryAngleIncrement"},"x00181530":{"tag":"x00181530","vr":"DS","vm":"1","name":"DetectorPrimaryAngle"},"x00181531":{"tag":"x00181531","vr":"DS","vm":"1","name":"DetectorSecondaryAngle"},"x00181600":{"tag":"x00181600","vr":"CS","vm":"1-3","name":"ShutterShape"},"x00181602":{"tag":"x00181602","vr":"IS","vm":"1","name":"ShutterLeftVerticalEdge"},"x00181604":{"tag":"x00181604","vr":"IS","vm":"1","name":"ShutterRightVerticalEdge"},"x00181606":{"tag":"x00181606","vr":"IS","vm":"1","name":"ShutterUpperHorizontalEdge"},"x00181608":{"tag":"x00181608","vr":"IS","vm":"1","name":"ShutterLowerHorizontalEdge"},"x00181610":{"tag":"x00181610","vr":"IS","vm":"2","name":"CenterOfCircularShutter"},"x00181612":{"tag":"x00181612","vr":"IS","vm":"1","name":"RadiusOfCircularShutter"},"x00181620":{"tag":"x00181620","vr":"IS","vm":"2-2n","name":"VerticesOfThePolygonalShutter"},"x00181622":{"tag":"x00181622","vr":"US","vm":"1","name":"ShutterPresentationValue"},"x00181623":{"tag":"x00181623","vr":"US","vm":"1","name":"ShutterOverlayGroup"},"x00181624":{"tag":"x00181624","vr":"US","vm":"3","name":"ShutterPresentationColorCIELabValue"},"x00181700":{"tag":"x00181700","vr":"CS","vm":"1-3","name":"CollimatorShape"},"x00181702":{"tag":"x00181702","vr":"IS","vm":"1","name":"CollimatorLeftVerticalEdge"},"x00181704":{"tag":"x00181704","vr":"IS","vm":"1","name":"CollimatorRightVerticalEdge"},"x00181706":{"tag":"x00181706","vr":"IS","vm":"1","name":"CollimatorUpperHorizontalEdge"},"x00181708":{"tag":"x00181708","vr":"IS","vm":"1","name":"CollimatorLowerHorizontalEdge"},"x00181710":{"tag":"x00181710","vr":"IS","vm":"2","name":"CenterOfCircularCollimator"},"x00181712":{"tag":"x00181712","vr":"IS","vm":"1","name":"RadiusOfCircularCollimator"},"x00181720":{"tag":"x00181720","vr":"IS","vm":"2-2n","name":"VerticesOfThePolygonalCollimator"},"x00181800":{"tag":"x00181800","vr":"CS","vm":"1","name":"AcquisitionTimeSynchronized"},"x00181801":{"tag":"x00181801","vr":"SH","vm":"1","name":"TimeSource"},"x00181802":{"tag":"x00181802","vr":"CS","vm":"1","name":"TimeDistributionProtocol"},"x00181803":{"tag":"x00181803","vr":"LO","vm":"1","name":"NTPSourceAddress"},"x00182001":{"tag":"x00182001","vr":"IS","vm":"1-n","name":"PageNumberVector"},"x00182002":{"tag":"x00182002","vr":"SH","vm":"1-n","name":"FrameLabelVector"},"x00182003":{"tag":"x00182003","vr":"DS","vm":"1-n","name":"FramePrimaryAngleVector"},"x00182004":{"tag":"x00182004","vr":"DS","vm":"1-n","name":"FrameSecondaryAngleVector"},"x00182005":{"tag":"x00182005","vr":"DS","vm":"1-n","name":"SliceLocationVector"},"x00182006":{"tag":"x00182006","vr":"SH","vm":"1-n","name":"DisplayWindowLabelVector"},"x00182010":{"tag":"x00182010","vr":"DS","vm":"2","name":"NominalScannedPixelSpacing"},"x00182020":{"tag":"x00182020","vr":"CS","vm":"1","name":"DigitizingDeviceTransportDirection"},"x00182030":{"tag":"x00182030","vr":"DS","vm":"1","name":"RotationOfScannedFilm"},"x00183100":{"tag":"x00183100","vr":"CS","vm":"1","name":"IVUSAcquisition"},"x00183101":{"tag":"x00183101","vr":"DS","vm":"1","name":"IVUSPullbackRate"},"x00183102":{"tag":"x00183102","vr":"DS","vm":"1","name":"IVUSGatedRate"},"x00183103":{"tag":"x00183103","vr":"IS","vm":"1","name":"IVUSPullbackStartFrameNumber"},"x00183104":{"tag":"x00183104","vr":"IS","vm":"1","name":"IVUSPullbackStopFrameNumber"},"x00183105":{"tag":"x00183105","vr":"IS","vm":"1-n","name":"LesionNumber"},"x00184000":{"tag":"x00184000","vr":"LT","vm":"1","name":"AcquisitionComments"},"x00185000":{"tag":"x00185000","vr":"SH","vm":"1-n","name":"OutputPower"},"x00185010":{"tag":"x00185010","vr":"LO","vm":"1-n","name":"TransducerData"},"x00185012":{"tag":"x00185012","vr":"DS","vm":"1","name":"FocusDepth"},"x00185020":{"tag":"x00185020","vr":"LO","vm":"1","name":"ProcessingFunction"},"x00185021":{"tag":"x00185021","vr":"LO","vm":"1","name":"PostprocessingFunction"},"x00185022":{"tag":"x00185022","vr":"DS","vm":"1","name":"MechanicalIndex"},"x00185024":{"tag":"x00185024","vr":"DS","vm":"1","name":"BoneThermalIndex"},"x00185026":{"tag":"x00185026","vr":"DS","vm":"1","name":"CranialThermalIndex"},"x00185027":{"tag":"x00185027","vr":"DS","vm":"1","name":"SoftTissueThermalIndex"},"x00185028":{"tag":"x00185028","vr":"DS","vm":"1","name":"SoftTissueFocusThermalIndex"},"x00185029":{"tag":"x00185029","vr":"DS","vm":"1","name":"SoftTissueSurfaceThermalIndex"},"x00185030":{"tag":"x00185030","vr":"DS","vm":"1","name":"DynamicRange"},"x00185040":{"tag":"x00185040","vr":"DS","vm":"1","name":"TotalGain"},"x00185050":{"tag":"x00185050","vr":"IS","vm":"1","name":"DepthOfScanField"},"x00185100":{"tag":"x00185100","vr":"CS","vm":"1","name":"PatientPosition"},"x00185101":{"tag":"x00185101","vr":"CS","vm":"1","name":"ViewPosition"},"x00185104":{"tag":"x00185104","vr":"SQ","vm":"1","name":"ProjectionEponymousNameCodeSequence"},"x00185210":{"tag":"x00185210","vr":"DS","vm":"6","name":"ImageTransformationMatrix"},"x00185212":{"tag":"x00185212","vr":"DS","vm":"3","name":"ImageTranslationVector"},"x00186000":{"tag":"x00186000","vr":"DS","vm":"1","name":"Sensitivity"},"x00186011":{"tag":"x00186011","vr":"SQ","vm":"1","name":"SequenceOfUltrasoundRegions"},"x00186012":{"tag":"x00186012","vr":"US","vm":"1","name":"RegionSpatialFormat"},"x00186014":{"tag":"x00186014","vr":"US","vm":"1","name":"RegionDataType"},"x00186016":{"tag":"x00186016","vr":"UL","vm":"1","name":"RegionFlags"},"x00186018":{"tag":"x00186018","vr":"UL","vm":"1","name":"RegionLocationMinX0"},"x0018601A":{"tag":"x0018601A","vr":"UL","vm":"1","name":"RegionLocationMinY0"},"x0018601C":{"tag":"x0018601C","vr":"UL","vm":"1","name":"RegionLocationMaxX1"},"x0018601E":{"tag":"x0018601E","vr":"UL","vm":"1","name":"RegionLocationMaxY1"},"x00186020":{"tag":"x00186020","vr":"SL","vm":"1","name":"ReferencePixelX0"},"x00186022":{"tag":"x00186022","vr":"SL","vm":"1","name":"ReferencePixelY0"},"x00186024":{"tag":"x00186024","vr":"US","vm":"1","name":"PhysicalUnitsXDirection"},"x00186026":{"tag":"x00186026","vr":"US","vm":"1","name":"PhysicalUnitsYDirection"},"x00186028":{"tag":"x00186028","vr":"FD","vm":"1","name":"ReferencePixelPhysicalValueX"},"x0018602A":{"tag":"x0018602A","vr":"FD","vm":"1","name":"ReferencePixelPhysicalValueY"},"x0018602C":{"tag":"x0018602C","vr":"FD","vm":"1","name":"PhysicalDeltaX"},"x0018602E":{"tag":"x0018602E","vr":"FD","vm":"1","name":"PhysicalDeltaY"},"x00186030":{"tag":"x00186030","vr":"UL","vm":"1","name":"TransducerFrequency"},"x00186031":{"tag":"x00186031","vr":"CS","vm":"1","name":"TransducerType"},"x00186032":{"tag":"x00186032","vr":"UL","vm":"1","name":"PulseRepetitionFrequency"},"x00186034":{"tag":"x00186034","vr":"FD","vm":"1","name":"DopplerCorrectionAngle"},"x00186036":{"tag":"x00186036","vr":"FD","vm":"1","name":"SteeringAngle"},"x00186038":{"tag":"x00186038","vr":"UL","vm":"1","name":"DopplerSampleVolumeXPositionRetired"},"x00186039":{"tag":"x00186039","vr":"SL","vm":"1","name":"DopplerSampleVolumeXPosition"},"x0018603A":{"tag":"x0018603A","vr":"UL","vm":"1","name":"DopplerSampleVolumeYPositionRetired"},"x0018603B":{"tag":"x0018603B","vr":"SL","vm":"1","name":"DopplerSampleVolumeYPosition"},"x0018603C":{"tag":"x0018603C","vr":"UL","vm":"1","name":"TMLinePositionX0Retired"},"x0018603D":{"tag":"x0018603D","vr":"SL","vm":"1","name":"TMLinePositionX0"},"x0018603E":{"tag":"x0018603E","vr":"UL","vm":"1","name":"TMLinePositionY0Retired"},"x0018603F":{"tag":"x0018603F","vr":"SL","vm":"1","name":"TMLinePositionY0"},"x00186040":{"tag":"x00186040","vr":"UL","vm":"1","name":"TMLinePositionX1Retired"},"x00186041":{"tag":"x00186041","vr":"SL","vm":"1","name":"TMLinePositionX1"},"x00186042":{"tag":"x00186042","vr":"UL","vm":"1","name":"TMLinePositionY1Retired"},"x00186043":{"tag":"x00186043","vr":"SL","vm":"1","name":"TMLinePositionY1"},"x00186044":{"tag":"x00186044","vr":"US","vm":"1","name":"PixelComponentOrganization"},"x00186046":{"tag":"x00186046","vr":"UL","vm":"1","name":"PixelComponentMask"},"x00186048":{"tag":"x00186048","vr":"UL","vm":"1","name":"PixelComponentRangeStart"},"x0018604A":{"tag":"x0018604A","vr":"UL","vm":"1","name":"PixelComponentRangeStop"},"x0018604C":{"tag":"x0018604C","vr":"US","vm":"1","name":"PixelComponentPhysicalUnits"},"x0018604E":{"tag":"x0018604E","vr":"US","vm":"1","name":"PixelComponentDataType"},"x00186050":{"tag":"x00186050","vr":"UL","vm":"1","name":"NumberOfTableBreakPoints"},"x00186052":{"tag":"x00186052","vr":"UL","vm":"1-n","name":"TableOfXBreakPoints"},"x00186054":{"tag":"x00186054","vr":"FD","vm":"1-n","name":"TableOfYBreakPoints"},"x00186056":{"tag":"x00186056","vr":"UL","vm":"1","name":"NumberOfTableEntries"},"x00186058":{"tag":"x00186058","vr":"UL","vm":"1-n","name":"TableOfPixelValues"},"x0018605A":{"tag":"x0018605A","vr":"FL","vm":"1-n","name":"TableOfParameterValues"},"x00186060":{"tag":"x00186060","vr":"FL","vm":"1-n","name":"RWaveTimeVector"},"x00187000":{"tag":"x00187000","vr":"CS","vm":"1","name":"DetectorConditionsNominalFlag"},"x00187001":{"tag":"x00187001","vr":"DS","vm":"1","name":"DetectorTemperature"},"x00187004":{"tag":"x00187004","vr":"CS","vm":"1","name":"DetectorType"},"x00187005":{"tag":"x00187005","vr":"CS","vm":"1","name":"DetectorConfiguration"},"x00187006":{"tag":"x00187006","vr":"LT","vm":"1","name":"DetectorDescription"},"x00187008":{"tag":"x00187008","vr":"LT","vm":"1","name":"DetectorMode"},"x0018700A":{"tag":"x0018700A","vr":"SH","vm":"1","name":"DetectorID"},"x0018700C":{"tag":"x0018700C","vr":"DA","vm":"1","name":"DateOfLastDetectorCalibration"},"x0018700E":{"tag":"x0018700E","vr":"TM","vm":"1","name":"TimeOfLastDetectorCalibration"},"x00187010":{"tag":"x00187010","vr":"IS","vm":"1","name":"ExposuresOnDetectorSinceLastCalibration"},"x00187011":{"tag":"x00187011","vr":"IS","vm":"1","name":"ExposuresOnDetectorSinceManufactured"},"x00187012":{"tag":"x00187012","vr":"DS","vm":"1","name":"DetectorTimeSinceLastExposure"},"x00187014":{"tag":"x00187014","vr":"DS","vm":"1","name":"DetectorActiveTime"},"x00187016":{"tag":"x00187016","vr":"DS","vm":"1","name":"DetectorActivationOffsetFromExposure"},"x0018701A":{"tag":"x0018701A","vr":"DS","vm":"2","name":"DetectorBinning"},"x00187020":{"tag":"x00187020","vr":"DS","vm":"2","name":"DetectorElementPhysicalSize"},"x00187022":{"tag":"x00187022","vr":"DS","vm":"2","name":"DetectorElementSpacing"},"x00187024":{"tag":"x00187024","vr":"CS","vm":"1","name":"DetectorActiveShape"},"x00187026":{"tag":"x00187026","vr":"DS","vm":"1-2","name":"DetectorActiveDimensions"},"x00187028":{"tag":"x00187028","vr":"DS","vm":"2","name":"DetectorActiveOrigin"},"x0018702A":{"tag":"x0018702A","vr":"LO","vm":"1","name":"DetectorManufacturerName"},"x0018702B":{"tag":"x0018702B","vr":"LO","vm":"1","name":"DetectorManufacturerModelName"},"x00187030":{"tag":"x00187030","vr":"DS","vm":"2","name":"FieldOfViewOrigin"},"x00187032":{"tag":"x00187032","vr":"DS","vm":"1","name":"FieldOfViewRotation"},"x00187034":{"tag":"x00187034","vr":"CS","vm":"1","name":"FieldOfViewHorizontalFlip"},"x00187036":{"tag":"x00187036","vr":"FL","vm":"2","name":"PixelDataAreaOriginRelativeToFOV"},"x00187038":{"tag":"x00187038","vr":"FL","vm":"1","name":"PixelDataAreaRotationAngleRelativeToFOV"},"x00187040":{"tag":"x00187040","vr":"LT","vm":"1","name":"GridAbsorbingMaterial"},"x00187041":{"tag":"x00187041","vr":"LT","vm":"1","name":"GridSpacingMaterial"},"x00187042":{"tag":"x00187042","vr":"DS","vm":"1","name":"GridThickness"},"x00187044":{"tag":"x00187044","vr":"DS","vm":"1","name":"GridPitch"},"x00187046":{"tag":"x00187046","vr":"IS","vm":"2","name":"GridAspectRatio"},"x00187048":{"tag":"x00187048","vr":"DS","vm":"1","name":"GridPeriod"},"x0018704C":{"tag":"x0018704C","vr":"DS","vm":"1","name":"GridFocalDistance"},"x00187050":{"tag":"x00187050","vr":"CS","vm":"1-n","name":"FilterMaterial"},"x00187052":{"tag":"x00187052","vr":"DS","vm":"1-n","name":"FilterThicknessMinimum"},"x00187054":{"tag":"x00187054","vr":"DS","vm":"1-n","name":"FilterThicknessMaximum"},"x00187056":{"tag":"x00187056","vr":"FL","vm":"1-n","name":"FilterBeamPathLengthMinimum"},"x00187058":{"tag":"x00187058","vr":"FL","vm":"1-n","name":"FilterBeamPathLengthMaximum"},"x00187060":{"tag":"x00187060","vr":"CS","vm":"1","name":"ExposureControlMode"},"x00187062":{"tag":"x00187062","vr":"LT","vm":"1","name":"ExposureControlModeDescription"},"x00187064":{"tag":"x00187064","vr":"CS","vm":"1","name":"ExposureStatus"},"x00187065":{"tag":"x00187065","vr":"DS","vm":"1","name":"PhototimerSetting"},"x00188150":{"tag":"x00188150","vr":"DS","vm":"1","name":"ExposureTimeInuS"},"x00188151":{"tag":"x00188151","vr":"DS","vm":"1","name":"XRayTubeCurrentInuA"},"x00189004":{"tag":"x00189004","vr":"CS","vm":"1","name":"ContentQualification"},"x00189005":{"tag":"x00189005","vr":"SH","vm":"1","name":"PulseSequenceName"},"x00189006":{"tag":"x00189006","vr":"SQ","vm":"1","name":"MRImagingModifierSequence"},"x00189008":{"tag":"x00189008","vr":"CS","vm":"1","name":"EchoPulseSequence"},"x00189009":{"tag":"x00189009","vr":"CS","vm":"1","name":"InversionRecovery"},"x00189010":{"tag":"x00189010","vr":"CS","vm":"1","name":"FlowCompensation"},"x00189011":{"tag":"x00189011","vr":"CS","vm":"1","name":"MultipleSpinEcho"},"x00189012":{"tag":"x00189012","vr":"CS","vm":"1","name":"MultiPlanarExcitation"},"x00189014":{"tag":"x00189014","vr":"CS","vm":"1","name":"PhaseContrast"},"x00189015":{"tag":"x00189015","vr":"CS","vm":"1","name":"TimeOfFlightContrast"},"x00189016":{"tag":"x00189016","vr":"CS","vm":"1","name":"Spoiling"},"x00189017":{"tag":"x00189017","vr":"CS","vm":"1","name":"SteadyStatePulseSequence"},"x00189018":{"tag":"x00189018","vr":"CS","vm":"1","name":"EchoPlanarPulseSequence"},"x00189019":{"tag":"x00189019","vr":"FD","vm":"1","name":"TagAngleFirstAxis"},"x00189020":{"tag":"x00189020","vr":"CS","vm":"1","name":"MagnetizationTransfer"},"x00189021":{"tag":"x00189021","vr":"CS","vm":"1","name":"T2Preparation"},"x00189022":{"tag":"x00189022","vr":"CS","vm":"1","name":"BloodSignalNulling"},"x00189024":{"tag":"x00189024","vr":"CS","vm":"1","name":"SaturationRecovery"},"x00189025":{"tag":"x00189025","vr":"CS","vm":"1","name":"SpectrallySelectedSuppression"},"x00189026":{"tag":"x00189026","vr":"CS","vm":"1","name":"SpectrallySelectedExcitation"},"x00189027":{"tag":"x00189027","vr":"CS","vm":"1","name":"SpatialPresaturation"},"x00189028":{"tag":"x00189028","vr":"CS","vm":"1","name":"Tagging"},"x00189029":{"tag":"x00189029","vr":"CS","vm":"1","name":"OversamplingPhase"},"x00189030":{"tag":"x00189030","vr":"FD","vm":"1","name":"TagSpacingFirstDimension"},"x00189032":{"tag":"x00189032","vr":"CS","vm":"1","name":"GeometryOfKSpaceTraversal"},"x00189033":{"tag":"x00189033","vr":"CS","vm":"1","name":"SegmentedKSpaceTraversal"},"x00189034":{"tag":"x00189034","vr":"CS","vm":"1","name":"RectilinearPhaseEncodeReordering"},"x00189035":{"tag":"x00189035","vr":"FD","vm":"1","name":"TagThickness"},"x00189036":{"tag":"x00189036","vr":"CS","vm":"1","name":"PartialFourierDirection"},"x00189037":{"tag":"x00189037","vr":"CS","vm":"1","name":"CardiacSynchronizationTechnique"},"x00189041":{"tag":"x00189041","vr":"LO","vm":"1","name":"ReceiveCoilManufacturerName"},"x00189042":{"tag":"x00189042","vr":"SQ","vm":"1","name":"MRReceiveCoilSequence"},"x00189043":{"tag":"x00189043","vr":"CS","vm":"1","name":"ReceiveCoilType"},"x00189044":{"tag":"x00189044","vr":"CS","vm":"1","name":"QuadratureReceiveCoil"},"x00189045":{"tag":"x00189045","vr":"SQ","vm":"1","name":"MultiCoilDefinitionSequence"},"x00189046":{"tag":"x00189046","vr":"LO","vm":"1","name":"MultiCoilConfiguration"},"x00189047":{"tag":"x00189047","vr":"SH","vm":"1","name":"MultiCoilElementName"},"x00189048":{"tag":"x00189048","vr":"CS","vm":"1","name":"MultiCoilElementUsed"},"x00189049":{"tag":"x00189049","vr":"SQ","vm":"1","name":"MRTransmitCoilSequence"},"x00189050":{"tag":"x00189050","vr":"LO","vm":"1","name":"TransmitCoilManufacturerName"},"x00189051":{"tag":"x00189051","vr":"CS","vm":"1","name":"TransmitCoilType"},"x00189052":{"tag":"x00189052","vr":"FD","vm":"1-2","name":"SpectralWidth"},"x00189053":{"tag":"x00189053","vr":"FD","vm":"1-2","name":"ChemicalShiftReference"},"x00189054":{"tag":"x00189054","vr":"CS","vm":"1","name":"VolumeLocalizationTechnique"},"x00189058":{"tag":"x00189058","vr":"US","vm":"1","name":"MRAcquisitionFrequencyEncodingSteps"},"x00189059":{"tag":"x00189059","vr":"CS","vm":"1","name":"Decoupling"},"x00189060":{"tag":"x00189060","vr":"CS","vm":"1-2","name":"DecoupledNucleus"},"x00189061":{"tag":"x00189061","vr":"FD","vm":"1-2","name":"DecouplingFrequency"},"x00189062":{"tag":"x00189062","vr":"CS","vm":"1","name":"DecouplingMethod"},"x00189063":{"tag":"x00189063","vr":"FD","vm":"1-2","name":"DecouplingChemicalShiftReference"},"x00189064":{"tag":"x00189064","vr":"CS","vm":"1","name":"KSpaceFiltering"},"x00189065":{"tag":"x00189065","vr":"CS","vm":"1-2","name":"TimeDomainFiltering"},"x00189066":{"tag":"x00189066","vr":"US","vm":"1-2","name":"NumberOfZeroFills"},"x00189067":{"tag":"x00189067","vr":"CS","vm":"1","name":"BaselineCorrection"},"x00189069":{"tag":"x00189069","vr":"FD","vm":"1","name":"ParallelReductionFactorInPlane"},"x00189070":{"tag":"x00189070","vr":"FD","vm":"1","name":"CardiacRRIntervalSpecified"},"x00189073":{"tag":"x00189073","vr":"FD","vm":"1","name":"AcquisitionDuration"},"x00189074":{"tag":"x00189074","vr":"DT","vm":"1","name":"FrameAcquisitionDateTime"},"x00189075":{"tag":"x00189075","vr":"CS","vm":"1","name":"DiffusionDirectionality"},"x00189076":{"tag":"x00189076","vr":"SQ","vm":"1","name":"DiffusionGradientDirectionSequence"},"x00189077":{"tag":"x00189077","vr":"CS","vm":"1","name":"ParallelAcquisition"},"x00189078":{"tag":"x00189078","vr":"CS","vm":"1","name":"ParallelAcquisitionTechnique"},"x00189079":{"tag":"x00189079","vr":"FD","vm":"1-n","name":"InversionTimes"},"x00189080":{"tag":"x00189080","vr":"ST","vm":"1","name":"MetaboliteMapDescription"},"x00189081":{"tag":"x00189081","vr":"CS","vm":"1","name":"PartialFourier"},"x00189082":{"tag":"x00189082","vr":"FD","vm":"1","name":"EffectiveEchoTime"},"x00189083":{"tag":"x00189083","vr":"SQ","vm":"1","name":"MetaboliteMapCodeSequence"},"x00189084":{"tag":"x00189084","vr":"SQ","vm":"1","name":"ChemicalShiftSequence"},"x00189085":{"tag":"x00189085","vr":"CS","vm":"1","name":"CardiacSignalSource"},"x00189087":{"tag":"x00189087","vr":"FD","vm":"1","name":"DiffusionBValue"},"x00189089":{"tag":"x00189089","vr":"FD","vm":"3","name":"DiffusionGradientOrientation"},"x00189090":{"tag":"x00189090","vr":"FD","vm":"3","name":"VelocityEncodingDirection"},"x00189091":{"tag":"x00189091","vr":"FD","vm":"1","name":"VelocityEncodingMinimumValue"},"x00189092":{"tag":"x00189092","vr":"SQ","vm":"1","name":"VelocityEncodingAcquisitionSequence"},"x00189093":{"tag":"x00189093","vr":"US","vm":"1","name":"NumberOfKSpaceTrajectories"},"x00189094":{"tag":"x00189094","vr":"CS","vm":"1","name":"CoverageOfKSpace"},"x00189095":{"tag":"x00189095","vr":"UL","vm":"1","name":"SpectroscopyAcquisitionPhaseRows"},"x00189096":{"tag":"x00189096","vr":"FD","vm":"1","name":"ParallelReductionFactorInPlaneRetired"},"x00189098":{"tag":"x00189098","vr":"FD","vm":"1-2","name":"TransmitterFrequency"},"x00189100":{"tag":"x00189100","vr":"CS","vm":"1-2","name":"ResonantNucleus"},"x00189101":{"tag":"x00189101","vr":"CS","vm":"1","name":"FrequencyCorrection"},"x00189103":{"tag":"x00189103","vr":"SQ","vm":"1","name":"MRSpectroscopyFOVGeometrySequence"},"x00189104":{"tag":"x00189104","vr":"FD","vm":"1","name":"SlabThickness"},"x00189105":{"tag":"x00189105","vr":"FD","vm":"3","name":"SlabOrientation"},"x00189106":{"tag":"x00189106","vr":"FD","vm":"3","name":"MidSlabPosition"},"x00189107":{"tag":"x00189107","vr":"SQ","vm":"1","name":"MRSpatialSaturationSequence"},"x00189112":{"tag":"x00189112","vr":"SQ","vm":"1","name":"MRTimingAndRelatedParametersSequence"},"x00189114":{"tag":"x00189114","vr":"SQ","vm":"1","name":"MREchoSequence"},"x00189115":{"tag":"x00189115","vr":"SQ","vm":"1","name":"MRModifierSequence"},"x00189117":{"tag":"x00189117","vr":"SQ","vm":"1","name":"MRDiffusionSequence"},"x00189118":{"tag":"x00189118","vr":"SQ","vm":"1","name":"CardiacSynchronizationSequence"},"x00189119":{"tag":"x00189119","vr":"SQ","vm":"1","name":"MRAveragesSequence"},"x00189125":{"tag":"x00189125","vr":"SQ","vm":"1","name":"MRFOVGeometrySequence"},"x00189126":{"tag":"x00189126","vr":"SQ","vm":"1","name":"VolumeLocalizationSequence"},"x00189127":{"tag":"x00189127","vr":"UL","vm":"1","name":"SpectroscopyAcquisitionDataColumns"},"x00189147":{"tag":"x00189147","vr":"CS","vm":"1","name":"DiffusionAnisotropyType"},"x00189151":{"tag":"x00189151","vr":"DT","vm":"1","name":"FrameReferenceDateTime"},"x00189152":{"tag":"x00189152","vr":"SQ","vm":"1","name":"MRMetaboliteMapSequence"},"x00189155":{"tag":"x00189155","vr":"FD","vm":"1","name":"ParallelReductionFactorOutOfPlane"},"x00189159":{"tag":"x00189159","vr":"UL","vm":"1","name":"SpectroscopyAcquisitionOutOfPlanePhaseSteps"},"x00189166":{"tag":"x00189166","vr":"CS","vm":"1","name":"BulkMotionStatus"},"x00189168":{"tag":"x00189168","vr":"FD","vm":"1","name":"ParallelReductionFactorSecondInPlane"},"x00189169":{"tag":"x00189169","vr":"CS","vm":"1","name":"CardiacBeatRejectionTechnique"},"x00189170":{"tag":"x00189170","vr":"CS","vm":"1","name":"RespiratoryMotionCompensationTechnique"},"x00189171":{"tag":"x00189171","vr":"CS","vm":"1","name":"RespiratorySignalSource"},"x00189172":{"tag":"x00189172","vr":"CS","vm":"1","name":"BulkMotionCompensationTechnique"},"x00189173":{"tag":"x00189173","vr":"CS","vm":"1","name":"BulkMotionSignalSource"},"x00189174":{"tag":"x00189174","vr":"CS","vm":"1","name":"ApplicableSafetyStandardAgency"},"x00189175":{"tag":"x00189175","vr":"LO","vm":"1","name":"ApplicableSafetyStandardDescription"},"x00189176":{"tag":"x00189176","vr":"SQ","vm":"1","name":"OperatingModeSequence"},"x00189177":{"tag":"x00189177","vr":"CS","vm":"1","name":"OperatingModeType"},"x00189178":{"tag":"x00189178","vr":"CS","vm":"1","name":"OperatingMode"},"x00189179":{"tag":"x00189179","vr":"CS","vm":"1","name":"SpecificAbsorptionRateDefinition"},"x00189180":{"tag":"x00189180","vr":"CS","vm":"1","name":"GradientOutputType"},"x00189181":{"tag":"x00189181","vr":"FD","vm":"1","name":"SpecificAbsorptionRateValue"},"x00189182":{"tag":"x00189182","vr":"FD","vm":"1","name":"GradientOutput"},"x00189183":{"tag":"x00189183","vr":"CS","vm":"1","name":"FlowCompensationDirection"},"x00189184":{"tag":"x00189184","vr":"FD","vm":"1","name":"TaggingDelay"},"x00189185":{"tag":"x00189185","vr":"ST","vm":"1","name":"RespiratoryMotionCompensationTechniqueDescription"},"x00189186":{"tag":"x00189186","vr":"SH","vm":"1","name":"RespiratorySignalSourceID"},"x00189195":{"tag":"x00189195","vr":"FD","vm":"1","name":"ChemicalShiftMinimumIntegrationLimitInHz"},"x00189196":{"tag":"x00189196","vr":"FD","vm":"1","name":"ChemicalShiftMaximumIntegrationLimitInHz"},"x00189197":{"tag":"x00189197","vr":"SQ","vm":"1","name":"MRVelocityEncodingSequence"},"x00189198":{"tag":"x00189198","vr":"CS","vm":"1","name":"FirstOrderPhaseCorrection"},"x00189199":{"tag":"x00189199","vr":"CS","vm":"1","name":"WaterReferencedPhaseCorrection"},"x00189200":{"tag":"x00189200","vr":"CS","vm":"1","name":"MRSpectroscopyAcquisitionType"},"x00189214":{"tag":"x00189214","vr":"CS","vm":"1","name":"RespiratoryCyclePosition"},"x00189217":{"tag":"x00189217","vr":"FD","vm":"1","name":"VelocityEncodingMaximumValue"},"x00189218":{"tag":"x00189218","vr":"FD","vm":"1","name":"TagSpacingSecondDimension"},"x00189219":{"tag":"x00189219","vr":"SS","vm":"1","name":"TagAngleSecondAxis"},"x00189220":{"tag":"x00189220","vr":"FD","vm":"1","name":"FrameAcquisitionDuration"},"x00189226":{"tag":"x00189226","vr":"SQ","vm":"1","name":"MRImageFrameTypeSequence"},"x00189227":{"tag":"x00189227","vr":"SQ","vm":"1","name":"MRSpectroscopyFrameTypeSequence"},"x00189231":{"tag":"x00189231","vr":"US","vm":"1","name":"MRAcquisitionPhaseEncodingStepsInPlane"},"x00189232":{"tag":"x00189232","vr":"US","vm":"1","name":"MRAcquisitionPhaseEncodingStepsOutOfPlane"},"x00189234":{"tag":"x00189234","vr":"UL","vm":"1","name":"SpectroscopyAcquisitionPhaseColumns"},"x00189236":{"tag":"x00189236","vr":"CS","vm":"1","name":"CardiacCyclePosition"},"x00189239":{"tag":"x00189239","vr":"SQ","vm":"1","name":"SpecificAbsorptionRateSequence"},"x00189240":{"tag":"x00189240","vr":"US","vm":"1","name":"RFEchoTrainLength"},"x00189241":{"tag":"x00189241","vr":"US","vm":"1","name":"GradientEchoTrainLength"},"x00189250":{"tag":"x00189250","vr":"CS","vm":"1","name":"ArterialSpinLabelingContrast"},"x00189251":{"tag":"x00189251","vr":"SQ","vm":"1","name":"MRArterialSpinLabelingSequence"},"x00189252":{"tag":"x00189252","vr":"LO","vm":"1","name":"ASLTechniqueDescription"},"x00189253":{"tag":"x00189253","vr":"US","vm":"1","name":"ASLSlabNumber"},"x00189254":{"tag":"x00189254","vr":"FD","vm":"1 ","name":"ASLSlabThickness"},"x00189255":{"tag":"x00189255","vr":"FD","vm":"3 ","name":"ASLSlabOrientation"},"x00189256":{"tag":"x00189256","vr":"FD","vm":"3","name":"ASLMidSlabPosition"},"x00189257":{"tag":"x00189257","vr":"CS","vm":"1 ","name":"ASLContext"},"x00189258":{"tag":"x00189258","vr":"UL","vm":"1","name":"ASLPulseTrainDuration"},"x00189259":{"tag":"x00189259","vr":"CS","vm":"1 ","name":"ASLCrusherFlag"},"x0018925A":{"tag":"x0018925A","vr":"FD","vm":"1","name":"ASLCrusherFlow"},"x0018925B":{"tag":"x0018925B","vr":"LO","vm":"1","name":"ASLCrusherDescription"},"x0018925C":{"tag":"x0018925C","vr":"CS","vm":"1 ","name":"ASLBolusCutoffFlag"},"x0018925D":{"tag":"x0018925D","vr":"SQ","vm":"1","name":"ASLBolusCutoffTimingSequence"},"x0018925E":{"tag":"x0018925E","vr":"LO","vm":"1","name":"ASLBolusCutoffTechnique"},"x0018925F":{"tag":"x0018925F","vr":"UL","vm":"1","name":"ASLBolusCutoffDelayTime"},"x00189260":{"tag":"x00189260","vr":"SQ","vm":"1","name":"ASLSlabSequence"},"x00189295":{"tag":"x00189295","vr":"FD","vm":"1","name":"ChemicalShiftMinimumIntegrationLimitInppm"},"x00189296":{"tag":"x00189296","vr":"FD","vm":"1","name":"ChemicalShiftMaximumIntegrationLimitInppm"},"x00189301":{"tag":"x00189301","vr":"SQ","vm":"1","name":"CTAcquisitionTypeSequence"},"x00189302":{"tag":"x00189302","vr":"CS","vm":"1","name":"AcquisitionType"},"x00189303":{"tag":"x00189303","vr":"FD","vm":"1","name":"TubeAngle"},"x00189304":{"tag":"x00189304","vr":"SQ","vm":"1","name":"CTAcquisitionDetailsSequence"},"x00189305":{"tag":"x00189305","vr":"FD","vm":"1","name":"RevolutionTime"},"x00189306":{"tag":"x00189306","vr":"FD","vm":"1","name":"SingleCollimationWidth"},"x00189307":{"tag":"x00189307","vr":"FD","vm":"1","name":"TotalCollimationWidth"},"x00189308":{"tag":"x00189308","vr":"SQ","vm":"1","name":"CTTableDynamicsSequence"},"x00189309":{"tag":"x00189309","vr":"FD","vm":"1","name":"TableSpeed"},"x00189310":{"tag":"x00189310","vr":"FD","vm":"1","name":"TableFeedPerRotation"},"x00189311":{"tag":"x00189311","vr":"FD","vm":"1","name":"SpiralPitchFactor"},"x00189312":{"tag":"x00189312","vr":"SQ","vm":"1","name":"CTGeometrySequence"},"x00189313":{"tag":"x00189313","vr":"FD","vm":"3","name":"DataCollectionCenterPatient"},"x00189314":{"tag":"x00189314","vr":"SQ","vm":"1","name":"CTReconstructionSequence"},"x00189315":{"tag":"x00189315","vr":"CS","vm":"1","name":"ReconstructionAlgorithm"},"x00189316":{"tag":"x00189316","vr":"CS","vm":"1","name":"ConvolutionKernelGroup"},"x00189317":{"tag":"x00189317","vr":"FD","vm":"2","name":"ReconstructionFieldOfView"},"x00189318":{"tag":"x00189318","vr":"FD","vm":"3","name":"ReconstructionTargetCenterPatient"},"x00189319":{"tag":"x00189319","vr":"FD","vm":"1","name":"ReconstructionAngle"},"x00189320":{"tag":"x00189320","vr":"SH","vm":"1","name":"ImageFilter"},"x00189321":{"tag":"x00189321","vr":"SQ","vm":"1","name":"CTExposureSequence"},"x00189322":{"tag":"x00189322","vr":"FD","vm":"2","name":"ReconstructionPixelSpacing"},"x00189323":{"tag":"x00189323","vr":"CS","vm":"1","name":"ExposureModulationType"},"x00189324":{"tag":"x00189324","vr":"FD","vm":"1","name":"EstimatedDoseSaving"},"x00189325":{"tag":"x00189325","vr":"SQ","vm":"1","name":"CTXRayDetailsSequence"},"x00189326":{"tag":"x00189326","vr":"SQ","vm":"1","name":"CTPositionSequence"},"x00189327":{"tag":"x00189327","vr":"FD","vm":"1","name":"TablePosition"},"x00189328":{"tag":"x00189328","vr":"FD","vm":"1","name":"ExposureTimeInms"},"x00189329":{"tag":"x00189329","vr":"SQ","vm":"1","name":"CTImageFrameTypeSequence"},"x00189330":{"tag":"x00189330","vr":"FD","vm":"1","name":"XRayTubeCurrentInmA"},"x00189332":{"tag":"x00189332","vr":"FD","vm":"1","name":"ExposureInmAs"},"x00189333":{"tag":"x00189333","vr":"CS","vm":"1","name":"ConstantVolumeFlag"},"x00189334":{"tag":"x00189334","vr":"CS","vm":"1","name":"FluoroscopyFlag"},"x00189335":{"tag":"x00189335","vr":"FD","vm":"1","name":"DistanceSourceToDataCollectionCenter"},"x00189337":{"tag":"x00189337","vr":"US","vm":"1","name":"ContrastBolusAgentNumber"},"x00189338":{"tag":"x00189338","vr":"SQ","vm":"1","name":"ContrastBolusIngredientCodeSequence"},"x00189340":{"tag":"x00189340","vr":"SQ","vm":"1","name":"ContrastAdministrationProfileSequence"},"x00189341":{"tag":"x00189341","vr":"SQ","vm":"1","name":"ContrastBolusUsageSequence"},"x00189342":{"tag":"x00189342","vr":"CS","vm":"1","name":"ContrastBolusAgentAdministered"},"x00189343":{"tag":"x00189343","vr":"CS","vm":"1","name":"ContrastBolusAgentDetected"},"x00189344":{"tag":"x00189344","vr":"CS","vm":"1","name":"ContrastBolusAgentPhase"},"x00189345":{"tag":"x00189345","vr":"FD","vm":"1","name":"CTDIvol"},"x00189346":{"tag":"x00189346","vr":"SQ","vm":"1","name":"CTDIPhantomTypeCodeSequence"},"x00189351":{"tag":"x00189351","vr":"FL","vm":"1","name":"CalciumScoringMassFactorPatient"},"x00189352":{"tag":"x00189352","vr":"FL","vm":"3","name":"CalciumScoringMassFactorDevice"},"x00189353":{"tag":"x00189353","vr":"FL","vm":"1","name":"EnergyWeightingFactor"},"x00189360":{"tag":"x00189360","vr":"SQ","vm":"1","name":"CTAdditionalXRaySourceSequence"},"x00189401":{"tag":"x00189401","vr":"SQ","vm":"1","name":"ProjectionPixelCalibrationSequence"},"x00189402":{"tag":"x00189402","vr":"FL","vm":"1","name":"DistanceSourceToIsocenter"},"x00189403":{"tag":"x00189403","vr":"FL","vm":"1","name":"DistanceObjectToTableTop"},"x00189404":{"tag":"x00189404","vr":"FL","vm":"2","name":"ObjectPixelSpacingInCenterOfBeam"},"x00189405":{"tag":"x00189405","vr":"SQ","vm":"1","name":"PositionerPositionSequence"},"x00189406":{"tag":"x00189406","vr":"SQ","vm":"1","name":"TablePositionSequence"},"x00189407":{"tag":"x00189407","vr":"SQ","vm":"1","name":"CollimatorShapeSequence"},"x00189410":{"tag":"x00189410","vr":"CS","vm":"1","name":"PlanesInAcquisition"},"x00189412":{"tag":"x00189412","vr":"SQ","vm":"1","name":"XAXRFFrameCharacteristicsSequence"},"x00189417":{"tag":"x00189417","vr":"SQ","vm":"1","name":"FrameAcquisitionSequence"},"x00189420":{"tag":"x00189420","vr":"CS","vm":"1","name":"XRayReceptorType"},"x00189423":{"tag":"x00189423","vr":"LO","vm":"1","name":"AcquisitionProtocolName"},"x00189424":{"tag":"x00189424","vr":"LT","vm":"1","name":"AcquisitionProtocolDescription"},"x00189425":{"tag":"x00189425","vr":"CS","vm":"1","name":"ContrastBolusIngredientOpaque"},"x00189426":{"tag":"x00189426","vr":"FL","vm":"1","name":"DistanceReceptorPlaneToDetectorHousing"},"x00189427":{"tag":"x00189427","vr":"CS","vm":"1","name":"IntensifierActiveShape"},"x00189428":{"tag":"x00189428","vr":"FL","vm":"1-2","name":"IntensifierActiveDimensions"},"x00189429":{"tag":"x00189429","vr":"FL","vm":"2","name":"PhysicalDetectorSize"},"x00189430":{"tag":"x00189430","vr":"FL","vm":"2","name":"PositionOfIsocenterProjection"},"x00189432":{"tag":"x00189432","vr":"SQ","vm":"1","name":"FieldOfViewSequence"},"x00189433":{"tag":"x00189433","vr":"LO","vm":"1","name":"FieldOfViewDescription"},"x00189434":{"tag":"x00189434","vr":"SQ","vm":"1","name":"ExposureControlSensingRegionsSequence"},"x00189435":{"tag":"x00189435","vr":"CS","vm":"1","name":"ExposureControlSensingRegionShape"},"x00189436":{"tag":"x00189436","vr":"SS","vm":"1","name":"ExposureControlSensingRegionLeftVerticalEdge"},"x00189437":{"tag":"x00189437","vr":"SS","vm":"1","name":"ExposureControlSensingRegionRightVerticalEdge"},"x00189438":{"tag":"x00189438","vr":"SS","vm":"1","name":"ExposureControlSensingRegionUpperHorizontalEdge"},"x00189439":{"tag":"x00189439","vr":"SS","vm":"1","name":"ExposureControlSensingRegionLowerHorizontalEdge"},"x00189440":{"tag":"x00189440","vr":"SS","vm":"2","name":"CenterOfCircularExposureControlSensingRegion"},"x00189441":{"tag":"x00189441","vr":"US","vm":"1","name":"RadiusOfCircularExposureControlSensingRegion"},"x00189442":{"tag":"x00189442","vr":"SS","vm":"2-n","name":"VerticesOfThePolygonalExposureControlSensingRegion"},"x00189447":{"tag":"x00189447","vr":"FL","vm":"1","name":"ColumnAngulationPatient"},"x00189449":{"tag":"x00189449","vr":"FL","vm":"1","name":"BeamAngle"},"x00189451":{"tag":"x00189451","vr":"SQ","vm":"1","name":"FrameDetectorParametersSequence"},"x00189452":{"tag":"x00189452","vr":"FL","vm":"1","name":"CalculatedAnatomyThickness"},"x00189455":{"tag":"x00189455","vr":"SQ","vm":"1","name":"CalibrationSequence"},"x00189456":{"tag":"x00189456","vr":"SQ","vm":"1","name":"ObjectThicknessSequence"},"x00189457":{"tag":"x00189457","vr":"CS","vm":"1","name":"PlaneIdentification"},"x00189461":{"tag":"x00189461","vr":"FL","vm":"1-2","name":"FieldOfViewDimensionsInFloat"},"x00189462":{"tag":"x00189462","vr":"SQ","vm":"1","name":"IsocenterReferenceSystemSequence"},"x00189463":{"tag":"x00189463","vr":"FL","vm":"1","name":"PositionerIsocenterPrimaryAngle"},"x00189464":{"tag":"x00189464","vr":"FL","vm":"1","name":"PositionerIsocenterSecondaryAngle"},"x00189465":{"tag":"x00189465","vr":"FL","vm":"1","name":"PositionerIsocenterDetectorRotationAngle"},"x00189466":{"tag":"x00189466","vr":"FL","vm":"1","name":"TableXPositionToIsocenter"},"x00189467":{"tag":"x00189467","vr":"FL","vm":"1","name":"TableYPositionToIsocenter"},"x00189468":{"tag":"x00189468","vr":"FL","vm":"1","name":"TableZPositionToIsocenter"},"x00189469":{"tag":"x00189469","vr":"FL","vm":"1","name":"TableHorizontalRotationAngle"},"x00189470":{"tag":"x00189470","vr":"FL","vm":"1","name":"TableHeadTiltAngle"},"x00189471":{"tag":"x00189471","vr":"FL","vm":"1","name":"TableCradleTiltAngle"},"x00189472":{"tag":"x00189472","vr":"SQ","vm":"1","name":"FrameDisplayShutterSequence"},"x00189473":{"tag":"x00189473","vr":"FL","vm":"1","name":"AcquiredImageAreaDoseProduct"},"x00189474":{"tag":"x00189474","vr":"CS","vm":"1","name":"CArmPositionerTabletopRelationship"},"x00189476":{"tag":"x00189476","vr":"SQ","vm":"1","name":"XRayGeometrySequence"},"x00189477":{"tag":"x00189477","vr":"SQ","vm":"1","name":"IrradiationEventIdentificationSequence"},"x00189504":{"tag":"x00189504","vr":"SQ","vm":"1","name":"XRay3DFrameTypeSequence"},"x00189506":{"tag":"x00189506","vr":"SQ","vm":"1","name":"ContributingSourcesSequence"},"x00189507":{"tag":"x00189507","vr":"SQ","vm":"1","name":"XRay3DAcquisitionSequence"},"x00189508":{"tag":"x00189508","vr":"FL","vm":"1","name":"PrimaryPositionerScanArc"},"x00189509":{"tag":"x00189509","vr":"FL","vm":"1","name":"SecondaryPositionerScanArc"},"x00189510":{"tag":"x00189510","vr":"FL","vm":"1","name":"PrimaryPositionerScanStartAngle"},"x00189511":{"tag":"x00189511","vr":"FL","vm":"1","name":"SecondaryPositionerScanStartAngle"},"x00189514":{"tag":"x00189514","vr":"FL","vm":"1","name":"PrimaryPositionerIncrement"},"x00189515":{"tag":"x00189515","vr":"FL","vm":"1","name":"SecondaryPositionerIncrement"},"x00189516":{"tag":"x00189516","vr":"DT","vm":"1","name":"StartAcquisitionDateTime"},"x00189517":{"tag":"x00189517","vr":"DT","vm":"1","name":"EndAcquisitionDateTime"},"x00189524":{"tag":"x00189524","vr":"LO","vm":"1","name":"ApplicationName"},"x00189525":{"tag":"x00189525","vr":"LO","vm":"1","name":"ApplicationVersion"},"x00189526":{"tag":"x00189526","vr":"LO","vm":"1","name":"ApplicationManufacturer"},"x00189527":{"tag":"x00189527","vr":"CS","vm":"1","name":"AlgorithmType"},"x00189528":{"tag":"x00189528","vr":"LO","vm":"1","name":"AlgorithmDescription"},"x00189530":{"tag":"x00189530","vr":"SQ","vm":"1","name":"XRay3DReconstructionSequence"},"x00189531":{"tag":"x00189531","vr":"LO","vm":"1","name":"ReconstructionDescription"},"x00189538":{"tag":"x00189538","vr":"SQ","vm":"1","name":"PerProjectionAcquisitionSequence"},"x00189601":{"tag":"x00189601","vr":"SQ","vm":"1","name":"DiffusionBMatrixSequence"},"x00189602":{"tag":"x00189602","vr":"FD","vm":"1","name":"DiffusionBValueXX"},"x00189603":{"tag":"x00189603","vr":"FD","vm":"1","name":"DiffusionBValueXY"},"x00189604":{"tag":"x00189604","vr":"FD","vm":"1","name":"DiffusionBValueXZ"},"x00189605":{"tag":"x00189605","vr":"FD","vm":"1","name":"DiffusionBValueYY"},"x00189606":{"tag":"x00189606","vr":"FD","vm":"1","name":"DiffusionBValueYZ"},"x00189607":{"tag":"x00189607","vr":"FD","vm":"1","name":"DiffusionBValueZZ"},"x00189701":{"tag":"x00189701","vr":"DT","vm":"1","name":"DecayCorrectionDateTime"},"x00189715":{"tag":"x00189715","vr":"FD","vm":"1","name":"StartDensityThreshold"},"x00189716":{"tag":"x00189716","vr":"FD","vm":"1","name":"StartRelativeDensityDifferenceThreshold"},"x00189717":{"tag":"x00189717","vr":"FD","vm":"1","name":"StartCardiacTriggerCountThreshold"},"x00189718":{"tag":"x00189718","vr":"FD","vm":"1","name":"StartRespiratoryTriggerCountThreshold"},"x00189719":{"tag":"x00189719","vr":"FD","vm":"1","name":"TerminationCountsThreshold"},"x00189720":{"tag":"x00189720","vr":"FD","vm":"1","name":"TerminationDensityThreshold"},"x00189721":{"tag":"x00189721","vr":"FD","vm":"1","name":"TerminationRelativeDensityThreshold"},"x00189722":{"tag":"x00189722","vr":"FD","vm":"1","name":"TerminationTimeThreshold"},"x00189723":{"tag":"x00189723","vr":"FD","vm":"1","name":"TerminationCardiacTriggerCountThreshold"},"x00189724":{"tag":"x00189724","vr":"FD","vm":"1","name":"TerminationRespiratoryTriggerCountThreshold"},"x00189725":{"tag":"x00189725","vr":"CS","vm":"1","name":"DetectorGeometry"},"x00189726":{"tag":"x00189726","vr":"FD","vm":"1","name":"TransverseDetectorSeparation"},"x00189727":{"tag":"x00189727","vr":"FD","vm":"1","name":"AxialDetectorDimension"},"x00189729":{"tag":"x00189729","vr":"US","vm":"1","name":"RadiopharmaceuticalAgentNumber"},"x00189732":{"tag":"x00189732","vr":"SQ","vm":"1","name":"PETFrameAcquisitionSequence"},"x00189733":{"tag":"x00189733","vr":"SQ","vm":"1","name":"PETDetectorMotionDetailsSequence"},"x00189734":{"tag":"x00189734","vr":"SQ","vm":"1","name":"PETTableDynamicsSequence"},"x00189735":{"tag":"x00189735","vr":"SQ","vm":"1","name":"PETPositionSequence"},"x00189736":{"tag":"x00189736","vr":"SQ","vm":"1","name":"PETFrameCorrectionFactorsSequence"},"x00189737":{"tag":"x00189737","vr":"SQ","vm":"1","name":"RadiopharmaceuticalUsageSequence"},"x00189738":{"tag":"x00189738","vr":"CS","vm":"1","name":"AttenuationCorrectionSource"},"x00189739":{"tag":"x00189739","vr":"US","vm":"1","name":"NumberOfIterations"},"x00189740":{"tag":"x00189740","vr":"US","vm":"1","name":"NumberOfSubsets"},"x00189749":{"tag":"x00189749","vr":"SQ","vm":"1","name":"PETReconstructionSequence"},"x00189751":{"tag":"x00189751","vr":"SQ","vm":"1","name":"PETFrameTypeSequence"},"x00189755":{"tag":"x00189755","vr":"CS","vm":"1","name":"TimeOfFlightInformationUsed"},"x00189756":{"tag":"x00189756","vr":"CS","vm":"1","name":"ReconstructionType"},"x00189758":{"tag":"x00189758","vr":"CS","vm":"1","name":"DecayCorrected"},"x00189759":{"tag":"x00189759","vr":"CS","vm":"1","name":"AttenuationCorrected"},"x00189760":{"tag":"x00189760","vr":"CS","vm":"1","name":"ScatterCorrected"},"x00189761":{"tag":"x00189761","vr":"CS","vm":"1","name":"DeadTimeCorrected"},"x00189762":{"tag":"x00189762","vr":"CS","vm":"1","name":"GantryMotionCorrected"},"x00189763":{"tag":"x00189763","vr":"CS","vm":"1","name":"PatientMotionCorrected"},"x00189764":{"tag":"x00189764","vr":"CS","vm":"1","name":"CountLossNormalizationCorrected"},"x00189765":{"tag":"x00189765","vr":"CS","vm":"1","name":"RandomsCorrected"},"x00189766":{"tag":"x00189766","vr":"CS","vm":"1","name":"NonUniformRadialSamplingCorrected"},"x00189767":{"tag":"x00189767","vr":"CS","vm":"1","name":"SensitivityCalibrated"},"x00189768":{"tag":"x00189768","vr":"CS","vm":"1","name":"DetectorNormalizationCorrection"},"x00189769":{"tag":"x00189769","vr":"CS","vm":"1","name":"IterativeReconstructionMethod"},"x00189770":{"tag":"x00189770","vr":"CS","vm":"1","name":"AttenuationCorrectionTemporalRelationship"},"x00189771":{"tag":"x00189771","vr":"SQ","vm":"1","name":"PatientPhysiologicalStateSequence"},"x00189772":{"tag":"x00189772","vr":"SQ","vm":"1","name":"PatientPhysiologicalStateCodeSequence"},"x00189801":{"tag":"x00189801","vr":"FD","vm":"1-n","name":"DepthsOfFocus"},"x00189803":{"tag":"x00189803","vr":"SQ","vm":"1","name":"ExcludedIntervalsSequence"},"x00189804":{"tag":"x00189804","vr":"DT","vm":"1","name":"ExclusionStartDatetime"},"x00189805":{"tag":"x00189805","vr":"FD","vm":"1","name":"ExclusionDuration"},"x00189806":{"tag":"x00189806","vr":"SQ","vm":"1","name":"USImageDescriptionSequence"},"x00189807":{"tag":"x00189807","vr":"SQ","vm":"1","name":"ImageDataTypeSequence"},"x00189808":{"tag":"x00189808","vr":"CS","vm":"1","name":"DataType"},"x00189809":{"tag":"x00189809","vr":"SQ","vm":"1","name":"TransducerScanPatternCodeSequence"},"x0018980B":{"tag":"x0018980B","vr":"CS","vm":"1","name":"AliasedDataType"},"x0018980C":{"tag":"x0018980C","vr":"CS","vm":"1","name":"PositionMeasuringDeviceUsed"},"x0018980D":{"tag":"x0018980D","vr":"SQ","vm":"1","name":"TransducerGeometryCodeSequence"},"x0018980E":{"tag":"x0018980E","vr":"SQ","vm":"1","name":"TransducerBeamSteeringCodeSequence"},"x0018980F":{"tag":"x0018980F","vr":"SQ","vm":"1","name":"TransducerApplicationCodeSequence"},"x0018A001":{"tag":"x0018A001","vr":"SQ","vm":"1","name":"ContributingEquipmentSequence"},"x0018A002":{"tag":"x0018A002","vr":"DT","vm":"1","name":"ContributionDateTime"},"x0018A003":{"tag":"x0018A003","vr":"ST","vm":"1","name":"ContributionDescription"},"x0020000D":{"tag":"x0020000D","vr":"UI","vm":"1","name":"StudyInstanceUID"},"x0020000E":{"tag":"x0020000E","vr":"UI","vm":"1","name":"SeriesInstanceUID"},"x00200010":{"tag":"x00200010","vr":"SH","vm":"1","name":"StudyID"},"x00200011":{"tag":"x00200011","vr":"IS","vm":"1","name":"SeriesNumber"},"x00200012":{"tag":"x00200012","vr":"IS","vm":"1","name":"AcquisitionNumber"},"x00200013":{"tag":"x00200013","vr":"IS","vm":"1","name":"InstanceNumber"},"x00200014":{"tag":"x00200014","vr":"IS","vm":"1","name":"IsotopeNumber"},"x00200015":{"tag":"x00200015","vr":"IS","vm":"1","name":"PhaseNumber"},"x00200016":{"tag":"x00200016","vr":"IS","vm":"1","name":"IntervalNumber"},"x00200017":{"tag":"x00200017","vr":"IS","vm":"1","name":"TimeSlotNumber"},"x00200018":{"tag":"x00200018","vr":"IS","vm":"1","name":"AngleNumber"},"x00200019":{"tag":"x00200019","vr":"IS","vm":"1","name":"ItemNumber"},"x00200020":{"tag":"x00200020","vr":"CS","vm":"2","name":"PatientOrientation"},"x00200022":{"tag":"x00200022","vr":"IS","vm":"1","name":"OverlayNumber"},"x00200024":{"tag":"x00200024","vr":"IS","vm":"1","name":"CurveNumber"},"x00200026":{"tag":"x00200026","vr":"IS","vm":"1","name":"LUTNumber"},"x00200030":{"tag":"x00200030","vr":"DS","vm":"3","name":"ImagePosition"},"x00200032":{"tag":"x00200032","vr":"DS","vm":"3","name":"ImagePositionPatient"},"x00200035":{"tag":"x00200035","vr":"DS","vm":"6","name":"ImageOrientation"},"x00200037":{"tag":"x00200037","vr":"DS","vm":"6","name":"ImageOrientationPatient"},"x00200050":{"tag":"x00200050","vr":"DS","vm":"1","name":"Location"},"x00200052":{"tag":"x00200052","vr":"UI","vm":"1","name":"FrameOfReferenceUID"},"x00200060":{"tag":"x00200060","vr":"CS","vm":"1","name":"Laterality"},"x00200062":{"tag":"x00200062","vr":"CS","vm":"1","name":"ImageLaterality"},"x00200070":{"tag":"x00200070","vr":"LO","vm":"1","name":"ImageGeometryType"},"x00200080":{"tag":"x00200080","vr":"CS","vm":"1-n","name":"MaskingImage"},"x002000AA":{"tag":"x002000AA","vr":"IS","vm":"1","name":"ReportNumber"},"x00200100":{"tag":"x00200100","vr":"IS","vm":"1","name":"TemporalPositionIdentifier"},"x00200105":{"tag":"x00200105","vr":"IS","vm":"1","name":"NumberOfTemporalPositions"},"x00200110":{"tag":"x00200110","vr":"DS","vm":"1","name":"TemporalResolution"},"x00200200":{"tag":"x00200200","vr":"UI","vm":"1","name":"SynchronizationFrameOfReferenceUID"},"x00200242":{"tag":"x00200242","vr":"UI","vm":"1","name":"SOPInstanceUIDOfConcatenationSource"},"x00201000":{"tag":"x00201000","vr":"IS","vm":"1","name":"SeriesInStudy"},"x00201001":{"tag":"x00201001","vr":"IS","vm":"1","name":"AcquisitionsInSeries"},"x00201002":{"tag":"x00201002","vr":"IS","vm":"1","name":"ImagesInAcquisition"},"x00201003":{"tag":"x00201003","vr":"IS","vm":"1","name":"ImagesInSeries"},"x00201004":{"tag":"x00201004","vr":"IS","vm":"1","name":"AcquisitionsInStudy"},"x00201005":{"tag":"x00201005","vr":"IS","vm":"1","name":"ImagesInStudy"},"x00201020":{"tag":"x00201020","vr":"LO","vm":"1-n","name":"Reference"},"x00201040":{"tag":"x00201040","vr":"LO","vm":"1","name":"PositionReferenceIndicator"},"x00201041":{"tag":"x00201041","vr":"DS","vm":"1","name":"SliceLocation"},"x00201070":{"tag":"x00201070","vr":"IS","vm":"1-n","name":"OtherStudyNumbers"},"x00201200":{"tag":"x00201200","vr":"IS","vm":"1","name":"NumberOfPatientRelatedStudies"},"x00201202":{"tag":"x00201202","vr":"IS","vm":"1","name":"NumberOfPatientRelatedSeries"},"x00201204":{"tag":"x00201204","vr":"IS","vm":"1","name":"NumberOfPatientRelatedInstances"},"x00201206":{"tag":"x00201206","vr":"IS","vm":"1","name":"NumberOfStudyRelatedSeries"},"x00201208":{"tag":"x00201208","vr":"IS","vm":"1","name":"NumberOfStudyRelatedInstances"},"x00201209":{"tag":"x00201209","vr":"IS","vm":"1","name":"NumberOfSeriesRelatedInstances"},"x002031xx":{"tag":"x002031xx","vr":"CS","vm":"1-n","name":"SourceImageIDs"},"x00203401":{"tag":"x00203401","vr":"CS","vm":"1","name":"ModifyingDeviceID"},"x00203402":{"tag":"x00203402","vr":"CS","vm":"1","name":"ModifiedImageID"},"x00203403":{"tag":"x00203403","vr":"DA","vm":"1","name":"ModifiedImageDate"},"x00203404":{"tag":"x00203404","vr":"LO","vm":"1","name":"ModifyingDeviceManufacturer"},"x00203405":{"tag":"x00203405","vr":"TM","vm":"1","name":"ModifiedImageTime"},"x00203406":{"tag":"x00203406","vr":"LO","vm":"1","name":"ModifiedImageDescription"},"x00204000":{"tag":"x00204000","vr":"LT","vm":"1","name":"ImageComments"},"x00205000":{"tag":"x00205000","vr":"AT","vm":"1-n","name":"OriginalImageIdentification"},"x00205002":{"tag":"x00205002","vr":"LO","vm":"1-n","name":"OriginalImageIdentificationNomenclature"},"x00209056":{"tag":"x00209056","vr":"SH","vm":"1","name":"StackID"},"x00209057":{"tag":"x00209057","vr":"UL","vm":"1","name":"InStackPositionNumber"},"x00209071":{"tag":"x00209071","vr":"SQ","vm":"1","name":"FrameAnatomySequence"},"x00209072":{"tag":"x00209072","vr":"CS","vm":"1","name":"FrameLaterality"},"x00209111":{"tag":"x00209111","vr":"SQ","vm":"1","name":"FrameContentSequence"},"x00209113":{"tag":"x00209113","vr":"SQ","vm":"1","name":"PlanePositionSequence"},"x00209116":{"tag":"x00209116","vr":"SQ","vm":"1","name":"PlaneOrientationSequence"},"x00209128":{"tag":"x00209128","vr":"UL","vm":"1","name":"TemporalPositionIndex"},"x00209153":{"tag":"x00209153","vr":"FD","vm":"1","name":"NominalCardiacTriggerDelayTime"},"x00209154":{"tag":"x00209154","vr":"FL","vm":"1","name":"NominalCardiacTriggerTimePriorToRPeak"},"x00209155":{"tag":"x00209155","vr":"FL","vm":"1","name":"ActualCardiacTriggerTimePriorToRPeak"},"x00209156":{"tag":"x00209156","vr":"US","vm":"1","name":"FrameAcquisitionNumber"},"x00209157":{"tag":"x00209157","vr":"UL","vm":"1-n","name":"DimensionIndexValues"},"x00209158":{"tag":"x00209158","vr":"LT","vm":"1","name":"FrameComments"},"x00209161":{"tag":"x00209161","vr":"UI","vm":"1","name":"ConcatenationUID"},"x00209162":{"tag":"x00209162","vr":"US","vm":"1","name":"InConcatenationNumber"},"x00209163":{"tag":"x00209163","vr":"US","vm":"1","name":"InConcatenationTotalNumber"},"x00209164":{"tag":"x00209164","vr":"UI","vm":"1","name":"DimensionOrganizationUID"},"x00209165":{"tag":"x00209165","vr":"AT","vm":"1","name":"DimensionIndexPointer"},"x00209167":{"tag":"x00209167","vr":"AT","vm":"1","name":"FunctionalGroupPointer"},"x00209213":{"tag":"x00209213","vr":"LO","vm":"1","name":"DimensionIndexPrivateCreator"},"x00209221":{"tag":"x00209221","vr":"SQ","vm":"1","name":"DimensionOrganizationSequence"},"x00209222":{"tag":"x00209222","vr":"SQ","vm":"1","name":"DimensionIndexSequence"},"x00209228":{"tag":"x00209228","vr":"UL","vm":"1","name":"ConcatenationFrameOffsetNumber"},"x00209238":{"tag":"x00209238","vr":"LO","vm":"1","name":"FunctionalGroupPrivateCreator"},"x00209241":{"tag":"x00209241","vr":"FL","vm":"1","name":"NominalPercentageOfCardiacPhase"},"x00209245":{"tag":"x00209245","vr":"FL","vm":"1","name":"NominalPercentageOfRespiratoryPhase"},"x00209246":{"tag":"x00209246","vr":"FL","vm":"1","name":"StartingRespiratoryAmplitude"},"x00209247":{"tag":"x00209247","vr":"CS","vm":"1","name":"StartingRespiratoryPhase"},"x00209248":{"tag":"x00209248","vr":"FL","vm":"1","name":"EndingRespiratoryAmplitude"},"x00209249":{"tag":"x00209249","vr":"CS","vm":"1","name":"EndingRespiratoryPhase"},"x00209250":{"tag":"x00209250","vr":"CS","vm":"1","name":"RespiratoryTriggerType"},"x00209251":{"tag":"x00209251","vr":"FD","vm":"1","name":"RRIntervalTimeNominal"},"x00209252":{"tag":"x00209252","vr":"FD","vm":"1","name":"ActualCardiacTriggerDelayTime"},"x00209253":{"tag":"x00209253","vr":"SQ","vm":"1","name":"RespiratorySynchronizationSequence"},"x00209254":{"tag":"x00209254","vr":"FD","vm":"1","name":"RespiratoryIntervalTime"},"x00209255":{"tag":"x00209255","vr":"FD","vm":"1","name":"NominalRespiratoryTriggerDelayTime"},"x00209256":{"tag":"x00209256","vr":"FD","vm":"1","name":"RespiratoryTriggerDelayThreshold"},"x00209257":{"tag":"x00209257","vr":"FD","vm":"1","name":"ActualRespiratoryTriggerDelayTime"},"x00209301":{"tag":"x00209301","vr":"FD","vm":"3","name":"ImagePositionVolume"},"x00209302":{"tag":"x00209302","vr":"FD","vm":"6","name":"ImageOrientationVolume"},"x00209307":{"tag":"x00209307","vr":"CS","vm":"1","name":"UltrasoundAcquisitionGeometry"},"x00209308":{"tag":"x00209308","vr":"FD","vm":"3","name":"ApexPosition"},"x00209309":{"tag":"x00209309","vr":"FD","vm":"16","name":"VolumeToTransducerMappingMatrix"},"x0020930A":{"tag":"x0020930A","vr":"FD","vm":"16","name":"VolumeToTableMappingMatrix"},"x0020930C":{"tag":"x0020930C","vr":"CS","vm":"1","name":"PatientFrameOfReferenceSource"},"x0020930D":{"tag":"x0020930D","vr":"FD","vm":"1","name":"TemporalPositionTimeOffset"},"x0020930E":{"tag":"x0020930E","vr":"SQ","vm":"1","name":"PlanePositionVolumeSequence"},"x0020930F":{"tag":"x0020930F","vr":"SQ","vm":"1","name":"PlaneOrientationVolumeSequence"},"x00209310":{"tag":"x00209310","vr":"SQ","vm":"1","name":"TemporalPositionSequence"},"x00209311":{"tag":"x00209311","vr":"CS","vm":"1","name":"DimensionOrganizationType"},"x00209312":{"tag":"x00209312","vr":"UI","vm":"1","name":"VolumeFrameOfReferenceUID"},"x00209313":{"tag":"x00209313","vr":"UI","vm":"1","name":"TableFrameOfReferenceUID"},"x00209421":{"tag":"x00209421","vr":"LO","vm":"1","name":"DimensionDescriptionLabel"},"x00209450":{"tag":"x00209450","vr":"SQ","vm":"1","name":"PatientOrientationInFrameSequence"},"x00209453":{"tag":"x00209453","vr":"LO","vm":"1","name":"FrameLabel"},"x00209518":{"tag":"x00209518","vr":"US","vm":"1-n","name":"AcquisitionIndex"},"x00209529":{"tag":"x00209529","vr":"SQ","vm":"1","name":"ContributingSOPInstancesReferenceSequence"},"x00209536":{"tag":"x00209536","vr":"US","vm":"1","name":"ReconstructionIndex"},"x00220001":{"tag":"x00220001","vr":"US","vm":"1","name":"LightPathFilterPassThroughWavelength"},"x00220002":{"tag":"x00220002","vr":"US","vm":"2","name":"LightPathFilterPassBand"},"x00220003":{"tag":"x00220003","vr":"US","vm":"1","name":"ImagePathFilterPassThroughWavelength"},"x00220004":{"tag":"x00220004","vr":"US","vm":"2","name":"ImagePathFilterPassBand"},"x00220005":{"tag":"x00220005","vr":"CS","vm":"1","name":"PatientEyeMovementCommanded"},"x00220006":{"tag":"x00220006","vr":"SQ","vm":"1","name":"PatientEyeMovementCommandCodeSequence"},"x00220007":{"tag":"x00220007","vr":"FL","vm":"1","name":"SphericalLensPower"},"x00220008":{"tag":"x00220008","vr":"FL","vm":"1","name":"CylinderLensPower"},"x00220009":{"tag":"x00220009","vr":"FL","vm":"1","name":"CylinderAxis"},"x0022000A":{"tag":"x0022000A","vr":"FL","vm":"1","name":"EmmetropicMagnification"},"x0022000B":{"tag":"x0022000B","vr":"FL","vm":"1","name":"IntraOcularPressure"},"x0022000C":{"tag":"x0022000C","vr":"FL","vm":"1","name":"HorizontalFieldOfView"},"x0022000D":{"tag":"x0022000D","vr":"CS","vm":"1","name":"PupilDilated"},"x0022000E":{"tag":"x0022000E","vr":"FL","vm":"1","name":"DegreeOfDilation"},"x00220010":{"tag":"x00220010","vr":"FL","vm":"1","name":"StereoBaselineAngle"},"x00220011":{"tag":"x00220011","vr":"FL","vm":"1","name":"StereoBaselineDisplacement"},"x00220012":{"tag":"x00220012","vr":"FL","vm":"1","name":"StereoHorizontalPixelOffset"},"x00220013":{"tag":"x00220013","vr":"FL","vm":"1","name":"StereoVerticalPixelOffset"},"x00220014":{"tag":"x00220014","vr":"FL","vm":"1","name":"StereoRotation"},"x00220015":{"tag":"x00220015","vr":"SQ","vm":"1","name":"AcquisitionDeviceTypeCodeSequence"},"x00220016":{"tag":"x00220016","vr":"SQ","vm":"1","name":"IlluminationTypeCodeSequence"},"x00220017":{"tag":"x00220017","vr":"SQ","vm":"1","name":"LightPathFilterTypeStackCodeSequence"},"x00220018":{"tag":"x00220018","vr":"SQ","vm":"1","name":"ImagePathFilterTypeStackCodeSequence"},"x00220019":{"tag":"x00220019","vr":"SQ","vm":"1","name":"LensesCodeSequence"},"x0022001A":{"tag":"x0022001A","vr":"SQ","vm":"1","name":"ChannelDescriptionCodeSequence"},"x0022001B":{"tag":"x0022001B","vr":"SQ","vm":"1","name":"RefractiveStateSequence"},"x0022001C":{"tag":"x0022001C","vr":"SQ","vm":"1","name":"MydriaticAgentCodeSequence"},"x0022001D":{"tag":"x0022001D","vr":"SQ","vm":"1","name":"RelativeImagePositionCodeSequence"},"x0022001E":{"tag":"x0022001E","vr":"FL","vm":"1","name":"CameraAngleOfView"},"x00220020":{"tag":"x00220020","vr":"SQ","vm":"1","name":"StereoPairsSequence"},"x00220021":{"tag":"x00220021","vr":"SQ","vm":"1","name":"LeftImageSequence"},"x00220022":{"tag":"x00220022","vr":"SQ","vm":"1","name":"RightImageSequence"},"x00220030":{"tag":"x00220030","vr":"FL","vm":"1","name":"AxialLengthOfTheEye"},"x00220031":{"tag":"x00220031","vr":"SQ","vm":"1","name":"OphthalmicFrameLocationSequence"},"x00220032":{"tag":"x00220032","vr":"FL","vm":"2-2n","name":"ReferenceCoordinates"},"x00220035":{"tag":"x00220035","vr":"FL","vm":"1","name":"DepthSpatialResolution"},"x00220036":{"tag":"x00220036","vr":"FL","vm":"1","name":"MaximumDepthDistortion"},"x00220037":{"tag":"x00220037","vr":"FL","vm":"1","name":"AlongScanSpatialResolution"},"x00220038":{"tag":"x00220038","vr":"FL","vm":"1","name":"MaximumAlongScanDistortion"},"x00220039":{"tag":"x00220039","vr":"CS","vm":"1","name":"OphthalmicImageOrientation"},"x00220041":{"tag":"x00220041","vr":"FL","vm":"1","name":"DepthOfTransverseImage"},"x00220042":{"tag":"x00220042","vr":"SQ","vm":"1","name":"MydriaticAgentConcentrationUnitsSequence"},"x00220048":{"tag":"x00220048","vr":"FL","vm":"1","name":"AcrossScanSpatialResolution"},"x00220049":{"tag":"x00220049","vr":"FL","vm":"1","name":"MaximumAcrossScanDistortion"},"x0022004E":{"tag":"x0022004E","vr":"DS","vm":"1","name":"MydriaticAgentConcentration"},"x00220055":{"tag":"x00220055","vr":"FL","vm":"1","name":"IlluminationWaveLength"},"x00220056":{"tag":"x00220056","vr":"FL","vm":"1","name":"IlluminationPower"},"x00220057":{"tag":"x00220057","vr":"FL","vm":"1","name":"IlluminationBandwidth"},"x00220058":{"tag":"x00220058","vr":"SQ","vm":"1","name":"MydriaticAgentSequence"},"x00221007":{"tag":"x00221007","vr":"SQ","vm":"1","name":"OphthalmicAxialMeasurementsRightEyeSequence"},"x00221008":{"tag":"x00221008","vr":"SQ","vm":"1","name":"OphthalmicAxialMeasurementsLeftEyeSequence"},"x00221010":{"tag":"x00221010","vr":"CS","vm":"1","name":"OphthalmicAxialLengthMeasurementsType"},"x00221019":{"tag":"x00221019","vr":"FL","vm":"1","name":"OphthalmicAxialLength"},"x00221024":{"tag":"x00221024","vr":"SQ","vm":"1","name":"LensStatusCodeSequence"},"x00221025":{"tag":"x00221025","vr":"SQ","vm":"1","name":"VitreousStatusCodeSequence"},"x00221028":{"tag":"x00221028","vr":"SQ","vm":"1","name":"IOLFormulaCodeSequence"},"x00221029":{"tag":"x00221029","vr":"LO","vm":"1","name":"IOLFormulaDetail"},"x00221033":{"tag":"x00221033","vr":"FL","vm":"1","name":"KeratometerIndex"},"x00221035":{"tag":"x00221035","vr":"SQ","vm":"1","name":"SourceOfOphthalmicAxialLengthCodeSequence"},"x00221037":{"tag":"x00221037","vr":"FL","vm":"1","name":"TargetRefraction"},"x00221039":{"tag":"x00221039","vr":"CS","vm":"1","name":"RefractiveProcedureOccurred"},"x00221040":{"tag":"x00221040","vr":"SQ","vm":"1","name":"RefractiveSurgeryTypeCodeSequence"},"x00221044":{"tag":"x00221044","vr":"SQ","vm":"1","name":"OphthalmicUltrasoundAxialMeasurementsTypeCodeSequence"},"x00221050":{"tag":"x00221050","vr":"SQ","vm":"1","name":"OphthalmicAxialLengthMeasurementsSequence"},"x00221053":{"tag":"x00221053","vr":"FL","vm":"1","name":"IOLPower"},"x00221054":{"tag":"x00221054","vr":"FL","vm":"1","name":"PredictedRefractiveError"},"x00221059":{"tag":"x00221059","vr":"FL","vm":"1","name":"OphthalmicAxialLengthVelocity"},"x00221065":{"tag":"x00221065","vr":"LO","vm":"1","name":"LensStatusDescription"},"x00221066":{"tag":"x00221066","vr":"LO","vm":"1","name":"VitreousStatusDescription"},"x00221090":{"tag":"x00221090","vr":"SQ","vm":"1","name":"IOLPowerSequence"},"x00221092":{"tag":"x00221092","vr":"SQ","vm":"1","name":"LensConstantSequence"},"x00221093":{"tag":"x00221093","vr":"LO","vm":"1","name":"IOLManufacturer"},"x00221094":{"tag":"x00221094","vr":"LO","vm":"1","name":"LensConstantDescription"},"x00221096":{"tag":"x00221096","vr":"SQ","vm":"1","name":"KeratometryMeasurementTypeCodeSequence"},"x00221100":{"tag":"x00221100","vr":"SQ","vm":"1","name":"ReferencedOphthalmicAxialMeasurementsSequence"},"x00221101":{"tag":"x00221101","vr":"SQ","vm":"1","name":"OphthalmicAxialLengthMeasurementsSegmentNameCodeSequence"},"x00221103":{"tag":"x00221103","vr":"SQ","vm":"1","name":"RefractiveErrorBeforeRefractiveSurgeryCodeSequence"},"x00221121":{"tag":"x00221121","vr":"FL","vm":"1","name":"IOLPowerForExactEmmetropia"},"x00221122":{"tag":"x00221122","vr":"FL","vm":"1","name":"IOLPowerForExactTargetRefraction"},"x00221125":{"tag":"x00221125","vr":"SQ","vm":"1","name":"AnteriorChamberDepthDefinitionCodeSequence"},"x00221130":{"tag":"x00221130","vr":"FL","vm":"1","name":"LensThickness"},"x00221131":{"tag":"x00221131","vr":"FL","vm":"1","name":"AnteriorChamberDepth"},"x00221132":{"tag":"x00221132","vr":"SQ","vm":"1","name":"SourceOfLensThicknessDataCodeSequence"},"x00221133":{"tag":"x00221133","vr":"SQ","vm":"1","name":"SourceOfAnteriorChamberDepthDataCodeSequence"},"x00221135":{"tag":"x00221135","vr":"SQ","vm":"1","name":"SourceOfRefractiveErrorDataCodeSequence"},"x00221140":{"tag":"x00221140","vr":"CS","vm":"1","name":"OphthalmicAxialLengthMeasurementModified"},"x00221150":{"tag":"x00221150","vr":"SQ","vm":"1","name":"OphthalmicAxialLengthDataSourceCodeSequence"},"x00221153":{"tag":"x00221153","vr":"SQ","vm":"1","name":"OphthalmicAxialLengthAcquisitionMethodCodeSequence"},"x00221155":{"tag":"x00221155","vr":"FL","vm":"1","name":"SignalToNoiseRatio"},"x00221159":{"tag":"x00221159","vr":"LO","vm":"1","name":"OphthalmicAxialLengthDataSourceDescription"},"x00221210":{"tag":"x00221210","vr":"SQ","vm":"1","name":"OphthalmicAxialLengthMeasurementsTotalLengthSequence"},"x00221211":{"tag":"x00221211","vr":"SQ","vm":"1","name":"OphthalmicAxialLengthMeasurementsSegmentalLengthSequence"},"x00221212":{"tag":"x00221212","vr":"SQ","vm":"1","name":"OphthalmicAxialLengthMeasurementsLengthSummationSequence"},"x00221220":{"tag":"x00221220","vr":"SQ","vm":"1","name":"UltrasoundOphthalmicAxialLengthMeasurementsSequence"},"x00221225":{"tag":"x00221225","vr":"SQ","vm":"1","name":"OpticalOphthalmicAxialLengthMeasurementsSequence"},"x00221230":{"tag":"x00221230","vr":"SQ","vm":"1","name":"UltrasoundSelectedOphthalmicAxialLengthSequence"},"x00221250":{"tag":"x00221250","vr":"SQ","vm":"1","name":"OphthalmicAxialLengthSelectionMethodCodeSequence"},"x00221255":{"tag":"x00221255","vr":"SQ","vm":"1","name":"OpticalSelectedOphthalmicAxialLengthSequence"},"x00221257":{"tag":"x00221257","vr":"SQ","vm":"1","name":"SelectedSegmentalOphthalmicAxialLengthSequence"},"x00221260":{"tag":"x00221260","vr":"SQ","vm":"1","name":"SelectedTotalOphthalmicAxialLengthSequence"},"x00221262":{"tag":"x00221262","vr":"SQ","vm":"1","name":"OphthalmicAxialLengthQualityMetricSequence"},"x00221273":{"tag":"x00221273","vr":"LO","vm":"1","name":"OphthalmicAxialLengthQualityMetricTypeDescription"},"x00221300":{"tag":"x00221300","vr":"SQ","vm":"1","name":"IntraocularLensCalculationsRightEyeSequence"},"x00221310":{"tag":"x00221310","vr":"SQ","vm":"1","name":"IntraocularLensCalculationsLeftEyeSequence"},"x00221330":{"tag":"x00221330","vr":"SQ","vm":"1","name":"ReferencedOphthalmicAxialLengthMeasurementQCImageSequence"},"x00240010":{"tag":"x00240010","vr":"FL","vm":"1","name":"VisualFieldHorizontalExtent"},"x00240011":{"tag":"x00240011","vr":"FL","vm":"1","name":"VisualFieldVerticalExtent"},"x00240012":{"tag":"x00240012","vr":"CS","vm":"1","name":"VisualFieldShape"},"x00240016":{"tag":"x00240016","vr":"SQ","vm":"1","name":"ScreeningTestModeCodeSequence"},"x00240018":{"tag":"x00240018","vr":"FL","vm":"1","name":"MaximumStimulusLuminance"},"x00240020":{"tag":"x00240020","vr":"FL","vm":"1","name":"BackgroundLuminance"},"x00240021":{"tag":"x00240021","vr":"SQ","vm":"1","name":"StimulusColorCodeSequence"},"x00240024":{"tag":"x00240024","vr":"SQ","vm":"1","name":"BackgroundIlluminationColorCodeSequence"},"x00240025":{"tag":"x00240025","vr":"FL","vm":"1","name":"StimulusArea"},"x00240028":{"tag":"x00240028","vr":"FL","vm":"1","name":"StimulusPresentationTime"},"x00240032":{"tag":"x00240032","vr":"SQ","vm":"1","name":"FixationSequence"},"x00240033":{"tag":"x00240033","vr":"SQ","vm":"1","name":"FixationMonitoringCodeSequence"},"x00240034":{"tag":"x00240034","vr":"SQ","vm":"1","name":"VisualFieldCatchTrialSequence"},"x00240035":{"tag":"x00240035","vr":"US","vm":"1","name":"FixationCheckedQuantity"},"x00240036":{"tag":"x00240036","vr":"US","vm":"1","name":"PatientNotProperlyFixatedQuantity"},"x00240037":{"tag":"x00240037","vr":"CS","vm":"1","name":"PresentedVisualStimuliDataFlag"},"x00240038":{"tag":"x00240038","vr":"US","vm":"1","name":"NumberOfVisualStimuli"},"x00240039":{"tag":"x00240039","vr":"CS","vm":"1","name":"ExcessiveFixationLossesDataFlag"},"x00240040":{"tag":"x00240040","vr":"CS","vm":"1","name":"ExcessiveFixationLosses"},"x00240042":{"tag":"x00240042","vr":"US","vm":"1","name":"StimuliRetestingQuantity"},"x00240044":{"tag":"x00240044","vr":"LT","vm":"1","name":"CommentsOnPatientPerformanceOfVisualField"},"x00240045":{"tag":"x00240045","vr":"CS","vm":"1","name":"FalseNegativesEstimateFlag"},"x00240046":{"tag":"x00240046","vr":"FL","vm":"1","name":"FalseNegativesEstimate"},"x00240048":{"tag":"x00240048","vr":"US","vm":"1","name":"NegativeCatchTrialsQuantity"},"x00240050":{"tag":"x00240050","vr":"US","vm":"1","name":"FalseNegativesQuantity"},"x00240051":{"tag":"x00240051","vr":"CS","vm":"1","name":"ExcessiveFalseNegativesDataFlag"},"x00240052":{"tag":"x00240052","vr":"CS","vm":"1","name":"ExcessiveFalseNegatives"},"x00240053":{"tag":"x00240053","vr":"CS","vm":"1","name":"FalsePositivesEstimateFlag"},"x00240054":{"tag":"x00240054","vr":"FL","vm":"1","name":"FalsePositivesEstimate"},"x00240055":{"tag":"x00240055","vr":"CS","vm":"1","name":"CatchTrialsDataFlag"},"x00240056":{"tag":"x00240056","vr":"US","vm":"1","name":"PositiveCatchTrialsQuantity"},"x00240057":{"tag":"x00240057","vr":"CS","vm":"1","name":"TestPointNormalsDataFlag"},"x00240058":{"tag":"x00240058","vr":"SQ","vm":"1","name":"TestPointNormalsSequence"},"x00240059":{"tag":"x00240059","vr":"CS","vm":"1","name":"GlobalDeviationProbabilityNormalsFlag"},"x00240060":{"tag":"x00240060","vr":"US","vm":"1","name":"FalsePositivesQuantity"},"x00240061":{"tag":"x00240061","vr":"CS","vm":"1","name":"ExcessiveFalsePositivesDataFlag"},"x00240062":{"tag":"x00240062","vr":"CS","vm":"1","name":"ExcessiveFalsePositives"},"x00240063":{"tag":"x00240063","vr":"CS","vm":"1","name":"VisualFieldTestNormalsFlag"},"x00240064":{"tag":"x00240064","vr":"SQ","vm":"1","name":"ResultsNormalsSequence"},"x00240065":{"tag":"x00240065","vr":"SQ","vm":"1","name":"AgeCorrectedSensitivityDeviationAlgorithmSequence"},"x00240066":{"tag":"x00240066","vr":"FL","vm":"1","name":"GlobalDeviationFromNormal"},"x00240067":{"tag":"x00240067","vr":"SQ","vm":"1","name":"GeneralizedDefectSensitivityDeviationAlgorithmSequence"},"x00240068":{"tag":"x00240068","vr":"FL","vm":"1","name":"LocalizedDeviationfromNormal"},"x00240069":{"tag":"x00240069","vr":"LO","vm":"1","name":"PatientReliabilityIndicator"},"x00240070":{"tag":"x00240070","vr":"FL","vm":"1","name":"VisualFieldMeanSensitivity"},"x00240071":{"tag":"x00240071","vr":"FL","vm":"1","name":"GlobalDeviationProbability"},"x00240072":{"tag":"x00240072","vr":"CS","vm":"1","name":"LocalDeviationProbabilityNormalsFlag"},"x00240073":{"tag":"x00240073","vr":"FL","vm":"1","name":"LocalizedDeviationProbability"},"x00240074":{"tag":"x00240074","vr":"CS","vm":"1","name":"ShortTermFluctuationCalculated"},"x00240075":{"tag":"x00240075","vr":"FL","vm":"1","name":"ShortTermFluctuation"},"x00240076":{"tag":"x00240076","vr":"CS","vm":"1","name":"ShortTermFluctuationProbabilityCalculated"},"x00240077":{"tag":"x00240077","vr":"FL","vm":"1","name":"ShortTermFluctuationProbability"},"x00240078":{"tag":"x00240078","vr":"CS","vm":"1","name":"CorrectedLocalizedDeviationFromNormalCalculated"},"x00240079":{"tag":"x00240079","vr":"FL","vm":"1","name":"CorrectedLocalizedDeviationFromNormal"},"x00240080":{"tag":"x00240080","vr":"CS","vm":"1","name":"CorrectedLocalizedDeviationFromNormalProbabilityCalculated"},"x00240081":{"tag":"x00240081","vr":"FL","vm":"1","name":"CorrectedLocalizedDeviationFromNormalProbability"},"x00240083":{"tag":"x00240083","vr":"SQ","vm":"1","name":"GlobalDeviationProbabilitySequence"},"x00240085":{"tag":"x00240085","vr":"SQ","vm":"1","name":"LocalizedDeviationProbabilitySequence"},"x00240086":{"tag":"x00240086","vr":"CS","vm":"1","name":"FovealSensitivityMeasured"},"x00240087":{"tag":"x00240087","vr":"FL","vm":"1","name":"FovealSensitivity"},"x00240088":{"tag":"x00240088","vr":"FL","vm":"1","name":"VisualFieldTestDuration"},"x00240089":{"tag":"x00240089","vr":"SQ","vm":"1","name":"VisualFieldTestPointSequence"},"x00240090":{"tag":"x00240090","vr":"FL","vm":"1","name":"VisualFieldTestPointXCoordinate"},"x00240091":{"tag":"x00240091","vr":"FL","vm":"1","name":"VisualFieldTestPointYCoordinate"},"x00240092":{"tag":"x00240092","vr":"FL","vm":"1","name":"AgeCorrectedSensitivityDeviationValue"},"x00240093":{"tag":"x00240093","vr":"CS","vm":"1","name":"StimulusResults"},"x00240094":{"tag":"x00240094","vr":"FL","vm":"1","name":"SensitivityValue"},"x00240095":{"tag":"x00240095","vr":"CS","vm":"1","name":"RetestStimulusSeen"},"x00240096":{"tag":"x00240096","vr":"FL","vm":"1","name":"RetestSensitivityValue"},"x00240097":{"tag":"x00240097","vr":"SQ","vm":"1","name":"VisualFieldTestPointNormalsSequence"},"x00240098":{"tag":"x00240098","vr":"FL","vm":"1","name":"QuantifiedDefect"},"x00240100":{"tag":"x00240100","vr":"FL","vm":"1","name":"AgeCorrectedSensitivityDeviationProbabilityValue"},"x00240102":{"tag":"x00240102","vr":"CS","vm":"1","name":"GeneralizedDefectCorrectedSensitivityDeviationFlag "},"x00240103":{"tag":"x00240103","vr":"FL","vm":"1","name":"GeneralizedDefectCorrectedSensitivityDeviationValue "},"x00240104":{"tag":"x00240104","vr":"FL","vm":"1","name":"GeneralizedDefectCorrectedSensitivityDeviationProbabilityValue"},"x00240105":{"tag":"x00240105","vr":"FL","vm":"1","name":"MinimumSensitivityValue"},"x00240106":{"tag":"x00240106","vr":"CS","vm":"1","name":"BlindSpotLocalized"},"x00240107":{"tag":"x00240107","vr":"FL","vm":"1","name":"BlindSpotXCoordinate"},"x00240108":{"tag":"x00240108","vr":"FL","vm":"1","name":"BlindSpotYCoordinate "},"x00240110":{"tag":"x00240110","vr":"SQ","vm":"1","name":"VisualAcuityMeasurementSequence"},"x00240112":{"tag":"x00240112","vr":"SQ","vm":"1","name":"RefractiveParametersUsedOnPatientSequence"},"x00240113":{"tag":"x00240113","vr":"CS","vm":"1","name":"MeasurementLaterality"},"x00240114":{"tag":"x00240114","vr":"SQ","vm":"1","name":"OphthalmicPatientClinicalInformationLeftEyeSequence"},"x00240115":{"tag":"x00240115","vr":"SQ","vm":"1","name":"OphthalmicPatientClinicalInformationRightEyeSequence"},"x00240117":{"tag":"x00240117","vr":"CS","vm":"1","name":"FovealPointNormativeDataFlag"},"x00240118":{"tag":"x00240118","vr":"FL","vm":"1","name":"FovealPointProbabilityValue"},"x00240120":{"tag":"x00240120","vr":"CS","vm":"1","name":"ScreeningBaselineMeasured"},"x00240122":{"tag":"x00240122","vr":"SQ","vm":"1","name":"ScreeningBaselineMeasuredSequence"},"x00240124":{"tag":"x00240124","vr":"CS","vm":"1","name":"ScreeningBaselineType"},"x00240126":{"tag":"x00240126","vr":"FL","vm":"1","name":"ScreeningBaselineValue"},"x00240202":{"tag":"x00240202","vr":"LO","vm":"1","name":"AlgorithmSource"},"x00240306":{"tag":"x00240306","vr":"LO","vm":"1","name":"DataSetName"},"x00240307":{"tag":"x00240307","vr":"LO","vm":"1","name":"DataSetVersion"},"x00240308":{"tag":"x00240308","vr":"LO","vm":"1","name":"DataSetSource"},"x00240309":{"tag":"x00240309","vr":"LO","vm":"1","name":"DataSetDescription"},"x00240317":{"tag":"x00240317","vr":"SQ","vm":"1","name":"VisualFieldTestReliabilityGlobalIndexSequence"},"x00240320":{"tag":"x00240320","vr":"SQ","vm":"1","name":"VisualFieldGlobalResultsIndexSequence"},"x00240325":{"tag":"x00240325","vr":"SQ","vm":"1","name":"DataObservationSequence"},"x00240338":{"tag":"x00240338","vr":"CS","vm":"1","name":"IndexNormalsFlag"},"x00240341":{"tag":"x00240341","vr":"FL","vm":"1","name":"IndexProbability"},"x00240344":{"tag":"x00240344","vr":"SQ","vm":"1","name":"IndexProbabilitySequence"},"x00280002":{"tag":"x00280002","vr":"US","vm":"1","name":"SamplesPerPixel"},"x00280003":{"tag":"x00280003","vr":"US","vm":"1","name":"SamplesPerPixelUsed"},"x00280004":{"tag":"x00280004","vr":"CS","vm":"1","name":"PhotometricInterpretation"},"x00280005":{"tag":"x00280005","vr":"US","vm":"1","name":"ImageDimensions"},"x00280006":{"tag":"x00280006","vr":"US","vm":"1","name":"PlanarConfiguration"},"x00280008":{"tag":"x00280008","vr":"IS","vm":"1","name":"NumberOfFrames"},"x00280009":{"tag":"x00280009","vr":"AT","vm":"1-n","name":"FrameIncrementPointer"},"x0028000A":{"tag":"x0028000A","vr":"AT","vm":"1-n","name":"FrameDimensionPointer"},"x00280010":{"tag":"x00280010","vr":"US","vm":"1","name":"Rows"},"x00280011":{"tag":"x00280011","vr":"US","vm":"1","name":"Columns"},"x00280012":{"tag":"x00280012","vr":"US","vm":"1","name":"Planes"},"x00280014":{"tag":"x00280014","vr":"US","vm":"1","name":"UltrasoundColorDataPresent"},"x00280030":{"tag":"x00280030","vr":"DS","vm":"2","name":"PixelSpacing"},"x00280031":{"tag":"x00280031","vr":"DS","vm":"2","name":"ZoomFactor"},"x00280032":{"tag":"x00280032","vr":"DS","vm":"2","name":"ZoomCenter"},"x00280034":{"tag":"x00280034","vr":"IS","vm":"2","name":"PixelAspectRatio"},"x00280040":{"tag":"x00280040","vr":"CS","vm":"1","name":"ImageFormat"},"x00280050":{"tag":"x00280050","vr":"LO","vm":"1-n","name":"ManipulatedImage"},"x00280051":{"tag":"x00280051","vr":"CS","vm":"1-n","name":"CorrectedImage"},"x0028005F":{"tag":"x0028005F","vr":"LO","vm":"1","name":"CompressionRecognitionCode"},"x00280060":{"tag":"x00280060","vr":"CS","vm":"1","name":"CompressionCode"},"x00280061":{"tag":"x00280061","vr":"SH","vm":"1","name":"CompressionOriginator"},"x00280062":{"tag":"x00280062","vr":"LO","vm":"1","name":"CompressionLabel"},"x00280063":{"tag":"x00280063","vr":"SH","vm":"1","name":"CompressionDescription"},"x00280065":{"tag":"x00280065","vr":"CS","vm":"1-n","name":"CompressionSequence"},"x00280066":{"tag":"x00280066","vr":"AT","vm":"1-n","name":"CompressionStepPointers"},"x00280068":{"tag":"x00280068","vr":"US","vm":"1","name":"RepeatInterval"},"x00280069":{"tag":"x00280069","vr":"US","vm":"1","name":"BitsGrouped"},"x00280070":{"tag":"x00280070","vr":"US","vm":"1-n","name":"PerimeterTable"},"x00280071":{"tag":"x00280071","vr":"US|SS","vm":"1","name":"PerimeterValue"},"x00280080":{"tag":"x00280080","vr":"US","vm":"1","name":"PredictorRows"},"x00280081":{"tag":"x00280081","vr":"US","vm":"1","name":"PredictorColumns"},"x00280082":{"tag":"x00280082","vr":"US","vm":"1-n","name":"PredictorConstants"},"x00280090":{"tag":"x00280090","vr":"CS","vm":"1","name":"BlockedPixels"},"x00280091":{"tag":"x00280091","vr":"US","vm":"1","name":"BlockRows"},"x00280092":{"tag":"x00280092","vr":"US","vm":"1","name":"BlockColumns"},"x00280093":{"tag":"x00280093","vr":"US","vm":"1","name":"RowOverlap"},"x00280094":{"tag":"x00280094","vr":"US","vm":"1","name":"ColumnOverlap"},"x00280100":{"tag":"x00280100","vr":"US","vm":"1","name":"BitsAllocated"},"x00280101":{"tag":"x00280101","vr":"US","vm":"1","name":"BitsStored"},"x00280102":{"tag":"x00280102","vr":"US","vm":"1","name":"HighBit"},"x00280103":{"tag":"x00280103","vr":"US","vm":"1","name":"PixelRepresentation"},"x00280104":{"tag":"x00280104","vr":"US|SS","vm":"1","name":"SmallestValidPixelValue"},"x00280105":{"tag":"x00280105","vr":"US|SS","vm":"1","name":"LargestValidPixelValue"},"x00280106":{"tag":"x00280106","vr":"US|SS","vm":"1","name":"SmallestImagePixelValue"},"x00280107":{"tag":"x00280107","vr":"US|SS","vm":"1","name":"LargestImagePixelValue"},"x00280108":{"tag":"x00280108","vr":"US|SS","vm":"1","name":"SmallestPixelValueInSeries"},"x00280109":{"tag":"x00280109","vr":"US|SS","vm":"1","name":"LargestPixelValueInSeries"},"x00280110":{"tag":"x00280110","vr":"US|SS","vm":"1","name":"SmallestImagePixelValueInPlane"},"x00280111":{"tag":"x00280111","vr":"US|SS","vm":"1","name":"LargestImagePixelValueInPlane"},"x00280120":{"tag":"x00280120","vr":"US|SS","vm":"1","name":"PixelPaddingValue"},"x00280121":{"tag":"x00280121","vr":"US|SS","vm":"1","name":"PixelPaddingRangeLimit"},"x00280200":{"tag":"x00280200","vr":"US","vm":"1","name":"ImageLocation"},"x00280300":{"tag":"x00280300","vr":"CS","vm":"1","name":"QualityControlImage"},"x00280301":{"tag":"x00280301","vr":"CS","vm":"1","name":"BurnedInAnnotation"},"x00280302":{"tag":"x00280302","vr":"CS","vm":"1","name":"RecognizableVisualFeatures"},"x00280303":{"tag":"x00280303","vr":"CS","vm":"1","name":"LongitudinalTemporalInformationModified"},"x00280400":{"tag":"x00280400","vr":"LO","vm":"1","name":"TransformLabel"},"x00280401":{"tag":"x00280401","vr":"LO","vm":"1","name":"TransformVersionNumber"},"x00280402":{"tag":"x00280402","vr":"US","vm":"1","name":"NumberOfTransformSteps"},"x00280403":{"tag":"x00280403","vr":"LO","vm":"1-n","name":"SequenceOfCompressedData"},"x00280404":{"tag":"x00280404","vr":"AT","vm":"1-n","name":"DetailsOfCoefficients"},"x002804x0":{"tag":"x002804x0","vr":"US","vm":"1","name":"RowsForNthOrderCoefficients"},"x002804x1":{"tag":"x002804x1","vr":"US","vm":"1","name":"ColumnsForNthOrderCoefficients"},"x002804x2":{"tag":"x002804x2","vr":"LO","vm":"1-n","name":"CoefficientCoding"},"x002804x3":{"tag":"x002804x3","vr":"AT","vm":"1-n","name":"CoefficientCodingPointers"},"x00280700":{"tag":"x00280700","vr":"LO","vm":"1","name":"DCTLabel"},"x00280701":{"tag":"x00280701","vr":"CS","vm":"1-n","name":"DataBlockDescription"},"x00280702":{"tag":"x00280702","vr":"AT","vm":"1-n","name":"DataBlock"},"x00280710":{"tag":"x00280710","vr":"US","vm":"1","name":"NormalizationFactorFormat"},"x00280720":{"tag":"x00280720","vr":"US","vm":"1","name":"ZonalMapNumberFormat"},"x00280721":{"tag":"x00280721","vr":"AT","vm":"1-n","name":"ZonalMapLocation"},"x00280722":{"tag":"x00280722","vr":"US","vm":"1","name":"ZonalMapFormat"},"x00280730":{"tag":"x00280730","vr":"US","vm":"1","name":"AdaptiveMapFormat"},"x00280740":{"tag":"x00280740","vr":"US","vm":"1","name":"CodeNumberFormat"},"x002808x0":{"tag":"x002808x0","vr":"CS","vm":"1-n","name":"CodeLabel"},"x002808x2":{"tag":"x002808x2","vr":"US","vm":"1","name":"NumberOfTables"},"x002808x3":{"tag":"x002808x3","vr":"AT","vm":"1-n","name":"CodeTableLocation"},"x002808x4":{"tag":"x002808x4","vr":"US","vm":"1","name":"BitsForCodeWord"},"x002808x8":{"tag":"x002808x8","vr":"AT","vm":"1-n","name":"ImageDataLocation"},"x00280A02":{"tag":"x00280A02","vr":"CS","vm":"1","name":"PixelSpacingCalibrationType"},"x00280A04":{"tag":"x00280A04","vr":"LO","vm":"1","name":"PixelSpacingCalibrationDescription"},"x00281040":{"tag":"x00281040","vr":"CS","vm":"1","name":"PixelIntensityRelationship"},"x00281041":{"tag":"x00281041","vr":"SS","vm":"1","name":"PixelIntensityRelationshipSign"},"x00281050":{"tag":"x00281050","vr":"DS","vm":"1-n","name":"WindowCenter"},"x00281051":{"tag":"x00281051","vr":"DS","vm":"1-n","name":"WindowWidth"},"x00281052":{"tag":"x00281052","vr":"DS","vm":"1","name":"RescaleIntercept"},"x00281053":{"tag":"x00281053","vr":"DS","vm":"1","name":"RescaleSlope"},"x00281054":{"tag":"x00281054","vr":"LO","vm":"1","name":"RescaleType"},"x00281055":{"tag":"x00281055","vr":"LO","vm":"1-n","name":"WindowCenterWidthExplanation"},"x00281056":{"tag":"x00281056","vr":"CS","vm":"1","name":"VOILUTFunction"},"x00281080":{"tag":"x00281080","vr":"CS","vm":"1","name":"GrayScale"},"x00281090":{"tag":"x00281090","vr":"CS","vm":"1","name":"RecommendedViewingMode"},"x00281100":{"tag":"x00281100","vr":"US|SS","vm":"3","name":"GrayLookupTableDescriptor"},"x00281101":{"tag":"x00281101","vr":"US|SS","vm":"3","name":"RedPaletteColorLookupTableDescriptor"},"x00281102":{"tag":"x00281102","vr":"US|SS","vm":"3","name":"GreenPaletteColorLookupTableDescriptor"},"x00281103":{"tag":"x00281103","vr":"US|SS","vm":"3","name":"BluePaletteColorLookupTableDescriptor"},"x00281104":{"tag":"x00281104","vr":"US","vm":"3","name":"AlphaPaletteColorLookupTableDescriptor"},"x00281111":{"tag":"x00281111","vr":"US|SS","vm":"4","name":"LargeRedPaletteColorLookupTableDescriptor"},"x00281112":{"tag":"x00281112","vr":"US|SS","vm":"4","name":"LargeGreenPaletteColorLookupTableDescriptor"},"x00281113":{"tag":"x00281113","vr":"US|SS","vm":"4","name":"LargeBluePaletteColorLookupTableDescriptor"},"x00281199":{"tag":"x00281199","vr":"UI","vm":"1","name":"PaletteColorLookupTableUID"},"x00281200":{"tag":"x00281200","vr":"US|SS|OW","vm":"1-n1","name":"GrayLookupTableData"},"x00281201":{"tag":"x00281201","vr":"OW","vm":"1","name":"RedPaletteColorLookupTableData"},"x00281202":{"tag":"x00281202","vr":"OW","vm":"1","name":"GreenPaletteColorLookupTableData"},"x00281203":{"tag":"x00281203","vr":"OW","vm":"1","name":"BluePaletteColorLookupTableData"},"x00281204":{"tag":"x00281204","vr":"OW","vm":"1","name":"AlphaPaletteColorLookupTableData"},"x00281211":{"tag":"x00281211","vr":"OW","vm":"1","name":"LargeRedPaletteColorLookupTableData"},"x00281212":{"tag":"x00281212","vr":"OW","vm":"1","name":"LargeGreenPaletteColorLookupTableData"},"x00281213":{"tag":"x00281213","vr":"OW","vm":"1","name":"LargeBluePaletteColorLookupTableData"},"x00281214":{"tag":"x00281214","vr":"UI","vm":"1","name":"LargePaletteColorLookupTableUID"},"x00281221":{"tag":"x00281221","vr":"OW","vm":"1","name":"SegmentedRedPaletteColorLookupTableData"},"x00281222":{"tag":"x00281222","vr":"OW","vm":"1","name":"SegmentedGreenPaletteColorLookupTableData"},"x00281223":{"tag":"x00281223","vr":"OW","vm":"1","name":"SegmentedBluePaletteColorLookupTableData"},"x00281300":{"tag":"x00281300","vr":"CS","vm":"1","name":"BreastImplantPresent"},"x00281350":{"tag":"x00281350","vr":"CS","vm":"1","name":"PartialView"},"x00281351":{"tag":"x00281351","vr":"ST","vm":"1","name":"PartialViewDescription"},"x00281352":{"tag":"x00281352","vr":"SQ","vm":"1","name":"PartialViewCodeSequence"},"x0028135A":{"tag":"x0028135A","vr":"CS","vm":"1","name":"SpatialLocationsPreserved"},"x00281401":{"tag":"x00281401","vr":"SQ","vm":"1","name":"DataFrameAssignmentSequence"},"x00281402":{"tag":"x00281402","vr":"CS","vm":"1","name":"DataPathAssignment"},"x00281403":{"tag":"x00281403","vr":"US","vm":"1","name":"BitsMappedToColorLookupTable"},"x00281404":{"tag":"x00281404","vr":"SQ","vm":"1","name":"BlendingLUT1Sequence"},"x00281405":{"tag":"x00281405","vr":"CS","vm":"1","name":"BlendingLUT1TransferFunction"},"x00281406":{"tag":"x00281406","vr":"FD","vm":"1","name":"BlendingWeightConstant"},"x00281407":{"tag":"x00281407","vr":"US","vm":"3","name":"BlendingLookupTableDescriptor"},"x00281408":{"tag":"x00281408","vr":"OW","vm":"1","name":"BlendingLookupTableData"},"x0028140B":{"tag":"x0028140B","vr":"SQ","vm":"1","name":"EnhancedPaletteColorLookupTableSequence"},"x0028140C":{"tag":"x0028140C","vr":"SQ","vm":"1","name":"BlendingLUT2Sequence"},"x0028140D":{"tag":"x0028140D","vr":"CS","vm":"1","name":"BlendingLUT2TransferFunction"},"x0028140E":{"tag":"x0028140E","vr":"CS","vm":"1","name":"DataPathID"},"x0028140F":{"tag":"x0028140F","vr":"CS","vm":"1","name":"RGBLUTTransferFunction"},"x00281410":{"tag":"x00281410","vr":"CS","vm":"1","name":"AlphaLUTTransferFunction"},"x00282000":{"tag":"x00282000","vr":"OB","vm":"1","name":"ICCProfile"},"x00282110":{"tag":"x00282110","vr":"CS","vm":"1","name":"LossyImageCompression"},"x00282112":{"tag":"x00282112","vr":"DS","vm":"1-n","name":"LossyImageCompressionRatio"},"x00282114":{"tag":"x00282114","vr":"CS","vm":"1-n","name":"LossyImageCompressionMethod"},"x00283000":{"tag":"x00283000","vr":"SQ","vm":"1","name":"ModalityLUTSequence"},"x00283002":{"tag":"x00283002","vr":"US|SS","vm":"3","name":"LUTDescriptor"},"x00283003":{"tag":"x00283003","vr":"LO","vm":"1","name":"LUTExplanation"},"x00283004":{"tag":"x00283004","vr":"LO","vm":"1","name":"ModalityLUTType"},"x00283006":{"tag":"x00283006","vr":"US|OW","vm":"1-n1","name":"LUTData"},"x00283010":{"tag":"x00283010","vr":"SQ","vm":"1","name":"VOILUTSequence"},"x00283110":{"tag":"x00283110","vr":"SQ","vm":"1","name":"SoftcopyVOILUTSequence"},"x00284000":{"tag":"x00284000","vr":"LT","vm":"1","name":"ImagePresentationComments"},"x00285000":{"tag":"x00285000","vr":"SQ","vm":"1","name":"BiPlaneAcquisitionSequence"},"x00286010":{"tag":"x00286010","vr":"US","vm":"1","name":"RepresentativeFrameNumber"},"x00286020":{"tag":"x00286020","vr":"US","vm":"1-n","name":"FrameNumbersOfInterest"},"x00286022":{"tag":"x00286022","vr":"LO","vm":"1-n","name":"FrameOfInterestDescription"},"x00286023":{"tag":"x00286023","vr":"CS","vm":"1-n","name":"FrameOfInterestType"},"x00286030":{"tag":"x00286030","vr":"US","vm":"1-n","name":"MaskPointers"},"x00286040":{"tag":"x00286040","vr":"US","vm":"1-n","name":"RWavePointer"},"x00286100":{"tag":"x00286100","vr":"SQ","vm":"1","name":"MaskSubtractionSequence"},"x00286101":{"tag":"x00286101","vr":"CS","vm":"1","name":"MaskOperation"},"x00286102":{"tag":"x00286102","vr":"US","vm":"2-2n","name":"ApplicableFrameRange"},"x00286110":{"tag":"x00286110","vr":"US","vm":"1-n","name":"MaskFrameNumbers"},"x00286112":{"tag":"x00286112","vr":"US","vm":"1","name":"ContrastFrameAveraging"},"x00286114":{"tag":"x00286114","vr":"FL","vm":"2","name":"MaskSubPixelShift"},"x00286120":{"tag":"x00286120","vr":"SS","vm":"1","name":"TIDOffset"},"x00286190":{"tag":"x00286190","vr":"ST","vm":"1","name":"MaskOperationExplanation"},"x00287FE0":{"tag":"x00287FE0","vr":"UT","vm":"1","name":"PixelDataProviderURL"},"x00289001":{"tag":"x00289001","vr":"UL","vm":"1","name":"DataPointRows"},"x00289002":{"tag":"x00289002","vr":"UL","vm":"1","name":"DataPointColumns"},"x00289003":{"tag":"x00289003","vr":"CS","vm":"1","name":"SignalDomainColumns"},"x00289099":{"tag":"x00289099","vr":"US","vm":"1","name":"LargestMonochromePixelValue"},"x00289108":{"tag":"x00289108","vr":"CS","vm":"1","name":"DataRepresentation"},"x00289110":{"tag":"x00289110","vr":"SQ","vm":"1","name":"PixelMeasuresSequence"},"x00289132":{"tag":"x00289132","vr":"SQ","vm":"1","name":"FrameVOILUTSequence"},"x00289145":{"tag":"x00289145","vr":"SQ","vm":"1","name":"PixelValueTransformationSequence"},"x00289235":{"tag":"x00289235","vr":"CS","vm":"1","name":"SignalDomainRows"},"x00289411":{"tag":"x00289411","vr":"FL","vm":"1","name":"DisplayFilterPercentage"},"x00289415":{"tag":"x00289415","vr":"SQ","vm":"1","name":"FramePixelShiftSequence"},"x00289416":{"tag":"x00289416","vr":"US","vm":"1","name":"SubtractionItemID"},"x00289422":{"tag":"x00289422","vr":"SQ","vm":"1","name":"PixelIntensityRelationshipLUTSequence"},"x00289443":{"tag":"x00289443","vr":"SQ","vm":"1","name":"FramePixelDataPropertiesSequence"},"x00289444":{"tag":"x00289444","vr":"CS","vm":"1","name":"GeometricalProperties"},"x00289445":{"tag":"x00289445","vr":"FL","vm":"1","name":"GeometricMaximumDistortion"},"x00289446":{"tag":"x00289446","vr":"CS","vm":"1-n","name":"ImageProcessingApplied"},"x00289454":{"tag":"x00289454","vr":"CS","vm":"1","name":"MaskSelectionMode"},"x00289474":{"tag":"x00289474","vr":"CS","vm":"1","name":"LUTFunction"},"x00289478":{"tag":"x00289478","vr":"FL","vm":"1","name":"MaskVisibilityPercentage"},"x00289501":{"tag":"x00289501","vr":"SQ","vm":"1","name":"PixelShiftSequence"},"x00289502":{"tag":"x00289502","vr":"SQ","vm":"1","name":"RegionPixelShiftSequence"},"x00289503":{"tag":"x00289503","vr":"SS","vm":"2-2n","name":"VerticesOfTheRegion"},"x00289505":{"tag":"x00289505","vr":"SQ","vm":"1","name":"MultiFramePresentationSequence"},"x00289506":{"tag":"x00289506","vr":"US","vm":"2-2n","name":"PixelShiftFrameRange"},"x00289507":{"tag":"x00289507","vr":"US","vm":"2-2n","name":"LUTFrameRange"},"x00289520":{"tag":"x00289520","vr":"DS","vm":"16","name":"ImageToEquipmentMappingMatrix"},"x00289537":{"tag":"x00289537","vr":"CS","vm":"1","name":"EquipmentCoordinateSystemIdentification"},"x0032000A":{"tag":"x0032000A","vr":"CS","vm":"1","name":"StudyStatusID"},"x0032000C":{"tag":"x0032000C","vr":"CS","vm":"1","name":"StudyPriorityID"},"x00320012":{"tag":"x00320012","vr":"LO","vm":"1","name":"StudyIDIssuer"},"x00320032":{"tag":"x00320032","vr":"DA","vm":"1","name":"StudyVerifiedDate"},"x00320033":{"tag":"x00320033","vr":"TM","vm":"1","name":"StudyVerifiedTime"},"x00320034":{"tag":"x00320034","vr":"DA","vm":"1","name":"StudyReadDate"},"x00320035":{"tag":"x00320035","vr":"TM","vm":"1","name":"StudyReadTime"},"x00321000":{"tag":"x00321000","vr":"DA","vm":"1","name":"ScheduledStudyStartDate"},"x00321001":{"tag":"x00321001","vr":"TM","vm":"1","name":"ScheduledStudyStartTime"},"x00321010":{"tag":"x00321010","vr":"DA","vm":"1","name":"ScheduledStudyStopDate"},"x00321011":{"tag":"x00321011","vr":"TM","vm":"1","name":"ScheduledStudyStopTime"},"x00321020":{"tag":"x00321020","vr":"LO","vm":"1","name":"ScheduledStudyLocation"},"x00321021":{"tag":"x00321021","vr":"AE","vm":"1-n","name":"ScheduledStudyLocationAETitle"},"x00321030":{"tag":"x00321030","vr":"LO","vm":"1","name":"ReasonForStudy"},"x00321031":{"tag":"x00321031","vr":"SQ","vm":"1","name":"RequestingPhysicianIdentificationSequence"},"x00321032":{"tag":"x00321032","vr":"PN","vm":"1","name":"RequestingPhysician"},"x00321033":{"tag":"x00321033","vr":"LO","vm":"1","name":"RequestingService"},"x00321034":{"tag":"x00321034","vr":"SQ","vm":"1","name":"RequestingServiceCodeSequence"},"x00321040":{"tag":"x00321040","vr":"DA","vm":"1","name":"StudyArrivalDate"},"x00321041":{"tag":"x00321041","vr":"TM","vm":"1","name":"StudyArrivalTime"},"x00321050":{"tag":"x00321050","vr":"DA","vm":"1","name":"StudyCompletionDate"},"x00321051":{"tag":"x00321051","vr":"TM","vm":"1","name":"StudyCompletionTime"},"x00321055":{"tag":"x00321055","vr":"CS","vm":"1","name":"StudyComponentStatusID"},"x00321060":{"tag":"x00321060","vr":"LO","vm":"1","name":"RequestedProcedureDescription"},"x00321064":{"tag":"x00321064","vr":"SQ","vm":"1","name":"RequestedProcedureCodeSequence"},"x00321070":{"tag":"x00321070","vr":"LO","vm":"1","name":"RequestedContrastAgent"},"x00324000":{"tag":"x00324000","vr":"LT","vm":"1","name":"StudyComments"},"x00380004":{"tag":"x00380004","vr":"SQ","vm":"1","name":"ReferencedPatientAliasSequence"},"x00380008":{"tag":"x00380008","vr":"CS","vm":"1","name":"VisitStatusID"},"x00380010":{"tag":"x00380010","vr":"LO","vm":"1","name":"AdmissionID"},"x00380011":{"tag":"x00380011","vr":"LO","vm":"1","name":"IssuerOfAdmissionID"},"x00380014":{"tag":"x00380014","vr":"SQ","vm":"1","name":"IssuerOfAdmissionIDSequence"},"x00380016":{"tag":"x00380016","vr":"LO","vm":"1","name":"RouteOfAdmissions"},"x0038001A":{"tag":"x0038001A","vr":"DA","vm":"1","name":"ScheduledAdmissionDate"},"x0038001B":{"tag":"x0038001B","vr":"TM","vm":"1","name":"ScheduledAdmissionTime"},"x0038001C":{"tag":"x0038001C","vr":"DA","vm":"1","name":"ScheduledDischargeDate"},"x0038001D":{"tag":"x0038001D","vr":"TM","vm":"1","name":"ScheduledDischargeTime"},"x0038001E":{"tag":"x0038001E","vr":"LO","vm":"1","name":"ScheduledPatientInstitutionResidence"},"x00380020":{"tag":"x00380020","vr":"DA","vm":"1","name":"AdmittingDate"},"x00380021":{"tag":"x00380021","vr":"TM","vm":"1","name":"AdmittingTime"},"x00380030":{"tag":"x00380030","vr":"DA","vm":"1","name":"DischargeDate"},"x00380032":{"tag":"x00380032","vr":"TM","vm":"1","name":"DischargeTime"},"x00380040":{"tag":"x00380040","vr":"LO","vm":"1","name":"DischargeDiagnosisDescription"},"x00380044":{"tag":"x00380044","vr":"SQ","vm":"1","name":"DischargeDiagnosisCodeSequence"},"x00380050":{"tag":"x00380050","vr":"LO","vm":"1","name":"SpecialNeeds"},"x00380060":{"tag":"x00380060","vr":"LO","vm":"1","name":"ServiceEpisodeID"},"x00380061":{"tag":"x00380061","vr":"LO","vm":"1","name":"IssuerOfServiceEpisodeID"},"x00380062":{"tag":"x00380062","vr":"LO","vm":"1","name":"ServiceEpisodeDescription"},"x00380064":{"tag":"x00380064","vr":"SQ","vm":"1","name":"IssuerOfServiceEpisodeIDSequence"},"x00380100":{"tag":"x00380100","vr":"SQ","vm":"1","name":"PertinentDocumentsSequence"},"x00380300":{"tag":"x00380300","vr":"LO","vm":"1","name":"CurrentPatientLocation"},"x00380400":{"tag":"x00380400","vr":"LO","vm":"1","name":"PatientInstitutionResidence"},"x00380500":{"tag":"x00380500","vr":"LO","vm":"1","name":"PatientState"},"x00380502":{"tag":"x00380502","vr":"SQ","vm":"1","name":"PatientClinicalTrialParticipationSequence"},"x00384000":{"tag":"x00384000","vr":"LT","vm":"1","name":"VisitComments"},"x003A0004":{"tag":"x003A0004","vr":"CS","vm":"1","name":"WaveformOriginality"},"x003A0005":{"tag":"x003A0005","vr":"US","vm":"1","name":"NumberOfWaveformChannels"},"x003A0010":{"tag":"x003A0010","vr":"UL","vm":"1","name":"NumberOfWaveformSamples"},"x003A001A":{"tag":"x003A001A","vr":"DS","vm":"1","name":"SamplingFrequency"},"x003A0020":{"tag":"x003A0020","vr":"SH","vm":"1","name":"MultiplexGroupLabel"},"x003A0200":{"tag":"x003A0200","vr":"SQ","vm":"1","name":"ChannelDefinitionSequence"},"x003A0202":{"tag":"x003A0202","vr":"IS","vm":"1","name":"WaveformChannelNumber"},"x003A0203":{"tag":"x003A0203","vr":"SH","vm":"1","name":"ChannelLabel"},"x003A0205":{"tag":"x003A0205","vr":"CS","vm":"1-n","name":"ChannelStatus"},"x003A0208":{"tag":"x003A0208","vr":"SQ","vm":"1","name":"ChannelSourceSequence"},"x003A0209":{"tag":"x003A0209","vr":"SQ","vm":"1","name":"ChannelSourceModifiersSequence"},"x003A020A":{"tag":"x003A020A","vr":"SQ","vm":"1","name":"SourceWaveformSequence"},"x003A020C":{"tag":"x003A020C","vr":"LO","vm":"1","name":"ChannelDerivationDescription"},"x003A0210":{"tag":"x003A0210","vr":"DS","vm":"1","name":"ChannelSensitivity"},"x003A0211":{"tag":"x003A0211","vr":"SQ","vm":"1","name":"ChannelSensitivityUnitsSequence"},"x003A0212":{"tag":"x003A0212","vr":"DS","vm":"1","name":"ChannelSensitivityCorrectionFactor"},"x003A0213":{"tag":"x003A0213","vr":"DS","vm":"1","name":"ChannelBaseline"},"x003A0214":{"tag":"x003A0214","vr":"DS","vm":"1","name":"ChannelTimeSkew"},"x003A0215":{"tag":"x003A0215","vr":"DS","vm":"1","name":"ChannelSampleSkew"},"x003A0218":{"tag":"x003A0218","vr":"DS","vm":"1","name":"ChannelOffset"},"x003A021A":{"tag":"x003A021A","vr":"US","vm":"1","name":"WaveformBitsStored"},"x003A0220":{"tag":"x003A0220","vr":"DS","vm":"1","name":"FilterLowFrequency"},"x003A0221":{"tag":"x003A0221","vr":"DS","vm":"1","name":"FilterHighFrequency"},"x003A0222":{"tag":"x003A0222","vr":"DS","vm":"1","name":"NotchFilterFrequency"},"x003A0223":{"tag":"x003A0223","vr":"DS","vm":"1","name":"NotchFilterBandwidth"},"x003A0230":{"tag":"x003A0230","vr":"FL","vm":"1","name":"WaveformDataDisplayScale"},"x003A0231":{"tag":"x003A0231","vr":"US","vm":"3","name":"WaveformDisplayBackgroundCIELabValue"},"x003A0240":{"tag":"x003A0240","vr":"SQ","vm":"1","name":"WaveformPresentationGroupSequence"},"x003A0241":{"tag":"x003A0241","vr":"US","vm":"1","name":"PresentationGroupNumber"},"x003A0242":{"tag":"x003A0242","vr":"SQ","vm":"1","name":"ChannelDisplaySequence"},"x003A0244":{"tag":"x003A0244","vr":"US","vm":"3","name":"ChannelRecommendedDisplayCIELabValue"},"x003A0245":{"tag":"x003A0245","vr":"FL","vm":"1","name":"ChannelPosition"},"x003A0246":{"tag":"x003A0246","vr":"CS","vm":"1","name":"DisplayShadingFlag"},"x003A0247":{"tag":"x003A0247","vr":"FL","vm":"1","name":"FractionalChannelDisplayScale"},"x003A0248":{"tag":"x003A0248","vr":"FL","vm":"1","name":"AbsoluteChannelDisplayScale"},"x003A0300":{"tag":"x003A0300","vr":"SQ","vm":"1","name":"MultiplexedAudioChannelsDescriptionCodeSequence"},"x003A0301":{"tag":"x003A0301","vr":"IS","vm":"1","name":"ChannelIdentificationCode"},"x003A0302":{"tag":"x003A0302","vr":"CS","vm":"1","name":"ChannelMode"},"x00400001":{"tag":"x00400001","vr":"AE","vm":"1-n","name":"ScheduledStationAETitle"},"x00400002":{"tag":"x00400002","vr":"DA","vm":"1","name":"ScheduledProcedureStepStartDate"},"x00400003":{"tag":"x00400003","vr":"TM","vm":"1","name":"ScheduledProcedureStepStartTime"},"x00400004":{"tag":"x00400004","vr":"DA","vm":"1","name":"ScheduledProcedureStepEndDate"},"x00400005":{"tag":"x00400005","vr":"TM","vm":"1","name":"ScheduledProcedureStepEndTime"},"x00400006":{"tag":"x00400006","vr":"PN","vm":"1","name":"ScheduledPerformingPhysicianName"},"x00400007":{"tag":"x00400007","vr":"LO","vm":"1","name":"ScheduledProcedureStepDescription"},"x00400008":{"tag":"x00400008","vr":"SQ","vm":"1","name":"ScheduledProtocolCodeSequence"},"x00400009":{"tag":"x00400009","vr":"SH","vm":"1","name":"ScheduledProcedureStepID"},"x0040000A":{"tag":"x0040000A","vr":"SQ","vm":"1","name":"StageCodeSequence"},"x0040000B":{"tag":"x0040000B","vr":"SQ","vm":"1","name":"ScheduledPerformingPhysicianIdentificationSequence"},"x00400010":{"tag":"x00400010","vr":"SH","vm":"1-n","name":"ScheduledStationName"},"x00400011":{"tag":"x00400011","vr":"SH","vm":"1","name":"ScheduledProcedureStepLocation"},"x00400012":{"tag":"x00400012","vr":"LO","vm":"1","name":"PreMedication"},"x00400020":{"tag":"x00400020","vr":"CS","vm":"1","name":"ScheduledProcedureStepStatus"},"x00400026":{"tag":"x00400026","vr":"SQ","vm":"1","name":"OrderPlacerIdentifierSequence"},"x00400027":{"tag":"x00400027","vr":"SQ","vm":"1","name":"OrderFillerIdentifierSequence"},"x00400031":{"tag":"x00400031","vr":"UT","vm":"1","name":"LocalNamespaceEntityID"},"x00400032":{"tag":"x00400032","vr":"UT","vm":"1","name":"UniversalEntityID"},"x00400033":{"tag":"x00400033","vr":"CS","vm":"1","name":"UniversalEntityIDType"},"x00400035":{"tag":"x00400035","vr":"CS","vm":"1","name":"IdentifierTypeCode"},"x00400036":{"tag":"x00400036","vr":"SQ","vm":"1","name":"AssigningFacilitySequence"},"x00400039":{"tag":"x00400039","vr":"SQ","vm":"1","name":"AssigningJurisdictionCodeSequence"},"x0040003A":{"tag":"x0040003A","vr":"SQ","vm":"1","name":"AssigningAgencyOrDepartmentCodeSequence"},"x00400100":{"tag":"x00400100","vr":"SQ","vm":"1","name":"ScheduledProcedureStepSequence"},"x00400220":{"tag":"x00400220","vr":"SQ","vm":"1","name":"ReferencedNonImageCompositeSOPInstanceSequence"},"x00400241":{"tag":"x00400241","vr":"AE","vm":"1","name":"PerformedStationAETitle"},"x00400242":{"tag":"x00400242","vr":"SH","vm":"1","name":"PerformedStationName"},"x00400243":{"tag":"x00400243","vr":"SH","vm":"1","name":"PerformedLocation"},"x00400244":{"tag":"x00400244","vr":"DA","vm":"1","name":"PerformedProcedureStepStartDate"},"x00400245":{"tag":"x00400245","vr":"TM","vm":"1","name":"PerformedProcedureStepStartTime"},"x00400250":{"tag":"x00400250","vr":"DA","vm":"1","name":"PerformedProcedureStepEndDate"},"x00400251":{"tag":"x00400251","vr":"TM","vm":"1","name":"PerformedProcedureStepEndTime"},"x00400252":{"tag":"x00400252","vr":"CS","vm":"1","name":"PerformedProcedureStepStatus"},"x00400253":{"tag":"x00400253","vr":"SH","vm":"1","name":"PerformedProcedureStepID"},"x00400254":{"tag":"x00400254","vr":"LO","vm":"1","name":"PerformedProcedureStepDescription"},"x00400255":{"tag":"x00400255","vr":"LO","vm":"1","name":"PerformedProcedureTypeDescription"},"x00400260":{"tag":"x00400260","vr":"SQ","vm":"1","name":"PerformedProtocolCodeSequence"},"x00400261":{"tag":"x00400261","vr":"CS","vm":"1","name":"PerformedProtocolType"},"x00400270":{"tag":"x00400270","vr":"SQ","vm":"1","name":"ScheduledStepAttributesSequence"},"x00400275":{"tag":"x00400275","vr":"SQ","vm":"1","name":"RequestAttributesSequence"},"x00400280":{"tag":"x00400280","vr":"ST","vm":"1","name":"CommentsOnThePerformedProcedureStep"},"x00400281":{"tag":"x00400281","vr":"SQ","vm":"1","name":"PerformedProcedureStepDiscontinuationReasonCodeSequence"},"x00400293":{"tag":"x00400293","vr":"SQ","vm":"1","name":"QuantitySequence"},"x00400294":{"tag":"x00400294","vr":"DS","vm":"1","name":"Quantity"},"x00400295":{"tag":"x00400295","vr":"SQ","vm":"1","name":"MeasuringUnitsSequence"},"x00400296":{"tag":"x00400296","vr":"SQ","vm":"1","name":"BillingItemSequence"},"x00400300":{"tag":"x00400300","vr":"US","vm":"1","name":"TotalTimeOfFluoroscopy"},"x00400301":{"tag":"x00400301","vr":"US","vm":"1","name":"TotalNumberOfExposures"},"x00400302":{"tag":"x00400302","vr":"US","vm":"1","name":"EntranceDose"},"x00400303":{"tag":"x00400303","vr":"US","vm":"1-2","name":"ExposedArea"},"x00400306":{"tag":"x00400306","vr":"DS","vm":"1","name":"DistanceSourceToEntrance"},"x00400307":{"tag":"x00400307","vr":"DS","vm":"1","name":"DistanceSourceToSupport"},"x0040030E":{"tag":"x0040030E","vr":"SQ","vm":"1","name":"ExposureDoseSequence"},"x00400310":{"tag":"x00400310","vr":"ST","vm":"1","name":"CommentsOnRadiationDose"},"x00400312":{"tag":"x00400312","vr":"DS","vm":"1","name":"XRayOutput"},"x00400314":{"tag":"x00400314","vr":"DS","vm":"1","name":"HalfValueLayer"},"x00400316":{"tag":"x00400316","vr":"DS","vm":"1","name":"OrganDose"},"x00400318":{"tag":"x00400318","vr":"CS","vm":"1","name":"OrganExposed"},"x00400320":{"tag":"x00400320","vr":"SQ","vm":"1","name":"BillingProcedureStepSequence"},"x00400321":{"tag":"x00400321","vr":"SQ","vm":"1","name":"FilmConsumptionSequence"},"x00400324":{"tag":"x00400324","vr":"SQ","vm":"1","name":"BillingSuppliesAndDevicesSequence"},"x00400330":{"tag":"x00400330","vr":"SQ","vm":"1","name":"ReferencedProcedureStepSequence"},"x00400340":{"tag":"x00400340","vr":"SQ","vm":"1","name":"PerformedSeriesSequence"},"x00400400":{"tag":"x00400400","vr":"LT","vm":"1","name":"CommentsOnTheScheduledProcedureStep"},"x00400440":{"tag":"x00400440","vr":"SQ","vm":"1","name":"ProtocolContextSequence"},"x00400441":{"tag":"x00400441","vr":"SQ","vm":"1","name":"ContentItemModifierSequence"},"x00400500":{"tag":"x00400500","vr":"SQ","vm":"1","name":"ScheduledSpecimenSequence"},"x0040050A":{"tag":"x0040050A","vr":"LO","vm":"1","name":"SpecimenAccessionNumber"},"x00400512":{"tag":"x00400512","vr":"LO","vm":"1","name":"ContainerIdentifier"},"x00400513":{"tag":"x00400513","vr":"SQ","vm":"1","name":"IssuerOfTheContainerIdentifierSequence"},"x00400515":{"tag":"x00400515","vr":"SQ","vm":"1","name":"AlternateContainerIdentifierSequence"},"x00400518":{"tag":"x00400518","vr":"SQ","vm":"1","name":"ContainerTypeCodeSequence"},"x0040051A":{"tag":"x0040051A","vr":"LO","vm":"1","name":"ContainerDescription"},"x00400520":{"tag":"x00400520","vr":"SQ","vm":"1","name":"ContainerComponentSequence"},"x00400550":{"tag":"x00400550","vr":"SQ","vm":"1","name":"SpecimenSequence"},"x00400551":{"tag":"x00400551","vr":"LO","vm":"1","name":"SpecimenIdentifier"},"x00400552":{"tag":"x00400552","vr":"SQ","vm":"1","name":"SpecimenDescriptionSequenceTrial"},"x00400553":{"tag":"x00400553","vr":"ST","vm":"1","name":"SpecimenDescriptionTrial"},"x00400554":{"tag":"x00400554","vr":"UI","vm":"1","name":"SpecimenUID"},"x00400555":{"tag":"x00400555","vr":"SQ","vm":"1","name":"AcquisitionContextSequence"},"x00400556":{"tag":"x00400556","vr":"ST","vm":"1","name":"AcquisitionContextDescription"},"x00400560":{"tag":"x00400560","vr":"SQ","vm":"1","name":"SpecimenDescriptionSequence"},"x00400562":{"tag":"x00400562","vr":"SQ","vm":"1","name":"IssuerOfTheSpecimenIdentifierSequence"},"x0040059A":{"tag":"x0040059A","vr":"SQ","vm":"1","name":"SpecimenTypeCodeSequence"},"x00400600":{"tag":"x00400600","vr":"LO","vm":"1","name":"SpecimenShortDescription"},"x00400602":{"tag":"x00400602","vr":"UT","vm":"1","name":"SpecimenDetailedDescription"},"x00400610":{"tag":"x00400610","vr":"SQ","vm":"1","name":"SpecimenPreparationSequence"},"x00400612":{"tag":"x00400612","vr":"SQ","vm":"1","name":"SpecimenPreparationStepContentItemSequence"},"x00400620":{"tag":"x00400620","vr":"SQ","vm":"1","name":"SpecimenLocalizationContentItemSequence"},"x004006FA":{"tag":"x004006FA","vr":"LO","vm":"1","name":"SlideIdentifier"},"x0040071A":{"tag":"x0040071A","vr":"SQ","vm":"1","name":"ImageCenterPointCoordinatesSequence"},"x0040072A":{"tag":"x0040072A","vr":"DS","vm":"1","name":"XOffsetInSlideCoordinateSystem"},"x0040073A":{"tag":"x0040073A","vr":"DS","vm":"1","name":"YOffsetInSlideCoordinateSystem"},"x0040074A":{"tag":"x0040074A","vr":"DS","vm":"1","name":"ZOffsetInSlideCoordinateSystem"},"x004008D8":{"tag":"x004008D8","vr":"SQ","vm":"1","name":"PixelSpacingSequence"},"x004008DA":{"tag":"x004008DA","vr":"SQ","vm":"1","name":"CoordinateSystemAxisCodeSequence"},"x004008EA":{"tag":"x004008EA","vr":"SQ","vm":"1","name":"MeasurementUnitsCodeSequence"},"x004009F8":{"tag":"x004009F8","vr":"SQ","vm":"1","name":"VitalStainCodeSequenceTrial"},"x00401001":{"tag":"x00401001","vr":"SH","vm":"1","name":"RequestedProcedureID"},"x00401002":{"tag":"x00401002","vr":"LO","vm":"1","name":"ReasonForTheRequestedProcedure"},"x00401003":{"tag":"x00401003","vr":"SH","vm":"1","name":"RequestedProcedurePriority"},"x00401004":{"tag":"x00401004","vr":"LO","vm":"1","name":"PatientTransportArrangements"},"x00401005":{"tag":"x00401005","vr":"LO","vm":"1","name":"RequestedProcedureLocation"},"x00401006":{"tag":"x00401006","vr":"SH","vm":"1","name":"PlacerOrderNumberProcedure"},"x00401007":{"tag":"x00401007","vr":"SH","vm":"1","name":"FillerOrderNumberProcedure"},"x00401008":{"tag":"x00401008","vr":"LO","vm":"1","name":"ConfidentialityCode"},"x00401009":{"tag":"x00401009","vr":"SH","vm":"1","name":"ReportingPriority"},"x0040100A":{"tag":"x0040100A","vr":"SQ","vm":"1","name":"ReasonForRequestedProcedureCodeSequence"},"x00401010":{"tag":"x00401010","vr":"PN","vm":"1-n","name":"NamesOfIntendedRecipientsOfResults"},"x00401011":{"tag":"x00401011","vr":"SQ","vm":"1","name":"IntendedRecipientsOfResultsIdentificationSequence"},"x00401012":{"tag":"x00401012","vr":"SQ","vm":"1","name":"ReasonForPerformedProcedureCodeSequence"},"x00401060":{"tag":"x00401060","vr":"LO","vm":"1","name":"RequestedProcedureDescriptionTrial"},"x00401101":{"tag":"x00401101","vr":"SQ","vm":"1","name":"PersonIdentificationCodeSequence"},"x00401102":{"tag":"x00401102","vr":"ST","vm":"1","name":"PersonAddress"},"x00401103":{"tag":"x00401103","vr":"LO","vm":"1-n","name":"PersonTelephoneNumbers"},"x00401400":{"tag":"x00401400","vr":"LT","vm":"1","name":"RequestedProcedureComments"},"x00402001":{"tag":"x00402001","vr":"LO","vm":"1","name":"ReasonForTheImagingServiceRequest"},"x00402004":{"tag":"x00402004","vr":"DA","vm":"1","name":"IssueDateOfImagingServiceRequest"},"x00402005":{"tag":"x00402005","vr":"TM","vm":"1","name":"IssueTimeOfImagingServiceRequest"},"x00402006":{"tag":"x00402006","vr":"SH","vm":"1","name":"PlacerOrderNumberImagingServiceRequestRetired"},"x00402007":{"tag":"x00402007","vr":"SH","vm":"1","name":"FillerOrderNumberImagingServiceRequestRetired"},"x00402008":{"tag":"x00402008","vr":"PN","vm":"1","name":"OrderEnteredBy"},"x00402009":{"tag":"x00402009","vr":"SH","vm":"1","name":"OrderEntererLocation"},"x00402010":{"tag":"x00402010","vr":"SH","vm":"1","name":"OrderCallbackPhoneNumber"},"x00402016":{"tag":"x00402016","vr":"LO","vm":"1","name":"PlacerOrderNumberImagingServiceRequest"},"x00402017":{"tag":"x00402017","vr":"LO","vm":"1","name":"FillerOrderNumberImagingServiceRequest"},"x00402400":{"tag":"x00402400","vr":"LT","vm":"1","name":"ImagingServiceRequestComments"},"x00403001":{"tag":"x00403001","vr":"LO","vm":"1","name":"ConfidentialityConstraintOnPatientDataDescription"},"x00404001":{"tag":"x00404001","vr":"CS","vm":"1","name":"GeneralPurposeScheduledProcedureStepStatus"},"x00404002":{"tag":"x00404002","vr":"CS","vm":"1","name":"GeneralPurposePerformedProcedureStepStatus"},"x00404003":{"tag":"x00404003","vr":"CS","vm":"1","name":"GeneralPurposeScheduledProcedureStepPriority"},"x00404004":{"tag":"x00404004","vr":"SQ","vm":"1","name":"ScheduledProcessingApplicationsCodeSequence"},"x00404005":{"tag":"x00404005","vr":"DT","vm":"1","name":"ScheduledProcedureStepStartDateTime"},"x00404006":{"tag":"x00404006","vr":"CS","vm":"1","name":"MultipleCopiesFlag"},"x00404007":{"tag":"x00404007","vr":"SQ","vm":"1","name":"PerformedProcessingApplicationsCodeSequence"},"x00404009":{"tag":"x00404009","vr":"SQ","vm":"1","name":"HumanPerformerCodeSequence"},"x00404010":{"tag":"x00404010","vr":"DT","vm":"1","name":"ScheduledProcedureStepModificationDateTime"},"x00404011":{"tag":"x00404011","vr":"DT","vm":"1","name":"ExpectedCompletionDateTime"},"x00404015":{"tag":"x00404015","vr":"SQ","vm":"1","name":"ResultingGeneralPurposePerformedProcedureStepsSequence"},"x00404016":{"tag":"x00404016","vr":"SQ","vm":"1","name":"ReferencedGeneralPurposeScheduledProcedureStepSequence"},"x00404018":{"tag":"x00404018","vr":"SQ","vm":"1","name":"ScheduledWorkitemCodeSequence"},"x00404019":{"tag":"x00404019","vr":"SQ","vm":"1","name":"PerformedWorkitemCodeSequence"},"x00404020":{"tag":"x00404020","vr":"CS","vm":"1","name":"InputAvailabilityFlag"},"x00404021":{"tag":"x00404021","vr":"SQ","vm":"1","name":"InputInformationSequence"},"x00404022":{"tag":"x00404022","vr":"SQ","vm":"1","name":"RelevantInformationSequence"},"x00404023":{"tag":"x00404023","vr":"UI","vm":"1","name":"ReferencedGeneralPurposeScheduledProcedureStepTransactionUID"},"x00404025":{"tag":"x00404025","vr":"SQ","vm":"1","name":"ScheduledStationNameCodeSequence"},"x00404026":{"tag":"x00404026","vr":"SQ","vm":"1","name":"ScheduledStationClassCodeSequence"},"x00404027":{"tag":"x00404027","vr":"SQ","vm":"1","name":"ScheduledStationGeographicLocationCodeSequence"},"x00404028":{"tag":"x00404028","vr":"SQ","vm":"1","name":"PerformedStationNameCodeSequence"},"x00404029":{"tag":"x00404029","vr":"SQ","vm":"1","name":"PerformedStationClassCodeSequence"},"x00404030":{"tag":"x00404030","vr":"SQ","vm":"1","name":"PerformedStationGeographicLocationCodeSequence"},"x00404031":{"tag":"x00404031","vr":"SQ","vm":"1","name":"RequestedSubsequentWorkitemCodeSequence"},"x00404032":{"tag":"x00404032","vr":"SQ","vm":"1","name":"NonDICOMOutputCodeSequence"},"x00404033":{"tag":"x00404033","vr":"SQ","vm":"1","name":"OutputInformationSequence"},"x00404034":{"tag":"x00404034","vr":"SQ","vm":"1","name":"ScheduledHumanPerformersSequence"},"x00404035":{"tag":"x00404035","vr":"SQ","vm":"1","name":"ActualHumanPerformersSequence"},"x00404036":{"tag":"x00404036","vr":"LO","vm":"1","name":"HumanPerformerOrganization"},"x00404037":{"tag":"x00404037","vr":"PN","vm":"1","name":"HumanPerformerName"},"x00404040":{"tag":"x00404040","vr":"CS","vm":"1","name":"RawDataHandling"},"x00404041":{"tag":"x00404041","vr":"CS","vm":"1","name":"InputReadinessState"},"x00404050":{"tag":"x00404050","vr":"DT","vm":"1","name":"PerformedProcedureStepStartDateTime"},"x00404051":{"tag":"x00404051","vr":"DT","vm":"1","name":"PerformedProcedureStepEndDateTime"},"x00404052":{"tag":"x00404052","vr":"DT","vm":"1","name":"ProcedureStepCancellationDateTime"},"x00408302":{"tag":"x00408302","vr":"DS","vm":"1","name":"EntranceDoseInmGy"},"x00409094":{"tag":"x00409094","vr":"SQ","vm":"1","name":"ReferencedImageRealWorldValueMappingSequence"},"x00409096":{"tag":"x00409096","vr":"SQ","vm":"1","name":"RealWorldValueMappingSequence"},"x00409098":{"tag":"x00409098","vr":"SQ","vm":"1","name":"PixelValueMappingCodeSequence"},"x00409210":{"tag":"x00409210","vr":"SH","vm":"1","name":"LUTLabel"},"x00409211":{"tag":"x00409211","vr":"US|SS","vm":"1","name":"RealWorldValueLastValueMapped"},"x00409212":{"tag":"x00409212","vr":"FD","vm":"1-n","name":"RealWorldValueLUTData"},"x00409216":{"tag":"x00409216","vr":"US|SS","vm":"1","name":"RealWorldValueFirstValueMapped"},"x00409224":{"tag":"x00409224","vr":"FD","vm":"1","name":"RealWorldValueIntercept"},"x00409225":{"tag":"x00409225","vr":"FD","vm":"1","name":"RealWorldValueSlope"},"x0040A007":{"tag":"x0040A007","vr":"CS","vm":"1","name":"FindingsFlagTrial"},"x0040A010":{"tag":"x0040A010","vr":"CS","vm":"1","name":"RelationshipType"},"x0040A020":{"tag":"x0040A020","vr":"SQ","vm":"1","name":"FindingsSequenceTrial"},"x0040A021":{"tag":"x0040A021","vr":"UI","vm":"1","name":"FindingsGroupUIDTrial"},"x0040A022":{"tag":"x0040A022","vr":"UI","vm":"1","name":"ReferencedFindingsGroupUIDTrial"},"x0040A023":{"tag":"x0040A023","vr":"DA","vm":"1","name":"FindingsGroupRecordingDateTrial"},"x0040A024":{"tag":"x0040A024","vr":"TM","vm":"1","name":"FindingsGroupRecordingTimeTrial"},"x0040A026":{"tag":"x0040A026","vr":"SQ","vm":"1","name":"FindingsSourceCategoryCodeSequenceTrial"},"x0040A027":{"tag":"x0040A027","vr":"LO","vm":"1","name":"VerifyingOrganization"},"x0040A028":{"tag":"x0040A028","vr":"SQ","vm":"1","name":"DocumentingOrganizationIdentifierCodeSequenceTrial"},"x0040A030":{"tag":"x0040A030","vr":"DT","vm":"1","name":"VerificationDateTime"},"x0040A032":{"tag":"x0040A032","vr":"DT","vm":"1","name":"ObservationDateTime"},"x0040A040":{"tag":"x0040A040","vr":"CS","vm":"1","name":"ValueType"},"x0040A043":{"tag":"x0040A043","vr":"SQ","vm":"1","name":"ConceptNameCodeSequence"},"x0040A047":{"tag":"x0040A047","vr":"LO","vm":"1","name":"MeasurementPrecisionDescriptionTrial"},"x0040A050":{"tag":"x0040A050","vr":"CS","vm":"1","name":"ContinuityOfContent"},"x0040A057":{"tag":"x0040A057","vr":"CS","vm":"1-n","name":"UrgencyOrPriorityAlertsTrial"},"x0040A060":{"tag":"x0040A060","vr":"LO","vm":"1","name":"SequencingIndicatorTrial"},"x0040A066":{"tag":"x0040A066","vr":"SQ","vm":"1","name":"DocumentIdentifierCodeSequenceTrial"},"x0040A067":{"tag":"x0040A067","vr":"PN","vm":"1","name":"DocumentAuthorTrial"},"x0040A068":{"tag":"x0040A068","vr":"SQ","vm":"1","name":"DocumentAuthorIdentifierCodeSequenceTrial"},"x0040A070":{"tag":"x0040A070","vr":"SQ","vm":"1","name":"IdentifierCodeSequenceTrial"},"x0040A073":{"tag":"x0040A073","vr":"SQ","vm":"1","name":"VerifyingObserverSequence"},"x0040A074":{"tag":"x0040A074","vr":"OB","vm":"1","name":"ObjectBinaryIdentifierTrial"},"x0040A075":{"tag":"x0040A075","vr":"PN","vm":"1","name":"VerifyingObserverName"},"x0040A076":{"tag":"x0040A076","vr":"SQ","vm":"1","name":"DocumentingObserverIdentifierCodeSequenceTrial"},"x0040A078":{"tag":"x0040A078","vr":"SQ","vm":"1","name":"AuthorObserverSequence"},"x0040A07A":{"tag":"x0040A07A","vr":"SQ","vm":"1","name":"ParticipantSequence"},"x0040A07C":{"tag":"x0040A07C","vr":"SQ","vm":"1","name":"CustodialOrganizationSequence"},"x0040A080":{"tag":"x0040A080","vr":"CS","vm":"1","name":"ParticipationType"},"x0040A082":{"tag":"x0040A082","vr":"DT","vm":"1","name":"ParticipationDateTime"},"x0040A084":{"tag":"x0040A084","vr":"CS","vm":"1","name":"ObserverType"},"x0040A085":{"tag":"x0040A085","vr":"SQ","vm":"1","name":"ProcedureIdentifierCodeSequenceTrial"},"x0040A088":{"tag":"x0040A088","vr":"SQ","vm":"1","name":"VerifyingObserverIdentificationCodeSequence"},"x0040A089":{"tag":"x0040A089","vr":"OB","vm":"1","name":"ObjectDirectoryBinaryIdentifierTrial"},"x0040A090":{"tag":"x0040A090","vr":"SQ","vm":"1","name":"EquivalentCDADocumentSequence"},"x0040A0B0":{"tag":"x0040A0B0","vr":"US","vm":"2-2n","name":"ReferencedWaveformChannels"},"x0040A110":{"tag":"x0040A110","vr":"DA","vm":"1","name":"DateOfDocumentOrVerbalTransactionTrial"},"x0040A112":{"tag":"x0040A112","vr":"TM","vm":"1","name":"TimeOfDocumentCreationOrVerbalTransactionTrial"},"x0040A120":{"tag":"x0040A120","vr":"DT","vm":"1","name":"DateTime"},"x0040A121":{"tag":"x0040A121","vr":"DA","vm":"1","name":"Date"},"x0040A122":{"tag":"x0040A122","vr":"TM","vm":"1","name":"Time"},"x0040A123":{"tag":"x0040A123","vr":"PN","vm":"1","name":"PersonName"},"x0040A124":{"tag":"x0040A124","vr":"UI","vm":"1","name":"UID"},"x0040A125":{"tag":"x0040A125","vr":"CS","vm":"2","name":"ReportStatusIDTrial"},"x0040A130":{"tag":"x0040A130","vr":"CS","vm":"1","name":"TemporalRangeType"},"x0040A132":{"tag":"x0040A132","vr":"UL","vm":"1-n","name":"ReferencedSamplePositions"},"x0040A136":{"tag":"x0040A136","vr":"US","vm":"1-n","name":"ReferencedFrameNumbers"},"x0040A138":{"tag":"x0040A138","vr":"DS","vm":"1-n","name":"ReferencedTimeOffsets"},"x0040A13A":{"tag":"x0040A13A","vr":"DT","vm":"1-n","name":"ReferencedDateTime"},"x0040A160":{"tag":"x0040A160","vr":"UT","vm":"1","name":"TextValue"},"x0040A167":{"tag":"x0040A167","vr":"SQ","vm":"1","name":"ObservationCategoryCodeSequenceTrial"},"x0040A168":{"tag":"x0040A168","vr":"SQ","vm":"1","name":"ConceptCodeSequence"},"x0040A16A":{"tag":"x0040A16A","vr":"ST","vm":"1","name":"BibliographicCitationTrial"},"x0040A170":{"tag":"x0040A170","vr":"SQ","vm":"1","name":"PurposeOfReferenceCodeSequence"},"x0040A171":{"tag":"x0040A171","vr":"UI","vm":"1","name":"ObservationUIDTrial"},"x0040A172":{"tag":"x0040A172","vr":"UI","vm":"1","name":"ReferencedObservationUIDTrial"},"x0040A173":{"tag":"x0040A173","vr":"CS","vm":"1","name":"ReferencedObservationClassTrial"},"x0040A174":{"tag":"x0040A174","vr":"CS","vm":"1","name":"ReferencedObjectObservationClassTrial"},"x0040A180":{"tag":"x0040A180","vr":"US","vm":"1","name":"AnnotationGroupNumber"},"x0040A192":{"tag":"x0040A192","vr":"DA","vm":"1","name":"ObservationDateTrial"},"x0040A193":{"tag":"x0040A193","vr":"TM","vm":"1","name":"ObservationTimeTrial"},"x0040A194":{"tag":"x0040A194","vr":"CS","vm":"1","name":"MeasurementAutomationTrial"},"x0040A195":{"tag":"x0040A195","vr":"SQ","vm":"1","name":"ModifierCodeSequence"},"x0040A224":{"tag":"x0040A224","vr":"ST","vm":"1","name":"IdentificationDescriptionTrial"},"x0040A290":{"tag":"x0040A290","vr":"CS","vm":"1","name":"CoordinatesSetGeometricTypeTrial"},"x0040A296":{"tag":"x0040A296","vr":"SQ","vm":"1","name":"AlgorithmCodeSequenceTrial"},"x0040A297":{"tag":"x0040A297","vr":"ST","vm":"1","name":"AlgorithmDescriptionTrial"},"x0040A29A":{"tag":"x0040A29A","vr":"SL","vm":"2-2n","name":"PixelCoordinatesSetTrial"},"x0040A300":{"tag":"x0040A300","vr":"SQ","vm":"1","name":"MeasuredValueSequence"},"x0040A301":{"tag":"x0040A301","vr":"SQ","vm":"1","name":"NumericValueQualifierCodeSequence"},"x0040A307":{"tag":"x0040A307","vr":"PN","vm":"1","name":"CurrentObserverTrial"},"x0040A30A":{"tag":"x0040A30A","vr":"DS","vm":"1-n","name":"NumericValue"},"x0040A313":{"tag":"x0040A313","vr":"SQ","vm":"1","name":"ReferencedAccessionSequenceTrial"},"x0040A33A":{"tag":"x0040A33A","vr":"ST","vm":"1","name":"ReportStatusCommentTrial"},"x0040A340":{"tag":"x0040A340","vr":"SQ","vm":"1","name":"ProcedureContextSequenceTrial"},"x0040A352":{"tag":"x0040A352","vr":"PN","vm":"1","name":"VerbalSourceTrial"},"x0040A353":{"tag":"x0040A353","vr":"ST","vm":"1","name":"AddressTrial"},"x0040A354":{"tag":"x0040A354","vr":"LO","vm":"1","name":"TelephoneNumberTrial"},"x0040A358":{"tag":"x0040A358","vr":"SQ","vm":"1","name":"VerbalSourceIdentifierCodeSequenceTrial"},"x0040A360":{"tag":"x0040A360","vr":"SQ","vm":"1","name":"PredecessorDocumentsSequence"},"x0040A370":{"tag":"x0040A370","vr":"SQ","vm":"1","name":"ReferencedRequestSequence"},"x0040A372":{"tag":"x0040A372","vr":"SQ","vm":"1","name":"PerformedProcedureCodeSequence"},"x0040A375":{"tag":"x0040A375","vr":"SQ","vm":"1","name":"CurrentRequestedProcedureEvidenceSequence"},"x0040A380":{"tag":"x0040A380","vr":"SQ","vm":"1","name":"ReportDetailSequenceTrial"},"x0040A385":{"tag":"x0040A385","vr":"SQ","vm":"1","name":"PertinentOtherEvidenceSequence"},"x0040A390":{"tag":"x0040A390","vr":"SQ","vm":"1","name":"HL7StructuredDocumentReferenceSequence"},"x0040A402":{"tag":"x0040A402","vr":"UI","vm":"1","name":"ObservationSubjectUIDTrial"},"x0040A403":{"tag":"x0040A403","vr":"CS","vm":"1","name":"ObservationSubjectClassTrial"},"x0040A404":{"tag":"x0040A404","vr":"SQ","vm":"1","name":"ObservationSubjectTypeCodeSequenceTrial"},"x0040A491":{"tag":"x0040A491","vr":"CS","vm":"1","name":"CompletionFlag"},"x0040A492":{"tag":"x0040A492","vr":"LO","vm":"1","name":"CompletionFlagDescription"},"x0040A493":{"tag":"x0040A493","vr":"CS","vm":"1","name":"VerificationFlag"},"x0040A494":{"tag":"x0040A494","vr":"CS","vm":"1","name":"ArchiveRequested"},"x0040A496":{"tag":"x0040A496","vr":"CS","vm":"1","name":"PreliminaryFlag"},"x0040A504":{"tag":"x0040A504","vr":"SQ","vm":"1","name":"ContentTemplateSequence"},"x0040A525":{"tag":"x0040A525","vr":"SQ","vm":"1","name":"IdenticalDocumentsSequence"},"x0040A600":{"tag":"x0040A600","vr":"CS","vm":"1","name":"ObservationSubjectContextFlagTrial"},"x0040A601":{"tag":"x0040A601","vr":"CS","vm":"1","name":"ObserverContextFlagTrial"},"x0040A603":{"tag":"x0040A603","vr":"CS","vm":"1","name":"ProcedureContextFlagTrial"},"x0040A730":{"tag":"x0040A730","vr":"SQ","vm":"1","name":"ContentSequence"},"x0040A731":{"tag":"x0040A731","vr":"SQ","vm":"1","name":"RelationshipSequenceTrial"},"x0040A732":{"tag":"x0040A732","vr":"SQ","vm":"1","name":"RelationshipTypeCodeSequenceTrial"},"x0040A744":{"tag":"x0040A744","vr":"SQ","vm":"1","name":"LanguageCodeSequenceTrial"},"x0040A992":{"tag":"x0040A992","vr":"ST","vm":"1","name":"UniformResourceLocatorTrial"},"x0040B020":{"tag":"x0040B020","vr":"SQ","vm":"1","name":"WaveformAnnotationSequence"},"x0040DB00":{"tag":"x0040DB00","vr":"CS","vm":"1","name":"TemplateIdentifier"},"x0040DB06":{"tag":"x0040DB06","vr":"DT","vm":"1","name":"TemplateVersion"},"x0040DB07":{"tag":"x0040DB07","vr":"DT","vm":"1","name":"TemplateLocalVersion"},"x0040DB0B":{"tag":"x0040DB0B","vr":"CS","vm":"1","name":"TemplateExtensionFlag"},"x0040DB0C":{"tag":"x0040DB0C","vr":"UI","vm":"1","name":"TemplateExtensionOrganizationUID"},"x0040DB0D":{"tag":"x0040DB0D","vr":"UI","vm":"1","name":"TemplateExtensionCreatorUID"},"x0040DB73":{"tag":"x0040DB73","vr":"UL","vm":"1-n","name":"ReferencedContentItemIdentifier"},"x0040E001":{"tag":"x0040E001","vr":"ST","vm":"1","name":"HL7InstanceIdentifier"},"x0040E004":{"tag":"x0040E004","vr":"DT","vm":"1","name":"HL7DocumentEffectiveTime"},"x0040E006":{"tag":"x0040E006","vr":"SQ","vm":"1","name":"HL7DocumentTypeCodeSequence"},"x0040E008":{"tag":"x0040E008","vr":"SQ","vm":"1","name":"DocumentClassCodeSequence"},"x0040E010":{"tag":"x0040E010","vr":"UT","vm":"1","name":"RetrieveURI"},"x0040E011":{"tag":"x0040E011","vr":"UI","vm":"1","name":"RetrieveLocationUID"},"x0040E020":{"tag":"x0040E020","vr":"CS","vm":"1","name":"TypeOfInstances"},"x0040E021":{"tag":"x0040E021","vr":"SQ","vm":"1","name":"DICOMRetrievalSequence"},"x0040E022":{"tag":"x0040E022","vr":"SQ","vm":"1","name":"DICOMMediaRetrievalSequence"},"x0040E023":{"tag":"x0040E023","vr":"SQ","vm":"1","name":"WADORetrievalSequence"},"x0040E024":{"tag":"x0040E024","vr":"SQ","vm":"1","name":"XDSRetrievalSequence"},"x0040E030":{"tag":"x0040E030","vr":"UI","vm":"1","name":"RepositoryUniqueID"},"x0040E031":{"tag":"x0040E031","vr":"UI","vm":"1","name":"HomeCommunityID"},"x00420010":{"tag":"x00420010","vr":"ST","vm":"1","name":"DocumentTitle"},"x00420011":{"tag":"x00420011","vr":"OB","vm":"1","name":"EncapsulatedDocument"},"x00420012":{"tag":"x00420012","vr":"LO","vm":"1","name":"MIMETypeOfEncapsulatedDocument"},"x00420013":{"tag":"x00420013","vr":"SQ","vm":"1","name":"SourceInstanceSequence"},"x00420014":{"tag":"x00420014","vr":"LO","vm":"1-n","name":"ListOfMIMETypes"},"x00440001":{"tag":"x00440001","vr":"ST","vm":"1","name":"ProductPackageIdentifier"},"x00440002":{"tag":"x00440002","vr":"CS","vm":"1","name":"SubstanceAdministrationApproval"},"x00440003":{"tag":"x00440003","vr":"LT","vm":"1","name":"ApprovalStatusFurtherDescription"},"x00440004":{"tag":"x00440004","vr":"DT","vm":"1","name":"ApprovalStatusDateTime"},"x00440007":{"tag":"x00440007","vr":"SQ","vm":"1","name":"ProductTypeCodeSequence"},"x00440008":{"tag":"x00440008","vr":"LO","vm":"1-n","name":"ProductName"},"x00440009":{"tag":"x00440009","vr":"LT","vm":"1","name":"ProductDescription"},"x0044000A":{"tag":"x0044000A","vr":"LO","vm":"1","name":"ProductLotIdentifier"},"x0044000B":{"tag":"x0044000B","vr":"DT","vm":"1","name":"ProductExpirationDateTime"},"x00440010":{"tag":"x00440010","vr":"DT","vm":"1","name":"SubstanceAdministrationDateTime"},"x00440011":{"tag":"x00440011","vr":"LO","vm":"1","name":"SubstanceAdministrationNotes"},"x00440012":{"tag":"x00440012","vr":"LO","vm":"1","name":"SubstanceAdministrationDeviceID"},"x00440013":{"tag":"x00440013","vr":"SQ","vm":"1","name":"ProductParameterSequence"},"x00440019":{"tag":"x00440019","vr":"SQ","vm":"1","name":"SubstanceAdministrationParameterSequence"},"x00460012":{"tag":"x00460012","vr":"LO","vm":"1","name":"LensDescription"},"x00460014":{"tag":"x00460014","vr":"SQ","vm":"1","name":"RightLensSequence"},"x00460015":{"tag":"x00460015","vr":"SQ","vm":"1","name":"LeftLensSequence"},"x00460016":{"tag":"x00460016","vr":"SQ","vm":"1","name":"UnspecifiedLateralityLensSequence"},"x00460018":{"tag":"x00460018","vr":"SQ","vm":"1","name":"CylinderSequence"},"x00460028":{"tag":"x00460028","vr":"SQ","vm":"1","name":"PrismSequence"},"x00460030":{"tag":"x00460030","vr":"FD","vm":"1","name":"HorizontalPrismPower"},"x00460032":{"tag":"x00460032","vr":"CS","vm":"1","name":"HorizontalPrismBase"},"x00460034":{"tag":"x00460034","vr":"FD","vm":"1","name":"VerticalPrismPower"},"x00460036":{"tag":"x00460036","vr":"CS","vm":"1","name":"VerticalPrismBase"},"x00460038":{"tag":"x00460038","vr":"CS","vm":"1","name":"LensSegmentType"},"x00460040":{"tag":"x00460040","vr":"FD","vm":"1","name":"OpticalTransmittance"},"x00460042":{"tag":"x00460042","vr":"FD","vm":"1","name":"ChannelWidth"},"x00460044":{"tag":"x00460044","vr":"FD","vm":"1","name":"PupilSize"},"x00460046":{"tag":"x00460046","vr":"FD","vm":"1","name":"CornealSize"},"x00460050":{"tag":"x00460050","vr":"SQ","vm":"1","name":"AutorefractionRightEyeSequence"},"x00460052":{"tag":"x00460052","vr":"SQ","vm":"1","name":"AutorefractionLeftEyeSequence"},"x00460060":{"tag":"x00460060","vr":"FD","vm":"1","name":"DistancePupillaryDistance"},"x00460062":{"tag":"x00460062","vr":"FD","vm":"1","name":"NearPupillaryDistance"},"x00460063":{"tag":"x00460063","vr":"FD","vm":"1","name":"IntermediatePupillaryDistance"},"x00460064":{"tag":"x00460064","vr":"FD","vm":"1","name":"OtherPupillaryDistance"},"x00460070":{"tag":"x00460070","vr":"SQ","vm":"1","name":"KeratometryRightEyeSequence"},"x00460071":{"tag":"x00460071","vr":"SQ","vm":"1","name":"KeratometryLeftEyeSequence"},"x00460074":{"tag":"x00460074","vr":"SQ","vm":"1","name":"SteepKeratometricAxisSequence"},"x00460075":{"tag":"x00460075","vr":"FD","vm":"1","name":"RadiusOfCurvature"},"x00460076":{"tag":"x00460076","vr":"FD","vm":"1","name":"KeratometricPower"},"x00460077":{"tag":"x00460077","vr":"FD","vm":"1","name":"KeratometricAxis"},"x00460080":{"tag":"x00460080","vr":"SQ","vm":"1","name":"FlatKeratometricAxisSequence"},"x00460092":{"tag":"x00460092","vr":"CS","vm":"1","name":"BackgroundColor"},"x00460094":{"tag":"x00460094","vr":"CS","vm":"1","name":"Optotype"},"x00460095":{"tag":"x00460095","vr":"CS","vm":"1","name":"OptotypePresentation"},"x00460097":{"tag":"x00460097","vr":"SQ","vm":"1","name":"SubjectiveRefractionRightEyeSequence"},"x00460098":{"tag":"x00460098","vr":"SQ","vm":"1","name":"SubjectiveRefractionLeftEyeSequence"},"x00460100":{"tag":"x00460100","vr":"SQ","vm":"1","name":"AddNearSequence"},"x00460101":{"tag":"x00460101","vr":"SQ","vm":"1","name":"AddIntermediateSequence"},"x00460102":{"tag":"x00460102","vr":"SQ","vm":"1","name":"AddOtherSequence"},"x00460104":{"tag":"x00460104","vr":"FD","vm":"1","name":"AddPower"},"x00460106":{"tag":"x00460106","vr":"FD","vm":"1","name":"ViewingDistance"},"x00460121":{"tag":"x00460121","vr":"SQ","vm":"1","name":"VisualAcuityTypeCodeSequence"},"x00460122":{"tag":"x00460122","vr":"SQ","vm":"1","name":"VisualAcuityRightEyeSequence"},"x00460123":{"tag":"x00460123","vr":"SQ","vm":"1","name":"VisualAcuityLeftEyeSequence"},"x00460124":{"tag":"x00460124","vr":"SQ","vm":"1","name":"VisualAcuityBothEyesOpenSequence"},"x00460125":{"tag":"x00460125","vr":"CS","vm":"1","name":"ViewingDistanceType"},"x00460135":{"tag":"x00460135","vr":"SS","vm":"2","name":"VisualAcuityModifiers"},"x00460137":{"tag":"x00460137","vr":"FD","vm":"1","name":"DecimalVisualAcuity"},"x00460139":{"tag":"x00460139","vr":"LO","vm":"1","name":"OptotypeDetailedDefinition"},"x00460145":{"tag":"x00460145","vr":"SQ","vm":"1","name":"ReferencedRefractiveMeasurementsSequence"},"x00460146":{"tag":"x00460146","vr":"FD","vm":"1","name":"SpherePower"},"x00460147":{"tag":"x00460147","vr":"FD","vm":"1","name":"CylinderPower"},"x00480001":{"tag":"x00480001","vr":"FL","vm":"1","name":"ImagedVolumeWidth"},"x00480002":{"tag":"x00480002","vr":"FL","vm":"1","name":"ImagedVolumeHeight"},"x00480003":{"tag":"x00480003","vr":"FL","vm":"1","name":"ImagedVolumeDepth"},"x00480006":{"tag":"x00480006","vr":"UL","vm":"1","name":"TotalPixelMatrixColumns"},"x00480007":{"tag":"x00480007","vr":"UL","vm":"1","name":"TotalPixelMatrixRows"},"x00480008":{"tag":"x00480008","vr":"SQ","vm":"1","name":"TotalPixelMatrixOriginSequence"},"x00480010":{"tag":"x00480010","vr":"CS","vm":"1","name":"SpecimenLabelInImage"},"x00480011":{"tag":"x00480011","vr":"CS","vm":"1","name":"FocusMethod"},"x00480012":{"tag":"x00480012","vr":"CS","vm":"1","name":"ExtendedDepthOfField"},"x00480013":{"tag":"x00480013","vr":"US","vm":"1","name":"NumberOfFocalPlanes"},"x00480014":{"tag":"x00480014","vr":"FL","vm":"1","name":"DistanceBetweenFocalPlanes"},"x00480015":{"tag":"x00480015","vr":"US","vm":"3","name":"RecommendedAbsentPixelCIELabValue"},"x00480100":{"tag":"x00480100","vr":"SQ","vm":"1","name":"IlluminatorTypeCodeSequence"},"x00480102":{"tag":"x00480102","vr":"DS","vm":"6","name":"ImageOrientationSlide"},"x00480105":{"tag":"x00480105","vr":"SQ","vm":"1","name":"OpticalPathSequence"},"x00480106":{"tag":"x00480106","vr":"SH","vm":"1","name":"OpticalPathIdentifier"},"x00480107":{"tag":"x00480107","vr":"ST","vm":"1","name":"OpticalPathDescription"},"x00480108":{"tag":"x00480108","vr":"SQ","vm":"1","name":"IlluminationColorCodeSequence"},"x00480110":{"tag":"x00480110","vr":"SQ","vm":"1","name":"SpecimenReferenceSequence"},"x00480111":{"tag":"x00480111","vr":"DS","vm":"1","name":"CondenserLensPower"},"x00480112":{"tag":"x00480112","vr":"DS","vm":"1","name":"ObjectiveLensPower"},"x00480113":{"tag":"x00480113","vr":"DS","vm":"1","name":"ObjectiveLensNumericalAperture"},"x00480120":{"tag":"x00480120","vr":"SQ","vm":"1","name":"PaletteColorLookupTableSequence"},"x00480200":{"tag":"x00480200","vr":"SQ","vm":"1","name":"ReferencedImageNavigationSequence"},"x00480201":{"tag":"x00480201","vr":"US","vm":"2","name":"TopLeftHandCornerOfLocalizerArea"},"x00480202":{"tag":"x00480202","vr":"US","vm":"2","name":"BottomRightHandCornerOfLocalizerArea"},"x00480207":{"tag":"x00480207","vr":"SQ","vm":"1","name":"OpticalPathIdentificationSequence"},"x0048021A":{"tag":"x0048021A","vr":"SQ","vm":"1","name":"PlanePositionSlideSequence"},"x0048021E":{"tag":"x0048021E","vr":"SL","vm":"1","name":"RowPositionInTotalImagePixelMatrix"},"x0048021F":{"tag":"x0048021F","vr":"SL","vm":"1","name":"ColumnPositionInTotalImagePixelMatrix"},"x00480301":{"tag":"x00480301","vr":"CS","vm":"1","name":"PixelOriginInterpretation"},"x00500004":{"tag":"x00500004","vr":"CS","vm":"1","name":"CalibrationImage"},"x00500010":{"tag":"x00500010","vr":"SQ","vm":"1","name":"DeviceSequence"},"x00500012":{"tag":"x00500012","vr":"SQ","vm":"1","name":"ContainerComponentTypeCodeSequence"},"x00500013":{"tag":"x00500013","vr":"FD","vm":"1","name":"ContainerComponentThickness"},"x00500014":{"tag":"x00500014","vr":"DS","vm":"1","name":"DeviceLength"},"x00500015":{"tag":"x00500015","vr":"FD","vm":"1","name":"ContainerComponentWidth"},"x00500016":{"tag":"x00500016","vr":"DS","vm":"1","name":"DeviceDiameter"},"x00500017":{"tag":"x00500017","vr":"CS","vm":"1","name":"DeviceDiameterUnits"},"x00500018":{"tag":"x00500018","vr":"DS","vm":"1","name":"DeviceVolume"},"x00500019":{"tag":"x00500019","vr":"DS","vm":"1","name":"InterMarkerDistance"},"x0050001A":{"tag":"x0050001A","vr":"CS","vm":"1","name":"ContainerComponentMaterial"},"x0050001B":{"tag":"x0050001B","vr":"LO","vm":"1","name":"ContainerComponentID"},"x0050001C":{"tag":"x0050001C","vr":"FD","vm":"1","name":"ContainerComponentLength"},"x0050001D":{"tag":"x0050001D","vr":"FD","vm":"1","name":"ContainerComponentDiameter"},"x0050001E":{"tag":"x0050001E","vr":"LO","vm":"1","name":"ContainerComponentDescription"},"x00500020":{"tag":"x00500020","vr":"LO","vm":"1","name":"DeviceDescription"},"x00520001":{"tag":"x00520001","vr":"FL","vm":"1","name":"ContrastBolusIngredientPercentByVolume"},"x00520002":{"tag":"x00520002","vr":"FD","vm":"1","name":"OCTFocalDistance"},"x00520003":{"tag":"x00520003","vr":"FD","vm":"1","name":"BeamSpotSize"},"x00520004":{"tag":"x00520004","vr":"FD","vm":"1","name":"EffectiveRefractiveIndex"},"x00520006":{"tag":"x00520006","vr":"CS","vm":"1","name":"OCTAcquisitionDomain"},"x00520007":{"tag":"x00520007","vr":"FD","vm":"1","name":"OCTOpticalCenterWavelength"},"x00520008":{"tag":"x00520008","vr":"FD","vm":"1","name":"AxialResolution"},"x00520009":{"tag":"x00520009","vr":"FD","vm":"1","name":"RangingDepth"},"x00520011":{"tag":"x00520011","vr":"FD","vm":"1","name":"ALineRate"},"x00520012":{"tag":"x00520012","vr":"US","vm":"1","name":"ALinesPerFrame"},"x00520013":{"tag":"x00520013","vr":"FD","vm":"1","name":"CatheterRotationalRate"},"x00520014":{"tag":"x00520014","vr":"FD","vm":"1","name":"ALinePixelSpacing"},"x00520016":{"tag":"x00520016","vr":"SQ","vm":"1","name":"ModeOfPercutaneousAccessSequence"},"x00520025":{"tag":"x00520025","vr":"SQ","vm":"1","name":"IntravascularOCTFrameTypeSequence"},"x00520026":{"tag":"x00520026","vr":"CS","vm":"1","name":"OCTZOffsetApplied"},"x00520027":{"tag":"x00520027","vr":"SQ","vm":"1","name":"IntravascularFrameContentSequence"},"x00520028":{"tag":"x00520028","vr":"FD","vm":"1","name":"IntravascularLongitudinalDistance"},"x00520029":{"tag":"x00520029","vr":"SQ","vm":"1","name":"IntravascularOCTFrameContentSequence"},"x00520030":{"tag":"x00520030","vr":"SS","vm":"1","name":"OCTZOffsetCorrection"},"x00520031":{"tag":"x00520031","vr":"CS","vm":"1","name":"CatheterDirectionOfRotation"},"x00520033":{"tag":"x00520033","vr":"FD","vm":"1","name":"SeamLineLocation"},"x00520034":{"tag":"x00520034","vr":"FD","vm":"1","name":"FirstALineLocation"},"x00520036":{"tag":"x00520036","vr":"US","vm":"1","name":"SeamLineIndex"},"x00520038":{"tag":"x00520038","vr":"US","vm":"1","name":"NumberOfPaddedAlines"},"x00520039":{"tag":"x00520039","vr":"CS","vm":"1","name":"InterpolationType"},"x0052003A":{"tag":"x0052003A","vr":"CS","vm":"1","name":"RefractiveIndexApplied"},"x00540011":{"tag":"x00540011","vr":"US","vm":"1","name":"NumberOfEnergyWindows"},"x00540012":{"tag":"x00540012","vr":"SQ","vm":"1","name":"EnergyWindowInformationSequence"},"x00540013":{"tag":"x00540013","vr":"SQ","vm":"1","name":"EnergyWindowRangeSequence"},"x00540014":{"tag":"x00540014","vr":"DS","vm":"1","name":"EnergyWindowLowerLimit"},"x00540015":{"tag":"x00540015","vr":"DS","vm":"1","name":"EnergyWindowUpperLimit"},"x00540016":{"tag":"x00540016","vr":"SQ","vm":"1","name":"RadiopharmaceuticalInformationSequence"},"x00540017":{"tag":"x00540017","vr":"IS","vm":"1","name":"ResidualSyringeCounts"},"x00540018":{"tag":"x00540018","vr":"SH","vm":"1","name":"EnergyWindowName"},"x00540020":{"tag":"x00540020","vr":"US","vm":"1-n","name":"DetectorVector"},"x00540021":{"tag":"x00540021","vr":"US","vm":"1","name":"NumberOfDetectors"},"x00540022":{"tag":"x00540022","vr":"SQ","vm":"1","name":"DetectorInformationSequence"},"x00540030":{"tag":"x00540030","vr":"US","vm":"1-n","name":"PhaseVector"},"x00540031":{"tag":"x00540031","vr":"US","vm":"1","name":"NumberOfPhases"},"x00540032":{"tag":"x00540032","vr":"SQ","vm":"1","name":"PhaseInformationSequence"},"x00540033":{"tag":"x00540033","vr":"US","vm":"1","name":"NumberOfFramesInPhase"},"x00540036":{"tag":"x00540036","vr":"IS","vm":"1","name":"PhaseDelay"},"x00540038":{"tag":"x00540038","vr":"IS","vm":"1","name":"PauseBetweenFrames"},"x00540039":{"tag":"x00540039","vr":"CS","vm":"1","name":"PhaseDescription"},"x00540050":{"tag":"x00540050","vr":"US","vm":"1-n","name":"RotationVector"},"x00540051":{"tag":"x00540051","vr":"US","vm":"1","name":"NumberOfRotations"},"x00540052":{"tag":"x00540052","vr":"SQ","vm":"1","name":"RotationInformationSequence"},"x00540053":{"tag":"x00540053","vr":"US","vm":"1","name":"NumberOfFramesInRotation"},"x00540060":{"tag":"x00540060","vr":"US","vm":"1-n","name":"RRIntervalVector"},"x00540061":{"tag":"x00540061","vr":"US","vm":"1","name":"NumberOfRRIntervals"},"x00540062":{"tag":"x00540062","vr":"SQ","vm":"1","name":"GatedInformationSequence"},"x00540063":{"tag":"x00540063","vr":"SQ","vm":"1","name":"DataInformationSequence"},"x00540070":{"tag":"x00540070","vr":"US","vm":"1-n","name":"TimeSlotVector"},"x00540071":{"tag":"x00540071","vr":"US","vm":"1","name":"NumberOfTimeSlots"},"x00540072":{"tag":"x00540072","vr":"SQ","vm":"1","name":"TimeSlotInformationSequence"},"x00540073":{"tag":"x00540073","vr":"DS","vm":"1","name":"TimeSlotTime"},"x00540080":{"tag":"x00540080","vr":"US","vm":"1-n","name":"SliceVector"},"x00540081":{"tag":"x00540081","vr":"US","vm":"1","name":"NumberOfSlices"},"x00540090":{"tag":"x00540090","vr":"US","vm":"1-n","name":"AngularViewVector"},"x00540100":{"tag":"x00540100","vr":"US","vm":"1-n","name":"TimeSliceVector"},"x00540101":{"tag":"x00540101","vr":"US","vm":"1","name":"NumberOfTimeSlices"},"x00540200":{"tag":"x00540200","vr":"DS","vm":"1","name":"StartAngle"},"x00540202":{"tag":"x00540202","vr":"CS","vm":"1","name":"TypeOfDetectorMotion"},"x00540210":{"tag":"x00540210","vr":"IS","vm":"1-n","name":"TriggerVector"},"x00540211":{"tag":"x00540211","vr":"US","vm":"1","name":"NumberOfTriggersInPhase"},"x00540220":{"tag":"x00540220","vr":"SQ","vm":"1","name":"ViewCodeSequence"},"x00540222":{"tag":"x00540222","vr":"SQ","vm":"1","name":"ViewModifierCodeSequence"},"x00540300":{"tag":"x00540300","vr":"SQ","vm":"1","name":"RadionuclideCodeSequence"},"x00540302":{"tag":"x00540302","vr":"SQ","vm":"1","name":"AdministrationRouteCodeSequence"},"x00540304":{"tag":"x00540304","vr":"SQ","vm":"1","name":"RadiopharmaceuticalCodeSequence"},"x00540306":{"tag":"x00540306","vr":"SQ","vm":"1","name":"CalibrationDataSequence"},"x00540308":{"tag":"x00540308","vr":"US","vm":"1","name":"EnergyWindowNumber"},"x00540400":{"tag":"x00540400","vr":"SH","vm":"1","name":"ImageID"},"x00540410":{"tag":"x00540410","vr":"SQ","vm":"1","name":"PatientOrientationCodeSequence"},"x00540412":{"tag":"x00540412","vr":"SQ","vm":"1","name":"PatientOrientationModifierCodeSequence"},"x00540414":{"tag":"x00540414","vr":"SQ","vm":"1","name":"PatientGantryRelationshipCodeSequence"},"x00540500":{"tag":"x00540500","vr":"CS","vm":"1","name":"SliceProgressionDirection"},"x00541000":{"tag":"x00541000","vr":"CS","vm":"2","name":"SeriesType"},"x00541001":{"tag":"x00541001","vr":"CS","vm":"1","name":"Units"},"x00541002":{"tag":"x00541002","vr":"CS","vm":"1","name":"CountsSource"},"x00541004":{"tag":"x00541004","vr":"CS","vm":"1","name":"ReprojectionMethod"},"x00541006":{"tag":"x00541006","vr":"CS","vm":"1","name":"SUVType"},"x00541100":{"tag":"x00541100","vr":"CS","vm":"1","name":"RandomsCorrectionMethod"},"x00541101":{"tag":"x00541101","vr":"LO","vm":"1","name":"AttenuationCorrectionMethod"},"x00541102":{"tag":"x00541102","vr":"CS","vm":"1","name":"DecayCorrection"},"x00541103":{"tag":"x00541103","vr":"LO","vm":"1","name":"ReconstructionMethod"},"x00541104":{"tag":"x00541104","vr":"LO","vm":"1","name":"DetectorLinesOfResponseUsed"},"x00541105":{"tag":"x00541105","vr":"LO","vm":"1","name":"ScatterCorrectionMethod"},"x00541200":{"tag":"x00541200","vr":"DS","vm":"1","name":"AxialAcceptance"},"x00541201":{"tag":"x00541201","vr":"IS","vm":"2","name":"AxialMash"},"x00541202":{"tag":"x00541202","vr":"IS","vm":"1","name":"TransverseMash"},"x00541203":{"tag":"x00541203","vr":"DS","vm":"2","name":"DetectorElementSize"},"x00541210":{"tag":"x00541210","vr":"DS","vm":"1","name":"CoincidenceWindowWidth"},"x00541220":{"tag":"x00541220","vr":"CS","vm":"1-n","name":"SecondaryCountsType"},"x00541300":{"tag":"x00541300","vr":"DS","vm":"1","name":"FrameReferenceTime"},"x00541310":{"tag":"x00541310","vr":"IS","vm":"1","name":"PrimaryPromptsCountsAccumulated"},"x00541311":{"tag":"x00541311","vr":"IS","vm":"1-n","name":"SecondaryCountsAccumulated"},"x00541320":{"tag":"x00541320","vr":"DS","vm":"1","name":"SliceSensitivityFactor"},"x00541321":{"tag":"x00541321","vr":"DS","vm":"1","name":"DecayFactor"},"x00541322":{"tag":"x00541322","vr":"DS","vm":"1","name":"DoseCalibrationFactor"},"x00541323":{"tag":"x00541323","vr":"DS","vm":"1","name":"ScatterFractionFactor"},"x00541324":{"tag":"x00541324","vr":"DS","vm":"1","name":"DeadTimeFactor"},"x00541330":{"tag":"x00541330","vr":"US","vm":"1","name":"ImageIndex"},"x00541400":{"tag":"x00541400","vr":"CS","vm":"1-n","name":"CountsIncluded"},"x00541401":{"tag":"x00541401","vr":"CS","vm":"1","name":"DeadTimeCorrectionFlag"},"x00603000":{"tag":"x00603000","vr":"SQ","vm":"1","name":"HistogramSequence"},"x00603002":{"tag":"x00603002","vr":"US","vm":"1","name":"HistogramNumberOfBins"},"x00603004":{"tag":"x00603004","vr":"US|SS","vm":"1","name":"HistogramFirstBinValue"},"x00603006":{"tag":"x00603006","vr":"US|SS","vm":"1","name":"HistogramLastBinValue"},"x00603008":{"tag":"x00603008","vr":"US","vm":"1","name":"HistogramBinWidth"},"x00603010":{"tag":"x00603010","vr":"LO","vm":"1","name":"HistogramExplanation"},"x00603020":{"tag":"x00603020","vr":"UL","vm":"1-n","name":"HistogramData"},"x00620001":{"tag":"x00620001","vr":"CS","vm":"1","name":"SegmentationType"},"x00620002":{"tag":"x00620002","vr":"SQ","vm":"1","name":"SegmentSequence"},"x00620003":{"tag":"x00620003","vr":"SQ","vm":"1","name":"SegmentedPropertyCategoryCodeSequence"},"x00620004":{"tag":"x00620004","vr":"US","vm":"1","name":"SegmentNumber"},"x00620005":{"tag":"x00620005","vr":"LO","vm":"1","name":"SegmentLabel"},"x00620006":{"tag":"x00620006","vr":"ST","vm":"1","name":"SegmentDescription"},"x00620008":{"tag":"x00620008","vr":"CS","vm":"1","name":"SegmentAlgorithmType"},"x00620009":{"tag":"x00620009","vr":"LO","vm":"1","name":"SegmentAlgorithmName"},"x0062000A":{"tag":"x0062000A","vr":"SQ","vm":"1","name":"SegmentIdentificationSequence"},"x0062000B":{"tag":"x0062000B","vr":"US","vm":"1-n","name":"ReferencedSegmentNumber"},"x0062000C":{"tag":"x0062000C","vr":"US","vm":"1","name":"RecommendedDisplayGrayscaleValue"},"x0062000D":{"tag":"x0062000D","vr":"US","vm":"3","name":"RecommendedDisplayCIELabValue"},"x0062000E":{"tag":"x0062000E","vr":"US","vm":"1","name":"MaximumFractionalValue"},"x0062000F":{"tag":"x0062000F","vr":"SQ","vm":"1","name":"SegmentedPropertyTypeCodeSequence"},"x00620010":{"tag":"x00620010","vr":"CS","vm":"1","name":"SegmentationFractionalType"},"x00640002":{"tag":"x00640002","vr":"SQ","vm":"1","name":"DeformableRegistrationSequence"},"x00640003":{"tag":"x00640003","vr":"UI","vm":"1","name":"SourceFrameOfReferenceUID"},"x00640005":{"tag":"x00640005","vr":"SQ","vm":"1","name":"DeformableRegistrationGridSequence"},"x00640007":{"tag":"x00640007","vr":"UL","vm":"3","name":"GridDimensions"},"x00640008":{"tag":"x00640008","vr":"FD","vm":"3","name":"GridResolution"},"x00640009":{"tag":"x00640009","vr":"OF","vm":"1","name":"VectorGridData"},"x0064000F":{"tag":"x0064000F","vr":"SQ","vm":"1","name":"PreDeformationMatrixRegistrationSequence"},"x00640010":{"tag":"x00640010","vr":"SQ","vm":"1","name":"PostDeformationMatrixRegistrationSequence"},"x00660001":{"tag":"x00660001","vr":"UL","vm":"1","name":"NumberOfSurfaces"},"x00660002":{"tag":"x00660002","vr":"SQ","vm":"1","name":"SurfaceSequence"},"x00660003":{"tag":"x00660003","vr":"UL","vm":"1","name":"SurfaceNumber"},"x00660004":{"tag":"x00660004","vr":"LT","vm":"1","name":"SurfaceComments"},"x00660009":{"tag":"x00660009","vr":"CS","vm":"1","name":"SurfaceProcessing"},"x0066000A":{"tag":"x0066000A","vr":"FL","vm":"1","name":"SurfaceProcessingRatio"},"x0066000B":{"tag":"x0066000B","vr":"LO","vm":"1","name":"SurfaceProcessingDescription"},"x0066000C":{"tag":"x0066000C","vr":"FL","vm":"1","name":"RecommendedPresentationOpacity"},"x0066000D":{"tag":"x0066000D","vr":"CS","vm":"1","name":"RecommendedPresentationType"},"x0066000E":{"tag":"x0066000E","vr":"CS","vm":"1","name":"FiniteVolume"},"x00660010":{"tag":"x00660010","vr":"CS","vm":"1","name":"Manifold"},"x00660011":{"tag":"x00660011","vr":"SQ","vm":"1","name":"SurfacePointsSequence"},"x00660012":{"tag":"x00660012","vr":"SQ","vm":"1","name":"SurfacePointsNormalsSequence"},"x00660013":{"tag":"x00660013","vr":"SQ","vm":"1","name":"SurfaceMeshPrimitivesSequence"},"x00660015":{"tag":"x00660015","vr":"UL","vm":"1","name":"NumberOfSurfacePoints"},"x00660016":{"tag":"x00660016","vr":"OF","vm":"1","name":"PointCoordinatesData"},"x00660017":{"tag":"x00660017","vr":"FL","vm":"3","name":"PointPositionAccuracy"},"x00660018":{"tag":"x00660018","vr":"FL","vm":"1","name":"MeanPointDistance"},"x00660019":{"tag":"x00660019","vr":"FL","vm":"1","name":"MaximumPointDistance"},"x0066001A":{"tag":"x0066001A","vr":"FL","vm":"6","name":"PointsBoundingBoxCoordinates"},"x0066001B":{"tag":"x0066001B","vr":"FL","vm":"3","name":"AxisOfRotation"},"x0066001C":{"tag":"x0066001C","vr":"FL","vm":"3","name":"CenterOfRotation"},"x0066001E":{"tag":"x0066001E","vr":"UL","vm":"1","name":"NumberOfVectors"},"x0066001F":{"tag":"x0066001F","vr":"US","vm":"1","name":"VectorDimensionality"},"x00660020":{"tag":"x00660020","vr":"FL","vm":"1-n","name":"VectorAccuracy"},"x00660021":{"tag":"x00660021","vr":"OF","vm":"1","name":"VectorCoordinateData"},"x00660023":{"tag":"x00660023","vr":"OW","vm":"1","name":"TrianglePointIndexList"},"x00660024":{"tag":"x00660024","vr":"OW","vm":"1","name":"EdgePointIndexList"},"x00660025":{"tag":"x00660025","vr":"OW","vm":"1","name":"VertexPointIndexList"},"x00660026":{"tag":"x00660026","vr":"SQ","vm":"1","name":"TriangleStripSequence"},"x00660027":{"tag":"x00660027","vr":"SQ","vm":"1","name":"TriangleFanSequence"},"x00660028":{"tag":"x00660028","vr":"SQ","vm":"1","name":"LineSequence"},"x00660029":{"tag":"x00660029","vr":"OW","vm":"1","name":"PrimitivePointIndexList"},"x0066002A":{"tag":"x0066002A","vr":"UL","vm":"1","name":"SurfaceCount"},"x0066002B":{"tag":"x0066002B","vr":"SQ","vm":"1","name":"ReferencedSurfaceSequence"},"x0066002C":{"tag":"x0066002C","vr":"UL","vm":"1","name":"ReferencedSurfaceNumber"},"x0066002D":{"tag":"x0066002D","vr":"SQ","vm":"1","name":"SegmentSurfaceGenerationAlgorithmIdentificationSequence"},"x0066002E":{"tag":"x0066002E","vr":"SQ","vm":"1","name":"SegmentSurfaceSourceInstanceSequence"},"x0066002F":{"tag":"x0066002F","vr":"SQ","vm":"1","name":"AlgorithmFamilyCodeSequence"},"x00660030":{"tag":"x00660030","vr":"SQ","vm":"1","name":"AlgorithmNameCodeSequence"},"x00660031":{"tag":"x00660031","vr":"LO","vm":"1","name":"AlgorithmVersion"},"x00660032":{"tag":"x00660032","vr":"LT","vm":"1","name":"AlgorithmParameters"},"x00660034":{"tag":"x00660034","vr":"SQ","vm":"1","name":"FacetSequence"},"x00660035":{"tag":"x00660035","vr":"SQ","vm":"1","name":"SurfaceProcessingAlgorithmIdentificationSequence"},"x00660036":{"tag":"x00660036","vr":"LO","vm":"1","name":"AlgorithmName"},"x00686210":{"tag":"x00686210","vr":"LO","vm":"1","name":"ImplantSize"},"x00686221":{"tag":"x00686221","vr":"LO","vm":"1","name":"ImplantTemplateVersion"},"x00686222":{"tag":"x00686222","vr":"SQ","vm":"1","name":"ReplacedImplantTemplateSequence"},"x00686223":{"tag":"x00686223","vr":"CS","vm":"1","name":"ImplantType"},"x00686224":{"tag":"x00686224","vr":"SQ","vm":"1","name":"DerivationImplantTemplateSequence"},"x00686225":{"tag":"x00686225","vr":"SQ","vm":"1","name":"OriginalImplantTemplateSequence"},"x00686226":{"tag":"x00686226","vr":"DT","vm":"1","name":"EffectiveDateTime"},"x00686230":{"tag":"x00686230","vr":"SQ","vm":"1","name":"ImplantTargetAnatomySequence"},"x00686260":{"tag":"x00686260","vr":"SQ","vm":"1","name":"InformationFromManufacturerSequence"},"x00686265":{"tag":"x00686265","vr":"SQ","vm":"1","name":"NotificationFromManufacturerSequence"},"x00686270":{"tag":"x00686270","vr":"DT","vm":"1","name":"InformationIssueDateTime"},"x00686280":{"tag":"x00686280","vr":"ST","vm":"1","name":"InformationSummary"},"x006862A0":{"tag":"x006862A0","vr":"SQ","vm":"1","name":"ImplantRegulatoryDisapprovalCodeSequence"},"x006862A5":{"tag":"x006862A5","vr":"FD","vm":"1","name":"OverallTemplateSpatialTolerance"},"x006862C0":{"tag":"x006862C0","vr":"SQ","vm":"1","name":"HPGLDocumentSequence"},"x006862D0":{"tag":"x006862D0","vr":"US","vm":"1","name":"HPGLDocumentID"},"x006862D5":{"tag":"x006862D5","vr":"LO","vm":"1","name":"HPGLDocumentLabel"},"x006862E0":{"tag":"x006862E0","vr":"SQ","vm":"1","name":"ViewOrientationCodeSequence"},"x006862F0":{"tag":"x006862F0","vr":"FD","vm":"9","name":"ViewOrientationModifier"},"x006862F2":{"tag":"x006862F2","vr":"FD","vm":"1","name":"HPGLDocumentScaling"},"x00686300":{"tag":"x00686300","vr":"OB","vm":"1","name":"HPGLDocument"},"x00686310":{"tag":"x00686310","vr":"US","vm":"1","name":"HPGLContourPenNumber"},"x00686320":{"tag":"x00686320","vr":"SQ","vm":"1","name":"HPGLPenSequence"},"x00686330":{"tag":"x00686330","vr":"US","vm":"1","name":"HPGLPenNumber"},"x00686340":{"tag":"x00686340","vr":"LO","vm":"1","name":"HPGLPenLabel"},"x00686345":{"tag":"x00686345","vr":"ST","vm":"1","name":"HPGLPenDescription"},"x00686346":{"tag":"x00686346","vr":"FD","vm":"2","name":"RecommendedRotationPoint"},"x00686347":{"tag":"x00686347","vr":"FD","vm":"4","name":"BoundingRectangle"},"x00686350":{"tag":"x00686350","vr":"US","vm":"1-n","name":"ImplantTemplate3DModelSurfaceNumber"},"x00686360":{"tag":"x00686360","vr":"SQ","vm":"1","name":"SurfaceModelDescriptionSequence"},"x00686380":{"tag":"x00686380","vr":"LO","vm":"1","name":"SurfaceModelLabel"},"x00686390":{"tag":"x00686390","vr":"FD","vm":"1","name":"SurfaceModelScalingFactor"},"x006863A0":{"tag":"x006863A0","vr":"SQ","vm":"1","name":"MaterialsCodeSequence"},"x006863A4":{"tag":"x006863A4","vr":"SQ","vm":"1","name":"CoatingMaterialsCodeSequence"},"x006863A8":{"tag":"x006863A8","vr":"SQ","vm":"1","name":"ImplantTypeCodeSequence"},"x006863AC":{"tag":"x006863AC","vr":"SQ","vm":"1","name":"FixationMethodCodeSequence"},"x006863B0":{"tag":"x006863B0","vr":"SQ","vm":"1","name":"MatingFeatureSetsSequence"},"x006863C0":{"tag":"x006863C0","vr":"US","vm":"1","name":"MatingFeatureSetID"},"x006863D0":{"tag":"x006863D0","vr":"LO","vm":"1","name":"MatingFeatureSetLabel"},"x006863E0":{"tag":"x006863E0","vr":"SQ","vm":"1","name":"MatingFeatureSequence"},"x006863F0":{"tag":"x006863F0","vr":"US","vm":"1","name":"MatingFeatureID"},"x00686400":{"tag":"x00686400","vr":"SQ","vm":"1","name":"MatingFeatureDegreeOfFreedomSequence"},"x00686410":{"tag":"x00686410","vr":"US","vm":"1","name":"DegreeOfFreedomID"},"x00686420":{"tag":"x00686420","vr":"CS","vm":"1","name":"DegreeOfFreedomType"},"x00686430":{"tag":"x00686430","vr":"SQ","vm":"1","name":"TwoDMatingFeatureCoordinatesSequence"},"x00686440":{"tag":"x00686440","vr":"US","vm":"1","name":"ReferencedHPGLDocumentID"},"x00686450":{"tag":"x00686450","vr":"FD","vm":"2","name":"TwoDMatingPoint"},"x00686460":{"tag":"x00686460","vr":"FD","vm":"4","name":"TwoDMatingAxes"},"x00686470":{"tag":"x00686470","vr":"SQ","vm":"1","name":"TwoDDegreeOfFreedomSequence"},"x00686490":{"tag":"x00686490","vr":"FD","vm":"3","name":"ThreeDDegreeOfFreedomAxis"},"x006864A0":{"tag":"x006864A0","vr":"FD","vm":"2","name":"RangeOfFreedom"},"x006864C0":{"tag":"x006864C0","vr":"FD","vm":"3","name":"ThreeDMatingPoint"},"x006864D0":{"tag":"x006864D0","vr":"FD","vm":"9","name":"ThreeDMatingAxes"},"x006864F0":{"tag":"x006864F0","vr":"FD","vm":"3","name":"TwoDDegreeOfFreedomAxis"},"x00686500":{"tag":"x00686500","vr":"SQ","vm":"1","name":"PlanningLandmarkPointSequence"},"x00686510":{"tag":"x00686510","vr":"SQ","vm":"1","name":"PlanningLandmarkLineSequence"},"x00686520":{"tag":"x00686520","vr":"SQ","vm":"1","name":"PlanningLandmarkPlaneSequence"},"x00686530":{"tag":"x00686530","vr":"US","vm":"1","name":"PlanningLandmarkID"},"x00686540":{"tag":"x00686540","vr":"LO","vm":"1","name":"PlanningLandmarkDescription"},"x00686545":{"tag":"x00686545","vr":"SQ","vm":"1","name":"PlanningLandmarkIdentificationCodeSequence"},"x00686550":{"tag":"x00686550","vr":"SQ","vm":"1","name":"TwoDPointCoordinatesSequence"},"x00686560":{"tag":"x00686560","vr":"FD","vm":"2","name":"TwoDPointCoordinates"},"x00686590":{"tag":"x00686590","vr":"FD","vm":"3","name":"ThreeDPointCoordinates"},"x006865A0":{"tag":"x006865A0","vr":"SQ","vm":"1","name":"TwoDLineCoordinatesSequence"},"x006865B0":{"tag":"x006865B0","vr":"FD","vm":"4","name":"TwoDLineCoordinates"},"x006865D0":{"tag":"x006865D0","vr":"FD","vm":"6","name":"ThreeDLineCoordinates"},"x006865E0":{"tag":"x006865E0","vr":"SQ","vm":"1","name":"TwoDPlaneCoordinatesSequence"},"x006865F0":{"tag":"x006865F0","vr":"FD","vm":"4","name":"TwoDPlaneIntersection"},"x00686610":{"tag":"x00686610","vr":"FD","vm":"3","name":"ThreeDPlaneOrigin"},"x00686620":{"tag":"x00686620","vr":"FD","vm":"3","name":"ThreeDPlaneNormal"},"x00700001":{"tag":"x00700001","vr":"SQ","vm":"1","name":"GraphicAnnotationSequence"},"x00700002":{"tag":"x00700002","vr":"CS","vm":"1","name":"GraphicLayer"},"x00700003":{"tag":"x00700003","vr":"CS","vm":"1","name":"BoundingBoxAnnotationUnits"},"x00700004":{"tag":"x00700004","vr":"CS","vm":"1","name":"AnchorPointAnnotationUnits"},"x00700005":{"tag":"x00700005","vr":"CS","vm":"1","name":"GraphicAnnotationUnits"},"x00700006":{"tag":"x00700006","vr":"ST","vm":"1","name":"UnformattedTextValue"},"x00700008":{"tag":"x00700008","vr":"SQ","vm":"1","name":"TextObjectSequence"},"x00700009":{"tag":"x00700009","vr":"SQ","vm":"1","name":"GraphicObjectSequence"},"x00700010":{"tag":"x00700010","vr":"FL","vm":"2","name":"BoundingBoxTopLeftHandCorner"},"x00700011":{"tag":"x00700011","vr":"FL","vm":"2","name":"BoundingBoxBottomRightHandCorner"},"x00700012":{"tag":"x00700012","vr":"CS","vm":"1","name":"BoundingBoxTextHorizontalJustification"},"x00700014":{"tag":"x00700014","vr":"FL","vm":"2","name":"AnchorPoint"},"x00700015":{"tag":"x00700015","vr":"CS","vm":"1","name":"AnchorPointVisibility"},"x00700020":{"tag":"x00700020","vr":"US","vm":"1","name":"GraphicDimensions"},"x00700021":{"tag":"x00700021","vr":"US","vm":"1","name":"NumberOfGraphicPoints"},"x00700022":{"tag":"x00700022","vr":"FL","vm":"2-n","name":"GraphicData"},"x00700023":{"tag":"x00700023","vr":"CS","vm":"1","name":"GraphicType"},"x00700024":{"tag":"x00700024","vr":"CS","vm":"1","name":"GraphicFilled"},"x00700040":{"tag":"x00700040","vr":"IS","vm":"1","name":"ImageRotationRetired"},"x00700041":{"tag":"x00700041","vr":"CS","vm":"1","name":"ImageHorizontalFlip"},"x00700042":{"tag":"x00700042","vr":"US","vm":"1","name":"ImageRotation"},"x00700050":{"tag":"x00700050","vr":"US","vm":"2","name":"DisplayedAreaTopLeftHandCornerTrial"},"x00700051":{"tag":"x00700051","vr":"US","vm":"2","name":"DisplayedAreaBottomRightHandCornerTrial"},"x00700052":{"tag":"x00700052","vr":"SL","vm":"2","name":"DisplayedAreaTopLeftHandCorner"},"x00700053":{"tag":"x00700053","vr":"SL","vm":"2","name":"DisplayedAreaBottomRightHandCorner"},"x0070005A":{"tag":"x0070005A","vr":"SQ","vm":"1","name":"DisplayedAreaSelectionSequence"},"x00700060":{"tag":"x00700060","vr":"SQ","vm":"1","name":"GraphicLayerSequence"},"x00700062":{"tag":"x00700062","vr":"IS","vm":"1","name":"GraphicLayerOrder"},"x00700066":{"tag":"x00700066","vr":"US","vm":"1","name":"GraphicLayerRecommendedDisplayGrayscaleValue"},"x00700067":{"tag":"x00700067","vr":"US","vm":"3","name":"GraphicLayerRecommendedDisplayRGBValue"},"x00700068":{"tag":"x00700068","vr":"LO","vm":"1","name":"GraphicLayerDescription"},"x00700080":{"tag":"x00700080","vr":"CS","vm":"1","name":"ContentLabel"},"x00700081":{"tag":"x00700081","vr":"LO","vm":"1","name":"ContentDescription"},"x00700082":{"tag":"x00700082","vr":"DA","vm":"1","name":"PresentationCreationDate"},"x00700083":{"tag":"x00700083","vr":"TM","vm":"1","name":"PresentationCreationTime"},"x00700084":{"tag":"x00700084","vr":"PN","vm":"1","name":"ContentCreatorName"},"x00700086":{"tag":"x00700086","vr":"SQ","vm":"1","name":"ContentCreatorIdentificationCodeSequence"},"x00700087":{"tag":"x00700087","vr":"SQ","vm":"1","name":"AlternateContentDescriptionSequence"},"x00700100":{"tag":"x00700100","vr":"CS","vm":"1","name":"PresentationSizeMode"},"x00700101":{"tag":"x00700101","vr":"DS","vm":"2","name":"PresentationPixelSpacing"},"x00700102":{"tag":"x00700102","vr":"IS","vm":"2","name":"PresentationPixelAspectRatio"},"x00700103":{"tag":"x00700103","vr":"FL","vm":"1","name":"PresentationPixelMagnificationRatio"},"x00700207":{"tag":"x00700207","vr":"LO","vm":"1","name":"GraphicGroupLabel"},"x00700208":{"tag":"x00700208","vr":"ST","vm":"1","name":"GraphicGroupDescription"},"x00700209":{"tag":"x00700209","vr":"SQ","vm":"1","name":"CompoundGraphicSequence"},"x00700226":{"tag":"x00700226","vr":"UL","vm":"1","name":"CompoundGraphicInstanceID"},"x00700227":{"tag":"x00700227","vr":"LO","vm":"1","name":"FontName"},"x00700228":{"tag":"x00700228","vr":"CS","vm":"1","name":"FontNameType"},"x00700229":{"tag":"x00700229","vr":"LO","vm":"1","name":"CSSFontName"},"x00700230":{"tag":"x00700230","vr":"FD","vm":"1","name":"RotationAngle"},"x00700231":{"tag":"x00700231","vr":"SQ","vm":"1","name":"TextStyleSequence"},"x00700232":{"tag":"x00700232","vr":"SQ","vm":"1","name":"LineStyleSequence"},"x00700233":{"tag":"x00700233","vr":"SQ","vm":"1","name":"FillStyleSequence"},"x00700234":{"tag":"x00700234","vr":"SQ","vm":"1","name":"GraphicGroupSequence"},"x00700241":{"tag":"x00700241","vr":"US","vm":"3","name":"TextColorCIELabValue"},"x00700242":{"tag":"x00700242","vr":"CS","vm":"1","name":"HorizontalAlignment"},"x00700243":{"tag":"x00700243","vr":"CS","vm":"1","name":"VerticalAlignment"},"x00700244":{"tag":"x00700244","vr":"CS","vm":"1","name":"ShadowStyle"},"x00700245":{"tag":"x00700245","vr":"FL","vm":"1","name":"ShadowOffsetX"},"x00700246":{"tag":"x00700246","vr":"FL","vm":"1","name":"ShadowOffsetY"},"x00700247":{"tag":"x00700247","vr":"US","vm":"3","name":"ShadowColorCIELabValue"},"x00700248":{"tag":"x00700248","vr":"CS","vm":"1","name":"Underlined"},"x00700249":{"tag":"x00700249","vr":"CS","vm":"1","name":"Bold"},"x00700250":{"tag":"x00700250","vr":"CS","vm":"1","name":"Italic"},"x00700251":{"tag":"x00700251","vr":"US","vm":"3","name":"PatternOnColorCIELabValue"},"x00700252":{"tag":"x00700252","vr":"US","vm":"3","name":"PatternOffColorCIELabValue"},"x00700253":{"tag":"x00700253","vr":"FL","vm":"1","name":"LineThickness"},"x00700254":{"tag":"x00700254","vr":"CS","vm":"1","name":"LineDashingStyle"},"x00700255":{"tag":"x00700255","vr":"UL","vm":"1","name":"LinePattern"},"x00700256":{"tag":"x00700256","vr":"OB","vm":"1","name":"FillPattern"},"x00700257":{"tag":"x00700257","vr":"CS","vm":"1","name":"FillMode"},"x00700258":{"tag":"x00700258","vr":"FL","vm":"1","name":"ShadowOpacity"},"x00700261":{"tag":"x00700261","vr":"FL","vm":"1","name":"GapLength"},"x00700262":{"tag":"x00700262","vr":"FL","vm":"1","name":"DiameterOfVisibility"},"x00700273":{"tag":"x00700273","vr":"FL","vm":"2","name":"RotationPoint"},"x00700274":{"tag":"x00700274","vr":"CS","vm":"1","name":"TickAlignment"},"x00700278":{"tag":"x00700278","vr":"CS","vm":"1","name":"ShowTickLabel"},"x00700279":{"tag":"x00700279","vr":"CS","vm":"1","name":"TickLabelAlignment"},"x00700282":{"tag":"x00700282","vr":"CS","vm":"1","name":"CompoundGraphicUnits"},"x00700284":{"tag":"x00700284","vr":"FL","vm":"1","name":"PatternOnOpacity"},"x00700285":{"tag":"x00700285","vr":"FL","vm":"1","name":"PatternOffOpacity"},"x00700287":{"tag":"x00700287","vr":"SQ","vm":"1","name":"MajorTicksSequence"},"x00700288":{"tag":"x00700288","vr":"FL","vm":"1","name":"TickPosition"},"x00700289":{"tag":"x00700289","vr":"SH","vm":"1","name":"TickLabel"},"x00700294":{"tag":"x00700294","vr":"CS","vm":"1","name":"CompoundGraphicType"},"x00700295":{"tag":"x00700295","vr":"UL","vm":"1","name":"GraphicGroupID"},"x00700306":{"tag":"x00700306","vr":"CS","vm":"1","name":"ShapeType"},"x00700308":{"tag":"x00700308","vr":"SQ","vm":"1","name":"RegistrationSequence"},"x00700309":{"tag":"x00700309","vr":"SQ","vm":"1","name":"MatrixRegistrationSequence"},"x0070030A":{"tag":"x0070030A","vr":"SQ","vm":"1","name":"MatrixSequence"},"x0070030C":{"tag":"x0070030C","vr":"CS","vm":"1","name":"FrameOfReferenceTransformationMatrixType"},"x0070030D":{"tag":"x0070030D","vr":"SQ","vm":"1","name":"RegistrationTypeCodeSequence"},"x0070030F":{"tag":"x0070030F","vr":"ST","vm":"1","name":"FiducialDescription"},"x00700310":{"tag":"x00700310","vr":"SH","vm":"1","name":"FiducialIdentifier"},"x00700311":{"tag":"x00700311","vr":"SQ","vm":"1","name":"FiducialIdentifierCodeSequence"},"x00700312":{"tag":"x00700312","vr":"FD","vm":"1","name":"ContourUncertaintyRadius"},"x00700314":{"tag":"x00700314","vr":"SQ","vm":"1","name":"UsedFiducialsSequence"},"x00700318":{"tag":"x00700318","vr":"SQ","vm":"1","name":"GraphicCoordinatesDataSequence"},"x0070031A":{"tag":"x0070031A","vr":"UI","vm":"1","name":"FiducialUID"},"x0070031C":{"tag":"x0070031C","vr":"SQ","vm":"1","name":"FiducialSetSequence"},"x0070031E":{"tag":"x0070031E","vr":"SQ","vm":"1","name":"FiducialSequence"},"x00700401":{"tag":"x00700401","vr":"US","vm":"3","name":"GraphicLayerRecommendedDisplayCIELabValue"},"x00700402":{"tag":"x00700402","vr":"SQ","vm":"1","name":"BlendingSequence"},"x00700403":{"tag":"x00700403","vr":"FL","vm":"1","name":"RelativeOpacity"},"x00700404":{"tag":"x00700404","vr":"SQ","vm":"1","name":"ReferencedSpatialRegistrationSequence"},"x00700405":{"tag":"x00700405","vr":"CS","vm":"1","name":"BlendingPosition"},"x00720002":{"tag":"x00720002","vr":"SH","vm":"1","name":"HangingProtocolName"},"x00720004":{"tag":"x00720004","vr":"LO","vm":"1","name":"HangingProtocolDescription"},"x00720006":{"tag":"x00720006","vr":"CS","vm":"1","name":"HangingProtocolLevel"},"x00720008":{"tag":"x00720008","vr":"LO","vm":"1","name":"HangingProtocolCreator"},"x0072000A":{"tag":"x0072000A","vr":"DT","vm":"1","name":"HangingProtocolCreationDateTime"},"x0072000C":{"tag":"x0072000C","vr":"SQ","vm":"1","name":"HangingProtocolDefinitionSequence"},"x0072000E":{"tag":"x0072000E","vr":"SQ","vm":"1","name":"HangingProtocolUserIdentificationCodeSequence"},"x00720010":{"tag":"x00720010","vr":"LO","vm":"1","name":"HangingProtocolUserGroupName"},"x00720012":{"tag":"x00720012","vr":"SQ","vm":"1","name":"SourceHangingProtocolSequence"},"x00720014":{"tag":"x00720014","vr":"US","vm":"1","name":"NumberOfPriorsReferenced"},"x00720020":{"tag":"x00720020","vr":"SQ","vm":"1","name":"ImageSetsSequence"},"x00720022":{"tag":"x00720022","vr":"SQ","vm":"1","name":"ImageSetSelectorSequence"},"x00720024":{"tag":"x00720024","vr":"CS","vm":"1","name":"ImageSetSelectorUsageFlag"},"x00720026":{"tag":"x00720026","vr":"AT","vm":"1","name":"SelectorAttribute"},"x00720028":{"tag":"x00720028","vr":"US","vm":"1","name":"SelectorValueNumber"},"x00720030":{"tag":"x00720030","vr":"SQ","vm":"1","name":"TimeBasedImageSetsSequence"},"x00720032":{"tag":"x00720032","vr":"US","vm":"1","name":"ImageSetNumber"},"x00720034":{"tag":"x00720034","vr":"CS","vm":"1","name":"ImageSetSelectorCategory"},"x00720038":{"tag":"x00720038","vr":"US","vm":"2","name":"RelativeTime"},"x0072003A":{"tag":"x0072003A","vr":"CS","vm":"1","name":"RelativeTimeUnits"},"x0072003C":{"tag":"x0072003C","vr":"SS","vm":"2","name":"AbstractPriorValue"},"x0072003E":{"tag":"x0072003E","vr":"SQ","vm":"1","name":"AbstractPriorCodeSequence"},"x00720040":{"tag":"x00720040","vr":"LO","vm":"1","name":"ImageSetLabel"},"x00720050":{"tag":"x00720050","vr":"CS","vm":"1","name":"SelectorAttributeVR"},"x00720052":{"tag":"x00720052","vr":"AT","vm":"1-n","name":"SelectorSequencePointer"},"x00720054":{"tag":"x00720054","vr":"LO","vm":"1-n","name":"SelectorSequencePointerPrivateCreator"},"x00720056":{"tag":"x00720056","vr":"LO","vm":"1","name":"SelectorAttributePrivateCreator"},"x00720060":{"tag":"x00720060","vr":"AT","vm":"1-n","name":"SelectorATValue"},"x00720062":{"tag":"x00720062","vr":"CS","vm":"1-n","name":"SelectorCSValue"},"x00720064":{"tag":"x00720064","vr":"IS","vm":"1-n","name":"SelectorISValue"},"x00720066":{"tag":"x00720066","vr":"LO","vm":"1-n","name":"SelectorLOValue"},"x00720068":{"tag":"x00720068","vr":"LT","vm":"1","name":"SelectorLTValue"},"x0072006A":{"tag":"x0072006A","vr":"PN","vm":"1-n","name":"SelectorPNValue"},"x0072006C":{"tag":"x0072006C","vr":"SH","vm":"1-n","name":"SelectorSHValue"},"x0072006E":{"tag":"x0072006E","vr":"ST","vm":"1","name":"SelectorSTValue"},"x00720070":{"tag":"x00720070","vr":"UT","vm":"1","name":"SelectorUTValue"},"x00720072":{"tag":"x00720072","vr":"DS","vm":"1-n","name":"SelectorDSValue"},"x00720074":{"tag":"x00720074","vr":"FD","vm":"1-n","name":"SelectorFDValue"},"x00720076":{"tag":"x00720076","vr":"FL","vm":"1-n","name":"SelectorFLValue"},"x00720078":{"tag":"x00720078","vr":"UL","vm":"1-n","name":"SelectorULValue"},"x0072007A":{"tag":"x0072007A","vr":"US","vm":"1-n","name":"SelectorUSValue"},"x0072007C":{"tag":"x0072007C","vr":"SL","vm":"1-n","name":"SelectorSLValue"},"x0072007E":{"tag":"x0072007E","vr":"SS","vm":"1-n","name":"SelectorSSValue"},"x00720080":{"tag":"x00720080","vr":"SQ","vm":"1","name":"SelectorCodeSequenceValue"},"x00720100":{"tag":"x00720100","vr":"US","vm":"1","name":"NumberOfScreens"},"x00720102":{"tag":"x00720102","vr":"SQ","vm":"1","name":"NominalScreenDefinitionSequence"},"x00720104":{"tag":"x00720104","vr":"US","vm":"1","name":"NumberOfVerticalPixels"},"x00720106":{"tag":"x00720106","vr":"US","vm":"1","name":"NumberOfHorizontalPixels"},"x00720108":{"tag":"x00720108","vr":"FD","vm":"4","name":"DisplayEnvironmentSpatialPosition"},"x0072010A":{"tag":"x0072010A","vr":"US","vm":"1","name":"ScreenMinimumGrayscaleBitDepth"},"x0072010C":{"tag":"x0072010C","vr":"US","vm":"1","name":"ScreenMinimumColorBitDepth"},"x0072010E":{"tag":"x0072010E","vr":"US","vm":"1","name":"ApplicationMaximumRepaintTime"},"x00720200":{"tag":"x00720200","vr":"SQ","vm":"1","name":"DisplaySetsSequence"},"x00720202":{"tag":"x00720202","vr":"US","vm":"1","name":"DisplaySetNumber"},"x00720203":{"tag":"x00720203","vr":"LO","vm":"1","name":"DisplaySetLabel"},"x00720204":{"tag":"x00720204","vr":"US","vm":"1","name":"DisplaySetPresentationGroup"},"x00720206":{"tag":"x00720206","vr":"LO","vm":"1","name":"DisplaySetPresentationGroupDescription"},"x00720208":{"tag":"x00720208","vr":"CS","vm":"1","name":"PartialDataDisplayHandling"},"x00720210":{"tag":"x00720210","vr":"SQ","vm":"1","name":"SynchronizedScrollingSequence"},"x00720212":{"tag":"x00720212","vr":"US","vm":"2-n","name":"DisplaySetScrollingGroup"},"x00720214":{"tag":"x00720214","vr":"SQ","vm":"1","name":"NavigationIndicatorSequence"},"x00720216":{"tag":"x00720216","vr":"US","vm":"1","name":"NavigationDisplaySet"},"x00720218":{"tag":"x00720218","vr":"US","vm":"1-n","name":"ReferenceDisplaySets"},"x00720300":{"tag":"x00720300","vr":"SQ","vm":"1","name":"ImageBoxesSequence"},"x00720302":{"tag":"x00720302","vr":"US","vm":"1","name":"ImageBoxNumber"},"x00720304":{"tag":"x00720304","vr":"CS","vm":"1","name":"ImageBoxLayoutType"},"x00720306":{"tag":"x00720306","vr":"US","vm":"1","name":"ImageBoxTileHorizontalDimension"},"x00720308":{"tag":"x00720308","vr":"US","vm":"1","name":"ImageBoxTileVerticalDimension"},"x00720310":{"tag":"x00720310","vr":"CS","vm":"1","name":"ImageBoxScrollDirection"},"x00720312":{"tag":"x00720312","vr":"CS","vm":"1","name":"ImageBoxSmallScrollType"},"x00720314":{"tag":"x00720314","vr":"US","vm":"1","name":"ImageBoxSmallScrollAmount"},"x00720316":{"tag":"x00720316","vr":"CS","vm":"1","name":"ImageBoxLargeScrollType"},"x00720318":{"tag":"x00720318","vr":"US","vm":"1","name":"ImageBoxLargeScrollAmount"},"x00720320":{"tag":"x00720320","vr":"US","vm":"1","name":"ImageBoxOverlapPriority"},"x00720330":{"tag":"x00720330","vr":"FD","vm":"1","name":"CineRelativeToRealTime"},"x00720400":{"tag":"x00720400","vr":"SQ","vm":"1","name":"FilterOperationsSequence"},"x00720402":{"tag":"x00720402","vr":"CS","vm":"1","name":"FilterByCategory"},"x00720404":{"tag":"x00720404","vr":"CS","vm":"1","name":"FilterByAttributePresence"},"x00720406":{"tag":"x00720406","vr":"CS","vm":"1","name":"FilterByOperator"},"x00720420":{"tag":"x00720420","vr":"US","vm":"3","name":"StructuredDisplayBackgroundCIELabValue"},"x00720421":{"tag":"x00720421","vr":"US","vm":"3","name":"EmptyImageBoxCIELabValue"},"x00720422":{"tag":"x00720422","vr":"SQ","vm":"1","name":"StructuredDisplayImageBoxSequence"},"x00720424":{"tag":"x00720424","vr":"SQ","vm":"1","name":"StructuredDisplayTextBoxSequence"},"x00720427":{"tag":"x00720427","vr":"SQ","vm":"1","name":"ReferencedFirstFrameSequence"},"x00720430":{"tag":"x00720430","vr":"SQ","vm":"1","name":"ImageBoxSynchronizationSequence"},"x00720432":{"tag":"x00720432","vr":"US","vm":"2-n","name":"SynchronizedImageBoxList"},"x00720434":{"tag":"x00720434","vr":"CS","vm":"1","name":"TypeOfSynchronization"},"x00720500":{"tag":"x00720500","vr":"CS","vm":"1","name":"BlendingOperationType"},"x00720510":{"tag":"x00720510","vr":"CS","vm":"1","name":"ReformattingOperationType"},"x00720512":{"tag":"x00720512","vr":"FD","vm":"1","name":"ReformattingThickness"},"x00720514":{"tag":"x00720514","vr":"FD","vm":"1","name":"ReformattingInterval"},"x00720516":{"tag":"x00720516","vr":"CS","vm":"1","name":"ReformattingOperationInitialViewDirection"},"x00720520":{"tag":"x00720520","vr":"CS","vm":"1-n","name":"ThreeDRenderingType"},"x00720600":{"tag":"x00720600","vr":"SQ","vm":"1","name":"SortingOperationsSequence"},"x00720602":{"tag":"x00720602","vr":"CS","vm":"1","name":"SortByCategory"},"x00720604":{"tag":"x00720604","vr":"CS","vm":"1","name":"SortingDirection"},"x00720700":{"tag":"x00720700","vr":"CS","vm":"2","name":"DisplaySetPatientOrientation"},"x00720702":{"tag":"x00720702","vr":"CS","vm":"1","name":"VOIType"},"x00720704":{"tag":"x00720704","vr":"CS","vm":"1","name":"PseudoColorType"},"x00720705":{"tag":"x00720705","vr":"SQ","vm":"1","name":"PseudoColorPaletteInstanceReferenceSequence"},"x00720706":{"tag":"x00720706","vr":"CS","vm":"1","name":"ShowGrayscaleInverted"},"x00720710":{"tag":"x00720710","vr":"CS","vm":"1","name":"ShowImageTrueSizeFlag"},"x00720712":{"tag":"x00720712","vr":"CS","vm":"1","name":"ShowGraphicAnnotationFlag"},"x00720714":{"tag":"x00720714","vr":"CS","vm":"1","name":"ShowPatientDemographicsFlag"},"x00720716":{"tag":"x00720716","vr":"CS","vm":"1","name":"ShowAcquisitionTechniquesFlag"},"x00720717":{"tag":"x00720717","vr":"CS","vm":"1","name":"DisplaySetHorizontalJustification"},"x00720718":{"tag":"x00720718","vr":"CS","vm":"1","name":"DisplaySetVerticalJustification"},"x00740120":{"tag":"x00740120","vr":"FD","vm":"1","name":"ContinuationStartMeterset"},"x00740121":{"tag":"x00740121","vr":"FD","vm":"1","name":"ContinuationEndMeterset"},"x00741000":{"tag":"x00741000","vr":"CS","vm":"1","name":"ProcedureStepState"},"x00741002":{"tag":"x00741002","vr":"SQ","vm":"1","name":"ProcedureStepProgressInformationSequence"},"x00741004":{"tag":"x00741004","vr":"DS","vm":"1","name":"ProcedureStepProgress"},"x00741006":{"tag":"x00741006","vr":"ST","vm":"1","name":"ProcedureStepProgressDescription"},"x00741008":{"tag":"x00741008","vr":"SQ","vm":"1","name":"ProcedureStepCommunicationsURISequence"},"x0074100a":{"tag":"x0074100a","vr":"ST","vm":"1","name":"ContactURI"},"x0074100c":{"tag":"x0074100c","vr":"LO","vm":"1","name":"ContactDisplayName"},"x0074100e":{"tag":"x0074100e","vr":"SQ","vm":"1","name":"ProcedureStepDiscontinuationReasonCodeSequence"},"x00741020":{"tag":"x00741020","vr":"SQ","vm":"1","name":"BeamTaskSequence"},"x00741022":{"tag":"x00741022","vr":"CS","vm":"1","name":"BeamTaskType"},"x00741024":{"tag":"x00741024","vr":"IS","vm":"1","name":"BeamOrderIndexTrial"},"x00741026":{"tag":"x00741026","vr":"FD","vm":"1","name":"TableTopVerticalAdjustedPosition"},"x00741027":{"tag":"x00741027","vr":"FD","vm":"1","name":"TableTopLongitudinalAdjustedPosition"},"x00741028":{"tag":"x00741028","vr":"FD","vm":"1","name":"TableTopLateralAdjustedPosition"},"x0074102A":{"tag":"x0074102A","vr":"FD","vm":"1","name":"PatientSupportAdjustedAngle"},"x0074102B":{"tag":"x0074102B","vr":"FD","vm":"1","name":"TableTopEccentricAdjustedAngle"},"x0074102C":{"tag":"x0074102C","vr":"FD","vm":"1","name":"TableTopPitchAdjustedAngle"},"x0074102D":{"tag":"x0074102D","vr":"FD","vm":"1","name":"TableTopRollAdjustedAngle"},"x00741030":{"tag":"x00741030","vr":"SQ","vm":"1","name":"DeliveryVerificationImageSequence"},"x00741032":{"tag":"x00741032","vr":"CS","vm":"1","name":"VerificationImageTiming"},"x00741034":{"tag":"x00741034","vr":"CS","vm":"1","name":"DoubleExposureFlag"},"x00741036":{"tag":"x00741036","vr":"CS","vm":"1","name":"DoubleExposureOrdering"},"x00741038":{"tag":"x00741038","vr":"DS","vm":"1","name":"DoubleExposureMetersetTrial"},"x0074103A":{"tag":"x0074103A","vr":"DS","vm":"4","name":"DoubleExposureFieldDeltaTrial"},"x00741040":{"tag":"x00741040","vr":"SQ","vm":"1","name":"RelatedReferenceRTImageSequence"},"x00741042":{"tag":"x00741042","vr":"SQ","vm":"1","name":"GeneralMachineVerificationSequence"},"x00741044":{"tag":"x00741044","vr":"SQ","vm":"1","name":"ConventionalMachineVerificationSequence"},"x00741046":{"tag":"x00741046","vr":"SQ","vm":"1","name":"IonMachineVerificationSequence"},"x00741048":{"tag":"x00741048","vr":"SQ","vm":"1","name":"FailedAttributesSequence"},"x0074104A":{"tag":"x0074104A","vr":"SQ","vm":"1","name":"OverriddenAttributesSequence"},"x0074104C":{"tag":"x0074104C","vr":"SQ","vm":"1","name":"ConventionalControlPointVerificationSequence"},"x0074104E":{"tag":"x0074104E","vr":"SQ","vm":"1","name":"IonControlPointVerificationSequence"},"x00741050":{"tag":"x00741050","vr":"SQ","vm":"1","name":"AttributeOccurrenceSequence"},"x00741052":{"tag":"x00741052","vr":"AT","vm":"1","name":"AttributeOccurrencePointer"},"x00741054":{"tag":"x00741054","vr":"UL","vm":"1","name":"AttributeItemSelector"},"x00741056":{"tag":"x00741056","vr":"LO","vm":"1","name":"AttributeOccurrencePrivateCreator"},"x00741057":{"tag":"x00741057","vr":"IS","vm":"1-n","name":"SelectorSequencePointerItems"},"x00741200":{"tag":"x00741200","vr":"CS","vm":"1","name":"ScheduledProcedureStepPriority"},"x00741202":{"tag":"x00741202","vr":"LO","vm":"1","name":"WorklistLabel"},"x00741204":{"tag":"x00741204","vr":"LO","vm":"1","name":"ProcedureStepLabel"},"x00741210":{"tag":"x00741210","vr":"SQ","vm":"1","name":"ScheduledProcessingParametersSequence"},"x00741212":{"tag":"x00741212","vr":"SQ","vm":"1","name":"PerformedProcessingParametersSequence"},"x00741216":{"tag":"x00741216","vr":"SQ","vm":"1","name":"UnifiedProcedureStepPerformedProcedureSequence"},"x00741220":{"tag":"x00741220","vr":"SQ","vm":"1","name":"RelatedProcedureStepSequence"},"x00741222":{"tag":"x00741222","vr":"LO","vm":"1","name":"ProcedureStepRelationshipType"},"x00741224":{"tag":"x00741224","vr":"SQ","vm":"1","name":"ReplacedProcedureStepSequence"},"x00741230":{"tag":"x00741230","vr":"LO","vm":"1","name":"DeletionLock"},"x00741234":{"tag":"x00741234","vr":"AE","vm":"1","name":"ReceivingAE"},"x00741236":{"tag":"x00741236","vr":"AE","vm":"1","name":"RequestingAE"},"x00741238":{"tag":"x00741238","vr":"LT","vm":"1","name":"ReasonForCancellation"},"x00741242":{"tag":"x00741242","vr":"CS","vm":"1","name":"SCPStatus"},"x00741244":{"tag":"x00741244","vr":"CS","vm":"1","name":"SubscriptionListStatus"},"x00741246":{"tag":"x00741246","vr":"CS","vm":"1","name":"UnifiedProcedureStepListStatus"},"x00741324":{"tag":"x00741324","vr":"UL","vm":"1","name":"BeamOrderIndex"},"x00741338":{"tag":"x00741338","vr":"FD","vm":"1","name":"DoubleExposureMeterset"},"x0074133A":{"tag":"x0074133A","vr":"FD","vm":"4","name":"DoubleExposureFieldDelta"},"x00760001":{"tag":"x00760001","vr":"LO","vm":"1","name":"ImplantAssemblyTemplateName"},"x00760003":{"tag":"x00760003","vr":"LO","vm":"1","name":"ImplantAssemblyTemplateIssuer"},"x00760006":{"tag":"x00760006","vr":"LO","vm":"1","name":"ImplantAssemblyTemplateVersion"},"x00760008":{"tag":"x00760008","vr":"SQ","vm":"1","name":"ReplacedImplantAssemblyTemplateSequence"},"x0076000A":{"tag":"x0076000A","vr":"CS","vm":"1","name":"ImplantAssemblyTemplateType"},"x0076000C":{"tag":"x0076000C","vr":"SQ","vm":"1","name":"OriginalImplantAssemblyTemplateSequence"},"x0076000E":{"tag":"x0076000E","vr":"SQ","vm":"1","name":"DerivationImplantAssemblyTemplateSequence"},"x00760010":{"tag":"x00760010","vr":"SQ","vm":"1","name":"ImplantAssemblyTemplateTargetAnatomySequence"},"x00760020":{"tag":"x00760020","vr":"SQ","vm":"1","name":"ProcedureTypeCodeSequence"},"x00760030":{"tag":"x00760030","vr":"LO","vm":"1","name":"SurgicalTechnique"},"x00760032":{"tag":"x00760032","vr":"SQ","vm":"1","name":"ComponentTypesSequence"},"x00760034":{"tag":"x00760034","vr":"CS","vm":"1","name":"ComponentTypeCodeSequence"},"x00760036":{"tag":"x00760036","vr":"CS","vm":"1","name":"ExclusiveComponentType"},"x00760038":{"tag":"x00760038","vr":"CS","vm":"1","name":"MandatoryComponentType"},"x00760040":{"tag":"x00760040","vr":"SQ","vm":"1","name":"ComponentSequence"},"x00760055":{"tag":"x00760055","vr":"US","vm":"1","name":"ComponentID"},"x00760060":{"tag":"x00760060","vr":"SQ","vm":"1","name":"ComponentAssemblySequence"},"x00760070":{"tag":"x00760070","vr":"US","vm":"1","name":"Component1ReferencedID"},"x00760080":{"tag":"x00760080","vr":"US","vm":"1","name":"Component1ReferencedMatingFeatureSetID"},"x00760090":{"tag":"x00760090","vr":"US","vm":"1","name":"Component1ReferencedMatingFeatureID"},"x007600A0":{"tag":"x007600A0","vr":"US","vm":"1","name":"Component2ReferencedID"},"x007600B0":{"tag":"x007600B0","vr":"US","vm":"1","name":"Component2ReferencedMatingFeatureSetID"},"x007600C0":{"tag":"x007600C0","vr":"US","vm":"1","name":"Component2ReferencedMatingFeatureID"},"x00780001":{"tag":"x00780001","vr":"LO","vm":"1","name":"ImplantTemplateGroupName"},"x00780010":{"tag":"x00780010","vr":"ST","vm":"1","name":"ImplantTemplateGroupDescription"},"x00780020":{"tag":"x00780020","vr":"LO","vm":"1","name":"ImplantTemplateGroupIssuer"},"x00780024":{"tag":"x00780024","vr":"LO","vm":"1","name":"ImplantTemplateGroupVersion"},"x00780026":{"tag":"x00780026","vr":"SQ","vm":"1","name":"ReplacedImplantTemplateGroupSequence"},"x00780028":{"tag":"x00780028","vr":"SQ","vm":"1","name":"ImplantTemplateGroupTargetAnatomySequence"},"x0078002A":{"tag":"x0078002A","vr":"SQ","vm":"1","name":"ImplantTemplateGroupMembersSequence"},"x0078002E":{"tag":"x0078002E","vr":"US","vm":"1","name":"ImplantTemplateGroupMemberID"},"x00780050":{"tag":"x00780050","vr":"FD","vm":"3","name":"ThreeDImplantTemplateGroupMemberMatchingPoint"},"x00780060":{"tag":"x00780060","vr":"FD","vm":"9","name":"ThreeDImplantTemplateGroupMemberMatchingAxes"},"x00780070":{"tag":"x00780070","vr":"SQ","vm":"1","name":"ImplantTemplateGroupMemberMatching2DCoordinatesSequence"},"x00780090":{"tag":"x00780090","vr":"FD","vm":"2","name":"TwoDImplantTemplateGroupMemberMatchingPoint"},"x007800A0":{"tag":"x007800A0","vr":"FD","vm":"4","name":"TwoDImplantTemplateGroupMemberMatchingAxes"},"x007800B0":{"tag":"x007800B0","vr":"SQ","vm":"1","name":"ImplantTemplateGroupVariationDimensionSequence"},"x007800B2":{"tag":"x007800B2","vr":"LO","vm":"1","name":"ImplantTemplateGroupVariationDimensionName"},"x007800B4":{"tag":"x007800B4","vr":"SQ","vm":"1","name":"ImplantTemplateGroupVariationDimensionRankSequence"},"x007800B6":{"tag":"x007800B6","vr":"US","vm":"1","name":"ReferencedImplantTemplateGroupMemberID"},"x007800B8":{"tag":"x007800B8","vr":"US","vm":"1","name":"ImplantTemplateGroupVariationDimensionRank"},"x00880130":{"tag":"x00880130","vr":"SH","vm":"1","name":"StorageMediaFileSetID"},"x00880140":{"tag":"x00880140","vr":"UI","vm":"1","name":"StorageMediaFileSetUID"},"x00880200":{"tag":"x00880200","vr":"SQ","vm":"1","name":"IconImageSequence"},"x00880904":{"tag":"x00880904","vr":"LO","vm":"1","name":"TopicTitle"},"x00880906":{"tag":"x00880906","vr":"ST","vm":"1","name":"TopicSubject"},"x00880910":{"tag":"x00880910","vr":"LO","vm":"1","name":"TopicAuthor"},"x00880912":{"tag":"x00880912","vr":"LO","vm":"1-32","name":"TopicKeywords"},"x01000410":{"tag":"x01000410","vr":"CS","vm":"1","name":"SOPInstanceStatus"},"x01000420":{"tag":"x01000420","vr":"DT","vm":"1","name":"SOPAuthorizationDateTime"},"x01000424":{"tag":"x01000424","vr":"LT","vm":"1","name":"SOPAuthorizationComment"},"x01000426":{"tag":"x01000426","vr":"LO","vm":"1","name":"AuthorizationEquipmentCertificationNumber"},"x04000005":{"tag":"x04000005","vr":"US","vm":"1","name":"MACIDNumber"},"x04000010":{"tag":"x04000010","vr":"UI","vm":"1","name":"MACCalculationTransferSyntaxUID"},"x04000015":{"tag":"x04000015","vr":"CS","vm":"1","name":"MACAlgorithm"},"x04000020":{"tag":"x04000020","vr":"AT","vm":"1-n","name":"DataElementsSigned"},"x04000100":{"tag":"x04000100","vr":"UI","vm":"1","name":"DigitalSignatureUID"},"x04000105":{"tag":"x04000105","vr":"DT","vm":"1","name":"DigitalSignatureDateTime"},"x04000110":{"tag":"x04000110","vr":"CS","vm":"1","name":"CertificateType"},"x04000115":{"tag":"x04000115","vr":"OB","vm":"1","name":"CertificateOfSigner"},"x04000120":{"tag":"x04000120","vr":"OB","vm":"1","name":"Signature"},"x04000305":{"tag":"x04000305","vr":"CS","vm":"1","name":"CertifiedTimestampType"},"x04000310":{"tag":"x04000310","vr":"OB","vm":"1","name":"CertifiedTimestamp"},"x04000401":{"tag":"x04000401","vr":"SQ","vm":"1","name":"DigitalSignaturePurposeCodeSequence"},"x04000402":{"tag":"x04000402","vr":"SQ","vm":"1","name":"ReferencedDigitalSignatureSequence"},"x04000403":{"tag":"x04000403","vr":"SQ","vm":"1","name":"ReferencedSOPInstanceMACSequence"},"x04000404":{"tag":"x04000404","vr":"OB","vm":"1","name":"MAC"},"x04000500":{"tag":"x04000500","vr":"SQ","vm":"1","name":"EncryptedAttributesSequence"},"x04000510":{"tag":"x04000510","vr":"UI","vm":"1","name":"EncryptedContentTransferSyntaxUID"},"x04000520":{"tag":"x04000520","vr":"OB","vm":"1","name":"EncryptedContent"},"x04000550":{"tag":"x04000550","vr":"SQ","vm":"1","name":"ModifiedAttributesSequence"},"x04000561":{"tag":"x04000561","vr":"SQ","vm":"1","name":"OriginalAttributesSequence"},"x04000562":{"tag":"x04000562","vr":"DT","vm":"1","name":"AttributeModificationDateTime"},"x04000563":{"tag":"x04000563","vr":"LO","vm":"1","name":"ModifyingSystem"},"x04000564":{"tag":"x04000564","vr":"LO","vm":"1","name":"SourceOfPreviousValues"},"x04000565":{"tag":"x04000565","vr":"CS","vm":"1","name":"ReasonForTheAttributeModification"},"x1000xxx0":{"tag":"x1000xxx0","vr":"US","vm":"3","name":"EscapeTriplet"},"x1000xxx1":{"tag":"x1000xxx1","vr":"US","vm":"3","name":"RunLengthTriplet"},"x1000xxx2":{"tag":"x1000xxx2","vr":"US","vm":"1","name":"HuffmanTableSize"},"x1000xxx3":{"tag":"x1000xxx3","vr":"US","vm":"3","name":"HuffmanTableTriplet"},"x1000xxx4":{"tag":"x1000xxx4","vr":"US","vm":"1","name":"ShiftTableSize"},"x1000xxx5":{"tag":"x1000xxx5","vr":"US","vm":"3","name":"ShiftTableTriplet"},"x1010xxxx":{"tag":"x1010xxxx","vr":"US","vm":"1-n","name":"ZonalMap"},"x20000010":{"tag":"x20000010","vr":"IS","vm":"1","name":"NumberOfCopies"},"x2000001E":{"tag":"x2000001E","vr":"SQ","vm":"1","name":"PrinterConfigurationSequence"},"x20000020":{"tag":"x20000020","vr":"CS","vm":"1","name":"PrintPriority"},"x20000030":{"tag":"x20000030","vr":"CS","vm":"1","name":"MediumType"},"x20000040":{"tag":"x20000040","vr":"CS","vm":"1","name":"FilmDestination"},"x20000050":{"tag":"x20000050","vr":"LO","vm":"1","name":"FilmSessionLabel"},"x20000060":{"tag":"x20000060","vr":"IS","vm":"1","name":"MemoryAllocation"},"x20000061":{"tag":"x20000061","vr":"IS","vm":"1","name":"MaximumMemoryAllocation"},"x20000062":{"tag":"x20000062","vr":"CS","vm":"1","name":"ColorImagePrintingFlag"},"x20000063":{"tag":"x20000063","vr":"CS","vm":"1","name":"CollationFlag"},"x20000065":{"tag":"x20000065","vr":"CS","vm":"1","name":"AnnotationFlag"},"x20000067":{"tag":"x20000067","vr":"CS","vm":"1","name":"ImageOverlayFlag"},"x20000069":{"tag":"x20000069","vr":"CS","vm":"1","name":"PresentationLUTFlag"},"x2000006A":{"tag":"x2000006A","vr":"CS","vm":"1","name":"ImageBoxPresentationLUTFlag"},"x200000A0":{"tag":"x200000A0","vr":"US","vm":"1","name":"MemoryBitDepth"},"x200000A1":{"tag":"x200000A1","vr":"US","vm":"1","name":"PrintingBitDepth"},"x200000A2":{"tag":"x200000A2","vr":"SQ","vm":"1","name":"MediaInstalledSequence"},"x200000A4":{"tag":"x200000A4","vr":"SQ","vm":"1","name":"OtherMediaAvailableSequence"},"x200000A8":{"tag":"x200000A8","vr":"SQ","vm":"1","name":"SupportedImageDisplayFormatsSequence"},"x20000500":{"tag":"x20000500","vr":"SQ","vm":"1","name":"ReferencedFilmBoxSequence"},"x20000510":{"tag":"x20000510","vr":"SQ","vm":"1","name":"ReferencedStoredPrintSequence"},"x20100010":{"tag":"x20100010","vr":"ST","vm":"1","name":"ImageDisplayFormat"},"x20100030":{"tag":"x20100030","vr":"CS","vm":"1","name":"AnnotationDisplayFormatID"},"x20100040":{"tag":"x20100040","vr":"CS","vm":"1","name":"FilmOrientation"},"x20100050":{"tag":"x20100050","vr":"CS","vm":"1","name":"FilmSizeID"},"x20100052":{"tag":"x20100052","vr":"CS","vm":"1","name":"PrinterResolutionID"},"x20100054":{"tag":"x20100054","vr":"CS","vm":"1","name":"DefaultPrinterResolutionID"},"x20100060":{"tag":"x20100060","vr":"CS","vm":"1","name":"MagnificationType"},"x20100080":{"tag":"x20100080","vr":"CS","vm":"1","name":"SmoothingType"},"x201000A6":{"tag":"x201000A6","vr":"CS","vm":"1","name":"DefaultMagnificationType"},"x201000A7":{"tag":"x201000A7","vr":"CS","vm":"1-n","name":"OtherMagnificationTypesAvailable"},"x201000A8":{"tag":"x201000A8","vr":"CS","vm":"1","name":"DefaultSmoothingType"},"x201000A9":{"tag":"x201000A9","vr":"CS","vm":"1-n","name":"OtherSmoothingTypesAvailable"},"x20100100":{"tag":"x20100100","vr":"CS","vm":"1","name":"BorderDensity"},"x20100110":{"tag":"x20100110","vr":"CS","vm":"1","name":"EmptyImageDensity"},"x20100120":{"tag":"x20100120","vr":"US","vm":"1","name":"MinDensity"},"x20100130":{"tag":"x20100130","vr":"US","vm":"1","name":"MaxDensity"},"x20100140":{"tag":"x20100140","vr":"CS","vm":"1","name":"Trim"},"x20100150":{"tag":"x20100150","vr":"ST","vm":"1","name":"ConfigurationInformation"},"x20100152":{"tag":"x20100152","vr":"LT","vm":"1","name":"ConfigurationInformationDescription"},"x20100154":{"tag":"x20100154","vr":"IS","vm":"1","name":"MaximumCollatedFilms"},"x2010015E":{"tag":"x2010015E","vr":"US","vm":"1","name":"Illumination"},"x20100160":{"tag":"x20100160","vr":"US","vm":"1","name":"ReflectedAmbientLight"},"x20100376":{"tag":"x20100376","vr":"DS","vm":"2","name":"PrinterPixelSpacing"},"x20100500":{"tag":"x20100500","vr":"SQ","vm":"1","name":"ReferencedFilmSessionSequence"},"x20100510":{"tag":"x20100510","vr":"SQ","vm":"1","name":"ReferencedImageBoxSequence"},"x20100520":{"tag":"x20100520","vr":"SQ","vm":"1","name":"ReferencedBasicAnnotationBoxSequence"},"x20200010":{"tag":"x20200010","vr":"US","vm":"1","name":"ImageBoxPosition"},"x20200020":{"tag":"x20200020","vr":"CS","vm":"1","name":"Polarity"},"x20200030":{"tag":"x20200030","vr":"DS","vm":"1","name":"RequestedImageSize"},"x20200040":{"tag":"x20200040","vr":"CS","vm":"1","name":"RequestedDecimateCropBehavior"},"x20200050":{"tag":"x20200050","vr":"CS","vm":"1","name":"RequestedResolutionID"},"x202000A0":{"tag":"x202000A0","vr":"CS","vm":"1","name":"RequestedImageSizeFlag"},"x202000A2":{"tag":"x202000A2","vr":"CS","vm":"1","name":"DecimateCropResult"},"x20200110":{"tag":"x20200110","vr":"SQ","vm":"1","name":"BasicGrayscaleImageSequence"},"x20200111":{"tag":"x20200111","vr":"SQ","vm":"1","name":"BasicColorImageSequence"},"x20200130":{"tag":"x20200130","vr":"SQ","vm":"1","name":"ReferencedImageOverlayBoxSequence"},"x20200140":{"tag":"x20200140","vr":"SQ","vm":"1","name":"ReferencedVOILUTBoxSequence"},"x20300010":{"tag":"x20300010","vr":"US","vm":"1","name":"AnnotationPosition"},"x20300020":{"tag":"x20300020","vr":"LO","vm":"1","name":"TextString"},"x20400010":{"tag":"x20400010","vr":"SQ","vm":"1","name":"ReferencedOverlayPlaneSequence"},"x20400011":{"tag":"x20400011","vr":"US","vm":"1-99","name":"ReferencedOverlayPlaneGroups"},"x20400020":{"tag":"x20400020","vr":"SQ","vm":"1","name":"OverlayPixelDataSequence"},"x20400060":{"tag":"x20400060","vr":"CS","vm":"1","name":"OverlayMagnificationType"},"x20400070":{"tag":"x20400070","vr":"CS","vm":"1","name":"OverlaySmoothingType"},"x20400072":{"tag":"x20400072","vr":"CS","vm":"1","name":"OverlayOrImageMagnification"},"x20400074":{"tag":"x20400074","vr":"US","vm":"1","name":"MagnifyToNumberOfColumns"},"x20400080":{"tag":"x20400080","vr":"CS","vm":"1","name":"OverlayForegroundDensity"},"x20400082":{"tag":"x20400082","vr":"CS","vm":"1","name":"OverlayBackgroundDensity"},"x20400090":{"tag":"x20400090","vr":"CS","vm":"1","name":"OverlayMode"},"x20400100":{"tag":"x20400100","vr":"CS","vm":"1","name":"ThresholdDensity"},"x20400500":{"tag":"x20400500","vr":"SQ","vm":"1","name":"ReferencedImageBoxSequenceRetired"},"x20500010":{"tag":"x20500010","vr":"SQ","vm":"1","name":"PresentationLUTSequence"},"x20500020":{"tag":"x20500020","vr":"CS","vm":"1","name":"PresentationLUTShape"},"x20500500":{"tag":"x20500500","vr":"SQ","vm":"1","name":"ReferencedPresentationLUTSequence"},"x21000010":{"tag":"x21000010","vr":"SH","vm":"1","name":"PrintJobID"},"x21000020":{"tag":"x21000020","vr":"CS","vm":"1","name":"ExecutionStatus"},"x21000030":{"tag":"x21000030","vr":"CS","vm":"1","name":"ExecutionStatusInfo"},"x21000040":{"tag":"x21000040","vr":"DA","vm":"1","name":"CreationDate"},"x21000050":{"tag":"x21000050","vr":"TM","vm":"1","name":"CreationTime"},"x21000070":{"tag":"x21000070","vr":"AE","vm":"1","name":"Originator"},"x21000140":{"tag":"x21000140","vr":"AE","vm":"1","name":"DestinationAE"},"x21000160":{"tag":"x21000160","vr":"SH","vm":"1","name":"OwnerID"},"x21000170":{"tag":"x21000170","vr":"IS","vm":"1","name":"NumberOfFilms"},"x21000500":{"tag":"x21000500","vr":"SQ","vm":"1","name":"ReferencedPrintJobSequencePullStoredPrint"},"x21100010":{"tag":"x21100010","vr":"CS","vm":"1","name":"PrinterStatus"},"x21100020":{"tag":"x21100020","vr":"CS","vm":"1","name":"PrinterStatusInfo"},"x21100030":{"tag":"x21100030","vr":"LO","vm":"1","name":"PrinterName"},"x21100099":{"tag":"x21100099","vr":"SH","vm":"1","name":"PrintQueueID"},"x21200010":{"tag":"x21200010","vr":"CS","vm":"1","name":"QueueStatus"},"x21200050":{"tag":"x21200050","vr":"SQ","vm":"1","name":"PrintJobDescriptionSequence"},"x21200070":{"tag":"x21200070","vr":"SQ","vm":"1","name":"ReferencedPrintJobSequence"},"x21300010":{"tag":"x21300010","vr":"SQ","vm":"1","name":"PrintManagementCapabilitiesSequence"},"x21300015":{"tag":"x21300015","vr":"SQ","vm":"1","name":"PrinterCharacteristicsSequence"},"x21300030":{"tag":"x21300030","vr":"SQ","vm":"1","name":"FilmBoxContentSequence"},"x21300040":{"tag":"x21300040","vr":"SQ","vm":"1","name":"ImageBoxContentSequence"},"x21300050":{"tag":"x21300050","vr":"SQ","vm":"1","name":"AnnotationContentSequence"},"x21300060":{"tag":"x21300060","vr":"SQ","vm":"1","name":"ImageOverlayBoxContentSequence"},"x21300080":{"tag":"x21300080","vr":"SQ","vm":"1","name":"PresentationLUTContentSequence"},"x213000A0":{"tag":"x213000A0","vr":"SQ","vm":"1","name":"ProposedStudySequence"},"x213000C0":{"tag":"x213000C0","vr":"SQ","vm":"1","name":"OriginalImageSequence"},"x22000001":{"tag":"x22000001","vr":"CS","vm":"1","name":"LabelUsingInformationExtractedFromInstances"},"x22000002":{"tag":"x22000002","vr":"UT","vm":"1","name":"LabelText"},"x22000003":{"tag":"x22000003","vr":"CS","vm":"1","name":"LabelStyleSelection"},"x22000004":{"tag":"x22000004","vr":"LT","vm":"1","name":"MediaDisposition"},"x22000005":{"tag":"x22000005","vr":"LT","vm":"1","name":"BarcodeValue"},"x22000006":{"tag":"x22000006","vr":"CS","vm":"1","name":"BarcodeSymbology"},"x22000007":{"tag":"x22000007","vr":"CS","vm":"1","name":"AllowMediaSplitting"},"x22000008":{"tag":"x22000008","vr":"CS","vm":"1","name":"IncludeNonDICOMObjects"},"x22000009":{"tag":"x22000009","vr":"CS","vm":"1","name":"IncludeDisplayApplication"},"x2200000A":{"tag":"x2200000A","vr":"CS","vm":"1","name":"PreserveCompositeInstancesAfterMediaCreation"},"x2200000B":{"tag":"x2200000B","vr":"US","vm":"1","name":"TotalNumberOfPiecesOfMediaCreated"},"x2200000C":{"tag":"x2200000C","vr":"LO","vm":"1","name":"RequestedMediaApplicationProfile"},"x2200000D":{"tag":"x2200000D","vr":"SQ","vm":"1","name":"ReferencedStorageMediaSequence"},"x2200000E":{"tag":"x2200000E","vr":"AT","vm":"1-n","name":"FailureAttributes"},"x2200000F":{"tag":"x2200000F","vr":"CS","vm":"1","name":"AllowLossyCompression"},"x22000020":{"tag":"x22000020","vr":"CS","vm":"1","name":"RequestPriority"},"x30020002":{"tag":"x30020002","vr":"SH","vm":"1","name":"RTImageLabel"},"x30020003":{"tag":"x30020003","vr":"LO","vm":"1","name":"RTImageName"},"x30020004":{"tag":"x30020004","vr":"ST","vm":"1","name":"RTImageDescription"},"x3002000A":{"tag":"x3002000A","vr":"CS","vm":"1","name":"ReportedValuesOrigin"},"x3002000C":{"tag":"x3002000C","vr":"CS","vm":"1","name":"RTImagePlane"},"x3002000D":{"tag":"x3002000D","vr":"DS","vm":"3","name":"XRayImageReceptorTranslation"},"x3002000E":{"tag":"x3002000E","vr":"DS","vm":"1","name":"XRayImageReceptorAngle"},"x30020010":{"tag":"x30020010","vr":"DS","vm":"6","name":"RTImageOrientation"},"x30020011":{"tag":"x30020011","vr":"DS","vm":"2","name":"ImagePlanePixelSpacing"},"x30020012":{"tag":"x30020012","vr":"DS","vm":"2","name":"RTImagePosition"},"x30020020":{"tag":"x30020020","vr":"SH","vm":"1","name":"RadiationMachineName"},"x30020022":{"tag":"x30020022","vr":"DS","vm":"1","name":"RadiationMachineSAD"},"x30020024":{"tag":"x30020024","vr":"DS","vm":"1","name":"RadiationMachineSSD"},"x30020026":{"tag":"x30020026","vr":"DS","vm":"1","name":"RTImageSID"},"x30020028":{"tag":"x30020028","vr":"DS","vm":"1","name":"SourceToReferenceObjectDistance"},"x30020029":{"tag":"x30020029","vr":"IS","vm":"1","name":"FractionNumber"},"x30020030":{"tag":"x30020030","vr":"SQ","vm":"1","name":"ExposureSequence"},"x30020032":{"tag":"x30020032","vr":"DS","vm":"1","name":"MetersetExposure"},"x30020034":{"tag":"x30020034","vr":"DS","vm":"4","name":"DiaphragmPosition"},"x30020040":{"tag":"x30020040","vr":"SQ","vm":"1","name":"FluenceMapSequence"},"x30020041":{"tag":"x30020041","vr":"CS","vm":"1","name":"FluenceDataSource"},"x30020042":{"tag":"x30020042","vr":"DS","vm":"1","name":"FluenceDataScale"},"x30020050":{"tag":"x30020050","vr":"SQ","vm":"1","name":"PrimaryFluenceModeSequence"},"x30020051":{"tag":"x30020051","vr":"CS","vm":"1","name":"FluenceMode"},"x30020052":{"tag":"x30020052","vr":"SH","vm":"1","name":"FluenceModeID"},"x30040001":{"tag":"x30040001","vr":"CS","vm":"1","name":"DVHType"},"x30040002":{"tag":"x30040002","vr":"CS","vm":"1","name":"DoseUnits"},"x30040004":{"tag":"x30040004","vr":"CS","vm":"1","name":"DoseType"},"x30040006":{"tag":"x30040006","vr":"LO","vm":"1","name":"DoseComment"},"x30040008":{"tag":"x30040008","vr":"DS","vm":"3","name":"NormalizationPoint"},"x3004000A":{"tag":"x3004000A","vr":"CS","vm":"1","name":"DoseSummationType"},"x3004000C":{"tag":"x3004000C","vr":"DS","vm":"2-n","name":"GridFrameOffsetVector"},"x3004000E":{"tag":"x3004000E","vr":"DS","vm":"1","name":"DoseGridScaling"},"x30040010":{"tag":"x30040010","vr":"SQ","vm":"1","name":"RTDoseROISequence"},"x30040012":{"tag":"x30040012","vr":"DS","vm":"1","name":"DoseValue"},"x30040014":{"tag":"x30040014","vr":"CS","vm":"1-3","name":"TissueHeterogeneityCorrection"},"x30040040":{"tag":"x30040040","vr":"DS","vm":"3","name":"DVHNormalizationPoint"},"x30040042":{"tag":"x30040042","vr":"DS","vm":"1","name":"DVHNormalizationDoseValue"},"x30040050":{"tag":"x30040050","vr":"SQ","vm":"1","name":"DVHSequence"},"x30040052":{"tag":"x30040052","vr":"DS","vm":"1","name":"DVHDoseScaling"},"x30040054":{"tag":"x30040054","vr":"CS","vm":"1","name":"DVHVolumeUnits"},"x30040056":{"tag":"x30040056","vr":"IS","vm":"1","name":"DVHNumberOfBins"},"x30040058":{"tag":"x30040058","vr":"DS","vm":"2-2n","name":"DVHData"},"x30040060":{"tag":"x30040060","vr":"SQ","vm":"1","name":"DVHReferencedROISequence"},"x30040062":{"tag":"x30040062","vr":"CS","vm":"1","name":"DVHROIContributionType"},"x30040070":{"tag":"x30040070","vr":"DS","vm":"1","name":"DVHMinimumDose"},"x30040072":{"tag":"x30040072","vr":"DS","vm":"1","name":"DVHMaximumDose"},"x30040074":{"tag":"x30040074","vr":"DS","vm":"1","name":"DVHMeanDose"},"x30060002":{"tag":"x30060002","vr":"SH","vm":"1","name":"StructureSetLabel"},"x30060004":{"tag":"x30060004","vr":"LO","vm":"1","name":"StructureSetName"},"x30060006":{"tag":"x30060006","vr":"ST","vm":"1","name":"StructureSetDescription"},"x30060008":{"tag":"x30060008","vr":"DA","vm":"1","name":"StructureSetDate"},"x30060009":{"tag":"x30060009","vr":"TM","vm":"1","name":"StructureSetTime"},"x30060010":{"tag":"x30060010","vr":"SQ","vm":"1","name":"ReferencedFrameOfReferenceSequence"},"x30060012":{"tag":"x30060012","vr":"SQ","vm":"1","name":"RTReferencedStudySequence"},"x30060014":{"tag":"x30060014","vr":"SQ","vm":"1","name":"RTReferencedSeriesSequence"},"x30060016":{"tag":"x30060016","vr":"SQ","vm":"1","name":"ContourImageSequence"},"x30060020":{"tag":"x30060020","vr":"SQ","vm":"1","name":"StructureSetROISequence"},"x30060022":{"tag":"x30060022","vr":"IS","vm":"1","name":"ROINumber"},"x30060024":{"tag":"x30060024","vr":"UI","vm":"1","name":"ReferencedFrameOfReferenceUID"},"x30060026":{"tag":"x30060026","vr":"LO","vm":"1","name":"ROIName"},"x30060028":{"tag":"x30060028","vr":"ST","vm":"1","name":"ROIDescription"},"x3006002A":{"tag":"x3006002A","vr":"IS","vm":"3","name":"ROIDisplayColor"},"x3006002C":{"tag":"x3006002C","vr":"DS","vm":"1","name":"ROIVolume"},"x30060030":{"tag":"x30060030","vr":"SQ","vm":"1","name":"RTRelatedROISequence"},"x30060033":{"tag":"x30060033","vr":"CS","vm":"1","name":"RTROIRelationship"},"x30060036":{"tag":"x30060036","vr":"CS","vm":"1","name":"ROIGenerationAlgorithm"},"x30060038":{"tag":"x30060038","vr":"LO","vm":"1","name":"ROIGenerationDescription"},"x30060039":{"tag":"x30060039","vr":"SQ","vm":"1","name":"ROIContourSequence"},"x30060040":{"tag":"x30060040","vr":"SQ","vm":"1","name":"ContourSequence"},"x30060042":{"tag":"x30060042","vr":"CS","vm":"1","name":"ContourGeometricType"},"x30060044":{"tag":"x30060044","vr":"DS","vm":"1","name":"ContourSlabThickness"},"x30060045":{"tag":"x30060045","vr":"DS","vm":"3","name":"ContourOffsetVector"},"x30060046":{"tag":"x30060046","vr":"IS","vm":"1","name":"NumberOfContourPoints"},"x30060048":{"tag":"x30060048","vr":"IS","vm":"1","name":"ContourNumber"},"x30060049":{"tag":"x30060049","vr":"IS","vm":"1-n","name":"AttachedContours"},"x30060050":{"tag":"x30060050","vr":"DS","vm":"3-3n","name":"ContourData"},"x30060080":{"tag":"x30060080","vr":"SQ","vm":"1","name":"RTROIObservationsSequence"},"x30060082":{"tag":"x30060082","vr":"IS","vm":"1","name":"ObservationNumber"},"x30060084":{"tag":"x30060084","vr":"IS","vm":"1","name":"ReferencedROINumber"},"x30060085":{"tag":"x30060085","vr":"SH","vm":"1","name":"ROIObservationLabel"},"x30060086":{"tag":"x30060086","vr":"SQ","vm":"1","name":"RTROIIdentificationCodeSequence"},"x30060088":{"tag":"x30060088","vr":"ST","vm":"1","name":"ROIObservationDescription"},"x300600A0":{"tag":"x300600A0","vr":"SQ","vm":"1","name":"RelatedRTROIObservationsSequence"},"x300600A4":{"tag":"x300600A4","vr":"CS","vm":"1","name":"RTROIInterpretedType"},"x300600A6":{"tag":"x300600A6","vr":"PN","vm":"1","name":"ROIInterpreter"},"x300600B0":{"tag":"x300600B0","vr":"SQ","vm":"1","name":"ROIPhysicalPropertiesSequence"},"x300600B2":{"tag":"x300600B2","vr":"CS","vm":"1","name":"ROIPhysicalProperty"},"x300600B4":{"tag":"x300600B4","vr":"DS","vm":"1","name":"ROIPhysicalPropertyValue"},"x300600B6":{"tag":"x300600B6","vr":"SQ","vm":"1","name":"ROIElementalCompositionSequence"},"x300600B7":{"tag":"x300600B7","vr":"US","vm":"1","name":"ROIElementalCompositionAtomicNumber"},"x300600B8":{"tag":"x300600B8","vr":"FL","vm":"1","name":"ROIElementalCompositionAtomicMassFraction"},"x300600C0":{"tag":"x300600C0","vr":"SQ","vm":"1","name":"FrameOfReferenceRelationshipSequence"},"x300600C2":{"tag":"x300600C2","vr":"UI","vm":"1","name":"RelatedFrameOfReferenceUID"},"x300600C4":{"tag":"x300600C4","vr":"CS","vm":"1","name":"FrameOfReferenceTransformationType"},"x300600C6":{"tag":"x300600C6","vr":"DS","vm":"16","name":"FrameOfReferenceTransformationMatrix"},"x300600C8":{"tag":"x300600C8","vr":"LO","vm":"1","name":"FrameOfReferenceTransformationComment"},"x30080010":{"tag":"x30080010","vr":"SQ","vm":"1","name":"MeasuredDoseReferenceSequence"},"x30080012":{"tag":"x30080012","vr":"ST","vm":"1","name":"MeasuredDoseDescription"},"x30080014":{"tag":"x30080014","vr":"CS","vm":"1","name":"MeasuredDoseType"},"x30080016":{"tag":"x30080016","vr":"DS","vm":"1","name":"MeasuredDoseValue"},"x30080020":{"tag":"x30080020","vr":"SQ","vm":"1","name":"TreatmentSessionBeamSequence"},"x30080021":{"tag":"x30080021","vr":"SQ","vm":"1","name":"TreatmentSessionIonBeamSequence"},"x30080022":{"tag":"x30080022","vr":"IS","vm":"1","name":"CurrentFractionNumber"},"x30080024":{"tag":"x30080024","vr":"DA","vm":"1","name":"TreatmentControlPointDate"},"x30080025":{"tag":"x30080025","vr":"TM","vm":"1","name":"TreatmentControlPointTime"},"x3008002A":{"tag":"x3008002A","vr":"CS","vm":"1","name":"TreatmentTerminationStatus"},"x3008002B":{"tag":"x3008002B","vr":"SH","vm":"1","name":"TreatmentTerminationCode"},"x3008002C":{"tag":"x3008002C","vr":"CS","vm":"1","name":"TreatmentVerificationStatus"},"x30080030":{"tag":"x30080030","vr":"SQ","vm":"1","name":"ReferencedTreatmentRecordSequence"},"x30080032":{"tag":"x30080032","vr":"DS","vm":"1","name":"SpecifiedPrimaryMeterset"},"x30080033":{"tag":"x30080033","vr":"DS","vm":"1","name":"SpecifiedSecondaryMeterset"},"x30080036":{"tag":"x30080036","vr":"DS","vm":"1","name":"DeliveredPrimaryMeterset"},"x30080037":{"tag":"x30080037","vr":"DS","vm":"1","name":"DeliveredSecondaryMeterset"},"x3008003A":{"tag":"x3008003A","vr":"DS","vm":"1","name":"SpecifiedTreatmentTime"},"x3008003B":{"tag":"x3008003B","vr":"DS","vm":"1","name":"DeliveredTreatmentTime"},"x30080040":{"tag":"x30080040","vr":"SQ","vm":"1","name":"ControlPointDeliverySequence"},"x30080041":{"tag":"x30080041","vr":"SQ","vm":"1","name":"IonControlPointDeliverySequence"},"x30080042":{"tag":"x30080042","vr":"DS","vm":"1","name":"SpecifiedMeterset"},"x30080044":{"tag":"x30080044","vr":"DS","vm":"1","name":"DeliveredMeterset"},"x30080045":{"tag":"x30080045","vr":"FL","vm":"1","name":"MetersetRateSet"},"x30080046":{"tag":"x30080046","vr":"FL","vm":"1","name":"MetersetRateDelivered"},"x30080047":{"tag":"x30080047","vr":"FL","vm":"1-n","name":"ScanSpotMetersetsDelivered"},"x30080048":{"tag":"x30080048","vr":"DS","vm":"1","name":"DoseRateDelivered"},"x30080050":{"tag":"x30080050","vr":"SQ","vm":"1","name":"TreatmentSummaryCalculatedDoseReferenceSequence"},"x30080052":{"tag":"x30080052","vr":"DS","vm":"1","name":"CumulativeDoseToDoseReference"},"x30080054":{"tag":"x30080054","vr":"DA","vm":"1","name":"FirstTreatmentDate"},"x30080056":{"tag":"x30080056","vr":"DA","vm":"1","name":"MostRecentTreatmentDate"},"x3008005A":{"tag":"x3008005A","vr":"IS","vm":"1","name":"NumberOfFractionsDelivered"},"x30080060":{"tag":"x30080060","vr":"SQ","vm":"1","name":"OverrideSequence"},"x30080061":{"tag":"x30080061","vr":"AT","vm":"1","name":"ParameterSequencePointer"},"x30080062":{"tag":"x30080062","vr":"AT","vm":"1","name":"OverrideParameterPointer"},"x30080063":{"tag":"x30080063","vr":"IS","vm":"1","name":"ParameterItemIndex"},"x30080064":{"tag":"x30080064","vr":"IS","vm":"1","name":"MeasuredDoseReferenceNumber"},"x30080065":{"tag":"x30080065","vr":"AT","vm":"1","name":"ParameterPointer"},"x30080066":{"tag":"x30080066","vr":"ST","vm":"1","name":"OverrideReason"},"x30080068":{"tag":"x30080068","vr":"SQ","vm":"1","name":"CorrectedParameterSequence"},"x3008006A":{"tag":"x3008006A","vr":"FL","vm":"1","name":"CorrectionValue"},"x30080070":{"tag":"x30080070","vr":"SQ","vm":"1","name":"CalculatedDoseReferenceSequence"},"x30080072":{"tag":"x30080072","vr":"IS","vm":"1","name":"CalculatedDoseReferenceNumber"},"x30080074":{"tag":"x30080074","vr":"ST","vm":"1","name":"CalculatedDoseReferenceDescription"},"x30080076":{"tag":"x30080076","vr":"DS","vm":"1","name":"CalculatedDoseReferenceDoseValue"},"x30080078":{"tag":"x30080078","vr":"DS","vm":"1","name":"StartMeterset"},"x3008007A":{"tag":"x3008007A","vr":"DS","vm":"1","name":"EndMeterset"},"x30080080":{"tag":"x30080080","vr":"SQ","vm":"1","name":"ReferencedMeasuredDoseReferenceSequence"},"x30080082":{"tag":"x30080082","vr":"IS","vm":"1","name":"ReferencedMeasuredDoseReferenceNumber"},"x30080090":{"tag":"x30080090","vr":"SQ","vm":"1","name":"ReferencedCalculatedDoseReferenceSequence"},"x30080092":{"tag":"x30080092","vr":"IS","vm":"1","name":"ReferencedCalculatedDoseReferenceNumber"},"x300800A0":{"tag":"x300800A0","vr":"SQ","vm":"1","name":"BeamLimitingDeviceLeafPairsSequence"},"x300800B0":{"tag":"x300800B0","vr":"SQ","vm":"1","name":"RecordedWedgeSequence"},"x300800C0":{"tag":"x300800C0","vr":"SQ","vm":"1","name":"RecordedCompensatorSequence"},"x300800D0":{"tag":"x300800D0","vr":"SQ","vm":"1","name":"RecordedBlockSequence"},"x300800E0":{"tag":"x300800E0","vr":"SQ","vm":"1","name":"TreatmentSummaryMeasuredDoseReferenceSequence"},"x300800F0":{"tag":"x300800F0","vr":"SQ","vm":"1","name":"RecordedSnoutSequence"},"x300800F2":{"tag":"x300800F2","vr":"SQ","vm":"1","name":"RecordedRangeShifterSequence"},"x300800F4":{"tag":"x300800F4","vr":"SQ","vm":"1","name":"RecordedLateralSpreadingDeviceSequence"},"x300800F6":{"tag":"x300800F6","vr":"SQ","vm":"1","name":"RecordedRangeModulatorSequence"},"x30080100":{"tag":"x30080100","vr":"SQ","vm":"1","name":"RecordedSourceSequence"},"x30080105":{"tag":"x30080105","vr":"LO","vm":"1","name":"SourceSerialNumber"},"x30080110":{"tag":"x30080110","vr":"SQ","vm":"1","name":"TreatmentSessionApplicationSetupSequence"},"x30080116":{"tag":"x30080116","vr":"CS","vm":"1","name":"ApplicationSetupCheck"},"x30080120":{"tag":"x30080120","vr":"SQ","vm":"1","name":"RecordedBrachyAccessoryDeviceSequence"},"x30080122":{"tag":"x30080122","vr":"IS","vm":"1","name":"ReferencedBrachyAccessoryDeviceNumber"},"x30080130":{"tag":"x30080130","vr":"SQ","vm":"1","name":"RecordedChannelSequence"},"x30080132":{"tag":"x30080132","vr":"DS","vm":"1","name":"SpecifiedChannelTotalTime"},"x30080134":{"tag":"x30080134","vr":"DS","vm":"1","name":"DeliveredChannelTotalTime"},"x30080136":{"tag":"x30080136","vr":"IS","vm":"1","name":"SpecifiedNumberOfPulses"},"x30080138":{"tag":"x30080138","vr":"IS","vm":"1","name":"DeliveredNumberOfPulses"},"x3008013A":{"tag":"x3008013A","vr":"DS","vm":"1","name":"SpecifiedPulseRepetitionInterval"},"x3008013C":{"tag":"x3008013C","vr":"DS","vm":"1","name":"DeliveredPulseRepetitionInterval"},"x30080140":{"tag":"x30080140","vr":"SQ","vm":"1","name":"RecordedSourceApplicatorSequence"},"x30080142":{"tag":"x30080142","vr":"IS","vm":"1","name":"ReferencedSourceApplicatorNumber"},"x30080150":{"tag":"x30080150","vr":"SQ","vm":"1","name":"RecordedChannelShieldSequence"},"x30080152":{"tag":"x30080152","vr":"IS","vm":"1","name":"ReferencedChannelShieldNumber"},"x30080160":{"tag":"x30080160","vr":"SQ","vm":"1","name":"BrachyControlPointDeliveredSequence"},"x30080162":{"tag":"x30080162","vr":"DA","vm":"1","name":"SafePositionExitDate"},"x30080164":{"tag":"x30080164","vr":"TM","vm":"1","name":"SafePositionExitTime"},"x30080166":{"tag":"x30080166","vr":"DA","vm":"1","name":"SafePositionReturnDate"},"x30080168":{"tag":"x30080168","vr":"TM","vm":"1","name":"SafePositionReturnTime"},"x30080200":{"tag":"x30080200","vr":"CS","vm":"1","name":"CurrentTreatmentStatus"},"x30080202":{"tag":"x30080202","vr":"ST","vm":"1","name":"TreatmentStatusComment"},"x30080220":{"tag":"x30080220","vr":"SQ","vm":"1","name":"FractionGroupSummarySequence"},"x30080223":{"tag":"x30080223","vr":"IS","vm":"1","name":"ReferencedFractionNumber"},"x30080224":{"tag":"x30080224","vr":"CS","vm":"1","name":"FractionGroupType"},"x30080230":{"tag":"x30080230","vr":"CS","vm":"1","name":"BeamStopperPosition"},"x30080240":{"tag":"x30080240","vr":"SQ","vm":"1","name":"FractionStatusSummarySequence"},"x30080250":{"tag":"x30080250","vr":"DA","vm":"1","name":"TreatmentDate"},"x30080251":{"tag":"x30080251","vr":"TM","vm":"1","name":"TreatmentTime"},"x300A0002":{"tag":"x300A0002","vr":"SH","vm":"1","name":"RTPlanLabel"},"x300A0003":{"tag":"x300A0003","vr":"LO","vm":"1","name":"RTPlanName"},"x300A0004":{"tag":"x300A0004","vr":"ST","vm":"1","name":"RTPlanDescription"},"x300A0006":{"tag":"x300A0006","vr":"DA","vm":"1","name":"RTPlanDate"},"x300A0007":{"tag":"x300A0007","vr":"TM","vm":"1","name":"RTPlanTime"},"x300A0009":{"tag":"x300A0009","vr":"LO","vm":"1-n","name":"TreatmentProtocols"},"x300A000A":{"tag":"x300A000A","vr":"CS","vm":"1","name":"PlanIntent"},"x300A000B":{"tag":"x300A000B","vr":"LO","vm":"1-n","name":"TreatmentSites"},"x300A000C":{"tag":"x300A000C","vr":"CS","vm":"1","name":"RTPlanGeometry"},"x300A000E":{"tag":"x300A000E","vr":"ST","vm":"1","name":"PrescriptionDescription"},"x300A0010":{"tag":"x300A0010","vr":"SQ","vm":"1","name":"DoseReferenceSequence"},"x300A0012":{"tag":"x300A0012","vr":"IS","vm":"1","name":"DoseReferenceNumber"},"x300A0013":{"tag":"x300A0013","vr":"UI","vm":"1","name":"DoseReferenceUID"},"x300A0014":{"tag":"x300A0014","vr":"CS","vm":"1","name":"DoseReferenceStructureType"},"x300A0015":{"tag":"x300A0015","vr":"CS","vm":"1","name":"NominalBeamEnergyUnit"},"x300A0016":{"tag":"x300A0016","vr":"LO","vm":"1","name":"DoseReferenceDescription"},"x300A0018":{"tag":"x300A0018","vr":"DS","vm":"3","name":"DoseReferencePointCoordinates"},"x300A001A":{"tag":"x300A001A","vr":"DS","vm":"1","name":"NominalPriorDose"},"x300A0020":{"tag":"x300A0020","vr":"CS","vm":"1","name":"DoseReferenceType"},"x300A0021":{"tag":"x300A0021","vr":"DS","vm":"1","name":"ConstraintWeight"},"x300A0022":{"tag":"x300A0022","vr":"DS","vm":"1","name":"DeliveryWarningDose"},"x300A0023":{"tag":"x300A0023","vr":"DS","vm":"1","name":"DeliveryMaximumDose"},"x300A0025":{"tag":"x300A0025","vr":"DS","vm":"1","name":"TargetMinimumDose"},"x300A0026":{"tag":"x300A0026","vr":"DS","vm":"1","name":"TargetPrescriptionDose"},"x300A0027":{"tag":"x300A0027","vr":"DS","vm":"1","name":"TargetMaximumDose"},"x300A0028":{"tag":"x300A0028","vr":"DS","vm":"1","name":"TargetUnderdoseVolumeFraction"},"x300A002A":{"tag":"x300A002A","vr":"DS","vm":"1","name":"OrganAtRiskFullVolumeDose"},"x300A002B":{"tag":"x300A002B","vr":"DS","vm":"1","name":"OrganAtRiskLimitDose"},"x300A002C":{"tag":"x300A002C","vr":"DS","vm":"1","name":"OrganAtRiskMaximumDose"},"x300A002D":{"tag":"x300A002D","vr":"DS","vm":"1","name":"OrganAtRiskOverdoseVolumeFraction"},"x300A0040":{"tag":"x300A0040","vr":"SQ","vm":"1","name":"ToleranceTableSequence"},"x300A0042":{"tag":"x300A0042","vr":"IS","vm":"1","name":"ToleranceTableNumber"},"x300A0043":{"tag":"x300A0043","vr":"SH","vm":"1","name":"ToleranceTableLabel"},"x300A0044":{"tag":"x300A0044","vr":"DS","vm":"1","name":"GantryAngleTolerance"},"x300A0046":{"tag":"x300A0046","vr":"DS","vm":"1","name":"BeamLimitingDeviceAngleTolerance"},"x300A0048":{"tag":"x300A0048","vr":"SQ","vm":"1","name":"BeamLimitingDeviceToleranceSequence"},"x300A004A":{"tag":"x300A004A","vr":"DS","vm":"1","name":"BeamLimitingDevicePositionTolerance"},"x300A004B":{"tag":"x300A004B","vr":"FL","vm":"1","name":"SnoutPositionTolerance"},"x300A004C":{"tag":"x300A004C","vr":"DS","vm":"1","name":"PatientSupportAngleTolerance"},"x300A004E":{"tag":"x300A004E","vr":"DS","vm":"1","name":"TableTopEccentricAngleTolerance"},"x300A004F":{"tag":"x300A004F","vr":"FL","vm":"1","name":"TableTopPitchAngleTolerance"},"x300A0050":{"tag":"x300A0050","vr":"FL","vm":"1","name":"TableTopRollAngleTolerance"},"x300A0051":{"tag":"x300A0051","vr":"DS","vm":"1","name":"TableTopVerticalPositionTolerance"},"x300A0052":{"tag":"x300A0052","vr":"DS","vm":"1","name":"TableTopLongitudinalPositionTolerance"},"x300A0053":{"tag":"x300A0053","vr":"DS","vm":"1","name":"TableTopLateralPositionTolerance"},"x300A0055":{"tag":"x300A0055","vr":"CS","vm":"1","name":"RTPlanRelationship"},"x300A0070":{"tag":"x300A0070","vr":"SQ","vm":"1","name":"FractionGroupSequence"},"x300A0071":{"tag":"x300A0071","vr":"IS","vm":"1","name":"FractionGroupNumber"},"x300A0072":{"tag":"x300A0072","vr":"LO","vm":"1","name":"FractionGroupDescription"},"x300A0078":{"tag":"x300A0078","vr":"IS","vm":"1","name":"NumberOfFractionsPlanned"},"x300A0079":{"tag":"x300A0079","vr":"IS","vm":"1","name":"NumberOfFractionPatternDigitsPerDay"},"x300A007A":{"tag":"x300A007A","vr":"IS","vm":"1","name":"RepeatFractionCycleLength"},"x300A007B":{"tag":"x300A007B","vr":"LT","vm":"1","name":"FractionPattern"},"x300A0080":{"tag":"x300A0080","vr":"IS","vm":"1","name":"NumberOfBeams"},"x300A0082":{"tag":"x300A0082","vr":"DS","vm":"3","name":"BeamDoseSpecificationPoint"},"x300A0084":{"tag":"x300A0084","vr":"DS","vm":"1","name":"BeamDose"},"x300A0086":{"tag":"x300A0086","vr":"DS","vm":"1","name":"BeamMeterset"},"x300A0088":{"tag":"x300A0088","vr":"FL","vm":"1","name":"BeamDosePointDepth"},"x300A0089":{"tag":"x300A0089","vr":"FL","vm":"1","name":"BeamDosePointEquivalentDepth"},"x300A008A":{"tag":"x300A008A","vr":"FL","vm":"1","name":"BeamDosePointSSD"},"x300A00A0":{"tag":"x300A00A0","vr":"IS","vm":"1","name":"NumberOfBrachyApplicationSetups"},"x300A00A2":{"tag":"x300A00A2","vr":"DS","vm":"3","name":"BrachyApplicationSetupDoseSpecificationPoint"},"x300A00A4":{"tag":"x300A00A4","vr":"DS","vm":"1","name":"BrachyApplicationSetupDose"},"x300A00B0":{"tag":"x300A00B0","vr":"SQ","vm":"1","name":"BeamSequence"},"x300A00B2":{"tag":"x300A00B2","vr":"SH","vm":"1","name":"TreatmentMachineName"},"x300A00B3":{"tag":"x300A00B3","vr":"CS","vm":"1","name":"PrimaryDosimeterUnit"},"x300A00B4":{"tag":"x300A00B4","vr":"DS","vm":"1","name":"SourceAxisDistance"},"x300A00B6":{"tag":"x300A00B6","vr":"SQ","vm":"1","name":"BeamLimitingDeviceSequence"},"x300A00B8":{"tag":"x300A00B8","vr":"CS","vm":"1","name":"RTBeamLimitingDeviceType"},"x300A00BA":{"tag":"x300A00BA","vr":"DS","vm":"1","name":"SourceToBeamLimitingDeviceDistance"},"x300A00BB":{"tag":"x300A00BB","vr":"FL","vm":"1","name":"IsocenterToBeamLimitingDeviceDistance"},"x300A00BC":{"tag":"x300A00BC","vr":"IS","vm":"1","name":"NumberOfLeafJawPairs"},"x300A00BE":{"tag":"x300A00BE","vr":"DS","vm":"3-n","name":"LeafPositionBoundaries"},"x300A00C0":{"tag":"x300A00C0","vr":"IS","vm":"1","name":"BeamNumber"},"x300A00C2":{"tag":"x300A00C2","vr":"LO","vm":"1","name":"BeamName"},"x300A00C3":{"tag":"x300A00C3","vr":"ST","vm":"1","name":"BeamDescription"},"x300A00C4":{"tag":"x300A00C4","vr":"CS","vm":"1","name":"BeamType"},"x300A00C6":{"tag":"x300A00C6","vr":"CS","vm":"1","name":"RadiationType"},"x300A00C7":{"tag":"x300A00C7","vr":"CS","vm":"1","name":"HighDoseTechniqueType"},"x300A00C8":{"tag":"x300A00C8","vr":"IS","vm":"1","name":"ReferenceImageNumber"},"x300A00CA":{"tag":"x300A00CA","vr":"SQ","vm":"1","name":"PlannedVerificationImageSequence"},"x300A00CC":{"tag":"x300A00CC","vr":"LO","vm":"1-n","name":"ImagingDeviceSpecificAcquisitionParameters"},"x300A00CE":{"tag":"x300A00CE","vr":"CS","vm":"1","name":"TreatmentDeliveryType"},"x300A00D0":{"tag":"x300A00D0","vr":"IS","vm":"1","name":"NumberOfWedges"},"x300A00D1":{"tag":"x300A00D1","vr":"SQ","vm":"1","name":"WedgeSequence"},"x300A00D2":{"tag":"x300A00D2","vr":"IS","vm":"1","name":"WedgeNumber"},"x300A00D3":{"tag":"x300A00D3","vr":"CS","vm":"1","name":"WedgeType"},"x300A00D4":{"tag":"x300A00D4","vr":"SH","vm":"1","name":"WedgeID"},"x300A00D5":{"tag":"x300A00D5","vr":"IS","vm":"1","name":"WedgeAngle"},"x300A00D6":{"tag":"x300A00D6","vr":"DS","vm":"1","name":"WedgeFactor"},"x300A00D7":{"tag":"x300A00D7","vr":"FL","vm":"1","name":"TotalWedgeTrayWaterEquivalentThickness"},"x300A00D8":{"tag":"x300A00D8","vr":"DS","vm":"1","name":"WedgeOrientation"},"x300A00D9":{"tag":"x300A00D9","vr":"FL","vm":"1","name":"IsocenterToWedgeTrayDistance"},"x300A00DA":{"tag":"x300A00DA","vr":"DS","vm":"1","name":"SourceToWedgeTrayDistance"},"x300A00DB":{"tag":"x300A00DB","vr":"FL","vm":"1","name":"WedgeThinEdgePosition"},"x300A00DC":{"tag":"x300A00DC","vr":"SH","vm":"1","name":"BolusID"},"x300A00DD":{"tag":"x300A00DD","vr":"ST","vm":"1","name":"BolusDescription"},"x300A00E0":{"tag":"x300A00E0","vr":"IS","vm":"1","name":"NumberOfCompensators"},"x300A00E1":{"tag":"x300A00E1","vr":"SH","vm":"1","name":"MaterialID"},"x300A00E2":{"tag":"x300A00E2","vr":"DS","vm":"1","name":"TotalCompensatorTrayFactor"},"x300A00E3":{"tag":"x300A00E3","vr":"SQ","vm":"1","name":"CompensatorSequence"},"x300A00E4":{"tag":"x300A00E4","vr":"IS","vm":"1","name":"CompensatorNumber"},"x300A00E5":{"tag":"x300A00E5","vr":"SH","vm":"1","name":"CompensatorID"},"x300A00E6":{"tag":"x300A00E6","vr":"DS","vm":"1","name":"SourceToCompensatorTrayDistance"},"x300A00E7":{"tag":"x300A00E7","vr":"IS","vm":"1","name":"CompensatorRows"},"x300A00E8":{"tag":"x300A00E8","vr":"IS","vm":"1","name":"CompensatorColumns"},"x300A00E9":{"tag":"x300A00E9","vr":"DS","vm":"2","name":"CompensatorPixelSpacing"},"x300A00EA":{"tag":"x300A00EA","vr":"DS","vm":"2","name":"CompensatorPosition"},"x300A00EB":{"tag":"x300A00EB","vr":"DS","vm":"1-n","name":"CompensatorTransmissionData"},"x300A00EC":{"tag":"x300A00EC","vr":"DS","vm":"1-n","name":"CompensatorThicknessData"},"x300A00ED":{"tag":"x300A00ED","vr":"IS","vm":"1","name":"NumberOfBoli"},"x300A00EE":{"tag":"x300A00EE","vr":"CS","vm":"1","name":"CompensatorType"},"x300A00F0":{"tag":"x300A00F0","vr":"IS","vm":"1","name":"NumberOfBlocks"},"x300A00F2":{"tag":"x300A00F2","vr":"DS","vm":"1","name":"TotalBlockTrayFactor"},"x300A00F3":{"tag":"x300A00F3","vr":"FL","vm":"1","name":"TotalBlockTrayWaterEquivalentThickness"},"x300A00F4":{"tag":"x300A00F4","vr":"SQ","vm":"1","name":"BlockSequence"},"x300A00F5":{"tag":"x300A00F5","vr":"SH","vm":"1","name":"BlockTrayID"},"x300A00F6":{"tag":"x300A00F6","vr":"DS","vm":"1","name":"SourceToBlockTrayDistance"},"x300A00F7":{"tag":"x300A00F7","vr":"FL","vm":"1","name":"IsocenterToBlockTrayDistance"},"x300A00F8":{"tag":"x300A00F8","vr":"CS","vm":"1","name":"BlockType"},"x300A00F9":{"tag":"x300A00F9","vr":"LO","vm":"1","name":"AccessoryCode"},"x300A00FA":{"tag":"x300A00FA","vr":"CS","vm":"1","name":"BlockDivergence"},"x300A00FB":{"tag":"x300A00FB","vr":"CS","vm":"1","name":"BlockMountingPosition"},"x300A00FC":{"tag":"x300A00FC","vr":"IS","vm":"1","name":"BlockNumber"},"x300A00FE":{"tag":"x300A00FE","vr":"LO","vm":"1","name":"BlockName"},"x300A0100":{"tag":"x300A0100","vr":"DS","vm":"1","name":"BlockThickness"},"x300A0102":{"tag":"x300A0102","vr":"DS","vm":"1","name":"BlockTransmission"},"x300A0104":{"tag":"x300A0104","vr":"IS","vm":"1","name":"BlockNumberOfPoints"},"x300A0106":{"tag":"x300A0106","vr":"DS","vm":"2-2n","name":"BlockData"},"x300A0107":{"tag":"x300A0107","vr":"SQ","vm":"1","name":"ApplicatorSequence"},"x300A0108":{"tag":"x300A0108","vr":"SH","vm":"1","name":"ApplicatorID"},"x300A0109":{"tag":"x300A0109","vr":"CS","vm":"1","name":"ApplicatorType"},"x300A010A":{"tag":"x300A010A","vr":"LO","vm":"1","name":"ApplicatorDescription"},"x300A010C":{"tag":"x300A010C","vr":"DS","vm":"1","name":"CumulativeDoseReferenceCoefficient"},"x300A010E":{"tag":"x300A010E","vr":"DS","vm":"1","name":"FinalCumulativeMetersetWeight"},"x300A0110":{"tag":"x300A0110","vr":"IS","vm":"1","name":"NumberOfControlPoints"},"x300A0111":{"tag":"x300A0111","vr":"SQ","vm":"1","name":"ControlPointSequence"},"x300A0112":{"tag":"x300A0112","vr":"IS","vm":"1","name":"ControlPointIndex"},"x300A0114":{"tag":"x300A0114","vr":"DS","vm":"1","name":"NominalBeamEnergy"},"x300A0115":{"tag":"x300A0115","vr":"DS","vm":"1","name":"DoseRateSet"},"x300A0116":{"tag":"x300A0116","vr":"SQ","vm":"1","name":"WedgePositionSequence"},"x300A0118":{"tag":"x300A0118","vr":"CS","vm":"1","name":"WedgePosition"},"x300A011A":{"tag":"x300A011A","vr":"SQ","vm":"1","name":"BeamLimitingDevicePositionSequence"},"x300A011C":{"tag":"x300A011C","vr":"DS","vm":"2-2n","name":"LeafJawPositions"},"x300A011E":{"tag":"x300A011E","vr":"DS","vm":"1","name":"GantryAngle"},"x300A011F":{"tag":"x300A011F","vr":"CS","vm":"1","name":"GantryRotationDirection"},"x300A0120":{"tag":"x300A0120","vr":"DS","vm":"1","name":"BeamLimitingDeviceAngle"},"x300A0121":{"tag":"x300A0121","vr":"CS","vm":"1","name":"BeamLimitingDeviceRotationDirection"},"x300A0122":{"tag":"x300A0122","vr":"DS","vm":"1","name":"PatientSupportAngle"},"x300A0123":{"tag":"x300A0123","vr":"CS","vm":"1","name":"PatientSupportRotationDirection"},"x300A0124":{"tag":"x300A0124","vr":"DS","vm":"1","name":"TableTopEccentricAxisDistance"},"x300A0125":{"tag":"x300A0125","vr":"DS","vm":"1","name":"TableTopEccentricAngle"},"x300A0126":{"tag":"x300A0126","vr":"CS","vm":"1","name":"TableTopEccentricRotationDirection"},"x300A0128":{"tag":"x300A0128","vr":"DS","vm":"1","name":"TableTopVerticalPosition"},"x300A0129":{"tag":"x300A0129","vr":"DS","vm":"1","name":"TableTopLongitudinalPosition"},"x300A012A":{"tag":"x300A012A","vr":"DS","vm":"1","name":"TableTopLateralPosition"},"x300A012C":{"tag":"x300A012C","vr":"DS","vm":"3","name":"IsocenterPosition"},"x300A012E":{"tag":"x300A012E","vr":"DS","vm":"3","name":"SurfaceEntryPoint"},"x300A0130":{"tag":"x300A0130","vr":"DS","vm":"1","name":"SourceToSurfaceDistance"},"x300A0134":{"tag":"x300A0134","vr":"DS","vm":"1","name":"CumulativeMetersetWeight"},"x300A0140":{"tag":"x300A0140","vr":"FL","vm":"1","name":"TableTopPitchAngle"},"x300A0142":{"tag":"x300A0142","vr":"CS","vm":"1","name":"TableTopPitchRotationDirection"},"x300A0144":{"tag":"x300A0144","vr":"FL","vm":"1","name":"TableTopRollAngle"},"x300A0146":{"tag":"x300A0146","vr":"CS","vm":"1","name":"TableTopRollRotationDirection"},"x300A0148":{"tag":"x300A0148","vr":"FL","vm":"1","name":"HeadFixationAngle"},"x300A014A":{"tag":"x300A014A","vr":"FL","vm":"1","name":"GantryPitchAngle"},"x300A014C":{"tag":"x300A014C","vr":"CS","vm":"1","name":"GantryPitchRotationDirection"},"x300A014E":{"tag":"x300A014E","vr":"FL","vm":"1","name":"GantryPitchAngleTolerance"},"x300A0180":{"tag":"x300A0180","vr":"SQ","vm":"1","name":"PatientSetupSequence"},"x300A0182":{"tag":"x300A0182","vr":"IS","vm":"1","name":"PatientSetupNumber"},"x300A0183":{"tag":"x300A0183","vr":"LO","vm":"1","name":"PatientSetupLabel"},"x300A0184":{"tag":"x300A0184","vr":"LO","vm":"1","name":"PatientAdditionalPosition"},"x300A0190":{"tag":"x300A0190","vr":"SQ","vm":"1","name":"FixationDeviceSequence"},"x300A0192":{"tag":"x300A0192","vr":"CS","vm":"1","name":"FixationDeviceType"},"x300A0194":{"tag":"x300A0194","vr":"SH","vm":"1","name":"FixationDeviceLabel"},"x300A0196":{"tag":"x300A0196","vr":"ST","vm":"1","name":"FixationDeviceDescription"},"x300A0198":{"tag":"x300A0198","vr":"SH","vm":"1","name":"FixationDevicePosition"},"x300A0199":{"tag":"x300A0199","vr":"FL","vm":"1","name":"FixationDevicePitchAngle"},"x300A019A":{"tag":"x300A019A","vr":"FL","vm":"1","name":"FixationDeviceRollAngle"},"x300A01A0":{"tag":"x300A01A0","vr":"SQ","vm":"1","name":"ShieldingDeviceSequence"},"x300A01A2":{"tag":"x300A01A2","vr":"CS","vm":"1","name":"ShieldingDeviceType"},"x300A01A4":{"tag":"x300A01A4","vr":"SH","vm":"1","name":"ShieldingDeviceLabel"},"x300A01A6":{"tag":"x300A01A6","vr":"ST","vm":"1","name":"ShieldingDeviceDescription"},"x300A01A8":{"tag":"x300A01A8","vr":"SH","vm":"1","name":"ShieldingDevicePosition"},"x300A01B0":{"tag":"x300A01B0","vr":"CS","vm":"1","name":"SetupTechnique"},"x300A01B2":{"tag":"x300A01B2","vr":"ST","vm":"1","name":"SetupTechniqueDescription"},"x300A01B4":{"tag":"x300A01B4","vr":"SQ","vm":"1","name":"SetupDeviceSequence"},"x300A01B6":{"tag":"x300A01B6","vr":"CS","vm":"1","name":"SetupDeviceType"},"x300A01B8":{"tag":"x300A01B8","vr":"SH","vm":"1","name":"SetupDeviceLabel"},"x300A01BA":{"tag":"x300A01BA","vr":"ST","vm":"1","name":"SetupDeviceDescription"},"x300A01BC":{"tag":"x300A01BC","vr":"DS","vm":"1","name":"SetupDeviceParameter"},"x300A01D0":{"tag":"x300A01D0","vr":"ST","vm":"1","name":"SetupReferenceDescription"},"x300A01D2":{"tag":"x300A01D2","vr":"DS","vm":"1","name":"TableTopVerticalSetupDisplacement"},"x300A01D4":{"tag":"x300A01D4","vr":"DS","vm":"1","name":"TableTopLongitudinalSetupDisplacement"},"x300A01D6":{"tag":"x300A01D6","vr":"DS","vm":"1","name":"TableTopLateralSetupDisplacement"},"x300A0200":{"tag":"x300A0200","vr":"CS","vm":"1","name":"BrachyTreatmentTechnique"},"x300A0202":{"tag":"x300A0202","vr":"CS","vm":"1","name":"BrachyTreatmentType"},"x300A0206":{"tag":"x300A0206","vr":"SQ","vm":"1","name":"TreatmentMachineSequence"},"x300A0210":{"tag":"x300A0210","vr":"SQ","vm":"1","name":"SourceSequence"},"x300A0212":{"tag":"x300A0212","vr":"IS","vm":"1","name":"SourceNumber"},"x300A0214":{"tag":"x300A0214","vr":"CS","vm":"1","name":"SourceType"},"x300A0216":{"tag":"x300A0216","vr":"LO","vm":"1","name":"SourceManufacturer"},"x300A0218":{"tag":"x300A0218","vr":"DS","vm":"1","name":"ActiveSourceDiameter"},"x300A021A":{"tag":"x300A021A","vr":"DS","vm":"1","name":"ActiveSourceLength"},"x300A0222":{"tag":"x300A0222","vr":"DS","vm":"1","name":"SourceEncapsulationNominalThickness"},"x300A0224":{"tag":"x300A0224","vr":"DS","vm":"1","name":"SourceEncapsulationNominalTransmission"},"x300A0226":{"tag":"x300A0226","vr":"LO","vm":"1","name":"SourceIsotopeName"},"x300A0228":{"tag":"x300A0228","vr":"DS","vm":"1","name":"SourceIsotopeHalfLife"},"x300A0229":{"tag":"x300A0229","vr":"CS","vm":"1","name":"SourceStrengthUnits"},"x300A022A":{"tag":"x300A022A","vr":"DS","vm":"1","name":"ReferenceAirKermaRate"},"x300A022B":{"tag":"x300A022B","vr":"DS","vm":"1","name":"SourceStrength"},"x300A022C":{"tag":"x300A022C","vr":"DA","vm":"1","name":"SourceStrengthReferenceDate"},"x300A022E":{"tag":"x300A022E","vr":"TM","vm":"1","name":"SourceStrengthReferenceTime"},"x300A0230":{"tag":"x300A0230","vr":"SQ","vm":"1","name":"ApplicationSetupSequence"},"x300A0232":{"tag":"x300A0232","vr":"CS","vm":"1","name":"ApplicationSetupType"},"x300A0234":{"tag":"x300A0234","vr":"IS","vm":"1","name":"ApplicationSetupNumber"},"x300A0236":{"tag":"x300A0236","vr":"LO","vm":"1","name":"ApplicationSetupName"},"x300A0238":{"tag":"x300A0238","vr":"LO","vm":"1","name":"ApplicationSetupManufacturer"},"x300A0240":{"tag":"x300A0240","vr":"IS","vm":"1","name":"TemplateNumber"},"x300A0242":{"tag":"x300A0242","vr":"SH","vm":"1","name":"TemplateType"},"x300A0244":{"tag":"x300A0244","vr":"LO","vm":"1","name":"TemplateName"},"x300A0250":{"tag":"x300A0250","vr":"DS","vm":"1","name":"TotalReferenceAirKerma"},"x300A0260":{"tag":"x300A0260","vr":"SQ","vm":"1","name":"BrachyAccessoryDeviceSequence"},"x300A0262":{"tag":"x300A0262","vr":"IS","vm":"1","name":"BrachyAccessoryDeviceNumber"},"x300A0263":{"tag":"x300A0263","vr":"SH","vm":"1","name":"BrachyAccessoryDeviceID"},"x300A0264":{"tag":"x300A0264","vr":"CS","vm":"1","name":"BrachyAccessoryDeviceType"},"x300A0266":{"tag":"x300A0266","vr":"LO","vm":"1","name":"BrachyAccessoryDeviceName"},"x300A026A":{"tag":"x300A026A","vr":"DS","vm":"1","name":"BrachyAccessoryDeviceNominalThickness"},"x300A026C":{"tag":"x300A026C","vr":"DS","vm":"1","name":"BrachyAccessoryDeviceNominalTransmission"},"x300A0280":{"tag":"x300A0280","vr":"SQ","vm":"1","name":"ChannelSequence"},"x300A0282":{"tag":"x300A0282","vr":"IS","vm":"1","name":"ChannelNumber"},"x300A0284":{"tag":"x300A0284","vr":"DS","vm":"1","name":"ChannelLength"},"x300A0286":{"tag":"x300A0286","vr":"DS","vm":"1","name":"ChannelTotalTime"},"x300A0288":{"tag":"x300A0288","vr":"CS","vm":"1","name":"SourceMovementType"},"x300A028A":{"tag":"x300A028A","vr":"IS","vm":"1","name":"NumberOfPulses"},"x300A028C":{"tag":"x300A028C","vr":"DS","vm":"1","name":"PulseRepetitionInterval"},"x300A0290":{"tag":"x300A0290","vr":"IS","vm":"1","name":"SourceApplicatorNumber"},"x300A0291":{"tag":"x300A0291","vr":"SH","vm":"1","name":"SourceApplicatorID"},"x300A0292":{"tag":"x300A0292","vr":"CS","vm":"1","name":"SourceApplicatorType"},"x300A0294":{"tag":"x300A0294","vr":"LO","vm":"1","name":"SourceApplicatorName"},"x300A0296":{"tag":"x300A0296","vr":"DS","vm":"1","name":"SourceApplicatorLength"},"x300A0298":{"tag":"x300A0298","vr":"LO","vm":"1","name":"SourceApplicatorManufacturer"},"x300A029C":{"tag":"x300A029C","vr":"DS","vm":"1","name":"SourceApplicatorWallNominalThickness"},"x300A029E":{"tag":"x300A029E","vr":"DS","vm":"1","name":"SourceApplicatorWallNominalTransmission"},"x300A02A0":{"tag":"x300A02A0","vr":"DS","vm":"1","name":"SourceApplicatorStepSize"},"x300A02A2":{"tag":"x300A02A2","vr":"IS","vm":"1","name":"TransferTubeNumber"},"x300A02A4":{"tag":"x300A02A4","vr":"DS","vm":"1","name":"TransferTubeLength"},"x300A02B0":{"tag":"x300A02B0","vr":"SQ","vm":"1","name":"ChannelShieldSequence"},"x300A02B2":{"tag":"x300A02B2","vr":"IS","vm":"1","name":"ChannelShieldNumber"},"x300A02B3":{"tag":"x300A02B3","vr":"SH","vm":"1","name":"ChannelShieldID"},"x300A02B4":{"tag":"x300A02B4","vr":"LO","vm":"1","name":"ChannelShieldName"},"x300A02B8":{"tag":"x300A02B8","vr":"DS","vm":"1","name":"ChannelShieldNominalThickness"},"x300A02BA":{"tag":"x300A02BA","vr":"DS","vm":"1","name":"ChannelShieldNominalTransmission"},"x300A02C8":{"tag":"x300A02C8","vr":"DS","vm":"1","name":"FinalCumulativeTimeWeight"},"x300A02D0":{"tag":"x300A02D0","vr":"SQ","vm":"1","name":"BrachyControlPointSequence"},"x300A02D2":{"tag":"x300A02D2","vr":"DS","vm":"1","name":"ControlPointRelativePosition"},"x300A02D4":{"tag":"x300A02D4","vr":"DS","vm":"3","name":"ControlPoint3DPosition"},"x300A02D6":{"tag":"x300A02D6","vr":"DS","vm":"1","name":"CumulativeTimeWeight"},"x300A02E0":{"tag":"x300A02E0","vr":"CS","vm":"1","name":"CompensatorDivergence"},"x300A02E1":{"tag":"x300A02E1","vr":"CS","vm":"1","name":"CompensatorMountingPosition"},"x300A02E2":{"tag":"x300A02E2","vr":"DS","vm":"1-n","name":"SourceToCompensatorDistance"},"x300A02E3":{"tag":"x300A02E3","vr":"FL","vm":"1","name":"TotalCompensatorTrayWaterEquivalentThickness"},"x300A02E4":{"tag":"x300A02E4","vr":"FL","vm":"1","name":"IsocenterToCompensatorTrayDistance"},"x300A02E5":{"tag":"x300A02E5","vr":"FL","vm":"1","name":"CompensatorColumnOffset"},"x300A02E6":{"tag":"x300A02E6","vr":"FL","vm":"1-n","name":"IsocenterToCompensatorDistances"},"x300A02E7":{"tag":"x300A02E7","vr":"FL","vm":"1","name":"CompensatorRelativeStoppingPowerRatio"},"x300A02E8":{"tag":"x300A02E8","vr":"FL","vm":"1","name":"CompensatorMillingToolDiameter"},"x300A02EA":{"tag":"x300A02EA","vr":"SQ","vm":"1","name":"IonRangeCompensatorSequence"},"x300A02EB":{"tag":"x300A02EB","vr":"LT","vm":"1","name":"CompensatorDescription"},"x300A0302":{"tag":"x300A0302","vr":"IS","vm":"1","name":"RadiationMassNumber"},"x300A0304":{"tag":"x300A0304","vr":"IS","vm":"1","name":"RadiationAtomicNumber"},"x300A0306":{"tag":"x300A0306","vr":"SS","vm":"1","name":"RadiationChargeState"},"x300A0308":{"tag":"x300A0308","vr":"CS","vm":"1","name":"ScanMode"},"x300A030A":{"tag":"x300A030A","vr":"FL","vm":"2","name":"VirtualSourceAxisDistances"},"x300A030C":{"tag":"x300A030C","vr":"SQ","vm":"1","name":"SnoutSequence"},"x300A030D":{"tag":"x300A030D","vr":"FL","vm":"1","name":"SnoutPosition"},"x300A030F":{"tag":"x300A030F","vr":"SH","vm":"1","name":"SnoutID"},"x300A0312":{"tag":"x300A0312","vr":"IS","vm":"1","name":"NumberOfRangeShifters"},"x300A0314":{"tag":"x300A0314","vr":"SQ","vm":"1","name":"RangeShifterSequence"},"x300A0316":{"tag":"x300A0316","vr":"IS","vm":"1","name":"RangeShifterNumber"},"x300A0318":{"tag":"x300A0318","vr":"SH","vm":"1","name":"RangeShifterID"},"x300A0320":{"tag":"x300A0320","vr":"CS","vm":"1","name":"RangeShifterType"},"x300A0322":{"tag":"x300A0322","vr":"LO","vm":"1","name":"RangeShifterDescription"},"x300A0330":{"tag":"x300A0330","vr":"IS","vm":"1","name":"NumberOfLateralSpreadingDevices"},"x300A0332":{"tag":"x300A0332","vr":"SQ","vm":"1","name":"LateralSpreadingDeviceSequence"},"x300A0334":{"tag":"x300A0334","vr":"IS","vm":"1","name":"LateralSpreadingDeviceNumber"},"x300A0336":{"tag":"x300A0336","vr":"SH","vm":"1","name":"LateralSpreadingDeviceID"},"x300A0338":{"tag":"x300A0338","vr":"CS","vm":"1","name":"LateralSpreadingDeviceType"},"x300A033A":{"tag":"x300A033A","vr":"LO","vm":"1","name":"LateralSpreadingDeviceDescription"},"x300A033C":{"tag":"x300A033C","vr":"FL","vm":"1","name":"LateralSpreadingDeviceWaterEquivalentThickness"},"x300A0340":{"tag":"x300A0340","vr":"IS","vm":"1","name":"NumberOfRangeModulators"},"x300A0342":{"tag":"x300A0342","vr":"SQ","vm":"1","name":"RangeModulatorSequence"},"x300A0344":{"tag":"x300A0344","vr":"IS","vm":"1","name":"RangeModulatorNumber"},"x300A0346":{"tag":"x300A0346","vr":"SH","vm":"1","name":"RangeModulatorID"},"x300A0348":{"tag":"x300A0348","vr":"CS","vm":"1","name":"RangeModulatorType"},"x300A034A":{"tag":"x300A034A","vr":"LO","vm":"1","name":"RangeModulatorDescription"},"x300A034C":{"tag":"x300A034C","vr":"SH","vm":"1","name":"BeamCurrentModulationID"},"x300A0350":{"tag":"x300A0350","vr":"CS","vm":"1","name":"PatientSupportType"},"x300A0352":{"tag":"x300A0352","vr":"SH","vm":"1","name":"PatientSupportID"},"x300A0354":{"tag":"x300A0354","vr":"LO","vm":"1","name":"PatientSupportAccessoryCode"},"x300A0356":{"tag":"x300A0356","vr":"FL","vm":"1","name":"FixationLightAzimuthalAngle"},"x300A0358":{"tag":"x300A0358","vr":"FL","vm":"1","name":"FixationLightPolarAngle"},"x300A035A":{"tag":"x300A035A","vr":"FL","vm":"1","name":"MetersetRate"},"x300A0360":{"tag":"x300A0360","vr":"SQ","vm":"1","name":"RangeShifterSettingsSequence"},"x300A0362":{"tag":"x300A0362","vr":"LO","vm":"1","name":"RangeShifterSetting"},"x300A0364":{"tag":"x300A0364","vr":"FL","vm":"1","name":"IsocenterToRangeShifterDistance"},"x300A0366":{"tag":"x300A0366","vr":"FL","vm":"1","name":"RangeShifterWaterEquivalentThickness"},"x300A0370":{"tag":"x300A0370","vr":"SQ","vm":"1","name":"LateralSpreadingDeviceSettingsSequence"},"x300A0372":{"tag":"x300A0372","vr":"LO","vm":"1","name":"LateralSpreadingDeviceSetting"},"x300A0374":{"tag":"x300A0374","vr":"FL","vm":"1","name":"IsocenterToLateralSpreadingDeviceDistance"},"x300A0380":{"tag":"x300A0380","vr":"SQ","vm":"1","name":"RangeModulatorSettingsSequence"},"x300A0382":{"tag":"x300A0382","vr":"FL","vm":"1","name":"RangeModulatorGatingStartValue"},"x300A0384":{"tag":"x300A0384","vr":"FL","vm":"1","name":"RangeModulatorGatingStopValue"},"x300A0386":{"tag":"x300A0386","vr":"FL","vm":"1","name":"RangeModulatorGatingStartWaterEquivalentThickness"},"x300A0388":{"tag":"x300A0388","vr":"FL","vm":"1","name":"RangeModulatorGatingStopWaterEquivalentThickness"},"x300A038A":{"tag":"x300A038A","vr":"FL","vm":"1","name":"IsocenterToRangeModulatorDistance"},"x300A0390":{"tag":"x300A0390","vr":"SH","vm":"1","name":"ScanSpotTuneID"},"x300A0392":{"tag":"x300A0392","vr":"IS","vm":"1","name":"NumberOfScanSpotPositions"},"x300A0394":{"tag":"x300A0394","vr":"FL","vm":"1-n","name":"ScanSpotPositionMap"},"x300A0396":{"tag":"x300A0396","vr":"FL","vm":"1-n","name":"ScanSpotMetersetWeights"},"x300A0398":{"tag":"x300A0398","vr":"FL","vm":"2","name":"ScanningSpotSize"},"x300A039A":{"tag":"x300A039A","vr":"IS","vm":"1","name":"NumberOfPaintings"},"x300A03A0":{"tag":"x300A03A0","vr":"SQ","vm":"1","name":"IonToleranceTableSequence"},"x300A03A2":{"tag":"x300A03A2","vr":"SQ","vm":"1","name":"IonBeamSequence"},"x300A03A4":{"tag":"x300A03A4","vr":"SQ","vm":"1","name":"IonBeamLimitingDeviceSequence"},"x300A03A6":{"tag":"x300A03A6","vr":"SQ","vm":"1","name":"IonBlockSequence"},"x300A03A8":{"tag":"x300A03A8","vr":"SQ","vm":"1","name":"IonControlPointSequence"},"x300A03AA":{"tag":"x300A03AA","vr":"SQ","vm":"1","name":"IonWedgeSequence"},"x300A03AC":{"tag":"x300A03AC","vr":"SQ","vm":"1","name":"IonWedgePositionSequence"},"x300A0401":{"tag":"x300A0401","vr":"SQ","vm":"1","name":"ReferencedSetupImageSequence"},"x300A0402":{"tag":"x300A0402","vr":"ST","vm":"1","name":"SetupImageComment"},"x300A0410":{"tag":"x300A0410","vr":"SQ","vm":"1","name":"MotionSynchronizationSequence"},"x300A0412":{"tag":"x300A0412","vr":"FL","vm":"3","name":"ControlPointOrientation"},"x300A0420":{"tag":"x300A0420","vr":"SQ","vm":"1","name":"GeneralAccessorySequence"},"x300A0421":{"tag":"x300A0421","vr":"SH","vm":"1","name":"GeneralAccessoryID"},"x300A0422":{"tag":"x300A0422","vr":"ST","vm":"1","name":"GeneralAccessoryDescription"},"x300A0423":{"tag":"x300A0423","vr":"CS","vm":"1","name":"GeneralAccessoryType"},"x300A0424":{"tag":"x300A0424","vr":"IS","vm":"1","name":"GeneralAccessoryNumber"},"x300A0431":{"tag":"x300A0431","vr":"SQ","vm":"1","name":"ApplicatorGeometrySequence"},"x300A0432":{"tag":"x300A0432","vr":"CS","vm":"1","name":"ApplicatorApertureShape"},"x300A0433":{"tag":"x300A0433","vr":"FL","vm":"1","name":"ApplicatorOpening"},"x300A0434":{"tag":"x300A0434","vr":"FL","vm":"1","name":"ApplicatorOpeningX"},"x300A0435":{"tag":"x300A0435","vr":"FL","vm":"1","name":"ApplicatorOpeningY"},"x300A0436":{"tag":"x300A0436","vr":"FL","vm":"1","name":"SourceToApplicatorMountingPositionDistance"},"x300C0002":{"tag":"x300C0002","vr":"SQ","vm":"1","name":"ReferencedRTPlanSequence"},"x300C0004":{"tag":"x300C0004","vr":"SQ","vm":"1","name":"ReferencedBeamSequence"},"x300C0006":{"tag":"x300C0006","vr":"IS","vm":"1","name":"ReferencedBeamNumber"},"x300C0007":{"tag":"x300C0007","vr":"IS","vm":"1","name":"ReferencedReferenceImageNumber"},"x300C0008":{"tag":"x300C0008","vr":"DS","vm":"1","name":"StartCumulativeMetersetWeight"},"x300C0009":{"tag":"x300C0009","vr":"DS","vm":"1","name":"EndCumulativeMetersetWeight"},"x300C000A":{"tag":"x300C000A","vr":"SQ","vm":"1","name":"ReferencedBrachyApplicationSetupSequence"},"x300C000C":{"tag":"x300C000C","vr":"IS","vm":"1","name":"ReferencedBrachyApplicationSetupNumber"},"x300C000E":{"tag":"x300C000E","vr":"IS","vm":"1","name":"ReferencedSourceNumber"},"x300C0020":{"tag":"x300C0020","vr":"SQ","vm":"1","name":"ReferencedFractionGroupSequence"},"x300C0022":{"tag":"x300C0022","vr":"IS","vm":"1","name":"ReferencedFractionGroupNumber"},"x300C0040":{"tag":"x300C0040","vr":"SQ","vm":"1","name":"ReferencedVerificationImageSequence"},"x300C0042":{"tag":"x300C0042","vr":"SQ","vm":"1","name":"ReferencedReferenceImageSequence"},"x300C0050":{"tag":"x300C0050","vr":"SQ","vm":"1","name":"ReferencedDoseReferenceSequence"},"x300C0051":{"tag":"x300C0051","vr":"IS","vm":"1","name":"ReferencedDoseReferenceNumber"},"x300C0055":{"tag":"x300C0055","vr":"SQ","vm":"1","name":"BrachyReferencedDoseReferenceSequence"},"x300C0060":{"tag":"x300C0060","vr":"SQ","vm":"1","name":"ReferencedStructureSetSequence"},"x300C006A":{"tag":"x300C006A","vr":"IS","vm":"1","name":"ReferencedPatientSetupNumber"},"x300C0080":{"tag":"x300C0080","vr":"SQ","vm":"1","name":"ReferencedDoseSequence"},"x300C00A0":{"tag":"x300C00A0","vr":"IS","vm":"1","name":"ReferencedToleranceTableNumber"},"x300C00B0":{"tag":"x300C00B0","vr":"SQ","vm":"1","name":"ReferencedBolusSequence"},"x300C00C0":{"tag":"x300C00C0","vr":"IS","vm":"1","name":"ReferencedWedgeNumber"},"x300C00D0":{"tag":"x300C00D0","vr":"IS","vm":"1","name":"ReferencedCompensatorNumber"},"x300C00E0":{"tag":"x300C00E0","vr":"IS","vm":"1","name":"ReferencedBlockNumber"},"x300C00F0":{"tag":"x300C00F0","vr":"IS","vm":"1","name":"ReferencedControlPointIndex"},"x300C00F2":{"tag":"x300C00F2","vr":"SQ","vm":"1","name":"ReferencedControlPointSequence"},"x300C00F4":{"tag":"x300C00F4","vr":"IS","vm":"1","name":"ReferencedStartControlPointIndex"},"x300C00F6":{"tag":"x300C00F6","vr":"IS","vm":"1","name":"ReferencedStopControlPointIndex"},"x300C0100":{"tag":"x300C0100","vr":"IS","vm":"1","name":"ReferencedRangeShifterNumber"},"x300C0102":{"tag":"x300C0102","vr":"IS","vm":"1","name":"ReferencedLateralSpreadingDeviceNumber"},"x300C0104":{"tag":"x300C0104","vr":"IS","vm":"1","name":"ReferencedRangeModulatorNumber"},"x300E0002":{"tag":"x300E0002","vr":"CS","vm":"1","name":"ApprovalStatus"},"x300E0004":{"tag":"x300E0004","vr":"DA","vm":"1","name":"ReviewDate"},"x300E0005":{"tag":"x300E0005","vr":"TM","vm":"1","name":"ReviewTime"},"x300E0008":{"tag":"x300E0008","vr":"PN","vm":"1","name":"ReviewerName"},"x40000010":{"tag":"x40000010","vr":"LT","vm":"1","name":"Arbitrary"},"x40004000":{"tag":"x40004000","vr":"LT","vm":"1","name":"TextComments"},"x40080040":{"tag":"x40080040","vr":"SH","vm":"1","name":"ResultsID"},"x40080042":{"tag":"x40080042","vr":"LO","vm":"1","name":"ResultsIDIssuer"},"x40080050":{"tag":"x40080050","vr":"SQ","vm":"1","name":"ReferencedInterpretationSequence"},"x400800FF":{"tag":"x400800FF","vr":"CS","vm":"1","name":"ReportProductionStatusTrial"},"x40080100":{"tag":"x40080100","vr":"DA","vm":"1","name":"InterpretationRecordedDate"},"x40080101":{"tag":"x40080101","vr":"TM","vm":"1","name":"InterpretationRecordedTime"},"x40080102":{"tag":"x40080102","vr":"PN","vm":"1","name":"InterpretationRecorder"},"x40080103":{"tag":"x40080103","vr":"LO","vm":"1","name":"ReferenceToRecordedSound"},"x40080108":{"tag":"x40080108","vr":"DA","vm":"1","name":"InterpretationTranscriptionDate"},"x40080109":{"tag":"x40080109","vr":"TM","vm":"1","name":"InterpretationTranscriptionTime"},"x4008010A":{"tag":"x4008010A","vr":"PN","vm":"1","name":"InterpretationTranscriber"},"x4008010B":{"tag":"x4008010B","vr":"ST","vm":"1","name":"InterpretationText"},"x4008010C":{"tag":"x4008010C","vr":"PN","vm":"1","name":"InterpretationAuthor"},"x40080111":{"tag":"x40080111","vr":"SQ","vm":"1","name":"InterpretationApproverSequence"},"x40080112":{"tag":"x40080112","vr":"DA","vm":"1","name":"InterpretationApprovalDate"},"x40080113":{"tag":"x40080113","vr":"TM","vm":"1","name":"InterpretationApprovalTime"},"x40080114":{"tag":"x40080114","vr":"PN","vm":"1","name":"PhysicianApprovingInterpretation"},"x40080115":{"tag":"x40080115","vr":"LT","vm":"1","name":"InterpretationDiagnosisDescription"},"x40080117":{"tag":"x40080117","vr":"SQ","vm":"1","name":"InterpretationDiagnosisCodeSequence"},"x40080118":{"tag":"x40080118","vr":"SQ","vm":"1","name":"ResultsDistributionListSequence"},"x40080119":{"tag":"x40080119","vr":"PN","vm":"1","name":"DistributionName"},"x4008011A":{"tag":"x4008011A","vr":"LO","vm":"1","name":"DistributionAddress"},"x40080200":{"tag":"x40080200","vr":"SH","vm":"1","name":"InterpretationID"},"x40080202":{"tag":"x40080202","vr":"LO","vm":"1","name":"InterpretationIDIssuer"},"x40080210":{"tag":"x40080210","vr":"CS","vm":"1","name":"InterpretationTypeID"},"x40080212":{"tag":"x40080212","vr":"CS","vm":"1","name":"InterpretationStatusID"},"x40080300":{"tag":"x40080300","vr":"ST","vm":"1","name":"Impressions"},"x40084000":{"tag":"x40084000","vr":"ST","vm":"1 ","name":"ResultsComments"},"x40100001":{"tag":"x40100001","vr":"CS","vm":"1","name":"LowEnergyDetectors"},"x40100002":{"tag":"x40100002","vr":"CS","vm":"1","name":"HighEnergyDetectors"},"x40100004":{"tag":"x40100004","vr":"SQ","vm":"1","name":"DetectorGeometrySequence"},"x40101001":{"tag":"x40101001","vr":"SQ","vm":"1","name":"ThreatROIVoxelSequence"},"x40101004":{"tag":"x40101004","vr":"FL","vm":"3","name":"ThreatROIBase"},"x40101005":{"tag":"x40101005","vr":"FL","vm":"3","name":"ThreatROIExtents"},"x40101006":{"tag":"x40101006","vr":"OB","vm":"1","name":"ThreatROIBitmap"},"x40101007":{"tag":"x40101007","vr":"SH","vm":"1","name":"RouteSegmentID"},"x40101008":{"tag":"x40101008","vr":"CS","vm":"1","name":"GantryType"},"x40101009":{"tag":"x40101009","vr":"CS","vm":"1","name":"OOIOwnerType"},"x4010100A":{"tag":"x4010100A","vr":"SQ","vm":"1","name":"RouteSegmentSequence"},"x40101010":{"tag":"x40101010","vr":"US","vm":"1","name":"PotentialThreatObjectID"},"x40101011":{"tag":"x40101011","vr":"SQ","vm":"1","name":"ThreatSequence"},"x40101012":{"tag":"x40101012","vr":"CS","vm":"1","name":"ThreatCategory"},"x40101013":{"tag":"x40101013","vr":"LT","vm":"1","name":"ThreatCategoryDescription"},"x40101014":{"tag":"x40101014","vr":"CS","vm":"1","name":"ATDAbilityAssessment"},"x40101015":{"tag":"x40101015","vr":"CS","vm":"1","name":"ATDAssessmentFlag"},"x40101016":{"tag":"x40101016","vr":"FL","vm":"1","name":"ATDAssessmentProbability"},"x40101017":{"tag":"x40101017","vr":"FL","vm":"1","name":"Mass"},"x40101018":{"tag":"x40101018","vr":"FL","vm":"1","name":"Density"},"x40101019":{"tag":"x40101019","vr":"FL","vm":"1","name":"ZEffective"},"x4010101A":{"tag":"x4010101A","vr":"SH","vm":"1","name":"BoardingPassID"},"x4010101B":{"tag":"x4010101B","vr":"FL","vm":"3","name":"CenterOfMass"},"x4010101C":{"tag":"x4010101C","vr":"FL","vm":"3","name":"CenterOfPTO"},"x4010101D":{"tag":"x4010101D","vr":"FL","vm":"6-n","name":"BoundingPolygon"},"x4010101E":{"tag":"x4010101E","vr":"SH","vm":"1","name":"RouteSegmentStartLocationID"},"x4010101F":{"tag":"x4010101F","vr":"SH","vm":"1","name":"RouteSegmentEndLocationID"},"x40101020":{"tag":"x40101020","vr":"CS","vm":"1","name":"RouteSegmentLocationIDType"},"x40101021":{"tag":"x40101021","vr":"CS","vm":"1-n","name":"AbortReason"},"x40101023":{"tag":"x40101023","vr":"FL","vm":"1","name":"VolumeOfPTO"},"x40101024":{"tag":"x40101024","vr":"CS","vm":"1","name":"AbortFlag"},"x40101025":{"tag":"x40101025","vr":"DT","vm":"1","name":"RouteSegmentStartTime"},"x40101026":{"tag":"x40101026","vr":"DT","vm":"1","name":"RouteSegmentEndTime"},"x40101027":{"tag":"x40101027","vr":"CS","vm":"1","name":"TDRType"},"x40101028":{"tag":"x40101028","vr":"CS","vm":"1","name":"InternationalRouteSegment"},"x40101029":{"tag":"x40101029","vr":"LO","vm":"1-n","name":"ThreatDetectionAlgorithmandVersion"},"x4010102A":{"tag":"x4010102A","vr":"SH","vm":"1","name":"AssignedLocation"},"x4010102B":{"tag":"x4010102B","vr":"DT","vm":"1","name":"AlarmDecisionTime"},"x40101031":{"tag":"x40101031","vr":"CS","vm":"1","name":"AlarmDecision"},"x40101033":{"tag":"x40101033","vr":"US","vm":"1","name":"NumberOfTotalObjects"},"x40101034":{"tag":"x40101034","vr":"US","vm":"1","name":"NumberOfAlarmObjects"},"x40101037":{"tag":"x40101037","vr":"SQ","vm":"1","name":"PTORepresentationSequence"},"x40101038":{"tag":"x40101038","vr":"SQ","vm":"1","name":"ATDAssessmentSequence"},"x40101039":{"tag":"x40101039","vr":"CS","vm":"1","name":"TIPType"},"x4010103A":{"tag":"x4010103A","vr":"CS","vm":"1","name":"DICOSVersion"},"x40101041":{"tag":"x40101041","vr":"DT","vm":"1","name":"OOIOwnerCreationTime"},"x40101042":{"tag":"x40101042","vr":"CS","vm":"1","name":"OOIType"},"x40101043":{"tag":"x40101043","vr":"FL","vm":"3","name":"OOISize"},"x40101044":{"tag":"x40101044","vr":"CS","vm":"1","name":"AcquisitionStatus"},"x40101045":{"tag":"x40101045","vr":"SQ","vm":"1","name":"BasisMaterialsCodeSequence"},"x40101046":{"tag":"x40101046","vr":"CS","vm":"1","name":"PhantomType"},"x40101047":{"tag":"x40101047","vr":"SQ","vm":"1","name":"OOIOwnerSequence"},"x40101048":{"tag":"x40101048","vr":"CS","vm":"1","name":"ScanType"},"x40101051":{"tag":"x40101051","vr":"LO","vm":"1","name":"ItineraryID"},"x40101052":{"tag":"x40101052","vr":"SH","vm":"1","name":"ItineraryIDType"},"x40101053":{"tag":"x40101053","vr":"LO","vm":"1","name":"ItineraryIDAssigningAuthority"},"x40101054":{"tag":"x40101054","vr":"SH","vm":"1","name":"RouteID"},"x40101055":{"tag":"x40101055","vr":"SH","vm":"1","name":"RouteIDAssigningAuthority"},"x40101056":{"tag":"x40101056","vr":"CS","vm":"1","name":"InboundArrivalType"},"x40101058":{"tag":"x40101058","vr":"SH","vm":"1","name":"CarrierID"},"x40101059":{"tag":"x40101059","vr":"CS","vm":"1","name":"CarrierIDAssigningAuthority"},"x40101060":{"tag":"x40101060","vr":"FL","vm":"3","name":"SourceOrientation"},"x40101061":{"tag":"x40101061","vr":"FL","vm":"3","name":"SourcePosition"},"x40101062":{"tag":"x40101062","vr":"FL","vm":"1","name":"BeltHeight"},"x40101064":{"tag":"x40101064","vr":"SQ","vm":"1","name":"AlgorithmRoutingCodeSequence"},"x40101067":{"tag":"x40101067","vr":"CS","vm":"1","name":"TransportClassification"},"x40101068":{"tag":"x40101068","vr":"LT","vm":"1","name":"OOITypeDescriptor"},"x40101069":{"tag":"x40101069","vr":"FL","vm":"1","name":"TotalProcessingTime"},"x4010106C":{"tag":"x4010106C","vr":"OB","vm":"1","name":"DetectorCalibrationData"},"x4FFE0001":{"tag":"x4FFE0001","vr":"SQ","vm":"1","name":"MACParametersSequence"},"x50xx0005":{"tag":"x50xx0005","vr":"US","vm":"1","name":"CurveDimensions"},"x50xx0010":{"tag":"x50xx0010","vr":"US","vm":"1","name":"NumberOfPoints"},"x50xx0020":{"tag":"x50xx0020","vr":"CS","vm":"1","name":"TypeOfData"},"x50xx0022":{"tag":"x50xx0022","vr":"LO","vm":"1","name":"CurveDescription"},"x50xx0030":{"tag":"x50xx0030","vr":"SH","vm":"1-n","name":"AxisUnits"},"x50xx0040":{"tag":"x50xx0040","vr":"SH","vm":"1-n","name":"AxisLabels"},"x50xx0103":{"tag":"x50xx0103","vr":"US","vm":"1","name":"DataValueRepresentation"},"x50xx0104":{"tag":"x50xx0104","vr":"US","vm":"1-n","name":"MinimumCoordinateValue"},"x50xx0105":{"tag":"x50xx0105","vr":"US","vm":"1-n","name":"MaximumCoordinateValue"},"x50xx0106":{"tag":"x50xx0106","vr":"SH","vm":"1-n","name":"CurveRange"},"x50xx0110":{"tag":"x50xx0110","vr":"US","vm":"1-n","name":"CurveDataDescriptor"},"x50xx0112":{"tag":"x50xx0112","vr":"US","vm":"1-n","name":"CoordinateStartValue"},"x50xx0114":{"tag":"x50xx0114","vr":"US","vm":"1-n","name":"CoordinateStepValue"},"x50xx1001":{"tag":"x50xx1001","vr":"CS","vm":"1","name":"CurveActivationLayer"},"x50xx2000":{"tag":"x50xx2000","vr":"US","vm":"1","name":"AudioType"},"x50xx2002":{"tag":"x50xx2002","vr":"US","vm":"1","name":"AudioSampleFormat"},"x50xx2004":{"tag":"x50xx2004","vr":"US","vm":"1","name":"NumberOfChannels"},"x50xx2006":{"tag":"x50xx2006","vr":"UL","vm":"1","name":"NumberOfSamples"},"x50xx2008":{"tag":"x50xx2008","vr":"UL","vm":"1","name":"SampleRate"},"x50xx200A":{"tag":"x50xx200A","vr":"UL","vm":"1","name":"TotalTime"},"x50xx200C":{"tag":"x50xx200C","vr":"OW|OB","vm":"1","name":"AudioSampleData"},"x50xx200E":{"tag":"x50xx200E","vr":"LT","vm":"1 ","name":"AudioComments"},"x50xx2500":{"tag":"x50xx2500","vr":"LO","vm":"1","name":"CurveLabel"},"x50xx2600":{"tag":"x50xx2600","vr":"SQ","vm":"1","name":"CurveReferencedOverlaySequence"},"x50xx2610":{"tag":"x50xx2610","vr":"US","vm":"1","name":"CurveReferencedOverlayGroup"},"x50xx3000":{"tag":"x50xx3000","vr":"OW|OB","vm":"1","name":"CurveData"},"x52009229":{"tag":"x52009229","vr":"SQ","vm":"1","name":"SharedFunctionalGroupsSequence"},"x52009230":{"tag":"x52009230","vr":"SQ","vm":"1","name":"PerFrameFunctionalGroupsSequence"},"x54000100":{"tag":"x54000100","vr":"SQ","vm":"1","name":"WaveformSequence"},"x54000110":{"tag":"x54000110","vr":"OB|OW","vm":"1","name":"ChannelMinimumValue"},"x54000112":{"tag":"x54000112","vr":"OB|OW","vm":"1","name":"ChannelMaximumValue"},"x54001004":{"tag":"x54001004","vr":"US","vm":"1","name":"WaveformBitsAllocated"},"x54001006":{"tag":"x54001006","vr":"CS","vm":"1","name":"WaveformSampleInterpretation"},"x5400100A":{"tag":"x5400100A","vr":"OB|OW","vm":"1","name":"WaveformPaddingValue"},"x54001010":{"tag":"x54001010","vr":"OB|OW","vm":"1","name":"WaveformData"},"x56000010":{"tag":"x56000010","vr":"OF","vm":"1","name":"FirstOrderPhaseCorrectionAngle"},"x56000020":{"tag":"x56000020","vr":"OF","vm":"1","name":"SpectroscopyData"},"x60xx0010":{"tag":"x60xx0010","vr":"US","vm":"1","name":"OverlayRows"},"x60xx0011":{"tag":"x60xx0011","vr":"US","vm":"1","name":"OverlayColumns"},"x60xx0012":{"tag":"x60xx0012","vr":"US","vm":"1","name":"OverlayPlanes"},"x60xx0015":{"tag":"x60xx0015","vr":"IS","vm":"1","name":"NumberOfFramesInOverlay"},"x60xx0022":{"tag":"x60xx0022","vr":"LO","vm":"1","name":"OverlayDescription"},"x60xx0040":{"tag":"x60xx0040","vr":"CS","vm":"1","name":"OverlayType"},"x60xx0045":{"tag":"x60xx0045","vr":"LO","vm":"1","name":"OverlaySubtype"},"x60xx0050":{"tag":"x60xx0050","vr":"SS","vm":"2","name":"OverlayOrigin"},"x60xx0051":{"tag":"x60xx0051","vr":"US","vm":"1","name":"ImageFrameOrigin"},"x60xx0052":{"tag":"x60xx0052","vr":"US","vm":"1","name":"OverlayPlaneOrigin"},"x60xx0060":{"tag":"x60xx0060","vr":"CS","vm":"1","name":"OverlayCompressionCode"},"x60xx0061":{"tag":"x60xx0061","vr":"SH","vm":"1","name":"OverlayCompressionOriginator"},"x60xx0062":{"tag":"x60xx0062","vr":"SH","vm":"1","name":"OverlayCompressionLabel"},"x60xx0063":{"tag":"x60xx0063","vr":"CS","vm":"1","name":"OverlayCompressionDescription"},"x60xx0066":{"tag":"x60xx0066","vr":"AT","vm":"1-n","name":"OverlayCompressionStepPointers"},"x60xx0068":{"tag":"x60xx0068","vr":"US","vm":"1","name":"OverlayRepeatInterval"},"x60xx0069":{"tag":"x60xx0069","vr":"US","vm":"1","name":"OverlayBitsGrouped"},"x60xx0100":{"tag":"x60xx0100","vr":"US","vm":"1","name":"OverlayBitsAllocated"},"x60xx0102":{"tag":"x60xx0102","vr":"US","vm":"1","name":"OverlayBitPosition"},"x60xx0110":{"tag":"x60xx0110","vr":"CS","vm":"1","name":"OverlayFormat"},"x60xx0200":{"tag":"x60xx0200","vr":"US","vm":"1","name":"OverlayLocation"},"x60xx0800":{"tag":"x60xx0800","vr":"CS","vm":"1-n","name":"OverlayCodeLabel"},"x60xx0802":{"tag":"x60xx0802","vr":"US","vm":"1","name":"OverlayNumberOfTables"},"x60xx0803":{"tag":"x60xx0803","vr":"AT","vm":"1-n","name":"OverlayCodeTableLocation"},"x60xx0804":{"tag":"x60xx0804","vr":"US","vm":"1","name":"OverlayBitsForCodeWord"},"x60xx1001":{"tag":"x60xx1001","vr":"CS","vm":"1","name":"OverlayActivationLayer"},"x60xx1100":{"tag":"x60xx1100","vr":"US","vm":"1","name":"OverlayDescriptorGray"},"x60xx1101":{"tag":"x60xx1101","vr":"US","vm":"1","name":"OverlayDescriptorRed"},"x60xx1102":{"tag":"x60xx1102","vr":"US","vm":"1","name":"OverlayDescriptorGreen"},"x60xx1103":{"tag":"x60xx1103","vr":"US","vm":"1","name":"OverlayDescriptorBlue"},"x60xx1200":{"tag":"x60xx1200","vr":"US","vm":"1-n","name":"OverlaysGray"},"x60xx1201":{"tag":"x60xx1201","vr":"US","vm":"1-n","name":"OverlaysRed"},"x60xx1202":{"tag":"x60xx1202","vr":"US","vm":"1-n","name":"OverlaysGreen"},"x60xx1203":{"tag":"x60xx1203","vr":"US","vm":"1-n","name":"OverlaysBlue"},"x60xx1301":{"tag":"x60xx1301","vr":"IS","vm":"1","name":"ROIArea"},"x60xx1302":{"tag":"x60xx1302","vr":"DS","vm":"1","name":"ROIMean"},"x60xx1303":{"tag":"x60xx1303","vr":"DS","vm":"1","name":"ROIStandardDeviation"},"x60xx1500":{"tag":"x60xx1500","vr":"LO","vm":"1","name":"OverlayLabel"},"x60xx3000":{"tag":"x60xx3000","vr":"OB|OW","vm":"1","name":"OverlayData"},"x60xx4000":{"tag":"x60xx4000","vr":"LT","vm":"1","name":"OverlayComments"},"x7FE00010":{"tag":"x7FE00010","vr":"OW|OB","vm":"1","name":"PixelData"},"x7FE00020":{"tag":"x7FE00020","vr":"OW","vm":"1","name":"CoefficientsSDVN"},"x7FE00030":{"tag":"x7FE00030","vr":"OW","vm":"1","name":"CoefficientsSDHN"},"x7FE00040":{"tag":"x7FE00040","vr":"OW","vm":"1","name":"CoefficientsSDDN"},"x7Fxx0010":{"tag":"x7Fxx0010","vr":"OW|OB","vm":"1","name":"VariablePixelData"},"x7Fxx0011":{"tag":"x7Fxx0011","vr":"US","vm":"1","name":"VariableNextDataGroup"},"x7Fxx0020":{"tag":"x7Fxx0020","vr":"OW","vm":"1","name":"VariableCoefficientsSDVN"},"x7Fxx0030":{"tag":"x7Fxx0030","vr":"OW","vm":"1","name":"VariableCoefficientsSDHN"},"x7Fxx0040":{"tag":"x7Fxx0040","vr":"OW","vm":"1","name":"VariableCoefficientsSDDN"},"xFFFAFFFA":{"tag":"xFFFAFFFA","vr":"SQ","vm":"1","name":"DigitalSignaturesSequence"},"xFFFCFFFC":{"tag":"xFFFCFFFC","vr":"OB","vm":"1","name":"DataSetTrailingPadding"},"xFFFEE000":{"tag":"xFFFEE000","vr":"","vm":"1","name":"Item"},"xFFFEE00D":{"tag":"xFFFEE00D","vr":"","vm":"1","name":"ItemDelimitationItem"},"xFFFEE0DD":{"tag":"xFFFEE0DD","vr":"","vm":"1","name":"SequenceDelimitationItem"}}');

/***/ }),

/***/ 4147:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse('{"name":"larvitar","keywords":["DICOM","imaging","medical","cornerstone"],"version":"2.1.12","description":"typescript library for parsing, loading, rendering and interacting with DICOM images","repository":{"url":"https://github.com/dvisionlab/Larvitar.git","type":"git"},"main":"dist/larvitar.js","types":"dist/index.d.ts","files":["dist","imaging/**/*.d.ts"],"scripts":{"coverage":"typescript-coverage-report","generate-docs":"node_modules/.bin/jsdoc -c jsdoc.json","build":"webpack --config ./bundler/webpack.prod.js && cp ./dist/larvitar.js ./docs/examples/larvitar.js","dev":"webpack --progress --config ./bundler/webpack.dev.js && cp ./dist/larvitar.js ./docs/examples/larvitar.js","dev-wip":"webpack serve --config ./bundler/webpack.dev-wip.js"},"author":"Simone Manini <simone.manini@dvisionlab.com> (https://www.dvisionlab.com)","contributors":["Mattia Ronzoni <mattia.ronzoni@dvisionlab.com> (https://www.dvisionlab.com)","Sara Zanchi <sara.zanchi@dvisionlab.com> (https://www.dvisionlab.com)","Ale Re <ale.re@dvisionlab.com> (https://www.dvisionlab.com)","Laura Borghesi Re <laura.borghesi@dvisionlab.com> (https://www.dvisionlab.com)"],"license":"MIT","dependencies":{"@rollup/plugin-commonjs":"^17.1.0","cornerstone-core":"^2.6.1","cornerstone-file-image-loader":"^0.3.0","cornerstone-tools":"^6.0.7","cornerstone-wado-image-loader":"^4.13.2","cornerstone-web-image-loader":"^2.1.1","crypto-js":"^4.1.1","dicom-character-set":"^1.0.3","dicom-parser":"^1.8.13","docdash":"^1.2.0","hammerjs":"^2.0.8","jpeg-lossless-decoder-js":"^2.0.7","keycode-js":"^3.1.0","lodash":"^4.17.15","pako":"^1.0.10","papaparse":"^5.3.0","pdfjs-dist":"^3.8.162","plotly.js-dist-min":"^2.27.1","uuid":"^8.3.2"},"devDependencies":{"@babel/core":"^7.21.8","@types/cornerstone-core":"^2.3.0","@types/crypto-js":"^4.1.1","@types/hammerjs":"^2.0.41","@types/lodash":"^4.14.192","@types/papaparse":"^5.3.7","@types/pdfjs-dist":"^2.10.378","@types/plotly.js":"^2.12.30","@types/plotly.js-dist-min":"^2.3.4","@types/uuid":"^9.0.1","babel-loader":"^9.1.2","clean-webpack-plugin":"^4.0.0","copy-webpack-plugin":"^11.0.0","fs":"^0.0.1-security","html-loader":"^4.2.0","html-webpack-plugin":"^5.5.0","ip":"^1.1.8","jsdoc":"^3.6.4","portfinder-sync":"^0.0.2","ts-loader":"^9.4.2","typescript":"^5.0.2","typescript-coverage-report":"^0.7.0","webpack":"^5.76.3","webpack-bundle-analyzer":"^4.8.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.13.1"}}');

/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			id: moduleId,
/******/ 			loaded: false,
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Flag the module as loaded
/******/ 		module.loaded = true;
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/global */
/******/ 	(() => {
/******/ 		__webpack_require__.g = (function() {
/******/ 			if (typeof globalThis === 'object') return globalThis;
/******/ 			try {
/******/ 				return this || new Function('return this')();
/******/ 			} catch (e) {
/******/ 				if (typeof window === 'object') return window;
/******/ 			}
/******/ 		})();
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/node module decorator */
/******/ 	(() => {
/******/ 		__webpack_require__.nmd = (module) => {
/******/ 			module.paths = [];
/******/ 			if (!module.children) module.children = [];
/******/ 			return module;
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
/******/ 	
/******/ 	// startup
/******/ 	// Load entry module and return exports
/******/ 	// This entry module is referenced by other modules so it can't be inlined
/******/ 	var __webpack_exports__ = __webpack_require__(8492);
/******/ 	
/******/ 	return __webpack_exports__;
/******/ })()
;
});
//# sourceMappingURL=larvitar.js.map